<?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>106868</bug_id>
          
          <creation_ts>2013-01-14 21:04:41 -0800</creation_ts>
          <short_desc>DFG should not use a graph that is a vector, Nodes shouldn&apos;t move after allocation, and we should always refer to nodes by Node*</short_desc>
          <delta_ts>2013-01-29 00:03:04 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>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>
          <dependson>107147</dependson>
    
    <dependson>107381</dependson>
    
    <dependson>107616</dependson>
    
    <dependson>107860</dependson>
    
    <dependson>107996</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>barraclough</cc>
    
    <cc>ggaren</cc>
    
    <cc>gtk-ews</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mhahnenberg</cc>
    
    <cc>msaboff</cc>
    
    <cc>oliver</cc>
    
    <cc>rakuco</cc>
    
    <cc>sam</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>806941</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-01-14 21:04:41 -0800</bug_when>
    <thetext>This will be painful.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>806942</commentid>
    <comment_count>1</comment_count>
      <attachid>182693</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-01-14 21:05:41 -0800</bug_when>
    <thetext>Created attachment 182693
work in progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>807800</commentid>
    <comment_count>2</comment_count>
      <attachid>182866</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-01-15 16:14:58 -0800</bug_when>
    <thetext>Created attachment 182866
work in progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>807823</commentid>
    <comment_count>3</comment_count>
      <attachid>182874</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-01-15 16:54:34 -0800</bug_when>
    <thetext>Created attachment 182874
work in progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>807953</commentid>
    <comment_count>4</comment_count>
      <attachid>182907</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-01-15 19:29:39 -0800</bug_when>
    <thetext>Created attachment 182907
work in progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>810320</commentid>
    <comment_count>5</comment_count>
      <attachid>183394</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-01-18 00:31:57 -0800</bug_when>
    <thetext>Created attachment 183394
work in progress

Adding a notion of a NodeIterator, which will make walking over nodes, and inserting nodes, easier and less error-prone.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>811899</commentid>
    <comment_count>6</comment_count>
      <attachid>183726</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-01-21 00:22:36 -0800</bug_when>
    <thetext>Created attachment 183726
work in progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>812411</commentid>
    <comment_count>7</comment_count>
      <attachid>183835</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-01-21 15:07:12 -0800</bug_when>
    <thetext>Created attachment 183835
work in progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>813503</commentid>
    <comment_count>8</comment_count>
      <attachid>184064</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-01-22 15:53:57 -0800</bug_when>
    <thetext>Created attachment 184064
work in progres</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>813853</commentid>
    <comment_count>9</comment_count>
      <attachid>184144</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-01-22 22:41:44 -0800</bug_when>
    <thetext>Created attachment 184144
work in progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>814473</commentid>
    <comment_count>10</comment_count>
      <attachid>184276</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-01-23 12:10:04 -0800</bug_when>
    <thetext>Created attachment 184276
work in progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>814847</commentid>
    <comment_count>11</comment_count>
      <attachid>184356</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-01-23 17:01:53 -0800</bug_when>
    <thetext>Created attachment 184356
work in progress

Backing up before I do another rebase.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>815751</commentid>
    <comment_count>12</comment_count>
      <attachid>184559</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-01-24 12:58:54 -0800</bug_when>
    <thetext>Created attachment 184559
WRONG PATCH</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>815752</commentid>
    <comment_count>13</comment_count>
      <attachid>184560</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-01-24 12:59:33 -0800</bug_when>
    <thetext>Created attachment 184560
work in progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>815800</commentid>
    <comment_count>14</comment_count>
      <attachid>184572</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-01-24 13:51:38 -0800</bug_when>
    <thetext>Created attachment 184572
work in progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>817257</commentid>
    <comment_count>15</comment_count>
      <attachid>184883</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-01-26 13:43:14 -0800</bug_when>
    <thetext>Created attachment 184883
work in progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>817284</commentid>
    <comment_count>16</comment_count>
      <attachid>184891</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-01-26 16:29:02 -0800</bug_when>
    <thetext>Created attachment 184891
work in progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>817295</commentid>
    <comment_count>17</comment_count>
      <attachid>184894</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-01-26 18:27:51 -0800</bug_when>
    <thetext>Created attachment 184894
work in progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>817411</commentid>
    <comment_count>18</comment_count>
      <attachid>184922</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-01-27 13:32:53 -0800</bug_when>
    <thetext>Created attachment 184922
work in progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>817476</commentid>
    <comment_count>19</comment_count>
      <attachid>184930</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-01-27 19:33:31 -0800</bug_when>
    <thetext>Created attachment 184930
it&apos;s starting to compile

Haven&apos;t done the 32-bit specific parts yet.  It doesn&apos;t compile yet, but most of the bigger issues appear to be resolved.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>818078</commentid>
    <comment_count>20</comment_count>
      <attachid>185058</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-01-28 14:05:34 -0800</bug_when>
    <thetext>Created attachment 185058
it compiles

Crashes on launch, of course</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>818170</commentid>
    <comment_count>21</comment_count>
      <attachid>185080</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-01-28 15:15:17 -0800</bug_when>
    <thetext>Created attachment 185080
it runs things

Haven&apos;t run all of the tests, yet.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>818255</commentid>
    <comment_count>22</comment_count>
      <attachid>185099</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-01-28 16:36:21 -0800</bug_when>
    <thetext>Created attachment 185099
1% SunSpider speed-up so far</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>818355</commentid>
    <comment_count>23</comment_count>
      <attachid>185127</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-01-28 18:24:50 -0800</bug_when>
    <thetext>Created attachment 185127
the patch

It passes tests and stuff.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>818360</commentid>
    <comment_count>24</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2013-01-28 18:28:34 -0800</bug_when>
    <thetext>(In reply to comment #23)
&gt; Created an attachment (id=185127) [details]
&gt; the patch
&gt; 
&gt; It passes tests and stuff.

how&apos;s basic browsing? (or is that &quot;and stuff&quot;?)

Might be worth trying doing some tests where every additional node causes a realloc to try and confirm that you&apos;ve got all the possible release after free paths</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>818361</commentid>
    <comment_count>25</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-01-28 18:29:15 -0800</bug_when>
    <thetext>Attachment 185127 did not pass style-queue:

Source/JavaScriptCore/dfg/DFGArgumentsSimplificationPhase.cpp:431:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/JavaScriptCore/dfg/DFGArgumentsSimplificationPhase.cpp:708:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/JavaScriptCore/dfg/DFGBasicBlock.h:105:  The parameter name &quot;valueParams&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/dfg/DFGAbstractState.cpp:596:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
Source/JavaScriptCore/dfg/DFGAbstractState.cpp:841:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/JavaScriptCore/dfg/DFGGraph.cpp:341:  _node is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/JavaScriptCore/dfg/DFGGraph.cpp:343:  _childIdx is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/JavaScriptCore/dfg/DFGGraph.cpp:344:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/JavaScriptCore/dfg/DFGGraph.cpp:352:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/JavaScriptCore/dfg/DFGGraph.cpp:443:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/JavaScriptCore/dfg/DFGCFGSimplificationPhase.cpp:383:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/JavaScriptCore/dfg/DFGCFGSimplificationPhase.cpp:476:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/JavaScriptCore/dfg/DFGCFGSimplificationPhase.cpp:477:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/JavaScriptCore/dfg/DFGCFGSimplificationPhase.cpp:478:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/JavaScriptCore/dfg/DFGCFGSimplificationPhase.cpp:647:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:188:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:2853:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/JavaScriptCore/dfg/DFGGraph.h:610:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/JavaScriptCore/dfg/DFGValidate.cpp:156:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/JavaScriptCore/dfg/DFGValidate.cpp:157:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/JavaScriptCore/dfg/DFGValidate.cpp:158:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/JavaScriptCore/dfg/DFGValidate.cpp:159:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/JavaScriptCore/dfg/DFGValidate.cpp:166:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/JavaScriptCore/dfg/DFGValidate.cpp:167:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/JavaScriptCore/dfg/DFGValidate.cpp:168:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp:3263:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp:3264:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp:3265:  Weird number of spaces Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/CMakeLists.txt&apos;, u&apos;Source/JavaScriptCore/ChangeLog&apos;, u&apos;Source/JavaScriptCore/GNUmakefile.list.am&apos;, u&apos;Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj&apos;, u&apos;Source/JavaScriptCore/Target.pri&apos;, u&apos;Source/JavaScriptCore/bytecode/DataFormat.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGAbstractState.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGAbstractState.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGAbstractValue.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGAdjacencyList.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGAllocator.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGArgumentsSimplificationPhase.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGArrayMode.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGArrayMode.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGArrayifySlowPathGenerator.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGBasicBlock.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGBasicBlockInlines.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGCFAPhase.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGCFGSimplificationPhase.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGCSEPhase.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGCommon.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGCommon.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGConstantFoldingPhase.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGDisassembler.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGDisassembler.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGDriver.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGEdge.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGEdge.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGFixupPhase.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGGenerationInfo.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGGraph.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGGraph.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGInsertionSet.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGJITCompiler.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGJITCompiler.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGLongLivedState.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGLongLivedState.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGMinifiedID.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGMinifiedNode.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGMinifiedNode.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGNode.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGNode.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGNodeAllocator.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGOSRExit.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGOSRExit.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGOSRExitCompiler.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGOSRExitCompiler32_64.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGOSRExitCompiler64.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGOperations.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGPhase.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGPhase.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGPredictionPropagationPhase.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGScoreBoard.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGSilentRegisterSavePlan.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGSlowPathGenerator.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGSpeculativeJIT.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGStructureAbstractValue.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGStructureCheckHoistingPhase.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGValidate.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGValidate.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGValueSource.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGValueSource.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGVirtualRegisterAllocationPhase.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/FunctionExecutableDump.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/FunctionExecutableDump.h&apos;, u&apos;Source/JavaScriptCore/runtime/JSGlobalData.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/JSGlobalData.h&apos;, u&apos;Source/JavaScriptCore/runtime/Options.h&apos;]&quot; exit_code: 1
at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/JavaScriptCore/dfg/DFGPredictionPropagationPhase.cpp:581:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/JavaScriptCore/dfg/DFGPredictionPropagationPhase.cpp:582:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/JavaScriptCore/dfg/DFGPredictionPropagationPhase.cpp:643:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/JavaScriptCore/dfg/DFGPredictionPropagationPhase.cpp:644:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/JavaScriptCore/dfg/DFGPredictionPropagationPhase.cpp:675:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/JavaScriptCore/dfg/DFGPredictionPropagationPhase.cpp:839:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/JavaScriptCore/dfg/DFGPredictionPropagationPhase.cpp:942:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/JavaScriptCore/dfg/DFGPredictionPropagationPhase.cpp:955:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Total errors found: 36 in 69 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>818367</commentid>
    <comment_count>26</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-01-28 18:31:11 -0800</bug_when>
    <thetext>(In reply to comment #24)
&gt; (In reply to comment #23)
&gt; &gt; Created an attachment (id=185127) [details] [details]
&gt; &gt; the patch
&gt; &gt; 
&gt; &gt; It passes tests and stuff.
&gt; 
&gt; how&apos;s basic browsing? (or is that &quot;and stuff&quot;?)
&gt; 
&gt; Might be worth trying doing some tests where every additional node causes a realloc to try and confirm that you&apos;ve got all the possible release after free paths

What do you mean by realloc?  There is no realloc.  There is no vector.  Nodes don&apos;t move.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>818371</commentid>
    <comment_count>27</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2013-01-28 18:34:55 -0800</bug_when>
    <thetext>(In reply to comment #26)
&gt; (In reply to comment #24)
&gt; &gt; (In reply to comment #23)
&gt; &gt; &gt; Created an attachment (id=185127) [details] [details] [details]
&gt; &gt; &gt; the patch
&gt; &gt; &gt; 
&gt; &gt; &gt; It passes tests and stuff.
&gt; &gt; 
&gt; &gt; how&apos;s basic browsing? (or is that &quot;and stuff&quot;?)
&gt; &gt; 
&gt; &gt; Might be worth trying doing some tests where every additional node causes a realloc to try and confirm that you&apos;ve got all the possible release after free paths
&gt; 
&gt; What do you mean by realloc?  There is no realloc.  There is no vector.  Nodes don&apos;t move.

okie dokie; basic browsing?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>818373</commentid>
    <comment_count>28</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-01-28 18:37:06 -0800</bug_when>
    <thetext>(In reply to comment #27)
&gt; (In reply to comment #26)
&gt; &gt; (In reply to comment #24)
&gt; &gt; &gt; (In reply to comment #23)
&gt; &gt; &gt; &gt; Created an attachment (id=185127) [details] [details] [details] [details]
&gt; &gt; &gt; &gt; the patch
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; It passes tests and stuff.
&gt; &gt; &gt; 
&gt; &gt; &gt; how&apos;s basic browsing? (or is that &quot;and stuff&quot;?)
&gt; &gt; &gt; 
&gt; &gt; &gt; Might be worth trying doing some tests where every additional node causes a realloc to try and confirm that you&apos;ve got all the possible release after free paths
&gt; &gt; 
&gt; &gt; What do you mean by realloc?  There is no realloc.  There is no vector.  Nodes don&apos;t move.
&gt; 
&gt; okie dokie; basic browsing?

I just successfully sent myself an e-mail in gmail.

In a debug build.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>818384</commentid>
    <comment_count>29</comment_count>
      <attachid>185127</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-01-28 18:50:14 -0800</bug_when>
    <thetext>Comment on attachment 185127
the patch

Attachment 185127 did not pass win-ews (win):
Output: http://queues.webkit.org/results/16160841</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>818396</commentid>
    <comment_count>30</comment_count>
      <attachid>185127</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2013-01-28 19:10:41 -0800</bug_when>
    <thetext>Comment on attachment 185127
the patch

Could you remove DFG::Allocator::free ? Also wonder if we should make DFG::Allocator require T have a member that shows we know it&apos;s safe w.r.t DFG::Allocator, but that&apos;s not necessary for this patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>818398</commentid>
    <comment_count>31</comment_count>
      <attachid>185127</attachid>
    <who name="kov&apos;s GTK+ EWS bot">gtk-ews</who>
    <bug_when>2013-01-28 19:14:42 -0800</bug_when>
    <thetext>Comment on attachment 185127
the patch

Attachment 185127 did not pass gtk-ews (gtk):
Output: http://queues.webkit.org/results/16185037</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>818404</commentid>
    <comment_count>32</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-01-28 19:37:25 -0800</bug_when>
    <thetext>(In reply to comment #30)
&gt; (From update of attachment 185127 [details])
&gt; Could you remove DFG::Allocator::free ? Also wonder if we should make DFG::Allocator require T have a member that shows we know it&apos;s safe w.r.t DFG::Allocator, but that&apos;s not necessary for this patch.

I was keeping free() because I want to use it in my next patch.

I mean, if we&apos;re super crazy about not introducing dead code then I should also remove all of the free list logic. 

I can do it, but I&apos;d rather be able to use Allocator without further changes for the next stuff I want to do (refactor phi building).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>818454</commentid>
    <comment_count>33</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2013-01-28 20:56:03 -0800</bug_when>
    <thetext>(In reply to comment #32)
&gt; (In reply to comment #30)
&gt; &gt; (From update of attachment 185127 [details] [details])
&gt; &gt; Could you remove DFG::Allocator::free ? Also wonder if we should make DFG::Allocator require T have a member that shows we know it&apos;s safe w.r.t DFG::Allocator, but that&apos;s not necessary for this patch.
&gt; 
&gt; I was keeping free() because I want to use it in my next patch.
&gt; 
&gt; I mean, if we&apos;re super crazy about not introducing dead code then I should also remove all of the free list logic. 
&gt; 
&gt; I can do it, but I&apos;d rather be able to use Allocator without further changes for the next stuff I want to do (refactor phi building).

okie dokie, my primary concern is that by switching from node index to node* you expose paths that may not previously have been concerned by it to pointer invalidation</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>818487</commentid>
    <comment_count>34</comment_count>
      <attachid>185150</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-01-28 21:36:39 -0800</bug_when>
    <thetext>Created attachment 185150
patch for landing

Attempting to fix Windows, Gtk, and style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>818489</commentid>
    <comment_count>35</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-01-28 21:38:52 -0800</bug_when>
    <thetext>(In reply to comment #33)
&gt; (In reply to comment #32)
&gt; &gt; (In reply to comment #30)
&gt; &gt; &gt; (From update of attachment 185127 [details] [details] [details])
&gt; &gt; &gt; Could you remove DFG::Allocator::free ? Also wonder if we should make DFG::Allocator require T have a member that shows we know it&apos;s safe w.r.t DFG::Allocator, but that&apos;s not necessary for this patch.
&gt; &gt; 
&gt; &gt; I was keeping free() because I want to use it in my next patch.
&gt; &gt; 
&gt; &gt; I mean, if we&apos;re super crazy about not introducing dead code then I should also remove all of the free list logic. 
&gt; &gt; 
&gt; &gt; I can do it, but I&apos;d rather be able to use Allocator without further changes for the next stuff I want to do (refactor phi building).
&gt; 
&gt; okie dokie, my primary concern is that by switching from node index to node* you expose paths that may not previously have been concerned by it to pointer invalidation

Of course we would do so.  But my plan is to only call free() on nodes that have zero ref count, and that are already Phantoms or Nops, and are being removed from their basic blocks.  That should be safe.

And of course there may be paths that somehow stash Node* (previously, NodeIndex) to nodes that have zero ref count and are Phantom or Nop.  But hey, this is the fun of software.  You can always get it wrong.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>818494</commentid>
    <comment_count>36</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-01-28 21:41:53 -0800</bug_when>
    <thetext>Attachment 185150 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/CMakeLists.txt&apos;, u&apos;Source/JavaScriptCore/ChangeLog&apos;, u&apos;Source/JavaScriptCore/GNUmakefile.list.am&apos;, u&apos;Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj&apos;, u&apos;Source/JavaScriptCore/Target.pri&apos;, u&apos;Source/JavaScriptCore/bytecode/DataFormat.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGAbstractState.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGAbstractState.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGAbstractValue.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGAdjacencyList.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGAllocator.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGArgumentsSimplificationPhase.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGArrayMode.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGArrayMode.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGArrayifySlowPathGenerator.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGBasicBlock.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGBasicBlockInlines.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGCFAPhase.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGCFGSimplificationPhase.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGCSEPhase.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGCommon.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGCommon.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGConstantFoldingPhase.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGDisassembler.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGDisassembler.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGDriver.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGEdge.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGEdge.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGFixupPhase.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGGenerationInfo.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGGraph.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGGraph.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGInsertionSet.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGJITCompiler.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGJITCompiler.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGLongLivedState.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGLongLivedState.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGMinifiedID.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGMinifiedNode.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGMinifiedNode.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGNode.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGNode.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGNodeAllocator.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGOSRExit.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGOSRExit.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGOSRExitCompiler.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGOSRExitCompiler32_64.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGOSRExitCompiler64.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGOperations.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGPhase.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGPhase.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGPredictionPropagationPhase.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGScoreBoard.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGSilentRegisterSavePlan.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGSlowPathGenerator.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGSpeculativeJIT.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGStructureAbstractValue.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGStructureCheckHoistingPhase.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGValidate.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGValidate.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGValueSource.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGValueSource.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGVirtualRegisterAllocationPhase.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/FunctionExecutableDump.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/FunctionExecutableDump.h&apos;, u&apos;Source/JavaScriptCore/runtime/JSGlobalData.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/JSGlobalData.h&apos;, u&apos;Source/JavaScriptCore/runtime/Options.h&apos;]&quot; exit_code: 1
Source/JavaScriptCore/dfg/DFGBasicBlock.h:105:  The parameter name &quot;valueParams&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/dfg/DFGGraph.cpp:341:  _node is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/JavaScriptCore/dfg/DFGGraph.cpp:343:  _childIdx is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/JavaScriptCore/dfg/DFGGraph.cpp:352:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Total errors found: 4 in 69 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>818520</commentid>
    <comment_count>37</comment_count>
      <attachid>185150</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-01-28 22:07:09 -0800</bug_when>
    <thetext>Comment on attachment 185150
patch for landing

Attachment 185150 did not pass win-ews (win):
Output: http://queues.webkit.org/results/16182330</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>818567</commentid>
    <comment_count>38</comment_count>
      <attachid>185166</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-01-28 22:53:43 -0800</bug_when>
    <thetext>Created attachment 185166
patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>818573</commentid>
    <comment_count>39</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-01-28 22:56:08 -0800</bug_when>
    <thetext>Attachment 185166 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/CMakeLists.txt&apos;, u&apos;Source/JavaScriptCore/ChangeLog&apos;, u&apos;Source/JavaScriptCore/GNUmakefile.list.am&apos;, u&apos;Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj&apos;, u&apos;Source/JavaScriptCore/Target.pri&apos;, u&apos;Source/JavaScriptCore/bytecode/DataFormat.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGAbstractState.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGAbstractState.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGAbstractValue.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGAdjacencyList.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGAllocator.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGArgumentsSimplificationPhase.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGArrayMode.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGArrayMode.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGArrayifySlowPathGenerator.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGBasicBlock.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGBasicBlockInlines.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGCFAPhase.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGCFGSimplificationPhase.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGCSEPhase.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGCommon.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGCommon.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGConstantFoldingPhase.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGDisassembler.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGDisassembler.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGDriver.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGEdge.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGEdge.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGFixupPhase.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGGenerationInfo.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGGraph.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGGraph.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGInsertionSet.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGJITCompiler.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGJITCompiler.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGLongLivedState.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGLongLivedState.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGMinifiedID.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGMinifiedNode.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGMinifiedNode.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGNode.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGNode.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGNodeAllocator.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGOSRExit.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGOSRExit.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGOSRExitCompiler.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGOSRExitCompiler32_64.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGOSRExitCompiler64.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGOperations.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGPhase.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGPhase.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGPredictionPropagationPhase.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGScoreBoard.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGSilentRegisterSavePlan.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGSlowPathGenerator.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGSpeculativeJIT.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGStructureAbstractValue.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGStructureCheckHoistingPhase.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGValidate.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGValidate.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGValueSource.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGValueSource.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGVirtualRegisterAllocationPhase.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/FunctionExecutableDump.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/FunctionExecutableDump.h&apos;, u&apos;Source/JavaScriptCore/runtime/JSGlobalData.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/JSGlobalData.h&apos;, u&apos;Source/JavaScriptCore/runtime/Options.h&apos;]&quot; exit_code: 1
Source/JavaScriptCore/dfg/DFGBasicBlock.h:105:  The parameter name &quot;valueParams&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/dfg/DFGGraph.cpp:341:  _node is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/JavaScriptCore/dfg/DFGGraph.cpp:343:  _childIdx is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/JavaScriptCore/dfg/DFGGraph.cpp:352:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Total errors found: 4 in 69 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>818639</commentid>
    <comment_count>40</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-01-29 00:03:04 -0800</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/141069</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>182693</attachid>
            <date>2013-01-14 21:05:41 -0800</date>
            <delta_ts>2013-01-15 16:14:58 -0800</delta_ts>
            <desc>work in progress</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>50986</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWRqYWNlbmN5TGlzdC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWRqYWNlbmN5TGlzdC5oCShy
ZXZpc2lvbiAxMzk1ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FkamFjZW5j
eUxpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDExLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTcsNyArNTcsNyBAQCBwdWJsaWM6CiAgICAgICAgIH0K
ICAgICB9CiAgICAgCi0gICAgQWRqYWNlbmN5TGlzdChLaW5kIGtpbmQsIE5vZGVJbmRleCBjaGls
ZDEsIE5vZGVJbmRleCBjaGlsZDIsIE5vZGVJbmRleCBjaGlsZDMpCisgICAgQWRqYWNlbmN5TGlz
dChLaW5kIGtpbmQsIE5vZGUqIGNoaWxkMSwgTm9kZSogY2hpbGQyLCBOb2RlKiBjaGlsZDMpCiAj
aWYgIUFTU0VSVF9ESVNBQkxFRAogICAgICAgICA6IG1fa2luZChGaXhlZCkKICNlbmRpZgpAQCAt
MTE4LDcgKzExOCw3IEBAIHB1YmxpYzoKICAgICAgICAgY2hpbGQoMikgPSBjaGlsZDM7CiAgICAg
fQogICAgIAotICAgIHZvaWQgaW5pdGlhbGl6ZShOb2RlSW5kZXggY2hpbGQxID0gTm9Ob2RlLCBO
b2RlSW5kZXggY2hpbGQyID0gTm9Ob2RlLCBOb2RlSW5kZXggY2hpbGQzID0gTm9Ob2RlKQorICAg
IHZvaWQgaW5pdGlhbGl6ZShOb2RlKiBjaGlsZDEgPSAwLCBOb2RlKiBjaGlsZDIgPSAwLCBOb2Rl
KiBjaGlsZDMgPSAwKQogICAgIHsKICAgICAgICAgaW5pdGlhbGl6ZShFZGdlKGNoaWxkMSksIEVk
Z2UoY2hpbGQyKSwgRWRnZShjaGlsZDMpKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0FsbG9jYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQWxsb2NhdG9yLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0FsbG9jYXRvci5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE2MSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIERG
R0FsbG9jYXRvcl9oCisjZGVmaW5lIERGR0FsbG9jYXRvcl9oCisKKyNpbmNsdWRlIDx3dGYvUGxh
dGZvcm0uaD4KKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSA8d3RmL1BhZ2VBbGxv
Y2F0aW9uQWxpZ25lZC5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIFQ+CitjbGFzcyBBbGxvY2F0b3IgeworcHVibGljOgorICAgIEFsbG9j
YXRvcigpOworICAgIH5BbGxvY2F0b3IoKTsKKyAgICAKKyAgICB2b2lkKiBhbGxvY2F0ZSgpOyAv
LyB1c2UgcGxhY2VtZW50IG5ldyB0byBhbGxvY2F0ZQorICAgIHZvaWQgZnJlZShUKik7IC8vIGNh
bGwgZnJlZSB0byBkZWxldGUKKyAgICAKKyAgICB1bnNpZ25lZCBpbmRleE9mKFQqKTsKKyAgICAK
KyAgICBzdGF0aWMgQWxsb2NhdG9yKiBhbGxvY2F0b3JPZihUKik7CisgICAgCitwcml2YXRlOgor
ICAgIHZvaWQqIGZvcmNlQWxsb2NhdGUoKTsKKyAgICB2b2lkKiBhbGxvY2F0ZVNsb3coKTsKKyAg
ICAKKyAgICBzdHJ1Y3QgUmVnaW9uIHsKKyAgICAgICAgc3RhdGljIHNpemVfdCBzaXplKCkgeyBy
ZXR1cm4gNjQgKiBLQjsgfQorICAgICAgICBzdGF0aWMgc2l6ZV90IGhlYWRlclNpemUoKSB7IHJl
dHVybiBzdGQ6Om1heChzaXplb2YoUmVnaW9uKSwgc2l6ZW9mKFQpKTsgfQorICAgICAgICBzdGF0
aWMgdW5zaWduZWQgbnVtYmVyT2ZUaGluZ3NQZXJSZWdpb24oKSB7IHJldHVybiAoc2l6ZSgpIC0g
aGVhZGVyU2l6ZSgpKSAvIHNpemVvZihUKTsgfQorICAgICAgICBUKiBkYXRhKCkgeyByZXR1cm4g
Yml0d2lzZV9jYXN0PFQqPihiaXR3aXNlX2Nhc3Q8Y2hhcio+KHRoaXMpICsgaGVhZGVyU2l6ZSgp
KTsgfQorICAgICAgICBib29sIGlzSW5UaGlzUmVnaW9uKFQqIHBvaW50ZXIpIHsgcmV0dXJuIHN0
YXRpY19jYXN0PHVuc2lnbmVkPihwb2ludGVyIC0gZGF0YSgpKSA8IG51bWJlck9mVGhpbmdzUGVy
UmVnaW9uKCk7IH0KKyAgICAgICAgUmVnaW9uKiByZWdpb25Gb3IoVCogcG9pbnRlcikgeyByZXR1
cm4gYml0d2lzZV9jYXN0PFJlZ2lvbio+KGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KHBvaW50ZXIp
ICYgfihzaXplKCkgLSAxKSk7IH0KKyAgICAgICAgCisgICAgICAgIFBhZ2VBbGxvY2F0aW9uQWxp
Z25lZCBtX2FsbG9jYXRpb247CisgICAgICAgIEFsbG9jYXRvciogbV9hbGxvY2F0b3I7CisgICAg
ICAgIFJlZ2lvbiogbV9uZXh0OworICAgIH07CisgICAgCisgICAgUmVnaW9uKiBtX3JlZ2lvbkhl
YWQ7CisgICAgdm9pZCoqIG1fZnJlZUxpc3RIZWFkOworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUg
VD4KK2lubGluZSBBbGxvY2F0b3I6OkFsbG9jYXRvcigpCisgICAgOiBtX3JlZ2lvbkhlYWQoMCkK
KyAgICAsIG1fZnJlZUxpc3RIZWFkKDApCit7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+Citp
bmxpbmUgQWxsb2NhdG9yOjp+QWxsb2NhdG9yKCkKK3sKKyAgICBmb3IgKFJlZ2lvbiogcmVnaW9u
ID0gbV9yZWdpb25IZWFkOyByZWdpb247KSB7CisgICAgICAgIFJlZ2lvbiogbmV4dFJlZ2lvbiA9
IHJlZ2lvbi0+bV9uZXh0OworICAgICAgICByZWdpb24tPm1fYWxsb2NhdGlvbi5kZWFsbG9jYXRl
KCk7CisgICAgICAgIHJlZ2lvbiA9IG5leHRSZWdpb247CisgICAgfQorfQorCit0ZW1wbGF0ZTx0
eXBlbmFtZSBUPgordm9pZCogQWxsb2NhdG9yOjphbGxvY2F0ZSgpCit7CisgICAgaWYgKFVOTElL
RUxZKCFtX2ZyZWVMaXN0SGVhZCkpCisgICAgICAgIHJldHVybiBhbGxvY2F0ZVNsb3coKTsKKyAg
ICByZXR1cm4gZm9yY2VBbGxvY2F0ZSgpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgordm9p
ZCBBbGxvY2F0b3I6OmZyZWUoVCogb2JqZWN0KQoreworICAgIG9iamVjdC0+flQoKTsKKyAgICAK
KyAgICB2b2lkKiogY2VsbCA9IGJpdHdpc2VfY2FzdDx2b2lkKio+KG9iamVjdCk7CisgICAgKmNl
bGwgPSBtX2ZyZWVMaXN0SGVhZDsKKyAgICBtX2ZyZWVMaXN0SGVhZCA9IGNlbGw7Cit9CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIFQ+Cit1bnNpZ25lZCBBbGxvY2F0b3I6OmluZGV4T2YoVCogb2JqZWN0
KQoreworICAgIHVuc2lnbmVkIGJhc2VJbmRleCA9IDA7CisgICAgZm9yIChSZWdpb24qIHJlZ2lv
biA9IG1fcmVnaW9uSGVhZDsgcmVnaW9uOyByZWdpb24gPSByZWdpb24tPm1fbmV4dCkgeworICAg
ICAgICBpZiAocmVnaW9uLT5pc0luVGhpc1JlZ2lvbihvYmplY3QpKQorICAgICAgICAgICAgcmV0
dXJuIGJhc2VJbmRleCArIChvYmplY3QgLSByZWdpb24tPmRhdGEoKSk7CisgICAgICAgIGJhc2VJ
bmRleCArPSBudW1iZXJPZlRoaW5nc1BlclJlZ2lvbjsKKyAgICB9CisgICAgQ1JBU0goKTsKKyAg
ICByZXR1cm4gMDsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK0FsbG9jYXRvciogQWxsb2Nh
dG9yOjphbGxvY2F0b3JPZihUKiBvYmplY3QpCit7CisgICAgcmV0dXJuIFJlZ2lvbjo6cmVnaW9u
Rm9yKG9iamVjdCktPm1fYWxsb2NhdG9yOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgordm9p
ZCogQWxsb2NhdG9yOjpmb3JjZUFsbG9jYXRlKCkKK3sKKyAgICB2b2lkKiogcmVzdWx0ID0gbV9m
cmVlTGlzdEhlYWQ7CisgICAgbV9mcmVlTGlzdEhlYWQgPSBiaXR3aXNlX2Nhc3Q8dm9pZCoqPigq
cmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgor
dm9pZCogQWxsb2NhdG9yOjphbGxvY2F0ZVNsb3coKQoreworICAgIEFTU0VSVCghbV9mcmVlTGlz
dEhlYWQpOworICAgIAorICAgIFBhZ2VBbGxvY2F0aW9uQWxpZ25lZCBhbGxvY2F0aW9uID0gUGFn
ZUFsbG9jYXRpb25BbGlnbmVkOjphbGxvY2F0ZShSZWdpb246OnNpemUoKSwgUmVnaW9uOjpzaXpl
KCksIE9TQWxsb2NhdG9yOjpKU0dDSGVhcFBhZ2VzKTsKKyAgICBpZiAoIXN0YXRpY19jYXN0PGJv
b2w+KGFsbG9jYXRpb24pKQorICAgICAgICBDUkFTSCgpOworICAgIFJlZ2lvbiogcmVnaW9uID0g
c3RhdGljX2Nhc3Q8UmVnaW9uKj4oYWxsb2NhdGlvbi5iYXNlKCkpOworICAgIHJlZ2lvbi0+bV9h
bGxvY2F0aW9uID0gbV9hbGxvY2F0aW9uOworICAgIHJlZ2lvbi0+bV9hbGxvY3RvciA9IHRoaXM7
CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bWJlck9mVGhpbmdzUGVyUmVnaW9uOyAr
K2kpIHsKKyAgICAgICAgdm9pZCoqIGNlbGwgPSBiaXR3aXNlX2Nhc3Q8dm9pZCoqPihyZWdpb24t
PmRhdGEoKSArIGkpOworICAgICAgICAqY2VsbCA9IG1fZnJlZUxpc3RIZWFkOworICAgICAgICBt
X2ZyZWVMaXN0SGVhZCA9IGNlbGw7CisgICAgfQorICAgIAorICAgIHJlZ2lvbi0+bV9uZXh0ID0g
bV9yZWdpb25IZWFkOworICAgIG1fcmVnaW9uSGVhZCA9IHJlZ2lvbjsKKyAgICAKKyAgICByZXR1
cm4gZm9yY2VBbGxvY2F0ZSgpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNl
bmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR0FsbG9jYXRvcl9oCisKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbi5jcHAJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbi5jcHAJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsNDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGR0NvbW1vbi5oIgorCisjaWYg
RU5BQkxFKERGR19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKwordm9p
ZCBOb2RlUG9pbnRlclRyYWl0czo6ZHVtcChOb2RlKiB2YWx1ZSwgUHJpbnRTdHJlYW0mIG91dCkK
K3sKKyAgICBvdXQucHJpbnQodmFsdWUpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZH
CisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdDb21tb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0NvbW1vbi5oCShyZXZpc2lvbiAxMzk1ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0NvbW1vbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMSwgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTIsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC04MSwxNiArODEs
MTQgQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCi0vLyBUeXBlIGZvciBh
IHJlZmVyZW5jZSB0byBhbm90aGVyIG5vZGUgaW4gdGhlIGdyYXBoLgotdHlwZWRlZiB1aW50MzJf
dCBOb2RlSW5kZXg7Ci1zdGF0aWMgY29uc3QgTm9kZUluZGV4IE5vTm9kZSA9IFVJTlRfTUFYOwor
Y2xhc3MgTm9kZTsKIAogdHlwZWRlZiB1aW50MzJfdCBCbG9ja0luZGV4Owogc3RhdGljIGNvbnN0
IEJsb2NrSW5kZXggTm9CbG9jayA9IFVJTlRfTUFYOwogCi1zdHJ1Y3QgTm9kZUluZGV4VHJhaXRz
IHsKLSAgICBzdGF0aWMgTm9kZUluZGV4IGRlZmF1bHRWYWx1ZSgpIHsgcmV0dXJuIE5vTm9kZTsg
fQotICAgIHN0YXRpYyB2b2lkIGR1bXAoTm9kZUluZGV4IHZhbHVlLCBQcmludFN0cmVhbSYgb3V0
KQorc3RydWN0IE5vZGVQb2ludGVyVHJhaXRzIHsKKyAgICBzdGF0aWMgTm9kZSogZGVmYXVsdFZh
bHVlKCkgeyByZXR1cm4gMDsgfQorICAgIHN0YXRpYyB2b2lkIGR1bXAoTm9kZSogdmFsdWUsIFBy
aW50U3RyZWFtJiBvdXQpOwogICAgIHsKICAgICAgICAgaWYgKHZhbHVlID09IE5vTm9kZSkKICAg
ICAgICAgICAgIG91dC5wcmludGYoIi0iKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHRWRnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
RWRnZS5oCShyZXZpc2lvbiAxMzk1ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0VkZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDExLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDMsNDEgKzQzLDM5IEBAIHB1YmxpYzoKICAgICB7CiAg
ICAgfQogICAgIAotICAgIGV4cGxpY2l0IEVkZ2UoTm9kZUluZGV4IG5vZGVJbmRleCkKLSAgICAg
ICAgOiBtX2VuY29kZWRXb3JkKG1ha2VXb3JkKG5vZGVJbmRleCwgVW50eXBlZFVzZSkpCisgICAg
ZXhwbGljaXQgRWRnZShOb2RlKiBub2RlKQorICAgICAgICA6IG1fZW5jb2RlZFdvcmQobWFrZVdv
cmQobm9kZSwgVW50eXBlZFVzZSkpCiAgICAgewogICAgIH0KICAgICAKLSAgICBFZGdlKE5vZGVJ
bmRleCBub2RlSW5kZXgsIFVzZUtpbmQgdXNlS2luZCkKLSAgICAgICAgOiBtX2VuY29kZWRXb3Jk
KG1ha2VXb3JkKG5vZGVJbmRleCwgdXNlS2luZCkpCisgICAgRWRnZShOb2RlKiBub2RlLCBVc2VL
aW5kIHVzZUtpbmQpCisgICAgICAgIDogbV9lbmNvZGVkV29yZChtYWtlV29yZChub2RlLCB1c2VL
aW5kKSkKICAgICB7CiAgICAgfQogICAgIAotICAgIE5vZGVJbmRleCBpbmRleFVuY2hlY2tlZCgp
IGNvbnN0IHsgcmV0dXJuIG1fZW5jb2RlZFdvcmQgPj4gc2hpZnQoKTsgfQotICAgIE5vZGVJbmRl
eCBpbmRleCgpIGNvbnN0Ci0gICAgewotICAgICAgICBBU1NFUlQoaXNTZXQoKSk7Ci0gICAgICAg
IHJldHVybiBtX2VuY29kZWRXb3JkID4+IHNoaWZ0KCk7Ci0gICAgfQotICAgIHZvaWQgc2V0SW5k
ZXgoTm9kZUluZGV4IG5vZGVJbmRleCkKKyAgICBOb2RlKiBub2RlKCkgY29uc3QgeyByZXR1cm4g
bV9lbmNvZGVkV29yZCAmIH4oKDEgPDwgc2hpZnQoKSkgLSAxKTsgfQorICAgIE5vZGUmIG9wZXJh
dG9yKigpIGNvbnN0IHsgcmV0dXJuICpnZXQoKTsgfQorICAgIE5vZGUqIG9wZXJhdG9yLT4oKSBj
b25zdCB7IHJldHVybiBnZXQoKTsgfQorICAgIAorICAgIHZvaWQgc2V0Tm9kZShOb2RlKiBub2Rl
KQogICAgIHsKLSAgICAgICAgbV9lbmNvZGVkV29yZCA9IG1ha2VXb3JkKG5vZGVJbmRleCwgdXNl
S2luZCgpKTsKKyAgICAgICAgbV9lbmNvZGVkV29yZCA9IG1ha2VXb3JkKG5vZGUsIHVzZUtpbmQo
KSk7CiAgICAgfQogICAgIAogICAgIFVzZUtpbmQgdXNlS2luZCgpIGNvbnN0CiAgICAgewotICAg
ICAgICBBU1NFUlQoaXNTZXQoKSk7CisgICAgICAgIEFTU0VSVChub2RlKCkpOwogICAgICAgICB1
bnNpZ25lZCBtYXNrZWQgPSBtX2VuY29kZWRXb3JkICYgKCgoMSA8PCBzaGlmdCgpKSAtIDEpKTsK
ICAgICAgICAgQVNTRVJUKG1hc2tlZCA8IExhc3RVc2VLaW5kKTsKICAgICAgICAgcmV0dXJuIHN0
YXRpY19jYXN0PFVzZUtpbmQ+KG1hc2tlZCk7CiAgICAgfQogICAgIHZvaWQgc2V0VXNlS2luZChV
c2VLaW5kIHVzZUtpbmQpCiAgICAgewotICAgICAgICBBU1NFUlQoaXNTZXQoKSk7Ci0gICAgICAg
IG1fZW5jb2RlZFdvcmQgPSBtYWtlV29yZChpbmRleCgpLCB1c2VLaW5kKTsKKyAgICAgICAgQVNT
RVJUKG5vZGUoKSk7CisgICAgICAgIG1fZW5jb2RlZFdvcmQgPSBtYWtlV29yZChub2RlKCksIHVz
ZUtpbmQpOwogICAgIH0KICAgICAKLSAgICBib29sIGlzU2V0KCkgY29uc3QgeyByZXR1cm4gaW5k
ZXhVbmNoZWNrZWQoKSAhPSBOb05vZGU7IH0KKyAgICBib29sIGlzU2V0KCkgY29uc3QgeyByZXR1
cm4gISFub2RlKCk7IH0KICAgICAKICAgICB0eXBlZGVmIHZvaWQqIEVkZ2U6OipVbnNwZWNpZmll
ZEJvb2xUeXBlOwogICAgIG9wZXJhdG9yIFVuc3BlY2lmaWVkQm9vbFR5cGUqKCkgY29uc3QgeyBy
ZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxVbnNwZWNpZmllZEJvb2xUeXBlKj4oaXNTZXQoKSk7IH0K
QEAgLTk2LDE3ICs5NCwxOCBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBB
ZGphY2VuY3lMaXN0OwogICAgIAotICAgIHN0YXRpYyB1aW50MzJfdCBzaGlmdCgpIHsgcmV0dXJu
IDQ7IH0KKyAgICBzdGF0aWMgdWludDMyX3Qgc2hpZnQoKSB7IHJldHVybiAyOyB9CiAgICAgCi0g
ICAgc3RhdGljIGludDMyX3QgbWFrZVdvcmQoTm9kZUluZGV4IG5vZGVJbmRleCwgVXNlS2luZCB1
c2VLaW5kKQorICAgIHN0YXRpYyB1aW50cHRyX3QgbWFrZVdvcmQoTm9kZSogbm9kZSwgVXNlS2lu
ZCB1c2VLaW5kKQogICAgIHsKLSAgICAgICAgQVNTRVJUKHN0YXRpY19jYXN0PHVpbnQzMl90Pigo
KHN0YXRpY19jYXN0PGludDMyX3Q+KG5vZGVJbmRleCkgPDwgc2hpZnQoKSkgPj4gc2hpZnQoKSkp
ID09IG5vZGVJbmRleCk7CisgICAgICAgIHVpbnRwdHJfdCB2YWx1ZSA9IGJpdHdpc2VfY2FzdDx1
aW50cHRyX3Q+KG5vZGUpOworICAgICAgICBBU1NFUlQoISh2YWx1ZSAmICgoMSA8PCBzaGlmdCgp
KSAtIDEpKSk7CiAgICAgICAgIEFTU0VSVCh1c2VLaW5kID49IDAgJiYgdXNlS2luZCA8IExhc3RV
c2VLaW5kKTsKICAgICAgICAgQVNTRVJUKExhc3RVc2VLaW5kIDw9ICgxIDw8IHNoaWZ0KCkpKTsK
LSAgICAgICAgcmV0dXJuIChub2RlSW5kZXggPDwgc2hpZnQoKSkgfCB1c2VLaW5kOworICAgICAg
ICByZXR1cm4gdmFsdWUgfCBzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KHVzZUtpbmQpOwogICAgIH0K
ICAgICAKLSAgICBpbnQzMl90IG1fZW5jb2RlZFdvcmQ7CisgICAgdWludHB0cl90IG1fZW5jb2Rl
ZFdvcmQ7CiB9OwogCiBpbmxpbmUgYm9vbCBvcGVyYXRvcj09KEVkZ2Ugbm9kZVVzZSwgTm9kZUlu
ZGV4IG5vZGVJbmRleCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGgu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHJl
dmlzaW9uIDEzOTU4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLCAy
MDEyLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtMzYsNiArMzYsNyBAQAogI2luY2x1ZGUgIkRGR0Jhc2ljQmxv
Y2suaCIKICNpbmNsdWRlICJERkdEb21pbmF0b3JzLmgiCiAjaW5jbHVkZSAiREZHTm9kZS5oIgor
I2luY2x1ZGUgIkRGR05vZGVBbGxvY2F0b3IuaCIKICNpbmNsdWRlICJKU1N0YWNrLmgiCiAjaW5j
bHVkZSAiTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5oIgogI2luY2x1ZGUgPHd0Zi9CaXRW
ZWN0b3IuaD4KQEAgLTgyLDU0ICs4Myw0NSBAQCBlbnVtIEFkZFNwZWN1bGF0aW9uTW9kZSB7CiAv
LwogLy8gPT09IEdyYXBoID09PQogLy8KLS8vIFRoZSBkYXRhZmxvdyBncmFwaCBpcyBhbiBvcmRl
cmVkIHZlY3RvciBvZiBub2Rlcy4KIC8vIFRoZSBvcmRlciBtYXkgYmUgc2lnbmlmaWNhbnQgZm9y
IG5vZGVzIHdpdGggc2lkZS1lZmZlY3RzIChwcm9wZXJ0eSBhY2Nlc3NlcywgdmFsdWUgY29udmVy
c2lvbnMpLgogLy8gTm9kZXMgdGhhdCBhcmUgJ2RlYWQnIHJlbWFpbiBpbiB0aGUgdmVjdG9yIHdp
dGggcmVmQ291bnQgMC4KLWNsYXNzIEdyYXBoIDogcHVibGljIFZlY3RvcjxOb2RlLCA2ND4gewor
Y2xhc3MgR3JhcGggewogcHVibGljOgogICAgIEdyYXBoKEpTR2xvYmFsRGF0YSYsIENvZGVCbG9j
ayosIHVuc2lnbmVkIG9zckVudHJ5Qnl0ZWNvZGVJbmRleCwgY29uc3QgT3BlcmFuZHM8SlNWYWx1
ZT4mIG11c3RIYW5kbGVWYWx1ZXMpOwogICAgIAotICAgIHVzaW5nIFZlY3RvcjxOb2RlLCA2ND46
Om9wZXJhdG9yW107Ci0gICAgdXNpbmcgVmVjdG9yPE5vZGUsIDY0Pjo6YXQ7Ci0gICAgCi0gICAg
Tm9kZSYgb3BlcmF0b3JbXShFZGdlIG5vZGVVc2UpIHsgcmV0dXJuIGF0KG5vZGVVc2UuaW5kZXgo
KSk7IH0KLSAgICBjb25zdCBOb2RlJiBvcGVyYXRvcltdKEVkZ2Ugbm9kZVVzZSkgY29uc3QgeyBy
ZXR1cm4gYXQobm9kZVVzZS5pbmRleCgpKTsgfQotICAgIAotICAgIE5vZGUmIGF0KEVkZ2Ugbm9k
ZVVzZSkgeyByZXR1cm4gYXQobm9kZVVzZS5pbmRleCgpKTsgfQotICAgIGNvbnN0IE5vZGUmIGF0
KEVkZ2Ugbm9kZVVzZSkgY29uc3QgeyByZXR1cm4gYXQobm9kZVVzZS5pbmRleCgpKTsgfQotICAg
IAogICAgIC8vIE1hcmsgYSBub2RlIGFzIGJlaW5nIHJlZmVyZW5jZWQuCi0gICAgdm9pZCByZWYo
Tm9kZUluZGV4IG5vZGVJbmRleCkKKyAgICB2b2lkIHJlZihOb2RlKiBub2RlKQogICAgIHsKLSAg
ICAgICAgTm9kZSYgbm9kZSA9IGF0KG5vZGVJbmRleCk7CiAgICAgICAgIC8vIElmIHRoZSB2YWx1
ZSAoYmVmb3JlIGluY3JlbWVudGluZykgd2FzIGF0IHJlZkNvdW50IHplcm8gdGhlbiB3ZSBuZWVk
IHRvIHJlZiBpdHMgY2hpbGRyZW4uCi0gICAgICAgIGlmIChub2RlLnJlZigpKQotICAgICAgICAg
ICAgcmVmQ2hpbGRyZW4obm9kZUluZGV4KTsKKyAgICAgICAgaWYgKG5vZGUtPnJlZigpKQorICAg
ICAgICAgICAgcmVmQ2hpbGRyZW4obm9kZSk7CiAgICAgfQogICAgIHZvaWQgcmVmKEVkZ2Ugbm9k
ZVVzZSkKICAgICB7Ci0gICAgICAgIHJlZihub2RlVXNlLmluZGV4KCkpOworICAgICAgICByZWYo
bm9kZVVzZS5ub2RlKCkpOwogICAgIH0KICAgICAKLSAgICB2b2lkIGRlcmVmKE5vZGVJbmRleCBu
b2RlSW5kZXgpCisgICAgdm9pZCBkZXJlZihOb2RlKiBub2RlKQogICAgIHsKLSAgICAgICAgaWYg
KCFhdChub2RlSW5kZXgpLnJlZkNvdW50KCkpCisjaWYgIUFTU0VSVF9ESVNBQkxFRAorICAgICAg
ICBpZiAoIW5vZGUtPnJlZkNvdW50KCkpCiAgICAgICAgICAgICBkdW1wKCk7Ci0gICAgICAgIGlm
IChhdChub2RlSW5kZXgpLmRlcmVmKCkpCi0gICAgICAgICAgICBkZXJlZkNoaWxkcmVuKG5vZGVJ
bmRleCk7CisjZW5kaWYKKyAgICAgICAgaWYgKG5vZGUtPmRlcmVmKCkpCisgICAgICAgICAgICBk
ZXJlZkNoaWxkcmVuKG5vZGUpOwogICAgIH0KICAgICB2b2lkIGRlcmVmKEVkZ2Ugbm9kZVVzZSkK
ICAgICB7Ci0gICAgICAgIGRlcmVmKG5vZGVVc2UuaW5kZXgoKSk7CisgICAgICAgIGRlcmVmKG5v
ZGVVc2Uubm9kZSgpKTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBjaGFuZ2VJbmRleChFZGdlJiBl
ZGdlLCBOb2RlSW5kZXggbmV3SW5kZXgsIGJvb2wgY2hhbmdlUmVmID0gdHJ1ZSkKKyAgICB2b2lk
IGNoYW5nZUluZGV4KEVkZ2UmIGVkZ2UsIE5vZGUqIG5ld05vZGUsIGJvb2wgY2hhbmdlUmVmID0g
dHJ1ZSkKICAgICB7CiAgICAgICAgIGlmIChjaGFuZ2VSZWYpIHsKLSAgICAgICAgICAgIHJlZihu
ZXdJbmRleCk7Ci0gICAgICAgICAgICBkZXJlZihlZGdlLmluZGV4KCkpOworICAgICAgICAgICAg
cmVmKG5ld05vZGUpOworICAgICAgICAgICAgZGVyZWYoZWRnZS5ub2RlKCkpOwogICAgICAgICB9
Ci0gICAgICAgIGVkZ2Uuc2V0SW5kZXgobmV3SW5kZXgpOworICAgICAgICBlZGdlLnNldE5vZGUo
bmV3Tm9kZSk7CiAgICAgfQogICAgIAogICAgIHZvaWQgY2hhbmdlRWRnZShFZGdlJiBlZGdlLCBF
ZGdlIG5ld0VkZ2UsIGJvb2wgY2hhbmdlUmVmID0gdHJ1ZSkKQEAgLTE0MSwxMSArMTMzLDExIEBA
IHB1YmxpYzoKICAgICAgICAgZWRnZSA9IG5ld0VkZ2U7CiAgICAgfQogICAgIAotICAgIHZvaWQg
Y29tcGFyZUFuZFN3YXAoRWRnZSYgZWRnZSwgTm9kZUluZGV4IG9sZEluZGV4LCBOb2RlSW5kZXgg
bmV3SW5kZXgsIGJvb2wgY2hhbmdlUmVmKQorICAgIHZvaWQgY29tcGFyZUFuZFN3YXAoRWRnZSYg
ZWRnZSwgTm9kZSogb2xkTm9kZSwgTm9kZSogbmV3Tm9kZSwgYm9vbCBjaGFuZ2VSZWYpCiAgICAg
ewotICAgICAgICBpZiAoZWRnZS5pbmRleCgpICE9IG9sZEluZGV4KQorICAgICAgICBpZiAoZWRn
ZS5ub2RlKCkgIT0gb2xkTm9kZSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgY2hhbmdl
SW5kZXgoZWRnZSwgbmV3SW5kZXgsIGNoYW5nZVJlZik7CisgICAgICAgIGNoYW5nZUluZGV4KGVk
Z2UsIG5ld05vZGUsIGNoYW5nZVJlZik7CiAgICAgfQogICAgIAogICAgIHZvaWQgY29tcGFyZUFu
ZFN3YXAoRWRnZSYgZWRnZSwgRWRnZSBvbGRFZGdlLCBFZGdlIG5ld0VkZ2UsIGJvb2wgY2hhbmdl
UmVmKQpAQCAtMTU1LDI5ICsxNDcsMTYgQEAgcHVibGljOgogICAgICAgICBjaGFuZ2VFZGdlKGVk
Z2UsIG5ld0VkZ2UsIGNoYW5nZVJlZik7CiAgICAgfQogICAgIAotICAgIHZvaWQgY2xlYXJBbmRE
ZXJlZkNoaWxkMShOb2RlJiBub2RlKQotICAgIHsKLSAgICAgICAgaWYgKCFub2RlLmNoaWxkMSgp
KQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBkZXJlZihub2RlLmNoaWxkMSgpKTsKLSAg
ICAgICAgbm9kZS5jaGlsZHJlbi5jaGlsZDEoKSA9IEVkZ2UoKTsKLSAgICB9Ci0KLSAgICB2b2lk
IGNsZWFyQW5kRGVyZWZDaGlsZDIoTm9kZSYgbm9kZSkKKyAgICB2b2lkIGNsZWFyQW5kRGVyZWZD
aGlsZChOb2RlKiBub2RlLCB1bnNpZ25lZCBpbmRleCkKICAgICB7Ci0gICAgICAgIGlmICghbm9k
ZS5jaGlsZDIoKSkKKyAgICAgICAgaWYgKCFub2RlLT5jaGlsZHJlbi5jaGlsZChpbmRleCkpCiAg
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGRlcmVmKG5vZGUuY2hpbGQyKCkpOwotICAgICAg
ICBub2RlLmNoaWxkcmVuLmNoaWxkMigpID0gRWRnZSgpOwotICAgIH0KLQotICAgIHZvaWQgY2xl
YXJBbmREZXJlZkNoaWxkMyhOb2RlJiBub2RlKQotICAgIHsKLSAgICAgICAgaWYgKCFub2RlLmNo
aWxkMygpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBkZXJlZihub2RlLmNoaWxkMygp
KTsKLSAgICAgICAgbm9kZS5jaGlsZHJlbi5jaGlsZDMoKSA9IEVkZ2UoKTsKKyAgICAgICAgZGVy
ZWYobm9kZS0+Y2hpbGRyZW4uY2hpbGQoaW5kZXgpKTsKKyAgICAgICAgbm9kZS5jaGlsZHJlbi5z
ZXRDaGlsZChpbmRleCwgRWRnZSgpKTsKICAgICB9CisgICAgdm9pZCBjbGVhckFuZERlcmVmQ2hp
bGQxKE5vZGUqIG5vZGUpIHsgY2xlYXJBbmREZXJlZkNoaWxkKG5vZGUsIDApOyB9CisgICAgdm9p
ZCBjbGVhckFuZERlcmVmQ2hpbGQyKE5vZGUqIG5vZGUpIHsgY2xlYXJBbmREZXJlZkNoaWxkKG5v
ZGUsIDEpOyB9CisgICAgdm9pZCBjbGVhckFuZERlcmVmQ2hpbGQzKE5vZGUqIG5vZGUpIHsgY2xl
YXJBbmREZXJlZkNoaWxkKG5vZGUsIDIpOyB9CiAgICAgCiAgICAgLy8gQ2FsbCB0aGlzIGlmIHlv
dSd2ZSBtb2RpZmllZCB0aGUgcmVmZXJlbmNlIGNvdW50cyBvZiBub2RlcyB0aGF0IGRlYWwgd2l0
aAogICAgIC8vIGxvY2FsIHZhcmlhYmxlcy4gVGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVzZSBsb2Nh
bCB2YXJpYWJsZSByZWZlcmVuY2VzIGNhbiBmb3JtCkBAIC0xODUsMTQgKzE2NCwxNCBAQCBwdWJs
aWM6CiAgICAgLy8gcmVmZXJlbmNlIGNvdW50cyBhY2NvcmRpbmcgdG8gcmVhY2hhYmlsaXR5Lgog
ICAgIHZvaWQgY29sbGVjdEdhcmJhZ2UoKTsKICAgICAKLSAgICB2b2lkIGNvbnZlcnRUb0NvbnN0
YW50KE5vZGVJbmRleCBub2RlSW5kZXgsIHVuc2lnbmVkIGNvbnN0YW50TnVtYmVyKQorICAgIHZv
aWQgY29udmVydFRvQ29uc3RhbnQoTm9kZSogbm9kZSwgdW5zaWduZWQgY29uc3RhbnROdW1iZXIp
CiAgICAgewotICAgICAgICBhdChub2RlSW5kZXgpLmNvbnZlcnRUb0NvbnN0YW50KGNvbnN0YW50
TnVtYmVyKTsKKyAgICAgICAgbm9kZS0+Y29udmVydFRvQ29uc3RhbnQoY29uc3RhbnROdW1iZXIp
OwogICAgIH0KICAgICAKLSAgICB2b2lkIGNvbnZlcnRUb0NvbnN0YW50KE5vZGVJbmRleCBub2Rl
SW5kZXgsIEpTVmFsdWUgdmFsdWUpCisgICAgdm9pZCBjb252ZXJ0VG9Db25zdGFudChOb2RlKiBu
b2RlLCBKU1ZhbHVlIHZhbHVlKQogICAgIHsKLSAgICAgICAgY29udmVydFRvQ29uc3RhbnQobm9k
ZUluZGV4LCBtX2NvZGVCbG9jay0+YWRkT3JGaW5kQ29uc3RhbnQodmFsdWUpKTsKKyAgICAgICAg
Y29udmVydFRvQ29uc3RhbnQobm9kZSwgbV9jb2RlQmxvY2stPmFkZE9yRmluZENvbnN0YW50KHZh
bHVlKSk7CiAgICAgfQogCiAgICAgLy8gQ29kZUJsb2NrIGlzIG9wdGlvbmFsLCBidXQgbWF5IGFs
bG93IGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gdG8gYmUgZHVtcGVkIChlLmcuIElkZW50aWZpZXIg
bmFtZXMpLgpAQCAtMjAwLDEyNSArMTc5LDEyNSBAQCBwdWJsaWM6CiAgICAgZW51bSBQaGlOb2Rl
RHVtcE1vZGUgeyBEdW1wTGl2ZVBoaXNPbmx5LCBEdW1wQWxsUGhpcyB9OwogICAgIHZvaWQgZHVt
cEJsb2NrSGVhZGVyKFByaW50U3RyZWFtJiwgY29uc3QgY2hhciogcHJlZml4LCBCbG9ja0luZGV4
LCBQaGlOb2RlRHVtcE1vZGUpOwogICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYsIEVkZ2UpOwot
ICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYsIGNvbnN0IGNoYXIqIHByZWZpeCwgTm9kZUluZGV4
KTsKLSAgICBzdGF0aWMgaW50IGFtb3VudE9mTm9kZVdoaXRlU3BhY2UoTm9kZSYpOwotICAgIHN0
YXRpYyB2b2lkIHByaW50Tm9kZVdoaXRlU3BhY2UoUHJpbnRTdHJlYW0mLCBOb2RlJik7CisgICAg
dm9pZCBkdW1wKFByaW50U3RyZWFtJiwgY29uc3QgY2hhciogcHJlZml4LCBOb2RlKik7CisgICAg
c3RhdGljIGludCBhbW91bnRPZk5vZGVXaGl0ZVNwYWNlKE5vZGUqKTsKKyAgICBzdGF0aWMgdm9p
ZCBwcmludE5vZGVXaGl0ZVNwYWNlKFByaW50U3RyZWFtJiwgTm9kZSopOwogCiAgICAgLy8gRHVt
cCB0aGUgY29kZSBvcmlnaW4gb2YgdGhlIGdpdmVuIG5vZGUgYXMgYSBkaWZmIGZyb20gdGhlIGNv
ZGUgb3JpZ2luIG9mIHRoZQogICAgIC8vIHByZWNlZGluZyBub2RlLiBSZXR1cm5zIHRydWUgaWYg
YW55dGhpbmcgd2FzIHByaW50ZWQuCi0gICAgYm9vbCBkdW1wQ29kZU9yaWdpbihQcmludFN0cmVh
bSYsIGNvbnN0IGNoYXIqIHByZWZpeCwgTm9kZUluZGV4LCBOb2RlSW5kZXgpOworICAgIGJvb2wg
ZHVtcENvZGVPcmlnaW4oUHJpbnRTdHJlYW0mLCBjb25zdCBjaGFyKiBwcmVmaXgsIE5vZGUqIHBy
ZXZpb3VzTm9kZSwgTm9kZSogc3Vic2VxdWVudE5vZGUpOwogCiAgICAgQmxvY2tJbmRleCBibG9j
a0luZGV4Rm9yQnl0ZWNvZGVPZmZzZXQoVmVjdG9yPEJsb2NrSW5kZXg+JiBibG9ja3MsIHVuc2ln
bmVkIGJ5dGVjb2RlQmVnaW4pOwogCi0gICAgU3BlY3VsYXRlZFR5cGUgZ2V0SlNDb25zdGFudFNw
ZWN1bGF0aW9uKE5vZGUmIG5vZGUpCisgICAgU3BlY3VsYXRlZFR5cGUgZ2V0SlNDb25zdGFudFNw
ZWN1bGF0aW9uKE5vZGUqIG5vZGUpCiAgICAgewotICAgICAgICByZXR1cm4gc3BlY3VsYXRpb25G
cm9tVmFsdWUobm9kZS52YWx1ZU9mSlNDb25zdGFudChtX2NvZGVCbG9jaykpOworICAgICAgICBy
ZXR1cm4gc3BlY3VsYXRpb25Gcm9tVmFsdWUobm9kZS0+dmFsdWVPZkpTQ29uc3RhbnQobV9jb2Rl
QmxvY2spKTsKICAgICB9CiAgICAgCi0gICAgQWRkU3BlY3VsYXRpb25Nb2RlIGFkZFNwZWN1bGF0
aW9uTW9kZShOb2RlJiBhZGQsIGJvb2wgbGVmdFNob3VsZFNwZWN1bGF0ZUludGVnZXIsIGJvb2wg
cmlnaHRTaG91bGRTcGVjdWxhdGVJbnRlZ2VyKQorICAgIEFkZFNwZWN1bGF0aW9uTW9kZSBhZGRT
cGVjdWxhdGlvbk1vZGUoTm9kZSogYWRkLCBib29sIGxlZnRTaG91bGRTcGVjdWxhdGVJbnRlZ2Vy
LCBib29sIHJpZ2h0U2hvdWxkU3BlY3VsYXRlSW50ZWdlcikKICAgICB7Ci0gICAgICAgIEFTU0VS
VChhZGQub3AoKSA9PSBWYWx1ZUFkZCB8fCBhZGQub3AoKSA9PSBBcml0aEFkZCB8fCBhZGQub3Ao
KSA9PSBBcml0aFN1Yik7CisgICAgICAgIEFTU0VSVChhZGQtPm9wKCkgPT0gVmFsdWVBZGQgfHwg
YWRkLT5vcCgpID09IEFyaXRoQWRkIHx8IGFkZC0+b3AoKSA9PSBBcml0aFN1Yik7CiAgICAgICAg
IAotICAgICAgICBOb2RlJiBsZWZ0ID0gYXQoYWRkLmNoaWxkMSgpKTsKLSAgICAgICAgTm9kZSYg
cmlnaHQgPSBhdChhZGQuY2hpbGQyKCkpOworICAgICAgICBOb2RlKiBsZWZ0ID0gYWRkLT5jaGls
ZDEoKS5nZXQoKTsKKyAgICAgICAgTm9kZSogcmlnaHQgPSBhZGQtPmNoaWxkMigpLmdldCgpOwog
ICAgICAgICAKLSAgICAgICAgaWYgKGxlZnQuaGFzQ29uc3RhbnQoKSkKKyAgICAgICAgaWYgKGxl
ZnQtPmhhc0NvbnN0YW50KCkpCiAgICAgICAgICAgICByZXR1cm4gYWRkSW1tZWRpYXRlU2hvdWxk
U3BlY3VsYXRlSW50ZWdlcihhZGQsIHJpZ2h0U2hvdWxkU3BlY3VsYXRlSW50ZWdlciwgbGVmdCk7
Ci0gICAgICAgIGlmIChyaWdodC5oYXNDb25zdGFudCgpKQorICAgICAgICBpZiAocmlnaHQtPmhh
c0NvbnN0YW50KCkpCiAgICAgICAgICAgICByZXR1cm4gYWRkSW1tZWRpYXRlU2hvdWxkU3BlY3Vs
YXRlSW50ZWdlcihhZGQsIGxlZnRTaG91bGRTcGVjdWxhdGVJbnRlZ2VyLCByaWdodCk7CiAgICAg
ICAgIAotICAgICAgICByZXR1cm4gKGxlZnRTaG91bGRTcGVjdWxhdGVJbnRlZ2VyICYmIHJpZ2h0
U2hvdWxkU3BlY3VsYXRlSW50ZWdlciAmJiBhZGQuY2FuU3BlY3VsYXRlSW50ZWdlcigpKSA/IFNw
ZWN1bGF0ZUludGVnZXIgOiBEb250U3BlY3VsYXRlSW50ZWdlcjsKKyAgICAgICAgcmV0dXJuIChs
ZWZ0U2hvdWxkU3BlY3VsYXRlSW50ZWdlciAmJiByaWdodFNob3VsZFNwZWN1bGF0ZUludGVnZXIg
JiYgYWRkLT5jYW5TcGVjdWxhdGVJbnRlZ2VyKCkpID8gU3BlY3VsYXRlSW50ZWdlciA6IERvbnRT
cGVjdWxhdGVJbnRlZ2VyOwogICAgIH0KICAgICAKLSAgICBBZGRTcGVjdWxhdGlvbk1vZGUgdmFs
dWVBZGRTcGVjdWxhdGlvbk1vZGUoTm9kZSYgYWRkKQorICAgIEFkZFNwZWN1bGF0aW9uTW9kZSB2
YWx1ZUFkZFNwZWN1bGF0aW9uTW9kZShOb2RlKiBhZGQpCiAgICAgewotICAgICAgICByZXR1cm4g
YWRkU3BlY3VsYXRpb25Nb2RlKGFkZCwgYXQoYWRkLmNoaWxkMSgpKS5zaG91bGRTcGVjdWxhdGVJ
bnRlZ2VyRXhwZWN0aW5nRGVmaW5lZCgpLCBhdChhZGQuY2hpbGQyKCkpLnNob3VsZFNwZWN1bGF0
ZUludGVnZXJFeHBlY3RpbmdEZWZpbmVkKCkpOworICAgICAgICByZXR1cm4gYWRkU3BlY3VsYXRp
b25Nb2RlKGFkZCwgYWRkLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlSW50ZWdlckV4cGVjdGlu
Z0RlZmluZWQoKSwgYWRkLT5jaGlsZDIoKS0+c2hvdWxkU3BlY3VsYXRlSW50ZWdlckV4cGVjdGlu
Z0RlZmluZWQoKSk7CiAgICAgfQogICAgIAotICAgIEFkZFNwZWN1bGF0aW9uTW9kZSBhcml0aEFk
ZFNwZWN1bGF0aW9uTW9kZShOb2RlJiBhZGQpCisgICAgQWRkU3BlY3VsYXRpb25Nb2RlIGFyaXRo
QWRkU3BlY3VsYXRpb25Nb2RlKE5vZGUqIGFkZCkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZGRT
cGVjdWxhdGlvbk1vZGUoYWRkLCBhdChhZGQuY2hpbGQxKCkpLnNob3VsZFNwZWN1bGF0ZUludGVn
ZXJGb3JBcml0aG1ldGljKCksIGF0KGFkZC5jaGlsZDIoKSkuc2hvdWxkU3BlY3VsYXRlSW50ZWdl
ckZvckFyaXRobWV0aWMoKSk7CisgICAgICAgIHJldHVybiBhZGRTcGVjdWxhdGlvbk1vZGUoYWRk
LCBhZGQtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyRm9yQXJpdGhtZXRpYygpLCBh
ZGQtPmNoaWxkMigpLT5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyRm9yQXJpdGhtZXRpYygpKTsKICAg
ICB9CiAgICAgCi0gICAgQWRkU3BlY3VsYXRpb25Nb2RlIGFkZFNwZWN1bGF0aW9uTW9kZShOb2Rl
JiBhZGQpCisgICAgQWRkU3BlY3VsYXRpb25Nb2RlIGFkZFNwZWN1bGF0aW9uTW9kZShOb2RlKiBh
ZGQpCiAgICAgewotICAgICAgICBpZiAoYWRkLm9wKCkgPT0gVmFsdWVBZGQpCisgICAgICAgIGlm
IChhZGQtPm9wKCkgPT0gVmFsdWVBZGQpCiAgICAgICAgICAgICByZXR1cm4gdmFsdWVBZGRTcGVj
dWxhdGlvbk1vZGUoYWRkKTsKICAgICAgICAgCiAgICAgICAgIHJldHVybiBhcml0aEFkZFNwZWN1
bGF0aW9uTW9kZShhZGQpOwogICAgIH0KICAgICAKLSAgICBib29sIGFkZFNob3VsZFNwZWN1bGF0
ZUludGVnZXIoTm9kZSYgYWRkKQorICAgIGJvb2wgYWRkU2hvdWxkU3BlY3VsYXRlSW50ZWdlcihO
b2RlKiBhZGQpCiAgICAgewogICAgICAgICByZXR1cm4gYWRkU3BlY3VsYXRpb25Nb2RlKGFkZCkg
IT0gRG9udFNwZWN1bGF0ZUludGVnZXI7CiAgICAgfQogICAgIAotICAgIGJvb2wgbXVsU2hvdWxk
U3BlY3VsYXRlSW50ZWdlcihOb2RlJiBtdWwpCisgICAgYm9vbCBtdWxTaG91bGRTcGVjdWxhdGVJ
bnRlZ2VyKE5vZGUqIG11bCkKICAgICB7Ci0gICAgICAgIEFTU0VSVChtdWwub3AoKSA9PSBBcml0
aE11bCk7CisgICAgICAgIEFTU0VSVChtdWwtPm9wKCkgPT0gQXJpdGhNdWwpOwogICAgICAgICAK
LSAgICAgICAgTm9kZSYgbGVmdCA9IGF0KG11bC5jaGlsZDEoKSk7Ci0gICAgICAgIE5vZGUmIHJp
Z2h0ID0gYXQobXVsLmNoaWxkMigpKTsKKyAgICAgICAgTm9kZSogbGVmdCA9IG11bC0+Y2hpbGQx
KCkuZ2V0KCk7CisgICAgICAgIE5vZGUqIHJpZ2h0ID0gbXVsLT5jaGlsZDIoKS5nZXQoKTsKICAg
ICAgICAgCiAgICAgICAgIHJldHVybiBOb2RlOjpzaG91bGRTcGVjdWxhdGVJbnRlZ2VyRm9yQXJp
dGhtZXRpYyhsZWZ0LCByaWdodCkgJiYgbXVsLmNhblNwZWN1bGF0ZUludGVnZXIoKTsKICAgICB9
CiAgICAgCi0gICAgYm9vbCBuZWdhdGVTaG91bGRTcGVjdWxhdGVJbnRlZ2VyKE5vZGUmIG5lZ2F0
ZSkKKyAgICBib29sIG5lZ2F0ZVNob3VsZFNwZWN1bGF0ZUludGVnZXIoTm9kZSogbmVnYXRlKQog
ICAgIHsKLSAgICAgICAgQVNTRVJUKG5lZ2F0ZS5vcCgpID09IEFyaXRoTmVnYXRlKTsKLSAgICAg
ICAgcmV0dXJuIGF0KG5lZ2F0ZS5jaGlsZDEoKSkuc2hvdWxkU3BlY3VsYXRlSW50ZWdlckZvckFy
aXRobWV0aWMoKSAmJiBuZWdhdGUuY2FuU3BlY3VsYXRlSW50ZWdlcigpOworICAgICAgICBBU1NF
UlQobmVnYXRlLT5vcCgpID09IEFyaXRoTmVnYXRlKTsKKyAgICAgICAgcmV0dXJuIG5lZ2F0ZS0+
Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZUludGVnZXJGb3JBcml0aG1ldGljKCkgJiYgbmVnYXRl
LT5jYW5TcGVjdWxhdGVJbnRlZ2VyKCk7CiAgICAgfQogICAgIAotICAgIGJvb2wgYWRkU2hvdWxk
U3BlY3VsYXRlSW50ZWdlcihOb2RlSW5kZXggbm9kZUluZGV4KQorICAgIGJvb2wgYWRkU2hvdWxk
U3BlY3VsYXRlSW50ZWdlcihOb2RlKiBub2RlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkZFNo
b3VsZFNwZWN1bGF0ZUludGVnZXIoYXQobm9kZUluZGV4KSk7CisgICAgICAgIHJldHVybiBhZGRT
aG91bGRTcGVjdWxhdGVJbnRlZ2VyKG5vZGUpOwogICAgIH0KICAgICAKICAgICAvLyBIZWxwZXIg
bWV0aG9kcyB0byBjaGVjayBub2RlcyBmb3IgY29uc3RhbnRzLgotICAgIGJvb2wgaXNDb25zdGFu
dChOb2RlSW5kZXggbm9kZUluZGV4KQorICAgIGJvb2wgaXNDb25zdGFudChOb2RlKiBub2RlKQog
ICAgIHsKLSAgICAgICAgcmV0dXJuIGF0KG5vZGVJbmRleCkuaGFzQ29uc3RhbnQoKTsKKyAgICAg
ICAgcmV0dXJuIG5vZGUtPmhhc0NvbnN0YW50KCk7CiAgICAgfQotICAgIGJvb2wgaXNKU0NvbnN0
YW50KE5vZGVJbmRleCBub2RlSW5kZXgpCisgICAgYm9vbCBpc0pTQ29uc3RhbnQoTm9kZSogbm9k
ZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBhdChub2RlSW5kZXgpLmhhc0NvbnN0YW50KCk7Cisg
ICAgICAgIHJldHVybiBub2RlLT5oYXNDb25zdGFudCgpOwogICAgIH0KLSAgICBib29sIGlzSW50
MzJDb25zdGFudChOb2RlSW5kZXggbm9kZUluZGV4KQorICAgIGJvb2wgaXNJbnQzMkNvbnN0YW50
KE5vZGUqIG5vZGUpCiAgICAgewotICAgICAgICByZXR1cm4gYXQobm9kZUluZGV4KS5pc0ludDMy
Q29uc3RhbnQobV9jb2RlQmxvY2spOworICAgICAgICByZXR1cm4gbm9kZS0+aXNJbnQzMkNvbnN0
YW50KG1fY29kZUJsb2NrKTsKICAgICB9Ci0gICAgYm9vbCBpc0RvdWJsZUNvbnN0YW50KE5vZGVJ
bmRleCBub2RlSW5kZXgpCisgICAgYm9vbCBpc0RvdWJsZUNvbnN0YW50KE5vZGUqIG5vZGUpCiAg
ICAgewotICAgICAgICByZXR1cm4gYXQobm9kZUluZGV4KS5pc0RvdWJsZUNvbnN0YW50KG1fY29k
ZUJsb2NrKTsKKyAgICAgICAgcmV0dXJuIG5vZGUtPmlzRG91YmxlQ29uc3RhbnQobV9jb2RlQmxv
Y2spOwogICAgIH0KLSAgICBib29sIGlzTnVtYmVyQ29uc3RhbnQoTm9kZUluZGV4IG5vZGVJbmRl
eCkKKyAgICBib29sIGlzTnVtYmVyQ29uc3RhbnQoTm9kZSogbm9kZSkKICAgICB7Ci0gICAgICAg
IHJldHVybiBhdChub2RlSW5kZXgpLmlzTnVtYmVyQ29uc3RhbnQobV9jb2RlQmxvY2spOworICAg
ICAgICByZXR1cm4gbm9kZS0+aXNOdW1iZXJDb25zdGFudChtX2NvZGVCbG9jayk7CiAgICAgfQot
ICAgIGJvb2wgaXNCb29sZWFuQ29uc3RhbnQoTm9kZUluZGV4IG5vZGVJbmRleCkKKyAgICBib29s
IGlzQm9vbGVhbkNvbnN0YW50KE5vZGUqIG5vZGUpCiAgICAgewotICAgICAgICByZXR1cm4gYXQo
bm9kZUluZGV4KS5pc0Jvb2xlYW5Db25zdGFudChtX2NvZGVCbG9jayk7CisgICAgICAgIHJldHVy
biBub2RlLT5pc0Jvb2xlYW5Db25zdGFudChtX2NvZGVCbG9jayk7CiAgICAgfQotICAgIGJvb2wg
aXNDZWxsQ29uc3RhbnQoTm9kZUluZGV4IG5vZGVJbmRleCkKKyAgICBib29sIGlzQ2VsbENvbnN0
YW50KE5vZGUqIG5vZGUpCiAgICAgewotICAgICAgICBpZiAoIWlzSlNDb25zdGFudChub2RlSW5k
ZXgpKQorICAgICAgICBpZiAoIWlzSlNDb25zdGFudChub2RlKSkKICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IHZhbHVlT2ZKU0NvbnN0YW50KG5vZGVJ
bmRleCk7CisgICAgICAgIEpTVmFsdWUgdmFsdWUgPSB2YWx1ZU9mSlNDb25zdGFudChub2RlKTsK
ICAgICAgICAgcmV0dXJuIHZhbHVlLmlzQ2VsbCgpICYmICEhdmFsdWU7CiAgICAgfQotICAgIGJv
b2wgaXNGdW5jdGlvbkNvbnN0YW50KE5vZGVJbmRleCBub2RlSW5kZXgpCisgICAgYm9vbCBpc0Z1
bmN0aW9uQ29uc3RhbnQoTm9kZSogbm9kZSkKICAgICB7Ci0gICAgICAgIGlmICghaXNKU0NvbnN0
YW50KG5vZGVJbmRleCkpCisgICAgICAgIGlmICghaXNKU0NvbnN0YW50KG5vZGUpKQogICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAoIWdldEpTRnVuY3Rpb24odmFsdWVPZkpT
Q29uc3RhbnQobm9kZUluZGV4KSkpCisgICAgICAgIGlmICghZ2V0SlNGdW5jdGlvbih2YWx1ZU9m
SlNDb25zdGFudChub2RlKSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgIH0KLSAgICBib29sIGlzSW50ZXJuYWxGdW5jdGlvbkNvbnN0YW50KE5v
ZGVJbmRleCBub2RlSW5kZXgpCisgICAgYm9vbCBpc0ludGVybmFsRnVuY3Rpb25Db25zdGFudChO
b2RlKiBub2RlKQogICAgIHsKLSAgICAgICAgaWYgKCFpc0pTQ29uc3RhbnQobm9kZUluZGV4KSkK
KyAgICAgICAgaWYgKCFpc0pTQ29uc3RhbnQobm9kZSkpCiAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgICAgIEpTVmFsdWUgdmFsdWUgPSB2YWx1ZU9mSlNDb25zdGFudChub2RlSW5kZXgp
OworICAgICAgICBKU1ZhbHVlIHZhbHVlID0gdmFsdWVPZkpTQ29uc3RhbnQobm9kZSk7CiAgICAg
ICAgIGlmICghdmFsdWUuaXNDZWxsKCkgfHwgIXZhbHVlKQogICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgICAgICBKU0NlbGwqIGNlbGwgPSB2YWx1ZS5hc0NlbGwoKTsKQEAgLTMyNywyNSAr
MzA2LDI1IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIC8vIEhl
bHBlciBtZXRob2RzIGdldCBjb25zdGFudCB2YWx1ZXMgZnJvbSBub2Rlcy4KLSAgICBKU1ZhbHVl
IHZhbHVlT2ZKU0NvbnN0YW50KE5vZGVJbmRleCBub2RlSW5kZXgpCisgICAgSlNWYWx1ZSB2YWx1
ZU9mSlNDb25zdGFudChOb2RlKiBub2RlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGF0KG5vZGVJ
bmRleCkudmFsdWVPZkpTQ29uc3RhbnQobV9jb2RlQmxvY2spOworICAgICAgICByZXR1cm4gbm9k
ZS0+dmFsdWVPZkpTQ29uc3RhbnQobV9jb2RlQmxvY2spOwogICAgIH0KLSAgICBpbnQzMl90IHZh
bHVlT2ZJbnQzMkNvbnN0YW50KE5vZGVJbmRleCBub2RlSW5kZXgpCisgICAgaW50MzJfdCB2YWx1
ZU9mSW50MzJDb25zdGFudChOb2RlKiBub2RlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIHZhbHVl
T2ZKU0NvbnN0YW50KG5vZGVJbmRleCkuYXNJbnQzMigpOworICAgICAgICByZXR1cm4gdmFsdWVP
ZkpTQ29uc3RhbnQobm9kZSkuYXNJbnQzMigpOwogICAgIH0KLSAgICBkb3VibGUgdmFsdWVPZk51
bWJlckNvbnN0YW50KE5vZGVJbmRleCBub2RlSW5kZXgpCisgICAgZG91YmxlIHZhbHVlT2ZOdW1i
ZXJDb25zdGFudChOb2RlKiBub2RlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIHZhbHVlT2ZKU0Nv
bnN0YW50KG5vZGVJbmRleCkuYXNOdW1iZXIoKTsKKyAgICAgICAgcmV0dXJuIHZhbHVlT2ZKU0Nv
bnN0YW50KG5vZGUpLmFzTnVtYmVyKCk7CiAgICAgfQotICAgIGJvb2wgdmFsdWVPZkJvb2xlYW5D
b25zdGFudChOb2RlSW5kZXggbm9kZUluZGV4KQorICAgIGJvb2wgdmFsdWVPZkJvb2xlYW5Db25z
dGFudChOb2RlKiBub2RlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIHZhbHVlT2ZKU0NvbnN0YW50
KG5vZGVJbmRleCkuYXNCb29sZWFuKCk7CisgICAgICAgIHJldHVybiB2YWx1ZU9mSlNDb25zdGFu
dChub2RlKS5hc0Jvb2xlYW4oKTsKICAgICB9Ci0gICAgSlNGdW5jdGlvbiogdmFsdWVPZkZ1bmN0
aW9uQ29uc3RhbnQoTm9kZUluZGV4IG5vZGVJbmRleCkKKyAgICBKU0Z1bmN0aW9uKiB2YWx1ZU9m
RnVuY3Rpb25Db25zdGFudChOb2RlKiBub2RlKQogICAgIHsKLSAgICAgICAgSlNDZWxsKiBmdW5j
dGlvbiA9IGdldEpTRnVuY3Rpb24odmFsdWVPZkpTQ29uc3RhbnQobm9kZUluZGV4KSk7CisgICAg
ICAgIEpTQ2VsbCogZnVuY3Rpb24gPSBnZXRKU0Z1bmN0aW9uKHZhbHVlT2ZKU0NvbnN0YW50KG5v
ZGUpKTsKICAgICAgICAgQVNTRVJUKGZ1bmN0aW9uKTsKICAgICAgICAgcmV0dXJuIGpzQ2FzdDxK
U0Z1bmN0aW9uKj4oZnVuY3Rpb24pOwogICAgIH0KQEAgLTQyMCw0NSArMzk5LDQzIEBAIHB1Ymxp
YzoKICAgICAgICAgcmV0dXJuIG1fY29kZUJsb2NrLT51bmNoZWNrZWRBY3RpdmF0aW9uUmVnaXN0
ZXIoKTsKICAgICB9CiAgICAgCi0gICAgVmFsdWVQcm9maWxlKiB2YWx1ZVByb2ZpbGVGb3IoTm9k
ZUluZGV4IG5vZGVJbmRleCkKKyAgICBWYWx1ZVByb2ZpbGUqIHZhbHVlUHJvZmlsZUZvcihOb2Rl
KiBub2RlKQogICAgIHsKLSAgICAgICAgaWYgKG5vZGVJbmRleCA9PSBOb05vZGUpCisgICAgICAg
IGlmICghbm9kZSkKICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAKLSAgICAgICAgTm9k
ZSYgbm9kZSA9IGF0KG5vZGVJbmRleCk7Ci0gICAgICAgIENvZGVCbG9jayogcHJvZmlsZWRCbG9j
ayA9IGJhc2VsaW5lQ29kZUJsb2NrRm9yKG5vZGUuY29kZU9yaWdpbik7CisgICAgICAgIENvZGVC
bG9jayogcHJvZmlsZWRCbG9jayA9IGJhc2VsaW5lQ29kZUJsb2NrRm9yKG5vZGUtPmNvZGVPcmln
aW4pOwogICAgICAgICAKLSAgICAgICAgaWYgKG5vZGUuaGFzTG9jYWwoKSkgewotICAgICAgICAg
ICAgaWYgKCFvcGVyYW5kSXNBcmd1bWVudChub2RlLmxvY2FsKCkpKQorICAgICAgICBpZiAobm9k
ZS0+aGFzTG9jYWwoKSkgeworICAgICAgICAgICAgaWYgKCFvcGVyYW5kSXNBcmd1bWVudChub2Rl
LT5sb2NhbCgpKSkKICAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgIGludCBh
cmd1bWVudCA9IG9wZXJhbmRUb0FyZ3VtZW50KG5vZGUubG9jYWwoKSk7Ci0gICAgICAgICAgICBp
ZiAobm9kZS52YXJpYWJsZUFjY2Vzc0RhdGEoKSAhPSBhdChtX2FyZ3VtZW50c1thcmd1bWVudF0p
LnZhcmlhYmxlQWNjZXNzRGF0YSgpKQorICAgICAgICAgICAgaW50IGFyZ3VtZW50ID0gb3BlcmFu
ZFRvQXJndW1lbnQobm9kZS0+bG9jYWwoKSk7CisgICAgICAgICAgICBpZiAobm9kZS0+dmFyaWFi
bGVBY2Nlc3NEYXRhKCkgIT0gbV9hcmd1bWVudHNbYXJndW1lbnRdLT52YXJpYWJsZUFjY2Vzc0Rh
dGEoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgIHJldHVybiBwcm9m
aWxlZEJsb2NrLT52YWx1ZVByb2ZpbGVGb3JBcmd1bWVudChhcmd1bWVudCk7CiAgICAgICAgIH0K
ICAgICAgICAgCi0gICAgICAgIGlmIChub2RlLmhhc0hlYXBQcmVkaWN0aW9uKCkpCi0gICAgICAg
ICAgICByZXR1cm4gcHJvZmlsZWRCbG9jay0+dmFsdWVQcm9maWxlRm9yQnl0ZWNvZGVPZmZzZXQo
bm9kZS5jb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXhGb3JWYWx1ZVByb2ZpbGUoKSk7CisgICAgICAg
IGlmIChub2RlLT5oYXNIZWFwUHJlZGljdGlvbigpKQorICAgICAgICAgICAgcmV0dXJuIHByb2Zp
bGVkQmxvY2stPnZhbHVlUHJvZmlsZUZvckJ5dGVjb2RlT2Zmc2V0KG5vZGUtPmNvZGVPcmlnaW4u
Ynl0ZWNvZGVJbmRleEZvclZhbHVlUHJvZmlsZSgpKTsKICAgICAgICAgCiAgICAgICAgIHJldHVy
biAwOwogICAgIH0KICAgICAKLSAgICBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlIG1ldGhv
ZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGVGb3IoTm9kZUluZGV4IG5vZGVJbmRleCkKKyAgICBNZXRo
b2RPZkdldHRpbmdBVmFsdWVQcm9maWxlIG1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGVGb3Io
Tm9kZSogbm9kZSkKICAgICB7Ci0gICAgICAgIGlmIChub2RlSW5kZXggPT0gTm9Ob2RlKQorICAg
ICAgICBpZiAoIW5vZGUpCiAgICAgICAgICAgICByZXR1cm4gTWV0aG9kT2ZHZXR0aW5nQVZhbHVl
UHJvZmlsZSgpOwogICAgICAgICAKLSAgICAgICAgTm9kZSYgbm9kZSA9IGF0KG5vZGVJbmRleCk7
Ci0gICAgICAgIENvZGVCbG9jayogcHJvZmlsZWRCbG9jayA9IGJhc2VsaW5lQ29kZUJsb2NrRm9y
KG5vZGUuY29kZU9yaWdpbik7CisgICAgICAgIENvZGVCbG9jayogcHJvZmlsZWRCbG9jayA9IGJh
c2VsaW5lQ29kZUJsb2NrRm9yKG5vZGUtPmNvZGVPcmlnaW4pOwogICAgICAgICAKLSAgICAgICAg
aWYgKG5vZGUub3AoKSA9PSBHZXRMb2NhbCkgeworICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBH
ZXRMb2NhbCkgewogICAgICAgICAgICAgcmV0dXJuIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2Zp
bGU6OmZyb21MYXp5T3BlcmFuZCgKICAgICAgICAgICAgICAgICBwcm9maWxlZEJsb2NrLAogICAg
ICAgICAgICAgICAgIExhenlPcGVyYW5kVmFsdWVQcm9maWxlS2V5KAotICAgICAgICAgICAgICAg
ICAgICBub2RlLmNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCwgbm9kZS5sb2NhbCgpKSk7CisgICAg
ICAgICAgICAgICAgICAgIG5vZGUtPmNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCwgbm9kZS0+bG9j
YWwoKSkpOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICByZXR1cm4gTWV0aG9kT2ZHZXR0
aW5nQVZhbHVlUHJvZmlsZSh2YWx1ZVByb2ZpbGVGb3Iobm9kZUluZGV4KSk7CisgICAgICAgIHJl
dHVybiBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlKHZhbHVlUHJvZmlsZUZvcihub2RlKSk7
CiAgICAgfQogICAgIAogICAgIGJvb2wgbmVlZHNBY3RpdmF0aW9uKCkgY29uc3QKQEAgLTQ4Miwy
MSArNDU5LDIxIEBAIHB1YmxpYzoKICAgICAKICAgICB1bnNpZ25lZCBudW1TdWNjZXNzb3JzKEJh
c2ljQmxvY2sqIGJsb2NrKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGF0KGJsb2NrLT5sYXN0KCkp
Lm51bVN1Y2Nlc3NvcnMoKTsKKyAgICAgICAgcmV0dXJuIGJsb2NrLT5sYXN0KCktPm51bVN1Y2Nl
c3NvcnMoKTsKICAgICB9CiAgICAgQmxvY2tJbmRleCBzdWNjZXNzb3IoQmFzaWNCbG9jayogYmxv
Y2ssIHVuc2lnbmVkIGluZGV4KQogICAgIHsKLSAgICAgICAgcmV0dXJuIGF0KGJsb2NrLT5sYXN0
KCkpLnN1Y2Nlc3NvcihpbmRleCk7CisgICAgICAgIHJldHVybiBibG9jay0+bGFzdCgpLT5zdWNj
ZXNzb3IoaW5kZXgpOwogICAgIH0KICAgICBCbG9ja0luZGV4IHN1Y2Nlc3NvckZvckNvbmRpdGlv
bihCYXNpY0Jsb2NrKiBibG9jaywgYm9vbCBjb25kaXRpb24pCiAgICAgewotICAgICAgICByZXR1
cm4gYXQoYmxvY2stPmxhc3QoKSkuc3VjY2Vzc29yRm9yQ29uZGl0aW9uKGNvbmRpdGlvbik7Cisg
ICAgICAgIHJldHVybiBibG9jay0+bGFzdCgpLT5zdWNjZXNzb3JGb3JDb25kaXRpb24oY29uZGl0
aW9uKTsKICAgICB9CiAgICAgCi0gICAgYm9vbCBpc1ByZWRpY3RlZE51bWVyaWNhbChOb2RlJiBu
b2RlKQorICAgIGJvb2wgaXNQcmVkaWN0ZWROdW1lcmljYWwoTm9kZSogbm9kZSkKICAgICB7Ci0g
ICAgICAgIFNwZWN1bGF0ZWRUeXBlIGxlZnQgPSBhdChub2RlLmNoaWxkMSgpKS5wcmVkaWN0aW9u
KCk7Ci0gICAgICAgIFNwZWN1bGF0ZWRUeXBlIHJpZ2h0ID0gYXQobm9kZS5jaGlsZDIoKSkucHJl
ZGljdGlvbigpOworICAgICAgICBTcGVjdWxhdGVkVHlwZSBsZWZ0ID0gbm9kZS0+Y2hpbGQxKCkt
PnByZWRpY3Rpb24oKTsKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUgcmlnaHQgPSBub2RlLT5jaGls
ZDIoKS0+cHJlZGljdGlvbigpOwogICAgICAgICByZXR1cm4gaXNOdW1iZXJTcGVjdWxhdGlvbihs
ZWZ0KSAmJiBpc051bWJlclNwZWN1bGF0aW9uKHJpZ2h0KTsKICAgICB9CiAgICAgCkBAIC01MDYs
MjMgKzQ4MywyMyBAQCBwdWJsaWM6CiAgICAgLy8gLSBQdXRCeVZhbCBkZWZpbml0ZWx5IGNoYW5n
ZXMgdGhlIGFycmF5IGl0IHN0b3JlcyB0bywgYW5kIG1heSBldmVuIGNoYW5nZSBpdHMgbGVuZ3Ro
LgogICAgIC8vIC0gUHV0QnlPZmZzZXQgZGVmaW5pdGVseSBjaGFuZ2VzIHRoZSBvYmplY3QgaXQg
c3RvcmVzIHRvLgogICAgIC8vIC0gYW5kIHNvIG9uLgotICAgIGJvb2wgYnlWYWxJc1B1cmUoTm9k
ZSYgbm9kZSkKKyAgICBib29sIGJ5VmFsSXNQdXJlKE5vZGUqIG5vZGUpCiAgICAgewotICAgICAg
ICBzd2l0Y2ggKG5vZGUuYXJyYXlNb2RlKCkudHlwZSgpKSB7CisgICAgICAgIHN3aXRjaCAobm9k
ZS0+YXJyYXlNb2RlKCkudHlwZSgpKSB7CiAgICAgICAgIGNhc2UgQXJyYXk6OkdlbmVyaWM6CiAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGNhc2UgQXJyYXk6OkludDMyOgogICAg
ICAgICBjYXNlIEFycmF5OjpEb3VibGU6CiAgICAgICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3VvdXM6
CiAgICAgICAgIGNhc2UgQXJyYXk6OkFycmF5U3RvcmFnZToKLSAgICAgICAgICAgIHJldHVybiAh
bm9kZS5hcnJheU1vZGUoKS5pc091dE9mQm91bmRzKCk7CisgICAgICAgICAgICByZXR1cm4gIW5v
ZGUtPmFycmF5TW9kZSgpLmlzT3V0T2ZCb3VuZHMoKTsKICAgICAgICAgY2FzZSBBcnJheTo6U2xv
d1B1dEFycmF5U3RvcmFnZToKLSAgICAgICAgICAgIHJldHVybiAhbm9kZS5hcnJheU1vZGUoKS5t
YXlTdG9yZVRvSG9sZSgpOworICAgICAgICAgICAgcmV0dXJuICFub2RlLT5hcnJheU1vZGUoKS5t
YXlTdG9yZVRvSG9sZSgpOwogICAgICAgICBjYXNlIEFycmF5OjpTdHJpbmc6Ci0gICAgICAgICAg
ICByZXR1cm4gbm9kZS5vcCgpID09IEdldEJ5VmFsOworICAgICAgICAgICAgcmV0dXJuIG5vZGUt
Pm9wKCkgPT0gR2V0QnlWYWw7CiAjaWYgVVNFKEpTVkFMVUUzMl82NCkKICAgICAgICAgY2FzZSBB
cnJheTo6QXJndW1lbnRzOgotICAgICAgICAgICAgaWYgKG5vZGUub3AoKSA9PSBHZXRCeVZhbCkK
KyAgICAgICAgICAgIGlmIChub2RlLT5vcCgpID09IEdldEJ5VmFsKQogICAgICAgICAgICAgICAg
IHJldHVybiB0cnVlOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogI2VuZGlmIC8vIFVTRShK
U1ZBTFVFMzJfNjQpCkBAIC01MzEsMTMgKzUwOCwxMyBAQCBwdWJsaWM6CiAgICAgICAgIH0KICAg
ICB9CiAgICAgCi0gICAgYm9vbCBjbG9iYmVyc1dvcmxkKE5vZGUmIG5vZGUpCisgICAgYm9vbCBj
bG9iYmVyc1dvcmxkKE5vZGUqIG5vZGUpCiAgICAgewotICAgICAgICBpZiAobm9kZS5mbGFncygp
ICYgTm9kZUNsb2JiZXJzV29ybGQpCisgICAgICAgIGlmIChub2RlLT5mbGFncygpICYgTm9kZUNs
b2JiZXJzV29ybGQpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgaWYgKCEobm9k
ZS5mbGFncygpICYgTm9kZU1pZ2h0Q2xvYmJlcikpCisgICAgICAgIGlmICghKG5vZGUtPmZsYWdz
KCkgJiBOb2RlTWlnaHRDbG9iYmVyKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAg
ICAgc3dpdGNoIChub2RlLm9wKCkpIHsKKyAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CiAg
ICAgICAgIGNhc2UgVmFsdWVBZGQ6CiAgICAgICAgIGNhc2UgQ29tcGFyZUxlc3M6CiAgICAgICAg
IGNhc2UgQ29tcGFyZUxlc3NFcToKQEAgLTU1NSw5ICs1MzIsOSBAQCBwdWJsaWM6CiAgICAgICAg
IH0KICAgICB9CiAgICAgCi0gICAgYm9vbCBjbG9iYmVyc1dvcmxkKE5vZGVJbmRleCBub2RlSW5k
ZXgpCisgICAgYm9vbCBjbG9iYmVyc1dvcmxkKE5vZGUqIG5vZGUpCiAgICAgewotICAgICAgICBy
ZXR1cm4gY2xvYmJlcnNXb3JsZChhdChub2RlSW5kZXgpKTsKKyAgICAgICAgcmV0dXJuIGNsb2Ji
ZXJzV29ybGQobm9kZSk7CiAgICAgfQogICAgIAogICAgIHZvaWQgZGV0ZXJtaW5lUmVhY2hhYmls
aXR5KCk7CkBAIC01NjUsMzAgKzU0MiwzMCBAQCBwdWJsaWM6CiAgICAgCiAgICAgdm9pZCByZXNl
dEV4aXRTdGF0ZXMoKTsKICAgICAKLSAgICB1bnNpZ25lZCB2YXJBcmdOdW1DaGlsZHJlbihOb2Rl
JiBub2RlKQorICAgIHVuc2lnbmVkIHZhckFyZ051bUNoaWxkcmVuKE5vZGUqIG5vZGUpCiAgICAg
ewotICAgICAgICBBU1NFUlQobm9kZS5mbGFncygpICYgTm9kZUhhc1ZhckFyZ3MpOwotICAgICAg
ICByZXR1cm4gbm9kZS5udW1DaGlsZHJlbigpOworICAgICAgICBBU1NFUlQobm9kZS0+ZmxhZ3Mo
KSAmIE5vZGVIYXNWYXJBcmdzKTsKKyAgICAgICAgcmV0dXJuIG5vZGUtPm51bUNoaWxkcmVuKCk7
CiAgICAgfQogICAgIAotICAgIHVuc2lnbmVkIG51bUNoaWxkcmVuKE5vZGUmIG5vZGUpCisgICAg
dW5zaWduZWQgbnVtQ2hpbGRyZW4oTm9kZSogbm9kZSkKICAgICB7Ci0gICAgICAgIGlmIChub2Rl
LmZsYWdzKCkgJiBOb2RlSGFzVmFyQXJncykKKyAgICAgICAgaWYgKG5vZGUtPmZsYWdzKCkgJiBO
b2RlSGFzVmFyQXJncykKICAgICAgICAgICAgIHJldHVybiB2YXJBcmdOdW1DaGlsZHJlbihub2Rl
KTsKICAgICAgICAgcmV0dXJuIEFkamFjZW5jeUxpc3Q6OlNpemU7CiAgICAgfQogICAgIAotICAg
IEVkZ2UmIHZhckFyZ0NoaWxkKE5vZGUmIG5vZGUsIHVuc2lnbmVkIGluZGV4KQorICAgIEVkZ2Um
IHZhckFyZ0NoaWxkKE5vZGUqIG5vZGUsIHVuc2lnbmVkIGluZGV4KQogICAgIHsKLSAgICAgICAg
QVNTRVJUKG5vZGUuZmxhZ3MoKSAmIE5vZGVIYXNWYXJBcmdzKTsKLSAgICAgICAgcmV0dXJuIG1f
dmFyQXJnQ2hpbGRyZW5bbm9kZS5maXJzdENoaWxkKCkgKyBpbmRleF07CisgICAgICAgIEFTU0VS
VChub2RlLT5mbGFncygpICYgTm9kZUhhc1ZhckFyZ3MpOworICAgICAgICByZXR1cm4gbV92YXJB
cmdDaGlsZHJlbltub2RlLT5maXJzdENoaWxkKCkgKyBpbmRleF07CiAgICAgfQogICAgIAotICAg
IEVkZ2UmIGNoaWxkKE5vZGUmIG5vZGUsIHVuc2lnbmVkIGluZGV4KQorICAgIEVkZ2UmIGNoaWxk
KE5vZGUqIG5vZGUsIHVuc2lnbmVkIGluZGV4KQogICAgIHsKLSAgICAgICAgaWYgKG5vZGUuZmxh
Z3MoKSAmIE5vZGVIYXNWYXJBcmdzKQorICAgICAgICBpZiAobm9kZS0+ZmxhZ3MoKSAmIE5vZGVI
YXNWYXJBcmdzKQogICAgICAgICAgICAgcmV0dXJuIHZhckFyZ0NoaWxkKG5vZGUsIGluZGV4KTsK
LSAgICAgICAgcmV0dXJuIG5vZGUuY2hpbGRyZW4uY2hpbGQoaW5kZXgpOworICAgICAgICByZXR1
cm4gbm9kZS0+Y2hpbGRyZW4uY2hpbGQoaW5kZXgpOwogICAgIH0KICAgICAKICAgICB2b2lkIHZv
dGUoRWRnZSBlZGdlLCB1bnNpZ25lZCBiYWxsb3QpCkBAIC01OTYsMjEgKzU3MywyMSBAQCBwdWJs
aWM6CiAgICAgICAgIHN3aXRjaCAoYXQoZWRnZSkub3AoKSkgewogICAgICAgICBjYXNlIFZhbHVl
VG9JbnQzMjoKICAgICAgICAgY2FzZSBVSW50MzJUb051bWJlcjoKLSAgICAgICAgICAgIGVkZ2Ug
PSBhdChlZGdlKS5jaGlsZDEoKTsKKyAgICAgICAgICAgIGVkZ2UgPSBlZGdlLT5jaGlsZDEoKTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIGlmIChhdChlZGdlKS5vcCgpID09IEdldExv
Y2FsKQotICAgICAgICAgICAgYXQoZWRnZSkudmFyaWFibGVBY2Nlc3NEYXRhKCktPnZvdGUoYmFs
bG90KTsKKyAgICAgICAgaWYgKGVkZ2UtPm9wKCkgPT0gR2V0TG9jYWwpCisgICAgICAgICAgICBl
ZGdlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+dm90ZShiYWxsb3QpOwogICAgIH0KICAgICAKLSAg
ICB2b2lkIHZvdGUoTm9kZSYgbm9kZSwgdW5zaWduZWQgYmFsbG90KQorICAgIHZvaWQgdm90ZShO
b2RlKiBub2RlLCB1bnNpZ25lZCBiYWxsb3QpCiAgICAgewotICAgICAgICBpZiAobm9kZS5mbGFn
cygpICYgTm9kZUhhc1ZhckFyZ3MpIHsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgY2hpbGRJ
ZHggPSBub2RlLmZpcnN0Q2hpbGQoKTsKLSAgICAgICAgICAgICAgICAgY2hpbGRJZHggPCBub2Rl
LmZpcnN0Q2hpbGQoKSArIG5vZGUubnVtQ2hpbGRyZW4oKTsKKyAgICAgICAgaWYgKG5vZGUtPmZs
YWdzKCkgJiBOb2RlSGFzVmFyQXJncykgeworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBjaGls
ZElkeCA9IG5vZGUtPmZpcnN0Q2hpbGQoKTsKKyAgICAgICAgICAgICAgICAgY2hpbGRJZHggPCBu
b2RlLT5maXJzdENoaWxkKCkgKyBub2RlLT5udW1DaGlsZHJlbigpOwogICAgICAgICAgICAgICAg
ICBjaGlsZElkeCsrKSB7CiAgICAgICAgICAgICAgICAgaWYgKCEhbV92YXJBcmdDaGlsZHJlbltj
aGlsZElkeF0pCiAgICAgICAgICAgICAgICAgICAgIHZvdGUobV92YXJBcmdDaGlsZHJlbltjaGls
ZElkeF0sIGJhbGxvdCk7CkBAIC02MTgsMzkgKzU5NSwzOCBAQCBwdWJsaWM6CiAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIGlmICghbm9kZS5jaGlsZDEo
KSkKKyAgICAgICAgaWYgKCFub2RlLT5jaGlsZDEoKSkKICAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgdm90ZShub2RlLmNoaWxkMSgpLCBiYWxsb3QpOwotICAgICAgICBpZiAoIW5vZGUuY2hp
bGQyKCkpCisgICAgICAgIHZvdGUobm9kZS0+Y2hpbGQxKCksIGJhbGxvdCk7CisgICAgICAgIGlm
ICghbm9kZS0+Y2hpbGQyKCkpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIHZvdGUobm9k
ZS5jaGlsZDIoKSwgYmFsbG90KTsKLSAgICAgICAgaWYgKCFub2RlLmNoaWxkMygpKQorICAgICAg
ICB2b3RlKG5vZGUtPmNoaWxkMigpLCBiYWxsb3QpOworICAgICAgICBpZiAoIW5vZGUtPmNoaWxk
MygpKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB2b3RlKG5vZGUuY2hpbGQzKCksIGJh
bGxvdCk7CisgICAgICAgIHZvdGUobm9kZS0+Y2hpbGQzKCksIGJhbGxvdCk7CiAgICAgfQogICAg
IAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IC8vIFQgPSBOb2RlSW5kZXggb3IgRWRnZQorICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFQ+IC8vIFQgPSBOb2RlKiBvciBFZGdlCiAgICAgdm9pZCBzdWJz
dGl0dXRlKEJhc2ljQmxvY2smIGJsb2NrLCB1bnNpZ25lZCBzdGFydEluZGV4SW5CbG9jaywgVCBv
bGRUaGluZywgVCBuZXdUaGluZykKICAgICB7CiAgICAgICAgIGZvciAodW5zaWduZWQgaW5kZXhJ
bkJsb2NrID0gc3RhcnRJbmRleEluQmxvY2s7IGluZGV4SW5CbG9jayA8IGJsb2NrLnNpemUoKTsg
KytpbmRleEluQmxvY2spIHsKLSAgICAgICAgICAgIE5vZGVJbmRleCBub2RlSW5kZXggPSBibG9j
a1tpbmRleEluQmxvY2tdOwotICAgICAgICAgICAgTm9kZSYgbm9kZSA9IGF0KG5vZGVJbmRleCk7
Ci0gICAgICAgICAgICBpZiAobm9kZS5mbGFncygpICYgTm9kZUhhc1ZhckFyZ3MpIHsKLSAgICAg
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGNoaWxkSWR4ID0gbm9kZS5maXJzdENoaWxkKCk7IGNo
aWxkSWR4IDwgbm9kZS5maXJzdENoaWxkKCkgKyBub2RlLm51bUNoaWxkcmVuKCk7ICsrY2hpbGRJ
ZHgpIHsKKyAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9ja1tpbmRleEluQmxvY2tdOworICAg
ICAgICAgICAgaWYgKG5vZGUtPmZsYWdzKCkgJiBOb2RlSGFzVmFyQXJncykgeworICAgICAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgY2hpbGRJZHggPSBub2RlLT5maXJzdENoaWxkKCk7IGNoaWxk
SWR4IDwgbm9kZS0+Zmlyc3RDaGlsZCgpICsgbm9kZS0+bnVtQ2hpbGRyZW4oKTsgKytjaGlsZElk
eCkgewogICAgICAgICAgICAgICAgICAgICBpZiAoISFtX3ZhckFyZ0NoaWxkcmVuW2NoaWxkSWR4
XSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBhcmVBbmRTd2FwKG1fdmFyQXJnQ2hpbGRy
ZW5bY2hpbGRJZHhdLCBvbGRUaGluZywgbmV3VGhpbmcsIG5vZGUuc2hvdWxkR2VuZXJhdGUoKSk7
CisgICAgICAgICAgICAgICAgICAgICAgICBjb21wYXJlQW5kU3dhcChtX3ZhckFyZ0NoaWxkcmVu
W2NoaWxkSWR4XSwgb2xkVGhpbmcsIG5ld1RoaW5nLCBub2RlLT5zaG91bGRHZW5lcmF0ZSgpKTsK
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBpZiAoIW5vZGUuY2hpbGQxKCkpCisgICAgICAgICAgICBpZiAoIW5v
ZGUtPmNoaWxkMSgpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgY29t
cGFyZUFuZFN3YXAobm9kZS5jaGlsZHJlbi5jaGlsZDEoKSwgb2xkVGhpbmcsIG5ld1RoaW5nLCBu
b2RlLnNob3VsZEdlbmVyYXRlKCkpOwotICAgICAgICAgICAgaWYgKCFub2RlLmNoaWxkMigpKQor
ICAgICAgICAgICAgY29tcGFyZUFuZFN3YXAobm9kZS0+Y2hpbGRyZW4uY2hpbGQxKCksIG9sZFRo
aW5nLCBuZXdUaGluZywgbm9kZS0+c2hvdWxkR2VuZXJhdGUoKSk7CisgICAgICAgICAgICBpZiAo
IW5vZGUtPmNoaWxkMigpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAg
Y29tcGFyZUFuZFN3YXAobm9kZS5jaGlsZHJlbi5jaGlsZDIoKSwgb2xkVGhpbmcsIG5ld1RoaW5n
LCBub2RlLnNob3VsZEdlbmVyYXRlKCkpOwotICAgICAgICAgICAgaWYgKCFub2RlLmNoaWxkMygp
KQorICAgICAgICAgICAgY29tcGFyZUFuZFN3YXAobm9kZS0+Y2hpbGRyZW4uY2hpbGQyKCksIG9s
ZFRoaW5nLCBuZXdUaGluZywgbm9kZS0+c2hvdWxkR2VuZXJhdGUoKSk7CisgICAgICAgICAgICBp
ZiAoIW5vZGUtPmNoaWxkMygpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAg
ICAgY29tcGFyZUFuZFN3YXAobm9kZS5jaGlsZHJlbi5jaGlsZDMoKSwgb2xkVGhpbmcsIG5ld1Ro
aW5nLCBub2RlLnNob3VsZEdlbmVyYXRlKCkpOworICAgICAgICAgICAgY29tcGFyZUFuZFN3YXAo
bm9kZS0+Y2hpbGRyZW4uY2hpbGQzKCksIG9sZFRoaW5nLCBuZXdUaGluZywgbm9kZS0+c2hvdWxk
R2VuZXJhdGUoKSk7CiAgICAgICAgIH0KICAgICB9CiAgICAgCkBAIC02NTgsMjkgKzYzNCwyOCBA
QCBwdWJsaWM6CiAgICAgLy8gYW55IEdldExvY2FscyBpbiB0aGUgYmFzaWMgYmxvY2suCiAgICAg
Ly8gRklYTUU6IGl0IG1heSBiZSBhcHByb3ByaWF0ZSwgaW4gdGhlIGZ1dHVyZSwgdG8gZ2VuZXJh
bGl6ZSB0aGlzIHRvIGhhbmRsZSBHZXRMb2NhbHMKICAgICAvLyBpbnRyb2R1Y2VkIGFueXdoZXJl
IGluIHRoZSBiYXNpYyBibG9jay4KLSAgICB2b2lkIHN1YnN0aXR1dGVHZXRMb2NhbChCYXNpY0Js
b2NrJiBibG9jaywgdW5zaWduZWQgc3RhcnRJbmRleEluQmxvY2ssIFZhcmlhYmxlQWNjZXNzRGF0
YSogdmFyaWFibGVBY2Nlc3NEYXRhLCBOb2RlSW5kZXggbmV3R2V0TG9jYWwpCisgICAgdm9pZCBz
dWJzdGl0dXRlR2V0TG9jYWwoQmFzaWNCbG9jayYgYmxvY2ssIHVuc2lnbmVkIHN0YXJ0SW5kZXhJ
bkJsb2NrLCBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSwgTm9kZSogbmV3
R2V0TG9jYWwpCiAgICAgewogICAgICAgICBpZiAodmFyaWFibGVBY2Nlc3NEYXRhLT5pc0NhcHR1
cmVkKCkpIHsKICAgICAgICAgICAgIC8vIExldCBDU0Ugd29ycnkgYWJvdXQgdGhpcyBvbmUuCiAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgZm9yICh1bnNpZ25lZCBpbmRl
eEluQmxvY2sgPSBzdGFydEluZGV4SW5CbG9jazsgaW5kZXhJbkJsb2NrIDwgYmxvY2suc2l6ZSgp
OyArK2luZGV4SW5CbG9jaykgewotICAgICAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRleCA9IGJs
b2NrW2luZGV4SW5CbG9ja107Ci0gICAgICAgICAgICBOb2RlJiBub2RlID0gYXQobm9kZUluZGV4
KTsKKyAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9ja1tpbmRleEluQmxvY2tdOwogICAgICAg
ICAgICAgYm9vbCBzaG91bGRDb250aW51ZSA9IHRydWU7Ci0gICAgICAgICAgICBzd2l0Y2ggKG5v
ZGUub3AoKSkgeworICAgICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CiAgICAgICAgICAg
ICBjYXNlIFNldExvY2FsOiB7Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGUubG9jYWwoKSA9PSB2
YXJpYWJsZUFjY2Vzc0RhdGEtPmxvY2FsKCkpCisgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmxv
Y2FsKCkgPT0gdmFyaWFibGVBY2Nlc3NEYXRhLT5sb2NhbCgpKQogICAgICAgICAgICAgICAgICAg
ICBzaG91bGRDb250aW51ZSA9IGZhbHNlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgY2FzZSBHZXRMb2NhbDogewot
ICAgICAgICAgICAgICAgIGlmIChub2RlLnZhcmlhYmxlQWNjZXNzRGF0YSgpICE9IHZhcmlhYmxl
QWNjZXNzRGF0YSkKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRh
KCkgIT0gdmFyaWFibGVBY2Nlc3NEYXRhKQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsK
LSAgICAgICAgICAgICAgICBzdWJzdGl0dXRlKGJsb2NrLCBpbmRleEluQmxvY2ssIG5vZGVJbmRl
eCwgbmV3R2V0TG9jYWwpOwotICAgICAgICAgICAgICAgIE5vZGVJbmRleCBvbGRUYWlsSW5kZXgg
PSBibG9jay52YXJpYWJsZXNBdFRhaWwub3BlcmFuZCh2YXJpYWJsZUFjY2Vzc0RhdGEtPmxvY2Fs
KCkpOwotICAgICAgICAgICAgICAgIGlmIChvbGRUYWlsSW5kZXggPT0gbm9kZUluZGV4KQorICAg
ICAgICAgICAgICAgIHN1YnN0aXR1dGUoYmxvY2ssIGluZGV4SW5CbG9jaywgbm9kZSwgbmV3R2V0
TG9jYWwpOworICAgICAgICAgICAgICAgIE5vZGUqIG9sZFRhaWxOb2RlID0gYmxvY2sudmFyaWFi
bGVzQXRUYWlsLm9wZXJhbmQodmFyaWFibGVBY2Nlc3NEYXRhLT5sb2NhbCgpKTsKKyAgICAgICAg
ICAgICAgICBpZiAob2xkVGFpbE5vZGUgPT0gbm9kZSkKICAgICAgICAgICAgICAgICAgICAgYmxv
Y2sudmFyaWFibGVzQXRUYWlsLm9wZXJhbmQodmFyaWFibGVBY2Nlc3NEYXRhLT5sb2NhbCgpKSA9
IG5ld0dldExvY2FsOwogICAgICAgICAgICAgICAgIHNob3VsZENvbnRpbnVlID0gZmFsc2U7CiAg
ICAgICAgICAgICAgICAgYnJlYWs7CkBAIC02OTgsNiArNjczLDggQEAgcHVibGljOgogICAgIENv
ZGVCbG9jayogbV9jb2RlQmxvY2s7CiAgICAgUmVmUHRyPFByb2ZpbGVyOjpDb21waWxhdGlvbj4g
bV9jb21waWxhdGlvbjsKICAgICBDb2RlQmxvY2sqIG1fcHJvZmlsZWRCbG9jazsKKyAgICAKKyAg
ICBOb2RlQWxsb2NhdG9yIG1fYWxsb2NhdG9yOwogCiAgICAgVmVjdG9yPCBPd25QdHI8QmFzaWNC
bG9jaz4gLCA4PiBtX2Jsb2NrczsKICAgICBWZWN0b3I8RWRnZSwgMTY+IG1fdmFyQXJnQ2hpbGRy
ZW47CkBAIC03MDUsNyArNjgyLDcgQEAgcHVibGljOgogICAgIFZlY3RvcjxSZXNvbHZlR2xvYmFs
RGF0YT4gbV9yZXNvbHZlR2xvYmFsRGF0YTsKICAgICBWZWN0b3I8UmVzb2x2ZU9wZXJhdGlvbkRh
dGE+IG1fcmVzb2x2ZU9wZXJhdGlvbnNEYXRhOwogICAgIFZlY3RvcjxQdXRUb0Jhc2VPcGVyYXRp
b25EYXRhPiBtX3B1dFRvQmFzZU9wZXJhdGlvbkRhdGE7Ci0gICAgVmVjdG9yPE5vZGVJbmRleCwg
OD4gbV9hcmd1bWVudHM7CisgICAgVmVjdG9yPE5vZGUqLCA4PiBtX2FyZ3VtZW50czsKICAgICBT
ZWdtZW50ZWRWZWN0b3I8VmFyaWFibGVBY2Nlc3NEYXRhLCAxNj4gbV92YXJpYWJsZUFjY2Vzc0Rh
dGE7CiAgICAgU2VnbWVudGVkVmVjdG9yPEFyZ3VtZW50UG9zaXRpb24sIDg+IG1fYXJndW1lbnRQ
b3NpdGlvbnM7CiAgICAgU2VnbWVudGVkVmVjdG9yPFN0cnVjdHVyZVNldCwgMTY+IG1fc3RydWN0
dXJlU2V0OwpAQCAtNzI1LDI5ICs3MDIsMjkgQEAgcHJpdmF0ZToKICAgICAKICAgICB2b2lkIGhh
bmRsZVN1Y2Nlc3NvcihWZWN0b3I8QmxvY2tJbmRleCwgMTY+JiB3b3JrbGlzdCwgQmxvY2tJbmRl
eCBibG9ja0luZGV4LCBCbG9ja0luZGV4IHN1Y2Nlc3NvckluZGV4KTsKICAgICAKLSAgICBBZGRT
cGVjdWxhdGlvbk1vZGUgYWRkSW1tZWRpYXRlU2hvdWxkU3BlY3VsYXRlSW50ZWdlcihOb2RlJiBh
ZGQsIGJvb2wgdmFyaWFibGVTaG91bGRTcGVjdWxhdGVJbnRlZ2VyLCBOb2RlJiBpbW1lZGlhdGUp
CisgICAgQWRkU3BlY3VsYXRpb25Nb2RlIGFkZEltbWVkaWF0ZVNob3VsZFNwZWN1bGF0ZUludGVn
ZXIoTm9kZSogYWRkLCBib29sIHZhcmlhYmxlU2hvdWxkU3BlY3VsYXRlSW50ZWdlciwgTm9kZSog
aW1tZWRpYXRlKQogICAgIHsKICAgICAgICAgQVNTRVJUKGltbWVkaWF0ZS5oYXNDb25zdGFudCgp
KTsKICAgICAgICAgCi0gICAgICAgIEpTVmFsdWUgaW1tZWRpYXRlVmFsdWUgPSBpbW1lZGlhdGUu
dmFsdWVPZkpTQ29uc3RhbnQobV9jb2RlQmxvY2spOwotICAgICAgICBpZiAoIWltbWVkaWF0ZVZh
bHVlLmlzTnVtYmVyKCkpCisgICAgICAgIEpTVmFsdWUgaW1tZWRpYXRlVmFsdWUgPSBpbW1lZGlh
dGUtPnZhbHVlT2ZKU0NvbnN0YW50KG1fY29kZUJsb2NrKTsKKyAgICAgICAgaWYgKCFpbW1lZGlh
dGVWYWx1ZS0+aXNOdW1iZXIoKSkKICAgICAgICAgICAgIHJldHVybiBEb250U3BlY3VsYXRlSW50
ZWdlcjsKICAgICAgICAgCiAgICAgICAgIGlmICghdmFyaWFibGVTaG91bGRTcGVjdWxhdGVJbnRl
Z2VyKQogICAgICAgICAgICAgcmV0dXJuIERvbnRTcGVjdWxhdGVJbnRlZ2VyOwogICAgICAgICAK
LSAgICAgICAgaWYgKGltbWVkaWF0ZVZhbHVlLmlzSW50MzIoKSkKLSAgICAgICAgICAgIHJldHVy
biBhZGQuY2FuU3BlY3VsYXRlSW50ZWdlcigpID8gU3BlY3VsYXRlSW50ZWdlciA6IERvbnRTcGVj
dWxhdGVJbnRlZ2VyOworICAgICAgICBpZiAoaW1tZWRpYXRlVmFsdWUtPmlzSW50MzIoKSkKKyAg
ICAgICAgICAgIHJldHVybiBhZGQtPmNhblNwZWN1bGF0ZUludGVnZXIoKSA/IFNwZWN1bGF0ZUlu
dGVnZXIgOiBEb250U3BlY3VsYXRlSW50ZWdlcjsKICAgICAgICAgCiAgICAgICAgIGRvdWJsZSBk
b3VibGVJbW1lZGlhdGUgPSBpbW1lZGlhdGVWYWx1ZS5hc0RvdWJsZSgpOwogICAgICAgICBjb25z
dCBkb3VibGUgdHdvVG9UaGU0OCA9IDI4MTQ3NDk3NjcxMDY1Ni4wOwogICAgICAgICBpZiAoZG91
YmxlSW1tZWRpYXRlIDwgLXR3b1RvVGhlNDggfHwgZG91YmxlSW1tZWRpYXRlID4gdHdvVG9UaGU0
OCkKICAgICAgICAgICAgIHJldHVybiBEb250U3BlY3VsYXRlSW50ZWdlcjsKICAgICAgICAgCi0g
ICAgICAgIHJldHVybiBub2RlQ2FuVHJ1bmNhdGVJbnRlZ2VyKGFkZC5hcml0aE5vZGVGbGFncygp
KSA/IFNwZWN1bGF0ZUludGVnZXJCdXRBbHdheXNXYXRjaE92ZXJmbG93IDogRG9udFNwZWN1bGF0
ZUludGVnZXI7CisgICAgICAgIHJldHVybiBub2RlQ2FuVHJ1bmNhdGVJbnRlZ2VyKGFkZC0+YXJp
dGhOb2RlRmxhZ3MoKSkgPyBTcGVjdWxhdGVJbnRlZ2VyQnV0QWx3YXlzV2F0Y2hPdmVyZmxvdyA6
IERvbnRTcGVjdWxhdGVJbnRlZ2VyOwogICAgIH0KICAgICAKLSAgICBib29sIG11bEltbWVkaWF0
ZVNob3VsZFNwZWN1bGF0ZUludGVnZXIoTm9kZSYgbXVsLCBOb2RlJiB2YXJpYWJsZSwgTm9kZSYg
aW1tZWRpYXRlKQorICAgIGJvb2wgbXVsSW1tZWRpYXRlU2hvdWxkU3BlY3VsYXRlSW50ZWdlcihO
b2RlKiBtdWwsIE5vZGUqIHZhcmlhYmxlLCBOb2RlKiBpbW1lZGlhdGUpCiAgICAgewogICAgICAg
ICBBU1NFUlQoaW1tZWRpYXRlLmhhc0NvbnN0YW50KCkpOwogICAgICAgICAKQEAgLTc1NSw3ICs3
MzIsNyBAQCBwcml2YXRlOgogICAgICAgICBpZiAoIWltbWVkaWF0ZVZhbHVlLmlzSW50MzIoKSkK
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgCi0gICAgICAgIGlmICghdmFyaWFi
bGUuc2hvdWxkU3BlY3VsYXRlSW50ZWdlckZvckFyaXRobWV0aWMoKSkKKyAgICAgICAgaWYgKCF2
YXJpYWJsZS0+c2hvdWxkU3BlY3VsYXRlSW50ZWdlckZvckFyaXRobWV0aWMoKSkKICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgCiAgICAgICAgIGludDMyX3QgaW50SW1tZWRpYXRl
ID0gaW1tZWRpYXRlVmFsdWUuYXNJbnQzMigpOwpAQCAtNzY2LDE0ICs3NDMsMTQgQEAgcHJpdmF0
ZToKICAgICAgICAgLy8gY2FuU3BlY3VsYXRlSW50ZWdlcigpIGltcGxpZXMpLgogICAgICAgICBj
b25zdCBpbnQzMl90IHR3b1RvVGhlMjIgPSAxIDw8IDIyOwogICAgICAgICBpZiAoaW50SW1tZWRp
YXRlIDw9IC10d29Ub1RoZTIyIHx8IGludEltbWVkaWF0ZSA+PSB0d29Ub1RoZTIyKQotICAgICAg
ICAgICAgcmV0dXJuIG11bC5jYW5TcGVjdWxhdGVJbnRlZ2VyKCkgJiYgIW5vZGVNYXlPdmVyZmxv
dyhtdWwuYXJpdGhOb2RlRmxhZ3MoKSk7CisgICAgICAgICAgICByZXR1cm4gbXVsLT5jYW5TcGVj
dWxhdGVJbnRlZ2VyKCkgJiYgIW5vZGVNYXlPdmVyZmxvdyhtdWwtPmFyaXRoTm9kZUZsYWdzKCkp
OwogCi0gICAgICAgIHJldHVybiBtdWwuY2FuU3BlY3VsYXRlSW50ZWdlcigpOworICAgICAgICBy
ZXR1cm4gbXVsLT5jYW5TcGVjdWxhdGVJbnRlZ2VyKCk7CiAgICAgfQogICAgIAogICAgIC8vIFdo
ZW4gYSBub2RlJ3MgcmVmQ291bnQgZ29lcyBmcm9tIDAgdG8gMSwgaXQgbXVzdCAobG9naWNhbGx5
KSByZWN1cnNpdmVseSByZWYgYWxsIG9mIGl0cyBjaGlsZHJlbiwgYW5kIHZpY2UgdmVyc2EuCi0g
ICAgdm9pZCByZWZDaGlsZHJlbihOb2RlSW5kZXgpOwotICAgIHZvaWQgZGVyZWZDaGlsZHJlbihO
b2RlSW5kZXgpOworICAgIHZvaWQgcmVmQ2hpbGRyZW4oTm9kZSopOworICAgIHZvaWQgZGVyZWZD
aGlsZHJlbihOb2RlKik7CiB9OwogCiBjbGFzcyBHZXRCeXRlY29kZUJlZ2luRm9yQmxvY2sgewpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuY3BwCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmNwcAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSw1NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZHTm9kZS5oIgorCisjaWYgRU5BQkxF
KERGR19KSVQpCisKKyNpbmNsdWRlICJERkdOb2RlQWxsb2NhdG9yLmgiCisKK25hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgREZHIHsKKwordW5zaWduZWQgTm9kZTo6aW5kZXgoKSBjb25zdAorewor
ICAgIHJldHVybiBOb2RlQWxsb2NhdG9yOjphbGxvY2F0b3JPZih0aGlzKS0+aW5kZXhPZih0aGlz
KTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCituYW1lc3BhY2UgV1RGIHsKKwor
dm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIE5vZGUqIG5vZGUpCit7CisgICAg
aWYgKCFub2RlKQorICAgICAgICBvdXQucHJpbnQoIi0iKTsKKyAgICBlbHNlCisgICAgICAgIG91
dC5wcmludCgiQCIsIG5vZGUtPmluZGV4KCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBXVEYKKwor
I2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR05vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R05vZGUuaAkocmV2aXNpb24gMTM5NTg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDExLCAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMSwgMjAxMiwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTY4LDcgKzY4LDcgQEAgc3RydWN0
IE5ld0FycmF5QnVmZmVyRGF0YSB7CiAKIC8vIFRoaXMgdHlwZSB1c2VkIGluIHBhc3NpbmcgYW4g
aW1tZWRpYXRlIGFyZ3VtZW50IHRvIE5vZGUgY29uc3RydWN0b3I7CiAvLyBkaXN0aW5ndWlzaGVz
IGFuIGltbWVkaWF0ZSB2YWx1ZSAodHlwaWNhbGx5IGFuIGluZGV4IGludG8gYSBDb2RlQmxvY2sg
ZGF0YSBzdHJ1Y3R1cmUgLSAKLS8vIGEgY29uc3RhbnQgaW5kZXgsIGFyZ3VtZW50LCBvciBpZGVu
dGlmaWVyKSBmcm9tIGEgTm9kZUluZGV4LgorLy8gYSBjb25zdGFudCBpbmRleCwgYXJndW1lbnQs
IG9yIGlkZW50aWZpZXIpIGZyb20gYSBOb2RlKi4KIHN0cnVjdCBPcEluZm8gewogICAgIGV4cGxp
Y2l0IE9wSW5mbyhpbnQzMl90IHZhbHVlKSA6IG1fdmFsdWUoc3RhdGljX2Nhc3Q8dWludHB0cl90
Pih2YWx1ZSkpIHsgfQogICAgIGV4cGxpY2l0IE9wSW5mbyh1aW50MzJfdCB2YWx1ZSkgOiBtX3Zh
bHVlKHN0YXRpY19jYXN0PHVpbnRwdHJfdD4odmFsdWUpKSB7IH0KQEAgLTg4LDcgKzg4LDcgQEAg
c3RydWN0IE5vZGUgewogICAgIE5vZGUoKSB7IH0KICAgICAKICAgICAvLyBDb25zdHJ1Y3QgYSBu
b2RlIHdpdGggdXAgdG8gMyBjaGlsZHJlbiwgbm8gaW1tZWRpYXRlIHZhbHVlLgotICAgIE5vZGUo
Tm9kZVR5cGUgb3AsIENvZGVPcmlnaW4gY29kZU9yaWdpbiwgTm9kZUluZGV4IGNoaWxkMSA9IE5v
Tm9kZSwgTm9kZUluZGV4IGNoaWxkMiA9IE5vTm9kZSwgTm9kZUluZGV4IGNoaWxkMyA9IE5vTm9k
ZSkKKyAgICBOb2RlKE5vZGVUeXBlIG9wLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIE5vZGUqIGNo
aWxkMSA9IDAsIE5vZGUqIGNoaWxkMiA9IDAsIE5vZGUqIGNoaWxkMyA9IDApCiAgICAgICAgIDog
Y29kZU9yaWdpbihjb2RlT3JpZ2luKQogICAgICAgICAsIGNoaWxkcmVuKEFkamFjZW5jeUxpc3Q6
OkZpeGVkLCBjaGlsZDEsIGNoaWxkMiwgY2hpbGQzKQogICAgICAgICAsIG1fdmlydHVhbFJlZ2lz
dGVyKEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIpCkBAIC0xMDAsNyArMTAwLDcgQEAgc3RydWN0IE5v
ZGUgewogICAgIH0KIAogICAgIC8vIENvbnN0cnVjdCBhIG5vZGUgd2l0aCB1cCB0byAzIGNoaWxk
cmVuIGFuZCBhbiBpbW1lZGlhdGUgdmFsdWUuCi0gICAgTm9kZShOb2RlVHlwZSBvcCwgQ29kZU9y
aWdpbiBjb2RlT3JpZ2luLCBPcEluZm8gaW1tLCBOb2RlSW5kZXggY2hpbGQxID0gTm9Ob2RlLCBO
b2RlSW5kZXggY2hpbGQyID0gTm9Ob2RlLCBOb2RlSW5kZXggY2hpbGQzID0gTm9Ob2RlKQorICAg
IE5vZGUoTm9kZVR5cGUgb3AsIENvZGVPcmlnaW4gY29kZU9yaWdpbiwgT3BJbmZvIGltbSwgTm9k
ZSogY2hpbGQxID0gMCwgTm9kZSogY2hpbGQyID0gMCwgTm9kZSogY2hpbGQzID0gMCkKICAgICAg
ICAgOiBjb2RlT3JpZ2luKGNvZGVPcmlnaW4pCiAgICAgICAgICwgY2hpbGRyZW4oQWRqYWNlbmN5
TGlzdDo6Rml4ZWQsIGNoaWxkMSwgY2hpbGQyLCBjaGlsZDMpCiAgICAgICAgICwgbV92aXJ0dWFs
UmVnaXN0ZXIoSW52YWxpZFZpcnR1YWxSZWdpc3RlcikKQEAgLTExMyw3ICsxMTMsNyBAQCBzdHJ1
Y3QgTm9kZSB7CiAgICAgfQogCiAgICAgLy8gQ29uc3RydWN0IGEgbm9kZSB3aXRoIHVwIHRvIDMg
Y2hpbGRyZW4gYW5kIHR3byBpbW1lZGlhdGUgdmFsdWVzLgotICAgIE5vZGUoTm9kZVR5cGUgb3As
IENvZGVPcmlnaW4gY29kZU9yaWdpbiwgT3BJbmZvIGltbTEsIE9wSW5mbyBpbW0yLCBOb2RlSW5k
ZXggY2hpbGQxID0gTm9Ob2RlLCBOb2RlSW5kZXggY2hpbGQyID0gTm9Ob2RlLCBOb2RlSW5kZXgg
Y2hpbGQzID0gTm9Ob2RlKQorICAgIE5vZGUoTm9kZVR5cGUgb3AsIENvZGVPcmlnaW4gY29kZU9y
aWdpbiwgT3BJbmZvIGltbTEsIE9wSW5mbyBpbW0yLCBOb2RlKiBjaGlsZDEgPSAwLCBOb2RlKiBj
aGlsZDIgPSAwLCBOb2RlKiBjaGlsZDMgPSAwKQogICAgICAgICA6IGNvZGVPcmlnaW4oY29kZU9y
aWdpbikKICAgICAgICAgLCBjaGlsZHJlbihBZGphY2VuY3lMaXN0OjpGaXhlZCwgY2hpbGQxLCBj
aGlsZDIsIGNoaWxkMykKICAgICAgICAgLCBtX3ZpcnR1YWxSZWdpc3RlcihJbnZhbGlkVmlydHVh
bFJlZ2lzdGVyKQpAQCAtMTQzLDYgKzE0Myw5IEBAIHN0cnVjdCBOb2RlIHsKICAgICBOb2RlVHlw
ZSBvcCgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PE5vZGVUeXBlPihtX29wKTsgfQogICAg
IE5vZGVGbGFncyBmbGFncygpIGNvbnN0IHsgcmV0dXJuIG1fZmxhZ3M7IH0KICAgICAKKyAgICAv
LyBUaGlzIGlzIG5vdCBhIGZhc3QgbWV0aG9kLgorICAgIHVuc2lnbmVkIGluZGV4KCkgY29uc3Q7
CisgICAgCiAgICAgdm9pZCBzZXRPcChOb2RlVHlwZSBvcCkKICAgICB7CiAgICAgICAgIG1fb3Ag
PSBvcDsKQEAgLTI3MCw3ICsyNzMsNyBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAgIGNvbnZlcnRU
b1N0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50KHN0cnVjdHVyZVNldCgpLnNpbmdsZXRvblN0
cnVjdHVyZSgpKTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBjb252ZXJ0VG9HZXRCeU9mZnNldCh1
bnNpZ25lZCBzdG9yYWdlQWNjZXNzRGF0YUluZGV4LCBOb2RlSW5kZXggc3RvcmFnZSkKKyAgICB2
b2lkIGNvbnZlcnRUb0dldEJ5T2Zmc2V0KHVuc2lnbmVkIHN0b3JhZ2VBY2Nlc3NEYXRhSW5kZXgs
IE5vZGUqIHN0b3JhZ2UpCiAgICAgewogICAgICAgICBBU1NFUlQobV9vcCA9PSBHZXRCeUlkIHx8
IG1fb3AgPT0gR2V0QnlJZEZsdXNoKTsKICAgICAgICAgbV9vcEluZm8gPSBzdG9yYWdlQWNjZXNz
RGF0YUluZGV4OwpAQCAtMjc5LDcgKzI4Miw3IEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAgbV9m
bGFncyAmPSB+Tm9kZUNsb2JiZXJzV29ybGQ7CiAgICAgfQogICAgIAotICAgIHZvaWQgY29udmVy
dFRvUHV0QnlPZmZzZXQodW5zaWduZWQgc3RvcmFnZUFjY2Vzc0RhdGFJbmRleCwgTm9kZUluZGV4
IHN0b3JhZ2UpCisgICAgdm9pZCBjb252ZXJ0VG9QdXRCeU9mZnNldCh1bnNpZ25lZCBzdG9yYWdl
QWNjZXNzRGF0YUluZGV4LCBOb2RlKiBzdG9yYWdlKQogICAgIHsKICAgICAgICAgQVNTRVJUKG1f
b3AgPT0gUHV0QnlJZCB8fCBtX29wID09IFB1dEJ5SWREaXJlY3QpOwogICAgICAgICBtX29wSW5m
byA9IHN0b3JhZ2VBY2Nlc3NEYXRhSW5kZXg7CkBAIC0xMTk3LDEwICsxMjAwLDE2IEBAIHByaXZh
dGU6CiBwdWJsaWM6CiAgICAgLy8gRmllbGRzIHVzZWQgYnkgdmFyaW91cyBhbmFseXNlcy4KICAg
ICBBYnN0cmFjdFZhbHVlIHZhbHVlOwotICAgIE5vZGVJbmRleCByZXBsYWNlbWVudDsKKyAgICBO
b2RlKiByZXBsYWNlbWVudDsKIH07CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKIAorbmFt
ZXNwYWNlIFdURiB7CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYsIE5vZGUqKTsK
KworfSAvLyBuYW1lc3BhY2UgV1RGCisKICNlbmRpZgogI2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR05vZGVBbGxvY2F0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVBbGxvY2F0b3IuaAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZUFsbG9jYXRvci5oCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDUxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpZm5kZWYgREZHTm9kZUFsbG9jYXRvcl9oCisjZGVmaW5lIERGR05vZGVBbGxvY2F0
b3JfaAorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNpZiBFTkFCTEUoREZHX0pJVCkK
KworI2luY2x1ZGUgIkRGR0FsbG9jYXRvci5oIgorI2luY2x1ZGUgIkRGR05vZGUuaCIKKworbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCit0eXBlZGVmIEFsbG9jYXRvcjxOb2RlLCA0
MDk1PiBOb2RlQWxsb2NhdG9yOworCitpbmxpbmUgdm9pZCogb3BlcmF0b3IgbmV3IChzaXplX3Qg
c2l6ZSwgTm9kZUFsbG9jYXRvciYgYWxsb2NhdG9yKQoreworICAgIEFTU0VSVChzaXplID09IHNp
emVvZihOb2RlKSk7CisgICAgcmV0dXJuIGFsbG9jYXRvci5hbGxvY2F0ZSgpOworfQorCit9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2Vu
ZGlmIC8vIERGR05vZGVBbGxvY2F0b3JfaAorCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>182866</attachid>
            <date>2013-01-15 16:14:58 -0800</date>
            <delta_ts>2013-01-15 16:54:34 -0800</delta_ts>
            <desc>work in progress</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>80680</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RWYWx1ZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RWYWx1ZS5oCShy
ZXZpc2lvbiAxMzk1ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0
VmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtNDE1LDYgKzQxNSw4IEBAIHN0cnVjdCBBYnN0cmFj
dFZhbHVlIHsKICAgICAvLyAgICBjaGFuZ2UgeCdzIHN0cnVjdHVyZSBhbmQgd2UgaGF2ZSBubyB3
YXkgb2YgcHJvdmluZyBvdGhlcndpc2UsIGJ1dAogICAgIC8vICAgIHgncyBtX2Z1dHVyZVBvc3Np
YmxlU3RydWN0dXJlIHdpbGwgYmUgd2hhdGV2ZXIgc3RydWN0dXJlIHdlIGhhZCBjaGVja2VkCiAg
ICAgLy8gICAgd2hlbiBnZXR0aW5nIHByb3BlcnR5ICdmJy4KKyAgICAKKyAgICAvLyBOQi4gQWxs
IGZpZWxkcyBpbiB0aGlzIHN0cnVjdCBtdXN0IGhhdmUgdHJpdmlhbCBkZXN0cnVjdG9ycy4KIAog
ICAgIC8vIFRoaXMgaXMgYSBwcm92ZW4gY29uc3RyYWludCBvbiB0aGUgc3RydWN0dXJlcyB0aGF0
IHRoaXMgdmFsdWUgY2FuIGhhdmUgcmlnaHQKICAgICAvLyBub3cuIFRoZSBzdHJ1Y3R1cmUgb2Yg
dGhlIGN1cnJlbnQgdmFsdWUgbXVzdCBiZWxvbmcgdG8gdGhpcyBzZXQuIFRoZSBzZXQgbWF5Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FkamFjZW5jeUxpc3QuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FkamFjZW5jeUxpc3QuaAkocmV2
aXNpb24gMTM5NTg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBZGphY2VuY3lM
aXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMSwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTU3LDcgKzU3LDcgQEAgcHVibGljOgogICAgICAgICB9CiAg
ICAgfQogICAgIAotICAgIEFkamFjZW5jeUxpc3QoS2luZCBraW5kLCBOb2RlSW5kZXggY2hpbGQx
LCBOb2RlSW5kZXggY2hpbGQyLCBOb2RlSW5kZXggY2hpbGQzKQorICAgIEFkamFjZW5jeUxpc3Qo
S2luZCBraW5kLCBOb2RlKiBjaGlsZDEsIE5vZGUqIGNoaWxkMiwgTm9kZSogY2hpbGQzKQogI2lm
ICFBU1NFUlRfRElTQUJMRUQKICAgICAgICAgOiBtX2tpbmQoRml4ZWQpCiAjZW5kaWYKQEAgLTEx
OCw3ICsxMTgsNyBAQCBwdWJsaWM6CiAgICAgICAgIGNoaWxkKDIpID0gY2hpbGQzOwogICAgIH0K
ICAgICAKLSAgICB2b2lkIGluaXRpYWxpemUoTm9kZUluZGV4IGNoaWxkMSA9IE5vTm9kZSwgTm9k
ZUluZGV4IGNoaWxkMiA9IE5vTm9kZSwgTm9kZUluZGV4IGNoaWxkMyA9IE5vTm9kZSkKKyAgICB2
b2lkIGluaXRpYWxpemUoTm9kZSogY2hpbGQxID0gMCwgTm9kZSogY2hpbGQyID0gMCwgTm9kZSog
Y2hpbGQzID0gMCkKICAgICB7CiAgICAgICAgIGluaXRpYWxpemUoRWRnZShjaGlsZDEpLCBFZGdl
KGNoaWxkMiksIEVkZ2UoY2hpbGQzKSk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdBbGxvY2F0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0FsbG9jYXRvci5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdBbGxvY2F0b3IuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxOTkgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdB
bGxvY2F0b3JfaAorI2RlZmluZSBERkdBbGxvY2F0b3JfaAorCisjaW5jbHVkZSA8d3RmL1BsYXRm
b3JtLmg+CisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgPHd0Zi9QYWdlQWxsb2Nh
dGlvbkFsaWduZWQuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCisvLyBD
dXN0b20gcG9vbCBhbGxvY2F0b3IgZm9yIGV4YWN0bHkgb25lIHR5cGUgKHR5cGUgVCkuIEl0IGhh
cyBmYXN0IChPKDEpLCBvbmx5IGEgZmV3CisvLyBpbnN0cnVjdGlvbnMpIGFsbG9jYXRvciwgYW5k
IGEgc2ltaWxhcmx5IGZhc3QgZnJlZSgpLiBSZWN5Y2xpbmcgd29ya3MgaWYgZWl0aGVyIG9mCisv
LyB0aGUgZm9sbG93aW5nIGlzIHRydWU6CisvLyAtIFQgaGFzIGEgdHJpdmlhbCBkZXN0cnVjdG9y
LiBJbiB0aGF0IGNhc2UgeW91IGRvbid0IGhhdmUgdG8gZXZlciBjYWxsIGZyZWUoKSBvbgorLy8g
ICBhbnl0aGluZy4gWW91IGNhbiBqdXN0IGNhbGwgZnJlZUFsbCgpIGluc3RlYWQuCisvLyAtIFlv
dSBjYWxsIGZyZWUoKSBvbiBhbGwgVCdzIHRoYXQgeW91IGFsbG9jYXRlZCwgYW5kIG5ldmVyIHVz
ZSBmcmVlQWxsKCkuCisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitjbGFzcyBBbGxvY2F0b3Igewor
cHVibGljOgorICAgIEFsbG9jYXRvcigpOworICAgIH5BbGxvY2F0b3IoKTsKKyAgICAKKyAgICB2
b2lkKiBhbGxvY2F0ZSgpOyAvLyBVc2UgcGxhY2VtZW50IG5ldyB0byBhbGxvY2F0ZSwgYW5kIGF2
b2lkIHVzaW5nIHRoaXMgbWV0aG9kLgorICAgIHZvaWQgZnJlZShUKik7IC8vIENhbGwgdGhpcyBt
ZXRob2QgdG8gZGVsZXRlOyBuZXZlciB1c2UgJ2RlbGV0ZScgZGlyZWN0bHkuCisgICAgCisgICAg
dm9pZCBmcmVlQWxsKCk7IC8vIE9ubHkgY2FsbCB0aGlzIGlmIFQgaGFzIGEgdHJpdmlhbCBkZXN0
cnVjdG9yLgorICAgIHZvaWQgcmVzZXQoKTsgLy8gTGlrZSBmcmVlQWxsKCksIGJ1dCBhbHNvIHJl
dHVybnMgYWxsIG1lbW9yeSB0byB0aGUgT1MuCisgICAgCisgICAgdW5zaWduZWQgaW5kZXhPZihU
Kik7CisgICAgCisgICAgc3RhdGljIEFsbG9jYXRvciogYWxsb2NhdG9yT2YoVCopOworICAgIAor
cHJpdmF0ZToKKyAgICB2b2lkKiBmb3JjZUFsbG9jYXRlKCk7CisgICAgdm9pZCogYWxsb2NhdGVT
bG93KCk7CisgICAgdm9pZCBidWlsZEZyZWVMaXN0SW4oUmVnaW9uKik7CisgICAgCisgICAgc3Ry
dWN0IFJlZ2lvbiB7CisgICAgICAgIHN0YXRpYyBzaXplX3Qgc2l6ZSgpIHsgcmV0dXJuIDY0ICog
S0I7IH0KKyAgICAgICAgc3RhdGljIHNpemVfdCBoZWFkZXJTaXplKCkgeyByZXR1cm4gc3RkOjpt
YXgoc2l6ZW9mKFJlZ2lvbiksIHNpemVvZihUKSk7IH0KKyAgICAgICAgc3RhdGljIHVuc2lnbmVk
IG51bWJlck9mVGhpbmdzUGVyUmVnaW9uKCkgeyByZXR1cm4gKHNpemUoKSAtIGhlYWRlclNpemUo
KSkgLyBzaXplb2YoVCk7IH0KKyAgICAgICAgVCogZGF0YSgpIHsgcmV0dXJuIGJpdHdpc2VfY2Fz
dDxUKj4oYml0d2lzZV9jYXN0PGNoYXIqPih0aGlzKSArIGhlYWRlclNpemUoKSk7IH0KKyAgICAg
ICAgYm9vbCBpc0luVGhpc1JlZ2lvbihUKiBwb2ludGVyKSB7IHJldHVybiBzdGF0aWNfY2FzdDx1
bnNpZ25lZD4ocG9pbnRlciAtIGRhdGEoKSkgPCBudW1iZXJPZlRoaW5nc1BlclJlZ2lvbigpOyB9
CisgICAgICAgIFJlZ2lvbiogcmVnaW9uRm9yKFQqIHBvaW50ZXIpIHsgcmV0dXJuIGJpdHdpc2Vf
Y2FzdDxSZWdpb24qPihiaXR3aXNlX2Nhc3Q8dWludHB0cl90Pihwb2ludGVyKSAmIH4oc2l6ZSgp
IC0gMSkpOyB9CisgICAgICAgIAorICAgICAgICBQYWdlQWxsb2NhdGlvbkFsaWduZWQgbV9hbGxv
Y2F0aW9uOworICAgICAgICBBbGxvY2F0b3IqIG1fYWxsb2NhdG9yOworICAgICAgICBSZWdpb24q
IG1fbmV4dDsKKyAgICB9OworICAgIAorICAgIFJlZ2lvbiogbV9yZWdpb25IZWFkOworICAgIHZv
aWQqKiBtX2ZyZWVMaXN0SGVhZDsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitpbmxpbmUg
QWxsb2NhdG9yOjpBbGxvY2F0b3IoKQorICAgIDogbV9yZWdpb25IZWFkKDApCisgICAgLCBtX2Zy
ZWVMaXN0SGVhZCgwKQoreworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgoraW5saW5lIEFsbG9j
YXRvcjo6fkFsbG9jYXRvcigpCit7CisgICAgcmVzZXQoKTsKK30KKwordGVtcGxhdGU8dHlwZW5h
bWUgVD4KK3ZvaWQqIEFsbG9jYXRvcjo6YWxsb2NhdGUoKQoreworICAgIGlmIChVTkxJS0VMWSgh
bV9mcmVlTGlzdEhlYWQpKQorICAgICAgICByZXR1cm4gYWxsb2NhdGVTbG93KCk7CisgICAgcmV0
dXJuIGZvcmNlQWxsb2NhdGUoKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK3ZvaWQgQWxs
b2NhdG9yOjpmcmVlKFQqIG9iamVjdCkKK3sKKyAgICBvYmplY3QtPn5UKCk7CisgICAgCisgICAg
dm9pZCoqIGNlbGwgPSBiaXR3aXNlX2Nhc3Q8dm9pZCoqPihvYmplY3QpOworICAgICpjZWxsID0g
bV9mcmVlTGlzdEhlYWQ7CisgICAgbV9mcmVlTGlzdEhlYWQgPSBjZWxsOworfQorCit0ZW1wbGF0
ZTx0eXBlbmFtZSBUPgordm9pZCBBbGxvY2F0b3I6OmZyZWVBbGwoKQoreworICAgIC8vIFNpbmNl
IHRoZSBjYWxsZXIgaXMgb3B0aW5nIG91dCBvZiBjYWxsaW5nIHRoZSBkZXN0cnVjdG9yIGZvciBh
bnkgYWxsb2NhdGVkIHRoaW5nLAorICAgIC8vIHdlIGhhdmUgdHdvIGNob2ljZXM6IHdlIGNhbiBl
aXRoZXIganVzdCBkZWxldGUgYWxsIHJlZ2lvbnMgKGkuZS4gY2FsbCByZXNldCgpKSwgb3IKKyAg
ICAvLyB3ZSBjYW4gaW5zdGFsbCBmcmVlbGlzdHMgaW4gYWxsIHJlZ2lvbnMuIFdlIGRvIHRoZSBs
YXR0ZXIsIHNpbmNlIGNhbGxpbmcgdGhpcworICAgIC8vIG1ldGhvZCBjb25zdGl0dXRlcyBhIGhp
bnQgdGhhdCB0aGUgYWxsb2NhdG9yIHdpbGwgYmUgcmV1c2VkIHNvb24uCisgICAgCisgICAgbV9m
cmVlTGlzdEhlYWQgPSAwOworICAgIGZvciAoUmVnaW9uKiByZWdpb24gPSBtX3JlZ2lvbkhlYWQ7
IHJlZ2lvbjsgcmVnaW9uID0gcmVnaW9uLT5tX25leHQpCisgICAgICAgIGJ1aWxkRnJlZUxpc3RJ
bihyZWdpb24pOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgordm9pZCBBbGxvY2F0b3I6OnJl
c2V0KCkKK3sKKyAgICBmb3IgKFJlZ2lvbiogcmVnaW9uID0gbV9yZWdpb25IZWFkOyByZWdpb247
KSB7CisgICAgICAgIFJlZ2lvbiogbmV4dFJlZ2lvbiA9IHJlZ2lvbi0+bV9uZXh0OworICAgICAg
ICByZWdpb24tPm1fYWxsb2NhdGlvbi5kZWFsbG9jYXRlKCk7CisgICAgICAgIHJlZ2lvbiA9IG5l
eHRSZWdpb247CisgICAgfQorICAgIAorICAgIG1fcmVnaW9uSGVhZCA9IDA7CisgICAgbV9mcmVl
TGlzdEhlYWQgPSAwOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgordW5zaWduZWQgQWxsb2Nh
dG9yOjppbmRleE9mKFQqIG9iamVjdCkKK3sKKyAgICB1bnNpZ25lZCBiYXNlSW5kZXggPSAwOwor
ICAgIGZvciAoUmVnaW9uKiByZWdpb24gPSBtX3JlZ2lvbkhlYWQ7IHJlZ2lvbjsgcmVnaW9uID0g
cmVnaW9uLT5tX25leHQpIHsKKyAgICAgICAgaWYgKHJlZ2lvbi0+aXNJblRoaXNSZWdpb24ob2Jq
ZWN0KSkKKyAgICAgICAgICAgIHJldHVybiBiYXNlSW5kZXggKyAob2JqZWN0IC0gcmVnaW9uLT5k
YXRhKCkpOworICAgICAgICBiYXNlSW5kZXggKz0gbnVtYmVyT2ZUaGluZ3NQZXJSZWdpb247Cisg
ICAgfQorICAgIENSQVNIKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1l
IFQ+CitBbGxvY2F0b3IqIEFsbG9jYXRvcjo6YWxsb2NhdG9yT2YoVCogb2JqZWN0KQoreworICAg
IHJldHVybiBSZWdpb246OnJlZ2lvbkZvcihvYmplY3QpLT5tX2FsbG9jYXRvcjsKK30KKwordGVt
cGxhdGU8dHlwZW5hbWUgVD4KK3ZvaWQqIEFsbG9jYXRvcjo6Zm9yY2VBbGxvY2F0ZSgpCit7Cisg
ICAgdm9pZCoqIHJlc3VsdCA9IG1fZnJlZUxpc3RIZWFkOworICAgIG1fZnJlZUxpc3RIZWFkID0g
Yml0d2lzZV9jYXN0PHZvaWQqKj4oKnJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwor
dGVtcGxhdGU8dHlwZW5hbWUgVD4KK3ZvaWQqIEFsbG9jYXRvcjo6YWxsb2NhdGVTbG93KCkKK3sK
KyAgICBBU1NFUlQoIW1fZnJlZUxpc3RIZWFkKTsKKyAgICAKKyAgICBQYWdlQWxsb2NhdGlvbkFs
aWduZWQgYWxsb2NhdGlvbiA9IFBhZ2VBbGxvY2F0aW9uQWxpZ25lZDo6YWxsb2NhdGUoUmVnaW9u
OjpzaXplKCksIFJlZ2lvbjo6c2l6ZSgpLCBPU0FsbG9jYXRvcjo6SlNHQ0hlYXBQYWdlcyk7Cisg
ICAgaWYgKCFzdGF0aWNfY2FzdDxib29sPihhbGxvY2F0aW9uKSkKKyAgICAgICAgQ1JBU0goKTsK
KyAgICBSZWdpb24qIHJlZ2lvbiA9IHN0YXRpY19jYXN0PFJlZ2lvbio+KGFsbG9jYXRpb24uYmFz
ZSgpKTsKKyAgICByZWdpb24tPm1fYWxsb2NhdGlvbiA9IG1fYWxsb2NhdGlvbjsKKyAgICByZWdp
b24tPm1fYWxsb2N0b3IgPSB0aGlzOworICAgIGJ1aWxkRnJlZUxpc3RJbihyZWdpb24pOworICAg
IHJlZ2lvbi0+bV9uZXh0ID0gbV9yZWdpb25IZWFkOworICAgIG1fcmVnaW9uSGVhZCA9IHJlZ2lv
bjsKKyAgICAKKyAgICByZXR1cm4gZm9yY2VBbGxvY2F0ZSgpOworfQorCit0ZW1wbGF0ZTx0eXBl
bmFtZSBUPgordm9pZCBBbGxvY2F0b3I6OmJ1aWxkRnJlZUxpc3RJbihSZWdpb24qIHJlZ2lvbikK
K3sKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtYmVyT2ZUaGluZ3NQZXJSZWdpb247
ICsraSkgeworICAgICAgICB2b2lkKiogY2VsbCA9IGJpdHdpc2VfY2FzdDx2b2lkKio+KHJlZ2lv
bi0+ZGF0YSgpICsgaSk7CisgICAgICAgICpjZWxsID0gbV9mcmVlTGlzdEhlYWQ7CisgICAgICAg
IG1fZnJlZUxpc3RIZWFkID0gY2VsbDsKKyAgICB9Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlND
OjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZHQWxsb2Nh
dG9yX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb24uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uLmNwcAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uLmNwcAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSw0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZHQ29tbW9u
LmgiCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBE
RkcgeworCit2b2lkIE5vZGVQb2ludGVyVHJhaXRzOjpkdW1wKE5vZGUqIHZhbHVlLCBQcmludFN0
cmVhbSYgb3V0KQoreworICAgIG91dC5wcmludCh2YWx1ZSk7Cit9CisKK30gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uLmgJKHJldmlzaW9uIDEzOTU4NikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMiwgMjAxMyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTgxLDE2ICs4MSwxNCBAQAogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKLS8v
IFR5cGUgZm9yIGEgcmVmZXJlbmNlIHRvIGFub3RoZXIgbm9kZSBpbiB0aGUgZ3JhcGguCi10eXBl
ZGVmIHVpbnQzMl90IE5vZGVJbmRleDsKLXN0YXRpYyBjb25zdCBOb2RlSW5kZXggTm9Ob2RlID0g
VUlOVF9NQVg7CitjbGFzcyBOb2RlOwogCiB0eXBlZGVmIHVpbnQzMl90IEJsb2NrSW5kZXg7CiBz
dGF0aWMgY29uc3QgQmxvY2tJbmRleCBOb0Jsb2NrID0gVUlOVF9NQVg7CiAKLXN0cnVjdCBOb2Rl
SW5kZXhUcmFpdHMgewotICAgIHN0YXRpYyBOb2RlSW5kZXggZGVmYXVsdFZhbHVlKCkgeyByZXR1
cm4gTm9Ob2RlOyB9Ci0gICAgc3RhdGljIHZvaWQgZHVtcChOb2RlSW5kZXggdmFsdWUsIFByaW50
U3RyZWFtJiBvdXQpCitzdHJ1Y3QgTm9kZVBvaW50ZXJUcmFpdHMgeworICAgIHN0YXRpYyBOb2Rl
KiBkZWZhdWx0VmFsdWUoKSB7IHJldHVybiAwOyB9CisgICAgc3RhdGljIHZvaWQgZHVtcChOb2Rl
KiB2YWx1ZSwgUHJpbnRTdHJlYW0mIG91dCk7CiAgICAgewogICAgICAgICBpZiAodmFsdWUgPT0g
Tm9Ob2RlKQogICAgICAgICAgICAgb3V0LnByaW50ZigiLSIpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdFZGdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdFZGdlLmgJKHJldmlzaW9uIDEzOTU4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHRWRnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTEsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00Myw0MSArNDMsMzkgQEAgcHVibGlj
OgogICAgIHsKICAgICB9CiAgICAgCi0gICAgZXhwbGljaXQgRWRnZShOb2RlSW5kZXggbm9kZUlu
ZGV4KQotICAgICAgICA6IG1fZW5jb2RlZFdvcmQobWFrZVdvcmQobm9kZUluZGV4LCBVbnR5cGVk
VXNlKSkKKyAgICBleHBsaWNpdCBFZGdlKE5vZGUqIG5vZGUpCisgICAgICAgIDogbV9lbmNvZGVk
V29yZChtYWtlV29yZChub2RlLCBVbnR5cGVkVXNlKSkKICAgICB7CiAgICAgfQogICAgIAotICAg
IEVkZ2UoTm9kZUluZGV4IG5vZGVJbmRleCwgVXNlS2luZCB1c2VLaW5kKQotICAgICAgICA6IG1f
ZW5jb2RlZFdvcmQobWFrZVdvcmQobm9kZUluZGV4LCB1c2VLaW5kKSkKKyAgICBFZGdlKE5vZGUq
IG5vZGUsIFVzZUtpbmQgdXNlS2luZCkKKyAgICAgICAgOiBtX2VuY29kZWRXb3JkKG1ha2VXb3Jk
KG5vZGUsIHVzZUtpbmQpKQogICAgIHsKICAgICB9CiAgICAgCi0gICAgTm9kZUluZGV4IGluZGV4
VW5jaGVja2VkKCkgY29uc3QgeyByZXR1cm4gbV9lbmNvZGVkV29yZCA+PiBzaGlmdCgpOyB9Ci0g
ICAgTm9kZUluZGV4IGluZGV4KCkgY29uc3QKLSAgICB7Ci0gICAgICAgIEFTU0VSVChpc1NldCgp
KTsKLSAgICAgICAgcmV0dXJuIG1fZW5jb2RlZFdvcmQgPj4gc2hpZnQoKTsKLSAgICB9Ci0gICAg
dm9pZCBzZXRJbmRleChOb2RlSW5kZXggbm9kZUluZGV4KQorICAgIE5vZGUqIG5vZGUoKSBjb25z
dCB7IHJldHVybiBtX2VuY29kZWRXb3JkICYgfigoMSA8PCBzaGlmdCgpKSAtIDEpOyB9CisgICAg
Tm9kZSYgb3BlcmF0b3IqKCkgY29uc3QgeyByZXR1cm4gKmdldCgpOyB9CisgICAgTm9kZSogb3Bl
cmF0b3ItPigpIGNvbnN0IHsgcmV0dXJuIGdldCgpOyB9CisgICAgCisgICAgdm9pZCBzZXROb2Rl
KE5vZGUqIG5vZGUpCiAgICAgewotICAgICAgICBtX2VuY29kZWRXb3JkID0gbWFrZVdvcmQobm9k
ZUluZGV4LCB1c2VLaW5kKCkpOworICAgICAgICBtX2VuY29kZWRXb3JkID0gbWFrZVdvcmQobm9k
ZSwgdXNlS2luZCgpKTsKICAgICB9CiAgICAgCiAgICAgVXNlS2luZCB1c2VLaW5kKCkgY29uc3QK
ICAgICB7Ci0gICAgICAgIEFTU0VSVChpc1NldCgpKTsKKyAgICAgICAgQVNTRVJUKG5vZGUoKSk7
CiAgICAgICAgIHVuc2lnbmVkIG1hc2tlZCA9IG1fZW5jb2RlZFdvcmQgJiAoKCgxIDw8IHNoaWZ0
KCkpIC0gMSkpOwogICAgICAgICBBU1NFUlQobWFza2VkIDwgTGFzdFVzZUtpbmQpOwogICAgICAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8VXNlS2luZD4obWFza2VkKTsKICAgICB9CiAgICAgdm9pZCBz
ZXRVc2VLaW5kKFVzZUtpbmQgdXNlS2luZCkKICAgICB7Ci0gICAgICAgIEFTU0VSVChpc1NldCgp
KTsKLSAgICAgICAgbV9lbmNvZGVkV29yZCA9IG1ha2VXb3JkKGluZGV4KCksIHVzZUtpbmQpOwor
ICAgICAgICBBU1NFUlQobm9kZSgpKTsKKyAgICAgICAgbV9lbmNvZGVkV29yZCA9IG1ha2VXb3Jk
KG5vZGUoKSwgdXNlS2luZCk7CiAgICAgfQogICAgIAotICAgIGJvb2wgaXNTZXQoKSBjb25zdCB7
IHJldHVybiBpbmRleFVuY2hlY2tlZCgpICE9IE5vTm9kZTsgfQorICAgIGJvb2wgaXNTZXQoKSBj
b25zdCB7IHJldHVybiAhIW5vZGUoKTsgfQogICAgIAogICAgIHR5cGVkZWYgdm9pZCogRWRnZTo6
KlVuc3BlY2lmaWVkQm9vbFR5cGU7CiAgICAgb3BlcmF0b3IgVW5zcGVjaWZpZWRCb29sVHlwZSoo
KSBjb25zdCB7IHJldHVybiByZWludGVycHJldF9jYXN0PFVuc3BlY2lmaWVkQm9vbFR5cGUqPihp
c1NldCgpKTsgfQpAQCAtOTYsMTcgKzk0LDE4IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgZnJp
ZW5kIGNsYXNzIEFkamFjZW5jeUxpc3Q7CiAgICAgCi0gICAgc3RhdGljIHVpbnQzMl90IHNoaWZ0
KCkgeyByZXR1cm4gNDsgfQorICAgIHN0YXRpYyB1aW50MzJfdCBzaGlmdCgpIHsgcmV0dXJuIDI7
IH0KICAgICAKLSAgICBzdGF0aWMgaW50MzJfdCBtYWtlV29yZChOb2RlSW5kZXggbm9kZUluZGV4
LCBVc2VLaW5kIHVzZUtpbmQpCisgICAgc3RhdGljIHVpbnRwdHJfdCBtYWtlV29yZChOb2RlKiBu
b2RlLCBVc2VLaW5kIHVzZUtpbmQpCiAgICAgewotICAgICAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8
dWludDMyX3Q+KCgoc3RhdGljX2Nhc3Q8aW50MzJfdD4obm9kZUluZGV4KSA8PCBzaGlmdCgpKSA+
PiBzaGlmdCgpKSkgPT0gbm9kZUluZGV4KTsKKyAgICAgICAgdWludHB0cl90IHZhbHVlID0gYml0
d2lzZV9jYXN0PHVpbnRwdHJfdD4obm9kZSk7CisgICAgICAgIEFTU0VSVCghKHZhbHVlICYgKCgx
IDw8IHNoaWZ0KCkpIC0gMSkpKTsKICAgICAgICAgQVNTRVJUKHVzZUtpbmQgPj0gMCAmJiB1c2VL
aW5kIDwgTGFzdFVzZUtpbmQpOwogICAgICAgICBBU1NFUlQoTGFzdFVzZUtpbmQgPD0gKDEgPDwg
c2hpZnQoKSkpOwotICAgICAgICByZXR1cm4gKG5vZGVJbmRleCA8PCBzaGlmdCgpKSB8IHVzZUtp
bmQ7CisgICAgICAgIHJldHVybiB2YWx1ZSB8IHN0YXRpY19jYXN0PHVpbnRwdHJfdD4odXNlS2lu
ZCk7CiAgICAgfQogICAgIAotICAgIGludDMyX3QgbV9lbmNvZGVkV29yZDsKKyAgICB1aW50cHRy
X3QgbV9lbmNvZGVkV29yZDsKIH07CiAKIGlubGluZSBib29sIG9wZXJhdG9yPT0oRWRnZSBub2Rl
VXNlLCBOb2RlSW5kZXggbm9kZUluZGV4KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdHcmFwaC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
R3JhcGguaAkocmV2aXNpb24gMTM5NTg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdHcmFwaC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTEsIDIwMTIsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNiw2ICszNiw3IEBACiAjaW5jbHVkZSAi
REZHQmFzaWNCbG9jay5oIgogI2luY2x1ZGUgIkRGR0RvbWluYXRvcnMuaCIKICNpbmNsdWRlICJE
RkdOb2RlLmgiCisjaW5jbHVkZSAiREZHTm9kZUFsbG9jYXRvci5oIgogI2luY2x1ZGUgIkpTU3Rh
Y2suaCIKICNpbmNsdWRlICJNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLmgiCiAjaW5jbHVk
ZSA8d3RmL0JpdFZlY3Rvci5oPgpAQCAtODIsNTQgKzgzLDQ1IEBAIGVudW0gQWRkU3BlY3VsYXRp
b25Nb2RlIHsKIC8vCiAvLyA9PT0gR3JhcGggPT09CiAvLwotLy8gVGhlIGRhdGFmbG93IGdyYXBo
IGlzIGFuIG9yZGVyZWQgdmVjdG9yIG9mIG5vZGVzLgogLy8gVGhlIG9yZGVyIG1heSBiZSBzaWdu
aWZpY2FudCBmb3Igbm9kZXMgd2l0aCBzaWRlLWVmZmVjdHMgKHByb3BlcnR5IGFjY2Vzc2VzLCB2
YWx1ZSBjb252ZXJzaW9ucykuCiAvLyBOb2RlcyB0aGF0IGFyZSAnZGVhZCcgcmVtYWluIGluIHRo
ZSB2ZWN0b3Igd2l0aCByZWZDb3VudCAwLgotY2xhc3MgR3JhcGggOiBwdWJsaWMgVmVjdG9yPE5v
ZGUsIDY0PiB7CitjbGFzcyBHcmFwaCB7CiBwdWJsaWM6CiAgICAgR3JhcGgoSlNHbG9iYWxEYXRh
JiwgQ29kZUJsb2NrKiwgdW5zaWduZWQgb3NyRW50cnlCeXRlY29kZUluZGV4LCBjb25zdCBPcGVy
YW5kczxKU1ZhbHVlPiYgbXVzdEhhbmRsZVZhbHVlcyk7CiAgICAgCi0gICAgdXNpbmcgVmVjdG9y
PE5vZGUsIDY0Pjo6b3BlcmF0b3JbXTsKLSAgICB1c2luZyBWZWN0b3I8Tm9kZSwgNjQ+OjphdDsK
LSAgICAKLSAgICBOb2RlJiBvcGVyYXRvcltdKEVkZ2Ugbm9kZVVzZSkgeyByZXR1cm4gYXQobm9k
ZVVzZS5pbmRleCgpKTsgfQotICAgIGNvbnN0IE5vZGUmIG9wZXJhdG9yW10oRWRnZSBub2RlVXNl
KSBjb25zdCB7IHJldHVybiBhdChub2RlVXNlLmluZGV4KCkpOyB9Ci0gICAgCi0gICAgTm9kZSYg
YXQoRWRnZSBub2RlVXNlKSB7IHJldHVybiBhdChub2RlVXNlLmluZGV4KCkpOyB9Ci0gICAgY29u
c3QgTm9kZSYgYXQoRWRnZSBub2RlVXNlKSBjb25zdCB7IHJldHVybiBhdChub2RlVXNlLmluZGV4
KCkpOyB9Ci0gICAgCiAgICAgLy8gTWFyayBhIG5vZGUgYXMgYmVpbmcgcmVmZXJlbmNlZC4KLSAg
ICB2b2lkIHJlZihOb2RlSW5kZXggbm9kZUluZGV4KQorICAgIHZvaWQgcmVmKE5vZGUqIG5vZGUp
CiAgICAgewotICAgICAgICBOb2RlJiBub2RlID0gYXQobm9kZUluZGV4KTsKICAgICAgICAgLy8g
SWYgdGhlIHZhbHVlIChiZWZvcmUgaW5jcmVtZW50aW5nKSB3YXMgYXQgcmVmQ291bnQgemVybyB0
aGVuIHdlIG5lZWQgdG8gcmVmIGl0cyBjaGlsZHJlbi4KLSAgICAgICAgaWYgKG5vZGUucmVmKCkp
Ci0gICAgICAgICAgICByZWZDaGlsZHJlbihub2RlSW5kZXgpOworICAgICAgICBpZiAobm9kZS0+
cmVmKCkpCisgICAgICAgICAgICByZWZDaGlsZHJlbihub2RlKTsKICAgICB9CiAgICAgdm9pZCBy
ZWYoRWRnZSBub2RlVXNlKQogICAgIHsKLSAgICAgICAgcmVmKG5vZGVVc2UuaW5kZXgoKSk7Cisg
ICAgICAgIHJlZihub2RlVXNlLm5vZGUoKSk7CiAgICAgfQogICAgIAotICAgIHZvaWQgZGVyZWYo
Tm9kZUluZGV4IG5vZGVJbmRleCkKKyAgICB2b2lkIGRlcmVmKE5vZGUqIG5vZGUpCiAgICAgewot
ICAgICAgICBpZiAoIWF0KG5vZGVJbmRleCkucmVmQ291bnQoKSkKKyNpZiAhQVNTRVJUX0RJU0FC
TEVECisgICAgICAgIGlmICghbm9kZS0+cmVmQ291bnQoKSkKICAgICAgICAgICAgIGR1bXAoKTsK
LSAgICAgICAgaWYgKGF0KG5vZGVJbmRleCkuZGVyZWYoKSkKLSAgICAgICAgICAgIGRlcmVmQ2hp
bGRyZW4obm9kZUluZGV4KTsKKyNlbmRpZgorICAgICAgICBpZiAobm9kZS0+ZGVyZWYoKSkKKyAg
ICAgICAgICAgIGRlcmVmQ2hpbGRyZW4obm9kZSk7CiAgICAgfQogICAgIHZvaWQgZGVyZWYoRWRn
ZSBub2RlVXNlKQogICAgIHsKLSAgICAgICAgZGVyZWYobm9kZVVzZS5pbmRleCgpKTsKKyAgICAg
ICAgZGVyZWYobm9kZVVzZS5ub2RlKCkpOwogICAgIH0KICAgICAKLSAgICB2b2lkIGNoYW5nZUlu
ZGV4KEVkZ2UmIGVkZ2UsIE5vZGVJbmRleCBuZXdJbmRleCwgYm9vbCBjaGFuZ2VSZWYgPSB0cnVl
KQorICAgIHZvaWQgY2hhbmdlSW5kZXgoRWRnZSYgZWRnZSwgTm9kZSogbmV3Tm9kZSwgYm9vbCBj
aGFuZ2VSZWYgPSB0cnVlKQogICAgIHsKICAgICAgICAgaWYgKGNoYW5nZVJlZikgewotICAgICAg
ICAgICAgcmVmKG5ld0luZGV4KTsKLSAgICAgICAgICAgIGRlcmVmKGVkZ2UuaW5kZXgoKSk7Cisg
ICAgICAgICAgICByZWYobmV3Tm9kZSk7CisgICAgICAgICAgICBkZXJlZihlZGdlLm5vZGUoKSk7
CiAgICAgICAgIH0KLSAgICAgICAgZWRnZS5zZXRJbmRleChuZXdJbmRleCk7CisgICAgICAgIGVk
Z2Uuc2V0Tm9kZShuZXdOb2RlKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBjaGFuZ2VFZGdlKEVk
Z2UmIGVkZ2UsIEVkZ2UgbmV3RWRnZSwgYm9vbCBjaGFuZ2VSZWYgPSB0cnVlKQpAQCAtMTQxLDEx
ICsxMzMsMTEgQEAgcHVibGljOgogICAgICAgICBlZGdlID0gbmV3RWRnZTsKICAgICB9CiAgICAg
Ci0gICAgdm9pZCBjb21wYXJlQW5kU3dhcChFZGdlJiBlZGdlLCBOb2RlSW5kZXggb2xkSW5kZXgs
IE5vZGVJbmRleCBuZXdJbmRleCwgYm9vbCBjaGFuZ2VSZWYpCisgICAgdm9pZCBjb21wYXJlQW5k
U3dhcChFZGdlJiBlZGdlLCBOb2RlKiBvbGROb2RlLCBOb2RlKiBuZXdOb2RlLCBib29sIGNoYW5n
ZVJlZikKICAgICB7Ci0gICAgICAgIGlmIChlZGdlLmluZGV4KCkgIT0gb2xkSW5kZXgpCisgICAg
ICAgIGlmIChlZGdlLm5vZGUoKSAhPSBvbGROb2RlKQogICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICBjaGFuZ2VJbmRleChlZGdlLCBuZXdJbmRleCwgY2hhbmdlUmVmKTsKKyAgICAgICAgY2hh
bmdlSW5kZXgoZWRnZSwgbmV3Tm9kZSwgY2hhbmdlUmVmKTsKICAgICB9CiAgICAgCiAgICAgdm9p
ZCBjb21wYXJlQW5kU3dhcChFZGdlJiBlZGdlLCBFZGdlIG9sZEVkZ2UsIEVkZ2UgbmV3RWRnZSwg
Ym9vbCBjaGFuZ2VSZWYpCkBAIC0xNTUsMjkgKzE0NywxNiBAQCBwdWJsaWM6CiAgICAgICAgIGNo
YW5nZUVkZ2UoZWRnZSwgbmV3RWRnZSwgY2hhbmdlUmVmKTsKICAgICB9CiAgICAgCi0gICAgdm9p
ZCBjbGVhckFuZERlcmVmQ2hpbGQxKE5vZGUmIG5vZGUpCi0gICAgewotICAgICAgICBpZiAoIW5v
ZGUuY2hpbGQxKCkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGRlcmVmKG5vZGUuY2hp
bGQxKCkpOwotICAgICAgICBub2RlLmNoaWxkcmVuLmNoaWxkMSgpID0gRWRnZSgpOwotICAgIH0K
LQotICAgIHZvaWQgY2xlYXJBbmREZXJlZkNoaWxkMihOb2RlJiBub2RlKQorICAgIHZvaWQgY2xl
YXJBbmREZXJlZkNoaWxkKE5vZGUqIG5vZGUsIHVuc2lnbmVkIGluZGV4KQogICAgIHsKLSAgICAg
ICAgaWYgKCFub2RlLmNoaWxkMigpKQorICAgICAgICBpZiAoIW5vZGUtPmNoaWxkcmVuLmNoaWxk
KGluZGV4KSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgZGVyZWYobm9kZS5jaGlsZDIo
KSk7Ci0gICAgICAgIG5vZGUuY2hpbGRyZW4uY2hpbGQyKCkgPSBFZGdlKCk7Ci0gICAgfQotCi0g
ICAgdm9pZCBjbGVhckFuZERlcmVmQ2hpbGQzKE5vZGUmIG5vZGUpCi0gICAgewotICAgICAgICBp
ZiAoIW5vZGUuY2hpbGQzKCkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGRlcmVmKG5v
ZGUuY2hpbGQzKCkpOwotICAgICAgICBub2RlLmNoaWxkcmVuLmNoaWxkMygpID0gRWRnZSgpOwor
ICAgICAgICBkZXJlZihub2RlLT5jaGlsZHJlbi5jaGlsZChpbmRleCkpOworICAgICAgICBub2Rl
LmNoaWxkcmVuLnNldENoaWxkKGluZGV4LCBFZGdlKCkpOwogICAgIH0KKyAgICB2b2lkIGNsZWFy
QW5kRGVyZWZDaGlsZDEoTm9kZSogbm9kZSkgeyBjbGVhckFuZERlcmVmQ2hpbGQobm9kZSwgMCk7
IH0KKyAgICB2b2lkIGNsZWFyQW5kRGVyZWZDaGlsZDIoTm9kZSogbm9kZSkgeyBjbGVhckFuZERl
cmVmQ2hpbGQobm9kZSwgMSk7IH0KKyAgICB2b2lkIGNsZWFyQW5kRGVyZWZDaGlsZDMoTm9kZSog
bm9kZSkgeyBjbGVhckFuZERlcmVmQ2hpbGQobm9kZSwgMik7IH0KICAgICAKICAgICAvLyBDYWxs
IHRoaXMgaWYgeW91J3ZlIG1vZGlmaWVkIHRoZSByZWZlcmVuY2UgY291bnRzIG9mIG5vZGVzIHRo
YXQgZGVhbCB3aXRoCiAgICAgLy8gbG9jYWwgdmFyaWFibGVzLiBUaGlzIGlzIG5lY2Vzc2FyeSBi
ZWNhdXNlIGxvY2FsIHZhcmlhYmxlIHJlZmVyZW5jZXMgY2FuIGZvcm0KQEAgLTE4NSwxNCArMTY0
LDE0IEBAIHB1YmxpYzoKICAgICAvLyByZWZlcmVuY2UgY291bnRzIGFjY29yZGluZyB0byByZWFj
aGFiaWxpdHkuCiAgICAgdm9pZCBjb2xsZWN0R2FyYmFnZSgpOwogICAgIAotICAgIHZvaWQgY29u
dmVydFRvQ29uc3RhbnQoTm9kZUluZGV4IG5vZGVJbmRleCwgdW5zaWduZWQgY29uc3RhbnROdW1i
ZXIpCisgICAgdm9pZCBjb252ZXJ0VG9Db25zdGFudChOb2RlKiBub2RlLCB1bnNpZ25lZCBjb25z
dGFudE51bWJlcikKICAgICB7Ci0gICAgICAgIGF0KG5vZGVJbmRleCkuY29udmVydFRvQ29uc3Rh
bnQoY29uc3RhbnROdW1iZXIpOworICAgICAgICBub2RlLT5jb252ZXJ0VG9Db25zdGFudChjb25z
dGFudE51bWJlcik7CiAgICAgfQogICAgIAotICAgIHZvaWQgY29udmVydFRvQ29uc3RhbnQoTm9k
ZUluZGV4IG5vZGVJbmRleCwgSlNWYWx1ZSB2YWx1ZSkKKyAgICB2b2lkIGNvbnZlcnRUb0NvbnN0
YW50KE5vZGUqIG5vZGUsIEpTVmFsdWUgdmFsdWUpCiAgICAgewotICAgICAgICBjb252ZXJ0VG9D
b25zdGFudChub2RlSW5kZXgsIG1fY29kZUJsb2NrLT5hZGRPckZpbmRDb25zdGFudCh2YWx1ZSkp
OworICAgICAgICBjb252ZXJ0VG9Db25zdGFudChub2RlLCBtX2NvZGVCbG9jay0+YWRkT3JGaW5k
Q29uc3RhbnQodmFsdWUpKTsKICAgICB9CiAKICAgICAvLyBDb2RlQmxvY2sgaXMgb3B0aW9uYWws
IGJ1dCBtYXkgYWxsb3cgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiB0byBiZSBkdW1wZWQgKGUuZy4g
SWRlbnRpZmllciBuYW1lcykuCkBAIC0yMDAsMTI1ICsxNzksMTI1IEBAIHB1YmxpYzoKICAgICBl
bnVtIFBoaU5vZGVEdW1wTW9kZSB7IER1bXBMaXZlUGhpc09ubHksIER1bXBBbGxQaGlzIH07CiAg
ICAgdm9pZCBkdW1wQmxvY2tIZWFkZXIoUHJpbnRTdHJlYW0mLCBjb25zdCBjaGFyKiBwcmVmaXgs
IEJsb2NrSW5kZXgsIFBoaU5vZGVEdW1wTW9kZSk7CiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFt
JiwgRWRnZSk7Ci0gICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiwgY29uc3QgY2hhciogcHJlZml4
LCBOb2RlSW5kZXgpOwotICAgIHN0YXRpYyBpbnQgYW1vdW50T2ZOb2RlV2hpdGVTcGFjZShOb2Rl
Jik7Ci0gICAgc3RhdGljIHZvaWQgcHJpbnROb2RlV2hpdGVTcGFjZShQcmludFN0cmVhbSYsIE5v
ZGUmKTsKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mLCBjb25zdCBjaGFyKiBwcmVmaXgsIE5v
ZGUqKTsKKyAgICBzdGF0aWMgaW50IGFtb3VudE9mTm9kZVdoaXRlU3BhY2UoTm9kZSopOworICAg
IHN0YXRpYyB2b2lkIHByaW50Tm9kZVdoaXRlU3BhY2UoUHJpbnRTdHJlYW0mLCBOb2RlKik7CiAK
ICAgICAvLyBEdW1wIHRoZSBjb2RlIG9yaWdpbiBvZiB0aGUgZ2l2ZW4gbm9kZSBhcyBhIGRpZmYg
ZnJvbSB0aGUgY29kZSBvcmlnaW4gb2YgdGhlCiAgICAgLy8gcHJlY2VkaW5nIG5vZGUuIFJldHVy
bnMgdHJ1ZSBpZiBhbnl0aGluZyB3YXMgcHJpbnRlZC4KLSAgICBib29sIGR1bXBDb2RlT3JpZ2lu
KFByaW50U3RyZWFtJiwgY29uc3QgY2hhciogcHJlZml4LCBOb2RlSW5kZXgsIE5vZGVJbmRleCk7
CisgICAgYm9vbCBkdW1wQ29kZU9yaWdpbihQcmludFN0cmVhbSYsIGNvbnN0IGNoYXIqIHByZWZp
eCwgTm9kZSogcHJldmlvdXNOb2RlLCBOb2RlKiBzdWJzZXF1ZW50Tm9kZSk7CiAKICAgICBCbG9j
a0luZGV4IGJsb2NrSW5kZXhGb3JCeXRlY29kZU9mZnNldChWZWN0b3I8QmxvY2tJbmRleD4mIGJs
b2NrcywgdW5zaWduZWQgYnl0ZWNvZGVCZWdpbik7CiAKLSAgICBTcGVjdWxhdGVkVHlwZSBnZXRK
U0NvbnN0YW50U3BlY3VsYXRpb24oTm9kZSYgbm9kZSkKKyAgICBTcGVjdWxhdGVkVHlwZSBnZXRK
U0NvbnN0YW50U3BlY3VsYXRpb24oTm9kZSogbm9kZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBz
cGVjdWxhdGlvbkZyb21WYWx1ZShub2RlLnZhbHVlT2ZKU0NvbnN0YW50KG1fY29kZUJsb2NrKSk7
CisgICAgICAgIHJldHVybiBzcGVjdWxhdGlvbkZyb21WYWx1ZShub2RlLT52YWx1ZU9mSlNDb25z
dGFudChtX2NvZGVCbG9jaykpOwogICAgIH0KICAgICAKLSAgICBBZGRTcGVjdWxhdGlvbk1vZGUg
YWRkU3BlY3VsYXRpb25Nb2RlKE5vZGUmIGFkZCwgYm9vbCBsZWZ0U2hvdWxkU3BlY3VsYXRlSW50
ZWdlciwgYm9vbCByaWdodFNob3VsZFNwZWN1bGF0ZUludGVnZXIpCisgICAgQWRkU3BlY3VsYXRp
b25Nb2RlIGFkZFNwZWN1bGF0aW9uTW9kZShOb2RlKiBhZGQsIGJvb2wgbGVmdFNob3VsZFNwZWN1
bGF0ZUludGVnZXIsIGJvb2wgcmlnaHRTaG91bGRTcGVjdWxhdGVJbnRlZ2VyKQogICAgIHsKLSAg
ICAgICAgQVNTRVJUKGFkZC5vcCgpID09IFZhbHVlQWRkIHx8IGFkZC5vcCgpID09IEFyaXRoQWRk
IHx8IGFkZC5vcCgpID09IEFyaXRoU3ViKTsKKyAgICAgICAgQVNTRVJUKGFkZC0+b3AoKSA9PSBW
YWx1ZUFkZCB8fCBhZGQtPm9wKCkgPT0gQXJpdGhBZGQgfHwgYWRkLT5vcCgpID09IEFyaXRoU3Vi
KTsKICAgICAgICAgCi0gICAgICAgIE5vZGUmIGxlZnQgPSBhdChhZGQuY2hpbGQxKCkpOwotICAg
ICAgICBOb2RlJiByaWdodCA9IGF0KGFkZC5jaGlsZDIoKSk7CisgICAgICAgIE5vZGUqIGxlZnQg
PSBhZGQtPmNoaWxkMSgpLm5vZGUoKTsKKyAgICAgICAgTm9kZSogcmlnaHQgPSBhZGQtPmNoaWxk
MigpLm5vZGUoKTsKICAgICAgICAgCi0gICAgICAgIGlmIChsZWZ0Lmhhc0NvbnN0YW50KCkpCisg
ICAgICAgIGlmIChsZWZ0LT5oYXNDb25zdGFudCgpKQogICAgICAgICAgICAgcmV0dXJuIGFkZElt
bWVkaWF0ZVNob3VsZFNwZWN1bGF0ZUludGVnZXIoYWRkLCByaWdodFNob3VsZFNwZWN1bGF0ZUlu
dGVnZXIsIGxlZnQpOwotICAgICAgICBpZiAocmlnaHQuaGFzQ29uc3RhbnQoKSkKKyAgICAgICAg
aWYgKHJpZ2h0LT5oYXNDb25zdGFudCgpKQogICAgICAgICAgICAgcmV0dXJuIGFkZEltbWVkaWF0
ZVNob3VsZFNwZWN1bGF0ZUludGVnZXIoYWRkLCBsZWZ0U2hvdWxkU3BlY3VsYXRlSW50ZWdlciwg
cmlnaHQpOwogICAgICAgICAKLSAgICAgICAgcmV0dXJuIChsZWZ0U2hvdWxkU3BlY3VsYXRlSW50
ZWdlciAmJiByaWdodFNob3VsZFNwZWN1bGF0ZUludGVnZXIgJiYgYWRkLmNhblNwZWN1bGF0ZUlu
dGVnZXIoKSkgPyBTcGVjdWxhdGVJbnRlZ2VyIDogRG9udFNwZWN1bGF0ZUludGVnZXI7CisgICAg
ICAgIHJldHVybiAobGVmdFNob3VsZFNwZWN1bGF0ZUludGVnZXIgJiYgcmlnaHRTaG91bGRTcGVj
dWxhdGVJbnRlZ2VyICYmIGFkZC0+Y2FuU3BlY3VsYXRlSW50ZWdlcigpKSA/IFNwZWN1bGF0ZUlu
dGVnZXIgOiBEb250U3BlY3VsYXRlSW50ZWdlcjsKICAgICB9CiAgICAgCi0gICAgQWRkU3BlY3Vs
YXRpb25Nb2RlIHZhbHVlQWRkU3BlY3VsYXRpb25Nb2RlKE5vZGUmIGFkZCkKKyAgICBBZGRTcGVj
dWxhdGlvbk1vZGUgdmFsdWVBZGRTcGVjdWxhdGlvbk1vZGUoTm9kZSogYWRkKQogICAgIHsKLSAg
ICAgICAgcmV0dXJuIGFkZFNwZWN1bGF0aW9uTW9kZShhZGQsIGF0KGFkZC5jaGlsZDEoKSkuc2hv
dWxkU3BlY3VsYXRlSW50ZWdlckV4cGVjdGluZ0RlZmluZWQoKSwgYXQoYWRkLmNoaWxkMigpKS5z
aG91bGRTcGVjdWxhdGVJbnRlZ2VyRXhwZWN0aW5nRGVmaW5lZCgpKTsKKyAgICAgICAgcmV0dXJu
IGFkZFNwZWN1bGF0aW9uTW9kZShhZGQsIGFkZC0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZUlu
dGVnZXJFeHBlY3RpbmdEZWZpbmVkKCksIGFkZC0+Y2hpbGQyKCktPnNob3VsZFNwZWN1bGF0ZUlu
dGVnZXJFeHBlY3RpbmdEZWZpbmVkKCkpOwogICAgIH0KICAgICAKLSAgICBBZGRTcGVjdWxhdGlv
bk1vZGUgYXJpdGhBZGRTcGVjdWxhdGlvbk1vZGUoTm9kZSYgYWRkKQorICAgIEFkZFNwZWN1bGF0
aW9uTW9kZSBhcml0aEFkZFNwZWN1bGF0aW9uTW9kZShOb2RlKiBhZGQpCiAgICAgewotICAgICAg
ICByZXR1cm4gYWRkU3BlY3VsYXRpb25Nb2RlKGFkZCwgYXQoYWRkLmNoaWxkMSgpKS5zaG91bGRT
cGVjdWxhdGVJbnRlZ2VyRm9yQXJpdGhtZXRpYygpLCBhdChhZGQuY2hpbGQyKCkpLnNob3VsZFNw
ZWN1bGF0ZUludGVnZXJGb3JBcml0aG1ldGljKCkpOworICAgICAgICByZXR1cm4gYWRkU3BlY3Vs
YXRpb25Nb2RlKGFkZCwgYWRkLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlSW50ZWdlckZvckFy
aXRobWV0aWMoKSwgYWRkLT5jaGlsZDIoKS0+c2hvdWxkU3BlY3VsYXRlSW50ZWdlckZvckFyaXRo
bWV0aWMoKSk7CiAgICAgfQogICAgIAotICAgIEFkZFNwZWN1bGF0aW9uTW9kZSBhZGRTcGVjdWxh
dGlvbk1vZGUoTm9kZSYgYWRkKQorICAgIEFkZFNwZWN1bGF0aW9uTW9kZSBhZGRTcGVjdWxhdGlv
bk1vZGUoTm9kZSogYWRkKQogICAgIHsKLSAgICAgICAgaWYgKGFkZC5vcCgpID09IFZhbHVlQWRk
KQorICAgICAgICBpZiAoYWRkLT5vcCgpID09IFZhbHVlQWRkKQogICAgICAgICAgICAgcmV0dXJu
IHZhbHVlQWRkU3BlY3VsYXRpb25Nb2RlKGFkZCk7CiAgICAgICAgIAogICAgICAgICByZXR1cm4g
YXJpdGhBZGRTcGVjdWxhdGlvbk1vZGUoYWRkKTsKICAgICB9CiAgICAgCi0gICAgYm9vbCBhZGRT
aG91bGRTcGVjdWxhdGVJbnRlZ2VyKE5vZGUmIGFkZCkKKyAgICBib29sIGFkZFNob3VsZFNwZWN1
bGF0ZUludGVnZXIoTm9kZSogYWRkKQogICAgIHsKICAgICAgICAgcmV0dXJuIGFkZFNwZWN1bGF0
aW9uTW9kZShhZGQpICE9IERvbnRTcGVjdWxhdGVJbnRlZ2VyOwogICAgIH0KICAgICAKLSAgICBi
b29sIG11bFNob3VsZFNwZWN1bGF0ZUludGVnZXIoTm9kZSYgbXVsKQorICAgIGJvb2wgbXVsU2hv
dWxkU3BlY3VsYXRlSW50ZWdlcihOb2RlKiBtdWwpCiAgICAgewotICAgICAgICBBU1NFUlQobXVs
Lm9wKCkgPT0gQXJpdGhNdWwpOworICAgICAgICBBU1NFUlQobXVsLT5vcCgpID09IEFyaXRoTXVs
KTsKICAgICAgICAgCi0gICAgICAgIE5vZGUmIGxlZnQgPSBhdChtdWwuY2hpbGQxKCkpOwotICAg
ICAgICBOb2RlJiByaWdodCA9IGF0KG11bC5jaGlsZDIoKSk7CisgICAgICAgIE5vZGUqIGxlZnQg
PSBtdWwtPmNoaWxkMSgpLm5vZGUoKTsKKyAgICAgICAgTm9kZSogcmlnaHQgPSBtdWwtPmNoaWxk
MigpLm5vZGUoKTsKICAgICAgICAgCiAgICAgICAgIHJldHVybiBOb2RlOjpzaG91bGRTcGVjdWxh
dGVJbnRlZ2VyRm9yQXJpdGhtZXRpYyhsZWZ0LCByaWdodCkgJiYgbXVsLmNhblNwZWN1bGF0ZUlu
dGVnZXIoKTsKICAgICB9CiAgICAgCi0gICAgYm9vbCBuZWdhdGVTaG91bGRTcGVjdWxhdGVJbnRl
Z2VyKE5vZGUmIG5lZ2F0ZSkKKyAgICBib29sIG5lZ2F0ZVNob3VsZFNwZWN1bGF0ZUludGVnZXIo
Tm9kZSogbmVnYXRlKQogICAgIHsKLSAgICAgICAgQVNTRVJUKG5lZ2F0ZS5vcCgpID09IEFyaXRo
TmVnYXRlKTsKLSAgICAgICAgcmV0dXJuIGF0KG5lZ2F0ZS5jaGlsZDEoKSkuc2hvdWxkU3BlY3Vs
YXRlSW50ZWdlckZvckFyaXRobWV0aWMoKSAmJiBuZWdhdGUuY2FuU3BlY3VsYXRlSW50ZWdlcigp
OworICAgICAgICBBU1NFUlQobmVnYXRlLT5vcCgpID09IEFyaXRoTmVnYXRlKTsKKyAgICAgICAg
cmV0dXJuIG5lZ2F0ZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZUludGVnZXJGb3JBcml0aG1l
dGljKCkgJiYgbmVnYXRlLT5jYW5TcGVjdWxhdGVJbnRlZ2VyKCk7CiAgICAgfQogICAgIAotICAg
IGJvb2wgYWRkU2hvdWxkU3BlY3VsYXRlSW50ZWdlcihOb2RlSW5kZXggbm9kZUluZGV4KQorICAg
IGJvb2wgYWRkU2hvdWxkU3BlY3VsYXRlSW50ZWdlcihOb2RlKiBub2RlKQogICAgIHsKLSAgICAg
ICAgcmV0dXJuIGFkZFNob3VsZFNwZWN1bGF0ZUludGVnZXIoYXQobm9kZUluZGV4KSk7CisgICAg
ICAgIHJldHVybiBhZGRTaG91bGRTcGVjdWxhdGVJbnRlZ2VyKG5vZGUpOwogICAgIH0KICAgICAK
ICAgICAvLyBIZWxwZXIgbWV0aG9kcyB0byBjaGVjayBub2RlcyBmb3IgY29uc3RhbnRzLgotICAg
IGJvb2wgaXNDb25zdGFudChOb2RlSW5kZXggbm9kZUluZGV4KQorICAgIGJvb2wgaXNDb25zdGFu
dChOb2RlKiBub2RlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGF0KG5vZGVJbmRleCkuaGFzQ29u
c3RhbnQoKTsKKyAgICAgICAgcmV0dXJuIG5vZGUtPmhhc0NvbnN0YW50KCk7CiAgICAgfQotICAg
IGJvb2wgaXNKU0NvbnN0YW50KE5vZGVJbmRleCBub2RlSW5kZXgpCisgICAgYm9vbCBpc0pTQ29u
c3RhbnQoTm9kZSogbm9kZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBhdChub2RlSW5kZXgpLmhh
c0NvbnN0YW50KCk7CisgICAgICAgIHJldHVybiBub2RlLT5oYXNDb25zdGFudCgpOwogICAgIH0K
LSAgICBib29sIGlzSW50MzJDb25zdGFudChOb2RlSW5kZXggbm9kZUluZGV4KQorICAgIGJvb2wg
aXNJbnQzMkNvbnN0YW50KE5vZGUqIG5vZGUpCiAgICAgewotICAgICAgICByZXR1cm4gYXQobm9k
ZUluZGV4KS5pc0ludDMyQ29uc3RhbnQobV9jb2RlQmxvY2spOworICAgICAgICByZXR1cm4gbm9k
ZS0+aXNJbnQzMkNvbnN0YW50KG1fY29kZUJsb2NrKTsKICAgICB9Ci0gICAgYm9vbCBpc0RvdWJs
ZUNvbnN0YW50KE5vZGVJbmRleCBub2RlSW5kZXgpCisgICAgYm9vbCBpc0RvdWJsZUNvbnN0YW50
KE5vZGUqIG5vZGUpCiAgICAgewotICAgICAgICByZXR1cm4gYXQobm9kZUluZGV4KS5pc0RvdWJs
ZUNvbnN0YW50KG1fY29kZUJsb2NrKTsKKyAgICAgICAgcmV0dXJuIG5vZGUtPmlzRG91YmxlQ29u
c3RhbnQobV9jb2RlQmxvY2spOwogICAgIH0KLSAgICBib29sIGlzTnVtYmVyQ29uc3RhbnQoTm9k
ZUluZGV4IG5vZGVJbmRleCkKKyAgICBib29sIGlzTnVtYmVyQ29uc3RhbnQoTm9kZSogbm9kZSkK
ICAgICB7Ci0gICAgICAgIHJldHVybiBhdChub2RlSW5kZXgpLmlzTnVtYmVyQ29uc3RhbnQobV9j
b2RlQmxvY2spOworICAgICAgICByZXR1cm4gbm9kZS0+aXNOdW1iZXJDb25zdGFudChtX2NvZGVC
bG9jayk7CiAgICAgfQotICAgIGJvb2wgaXNCb29sZWFuQ29uc3RhbnQoTm9kZUluZGV4IG5vZGVJ
bmRleCkKKyAgICBib29sIGlzQm9vbGVhbkNvbnN0YW50KE5vZGUqIG5vZGUpCiAgICAgewotICAg
ICAgICByZXR1cm4gYXQobm9kZUluZGV4KS5pc0Jvb2xlYW5Db25zdGFudChtX2NvZGVCbG9jayk7
CisgICAgICAgIHJldHVybiBub2RlLT5pc0Jvb2xlYW5Db25zdGFudChtX2NvZGVCbG9jayk7CiAg
ICAgfQotICAgIGJvb2wgaXNDZWxsQ29uc3RhbnQoTm9kZUluZGV4IG5vZGVJbmRleCkKKyAgICBi
b29sIGlzQ2VsbENvbnN0YW50KE5vZGUqIG5vZGUpCiAgICAgewotICAgICAgICBpZiAoIWlzSlND
b25zdGFudChub2RlSW5kZXgpKQorICAgICAgICBpZiAoIWlzSlNDb25zdGFudChub2RlKSkKICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IHZhbHVlT2ZK
U0NvbnN0YW50KG5vZGVJbmRleCk7CisgICAgICAgIEpTVmFsdWUgdmFsdWUgPSB2YWx1ZU9mSlND
b25zdGFudChub2RlKTsKICAgICAgICAgcmV0dXJuIHZhbHVlLmlzQ2VsbCgpICYmICEhdmFsdWU7
CiAgICAgfQotICAgIGJvb2wgaXNGdW5jdGlvbkNvbnN0YW50KE5vZGVJbmRleCBub2RlSW5kZXgp
CisgICAgYm9vbCBpc0Z1bmN0aW9uQ29uc3RhbnQoTm9kZSogbm9kZSkKICAgICB7Ci0gICAgICAg
IGlmICghaXNKU0NvbnN0YW50KG5vZGVJbmRleCkpCisgICAgICAgIGlmICghaXNKU0NvbnN0YW50
KG5vZGUpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAoIWdldEpTRnVu
Y3Rpb24odmFsdWVPZkpTQ29uc3RhbnQobm9kZUluZGV4KSkpCisgICAgICAgIGlmICghZ2V0SlNG
dW5jdGlvbih2YWx1ZU9mSlNDb25zdGFudChub2RlKSkpCiAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KLSAgICBib29sIGlzSW50ZXJuYWxGdW5j
dGlvbkNvbnN0YW50KE5vZGVJbmRleCBub2RlSW5kZXgpCisgICAgYm9vbCBpc0ludGVybmFsRnVu
Y3Rpb25Db25zdGFudChOb2RlKiBub2RlKQogICAgIHsKLSAgICAgICAgaWYgKCFpc0pTQ29uc3Rh
bnQobm9kZUluZGV4KSkKKyAgICAgICAgaWYgKCFpc0pTQ29uc3RhbnQobm9kZSkpCiAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIEpTVmFsdWUgdmFsdWUgPSB2YWx1ZU9mSlNDb25z
dGFudChub2RlSW5kZXgpOworICAgICAgICBKU1ZhbHVlIHZhbHVlID0gdmFsdWVPZkpTQ29uc3Rh
bnQobm9kZSk7CiAgICAgICAgIGlmICghdmFsdWUuaXNDZWxsKCkgfHwgIXZhbHVlKQogICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBKU0NlbGwqIGNlbGwgPSB2YWx1ZS5hc0NlbGwo
KTsKQEAgLTMyNywyNSArMzA2LDI1IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgfQogICAgIC8vIEhlbHBlciBtZXRob2RzIGdldCBjb25zdGFudCB2YWx1ZXMgZnJvbSBub2Rl
cy4KLSAgICBKU1ZhbHVlIHZhbHVlT2ZKU0NvbnN0YW50KE5vZGVJbmRleCBub2RlSW5kZXgpCisg
ICAgSlNWYWx1ZSB2YWx1ZU9mSlNDb25zdGFudChOb2RlKiBub2RlKQogICAgIHsKLSAgICAgICAg
cmV0dXJuIGF0KG5vZGVJbmRleCkudmFsdWVPZkpTQ29uc3RhbnQobV9jb2RlQmxvY2spOworICAg
ICAgICByZXR1cm4gbm9kZS0+dmFsdWVPZkpTQ29uc3RhbnQobV9jb2RlQmxvY2spOwogICAgIH0K
LSAgICBpbnQzMl90IHZhbHVlT2ZJbnQzMkNvbnN0YW50KE5vZGVJbmRleCBub2RlSW5kZXgpCisg
ICAgaW50MzJfdCB2YWx1ZU9mSW50MzJDb25zdGFudChOb2RlKiBub2RlKQogICAgIHsKLSAgICAg
ICAgcmV0dXJuIHZhbHVlT2ZKU0NvbnN0YW50KG5vZGVJbmRleCkuYXNJbnQzMigpOworICAgICAg
ICByZXR1cm4gdmFsdWVPZkpTQ29uc3RhbnQobm9kZSkuYXNJbnQzMigpOwogICAgIH0KLSAgICBk
b3VibGUgdmFsdWVPZk51bWJlckNvbnN0YW50KE5vZGVJbmRleCBub2RlSW5kZXgpCisgICAgZG91
YmxlIHZhbHVlT2ZOdW1iZXJDb25zdGFudChOb2RlKiBub2RlKQogICAgIHsKLSAgICAgICAgcmV0
dXJuIHZhbHVlT2ZKU0NvbnN0YW50KG5vZGVJbmRleCkuYXNOdW1iZXIoKTsKKyAgICAgICAgcmV0
dXJuIHZhbHVlT2ZKU0NvbnN0YW50KG5vZGUpLmFzTnVtYmVyKCk7CiAgICAgfQotICAgIGJvb2wg
dmFsdWVPZkJvb2xlYW5Db25zdGFudChOb2RlSW5kZXggbm9kZUluZGV4KQorICAgIGJvb2wgdmFs
dWVPZkJvb2xlYW5Db25zdGFudChOb2RlKiBub2RlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIHZh
bHVlT2ZKU0NvbnN0YW50KG5vZGVJbmRleCkuYXNCb29sZWFuKCk7CisgICAgICAgIHJldHVybiB2
YWx1ZU9mSlNDb25zdGFudChub2RlKS5hc0Jvb2xlYW4oKTsKICAgICB9Ci0gICAgSlNGdW5jdGlv
biogdmFsdWVPZkZ1bmN0aW9uQ29uc3RhbnQoTm9kZUluZGV4IG5vZGVJbmRleCkKKyAgICBKU0Z1
bmN0aW9uKiB2YWx1ZU9mRnVuY3Rpb25Db25zdGFudChOb2RlKiBub2RlKQogICAgIHsKLSAgICAg
ICAgSlNDZWxsKiBmdW5jdGlvbiA9IGdldEpTRnVuY3Rpb24odmFsdWVPZkpTQ29uc3RhbnQobm9k
ZUluZGV4KSk7CisgICAgICAgIEpTQ2VsbCogZnVuY3Rpb24gPSBnZXRKU0Z1bmN0aW9uKHZhbHVl
T2ZKU0NvbnN0YW50KG5vZGUpKTsKICAgICAgICAgQVNTRVJUKGZ1bmN0aW9uKTsKICAgICAgICAg
cmV0dXJuIGpzQ2FzdDxKU0Z1bmN0aW9uKj4oZnVuY3Rpb24pOwogICAgIH0KQEAgLTQyMCw0NSAr
Mzk5LDQzIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1fY29kZUJsb2NrLT51bmNoZWNrZWRB
Y3RpdmF0aW9uUmVnaXN0ZXIoKTsKICAgICB9CiAgICAgCi0gICAgVmFsdWVQcm9maWxlKiB2YWx1
ZVByb2ZpbGVGb3IoTm9kZUluZGV4IG5vZGVJbmRleCkKKyAgICBWYWx1ZVByb2ZpbGUqIHZhbHVl
UHJvZmlsZUZvcihOb2RlKiBub2RlKQogICAgIHsKLSAgICAgICAgaWYgKG5vZGVJbmRleCA9PSBO
b05vZGUpCisgICAgICAgIGlmICghbm9kZSkKICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAg
ICAKLSAgICAgICAgTm9kZSYgbm9kZSA9IGF0KG5vZGVJbmRleCk7Ci0gICAgICAgIENvZGVCbG9j
ayogcHJvZmlsZWRCbG9jayA9IGJhc2VsaW5lQ29kZUJsb2NrRm9yKG5vZGUuY29kZU9yaWdpbik7
CisgICAgICAgIENvZGVCbG9jayogcHJvZmlsZWRCbG9jayA9IGJhc2VsaW5lQ29kZUJsb2NrRm9y
KG5vZGUtPmNvZGVPcmlnaW4pOwogICAgICAgICAKLSAgICAgICAgaWYgKG5vZGUuaGFzTG9jYWwo
KSkgewotICAgICAgICAgICAgaWYgKCFvcGVyYW5kSXNBcmd1bWVudChub2RlLmxvY2FsKCkpKQor
ICAgICAgICBpZiAobm9kZS0+aGFzTG9jYWwoKSkgeworICAgICAgICAgICAgaWYgKCFvcGVyYW5k
SXNBcmd1bWVudChub2RlLT5sb2NhbCgpKSkKICAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAg
ICAgICAgICAgIGludCBhcmd1bWVudCA9IG9wZXJhbmRUb0FyZ3VtZW50KG5vZGUubG9jYWwoKSk7
Ci0gICAgICAgICAgICBpZiAobm9kZS52YXJpYWJsZUFjY2Vzc0RhdGEoKSAhPSBhdChtX2FyZ3Vt
ZW50c1thcmd1bWVudF0pLnZhcmlhYmxlQWNjZXNzRGF0YSgpKQorICAgICAgICAgICAgaW50IGFy
Z3VtZW50ID0gb3BlcmFuZFRvQXJndW1lbnQobm9kZS0+bG9jYWwoKSk7CisgICAgICAgICAgICBp
ZiAobm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCkgIT0gbV9hcmd1bWVudHNbYXJndW1lbnRdLT52
YXJpYWJsZUFjY2Vzc0RhdGEoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAg
ICAgIHJldHVybiBwcm9maWxlZEJsb2NrLT52YWx1ZVByb2ZpbGVGb3JBcmd1bWVudChhcmd1bWVu
dCk7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIGlmIChub2RlLmhhc0hlYXBQcmVkaWN0
aW9uKCkpCi0gICAgICAgICAgICByZXR1cm4gcHJvZmlsZWRCbG9jay0+dmFsdWVQcm9maWxlRm9y
Qnl0ZWNvZGVPZmZzZXQobm9kZS5jb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXhGb3JWYWx1ZVByb2Zp
bGUoKSk7CisgICAgICAgIGlmIChub2RlLT5oYXNIZWFwUHJlZGljdGlvbigpKQorICAgICAgICAg
ICAgcmV0dXJuIHByb2ZpbGVkQmxvY2stPnZhbHVlUHJvZmlsZUZvckJ5dGVjb2RlT2Zmc2V0KG5v
ZGUtPmNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleEZvclZhbHVlUHJvZmlsZSgpKTsKICAgICAgICAg
CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KICAgICAKLSAgICBNZXRob2RPZkdldHRpbmdBVmFs
dWVQcm9maWxlIG1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGVGb3IoTm9kZUluZGV4IG5vZGVJ
bmRleCkKKyAgICBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlIG1ldGhvZE9mR2V0dGluZ0FW
YWx1ZVByb2ZpbGVGb3IoTm9kZSogbm9kZSkKICAgICB7Ci0gICAgICAgIGlmIChub2RlSW5kZXgg
PT0gTm9Ob2RlKQorICAgICAgICBpZiAoIW5vZGUpCiAgICAgICAgICAgICByZXR1cm4gTWV0aG9k
T2ZHZXR0aW5nQVZhbHVlUHJvZmlsZSgpOwogICAgICAgICAKLSAgICAgICAgTm9kZSYgbm9kZSA9
IGF0KG5vZGVJbmRleCk7Ci0gICAgICAgIENvZGVCbG9jayogcHJvZmlsZWRCbG9jayA9IGJhc2Vs
aW5lQ29kZUJsb2NrRm9yKG5vZGUuY29kZU9yaWdpbik7CisgICAgICAgIENvZGVCbG9jayogcHJv
ZmlsZWRCbG9jayA9IGJhc2VsaW5lQ29kZUJsb2NrRm9yKG5vZGUtPmNvZGVPcmlnaW4pOwogICAg
ICAgICAKLSAgICAgICAgaWYgKG5vZGUub3AoKSA9PSBHZXRMb2NhbCkgeworICAgICAgICBpZiAo
bm9kZS0+b3AoKSA9PSBHZXRMb2NhbCkgewogICAgICAgICAgICAgcmV0dXJuIE1ldGhvZE9mR2V0
dGluZ0FWYWx1ZVByb2ZpbGU6OmZyb21MYXp5T3BlcmFuZCgKICAgICAgICAgICAgICAgICBwcm9m
aWxlZEJsb2NrLAogICAgICAgICAgICAgICAgIExhenlPcGVyYW5kVmFsdWVQcm9maWxlS2V5KAot
ICAgICAgICAgICAgICAgICAgICBub2RlLmNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCwgbm9kZS5s
b2NhbCgpKSk7CisgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNvZGVPcmlnaW4uYnl0ZWNvZGVJ
bmRleCwgbm9kZS0+bG9jYWwoKSkpOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICByZXR1
cm4gTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZSh2YWx1ZVByb2ZpbGVGb3Iobm9kZUluZGV4
KSk7CisgICAgICAgIHJldHVybiBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlKHZhbHVlUHJv
ZmlsZUZvcihub2RlKSk7CiAgICAgfQogICAgIAogICAgIGJvb2wgbmVlZHNBY3RpdmF0aW9uKCkg
Y29uc3QKQEAgLTQ4MiwyMSArNDU5LDIxIEBAIHB1YmxpYzoKICAgICAKICAgICB1bnNpZ25lZCBu
dW1TdWNjZXNzb3JzKEJhc2ljQmxvY2sqIGJsb2NrKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGF0
KGJsb2NrLT5sYXN0KCkpLm51bVN1Y2Nlc3NvcnMoKTsKKyAgICAgICAgcmV0dXJuIGJsb2NrLT5s
YXN0KCktPm51bVN1Y2Nlc3NvcnMoKTsKICAgICB9CiAgICAgQmxvY2tJbmRleCBzdWNjZXNzb3Io
QmFzaWNCbG9jayogYmxvY2ssIHVuc2lnbmVkIGluZGV4KQogICAgIHsKLSAgICAgICAgcmV0dXJu
IGF0KGJsb2NrLT5sYXN0KCkpLnN1Y2Nlc3NvcihpbmRleCk7CisgICAgICAgIHJldHVybiBibG9j
ay0+bGFzdCgpLT5zdWNjZXNzb3IoaW5kZXgpOwogICAgIH0KICAgICBCbG9ja0luZGV4IHN1Y2Nl
c3NvckZvckNvbmRpdGlvbihCYXNpY0Jsb2NrKiBibG9jaywgYm9vbCBjb25kaXRpb24pCiAgICAg
ewotICAgICAgICByZXR1cm4gYXQoYmxvY2stPmxhc3QoKSkuc3VjY2Vzc29yRm9yQ29uZGl0aW9u
KGNvbmRpdGlvbik7CisgICAgICAgIHJldHVybiBibG9jay0+bGFzdCgpLT5zdWNjZXNzb3JGb3JD
b25kaXRpb24oY29uZGl0aW9uKTsKICAgICB9CiAgICAgCi0gICAgYm9vbCBpc1ByZWRpY3RlZE51
bWVyaWNhbChOb2RlJiBub2RlKQorICAgIGJvb2wgaXNQcmVkaWN0ZWROdW1lcmljYWwoTm9kZSog
bm9kZSkKICAgICB7Ci0gICAgICAgIFNwZWN1bGF0ZWRUeXBlIGxlZnQgPSBhdChub2RlLmNoaWxk
MSgpKS5wcmVkaWN0aW9uKCk7Ci0gICAgICAgIFNwZWN1bGF0ZWRUeXBlIHJpZ2h0ID0gYXQobm9k
ZS5jaGlsZDIoKSkucHJlZGljdGlvbigpOworICAgICAgICBTcGVjdWxhdGVkVHlwZSBsZWZ0ID0g
bm9kZS0+Y2hpbGQxKCktPnByZWRpY3Rpb24oKTsKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUgcmln
aHQgPSBub2RlLT5jaGlsZDIoKS0+cHJlZGljdGlvbigpOwogICAgICAgICByZXR1cm4gaXNOdW1i
ZXJTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc051bWJlclNwZWN1bGF0aW9uKHJpZ2h0KTsKICAgICB9
CiAgICAgCkBAIC01MDYsMjMgKzQ4MywyMyBAQCBwdWJsaWM6CiAgICAgLy8gLSBQdXRCeVZhbCBk
ZWZpbml0ZWx5IGNoYW5nZXMgdGhlIGFycmF5IGl0IHN0b3JlcyB0bywgYW5kIG1heSBldmVuIGNo
YW5nZSBpdHMgbGVuZ3RoLgogICAgIC8vIC0gUHV0QnlPZmZzZXQgZGVmaW5pdGVseSBjaGFuZ2Vz
IHRoZSBvYmplY3QgaXQgc3RvcmVzIHRvLgogICAgIC8vIC0gYW5kIHNvIG9uLgotICAgIGJvb2wg
YnlWYWxJc1B1cmUoTm9kZSYgbm9kZSkKKyAgICBib29sIGJ5VmFsSXNQdXJlKE5vZGUqIG5vZGUp
CiAgICAgewotICAgICAgICBzd2l0Y2ggKG5vZGUuYXJyYXlNb2RlKCkudHlwZSgpKSB7CisgICAg
ICAgIHN3aXRjaCAobm9kZS0+YXJyYXlNb2RlKCkudHlwZSgpKSB7CiAgICAgICAgIGNhc2UgQXJy
YXk6OkdlbmVyaWM6CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGNhc2UgQXJy
YXk6OkludDMyOgogICAgICAgICBjYXNlIEFycmF5OjpEb3VibGU6CiAgICAgICAgIGNhc2UgQXJy
YXk6OkNvbnRpZ3VvdXM6CiAgICAgICAgIGNhc2UgQXJyYXk6OkFycmF5U3RvcmFnZToKLSAgICAg
ICAgICAgIHJldHVybiAhbm9kZS5hcnJheU1vZGUoKS5pc091dE9mQm91bmRzKCk7CisgICAgICAg
ICAgICByZXR1cm4gIW5vZGUtPmFycmF5TW9kZSgpLmlzT3V0T2ZCb3VuZHMoKTsKICAgICAgICAg
Y2FzZSBBcnJheTo6U2xvd1B1dEFycmF5U3RvcmFnZToKLSAgICAgICAgICAgIHJldHVybiAhbm9k
ZS5hcnJheU1vZGUoKS5tYXlTdG9yZVRvSG9sZSgpOworICAgICAgICAgICAgcmV0dXJuICFub2Rl
LT5hcnJheU1vZGUoKS5tYXlTdG9yZVRvSG9sZSgpOwogICAgICAgICBjYXNlIEFycmF5OjpTdHJp
bmc6Ci0gICAgICAgICAgICByZXR1cm4gbm9kZS5vcCgpID09IEdldEJ5VmFsOworICAgICAgICAg
ICAgcmV0dXJuIG5vZGUtPm9wKCkgPT0gR2V0QnlWYWw7CiAjaWYgVVNFKEpTVkFMVUUzMl82NCkK
ICAgICAgICAgY2FzZSBBcnJheTo6QXJndW1lbnRzOgotICAgICAgICAgICAgaWYgKG5vZGUub3Ao
KSA9PSBHZXRCeVZhbCkKKyAgICAgICAgICAgIGlmIChub2RlLT5vcCgpID09IEdldEJ5VmFsKQog
ICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwog
I2VuZGlmIC8vIFVTRShKU1ZBTFVFMzJfNjQpCkBAIC01MzEsMTMgKzUwOCwxMyBAQCBwdWJsaWM6
CiAgICAgICAgIH0KICAgICB9CiAgICAgCi0gICAgYm9vbCBjbG9iYmVyc1dvcmxkKE5vZGUmIG5v
ZGUpCisgICAgYm9vbCBjbG9iYmVyc1dvcmxkKE5vZGUqIG5vZGUpCiAgICAgewotICAgICAgICBp
ZiAobm9kZS5mbGFncygpICYgTm9kZUNsb2JiZXJzV29ybGQpCisgICAgICAgIGlmIChub2RlLT5m
bGFncygpICYgTm9kZUNsb2JiZXJzV29ybGQpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICAgICAgaWYgKCEobm9kZS5mbGFncygpICYgTm9kZU1pZ2h0Q2xvYmJlcikpCisgICAgICAgIGlm
ICghKG5vZGUtPmZsYWdzKCkgJiBOb2RlTWlnaHRDbG9iYmVyKSkKICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAgICAgc3dpdGNoIChub2RlLm9wKCkpIHsKKyAgICAgICAgc3dpdGNoIChu
b2RlLT5vcCgpKSB7CiAgICAgICAgIGNhc2UgVmFsdWVBZGQ6CiAgICAgICAgIGNhc2UgQ29tcGFy
ZUxlc3M6CiAgICAgICAgIGNhc2UgQ29tcGFyZUxlc3NFcToKQEAgLTU1NSw5ICs1MzIsOSBAQCBw
dWJsaWM6CiAgICAgICAgIH0KICAgICB9CiAgICAgCi0gICAgYm9vbCBjbG9iYmVyc1dvcmxkKE5v
ZGVJbmRleCBub2RlSW5kZXgpCisgICAgYm9vbCBjbG9iYmVyc1dvcmxkKE5vZGUqIG5vZGUpCiAg
ICAgewotICAgICAgICByZXR1cm4gY2xvYmJlcnNXb3JsZChhdChub2RlSW5kZXgpKTsKKyAgICAg
ICAgcmV0dXJuIGNsb2JiZXJzV29ybGQobm9kZSk7CiAgICAgfQogICAgIAogICAgIHZvaWQgZGV0
ZXJtaW5lUmVhY2hhYmlsaXR5KCk7CkBAIC01NjUsMzAgKzU0MiwzMCBAQCBwdWJsaWM6CiAgICAg
CiAgICAgdm9pZCByZXNldEV4aXRTdGF0ZXMoKTsKICAgICAKLSAgICB1bnNpZ25lZCB2YXJBcmdO
dW1DaGlsZHJlbihOb2RlJiBub2RlKQorICAgIHVuc2lnbmVkIHZhckFyZ051bUNoaWxkcmVuKE5v
ZGUqIG5vZGUpCiAgICAgewotICAgICAgICBBU1NFUlQobm9kZS5mbGFncygpICYgTm9kZUhhc1Zh
ckFyZ3MpOwotICAgICAgICByZXR1cm4gbm9kZS5udW1DaGlsZHJlbigpOworICAgICAgICBBU1NF
UlQobm9kZS0+ZmxhZ3MoKSAmIE5vZGVIYXNWYXJBcmdzKTsKKyAgICAgICAgcmV0dXJuIG5vZGUt
Pm51bUNoaWxkcmVuKCk7CiAgICAgfQogICAgIAotICAgIHVuc2lnbmVkIG51bUNoaWxkcmVuKE5v
ZGUmIG5vZGUpCisgICAgdW5zaWduZWQgbnVtQ2hpbGRyZW4oTm9kZSogbm9kZSkKICAgICB7Ci0g
ICAgICAgIGlmIChub2RlLmZsYWdzKCkgJiBOb2RlSGFzVmFyQXJncykKKyAgICAgICAgaWYgKG5v
ZGUtPmZsYWdzKCkgJiBOb2RlSGFzVmFyQXJncykKICAgICAgICAgICAgIHJldHVybiB2YXJBcmdO
dW1DaGlsZHJlbihub2RlKTsKICAgICAgICAgcmV0dXJuIEFkamFjZW5jeUxpc3Q6OlNpemU7CiAg
ICAgfQogICAgIAotICAgIEVkZ2UmIHZhckFyZ0NoaWxkKE5vZGUmIG5vZGUsIHVuc2lnbmVkIGlu
ZGV4KQorICAgIEVkZ2UmIHZhckFyZ0NoaWxkKE5vZGUqIG5vZGUsIHVuc2lnbmVkIGluZGV4KQog
ICAgIHsKLSAgICAgICAgQVNTRVJUKG5vZGUuZmxhZ3MoKSAmIE5vZGVIYXNWYXJBcmdzKTsKLSAg
ICAgICAgcmV0dXJuIG1fdmFyQXJnQ2hpbGRyZW5bbm9kZS5maXJzdENoaWxkKCkgKyBpbmRleF07
CisgICAgICAgIEFTU0VSVChub2RlLT5mbGFncygpICYgTm9kZUhhc1ZhckFyZ3MpOworICAgICAg
ICByZXR1cm4gbV92YXJBcmdDaGlsZHJlbltub2RlLT5maXJzdENoaWxkKCkgKyBpbmRleF07CiAg
ICAgfQogICAgIAotICAgIEVkZ2UmIGNoaWxkKE5vZGUmIG5vZGUsIHVuc2lnbmVkIGluZGV4KQor
ICAgIEVkZ2UmIGNoaWxkKE5vZGUqIG5vZGUsIHVuc2lnbmVkIGluZGV4KQogICAgIHsKLSAgICAg
ICAgaWYgKG5vZGUuZmxhZ3MoKSAmIE5vZGVIYXNWYXJBcmdzKQorICAgICAgICBpZiAobm9kZS0+
ZmxhZ3MoKSAmIE5vZGVIYXNWYXJBcmdzKQogICAgICAgICAgICAgcmV0dXJuIHZhckFyZ0NoaWxk
KG5vZGUsIGluZGV4KTsKLSAgICAgICAgcmV0dXJuIG5vZGUuY2hpbGRyZW4uY2hpbGQoaW5kZXgp
OworICAgICAgICByZXR1cm4gbm9kZS0+Y2hpbGRyZW4uY2hpbGQoaW5kZXgpOwogICAgIH0KICAg
ICAKICAgICB2b2lkIHZvdGUoRWRnZSBlZGdlLCB1bnNpZ25lZCBiYWxsb3QpCkBAIC01OTYsMjEg
KzU3MywyMSBAQCBwdWJsaWM6CiAgICAgICAgIHN3aXRjaCAoYXQoZWRnZSkub3AoKSkgewogICAg
ICAgICBjYXNlIFZhbHVlVG9JbnQzMjoKICAgICAgICAgY2FzZSBVSW50MzJUb051bWJlcjoKLSAg
ICAgICAgICAgIGVkZ2UgPSBhdChlZGdlKS5jaGlsZDEoKTsKKyAgICAgICAgICAgIGVkZ2UgPSBl
ZGdlLT5jaGlsZDEoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBkZWZhdWx0OgogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIGlmIChhdChlZGdl
KS5vcCgpID09IEdldExvY2FsKQotICAgICAgICAgICAgYXQoZWRnZSkudmFyaWFibGVBY2Nlc3NE
YXRhKCktPnZvdGUoYmFsbG90KTsKKyAgICAgICAgaWYgKGVkZ2UtPm9wKCkgPT0gR2V0TG9jYWwp
CisgICAgICAgICAgICBlZGdlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+dm90ZShiYWxsb3QpOwog
ICAgIH0KICAgICAKLSAgICB2b2lkIHZvdGUoTm9kZSYgbm9kZSwgdW5zaWduZWQgYmFsbG90KQor
ICAgIHZvaWQgdm90ZShOb2RlKiBub2RlLCB1bnNpZ25lZCBiYWxsb3QpCiAgICAgewotICAgICAg
ICBpZiAobm9kZS5mbGFncygpICYgTm9kZUhhc1ZhckFyZ3MpIHsKLSAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgY2hpbGRJZHggPSBub2RlLmZpcnN0Q2hpbGQoKTsKLSAgICAgICAgICAgICAgICAg
Y2hpbGRJZHggPCBub2RlLmZpcnN0Q2hpbGQoKSArIG5vZGUubnVtQ2hpbGRyZW4oKTsKKyAgICAg
ICAgaWYgKG5vZGUtPmZsYWdzKCkgJiBOb2RlSGFzVmFyQXJncykgeworICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBjaGlsZElkeCA9IG5vZGUtPmZpcnN0Q2hpbGQoKTsKKyAgICAgICAgICAgICAg
ICAgY2hpbGRJZHggPCBub2RlLT5maXJzdENoaWxkKCkgKyBub2RlLT5udW1DaGlsZHJlbigpOwog
ICAgICAgICAgICAgICAgICBjaGlsZElkeCsrKSB7CiAgICAgICAgICAgICAgICAgaWYgKCEhbV92
YXJBcmdDaGlsZHJlbltjaGlsZElkeF0pCiAgICAgICAgICAgICAgICAgICAgIHZvdGUobV92YXJB
cmdDaGlsZHJlbltjaGlsZElkeF0sIGJhbGxvdCk7CkBAIC02MTgsMzkgKzU5NSwzOCBAQCBwdWJs
aWM6CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIGlm
ICghbm9kZS5jaGlsZDEoKSkKKyAgICAgICAgaWYgKCFub2RlLT5jaGlsZDEoKSkKICAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgdm90ZShub2RlLmNoaWxkMSgpLCBiYWxsb3QpOwotICAgICAg
ICBpZiAoIW5vZGUuY2hpbGQyKCkpCisgICAgICAgIHZvdGUobm9kZS0+Y2hpbGQxKCksIGJhbGxv
dCk7CisgICAgICAgIGlmICghbm9kZS0+Y2hpbGQyKCkpCiAgICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIHZvdGUobm9kZS5jaGlsZDIoKSwgYmFsbG90KTsKLSAgICAgICAgaWYgKCFub2RlLmNo
aWxkMygpKQorICAgICAgICB2b3RlKG5vZGUtPmNoaWxkMigpLCBiYWxsb3QpOworICAgICAgICBp
ZiAoIW5vZGUtPmNoaWxkMygpKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB2b3RlKG5v
ZGUuY2hpbGQzKCksIGJhbGxvdCk7CisgICAgICAgIHZvdGUobm9kZS0+Y2hpbGQzKCksIGJhbGxv
dCk7CiAgICAgfQogICAgIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IC8vIFQgPSBOb2RlSW5k
ZXggb3IgRWRnZQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IC8vIFQgPSBOb2RlKiBvciBFZGdl
CiAgICAgdm9pZCBzdWJzdGl0dXRlKEJhc2ljQmxvY2smIGJsb2NrLCB1bnNpZ25lZCBzdGFydElu
ZGV4SW5CbG9jaywgVCBvbGRUaGluZywgVCBuZXdUaGluZykKICAgICB7CiAgICAgICAgIGZvciAo
dW5zaWduZWQgaW5kZXhJbkJsb2NrID0gc3RhcnRJbmRleEluQmxvY2s7IGluZGV4SW5CbG9jayA8
IGJsb2NrLnNpemUoKTsgKytpbmRleEluQmxvY2spIHsKLSAgICAgICAgICAgIE5vZGVJbmRleCBu
b2RlSW5kZXggPSBibG9ja1tpbmRleEluQmxvY2tdOwotICAgICAgICAgICAgTm9kZSYgbm9kZSA9
IGF0KG5vZGVJbmRleCk7Ci0gICAgICAgICAgICBpZiAobm9kZS5mbGFncygpICYgTm9kZUhhc1Zh
ckFyZ3MpIHsKLSAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGNoaWxkSWR4ID0gbm9kZS5m
aXJzdENoaWxkKCk7IGNoaWxkSWR4IDwgbm9kZS5maXJzdENoaWxkKCkgKyBub2RlLm51bUNoaWxk
cmVuKCk7ICsrY2hpbGRJZHgpIHsKKyAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9ja1tpbmRl
eEluQmxvY2tdOworICAgICAgICAgICAgaWYgKG5vZGUtPmZsYWdzKCkgJiBOb2RlSGFzVmFyQXJn
cykgeworICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgY2hpbGRJZHggPSBub2RlLT5maXJz
dENoaWxkKCk7IGNoaWxkSWR4IDwgbm9kZS0+Zmlyc3RDaGlsZCgpICsgbm9kZS0+bnVtQ2hpbGRy
ZW4oKTsgKytjaGlsZElkeCkgewogICAgICAgICAgICAgICAgICAgICBpZiAoISFtX3ZhckFyZ0No
aWxkcmVuW2NoaWxkSWR4XSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBhcmVBbmRTd2Fw
KG1fdmFyQXJnQ2hpbGRyZW5bY2hpbGRJZHhdLCBvbGRUaGluZywgbmV3VGhpbmcsIG5vZGUuc2hv
dWxkR2VuZXJhdGUoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBjb21wYXJlQW5kU3dhcCht
X3ZhckFyZ0NoaWxkcmVuW2NoaWxkSWR4XSwgb2xkVGhpbmcsIG5ld1RoaW5nLCBub2RlLT5zaG91
bGRHZW5lcmF0ZSgpKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgY29udGlu
dWU7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoIW5vZGUuY2hpbGQxKCkpCisgICAg
ICAgICAgICBpZiAoIW5vZGUtPmNoaWxkMSgpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwot
ICAgICAgICAgICAgY29tcGFyZUFuZFN3YXAobm9kZS5jaGlsZHJlbi5jaGlsZDEoKSwgb2xkVGhp
bmcsIG5ld1RoaW5nLCBub2RlLnNob3VsZEdlbmVyYXRlKCkpOwotICAgICAgICAgICAgaWYgKCFu
b2RlLmNoaWxkMigpKQorICAgICAgICAgICAgY29tcGFyZUFuZFN3YXAobm9kZS0+Y2hpbGRyZW4u
Y2hpbGQxKCksIG9sZFRoaW5nLCBuZXdUaGluZywgbm9kZS0+c2hvdWxkR2VuZXJhdGUoKSk7Cisg
ICAgICAgICAgICBpZiAoIW5vZGUtPmNoaWxkMigpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwotICAgICAgICAgICAgY29tcGFyZUFuZFN3YXAobm9kZS5jaGlsZHJlbi5jaGlsZDIoKSwgb2xk
VGhpbmcsIG5ld1RoaW5nLCBub2RlLnNob3VsZEdlbmVyYXRlKCkpOwotICAgICAgICAgICAgaWYg
KCFub2RlLmNoaWxkMygpKQorICAgICAgICAgICAgY29tcGFyZUFuZFN3YXAobm9kZS0+Y2hpbGRy
ZW4uY2hpbGQyKCksIG9sZFRoaW5nLCBuZXdUaGluZywgbm9kZS0+c2hvdWxkR2VuZXJhdGUoKSk7
CisgICAgICAgICAgICBpZiAoIW5vZGUtPmNoaWxkMygpKQogICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwotICAgICAgICAgICAgY29tcGFyZUFuZFN3YXAobm9kZS5jaGlsZHJlbi5jaGlsZDMoKSwg
b2xkVGhpbmcsIG5ld1RoaW5nLCBub2RlLnNob3VsZEdlbmVyYXRlKCkpOworICAgICAgICAgICAg
Y29tcGFyZUFuZFN3YXAobm9kZS0+Y2hpbGRyZW4uY2hpbGQzKCksIG9sZFRoaW5nLCBuZXdUaGlu
Zywgbm9kZS0+c2hvdWxkR2VuZXJhdGUoKSk7CiAgICAgICAgIH0KICAgICB9CiAgICAgCkBAIC02
NTgsMjkgKzYzNCwyOCBAQCBwdWJsaWM6CiAgICAgLy8gYW55IEdldExvY2FscyBpbiB0aGUgYmFz
aWMgYmxvY2suCiAgICAgLy8gRklYTUU6IGl0IG1heSBiZSBhcHByb3ByaWF0ZSwgaW4gdGhlIGZ1
dHVyZSwgdG8gZ2VuZXJhbGl6ZSB0aGlzIHRvIGhhbmRsZSBHZXRMb2NhbHMKICAgICAvLyBpbnRy
b2R1Y2VkIGFueXdoZXJlIGluIHRoZSBiYXNpYyBibG9jay4KLSAgICB2b2lkIHN1YnN0aXR1dGVH
ZXRMb2NhbChCYXNpY0Jsb2NrJiBibG9jaywgdW5zaWduZWQgc3RhcnRJbmRleEluQmxvY2ssIFZh
cmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhLCBOb2RlSW5kZXggbmV3R2V0TG9j
YWwpCisgICAgdm9pZCBzdWJzdGl0dXRlR2V0TG9jYWwoQmFzaWNCbG9jayYgYmxvY2ssIHVuc2ln
bmVkIHN0YXJ0SW5kZXhJbkJsb2NrLCBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNz
RGF0YSwgTm9kZSogbmV3R2V0TG9jYWwpCiAgICAgewogICAgICAgICBpZiAodmFyaWFibGVBY2Nl
c3NEYXRhLT5pc0NhcHR1cmVkKCkpIHsKICAgICAgICAgICAgIC8vIExldCBDU0Ugd29ycnkgYWJv
dXQgdGhpcyBvbmUuCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpbmRleEluQmxvY2sgPSBzdGFydEluZGV4SW5CbG9jazsgaW5kZXhJbkJsb2Nr
IDwgYmxvY2suc2l6ZSgpOyArK2luZGV4SW5CbG9jaykgewotICAgICAgICAgICAgTm9kZUluZGV4
IG5vZGVJbmRleCA9IGJsb2NrW2luZGV4SW5CbG9ja107Ci0gICAgICAgICAgICBOb2RlJiBub2Rl
ID0gYXQobm9kZUluZGV4KTsKKyAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9ja1tpbmRleElu
QmxvY2tdOwogICAgICAgICAgICAgYm9vbCBzaG91bGRDb250aW51ZSA9IHRydWU7Ci0gICAgICAg
ICAgICBzd2l0Y2ggKG5vZGUub3AoKSkgeworICAgICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgp
KSB7CiAgICAgICAgICAgICBjYXNlIFNldExvY2FsOiB7Ci0gICAgICAgICAgICAgICAgaWYgKG5v
ZGUubG9jYWwoKSA9PSB2YXJpYWJsZUFjY2Vzc0RhdGEtPmxvY2FsKCkpCisgICAgICAgICAgICAg
ICAgaWYgKG5vZGUtPmxvY2FsKCkgPT0gdmFyaWFibGVBY2Nlc3NEYXRhLT5sb2NhbCgpKQogICAg
ICAgICAgICAgICAgICAgICBzaG91bGRDb250aW51ZSA9IGZhbHNlOwogICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgY2Fz
ZSBHZXRMb2NhbDogewotICAgICAgICAgICAgICAgIGlmIChub2RlLnZhcmlhYmxlQWNjZXNzRGF0
YSgpICE9IHZhcmlhYmxlQWNjZXNzRGF0YSkKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+dmFy
aWFibGVBY2Nlc3NEYXRhKCkgIT0gdmFyaWFibGVBY2Nlc3NEYXRhKQogICAgICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICBzdWJzdGl0dXRlKGJsb2NrLCBpbmRleElu
QmxvY2ssIG5vZGVJbmRleCwgbmV3R2V0TG9jYWwpOwotICAgICAgICAgICAgICAgIE5vZGVJbmRl
eCBvbGRUYWlsSW5kZXggPSBibG9jay52YXJpYWJsZXNBdFRhaWwub3BlcmFuZCh2YXJpYWJsZUFj
Y2Vzc0RhdGEtPmxvY2FsKCkpOwotICAgICAgICAgICAgICAgIGlmIChvbGRUYWlsSW5kZXggPT0g
bm9kZUluZGV4KQorICAgICAgICAgICAgICAgIHN1YnN0aXR1dGUoYmxvY2ssIGluZGV4SW5CbG9j
aywgbm9kZSwgbmV3R2V0TG9jYWwpOworICAgICAgICAgICAgICAgIE5vZGUqIG9sZFRhaWxOb2Rl
ID0gYmxvY2sudmFyaWFibGVzQXRUYWlsLm9wZXJhbmQodmFyaWFibGVBY2Nlc3NEYXRhLT5sb2Nh
bCgpKTsKKyAgICAgICAgICAgICAgICBpZiAob2xkVGFpbE5vZGUgPT0gbm9kZSkKICAgICAgICAg
ICAgICAgICAgICAgYmxvY2sudmFyaWFibGVzQXRUYWlsLm9wZXJhbmQodmFyaWFibGVBY2Nlc3NE
YXRhLT5sb2NhbCgpKSA9IG5ld0dldExvY2FsOwogICAgICAgICAgICAgICAgIHNob3VsZENvbnRp
bnVlID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC02OTgsNiArNjczLDggQEAg
cHVibGljOgogICAgIENvZGVCbG9jayogbV9jb2RlQmxvY2s7CiAgICAgUmVmUHRyPFByb2ZpbGVy
OjpDb21waWxhdGlvbj4gbV9jb21waWxhdGlvbjsKICAgICBDb2RlQmxvY2sqIG1fcHJvZmlsZWRC
bG9jazsKKyAgICAKKyAgICBOb2RlQWxsb2NhdG9yIG1fYWxsb2NhdG9yOwogCiAgICAgVmVjdG9y
PCBPd25QdHI8QmFzaWNCbG9jaz4gLCA4PiBtX2Jsb2NrczsKICAgICBWZWN0b3I8RWRnZSwgMTY+
IG1fdmFyQXJnQ2hpbGRyZW47CkBAIC03MDUsNyArNjgyLDcgQEAgcHVibGljOgogICAgIFZlY3Rv
cjxSZXNvbHZlR2xvYmFsRGF0YT4gbV9yZXNvbHZlR2xvYmFsRGF0YTsKICAgICBWZWN0b3I8UmVz
b2x2ZU9wZXJhdGlvbkRhdGE+IG1fcmVzb2x2ZU9wZXJhdGlvbnNEYXRhOwogICAgIFZlY3RvcjxQ
dXRUb0Jhc2VPcGVyYXRpb25EYXRhPiBtX3B1dFRvQmFzZU9wZXJhdGlvbkRhdGE7Ci0gICAgVmVj
dG9yPE5vZGVJbmRleCwgOD4gbV9hcmd1bWVudHM7CisgICAgVmVjdG9yPE5vZGUqLCA4PiBtX2Fy
Z3VtZW50czsKICAgICBTZWdtZW50ZWRWZWN0b3I8VmFyaWFibGVBY2Nlc3NEYXRhLCAxNj4gbV92
YXJpYWJsZUFjY2Vzc0RhdGE7CiAgICAgU2VnbWVudGVkVmVjdG9yPEFyZ3VtZW50UG9zaXRpb24s
IDg+IG1fYXJndW1lbnRQb3NpdGlvbnM7CiAgICAgU2VnbWVudGVkVmVjdG9yPFN0cnVjdHVyZVNl
dCwgMTY+IG1fc3RydWN0dXJlU2V0OwpAQCAtNzI1LDI5ICs3MDIsMjkgQEAgcHJpdmF0ZToKICAg
ICAKICAgICB2b2lkIGhhbmRsZVN1Y2Nlc3NvcihWZWN0b3I8QmxvY2tJbmRleCwgMTY+JiB3b3Jr
bGlzdCwgQmxvY2tJbmRleCBibG9ja0luZGV4LCBCbG9ja0luZGV4IHN1Y2Nlc3NvckluZGV4KTsK
ICAgICAKLSAgICBBZGRTcGVjdWxhdGlvbk1vZGUgYWRkSW1tZWRpYXRlU2hvdWxkU3BlY3VsYXRl
SW50ZWdlcihOb2RlJiBhZGQsIGJvb2wgdmFyaWFibGVTaG91bGRTcGVjdWxhdGVJbnRlZ2VyLCBO
b2RlJiBpbW1lZGlhdGUpCisgICAgQWRkU3BlY3VsYXRpb25Nb2RlIGFkZEltbWVkaWF0ZVNob3Vs
ZFNwZWN1bGF0ZUludGVnZXIoTm9kZSogYWRkLCBib29sIHZhcmlhYmxlU2hvdWxkU3BlY3VsYXRl
SW50ZWdlciwgTm9kZSogaW1tZWRpYXRlKQogICAgIHsKICAgICAgICAgQVNTRVJUKGltbWVkaWF0
ZS5oYXNDb25zdGFudCgpKTsKICAgICAgICAgCi0gICAgICAgIEpTVmFsdWUgaW1tZWRpYXRlVmFs
dWUgPSBpbW1lZGlhdGUudmFsdWVPZkpTQ29uc3RhbnQobV9jb2RlQmxvY2spOwotICAgICAgICBp
ZiAoIWltbWVkaWF0ZVZhbHVlLmlzTnVtYmVyKCkpCisgICAgICAgIEpTVmFsdWUgaW1tZWRpYXRl
VmFsdWUgPSBpbW1lZGlhdGUtPnZhbHVlT2ZKU0NvbnN0YW50KG1fY29kZUJsb2NrKTsKKyAgICAg
ICAgaWYgKCFpbW1lZGlhdGVWYWx1ZS0+aXNOdW1iZXIoKSkKICAgICAgICAgICAgIHJldHVybiBE
b250U3BlY3VsYXRlSW50ZWdlcjsKICAgICAgICAgCiAgICAgICAgIGlmICghdmFyaWFibGVTaG91
bGRTcGVjdWxhdGVJbnRlZ2VyKQogICAgICAgICAgICAgcmV0dXJuIERvbnRTcGVjdWxhdGVJbnRl
Z2VyOwogICAgICAgICAKLSAgICAgICAgaWYgKGltbWVkaWF0ZVZhbHVlLmlzSW50MzIoKSkKLSAg
ICAgICAgICAgIHJldHVybiBhZGQuY2FuU3BlY3VsYXRlSW50ZWdlcigpID8gU3BlY3VsYXRlSW50
ZWdlciA6IERvbnRTcGVjdWxhdGVJbnRlZ2VyOworICAgICAgICBpZiAoaW1tZWRpYXRlVmFsdWUt
PmlzSW50MzIoKSkKKyAgICAgICAgICAgIHJldHVybiBhZGQtPmNhblNwZWN1bGF0ZUludGVnZXIo
KSA/IFNwZWN1bGF0ZUludGVnZXIgOiBEb250U3BlY3VsYXRlSW50ZWdlcjsKICAgICAgICAgCiAg
ICAgICAgIGRvdWJsZSBkb3VibGVJbW1lZGlhdGUgPSBpbW1lZGlhdGVWYWx1ZS5hc0RvdWJsZSgp
OwogICAgICAgICBjb25zdCBkb3VibGUgdHdvVG9UaGU0OCA9IDI4MTQ3NDk3NjcxMDY1Ni4wOwog
ICAgICAgICBpZiAoZG91YmxlSW1tZWRpYXRlIDwgLXR3b1RvVGhlNDggfHwgZG91YmxlSW1tZWRp
YXRlID4gdHdvVG9UaGU0OCkKICAgICAgICAgICAgIHJldHVybiBEb250U3BlY3VsYXRlSW50ZWdl
cjsKICAgICAgICAgCi0gICAgICAgIHJldHVybiBub2RlQ2FuVHJ1bmNhdGVJbnRlZ2VyKGFkZC5h
cml0aE5vZGVGbGFncygpKSA/IFNwZWN1bGF0ZUludGVnZXJCdXRBbHdheXNXYXRjaE92ZXJmbG93
IDogRG9udFNwZWN1bGF0ZUludGVnZXI7CisgICAgICAgIHJldHVybiBub2RlQ2FuVHJ1bmNhdGVJ
bnRlZ2VyKGFkZC0+YXJpdGhOb2RlRmxhZ3MoKSkgPyBTcGVjdWxhdGVJbnRlZ2VyQnV0QWx3YXlz
V2F0Y2hPdmVyZmxvdyA6IERvbnRTcGVjdWxhdGVJbnRlZ2VyOwogICAgIH0KICAgICAKLSAgICBi
b29sIG11bEltbWVkaWF0ZVNob3VsZFNwZWN1bGF0ZUludGVnZXIoTm9kZSYgbXVsLCBOb2RlJiB2
YXJpYWJsZSwgTm9kZSYgaW1tZWRpYXRlKQorICAgIGJvb2wgbXVsSW1tZWRpYXRlU2hvdWxkU3Bl
Y3VsYXRlSW50ZWdlcihOb2RlKiBtdWwsIE5vZGUqIHZhcmlhYmxlLCBOb2RlKiBpbW1lZGlhdGUp
CiAgICAgewogICAgICAgICBBU1NFUlQoaW1tZWRpYXRlLmhhc0NvbnN0YW50KCkpOwogICAgICAg
ICAKQEAgLTc1NSw3ICs3MzIsNyBAQCBwcml2YXRlOgogICAgICAgICBpZiAoIWltbWVkaWF0ZVZh
bHVlLmlzSW50MzIoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgCi0gICAg
ICAgIGlmICghdmFyaWFibGUuc2hvdWxkU3BlY3VsYXRlSW50ZWdlckZvckFyaXRobWV0aWMoKSkK
KyAgICAgICAgaWYgKCF2YXJpYWJsZS0+c2hvdWxkU3BlY3VsYXRlSW50ZWdlckZvckFyaXRobWV0
aWMoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgCiAgICAgICAgIGludDMy
X3QgaW50SW1tZWRpYXRlID0gaW1tZWRpYXRlVmFsdWUuYXNJbnQzMigpOwpAQCAtNzY2LDE0ICs3
NDMsMTQgQEAgcHJpdmF0ZToKICAgICAgICAgLy8gY2FuU3BlY3VsYXRlSW50ZWdlcigpIGltcGxp
ZXMpLgogICAgICAgICBjb25zdCBpbnQzMl90IHR3b1RvVGhlMjIgPSAxIDw8IDIyOwogICAgICAg
ICBpZiAoaW50SW1tZWRpYXRlIDw9IC10d29Ub1RoZTIyIHx8IGludEltbWVkaWF0ZSA+PSB0d29U
b1RoZTIyKQotICAgICAgICAgICAgcmV0dXJuIG11bC5jYW5TcGVjdWxhdGVJbnRlZ2VyKCkgJiYg
IW5vZGVNYXlPdmVyZmxvdyhtdWwuYXJpdGhOb2RlRmxhZ3MoKSk7CisgICAgICAgICAgICByZXR1
cm4gbXVsLT5jYW5TcGVjdWxhdGVJbnRlZ2VyKCkgJiYgIW5vZGVNYXlPdmVyZmxvdyhtdWwtPmFy
aXRoTm9kZUZsYWdzKCkpOwogCi0gICAgICAgIHJldHVybiBtdWwuY2FuU3BlY3VsYXRlSW50ZWdl
cigpOworICAgICAgICByZXR1cm4gbXVsLT5jYW5TcGVjdWxhdGVJbnRlZ2VyKCk7CiAgICAgfQog
ICAgIAogICAgIC8vIFdoZW4gYSBub2RlJ3MgcmVmQ291bnQgZ29lcyBmcm9tIDAgdG8gMSwgaXQg
bXVzdCAobG9naWNhbGx5KSByZWN1cnNpdmVseSByZWYgYWxsIG9mIGl0cyBjaGlsZHJlbiwgYW5k
IHZpY2UgdmVyc2EuCi0gICAgdm9pZCByZWZDaGlsZHJlbihOb2RlSW5kZXgpOwotICAgIHZvaWQg
ZGVyZWZDaGlsZHJlbihOb2RlSW5kZXgpOworICAgIHZvaWQgcmVmQ2hpbGRyZW4oTm9kZSopOwor
ICAgIHZvaWQgZGVyZWZDaGlsZHJlbihOb2RlKik7CiB9OwogCiBjbGFzcyBHZXRCeXRlY29kZUJl
Z2luRm9yQmxvY2sgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuY3BwCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmNwcAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSw1NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZHTm9kZS5o
IgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJERkdOb2RlQWxsb2NhdG9yLmgi
CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKwordW5zaWduZWQgTm9kZTo6aW5k
ZXgoKSBjb25zdAoreworICAgIHJldHVybiBOb2RlQWxsb2NhdG9yOjphbGxvY2F0b3JPZih0aGlz
KS0+aW5kZXhPZih0aGlzKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCituYW1l
c3BhY2UgV1RGIHsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIE5vZGUq
IG5vZGUpCit7CisgICAgaWYgKCFub2RlKQorICAgICAgICBvdXQucHJpbnQoIi0iKTsKKyAgICBl
bHNlCisgICAgICAgIG91dC5wcmludCgiQCIsIG5vZGUtPmluZGV4KCkpOworfQorCit9IC8vIG5h
bWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR05vZGUuaAkocmV2aXNpb24gMTM5NTg2KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMiwgMjAxMyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTY4LDcg
KzY4LDcgQEAgc3RydWN0IE5ld0FycmF5QnVmZmVyRGF0YSB7CiAKIC8vIFRoaXMgdHlwZSB1c2Vk
IGluIHBhc3NpbmcgYW4gaW1tZWRpYXRlIGFyZ3VtZW50IHRvIE5vZGUgY29uc3RydWN0b3I7CiAv
LyBkaXN0aW5ndWlzaGVzIGFuIGltbWVkaWF0ZSB2YWx1ZSAodHlwaWNhbGx5IGFuIGluZGV4IGlu
dG8gYSBDb2RlQmxvY2sgZGF0YSBzdHJ1Y3R1cmUgLSAKLS8vIGEgY29uc3RhbnQgaW5kZXgsIGFy
Z3VtZW50LCBvciBpZGVudGlmaWVyKSBmcm9tIGEgTm9kZUluZGV4LgorLy8gYSBjb25zdGFudCBp
bmRleCwgYXJndW1lbnQsIG9yIGlkZW50aWZpZXIpIGZyb20gYSBOb2RlKi4KIHN0cnVjdCBPcElu
Zm8gewogICAgIGV4cGxpY2l0IE9wSW5mbyhpbnQzMl90IHZhbHVlKSA6IG1fdmFsdWUoc3RhdGlj
X2Nhc3Q8dWludHB0cl90Pih2YWx1ZSkpIHsgfQogICAgIGV4cGxpY2l0IE9wSW5mbyh1aW50MzJf
dCB2YWx1ZSkgOiBtX3ZhbHVlKHN0YXRpY19jYXN0PHVpbnRwdHJfdD4odmFsdWUpKSB7IH0KQEAg
LTg4LDcgKzg4LDcgQEAgc3RydWN0IE5vZGUgewogICAgIE5vZGUoKSB7IH0KICAgICAKICAgICAv
LyBDb25zdHJ1Y3QgYSBub2RlIHdpdGggdXAgdG8gMyBjaGlsZHJlbiwgbm8gaW1tZWRpYXRlIHZh
bHVlLgotICAgIE5vZGUoTm9kZVR5cGUgb3AsIENvZGVPcmlnaW4gY29kZU9yaWdpbiwgTm9kZUlu
ZGV4IGNoaWxkMSA9IE5vTm9kZSwgTm9kZUluZGV4IGNoaWxkMiA9IE5vTm9kZSwgTm9kZUluZGV4
IGNoaWxkMyA9IE5vTm9kZSkKKyAgICBOb2RlKE5vZGVUeXBlIG9wLCBDb2RlT3JpZ2luIGNvZGVP
cmlnaW4sIE5vZGUqIGNoaWxkMSA9IDAsIE5vZGUqIGNoaWxkMiA9IDAsIE5vZGUqIGNoaWxkMyA9
IDApCiAgICAgICAgIDogY29kZU9yaWdpbihjb2RlT3JpZ2luKQogICAgICAgICAsIGNoaWxkcmVu
KEFkamFjZW5jeUxpc3Q6OkZpeGVkLCBjaGlsZDEsIGNoaWxkMiwgY2hpbGQzKQogICAgICAgICAs
IG1fdmlydHVhbFJlZ2lzdGVyKEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIpCkBAIC0xMDAsNyArMTAw
LDcgQEAgc3RydWN0IE5vZGUgewogICAgIH0KIAogICAgIC8vIENvbnN0cnVjdCBhIG5vZGUgd2l0
aCB1cCB0byAzIGNoaWxkcmVuIGFuZCBhbiBpbW1lZGlhdGUgdmFsdWUuCi0gICAgTm9kZShOb2Rl
VHlwZSBvcCwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBPcEluZm8gaW1tLCBOb2RlSW5kZXggY2hp
bGQxID0gTm9Ob2RlLCBOb2RlSW5kZXggY2hpbGQyID0gTm9Ob2RlLCBOb2RlSW5kZXggY2hpbGQz
ID0gTm9Ob2RlKQorICAgIE5vZGUoTm9kZVR5cGUgb3AsIENvZGVPcmlnaW4gY29kZU9yaWdpbiwg
T3BJbmZvIGltbSwgTm9kZSogY2hpbGQxID0gMCwgTm9kZSogY2hpbGQyID0gMCwgTm9kZSogY2hp
bGQzID0gMCkKICAgICAgICAgOiBjb2RlT3JpZ2luKGNvZGVPcmlnaW4pCiAgICAgICAgICwgY2hp
bGRyZW4oQWRqYWNlbmN5TGlzdDo6Rml4ZWQsIGNoaWxkMSwgY2hpbGQyLCBjaGlsZDMpCiAgICAg
ICAgICwgbV92aXJ0dWFsUmVnaXN0ZXIoSW52YWxpZFZpcnR1YWxSZWdpc3RlcikKQEAgLTExMyw3
ICsxMTMsNyBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgfQogCiAgICAgLy8gQ29uc3RydWN0IGEgbm9k
ZSB3aXRoIHVwIHRvIDMgY2hpbGRyZW4gYW5kIHR3byBpbW1lZGlhdGUgdmFsdWVzLgotICAgIE5v
ZGUoTm9kZVR5cGUgb3AsIENvZGVPcmlnaW4gY29kZU9yaWdpbiwgT3BJbmZvIGltbTEsIE9wSW5m
byBpbW0yLCBOb2RlSW5kZXggY2hpbGQxID0gTm9Ob2RlLCBOb2RlSW5kZXggY2hpbGQyID0gTm9O
b2RlLCBOb2RlSW5kZXggY2hpbGQzID0gTm9Ob2RlKQorICAgIE5vZGUoTm9kZVR5cGUgb3AsIENv
ZGVPcmlnaW4gY29kZU9yaWdpbiwgT3BJbmZvIGltbTEsIE9wSW5mbyBpbW0yLCBOb2RlKiBjaGls
ZDEgPSAwLCBOb2RlKiBjaGlsZDIgPSAwLCBOb2RlKiBjaGlsZDMgPSAwKQogICAgICAgICA6IGNv
ZGVPcmlnaW4oY29kZU9yaWdpbikKICAgICAgICAgLCBjaGlsZHJlbihBZGphY2VuY3lMaXN0OjpG
aXhlZCwgY2hpbGQxLCBjaGlsZDIsIGNoaWxkMykKICAgICAgICAgLCBtX3ZpcnR1YWxSZWdpc3Rl
cihJbnZhbGlkVmlydHVhbFJlZ2lzdGVyKQpAQCAtMTQzLDYgKzE0Myw5IEBAIHN0cnVjdCBOb2Rl
IHsKICAgICBOb2RlVHlwZSBvcCgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PE5vZGVUeXBl
PihtX29wKTsgfQogICAgIE5vZGVGbGFncyBmbGFncygpIGNvbnN0IHsgcmV0dXJuIG1fZmxhZ3M7
IH0KICAgICAKKyAgICAvLyBUaGlzIGlzIG5vdCBhIGZhc3QgbWV0aG9kLgorICAgIHVuc2lnbmVk
IGluZGV4KCkgY29uc3Q7CisgICAgCiAgICAgdm9pZCBzZXRPcChOb2RlVHlwZSBvcCkKICAgICB7
CiAgICAgICAgIG1fb3AgPSBvcDsKQEAgLTI3MCw3ICsyNzMsNyBAQCBzdHJ1Y3QgTm9kZSB7CiAg
ICAgICAgIGNvbnZlcnRUb1N0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50KHN0cnVjdHVyZVNl
dCgpLnNpbmdsZXRvblN0cnVjdHVyZSgpKTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBjb252ZXJ0
VG9HZXRCeU9mZnNldCh1bnNpZ25lZCBzdG9yYWdlQWNjZXNzRGF0YUluZGV4LCBOb2RlSW5kZXgg
c3RvcmFnZSkKKyAgICB2b2lkIGNvbnZlcnRUb0dldEJ5T2Zmc2V0KHVuc2lnbmVkIHN0b3JhZ2VB
Y2Nlc3NEYXRhSW5kZXgsIE5vZGUqIHN0b3JhZ2UpCiAgICAgewogICAgICAgICBBU1NFUlQobV9v
cCA9PSBHZXRCeUlkIHx8IG1fb3AgPT0gR2V0QnlJZEZsdXNoKTsKICAgICAgICAgbV9vcEluZm8g
PSBzdG9yYWdlQWNjZXNzRGF0YUluZGV4OwpAQCAtMjc5LDcgKzI4Miw3IEBAIHN0cnVjdCBOb2Rl
IHsKICAgICAgICAgbV9mbGFncyAmPSB+Tm9kZUNsb2JiZXJzV29ybGQ7CiAgICAgfQogICAgIAot
ICAgIHZvaWQgY29udmVydFRvUHV0QnlPZmZzZXQodW5zaWduZWQgc3RvcmFnZUFjY2Vzc0RhdGFJ
bmRleCwgTm9kZUluZGV4IHN0b3JhZ2UpCisgICAgdm9pZCBjb252ZXJ0VG9QdXRCeU9mZnNldCh1
bnNpZ25lZCBzdG9yYWdlQWNjZXNzRGF0YUluZGV4LCBOb2RlKiBzdG9yYWdlKQogICAgIHsKICAg
ICAgICAgQVNTRVJUKG1fb3AgPT0gUHV0QnlJZCB8fCBtX29wID09IFB1dEJ5SWREaXJlY3QpOwog
ICAgICAgICBtX29wSW5mbyA9IHN0b3JhZ2VBY2Nlc3NEYXRhSW5kZXg7CkBAIC0xMTc1LDYgKzEx
NzgsOCBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAgIG91dC5wcmludGYoIiwgQCV1IiwgY2hpbGQz
KCkuaW5kZXgoKSk7CiAgICAgfQogICAgIAorICAgIC8vIE5CLiBUaGlzIGNsYXNzIG11c3QgaGF2
ZSBhIHRyaXZpYWwgZGVzdHJ1Y3Rvci4KKyAgICAKICAgICAvLyBVc2VkIHRvIGxvb2sgdXAgZXhj
ZXB0aW9uIGhhbmRsaW5nIGluZm9ybWF0aW9uIChjdXJyZW50bHkgaW1wbGVtZW50ZWQgYXMgYSBi
eXRlY29kZSBpbmRleCkuCiAgICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2luOwogICAgIC8vIFJlZmVy
ZW5jZXMgdG8gdXAgdG8gMyBjaGlsZHJlbiwgb3IgbGlua3MgdG8gYSB2YXJpYWJsZSBsZW5ndGgg
c2V0IG9mIGNoaWxkcmVuLgpAQCAtMTE5NywxMCArMTIwMiwxNiBAQCBwcml2YXRlOgogcHVibGlj
OgogICAgIC8vIEZpZWxkcyB1c2VkIGJ5IHZhcmlvdXMgYW5hbHlzZXMuCiAgICAgQWJzdHJhY3RW
YWx1ZSB2YWx1ZTsKLSAgICBOb2RlSW5kZXggcmVwbGFjZW1lbnQ7CisgICAgTm9kZSogcmVwbGFj
ZW1lbnQ7CiB9OwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCiAKK25hbWVzcGFjZSBXVEYg
eworCit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mLCBOb2RlKik7CisKK30gLy8gbmFt
ZXNwYWNlIFdURgorCiAjZW5kaWYKICNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdOb2RlQWxsb2NhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdOb2RlQWxsb2NhdG9yLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR05vZGVBbGxvY2F0b3IuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1
MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZu
ZGVmIERGR05vZGVBbGxvY2F0b3JfaAorI2RlZmluZSBERkdOb2RlQWxsb2NhdG9yX2gKKworI2lu
Y2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRl
ICJERkdBbGxvY2F0b3IuaCIKKyNpbmNsdWRlICJERkdOb2RlLmgiCisKK25hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgREZHIHsKKwordHlwZWRlZiBBbGxvY2F0b3I8Tm9kZSwgNDA5NT4gTm9kZUFs
bG9jYXRvcjsKKworaW5saW5lIHZvaWQqIG9wZXJhdG9yIG5ldyAoc2l6ZV90IHNpemUsIE5vZGVB
bGxvY2F0b3ImIGFsbG9jYXRvcikKK3sKKyAgICBBU1NFUlQoc2l6ZSA9PSBzaXplb2YoTm9kZSkp
OworICAgIHJldHVybiBhbGxvY2F0b3IuYWxsb2NhdGUoKTsKK30KKworfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdO
b2RlQWxsb2NhdG9yX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVk
aWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAJKHJldmlzaW9uIDEz
OTU4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0
aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NSw3NSArODUsNzMgQEAgcHVibGljOgog
cHJpdmF0ZToKICAgICBib29sIHNldFByZWRpY3Rpb24oU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlv
bikKICAgICB7Ci0gICAgICAgIEFTU0VSVChtX2dyYXBoW21fY29tcGlsZUluZGV4XS5oYXNSZXN1
bHQoKSk7CisgICAgICAgIEFTU0VSVChtX2N1cnJlbnROb2RlLT5oYXNSZXN1bHQoKSk7CiAgICAg
ICAgIAogICAgICAgICAvLyBzZXRQcmVkaWN0aW9uKCkgaXMgdXNlZCB3aGVuIHdlIGtub3cgdGhh
dCB0aGVyZSBpcyBubyB3YXkgdGhhdCB3ZSBjYW4gY2hhbmdlCiAgICAgICAgIC8vIG91ciBtaW5k
cyBhYm91dCB3aGF0IHRoZSBwcmVkaWN0aW9uIGlzIGdvaW5nIHRvIGJlLiBUaGVyZSBpcyBubyBz
ZW1hbnRpYwogICAgICAgICAvLyBkaWZmZXJlbmNlIGJldHdlZW4gc2V0UHJlZGljdGlvbigpIGFu
ZCBtZXJnZVNwZWN1bGF0aW9uKCkgb3RoZXIgdGhhbiB0aGUKICAgICAgICAgLy8gaW5jcmVhc2Vk
IGNoZWNraW5nIHRvIHZhbGlkYXRlIHRoaXMgcHJvcGVydHkuCi0gICAgICAgIEFTU0VSVChtX2dy
YXBoW21fY29tcGlsZUluZGV4XS5wcmVkaWN0aW9uKCkgPT0gU3BlY05vbmUgfHwgbV9ncmFwaFtt
X2NvbXBpbGVJbmRleF0ucHJlZGljdGlvbigpID09IHByZWRpY3Rpb24pOworICAgICAgICBBU1NF
UlQobV9jdXJyZW50Tm9kZS0+cHJlZGljdGlvbigpID09IFNwZWNOb25lIHx8IG1fY3VycmVudE5v
ZGUtPnByZWRpY3Rpb24oKSA9PSBwcmVkaWN0aW9uKTsKICAgICAgICAgCi0gICAgICAgIHJldHVy
biBtX2dyYXBoW21fY29tcGlsZUluZGV4XS5wcmVkaWN0KHByZWRpY3Rpb24pOworICAgICAgICBy
ZXR1cm4gbV9jdXJyZW50Tm9kZS0+cHJlZGljdChwcmVkaWN0aW9uKTsKICAgICB9CiAgICAgCiAg
ICAgYm9vbCBtZXJnZVByZWRpY3Rpb24oU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbikKICAgICB7
Ci0gICAgICAgIEFTU0VSVChtX2dyYXBoW21fY29tcGlsZUluZGV4XS5oYXNSZXN1bHQoKSk7Cisg
ICAgICAgIEFTU0VSVChtX2N1cnJlbnROb2RlLT5oYXNSZXN1bHQoKSk7CiAgICAgICAgIAotICAg
ICAgICByZXR1cm4gbV9ncmFwaFttX2NvbXBpbGVJbmRleF0ucHJlZGljdChwcmVkaWN0aW9uKTsK
KyAgICAgICAgcmV0dXJuIG1fY3VycmVudE5vZGUtPnByZWRpY3QocHJlZGljdGlvbik7CiAgICAg
fQogICAgIAotICAgIGJvb2wgaXNOb3ROZWdaZXJvKE5vZGVJbmRleCBub2RlSW5kZXgpCisgICAg
Ym9vbCBpc05vdE5lZ1plcm8oTm9kZSogbm9kZSkKICAgICB7Ci0gICAgICAgIGlmICghbV9ncmFw
aC5pc051bWJlckNvbnN0YW50KG5vZGVJbmRleCkpCisgICAgICAgIGlmICghbV9ncmFwaC5pc051
bWJlckNvbnN0YW50KG5vZGUpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBk
b3VibGUgdmFsdWUgPSBtX2dyYXBoLnZhbHVlT2ZOdW1iZXJDb25zdGFudChub2RlSW5kZXgpOwor
ICAgICAgICBkb3VibGUgdmFsdWUgPSBtX2dyYXBoLnZhbHVlT2ZOdW1iZXJDb25zdGFudChub2Rl
KTsKICAgICAgICAgcmV0dXJuICF2YWx1ZSAmJiAxLjAgLyB2YWx1ZSA8IDAuMDsKICAgICB9CiAg
ICAgCi0gICAgYm9vbCBpc05vdFplcm8oTm9kZUluZGV4IG5vZGVJbmRleCkKKyAgICBib29sIGlz
Tm90WmVybyhOb2RlKiBub2RlKQogICAgIHsKLSAgICAgICAgaWYgKCFtX2dyYXBoLmlzTnVtYmVy
Q29uc3RhbnQobm9kZUluZGV4KSkKKyAgICAgICAgaWYgKCFtX2dyYXBoLmlzTnVtYmVyQ29uc3Rh
bnQobm9kZSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIHJldHVybiAhIW1f
Z3JhcGgudmFsdWVPZk51bWJlckNvbnN0YW50KG5vZGVJbmRleCk7CisgICAgICAgIHJldHVybiAh
IW1fZ3JhcGgudmFsdWVPZk51bWJlckNvbnN0YW50KG5vZGUpOwogICAgIH0KICAgICAKLSAgICBi
b29sIGlzV2l0aGluUG93ZXJPZlR3b0ZvckNvbnN0YW50KE5vZGUmIG5vZGUsIGludCBwb3dlcikK
KyAgICBib29sIGlzV2l0aGluUG93ZXJPZlR3b0ZvckNvbnN0YW50KE5vZGUqIG5vZGUsIGludCBw
b3dlcikKICAgICB7Ci0gICAgICAgIEpTVmFsdWUgaW1tZWRpYXRlVmFsdWUgPSBub2RlLnZhbHVl
T2ZKU0NvbnN0YW50KGNvZGVCbG9jaygpKTsKKyAgICAgICAgSlNWYWx1ZSBpbW1lZGlhdGVWYWx1
ZSA9IG5vZGUtPnZhbHVlT2ZKU0NvbnN0YW50KGNvZGVCbG9jaygpKTsKICAgICAgICAgaWYgKCFp
bW1lZGlhdGVWYWx1ZS5pc0ludDMyKCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
ICAgIGludDMyX3QgaW50SW1tZWRpYXRlID0gaW1tZWRpYXRlVmFsdWUuYXNJbnQzMigpOwogICAg
ICAgICByZXR1cm4gaW50SW1tZWRpYXRlID4gLSgxIDw8IHBvd2VyKSAmJiBpbnRJbW1lZGlhdGUg
PCAoMSA8PCBwb3dlcik7CiAgICAgfQogICAgIAotICAgIGJvb2wgaXNXaXRoaW5Qb3dlck9mVHdv
Tm9uUmVjdXJzaXZlKE5vZGVJbmRleCBub2RlSW5kZXgsIGludCBwb3dlcikKKyAgICBib29sIGlz
V2l0aGluUG93ZXJPZlR3b05vblJlY3Vyc2l2ZShOb2RlKiBub2RlLCBpbnQgcG93ZXIpCiAgICAg
ewotICAgICAgICBOb2RlJiBub2RlID0gbV9ncmFwaFtub2RlSW5kZXhdOwotICAgICAgICBpZiAo
bm9kZS5vcCgpICE9IEpTQ29uc3RhbnQpCisgICAgICAgIGlmIChub2RlLT5vcCgpICE9IEpTQ29u
c3RhbnQpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIHJldHVybiBpc1dpdGhp
blBvd2VyT2ZUd29Gb3JDb25zdGFudChub2RlLCBwb3dlcik7CiAgICAgfQogICAgIAotICAgIGJv
b2wgaXNXaXRoaW5Qb3dlck9mVHdvKE5vZGVJbmRleCBub2RlSW5kZXgsIGludCBwb3dlcikKKyAg
ICBib29sIGlzV2l0aGluUG93ZXJPZlR3byhOb2RlKiBub2RlLCBpbnQgcG93ZXIpCiAgICAgewot
ICAgICAgICBOb2RlJiBub2RlID0gbV9ncmFwaFtub2RlSW5kZXhdOwotICAgICAgICBzd2l0Y2gg
KG5vZGUub3AoKSkgeworICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKICAgICAgICAgY2Fz
ZSBKU0NvbnN0YW50OiB7CiAgICAgICAgICAgICByZXR1cm4gaXNXaXRoaW5Qb3dlck9mVHdvRm9y
Q29uc3RhbnQobm9kZSwgcG93ZXIpOwogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAg
Y2FzZSBCaXRBbmQ6IHsKLSAgICAgICAgICAgIHJldHVybiBpc1dpdGhpblBvd2VyT2ZUd29Ob25S
ZWN1cnNpdmUobm9kZS5jaGlsZDEoKS5pbmRleCgpLCBwb3dlcikKLSAgICAgICAgICAgICAgICB8
fCBpc1dpdGhpblBvd2VyT2ZUd29Ob25SZWN1cnNpdmUobm9kZS5jaGlsZDIoKS5pbmRleCgpLCBw
b3dlcik7CisgICAgICAgICAgICByZXR1cm4gaXNXaXRoaW5Qb3dlck9mVHdvTm9uUmVjdXJzaXZl
KG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgcG93ZXIpCisgICAgICAgICAgICAgICAgfHwgaXNXaXRo
aW5Qb3dlck9mVHdvTm9uUmVjdXJzaXZlKG5vZGUtPmNoaWxkMigpLm5vZGUoKSwgcG93ZXIpOwog
ICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBCaXRSU2hpZnQ6CiAgICAgICAg
IGNhc2UgQml0VVJTaGlmdDogewotICAgICAgICAgICAgTm9kZSYgc2hpZnRBbW91bnQgPSBtX2dy
YXBoW25vZGUuY2hpbGQyKCldOwotICAgICAgICAgICAgaWYgKHNoaWZ0QW1vdW50Lm9wKCkgIT0g
SlNDb25zdGFudCkKKyAgICAgICAgICAgIE5vZGUqIHNoaWZ0QW1vdW50ID0gbm9kZS0+Y2hpbGQy
KCkubm9kZSgpOworICAgICAgICAgICAgaWYgKHNoaWZ0QW1vdW50LT5vcCgpICE9IEpTQ29uc3Rh
bnQpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgSlNWYWx1ZSBp
bW1lZGlhdGVWYWx1ZSA9IHNoaWZ0QW1vdW50LnZhbHVlT2ZKU0NvbnN0YW50KGNvZGVCbG9jaygp
KTsKKyAgICAgICAgICAgIEpTVmFsdWUgaW1tZWRpYXRlVmFsdWUgPSBzaGlmdEFtb3VudC0+dmFs
dWVPZkpTQ29uc3RhbnQoY29kZUJsb2NrKCkpOwogICAgICAgICAgICAgaWYgKCFpbW1lZGlhdGVW
YWx1ZS5pc0ludDMyKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAg
ICAgcmV0dXJuIGltbWVkaWF0ZVZhbHVlID4gMzIgLSBwb3dlcjsKQEAgLTE3OCwxNiArMTc2LDE2
IEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiBzcGVjdWxhdGVkRG91YmxlVHlwZUZvclByZWRp
Y3Rpb24obWVyZ2VTcGVjdWxhdGlvbnMobGVmdCwgcmlnaHQpKTsKICAgICB9CiAKLSAgICB2b2lk
IHByb3BhZ2F0ZShOb2RlJiBub2RlKQorICAgIHZvaWQgcHJvcGFnYXRlKE5vZGUqIG5vZGUpCiAg
ICAgewotICAgICAgICBpZiAoIW5vZGUuc2hvdWxkR2VuZXJhdGUoKSkKKyAgICAgICAgaWYgKCFu
b2RlLT5zaG91bGRHZW5lcmF0ZSgpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAKLSAg
ICAgICAgTm9kZVR5cGUgb3AgPSBub2RlLm9wKCk7Ci0gICAgICAgIE5vZGVGbGFncyBmbGFncyA9
IG5vZGUuZmxhZ3MoKSAmIE5vZGVCYWNrUHJvcE1hc2s7CisgICAgICAgIE5vZGVUeXBlIG9wID0g
bm9kZS0+b3AoKTsKKyAgICAgICAgTm9kZUZsYWdzIGZsYWdzID0gbm9kZS0+ZmxhZ3MoKSAmIE5v
ZGVCYWNrUHJvcE1hc2s7CiAKICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJP
U0UpCi0gICAgICAgIGRhdGFMb2dGKCIgICAlcyBAJXU6ICVzICIsIEdyYXBoOjpvcE5hbWUob3Ap
LCBtX2NvbXBpbGVJbmRleCwgbm9kZUZsYWdzQXNTdHJpbmcoZmxhZ3MpKTsKKyAgICAgICAgZGF0
YUxvZygiICAgIiwgR3JhcGg6Om9wTmFtZShvcCksICIgIiwgbV9jdXJyZW50Tm9kZSwgIjogIiwg
bm9kZUZsYWdzQXNTdHJpbmcoZmxhZ3MpLCAiICIpOwogI2VuZGlmCiAgICAgICAgIAogICAgICAg
ICBib29sIGNoYW5nZWQgPSBmYWxzZTsKQEAgLTE5NSwxMiArMTkzLDEyIEBAIHByaXZhdGU6CiAg
ICAgICAgIHN3aXRjaCAob3ApIHsKICAgICAgICAgY2FzZSBKU0NvbnN0YW50OgogICAgICAgICBj
YXNlIFdlYWtKU0NvbnN0YW50OiB7Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IHNldFByZWRpY3Rp
b24oc3BlY3VsYXRpb25Gcm9tVmFsdWUobV9ncmFwaC52YWx1ZU9mSlNDb25zdGFudChtX2NvbXBp
bGVJbmRleCkpKTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gc2V0UHJlZGljdGlvbihzcGVjdWxh
dGlvbkZyb21WYWx1ZShtX2dyYXBoLnZhbHVlT2ZKU0NvbnN0YW50KG5vZGUpKSk7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgR2V0TG9j
YWw6IHsKLSAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRh
ID0gbm9kZS52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKKyAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNz
RGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CiAg
ICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uID0gdmFyaWFibGVBY2Nlc3NEYXRh
LT5wcmVkaWN0aW9uKCk7CiAgICAgICAgICAgICBpZiAocHJlZGljdGlvbikKICAgICAgICAgICAg
ICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbihwcmVkaWN0aW9uKTsKQEAgLTIxMCwyMSAr
MjA4LDIxIEBAIHByaXZhdGU6CiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBjYXNl
IFNldExvY2FsOiB7Ci0gICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNj
ZXNzRGF0YSA9IG5vZGUudmFyaWFibGVBY2Nlc3NEYXRhKCk7Ci0gICAgICAgICAgICBjaGFuZ2Vk
IHw9IHZhcmlhYmxlQWNjZXNzRGF0YS0+cHJlZGljdChtX2dyYXBoW25vZGUuY2hpbGQxKCldLnBy
ZWRpY3Rpb24oKSk7CisgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNj
ZXNzRGF0YSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOworICAgICAgICAgICAgY2hhbmdl
ZCB8PSB2YXJpYWJsZUFjY2Vzc0RhdGEtPnByZWRpY3Qobm9kZS0+Y2hpbGQxKCktPnByZWRpY3Rp
b24oKSk7CiAKICAgICAgICAgICAgIC8vIEFzc3VtZSBjb25zZXJ2YXRpdmVseSB0aGF0IGEgU2V0
TG9jYWwgaW1wbGllcyB0aGF0IHRoZSB2YWx1ZSBtYXkgZmxvdyB0aHJvdWdoIGEgbG9vcCwKICAg
ICAgICAgICAgIC8vIGFuZCBzbyB3ZSB3b3VsZCBoYXZlIG92ZXJmbG93IGxlYWRpbmcgdG8gdGhl
IHByb2dyYW0gIm9ic2VydmluZyIgbnVtYmVycyBldmVuIGlmIGFsbAogICAgICAgICAgICAgLy8g
dXNlcnMgb2YgdGhlIHZhbHVlIGFyZSBkb2luZyB0b0ludDMyLiBJdCBtaWdodCBiZSB3b3J0aHdo
aWxlIHRvIHJldmlzaXQgdGhpcyBhdCBzb21lCiAgICAgICAgICAgICAvLyBwb2ludCBhbmQgYWN0
dWFsbHkgY2hlY2sgaWYgdGhlIGRhdGEgZmxvdyBpbnZvbHZlcyBsb29wcywgYnV0IHJpZ2h0IG5v
dyBJIGRvbid0IHRoaW5rCiAgICAgICAgICAgICAvLyB3ZSBoYXZlIGV2aWRlbmNlIHRoYXQgdGhp
cyB3b3VsZCBiZSBiZW5lZmljaWFsIGZvciBiZW5jaG1hcmtzLgotICAgICAgICAgICAgY2hhbmdl
ZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLm1lcmdlRmxhZ3ModmFyaWFibGVBY2Nlc3NEYXRh
LT5mbGFncygpIHwgTm9kZVVzZWRBc051bWJlcik7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG5v
ZGUtPmNoaWxkMSgpLT5tZXJnZUZsYWdzKHZhcmlhYmxlQWNjZXNzRGF0YS0+ZmxhZ3MoKSB8IE5v
ZGVVc2VkQXNOdW1iZXIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAg
ICAgIAogICAgICAgICBjYXNlIEZsdXNoOiB7CiAgICAgICAgICAgICAvLyBNYWtlIHN1cmUgdGhh
dCB0aGUgYW5hbHlzaXMga25vd3MgdGhhdCBmbHVzaGVkIGxvY2FscyBlc2NhcGUuCi0gICAgICAg
ICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9IG5vZGUudmFyaWFi
bGVBY2Nlc3NEYXRhKCk7CisgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxl
QWNjZXNzRGF0YSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOwogICAgICAgICAgICAgY2hh
bmdlZCB8PSB2YXJpYWJsZUFjY2Vzc0RhdGEtPm1lcmdlRmxhZ3MoTm9kZVVzZWRBc1ZhbHVlKTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkBAIC0yMzgsOCArMjM2LDggQEAgcHJpdmF0
ZToKICAgICAgICAgICAgIGNoYW5nZWQgfD0gc2V0UHJlZGljdGlvbihTcGVjSW50MzIpOwogICAg
ICAgICAgICAgZmxhZ3MgfD0gTm9kZVVzZWRBc0ludCB8IE5vZGVVc2VkQXNJbnRMb2NhbGx5Owog
ICAgICAgICAgICAgZmxhZ3MgJj0gfihOb2RlVXNlZEFzTnVtYmVyIHwgTm9kZU5lZWRzTmVnWmVy
byB8IE5vZGVVc2VkQXNPdGhlcik7Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbm9k
ZS5jaGlsZDEoKV0ubWVyZ2VGbGFncyhmbGFncyk7Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IG1f
Z3JhcGhbbm9kZS5jaGlsZDIoKV0ubWVyZ2VGbGFncyhmbGFncyk7CisgICAgICAgICAgICBjaGFu
Z2VkIHw9IG5vZGUtPmNoaWxkMSgpLT5tZXJnZUZsYWdzKGZsYWdzKTsKKyAgICAgICAgICAgIGNo
YW5nZWQgfD0gbm9kZS0+Y2hpbGQyKCktPm1lcmdlRmxhZ3MoZmxhZ3MpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIApAQCAtMjQ3LDUwICsyNDUsNTAgQEAgcHJp
dmF0ZToKICAgICAgICAgICAgIGNoYW5nZWQgfD0gc2V0UHJlZGljdGlvbihTcGVjSW50MzIpOwog
ICAgICAgICAgICAgZmxhZ3MgfD0gTm9kZVVzZWRBc0ludCB8IE5vZGVVc2VkQXNJbnRMb2NhbGx5
OwogICAgICAgICAgICAgZmxhZ3MgJj0gfihOb2RlVXNlZEFzTnVtYmVyIHwgTm9kZU5lZWRzTmVn
WmVybyB8IE5vZGVVc2VkQXNPdGhlcik7Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhb
bm9kZS5jaGlsZDEoKV0ubWVyZ2VGbGFncyhmbGFncyk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9
IG5vZGUtPmNoaWxkMSgpLT5tZXJnZUZsYWdzKGZsYWdzKTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBBcnJheVBvcDogewotICAgICAg
ICAgICAgY2hhbmdlZCB8PSBtZXJnZVByZWRpY3Rpb24obm9kZS5nZXRIZWFwUHJlZGljdGlvbigp
KTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKG5vZGUtPmdldEhlYXBQ
cmVkaWN0aW9uKCkpOwogICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZURlZmF1bHRGbGFncyhu
b2RlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBBcnJh
eVB1c2g6IHsKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKG5vZGUuZ2V0
SGVhcFByZWRpY3Rpb24oKSk7Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbm9kZS5j
aGlsZDEoKV0ubWVyZ2VGbGFncyhOb2RlVXNlZEFzVmFsdWUpOwotICAgICAgICAgICAgY2hhbmdl
ZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQyKCldLm1lcmdlRmxhZ3MoTm9kZVVzZWRBc1ZhbHVlKTsK
KyAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKG5vZGUtPmdldEhlYXBQcmVk
aWN0aW9uKCkpOworICAgICAgICAgICAgY2hhbmdlZCB8PSBub2RlLT5jaGlsZDEoKS0+bWVyZ2VG
bGFncyhOb2RlVXNlZEFzVmFsdWUpOworICAgICAgICAgICAgY2hhbmdlZCB8PSBub2RlLT5jaGls
ZDIoKS0+bWVyZ2VGbGFncyhOb2RlVXNlZEFzVmFsdWUpOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIH0KIAogICAgICAgICBjYXNlIFJlZ0V4cEV4ZWM6CiAgICAgICAgIGNhc2UgUmVnRXhw
VGVzdDogewotICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVByZWRpY3Rpb24obm9kZS5nZXRI
ZWFwUHJlZGljdGlvbigpKTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9u
KG5vZGUtPmdldEhlYXBQcmVkaWN0aW9uKCkpOwogICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJn
ZURlZmF1bHRGbGFncyhub2RlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKICAg
ICAgICAgY2FzZSBTdHJpbmdDaGFyQ29kZUF0OiB7CiAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1l
cmdlUHJlZGljdGlvbihTcGVjSW50MzIpOwotICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBo
W25vZGUuY2hpbGQxKCldLm1lcmdlRmxhZ3MoTm9kZVVzZWRBc1ZhbHVlKTsKLSAgICAgICAgICAg
IGNoYW5nZWQgfD0gbV9ncmFwaFtub2RlLmNoaWxkMigpXS5tZXJnZUZsYWdzKE5vZGVVc2VkQXNO
dW1iZXIgfCBOb2RlVXNlZEFzT3RoZXIgfCBOb2RlVXNlZEFzSW50IHwgTm9kZVVzZWRBc0ludExv
Y2FsbHkpOworICAgICAgICAgICAgY2hhbmdlZCB8PSBub2RlLT5jaGlsZDEoKS0+bWVyZ2VGbGFn
cyhOb2RlVXNlZEFzVmFsdWUpOworICAgICAgICAgICAgY2hhbmdlZCB8PSBub2RlLT5jaGlsZDIo
KS0+bWVyZ2VGbGFncyhOb2RlVXNlZEFzTnVtYmVyIHwgTm9kZVVzZWRBc090aGVyIHwgTm9kZVVz
ZWRBc0ludCB8IE5vZGVVc2VkQXNJbnRMb2NhbGx5KTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICB9CiAKICAgICAgICAgY2FzZSBVSW50MzJUb051bWJlcjogewotICAgICAgICAgICAgaWYg
KG5vZGVDYW5TcGVjdWxhdGVJbnRlZ2VyKG5vZGUuYXJpdGhOb2RlRmxhZ3MoKSkpCisgICAgICAg
ICAgICBpZiAobm9kZUNhblNwZWN1bGF0ZUludGVnZXIobm9kZS0+YXJpdGhOb2RlRmxhZ3MoKSkp
CiAgICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVByZWRpY3Rpb24oU3BlY0ludDMyKTsK
ICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGlj
dGlvbihTcGVjTnVtYmVyKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgY2hhbmdlZCB8PSBt
X2dyYXBoW25vZGUuY2hpbGQxKCldLm1lcmdlRmxhZ3MoZmxhZ3MpOworICAgICAgICAgICAgY2hh
bmdlZCB8PSBub2RlLT5jaGlsZDEoKS0+bWVyZ2VGbGFncyhmbGFncyk7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQogCiAgICAgICAgIGNhc2UgVmFsdWVBZGQ6IHsKLSAgICAgICAgICAg
IFNwZWN1bGF0ZWRUeXBlIGxlZnQgPSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLnByZWRpY3Rpb24o
KTsKLSAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHJpZ2h0ID0gbV9ncmFwaFtub2RlLmNoaWxk
MigpXS5wcmVkaWN0aW9uKCk7CisgICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSBsZWZ0ID0gbm9k
ZS0+Y2hpbGQxKCktPnByZWRpY3Rpb24oKTsKKyAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHJp
Z2h0ID0gbm9kZS0+Y2hpbGQyKCktPnByZWRpY3Rpb24oKTsKICAgICAgICAgICAgIAogICAgICAg
ICAgICAgQWRkU3BlY3VsYXRpb25Nb2RlIG1vZGUgPSBEb250U3BlY3VsYXRlSW50ZWdlcjsKICAg
ICAgICAgICAgIApAQCAtMzA3LDIyICszMDUsMjIgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAg
ICAgICAgY2hhbmdlZCB8PSBtZXJnZVByZWRpY3Rpb24oU3BlY1N0cmluZyB8IFNwZWNJbnQzMiB8
IFNwZWNEb3VibGUpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgICAgICBp
ZiAoaXNOb3ROZWdaZXJvKG5vZGUuY2hpbGQxKCkuaW5kZXgoKSkgfHwgaXNOb3ROZWdaZXJvKG5v
ZGUuY2hpbGQyKCkuaW5kZXgoKSkpCisgICAgICAgICAgICBpZiAoaXNOb3ROZWdaZXJvKG5vZGUt
PmNoaWxkMSgpLm5vZGUoKSkgfHwgaXNOb3ROZWdaZXJvKG5vZGUtPmNoaWxkMigpLm5vZGUoKSkp
CiAgICAgICAgICAgICAgICAgZmxhZ3MgJj0gfk5vZGVOZWVkc05lZ1plcm87Ci0gICAgICAgICAg
ICBpZiAobV9ncmFwaFtub2RlLmNoaWxkMSgpXS5oYXNOdW1iZXJSZXN1bHQoKSB8fCBtX2dyYXBo
W25vZGUuY2hpbGQyKCldLmhhc051bWJlclJlc3VsdCgpKQorICAgICAgICAgICAgaWYgKG5vZGUt
PmNoaWxkMSgpLT5oYXNOdW1iZXJSZXN1bHQoKSB8fCBub2RlLT5jaGlsZDIoKS0+aGFzTnVtYmVy
UmVzdWx0KCkpCiAgICAgICAgICAgICAgICAgZmxhZ3MgJj0gfk5vZGVVc2VkQXNPdGhlcjsKICAg
ICAgICAgICAgIAogICAgICAgICAgICAgaWYgKG1vZGUgIT0gU3BlY3VsYXRlSW50ZWdlcikKICAg
ICAgICAgICAgICAgICBmbGFncyB8PSBOb2RlVXNlZEFzTnVtYmVyOwogICAgICAgICAgICAgCi0g
ICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ubWVyZ2VGbGFncyhm
bGFncyk7Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbm9kZS5jaGlsZDIoKV0ubWVy
Z2VGbGFncyhmbGFncyk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG5vZGUtPmNoaWxkMSgpLT5t
ZXJnZUZsYWdzKGZsYWdzKTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbm9kZS0+Y2hpbGQyKCkt
Pm1lcmdlRmxhZ3MoZmxhZ3MpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAg
ICAgICAgIAogICAgICAgICBjYXNlIEFyaXRoQWRkOiB7Ci0gICAgICAgICAgICBTcGVjdWxhdGVk
VHlwZSBsZWZ0ID0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5wcmVkaWN0aW9uKCk7Ci0gICAgICAg
ICAgICBTcGVjdWxhdGVkVHlwZSByaWdodCA9IG1fZ3JhcGhbbm9kZS5jaGlsZDIoKV0ucHJlZGlj
dGlvbigpOworICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgbGVmdCA9IG5vZGUtPmNoaWxkMSgp
LT5wcmVkaWN0aW9uKCk7CisgICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSByaWdodCA9IG5vZGUt
PmNoaWxkMigpLT5wcmVkaWN0aW9uKCk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIEFkZFNw
ZWN1bGF0aW9uTW9kZSBtb2RlID0gRG9udFNwZWN1bGF0ZUludGVnZXI7CiAgICAgICAgICAgICAK
QEAgLTMzMywyMSArMzMxLDIxIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgIGNoYW5n
ZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKHNwZWN1bGF0ZWREb3VibGVUeXBlRm9yUHJlZGljdGlvbnMo
bGVmdCwgcmlnaHQpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAgICAgICAg
aWYgKGlzTm90TmVnWmVybyhub2RlLmNoaWxkMSgpLmluZGV4KCkpIHx8IGlzTm90TmVnWmVybyhu
b2RlLmNoaWxkMigpLmluZGV4KCkpKQorICAgICAgICAgICAgaWYgKGlzTm90TmVnWmVybyhub2Rl
LT5jaGlsZDEoKS5ub2RlKCkpIHx8IGlzTm90TmVnWmVybyhub2RlLT5jaGlsZDIoKS5ub2RlKCkp
KQogICAgICAgICAgICAgICAgIGZsYWdzICY9IH5Ob2RlTmVlZHNOZWdaZXJvOwogICAgICAgICAg
ICAgZmxhZ3MgJj0gfk5vZGVVc2VkQXNPdGhlcjsKICAgICAgICAgICAgIAogICAgICAgICAgICAg
aWYgKG1vZGUgIT0gU3BlY3VsYXRlSW50ZWdlcikKICAgICAgICAgICAgICAgICBmbGFncyB8PSBO
b2RlVXNlZEFzTnVtYmVyOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBjaGFuZ2VkIHw9IG1f
Z3JhcGhbbm9kZS5jaGlsZDEoKV0ubWVyZ2VGbGFncyhmbGFncyk7Ci0gICAgICAgICAgICBjaGFu
Z2VkIHw9IG1fZ3JhcGhbbm9kZS5jaGlsZDIoKV0ubWVyZ2VGbGFncyhmbGFncyk7CisgICAgICAg
ICAgICBjaGFuZ2VkIHw9IG5vZGUtPmNoaWxkMSgpLT5tZXJnZUZsYWdzKGZsYWdzKTsKKyAgICAg
ICAgICAgIGNoYW5nZWQgfD0gbm9kZS0+Y2hpbGQyKCktPm1lcmdlRmxhZ3MoZmxhZ3MpOwogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBjYXNlIEFy
aXRoU3ViOiB7Ci0gICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSBsZWZ0ID0gbV9ncmFwaFtub2Rl
LmNoaWxkMSgpXS5wcmVkaWN0aW9uKCk7Ci0gICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSByaWdo
dCA9IG1fZ3JhcGhbbm9kZS5jaGlsZDIoKV0ucHJlZGljdGlvbigpOworICAgICAgICAgICAgU3Bl
Y3VsYXRlZFR5cGUgbGVmdCA9IG5vZGUtPmNoaWxkMSgpLT5wcmVkaWN0aW9uKCk7CisgICAgICAg
ICAgICBTcGVjdWxhdGVkVHlwZSByaWdodCA9IG5vZGUtPmNoaWxkMigpLT5wcmVkaWN0aW9uKCk7
CiAgICAgICAgICAgICAKICAgICAgICAgICAgIEFkZFNwZWN1bGF0aW9uTW9kZSBtb2RlID0gRG9u
dFNwZWN1bGF0ZUludGVnZXI7CiAgICAgICAgICAgICAKQEAgLTM1OCwzOSArMzU2LDM5IEBAIHBy
aXZhdGU6CiAgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKHNw
ZWN1bGF0ZWREb3VibGVUeXBlRm9yUHJlZGljdGlvbnMobGVmdCwgcmlnaHQpKTsKICAgICAgICAg
ICAgIH0KIAotICAgICAgICAgICAgaWYgKGlzTm90WmVybyhub2RlLmNoaWxkMSgpLmluZGV4KCkp
IHx8IGlzTm90WmVybyhub2RlLmNoaWxkMigpLmluZGV4KCkpKQorICAgICAgICAgICAgaWYgKGlz
Tm90WmVybyhub2RlLT5jaGlsZDEoKS5ub2RlKCkpIHx8IGlzTm90WmVybyhub2RlLT5jaGlsZDIo
KS5ub2RlKCkpKQogICAgICAgICAgICAgICAgIGZsYWdzICY9IH5Ob2RlTmVlZHNOZWdaZXJvOwog
ICAgICAgICAgICAgZmxhZ3MgJj0gfk5vZGVVc2VkQXNPdGhlcjsKICAgICAgICAgICAgIAogICAg
ICAgICAgICAgaWYgKG1vZGUgIT0gU3BlY3VsYXRlSW50ZWdlcikKICAgICAgICAgICAgICAgICBm
bGFncyB8PSBOb2RlVXNlZEFzTnVtYmVyOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBjaGFu
Z2VkIHw9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ubWVyZ2VGbGFncyhmbGFncyk7Ci0gICAgICAg
ICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbm9kZS5jaGlsZDIoKV0ubWVyZ2VGbGFncyhmbGFncyk7
CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG5vZGUtPmNoaWxkMSgpLT5tZXJnZUZsYWdzKGZsYWdz
KTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbm9kZS0+Y2hpbGQyKCktPm1lcmdlRmxhZ3MoZmxh
Z3MpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAg
ICBjYXNlIEFyaXRoTmVnYXRlOgotICAgICAgICAgICAgaWYgKG1fZ3JhcGhbbm9kZS5jaGlsZDEo
KV0ucHJlZGljdGlvbigpKSB7CisgICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnByZWRp
Y3Rpb24oKSkgewogICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLm5lZ2F0ZVNob3VsZFNwZWN1
bGF0ZUludGVnZXIobm9kZSkpCiAgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VQ
cmVkaWN0aW9uKFNwZWNJbnQzMik7CiAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAg
ICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbihzcGVjdWxhdGVkRG91YmxlVHlwZUZv
clByZWRpY3Rpb24obV9ncmFwaFtub2RlLmNoaWxkMSgpXS5wcmVkaWN0aW9uKCkpKTsKKyAgICAg
ICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVByZWRpY3Rpb24oc3BlY3VsYXRlZERvdWJs
ZVR5cGVGb3JQcmVkaWN0aW9uKG5vZGUtPmNoaWxkMSgpLT5wcmVkaWN0aW9uKCkpKTsKICAgICAg
ICAgICAgIH0KIAogICAgICAgICAgICAgZmxhZ3MgJj0gfk5vZGVVc2VkQXNPdGhlcjsKIAotICAg
ICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLm1lcmdlRmxhZ3MoZmxh
Z3MpOworICAgICAgICAgICAgY2hhbmdlZCB8PSBub2RlLT5jaGlsZDEoKS0+bWVyZ2VGbGFncyhm
bGFncyk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgICAgICBjYXNlIEFy
aXRoTWluOgogICAgICAgICBjYXNlIEFyaXRoTWF4OiB7Ci0gICAgICAgICAgICBTcGVjdWxhdGVk
VHlwZSBsZWZ0ID0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5wcmVkaWN0aW9uKCk7Ci0gICAgICAg
ICAgICBTcGVjdWxhdGVkVHlwZSByaWdodCA9IG1fZ3JhcGhbbm9kZS5jaGlsZDIoKV0ucHJlZGlj
dGlvbigpOworICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgbGVmdCA9IG5vZGUtPmNoaWxkMSgp
LT5wcmVkaWN0aW9uKCk7CisgICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSByaWdodCA9IG5vZGUt
PmNoaWxkMigpLT5wcmVkaWN0aW9uKCk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlmIChs
ZWZ0ICYmIHJpZ2h0KSB7Ci0gICAgICAgICAgICAgICAgaWYgKE5vZGU6OnNob3VsZFNwZWN1bGF0
ZUludGVnZXJGb3JBcml0aG1ldGljKG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0sIG1fZ3JhcGhbbm9k
ZS5jaGlsZDIoKV0pCi0gICAgICAgICAgICAgICAgICAgICYmIG5vZGVDYW5TcGVjdWxhdGVJbnRl
Z2VyKG5vZGUuYXJpdGhOb2RlRmxhZ3MoKSkpCisgICAgICAgICAgICAgICAgaWYgKE5vZGU6OnNo
b3VsZFNwZWN1bGF0ZUludGVnZXJGb3JBcml0aG1ldGljKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwg
bm9kZS0+Y2hpbGQyKCkubm9kZSgpKQorICAgICAgICAgICAgICAgICAgICAmJiBub2RlQ2FuU3Bl
Y3VsYXRlSW50ZWdlcihub2RlLT5hcml0aE5vZGVGbGFncygpKSkKICAgICAgICAgICAgICAgICAg
ICAgY2hhbmdlZCB8PSBtZXJnZVByZWRpY3Rpb24oU3BlY0ludDMyKTsKICAgICAgICAgICAgICAg
ICBlbHNlCiAgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKHNw
ZWN1bGF0ZWREb3VibGVUeXBlRm9yUHJlZGljdGlvbnMobGVmdCwgcmlnaHQpKTsKQEAgLTM5OSwx
NCArMzk3LDE0IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBmbGFncyB8PSBOb2RlVXNlZEFzTnVt
YmVyOwogICAgICAgICAgICAgZmxhZ3MgJj0gfk5vZGVVc2VkQXNPdGhlcjsKIAotICAgICAgICAg
ICAgY2hhbmdlZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLm1lcmdlRmxhZ3MoZmxhZ3MpOwot
ICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQyKCldLm1lcmdlRmxhZ3Mo
ZmxhZ3MpOworICAgICAgICAgICAgY2hhbmdlZCB8PSBub2RlLT5jaGlsZDEoKS0+bWVyZ2VGbGFn
cyhmbGFncyk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG5vZGUtPmNoaWxkMigpLT5tZXJnZUZs
YWdzKGZsYWdzKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKICAgICAgICAgY2Fz
ZSBBcml0aE11bDogewotICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgbGVmdCA9IG1fZ3JhcGhb
bm9kZS5jaGlsZDEoKV0ucHJlZGljdGlvbigpOwotICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUg
cmlnaHQgPSBtX2dyYXBoW25vZGUuY2hpbGQyKCldLnByZWRpY3Rpb24oKTsKKyAgICAgICAgICAg
IFNwZWN1bGF0ZWRUeXBlIGxlZnQgPSBub2RlLT5jaGlsZDEoKS0+cHJlZGljdGlvbigpOworICAg
ICAgICAgICAgU3BlY3VsYXRlZFR5cGUgcmlnaHQgPSBub2RlLT5jaGlsZDIoKS0+cHJlZGljdGlv
bigpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAobGVmdCAmJiByaWdodCkgewogICAg
ICAgICAgICAgICAgIGlmIChtX2dyYXBoLm11bFNob3VsZFNwZWN1bGF0ZUludGVnZXIobm9kZSkp
CkBAIC00MjIsOCArNDIwLDggQEAgcHJpdmF0ZToKICAgICAgICAgICAgIC8vIGl0c2VsZiB1bmxl
c3Mgd2UgY2FuIHByb3ZlIHRoYXQgdGhlcmUgaXMgbm8gd2F5IGZvciB0aGUgdmFsdWVzCiAgICAg
ICAgICAgICAvLyBwcm9kdWNlZCB0byBjYXVzZSBkb3VibGUgcm91bmRpbmcuCiAgICAgICAgICAg
ICAKLSAgICAgICAgICAgIGlmICghaXNXaXRoaW5Qb3dlck9mVHdvKG5vZGUuY2hpbGQxKCkuaW5k
ZXgoKSwgMjIpCi0gICAgICAgICAgICAgICAgJiYgIWlzV2l0aGluUG93ZXJPZlR3byhub2RlLmNo
aWxkMigpLmluZGV4KCksIDIyKSkKKyAgICAgICAgICAgIGlmICghaXNXaXRoaW5Qb3dlck9mVHdv
KG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgMjIpCisgICAgICAgICAgICAgICAgJiYgIWlzV2l0aGlu
UG93ZXJPZlR3byhub2RlLT5jaGlsZDIoKS5ub2RlKCksIDIyKSkKICAgICAgICAgICAgICAgICBm
bGFncyB8PSBOb2RlVXNlZEFzTnVtYmVyOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBjaGFu
Z2VkIHw9IG5vZGUubWVyZ2VGbGFncyhmbGFncyk7CkBAIC00MzEsMTggKzQyOSwxOCBAQCBwcml2
YXRlOgogICAgICAgICAgICAgZmxhZ3MgfD0gTm9kZVVzZWRBc051bWJlciB8IE5vZGVOZWVkc05l
Z1plcm87CiAgICAgICAgICAgICBmbGFncyAmPSB+Tm9kZVVzZWRBc090aGVyOwogCi0gICAgICAg
ICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ubWVyZ2VGbGFncyhmbGFncyk7
Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbm9kZS5jaGlsZDIoKV0ubWVyZ2VGbGFn
cyhmbGFncyk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG5vZGUtPmNoaWxkMSgpLT5tZXJnZUZs
YWdzKGZsYWdzKTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbm9kZS0+Y2hpbGQyKCktPm1lcmdl
RmxhZ3MoZmxhZ3MpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAg
IAogICAgICAgICBjYXNlIEFyaXRoRGl2OiB7Ci0gICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSBs
ZWZ0ID0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5wcmVkaWN0aW9uKCk7Ci0gICAgICAgICAgICBT
cGVjdWxhdGVkVHlwZSByaWdodCA9IG1fZ3JhcGhbbm9kZS5jaGlsZDIoKV0ucHJlZGljdGlvbigp
OworICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgbGVmdCA9IG5vZGUtPmNoaWxkMSgpLT5wcmVk
aWN0aW9uKCk7CisgICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSByaWdodCA9IG5vZGUtPmNoaWxk
MigpLT5wcmVkaWN0aW9uKCk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlmIChsZWZ0ICYm
IHJpZ2h0KSB7Ci0gICAgICAgICAgICAgICAgaWYgKE5vZGU6OnNob3VsZFNwZWN1bGF0ZUludGVn
ZXJGb3JBcml0aG1ldGljKG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0sIG1fZ3JhcGhbbm9kZS5jaGls
ZDIoKV0pCi0gICAgICAgICAgICAgICAgICAgICYmIG5vZGVDYW5TcGVjdWxhdGVJbnRlZ2VyKG5v
ZGUuYXJpdGhOb2RlRmxhZ3MoKSkpCisgICAgICAgICAgICAgICAgaWYgKE5vZGU6OnNob3VsZFNw
ZWN1bGF0ZUludGVnZXJGb3JBcml0aG1ldGljKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgbm9kZS0+
Y2hpbGQyKCkubm9kZSgpKQorICAgICAgICAgICAgICAgICAgICAmJiBub2RlQ2FuU3BlY3VsYXRl
SW50ZWdlcihub2RlLT5hcml0aE5vZGVGbGFncygpKSkKICAgICAgICAgICAgICAgICAgICAgY2hh
bmdlZCB8PSBtZXJnZVByZWRpY3Rpb24oU3BlY0ludDMyKTsKICAgICAgICAgICAgICAgICBlbHNl
CiAgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKFNwZWNEb3Vi
bGUpOwpAQCAtNDU2LDE4ICs0NTQsMTggQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGZsYWdzIHw9
IE5vZGVVc2VkQXNOdW1iZXIgfCBOb2RlTmVlZHNOZWdaZXJvOwogICAgICAgICAgICAgZmxhZ3Mg
Jj0gfk5vZGVVc2VkQXNPdGhlcjsKIAotICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW25v
ZGUuY2hpbGQxKCldLm1lcmdlRmxhZ3MoZmxhZ3MpOwotICAgICAgICAgICAgY2hhbmdlZCB8PSBt
X2dyYXBoW25vZGUuY2hpbGQyKCldLm1lcmdlRmxhZ3MoZmxhZ3MpOworICAgICAgICAgICAgY2hh
bmdlZCB8PSBub2RlLT5jaGlsZDEoKS0+bWVyZ2VGbGFncyhmbGFncyk7CisgICAgICAgICAgICBj
aGFuZ2VkIHw9IG5vZGUtPmNoaWxkMigpLT5tZXJnZUZsYWdzKGZsYWdzKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBBcml0aE1vZDog
ewotICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgbGVmdCA9IG1fZ3JhcGhbbm9kZS5jaGlsZDEo
KV0ucHJlZGljdGlvbigpOwotICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgcmlnaHQgPSBtX2dy
YXBoW25vZGUuY2hpbGQyKCldLnByZWRpY3Rpb24oKTsKKyAgICAgICAgICAgIFNwZWN1bGF0ZWRU
eXBlIGxlZnQgPSBub2RlLT5jaGlsZDEoKS0+cHJlZGljdGlvbigpOworICAgICAgICAgICAgU3Bl
Y3VsYXRlZFR5cGUgcmlnaHQgPSBub2RlLT5jaGlsZDIoKS0+cHJlZGljdGlvbigpOwogICAgICAg
ICAgICAgCiAgICAgICAgICAgICBpZiAobGVmdCAmJiByaWdodCkgewotICAgICAgICAgICAgICAg
IGlmIChOb2RlOjpzaG91bGRTcGVjdWxhdGVJbnRlZ2VyRm9yQXJpdGhtZXRpYyhtX2dyYXBoW25v
ZGUuY2hpbGQxKCldLCBtX2dyYXBoW25vZGUuY2hpbGQyKCldKQotICAgICAgICAgICAgICAgICAg
ICAmJiBub2RlQ2FuU3BlY3VsYXRlSW50ZWdlcihub2RlLmFyaXRoTm9kZUZsYWdzKCkpKQorICAg
ICAgICAgICAgICAgIGlmIChOb2RlOjpzaG91bGRTcGVjdWxhdGVJbnRlZ2VyRm9yQXJpdGhtZXRp
Yyhub2RlLT5jaGlsZDEoKS5ub2RlKCksIG5vZGUtPmNoaWxkMigpLm5vZGUoKSkKKyAgICAgICAg
ICAgICAgICAgICAgJiYgbm9kZUNhblNwZWN1bGF0ZUludGVnZXIobm9kZS0+YXJpdGhOb2RlRmxh
Z3MoKSkpCiAgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKFNw
ZWNJbnQzMik7CiAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICBjaGFu
Z2VkIHw9IG1lcmdlUHJlZGljdGlvbihTcGVjRG91YmxlKTsKQEAgLTQ3Niw4ICs0NzQsOCBAQCBw
cml2YXRlOgogICAgICAgICAgICAgZmxhZ3MgfD0gTm9kZVVzZWRBc051bWJlciB8IE5vZGVOZWVk
c05lZ1plcm87CiAgICAgICAgICAgICBmbGFncyAmPSB+Tm9kZVVzZWRBc090aGVyOwogCi0gICAg
ICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ubWVyZ2VGbGFncyhmbGFn
cyk7Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbm9kZS5jaGlsZDIoKV0ubWVyZ2VG
bGFncyhmbGFncyk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG5vZGUtPmNoaWxkMSgpLT5tZXJn
ZUZsYWdzKGZsYWdzKTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbm9kZS0+Y2hpbGQyKCktPm1l
cmdlRmxhZ3MoZmxhZ3MpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAg
ICAgIApAQCAtNDg1LDE5ICs0ODMsMTkgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGNoYW5nZWQg
fD0gc2V0UHJlZGljdGlvbihTcGVjRG91YmxlKTsKICAgICAgICAgICAgIGZsYWdzIHw9IE5vZGVV
c2VkQXNOdW1iZXIgfCBOb2RlTmVlZHNOZWdaZXJvOwogICAgICAgICAgICAgZmxhZ3MgJj0gfk5v
ZGVVc2VkQXNPdGhlcjsKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaFtub2RlLmNoaWxk
MSgpXS5tZXJnZUZsYWdzKGZsYWdzKTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbm9kZS0+Y2hp
bGQxKCktPm1lcmdlRmxhZ3MoZmxhZ3MpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0K
ICAgICAgICAgICAgIAogICAgICAgICBjYXNlIEFyaXRoQWJzOiB7Ci0gICAgICAgICAgICBTcGVj
dWxhdGVkVHlwZSBjaGlsZCA9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ucHJlZGljdGlvbigpOwor
ICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgY2hpbGQgPSBub2RlLT5jaGlsZDEoKS0+cHJlZGlj
dGlvbigpOwogICAgICAgICAgICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbkZvckFyaXRobWV0aWMo
Y2hpbGQpCi0gICAgICAgICAgICAgICAgJiYgbm9kZUNhblNwZWN1bGF0ZUludGVnZXIobm9kZS5h
cml0aE5vZGVGbGFncygpKSkKKyAgICAgICAgICAgICAgICAmJiBub2RlQ2FuU3BlY3VsYXRlSW50
ZWdlcihub2RlLT5hcml0aE5vZGVGbGFncygpKSkKICAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9
IG1lcmdlUHJlZGljdGlvbihTcGVjSW50MzIpOwogICAgICAgICAgICAgZWxzZQogICAgICAgICAg
ICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKHNwZWN1bGF0ZWREb3VibGVUeXBlRm9y
UHJlZGljdGlvbihjaGlsZCkpOwogCi0gICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbm9k
ZS5jaGlsZDEoKV0ubWVyZ2VGbGFncyhmbGFncyk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG5v
ZGUtPmNoaWxkMSgpLT5tZXJnZUZsYWdzKGZsYWdzKTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICB9CiAgICAgICAgICAgICAKQEAgLTUyNywzMSArNTI1LDMxIEBAIHByaXZhdGU6CiAgICAg
ICAgIH0KIAogICAgICAgICBjYXNlIEdldEJ5SWQ6IHsKLSAgICAgICAgICAgIGNoYW5nZWQgfD0g
bWVyZ2VQcmVkaWN0aW9uKG5vZGUuZ2V0SGVhcFByZWRpY3Rpb24oKSk7CisgICAgICAgICAgICBj
aGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbihub2RlLT5nZXRIZWFwUHJlZGljdGlvbigpKTsKICAg
ICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VEZWZhdWx0RmxhZ3Mobm9kZSk7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgR2V0QnlJZEZs
dXNoOgotICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVByZWRpY3Rpb24obm9kZS5nZXRIZWFw
UHJlZGljdGlvbigpKTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKG5v
ZGUtPmdldEhlYXBQcmVkaWN0aW9uKCkpOwogICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZURl
ZmF1bHRGbGFncyhub2RlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAg
ICAgIGNhc2UgR2V0QnlWYWw6IHsKLSAgICAgICAgICAgIGlmIChtX2dyYXBoW25vZGUuY2hpbGQx
KCldLnNob3VsZFNwZWN1bGF0ZUZsb2F0MzJBcnJheSgpCi0gICAgICAgICAgICAgICAgfHwgbV9n
cmFwaFtub2RlLmNoaWxkMSgpXS5zaG91bGRTcGVjdWxhdGVGbG9hdDY0QXJyYXkoKSkKKyAgICAg
ICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlRmxvYXQzMkFycmF5KCkK
KyAgICAgICAgICAgICAgICB8fCBub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlRmxvYXQ2
NEFycmF5KCkpCiAgICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVByZWRpY3Rpb24oU3Bl
Y0RvdWJsZSk7CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBt
ZXJnZVByZWRpY3Rpb24obm9kZS5nZXRIZWFwUHJlZGljdGlvbigpKTsKIAotICAgICAgICAgICAg
Y2hhbmdlZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLm1lcmdlRmxhZ3MoTm9kZVVzZWRBc1Zh
bHVlKTsKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaFtub2RlLmNoaWxkMigpXS5tZXJn
ZUZsYWdzKE5vZGVVc2VkQXNOdW1iZXIgfCBOb2RlVXNlZEFzT3RoZXIgfCBOb2RlVXNlZEFzSW50
IHwgTm9kZVVzZWRBc0ludExvY2FsbHkpOworICAgICAgICAgICAgY2hhbmdlZCB8PSBub2RlLT5j
aGlsZDEoKS0+bWVyZ2VGbGFncyhOb2RlVXNlZEFzVmFsdWUpOworICAgICAgICAgICAgY2hhbmdl
ZCB8PSBub2RlLT5jaGlsZDIoKS0+bWVyZ2VGbGFncyhOb2RlVXNlZEFzTnVtYmVyIHwgTm9kZVVz
ZWRBc090aGVyIHwgTm9kZVVzZWRBc0ludCB8IE5vZGVVc2VkQXNJbnRMb2NhbGx5KTsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBHZXRN
eUFyZ3VtZW50QnlWYWxTYWZlOiB7Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGlj
dGlvbihub2RlLmdldEhlYXBQcmVkaWN0aW9uKCkpOwotICAgICAgICAgICAgY2hhbmdlZCB8PSBt
X2dyYXBoW25vZGUuY2hpbGQxKCldLm1lcmdlRmxhZ3MoTm9kZVVzZWRBc051bWJlciB8IE5vZGVV
c2VkQXNPdGhlciB8IE5vZGVVc2VkQXNJbnQgfCBOb2RlVXNlZEFzSW50TG9jYWxseSk7CisgICAg
ICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbihub2RlLT5nZXRIZWFwUHJlZGljdGlv
bigpKTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbm9kZS0+Y2hpbGQxKCktPm1lcmdlRmxhZ3Mo
Tm9kZVVzZWRBc051bWJlciB8IE5vZGVVc2VkQXNPdGhlciB8IE5vZGVVc2VkQXNJbnQgfCBOb2Rl
VXNlZEFzSW50TG9jYWxseSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAg
ICAgICAgCkBAIC01NzEsMjUgKzU2OSwyMyBAQCBwcml2YXRlOgogICAgICAgICB9CiAKICAgICAg
ICAgY2FzZSBHZXRCeU9mZnNldDogewotICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVByZWRp
Y3Rpb24obm9kZS5nZXRIZWFwUHJlZGljdGlvbigpKTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0g
bWVyZ2VQcmVkaWN0aW9uKG5vZGUtPmdldEhlYXBQcmVkaWN0aW9uKCkpOwogICAgICAgICAgICAg
Y2hhbmdlZCB8PSBtZXJnZURlZmF1bHRGbGFncyhub2RlKTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBDYWxsOgogICAgICAgICBjYXNl
IENvbnN0cnVjdDogewotICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVByZWRpY3Rpb24obm9k
ZS5nZXRIZWFwUHJlZGljdGlvbigpKTsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgY2hpbGRJ
ZHggPSBub2RlLmZpcnN0Q2hpbGQoKTsKLSAgICAgICAgICAgICAgICAgY2hpbGRJZHggPCBub2Rl
LmZpcnN0Q2hpbGQoKSArIG5vZGUubnVtQ2hpbGRyZW4oKTsKLSAgICAgICAgICAgICAgICAgKytj
aGlsZElkeCkgewotICAgICAgICAgICAgICAgIEVkZ2UgZWRnZSA9IG1fZ3JhcGgubV92YXJBcmdD
aGlsZHJlbltjaGlsZElkeF07Ci0gICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW2Vk
Z2VdLm1lcmdlRmxhZ3MoTm9kZVVzZWRBc1ZhbHVlKTsKLSAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKG5vZGUtPmdldEhlYXBQcmVkaWN0aW9uKCkp
OworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBjaGlsZElkeCA9IG5vZGUtPmZpcnN0Q2hpbGQo
KTsKKyAgICAgICAgICAgICAgICAgY2hpbGRJZHggPCBub2RlLT5maXJzdENoaWxkKCkgKyBub2Rl
LT5udW1DaGlsZHJlbigpOworICAgICAgICAgICAgICAgICArK2NoaWxkSWR4KQorICAgICAgICAg
ICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaC5tX3ZhckFyZ0NoaWxkcmVuW2NoaWxkSWR4XS0+bWVy
Z2VGbGFncyhOb2RlVXNlZEFzVmFsdWUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0K
ICAgICAgICAgICAgIAogICAgICAgICBjYXNlIENvbnZlcnRUaGlzOiB7Ci0gICAgICAgICAgICBT
cGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uID0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5wcmVkaWN0
aW9uKCk7CisgICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uID0gbm9kZS0+Y2hp
bGQxKCktPnByZWRpY3Rpb24oKTsKICAgICAgICAgICAgIGlmIChwcmVkaWN0aW9uKSB7CiAgICAg
ICAgICAgICAgICAgaWYgKHByZWRpY3Rpb24gJiB+U3BlY09iamVjdE1hc2spIHsKICAgICAgICAg
ICAgICAgICAgICAgcHJlZGljdGlvbiAmPSBTcGVjT2JqZWN0TWFzazsKQEAgLTYwMiwxMyArNTk4
LDEzIEBAIHByaXZhdGU6CiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBjYXNlIEdl
dEdsb2JhbFZhcjogewotICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVByZWRpY3Rpb24obm9k
ZS5nZXRIZWFwUHJlZGljdGlvbigpKTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVk
aWN0aW9uKG5vZGUtPmdldEhlYXBQcmVkaWN0aW9uKCkpOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBjYXNlIFB1dEdsb2JhbFZhcjoKICAgICAg
ICAgY2FzZSBQdXRHbG9iYWxWYXJDaGVjazogewotICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dy
YXBoW25vZGUuY2hpbGQxKCldLm1lcmdlRmxhZ3MoTm9kZVVzZWRBc1ZhbHVlKTsKKyAgICAgICAg
ICAgIGNoYW5nZWQgfD0gbm9kZS0+Y2hpbGQxKCktPm1lcmdlRmxhZ3MoTm9kZVVzZWRBc1ZhbHVl
KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKQEAgLTYxNyw3
ICs2MTMsNyBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIFJlc29sdmVCYXNlOgogICAgICAgICBj
YXNlIFJlc29sdmVCYXNlU3RyaWN0UHV0OgogICAgICAgICBjYXNlIFJlc29sdmVHbG9iYWw6IHsK
LSAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24gPSBub2RlLmdldEhlYXBQcmVk
aWN0aW9uKCk7CisgICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uID0gbm9kZS0+
Z2V0SGVhcFByZWRpY3Rpb24oKTsKICAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0
aW9uKHByZWRpY3Rpb24pOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTY0Mywx
OCArNjM5LDE2IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBOZXdBcnJh
eTogewogICAgICAgICAgICAgY2hhbmdlZCB8PSBzZXRQcmVkaWN0aW9uKFNwZWNBcnJheSk7Ci0g
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGNoaWxkSWR4ID0gbm9kZS5maXJzdENoaWxkKCk7Ci0g
ICAgICAgICAgICAgICAgIGNoaWxkSWR4IDwgbm9kZS5maXJzdENoaWxkKCkgKyBub2RlLm51bUNo
aWxkcmVuKCk7Ci0gICAgICAgICAgICAgICAgICsrY2hpbGRJZHgpIHsKLSAgICAgICAgICAgICAg
ICBFZGdlIGVkZ2UgPSBtX2dyYXBoLm1fdmFyQXJnQ2hpbGRyZW5bY2hpbGRJZHhdOwotICAgICAg
ICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaFtlZGdlXS5tZXJnZUZsYWdzKE5vZGVVc2VkQXNW
YWx1ZSk7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGNoaWxkSWR4
ID0gbm9kZS0+Zmlyc3RDaGlsZCgpOworICAgICAgICAgICAgICAgICBjaGlsZElkeCA8IG5vZGUt
PmZpcnN0Q2hpbGQoKSArIG5vZGUtPm51bUNoaWxkcmVuKCk7CisgICAgICAgICAgICAgICAgICsr
Y2hpbGRJZHgpCisgICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoLm1fdmFyQXJnQ2hp
bGRyZW5bY2hpbGRJZHhdLT5tZXJnZUZsYWdzKE5vZGVVc2VkQXNWYWx1ZSk7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgTmV3QXJyYXlX
aXRoU2l6ZTogewogICAgICAgICAgICAgY2hhbmdlZCB8PSBzZXRQcmVkaWN0aW9uKFNwZWNBcnJh
eSk7Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ubWVyZ2VG
bGFncyhOb2RlVXNlZEFzVmFsdWUgfCBOb2RlVXNlZEFzSW50IHwgTm9kZVVzZWRBc0ludExvY2Fs
bHkpOworICAgICAgICAgICAgY2hhbmdlZCB8PSBub2RlLT5jaGlsZDEoKS0+bWVyZ2VGbGFncyhO
b2RlVXNlZEFzVmFsdWUgfCBOb2RlVXNlZEFzSW50IHwgTm9kZVVzZWRBc0ludExvY2FsbHkpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIApAQCAtMTAxMiw3ICsx
MDA2LDcgQEAgcHJpdmF0ZToKICAgICAgICAgfQogICAgIH0KICAgICAKLSAgICBOb2RlSW5kZXgg
bV9jb21waWxlSW5kZXg7CisgICAgTm9kZSogbV9jdXJyZW50Tm9kZTsKICAgICBib29sIG1fY2hh
bmdlZDsKIAogI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RydWN0dXJlQWJzdHJhY3RWYWx1ZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RydWN0dXJlQWJzdHJh
Y3RWYWx1ZS5oCShyZXZpc2lvbiAxMzk1ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1N0cnVjdHVyZUFic3RyYWN0VmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMzE0LDYgKzMx
NCw4IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgc3RhdGljIFN0cnVjdHVyZSogdG9wVmFsdWUo
KSB7IHJldHVybiByZWludGVycHJldF9jYXN0PFN0cnVjdHVyZSo+KDEpOyB9CiAgICAgCisgICAg
Ly8gTkIuIFRoaXMgbXVzdCBoYXZlIGEgdHJpdmlhbCBkZXN0cnVjdG9yLgorICAgIAogICAgIC8v
IFRoaXMgY2FuIG9ubHkgcmVtZW1iZXIgb25lIHN0cnVjdHVyZSBhdCBhIHRpbWUuCiAgICAgU3Ry
dWN0dXJlKiBtX3N0cnVjdHVyZTsKIH07Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>182874</attachid>
            <date>2013-01-15 16:54:34 -0800</date>
            <delta_ts>2013-01-15 19:29:39 -0800</delta_ts>
            <desc>work in progress</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>95166</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RWYWx1ZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RWYWx1ZS5oCShy
ZXZpc2lvbiAxMzk1ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0
VmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtNDE1LDYgKzQxNSw4IEBAIHN0cnVjdCBBYnN0cmFj
dFZhbHVlIHsKICAgICAvLyAgICBjaGFuZ2UgeCdzIHN0cnVjdHVyZSBhbmQgd2UgaGF2ZSBubyB3
YXkgb2YgcHJvdmluZyBvdGhlcndpc2UsIGJ1dAogICAgIC8vICAgIHgncyBtX2Z1dHVyZVBvc3Np
YmxlU3RydWN0dXJlIHdpbGwgYmUgd2hhdGV2ZXIgc3RydWN0dXJlIHdlIGhhZCBjaGVja2VkCiAg
ICAgLy8gICAgd2hlbiBnZXR0aW5nIHByb3BlcnR5ICdmJy4KKyAgICAKKyAgICAvLyBOQi4gQWxs
IGZpZWxkcyBpbiB0aGlzIHN0cnVjdCBtdXN0IGhhdmUgdHJpdmlhbCBkZXN0cnVjdG9ycy4KIAog
ICAgIC8vIFRoaXMgaXMgYSBwcm92ZW4gY29uc3RyYWludCBvbiB0aGUgc3RydWN0dXJlcyB0aGF0
IHRoaXMgdmFsdWUgY2FuIGhhdmUgcmlnaHQKICAgICAvLyBub3cuIFRoZSBzdHJ1Y3R1cmUgb2Yg
dGhlIGN1cnJlbnQgdmFsdWUgbXVzdCBiZWxvbmcgdG8gdGhpcyBzZXQuIFRoZSBzZXQgbWF5Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FkamFjZW5jeUxpc3QuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FkamFjZW5jeUxpc3QuaAkocmV2
aXNpb24gMTM5NTg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBZGphY2VuY3lM
aXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMSwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTU3LDcgKzU3LDcgQEAgcHVibGljOgogICAgICAgICB9CiAg
ICAgfQogICAgIAotICAgIEFkamFjZW5jeUxpc3QoS2luZCBraW5kLCBOb2RlSW5kZXggY2hpbGQx
LCBOb2RlSW5kZXggY2hpbGQyLCBOb2RlSW5kZXggY2hpbGQzKQorICAgIEFkamFjZW5jeUxpc3Qo
S2luZCBraW5kLCBOb2RlKiBjaGlsZDEsIE5vZGUqIGNoaWxkMiwgTm9kZSogY2hpbGQzKQogI2lm
ICFBU1NFUlRfRElTQUJMRUQKICAgICAgICAgOiBtX2tpbmQoRml4ZWQpCiAjZW5kaWYKQEAgLTEx
OCw3ICsxMTgsNyBAQCBwdWJsaWM6CiAgICAgICAgIGNoaWxkKDIpID0gY2hpbGQzOwogICAgIH0K
ICAgICAKLSAgICB2b2lkIGluaXRpYWxpemUoTm9kZUluZGV4IGNoaWxkMSA9IE5vTm9kZSwgTm9k
ZUluZGV4IGNoaWxkMiA9IE5vTm9kZSwgTm9kZUluZGV4IGNoaWxkMyA9IE5vTm9kZSkKKyAgICB2
b2lkIGluaXRpYWxpemUoTm9kZSogY2hpbGQxID0gMCwgTm9kZSogY2hpbGQyID0gMCwgTm9kZSog
Y2hpbGQzID0gMCkKICAgICB7CiAgICAgICAgIGluaXRpYWxpemUoRWRnZShjaGlsZDEpLCBFZGdl
KGNoaWxkMiksIEVkZ2UoY2hpbGQzKSk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdBbGxvY2F0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0FsbG9jYXRvci5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdBbGxvY2F0b3IuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyMzUgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdB
bGxvY2F0b3JfaAorI2RlZmluZSBERkdBbGxvY2F0b3JfaAorCisjaW5jbHVkZSA8d3RmL1BsYXRm
b3JtLmg+CisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgPHd0Zi9QYWdlQWxsb2Nh
dGlvbkFsaWduZWQuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCisvLyBD
dXN0b20gcG9vbCBhbGxvY2F0b3IgZm9yIGV4YWN0bHkgb25lIHR5cGUgKHR5cGUgVCkuIEl0IGhh
cyBmYXN0IChPKDEpLCBvbmx5IGEgZmV3CisvLyBpbnN0cnVjdGlvbnMpIGFsbG9jYXRvciwgYW5k
IGEgc2ltaWxhcmx5IGZhc3QgZnJlZSgpLiBSZWN5Y2xpbmcgd29ya3MgaWYgZWl0aGVyIG9mCisv
LyB0aGUgZm9sbG93aW5nIGlzIHRydWU6CisvLyAtIFQgaGFzIGEgdHJpdmlhbCBkZXN0cnVjdG9y
LiBJbiB0aGF0IGNhc2UgeW91IGRvbid0IGhhdmUgdG8gZXZlciBjYWxsIGZyZWUoKSBvbgorLy8g
ICBhbnl0aGluZy4gWW91IGNhbiBqdXN0IGNhbGwgZnJlZUFsbCgpIGluc3RlYWQuCisvLyAtIFlv
dSBjYWxsIGZyZWUoKSBvbiBhbGwgVCdzIHRoYXQgeW91IGFsbG9jYXRlZCwgYW5kIG5ldmVyIHVz
ZSBmcmVlQWxsKCkuCisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitjbGFzcyBBbGxvY2F0b3Igewor
cHVibGljOgorICAgIEFsbG9jYXRvcigpOworICAgIH5BbGxvY2F0b3IoKTsKKyAgICAKKyAgICB2
b2lkKiBhbGxvY2F0ZSgpOyAvLyBVc2UgcGxhY2VtZW50IG5ldyB0byBhbGxvY2F0ZSwgYW5kIGF2
b2lkIHVzaW5nIHRoaXMgbWV0aG9kLgorICAgIHZvaWQgZnJlZShUKik7IC8vIENhbGwgdGhpcyBt
ZXRob2QgdG8gZGVsZXRlOyBuZXZlciB1c2UgJ2RlbGV0ZScgZGlyZWN0bHkuCisgICAgCisgICAg
dm9pZCBmcmVlQWxsKCk7IC8vIE9ubHkgY2FsbCB0aGlzIGlmIFQgaGFzIGEgdHJpdmlhbCBkZXN0
cnVjdG9yLgorICAgIHZvaWQgcmVzZXQoKTsgLy8gTGlrZSBmcmVlQWxsKCksIGJ1dCBhbHNvIHJl
dHVybnMgYWxsIG1lbW9yeSB0byB0aGUgT1MuCisgICAgCisgICAgdW5zaWduZWQgaW5kZXhPZihU
Kik7CisgICAgCisgICAgc3RhdGljIEFsbG9jYXRvciogYWxsb2NhdG9yT2YoVCopOworICAgIAor
cHJpdmF0ZToKKyAgICB2b2lkKiBidW1wQWxsb2NhdGUoKTsKKyAgICB2b2lkKiBmcmVlTGlzdEFs
bG9jYXRlKCk7CisgICAgdm9pZCogYWxsb2NhdGVTbG93KCk7CisgICAgdm9pZCBmcmVlUmVnaW9u
c1N0YXJ0aW5nQXQoUmVnaW9uKik7CisgICAgdm9pZCBzdGFydGluZ0J1bXBpbmdJbihSZWdpb24q
KTsKKyAgICAKKyAgICBzdHJ1Y3QgUmVnaW9uIHsKKyAgICAgICAgc3RhdGljIHNpemVfdCBzaXpl
KCkgeyByZXR1cm4gNjQgKiBLQjsgfQorICAgICAgICBzdGF0aWMgc2l6ZV90IGhlYWRlclNpemUo
KSB7IHJldHVybiBzdGQ6Om1heChzaXplb2YoUmVnaW9uKSwgc2l6ZW9mKFQpKTsgfQorICAgICAg
ICBzdGF0aWMgdW5zaWduZWQgbnVtYmVyT2ZUaGluZ3NQZXJSZWdpb24oKSB7IHJldHVybiAoc2l6
ZSgpIC0gaGVhZGVyU2l6ZSgpKSAvIHNpemVvZihUKTsgfQorICAgICAgICBUKiBkYXRhKCkgeyBy
ZXR1cm4gYml0d2lzZV9jYXN0PFQqPihiaXR3aXNlX2Nhc3Q8Y2hhcio+KHRoaXMpICsgaGVhZGVy
U2l6ZSgpKTsgfQorICAgICAgICBib29sIGlzSW5UaGlzUmVnaW9uKFQqIHBvaW50ZXIpIHsgcmV0
dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkPihwb2ludGVyIC0gZGF0YSgpKSA8IG51bWJlck9mVGhp
bmdzUGVyUmVnaW9uKCk7IH0KKyAgICAgICAgUmVnaW9uKiByZWdpb25Gb3IoVCogcG9pbnRlcikg
eyByZXR1cm4gYml0d2lzZV9jYXN0PFJlZ2lvbio+KGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KHBv
aW50ZXIpICYgfihzaXplKCkgLSAxKSk7IH0KKyAgICAgICAgCisgICAgICAgIFBhZ2VBbGxvY2F0
aW9uQWxpZ25lZCBtX2FsbG9jYXRpb247CisgICAgICAgIEFsbG9jYXRvciogbV9hbGxvY2F0b3I7
CisgICAgICAgIFJlZ2lvbiogbV9uZXh0OworICAgIH07CisgICAgCisgICAgUmVnaW9uKiBtX3Jl
Z2lvbkhlYWQ7CisgICAgdm9pZCoqIG1fZnJlZUxpc3RIZWFkOworICAgIFQqIG1fYnVtcEVuZDsK
KyAgICB1bnNpZ25lZCBtX2J1bXBSZW1haW5pbmc7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBU
PgoraW5saW5lIEFsbG9jYXRvcjo6QWxsb2NhdG9yKCkKKyAgICA6IG1fcmVnaW9uSGVhZCgwKQor
ICAgICwgbV9mcmVlTGlzdEhlYWQoMCkKKyAgICAsIG1fYnVtcFJlbWFpbmluZygwKQoreworfQor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgoraW5saW5lIEFsbG9jYXRvcjo6fkFsbG9jYXRvcigpCit7
CisgICAgcmVzZXQoKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK0FMV0FZU19JTkxJTkUg
dm9pZCogQWxsb2NhdG9yOjphbGxvY2F0ZSgpCit7CisgICAgaWYgKExJS0VMWSh2b2lkKiByZXN1
bHQgPSBidW1wQWxsb2NhdGUoKSkpCisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgcmV0dXJu
IGZyZWVMaXN0QWxsb2NhdGUoKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK3ZvaWQgQWxs
b2NhdG9yOjpmcmVlKFQqIG9iamVjdCkKK3sKKyAgICBvYmplY3QtPn5UKCk7CisgICAgCisgICAg
dm9pZCoqIGNlbGwgPSBiaXR3aXNlX2Nhc3Q8dm9pZCoqPihvYmplY3QpOworICAgICpjZWxsID0g
bV9mcmVlTGlzdEhlYWQ7CisgICAgbV9mcmVlTGlzdEhlYWQgPSBjZWxsOworfQorCit0ZW1wbGF0
ZTx0eXBlbmFtZSBUPgordm9pZCBBbGxvY2F0b3I6OmZyZWVBbGwoKQoreworICAgIGlmICghbV9y
ZWdpb25IZWFkKSB7CisgICAgICAgIEFTU0VSVCghbV9idW1wUmVtYWluaW5nKTsKKyAgICAgICAg
QVNTRVJUKCFtX2ZyZWVMaXN0SGVhZCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisg
ICAgLy8gU2luY2UgdGhlIGNhbGxlciBpcyBvcHRpbmcgb3V0IG9mIGNhbGxpbmcgdGhlIGRlc3Ry
dWN0b3IgZm9yIGFueSBhbGxvY2F0ZWQgdGhpbmcsCisgICAgLy8gd2UgaGF2ZSB0d28gY2hvaWNl
cywgcGx1cyBhIGNvbnRpbnV1bSBiZXR3ZWVuOiB3ZSBjYW4gZWl0aGVyIGp1c3QgZGVsZXRlIGFs
bCByZWdpb25zCisgICAgLy8gKGkuZS4gY2FsbCByZXNldCgpKSwgb3Igd2UgY2FuIG1ha2UgYWxs
IHJlZ2lvbnMgYXZhaWxhYmxlIGZvciByZXVzZS4gV2UgZG8gc29tZXRoaW5nCisgICAgLy8gdGhh
dCBvcHRpbWl6ZXMgZm9yIChhKSBzcGVlZCBvZiBmcmVlQWxsKCksIChiKSB0aGUgYXNzdW1wdGlv
biB0aGF0IGlmIHRoZSB1c2VyIGNhbGxzCisgICAgLy8gZnJlZUFsbCgpIHRoZW4gdGhleSB3aWxs
IHByb2JhYmx5IGJlIGNhbGxpbmcgYWxsb2NhdGUoKSBpbiB0aGUgbmVhciBmdXR1cmUuIE5hbWVs
eSwKKyAgICAvLyB3ZSBmcmVlIGFsbCBidXQgb25lIHJlZ2lvbiwgYW5kIG1ha2UgdGhlIHJlbWFp
bmluZyByZWdpb24gYSBidW1wIGFsbG9jYXRpb24gcmVnaW9uLgorICAgIAorICAgIGZvciAoUmVn
aW9uKiByZWdpb24gPSBtX3JlZ2lvbkhlYWQtPm1fbmV4dDsgcmVnaW9uOyByZWdpb24gPSByZWdp
b24tPm1fbmV4dCkKKyAgICAgICAgYnVpbGRGcmVlTGlzdEluKHJlZ2lvbik7CisgICAgCisgICAg
bV9yZWdpb25IZWFkLT5tX25leHQgPSAwOworICAgIG1fZnJlZUxpc3RIZWFkID0gMDsKKyAgICBz
dGFydEJ1bXBpbmdJbihtX3JlZ2lvbkhlYWQpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgor
dm9pZCBBbGxvY2F0b3I6OnJlc2V0KCkKK3sKKyAgICBmcmVlUmVnaW9uc1N0YXJ0aW5nQXQobV9y
ZWdpb25IZWFkKTsKKyAgICAKKyAgICBtX3JlZ2lvbkhlYWQgPSAwOworICAgIG1fZnJlZUxpc3RI
ZWFkID0gMDsKKyAgICBtX2J1bXBSZW1haW5pbmcgPSAwOworfQorCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPgordW5zaWduZWQgQWxsb2NhdG9yOjppbmRleE9mKFQqIG9iamVjdCkKK3sKKyAgICB1bnNp
Z25lZCBiYXNlSW5kZXggPSAwOworICAgIGZvciAoUmVnaW9uKiByZWdpb24gPSBtX3JlZ2lvbkhl
YWQ7IHJlZ2lvbjsgcmVnaW9uID0gcmVnaW9uLT5tX25leHQpIHsKKyAgICAgICAgaWYgKHJlZ2lv
bi0+aXNJblRoaXNSZWdpb24ob2JqZWN0KSkKKyAgICAgICAgICAgIHJldHVybiBiYXNlSW5kZXgg
KyAob2JqZWN0IC0gcmVnaW9uLT5kYXRhKCkpOworICAgICAgICBiYXNlSW5kZXggKz0gUmVnaW9u
OjpudW1iZXJPZlRoaW5nc1BlclJlZ2lvbigpOworICAgIH0KKyAgICBDUkFTSCgpOworICAgIHJl
dHVybiAwOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorQWxsb2NhdG9yKiBBbGxvY2F0b3I6
OmFsbG9jYXRvck9mKFQqIG9iamVjdCkKK3sKKyAgICByZXR1cm4gUmVnaW9uOjpyZWdpb25Gb3Io
b2JqZWN0KS0+bV9hbGxvY2F0b3I7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitBTFdBWVNf
SU5MSU5FIHZvaWQqIEFsbG9jYXRvcjo6YnVtcEFsbG9jYXRlKCkKK3sKKyAgICBpZiAodW5zaWdu
ZWQgcmVtYWluaW5nID0gbV9idW1wUmVtYWluaW5nKSB7CisgICAgICAgIHJlbWFpbmluZy0tOwor
ICAgICAgICBtX2J1bXBSZW1haW5pbmcgPSByZW1haW5pbmc7CisgICAgICAgIHJldHVybiBtX2J1
bXBFbmQgLSAocmVtYWluaW5nICsgMSk7CisgICAgfQorICAgIHJldHVybiAwOworfQorCit0ZW1w
bGF0ZTx0eXBlbmFtZSBUPgordm9pZCogQWxsb2NhdG9yOjpmcmVlTGlzdEFsbG9jYXRlKCkKK3sK
KyAgICB2b2lkKiogcmVzdWx0ID0gbV9mcmVlTGlzdEhlYWQ7CisgICAgaWYgKFVOTElLRUxZKCFy
ZXN1bHQpKQorICAgICAgICByZXR1cm4gYWxsb2NhdGVTbG93KCk7CisgICAgbV9mcmVlTGlzdEhl
YWQgPSBiaXR3aXNlX2Nhc3Q8dm9pZCoqPigqcmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0Owor
fQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgordm9pZCogQWxsb2NhdG9yOjphbGxvY2F0ZVNsb3co
KQoreworICAgIEFTU0VSVCghbV9mcmVlTGlzdEhlYWQpOworICAgIEFTU0VSVCghbV9idW1wUmVt
YWluaW5nKTsKKyAgICAKKyAgICBQYWdlQWxsb2NhdGlvbkFsaWduZWQgYWxsb2NhdGlvbiA9IFBh
Z2VBbGxvY2F0aW9uQWxpZ25lZDo6YWxsb2NhdGUoUmVnaW9uOjpzaXplKCksIFJlZ2lvbjo6c2l6
ZSgpLCBPU0FsbG9jYXRvcjo6SlNHQ0hlYXBQYWdlcyk7CisgICAgaWYgKCFzdGF0aWNfY2FzdDxi
b29sPihhbGxvY2F0aW9uKSkKKyAgICAgICAgQ1JBU0goKTsKKyAgICBSZWdpb24qIHJlZ2lvbiA9
IHN0YXRpY19jYXN0PFJlZ2lvbio+KGFsbG9jYXRpb24uYmFzZSgpKTsKKyAgICByZWdpb24tPm1f
YWxsb2NhdGlvbiA9IG1fYWxsb2NhdGlvbjsKKyAgICByZWdpb24tPm1fYWxsb2N0b3IgPSB0aGlz
OworICAgIHN0YXJ0QnVtcGluZ0luKHJlZ2lvbik7CisgICAgcmVnaW9uLT5tX25leHQgPSBtX3Jl
Z2lvbkhlYWQ7CisgICAgbV9yZWdpb25IZWFkID0gcmVnaW9uOworICAgIAorICAgIHZvaWQqIHJl
c3VsdCA9IGJ1bXBBbGxvY2F0ZSgpOworICAgIEFTU0VSVChyZXN1bHQpOworICAgIHJldHVybiBy
ZXN1bHQ7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+Cit2b2lkIEFsbG9jYXRvcjo6ZnJlZVJl
Z2lvbnNTdGFydGluZ0F0KFJlZ2lvbiogcmVnaW9uKQoreworICAgIHdoaWxlIChyZWdpb24pIHsK
KyAgICAgICAgUmVnaW9uKiBuZXh0UmVnaW9uID0gcmVnaW9uLT5tX25leHQ7CisgICAgICAgIHJl
Z2lvbi0+bV9hbGxvY2F0aW9uLmRlYWxsb2NhdGUoKTsKKyAgICAgICAgcmVnaW9uID0gbmV4dFJl
Z2lvbjsKKyAgICB9Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+Cit2b2lkIEFsbG9jYXRvcjo6
c3RhcnRCdW1waW5nSW4oUmVnaW9uKiByZWdpb24pCit7CisgICAgbV9idW1wRW5kID0gcmVnaW9u
LT5kYXRhKCkgKyBSZWdpb246Om51bWJlck9mVGhpbmdzUGVyUmVnaW9uKCk7CisgICAgbV9idW1w
UmVtYWluaW5nID0gUmVnaW9uOjpudW1iZXJPZlRoaW5nc1BlclJlZ2lvbigpOworfQorCit9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2Vu
ZGlmIC8vIERGR0FsbG9jYXRvcl9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQ29tbW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0NvbW1vbi5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0NvbW1vbi5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDEgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIkRGR0NvbW1vbi5oIgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKK25hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgREZHIHsKKwordm9pZCBOb2RlUG9pbnRlclRyYWl0czo6ZHVtcChOb2Rl
KiB2YWx1ZSwgUHJpbnRTdHJlYW0mIG91dCkKK3sKKyAgICBvdXQucHJpbnQodmFsdWUpOworfQor
Cit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkK
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb24uaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbi5oCShyZXZpc2lvbiAxMzk1
ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbi5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTIs
IDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC04MSwxNiArODEsMTQgQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBERkcgewogCi0vLyBUeXBlIGZvciBhIHJlZmVyZW5jZSB0byBhbm90aGVyIG5vZGUgaW4g
dGhlIGdyYXBoLgotdHlwZWRlZiB1aW50MzJfdCBOb2RlSW5kZXg7Ci1zdGF0aWMgY29uc3QgTm9k
ZUluZGV4IE5vTm9kZSA9IFVJTlRfTUFYOworY2xhc3MgTm9kZTsKIAogdHlwZWRlZiB1aW50MzJf
dCBCbG9ja0luZGV4Owogc3RhdGljIGNvbnN0IEJsb2NrSW5kZXggTm9CbG9jayA9IFVJTlRfTUFY
OwogCi1zdHJ1Y3QgTm9kZUluZGV4VHJhaXRzIHsKLSAgICBzdGF0aWMgTm9kZUluZGV4IGRlZmF1
bHRWYWx1ZSgpIHsgcmV0dXJuIE5vTm9kZTsgfQotICAgIHN0YXRpYyB2b2lkIGR1bXAoTm9kZUlu
ZGV4IHZhbHVlLCBQcmludFN0cmVhbSYgb3V0KQorc3RydWN0IE5vZGVQb2ludGVyVHJhaXRzIHsK
KyAgICBzdGF0aWMgTm9kZSogZGVmYXVsdFZhbHVlKCkgeyByZXR1cm4gMDsgfQorICAgIHN0YXRp
YyB2b2lkIGR1bXAoTm9kZSogdmFsdWUsIFByaW50U3RyZWFtJiBvdXQpOwogICAgIHsKICAgICAg
ICAgaWYgKHZhbHVlID09IE5vTm9kZSkKICAgICAgICAgICAgIG91dC5wcmludGYoIi0iKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRWRnZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRWRnZS5oCShyZXZpc2lvbiAxMzk1ODYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0VkZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDMsNDEg
KzQzLDM5IEBAIHB1YmxpYzoKICAgICB7CiAgICAgfQogICAgIAotICAgIGV4cGxpY2l0IEVkZ2Uo
Tm9kZUluZGV4IG5vZGVJbmRleCkKLSAgICAgICAgOiBtX2VuY29kZWRXb3JkKG1ha2VXb3JkKG5v
ZGVJbmRleCwgVW50eXBlZFVzZSkpCisgICAgZXhwbGljaXQgRWRnZShOb2RlKiBub2RlKQorICAg
ICAgICA6IG1fZW5jb2RlZFdvcmQobWFrZVdvcmQobm9kZSwgVW50eXBlZFVzZSkpCiAgICAgewog
ICAgIH0KICAgICAKLSAgICBFZGdlKE5vZGVJbmRleCBub2RlSW5kZXgsIFVzZUtpbmQgdXNlS2lu
ZCkKLSAgICAgICAgOiBtX2VuY29kZWRXb3JkKG1ha2VXb3JkKG5vZGVJbmRleCwgdXNlS2luZCkp
CisgICAgRWRnZShOb2RlKiBub2RlLCBVc2VLaW5kIHVzZUtpbmQpCisgICAgICAgIDogbV9lbmNv
ZGVkV29yZChtYWtlV29yZChub2RlLCB1c2VLaW5kKSkKICAgICB7CiAgICAgfQogICAgIAotICAg
IE5vZGVJbmRleCBpbmRleFVuY2hlY2tlZCgpIGNvbnN0IHsgcmV0dXJuIG1fZW5jb2RlZFdvcmQg
Pj4gc2hpZnQoKTsgfQotICAgIE5vZGVJbmRleCBpbmRleCgpIGNvbnN0Ci0gICAgewotICAgICAg
ICBBU1NFUlQoaXNTZXQoKSk7Ci0gICAgICAgIHJldHVybiBtX2VuY29kZWRXb3JkID4+IHNoaWZ0
KCk7Ci0gICAgfQotICAgIHZvaWQgc2V0SW5kZXgoTm9kZUluZGV4IG5vZGVJbmRleCkKKyAgICBO
b2RlKiBub2RlKCkgY29uc3QgeyByZXR1cm4gbV9lbmNvZGVkV29yZCAmIH4oKDEgPDwgc2hpZnQo
KSkgLSAxKTsgfQorICAgIE5vZGUmIG9wZXJhdG9yKigpIGNvbnN0IHsgcmV0dXJuICpnZXQoKTsg
fQorICAgIE5vZGUqIG9wZXJhdG9yLT4oKSBjb25zdCB7IHJldHVybiBnZXQoKTsgfQorICAgIAor
ICAgIHZvaWQgc2V0Tm9kZShOb2RlKiBub2RlKQogICAgIHsKLSAgICAgICAgbV9lbmNvZGVkV29y
ZCA9IG1ha2VXb3JkKG5vZGVJbmRleCwgdXNlS2luZCgpKTsKKyAgICAgICAgbV9lbmNvZGVkV29y
ZCA9IG1ha2VXb3JkKG5vZGUsIHVzZUtpbmQoKSk7CiAgICAgfQogICAgIAogICAgIFVzZUtpbmQg
dXNlS2luZCgpIGNvbnN0CiAgICAgewotICAgICAgICBBU1NFUlQoaXNTZXQoKSk7CisgICAgICAg
IEFTU0VSVChub2RlKCkpOwogICAgICAgICB1bnNpZ25lZCBtYXNrZWQgPSBtX2VuY29kZWRXb3Jk
ICYgKCgoMSA8PCBzaGlmdCgpKSAtIDEpKTsKICAgICAgICAgQVNTRVJUKG1hc2tlZCA8IExhc3RV
c2VLaW5kKTsKICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFVzZUtpbmQ+KG1hc2tlZCk7CiAg
ICAgfQogICAgIHZvaWQgc2V0VXNlS2luZChVc2VLaW5kIHVzZUtpbmQpCiAgICAgewotICAgICAg
ICBBU1NFUlQoaXNTZXQoKSk7Ci0gICAgICAgIG1fZW5jb2RlZFdvcmQgPSBtYWtlV29yZChpbmRl
eCgpLCB1c2VLaW5kKTsKKyAgICAgICAgQVNTRVJUKG5vZGUoKSk7CisgICAgICAgIG1fZW5jb2Rl
ZFdvcmQgPSBtYWtlV29yZChub2RlKCksIHVzZUtpbmQpOwogICAgIH0KICAgICAKLSAgICBib29s
IGlzU2V0KCkgY29uc3QgeyByZXR1cm4gaW5kZXhVbmNoZWNrZWQoKSAhPSBOb05vZGU7IH0KKyAg
ICBib29sIGlzU2V0KCkgY29uc3QgeyByZXR1cm4gISFub2RlKCk7IH0KICAgICAKICAgICB0eXBl
ZGVmIHZvaWQqIEVkZ2U6OipVbnNwZWNpZmllZEJvb2xUeXBlOwogICAgIG9wZXJhdG9yIFVuc3Bl
Y2lmaWVkQm9vbFR5cGUqKCkgY29uc3QgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxVbnNwZWNp
ZmllZEJvb2xUeXBlKj4oaXNTZXQoKSk7IH0KQEAgLTk2LDE3ICs5NCwxOCBAQCBwdWJsaWM6CiBw
cml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBBZGphY2VuY3lMaXN0OwogICAgIAotICAgIHN0YXRp
YyB1aW50MzJfdCBzaGlmdCgpIHsgcmV0dXJuIDQ7IH0KKyAgICBzdGF0aWMgdWludDMyX3Qgc2hp
ZnQoKSB7IHJldHVybiAyOyB9CiAgICAgCi0gICAgc3RhdGljIGludDMyX3QgbWFrZVdvcmQoTm9k
ZUluZGV4IG5vZGVJbmRleCwgVXNlS2luZCB1c2VLaW5kKQorICAgIHN0YXRpYyB1aW50cHRyX3Qg
bWFrZVdvcmQoTm9kZSogbm9kZSwgVXNlS2luZCB1c2VLaW5kKQogICAgIHsKLSAgICAgICAgQVNT
RVJUKHN0YXRpY19jYXN0PHVpbnQzMl90PigoKHN0YXRpY19jYXN0PGludDMyX3Q+KG5vZGVJbmRl
eCkgPDwgc2hpZnQoKSkgPj4gc2hpZnQoKSkpID09IG5vZGVJbmRleCk7CisgICAgICAgIHVpbnRw
dHJfdCB2YWx1ZSA9IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KG5vZGUpOworICAgICAgICBBU1NF
UlQoISh2YWx1ZSAmICgoMSA8PCBzaGlmdCgpKSAtIDEpKSk7CiAgICAgICAgIEFTU0VSVCh1c2VL
aW5kID49IDAgJiYgdXNlS2luZCA8IExhc3RVc2VLaW5kKTsKICAgICAgICAgQVNTRVJUKExhc3RV
c2VLaW5kIDw9ICgxIDw8IHNoaWZ0KCkpKTsKLSAgICAgICAgcmV0dXJuIChub2RlSW5kZXggPDwg
c2hpZnQoKSkgfCB1c2VLaW5kOworICAgICAgICByZXR1cm4gdmFsdWUgfCBzdGF0aWNfY2FzdDx1
aW50cHRyX3Q+KHVzZUtpbmQpOwogICAgIH0KICAgICAKLSAgICBpbnQzMl90IG1fZW5jb2RlZFdv
cmQ7CisgICAgdWludHB0cl90IG1fZW5jb2RlZFdvcmQ7CiB9OwogCiBpbmxpbmUgYm9vbCBvcGVy
YXRvcj09KEVkZ2Ugbm9kZVVzZSwgTm9kZUluZGV4IG5vZGVJbmRleCkKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCShyZXZpc2lvbiAxMzk1ODYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDYsNiAr
NDYsNyBAQCBHcmFwaDo6R3JhcGgoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBDCiAgICAgLCBt
X2NvZGVCbG9jayhjb2RlQmxvY2spCiAgICAgLCBtX2NvbXBpbGF0aW9uKGdsb2JhbERhdGEubV9w
ZXJCeXRlY29kZVByb2ZpbGVyID8gZ2xvYmFsRGF0YS5tX3BlckJ5dGVjb2RlUHJvZmlsZXItPm5l
d0NvbXBpbGF0aW9uKGNvZGVCbG9jaywgUHJvZmlsZXI6OkRGRykgOiAwKQogICAgICwgbV9wcm9m
aWxlZEJsb2NrKGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKSkKKyAgICAsIG1fYWxsb2NhdG9yKGds
b2JhbERhdGEubV9kZmdTdGF0ZS0+bV9hbGxvY2F0b3IpCiAgICAgLCBtX2hhc0FyZ3VtZW50cyhm
YWxzZSkKICAgICAsIG1fb3NyRW50cnlCeXRlY29kZUluZGV4KG9zckVudHJ5Qnl0ZWNvZGVJbmRl
eCkKICAgICAsIG1fbXVzdEhhbmRsZVZhbHVlcyhtdXN0SGFuZGxlVmFsdWVzKQpAQCAtNTQsNiAr
NTUsMTEgQEAgR3JhcGg6OkdyYXBoKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgQwogICAgIEFT
U0VSVChtX3Byb2ZpbGVkQmxvY2spOwogfQogCitHcmFwaDo6fkdyYXBoKCkKK3sKKyAgICBtX2Fs
bG9jYXRvci5mcmVlQWxsKCk7Cit9CisKIGNvbnN0IGNoYXIgKkdyYXBoOjpvcE5hbWUoTm9kZVR5
cGUgb3ApCiB7CiAgICAgcmV0dXJuIGRmZ09wTmFtZXNbb3BdOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHR3JhcGguaAkocmV2aXNpb24gMTM5NTg2KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdHcmFwaC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTIsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNSw3ICszNSw5IEBA
CiAjaW5jbHVkZSAiREZHQXNzZW1ibHlIZWxwZXJzLmgiCiAjaW5jbHVkZSAiREZHQmFzaWNCbG9j
ay5oIgogI2luY2x1ZGUgIkRGR0RvbWluYXRvcnMuaCIKKyNpbmNsdWRlICJERkdMb25nTGl2ZWRT
dGF0ZS5oIgogI2luY2x1ZGUgIkRGR05vZGUuaCIKKyNpbmNsdWRlICJERkdOb2RlQWxsb2NhdG9y
LmgiCiAjaW5jbHVkZSAiSlNTdGFjay5oIgogI2luY2x1ZGUgIk1ldGhvZE9mR2V0dGluZ0FWYWx1
ZVByb2ZpbGUuaCIKICNpbmNsdWRlIDx3dGYvQml0VmVjdG9yLmg+CkBAIC04Miw1NCArODQsNDYg
QEAgZW51bSBBZGRTcGVjdWxhdGlvbk1vZGUgewogLy8KIC8vID09PSBHcmFwaCA9PT0KIC8vCi0v
LyBUaGUgZGF0YWZsb3cgZ3JhcGggaXMgYW4gb3JkZXJlZCB2ZWN0b3Igb2Ygbm9kZXMuCiAvLyBU
aGUgb3JkZXIgbWF5IGJlIHNpZ25pZmljYW50IGZvciBub2RlcyB3aXRoIHNpZGUtZWZmZWN0cyAo
cHJvcGVydHkgYWNjZXNzZXMsIHZhbHVlIGNvbnZlcnNpb25zKS4KIC8vIE5vZGVzIHRoYXQgYXJl
ICdkZWFkJyByZW1haW4gaW4gdGhlIHZlY3RvciB3aXRoIHJlZkNvdW50IDAuCi1jbGFzcyBHcmFw
aCA6IHB1YmxpYyBWZWN0b3I8Tm9kZSwgNjQ+IHsKK2NsYXNzIEdyYXBoIHsKIHB1YmxpYzoKICAg
ICBHcmFwaChKU0dsb2JhbERhdGEmLCBDb2RlQmxvY2sqLCB1bnNpZ25lZCBvc3JFbnRyeUJ5dGVj
b2RlSW5kZXgsIGNvbnN0IE9wZXJhbmRzPEpTVmFsdWU+JiBtdXN0SGFuZGxlVmFsdWVzKTsKLSAg
ICAKLSAgICB1c2luZyBWZWN0b3I8Tm9kZSwgNjQ+OjpvcGVyYXRvcltdOwotICAgIHVzaW5nIFZl
Y3RvcjxOb2RlLCA2ND46OmF0OwotICAgIAotICAgIE5vZGUmIG9wZXJhdG9yW10oRWRnZSBub2Rl
VXNlKSB7IHJldHVybiBhdChub2RlVXNlLmluZGV4KCkpOyB9Ci0gICAgY29uc3QgTm9kZSYgb3Bl
cmF0b3JbXShFZGdlIG5vZGVVc2UpIGNvbnN0IHsgcmV0dXJuIGF0KG5vZGVVc2UuaW5kZXgoKSk7
IH0KLSAgICAKLSAgICBOb2RlJiBhdChFZGdlIG5vZGVVc2UpIHsgcmV0dXJuIGF0KG5vZGVVc2Uu
aW5kZXgoKSk7IH0KLSAgICBjb25zdCBOb2RlJiBhdChFZGdlIG5vZGVVc2UpIGNvbnN0IHsgcmV0
dXJuIGF0KG5vZGVVc2UuaW5kZXgoKSk7IH0KKyAgICB+R3JhcGgoKTsKICAgICAKICAgICAvLyBN
YXJrIGEgbm9kZSBhcyBiZWluZyByZWZlcmVuY2VkLgotICAgIHZvaWQgcmVmKE5vZGVJbmRleCBu
b2RlSW5kZXgpCisgICAgdm9pZCByZWYoTm9kZSogbm9kZSkKICAgICB7Ci0gICAgICAgIE5vZGUm
IG5vZGUgPSBhdChub2RlSW5kZXgpOwogICAgICAgICAvLyBJZiB0aGUgdmFsdWUgKGJlZm9yZSBp
bmNyZW1lbnRpbmcpIHdhcyBhdCByZWZDb3VudCB6ZXJvIHRoZW4gd2UgbmVlZCB0byByZWYgaXRz
IGNoaWxkcmVuLgotICAgICAgICBpZiAobm9kZS5yZWYoKSkKLSAgICAgICAgICAgIHJlZkNoaWxk
cmVuKG5vZGVJbmRleCk7CisgICAgICAgIGlmIChub2RlLT5yZWYoKSkKKyAgICAgICAgICAgIHJl
ZkNoaWxkcmVuKG5vZGUpOwogICAgIH0KICAgICB2b2lkIHJlZihFZGdlIG5vZGVVc2UpCiAgICAg
ewotICAgICAgICByZWYobm9kZVVzZS5pbmRleCgpKTsKKyAgICAgICAgcmVmKG5vZGVVc2Uubm9k
ZSgpKTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBkZXJlZihOb2RlSW5kZXggbm9kZUluZGV4KQor
ICAgIHZvaWQgZGVyZWYoTm9kZSogbm9kZSkKICAgICB7Ci0gICAgICAgIGlmICghYXQobm9kZUlu
ZGV4KS5yZWZDb3VudCgpKQorI2lmICFBU1NFUlRfRElTQUJMRUQKKyAgICAgICAgaWYgKCFub2Rl
LT5yZWZDb3VudCgpKQogICAgICAgICAgICAgZHVtcCgpOwotICAgICAgICBpZiAoYXQobm9kZUlu
ZGV4KS5kZXJlZigpKQotICAgICAgICAgICAgZGVyZWZDaGlsZHJlbihub2RlSW5kZXgpOworI2Vu
ZGlmCisgICAgICAgIGlmIChub2RlLT5kZXJlZigpKQorICAgICAgICAgICAgZGVyZWZDaGlsZHJl
bihub2RlKTsKICAgICB9CiAgICAgdm9pZCBkZXJlZihFZGdlIG5vZGVVc2UpCiAgICAgewotICAg
ICAgICBkZXJlZihub2RlVXNlLmluZGV4KCkpOworICAgICAgICBkZXJlZihub2RlVXNlLm5vZGUo
KSk7CiAgICAgfQogICAgIAotICAgIHZvaWQgY2hhbmdlSW5kZXgoRWRnZSYgZWRnZSwgTm9kZUlu
ZGV4IG5ld0luZGV4LCBib29sIGNoYW5nZVJlZiA9IHRydWUpCisgICAgdm9pZCBjaGFuZ2VJbmRl
eChFZGdlJiBlZGdlLCBOb2RlKiBuZXdOb2RlLCBib29sIGNoYW5nZVJlZiA9IHRydWUpCiAgICAg
ewogICAgICAgICBpZiAoY2hhbmdlUmVmKSB7Ci0gICAgICAgICAgICByZWYobmV3SW5kZXgpOwot
ICAgICAgICAgICAgZGVyZWYoZWRnZS5pbmRleCgpKTsKKyAgICAgICAgICAgIHJlZihuZXdOb2Rl
KTsKKyAgICAgICAgICAgIGRlcmVmKGVkZ2Uubm9kZSgpKTsKICAgICAgICAgfQotICAgICAgICBl
ZGdlLnNldEluZGV4KG5ld0luZGV4KTsKKyAgICAgICAgZWRnZS5zZXROb2RlKG5ld05vZGUpOwog
ICAgIH0KICAgICAKICAgICB2b2lkIGNoYW5nZUVkZ2UoRWRnZSYgZWRnZSwgRWRnZSBuZXdFZGdl
LCBib29sIGNoYW5nZVJlZiA9IHRydWUpCkBAIC0xNDEsMTEgKzEzNSwxMSBAQCBwdWJsaWM6CiAg
ICAgICAgIGVkZ2UgPSBuZXdFZGdlOwogICAgIH0KICAgICAKLSAgICB2b2lkIGNvbXBhcmVBbmRT
d2FwKEVkZ2UmIGVkZ2UsIE5vZGVJbmRleCBvbGRJbmRleCwgTm9kZUluZGV4IG5ld0luZGV4LCBi
b29sIGNoYW5nZVJlZikKKyAgICB2b2lkIGNvbXBhcmVBbmRTd2FwKEVkZ2UmIGVkZ2UsIE5vZGUq
IG9sZE5vZGUsIE5vZGUqIG5ld05vZGUsIGJvb2wgY2hhbmdlUmVmKQogICAgIHsKLSAgICAgICAg
aWYgKGVkZ2UuaW5kZXgoKSAhPSBvbGRJbmRleCkKKyAgICAgICAgaWYgKGVkZ2Uubm9kZSgpICE9
IG9sZE5vZGUpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGNoYW5nZUluZGV4KGVkZ2Us
IG5ld0luZGV4LCBjaGFuZ2VSZWYpOworICAgICAgICBjaGFuZ2VJbmRleChlZGdlLCBuZXdOb2Rl
LCBjaGFuZ2VSZWYpOwogICAgIH0KICAgICAKICAgICB2b2lkIGNvbXBhcmVBbmRTd2FwKEVkZ2Um
IGVkZ2UsIEVkZ2Ugb2xkRWRnZSwgRWRnZSBuZXdFZGdlLCBib29sIGNoYW5nZVJlZikKQEAgLTE1
NSwyOSArMTQ5LDE2IEBAIHB1YmxpYzoKICAgICAgICAgY2hhbmdlRWRnZShlZGdlLCBuZXdFZGdl
LCBjaGFuZ2VSZWYpOwogICAgIH0KICAgICAKLSAgICB2b2lkIGNsZWFyQW5kRGVyZWZDaGlsZDEo
Tm9kZSYgbm9kZSkKLSAgICB7Ci0gICAgICAgIGlmICghbm9kZS5jaGlsZDEoKSkKLSAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgZGVyZWYobm9kZS5jaGlsZDEoKSk7Ci0gICAgICAgIG5vZGUu
Y2hpbGRyZW4uY2hpbGQxKCkgPSBFZGdlKCk7Ci0gICAgfQotCi0gICAgdm9pZCBjbGVhckFuZERl
cmVmQ2hpbGQyKE5vZGUmIG5vZGUpCisgICAgdm9pZCBjbGVhckFuZERlcmVmQ2hpbGQoTm9kZSog
bm9kZSwgdW5zaWduZWQgaW5kZXgpCiAgICAgewotICAgICAgICBpZiAoIW5vZGUuY2hpbGQyKCkp
CisgICAgICAgIGlmICghbm9kZS0+Y2hpbGRyZW4uY2hpbGQoaW5kZXgpKQogICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICBkZXJlZihub2RlLmNoaWxkMigpKTsKLSAgICAgICAgbm9kZS5jaGls
ZHJlbi5jaGlsZDIoKSA9IEVkZ2UoKTsKLSAgICB9Ci0KLSAgICB2b2lkIGNsZWFyQW5kRGVyZWZD
aGlsZDMoTm9kZSYgbm9kZSkKLSAgICB7Ci0gICAgICAgIGlmICghbm9kZS5jaGlsZDMoKSkKLSAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgZGVyZWYobm9kZS5jaGlsZDMoKSk7Ci0gICAgICAg
IG5vZGUuY2hpbGRyZW4uY2hpbGQzKCkgPSBFZGdlKCk7CisgICAgICAgIGRlcmVmKG5vZGUtPmNo
aWxkcmVuLmNoaWxkKGluZGV4KSk7CisgICAgICAgIG5vZGUuY2hpbGRyZW4uc2V0Q2hpbGQoaW5k
ZXgsIEVkZ2UoKSk7CiAgICAgfQorICAgIHZvaWQgY2xlYXJBbmREZXJlZkNoaWxkMShOb2RlKiBu
b2RlKSB7IGNsZWFyQW5kRGVyZWZDaGlsZChub2RlLCAwKTsgfQorICAgIHZvaWQgY2xlYXJBbmRE
ZXJlZkNoaWxkMihOb2RlKiBub2RlKSB7IGNsZWFyQW5kRGVyZWZDaGlsZChub2RlLCAxKTsgfQor
ICAgIHZvaWQgY2xlYXJBbmREZXJlZkNoaWxkMyhOb2RlKiBub2RlKSB7IGNsZWFyQW5kRGVyZWZD
aGlsZChub2RlLCAyKTsgfQogICAgIAogICAgIC8vIENhbGwgdGhpcyBpZiB5b3UndmUgbW9kaWZp
ZWQgdGhlIHJlZmVyZW5jZSBjb3VudHMgb2Ygbm9kZXMgdGhhdCBkZWFsIHdpdGgKICAgICAvLyBs
b2NhbCB2YXJpYWJsZXMuIFRoaXMgaXMgbmVjZXNzYXJ5IGJlY2F1c2UgbG9jYWwgdmFyaWFibGUg
cmVmZXJlbmNlcyBjYW4gZm9ybQpAQCAtMTg1LDE0ICsxNjYsMTQgQEAgcHVibGljOgogICAgIC8v
IHJlZmVyZW5jZSBjb3VudHMgYWNjb3JkaW5nIHRvIHJlYWNoYWJpbGl0eS4KICAgICB2b2lkIGNv
bGxlY3RHYXJiYWdlKCk7CiAgICAgCi0gICAgdm9pZCBjb252ZXJ0VG9Db25zdGFudChOb2RlSW5k
ZXggbm9kZUluZGV4LCB1bnNpZ25lZCBjb25zdGFudE51bWJlcikKKyAgICB2b2lkIGNvbnZlcnRU
b0NvbnN0YW50KE5vZGUqIG5vZGUsIHVuc2lnbmVkIGNvbnN0YW50TnVtYmVyKQogICAgIHsKLSAg
ICAgICAgYXQobm9kZUluZGV4KS5jb252ZXJ0VG9Db25zdGFudChjb25zdGFudE51bWJlcik7Cisg
ICAgICAgIG5vZGUtPmNvbnZlcnRUb0NvbnN0YW50KGNvbnN0YW50TnVtYmVyKTsKICAgICB9CiAg
ICAgCi0gICAgdm9pZCBjb252ZXJ0VG9Db25zdGFudChOb2RlSW5kZXggbm9kZUluZGV4LCBKU1Zh
bHVlIHZhbHVlKQorICAgIHZvaWQgY29udmVydFRvQ29uc3RhbnQoTm9kZSogbm9kZSwgSlNWYWx1
ZSB2YWx1ZSkKICAgICB7Ci0gICAgICAgIGNvbnZlcnRUb0NvbnN0YW50KG5vZGVJbmRleCwgbV9j
b2RlQmxvY2stPmFkZE9yRmluZENvbnN0YW50KHZhbHVlKSk7CisgICAgICAgIGNvbnZlcnRUb0Nv
bnN0YW50KG5vZGUsIG1fY29kZUJsb2NrLT5hZGRPckZpbmRDb25zdGFudCh2YWx1ZSkpOwogICAg
IH0KIAogICAgIC8vIENvZGVCbG9jayBpcyBvcHRpb25hbCwgYnV0IG1heSBhbGxvdyBhZGRpdGlv
bmFsIGluZm9ybWF0aW9uIHRvIGJlIGR1bXBlZCAoZS5nLiBJZGVudGlmaWVyIG5hbWVzKS4KQEAg
LTIwMCwxMjUgKzE4MSwxMjUgQEAgcHVibGljOgogICAgIGVudW0gUGhpTm9kZUR1bXBNb2RlIHsg
RHVtcExpdmVQaGlzT25seSwgRHVtcEFsbFBoaXMgfTsKICAgICB2b2lkIGR1bXBCbG9ja0hlYWRl
cihQcmludFN0cmVhbSYsIGNvbnN0IGNoYXIqIHByZWZpeCwgQmxvY2tJbmRleCwgUGhpTm9kZUR1
bXBNb2RlKTsKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mLCBFZGdlKTsKLSAgICB2b2lkIGR1
bXAoUHJpbnRTdHJlYW0mLCBjb25zdCBjaGFyKiBwcmVmaXgsIE5vZGVJbmRleCk7Ci0gICAgc3Rh
dGljIGludCBhbW91bnRPZk5vZGVXaGl0ZVNwYWNlKE5vZGUmKTsKLSAgICBzdGF0aWMgdm9pZCBw
cmludE5vZGVXaGl0ZVNwYWNlKFByaW50U3RyZWFtJiwgTm9kZSYpOworICAgIHZvaWQgZHVtcChQ
cmludFN0cmVhbSYsIGNvbnN0IGNoYXIqIHByZWZpeCwgTm9kZSopOworICAgIHN0YXRpYyBpbnQg
YW1vdW50T2ZOb2RlV2hpdGVTcGFjZShOb2RlKik7CisgICAgc3RhdGljIHZvaWQgcHJpbnROb2Rl
V2hpdGVTcGFjZShQcmludFN0cmVhbSYsIE5vZGUqKTsKIAogICAgIC8vIER1bXAgdGhlIGNvZGUg
b3JpZ2luIG9mIHRoZSBnaXZlbiBub2RlIGFzIGEgZGlmZiBmcm9tIHRoZSBjb2RlIG9yaWdpbiBv
ZiB0aGUKICAgICAvLyBwcmVjZWRpbmcgbm9kZS4gUmV0dXJucyB0cnVlIGlmIGFueXRoaW5nIHdh
cyBwcmludGVkLgotICAgIGJvb2wgZHVtcENvZGVPcmlnaW4oUHJpbnRTdHJlYW0mLCBjb25zdCBj
aGFyKiBwcmVmaXgsIE5vZGVJbmRleCwgTm9kZUluZGV4KTsKKyAgICBib29sIGR1bXBDb2RlT3Jp
Z2luKFByaW50U3RyZWFtJiwgY29uc3QgY2hhciogcHJlZml4LCBOb2RlKiBwcmV2aW91c05vZGUs
IE5vZGUqIHN1YnNlcXVlbnROb2RlKTsKIAogICAgIEJsb2NrSW5kZXggYmxvY2tJbmRleEZvckJ5
dGVjb2RlT2Zmc2V0KFZlY3RvcjxCbG9ja0luZGV4PiYgYmxvY2tzLCB1bnNpZ25lZCBieXRlY29k
ZUJlZ2luKTsKIAotICAgIFNwZWN1bGF0ZWRUeXBlIGdldEpTQ29uc3RhbnRTcGVjdWxhdGlvbihO
b2RlJiBub2RlKQorICAgIFNwZWN1bGF0ZWRUeXBlIGdldEpTQ29uc3RhbnRTcGVjdWxhdGlvbihO
b2RlKiBub2RlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIHNwZWN1bGF0aW9uRnJvbVZhbHVlKG5v
ZGUudmFsdWVPZkpTQ29uc3RhbnQobV9jb2RlQmxvY2spKTsKKyAgICAgICAgcmV0dXJuIHNwZWN1
bGF0aW9uRnJvbVZhbHVlKG5vZGUtPnZhbHVlT2ZKU0NvbnN0YW50KG1fY29kZUJsb2NrKSk7CiAg
ICAgfQogICAgIAotICAgIEFkZFNwZWN1bGF0aW9uTW9kZSBhZGRTcGVjdWxhdGlvbk1vZGUoTm9k
ZSYgYWRkLCBib29sIGxlZnRTaG91bGRTcGVjdWxhdGVJbnRlZ2VyLCBib29sIHJpZ2h0U2hvdWxk
U3BlY3VsYXRlSW50ZWdlcikKKyAgICBBZGRTcGVjdWxhdGlvbk1vZGUgYWRkU3BlY3VsYXRpb25N
b2RlKE5vZGUqIGFkZCwgYm9vbCBsZWZ0U2hvdWxkU3BlY3VsYXRlSW50ZWdlciwgYm9vbCByaWdo
dFNob3VsZFNwZWN1bGF0ZUludGVnZXIpCiAgICAgewotICAgICAgICBBU1NFUlQoYWRkLm9wKCkg
PT0gVmFsdWVBZGQgfHwgYWRkLm9wKCkgPT0gQXJpdGhBZGQgfHwgYWRkLm9wKCkgPT0gQXJpdGhT
dWIpOworICAgICAgICBBU1NFUlQoYWRkLT5vcCgpID09IFZhbHVlQWRkIHx8IGFkZC0+b3AoKSA9
PSBBcml0aEFkZCB8fCBhZGQtPm9wKCkgPT0gQXJpdGhTdWIpOwogICAgICAgICAKLSAgICAgICAg
Tm9kZSYgbGVmdCA9IGF0KGFkZC5jaGlsZDEoKSk7Ci0gICAgICAgIE5vZGUmIHJpZ2h0ID0gYXQo
YWRkLmNoaWxkMigpKTsKKyAgICAgICAgTm9kZSogbGVmdCA9IGFkZC0+Y2hpbGQxKCkubm9kZSgp
OworICAgICAgICBOb2RlKiByaWdodCA9IGFkZC0+Y2hpbGQyKCkubm9kZSgpOwogICAgICAgICAK
LSAgICAgICAgaWYgKGxlZnQuaGFzQ29uc3RhbnQoKSkKKyAgICAgICAgaWYgKGxlZnQtPmhhc0Nv
bnN0YW50KCkpCiAgICAgICAgICAgICByZXR1cm4gYWRkSW1tZWRpYXRlU2hvdWxkU3BlY3VsYXRl
SW50ZWdlcihhZGQsIHJpZ2h0U2hvdWxkU3BlY3VsYXRlSW50ZWdlciwgbGVmdCk7Ci0gICAgICAg
IGlmIChyaWdodC5oYXNDb25zdGFudCgpKQorICAgICAgICBpZiAocmlnaHQtPmhhc0NvbnN0YW50
KCkpCiAgICAgICAgICAgICByZXR1cm4gYWRkSW1tZWRpYXRlU2hvdWxkU3BlY3VsYXRlSW50ZWdl
cihhZGQsIGxlZnRTaG91bGRTcGVjdWxhdGVJbnRlZ2VyLCByaWdodCk7CiAgICAgICAgIAotICAg
ICAgICByZXR1cm4gKGxlZnRTaG91bGRTcGVjdWxhdGVJbnRlZ2VyICYmIHJpZ2h0U2hvdWxkU3Bl
Y3VsYXRlSW50ZWdlciAmJiBhZGQuY2FuU3BlY3VsYXRlSW50ZWdlcigpKSA/IFNwZWN1bGF0ZUlu
dGVnZXIgOiBEb250U3BlY3VsYXRlSW50ZWdlcjsKKyAgICAgICAgcmV0dXJuIChsZWZ0U2hvdWxk
U3BlY3VsYXRlSW50ZWdlciAmJiByaWdodFNob3VsZFNwZWN1bGF0ZUludGVnZXIgJiYgYWRkLT5j
YW5TcGVjdWxhdGVJbnRlZ2VyKCkpID8gU3BlY3VsYXRlSW50ZWdlciA6IERvbnRTcGVjdWxhdGVJ
bnRlZ2VyOwogICAgIH0KICAgICAKLSAgICBBZGRTcGVjdWxhdGlvbk1vZGUgdmFsdWVBZGRTcGVj
dWxhdGlvbk1vZGUoTm9kZSYgYWRkKQorICAgIEFkZFNwZWN1bGF0aW9uTW9kZSB2YWx1ZUFkZFNw
ZWN1bGF0aW9uTW9kZShOb2RlKiBhZGQpCiAgICAgewotICAgICAgICByZXR1cm4gYWRkU3BlY3Vs
YXRpb25Nb2RlKGFkZCwgYXQoYWRkLmNoaWxkMSgpKS5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyRXhw
ZWN0aW5nRGVmaW5lZCgpLCBhdChhZGQuY2hpbGQyKCkpLnNob3VsZFNwZWN1bGF0ZUludGVnZXJF
eHBlY3RpbmdEZWZpbmVkKCkpOworICAgICAgICByZXR1cm4gYWRkU3BlY3VsYXRpb25Nb2RlKGFk
ZCwgYWRkLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlSW50ZWdlckV4cGVjdGluZ0RlZmluZWQo
KSwgYWRkLT5jaGlsZDIoKS0+c2hvdWxkU3BlY3VsYXRlSW50ZWdlckV4cGVjdGluZ0RlZmluZWQo
KSk7CiAgICAgfQogICAgIAotICAgIEFkZFNwZWN1bGF0aW9uTW9kZSBhcml0aEFkZFNwZWN1bGF0
aW9uTW9kZShOb2RlJiBhZGQpCisgICAgQWRkU3BlY3VsYXRpb25Nb2RlIGFyaXRoQWRkU3BlY3Vs
YXRpb25Nb2RlKE5vZGUqIGFkZCkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZGRTcGVjdWxhdGlv
bk1vZGUoYWRkLCBhdChhZGQuY2hpbGQxKCkpLnNob3VsZFNwZWN1bGF0ZUludGVnZXJGb3JBcml0
aG1ldGljKCksIGF0KGFkZC5jaGlsZDIoKSkuc2hvdWxkU3BlY3VsYXRlSW50ZWdlckZvckFyaXRo
bWV0aWMoKSk7CisgICAgICAgIHJldHVybiBhZGRTcGVjdWxhdGlvbk1vZGUoYWRkLCBhZGQtPmNo
aWxkMSgpLT5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyRm9yQXJpdGhtZXRpYygpLCBhZGQtPmNoaWxk
MigpLT5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyRm9yQXJpdGhtZXRpYygpKTsKICAgICB9CiAgICAg
Ci0gICAgQWRkU3BlY3VsYXRpb25Nb2RlIGFkZFNwZWN1bGF0aW9uTW9kZShOb2RlJiBhZGQpCisg
ICAgQWRkU3BlY3VsYXRpb25Nb2RlIGFkZFNwZWN1bGF0aW9uTW9kZShOb2RlKiBhZGQpCiAgICAg
ewotICAgICAgICBpZiAoYWRkLm9wKCkgPT0gVmFsdWVBZGQpCisgICAgICAgIGlmIChhZGQtPm9w
KCkgPT0gVmFsdWVBZGQpCiAgICAgICAgICAgICByZXR1cm4gdmFsdWVBZGRTcGVjdWxhdGlvbk1v
ZGUoYWRkKTsKICAgICAgICAgCiAgICAgICAgIHJldHVybiBhcml0aEFkZFNwZWN1bGF0aW9uTW9k
ZShhZGQpOwogICAgIH0KICAgICAKLSAgICBib29sIGFkZFNob3VsZFNwZWN1bGF0ZUludGVnZXIo
Tm9kZSYgYWRkKQorICAgIGJvb2wgYWRkU2hvdWxkU3BlY3VsYXRlSW50ZWdlcihOb2RlKiBhZGQp
CiAgICAgewogICAgICAgICByZXR1cm4gYWRkU3BlY3VsYXRpb25Nb2RlKGFkZCkgIT0gRG9udFNw
ZWN1bGF0ZUludGVnZXI7CiAgICAgfQogICAgIAotICAgIGJvb2wgbXVsU2hvdWxkU3BlY3VsYXRl
SW50ZWdlcihOb2RlJiBtdWwpCisgICAgYm9vbCBtdWxTaG91bGRTcGVjdWxhdGVJbnRlZ2VyKE5v
ZGUqIG11bCkKICAgICB7Ci0gICAgICAgIEFTU0VSVChtdWwub3AoKSA9PSBBcml0aE11bCk7Cisg
ICAgICAgIEFTU0VSVChtdWwtPm9wKCkgPT0gQXJpdGhNdWwpOwogICAgICAgICAKLSAgICAgICAg
Tm9kZSYgbGVmdCA9IGF0KG11bC5jaGlsZDEoKSk7Ci0gICAgICAgIE5vZGUmIHJpZ2h0ID0gYXQo
bXVsLmNoaWxkMigpKTsKKyAgICAgICAgTm9kZSogbGVmdCA9IG11bC0+Y2hpbGQxKCkubm9kZSgp
OworICAgICAgICBOb2RlKiByaWdodCA9IG11bC0+Y2hpbGQyKCkubm9kZSgpOwogICAgICAgICAK
ICAgICAgICAgcmV0dXJuIE5vZGU6OnNob3VsZFNwZWN1bGF0ZUludGVnZXJGb3JBcml0aG1ldGlj
KGxlZnQsIHJpZ2h0KSAmJiBtdWwuY2FuU3BlY3VsYXRlSW50ZWdlcigpOwogICAgIH0KICAgICAK
LSAgICBib29sIG5lZ2F0ZVNob3VsZFNwZWN1bGF0ZUludGVnZXIoTm9kZSYgbmVnYXRlKQorICAg
IGJvb2wgbmVnYXRlU2hvdWxkU3BlY3VsYXRlSW50ZWdlcihOb2RlKiBuZWdhdGUpCiAgICAgewot
ICAgICAgICBBU1NFUlQobmVnYXRlLm9wKCkgPT0gQXJpdGhOZWdhdGUpOwotICAgICAgICByZXR1
cm4gYXQobmVnYXRlLmNoaWxkMSgpKS5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyRm9yQXJpdGhtZXRp
YygpICYmIG5lZ2F0ZS5jYW5TcGVjdWxhdGVJbnRlZ2VyKCk7CisgICAgICAgIEFTU0VSVChuZWdh
dGUtPm9wKCkgPT0gQXJpdGhOZWdhdGUpOworICAgICAgICByZXR1cm4gbmVnYXRlLT5jaGlsZDEo
KS0+c2hvdWxkU3BlY3VsYXRlSW50ZWdlckZvckFyaXRobWV0aWMoKSAmJiBuZWdhdGUtPmNhblNw
ZWN1bGF0ZUludGVnZXIoKTsKICAgICB9CiAgICAgCi0gICAgYm9vbCBhZGRTaG91bGRTcGVjdWxh
dGVJbnRlZ2VyKE5vZGVJbmRleCBub2RlSW5kZXgpCisgICAgYm9vbCBhZGRTaG91bGRTcGVjdWxh
dGVJbnRlZ2VyKE5vZGUqIG5vZGUpCiAgICAgewotICAgICAgICByZXR1cm4gYWRkU2hvdWxkU3Bl
Y3VsYXRlSW50ZWdlcihhdChub2RlSW5kZXgpKTsKKyAgICAgICAgcmV0dXJuIGFkZFNob3VsZFNw
ZWN1bGF0ZUludGVnZXIobm9kZSk7CiAgICAgfQogICAgIAogICAgIC8vIEhlbHBlciBtZXRob2Rz
IHRvIGNoZWNrIG5vZGVzIGZvciBjb25zdGFudHMuCi0gICAgYm9vbCBpc0NvbnN0YW50KE5vZGVJ
bmRleCBub2RlSW5kZXgpCisgICAgYm9vbCBpc0NvbnN0YW50KE5vZGUqIG5vZGUpCiAgICAgewot
ICAgICAgICByZXR1cm4gYXQobm9kZUluZGV4KS5oYXNDb25zdGFudCgpOworICAgICAgICByZXR1
cm4gbm9kZS0+aGFzQ29uc3RhbnQoKTsKICAgICB9Ci0gICAgYm9vbCBpc0pTQ29uc3RhbnQoTm9k
ZUluZGV4IG5vZGVJbmRleCkKKyAgICBib29sIGlzSlNDb25zdGFudChOb2RlKiBub2RlKQogICAg
IHsKLSAgICAgICAgcmV0dXJuIGF0KG5vZGVJbmRleCkuaGFzQ29uc3RhbnQoKTsKKyAgICAgICAg
cmV0dXJuIG5vZGUtPmhhc0NvbnN0YW50KCk7CiAgICAgfQotICAgIGJvb2wgaXNJbnQzMkNvbnN0
YW50KE5vZGVJbmRleCBub2RlSW5kZXgpCisgICAgYm9vbCBpc0ludDMyQ29uc3RhbnQoTm9kZSog
bm9kZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBhdChub2RlSW5kZXgpLmlzSW50MzJDb25zdGFu
dChtX2NvZGVCbG9jayk7CisgICAgICAgIHJldHVybiBub2RlLT5pc0ludDMyQ29uc3RhbnQobV9j
b2RlQmxvY2spOwogICAgIH0KLSAgICBib29sIGlzRG91YmxlQ29uc3RhbnQoTm9kZUluZGV4IG5v
ZGVJbmRleCkKKyAgICBib29sIGlzRG91YmxlQ29uc3RhbnQoTm9kZSogbm9kZSkKICAgICB7Ci0g
ICAgICAgIHJldHVybiBhdChub2RlSW5kZXgpLmlzRG91YmxlQ29uc3RhbnQobV9jb2RlQmxvY2sp
OworICAgICAgICByZXR1cm4gbm9kZS0+aXNEb3VibGVDb25zdGFudChtX2NvZGVCbG9jayk7CiAg
ICAgfQotICAgIGJvb2wgaXNOdW1iZXJDb25zdGFudChOb2RlSW5kZXggbm9kZUluZGV4KQorICAg
IGJvb2wgaXNOdW1iZXJDb25zdGFudChOb2RlKiBub2RlKQogICAgIHsKLSAgICAgICAgcmV0dXJu
IGF0KG5vZGVJbmRleCkuaXNOdW1iZXJDb25zdGFudChtX2NvZGVCbG9jayk7CisgICAgICAgIHJl
dHVybiBub2RlLT5pc051bWJlckNvbnN0YW50KG1fY29kZUJsb2NrKTsKICAgICB9Ci0gICAgYm9v
bCBpc0Jvb2xlYW5Db25zdGFudChOb2RlSW5kZXggbm9kZUluZGV4KQorICAgIGJvb2wgaXNCb29s
ZWFuQ29uc3RhbnQoTm9kZSogbm9kZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBhdChub2RlSW5k
ZXgpLmlzQm9vbGVhbkNvbnN0YW50KG1fY29kZUJsb2NrKTsKKyAgICAgICAgcmV0dXJuIG5vZGUt
PmlzQm9vbGVhbkNvbnN0YW50KG1fY29kZUJsb2NrKTsKICAgICB9Ci0gICAgYm9vbCBpc0NlbGxD
b25zdGFudChOb2RlSW5kZXggbm9kZUluZGV4KQorICAgIGJvb2wgaXNDZWxsQ29uc3RhbnQoTm9k
ZSogbm9kZSkKICAgICB7Ci0gICAgICAgIGlmICghaXNKU0NvbnN0YW50KG5vZGVJbmRleCkpCisg
ICAgICAgIGlmICghaXNKU0NvbnN0YW50KG5vZGUpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICBKU1ZhbHVlIHZhbHVlID0gdmFsdWVPZkpTQ29uc3RhbnQobm9kZUluZGV4KTsK
KyAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IHZhbHVlT2ZKU0NvbnN0YW50KG5vZGUpOwogICAgICAg
ICByZXR1cm4gdmFsdWUuaXNDZWxsKCkgJiYgISF2YWx1ZTsKICAgICB9Ci0gICAgYm9vbCBpc0Z1
bmN0aW9uQ29uc3RhbnQoTm9kZUluZGV4IG5vZGVJbmRleCkKKyAgICBib29sIGlzRnVuY3Rpb25D
b25zdGFudChOb2RlKiBub2RlKQogICAgIHsKLSAgICAgICAgaWYgKCFpc0pTQ29uc3RhbnQobm9k
ZUluZGV4KSkKKyAgICAgICAgaWYgKCFpc0pTQ29uc3RhbnQobm9kZSkpCiAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmICghZ2V0SlNGdW5jdGlvbih2YWx1ZU9mSlNDb25zdGFu
dChub2RlSW5kZXgpKSkKKyAgICAgICAgaWYgKCFnZXRKU0Z1bmN0aW9uKHZhbHVlT2ZKU0NvbnN0
YW50KG5vZGUpKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgfQotICAgIGJvb2wgaXNJbnRlcm5hbEZ1bmN0aW9uQ29uc3RhbnQoTm9kZUluZGV4
IG5vZGVJbmRleCkKKyAgICBib29sIGlzSW50ZXJuYWxGdW5jdGlvbkNvbnN0YW50KE5vZGUqIG5v
ZGUpCiAgICAgewotICAgICAgICBpZiAoIWlzSlNDb25zdGFudChub2RlSW5kZXgpKQorICAgICAg
ICBpZiAoIWlzSlNDb25zdGFudChub2RlKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgSlNWYWx1ZSB2YWx1ZSA9IHZhbHVlT2ZKU0NvbnN0YW50KG5vZGVJbmRleCk7CisgICAg
ICAgIEpTVmFsdWUgdmFsdWUgPSB2YWx1ZU9mSlNDb25zdGFudChub2RlKTsKICAgICAgICAgaWYg
KCF2YWx1ZS5pc0NlbGwoKSB8fCAhdmFsdWUpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgICAgIEpTQ2VsbCogY2VsbCA9IHZhbHVlLmFzQ2VsbCgpOwpAQCAtMzI3LDI1ICszMDgsMjUg
QEAgcHVibGljOgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgLy8gSGVscGVyIG1l
dGhvZHMgZ2V0IGNvbnN0YW50IHZhbHVlcyBmcm9tIG5vZGVzLgotICAgIEpTVmFsdWUgdmFsdWVP
ZkpTQ29uc3RhbnQoTm9kZUluZGV4IG5vZGVJbmRleCkKKyAgICBKU1ZhbHVlIHZhbHVlT2ZKU0Nv
bnN0YW50KE5vZGUqIG5vZGUpCiAgICAgewotICAgICAgICByZXR1cm4gYXQobm9kZUluZGV4KS52
YWx1ZU9mSlNDb25zdGFudChtX2NvZGVCbG9jayk7CisgICAgICAgIHJldHVybiBub2RlLT52YWx1
ZU9mSlNDb25zdGFudChtX2NvZGVCbG9jayk7CiAgICAgfQotICAgIGludDMyX3QgdmFsdWVPZklu
dDMyQ29uc3RhbnQoTm9kZUluZGV4IG5vZGVJbmRleCkKKyAgICBpbnQzMl90IHZhbHVlT2ZJbnQz
MkNvbnN0YW50KE5vZGUqIG5vZGUpCiAgICAgewotICAgICAgICByZXR1cm4gdmFsdWVPZkpTQ29u
c3RhbnQobm9kZUluZGV4KS5hc0ludDMyKCk7CisgICAgICAgIHJldHVybiB2YWx1ZU9mSlNDb25z
dGFudChub2RlKS5hc0ludDMyKCk7CiAgICAgfQotICAgIGRvdWJsZSB2YWx1ZU9mTnVtYmVyQ29u
c3RhbnQoTm9kZUluZGV4IG5vZGVJbmRleCkKKyAgICBkb3VibGUgdmFsdWVPZk51bWJlckNvbnN0
YW50KE5vZGUqIG5vZGUpCiAgICAgewotICAgICAgICByZXR1cm4gdmFsdWVPZkpTQ29uc3RhbnQo
bm9kZUluZGV4KS5hc051bWJlcigpOworICAgICAgICByZXR1cm4gdmFsdWVPZkpTQ29uc3RhbnQo
bm9kZSkuYXNOdW1iZXIoKTsKICAgICB9Ci0gICAgYm9vbCB2YWx1ZU9mQm9vbGVhbkNvbnN0YW50
KE5vZGVJbmRleCBub2RlSW5kZXgpCisgICAgYm9vbCB2YWx1ZU9mQm9vbGVhbkNvbnN0YW50KE5v
ZGUqIG5vZGUpCiAgICAgewotICAgICAgICByZXR1cm4gdmFsdWVPZkpTQ29uc3RhbnQobm9kZUlu
ZGV4KS5hc0Jvb2xlYW4oKTsKKyAgICAgICAgcmV0dXJuIHZhbHVlT2ZKU0NvbnN0YW50KG5vZGUp
LmFzQm9vbGVhbigpOwogICAgIH0KLSAgICBKU0Z1bmN0aW9uKiB2YWx1ZU9mRnVuY3Rpb25Db25z
dGFudChOb2RlSW5kZXggbm9kZUluZGV4KQorICAgIEpTRnVuY3Rpb24qIHZhbHVlT2ZGdW5jdGlv
bkNvbnN0YW50KE5vZGUqIG5vZGUpCiAgICAgewotICAgICAgICBKU0NlbGwqIGZ1bmN0aW9uID0g
Z2V0SlNGdW5jdGlvbih2YWx1ZU9mSlNDb25zdGFudChub2RlSW5kZXgpKTsKKyAgICAgICAgSlND
ZWxsKiBmdW5jdGlvbiA9IGdldEpTRnVuY3Rpb24odmFsdWVPZkpTQ29uc3RhbnQobm9kZSkpOwog
ICAgICAgICBBU1NFUlQoZnVuY3Rpb24pOwogICAgICAgICByZXR1cm4ganNDYXN0PEpTRnVuY3Rp
b24qPihmdW5jdGlvbik7CiAgICAgfQpAQCAtNDIwLDQ1ICs0MDEsNDMgQEAgcHVibGljOgogICAg
ICAgICByZXR1cm4gbV9jb2RlQmxvY2stPnVuY2hlY2tlZEFjdGl2YXRpb25SZWdpc3RlcigpOwog
ICAgIH0KICAgICAKLSAgICBWYWx1ZVByb2ZpbGUqIHZhbHVlUHJvZmlsZUZvcihOb2RlSW5kZXgg
bm9kZUluZGV4KQorICAgIFZhbHVlUHJvZmlsZSogdmFsdWVQcm9maWxlRm9yKE5vZGUqIG5vZGUp
CiAgICAgewotICAgICAgICBpZiAobm9kZUluZGV4ID09IE5vTm9kZSkKKyAgICAgICAgaWYgKCFu
b2RlKQogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIAotICAgICAgICBOb2RlJiBub2Rl
ID0gYXQobm9kZUluZGV4KTsKLSAgICAgICAgQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrID0gYmFz
ZWxpbmVDb2RlQmxvY2tGb3Iobm9kZS5jb2RlT3JpZ2luKTsKKyAgICAgICAgQ29kZUJsb2NrKiBw
cm9maWxlZEJsb2NrID0gYmFzZWxpbmVDb2RlQmxvY2tGb3Iobm9kZS0+Y29kZU9yaWdpbik7CiAg
ICAgICAgIAotICAgICAgICBpZiAobm9kZS5oYXNMb2NhbCgpKSB7Ci0gICAgICAgICAgICBpZiAo
IW9wZXJhbmRJc0FyZ3VtZW50KG5vZGUubG9jYWwoKSkpCisgICAgICAgIGlmIChub2RlLT5oYXNM
b2NhbCgpKSB7CisgICAgICAgICAgICBpZiAoIW9wZXJhbmRJc0FyZ3VtZW50KG5vZGUtPmxvY2Fs
KCkpKQogICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgaW50IGFyZ3VtZW50
ID0gb3BlcmFuZFRvQXJndW1lbnQobm9kZS5sb2NhbCgpKTsKLSAgICAgICAgICAgIGlmIChub2Rl
LnZhcmlhYmxlQWNjZXNzRGF0YSgpICE9IGF0KG1fYXJndW1lbnRzW2FyZ3VtZW50XSkudmFyaWFi
bGVBY2Nlc3NEYXRhKCkpCisgICAgICAgICAgICBpbnQgYXJndW1lbnQgPSBvcGVyYW5kVG9Bcmd1
bWVudChub2RlLT5sb2NhbCgpKTsKKyAgICAgICAgICAgIGlmIChub2RlLT52YXJpYWJsZUFjY2Vz
c0RhdGEoKSAhPSBtX2FyZ3VtZW50c1thcmd1bWVudF0tPnZhcmlhYmxlQWNjZXNzRGF0YSgpKQog
ICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAgcmV0dXJuIHByb2ZpbGVkQmxv
Y2stPnZhbHVlUHJvZmlsZUZvckFyZ3VtZW50KGFyZ3VtZW50KTsKICAgICAgICAgfQogICAgICAg
ICAKLSAgICAgICAgaWYgKG5vZGUuaGFzSGVhcFByZWRpY3Rpb24oKSkKLSAgICAgICAgICAgIHJl
dHVybiBwcm9maWxlZEJsb2NrLT52YWx1ZVByb2ZpbGVGb3JCeXRlY29kZU9mZnNldChub2RlLmNv
ZGVPcmlnaW4uYnl0ZWNvZGVJbmRleEZvclZhbHVlUHJvZmlsZSgpKTsKKyAgICAgICAgaWYgKG5v
ZGUtPmhhc0hlYXBQcmVkaWN0aW9uKCkpCisgICAgICAgICAgICByZXR1cm4gcHJvZmlsZWRCbG9j
ay0+dmFsdWVQcm9maWxlRm9yQnl0ZWNvZGVPZmZzZXQobm9kZS0+Y29kZU9yaWdpbi5ieXRlY29k
ZUluZGV4Rm9yVmFsdWVQcm9maWxlKCkpOwogICAgICAgICAKICAgICAgICAgcmV0dXJuIDA7CiAg
ICAgfQogICAgIAotICAgIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUgbWV0aG9kT2ZHZXR0
aW5nQVZhbHVlUHJvZmlsZUZvcihOb2RlSW5kZXggbm9kZUluZGV4KQorICAgIE1ldGhvZE9mR2V0
dGluZ0FWYWx1ZVByb2ZpbGUgbWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZUZvcihOb2RlKiBu
b2RlKQogICAgIHsKLSAgICAgICAgaWYgKG5vZGVJbmRleCA9PSBOb05vZGUpCisgICAgICAgIGlm
ICghbm9kZSkKICAgICAgICAgICAgIHJldHVybiBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxl
KCk7CiAgICAgICAgIAotICAgICAgICBOb2RlJiBub2RlID0gYXQobm9kZUluZGV4KTsKLSAgICAg
ICAgQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrID0gYmFzZWxpbmVDb2RlQmxvY2tGb3Iobm9kZS5j
b2RlT3JpZ2luKTsKKyAgICAgICAgQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrID0gYmFzZWxpbmVD
b2RlQmxvY2tGb3Iobm9kZS0+Y29kZU9yaWdpbik7CiAgICAgICAgIAotICAgICAgICBpZiAobm9k
ZS5vcCgpID09IEdldExvY2FsKSB7CisgICAgICAgIGlmIChub2RlLT5vcCgpID09IEdldExvY2Fs
KSB7CiAgICAgICAgICAgICByZXR1cm4gTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZTo6ZnJv
bUxhenlPcGVyYW5kKAogICAgICAgICAgICAgICAgIHByb2ZpbGVkQmxvY2ssCiAgICAgICAgICAg
ICAgICAgTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVLZXkoCi0gICAgICAgICAgICAgICAgICAgIG5v
ZGUuY29kZU9yaWdpbi5ieXRlY29kZUluZGV4LCBub2RlLmxvY2FsKCkpKTsKKyAgICAgICAgICAg
ICAgICAgICAgbm9kZS0+Y29kZU9yaWdpbi5ieXRlY29kZUluZGV4LCBub2RlLT5sb2NhbCgpKSk7
CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIHJldHVybiBNZXRob2RPZkdldHRpbmdBVmFs
dWVQcm9maWxlKHZhbHVlUHJvZmlsZUZvcihub2RlSW5kZXgpKTsKKyAgICAgICAgcmV0dXJuIE1l
dGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUodmFsdWVQcm9maWxlRm9yKG5vZGUpKTsKICAgICB9
CiAgICAgCiAgICAgYm9vbCBuZWVkc0FjdGl2YXRpb24oKSBjb25zdApAQCAtNDgyLDIxICs0NjEs
MjEgQEAgcHVibGljOgogICAgIAogICAgIHVuc2lnbmVkIG51bVN1Y2Nlc3NvcnMoQmFzaWNCbG9j
ayogYmxvY2spCiAgICAgewotICAgICAgICByZXR1cm4gYXQoYmxvY2stPmxhc3QoKSkubnVtU3Vj
Y2Vzc29ycygpOworICAgICAgICByZXR1cm4gYmxvY2stPmxhc3QoKS0+bnVtU3VjY2Vzc29ycygp
OwogICAgIH0KICAgICBCbG9ja0luZGV4IHN1Y2Nlc3NvcihCYXNpY0Jsb2NrKiBibG9jaywgdW5z
aWduZWQgaW5kZXgpCiAgICAgewotICAgICAgICByZXR1cm4gYXQoYmxvY2stPmxhc3QoKSkuc3Vj
Y2Vzc29yKGluZGV4KTsKKyAgICAgICAgcmV0dXJuIGJsb2NrLT5sYXN0KCktPnN1Y2Nlc3Nvcihp
bmRleCk7CiAgICAgfQogICAgIEJsb2NrSW5kZXggc3VjY2Vzc29yRm9yQ29uZGl0aW9uKEJhc2lj
QmxvY2sqIGJsb2NrLCBib29sIGNvbmRpdGlvbikKICAgICB7Ci0gICAgICAgIHJldHVybiBhdChi
bG9jay0+bGFzdCgpKS5zdWNjZXNzb3JGb3JDb25kaXRpb24oY29uZGl0aW9uKTsKKyAgICAgICAg
cmV0dXJuIGJsb2NrLT5sYXN0KCktPnN1Y2Nlc3NvckZvckNvbmRpdGlvbihjb25kaXRpb24pOwog
ICAgIH0KICAgICAKLSAgICBib29sIGlzUHJlZGljdGVkTnVtZXJpY2FsKE5vZGUmIG5vZGUpCisg
ICAgYm9vbCBpc1ByZWRpY3RlZE51bWVyaWNhbChOb2RlKiBub2RlKQogICAgIHsKLSAgICAgICAg
U3BlY3VsYXRlZFR5cGUgbGVmdCA9IGF0KG5vZGUuY2hpbGQxKCkpLnByZWRpY3Rpb24oKTsKLSAg
ICAgICAgU3BlY3VsYXRlZFR5cGUgcmlnaHQgPSBhdChub2RlLmNoaWxkMigpKS5wcmVkaWN0aW9u
KCk7CisgICAgICAgIFNwZWN1bGF0ZWRUeXBlIGxlZnQgPSBub2RlLT5jaGlsZDEoKS0+cHJlZGlj
dGlvbigpOworICAgICAgICBTcGVjdWxhdGVkVHlwZSByaWdodCA9IG5vZGUtPmNoaWxkMigpLT5w
cmVkaWN0aW9uKCk7CiAgICAgICAgIHJldHVybiBpc051bWJlclNwZWN1bGF0aW9uKGxlZnQpICYm
IGlzTnVtYmVyU3BlY3VsYXRpb24ocmlnaHQpOwogICAgIH0KICAgICAKQEAgLTUwNiwyMyArNDg1
LDIzIEBAIHB1YmxpYzoKICAgICAvLyAtIFB1dEJ5VmFsIGRlZmluaXRlbHkgY2hhbmdlcyB0aGUg
YXJyYXkgaXQgc3RvcmVzIHRvLCBhbmQgbWF5IGV2ZW4gY2hhbmdlIGl0cyBsZW5ndGguCiAgICAg
Ly8gLSBQdXRCeU9mZnNldCBkZWZpbml0ZWx5IGNoYW5nZXMgdGhlIG9iamVjdCBpdCBzdG9yZXMg
dG8uCiAgICAgLy8gLSBhbmQgc28gb24uCi0gICAgYm9vbCBieVZhbElzUHVyZShOb2RlJiBub2Rl
KQorICAgIGJvb2wgYnlWYWxJc1B1cmUoTm9kZSogbm9kZSkKICAgICB7Ci0gICAgICAgIHN3aXRj
aCAobm9kZS5hcnJheU1vZGUoKS50eXBlKCkpIHsKKyAgICAgICAgc3dpdGNoIChub2RlLT5hcnJh
eU1vZGUoKS50eXBlKCkpIHsKICAgICAgICAgY2FzZSBBcnJheTo6R2VuZXJpYzoKICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgY2FzZSBBcnJheTo6SW50MzI6CiAgICAgICAgIGNh
c2UgQXJyYXk6OkRvdWJsZToKICAgICAgICAgY2FzZSBBcnJheTo6Q29udGlndW91czoKICAgICAg
ICAgY2FzZSBBcnJheTo6QXJyYXlTdG9yYWdlOgotICAgICAgICAgICAgcmV0dXJuICFub2RlLmFy
cmF5TW9kZSgpLmlzT3V0T2ZCb3VuZHMoKTsKKyAgICAgICAgICAgIHJldHVybiAhbm9kZS0+YXJy
YXlNb2RlKCkuaXNPdXRPZkJvdW5kcygpOwogICAgICAgICBjYXNlIEFycmF5OjpTbG93UHV0QXJy
YXlTdG9yYWdlOgotICAgICAgICAgICAgcmV0dXJuICFub2RlLmFycmF5TW9kZSgpLm1heVN0b3Jl
VG9Ib2xlKCk7CisgICAgICAgICAgICByZXR1cm4gIW5vZGUtPmFycmF5TW9kZSgpLm1heVN0b3Jl
VG9Ib2xlKCk7CiAgICAgICAgIGNhc2UgQXJyYXk6OlN0cmluZzoKLSAgICAgICAgICAgIHJldHVy
biBub2RlLm9wKCkgPT0gR2V0QnlWYWw7CisgICAgICAgICAgICByZXR1cm4gbm9kZS0+b3AoKSA9
PSBHZXRCeVZhbDsKICNpZiBVU0UoSlNWQUxVRTMyXzY0KQogICAgICAgICBjYXNlIEFycmF5OjpB
cmd1bWVudHM6Ci0gICAgICAgICAgICBpZiAobm9kZS5vcCgpID09IEdldEJ5VmFsKQorICAgICAg
ICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gR2V0QnlWYWwpCiAgICAgICAgICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAjZW5kaWYgLy8gVVNFKEpTVkFMVUUz
Ml82NCkKQEAgLTUzMSwxMyArNTEwLDEzIEBAIHB1YmxpYzoKICAgICAgICAgfQogICAgIH0KICAg
ICAKLSAgICBib29sIGNsb2JiZXJzV29ybGQoTm9kZSYgbm9kZSkKKyAgICBib29sIGNsb2JiZXJz
V29ybGQoTm9kZSogbm9kZSkKICAgICB7Ci0gICAgICAgIGlmIChub2RlLmZsYWdzKCkgJiBOb2Rl
Q2xvYmJlcnNXb3JsZCkKKyAgICAgICAgaWYgKG5vZGUtPmZsYWdzKCkgJiBOb2RlQ2xvYmJlcnNX
b3JsZCkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBpZiAoIShub2RlLmZsYWdz
KCkgJiBOb2RlTWlnaHRDbG9iYmVyKSkKKyAgICAgICAgaWYgKCEobm9kZS0+ZmxhZ3MoKSAmIE5v
ZGVNaWdodENsb2JiZXIpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBzd2l0
Y2ggKG5vZGUub3AoKSkgeworICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKICAgICAgICAg
Y2FzZSBWYWx1ZUFkZDoKICAgICAgICAgY2FzZSBDb21wYXJlTGVzczoKICAgICAgICAgY2FzZSBD
b21wYXJlTGVzc0VxOgpAQCAtNTU1LDkgKzUzNCw5IEBAIHB1YmxpYzoKICAgICAgICAgfQogICAg
IH0KICAgICAKLSAgICBib29sIGNsb2JiZXJzV29ybGQoTm9kZUluZGV4IG5vZGVJbmRleCkKKyAg
ICBib29sIGNsb2JiZXJzV29ybGQoTm9kZSogbm9kZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBj
bG9iYmVyc1dvcmxkKGF0KG5vZGVJbmRleCkpOworICAgICAgICByZXR1cm4gY2xvYmJlcnNXb3Js
ZChub2RlKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBkZXRlcm1pbmVSZWFjaGFiaWxpdHkoKTsK
QEAgLTU2NSwzMCArNTQ0LDMwIEBAIHB1YmxpYzoKICAgICAKICAgICB2b2lkIHJlc2V0RXhpdFN0
YXRlcygpOwogICAgIAotICAgIHVuc2lnbmVkIHZhckFyZ051bUNoaWxkcmVuKE5vZGUmIG5vZGUp
CisgICAgdW5zaWduZWQgdmFyQXJnTnVtQ2hpbGRyZW4oTm9kZSogbm9kZSkKICAgICB7Ci0gICAg
ICAgIEFTU0VSVChub2RlLmZsYWdzKCkgJiBOb2RlSGFzVmFyQXJncyk7Ci0gICAgICAgIHJldHVy
biBub2RlLm51bUNoaWxkcmVuKCk7CisgICAgICAgIEFTU0VSVChub2RlLT5mbGFncygpICYgTm9k
ZUhhc1ZhckFyZ3MpOworICAgICAgICByZXR1cm4gbm9kZS0+bnVtQ2hpbGRyZW4oKTsKICAgICB9
CiAgICAgCi0gICAgdW5zaWduZWQgbnVtQ2hpbGRyZW4oTm9kZSYgbm9kZSkKKyAgICB1bnNpZ25l
ZCBudW1DaGlsZHJlbihOb2RlKiBub2RlKQogICAgIHsKLSAgICAgICAgaWYgKG5vZGUuZmxhZ3Mo
KSAmIE5vZGVIYXNWYXJBcmdzKQorICAgICAgICBpZiAobm9kZS0+ZmxhZ3MoKSAmIE5vZGVIYXNW
YXJBcmdzKQogICAgICAgICAgICAgcmV0dXJuIHZhckFyZ051bUNoaWxkcmVuKG5vZGUpOwogICAg
ICAgICByZXR1cm4gQWRqYWNlbmN5TGlzdDo6U2l6ZTsKICAgICB9CiAgICAgCi0gICAgRWRnZSYg
dmFyQXJnQ2hpbGQoTm9kZSYgbm9kZSwgdW5zaWduZWQgaW5kZXgpCisgICAgRWRnZSYgdmFyQXJn
Q2hpbGQoTm9kZSogbm9kZSwgdW5zaWduZWQgaW5kZXgpCiAgICAgewotICAgICAgICBBU1NFUlQo
bm9kZS5mbGFncygpICYgTm9kZUhhc1ZhckFyZ3MpOwotICAgICAgICByZXR1cm4gbV92YXJBcmdD
aGlsZHJlbltub2RlLmZpcnN0Q2hpbGQoKSArIGluZGV4XTsKKyAgICAgICAgQVNTRVJUKG5vZGUt
PmZsYWdzKCkgJiBOb2RlSGFzVmFyQXJncyk7CisgICAgICAgIHJldHVybiBtX3ZhckFyZ0NoaWxk
cmVuW25vZGUtPmZpcnN0Q2hpbGQoKSArIGluZGV4XTsKICAgICB9CiAgICAgCi0gICAgRWRnZSYg
Y2hpbGQoTm9kZSYgbm9kZSwgdW5zaWduZWQgaW5kZXgpCisgICAgRWRnZSYgY2hpbGQoTm9kZSog
bm9kZSwgdW5zaWduZWQgaW5kZXgpCiAgICAgewotICAgICAgICBpZiAobm9kZS5mbGFncygpICYg
Tm9kZUhhc1ZhckFyZ3MpCisgICAgICAgIGlmIChub2RlLT5mbGFncygpICYgTm9kZUhhc1ZhckFy
Z3MpCiAgICAgICAgICAgICByZXR1cm4gdmFyQXJnQ2hpbGQobm9kZSwgaW5kZXgpOwotICAgICAg
ICByZXR1cm4gbm9kZS5jaGlsZHJlbi5jaGlsZChpbmRleCk7CisgICAgICAgIHJldHVybiBub2Rl
LT5jaGlsZHJlbi5jaGlsZChpbmRleCk7CiAgICAgfQogICAgIAogICAgIHZvaWQgdm90ZShFZGdl
IGVkZ2UsIHVuc2lnbmVkIGJhbGxvdCkKQEAgLTU5NiwyMSArNTc1LDIxIEBAIHB1YmxpYzoKICAg
ICAgICAgc3dpdGNoIChhdChlZGdlKS5vcCgpKSB7CiAgICAgICAgIGNhc2UgVmFsdWVUb0ludDMy
OgogICAgICAgICBjYXNlIFVJbnQzMlRvTnVtYmVyOgotICAgICAgICAgICAgZWRnZSA9IGF0KGVk
Z2UpLmNoaWxkMSgpOworICAgICAgICAgICAgZWRnZSA9IGVkZ2UtPmNoaWxkMSgpOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgfQogICAgICAgICAKLSAgICAgICAgaWYgKGF0KGVkZ2UpLm9wKCkgPT0gR2V0TG9jYWwpCi0g
ICAgICAgICAgICBhdChlZGdlKS52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+dm90ZShiYWxsb3QpOwor
ICAgICAgICBpZiAoZWRnZS0+b3AoKSA9PSBHZXRMb2NhbCkKKyAgICAgICAgICAgIGVkZ2UtPnZh
cmlhYmxlQWNjZXNzRGF0YSgpLT52b3RlKGJhbGxvdCk7CiAgICAgfQogICAgIAotICAgIHZvaWQg
dm90ZShOb2RlJiBub2RlLCB1bnNpZ25lZCBiYWxsb3QpCisgICAgdm9pZCB2b3RlKE5vZGUqIG5v
ZGUsIHVuc2lnbmVkIGJhbGxvdCkKICAgICB7Ci0gICAgICAgIGlmIChub2RlLmZsYWdzKCkgJiBO
b2RlSGFzVmFyQXJncykgewotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBjaGlsZElkeCA9IG5v
ZGUuZmlyc3RDaGlsZCgpOwotICAgICAgICAgICAgICAgICBjaGlsZElkeCA8IG5vZGUuZmlyc3RD
aGlsZCgpICsgbm9kZS5udW1DaGlsZHJlbigpOworICAgICAgICBpZiAobm9kZS0+ZmxhZ3MoKSAm
IE5vZGVIYXNWYXJBcmdzKSB7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGNoaWxkSWR4ID0g
bm9kZS0+Zmlyc3RDaGlsZCgpOworICAgICAgICAgICAgICAgICBjaGlsZElkeCA8IG5vZGUtPmZp
cnN0Q2hpbGQoKSArIG5vZGUtPm51bUNoaWxkcmVuKCk7CiAgICAgICAgICAgICAgICAgIGNoaWxk
SWR4KyspIHsKICAgICAgICAgICAgICAgICBpZiAoISFtX3ZhckFyZ0NoaWxkcmVuW2NoaWxkSWR4
XSkKICAgICAgICAgICAgICAgICAgICAgdm90ZShtX3ZhckFyZ0NoaWxkcmVuW2NoaWxkSWR4XSwg
YmFsbG90KTsKQEAgLTYxOCwzOSArNTk3LDM4IEBAIHB1YmxpYzoKICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgaWYgKCFub2RlLmNoaWxkMSgpKQorICAg
ICAgICBpZiAoIW5vZGUtPmNoaWxkMSgpKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB2
b3RlKG5vZGUuY2hpbGQxKCksIGJhbGxvdCk7Ci0gICAgICAgIGlmICghbm9kZS5jaGlsZDIoKSkK
KyAgICAgICAgdm90ZShub2RlLT5jaGlsZDEoKSwgYmFsbG90KTsKKyAgICAgICAgaWYgKCFub2Rl
LT5jaGlsZDIoKSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgdm90ZShub2RlLmNoaWxk
MigpLCBiYWxsb3QpOwotICAgICAgICBpZiAoIW5vZGUuY2hpbGQzKCkpCisgICAgICAgIHZvdGUo
bm9kZS0+Y2hpbGQyKCksIGJhbGxvdCk7CisgICAgICAgIGlmICghbm9kZS0+Y2hpbGQzKCkpCiAg
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIHZvdGUobm9kZS5jaGlsZDMoKSwgYmFsbG90KTsK
KyAgICAgICAgdm90ZShub2RlLT5jaGlsZDMoKSwgYmFsbG90KTsKICAgICB9CiAgICAgCi0gICAg
dGVtcGxhdGU8dHlwZW5hbWUgVD4gLy8gVCA9IE5vZGVJbmRleCBvciBFZGdlCisgICAgdGVtcGxh
dGU8dHlwZW5hbWUgVD4gLy8gVCA9IE5vZGUqIG9yIEVkZ2UKICAgICB2b2lkIHN1YnN0aXR1dGUo
QmFzaWNCbG9jayYgYmxvY2ssIHVuc2lnbmVkIHN0YXJ0SW5kZXhJbkJsb2NrLCBUIG9sZFRoaW5n
LCBUIG5ld1RoaW5nKQogICAgIHsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpbmRleEluQmxvY2sg
PSBzdGFydEluZGV4SW5CbG9jazsgaW5kZXhJbkJsb2NrIDwgYmxvY2suc2l6ZSgpOyArK2luZGV4
SW5CbG9jaykgewotICAgICAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRleCA9IGJsb2NrW2luZGV4
SW5CbG9ja107Ci0gICAgICAgICAgICBOb2RlJiBub2RlID0gYXQobm9kZUluZGV4KTsKLSAgICAg
ICAgICAgIGlmIChub2RlLmZsYWdzKCkgJiBOb2RlSGFzVmFyQXJncykgewotICAgICAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgY2hpbGRJZHggPSBub2RlLmZpcnN0Q2hpbGQoKTsgY2hpbGRJZHgg
PCBub2RlLmZpcnN0Q2hpbGQoKSArIG5vZGUubnVtQ2hpbGRyZW4oKTsgKytjaGlsZElkeCkgewor
ICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrW2luZGV4SW5CbG9ja107CisgICAgICAgICAg
ICBpZiAobm9kZS0+ZmxhZ3MoKSAmIE5vZGVIYXNWYXJBcmdzKSB7CisgICAgICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBjaGlsZElkeCA9IG5vZGUtPmZpcnN0Q2hpbGQoKTsgY2hpbGRJZHggPCBu
b2RlLT5maXJzdENoaWxkKCkgKyBub2RlLT5udW1DaGlsZHJlbigpOyArK2NoaWxkSWR4KSB7CiAg
ICAgICAgICAgICAgICAgICAgIGlmICghIW1fdmFyQXJnQ2hpbGRyZW5bY2hpbGRJZHhdKQotICAg
ICAgICAgICAgICAgICAgICAgICAgY29tcGFyZUFuZFN3YXAobV92YXJBcmdDaGlsZHJlbltjaGls
ZElkeF0sIG9sZFRoaW5nLCBuZXdUaGluZywgbm9kZS5zaG91bGRHZW5lcmF0ZSgpKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbXBhcmVBbmRTd2FwKG1fdmFyQXJnQ2hpbGRyZW5bY2hpbGRJ
ZHhdLCBvbGRUaGluZywgbmV3VGhpbmcsIG5vZGUtPnNob3VsZEdlbmVyYXRlKCkpOwogICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIGlmICghbm9kZS5jaGlsZDEoKSkKKyAgICAgICAgICAgIGlmICghbm9kZS0+Y2hp
bGQxKCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBjb21wYXJlQW5k
U3dhcChub2RlLmNoaWxkcmVuLmNoaWxkMSgpLCBvbGRUaGluZywgbmV3VGhpbmcsIG5vZGUuc2hv
dWxkR2VuZXJhdGUoKSk7Ci0gICAgICAgICAgICBpZiAoIW5vZGUuY2hpbGQyKCkpCisgICAgICAg
ICAgICBjb21wYXJlQW5kU3dhcChub2RlLT5jaGlsZHJlbi5jaGlsZDEoKSwgb2xkVGhpbmcsIG5l
d1RoaW5nLCBub2RlLT5zaG91bGRHZW5lcmF0ZSgpKTsKKyAgICAgICAgICAgIGlmICghbm9kZS0+
Y2hpbGQyKCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBjb21wYXJl
QW5kU3dhcChub2RlLmNoaWxkcmVuLmNoaWxkMigpLCBvbGRUaGluZywgbmV3VGhpbmcsIG5vZGUu
c2hvdWxkR2VuZXJhdGUoKSk7Ci0gICAgICAgICAgICBpZiAoIW5vZGUuY2hpbGQzKCkpCisgICAg
ICAgICAgICBjb21wYXJlQW5kU3dhcChub2RlLT5jaGlsZHJlbi5jaGlsZDIoKSwgb2xkVGhpbmcs
IG5ld1RoaW5nLCBub2RlLT5zaG91bGRHZW5lcmF0ZSgpKTsKKyAgICAgICAgICAgIGlmICghbm9k
ZS0+Y2hpbGQzKCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBjb21w
YXJlQW5kU3dhcChub2RlLmNoaWxkcmVuLmNoaWxkMygpLCBvbGRUaGluZywgbmV3VGhpbmcsIG5v
ZGUuc2hvdWxkR2VuZXJhdGUoKSk7CisgICAgICAgICAgICBjb21wYXJlQW5kU3dhcChub2RlLT5j
aGlsZHJlbi5jaGlsZDMoKSwgb2xkVGhpbmcsIG5ld1RoaW5nLCBub2RlLT5zaG91bGRHZW5lcmF0
ZSgpKTsKICAgICAgICAgfQogICAgIH0KICAgICAKQEAgLTY1OCwyOSArNjM2LDI4IEBAIHB1Ymxp
YzoKICAgICAvLyBhbnkgR2V0TG9jYWxzIGluIHRoZSBiYXNpYyBibG9jay4KICAgICAvLyBGSVhN
RTogaXQgbWF5IGJlIGFwcHJvcHJpYXRlLCBpbiB0aGUgZnV0dXJlLCB0byBnZW5lcmFsaXplIHRo
aXMgdG8gaGFuZGxlIEdldExvY2FscwogICAgIC8vIGludHJvZHVjZWQgYW55d2hlcmUgaW4gdGhl
IGJhc2ljIGJsb2NrLgotICAgIHZvaWQgc3Vic3RpdHV0ZUdldExvY2FsKEJhc2ljQmxvY2smIGJs
b2NrLCB1bnNpZ25lZCBzdGFydEluZGV4SW5CbG9jaywgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJp
YWJsZUFjY2Vzc0RhdGEsIE5vZGVJbmRleCBuZXdHZXRMb2NhbCkKKyAgICB2b2lkIHN1YnN0aXR1
dGVHZXRMb2NhbChCYXNpY0Jsb2NrJiBibG9jaywgdW5zaWduZWQgc3RhcnRJbmRleEluQmxvY2ss
IFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhLCBOb2RlKiBuZXdHZXRMb2Nh
bCkKICAgICB7CiAgICAgICAgIGlmICh2YXJpYWJsZUFjY2Vzc0RhdGEtPmlzQ2FwdHVyZWQoKSkg
ewogICAgICAgICAgICAgLy8gTGV0IENTRSB3b3JyeSBhYm91dCB0aGlzIG9uZS4KICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICBmb3IgKHVuc2lnbmVkIGluZGV4SW5CbG9j
ayA9IHN0YXJ0SW5kZXhJbkJsb2NrOyBpbmRleEluQmxvY2sgPCBibG9jay5zaXplKCk7ICsraW5k
ZXhJbkJsb2NrKSB7Ci0gICAgICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4ID0gYmxvY2tbaW5k
ZXhJbkJsb2NrXTsKLSAgICAgICAgICAgIE5vZGUmIG5vZGUgPSBhdChub2RlSW5kZXgpOworICAg
ICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrW2luZGV4SW5CbG9ja107CiAgICAgICAgICAgICBi
b29sIHNob3VsZENvbnRpbnVlID0gdHJ1ZTsKLSAgICAgICAgICAgIHN3aXRjaCAobm9kZS5vcCgp
KSB7CisgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKICAgICAgICAgICAgIGNhc2Ug
U2V0TG9jYWw6IHsKLSAgICAgICAgICAgICAgICBpZiAobm9kZS5sb2NhbCgpID09IHZhcmlhYmxl
QWNjZXNzRGF0YS0+bG9jYWwoKSkKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+bG9jYWwoKSA9
PSB2YXJpYWJsZUFjY2Vzc0RhdGEtPmxvY2FsKCkpCiAgICAgICAgICAgICAgICAgICAgIHNob3Vs
ZENvbnRpbnVlID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBjYXNlIEdldExvY2FsOiB7Ci0gICAgICAg
ICAgICAgICAgaWYgKG5vZGUudmFyaWFibGVBY2Nlc3NEYXRhKCkgIT0gdmFyaWFibGVBY2Nlc3NE
YXRhKQorICAgICAgICAgICAgICAgIGlmIChub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKSAhPSB2
YXJpYWJsZUFjY2Vzc0RhdGEpCiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAg
ICAgICAgICAgIHN1YnN0aXR1dGUoYmxvY2ssIGluZGV4SW5CbG9jaywgbm9kZUluZGV4LCBuZXdH
ZXRMb2NhbCk7Ci0gICAgICAgICAgICAgICAgTm9kZUluZGV4IG9sZFRhaWxJbmRleCA9IGJsb2Nr
LnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKHZhcmlhYmxlQWNjZXNzRGF0YS0+bG9jYWwoKSk7Ci0g
ICAgICAgICAgICAgICAgaWYgKG9sZFRhaWxJbmRleCA9PSBub2RlSW5kZXgpCisgICAgICAgICAg
ICAgICAgc3Vic3RpdHV0ZShibG9jaywgaW5kZXhJbkJsb2NrLCBub2RlLCBuZXdHZXRMb2NhbCk7
CisgICAgICAgICAgICAgICAgTm9kZSogb2xkVGFpbE5vZGUgPSBibG9jay52YXJpYWJsZXNBdFRh
aWwub3BlcmFuZCh2YXJpYWJsZUFjY2Vzc0RhdGEtPmxvY2FsKCkpOworICAgICAgICAgICAgICAg
IGlmIChvbGRUYWlsTm9kZSA9PSBub2RlKQogICAgICAgICAgICAgICAgICAgICBibG9jay52YXJp
YWJsZXNBdFRhaWwub3BlcmFuZCh2YXJpYWJsZUFjY2Vzc0RhdGEtPmxvY2FsKCkpID0gbmV3R2V0
TG9jYWw7CiAgICAgICAgICAgICAgICAgc2hvdWxkQ29udGludWUgPSBmYWxzZTsKICAgICAgICAg
ICAgICAgICBicmVhazsKQEAgLTY5OCw2ICs2NzUsOCBAQCBwdWJsaWM6CiAgICAgQ29kZUJsb2Nr
KiBtX2NvZGVCbG9jazsKICAgICBSZWZQdHI8UHJvZmlsZXI6OkNvbXBpbGF0aW9uPiBtX2NvbXBp
bGF0aW9uOwogICAgIENvZGVCbG9jayogbV9wcm9maWxlZEJsb2NrOworICAgIAorICAgIE5vZGVB
bGxvY2F0b3ImIG1fYWxsb2NhdG9yOwogCiAgICAgVmVjdG9yPCBPd25QdHI8QmFzaWNCbG9jaz4g
LCA4PiBtX2Jsb2NrczsKICAgICBWZWN0b3I8RWRnZSwgMTY+IG1fdmFyQXJnQ2hpbGRyZW47CkBA
IC03MDUsNyArNjg0LDcgQEAgcHVibGljOgogICAgIFZlY3RvcjxSZXNvbHZlR2xvYmFsRGF0YT4g
bV9yZXNvbHZlR2xvYmFsRGF0YTsKICAgICBWZWN0b3I8UmVzb2x2ZU9wZXJhdGlvbkRhdGE+IG1f
cmVzb2x2ZU9wZXJhdGlvbnNEYXRhOwogICAgIFZlY3RvcjxQdXRUb0Jhc2VPcGVyYXRpb25EYXRh
PiBtX3B1dFRvQmFzZU9wZXJhdGlvbkRhdGE7Ci0gICAgVmVjdG9yPE5vZGVJbmRleCwgOD4gbV9h
cmd1bWVudHM7CisgICAgVmVjdG9yPE5vZGUqLCA4PiBtX2FyZ3VtZW50czsKICAgICBTZWdtZW50
ZWRWZWN0b3I8VmFyaWFibGVBY2Nlc3NEYXRhLCAxNj4gbV92YXJpYWJsZUFjY2Vzc0RhdGE7CiAg
ICAgU2VnbWVudGVkVmVjdG9yPEFyZ3VtZW50UG9zaXRpb24sIDg+IG1fYXJndW1lbnRQb3NpdGlv
bnM7CiAgICAgU2VnbWVudGVkVmVjdG9yPFN0cnVjdHVyZVNldCwgMTY+IG1fc3RydWN0dXJlU2V0
OwpAQCAtNzI1LDI5ICs3MDQsMjkgQEAgcHJpdmF0ZToKICAgICAKICAgICB2b2lkIGhhbmRsZVN1
Y2Nlc3NvcihWZWN0b3I8QmxvY2tJbmRleCwgMTY+JiB3b3JrbGlzdCwgQmxvY2tJbmRleCBibG9j
a0luZGV4LCBCbG9ja0luZGV4IHN1Y2Nlc3NvckluZGV4KTsKICAgICAKLSAgICBBZGRTcGVjdWxh
dGlvbk1vZGUgYWRkSW1tZWRpYXRlU2hvdWxkU3BlY3VsYXRlSW50ZWdlcihOb2RlJiBhZGQsIGJv
b2wgdmFyaWFibGVTaG91bGRTcGVjdWxhdGVJbnRlZ2VyLCBOb2RlJiBpbW1lZGlhdGUpCisgICAg
QWRkU3BlY3VsYXRpb25Nb2RlIGFkZEltbWVkaWF0ZVNob3VsZFNwZWN1bGF0ZUludGVnZXIoTm9k
ZSogYWRkLCBib29sIHZhcmlhYmxlU2hvdWxkU3BlY3VsYXRlSW50ZWdlciwgTm9kZSogaW1tZWRp
YXRlKQogICAgIHsKICAgICAgICAgQVNTRVJUKGltbWVkaWF0ZS5oYXNDb25zdGFudCgpKTsKICAg
ICAgICAgCi0gICAgICAgIEpTVmFsdWUgaW1tZWRpYXRlVmFsdWUgPSBpbW1lZGlhdGUudmFsdWVP
ZkpTQ29uc3RhbnQobV9jb2RlQmxvY2spOwotICAgICAgICBpZiAoIWltbWVkaWF0ZVZhbHVlLmlz
TnVtYmVyKCkpCisgICAgICAgIEpTVmFsdWUgaW1tZWRpYXRlVmFsdWUgPSBpbW1lZGlhdGUtPnZh
bHVlT2ZKU0NvbnN0YW50KG1fY29kZUJsb2NrKTsKKyAgICAgICAgaWYgKCFpbW1lZGlhdGVWYWx1
ZS0+aXNOdW1iZXIoKSkKICAgICAgICAgICAgIHJldHVybiBEb250U3BlY3VsYXRlSW50ZWdlcjsK
ICAgICAgICAgCiAgICAgICAgIGlmICghdmFyaWFibGVTaG91bGRTcGVjdWxhdGVJbnRlZ2VyKQog
ICAgICAgICAgICAgcmV0dXJuIERvbnRTcGVjdWxhdGVJbnRlZ2VyOwogICAgICAgICAKLSAgICAg
ICAgaWYgKGltbWVkaWF0ZVZhbHVlLmlzSW50MzIoKSkKLSAgICAgICAgICAgIHJldHVybiBhZGQu
Y2FuU3BlY3VsYXRlSW50ZWdlcigpID8gU3BlY3VsYXRlSW50ZWdlciA6IERvbnRTcGVjdWxhdGVJ
bnRlZ2VyOworICAgICAgICBpZiAoaW1tZWRpYXRlVmFsdWUtPmlzSW50MzIoKSkKKyAgICAgICAg
ICAgIHJldHVybiBhZGQtPmNhblNwZWN1bGF0ZUludGVnZXIoKSA/IFNwZWN1bGF0ZUludGVnZXIg
OiBEb250U3BlY3VsYXRlSW50ZWdlcjsKICAgICAgICAgCiAgICAgICAgIGRvdWJsZSBkb3VibGVJ
bW1lZGlhdGUgPSBpbW1lZGlhdGVWYWx1ZS5hc0RvdWJsZSgpOwogICAgICAgICBjb25zdCBkb3Vi
bGUgdHdvVG9UaGU0OCA9IDI4MTQ3NDk3NjcxMDY1Ni4wOwogICAgICAgICBpZiAoZG91YmxlSW1t
ZWRpYXRlIDwgLXR3b1RvVGhlNDggfHwgZG91YmxlSW1tZWRpYXRlID4gdHdvVG9UaGU0OCkKICAg
ICAgICAgICAgIHJldHVybiBEb250U3BlY3VsYXRlSW50ZWdlcjsKICAgICAgICAgCi0gICAgICAg
IHJldHVybiBub2RlQ2FuVHJ1bmNhdGVJbnRlZ2VyKGFkZC5hcml0aE5vZGVGbGFncygpKSA/IFNw
ZWN1bGF0ZUludGVnZXJCdXRBbHdheXNXYXRjaE92ZXJmbG93IDogRG9udFNwZWN1bGF0ZUludGVn
ZXI7CisgICAgICAgIHJldHVybiBub2RlQ2FuVHJ1bmNhdGVJbnRlZ2VyKGFkZC0+YXJpdGhOb2Rl
RmxhZ3MoKSkgPyBTcGVjdWxhdGVJbnRlZ2VyQnV0QWx3YXlzV2F0Y2hPdmVyZmxvdyA6IERvbnRT
cGVjdWxhdGVJbnRlZ2VyOwogICAgIH0KICAgICAKLSAgICBib29sIG11bEltbWVkaWF0ZVNob3Vs
ZFNwZWN1bGF0ZUludGVnZXIoTm9kZSYgbXVsLCBOb2RlJiB2YXJpYWJsZSwgTm9kZSYgaW1tZWRp
YXRlKQorICAgIGJvb2wgbXVsSW1tZWRpYXRlU2hvdWxkU3BlY3VsYXRlSW50ZWdlcihOb2RlKiBt
dWwsIE5vZGUqIHZhcmlhYmxlLCBOb2RlKiBpbW1lZGlhdGUpCiAgICAgewogICAgICAgICBBU1NF
UlQoaW1tZWRpYXRlLmhhc0NvbnN0YW50KCkpOwogICAgICAgICAKQEAgLTc1NSw3ICs3MzQsNyBA
QCBwcml2YXRlOgogICAgICAgICBpZiAoIWltbWVkaWF0ZVZhbHVlLmlzSW50MzIoKSkKICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgCi0gICAgICAgIGlmICghdmFyaWFibGUuc2hv
dWxkU3BlY3VsYXRlSW50ZWdlckZvckFyaXRobWV0aWMoKSkKKyAgICAgICAgaWYgKCF2YXJpYWJs
ZS0+c2hvdWxkU3BlY3VsYXRlSW50ZWdlckZvckFyaXRobWV0aWMoKSkKICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICAgICAgCiAgICAgICAgIGludDMyX3QgaW50SW1tZWRpYXRlID0gaW1t
ZWRpYXRlVmFsdWUuYXNJbnQzMigpOwpAQCAtNzY2LDE0ICs3NDUsMTQgQEAgcHJpdmF0ZToKICAg
ICAgICAgLy8gY2FuU3BlY3VsYXRlSW50ZWdlcigpIGltcGxpZXMpLgogICAgICAgICBjb25zdCBp
bnQzMl90IHR3b1RvVGhlMjIgPSAxIDw8IDIyOwogICAgICAgICBpZiAoaW50SW1tZWRpYXRlIDw9
IC10d29Ub1RoZTIyIHx8IGludEltbWVkaWF0ZSA+PSB0d29Ub1RoZTIyKQotICAgICAgICAgICAg
cmV0dXJuIG11bC5jYW5TcGVjdWxhdGVJbnRlZ2VyKCkgJiYgIW5vZGVNYXlPdmVyZmxvdyhtdWwu
YXJpdGhOb2RlRmxhZ3MoKSk7CisgICAgICAgICAgICByZXR1cm4gbXVsLT5jYW5TcGVjdWxhdGVJ
bnRlZ2VyKCkgJiYgIW5vZGVNYXlPdmVyZmxvdyhtdWwtPmFyaXRoTm9kZUZsYWdzKCkpOwogCi0g
ICAgICAgIHJldHVybiBtdWwuY2FuU3BlY3VsYXRlSW50ZWdlcigpOworICAgICAgICByZXR1cm4g
bXVsLT5jYW5TcGVjdWxhdGVJbnRlZ2VyKCk7CiAgICAgfQogICAgIAogICAgIC8vIFdoZW4gYSBu
b2RlJ3MgcmVmQ291bnQgZ29lcyBmcm9tIDAgdG8gMSwgaXQgbXVzdCAobG9naWNhbGx5KSByZWN1
cnNpdmVseSByZWYgYWxsIG9mIGl0cyBjaGlsZHJlbiwgYW5kIHZpY2UgdmVyc2EuCi0gICAgdm9p
ZCByZWZDaGlsZHJlbihOb2RlSW5kZXgpOwotICAgIHZvaWQgZGVyZWZDaGlsZHJlbihOb2RlSW5k
ZXgpOworICAgIHZvaWQgcmVmQ2hpbGRyZW4oTm9kZSopOworICAgIHZvaWQgZGVyZWZDaGlsZHJl
bihOb2RlKik7CiB9OwogCiBjbGFzcyBHZXRCeXRlY29kZUJlZ2luRm9yQmxvY2sgewpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdMb25nTGl2ZWRTdGF0ZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdMb25nTGl2ZWRTdGF0ZS5jcHAJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0xvbmdMaXZlZFN0YXRl
LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
REZHTG9uZ0xpdmVkU3RhdGUuaCIKKworI2lmIEVOQUJMRShERkdfSklUKQorCituYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK0xvbmdMaXZlZFN0YXRlOjpMb25nTGl2ZWRTdGF0ZSgp
Cit7Cit9CisKK0xvbmdMaXZlZFN0YXRlOjp+TG9uZ0xpdmVkU3RhdGUoKQoreworfQorCit2b2lk
IExvbmdMaXZlZFN0YXRlOjpzaHJpbmtUb0ZpdCgpCit7CisgICAgbV9hbGxvY2F0b3IucmVzZXQo
KTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERG
R19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTG9uZ0xpdmVkU3Rh
dGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0xvbmdMaXZl
ZFN0YXRlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0xv
bmdMaXZlZFN0YXRlLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTUgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdMb25nTGl2ZWRT
dGF0ZV9oCisjZGVmaW5lIERGR0xvbmdMaXZlZFN0YXRlX2gKKworI2luY2x1ZGUgPHd0Zi9QbGF0
Zm9ybS5oPgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJERkdOb2RlQWxsb2Nh
dG9yLmgiCisjaW5jbHVkZSA8d3RmL0Zhc3RBbGxvY0Jhc2UuaD4KKyNpbmNsdWRlIDx3dGYvTm9u
Y29weWFibGUuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitjbGFzcyBM
b25nTGl2ZWRTdGF0ZSB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7IFdURl9NQUtFX05P
TkNPUFlBQkxFKExvbmdMaXZlZFN0YXRlKTsKK3B1YmxpYzoKKyAgICBMb25nTGl2ZWRTdGF0ZSgp
OworICAgIH5Mb25nTGl2ZWRTdGF0ZSgpOworICAgIAorICAgIHZvaWQgc2hyaW5rVG9GaXQoKTsK
KyAgICAKKyAgICBOb2RlQWxsb2NhdG9yIG1fYWxsb2NhdG9yOworfTsKKworfSB9IC8vIG5hbWVz
cGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBE
RkdMb25nTGl2ZWRTdGF0ZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Tm9kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2Rl
LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5j
cHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRG
R05vZGUuaCIKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZHTm9kZUFsbG9j
YXRvci5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK3Vuc2lnbmVkIE5v
ZGU6OmluZGV4KCkgY29uc3QKK3sKKyAgICByZXR1cm4gTm9kZUFsbG9jYXRvcjo6YWxsb2NhdG9y
T2YodGhpcyktPmluZGV4T2YodGhpcyk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcK
KworbmFtZXNwYWNlIFdURiB7CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0
LCBOb2RlKiBub2RlKQoreworICAgIGlmICghbm9kZSkKKyAgICAgICAgb3V0LnByaW50KCItIik7
CisgICAgZWxzZQorICAgICAgICBvdXQucHJpbnQoIkAiLCBub2RlLT5pbmRleCgpKTsKK30KKwor
fSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHJldmlzaW9uIDEzOTU4NikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTIsIDIwMTMgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC02OCw3ICs2OCw3IEBAIHN0cnVjdCBOZXdBcnJheUJ1ZmZlckRhdGEgewogCiAvLyBUaGlzIHR5
cGUgdXNlZCBpbiBwYXNzaW5nIGFuIGltbWVkaWF0ZSBhcmd1bWVudCB0byBOb2RlIGNvbnN0cnVj
dG9yOwogLy8gZGlzdGluZ3Vpc2hlcyBhbiBpbW1lZGlhdGUgdmFsdWUgKHR5cGljYWxseSBhbiBp
bmRleCBpbnRvIGEgQ29kZUJsb2NrIGRhdGEgc3RydWN0dXJlIC0gCi0vLyBhIGNvbnN0YW50IGlu
ZGV4LCBhcmd1bWVudCwgb3IgaWRlbnRpZmllcikgZnJvbSBhIE5vZGVJbmRleC4KKy8vIGEgY29u
c3RhbnQgaW5kZXgsIGFyZ3VtZW50LCBvciBpZGVudGlmaWVyKSBmcm9tIGEgTm9kZSouCiBzdHJ1
Y3QgT3BJbmZvIHsKICAgICBleHBsaWNpdCBPcEluZm8oaW50MzJfdCB2YWx1ZSkgOiBtX3ZhbHVl
KHN0YXRpY19jYXN0PHVpbnRwdHJfdD4odmFsdWUpKSB7IH0KICAgICBleHBsaWNpdCBPcEluZm8o
dWludDMyX3QgdmFsdWUpIDogbV92YWx1ZShzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KHZhbHVlKSkg
eyB9CkBAIC04OCw3ICs4OCw3IEBAIHN0cnVjdCBOb2RlIHsKICAgICBOb2RlKCkgeyB9CiAgICAg
CiAgICAgLy8gQ29uc3RydWN0IGEgbm9kZSB3aXRoIHVwIHRvIDMgY2hpbGRyZW4sIG5vIGltbWVk
aWF0ZSB2YWx1ZS4KLSAgICBOb2RlKE5vZGVUeXBlIG9wLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4s
IE5vZGVJbmRleCBjaGlsZDEgPSBOb05vZGUsIE5vZGVJbmRleCBjaGlsZDIgPSBOb05vZGUsIE5v
ZGVJbmRleCBjaGlsZDMgPSBOb05vZGUpCisgICAgTm9kZShOb2RlVHlwZSBvcCwgQ29kZU9yaWdp
biBjb2RlT3JpZ2luLCBOb2RlKiBjaGlsZDEgPSAwLCBOb2RlKiBjaGlsZDIgPSAwLCBOb2RlKiBj
aGlsZDMgPSAwKQogICAgICAgICA6IGNvZGVPcmlnaW4oY29kZU9yaWdpbikKICAgICAgICAgLCBj
aGlsZHJlbihBZGphY2VuY3lMaXN0OjpGaXhlZCwgY2hpbGQxLCBjaGlsZDIsIGNoaWxkMykKICAg
ICAgICAgLCBtX3ZpcnR1YWxSZWdpc3RlcihJbnZhbGlkVmlydHVhbFJlZ2lzdGVyKQpAQCAtMTAw
LDcgKzEwMCw3IEBAIHN0cnVjdCBOb2RlIHsKICAgICB9CiAKICAgICAvLyBDb25zdHJ1Y3QgYSBu
b2RlIHdpdGggdXAgdG8gMyBjaGlsZHJlbiBhbmQgYW4gaW1tZWRpYXRlIHZhbHVlLgotICAgIE5v
ZGUoTm9kZVR5cGUgb3AsIENvZGVPcmlnaW4gY29kZU9yaWdpbiwgT3BJbmZvIGltbSwgTm9kZUlu
ZGV4IGNoaWxkMSA9IE5vTm9kZSwgTm9kZUluZGV4IGNoaWxkMiA9IE5vTm9kZSwgTm9kZUluZGV4
IGNoaWxkMyA9IE5vTm9kZSkKKyAgICBOb2RlKE5vZGVUeXBlIG9wLCBDb2RlT3JpZ2luIGNvZGVP
cmlnaW4sIE9wSW5mbyBpbW0sIE5vZGUqIGNoaWxkMSA9IDAsIE5vZGUqIGNoaWxkMiA9IDAsIE5v
ZGUqIGNoaWxkMyA9IDApCiAgICAgICAgIDogY29kZU9yaWdpbihjb2RlT3JpZ2luKQogICAgICAg
ICAsIGNoaWxkcmVuKEFkamFjZW5jeUxpc3Q6OkZpeGVkLCBjaGlsZDEsIGNoaWxkMiwgY2hpbGQz
KQogICAgICAgICAsIG1fdmlydHVhbFJlZ2lzdGVyKEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIpCkBA
IC0xMTMsNyArMTEzLDcgQEAgc3RydWN0IE5vZGUgewogICAgIH0KIAogICAgIC8vIENvbnN0cnVj
dCBhIG5vZGUgd2l0aCB1cCB0byAzIGNoaWxkcmVuIGFuZCB0d28gaW1tZWRpYXRlIHZhbHVlcy4K
LSAgICBOb2RlKE5vZGVUeXBlIG9wLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIE9wSW5mbyBpbW0x
LCBPcEluZm8gaW1tMiwgTm9kZUluZGV4IGNoaWxkMSA9IE5vTm9kZSwgTm9kZUluZGV4IGNoaWxk
MiA9IE5vTm9kZSwgTm9kZUluZGV4IGNoaWxkMyA9IE5vTm9kZSkKKyAgICBOb2RlKE5vZGVUeXBl
IG9wLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIE9wSW5mbyBpbW0xLCBPcEluZm8gaW1tMiwgTm9k
ZSogY2hpbGQxID0gMCwgTm9kZSogY2hpbGQyID0gMCwgTm9kZSogY2hpbGQzID0gMCkKICAgICAg
ICAgOiBjb2RlT3JpZ2luKGNvZGVPcmlnaW4pCiAgICAgICAgICwgY2hpbGRyZW4oQWRqYWNlbmN5
TGlzdDo6Rml4ZWQsIGNoaWxkMSwgY2hpbGQyLCBjaGlsZDMpCiAgICAgICAgICwgbV92aXJ0dWFs
UmVnaXN0ZXIoSW52YWxpZFZpcnR1YWxSZWdpc3RlcikKQEAgLTE0Myw2ICsxNDMsOSBAQCBzdHJ1
Y3QgTm9kZSB7CiAgICAgTm9kZVR5cGUgb3AoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxO
b2RlVHlwZT4obV9vcCk7IH0KICAgICBOb2RlRmxhZ3MgZmxhZ3MoKSBjb25zdCB7IHJldHVybiBt
X2ZsYWdzOyB9CiAgICAgCisgICAgLy8gVGhpcyBpcyBub3QgYSBmYXN0IG1ldGhvZC4KKyAgICB1
bnNpZ25lZCBpbmRleCgpIGNvbnN0OworICAgIAogICAgIHZvaWQgc2V0T3AoTm9kZVR5cGUgb3Ap
CiAgICAgewogICAgICAgICBtX29wID0gb3A7CkBAIC0yNzAsNyArMjczLDcgQEAgc3RydWN0IE5v
ZGUgewogICAgICAgICBjb252ZXJ0VG9TdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludChzdHJ1
Y3R1cmVTZXQoKS5zaW5nbGV0b25TdHJ1Y3R1cmUoKSk7CiAgICAgfQogICAgIAotICAgIHZvaWQg
Y29udmVydFRvR2V0QnlPZmZzZXQodW5zaWduZWQgc3RvcmFnZUFjY2Vzc0RhdGFJbmRleCwgTm9k
ZUluZGV4IHN0b3JhZ2UpCisgICAgdm9pZCBjb252ZXJ0VG9HZXRCeU9mZnNldCh1bnNpZ25lZCBz
dG9yYWdlQWNjZXNzRGF0YUluZGV4LCBOb2RlKiBzdG9yYWdlKQogICAgIHsKICAgICAgICAgQVNT
RVJUKG1fb3AgPT0gR2V0QnlJZCB8fCBtX29wID09IEdldEJ5SWRGbHVzaCk7CiAgICAgICAgIG1f
b3BJbmZvID0gc3RvcmFnZUFjY2Vzc0RhdGFJbmRleDsKQEAgLTI3OSw3ICsyODIsNyBAQCBzdHJ1
Y3QgTm9kZSB7CiAgICAgICAgIG1fZmxhZ3MgJj0gfk5vZGVDbG9iYmVyc1dvcmxkOwogICAgIH0K
ICAgICAKLSAgICB2b2lkIGNvbnZlcnRUb1B1dEJ5T2Zmc2V0KHVuc2lnbmVkIHN0b3JhZ2VBY2Nl
c3NEYXRhSW5kZXgsIE5vZGVJbmRleCBzdG9yYWdlKQorICAgIHZvaWQgY29udmVydFRvUHV0QnlP
ZmZzZXQodW5zaWduZWQgc3RvcmFnZUFjY2Vzc0RhdGFJbmRleCwgTm9kZSogc3RvcmFnZSkKICAg
ICB7CiAgICAgICAgIEFTU0VSVChtX29wID09IFB1dEJ5SWQgfHwgbV9vcCA9PSBQdXRCeUlkRGly
ZWN0KTsKICAgICAgICAgbV9vcEluZm8gPSBzdG9yYWdlQWNjZXNzRGF0YUluZGV4OwpAQCAtMTE3
NSw2ICsxMTc4LDggQEAgc3RydWN0IE5vZGUgewogICAgICAgICBvdXQucHJpbnRmKCIsIEAldSIs
IGNoaWxkMygpLmluZGV4KCkpOwogICAgIH0KICAgICAKKyAgICAvLyBOQi4gVGhpcyBjbGFzcyBt
dXN0IGhhdmUgYSB0cml2aWFsIGRlc3RydWN0b3IuCisgICAgCiAgICAgLy8gVXNlZCB0byBsb29r
IHVwIGV4Y2VwdGlvbiBoYW5kbGluZyBpbmZvcm1hdGlvbiAoY3VycmVudGx5IGltcGxlbWVudGVk
IGFzIGEgYnl0ZWNvZGUgaW5kZXgpLgogICAgIENvZGVPcmlnaW4gY29kZU9yaWdpbjsKICAgICAv
LyBSZWZlcmVuY2VzIHRvIHVwIHRvIDMgY2hpbGRyZW4sIG9yIGxpbmtzIHRvIGEgdmFyaWFibGUg
bGVuZ3RoIHNldCBvZiBjaGlsZHJlbi4KQEAgLTExOTcsMTAgKzEyMDIsMTYgQEAgcHJpdmF0ZToK
IHB1YmxpYzoKICAgICAvLyBGaWVsZHMgdXNlZCBieSB2YXJpb3VzIGFuYWx5c2VzLgogICAgIEFi
c3RyYWN0VmFsdWUgdmFsdWU7Ci0gICAgTm9kZUluZGV4IHJlcGxhY2VtZW50OworICAgIE5vZGUq
IHJlcGxhY2VtZW50OwogfTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwogCituYW1lc3Bh
Y2UgV1RGIHsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiwgTm9kZSopOworCit9
IC8vIG5hbWVzcGFjZSBXVEYKKwogI2VuZGlmCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHTm9kZUFsbG9jYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHTm9kZUFsbG9jYXRvci5oCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlQWxsb2NhdG9yLmgJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsNTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2lmbmRlZiBERkdOb2RlQWxsb2NhdG9yX2gKKyNkZWZpbmUgREZHTm9kZUFsbG9jYXRvcl9o
CisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2lmIEVOQUJMRShERkdfSklUKQorCisj
aW5jbHVkZSAiREZHQWxsb2NhdG9yLmgiCisjaW5jbHVkZSAiREZHTm9kZS5oIgorCituYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK3R5cGVkZWYgQWxsb2NhdG9yPE5vZGUsIDQwOTU+
IE5vZGVBbGxvY2F0b3I7CisKK2lubGluZSB2b2lkKiBvcGVyYXRvciBuZXcgKHNpemVfdCBzaXpl
LCBOb2RlQWxsb2NhdG9yJiBhbGxvY2F0b3IpCit7CisgICAgQVNTRVJUKHNpemUgPT0gc2l6ZW9m
KE5vZGUpKTsKKyAgICByZXR1cm4gYWxsb2NhdG9yLmFsbG9jYXRlKCk7Cit9CisKK30gfSAvLyBu
YW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisjZW5kaWYg
Ly8gREZHTm9kZUFsbG9jYXRvcl9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCShyZXZp
c2lvbiAxMzk1ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Q
cm9wYWdhdGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODUsNzUgKzg1LDczIEBAIHB1
YmxpYzoKIHByaXZhdGU6CiAgICAgYm9vbCBzZXRQcmVkaWN0aW9uKFNwZWN1bGF0ZWRUeXBlIHBy
ZWRpY3Rpb24pCiAgICAgewotICAgICAgICBBU1NFUlQobV9ncmFwaFttX2NvbXBpbGVJbmRleF0u
aGFzUmVzdWx0KCkpOworICAgICAgICBBU1NFUlQobV9jdXJyZW50Tm9kZS0+aGFzUmVzdWx0KCkp
OwogICAgICAgICAKICAgICAgICAgLy8gc2V0UHJlZGljdGlvbigpIGlzIHVzZWQgd2hlbiB3ZSBr
bm93IHRoYXQgdGhlcmUgaXMgbm8gd2F5IHRoYXQgd2UgY2FuIGNoYW5nZQogICAgICAgICAvLyBv
dXIgbWluZHMgYWJvdXQgd2hhdCB0aGUgcHJlZGljdGlvbiBpcyBnb2luZyB0byBiZS4gVGhlcmUg
aXMgbm8gc2VtYW50aWMKICAgICAgICAgLy8gZGlmZmVyZW5jZSBiZXR3ZWVuIHNldFByZWRpY3Rp
b24oKSBhbmQgbWVyZ2VTcGVjdWxhdGlvbigpIG90aGVyIHRoYW4gdGhlCiAgICAgICAgIC8vIGlu
Y3JlYXNlZCBjaGVja2luZyB0byB2YWxpZGF0ZSB0aGlzIHByb3BlcnR5LgotICAgICAgICBBU1NF
UlQobV9ncmFwaFttX2NvbXBpbGVJbmRleF0ucHJlZGljdGlvbigpID09IFNwZWNOb25lIHx8IG1f
Z3JhcGhbbV9jb21waWxlSW5kZXhdLnByZWRpY3Rpb24oKSA9PSBwcmVkaWN0aW9uKTsKKyAgICAg
ICAgQVNTRVJUKG1fY3VycmVudE5vZGUtPnByZWRpY3Rpb24oKSA9PSBTcGVjTm9uZSB8fCBtX2N1
cnJlbnROb2RlLT5wcmVkaWN0aW9uKCkgPT0gcHJlZGljdGlvbik7CiAgICAgICAgIAotICAgICAg
ICByZXR1cm4gbV9ncmFwaFttX2NvbXBpbGVJbmRleF0ucHJlZGljdChwcmVkaWN0aW9uKTsKKyAg
ICAgICAgcmV0dXJuIG1fY3VycmVudE5vZGUtPnByZWRpY3QocHJlZGljdGlvbik7CiAgICAgfQog
ICAgIAogICAgIGJvb2wgbWVyZ2VQcmVkaWN0aW9uKFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24p
CiAgICAgewotICAgICAgICBBU1NFUlQobV9ncmFwaFttX2NvbXBpbGVJbmRleF0uaGFzUmVzdWx0
KCkpOworICAgICAgICBBU1NFUlQobV9jdXJyZW50Tm9kZS0+aGFzUmVzdWx0KCkpOwogICAgICAg
ICAKLSAgICAgICAgcmV0dXJuIG1fZ3JhcGhbbV9jb21waWxlSW5kZXhdLnByZWRpY3QocHJlZGlj
dGlvbik7CisgICAgICAgIHJldHVybiBtX2N1cnJlbnROb2RlLT5wcmVkaWN0KHByZWRpY3Rpb24p
OwogICAgIH0KICAgICAKLSAgICBib29sIGlzTm90TmVnWmVybyhOb2RlSW5kZXggbm9kZUluZGV4
KQorICAgIGJvb2wgaXNOb3ROZWdaZXJvKE5vZGUqIG5vZGUpCiAgICAgewotICAgICAgICBpZiAo
IW1fZ3JhcGguaXNOdW1iZXJDb25zdGFudChub2RlSW5kZXgpKQorICAgICAgICBpZiAoIW1fZ3Jh
cGguaXNOdW1iZXJDb25zdGFudChub2RlKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgZG91YmxlIHZhbHVlID0gbV9ncmFwaC52YWx1ZU9mTnVtYmVyQ29uc3RhbnQobm9kZUlu
ZGV4KTsKKyAgICAgICAgZG91YmxlIHZhbHVlID0gbV9ncmFwaC52YWx1ZU9mTnVtYmVyQ29uc3Rh
bnQobm9kZSk7CiAgICAgICAgIHJldHVybiAhdmFsdWUgJiYgMS4wIC8gdmFsdWUgPCAwLjA7CiAg
ICAgfQogICAgIAotICAgIGJvb2wgaXNOb3RaZXJvKE5vZGVJbmRleCBub2RlSW5kZXgpCisgICAg
Ym9vbCBpc05vdFplcm8oTm9kZSogbm9kZSkKICAgICB7Ci0gICAgICAgIGlmICghbV9ncmFwaC5p
c051bWJlckNvbnN0YW50KG5vZGVJbmRleCkpCisgICAgICAgIGlmICghbV9ncmFwaC5pc051bWJl
ckNvbnN0YW50KG5vZGUpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICByZXR1
cm4gISFtX2dyYXBoLnZhbHVlT2ZOdW1iZXJDb25zdGFudChub2RlSW5kZXgpOworICAgICAgICBy
ZXR1cm4gISFtX2dyYXBoLnZhbHVlT2ZOdW1iZXJDb25zdGFudChub2RlKTsKICAgICB9CiAgICAg
Ci0gICAgYm9vbCBpc1dpdGhpblBvd2VyT2ZUd29Gb3JDb25zdGFudChOb2RlJiBub2RlLCBpbnQg
cG93ZXIpCisgICAgYm9vbCBpc1dpdGhpblBvd2VyT2ZUd29Gb3JDb25zdGFudChOb2RlKiBub2Rl
LCBpbnQgcG93ZXIpCiAgICAgewotICAgICAgICBKU1ZhbHVlIGltbWVkaWF0ZVZhbHVlID0gbm9k
ZS52YWx1ZU9mSlNDb25zdGFudChjb2RlQmxvY2soKSk7CisgICAgICAgIEpTVmFsdWUgaW1tZWRp
YXRlVmFsdWUgPSBub2RlLT52YWx1ZU9mSlNDb25zdGFudChjb2RlQmxvY2soKSk7CiAgICAgICAg
IGlmICghaW1tZWRpYXRlVmFsdWUuaXNJbnQzMigpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgICAgICBpbnQzMl90IGludEltbWVkaWF0ZSA9IGltbWVkaWF0ZVZhbHVlLmFzSW50MzIo
KTsKICAgICAgICAgcmV0dXJuIGludEltbWVkaWF0ZSA+IC0oMSA8PCBwb3dlcikgJiYgaW50SW1t
ZWRpYXRlIDwgKDEgPDwgcG93ZXIpOwogICAgIH0KICAgICAKLSAgICBib29sIGlzV2l0aGluUG93
ZXJPZlR3b05vblJlY3Vyc2l2ZShOb2RlSW5kZXggbm9kZUluZGV4LCBpbnQgcG93ZXIpCisgICAg
Ym9vbCBpc1dpdGhpblBvd2VyT2ZUd29Ob25SZWN1cnNpdmUoTm9kZSogbm9kZSwgaW50IHBvd2Vy
KQogICAgIHsKLSAgICAgICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhbbm9kZUluZGV4XTsKLSAgICAg
ICAgaWYgKG5vZGUub3AoKSAhPSBKU0NvbnN0YW50KQorICAgICAgICBpZiAobm9kZS0+b3AoKSAh
PSBKU0NvbnN0YW50KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICByZXR1cm4g
aXNXaXRoaW5Qb3dlck9mVHdvRm9yQ29uc3RhbnQobm9kZSwgcG93ZXIpOwogICAgIH0KICAgICAK
LSAgICBib29sIGlzV2l0aGluUG93ZXJPZlR3byhOb2RlSW5kZXggbm9kZUluZGV4LCBpbnQgcG93
ZXIpCisgICAgYm9vbCBpc1dpdGhpblBvd2VyT2ZUd28oTm9kZSogbm9kZSwgaW50IHBvd2VyKQog
ICAgIHsKLSAgICAgICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhbbm9kZUluZGV4XTsKLSAgICAgICAg
c3dpdGNoIChub2RlLm9wKCkpIHsKKyAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CiAgICAg
ICAgIGNhc2UgSlNDb25zdGFudDogewogICAgICAgICAgICAgcmV0dXJuIGlzV2l0aGluUG93ZXJP
ZlR3b0ZvckNvbnN0YW50KG5vZGUsIHBvd2VyKTsKICAgICAgICAgfQogICAgICAgICAgICAgCiAg
ICAgICAgIGNhc2UgQml0QW5kOiB7Ci0gICAgICAgICAgICByZXR1cm4gaXNXaXRoaW5Qb3dlck9m
VHdvTm9uUmVjdXJzaXZlKG5vZGUuY2hpbGQxKCkuaW5kZXgoKSwgcG93ZXIpCi0gICAgICAgICAg
ICAgICAgfHwgaXNXaXRoaW5Qb3dlck9mVHdvTm9uUmVjdXJzaXZlKG5vZGUuY2hpbGQyKCkuaW5k
ZXgoKSwgcG93ZXIpOworICAgICAgICAgICAgcmV0dXJuIGlzV2l0aGluUG93ZXJPZlR3b05vblJl
Y3Vyc2l2ZShub2RlLT5jaGlsZDEoKS5ub2RlKCksIHBvd2VyKQorICAgICAgICAgICAgICAgIHx8
IGlzV2l0aGluUG93ZXJPZlR3b05vblJlY3Vyc2l2ZShub2RlLT5jaGlsZDIoKS5ub2RlKCksIHBv
d2VyKTsKICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgQml0UlNoaWZ0Ogog
ICAgICAgICBjYXNlIEJpdFVSU2hpZnQ6IHsKLSAgICAgICAgICAgIE5vZGUmIHNoaWZ0QW1vdW50
ID0gbV9ncmFwaFtub2RlLmNoaWxkMigpXTsKLSAgICAgICAgICAgIGlmIChzaGlmdEFtb3VudC5v
cCgpICE9IEpTQ29uc3RhbnQpCisgICAgICAgICAgICBOb2RlKiBzaGlmdEFtb3VudCA9IG5vZGUt
PmNoaWxkMigpLm5vZGUoKTsKKyAgICAgICAgICAgIGlmIChzaGlmdEFtb3VudC0+b3AoKSAhPSBK
U0NvbnN0YW50KQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIEpT
VmFsdWUgaW1tZWRpYXRlVmFsdWUgPSBzaGlmdEFtb3VudC52YWx1ZU9mSlNDb25zdGFudChjb2Rl
QmxvY2soKSk7CisgICAgICAgICAgICBKU1ZhbHVlIGltbWVkaWF0ZVZhbHVlID0gc2hpZnRBbW91
bnQtPnZhbHVlT2ZKU0NvbnN0YW50KGNvZGVCbG9jaygpKTsKICAgICAgICAgICAgIGlmICghaW1t
ZWRpYXRlVmFsdWUuaXNJbnQzMigpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICAgICAgICAgIHJldHVybiBpbW1lZGlhdGVWYWx1ZSA+IDMyIC0gcG93ZXI7CkBAIC0xNzgsMTYg
KzE3NiwxNiBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4gc3BlY3VsYXRlZERvdWJsZVR5cGVG
b3JQcmVkaWN0aW9uKG1lcmdlU3BlY3VsYXRpb25zKGxlZnQsIHJpZ2h0KSk7CiAgICAgfQogCi0g
ICAgdm9pZCBwcm9wYWdhdGUoTm9kZSYgbm9kZSkKKyAgICB2b2lkIHByb3BhZ2F0ZShOb2RlKiBu
b2RlKQogICAgIHsKLSAgICAgICAgaWYgKCFub2RlLnNob3VsZEdlbmVyYXRlKCkpCisgICAgICAg
IGlmICghbm9kZS0+c2hvdWxkR2VuZXJhdGUoKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgCi0gICAgICAgIE5vZGVUeXBlIG9wID0gbm9kZS5vcCgpOwotICAgICAgICBOb2RlRmxhZ3Mg
ZmxhZ3MgPSBub2RlLmZsYWdzKCkgJiBOb2RlQmFja1Byb3BNYXNrOworICAgICAgICBOb2RlVHlw
ZSBvcCA9IG5vZGUtPm9wKCk7CisgICAgICAgIE5vZGVGbGFncyBmbGFncyA9IG5vZGUtPmZsYWdz
KCkgJiBOb2RlQmFja1Byb3BNYXNrOwogCiAjaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElP
Tl9WRVJCT1NFKQotICAgICAgICBkYXRhTG9nRigiICAgJXMgQCV1OiAlcyAiLCBHcmFwaDo6b3BO
YW1lKG9wKSwgbV9jb21waWxlSW5kZXgsIG5vZGVGbGFnc0FzU3RyaW5nKGZsYWdzKSk7CisgICAg
ICAgIGRhdGFMb2coIiAgICIsIEdyYXBoOjpvcE5hbWUob3ApLCAiICIsIG1fY3VycmVudE5vZGUs
ICI6ICIsIG5vZGVGbGFnc0FzU3RyaW5nKGZsYWdzKSwgIiAiKTsKICNlbmRpZgogICAgICAgICAK
ICAgICAgICAgYm9vbCBjaGFuZ2VkID0gZmFsc2U7CkBAIC0xOTUsMTIgKzE5MywxMiBAQCBwcml2
YXRlOgogICAgICAgICBzd2l0Y2ggKG9wKSB7CiAgICAgICAgIGNhc2UgSlNDb25zdGFudDoKICAg
ICAgICAgY2FzZSBXZWFrSlNDb25zdGFudDogewotICAgICAgICAgICAgY2hhbmdlZCB8PSBzZXRQ
cmVkaWN0aW9uKHNwZWN1bGF0aW9uRnJvbVZhbHVlKG1fZ3JhcGgudmFsdWVPZkpTQ29uc3RhbnQo
bV9jb21waWxlSW5kZXgpKSk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IHNldFByZWRpY3Rpb24o
c3BlY3VsYXRpb25Gcm9tVmFsdWUobV9ncmFwaC52YWx1ZU9mSlNDb25zdGFudChub2RlKSkpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBjYXNl
IEdldExvY2FsOiB7Ci0gICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNj
ZXNzRGF0YSA9IG5vZGUudmFyaWFibGVBY2Nlc3NEYXRhKCk7CisgICAgICAgICAgICBWYXJpYWJs
ZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0
YSgpOwogICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiA9IHZhcmlhYmxlQWNj
ZXNzRGF0YS0+cHJlZGljdGlvbigpOwogICAgICAgICAgICAgaWYgKHByZWRpY3Rpb24pCiAgICAg
ICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVByZWRpY3Rpb24ocHJlZGljdGlvbik7CkBAIC0y
MTAsMjEgKzIwOCwyMSBAQCBwcml2YXRlOgogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAg
ICAgY2FzZSBTZXRMb2NhbDogewotICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJp
YWJsZUFjY2Vzc0RhdGEgPSBub2RlLnZhcmlhYmxlQWNjZXNzRGF0YSgpOwotICAgICAgICAgICAg
Y2hhbmdlZCB8PSB2YXJpYWJsZUFjY2Vzc0RhdGEtPnByZWRpY3QobV9ncmFwaFtub2RlLmNoaWxk
MSgpXS5wcmVkaWN0aW9uKCkpOworICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJp
YWJsZUFjY2Vzc0RhdGEgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKKyAgICAgICAgICAg
IGNoYW5nZWQgfD0gdmFyaWFibGVBY2Nlc3NEYXRhLT5wcmVkaWN0KG5vZGUtPmNoaWxkMSgpLT5w
cmVkaWN0aW9uKCkpOwogCiAgICAgICAgICAgICAvLyBBc3N1bWUgY29uc2VydmF0aXZlbHkgdGhh
dCBhIFNldExvY2FsIGltcGxpZXMgdGhhdCB0aGUgdmFsdWUgbWF5IGZsb3cgdGhyb3VnaCBhIGxv
b3AsCiAgICAgICAgICAgICAvLyBhbmQgc28gd2Ugd291bGQgaGF2ZSBvdmVyZmxvdyBsZWFkaW5n
IHRvIHRoZSBwcm9ncmFtICJvYnNlcnZpbmciIG51bWJlcnMgZXZlbiBpZiBhbGwKICAgICAgICAg
ICAgIC8vIHVzZXJzIG9mIHRoZSB2YWx1ZSBhcmUgZG9pbmcgdG9JbnQzMi4gSXQgbWlnaHQgYmUg
d29ydGh3aGlsZSB0byByZXZpc2l0IHRoaXMgYXQgc29tZQogICAgICAgICAgICAgLy8gcG9pbnQg
YW5kIGFjdHVhbGx5IGNoZWNrIGlmIHRoZSBkYXRhIGZsb3cgaW52b2x2ZXMgbG9vcHMsIGJ1dCBy
aWdodCBub3cgSSBkb24ndCB0aGluawogICAgICAgICAgICAgLy8gd2UgaGF2ZSBldmlkZW5jZSB0
aGF0IHRoaXMgd291bGQgYmUgYmVuZWZpY2lhbCBmb3IgYmVuY2htYXJrcy4KLSAgICAgICAgICAg
IGNoYW5nZWQgfD0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5tZXJnZUZsYWdzKHZhcmlhYmxlQWNj
ZXNzRGF0YS0+ZmxhZ3MoKSB8IE5vZGVVc2VkQXNOdW1iZXIpOworICAgICAgICAgICAgY2hhbmdl
ZCB8PSBub2RlLT5jaGlsZDEoKS0+bWVyZ2VGbGFncyh2YXJpYWJsZUFjY2Vzc0RhdGEtPmZsYWdz
KCkgfCBOb2RlVXNlZEFzTnVtYmVyKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAg
ICAgICAgICAgICAKICAgICAgICAgY2FzZSBGbHVzaDogewogICAgICAgICAgICAgLy8gTWFrZSBz
dXJlIHRoYXQgdGhlIGFuYWx5c2lzIGtub3dzIHRoYXQgZmx1c2hlZCBsb2NhbHMgZXNjYXBlLgot
ICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBub2Rl
LnZhcmlhYmxlQWNjZXNzRGF0YSgpOworICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2
YXJpYWJsZUFjY2Vzc0RhdGEgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKICAgICAgICAg
ICAgIGNoYW5nZWQgfD0gdmFyaWFibGVBY2Nlc3NEYXRhLT5tZXJnZUZsYWdzKE5vZGVVc2VkQXNW
YWx1ZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtMjM4LDggKzIzNiw4IEBA
IHByaXZhdGU6CiAgICAgICAgICAgICBjaGFuZ2VkIHw9IHNldFByZWRpY3Rpb24oU3BlY0ludDMy
KTsKICAgICAgICAgICAgIGZsYWdzIHw9IE5vZGVVc2VkQXNJbnQgfCBOb2RlVXNlZEFzSW50TG9j
YWxseTsKICAgICAgICAgICAgIGZsYWdzICY9IH4oTm9kZVVzZWRBc051bWJlciB8IE5vZGVOZWVk
c05lZ1plcm8gfCBOb2RlVXNlZEFzT3RoZXIpOwotICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dy
YXBoW25vZGUuY2hpbGQxKCldLm1lcmdlRmxhZ3MoZmxhZ3MpOwotICAgICAgICAgICAgY2hhbmdl
ZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQyKCldLm1lcmdlRmxhZ3MoZmxhZ3MpOworICAgICAgICAg
ICAgY2hhbmdlZCB8PSBub2RlLT5jaGlsZDEoKS0+bWVyZ2VGbGFncyhmbGFncyk7CisgICAgICAg
ICAgICBjaGFuZ2VkIHw9IG5vZGUtPmNoaWxkMigpLT5tZXJnZUZsYWdzKGZsYWdzKTsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKQEAgLTI0Nyw1MCArMjQ1LDUw
IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBjaGFuZ2VkIHw9IHNldFByZWRpY3Rpb24oU3BlY0lu
dDMyKTsKICAgICAgICAgICAgIGZsYWdzIHw9IE5vZGVVc2VkQXNJbnQgfCBOb2RlVXNlZEFzSW50
TG9jYWxseTsKICAgICAgICAgICAgIGZsYWdzICY9IH4oTm9kZVVzZWRBc051bWJlciB8IE5vZGVO
ZWVkc05lZ1plcm8gfCBOb2RlVXNlZEFzT3RoZXIpOwotICAgICAgICAgICAgY2hhbmdlZCB8PSBt
X2dyYXBoW25vZGUuY2hpbGQxKCldLm1lcmdlRmxhZ3MoZmxhZ3MpOworICAgICAgICAgICAgY2hh
bmdlZCB8PSBub2RlLT5jaGlsZDEoKS0+bWVyZ2VGbGFncyhmbGFncyk7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgQXJyYXlQb3A6IHsK
LSAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKG5vZGUuZ2V0SGVhcFByZWRp
Y3Rpb24oKSk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbihub2RlLT5n
ZXRIZWFwUHJlZGljdGlvbigpKTsKICAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VEZWZhdWx0
RmxhZ3Mobm9kZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCiAgICAgICAgIGNh
c2UgQXJyYXlQdXNoOiB7Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbihu
b2RlLmdldEhlYXBQcmVkaWN0aW9uKCkpOwotICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBo
W25vZGUuY2hpbGQxKCldLm1lcmdlRmxhZ3MoTm9kZVVzZWRBc1ZhbHVlKTsKLSAgICAgICAgICAg
IGNoYW5nZWQgfD0gbV9ncmFwaFtub2RlLmNoaWxkMigpXS5tZXJnZUZsYWdzKE5vZGVVc2VkQXNW
YWx1ZSk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbihub2RlLT5nZXRI
ZWFwUHJlZGljdGlvbigpKTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbm9kZS0+Y2hpbGQxKCkt
Pm1lcmdlRmxhZ3MoTm9kZVVzZWRBc1ZhbHVlKTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbm9k
ZS0+Y2hpbGQyKCktPm1lcmdlRmxhZ3MoTm9kZVVzZWRBc1ZhbHVlKTsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBSZWdFeHBFeGVjOgogICAgICAgICBjYXNl
IFJlZ0V4cFRlc3Q6IHsKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKG5v
ZGUuZ2V0SGVhcFByZWRpY3Rpb24oKSk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJl
ZGljdGlvbihub2RlLT5nZXRIZWFwUHJlZGljdGlvbigpKTsKICAgICAgICAgICAgIGNoYW5nZWQg
fD0gbWVyZ2VEZWZhdWx0RmxhZ3Mobm9kZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
fQogCiAgICAgICAgIGNhc2UgU3RyaW5nQ2hhckNvZGVBdDogewogICAgICAgICAgICAgY2hhbmdl
ZCB8PSBtZXJnZVByZWRpY3Rpb24oU3BlY0ludDMyKTsKLSAgICAgICAgICAgIGNoYW5nZWQgfD0g
bV9ncmFwaFtub2RlLmNoaWxkMSgpXS5tZXJnZUZsYWdzKE5vZGVVc2VkQXNWYWx1ZSk7Ci0gICAg
ICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbm9kZS5jaGlsZDIoKV0ubWVyZ2VGbGFncyhOb2Rl
VXNlZEFzTnVtYmVyIHwgTm9kZVVzZWRBc090aGVyIHwgTm9kZVVzZWRBc0ludCB8IE5vZGVVc2Vk
QXNJbnRMb2NhbGx5KTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbm9kZS0+Y2hpbGQxKCktPm1l
cmdlRmxhZ3MoTm9kZVVzZWRBc1ZhbHVlKTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbm9kZS0+
Y2hpbGQyKCktPm1lcmdlRmxhZ3MoTm9kZVVzZWRBc051bWJlciB8IE5vZGVVc2VkQXNPdGhlciB8
IE5vZGVVc2VkQXNJbnQgfCBOb2RlVXNlZEFzSW50TG9jYWxseSk7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgfQogCiAgICAgICAgIGNhc2UgVUludDMyVG9OdW1iZXI6IHsKLSAgICAgICAg
ICAgIGlmIChub2RlQ2FuU3BlY3VsYXRlSW50ZWdlcihub2RlLmFyaXRoTm9kZUZsYWdzKCkpKQor
ICAgICAgICAgICAgaWYgKG5vZGVDYW5TcGVjdWxhdGVJbnRlZ2VyKG5vZGUtPmFyaXRoTm9kZUZs
YWdzKCkpKQogICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKFNwZWNJ
bnQzMik7CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJn
ZVByZWRpY3Rpb24oU3BlY051bWJlcik7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGNoYW5n
ZWQgfD0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5tZXJnZUZsYWdzKGZsYWdzKTsKKyAgICAgICAg
ICAgIGNoYW5nZWQgfD0gbm9kZS0+Y2hpbGQxKCktPm1lcmdlRmxhZ3MoZmxhZ3MpOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIFZhbHVlQWRkOiB7Ci0gICAg
ICAgICAgICBTcGVjdWxhdGVkVHlwZSBsZWZ0ID0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5wcmVk
aWN0aW9uKCk7Ci0gICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSByaWdodCA9IG1fZ3JhcGhbbm9k
ZS5jaGlsZDIoKV0ucHJlZGljdGlvbigpOworICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgbGVm
dCA9IG5vZGUtPmNoaWxkMSgpLT5wcmVkaWN0aW9uKCk7CisgICAgICAgICAgICBTcGVjdWxhdGVk
VHlwZSByaWdodCA9IG5vZGUtPmNoaWxkMigpLT5wcmVkaWN0aW9uKCk7CiAgICAgICAgICAgICAK
ICAgICAgICAgICAgIEFkZFNwZWN1bGF0aW9uTW9kZSBtb2RlID0gRG9udFNwZWN1bGF0ZUludGVn
ZXI7CiAgICAgICAgICAgICAKQEAgLTMwNywyMiArMzA1LDIyIEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKFNwZWNTdHJpbmcgfCBTcGVj
SW50MzIgfCBTcGVjRG91YmxlKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAg
ICAgICAgaWYgKGlzTm90TmVnWmVybyhub2RlLmNoaWxkMSgpLmluZGV4KCkpIHx8IGlzTm90TmVn
WmVybyhub2RlLmNoaWxkMigpLmluZGV4KCkpKQorICAgICAgICAgICAgaWYgKGlzTm90TmVnWmVy
byhub2RlLT5jaGlsZDEoKS5ub2RlKCkpIHx8IGlzTm90TmVnWmVybyhub2RlLT5jaGlsZDIoKS5u
b2RlKCkpKQogICAgICAgICAgICAgICAgIGZsYWdzICY9IH5Ob2RlTmVlZHNOZWdaZXJvOwotICAg
ICAgICAgICAgaWYgKG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0uaGFzTnVtYmVyUmVzdWx0KCkgfHwg
bV9ncmFwaFtub2RlLmNoaWxkMigpXS5oYXNOdW1iZXJSZXN1bHQoKSkKKyAgICAgICAgICAgIGlm
IChub2RlLT5jaGlsZDEoKS0+aGFzTnVtYmVyUmVzdWx0KCkgfHwgbm9kZS0+Y2hpbGQyKCktPmhh
c051bWJlclJlc3VsdCgpKQogICAgICAgICAgICAgICAgIGZsYWdzICY9IH5Ob2RlVXNlZEFzT3Ro
ZXI7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlmIChtb2RlICE9IFNwZWN1bGF0ZUludGVn
ZXIpCiAgICAgICAgICAgICAgICAgZmxhZ3MgfD0gTm9kZVVzZWRBc051bWJlcjsKICAgICAgICAg
ICAgIAotICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLm1lcmdl
RmxhZ3MoZmxhZ3MpOwotICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQy
KCldLm1lcmdlRmxhZ3MoZmxhZ3MpOworICAgICAgICAgICAgY2hhbmdlZCB8PSBub2RlLT5jaGls
ZDEoKS0+bWVyZ2VGbGFncyhmbGFncyk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG5vZGUtPmNo
aWxkMigpLT5tZXJnZUZsYWdzKGZsYWdzKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9
CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBBcml0aEFkZDogewotICAgICAgICAgICAgU3Bl
Y3VsYXRlZFR5cGUgbGVmdCA9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ucHJlZGljdGlvbigpOwot
ICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgcmlnaHQgPSBtX2dyYXBoW25vZGUuY2hpbGQyKCld
LnByZWRpY3Rpb24oKTsKKyAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIGxlZnQgPSBub2RlLT5j
aGlsZDEoKS0+cHJlZGljdGlvbigpOworICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgcmlnaHQg
PSBub2RlLT5jaGlsZDIoKS0+cHJlZGljdGlvbigpOwogICAgICAgICAgICAgCiAgICAgICAgICAg
ICBBZGRTcGVjdWxhdGlvbk1vZGUgbW9kZSA9IERvbnRTcGVjdWxhdGVJbnRlZ2VyOwogICAgICAg
ICAgICAgCkBAIC0zMzMsMjEgKzMzMSwyMSBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAg
ICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbihzcGVjdWxhdGVkRG91YmxlVHlwZUZvclByZWRp
Y3Rpb25zKGxlZnQsIHJpZ2h0KSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAg
ICAgICAgIGlmIChpc05vdE5lZ1plcm8obm9kZS5jaGlsZDEoKS5pbmRleCgpKSB8fCBpc05vdE5l
Z1plcm8obm9kZS5jaGlsZDIoKS5pbmRleCgpKSkKKyAgICAgICAgICAgIGlmIChpc05vdE5lZ1pl
cm8obm9kZS0+Y2hpbGQxKCkubm9kZSgpKSB8fCBpc05vdE5lZ1plcm8obm9kZS0+Y2hpbGQyKCku
bm9kZSgpKSkKICAgICAgICAgICAgICAgICBmbGFncyAmPSB+Tm9kZU5lZWRzTmVnWmVybzsKICAg
ICAgICAgICAgIGZsYWdzICY9IH5Ob2RlVXNlZEFzT3RoZXI7CiAgICAgICAgICAgICAKICAgICAg
ICAgICAgIGlmIChtb2RlICE9IFNwZWN1bGF0ZUludGVnZXIpCiAgICAgICAgICAgICAgICAgZmxh
Z3MgfD0gTm9kZVVzZWRBc051bWJlcjsKICAgICAgICAgICAgIAotICAgICAgICAgICAgY2hhbmdl
ZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLm1lcmdlRmxhZ3MoZmxhZ3MpOwotICAgICAgICAg
ICAgY2hhbmdlZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQyKCldLm1lcmdlRmxhZ3MoZmxhZ3MpOwor
ICAgICAgICAgICAgY2hhbmdlZCB8PSBub2RlLT5jaGlsZDEoKS0+bWVyZ2VGbGFncyhmbGFncyk7
CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG5vZGUtPmNoaWxkMigpLT5tZXJnZUZsYWdzKGZsYWdz
KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAg
Y2FzZSBBcml0aFN1YjogewotICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgbGVmdCA9IG1fZ3Jh
cGhbbm9kZS5jaGlsZDEoKV0ucHJlZGljdGlvbigpOwotICAgICAgICAgICAgU3BlY3VsYXRlZFR5
cGUgcmlnaHQgPSBtX2dyYXBoW25vZGUuY2hpbGQyKCldLnByZWRpY3Rpb24oKTsKKyAgICAgICAg
ICAgIFNwZWN1bGF0ZWRUeXBlIGxlZnQgPSBub2RlLT5jaGlsZDEoKS0+cHJlZGljdGlvbigpOwor
ICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgcmlnaHQgPSBub2RlLT5jaGlsZDIoKS0+cHJlZGlj
dGlvbigpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBBZGRTcGVjdWxhdGlvbk1vZGUgbW9k
ZSA9IERvbnRTcGVjdWxhdGVJbnRlZ2VyOwogICAgICAgICAgICAgCkBAIC0zNTgsMzkgKzM1Niwz
OSBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGlj
dGlvbihzcGVjdWxhdGVkRG91YmxlVHlwZUZvclByZWRpY3Rpb25zKGxlZnQsIHJpZ2h0KSk7CiAg
ICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmIChpc05vdFplcm8obm9kZS5jaGlsZDEoKS5p
bmRleCgpKSB8fCBpc05vdFplcm8obm9kZS5jaGlsZDIoKS5pbmRleCgpKSkKKyAgICAgICAgICAg
IGlmIChpc05vdFplcm8obm9kZS0+Y2hpbGQxKCkubm9kZSgpKSB8fCBpc05vdFplcm8obm9kZS0+
Y2hpbGQyKCkubm9kZSgpKSkKICAgICAgICAgICAgICAgICBmbGFncyAmPSB+Tm9kZU5lZWRzTmVn
WmVybzsKICAgICAgICAgICAgIGZsYWdzICY9IH5Ob2RlVXNlZEFzT3RoZXI7CiAgICAgICAgICAg
ICAKICAgICAgICAgICAgIGlmIChtb2RlICE9IFNwZWN1bGF0ZUludGVnZXIpCiAgICAgICAgICAg
ICAgICAgZmxhZ3MgfD0gTm9kZVVzZWRBc051bWJlcjsKICAgICAgICAgICAgIAotICAgICAgICAg
ICAgY2hhbmdlZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLm1lcmdlRmxhZ3MoZmxhZ3MpOwot
ICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQyKCldLm1lcmdlRmxhZ3Mo
ZmxhZ3MpOworICAgICAgICAgICAgY2hhbmdlZCB8PSBub2RlLT5jaGlsZDEoKS0+bWVyZ2VGbGFn
cyhmbGFncyk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG5vZGUtPmNoaWxkMigpLT5tZXJnZUZs
YWdzKGZsYWdzKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAK
ICAgICAgICAgY2FzZSBBcml0aE5lZ2F0ZToKLSAgICAgICAgICAgIGlmIChtX2dyYXBoW25vZGUu
Y2hpbGQxKCldLnByZWRpY3Rpb24oKSkgeworICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgp
LT5wcmVkaWN0aW9uKCkpIHsKICAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC5uZWdhdGVTaG91
bGRTcGVjdWxhdGVJbnRlZ2VyKG5vZGUpKQogICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9
IG1lcmdlUHJlZGljdGlvbihTcGVjSW50MzIpOwogICAgICAgICAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVByZWRpY3Rpb24oc3BlY3VsYXRlZERvdWJs
ZVR5cGVGb3JQcmVkaWN0aW9uKG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ucHJlZGljdGlvbigpKSk7
CisgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKHNwZWN1bGF0
ZWREb3VibGVUeXBlRm9yUHJlZGljdGlvbihub2RlLT5jaGlsZDEoKS0+cHJlZGljdGlvbigpKSk7
CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGZsYWdzICY9IH5Ob2RlVXNlZEFzT3RoZXI7
CiAKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5tZXJnZUZs
YWdzKGZsYWdzKTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbm9kZS0+Y2hpbGQxKCktPm1lcmdl
RmxhZ3MoZmxhZ3MpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICAgICAg
Y2FzZSBBcml0aE1pbjoKICAgICAgICAgY2FzZSBBcml0aE1heDogewotICAgICAgICAgICAgU3Bl
Y3VsYXRlZFR5cGUgbGVmdCA9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ucHJlZGljdGlvbigpOwot
ICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgcmlnaHQgPSBtX2dyYXBoW25vZGUuY2hpbGQyKCld
LnByZWRpY3Rpb24oKTsKKyAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIGxlZnQgPSBub2RlLT5j
aGlsZDEoKS0+cHJlZGljdGlvbigpOworICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgcmlnaHQg
PSBub2RlLT5jaGlsZDIoKS0+cHJlZGljdGlvbigpOwogICAgICAgICAgICAgCiAgICAgICAgICAg
ICBpZiAobGVmdCAmJiByaWdodCkgewotICAgICAgICAgICAgICAgIGlmIChOb2RlOjpzaG91bGRT
cGVjdWxhdGVJbnRlZ2VyRm9yQXJpdGhtZXRpYyhtX2dyYXBoW25vZGUuY2hpbGQxKCldLCBtX2dy
YXBoW25vZGUuY2hpbGQyKCldKQotICAgICAgICAgICAgICAgICAgICAmJiBub2RlQ2FuU3BlY3Vs
YXRlSW50ZWdlcihub2RlLmFyaXRoTm9kZUZsYWdzKCkpKQorICAgICAgICAgICAgICAgIGlmIChO
b2RlOjpzaG91bGRTcGVjdWxhdGVJbnRlZ2VyRm9yQXJpdGhtZXRpYyhub2RlLT5jaGlsZDEoKS5u
b2RlKCksIG5vZGUtPmNoaWxkMigpLm5vZGUoKSkKKyAgICAgICAgICAgICAgICAgICAgJiYgbm9k
ZUNhblNwZWN1bGF0ZUludGVnZXIobm9kZS0+YXJpdGhOb2RlRmxhZ3MoKSkpCiAgICAgICAgICAg
ICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKFNwZWNJbnQzMik7CiAgICAgICAg
ICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGlj
dGlvbihzcGVjdWxhdGVkRG91YmxlVHlwZUZvclByZWRpY3Rpb25zKGxlZnQsIHJpZ2h0KSk7CkBA
IC0zOTksMTQgKzM5NywxNCBAQCBwcml2YXRlOgogICAgICAgICAgICAgZmxhZ3MgfD0gTm9kZVVz
ZWRBc051bWJlcjsKICAgICAgICAgICAgIGZsYWdzICY9IH5Ob2RlVXNlZEFzT3RoZXI7CiAKLSAg
ICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5tZXJnZUZsYWdzKGZs
YWdzKTsKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaFtub2RlLmNoaWxkMigpXS5tZXJn
ZUZsYWdzKGZsYWdzKTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbm9kZS0+Y2hpbGQxKCktPm1l
cmdlRmxhZ3MoZmxhZ3MpOworICAgICAgICAgICAgY2hhbmdlZCB8PSBub2RlLT5jaGlsZDIoKS0+
bWVyZ2VGbGFncyhmbGFncyk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCiAgICAg
ICAgIGNhc2UgQXJpdGhNdWw6IHsKLSAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIGxlZnQgPSBt
X2dyYXBoW25vZGUuY2hpbGQxKCldLnByZWRpY3Rpb24oKTsKLSAgICAgICAgICAgIFNwZWN1bGF0
ZWRUeXBlIHJpZ2h0ID0gbV9ncmFwaFtub2RlLmNoaWxkMigpXS5wcmVkaWN0aW9uKCk7CisgICAg
ICAgICAgICBTcGVjdWxhdGVkVHlwZSBsZWZ0ID0gbm9kZS0+Y2hpbGQxKCktPnByZWRpY3Rpb24o
KTsKKyAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHJpZ2h0ID0gbm9kZS0+Y2hpbGQyKCktPnBy
ZWRpY3Rpb24oKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKGxlZnQgJiYgcmlnaHQp
IHsKICAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC5tdWxTaG91bGRTcGVjdWxhdGVJbnRlZ2Vy
KG5vZGUpKQpAQCAtNDIyLDggKzQyMCw4IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAvLyBpdHNl
bGYgdW5sZXNzIHdlIGNhbiBwcm92ZSB0aGF0IHRoZXJlIGlzIG5vIHdheSBmb3IgdGhlIHZhbHVl
cwogICAgICAgICAgICAgLy8gcHJvZHVjZWQgdG8gY2F1c2UgZG91YmxlIHJvdW5kaW5nLgogICAg
ICAgICAgICAgCi0gICAgICAgICAgICBpZiAoIWlzV2l0aGluUG93ZXJPZlR3byhub2RlLmNoaWxk
MSgpLmluZGV4KCksIDIyKQotICAgICAgICAgICAgICAgICYmICFpc1dpdGhpblBvd2VyT2ZUd28o
bm9kZS5jaGlsZDIoKS5pbmRleCgpLCAyMikpCisgICAgICAgICAgICBpZiAoIWlzV2l0aGluUG93
ZXJPZlR3byhub2RlLT5jaGlsZDEoKS5ub2RlKCksIDIyKQorICAgICAgICAgICAgICAgICYmICFp
c1dpdGhpblBvd2VyT2ZUd28obm9kZS0+Y2hpbGQyKCkubm9kZSgpLCAyMikpCiAgICAgICAgICAg
ICAgICAgZmxhZ3MgfD0gTm9kZVVzZWRBc051bWJlcjsKICAgICAgICAgICAgIAogICAgICAgICAg
ICAgY2hhbmdlZCB8PSBub2RlLm1lcmdlRmxhZ3MoZmxhZ3MpOwpAQCAtNDMxLDE4ICs0MjksMTgg
QEAgcHJpdmF0ZToKICAgICAgICAgICAgIGZsYWdzIHw9IE5vZGVVc2VkQXNOdW1iZXIgfCBOb2Rl
TmVlZHNOZWdaZXJvOwogICAgICAgICAgICAgZmxhZ3MgJj0gfk5vZGVVc2VkQXNPdGhlcjsKIAot
ICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLm1lcmdlRmxhZ3Mo
ZmxhZ3MpOwotICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQyKCldLm1l
cmdlRmxhZ3MoZmxhZ3MpOworICAgICAgICAgICAgY2hhbmdlZCB8PSBub2RlLT5jaGlsZDEoKS0+
bWVyZ2VGbGFncyhmbGFncyk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG5vZGUtPmNoaWxkMigp
LT5tZXJnZUZsYWdzKGZsYWdzKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAg
ICAgICAgICAKICAgICAgICAgY2FzZSBBcml0aERpdjogewotICAgICAgICAgICAgU3BlY3VsYXRl
ZFR5cGUgbGVmdCA9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ucHJlZGljdGlvbigpOwotICAgICAg
ICAgICAgU3BlY3VsYXRlZFR5cGUgcmlnaHQgPSBtX2dyYXBoW25vZGUuY2hpbGQyKCldLnByZWRp
Y3Rpb24oKTsKKyAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIGxlZnQgPSBub2RlLT5jaGlsZDEo
KS0+cHJlZGljdGlvbigpOworICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgcmlnaHQgPSBub2Rl
LT5jaGlsZDIoKS0+cHJlZGljdGlvbigpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAo
bGVmdCAmJiByaWdodCkgewotICAgICAgICAgICAgICAgIGlmIChOb2RlOjpzaG91bGRTcGVjdWxh
dGVJbnRlZ2VyRm9yQXJpdGhtZXRpYyhtX2dyYXBoW25vZGUuY2hpbGQxKCldLCBtX2dyYXBoW25v
ZGUuY2hpbGQyKCldKQotICAgICAgICAgICAgICAgICAgICAmJiBub2RlQ2FuU3BlY3VsYXRlSW50
ZWdlcihub2RlLmFyaXRoTm9kZUZsYWdzKCkpKQorICAgICAgICAgICAgICAgIGlmIChOb2RlOjpz
aG91bGRTcGVjdWxhdGVJbnRlZ2VyRm9yQXJpdGhtZXRpYyhub2RlLT5jaGlsZDEoKS5ub2RlKCks
IG5vZGUtPmNoaWxkMigpLm5vZGUoKSkKKyAgICAgICAgICAgICAgICAgICAgJiYgbm9kZUNhblNw
ZWN1bGF0ZUludGVnZXIobm9kZS0+YXJpdGhOb2RlRmxhZ3MoKSkpCiAgICAgICAgICAgICAgICAg
ICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKFNwZWNJbnQzMik7CiAgICAgICAgICAgICAg
ICAgZWxzZQogICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbihT
cGVjRG91YmxlKTsKQEAgLTQ1NiwxOCArNDU0LDE4IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBm
bGFncyB8PSBOb2RlVXNlZEFzTnVtYmVyIHwgTm9kZU5lZWRzTmVnWmVybzsKICAgICAgICAgICAg
IGZsYWdzICY9IH5Ob2RlVXNlZEFzT3RoZXI7CiAKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9n
cmFwaFtub2RlLmNoaWxkMSgpXS5tZXJnZUZsYWdzKGZsYWdzKTsKLSAgICAgICAgICAgIGNoYW5n
ZWQgfD0gbV9ncmFwaFtub2RlLmNoaWxkMigpXS5tZXJnZUZsYWdzKGZsYWdzKTsKKyAgICAgICAg
ICAgIGNoYW5nZWQgfD0gbm9kZS0+Y2hpbGQxKCktPm1lcmdlRmxhZ3MoZmxhZ3MpOworICAgICAg
ICAgICAgY2hhbmdlZCB8PSBub2RlLT5jaGlsZDIoKS0+bWVyZ2VGbGFncyhmbGFncyk7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgQXJp
dGhNb2Q6IHsKLSAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIGxlZnQgPSBtX2dyYXBoW25vZGUu
Y2hpbGQxKCldLnByZWRpY3Rpb24oKTsKLSAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHJpZ2h0
ID0gbV9ncmFwaFtub2RlLmNoaWxkMigpXS5wcmVkaWN0aW9uKCk7CisgICAgICAgICAgICBTcGVj
dWxhdGVkVHlwZSBsZWZ0ID0gbm9kZS0+Y2hpbGQxKCktPnByZWRpY3Rpb24oKTsKKyAgICAgICAg
ICAgIFNwZWN1bGF0ZWRUeXBlIHJpZ2h0ID0gbm9kZS0+Y2hpbGQyKCktPnByZWRpY3Rpb24oKTsK
ICAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKGxlZnQgJiYgcmlnaHQpIHsKLSAgICAgICAg
ICAgICAgICBpZiAoTm9kZTo6c2hvdWxkU3BlY3VsYXRlSW50ZWdlckZvckFyaXRobWV0aWMobV9n
cmFwaFtub2RlLmNoaWxkMSgpXSwgbV9ncmFwaFtub2RlLmNoaWxkMigpXSkKLSAgICAgICAgICAg
ICAgICAgICAgJiYgbm9kZUNhblNwZWN1bGF0ZUludGVnZXIobm9kZS5hcml0aE5vZGVGbGFncygp
KSkKKyAgICAgICAgICAgICAgICBpZiAoTm9kZTo6c2hvdWxkU3BlY3VsYXRlSW50ZWdlckZvckFy
aXRobWV0aWMobm9kZS0+Y2hpbGQxKCkubm9kZSgpLCBub2RlLT5jaGlsZDIoKS5ub2RlKCkpCisg
ICAgICAgICAgICAgICAgICAgICYmIG5vZGVDYW5TcGVjdWxhdGVJbnRlZ2VyKG5vZGUtPmFyaXRo
Tm9kZUZsYWdzKCkpKQogICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGlj
dGlvbihTcGVjSW50MzIpOwogICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAg
ICAgY2hhbmdlZCB8PSBtZXJnZVByZWRpY3Rpb24oU3BlY0RvdWJsZSk7CkBAIC00NzYsOCArNDc0
LDggQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGZsYWdzIHw9IE5vZGVVc2VkQXNOdW1iZXIgfCBO
b2RlTmVlZHNOZWdaZXJvOwogICAgICAgICAgICAgZmxhZ3MgJj0gfk5vZGVVc2VkQXNPdGhlcjsK
IAotICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLm1lcmdlRmxh
Z3MoZmxhZ3MpOwotICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQyKCld
Lm1lcmdlRmxhZ3MoZmxhZ3MpOworICAgICAgICAgICAgY2hhbmdlZCB8PSBub2RlLT5jaGlsZDEo
KS0+bWVyZ2VGbGFncyhmbGFncyk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG5vZGUtPmNoaWxk
MigpLT5tZXJnZUZsYWdzKGZsYWdzKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAg
ICAgICAgICAgICAKQEAgLTQ4NSwxOSArNDgzLDE5IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBj
aGFuZ2VkIHw9IHNldFByZWRpY3Rpb24oU3BlY0RvdWJsZSk7CiAgICAgICAgICAgICBmbGFncyB8
PSBOb2RlVXNlZEFzTnVtYmVyIHwgTm9kZU5lZWRzTmVnWmVybzsKICAgICAgICAgICAgIGZsYWdz
ICY9IH5Ob2RlVXNlZEFzT3RoZXI7Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbm9k
ZS5jaGlsZDEoKV0ubWVyZ2VGbGFncyhmbGFncyk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG5v
ZGUtPmNoaWxkMSgpLT5tZXJnZUZsYWdzKGZsYWdzKTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBBcml0aEFiczogewotICAgICAgICAg
ICAgU3BlY3VsYXRlZFR5cGUgY2hpbGQgPSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLnByZWRpY3Rp
b24oKTsKKyAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIGNoaWxkID0gbm9kZS0+Y2hpbGQxKCkt
PnByZWRpY3Rpb24oKTsKICAgICAgICAgICAgIGlmIChpc0ludDMyU3BlY3VsYXRpb25Gb3JBcml0
aG1ldGljKGNoaWxkKQotICAgICAgICAgICAgICAgICYmIG5vZGVDYW5TcGVjdWxhdGVJbnRlZ2Vy
KG5vZGUuYXJpdGhOb2RlRmxhZ3MoKSkpCisgICAgICAgICAgICAgICAgJiYgbm9kZUNhblNwZWN1
bGF0ZUludGVnZXIobm9kZS0+YXJpdGhOb2RlRmxhZ3MoKSkpCiAgICAgICAgICAgICAgICAgY2hh
bmdlZCB8PSBtZXJnZVByZWRpY3Rpb24oU3BlY0ludDMyKTsKICAgICAgICAgICAgIGVsc2UKICAg
ICAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbihzcGVjdWxhdGVkRG91Ymxl
VHlwZUZvclByZWRpY3Rpb24oY2hpbGQpKTsKIAotICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dy
YXBoW25vZGUuY2hpbGQxKCldLm1lcmdlRmxhZ3MoZmxhZ3MpOworICAgICAgICAgICAgY2hhbmdl
ZCB8PSBub2RlLT5jaGlsZDEoKS0+bWVyZ2VGbGFncyhmbGFncyk7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgfQogICAgICAgICAgICAgCkBAIC01MjcsMzEgKzUyNSwzMSBAQCBwcml2YXRl
OgogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBHZXRCeUlkOiB7Ci0gICAgICAgICAgICBjaGFu
Z2VkIHw9IG1lcmdlUHJlZGljdGlvbihub2RlLmdldEhlYXBQcmVkaWN0aW9uKCkpOworICAgICAg
ICAgICAgY2hhbmdlZCB8PSBtZXJnZVByZWRpY3Rpb24obm9kZS0+Z2V0SGVhcFByZWRpY3Rpb24o
KSk7CiAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlRGVmYXVsdEZsYWdzKG5vZGUpOwogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBjYXNlIEdl
dEJ5SWRGbHVzaDoKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKG5vZGUu
Z2V0SGVhcFByZWRpY3Rpb24oKSk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGlj
dGlvbihub2RlLT5nZXRIZWFwUHJlZGljdGlvbigpKTsKICAgICAgICAgICAgIGNoYW5nZWQgfD0g
bWVyZ2VEZWZhdWx0RmxhZ3Mobm9kZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
IAogICAgICAgICBjYXNlIEdldEJ5VmFsOiB7Ci0gICAgICAgICAgICBpZiAobV9ncmFwaFtub2Rl
LmNoaWxkMSgpXS5zaG91bGRTcGVjdWxhdGVGbG9hdDMyQXJyYXkoKQotICAgICAgICAgICAgICAg
IHx8IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0uc2hvdWxkU3BlY3VsYXRlRmxvYXQ2NEFycmF5KCkp
CisgICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZUZsb2F0MzJB
cnJheSgpCisgICAgICAgICAgICAgICAgfHwgbm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0
ZUZsb2F0NjRBcnJheSgpKQogICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0
aW9uKFNwZWNEb3VibGUpOwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIGNoYW5n
ZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKG5vZGUuZ2V0SGVhcFByZWRpY3Rpb24oKSk7CiAKLSAgICAg
ICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5tZXJnZUZsYWdzKE5vZGVV
c2VkQXNWYWx1ZSk7Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbm9kZS5jaGlsZDIo
KV0ubWVyZ2VGbGFncyhOb2RlVXNlZEFzTnVtYmVyIHwgTm9kZVVzZWRBc090aGVyIHwgTm9kZVVz
ZWRBc0ludCB8IE5vZGVVc2VkQXNJbnRMb2NhbGx5KTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0g
bm9kZS0+Y2hpbGQxKCktPm1lcmdlRmxhZ3MoTm9kZVVzZWRBc1ZhbHVlKTsKKyAgICAgICAgICAg
IGNoYW5nZWQgfD0gbm9kZS0+Y2hpbGQyKCktPm1lcmdlRmxhZ3MoTm9kZVVzZWRBc051bWJlciB8
IE5vZGVVc2VkQXNPdGhlciB8IE5vZGVVc2VkQXNJbnQgfCBOb2RlVXNlZEFzSW50TG9jYWxseSk7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgIGNh
c2UgR2V0TXlBcmd1bWVudEJ5VmFsU2FmZTogewotICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJn
ZVByZWRpY3Rpb24obm9kZS5nZXRIZWFwUHJlZGljdGlvbigpKTsKLSAgICAgICAgICAgIGNoYW5n
ZWQgfD0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5tZXJnZUZsYWdzKE5vZGVVc2VkQXNOdW1iZXIg
fCBOb2RlVXNlZEFzT3RoZXIgfCBOb2RlVXNlZEFzSW50IHwgTm9kZVVzZWRBc0ludExvY2FsbHkp
OworICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVByZWRpY3Rpb24obm9kZS0+Z2V0SGVhcFBy
ZWRpY3Rpb24oKSk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG5vZGUtPmNoaWxkMSgpLT5tZXJn
ZUZsYWdzKE5vZGVVc2VkQXNOdW1iZXIgfCBOb2RlVXNlZEFzT3RoZXIgfCBOb2RlVXNlZEFzSW50
IHwgTm9kZVVzZWRBc0ludExvY2FsbHkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0K
ICAgICAgICAgICAgIApAQCAtNTcxLDI1ICs1NjksMjMgQEAgcHJpdmF0ZToKICAgICAgICAgfQog
CiAgICAgICAgIGNhc2UgR2V0QnlPZmZzZXQ6IHsKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVy
Z2VQcmVkaWN0aW9uKG5vZGUuZ2V0SGVhcFByZWRpY3Rpb24oKSk7CisgICAgICAgICAgICBjaGFu
Z2VkIHw9IG1lcmdlUHJlZGljdGlvbihub2RlLT5nZXRIZWFwUHJlZGljdGlvbigpKTsKICAgICAg
ICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VEZWZhdWx0RmxhZ3Mobm9kZSk7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgQ2FsbDoKICAgICAg
ICAgY2FzZSBDb25zdHJ1Y3Q6IHsKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0
aW9uKG5vZGUuZ2V0SGVhcFByZWRpY3Rpb24oKSk7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IGNoaWxkSWR4ID0gbm9kZS5maXJzdENoaWxkKCk7Ci0gICAgICAgICAgICAgICAgIGNoaWxkSWR4
IDwgbm9kZS5maXJzdENoaWxkKCkgKyBub2RlLm51bUNoaWxkcmVuKCk7Ci0gICAgICAgICAgICAg
ICAgICsrY2hpbGRJZHgpIHsKLSAgICAgICAgICAgICAgICBFZGdlIGVkZ2UgPSBtX2dyYXBoLm1f
dmFyQXJnQ2hpbGRyZW5bY2hpbGRJZHhdOwotICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9n
cmFwaFtlZGdlXS5tZXJnZUZsYWdzKE5vZGVVc2VkQXNWYWx1ZSk7Ci0gICAgICAgICAgICB9Cisg
ICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbihub2RlLT5nZXRIZWFwUHJlZGlj
dGlvbigpKTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgY2hpbGRJZHggPSBub2RlLT5maXJz
dENoaWxkKCk7CisgICAgICAgICAgICAgICAgIGNoaWxkSWR4IDwgbm9kZS0+Zmlyc3RDaGlsZCgp
ICsgbm9kZS0+bnVtQ2hpbGRyZW4oKTsKKyAgICAgICAgICAgICAgICAgKytjaGlsZElkeCkKKyAg
ICAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGgubV92YXJBcmdDaGlsZHJlbltjaGlsZElk
eF0tPm1lcmdlRmxhZ3MoTm9kZVVzZWRBc1ZhbHVlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBDb252ZXJ0VGhpczogewotICAgICAg
ICAgICAgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiA9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0u
cHJlZGljdGlvbigpOworICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiA9IG5v
ZGUtPmNoaWxkMSgpLT5wcmVkaWN0aW9uKCk7CiAgICAgICAgICAgICBpZiAocHJlZGljdGlvbikg
ewogICAgICAgICAgICAgICAgIGlmIChwcmVkaWN0aW9uICYgflNwZWNPYmplY3RNYXNrKSB7CiAg
ICAgICAgICAgICAgICAgICAgIHByZWRpY3Rpb24gJj0gU3BlY09iamVjdE1hc2s7CkBAIC02MDIs
MTMgKzU5OCwxMyBAQCBwcml2YXRlOgogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAg
Y2FzZSBHZXRHbG9iYWxWYXI6IHsKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0
aW9uKG5vZGUuZ2V0SGVhcFByZWRpY3Rpb24oKSk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG1l
cmdlUHJlZGljdGlvbihub2RlLT5nZXRIZWFwUHJlZGljdGlvbigpKTsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBQdXRHbG9iYWxWYXI6
CiAgICAgICAgIGNhc2UgUHV0R2xvYmFsVmFyQ2hlY2s6IHsKLSAgICAgICAgICAgIGNoYW5nZWQg
fD0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5tZXJnZUZsYWdzKE5vZGVVc2VkQXNWYWx1ZSk7Cisg
ICAgICAgICAgICBjaGFuZ2VkIHw9IG5vZGUtPmNoaWxkMSgpLT5tZXJnZUZsYWdzKE5vZGVVc2Vk
QXNWYWx1ZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCkBA
IC02MTcsNyArNjEzLDcgQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBSZXNvbHZlQmFzZToKICAg
ICAgICAgY2FzZSBSZXNvbHZlQmFzZVN0cmljdFB1dDoKICAgICAgICAgY2FzZSBSZXNvbHZlR2xv
YmFsOiB7Ci0gICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uID0gbm9kZS5nZXRI
ZWFwUHJlZGljdGlvbigpOworICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiA9
IG5vZGUtPmdldEhlYXBQcmVkaWN0aW9uKCk7CiAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdl
UHJlZGljdGlvbihwcmVkaWN0aW9uKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkBA
IC02NDMsMTggKzYzOSwxNiBAQCBwcml2YXRlOgogICAgICAgICAgICAgCiAgICAgICAgIGNhc2Ug
TmV3QXJyYXk6IHsKICAgICAgICAgICAgIGNoYW5nZWQgfD0gc2V0UHJlZGljdGlvbihTcGVjQXJy
YXkpOwotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBjaGlsZElkeCA9IG5vZGUuZmlyc3RDaGls
ZCgpOwotICAgICAgICAgICAgICAgICBjaGlsZElkeCA8IG5vZGUuZmlyc3RDaGlsZCgpICsgbm9k
ZS5udW1DaGlsZHJlbigpOwotICAgICAgICAgICAgICAgICArK2NoaWxkSWR4KSB7Ci0gICAgICAg
ICAgICAgICAgRWRnZSBlZGdlID0gbV9ncmFwaC5tX3ZhckFyZ0NoaWxkcmVuW2NoaWxkSWR4XTsK
LSAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhbZWRnZV0ubWVyZ2VGbGFncyhOb2Rl
VXNlZEFzVmFsdWUpOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBj
aGlsZElkeCA9IG5vZGUtPmZpcnN0Q2hpbGQoKTsKKyAgICAgICAgICAgICAgICAgY2hpbGRJZHgg
PCBub2RlLT5maXJzdENoaWxkKCkgKyBub2RlLT5udW1DaGlsZHJlbigpOworICAgICAgICAgICAg
ICAgICArK2NoaWxkSWR4KQorICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaC5tX3Zh
ckFyZ0NoaWxkcmVuW2NoaWxkSWR4XS0+bWVyZ2VGbGFncyhOb2RlVXNlZEFzVmFsdWUpOwogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBjYXNlIE5l
d0FycmF5V2l0aFNpemU6IHsKICAgICAgICAgICAgIGNoYW5nZWQgfD0gc2V0UHJlZGljdGlvbihT
cGVjQXJyYXkpOwotICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQxKCld
Lm1lcmdlRmxhZ3MoTm9kZVVzZWRBc1ZhbHVlIHwgTm9kZVVzZWRBc0ludCB8IE5vZGVVc2VkQXNJ
bnRMb2NhbGx5KTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbm9kZS0+Y2hpbGQxKCktPm1lcmdl
RmxhZ3MoTm9kZVVzZWRBc1ZhbHVlIHwgTm9kZVVzZWRBc0ludCB8IE5vZGVVc2VkQXNJbnRMb2Nh
bGx5KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKQEAgLTY3
MCwyMiArNjY0LDIyIEBAIHByaXZhdGU6CiAgICAgICAgIAogICAgICAgICBjYXNlIFN0cmluZ0No
YXJBdDogewogICAgICAgICAgICAgY2hhbmdlZCB8PSBzZXRQcmVkaWN0aW9uKFNwZWNTdHJpbmcp
OwotICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLm1lcmdlRmxh
Z3MoTm9kZVVzZWRBc1ZhbHVlKTsKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaFtub2Rl
LmNoaWxkMigpXS5tZXJnZUZsYWdzKE5vZGVVc2VkQXNOdW1iZXIgfCBOb2RlVXNlZEFzT3RoZXIg
fCBOb2RlVXNlZEFzSW50IHwgTm9kZVVzZWRBc0ludExvY2FsbHkpOworICAgICAgICAgICAgY2hh
bmdlZCB8PSBub2RlLT5jaGlsZDEoKS0+bWVyZ2VGbGFncyhOb2RlVXNlZEFzVmFsdWUpOworICAg
ICAgICAgICAgY2hhbmdlZCB8PSBub2RlLT5jaGlsZDIoKS0+bWVyZ2VGbGFncyhOb2RlVXNlZEFz
TnVtYmVyIHwgTm9kZVVzZWRBc090aGVyIHwgTm9kZVVzZWRBc0ludCB8IE5vZGVVc2VkQXNJbnRM
b2NhbGx5KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKICAg
ICAgICAgY2FzZSBTdHJDYXQ6IHsKICAgICAgICAgICAgIGNoYW5nZWQgfD0gc2V0UHJlZGljdGlv
bihTcGVjU3RyaW5nKTsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgY2hpbGRJZHggPSBub2Rl
LmZpcnN0Q2hpbGQoKTsKLSAgICAgICAgICAgICAgICAgY2hpbGRJZHggPCBub2RlLmZpcnN0Q2hp
bGQoKSArIG5vZGUubnVtQ2hpbGRyZW4oKTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgY2hp
bGRJZHggPSBub2RlLT5maXJzdENoaWxkKCk7CisgICAgICAgICAgICAgICAgIGNoaWxkSWR4IDwg
bm9kZS0+Zmlyc3RDaGlsZCgpICsgbm9kZS0+bnVtQ2hpbGRyZW4oKTsKICAgICAgICAgICAgICAg
ICAgKytjaGlsZElkeCkKLSAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbV9ncmFw
aC5tX3ZhckFyZ0NoaWxkcmVuW2NoaWxkSWR4XV0ubWVyZ2VGbGFncyhOb2RlVXNlZEFzTnVtYmVy
IHwgTm9kZVVzZWRBc090aGVyKTsKKyAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGgu
bV92YXJBcmdDaGlsZHJlbltjaGlsZElkeF0tPm1lcmdlRmxhZ3MoTm9kZVVzZWRBc051bWJlciB8
IE5vZGVVc2VkQXNPdGhlcik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAg
ICAgICAgCiAgICAgICAgIGNhc2UgVG9QcmltaXRpdmU6IHsKLSAgICAgICAgICAgIFNwZWN1bGF0
ZWRUeXBlIGNoaWxkID0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5wcmVkaWN0aW9uKCk7CisgICAg
ICAgICAgICBTcGVjdWxhdGVkVHlwZSBjaGlsZCA9IG5vZGUtPmNoaWxkMSgpLT5wcmVkaWN0aW9u
KCk7CiAgICAgICAgICAgICBpZiAoY2hpbGQpIHsKICAgICAgICAgICAgICAgICBpZiAoaXNPYmpl
Y3RTcGVjdWxhdGlvbihjaGlsZCkpIHsKICAgICAgICAgICAgICAgICAgICAgLy8gSSdkIGxvdmUg
dG8gZm9sZCB0aGlzIGNhc2UgaW50byB0aGUgY2FzZSBiZWxvdywgYnV0IEkgY2FuJ3QsIGJlY2F1
c2UKQEAgLTcwMiw3ICs2OTYsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIH0gZWxzZQog
ICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbihjaGlsZCk7CiAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbm9kZS5jaGlsZDEo
KV0ubWVyZ2VGbGFncyhmbGFncyk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG5vZGUtPmNoaWxk
MSgpLT5tZXJnZUZsYWdzKGZsYWdzKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAg
ICAgICAgICAgICAKQEAgLTc0NSwzMCArNzM5LDMwIEBAIHByaXZhdGU6CiAgICAgICAgIH0KICAg
ICAgICAgCiAgICAgICAgIGNhc2UgUHV0QnlWYWw6Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IG1f
Z3JhcGhbbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKV0ubWVyZ2VGbGFncyhOb2RlVXNlZEFz
VmFsdWUpOwotICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW21fZ3JhcGgudmFyQXJnQ2hp
bGQobm9kZSwgMSldLm1lcmdlRmxhZ3MoTm9kZVVzZWRBc051bWJlciB8IE5vZGVVc2VkQXNPdGhl
ciB8IE5vZGVVc2VkQXNJbnQgfCBOb2RlVXNlZEFzSW50TG9jYWxseSk7Ci0gICAgICAgICAgICBj
aGFuZ2VkIHw9IG1fZ3JhcGhbbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAyKV0ubWVyZ2VGbGFn
cyhOb2RlVXNlZEFzVmFsdWUpOworICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoLnZhckFy
Z0NoaWxkKG5vZGUsIDApLT5tZXJnZUZsYWdzKE5vZGVVc2VkQXNWYWx1ZSk7CisgICAgICAgICAg
ICBjaGFuZ2VkIHw9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSktPm1lcmdlRmxhZ3MoTm9k
ZVVzZWRBc051bWJlciB8IE5vZGVVc2VkQXNPdGhlciB8IE5vZGVVc2VkQXNJbnQgfCBOb2RlVXNl
ZEFzSW50TG9jYWxseSk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGgudmFyQXJnQ2hp
bGQobm9kZSwgMiktPm1lcmdlRmxhZ3MoTm9kZVVzZWRBc1ZhbHVlKTsKICAgICAgICAgICAgIGJy
ZWFrOwogCiAgICAgICAgIGNhc2UgUHV0U2NvcGVkVmFyOgotICAgICAgICAgICAgY2hhbmdlZCB8
PSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLm1lcmdlRmxhZ3MoTm9kZVVzZWRBc1ZhbHVlKTsKLSAg
ICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaFtub2RlLmNoaWxkMygpXS5tZXJnZUZsYWdzKE5v
ZGVVc2VkQXNWYWx1ZSk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG5vZGUtPmNoaWxkMSgpLT5t
ZXJnZUZsYWdzKE5vZGVVc2VkQXNWYWx1ZSk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG5vZGUt
PmNoaWxkMygpLT5tZXJnZUZsYWdzKE5vZGVVc2VkQXNWYWx1ZSk7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgIAogICAgICAgICBjYXNlIFJldHVybjoKICAgICAgICAgY2FzZSBUaHJv
dzoKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5tZXJnZUZs
YWdzKE5vZGVVc2VkQXNWYWx1ZSk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG5vZGUtPmNoaWxk
MSgpLT5tZXJnZUZsYWdzKE5vZGVVc2VkQXNWYWx1ZSk7CiAgICAgICAgICAgICBicmVhazsKIAog
ICAgICAgICBjYXNlIFB1dEJ5SWQ6CiAgICAgICAgIGNhc2UgUHV0QnlJZERpcmVjdDoKLSAgICAg
ICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5tZXJnZUZsYWdzKE5vZGVV
c2VkQXNWYWx1ZSk7Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbm9kZS5jaGlsZDIo
KV0ubWVyZ2VGbGFncyhOb2RlVXNlZEFzVmFsdWUpOworICAgICAgICAgICAgY2hhbmdlZCB8PSBu
b2RlLT5jaGlsZDEoKS0+bWVyZ2VGbGFncyhOb2RlVXNlZEFzVmFsdWUpOworICAgICAgICAgICAg
Y2hhbmdlZCB8PSBub2RlLT5jaGlsZDIoKS0+bWVyZ2VGbGFncyhOb2RlVXNlZEFzVmFsdWUpOwog
ICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSBQdXRCeU9mZnNldDoKLSAgICAgICAg
ICAgIGNoYW5nZWQgfD0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5tZXJnZUZsYWdzKE5vZGVVc2Vk
QXNWYWx1ZSk7Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbm9kZS5jaGlsZDMoKV0u
bWVyZ2VGbGFncyhOb2RlVXNlZEFzVmFsdWUpOworICAgICAgICAgICAgY2hhbmdlZCB8PSBub2Rl
LT5jaGlsZDEoKS0+bWVyZ2VGbGFncyhOb2RlVXNlZEFzVmFsdWUpOworICAgICAgICAgICAgY2hh
bmdlZCB8PSBub2RlLT5jaGlsZDMoKS0+bWVyZ2VGbGFncyhOb2RlVXNlZEFzVmFsdWUpOwogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBQaGk6CkBAIC03NzYs
MTEgKzc3MCwxMSBAQCBwcml2YXRlOgogCiAgICAgICAgIGNhc2UgU2V0Q2FsbGVlOgogICAgICAg
ICBjYXNlIFNldE15U2NvcGU6Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbm9kZS5j
aGlsZDEoKV0ubWVyZ2VGbGFncyhOb2RlVXNlZEFzVmFsdWUpOworICAgICAgICAgICAgY2hhbmdl
ZCB8PSBub2RlLT5jaGlsZDEoKS0+bWVyZ2VGbGFncyhOb2RlVXNlZEFzVmFsdWUpOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBHZXRTY29wZToKLSAgICAg
ICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5tZXJnZUZsYWdzKE5vZGVV
c2VkQXNWYWx1ZSk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG5vZGUtPmNoaWxkMSgpLT5tZXJn
ZUZsYWdzKE5vZGVVc2VkQXNWYWx1ZSk7CiAgICAgICAgICAgICBjaGFuZ2VkIHw9IHNldFByZWRp
Y3Rpb24oU3BlY0NlbGxPdGhlcik7CiAgICAgICAgICAgICBicmVhazsKIApAQCAtODI4LDMyICs4
MjIsMzIgQEAgcHJpdmF0ZToKICAgICAgICAgfQogCiAjaWYgREZHX0VOQUJMRShERUJVR19QUk9Q
QUdBVElPTl9WRVJCT1NFKQotICAgICAgICBkYXRhTG9nKFNwZWN1bGF0aW9uRHVtcChtX2dyYXBo
W21fY29tcGlsZUluZGV4XS5wcmVkaWN0aW9uKCkpLCAiXG4iKTsKKyAgICAgICAgZGF0YUxvZyhT
cGVjdWxhdGlvbkR1bXAobm9kZS0+cHJlZGljdGlvbigpKSwgIlxuIik7CiAjZW5kaWYKICAgICAg
ICAgCiAgICAgICAgIG1fY2hhbmdlZCB8PSBjaGFuZ2VkOwogICAgIH0KICAgICAgICAgCi0gICAg
Ym9vbCBtZXJnZURlZmF1bHRGbGFncyhOb2RlJiBub2RlKQorICAgIGJvb2wgbWVyZ2VEZWZhdWx0
RmxhZ3MoTm9kZSogbm9kZSkKICAgICB7CiAgICAgICAgIGJvb2wgY2hhbmdlZCA9IGZhbHNlOwot
ICAgICAgICBpZiAobm9kZS5mbGFncygpICYgTm9kZUhhc1ZhckFyZ3MpIHsKLSAgICAgICAgICAg
IGZvciAodW5zaWduZWQgY2hpbGRJZHggPSBub2RlLmZpcnN0Q2hpbGQoKTsKLSAgICAgICAgICAg
ICAgICAgY2hpbGRJZHggPCBub2RlLmZpcnN0Q2hpbGQoKSArIG5vZGUubnVtQ2hpbGRyZW4oKTsK
KyAgICAgICAgaWYgKG5vZGUtPmZsYWdzKCkgJiBOb2RlSGFzVmFyQXJncykgeworICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBjaGlsZElkeCA9IG5vZGUtPmZpcnN0Q2hpbGQoKTsKKyAgICAgICAg
ICAgICAgICAgY2hpbGRJZHggPCBub2RlLT5maXJzdENoaWxkKCkgKyBub2RlLT5udW1DaGlsZHJl
bigpOwogICAgICAgICAgICAgICAgICBjaGlsZElkeCsrKSB7CiAgICAgICAgICAgICAgICAgaWYg
KCEhbV9ncmFwaC5tX3ZhckFyZ0NoaWxkcmVuW2NoaWxkSWR4XSkKLSAgICAgICAgICAgICAgICAg
ICAgY2hhbmdlZCB8PSBtX2dyYXBoW21fZ3JhcGgubV92YXJBcmdDaGlsZHJlbltjaGlsZElkeF1d
Lm1lcmdlRmxhZ3MoTm9kZVVzZWRBc1ZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgY2hhbmdl
ZCB8PSBtX2dyYXBoLm1fdmFyQXJnQ2hpbGRyZW5bY2hpbGRJZHhdLT5tZXJnZUZsYWdzKE5vZGVV
c2VkQXNWYWx1ZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICBpZiAoIW5vZGUuY2hpbGQxKCkpCisgICAgICAgICAgICBpZiAoIW5vZGUtPmNoaWxkMSgpKQog
ICAgICAgICAgICAgICAgIHJldHVybiBjaGFuZ2VkOwotICAgICAgICAgICAgY2hhbmdlZCB8PSBt
X2dyYXBoW25vZGUuY2hpbGQxKCldLm1lcmdlRmxhZ3MoTm9kZVVzZWRBc1ZhbHVlKTsKLSAgICAg
ICAgICAgIGlmICghbm9kZS5jaGlsZDIoKSkKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbm9kZS0+
Y2hpbGQxKCktPm1lcmdlRmxhZ3MoTm9kZVVzZWRBc1ZhbHVlKTsKKyAgICAgICAgICAgIGlmICgh
bm9kZS0+Y2hpbGQyKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGNoYW5nZWQ7Ci0gICAgICAg
ICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbm9kZS5jaGlsZDIoKV0ubWVyZ2VGbGFncyhOb2RlVXNl
ZEFzVmFsdWUpOwotICAgICAgICAgICAgaWYgKCFub2RlLmNoaWxkMygpKQorICAgICAgICAgICAg
Y2hhbmdlZCB8PSBub2RlLT5jaGlsZDIoKS0+bWVyZ2VGbGFncyhOb2RlVXNlZEFzVmFsdWUpOwor
ICAgICAgICAgICAgaWYgKCFub2RlLT5jaGlsZDMoKSkKICAgICAgICAgICAgICAgICByZXR1cm4g
Y2hhbmdlZDsKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaFtub2RlLmNoaWxkMygpXS5t
ZXJnZUZsYWdzKE5vZGVVc2VkQXNWYWx1ZSk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG5vZGUt
PmNoaWxkMygpLT5tZXJnZUZsYWdzKE5vZGVVc2VkQXNWYWx1ZSk7CiAgICAgICAgIH0KICAgICAg
ICAgcmV0dXJuIGNoYW5nZWQ7CiAgICAgfQpAQCAtODYzLDYgKzg1Nyw3IEBAIHByaXZhdGU6CiAj
aWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQogICAgICAgICBkYXRhTG9n
RigiUHJvcGFnYXRpbmcgcHJlZGljdGlvbnMgZm9yd2FyZCBbJXVdXG4iLCArK21fY291bnQpOwog
I2VuZGlmCisgICAgICAgIC8vIEZJWE1FLiBUaGlzIHdpbGwgYmUgaW50ZXJlc3RpbmcuCiAgICAg
ICAgIGZvciAobV9jb21waWxlSW5kZXggPSAwOyBtX2NvbXBpbGVJbmRleCA8IG1fZ3JhcGguc2l6
ZSgpOyArK21fY29tcGlsZUluZGV4KQogICAgICAgICAgICAgcHJvcGFnYXRlKG1fZ3JhcGhbbV9j
b21waWxlSW5kZXhdKTsKICAgICB9CkBAIC0xMDEyLDcgKzEwMDcsNyBAQCBwcml2YXRlOgogICAg
ICAgICB9CiAgICAgfQogICAgIAotICAgIE5vZGVJbmRleCBtX2NvbXBpbGVJbmRleDsKKyAgICBO
b2RlKiBtX2N1cnJlbnROb2RlOwogICAgIGJvb2wgbV9jaGFuZ2VkOwogCiAjaWYgREZHX0VOQUJM
RShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlLmgJKHJldmlzaW9uIDEz
OTU4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RydWN0dXJlQWJzdHJhY3RW
YWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMTQsNiArMzE0LDggQEAgcHVibGljOgogcHJpdmF0
ZToKICAgICBzdGF0aWMgU3RydWN0dXJlKiB0b3BWYWx1ZSgpIHsgcmV0dXJuIHJlaW50ZXJwcmV0
X2Nhc3Q8U3RydWN0dXJlKj4oMSk7IH0KICAgICAKKyAgICAvLyBOQi4gVGhpcyBtdXN0IGhhdmUg
YSB0cml2aWFsIGRlc3RydWN0b3IuCisgICAgCiAgICAgLy8gVGhpcyBjYW4gb25seSByZW1lbWJl
ciBvbmUgc3RydWN0dXJlIGF0IGEgdGltZS4KICAgICBTdHJ1Y3R1cmUqIG1fc3RydWN0dXJlOwog
fTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRh
LmNwcAkocmV2aXNpb24gMTM5NTg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNHbG9iYWxEYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1
ZGUgIkFyZ0xpc3QuaCIKICNpbmNsdWRlICJDb2RlQ2FjaGUuaCIKICNpbmNsdWRlICJDb21tb25J
ZGVudGlmaWVycy5oIgorI2luY2x1ZGUgIkRGR0xvbmdMaXZlZFN0YXRlLmgiCiAjaW5jbHVkZSAi
RGVidWdnZXJBY3RpdmF0aW9uLmgiCiAjaW5jbHVkZSAiRnVuY3Rpb25Db25zdHJ1Y3Rvci5oIgog
I2luY2x1ZGUgIkdDQWN0aXZpdHlDYWxsYmFjay5oIgpAQCAtMjUxLDYgKzI1MiwxMSBAQCBKU0ds
b2JhbERhdGE6OkpTR2xvYmFsRGF0YShHbG9iYWxEYXRhVHlwCiAgICAgCiAgICAgaWYgKE9wdGlv
bnM6OmVuYWJsZVByb2ZpbGVyKCkpCiAgICAgICAgIG1fcGVyQnl0ZWNvZGVQcm9maWxlciA9IGFk
b3B0UHRyKG5ldyBQcm9maWxlcjo6RGF0YWJhc2UoKnRoaXMpKTsKKworI2lmIEVOQUJMRShERkdf
SklUKQorICAgIGlmIChjYW5Vc2VKSVQoKSkKKyAgICAgICAgbV9kZmdTdGF0ZSA9IGFkb3B0UHRy
KG5ldyBERkc6OkxvbmdMaXZlZFN0YXRlKCkpOworI2VuZGlmCiB9CiAKIEpTR2xvYmFsRGF0YTo6
fkpTR2xvYmFsRGF0YSgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ds
b2JhbERhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0dsb2JhbERhdGEuaAkocmV2aXNpb24gMTM5NTg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNHbG9iYWxEYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTkwLDYgKzkwLDEyIEBA
IG5hbWVzcGFjZSBKU0MgewogICAgIGNsYXNzIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlOwog
ICAgIGNsYXNzIFVubGlua2VkUHJvZ3JhbUNvZGVCbG9jazsKIAorI2lmIEVOQUJMRShERkdfSklU
KQorICAgIG5hbWVzcGFjZSBERkcgeworICAgIGNsYXNzIExvbmdMaXZlZFN0YXRlOworICAgIH0K
KyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwogICAgIHN0cnVjdCBIYXNoVGFibGU7CiAgICAg
c3RydWN0IEluc3RydWN0aW9uOwogCkBAIC0xODgsNiArMTk0LDEwIEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICAvLyBUaGUgaGVhcCBzaG91bGQgYmUganVzdCBhZnRlciBleGVjdXRhYmxlQWxs
b2NhdG9yIGFuZCBiZWZvcmUgb3RoZXIgbWVtYmVycyB0byBlbnN1cmUgdGhhdCBpdCdzCiAgICAg
ICAgIC8vIGRlc3RydWN0ZWQgYWZ0ZXIgYWxsIHRoZSBvYmplY3RzIHRoYXQgcmVmZXJlbmNlIGl0
LgogICAgICAgICBIZWFwIGhlYXA7CisgICAgICAgIAorI2lmIEVOQUJMRShERkdfSklUKQorICAg
ICAgICBPd25QdHI8REZHOjpMb25nTGl2ZWRTdGF0ZT4gbV9kZmdTdGF0ZTsKKyNlbmRpZiAvLyBF
TkFCTEUoREZHX0pJVCkKIAogICAgICAgICBHbG9iYWxEYXRhVHlwZSBnbG9iYWxEYXRhVHlwZTsK
ICAgICAgICAgQ2xpZW50RGF0YSogY2xpZW50RGF0YTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>182907</attachid>
            <date>2013-01-15 19:29:39 -0800</date>
            <delta_ts>2013-01-18 00:31:57 -0800</delta_ts>
            <desc>work in progress</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>132207</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RWYWx1ZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RWYWx1ZS5oCShy
ZXZpc2lvbiAxMzk1ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0
VmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtNDE1LDYgKzQxNSw4IEBAIHN0cnVjdCBBYnN0cmFj
dFZhbHVlIHsKICAgICAvLyAgICBjaGFuZ2UgeCdzIHN0cnVjdHVyZSBhbmQgd2UgaGF2ZSBubyB3
YXkgb2YgcHJvdmluZyBvdGhlcndpc2UsIGJ1dAogICAgIC8vICAgIHgncyBtX2Z1dHVyZVBvc3Np
YmxlU3RydWN0dXJlIHdpbGwgYmUgd2hhdGV2ZXIgc3RydWN0dXJlIHdlIGhhZCBjaGVja2VkCiAg
ICAgLy8gICAgd2hlbiBnZXR0aW5nIHByb3BlcnR5ICdmJy4KKyAgICAKKyAgICAvLyBOQi4gQWxs
IGZpZWxkcyBpbiB0aGlzIHN0cnVjdCBtdXN0IGhhdmUgdHJpdmlhbCBkZXN0cnVjdG9ycy4KIAog
ICAgIC8vIFRoaXMgaXMgYSBwcm92ZW4gY29uc3RyYWludCBvbiB0aGUgc3RydWN0dXJlcyB0aGF0
IHRoaXMgdmFsdWUgY2FuIGhhdmUgcmlnaHQKICAgICAvLyBub3cuIFRoZSBzdHJ1Y3R1cmUgb2Yg
dGhlIGN1cnJlbnQgdmFsdWUgbXVzdCBiZWxvbmcgdG8gdGhpcyBzZXQuIFRoZSBzZXQgbWF5Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FkamFjZW5jeUxpc3QuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FkamFjZW5jeUxpc3QuaAkocmV2
aXNpb24gMTM5NTg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBZGphY2VuY3lM
aXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMSwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTU3LDcgKzU3LDcgQEAgcHVibGljOgogICAgICAgICB9CiAg
ICAgfQogICAgIAotICAgIEFkamFjZW5jeUxpc3QoS2luZCBraW5kLCBOb2RlSW5kZXggY2hpbGQx
LCBOb2RlSW5kZXggY2hpbGQyLCBOb2RlSW5kZXggY2hpbGQzKQorICAgIEFkamFjZW5jeUxpc3Qo
S2luZCBraW5kLCBOb2RlKiBjaGlsZDEsIE5vZGUqIGNoaWxkMiwgTm9kZSogY2hpbGQzKQogI2lm
ICFBU1NFUlRfRElTQUJMRUQKICAgICAgICAgOiBtX2tpbmQoRml4ZWQpCiAjZW5kaWYKQEAgLTEx
OCw3ICsxMTgsNyBAQCBwdWJsaWM6CiAgICAgICAgIGNoaWxkKDIpID0gY2hpbGQzOwogICAgIH0K
ICAgICAKLSAgICB2b2lkIGluaXRpYWxpemUoTm9kZUluZGV4IGNoaWxkMSA9IE5vTm9kZSwgTm9k
ZUluZGV4IGNoaWxkMiA9IE5vTm9kZSwgTm9kZUluZGV4IGNoaWxkMyA9IE5vTm9kZSkKKyAgICB2
b2lkIGluaXRpYWxpemUoTm9kZSogY2hpbGQxID0gMCwgTm9kZSogY2hpbGQyID0gMCwgTm9kZSog
Y2hpbGQzID0gMCkKICAgICB7CiAgICAgICAgIGluaXRpYWxpemUoRWRnZShjaGlsZDEpLCBFZGdl
KGNoaWxkMiksIEVkZ2UoY2hpbGQzKSk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdBbGxvY2F0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0FsbG9jYXRvci5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdBbGxvY2F0b3IuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyMzUgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdB
bGxvY2F0b3JfaAorI2RlZmluZSBERkdBbGxvY2F0b3JfaAorCisjaW5jbHVkZSA8d3RmL1BsYXRm
b3JtLmg+CisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgPHd0Zi9QYWdlQWxsb2Nh
dGlvbkFsaWduZWQuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCisvLyBD
dXN0b20gcG9vbCBhbGxvY2F0b3IgZm9yIGV4YWN0bHkgb25lIHR5cGUgKHR5cGUgVCkuIEl0IGhh
cyBmYXN0IChPKDEpLCBvbmx5IGEgZmV3CisvLyBpbnN0cnVjdGlvbnMpIGFsbG9jYXRvciwgYW5k
IGEgc2ltaWxhcmx5IGZhc3QgZnJlZSgpLiBSZWN5Y2xpbmcgd29ya3MgaWYgZWl0aGVyIG9mCisv
LyB0aGUgZm9sbG93aW5nIGlzIHRydWU6CisvLyAtIFQgaGFzIGEgdHJpdmlhbCBkZXN0cnVjdG9y
LiBJbiB0aGF0IGNhc2UgeW91IGRvbid0IGhhdmUgdG8gZXZlciBjYWxsIGZyZWUoKSBvbgorLy8g
ICBhbnl0aGluZy4gWW91IGNhbiBqdXN0IGNhbGwgZnJlZUFsbCgpIGluc3RlYWQuCisvLyAtIFlv
dSBjYWxsIGZyZWUoKSBvbiBhbGwgVCdzIHRoYXQgeW91IGFsbG9jYXRlZCwgYW5kIG5ldmVyIHVz
ZSBmcmVlQWxsKCkuCisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitjbGFzcyBBbGxvY2F0b3Igewor
cHVibGljOgorICAgIEFsbG9jYXRvcigpOworICAgIH5BbGxvY2F0b3IoKTsKKyAgICAKKyAgICB2
b2lkKiBhbGxvY2F0ZSgpOyAvLyBVc2UgcGxhY2VtZW50IG5ldyB0byBhbGxvY2F0ZSwgYW5kIGF2
b2lkIHVzaW5nIHRoaXMgbWV0aG9kLgorICAgIHZvaWQgZnJlZShUKik7IC8vIENhbGwgdGhpcyBt
ZXRob2QgdG8gZGVsZXRlOyBuZXZlciB1c2UgJ2RlbGV0ZScgZGlyZWN0bHkuCisgICAgCisgICAg
dm9pZCBmcmVlQWxsKCk7IC8vIE9ubHkgY2FsbCB0aGlzIGlmIFQgaGFzIGEgdHJpdmlhbCBkZXN0
cnVjdG9yLgorICAgIHZvaWQgcmVzZXQoKTsgLy8gTGlrZSBmcmVlQWxsKCksIGJ1dCBhbHNvIHJl
dHVybnMgYWxsIG1lbW9yeSB0byB0aGUgT1MuCisgICAgCisgICAgdW5zaWduZWQgaW5kZXhPZihU
Kik7CisgICAgCisgICAgc3RhdGljIEFsbG9jYXRvciogYWxsb2NhdG9yT2YoVCopOworICAgIAor
cHJpdmF0ZToKKyAgICB2b2lkKiBidW1wQWxsb2NhdGUoKTsKKyAgICB2b2lkKiBmcmVlTGlzdEFs
bG9jYXRlKCk7CisgICAgdm9pZCogYWxsb2NhdGVTbG93KCk7CisgICAgdm9pZCBmcmVlUmVnaW9u
c1N0YXJ0aW5nQXQoUmVnaW9uKik7CisgICAgdm9pZCBzdGFydGluZ0J1bXBpbmdJbihSZWdpb24q
KTsKKyAgICAKKyAgICBzdHJ1Y3QgUmVnaW9uIHsKKyAgICAgICAgc3RhdGljIHNpemVfdCBzaXpl
KCkgeyByZXR1cm4gNjQgKiBLQjsgfQorICAgICAgICBzdGF0aWMgc2l6ZV90IGhlYWRlclNpemUo
KSB7IHJldHVybiBzdGQ6Om1heChzaXplb2YoUmVnaW9uKSwgc2l6ZW9mKFQpKTsgfQorICAgICAg
ICBzdGF0aWMgdW5zaWduZWQgbnVtYmVyT2ZUaGluZ3NQZXJSZWdpb24oKSB7IHJldHVybiAoc2l6
ZSgpIC0gaGVhZGVyU2l6ZSgpKSAvIHNpemVvZihUKTsgfQorICAgICAgICBUKiBkYXRhKCkgeyBy
ZXR1cm4gYml0d2lzZV9jYXN0PFQqPihiaXR3aXNlX2Nhc3Q8Y2hhcio+KHRoaXMpICsgaGVhZGVy
U2l6ZSgpKTsgfQorICAgICAgICBib29sIGlzSW5UaGlzUmVnaW9uKFQqIHBvaW50ZXIpIHsgcmV0
dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkPihwb2ludGVyIC0gZGF0YSgpKSA8IG51bWJlck9mVGhp
bmdzUGVyUmVnaW9uKCk7IH0KKyAgICAgICAgUmVnaW9uKiByZWdpb25Gb3IoVCogcG9pbnRlcikg
eyByZXR1cm4gYml0d2lzZV9jYXN0PFJlZ2lvbio+KGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KHBv
aW50ZXIpICYgfihzaXplKCkgLSAxKSk7IH0KKyAgICAgICAgCisgICAgICAgIFBhZ2VBbGxvY2F0
aW9uQWxpZ25lZCBtX2FsbG9jYXRpb247CisgICAgICAgIEFsbG9jYXRvciogbV9hbGxvY2F0b3I7
CisgICAgICAgIFJlZ2lvbiogbV9uZXh0OworICAgIH07CisgICAgCisgICAgUmVnaW9uKiBtX3Jl
Z2lvbkhlYWQ7CisgICAgdm9pZCoqIG1fZnJlZUxpc3RIZWFkOworICAgIFQqIG1fYnVtcEVuZDsK
KyAgICB1bnNpZ25lZCBtX2J1bXBSZW1haW5pbmc7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBU
PgoraW5saW5lIEFsbG9jYXRvcjo6QWxsb2NhdG9yKCkKKyAgICA6IG1fcmVnaW9uSGVhZCgwKQor
ICAgICwgbV9mcmVlTGlzdEhlYWQoMCkKKyAgICAsIG1fYnVtcFJlbWFpbmluZygwKQoreworfQor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgoraW5saW5lIEFsbG9jYXRvcjo6fkFsbG9jYXRvcigpCit7
CisgICAgcmVzZXQoKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK0FMV0FZU19JTkxJTkUg
dm9pZCogQWxsb2NhdG9yOjphbGxvY2F0ZSgpCit7CisgICAgaWYgKExJS0VMWSh2b2lkKiByZXN1
bHQgPSBidW1wQWxsb2NhdGUoKSkpCisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgcmV0dXJu
IGZyZWVMaXN0QWxsb2NhdGUoKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK3ZvaWQgQWxs
b2NhdG9yOjpmcmVlKFQqIG9iamVjdCkKK3sKKyAgICBvYmplY3QtPn5UKCk7CisgICAgCisgICAg
dm9pZCoqIGNlbGwgPSBiaXR3aXNlX2Nhc3Q8dm9pZCoqPihvYmplY3QpOworICAgICpjZWxsID0g
bV9mcmVlTGlzdEhlYWQ7CisgICAgbV9mcmVlTGlzdEhlYWQgPSBjZWxsOworfQorCit0ZW1wbGF0
ZTx0eXBlbmFtZSBUPgordm9pZCBBbGxvY2F0b3I6OmZyZWVBbGwoKQoreworICAgIGlmICghbV9y
ZWdpb25IZWFkKSB7CisgICAgICAgIEFTU0VSVCghbV9idW1wUmVtYWluaW5nKTsKKyAgICAgICAg
QVNTRVJUKCFtX2ZyZWVMaXN0SGVhZCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisg
ICAgLy8gU2luY2UgdGhlIGNhbGxlciBpcyBvcHRpbmcgb3V0IG9mIGNhbGxpbmcgdGhlIGRlc3Ry
dWN0b3IgZm9yIGFueSBhbGxvY2F0ZWQgdGhpbmcsCisgICAgLy8gd2UgaGF2ZSB0d28gY2hvaWNl
cywgcGx1cyBhIGNvbnRpbnV1bSBiZXR3ZWVuOiB3ZSBjYW4gZWl0aGVyIGp1c3QgZGVsZXRlIGFs
bCByZWdpb25zCisgICAgLy8gKGkuZS4gY2FsbCByZXNldCgpKSwgb3Igd2UgY2FuIG1ha2UgYWxs
IHJlZ2lvbnMgYXZhaWxhYmxlIGZvciByZXVzZS4gV2UgZG8gc29tZXRoaW5nCisgICAgLy8gdGhh
dCBvcHRpbWl6ZXMgZm9yIChhKSBzcGVlZCBvZiBmcmVlQWxsKCksIChiKSB0aGUgYXNzdW1wdGlv
biB0aGF0IGlmIHRoZSB1c2VyIGNhbGxzCisgICAgLy8gZnJlZUFsbCgpIHRoZW4gdGhleSB3aWxs
IHByb2JhYmx5IGJlIGNhbGxpbmcgYWxsb2NhdGUoKSBpbiB0aGUgbmVhciBmdXR1cmUuIE5hbWVs
eSwKKyAgICAvLyB3ZSBmcmVlIGFsbCBidXQgb25lIHJlZ2lvbiwgYW5kIG1ha2UgdGhlIHJlbWFp
bmluZyByZWdpb24gYSBidW1wIGFsbG9jYXRpb24gcmVnaW9uLgorICAgIAorICAgIGZvciAoUmVn
aW9uKiByZWdpb24gPSBtX3JlZ2lvbkhlYWQtPm1fbmV4dDsgcmVnaW9uOyByZWdpb24gPSByZWdp
b24tPm1fbmV4dCkKKyAgICAgICAgYnVpbGRGcmVlTGlzdEluKHJlZ2lvbik7CisgICAgCisgICAg
bV9yZWdpb25IZWFkLT5tX25leHQgPSAwOworICAgIG1fZnJlZUxpc3RIZWFkID0gMDsKKyAgICBz
dGFydEJ1bXBpbmdJbihtX3JlZ2lvbkhlYWQpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgor
dm9pZCBBbGxvY2F0b3I6OnJlc2V0KCkKK3sKKyAgICBmcmVlUmVnaW9uc1N0YXJ0aW5nQXQobV9y
ZWdpb25IZWFkKTsKKyAgICAKKyAgICBtX3JlZ2lvbkhlYWQgPSAwOworICAgIG1fZnJlZUxpc3RI
ZWFkID0gMDsKKyAgICBtX2J1bXBSZW1haW5pbmcgPSAwOworfQorCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPgordW5zaWduZWQgQWxsb2NhdG9yOjppbmRleE9mKFQqIG9iamVjdCkKK3sKKyAgICB1bnNp
Z25lZCBiYXNlSW5kZXggPSAwOworICAgIGZvciAoUmVnaW9uKiByZWdpb24gPSBtX3JlZ2lvbkhl
YWQ7IHJlZ2lvbjsgcmVnaW9uID0gcmVnaW9uLT5tX25leHQpIHsKKyAgICAgICAgaWYgKHJlZ2lv
bi0+aXNJblRoaXNSZWdpb24ob2JqZWN0KSkKKyAgICAgICAgICAgIHJldHVybiBiYXNlSW5kZXgg
KyAob2JqZWN0IC0gcmVnaW9uLT5kYXRhKCkpOworICAgICAgICBiYXNlSW5kZXggKz0gUmVnaW9u
OjpudW1iZXJPZlRoaW5nc1BlclJlZ2lvbigpOworICAgIH0KKyAgICBDUkFTSCgpOworICAgIHJl
dHVybiAwOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorQWxsb2NhdG9yKiBBbGxvY2F0b3I6
OmFsbG9jYXRvck9mKFQqIG9iamVjdCkKK3sKKyAgICByZXR1cm4gUmVnaW9uOjpyZWdpb25Gb3Io
b2JqZWN0KS0+bV9hbGxvY2F0b3I7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitBTFdBWVNf
SU5MSU5FIHZvaWQqIEFsbG9jYXRvcjo6YnVtcEFsbG9jYXRlKCkKK3sKKyAgICBpZiAodW5zaWdu
ZWQgcmVtYWluaW5nID0gbV9idW1wUmVtYWluaW5nKSB7CisgICAgICAgIHJlbWFpbmluZy0tOwor
ICAgICAgICBtX2J1bXBSZW1haW5pbmcgPSByZW1haW5pbmc7CisgICAgICAgIHJldHVybiBtX2J1
bXBFbmQgLSAocmVtYWluaW5nICsgMSk7CisgICAgfQorICAgIHJldHVybiAwOworfQorCit0ZW1w
bGF0ZTx0eXBlbmFtZSBUPgordm9pZCogQWxsb2NhdG9yOjpmcmVlTGlzdEFsbG9jYXRlKCkKK3sK
KyAgICB2b2lkKiogcmVzdWx0ID0gbV9mcmVlTGlzdEhlYWQ7CisgICAgaWYgKFVOTElLRUxZKCFy
ZXN1bHQpKQorICAgICAgICByZXR1cm4gYWxsb2NhdGVTbG93KCk7CisgICAgbV9mcmVlTGlzdEhl
YWQgPSBiaXR3aXNlX2Nhc3Q8dm9pZCoqPigqcmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0Owor
fQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgordm9pZCogQWxsb2NhdG9yOjphbGxvY2F0ZVNsb3co
KQoreworICAgIEFTU0VSVCghbV9mcmVlTGlzdEhlYWQpOworICAgIEFTU0VSVCghbV9idW1wUmVt
YWluaW5nKTsKKyAgICAKKyAgICBQYWdlQWxsb2NhdGlvbkFsaWduZWQgYWxsb2NhdGlvbiA9IFBh
Z2VBbGxvY2F0aW9uQWxpZ25lZDo6YWxsb2NhdGUoUmVnaW9uOjpzaXplKCksIFJlZ2lvbjo6c2l6
ZSgpLCBPU0FsbG9jYXRvcjo6SlNHQ0hlYXBQYWdlcyk7CisgICAgaWYgKCFzdGF0aWNfY2FzdDxi
b29sPihhbGxvY2F0aW9uKSkKKyAgICAgICAgQ1JBU0goKTsKKyAgICBSZWdpb24qIHJlZ2lvbiA9
IHN0YXRpY19jYXN0PFJlZ2lvbio+KGFsbG9jYXRpb24uYmFzZSgpKTsKKyAgICByZWdpb24tPm1f
YWxsb2NhdGlvbiA9IG1fYWxsb2NhdGlvbjsKKyAgICByZWdpb24tPm1fYWxsb2N0b3IgPSB0aGlz
OworICAgIHN0YXJ0QnVtcGluZ0luKHJlZ2lvbik7CisgICAgcmVnaW9uLT5tX25leHQgPSBtX3Jl
Z2lvbkhlYWQ7CisgICAgbV9yZWdpb25IZWFkID0gcmVnaW9uOworICAgIAorICAgIHZvaWQqIHJl
c3VsdCA9IGJ1bXBBbGxvY2F0ZSgpOworICAgIEFTU0VSVChyZXN1bHQpOworICAgIHJldHVybiBy
ZXN1bHQ7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+Cit2b2lkIEFsbG9jYXRvcjo6ZnJlZVJl
Z2lvbnNTdGFydGluZ0F0KFJlZ2lvbiogcmVnaW9uKQoreworICAgIHdoaWxlIChyZWdpb24pIHsK
KyAgICAgICAgUmVnaW9uKiBuZXh0UmVnaW9uID0gcmVnaW9uLT5tX25leHQ7CisgICAgICAgIHJl
Z2lvbi0+bV9hbGxvY2F0aW9uLmRlYWxsb2NhdGUoKTsKKyAgICAgICAgcmVnaW9uID0gbmV4dFJl
Z2lvbjsKKyAgICB9Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+Cit2b2lkIEFsbG9jYXRvcjo6
c3RhcnRCdW1waW5nSW4oUmVnaW9uKiByZWdpb24pCit7CisgICAgbV9idW1wRW5kID0gcmVnaW9u
LT5kYXRhKCkgKyBSZWdpb246Om51bWJlck9mVGhpbmdzUGVyUmVnaW9uKCk7CisgICAgbV9idW1w
UmVtYWluaW5nID0gUmVnaW9uOjpudW1iZXJPZlRoaW5nc1BlclJlZ2lvbigpOworfQorCit9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2Vu
ZGlmIC8vIERGR0FsbG9jYXRvcl9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQmFzaWNCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQmFzaWNCbG9jay5oCShyZXZpc2lvbiAxMzk1ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0Jhc2ljQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMzksNyArMzksNyBAQCBu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKIHR5cGVkZWYgVmVjdG9yIDxCbG9ja0lu
ZGV4LCAyPiBQcmVkZWNlc3Nvckxpc3Q7CiAKLXN0cnVjdCBCYXNpY0Jsb2NrIDogVmVjdG9yPE5v
ZGVJbmRleCwgOD4geworc3RydWN0IEJhc2ljQmxvY2sgOiBWZWN0b3I8Tm9kZSosIDg+IHsKICAg
ICBCYXNpY0Jsb2NrKHVuc2lnbmVkIGJ5dGVjb2RlQmVnaW4sIHVuc2lnbmVkIG51bUFyZ3VtZW50
cywgdW5zaWduZWQgbnVtTG9jYWxzKQogICAgICAgICA6IGJ5dGVjb2RlQmVnaW4oYnl0ZWNvZGVC
ZWdpbikKICAgICAgICAgLCBpc09TUlRhcmdldChmYWxzZSkKQEAgLTcyLDcgKzcyLDcgQEAgc3Ry
dWN0IEJhc2ljQmxvY2sgOiBWZWN0b3I8Tm9kZUluZGV4LCA4PgogICAgIH0KICAgICAKICAgICBz
aXplX3QgbnVtTm9kZXMoKSBjb25zdCB7IHJldHVybiBwaGlzLnNpemUoKSArIHNpemUoKTsgfQot
ICAgIE5vZGVJbmRleCBub2RlSW5kZXgoc2l6ZV90IGkpIGNvbnN0CisgICAgTm9kZSogbm9kZShz
aXplX3QgaSkgY29uc3QKICAgICB7CiAgICAgICAgIGlmIChpIDwgcGhpcy5zaXplKCkpCiAgICAg
ICAgICAgICByZXR1cm4gcGhpc1tpXTsKQEAgLTgwLDE5ICs4MCwxOSBAQCBzdHJ1Y3QgQmFzaWNC
bG9jayA6IFZlY3RvcjxOb2RlSW5kZXgsIDg+CiAgICAgfQogICAgIGJvb2wgaXNQaGlJbmRleChz
aXplX3QgaSkgY29uc3QgeyByZXR1cm4gaSA8IHBoaXMuc2l6ZSgpOyB9CiAgICAgCi0gICAgYm9v
bCBpc0luUGhpcyhOb2RlSW5kZXggbm9kZUluZGV4KSBjb25zdAorICAgIGJvb2wgaXNJblBoaXMo
Tm9kZSogbm9kZSkgY29uc3QKICAgICB7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
cGhpcy5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgaWYgKHBoaXNbaV0gPT0gbm9kZUluZGV4
KQorICAgICAgICAgICAgaWYgKHBoaXNbaV0gPT0gbm9kZSkKICAgICAgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIAot
ICAgIGJvb2wgaXNJbkJsb2NrKE5vZGVJbmRleCBpbmRleCkgY29uc3QKKyAgICBib29sIGlzSW5C
bG9jayhOb2RlKiBteU5vZGUpIGNvbnN0CiAgICAgewogICAgICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IG51bU5vZGVzKCk7ICsraSkgewotICAgICAgICAgICAgaWYgKG5vZGVJbmRleChpKSA9
PSBpbmRleCkKKyAgICAgICAgICAgIGlmIChub2RlKGkpID09IG15Tm9kZSkKICAgICAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0x
MTMsMTEgKzExMywxMSBAQCBzdHJ1Y3QgQmFzaWNCbG9jayA6IFZlY3RvcjxOb2RlSW5kZXgsIDg+
CiAjZW5kaWYKICAgICBib29sIGlzUmVhY2hhYmxlOwogICAgIAotICAgIFZlY3RvcjxOb2RlSW5k
ZXg+IHBoaXM7CisgICAgVmVjdG9yPE5vZGUqPiBwaGlzOwogICAgIFByZWRlY2Vzc29yTGlzdCBt
X3ByZWRlY2Vzc29yczsKICAgICAKLSAgICBPcGVyYW5kczxOb2RlSW5kZXgsIE5vZGVJbmRleFRy
YWl0cz4gdmFyaWFibGVzQXRIZWFkOwotICAgIE9wZXJhbmRzPE5vZGVJbmRleCwgTm9kZUluZGV4
VHJhaXRzPiB2YXJpYWJsZXNBdFRhaWw7CisgICAgT3BlcmFuZHM8Tm9kZSosIE5vZGVQb2ludGVy
VHJhaXRzPiB2YXJpYWJsZXNBdEhlYWQ7CisgICAgT3BlcmFuZHM8Tm9kZSosIE5vZGVQb2ludGVy
VHJhaXRzPiB2YXJpYWJsZXNBdFRhaWw7CiAgICAgCiAgICAgT3BlcmFuZHM8QWJzdHJhY3RWYWx1
ZT4gdmFsdWVzQXRIZWFkOwogICAgIE9wZXJhbmRzPEFic3RyYWN0VmFsdWU+IHZhbHVlc0F0VGFp
bDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJz
ZXIuY3BwCShyZXZpc2lvbiAxMzk1ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0J5dGVDb2RlUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzI1MCw5ICszMjUwLDYgQEAg
dm9pZCBCeXRlQ29kZVBhcnNlcjo6cHJvY2Vzc1BoaVN0YWNrKCkKICAgICAgICAgaWYgKCFlbnRy
eS5tX2Jsb2NrLT5pc1JlYWNoYWJsZSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAK
LSAgICAgICAgaWYgKCFlbnRyeS5tX2Jsb2NrLT5pc1JlYWNoYWJsZSkKLSAgICAgICAgICAgIGNv
bnRpbnVlOwotICAgICAgICAKICAgICAgICAgUHJlZGVjZXNzb3JMaXN0JiBwcmVkZWNlc3NvcnMg
PSBlbnRyeS5tX2Jsb2NrLT5tX3ByZWRlY2Vzc29yczsKICAgICAgICAgdW5zaWduZWQgdmFyTm8g
PSBlbnRyeS5tX3Zhck5vOwogICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIGRhdGFGb3JQaGkg
PSBtX2dyYXBoW2VudHJ5Lm1fcGhpXS52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbi5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbi5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
NDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGR0NvbW1vbi5oIgorCisjaWYgRU5BQkxFKERG
R19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKwordm9pZCBOb2RlUG9p
bnRlclRyYWl0czo6ZHVtcChOb2RlKiB2YWx1ZSwgUHJpbnRTdHJlYW0mIG91dCkKK3sKKyAgICBv
dXQucHJpbnQodmFsdWUpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRp
ZiAvLyBFTkFCTEUoREZHX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdDb21tb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nv
bW1vbi5oCShyZXZpc2lvbiAxMzk1ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0NvbW1vbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMSwgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTEsIDIwMTIsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC04MSwxNiArODEsMTQgQEAKIAog
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCi0vLyBUeXBlIGZvciBhIHJlZmVyZW5j
ZSB0byBhbm90aGVyIG5vZGUgaW4gdGhlIGdyYXBoLgotdHlwZWRlZiB1aW50MzJfdCBOb2RlSW5k
ZXg7Ci1zdGF0aWMgY29uc3QgTm9kZUluZGV4IE5vTm9kZSA9IFVJTlRfTUFYOworY2xhc3MgTm9k
ZTsKIAogdHlwZWRlZiB1aW50MzJfdCBCbG9ja0luZGV4Owogc3RhdGljIGNvbnN0IEJsb2NrSW5k
ZXggTm9CbG9jayA9IFVJTlRfTUFYOwogCi1zdHJ1Y3QgTm9kZUluZGV4VHJhaXRzIHsKLSAgICBz
dGF0aWMgTm9kZUluZGV4IGRlZmF1bHRWYWx1ZSgpIHsgcmV0dXJuIE5vTm9kZTsgfQotICAgIHN0
YXRpYyB2b2lkIGR1bXAoTm9kZUluZGV4IHZhbHVlLCBQcmludFN0cmVhbSYgb3V0KQorc3RydWN0
IE5vZGVQb2ludGVyVHJhaXRzIHsKKyAgICBzdGF0aWMgTm9kZSogZGVmYXVsdFZhbHVlKCkgeyBy
ZXR1cm4gMDsgfQorICAgIHN0YXRpYyB2b2lkIGR1bXAoTm9kZSogdmFsdWUsIFByaW50U3RyZWFt
JiBvdXQpOwogICAgIHsKICAgICAgICAgaWYgKHZhbHVlID09IE5vTm9kZSkKICAgICAgICAgICAg
IG91dC5wcmludGYoIi0iKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRWRn
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRWRnZS5oCShy
ZXZpc2lvbiAxMzk1ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0VkZ2UuaAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLCAy
MDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtNDMsNDEgKzQzLDM5IEBAIHB1YmxpYzoKICAgICB7CiAgICAgfQogICAg
IAotICAgIGV4cGxpY2l0IEVkZ2UoTm9kZUluZGV4IG5vZGVJbmRleCkKLSAgICAgICAgOiBtX2Vu
Y29kZWRXb3JkKG1ha2VXb3JkKG5vZGVJbmRleCwgVW50eXBlZFVzZSkpCisgICAgZXhwbGljaXQg
RWRnZShOb2RlKiBub2RlKQorICAgICAgICA6IG1fZW5jb2RlZFdvcmQobWFrZVdvcmQobm9kZSwg
VW50eXBlZFVzZSkpCiAgICAgewogICAgIH0KICAgICAKLSAgICBFZGdlKE5vZGVJbmRleCBub2Rl
SW5kZXgsIFVzZUtpbmQgdXNlS2luZCkKLSAgICAgICAgOiBtX2VuY29kZWRXb3JkKG1ha2VXb3Jk
KG5vZGVJbmRleCwgdXNlS2luZCkpCisgICAgRWRnZShOb2RlKiBub2RlLCBVc2VLaW5kIHVzZUtp
bmQpCisgICAgICAgIDogbV9lbmNvZGVkV29yZChtYWtlV29yZChub2RlLCB1c2VLaW5kKSkKICAg
ICB7CiAgICAgfQogICAgIAotICAgIE5vZGVJbmRleCBpbmRleFVuY2hlY2tlZCgpIGNvbnN0IHsg
cmV0dXJuIG1fZW5jb2RlZFdvcmQgPj4gc2hpZnQoKTsgfQotICAgIE5vZGVJbmRleCBpbmRleCgp
IGNvbnN0Ci0gICAgewotICAgICAgICBBU1NFUlQoaXNTZXQoKSk7Ci0gICAgICAgIHJldHVybiBt
X2VuY29kZWRXb3JkID4+IHNoaWZ0KCk7Ci0gICAgfQotICAgIHZvaWQgc2V0SW5kZXgoTm9kZUlu
ZGV4IG5vZGVJbmRleCkKKyAgICBOb2RlKiBub2RlKCkgY29uc3QgeyByZXR1cm4gbV9lbmNvZGVk
V29yZCAmIH4oKDEgPDwgc2hpZnQoKSkgLSAxKTsgfQorICAgIE5vZGUmIG9wZXJhdG9yKigpIGNv
bnN0IHsgcmV0dXJuICpnZXQoKTsgfQorICAgIE5vZGUqIG9wZXJhdG9yLT4oKSBjb25zdCB7IHJl
dHVybiBnZXQoKTsgfQorICAgIAorICAgIHZvaWQgc2V0Tm9kZShOb2RlKiBub2RlKQogICAgIHsK
LSAgICAgICAgbV9lbmNvZGVkV29yZCA9IG1ha2VXb3JkKG5vZGVJbmRleCwgdXNlS2luZCgpKTsK
KyAgICAgICAgbV9lbmNvZGVkV29yZCA9IG1ha2VXb3JkKG5vZGUsIHVzZUtpbmQoKSk7CiAgICAg
fQogICAgIAogICAgIFVzZUtpbmQgdXNlS2luZCgpIGNvbnN0CiAgICAgewotICAgICAgICBBU1NF
UlQoaXNTZXQoKSk7CisgICAgICAgIEFTU0VSVChub2RlKCkpOwogICAgICAgICB1bnNpZ25lZCBt
YXNrZWQgPSBtX2VuY29kZWRXb3JkICYgKCgoMSA8PCBzaGlmdCgpKSAtIDEpKTsKICAgICAgICAg
QVNTRVJUKG1hc2tlZCA8IExhc3RVc2VLaW5kKTsKICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0
PFVzZUtpbmQ+KG1hc2tlZCk7CiAgICAgfQogICAgIHZvaWQgc2V0VXNlS2luZChVc2VLaW5kIHVz
ZUtpbmQpCiAgICAgewotICAgICAgICBBU1NFUlQoaXNTZXQoKSk7Ci0gICAgICAgIG1fZW5jb2Rl
ZFdvcmQgPSBtYWtlV29yZChpbmRleCgpLCB1c2VLaW5kKTsKKyAgICAgICAgQVNTRVJUKG5vZGUo
KSk7CisgICAgICAgIG1fZW5jb2RlZFdvcmQgPSBtYWtlV29yZChub2RlKCksIHVzZUtpbmQpOwog
ICAgIH0KICAgICAKLSAgICBib29sIGlzU2V0KCkgY29uc3QgeyByZXR1cm4gaW5kZXhVbmNoZWNr
ZWQoKSAhPSBOb05vZGU7IH0KKyAgICBib29sIGlzU2V0KCkgY29uc3QgeyByZXR1cm4gISFub2Rl
KCk7IH0KICAgICAKICAgICB0eXBlZGVmIHZvaWQqIEVkZ2U6OipVbnNwZWNpZmllZEJvb2xUeXBl
OwogICAgIG9wZXJhdG9yIFVuc3BlY2lmaWVkQm9vbFR5cGUqKCkgY29uc3QgeyByZXR1cm4gcmVp
bnRlcnByZXRfY2FzdDxVbnNwZWNpZmllZEJvb2xUeXBlKj4oaXNTZXQoKSk7IH0KQEAgLTk2LDE3
ICs5NCwxOCBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBBZGphY2VuY3lM
aXN0OwogICAgIAotICAgIHN0YXRpYyB1aW50MzJfdCBzaGlmdCgpIHsgcmV0dXJuIDQ7IH0KKyAg
ICBzdGF0aWMgdWludDMyX3Qgc2hpZnQoKSB7IHJldHVybiAyOyB9CiAgICAgCi0gICAgc3RhdGlj
IGludDMyX3QgbWFrZVdvcmQoTm9kZUluZGV4IG5vZGVJbmRleCwgVXNlS2luZCB1c2VLaW5kKQor
ICAgIHN0YXRpYyB1aW50cHRyX3QgbWFrZVdvcmQoTm9kZSogbm9kZSwgVXNlS2luZCB1c2VLaW5k
KQogICAgIHsKLSAgICAgICAgQVNTRVJUKHN0YXRpY19jYXN0PHVpbnQzMl90PigoKHN0YXRpY19j
YXN0PGludDMyX3Q+KG5vZGVJbmRleCkgPDwgc2hpZnQoKSkgPj4gc2hpZnQoKSkpID09IG5vZGVJ
bmRleCk7CisgICAgICAgIHVpbnRwdHJfdCB2YWx1ZSA9IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+
KG5vZGUpOworICAgICAgICBBU1NFUlQoISh2YWx1ZSAmICgoMSA8PCBzaGlmdCgpKSAtIDEpKSk7
CiAgICAgICAgIEFTU0VSVCh1c2VLaW5kID49IDAgJiYgdXNlS2luZCA8IExhc3RVc2VLaW5kKTsK
ICAgICAgICAgQVNTRVJUKExhc3RVc2VLaW5kIDw9ICgxIDw8IHNoaWZ0KCkpKTsKLSAgICAgICAg
cmV0dXJuIChub2RlSW5kZXggPDwgc2hpZnQoKSkgfCB1c2VLaW5kOworICAgICAgICByZXR1cm4g
dmFsdWUgfCBzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KHVzZUtpbmQpOwogICAgIH0KICAgICAKLSAg
ICBpbnQzMl90IG1fZW5jb2RlZFdvcmQ7CisgICAgdWludHB0cl90IG1fZW5jb2RlZFdvcmQ7CiB9
OwogCiBpbmxpbmUgYm9vbCBvcGVyYXRvcj09KEVkZ2Ugbm9kZVVzZSwgTm9kZUluZGV4IG5vZGVJ
bmRleCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNw
cAkocmV2aXNpb24gMTM5NTg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1
cFBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDEyLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTcsMjEgKzU3LDIxIEBAIHByaXZhdGU6CiAgICAg
ICAgIEFTU0VSVChibG9jay0+aXNSZWFjaGFibGUpOwogICAgICAgICBtX2Jsb2NrID0gYmxvY2s7
CiAgICAgICAgIGZvciAobV9pbmRleEluQmxvY2sgPSAwOyBtX2luZGV4SW5CbG9jayA8IGJsb2Nr
LT5zaXplKCk7ICsrbV9pbmRleEluQmxvY2spIHsKLSAgICAgICAgICAgIG1fY29tcGlsZUluZGV4
ID0gYmxvY2stPmF0KG1faW5kZXhJbkJsb2NrKTsKLSAgICAgICAgICAgIGZpeHVwTm9kZShtX2dy
YXBoW21fY29tcGlsZUluZGV4XSk7CisgICAgICAgICAgICBtX2N1cnJlbnROb2RlID0gYmxvY2st
PmF0KG1faW5kZXhJbkJsb2NrKTsKKyAgICAgICAgICAgIGZpeHVwTm9kZShtX2N1cnJlbnROb2Rl
KTsKICAgICAgICAgfQogICAgICAgICBtX2luc2VydGlvblNldC5leGVjdXRlKCpibG9jayk7CiAg
ICAgfQogICAgIAotICAgIHZvaWQgZml4dXBOb2RlKE5vZGUmIG5vZGUpCisgICAgdm9pZCBmaXh1
cE5vZGUoTm9kZSogbm9kZSkKICAgICB7Ci0gICAgICAgIGlmICghbm9kZS5zaG91bGRHZW5lcmF0
ZSgpKQorICAgICAgICBpZiAoIW5vZGUtPnNob3VsZEdlbmVyYXRlKCkpCiAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgIAotICAgICAgICBOb2RlVHlwZSBvcCA9IG5vZGUub3AoKTsKKyAgICAg
ICAgTm9kZVR5cGUgb3AgPSBub2RlLT5vcCgpOwogCiAjaWYgREZHX0VOQUJMRShERUJVR19QUk9Q
QUdBVElPTl9WRVJCT1NFKQotICAgICAgICBkYXRhTG9nRigiICAgJXMgQCV1OiAiLCBHcmFwaDo6
b3BOYW1lKG9wKSwgbV9jb21waWxlSW5kZXgpOworICAgICAgICBkYXRhTG9nRigiICAgJXMgQCV1
OiAiLCBHcmFwaDo6b3BOYW1lKG9wKSwgbm9kZS0+aW5kZXgoKSk7CiAjZW5kaWYKICAgICAgICAg
CiAgICAgICAgIHN3aXRjaCAob3ApIHsKQEAgLTc5LDU0ICs3OSw1MCBAQCBwcml2YXRlOgogICAg
ICAgICAgICAgaWYgKG1fZ3JhcGgubV9maXhwb2ludFN0YXRlID4gQmVmb3JlRml4cG9pbnQpCiAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIE5vZGUqIG5v
ZGVQdHIgPSAmbm9kZTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKCFpc0ludDMyU3Bl
Y3VsYXRpb24obV9ncmFwaFttX2NvbXBpbGVJbmRleF0ucHJlZGljdGlvbigpKSkKKyAgICAgICAg
ICAgIGlmICghaXNJbnQzMlNwZWN1bGF0aW9uKG5vZGUtPnByZWRpY3Rpb24oKSkpCiAgICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBpZiAoY29kZUJsb2NrKCktPmlkZW50aWZpZXIo
bm9kZVB0ci0+aWRlbnRpZmllck51bWJlcigpKSAhPSBnbG9iYWxEYXRhKCkucHJvcGVydHlOYW1l
cy0+bGVuZ3RoKQorICAgICAgICAgICAgaWYgKGNvZGVCbG9jaygpLT5pZGVudGlmaWVyKG5vZGUt
PmlkZW50aWZpZXJOdW1iZXIoKSkgIT0gZ2xvYmFsRGF0YSgpLnByb3BlcnR5TmFtZXMtPmxlbmd0
aCkKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIEFycmF5UHJvZmlsZSogYXJy
YXlQcm9maWxlID0gCi0gICAgICAgICAgICAgICAgbV9ncmFwaC5iYXNlbGluZUNvZGVCbG9ja0Zv
cihub2RlUHRyLT5jb2RlT3JpZ2luKS0+Z2V0QXJyYXlQcm9maWxlKAotICAgICAgICAgICAgICAg
ICAgICBub2RlUHRyLT5jb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgpOworICAgICAgICAgICAgICAg
IG1fZ3JhcGguYmFzZWxpbmVDb2RlQmxvY2tGb3Iobm9kZS0+Y29kZU9yaWdpbiktPmdldEFycmF5
UHJvZmlsZSgKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y29kZU9yaWdpbi5ieXRlY29kZUlu
ZGV4KTsKICAgICAgICAgICAgIEFycmF5TW9kZSBhcnJheU1vZGUgPSBBcnJheU1vZGUoQXJyYXk6
OlNlbGVjdFVzaW5nUHJlZGljdGlvbnMpOwogICAgICAgICAgICAgaWYgKGFycmF5UHJvZmlsZSkg
ewotICAgICAgICAgICAgICAgIGFycmF5UHJvZmlsZS0+Y29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9u
KG1fZ3JhcGguYmFzZWxpbmVDb2RlQmxvY2tGb3Iobm9kZS5jb2RlT3JpZ2luKSk7CisgICAgICAg
ICAgICAgICAgYXJyYXlQcm9maWxlLT5jb21wdXRlVXBkYXRlZFByZWRpY3Rpb24obV9ncmFwaC5i
YXNlbGluZUNvZGVCbG9ja0Zvcihub2RlLT5jb2RlT3JpZ2luKSk7CiAgICAgICAgICAgICAgICAg
YXJyYXlNb2RlID0gQXJyYXlNb2RlOjpmcm9tT2JzZXJ2ZWQoYXJyYXlQcm9maWxlLCBBcnJheTo6
UmVhZCwgZmFsc2UpOwogICAgICAgICAgICAgICAgIGFycmF5TW9kZSA9IGFycmF5TW9kZS5yZWZp
bmUoCi0gICAgICAgICAgICAgICAgICAgIG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ucHJlZGljdGlv
bigpLAotICAgICAgICAgICAgICAgICAgICBtX2dyYXBoW21fY29tcGlsZUluZGV4XS5wcmVkaWN0
aW9uKCkpOworICAgICAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDEoKS0+cHJlZGljdGlvbigp
LCBub2RlLT5wcmVkaWN0aW9uKCkpOwogICAgICAgICAgICAgICAgIGlmIChhcnJheU1vZGUuc3Vw
cG9ydHNMZW5ndGgoKSAmJiBhcnJheVByb2ZpbGUtPmhhc0RlZmluaXRlU3RydWN0dXJlKCkpIHsK
LSAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5yZWYobm9kZVB0ci0+Y2hpbGQxKCkpOwotICAg
ICAgICAgICAgICAgICAgICBOb2RlIGNoZWNrU3RydWN0dXJlKENoZWNrU3RydWN0dXJlLCBub2Rl
UHRyLT5jb2RlT3JpZ2luLCBPcEluZm8obV9ncmFwaC5hZGRTdHJ1Y3R1cmVTZXQoYXJyYXlQcm9m
aWxlLT5leHBlY3RlZFN0cnVjdHVyZSgpKSksIG5vZGVQdHItPmNoaWxkMSgpLmluZGV4KCkpOwot
ICAgICAgICAgICAgICAgICAgICBjaGVja1N0cnVjdHVyZS5yZWYoKTsKLSAgICAgICAgICAgICAg
ICAgICAgTm9kZUluZGV4IGNoZWNrU3RydWN0dXJlSW5kZXggPSBtX2dyYXBoLnNpemUoKTsKLSAg
ICAgICAgICAgICAgICAgICAgbV9ncmFwaC5hcHBlbmQoY2hlY2tTdHJ1Y3R1cmUpOwotICAgICAg
ICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5hcHBlbmQobV9pbmRleEluQmxvY2ssIGNoZWNr
U3RydWN0dXJlSW5kZXgpOwotICAgICAgICAgICAgICAgICAgICBub2RlUHRyID0gJm1fZ3JhcGhb
bV9jb21waWxlSW5kZXhdOworICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLnJlZihub2RlLT5j
aGlsZDEoKSk7CisgICAgICAgICAgICAgICAgICAgIE5vZGUqIGNoZWNrU3RydWN0dXJlID0gbmV3
IChtX2dyYXBoLm1fYWxsb2NhdG9yKSBOb2RlKAorICAgICAgICAgICAgICAgICAgICAgICAgQ2hl
Y2tTdHJ1Y3R1cmUsIG5vZGUtPmNvZGVPcmlnaW4sCisgICAgICAgICAgICAgICAgICAgICAgICBP
cEluZm8obV9ncmFwaC5hZGRTdHJ1Y3R1cmVTZXQoYXJyYXlQcm9maWxlLT5leHBlY3RlZFN0cnVj
dHVyZSgpKSksCisgICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDEoKS5ub2RlKCkp
OworICAgICAgICAgICAgICAgICAgICBjaGVja1N0cnVjdHVyZS0+cmVmKCk7CisgICAgICAgICAg
ICAgICAgICAgIG1faW5zZXJ0aW9uU2V0LmFwcGVuZChtX2luZGV4SW5CbG9jaywgY2hlY2tTdHJ1
Y3R1cmUpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAg
ICAgICAgICAgYXJyYXlNb2RlID0gYXJyYXlNb2RlLnJlZmluZSgKLSAgICAgICAgICAgICAgICAg
ICAgbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5wcmVkaWN0aW9uKCksCisgICAgICAgICAgICAgICAg
ICAgIG1fZ3JhcGhbbm9kZS0+Y2hpbGQxKCldLnByZWRpY3Rpb24oKSwKICAgICAgICAgICAgICAg
ICAgICAgbV9ncmFwaFttX2NvbXBpbGVJbmRleF0ucHJlZGljdGlvbigpKTsKICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIGlmICghYXJyYXlNb2RlLnN1cHBvcnRzTGVuZ3RoKCkpCiAgICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBub2RlUHRyLT5zZXRPcChHZXRBcnJheUxlbmd0
aCk7Ci0gICAgICAgICAgICBBU1NFUlQobm9kZVB0ci0+ZmxhZ3MoKSAmIE5vZGVNdXN0R2VuZXJh
dGUpOwotICAgICAgICAgICAgbm9kZVB0ci0+Y2xlYXJGbGFncyhOb2RlTXVzdEdlbmVyYXRlIHwg
Tm9kZUNsb2JiZXJzV29ybGQpOwotICAgICAgICAgICAgbV9ncmFwaC5kZXJlZihtX2NvbXBpbGVJ
bmRleCk7Ci0gICAgICAgICAgICBub2RlUHRyLT5zZXRBcnJheU1vZGUoYXJyYXlNb2RlKTsKKyAg
ICAgICAgICAgIG5vZGUtPnNldE9wKEdldEFycmF5TGVuZ3RoKTsKKyAgICAgICAgICAgIEFTU0VS
VChub2RlLT5mbGFncygpICYgTm9kZU11c3RHZW5lcmF0ZSk7CisgICAgICAgICAgICBub2RlLT5j
bGVhckZsYWdzKE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlQ2xvYmJlcnNXb3JsZCk7CisgICAgICAg
ICAgICBtX2dyYXBoLmRlcmVmKG5vZGUpOworICAgICAgICAgICAgbm9kZS0+c2V0QXJyYXlNb2Rl
KGFycmF5TW9kZSk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIE5vZGVJbmRleCBzdG9yYWdl
ID0gY2hlY2tBcnJheShhcnJheU1vZGUsIG5vZGVQdHItPmNvZGVPcmlnaW4sIG5vZGVQdHItPmNo
aWxkMSgpLmluZGV4KCksIE5vTm9kZSwgbGVuZ3RoTmVlZHNTdG9yYWdlLCBub2RlUHRyLT5zaG91
bGRHZW5lcmF0ZSgpKTsKLSAgICAgICAgICAgIGlmIChzdG9yYWdlID09IE5vTm9kZSkKKyAgICAg
ICAgICAgIE5vZGUqIHN0b3JhZ2UgPSBjaGVja0FycmF5KGFycmF5TW9kZSwgbm9kZS0+Y29kZU9y
aWdpbiwgbm9kZS0+Y2hpbGQxKCkubm9kZSgpLCAwLCBsZW5ndGhOZWVkc1N0b3JhZ2UsIG5vZGUt
PnNob3VsZEdlbmVyYXRlKCkpOworICAgICAgICAgICAgaWYgKCFzdG9yYWdlKQogICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBub2RlUHRyID0gJm1fZ3Jh
cGhbbV9jb21waWxlSW5kZXhdOwotICAgICAgICAgICAgbm9kZVB0ci0+Y2hpbGRyZW4uY2hpbGQy
KCkgPSBFZGdlKHN0b3JhZ2UpOworICAgICAgICAgICAgbm9kZS0+Y2hpbGRyZW4uY2hpbGQyKCkg
PSBFZGdlKHN0b3JhZ2UpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAg
Y2FzZSBHZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlOiB7Ci0gICAgICAgICAgICBBU1NFUlQobm9k
ZS5hcnJheU1vZGUoKS5jYW5DU0VTdG9yYWdlKCkpOworICAgICAgICAgICAgQVNTRVJUKG5vZGUt
PmFycmF5TW9kZSgpLmNhbkNTRVN0b3JhZ2UoKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgfQogICAgICAgICBjYXNlIEdldEJ5VmFsOiB7CkBAIC01ODAsOCArNTc2LDggQEAgcHJpdmF0
ZToKIAogICAgIEJhc2ljQmxvY2sqIG1fYmxvY2s7CiAgICAgdW5zaWduZWQgbV9pbmRleEluQmxv
Y2s7Ci0gICAgTm9kZUluZGV4IG1fY29tcGlsZUluZGV4OwotICAgIEluc2VydGlvblNldDxOb2Rl
SW5kZXg+IG1faW5zZXJ0aW9uU2V0OworICAgIE5vZGUqIG1fY3VycmVudE5vZGU7CisgICAgSW5z
ZXJ0aW9uU2V0PE5vZGUqPiBtX2luc2VydGlvblNldDsKIH07CiAgICAgCiBib29sIHBlcmZvcm1G
aXh1cChHcmFwaCYgZ3JhcGgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dy
YXBoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBo
LmNwcAkocmV2aXNpb24gMTM5NTg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdH
cmFwaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDYgKzQ2LDcgQEAgR3JhcGg6OkdyYXBoKEpT
R2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgQwogICAgICwgbV9jb2RlQmxvY2soY29kZUJsb2NrKQog
ICAgICwgbV9jb21waWxhdGlvbihnbG9iYWxEYXRhLm1fcGVyQnl0ZWNvZGVQcm9maWxlciA/IGds
b2JhbERhdGEubV9wZXJCeXRlY29kZVByb2ZpbGVyLT5uZXdDb21waWxhdGlvbihjb2RlQmxvY2ss
IFByb2ZpbGVyOjpERkcpIDogMCkKICAgICAsIG1fcHJvZmlsZWRCbG9jayhjb2RlQmxvY2stPmFs
dGVybmF0aXZlKCkpCisgICAgLCBtX2FsbG9jYXRvcihnbG9iYWxEYXRhLm1fZGZnU3RhdGUtPm1f
YWxsb2NhdG9yKQogICAgICwgbV9oYXNBcmd1bWVudHMoZmFsc2UpCiAgICAgLCBtX29zckVudHJ5
Qnl0ZWNvZGVJbmRleChvc3JFbnRyeUJ5dGVjb2RlSW5kZXgpCiAgICAgLCBtX211c3RIYW5kbGVW
YWx1ZXMobXVzdEhhbmRsZVZhbHVlcykKQEAgLTU0LDYgKzU1LDExIEBAIEdyYXBoOjpHcmFwaChK
U0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEMKICAgICBBU1NFUlQobV9wcm9maWxlZEJsb2NrKTsK
IH0KIAorR3JhcGg6On5HcmFwaCgpCit7CisgICAgbV9hbGxvY2F0b3IuZnJlZUFsbCgpOworfQor
CiBjb25zdCBjaGFyICpHcmFwaDo6b3BOYW1lKE5vZGVUeXBlIG9wKQogewogICAgIHJldHVybiBk
ZmdPcE5hbWVzW29wXTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGgu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHJl
dmlzaW9uIDEzOTU4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLCAy
MDEyLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtMzUsNyArMzUsOSBAQAogI2luY2x1ZGUgIkRGR0Fzc2VtYmx5
SGVscGVycy5oIgogI2luY2x1ZGUgIkRGR0Jhc2ljQmxvY2suaCIKICNpbmNsdWRlICJERkdEb21p
bmF0b3JzLmgiCisjaW5jbHVkZSAiREZHTG9uZ0xpdmVkU3RhdGUuaCIKICNpbmNsdWRlICJERkdO
b2RlLmgiCisjaW5jbHVkZSAiREZHTm9kZUFsbG9jYXRvci5oIgogI2luY2x1ZGUgIkpTU3RhY2su
aCIKICNpbmNsdWRlICJNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLmgiCiAjaW5jbHVkZSA8
d3RmL0JpdFZlY3Rvci5oPgpAQCAtODIsNTQgKzg0LDQ2IEBAIGVudW0gQWRkU3BlY3VsYXRpb25N
b2RlIHsKIC8vCiAvLyA9PT0gR3JhcGggPT09CiAvLwotLy8gVGhlIGRhdGFmbG93IGdyYXBoIGlz
IGFuIG9yZGVyZWQgdmVjdG9yIG9mIG5vZGVzLgogLy8gVGhlIG9yZGVyIG1heSBiZSBzaWduaWZp
Y2FudCBmb3Igbm9kZXMgd2l0aCBzaWRlLWVmZmVjdHMgKHByb3BlcnR5IGFjY2Vzc2VzLCB2YWx1
ZSBjb252ZXJzaW9ucykuCiAvLyBOb2RlcyB0aGF0IGFyZSAnZGVhZCcgcmVtYWluIGluIHRoZSB2
ZWN0b3Igd2l0aCByZWZDb3VudCAwLgotY2xhc3MgR3JhcGggOiBwdWJsaWMgVmVjdG9yPE5vZGUs
IDY0PiB7CitjbGFzcyBHcmFwaCB7CiBwdWJsaWM6CiAgICAgR3JhcGgoSlNHbG9iYWxEYXRhJiwg
Q29kZUJsb2NrKiwgdW5zaWduZWQgb3NyRW50cnlCeXRlY29kZUluZGV4LCBjb25zdCBPcGVyYW5k
czxKU1ZhbHVlPiYgbXVzdEhhbmRsZVZhbHVlcyk7Ci0gICAgCi0gICAgdXNpbmcgVmVjdG9yPE5v
ZGUsIDY0Pjo6b3BlcmF0b3JbXTsKLSAgICB1c2luZyBWZWN0b3I8Tm9kZSwgNjQ+OjphdDsKLSAg
ICAKLSAgICBOb2RlJiBvcGVyYXRvcltdKEVkZ2Ugbm9kZVVzZSkgeyByZXR1cm4gYXQobm9kZVVz
ZS5pbmRleCgpKTsgfQotICAgIGNvbnN0IE5vZGUmIG9wZXJhdG9yW10oRWRnZSBub2RlVXNlKSBj
b25zdCB7IHJldHVybiBhdChub2RlVXNlLmluZGV4KCkpOyB9Ci0gICAgCi0gICAgTm9kZSYgYXQo
RWRnZSBub2RlVXNlKSB7IHJldHVybiBhdChub2RlVXNlLmluZGV4KCkpOyB9Ci0gICAgY29uc3Qg
Tm9kZSYgYXQoRWRnZSBub2RlVXNlKSBjb25zdCB7IHJldHVybiBhdChub2RlVXNlLmluZGV4KCkp
OyB9CisgICAgfkdyYXBoKCk7CiAgICAgCiAgICAgLy8gTWFyayBhIG5vZGUgYXMgYmVpbmcgcmVm
ZXJlbmNlZC4KLSAgICB2b2lkIHJlZihOb2RlSW5kZXggbm9kZUluZGV4KQorICAgIHZvaWQgcmVm
KE5vZGUqIG5vZGUpCiAgICAgewotICAgICAgICBOb2RlJiBub2RlID0gYXQobm9kZUluZGV4KTsK
ICAgICAgICAgLy8gSWYgdGhlIHZhbHVlIChiZWZvcmUgaW5jcmVtZW50aW5nKSB3YXMgYXQgcmVm
Q291bnQgemVybyB0aGVuIHdlIG5lZWQgdG8gcmVmIGl0cyBjaGlsZHJlbi4KLSAgICAgICAgaWYg
KG5vZGUucmVmKCkpCi0gICAgICAgICAgICByZWZDaGlsZHJlbihub2RlSW5kZXgpOworICAgICAg
ICBpZiAobm9kZS0+cmVmKCkpCisgICAgICAgICAgICByZWZDaGlsZHJlbihub2RlKTsKICAgICB9
CiAgICAgdm9pZCByZWYoRWRnZSBub2RlVXNlKQogICAgIHsKLSAgICAgICAgcmVmKG5vZGVVc2Uu
aW5kZXgoKSk7CisgICAgICAgIHJlZihub2RlVXNlLm5vZGUoKSk7CiAgICAgfQogICAgIAotICAg
IHZvaWQgZGVyZWYoTm9kZUluZGV4IG5vZGVJbmRleCkKKyAgICB2b2lkIGRlcmVmKE5vZGUqIG5v
ZGUpCiAgICAgewotICAgICAgICBpZiAoIWF0KG5vZGVJbmRleCkucmVmQ291bnQoKSkKKyNpZiAh
QVNTRVJUX0RJU0FCTEVECisgICAgICAgIGlmICghbm9kZS0+cmVmQ291bnQoKSkKICAgICAgICAg
ICAgIGR1bXAoKTsKLSAgICAgICAgaWYgKGF0KG5vZGVJbmRleCkuZGVyZWYoKSkKLSAgICAgICAg
ICAgIGRlcmVmQ2hpbGRyZW4obm9kZUluZGV4KTsKKyNlbmRpZgorICAgICAgICBpZiAobm9kZS0+
ZGVyZWYoKSkKKyAgICAgICAgICAgIGRlcmVmQ2hpbGRyZW4obm9kZSk7CiAgICAgfQogICAgIHZv
aWQgZGVyZWYoRWRnZSBub2RlVXNlKQogICAgIHsKLSAgICAgICAgZGVyZWYobm9kZVVzZS5pbmRl
eCgpKTsKKyAgICAgICAgZGVyZWYobm9kZVVzZS5ub2RlKCkpOwogICAgIH0KICAgICAKLSAgICB2
b2lkIGNoYW5nZUluZGV4KEVkZ2UmIGVkZ2UsIE5vZGVJbmRleCBuZXdJbmRleCwgYm9vbCBjaGFu
Z2VSZWYgPSB0cnVlKQorICAgIHZvaWQgY2hhbmdlSW5kZXgoRWRnZSYgZWRnZSwgTm9kZSogbmV3
Tm9kZSwgYm9vbCBjaGFuZ2VSZWYgPSB0cnVlKQogICAgIHsKICAgICAgICAgaWYgKGNoYW5nZVJl
ZikgewotICAgICAgICAgICAgcmVmKG5ld0luZGV4KTsKLSAgICAgICAgICAgIGRlcmVmKGVkZ2Uu
aW5kZXgoKSk7CisgICAgICAgICAgICByZWYobmV3Tm9kZSk7CisgICAgICAgICAgICBkZXJlZihl
ZGdlLm5vZGUoKSk7CiAgICAgICAgIH0KLSAgICAgICAgZWRnZS5zZXRJbmRleChuZXdJbmRleCk7
CisgICAgICAgIGVkZ2Uuc2V0Tm9kZShuZXdOb2RlKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBj
aGFuZ2VFZGdlKEVkZ2UmIGVkZ2UsIEVkZ2UgbmV3RWRnZSwgYm9vbCBjaGFuZ2VSZWYgPSB0cnVl
KQpAQCAtMTQxLDExICsxMzUsMTEgQEAgcHVibGljOgogICAgICAgICBlZGdlID0gbmV3RWRnZTsK
ICAgICB9CiAgICAgCi0gICAgdm9pZCBjb21wYXJlQW5kU3dhcChFZGdlJiBlZGdlLCBOb2RlSW5k
ZXggb2xkSW5kZXgsIE5vZGVJbmRleCBuZXdJbmRleCwgYm9vbCBjaGFuZ2VSZWYpCisgICAgdm9p
ZCBjb21wYXJlQW5kU3dhcChFZGdlJiBlZGdlLCBOb2RlKiBvbGROb2RlLCBOb2RlKiBuZXdOb2Rl
LCBib29sIGNoYW5nZVJlZikKICAgICB7Ci0gICAgICAgIGlmIChlZGdlLmluZGV4KCkgIT0gb2xk
SW5kZXgpCisgICAgICAgIGlmIChlZGdlLm5vZGUoKSAhPSBvbGROb2RlKQogICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICBjaGFuZ2VJbmRleChlZGdlLCBuZXdJbmRleCwgY2hhbmdlUmVmKTsK
KyAgICAgICAgY2hhbmdlSW5kZXgoZWRnZSwgbmV3Tm9kZSwgY2hhbmdlUmVmKTsKICAgICB9CiAg
ICAgCiAgICAgdm9pZCBjb21wYXJlQW5kU3dhcChFZGdlJiBlZGdlLCBFZGdlIG9sZEVkZ2UsIEVk
Z2UgbmV3RWRnZSwgYm9vbCBjaGFuZ2VSZWYpCkBAIC0xNTUsMjkgKzE0OSwxNiBAQCBwdWJsaWM6
CiAgICAgICAgIGNoYW5nZUVkZ2UoZWRnZSwgbmV3RWRnZSwgY2hhbmdlUmVmKTsKICAgICB9CiAg
ICAgCi0gICAgdm9pZCBjbGVhckFuZERlcmVmQ2hpbGQxKE5vZGUmIG5vZGUpCi0gICAgewotICAg
ICAgICBpZiAoIW5vZGUuY2hpbGQxKCkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGRl
cmVmKG5vZGUuY2hpbGQxKCkpOwotICAgICAgICBub2RlLmNoaWxkcmVuLmNoaWxkMSgpID0gRWRn
ZSgpOwotICAgIH0KLQotICAgIHZvaWQgY2xlYXJBbmREZXJlZkNoaWxkMihOb2RlJiBub2RlKQor
ICAgIHZvaWQgY2xlYXJBbmREZXJlZkNoaWxkKE5vZGUqIG5vZGUsIHVuc2lnbmVkIGluZGV4KQog
ICAgIHsKLSAgICAgICAgaWYgKCFub2RlLmNoaWxkMigpKQorICAgICAgICBpZiAoIW5vZGUtPmNo
aWxkcmVuLmNoaWxkKGluZGV4KSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgZGVyZWYo
bm9kZS5jaGlsZDIoKSk7Ci0gICAgICAgIG5vZGUuY2hpbGRyZW4uY2hpbGQyKCkgPSBFZGdlKCk7
Ci0gICAgfQotCi0gICAgdm9pZCBjbGVhckFuZERlcmVmQ2hpbGQzKE5vZGUmIG5vZGUpCi0gICAg
ewotICAgICAgICBpZiAoIW5vZGUuY2hpbGQzKCkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgIGRlcmVmKG5vZGUuY2hpbGQzKCkpOwotICAgICAgICBub2RlLmNoaWxkcmVuLmNoaWxkMygp
ID0gRWRnZSgpOworICAgICAgICBkZXJlZihub2RlLT5jaGlsZHJlbi5jaGlsZChpbmRleCkpOwor
ICAgICAgICBub2RlLmNoaWxkcmVuLnNldENoaWxkKGluZGV4LCBFZGdlKCkpOwogICAgIH0KKyAg
ICB2b2lkIGNsZWFyQW5kRGVyZWZDaGlsZDEoTm9kZSogbm9kZSkgeyBjbGVhckFuZERlcmVmQ2hp
bGQobm9kZSwgMCk7IH0KKyAgICB2b2lkIGNsZWFyQW5kRGVyZWZDaGlsZDIoTm9kZSogbm9kZSkg
eyBjbGVhckFuZERlcmVmQ2hpbGQobm9kZSwgMSk7IH0KKyAgICB2b2lkIGNsZWFyQW5kRGVyZWZD
aGlsZDMoTm9kZSogbm9kZSkgeyBjbGVhckFuZERlcmVmQ2hpbGQobm9kZSwgMik7IH0KICAgICAK
ICAgICAvLyBDYWxsIHRoaXMgaWYgeW91J3ZlIG1vZGlmaWVkIHRoZSByZWZlcmVuY2UgY291bnRz
IG9mIG5vZGVzIHRoYXQgZGVhbCB3aXRoCiAgICAgLy8gbG9jYWwgdmFyaWFibGVzLiBUaGlzIGlz
IG5lY2Vzc2FyeSBiZWNhdXNlIGxvY2FsIHZhcmlhYmxlIHJlZmVyZW5jZXMgY2FuIGZvcm0KQEAg
LTE4NSwxNCArMTY2LDE0IEBAIHB1YmxpYzoKICAgICAvLyByZWZlcmVuY2UgY291bnRzIGFjY29y
ZGluZyB0byByZWFjaGFiaWxpdHkuCiAgICAgdm9pZCBjb2xsZWN0R2FyYmFnZSgpOwogICAgIAot
ICAgIHZvaWQgY29udmVydFRvQ29uc3RhbnQoTm9kZUluZGV4IG5vZGVJbmRleCwgdW5zaWduZWQg
Y29uc3RhbnROdW1iZXIpCisgICAgdm9pZCBjb252ZXJ0VG9Db25zdGFudChOb2RlKiBub2RlLCB1
bnNpZ25lZCBjb25zdGFudE51bWJlcikKICAgICB7Ci0gICAgICAgIGF0KG5vZGVJbmRleCkuY29u
dmVydFRvQ29uc3RhbnQoY29uc3RhbnROdW1iZXIpOworICAgICAgICBub2RlLT5jb252ZXJ0VG9D
b25zdGFudChjb25zdGFudE51bWJlcik7CiAgICAgfQogICAgIAotICAgIHZvaWQgY29udmVydFRv
Q29uc3RhbnQoTm9kZUluZGV4IG5vZGVJbmRleCwgSlNWYWx1ZSB2YWx1ZSkKKyAgICB2b2lkIGNv
bnZlcnRUb0NvbnN0YW50KE5vZGUqIG5vZGUsIEpTVmFsdWUgdmFsdWUpCiAgICAgewotICAgICAg
ICBjb252ZXJ0VG9Db25zdGFudChub2RlSW5kZXgsIG1fY29kZUJsb2NrLT5hZGRPckZpbmRDb25z
dGFudCh2YWx1ZSkpOworICAgICAgICBjb252ZXJ0VG9Db25zdGFudChub2RlLCBtX2NvZGVCbG9j
ay0+YWRkT3JGaW5kQ29uc3RhbnQodmFsdWUpKTsKICAgICB9CiAKICAgICAvLyBDb2RlQmxvY2sg
aXMgb3B0aW9uYWwsIGJ1dCBtYXkgYWxsb3cgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiB0byBiZSBk
dW1wZWQgKGUuZy4gSWRlbnRpZmllciBuYW1lcykuCkBAIC0yMDAsMTI1ICsxODEsMTI1IEBAIHB1
YmxpYzoKICAgICBlbnVtIFBoaU5vZGVEdW1wTW9kZSB7IER1bXBMaXZlUGhpc09ubHksIER1bXBB
bGxQaGlzIH07CiAgICAgdm9pZCBkdW1wQmxvY2tIZWFkZXIoUHJpbnRTdHJlYW0mLCBjb25zdCBj
aGFyKiBwcmVmaXgsIEJsb2NrSW5kZXgsIFBoaU5vZGVEdW1wTW9kZSk7CiAgICAgdm9pZCBkdW1w
KFByaW50U3RyZWFtJiwgRWRnZSk7Ci0gICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiwgY29uc3Qg
Y2hhciogcHJlZml4LCBOb2RlSW5kZXgpOwotICAgIHN0YXRpYyBpbnQgYW1vdW50T2ZOb2RlV2hp
dGVTcGFjZShOb2RlJik7Ci0gICAgc3RhdGljIHZvaWQgcHJpbnROb2RlV2hpdGVTcGFjZShQcmlu
dFN0cmVhbSYsIE5vZGUmKTsKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mLCBjb25zdCBjaGFy
KiBwcmVmaXgsIE5vZGUqKTsKKyAgICBzdGF0aWMgaW50IGFtb3VudE9mTm9kZVdoaXRlU3BhY2Uo
Tm9kZSopOworICAgIHN0YXRpYyB2b2lkIHByaW50Tm9kZVdoaXRlU3BhY2UoUHJpbnRTdHJlYW0m
LCBOb2RlKik7CiAKICAgICAvLyBEdW1wIHRoZSBjb2RlIG9yaWdpbiBvZiB0aGUgZ2l2ZW4gbm9k
ZSBhcyBhIGRpZmYgZnJvbSB0aGUgY29kZSBvcmlnaW4gb2YgdGhlCiAgICAgLy8gcHJlY2VkaW5n
IG5vZGUuIFJldHVybnMgdHJ1ZSBpZiBhbnl0aGluZyB3YXMgcHJpbnRlZC4KLSAgICBib29sIGR1
bXBDb2RlT3JpZ2luKFByaW50U3RyZWFtJiwgY29uc3QgY2hhciogcHJlZml4LCBOb2RlSW5kZXgs
IE5vZGVJbmRleCk7CisgICAgYm9vbCBkdW1wQ29kZU9yaWdpbihQcmludFN0cmVhbSYsIGNvbnN0
IGNoYXIqIHByZWZpeCwgTm9kZSogcHJldmlvdXNOb2RlLCBOb2RlKiBzdWJzZXF1ZW50Tm9kZSk7
CiAKICAgICBCbG9ja0luZGV4IGJsb2NrSW5kZXhGb3JCeXRlY29kZU9mZnNldChWZWN0b3I8Qmxv
Y2tJbmRleD4mIGJsb2NrcywgdW5zaWduZWQgYnl0ZWNvZGVCZWdpbik7CiAKLSAgICBTcGVjdWxh
dGVkVHlwZSBnZXRKU0NvbnN0YW50U3BlY3VsYXRpb24oTm9kZSYgbm9kZSkKKyAgICBTcGVjdWxh
dGVkVHlwZSBnZXRKU0NvbnN0YW50U3BlY3VsYXRpb24oTm9kZSogbm9kZSkKICAgICB7Ci0gICAg
ICAgIHJldHVybiBzcGVjdWxhdGlvbkZyb21WYWx1ZShub2RlLnZhbHVlT2ZKU0NvbnN0YW50KG1f
Y29kZUJsb2NrKSk7CisgICAgICAgIHJldHVybiBzcGVjdWxhdGlvbkZyb21WYWx1ZShub2RlLT52
YWx1ZU9mSlNDb25zdGFudChtX2NvZGVCbG9jaykpOwogICAgIH0KICAgICAKLSAgICBBZGRTcGVj
dWxhdGlvbk1vZGUgYWRkU3BlY3VsYXRpb25Nb2RlKE5vZGUmIGFkZCwgYm9vbCBsZWZ0U2hvdWxk
U3BlY3VsYXRlSW50ZWdlciwgYm9vbCByaWdodFNob3VsZFNwZWN1bGF0ZUludGVnZXIpCisgICAg
QWRkU3BlY3VsYXRpb25Nb2RlIGFkZFNwZWN1bGF0aW9uTW9kZShOb2RlKiBhZGQsIGJvb2wgbGVm
dFNob3VsZFNwZWN1bGF0ZUludGVnZXIsIGJvb2wgcmlnaHRTaG91bGRTcGVjdWxhdGVJbnRlZ2Vy
KQogICAgIHsKLSAgICAgICAgQVNTRVJUKGFkZC5vcCgpID09IFZhbHVlQWRkIHx8IGFkZC5vcCgp
ID09IEFyaXRoQWRkIHx8IGFkZC5vcCgpID09IEFyaXRoU3ViKTsKKyAgICAgICAgQVNTRVJUKGFk
ZC0+b3AoKSA9PSBWYWx1ZUFkZCB8fCBhZGQtPm9wKCkgPT0gQXJpdGhBZGQgfHwgYWRkLT5vcCgp
ID09IEFyaXRoU3ViKTsKICAgICAgICAgCi0gICAgICAgIE5vZGUmIGxlZnQgPSBhdChhZGQuY2hp
bGQxKCkpOwotICAgICAgICBOb2RlJiByaWdodCA9IGF0KGFkZC5jaGlsZDIoKSk7CisgICAgICAg
IE5vZGUqIGxlZnQgPSBhZGQtPmNoaWxkMSgpLm5vZGUoKTsKKyAgICAgICAgTm9kZSogcmlnaHQg
PSBhZGQtPmNoaWxkMigpLm5vZGUoKTsKICAgICAgICAgCi0gICAgICAgIGlmIChsZWZ0Lmhhc0Nv
bnN0YW50KCkpCisgICAgICAgIGlmIChsZWZ0LT5oYXNDb25zdGFudCgpKQogICAgICAgICAgICAg
cmV0dXJuIGFkZEltbWVkaWF0ZVNob3VsZFNwZWN1bGF0ZUludGVnZXIoYWRkLCByaWdodFNob3Vs
ZFNwZWN1bGF0ZUludGVnZXIsIGxlZnQpOwotICAgICAgICBpZiAocmlnaHQuaGFzQ29uc3RhbnQo
KSkKKyAgICAgICAgaWYgKHJpZ2h0LT5oYXNDb25zdGFudCgpKQogICAgICAgICAgICAgcmV0dXJu
IGFkZEltbWVkaWF0ZVNob3VsZFNwZWN1bGF0ZUludGVnZXIoYWRkLCBsZWZ0U2hvdWxkU3BlY3Vs
YXRlSW50ZWdlciwgcmlnaHQpOwogICAgICAgICAKLSAgICAgICAgcmV0dXJuIChsZWZ0U2hvdWxk
U3BlY3VsYXRlSW50ZWdlciAmJiByaWdodFNob3VsZFNwZWN1bGF0ZUludGVnZXIgJiYgYWRkLmNh
blNwZWN1bGF0ZUludGVnZXIoKSkgPyBTcGVjdWxhdGVJbnRlZ2VyIDogRG9udFNwZWN1bGF0ZUlu
dGVnZXI7CisgICAgICAgIHJldHVybiAobGVmdFNob3VsZFNwZWN1bGF0ZUludGVnZXIgJiYgcmln
aHRTaG91bGRTcGVjdWxhdGVJbnRlZ2VyICYmIGFkZC0+Y2FuU3BlY3VsYXRlSW50ZWdlcigpKSA/
IFNwZWN1bGF0ZUludGVnZXIgOiBEb250U3BlY3VsYXRlSW50ZWdlcjsKICAgICB9CiAgICAgCi0g
ICAgQWRkU3BlY3VsYXRpb25Nb2RlIHZhbHVlQWRkU3BlY3VsYXRpb25Nb2RlKE5vZGUmIGFkZCkK
KyAgICBBZGRTcGVjdWxhdGlvbk1vZGUgdmFsdWVBZGRTcGVjdWxhdGlvbk1vZGUoTm9kZSogYWRk
KQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkZFNwZWN1bGF0aW9uTW9kZShhZGQsIGF0KGFkZC5j
aGlsZDEoKSkuc2hvdWxkU3BlY3VsYXRlSW50ZWdlckV4cGVjdGluZ0RlZmluZWQoKSwgYXQoYWRk
LmNoaWxkMigpKS5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyRXhwZWN0aW5nRGVmaW5lZCgpKTsKKyAg
ICAgICAgcmV0dXJuIGFkZFNwZWN1bGF0aW9uTW9kZShhZGQsIGFkZC0+Y2hpbGQxKCktPnNob3Vs
ZFNwZWN1bGF0ZUludGVnZXJFeHBlY3RpbmdEZWZpbmVkKCksIGFkZC0+Y2hpbGQyKCktPnNob3Vs
ZFNwZWN1bGF0ZUludGVnZXJFeHBlY3RpbmdEZWZpbmVkKCkpOwogICAgIH0KICAgICAKLSAgICBB
ZGRTcGVjdWxhdGlvbk1vZGUgYXJpdGhBZGRTcGVjdWxhdGlvbk1vZGUoTm9kZSYgYWRkKQorICAg
IEFkZFNwZWN1bGF0aW9uTW9kZSBhcml0aEFkZFNwZWN1bGF0aW9uTW9kZShOb2RlKiBhZGQpCiAg
ICAgewotICAgICAgICByZXR1cm4gYWRkU3BlY3VsYXRpb25Nb2RlKGFkZCwgYXQoYWRkLmNoaWxk
MSgpKS5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyRm9yQXJpdGhtZXRpYygpLCBhdChhZGQuY2hpbGQy
KCkpLnNob3VsZFNwZWN1bGF0ZUludGVnZXJGb3JBcml0aG1ldGljKCkpOworICAgICAgICByZXR1
cm4gYWRkU3BlY3VsYXRpb25Nb2RlKGFkZCwgYWRkLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRl
SW50ZWdlckZvckFyaXRobWV0aWMoKSwgYWRkLT5jaGlsZDIoKS0+c2hvdWxkU3BlY3VsYXRlSW50
ZWdlckZvckFyaXRobWV0aWMoKSk7CiAgICAgfQogICAgIAotICAgIEFkZFNwZWN1bGF0aW9uTW9k
ZSBhZGRTcGVjdWxhdGlvbk1vZGUoTm9kZSYgYWRkKQorICAgIEFkZFNwZWN1bGF0aW9uTW9kZSBh
ZGRTcGVjdWxhdGlvbk1vZGUoTm9kZSogYWRkKQogICAgIHsKLSAgICAgICAgaWYgKGFkZC5vcCgp
ID09IFZhbHVlQWRkKQorICAgICAgICBpZiAoYWRkLT5vcCgpID09IFZhbHVlQWRkKQogICAgICAg
ICAgICAgcmV0dXJuIHZhbHVlQWRkU3BlY3VsYXRpb25Nb2RlKGFkZCk7CiAgICAgICAgIAogICAg
ICAgICByZXR1cm4gYXJpdGhBZGRTcGVjdWxhdGlvbk1vZGUoYWRkKTsKICAgICB9CiAgICAgCi0g
ICAgYm9vbCBhZGRTaG91bGRTcGVjdWxhdGVJbnRlZ2VyKE5vZGUmIGFkZCkKKyAgICBib29sIGFk
ZFNob3VsZFNwZWN1bGF0ZUludGVnZXIoTm9kZSogYWRkKQogICAgIHsKICAgICAgICAgcmV0dXJu
IGFkZFNwZWN1bGF0aW9uTW9kZShhZGQpICE9IERvbnRTcGVjdWxhdGVJbnRlZ2VyOwogICAgIH0K
ICAgICAKLSAgICBib29sIG11bFNob3VsZFNwZWN1bGF0ZUludGVnZXIoTm9kZSYgbXVsKQorICAg
IGJvb2wgbXVsU2hvdWxkU3BlY3VsYXRlSW50ZWdlcihOb2RlKiBtdWwpCiAgICAgewotICAgICAg
ICBBU1NFUlQobXVsLm9wKCkgPT0gQXJpdGhNdWwpOworICAgICAgICBBU1NFUlQobXVsLT5vcCgp
ID09IEFyaXRoTXVsKTsKICAgICAgICAgCi0gICAgICAgIE5vZGUmIGxlZnQgPSBhdChtdWwuY2hp
bGQxKCkpOwotICAgICAgICBOb2RlJiByaWdodCA9IGF0KG11bC5jaGlsZDIoKSk7CisgICAgICAg
IE5vZGUqIGxlZnQgPSBtdWwtPmNoaWxkMSgpLm5vZGUoKTsKKyAgICAgICAgTm9kZSogcmlnaHQg
PSBtdWwtPmNoaWxkMigpLm5vZGUoKTsKICAgICAgICAgCiAgICAgICAgIHJldHVybiBOb2RlOjpz
aG91bGRTcGVjdWxhdGVJbnRlZ2VyRm9yQXJpdGhtZXRpYyhsZWZ0LCByaWdodCkgJiYgbXVsLmNh
blNwZWN1bGF0ZUludGVnZXIoKTsKICAgICB9CiAgICAgCi0gICAgYm9vbCBuZWdhdGVTaG91bGRT
cGVjdWxhdGVJbnRlZ2VyKE5vZGUmIG5lZ2F0ZSkKKyAgICBib29sIG5lZ2F0ZVNob3VsZFNwZWN1
bGF0ZUludGVnZXIoTm9kZSogbmVnYXRlKQogICAgIHsKLSAgICAgICAgQVNTRVJUKG5lZ2F0ZS5v
cCgpID09IEFyaXRoTmVnYXRlKTsKLSAgICAgICAgcmV0dXJuIGF0KG5lZ2F0ZS5jaGlsZDEoKSku
c2hvdWxkU3BlY3VsYXRlSW50ZWdlckZvckFyaXRobWV0aWMoKSAmJiBuZWdhdGUuY2FuU3BlY3Vs
YXRlSW50ZWdlcigpOworICAgICAgICBBU1NFUlQobmVnYXRlLT5vcCgpID09IEFyaXRoTmVnYXRl
KTsKKyAgICAgICAgcmV0dXJuIG5lZ2F0ZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZUludGVn
ZXJGb3JBcml0aG1ldGljKCkgJiYgbmVnYXRlLT5jYW5TcGVjdWxhdGVJbnRlZ2VyKCk7CiAgICAg
fQogICAgIAotICAgIGJvb2wgYWRkU2hvdWxkU3BlY3VsYXRlSW50ZWdlcihOb2RlSW5kZXggbm9k
ZUluZGV4KQorICAgIGJvb2wgYWRkU2hvdWxkU3BlY3VsYXRlSW50ZWdlcihOb2RlKiBub2RlKQog
ICAgIHsKLSAgICAgICAgcmV0dXJuIGFkZFNob3VsZFNwZWN1bGF0ZUludGVnZXIoYXQobm9kZUlu
ZGV4KSk7CisgICAgICAgIHJldHVybiBhZGRTaG91bGRTcGVjdWxhdGVJbnRlZ2VyKG5vZGUpOwog
ICAgIH0KICAgICAKICAgICAvLyBIZWxwZXIgbWV0aG9kcyB0byBjaGVjayBub2RlcyBmb3IgY29u
c3RhbnRzLgotICAgIGJvb2wgaXNDb25zdGFudChOb2RlSW5kZXggbm9kZUluZGV4KQorICAgIGJv
b2wgaXNDb25zdGFudChOb2RlKiBub2RlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGF0KG5vZGVJ
bmRleCkuaGFzQ29uc3RhbnQoKTsKKyAgICAgICAgcmV0dXJuIG5vZGUtPmhhc0NvbnN0YW50KCk7
CiAgICAgfQotICAgIGJvb2wgaXNKU0NvbnN0YW50KE5vZGVJbmRleCBub2RlSW5kZXgpCisgICAg
Ym9vbCBpc0pTQ29uc3RhbnQoTm9kZSogbm9kZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBhdChu
b2RlSW5kZXgpLmhhc0NvbnN0YW50KCk7CisgICAgICAgIHJldHVybiBub2RlLT5oYXNDb25zdGFu
dCgpOwogICAgIH0KLSAgICBib29sIGlzSW50MzJDb25zdGFudChOb2RlSW5kZXggbm9kZUluZGV4
KQorICAgIGJvb2wgaXNJbnQzMkNvbnN0YW50KE5vZGUqIG5vZGUpCiAgICAgewotICAgICAgICBy
ZXR1cm4gYXQobm9kZUluZGV4KS5pc0ludDMyQ29uc3RhbnQobV9jb2RlQmxvY2spOworICAgICAg
ICByZXR1cm4gbm9kZS0+aXNJbnQzMkNvbnN0YW50KG1fY29kZUJsb2NrKTsKICAgICB9Ci0gICAg
Ym9vbCBpc0RvdWJsZUNvbnN0YW50KE5vZGVJbmRleCBub2RlSW5kZXgpCisgICAgYm9vbCBpc0Rv
dWJsZUNvbnN0YW50KE5vZGUqIG5vZGUpCiAgICAgewotICAgICAgICByZXR1cm4gYXQobm9kZUlu
ZGV4KS5pc0RvdWJsZUNvbnN0YW50KG1fY29kZUJsb2NrKTsKKyAgICAgICAgcmV0dXJuIG5vZGUt
PmlzRG91YmxlQ29uc3RhbnQobV9jb2RlQmxvY2spOwogICAgIH0KLSAgICBib29sIGlzTnVtYmVy
Q29uc3RhbnQoTm9kZUluZGV4IG5vZGVJbmRleCkKKyAgICBib29sIGlzTnVtYmVyQ29uc3RhbnQo
Tm9kZSogbm9kZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBhdChub2RlSW5kZXgpLmlzTnVtYmVy
Q29uc3RhbnQobV9jb2RlQmxvY2spOworICAgICAgICByZXR1cm4gbm9kZS0+aXNOdW1iZXJDb25z
dGFudChtX2NvZGVCbG9jayk7CiAgICAgfQotICAgIGJvb2wgaXNCb29sZWFuQ29uc3RhbnQoTm9k
ZUluZGV4IG5vZGVJbmRleCkKKyAgICBib29sIGlzQm9vbGVhbkNvbnN0YW50KE5vZGUqIG5vZGUp
CiAgICAgewotICAgICAgICByZXR1cm4gYXQobm9kZUluZGV4KS5pc0Jvb2xlYW5Db25zdGFudCht
X2NvZGVCbG9jayk7CisgICAgICAgIHJldHVybiBub2RlLT5pc0Jvb2xlYW5Db25zdGFudChtX2Nv
ZGVCbG9jayk7CiAgICAgfQotICAgIGJvb2wgaXNDZWxsQ29uc3RhbnQoTm9kZUluZGV4IG5vZGVJ
bmRleCkKKyAgICBib29sIGlzQ2VsbENvbnN0YW50KE5vZGUqIG5vZGUpCiAgICAgewotICAgICAg
ICBpZiAoIWlzSlNDb25zdGFudChub2RlSW5kZXgpKQorICAgICAgICBpZiAoIWlzSlNDb25zdGFu
dChub2RlKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgSlNWYWx1ZSB2YWx1
ZSA9IHZhbHVlT2ZKU0NvbnN0YW50KG5vZGVJbmRleCk7CisgICAgICAgIEpTVmFsdWUgdmFsdWUg
PSB2YWx1ZU9mSlNDb25zdGFudChub2RlKTsKICAgICAgICAgcmV0dXJuIHZhbHVlLmlzQ2VsbCgp
ICYmICEhdmFsdWU7CiAgICAgfQotICAgIGJvb2wgaXNGdW5jdGlvbkNvbnN0YW50KE5vZGVJbmRl
eCBub2RlSW5kZXgpCisgICAgYm9vbCBpc0Z1bmN0aW9uQ29uc3RhbnQoTm9kZSogbm9kZSkKICAg
ICB7Ci0gICAgICAgIGlmICghaXNKU0NvbnN0YW50KG5vZGVJbmRleCkpCisgICAgICAgIGlmICgh
aXNKU0NvbnN0YW50KG5vZGUpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBp
ZiAoIWdldEpTRnVuY3Rpb24odmFsdWVPZkpTQ29uc3RhbnQobm9kZUluZGV4KSkpCisgICAgICAg
IGlmICghZ2V0SlNGdW5jdGlvbih2YWx1ZU9mSlNDb25zdGFudChub2RlKSkpCiAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KLSAgICBib29sIGlz
SW50ZXJuYWxGdW5jdGlvbkNvbnN0YW50KE5vZGVJbmRleCBub2RlSW5kZXgpCisgICAgYm9vbCBp
c0ludGVybmFsRnVuY3Rpb25Db25zdGFudChOb2RlKiBub2RlKQogICAgIHsKLSAgICAgICAgaWYg
KCFpc0pTQ29uc3RhbnQobm9kZUluZGV4KSkKKyAgICAgICAgaWYgKCFpc0pTQ29uc3RhbnQobm9k
ZSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIEpTVmFsdWUgdmFsdWUgPSB2
YWx1ZU9mSlNDb25zdGFudChub2RlSW5kZXgpOworICAgICAgICBKU1ZhbHVlIHZhbHVlID0gdmFs
dWVPZkpTQ29uc3RhbnQobm9kZSk7CiAgICAgICAgIGlmICghdmFsdWUuaXNDZWxsKCkgfHwgIXZh
bHVlKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBKU0NlbGwqIGNlbGwgPSB2
YWx1ZS5hc0NlbGwoKTsKQEAgLTMyNywyNSArMzA4LDI1IEBAIHB1YmxpYzoKICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgfQogICAgIC8vIEhlbHBlciBtZXRob2RzIGdldCBjb25zdGFudCB2YWx1
ZXMgZnJvbSBub2Rlcy4KLSAgICBKU1ZhbHVlIHZhbHVlT2ZKU0NvbnN0YW50KE5vZGVJbmRleCBu
b2RlSW5kZXgpCisgICAgSlNWYWx1ZSB2YWx1ZU9mSlNDb25zdGFudChOb2RlKiBub2RlKQogICAg
IHsKLSAgICAgICAgcmV0dXJuIGF0KG5vZGVJbmRleCkudmFsdWVPZkpTQ29uc3RhbnQobV9jb2Rl
QmxvY2spOworICAgICAgICByZXR1cm4gbm9kZS0+dmFsdWVPZkpTQ29uc3RhbnQobV9jb2RlQmxv
Y2spOwogICAgIH0KLSAgICBpbnQzMl90IHZhbHVlT2ZJbnQzMkNvbnN0YW50KE5vZGVJbmRleCBu
b2RlSW5kZXgpCisgICAgaW50MzJfdCB2YWx1ZU9mSW50MzJDb25zdGFudChOb2RlKiBub2RlKQog
ICAgIHsKLSAgICAgICAgcmV0dXJuIHZhbHVlT2ZKU0NvbnN0YW50KG5vZGVJbmRleCkuYXNJbnQz
MigpOworICAgICAgICByZXR1cm4gdmFsdWVPZkpTQ29uc3RhbnQobm9kZSkuYXNJbnQzMigpOwog
ICAgIH0KLSAgICBkb3VibGUgdmFsdWVPZk51bWJlckNvbnN0YW50KE5vZGVJbmRleCBub2RlSW5k
ZXgpCisgICAgZG91YmxlIHZhbHVlT2ZOdW1iZXJDb25zdGFudChOb2RlKiBub2RlKQogICAgIHsK
LSAgICAgICAgcmV0dXJuIHZhbHVlT2ZKU0NvbnN0YW50KG5vZGVJbmRleCkuYXNOdW1iZXIoKTsK
KyAgICAgICAgcmV0dXJuIHZhbHVlT2ZKU0NvbnN0YW50KG5vZGUpLmFzTnVtYmVyKCk7CiAgICAg
fQotICAgIGJvb2wgdmFsdWVPZkJvb2xlYW5Db25zdGFudChOb2RlSW5kZXggbm9kZUluZGV4KQor
ICAgIGJvb2wgdmFsdWVPZkJvb2xlYW5Db25zdGFudChOb2RlKiBub2RlKQogICAgIHsKLSAgICAg
ICAgcmV0dXJuIHZhbHVlT2ZKU0NvbnN0YW50KG5vZGVJbmRleCkuYXNCb29sZWFuKCk7CisgICAg
ICAgIHJldHVybiB2YWx1ZU9mSlNDb25zdGFudChub2RlKS5hc0Jvb2xlYW4oKTsKICAgICB9Ci0g
ICAgSlNGdW5jdGlvbiogdmFsdWVPZkZ1bmN0aW9uQ29uc3RhbnQoTm9kZUluZGV4IG5vZGVJbmRl
eCkKKyAgICBKU0Z1bmN0aW9uKiB2YWx1ZU9mRnVuY3Rpb25Db25zdGFudChOb2RlKiBub2RlKQog
ICAgIHsKLSAgICAgICAgSlNDZWxsKiBmdW5jdGlvbiA9IGdldEpTRnVuY3Rpb24odmFsdWVPZkpT
Q29uc3RhbnQobm9kZUluZGV4KSk7CisgICAgICAgIEpTQ2VsbCogZnVuY3Rpb24gPSBnZXRKU0Z1
bmN0aW9uKHZhbHVlT2ZKU0NvbnN0YW50KG5vZGUpKTsKICAgICAgICAgQVNTRVJUKGZ1bmN0aW9u
KTsKICAgICAgICAgcmV0dXJuIGpzQ2FzdDxKU0Z1bmN0aW9uKj4oZnVuY3Rpb24pOwogICAgIH0K
QEAgLTQyMCw0NSArNDAxLDQzIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1fY29kZUJsb2Nr
LT51bmNoZWNrZWRBY3RpdmF0aW9uUmVnaXN0ZXIoKTsKICAgICB9CiAgICAgCi0gICAgVmFsdWVQ
cm9maWxlKiB2YWx1ZVByb2ZpbGVGb3IoTm9kZUluZGV4IG5vZGVJbmRleCkKKyAgICBWYWx1ZVBy
b2ZpbGUqIHZhbHVlUHJvZmlsZUZvcihOb2RlKiBub2RlKQogICAgIHsKLSAgICAgICAgaWYgKG5v
ZGVJbmRleCA9PSBOb05vZGUpCisgICAgICAgIGlmICghbm9kZSkKICAgICAgICAgICAgIHJldHVy
biAwOwogICAgICAgICAKLSAgICAgICAgTm9kZSYgbm9kZSA9IGF0KG5vZGVJbmRleCk7Ci0gICAg
ICAgIENvZGVCbG9jayogcHJvZmlsZWRCbG9jayA9IGJhc2VsaW5lQ29kZUJsb2NrRm9yKG5vZGUu
Y29kZU9yaWdpbik7CisgICAgICAgIENvZGVCbG9jayogcHJvZmlsZWRCbG9jayA9IGJhc2VsaW5l
Q29kZUJsb2NrRm9yKG5vZGUtPmNvZGVPcmlnaW4pOwogICAgICAgICAKLSAgICAgICAgaWYgKG5v
ZGUuaGFzTG9jYWwoKSkgewotICAgICAgICAgICAgaWYgKCFvcGVyYW5kSXNBcmd1bWVudChub2Rl
LmxvY2FsKCkpKQorICAgICAgICBpZiAobm9kZS0+aGFzTG9jYWwoKSkgeworICAgICAgICAgICAg
aWYgKCFvcGVyYW5kSXNBcmd1bWVudChub2RlLT5sb2NhbCgpKSkKICAgICAgICAgICAgICAgICBy
ZXR1cm4gMDsKLSAgICAgICAgICAgIGludCBhcmd1bWVudCA9IG9wZXJhbmRUb0FyZ3VtZW50KG5v
ZGUubG9jYWwoKSk7Ci0gICAgICAgICAgICBpZiAobm9kZS52YXJpYWJsZUFjY2Vzc0RhdGEoKSAh
PSBhdChtX2FyZ3VtZW50c1thcmd1bWVudF0pLnZhcmlhYmxlQWNjZXNzRGF0YSgpKQorICAgICAg
ICAgICAgaW50IGFyZ3VtZW50ID0gb3BlcmFuZFRvQXJndW1lbnQobm9kZS0+bG9jYWwoKSk7Cisg
ICAgICAgICAgICBpZiAobm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCkgIT0gbV9hcmd1bWVudHNb
YXJndW1lbnRdLT52YXJpYWJsZUFjY2Vzc0RhdGEoKSkKICAgICAgICAgICAgICAgICByZXR1cm4g
MDsKICAgICAgICAgICAgIHJldHVybiBwcm9maWxlZEJsb2NrLT52YWx1ZVByb2ZpbGVGb3JBcmd1
bWVudChhcmd1bWVudCk7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIGlmIChub2RlLmhh
c0hlYXBQcmVkaWN0aW9uKCkpCi0gICAgICAgICAgICByZXR1cm4gcHJvZmlsZWRCbG9jay0+dmFs
dWVQcm9maWxlRm9yQnl0ZWNvZGVPZmZzZXQobm9kZS5jb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXhG
b3JWYWx1ZVByb2ZpbGUoKSk7CisgICAgICAgIGlmIChub2RlLT5oYXNIZWFwUHJlZGljdGlvbigp
KQorICAgICAgICAgICAgcmV0dXJuIHByb2ZpbGVkQmxvY2stPnZhbHVlUHJvZmlsZUZvckJ5dGVj
b2RlT2Zmc2V0KG5vZGUtPmNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleEZvclZhbHVlUHJvZmlsZSgp
KTsKICAgICAgICAgCiAgICAgICAgIHJldHVybiAwOwogICAgIH0KICAgICAKLSAgICBNZXRob2RP
ZkdldHRpbmdBVmFsdWVQcm9maWxlIG1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGVGb3IoTm9k
ZUluZGV4IG5vZGVJbmRleCkKKyAgICBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlIG1ldGhv
ZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGVGb3IoTm9kZSogbm9kZSkKICAgICB7Ci0gICAgICAgIGlm
IChub2RlSW5kZXggPT0gTm9Ob2RlKQorICAgICAgICBpZiAoIW5vZGUpCiAgICAgICAgICAgICBy
ZXR1cm4gTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZSgpOwogICAgICAgICAKLSAgICAgICAg
Tm9kZSYgbm9kZSA9IGF0KG5vZGVJbmRleCk7Ci0gICAgICAgIENvZGVCbG9jayogcHJvZmlsZWRC
bG9jayA9IGJhc2VsaW5lQ29kZUJsb2NrRm9yKG5vZGUuY29kZU9yaWdpbik7CisgICAgICAgIENv
ZGVCbG9jayogcHJvZmlsZWRCbG9jayA9IGJhc2VsaW5lQ29kZUJsb2NrRm9yKG5vZGUtPmNvZGVP
cmlnaW4pOwogICAgICAgICAKLSAgICAgICAgaWYgKG5vZGUub3AoKSA9PSBHZXRMb2NhbCkgewor
ICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBHZXRMb2NhbCkgewogICAgICAgICAgICAgcmV0dXJu
IE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGU6OmZyb21MYXp5T3BlcmFuZCgKICAgICAgICAg
ICAgICAgICBwcm9maWxlZEJsb2NrLAogICAgICAgICAgICAgICAgIExhenlPcGVyYW5kVmFsdWVQ
cm9maWxlS2V5KAotICAgICAgICAgICAgICAgICAgICBub2RlLmNvZGVPcmlnaW4uYnl0ZWNvZGVJ
bmRleCwgbm9kZS5sb2NhbCgpKSk7CisgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNvZGVPcmln
aW4uYnl0ZWNvZGVJbmRleCwgbm9kZS0+bG9jYWwoKSkpOwogICAgICAgICB9CiAgICAgICAgIAot
ICAgICAgICByZXR1cm4gTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZSh2YWx1ZVByb2ZpbGVG
b3Iobm9kZUluZGV4KSk7CisgICAgICAgIHJldHVybiBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9m
aWxlKHZhbHVlUHJvZmlsZUZvcihub2RlKSk7CiAgICAgfQogICAgIAogICAgIGJvb2wgbmVlZHNB
Y3RpdmF0aW9uKCkgY29uc3QKQEAgLTQ4MiwyMSArNDYxLDIxIEBAIHB1YmxpYzoKICAgICAKICAg
ICB1bnNpZ25lZCBudW1TdWNjZXNzb3JzKEJhc2ljQmxvY2sqIGJsb2NrKQogICAgIHsKLSAgICAg
ICAgcmV0dXJuIGF0KGJsb2NrLT5sYXN0KCkpLm51bVN1Y2Nlc3NvcnMoKTsKKyAgICAgICAgcmV0
dXJuIGJsb2NrLT5sYXN0KCktPm51bVN1Y2Nlc3NvcnMoKTsKICAgICB9CiAgICAgQmxvY2tJbmRl
eCBzdWNjZXNzb3IoQmFzaWNCbG9jayogYmxvY2ssIHVuc2lnbmVkIGluZGV4KQogICAgIHsKLSAg
ICAgICAgcmV0dXJuIGF0KGJsb2NrLT5sYXN0KCkpLnN1Y2Nlc3NvcihpbmRleCk7CisgICAgICAg
IHJldHVybiBibG9jay0+bGFzdCgpLT5zdWNjZXNzb3IoaW5kZXgpOwogICAgIH0KICAgICBCbG9j
a0luZGV4IHN1Y2Nlc3NvckZvckNvbmRpdGlvbihCYXNpY0Jsb2NrKiBibG9jaywgYm9vbCBjb25k
aXRpb24pCiAgICAgewotICAgICAgICByZXR1cm4gYXQoYmxvY2stPmxhc3QoKSkuc3VjY2Vzc29y
Rm9yQ29uZGl0aW9uKGNvbmRpdGlvbik7CisgICAgICAgIHJldHVybiBibG9jay0+bGFzdCgpLT5z
dWNjZXNzb3JGb3JDb25kaXRpb24oY29uZGl0aW9uKTsKICAgICB9CiAgICAgCi0gICAgYm9vbCBp
c1ByZWRpY3RlZE51bWVyaWNhbChOb2RlJiBub2RlKQorICAgIGJvb2wgaXNQcmVkaWN0ZWROdW1l
cmljYWwoTm9kZSogbm9kZSkKICAgICB7Ci0gICAgICAgIFNwZWN1bGF0ZWRUeXBlIGxlZnQgPSBh
dChub2RlLmNoaWxkMSgpKS5wcmVkaWN0aW9uKCk7Ci0gICAgICAgIFNwZWN1bGF0ZWRUeXBlIHJp
Z2h0ID0gYXQobm9kZS5jaGlsZDIoKSkucHJlZGljdGlvbigpOworICAgICAgICBTcGVjdWxhdGVk
VHlwZSBsZWZ0ID0gbm9kZS0+Y2hpbGQxKCktPnByZWRpY3Rpb24oKTsKKyAgICAgICAgU3BlY3Vs
YXRlZFR5cGUgcmlnaHQgPSBub2RlLT5jaGlsZDIoKS0+cHJlZGljdGlvbigpOwogICAgICAgICBy
ZXR1cm4gaXNOdW1iZXJTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc051bWJlclNwZWN1bGF0aW9uKHJp
Z2h0KTsKICAgICB9CiAgICAgCkBAIC01MDYsMjMgKzQ4NSwyMyBAQCBwdWJsaWM6CiAgICAgLy8g
LSBQdXRCeVZhbCBkZWZpbml0ZWx5IGNoYW5nZXMgdGhlIGFycmF5IGl0IHN0b3JlcyB0bywgYW5k
IG1heSBldmVuIGNoYW5nZSBpdHMgbGVuZ3RoLgogICAgIC8vIC0gUHV0QnlPZmZzZXQgZGVmaW5p
dGVseSBjaGFuZ2VzIHRoZSBvYmplY3QgaXQgc3RvcmVzIHRvLgogICAgIC8vIC0gYW5kIHNvIG9u
LgotICAgIGJvb2wgYnlWYWxJc1B1cmUoTm9kZSYgbm9kZSkKKyAgICBib29sIGJ5VmFsSXNQdXJl
KE5vZGUqIG5vZGUpCiAgICAgewotICAgICAgICBzd2l0Y2ggKG5vZGUuYXJyYXlNb2RlKCkudHlw
ZSgpKSB7CisgICAgICAgIHN3aXRjaCAobm9kZS0+YXJyYXlNb2RlKCkudHlwZSgpKSB7CiAgICAg
ICAgIGNhc2UgQXJyYXk6OkdlbmVyaWM6CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
ICAgIGNhc2UgQXJyYXk6OkludDMyOgogICAgICAgICBjYXNlIEFycmF5OjpEb3VibGU6CiAgICAg
ICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3VvdXM6CiAgICAgICAgIGNhc2UgQXJyYXk6OkFycmF5U3Rv
cmFnZToKLSAgICAgICAgICAgIHJldHVybiAhbm9kZS5hcnJheU1vZGUoKS5pc091dE9mQm91bmRz
KCk7CisgICAgICAgICAgICByZXR1cm4gIW5vZGUtPmFycmF5TW9kZSgpLmlzT3V0T2ZCb3VuZHMo
KTsKICAgICAgICAgY2FzZSBBcnJheTo6U2xvd1B1dEFycmF5U3RvcmFnZToKLSAgICAgICAgICAg
IHJldHVybiAhbm9kZS5hcnJheU1vZGUoKS5tYXlTdG9yZVRvSG9sZSgpOworICAgICAgICAgICAg
cmV0dXJuICFub2RlLT5hcnJheU1vZGUoKS5tYXlTdG9yZVRvSG9sZSgpOwogICAgICAgICBjYXNl
IEFycmF5OjpTdHJpbmc6Ci0gICAgICAgICAgICByZXR1cm4gbm9kZS5vcCgpID09IEdldEJ5VmFs
OworICAgICAgICAgICAgcmV0dXJuIG5vZGUtPm9wKCkgPT0gR2V0QnlWYWw7CiAjaWYgVVNFKEpT
VkFMVUUzMl82NCkKICAgICAgICAgY2FzZSBBcnJheTo6QXJndW1lbnRzOgotICAgICAgICAgICAg
aWYgKG5vZGUub3AoKSA9PSBHZXRCeVZhbCkKKyAgICAgICAgICAgIGlmIChub2RlLT5vcCgpID09
IEdldEJ5VmFsKQogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwogI2VuZGlmIC8vIFVTRShKU1ZBTFVFMzJfNjQpCkBAIC01MzEsMTMgKzUxMCwx
MyBAQCBwdWJsaWM6CiAgICAgICAgIH0KICAgICB9CiAgICAgCi0gICAgYm9vbCBjbG9iYmVyc1dv
cmxkKE5vZGUmIG5vZGUpCisgICAgYm9vbCBjbG9iYmVyc1dvcmxkKE5vZGUqIG5vZGUpCiAgICAg
ewotICAgICAgICBpZiAobm9kZS5mbGFncygpICYgTm9kZUNsb2JiZXJzV29ybGQpCisgICAgICAg
IGlmIChub2RlLT5mbGFncygpICYgTm9kZUNsb2JiZXJzV29ybGQpCiAgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICAgICAgaWYgKCEobm9kZS5mbGFncygpICYgTm9kZU1pZ2h0Q2xvYmJlcikp
CisgICAgICAgIGlmICghKG5vZGUtPmZsYWdzKCkgJiBOb2RlTWlnaHRDbG9iYmVyKSkKICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgc3dpdGNoIChub2RlLm9wKCkpIHsKKyAgICAg
ICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CiAgICAgICAgIGNhc2UgVmFsdWVBZGQ6CiAgICAgICAg
IGNhc2UgQ29tcGFyZUxlc3M6CiAgICAgICAgIGNhc2UgQ29tcGFyZUxlc3NFcToKQEAgLTU1NSw5
ICs1MzQsOSBAQCBwdWJsaWM6CiAgICAgICAgIH0KICAgICB9CiAgICAgCi0gICAgYm9vbCBjbG9i
YmVyc1dvcmxkKE5vZGVJbmRleCBub2RlSW5kZXgpCisgICAgYm9vbCBjbG9iYmVyc1dvcmxkKE5v
ZGUqIG5vZGUpCiAgICAgewotICAgICAgICByZXR1cm4gY2xvYmJlcnNXb3JsZChhdChub2RlSW5k
ZXgpKTsKKyAgICAgICAgcmV0dXJuIGNsb2JiZXJzV29ybGQobm9kZSk7CiAgICAgfQogICAgIAog
ICAgIHZvaWQgZGV0ZXJtaW5lUmVhY2hhYmlsaXR5KCk7CkBAIC01NjUsNTIgKzU0NCw1MiBAQCBw
dWJsaWM6CiAgICAgCiAgICAgdm9pZCByZXNldEV4aXRTdGF0ZXMoKTsKICAgICAKLSAgICB1bnNp
Z25lZCB2YXJBcmdOdW1DaGlsZHJlbihOb2RlJiBub2RlKQorICAgIHVuc2lnbmVkIHZhckFyZ051
bUNoaWxkcmVuKE5vZGUqIG5vZGUpCiAgICAgewotICAgICAgICBBU1NFUlQobm9kZS5mbGFncygp
ICYgTm9kZUhhc1ZhckFyZ3MpOwotICAgICAgICByZXR1cm4gbm9kZS5udW1DaGlsZHJlbigpOwor
ICAgICAgICBBU1NFUlQobm9kZS0+ZmxhZ3MoKSAmIE5vZGVIYXNWYXJBcmdzKTsKKyAgICAgICAg
cmV0dXJuIG5vZGUtPm51bUNoaWxkcmVuKCk7CiAgICAgfQogICAgIAotICAgIHVuc2lnbmVkIG51
bUNoaWxkcmVuKE5vZGUmIG5vZGUpCisgICAgdW5zaWduZWQgbnVtQ2hpbGRyZW4oTm9kZSogbm9k
ZSkKICAgICB7Ci0gICAgICAgIGlmIChub2RlLmZsYWdzKCkgJiBOb2RlSGFzVmFyQXJncykKKyAg
ICAgICAgaWYgKG5vZGUtPmZsYWdzKCkgJiBOb2RlSGFzVmFyQXJncykKICAgICAgICAgICAgIHJl
dHVybiB2YXJBcmdOdW1DaGlsZHJlbihub2RlKTsKICAgICAgICAgcmV0dXJuIEFkamFjZW5jeUxp
c3Q6OlNpemU7CiAgICAgfQogICAgIAotICAgIEVkZ2UmIHZhckFyZ0NoaWxkKE5vZGUmIG5vZGUs
IHVuc2lnbmVkIGluZGV4KQorICAgIEVkZ2UmIHZhckFyZ0NoaWxkKE5vZGUqIG5vZGUsIHVuc2ln
bmVkIGluZGV4KQogICAgIHsKLSAgICAgICAgQVNTRVJUKG5vZGUuZmxhZ3MoKSAmIE5vZGVIYXNW
YXJBcmdzKTsKLSAgICAgICAgcmV0dXJuIG1fdmFyQXJnQ2hpbGRyZW5bbm9kZS5maXJzdENoaWxk
KCkgKyBpbmRleF07CisgICAgICAgIEFTU0VSVChub2RlLT5mbGFncygpICYgTm9kZUhhc1ZhckFy
Z3MpOworICAgICAgICByZXR1cm4gbV92YXJBcmdDaGlsZHJlbltub2RlLT5maXJzdENoaWxkKCkg
KyBpbmRleF07CiAgICAgfQogICAgIAotICAgIEVkZ2UmIGNoaWxkKE5vZGUmIG5vZGUsIHVuc2ln
bmVkIGluZGV4KQorICAgIEVkZ2UmIGNoaWxkKE5vZGUqIG5vZGUsIHVuc2lnbmVkIGluZGV4KQog
ICAgIHsKLSAgICAgICAgaWYgKG5vZGUuZmxhZ3MoKSAmIE5vZGVIYXNWYXJBcmdzKQorICAgICAg
ICBpZiAobm9kZS0+ZmxhZ3MoKSAmIE5vZGVIYXNWYXJBcmdzKQogICAgICAgICAgICAgcmV0dXJu
IHZhckFyZ0NoaWxkKG5vZGUsIGluZGV4KTsKLSAgICAgICAgcmV0dXJuIG5vZGUuY2hpbGRyZW4u
Y2hpbGQoaW5kZXgpOworICAgICAgICByZXR1cm4gbm9kZS0+Y2hpbGRyZW4uY2hpbGQoaW5kZXgp
OwogICAgIH0KICAgICAKICAgICB2b2lkIHZvdGUoRWRnZSBlZGdlLCB1bnNpZ25lZCBiYWxsb3Qp
CiAgICAgewotICAgICAgICBzd2l0Y2ggKGF0KGVkZ2UpLm9wKCkpIHsKKyAgICAgICAgc3dpdGNo
IChlZGdlLT5vcCgpKSB7CiAgICAgICAgIGNhc2UgVmFsdWVUb0ludDMyOgogICAgICAgICBjYXNl
IFVJbnQzMlRvTnVtYmVyOgotICAgICAgICAgICAgZWRnZSA9IGF0KGVkZ2UpLmNoaWxkMSgpOwor
ICAgICAgICAgICAgZWRnZSA9IGVkZ2UtPmNoaWxkMSgpOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAK
LSAgICAgICAgaWYgKGF0KGVkZ2UpLm9wKCkgPT0gR2V0TG9jYWwpCi0gICAgICAgICAgICBhdChl
ZGdlKS52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+dm90ZShiYWxsb3QpOworICAgICAgICBpZiAoZWRn
ZS0+b3AoKSA9PSBHZXRMb2NhbCkKKyAgICAgICAgICAgIGVkZ2UtPnZhcmlhYmxlQWNjZXNzRGF0
YSgpLT52b3RlKGJhbGxvdCk7CiAgICAgfQogICAgIAotICAgIHZvaWQgdm90ZShOb2RlJiBub2Rl
LCB1bnNpZ25lZCBiYWxsb3QpCisgICAgdm9pZCB2b3RlKE5vZGUqIG5vZGUsIHVuc2lnbmVkIGJh
bGxvdCkKICAgICB7Ci0gICAgICAgIGlmIChub2RlLmZsYWdzKCkgJiBOb2RlSGFzVmFyQXJncykg
ewotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBjaGlsZElkeCA9IG5vZGUuZmlyc3RDaGlsZCgp
OwotICAgICAgICAgICAgICAgICBjaGlsZElkeCA8IG5vZGUuZmlyc3RDaGlsZCgpICsgbm9kZS5u
dW1DaGlsZHJlbigpOworICAgICAgICBpZiAobm9kZS0+ZmxhZ3MoKSAmIE5vZGVIYXNWYXJBcmdz
KSB7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGNoaWxkSWR4ID0gbm9kZS0+Zmlyc3RDaGls
ZCgpOworICAgICAgICAgICAgICAgICBjaGlsZElkeCA8IG5vZGUtPmZpcnN0Q2hpbGQoKSArIG5v
ZGUtPm51bUNoaWxkcmVuKCk7CiAgICAgICAgICAgICAgICAgIGNoaWxkSWR4KyspIHsKICAgICAg
ICAgICAgICAgICBpZiAoISFtX3ZhckFyZ0NoaWxkcmVuW2NoaWxkSWR4XSkKICAgICAgICAgICAg
ICAgICAgICAgdm90ZShtX3ZhckFyZ0NoaWxkcmVuW2NoaWxkSWR4XSwgYmFsbG90KTsKQEAgLTYx
OCwzOSArNTk3LDM4IEBAIHB1YmxpYzoKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQog
ICAgICAgICAKLSAgICAgICAgaWYgKCFub2RlLmNoaWxkMSgpKQorICAgICAgICBpZiAoIW5vZGUt
PmNoaWxkMSgpKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB2b3RlKG5vZGUuY2hpbGQx
KCksIGJhbGxvdCk7Ci0gICAgICAgIGlmICghbm9kZS5jaGlsZDIoKSkKKyAgICAgICAgdm90ZShu
b2RlLT5jaGlsZDEoKSwgYmFsbG90KTsKKyAgICAgICAgaWYgKCFub2RlLT5jaGlsZDIoKSkKICAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgdm90ZShub2RlLmNoaWxkMigpLCBiYWxsb3QpOwot
ICAgICAgICBpZiAoIW5vZGUuY2hpbGQzKCkpCisgICAgICAgIHZvdGUobm9kZS0+Y2hpbGQyKCks
IGJhbGxvdCk7CisgICAgICAgIGlmICghbm9kZS0+Y2hpbGQzKCkpCiAgICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIHZvdGUobm9kZS5jaGlsZDMoKSwgYmFsbG90KTsKKyAgICAgICAgdm90ZShu
b2RlLT5jaGlsZDMoKSwgYmFsbG90KTsKICAgICB9CiAgICAgCi0gICAgdGVtcGxhdGU8dHlwZW5h
bWUgVD4gLy8gVCA9IE5vZGVJbmRleCBvciBFZGdlCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4g
Ly8gVCA9IE5vZGUqIG9yIEVkZ2UKICAgICB2b2lkIHN1YnN0aXR1dGUoQmFzaWNCbG9jayYgYmxv
Y2ssIHVuc2lnbmVkIHN0YXJ0SW5kZXhJbkJsb2NrLCBUIG9sZFRoaW5nLCBUIG5ld1RoaW5nKQog
ICAgIHsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpbmRleEluQmxvY2sgPSBzdGFydEluZGV4SW5C
bG9jazsgaW5kZXhJbkJsb2NrIDwgYmxvY2suc2l6ZSgpOyArK2luZGV4SW5CbG9jaykgewotICAg
ICAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRleCA9IGJsb2NrW2luZGV4SW5CbG9ja107Ci0gICAg
ICAgICAgICBOb2RlJiBub2RlID0gYXQobm9kZUluZGV4KTsKLSAgICAgICAgICAgIGlmIChub2Rl
LmZsYWdzKCkgJiBOb2RlSGFzVmFyQXJncykgewotICAgICAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgY2hpbGRJZHggPSBub2RlLmZpcnN0Q2hpbGQoKTsgY2hpbGRJZHggPCBub2RlLmZpcnN0Q2hp
bGQoKSArIG5vZGUubnVtQ2hpbGRyZW4oKTsgKytjaGlsZElkeCkgeworICAgICAgICAgICAgTm9k
ZSogbm9kZSA9IGJsb2NrW2luZGV4SW5CbG9ja107CisgICAgICAgICAgICBpZiAobm9kZS0+Zmxh
Z3MoKSAmIE5vZGVIYXNWYXJBcmdzKSB7CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBj
aGlsZElkeCA9IG5vZGUtPmZpcnN0Q2hpbGQoKTsgY2hpbGRJZHggPCBub2RlLT5maXJzdENoaWxk
KCkgKyBub2RlLT5udW1DaGlsZHJlbigpOyArK2NoaWxkSWR4KSB7CiAgICAgICAgICAgICAgICAg
ICAgIGlmICghIW1fdmFyQXJnQ2hpbGRyZW5bY2hpbGRJZHhdKQotICAgICAgICAgICAgICAgICAg
ICAgICAgY29tcGFyZUFuZFN3YXAobV92YXJBcmdDaGlsZHJlbltjaGlsZElkeF0sIG9sZFRoaW5n
LCBuZXdUaGluZywgbm9kZS5zaG91bGRHZW5lcmF0ZSgpKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbXBhcmVBbmRTd2FwKG1fdmFyQXJnQ2hpbGRyZW5bY2hpbGRJZHhdLCBvbGRUaGluZywg
bmV3VGhpbmcsIG5vZGUtPnNob3VsZEdlbmVyYXRlKCkpOwogICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICgh
bm9kZS5jaGlsZDEoKSkKKyAgICAgICAgICAgIGlmICghbm9kZS0+Y2hpbGQxKCkpCiAgICAgICAg
ICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBjb21wYXJlQW5kU3dhcChub2RlLmNoaWxk
cmVuLmNoaWxkMSgpLCBvbGRUaGluZywgbmV3VGhpbmcsIG5vZGUuc2hvdWxkR2VuZXJhdGUoKSk7
Ci0gICAgICAgICAgICBpZiAoIW5vZGUuY2hpbGQyKCkpCisgICAgICAgICAgICBjb21wYXJlQW5k
U3dhcChub2RlLT5jaGlsZHJlbi5jaGlsZDEoKSwgb2xkVGhpbmcsIG5ld1RoaW5nLCBub2RlLT5z
aG91bGRHZW5lcmF0ZSgpKTsKKyAgICAgICAgICAgIGlmICghbm9kZS0+Y2hpbGQyKCkpCiAgICAg
ICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBjb21wYXJlQW5kU3dhcChub2RlLmNo
aWxkcmVuLmNoaWxkMigpLCBvbGRUaGluZywgbmV3VGhpbmcsIG5vZGUuc2hvdWxkR2VuZXJhdGUo
KSk7Ci0gICAgICAgICAgICBpZiAoIW5vZGUuY2hpbGQzKCkpCisgICAgICAgICAgICBjb21wYXJl
QW5kU3dhcChub2RlLT5jaGlsZHJlbi5jaGlsZDIoKSwgb2xkVGhpbmcsIG5ld1RoaW5nLCBub2Rl
LT5zaG91bGRHZW5lcmF0ZSgpKTsKKyAgICAgICAgICAgIGlmICghbm9kZS0+Y2hpbGQzKCkpCiAg
ICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBjb21wYXJlQW5kU3dhcChub2Rl
LmNoaWxkcmVuLmNoaWxkMygpLCBvbGRUaGluZywgbmV3VGhpbmcsIG5vZGUuc2hvdWxkR2VuZXJh
dGUoKSk7CisgICAgICAgICAgICBjb21wYXJlQW5kU3dhcChub2RlLT5jaGlsZHJlbi5jaGlsZDMo
KSwgb2xkVGhpbmcsIG5ld1RoaW5nLCBub2RlLT5zaG91bGRHZW5lcmF0ZSgpKTsKICAgICAgICAg
fQogICAgIH0KICAgICAKQEAgLTY1OCwyOSArNjM2LDI4IEBAIHB1YmxpYzoKICAgICAvLyBhbnkg
R2V0TG9jYWxzIGluIHRoZSBiYXNpYyBibG9jay4KICAgICAvLyBGSVhNRTogaXQgbWF5IGJlIGFw
cHJvcHJpYXRlLCBpbiB0aGUgZnV0dXJlLCB0byBnZW5lcmFsaXplIHRoaXMgdG8gaGFuZGxlIEdl
dExvY2FscwogICAgIC8vIGludHJvZHVjZWQgYW55d2hlcmUgaW4gdGhlIGJhc2ljIGJsb2NrLgot
ICAgIHZvaWQgc3Vic3RpdHV0ZUdldExvY2FsKEJhc2ljQmxvY2smIGJsb2NrLCB1bnNpZ25lZCBz
dGFydEluZGV4SW5CbG9jaywgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEs
IE5vZGVJbmRleCBuZXdHZXRMb2NhbCkKKyAgICB2b2lkIHN1YnN0aXR1dGVHZXRMb2NhbChCYXNp
Y0Jsb2NrJiBibG9jaywgdW5zaWduZWQgc3RhcnRJbmRleEluQmxvY2ssIFZhcmlhYmxlQWNjZXNz
RGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhLCBOb2RlKiBuZXdHZXRMb2NhbCkKICAgICB7CiAgICAg
ICAgIGlmICh2YXJpYWJsZUFjY2Vzc0RhdGEtPmlzQ2FwdHVyZWQoKSkgewogICAgICAgICAgICAg
Ly8gTGV0IENTRSB3b3JyeSBhYm91dCB0aGlzIG9uZS4KICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgfQogICAgICAgICBmb3IgKHVuc2lnbmVkIGluZGV4SW5CbG9jayA9IHN0YXJ0SW5kZXhJ
bkJsb2NrOyBpbmRleEluQmxvY2sgPCBibG9jay5zaXplKCk7ICsraW5kZXhJbkJsb2NrKSB7Ci0g
ICAgICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4ID0gYmxvY2tbaW5kZXhJbkJsb2NrXTsKLSAg
ICAgICAgICAgIE5vZGUmIG5vZGUgPSBhdChub2RlSW5kZXgpOworICAgICAgICAgICAgTm9kZSog
bm9kZSA9IGJsb2NrW2luZGV4SW5CbG9ja107CiAgICAgICAgICAgICBib29sIHNob3VsZENvbnRp
bnVlID0gdHJ1ZTsKLSAgICAgICAgICAgIHN3aXRjaCAobm9kZS5vcCgpKSB7CisgICAgICAgICAg
ICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKICAgICAgICAgICAgIGNhc2UgU2V0TG9jYWw6IHsKLSAg
ICAgICAgICAgICAgICBpZiAobm9kZS5sb2NhbCgpID09IHZhcmlhYmxlQWNjZXNzRGF0YS0+bG9j
YWwoKSkKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+bG9jYWwoKSA9PSB2YXJpYWJsZUFjY2Vz
c0RhdGEtPmxvY2FsKCkpCiAgICAgICAgICAgICAgICAgICAgIHNob3VsZENvbnRpbnVlID0gZmFs
c2U7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICAgCiAgICAgICAgICAgICBjYXNlIEdldExvY2FsOiB7Ci0gICAgICAgICAgICAgICAgaWYgKG5v
ZGUudmFyaWFibGVBY2Nlc3NEYXRhKCkgIT0gdmFyaWFibGVBY2Nlc3NEYXRhKQorICAgICAgICAg
ICAgICAgIGlmIChub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKSAhPSB2YXJpYWJsZUFjY2Vzc0Rh
dGEpCiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIHN1YnN0
aXR1dGUoYmxvY2ssIGluZGV4SW5CbG9jaywgbm9kZUluZGV4LCBuZXdHZXRMb2NhbCk7Ci0gICAg
ICAgICAgICAgICAgTm9kZUluZGV4IG9sZFRhaWxJbmRleCA9IGJsb2NrLnZhcmlhYmxlc0F0VGFp
bC5vcGVyYW5kKHZhcmlhYmxlQWNjZXNzRGF0YS0+bG9jYWwoKSk7Ci0gICAgICAgICAgICAgICAg
aWYgKG9sZFRhaWxJbmRleCA9PSBub2RlSW5kZXgpCisgICAgICAgICAgICAgICAgc3Vic3RpdHV0
ZShibG9jaywgaW5kZXhJbkJsb2NrLCBub2RlLCBuZXdHZXRMb2NhbCk7CisgICAgICAgICAgICAg
ICAgTm9kZSogb2xkVGFpbE5vZGUgPSBibG9jay52YXJpYWJsZXNBdFRhaWwub3BlcmFuZCh2YXJp
YWJsZUFjY2Vzc0RhdGEtPmxvY2FsKCkpOworICAgICAgICAgICAgICAgIGlmIChvbGRUYWlsTm9k
ZSA9PSBub2RlKQogICAgICAgICAgICAgICAgICAgICBibG9jay52YXJpYWJsZXNBdFRhaWwub3Bl
cmFuZCh2YXJpYWJsZUFjY2Vzc0RhdGEtPmxvY2FsKCkpID0gbmV3R2V0TG9jYWw7CiAgICAgICAg
ICAgICAgICAgc2hvdWxkQ29udGludWUgPSBmYWxzZTsKICAgICAgICAgICAgICAgICBicmVhazsK
QEAgLTY5OCw2ICs2NzUsOCBAQCBwdWJsaWM6CiAgICAgQ29kZUJsb2NrKiBtX2NvZGVCbG9jazsK
ICAgICBSZWZQdHI8UHJvZmlsZXI6OkNvbXBpbGF0aW9uPiBtX2NvbXBpbGF0aW9uOwogICAgIENv
ZGVCbG9jayogbV9wcm9maWxlZEJsb2NrOworICAgIAorICAgIE5vZGVBbGxvY2F0b3ImIG1fYWxs
b2NhdG9yOwogCiAgICAgVmVjdG9yPCBPd25QdHI8QmFzaWNCbG9jaz4gLCA4PiBtX2Jsb2NrczsK
ICAgICBWZWN0b3I8RWRnZSwgMTY+IG1fdmFyQXJnQ2hpbGRyZW47CkBAIC03MDUsNyArNjg0LDcg
QEAgcHVibGljOgogICAgIFZlY3RvcjxSZXNvbHZlR2xvYmFsRGF0YT4gbV9yZXNvbHZlR2xvYmFs
RGF0YTsKICAgICBWZWN0b3I8UmVzb2x2ZU9wZXJhdGlvbkRhdGE+IG1fcmVzb2x2ZU9wZXJhdGlv
bnNEYXRhOwogICAgIFZlY3RvcjxQdXRUb0Jhc2VPcGVyYXRpb25EYXRhPiBtX3B1dFRvQmFzZU9w
ZXJhdGlvbkRhdGE7Ci0gICAgVmVjdG9yPE5vZGVJbmRleCwgOD4gbV9hcmd1bWVudHM7CisgICAg
VmVjdG9yPE5vZGUqLCA4PiBtX2FyZ3VtZW50czsKICAgICBTZWdtZW50ZWRWZWN0b3I8VmFyaWFi
bGVBY2Nlc3NEYXRhLCAxNj4gbV92YXJpYWJsZUFjY2Vzc0RhdGE7CiAgICAgU2VnbWVudGVkVmVj
dG9yPEFyZ3VtZW50UG9zaXRpb24sIDg+IG1fYXJndW1lbnRQb3NpdGlvbnM7CiAgICAgU2VnbWVu
dGVkVmVjdG9yPFN0cnVjdHVyZVNldCwgMTY+IG1fc3RydWN0dXJlU2V0OwpAQCAtNzI1LDI5ICs3
MDQsMjkgQEAgcHJpdmF0ZToKICAgICAKICAgICB2b2lkIGhhbmRsZVN1Y2Nlc3NvcihWZWN0b3I8
QmxvY2tJbmRleCwgMTY+JiB3b3JrbGlzdCwgQmxvY2tJbmRleCBibG9ja0luZGV4LCBCbG9ja0lu
ZGV4IHN1Y2Nlc3NvckluZGV4KTsKICAgICAKLSAgICBBZGRTcGVjdWxhdGlvbk1vZGUgYWRkSW1t
ZWRpYXRlU2hvdWxkU3BlY3VsYXRlSW50ZWdlcihOb2RlJiBhZGQsIGJvb2wgdmFyaWFibGVTaG91
bGRTcGVjdWxhdGVJbnRlZ2VyLCBOb2RlJiBpbW1lZGlhdGUpCisgICAgQWRkU3BlY3VsYXRpb25N
b2RlIGFkZEltbWVkaWF0ZVNob3VsZFNwZWN1bGF0ZUludGVnZXIoTm9kZSogYWRkLCBib29sIHZh
cmlhYmxlU2hvdWxkU3BlY3VsYXRlSW50ZWdlciwgTm9kZSogaW1tZWRpYXRlKQogICAgIHsKICAg
ICAgICAgQVNTRVJUKGltbWVkaWF0ZS5oYXNDb25zdGFudCgpKTsKICAgICAgICAgCi0gICAgICAg
IEpTVmFsdWUgaW1tZWRpYXRlVmFsdWUgPSBpbW1lZGlhdGUudmFsdWVPZkpTQ29uc3RhbnQobV9j
b2RlQmxvY2spOwotICAgICAgICBpZiAoIWltbWVkaWF0ZVZhbHVlLmlzTnVtYmVyKCkpCisgICAg
ICAgIEpTVmFsdWUgaW1tZWRpYXRlVmFsdWUgPSBpbW1lZGlhdGUtPnZhbHVlT2ZKU0NvbnN0YW50
KG1fY29kZUJsb2NrKTsKKyAgICAgICAgaWYgKCFpbW1lZGlhdGVWYWx1ZS0+aXNOdW1iZXIoKSkK
ICAgICAgICAgICAgIHJldHVybiBEb250U3BlY3VsYXRlSW50ZWdlcjsKICAgICAgICAgCiAgICAg
ICAgIGlmICghdmFyaWFibGVTaG91bGRTcGVjdWxhdGVJbnRlZ2VyKQogICAgICAgICAgICAgcmV0
dXJuIERvbnRTcGVjdWxhdGVJbnRlZ2VyOwogICAgICAgICAKLSAgICAgICAgaWYgKGltbWVkaWF0
ZVZhbHVlLmlzSW50MzIoKSkKLSAgICAgICAgICAgIHJldHVybiBhZGQuY2FuU3BlY3VsYXRlSW50
ZWdlcigpID8gU3BlY3VsYXRlSW50ZWdlciA6IERvbnRTcGVjdWxhdGVJbnRlZ2VyOworICAgICAg
ICBpZiAoaW1tZWRpYXRlVmFsdWUtPmlzSW50MzIoKSkKKyAgICAgICAgICAgIHJldHVybiBhZGQt
PmNhblNwZWN1bGF0ZUludGVnZXIoKSA/IFNwZWN1bGF0ZUludGVnZXIgOiBEb250U3BlY3VsYXRl
SW50ZWdlcjsKICAgICAgICAgCiAgICAgICAgIGRvdWJsZSBkb3VibGVJbW1lZGlhdGUgPSBpbW1l
ZGlhdGVWYWx1ZS5hc0RvdWJsZSgpOwogICAgICAgICBjb25zdCBkb3VibGUgdHdvVG9UaGU0OCA9
IDI4MTQ3NDk3NjcxMDY1Ni4wOwogICAgICAgICBpZiAoZG91YmxlSW1tZWRpYXRlIDwgLXR3b1Rv
VGhlNDggfHwgZG91YmxlSW1tZWRpYXRlID4gdHdvVG9UaGU0OCkKICAgICAgICAgICAgIHJldHVy
biBEb250U3BlY3VsYXRlSW50ZWdlcjsKICAgICAgICAgCi0gICAgICAgIHJldHVybiBub2RlQ2Fu
VHJ1bmNhdGVJbnRlZ2VyKGFkZC5hcml0aE5vZGVGbGFncygpKSA/IFNwZWN1bGF0ZUludGVnZXJC
dXRBbHdheXNXYXRjaE92ZXJmbG93IDogRG9udFNwZWN1bGF0ZUludGVnZXI7CisgICAgICAgIHJl
dHVybiBub2RlQ2FuVHJ1bmNhdGVJbnRlZ2VyKGFkZC0+YXJpdGhOb2RlRmxhZ3MoKSkgPyBTcGVj
dWxhdGVJbnRlZ2VyQnV0QWx3YXlzV2F0Y2hPdmVyZmxvdyA6IERvbnRTcGVjdWxhdGVJbnRlZ2Vy
OwogICAgIH0KICAgICAKLSAgICBib29sIG11bEltbWVkaWF0ZVNob3VsZFNwZWN1bGF0ZUludGVn
ZXIoTm9kZSYgbXVsLCBOb2RlJiB2YXJpYWJsZSwgTm9kZSYgaW1tZWRpYXRlKQorICAgIGJvb2wg
bXVsSW1tZWRpYXRlU2hvdWxkU3BlY3VsYXRlSW50ZWdlcihOb2RlKiBtdWwsIE5vZGUqIHZhcmlh
YmxlLCBOb2RlKiBpbW1lZGlhdGUpCiAgICAgewogICAgICAgICBBU1NFUlQoaW1tZWRpYXRlLmhh
c0NvbnN0YW50KCkpOwogICAgICAgICAKQEAgLTc1NSw3ICs3MzQsNyBAQCBwcml2YXRlOgogICAg
ICAgICBpZiAoIWltbWVkaWF0ZVZhbHVlLmlzSW50MzIoKSkKICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICAgICAgCi0gICAgICAgIGlmICghdmFyaWFibGUuc2hvdWxkU3BlY3VsYXRlSW50
ZWdlckZvckFyaXRobWV0aWMoKSkKKyAgICAgICAgaWYgKCF2YXJpYWJsZS0+c2hvdWxkU3BlY3Vs
YXRlSW50ZWdlckZvckFyaXRobWV0aWMoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICAgICAgCiAgICAgICAgIGludDMyX3QgaW50SW1tZWRpYXRlID0gaW1tZWRpYXRlVmFsdWUuYXNJ
bnQzMigpOwpAQCAtNzY2LDE0ICs3NDUsMTQgQEAgcHJpdmF0ZToKICAgICAgICAgLy8gY2FuU3Bl
Y3VsYXRlSW50ZWdlcigpIGltcGxpZXMpLgogICAgICAgICBjb25zdCBpbnQzMl90IHR3b1RvVGhl
MjIgPSAxIDw8IDIyOwogICAgICAgICBpZiAoaW50SW1tZWRpYXRlIDw9IC10d29Ub1RoZTIyIHx8
IGludEltbWVkaWF0ZSA+PSB0d29Ub1RoZTIyKQotICAgICAgICAgICAgcmV0dXJuIG11bC5jYW5T
cGVjdWxhdGVJbnRlZ2VyKCkgJiYgIW5vZGVNYXlPdmVyZmxvdyhtdWwuYXJpdGhOb2RlRmxhZ3Mo
KSk7CisgICAgICAgICAgICByZXR1cm4gbXVsLT5jYW5TcGVjdWxhdGVJbnRlZ2VyKCkgJiYgIW5v
ZGVNYXlPdmVyZmxvdyhtdWwtPmFyaXRoTm9kZUZsYWdzKCkpOwogCi0gICAgICAgIHJldHVybiBt
dWwuY2FuU3BlY3VsYXRlSW50ZWdlcigpOworICAgICAgICByZXR1cm4gbXVsLT5jYW5TcGVjdWxh
dGVJbnRlZ2VyKCk7CiAgICAgfQogICAgIAogICAgIC8vIFdoZW4gYSBub2RlJ3MgcmVmQ291bnQg
Z29lcyBmcm9tIDAgdG8gMSwgaXQgbXVzdCAobG9naWNhbGx5KSByZWN1cnNpdmVseSByZWYgYWxs
IG9mIGl0cyBjaGlsZHJlbiwgYW5kIHZpY2UgdmVyc2EuCi0gICAgdm9pZCByZWZDaGlsZHJlbihO
b2RlSW5kZXgpOwotICAgIHZvaWQgZGVyZWZDaGlsZHJlbihOb2RlSW5kZXgpOworICAgIHZvaWQg
cmVmQ2hpbGRyZW4oTm9kZSopOworICAgIHZvaWQgZGVyZWZDaGlsZHJlbihOb2RlKik7CiB9Owog
CiBjbGFzcyBHZXRCeXRlY29kZUJlZ2luRm9yQmxvY2sgewpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdMb25nTGl2ZWRTdGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdMb25nTGl2ZWRTdGF0ZS5jcHAJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0xvbmdMaXZlZFN0YXRlLmNwcAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSw0OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZHTG9uZ0xpdmVkU3Rh
dGUuaCIKKworI2lmIEVOQUJMRShERkdfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IERGRyB7CisKK0xvbmdMaXZlZFN0YXRlOjpMb25nTGl2ZWRTdGF0ZSgpCit7Cit9CisKK0xvbmdM
aXZlZFN0YXRlOjp+TG9uZ0xpdmVkU3RhdGUoKQoreworfQorCit2b2lkIExvbmdMaXZlZFN0YXRl
OjpzaHJpbmtUb0ZpdCgpCit7CisgICAgbV9hbGxvY2F0b3IucmVzZXQoKTsKK30KKworfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTG9uZ0xpdmVkU3RhdGUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0xvbmdMaXZlZFN0YXRlLmgJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0xvbmdMaXZlZFN0YXRlLmgJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdMb25nTGl2ZWRTdGF0ZV9oCisjZGVmaW5l
IERGR0xvbmdMaXZlZFN0YXRlX2gKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYg
RU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJERkdOb2RlQWxsb2NhdG9yLmgiCisjaW5jbHVk
ZSA8d3RmL0Zhc3RBbGxvY0Jhc2UuaD4KKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKwor
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitjbGFzcyBMb25nTGl2ZWRTdGF0ZSB7
CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7IFdURl9NQUtFX05PTkNPUFlBQkxFKExvbmdM
aXZlZFN0YXRlKTsKK3B1YmxpYzoKKyAgICBMb25nTGl2ZWRTdGF0ZSgpOworICAgIH5Mb25nTGl2
ZWRTdGF0ZSgpOworICAgIAorICAgIHZvaWQgc2hyaW5rVG9GaXQoKTsKKyAgICAKKyAgICBOb2Rl
QWxsb2NhdG9yIG1fYWxsb2NhdG9yOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwor
CisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdMb25nTGl2ZWRTdGF0
ZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmNwcAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5jcHAJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsNTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGR05vZGUuaCIKKworI2lm
IEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZHTm9kZUFsbG9jYXRvci5oIgorCituYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK3Vuc2lnbmVkIE5vZGU6OmluZGV4KCkgY29u
c3QKK3sKKyAgICByZXR1cm4gTm9kZUFsbG9jYXRvcjo6YWxsb2NhdG9yT2YodGhpcyktPmluZGV4
T2YodGhpcyk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworbmFtZXNwYWNlIFdU
RiB7CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBOb2RlKiBub2RlKQor
eworICAgIGlmICghbm9kZSkKKyAgICAgICAgb3V0LnByaW50KCItIik7CisgICAgZWxzZQorICAg
ICAgICBvdXQucHJpbnQoIkAiLCBub2RlLT5pbmRleCgpKTsKK30KKworfSAvLyBuYW1lc3BhY2Ug
V1RGCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdOb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdOb2RlLmgJKHJldmlzaW9uIDEzOTU4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMSwgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTIsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02OCw3ICs2OCw3IEBA
IHN0cnVjdCBOZXdBcnJheUJ1ZmZlckRhdGEgewogCiAvLyBUaGlzIHR5cGUgdXNlZCBpbiBwYXNz
aW5nIGFuIGltbWVkaWF0ZSBhcmd1bWVudCB0byBOb2RlIGNvbnN0cnVjdG9yOwogLy8gZGlzdGlu
Z3Vpc2hlcyBhbiBpbW1lZGlhdGUgdmFsdWUgKHR5cGljYWxseSBhbiBpbmRleCBpbnRvIGEgQ29k
ZUJsb2NrIGRhdGEgc3RydWN0dXJlIC0gCi0vLyBhIGNvbnN0YW50IGluZGV4LCBhcmd1bWVudCwg
b3IgaWRlbnRpZmllcikgZnJvbSBhIE5vZGVJbmRleC4KKy8vIGEgY29uc3RhbnQgaW5kZXgsIGFy
Z3VtZW50LCBvciBpZGVudGlmaWVyKSBmcm9tIGEgTm9kZSouCiBzdHJ1Y3QgT3BJbmZvIHsKICAg
ICBleHBsaWNpdCBPcEluZm8oaW50MzJfdCB2YWx1ZSkgOiBtX3ZhbHVlKHN0YXRpY19jYXN0PHVp
bnRwdHJfdD4odmFsdWUpKSB7IH0KICAgICBleHBsaWNpdCBPcEluZm8odWludDMyX3QgdmFsdWUp
IDogbV92YWx1ZShzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KHZhbHVlKSkgeyB9CkBAIC04OCw3ICs4
OCw3IEBAIHN0cnVjdCBOb2RlIHsKICAgICBOb2RlKCkgeyB9CiAgICAgCiAgICAgLy8gQ29uc3Ry
dWN0IGEgbm9kZSB3aXRoIHVwIHRvIDMgY2hpbGRyZW4sIG5vIGltbWVkaWF0ZSB2YWx1ZS4KLSAg
ICBOb2RlKE5vZGVUeXBlIG9wLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIE5vZGVJbmRleCBjaGls
ZDEgPSBOb05vZGUsIE5vZGVJbmRleCBjaGlsZDIgPSBOb05vZGUsIE5vZGVJbmRleCBjaGlsZDMg
PSBOb05vZGUpCisgICAgTm9kZShOb2RlVHlwZSBvcCwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBO
b2RlKiBjaGlsZDEgPSAwLCBOb2RlKiBjaGlsZDIgPSAwLCBOb2RlKiBjaGlsZDMgPSAwKQogICAg
ICAgICA6IGNvZGVPcmlnaW4oY29kZU9yaWdpbikKICAgICAgICAgLCBjaGlsZHJlbihBZGphY2Vu
Y3lMaXN0OjpGaXhlZCwgY2hpbGQxLCBjaGlsZDIsIGNoaWxkMykKICAgICAgICAgLCBtX3ZpcnR1
YWxSZWdpc3RlcihJbnZhbGlkVmlydHVhbFJlZ2lzdGVyKQpAQCAtMTAwLDcgKzEwMCw3IEBAIHN0
cnVjdCBOb2RlIHsKICAgICB9CiAKICAgICAvLyBDb25zdHJ1Y3QgYSBub2RlIHdpdGggdXAgdG8g
MyBjaGlsZHJlbiBhbmQgYW4gaW1tZWRpYXRlIHZhbHVlLgotICAgIE5vZGUoTm9kZVR5cGUgb3As
IENvZGVPcmlnaW4gY29kZU9yaWdpbiwgT3BJbmZvIGltbSwgTm9kZUluZGV4IGNoaWxkMSA9IE5v
Tm9kZSwgTm9kZUluZGV4IGNoaWxkMiA9IE5vTm9kZSwgTm9kZUluZGV4IGNoaWxkMyA9IE5vTm9k
ZSkKKyAgICBOb2RlKE5vZGVUeXBlIG9wLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIE9wSW5mbyBp
bW0sIE5vZGUqIGNoaWxkMSA9IDAsIE5vZGUqIGNoaWxkMiA9IDAsIE5vZGUqIGNoaWxkMyA9IDAp
CiAgICAgICAgIDogY29kZU9yaWdpbihjb2RlT3JpZ2luKQogICAgICAgICAsIGNoaWxkcmVuKEFk
amFjZW5jeUxpc3Q6OkZpeGVkLCBjaGlsZDEsIGNoaWxkMiwgY2hpbGQzKQogICAgICAgICAsIG1f
dmlydHVhbFJlZ2lzdGVyKEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIpCkBAIC0xMTMsNyArMTEzLDcg
QEAgc3RydWN0IE5vZGUgewogICAgIH0KIAogICAgIC8vIENvbnN0cnVjdCBhIG5vZGUgd2l0aCB1
cCB0byAzIGNoaWxkcmVuIGFuZCB0d28gaW1tZWRpYXRlIHZhbHVlcy4KLSAgICBOb2RlKE5vZGVU
eXBlIG9wLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIE9wSW5mbyBpbW0xLCBPcEluZm8gaW1tMiwg
Tm9kZUluZGV4IGNoaWxkMSA9IE5vTm9kZSwgTm9kZUluZGV4IGNoaWxkMiA9IE5vTm9kZSwgTm9k
ZUluZGV4IGNoaWxkMyA9IE5vTm9kZSkKKyAgICBOb2RlKE5vZGVUeXBlIG9wLCBDb2RlT3JpZ2lu
IGNvZGVPcmlnaW4sIE9wSW5mbyBpbW0xLCBPcEluZm8gaW1tMiwgTm9kZSogY2hpbGQxID0gMCwg
Tm9kZSogY2hpbGQyID0gMCwgTm9kZSogY2hpbGQzID0gMCkKICAgICAgICAgOiBjb2RlT3JpZ2lu
KGNvZGVPcmlnaW4pCiAgICAgICAgICwgY2hpbGRyZW4oQWRqYWNlbmN5TGlzdDo6Rml4ZWQsIGNo
aWxkMSwgY2hpbGQyLCBjaGlsZDMpCiAgICAgICAgICwgbV92aXJ0dWFsUmVnaXN0ZXIoSW52YWxp
ZFZpcnR1YWxSZWdpc3RlcikKQEAgLTE0Myw2ICsxNDMsOSBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAg
Tm9kZVR5cGUgb3AoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxOb2RlVHlwZT4obV9vcCk7
IH0KICAgICBOb2RlRmxhZ3MgZmxhZ3MoKSBjb25zdCB7IHJldHVybiBtX2ZsYWdzOyB9CiAgICAg
CisgICAgLy8gVGhpcyBpcyBub3QgYSBmYXN0IG1ldGhvZC4KKyAgICB1bnNpZ25lZCBpbmRleCgp
IGNvbnN0OworICAgIAogICAgIHZvaWQgc2V0T3AoTm9kZVR5cGUgb3ApCiAgICAgewogICAgICAg
ICBtX29wID0gb3A7CkBAIC0yNzAsNyArMjczLDcgQEAgc3RydWN0IE5vZGUgewogICAgICAgICBj
b252ZXJ0VG9TdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludChzdHJ1Y3R1cmVTZXQoKS5zaW5n
bGV0b25TdHJ1Y3R1cmUoKSk7CiAgICAgfQogICAgIAotICAgIHZvaWQgY29udmVydFRvR2V0QnlP
ZmZzZXQodW5zaWduZWQgc3RvcmFnZUFjY2Vzc0RhdGFJbmRleCwgTm9kZUluZGV4IHN0b3JhZ2Up
CisgICAgdm9pZCBjb252ZXJ0VG9HZXRCeU9mZnNldCh1bnNpZ25lZCBzdG9yYWdlQWNjZXNzRGF0
YUluZGV4LCBOb2RlKiBzdG9yYWdlKQogICAgIHsKICAgICAgICAgQVNTRVJUKG1fb3AgPT0gR2V0
QnlJZCB8fCBtX29wID09IEdldEJ5SWRGbHVzaCk7CiAgICAgICAgIG1fb3BJbmZvID0gc3RvcmFn
ZUFjY2Vzc0RhdGFJbmRleDsKQEAgLTI3OSw3ICsyODIsNyBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAg
ICAgIG1fZmxhZ3MgJj0gfk5vZGVDbG9iYmVyc1dvcmxkOwogICAgIH0KICAgICAKLSAgICB2b2lk
IGNvbnZlcnRUb1B1dEJ5T2Zmc2V0KHVuc2lnbmVkIHN0b3JhZ2VBY2Nlc3NEYXRhSW5kZXgsIE5v
ZGVJbmRleCBzdG9yYWdlKQorICAgIHZvaWQgY29udmVydFRvUHV0QnlPZmZzZXQodW5zaWduZWQg
c3RvcmFnZUFjY2Vzc0RhdGFJbmRleCwgTm9kZSogc3RvcmFnZSkKICAgICB7CiAgICAgICAgIEFT
U0VSVChtX29wID09IFB1dEJ5SWQgfHwgbV9vcCA9PSBQdXRCeUlkRGlyZWN0KTsKICAgICAgICAg
bV9vcEluZm8gPSBzdG9yYWdlQWNjZXNzRGF0YUluZGV4OwpAQCAtMTExNyw0NCArMTEyMCw0NCBA
QCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAgIHJldHVybiBpc0NlbGxTcGVjdWxhdGlvbihwcmVkaWN0
aW9uKCkpOwogICAgIH0KICAgICAKLSAgICBzdGF0aWMgYm9vbCBzaG91bGRTcGVjdWxhdGVJbnRl
Z2VyKE5vZGUmIG9wMSwgTm9kZSYgb3AyKQorICAgIHN0YXRpYyBib29sIHNob3VsZFNwZWN1bGF0
ZUludGVnZXIoTm9kZSogb3AxLCBOb2RlKiBvcDIpCiAgICAgewotICAgICAgICByZXR1cm4gb3Ax
LnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKSAmJiBvcDIuc2hvdWxkU3BlY3VsYXRlSW50ZWdlcigp
OworICAgICAgICByZXR1cm4gb3AxLT5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkgJiYgb3AyLT5z
aG91bGRTcGVjdWxhdGVJbnRlZ2VyKCk7CiAgICAgfQogICAgIAotICAgIHN0YXRpYyBib29sIHNo
b3VsZFNwZWN1bGF0ZUludGVnZXJGb3JBcml0aG1ldGljKE5vZGUmIG9wMSwgTm9kZSYgb3AyKQor
ICAgIHN0YXRpYyBib29sIHNob3VsZFNwZWN1bGF0ZUludGVnZXJGb3JBcml0aG1ldGljKE5vZGUq
IG9wMSwgTm9kZSogb3AyKQogICAgIHsKLSAgICAgICAgcmV0dXJuIG9wMS5zaG91bGRTcGVjdWxh
dGVJbnRlZ2VyRm9yQXJpdGhtZXRpYygpICYmIG9wMi5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyRm9y
QXJpdGhtZXRpYygpOworICAgICAgICByZXR1cm4gb3AxLT5zaG91bGRTcGVjdWxhdGVJbnRlZ2Vy
Rm9yQXJpdGhtZXRpYygpICYmIG9wMi0+c2hvdWxkU3BlY3VsYXRlSW50ZWdlckZvckFyaXRobWV0
aWMoKTsKICAgICB9CiAgICAgCi0gICAgc3RhdGljIGJvb2wgc2hvdWxkU3BlY3VsYXRlSW50ZWdl
ckV4cGVjdGluZ0RlZmluZWQoTm9kZSYgb3AxLCBOb2RlJiBvcDIpCisgICAgc3RhdGljIGJvb2wg
c2hvdWxkU3BlY3VsYXRlSW50ZWdlckV4cGVjdGluZ0RlZmluZWQoTm9kZSogb3AxLCBOb2RlKiBv
cDIpCiAgICAgewotICAgICAgICByZXR1cm4gb3AxLnNob3VsZFNwZWN1bGF0ZUludGVnZXJFeHBl
Y3RpbmdEZWZpbmVkKCkgJiYgb3AyLnNob3VsZFNwZWN1bGF0ZUludGVnZXJFeHBlY3RpbmdEZWZp
bmVkKCk7CisgICAgICAgIHJldHVybiBvcDEtPnNob3VsZFNwZWN1bGF0ZUludGVnZXJFeHBlY3Rp
bmdEZWZpbmVkKCkgJiYgb3AyLT5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyRXhwZWN0aW5nRGVmaW5l
ZCgpOwogICAgIH0KICAgICAKLSAgICBzdGF0aWMgYm9vbCBzaG91bGRTcGVjdWxhdGVEb3VibGVG
b3JBcml0aG1ldGljKE5vZGUmIG9wMSwgTm9kZSYgb3AyKQorICAgIHN0YXRpYyBib29sIHNob3Vs
ZFNwZWN1bGF0ZURvdWJsZUZvckFyaXRobWV0aWMoTm9kZSogb3AxLCBOb2RlKiBvcDIpCiAgICAg
ewotICAgICAgICByZXR1cm4gb3AxLnNob3VsZFNwZWN1bGF0ZURvdWJsZUZvckFyaXRobWV0aWMo
KSAmJiBvcDIuc2hvdWxkU3BlY3VsYXRlRG91YmxlRm9yQXJpdGhtZXRpYygpOworICAgICAgICBy
ZXR1cm4gb3AxLT5zaG91bGRTcGVjdWxhdGVEb3VibGVGb3JBcml0aG1ldGljKCkgJiYgb3AyLT5z
aG91bGRTcGVjdWxhdGVEb3VibGVGb3JBcml0aG1ldGljKCk7CiAgICAgfQogICAgIAotICAgIHN0
YXRpYyBib29sIHNob3VsZFNwZWN1bGF0ZU51bWJlcihOb2RlJiBvcDEsIE5vZGUmIG9wMikKKyAg
ICBzdGF0aWMgYm9vbCBzaG91bGRTcGVjdWxhdGVOdW1iZXIoTm9kZSogb3AxLCBOb2RlKiBvcDIp
CiAgICAgewotICAgICAgICByZXR1cm4gb3AxLnNob3VsZFNwZWN1bGF0ZU51bWJlcigpICYmIG9w
Mi5zaG91bGRTcGVjdWxhdGVOdW1iZXIoKTsKKyAgICAgICAgcmV0dXJuIG9wMS0+c2hvdWxkU3Bl
Y3VsYXRlTnVtYmVyKCkgJiYgb3AyLT5zaG91bGRTcGVjdWxhdGVOdW1iZXIoKTsKICAgICB9CiAg
ICAgCi0gICAgc3RhdGljIGJvb2wgc2hvdWxkU3BlY3VsYXRlTnVtYmVyRXhwZWN0aW5nRGVmaW5l
ZChOb2RlJiBvcDEsIE5vZGUmIG9wMikKKyAgICBzdGF0aWMgYm9vbCBzaG91bGRTcGVjdWxhdGVO
dW1iZXJFeHBlY3RpbmdEZWZpbmVkKE5vZGUqIG9wMSwgTm9kZSogb3AyKQogICAgIHsKLSAgICAg
ICAgcmV0dXJuIG9wMS5zaG91bGRTcGVjdWxhdGVOdW1iZXJFeHBlY3RpbmdEZWZpbmVkKCkgJiYg
b3AyLnNob3VsZFNwZWN1bGF0ZU51bWJlckV4cGVjdGluZ0RlZmluZWQoKTsKKyAgICAgICAgcmV0
dXJuIG9wMS0+c2hvdWxkU3BlY3VsYXRlTnVtYmVyRXhwZWN0aW5nRGVmaW5lZCgpICYmIG9wMi0+
c2hvdWxkU3BlY3VsYXRlTnVtYmVyRXhwZWN0aW5nRGVmaW5lZCgpOwogICAgIH0KICAgICAKLSAg
ICBzdGF0aWMgYm9vbCBzaG91bGRTcGVjdWxhdGVGaW5hbE9iamVjdChOb2RlJiBvcDEsIE5vZGUm
IG9wMikKKyAgICBzdGF0aWMgYm9vbCBzaG91bGRTcGVjdWxhdGVGaW5hbE9iamVjdChOb2RlKiBv
cDEsIE5vZGUqIG9wMikKICAgICB7Ci0gICAgICAgIHJldHVybiBvcDEuc2hvdWxkU3BlY3VsYXRl
RmluYWxPYmplY3QoKSAmJiBvcDIuc2hvdWxkU3BlY3VsYXRlRmluYWxPYmplY3QoKTsKKyAgICAg
ICAgcmV0dXJuIG9wMS0+c2hvdWxkU3BlY3VsYXRlRmluYWxPYmplY3QoKSAmJiBvcDItPnNob3Vs
ZFNwZWN1bGF0ZUZpbmFsT2JqZWN0KCk7CiAgICAgfQogCi0gICAgc3RhdGljIGJvb2wgc2hvdWxk
U3BlY3VsYXRlQXJyYXkoTm9kZSYgb3AxLCBOb2RlJiBvcDIpCisgICAgc3RhdGljIGJvb2wgc2hv
dWxkU3BlY3VsYXRlQXJyYXkoTm9kZSogb3AxLCBOb2RlKiBvcDIpCiAgICAgewotICAgICAgICBy
ZXR1cm4gb3AxLnNob3VsZFNwZWN1bGF0ZUFycmF5KCkgJiYgb3AyLnNob3VsZFNwZWN1bGF0ZUFy
cmF5KCk7CisgICAgICAgIHJldHVybiBvcDEtPnNob3VsZFNwZWN1bGF0ZUFycmF5KCkgJiYgb3Ay
LT5zaG91bGRTcGVjdWxhdGVBcnJheSgpOwogICAgIH0KICAgICAKICAgICBib29sIGNhblNwZWN1
bGF0ZUludGVnZXIoKQpAQCAtMTE2NiwxNSArMTE2OSwxNyBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAg
ewogICAgICAgICBpZiAoIWNoaWxkMSgpKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBv
dXQucHJpbnRmKCJAJXUiLCBjaGlsZDEoKS5pbmRleCgpKTsKKyAgICAgICAgb3V0LnByaW50Zigi
QCV1IiwgY2hpbGQxKCktPmluZGV4KCkpOwogICAgICAgICBpZiAoIWNoaWxkMigpKQogICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICBvdXQucHJpbnRmKCIsIEAldSIsIGNoaWxkMigpLmluZGV4
KCkpOworICAgICAgICBvdXQucHJpbnRmKCIsIEAldSIsIGNoaWxkMigpLT5pbmRleCgpKTsKICAg
ICAgICAgaWYgKCFjaGlsZDMoKSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgb3V0LnBy
aW50ZigiLCBAJXUiLCBjaGlsZDMoKS5pbmRleCgpKTsKKyAgICAgICAgb3V0LnByaW50ZigiLCBA
JXUiLCBjaGlsZDMoKS0+aW5kZXgoKSk7CiAgICAgfQogICAgIAorICAgIC8vIE5CLiBUaGlzIGNs
YXNzIG11c3QgaGF2ZSBhIHRyaXZpYWwgZGVzdHJ1Y3Rvci4KKyAgICAKICAgICAvLyBVc2VkIHRv
IGxvb2sgdXAgZXhjZXB0aW9uIGhhbmRsaW5nIGluZm9ybWF0aW9uIChjdXJyZW50bHkgaW1wbGVt
ZW50ZWQgYXMgYSBieXRlY29kZSBpbmRleCkuCiAgICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2luOwog
ICAgIC8vIFJlZmVyZW5jZXMgdG8gdXAgdG8gMyBjaGlsZHJlbiwgb3IgbGlua3MgdG8gYSB2YXJp
YWJsZSBsZW5ndGggc2V0IG9mIGNoaWxkcmVuLgpAQCAtMTE5NywxMCArMTIwMiwxNiBAQCBwcml2
YXRlOgogcHVibGljOgogICAgIC8vIEZpZWxkcyB1c2VkIGJ5IHZhcmlvdXMgYW5hbHlzZXMuCiAg
ICAgQWJzdHJhY3RWYWx1ZSB2YWx1ZTsKLSAgICBOb2RlSW5kZXggcmVwbGFjZW1lbnQ7CisgICAg
Tm9kZSogcmVwbGFjZW1lbnQ7CiB9OwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCiAKK25h
bWVzcGFjZSBXVEYgeworCit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mLCBOb2RlKik7
CisKK30gLy8gbmFtZXNwYWNlIFdURgorCiAjZW5kaWYKICNlbmRpZgpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlQWxsb2NhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlQWxsb2NhdG9yLmgJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVBbGxvY2F0b3IuaAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSw1MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaWZuZGVmIERGR05vZGVBbGxvY2F0b3JfaAorI2RlZmluZSBERkdOb2RlQWxsb2Nh
dG9yX2gKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKERGR19KSVQp
CisKKyNpbmNsdWRlICJERkdBbGxvY2F0b3IuaCIKKyNpbmNsdWRlICJERkdOb2RlLmgiCisKK25h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKwordHlwZWRlZiBBbGxvY2F0b3I8Tm9kZSwg
NDA5NT4gTm9kZUFsbG9jYXRvcjsKKworaW5saW5lIHZvaWQqIG9wZXJhdG9yIG5ldyAoc2l6ZV90
IHNpemUsIE5vZGVBbGxvY2F0b3ImIGFsbG9jYXRvcikKK3sKKyAgICBBU1NFUlQoc2l6ZSA9PSBz
aXplb2YoTm9kZSkpOworICAgIHJldHVybiBhbGxvY2F0b3IuYWxsb2NhdGUoKTsKK30KKworfSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNl
bmRpZiAvLyBERkdOb2RlQWxsb2NhdG9yX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAJ
KHJldmlzaW9uIDEzOTU4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGlj
dGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTIsIDIwMTMgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC04NSw3
NSArODUsNzMgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBib29sIHNldFByZWRpY3Rpb24oU3Bl
Y3VsYXRlZFR5cGUgcHJlZGljdGlvbikKICAgICB7Ci0gICAgICAgIEFTU0VSVChtX2dyYXBoW21f
Y29tcGlsZUluZGV4XS5oYXNSZXN1bHQoKSk7CisgICAgICAgIEFTU0VSVChtX2N1cnJlbnROb2Rl
LT5oYXNSZXN1bHQoKSk7CiAgICAgICAgIAogICAgICAgICAvLyBzZXRQcmVkaWN0aW9uKCkgaXMg
dXNlZCB3aGVuIHdlIGtub3cgdGhhdCB0aGVyZSBpcyBubyB3YXkgdGhhdCB3ZSBjYW4gY2hhbmdl
CiAgICAgICAgIC8vIG91ciBtaW5kcyBhYm91dCB3aGF0IHRoZSBwcmVkaWN0aW9uIGlzIGdvaW5n
IHRvIGJlLiBUaGVyZSBpcyBubyBzZW1hbnRpYwogICAgICAgICAvLyBkaWZmZXJlbmNlIGJldHdl
ZW4gc2V0UHJlZGljdGlvbigpIGFuZCBtZXJnZVNwZWN1bGF0aW9uKCkgb3RoZXIgdGhhbiB0aGUK
ICAgICAgICAgLy8gaW5jcmVhc2VkIGNoZWNraW5nIHRvIHZhbGlkYXRlIHRoaXMgcHJvcGVydHku
Ci0gICAgICAgIEFTU0VSVChtX2dyYXBoW21fY29tcGlsZUluZGV4XS5wcmVkaWN0aW9uKCkgPT0g
U3BlY05vbmUgfHwgbV9ncmFwaFttX2NvbXBpbGVJbmRleF0ucHJlZGljdGlvbigpID09IHByZWRp
Y3Rpb24pOworICAgICAgICBBU1NFUlQobV9jdXJyZW50Tm9kZS0+cHJlZGljdGlvbigpID09IFNw
ZWNOb25lIHx8IG1fY3VycmVudE5vZGUtPnByZWRpY3Rpb24oKSA9PSBwcmVkaWN0aW9uKTsKICAg
ICAgICAgCi0gICAgICAgIHJldHVybiBtX2dyYXBoW21fY29tcGlsZUluZGV4XS5wcmVkaWN0KHBy
ZWRpY3Rpb24pOworICAgICAgICByZXR1cm4gbV9jdXJyZW50Tm9kZS0+cHJlZGljdChwcmVkaWN0
aW9uKTsKICAgICB9CiAgICAgCiAgICAgYm9vbCBtZXJnZVByZWRpY3Rpb24oU3BlY3VsYXRlZFR5
cGUgcHJlZGljdGlvbikKICAgICB7Ci0gICAgICAgIEFTU0VSVChtX2dyYXBoW21fY29tcGlsZUlu
ZGV4XS5oYXNSZXN1bHQoKSk7CisgICAgICAgIEFTU0VSVChtX2N1cnJlbnROb2RlLT5oYXNSZXN1
bHQoKSk7CiAgICAgICAgIAotICAgICAgICByZXR1cm4gbV9ncmFwaFttX2NvbXBpbGVJbmRleF0u
cHJlZGljdChwcmVkaWN0aW9uKTsKKyAgICAgICAgcmV0dXJuIG1fY3VycmVudE5vZGUtPnByZWRp
Y3QocHJlZGljdGlvbik7CiAgICAgfQogICAgIAotICAgIGJvb2wgaXNOb3ROZWdaZXJvKE5vZGVJ
bmRleCBub2RlSW5kZXgpCisgICAgYm9vbCBpc05vdE5lZ1plcm8oTm9kZSogbm9kZSkKICAgICB7
Ci0gICAgICAgIGlmICghbV9ncmFwaC5pc051bWJlckNvbnN0YW50KG5vZGVJbmRleCkpCisgICAg
ICAgIGlmICghbV9ncmFwaC5pc051bWJlckNvbnN0YW50KG5vZGUpKQogICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgICAgICBkb3VibGUgdmFsdWUgPSBtX2dyYXBoLnZhbHVlT2ZOdW1iZXJD
b25zdGFudChub2RlSW5kZXgpOworICAgICAgICBkb3VibGUgdmFsdWUgPSBtX2dyYXBoLnZhbHVl
T2ZOdW1iZXJDb25zdGFudChub2RlKTsKICAgICAgICAgcmV0dXJuICF2YWx1ZSAmJiAxLjAgLyB2
YWx1ZSA8IDAuMDsKICAgICB9CiAgICAgCi0gICAgYm9vbCBpc05vdFplcm8oTm9kZUluZGV4IG5v
ZGVJbmRleCkKKyAgICBib29sIGlzTm90WmVybyhOb2RlKiBub2RlKQogICAgIHsKLSAgICAgICAg
aWYgKCFtX2dyYXBoLmlzTnVtYmVyQ29uc3RhbnQobm9kZUluZGV4KSkKKyAgICAgICAgaWYgKCFt
X2dyYXBoLmlzTnVtYmVyQ29uc3RhbnQobm9kZSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgICAgIHJldHVybiAhIW1fZ3JhcGgudmFsdWVPZk51bWJlckNvbnN0YW50KG5vZGVJbmRl
eCk7CisgICAgICAgIHJldHVybiAhIW1fZ3JhcGgudmFsdWVPZk51bWJlckNvbnN0YW50KG5vZGUp
OwogICAgIH0KICAgICAKLSAgICBib29sIGlzV2l0aGluUG93ZXJPZlR3b0ZvckNvbnN0YW50KE5v
ZGUmIG5vZGUsIGludCBwb3dlcikKKyAgICBib29sIGlzV2l0aGluUG93ZXJPZlR3b0ZvckNvbnN0
YW50KE5vZGUqIG5vZGUsIGludCBwb3dlcikKICAgICB7Ci0gICAgICAgIEpTVmFsdWUgaW1tZWRp
YXRlVmFsdWUgPSBub2RlLnZhbHVlT2ZKU0NvbnN0YW50KGNvZGVCbG9jaygpKTsKKyAgICAgICAg
SlNWYWx1ZSBpbW1lZGlhdGVWYWx1ZSA9IG5vZGUtPnZhbHVlT2ZKU0NvbnN0YW50KGNvZGVCbG9j
aygpKTsKICAgICAgICAgaWYgKCFpbW1lZGlhdGVWYWx1ZS5pc0ludDMyKCkpCiAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGludDMyX3QgaW50SW1tZWRpYXRlID0gaW1tZWRpYXRl
VmFsdWUuYXNJbnQzMigpOwogICAgICAgICByZXR1cm4gaW50SW1tZWRpYXRlID4gLSgxIDw8IHBv
d2VyKSAmJiBpbnRJbW1lZGlhdGUgPCAoMSA8PCBwb3dlcik7CiAgICAgfQogICAgIAotICAgIGJv
b2wgaXNXaXRoaW5Qb3dlck9mVHdvTm9uUmVjdXJzaXZlKE5vZGVJbmRleCBub2RlSW5kZXgsIGlu
dCBwb3dlcikKKyAgICBib29sIGlzV2l0aGluUG93ZXJPZlR3b05vblJlY3Vyc2l2ZShOb2RlKiBu
b2RlLCBpbnQgcG93ZXIpCiAgICAgewotICAgICAgICBOb2RlJiBub2RlID0gbV9ncmFwaFtub2Rl
SW5kZXhdOwotICAgICAgICBpZiAobm9kZS5vcCgpICE9IEpTQ29uc3RhbnQpCisgICAgICAgIGlm
IChub2RlLT5vcCgpICE9IEpTQ29uc3RhbnQpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgICAgIHJldHVybiBpc1dpdGhpblBvd2VyT2ZUd29Gb3JDb25zdGFudChub2RlLCBwb3dlcik7
CiAgICAgfQogICAgIAotICAgIGJvb2wgaXNXaXRoaW5Qb3dlck9mVHdvKE5vZGVJbmRleCBub2Rl
SW5kZXgsIGludCBwb3dlcikKKyAgICBib29sIGlzV2l0aGluUG93ZXJPZlR3byhOb2RlKiBub2Rl
LCBpbnQgcG93ZXIpCiAgICAgewotICAgICAgICBOb2RlJiBub2RlID0gbV9ncmFwaFtub2RlSW5k
ZXhdOwotICAgICAgICBzd2l0Y2ggKG5vZGUub3AoKSkgeworICAgICAgICBzd2l0Y2ggKG5vZGUt
Pm9wKCkpIHsKICAgICAgICAgY2FzZSBKU0NvbnN0YW50OiB7CiAgICAgICAgICAgICByZXR1cm4g
aXNXaXRoaW5Qb3dlck9mVHdvRm9yQ29uc3RhbnQobm9kZSwgcG93ZXIpOwogICAgICAgICB9CiAg
ICAgICAgICAgICAKICAgICAgICAgY2FzZSBCaXRBbmQ6IHsKLSAgICAgICAgICAgIHJldHVybiBp
c1dpdGhpblBvd2VyT2ZUd29Ob25SZWN1cnNpdmUobm9kZS5jaGlsZDEoKS5pbmRleCgpLCBwb3dl
cikKLSAgICAgICAgICAgICAgICB8fCBpc1dpdGhpblBvd2VyT2ZUd29Ob25SZWN1cnNpdmUobm9k
ZS5jaGlsZDIoKS5pbmRleCgpLCBwb3dlcik7CisgICAgICAgICAgICByZXR1cm4gaXNXaXRoaW5Q
b3dlck9mVHdvTm9uUmVjdXJzaXZlKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgcG93ZXIpCisgICAg
ICAgICAgICAgICAgfHwgaXNXaXRoaW5Qb3dlck9mVHdvTm9uUmVjdXJzaXZlKG5vZGUtPmNoaWxk
MigpLm5vZGUoKSwgcG93ZXIpOwogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2Fz
ZSBCaXRSU2hpZnQ6CiAgICAgICAgIGNhc2UgQml0VVJTaGlmdDogewotICAgICAgICAgICAgTm9k
ZSYgc2hpZnRBbW91bnQgPSBtX2dyYXBoW25vZGUuY2hpbGQyKCldOwotICAgICAgICAgICAgaWYg
KHNoaWZ0QW1vdW50Lm9wKCkgIT0gSlNDb25zdGFudCkKKyAgICAgICAgICAgIE5vZGUqIHNoaWZ0
QW1vdW50ID0gbm9kZS0+Y2hpbGQyKCkubm9kZSgpOworICAgICAgICAgICAgaWYgKHNoaWZ0QW1v
dW50LT5vcCgpICE9IEpTQ29uc3RhbnQpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgICAgICAgSlNWYWx1ZSBpbW1lZGlhdGVWYWx1ZSA9IHNoaWZ0QW1vdW50LnZhbHVlT2ZK
U0NvbnN0YW50KGNvZGVCbG9jaygpKTsKKyAgICAgICAgICAgIEpTVmFsdWUgaW1tZWRpYXRlVmFs
dWUgPSBzaGlmdEFtb3VudC0+dmFsdWVPZkpTQ29uc3RhbnQoY29kZUJsb2NrKCkpOwogICAgICAg
ICAgICAgaWYgKCFpbW1lZGlhdGVWYWx1ZS5pc0ludDMyKCkpCiAgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgICAgICAgICAgcmV0dXJuIGltbWVkaWF0ZVZhbHVlID4gMzIgLSBwb3dl
cjsKQEAgLTE3OCwxNiArMTc2LDE2IEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiBzcGVjdWxh
dGVkRG91YmxlVHlwZUZvclByZWRpY3Rpb24obWVyZ2VTcGVjdWxhdGlvbnMobGVmdCwgcmlnaHQp
KTsKICAgICB9CiAKLSAgICB2b2lkIHByb3BhZ2F0ZShOb2RlJiBub2RlKQorICAgIHZvaWQgcHJv
cGFnYXRlKE5vZGUqIG5vZGUpCiAgICAgewotICAgICAgICBpZiAoIW5vZGUuc2hvdWxkR2VuZXJh
dGUoKSkKKyAgICAgICAgaWYgKCFub2RlLT5zaG91bGRHZW5lcmF0ZSgpKQogICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICAKLSAgICAgICAgTm9kZVR5cGUgb3AgPSBub2RlLm9wKCk7Ci0gICAg
ICAgIE5vZGVGbGFncyBmbGFncyA9IG5vZGUuZmxhZ3MoKSAmIE5vZGVCYWNrUHJvcE1hc2s7Cisg
ICAgICAgIE5vZGVUeXBlIG9wID0gbm9kZS0+b3AoKTsKKyAgICAgICAgTm9kZUZsYWdzIGZsYWdz
ID0gbm9kZS0+ZmxhZ3MoKSAmIE5vZGVCYWNrUHJvcE1hc2s7CiAKICNpZiBERkdfRU5BQkxFKERF
QlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCi0gICAgICAgIGRhdGFMb2dGKCIgICAlcyBAJXU6ICVz
ICIsIEdyYXBoOjpvcE5hbWUob3ApLCBtX2NvbXBpbGVJbmRleCwgbm9kZUZsYWdzQXNTdHJpbmco
ZmxhZ3MpKTsKKyAgICAgICAgZGF0YUxvZygiICAgIiwgR3JhcGg6Om9wTmFtZShvcCksICIgIiwg
bV9jdXJyZW50Tm9kZSwgIjogIiwgbm9kZUZsYWdzQXNTdHJpbmcoZmxhZ3MpLCAiICIpOwogI2Vu
ZGlmCiAgICAgICAgIAogICAgICAgICBib29sIGNoYW5nZWQgPSBmYWxzZTsKQEAgLTE5NSwxMiAr
MTkzLDEyIEBAIHByaXZhdGU6CiAgICAgICAgIHN3aXRjaCAob3ApIHsKICAgICAgICAgY2FzZSBK
U0NvbnN0YW50OgogICAgICAgICBjYXNlIFdlYWtKU0NvbnN0YW50OiB7Ci0gICAgICAgICAgICBj
aGFuZ2VkIHw9IHNldFByZWRpY3Rpb24oc3BlY3VsYXRpb25Gcm9tVmFsdWUobV9ncmFwaC52YWx1
ZU9mSlNDb25zdGFudChtX2NvbXBpbGVJbmRleCkpKTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0g
c2V0UHJlZGljdGlvbihzcGVjdWxhdGlvbkZyb21WYWx1ZShtX2dyYXBoLnZhbHVlT2ZKU0NvbnN0
YW50KG5vZGUpKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAg
CiAgICAgICAgIGNhc2UgR2V0TG9jYWw6IHsKLSAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0
YSogdmFyaWFibGVBY2Nlc3NEYXRhID0gbm9kZS52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKKyAgICAg
ICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhID0gbm9kZS0+dmFy
aWFibGVBY2Nlc3NEYXRhKCk7CiAgICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9u
ID0gdmFyaWFibGVBY2Nlc3NEYXRhLT5wcmVkaWN0aW9uKCk7CiAgICAgICAgICAgICBpZiAocHJl
ZGljdGlvbikKICAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbihwcmVk
aWN0aW9uKTsKQEAgLTIxMCwyMSArMjA4LDIxIEBAIHByaXZhdGU6CiAgICAgICAgIH0KICAgICAg
ICAgICAgIAogICAgICAgICBjYXNlIFNldExvY2FsOiB7Ci0gICAgICAgICAgICBWYXJpYWJsZUFj
Y2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9IG5vZGUudmFyaWFibGVBY2Nlc3NEYXRhKCk7
Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IHZhcmlhYmxlQWNjZXNzRGF0YS0+cHJlZGljdChtX2dy
YXBoW25vZGUuY2hpbGQxKCldLnByZWRpY3Rpb24oKSk7CisgICAgICAgICAgICBWYXJpYWJsZUFj
Y2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgp
OworICAgICAgICAgICAgY2hhbmdlZCB8PSB2YXJpYWJsZUFjY2Vzc0RhdGEtPnByZWRpY3Qobm9k
ZS0+Y2hpbGQxKCktPnByZWRpY3Rpb24oKSk7CiAKICAgICAgICAgICAgIC8vIEFzc3VtZSBjb25z
ZXJ2YXRpdmVseSB0aGF0IGEgU2V0TG9jYWwgaW1wbGllcyB0aGF0IHRoZSB2YWx1ZSBtYXkgZmxv
dyB0aHJvdWdoIGEgbG9vcCwKICAgICAgICAgICAgIC8vIGFuZCBzbyB3ZSB3b3VsZCBoYXZlIG92
ZXJmbG93IGxlYWRpbmcgdG8gdGhlIHByb2dyYW0gIm9ic2VydmluZyIgbnVtYmVycyBldmVuIGlm
IGFsbAogICAgICAgICAgICAgLy8gdXNlcnMgb2YgdGhlIHZhbHVlIGFyZSBkb2luZyB0b0ludDMy
LiBJdCBtaWdodCBiZSB3b3J0aHdoaWxlIHRvIHJldmlzaXQgdGhpcyBhdCBzb21lCiAgICAgICAg
ICAgICAvLyBwb2ludCBhbmQgYWN0dWFsbHkgY2hlY2sgaWYgdGhlIGRhdGEgZmxvdyBpbnZvbHZl
cyBsb29wcywgYnV0IHJpZ2h0IG5vdyBJIGRvbid0IHRoaW5rCiAgICAgICAgICAgICAvLyB3ZSBo
YXZlIGV2aWRlbmNlIHRoYXQgdGhpcyB3b3VsZCBiZSBiZW5lZmljaWFsIGZvciBiZW5jaG1hcmtz
LgotICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLm1lcmdlRmxh
Z3ModmFyaWFibGVBY2Nlc3NEYXRhLT5mbGFncygpIHwgTm9kZVVzZWRBc051bWJlcik7CisgICAg
ICAgICAgICBjaGFuZ2VkIHw9IG5vZGUtPmNoaWxkMSgpLT5tZXJnZUZsYWdzKHZhcmlhYmxlQWNj
ZXNzRGF0YS0+ZmxhZ3MoKSB8IE5vZGVVc2VkQXNOdW1iZXIpOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBjYXNlIEZsdXNoOiB7CiAgICAgICAg
ICAgICAvLyBNYWtlIHN1cmUgdGhhdCB0aGUgYW5hbHlzaXMga25vd3MgdGhhdCBmbHVzaGVkIGxv
Y2FscyBlc2NhcGUuCi0gICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNj
ZXNzRGF0YSA9IG5vZGUudmFyaWFibGVBY2Nlc3NEYXRhKCk7CisgICAgICAgICAgICBWYXJpYWJs
ZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0
YSgpOwogICAgICAgICAgICAgY2hhbmdlZCB8PSB2YXJpYWJsZUFjY2Vzc0RhdGEtPm1lcmdlRmxh
Z3MoTm9kZVVzZWRBc1ZhbHVlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkBAIC0y
MzgsOCArMjM2LDggQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGNoYW5nZWQgfD0gc2V0UHJlZGlj
dGlvbihTcGVjSW50MzIpOwogICAgICAgICAgICAgZmxhZ3MgfD0gTm9kZVVzZWRBc0ludCB8IE5v
ZGVVc2VkQXNJbnRMb2NhbGx5OwogICAgICAgICAgICAgZmxhZ3MgJj0gfihOb2RlVXNlZEFzTnVt
YmVyIHwgTm9kZU5lZWRzTmVnWmVybyB8IE5vZGVVc2VkQXNPdGhlcik7Ci0gICAgICAgICAgICBj
aGFuZ2VkIHw9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ubWVyZ2VGbGFncyhmbGFncyk7Ci0gICAg
ICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbm9kZS5jaGlsZDIoKV0ubWVyZ2VGbGFncyhmbGFn
cyk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG5vZGUtPmNoaWxkMSgpLT5tZXJnZUZsYWdzKGZs
YWdzKTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbm9kZS0+Y2hpbGQyKCktPm1lcmdlRmxhZ3Mo
ZmxhZ3MpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIApAQCAt
MjQ3LDUwICsyNDUsNTAgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGNoYW5nZWQgfD0gc2V0UHJl
ZGljdGlvbihTcGVjSW50MzIpOwogICAgICAgICAgICAgZmxhZ3MgfD0gTm9kZVVzZWRBc0ludCB8
IE5vZGVVc2VkQXNJbnRMb2NhbGx5OwogICAgICAgICAgICAgZmxhZ3MgJj0gfihOb2RlVXNlZEFz
TnVtYmVyIHwgTm9kZU5lZWRzTmVnWmVybyB8IE5vZGVVc2VkQXNPdGhlcik7Ci0gICAgICAgICAg
ICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ubWVyZ2VGbGFncyhmbGFncyk7Cisg
ICAgICAgICAgICBjaGFuZ2VkIHw9IG5vZGUtPmNoaWxkMSgpLT5tZXJnZUZsYWdzKGZsYWdzKTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2Fz
ZSBBcnJheVBvcDogewotICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVByZWRpY3Rpb24obm9k
ZS5nZXRIZWFwUHJlZGljdGlvbigpKTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVk
aWN0aW9uKG5vZGUtPmdldEhlYXBQcmVkaWN0aW9uKCkpOwogICAgICAgICAgICAgY2hhbmdlZCB8
PSBtZXJnZURlZmF1bHRGbGFncyhub2RlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9
CiAKICAgICAgICAgY2FzZSBBcnJheVB1c2g6IHsKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVy
Z2VQcmVkaWN0aW9uKG5vZGUuZ2V0SGVhcFByZWRpY3Rpb24oKSk7Ci0gICAgICAgICAgICBjaGFu
Z2VkIHw9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ubWVyZ2VGbGFncyhOb2RlVXNlZEFzVmFsdWUp
OwotICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQyKCldLm1lcmdlRmxh
Z3MoTm9kZVVzZWRBc1ZhbHVlKTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0
aW9uKG5vZGUtPmdldEhlYXBQcmVkaWN0aW9uKCkpOworICAgICAgICAgICAgY2hhbmdlZCB8PSBu
b2RlLT5jaGlsZDEoKS0+bWVyZ2VGbGFncyhOb2RlVXNlZEFzVmFsdWUpOworICAgICAgICAgICAg
Y2hhbmdlZCB8PSBub2RlLT5jaGlsZDIoKS0+bWVyZ2VGbGFncyhOb2RlVXNlZEFzVmFsdWUpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIFJlZ0V4cEV4ZWM6
CiAgICAgICAgIGNhc2UgUmVnRXhwVGVzdDogewotICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJn
ZVByZWRpY3Rpb24obm9kZS5nZXRIZWFwUHJlZGljdGlvbigpKTsKKyAgICAgICAgICAgIGNoYW5n
ZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKG5vZGUtPmdldEhlYXBQcmVkaWN0aW9uKCkpOwogICAgICAg
ICAgICAgY2hhbmdlZCB8PSBtZXJnZURlZmF1bHRGbGFncyhub2RlKTsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBTdHJpbmdDaGFyQ29kZUF0OiB7CiAgICAg
ICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbihTcGVjSW50MzIpOwotICAgICAgICAg
ICAgY2hhbmdlZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLm1lcmdlRmxhZ3MoTm9kZVVzZWRB
c1ZhbHVlKTsKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaFtub2RlLmNoaWxkMigpXS5t
ZXJnZUZsYWdzKE5vZGVVc2VkQXNOdW1iZXIgfCBOb2RlVXNlZEFzT3RoZXIgfCBOb2RlVXNlZEFz
SW50IHwgTm9kZVVzZWRBc0ludExvY2FsbHkpOworICAgICAgICAgICAgY2hhbmdlZCB8PSBub2Rl
LT5jaGlsZDEoKS0+bWVyZ2VGbGFncyhOb2RlVXNlZEFzVmFsdWUpOworICAgICAgICAgICAgY2hh
bmdlZCB8PSBub2RlLT5jaGlsZDIoKS0+bWVyZ2VGbGFncyhOb2RlVXNlZEFzTnVtYmVyIHwgTm9k
ZVVzZWRBc090aGVyIHwgTm9kZVVzZWRBc0ludCB8IE5vZGVVc2VkQXNJbnRMb2NhbGx5KTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBVSW50MzJUb051bWJl
cjogewotICAgICAgICAgICAgaWYgKG5vZGVDYW5TcGVjdWxhdGVJbnRlZ2VyKG5vZGUuYXJpdGhO
b2RlRmxhZ3MoKSkpCisgICAgICAgICAgICBpZiAobm9kZUNhblNwZWN1bGF0ZUludGVnZXIobm9k
ZS0+YXJpdGhOb2RlRmxhZ3MoKSkpCiAgICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVBy
ZWRpY3Rpb24oU3BlY0ludDMyKTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBj
aGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbihTcGVjTnVtYmVyKTsKICAgICAgICAgICAgIAotICAg
ICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLm1lcmdlRmxhZ3MoZmxh
Z3MpOworICAgICAgICAgICAgY2hhbmdlZCB8PSBub2RlLT5jaGlsZDEoKS0+bWVyZ2VGbGFncyhm
bGFncyk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCiAgICAgICAgIGNhc2UgVmFs
dWVBZGQ6IHsKLSAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIGxlZnQgPSBtX2dyYXBoW25vZGUu
Y2hpbGQxKCldLnByZWRpY3Rpb24oKTsKLSAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHJpZ2h0
ID0gbV9ncmFwaFtub2RlLmNoaWxkMigpXS5wcmVkaWN0aW9uKCk7CisgICAgICAgICAgICBTcGVj
dWxhdGVkVHlwZSBsZWZ0ID0gbm9kZS0+Y2hpbGQxKCktPnByZWRpY3Rpb24oKTsKKyAgICAgICAg
ICAgIFNwZWN1bGF0ZWRUeXBlIHJpZ2h0ID0gbm9kZS0+Y2hpbGQyKCktPnByZWRpY3Rpb24oKTsK
ICAgICAgICAgICAgIAogICAgICAgICAgICAgQWRkU3BlY3VsYXRpb25Nb2RlIG1vZGUgPSBEb250
U3BlY3VsYXRlSW50ZWdlcjsKICAgICAgICAgICAgIApAQCAtMzA3LDIyICszMDUsMjIgQEAgcHJp
dmF0ZToKICAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVByZWRpY3Rpb24oU3Bl
Y1N0cmluZyB8IFNwZWNJbnQzMiB8IFNwZWNEb3VibGUpOwogICAgICAgICAgICAgfQogICAgICAg
ICAgICAgCi0gICAgICAgICAgICBpZiAoaXNOb3ROZWdaZXJvKG5vZGUuY2hpbGQxKCkuaW5kZXgo
KSkgfHwgaXNOb3ROZWdaZXJvKG5vZGUuY2hpbGQyKCkuaW5kZXgoKSkpCisgICAgICAgICAgICBp
ZiAoaXNOb3ROZWdaZXJvKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSkgfHwgaXNOb3ROZWdaZXJvKG5v
ZGUtPmNoaWxkMigpLm5vZGUoKSkpCiAgICAgICAgICAgICAgICAgZmxhZ3MgJj0gfk5vZGVOZWVk
c05lZ1plcm87Ci0gICAgICAgICAgICBpZiAobV9ncmFwaFtub2RlLmNoaWxkMSgpXS5oYXNOdW1i
ZXJSZXN1bHQoKSB8fCBtX2dyYXBoW25vZGUuY2hpbGQyKCldLmhhc051bWJlclJlc3VsdCgpKQor
ICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5oYXNOdW1iZXJSZXN1bHQoKSB8fCBub2Rl
LT5jaGlsZDIoKS0+aGFzTnVtYmVyUmVzdWx0KCkpCiAgICAgICAgICAgICAgICAgZmxhZ3MgJj0g
fk5vZGVVc2VkQXNPdGhlcjsKICAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKG1vZGUgIT0g
U3BlY3VsYXRlSW50ZWdlcikKICAgICAgICAgICAgICAgICBmbGFncyB8PSBOb2RlVXNlZEFzTnVt
YmVyOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbm9kZS5j
aGlsZDEoKV0ubWVyZ2VGbGFncyhmbGFncyk7Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3Jh
cGhbbm9kZS5jaGlsZDIoKV0ubWVyZ2VGbGFncyhmbGFncyk7CisgICAgICAgICAgICBjaGFuZ2Vk
IHw9IG5vZGUtPmNoaWxkMSgpLT5tZXJnZUZsYWdzKGZsYWdzKTsKKyAgICAgICAgICAgIGNoYW5n
ZWQgfD0gbm9kZS0+Y2hpbGQyKCktPm1lcmdlRmxhZ3MoZmxhZ3MpOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBjYXNlIEFyaXRoQWRkOiB7Ci0g
ICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSBsZWZ0ID0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5w
cmVkaWN0aW9uKCk7Ci0gICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSByaWdodCA9IG1fZ3JhcGhb
bm9kZS5jaGlsZDIoKV0ucHJlZGljdGlvbigpOworICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUg
bGVmdCA9IG5vZGUtPmNoaWxkMSgpLT5wcmVkaWN0aW9uKCk7CisgICAgICAgICAgICBTcGVjdWxh
dGVkVHlwZSByaWdodCA9IG5vZGUtPmNoaWxkMigpLT5wcmVkaWN0aW9uKCk7CiAgICAgICAgICAg
ICAKICAgICAgICAgICAgIEFkZFNwZWN1bGF0aW9uTW9kZSBtb2RlID0gRG9udFNwZWN1bGF0ZUlu
dGVnZXI7CiAgICAgICAgICAgICAKQEAgLTMzMywyMSArMzMxLDIxIEBAIHByaXZhdGU6CiAgICAg
ICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKHNwZWN1bGF0ZWREb3Vi
bGVUeXBlRm9yUHJlZGljdGlvbnMobGVmdCwgcmlnaHQpKTsKICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIAotICAgICAgICAgICAgaWYgKGlzTm90TmVnWmVybyhub2RlLmNoaWxkMSgpLmluZGV4
KCkpIHx8IGlzTm90TmVnWmVybyhub2RlLmNoaWxkMigpLmluZGV4KCkpKQorICAgICAgICAgICAg
aWYgKGlzTm90TmVnWmVybyhub2RlLT5jaGlsZDEoKS5ub2RlKCkpIHx8IGlzTm90TmVnWmVybyhu
b2RlLT5jaGlsZDIoKS5ub2RlKCkpKQogICAgICAgICAgICAgICAgIGZsYWdzICY9IH5Ob2RlTmVl
ZHNOZWdaZXJvOwogICAgICAgICAgICAgZmxhZ3MgJj0gfk5vZGVVc2VkQXNPdGhlcjsKICAgICAg
ICAgICAgIAogICAgICAgICAgICAgaWYgKG1vZGUgIT0gU3BlY3VsYXRlSW50ZWdlcikKICAgICAg
ICAgICAgICAgICBmbGFncyB8PSBOb2RlVXNlZEFzTnVtYmVyOwogICAgICAgICAgICAgCi0gICAg
ICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ubWVyZ2VGbGFncyhmbGFn
cyk7Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbm9kZS5jaGlsZDIoKV0ubWVyZ2VG
bGFncyhmbGFncyk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG5vZGUtPmNoaWxkMSgpLT5tZXJn
ZUZsYWdzKGZsYWdzKTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbm9kZS0+Y2hpbGQyKCktPm1l
cmdlRmxhZ3MoZmxhZ3MpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAg
ICAgIAogICAgICAgICBjYXNlIEFyaXRoU3ViOiB7Ci0gICAgICAgICAgICBTcGVjdWxhdGVkVHlw
ZSBsZWZ0ID0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5wcmVkaWN0aW9uKCk7Ci0gICAgICAgICAg
ICBTcGVjdWxhdGVkVHlwZSByaWdodCA9IG1fZ3JhcGhbbm9kZS5jaGlsZDIoKV0ucHJlZGljdGlv
bigpOworICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgbGVmdCA9IG5vZGUtPmNoaWxkMSgpLT5w
cmVkaWN0aW9uKCk7CisgICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSByaWdodCA9IG5vZGUtPmNo
aWxkMigpLT5wcmVkaWN0aW9uKCk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIEFkZFNwZWN1
bGF0aW9uTW9kZSBtb2RlID0gRG9udFNwZWN1bGF0ZUludGVnZXI7CiAgICAgICAgICAgICAKQEAg
LTM1OCwzOSArMzU2LDM5IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQg
fD0gbWVyZ2VQcmVkaWN0aW9uKHNwZWN1bGF0ZWREb3VibGVUeXBlRm9yUHJlZGljdGlvbnMobGVm
dCwgcmlnaHQpKTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgaWYgKGlzTm90WmVybyhu
b2RlLmNoaWxkMSgpLmluZGV4KCkpIHx8IGlzTm90WmVybyhub2RlLmNoaWxkMigpLmluZGV4KCkp
KQorICAgICAgICAgICAgaWYgKGlzTm90WmVybyhub2RlLT5jaGlsZDEoKS5ub2RlKCkpIHx8IGlz
Tm90WmVybyhub2RlLT5jaGlsZDIoKS5ub2RlKCkpKQogICAgICAgICAgICAgICAgIGZsYWdzICY9
IH5Ob2RlTmVlZHNOZWdaZXJvOwogICAgICAgICAgICAgZmxhZ3MgJj0gfk5vZGVVc2VkQXNPdGhl
cjsKICAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKG1vZGUgIT0gU3BlY3VsYXRlSW50ZWdl
cikKICAgICAgICAgICAgICAgICBmbGFncyB8PSBOb2RlVXNlZEFzTnVtYmVyOwogICAgICAgICAg
ICAgCi0gICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ubWVyZ2VG
bGFncyhmbGFncyk7Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbm9kZS5jaGlsZDIo
KV0ubWVyZ2VGbGFncyhmbGFncyk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG5vZGUtPmNoaWxk
MSgpLT5tZXJnZUZsYWdzKGZsYWdzKTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbm9kZS0+Y2hp
bGQyKCktPm1lcmdlRmxhZ3MoZmxhZ3MpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0K
ICAgICAgICAgICAgIAogICAgICAgICBjYXNlIEFyaXRoTmVnYXRlOgotICAgICAgICAgICAgaWYg
KG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ucHJlZGljdGlvbigpKSB7CisgICAgICAgICAgICBpZiAo
bm9kZS0+Y2hpbGQxKCktPnByZWRpY3Rpb24oKSkgewogICAgICAgICAgICAgICAgIGlmIChtX2dy
YXBoLm5lZ2F0ZVNob3VsZFNwZWN1bGF0ZUludGVnZXIobm9kZSkpCiAgICAgICAgICAgICAgICAg
ICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKFNwZWNJbnQzMik7CiAgICAgICAgICAgICAg
ICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbihz
cGVjdWxhdGVkRG91YmxlVHlwZUZvclByZWRpY3Rpb24obV9ncmFwaFtub2RlLmNoaWxkMSgpXS5w
cmVkaWN0aW9uKCkpKTsKKyAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVByZWRp
Y3Rpb24oc3BlY3VsYXRlZERvdWJsZVR5cGVGb3JQcmVkaWN0aW9uKG5vZGUtPmNoaWxkMSgpLT5w
cmVkaWN0aW9uKCkpKTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgZmxhZ3MgJj0gfk5v
ZGVVc2VkQXNPdGhlcjsKIAotICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW25vZGUuY2hp
bGQxKCldLm1lcmdlRmxhZ3MoZmxhZ3MpOworICAgICAgICAgICAgY2hhbmdlZCB8PSBub2RlLT5j
aGlsZDEoKS0+bWVyZ2VGbGFncyhmbGFncyk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgIAogICAgICAgICBjYXNlIEFyaXRoTWluOgogICAgICAgICBjYXNlIEFyaXRoTWF4OiB7Ci0g
ICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSBsZWZ0ID0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5w
cmVkaWN0aW9uKCk7Ci0gICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSByaWdodCA9IG1fZ3JhcGhb
bm9kZS5jaGlsZDIoKV0ucHJlZGljdGlvbigpOworICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUg
bGVmdCA9IG5vZGUtPmNoaWxkMSgpLT5wcmVkaWN0aW9uKCk7CisgICAgICAgICAgICBTcGVjdWxh
dGVkVHlwZSByaWdodCA9IG5vZGUtPmNoaWxkMigpLT5wcmVkaWN0aW9uKCk7CiAgICAgICAgICAg
ICAKICAgICAgICAgICAgIGlmIChsZWZ0ICYmIHJpZ2h0KSB7Ci0gICAgICAgICAgICAgICAgaWYg
KE5vZGU6OnNob3VsZFNwZWN1bGF0ZUludGVnZXJGb3JBcml0aG1ldGljKG1fZ3JhcGhbbm9kZS5j
aGlsZDEoKV0sIG1fZ3JhcGhbbm9kZS5jaGlsZDIoKV0pCi0gICAgICAgICAgICAgICAgICAgICYm
IG5vZGVDYW5TcGVjdWxhdGVJbnRlZ2VyKG5vZGUuYXJpdGhOb2RlRmxhZ3MoKSkpCisgICAgICAg
ICAgICAgICAgaWYgKE5vZGU6OnNob3VsZFNwZWN1bGF0ZUludGVnZXJGb3JBcml0aG1ldGljKG5v
ZGUtPmNoaWxkMSgpLm5vZGUoKSwgbm9kZS0+Y2hpbGQyKCkubm9kZSgpKQorICAgICAgICAgICAg
ICAgICAgICAmJiBub2RlQ2FuU3BlY3VsYXRlSW50ZWdlcihub2RlLT5hcml0aE5vZGVGbGFncygp
KSkKICAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVByZWRpY3Rpb24oU3BlY0lu
dDMyKTsKICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQg
fD0gbWVyZ2VQcmVkaWN0aW9uKHNwZWN1bGF0ZWREb3VibGVUeXBlRm9yUHJlZGljdGlvbnMobGVm
dCwgcmlnaHQpKTsKQEAgLTM5OSwxNCArMzk3LDE0IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBm
bGFncyB8PSBOb2RlVXNlZEFzTnVtYmVyOwogICAgICAgICAgICAgZmxhZ3MgJj0gfk5vZGVVc2Vk
QXNPdGhlcjsKIAotICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQxKCld
Lm1lcmdlRmxhZ3MoZmxhZ3MpOwotICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW25vZGUu
Y2hpbGQyKCldLm1lcmdlRmxhZ3MoZmxhZ3MpOworICAgICAgICAgICAgY2hhbmdlZCB8PSBub2Rl
LT5jaGlsZDEoKS0+bWVyZ2VGbGFncyhmbGFncyk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG5v
ZGUtPmNoaWxkMigpLT5tZXJnZUZsYWdzKGZsYWdzKTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICB9CiAKICAgICAgICAgY2FzZSBBcml0aE11bDogewotICAgICAgICAgICAgU3BlY3VsYXRl
ZFR5cGUgbGVmdCA9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ucHJlZGljdGlvbigpOwotICAgICAg
ICAgICAgU3BlY3VsYXRlZFR5cGUgcmlnaHQgPSBtX2dyYXBoW25vZGUuY2hpbGQyKCldLnByZWRp
Y3Rpb24oKTsKKyAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIGxlZnQgPSBub2RlLT5jaGlsZDEo
KS0+cHJlZGljdGlvbigpOworICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgcmlnaHQgPSBub2Rl
LT5jaGlsZDIoKS0+cHJlZGljdGlvbigpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAo
bGVmdCAmJiByaWdodCkgewogICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLm11bFNob3VsZFNw
ZWN1bGF0ZUludGVnZXIobm9kZSkpCkBAIC00MjIsOCArNDIwLDggQEAgcHJpdmF0ZToKICAgICAg
ICAgICAgIC8vIGl0c2VsZiB1bmxlc3Mgd2UgY2FuIHByb3ZlIHRoYXQgdGhlcmUgaXMgbm8gd2F5
IGZvciB0aGUgdmFsdWVzCiAgICAgICAgICAgICAvLyBwcm9kdWNlZCB0byBjYXVzZSBkb3VibGUg
cm91bmRpbmcuCiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGlmICghaXNXaXRoaW5Qb3dlck9m
VHdvKG5vZGUuY2hpbGQxKCkuaW5kZXgoKSwgMjIpCi0gICAgICAgICAgICAgICAgJiYgIWlzV2l0
aGluUG93ZXJPZlR3byhub2RlLmNoaWxkMigpLmluZGV4KCksIDIyKSkKKyAgICAgICAgICAgIGlm
ICghaXNXaXRoaW5Qb3dlck9mVHdvKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgMjIpCisgICAgICAg
ICAgICAgICAgJiYgIWlzV2l0aGluUG93ZXJPZlR3byhub2RlLT5jaGlsZDIoKS5ub2RlKCksIDIy
KSkKICAgICAgICAgICAgICAgICBmbGFncyB8PSBOb2RlVXNlZEFzTnVtYmVyOwogICAgICAgICAg
ICAgCiAgICAgICAgICAgICBjaGFuZ2VkIHw9IG5vZGUubWVyZ2VGbGFncyhmbGFncyk7CkBAIC00
MzEsMTggKzQyOSwxOCBAQCBwcml2YXRlOgogICAgICAgICAgICAgZmxhZ3MgfD0gTm9kZVVzZWRB
c051bWJlciB8IE5vZGVOZWVkc05lZ1plcm87CiAgICAgICAgICAgICBmbGFncyAmPSB+Tm9kZVVz
ZWRBc090aGVyOwogCi0gICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbm9kZS5jaGlsZDEo
KV0ubWVyZ2VGbGFncyhmbGFncyk7Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbm9k
ZS5jaGlsZDIoKV0ubWVyZ2VGbGFncyhmbGFncyk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG5v
ZGUtPmNoaWxkMSgpLT5tZXJnZUZsYWdzKGZsYWdzKTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0g
bm9kZS0+Y2hpbGQyKCktPm1lcmdlRmxhZ3MoZmxhZ3MpOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBjYXNlIEFyaXRoRGl2OiB7Ci0gICAgICAg
ICAgICBTcGVjdWxhdGVkVHlwZSBsZWZ0ID0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5wcmVkaWN0
aW9uKCk7Ci0gICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSByaWdodCA9IG1fZ3JhcGhbbm9kZS5j
aGlsZDIoKV0ucHJlZGljdGlvbigpOworICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgbGVmdCA9
IG5vZGUtPmNoaWxkMSgpLT5wcmVkaWN0aW9uKCk7CisgICAgICAgICAgICBTcGVjdWxhdGVkVHlw
ZSByaWdodCA9IG5vZGUtPmNoaWxkMigpLT5wcmVkaWN0aW9uKCk7CiAgICAgICAgICAgICAKICAg
ICAgICAgICAgIGlmIChsZWZ0ICYmIHJpZ2h0KSB7Ci0gICAgICAgICAgICAgICAgaWYgKE5vZGU6
OnNob3VsZFNwZWN1bGF0ZUludGVnZXJGb3JBcml0aG1ldGljKG1fZ3JhcGhbbm9kZS5jaGlsZDEo
KV0sIG1fZ3JhcGhbbm9kZS5jaGlsZDIoKV0pCi0gICAgICAgICAgICAgICAgICAgICYmIG5vZGVD
YW5TcGVjdWxhdGVJbnRlZ2VyKG5vZGUuYXJpdGhOb2RlRmxhZ3MoKSkpCisgICAgICAgICAgICAg
ICAgaWYgKE5vZGU6OnNob3VsZFNwZWN1bGF0ZUludGVnZXJGb3JBcml0aG1ldGljKG5vZGUtPmNo
aWxkMSgpLm5vZGUoKSwgbm9kZS0+Y2hpbGQyKCkubm9kZSgpKQorICAgICAgICAgICAgICAgICAg
ICAmJiBub2RlQ2FuU3BlY3VsYXRlSW50ZWdlcihub2RlLT5hcml0aE5vZGVGbGFncygpKSkKICAg
ICAgICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVByZWRpY3Rpb24oU3BlY0ludDMyKTsK
ICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVy
Z2VQcmVkaWN0aW9uKFNwZWNEb3VibGUpOwpAQCAtNDU2LDE4ICs0NTQsMTggQEAgcHJpdmF0ZToK
ICAgICAgICAgICAgIGZsYWdzIHw9IE5vZGVVc2VkQXNOdW1iZXIgfCBOb2RlTmVlZHNOZWdaZXJv
OwogICAgICAgICAgICAgZmxhZ3MgJj0gfk5vZGVVc2VkQXNPdGhlcjsKIAotICAgICAgICAgICAg
Y2hhbmdlZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLm1lcmdlRmxhZ3MoZmxhZ3MpOwotICAg
ICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQyKCldLm1lcmdlRmxhZ3MoZmxh
Z3MpOworICAgICAgICAgICAgY2hhbmdlZCB8PSBub2RlLT5jaGlsZDEoKS0+bWVyZ2VGbGFncyhm
bGFncyk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG5vZGUtPmNoaWxkMigpLT5tZXJnZUZsYWdz
KGZsYWdzKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKICAg
ICAgICAgY2FzZSBBcml0aE1vZDogewotICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgbGVmdCA9
IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ucHJlZGljdGlvbigpOwotICAgICAgICAgICAgU3BlY3Vs
YXRlZFR5cGUgcmlnaHQgPSBtX2dyYXBoW25vZGUuY2hpbGQyKCldLnByZWRpY3Rpb24oKTsKKyAg
ICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIGxlZnQgPSBub2RlLT5jaGlsZDEoKS0+cHJlZGljdGlv
bigpOworICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgcmlnaHQgPSBub2RlLT5jaGlsZDIoKS0+
cHJlZGljdGlvbigpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAobGVmdCAmJiByaWdo
dCkgewotICAgICAgICAgICAgICAgIGlmIChOb2RlOjpzaG91bGRTcGVjdWxhdGVJbnRlZ2VyRm9y
QXJpdGhtZXRpYyhtX2dyYXBoW25vZGUuY2hpbGQxKCldLCBtX2dyYXBoW25vZGUuY2hpbGQyKCld
KQotICAgICAgICAgICAgICAgICAgICAmJiBub2RlQ2FuU3BlY3VsYXRlSW50ZWdlcihub2RlLmFy
aXRoTm9kZUZsYWdzKCkpKQorICAgICAgICAgICAgICAgIGlmIChOb2RlOjpzaG91bGRTcGVjdWxh
dGVJbnRlZ2VyRm9yQXJpdGhtZXRpYyhub2RlLT5jaGlsZDEoKS5ub2RlKCksIG5vZGUtPmNoaWxk
MigpLm5vZGUoKSkKKyAgICAgICAgICAgICAgICAgICAgJiYgbm9kZUNhblNwZWN1bGF0ZUludGVn
ZXIobm9kZS0+YXJpdGhOb2RlRmxhZ3MoKSkpCiAgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQg
fD0gbWVyZ2VQcmVkaWN0aW9uKFNwZWNJbnQzMik7CiAgICAgICAgICAgICAgICAgZWxzZQogICAg
ICAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbihTcGVjRG91YmxlKTsK
QEAgLTQ3Niw4ICs0NzQsOCBAQCBwcml2YXRlOgogICAgICAgICAgICAgZmxhZ3MgfD0gTm9kZVVz
ZWRBc051bWJlciB8IE5vZGVOZWVkc05lZ1plcm87CiAgICAgICAgICAgICBmbGFncyAmPSB+Tm9k
ZVVzZWRBc090aGVyOwogCi0gICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbm9kZS5jaGls
ZDEoKV0ubWVyZ2VGbGFncyhmbGFncyk7Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhb
bm9kZS5jaGlsZDIoKV0ubWVyZ2VGbGFncyhmbGFncyk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9
IG5vZGUtPmNoaWxkMSgpLT5tZXJnZUZsYWdzKGZsYWdzKTsKKyAgICAgICAgICAgIGNoYW5nZWQg
fD0gbm9kZS0+Y2hpbGQyKCktPm1lcmdlRmxhZ3MoZmxhZ3MpOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIH0KICAgICAgICAgICAgIApAQCAtNDg1LDE5ICs0ODMsMTkgQEAgcHJpdmF0ZToK
ICAgICAgICAgICAgIGNoYW5nZWQgfD0gc2V0UHJlZGljdGlvbihTcGVjRG91YmxlKTsKICAgICAg
ICAgICAgIGZsYWdzIHw9IE5vZGVVc2VkQXNOdW1iZXIgfCBOb2RlTmVlZHNOZWdaZXJvOwogICAg
ICAgICAgICAgZmxhZ3MgJj0gfk5vZGVVc2VkQXNPdGhlcjsKLSAgICAgICAgICAgIGNoYW5nZWQg
fD0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5tZXJnZUZsYWdzKGZsYWdzKTsKKyAgICAgICAgICAg
IGNoYW5nZWQgfD0gbm9kZS0+Y2hpbGQxKCktPm1lcmdlRmxhZ3MoZmxhZ3MpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBjYXNlIEFyaXRoQWJz
OiB7Ci0gICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSBjaGlsZCA9IG1fZ3JhcGhbbm9kZS5jaGls
ZDEoKV0ucHJlZGljdGlvbigpOworICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgY2hpbGQgPSBu
b2RlLT5jaGlsZDEoKS0+cHJlZGljdGlvbigpOwogICAgICAgICAgICAgaWYgKGlzSW50MzJTcGVj
dWxhdGlvbkZvckFyaXRobWV0aWMoY2hpbGQpCi0gICAgICAgICAgICAgICAgJiYgbm9kZUNhblNw
ZWN1bGF0ZUludGVnZXIobm9kZS5hcml0aE5vZGVGbGFncygpKSkKKyAgICAgICAgICAgICAgICAm
JiBub2RlQ2FuU3BlY3VsYXRlSW50ZWdlcihub2RlLT5hcml0aE5vZGVGbGFncygpKSkKICAgICAg
ICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbihTcGVjSW50MzIpOwogICAgICAg
ICAgICAgZWxzZQogICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKHNw
ZWN1bGF0ZWREb3VibGVUeXBlRm9yUHJlZGljdGlvbihjaGlsZCkpOwogCi0gICAgICAgICAgICBj
aGFuZ2VkIHw9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ubWVyZ2VGbGFncyhmbGFncyk7CisgICAg
ICAgICAgICBjaGFuZ2VkIHw9IG5vZGUtPmNoaWxkMSgpLT5tZXJnZUZsYWdzKGZsYWdzKTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKQEAgLTUyNywzMSArNTI1
LDMxIEBAIHByaXZhdGU6CiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIEdldEJ5SWQ6IHsKLSAg
ICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKG5vZGUuZ2V0SGVhcFByZWRpY3Rp
b24oKSk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbihub2RlLT5nZXRI
ZWFwUHJlZGljdGlvbigpKTsKICAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VEZWZhdWx0Rmxh
Z3Mobm9kZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCiAg
ICAgICAgIGNhc2UgR2V0QnlJZEZsdXNoOgotICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVBy
ZWRpY3Rpb24obm9kZS5nZXRIZWFwUHJlZGljdGlvbigpKTsKKyAgICAgICAgICAgIGNoYW5nZWQg
fD0gbWVyZ2VQcmVkaWN0aW9uKG5vZGUtPmdldEhlYXBQcmVkaWN0aW9uKCkpOwogICAgICAgICAg
ICAgY2hhbmdlZCB8PSBtZXJnZURlZmF1bHRGbGFncyhub2RlKTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgR2V0QnlWYWw6IHsKLSAgICAgICAgICAgIGlm
IChtX2dyYXBoW25vZGUuY2hpbGQxKCldLnNob3VsZFNwZWN1bGF0ZUZsb2F0MzJBcnJheSgpCi0g
ICAgICAgICAgICAgICAgfHwgbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5zaG91bGRTcGVjdWxhdGVG
bG9hdDY0QXJyYXkoKSkKKyAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3Bl
Y3VsYXRlRmxvYXQzMkFycmF5KCkKKyAgICAgICAgICAgICAgICB8fCBub2RlLT5jaGlsZDEoKS0+
c2hvdWxkU3BlY3VsYXRlRmxvYXQ2NEFycmF5KCkpCiAgICAgICAgICAgICAgICAgY2hhbmdlZCB8
PSBtZXJnZVByZWRpY3Rpb24oU3BlY0RvdWJsZSk7CiAgICAgICAgICAgICBlbHNlCiAgICAgICAg
ICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVByZWRpY3Rpb24obm9kZS5nZXRIZWFwUHJlZGljdGlv
bigpKTsKIAotICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLm1l
cmdlRmxhZ3MoTm9kZVVzZWRBc1ZhbHVlKTsKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFw
aFtub2RlLmNoaWxkMigpXS5tZXJnZUZsYWdzKE5vZGVVc2VkQXNOdW1iZXIgfCBOb2RlVXNlZEFz
T3RoZXIgfCBOb2RlVXNlZEFzSW50IHwgTm9kZVVzZWRBc0ludExvY2FsbHkpOworICAgICAgICAg
ICAgY2hhbmdlZCB8PSBub2RlLT5jaGlsZDEoKS0+bWVyZ2VGbGFncyhOb2RlVXNlZEFzVmFsdWUp
OworICAgICAgICAgICAgY2hhbmdlZCB8PSBub2RlLT5jaGlsZDIoKS0+bWVyZ2VGbGFncyhOb2Rl
VXNlZEFzTnVtYmVyIHwgTm9kZVVzZWRBc090aGVyIHwgTm9kZVVzZWRBc0ludCB8IE5vZGVVc2Vk
QXNJbnRMb2NhbGx5KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAg
ICAKICAgICAgICAgY2FzZSBHZXRNeUFyZ3VtZW50QnlWYWxTYWZlOiB7Ci0gICAgICAgICAgICBj
aGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbihub2RlLmdldEhlYXBQcmVkaWN0aW9uKCkpOwotICAg
ICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLm1lcmdlRmxhZ3MoTm9k
ZVVzZWRBc051bWJlciB8IE5vZGVVc2VkQXNPdGhlciB8IE5vZGVVc2VkQXNJbnQgfCBOb2RlVXNl
ZEFzSW50TG9jYWxseSk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbihu
b2RlLT5nZXRIZWFwUHJlZGljdGlvbigpKTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbm9kZS0+
Y2hpbGQxKCktPm1lcmdlRmxhZ3MoTm9kZVVzZWRBc051bWJlciB8IE5vZGVVc2VkQXNPdGhlciB8
IE5vZGVVc2VkQXNJbnQgfCBOb2RlVXNlZEFzSW50TG9jYWxseSk7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgfQogICAgICAgICAgICAgCkBAIC01NzEsMjUgKzU2OSwyMyBAQCBwcml2YXRl
OgogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBHZXRCeU9mZnNldDogewotICAgICAgICAgICAg
Y2hhbmdlZCB8PSBtZXJnZVByZWRpY3Rpb24obm9kZS5nZXRIZWFwUHJlZGljdGlvbigpKTsKKyAg
ICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKG5vZGUtPmdldEhlYXBQcmVkaWN0
aW9uKCkpOwogICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZURlZmF1bHRGbGFncyhub2RlKTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2Fz
ZSBDYWxsOgogICAgICAgICBjYXNlIENvbnN0cnVjdDogewotICAgICAgICAgICAgY2hhbmdlZCB8
PSBtZXJnZVByZWRpY3Rpb24obm9kZS5nZXRIZWFwUHJlZGljdGlvbigpKTsKLSAgICAgICAgICAg
IGZvciAodW5zaWduZWQgY2hpbGRJZHggPSBub2RlLmZpcnN0Q2hpbGQoKTsKLSAgICAgICAgICAg
ICAgICAgY2hpbGRJZHggPCBub2RlLmZpcnN0Q2hpbGQoKSArIG5vZGUubnVtQ2hpbGRyZW4oKTsK
LSAgICAgICAgICAgICAgICAgKytjaGlsZElkeCkgewotICAgICAgICAgICAgICAgIEVkZ2UgZWRn
ZSA9IG1fZ3JhcGgubV92YXJBcmdDaGlsZHJlbltjaGlsZElkeF07Ci0gICAgICAgICAgICAgICAg
Y2hhbmdlZCB8PSBtX2dyYXBoW2VkZ2VdLm1lcmdlRmxhZ3MoTm9kZVVzZWRBc1ZhbHVlKTsKLSAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKG5vZGUt
PmdldEhlYXBQcmVkaWN0aW9uKCkpOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBjaGlsZElk
eCA9IG5vZGUtPmZpcnN0Q2hpbGQoKTsKKyAgICAgICAgICAgICAgICAgY2hpbGRJZHggPCBub2Rl
LT5maXJzdENoaWxkKCkgKyBub2RlLT5udW1DaGlsZHJlbigpOworICAgICAgICAgICAgICAgICAr
K2NoaWxkSWR4KQorICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaC5tX3ZhckFyZ0No
aWxkcmVuW2NoaWxkSWR4XS0+bWVyZ2VGbGFncyhOb2RlVXNlZEFzVmFsdWUpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBjYXNlIENvbnZlcnRU
aGlzOiB7Ci0gICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uID0gbV9ncmFwaFtu
b2RlLmNoaWxkMSgpXS5wcmVkaWN0aW9uKCk7CisgICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSBw
cmVkaWN0aW9uID0gbm9kZS0+Y2hpbGQxKCktPnByZWRpY3Rpb24oKTsKICAgICAgICAgICAgIGlm
IChwcmVkaWN0aW9uKSB7CiAgICAgICAgICAgICAgICAgaWYgKHByZWRpY3Rpb24gJiB+U3BlY09i
amVjdE1hc2spIHsKICAgICAgICAgICAgICAgICAgICAgcHJlZGljdGlvbiAmPSBTcGVjT2JqZWN0
TWFzazsKQEAgLTYwMiwxMyArNTk4LDEzIEBAIHByaXZhdGU6CiAgICAgICAgIH0KICAgICAgICAg
ICAgIAogICAgICAgICBjYXNlIEdldEdsb2JhbFZhcjogewotICAgICAgICAgICAgY2hhbmdlZCB8
PSBtZXJnZVByZWRpY3Rpb24obm9kZS5nZXRIZWFwUHJlZGljdGlvbigpKTsKKyAgICAgICAgICAg
IGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKG5vZGUtPmdldEhlYXBQcmVkaWN0aW9uKCkpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBjYXNl
IFB1dEdsb2JhbFZhcjoKICAgICAgICAgY2FzZSBQdXRHbG9iYWxWYXJDaGVjazogewotICAgICAg
ICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLm1lcmdlRmxhZ3MoTm9kZVVz
ZWRBc1ZhbHVlKTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbm9kZS0+Y2hpbGQxKCktPm1lcmdl
RmxhZ3MoTm9kZVVzZWRBc1ZhbHVlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAg
ICAgICAgICAgICAKQEAgLTYxNyw3ICs2MTMsNyBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIFJl
c29sdmVCYXNlOgogICAgICAgICBjYXNlIFJlc29sdmVCYXNlU3RyaWN0UHV0OgogICAgICAgICBj
YXNlIFJlc29sdmVHbG9iYWw6IHsKLSAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rp
b24gPSBub2RlLmdldEhlYXBQcmVkaWN0aW9uKCk7CisgICAgICAgICAgICBTcGVjdWxhdGVkVHlw
ZSBwcmVkaWN0aW9uID0gbm9kZS0+Z2V0SGVhcFByZWRpY3Rpb24oKTsKICAgICAgICAgICAgIGNo
YW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKHByZWRpY3Rpb24pOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIH0KQEAgLTY0MywxOCArNjM5LDE2IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAK
ICAgICAgICAgY2FzZSBOZXdBcnJheTogewogICAgICAgICAgICAgY2hhbmdlZCB8PSBzZXRQcmVk
aWN0aW9uKFNwZWNBcnJheSk7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGNoaWxkSWR4ID0g
bm9kZS5maXJzdENoaWxkKCk7Ci0gICAgICAgICAgICAgICAgIGNoaWxkSWR4IDwgbm9kZS5maXJz
dENoaWxkKCkgKyBub2RlLm51bUNoaWxkcmVuKCk7Ci0gICAgICAgICAgICAgICAgICsrY2hpbGRJ
ZHgpIHsKLSAgICAgICAgICAgICAgICBFZGdlIGVkZ2UgPSBtX2dyYXBoLm1fdmFyQXJnQ2hpbGRy
ZW5bY2hpbGRJZHhdOwotICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaFtlZGdlXS5t
ZXJnZUZsYWdzKE5vZGVVc2VkQXNWYWx1ZSk7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIGNoaWxkSWR4ID0gbm9kZS0+Zmlyc3RDaGlsZCgpOworICAgICAgICAgICAg
ICAgICBjaGlsZElkeCA8IG5vZGUtPmZpcnN0Q2hpbGQoKSArIG5vZGUtPm51bUNoaWxkcmVuKCk7
CisgICAgICAgICAgICAgICAgICsrY2hpbGRJZHgpCisgICAgICAgICAgICAgICAgY2hhbmdlZCB8
PSBtX2dyYXBoLm1fdmFyQXJnQ2hpbGRyZW5bY2hpbGRJZHhdLT5tZXJnZUZsYWdzKE5vZGVVc2Vk
QXNWYWx1ZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCiAg
ICAgICAgIGNhc2UgTmV3QXJyYXlXaXRoU2l6ZTogewogICAgICAgICAgICAgY2hhbmdlZCB8PSBz
ZXRQcmVkaWN0aW9uKFNwZWNBcnJheSk7Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhb
bm9kZS5jaGlsZDEoKV0ubWVyZ2VGbGFncyhOb2RlVXNlZEFzVmFsdWUgfCBOb2RlVXNlZEFzSW50
IHwgTm9kZVVzZWRBc0ludExvY2FsbHkpOworICAgICAgICAgICAgY2hhbmdlZCB8PSBub2RlLT5j
aGlsZDEoKS0+bWVyZ2VGbGFncyhOb2RlVXNlZEFzVmFsdWUgfCBOb2RlVXNlZEFzSW50IHwgTm9k
ZVVzZWRBc0ludExvY2FsbHkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAg
ICAgICAgIApAQCAtNjcwLDIyICs2NjQsMjIgQEAgcHJpdmF0ZToKICAgICAgICAgCiAgICAgICAg
IGNhc2UgU3RyaW5nQ2hhckF0OiB7CiAgICAgICAgICAgICBjaGFuZ2VkIHw9IHNldFByZWRpY3Rp
b24oU3BlY1N0cmluZyk7Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbm9kZS5jaGls
ZDEoKV0ubWVyZ2VGbGFncyhOb2RlVXNlZEFzVmFsdWUpOwotICAgICAgICAgICAgY2hhbmdlZCB8
PSBtX2dyYXBoW25vZGUuY2hpbGQyKCldLm1lcmdlRmxhZ3MoTm9kZVVzZWRBc051bWJlciB8IE5v
ZGVVc2VkQXNPdGhlciB8IE5vZGVVc2VkQXNJbnQgfCBOb2RlVXNlZEFzSW50TG9jYWxseSk7Cisg
ICAgICAgICAgICBjaGFuZ2VkIHw9IG5vZGUtPmNoaWxkMSgpLT5tZXJnZUZsYWdzKE5vZGVVc2Vk
QXNWYWx1ZSk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG5vZGUtPmNoaWxkMigpLT5tZXJnZUZs
YWdzKE5vZGVVc2VkQXNOdW1iZXIgfCBOb2RlVXNlZEFzT3RoZXIgfCBOb2RlVXNlZEFzSW50IHwg
Tm9kZVVzZWRBc0ludExvY2FsbHkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAg
ICAgICAgICAgIAogICAgICAgICBjYXNlIFN0ckNhdDogewogICAgICAgICAgICAgY2hhbmdlZCB8
PSBzZXRQcmVkaWN0aW9uKFNwZWNTdHJpbmcpOwotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBj
aGlsZElkeCA9IG5vZGUuZmlyc3RDaGlsZCgpOwotICAgICAgICAgICAgICAgICBjaGlsZElkeCA8
IG5vZGUuZmlyc3RDaGlsZCgpICsgbm9kZS5udW1DaGlsZHJlbigpOworICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBjaGlsZElkeCA9IG5vZGUtPmZpcnN0Q2hpbGQoKTsKKyAgICAgICAgICAgICAg
ICAgY2hpbGRJZHggPCBub2RlLT5maXJzdENoaWxkKCkgKyBub2RlLT5udW1DaGlsZHJlbigpOwog
ICAgICAgICAgICAgICAgICArK2NoaWxkSWR4KQotICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0g
bV9ncmFwaFttX2dyYXBoLm1fdmFyQXJnQ2hpbGRyZW5bY2hpbGRJZHhdXS5tZXJnZUZsYWdzKE5v
ZGVVc2VkQXNOdW1iZXIgfCBOb2RlVXNlZEFzT3RoZXIpOworICAgICAgICAgICAgICAgIGNoYW5n
ZWQgfD0gbV9ncmFwaC5tX3ZhckFyZ0NoaWxkcmVuW2NoaWxkSWR4XS0+bWVyZ2VGbGFncyhOb2Rl
VXNlZEFzTnVtYmVyIHwgTm9kZVVzZWRBc090aGVyKTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBUb1ByaW1pdGl2ZTogewotICAgICAg
ICAgICAgU3BlY3VsYXRlZFR5cGUgY2hpbGQgPSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLnByZWRp
Y3Rpb24oKTsKKyAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIGNoaWxkID0gbm9kZS0+Y2hpbGQx
KCktPnByZWRpY3Rpb24oKTsKICAgICAgICAgICAgIGlmIChjaGlsZCkgewogICAgICAgICAgICAg
ICAgIGlmIChpc09iamVjdFNwZWN1bGF0aW9uKGNoaWxkKSkgewogICAgICAgICAgICAgICAgICAg
ICAvLyBJJ2QgbG92ZSB0byBmb2xkIHRoaXMgY2FzZSBpbnRvIHRoZSBjYXNlIGJlbG93LCBidXQg
SSBjYW4ndCwgYmVjYXVzZQpAQCAtNzAyLDcgKzY5Niw3IEBAIHByaXZhdGU6CiAgICAgICAgICAg
ICAgICAgfSBlbHNlCiAgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0
aW9uKGNoaWxkKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFw
aFtub2RlLmNoaWxkMSgpXS5tZXJnZUZsYWdzKGZsYWdzKTsKKyAgICAgICAgICAgIGNoYW5nZWQg
fD0gbm9kZS0+Y2hpbGQxKCktPm1lcmdlRmxhZ3MoZmxhZ3MpOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIH0KICAgICAgICAgICAgIApAQCAtNzQ1LDQyICs3MzksNDUgQEAgcHJpdmF0ZToK
ICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgY2FzZSBQdXRCeVZhbDoKLSAgICAgICAgICAg
IGNoYW5nZWQgfD0gbV9ncmFwaFttX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApXS5tZXJnZUZs
YWdzKE5vZGVVc2VkQXNWYWx1ZSk7Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbV9n
cmFwaC52YXJBcmdDaGlsZChub2RlLCAxKV0ubWVyZ2VGbGFncyhOb2RlVXNlZEFzTnVtYmVyIHwg
Tm9kZVVzZWRBc090aGVyIHwgTm9kZVVzZWRBc0ludCB8IE5vZGVVc2VkQXNJbnRMb2NhbGx5KTsK
LSAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaFttX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUs
IDIpXS5tZXJnZUZsYWdzKE5vZGVVc2VkQXNWYWx1ZSk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9
IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCktPm1lcmdlRmxhZ3MoTm9kZVVzZWRBc1ZhbHVl
KTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKS0+
bWVyZ2VGbGFncyhOb2RlVXNlZEFzTnVtYmVyIHwgTm9kZVVzZWRBc090aGVyIHwgTm9kZVVzZWRB
c0ludCB8IE5vZGVVc2VkQXNJbnRMb2NhbGx5KTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9n
cmFwaC52YXJBcmdDaGlsZChub2RlLCAyKS0+bWVyZ2VGbGFncyhOb2RlVXNlZEFzVmFsdWUpOwog
ICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSBQdXRTY29wZWRWYXI6Ci0gICAgICAg
ICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ubWVyZ2VGbGFncyhOb2RlVXNl
ZEFzVmFsdWUpOwotICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQzKCld
Lm1lcmdlRmxhZ3MoTm9kZVVzZWRBc1ZhbHVlKTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbm9k
ZS0+Y2hpbGQxKCktPm1lcmdlRmxhZ3MoTm9kZVVzZWRBc1ZhbHVlKTsKKyAgICAgICAgICAgIGNo
YW5nZWQgfD0gbm9kZS0+Y2hpbGQzKCktPm1lcmdlRmxhZ3MoTm9kZVVzZWRBc1ZhbHVlKTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgUmV0dXJuOgogICAg
ICAgICBjYXNlIFRocm93OgotICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW25vZGUuY2hp
bGQxKCldLm1lcmdlRmxhZ3MoTm9kZVVzZWRBc1ZhbHVlKTsKKyAgICAgICAgICAgIGNoYW5nZWQg
fD0gbm9kZS0+Y2hpbGQxKCktPm1lcmdlRmxhZ3MoTm9kZVVzZWRBc1ZhbHVlKTsKICAgICAgICAg
ICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2UgUHV0QnlJZDoKICAgICAgICAgY2FzZSBQdXRCeUlk
RGlyZWN0OgotICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLm1l
cmdlRmxhZ3MoTm9kZVVzZWRBc1ZhbHVlKTsKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFw
aFtub2RlLmNoaWxkMigpXS5tZXJnZUZsYWdzKE5vZGVVc2VkQXNWYWx1ZSk7CisgICAgICAgICAg
ICBjaGFuZ2VkIHw9IG5vZGUtPmNoaWxkMSgpLT5tZXJnZUZsYWdzKE5vZGVVc2VkQXNWYWx1ZSk7
CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG5vZGUtPmNoaWxkMigpLT5tZXJnZUZsYWdzKE5vZGVV
c2VkQXNWYWx1ZSk7CiAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICBjYXNlIFB1dEJ5T2Zm
c2V0OgotICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLm1lcmdl
RmxhZ3MoTm9kZVVzZWRBc1ZhbHVlKTsKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaFtu
b2RlLmNoaWxkMygpXS5tZXJnZUZsYWdzKE5vZGVVc2VkQXNWYWx1ZSk7CisgICAgICAgICAgICBj
aGFuZ2VkIHw9IG5vZGUtPmNoaWxkMSgpLT5tZXJnZUZsYWdzKE5vZGVVc2VkQXNWYWx1ZSk7Cisg
ICAgICAgICAgICBjaGFuZ2VkIHw9IG5vZGUtPmNoaWxkMygpLT5tZXJnZUZsYWdzKE5vZGVVc2Vk
QXNWYWx1ZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgICAgICBjYXNl
IFBoaToKKyAgICAgICAgICAgIC8vIFBoaXMgc2hvdWxkIG5vdCBiZSB2aXNpYmxlIGhlcmUgc2lu
Y2Ugd2UncmUgaXRlcmF0aW5nIHRoZSBhbGwtYnV0LVBoaSdzCisgICAgICAgICAgICAvLyBwYXJ0
IG9mIGJhc2ljIGJsb2Nrcy4KKyAgICAgICAgICAgIENSQVNIKCk7CiAgICAgICAgICAgICBicmVh
azsKIAogICAgICAgICBjYXNlIFNldENhbGxlZToKICAgICAgICAgY2FzZSBTZXRNeVNjb3BlOgot
ICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLm1lcmdlRmxhZ3Mo
Tm9kZVVzZWRBc1ZhbHVlKTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbm9kZS0+Y2hpbGQxKCkt
Pm1lcmdlRmxhZ3MoTm9kZVVzZWRBc1ZhbHVlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgCiAgICAgICAgIGNhc2UgR2V0U2NvcGU6Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IG1f
Z3JhcGhbbm9kZS5jaGlsZDEoKV0ubWVyZ2VGbGFncyhOb2RlVXNlZEFzVmFsdWUpOworICAgICAg
ICAgICAgY2hhbmdlZCB8PSBub2RlLT5jaGlsZDEoKS0+bWVyZ2VGbGFncyhOb2RlVXNlZEFzVmFs
dWUpOwogICAgICAgICAgICAgY2hhbmdlZCB8PSBzZXRQcmVkaWN0aW9uKFNwZWNDZWxsT3RoZXIp
OwogICAgICAgICAgICAgYnJlYWs7CiAKQEAgLTgyOCwzMiArODI1LDMyIEBAIHByaXZhdGU6CiAg
ICAgICAgIH0KIAogI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKLSAg
ICAgICAgZGF0YUxvZyhTcGVjdWxhdGlvbkR1bXAobV9ncmFwaFttX2NvbXBpbGVJbmRleF0ucHJl
ZGljdGlvbigpKSwgIlxuIik7CisgICAgICAgIGRhdGFMb2coU3BlY3VsYXRpb25EdW1wKG5vZGUt
PnByZWRpY3Rpb24oKSksICJcbiIpOwogI2VuZGlmCiAgICAgICAgIAogICAgICAgICBtX2NoYW5n
ZWQgfD0gY2hhbmdlZDsKICAgICB9CiAgICAgICAgIAotICAgIGJvb2wgbWVyZ2VEZWZhdWx0Rmxh
Z3MoTm9kZSYgbm9kZSkKKyAgICBib29sIG1lcmdlRGVmYXVsdEZsYWdzKE5vZGUqIG5vZGUpCiAg
ICAgewogICAgICAgICBib29sIGNoYW5nZWQgPSBmYWxzZTsKLSAgICAgICAgaWYgKG5vZGUuZmxh
Z3MoKSAmIE5vZGVIYXNWYXJBcmdzKSB7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGNoaWxk
SWR4ID0gbm9kZS5maXJzdENoaWxkKCk7Ci0gICAgICAgICAgICAgICAgIGNoaWxkSWR4IDwgbm9k
ZS5maXJzdENoaWxkKCkgKyBub2RlLm51bUNoaWxkcmVuKCk7CisgICAgICAgIGlmIChub2RlLT5m
bGFncygpICYgTm9kZUhhc1ZhckFyZ3MpIHsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgY2hp
bGRJZHggPSBub2RlLT5maXJzdENoaWxkKCk7CisgICAgICAgICAgICAgICAgIGNoaWxkSWR4IDwg
bm9kZS0+Zmlyc3RDaGlsZCgpICsgbm9kZS0+bnVtQ2hpbGRyZW4oKTsKICAgICAgICAgICAgICAg
ICAgY2hpbGRJZHgrKykgewogICAgICAgICAgICAgICAgIGlmICghIW1fZ3JhcGgubV92YXJBcmdD
aGlsZHJlbltjaGlsZElkeF0pCi0gICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFw
aFttX2dyYXBoLm1fdmFyQXJnQ2hpbGRyZW5bY2hpbGRJZHhdXS5tZXJnZUZsYWdzKE5vZGVVc2Vk
QXNWYWx1ZSk7CisgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaC5tX3ZhckFy
Z0NoaWxkcmVuW2NoaWxkSWR4XS0+bWVyZ2VGbGFncyhOb2RlVXNlZEFzVmFsdWUpOwogICAgICAg
ICAgICAgfQogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaWYgKCFub2RlLmNoaWxkMSgp
KQorICAgICAgICAgICAgaWYgKCFub2RlLT5jaGlsZDEoKSkKICAgICAgICAgICAgICAgICByZXR1
cm4gY2hhbmdlZDsKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaFtub2RlLmNoaWxkMSgp
XS5tZXJnZUZsYWdzKE5vZGVVc2VkQXNWYWx1ZSk7Ci0gICAgICAgICAgICBpZiAoIW5vZGUuY2hp
bGQyKCkpCisgICAgICAgICAgICBjaGFuZ2VkIHw9IG5vZGUtPmNoaWxkMSgpLT5tZXJnZUZsYWdz
KE5vZGVVc2VkQXNWYWx1ZSk7CisgICAgICAgICAgICBpZiAoIW5vZGUtPmNoaWxkMigpKQogICAg
ICAgICAgICAgICAgIHJldHVybiBjaGFuZ2VkOwotICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dy
YXBoW25vZGUuY2hpbGQyKCldLm1lcmdlRmxhZ3MoTm9kZVVzZWRBc1ZhbHVlKTsKLSAgICAgICAg
ICAgIGlmICghbm9kZS5jaGlsZDMoKSkKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbm9kZS0+Y2hp
bGQyKCktPm1lcmdlRmxhZ3MoTm9kZVVzZWRBc1ZhbHVlKTsKKyAgICAgICAgICAgIGlmICghbm9k
ZS0+Y2hpbGQzKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGNoYW5nZWQ7Ci0gICAgICAgICAg
ICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbm9kZS5jaGlsZDMoKV0ubWVyZ2VGbGFncyhOb2RlVXNlZEFz
VmFsdWUpOworICAgICAgICAgICAgY2hhbmdlZCB8PSBub2RlLT5jaGlsZDMoKS0+bWVyZ2VGbGFn
cyhOb2RlVXNlZEFzVmFsdWUpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBjaGFuZ2VkOwog
ICAgIH0KQEAgLTg2Myw4ICs4NjAsMTYgQEAgcHJpdmF0ZToKICNpZiBERkdfRU5BQkxFKERFQlVH
X1BST1BBR0FUSU9OX1ZFUkJPU0UpCiAgICAgICAgIGRhdGFMb2dGKCJQcm9wYWdhdGluZyBwcmVk
aWN0aW9ucyBmb3J3YXJkIFsldV1cbiIsICsrbV9jb3VudCk7CiAjZW5kaWYKLSAgICAgICAgZm9y
IChtX2NvbXBpbGVJbmRleCA9IDA7IG1fY29tcGlsZUluZGV4IDwgbV9ncmFwaC5zaXplKCk7ICsr
bV9jb21waWxlSW5kZXgpCi0gICAgICAgICAgICBwcm9wYWdhdGUobV9ncmFwaFttX2NvbXBpbGVJ
bmRleF0pOworICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5k
ZXggPCBtX2dyYXBoLm1fYmxvY2tzLnNpemUoKTsgKytibG9ja0luZGV4KSB7CisgICAgICAgICAg
ICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGgubV9ibG9ja3NbYmxvY2tJbmRleF0uZ2V0KCk7
CisgICAgICAgICAgICBpZiAoIWJsb2NrKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICAgICAgQVNTRVJUKGJsb2NrLT5pc1JlYWNoYWJsZSk7CisgICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgYmxvY2stPnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICAgICAg
bV9jdXJyZW50Tm9kZSA9IGJsb2NrLT5hdChpKTsKKyAgICAgICAgICAgICAgICBwcm9wYWdhdGUo
bV9jdXJyZW50Tm9kZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KICAgICB9CiAgICAgCiAg
ICAgdm9pZCBwcm9wYWdhdGVCYWNrd2FyZCgpCkBAIC04NzIsMTIzICs4NzcsMTM5IEBAIHByaXZh
dGU6CiAjaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQogICAgICAgICBk
YXRhTG9nRigiUHJvcGFnYXRpbmcgcHJlZGljdGlvbnMgYmFja3dhcmQgWyV1XVxuIiwgKyttX2Nv
dW50KTsKICNlbmRpZgotICAgICAgICBmb3IgKG1fY29tcGlsZUluZGV4ID0gbV9ncmFwaC5zaXpl
KCk7IG1fY29tcGlsZUluZGV4LS0gPiAwOykKLSAgICAgICAgICAgIHByb3BhZ2F0ZShtX2dyYXBo
W21fY29tcGlsZUluZGV4XSk7CisgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0g
bV9ncmFwaC5tX2Jsb2Nrcy5zaXplKCk7IGJsb2NrSW5kZXgtLTspIHsKKyAgICAgICAgICAgIEJh
c2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5tX2Jsb2Nrc1tibG9ja0luZGV4XS5nZXQoKTsKKyAg
ICAgICAgICAgIGlmICghYmxvY2spCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
ICAgICBBU1NFUlQoYmxvY2stPmlzUmVhY2hhYmxlKTsKKyAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IGJsb2NrLT5zaXplKCk7IGktLTspIHsKKyAgICAgICAgICAgICAgICBtX2N1cnJlbnRO
b2RlID0gYmxvY2stPmF0KGkpOworICAgICAgICAgICAgICAgIHByb3BhZ2F0ZShtX2N1cnJlbnRO
b2RlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQogICAgIH0KICAgICAKLSAgICB2b2lkIGRv
Um91bmRPZkRvdWJsZVZvdGluZygpCisgICAgdm9pZCBkb0RvdWJsZVZvdGluZyhOb2RlKiBub2Rl
KQogICAgIHsKLSNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCi0gICAg
ICAgIGRhdGFMb2dGKCJWb3Rpbmcgb24gZG91YmxlIHVzZXMgb2YgbG9jYWxzIFsldV1cbiIsIG1f
Y291bnQpOwotI2VuZGlmCi0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2dyYXBo
Lm1fdmFyaWFibGVBY2Nlc3NEYXRhLnNpemUoKTsgKytpKQotICAgICAgICAgICAgbV9ncmFwaC5t
X3ZhcmlhYmxlQWNjZXNzRGF0YVtpXS5maW5kKCktPmNsZWFyVm90ZXMoKTsKLSAgICAgICAgZm9y
IChtX2NvbXBpbGVJbmRleCA9IDA7IG1fY29tcGlsZUluZGV4IDwgbV9ncmFwaC5zaXplKCk7ICsr
bV9jb21waWxlSW5kZXgpIHsKLSAgICAgICAgICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW21fY29t
cGlsZUluZGV4XTsKLSAgICAgICAgICAgIHN3aXRjaCAobm9kZS5vcCgpKSB7Ci0gICAgICAgICAg
ICBjYXNlIFZhbHVlQWRkOgotICAgICAgICAgICAgY2FzZSBBcml0aEFkZDoKLSAgICAgICAgICAg
IGNhc2UgQXJpdGhTdWI6IHsKLSAgICAgICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSBsZWZ0ID0g
bV9ncmFwaFtub2RlLmNoaWxkMSgpXS5wcmVkaWN0aW9uKCk7Ci0gICAgICAgICAgICAgICAgU3Bl
Y3VsYXRlZFR5cGUgcmlnaHQgPSBtX2dyYXBoW25vZGUuY2hpbGQyKCldLnByZWRpY3Rpb24oKTsK
KyAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CisgICAgICAgIGNhc2UgVmFsdWVBZGQ6Cisg
ICAgICAgIGNhc2UgQXJpdGhBZGQ6CisgICAgICAgIGNhc2UgQXJpdGhTdWI6IHsKKyAgICAgICAg
ICAgIFNwZWN1bGF0ZWRUeXBlIGxlZnQgPSBub2RlLT5jaGlsZDEoKS0+cHJlZGljdGlvbigpOwor
ICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgcmlnaHQgPSBub2RlLT5jaGlsZDIoKS0+cHJlZGlj
dGlvbigpOwogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIERvdWJsZUJhbGxvdCBi
YWxsb3Q7CisgICAgICAgICAgICBEb3VibGVCYWxsb3QgYmFsbG90OwogICAgICAgICAgICAgICAg
IAotICAgICAgICAgICAgICAgIGlmIChpc051bWJlclNwZWN1bGF0aW9uRXhwZWN0aW5nRGVmaW5l
ZChsZWZ0KSAmJiBpc051bWJlclNwZWN1bGF0aW9uRXhwZWN0aW5nRGVmaW5lZChyaWdodCkKLSAg
ICAgICAgICAgICAgICAgICAgJiYgIW1fZ3JhcGguYWRkU2hvdWxkU3BlY3VsYXRlSW50ZWdlcihu
b2RlKSkKLSAgICAgICAgICAgICAgICAgICAgYmFsbG90ID0gVm90ZURvdWJsZTsKLSAgICAgICAg
ICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIGJhbGxvdCA9IFZvdGVWYWx1ZTsKKyAg
ICAgICAgICAgIGlmIChpc051bWJlclNwZWN1bGF0aW9uRXhwZWN0aW5nRGVmaW5lZChsZWZ0KSAm
JiBpc051bWJlclNwZWN1bGF0aW9uRXhwZWN0aW5nRGVmaW5lZChyaWdodCkKKyAgICAgICAgICAg
ICAgICAmJiAhbV9ncmFwaC5hZGRTaG91bGRTcGVjdWxhdGVJbnRlZ2VyKG5vZGUpKQorICAgICAg
ICAgICAgICAgIGJhbGxvdCA9IFZvdGVEb3VibGU7CisgICAgICAgICAgICBlbHNlCisgICAgICAg
ICAgICAgICAgYmFsbG90ID0gVm90ZVZhbHVlOwogICAgICAgICAgICAgICAgIAotICAgICAgICAg
ICAgICAgIG1fZ3JhcGgudm90ZShub2RlLmNoaWxkMSgpLCBiYWxsb3QpOwotICAgICAgICAgICAg
ICAgIG1fZ3JhcGgudm90ZShub2RlLmNoaWxkMigpLCBiYWxsb3QpOwotICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgbV9ncmFwaC52b3RlKG5vZGUtPmNo
aWxkMSgpLCBiYWxsb3QpOworICAgICAgICAgICAgbV9ncmFwaC52b3RlKG5vZGUtPmNoaWxkMigp
LCBiYWxsb3QpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KICAgICAgICAgICAgICAg
ICAKLSAgICAgICAgICAgIGNhc2UgQXJpdGhNdWw6IHsKLSAgICAgICAgICAgICAgICBTcGVjdWxh
dGVkVHlwZSBsZWZ0ID0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5wcmVkaWN0aW9uKCk7Ci0gICAg
ICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgcmlnaHQgPSBtX2dyYXBoW25vZGUuY2hpbGQyKCld
LnByZWRpY3Rpb24oKTsKKyAgICAgICAgY2FzZSBBcml0aE11bDogeworICAgICAgICAgICAgU3Bl
Y3VsYXRlZFR5cGUgbGVmdCA9IG5vZGUtPmNoaWxkMSgpLT5wcmVkaWN0aW9uKCk7CisgICAgICAg
ICAgICBTcGVjdWxhdGVkVHlwZSByaWdodCA9IG5vZGUtPmNoaWxkMigpLT5wcmVkaWN0aW9uKCk7
CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgRG91YmxlQmFsbG90IGJhbGxvdDsK
KyAgICAgICAgICAgIERvdWJsZUJhbGxvdCBiYWxsb3Q7CiAgICAgICAgICAgICAgICAgCi0gICAg
ICAgICAgICAgICAgaWYgKGlzTnVtYmVyU3BlY3VsYXRpb24obGVmdCkgJiYgaXNOdW1iZXJTcGVj
dWxhdGlvbihyaWdodCkKLSAgICAgICAgICAgICAgICAgICAgJiYgIW1fZ3JhcGgubXVsU2hvdWxk
U3BlY3VsYXRlSW50ZWdlcihub2RlKSkKLSAgICAgICAgICAgICAgICAgICAgYmFsbG90ID0gVm90
ZURvdWJsZTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIGJhbGxv
dCA9IFZvdGVWYWx1ZTsKKyAgICAgICAgICAgIGlmIChpc051bWJlclNwZWN1bGF0aW9uKGxlZnQp
ICYmIGlzTnVtYmVyU3BlY3VsYXRpb24ocmlnaHQpCisgICAgICAgICAgICAgICAgJiYgIW1fZ3Jh
cGgubXVsU2hvdWxkU3BlY3VsYXRlSW50ZWdlcihub2RlKSkKKyAgICAgICAgICAgICAgICBiYWxs
b3QgPSBWb3RlRG91YmxlOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGJhbGxv
dCA9IFZvdGVWYWx1ZTsKICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBtX2dyYXBo
LnZvdGUobm9kZS5jaGlsZDEoKSwgYmFsbG90KTsKLSAgICAgICAgICAgICAgICBtX2dyYXBoLnZv
dGUobm9kZS5jaGlsZDIoKSwgYmFsbG90KTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIG1fZ3JhcGgudm90ZShub2RlLT5jaGlsZDEoKSwgYmFsbG90
KTsKKyAgICAgICAgICAgIG1fZ3JhcGgudm90ZShub2RlLT5jaGlsZDIoKSwgYmFsbG90KTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAKLSAgICAgICAgICAgIGNhc2UgQXJpdGhNaW46
Ci0gICAgICAgICAgICBjYXNlIEFyaXRoTWF4OgotICAgICAgICAgICAgY2FzZSBBcml0aE1vZDoK
LSAgICAgICAgICAgIGNhc2UgQXJpdGhEaXY6IHsKLSAgICAgICAgICAgICAgICBTcGVjdWxhdGVk
VHlwZSBsZWZ0ID0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5wcmVkaWN0aW9uKCk7Ci0gICAgICAg
ICAgICAgICAgU3BlY3VsYXRlZFR5cGUgcmlnaHQgPSBtX2dyYXBoW25vZGUuY2hpbGQyKCldLnBy
ZWRpY3Rpb24oKTsKKyAgICAgICAgY2FzZSBBcml0aE1pbjoKKyAgICAgICAgY2FzZSBBcml0aE1h
eDoKKyAgICAgICAgY2FzZSBBcml0aE1vZDoKKyAgICAgICAgY2FzZSBBcml0aERpdjogeworICAg
ICAgICAgICAgU3BlY3VsYXRlZFR5cGUgbGVmdCA9IG5vZGUtPmNoaWxkMSgpLT5wcmVkaWN0aW9u
KCk7CisgICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSByaWdodCA9IG5vZGUtPmNoaWxkMigpLT5w
cmVkaWN0aW9uKCk7CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgRG91YmxlQmFs
bG90IGJhbGxvdDsKKyAgICAgICAgICAgIERvdWJsZUJhbGxvdCBiYWxsb3Q7CiAgICAgICAgICAg
ICAgICAgCi0gICAgICAgICAgICAgICAgaWYgKGlzTnVtYmVyU3BlY3VsYXRpb24obGVmdCkgJiYg
aXNOdW1iZXJTcGVjdWxhdGlvbihyaWdodCkKLSAgICAgICAgICAgICAgICAgICAgJiYgIShOb2Rl
OjpzaG91bGRTcGVjdWxhdGVJbnRlZ2VyRm9yQXJpdGhtZXRpYyhtX2dyYXBoW25vZGUuY2hpbGQx
KCldLCBtX2dyYXBoW25vZGUuY2hpbGQxKCldKQotICAgICAgICAgICAgICAgICAgICAgICAgICYm
IG5vZGUuY2FuU3BlY3VsYXRlSW50ZWdlcigpKSkKLSAgICAgICAgICAgICAgICAgICAgYmFsbG90
ID0gVm90ZURvdWJsZTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAg
IGJhbGxvdCA9IFZvdGVWYWx1ZTsKKyAgICAgICAgICAgIGlmIChpc051bWJlclNwZWN1bGF0aW9u
KGxlZnQpICYmIGlzTnVtYmVyU3BlY3VsYXRpb24ocmlnaHQpCisgICAgICAgICAgICAgICAgJiYg
IShOb2RlOjpzaG91bGRTcGVjdWxhdGVJbnRlZ2VyRm9yQXJpdGhtZXRpYyhub2RlLT5jaGlsZDEo
KS5ub2RlKCksIG5vZGUtPmNoaWxkMigpLm5vZGUoKSkKKyAgICAgICAgICAgICAgICAgICAgICYm
IG5vZGUuY2FuU3BlY3VsYXRlSW50ZWdlcigpKSkKKyAgICAgICAgICAgICAgICBiYWxsb3QgPSBW
b3RlRG91YmxlOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGJhbGxvdCA9IFZv
dGVWYWx1ZTsKICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBtX2dyYXBoLnZvdGUo
bm9kZS5jaGlsZDEoKSwgYmFsbG90KTsKLSAgICAgICAgICAgICAgICBtX2dyYXBoLnZvdGUobm9k
ZS5jaGlsZDIoKSwgYmFsbG90KTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIG1fZ3JhcGgudm90ZShub2RlLT5jaGlsZDEoKSwgYmFsbG90KTsKKyAg
ICAgICAgICAgIG1fZ3JhcGgudm90ZShub2RlLT5jaGlsZDIoKSwgYmFsbG90KTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBjYXNl
IEFyaXRoQWJzOgotICAgICAgICAgICAgICAgIERvdWJsZUJhbGxvdCBiYWxsb3Q7Ci0gICAgICAg
ICAgICAgICAgaWYgKCEobV9ncmFwaFtub2RlLmNoaWxkMSgpXS5zaG91bGRTcGVjdWxhdGVJbnRl
Z2VyRm9yQXJpdGhtZXRpYygpCi0gICAgICAgICAgICAgICAgICAgICAgJiYgbm9kZS5jYW5TcGVj
dWxhdGVJbnRlZ2VyKCkpKQotICAgICAgICAgICAgICAgICAgICBiYWxsb3QgPSBWb3RlRG91Ymxl
OwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgYmFsbG90ID0gVm90
ZVZhbHVlOworICAgICAgICBjYXNlIEFyaXRoQWJzOgorICAgICAgICAgICAgRG91YmxlQmFsbG90
IGJhbGxvdDsKKyAgICAgICAgICAgIGlmICghKG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxh
dGVJbnRlZ2VyRm9yQXJpdGhtZXRpYygpCisgICAgICAgICAgICAgICAgICAmJiBub2RlLmNhblNw
ZWN1bGF0ZUludGVnZXIoKSkpCisgICAgICAgICAgICAgICAgYmFsbG90ID0gVm90ZURvdWJsZTsK
KyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBiYWxsb3QgPSBWb3RlVmFsdWU7CiAg
ICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgbV9ncmFwaC52b3RlKG5vZGUuY2hpbGQx
KCksIGJhbGxvdCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBtX2dyYXBo
LnZvdGUobm9kZS0+Y2hpbGQxKCksIGJhbGxvdCk7CisgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgICAgICAKLSAgICAgICAgICAgIGNhc2UgQXJpdGhTcXJ0OgotICAgICAgICAgICAgICAg
IG1fZ3JhcGgudm90ZShub2RlLmNoaWxkMSgpLCBWb3RlRG91YmxlKTsKLSAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBBcml0aFNxcnQ6CisgICAgICAgICAgICBtX2dyYXBoLnZv
dGUobm9kZS0+Y2hpbGQxKCksIFZvdGVEb3VibGUpOworICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICAgICAgCi0gICAgICAgICAgICBjYXNlIFNldExvY2FsOiB7Ci0gICAgICAgICAgICAg
ICAgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiA9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ucHJl
ZGljdGlvbigpOwotICAgICAgICAgICAgICAgIGlmIChpc0RvdWJsZVNwZWN1bGF0aW9uKHByZWRp
Y3Rpb24pKQotICAgICAgICAgICAgICAgICAgICBub2RlLnZhcmlhYmxlQWNjZXNzRGF0YSgpLT52
b3RlKFZvdGVEb3VibGUpOwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKCFpc051bWJlclNwZWN1
bGF0aW9uKHByZWRpY3Rpb24pIHx8IGlzSW50MzJTcGVjdWxhdGlvbihwcmVkaWN0aW9uKSkKLSAg
ICAgICAgICAgICAgICAgICAgbm9kZS52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+dm90ZShWb3RlVmFs
dWUpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQorICAgICAgICBjYXNl
IFNldExvY2FsOiB7CisgICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uID0gbm9k
ZS0+Y2hpbGQxKCktPnByZWRpY3Rpb24oKTsKKyAgICAgICAgICAgIGlmIChpc0RvdWJsZVNwZWN1
bGF0aW9uKHByZWRpY3Rpb24pKQorICAgICAgICAgICAgICAgIG5vZGUtPnZhcmlhYmxlQWNjZXNz
RGF0YSgpLT52b3RlKFZvdGVEb3VibGUpOworICAgICAgICAgICAgZWxzZSBpZiAoIWlzTnVtYmVy
U3BlY3VsYXRpb24ocHJlZGljdGlvbikgfHwgaXNJbnQzMlNwZWN1bGF0aW9uKHByZWRpY3Rpb24p
KQorICAgICAgICAgICAgICAgIG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT52b3RlKFZvdGVW
YWx1ZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQogICAgICAgICAgICAgICAgIAot
ICAgICAgICAgICAgY2FzZSBQdXRCeVZhbDoKLSAgICAgICAgICAgIGNhc2UgUHV0QnlWYWxBbGlh
czogewotICAgICAgICAgICAgICAgIEVkZ2UgY2hpbGQxID0gbV9ncmFwaC52YXJBcmdDaGlsZChu
b2RlLCAwKTsKLSAgICAgICAgICAgICAgICBFZGdlIGNoaWxkMiA9IG1fZ3JhcGgudmFyQXJnQ2hp
bGQobm9kZSwgMSk7Ci0gICAgICAgICAgICAgICAgRWRnZSBjaGlsZDMgPSBtX2dyYXBoLnZhckFy
Z0NoaWxkKG5vZGUsIDIpOwotICAgICAgICAgICAgICAgIG1fZ3JhcGgudm90ZShjaGlsZDEsIFZv
dGVWYWx1ZSk7Ci0gICAgICAgICAgICAgICAgbV9ncmFwaC52b3RlKGNoaWxkMiwgVm90ZVZhbHVl
KTsKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUuYXJyYXlNb2RlKCkudHlwZSgpKSB7Ci0g
ICAgICAgICAgICAgICAgY2FzZSBBcnJheTo6RG91YmxlOgotICAgICAgICAgICAgICAgICAgICBt
X2dyYXBoLnZvdGUoY2hpbGQzLCBWb3RlRG91YmxlKTsKLSAgICAgICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgbV9ncmFw
aC52b3RlKGNoaWxkMywgVm90ZVZhbHVlKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICAgICAgfQorICAgICAgICBjYXNlIFB1dEJ5VmFsOgorICAgICAgICBjYXNlIFB1
dEJ5VmFsQWxpYXM6IHsKKyAgICAgICAgICAgIEVkZ2UgY2hpbGQxID0gbV9ncmFwaC52YXJBcmdD
aGlsZChub2RlLCAwKTsKKyAgICAgICAgICAgIEVkZ2UgY2hpbGQyID0gbV9ncmFwaC52YXJBcmdD
aGlsZChub2RlLCAxKTsKKyAgICAgICAgICAgIEVkZ2UgY2hpbGQzID0gbV9ncmFwaC52YXJBcmdD
aGlsZChub2RlLCAyKTsKKyAgICAgICAgICAgIG1fZ3JhcGgudm90ZShjaGlsZDEsIFZvdGVWYWx1
ZSk7CisgICAgICAgICAgICBtX2dyYXBoLnZvdGUoY2hpbGQyLCBWb3RlVmFsdWUpOworICAgICAg
ICAgICAgc3dpdGNoIChub2RlLmFycmF5TW9kZSgpLnR5cGUoKSkgeworICAgICAgICAgICAgY2Fz
ZSBBcnJheTo6RG91YmxlOgorICAgICAgICAgICAgICAgIG1fZ3JhcGgudm90ZShjaGlsZDMsIFZv
dGVEb3VibGUpOwogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIAogICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBtX2dyYXBo
LnZvdGUobm9kZSwgVm90ZVZhbHVlKTsKKyAgICAgICAgICAgICAgICBtX2dyYXBoLnZvdGUoY2hp
bGQzLCBWb3RlVmFsdWUpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgbV9ncmFwaC52b3RlKG5vZGUsIFZvdGVWYWx1ZSk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICB2b2lkIGRvUm91bmRPZkRv
dWJsZVZvdGluZygpCisgICAgeworI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVS
Qk9TRSkKKyAgICAgICAgZGF0YUxvZ0YoIlZvdGluZyBvbiBkb3VibGUgdXNlcyBvZiBsb2NhbHMg
WyV1XVxuIiwgbV9jb3VudCk7CisjZW5kaWYKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IG1fZ3JhcGgubV92YXJpYWJsZUFjY2Vzc0RhdGEuc2l6ZSgpOyArK2kpCisgICAgICAgICAg
ICBtX2dyYXBoLm1fdmFyaWFibGVBY2Nlc3NEYXRhW2ldLmZpbmQoKS0+Y2xlYXJWb3RlcygpOwor
ICAgICAgICBmb3IgKEJhc2ljQmxvY2sgYmxvY2tJbmRleCA9IDA7IGkgPCBtX2dyYXBoLm1fYmxv
Y2tzLnNpemUoKTsgKytibG9ja0luZGV4KSB7CisgICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9j
ayA9IG1fZ3JhcGgubV9ibG9ja3NbYmxvY2tJbmRleF0uZ2V0KCk7CisgICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgYmxvY2stPnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICAg
ICAgbV9jdXJyZW50Tm9kZSA9IGJsb2NrLT5hdChpKTsKKyAgICAgICAgICAgICAgICBkb0RvdWJs
ZVZvdGluZyhtX2N1cnJlbnROb2RlKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9ncmFwaC5tX3ZhcmlhYmxlQWNjZXNzRGF0YS5z
aXplKCk7ICsraSkgewogICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFj
Y2Vzc0RhdGEgPSAmbV9ncmFwaC5tX3ZhcmlhYmxlQWNjZXNzRGF0YVtpXTsKQEAgLTEwMTIsNyAr
MTAzMyw3IEBAIHByaXZhdGU6CiAgICAgICAgIH0KICAgICB9CiAgICAgCi0gICAgTm9kZUluZGV4
IG1fY29tcGlsZUluZGV4OworICAgIE5vZGUqIG1fY3VycmVudE5vZGU7CiAgICAgYm9vbCBtX2No
YW5nZWQ7CiAKICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0cnVjdHVyZUFic3RyYWN0VmFsdWUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0cnVjdHVyZUFic3Ry
YWN0VmFsdWUuaAkocmV2aXNpb24gMTM5NTg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxNCw2ICsz
MTQsOCBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIHRvcFZhbHVl
KCkgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxTdHJ1Y3R1cmUqPigxKTsgfQogICAgIAorICAg
IC8vIE5CLiBUaGlzIG11c3QgaGF2ZSBhIHRyaXZpYWwgZGVzdHJ1Y3Rvci4KKyAgICAKICAgICAv
LyBUaGlzIGNhbiBvbmx5IHJlbWVtYmVyIG9uZSBzdHJ1Y3R1cmUgYXQgYSB0aW1lLgogICAgIFN0
cnVjdHVyZSogbV9zdHJ1Y3R1cmU7CiB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdWYWxpZGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdWYWxpZGF0ZS5jcHAJKHJldmlzaW9uIDEzOTU4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHVmFsaWRhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MCw0MCArODAsNDMg
QEAgcHVibGljOgogICAgICAgICAvLyBWYWxpZGF0ZSB0aGF0IGFsbCBsb2NhbCB2YXJpYWJsZXMg
YXQgdGhlIGhlYWQgb2YgdGhlIHJvb3QgYmxvY2sgYXJlIGRlYWQuCiAgICAgICAgIEJhc2ljQmxv
Y2sqIHJvb3QgPSBtX2dyYXBoLm1fYmxvY2tzWzBdLmdldCgpOwogICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgcm9vdC0+dmFyaWFibGVzQXRIZWFkLm51bWJlck9mTG9jYWxzKCk7ICsr
aSkKLSAgICAgICAgICAgIFZfRVFVQUwoKHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4oaSks
IDApLCBOb05vZGUsIHJvb3QtPnZhcmlhYmxlc0F0SGVhZC5sb2NhbChpKSk7CisgICAgICAgICAg
ICBWX0VRVUFMKChzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KGkpLCAwKSwgMCwgcm9vdC0+
dmFyaWFibGVzQXRIZWFkLmxvY2FsKGkpKTsKICAgICAgICAgCiAgICAgICAgIC8vIFZhbGlkYXRl
IHJlZiBjb3VudHMgYW5kIHVzZXMuCi0gICAgICAgIFZlY3Rvcjx1bnNpZ25lZD4gbXlSZWZDb3Vu
dHM7Ci0gICAgICAgIG15UmVmQ291bnRzLmZpbGwoMCwgbV9ncmFwaC5zaXplKCkpOwotICAgICAg
ICBCaXRWZWN0b3IgYWNjZXB0YWJsZU5vZGVJbmRpY2VzOworICAgICAgICBIYXNoTWFwPE5vZGUq
LCB1bnNpZ25lZD4gbXlSZWZDb3VudHM7CiAgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0lu
ZGV4ID0gMDsgYmxvY2tJbmRleCA8IG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgpOyArK2Jsb2NrSW5k
ZXgpIHsKICAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5tX2Jsb2Nrc1ti
bG9ja0luZGV4XS5nZXQoKTsKLSAgICAgICAgICAgIGlmICghYmxvY2spCisgICAgICAgICAgICBp
ZiAoIWJsb2NrIHx8ICFibG9jay0+aXNSZWFjaGFibGUpCiAgICAgICAgICAgICAgICAgY29udGlu
dWU7Ci0gICAgICAgICAgICBpZiAoIWJsb2NrLT5pc1JlYWNoYWJsZSkKKyAgICAgICAgICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgYmxvY2stPm51bU5vZGVzKCk7ICsraSkKKyAgICAgICAgICAg
ICAgICBteVJlZkNvdW50cy5hZGQoYmxvY2stPm5vZGUoaSksIDApOworICAgICAgICB9CisgICAg
ICAgIEhhc2hTZXQ8Tm9kZSo+IGFjY2VwdGFibGVOb2RlczsKKyAgICAgICAgZm9yIChCbG9ja0lu
ZGV4IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9ncmFwaC5tX2Jsb2Nrcy5zaXplKCk7
ICsrYmxvY2tJbmRleCkgeworICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBo
Lm1fYmxvY2tzW2Jsb2NrSW5kZXhdLmdldCgpOworICAgICAgICAgICAgaWYgKCFibG9jayB8fCAh
YmxvY2stPmlzUmVhY2hhYmxlKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBibG9jay0+bnVtTm9kZXMoKTsgKytpKSB7Ci0gICAg
ICAgICAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRleCA9IGJsb2NrLT5ub2RlSW5kZXgoaSk7Ci0g
ICAgICAgICAgICAgICAgYWNjZXB0YWJsZU5vZGVJbmRpY2VzLnNldChub2RlSW5kZXgpOwotICAg
ICAgICAgICAgICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW25vZGVJbmRleF07Ci0gICAgICAgICAg
ICAgICAgaWYgKCFub2RlLnNob3VsZEdlbmVyYXRlKCkpCisgICAgICAgICAgICAgICAgTm9kZSog
bm9kZSA9IGJsb2NrLT5ub2RlKGkpOworICAgICAgICAgICAgICAgIGFjY2VwdGFibGVOb2Rlcy5h
ZGQobm9kZSk7CisgICAgICAgICAgICAgICAgaWYgKCFub2RlLT5zaG91bGRHZW5lcmF0ZSgpKQog
ICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGogPSAwOyBqIDwgbV9ncmFwaC5udW1DaGlsZHJlbihub2RlKTsgKytqKSB7CiAgICAgICAg
ICAgICAgICAgICAgIEVkZ2UgZWRnZSA9IG1fZ3JhcGguY2hpbGQobm9kZSwgaik7CiAgICAgICAg
ICAgICAgICAgICAgIGlmICghZWRnZSkKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwogICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgbXlSZWZDb3VudHNb
ZWRnZS5pbmRleCgpXSsrOworICAgICAgICAgICAgICAgICAgICBteVJlZkNvdW50cy5maW5kKGVk
Z2Uubm9kZSgpKS0+dmFsdWUrKzsKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAg
ICAgICAgIC8vIFVubGVzcyBJJ20gYSBGbHVzaCwgUGhhbnRvbSwgR2V0TG9jYWwsIG9yIFBoaSwg
bXkgY2hpbGRyZW4gc2hvdWxkIGhhc1Jlc3VsdCgpLgotICAgICAgICAgICAgICAgICAgICBzd2l0
Y2ggKG5vZGUub3AoKSkgeworICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkp
IHsKICAgICAgICAgICAgICAgICAgICAgY2FzZSBGbHVzaDoKICAgICAgICAgICAgICAgICAgICAg
Y2FzZSBQaGFudG9tOgogICAgICAgICAgICAgICAgICAgICBjYXNlIEdldExvY2FsOgogICAgICAg
ICAgICAgICAgICAgICBjYXNlIFBoaToKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICAgICAgVkFM
SURBVEUoKG5vZGVJbmRleCwgZWRnZSksIG1fZ3JhcGhbZWRnZV0uaGFzUmVzdWx0KCkpOworICAg
ICAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKG5vZGUsIGVkZ2UpLCBlZGdlLT5oYXNSZXN1
bHQoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgIH0KQEAgLTEyMSw1NCArMTI0LDUwIEBAIHB1YmxpYzoKICAg
ICAgICAgfQogICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5k
ZXggPCBtX2dyYXBoLm1fYmxvY2tzLnNpemUoKTsgKytibG9ja0luZGV4KSB7CiAgICAgICAgICAg
ICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGgubV9ibG9ja3NbYmxvY2tJbmRleF0uZ2V0KCk7
Ci0gICAgICAgICAgICBpZiAoIWJsb2NrKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAg
ICAgICAgICAgaWYgKCFibG9jay0+aXNSZWFjaGFibGUpCisgICAgICAgICAgICBpZiAoIWJsb2Nr
IHx8ICFibG9jay0+aXNSZWFjaGFibGUpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAg
ICAgICAgICAKLSAgICAgICAgICAgIEJpdFZlY3RvciBwaGlzSW5UaGlzQmxvY2s7Ci0gICAgICAg
ICAgICBCaXRWZWN0b3Igbm9kZXNJblRoaXNCbG9jazsKKyAgICAgICAgICAgIEhhc2hTZXQ8Tm9k
ZSo+IHBoaXNJblRoaXNCbG9jazsKKyAgICAgICAgICAgIEhhc2hTZXQ8Tm9kZSo+IG5vZGVzSW5U
aGlzQmxvY2s7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgYmxvY2stPm51bU5vZGVzKCk7ICsraSkgewotICAgICAgICAgICAgICAgIE5vZGVJbmRleCBu
b2RlSW5kZXggPSBibG9jay0+bm9kZUluZGV4KGkpOwotICAgICAgICAgICAgICAgIE5vZGUmIG5v
ZGUgPSBtX2dyYXBoW25vZGVJbmRleF07Ci0gICAgICAgICAgICAgICAgbm9kZXNJblRoaXNCbG9j
ay5zZXQobm9kZUluZGV4KTsKKyAgICAgICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPm5v
ZGUoaSk7CisgICAgICAgICAgICAgICAgbm9kZXNJblRoaXNCbG9jay5hZGQobm9kZSk7CiAgICAg
ICAgICAgICAgICAgaWYgKGJsb2NrLT5pc1BoaUluZGV4KGkpKQotICAgICAgICAgICAgICAgICAg
ICBwaGlzSW5UaGlzQmxvY2suc2V0KG5vZGVJbmRleCk7Ci0gICAgICAgICAgICAgICAgVl9FUVVB
TCgobm9kZUluZGV4KSwgbXlSZWZDb3VudHNbbm9kZUluZGV4XSwgbm9kZS5hZGp1c3RlZFJlZkNv
dW50KCkpOworICAgICAgICAgICAgICAgICAgICBwaGlzSW5UaGlzQmxvY2suYWRkKG5vZGUpOwor
ICAgICAgICAgICAgICAgIFZfRVFVQUwoKG5vZGUpLCBteVJlZkNvdW50cy5nZXQobm9kZUluZGV4
KSwgbm9kZS5hZGp1c3RlZFJlZkNvdW50KCkpOwogICAgICAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgaiA9IDA7IGogPCBtX2dyYXBoLm51bUNoaWxkcmVuKG5vZGUpOyArK2opIHsKICAgICAgICAg
ICAgICAgICAgICAgRWRnZSBlZGdlID0gbV9ncmFwaC5jaGlsZChub2RlLCBqKTsKICAgICAgICAg
ICAgICAgICAgICAgaWYgKCFlZGdlKQogICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7
Ci0gICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChub2RlSW5kZXgsIGVkZ2UpLCBhY2NlcHRh
YmxlTm9kZUluZGljZXMuZ2V0KGVkZ2UuaW5kZXgoKSkpOworICAgICAgICAgICAgICAgICAgICBW
QUxJREFURSgobm9kZSwgZWRnZSksIGFjY2VwdGFibGVOb2RlSW5kaWNlcy5jb250YWlucyhlZGdl
Lm5vZGUoKSkpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IAogICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBibG9jay0+cGhpcy5zaXplKCk7
ICsraSkgewotICAgICAgICAgICAgICAgIE5vZGVJbmRleCBub2RlSW5kZXggPSBibG9jay0+cGhp
c1tpXTsKLSAgICAgICAgICAgICAgICBOb2RlJiBub2RlID0gbV9ncmFwaFtub2RlSW5kZXhdOwot
ICAgICAgICAgICAgICAgIEFTU0VSVChwaGlzSW5UaGlzQmxvY2suZ2V0KG5vZGVJbmRleCkpOwot
ICAgICAgICAgICAgICAgIFZBTElEQVRFKChub2RlSW5kZXgpLCBub2RlLm9wKCkgPT0gUGhpKTsK
LSAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgbG9jYWwgPSBub2RlLmxvY2FsKCk7Cisg
ICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5waGlzW2ldOworICAgICAgICAgICAg
ICAgIEFTU0VSVChwaGlzSW5UaGlzQmxvY2suY29udGFpbnMobm9kZSkpOworICAgICAgICAgICAg
ICAgIFZBTElEQVRFKChub2RlKSwgbm9kZS0+b3AoKSA9PSBQaGkpOworICAgICAgICAgICAgICAg
IFZpcnR1YWxSZWdpc3RlciBsb2NhbCA9IG5vZGUtPmxvY2FsKCk7CiAgICAgICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBqID0gMDsgaiA8IG1fZ3JhcGgubnVtQ2hpbGRyZW4obm9kZSk7ICsraikg
ewogICAgICAgICAgICAgICAgICAgICBFZGdlIGVkZ2UgPSBtX2dyYXBoLmNoaWxkKG5vZGUsIGop
OwogICAgICAgICAgICAgICAgICAgICBpZiAoIWVkZ2UpCiAgICAgICAgICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIFZB
TElEQVRFKChub2RlSW5kZXgsIGVkZ2UpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBt
X2dyYXBoW2VkZ2VdLm9wKCkgPT0gU2V0TG9jYWwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfHwgbV9ncmFwaFtlZGdlXS5vcCgpID09IFNldEFyZ3VtZW50Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHx8IG1fZ3JhcGhbZWRnZV0ub3AoKSA9PSBGbHVzaAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB8fCBtX2dyYXBoW2VkZ2VdLm9wKCkgPT0gUGhpKTsKKyAgICAgICAg
ICAgICAgICAgICAgVkFMSURBVEUoKG5vZGUsIGVkZ2UpLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBlZGdlLT5vcCgpID09IFNldExvY2FsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHx8IGVkZ2UtPm9wKCkgPT0gU2V0QXJndW1lbnQKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfHwgZWRnZS0+b3AoKSA9PSBGbHVzaAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB8fCBlZGdlLT5vcCgpID09IFBoaSk7CiAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAg
ICAgICAgICAgICBpZiAocGhpc0luVGhpc0Jsb2NrLmdldChlZGdlLmluZGV4KCkpKQorICAgICAg
ICAgICAgICAgICAgICBpZiAocGhpc0luVGhpc0Jsb2NrLmNvbnRhaW5zKGVkZ2Uubm9kZSgpKSkK
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgICAgICAK
LSAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGVzSW5UaGlzQmxvY2suZ2V0KGVkZ2UuaW5kZXgo
KSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChub2RlSW5kZXgsIGVkZ2Up
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaFtlZGdlXS5vcCgpID09
IFNldExvY2FsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBtX2dyYXBoW2Vk
Z2VdLm9wKCkgPT0gU2V0QXJndW1lbnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHx8IG1fZ3JhcGhbZWRnZV0ub3AoKSA9PSBGbHVzaCk7CisgICAgICAgICAgICAgICAgICAgIGlm
IChub2Rlc0luVGhpc0Jsb2NrLmNvbnRhaW5zKGVkZ2Uubm9kZSgpKSkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgVkFMSURBVEUoKG5vZGUsIGVkZ2UpLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZWRnZS0+b3AoKSA9PSBTZXRMb2NhbAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfHwgZWRnZS0+b3AoKSA9PSBTZXRBcmd1bWVudAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfHwgZWRnZS0+b3AoKSA9PSBGbHVzaCk7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAg
ICAgICAgICAgICB9CkBAIC0xODAsMzMgKzE3OSwzMCBAQCBwdWJsaWM6CiAgICAgICAgICAgICAg
ICAgICAgICAgICBCYXNpY0Jsb2NrKiBwcmV2QmxvY2sgPSBtX2dyYXBoLm1fYmxvY2tzW2Jsb2Nr
LT5tX3ByZWRlY2Vzc29yc1trXV0uZ2V0KCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBWQUxJ
REFURSgoQmxvY2ssIGJsb2NrLT5tX3ByZWRlY2Vzc29yc1trXSksIHByZXZCbG9jayk7CiAgICAg
ICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgoQmxvY2ssIGJsb2NrLT5tX3ByZWRlY2Vzc29y
c1trXSksIHByZXZCbG9jay0+aXNSZWFjaGFibGUpOwotICAgICAgICAgICAgICAgICAgICAgICAg
Tm9kZUluZGV4IHByZXZOb2RlSW5kZXggPSBwcmV2QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVy
YW5kKGxvY2FsKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIE5vZGUqIHByZXZOb2RlID0gcHJl
dkJsb2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZChsb2NhbCk7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBJZiB3ZSBoYXZlIGEgUGhpIHRoYXQgaXMgbm90IHJlZmVycmluZyB0byAqdGhp
cyogYmxvY2sgdGhlbiBhbGwgcHJlZGVjZXNzb3JzCiAgICAgICAgICAgICAgICAgICAgICAgICAv
LyBtdXN0IGhhdmUgdGhhdCBsb2NhbCBhdmFpbGFibGUuCi0gICAgICAgICAgICAgICAgICAgICAg
ICBWQUxJREFURSgobG9jYWwsIGJsb2NrSW5kZXgsIEJsb2NrLCBibG9jay0+bV9wcmVkZWNlc3Nv
cnNba10pLCBwcmV2Tm9kZUluZGV4ICE9IE5vTm9kZSk7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBOb2RlKiBwcmV2Tm9kZSA9ICZtX2dyYXBoW3ByZXZOb2RlSW5kZXhdOwotICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKHByZXZOb2RlLT5vcCgpID09IEdldExvY2FsKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcHJldk5vZGVJbmRleCA9IHByZXZOb2RlLT5jaGlsZDEoKS5pbmRl
eCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXZOb2RlID0gJm1fZ3JhcGhbcHJl
dk5vZGVJbmRleF07Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBpZiAobm9kZS5zaG91bGRHZW5lcmF0ZSgpKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgVkFMSURBVEUoKGxvY2FsLCBibG9jay0+bV9wcmVkZWNlc3NvcnNba10sIHByZXZO
b2RlSW5kZXgpLAorICAgICAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKGxvY2FsLCBibG9j
a0luZGV4LCBCbG9jaywgYmxvY2stPm1fcHJlZGVjZXNzb3JzW2tdKSwgcHJldk5vZGUpOworICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKHByZXZOb2RlLT5vcCgpID09IEdldExvY2FsKQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHByZXZOb2RlID0gcHJldk5vZGUtPmNoaWxkMSgpLm5v
ZGUoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5zaG91bGRHZW5lcmF0ZSgp
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKGxvY2FsLCBibG9jay0+
bV9wcmVkZWNlc3NvcnNba10sIHByZXZOb2RlKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBwcmV2Tm9kZS0+c2hvdWxkR2VuZXJhdGUoKSk7CiAgICAgICAgICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgobG9jYWwsIGJsb2Nr
LT5tX3ByZWRlY2Vzc29yc1trXSwgcHJldk5vZGVJbmRleCksCisgICAgICAgICAgICAgICAgICAg
ICAgICBWQUxJREFURSgobG9jYWwsIGJsb2NrLT5tX3ByZWRlY2Vzc29yc1trXSwgcHJldk5vZGUp
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldk5vZGUtPm9wKCkgPT0gU2V0
TG9jYWwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IHByZXZOb2RlLT5vcCgp
ID09IFNldEFyZ3VtZW50CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBwcmV2
Tm9kZS0+b3AoKSA9PSBGbHVzaAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwg
cHJldk5vZGUtPm9wKCkgPT0gUGhpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcmV2
Tm9kZUluZGV4ID09IGVkZ2UuaW5kZXgoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KHByZXZOb2RlID09IGVkZ2Uubm9kZSgpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Zm91bmQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgLy8gQXQgdGhpcyBw
b2ludCBpdCBjYW5ub3QgcmVmZXIgaW50byB0aGlzIGJsb2NrLgotICAgICAgICAgICAgICAgICAg
ICAgICAgVkFMSURBVEUoKGxvY2FsLCBibG9jay0+bV9wcmVkZWNlc3NvcnNba10sIHByZXZOb2Rl
SW5kZXgpLCAhcHJldkJsb2NrLT5pc0luQmxvY2soZWRnZS5pbmRleCgpKSk7CisgICAgICAgICAg
ICAgICAgICAgICAgICBWQUxJREFURSgobG9jYWwsIGJsb2NrLT5tX3ByZWRlY2Vzc29yc1trXSwg
cHJldk5vZGUpLCAhcHJldkJsb2NrLT5pc0luQmxvY2soZWRnZS5ub2RlKCkpKTsKICAgICAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAg
VkFMSURBVEUoKG5vZGVJbmRleCwgZWRnZSksIGZvdW5kKTsKKyAgICAgICAgICAgICAgICAgICAg
VkFMSURBVEUoKG5vZGUsIGVkZ2UpLCBmb3VuZCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgfQogICAgICAgICAgICAgCkBAIC0yMjcsMzQgKzIyMywzMyBAQCBwdWJsaWM6CiAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgYmxvY2stPnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICAgICAgTm9kZUluZGV4IG5vZGVJ
bmRleCA9IGJsb2NrLT5hdChpKTsKLSAgICAgICAgICAgICAgICBOb2RlJiBub2RlID0gbV9ncmFw
aFtub2RlSW5kZXhdOwotICAgICAgICAgICAgICAgIEFTU0VSVChub2Rlc0luVGhpc0Jsb2NrLmdl
dChub2RlSW5kZXgpKTsKLSAgICAgICAgICAgICAgICBWQUxJREFURSgobm9kZUluZGV4KSwgbm9k
ZS5vcCgpICE9IFBoaSk7CisgICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5hdChp
KTsKKyAgICAgICAgICAgICAgICBBU1NFUlQobm9kZXNJblRoaXNCbG9jay5jb250YWlucyhub2Rl
KSk7CisgICAgICAgICAgICAgICAgVkFMSURBVEUoKG5vZGUpLCBub2RlLT5vcCgpICE9IFBoaSk7
CiAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gMDsgaiA8IG1fZ3JhcGgubnVtQ2hp
bGRyZW4obm9kZSk7ICsraikgewogICAgICAgICAgICAgICAgICAgICBFZGdlIGVkZ2UgPSBtX2dy
YXBoLmNoaWxkKG5vZGUsIGopOwogICAgICAgICAgICAgICAgICAgICBpZiAoIWVkZ2UpCiAgICAg
ICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICAgICAgVkFMSURB
VEUoKG5vZGVJbmRleCwgZWRnZSksIG5vZGVzSW5UaGlzQmxvY2suZ2V0KG5vZGVJbmRleCkpOwor
ICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgobm9kZSwgZWRnZSksIG5vZGVzSW5UaGlzQmxv
Y2suY29udGFpbnMoZWRnZS5ub2RlKCkpKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICAgCi0gICAgICAgICAgICAgICAgaWYgKCFub2RlLnNob3VsZEdlbmVyYXRlKCkpCisgICAg
ICAgICAgICAgICAgaWYgKCFub2RlLT5zaG91bGRHZW5lcmF0ZSgpKQogICAgICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUub3AoKSkgeworICAg
ICAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewogICAgICAgICAgICAgICAgIGNhc2Ug
R2V0TG9jYWw6Ci0gICAgICAgICAgICAgICAgICAgIGlmIChub2RlLnZhcmlhYmxlQWNjZXNzRGF0
YSgpLT5pc0NhcHR1cmVkKCkpCisgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT52YXJpYWJs
ZUFjY2Vzc0RhdGEoKS0+aXNDYXB0dXJlZCgpKQogICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChub2RlSW5kZXgsIGJsb2NrSW5kZXgp
LCBnZXRMb2NhbFBvc2l0aW9ucy5vcGVyYW5kKG5vZGUubG9jYWwoKSkgPT0gbm90U2V0KTsKLSAg
ICAgICAgICAgICAgICAgICAgZ2V0TG9jYWxQb3NpdGlvbnMub3BlcmFuZChub2RlLmxvY2FsKCkp
ID0gaTsKKyAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKG5vZGUsIGJsb2NrSW5kZXgpLCBn
ZXRMb2NhbFBvc2l0aW9ucy5vcGVyYW5kKG5vZGUtPmxvY2FsKCkpID09IG5vdFNldCk7CisgICAg
ICAgICAgICAgICAgICAgIGdldExvY2FsUG9zaXRpb25zLm9wZXJhbmQobm9kZS0+bG9jYWwoKSkg
PSBpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICBjYXNlIFNl
dExvY2FsOgotICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS52YXJpYWJsZUFjY2Vzc0RhdGEo
KS0+aXNDYXB0dXJlZCgpKQorICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS0+dmFyaWFibGVB
Y2Nlc3NEYXRhKCktPmlzQ2FwdHVyZWQoKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgICAgICAgICAvLyBPbmx5IHJlY29yZCB0aGUgZmlyc3QgU2V0TG9jYWwu
IFRoZXJlIG1heSBiZSBtdWx0aXBsZSBTZXRMb2NhbHMKICAgICAgICAgICAgICAgICAgICAgLy8g
YmVjYXVzZSBvZiBmbHVzaGluZy4KLSAgICAgICAgICAgICAgICAgICAgaWYgKHNldExvY2FsUG9z
aXRpb25zLm9wZXJhbmQobm9kZS5sb2NhbCgpKSAhPSBub3RTZXQpCisgICAgICAgICAgICAgICAg
ICAgIGlmIChzZXRMb2NhbFBvc2l0aW9ucy5vcGVyYW5kKG5vZGUtPmxvY2FsKCkpICE9IG5vdFNl
dCkKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBz
ZXRMb2NhbFBvc2l0aW9ucy5vcGVyYW5kKG5vZGUubG9jYWwoKSkgPSBpOworICAgICAgICAgICAg
ICAgICAgICBzZXRMb2NhbFBvc2l0aW9ucy5vcGVyYW5kKG5vZGUtPmxvY2FsKCkpID0gaTsKICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0yOTQsOSArMjg5LDkgQEAgcHJpdmF0ZToKICAgICAg
ICAgICAgIGdldExvY2FsUG9zaXRpb25zLm9wZXJhbmQob3BlcmFuZCkgPCBzZXRMb2NhbFBvc2l0
aW9ucy5vcGVyYW5kKG9wZXJhbmQpKTsKICAgICB9CiAgICAgCi0gICAgdm9pZCByZXBvcnRWYWxp
ZGF0aW9uQ29udGV4dChOb2RlSW5kZXggbm9kZUluZGV4KQorICAgIHZvaWQgcmVwb3J0VmFsaWRh
dGlvbkNvbnRleHQoTm9kZSogbm9kZSkKICAgICB7Ci0gICAgICAgIGRhdGFMb2dGKCJAJXUiLCBu
b2RlSW5kZXgpOworICAgICAgICBkYXRhTG9nRigiQCV1Iiwgbm9kZS0+aW5kZXgoKSk7CiAgICAg
fQogICAgIAogICAgIGVudW0gQmxvY2tUYWcgeyBCbG9jayB9OwpAQCAtMzA1LDkgKzMwMCw5IEBA
IHByaXZhdGU6CiAgICAgICAgIGRhdGFMb2dGKCJCbG9jayAjJXUiLCBibG9ja0luZGV4KTsKICAg
ICB9CiAgICAgCi0gICAgdm9pZCByZXBvcnRWYWxpZGF0aW9uQ29udGV4dChOb2RlSW5kZXggbm9k
ZUluZGV4LCBFZGdlIGVkZ2UpCisgICAgdm9pZCByZXBvcnRWYWxpZGF0aW9uQ29udGV4dChOb2Rl
KiBub2RlLCBFZGdlIGVkZ2UpCiAgICAgewotICAgICAgICBkYXRhTG9nRigiQCV1IC0+ICVzQCV1
Iiwgbm9kZUluZGV4LCB1c2VLaW5kVG9TdHJpbmcoZWRnZS51c2VLaW5kKCkpLCBlZGdlLmluZGV4
KCkpOworICAgICAgICBkYXRhTG9nRigiQCV1IC0+ICVzQCV1Iiwgbm9kZS0+aW5kZXgoKSwgdXNl
S2luZFRvU3RyaW5nKGVkZ2UudXNlS2luZCgpKSwgZWRnZS5pbmRleCgpKTsKICAgICB9CiAgICAg
CiAgICAgdm9pZCByZXBvcnRWYWxpZGF0aW9uQ29udGV4dChWaXJ0dWFsUmVnaXN0ZXIgbG9jYWws
IEJsb2NrSW5kZXggYmxvY2tJbmRleCkKQEAgLTMyMiwyNyArMzE3LDI3IEBAIHByaXZhdGU6CiAg
ICAgfQogICAgIAogICAgIHZvaWQgcmVwb3J0VmFsaWRhdGlvbkNvbnRleHQoCi0gICAgICAgIFZp
cnR1YWxSZWdpc3RlciBsb2NhbCwgQmxvY2tJbmRleCBzb3VyY2VCbG9ja0luZGV4LCBOb2RlSW5k
ZXggcHJldk5vZGVJbmRleCkKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGxvY2FsLCBCbG9ja0lu
ZGV4IHNvdXJjZUJsb2NrSW5kZXgsIE5vZGUqIHByZXZOb2RlKQogICAgIHsKLSAgICAgICAgZGF0
YUxvZ0YoIkAldSBmb3IgciVkIGluIEJsb2NrICMldSIsIHByZXZOb2RlSW5kZXgsIGxvY2FsLCBz
b3VyY2VCbG9ja0luZGV4KTsKKyAgICAgICAgZGF0YUxvZ0YoIkAldSBmb3IgciVkIGluIEJsb2Nr
ICMldSIsIHByZXZOb2RlLT5pbmRleCgpLCBsb2NhbCwgc291cmNlQmxvY2tJbmRleCk7CiAgICAg
fQogICAgIAogICAgIHZvaWQgcmVwb3J0VmFsaWRhdGlvbkNvbnRleHQoCi0gICAgICAgIE5vZGVJ
bmRleCBub2RlSW5kZXgsIEJsb2NrSW5kZXggYmxvY2tJbmRleCkKKyAgICAgICAgTm9kZSogbm9k
ZSwgQmxvY2tJbmRleCBibG9ja0luZGV4KQogICAgIHsKLSAgICAgICAgZGF0YUxvZ0YoIkAldSBp
biBCbG9jayAjJXUiLCBub2RlSW5kZXgsIGJsb2NrSW5kZXgpOworICAgICAgICBkYXRhTG9nRigi
QCV1IGluIEJsb2NrICMldSIsIG5vZGUtPmluZGV4KCksIGJsb2NrSW5kZXgpOwogICAgIH0KICAg
ICAKICAgICB2b2lkIHJlcG9ydFZhbGlkYXRpb25Db250ZXh0KAotICAgICAgICBOb2RlSW5kZXgg
bm9kZUluZGV4LCBOb2RlSW5kZXggbm9kZUluZGV4MiwgQmxvY2tJbmRleCBibG9ja0luZGV4KQor
ICAgICAgICBOb2RlKiBub2RlLCBOb2RlKiBub2RlMiwgQmxvY2tJbmRleCBibG9ja0luZGV4KQog
ICAgIHsKLSAgICAgICAgZGF0YUxvZ0YoIkAldSBhbmQgQCV1IGluIEJsb2NrICMldSIsIG5vZGVJ
bmRleCwgbm9kZUluZGV4MiwgYmxvY2tJbmRleCk7CisgICAgICAgIGRhdGFMb2dGKCJAJXUgYW5k
IEAldSBpbiBCbG9jayAjJXUiLCBub2RlLT5pbmRleCgpLCBub2RlMi0+aW5kZXgoKSwgYmxvY2tJ
bmRleCk7CiAgICAgfQogICAgIAogICAgIHZvaWQgcmVwb3J0VmFsaWRhdGlvbkNvbnRleHQoCi0g
ICAgICAgIE5vZGVJbmRleCBub2RlSW5kZXgsIEJsb2NrSW5kZXggYmxvY2tJbmRleCwgTm9kZUlu
ZGV4IGV4cGVjdGVkTm9kZUluZGV4LCBFZGdlIGluY29taW5nRWRnZSkKKyAgICAgICAgTm9kZSog
bm9kZSwgQmxvY2tJbmRleCBibG9ja0luZGV4LCBOb2RlKiBleHBlY3RlZE5vZGUsIEVkZ2UgaW5j
b21pbmdFZGdlKQogICAgIHsKLSAgICAgICAgZGF0YUxvZ0YoIkAldSBpbiBCbG9jayAjJXUsIHNl
YXJjaGluZyBmb3IgQCV1IGZyb20gQCV1Iiwgbm9kZUluZGV4LCBibG9ja0luZGV4LCBleHBlY3Rl
ZE5vZGVJbmRleCwgaW5jb21pbmdFZGdlLmluZGV4KCkpOworICAgICAgICBkYXRhTG9nRigiQCV1
IGluIEJsb2NrICMldSwgc2VhcmNoaW5nIGZvciBAJXUgZnJvbSBAJXUiLCBub2RlLT5pbmRleCgp
LCBibG9ja0luZGV4LCBleHBlY3RlZE5vZGUtPmluZGV4KCksIGluY29taW5nRWRnZS5pbmRleCgp
KTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBkdW1wRGF0YSh1bnNpZ25lZCB2YWx1ZSkKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmNwcAkocmV2
aXNpb24gMTM5NTg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxE
YXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIkFyZ0xp
c3QuaCIKICNpbmNsdWRlICJDb2RlQ2FjaGUuaCIKICNpbmNsdWRlICJDb21tb25JZGVudGlmaWVy
cy5oIgorI2luY2x1ZGUgIkRGR0xvbmdMaXZlZFN0YXRlLmgiCiAjaW5jbHVkZSAiRGVidWdnZXJB
Y3RpdmF0aW9uLmgiCiAjaW5jbHVkZSAiRnVuY3Rpb25Db25zdHJ1Y3Rvci5oIgogI2luY2x1ZGUg
IkdDQWN0aXZpdHlDYWxsYmFjay5oIgpAQCAtMjUxLDYgKzI1MiwxMSBAQCBKU0dsb2JhbERhdGE6
OkpTR2xvYmFsRGF0YShHbG9iYWxEYXRhVHlwCiAgICAgCiAgICAgaWYgKE9wdGlvbnM6OmVuYWJs
ZVByb2ZpbGVyKCkpCiAgICAgICAgIG1fcGVyQnl0ZWNvZGVQcm9maWxlciA9IGFkb3B0UHRyKG5l
dyBQcm9maWxlcjo6RGF0YWJhc2UoKnRoaXMpKTsKKworI2lmIEVOQUJMRShERkdfSklUKQorICAg
IGlmIChjYW5Vc2VKSVQoKSkKKyAgICAgICAgbV9kZmdTdGF0ZSA9IGFkb3B0UHRyKG5ldyBERkc6
OkxvbmdMaXZlZFN0YXRlKCkpOworI2VuZGlmCiB9CiAKIEpTR2xvYmFsRGF0YTo6fkpTR2xvYmFs
RGF0YSgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERh
dGEuaAkocmV2aXNpb24gMTM5NTg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNHbG9iYWxEYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTkwLDYgKzkwLDEyIEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgIGNsYXNzIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlOwogICAgIGNsYXNz
IFVubGlua2VkUHJvZ3JhbUNvZGVCbG9jazsKIAorI2lmIEVOQUJMRShERkdfSklUKQorICAgIG5h
bWVzcGFjZSBERkcgeworICAgIGNsYXNzIExvbmdMaXZlZFN0YXRlOworICAgIH0KKyNlbmRpZiAv
LyBFTkFCTEUoREZHX0pJVCkKKwogICAgIHN0cnVjdCBIYXNoVGFibGU7CiAgICAgc3RydWN0IElu
c3RydWN0aW9uOwogCkBAIC0xODgsNiArMTk0LDEwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
ICAvLyBUaGUgaGVhcCBzaG91bGQgYmUganVzdCBhZnRlciBleGVjdXRhYmxlQWxsb2NhdG9yIGFu
ZCBiZWZvcmUgb3RoZXIgbWVtYmVycyB0byBlbnN1cmUgdGhhdCBpdCdzCiAgICAgICAgIC8vIGRl
c3RydWN0ZWQgYWZ0ZXIgYWxsIHRoZSBvYmplY3RzIHRoYXQgcmVmZXJlbmNlIGl0LgogICAgICAg
ICBIZWFwIGhlYXA7CisgICAgICAgIAorI2lmIEVOQUJMRShERkdfSklUKQorICAgICAgICBPd25Q
dHI8REZHOjpMb25nTGl2ZWRTdGF0ZT4gbV9kZmdTdGF0ZTsKKyNlbmRpZiAvLyBFTkFCTEUoREZH
X0pJVCkKIAogICAgICAgICBHbG9iYWxEYXRhVHlwZSBnbG9iYWxEYXRhVHlwZTsKICAgICAgICAg
Q2xpZW50RGF0YSogY2xpZW50RGF0YTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>183394</attachid>
            <date>2013-01-18 00:31:57 -0800</date>
            <delta_ts>2013-01-21 00:22:36 -0800</delta_ts>
            <desc>work in progress</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>151635</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RWYWx1ZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RWYWx1ZS5oCShy
ZXZpc2lvbiAxNDAxMDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0
VmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtNDE4LDYgKzQxOCw4IEBAIHN0cnVjdCBBYnN0cmFj
dFZhbHVlIHsKICAgICAvLyAgICBjaGFuZ2UgeCdzIHN0cnVjdHVyZSBhbmQgd2UgaGF2ZSBubyB3
YXkgb2YgcHJvdmluZyBvdGhlcndpc2UsIGJ1dAogICAgIC8vICAgIHgncyBtX2Z1dHVyZVBvc3Np
YmxlU3RydWN0dXJlIHdpbGwgYmUgd2hhdGV2ZXIgc3RydWN0dXJlIHdlIGhhZCBjaGVja2VkCiAg
ICAgLy8gICAgd2hlbiBnZXR0aW5nIHByb3BlcnR5ICdmJy4KKyAgICAKKyAgICAvLyBOQi4gQWxs
IGZpZWxkcyBpbiB0aGlzIHN0cnVjdCBtdXN0IGhhdmUgdHJpdmlhbCBkZXN0cnVjdG9ycy4KIAog
ICAgIC8vIFRoaXMgaXMgYSBwcm92ZW4gY29uc3RyYWludCBvbiB0aGUgc3RydWN0dXJlcyB0aGF0
IHRoaXMgdmFsdWUgY2FuIGhhdmUgcmlnaHQKICAgICAvLyBub3cuIFRoZSBzdHJ1Y3R1cmUgb2Yg
dGhlIGN1cnJlbnQgdmFsdWUgbXVzdCBiZWxvbmcgdG8gdGhpcyBzZXQuIFRoZSBzZXQgbWF5Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FkamFjZW5jeUxpc3QuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FkamFjZW5jeUxpc3QuaAkocmV2
aXNpb24gMTQwMTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBZGphY2VuY3lM
aXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMSwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTU3LDcgKzU3LDcgQEAgcHVibGljOgogICAgICAgICB9CiAg
ICAgfQogICAgIAotICAgIEFkamFjZW5jeUxpc3QoS2luZCBraW5kLCBOb2RlSW5kZXggY2hpbGQx
LCBOb2RlSW5kZXggY2hpbGQyLCBOb2RlSW5kZXggY2hpbGQzKQorICAgIEFkamFjZW5jeUxpc3Qo
S2luZCBraW5kLCBOb2RlKiBjaGlsZDEsIE5vZGUqIGNoaWxkMiwgTm9kZSogY2hpbGQzKQogI2lm
ICFBU1NFUlRfRElTQUJMRUQKICAgICAgICAgOiBtX2tpbmQoRml4ZWQpCiAjZW5kaWYKQEAgLTEx
OCw3ICsxMTgsNyBAQCBwdWJsaWM6CiAgICAgICAgIGNoaWxkKDIpID0gY2hpbGQzOwogICAgIH0K
ICAgICAKLSAgICB2b2lkIGluaXRpYWxpemUoTm9kZUluZGV4IGNoaWxkMSA9IE5vTm9kZSwgTm9k
ZUluZGV4IGNoaWxkMiA9IE5vTm9kZSwgTm9kZUluZGV4IGNoaWxkMyA9IE5vTm9kZSkKKyAgICB2
b2lkIGluaXRpYWxpemUoTm9kZSogY2hpbGQxID0gMCwgTm9kZSogY2hpbGQyID0gMCwgTm9kZSog
Y2hpbGQzID0gMCkKICAgICB7CiAgICAgICAgIGluaXRpYWxpemUoRWRnZShjaGlsZDEpLCBFZGdl
KGNoaWxkMiksIEVkZ2UoY2hpbGQzKSk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdBbGxvY2F0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0FsbG9jYXRvci5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdBbGxvY2F0b3IuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyMzUgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdB
bGxvY2F0b3JfaAorI2RlZmluZSBERkdBbGxvY2F0b3JfaAorCisjaW5jbHVkZSA8d3RmL1BsYXRm
b3JtLmg+CisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgPHd0Zi9QYWdlQWxsb2Nh
dGlvbkFsaWduZWQuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCisvLyBD
dXN0b20gcG9vbCBhbGxvY2F0b3IgZm9yIGV4YWN0bHkgb25lIHR5cGUgKHR5cGUgVCkuIEl0IGhh
cyBmYXN0IChPKDEpLCBvbmx5IGEgZmV3CisvLyBpbnN0cnVjdGlvbnMpIGFsbG9jYXRvciwgYW5k
IGEgc2ltaWxhcmx5IGZhc3QgZnJlZSgpLiBSZWN5Y2xpbmcgd29ya3MgaWYgZWl0aGVyIG9mCisv
LyB0aGUgZm9sbG93aW5nIGlzIHRydWU6CisvLyAtIFQgaGFzIGEgdHJpdmlhbCBkZXN0cnVjdG9y
LiBJbiB0aGF0IGNhc2UgeW91IGRvbid0IGhhdmUgdG8gZXZlciBjYWxsIGZyZWUoKSBvbgorLy8g
ICBhbnl0aGluZy4gWW91IGNhbiBqdXN0IGNhbGwgZnJlZUFsbCgpIGluc3RlYWQuCisvLyAtIFlv
dSBjYWxsIGZyZWUoKSBvbiBhbGwgVCdzIHRoYXQgeW91IGFsbG9jYXRlZCwgYW5kIG5ldmVyIHVz
ZSBmcmVlQWxsKCkuCisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitjbGFzcyBBbGxvY2F0b3Igewor
cHVibGljOgorICAgIEFsbG9jYXRvcigpOworICAgIH5BbGxvY2F0b3IoKTsKKyAgICAKKyAgICB2
b2lkKiBhbGxvY2F0ZSgpOyAvLyBVc2UgcGxhY2VtZW50IG5ldyB0byBhbGxvY2F0ZSwgYW5kIGF2
b2lkIHVzaW5nIHRoaXMgbWV0aG9kLgorICAgIHZvaWQgZnJlZShUKik7IC8vIENhbGwgdGhpcyBt
ZXRob2QgdG8gZGVsZXRlOyBuZXZlciB1c2UgJ2RlbGV0ZScgZGlyZWN0bHkuCisgICAgCisgICAg
dm9pZCBmcmVlQWxsKCk7IC8vIE9ubHkgY2FsbCB0aGlzIGlmIFQgaGFzIGEgdHJpdmlhbCBkZXN0
cnVjdG9yLgorICAgIHZvaWQgcmVzZXQoKTsgLy8gTGlrZSBmcmVlQWxsKCksIGJ1dCBhbHNvIHJl
dHVybnMgYWxsIG1lbW9yeSB0byB0aGUgT1MuCisgICAgCisgICAgdW5zaWduZWQgaW5kZXhPZihU
Kik7CisgICAgCisgICAgc3RhdGljIEFsbG9jYXRvciogYWxsb2NhdG9yT2YoVCopOworICAgIAor
cHJpdmF0ZToKKyAgICB2b2lkKiBidW1wQWxsb2NhdGUoKTsKKyAgICB2b2lkKiBmcmVlTGlzdEFs
bG9jYXRlKCk7CisgICAgdm9pZCogYWxsb2NhdGVTbG93KCk7CisgICAgdm9pZCBmcmVlUmVnaW9u
c1N0YXJ0aW5nQXQoUmVnaW9uKik7CisgICAgdm9pZCBzdGFydGluZ0J1bXBpbmdJbihSZWdpb24q
KTsKKyAgICAKKyAgICBzdHJ1Y3QgUmVnaW9uIHsKKyAgICAgICAgc3RhdGljIHNpemVfdCBzaXpl
KCkgeyByZXR1cm4gNjQgKiBLQjsgfQorICAgICAgICBzdGF0aWMgc2l6ZV90IGhlYWRlclNpemUo
KSB7IHJldHVybiBzdGQ6Om1heChzaXplb2YoUmVnaW9uKSwgc2l6ZW9mKFQpKTsgfQorICAgICAg
ICBzdGF0aWMgdW5zaWduZWQgbnVtYmVyT2ZUaGluZ3NQZXJSZWdpb24oKSB7IHJldHVybiAoc2l6
ZSgpIC0gaGVhZGVyU2l6ZSgpKSAvIHNpemVvZihUKTsgfQorICAgICAgICBUKiBkYXRhKCkgeyBy
ZXR1cm4gYml0d2lzZV9jYXN0PFQqPihiaXR3aXNlX2Nhc3Q8Y2hhcio+KHRoaXMpICsgaGVhZGVy
U2l6ZSgpKTsgfQorICAgICAgICBib29sIGlzSW5UaGlzUmVnaW9uKFQqIHBvaW50ZXIpIHsgcmV0
dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkPihwb2ludGVyIC0gZGF0YSgpKSA8IG51bWJlck9mVGhp
bmdzUGVyUmVnaW9uKCk7IH0KKyAgICAgICAgUmVnaW9uKiByZWdpb25Gb3IoVCogcG9pbnRlcikg
eyByZXR1cm4gYml0d2lzZV9jYXN0PFJlZ2lvbio+KGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KHBv
aW50ZXIpICYgfihzaXplKCkgLSAxKSk7IH0KKyAgICAgICAgCisgICAgICAgIFBhZ2VBbGxvY2F0
aW9uQWxpZ25lZCBtX2FsbG9jYXRpb247CisgICAgICAgIEFsbG9jYXRvciogbV9hbGxvY2F0b3I7
CisgICAgICAgIFJlZ2lvbiogbV9uZXh0OworICAgIH07CisgICAgCisgICAgUmVnaW9uKiBtX3Jl
Z2lvbkhlYWQ7CisgICAgdm9pZCoqIG1fZnJlZUxpc3RIZWFkOworICAgIFQqIG1fYnVtcEVuZDsK
KyAgICB1bnNpZ25lZCBtX2J1bXBSZW1haW5pbmc7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBU
PgoraW5saW5lIEFsbG9jYXRvcjo6QWxsb2NhdG9yKCkKKyAgICA6IG1fcmVnaW9uSGVhZCgwKQor
ICAgICwgbV9mcmVlTGlzdEhlYWQoMCkKKyAgICAsIG1fYnVtcFJlbWFpbmluZygwKQoreworfQor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgoraW5saW5lIEFsbG9jYXRvcjo6fkFsbG9jYXRvcigpCit7
CisgICAgcmVzZXQoKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK0FMV0FZU19JTkxJTkUg
dm9pZCogQWxsb2NhdG9yOjphbGxvY2F0ZSgpCit7CisgICAgaWYgKExJS0VMWSh2b2lkKiByZXN1
bHQgPSBidW1wQWxsb2NhdGUoKSkpCisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgcmV0dXJu
IGZyZWVMaXN0QWxsb2NhdGUoKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK3ZvaWQgQWxs
b2NhdG9yOjpmcmVlKFQqIG9iamVjdCkKK3sKKyAgICBvYmplY3QtPn5UKCk7CisgICAgCisgICAg
dm9pZCoqIGNlbGwgPSBiaXR3aXNlX2Nhc3Q8dm9pZCoqPihvYmplY3QpOworICAgICpjZWxsID0g
bV9mcmVlTGlzdEhlYWQ7CisgICAgbV9mcmVlTGlzdEhlYWQgPSBjZWxsOworfQorCit0ZW1wbGF0
ZTx0eXBlbmFtZSBUPgordm9pZCBBbGxvY2F0b3I6OmZyZWVBbGwoKQoreworICAgIGlmICghbV9y
ZWdpb25IZWFkKSB7CisgICAgICAgIEFTU0VSVCghbV9idW1wUmVtYWluaW5nKTsKKyAgICAgICAg
QVNTRVJUKCFtX2ZyZWVMaXN0SGVhZCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisg
ICAgLy8gU2luY2UgdGhlIGNhbGxlciBpcyBvcHRpbmcgb3V0IG9mIGNhbGxpbmcgdGhlIGRlc3Ry
dWN0b3IgZm9yIGFueSBhbGxvY2F0ZWQgdGhpbmcsCisgICAgLy8gd2UgaGF2ZSB0d28gY2hvaWNl
cywgcGx1cyBhIGNvbnRpbnV1bSBiZXR3ZWVuOiB3ZSBjYW4gZWl0aGVyIGp1c3QgZGVsZXRlIGFs
bCByZWdpb25zCisgICAgLy8gKGkuZS4gY2FsbCByZXNldCgpKSwgb3Igd2UgY2FuIG1ha2UgYWxs
IHJlZ2lvbnMgYXZhaWxhYmxlIGZvciByZXVzZS4gV2UgZG8gc29tZXRoaW5nCisgICAgLy8gdGhh
dCBvcHRpbWl6ZXMgZm9yIChhKSBzcGVlZCBvZiBmcmVlQWxsKCksIChiKSB0aGUgYXNzdW1wdGlv
biB0aGF0IGlmIHRoZSB1c2VyIGNhbGxzCisgICAgLy8gZnJlZUFsbCgpIHRoZW4gdGhleSB3aWxs
IHByb2JhYmx5IGJlIGNhbGxpbmcgYWxsb2NhdGUoKSBpbiB0aGUgbmVhciBmdXR1cmUuIE5hbWVs
eSwKKyAgICAvLyB3ZSBmcmVlIGFsbCBidXQgb25lIHJlZ2lvbiwgYW5kIG1ha2UgdGhlIHJlbWFp
bmluZyByZWdpb24gYSBidW1wIGFsbG9jYXRpb24gcmVnaW9uLgorICAgIAorICAgIGZvciAoUmVn
aW9uKiByZWdpb24gPSBtX3JlZ2lvbkhlYWQtPm1fbmV4dDsgcmVnaW9uOyByZWdpb24gPSByZWdp
b24tPm1fbmV4dCkKKyAgICAgICAgYnVpbGRGcmVlTGlzdEluKHJlZ2lvbik7CisgICAgCisgICAg
bV9yZWdpb25IZWFkLT5tX25leHQgPSAwOworICAgIG1fZnJlZUxpc3RIZWFkID0gMDsKKyAgICBz
dGFydEJ1bXBpbmdJbihtX3JlZ2lvbkhlYWQpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgor
dm9pZCBBbGxvY2F0b3I6OnJlc2V0KCkKK3sKKyAgICBmcmVlUmVnaW9uc1N0YXJ0aW5nQXQobV9y
ZWdpb25IZWFkKTsKKyAgICAKKyAgICBtX3JlZ2lvbkhlYWQgPSAwOworICAgIG1fZnJlZUxpc3RI
ZWFkID0gMDsKKyAgICBtX2J1bXBSZW1haW5pbmcgPSAwOworfQorCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPgordW5zaWduZWQgQWxsb2NhdG9yOjppbmRleE9mKFQqIG9iamVjdCkKK3sKKyAgICB1bnNp
Z25lZCBiYXNlSW5kZXggPSAwOworICAgIGZvciAoUmVnaW9uKiByZWdpb24gPSBtX3JlZ2lvbkhl
YWQ7IHJlZ2lvbjsgcmVnaW9uID0gcmVnaW9uLT5tX25leHQpIHsKKyAgICAgICAgaWYgKHJlZ2lv
bi0+aXNJblRoaXNSZWdpb24ob2JqZWN0KSkKKyAgICAgICAgICAgIHJldHVybiBiYXNlSW5kZXgg
KyAob2JqZWN0IC0gcmVnaW9uLT5kYXRhKCkpOworICAgICAgICBiYXNlSW5kZXggKz0gUmVnaW9u
OjpudW1iZXJPZlRoaW5nc1BlclJlZ2lvbigpOworICAgIH0KKyAgICBDUkFTSCgpOworICAgIHJl
dHVybiAwOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorQWxsb2NhdG9yKiBBbGxvY2F0b3I6
OmFsbG9jYXRvck9mKFQqIG9iamVjdCkKK3sKKyAgICByZXR1cm4gUmVnaW9uOjpyZWdpb25Gb3Io
b2JqZWN0KS0+bV9hbGxvY2F0b3I7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitBTFdBWVNf
SU5MSU5FIHZvaWQqIEFsbG9jYXRvcjo6YnVtcEFsbG9jYXRlKCkKK3sKKyAgICBpZiAodW5zaWdu
ZWQgcmVtYWluaW5nID0gbV9idW1wUmVtYWluaW5nKSB7CisgICAgICAgIHJlbWFpbmluZy0tOwor
ICAgICAgICBtX2J1bXBSZW1haW5pbmcgPSByZW1haW5pbmc7CisgICAgICAgIHJldHVybiBtX2J1
bXBFbmQgLSAocmVtYWluaW5nICsgMSk7CisgICAgfQorICAgIHJldHVybiAwOworfQorCit0ZW1w
bGF0ZTx0eXBlbmFtZSBUPgordm9pZCogQWxsb2NhdG9yOjpmcmVlTGlzdEFsbG9jYXRlKCkKK3sK
KyAgICB2b2lkKiogcmVzdWx0ID0gbV9mcmVlTGlzdEhlYWQ7CisgICAgaWYgKFVOTElLRUxZKCFy
ZXN1bHQpKQorICAgICAgICByZXR1cm4gYWxsb2NhdGVTbG93KCk7CisgICAgbV9mcmVlTGlzdEhl
YWQgPSBiaXR3aXNlX2Nhc3Q8dm9pZCoqPigqcmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0Owor
fQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgordm9pZCogQWxsb2NhdG9yOjphbGxvY2F0ZVNsb3co
KQoreworICAgIEFTU0VSVCghbV9mcmVlTGlzdEhlYWQpOworICAgIEFTU0VSVCghbV9idW1wUmVt
YWluaW5nKTsKKyAgICAKKyAgICBQYWdlQWxsb2NhdGlvbkFsaWduZWQgYWxsb2NhdGlvbiA9IFBh
Z2VBbGxvY2F0aW9uQWxpZ25lZDo6YWxsb2NhdGUoUmVnaW9uOjpzaXplKCksIFJlZ2lvbjo6c2l6
ZSgpLCBPU0FsbG9jYXRvcjo6SlNHQ0hlYXBQYWdlcyk7CisgICAgaWYgKCFzdGF0aWNfY2FzdDxi
b29sPihhbGxvY2F0aW9uKSkKKyAgICAgICAgQ1JBU0goKTsKKyAgICBSZWdpb24qIHJlZ2lvbiA9
IHN0YXRpY19jYXN0PFJlZ2lvbio+KGFsbG9jYXRpb24uYmFzZSgpKTsKKyAgICByZWdpb24tPm1f
YWxsb2NhdGlvbiA9IG1fYWxsb2NhdGlvbjsKKyAgICByZWdpb24tPm1fYWxsb2N0b3IgPSB0aGlz
OworICAgIHN0YXJ0QnVtcGluZ0luKHJlZ2lvbik7CisgICAgcmVnaW9uLT5tX25leHQgPSBtX3Jl
Z2lvbkhlYWQ7CisgICAgbV9yZWdpb25IZWFkID0gcmVnaW9uOworICAgIAorICAgIHZvaWQqIHJl
c3VsdCA9IGJ1bXBBbGxvY2F0ZSgpOworICAgIEFTU0VSVChyZXN1bHQpOworICAgIHJldHVybiBy
ZXN1bHQ7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+Cit2b2lkIEFsbG9jYXRvcjo6ZnJlZVJl
Z2lvbnNTdGFydGluZ0F0KFJlZ2lvbiogcmVnaW9uKQoreworICAgIHdoaWxlIChyZWdpb24pIHsK
KyAgICAgICAgUmVnaW9uKiBuZXh0UmVnaW9uID0gcmVnaW9uLT5tX25leHQ7CisgICAgICAgIHJl
Z2lvbi0+bV9hbGxvY2F0aW9uLmRlYWxsb2NhdGUoKTsKKyAgICAgICAgcmVnaW9uID0gbmV4dFJl
Z2lvbjsKKyAgICB9Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+Cit2b2lkIEFsbG9jYXRvcjo6
c3RhcnRCdW1waW5nSW4oUmVnaW9uKiByZWdpb24pCit7CisgICAgbV9idW1wRW5kID0gcmVnaW9u
LT5kYXRhKCkgKyBSZWdpb246Om51bWJlck9mVGhpbmdzUGVyUmVnaW9uKCk7CisgICAgbV9idW1w
UmVtYWluaW5nID0gUmVnaW9uOjpudW1iZXJPZlRoaW5nc1BlclJlZ2lvbigpOworfQorCit9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2Vu
ZGlmIC8vIERGR0FsbG9jYXRvcl9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQmFzaWNCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQmFzaWNCbG9jay5oCShyZXZpc2lvbiAxNDAxMDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0Jhc2ljQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMzksNyArMzksNyBAQCBu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKIHR5cGVkZWYgVmVjdG9yIDxCbG9ja0lu
ZGV4LCAyPiBQcmVkZWNlc3Nvckxpc3Q7CiAKLXN0cnVjdCBCYXNpY0Jsb2NrIDogVmVjdG9yPE5v
ZGVJbmRleCwgOD4geworc3RydWN0IEJhc2ljQmxvY2sgOiBWZWN0b3I8Tm9kZSosIDg+IHsKICAg
ICBCYXNpY0Jsb2NrKHVuc2lnbmVkIGJ5dGVjb2RlQmVnaW4sIHVuc2lnbmVkIG51bUFyZ3VtZW50
cywgdW5zaWduZWQgbnVtTG9jYWxzKQogICAgICAgICA6IGJ5dGVjb2RlQmVnaW4oYnl0ZWNvZGVC
ZWdpbikKICAgICAgICAgLCBpc09TUlRhcmdldChmYWxzZSkKQEAgLTcyLDcgKzcyLDcgQEAgc3Ry
dWN0IEJhc2ljQmxvY2sgOiBWZWN0b3I8Tm9kZUluZGV4LCA4PgogICAgIH0KICAgICAKICAgICBz
aXplX3QgbnVtTm9kZXMoKSBjb25zdCB7IHJldHVybiBwaGlzLnNpemUoKSArIHNpemUoKTsgfQot
ICAgIE5vZGVJbmRleCBub2RlSW5kZXgoc2l6ZV90IGkpIGNvbnN0CisgICAgTm9kZSogbm9kZShz
aXplX3QgaSkgY29uc3QKICAgICB7CiAgICAgICAgIGlmIChpIDwgcGhpcy5zaXplKCkpCiAgICAg
ICAgICAgICByZXR1cm4gcGhpc1tpXTsKQEAgLTgwLDE5ICs4MCwxOSBAQCBzdHJ1Y3QgQmFzaWNC
bG9jayA6IFZlY3RvcjxOb2RlSW5kZXgsIDg+CiAgICAgfQogICAgIGJvb2wgaXNQaGlJbmRleChz
aXplX3QgaSkgY29uc3QgeyByZXR1cm4gaSA8IHBoaXMuc2l6ZSgpOyB9CiAgICAgCi0gICAgYm9v
bCBpc0luUGhpcyhOb2RlSW5kZXggbm9kZUluZGV4KSBjb25zdAorICAgIGJvb2wgaXNJblBoaXMo
Tm9kZSogbm9kZSkgY29uc3QKICAgICB7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
cGhpcy5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgaWYgKHBoaXNbaV0gPT0gbm9kZUluZGV4
KQorICAgICAgICAgICAgaWYgKHBoaXNbaV0gPT0gbm9kZSkKICAgICAgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIAot
ICAgIGJvb2wgaXNJbkJsb2NrKE5vZGVJbmRleCBpbmRleCkgY29uc3QKKyAgICBib29sIGlzSW5C
bG9jayhOb2RlKiBteU5vZGUpIGNvbnN0CiAgICAgewogICAgICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IG51bU5vZGVzKCk7ICsraSkgewotICAgICAgICAgICAgaWYgKG5vZGVJbmRleChpKSA9
PSBpbmRleCkKKyAgICAgICAgICAgIGlmIChub2RlKGkpID09IG15Tm9kZSkKICAgICAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0x
MTMsMTEgKzExMywxMSBAQCBzdHJ1Y3QgQmFzaWNCbG9jayA6IFZlY3RvcjxOb2RlSW5kZXgsIDg+
CiAjZW5kaWYKICAgICBib29sIGlzUmVhY2hhYmxlOwogICAgIAotICAgIFZlY3RvcjxOb2RlSW5k
ZXg+IHBoaXM7CisgICAgVmVjdG9yPE5vZGUqPiBwaGlzOwogICAgIFByZWRlY2Vzc29yTGlzdCBt
X3ByZWRlY2Vzc29yczsKICAgICAKLSAgICBPcGVyYW5kczxOb2RlSW5kZXgsIE5vZGVJbmRleFRy
YWl0cz4gdmFyaWFibGVzQXRIZWFkOwotICAgIE9wZXJhbmRzPE5vZGVJbmRleCwgTm9kZUluZGV4
VHJhaXRzPiB2YXJpYWJsZXNBdFRhaWw7CisgICAgT3BlcmFuZHM8Tm9kZSosIE5vZGVQb2ludGVy
VHJhaXRzPiB2YXJpYWJsZXNBdEhlYWQ7CisgICAgT3BlcmFuZHM8Tm9kZSosIE5vZGVQb2ludGVy
VHJhaXRzPiB2YXJpYWJsZXNBdFRhaWw7CiAgICAgCiAgICAgT3BlcmFuZHM8QWJzdHJhY3RWYWx1
ZT4gdmFsdWVzQXRIZWFkOwogICAgIE9wZXJhbmRzPEFic3RyYWN0VmFsdWU+IHZhbHVlc0F0VGFp
bDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJz
ZXIuY3BwCShyZXZpc2lvbiAxNDAxMDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0J5dGVDb2RlUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzI1MCw5ICszMjUwLDYgQEAg
dm9pZCBCeXRlQ29kZVBhcnNlcjo6cHJvY2Vzc1BoaVN0YWNrKCkKICAgICAgICAgaWYgKCFlbnRy
eS5tX2Jsb2NrLT5pc1JlYWNoYWJsZSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAK
LSAgICAgICAgaWYgKCFlbnRyeS5tX2Jsb2NrLT5pc1JlYWNoYWJsZSkKLSAgICAgICAgICAgIGNv
bnRpbnVlOwotICAgICAgICAKICAgICAgICAgUHJlZGVjZXNzb3JMaXN0JiBwcmVkZWNlc3NvcnMg
PSBlbnRyeS5tX2Jsb2NrLT5tX3ByZWRlY2Vzc29yczsKICAgICAgICAgdW5zaWduZWQgdmFyTm8g
PSBlbnRyeS5tX3Zhck5vOwogICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIGRhdGFGb3JQaGkg
PSBtX2dyYXBoW2VudHJ5Lm1fcGhpXS52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbi5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbi5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
NDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGR0NvbW1vbi5oIgorCisjaWYgRU5BQkxFKERG
R19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKwordm9pZCBOb2RlUG9p
bnRlclRyYWl0czo6ZHVtcChOb2RlKiB2YWx1ZSwgUHJpbnRTdHJlYW0mIG91dCkKK3sKKyAgICBv
dXQucHJpbnQodmFsdWUpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRp
ZiAvLyBFTkFCTEUoREZHX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdDb21tb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nv
bW1vbi5oCShyZXZpc2lvbiAxNDAxMDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0NvbW1vbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMSwgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTEsIDIwMTIsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC04MSwxNiArODEsMTQgQEAKIAog
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCi0vLyBUeXBlIGZvciBhIHJlZmVyZW5j
ZSB0byBhbm90aGVyIG5vZGUgaW4gdGhlIGdyYXBoLgotdHlwZWRlZiB1aW50MzJfdCBOb2RlSW5k
ZXg7Ci1zdGF0aWMgY29uc3QgTm9kZUluZGV4IE5vTm9kZSA9IFVJTlRfTUFYOworY2xhc3MgTm9k
ZTsKIAogdHlwZWRlZiB1aW50MzJfdCBCbG9ja0luZGV4Owogc3RhdGljIGNvbnN0IEJsb2NrSW5k
ZXggTm9CbG9jayA9IFVJTlRfTUFYOwogCi1zdHJ1Y3QgTm9kZUluZGV4VHJhaXRzIHsKLSAgICBz
dGF0aWMgTm9kZUluZGV4IGRlZmF1bHRWYWx1ZSgpIHsgcmV0dXJuIE5vTm9kZTsgfQotICAgIHN0
YXRpYyB2b2lkIGR1bXAoTm9kZUluZGV4IHZhbHVlLCBQcmludFN0cmVhbSYgb3V0KQorc3RydWN0
IE5vZGVQb2ludGVyVHJhaXRzIHsKKyAgICBzdGF0aWMgTm9kZSogZGVmYXVsdFZhbHVlKCkgeyBy
ZXR1cm4gMDsgfQorICAgIHN0YXRpYyB2b2lkIGR1bXAoTm9kZSogdmFsdWUsIFByaW50U3RyZWFt
JiBvdXQpOwogICAgIHsKICAgICAgICAgaWYgKHZhbHVlID09IE5vTm9kZSkKICAgICAgICAgICAg
IG91dC5wcmludGYoIi0iKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRWRn
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRWRnZS5oCShy
ZXZpc2lvbiAxNDAxMDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0VkZ2UuaAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLCAy
MDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtNDMsNDEgKzQzLDM5IEBAIHB1YmxpYzoKICAgICB7CiAgICAgfQogICAg
IAotICAgIGV4cGxpY2l0IEVkZ2UoTm9kZUluZGV4IG5vZGVJbmRleCkKLSAgICAgICAgOiBtX2Vu
Y29kZWRXb3JkKG1ha2VXb3JkKG5vZGVJbmRleCwgVW50eXBlZFVzZSkpCisgICAgZXhwbGljaXQg
RWRnZShOb2RlKiBub2RlKQorICAgICAgICA6IG1fZW5jb2RlZFdvcmQobWFrZVdvcmQobm9kZSwg
VW50eXBlZFVzZSkpCiAgICAgewogICAgIH0KICAgICAKLSAgICBFZGdlKE5vZGVJbmRleCBub2Rl
SW5kZXgsIFVzZUtpbmQgdXNlS2luZCkKLSAgICAgICAgOiBtX2VuY29kZWRXb3JkKG1ha2VXb3Jk
KG5vZGVJbmRleCwgdXNlS2luZCkpCisgICAgRWRnZShOb2RlKiBub2RlLCBVc2VLaW5kIHVzZUtp
bmQpCisgICAgICAgIDogbV9lbmNvZGVkV29yZChtYWtlV29yZChub2RlLCB1c2VLaW5kKSkKICAg
ICB7CiAgICAgfQogICAgIAotICAgIE5vZGVJbmRleCBpbmRleFVuY2hlY2tlZCgpIGNvbnN0IHsg
cmV0dXJuIG1fZW5jb2RlZFdvcmQgPj4gc2hpZnQoKTsgfQotICAgIE5vZGVJbmRleCBpbmRleCgp
IGNvbnN0Ci0gICAgewotICAgICAgICBBU1NFUlQoaXNTZXQoKSk7Ci0gICAgICAgIHJldHVybiBt
X2VuY29kZWRXb3JkID4+IHNoaWZ0KCk7Ci0gICAgfQotICAgIHZvaWQgc2V0SW5kZXgoTm9kZUlu
ZGV4IG5vZGVJbmRleCkKKyAgICBOb2RlKiBub2RlKCkgY29uc3QgeyByZXR1cm4gbV9lbmNvZGVk
V29yZCAmIH4oKDEgPDwgc2hpZnQoKSkgLSAxKTsgfQorICAgIE5vZGUmIG9wZXJhdG9yKigpIGNv
bnN0IHsgcmV0dXJuICpnZXQoKTsgfQorICAgIE5vZGUqIG9wZXJhdG9yLT4oKSBjb25zdCB7IHJl
dHVybiBnZXQoKTsgfQorICAgIAorICAgIHZvaWQgc2V0Tm9kZShOb2RlKiBub2RlKQogICAgIHsK
LSAgICAgICAgbV9lbmNvZGVkV29yZCA9IG1ha2VXb3JkKG5vZGVJbmRleCwgdXNlS2luZCgpKTsK
KyAgICAgICAgbV9lbmNvZGVkV29yZCA9IG1ha2VXb3JkKG5vZGUsIHVzZUtpbmQoKSk7CiAgICAg
fQogICAgIAogICAgIFVzZUtpbmQgdXNlS2luZCgpIGNvbnN0CiAgICAgewotICAgICAgICBBU1NF
UlQoaXNTZXQoKSk7CisgICAgICAgIEFTU0VSVChub2RlKCkpOwogICAgICAgICB1bnNpZ25lZCBt
YXNrZWQgPSBtX2VuY29kZWRXb3JkICYgKCgoMSA8PCBzaGlmdCgpKSAtIDEpKTsKICAgICAgICAg
QVNTRVJUKG1hc2tlZCA8IExhc3RVc2VLaW5kKTsKICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0
PFVzZUtpbmQ+KG1hc2tlZCk7CiAgICAgfQogICAgIHZvaWQgc2V0VXNlS2luZChVc2VLaW5kIHVz
ZUtpbmQpCiAgICAgewotICAgICAgICBBU1NFUlQoaXNTZXQoKSk7Ci0gICAgICAgIG1fZW5jb2Rl
ZFdvcmQgPSBtYWtlV29yZChpbmRleCgpLCB1c2VLaW5kKTsKKyAgICAgICAgQVNTRVJUKG5vZGUo
KSk7CisgICAgICAgIG1fZW5jb2RlZFdvcmQgPSBtYWtlV29yZChub2RlKCksIHVzZUtpbmQpOwog
ICAgIH0KICAgICAKLSAgICBib29sIGlzU2V0KCkgY29uc3QgeyByZXR1cm4gaW5kZXhVbmNoZWNr
ZWQoKSAhPSBOb05vZGU7IH0KKyAgICBib29sIGlzU2V0KCkgY29uc3QgeyByZXR1cm4gISFub2Rl
KCk7IH0KICAgICAKICAgICB0eXBlZGVmIHZvaWQqIEVkZ2U6OipVbnNwZWNpZmllZEJvb2xUeXBl
OwogICAgIG9wZXJhdG9yIFVuc3BlY2lmaWVkQm9vbFR5cGUqKCkgY29uc3QgeyByZXR1cm4gcmVp
bnRlcnByZXRfY2FzdDxVbnNwZWNpZmllZEJvb2xUeXBlKj4oaXNTZXQoKSk7IH0KQEAgLTk2LDE3
ICs5NCwxOCBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBBZGphY2VuY3lM
aXN0OwogICAgIAotICAgIHN0YXRpYyB1aW50MzJfdCBzaGlmdCgpIHsgcmV0dXJuIDQ7IH0KKyAg
ICBzdGF0aWMgdWludDMyX3Qgc2hpZnQoKSB7IHJldHVybiAyOyB9CiAgICAgCi0gICAgc3RhdGlj
IGludDMyX3QgbWFrZVdvcmQoTm9kZUluZGV4IG5vZGVJbmRleCwgVXNlS2luZCB1c2VLaW5kKQor
ICAgIHN0YXRpYyB1aW50cHRyX3QgbWFrZVdvcmQoTm9kZSogbm9kZSwgVXNlS2luZCB1c2VLaW5k
KQogICAgIHsKLSAgICAgICAgQVNTRVJUKHN0YXRpY19jYXN0PHVpbnQzMl90PigoKHN0YXRpY19j
YXN0PGludDMyX3Q+KG5vZGVJbmRleCkgPDwgc2hpZnQoKSkgPj4gc2hpZnQoKSkpID09IG5vZGVJ
bmRleCk7CisgICAgICAgIHVpbnRwdHJfdCB2YWx1ZSA9IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+
KG5vZGUpOworICAgICAgICBBU1NFUlQoISh2YWx1ZSAmICgoMSA8PCBzaGlmdCgpKSAtIDEpKSk7
CiAgICAgICAgIEFTU0VSVCh1c2VLaW5kID49IDAgJiYgdXNlS2luZCA8IExhc3RVc2VLaW5kKTsK
ICAgICAgICAgQVNTRVJUKExhc3RVc2VLaW5kIDw9ICgxIDw8IHNoaWZ0KCkpKTsKLSAgICAgICAg
cmV0dXJuIChub2RlSW5kZXggPDwgc2hpZnQoKSkgfCB1c2VLaW5kOworICAgICAgICByZXR1cm4g
dmFsdWUgfCBzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KHVzZUtpbmQpOwogICAgIH0KICAgICAKLSAg
ICBpbnQzMl90IG1fZW5jb2RlZFdvcmQ7CisgICAgdWludHB0cl90IG1fZW5jb2RlZFdvcmQ7CiB9
OwogCiBpbmxpbmUgYm9vbCBvcGVyYXRvcj09KEVkZ2Ugbm9kZVVzZSwgTm9kZUluZGV4IG5vZGVJ
bmRleCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNw
cAkocmV2aXNpb24gMTQwMTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1
cFBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDEyLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTUsMjMgKzU1LDE5IEBAIHByaXZhdGU6CiAgICAg
ICAgIGlmICghYmxvY2spCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIEFTU0VSVChibG9j
ay0+aXNSZWFjaGFibGUpOwotICAgICAgICBtX2Jsb2NrID0gYmxvY2s7Ci0gICAgICAgIGZvciAo
bV9pbmRleEluQmxvY2sgPSAwOyBtX2luZGV4SW5CbG9jayA8IGJsb2NrLT5zaXplKCk7ICsrbV9p
bmRleEluQmxvY2spIHsKLSAgICAgICAgICAgIG1fY29tcGlsZUluZGV4ID0gYmxvY2stPmF0KG1f
aW5kZXhJbkJsb2NrKTsKLSAgICAgICAgICAgIGZpeHVwTm9kZShtX2dyYXBoW21fY29tcGlsZUlu
ZGV4XSk7Ci0gICAgICAgIH0KLSAgICAgICAgbV9pbnNlcnRpb25TZXQuZXhlY3V0ZSgqYmxvY2sp
OworICAgICAgICBmb3IgKE5vZGVJdGVyYXRvciBpdGVyYXRvcihtX2NvbnRleHQsIGJsb2NrKTsg
ISFpdGVyYXRvcjsgKytpdGVyYXRvcikKKyAgICAgICAgICAgIGZpeHVwTm9kZShpdGVyYXRvci5u
b2RlKCkpOwogICAgIH0KICAgICAKLSAgICB2b2lkIGZpeHVwTm9kZShOb2RlJiBub2RlKQorICAg
IHZvaWQgZml4dXBOb2RlKE5vZGUqIG5vZGUpCiAgICAgewotICAgICAgICBpZiAoIW5vZGUuc2hv
dWxkR2VuZXJhdGUoKSkKKyAgICAgICAgaWYgKCFub2RlLT5zaG91bGRHZW5lcmF0ZSgpKQogICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICAKLSAgICAgICAgTm9kZVR5cGUgb3AgPSBub2RlLm9w
KCk7CisgICAgICAgIE5vZGVUeXBlIG9wID0gbm9kZS0+b3AoKTsKIAogI2lmIERGR19FTkFCTEUo
REVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKLSAgICAgICAgZGF0YUxvZ0YoIiAgICVzIEAldTog
IiwgR3JhcGg6Om9wTmFtZShvcCksIG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAgZGF0YUxvZ0Yo
IiAgICVzIEAldTogIiwgR3JhcGg6Om9wTmFtZShvcCksIG5vZGUtPmluZGV4KCkpOwogI2VuZGlm
CiAgICAgICAgIAogICAgICAgICBzd2l0Y2ggKG9wKSB7CkBAIC03OSw4MiArNzUsNzQgQEAgcHJp
dmF0ZToKICAgICAgICAgICAgIGlmIChtX2dyYXBoLm1fZml4cG9pbnRTdGF0ZSA+IEJlZm9yZUZp
eHBvaW50KQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCi0gICAgICAgICAg
ICBOb2RlKiBub2RlUHRyID0gJm5vZGU7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmICgh
aXNJbnQzMlNwZWN1bGF0aW9uKG1fZ3JhcGhbbV9jb21waWxlSW5kZXhdLnByZWRpY3Rpb24oKSkp
CisgICAgICAgICAgICBpZiAoIWlzSW50MzJTcGVjdWxhdGlvbihub2RlLT5wcmVkaWN0aW9uKCkp
KQogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgaWYgKGNvZGVCbG9jaygpLT5p
ZGVudGlmaWVyKG5vZGVQdHItPmlkZW50aWZpZXJOdW1iZXIoKSkgIT0gZ2xvYmFsRGF0YSgpLnBy
b3BlcnR5TmFtZXMtPmxlbmd0aCkKKyAgICAgICAgICAgIGlmIChjb2RlQmxvY2soKS0+aWRlbnRp
Zmllcihub2RlLT5pZGVudGlmaWVyTnVtYmVyKCkpICE9IGdsb2JhbERhdGEoKS5wcm9wZXJ0eU5h
bWVzLT5sZW5ndGgpCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBBcnJheVBy
b2ZpbGUqIGFycmF5UHJvZmlsZSA9IAotICAgICAgICAgICAgICAgIG1fZ3JhcGguYmFzZWxpbmVD
b2RlQmxvY2tGb3Iobm9kZVB0ci0+Y29kZU9yaWdpbiktPmdldEFycmF5UHJvZmlsZSgKLSAgICAg
ICAgICAgICAgICAgICAgbm9kZVB0ci0+Y29kZU9yaWdpbi5ieXRlY29kZUluZGV4KTsKKyAgICAg
ICAgICAgICAgICBtX2dyYXBoLmJhc2VsaW5lQ29kZUJsb2NrRm9yKG5vZGUtPmNvZGVPcmlnaW4p
LT5nZXRBcnJheVByb2ZpbGUoCisgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNvZGVPcmlnaW4u
Ynl0ZWNvZGVJbmRleCk7CiAgICAgICAgICAgICBBcnJheU1vZGUgYXJyYXlNb2RlID0gQXJyYXlN
b2RlKEFycmF5OjpTZWxlY3RVc2luZ1ByZWRpY3Rpb25zKTsKICAgICAgICAgICAgIGlmIChhcnJh
eVByb2ZpbGUpIHsKLSAgICAgICAgICAgICAgICBhcnJheVByb2ZpbGUtPmNvbXB1dGVVcGRhdGVk
UHJlZGljdGlvbihtX2dyYXBoLmJhc2VsaW5lQ29kZUJsb2NrRm9yKG5vZGUuY29kZU9yaWdpbikp
OworICAgICAgICAgICAgICAgIGFycmF5UHJvZmlsZS0+Y29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9u
KG1fZ3JhcGguYmFzZWxpbmVDb2RlQmxvY2tGb3Iobm9kZS0+Y29kZU9yaWdpbikpOwogICAgICAg
ICAgICAgICAgIGFycmF5TW9kZSA9IEFycmF5TW9kZTo6ZnJvbU9ic2VydmVkKGFycmF5UHJvZmls
ZSwgQXJyYXk6OlJlYWQsIGZhbHNlKTsKICAgICAgICAgICAgICAgICBhcnJheU1vZGUgPSBhcnJh
eU1vZGUucmVmaW5lKAotICAgICAgICAgICAgICAgICAgICBtX2dyYXBoW25vZGUuY2hpbGQxKCld
LnByZWRpY3Rpb24oKSwKLSAgICAgICAgICAgICAgICAgICAgbV9ncmFwaFttX2NvbXBpbGVJbmRl
eF0ucHJlZGljdGlvbigpKTsKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCktPnBy
ZWRpY3Rpb24oKSwgbm9kZS0+cHJlZGljdGlvbigpKTsKICAgICAgICAgICAgICAgICBpZiAoYXJy
YXlNb2RlLnN1cHBvcnRzTGVuZ3RoKCkgJiYgYXJyYXlQcm9maWxlLT5oYXNEZWZpbml0ZVN0cnVj
dHVyZSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgucmVmKG5vZGVQdHItPmNoaWxk
MSgpKTsKLSAgICAgICAgICAgICAgICAgICAgTm9kZSBjaGVja1N0cnVjdHVyZShDaGVja1N0cnVj
dHVyZSwgbm9kZVB0ci0+Y29kZU9yaWdpbiwgT3BJbmZvKG1fZ3JhcGguYWRkU3RydWN0dXJlU2V0
KGFycmF5UHJvZmlsZS0+ZXhwZWN0ZWRTdHJ1Y3R1cmUoKSkpLCBub2RlUHRyLT5jaGlsZDEoKS5p
bmRleCgpKTsKLSAgICAgICAgICAgICAgICAgICAgY2hlY2tTdHJ1Y3R1cmUucmVmKCk7Ci0gICAg
ICAgICAgICAgICAgICAgIE5vZGVJbmRleCBjaGVja1N0cnVjdHVyZUluZGV4ID0gbV9ncmFwaC5z
aXplKCk7Ci0gICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguYXBwZW5kKGNoZWNrU3RydWN0dXJl
KTsKLSAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuYXBwZW5kKG1faW5kZXhJbkJs
b2NrLCBjaGVja1N0cnVjdHVyZUluZGV4KTsKLSAgICAgICAgICAgICAgICAgICAgbm9kZVB0ciA9
ICZtX2dyYXBoW21fY29tcGlsZUluZGV4XTsKKyAgICAgICAgICAgICAgICAgICAgbV9jb250ZXh0
Lml0ZXJhdG9yKCktPmluc2VydCgKKyAgICAgICAgICAgICAgICAgICAgICAgIENoZWNrU3RydWN0
dXJlLCBub2RlLT5jb2RlT3JpZ2luLAorICAgICAgICAgICAgICAgICAgICAgICAgT3BJbmZvKG1f
Z3JhcGguYWRkU3RydWN0dXJlU2V0KGFycmF5UHJvZmlsZS0+ZXhwZWN0ZWRTdHJ1Y3R1cmUoKSkp
LAorICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkubm9kZSgpKTsKICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIGFycmF5
TW9kZSA9IGFycmF5TW9kZS5yZWZpbmUoCi0gICAgICAgICAgICAgICAgICAgIG1fZ3JhcGhbbm9k
ZS5jaGlsZDEoKV0ucHJlZGljdGlvbigpLAorICAgICAgICAgICAgICAgICAgICBtX2dyYXBoW25v
ZGUtPmNoaWxkMSgpXS5wcmVkaWN0aW9uKCksCiAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGhb
bV9jb21waWxlSW5kZXhdLnByZWRpY3Rpb24oKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICBpZiAoIWFycmF5TW9kZS5zdXBwb3J0c0xlbmd0aCgpKQogICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgbm9kZVB0ci0+c2V0T3AoR2V0QXJyYXlMZW5ndGgpOwotICAgICAgICAg
ICAgQVNTRVJUKG5vZGVQdHItPmZsYWdzKCkgJiBOb2RlTXVzdEdlbmVyYXRlKTsKLSAgICAgICAg
ICAgIG5vZGVQdHItPmNsZWFyRmxhZ3MoTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVDbG9iYmVyc1dv
cmxkKTsKLSAgICAgICAgICAgIG1fZ3JhcGguZGVyZWYobV9jb21waWxlSW5kZXgpOwotICAgICAg
ICAgICAgbm9kZVB0ci0+c2V0QXJyYXlNb2RlKGFycmF5TW9kZSk7CisgICAgICAgICAgICBub2Rl
LT5zZXRPcChHZXRBcnJheUxlbmd0aCk7CisgICAgICAgICAgICBBU1NFUlQobm9kZS0+ZmxhZ3Mo
KSAmIE5vZGVNdXN0R2VuZXJhdGUpOworICAgICAgICAgICAgbm9kZS0+Y2xlYXJGbGFncyhOb2Rl
TXVzdEdlbmVyYXRlIHwgTm9kZUNsb2JiZXJzV29ybGQpOworICAgICAgICAgICAgbV9ncmFwaC5k
ZXJlZihub2RlKTsKKyAgICAgICAgICAgIG5vZGUtPnNldEFycmF5TW9kZShhcnJheU1vZGUpOwog
ICAgICAgICAgICAgCi0gICAgICAgICAgICBOb2RlSW5kZXggc3RvcmFnZSA9IGNoZWNrQXJyYXko
YXJyYXlNb2RlLCBub2RlUHRyLT5jb2RlT3JpZ2luLCBub2RlUHRyLT5jaGlsZDEoKS5pbmRleCgp
LCBOb05vZGUsIGxlbmd0aE5lZWRzU3RvcmFnZSwgbm9kZVB0ci0+c2hvdWxkR2VuZXJhdGUoKSk7
Ci0gICAgICAgICAgICBpZiAoc3RvcmFnZSA9PSBOb05vZGUpCisgICAgICAgICAgICBOb2RlKiBz
dG9yYWdlID0gY2hlY2tBcnJheShhcnJheU1vZGUsIG5vZGUtPmNvZGVPcmlnaW4sIG5vZGUtPmNo
aWxkMSgpLm5vZGUoKSwgMCwgbGVuZ3RoTmVlZHNTdG9yYWdlLCBub2RlLT5zaG91bGRHZW5lcmF0
ZSgpKTsKKyAgICAgICAgICAgIGlmICghc3RvcmFnZSkKICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgIAotICAgICAgICAgICAgbm9kZVB0ciA9ICZtX2dyYXBoW21fY29tcGlsZUlu
ZGV4XTsKLSAgICAgICAgICAgIG5vZGVQdHItPmNoaWxkcmVuLmNoaWxkMigpID0gRWRnZShzdG9y
YWdlKTsKKyAgICAgICAgICAgIG5vZGUtPmNoaWxkcmVuLmNoaWxkMigpID0gRWRnZShzdG9yYWdl
KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgR2V0SW5kZXhl
ZFByb3BlcnR5U3RvcmFnZTogewotICAgICAgICAgICAgQVNTRVJUKG5vZGUuYXJyYXlNb2RlKCku
Y2FuQ1NFU3RvcmFnZSgpKTsKKyAgICAgICAgICAgIEFTU0VSVChub2RlLT5hcnJheU1vZGUoKS5j
YW5DU0VTdG9yYWdlKCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAg
Y2FzZSBHZXRCeVZhbDogewotICAgICAgICAgICAgbm9kZS5zZXRBcnJheU1vZGUoCi0gICAgICAg
ICAgICAgICAgbm9kZS5hcnJheU1vZGUoKS5yZWZpbmUoCi0gICAgICAgICAgICAgICAgICAgIG1f
Z3JhcGhbbm9kZS5jaGlsZDEoKV0ucHJlZGljdGlvbigpLAotICAgICAgICAgICAgICAgICAgICBt
X2dyYXBoW25vZGUuY2hpbGQyKCldLnByZWRpY3Rpb24oKSwKLSAgICAgICAgICAgICAgICAgICAg
U3BlY05vbmUsIG5vZGUuZmxhZ3MoKSkpOworICAgICAgICAgICAgbm9kZS0+c2V0QXJyYXlNb2Rl
KAorICAgICAgICAgICAgICAgIG5vZGUtPmFycmF5TW9kZSgpLnJlZmluZSgKKyAgICAgICAgICAg
ICAgICAgICAgbm9kZS0+Y2hpbGQxKCktPnByZWRpY3Rpb24oKSwKKyAgICAgICAgICAgICAgICAg
ICAgbm9kZS0+Y2hpbGQyKCktPnByZWRpY3Rpb24oKSwKKyAgICAgICAgICAgICAgICAgICAgU3Bl
Y05vbmUsIG5vZGUtPmZsYWdzKCkpKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgYmxlc3NB
cnJheU9wZXJhdGlvbihub2RlLmNoaWxkMSgpLCBub2RlLmNoaWxkMigpLCAyKTsKKyAgICAgICAg
ICAgIGJsZXNzQXJyYXlPcGVyYXRpb24obm9kZS0+Y2hpbGQxKCksIG5vZGUtPmNoaWxkMigpLCAy
KTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgTm9kZSogbm9kZVB0ciA9ICZtX2dyYXBoW21f
Y29tcGlsZUluZGV4XTsKLSAgICAgICAgICAgIEFycmF5TW9kZSBhcnJheU1vZGUgPSBub2RlUHRy
LT5hcnJheU1vZGUoKTsKKyAgICAgICAgICAgIEFycmF5TW9kZSBhcnJheU1vZGUgPSBub2RlLT5h
cnJheU1vZGUoKTsKICAgICAgICAgICAgIGlmIChhcnJheU1vZGUudHlwZSgpID09IEFycmF5OjpE
b3VibGUKICAgICAgICAgICAgICAgICAmJiBhcnJheU1vZGUuYXJyYXlDbGFzcygpID09IEFycmF5
OjpPcmlnaW5hbEFycmF5CiAgICAgICAgICAgICAgICAgJiYgYXJyYXlNb2RlLnNwZWN1bGF0aW9u
KCkgPT0gQXJyYXk6OkluQm91bmRzCiAgICAgICAgICAgICAgICAgJiYgYXJyYXlNb2RlLmNvbnZl
cnNpb24oKSA9PSBBcnJheTo6QXNJcwotICAgICAgICAgICAgICAgICYmIG1fZ3JhcGguZ2xvYmFs
T2JqZWN0Rm9yKG5vZGVQdHItPmNvZGVPcmlnaW4pLT5hcnJheVByb3RvdHlwZUNoYWluSXNTYW5l
KCkKLSAgICAgICAgICAgICAgICAmJiAhKG5vZGVQdHItPmZsYWdzKCkgJiBOb2RlVXNlZEFzT3Ro
ZXIpKQotICAgICAgICAgICAgICAgIG5vZGVQdHItPnNldEFycmF5TW9kZShhcnJheU1vZGUud2l0
aFNwZWN1bGF0aW9uKEFycmF5OjpTYW5lQ2hhaW4pKTsKKyAgICAgICAgICAgICAgICAmJiBtX2dy
YXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5jb2RlT3JpZ2luKS0+YXJyYXlQcm90b3R5cGVDaGFp
bklzU2FuZSgpCisgICAgICAgICAgICAgICAgJiYgIShub2RlLT5mbGFncygpICYgTm9kZVVzZWRB
c090aGVyKSkKKyAgICAgICAgICAgICAgICBub2RlLT5zZXRBcnJheU1vZGUoYXJyYXlNb2RlLndp
dGhTcGVjdWxhdGlvbihBcnJheTo6U2FuZUNoYWluKSk7CiAgICAgICAgICAgICAKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgU3RyaW5nQ2hhckF0OgogICAgICAg
ICBjYXNlIFN0cmluZ0NoYXJDb2RlQXQ6IHsKICAgICAgICAgICAgIC8vIEN1cnJlbnRseSB3ZSBo
YXZlIG5vIGdvb2Qgd2F5IG9mIHJlZmluaW5nIHRoZXNlLgotICAgICAgICAgICAgQVNTRVJUKG5v
ZGUuYXJyYXlNb2RlKCkgPT0gQXJyYXlNb2RlKEFycmF5OjpTdHJpbmcpKTsKLSAgICAgICAgICAg
IGJsZXNzQXJyYXlPcGVyYXRpb24obm9kZS5jaGlsZDEoKSwgbm9kZS5jaGlsZDIoKSwgMik7Cisg
ICAgICAgICAgICBBU1NFUlQobm9kZS0+YXJyYXlNb2RlKCkgPT0gQXJyYXlNb2RlKEFycmF5OjpT
dHJpbmcpKTsKKyAgICAgICAgICAgIGJsZXNzQXJyYXlPcGVyYXRpb24obm9kZS0+Y2hpbGQxKCks
IG5vZGUtPmNoaWxkMigpLCAyKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAg
ICAgICAgICAKQEAgLTE2OCwxNSArMTU2LDE0IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAvLyBp
Z25vcmVkLiBUaGF0J3MgYmVjYXVzZSBBcnJheVB1c2ggY2FuJ3QgaGFuZGxlIGFueSBhcnJheSBt
b2RlcyB0aGF0IGFyZW4ndAogICAgICAgICAgICAgLy8gYXJyYXktcmVsYXRlZCAtIHNvIGlmIHJl
ZmluZSgpIHR1cm5lZCB0aGlzIGludG8gYSAiR2VuZXJpYyIgQXJyYXlQdXNoIHRoZW4KICAgICAg
ICAgICAgIC8vIHRoYXQgd291bGQgYnJlYWsgdGhpbmdzLgotICAgICAgICAgICAgbm9kZS5zZXRB
cnJheU1vZGUoCi0gICAgICAgICAgICAgICAgbm9kZS5hcnJheU1vZGUoKS5yZWZpbmUoCi0gICAg
ICAgICAgICAgICAgICAgIG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ucHJlZGljdGlvbigpICYgU3Bl
Y0NlbGwsCisgICAgICAgICAgICBub2RlLT5zZXRBcnJheU1vZGUoCisgICAgICAgICAgICAgICAg
bm9kZS0+YXJyYXlNb2RlKCkucmVmaW5lKAorICAgICAgICAgICAgICAgICAgICBub2RlLT5jaGls
ZDEoKS0+cHJlZGljdGlvbigpICYgU3BlY0NlbGwsCiAgICAgICAgICAgICAgICAgICAgIFNwZWNJ
bnQzMiwKLSAgICAgICAgICAgICAgICAgICAgbV9ncmFwaFtub2RlLmNoaWxkMigpXS5wcmVkaWN0
aW9uKCkpKTsKLSAgICAgICAgICAgIGJsZXNzQXJyYXlPcGVyYXRpb24obm9kZS5jaGlsZDEoKSwg
RWRnZSgpLCAyKTsKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQyKCktPnByZWRpY3Rp
b24oKSkpOworICAgICAgICAgICAgYmxlc3NBcnJheU9wZXJhdGlvbihub2RlLT5jaGlsZDEoKSwg
RWRnZSgpLCAyKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgTm9kZSogbm9kZVB0ciA9ICZt
X2dyYXBoW21fY29tcGlsZUluZGV4XTsKLSAgICAgICAgICAgIHN3aXRjaCAobm9kZVB0ci0+YXJy
YXlNb2RlKCkudHlwZSgpKSB7CisgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPmFycmF5TW9kZSgp
LnR5cGUoKSkgewogICAgICAgICAgICAgY2FzZSBBcnJheTo6RG91YmxlOgogICAgICAgICAgICAg
ICAgIGZpeERvdWJsZUVkZ2UoMSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0xODcsMTUg
KzE3NCwxNSBAQCBwcml2YXRlOgogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2Fz
ZSBBcnJheVBvcDogewotICAgICAgICAgICAgYmxlc3NBcnJheU9wZXJhdGlvbihub2RlLmNoaWxk
MSgpLCBFZGdlKCksIDEpOworICAgICAgICAgICAgYmxlc3NBcnJheU9wZXJhdGlvbihub2RlLT5j
aGlsZDEoKSwgRWRnZSgpLCAxKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAg
ICAgICAgICAKICAgICAgICAgY2FzZSBWYWx1ZVRvSW50MzI6IHsKLSAgICAgICAgICAgIGlmICht
X2dyYXBoW25vZGUuY2hpbGQxKCldLnNob3VsZFNwZWN1bGF0ZU51bWJlcigpCi0gICAgICAgICAg
ICAgICAgJiYgbm9kZS5tdXN0R2VuZXJhdGUoKSkgewotICAgICAgICAgICAgICAgIG5vZGUuY2xl
YXJGbGFncyhOb2RlTXVzdEdlbmVyYXRlKTsKLSAgICAgICAgICAgICAgICBtX2dyYXBoLmRlcmVm
KG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxk
U3BlY3VsYXRlTnVtYmVyKCkKKyAgICAgICAgICAgICAgICAmJiBub2RlLT5tdXN0R2VuZXJhdGUo
KSkgeworICAgICAgICAgICAgICAgIG5vZGUtPmNsZWFyRmxhZ3MoTm9kZU11c3RHZW5lcmF0ZSk7
CisgICAgICAgICAgICAgICAgbV9ncmFwaC5kZXJlZihub2RlKTsKICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkBAIC0yMDYsOCArMTkzLDggQEAgcHJpdmF0ZToK
ICAgICAgICAgY2FzZSBCaXRSU2hpZnQ6CiAgICAgICAgIGNhc2UgQml0TFNoaWZ0OgogICAgICAg
ICBjYXNlIEJpdFVSU2hpZnQ6IHsKLSAgICAgICAgICAgIGZpeEludEVkZ2Uobm9kZS5jaGlsZHJl
bi5jaGlsZDEoKSk7Ci0gICAgICAgICAgICBmaXhJbnRFZGdlKG5vZGUuY2hpbGRyZW4uY2hpbGQy
KCkpOworICAgICAgICAgICAgZml4SW50RWRnZShub2RlLT5jaGlsZHJlbi5jaGlsZDEoKSk7Cisg
ICAgICAgICAgICBmaXhJbnRFZGdlKG5vZGUtPmNoaWxkcmVuLmNoaWxkMigpKTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKQEAgLTIxNyw5ICsyMDQsOSBAQCBw
cml2YXRlOgogICAgICAgICBjYXNlIENvbXBhcmVHcmVhdGVyOgogICAgICAgICBjYXNlIENvbXBh
cmVHcmVhdGVyRXE6CiAgICAgICAgIGNhc2UgQ29tcGFyZVN0cmljdEVxOiB7Ci0gICAgICAgICAg
ICBpZiAoTm9kZTo6c2hvdWxkU3BlY3VsYXRlSW50ZWdlcihtX2dyYXBoW25vZGUuY2hpbGQxKCld
LCBtX2dyYXBoW25vZGUuY2hpbGQyKCldKSkKKyAgICAgICAgICAgIGlmIChOb2RlOjpzaG91bGRT
cGVjdWxhdGVJbnRlZ2VyKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgbm9kZS0+Y2hpbGQyKCkubm9k
ZSgpKSkKICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGlmICghTm9kZTo6c2hv
dWxkU3BlY3VsYXRlTnVtYmVyKG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0sIG1fZ3JhcGhbbm9kZS5j
aGlsZDIoKV0pKQorICAgICAgICAgICAgaWYgKCFOb2RlOjpzaG91bGRTcGVjdWxhdGVOdW1iZXIo
bm9kZS0+Y2hpbGQxKCkubm9kZSgpLCBub2RlLT5jaGlsZDIoKS5ub2RlKCkpKQogICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgZml4RG91YmxlRWRnZSgwKTsKICAgICAgICAgICAg
IGZpeERvdWJsZUVkZ2UoMSk7CkBAIC0yMjcsNDMgKzIxNCw0MSBAQCBwcml2YXRlOgogICAgICAg
ICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBMb2dpY2FsTm90OiB7Ci0gICAgICAgICAg
ICBpZiAobV9ncmFwaFtub2RlLmNoaWxkMSgpXS5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpCisg
ICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKSkK
ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGlmICghbV9ncmFwaFtub2RlLmNo
aWxkMSgpXS5zaG91bGRTcGVjdWxhdGVOdW1iZXIoKSkKKyAgICAgICAgICAgIGlmICghbm9kZS0+
Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZU51bWJlcigpKQogICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgZml4RG91YmxlRWRnZSgwKTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBCcmFuY2g6IHsKLSAgICAgICAgICAg
IGlmICghbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkKLSAg
ICAgICAgICAgICAgICAmJiBtX2dyYXBoW25vZGUuY2hpbGQxKCldLnNob3VsZFNwZWN1bGF0ZU51
bWJlcigpKQorICAgICAgICAgICAgaWYgKCFub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRl
SW50ZWdlcigpCisgICAgICAgICAgICAgICAgJiYgbm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1
bGF0ZU51bWJlcigpKQogICAgICAgICAgICAgICAgIGZpeERvdWJsZUVkZ2UoMCk7CiAKLSAgICAg
ICAgICAgIE5vZGUmIG15Tm9kZSA9IG1fZ3JhcGhbbV9jb21waWxlSW5kZXhdOyAvLyByZWxvYWQg
YmVjYXVzZSB0aGUgZ3JhcGggbWF5IGhhdmUgY2hhbmdlZAotICAgICAgICAgICAgRWRnZSBsb2dp
Y2FsTm90RWRnZSA9IG15Tm9kZS5jaGlsZDEoKTsKLSAgICAgICAgICAgIE5vZGUmIGxvZ2ljYWxO
b3QgPSBtX2dyYXBoW2xvZ2ljYWxOb3RFZGdlXTsKLSAgICAgICAgICAgIGlmIChsb2dpY2FsTm90
Lm9wKCkgPT0gTG9naWNhbE5vdAotICAgICAgICAgICAgICAgICYmIGxvZ2ljYWxOb3QuYWRqdXN0
ZWRSZWZDb3VudCgpID09IDEpIHsKLSAgICAgICAgICAgICAgICBFZGdlIG5ld0NoaWxkRWRnZSA9
IGxvZ2ljYWxOb3QuY2hpbGQxKCk7Ci0gICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGhbbmV3Q2hp
bGRFZGdlXS5oYXNCb29sZWFuUmVzdWx0KCkpIHsKKyAgICAgICAgICAgIE5vZGUqIGxvZ2ljYWxO
b3QgPSBub2RlLT5jaGlsZDEoKS5ub2RlKCk7CisgICAgICAgICAgICBpZiAobG9naWNhbE5vdC0+
b3AoKSA9PSBMb2dpY2FsTm90CisgICAgICAgICAgICAgICAgJiYgbG9naWNhbE5vdC0+YWRqdXN0
ZWRSZWZDb3VudCgpID09IDEpIHsKKyAgICAgICAgICAgICAgICBFZGdlIG5ld0NoaWxkRWRnZSA9
IGxvZ2ljYWxOb3QtPmNoaWxkMSgpOworICAgICAgICAgICAgICAgIGlmIChuZXdDaGlsZEVkZ2Ut
Pmhhc0Jvb2xlYW5SZXN1bHQoKSkgewogICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLnJlZihu
ZXdDaGlsZEVkZ2UpOwotICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLmRlcmVmKGxvZ2ljYWxO
b3RFZGdlKTsKKyAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5kZXJlZihsb2dpY2FsTm90KTsK
ICAgICAgICAgICAgICAgICAgICAgbXlOb2RlLmNoaWxkcmVuLnNldENoaWxkMShuZXdDaGlsZEVk
Z2UpOwogICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgQmxvY2tJbmRl
eCB0b0JlVGFrZW4gPSBteU5vZGUubm90VGFrZW5CbG9ja0luZGV4KCk7Ci0gICAgICAgICAgICAg
ICAgICAgIEJsb2NrSW5kZXggdG9CZU5vdFRha2VuID0gbXlOb2RlLnRha2VuQmxvY2tJbmRleCgp
OwotICAgICAgICAgICAgICAgICAgICBteU5vZGUuc2V0VGFrZW5CbG9ja0luZGV4KHRvQmVUYWtl
bik7Ci0gICAgICAgICAgICAgICAgICAgIG15Tm9kZS5zZXROb3RUYWtlbkJsb2NrSW5kZXgodG9C
ZU5vdFRha2VuKTsKKyAgICAgICAgICAgICAgICAgICAgQmxvY2tJbmRleCB0b0JlVGFrZW4gPSBu
b2RlLT5ub3RUYWtlbkJsb2NrSW5kZXgoKTsKKyAgICAgICAgICAgICAgICAgICAgQmxvY2tJbmRl
eCB0b0JlTm90VGFrZW4gPSBub2RlLT50YWtlbkJsb2NrSW5kZXgoKTsKKyAgICAgICAgICAgICAg
ICAgICAgbm9kZS0+c2V0VGFrZW5CbG9ja0luZGV4KHRvQmVUYWtlbik7CisgICAgICAgICAgICAg
ICAgICAgIG5vZGUtPnNldE5vdFRha2VuQmxvY2tJbmRleCh0b0JlTm90VGFrZW4pOwogICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9
CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBTZXRMb2NhbDogewotICAgICAgICAgICAgaWYg
KG5vZGUudmFyaWFibGVBY2Nlc3NEYXRhKCktPmlzQ2FwdHVyZWQoKSkKKyAgICAgICAgICAgIGlm
IChub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+aXNDYXB0dXJlZCgpKQogICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgaWYgKCFub2RlLnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5z
aG91bGRVc2VEb3VibGVGb3JtYXQoKSkKKyAgICAgICAgICAgIGlmICghbm9kZS0+dmFyaWFibGVB
Y2Nlc3NEYXRhKCktPnNob3VsZFVzZURvdWJsZUZvcm1hdCgpKQogICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgZml4RG91YmxlRWRnZSgwKTsKICAgICAgICAgICAgIGJyZWFrOwpA
QCAtMjczLDcgKzI1OCw3IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgVmFsdWVBZGQ6IHsKICAg
ICAgICAgICAgIGlmIChtX2dyYXBoLmFkZFNob3VsZFNwZWN1bGF0ZUludGVnZXIobm9kZSkpCiAg
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBpZiAoIU5vZGU6OnNob3VsZFNwZWN1
bGF0ZU51bWJlckV4cGVjdGluZ0RlZmluZWQobV9ncmFwaFtub2RlLmNoaWxkMSgpXSwgbV9ncmFw
aFtub2RlLmNoaWxkMigpXSkpCisgICAgICAgICAgICBpZiAoIU5vZGU6OnNob3VsZFNwZWN1bGF0
ZU51bWJlckV4cGVjdGluZ0RlZmluZWQobm9kZS0+Y2hpbGQxKCkubm9kZSgpLCBub2RlLT5jaGls
ZDIoKS5ub2RlKCkpKQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgZml4RG91
YmxlRWRnZSgwKTsKICAgICAgICAgICAgIGZpeERvdWJsZUVkZ2UoMSk7CkBAIC0yODIsNyArMjY3
LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIAogICAgICAgICBjYXNlIEFyaXRoU3ViOiB7CiAg
ICAgICAgICAgICBpZiAobV9ncmFwaC5hZGRTaG91bGRTcGVjdWxhdGVJbnRlZ2VyKG5vZGUpCi0g
ICAgICAgICAgICAgICAgJiYgbm9kZS5jYW5TcGVjdWxhdGVJbnRlZ2VyKCkpCisgICAgICAgICAg
ICAgICAgJiYgbm9kZS0+Y2FuU3BlY3VsYXRlSW50ZWdlcigpKQogICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgZml4RG91YmxlRWRnZSgwKTsKICAgICAgICAgICAgIGZpeERvdWJs
ZUVkZ2UoMSk7CkBAIC0yOTksOCArMjg0LDggQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBBcml0
aE1pbjoKICAgICAgICAgY2FzZSBBcml0aE1heDoKICAgICAgICAgY2FzZSBBcml0aE1vZDogewot
ICAgICAgICAgICAgaWYgKE5vZGU6OnNob3VsZFNwZWN1bGF0ZUludGVnZXJGb3JBcml0aG1ldGlj
KG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0sIG1fZ3JhcGhbbm9kZS5jaGlsZDIoKV0pCi0gICAgICAg
ICAgICAgICAgJiYgbm9kZS5jYW5TcGVjdWxhdGVJbnRlZ2VyKCkpCisgICAgICAgICAgICBpZiAo
Tm9kZTo6c2hvdWxkU3BlY3VsYXRlSW50ZWdlckZvckFyaXRobWV0aWMobm9kZS0+Y2hpbGQxKCku
bm9kZSgpLCBub2RlLT5jaGlsZDIoKS5ub2RlKCkpCisgICAgICAgICAgICAgICAgJiYgbm9kZS0+
Y2FuU3BlY3VsYXRlSW50ZWdlcigpKQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgZml4RG91YmxlRWRnZSgwKTsKICAgICAgICAgICAgIGZpeERvdWJsZUVkZ2UoMSk7CkBAIC0z
MTYsMjUgKzMwMSwyMSBAQCBwcml2YXRlOgogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBBcml0
aERpdjogewotICAgICAgICAgICAgaWYgKE5vZGU6OnNob3VsZFNwZWN1bGF0ZUludGVnZXJGb3JB
cml0aG1ldGljKG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0sIG1fZ3JhcGhbbm9kZS5jaGlsZDIoKV0p
Ci0gICAgICAgICAgICAgICAgJiYgbm9kZS5jYW5TcGVjdWxhdGVJbnRlZ2VyKCkpIHsKKyAgICAg
ICAgICAgIGlmIChOb2RlOjpzaG91bGRTcGVjdWxhdGVJbnRlZ2VyRm9yQXJpdGhtZXRpYyhub2Rl
LT5jaGlsZDEoKS5ub2RlKCksIG5vZGUtPmNoaWxkMigpLm5vZGUoKSkKKyAgICAgICAgICAgICAg
ICAmJiBub2RlLT5jYW5TcGVjdWxhdGVJbnRlZ2VyKCkpIHsKICAgICAgICAgICAgICAgICBpZiAo
aXNYODYoKSkKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgZml4
RG91YmxlRWRnZSgwKTsKICAgICAgICAgICAgICAgICBmaXhEb3VibGVFZGdlKDEpOwogICAgICAg
ICAgICAgICAgIAotICAgICAgICAgICAgICAgIE5vZGUmIG9sZERpdmlzaW9uID0gbV9ncmFwaFtt
X2NvbXBpbGVJbmRleF07Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgTm9kZSBu
ZXdEaXZpc2lvbiA9IG9sZERpdmlzaW9uOwotICAgICAgICAgICAgICAgIG5ld0RpdmlzaW9uLnNl
dFJlZkNvdW50KDIpOwotICAgICAgICAgICAgICAgIG5ld0RpdmlzaW9uLnByZWRpY3QoU3BlY0Rv
dWJsZSk7Ci0gICAgICAgICAgICAgICAgTm9kZUluZGV4IG5ld0RpdmlzaW9uSW5kZXggPSBtX2dy
YXBoLnNpemUoKTsKKyAgICAgICAgICAgICAgICBOb2RlKiBuZXdEaXZpc2lvbiA9IG5ldyAobV9n
cmFwaC5tX2FsbG9jYXRvcikgTm9kZSgqbm9kZSk7CisgICAgICAgICAgICAgICAgbmV3RGl2aXNp
b24tPnNldFJlZkNvdW50KDIpOworICAgICAgICAgICAgICAgIG5ld0RpdmlzaW9uLT5wcmVkaWN0
KFNwZWNEb3VibGUpOwogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIG9sZERpdmlz
aW9uLnNldE9wKERvdWJsZUFzSW50MzIpOwotICAgICAgICAgICAgICAgIG9sZERpdmlzaW9uLmNo
aWxkcmVuLmluaXRpYWxpemUoRWRnZShuZXdEaXZpc2lvbkluZGV4LCBEb3VibGVVc2UpLCBFZGdl
KCksIEVkZ2UoKSk7CisgICAgICAgICAgICAgICAgbm9kZS0+c2V0T3AoRG91YmxlQXNJbnQzMik7
CisgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGRyZW4uaW5pdGlhbGl6ZShFZGdlKG5ld0Rpdmlz
aW9uLCBEb3VibGVVc2UpLCBFZGdlKCksIEVkZ2UoKSk7CiAgICAgICAgICAgICAgICAgCi0gICAg
ICAgICAgICAgICAgbV9ncmFwaC5hcHBlbmQobmV3RGl2aXNpb24pOwotICAgICAgICAgICAgICAg
IG1faW5zZXJ0aW9uU2V0LmFwcGVuZChtX2luZGV4SW5CbG9jaywgbmV3RGl2aXNpb25JbmRleCk7
CisgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuYXBwZW5kKG1faW5kZXhJbkJsb2NrLCBu
ZXdEaXZpc2lvbik7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICB9CkBAIC0zNDQsOCArMzI1LDggQEAgcHJpdmF0ZToKICAgICAgICAgfQogICAg
ICAgICAgICAgCiAgICAgICAgIGNhc2UgQXJpdGhBYnM6IHsKLSAgICAgICAgICAgIGlmIChtX2dy
YXBoW25vZGUuY2hpbGQxKCldLnNob3VsZFNwZWN1bGF0ZUludGVnZXJGb3JBcml0aG1ldGljKCkK
LSAgICAgICAgICAgICAgICAmJiBub2RlLmNhblNwZWN1bGF0ZUludGVnZXIoKSkKKyAgICAgICAg
ICAgIGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlSW50ZWdlckZvckFyaXRobWV0
aWMoKQorICAgICAgICAgICAgICAgICYmIG5vZGUtPmNhblNwZWN1bGF0ZUludGVnZXIoKSkKICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGZpeERvdWJsZUVkZ2UoMCk7CiAgICAg
ICAgICAgICBicmVhazsKQEAgLTM2NCwxNSArMzQ1LDEzIEBAIHByaXZhdGU6CiAKICAgICAgICAg
ICAgIG5vZGUuc2V0QXJyYXlNb2RlKAogICAgICAgICAgICAgICAgIG5vZGUuYXJyYXlNb2RlKCku
cmVmaW5lKAotICAgICAgICAgICAgICAgICAgICBtX2dyYXBoW2NoaWxkMV0ucHJlZGljdGlvbigp
LAotICAgICAgICAgICAgICAgICAgICBtX2dyYXBoW2NoaWxkMl0ucHJlZGljdGlvbigpLAotICAg
ICAgICAgICAgICAgICAgICBtX2dyYXBoW2NoaWxkM10ucHJlZGljdGlvbigpKSk7CisgICAgICAg
ICAgICAgICAgICAgIGNoaWxkMS0+cHJlZGljdGlvbigpLAorICAgICAgICAgICAgICAgICAgICBj
aGlsZDItPnByZWRpY3Rpb24oKSwKKyAgICAgICAgICAgICAgICAgICAgY2hpbGQzLT5wcmVkaWN0
aW9uKCkpKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgYmxlc3NBcnJheU9wZXJhdGlvbihj
aGlsZDEsIGNoaWxkMiwgMyk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIE5vZGUqIG5vZGVQ
dHIgPSAmbV9ncmFwaFttX2NvbXBpbGVJbmRleF07Ci0gICAgICAgICAgICAKLSAgICAgICAgICAg
IHN3aXRjaCAobm9kZVB0ci0+YXJyYXlNb2RlKCkubW9kZUZvclB1dCgpLnR5cGUoKSkgeworICAg
ICAgICAgICAgc3dpdGNoIChub2RlLT5hcnJheU1vZGUoKS5tb2RlRm9yUHV0KCkudHlwZSgpKSB7
CiAgICAgICAgICAgICBjYXNlIEFycmF5OjpEb3VibGU6CiAgICAgICAgICAgICAgICAgZml4RG91
YmxlRWRnZSgyKTsKICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTM4Myw3ICszNjIsNyBAQCBw
cml2YXRlOgogICAgICAgICAgICAgY2FzZSBBcnJheTo6VWludDhDbGFtcGVkQXJyYXk6CiAgICAg
ICAgICAgICBjYXNlIEFycmF5OjpVaW50MTZBcnJheToKICAgICAgICAgICAgIGNhc2UgQXJyYXk6
OlVpbnQzMkFycmF5OgotICAgICAgICAgICAgICAgIGlmICghbV9ncmFwaFtjaGlsZDNdLnNob3Vs
ZFNwZWN1bGF0ZUludGVnZXIoKSkKKyAgICAgICAgICAgICAgICBpZiAoIWNoaWxkMy0+c2hvdWxk
U3BlY3VsYXRlSW50ZWdlcigpKQogICAgICAgICAgICAgICAgICAgICBmaXhEb3VibGVFZGdlKDIp
OwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBBcnJheTo6RmxvYXQz
MkFycmF5OgpAQCAtMzk4LDExICszNzcsMTEgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIAogICAg
ICAgICBjYXNlIE5ld0FycmF5OiB7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2dy
YXBoLnZhckFyZ051bUNoaWxkcmVuKG5vZGUpOyBpLS07KSB7Ci0gICAgICAgICAgICAgICAgbm9k
ZS5zZXRJbmRleGluZ1R5cGUoCisgICAgICAgICAgICAgICAgbm9kZS0+c2V0SW5kZXhpbmdUeXBl
KAogICAgICAgICAgICAgICAgICAgICBsZWFzdFVwcGVyQm91bmRPZkluZGV4aW5nVHlwZUFuZFR5
cGUoCi0gICAgICAgICAgICAgICAgICAgICAgICBub2RlLmluZGV4aW5nVHlwZSgpLCBtX2dyYXBo
W21fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgaSldLnByZWRpY3Rpb24oKSkpOworICAgICAgICAg
ICAgICAgICAgICAgICAgbm9kZS5pbmRleGluZ1R5cGUoKSwgbV9ncmFwaC52YXJBcmdDaGlsZChu
b2RlLCBpKS0+cHJlZGljdGlvbigpKSk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAo
bm9kZS5pbmRleGluZ1R5cGUoKSA9PSBBcnJheVdpdGhEb3VibGUpIHsKKyAgICAgICAgICAgIGlm
IChub2RlLT5pbmRleGluZ1R5cGUoKSA9PSBBcnJheVdpdGhEb3VibGUpIHsKICAgICAgICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2dyYXBoLnZhckFyZ051bUNoaWxkcmVuKG5vZGUpOyBp
LS07KQogICAgICAgICAgICAgICAgICAgICBmaXhEb3VibGVFZGdlKGkpOwogICAgICAgICAgICAg
fQpAQCAtNTc3LDExICs1NTYsNiBAQCBwcml2YXRlOgogICAgICAgICBpbnQzMlRvRG91YmxlLnBy
ZWRpY3QoU3BlY0RvdWJsZSk7CiAgICAgICAgIGludDMyVG9Eb3VibGUucmVmKCk7CiAgICAgfQot
Ci0gICAgQmFzaWNCbG9jayogbV9ibG9jazsKLSAgICB1bnNpZ25lZCBtX2luZGV4SW5CbG9jazsK
LSAgICBOb2RlSW5kZXggbV9jb21waWxlSW5kZXg7Ci0gICAgSW5zZXJ0aW9uU2V0PE5vZGVJbmRl
eD4gbV9pbnNlcnRpb25TZXQ7CiB9OwogICAgIAogYm9vbCBwZXJmb3JtRml4dXAoR3JhcGgmIGdy
YXBoKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHJldmlzaW9u
IDE0MDEwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00Niw2ICs0Niw3IEBAIEdyYXBoOjpHcmFwaChKU0dsb2JhbERhdGEmIGds
b2JhbERhdGEsIEMKICAgICAsIG1fY29kZUJsb2NrKGNvZGVCbG9jaykKICAgICAsIG1fY29tcGls
YXRpb24oZ2xvYmFsRGF0YS5tX3BlckJ5dGVjb2RlUHJvZmlsZXIgPyBnbG9iYWxEYXRhLm1fcGVy
Qnl0ZWNvZGVQcm9maWxlci0+bmV3Q29tcGlsYXRpb24oY29kZUJsb2NrLCBQcm9maWxlcjo6REZH
KSA6IDApCiAgICAgLCBtX3Byb2ZpbGVkQmxvY2soY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpKQor
ICAgICwgbV9hbGxvY2F0b3IoZ2xvYmFsRGF0YS5tX2RmZ1N0YXRlLT5tX2FsbG9jYXRvcikKICAg
ICAsIG1faGFzQXJndW1lbnRzKGZhbHNlKQogICAgICwgbV9vc3JFbnRyeUJ5dGVjb2RlSW5kZXgo
b3NyRW50cnlCeXRlY29kZUluZGV4KQogICAgICwgbV9tdXN0SGFuZGxlVmFsdWVzKG11c3RIYW5k
bGVWYWx1ZXMpCkBAIC01NCw2ICs1NSwxMSBAQCBHcmFwaDo6R3JhcGgoSlNHbG9iYWxEYXRhJiBn
bG9iYWxEYXRhLCBDCiAgICAgQVNTRVJUKG1fcHJvZmlsZWRCbG9jayk7CiB9CiAKK0dyYXBoOjp+
R3JhcGgoKQoreworICAgIG1fYWxsb2NhdG9yLmZyZWVBbGwoKTsKK30KKwogY29uc3QgY2hhciAq
R3JhcGg6Om9wTmFtZShOb2RlVHlwZSBvcCkKIHsKICAgICByZXR1cm4gZGZnT3BOYW1lc1tvcF07
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCShyZXZpc2lvbiAxNDAxMDIp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMiwgMjAxMyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTM1LDcgKzM1LDkgQEAKICNpbmNsdWRlICJERkdBc3NlbWJseUhlbHBlcnMuaCIKICNp
bmNsdWRlICJERkdCYXNpY0Jsb2NrLmgiCiAjaW5jbHVkZSAiREZHRG9taW5hdG9ycy5oIgorI2lu
Y2x1ZGUgIkRGR0xvbmdMaXZlZFN0YXRlLmgiCiAjaW5jbHVkZSAiREZHTm9kZS5oIgorI2luY2x1
ZGUgIkRGR05vZGVBbGxvY2F0b3IuaCIKICNpbmNsdWRlICJKU1N0YWNrLmgiCiAjaW5jbHVkZSAi
TWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5oIgogI2luY2x1ZGUgPHd0Zi9CaXRWZWN0b3Iu
aD4KQEAgLTgyLDUyICs4NCw0NyBAQCBlbnVtIEFkZFNwZWN1bGF0aW9uTW9kZSB7CiAvLwogLy8g
PT09IEdyYXBoID09PQogLy8KLS8vIFRoZSBkYXRhZmxvdyBncmFwaCBpcyBhbiBvcmRlcmVkIHZl
Y3RvciBvZiBub2Rlcy4KIC8vIFRoZSBvcmRlciBtYXkgYmUgc2lnbmlmaWNhbnQgZm9yIG5vZGVz
IHdpdGggc2lkZS1lZmZlY3RzIChwcm9wZXJ0eSBhY2Nlc3NlcywgdmFsdWUgY29udmVyc2lvbnMp
LgogLy8gTm9kZXMgdGhhdCBhcmUgJ2RlYWQnIHJlbWFpbiBpbiB0aGUgdmVjdG9yIHdpdGggcmVm
Q291bnQgMC4KLWNsYXNzIEdyYXBoIDogcHVibGljIFZlY3RvcjxOb2RlLCA2ND4geworY2xhc3Mg
R3JhcGggewogcHVibGljOgogICAgIEdyYXBoKEpTR2xvYmFsRGF0YSYsIENvZGVCbG9jayosIHVu
c2lnbmVkIG9zckVudHJ5Qnl0ZWNvZGVJbmRleCwgY29uc3QgT3BlcmFuZHM8SlNWYWx1ZT4mIG11
c3RIYW5kbGVWYWx1ZXMpOwotICAgIAotICAgIHVzaW5nIFZlY3RvcjxOb2RlLCA2ND46Om9wZXJh
dG9yW107Ci0gICAgdXNpbmcgVmVjdG9yPE5vZGUsIDY0Pjo6YXQ7Ci0gICAgCi0gICAgTm9kZSYg
b3BlcmF0b3JbXShFZGdlIG5vZGVVc2UpIHsgcmV0dXJuIGF0KG5vZGVVc2UuaW5kZXgoKSk7IH0K
LSAgICBjb25zdCBOb2RlJiBvcGVyYXRvcltdKEVkZ2Ugbm9kZVVzZSkgY29uc3QgeyByZXR1cm4g
YXQobm9kZVVzZS5pbmRleCgpKTsgfQotICAgIAotICAgIE5vZGUmIGF0KEVkZ2Ugbm9kZVVzZSkg
eyByZXR1cm4gYXQobm9kZVVzZS5pbmRleCgpKTsgfQotICAgIGNvbnN0IE5vZGUmIGF0KEVkZ2Ug
bm9kZVVzZSkgY29uc3QgeyByZXR1cm4gYXQobm9kZVVzZS5pbmRleCgpKTsgfQorICAgIH5HcmFw
aCgpOwogICAgIAogICAgIC8vIE1hcmsgYSBub2RlIGFzIGJlaW5nIHJlZmVyZW5jZWQuCi0gICAg
dm9pZCByZWYoTm9kZUluZGV4IG5vZGVJbmRleCkKKyAgICBOb2RlKiByZWYoTm9kZSogbm9kZSkK
ICAgICB7Ci0gICAgICAgIE5vZGUmIG5vZGUgPSBhdChub2RlSW5kZXgpOwogICAgICAgICAvLyBJ
ZiB0aGUgdmFsdWUgKGJlZm9yZSBpbmNyZW1lbnRpbmcpIHdhcyBhdCByZWZDb3VudCB6ZXJvIHRo
ZW4gd2UgbmVlZCB0byByZWYgaXRzIGNoaWxkcmVuLgotICAgICAgICBpZiAoIW5vZGUucG9zdGZp
eFJlZigpKQotICAgICAgICAgICAgcmVmQ2hpbGRyZW4obm9kZUluZGV4KTsKKyAgICAgICAgaWYg
KCFub2RlLT5wb3N0Zml4UmVmKCkpCisgICAgICAgICAgICByZWZDaGlsZHJlbihub2RlKTsKKyAg
ICAgICAgcmV0dXJuIG5vZGU7CiAgICAgfQotICAgIHZvaWQgcmVmKEVkZ2Ugbm9kZVVzZSkKKyAg
ICBOb2RlKiByZWYoRWRnZSBub2RlVXNlKQogICAgIHsKLSAgICAgICAgcmVmKG5vZGVVc2UuaW5k
ZXgoKSk7CisgICAgICAgIHJldHVybiByZWYobm9kZVVzZS5ub2RlKCkpOwogICAgIH0KICAgICAK
LSAgICB2b2lkIGRlcmVmKE5vZGVJbmRleCBub2RlSW5kZXgpCisgICAgdm9pZCBkZXJlZihOb2Rl
KiBub2RlKQogICAgIHsKLSAgICAgICAgaWYgKGF0KG5vZGVJbmRleCkucG9zdGZpeERlcmVmKCkg
PT0gMSkKLSAgICAgICAgICAgIGRlcmVmQ2hpbGRyZW4obm9kZUluZGV4KTsKKyNpZiAhQVNTRVJU
X0RJU0FCTEVECisgICAgICAgIGlmICghbm9kZS0+cmVmQ291bnQoKSkKKyAgICAgICAgICAgIGR1
bXAoKTsKKyNlbmRpZgorICAgICAgICBpZiAobm9kZS0+cG9zdGZpeERlcmVmKCkgPT0gMSkKKyAg
ICAgICAgICAgIGRlcmVmQ2hpbGRyZW4obm9kZSk7CiAgICAgfQogICAgIHZvaWQgZGVyZWYoRWRn
ZSBub2RlVXNlKQogICAgIHsKLSAgICAgICAgZGVyZWYobm9kZVVzZS5pbmRleCgpKTsKKyAgICAg
ICAgZGVyZWYobm9kZVVzZS5ub2RlKCkpOwogICAgIH0KICAgICAKLSAgICB2b2lkIGNoYW5nZUlu
ZGV4KEVkZ2UmIGVkZ2UsIE5vZGVJbmRleCBuZXdJbmRleCwgYm9vbCBjaGFuZ2VSZWYgPSB0cnVl
KQorICAgIHZvaWQgY2hhbmdlSW5kZXgoRWRnZSYgZWRnZSwgTm9kZSogbmV3Tm9kZSwgYm9vbCBj
aGFuZ2VSZWYgPSB0cnVlKQogICAgIHsKICAgICAgICAgaWYgKGNoYW5nZVJlZikgewotICAgICAg
ICAgICAgcmVmKG5ld0luZGV4KTsKLSAgICAgICAgICAgIGRlcmVmKGVkZ2UuaW5kZXgoKSk7Cisg
ICAgICAgICAgICByZWYobmV3Tm9kZSk7CisgICAgICAgICAgICBkZXJlZihlZGdlLm5vZGUoKSk7
CiAgICAgICAgIH0KLSAgICAgICAgZWRnZS5zZXRJbmRleChuZXdJbmRleCk7CisgICAgICAgIGVk
Z2Uuc2V0Tm9kZShuZXdOb2RlKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBjaGFuZ2VFZGdlKEVk
Z2UmIGVkZ2UsIEVkZ2UgbmV3RWRnZSwgYm9vbCBjaGFuZ2VSZWYgPSB0cnVlKQpAQCAtMTM5LDEx
ICsxMzYsMTEgQEAgcHVibGljOgogICAgICAgICBlZGdlID0gbmV3RWRnZTsKICAgICB9CiAgICAg
Ci0gICAgdm9pZCBjb21wYXJlQW5kU3dhcChFZGdlJiBlZGdlLCBOb2RlSW5kZXggb2xkSW5kZXgs
IE5vZGVJbmRleCBuZXdJbmRleCwgYm9vbCBjaGFuZ2VSZWYpCisgICAgdm9pZCBjb21wYXJlQW5k
U3dhcChFZGdlJiBlZGdlLCBOb2RlKiBvbGROb2RlLCBOb2RlKiBuZXdOb2RlLCBib29sIGNoYW5n
ZVJlZikKICAgICB7Ci0gICAgICAgIGlmIChlZGdlLmluZGV4KCkgIT0gb2xkSW5kZXgpCisgICAg
ICAgIGlmIChlZGdlLm5vZGUoKSAhPSBvbGROb2RlKQogICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICBjaGFuZ2VJbmRleChlZGdlLCBuZXdJbmRleCwgY2hhbmdlUmVmKTsKKyAgICAgICAgY2hh
bmdlSW5kZXgoZWRnZSwgbmV3Tm9kZSwgY2hhbmdlUmVmKTsKICAgICB9CiAgICAgCiAgICAgdm9p
ZCBjb21wYXJlQW5kU3dhcChFZGdlJiBlZGdlLCBFZGdlIG9sZEVkZ2UsIEVkZ2UgbmV3RWRnZSwg
Ym9vbCBjaGFuZ2VSZWYpCkBAIC0xNTMsMjkgKzE1MCwxNiBAQCBwdWJsaWM6CiAgICAgICAgIGNo
YW5nZUVkZ2UoZWRnZSwgbmV3RWRnZSwgY2hhbmdlUmVmKTsKICAgICB9CiAgICAgCi0gICAgdm9p
ZCBjbGVhckFuZERlcmVmQ2hpbGQxKE5vZGUmIG5vZGUpCi0gICAgewotICAgICAgICBpZiAoIW5v
ZGUuY2hpbGQxKCkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGRlcmVmKG5vZGUuY2hp
bGQxKCkpOwotICAgICAgICBub2RlLmNoaWxkcmVuLmNoaWxkMSgpID0gRWRnZSgpOwotICAgIH0K
LQotICAgIHZvaWQgY2xlYXJBbmREZXJlZkNoaWxkMihOb2RlJiBub2RlKQorICAgIHZvaWQgY2xl
YXJBbmREZXJlZkNoaWxkKE5vZGUqIG5vZGUsIHVuc2lnbmVkIGluZGV4KQogICAgIHsKLSAgICAg
ICAgaWYgKCFub2RlLmNoaWxkMigpKQorICAgICAgICBpZiAoIW5vZGUtPmNoaWxkcmVuLmNoaWxk
KGluZGV4KSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgZGVyZWYobm9kZS5jaGlsZDIo
KSk7Ci0gICAgICAgIG5vZGUuY2hpbGRyZW4uY2hpbGQyKCkgPSBFZGdlKCk7Ci0gICAgfQotCi0g
ICAgdm9pZCBjbGVhckFuZERlcmVmQ2hpbGQzKE5vZGUmIG5vZGUpCi0gICAgewotICAgICAgICBp
ZiAoIW5vZGUuY2hpbGQzKCkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGRlcmVmKG5v
ZGUuY2hpbGQzKCkpOwotICAgICAgICBub2RlLmNoaWxkcmVuLmNoaWxkMygpID0gRWRnZSgpOwor
ICAgICAgICBkZXJlZihub2RlLT5jaGlsZHJlbi5jaGlsZChpbmRleCkpOworICAgICAgICBub2Rl
LmNoaWxkcmVuLnNldENoaWxkKGluZGV4LCBFZGdlKCkpOwogICAgIH0KKyAgICB2b2lkIGNsZWFy
QW5kRGVyZWZDaGlsZDEoTm9kZSogbm9kZSkgeyBjbGVhckFuZERlcmVmQ2hpbGQobm9kZSwgMCk7
IH0KKyAgICB2b2lkIGNsZWFyQW5kRGVyZWZDaGlsZDIoTm9kZSogbm9kZSkgeyBjbGVhckFuZERl
cmVmQ2hpbGQobm9kZSwgMSk7IH0KKyAgICB2b2lkIGNsZWFyQW5kRGVyZWZDaGlsZDMoTm9kZSog
bm9kZSkgeyBjbGVhckFuZERlcmVmQ2hpbGQobm9kZSwgMik7IH0KICAgICAKICAgICAvLyBDYWxs
IHRoaXMgaWYgeW91J3ZlIG1vZGlmaWVkIHRoZSByZWZlcmVuY2UgY291bnRzIG9mIG5vZGVzIHRo
YXQgZGVhbCB3aXRoCiAgICAgLy8gbG9jYWwgdmFyaWFibGVzLiBUaGlzIGlzIG5lY2Vzc2FyeSBi
ZWNhdXNlIGxvY2FsIHZhcmlhYmxlIHJlZmVyZW5jZXMgY2FuIGZvcm0KQEAgLTE4MywxNCArMTY3
LDE0IEBAIHB1YmxpYzoKICAgICAvLyByZWZlcmVuY2UgY291bnRzIGFjY29yZGluZyB0byByZWFj
aGFiaWxpdHkuCiAgICAgdm9pZCBjb2xsZWN0R2FyYmFnZSgpOwogICAgIAotICAgIHZvaWQgY29u
dmVydFRvQ29uc3RhbnQoTm9kZUluZGV4IG5vZGVJbmRleCwgdW5zaWduZWQgY29uc3RhbnROdW1i
ZXIpCisgICAgdm9pZCBjb252ZXJ0VG9Db25zdGFudChOb2RlKiBub2RlLCB1bnNpZ25lZCBjb25z
dGFudE51bWJlcikKICAgICB7Ci0gICAgICAgIGF0KG5vZGVJbmRleCkuY29udmVydFRvQ29uc3Rh
bnQoY29uc3RhbnROdW1iZXIpOworICAgICAgICBub2RlLT5jb252ZXJ0VG9Db25zdGFudChjb25z
dGFudE51bWJlcik7CiAgICAgfQogICAgIAotICAgIHZvaWQgY29udmVydFRvQ29uc3RhbnQoTm9k
ZUluZGV4IG5vZGVJbmRleCwgSlNWYWx1ZSB2YWx1ZSkKKyAgICB2b2lkIGNvbnZlcnRUb0NvbnN0
YW50KE5vZGUqIG5vZGUsIEpTVmFsdWUgdmFsdWUpCiAgICAgewotICAgICAgICBjb252ZXJ0VG9D
b25zdGFudChub2RlSW5kZXgsIG1fY29kZUJsb2NrLT5hZGRPckZpbmRDb25zdGFudCh2YWx1ZSkp
OworICAgICAgICBjb252ZXJ0VG9Db25zdGFudChub2RlLCBtX2NvZGVCbG9jay0+YWRkT3JGaW5k
Q29uc3RhbnQodmFsdWUpKTsKICAgICB9CiAKICAgICAvLyBDb2RlQmxvY2sgaXMgb3B0aW9uYWws
IGJ1dCBtYXkgYWxsb3cgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiB0byBiZSBkdW1wZWQgKGUuZy4g
SWRlbnRpZmllciBuYW1lcykuCkBAIC0xOTgsMTI1ICsxODIsMTI1IEBAIHB1YmxpYzoKICAgICBl
bnVtIFBoaU5vZGVEdW1wTW9kZSB7IER1bXBMaXZlUGhpc09ubHksIER1bXBBbGxQaGlzIH07CiAg
ICAgdm9pZCBkdW1wQmxvY2tIZWFkZXIoUHJpbnRTdHJlYW0mLCBjb25zdCBjaGFyKiBwcmVmaXgs
IEJsb2NrSW5kZXgsIFBoaU5vZGVEdW1wTW9kZSk7CiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFt
JiwgRWRnZSk7Ci0gICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiwgY29uc3QgY2hhciogcHJlZml4
LCBOb2RlSW5kZXgpOwotICAgIHN0YXRpYyBpbnQgYW1vdW50T2ZOb2RlV2hpdGVTcGFjZShOb2Rl
Jik7Ci0gICAgc3RhdGljIHZvaWQgcHJpbnROb2RlV2hpdGVTcGFjZShQcmludFN0cmVhbSYsIE5v
ZGUmKTsKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mLCBjb25zdCBjaGFyKiBwcmVmaXgsIE5v
ZGUqKTsKKyAgICBzdGF0aWMgaW50IGFtb3VudE9mTm9kZVdoaXRlU3BhY2UoTm9kZSopOworICAg
IHN0YXRpYyB2b2lkIHByaW50Tm9kZVdoaXRlU3BhY2UoUHJpbnRTdHJlYW0mLCBOb2RlKik7CiAK
ICAgICAvLyBEdW1wIHRoZSBjb2RlIG9yaWdpbiBvZiB0aGUgZ2l2ZW4gbm9kZSBhcyBhIGRpZmYg
ZnJvbSB0aGUgY29kZSBvcmlnaW4gb2YgdGhlCiAgICAgLy8gcHJlY2VkaW5nIG5vZGUuIFJldHVy
bnMgdHJ1ZSBpZiBhbnl0aGluZyB3YXMgcHJpbnRlZC4KLSAgICBib29sIGR1bXBDb2RlT3JpZ2lu
KFByaW50U3RyZWFtJiwgY29uc3QgY2hhciogcHJlZml4LCBOb2RlSW5kZXgsIE5vZGVJbmRleCk7
CisgICAgYm9vbCBkdW1wQ29kZU9yaWdpbihQcmludFN0cmVhbSYsIGNvbnN0IGNoYXIqIHByZWZp
eCwgTm9kZSogcHJldmlvdXNOb2RlLCBOb2RlKiBzdWJzZXF1ZW50Tm9kZSk7CiAKICAgICBCbG9j
a0luZGV4IGJsb2NrSW5kZXhGb3JCeXRlY29kZU9mZnNldChWZWN0b3I8QmxvY2tJbmRleD4mIGJs
b2NrcywgdW5zaWduZWQgYnl0ZWNvZGVCZWdpbik7CiAKLSAgICBTcGVjdWxhdGVkVHlwZSBnZXRK
U0NvbnN0YW50U3BlY3VsYXRpb24oTm9kZSYgbm9kZSkKKyAgICBTcGVjdWxhdGVkVHlwZSBnZXRK
U0NvbnN0YW50U3BlY3VsYXRpb24oTm9kZSogbm9kZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBz
cGVjdWxhdGlvbkZyb21WYWx1ZShub2RlLnZhbHVlT2ZKU0NvbnN0YW50KG1fY29kZUJsb2NrKSk7
CisgICAgICAgIHJldHVybiBzcGVjdWxhdGlvbkZyb21WYWx1ZShub2RlLT52YWx1ZU9mSlNDb25z
dGFudChtX2NvZGVCbG9jaykpOwogICAgIH0KICAgICAKLSAgICBBZGRTcGVjdWxhdGlvbk1vZGUg
YWRkU3BlY3VsYXRpb25Nb2RlKE5vZGUmIGFkZCwgYm9vbCBsZWZ0U2hvdWxkU3BlY3VsYXRlSW50
ZWdlciwgYm9vbCByaWdodFNob3VsZFNwZWN1bGF0ZUludGVnZXIpCisgICAgQWRkU3BlY3VsYXRp
b25Nb2RlIGFkZFNwZWN1bGF0aW9uTW9kZShOb2RlKiBhZGQsIGJvb2wgbGVmdFNob3VsZFNwZWN1
bGF0ZUludGVnZXIsIGJvb2wgcmlnaHRTaG91bGRTcGVjdWxhdGVJbnRlZ2VyKQogICAgIHsKLSAg
ICAgICAgQVNTRVJUKGFkZC5vcCgpID09IFZhbHVlQWRkIHx8IGFkZC5vcCgpID09IEFyaXRoQWRk
IHx8IGFkZC5vcCgpID09IEFyaXRoU3ViKTsKKyAgICAgICAgQVNTRVJUKGFkZC0+b3AoKSA9PSBW
YWx1ZUFkZCB8fCBhZGQtPm9wKCkgPT0gQXJpdGhBZGQgfHwgYWRkLT5vcCgpID09IEFyaXRoU3Vi
KTsKICAgICAgICAgCi0gICAgICAgIE5vZGUmIGxlZnQgPSBhdChhZGQuY2hpbGQxKCkpOwotICAg
ICAgICBOb2RlJiByaWdodCA9IGF0KGFkZC5jaGlsZDIoKSk7CisgICAgICAgIE5vZGUqIGxlZnQg
PSBhZGQtPmNoaWxkMSgpLm5vZGUoKTsKKyAgICAgICAgTm9kZSogcmlnaHQgPSBhZGQtPmNoaWxk
MigpLm5vZGUoKTsKICAgICAgICAgCi0gICAgICAgIGlmIChsZWZ0Lmhhc0NvbnN0YW50KCkpCisg
ICAgICAgIGlmIChsZWZ0LT5oYXNDb25zdGFudCgpKQogICAgICAgICAgICAgcmV0dXJuIGFkZElt
bWVkaWF0ZVNob3VsZFNwZWN1bGF0ZUludGVnZXIoYWRkLCByaWdodFNob3VsZFNwZWN1bGF0ZUlu
dGVnZXIsIGxlZnQpOwotICAgICAgICBpZiAocmlnaHQuaGFzQ29uc3RhbnQoKSkKKyAgICAgICAg
aWYgKHJpZ2h0LT5oYXNDb25zdGFudCgpKQogICAgICAgICAgICAgcmV0dXJuIGFkZEltbWVkaWF0
ZVNob3VsZFNwZWN1bGF0ZUludGVnZXIoYWRkLCBsZWZ0U2hvdWxkU3BlY3VsYXRlSW50ZWdlciwg
cmlnaHQpOwogICAgICAgICAKLSAgICAgICAgcmV0dXJuIChsZWZ0U2hvdWxkU3BlY3VsYXRlSW50
ZWdlciAmJiByaWdodFNob3VsZFNwZWN1bGF0ZUludGVnZXIgJiYgYWRkLmNhblNwZWN1bGF0ZUlu
dGVnZXIoKSkgPyBTcGVjdWxhdGVJbnRlZ2VyIDogRG9udFNwZWN1bGF0ZUludGVnZXI7CisgICAg
ICAgIHJldHVybiAobGVmdFNob3VsZFNwZWN1bGF0ZUludGVnZXIgJiYgcmlnaHRTaG91bGRTcGVj
dWxhdGVJbnRlZ2VyICYmIGFkZC0+Y2FuU3BlY3VsYXRlSW50ZWdlcigpKSA/IFNwZWN1bGF0ZUlu
dGVnZXIgOiBEb250U3BlY3VsYXRlSW50ZWdlcjsKICAgICB9CiAgICAgCi0gICAgQWRkU3BlY3Vs
YXRpb25Nb2RlIHZhbHVlQWRkU3BlY3VsYXRpb25Nb2RlKE5vZGUmIGFkZCkKKyAgICBBZGRTcGVj
dWxhdGlvbk1vZGUgdmFsdWVBZGRTcGVjdWxhdGlvbk1vZGUoTm9kZSogYWRkKQogICAgIHsKLSAg
ICAgICAgcmV0dXJuIGFkZFNwZWN1bGF0aW9uTW9kZShhZGQsIGF0KGFkZC5jaGlsZDEoKSkuc2hv
dWxkU3BlY3VsYXRlSW50ZWdlckV4cGVjdGluZ0RlZmluZWQoKSwgYXQoYWRkLmNoaWxkMigpKS5z
aG91bGRTcGVjdWxhdGVJbnRlZ2VyRXhwZWN0aW5nRGVmaW5lZCgpKTsKKyAgICAgICAgcmV0dXJu
IGFkZFNwZWN1bGF0aW9uTW9kZShhZGQsIGFkZC0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZUlu
dGVnZXJFeHBlY3RpbmdEZWZpbmVkKCksIGFkZC0+Y2hpbGQyKCktPnNob3VsZFNwZWN1bGF0ZUlu
dGVnZXJFeHBlY3RpbmdEZWZpbmVkKCkpOwogICAgIH0KICAgICAKLSAgICBBZGRTcGVjdWxhdGlv
bk1vZGUgYXJpdGhBZGRTcGVjdWxhdGlvbk1vZGUoTm9kZSYgYWRkKQorICAgIEFkZFNwZWN1bGF0
aW9uTW9kZSBhcml0aEFkZFNwZWN1bGF0aW9uTW9kZShOb2RlKiBhZGQpCiAgICAgewotICAgICAg
ICByZXR1cm4gYWRkU3BlY3VsYXRpb25Nb2RlKGFkZCwgYXQoYWRkLmNoaWxkMSgpKS5zaG91bGRT
cGVjdWxhdGVJbnRlZ2VyRm9yQXJpdGhtZXRpYygpLCBhdChhZGQuY2hpbGQyKCkpLnNob3VsZFNw
ZWN1bGF0ZUludGVnZXJGb3JBcml0aG1ldGljKCkpOworICAgICAgICByZXR1cm4gYWRkU3BlY3Vs
YXRpb25Nb2RlKGFkZCwgYWRkLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlSW50ZWdlckZvckFy
aXRobWV0aWMoKSwgYWRkLT5jaGlsZDIoKS0+c2hvdWxkU3BlY3VsYXRlSW50ZWdlckZvckFyaXRo
bWV0aWMoKSk7CiAgICAgfQogICAgIAotICAgIEFkZFNwZWN1bGF0aW9uTW9kZSBhZGRTcGVjdWxh
dGlvbk1vZGUoTm9kZSYgYWRkKQorICAgIEFkZFNwZWN1bGF0aW9uTW9kZSBhZGRTcGVjdWxhdGlv
bk1vZGUoTm9kZSogYWRkKQogICAgIHsKLSAgICAgICAgaWYgKGFkZC5vcCgpID09IFZhbHVlQWRk
KQorICAgICAgICBpZiAoYWRkLT5vcCgpID09IFZhbHVlQWRkKQogICAgICAgICAgICAgcmV0dXJu
IHZhbHVlQWRkU3BlY3VsYXRpb25Nb2RlKGFkZCk7CiAgICAgICAgIAogICAgICAgICByZXR1cm4g
YXJpdGhBZGRTcGVjdWxhdGlvbk1vZGUoYWRkKTsKICAgICB9CiAgICAgCi0gICAgYm9vbCBhZGRT
aG91bGRTcGVjdWxhdGVJbnRlZ2VyKE5vZGUmIGFkZCkKKyAgICBib29sIGFkZFNob3VsZFNwZWN1
bGF0ZUludGVnZXIoTm9kZSogYWRkKQogICAgIHsKICAgICAgICAgcmV0dXJuIGFkZFNwZWN1bGF0
aW9uTW9kZShhZGQpICE9IERvbnRTcGVjdWxhdGVJbnRlZ2VyOwogICAgIH0KICAgICAKLSAgICBi
b29sIG11bFNob3VsZFNwZWN1bGF0ZUludGVnZXIoTm9kZSYgbXVsKQorICAgIGJvb2wgbXVsU2hv
dWxkU3BlY3VsYXRlSW50ZWdlcihOb2RlKiBtdWwpCiAgICAgewotICAgICAgICBBU1NFUlQobXVs
Lm9wKCkgPT0gQXJpdGhNdWwpOworICAgICAgICBBU1NFUlQobXVsLT5vcCgpID09IEFyaXRoTXVs
KTsKICAgICAgICAgCi0gICAgICAgIE5vZGUmIGxlZnQgPSBhdChtdWwuY2hpbGQxKCkpOwotICAg
ICAgICBOb2RlJiByaWdodCA9IGF0KG11bC5jaGlsZDIoKSk7CisgICAgICAgIE5vZGUqIGxlZnQg
PSBtdWwtPmNoaWxkMSgpLm5vZGUoKTsKKyAgICAgICAgTm9kZSogcmlnaHQgPSBtdWwtPmNoaWxk
MigpLm5vZGUoKTsKICAgICAgICAgCiAgICAgICAgIHJldHVybiBOb2RlOjpzaG91bGRTcGVjdWxh
dGVJbnRlZ2VyRm9yQXJpdGhtZXRpYyhsZWZ0LCByaWdodCkgJiYgbXVsLmNhblNwZWN1bGF0ZUlu
dGVnZXIoKTsKICAgICB9CiAgICAgCi0gICAgYm9vbCBuZWdhdGVTaG91bGRTcGVjdWxhdGVJbnRl
Z2VyKE5vZGUmIG5lZ2F0ZSkKKyAgICBib29sIG5lZ2F0ZVNob3VsZFNwZWN1bGF0ZUludGVnZXIo
Tm9kZSogbmVnYXRlKQogICAgIHsKLSAgICAgICAgQVNTRVJUKG5lZ2F0ZS5vcCgpID09IEFyaXRo
TmVnYXRlKTsKLSAgICAgICAgcmV0dXJuIGF0KG5lZ2F0ZS5jaGlsZDEoKSkuc2hvdWxkU3BlY3Vs
YXRlSW50ZWdlckZvckFyaXRobWV0aWMoKSAmJiBuZWdhdGUuY2FuU3BlY3VsYXRlSW50ZWdlcigp
OworICAgICAgICBBU1NFUlQobmVnYXRlLT5vcCgpID09IEFyaXRoTmVnYXRlKTsKKyAgICAgICAg
cmV0dXJuIG5lZ2F0ZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZUludGVnZXJGb3JBcml0aG1l
dGljKCkgJiYgbmVnYXRlLT5jYW5TcGVjdWxhdGVJbnRlZ2VyKCk7CiAgICAgfQogICAgIAotICAg
IGJvb2wgYWRkU2hvdWxkU3BlY3VsYXRlSW50ZWdlcihOb2RlSW5kZXggbm9kZUluZGV4KQorICAg
IGJvb2wgYWRkU2hvdWxkU3BlY3VsYXRlSW50ZWdlcihOb2RlKiBub2RlKQogICAgIHsKLSAgICAg
ICAgcmV0dXJuIGFkZFNob3VsZFNwZWN1bGF0ZUludGVnZXIoYXQobm9kZUluZGV4KSk7CisgICAg
ICAgIHJldHVybiBhZGRTaG91bGRTcGVjdWxhdGVJbnRlZ2VyKG5vZGUpOwogICAgIH0KICAgICAK
ICAgICAvLyBIZWxwZXIgbWV0aG9kcyB0byBjaGVjayBub2RlcyBmb3IgY29uc3RhbnRzLgotICAg
IGJvb2wgaXNDb25zdGFudChOb2RlSW5kZXggbm9kZUluZGV4KQorICAgIGJvb2wgaXNDb25zdGFu
dChOb2RlKiBub2RlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGF0KG5vZGVJbmRleCkuaGFzQ29u
c3RhbnQoKTsKKyAgICAgICAgcmV0dXJuIG5vZGUtPmhhc0NvbnN0YW50KCk7CiAgICAgfQotICAg
IGJvb2wgaXNKU0NvbnN0YW50KE5vZGVJbmRleCBub2RlSW5kZXgpCisgICAgYm9vbCBpc0pTQ29u
c3RhbnQoTm9kZSogbm9kZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBhdChub2RlSW5kZXgpLmhh
c0NvbnN0YW50KCk7CisgICAgICAgIHJldHVybiBub2RlLT5oYXNDb25zdGFudCgpOwogICAgIH0K
LSAgICBib29sIGlzSW50MzJDb25zdGFudChOb2RlSW5kZXggbm9kZUluZGV4KQorICAgIGJvb2wg
aXNJbnQzMkNvbnN0YW50KE5vZGUqIG5vZGUpCiAgICAgewotICAgICAgICByZXR1cm4gYXQobm9k
ZUluZGV4KS5pc0ludDMyQ29uc3RhbnQobV9jb2RlQmxvY2spOworICAgICAgICByZXR1cm4gbm9k
ZS0+aXNJbnQzMkNvbnN0YW50KG1fY29kZUJsb2NrKTsKICAgICB9Ci0gICAgYm9vbCBpc0RvdWJs
ZUNvbnN0YW50KE5vZGVJbmRleCBub2RlSW5kZXgpCisgICAgYm9vbCBpc0RvdWJsZUNvbnN0YW50
KE5vZGUqIG5vZGUpCiAgICAgewotICAgICAgICByZXR1cm4gYXQobm9kZUluZGV4KS5pc0RvdWJs
ZUNvbnN0YW50KG1fY29kZUJsb2NrKTsKKyAgICAgICAgcmV0dXJuIG5vZGUtPmlzRG91YmxlQ29u
c3RhbnQobV9jb2RlQmxvY2spOwogICAgIH0KLSAgICBib29sIGlzTnVtYmVyQ29uc3RhbnQoTm9k
ZUluZGV4IG5vZGVJbmRleCkKKyAgICBib29sIGlzTnVtYmVyQ29uc3RhbnQoTm9kZSogbm9kZSkK
ICAgICB7Ci0gICAgICAgIHJldHVybiBhdChub2RlSW5kZXgpLmlzTnVtYmVyQ29uc3RhbnQobV9j
b2RlQmxvY2spOworICAgICAgICByZXR1cm4gbm9kZS0+aXNOdW1iZXJDb25zdGFudChtX2NvZGVC
bG9jayk7CiAgICAgfQotICAgIGJvb2wgaXNCb29sZWFuQ29uc3RhbnQoTm9kZUluZGV4IG5vZGVJ
bmRleCkKKyAgICBib29sIGlzQm9vbGVhbkNvbnN0YW50KE5vZGUqIG5vZGUpCiAgICAgewotICAg
ICAgICByZXR1cm4gYXQobm9kZUluZGV4KS5pc0Jvb2xlYW5Db25zdGFudChtX2NvZGVCbG9jayk7
CisgICAgICAgIHJldHVybiBub2RlLT5pc0Jvb2xlYW5Db25zdGFudChtX2NvZGVCbG9jayk7CiAg
ICAgfQotICAgIGJvb2wgaXNDZWxsQ29uc3RhbnQoTm9kZUluZGV4IG5vZGVJbmRleCkKKyAgICBi
b29sIGlzQ2VsbENvbnN0YW50KE5vZGUqIG5vZGUpCiAgICAgewotICAgICAgICBpZiAoIWlzSlND
b25zdGFudChub2RlSW5kZXgpKQorICAgICAgICBpZiAoIWlzSlNDb25zdGFudChub2RlKSkKICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IHZhbHVlT2ZK
U0NvbnN0YW50KG5vZGVJbmRleCk7CisgICAgICAgIEpTVmFsdWUgdmFsdWUgPSB2YWx1ZU9mSlND
b25zdGFudChub2RlKTsKICAgICAgICAgcmV0dXJuIHZhbHVlLmlzQ2VsbCgpICYmICEhdmFsdWU7
CiAgICAgfQotICAgIGJvb2wgaXNGdW5jdGlvbkNvbnN0YW50KE5vZGVJbmRleCBub2RlSW5kZXgp
CisgICAgYm9vbCBpc0Z1bmN0aW9uQ29uc3RhbnQoTm9kZSogbm9kZSkKICAgICB7Ci0gICAgICAg
IGlmICghaXNKU0NvbnN0YW50KG5vZGVJbmRleCkpCisgICAgICAgIGlmICghaXNKU0NvbnN0YW50
KG5vZGUpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAoIWdldEpTRnVu
Y3Rpb24odmFsdWVPZkpTQ29uc3RhbnQobm9kZUluZGV4KSkpCisgICAgICAgIGlmICghZ2V0SlNG
dW5jdGlvbih2YWx1ZU9mSlNDb25zdGFudChub2RlKSkpCiAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KLSAgICBib29sIGlzSW50ZXJuYWxGdW5j
dGlvbkNvbnN0YW50KE5vZGVJbmRleCBub2RlSW5kZXgpCisgICAgYm9vbCBpc0ludGVybmFsRnVu
Y3Rpb25Db25zdGFudChOb2RlKiBub2RlKQogICAgIHsKLSAgICAgICAgaWYgKCFpc0pTQ29uc3Rh
bnQobm9kZUluZGV4KSkKKyAgICAgICAgaWYgKCFpc0pTQ29uc3RhbnQobm9kZSkpCiAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIEpTVmFsdWUgdmFsdWUgPSB2YWx1ZU9mSlNDb25z
dGFudChub2RlSW5kZXgpOworICAgICAgICBKU1ZhbHVlIHZhbHVlID0gdmFsdWVPZkpTQ29uc3Rh
bnQobm9kZSk7CiAgICAgICAgIGlmICghdmFsdWUuaXNDZWxsKCkgfHwgIXZhbHVlKQogICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBKU0NlbGwqIGNlbGwgPSB2YWx1ZS5hc0NlbGwo
KTsKQEAgLTMyNSwyNSArMzA5LDI1IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgfQogICAgIC8vIEhlbHBlciBtZXRob2RzIGdldCBjb25zdGFudCB2YWx1ZXMgZnJvbSBub2Rl
cy4KLSAgICBKU1ZhbHVlIHZhbHVlT2ZKU0NvbnN0YW50KE5vZGVJbmRleCBub2RlSW5kZXgpCisg
ICAgSlNWYWx1ZSB2YWx1ZU9mSlNDb25zdGFudChOb2RlKiBub2RlKQogICAgIHsKLSAgICAgICAg
cmV0dXJuIGF0KG5vZGVJbmRleCkudmFsdWVPZkpTQ29uc3RhbnQobV9jb2RlQmxvY2spOworICAg
ICAgICByZXR1cm4gbm9kZS0+dmFsdWVPZkpTQ29uc3RhbnQobV9jb2RlQmxvY2spOwogICAgIH0K
LSAgICBpbnQzMl90IHZhbHVlT2ZJbnQzMkNvbnN0YW50KE5vZGVJbmRleCBub2RlSW5kZXgpCisg
ICAgaW50MzJfdCB2YWx1ZU9mSW50MzJDb25zdGFudChOb2RlKiBub2RlKQogICAgIHsKLSAgICAg
ICAgcmV0dXJuIHZhbHVlT2ZKU0NvbnN0YW50KG5vZGVJbmRleCkuYXNJbnQzMigpOworICAgICAg
ICByZXR1cm4gdmFsdWVPZkpTQ29uc3RhbnQobm9kZSkuYXNJbnQzMigpOwogICAgIH0KLSAgICBk
b3VibGUgdmFsdWVPZk51bWJlckNvbnN0YW50KE5vZGVJbmRleCBub2RlSW5kZXgpCisgICAgZG91
YmxlIHZhbHVlT2ZOdW1iZXJDb25zdGFudChOb2RlKiBub2RlKQogICAgIHsKLSAgICAgICAgcmV0
dXJuIHZhbHVlT2ZKU0NvbnN0YW50KG5vZGVJbmRleCkuYXNOdW1iZXIoKTsKKyAgICAgICAgcmV0
dXJuIHZhbHVlT2ZKU0NvbnN0YW50KG5vZGUpLmFzTnVtYmVyKCk7CiAgICAgfQotICAgIGJvb2wg
dmFsdWVPZkJvb2xlYW5Db25zdGFudChOb2RlSW5kZXggbm9kZUluZGV4KQorICAgIGJvb2wgdmFs
dWVPZkJvb2xlYW5Db25zdGFudChOb2RlKiBub2RlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIHZh
bHVlT2ZKU0NvbnN0YW50KG5vZGVJbmRleCkuYXNCb29sZWFuKCk7CisgICAgICAgIHJldHVybiB2
YWx1ZU9mSlNDb25zdGFudChub2RlKS5hc0Jvb2xlYW4oKTsKICAgICB9Ci0gICAgSlNGdW5jdGlv
biogdmFsdWVPZkZ1bmN0aW9uQ29uc3RhbnQoTm9kZUluZGV4IG5vZGVJbmRleCkKKyAgICBKU0Z1
bmN0aW9uKiB2YWx1ZU9mRnVuY3Rpb25Db25zdGFudChOb2RlKiBub2RlKQogICAgIHsKLSAgICAg
ICAgSlNDZWxsKiBmdW5jdGlvbiA9IGdldEpTRnVuY3Rpb24odmFsdWVPZkpTQ29uc3RhbnQobm9k
ZUluZGV4KSk7CisgICAgICAgIEpTQ2VsbCogZnVuY3Rpb24gPSBnZXRKU0Z1bmN0aW9uKHZhbHVl
T2ZKU0NvbnN0YW50KG5vZGUpKTsKICAgICAgICAgQVNTRVJUKGZ1bmN0aW9uKTsKICAgICAgICAg
cmV0dXJuIGpzQ2FzdDxKU0Z1bmN0aW9uKj4oZnVuY3Rpb24pOwogICAgIH0KQEAgLTQxOCw0NSAr
NDAyLDQzIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1fY29kZUJsb2NrLT51bmNoZWNrZWRB
Y3RpdmF0aW9uUmVnaXN0ZXIoKTsKICAgICB9CiAgICAgCi0gICAgVmFsdWVQcm9maWxlKiB2YWx1
ZVByb2ZpbGVGb3IoTm9kZUluZGV4IG5vZGVJbmRleCkKKyAgICBWYWx1ZVByb2ZpbGUqIHZhbHVl
UHJvZmlsZUZvcihOb2RlKiBub2RlKQogICAgIHsKLSAgICAgICAgaWYgKG5vZGVJbmRleCA9PSBO
b05vZGUpCisgICAgICAgIGlmICghbm9kZSkKICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAg
ICAKLSAgICAgICAgTm9kZSYgbm9kZSA9IGF0KG5vZGVJbmRleCk7Ci0gICAgICAgIENvZGVCbG9j
ayogcHJvZmlsZWRCbG9jayA9IGJhc2VsaW5lQ29kZUJsb2NrRm9yKG5vZGUuY29kZU9yaWdpbik7
CisgICAgICAgIENvZGVCbG9jayogcHJvZmlsZWRCbG9jayA9IGJhc2VsaW5lQ29kZUJsb2NrRm9y
KG5vZGUtPmNvZGVPcmlnaW4pOwogICAgICAgICAKLSAgICAgICAgaWYgKG5vZGUuaGFzTG9jYWwo
KSkgewotICAgICAgICAgICAgaWYgKCFvcGVyYW5kSXNBcmd1bWVudChub2RlLmxvY2FsKCkpKQor
ICAgICAgICBpZiAobm9kZS0+aGFzTG9jYWwoKSkgeworICAgICAgICAgICAgaWYgKCFvcGVyYW5k
SXNBcmd1bWVudChub2RlLT5sb2NhbCgpKSkKICAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAg
ICAgICAgICAgIGludCBhcmd1bWVudCA9IG9wZXJhbmRUb0FyZ3VtZW50KG5vZGUubG9jYWwoKSk7
Ci0gICAgICAgICAgICBpZiAobm9kZS52YXJpYWJsZUFjY2Vzc0RhdGEoKSAhPSBhdChtX2FyZ3Vt
ZW50c1thcmd1bWVudF0pLnZhcmlhYmxlQWNjZXNzRGF0YSgpKQorICAgICAgICAgICAgaW50IGFy
Z3VtZW50ID0gb3BlcmFuZFRvQXJndW1lbnQobm9kZS0+bG9jYWwoKSk7CisgICAgICAgICAgICBp
ZiAobm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCkgIT0gbV9hcmd1bWVudHNbYXJndW1lbnRdLT52
YXJpYWJsZUFjY2Vzc0RhdGEoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAg
ICAgIHJldHVybiBwcm9maWxlZEJsb2NrLT52YWx1ZVByb2ZpbGVGb3JBcmd1bWVudChhcmd1bWVu
dCk7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIGlmIChub2RlLmhhc0hlYXBQcmVkaWN0
aW9uKCkpCi0gICAgICAgICAgICByZXR1cm4gcHJvZmlsZWRCbG9jay0+dmFsdWVQcm9maWxlRm9y
Qnl0ZWNvZGVPZmZzZXQobm9kZS5jb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXhGb3JWYWx1ZVByb2Zp
bGUoKSk7CisgICAgICAgIGlmIChub2RlLT5oYXNIZWFwUHJlZGljdGlvbigpKQorICAgICAgICAg
ICAgcmV0dXJuIHByb2ZpbGVkQmxvY2stPnZhbHVlUHJvZmlsZUZvckJ5dGVjb2RlT2Zmc2V0KG5v
ZGUtPmNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleEZvclZhbHVlUHJvZmlsZSgpKTsKICAgICAgICAg
CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KICAgICAKLSAgICBNZXRob2RPZkdldHRpbmdBVmFs
dWVQcm9maWxlIG1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGVGb3IoTm9kZUluZGV4IG5vZGVJ
bmRleCkKKyAgICBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlIG1ldGhvZE9mR2V0dGluZ0FW
YWx1ZVByb2ZpbGVGb3IoTm9kZSogbm9kZSkKICAgICB7Ci0gICAgICAgIGlmIChub2RlSW5kZXgg
PT0gTm9Ob2RlKQorICAgICAgICBpZiAoIW5vZGUpCiAgICAgICAgICAgICByZXR1cm4gTWV0aG9k
T2ZHZXR0aW5nQVZhbHVlUHJvZmlsZSgpOwogICAgICAgICAKLSAgICAgICAgTm9kZSYgbm9kZSA9
IGF0KG5vZGVJbmRleCk7Ci0gICAgICAgIENvZGVCbG9jayogcHJvZmlsZWRCbG9jayA9IGJhc2Vs
aW5lQ29kZUJsb2NrRm9yKG5vZGUuY29kZU9yaWdpbik7CisgICAgICAgIENvZGVCbG9jayogcHJv
ZmlsZWRCbG9jayA9IGJhc2VsaW5lQ29kZUJsb2NrRm9yKG5vZGUtPmNvZGVPcmlnaW4pOwogICAg
ICAgICAKLSAgICAgICAgaWYgKG5vZGUub3AoKSA9PSBHZXRMb2NhbCkgeworICAgICAgICBpZiAo
bm9kZS0+b3AoKSA9PSBHZXRMb2NhbCkgewogICAgICAgICAgICAgcmV0dXJuIE1ldGhvZE9mR2V0
dGluZ0FWYWx1ZVByb2ZpbGU6OmZyb21MYXp5T3BlcmFuZCgKICAgICAgICAgICAgICAgICBwcm9m
aWxlZEJsb2NrLAogICAgICAgICAgICAgICAgIExhenlPcGVyYW5kVmFsdWVQcm9maWxlS2V5KAot
ICAgICAgICAgICAgICAgICAgICBub2RlLmNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCwgbm9kZS5s
b2NhbCgpKSk7CisgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNvZGVPcmlnaW4uYnl0ZWNvZGVJ
bmRleCwgbm9kZS0+bG9jYWwoKSkpOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICByZXR1
cm4gTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZSh2YWx1ZVByb2ZpbGVGb3Iobm9kZUluZGV4
KSk7CisgICAgICAgIHJldHVybiBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlKHZhbHVlUHJv
ZmlsZUZvcihub2RlKSk7CiAgICAgfQogICAgIAogICAgIGJvb2wgbmVlZHNBY3RpdmF0aW9uKCkg
Y29uc3QKQEAgLTQ4MCwyMSArNDYyLDIxIEBAIHB1YmxpYzoKICAgICAKICAgICB1bnNpZ25lZCBu
dW1TdWNjZXNzb3JzKEJhc2ljQmxvY2sqIGJsb2NrKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGF0
KGJsb2NrLT5sYXN0KCkpLm51bVN1Y2Nlc3NvcnMoKTsKKyAgICAgICAgcmV0dXJuIGJsb2NrLT5s
YXN0KCktPm51bVN1Y2Nlc3NvcnMoKTsKICAgICB9CiAgICAgQmxvY2tJbmRleCBzdWNjZXNzb3Io
QmFzaWNCbG9jayogYmxvY2ssIHVuc2lnbmVkIGluZGV4KQogICAgIHsKLSAgICAgICAgcmV0dXJu
IGF0KGJsb2NrLT5sYXN0KCkpLnN1Y2Nlc3NvcihpbmRleCk7CisgICAgICAgIHJldHVybiBibG9j
ay0+bGFzdCgpLT5zdWNjZXNzb3IoaW5kZXgpOwogICAgIH0KICAgICBCbG9ja0luZGV4IHN1Y2Nl
c3NvckZvckNvbmRpdGlvbihCYXNpY0Jsb2NrKiBibG9jaywgYm9vbCBjb25kaXRpb24pCiAgICAg
ewotICAgICAgICByZXR1cm4gYXQoYmxvY2stPmxhc3QoKSkuc3VjY2Vzc29yRm9yQ29uZGl0aW9u
KGNvbmRpdGlvbik7CisgICAgICAgIHJldHVybiBibG9jay0+bGFzdCgpLT5zdWNjZXNzb3JGb3JD
b25kaXRpb24oY29uZGl0aW9uKTsKICAgICB9CiAgICAgCi0gICAgYm9vbCBpc1ByZWRpY3RlZE51
bWVyaWNhbChOb2RlJiBub2RlKQorICAgIGJvb2wgaXNQcmVkaWN0ZWROdW1lcmljYWwoTm9kZSog
bm9kZSkKICAgICB7Ci0gICAgICAgIFNwZWN1bGF0ZWRUeXBlIGxlZnQgPSBhdChub2RlLmNoaWxk
MSgpKS5wcmVkaWN0aW9uKCk7Ci0gICAgICAgIFNwZWN1bGF0ZWRUeXBlIHJpZ2h0ID0gYXQobm9k
ZS5jaGlsZDIoKSkucHJlZGljdGlvbigpOworICAgICAgICBTcGVjdWxhdGVkVHlwZSBsZWZ0ID0g
bm9kZS0+Y2hpbGQxKCktPnByZWRpY3Rpb24oKTsKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUgcmln
aHQgPSBub2RlLT5jaGlsZDIoKS0+cHJlZGljdGlvbigpOwogICAgICAgICByZXR1cm4gaXNOdW1i
ZXJTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc051bWJlclNwZWN1bGF0aW9uKHJpZ2h0KTsKICAgICB9
CiAgICAgCkBAIC01MDQsMjMgKzQ4NiwyMyBAQCBwdWJsaWM6CiAgICAgLy8gLSBQdXRCeVZhbCBk
ZWZpbml0ZWx5IGNoYW5nZXMgdGhlIGFycmF5IGl0IHN0b3JlcyB0bywgYW5kIG1heSBldmVuIGNo
YW5nZSBpdHMgbGVuZ3RoLgogICAgIC8vIC0gUHV0QnlPZmZzZXQgZGVmaW5pdGVseSBjaGFuZ2Vz
IHRoZSBvYmplY3QgaXQgc3RvcmVzIHRvLgogICAgIC8vIC0gYW5kIHNvIG9uLgotICAgIGJvb2wg
YnlWYWxJc1B1cmUoTm9kZSYgbm9kZSkKKyAgICBib29sIGJ5VmFsSXNQdXJlKE5vZGUqIG5vZGUp
CiAgICAgewotICAgICAgICBzd2l0Y2ggKG5vZGUuYXJyYXlNb2RlKCkudHlwZSgpKSB7CisgICAg
ICAgIHN3aXRjaCAobm9kZS0+YXJyYXlNb2RlKCkudHlwZSgpKSB7CiAgICAgICAgIGNhc2UgQXJy
YXk6OkdlbmVyaWM6CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGNhc2UgQXJy
YXk6OkludDMyOgogICAgICAgICBjYXNlIEFycmF5OjpEb3VibGU6CiAgICAgICAgIGNhc2UgQXJy
YXk6OkNvbnRpZ3VvdXM6CiAgICAgICAgIGNhc2UgQXJyYXk6OkFycmF5U3RvcmFnZToKLSAgICAg
ICAgICAgIHJldHVybiAhbm9kZS5hcnJheU1vZGUoKS5pc091dE9mQm91bmRzKCk7CisgICAgICAg
ICAgICByZXR1cm4gIW5vZGUtPmFycmF5TW9kZSgpLmlzT3V0T2ZCb3VuZHMoKTsKICAgICAgICAg
Y2FzZSBBcnJheTo6U2xvd1B1dEFycmF5U3RvcmFnZToKLSAgICAgICAgICAgIHJldHVybiAhbm9k
ZS5hcnJheU1vZGUoKS5tYXlTdG9yZVRvSG9sZSgpOworICAgICAgICAgICAgcmV0dXJuICFub2Rl
LT5hcnJheU1vZGUoKS5tYXlTdG9yZVRvSG9sZSgpOwogICAgICAgICBjYXNlIEFycmF5OjpTdHJp
bmc6Ci0gICAgICAgICAgICByZXR1cm4gbm9kZS5vcCgpID09IEdldEJ5VmFsOworICAgICAgICAg
ICAgcmV0dXJuIG5vZGUtPm9wKCkgPT0gR2V0QnlWYWw7CiAjaWYgVVNFKEpTVkFMVUUzMl82NCkK
ICAgICAgICAgY2FzZSBBcnJheTo6QXJndW1lbnRzOgotICAgICAgICAgICAgaWYgKG5vZGUub3Ao
KSA9PSBHZXRCeVZhbCkKKyAgICAgICAgICAgIGlmIChub2RlLT5vcCgpID09IEdldEJ5VmFsKQog
ICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwog
I2VuZGlmIC8vIFVTRShKU1ZBTFVFMzJfNjQpCkBAIC01MjksMTMgKzUxMSwxMyBAQCBwdWJsaWM6
CiAgICAgICAgIH0KICAgICB9CiAgICAgCi0gICAgYm9vbCBjbG9iYmVyc1dvcmxkKE5vZGUmIG5v
ZGUpCisgICAgYm9vbCBjbG9iYmVyc1dvcmxkKE5vZGUqIG5vZGUpCiAgICAgewotICAgICAgICBp
ZiAobm9kZS5mbGFncygpICYgTm9kZUNsb2JiZXJzV29ybGQpCisgICAgICAgIGlmIChub2RlLT5m
bGFncygpICYgTm9kZUNsb2JiZXJzV29ybGQpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICAgICAgaWYgKCEobm9kZS5mbGFncygpICYgTm9kZU1pZ2h0Q2xvYmJlcikpCisgICAgICAgIGlm
ICghKG5vZGUtPmZsYWdzKCkgJiBOb2RlTWlnaHRDbG9iYmVyKSkKICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAgICAgc3dpdGNoIChub2RlLm9wKCkpIHsKKyAgICAgICAgc3dpdGNoIChu
b2RlLT5vcCgpKSB7CiAgICAgICAgIGNhc2UgVmFsdWVBZGQ6CiAgICAgICAgIGNhc2UgQ29tcGFy
ZUxlc3M6CiAgICAgICAgIGNhc2UgQ29tcGFyZUxlc3NFcToKQEAgLTU1Myw5ICs1MzUsOSBAQCBw
dWJsaWM6CiAgICAgICAgIH0KICAgICB9CiAgICAgCi0gICAgYm9vbCBjbG9iYmVyc1dvcmxkKE5v
ZGVJbmRleCBub2RlSW5kZXgpCisgICAgYm9vbCBjbG9iYmVyc1dvcmxkKE5vZGUqIG5vZGUpCiAg
ICAgewotICAgICAgICByZXR1cm4gY2xvYmJlcnNXb3JsZChhdChub2RlSW5kZXgpKTsKKyAgICAg
ICAgcmV0dXJuIGNsb2JiZXJzV29ybGQobm9kZSk7CiAgICAgfQogICAgIAogICAgIHZvaWQgZGV0
ZXJtaW5lUmVhY2hhYmlsaXR5KCk7CkBAIC01NjMsNTIgKzU0NSw1MiBAQCBwdWJsaWM6CiAgICAg
CiAgICAgdm9pZCByZXNldEV4aXRTdGF0ZXMoKTsKICAgICAKLSAgICB1bnNpZ25lZCB2YXJBcmdO
dW1DaGlsZHJlbihOb2RlJiBub2RlKQorICAgIHVuc2lnbmVkIHZhckFyZ051bUNoaWxkcmVuKE5v
ZGUqIG5vZGUpCiAgICAgewotICAgICAgICBBU1NFUlQobm9kZS5mbGFncygpICYgTm9kZUhhc1Zh
ckFyZ3MpOwotICAgICAgICByZXR1cm4gbm9kZS5udW1DaGlsZHJlbigpOworICAgICAgICBBU1NF
UlQobm9kZS0+ZmxhZ3MoKSAmIE5vZGVIYXNWYXJBcmdzKTsKKyAgICAgICAgcmV0dXJuIG5vZGUt
Pm51bUNoaWxkcmVuKCk7CiAgICAgfQogICAgIAotICAgIHVuc2lnbmVkIG51bUNoaWxkcmVuKE5v
ZGUmIG5vZGUpCisgICAgdW5zaWduZWQgbnVtQ2hpbGRyZW4oTm9kZSogbm9kZSkKICAgICB7Ci0g
ICAgICAgIGlmIChub2RlLmZsYWdzKCkgJiBOb2RlSGFzVmFyQXJncykKKyAgICAgICAgaWYgKG5v
ZGUtPmZsYWdzKCkgJiBOb2RlSGFzVmFyQXJncykKICAgICAgICAgICAgIHJldHVybiB2YXJBcmdO
dW1DaGlsZHJlbihub2RlKTsKICAgICAgICAgcmV0dXJuIEFkamFjZW5jeUxpc3Q6OlNpemU7CiAg
ICAgfQogICAgIAotICAgIEVkZ2UmIHZhckFyZ0NoaWxkKE5vZGUmIG5vZGUsIHVuc2lnbmVkIGlu
ZGV4KQorICAgIEVkZ2UmIHZhckFyZ0NoaWxkKE5vZGUqIG5vZGUsIHVuc2lnbmVkIGluZGV4KQog
ICAgIHsKLSAgICAgICAgQVNTRVJUKG5vZGUuZmxhZ3MoKSAmIE5vZGVIYXNWYXJBcmdzKTsKLSAg
ICAgICAgcmV0dXJuIG1fdmFyQXJnQ2hpbGRyZW5bbm9kZS5maXJzdENoaWxkKCkgKyBpbmRleF07
CisgICAgICAgIEFTU0VSVChub2RlLT5mbGFncygpICYgTm9kZUhhc1ZhckFyZ3MpOworICAgICAg
ICByZXR1cm4gbV92YXJBcmdDaGlsZHJlbltub2RlLT5maXJzdENoaWxkKCkgKyBpbmRleF07CiAg
ICAgfQogICAgIAotICAgIEVkZ2UmIGNoaWxkKE5vZGUmIG5vZGUsIHVuc2lnbmVkIGluZGV4KQor
ICAgIEVkZ2UmIGNoaWxkKE5vZGUqIG5vZGUsIHVuc2lnbmVkIGluZGV4KQogICAgIHsKLSAgICAg
ICAgaWYgKG5vZGUuZmxhZ3MoKSAmIE5vZGVIYXNWYXJBcmdzKQorICAgICAgICBpZiAobm9kZS0+
ZmxhZ3MoKSAmIE5vZGVIYXNWYXJBcmdzKQogICAgICAgICAgICAgcmV0dXJuIHZhckFyZ0NoaWxk
KG5vZGUsIGluZGV4KTsKLSAgICAgICAgcmV0dXJuIG5vZGUuY2hpbGRyZW4uY2hpbGQoaW5kZXgp
OworICAgICAgICByZXR1cm4gbm9kZS0+Y2hpbGRyZW4uY2hpbGQoaW5kZXgpOwogICAgIH0KICAg
ICAKICAgICB2b2lkIHZvdGUoRWRnZSBlZGdlLCB1bnNpZ25lZCBiYWxsb3QpCiAgICAgewotICAg
ICAgICBzd2l0Y2ggKGF0KGVkZ2UpLm9wKCkpIHsKKyAgICAgICAgc3dpdGNoIChlZGdlLT5vcCgp
KSB7CiAgICAgICAgIGNhc2UgVmFsdWVUb0ludDMyOgogICAgICAgICBjYXNlIFVJbnQzMlRvTnVt
YmVyOgotICAgICAgICAgICAgZWRnZSA9IGF0KGVkZ2UpLmNoaWxkMSgpOworICAgICAgICAgICAg
ZWRnZSA9IGVkZ2UtPmNoaWxkMSgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1
bHQ6CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgaWYg
KGF0KGVkZ2UpLm9wKCkgPT0gR2V0TG9jYWwpCi0gICAgICAgICAgICBhdChlZGdlKS52YXJpYWJs
ZUFjY2Vzc0RhdGEoKS0+dm90ZShiYWxsb3QpOworICAgICAgICBpZiAoZWRnZS0+b3AoKSA9PSBH
ZXRMb2NhbCkKKyAgICAgICAgICAgIGVkZ2UtPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT52b3RlKGJh
bGxvdCk7CiAgICAgfQogICAgIAotICAgIHZvaWQgdm90ZShOb2RlJiBub2RlLCB1bnNpZ25lZCBi
YWxsb3QpCisgICAgdm9pZCB2b3RlKE5vZGUqIG5vZGUsIHVuc2lnbmVkIGJhbGxvdCkKICAgICB7
Ci0gICAgICAgIGlmIChub2RlLmZsYWdzKCkgJiBOb2RlSGFzVmFyQXJncykgewotICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBjaGlsZElkeCA9IG5vZGUuZmlyc3RDaGlsZCgpOwotICAgICAgICAg
ICAgICAgICBjaGlsZElkeCA8IG5vZGUuZmlyc3RDaGlsZCgpICsgbm9kZS5udW1DaGlsZHJlbigp
OworICAgICAgICBpZiAobm9kZS0+ZmxhZ3MoKSAmIE5vZGVIYXNWYXJBcmdzKSB7CisgICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGNoaWxkSWR4ID0gbm9kZS0+Zmlyc3RDaGlsZCgpOworICAgICAg
ICAgICAgICAgICBjaGlsZElkeCA8IG5vZGUtPmZpcnN0Q2hpbGQoKSArIG5vZGUtPm51bUNoaWxk
cmVuKCk7CiAgICAgICAgICAgICAgICAgIGNoaWxkSWR4KyspIHsKICAgICAgICAgICAgICAgICBp
ZiAoISFtX3ZhckFyZ0NoaWxkcmVuW2NoaWxkSWR4XSkKICAgICAgICAgICAgICAgICAgICAgdm90
ZShtX3ZhckFyZ0NoaWxkcmVuW2NoaWxkSWR4XSwgYmFsbG90KTsKQEAgLTYxNiwzOSArNTk4LDM4
IEBAIHB1YmxpYzoKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICAKLSAg
ICAgICAgaWYgKCFub2RlLmNoaWxkMSgpKQorICAgICAgICBpZiAoIW5vZGUtPmNoaWxkMSgpKQog
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB2b3RlKG5vZGUuY2hpbGQxKCksIGJhbGxvdCk7
Ci0gICAgICAgIGlmICghbm9kZS5jaGlsZDIoKSkKKyAgICAgICAgdm90ZShub2RlLT5jaGlsZDEo
KSwgYmFsbG90KTsKKyAgICAgICAgaWYgKCFub2RlLT5jaGlsZDIoKSkKICAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgdm90ZShub2RlLmNoaWxkMigpLCBiYWxsb3QpOwotICAgICAgICBpZiAo
IW5vZGUuY2hpbGQzKCkpCisgICAgICAgIHZvdGUobm9kZS0+Y2hpbGQyKCksIGJhbGxvdCk7Cisg
ICAgICAgIGlmICghbm9kZS0+Y2hpbGQzKCkpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IHZvdGUobm9kZS5jaGlsZDMoKSwgYmFsbG90KTsKKyAgICAgICAgdm90ZShub2RlLT5jaGlsZDMo
KSwgYmFsbG90KTsKICAgICB9CiAgICAgCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gLy8gVCA9
IE5vZGVJbmRleCBvciBFZGdlCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gLy8gVCA9IE5vZGUq
IG9yIEVkZ2UKICAgICB2b2lkIHN1YnN0aXR1dGUoQmFzaWNCbG9jayYgYmxvY2ssIHVuc2lnbmVk
IHN0YXJ0SW5kZXhJbkJsb2NrLCBUIG9sZFRoaW5nLCBUIG5ld1RoaW5nKQogICAgIHsKICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpbmRleEluQmxvY2sgPSBzdGFydEluZGV4SW5CbG9jazsgaW5kZXhJ
bkJsb2NrIDwgYmxvY2suc2l6ZSgpOyArK2luZGV4SW5CbG9jaykgewotICAgICAgICAgICAgTm9k
ZUluZGV4IG5vZGVJbmRleCA9IGJsb2NrW2luZGV4SW5CbG9ja107Ci0gICAgICAgICAgICBOb2Rl
JiBub2RlID0gYXQobm9kZUluZGV4KTsKLSAgICAgICAgICAgIGlmIChub2RlLmZsYWdzKCkgJiBO
b2RlSGFzVmFyQXJncykgewotICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgY2hpbGRJZHgg
PSBub2RlLmZpcnN0Q2hpbGQoKTsgY2hpbGRJZHggPCBub2RlLmZpcnN0Q2hpbGQoKSArIG5vZGUu
bnVtQ2hpbGRyZW4oKTsgKytjaGlsZElkeCkgeworICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJs
b2NrW2luZGV4SW5CbG9ja107CisgICAgICAgICAgICBpZiAobm9kZS0+ZmxhZ3MoKSAmIE5vZGVI
YXNWYXJBcmdzKSB7CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBjaGlsZElkeCA9IG5v
ZGUtPmZpcnN0Q2hpbGQoKTsgY2hpbGRJZHggPCBub2RlLT5maXJzdENoaWxkKCkgKyBub2RlLT5u
dW1DaGlsZHJlbigpOyArK2NoaWxkSWR4KSB7CiAgICAgICAgICAgICAgICAgICAgIGlmICghIW1f
dmFyQXJnQ2hpbGRyZW5bY2hpbGRJZHhdKQotICAgICAgICAgICAgICAgICAgICAgICAgY29tcGFy
ZUFuZFN3YXAobV92YXJBcmdDaGlsZHJlbltjaGlsZElkeF0sIG9sZFRoaW5nLCBuZXdUaGluZywg
bm9kZS5zaG91bGRHZW5lcmF0ZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBhcmVB
bmRTd2FwKG1fdmFyQXJnQ2hpbGRyZW5bY2hpbGRJZHhdLCBvbGRUaGluZywgbmV3VGhpbmcsIG5v
ZGUtPnNob3VsZEdlbmVyYXRlKCkpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICghbm9kZS5jaGlsZDEo
KSkKKyAgICAgICAgICAgIGlmICghbm9kZS0+Y2hpbGQxKCkpCiAgICAgICAgICAgICAgICAgY29u
dGludWU7Ci0gICAgICAgICAgICBjb21wYXJlQW5kU3dhcChub2RlLmNoaWxkcmVuLmNoaWxkMSgp
LCBvbGRUaGluZywgbmV3VGhpbmcsIG5vZGUuc2hvdWxkR2VuZXJhdGUoKSk7Ci0gICAgICAgICAg
ICBpZiAoIW5vZGUuY2hpbGQyKCkpCisgICAgICAgICAgICBjb21wYXJlQW5kU3dhcChub2RlLT5j
aGlsZHJlbi5jaGlsZDEoKSwgb2xkVGhpbmcsIG5ld1RoaW5nLCBub2RlLT5zaG91bGRHZW5lcmF0
ZSgpKTsKKyAgICAgICAgICAgIGlmICghbm9kZS0+Y2hpbGQyKCkpCiAgICAgICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgICAgICBjb21wYXJlQW5kU3dhcChub2RlLmNoaWxkcmVuLmNoaWxk
MigpLCBvbGRUaGluZywgbmV3VGhpbmcsIG5vZGUuc2hvdWxkR2VuZXJhdGUoKSk7Ci0gICAgICAg
ICAgICBpZiAoIW5vZGUuY2hpbGQzKCkpCisgICAgICAgICAgICBjb21wYXJlQW5kU3dhcChub2Rl
LT5jaGlsZHJlbi5jaGlsZDIoKSwgb2xkVGhpbmcsIG5ld1RoaW5nLCBub2RlLT5zaG91bGRHZW5l
cmF0ZSgpKTsKKyAgICAgICAgICAgIGlmICghbm9kZS0+Y2hpbGQzKCkpCiAgICAgICAgICAgICAg
ICAgY29udGludWU7Ci0gICAgICAgICAgICBjb21wYXJlQW5kU3dhcChub2RlLmNoaWxkcmVuLmNo
aWxkMygpLCBvbGRUaGluZywgbmV3VGhpbmcsIG5vZGUuc2hvdWxkR2VuZXJhdGUoKSk7CisgICAg
ICAgICAgICBjb21wYXJlQW5kU3dhcChub2RlLT5jaGlsZHJlbi5jaGlsZDMoKSwgb2xkVGhpbmcs
IG5ld1RoaW5nLCBub2RlLT5zaG91bGRHZW5lcmF0ZSgpKTsKICAgICAgICAgfQogICAgIH0KICAg
ICAKQEAgLTY1NiwyOSArNjM3LDI4IEBAIHB1YmxpYzoKICAgICAvLyBhbnkgR2V0TG9jYWxzIGlu
IHRoZSBiYXNpYyBibG9jay4KICAgICAvLyBGSVhNRTogaXQgbWF5IGJlIGFwcHJvcHJpYXRlLCBp
biB0aGUgZnV0dXJlLCB0byBnZW5lcmFsaXplIHRoaXMgdG8gaGFuZGxlIEdldExvY2FscwogICAg
IC8vIGludHJvZHVjZWQgYW55d2hlcmUgaW4gdGhlIGJhc2ljIGJsb2NrLgotICAgIHZvaWQgc3Vi
c3RpdHV0ZUdldExvY2FsKEJhc2ljQmxvY2smIGJsb2NrLCB1bnNpZ25lZCBzdGFydEluZGV4SW5C
bG9jaywgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEsIE5vZGVJbmRleCBu
ZXdHZXRMb2NhbCkKKyAgICB2b2lkIHN1YnN0aXR1dGVHZXRMb2NhbChCYXNpY0Jsb2NrJiBibG9j
aywgdW5zaWduZWQgc3RhcnRJbmRleEluQmxvY2ssIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFi
bGVBY2Nlc3NEYXRhLCBOb2RlKiBuZXdHZXRMb2NhbCkKICAgICB7CiAgICAgICAgIGlmICh2YXJp
YWJsZUFjY2Vzc0RhdGEtPmlzQ2FwdHVyZWQoKSkgewogICAgICAgICAgICAgLy8gTGV0IENTRSB3
b3JyeSBhYm91dCB0aGlzIG9uZS4KICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAg
ICAgICBmb3IgKHVuc2lnbmVkIGluZGV4SW5CbG9jayA9IHN0YXJ0SW5kZXhJbkJsb2NrOyBpbmRl
eEluQmxvY2sgPCBibG9jay5zaXplKCk7ICsraW5kZXhJbkJsb2NrKSB7Ci0gICAgICAgICAgICBO
b2RlSW5kZXggbm9kZUluZGV4ID0gYmxvY2tbaW5kZXhJbkJsb2NrXTsKLSAgICAgICAgICAgIE5v
ZGUmIG5vZGUgPSBhdChub2RlSW5kZXgpOworICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2Nr
W2luZGV4SW5CbG9ja107CiAgICAgICAgICAgICBib29sIHNob3VsZENvbnRpbnVlID0gdHJ1ZTsK
LSAgICAgICAgICAgIHN3aXRjaCAobm9kZS5vcCgpKSB7CisgICAgICAgICAgICBzd2l0Y2ggKG5v
ZGUtPm9wKCkpIHsKICAgICAgICAgICAgIGNhc2UgU2V0TG9jYWw6IHsKLSAgICAgICAgICAgICAg
ICBpZiAobm9kZS5sb2NhbCgpID09IHZhcmlhYmxlQWNjZXNzRGF0YS0+bG9jYWwoKSkKKyAgICAg
ICAgICAgICAgICBpZiAobm9kZS0+bG9jYWwoKSA9PSB2YXJpYWJsZUFjY2Vzc0RhdGEtPmxvY2Fs
KCkpCiAgICAgICAgICAgICAgICAgICAgIHNob3VsZENvbnRpbnVlID0gZmFsc2U7CiAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCiAgICAgICAg
ICAgICBjYXNlIEdldExvY2FsOiB7Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGUudmFyaWFibGVB
Y2Nlc3NEYXRhKCkgIT0gdmFyaWFibGVBY2Nlc3NEYXRhKQorICAgICAgICAgICAgICAgIGlmIChu
b2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKSAhPSB2YXJpYWJsZUFjY2Vzc0RhdGEpCiAgICAgICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIHN1YnN0aXR1dGUoYmxvY2ss
IGluZGV4SW5CbG9jaywgbm9kZUluZGV4LCBuZXdHZXRMb2NhbCk7Ci0gICAgICAgICAgICAgICAg
Tm9kZUluZGV4IG9sZFRhaWxJbmRleCA9IGJsb2NrLnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKHZh
cmlhYmxlQWNjZXNzRGF0YS0+bG9jYWwoKSk7Ci0gICAgICAgICAgICAgICAgaWYgKG9sZFRhaWxJ
bmRleCA9PSBub2RlSW5kZXgpCisgICAgICAgICAgICAgICAgc3Vic3RpdHV0ZShibG9jaywgaW5k
ZXhJbkJsb2NrLCBub2RlLCBuZXdHZXRMb2NhbCk7CisgICAgICAgICAgICAgICAgTm9kZSogb2xk
VGFpbE5vZGUgPSBibG9jay52YXJpYWJsZXNBdFRhaWwub3BlcmFuZCh2YXJpYWJsZUFjY2Vzc0Rh
dGEtPmxvY2FsKCkpOworICAgICAgICAgICAgICAgIGlmIChvbGRUYWlsTm9kZSA9PSBub2RlKQog
ICAgICAgICAgICAgICAgICAgICBibG9jay52YXJpYWJsZXNBdFRhaWwub3BlcmFuZCh2YXJpYWJs
ZUFjY2Vzc0RhdGEtPmxvY2FsKCkpID0gbmV3R2V0TG9jYWw7CiAgICAgICAgICAgICAgICAgc2hv
dWxkQ29udGludWUgPSBmYWxzZTsKICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTY5Niw2ICs2
NzYsOCBAQCBwdWJsaWM6CiAgICAgQ29kZUJsb2NrKiBtX2NvZGVCbG9jazsKICAgICBSZWZQdHI8
UHJvZmlsZXI6OkNvbXBpbGF0aW9uPiBtX2NvbXBpbGF0aW9uOwogICAgIENvZGVCbG9jayogbV9w
cm9maWxlZEJsb2NrOworICAgIAorICAgIE5vZGVBbGxvY2F0b3ImIG1fYWxsb2NhdG9yOwogCiAg
ICAgVmVjdG9yPCBPd25QdHI8QmFzaWNCbG9jaz4gLCA4PiBtX2Jsb2NrczsKICAgICBWZWN0b3I8
RWRnZSwgMTY+IG1fdmFyQXJnQ2hpbGRyZW47CkBAIC03MDMsNyArNjg1LDcgQEAgcHVibGljOgog
ICAgIFZlY3RvcjxSZXNvbHZlR2xvYmFsRGF0YT4gbV9yZXNvbHZlR2xvYmFsRGF0YTsKICAgICBW
ZWN0b3I8UmVzb2x2ZU9wZXJhdGlvbkRhdGE+IG1fcmVzb2x2ZU9wZXJhdGlvbnNEYXRhOwogICAg
IFZlY3RvcjxQdXRUb0Jhc2VPcGVyYXRpb25EYXRhPiBtX3B1dFRvQmFzZU9wZXJhdGlvbkRhdGE7
Ci0gICAgVmVjdG9yPE5vZGVJbmRleCwgOD4gbV9hcmd1bWVudHM7CisgICAgVmVjdG9yPE5vZGUq
LCA4PiBtX2FyZ3VtZW50czsKICAgICBTZWdtZW50ZWRWZWN0b3I8VmFyaWFibGVBY2Nlc3NEYXRh
LCAxNj4gbV92YXJpYWJsZUFjY2Vzc0RhdGE7CiAgICAgU2VnbWVudGVkVmVjdG9yPEFyZ3VtZW50
UG9zaXRpb24sIDg+IG1fYXJndW1lbnRQb3NpdGlvbnM7CiAgICAgU2VnbWVudGVkVmVjdG9yPFN0
cnVjdHVyZVNldCwgMTY+IG1fc3RydWN0dXJlU2V0OwpAQCAtNzIzLDI5ICs3MDUsMjkgQEAgcHJp
dmF0ZToKICAgICAKICAgICB2b2lkIGhhbmRsZVN1Y2Nlc3NvcihWZWN0b3I8QmxvY2tJbmRleCwg
MTY+JiB3b3JrbGlzdCwgQmxvY2tJbmRleCBibG9ja0luZGV4LCBCbG9ja0luZGV4IHN1Y2Nlc3Nv
ckluZGV4KTsKICAgICAKLSAgICBBZGRTcGVjdWxhdGlvbk1vZGUgYWRkSW1tZWRpYXRlU2hvdWxk
U3BlY3VsYXRlSW50ZWdlcihOb2RlJiBhZGQsIGJvb2wgdmFyaWFibGVTaG91bGRTcGVjdWxhdGVJ
bnRlZ2VyLCBOb2RlJiBpbW1lZGlhdGUpCisgICAgQWRkU3BlY3VsYXRpb25Nb2RlIGFkZEltbWVk
aWF0ZVNob3VsZFNwZWN1bGF0ZUludGVnZXIoTm9kZSogYWRkLCBib29sIHZhcmlhYmxlU2hvdWxk
U3BlY3VsYXRlSW50ZWdlciwgTm9kZSogaW1tZWRpYXRlKQogICAgIHsKICAgICAgICAgQVNTRVJU
KGltbWVkaWF0ZS5oYXNDb25zdGFudCgpKTsKICAgICAgICAgCi0gICAgICAgIEpTVmFsdWUgaW1t
ZWRpYXRlVmFsdWUgPSBpbW1lZGlhdGUudmFsdWVPZkpTQ29uc3RhbnQobV9jb2RlQmxvY2spOwot
ICAgICAgICBpZiAoIWltbWVkaWF0ZVZhbHVlLmlzTnVtYmVyKCkpCisgICAgICAgIEpTVmFsdWUg
aW1tZWRpYXRlVmFsdWUgPSBpbW1lZGlhdGUtPnZhbHVlT2ZKU0NvbnN0YW50KG1fY29kZUJsb2Nr
KTsKKyAgICAgICAgaWYgKCFpbW1lZGlhdGVWYWx1ZS0+aXNOdW1iZXIoKSkKICAgICAgICAgICAg
IHJldHVybiBEb250U3BlY3VsYXRlSW50ZWdlcjsKICAgICAgICAgCiAgICAgICAgIGlmICghdmFy
aWFibGVTaG91bGRTcGVjdWxhdGVJbnRlZ2VyKQogICAgICAgICAgICAgcmV0dXJuIERvbnRTcGVj
dWxhdGVJbnRlZ2VyOwogICAgICAgICAKLSAgICAgICAgaWYgKGltbWVkaWF0ZVZhbHVlLmlzSW50
MzIoKSkKLSAgICAgICAgICAgIHJldHVybiBhZGQuY2FuU3BlY3VsYXRlSW50ZWdlcigpID8gU3Bl
Y3VsYXRlSW50ZWdlciA6IERvbnRTcGVjdWxhdGVJbnRlZ2VyOworICAgICAgICBpZiAoaW1tZWRp
YXRlVmFsdWUtPmlzSW50MzIoKSkKKyAgICAgICAgICAgIHJldHVybiBhZGQtPmNhblNwZWN1bGF0
ZUludGVnZXIoKSA/IFNwZWN1bGF0ZUludGVnZXIgOiBEb250U3BlY3VsYXRlSW50ZWdlcjsKICAg
ICAgICAgCiAgICAgICAgIGRvdWJsZSBkb3VibGVJbW1lZGlhdGUgPSBpbW1lZGlhdGVWYWx1ZS5h
c0RvdWJsZSgpOwogICAgICAgICBjb25zdCBkb3VibGUgdHdvVG9UaGU0OCA9IDI4MTQ3NDk3Njcx
MDY1Ni4wOwogICAgICAgICBpZiAoZG91YmxlSW1tZWRpYXRlIDwgLXR3b1RvVGhlNDggfHwgZG91
YmxlSW1tZWRpYXRlID4gdHdvVG9UaGU0OCkKICAgICAgICAgICAgIHJldHVybiBEb250U3BlY3Vs
YXRlSW50ZWdlcjsKICAgICAgICAgCi0gICAgICAgIHJldHVybiBub2RlQ2FuVHJ1bmNhdGVJbnRl
Z2VyKGFkZC5hcml0aE5vZGVGbGFncygpKSA/IFNwZWN1bGF0ZUludGVnZXJCdXRBbHdheXNXYXRj
aE92ZXJmbG93IDogRG9udFNwZWN1bGF0ZUludGVnZXI7CisgICAgICAgIHJldHVybiBub2RlQ2Fu
VHJ1bmNhdGVJbnRlZ2VyKGFkZC0+YXJpdGhOb2RlRmxhZ3MoKSkgPyBTcGVjdWxhdGVJbnRlZ2Vy
QnV0QWx3YXlzV2F0Y2hPdmVyZmxvdyA6IERvbnRTcGVjdWxhdGVJbnRlZ2VyOwogICAgIH0KICAg
ICAKLSAgICBib29sIG11bEltbWVkaWF0ZVNob3VsZFNwZWN1bGF0ZUludGVnZXIoTm9kZSYgbXVs
LCBOb2RlJiB2YXJpYWJsZSwgTm9kZSYgaW1tZWRpYXRlKQorICAgIGJvb2wgbXVsSW1tZWRpYXRl
U2hvdWxkU3BlY3VsYXRlSW50ZWdlcihOb2RlKiBtdWwsIE5vZGUqIHZhcmlhYmxlLCBOb2RlKiBp
bW1lZGlhdGUpCiAgICAgewogICAgICAgICBBU1NFUlQoaW1tZWRpYXRlLmhhc0NvbnN0YW50KCkp
OwogICAgICAgICAKQEAgLTc1Myw3ICs3MzUsNyBAQCBwcml2YXRlOgogICAgICAgICBpZiAoIWlt
bWVkaWF0ZVZhbHVlLmlzSW50MzIoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAg
ICAgCi0gICAgICAgIGlmICghdmFyaWFibGUuc2hvdWxkU3BlY3VsYXRlSW50ZWdlckZvckFyaXRo
bWV0aWMoKSkKKyAgICAgICAgaWYgKCF2YXJpYWJsZS0+c2hvdWxkU3BlY3VsYXRlSW50ZWdlckZv
ckFyaXRobWV0aWMoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgCiAgICAg
ICAgIGludDMyX3QgaW50SW1tZWRpYXRlID0gaW1tZWRpYXRlVmFsdWUuYXNJbnQzMigpOwpAQCAt
NzY0LDE0ICs3NDYsMTQgQEAgcHJpdmF0ZToKICAgICAgICAgLy8gY2FuU3BlY3VsYXRlSW50ZWdl
cigpIGltcGxpZXMpLgogICAgICAgICBjb25zdCBpbnQzMl90IHR3b1RvVGhlMjIgPSAxIDw8IDIy
OwogICAgICAgICBpZiAoaW50SW1tZWRpYXRlIDw9IC10d29Ub1RoZTIyIHx8IGludEltbWVkaWF0
ZSA+PSB0d29Ub1RoZTIyKQotICAgICAgICAgICAgcmV0dXJuIG11bC5jYW5TcGVjdWxhdGVJbnRl
Z2VyKCkgJiYgIW5vZGVNYXlPdmVyZmxvdyhtdWwuYXJpdGhOb2RlRmxhZ3MoKSk7CisgICAgICAg
ICAgICByZXR1cm4gbXVsLT5jYW5TcGVjdWxhdGVJbnRlZ2VyKCkgJiYgIW5vZGVNYXlPdmVyZmxv
dyhtdWwtPmFyaXRoTm9kZUZsYWdzKCkpOwogCi0gICAgICAgIHJldHVybiBtdWwuY2FuU3BlY3Vs
YXRlSW50ZWdlcigpOworICAgICAgICByZXR1cm4gbXVsLT5jYW5TcGVjdWxhdGVJbnRlZ2VyKCk7
CiAgICAgfQogICAgIAogICAgIC8vIFdoZW4gYSBub2RlJ3MgcmVmQ291bnQgZ29lcyBmcm9tIDAg
dG8gMSwgaXQgbXVzdCAobG9naWNhbGx5KSByZWN1cnNpdmVseSByZWYgYWxsIG9mIGl0cyBjaGls
ZHJlbiwgYW5kIHZpY2UgdmVyc2EuCi0gICAgdm9pZCByZWZDaGlsZHJlbihOb2RlSW5kZXgpOwot
ICAgIHZvaWQgZGVyZWZDaGlsZHJlbihOb2RlSW5kZXgpOworICAgIHZvaWQgcmVmQ2hpbGRyZW4o
Tm9kZSopOworICAgIHZvaWQgZGVyZWZDaGlsZHJlbihOb2RlKik7CiB9OwogCiBjbGFzcyBHZXRC
eXRlY29kZUJlZ2luRm9yQmxvY2sgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdMb25nTGl2ZWRTdGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdMb25nTGl2ZWRTdGF0ZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0xvbmdMaXZlZFN0YXRlLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSw0OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZHTG9uZ0xpdmVkU3RhdGUuaCIKKworI2lm
IEVOQUJMRShERkdfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK0xv
bmdMaXZlZFN0YXRlOjpMb25nTGl2ZWRTdGF0ZSgpCit7Cit9CisKK0xvbmdMaXZlZFN0YXRlOjp+
TG9uZ0xpdmVkU3RhdGUoKQoreworfQorCit2b2lkIExvbmdMaXZlZFN0YXRlOjpzaHJpbmtUb0Zp
dCgpCit7CisgICAgbV9hbGxvY2F0b3IucmVzZXQoKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHTG9uZ0xpdmVkU3RhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0xvbmdMaXZlZFN0YXRlLmgJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0xvbmdMaXZlZFN0YXRlLmgJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsNTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2lmbmRlZiBERkdMb25nTGl2ZWRTdGF0ZV9oCisjZGVmaW5lIERGR0xvbmdMaXZl
ZFN0YXRlX2gKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKERGR19K
SVQpCisKKyNpbmNsdWRlICJERkdOb2RlQWxsb2NhdG9yLmgiCisjaW5jbHVkZSA8d3RmL0Zhc3RB
bGxvY0Jhc2UuaD4KKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKworbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBERkcgeworCitjbGFzcyBMb25nTGl2ZWRTdGF0ZSB7CisgICAgV1RGX01B
S0VfRkFTVF9BTExPQ0FURUQ7IFdURl9NQUtFX05PTkNPUFlBQkxFKExvbmdMaXZlZFN0YXRlKTsK
K3B1YmxpYzoKKyAgICBMb25nTGl2ZWRTdGF0ZSgpOworICAgIH5Mb25nTGl2ZWRTdGF0ZSgpOwor
ICAgIAorICAgIHZvaWQgc2hyaW5rVG9GaXQoKTsKKyAgICAKKyAgICBOb2RlQWxsb2NhdG9yIG1f
YWxsb2NhdG9yOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8g
RU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdMb25nTGl2ZWRTdGF0ZV9oCisKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
NTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGR05vZGUuaCIKKworI2lmIEVOQUJMRShERkdf
SklUKQorCisjaW5jbHVkZSAiREZHTm9kZUFsbG9jYXRvci5oIgorCituYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIERGRyB7CisKK3Vuc2lnbmVkIE5vZGU6OmluZGV4KCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gTm9kZUFsbG9jYXRvcjo6YWxsb2NhdG9yT2YodGhpcyktPmluZGV4T2YodGhpcyk7Cit9
CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworbmFtZXNwYWNlIFdURiB7CisKK3ZvaWQg
cHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBOb2RlKiBub2RlKQoreworICAgIGlmICgh
bm9kZSkKKyAgICAgICAgb3V0LnByaW50KCItIik7CisgICAgZWxzZQorICAgICAgICBvdXQucHJp
bnQoIkAiLCBub2RlLT5pbmRleCgpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRp
ZiAvLyBFTkFCTEUoREZHX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdOb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2Rl
LmgJKHJldmlzaW9uIDE0MDEwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9k
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMSwgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTEsIDIwMTIsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02OCw3ICs2OCw3IEBAIHN0cnVjdCBOZXdB
cnJheUJ1ZmZlckRhdGEgewogCiAvLyBUaGlzIHR5cGUgdXNlZCBpbiBwYXNzaW5nIGFuIGltbWVk
aWF0ZSBhcmd1bWVudCB0byBOb2RlIGNvbnN0cnVjdG9yOwogLy8gZGlzdGluZ3Vpc2hlcyBhbiBp
bW1lZGlhdGUgdmFsdWUgKHR5cGljYWxseSBhbiBpbmRleCBpbnRvIGEgQ29kZUJsb2NrIGRhdGEg
c3RydWN0dXJlIC0gCi0vLyBhIGNvbnN0YW50IGluZGV4LCBhcmd1bWVudCwgb3IgaWRlbnRpZmll
cikgZnJvbSBhIE5vZGVJbmRleC4KKy8vIGEgY29uc3RhbnQgaW5kZXgsIGFyZ3VtZW50LCBvciBp
ZGVudGlmaWVyKSBmcm9tIGEgTm9kZSouCiBzdHJ1Y3QgT3BJbmZvIHsKICAgICBleHBsaWNpdCBP
cEluZm8oaW50MzJfdCB2YWx1ZSkgOiBtX3ZhbHVlKHN0YXRpY19jYXN0PHVpbnRwdHJfdD4odmFs
dWUpKSB7IH0KICAgICBleHBsaWNpdCBPcEluZm8odWludDMyX3QgdmFsdWUpIDogbV92YWx1ZShz
dGF0aWNfY2FzdDx1aW50cHRyX3Q+KHZhbHVlKSkgeyB9CkBAIC04OCw3ICs4OCw3IEBAIHN0cnVj
dCBOb2RlIHsKICAgICBOb2RlKCkgeyB9CiAgICAgCiAgICAgLy8gQ29uc3RydWN0IGEgbm9kZSB3
aXRoIHVwIHRvIDMgY2hpbGRyZW4sIG5vIGltbWVkaWF0ZSB2YWx1ZS4KLSAgICBOb2RlKE5vZGVU
eXBlIG9wLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIE5vZGVJbmRleCBjaGlsZDEgPSBOb05vZGUs
IE5vZGVJbmRleCBjaGlsZDIgPSBOb05vZGUsIE5vZGVJbmRleCBjaGlsZDMgPSBOb05vZGUpCisg
ICAgTm9kZShOb2RlVHlwZSBvcCwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBOb2RlKiBjaGlsZDEg
PSAwLCBOb2RlKiBjaGlsZDIgPSAwLCBOb2RlKiBjaGlsZDMgPSAwKQogICAgICAgICA6IGNvZGVP
cmlnaW4oY29kZU9yaWdpbikKICAgICAgICAgLCBjaGlsZHJlbihBZGphY2VuY3lMaXN0OjpGaXhl
ZCwgY2hpbGQxLCBjaGlsZDIsIGNoaWxkMykKICAgICAgICAgLCBtX3ZpcnR1YWxSZWdpc3RlcihJ
bnZhbGlkVmlydHVhbFJlZ2lzdGVyKQpAQCAtMTAwLDcgKzEwMCw3IEBAIHN0cnVjdCBOb2RlIHsK
ICAgICB9CiAKICAgICAvLyBDb25zdHJ1Y3QgYSBub2RlIHdpdGggdXAgdG8gMyBjaGlsZHJlbiBh
bmQgYW4gaW1tZWRpYXRlIHZhbHVlLgotICAgIE5vZGUoTm9kZVR5cGUgb3AsIENvZGVPcmlnaW4g
Y29kZU9yaWdpbiwgT3BJbmZvIGltbSwgTm9kZUluZGV4IGNoaWxkMSA9IE5vTm9kZSwgTm9kZUlu
ZGV4IGNoaWxkMiA9IE5vTm9kZSwgTm9kZUluZGV4IGNoaWxkMyA9IE5vTm9kZSkKKyAgICBOb2Rl
KE5vZGVUeXBlIG9wLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIE9wSW5mbyBpbW0sIE5vZGUqIGNo
aWxkMSA9IDAsIE5vZGUqIGNoaWxkMiA9IDAsIE5vZGUqIGNoaWxkMyA9IDApCiAgICAgICAgIDog
Y29kZU9yaWdpbihjb2RlT3JpZ2luKQogICAgICAgICAsIGNoaWxkcmVuKEFkamFjZW5jeUxpc3Q6
OkZpeGVkLCBjaGlsZDEsIGNoaWxkMiwgY2hpbGQzKQogICAgICAgICAsIG1fdmlydHVhbFJlZ2lz
dGVyKEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIpCkBAIC0xMTMsNyArMTEzLDcgQEAgc3RydWN0IE5v
ZGUgewogICAgIH0KIAogICAgIC8vIENvbnN0cnVjdCBhIG5vZGUgd2l0aCB1cCB0byAzIGNoaWxk
cmVuIGFuZCB0d28gaW1tZWRpYXRlIHZhbHVlcy4KLSAgICBOb2RlKE5vZGVUeXBlIG9wLCBDb2Rl
T3JpZ2luIGNvZGVPcmlnaW4sIE9wSW5mbyBpbW0xLCBPcEluZm8gaW1tMiwgTm9kZUluZGV4IGNo
aWxkMSA9IE5vTm9kZSwgTm9kZUluZGV4IGNoaWxkMiA9IE5vTm9kZSwgTm9kZUluZGV4IGNoaWxk
MyA9IE5vTm9kZSkKKyAgICBOb2RlKE5vZGVUeXBlIG9wLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4s
IE9wSW5mbyBpbW0xLCBPcEluZm8gaW1tMiwgTm9kZSogY2hpbGQxID0gMCwgTm9kZSogY2hpbGQy
ID0gMCwgTm9kZSogY2hpbGQzID0gMCkKICAgICAgICAgOiBjb2RlT3JpZ2luKGNvZGVPcmlnaW4p
CiAgICAgICAgICwgY2hpbGRyZW4oQWRqYWNlbmN5TGlzdDo6Rml4ZWQsIGNoaWxkMSwgY2hpbGQy
LCBjaGlsZDMpCiAgICAgICAgICwgbV92aXJ0dWFsUmVnaXN0ZXIoSW52YWxpZFZpcnR1YWxSZWdp
c3RlcikKQEAgLTE0Myw2ICsxNDMsOSBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgTm9kZVR5cGUgb3Ao
KSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxOb2RlVHlwZT4obV9vcCk7IH0KICAgICBOb2Rl
RmxhZ3MgZmxhZ3MoKSBjb25zdCB7IHJldHVybiBtX2ZsYWdzOyB9CiAgICAgCisgICAgLy8gVGhp
cyBpcyBub3QgYSBmYXN0IG1ldGhvZC4KKyAgICB1bnNpZ25lZCBpbmRleCgpIGNvbnN0OworICAg
IAogICAgIHZvaWQgc2V0T3AoTm9kZVR5cGUgb3ApCiAgICAgewogICAgICAgICBtX29wID0gb3A7
CkBAIC0yNzAsNyArMjczLDcgQEAgc3RydWN0IE5vZGUgewogICAgICAgICBjb252ZXJ0VG9TdHJ1
Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludChzdHJ1Y3R1cmVTZXQoKS5zaW5nbGV0b25TdHJ1Y3R1
cmUoKSk7CiAgICAgfQogICAgIAotICAgIHZvaWQgY29udmVydFRvR2V0QnlPZmZzZXQodW5zaWdu
ZWQgc3RvcmFnZUFjY2Vzc0RhdGFJbmRleCwgTm9kZUluZGV4IHN0b3JhZ2UpCisgICAgdm9pZCBj
b252ZXJ0VG9HZXRCeU9mZnNldCh1bnNpZ25lZCBzdG9yYWdlQWNjZXNzRGF0YUluZGV4LCBOb2Rl
KiBzdG9yYWdlKQogICAgIHsKICAgICAgICAgQVNTRVJUKG1fb3AgPT0gR2V0QnlJZCB8fCBtX29w
ID09IEdldEJ5SWRGbHVzaCk7CiAgICAgICAgIG1fb3BJbmZvID0gc3RvcmFnZUFjY2Vzc0RhdGFJ
bmRleDsKQEAgLTI3OSw3ICsyODIsNyBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAgIG1fZmxhZ3Mg
Jj0gfk5vZGVDbG9iYmVyc1dvcmxkOwogICAgIH0KICAgICAKLSAgICB2b2lkIGNvbnZlcnRUb1B1
dEJ5T2Zmc2V0KHVuc2lnbmVkIHN0b3JhZ2VBY2Nlc3NEYXRhSW5kZXgsIE5vZGVJbmRleCBzdG9y
YWdlKQorICAgIHZvaWQgY29udmVydFRvUHV0QnlPZmZzZXQodW5zaWduZWQgc3RvcmFnZUFjY2Vz
c0RhdGFJbmRleCwgTm9kZSogc3RvcmFnZSkKICAgICB7CiAgICAgICAgIEFTU0VSVChtX29wID09
IFB1dEJ5SWQgfHwgbV9vcCA9PSBQdXRCeUlkRGlyZWN0KTsKICAgICAgICAgbV9vcEluZm8gPSBz
dG9yYWdlQWNjZXNzRGF0YUluZGV4OwpAQCAtOTA5LDkgKzkxMiwxMCBAQCBzdHJ1Y3QgTm9kZSB7
CiAgICAgICAgIHJldHVybiBtX3JlZkNvdW50OwogICAgIH0KIAotICAgIHZvaWQgcmVmKCkKKyAg
ICBOb2RlKiByZWYoKQogICAgIHsKICAgICAgICAgbV9yZWZDb3VudCsrOworICAgICAgICByZXR1
cm4gdGhpczsKICAgICB9CiAKICAgICB1bnNpZ25lZCBwb3N0Zml4UmVmKCkKQEAgLTExMjQsNDQg
KzExMjgsNDQgQEAgc3RydWN0IE5vZGUgewogICAgICAgICByZXR1cm4gaXNDZWxsU3BlY3VsYXRp
b24ocHJlZGljdGlvbigpKTsKICAgICB9CiAgICAgCi0gICAgc3RhdGljIGJvb2wgc2hvdWxkU3Bl
Y3VsYXRlSW50ZWdlcihOb2RlJiBvcDEsIE5vZGUmIG9wMikKKyAgICBzdGF0aWMgYm9vbCBzaG91
bGRTcGVjdWxhdGVJbnRlZ2VyKE5vZGUqIG9wMSwgTm9kZSogb3AyKQogICAgIHsKLSAgICAgICAg
cmV0dXJuIG9wMS5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkgJiYgb3AyLnNob3VsZFNwZWN1bGF0
ZUludGVnZXIoKTsKKyAgICAgICAgcmV0dXJuIG9wMS0+c2hvdWxkU3BlY3VsYXRlSW50ZWdlcigp
ICYmIG9wMi0+c2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpOwogICAgIH0KICAgICAKLSAgICBzdGF0
aWMgYm9vbCBzaG91bGRTcGVjdWxhdGVJbnRlZ2VyRm9yQXJpdGhtZXRpYyhOb2RlJiBvcDEsIE5v
ZGUmIG9wMikKKyAgICBzdGF0aWMgYm9vbCBzaG91bGRTcGVjdWxhdGVJbnRlZ2VyRm9yQXJpdGht
ZXRpYyhOb2RlKiBvcDEsIE5vZGUqIG9wMikKICAgICB7Ci0gICAgICAgIHJldHVybiBvcDEuc2hv
dWxkU3BlY3VsYXRlSW50ZWdlckZvckFyaXRobWV0aWMoKSAmJiBvcDIuc2hvdWxkU3BlY3VsYXRl
SW50ZWdlckZvckFyaXRobWV0aWMoKTsKKyAgICAgICAgcmV0dXJuIG9wMS0+c2hvdWxkU3BlY3Vs
YXRlSW50ZWdlckZvckFyaXRobWV0aWMoKSAmJiBvcDItPnNob3VsZFNwZWN1bGF0ZUludGVnZXJG
b3JBcml0aG1ldGljKCk7CiAgICAgfQogICAgIAotICAgIHN0YXRpYyBib29sIHNob3VsZFNwZWN1
bGF0ZUludGVnZXJFeHBlY3RpbmdEZWZpbmVkKE5vZGUmIG9wMSwgTm9kZSYgb3AyKQorICAgIHN0
YXRpYyBib29sIHNob3VsZFNwZWN1bGF0ZUludGVnZXJFeHBlY3RpbmdEZWZpbmVkKE5vZGUqIG9w
MSwgTm9kZSogb3AyKQogICAgIHsKLSAgICAgICAgcmV0dXJuIG9wMS5zaG91bGRTcGVjdWxhdGVJ
bnRlZ2VyRXhwZWN0aW5nRGVmaW5lZCgpICYmIG9wMi5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyRXhw
ZWN0aW5nRGVmaW5lZCgpOworICAgICAgICByZXR1cm4gb3AxLT5zaG91bGRTcGVjdWxhdGVJbnRl
Z2VyRXhwZWN0aW5nRGVmaW5lZCgpICYmIG9wMi0+c2hvdWxkU3BlY3VsYXRlSW50ZWdlckV4cGVj
dGluZ0RlZmluZWQoKTsKICAgICB9CiAgICAgCi0gICAgc3RhdGljIGJvb2wgc2hvdWxkU3BlY3Vs
YXRlRG91YmxlRm9yQXJpdGhtZXRpYyhOb2RlJiBvcDEsIE5vZGUmIG9wMikKKyAgICBzdGF0aWMg
Ym9vbCBzaG91bGRTcGVjdWxhdGVEb3VibGVGb3JBcml0aG1ldGljKE5vZGUqIG9wMSwgTm9kZSog
b3AyKQogICAgIHsKLSAgICAgICAgcmV0dXJuIG9wMS5zaG91bGRTcGVjdWxhdGVEb3VibGVGb3JB
cml0aG1ldGljKCkgJiYgb3AyLnNob3VsZFNwZWN1bGF0ZURvdWJsZUZvckFyaXRobWV0aWMoKTsK
KyAgICAgICAgcmV0dXJuIG9wMS0+c2hvdWxkU3BlY3VsYXRlRG91YmxlRm9yQXJpdGhtZXRpYygp
ICYmIG9wMi0+c2hvdWxkU3BlY3VsYXRlRG91YmxlRm9yQXJpdGhtZXRpYygpOwogICAgIH0KICAg
ICAKLSAgICBzdGF0aWMgYm9vbCBzaG91bGRTcGVjdWxhdGVOdW1iZXIoTm9kZSYgb3AxLCBOb2Rl
JiBvcDIpCisgICAgc3RhdGljIGJvb2wgc2hvdWxkU3BlY3VsYXRlTnVtYmVyKE5vZGUqIG9wMSwg
Tm9kZSogb3AyKQogICAgIHsKLSAgICAgICAgcmV0dXJuIG9wMS5zaG91bGRTcGVjdWxhdGVOdW1i
ZXIoKSAmJiBvcDIuc2hvdWxkU3BlY3VsYXRlTnVtYmVyKCk7CisgICAgICAgIHJldHVybiBvcDEt
PnNob3VsZFNwZWN1bGF0ZU51bWJlcigpICYmIG9wMi0+c2hvdWxkU3BlY3VsYXRlTnVtYmVyKCk7
CiAgICAgfQogICAgIAotICAgIHN0YXRpYyBib29sIHNob3VsZFNwZWN1bGF0ZU51bWJlckV4cGVj
dGluZ0RlZmluZWQoTm9kZSYgb3AxLCBOb2RlJiBvcDIpCisgICAgc3RhdGljIGJvb2wgc2hvdWxk
U3BlY3VsYXRlTnVtYmVyRXhwZWN0aW5nRGVmaW5lZChOb2RlKiBvcDEsIE5vZGUqIG9wMikKICAg
ICB7Ci0gICAgICAgIHJldHVybiBvcDEuc2hvdWxkU3BlY3VsYXRlTnVtYmVyRXhwZWN0aW5nRGVm
aW5lZCgpICYmIG9wMi5zaG91bGRTcGVjdWxhdGVOdW1iZXJFeHBlY3RpbmdEZWZpbmVkKCk7Cisg
ICAgICAgIHJldHVybiBvcDEtPnNob3VsZFNwZWN1bGF0ZU51bWJlckV4cGVjdGluZ0RlZmluZWQo
KSAmJiBvcDItPnNob3VsZFNwZWN1bGF0ZU51bWJlckV4cGVjdGluZ0RlZmluZWQoKTsKICAgICB9
CiAgICAgCi0gICAgc3RhdGljIGJvb2wgc2hvdWxkU3BlY3VsYXRlRmluYWxPYmplY3QoTm9kZSYg
b3AxLCBOb2RlJiBvcDIpCisgICAgc3RhdGljIGJvb2wgc2hvdWxkU3BlY3VsYXRlRmluYWxPYmpl
Y3QoTm9kZSogb3AxLCBOb2RlKiBvcDIpCiAgICAgewotICAgICAgICByZXR1cm4gb3AxLnNob3Vs
ZFNwZWN1bGF0ZUZpbmFsT2JqZWN0KCkgJiYgb3AyLnNob3VsZFNwZWN1bGF0ZUZpbmFsT2JqZWN0
KCk7CisgICAgICAgIHJldHVybiBvcDEtPnNob3VsZFNwZWN1bGF0ZUZpbmFsT2JqZWN0KCkgJiYg
b3AyLT5zaG91bGRTcGVjdWxhdGVGaW5hbE9iamVjdCgpOwogICAgIH0KIAotICAgIHN0YXRpYyBi
b29sIHNob3VsZFNwZWN1bGF0ZUFycmF5KE5vZGUmIG9wMSwgTm9kZSYgb3AyKQorICAgIHN0YXRp
YyBib29sIHNob3VsZFNwZWN1bGF0ZUFycmF5KE5vZGUqIG9wMSwgTm9kZSogb3AyKQogICAgIHsK
LSAgICAgICAgcmV0dXJuIG9wMS5zaG91bGRTcGVjdWxhdGVBcnJheSgpICYmIG9wMi5zaG91bGRT
cGVjdWxhdGVBcnJheSgpOworICAgICAgICByZXR1cm4gb3AxLT5zaG91bGRTcGVjdWxhdGVBcnJh
eSgpICYmIG9wMi0+c2hvdWxkU3BlY3VsYXRlQXJyYXkoKTsKICAgICB9CiAgICAgCiAgICAgYm9v
bCBjYW5TcGVjdWxhdGVJbnRlZ2VyKCkKQEAgLTExNzMsMTUgKzExNzcsMTcgQEAgc3RydWN0IE5v
ZGUgewogICAgIHsKICAgICAgICAgaWYgKCFjaGlsZDEoKSkKICAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgb3V0LnByaW50ZigiQCV1IiwgY2hpbGQxKCkuaW5kZXgoKSk7CisgICAgICAgIG91
dC5wcmludGYoIkAldSIsIGNoaWxkMSgpLT5pbmRleCgpKTsKICAgICAgICAgaWYgKCFjaGlsZDIo
KSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgb3V0LnByaW50ZigiLCBAJXUiLCBjaGls
ZDIoKS5pbmRleCgpKTsKKyAgICAgICAgb3V0LnByaW50ZigiLCBAJXUiLCBjaGlsZDIoKS0+aW5k
ZXgoKSk7CiAgICAgICAgIGlmICghY2hpbGQzKCkpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgIG91dC5wcmludGYoIiwgQCV1IiwgY2hpbGQzKCkuaW5kZXgoKSk7CisgICAgICAgIG91dC5w
cmludGYoIiwgQCV1IiwgY2hpbGQzKCktPmluZGV4KCkpOwogICAgIH0KICAgICAKKyAgICAvLyBO
Qi4gVGhpcyBjbGFzcyBtdXN0IGhhdmUgYSB0cml2aWFsIGRlc3RydWN0b3IuCisgICAgCiAgICAg
Ly8gVXNlZCB0byBsb29rIHVwIGV4Y2VwdGlvbiBoYW5kbGluZyBpbmZvcm1hdGlvbiAoY3VycmVu
dGx5IGltcGxlbWVudGVkIGFzIGEgYnl0ZWNvZGUgaW5kZXgpLgogICAgIENvZGVPcmlnaW4gY29k
ZU9yaWdpbjsKICAgICAvLyBSZWZlcmVuY2VzIHRvIHVwIHRvIDMgY2hpbGRyZW4sIG9yIGxpbmtz
IHRvIGEgdmFyaWFibGUgbGVuZ3RoIHNldCBvZiBjaGlsZHJlbi4KQEAgLTEyMDQsMTAgKzEyMTAs
MTYgQEAgcHJpdmF0ZToKIHB1YmxpYzoKICAgICAvLyBGaWVsZHMgdXNlZCBieSB2YXJpb3VzIGFu
YWx5c2VzLgogICAgIEFic3RyYWN0VmFsdWUgdmFsdWU7Ci0gICAgTm9kZUluZGV4IHJlcGxhY2Vt
ZW50OworICAgIE5vZGUqIHJlcGxhY2VtZW50OwogfTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkRGRwogCituYW1lc3BhY2UgV1RGIHsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFt
JiwgTm9kZSopOworCit9IC8vIG5hbWVzcGFjZSBXVEYKKwogI2VuZGlmCiAjZW5kaWYKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZUFsbG9jYXRvci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZUFsbG9jYXRvci5oCShyZXZpc2lv
biAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlQWxsb2NhdG9yLmgJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsNTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdOb2RlQWxsb2NhdG9yX2gKKyNkZWZpbmUgREZH
Tm9kZUFsbG9jYXRvcl9oCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2lmIEVOQUJM
RShERkdfSklUKQorCisjaW5jbHVkZSAiREZHQWxsb2NhdG9yLmgiCisjaW5jbHVkZSAiREZHTm9k
ZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK3R5cGVkZWYgQWxsb2Nh
dG9yPE5vZGUsIDQwOTU+IE5vZGVBbGxvY2F0b3I7CisKK2lubGluZSB2b2lkKiBvcGVyYXRvciBu
ZXcgKHNpemVfdCBzaXplLCBOb2RlQWxsb2NhdG9yJiBhbGxvY2F0b3IpCit7CisgICAgQVNTRVJU
KHNpemUgPT0gc2l6ZW9mKE5vZGUpKTsKKyAgICByZXR1cm4gYWxsb2NhdG9yLmFsbG9jYXRlKCk7
Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdf
SklUKQorCisjZW5kaWYgLy8gREZHTm9kZUFsbG9jYXRvcl9oCisKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHTm9kZUl0ZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlSXRlcmF0b3IuaAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZUl0ZXJhdG9yLmgJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsMTUwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpZm5kZWYgREZHTm9kZUl0ZXJhdG9yX2gKKyNkZWZpbmUgREZHTm9kZUl0ZXJhdG9yX2gK
KworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNp
bmNsdWRlICJERkdHcmFwaC5oIgorI2luY2x1ZGUgIkRGR0luc2VydGlvblNldC5oIgorCituYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK2NsYXNzIE5vZGVJdGVyYXRvcjsKKworY2xh
c3MgTm9kZUl0ZXJhdGlvbkNvbnRleHQgeworcHVibGljOgorICAgIE5vZGVJdGVyYXRpb25Db250
ZXh0KEdyYXBoJiBncmFwaCkKKyAgICAgICAgOiBtX2dyYXBoKGdyYXBoKQorICAgICAgICAsIG1f
aXRlcmF0b3IoMCkKKyAgICB7CisgICAgfQorICAgIAorICAgIE5vZGVJdGVyYXRvciogaXRlcmF0
b3IoKSB7IHJldHVybiAqbV9pdGVyYXRvcjsgfQorICAgIAorcHJpdmF0ZToKKyAgICBmcmllbmQg
Y2xhc3MgTm9kZUl0ZXJhdG9yOworICAgIAorICAgIEdyYXBoJiBtX2dyYXBoOworICAgIEluc2Vy
dGlvblNldDxOb2RlKj4gbV9pbnNlcnRpb25TZXQ7CisgICAgTm9kZUl0ZXJhdG9yKiBtX2l0ZXJh
dG9yOworfTsKKworY2xhc3MgTm9kZUl0ZXJhdG9yIHsKK3B1YmxpYzoKKyAgICBOb2RlSXRlcmF0
b3IoTm9kZUl0ZXJhdGlvbkNvbnRleHQmIGNvbnRleHQsIEJhc2ljQmxvY2sqIGJsb2NrKQorICAg
ICAgICA6IG1fY29udGV4dChjb250ZXh0KQorICAgICAgICAsIG1fYmxvY2soYmxvY2spCisgICAg
ICAgICwgbV9pbmRleEluQmxvY2soMCkKKyAgICB7CisgICAgICAgIGNvbnRleHQubV9pdGVyYXRv
ciA9IHRoaXM7CisgICAgfQorICAgIAorICAgIH5Ob2RlSXRlcmF0b3IoKQorICAgIHsKKyAgICAg
ICAgbV9pbnNlcnRpb25TZXQuZXhlY3V0ZSgqbV9ibG9jayk7CisgICAgfQorICAgIAorICAgIGJv
b2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4gbV9pbmRleEluQmxvY2sgPj0gbV9ibG9jay0+
c2l6ZSgpOyB9CisgICAgdm9pZCBvcGVyYXRvcisrKCkgeyBtX2luZGV4SW5CbG9jaysrOyB9CisK
KyAgICBCYXNpY0Jsb2NrKiBibG9jaygpIHsgcmV0dXJuIG1fYmxvY2s7IH0KKyAgICB1bnNpZ25l
ZCBpbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1faW5kZXhJbkJsb2NrOyB9CisgICAgTm9kZSogbm9k
ZSgpIHsgcmV0dXJuIG1fYmxvY2stPmF0KG1faW5kZXhJbkJsb2NrKTsgfQorICAgIAorICAgIElu
c2VydGlvblNldDxOb2RlKj4mIGluc2VydGlvblNldCgpIHsgcmV0dXJuIG1fY29udGV4dC5tX2lu
c2VydGlvblNldDsgfQorICAgIAorICAgIE5vZGUqIGluc2VydChjb25zdCBOb2RlJiBvdGhlcikK
KyAgICB7CisgICAgICAgIE5vZGUqIG5vZGUgPSBuZXcgKG1fY29udGV4dC5tX2dyYXBoLm1fYWxs
b2NhdG9yKSBOb2RlKG90aGVyKTsKKyAgICAgICAgbV9jb250ZXh0Lm1faW5zZXJ0aW9uU2V0LmFw
cGVuZChtX2luZGV4SW5CbG9jaywgbV9jb250ZXh0Lm1fZ3JhcGgucmVmKG5vZGUpKTsKKyAgICAg
ICAgcmV0dXJuIG5vZGU7CisgICAgfQorICAgIAorICAgIE5vZGUqIGluc2VydChOb2RlVHlwZSBv
cCwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luKQorICAgIHsKKyAgICAgICAgTm9kZSogbm9kZSA9IG5l
dyAobV9jb250ZXh0Lm1fZ3JhcGgubV9hbGxvY2F0b3IpIE5vZGUob3AsIGNvZGVPcmlnaW4pOwor
ICAgICAgICBtX2NvbnRleHQubV9pbnNlcnRpb25TZXQuYXBwZW5kKG1faW5kZXhJbkJsb2NrLCBt
X2NvbnRleHQubV9ncmFwaC5yZWYobm9kZSkpOworICAgICAgICByZXR1cm4gbm9kZTsKKyAgICB9
CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIE5vZGUqIGluc2VydChOb2RlVHlwZSBv
cCwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBjb25zdCBUJiB2YWx1ZSkKKyAgICB7CisgICAgICAg
IE5vZGUqIG5vZGUgPSBuZXcgKG1fY29udGV4dC5tX2dyYXBoLm1fYWxsb2NhdG9yKSBOb2RlKG9w
LCBjb2RlT3JpZ2luLCB2YWx1ZSk7CisgICAgICAgIG1fY29udGV4dC5tX2luc2VydGlvblNldC5h
cHBlbmQobV9pbmRleEluQmxvY2ssIG1fY29udGV4dC5tX2dyYXBoLnJlZihub2RlKSk7CisgICAg
ICAgIHJldHVybiBub2RlOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQxLCB0eXBl
bmFtZSBUMj4KKyAgICBOb2RlKiBpbnNlcnQoTm9kZVR5cGUgb3AsIENvZGVPcmlnaW4gY29kZU9y
aWdpbiwgY29uc3QgVDEmIHZhbHVlMSwgY29uc3QgVDImIHZhbHVlMikKKyAgICB7CisgICAgICAg
IE5vZGUqIG5vZGUgPSBuZXcgKG1fY29udGV4dC5tX2dyYXBoLm1fYWxsb2NhdG9yKSBOb2RlKG9w
LCBjb2RlT3JpZ2luLCB2YWx1ZTEsIHZhbHVlMik7CisgICAgICAgIG1fY29udGV4dC5tX2luc2Vy
dGlvblNldC5hcHBlbmQobV9pbmRleEluQmxvY2ssIG1fY29udGV4dC5tX2dyYXBoLnJlZihub2Rl
KSk7CisgICAgICAgIHJldHVybiBub2RlOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1l
IFQxLCB0eXBlbmFtZSBUMiwgdHlwZW5hbWUgVDM+CisgICAgTm9kZSogaW5zZXJ0KE5vZGVUeXBl
IG9wLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIGNvbnN0IFQxJiB2YWx1ZTEsIGNvbnN0IFQyJiB2
YWx1ZTIsIGNvbnN0IFQzJiB2YWx1ZTMpCisgICAgeworICAgICAgICBOb2RlKiBub2RlID0gbmV3
IChtX2NvbnRleHQubV9ncmFwaC5tX2FsbG9jYXRvcikgTm9kZShvcCwgY29kZU9yaWdpbiwgdmFs
dWUxLCB2YWx1ZTIsIHZhbHVlMyk7CisgICAgICAgIG1fY29udGV4dC5tX2luc2VydGlvblNldC5h
cHBlbmQobV9pbmRleEluQmxvY2ssIG1fY29udGV4dC5tX2dyYXBoLnJlZihub2RlKSk7CisgICAg
ICAgIHJldHVybiBub2RlOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQxLCB0eXBl
bmFtZSBUMiwgdHlwZW5hbWUgVDMsIHR5cGVuYW1lIFQ0PgorICAgIE5vZGUqIGluc2VydChOb2Rl
VHlwZSBvcCwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBjb25zdCBUMSYgdmFsdWUxLCBjb25zdCBU
MiYgdmFsdWUyLCBjb25zdCBUMyYgdmFsdWUzLCBjb25zdCBUNCYgdmFsdWU0KQorICAgIHsKKyAg
ICAgICAgTm9kZSogbm9kZSA9IG5ldyAobV9jb250ZXh0Lm1fZ3JhcGgubV9hbGxvY2F0b3IpIE5v
ZGUob3AsIGNvZGVPcmlnaW4sIHZhbHVlMSwgdmFsdWUyLCB2YWx1ZTMsIHZhbHVlNCk7CisgICAg
ICAgIG1fY29udGV4dC5tX2luc2VydGlvblNldC5hcHBlbmQobV9pbmRleEluQmxvY2ssIG1fY29u
dGV4dC5tX2dyYXBoLnJlZihub2RlKSk7CisgICAgICAgIHJldHVybiBub2RlOworICAgIH0KKwor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQxLCB0eXBlbmFtZSBUMiwgdHlwZW5hbWUgVDMsIHR5cGVu
YW1lIFQ0LCB0eXBlbmFtZSBUNT4KKyAgICBOb2RlKiBpbnNlcnQoTm9kZVR5cGUgb3AsIENvZGVP
cmlnaW4gY29kZU9yaWdpbiwgY29uc3QgVDEmIHZhbHVlMSwgY29uc3QgVDImIHZhbHVlMiwgY29u
c3QgVDMmIHZhbHVlMywgY29uc3QgVDQmIHZhbHVlNCwgY29uc3QgVDUmIHZhbHVlNSkKKyAgICB7
CisgICAgICAgIE5vZGUqIG5vZGUgPSBuZXcgKG1fY29udGV4dC5tX2dyYXBoLm1fYWxsb2NhdG9y
KSBOb2RlKG9wLCBjb2RlT3JpZ2luLCB2YWx1ZTEsIHZhbHVlMiwgdmFsdWUzLCB2YWx1ZTQsIHZh
bHVlNSk7CisgICAgICAgIG1fY29udGV4dC5tX2luc2VydGlvblNldC5hcHBlbmQobV9pbmRleElu
QmxvY2ssIG1fY29udGV4dC5tX2dyYXBoLnJlZihub2RlKSk7CisgICAgICAgIHJldHVybiBub2Rl
OworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQxLCB0eXBlbmFtZSBUMiwgdHlwZW5h
bWUgVDMsIHR5cGVuYW1lIFQ0LCB0eXBlbmFtZSBUNSwgdHlwZW5hbWUgVDY+CisgICAgTm9kZSog
aW5zZXJ0KE5vZGVUeXBlIG9wLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIGNvbnN0IFQxJiB2YWx1
ZTEsIGNvbnN0IFQyJiB2YWx1ZTIsIGNvbnN0IFQzJiB2YWx1ZTMsIGNvbnN0IFQ0JiB2YWx1ZTQs
IGNvbnN0IFQ1JiB2YWx1ZTUsIGNvbnN0IFQ2JiB2YWx1ZTYpCisgICAgeworICAgICAgICBOb2Rl
KiBub2RlID0gbmV3IChtX2NvbnRleHQubV9ncmFwaC5tX2FsbG9jYXRvcikgTm9kZShvcCwgY29k
ZU9yaWdpbiwgdmFsdWUxLCB2YWx1ZTIsIHZhbHVlMywgdmFsdWU0LCB2YWx1ZTUsIHZhbHVlNik7
CisgICAgICAgIG1fY29udGV4dC5tX2luc2VydGlvblNldC5hcHBlbmQobV9pbmRleEluQmxvY2ss
IG1fY29udGV4dC5tX2dyYXBoLnJlZihub2RlKSk7CisgICAgICAgIHJldHVybiBub2RlOworICAg
IH0KK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShE
RkdfSklUKQorCisjZW5kaWYgLy8gREZHTm9kZUl0ZXJhdG9yX2gKKwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdQaGFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHUGhhc2UuaAkocmV2aXNpb24gMTQwMTAyKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdQaGFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3IEBA
CiAKICNpbmNsdWRlICJERkdDb21tb24uaCIKICNpbmNsdWRlICJERkdHcmFwaC5oIgorI2luY2x1
ZGUgIkRGR05vZGVJdGVyYXRvci5oIgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7
CiAKQEAgLTM5LDYgKzQwLDcgQEAgY2xhc3MgUGhhc2UgewogcHVibGljOgogICAgIFBoYXNlKEdy
YXBoJiBncmFwaCwgY29uc3QgY2hhciogbmFtZSkKICAgICAgICAgOiBtX2dyYXBoKGdyYXBoKQor
ICAgICAgICAsIG1fY29udGV4dChncmFwaCkKICAgICAgICAgLCBtX25hbWUobmFtZSkKICAgICB7
CiAgICAgICAgIGJlZ2luUGhhc2UoKTsKQEAgLTU2LDYgKzU4LDcgQEAgcHVibGljOgogcHJvdGVj
dGVkOgogICAgIC8vIFRoaW5ncyB5b3UgbmVlZCB0byBoYXZlIGEgREZHIGNvbXBpbGVyIHBoYXNl
LgogICAgIEdyYXBoJiBtX2dyYXBoOworICAgIE5vZGVJdGVyYXRpb25Db250ZXh0IG1fY29udGV4
dDsKICAgICAKICAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEoKSB7IHJldHVybiBtX2dyYXBo
Lm1fZ2xvYmFsRGF0YTsgfQogICAgIENvZGVCbG9jayogY29kZUJsb2NrKCkgeyByZXR1cm4gbV9n
cmFwaC5tX2NvZGVCbG9jazsgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQ
cmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAJKHJldmlzaW9u
IDE0MDEwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3Bh
Z2F0aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMSwgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTIsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC04NSw3NSArODUsNzMg
QEAgcHVibGljOgogcHJpdmF0ZToKICAgICBib29sIHNldFByZWRpY3Rpb24oU3BlY3VsYXRlZFR5
cGUgcHJlZGljdGlvbikKICAgICB7Ci0gICAgICAgIEFTU0VSVChtX2dyYXBoW21fY29tcGlsZUlu
ZGV4XS5oYXNSZXN1bHQoKSk7CisgICAgICAgIEFTU0VSVChtX2N1cnJlbnROb2RlLT5oYXNSZXN1
bHQoKSk7CiAgICAgICAgIAogICAgICAgICAvLyBzZXRQcmVkaWN0aW9uKCkgaXMgdXNlZCB3aGVu
IHdlIGtub3cgdGhhdCB0aGVyZSBpcyBubyB3YXkgdGhhdCB3ZSBjYW4gY2hhbmdlCiAgICAgICAg
IC8vIG91ciBtaW5kcyBhYm91dCB3aGF0IHRoZSBwcmVkaWN0aW9uIGlzIGdvaW5nIHRvIGJlLiBU
aGVyZSBpcyBubyBzZW1hbnRpYwogICAgICAgICAvLyBkaWZmZXJlbmNlIGJldHdlZW4gc2V0UHJl
ZGljdGlvbigpIGFuZCBtZXJnZVNwZWN1bGF0aW9uKCkgb3RoZXIgdGhhbiB0aGUKICAgICAgICAg
Ly8gaW5jcmVhc2VkIGNoZWNraW5nIHRvIHZhbGlkYXRlIHRoaXMgcHJvcGVydHkuCi0gICAgICAg
IEFTU0VSVChtX2dyYXBoW21fY29tcGlsZUluZGV4XS5wcmVkaWN0aW9uKCkgPT0gU3BlY05vbmUg
fHwgbV9ncmFwaFttX2NvbXBpbGVJbmRleF0ucHJlZGljdGlvbigpID09IHByZWRpY3Rpb24pOwor
ICAgICAgICBBU1NFUlQobV9jdXJyZW50Tm9kZS0+cHJlZGljdGlvbigpID09IFNwZWNOb25lIHx8
IG1fY3VycmVudE5vZGUtPnByZWRpY3Rpb24oKSA9PSBwcmVkaWN0aW9uKTsKICAgICAgICAgCi0g
ICAgICAgIHJldHVybiBtX2dyYXBoW21fY29tcGlsZUluZGV4XS5wcmVkaWN0KHByZWRpY3Rpb24p
OworICAgICAgICByZXR1cm4gbV9jdXJyZW50Tm9kZS0+cHJlZGljdChwcmVkaWN0aW9uKTsKICAg
ICB9CiAgICAgCiAgICAgYm9vbCBtZXJnZVByZWRpY3Rpb24oU3BlY3VsYXRlZFR5cGUgcHJlZGlj
dGlvbikKICAgICB7Ci0gICAgICAgIEFTU0VSVChtX2dyYXBoW21fY29tcGlsZUluZGV4XS5oYXNS
ZXN1bHQoKSk7CisgICAgICAgIEFTU0VSVChtX2N1cnJlbnROb2RlLT5oYXNSZXN1bHQoKSk7CiAg
ICAgICAgIAotICAgICAgICByZXR1cm4gbV9ncmFwaFttX2NvbXBpbGVJbmRleF0ucHJlZGljdChw
cmVkaWN0aW9uKTsKKyAgICAgICAgcmV0dXJuIG1fY3VycmVudE5vZGUtPnByZWRpY3QocHJlZGlj
dGlvbik7CiAgICAgfQogICAgIAotICAgIGJvb2wgaXNOb3ROZWdaZXJvKE5vZGVJbmRleCBub2Rl
SW5kZXgpCisgICAgYm9vbCBpc05vdE5lZ1plcm8oTm9kZSogbm9kZSkKICAgICB7Ci0gICAgICAg
IGlmICghbV9ncmFwaC5pc051bWJlckNvbnN0YW50KG5vZGVJbmRleCkpCisgICAgICAgIGlmICgh
bV9ncmFwaC5pc051bWJlckNvbnN0YW50KG5vZGUpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICBkb3VibGUgdmFsdWUgPSBtX2dyYXBoLnZhbHVlT2ZOdW1iZXJDb25zdGFudChu
b2RlSW5kZXgpOworICAgICAgICBkb3VibGUgdmFsdWUgPSBtX2dyYXBoLnZhbHVlT2ZOdW1iZXJD
b25zdGFudChub2RlKTsKICAgICAgICAgcmV0dXJuICF2YWx1ZSAmJiAxLjAgLyB2YWx1ZSA8IDAu
MDsKICAgICB9CiAgICAgCi0gICAgYm9vbCBpc05vdFplcm8oTm9kZUluZGV4IG5vZGVJbmRleCkK
KyAgICBib29sIGlzTm90WmVybyhOb2RlKiBub2RlKQogICAgIHsKLSAgICAgICAgaWYgKCFtX2dy
YXBoLmlzTnVtYmVyQ29uc3RhbnQobm9kZUluZGV4KSkKKyAgICAgICAgaWYgKCFtX2dyYXBoLmlz
TnVtYmVyQ29uc3RhbnQobm9kZSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAg
IHJldHVybiAhIW1fZ3JhcGgudmFsdWVPZk51bWJlckNvbnN0YW50KG5vZGVJbmRleCk7CisgICAg
ICAgIHJldHVybiAhIW1fZ3JhcGgudmFsdWVPZk51bWJlckNvbnN0YW50KG5vZGUpOwogICAgIH0K
ICAgICAKLSAgICBib29sIGlzV2l0aGluUG93ZXJPZlR3b0ZvckNvbnN0YW50KE5vZGUmIG5vZGUs
IGludCBwb3dlcikKKyAgICBib29sIGlzV2l0aGluUG93ZXJPZlR3b0ZvckNvbnN0YW50KE5vZGUq
IG5vZGUsIGludCBwb3dlcikKICAgICB7Ci0gICAgICAgIEpTVmFsdWUgaW1tZWRpYXRlVmFsdWUg
PSBub2RlLnZhbHVlT2ZKU0NvbnN0YW50KGNvZGVCbG9jaygpKTsKKyAgICAgICAgSlNWYWx1ZSBp
bW1lZGlhdGVWYWx1ZSA9IG5vZGUtPnZhbHVlT2ZKU0NvbnN0YW50KGNvZGVCbG9jaygpKTsKICAg
ICAgICAgaWYgKCFpbW1lZGlhdGVWYWx1ZS5pc0ludDMyKCkpCiAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgICAgIGludDMyX3QgaW50SW1tZWRpYXRlID0gaW1tZWRpYXRlVmFsdWUuYXNJ
bnQzMigpOwogICAgICAgICByZXR1cm4gaW50SW1tZWRpYXRlID4gLSgxIDw8IHBvd2VyKSAmJiBp
bnRJbW1lZGlhdGUgPCAoMSA8PCBwb3dlcik7CiAgICAgfQogICAgIAotICAgIGJvb2wgaXNXaXRo
aW5Qb3dlck9mVHdvTm9uUmVjdXJzaXZlKE5vZGVJbmRleCBub2RlSW5kZXgsIGludCBwb3dlcikK
KyAgICBib29sIGlzV2l0aGluUG93ZXJPZlR3b05vblJlY3Vyc2l2ZShOb2RlKiBub2RlLCBpbnQg
cG93ZXIpCiAgICAgewotICAgICAgICBOb2RlJiBub2RlID0gbV9ncmFwaFtub2RlSW5kZXhdOwot
ICAgICAgICBpZiAobm9kZS5vcCgpICE9IEpTQ29uc3RhbnQpCisgICAgICAgIGlmIChub2RlLT5v
cCgpICE9IEpTQ29uc3RhbnQpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIHJl
dHVybiBpc1dpdGhpblBvd2VyT2ZUd29Gb3JDb25zdGFudChub2RlLCBwb3dlcik7CiAgICAgfQog
ICAgIAotICAgIGJvb2wgaXNXaXRoaW5Qb3dlck9mVHdvKE5vZGVJbmRleCBub2RlSW5kZXgsIGlu
dCBwb3dlcikKKyAgICBib29sIGlzV2l0aGluUG93ZXJPZlR3byhOb2RlKiBub2RlLCBpbnQgcG93
ZXIpCiAgICAgewotICAgICAgICBOb2RlJiBub2RlID0gbV9ncmFwaFtub2RlSW5kZXhdOwotICAg
ICAgICBzd2l0Y2ggKG5vZGUub3AoKSkgeworICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsK
ICAgICAgICAgY2FzZSBKU0NvbnN0YW50OiB7CiAgICAgICAgICAgICByZXR1cm4gaXNXaXRoaW5Q
b3dlck9mVHdvRm9yQ29uc3RhbnQobm9kZSwgcG93ZXIpOwogICAgICAgICB9CiAgICAgICAgICAg
ICAKICAgICAgICAgY2FzZSBCaXRBbmQ6IHsKLSAgICAgICAgICAgIHJldHVybiBpc1dpdGhpblBv
d2VyT2ZUd29Ob25SZWN1cnNpdmUobm9kZS5jaGlsZDEoKS5pbmRleCgpLCBwb3dlcikKLSAgICAg
ICAgICAgICAgICB8fCBpc1dpdGhpblBvd2VyT2ZUd29Ob25SZWN1cnNpdmUobm9kZS5jaGlsZDIo
KS5pbmRleCgpLCBwb3dlcik7CisgICAgICAgICAgICByZXR1cm4gaXNXaXRoaW5Qb3dlck9mVHdv
Tm9uUmVjdXJzaXZlKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgcG93ZXIpCisgICAgICAgICAgICAg
ICAgfHwgaXNXaXRoaW5Qb3dlck9mVHdvTm9uUmVjdXJzaXZlKG5vZGUtPmNoaWxkMigpLm5vZGUo
KSwgcG93ZXIpOwogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBCaXRSU2hp
ZnQ6CiAgICAgICAgIGNhc2UgQml0VVJTaGlmdDogewotICAgICAgICAgICAgTm9kZSYgc2hpZnRB
bW91bnQgPSBtX2dyYXBoW25vZGUuY2hpbGQyKCldOwotICAgICAgICAgICAgaWYgKHNoaWZ0QW1v
dW50Lm9wKCkgIT0gSlNDb25zdGFudCkKKyAgICAgICAgICAgIE5vZGUqIHNoaWZ0QW1vdW50ID0g
bm9kZS0+Y2hpbGQyKCkubm9kZSgpOworICAgICAgICAgICAgaWYgKHNoaWZ0QW1vdW50LT5vcCgp
ICE9IEpTQ29uc3RhbnQpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAg
ICAgSlNWYWx1ZSBpbW1lZGlhdGVWYWx1ZSA9IHNoaWZ0QW1vdW50LnZhbHVlT2ZKU0NvbnN0YW50
KGNvZGVCbG9jaygpKTsKKyAgICAgICAgICAgIEpTVmFsdWUgaW1tZWRpYXRlVmFsdWUgPSBzaGlm
dEFtb3VudC0+dmFsdWVPZkpTQ29uc3RhbnQoY29kZUJsb2NrKCkpOwogICAgICAgICAgICAgaWYg
KCFpbW1lZGlhdGVWYWx1ZS5pc0ludDMyKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgICAgICAgICAgcmV0dXJuIGltbWVkaWF0ZVZhbHVlID4gMzIgLSBwb3dlcjsKQEAgLTE3
OCwxNiArMTc2LDE2IEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiBzcGVjdWxhdGVkRG91Ymxl
VHlwZUZvclByZWRpY3Rpb24obWVyZ2VTcGVjdWxhdGlvbnMobGVmdCwgcmlnaHQpKTsKICAgICB9
CiAKLSAgICB2b2lkIHByb3BhZ2F0ZShOb2RlJiBub2RlKQorICAgIHZvaWQgcHJvcGFnYXRlKE5v
ZGUqIG5vZGUpCiAgICAgewotICAgICAgICBpZiAoIW5vZGUuc2hvdWxkR2VuZXJhdGUoKSkKKyAg
ICAgICAgaWYgKCFub2RlLT5zaG91bGRHZW5lcmF0ZSgpKQogICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICAKLSAgICAgICAgTm9kZVR5cGUgb3AgPSBub2RlLm9wKCk7Ci0gICAgICAgIE5vZGVG
bGFncyBmbGFncyA9IG5vZGUuZmxhZ3MoKSAmIE5vZGVCYWNrUHJvcE1hc2s7CisgICAgICAgIE5v
ZGVUeXBlIG9wID0gbm9kZS0+b3AoKTsKKyAgICAgICAgTm9kZUZsYWdzIGZsYWdzID0gbm9kZS0+
ZmxhZ3MoKSAmIE5vZGVCYWNrUHJvcE1hc2s7CiAKICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BB
R0FUSU9OX1ZFUkJPU0UpCi0gICAgICAgIGRhdGFMb2dGKCIgICAlcyBAJXU6ICVzICIsIEdyYXBo
OjpvcE5hbWUob3ApLCBtX2NvbXBpbGVJbmRleCwgbm9kZUZsYWdzQXNTdHJpbmcoZmxhZ3MpKTsK
KyAgICAgICAgZGF0YUxvZygiICAgIiwgR3JhcGg6Om9wTmFtZShvcCksICIgIiwgbV9jdXJyZW50
Tm9kZSwgIjogIiwgbm9kZUZsYWdzQXNTdHJpbmcoZmxhZ3MpLCAiICIpOwogI2VuZGlmCiAgICAg
ICAgIAogICAgICAgICBib29sIGNoYW5nZWQgPSBmYWxzZTsKQEAgLTE5NSwxMiArMTkzLDEyIEBA
IHByaXZhdGU6CiAgICAgICAgIHN3aXRjaCAob3ApIHsKICAgICAgICAgY2FzZSBKU0NvbnN0YW50
OgogICAgICAgICBjYXNlIFdlYWtKU0NvbnN0YW50OiB7Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9
IHNldFByZWRpY3Rpb24oc3BlY3VsYXRpb25Gcm9tVmFsdWUobV9ncmFwaC52YWx1ZU9mSlNDb25z
dGFudChtX2NvbXBpbGVJbmRleCkpKTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gc2V0UHJlZGlj
dGlvbihzcGVjdWxhdGlvbkZyb21WYWx1ZShtX2dyYXBoLnZhbHVlT2ZKU0NvbnN0YW50KG5vZGUp
KSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAg
IGNhc2UgR2V0TG9jYWw6IHsKLSAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFi
bGVBY2Nlc3NEYXRhID0gbm9kZS52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKKyAgICAgICAgICAgIFZh
cmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhID0gbm9kZS0+dmFyaWFibGVBY2Nl
c3NEYXRhKCk7CiAgICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uID0gdmFyaWFi
bGVBY2Nlc3NEYXRhLT5wcmVkaWN0aW9uKCk7CiAgICAgICAgICAgICBpZiAocHJlZGljdGlvbikK
ICAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbihwcmVkaWN0aW9uKTsK
QEAgLTIxMCwyMSArMjA4LDIxIEBAIHByaXZhdGU6CiAgICAgICAgIH0KICAgICAgICAgICAgIAog
ICAgICAgICBjYXNlIFNldExvY2FsOiB7Ci0gICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEq
IHZhcmlhYmxlQWNjZXNzRGF0YSA9IG5vZGUudmFyaWFibGVBY2Nlc3NEYXRhKCk7Ci0gICAgICAg
ICAgICBjaGFuZ2VkIHw9IHZhcmlhYmxlQWNjZXNzRGF0YS0+cHJlZGljdChtX2dyYXBoW25vZGUu
Y2hpbGQxKCldLnByZWRpY3Rpb24oKSk7CisgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEq
IHZhcmlhYmxlQWNjZXNzRGF0YSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOworICAgICAg
ICAgICAgY2hhbmdlZCB8PSB2YXJpYWJsZUFjY2Vzc0RhdGEtPnByZWRpY3Qobm9kZS0+Y2hpbGQx
KCktPnByZWRpY3Rpb24oKSk7CiAKICAgICAgICAgICAgIC8vIEFzc3VtZSBjb25zZXJ2YXRpdmVs
eSB0aGF0IGEgU2V0TG9jYWwgaW1wbGllcyB0aGF0IHRoZSB2YWx1ZSBtYXkgZmxvdyB0aHJvdWdo
IGEgbG9vcCwKICAgICAgICAgICAgIC8vIGFuZCBzbyB3ZSB3b3VsZCBoYXZlIG92ZXJmbG93IGxl
YWRpbmcgdG8gdGhlIHByb2dyYW0gIm9ic2VydmluZyIgbnVtYmVycyBldmVuIGlmIGFsbAogICAg
ICAgICAgICAgLy8gdXNlcnMgb2YgdGhlIHZhbHVlIGFyZSBkb2luZyB0b0ludDMyLiBJdCBtaWdo
dCBiZSB3b3J0aHdoaWxlIHRvIHJldmlzaXQgdGhpcyBhdCBzb21lCiAgICAgICAgICAgICAvLyBw
b2ludCBhbmQgYWN0dWFsbHkgY2hlY2sgaWYgdGhlIGRhdGEgZmxvdyBpbnZvbHZlcyBsb29wcywg
YnV0IHJpZ2h0IG5vdyBJIGRvbid0IHRoaW5rCiAgICAgICAgICAgICAvLyB3ZSBoYXZlIGV2aWRl
bmNlIHRoYXQgdGhpcyB3b3VsZCBiZSBiZW5lZmljaWFsIGZvciBiZW5jaG1hcmtzLgotICAgICAg
ICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLm1lcmdlRmxhZ3ModmFyaWFi
bGVBY2Nlc3NEYXRhLT5mbGFncygpIHwgTm9kZVVzZWRBc051bWJlcik7CisgICAgICAgICAgICBj
aGFuZ2VkIHw9IG5vZGUtPmNoaWxkMSgpLT5tZXJnZUZsYWdzKHZhcmlhYmxlQWNjZXNzRGF0YS0+
ZmxhZ3MoKSB8IE5vZGVVc2VkQXNOdW1iZXIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IH0KICAgICAgICAgICAgIAogICAgICAgICBjYXNlIEZsdXNoOiB7CiAgICAgICAgICAgICAvLyBN
YWtlIHN1cmUgdGhhdCB0aGUgYW5hbHlzaXMga25vd3MgdGhhdCBmbHVzaGVkIGxvY2FscyBlc2Nh
cGUuCi0gICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9
IG5vZGUudmFyaWFibGVBY2Nlc3NEYXRhKCk7CisgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0Rh
dGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOwogICAg
ICAgICAgICAgY2hhbmdlZCB8PSB2YXJpYWJsZUFjY2Vzc0RhdGEtPm1lcmdlRmxhZ3MoTm9kZVVz
ZWRBc1ZhbHVlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkBAIC0yMzgsOCArMjM2
LDggQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGNoYW5nZWQgfD0gc2V0UHJlZGljdGlvbihTcGVj
SW50MzIpOwogICAgICAgICAgICAgZmxhZ3MgfD0gTm9kZVVzZWRBc0ludCB8IE5vZGVVc2VkQXNJ
bnRMb2NhbGx5OwogICAgICAgICAgICAgZmxhZ3MgJj0gfihOb2RlVXNlZEFzTnVtYmVyIHwgTm9k
ZU5lZWRzTmVnWmVybyB8IE5vZGVVc2VkQXNPdGhlcik7Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9
IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ubWVyZ2VGbGFncyhmbGFncyk7Ci0gICAgICAgICAgICBj
aGFuZ2VkIHw9IG1fZ3JhcGhbbm9kZS5jaGlsZDIoKV0ubWVyZ2VGbGFncyhmbGFncyk7CisgICAg
ICAgICAgICBjaGFuZ2VkIHw9IG5vZGUtPmNoaWxkMSgpLT5tZXJnZUZsYWdzKGZsYWdzKTsKKyAg
ICAgICAgICAgIGNoYW5nZWQgfD0gbm9kZS0+Y2hpbGQyKCktPm1lcmdlRmxhZ3MoZmxhZ3MpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIApAQCAtMjQ3LDUwICsy
NDUsNTAgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGNoYW5nZWQgfD0gc2V0UHJlZGljdGlvbihT
cGVjSW50MzIpOwogICAgICAgICAgICAgZmxhZ3MgfD0gTm9kZVVzZWRBc0ludCB8IE5vZGVVc2Vk
QXNJbnRMb2NhbGx5OwogICAgICAgICAgICAgZmxhZ3MgJj0gfihOb2RlVXNlZEFzTnVtYmVyIHwg
Tm9kZU5lZWRzTmVnWmVybyB8IE5vZGVVc2VkQXNPdGhlcik7Ci0gICAgICAgICAgICBjaGFuZ2Vk
IHw9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ubWVyZ2VGbGFncyhmbGFncyk7CisgICAgICAgICAg
ICBjaGFuZ2VkIHw9IG5vZGUtPmNoaWxkMSgpLT5tZXJnZUZsYWdzKGZsYWdzKTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBBcnJheVBv
cDogewotICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVByZWRpY3Rpb24obm9kZS5nZXRIZWFw
UHJlZGljdGlvbigpKTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKG5v
ZGUtPmdldEhlYXBQcmVkaWN0aW9uKCkpOwogICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZURl
ZmF1bHRGbGFncyhub2RlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKICAgICAg
ICAgY2FzZSBBcnJheVB1c2g6IHsKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0
aW9uKG5vZGUuZ2V0SGVhcFByZWRpY3Rpb24oKSk7Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IG1f
Z3JhcGhbbm9kZS5jaGlsZDEoKV0ubWVyZ2VGbGFncyhOb2RlVXNlZEFzVmFsdWUpOwotICAgICAg
ICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQyKCldLm1lcmdlRmxhZ3MoTm9kZVVz
ZWRBc1ZhbHVlKTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKG5vZGUt
PmdldEhlYXBQcmVkaWN0aW9uKCkpOworICAgICAgICAgICAgY2hhbmdlZCB8PSBub2RlLT5jaGls
ZDEoKS0+bWVyZ2VGbGFncyhOb2RlVXNlZEFzVmFsdWUpOworICAgICAgICAgICAgY2hhbmdlZCB8
PSBub2RlLT5jaGlsZDIoKS0+bWVyZ2VGbGFncyhOb2RlVXNlZEFzVmFsdWUpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIFJlZ0V4cEV4ZWM6CiAgICAgICAg
IGNhc2UgUmVnRXhwVGVzdDogewotICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVByZWRpY3Rp
b24obm9kZS5nZXRIZWFwUHJlZGljdGlvbigpKTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVy
Z2VQcmVkaWN0aW9uKG5vZGUtPmdldEhlYXBQcmVkaWN0aW9uKCkpOwogICAgICAgICAgICAgY2hh
bmdlZCB8PSBtZXJnZURlZmF1bHRGbGFncyhub2RlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICB9CiAKICAgICAgICAgY2FzZSBTdHJpbmdDaGFyQ29kZUF0OiB7CiAgICAgICAgICAgICBj
aGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbihTcGVjSW50MzIpOwotICAgICAgICAgICAgY2hhbmdl
ZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLm1lcmdlRmxhZ3MoTm9kZVVzZWRBc1ZhbHVlKTsK
LSAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaFtub2RlLmNoaWxkMigpXS5tZXJnZUZsYWdz
KE5vZGVVc2VkQXNOdW1iZXIgfCBOb2RlVXNlZEFzT3RoZXIgfCBOb2RlVXNlZEFzSW50IHwgTm9k
ZVVzZWRBc0ludExvY2FsbHkpOworICAgICAgICAgICAgY2hhbmdlZCB8PSBub2RlLT5jaGlsZDEo
KS0+bWVyZ2VGbGFncyhOb2RlVXNlZEFzVmFsdWUpOworICAgICAgICAgICAgY2hhbmdlZCB8PSBu
b2RlLT5jaGlsZDIoKS0+bWVyZ2VGbGFncyhOb2RlVXNlZEFzTnVtYmVyIHwgTm9kZVVzZWRBc090
aGVyIHwgTm9kZVVzZWRBc0ludCB8IE5vZGVVc2VkQXNJbnRMb2NhbGx5KTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBVSW50MzJUb051bWJlcjogewotICAg
ICAgICAgICAgaWYgKG5vZGVDYW5TcGVjdWxhdGVJbnRlZ2VyKG5vZGUuYXJpdGhOb2RlRmxhZ3Mo
KSkpCisgICAgICAgICAgICBpZiAobm9kZUNhblNwZWN1bGF0ZUludGVnZXIobm9kZS0+YXJpdGhO
b2RlRmxhZ3MoKSkpCiAgICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVByZWRpY3Rpb24o
U3BlY0ludDMyKTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9
IG1lcmdlUHJlZGljdGlvbihTcGVjTnVtYmVyKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAg
Y2hhbmdlZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLm1lcmdlRmxhZ3MoZmxhZ3MpOworICAg
ICAgICAgICAgY2hhbmdlZCB8PSBub2RlLT5jaGlsZDEoKS0+bWVyZ2VGbGFncyhmbGFncyk7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCiAgICAgICAgIGNhc2UgVmFsdWVBZGQ6IHsK
LSAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIGxlZnQgPSBtX2dyYXBoW25vZGUuY2hpbGQxKCld
LnByZWRpY3Rpb24oKTsKLSAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHJpZ2h0ID0gbV9ncmFw
aFtub2RlLmNoaWxkMigpXS5wcmVkaWN0aW9uKCk7CisgICAgICAgICAgICBTcGVjdWxhdGVkVHlw
ZSBsZWZ0ID0gbm9kZS0+Y2hpbGQxKCktPnByZWRpY3Rpb24oKTsKKyAgICAgICAgICAgIFNwZWN1
bGF0ZWRUeXBlIHJpZ2h0ID0gbm9kZS0+Y2hpbGQyKCktPnByZWRpY3Rpb24oKTsKICAgICAgICAg
ICAgIAogICAgICAgICAgICAgQWRkU3BlY3VsYXRpb25Nb2RlIG1vZGUgPSBEb250U3BlY3VsYXRl
SW50ZWdlcjsKICAgICAgICAgICAgIApAQCAtMzA3LDIyICszMDUsMjIgQEAgcHJpdmF0ZToKICAg
ICAgICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVByZWRpY3Rpb24oU3BlY1N0cmluZyB8
IFNwZWNJbnQzMiB8IFNwZWNEb3VibGUpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgCi0g
ICAgICAgICAgICBpZiAoaXNOb3ROZWdaZXJvKG5vZGUuY2hpbGQxKCkuaW5kZXgoKSkgfHwgaXNO
b3ROZWdaZXJvKG5vZGUuY2hpbGQyKCkuaW5kZXgoKSkpCisgICAgICAgICAgICBpZiAoaXNOb3RO
ZWdaZXJvKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSkgfHwgaXNOb3ROZWdaZXJvKG5vZGUtPmNoaWxk
MigpLm5vZGUoKSkpCiAgICAgICAgICAgICAgICAgZmxhZ3MgJj0gfk5vZGVOZWVkc05lZ1plcm87
Ci0gICAgICAgICAgICBpZiAobV9ncmFwaFtub2RlLmNoaWxkMSgpXS5oYXNOdW1iZXJSZXN1bHQo
KSB8fCBtX2dyYXBoW25vZGUuY2hpbGQyKCldLmhhc051bWJlclJlc3VsdCgpKQorICAgICAgICAg
ICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5oYXNOdW1iZXJSZXN1bHQoKSB8fCBub2RlLT5jaGlsZDIo
KS0+aGFzTnVtYmVyUmVzdWx0KCkpCiAgICAgICAgICAgICAgICAgZmxhZ3MgJj0gfk5vZGVVc2Vk
QXNPdGhlcjsKICAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKG1vZGUgIT0gU3BlY3VsYXRl
SW50ZWdlcikKICAgICAgICAgICAgICAgICBmbGFncyB8PSBOb2RlVXNlZEFzTnVtYmVyOwogICAg
ICAgICAgICAgCi0gICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0u
bWVyZ2VGbGFncyhmbGFncyk7Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbm9kZS5j
aGlsZDIoKV0ubWVyZ2VGbGFncyhmbGFncyk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG5vZGUt
PmNoaWxkMSgpLT5tZXJnZUZsYWdzKGZsYWdzKTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbm9k
ZS0+Y2hpbGQyKCktPm1lcmdlRmxhZ3MoZmxhZ3MpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBjYXNlIEFyaXRoQWRkOiB7Ci0gICAgICAgICAg
ICBTcGVjdWxhdGVkVHlwZSBsZWZ0ID0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5wcmVkaWN0aW9u
KCk7Ci0gICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSByaWdodCA9IG1fZ3JhcGhbbm9kZS5jaGls
ZDIoKV0ucHJlZGljdGlvbigpOworICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgbGVmdCA9IG5v
ZGUtPmNoaWxkMSgpLT5wcmVkaWN0aW9uKCk7CisgICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSBy
aWdodCA9IG5vZGUtPmNoaWxkMigpLT5wcmVkaWN0aW9uKCk7CiAgICAgICAgICAgICAKICAgICAg
ICAgICAgIEFkZFNwZWN1bGF0aW9uTW9kZSBtb2RlID0gRG9udFNwZWN1bGF0ZUludGVnZXI7CiAg
ICAgICAgICAgICAKQEAgLTMzMywyMSArMzMxLDIxIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAg
ICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKHNwZWN1bGF0ZWREb3VibGVUeXBlRm9y
UHJlZGljdGlvbnMobGVmdCwgcmlnaHQpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAot
ICAgICAgICAgICAgaWYgKGlzTm90TmVnWmVybyhub2RlLmNoaWxkMSgpLmluZGV4KCkpIHx8IGlz
Tm90TmVnWmVybyhub2RlLmNoaWxkMigpLmluZGV4KCkpKQorICAgICAgICAgICAgaWYgKGlzTm90
TmVnWmVybyhub2RlLT5jaGlsZDEoKS5ub2RlKCkpIHx8IGlzTm90TmVnWmVybyhub2RlLT5jaGls
ZDIoKS5ub2RlKCkpKQogICAgICAgICAgICAgICAgIGZsYWdzICY9IH5Ob2RlTmVlZHNOZWdaZXJv
OwogICAgICAgICAgICAgZmxhZ3MgJj0gfk5vZGVVc2VkQXNPdGhlcjsKICAgICAgICAgICAgIAog
ICAgICAgICAgICAgaWYgKG1vZGUgIT0gU3BlY3VsYXRlSW50ZWdlcikKICAgICAgICAgICAgICAg
ICBmbGFncyB8PSBOb2RlVXNlZEFzTnVtYmVyOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBj
aGFuZ2VkIHw9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ubWVyZ2VGbGFncyhmbGFncyk7Ci0gICAg
ICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbm9kZS5jaGlsZDIoKV0ubWVyZ2VGbGFncyhmbGFn
cyk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG5vZGUtPmNoaWxkMSgpLT5tZXJnZUZsYWdzKGZs
YWdzKTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbm9kZS0+Y2hpbGQyKCktPm1lcmdlRmxhZ3Mo
ZmxhZ3MpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAg
ICAgICBjYXNlIEFyaXRoU3ViOiB7Ci0gICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSBsZWZ0ID0g
bV9ncmFwaFtub2RlLmNoaWxkMSgpXS5wcmVkaWN0aW9uKCk7Ci0gICAgICAgICAgICBTcGVjdWxh
dGVkVHlwZSByaWdodCA9IG1fZ3JhcGhbbm9kZS5jaGlsZDIoKV0ucHJlZGljdGlvbigpOworICAg
ICAgICAgICAgU3BlY3VsYXRlZFR5cGUgbGVmdCA9IG5vZGUtPmNoaWxkMSgpLT5wcmVkaWN0aW9u
KCk7CisgICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSByaWdodCA9IG5vZGUtPmNoaWxkMigpLT5w
cmVkaWN0aW9uKCk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIEFkZFNwZWN1bGF0aW9uTW9k
ZSBtb2RlID0gRG9udFNwZWN1bGF0ZUludGVnZXI7CiAgICAgICAgICAgICAKQEAgLTM1OCwzOSAr
MzU2LDM5IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VQ
cmVkaWN0aW9uKHNwZWN1bGF0ZWREb3VibGVUeXBlRm9yUHJlZGljdGlvbnMobGVmdCwgcmlnaHQp
KTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgaWYgKGlzTm90WmVybyhub2RlLmNoaWxk
MSgpLmluZGV4KCkpIHx8IGlzTm90WmVybyhub2RlLmNoaWxkMigpLmluZGV4KCkpKQorICAgICAg
ICAgICAgaWYgKGlzTm90WmVybyhub2RlLT5jaGlsZDEoKS5ub2RlKCkpIHx8IGlzTm90WmVybyhu
b2RlLT5jaGlsZDIoKS5ub2RlKCkpKQogICAgICAgICAgICAgICAgIGZsYWdzICY9IH5Ob2RlTmVl
ZHNOZWdaZXJvOwogICAgICAgICAgICAgZmxhZ3MgJj0gfk5vZGVVc2VkQXNPdGhlcjsKICAgICAg
ICAgICAgIAogICAgICAgICAgICAgaWYgKG1vZGUgIT0gU3BlY3VsYXRlSW50ZWdlcikKICAgICAg
ICAgICAgICAgICBmbGFncyB8PSBOb2RlVXNlZEFzTnVtYmVyOwogICAgICAgICAgICAgCi0gICAg
ICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ubWVyZ2VGbGFncyhmbGFn
cyk7Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbm9kZS5jaGlsZDIoKV0ubWVyZ2VG
bGFncyhmbGFncyk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG5vZGUtPmNoaWxkMSgpLT5tZXJn
ZUZsYWdzKGZsYWdzKTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbm9kZS0+Y2hpbGQyKCktPm1l
cmdlRmxhZ3MoZmxhZ3MpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAg
ICAgIAogICAgICAgICBjYXNlIEFyaXRoTmVnYXRlOgotICAgICAgICAgICAgaWYgKG1fZ3JhcGhb
bm9kZS5jaGlsZDEoKV0ucHJlZGljdGlvbigpKSB7CisgICAgICAgICAgICBpZiAobm9kZS0+Y2hp
bGQxKCktPnByZWRpY3Rpb24oKSkgewogICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLm5lZ2F0
ZVNob3VsZFNwZWN1bGF0ZUludGVnZXIobm9kZSkpCiAgICAgICAgICAgICAgICAgICAgIGNoYW5n
ZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKFNwZWNJbnQzMik7CiAgICAgICAgICAgICAgICAgZWxzZQot
ICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbihzcGVjdWxhdGVk
RG91YmxlVHlwZUZvclByZWRpY3Rpb24obV9ncmFwaFtub2RlLmNoaWxkMSgpXS5wcmVkaWN0aW9u
KCkpKTsKKyAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVByZWRpY3Rpb24oc3Bl
Y3VsYXRlZERvdWJsZVR5cGVGb3JQcmVkaWN0aW9uKG5vZGUtPmNoaWxkMSgpLT5wcmVkaWN0aW9u
KCkpKTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgZmxhZ3MgJj0gfk5vZGVVc2VkQXNP
dGhlcjsKIAotICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLm1l
cmdlRmxhZ3MoZmxhZ3MpOworICAgICAgICAgICAgY2hhbmdlZCB8PSBub2RlLT5jaGlsZDEoKS0+
bWVyZ2VGbGFncyhmbGFncyk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAg
ICAgICBjYXNlIEFyaXRoTWluOgogICAgICAgICBjYXNlIEFyaXRoTWF4OiB7Ci0gICAgICAgICAg
ICBTcGVjdWxhdGVkVHlwZSBsZWZ0ID0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5wcmVkaWN0aW9u
KCk7Ci0gICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSByaWdodCA9IG1fZ3JhcGhbbm9kZS5jaGls
ZDIoKV0ucHJlZGljdGlvbigpOworICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgbGVmdCA9IG5v
ZGUtPmNoaWxkMSgpLT5wcmVkaWN0aW9uKCk7CisgICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSBy
aWdodCA9IG5vZGUtPmNoaWxkMigpLT5wcmVkaWN0aW9uKCk7CiAgICAgICAgICAgICAKICAgICAg
ICAgICAgIGlmIChsZWZ0ICYmIHJpZ2h0KSB7Ci0gICAgICAgICAgICAgICAgaWYgKE5vZGU6OnNo
b3VsZFNwZWN1bGF0ZUludGVnZXJGb3JBcml0aG1ldGljKG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0s
IG1fZ3JhcGhbbm9kZS5jaGlsZDIoKV0pCi0gICAgICAgICAgICAgICAgICAgICYmIG5vZGVDYW5T
cGVjdWxhdGVJbnRlZ2VyKG5vZGUuYXJpdGhOb2RlRmxhZ3MoKSkpCisgICAgICAgICAgICAgICAg
aWYgKE5vZGU6OnNob3VsZFNwZWN1bGF0ZUludGVnZXJGb3JBcml0aG1ldGljKG5vZGUtPmNoaWxk
MSgpLm5vZGUoKSwgbm9kZS0+Y2hpbGQyKCkubm9kZSgpKQorICAgICAgICAgICAgICAgICAgICAm
JiBub2RlQ2FuU3BlY3VsYXRlSW50ZWdlcihub2RlLT5hcml0aE5vZGVGbGFncygpKSkKICAgICAg
ICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVByZWRpY3Rpb24oU3BlY0ludDMyKTsKICAg
ICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VQ
cmVkaWN0aW9uKHNwZWN1bGF0ZWREb3VibGVUeXBlRm9yUHJlZGljdGlvbnMobGVmdCwgcmlnaHQp
KTsKQEAgLTM5OSwxNCArMzk3LDE0IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBmbGFncyB8PSBO
b2RlVXNlZEFzTnVtYmVyOwogICAgICAgICAgICAgZmxhZ3MgJj0gfk5vZGVVc2VkQXNPdGhlcjsK
IAotICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLm1lcmdlRmxh
Z3MoZmxhZ3MpOwotICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQyKCld
Lm1lcmdlRmxhZ3MoZmxhZ3MpOworICAgICAgICAgICAgY2hhbmdlZCB8PSBub2RlLT5jaGlsZDEo
KS0+bWVyZ2VGbGFncyhmbGFncyk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG5vZGUtPmNoaWxk
MigpLT5tZXJnZUZsYWdzKGZsYWdzKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAK
ICAgICAgICAgY2FzZSBBcml0aE11bDogewotICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgbGVm
dCA9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ucHJlZGljdGlvbigpOwotICAgICAgICAgICAgU3Bl
Y3VsYXRlZFR5cGUgcmlnaHQgPSBtX2dyYXBoW25vZGUuY2hpbGQyKCldLnByZWRpY3Rpb24oKTsK
KyAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIGxlZnQgPSBub2RlLT5jaGlsZDEoKS0+cHJlZGlj
dGlvbigpOworICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgcmlnaHQgPSBub2RlLT5jaGlsZDIo
KS0+cHJlZGljdGlvbigpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAobGVmdCAmJiBy
aWdodCkgewogICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLm11bFNob3VsZFNwZWN1bGF0ZUlu
dGVnZXIobm9kZSkpCkBAIC00MjIsOCArNDIwLDggQEAgcHJpdmF0ZToKICAgICAgICAgICAgIC8v
IGl0c2VsZiB1bmxlc3Mgd2UgY2FuIHByb3ZlIHRoYXQgdGhlcmUgaXMgbm8gd2F5IGZvciB0aGUg
dmFsdWVzCiAgICAgICAgICAgICAvLyBwcm9kdWNlZCB0byBjYXVzZSBkb3VibGUgcm91bmRpbmcu
CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGlmICghaXNXaXRoaW5Qb3dlck9mVHdvKG5vZGUu
Y2hpbGQxKCkuaW5kZXgoKSwgMjIpCi0gICAgICAgICAgICAgICAgJiYgIWlzV2l0aGluUG93ZXJP
ZlR3byhub2RlLmNoaWxkMigpLmluZGV4KCksIDIyKSkKKyAgICAgICAgICAgIGlmICghaXNXaXRo
aW5Qb3dlck9mVHdvKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgMjIpCisgICAgICAgICAgICAgICAg
JiYgIWlzV2l0aGluUG93ZXJPZlR3byhub2RlLT5jaGlsZDIoKS5ub2RlKCksIDIyKSkKICAgICAg
ICAgICAgICAgICBmbGFncyB8PSBOb2RlVXNlZEFzTnVtYmVyOwogICAgICAgICAgICAgCiAgICAg
ICAgICAgICBjaGFuZ2VkIHw9IG5vZGUubWVyZ2VGbGFncyhmbGFncyk7CkBAIC00MzEsMTggKzQy
OSwxOCBAQCBwcml2YXRlOgogICAgICAgICAgICAgZmxhZ3MgfD0gTm9kZVVzZWRBc051bWJlciB8
IE5vZGVOZWVkc05lZ1plcm87CiAgICAgICAgICAgICBmbGFncyAmPSB+Tm9kZVVzZWRBc090aGVy
OwogCi0gICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ubWVyZ2VG
bGFncyhmbGFncyk7Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbm9kZS5jaGlsZDIo
KV0ubWVyZ2VGbGFncyhmbGFncyk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG5vZGUtPmNoaWxk
MSgpLT5tZXJnZUZsYWdzKGZsYWdzKTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbm9kZS0+Y2hp
bGQyKCktPm1lcmdlRmxhZ3MoZmxhZ3MpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0K
ICAgICAgICAgICAgIAogICAgICAgICBjYXNlIEFyaXRoRGl2OiB7Ci0gICAgICAgICAgICBTcGVj
dWxhdGVkVHlwZSBsZWZ0ID0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5wcmVkaWN0aW9uKCk7Ci0g
ICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSByaWdodCA9IG1fZ3JhcGhbbm9kZS5jaGlsZDIoKV0u
cHJlZGljdGlvbigpOworICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgbGVmdCA9IG5vZGUtPmNo
aWxkMSgpLT5wcmVkaWN0aW9uKCk7CisgICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSByaWdodCA9
IG5vZGUtPmNoaWxkMigpLT5wcmVkaWN0aW9uKCk7CiAgICAgICAgICAgICAKICAgICAgICAgICAg
IGlmIChsZWZ0ICYmIHJpZ2h0KSB7Ci0gICAgICAgICAgICAgICAgaWYgKE5vZGU6OnNob3VsZFNw
ZWN1bGF0ZUludGVnZXJGb3JBcml0aG1ldGljKG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0sIG1fZ3Jh
cGhbbm9kZS5jaGlsZDIoKV0pCi0gICAgICAgICAgICAgICAgICAgICYmIG5vZGVDYW5TcGVjdWxh
dGVJbnRlZ2VyKG5vZGUuYXJpdGhOb2RlRmxhZ3MoKSkpCisgICAgICAgICAgICAgICAgaWYgKE5v
ZGU6OnNob3VsZFNwZWN1bGF0ZUludGVnZXJGb3JBcml0aG1ldGljKG5vZGUtPmNoaWxkMSgpLm5v
ZGUoKSwgbm9kZS0+Y2hpbGQyKCkubm9kZSgpKQorICAgICAgICAgICAgICAgICAgICAmJiBub2Rl
Q2FuU3BlY3VsYXRlSW50ZWdlcihub2RlLT5hcml0aE5vZGVGbGFncygpKSkKICAgICAgICAgICAg
ICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVByZWRpY3Rpb24oU3BlY0ludDMyKTsKICAgICAgICAg
ICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0
aW9uKFNwZWNEb3VibGUpOwpAQCAtNDU2LDE4ICs0NTQsMTggQEAgcHJpdmF0ZToKICAgICAgICAg
ICAgIGZsYWdzIHw9IE5vZGVVc2VkQXNOdW1iZXIgfCBOb2RlTmVlZHNOZWdaZXJvOwogICAgICAg
ICAgICAgZmxhZ3MgJj0gfk5vZGVVc2VkQXNPdGhlcjsKIAotICAgICAgICAgICAgY2hhbmdlZCB8
PSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLm1lcmdlRmxhZ3MoZmxhZ3MpOwotICAgICAgICAgICAg
Y2hhbmdlZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQyKCldLm1lcmdlRmxhZ3MoZmxhZ3MpOworICAg
ICAgICAgICAgY2hhbmdlZCB8PSBub2RlLT5jaGlsZDEoKS0+bWVyZ2VGbGFncyhmbGFncyk7Cisg
ICAgICAgICAgICBjaGFuZ2VkIHw9IG5vZGUtPmNoaWxkMigpLT5tZXJnZUZsYWdzKGZsYWdzKTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2Fz
ZSBBcml0aE1vZDogewotICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgbGVmdCA9IG1fZ3JhcGhb
bm9kZS5jaGlsZDEoKV0ucHJlZGljdGlvbigpOwotICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUg
cmlnaHQgPSBtX2dyYXBoW25vZGUuY2hpbGQyKCldLnByZWRpY3Rpb24oKTsKKyAgICAgICAgICAg
IFNwZWN1bGF0ZWRUeXBlIGxlZnQgPSBub2RlLT5jaGlsZDEoKS0+cHJlZGljdGlvbigpOworICAg
ICAgICAgICAgU3BlY3VsYXRlZFR5cGUgcmlnaHQgPSBub2RlLT5jaGlsZDIoKS0+cHJlZGljdGlv
bigpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAobGVmdCAmJiByaWdodCkgewotICAg
ICAgICAgICAgICAgIGlmIChOb2RlOjpzaG91bGRTcGVjdWxhdGVJbnRlZ2VyRm9yQXJpdGhtZXRp
YyhtX2dyYXBoW25vZGUuY2hpbGQxKCldLCBtX2dyYXBoW25vZGUuY2hpbGQyKCldKQotICAgICAg
ICAgICAgICAgICAgICAmJiBub2RlQ2FuU3BlY3VsYXRlSW50ZWdlcihub2RlLmFyaXRoTm9kZUZs
YWdzKCkpKQorICAgICAgICAgICAgICAgIGlmIChOb2RlOjpzaG91bGRTcGVjdWxhdGVJbnRlZ2Vy
Rm9yQXJpdGhtZXRpYyhub2RlLT5jaGlsZDEoKS5ub2RlKCksIG5vZGUtPmNoaWxkMigpLm5vZGUo
KSkKKyAgICAgICAgICAgICAgICAgICAgJiYgbm9kZUNhblNwZWN1bGF0ZUludGVnZXIobm9kZS0+
YXJpdGhOb2RlRmxhZ3MoKSkpCiAgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VQ
cmVkaWN0aW9uKFNwZWNJbnQzMik7CiAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAg
ICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbihTcGVjRG91YmxlKTsKQEAgLTQ3Niw4
ICs0NzQsOCBAQCBwcml2YXRlOgogICAgICAgICAgICAgZmxhZ3MgfD0gTm9kZVVzZWRBc051bWJl
ciB8IE5vZGVOZWVkc05lZ1plcm87CiAgICAgICAgICAgICBmbGFncyAmPSB+Tm9kZVVzZWRBc090
aGVyOwogCi0gICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ubWVy
Z2VGbGFncyhmbGFncyk7Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbm9kZS5jaGls
ZDIoKV0ubWVyZ2VGbGFncyhmbGFncyk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG5vZGUtPmNo
aWxkMSgpLT5tZXJnZUZsYWdzKGZsYWdzKTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbm9kZS0+
Y2hpbGQyKCktPm1lcmdlRmxhZ3MoZmxhZ3MpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IH0KICAgICAgICAgICAgIApAQCAtNDg1LDE5ICs0ODMsMTkgQEAgcHJpdmF0ZToKICAgICAgICAg
ICAgIGNoYW5nZWQgfD0gc2V0UHJlZGljdGlvbihTcGVjRG91YmxlKTsKICAgICAgICAgICAgIGZs
YWdzIHw9IE5vZGVVc2VkQXNOdW1iZXIgfCBOb2RlTmVlZHNOZWdaZXJvOwogICAgICAgICAgICAg
ZmxhZ3MgJj0gfk5vZGVVc2VkQXNPdGhlcjsKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFw
aFtub2RlLmNoaWxkMSgpXS5tZXJnZUZsYWdzKGZsYWdzKTsKKyAgICAgICAgICAgIGNoYW5nZWQg
fD0gbm9kZS0+Y2hpbGQxKCktPm1lcmdlRmxhZ3MoZmxhZ3MpOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBjYXNlIEFyaXRoQWJzOiB7Ci0gICAg
ICAgICAgICBTcGVjdWxhdGVkVHlwZSBjaGlsZCA9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ucHJl
ZGljdGlvbigpOworICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgY2hpbGQgPSBub2RlLT5jaGls
ZDEoKS0+cHJlZGljdGlvbigpOwogICAgICAgICAgICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbkZv
ckFyaXRobWV0aWMoY2hpbGQpCi0gICAgICAgICAgICAgICAgJiYgbm9kZUNhblNwZWN1bGF0ZUlu
dGVnZXIobm9kZS5hcml0aE5vZGVGbGFncygpKSkKKyAgICAgICAgICAgICAgICAmJiBub2RlQ2Fu
U3BlY3VsYXRlSW50ZWdlcihub2RlLT5hcml0aE5vZGVGbGFncygpKSkKICAgICAgICAgICAgICAg
ICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbihTcGVjSW50MzIpOwogICAgICAgICAgICAgZWxz
ZQogICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKHNwZWN1bGF0ZWRE
b3VibGVUeXBlRm9yUHJlZGljdGlvbihjaGlsZCkpOwogCi0gICAgICAgICAgICBjaGFuZ2VkIHw9
IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ubWVyZ2VGbGFncyhmbGFncyk7CisgICAgICAgICAgICBj
aGFuZ2VkIHw9IG5vZGUtPmNoaWxkMSgpLT5tZXJnZUZsYWdzKGZsYWdzKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKQEAgLTUyNywzMSArNTI1LDMxIEBAIHBy
aXZhdGU6CiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIEdldEJ5SWQ6IHsKLSAgICAgICAgICAg
IGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKG5vZGUuZ2V0SGVhcFByZWRpY3Rpb24oKSk7Cisg
ICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbihub2RlLT5nZXRIZWFwUHJlZGlj
dGlvbigpKTsKICAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VEZWZhdWx0RmxhZ3Mobm9kZSk7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgIGNh
c2UgR2V0QnlJZEZsdXNoOgotICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVByZWRpY3Rpb24o
bm9kZS5nZXRIZWFwUHJlZGljdGlvbigpKTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VQ
cmVkaWN0aW9uKG5vZGUtPmdldEhlYXBQcmVkaWN0aW9uKCkpOwogICAgICAgICAgICAgY2hhbmdl
ZCB8PSBtZXJnZURlZmF1bHRGbGFncyhub2RlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgCiAgICAgICAgIGNhc2UgR2V0QnlWYWw6IHsKLSAgICAgICAgICAgIGlmIChtX2dyYXBo
W25vZGUuY2hpbGQxKCldLnNob3VsZFNwZWN1bGF0ZUZsb2F0MzJBcnJheSgpCi0gICAgICAgICAg
ICAgICAgfHwgbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5zaG91bGRTcGVjdWxhdGVGbG9hdDY0QXJy
YXkoKSkKKyAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlRmxv
YXQzMkFycmF5KCkKKyAgICAgICAgICAgICAgICB8fCBub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3Bl
Y3VsYXRlRmxvYXQ2NEFycmF5KCkpCiAgICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVBy
ZWRpY3Rpb24oU3BlY0RvdWJsZSk7CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAg
Y2hhbmdlZCB8PSBtZXJnZVByZWRpY3Rpb24obm9kZS5nZXRIZWFwUHJlZGljdGlvbigpKTsKIAot
ICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLm1lcmdlRmxhZ3Mo
Tm9kZVVzZWRBc1ZhbHVlKTsKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaFtub2RlLmNo
aWxkMigpXS5tZXJnZUZsYWdzKE5vZGVVc2VkQXNOdW1iZXIgfCBOb2RlVXNlZEFzT3RoZXIgfCBO
b2RlVXNlZEFzSW50IHwgTm9kZVVzZWRBc0ludExvY2FsbHkpOworICAgICAgICAgICAgY2hhbmdl
ZCB8PSBub2RlLT5jaGlsZDEoKS0+bWVyZ2VGbGFncyhOb2RlVXNlZEFzVmFsdWUpOworICAgICAg
ICAgICAgY2hhbmdlZCB8PSBub2RlLT5jaGlsZDIoKS0+bWVyZ2VGbGFncyhOb2RlVXNlZEFzTnVt
YmVyIHwgTm9kZVVzZWRBc090aGVyIHwgTm9kZVVzZWRBc0ludCB8IE5vZGVVc2VkQXNJbnRMb2Nh
bGx5KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAg
ICAgY2FzZSBHZXRNeUFyZ3VtZW50QnlWYWxTYWZlOiB7Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9
IG1lcmdlUHJlZGljdGlvbihub2RlLmdldEhlYXBQcmVkaWN0aW9uKCkpOwotICAgICAgICAgICAg
Y2hhbmdlZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLm1lcmdlRmxhZ3MoTm9kZVVzZWRBc051
bWJlciB8IE5vZGVVc2VkQXNPdGhlciB8IE5vZGVVc2VkQXNJbnQgfCBOb2RlVXNlZEFzSW50TG9j
YWxseSk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbihub2RlLT5nZXRI
ZWFwUHJlZGljdGlvbigpKTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbm9kZS0+Y2hpbGQxKCkt
Pm1lcmdlRmxhZ3MoTm9kZVVzZWRBc051bWJlciB8IE5vZGVVc2VkQXNPdGhlciB8IE5vZGVVc2Vk
QXNJbnQgfCBOb2RlVXNlZEFzSW50TG9jYWxseSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgfQogICAgICAgICAgICAgCkBAIC01NzEsMjUgKzU2OSwyMyBAQCBwcml2YXRlOgogICAgICAg
ICB9CiAKICAgICAgICAgY2FzZSBHZXRCeU9mZnNldDogewotICAgICAgICAgICAgY2hhbmdlZCB8
PSBtZXJnZVByZWRpY3Rpb24obm9kZS5nZXRIZWFwUHJlZGljdGlvbigpKTsKKyAgICAgICAgICAg
IGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKG5vZGUtPmdldEhlYXBQcmVkaWN0aW9uKCkpOwog
ICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZURlZmF1bHRGbGFncyhub2RlKTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBDYWxsOgog
ICAgICAgICBjYXNlIENvbnN0cnVjdDogewotICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVBy
ZWRpY3Rpb24obm9kZS5nZXRIZWFwUHJlZGljdGlvbigpKTsKLSAgICAgICAgICAgIGZvciAodW5z
aWduZWQgY2hpbGRJZHggPSBub2RlLmZpcnN0Q2hpbGQoKTsKLSAgICAgICAgICAgICAgICAgY2hp
bGRJZHggPCBub2RlLmZpcnN0Q2hpbGQoKSArIG5vZGUubnVtQ2hpbGRyZW4oKTsKLSAgICAgICAg
ICAgICAgICAgKytjaGlsZElkeCkgewotICAgICAgICAgICAgICAgIEVkZ2UgZWRnZSA9IG1fZ3Jh
cGgubV92YXJBcmdDaGlsZHJlbltjaGlsZElkeF07Ci0gICAgICAgICAgICAgICAgY2hhbmdlZCB8
PSBtX2dyYXBoW2VkZ2VdLm1lcmdlRmxhZ3MoTm9kZVVzZWRBc1ZhbHVlKTsKLSAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKG5vZGUtPmdldEhlYXBQ
cmVkaWN0aW9uKCkpOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBjaGlsZElkeCA9IG5vZGUt
PmZpcnN0Q2hpbGQoKTsKKyAgICAgICAgICAgICAgICAgY2hpbGRJZHggPCBub2RlLT5maXJzdENo
aWxkKCkgKyBub2RlLT5udW1DaGlsZHJlbigpOworICAgICAgICAgICAgICAgICArK2NoaWxkSWR4
KQorICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaC5tX3ZhckFyZ0NoaWxkcmVuW2No
aWxkSWR4XS0+bWVyZ2VGbGFncyhOb2RlVXNlZEFzVmFsdWUpOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBjYXNlIENvbnZlcnRUaGlzOiB7Ci0g
ICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uID0gbV9ncmFwaFtub2RlLmNoaWxk
MSgpXS5wcmVkaWN0aW9uKCk7CisgICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9u
ID0gbm9kZS0+Y2hpbGQxKCktPnByZWRpY3Rpb24oKTsKICAgICAgICAgICAgIGlmIChwcmVkaWN0
aW9uKSB7CiAgICAgICAgICAgICAgICAgaWYgKHByZWRpY3Rpb24gJiB+U3BlY09iamVjdE1hc2sp
IHsKICAgICAgICAgICAgICAgICAgICAgcHJlZGljdGlvbiAmPSBTcGVjT2JqZWN0TWFzazsKQEAg
LTYwMiwxMyArNTk4LDEzIEBAIHByaXZhdGU6CiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAg
ICAgICBjYXNlIEdldEdsb2JhbFZhcjogewotICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVBy
ZWRpY3Rpb24obm9kZS5nZXRIZWFwUHJlZGljdGlvbigpKTsKKyAgICAgICAgICAgIGNoYW5nZWQg
fD0gbWVyZ2VQcmVkaWN0aW9uKG5vZGUtPmdldEhlYXBQcmVkaWN0aW9uKCkpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBjYXNlIFB1dEdsb2Jh
bFZhcjoKICAgICAgICAgY2FzZSBQdXRHbG9iYWxWYXJDaGVjazogewotICAgICAgICAgICAgY2hh
bmdlZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLm1lcmdlRmxhZ3MoTm9kZVVzZWRBc1ZhbHVl
KTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbm9kZS0+Y2hpbGQxKCktPm1lcmdlRmxhZ3MoTm9k
ZVVzZWRBc1ZhbHVlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAg
ICAKQEAgLTYxNyw3ICs2MTMsNyBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIFJlc29sdmVCYXNl
OgogICAgICAgICBjYXNlIFJlc29sdmVCYXNlU3RyaWN0UHV0OgogICAgICAgICBjYXNlIFJlc29s
dmVHbG9iYWw6IHsKLSAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24gPSBub2Rl
LmdldEhlYXBQcmVkaWN0aW9uKCk7CisgICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0
aW9uID0gbm9kZS0+Z2V0SGVhcFByZWRpY3Rpb24oKTsKICAgICAgICAgICAgIGNoYW5nZWQgfD0g
bWVyZ2VQcmVkaWN0aW9uKHByZWRpY3Rpb24pOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IH0KQEAgLTY0MywxOCArNjM5LDE2IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAKICAgICAgICAg
Y2FzZSBOZXdBcnJheTogewogICAgICAgICAgICAgY2hhbmdlZCB8PSBzZXRQcmVkaWN0aW9uKFNw
ZWNBcnJheSk7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGNoaWxkSWR4ID0gbm9kZS5maXJz
dENoaWxkKCk7Ci0gICAgICAgICAgICAgICAgIGNoaWxkSWR4IDwgbm9kZS5maXJzdENoaWxkKCkg
KyBub2RlLm51bUNoaWxkcmVuKCk7Ci0gICAgICAgICAgICAgICAgICsrY2hpbGRJZHgpIHsKLSAg
ICAgICAgICAgICAgICBFZGdlIGVkZ2UgPSBtX2dyYXBoLm1fdmFyQXJnQ2hpbGRyZW5bY2hpbGRJ
ZHhdOwotICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaFtlZGdlXS5tZXJnZUZsYWdz
KE5vZGVVc2VkQXNWYWx1ZSk7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGNoaWxkSWR4ID0gbm9kZS0+Zmlyc3RDaGlsZCgpOworICAgICAgICAgICAgICAgICBjaGls
ZElkeCA8IG5vZGUtPmZpcnN0Q2hpbGQoKSArIG5vZGUtPm51bUNoaWxkcmVuKCk7CisgICAgICAg
ICAgICAgICAgICsrY2hpbGRJZHgpCisgICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBo
Lm1fdmFyQXJnQ2hpbGRyZW5bY2hpbGRJZHhdLT5tZXJnZUZsYWdzKE5vZGVVc2VkQXNWYWx1ZSk7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgIGNh
c2UgTmV3QXJyYXlXaXRoU2l6ZTogewogICAgICAgICAgICAgY2hhbmdlZCB8PSBzZXRQcmVkaWN0
aW9uKFNwZWNBcnJheSk7Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbm9kZS5jaGls
ZDEoKV0ubWVyZ2VGbGFncyhOb2RlVXNlZEFzVmFsdWUgfCBOb2RlVXNlZEFzSW50IHwgTm9kZVVz
ZWRBc0ludExvY2FsbHkpOworICAgICAgICAgICAgY2hhbmdlZCB8PSBub2RlLT5jaGlsZDEoKS0+
bWVyZ2VGbGFncyhOb2RlVXNlZEFzVmFsdWUgfCBOb2RlVXNlZEFzSW50IHwgTm9kZVVzZWRBc0lu
dExvY2FsbHkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIApA
QCAtNjcwLDIyICs2NjQsMjIgQEAgcHJpdmF0ZToKICAgICAgICAgCiAgICAgICAgIGNhc2UgU3Ry
aW5nQ2hhckF0OiB7CiAgICAgICAgICAgICBjaGFuZ2VkIHw9IHNldFByZWRpY3Rpb24oU3BlY1N0
cmluZyk7Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ubWVy
Z2VGbGFncyhOb2RlVXNlZEFzVmFsdWUpOwotICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBo
W25vZGUuY2hpbGQyKCldLm1lcmdlRmxhZ3MoTm9kZVVzZWRBc051bWJlciB8IE5vZGVVc2VkQXNP
dGhlciB8IE5vZGVVc2VkQXNJbnQgfCBOb2RlVXNlZEFzSW50TG9jYWxseSk7CisgICAgICAgICAg
ICBjaGFuZ2VkIHw9IG5vZGUtPmNoaWxkMSgpLT5tZXJnZUZsYWdzKE5vZGVVc2VkQXNWYWx1ZSk7
CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG5vZGUtPmNoaWxkMigpLT5tZXJnZUZsYWdzKE5vZGVV
c2VkQXNOdW1iZXIgfCBOb2RlVXNlZEFzT3RoZXIgfCBOb2RlVXNlZEFzSW50IHwgTm9kZVVzZWRB
c0ludExvY2FsbHkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAg
IAogICAgICAgICBjYXNlIFN0ckNhdDogewogICAgICAgICAgICAgY2hhbmdlZCB8PSBzZXRQcmVk
aWN0aW9uKFNwZWNTdHJpbmcpOwotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBjaGlsZElkeCA9
IG5vZGUuZmlyc3RDaGlsZCgpOwotICAgICAgICAgICAgICAgICBjaGlsZElkeCA8IG5vZGUuZmly
c3RDaGlsZCgpICsgbm9kZS5udW1DaGlsZHJlbigpOworICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBjaGlsZElkeCA9IG5vZGUtPmZpcnN0Q2hpbGQoKTsKKyAgICAgICAgICAgICAgICAgY2hpbGRJ
ZHggPCBub2RlLT5maXJzdENoaWxkKCkgKyBub2RlLT5udW1DaGlsZHJlbigpOwogICAgICAgICAg
ICAgICAgICArK2NoaWxkSWR4KQotICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaFtt
X2dyYXBoLm1fdmFyQXJnQ2hpbGRyZW5bY2hpbGRJZHhdXS5tZXJnZUZsYWdzKE5vZGVVc2VkQXNO
dW1iZXIgfCBOb2RlVXNlZEFzT3RoZXIpOworICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9n
cmFwaC5tX3ZhckFyZ0NoaWxkcmVuW2NoaWxkSWR4XS0+bWVyZ2VGbGFncyhOb2RlVXNlZEFzTnVt
YmVyIHwgTm9kZVVzZWRBc090aGVyKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAg
ICAgICAgICAgICAKICAgICAgICAgY2FzZSBUb1ByaW1pdGl2ZTogewotICAgICAgICAgICAgU3Bl
Y3VsYXRlZFR5cGUgY2hpbGQgPSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLnByZWRpY3Rpb24oKTsK
KyAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIGNoaWxkID0gbm9kZS0+Y2hpbGQxKCktPnByZWRp
Y3Rpb24oKTsKICAgICAgICAgICAgIGlmIChjaGlsZCkgewogICAgICAgICAgICAgICAgIGlmIChp
c09iamVjdFNwZWN1bGF0aW9uKGNoaWxkKSkgewogICAgICAgICAgICAgICAgICAgICAvLyBJJ2Qg
bG92ZSB0byBmb2xkIHRoaXMgY2FzZSBpbnRvIHRoZSBjYXNlIGJlbG93LCBidXQgSSBjYW4ndCwg
YmVjYXVzZQpAQCAtNzAyLDcgKzY5Niw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgfSBl
bHNlCiAgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKGNoaWxk
KTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaFtub2RlLmNo
aWxkMSgpXS5tZXJnZUZsYWdzKGZsYWdzKTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbm9kZS0+
Y2hpbGQxKCktPm1lcmdlRmxhZ3MoZmxhZ3MpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IH0KICAgICAgICAgICAgIApAQCAtNzQ1LDQyICs3MzksNDUgQEAgcHJpdmF0ZToKICAgICAgICAg
fQogICAgICAgICAKICAgICAgICAgY2FzZSBQdXRCeVZhbDoKLSAgICAgICAgICAgIGNoYW5nZWQg
fD0gbV9ncmFwaFttX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApXS5tZXJnZUZsYWdzKE5vZGVV
c2VkQXNWYWx1ZSk7Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbV9ncmFwaC52YXJB
cmdDaGlsZChub2RlLCAxKV0ubWVyZ2VGbGFncyhOb2RlVXNlZEFzTnVtYmVyIHwgTm9kZVVzZWRB
c090aGVyIHwgTm9kZVVzZWRBc0ludCB8IE5vZGVVc2VkQXNJbnRMb2NhbGx5KTsKLSAgICAgICAg
ICAgIGNoYW5nZWQgfD0gbV9ncmFwaFttX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpXS5tZXJn
ZUZsYWdzKE5vZGVVc2VkQXNWYWx1ZSk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGgu
dmFyQXJnQ2hpbGQobm9kZSwgMCktPm1lcmdlRmxhZ3MoTm9kZVVzZWRBc1ZhbHVlKTsKKyAgICAg
ICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKS0+bWVyZ2VGbGFn
cyhOb2RlVXNlZEFzTnVtYmVyIHwgTm9kZVVzZWRBc090aGVyIHwgTm9kZVVzZWRBc0ludCB8IE5v
ZGVVc2VkQXNJbnRMb2NhbGx5KTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaC52YXJB
cmdDaGlsZChub2RlLCAyKS0+bWVyZ2VGbGFncyhOb2RlVXNlZEFzVmFsdWUpOwogICAgICAgICAg
ICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSBQdXRTY29wZWRWYXI6Ci0gICAgICAgICAgICBjaGFu
Z2VkIHw9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ubWVyZ2VGbGFncyhOb2RlVXNlZEFzVmFsdWUp
OwotICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQzKCldLm1lcmdlRmxh
Z3MoTm9kZVVzZWRBc1ZhbHVlKTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbm9kZS0+Y2hpbGQx
KCktPm1lcmdlRmxhZ3MoTm9kZVVzZWRBc1ZhbHVlKTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0g
bm9kZS0+Y2hpbGQzKCktPm1lcmdlRmxhZ3MoTm9kZVVzZWRBc1ZhbHVlKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgUmV0dXJuOgogICAgICAgICBjYXNl
IFRocm93OgotICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLm1l
cmdlRmxhZ3MoTm9kZVVzZWRBc1ZhbHVlKTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbm9kZS0+
Y2hpbGQxKCktPm1lcmdlRmxhZ3MoTm9kZVVzZWRBc1ZhbHVlKTsKICAgICAgICAgICAgIGJyZWFr
OwogCiAgICAgICAgIGNhc2UgUHV0QnlJZDoKICAgICAgICAgY2FzZSBQdXRCeUlkRGlyZWN0Ogot
ICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLm1lcmdlRmxhZ3Mo
Tm9kZVVzZWRBc1ZhbHVlKTsKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaFtub2RlLmNo
aWxkMigpXS5tZXJnZUZsYWdzKE5vZGVVc2VkQXNWYWx1ZSk7CisgICAgICAgICAgICBjaGFuZ2Vk
IHw9IG5vZGUtPmNoaWxkMSgpLT5tZXJnZUZsYWdzKE5vZGVVc2VkQXNWYWx1ZSk7CisgICAgICAg
ICAgICBjaGFuZ2VkIHw9IG5vZGUtPmNoaWxkMigpLT5tZXJnZUZsYWdzKE5vZGVVc2VkQXNWYWx1
ZSk7CiAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICBjYXNlIFB1dEJ5T2Zmc2V0OgotICAg
ICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLm1lcmdlRmxhZ3MoTm9k
ZVVzZWRBc1ZhbHVlKTsKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaFtub2RlLmNoaWxk
MygpXS5tZXJnZUZsYWdzKE5vZGVVc2VkQXNWYWx1ZSk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9
IG5vZGUtPmNoaWxkMSgpLT5tZXJnZUZsYWdzKE5vZGVVc2VkQXNWYWx1ZSk7CisgICAgICAgICAg
ICBjaGFuZ2VkIHw9IG5vZGUtPmNoaWxkMygpLT5tZXJnZUZsYWdzKE5vZGVVc2VkQXNWYWx1ZSk7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgICAgICBjYXNlIFBoaToKKyAg
ICAgICAgICAgIC8vIFBoaXMgc2hvdWxkIG5vdCBiZSB2aXNpYmxlIGhlcmUgc2luY2Ugd2UncmUg
aXRlcmF0aW5nIHRoZSBhbGwtYnV0LVBoaSdzCisgICAgICAgICAgICAvLyBwYXJ0IG9mIGJhc2lj
IGJsb2Nrcy4KKyAgICAgICAgICAgIENSQVNIKCk7CiAgICAgICAgICAgICBicmVhazsKIAogICAg
ICAgICBjYXNlIFNldENhbGxlZToKICAgICAgICAgY2FzZSBTZXRNeVNjb3BlOgotICAgICAgICAg
ICAgY2hhbmdlZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLm1lcmdlRmxhZ3MoTm9kZVVzZWRB
c1ZhbHVlKTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbm9kZS0+Y2hpbGQxKCktPm1lcmdlRmxh
Z3MoTm9kZVVzZWRBc1ZhbHVlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAg
ICAgICAgIGNhc2UgR2V0U2NvcGU6Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbm9k
ZS5jaGlsZDEoKV0ubWVyZ2VGbGFncyhOb2RlVXNlZEFzVmFsdWUpOworICAgICAgICAgICAgY2hh
bmdlZCB8PSBub2RlLT5jaGlsZDEoKS0+bWVyZ2VGbGFncyhOb2RlVXNlZEFzVmFsdWUpOwogICAg
ICAgICAgICAgY2hhbmdlZCB8PSBzZXRQcmVkaWN0aW9uKFNwZWNDZWxsT3RoZXIpOwogICAgICAg
ICAgICAgYnJlYWs7CiAKQEAgLTgyOCwzMiArODI1LDMyIEBAIHByaXZhdGU6CiAgICAgICAgIH0K
IAogI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKLSAgICAgICAgZGF0
YUxvZyhTcGVjdWxhdGlvbkR1bXAobV9ncmFwaFttX2NvbXBpbGVJbmRleF0ucHJlZGljdGlvbigp
KSwgIlxuIik7CisgICAgICAgIGRhdGFMb2coU3BlY3VsYXRpb25EdW1wKG5vZGUtPnByZWRpY3Rp
b24oKSksICJcbiIpOwogI2VuZGlmCiAgICAgICAgIAogICAgICAgICBtX2NoYW5nZWQgfD0gY2hh
bmdlZDsKICAgICB9CiAgICAgICAgIAotICAgIGJvb2wgbWVyZ2VEZWZhdWx0RmxhZ3MoTm9kZSYg
bm9kZSkKKyAgICBib29sIG1lcmdlRGVmYXVsdEZsYWdzKE5vZGUqIG5vZGUpCiAgICAgewogICAg
ICAgICBib29sIGNoYW5nZWQgPSBmYWxzZTsKLSAgICAgICAgaWYgKG5vZGUuZmxhZ3MoKSAmIE5v
ZGVIYXNWYXJBcmdzKSB7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGNoaWxkSWR4ID0gbm9k
ZS5maXJzdENoaWxkKCk7Ci0gICAgICAgICAgICAgICAgIGNoaWxkSWR4IDwgbm9kZS5maXJzdENo
aWxkKCkgKyBub2RlLm51bUNoaWxkcmVuKCk7CisgICAgICAgIGlmIChub2RlLT5mbGFncygpICYg
Tm9kZUhhc1ZhckFyZ3MpIHsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgY2hpbGRJZHggPSBu
b2RlLT5maXJzdENoaWxkKCk7CisgICAgICAgICAgICAgICAgIGNoaWxkSWR4IDwgbm9kZS0+Zmly
c3RDaGlsZCgpICsgbm9kZS0+bnVtQ2hpbGRyZW4oKTsKICAgICAgICAgICAgICAgICAgY2hpbGRJ
ZHgrKykgewogICAgICAgICAgICAgICAgIGlmICghIW1fZ3JhcGgubV92YXJBcmdDaGlsZHJlbltj
aGlsZElkeF0pCi0gICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaFttX2dyYXBo
Lm1fdmFyQXJnQ2hpbGRyZW5bY2hpbGRJZHhdXS5tZXJnZUZsYWdzKE5vZGVVc2VkQXNWYWx1ZSk7
CisgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaC5tX3ZhckFyZ0NoaWxkcmVu
W2NoaWxkSWR4XS0+bWVyZ2VGbGFncyhOb2RlVXNlZEFzVmFsdWUpOwogICAgICAgICAgICAgfQog
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaWYgKCFub2RlLmNoaWxkMSgpKQorICAgICAg
ICAgICAgaWYgKCFub2RlLT5jaGlsZDEoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gY2hhbmdl
ZDsKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5tZXJnZUZs
YWdzKE5vZGVVc2VkQXNWYWx1ZSk7Ci0gICAgICAgICAgICBpZiAoIW5vZGUuY2hpbGQyKCkpCisg
ICAgICAgICAgICBjaGFuZ2VkIHw9IG5vZGUtPmNoaWxkMSgpLT5tZXJnZUZsYWdzKE5vZGVVc2Vk
QXNWYWx1ZSk7CisgICAgICAgICAgICBpZiAoIW5vZGUtPmNoaWxkMigpKQogICAgICAgICAgICAg
ICAgIHJldHVybiBjaGFuZ2VkOwotICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW25vZGUu
Y2hpbGQyKCldLm1lcmdlRmxhZ3MoTm9kZVVzZWRBc1ZhbHVlKTsKLSAgICAgICAgICAgIGlmICgh
bm9kZS5jaGlsZDMoKSkKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbm9kZS0+Y2hpbGQyKCktPm1l
cmdlRmxhZ3MoTm9kZVVzZWRBc1ZhbHVlKTsKKyAgICAgICAgICAgIGlmICghbm9kZS0+Y2hpbGQz
KCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGNoYW5nZWQ7Ci0gICAgICAgICAgICBjaGFuZ2Vk
IHw9IG1fZ3JhcGhbbm9kZS5jaGlsZDMoKV0ubWVyZ2VGbGFncyhOb2RlVXNlZEFzVmFsdWUpOwor
ICAgICAgICAgICAgY2hhbmdlZCB8PSBub2RlLT5jaGlsZDMoKS0+bWVyZ2VGbGFncyhOb2RlVXNl
ZEFzVmFsdWUpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBjaGFuZ2VkOwogICAgIH0KQEAg
LTg2Myw4ICs4NjAsMTYgQEAgcHJpdmF0ZToKICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FU
SU9OX1ZFUkJPU0UpCiAgICAgICAgIGRhdGFMb2dGKCJQcm9wYWdhdGluZyBwcmVkaWN0aW9ucyBm
b3J3YXJkIFsldV1cbiIsICsrbV9jb3VudCk7CiAjZW5kaWYKLSAgICAgICAgZm9yIChtX2NvbXBp
bGVJbmRleCA9IDA7IG1fY29tcGlsZUluZGV4IDwgbV9ncmFwaC5zaXplKCk7ICsrbV9jb21waWxl
SW5kZXgpCi0gICAgICAgICAgICBwcm9wYWdhdGUobV9ncmFwaFttX2NvbXBpbGVJbmRleF0pOwor
ICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2dy
YXBoLm1fYmxvY2tzLnNpemUoKTsgKytibG9ja0luZGV4KSB7CisgICAgICAgICAgICBCYXNpY0Js
b2NrKiBibG9jayA9IG1fZ3JhcGgubV9ibG9ja3NbYmxvY2tJbmRleF0uZ2V0KCk7CisgICAgICAg
ICAgICBpZiAoIWJsb2NrKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAg
QVNTRVJUKGJsb2NrLT5pc1JlYWNoYWJsZSk7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgYmxvY2stPnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICAgICAgbV9jdXJyZW50
Tm9kZSA9IGJsb2NrLT5hdChpKTsKKyAgICAgICAgICAgICAgICBwcm9wYWdhdGUobV9jdXJyZW50
Tm9kZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KICAgICB9CiAgICAgCiAgICAgdm9pZCBw
cm9wYWdhdGVCYWNrd2FyZCgpCkBAIC04NzIsMTIzICs4NzcsMTM5IEBAIHByaXZhdGU6CiAjaWYg
REZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQogICAgICAgICBkYXRhTG9nRigi
UHJvcGFnYXRpbmcgcHJlZGljdGlvbnMgYmFja3dhcmQgWyV1XVxuIiwgKyttX2NvdW50KTsKICNl
bmRpZgotICAgICAgICBmb3IgKG1fY29tcGlsZUluZGV4ID0gbV9ncmFwaC5zaXplKCk7IG1fY29t
cGlsZUluZGV4LS0gPiAwOykKLSAgICAgICAgICAgIHByb3BhZ2F0ZShtX2dyYXBoW21fY29tcGls
ZUluZGV4XSk7CisgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gbV9ncmFwaC5t
X2Jsb2Nrcy5zaXplKCk7IGJsb2NrSW5kZXgtLTspIHsKKyAgICAgICAgICAgIEJhc2ljQmxvY2sq
IGJsb2NrID0gbV9ncmFwaC5tX2Jsb2Nrc1tibG9ja0luZGV4XS5nZXQoKTsKKyAgICAgICAgICAg
IGlmICghYmxvY2spCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBBU1NF
UlQoYmxvY2stPmlzUmVhY2hhYmxlKTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGJs
b2NrLT5zaXplKCk7IGktLTspIHsKKyAgICAgICAgICAgICAgICBtX2N1cnJlbnROb2RlID0gYmxv
Y2stPmF0KGkpOworICAgICAgICAgICAgICAgIHByb3BhZ2F0ZShtX2N1cnJlbnROb2RlKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQogICAgIH0KICAgICAKLSAgICB2b2lkIGRvUm91bmRPZkRv
dWJsZVZvdGluZygpCisgICAgdm9pZCBkb0RvdWJsZVZvdGluZyhOb2RlKiBub2RlKQogICAgIHsK
LSNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCi0gICAgICAgIGRhdGFM
b2dGKCJWb3Rpbmcgb24gZG91YmxlIHVzZXMgb2YgbG9jYWxzIFsldV1cbiIsIG1fY291bnQpOwot
I2VuZGlmCi0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2dyYXBoLm1fdmFyaWFi
bGVBY2Nlc3NEYXRhLnNpemUoKTsgKytpKQotICAgICAgICAgICAgbV9ncmFwaC5tX3ZhcmlhYmxl
QWNjZXNzRGF0YVtpXS5maW5kKCktPmNsZWFyVm90ZXMoKTsKLSAgICAgICAgZm9yIChtX2NvbXBp
bGVJbmRleCA9IDA7IG1fY29tcGlsZUluZGV4IDwgbV9ncmFwaC5zaXplKCk7ICsrbV9jb21waWxl
SW5kZXgpIHsKLSAgICAgICAgICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW21fY29tcGlsZUluZGV4
XTsKLSAgICAgICAgICAgIHN3aXRjaCAobm9kZS5vcCgpKSB7Ci0gICAgICAgICAgICBjYXNlIFZh
bHVlQWRkOgotICAgICAgICAgICAgY2FzZSBBcml0aEFkZDoKLSAgICAgICAgICAgIGNhc2UgQXJp
dGhTdWI6IHsKLSAgICAgICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSBsZWZ0ID0gbV9ncmFwaFtu
b2RlLmNoaWxkMSgpXS5wcmVkaWN0aW9uKCk7Ci0gICAgICAgICAgICAgICAgU3BlY3VsYXRlZFR5
cGUgcmlnaHQgPSBtX2dyYXBoW25vZGUuY2hpbGQyKCldLnByZWRpY3Rpb24oKTsKKyAgICAgICAg
c3dpdGNoIChub2RlLT5vcCgpKSB7CisgICAgICAgIGNhc2UgVmFsdWVBZGQ6CisgICAgICAgIGNh
c2UgQXJpdGhBZGQ6CisgICAgICAgIGNhc2UgQXJpdGhTdWI6IHsKKyAgICAgICAgICAgIFNwZWN1
bGF0ZWRUeXBlIGxlZnQgPSBub2RlLT5jaGlsZDEoKS0+cHJlZGljdGlvbigpOworICAgICAgICAg
ICAgU3BlY3VsYXRlZFR5cGUgcmlnaHQgPSBub2RlLT5jaGlsZDIoKS0+cHJlZGljdGlvbigpOwog
ICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIERvdWJsZUJhbGxvdCBiYWxsb3Q7Cisg
ICAgICAgICAgICBEb3VibGVCYWxsb3QgYmFsbG90OwogICAgICAgICAgICAgICAgIAotICAgICAg
ICAgICAgICAgIGlmIChpc051bWJlclNwZWN1bGF0aW9uRXhwZWN0aW5nRGVmaW5lZChsZWZ0KSAm
JiBpc051bWJlclNwZWN1bGF0aW9uRXhwZWN0aW5nRGVmaW5lZChyaWdodCkKLSAgICAgICAgICAg
ICAgICAgICAgJiYgIW1fZ3JhcGguYWRkU2hvdWxkU3BlY3VsYXRlSW50ZWdlcihub2RlKSkKLSAg
ICAgICAgICAgICAgICAgICAgYmFsbG90ID0gVm90ZURvdWJsZTsKLSAgICAgICAgICAgICAgICBl
bHNlCi0gICAgICAgICAgICAgICAgICAgIGJhbGxvdCA9IFZvdGVWYWx1ZTsKKyAgICAgICAgICAg
IGlmIChpc051bWJlclNwZWN1bGF0aW9uRXhwZWN0aW5nRGVmaW5lZChsZWZ0KSAmJiBpc051bWJl
clNwZWN1bGF0aW9uRXhwZWN0aW5nRGVmaW5lZChyaWdodCkKKyAgICAgICAgICAgICAgICAmJiAh
bV9ncmFwaC5hZGRTaG91bGRTcGVjdWxhdGVJbnRlZ2VyKG5vZGUpKQorICAgICAgICAgICAgICAg
IGJhbGxvdCA9IFZvdGVEb3VibGU7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAg
YmFsbG90ID0gVm90ZVZhbHVlOwogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIG1f
Z3JhcGgudm90ZShub2RlLmNoaWxkMSgpLCBiYWxsb3QpOwotICAgICAgICAgICAgICAgIG1fZ3Jh
cGgudm90ZShub2RlLmNoaWxkMigpLCBiYWxsb3QpOwotICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgfQorICAgICAgICAgICAgbV9ncmFwaC52b3RlKG5vZGUtPmNoaWxkMSgpLCBi
YWxsb3QpOworICAgICAgICAgICAgbV9ncmFwaC52b3RlKG5vZGUtPmNoaWxkMigpLCBiYWxsb3Qp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KICAgICAgICAgICAgICAgICAKLSAgICAg
ICAgICAgIGNhc2UgQXJpdGhNdWw6IHsKLSAgICAgICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSBs
ZWZ0ID0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5wcmVkaWN0aW9uKCk7Ci0gICAgICAgICAgICAg
ICAgU3BlY3VsYXRlZFR5cGUgcmlnaHQgPSBtX2dyYXBoW25vZGUuY2hpbGQyKCldLnByZWRpY3Rp
b24oKTsKKyAgICAgICAgY2FzZSBBcml0aE11bDogeworICAgICAgICAgICAgU3BlY3VsYXRlZFR5
cGUgbGVmdCA9IG5vZGUtPmNoaWxkMSgpLT5wcmVkaWN0aW9uKCk7CisgICAgICAgICAgICBTcGVj
dWxhdGVkVHlwZSByaWdodCA9IG5vZGUtPmNoaWxkMigpLT5wcmVkaWN0aW9uKCk7CiAgICAgICAg
ICAgICAgICAgCi0gICAgICAgICAgICAgICAgRG91YmxlQmFsbG90IGJhbGxvdDsKKyAgICAgICAg
ICAgIERvdWJsZUJhbGxvdCBiYWxsb3Q7CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAg
ICAgaWYgKGlzTnVtYmVyU3BlY3VsYXRpb24obGVmdCkgJiYgaXNOdW1iZXJTcGVjdWxhdGlvbihy
aWdodCkKLSAgICAgICAgICAgICAgICAgICAgJiYgIW1fZ3JhcGgubXVsU2hvdWxkU3BlY3VsYXRl
SW50ZWdlcihub2RlKSkKLSAgICAgICAgICAgICAgICAgICAgYmFsbG90ID0gVm90ZURvdWJsZTsK
LSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIGJhbGxvdCA9IFZvdGVW
YWx1ZTsKKyAgICAgICAgICAgIGlmIChpc051bWJlclNwZWN1bGF0aW9uKGxlZnQpICYmIGlzTnVt
YmVyU3BlY3VsYXRpb24ocmlnaHQpCisgICAgICAgICAgICAgICAgJiYgIW1fZ3JhcGgubXVsU2hv
dWxkU3BlY3VsYXRlSW50ZWdlcihub2RlKSkKKyAgICAgICAgICAgICAgICBiYWxsb3QgPSBWb3Rl
RG91YmxlOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGJhbGxvdCA9IFZvdGVW
YWx1ZTsKICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBtX2dyYXBoLnZvdGUobm9k
ZS5jaGlsZDEoKSwgYmFsbG90KTsKLSAgICAgICAgICAgICAgICBtX2dyYXBoLnZvdGUobm9kZS5j
aGlsZDIoKSwgYmFsbG90KTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIG1fZ3JhcGgudm90ZShub2RlLT5jaGlsZDEoKSwgYmFsbG90KTsKKyAgICAg
ICAgICAgIG1fZ3JhcGgudm90ZShub2RlLT5jaGlsZDIoKSwgYmFsbG90KTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CiAKLSAgICAgICAgICAgIGNhc2UgQXJpdGhNaW46Ci0gICAgICAg
ICAgICBjYXNlIEFyaXRoTWF4OgotICAgICAgICAgICAgY2FzZSBBcml0aE1vZDoKLSAgICAgICAg
ICAgIGNhc2UgQXJpdGhEaXY6IHsKLSAgICAgICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSBsZWZ0
ID0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5wcmVkaWN0aW9uKCk7Ci0gICAgICAgICAgICAgICAg
U3BlY3VsYXRlZFR5cGUgcmlnaHQgPSBtX2dyYXBoW25vZGUuY2hpbGQyKCldLnByZWRpY3Rpb24o
KTsKKyAgICAgICAgY2FzZSBBcml0aE1pbjoKKyAgICAgICAgY2FzZSBBcml0aE1heDoKKyAgICAg
ICAgY2FzZSBBcml0aE1vZDoKKyAgICAgICAgY2FzZSBBcml0aERpdjogeworICAgICAgICAgICAg
U3BlY3VsYXRlZFR5cGUgbGVmdCA9IG5vZGUtPmNoaWxkMSgpLT5wcmVkaWN0aW9uKCk7CisgICAg
ICAgICAgICBTcGVjdWxhdGVkVHlwZSByaWdodCA9IG5vZGUtPmNoaWxkMigpLT5wcmVkaWN0aW9u
KCk7CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgRG91YmxlQmFsbG90IGJhbGxv
dDsKKyAgICAgICAgICAgIERvdWJsZUJhbGxvdCBiYWxsb3Q7CiAgICAgICAgICAgICAgICAgCi0g
ICAgICAgICAgICAgICAgaWYgKGlzTnVtYmVyU3BlY3VsYXRpb24obGVmdCkgJiYgaXNOdW1iZXJT
cGVjdWxhdGlvbihyaWdodCkKLSAgICAgICAgICAgICAgICAgICAgJiYgIShOb2RlOjpzaG91bGRT
cGVjdWxhdGVJbnRlZ2VyRm9yQXJpdGhtZXRpYyhtX2dyYXBoW25vZGUuY2hpbGQxKCldLCBtX2dy
YXBoW25vZGUuY2hpbGQxKCldKQotICAgICAgICAgICAgICAgICAgICAgICAgICYmIG5vZGUuY2Fu
U3BlY3VsYXRlSW50ZWdlcigpKSkKLSAgICAgICAgICAgICAgICAgICAgYmFsbG90ID0gVm90ZURv
dWJsZTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIGJhbGxvdCA9
IFZvdGVWYWx1ZTsKKyAgICAgICAgICAgIGlmIChpc051bWJlclNwZWN1bGF0aW9uKGxlZnQpICYm
IGlzTnVtYmVyU3BlY3VsYXRpb24ocmlnaHQpCisgICAgICAgICAgICAgICAgJiYgIShOb2RlOjpz
aG91bGRTcGVjdWxhdGVJbnRlZ2VyRm9yQXJpdGhtZXRpYyhub2RlLT5jaGlsZDEoKS5ub2RlKCks
IG5vZGUtPmNoaWxkMigpLm5vZGUoKSkKKyAgICAgICAgICAgICAgICAgICAgICYmIG5vZGUuY2Fu
U3BlY3VsYXRlSW50ZWdlcigpKSkKKyAgICAgICAgICAgICAgICBiYWxsb3QgPSBWb3RlRG91Ymxl
OworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGJhbGxvdCA9IFZvdGVWYWx1ZTsK
ICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBtX2dyYXBoLnZvdGUobm9kZS5jaGls
ZDEoKSwgYmFsbG90KTsKLSAgICAgICAgICAgICAgICBtX2dyYXBoLnZvdGUobm9kZS5jaGlsZDIo
KSwgYmFsbG90KTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIG1fZ3JhcGgudm90ZShub2RlLT5jaGlsZDEoKSwgYmFsbG90KTsKKyAgICAgICAgICAg
IG1fZ3JhcGgudm90ZShub2RlLT5jaGlsZDIoKSwgYmFsbG90KTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBjYXNlIEFyaXRoQWJz
OgotICAgICAgICAgICAgICAgIERvdWJsZUJhbGxvdCBiYWxsb3Q7Ci0gICAgICAgICAgICAgICAg
aWYgKCEobV9ncmFwaFtub2RlLmNoaWxkMSgpXS5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyRm9yQXJp
dGhtZXRpYygpCi0gICAgICAgICAgICAgICAgICAgICAgJiYgbm9kZS5jYW5TcGVjdWxhdGVJbnRl
Z2VyKCkpKQotICAgICAgICAgICAgICAgICAgICBiYWxsb3QgPSBWb3RlRG91YmxlOwotICAgICAg
ICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgYmFsbG90ID0gVm90ZVZhbHVlOwor
ICAgICAgICBjYXNlIEFyaXRoQWJzOgorICAgICAgICAgICAgRG91YmxlQmFsbG90IGJhbGxvdDsK
KyAgICAgICAgICAgIGlmICghKG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVJbnRlZ2Vy
Rm9yQXJpdGhtZXRpYygpCisgICAgICAgICAgICAgICAgICAmJiBub2RlLmNhblNwZWN1bGF0ZUlu
dGVnZXIoKSkpCisgICAgICAgICAgICAgICAgYmFsbG90ID0gVm90ZURvdWJsZTsKKyAgICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgICAgICBiYWxsb3QgPSBWb3RlVmFsdWU7CiAgICAgICAgICAg
ICAgICAgCi0gICAgICAgICAgICAgICAgbV9ncmFwaC52b3RlKG5vZGUuY2hpbGQxKCksIGJhbGxv
dCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBtX2dyYXBoLnZvdGUobm9k
ZS0+Y2hpbGQxKCksIGJhbGxvdCk7CisgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAg
ICAKLSAgICAgICAgICAgIGNhc2UgQXJpdGhTcXJ0OgotICAgICAgICAgICAgICAgIG1fZ3JhcGgu
dm90ZShub2RlLmNoaWxkMSgpLCBWb3RlRG91YmxlKTsKLSAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBBcml0aFNxcnQ6CisgICAgICAgICAgICBtX2dyYXBoLnZvdGUobm9kZS0+
Y2hpbGQxKCksIFZvdGVEb3VibGUpOworICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAg
ICAgCi0gICAgICAgICAgICBjYXNlIFNldExvY2FsOiB7Ci0gICAgICAgICAgICAgICAgU3BlY3Vs
YXRlZFR5cGUgcHJlZGljdGlvbiA9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ucHJlZGljdGlvbigp
OwotICAgICAgICAgICAgICAgIGlmIChpc0RvdWJsZVNwZWN1bGF0aW9uKHByZWRpY3Rpb24pKQot
ICAgICAgICAgICAgICAgICAgICBub2RlLnZhcmlhYmxlQWNjZXNzRGF0YSgpLT52b3RlKFZvdGVE
b3VibGUpOwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKCFpc051bWJlclNwZWN1bGF0aW9uKHBy
ZWRpY3Rpb24pIHx8IGlzSW50MzJTcGVjdWxhdGlvbihwcmVkaWN0aW9uKSkKLSAgICAgICAgICAg
ICAgICAgICAgbm9kZS52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+dm90ZShWb3RlVmFsdWUpOwotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQorICAgICAgICBjYXNlIFNldExvY2Fs
OiB7CisgICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uID0gbm9kZS0+Y2hpbGQx
KCktPnByZWRpY3Rpb24oKTsKKyAgICAgICAgICAgIGlmIChpc0RvdWJsZVNwZWN1bGF0aW9uKHBy
ZWRpY3Rpb24pKQorICAgICAgICAgICAgICAgIG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT52
b3RlKFZvdGVEb3VibGUpOworICAgICAgICAgICAgZWxzZSBpZiAoIWlzTnVtYmVyU3BlY3VsYXRp
b24ocHJlZGljdGlvbikgfHwgaXNJbnQzMlNwZWN1bGF0aW9uKHByZWRpY3Rpb24pKQorICAgICAg
ICAgICAgICAgIG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT52b3RlKFZvdGVWYWx1ZSk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQogICAgICAgICAgICAgICAgIAotICAgICAgICAg
ICAgY2FzZSBQdXRCeVZhbDoKLSAgICAgICAgICAgIGNhc2UgUHV0QnlWYWxBbGlhczogewotICAg
ICAgICAgICAgICAgIEVkZ2UgY2hpbGQxID0gbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKTsK
LSAgICAgICAgICAgICAgICBFZGdlIGNoaWxkMiA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwg
MSk7Ci0gICAgICAgICAgICAgICAgRWRnZSBjaGlsZDMgPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG5v
ZGUsIDIpOwotICAgICAgICAgICAgICAgIG1fZ3JhcGgudm90ZShjaGlsZDEsIFZvdGVWYWx1ZSk7
Ci0gICAgICAgICAgICAgICAgbV9ncmFwaC52b3RlKGNoaWxkMiwgVm90ZVZhbHVlKTsKLSAgICAg
ICAgICAgICAgICBzd2l0Y2ggKG5vZGUuYXJyYXlNb2RlKCkudHlwZSgpKSB7Ci0gICAgICAgICAg
ICAgICAgY2FzZSBBcnJheTo6RG91YmxlOgotICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLnZv
dGUoY2hpbGQzLCBWb3RlRG91YmxlKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC52b3RlKGNo
aWxkMywgVm90ZVZhbHVlKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAgICAgfQorICAgICAgICBjYXNlIFB1dEJ5VmFsOgorICAgICAgICBjYXNlIFB1dEJ5VmFsQWxp
YXM6IHsKKyAgICAgICAgICAgIEVkZ2UgY2hpbGQxID0gbV9ncmFwaC52YXJBcmdDaGlsZChub2Rl
LCAwKTsKKyAgICAgICAgICAgIEVkZ2UgY2hpbGQyID0gbV9ncmFwaC52YXJBcmdDaGlsZChub2Rl
LCAxKTsKKyAgICAgICAgICAgIEVkZ2UgY2hpbGQzID0gbV9ncmFwaC52YXJBcmdDaGlsZChub2Rl
LCAyKTsKKyAgICAgICAgICAgIG1fZ3JhcGgudm90ZShjaGlsZDEsIFZvdGVWYWx1ZSk7CisgICAg
ICAgICAgICBtX2dyYXBoLnZvdGUoY2hpbGQyLCBWb3RlVmFsdWUpOworICAgICAgICAgICAgc3dp
dGNoIChub2RlLmFycmF5TW9kZSgpLnR5cGUoKSkgeworICAgICAgICAgICAgY2FzZSBBcnJheTo6
RG91YmxlOgorICAgICAgICAgICAgICAgIG1fZ3JhcGgudm90ZShjaGlsZDMsIFZvdGVEb3VibGUp
OwogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IAogICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBtX2dyYXBoLnZvdGUobm9k
ZSwgVm90ZVZhbHVlKTsKKyAgICAgICAgICAgICAgICBtX2dyYXBoLnZvdGUoY2hpbGQzLCBWb3Rl
VmFsdWUpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQorICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBkZWZhdWx0OgorICAg
ICAgICAgICAgbV9ncmFwaC52b3RlKG5vZGUsIFZvdGVWYWx1ZSk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICB2b2lkIGRvUm91bmRPZkRvdWJsZVZvdGlu
ZygpCisgICAgeworI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKKyAg
ICAgICAgZGF0YUxvZ0YoIlZvdGluZyBvbiBkb3VibGUgdXNlcyBvZiBsb2NhbHMgWyV1XVxuIiwg
bV9jb3VudCk7CisjZW5kaWYKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fZ3Jh
cGgubV92YXJpYWJsZUFjY2Vzc0RhdGEuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICBtX2dyYXBo
Lm1fdmFyaWFibGVBY2Nlc3NEYXRhW2ldLmZpbmQoKS0+Y2xlYXJWb3RlcygpOworICAgICAgICBm
b3IgKEJhc2ljQmxvY2sgYmxvY2tJbmRleCA9IDA7IGkgPCBtX2dyYXBoLm1fYmxvY2tzLnNpemUo
KTsgKytibG9ja0luZGV4KSB7CisgICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3Jh
cGgubV9ibG9ja3NbYmxvY2tJbmRleF0uZ2V0KCk7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgYmxvY2stPnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICAgICAgbV9jdXJy
ZW50Tm9kZSA9IGJsb2NrLT5hdChpKTsKKyAgICAgICAgICAgICAgICBkb0RvdWJsZVZvdGluZyht
X2N1cnJlbnROb2RlKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgbV9ncmFwaC5tX3ZhcmlhYmxlQWNjZXNzRGF0YS5zaXplKCk7ICsr
aSkgewogICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEg
PSAmbV9ncmFwaC5tX3ZhcmlhYmxlQWNjZXNzRGF0YVtpXTsKQEAgLTEwMTIsNyArMTAzMyw3IEBA
IHByaXZhdGU6CiAgICAgICAgIH0KICAgICB9CiAgICAgCi0gICAgTm9kZUluZGV4IG1fY29tcGls
ZUluZGV4OworICAgIE5vZGUqIG1fY3VycmVudE5vZGU7CiAgICAgYm9vbCBtX2NoYW5nZWQ7CiAK
ICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0cnVjdHVyZUFic3RyYWN0VmFsdWUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0cnVjdHVyZUFic3RyYWN0VmFsdWUu
aAkocmV2aXNpb24gMTQwMTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJ1
Y3R1cmVBYnN0cmFjdFZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxNCw2ICszMTQsOCBAQCBw
dWJsaWM6CiBwcml2YXRlOgogICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIHRvcFZhbHVlKCkgeyByZXR1
cm4gcmVpbnRlcnByZXRfY2FzdDxTdHJ1Y3R1cmUqPigxKTsgfQogICAgIAorICAgIC8vIE5CLiBU
aGlzIG11c3QgaGF2ZSBhIHRyaXZpYWwgZGVzdHJ1Y3Rvci4KKyAgICAKICAgICAvLyBUaGlzIGNh
biBvbmx5IHJlbWVtYmVyIG9uZSBzdHJ1Y3R1cmUgYXQgYSB0aW1lLgogICAgIFN0cnVjdHVyZSog
bV9zdHJ1Y3R1cmU7CiB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYWxp
ZGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYWxp
ZGF0ZS5jcHAJKHJldmlzaW9uIDE0MDEwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHVmFsaWRhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MCw0MCArODAsNDMgQEAgcHVibGlj
OgogICAgICAgICAvLyBWYWxpZGF0ZSB0aGF0IGFsbCBsb2NhbCB2YXJpYWJsZXMgYXQgdGhlIGhl
YWQgb2YgdGhlIHJvb3QgYmxvY2sgYXJlIGRlYWQuCiAgICAgICAgIEJhc2ljQmxvY2sqIHJvb3Qg
PSBtX2dyYXBoLm1fYmxvY2tzWzBdLmdldCgpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgcm9vdC0+dmFyaWFibGVzQXRIZWFkLm51bWJlck9mTG9jYWxzKCk7ICsraSkKLSAgICAg
ICAgICAgIFZfRVFVQUwoKHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4oaSksIDApLCBOb05v
ZGUsIHJvb3QtPnZhcmlhYmxlc0F0SGVhZC5sb2NhbChpKSk7CisgICAgICAgICAgICBWX0VRVUFM
KChzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KGkpLCAwKSwgMCwgcm9vdC0+dmFyaWFibGVz
QXRIZWFkLmxvY2FsKGkpKTsKICAgICAgICAgCiAgICAgICAgIC8vIFZhbGlkYXRlIHJlZiBjb3Vu
dHMgYW5kIHVzZXMuCi0gICAgICAgIFZlY3Rvcjx1bnNpZ25lZD4gbXlSZWZDb3VudHM7Ci0gICAg
ICAgIG15UmVmQ291bnRzLmZpbGwoMCwgbV9ncmFwaC5zaXplKCkpOwotICAgICAgICBCaXRWZWN0
b3IgYWNjZXB0YWJsZU5vZGVJbmRpY2VzOworICAgICAgICBIYXNoTWFwPE5vZGUqLCB1bnNpZ25l
ZD4gbXlSZWZDb3VudHM7CiAgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gMDsg
YmxvY2tJbmRleCA8IG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgpOyArK2Jsb2NrSW5kZXgpIHsKICAg
ICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5tX2Jsb2Nrc1tibG9ja0luZGV4
XS5nZXQoKTsKLSAgICAgICAgICAgIGlmICghYmxvY2spCisgICAgICAgICAgICBpZiAoIWJsb2Nr
IHx8ICFibG9jay0+aXNSZWFjaGFibGUpCiAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgICAgICBpZiAoIWJsb2NrLT5pc1JlYWNoYWJsZSkKKyAgICAgICAgICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgYmxvY2stPm51bU5vZGVzKCk7ICsraSkKKyAgICAgICAgICAgICAgICBteVJl
ZkNvdW50cy5hZGQoYmxvY2stPm5vZGUoaSksIDApOworICAgICAgICB9CisgICAgICAgIEhhc2hT
ZXQ8Tm9kZSo+IGFjY2VwdGFibGVOb2RlczsKKyAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2Nr
SW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9ncmFwaC5tX2Jsb2Nrcy5zaXplKCk7ICsrYmxvY2tJ
bmRleCkgeworICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLm1fYmxvY2tz
W2Jsb2NrSW5kZXhdLmdldCgpOworICAgICAgICAgICAgaWYgKCFibG9jayB8fCAhYmxvY2stPmlz
UmVhY2hhYmxlKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBibG9jay0+bnVtTm9kZXMoKTsgKytpKSB7Ci0gICAgICAgICAgICAg
ICAgTm9kZUluZGV4IG5vZGVJbmRleCA9IGJsb2NrLT5ub2RlSW5kZXgoaSk7Ci0gICAgICAgICAg
ICAgICAgYWNjZXB0YWJsZU5vZGVJbmRpY2VzLnNldChub2RlSW5kZXgpOwotICAgICAgICAgICAg
ICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW25vZGVJbmRleF07Ci0gICAgICAgICAgICAgICAgaWYg
KCFub2RlLnNob3VsZEdlbmVyYXRlKCkpCisgICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJs
b2NrLT5ub2RlKGkpOworICAgICAgICAgICAgICAgIGFjY2VwdGFibGVOb2Rlcy5hZGQobm9kZSk7
CisgICAgICAgICAgICAgICAgaWYgKCFub2RlLT5zaG91bGRHZW5lcmF0ZSgpKQogICAgICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSAw
OyBqIDwgbV9ncmFwaC5udW1DaGlsZHJlbihub2RlKTsgKytqKSB7CiAgICAgICAgICAgICAgICAg
ICAgIEVkZ2UgZWRnZSA9IG1fZ3JhcGguY2hpbGQobm9kZSwgaik7CiAgICAgICAgICAgICAgICAg
ICAgIGlmICghZWRnZSkKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAg
ICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgbXlSZWZDb3VudHNbZWRnZS5pbmRl
eCgpXSsrOworICAgICAgICAgICAgICAgICAgICBteVJlZkNvdW50cy5maW5kKGVkZ2Uubm9kZSgp
KS0+dmFsdWUrKzsKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIC8v
IFVubGVzcyBJJ20gYSBGbHVzaCwgUGhhbnRvbSwgR2V0TG9jYWwsIG9yIFBoaSwgbXkgY2hpbGRy
ZW4gc2hvdWxkIGhhc1Jlc3VsdCgpLgotICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUu
b3AoKSkgeworICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKICAgICAg
ICAgICAgICAgICAgICAgY2FzZSBGbHVzaDoKICAgICAgICAgICAgICAgICAgICAgY2FzZSBQaGFu
dG9tOgogICAgICAgICAgICAgICAgICAgICBjYXNlIEdldExvY2FsOgogICAgICAgICAgICAgICAg
ICAgICBjYXNlIFBoaToKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKG5v
ZGVJbmRleCwgZWRnZSksIG1fZ3JhcGhbZWRnZV0uaGFzUmVzdWx0KCkpOworICAgICAgICAgICAg
ICAgICAgICAgICAgVkFMSURBVEUoKG5vZGUsIGVkZ2UpLCBlZGdlLT5oYXNSZXN1bHQoKSk7CiAg
ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgIH0KQEAgLTEyMSw1NCArMTI0LDUwIEBAIHB1YmxpYzoKICAgICAgICAgfQog
ICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2dy
YXBoLm1fYmxvY2tzLnNpemUoKTsgKytibG9ja0luZGV4KSB7CiAgICAgICAgICAgICBCYXNpY0Js
b2NrKiBibG9jayA9IG1fZ3JhcGgubV9ibG9ja3NbYmxvY2tJbmRleF0uZ2V0KCk7Ci0gICAgICAg
ICAgICBpZiAoIWJsb2NrKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAg
aWYgKCFibG9jay0+aXNSZWFjaGFibGUpCisgICAgICAgICAgICBpZiAoIWJsb2NrIHx8ICFibG9j
ay0+aXNSZWFjaGFibGUpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAK
LSAgICAgICAgICAgIEJpdFZlY3RvciBwaGlzSW5UaGlzQmxvY2s7Ci0gICAgICAgICAgICBCaXRW
ZWN0b3Igbm9kZXNJblRoaXNCbG9jazsKKyAgICAgICAgICAgIEhhc2hTZXQ8Tm9kZSo+IHBoaXNJ
blRoaXNCbG9jazsKKyAgICAgICAgICAgIEhhc2hTZXQ8Tm9kZSo+IG5vZGVzSW5UaGlzQmxvY2s7
CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYmxvY2st
Pm51bU5vZGVzKCk7ICsraSkgewotICAgICAgICAgICAgICAgIE5vZGVJbmRleCBub2RlSW5kZXgg
PSBibG9jay0+bm9kZUluZGV4KGkpOwotICAgICAgICAgICAgICAgIE5vZGUmIG5vZGUgPSBtX2dy
YXBoW25vZGVJbmRleF07Ci0gICAgICAgICAgICAgICAgbm9kZXNJblRoaXNCbG9jay5zZXQobm9k
ZUluZGV4KTsKKyAgICAgICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPm5vZGUoaSk7Cisg
ICAgICAgICAgICAgICAgbm9kZXNJblRoaXNCbG9jay5hZGQobm9kZSk7CiAgICAgICAgICAgICAg
ICAgaWYgKGJsb2NrLT5pc1BoaUluZGV4KGkpKQotICAgICAgICAgICAgICAgICAgICBwaGlzSW5U
aGlzQmxvY2suc2V0KG5vZGVJbmRleCk7Ci0gICAgICAgICAgICAgICAgVl9FUVVBTCgobm9kZUlu
ZGV4KSwgbXlSZWZDb3VudHNbbm9kZUluZGV4XSwgbm9kZS5hZGp1c3RlZFJlZkNvdW50KCkpOwor
ICAgICAgICAgICAgICAgICAgICBwaGlzSW5UaGlzQmxvY2suYWRkKG5vZGUpOworICAgICAgICAg
ICAgICAgIFZfRVFVQUwoKG5vZGUpLCBteVJlZkNvdW50cy5nZXQobm9kZUluZGV4KSwgbm9kZS5h
ZGp1c3RlZFJlZkNvdW50KCkpOwogICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IDA7
IGogPCBtX2dyYXBoLm51bUNoaWxkcmVuKG5vZGUpOyArK2opIHsKICAgICAgICAgICAgICAgICAg
ICAgRWRnZSBlZGdlID0gbV9ncmFwaC5jaGlsZChub2RlLCBqKTsKICAgICAgICAgICAgICAgICAg
ICAgaWYgKCFlZGdlKQogICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAg
ICAgICAgICAgICAgIFZBTElEQVRFKChub2RlSW5kZXgsIGVkZ2UpLCBhY2NlcHRhYmxlTm9kZUlu
ZGljZXMuZ2V0KGVkZ2UuaW5kZXgoKSkpOworICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgo
bm9kZSwgZWRnZSksIGFjY2VwdGFibGVOb2RlSW5kaWNlcy5jb250YWlucyhlZGdlLm5vZGUoKSkp
OwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAg
ICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBibG9jay0+cGhpcy5zaXplKCk7ICsraSkgewot
ICAgICAgICAgICAgICAgIE5vZGVJbmRleCBub2RlSW5kZXggPSBibG9jay0+cGhpc1tpXTsKLSAg
ICAgICAgICAgICAgICBOb2RlJiBub2RlID0gbV9ncmFwaFtub2RlSW5kZXhdOwotICAgICAgICAg
ICAgICAgIEFTU0VSVChwaGlzSW5UaGlzQmxvY2suZ2V0KG5vZGVJbmRleCkpOwotICAgICAgICAg
ICAgICAgIFZBTElEQVRFKChub2RlSW5kZXgpLCBub2RlLm9wKCkgPT0gUGhpKTsKLSAgICAgICAg
ICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgbG9jYWwgPSBub2RlLmxvY2FsKCk7CisgICAgICAgICAg
ICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5waGlzW2ldOworICAgICAgICAgICAgICAgIEFTU0VS
VChwaGlzSW5UaGlzQmxvY2suY29udGFpbnMobm9kZSkpOworICAgICAgICAgICAgICAgIFZBTElE
QVRFKChub2RlKSwgbm9kZS0+b3AoKSA9PSBQaGkpOworICAgICAgICAgICAgICAgIFZpcnR1YWxS
ZWdpc3RlciBsb2NhbCA9IG5vZGUtPmxvY2FsKCk7CiAgICAgICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBqID0gMDsgaiA8IG1fZ3JhcGgubnVtQ2hpbGRyZW4obm9kZSk7ICsraikgewogICAgICAg
ICAgICAgICAgICAgICBFZGdlIGVkZ2UgPSBtX2dyYXBoLmNoaWxkKG5vZGUsIGopOwogICAgICAg
ICAgICAgICAgICAgICBpZiAoIWVkZ2UpCiAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51
ZTsKICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChu
b2RlSW5kZXgsIGVkZ2UpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoW2Vk
Z2VdLm9wKCkgPT0gU2V0TG9jYWwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgbV9n
cmFwaFtlZGdlXS5vcCgpID09IFNldEFyZ3VtZW50Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHx8IG1fZ3JhcGhbZWRnZV0ub3AoKSA9PSBGbHVzaAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB8fCBtX2dyYXBoW2VkZ2VdLm9wKCkgPT0gUGhpKTsKKyAgICAgICAgICAgICAgICAg
ICAgVkFMSURBVEUoKG5vZGUsIGVkZ2UpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBl
ZGdlLT5vcCgpID09IFNldExvY2FsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IGVk
Z2UtPm9wKCkgPT0gU2V0QXJndW1lbnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwg
ZWRnZS0+b3AoKSA9PSBGbHVzaAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBlZGdl
LT5vcCgpID09IFBoaSk7CiAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAg
ICBpZiAocGhpc0luVGhpc0Jsb2NrLmdldChlZGdlLmluZGV4KCkpKQorICAgICAgICAgICAgICAg
ICAgICBpZiAocGhpc0luVGhpc0Jsb2NrLmNvbnRhaW5zKGVkZ2Uubm9kZSgpKSkKICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAg
ICAgICAgICAgICAgaWYgKG5vZGVzSW5UaGlzQmxvY2suZ2V0KGVkZ2UuaW5kZXgoKSkpIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChub2RlSW5kZXgsIGVkZ2UpLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaFtlZGdlXS5vcCgpID09IFNldExvY2Fs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBtX2dyYXBoW2VkZ2VdLm9wKCkg
PT0gU2V0QXJndW1lbnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IG1fZ3Jh
cGhbZWRnZV0ub3AoKSA9PSBGbHVzaCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChub2Rlc0lu
VGhpc0Jsb2NrLmNvbnRhaW5zKGVkZ2Uubm9kZSgpKSkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgVkFMSURBVEUoKG5vZGUsIGVkZ2UpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZWRnZS0+b3AoKSA9PSBTZXRMb2NhbAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfHwgZWRnZS0+b3AoKSA9PSBTZXRBcmd1bWVudAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfHwgZWRnZS0+b3AoKSA9PSBGbHVzaCk7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgICAg
ICB9CkBAIC0xODAsMzMgKzE3OSwzMCBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgICAg
ICBCYXNpY0Jsb2NrKiBwcmV2QmxvY2sgPSBtX2dyYXBoLm1fYmxvY2tzW2Jsb2NrLT5tX3ByZWRl
Y2Vzc29yc1trXV0uZ2V0KCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgoQmxv
Y2ssIGJsb2NrLT5tX3ByZWRlY2Vzc29yc1trXSksIHByZXZCbG9jayk7CiAgICAgICAgICAgICAg
ICAgICAgICAgICBWQUxJREFURSgoQmxvY2ssIGJsb2NrLT5tX3ByZWRlY2Vzc29yc1trXSksIHBy
ZXZCbG9jay0+aXNSZWFjaGFibGUpOwotICAgICAgICAgICAgICAgICAgICAgICAgTm9kZUluZGV4
IHByZXZOb2RlSW5kZXggPSBwcmV2QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKGxvY2Fs
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIE5vZGUqIHByZXZOb2RlID0gcHJldkJsb2NrLT52
YXJpYWJsZXNBdFRhaWwub3BlcmFuZChsb2NhbCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAv
LyBJZiB3ZSBoYXZlIGEgUGhpIHRoYXQgaXMgbm90IHJlZmVycmluZyB0byAqdGhpcyogYmxvY2sg
dGhlbiBhbGwgcHJlZGVjZXNzb3JzCiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBtdXN0IGhh
dmUgdGhhdCBsb2NhbCBhdmFpbGFibGUuCi0gICAgICAgICAgICAgICAgICAgICAgICBWQUxJREFU
RSgobG9jYWwsIGJsb2NrSW5kZXgsIEJsb2NrLCBibG9jay0+bV9wcmVkZWNlc3NvcnNba10pLCBw
cmV2Tm9kZUluZGV4ICE9IE5vTm9kZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBOb2RlKiBw
cmV2Tm9kZSA9ICZtX2dyYXBoW3ByZXZOb2RlSW5kZXhdOwotICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKHByZXZOb2RlLT5vcCgpID09IEdldExvY2FsKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcHJldk5vZGVJbmRleCA9IHByZXZOb2RlLT5jaGlsZDEoKS5pbmRleCgpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHByZXZOb2RlID0gJm1fZ3JhcGhbcHJldk5vZGVJbmRl
eF07Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBp
ZiAobm9kZS5zaG91bGRHZW5lcmF0ZSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
VkFMSURBVEUoKGxvY2FsLCBibG9jay0+bV9wcmVkZWNlc3NvcnNba10sIHByZXZOb2RlSW5kZXgp
LAorICAgICAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKGxvY2FsLCBibG9ja0luZGV4LCBC
bG9jaywgYmxvY2stPm1fcHJlZGVjZXNzb3JzW2tdKSwgcHJldk5vZGUpOworICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKHByZXZOb2RlLT5vcCgpID09IEdldExvY2FsKQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHByZXZOb2RlID0gcHJldk5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5zaG91bGRHZW5lcmF0ZSgpKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKGxvY2FsLCBibG9jay0+bV9wcmVkZWNl
c3NvcnNba10sIHByZXZOb2RlKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBwcmV2Tm9kZS0+c2hvdWxkR2VuZXJhdGUoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgobG9jYWwsIGJsb2NrLT5tX3ByZWRl
Y2Vzc29yc1trXSwgcHJldk5vZGVJbmRleCksCisgICAgICAgICAgICAgICAgICAgICAgICBWQUxJ
REFURSgobG9jYWwsIGJsb2NrLT5tX3ByZWRlY2Vzc29yc1trXSwgcHJldk5vZGUpLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldk5vZGUtPm9wKCkgPT0gU2V0TG9jYWwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IHByZXZOb2RlLT5vcCgpID09IFNldEFy
Z3VtZW50CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBwcmV2Tm9kZS0+b3Ao
KSA9PSBGbHVzaAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgcHJldk5vZGUt
Pm9wKCkgPT0gUGhpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcmV2Tm9kZUluZGV4
ID09IGVkZ2UuaW5kZXgoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByZXZOb2Rl
ID09IGVkZ2Uubm9kZSgpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm91bmQgPSB0
cnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgLy8gQXQgdGhpcyBwb2ludCBpdCBj
YW5ub3QgcmVmZXIgaW50byB0aGlzIGJsb2NrLgotICAgICAgICAgICAgICAgICAgICAgICAgVkFM
SURBVEUoKGxvY2FsLCBibG9jay0+bV9wcmVkZWNlc3NvcnNba10sIHByZXZOb2RlSW5kZXgpLCAh
cHJldkJsb2NrLT5pc0luQmxvY2soZWRnZS5pbmRleCgpKSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICBWQUxJREFURSgobG9jYWwsIGJsb2NrLT5tX3ByZWRlY2Vzc29yc1trXSwgcHJldk5vZGUp
LCAhcHJldkJsb2NrLT5pc0luQmxvY2soZWRnZS5ub2RlKCkpKTsKICAgICAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUo
KG5vZGVJbmRleCwgZWRnZSksIGZvdW5kKTsKKyAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUo
KG5vZGUsIGVkZ2UpLCBmb3VuZCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQog
ICAgICAgICAgICAgCkBAIC0yMjcsMzQgKzIyMywzMyBAQCBwdWJsaWM6CiAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYmxvY2st
PnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRleCA9IGJs
b2NrLT5hdChpKTsKLSAgICAgICAgICAgICAgICBOb2RlJiBub2RlID0gbV9ncmFwaFtub2RlSW5k
ZXhdOwotICAgICAgICAgICAgICAgIEFTU0VSVChub2Rlc0luVGhpc0Jsb2NrLmdldChub2RlSW5k
ZXgpKTsKLSAgICAgICAgICAgICAgICBWQUxJREFURSgobm9kZUluZGV4KSwgbm9kZS5vcCgpICE9
IFBoaSk7CisgICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5hdChpKTsKKyAgICAg
ICAgICAgICAgICBBU1NFUlQobm9kZXNJblRoaXNCbG9jay5jb250YWlucyhub2RlKSk7CisgICAg
ICAgICAgICAgICAgVkFMSURBVEUoKG5vZGUpLCBub2RlLT5vcCgpICE9IFBoaSk7CiAgICAgICAg
ICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gMDsgaiA8IG1fZ3JhcGgubnVtQ2hpbGRyZW4obm9k
ZSk7ICsraikgewogICAgICAgICAgICAgICAgICAgICBFZGdlIGVkZ2UgPSBtX2dyYXBoLmNoaWxk
KG5vZGUsIGopOwogICAgICAgICAgICAgICAgICAgICBpZiAoIWVkZ2UpCiAgICAgICAgICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKG5vZGVJ
bmRleCwgZWRnZSksIG5vZGVzSW5UaGlzQmxvY2suZ2V0KG5vZGVJbmRleCkpOworICAgICAgICAg
ICAgICAgICAgICBWQUxJREFURSgobm9kZSwgZWRnZSksIG5vZGVzSW5UaGlzQmxvY2suY29udGFp
bnMoZWRnZS5ub2RlKCkpKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCi0g
ICAgICAgICAgICAgICAgaWYgKCFub2RlLnNob3VsZEdlbmVyYXRlKCkpCisgICAgICAgICAgICAg
ICAgaWYgKCFub2RlLT5zaG91bGRHZW5lcmF0ZSgpKQogICAgICAgICAgICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUub3AoKSkgeworICAgICAgICAgICAg
ICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewogICAgICAgICAgICAgICAgIGNhc2UgR2V0TG9jYWw6
Ci0gICAgICAgICAgICAgICAgICAgIGlmIChub2RlLnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5pc0Nh
cHR1cmVkKCkpCisgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT52YXJpYWJsZUFjY2Vzc0Rh
dGEoKS0+aXNDYXB0dXJlZCgpKQogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICAgICAgICAgIFZBTElEQVRFKChub2RlSW5kZXgsIGJsb2NrSW5kZXgpLCBnZXRMb2Nh
bFBvc2l0aW9ucy5vcGVyYW5kKG5vZGUubG9jYWwoKSkgPT0gbm90U2V0KTsKLSAgICAgICAgICAg
ICAgICAgICAgZ2V0TG9jYWxQb3NpdGlvbnMub3BlcmFuZChub2RlLmxvY2FsKCkpID0gaTsKKyAg
ICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKG5vZGUsIGJsb2NrSW5kZXgpLCBnZXRMb2NhbFBv
c2l0aW9ucy5vcGVyYW5kKG5vZGUtPmxvY2FsKCkpID09IG5vdFNldCk7CisgICAgICAgICAgICAg
ICAgICAgIGdldExvY2FsUG9zaXRpb25zLm9wZXJhbmQobm9kZS0+bG9jYWwoKSkgPSBpOwogICAg
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICBjYXNlIFNldExvY2FsOgot
ICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+aXNDYXB0
dXJlZCgpKQorICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRh
KCktPmlzQ2FwdHVyZWQoKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgICAgICAgICAvLyBPbmx5IHJlY29yZCB0aGUgZmlyc3QgU2V0TG9jYWwuIFRoZXJlIG1h
eSBiZSBtdWx0aXBsZSBTZXRMb2NhbHMKICAgICAgICAgICAgICAgICAgICAgLy8gYmVjYXVzZSBv
ZiBmbHVzaGluZy4KLSAgICAgICAgICAgICAgICAgICAgaWYgKHNldExvY2FsUG9zaXRpb25zLm9w
ZXJhbmQobm9kZS5sb2NhbCgpKSAhPSBub3RTZXQpCisgICAgICAgICAgICAgICAgICAgIGlmIChz
ZXRMb2NhbFBvc2l0aW9ucy5vcGVyYW5kKG5vZGUtPmxvY2FsKCkpICE9IG5vdFNldCkKICAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBzZXRMb2NhbFBv
c2l0aW9ucy5vcGVyYW5kKG5vZGUubG9jYWwoKSkgPSBpOworICAgICAgICAgICAgICAgICAgICBz
ZXRMb2NhbFBvc2l0aW9ucy5vcGVyYW5kKG5vZGUtPmxvY2FsKCkpID0gaTsKICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CkBAIC0yOTQsOSArMjg5LDkgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGdl
dExvY2FsUG9zaXRpb25zLm9wZXJhbmQob3BlcmFuZCkgPCBzZXRMb2NhbFBvc2l0aW9ucy5vcGVy
YW5kKG9wZXJhbmQpKTsKICAgICB9CiAgICAgCi0gICAgdm9pZCByZXBvcnRWYWxpZGF0aW9uQ29u
dGV4dChOb2RlSW5kZXggbm9kZUluZGV4KQorICAgIHZvaWQgcmVwb3J0VmFsaWRhdGlvbkNvbnRl
eHQoTm9kZSogbm9kZSkKICAgICB7Ci0gICAgICAgIGRhdGFMb2dGKCJAJXUiLCBub2RlSW5kZXgp
OworICAgICAgICBkYXRhTG9nRigiQCV1Iiwgbm9kZS0+aW5kZXgoKSk7CiAgICAgfQogICAgIAog
ICAgIGVudW0gQmxvY2tUYWcgeyBCbG9jayB9OwpAQCAtMzA1LDkgKzMwMCw5IEBAIHByaXZhdGU6
CiAgICAgICAgIGRhdGFMb2dGKCJCbG9jayAjJXUiLCBibG9ja0luZGV4KTsKICAgICB9CiAgICAg
Ci0gICAgdm9pZCByZXBvcnRWYWxpZGF0aW9uQ29udGV4dChOb2RlSW5kZXggbm9kZUluZGV4LCBF
ZGdlIGVkZ2UpCisgICAgdm9pZCByZXBvcnRWYWxpZGF0aW9uQ29udGV4dChOb2RlKiBub2RlLCBF
ZGdlIGVkZ2UpCiAgICAgewotICAgICAgICBkYXRhTG9nRigiQCV1IC0+ICVzQCV1Iiwgbm9kZUlu
ZGV4LCB1c2VLaW5kVG9TdHJpbmcoZWRnZS51c2VLaW5kKCkpLCBlZGdlLmluZGV4KCkpOworICAg
ICAgICBkYXRhTG9nRigiQCV1IC0+ICVzQCV1Iiwgbm9kZS0+aW5kZXgoKSwgdXNlS2luZFRvU3Ry
aW5nKGVkZ2UudXNlS2luZCgpKSwgZWRnZS5pbmRleCgpKTsKICAgICB9CiAgICAgCiAgICAgdm9p
ZCByZXBvcnRWYWxpZGF0aW9uQ29udGV4dChWaXJ0dWFsUmVnaXN0ZXIgbG9jYWwsIEJsb2NrSW5k
ZXggYmxvY2tJbmRleCkKQEAgLTMyMiwyNyArMzE3LDI3IEBAIHByaXZhdGU6CiAgICAgfQogICAg
IAogICAgIHZvaWQgcmVwb3J0VmFsaWRhdGlvbkNvbnRleHQoCi0gICAgICAgIFZpcnR1YWxSZWdp
c3RlciBsb2NhbCwgQmxvY2tJbmRleCBzb3VyY2VCbG9ja0luZGV4LCBOb2RlSW5kZXggcHJldk5v
ZGVJbmRleCkKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGxvY2FsLCBCbG9ja0luZGV4IHNvdXJj
ZUJsb2NrSW5kZXgsIE5vZGUqIHByZXZOb2RlKQogICAgIHsKLSAgICAgICAgZGF0YUxvZ0YoIkAl
dSBmb3IgciVkIGluIEJsb2NrICMldSIsIHByZXZOb2RlSW5kZXgsIGxvY2FsLCBzb3VyY2VCbG9j
a0luZGV4KTsKKyAgICAgICAgZGF0YUxvZ0YoIkAldSBmb3IgciVkIGluIEJsb2NrICMldSIsIHBy
ZXZOb2RlLT5pbmRleCgpLCBsb2NhbCwgc291cmNlQmxvY2tJbmRleCk7CiAgICAgfQogICAgIAog
ICAgIHZvaWQgcmVwb3J0VmFsaWRhdGlvbkNvbnRleHQoCi0gICAgICAgIE5vZGVJbmRleCBub2Rl
SW5kZXgsIEJsb2NrSW5kZXggYmxvY2tJbmRleCkKKyAgICAgICAgTm9kZSogbm9kZSwgQmxvY2tJ
bmRleCBibG9ja0luZGV4KQogICAgIHsKLSAgICAgICAgZGF0YUxvZ0YoIkAldSBpbiBCbG9jayAj
JXUiLCBub2RlSW5kZXgsIGJsb2NrSW5kZXgpOworICAgICAgICBkYXRhTG9nRigiQCV1IGluIEJs
b2NrICMldSIsIG5vZGUtPmluZGV4KCksIGJsb2NrSW5kZXgpOwogICAgIH0KICAgICAKICAgICB2
b2lkIHJlcG9ydFZhbGlkYXRpb25Db250ZXh0KAotICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4
LCBOb2RlSW5kZXggbm9kZUluZGV4MiwgQmxvY2tJbmRleCBibG9ja0luZGV4KQorICAgICAgICBO
b2RlKiBub2RlLCBOb2RlKiBub2RlMiwgQmxvY2tJbmRleCBibG9ja0luZGV4KQogICAgIHsKLSAg
ICAgICAgZGF0YUxvZ0YoIkAldSBhbmQgQCV1IGluIEJsb2NrICMldSIsIG5vZGVJbmRleCwgbm9k
ZUluZGV4MiwgYmxvY2tJbmRleCk7CisgICAgICAgIGRhdGFMb2dGKCJAJXUgYW5kIEAldSBpbiBC
bG9jayAjJXUiLCBub2RlLT5pbmRleCgpLCBub2RlMi0+aW5kZXgoKSwgYmxvY2tJbmRleCk7CiAg
ICAgfQogICAgIAogICAgIHZvaWQgcmVwb3J0VmFsaWRhdGlvbkNvbnRleHQoCi0gICAgICAgIE5v
ZGVJbmRleCBub2RlSW5kZXgsIEJsb2NrSW5kZXggYmxvY2tJbmRleCwgTm9kZUluZGV4IGV4cGVj
dGVkTm9kZUluZGV4LCBFZGdlIGluY29taW5nRWRnZSkKKyAgICAgICAgTm9kZSogbm9kZSwgQmxv
Y2tJbmRleCBibG9ja0luZGV4LCBOb2RlKiBleHBlY3RlZE5vZGUsIEVkZ2UgaW5jb21pbmdFZGdl
KQogICAgIHsKLSAgICAgICAgZGF0YUxvZ0YoIkAldSBpbiBCbG9jayAjJXUsIHNlYXJjaGluZyBm
b3IgQCV1IGZyb20gQCV1Iiwgbm9kZUluZGV4LCBibG9ja0luZGV4LCBleHBlY3RlZE5vZGVJbmRl
eCwgaW5jb21pbmdFZGdlLmluZGV4KCkpOworICAgICAgICBkYXRhTG9nRigiQCV1IGluIEJsb2Nr
ICMldSwgc2VhcmNoaW5nIGZvciBAJXUgZnJvbSBAJXUiLCBub2RlLT5pbmRleCgpLCBibG9ja0lu
ZGV4LCBleHBlY3RlZE5vZGUtPmluZGV4KCksIGluY29taW5nRWRnZS5pbmRleCgpKTsKICAgICB9
CiAgICAgCiAgICAgdm9pZCBkdW1wRGF0YSh1bnNpZ25lZCB2YWx1ZSkKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmNwcAkocmV2aXNpb24gMTQw
MTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIkFyZ0xpc3QuaCIKICNp
bmNsdWRlICJDb2RlQ2FjaGUuaCIKICNpbmNsdWRlICJDb21tb25JZGVudGlmaWVycy5oIgorI2lu
Y2x1ZGUgIkRGR0xvbmdMaXZlZFN0YXRlLmgiCiAjaW5jbHVkZSAiRGVidWdnZXJBY3RpdmF0aW9u
LmgiCiAjaW5jbHVkZSAiRnVuY3Rpb25Db25zdHJ1Y3Rvci5oIgogI2luY2x1ZGUgIkdDQWN0aXZp
dHlDYWxsYmFjay5oIgpAQCAtMjUxLDYgKzI1MiwxMSBAQCBKU0dsb2JhbERhdGE6OkpTR2xvYmFs
RGF0YShHbG9iYWxEYXRhVHlwCiAgICAgCiAgICAgaWYgKE9wdGlvbnM6OmVuYWJsZVByb2ZpbGVy
KCkpCiAgICAgICAgIG1fcGVyQnl0ZWNvZGVQcm9maWxlciA9IGFkb3B0UHRyKG5ldyBQcm9maWxl
cjo6RGF0YWJhc2UoKnRoaXMpKTsKKworI2lmIEVOQUJMRShERkdfSklUKQorICAgIGlmIChjYW5V
c2VKSVQoKSkKKyAgICAgICAgbV9kZmdTdGF0ZSA9IGFkb3B0UHRyKG5ldyBERkc6OkxvbmdMaXZl
ZFN0YXRlKCkpOworI2VuZGlmCiB9CiAKIEpTR2xvYmFsRGF0YTo6fkpTR2xvYmFsRGF0YSgpCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuaAkocmV2
aXNpb24gMTQwMTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxE
YXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTkwLDYgKzkwLDEyIEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgIGNsYXNzIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlOwogICAgIGNsYXNzIFVubGlua2Vk
UHJvZ3JhbUNvZGVCbG9jazsKIAorI2lmIEVOQUJMRShERkdfSklUKQorICAgIG5hbWVzcGFjZSBE
RkcgeworICAgIGNsYXNzIExvbmdMaXZlZFN0YXRlOworICAgIH0KKyNlbmRpZiAvLyBFTkFCTEUo
REZHX0pJVCkKKwogICAgIHN0cnVjdCBIYXNoVGFibGU7CiAgICAgc3RydWN0IEluc3RydWN0aW9u
OwogCkBAIC0xODgsNiArMTk0LDEwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAvLyBUaGUg
aGVhcCBzaG91bGQgYmUganVzdCBhZnRlciBleGVjdXRhYmxlQWxsb2NhdG9yIGFuZCBiZWZvcmUg
b3RoZXIgbWVtYmVycyB0byBlbnN1cmUgdGhhdCBpdCdzCiAgICAgICAgIC8vIGRlc3RydWN0ZWQg
YWZ0ZXIgYWxsIHRoZSBvYmplY3RzIHRoYXQgcmVmZXJlbmNlIGl0LgogICAgICAgICBIZWFwIGhl
YXA7CisgICAgICAgIAorI2lmIEVOQUJMRShERkdfSklUKQorICAgICAgICBPd25QdHI8REZHOjpM
b25nTGl2ZWRTdGF0ZT4gbV9kZmdTdGF0ZTsKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKIAog
ICAgICAgICBHbG9iYWxEYXRhVHlwZSBnbG9iYWxEYXRhVHlwZTsKICAgICAgICAgQ2xpZW50RGF0
YSogY2xpZW50RGF0YTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>183726</attachid>
            <date>2013-01-21 00:22:36 -0800</date>
            <delta_ts>2013-01-21 15:07:12 -0800</delta_ts>
            <desc>work in progress</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>147238</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RWYWx1ZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RWYWx1ZS5oCShy
ZXZpc2lvbiAxNDAzMDYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0
VmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtNDE4LDYgKzQxOCw4IEBAIHN0cnVjdCBBYnN0cmFj
dFZhbHVlIHsKICAgICAvLyAgICBjaGFuZ2UgeCdzIHN0cnVjdHVyZSBhbmQgd2UgaGF2ZSBubyB3
YXkgb2YgcHJvdmluZyBvdGhlcndpc2UsIGJ1dAogICAgIC8vICAgIHgncyBtX2Z1dHVyZVBvc3Np
YmxlU3RydWN0dXJlIHdpbGwgYmUgd2hhdGV2ZXIgc3RydWN0dXJlIHdlIGhhZCBjaGVja2VkCiAg
ICAgLy8gICAgd2hlbiBnZXR0aW5nIHByb3BlcnR5ICdmJy4KKyAgICAKKyAgICAvLyBOQi4gQWxs
IGZpZWxkcyBpbiB0aGlzIHN0cnVjdCBtdXN0IGhhdmUgdHJpdmlhbCBkZXN0cnVjdG9ycy4KIAog
ICAgIC8vIFRoaXMgaXMgYSBwcm92ZW4gY29uc3RyYWludCBvbiB0aGUgc3RydWN0dXJlcyB0aGF0
IHRoaXMgdmFsdWUgY2FuIGhhdmUgcmlnaHQKICAgICAvLyBub3cuIFRoZSBzdHJ1Y3R1cmUgb2Yg
dGhlIGN1cnJlbnQgdmFsdWUgbXVzdCBiZWxvbmcgdG8gdGhpcyBzZXQuIFRoZSBzZXQgbWF5Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FkamFjZW5jeUxpc3QuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FkamFjZW5jeUxpc3QuaAkocmV2
aXNpb24gMTQwMzA2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBZGphY2VuY3lM
aXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMSwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTU3LDcgKzU3LDcgQEAgcHVibGljOgogICAgICAgICB9CiAg
ICAgfQogICAgIAotICAgIEFkamFjZW5jeUxpc3QoS2luZCBraW5kLCBOb2RlSW5kZXggY2hpbGQx
LCBOb2RlSW5kZXggY2hpbGQyLCBOb2RlSW5kZXggY2hpbGQzKQorICAgIEFkamFjZW5jeUxpc3Qo
S2luZCBraW5kLCBOb2RlKiBjaGlsZDEsIE5vZGUqIGNoaWxkMiwgTm9kZSogY2hpbGQzKQogI2lm
ICFBU1NFUlRfRElTQUJMRUQKICAgICAgICAgOiBtX2tpbmQoRml4ZWQpCiAjZW5kaWYKQEAgLTEx
OCw3ICsxMTgsNyBAQCBwdWJsaWM6CiAgICAgICAgIGNoaWxkKDIpID0gY2hpbGQzOwogICAgIH0K
ICAgICAKLSAgICB2b2lkIGluaXRpYWxpemUoTm9kZUluZGV4IGNoaWxkMSA9IE5vTm9kZSwgTm9k
ZUluZGV4IGNoaWxkMiA9IE5vTm9kZSwgTm9kZUluZGV4IGNoaWxkMyA9IE5vTm9kZSkKKyAgICB2
b2lkIGluaXRpYWxpemUoTm9kZSogY2hpbGQxID0gMCwgTm9kZSogY2hpbGQyID0gMCwgTm9kZSog
Y2hpbGQzID0gMCkKICAgICB7CiAgICAgICAgIGluaXRpYWxpemUoRWRnZShjaGlsZDEpLCBFZGdl
KGNoaWxkMiksIEVkZ2UoY2hpbGQzKSk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdBbGxvY2F0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0FsbG9jYXRvci5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdBbGxvY2F0b3IuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyMzUgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdB
bGxvY2F0b3JfaAorI2RlZmluZSBERkdBbGxvY2F0b3JfaAorCisjaW5jbHVkZSA8d3RmL1BsYXRm
b3JtLmg+CisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgPHd0Zi9QYWdlQWxsb2Nh
dGlvbkFsaWduZWQuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCisvLyBD
dXN0b20gcG9vbCBhbGxvY2F0b3IgZm9yIGV4YWN0bHkgb25lIHR5cGUgKHR5cGUgVCkuIEl0IGhh
cyBmYXN0IChPKDEpLCBvbmx5IGEgZmV3CisvLyBpbnN0cnVjdGlvbnMpIGFsbG9jYXRvciwgYW5k
IGEgc2ltaWxhcmx5IGZhc3QgZnJlZSgpLiBSZWN5Y2xpbmcgd29ya3MgaWYgZWl0aGVyIG9mCisv
LyB0aGUgZm9sbG93aW5nIGlzIHRydWU6CisvLyAtIFQgaGFzIGEgdHJpdmlhbCBkZXN0cnVjdG9y
LiBJbiB0aGF0IGNhc2UgeW91IGRvbid0IGhhdmUgdG8gZXZlciBjYWxsIGZyZWUoKSBvbgorLy8g
ICBhbnl0aGluZy4gWW91IGNhbiBqdXN0IGNhbGwgZnJlZUFsbCgpIGluc3RlYWQuCisvLyAtIFlv
dSBjYWxsIGZyZWUoKSBvbiBhbGwgVCdzIHRoYXQgeW91IGFsbG9jYXRlZCwgYW5kIG5ldmVyIHVz
ZSBmcmVlQWxsKCkuCisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitjbGFzcyBBbGxvY2F0b3Igewor
cHVibGljOgorICAgIEFsbG9jYXRvcigpOworICAgIH5BbGxvY2F0b3IoKTsKKyAgICAKKyAgICB2
b2lkKiBhbGxvY2F0ZSgpOyAvLyBVc2UgcGxhY2VtZW50IG5ldyB0byBhbGxvY2F0ZSwgYW5kIGF2
b2lkIHVzaW5nIHRoaXMgbWV0aG9kLgorICAgIHZvaWQgZnJlZShUKik7IC8vIENhbGwgdGhpcyBt
ZXRob2QgdG8gZGVsZXRlOyBuZXZlciB1c2UgJ2RlbGV0ZScgZGlyZWN0bHkuCisgICAgCisgICAg
dm9pZCBmcmVlQWxsKCk7IC8vIE9ubHkgY2FsbCB0aGlzIGlmIFQgaGFzIGEgdHJpdmlhbCBkZXN0
cnVjdG9yLgorICAgIHZvaWQgcmVzZXQoKTsgLy8gTGlrZSBmcmVlQWxsKCksIGJ1dCBhbHNvIHJl
dHVybnMgYWxsIG1lbW9yeSB0byB0aGUgT1MuCisgICAgCisgICAgdW5zaWduZWQgaW5kZXhPZihU
Kik7CisgICAgCisgICAgc3RhdGljIEFsbG9jYXRvciogYWxsb2NhdG9yT2YoVCopOworICAgIAor
cHJpdmF0ZToKKyAgICB2b2lkKiBidW1wQWxsb2NhdGUoKTsKKyAgICB2b2lkKiBmcmVlTGlzdEFs
bG9jYXRlKCk7CisgICAgdm9pZCogYWxsb2NhdGVTbG93KCk7CisgICAgdm9pZCBmcmVlUmVnaW9u
c1N0YXJ0aW5nQXQoUmVnaW9uKik7CisgICAgdm9pZCBzdGFydGluZ0J1bXBpbmdJbihSZWdpb24q
KTsKKyAgICAKKyAgICBzdHJ1Y3QgUmVnaW9uIHsKKyAgICAgICAgc3RhdGljIHNpemVfdCBzaXpl
KCkgeyByZXR1cm4gNjQgKiBLQjsgfQorICAgICAgICBzdGF0aWMgc2l6ZV90IGhlYWRlclNpemUo
KSB7IHJldHVybiBzdGQ6Om1heChzaXplb2YoUmVnaW9uKSwgc2l6ZW9mKFQpKTsgfQorICAgICAg
ICBzdGF0aWMgdW5zaWduZWQgbnVtYmVyT2ZUaGluZ3NQZXJSZWdpb24oKSB7IHJldHVybiAoc2l6
ZSgpIC0gaGVhZGVyU2l6ZSgpKSAvIHNpemVvZihUKTsgfQorICAgICAgICBUKiBkYXRhKCkgeyBy
ZXR1cm4gYml0d2lzZV9jYXN0PFQqPihiaXR3aXNlX2Nhc3Q8Y2hhcio+KHRoaXMpICsgaGVhZGVy
U2l6ZSgpKTsgfQorICAgICAgICBib29sIGlzSW5UaGlzUmVnaW9uKFQqIHBvaW50ZXIpIHsgcmV0
dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkPihwb2ludGVyIC0gZGF0YSgpKSA8IG51bWJlck9mVGhp
bmdzUGVyUmVnaW9uKCk7IH0KKyAgICAgICAgUmVnaW9uKiByZWdpb25Gb3IoVCogcG9pbnRlcikg
eyByZXR1cm4gYml0d2lzZV9jYXN0PFJlZ2lvbio+KGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KHBv
aW50ZXIpICYgfihzaXplKCkgLSAxKSk7IH0KKyAgICAgICAgCisgICAgICAgIFBhZ2VBbGxvY2F0
aW9uQWxpZ25lZCBtX2FsbG9jYXRpb247CisgICAgICAgIEFsbG9jYXRvciogbV9hbGxvY2F0b3I7
CisgICAgICAgIFJlZ2lvbiogbV9uZXh0OworICAgIH07CisgICAgCisgICAgUmVnaW9uKiBtX3Jl
Z2lvbkhlYWQ7CisgICAgdm9pZCoqIG1fZnJlZUxpc3RIZWFkOworICAgIFQqIG1fYnVtcEVuZDsK
KyAgICB1bnNpZ25lZCBtX2J1bXBSZW1haW5pbmc7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBU
PgoraW5saW5lIEFsbG9jYXRvcjo6QWxsb2NhdG9yKCkKKyAgICA6IG1fcmVnaW9uSGVhZCgwKQor
ICAgICwgbV9mcmVlTGlzdEhlYWQoMCkKKyAgICAsIG1fYnVtcFJlbWFpbmluZygwKQoreworfQor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgoraW5saW5lIEFsbG9jYXRvcjo6fkFsbG9jYXRvcigpCit7
CisgICAgcmVzZXQoKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK0FMV0FZU19JTkxJTkUg
dm9pZCogQWxsb2NhdG9yOjphbGxvY2F0ZSgpCit7CisgICAgaWYgKExJS0VMWSh2b2lkKiByZXN1
bHQgPSBidW1wQWxsb2NhdGUoKSkpCisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgcmV0dXJu
IGZyZWVMaXN0QWxsb2NhdGUoKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK3ZvaWQgQWxs
b2NhdG9yOjpmcmVlKFQqIG9iamVjdCkKK3sKKyAgICBvYmplY3QtPn5UKCk7CisgICAgCisgICAg
dm9pZCoqIGNlbGwgPSBiaXR3aXNlX2Nhc3Q8dm9pZCoqPihvYmplY3QpOworICAgICpjZWxsID0g
bV9mcmVlTGlzdEhlYWQ7CisgICAgbV9mcmVlTGlzdEhlYWQgPSBjZWxsOworfQorCit0ZW1wbGF0
ZTx0eXBlbmFtZSBUPgordm9pZCBBbGxvY2F0b3I6OmZyZWVBbGwoKQoreworICAgIGlmICghbV9y
ZWdpb25IZWFkKSB7CisgICAgICAgIEFTU0VSVCghbV9idW1wUmVtYWluaW5nKTsKKyAgICAgICAg
QVNTRVJUKCFtX2ZyZWVMaXN0SGVhZCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisg
ICAgLy8gU2luY2UgdGhlIGNhbGxlciBpcyBvcHRpbmcgb3V0IG9mIGNhbGxpbmcgdGhlIGRlc3Ry
dWN0b3IgZm9yIGFueSBhbGxvY2F0ZWQgdGhpbmcsCisgICAgLy8gd2UgaGF2ZSB0d28gY2hvaWNl
cywgcGx1cyBhIGNvbnRpbnV1bSBiZXR3ZWVuOiB3ZSBjYW4gZWl0aGVyIGp1c3QgZGVsZXRlIGFs
bCByZWdpb25zCisgICAgLy8gKGkuZS4gY2FsbCByZXNldCgpKSwgb3Igd2UgY2FuIG1ha2UgYWxs
IHJlZ2lvbnMgYXZhaWxhYmxlIGZvciByZXVzZS4gV2UgZG8gc29tZXRoaW5nCisgICAgLy8gdGhh
dCBvcHRpbWl6ZXMgZm9yIChhKSBzcGVlZCBvZiBmcmVlQWxsKCksIChiKSB0aGUgYXNzdW1wdGlv
biB0aGF0IGlmIHRoZSB1c2VyIGNhbGxzCisgICAgLy8gZnJlZUFsbCgpIHRoZW4gdGhleSB3aWxs
IHByb2JhYmx5IGJlIGNhbGxpbmcgYWxsb2NhdGUoKSBpbiB0aGUgbmVhciBmdXR1cmUuIE5hbWVs
eSwKKyAgICAvLyB3ZSBmcmVlIGFsbCBidXQgb25lIHJlZ2lvbiwgYW5kIG1ha2UgdGhlIHJlbWFp
bmluZyByZWdpb24gYSBidW1wIGFsbG9jYXRpb24gcmVnaW9uLgorICAgIAorICAgIGZvciAoUmVn
aW9uKiByZWdpb24gPSBtX3JlZ2lvbkhlYWQtPm1fbmV4dDsgcmVnaW9uOyByZWdpb24gPSByZWdp
b24tPm1fbmV4dCkKKyAgICAgICAgYnVpbGRGcmVlTGlzdEluKHJlZ2lvbik7CisgICAgCisgICAg
bV9yZWdpb25IZWFkLT5tX25leHQgPSAwOworICAgIG1fZnJlZUxpc3RIZWFkID0gMDsKKyAgICBz
dGFydEJ1bXBpbmdJbihtX3JlZ2lvbkhlYWQpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgor
dm9pZCBBbGxvY2F0b3I6OnJlc2V0KCkKK3sKKyAgICBmcmVlUmVnaW9uc1N0YXJ0aW5nQXQobV9y
ZWdpb25IZWFkKTsKKyAgICAKKyAgICBtX3JlZ2lvbkhlYWQgPSAwOworICAgIG1fZnJlZUxpc3RI
ZWFkID0gMDsKKyAgICBtX2J1bXBSZW1haW5pbmcgPSAwOworfQorCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPgordW5zaWduZWQgQWxsb2NhdG9yOjppbmRleE9mKFQqIG9iamVjdCkKK3sKKyAgICB1bnNp
Z25lZCBiYXNlSW5kZXggPSAwOworICAgIGZvciAoUmVnaW9uKiByZWdpb24gPSBtX3JlZ2lvbkhl
YWQ7IHJlZ2lvbjsgcmVnaW9uID0gcmVnaW9uLT5tX25leHQpIHsKKyAgICAgICAgaWYgKHJlZ2lv
bi0+aXNJblRoaXNSZWdpb24ob2JqZWN0KSkKKyAgICAgICAgICAgIHJldHVybiBiYXNlSW5kZXgg
KyAob2JqZWN0IC0gcmVnaW9uLT5kYXRhKCkpOworICAgICAgICBiYXNlSW5kZXggKz0gUmVnaW9u
OjpudW1iZXJPZlRoaW5nc1BlclJlZ2lvbigpOworICAgIH0KKyAgICBDUkFTSCgpOworICAgIHJl
dHVybiAwOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorQWxsb2NhdG9yKiBBbGxvY2F0b3I6
OmFsbG9jYXRvck9mKFQqIG9iamVjdCkKK3sKKyAgICByZXR1cm4gUmVnaW9uOjpyZWdpb25Gb3Io
b2JqZWN0KS0+bV9hbGxvY2F0b3I7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitBTFdBWVNf
SU5MSU5FIHZvaWQqIEFsbG9jYXRvcjo6YnVtcEFsbG9jYXRlKCkKK3sKKyAgICBpZiAodW5zaWdu
ZWQgcmVtYWluaW5nID0gbV9idW1wUmVtYWluaW5nKSB7CisgICAgICAgIHJlbWFpbmluZy0tOwor
ICAgICAgICBtX2J1bXBSZW1haW5pbmcgPSByZW1haW5pbmc7CisgICAgICAgIHJldHVybiBtX2J1
bXBFbmQgLSAocmVtYWluaW5nICsgMSk7CisgICAgfQorICAgIHJldHVybiAwOworfQorCit0ZW1w
bGF0ZTx0eXBlbmFtZSBUPgordm9pZCogQWxsb2NhdG9yOjpmcmVlTGlzdEFsbG9jYXRlKCkKK3sK
KyAgICB2b2lkKiogcmVzdWx0ID0gbV9mcmVlTGlzdEhlYWQ7CisgICAgaWYgKFVOTElLRUxZKCFy
ZXN1bHQpKQorICAgICAgICByZXR1cm4gYWxsb2NhdGVTbG93KCk7CisgICAgbV9mcmVlTGlzdEhl
YWQgPSBiaXR3aXNlX2Nhc3Q8dm9pZCoqPigqcmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0Owor
fQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgordm9pZCogQWxsb2NhdG9yOjphbGxvY2F0ZVNsb3co
KQoreworICAgIEFTU0VSVCghbV9mcmVlTGlzdEhlYWQpOworICAgIEFTU0VSVCghbV9idW1wUmVt
YWluaW5nKTsKKyAgICAKKyAgICBQYWdlQWxsb2NhdGlvbkFsaWduZWQgYWxsb2NhdGlvbiA9IFBh
Z2VBbGxvY2F0aW9uQWxpZ25lZDo6YWxsb2NhdGUoUmVnaW9uOjpzaXplKCksIFJlZ2lvbjo6c2l6
ZSgpLCBPU0FsbG9jYXRvcjo6SlNHQ0hlYXBQYWdlcyk7CisgICAgaWYgKCFzdGF0aWNfY2FzdDxi
b29sPihhbGxvY2F0aW9uKSkKKyAgICAgICAgQ1JBU0goKTsKKyAgICBSZWdpb24qIHJlZ2lvbiA9
IHN0YXRpY19jYXN0PFJlZ2lvbio+KGFsbG9jYXRpb24uYmFzZSgpKTsKKyAgICByZWdpb24tPm1f
YWxsb2NhdGlvbiA9IG1fYWxsb2NhdGlvbjsKKyAgICByZWdpb24tPm1fYWxsb2N0b3IgPSB0aGlz
OworICAgIHN0YXJ0QnVtcGluZ0luKHJlZ2lvbik7CisgICAgcmVnaW9uLT5tX25leHQgPSBtX3Jl
Z2lvbkhlYWQ7CisgICAgbV9yZWdpb25IZWFkID0gcmVnaW9uOworICAgIAorICAgIHZvaWQqIHJl
c3VsdCA9IGJ1bXBBbGxvY2F0ZSgpOworICAgIEFTU0VSVChyZXN1bHQpOworICAgIHJldHVybiBy
ZXN1bHQ7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+Cit2b2lkIEFsbG9jYXRvcjo6ZnJlZVJl
Z2lvbnNTdGFydGluZ0F0KFJlZ2lvbiogcmVnaW9uKQoreworICAgIHdoaWxlIChyZWdpb24pIHsK
KyAgICAgICAgUmVnaW9uKiBuZXh0UmVnaW9uID0gcmVnaW9uLT5tX25leHQ7CisgICAgICAgIHJl
Z2lvbi0+bV9hbGxvY2F0aW9uLmRlYWxsb2NhdGUoKTsKKyAgICAgICAgcmVnaW9uID0gbmV4dFJl
Z2lvbjsKKyAgICB9Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+Cit2b2lkIEFsbG9jYXRvcjo6
c3RhcnRCdW1waW5nSW4oUmVnaW9uKiByZWdpb24pCit7CisgICAgbV9idW1wRW5kID0gcmVnaW9u
LT5kYXRhKCkgKyBSZWdpb246Om51bWJlck9mVGhpbmdzUGVyUmVnaW9uKCk7CisgICAgbV9idW1w
UmVtYWluaW5nID0gUmVnaW9uOjpudW1iZXJPZlRoaW5nc1BlclJlZ2lvbigpOworfQorCit9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2Vu
ZGlmIC8vIERGR0FsbG9jYXRvcl9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQmFzaWNCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQmFzaWNCbG9jay5oCShyZXZpc2lvbiAxNDAzMDYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0Jhc2ljQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtNDIsNyArNDIsNyBAQCBj
bGFzcyBHcmFwaDsKIAogdHlwZWRlZiBWZWN0b3IgPEJsb2NrSW5kZXgsIDI+IFByZWRlY2Vzc29y
TGlzdDsKIAotc3RydWN0IEJhc2ljQmxvY2sgOiBWZWN0b3I8Tm9kZUluZGV4LCA4PiB7CitzdHJ1
Y3QgQmFzaWNCbG9jayA6IFZlY3RvcjxOb2RlKiwgOD4gewogICAgIEJhc2ljQmxvY2sodW5zaWdu
ZWQgYnl0ZWNvZGVCZWdpbiwgdW5zaWduZWQgbnVtQXJndW1lbnRzLCB1bnNpZ25lZCBudW1Mb2Nh
bHMpCiAgICAgICAgIDogYnl0ZWNvZGVCZWdpbihieXRlY29kZUJlZ2luKQogICAgICAgICAsIGlz
T1NSVGFyZ2V0KGZhbHNlKQpAQCAtNzUsNyArNzUsNyBAQCBzdHJ1Y3QgQmFzaWNCbG9jayA6IFZl
Y3RvcjxOb2RlSW5kZXgsIDg+CiAgICAgfQogICAgIAogICAgIHNpemVfdCBudW1Ob2RlcygpIGNv
bnN0IHsgcmV0dXJuIHBoaXMuc2l6ZSgpICsgc2l6ZSgpOyB9Ci0gICAgTm9kZUluZGV4IG5vZGVJ
bmRleChzaXplX3QgaSkgY29uc3QKKyAgICBOb2RlKiBub2RlKHNpemVfdCBpKSBjb25zdAogICAg
IHsKICAgICAgICAgaWYgKGkgPCBwaGlzLnNpemUoKSkKICAgICAgICAgICAgIHJldHVybiBwaGlz
W2ldOwpAQCAtODMsMjYgKzgzLDI2IEBAIHN0cnVjdCBCYXNpY0Jsb2NrIDogVmVjdG9yPE5vZGVJ
bmRleCwgOD4KICAgICB9CiAgICAgYm9vbCBpc1BoaUluZGV4KHNpemVfdCBpKSBjb25zdCB7IHJl
dHVybiBpIDwgcGhpcy5zaXplKCk7IH0KICAgICAKLSAgICBib29sIGlzSW5QaGlzKE5vZGVJbmRl
eCBub2RlSW5kZXgpIGNvbnN0CisgICAgYm9vbCBpc0luUGhpcyhOb2RlKiBub2RlKSBjb25zdAog
ICAgIHsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwaGlzLnNpemUoKTsgKytpKSB7
Ci0gICAgICAgICAgICBpZiAocGhpc1tpXSA9PSBub2RlSW5kZXgpCisgICAgICAgICAgICBpZiAo
cGhpc1tpXSA9PSBub2RlKQogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9
CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgCi0gICAgYm9vbCBpc0luQmxvY2so
Tm9kZUluZGV4IGluZGV4KSBjb25zdAorICAgIGJvb2wgaXNJbkJsb2NrKE5vZGUqIG15Tm9kZSkg
Y29uc3QKICAgICB7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtTm9kZXMoKTsg
KytpKSB7Ci0gICAgICAgICAgICBpZiAobm9kZUluZGV4KGkpID09IGluZGV4KQorICAgICAgICAg
ICAgaWYgKG5vZGUoaSkgPT0gbXlOb2RlKQogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgICAgICB9CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgCiAjZGVmaW5lIERG
R19ERUZJTkVfQVBQRU5EX05PREUodGVtcGxhdGVQcmUsIHRlbXBsYXRlUG9zdCwgdHlwZVBhcmFt
cywgdmFsdWVQYXJhbXNDb21tYSwgdmFsdWVQYXJhbXMsIHZhbHVlQXJncykgXAotICAgIHRlbXBs
YXRlUHJlIHR5cGVQYXJhbXMgdGVtcGxhdGVQb3N0IE5vZGVJbmRleCBhcHBlbmROb2RlKEdyYXBo
JiwgUmVmQ2hpbGRyZW5Nb2RlLCBSZWZOb2RlTW9kZSwgU3BlY3VsYXRlZFR5cGUgdmFsdWVQYXJh
bXNDb21tYSB2YWx1ZVBhcmFtcyk7CisgICAgdGVtcGxhdGVQcmUgdHlwZVBhcmFtcyB0ZW1wbGF0
ZVBvc3QgTm9kZSogYXBwZW5kTm9kZShHcmFwaCYsIFJlZkNoaWxkcmVuTW9kZSwgUmVmTm9kZU1v
ZGUsIFNwZWN1bGF0ZWRUeXBlIHZhbHVlUGFyYW1zQ29tbWEgdmFsdWVQYXJhbXMpOwogICAgIERG
R19WQVJJQURJQ19URU1QTEFURV9GVU5DVElPTihERkdfREVGSU5FX0FQUEVORF9OT0RFKQogI3Vu
ZGVmIERGR19ERUZJTkVfQVBQRU5EX05PREUKICAgICAKQEAgLTEyMSwxMSArMTIxLDExIEBAIHN0
cnVjdCBCYXNpY0Jsb2NrIDogVmVjdG9yPE5vZGVJbmRleCwgOD4KICNlbmRpZgogICAgIGJvb2wg
aXNSZWFjaGFibGU7CiAgICAgCi0gICAgVmVjdG9yPE5vZGVJbmRleD4gcGhpczsKKyAgICBWZWN0
b3I8Tm9kZSo+IHBoaXM7CiAgICAgUHJlZGVjZXNzb3JMaXN0IG1fcHJlZGVjZXNzb3JzOwogICAg
IAotICAgIE9wZXJhbmRzPE5vZGVJbmRleCwgTm9kZUluZGV4VHJhaXRzPiB2YXJpYWJsZXNBdEhl
YWQ7Ci0gICAgT3BlcmFuZHM8Tm9kZUluZGV4LCBOb2RlSW5kZXhUcmFpdHM+IHZhcmlhYmxlc0F0
VGFpbDsKKyAgICBPcGVyYW5kczxOb2RlKiwgTm9kZVBvaW50ZXJUcmFpdHM+IHZhcmlhYmxlc0F0
SGVhZDsKKyAgICBPcGVyYW5kczxOb2RlKiwgTm9kZVBvaW50ZXJUcmFpdHM+IHZhcmlhYmxlc0F0
VGFpbDsKICAgICAKICAgICBPcGVyYW5kczxBYnN0cmFjdFZhbHVlPiB2YWx1ZXNBdEhlYWQ7CiAg
ICAgT3BlcmFuZHM8QWJzdHJhY3RWYWx1ZT4gdmFsdWVzQXRUYWlsOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrSW5saW5lcy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9ja0lubGluZXMuaAkocmV2aXNpb24g
MTQwMzA2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrSW5saW5l
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw5ICszNCw5IEBACiBuYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIERGRyB7CiAKICNkZWZpbmUgREZHX0RFRklORV9BUFBFTkRfTk9ERSh0ZW1wbGF0ZVBy
ZSwgdGVtcGxhdGVQb3N0LCB0eXBlUGFyYW1zLCB2YWx1ZVBhcmFtc0NvbW1hLCB2YWx1ZVBhcmFt
cywgdmFsdWVBcmdzKSBcCi0gICAgdGVtcGxhdGVQcmUgdHlwZVBhcmFtcyB0ZW1wbGF0ZVBvc3Qg
Tm9kZUluZGV4IEJhc2ljQmxvY2s6OmFwcGVuZE5vZGUoR3JhcGgmIGdyYXBoLCBSZWZDaGlsZHJl
bk1vZGUgcmVmQ2hpbGRyZW5Nb2RlLCBSZWZOb2RlTW9kZSByZWZOb2RlTW9kZSwgU3BlY3VsYXRl
ZFR5cGUgdHlwZSB2YWx1ZVBhcmFtc0NvbW1hIHZhbHVlUGFyYW1zKSBcCisgICAgdGVtcGxhdGVQ
cmUgdHlwZVBhcmFtcyB0ZW1wbGF0ZVBvc3QgTm9kZSogQmFzaWNCbG9jazo6YXBwZW5kTm9kZShH
cmFwaCYgZ3JhcGgsIFJlZkNoaWxkcmVuTW9kZSByZWZDaGlsZHJlbk1vZGUsIFJlZk5vZGVNb2Rl
IHJlZk5vZGVNb2RlLCBTcGVjdWxhdGVkVHlwZSB0eXBlIHZhbHVlUGFyYW1zQ29tbWEgdmFsdWVQ
YXJhbXMpIFwKICAgICB7IFwKLSAgICAgICAgTm9kZUluZGV4IHJlc3VsdCA9IGdyYXBoLmFkZE5v
ZGUocmVmQ2hpbGRyZW5Nb2RlLCByZWZOb2RlTW9kZSwgdHlwZSB2YWx1ZVBhcmFtc0NvbW1hIHZh
bHVlQXJncyk7IFwKKyAgICAgICAgTm9kZSogcmVzdWx0ID0gZ3JhcGguYWRkTm9kZShyZWZDaGls
ZHJlbk1vZGUsIHJlZk5vZGVNb2RlLCB0eXBlIHZhbHVlUGFyYW1zQ29tbWEgdmFsdWVBcmdzKTsg
XAogICAgICAgICBhcHBlbmQocmVzdWx0KTsgXAogICAgICAgICByZXR1cm4gcmVzdWx0OyBcCiAg
ICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBh
cnNlci5jcHAJKHJldmlzaW9uIDE0MDMwNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQnl0ZUNvZGVQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMjUwLDkgKzMyNTAsNiBA
QCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwcm9jZXNzUGhpU3RhY2soKQogICAgICAgICBpZiAoIWVu
dHJ5Lm1fYmxvY2stPmlzUmVhY2hhYmxlKQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAg
IAotICAgICAgICBpZiAoIWVudHJ5Lm1fYmxvY2stPmlzUmVhY2hhYmxlKQotICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgIAogICAgICAgICBQcmVkZWNlc3Nvckxpc3QmIHByZWRlY2Vzc29y
cyA9IGVudHJ5Lm1fYmxvY2stPm1fcHJlZGVjZXNzb3JzOwogICAgICAgICB1bnNpZ25lZCB2YXJO
byA9IGVudHJ5Lm1fdmFyTm87CiAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogZGF0YUZvclBo
aSA9IG1fZ3JhcGhbZW50cnkubV9waGldLnZhcmlhYmxlQWNjZXNzRGF0YSgpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb24uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSw0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZHQ29tbW9uLmgiCisKKyNpZiBFTkFCTEUo
REZHX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCit2b2lkIE5vZGVQ
b2ludGVyVHJhaXRzOjpkdW1wKE5vZGUqIHZhbHVlLCBQcmludFN0cmVhbSYgb3V0KQoreworICAg
IG91dC5wcmludCh2YWx1ZSk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2Vu
ZGlmIC8vIEVOQUJMRShERkdfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0NvbW1vbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Q29tbW9uLmgJKHJldmlzaW9uIDE0MDMwNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQ29tbW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDExLCAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMSwgMjAxMiwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTgxLDE2ICs4MSwxNCBAQAog
CiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKLS8vIFR5cGUgZm9yIGEgcmVmZXJl
bmNlIHRvIGFub3RoZXIgbm9kZSBpbiB0aGUgZ3JhcGguCi10eXBlZGVmIHVpbnQzMl90IE5vZGVJ
bmRleDsKLXN0YXRpYyBjb25zdCBOb2RlSW5kZXggTm9Ob2RlID0gVUlOVF9NQVg7CitjbGFzcyBO
b2RlOwogCiB0eXBlZGVmIHVpbnQzMl90IEJsb2NrSW5kZXg7CiBzdGF0aWMgY29uc3QgQmxvY2tJ
bmRleCBOb0Jsb2NrID0gVUlOVF9NQVg7CiAKLXN0cnVjdCBOb2RlSW5kZXhUcmFpdHMgewotICAg
IHN0YXRpYyBOb2RlSW5kZXggZGVmYXVsdFZhbHVlKCkgeyByZXR1cm4gTm9Ob2RlOyB9Ci0gICAg
c3RhdGljIHZvaWQgZHVtcChOb2RlSW5kZXggdmFsdWUsIFByaW50U3RyZWFtJiBvdXQpCitzdHJ1
Y3QgTm9kZVBvaW50ZXJUcmFpdHMgeworICAgIHN0YXRpYyBOb2RlKiBkZWZhdWx0VmFsdWUoKSB7
IHJldHVybiAwOyB9CisgICAgc3RhdGljIHZvaWQgZHVtcChOb2RlKiB2YWx1ZSwgUHJpbnRTdHJl
YW0mIG91dCk7CiAgICAgewogICAgICAgICBpZiAodmFsdWUgPT0gTm9Ob2RlKQogICAgICAgICAg
ICAgb3V0LnByaW50ZigiLSIpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdF
ZGdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdFZGdlLmgJ
KHJldmlzaW9uIDE0MDMwNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRWRnZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEs
IDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC00Myw0MSArNDMsMzkgQEAgcHVibGljOgogICAgIHsKICAgICB9CiAg
ICAgCi0gICAgZXhwbGljaXQgRWRnZShOb2RlSW5kZXggbm9kZUluZGV4KQotICAgICAgICA6IG1f
ZW5jb2RlZFdvcmQobWFrZVdvcmQobm9kZUluZGV4LCBVbnR5cGVkVXNlKSkKKyAgICBleHBsaWNp
dCBFZGdlKE5vZGUqIG5vZGUpCisgICAgICAgIDogbV9lbmNvZGVkV29yZChtYWtlV29yZChub2Rl
LCBVbnR5cGVkVXNlKSkKICAgICB7CiAgICAgfQogICAgIAotICAgIEVkZ2UoTm9kZUluZGV4IG5v
ZGVJbmRleCwgVXNlS2luZCB1c2VLaW5kKQotICAgICAgICA6IG1fZW5jb2RlZFdvcmQobWFrZVdv
cmQobm9kZUluZGV4LCB1c2VLaW5kKSkKKyAgICBFZGdlKE5vZGUqIG5vZGUsIFVzZUtpbmQgdXNl
S2luZCkKKyAgICAgICAgOiBtX2VuY29kZWRXb3JkKG1ha2VXb3JkKG5vZGUsIHVzZUtpbmQpKQog
ICAgIHsKICAgICB9CiAgICAgCi0gICAgTm9kZUluZGV4IGluZGV4VW5jaGVja2VkKCkgY29uc3Qg
eyByZXR1cm4gbV9lbmNvZGVkV29yZCA+PiBzaGlmdCgpOyB9Ci0gICAgTm9kZUluZGV4IGluZGV4
KCkgY29uc3QKLSAgICB7Ci0gICAgICAgIEFTU0VSVChpc1NldCgpKTsKLSAgICAgICAgcmV0dXJu
IG1fZW5jb2RlZFdvcmQgPj4gc2hpZnQoKTsKLSAgICB9Ci0gICAgdm9pZCBzZXRJbmRleChOb2Rl
SW5kZXggbm9kZUluZGV4KQorICAgIE5vZGUqIG5vZGUoKSBjb25zdCB7IHJldHVybiBtX2VuY29k
ZWRXb3JkICYgfigoMSA8PCBzaGlmdCgpKSAtIDEpOyB9CisgICAgTm9kZSYgb3BlcmF0b3IqKCkg
Y29uc3QgeyByZXR1cm4gKmdldCgpOyB9CisgICAgTm9kZSogb3BlcmF0b3ItPigpIGNvbnN0IHsg
cmV0dXJuIGdldCgpOyB9CisgICAgCisgICAgdm9pZCBzZXROb2RlKE5vZGUqIG5vZGUpCiAgICAg
ewotICAgICAgICBtX2VuY29kZWRXb3JkID0gbWFrZVdvcmQobm9kZUluZGV4LCB1c2VLaW5kKCkp
OworICAgICAgICBtX2VuY29kZWRXb3JkID0gbWFrZVdvcmQobm9kZSwgdXNlS2luZCgpKTsKICAg
ICB9CiAgICAgCiAgICAgVXNlS2luZCB1c2VLaW5kKCkgY29uc3QKICAgICB7Ci0gICAgICAgIEFT
U0VSVChpc1NldCgpKTsKKyAgICAgICAgQVNTRVJUKG5vZGUoKSk7CiAgICAgICAgIHVuc2lnbmVk
IG1hc2tlZCA9IG1fZW5jb2RlZFdvcmQgJiAoKCgxIDw8IHNoaWZ0KCkpIC0gMSkpOwogICAgICAg
ICBBU1NFUlQobWFza2VkIDwgTGFzdFVzZUtpbmQpOwogICAgICAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8VXNlS2luZD4obWFza2VkKTsKICAgICB9CiAgICAgdm9pZCBzZXRVc2VLaW5kKFVzZUtpbmQg
dXNlS2luZCkKICAgICB7Ci0gICAgICAgIEFTU0VSVChpc1NldCgpKTsKLSAgICAgICAgbV9lbmNv
ZGVkV29yZCA9IG1ha2VXb3JkKGluZGV4KCksIHVzZUtpbmQpOworICAgICAgICBBU1NFUlQobm9k
ZSgpKTsKKyAgICAgICAgbV9lbmNvZGVkV29yZCA9IG1ha2VXb3JkKG5vZGUoKSwgdXNlS2luZCk7
CiAgICAgfQogICAgIAotICAgIGJvb2wgaXNTZXQoKSBjb25zdCB7IHJldHVybiBpbmRleFVuY2hl
Y2tlZCgpICE9IE5vTm9kZTsgfQorICAgIGJvb2wgaXNTZXQoKSBjb25zdCB7IHJldHVybiAhIW5v
ZGUoKTsgfQogICAgIAogICAgIHR5cGVkZWYgdm9pZCogRWRnZTo6KlVuc3BlY2lmaWVkQm9vbFR5
cGU7CiAgICAgb3BlcmF0b3IgVW5zcGVjaWZpZWRCb29sVHlwZSooKSBjb25zdCB7IHJldHVybiBy
ZWludGVycHJldF9jYXN0PFVuc3BlY2lmaWVkQm9vbFR5cGUqPihpc1NldCgpKTsgfQpAQCAtOTYs
MTcgKzk0LDE4IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIEFkamFjZW5j
eUxpc3Q7CiAgICAgCi0gICAgc3RhdGljIHVpbnQzMl90IHNoaWZ0KCkgeyByZXR1cm4gNDsgfQor
ICAgIHN0YXRpYyB1aW50MzJfdCBzaGlmdCgpIHsgcmV0dXJuIDI7IH0KICAgICAKLSAgICBzdGF0
aWMgaW50MzJfdCBtYWtlV29yZChOb2RlSW5kZXggbm9kZUluZGV4LCBVc2VLaW5kIHVzZUtpbmQp
CisgICAgc3RhdGljIHVpbnRwdHJfdCBtYWtlV29yZChOb2RlKiBub2RlLCBVc2VLaW5kIHVzZUtp
bmQpCiAgICAgewotICAgICAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8dWludDMyX3Q+KCgoc3RhdGlj
X2Nhc3Q8aW50MzJfdD4obm9kZUluZGV4KSA8PCBzaGlmdCgpKSA+PiBzaGlmdCgpKSkgPT0gbm9k
ZUluZGV4KTsKKyAgICAgICAgdWludHB0cl90IHZhbHVlID0gYml0d2lzZV9jYXN0PHVpbnRwdHJf
dD4obm9kZSk7CisgICAgICAgIEFTU0VSVCghKHZhbHVlICYgKCgxIDw8IHNoaWZ0KCkpIC0gMSkp
KTsKICAgICAgICAgQVNTRVJUKHVzZUtpbmQgPj0gMCAmJiB1c2VLaW5kIDwgTGFzdFVzZUtpbmQp
OwogICAgICAgICBBU1NFUlQoTGFzdFVzZUtpbmQgPD0gKDEgPDwgc2hpZnQoKSkpOwotICAgICAg
ICByZXR1cm4gKG5vZGVJbmRleCA8PCBzaGlmdCgpKSB8IHVzZUtpbmQ7CisgICAgICAgIHJldHVy
biB2YWx1ZSB8IHN0YXRpY19jYXN0PHVpbnRwdHJfdD4odXNlS2luZCk7CiAgICAgfQogICAgIAot
ICAgIGludDMyX3QgbV9lbmNvZGVkV29yZDsKKyAgICB1aW50cHRyX3QgbV9lbmNvZGVkV29yZDsK
IH07CiAKIGlubGluZSBib29sIG9wZXJhdG9yPT0oRWRnZSBub2RlVXNlLCBOb2RlSW5kZXggbm9k
ZUluZGV4KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2Uu
Y3BwCShyZXZpc2lvbiAxNDAzMDYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Zp
eHVwUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTIsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02NCwxNSArNjQsMTUgQEAgcHJpdmF0ZToKICAg
ICAgICAgbV9pbnNlcnRpb25TZXQuZXhlY3V0ZShibG9jayk7CiAgICAgfQogICAgIAotICAgIHZv
aWQgZml4dXBOb2RlKE5vZGUmIG5vZGUpCisgICAgdm9pZCBmaXh1cE5vZGUoTm9kZSogbm9kZSkK
ICAgICB7Ci0gICAgICAgIGlmICghbm9kZS5zaG91bGRHZW5lcmF0ZSgpKQorICAgICAgICBpZiAo
IW5vZGUtPnNob3VsZEdlbmVyYXRlKCkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIAot
ICAgICAgICBOb2RlVHlwZSBvcCA9IG5vZGUub3AoKTsKKyAgICAgICAgTm9kZVR5cGUgb3AgPSBu
b2RlLT5vcCgpOwogCiAjaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQot
ICAgICAgICBkYXRhTG9nRigiICAgJXMgQCV1OiAiLCBHcmFwaDo6b3BOYW1lKG9wKSwgbV9jb21w
aWxlSW5kZXgpOworICAgICAgICBkYXRhTG9nRigiICAgJXMgQCV1OiAiLCBHcmFwaDo6b3BOYW1l
KG9wKSwgbm9kZS0+aW5kZXgoKSk7CiAjZW5kaWYKICAgICAgICAgCiAgICAgICAgIHN3aXRjaCAo
b3ApIHsKQEAgLTgwLDgwICs4MCw3MSBAQCBwcml2YXRlOgogICAgICAgICAgICAgaWYgKG1fZ3Jh
cGgubV9maXhwb2ludFN0YXRlID4gQmVmb3JlRml4cG9pbnQpCiAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIE5vZGUqIG5vZGVQdHIgPSAmbm9kZTsKLSAg
ICAgICAgICAgIAotICAgICAgICAgICAgaWYgKCFpc0ludDMyU3BlY3VsYXRpb24obV9ncmFwaFtt
X2NvbXBpbGVJbmRleF0ucHJlZGljdGlvbigpKSkKKyAgICAgICAgICAgIGlmICghaXNJbnQzMlNw
ZWN1bGF0aW9uKG5vZGUtPnByZWRpY3Rpb24oKSkpCiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICBpZiAoY29kZUJsb2NrKCktPmlkZW50aWZpZXIobm9kZVB0ci0+aWRlbnRpZmll
ck51bWJlcigpKSAhPSBnbG9iYWxEYXRhKCkucHJvcGVydHlOYW1lcy0+bGVuZ3RoKQorICAgICAg
ICAgICAgaWYgKGNvZGVCbG9jaygpLT5pZGVudGlmaWVyKG5vZGUtPmlkZW50aWZpZXJOdW1iZXIo
KSkgIT0gZ2xvYmFsRGF0YSgpLnByb3BlcnR5TmFtZXMtPmxlbmd0aCkKICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgIEFycmF5UHJvZmlsZSogYXJyYXlQcm9maWxlID0gCi0gICAg
ICAgICAgICAgICAgbV9ncmFwaC5iYXNlbGluZUNvZGVCbG9ja0Zvcihub2RlUHRyLT5jb2RlT3Jp
Z2luKS0+Z2V0QXJyYXlQcm9maWxlKAotICAgICAgICAgICAgICAgICAgICBub2RlUHRyLT5jb2Rl
T3JpZ2luLmJ5dGVjb2RlSW5kZXgpOworICAgICAgICAgICAgICAgIG1fZ3JhcGguYmFzZWxpbmVD
b2RlQmxvY2tGb3Iobm9kZS0+Y29kZU9yaWdpbiktPmdldEFycmF5UHJvZmlsZSgKKyAgICAgICAg
ICAgICAgICAgICAgbm9kZS0+Y29kZU9yaWdpbi5ieXRlY29kZUluZGV4KTsKICAgICAgICAgICAg
IEFycmF5TW9kZSBhcnJheU1vZGUgPSBBcnJheU1vZGUoQXJyYXk6OlNlbGVjdFVzaW5nUHJlZGlj
dGlvbnMpOwogICAgICAgICAgICAgaWYgKGFycmF5UHJvZmlsZSkgewotICAgICAgICAgICAgICAg
IGFycmF5UHJvZmlsZS0+Y29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKG1fZ3JhcGguYmFzZWxpbmVD
b2RlQmxvY2tGb3Iobm9kZS5jb2RlT3JpZ2luKSk7CisgICAgICAgICAgICAgICAgYXJyYXlQcm9m
aWxlLT5jb21wdXRlVXBkYXRlZFByZWRpY3Rpb24obV9ncmFwaC5iYXNlbGluZUNvZGVCbG9ja0Zv
cihub2RlLT5jb2RlT3JpZ2luKSk7CiAgICAgICAgICAgICAgICAgYXJyYXlNb2RlID0gQXJyYXlN
b2RlOjpmcm9tT2JzZXJ2ZWQoYXJyYXlQcm9maWxlLCBBcnJheTo6UmVhZCwgZmFsc2UpOwogICAg
ICAgICAgICAgICAgIGFycmF5TW9kZSA9IGFycmF5TW9kZS5yZWZpbmUoCi0gICAgICAgICAgICAg
ICAgICAgIG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ucHJlZGljdGlvbigpLAotICAgICAgICAgICAg
ICAgICAgICBtX2dyYXBoW21fY29tcGlsZUluZGV4XS5wcmVkaWN0aW9uKCkpOworICAgICAgICAg
ICAgICAgICAgICBub2RlLT5jaGlsZDEoKS0+cHJlZGljdGlvbigpLCBub2RlLT5wcmVkaWN0aW9u
KCkpOwogICAgICAgICAgICAgICAgIGlmIChhcnJheU1vZGUuc3VwcG9ydHNMZW5ndGgoKSAmJiBh
cnJheVByb2ZpbGUtPmhhc0RlZmluaXRlU3RydWN0dXJlKCkpIHsKICAgICAgICAgICAgICAgICAg
ICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKICAgICAgICAgICAgICAgICAgICAgICAgIG1f
aW5kZXhJbkJsb2NrLCBSZWZDaGlsZHJlbiwgRG9udFJlZk5vZGUsIFNwZWNOb25lLCBDaGVja1N0
cnVjdHVyZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVQdHItPmNvZGVPcmlnaW4sIE9w
SW5mbyhtX2dyYXBoLmFkZFN0cnVjdHVyZVNldChhcnJheVByb2ZpbGUtPmV4cGVjdGVkU3RydWN0
dXJlKCkpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVQdHItPmNoaWxkMSgpLmluZGV4
KCkpOwotICAgICAgICAgICAgICAgICAgICBub2RlUHRyID0gJm1fZ3JhcGhbbV9jb21waWxlSW5k
ZXhdOworICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y29kZU9yaWdpbiwgT3BJbmZvKG1f
Z3JhcGguYWRkU3RydWN0dXJlU2V0KGFycmF5UHJvZmlsZS0+ZXhwZWN0ZWRTdHJ1Y3R1cmUoKSkp
LAorICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkubm9kZSgpKTsKICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGFycmF5
TW9kZSA9IGFycmF5TW9kZS5yZWZpbmUoCi0gICAgICAgICAgICAgICAgICAgIG1fZ3JhcGhbbm9k
ZS5jaGlsZDEoKV0ucHJlZGljdGlvbigpLAotICAgICAgICAgICAgICAgICAgICBtX2dyYXBoW21f
Y29tcGlsZUluZGV4XS5wcmVkaWN0aW9uKCkpOwotICAgICAgICAgICAgfQorICAgICAgICAgICAg
fSBlbHNlCisgICAgICAgICAgICAgICAgYXJyYXlNb2RlID0gYXJyYXlNb2RlLnJlZmluZShub2Rl
LT5jaGlsZDEoKS0+cHJlZGljdGlvbigpLCBub2RlLT5wcmVkaWN0aW9uKCkpOwogICAgICAgICAg
ICAgaWYgKCFhcnJheU1vZGUuc3VwcG9ydHNMZW5ndGgoKSkKICAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgIG5vZGVQdHItPnNldE9wKEdldEFycmF5TGVuZ3RoKTsKLSAgICAgICAg
ICAgIEFTU0VSVChub2RlUHRyLT5mbGFncygpICYgTm9kZU11c3RHZW5lcmF0ZSk7Ci0gICAgICAg
ICAgICBub2RlUHRyLT5jbGVhckZsYWdzKE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlQ2xvYmJlcnNX
b3JsZCk7Ci0gICAgICAgICAgICBtX2dyYXBoLmRlcmVmKG1fY29tcGlsZUluZGV4KTsKLSAgICAg
ICAgICAgIG5vZGVQdHItPnNldEFycmF5TW9kZShhcnJheU1vZGUpOworICAgICAgICAgICAgbm9k
ZS0+c2V0T3AoR2V0QXJyYXlMZW5ndGgpOworICAgICAgICAgICAgQVNTRVJUKG5vZGUtPmZsYWdz
KCkgJiBOb2RlTXVzdEdlbmVyYXRlKTsKKyAgICAgICAgICAgIG5vZGUtPmNsZWFyRmxhZ3MoTm9k
ZU11c3RHZW5lcmF0ZSB8IE5vZGVDbG9iYmVyc1dvcmxkKTsKKyAgICAgICAgICAgIG1fZ3JhcGgu
ZGVyZWYobm9kZSk7CisgICAgICAgICAgICBub2RlLT5zZXRBcnJheU1vZGUoYXJyYXlNb2RlKTsK
ICAgICAgICAgICAgIAotICAgICAgICAgICAgTm9kZUluZGV4IHN0b3JhZ2UgPSBjaGVja0FycmF5
KGFycmF5TW9kZSwgbm9kZVB0ci0+Y29kZU9yaWdpbiwgbm9kZVB0ci0+Y2hpbGQxKCkuaW5kZXgo
KSwgTm9Ob2RlLCBsZW5ndGhOZWVkc1N0b3JhZ2UsIG5vZGVQdHItPnNob3VsZEdlbmVyYXRlKCkp
OwotICAgICAgICAgICAgaWYgKHN0b3JhZ2UgPT0gTm9Ob2RlKQorICAgICAgICAgICAgTm9kZSog
c3RvcmFnZSA9IGNoZWNrQXJyYXkoYXJyYXlNb2RlLCBub2RlLT5jb2RlT3JpZ2luLCBub2RlLT5j
aGlsZDEoKS5ub2RlKCksIDAsIGxlbmd0aE5lZWRzU3RvcmFnZSwgbm9kZS0+c2hvdWxkR2VuZXJh
dGUoKSk7CisgICAgICAgICAgICBpZiAoIXN0b3JhZ2UpCiAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIG5vZGVQdHIgPSAmbV9ncmFwaFttX2NvbXBpbGVJ
bmRleF07Ci0gICAgICAgICAgICBub2RlUHRyLT5jaGlsZHJlbi5jaGlsZDIoKSA9IEVkZ2Uoc3Rv
cmFnZSk7CisgICAgICAgICAgICBub2RlLT5jaGlsZHJlbi5jaGlsZDIoKSA9IEVkZ2Uoc3RvcmFn
ZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIEdldEluZGV4
ZWRQcm9wZXJ0eVN0b3JhZ2U6IHsKLSAgICAgICAgICAgIEFTU0VSVChub2RlLmFycmF5TW9kZSgp
LmNhbkNTRVN0b3JhZ2UoKSk7CisgICAgICAgICAgICBBU1NFUlQobm9kZS0+YXJyYXlNb2RlKCku
Y2FuQ1NFU3RvcmFnZSgpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAg
IGNhc2UgR2V0QnlWYWw6IHsKLSAgICAgICAgICAgIG5vZGUuc2V0QXJyYXlNb2RlKAotICAgICAg
ICAgICAgICAgIG5vZGUuYXJyYXlNb2RlKCkucmVmaW5lKAotICAgICAgICAgICAgICAgICAgICBt
X2dyYXBoW25vZGUuY2hpbGQxKCldLnByZWRpY3Rpb24oKSwKLSAgICAgICAgICAgICAgICAgICAg
bV9ncmFwaFtub2RlLmNoaWxkMigpXS5wcmVkaWN0aW9uKCksCi0gICAgICAgICAgICAgICAgICAg
IFNwZWNOb25lLCBub2RlLmZsYWdzKCkpKTsKKyAgICAgICAgICAgIG5vZGUtPnNldEFycmF5TW9k
ZSgKKyAgICAgICAgICAgICAgICBub2RlLT5hcnJheU1vZGUoKS5yZWZpbmUoCisgICAgICAgICAg
ICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLT5wcmVkaWN0aW9uKCksCisgICAgICAgICAgICAgICAg
ICAgIG5vZGUtPmNoaWxkMigpLT5wcmVkaWN0aW9uKCksCisgICAgICAgICAgICAgICAgICAgIFNw
ZWNOb25lLCBub2RlLT5mbGFncygpKSk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGJsZXNz
QXJyYXlPcGVyYXRpb24obm9kZS5jaGlsZDEoKSwgbm9kZS5jaGlsZDIoKSwgMik7CisgICAgICAg
ICAgICBibGVzc0FycmF5T3BlcmF0aW9uKG5vZGUtPmNoaWxkMSgpLCBub2RlLT5jaGlsZDIoKSwg
Mik7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIE5vZGUqIG5vZGVQdHIgPSAmbV9ncmFwaFtt
X2NvbXBpbGVJbmRleF07Ci0gICAgICAgICAgICBBcnJheU1vZGUgYXJyYXlNb2RlID0gbm9kZVB0
ci0+YXJyYXlNb2RlKCk7CisgICAgICAgICAgICBBcnJheU1vZGUgYXJyYXlNb2RlID0gbm9kZS0+
YXJyYXlNb2RlKCk7CiAgICAgICAgICAgICBpZiAoYXJyYXlNb2RlLnR5cGUoKSA9PSBBcnJheTo6
RG91YmxlCiAgICAgICAgICAgICAgICAgJiYgYXJyYXlNb2RlLmFycmF5Q2xhc3MoKSA9PSBBcnJh
eTo6T3JpZ2luYWxBcnJheQogICAgICAgICAgICAgICAgICYmIGFycmF5TW9kZS5zcGVjdWxhdGlv
bigpID09IEFycmF5OjpJbkJvdW5kcwogICAgICAgICAgICAgICAgICYmIGFycmF5TW9kZS5jb252
ZXJzaW9uKCkgPT0gQXJyYXk6OkFzSXMKLSAgICAgICAgICAgICAgICAmJiBtX2dyYXBoLmdsb2Jh
bE9iamVjdEZvcihub2RlUHRyLT5jb2RlT3JpZ2luKS0+YXJyYXlQcm90b3R5cGVDaGFpbklzU2Fu
ZSgpCi0gICAgICAgICAgICAgICAgJiYgIShub2RlUHRyLT5mbGFncygpICYgTm9kZVVzZWRBc090
aGVyKSkKLSAgICAgICAgICAgICAgICBub2RlUHRyLT5zZXRBcnJheU1vZGUoYXJyYXlNb2RlLndp
dGhTcGVjdWxhdGlvbihBcnJheTo6U2FuZUNoYWluKSk7CisgICAgICAgICAgICAgICAgJiYgbV9n
cmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+Y29kZU9yaWdpbiktPmFycmF5UHJvdG90eXBlQ2hh
aW5Jc1NhbmUoKQorICAgICAgICAgICAgICAgICYmICEobm9kZS0+ZmxhZ3MoKSAmIE5vZGVVc2Vk
QXNPdGhlcikpCisgICAgICAgICAgICAgICAgbm9kZS0+c2V0QXJyYXlNb2RlKGFycmF5TW9kZS53
aXRoU3BlY3VsYXRpb24oQXJyYXk6OlNhbmVDaGFpbikpOwogICAgICAgICAgICAgCiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIFN0cmluZ0NoYXJBdDoKICAgICAg
ICAgY2FzZSBTdHJpbmdDaGFyQ29kZUF0OiB7CiAgICAgICAgICAgICAvLyBDdXJyZW50bHkgd2Ug
aGF2ZSBubyBnb29kIHdheSBvZiByZWZpbmluZyB0aGVzZS4KLSAgICAgICAgICAgIEFTU0VSVChu
b2RlLmFycmF5TW9kZSgpID09IEFycmF5TW9kZShBcnJheTo6U3RyaW5nKSk7Ci0gICAgICAgICAg
ICBibGVzc0FycmF5T3BlcmF0aW9uKG5vZGUuY2hpbGQxKCksIG5vZGUuY2hpbGQyKCksIDIpOwor
ICAgICAgICAgICAgQVNTRVJUKG5vZGUtPmFycmF5TW9kZSgpID09IEFycmF5TW9kZShBcnJheTo6
U3RyaW5nKSk7CisgICAgICAgICAgICBibGVzc0FycmF5T3BlcmF0aW9uKG5vZGUtPmNoaWxkMSgp
LCBub2RlLT5jaGlsZDIoKSwgMik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAg
ICAgICAgICAgCkBAIC0xNjcsMTUgKzE1OCwxNCBAQCBwcml2YXRlOgogICAgICAgICAgICAgLy8g
aWdub3JlZC4gVGhhdCdzIGJlY2F1c2UgQXJyYXlQdXNoIGNhbid0IGhhbmRsZSBhbnkgYXJyYXkg
bW9kZXMgdGhhdCBhcmVuJ3QKICAgICAgICAgICAgIC8vIGFycmF5LXJlbGF0ZWQgLSBzbyBpZiBy
ZWZpbmUoKSB0dXJuZWQgdGhpcyBpbnRvIGEgIkdlbmVyaWMiIEFycmF5UHVzaCB0aGVuCiAgICAg
ICAgICAgICAvLyB0aGF0IHdvdWxkIGJyZWFrIHRoaW5ncy4KLSAgICAgICAgICAgIG5vZGUuc2V0
QXJyYXlNb2RlKAotICAgICAgICAgICAgICAgIG5vZGUuYXJyYXlNb2RlKCkucmVmaW5lKAotICAg
ICAgICAgICAgICAgICAgICBtX2dyYXBoW25vZGUuY2hpbGQxKCldLnByZWRpY3Rpb24oKSAmIFNw
ZWNDZWxsLAorICAgICAgICAgICAgbm9kZS0+c2V0QXJyYXlNb2RlKAorICAgICAgICAgICAgICAg
IG5vZGUtPmFycmF5TW9kZSgpLnJlZmluZSgKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hp
bGQxKCktPnByZWRpY3Rpb24oKSAmIFNwZWNDZWxsLAogICAgICAgICAgICAgICAgICAgICBTcGVj
SW50MzIsCi0gICAgICAgICAgICAgICAgICAgIG1fZ3JhcGhbbm9kZS5jaGlsZDIoKV0ucHJlZGlj
dGlvbigpKSk7Ci0gICAgICAgICAgICBibGVzc0FycmF5T3BlcmF0aW9uKG5vZGUuY2hpbGQxKCks
IEVkZ2UoKSwgMik7CisgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMigpLT5wcmVkaWN0
aW9uKCkpKTsKKyAgICAgICAgICAgIGJsZXNzQXJyYXlPcGVyYXRpb24obm9kZS0+Y2hpbGQxKCks
IEVkZ2UoKSwgMik7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIE5vZGUqIG5vZGVQdHIgPSAm
bV9ncmFwaFttX2NvbXBpbGVJbmRleF07Ci0gICAgICAgICAgICBzd2l0Y2ggKG5vZGVQdHItPmFy
cmF5TW9kZSgpLnR5cGUoKSkgeworICAgICAgICAgICAgc3dpdGNoIChub2RlLT5hcnJheU1vZGUo
KS50eXBlKCkpIHsKICAgICAgICAgICAgIGNhc2UgQXJyYXk6OkRvdWJsZToKICAgICAgICAgICAg
ICAgICBmaXhEb3VibGVFZGdlKDEpOwogICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTg2LDE1
ICsxNzYsMTUgQEAgcHJpdmF0ZToKICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgIGNh
c2UgQXJyYXlQb3A6IHsKLSAgICAgICAgICAgIGJsZXNzQXJyYXlPcGVyYXRpb24obm9kZS5jaGls
ZDEoKSwgRWRnZSgpLCAxKTsKKyAgICAgICAgICAgIGJsZXNzQXJyYXlPcGVyYXRpb24obm9kZS0+
Y2hpbGQxKCksIEVkZ2UoKSwgMSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAg
ICAgICAgICAgCiAgICAgICAgIGNhc2UgVmFsdWVUb0ludDMyOiB7Ci0gICAgICAgICAgICBpZiAo
bV9ncmFwaFtub2RlLmNoaWxkMSgpXS5zaG91bGRTcGVjdWxhdGVOdW1iZXIoKQotICAgICAgICAg
ICAgICAgICYmIG5vZGUubXVzdEdlbmVyYXRlKCkpIHsKLSAgICAgICAgICAgICAgICBub2RlLmNs
ZWFyRmxhZ3MoTm9kZU11c3RHZW5lcmF0ZSk7Ci0gICAgICAgICAgICAgICAgbV9ncmFwaC5kZXJl
ZihtX2NvbXBpbGVJbmRleCk7CisgICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3Vs
ZFNwZWN1bGF0ZU51bWJlcigpCisgICAgICAgICAgICAgICAgJiYgbm9kZS0+bXVzdEdlbmVyYXRl
KCkpIHsKKyAgICAgICAgICAgICAgICBub2RlLT5jbGVhckZsYWdzKE5vZGVNdXN0R2VuZXJhdGUp
OworICAgICAgICAgICAgICAgIG1fZ3JhcGguZGVyZWYobm9kZSk7CiAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtMjA1LDggKzE5NSw4IEBAIHByaXZhdGU6
CiAgICAgICAgIGNhc2UgQml0UlNoaWZ0OgogICAgICAgICBjYXNlIEJpdExTaGlmdDoKICAgICAg
ICAgY2FzZSBCaXRVUlNoaWZ0OiB7Ci0gICAgICAgICAgICBmaXhJbnRFZGdlKG5vZGUuY2hpbGRy
ZW4uY2hpbGQxKCkpOwotICAgICAgICAgICAgZml4SW50RWRnZShub2RlLmNoaWxkcmVuLmNoaWxk
MigpKTsKKyAgICAgICAgICAgIGZpeEludEVkZ2Uobm9kZS0+Y2hpbGRyZW4uY2hpbGQxKCkpOwor
ICAgICAgICAgICAgZml4SW50RWRnZShub2RlLT5jaGlsZHJlbi5jaGlsZDIoKSk7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCkBAIC0yMTYsOSArMjA2LDkgQEAg
cHJpdmF0ZToKICAgICAgICAgY2FzZSBDb21wYXJlR3JlYXRlcjoKICAgICAgICAgY2FzZSBDb21w
YXJlR3JlYXRlckVxOgogICAgICAgICBjYXNlIENvbXBhcmVTdHJpY3RFcTogewotICAgICAgICAg
ICAgaWYgKE5vZGU6OnNob3VsZFNwZWN1bGF0ZUludGVnZXIobV9ncmFwaFtub2RlLmNoaWxkMSgp
XSwgbV9ncmFwaFtub2RlLmNoaWxkMigpXSkpCisgICAgICAgICAgICBpZiAoTm9kZTo6c2hvdWxk
U3BlY3VsYXRlSW50ZWdlcihub2RlLT5jaGlsZDEoKS5ub2RlKCksIG5vZGUtPmNoaWxkMigpLm5v
ZGUoKSkpCiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBpZiAoIU5vZGU6OnNo
b3VsZFNwZWN1bGF0ZU51bWJlcihtX2dyYXBoW25vZGUuY2hpbGQxKCldLCBtX2dyYXBoW25vZGUu
Y2hpbGQyKCldKSkKKyAgICAgICAgICAgIGlmICghTm9kZTo6c2hvdWxkU3BlY3VsYXRlTnVtYmVy
KG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgbm9kZS0+Y2hpbGQyKCkubm9kZSgpKSkKICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgIGZpeERvdWJsZUVkZ2UoMCk7CiAgICAgICAgICAg
ICBmaXhEb3VibGVFZGdlKDEpOwpAQCAtMjI2LDQzICsyMTYsNDEgQEAgcHJpdmF0ZToKICAgICAg
ICAgfQogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgTG9naWNhbE5vdDogewotICAgICAgICAg
ICAgaWYgKG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0uc2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKQor
ICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkp
CiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBpZiAoIW1fZ3JhcGhbbm9kZS5j
aGlsZDEoKV0uc2hvdWxkU3BlY3VsYXRlTnVtYmVyKCkpCisgICAgICAgICAgICBpZiAoIW5vZGUt
PmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVOdW1iZXIoKSkKICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgIGZpeERvdWJsZUVkZ2UoMCk7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgQnJhbmNoOiB7Ci0gICAgICAgICAg
ICBpZiAoIW1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0uc2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpCi0g
ICAgICAgICAgICAgICAgJiYgbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5zaG91bGRTcGVjdWxhdGVO
dW1iZXIoKSkKKyAgICAgICAgICAgIGlmICghbm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0
ZUludGVnZXIoKQorICAgICAgICAgICAgICAgICYmIG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVj
dWxhdGVOdW1iZXIoKSkKICAgICAgICAgICAgICAgICBmaXhEb3VibGVFZGdlKDApOwogCi0gICAg
ICAgICAgICBOb2RlJiBteU5vZGUgPSBtX2dyYXBoW21fY29tcGlsZUluZGV4XTsgLy8gcmVsb2Fk
IGJlY2F1c2UgdGhlIGdyYXBoIG1heSBoYXZlIGNoYW5nZWQKLSAgICAgICAgICAgIEVkZ2UgbG9n
aWNhbE5vdEVkZ2UgPSBteU5vZGUuY2hpbGQxKCk7Ci0gICAgICAgICAgICBOb2RlJiBsb2dpY2Fs
Tm90ID0gbV9ncmFwaFtsb2dpY2FsTm90RWRnZV07Ci0gICAgICAgICAgICBpZiAobG9naWNhbE5v
dC5vcCgpID09IExvZ2ljYWxOb3QKLSAgICAgICAgICAgICAgICAmJiBsb2dpY2FsTm90LmFkanVz
dGVkUmVmQ291bnQoKSA9PSAxKSB7Ci0gICAgICAgICAgICAgICAgRWRnZSBuZXdDaGlsZEVkZ2Ug
PSBsb2dpY2FsTm90LmNoaWxkMSgpOwotICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoW25ld0No
aWxkRWRnZV0uaGFzQm9vbGVhblJlc3VsdCgpKSB7CisgICAgICAgICAgICBOb2RlKiBsb2dpY2Fs
Tm90ID0gbm9kZS0+Y2hpbGQxKCkubm9kZSgpOworICAgICAgICAgICAgaWYgKGxvZ2ljYWxOb3Qt
Pm9wKCkgPT0gTG9naWNhbE5vdAorICAgICAgICAgICAgICAgICYmIGxvZ2ljYWxOb3QtPmFkanVz
dGVkUmVmQ291bnQoKSA9PSAxKSB7CisgICAgICAgICAgICAgICAgRWRnZSBuZXdDaGlsZEVkZ2Ug
PSBsb2dpY2FsTm90LT5jaGlsZDEoKTsKKyAgICAgICAgICAgICAgICBpZiAobmV3Q2hpbGRFZGdl
LT5oYXNCb29sZWFuUmVzdWx0KCkpIHsKICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5yZWYo
bmV3Q2hpbGRFZGdlKTsKLSAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5kZXJlZihsb2dpY2Fs
Tm90RWRnZSk7CisgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguZGVyZWYobG9naWNhbE5vdCk7
CiAgICAgICAgICAgICAgICAgICAgIG15Tm9kZS5jaGlsZHJlbi5zZXRDaGlsZDEobmV3Q2hpbGRF
ZGdlKTsKICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIEJsb2NrSW5k
ZXggdG9CZVRha2VuID0gbXlOb2RlLm5vdFRha2VuQmxvY2tJbmRleCgpOwotICAgICAgICAgICAg
ICAgICAgICBCbG9ja0luZGV4IHRvQmVOb3RUYWtlbiA9IG15Tm9kZS50YWtlbkJsb2NrSW5kZXgo
KTsKLSAgICAgICAgICAgICAgICAgICAgbXlOb2RlLnNldFRha2VuQmxvY2tJbmRleCh0b0JlVGFr
ZW4pOwotICAgICAgICAgICAgICAgICAgICBteU5vZGUuc2V0Tm90VGFrZW5CbG9ja0luZGV4KHRv
QmVOb3RUYWtlbik7CisgICAgICAgICAgICAgICAgICAgIEJsb2NrSW5kZXggdG9CZVRha2VuID0g
bm9kZS0+bm90VGFrZW5CbG9ja0luZGV4KCk7CisgICAgICAgICAgICAgICAgICAgIEJsb2NrSW5k
ZXggdG9CZU5vdFRha2VuID0gbm9kZS0+dGFrZW5CbG9ja0luZGV4KCk7CisgICAgICAgICAgICAg
ICAgICAgIG5vZGUtPnNldFRha2VuQmxvY2tJbmRleCh0b0JlVGFrZW4pOworICAgICAgICAgICAg
ICAgICAgICBub2RlLT5zZXROb3RUYWtlbkJsb2NrSW5kZXgodG9CZU5vdFRha2VuKTsKICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
fQogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgU2V0TG9jYWw6IHsKLSAgICAgICAgICAgIGlm
IChub2RlLnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5pc0NhcHR1cmVkKCkpCisgICAgICAgICAgICBp
ZiAobm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCktPmlzQ2FwdHVyZWQoKSkKICAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgIGlmICghbm9kZS52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+
c2hvdWxkVXNlRG91YmxlRm9ybWF0KCkpCisgICAgICAgICAgICBpZiAoIW5vZGUtPnZhcmlhYmxl
QWNjZXNzRGF0YSgpLT5zaG91bGRVc2VEb3VibGVGb3JtYXQoKSkKICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgIGZpeERvdWJsZUVkZ2UoMCk7CiAgICAgICAgICAgICBicmVhazsK
QEAgLTI3Miw3ICsyNjAsNyBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIFZhbHVlQWRkOiB7CiAg
ICAgICAgICAgICBpZiAobV9ncmFwaC5hZGRTaG91bGRTcGVjdWxhdGVJbnRlZ2VyKG5vZGUpKQog
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgaWYgKCFOb2RlOjpzaG91bGRTcGVj
dWxhdGVOdW1iZXJFeHBlY3RpbmdEZWZpbmVkKG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0sIG1fZ3Jh
cGhbbm9kZS5jaGlsZDIoKV0pKQorICAgICAgICAgICAgaWYgKCFOb2RlOjpzaG91bGRTcGVjdWxh
dGVOdW1iZXJFeHBlY3RpbmdEZWZpbmVkKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgbm9kZS0+Y2hp
bGQyKCkubm9kZSgpKSkKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGZpeERv
dWJsZUVkZ2UoMCk7CiAgICAgICAgICAgICBmaXhEb3VibGVFZGdlKDEpOwpAQCAtMjgxLDcgKzI2
OSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBBcml0aFN1Yjogewog
ICAgICAgICAgICAgaWYgKG1fZ3JhcGguYWRkU2hvdWxkU3BlY3VsYXRlSW50ZWdlcihub2RlKQot
ICAgICAgICAgICAgICAgICYmIG5vZGUuY2FuU3BlY3VsYXRlSW50ZWdlcigpKQorICAgICAgICAg
ICAgICAgICYmIG5vZGUtPmNhblNwZWN1bGF0ZUludGVnZXIoKSkKICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgIGZpeERvdWJsZUVkZ2UoMCk7CiAgICAgICAgICAgICBmaXhEb3Vi
bGVFZGdlKDEpOwpAQCAtMjk4LDggKzI4Niw4IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgQXJp
dGhNaW46CiAgICAgICAgIGNhc2UgQXJpdGhNYXg6CiAgICAgICAgIGNhc2UgQXJpdGhNb2Q6IHsK
LSAgICAgICAgICAgIGlmIChOb2RlOjpzaG91bGRTcGVjdWxhdGVJbnRlZ2VyRm9yQXJpdGhtZXRp
YyhtX2dyYXBoW25vZGUuY2hpbGQxKCldLCBtX2dyYXBoW25vZGUuY2hpbGQyKCldKQotICAgICAg
ICAgICAgICAgICYmIG5vZGUuY2FuU3BlY3VsYXRlSW50ZWdlcigpKQorICAgICAgICAgICAgaWYg
KE5vZGU6OnNob3VsZFNwZWN1bGF0ZUludGVnZXJGb3JBcml0aG1ldGljKG5vZGUtPmNoaWxkMSgp
Lm5vZGUoKSwgbm9kZS0+Y2hpbGQyKCkubm9kZSgpKQorICAgICAgICAgICAgICAgICYmIG5vZGUt
PmNhblNwZWN1bGF0ZUludGVnZXIoKSkKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgIGZpeERvdWJsZUVkZ2UoMCk7CiAgICAgICAgICAgICBmaXhEb3VibGVFZGdlKDEpOwpAQCAt
MzE1LDggKzMwMyw4IEBAIHByaXZhdGU6CiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIEFyaXRo
RGl2OiB7Ci0gICAgICAgICAgICBpZiAoTm9kZTo6c2hvdWxkU3BlY3VsYXRlSW50ZWdlckZvckFy
aXRobWV0aWMobV9ncmFwaFtub2RlLmNoaWxkMSgpXSwgbV9ncmFwaFtub2RlLmNoaWxkMigpXSkK
LSAgICAgICAgICAgICAgICAmJiBub2RlLmNhblNwZWN1bGF0ZUludGVnZXIoKSkgeworICAgICAg
ICAgICAgaWYgKE5vZGU6OnNob3VsZFNwZWN1bGF0ZUludGVnZXJGb3JBcml0aG1ldGljKG5vZGUt
PmNoaWxkMSgpLm5vZGUoKSwgbm9kZS0+Y2hpbGQyKCkubm9kZSgpKQorICAgICAgICAgICAgICAg
ICYmIG5vZGUtPmNhblNwZWN1bGF0ZUludGVnZXIoKSkgewogICAgICAgICAgICAgICAgIGlmIChp
c1g4NigpKQogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICBpbmpl
Y3RJbnQzMlRvRG91YmxlTm9kZSgwKTsKQEAgLTMyNCwxMiArMzEyLDExIEBAIHByaXZhdGU6CiAK
ICAgICAgICAgICAgICAgICAvLyBXZSBkb24ndCBuZWVkIHRvIGRvIHJlZidpbmcgb24gdGhlIGNo
aWxkcmVuIGJlY2F1c2Ugd2UncmUgc3RlYWxpbmcgdGhlbSBmcm9tCiAgICAgICAgICAgICAgICAg
Ly8gdGhlIG9yaWdpbmFsIGRpdmlzaW9uLgotICAgICAgICAgICAgICAgIE5vZGVJbmRleCBuZXdE
aXZpc2lvbkluZGV4ID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKKyAgICAgICAgICAgICAg
ICBOb2RlKiBuZXdEaXZpc2lvbiA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCiAgICAgICAg
ICAgICAgICAgICAgIG1faW5kZXhJbkJsb2NrLCBEb250UmVmQ2hpbGRyZW4sIFJlZk5vZGUsIFNw
ZWNEb3VibGUsIG1fZ3JhcGhbbV9jb21waWxlSW5kZXhdKTsKICAgICAgICAgICAgICAgICAKLSAg
ICAgICAgICAgICAgICBtX2dyYXBoW21fY29tcGlsZUluZGV4XS5zZXRPcChEb3VibGVBc0ludDMy
KTsKLSAgICAgICAgICAgICAgICBtX2dyYXBoW21fY29tcGlsZUluZGV4XS5jaGlsZHJlbi5pbml0
aWFsaXplKEVkZ2UobmV3RGl2aXNpb25JbmRleCwgRG91YmxlVXNlKSwgRWRnZSgpLCBFZGdlKCkp
OwotICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIG5vZGUtPnNldE9wKERvdWJsZUFz
SW50MzIpOworICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkcmVuLmluaXRpYWxpemUoRWRnZShu
ZXdEaXZpc2lvbiwgRG91YmxlVXNlKSwgRWRnZSgpLCBFZGdlKCkpOwogICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZml4RG91YmxlRWRnZSgwKTsKQEAg
LTMzOCw4ICszMjUsOCBAQCBwcml2YXRlOgogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAg
ICAgY2FzZSBBcml0aEFiczogewotICAgICAgICAgICAgaWYgKG1fZ3JhcGhbbm9kZS5jaGlsZDEo
KV0uc2hvdWxkU3BlY3VsYXRlSW50ZWdlckZvckFyaXRobWV0aWMoKQotICAgICAgICAgICAgICAg
ICYmIG5vZGUuY2FuU3BlY3VsYXRlSW50ZWdlcigpKQorICAgICAgICAgICAgaWYgKG5vZGUtPmNo
aWxkMSgpLT5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyRm9yQXJpdGhtZXRpYygpCisgICAgICAgICAg
ICAgICAgJiYgbm9kZS0+Y2FuU3BlY3VsYXRlSW50ZWdlcigpKQogICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgZml4RG91YmxlRWRnZSgwKTsKICAgICAgICAgICAgIGJyZWFrOwpA
QCAtMzU4LDE1ICszNDUsMTMgQEAgcHJpdmF0ZToKIAogICAgICAgICAgICAgbm9kZS5zZXRBcnJh
eU1vZGUoCiAgICAgICAgICAgICAgICAgbm9kZS5hcnJheU1vZGUoKS5yZWZpbmUoCi0gICAgICAg
ICAgICAgICAgICAgIG1fZ3JhcGhbY2hpbGQxXS5wcmVkaWN0aW9uKCksCi0gICAgICAgICAgICAg
ICAgICAgIG1fZ3JhcGhbY2hpbGQyXS5wcmVkaWN0aW9uKCksCi0gICAgICAgICAgICAgICAgICAg
IG1fZ3JhcGhbY2hpbGQzXS5wcmVkaWN0aW9uKCkpKTsKKyAgICAgICAgICAgICAgICAgICAgY2hp
bGQxLT5wcmVkaWN0aW9uKCksCisgICAgICAgICAgICAgICAgICAgIGNoaWxkMi0+cHJlZGljdGlv
bigpLAorICAgICAgICAgICAgICAgICAgICBjaGlsZDMtPnByZWRpY3Rpb24oKSkpOwogICAgICAg
ICAgICAgCiAgICAgICAgICAgICBibGVzc0FycmF5T3BlcmF0aW9uKGNoaWxkMSwgY2hpbGQyLCAz
KTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgTm9kZSogbm9kZVB0ciA9ICZtX2dyYXBoW21f
Y29tcGlsZUluZGV4XTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgc3dpdGNoIChub2RlUHRy
LT5hcnJheU1vZGUoKS5tb2RlRm9yUHV0KCkudHlwZSgpKSB7CisgICAgICAgICAgICBzd2l0Y2gg
KG5vZGUtPmFycmF5TW9kZSgpLm1vZGVGb3JQdXQoKS50eXBlKCkpIHsKICAgICAgICAgICAgIGNh
c2UgQXJyYXk6OkRvdWJsZToKICAgICAgICAgICAgICAgICBmaXhEb3VibGVFZGdlKDIpOwogICAg
ICAgICAgICAgICAgIGJyZWFrOwpAQCAtMzc3LDcgKzM2Miw3IEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICBjYXNlIEFycmF5OjpVaW50OENsYW1wZWRBcnJheToKICAgICAgICAgICAgIGNhc2UgQXJy
YXk6OlVpbnQxNkFycmF5OgogICAgICAgICAgICAgY2FzZSBBcnJheTo6VWludDMyQXJyYXk6Ci0g
ICAgICAgICAgICAgICAgaWYgKCFtX2dyYXBoW2NoaWxkM10uc2hvdWxkU3BlY3VsYXRlSW50ZWdl
cigpKQorICAgICAgICAgICAgICAgIGlmICghY2hpbGQzLT5zaG91bGRTcGVjdWxhdGVJbnRlZ2Vy
KCkpCiAgICAgICAgICAgICAgICAgICAgIGZpeERvdWJsZUVkZ2UoMik7CiAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIEFycmF5OjpGbG9hdDMyQXJyYXk6CkBAIC0zOTIs
MTEgKzM3NywxMSBAQCBwcml2YXRlOgogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgTmV3QXJy
YXk6IHsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1fZ3JhcGgudmFyQXJnTnVtQ2hp
bGRyZW4obm9kZSk7IGktLTspIHsKLSAgICAgICAgICAgICAgICBub2RlLnNldEluZGV4aW5nVHlw
ZSgKKyAgICAgICAgICAgICAgICBub2RlLT5zZXRJbmRleGluZ1R5cGUoCiAgICAgICAgICAgICAg
ICAgICAgIGxlYXN0VXBwZXJCb3VuZE9mSW5kZXhpbmdUeXBlQW5kVHlwZSgKLSAgICAgICAgICAg
ICAgICAgICAgICAgIG5vZGUuaW5kZXhpbmdUeXBlKCksIG1fZ3JhcGhbbV9ncmFwaC52YXJBcmdD
aGlsZChub2RlLCBpKV0ucHJlZGljdGlvbigpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBu
b2RlLmluZGV4aW5nVHlwZSgpLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIGkpLT5wcmVkaWN0
aW9uKCkpKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChub2RlLmluZGV4aW5nVHlw
ZSgpID09IEFycmF5V2l0aERvdWJsZSkgeworICAgICAgICAgICAgaWYgKG5vZGUtPmluZGV4aW5n
VHlwZSgpID09IEFycmF5V2l0aERvdWJsZSkgewogICAgICAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IG1fZ3JhcGgudmFyQXJnTnVtQ2hpbGRyZW4obm9kZSk7IGktLTspCiAgICAgICAgICAg
ICAgICAgICAgIGZpeERvdWJsZUVkZ2UoaSk7CiAgICAgICAgICAgICB9CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkocmV2aXNpb24gMTQwMzA2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDYg
KzQ2LDcgQEAgR3JhcGg6OkdyYXBoKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgQwogICAgICwg
bV9jb2RlQmxvY2soY29kZUJsb2NrKQogICAgICwgbV9jb21waWxhdGlvbihnbG9iYWxEYXRhLm1f
cGVyQnl0ZWNvZGVQcm9maWxlciA/IGdsb2JhbERhdGEubV9wZXJCeXRlY29kZVByb2ZpbGVyLT5u
ZXdDb21waWxhdGlvbihjb2RlQmxvY2ssIFByb2ZpbGVyOjpERkcpIDogMCkKICAgICAsIG1fcHJv
ZmlsZWRCbG9jayhjb2RlQmxvY2stPmFsdGVybmF0aXZlKCkpCisgICAgLCBtX2FsbG9jYXRvcihn
bG9iYWxEYXRhLm1fZGZnU3RhdGUtPm1fYWxsb2NhdG9yKQogICAgICwgbV9oYXNBcmd1bWVudHMo
ZmFsc2UpCiAgICAgLCBtX29zckVudHJ5Qnl0ZWNvZGVJbmRleChvc3JFbnRyeUJ5dGVjb2RlSW5k
ZXgpCiAgICAgLCBtX211c3RIYW5kbGVWYWx1ZXMobXVzdEhhbmRsZVZhbHVlcykKQEAgLTU0LDYg
KzU1LDExIEBAIEdyYXBoOjpHcmFwaChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEMKICAgICBB
U1NFUlQobV9wcm9maWxlZEJsb2NrKTsKIH0KIAorR3JhcGg6On5HcmFwaCgpCit7CisgICAgbV9h
bGxvY2F0b3IuZnJlZUFsbCgpOworfQorCiBjb25zdCBjaGFyICpHcmFwaDo6b3BOYW1lKE5vZGVU
eXBlIG9wKQogewogICAgIHJldHVybiBkZmdPcE5hbWVzW29wXTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0dyYXBoLmgJKHJldmlzaW9uIDE0MDMwNikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHR3JhcGguaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEyLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzUsNyArMzUsOSBA
QAogI2luY2x1ZGUgIkRGR0Fzc2VtYmx5SGVscGVycy5oIgogI2luY2x1ZGUgIkRGR0Jhc2ljQmxv
Y2suaCIKICNpbmNsdWRlICJERkdEb21pbmF0b3JzLmgiCisjaW5jbHVkZSAiREZHTG9uZ0xpdmVk
U3RhdGUuaCIKICNpbmNsdWRlICJERkdOb2RlLmgiCisjaW5jbHVkZSAiREZHTm9kZUFsbG9jYXRv
ci5oIgogI2luY2x1ZGUgIkRGR1ZhcmlhZGljRnVuY3Rpb24uaCIKICNpbmNsdWRlICJKU1N0YWNr
LmgiCiAjaW5jbHVkZSAiTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5oIgpAQCAtODMsNTQg
Kzg1LDQ4IEBAIGVudW0gQWRkU3BlY3VsYXRpb25Nb2RlIHsKIC8vCiAvLyA9PT0gR3JhcGggPT09
CiAvLwotLy8gVGhlIGRhdGFmbG93IGdyYXBoIGlzIGFuIG9yZGVyZWQgdmVjdG9yIG9mIG5vZGVz
LgogLy8gVGhlIG9yZGVyIG1heSBiZSBzaWduaWZpY2FudCBmb3Igbm9kZXMgd2l0aCBzaWRlLWVm
ZmVjdHMgKHByb3BlcnR5IGFjY2Vzc2VzLCB2YWx1ZSBjb252ZXJzaW9ucykuCiAvLyBOb2RlcyB0
aGF0IGFyZSAnZGVhZCcgcmVtYWluIGluIHRoZSB2ZWN0b3Igd2l0aCByZWZDb3VudCAwLgotY2xh
c3MgR3JhcGggOiBwdWJsaWMgVmVjdG9yPE5vZGUsIDY0PiB7CitjbGFzcyBHcmFwaCB7CiBwdWJs
aWM6CiAgICAgR3JhcGgoSlNHbG9iYWxEYXRhJiwgQ29kZUJsb2NrKiwgdW5zaWduZWQgb3NyRW50
cnlCeXRlY29kZUluZGV4LCBjb25zdCBPcGVyYW5kczxKU1ZhbHVlPiYgbXVzdEhhbmRsZVZhbHVl
cyk7Ci0gICAgCi0gICAgdXNpbmcgVmVjdG9yPE5vZGUsIDY0Pjo6b3BlcmF0b3JbXTsKLSAgICB1
c2luZyBWZWN0b3I8Tm9kZSwgNjQ+OjphdDsKLSAgICAKLSAgICBOb2RlJiBvcGVyYXRvcltdKEVk
Z2Ugbm9kZVVzZSkgeyByZXR1cm4gYXQobm9kZVVzZS5pbmRleCgpKTsgfQotICAgIGNvbnN0IE5v
ZGUmIG9wZXJhdG9yW10oRWRnZSBub2RlVXNlKSBjb25zdCB7IHJldHVybiBhdChub2RlVXNlLmlu
ZGV4KCkpOyB9Ci0gICAgCi0gICAgTm9kZSYgYXQoRWRnZSBub2RlVXNlKSB7IHJldHVybiBhdChu
b2RlVXNlLmluZGV4KCkpOyB9Ci0gICAgY29uc3QgTm9kZSYgYXQoRWRnZSBub2RlVXNlKSBjb25z
dCB7IHJldHVybiBhdChub2RlVXNlLmluZGV4KCkpOyB9CisgICAgfkdyYXBoKCk7CiAgICAgCiAg
ICAgLy8gTWFyayBhIG5vZGUgYXMgYmVpbmcgcmVmZXJlbmNlZC4KLSAgICBOb2RlSW5kZXggcmVm
KE5vZGVJbmRleCBub2RlSW5kZXgpCisgICAgTm9kZSogcmVmKE5vZGUqIG5vZGUpCiAgICAgewot
ICAgICAgICBOb2RlJiBub2RlID0gYXQobm9kZUluZGV4KTsKICAgICAgICAgLy8gSWYgdGhlIHZh
bHVlIChiZWZvcmUgaW5jcmVtZW50aW5nKSB3YXMgYXQgcmVmQ291bnQgemVybyB0aGVuIHdlIG5l
ZWQgdG8gcmVmIGl0cyBjaGlsZHJlbi4KLSAgICAgICAgaWYgKCFub2RlLnBvc3RmaXhSZWYoKSkK
LSAgICAgICAgICAgIHJlZkNoaWxkcmVuKG5vZGVJbmRleCk7Ci0gICAgICAgIHJldHVybiBub2Rl
SW5kZXg7CisgICAgICAgIGlmICghbm9kZS0+cG9zdGZpeFJlZigpKQorICAgICAgICAgICAgcmVm
Q2hpbGRyZW4obm9kZSk7CisgICAgICAgIHJldHVybiBub2RlOwogICAgIH0KICAgICBFZGdlIHJl
ZihFZGdlIG5vZGVVc2UpCiAgICAgewotICAgICAgICByZWYobm9kZVVzZS5pbmRleCgpKTsKKyAg
ICAgICAgcmVmKG5vZGVVc2Uubm9kZSgpKTsKICAgICAgICAgcmV0dXJuIG5vZGVVc2U7CiAgICAg
fQogICAgIAotICAgIHZvaWQgZGVyZWYoTm9kZUluZGV4IG5vZGVJbmRleCkKKyAgICB2b2lkIGRl
cmVmKE5vZGUqIG5vZGUpCiAgICAgewotICAgICAgICBpZiAoYXQobm9kZUluZGV4KS5wb3N0Zml4
RGVyZWYoKSA9PSAxKQotICAgICAgICAgICAgZGVyZWZDaGlsZHJlbihub2RlSW5kZXgpOworI2lm
ICFBU1NFUlRfRElTQUJMRUQKKyAgICAgICAgaWYgKCFub2RlLT5yZWZDb3VudCgpKQorICAgICAg
ICAgICAgZHVtcCgpOworI2VuZGlmCisgICAgICAgIGlmIChub2RlLT5wb3N0Zml4RGVyZWYoKSA9
PSAxKQorICAgICAgICAgICAgZGVyZWZDaGlsZHJlbihub2RlKTsKICAgICB9CiAgICAgdm9pZCBk
ZXJlZihFZGdlIG5vZGVVc2UpCiAgICAgewotICAgICAgICBkZXJlZihub2RlVXNlLmluZGV4KCkp
OworICAgICAgICBkZXJlZihub2RlVXNlLm5vZGUoKSk7CiAgICAgfQogICAgIAotICAgIHZvaWQg
Y2hhbmdlSW5kZXgoRWRnZSYgZWRnZSwgTm9kZUluZGV4IG5ld0luZGV4LCBib29sIGNoYW5nZVJl
ZiA9IHRydWUpCisgICAgdm9pZCBjaGFuZ2VJbmRleChFZGdlJiBlZGdlLCBOb2RlKiBuZXdOb2Rl
LCBib29sIGNoYW5nZVJlZiA9IHRydWUpCiAgICAgewogICAgICAgICBpZiAoY2hhbmdlUmVmKSB7
Ci0gICAgICAgICAgICByZWYobmV3SW5kZXgpOwotICAgICAgICAgICAgZGVyZWYoZWRnZS5pbmRl
eCgpKTsKKyAgICAgICAgICAgIHJlZihuZXdOb2RlKTsKKyAgICAgICAgICAgIGRlcmVmKGVkZ2Uu
bm9kZSgpKTsKICAgICAgICAgfQotICAgICAgICBlZGdlLnNldEluZGV4KG5ld0luZGV4KTsKKyAg
ICAgICAgZWRnZS5zZXROb2RlKG5ld05vZGUpOwogICAgIH0KICAgICAKICAgICB2b2lkIGNoYW5n
ZUVkZ2UoRWRnZSYgZWRnZSwgRWRnZSBuZXdFZGdlLCBib29sIGNoYW5nZVJlZiA9IHRydWUpCkBA
IC0xNDIsMTEgKzEzOCwxMSBAQCBwdWJsaWM6CiAgICAgICAgIGVkZ2UgPSBuZXdFZGdlOwogICAg
IH0KICAgICAKLSAgICB2b2lkIGNvbXBhcmVBbmRTd2FwKEVkZ2UmIGVkZ2UsIE5vZGVJbmRleCBv
bGRJbmRleCwgTm9kZUluZGV4IG5ld0luZGV4LCBib29sIGNoYW5nZVJlZikKKyAgICB2b2lkIGNv
bXBhcmVBbmRTd2FwKEVkZ2UmIGVkZ2UsIE5vZGUqIG9sZE5vZGUsIE5vZGUqIG5ld05vZGUsIGJv
b2wgY2hhbmdlUmVmKQogICAgIHsKLSAgICAgICAgaWYgKGVkZ2UuaW5kZXgoKSAhPSBvbGRJbmRl
eCkKKyAgICAgICAgaWYgKGVkZ2Uubm9kZSgpICE9IG9sZE5vZGUpCiAgICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIGNoYW5nZUluZGV4KGVkZ2UsIG5ld0luZGV4LCBjaGFuZ2VSZWYpOworICAg
ICAgICBjaGFuZ2VJbmRleChlZGdlLCBuZXdOb2RlLCBjaGFuZ2VSZWYpOwogICAgIH0KICAgICAK
ICAgICB2b2lkIGNvbXBhcmVBbmRTd2FwKEVkZ2UmIGVkZ2UsIEVkZ2Ugb2xkRWRnZSwgRWRnZSBu
ZXdFZGdlLCBib29sIGNoYW5nZVJlZikKQEAgLTE1Niw0NCArMTUyLDI5IEBAIHB1YmxpYzoKICAg
ICAgICAgY2hhbmdlRWRnZShlZGdlLCBuZXdFZGdlLCBjaGFuZ2VSZWYpOwogICAgIH0KICAgICAK
LSAgICB2b2lkIGNsZWFyQW5kRGVyZWZDaGlsZDEoTm9kZSYgbm9kZSkKLSAgICB7Ci0gICAgICAg
IGlmICghbm9kZS5jaGlsZDEoKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgZGVyZWYo
bm9kZS5jaGlsZDEoKSk7Ci0gICAgICAgIG5vZGUuY2hpbGRyZW4uY2hpbGQxKCkgPSBFZGdlKCk7
Ci0gICAgfQotCi0gICAgdm9pZCBjbGVhckFuZERlcmVmQ2hpbGQyKE5vZGUmIG5vZGUpCisgICAg
dm9pZCBjbGVhckFuZERlcmVmQ2hpbGQoTm9kZSogbm9kZSwgdW5zaWduZWQgaW5kZXgpCiAgICAg
ewotICAgICAgICBpZiAoIW5vZGUuY2hpbGQyKCkpCisgICAgICAgIGlmICghbm9kZS0+Y2hpbGRy
ZW4uY2hpbGQoaW5kZXgpKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBkZXJlZihub2Rl
LmNoaWxkMigpKTsKLSAgICAgICAgbm9kZS5jaGlsZHJlbi5jaGlsZDIoKSA9IEVkZ2UoKTsKLSAg
ICB9Ci0KLSAgICB2b2lkIGNsZWFyQW5kRGVyZWZDaGlsZDMoTm9kZSYgbm9kZSkKLSAgICB7Ci0g
ICAgICAgIGlmICghbm9kZS5jaGlsZDMoKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
ZGVyZWYobm9kZS5jaGlsZDMoKSk7Ci0gICAgICAgIG5vZGUuY2hpbGRyZW4uY2hpbGQzKCkgPSBF
ZGdlKCk7CisgICAgICAgIGRlcmVmKG5vZGUtPmNoaWxkcmVuLmNoaWxkKGluZGV4KSk7CisgICAg
ICAgIG5vZGUuY2hpbGRyZW4uc2V0Q2hpbGQoaW5kZXgsIEVkZ2UoKSk7CiAgICAgfQorICAgIHZv
aWQgY2xlYXJBbmREZXJlZkNoaWxkMShOb2RlKiBub2RlKSB7IGNsZWFyQW5kRGVyZWZDaGlsZChu
b2RlLCAwKTsgfQorICAgIHZvaWQgY2xlYXJBbmREZXJlZkNoaWxkMihOb2RlKiBub2RlKSB7IGNs
ZWFyQW5kRGVyZWZDaGlsZChub2RlLCAxKTsgfQorICAgIHZvaWQgY2xlYXJBbmREZXJlZkNoaWxk
MyhOb2RlKiBub2RlKSB7IGNsZWFyQW5kRGVyZWZDaGlsZChub2RlLCAyKTsgfQogICAgIAogI2Rl
ZmluZSBERkdfREVGSU5FX0FERF9OT0RFKHRlbXBsYXRlUHJlLCB0ZW1wbGF0ZVBvc3QsIHR5cGVQ
YXJhbXMsIHZhbHVlUGFyYW1zQ29tbWEsIHZhbHVlUGFyYW1zLCB2YWx1ZUFyZ3MpIFwKLSAgICB0
ZW1wbGF0ZVByZSB0eXBlUGFyYW1zIHRlbXBsYXRlUG9zdCBOb2RlSW5kZXggYWRkTm9kZShSZWZD
aGlsZHJlbk1vZGUgcmVmQ2hpbGRyZW5Nb2RlLCBSZWZOb2RlTW9kZSByZWZOb2RlTW9kZSwgU3Bl
Y3VsYXRlZFR5cGUgdHlwZSB2YWx1ZVBhcmFtc0NvbW1hIHZhbHVlUGFyYW1zKSBcCisgICAgdGVt
cGxhdGVQcmUgdHlwZVBhcmFtcyB0ZW1wbGF0ZVBvc3QgTm9kZSogYWRkTm9kZShSZWZDaGlsZHJl
bk1vZGUgcmVmQ2hpbGRyZW5Nb2RlLCBSZWZOb2RlTW9kZSByZWZOb2RlTW9kZSwgU3BlY3VsYXRl
ZFR5cGUgdHlwZSB2YWx1ZVBhcmFtc0NvbW1hIHZhbHVlUGFyYW1zKSBcCiAgICAgeyBcCi0gICAg
ICAgIE5vZGUgbm9kZSA9IE5vZGUodmFsdWVBcmdzKTsgXAotICAgICAgICBub2RlLnByZWRpY3Qo
dHlwZSk7IFwKLSAgICAgICAgaWYgKG5vZGUuZmxhZ3MoKSAmIE5vZGVNdXN0R2VuZXJhdGUpIFwK
LSAgICAgICAgICAgIG5vZGUucmVmKCk7IFwKKyAgICAgICAgTm9kZSogbm9kZSA9IG5ldyAobV9h
bGxvY2F0b3IpIE5vZGUodmFsdWVBcmdzKTsgXAorICAgICAgICBub2RlLT5wcmVkaWN0KHR5cGUp
OyBcCisgICAgICAgIGlmIChub2RlLT5mbGFncygpICYgTm9kZU11c3RHZW5lcmF0ZSkgXAorICAg
ICAgICAgICAgbm9kZS0+cmVmKCk7IFwKICAgICAgICAgaWYgKHJlZk5vZGVNb2RlID09IFJlZk5v
ZGUpIFwKLSAgICAgICAgICAgIG5vZGUucmVmKCk7IFwKLSAgICAgICAgTm9kZUluZGV4IHJlc3Vs
dCA9IHNpemUoKTsgXAotICAgICAgICBhcHBlbmQobm9kZSk7IFwKKyAgICAgICAgICAgIG5vZGUt
PnJlZigpOyBcCiAgICAgICAgIGlmIChyZWZDaGlsZHJlbk1vZGUgPT0gUmVmQ2hpbGRyZW4pIFwK
LSAgICAgICAgICAgIHJlZkNoaWxkcmVuKHJlc3VsdCk7IFwKLSAgICAgICAgcmV0dXJuIHJlc3Vs
dDsgXAorICAgICAgICAgICAgcmVmQ2hpbGRyZW4obm9kZSk7IFwKKyAgICAgICAgcmV0dXJuIG5v
ZGU7IFwKICAgICB9CiAgICAgREZHX1ZBUklBRElDX1RFTVBMQVRFX0ZVTkNUSU9OKERGR19ERUZJ
TkVfQUREX05PREUpCiAjdW5kZWYgREZHX0RFRklORV9BRERfTk9ERQpAQCAtMjA0LDE0ICsxODUs
MTQgQEAgcHVibGljOgogICAgIC8vIHJlZmVyZW5jZSBjb3VudHMgYWNjb3JkaW5nIHRvIHJlYWNo
YWJpbGl0eS4KICAgICB2b2lkIGNvbGxlY3RHYXJiYWdlKCk7CiAgICAgCi0gICAgdm9pZCBjb252
ZXJ0VG9Db25zdGFudChOb2RlSW5kZXggbm9kZUluZGV4LCB1bnNpZ25lZCBjb25zdGFudE51bWJl
cikKKyAgICB2b2lkIGNvbnZlcnRUb0NvbnN0YW50KE5vZGUqIG5vZGUsIHVuc2lnbmVkIGNvbnN0
YW50TnVtYmVyKQogICAgIHsKLSAgICAgICAgYXQobm9kZUluZGV4KS5jb252ZXJ0VG9Db25zdGFu
dChjb25zdGFudE51bWJlcik7CisgICAgICAgIG5vZGUtPmNvbnZlcnRUb0NvbnN0YW50KGNvbnN0
YW50TnVtYmVyKTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBjb252ZXJ0VG9Db25zdGFudChOb2Rl
SW5kZXggbm9kZUluZGV4LCBKU1ZhbHVlIHZhbHVlKQorICAgIHZvaWQgY29udmVydFRvQ29uc3Rh
bnQoTm9kZSogbm9kZSwgSlNWYWx1ZSB2YWx1ZSkKICAgICB7Ci0gICAgICAgIGNvbnZlcnRUb0Nv
bnN0YW50KG5vZGVJbmRleCwgbV9jb2RlQmxvY2stPmFkZE9yRmluZENvbnN0YW50KHZhbHVlKSk7
CisgICAgICAgIGNvbnZlcnRUb0NvbnN0YW50KG5vZGUsIG1fY29kZUJsb2NrLT5hZGRPckZpbmRD
b25zdGFudCh2YWx1ZSkpOwogICAgIH0KIAogICAgIC8vIENvZGVCbG9jayBpcyBvcHRpb25hbCwg
YnV0IG1heSBhbGxvdyBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHRvIGJlIGR1bXBlZCAoZS5nLiBJ
ZGVudGlmaWVyIG5hbWVzKS4KQEAgLTIxOSwxMjUgKzIwMCwxMjUgQEAgcHVibGljOgogICAgIGVu
dW0gUGhpTm9kZUR1bXBNb2RlIHsgRHVtcExpdmVQaGlzT25seSwgRHVtcEFsbFBoaXMgfTsKICAg
ICB2b2lkIGR1bXBCbG9ja0hlYWRlcihQcmludFN0cmVhbSYsIGNvbnN0IGNoYXIqIHByZWZpeCwg
QmxvY2tJbmRleCwgUGhpTm9kZUR1bXBNb2RlKTsKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0m
LCBFZGdlKTsKLSAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mLCBjb25zdCBjaGFyKiBwcmVmaXgs
IE5vZGVJbmRleCk7Ci0gICAgc3RhdGljIGludCBhbW91bnRPZk5vZGVXaGl0ZVNwYWNlKE5vZGUm
KTsKLSAgICBzdGF0aWMgdm9pZCBwcmludE5vZGVXaGl0ZVNwYWNlKFByaW50U3RyZWFtJiwgTm9k
ZSYpOworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYsIGNvbnN0IGNoYXIqIHByZWZpeCwgTm9k
ZSopOworICAgIHN0YXRpYyBpbnQgYW1vdW50T2ZOb2RlV2hpdGVTcGFjZShOb2RlKik7CisgICAg
c3RhdGljIHZvaWQgcHJpbnROb2RlV2hpdGVTcGFjZShQcmludFN0cmVhbSYsIE5vZGUqKTsKIAog
ICAgIC8vIER1bXAgdGhlIGNvZGUgb3JpZ2luIG9mIHRoZSBnaXZlbiBub2RlIGFzIGEgZGlmZiBm
cm9tIHRoZSBjb2RlIG9yaWdpbiBvZiB0aGUKICAgICAvLyBwcmVjZWRpbmcgbm9kZS4gUmV0dXJu
cyB0cnVlIGlmIGFueXRoaW5nIHdhcyBwcmludGVkLgotICAgIGJvb2wgZHVtcENvZGVPcmlnaW4o
UHJpbnRTdHJlYW0mLCBjb25zdCBjaGFyKiBwcmVmaXgsIE5vZGVJbmRleCwgTm9kZUluZGV4KTsK
KyAgICBib29sIGR1bXBDb2RlT3JpZ2luKFByaW50U3RyZWFtJiwgY29uc3QgY2hhciogcHJlZml4
LCBOb2RlKiBwcmV2aW91c05vZGUsIE5vZGUqIHN1YnNlcXVlbnROb2RlKTsKIAogICAgIEJsb2Nr
SW5kZXggYmxvY2tJbmRleEZvckJ5dGVjb2RlT2Zmc2V0KFZlY3RvcjxCbG9ja0luZGV4PiYgYmxv
Y2tzLCB1bnNpZ25lZCBieXRlY29kZUJlZ2luKTsKIAotICAgIFNwZWN1bGF0ZWRUeXBlIGdldEpT
Q29uc3RhbnRTcGVjdWxhdGlvbihOb2RlJiBub2RlKQorICAgIFNwZWN1bGF0ZWRUeXBlIGdldEpT
Q29uc3RhbnRTcGVjdWxhdGlvbihOb2RlKiBub2RlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIHNw
ZWN1bGF0aW9uRnJvbVZhbHVlKG5vZGUudmFsdWVPZkpTQ29uc3RhbnQobV9jb2RlQmxvY2spKTsK
KyAgICAgICAgcmV0dXJuIHNwZWN1bGF0aW9uRnJvbVZhbHVlKG5vZGUtPnZhbHVlT2ZKU0NvbnN0
YW50KG1fY29kZUJsb2NrKSk7CiAgICAgfQogICAgIAotICAgIEFkZFNwZWN1bGF0aW9uTW9kZSBh
ZGRTcGVjdWxhdGlvbk1vZGUoTm9kZSYgYWRkLCBib29sIGxlZnRTaG91bGRTcGVjdWxhdGVJbnRl
Z2VyLCBib29sIHJpZ2h0U2hvdWxkU3BlY3VsYXRlSW50ZWdlcikKKyAgICBBZGRTcGVjdWxhdGlv
bk1vZGUgYWRkU3BlY3VsYXRpb25Nb2RlKE5vZGUqIGFkZCwgYm9vbCBsZWZ0U2hvdWxkU3BlY3Vs
YXRlSW50ZWdlciwgYm9vbCByaWdodFNob3VsZFNwZWN1bGF0ZUludGVnZXIpCiAgICAgewotICAg
ICAgICBBU1NFUlQoYWRkLm9wKCkgPT0gVmFsdWVBZGQgfHwgYWRkLm9wKCkgPT0gQXJpdGhBZGQg
fHwgYWRkLm9wKCkgPT0gQXJpdGhTdWIpOworICAgICAgICBBU1NFUlQoYWRkLT5vcCgpID09IFZh
bHVlQWRkIHx8IGFkZC0+b3AoKSA9PSBBcml0aEFkZCB8fCBhZGQtPm9wKCkgPT0gQXJpdGhTdWIp
OwogICAgICAgICAKLSAgICAgICAgTm9kZSYgbGVmdCA9IGF0KGFkZC5jaGlsZDEoKSk7Ci0gICAg
ICAgIE5vZGUmIHJpZ2h0ID0gYXQoYWRkLmNoaWxkMigpKTsKKyAgICAgICAgTm9kZSogbGVmdCA9
IGFkZC0+Y2hpbGQxKCkubm9kZSgpOworICAgICAgICBOb2RlKiByaWdodCA9IGFkZC0+Y2hpbGQy
KCkubm9kZSgpOwogICAgICAgICAKLSAgICAgICAgaWYgKGxlZnQuaGFzQ29uc3RhbnQoKSkKKyAg
ICAgICAgaWYgKGxlZnQtPmhhc0NvbnN0YW50KCkpCiAgICAgICAgICAgICByZXR1cm4gYWRkSW1t
ZWRpYXRlU2hvdWxkU3BlY3VsYXRlSW50ZWdlcihhZGQsIHJpZ2h0U2hvdWxkU3BlY3VsYXRlSW50
ZWdlciwgbGVmdCk7Ci0gICAgICAgIGlmIChyaWdodC5oYXNDb25zdGFudCgpKQorICAgICAgICBp
ZiAocmlnaHQtPmhhc0NvbnN0YW50KCkpCiAgICAgICAgICAgICByZXR1cm4gYWRkSW1tZWRpYXRl
U2hvdWxkU3BlY3VsYXRlSW50ZWdlcihhZGQsIGxlZnRTaG91bGRTcGVjdWxhdGVJbnRlZ2VyLCBy
aWdodCk7CiAgICAgICAgIAotICAgICAgICByZXR1cm4gKGxlZnRTaG91bGRTcGVjdWxhdGVJbnRl
Z2VyICYmIHJpZ2h0U2hvdWxkU3BlY3VsYXRlSW50ZWdlciAmJiBhZGQuY2FuU3BlY3VsYXRlSW50
ZWdlcigpKSA/IFNwZWN1bGF0ZUludGVnZXIgOiBEb250U3BlY3VsYXRlSW50ZWdlcjsKKyAgICAg
ICAgcmV0dXJuIChsZWZ0U2hvdWxkU3BlY3VsYXRlSW50ZWdlciAmJiByaWdodFNob3VsZFNwZWN1
bGF0ZUludGVnZXIgJiYgYWRkLT5jYW5TcGVjdWxhdGVJbnRlZ2VyKCkpID8gU3BlY3VsYXRlSW50
ZWdlciA6IERvbnRTcGVjdWxhdGVJbnRlZ2VyOwogICAgIH0KICAgICAKLSAgICBBZGRTcGVjdWxh
dGlvbk1vZGUgdmFsdWVBZGRTcGVjdWxhdGlvbk1vZGUoTm9kZSYgYWRkKQorICAgIEFkZFNwZWN1
bGF0aW9uTW9kZSB2YWx1ZUFkZFNwZWN1bGF0aW9uTW9kZShOb2RlKiBhZGQpCiAgICAgewotICAg
ICAgICByZXR1cm4gYWRkU3BlY3VsYXRpb25Nb2RlKGFkZCwgYXQoYWRkLmNoaWxkMSgpKS5zaG91
bGRTcGVjdWxhdGVJbnRlZ2VyRXhwZWN0aW5nRGVmaW5lZCgpLCBhdChhZGQuY2hpbGQyKCkpLnNo
b3VsZFNwZWN1bGF0ZUludGVnZXJFeHBlY3RpbmdEZWZpbmVkKCkpOworICAgICAgICByZXR1cm4g
YWRkU3BlY3VsYXRpb25Nb2RlKGFkZCwgYWRkLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlSW50
ZWdlckV4cGVjdGluZ0RlZmluZWQoKSwgYWRkLT5jaGlsZDIoKS0+c2hvdWxkU3BlY3VsYXRlSW50
ZWdlckV4cGVjdGluZ0RlZmluZWQoKSk7CiAgICAgfQogICAgIAotICAgIEFkZFNwZWN1bGF0aW9u
TW9kZSBhcml0aEFkZFNwZWN1bGF0aW9uTW9kZShOb2RlJiBhZGQpCisgICAgQWRkU3BlY3VsYXRp
b25Nb2RlIGFyaXRoQWRkU3BlY3VsYXRpb25Nb2RlKE5vZGUqIGFkZCkKICAgICB7Ci0gICAgICAg
IHJldHVybiBhZGRTcGVjdWxhdGlvbk1vZGUoYWRkLCBhdChhZGQuY2hpbGQxKCkpLnNob3VsZFNw
ZWN1bGF0ZUludGVnZXJGb3JBcml0aG1ldGljKCksIGF0KGFkZC5jaGlsZDIoKSkuc2hvdWxkU3Bl
Y3VsYXRlSW50ZWdlckZvckFyaXRobWV0aWMoKSk7CisgICAgICAgIHJldHVybiBhZGRTcGVjdWxh
dGlvbk1vZGUoYWRkLCBhZGQtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyRm9yQXJp
dGhtZXRpYygpLCBhZGQtPmNoaWxkMigpLT5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyRm9yQXJpdGht
ZXRpYygpKTsKICAgICB9CiAgICAgCi0gICAgQWRkU3BlY3VsYXRpb25Nb2RlIGFkZFNwZWN1bGF0
aW9uTW9kZShOb2RlJiBhZGQpCisgICAgQWRkU3BlY3VsYXRpb25Nb2RlIGFkZFNwZWN1bGF0aW9u
TW9kZShOb2RlKiBhZGQpCiAgICAgewotICAgICAgICBpZiAoYWRkLm9wKCkgPT0gVmFsdWVBZGQp
CisgICAgICAgIGlmIChhZGQtPm9wKCkgPT0gVmFsdWVBZGQpCiAgICAgICAgICAgICByZXR1cm4g
dmFsdWVBZGRTcGVjdWxhdGlvbk1vZGUoYWRkKTsKICAgICAgICAgCiAgICAgICAgIHJldHVybiBh
cml0aEFkZFNwZWN1bGF0aW9uTW9kZShhZGQpOwogICAgIH0KICAgICAKLSAgICBib29sIGFkZFNo
b3VsZFNwZWN1bGF0ZUludGVnZXIoTm9kZSYgYWRkKQorICAgIGJvb2wgYWRkU2hvdWxkU3BlY3Vs
YXRlSW50ZWdlcihOb2RlKiBhZGQpCiAgICAgewogICAgICAgICByZXR1cm4gYWRkU3BlY3VsYXRp
b25Nb2RlKGFkZCkgIT0gRG9udFNwZWN1bGF0ZUludGVnZXI7CiAgICAgfQogICAgIAotICAgIGJv
b2wgbXVsU2hvdWxkU3BlY3VsYXRlSW50ZWdlcihOb2RlJiBtdWwpCisgICAgYm9vbCBtdWxTaG91
bGRTcGVjdWxhdGVJbnRlZ2VyKE5vZGUqIG11bCkKICAgICB7Ci0gICAgICAgIEFTU0VSVChtdWwu
b3AoKSA9PSBBcml0aE11bCk7CisgICAgICAgIEFTU0VSVChtdWwtPm9wKCkgPT0gQXJpdGhNdWwp
OwogICAgICAgICAKLSAgICAgICAgTm9kZSYgbGVmdCA9IGF0KG11bC5jaGlsZDEoKSk7Ci0gICAg
ICAgIE5vZGUmIHJpZ2h0ID0gYXQobXVsLmNoaWxkMigpKTsKKyAgICAgICAgTm9kZSogbGVmdCA9
IG11bC0+Y2hpbGQxKCkubm9kZSgpOworICAgICAgICBOb2RlKiByaWdodCA9IG11bC0+Y2hpbGQy
KCkubm9kZSgpOwogICAgICAgICAKICAgICAgICAgcmV0dXJuIE5vZGU6OnNob3VsZFNwZWN1bGF0
ZUludGVnZXJGb3JBcml0aG1ldGljKGxlZnQsIHJpZ2h0KSAmJiBtdWwuY2FuU3BlY3VsYXRlSW50
ZWdlcigpOwogICAgIH0KICAgICAKLSAgICBib29sIG5lZ2F0ZVNob3VsZFNwZWN1bGF0ZUludGVn
ZXIoTm9kZSYgbmVnYXRlKQorICAgIGJvb2wgbmVnYXRlU2hvdWxkU3BlY3VsYXRlSW50ZWdlcihO
b2RlKiBuZWdhdGUpCiAgICAgewotICAgICAgICBBU1NFUlQobmVnYXRlLm9wKCkgPT0gQXJpdGhO
ZWdhdGUpOwotICAgICAgICByZXR1cm4gYXQobmVnYXRlLmNoaWxkMSgpKS5zaG91bGRTcGVjdWxh
dGVJbnRlZ2VyRm9yQXJpdGhtZXRpYygpICYmIG5lZ2F0ZS5jYW5TcGVjdWxhdGVJbnRlZ2VyKCk7
CisgICAgICAgIEFTU0VSVChuZWdhdGUtPm9wKCkgPT0gQXJpdGhOZWdhdGUpOworICAgICAgICBy
ZXR1cm4gbmVnYXRlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlSW50ZWdlckZvckFyaXRobWV0
aWMoKSAmJiBuZWdhdGUtPmNhblNwZWN1bGF0ZUludGVnZXIoKTsKICAgICB9CiAgICAgCi0gICAg
Ym9vbCBhZGRTaG91bGRTcGVjdWxhdGVJbnRlZ2VyKE5vZGVJbmRleCBub2RlSW5kZXgpCisgICAg
Ym9vbCBhZGRTaG91bGRTcGVjdWxhdGVJbnRlZ2VyKE5vZGUqIG5vZGUpCiAgICAgewotICAgICAg
ICByZXR1cm4gYWRkU2hvdWxkU3BlY3VsYXRlSW50ZWdlcihhdChub2RlSW5kZXgpKTsKKyAgICAg
ICAgcmV0dXJuIGFkZFNob3VsZFNwZWN1bGF0ZUludGVnZXIobm9kZSk7CiAgICAgfQogICAgIAog
ICAgIC8vIEhlbHBlciBtZXRob2RzIHRvIGNoZWNrIG5vZGVzIGZvciBjb25zdGFudHMuCi0gICAg
Ym9vbCBpc0NvbnN0YW50KE5vZGVJbmRleCBub2RlSW5kZXgpCisgICAgYm9vbCBpc0NvbnN0YW50
KE5vZGUqIG5vZGUpCiAgICAgewotICAgICAgICByZXR1cm4gYXQobm9kZUluZGV4KS5oYXNDb25z
dGFudCgpOworICAgICAgICByZXR1cm4gbm9kZS0+aGFzQ29uc3RhbnQoKTsKICAgICB9Ci0gICAg
Ym9vbCBpc0pTQ29uc3RhbnQoTm9kZUluZGV4IG5vZGVJbmRleCkKKyAgICBib29sIGlzSlNDb25z
dGFudChOb2RlKiBub2RlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGF0KG5vZGVJbmRleCkuaGFz
Q29uc3RhbnQoKTsKKyAgICAgICAgcmV0dXJuIG5vZGUtPmhhc0NvbnN0YW50KCk7CiAgICAgfQot
ICAgIGJvb2wgaXNJbnQzMkNvbnN0YW50KE5vZGVJbmRleCBub2RlSW5kZXgpCisgICAgYm9vbCBp
c0ludDMyQ29uc3RhbnQoTm9kZSogbm9kZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBhdChub2Rl
SW5kZXgpLmlzSW50MzJDb25zdGFudChtX2NvZGVCbG9jayk7CisgICAgICAgIHJldHVybiBub2Rl
LT5pc0ludDMyQ29uc3RhbnQobV9jb2RlQmxvY2spOwogICAgIH0KLSAgICBib29sIGlzRG91Ymxl
Q29uc3RhbnQoTm9kZUluZGV4IG5vZGVJbmRleCkKKyAgICBib29sIGlzRG91YmxlQ29uc3RhbnQo
Tm9kZSogbm9kZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBhdChub2RlSW5kZXgpLmlzRG91Ymxl
Q29uc3RhbnQobV9jb2RlQmxvY2spOworICAgICAgICByZXR1cm4gbm9kZS0+aXNEb3VibGVDb25z
dGFudChtX2NvZGVCbG9jayk7CiAgICAgfQotICAgIGJvb2wgaXNOdW1iZXJDb25zdGFudChOb2Rl
SW5kZXggbm9kZUluZGV4KQorICAgIGJvb2wgaXNOdW1iZXJDb25zdGFudChOb2RlKiBub2RlKQog
ICAgIHsKLSAgICAgICAgcmV0dXJuIGF0KG5vZGVJbmRleCkuaXNOdW1iZXJDb25zdGFudChtX2Nv
ZGVCbG9jayk7CisgICAgICAgIHJldHVybiBub2RlLT5pc051bWJlckNvbnN0YW50KG1fY29kZUJs
b2NrKTsKICAgICB9Ci0gICAgYm9vbCBpc0Jvb2xlYW5Db25zdGFudChOb2RlSW5kZXggbm9kZUlu
ZGV4KQorICAgIGJvb2wgaXNCb29sZWFuQ29uc3RhbnQoTm9kZSogbm9kZSkKICAgICB7Ci0gICAg
ICAgIHJldHVybiBhdChub2RlSW5kZXgpLmlzQm9vbGVhbkNvbnN0YW50KG1fY29kZUJsb2NrKTsK
KyAgICAgICAgcmV0dXJuIG5vZGUtPmlzQm9vbGVhbkNvbnN0YW50KG1fY29kZUJsb2NrKTsKICAg
ICB9Ci0gICAgYm9vbCBpc0NlbGxDb25zdGFudChOb2RlSW5kZXggbm9kZUluZGV4KQorICAgIGJv
b2wgaXNDZWxsQ29uc3RhbnQoTm9kZSogbm9kZSkKICAgICB7Ci0gICAgICAgIGlmICghaXNKU0Nv
bnN0YW50KG5vZGVJbmRleCkpCisgICAgICAgIGlmICghaXNKU0NvbnN0YW50KG5vZGUpKQogICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBKU1ZhbHVlIHZhbHVlID0gdmFsdWVPZkpT
Q29uc3RhbnQobm9kZUluZGV4KTsKKyAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IHZhbHVlT2ZKU0Nv
bnN0YW50KG5vZGUpOwogICAgICAgICByZXR1cm4gdmFsdWUuaXNDZWxsKCkgJiYgISF2YWx1ZTsK
ICAgICB9Ci0gICAgYm9vbCBpc0Z1bmN0aW9uQ29uc3RhbnQoTm9kZUluZGV4IG5vZGVJbmRleCkK
KyAgICBib29sIGlzRnVuY3Rpb25Db25zdGFudChOb2RlKiBub2RlKQogICAgIHsKLSAgICAgICAg
aWYgKCFpc0pTQ29uc3RhbnQobm9kZUluZGV4KSkKKyAgICAgICAgaWYgKCFpc0pTQ29uc3RhbnQo
bm9kZSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmICghZ2V0SlNGdW5j
dGlvbih2YWx1ZU9mSlNDb25zdGFudChub2RlSW5kZXgpKSkKKyAgICAgICAgaWYgKCFnZXRKU0Z1
bmN0aW9uKHZhbHVlT2ZKU0NvbnN0YW50KG5vZGUpKSkKICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQotICAgIGJvb2wgaXNJbnRlcm5hbEZ1bmN0
aW9uQ29uc3RhbnQoTm9kZUluZGV4IG5vZGVJbmRleCkKKyAgICBib29sIGlzSW50ZXJuYWxGdW5j
dGlvbkNvbnN0YW50KE5vZGUqIG5vZGUpCiAgICAgewotICAgICAgICBpZiAoIWlzSlNDb25zdGFu
dChub2RlSW5kZXgpKQorICAgICAgICBpZiAoIWlzSlNDb25zdGFudChub2RlKSkKICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IHZhbHVlT2ZKU0NvbnN0
YW50KG5vZGVJbmRleCk7CisgICAgICAgIEpTVmFsdWUgdmFsdWUgPSB2YWx1ZU9mSlNDb25zdGFu
dChub2RlKTsKICAgICAgICAgaWYgKCF2YWx1ZS5pc0NlbGwoKSB8fCAhdmFsdWUpCiAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIEpTQ2VsbCogY2VsbCA9IHZhbHVlLmFzQ2VsbCgp
OwpAQCAtMzQ2LDI1ICszMjcsMjUgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICB9CiAgICAgLy8gSGVscGVyIG1ldGhvZHMgZ2V0IGNvbnN0YW50IHZhbHVlcyBmcm9tIG5vZGVz
LgotICAgIEpTVmFsdWUgdmFsdWVPZkpTQ29uc3RhbnQoTm9kZUluZGV4IG5vZGVJbmRleCkKKyAg
ICBKU1ZhbHVlIHZhbHVlT2ZKU0NvbnN0YW50KE5vZGUqIG5vZGUpCiAgICAgewotICAgICAgICBy
ZXR1cm4gYXQobm9kZUluZGV4KS52YWx1ZU9mSlNDb25zdGFudChtX2NvZGVCbG9jayk7CisgICAg
ICAgIHJldHVybiBub2RlLT52YWx1ZU9mSlNDb25zdGFudChtX2NvZGVCbG9jayk7CiAgICAgfQot
ICAgIGludDMyX3QgdmFsdWVPZkludDMyQ29uc3RhbnQoTm9kZUluZGV4IG5vZGVJbmRleCkKKyAg
ICBpbnQzMl90IHZhbHVlT2ZJbnQzMkNvbnN0YW50KE5vZGUqIG5vZGUpCiAgICAgewotICAgICAg
ICByZXR1cm4gdmFsdWVPZkpTQ29uc3RhbnQobm9kZUluZGV4KS5hc0ludDMyKCk7CisgICAgICAg
IHJldHVybiB2YWx1ZU9mSlNDb25zdGFudChub2RlKS5hc0ludDMyKCk7CiAgICAgfQotICAgIGRv
dWJsZSB2YWx1ZU9mTnVtYmVyQ29uc3RhbnQoTm9kZUluZGV4IG5vZGVJbmRleCkKKyAgICBkb3Vi
bGUgdmFsdWVPZk51bWJlckNvbnN0YW50KE5vZGUqIG5vZGUpCiAgICAgewotICAgICAgICByZXR1
cm4gdmFsdWVPZkpTQ29uc3RhbnQobm9kZUluZGV4KS5hc051bWJlcigpOworICAgICAgICByZXR1
cm4gdmFsdWVPZkpTQ29uc3RhbnQobm9kZSkuYXNOdW1iZXIoKTsKICAgICB9Ci0gICAgYm9vbCB2
YWx1ZU9mQm9vbGVhbkNvbnN0YW50KE5vZGVJbmRleCBub2RlSW5kZXgpCisgICAgYm9vbCB2YWx1
ZU9mQm9vbGVhbkNvbnN0YW50KE5vZGUqIG5vZGUpCiAgICAgewotICAgICAgICByZXR1cm4gdmFs
dWVPZkpTQ29uc3RhbnQobm9kZUluZGV4KS5hc0Jvb2xlYW4oKTsKKyAgICAgICAgcmV0dXJuIHZh
bHVlT2ZKU0NvbnN0YW50KG5vZGUpLmFzQm9vbGVhbigpOwogICAgIH0KLSAgICBKU0Z1bmN0aW9u
KiB2YWx1ZU9mRnVuY3Rpb25Db25zdGFudChOb2RlSW5kZXggbm9kZUluZGV4KQorICAgIEpTRnVu
Y3Rpb24qIHZhbHVlT2ZGdW5jdGlvbkNvbnN0YW50KE5vZGUqIG5vZGUpCiAgICAgewotICAgICAg
ICBKU0NlbGwqIGZ1bmN0aW9uID0gZ2V0SlNGdW5jdGlvbih2YWx1ZU9mSlNDb25zdGFudChub2Rl
SW5kZXgpKTsKKyAgICAgICAgSlNDZWxsKiBmdW5jdGlvbiA9IGdldEpTRnVuY3Rpb24odmFsdWVP
ZkpTQ29uc3RhbnQobm9kZSkpOwogICAgICAgICBBU1NFUlQoZnVuY3Rpb24pOwogICAgICAgICBy
ZXR1cm4ganNDYXN0PEpTRnVuY3Rpb24qPihmdW5jdGlvbik7CiAgICAgfQpAQCAtNDM5LDQ1ICs0
MjAsNDMgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9jb2RlQmxvY2stPnVuY2hlY2tlZEFj
dGl2YXRpb25SZWdpc3RlcigpOwogICAgIH0KICAgICAKLSAgICBWYWx1ZVByb2ZpbGUqIHZhbHVl
UHJvZmlsZUZvcihOb2RlSW5kZXggbm9kZUluZGV4KQorICAgIFZhbHVlUHJvZmlsZSogdmFsdWVQ
cm9maWxlRm9yKE5vZGUqIG5vZGUpCiAgICAgewotICAgICAgICBpZiAobm9kZUluZGV4ID09IE5v
Tm9kZSkKKyAgICAgICAgaWYgKCFub2RlKQogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAg
IAotICAgICAgICBOb2RlJiBub2RlID0gYXQobm9kZUluZGV4KTsKLSAgICAgICAgQ29kZUJsb2Nr
KiBwcm9maWxlZEJsb2NrID0gYmFzZWxpbmVDb2RlQmxvY2tGb3Iobm9kZS5jb2RlT3JpZ2luKTsK
KyAgICAgICAgQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrID0gYmFzZWxpbmVDb2RlQmxvY2tGb3Io
bm9kZS0+Y29kZU9yaWdpbik7CiAgICAgICAgIAotICAgICAgICBpZiAobm9kZS5oYXNMb2NhbCgp
KSB7Ci0gICAgICAgICAgICBpZiAoIW9wZXJhbmRJc0FyZ3VtZW50KG5vZGUubG9jYWwoKSkpCisg
ICAgICAgIGlmIChub2RlLT5oYXNMb2NhbCgpKSB7CisgICAgICAgICAgICBpZiAoIW9wZXJhbmRJ
c0FyZ3VtZW50KG5vZGUtPmxvY2FsKCkpKQogICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAg
ICAgICAgICAgaW50IGFyZ3VtZW50ID0gb3BlcmFuZFRvQXJndW1lbnQobm9kZS5sb2NhbCgpKTsK
LSAgICAgICAgICAgIGlmIChub2RlLnZhcmlhYmxlQWNjZXNzRGF0YSgpICE9IGF0KG1fYXJndW1l
bnRzW2FyZ3VtZW50XSkudmFyaWFibGVBY2Nlc3NEYXRhKCkpCisgICAgICAgICAgICBpbnQgYXJn
dW1lbnQgPSBvcGVyYW5kVG9Bcmd1bWVudChub2RlLT5sb2NhbCgpKTsKKyAgICAgICAgICAgIGlm
IChub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKSAhPSBtX2FyZ3VtZW50c1thcmd1bWVudF0tPnZh
cmlhYmxlQWNjZXNzRGF0YSgpKQogICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAg
ICAgcmV0dXJuIHByb2ZpbGVkQmxvY2stPnZhbHVlUHJvZmlsZUZvckFyZ3VtZW50KGFyZ3VtZW50
KTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgaWYgKG5vZGUuaGFzSGVhcFByZWRpY3Rp
b24oKSkKLSAgICAgICAgICAgIHJldHVybiBwcm9maWxlZEJsb2NrLT52YWx1ZVByb2ZpbGVGb3JC
eXRlY29kZU9mZnNldChub2RlLmNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleEZvclZhbHVlUHJvZmls
ZSgpKTsKKyAgICAgICAgaWYgKG5vZGUtPmhhc0hlYXBQcmVkaWN0aW9uKCkpCisgICAgICAgICAg
ICByZXR1cm4gcHJvZmlsZWRCbG9jay0+dmFsdWVQcm9maWxlRm9yQnl0ZWNvZGVPZmZzZXQobm9k
ZS0+Y29kZU9yaWdpbi5ieXRlY29kZUluZGV4Rm9yVmFsdWVQcm9maWxlKCkpOwogICAgICAgICAK
ICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogICAgIAotICAgIE1ldGhvZE9mR2V0dGluZ0FWYWx1
ZVByb2ZpbGUgbWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZUZvcihOb2RlSW5kZXggbm9kZUlu
ZGV4KQorICAgIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUgbWV0aG9kT2ZHZXR0aW5nQVZh
bHVlUHJvZmlsZUZvcihOb2RlKiBub2RlKQogICAgIHsKLSAgICAgICAgaWYgKG5vZGVJbmRleCA9
PSBOb05vZGUpCisgICAgICAgIGlmICghbm9kZSkKICAgICAgICAgICAgIHJldHVybiBNZXRob2RP
ZkdldHRpbmdBVmFsdWVQcm9maWxlKCk7CiAgICAgICAgIAotICAgICAgICBOb2RlJiBub2RlID0g
YXQobm9kZUluZGV4KTsKLSAgICAgICAgQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrID0gYmFzZWxp
bmVDb2RlQmxvY2tGb3Iobm9kZS5jb2RlT3JpZ2luKTsKKyAgICAgICAgQ29kZUJsb2NrKiBwcm9m
aWxlZEJsb2NrID0gYmFzZWxpbmVDb2RlQmxvY2tGb3Iobm9kZS0+Y29kZU9yaWdpbik7CiAgICAg
ICAgIAotICAgICAgICBpZiAobm9kZS5vcCgpID09IEdldExvY2FsKSB7CisgICAgICAgIGlmIChu
b2RlLT5vcCgpID09IEdldExvY2FsKSB7CiAgICAgICAgICAgICByZXR1cm4gTWV0aG9kT2ZHZXR0
aW5nQVZhbHVlUHJvZmlsZTo6ZnJvbUxhenlPcGVyYW5kKAogICAgICAgICAgICAgICAgIHByb2Zp
bGVkQmxvY2ssCiAgICAgICAgICAgICAgICAgTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVLZXkoCi0g
ICAgICAgICAgICAgICAgICAgIG5vZGUuY29kZU9yaWdpbi5ieXRlY29kZUluZGV4LCBub2RlLmxv
Y2FsKCkpKTsKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y29kZU9yaWdpbi5ieXRlY29kZUlu
ZGV4LCBub2RlLT5sb2NhbCgpKSk7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIHJldHVy
biBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlKHZhbHVlUHJvZmlsZUZvcihub2RlSW5kZXgp
KTsKKyAgICAgICAgcmV0dXJuIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUodmFsdWVQcm9m
aWxlRm9yKG5vZGUpKTsKICAgICB9CiAgICAgCiAgICAgYm9vbCBuZWVkc0FjdGl2YXRpb24oKSBj
b25zdApAQCAtNTAxLDIxICs0ODAsMjEgQEAgcHVibGljOgogICAgIAogICAgIHVuc2lnbmVkIG51
bVN1Y2Nlc3NvcnMoQmFzaWNCbG9jayogYmxvY2spCiAgICAgewotICAgICAgICByZXR1cm4gYXQo
YmxvY2stPmxhc3QoKSkubnVtU3VjY2Vzc29ycygpOworICAgICAgICByZXR1cm4gYmxvY2stPmxh
c3QoKS0+bnVtU3VjY2Vzc29ycygpOwogICAgIH0KICAgICBCbG9ja0luZGV4IHN1Y2Nlc3NvcihC
YXNpY0Jsb2NrKiBibG9jaywgdW5zaWduZWQgaW5kZXgpCiAgICAgewotICAgICAgICByZXR1cm4g
YXQoYmxvY2stPmxhc3QoKSkuc3VjY2Vzc29yKGluZGV4KTsKKyAgICAgICAgcmV0dXJuIGJsb2Nr
LT5sYXN0KCktPnN1Y2Nlc3NvcihpbmRleCk7CiAgICAgfQogICAgIEJsb2NrSW5kZXggc3VjY2Vz
c29yRm9yQ29uZGl0aW9uKEJhc2ljQmxvY2sqIGJsb2NrLCBib29sIGNvbmRpdGlvbikKICAgICB7
Ci0gICAgICAgIHJldHVybiBhdChibG9jay0+bGFzdCgpKS5zdWNjZXNzb3JGb3JDb25kaXRpb24o
Y29uZGl0aW9uKTsKKyAgICAgICAgcmV0dXJuIGJsb2NrLT5sYXN0KCktPnN1Y2Nlc3NvckZvckNv
bmRpdGlvbihjb25kaXRpb24pOwogICAgIH0KICAgICAKLSAgICBib29sIGlzUHJlZGljdGVkTnVt
ZXJpY2FsKE5vZGUmIG5vZGUpCisgICAgYm9vbCBpc1ByZWRpY3RlZE51bWVyaWNhbChOb2RlKiBu
b2RlKQogICAgIHsKLSAgICAgICAgU3BlY3VsYXRlZFR5cGUgbGVmdCA9IGF0KG5vZGUuY2hpbGQx
KCkpLnByZWRpY3Rpb24oKTsKLSAgICAgICAgU3BlY3VsYXRlZFR5cGUgcmlnaHQgPSBhdChub2Rl
LmNoaWxkMigpKS5wcmVkaWN0aW9uKCk7CisgICAgICAgIFNwZWN1bGF0ZWRUeXBlIGxlZnQgPSBu
b2RlLT5jaGlsZDEoKS0+cHJlZGljdGlvbigpOworICAgICAgICBTcGVjdWxhdGVkVHlwZSByaWdo
dCA9IG5vZGUtPmNoaWxkMigpLT5wcmVkaWN0aW9uKCk7CiAgICAgICAgIHJldHVybiBpc051bWJl
clNwZWN1bGF0aW9uKGxlZnQpICYmIGlzTnVtYmVyU3BlY3VsYXRpb24ocmlnaHQpOwogICAgIH0K
ICAgICAKQEAgLTUyNSwyMyArNTA0LDIzIEBAIHB1YmxpYzoKICAgICAvLyAtIFB1dEJ5VmFsIGRl
ZmluaXRlbHkgY2hhbmdlcyB0aGUgYXJyYXkgaXQgc3RvcmVzIHRvLCBhbmQgbWF5IGV2ZW4gY2hh
bmdlIGl0cyBsZW5ndGguCiAgICAgLy8gLSBQdXRCeU9mZnNldCBkZWZpbml0ZWx5IGNoYW5nZXMg
dGhlIG9iamVjdCBpdCBzdG9yZXMgdG8uCiAgICAgLy8gLSBhbmQgc28gb24uCi0gICAgYm9vbCBi
eVZhbElzUHVyZShOb2RlJiBub2RlKQorICAgIGJvb2wgYnlWYWxJc1B1cmUoTm9kZSogbm9kZSkK
ICAgICB7Ci0gICAgICAgIHN3aXRjaCAobm9kZS5hcnJheU1vZGUoKS50eXBlKCkpIHsKKyAgICAg
ICAgc3dpdGNoIChub2RlLT5hcnJheU1vZGUoKS50eXBlKCkpIHsKICAgICAgICAgY2FzZSBBcnJh
eTo6R2VuZXJpYzoKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgY2FzZSBBcnJh
eTo6SW50MzI6CiAgICAgICAgIGNhc2UgQXJyYXk6OkRvdWJsZToKICAgICAgICAgY2FzZSBBcnJh
eTo6Q29udGlndW91czoKICAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlTdG9yYWdlOgotICAgICAg
ICAgICAgcmV0dXJuICFub2RlLmFycmF5TW9kZSgpLmlzT3V0T2ZCb3VuZHMoKTsKKyAgICAgICAg
ICAgIHJldHVybiAhbm9kZS0+YXJyYXlNb2RlKCkuaXNPdXRPZkJvdW5kcygpOwogICAgICAgICBj
YXNlIEFycmF5OjpTbG93UHV0QXJyYXlTdG9yYWdlOgotICAgICAgICAgICAgcmV0dXJuICFub2Rl
LmFycmF5TW9kZSgpLm1heVN0b3JlVG9Ib2xlKCk7CisgICAgICAgICAgICByZXR1cm4gIW5vZGUt
PmFycmF5TW9kZSgpLm1heVN0b3JlVG9Ib2xlKCk7CiAgICAgICAgIGNhc2UgQXJyYXk6OlN0cmlu
ZzoKLSAgICAgICAgICAgIHJldHVybiBub2RlLm9wKCkgPT0gR2V0QnlWYWw7CisgICAgICAgICAg
ICByZXR1cm4gbm9kZS0+b3AoKSA9PSBHZXRCeVZhbDsKICNpZiBVU0UoSlNWQUxVRTMyXzY0KQog
ICAgICAgICBjYXNlIEFycmF5OjpBcmd1bWVudHM6Ci0gICAgICAgICAgICBpZiAobm9kZS5vcCgp
ID09IEdldEJ5VmFsKQorICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gR2V0QnlWYWwpCiAg
ICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAj
ZW5kaWYgLy8gVVNFKEpTVkFMVUUzMl82NCkKQEAgLTU1MCwxMyArNTI5LDEzIEBAIHB1YmxpYzoK
ICAgICAgICAgfQogICAgIH0KICAgICAKLSAgICBib29sIGNsb2JiZXJzV29ybGQoTm9kZSYgbm9k
ZSkKKyAgICBib29sIGNsb2JiZXJzV29ybGQoTm9kZSogbm9kZSkKICAgICB7Ci0gICAgICAgIGlm
IChub2RlLmZsYWdzKCkgJiBOb2RlQ2xvYmJlcnNXb3JsZCkKKyAgICAgICAgaWYgKG5vZGUtPmZs
YWdzKCkgJiBOb2RlQ2xvYmJlcnNXb3JsZCkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAg
ICAgICBpZiAoIShub2RlLmZsYWdzKCkgJiBOb2RlTWlnaHRDbG9iYmVyKSkKKyAgICAgICAgaWYg
KCEobm9kZS0+ZmxhZ3MoKSAmIE5vZGVNaWdodENsb2JiZXIpKQogICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgICBzd2l0Y2ggKG5vZGUub3AoKSkgeworICAgICAgICBzd2l0Y2ggKG5v
ZGUtPm9wKCkpIHsKICAgICAgICAgY2FzZSBWYWx1ZUFkZDoKICAgICAgICAgY2FzZSBDb21wYXJl
TGVzczoKICAgICAgICAgY2FzZSBDb21wYXJlTGVzc0VxOgpAQCAtNTc0LDkgKzU1Myw5IEBAIHB1
YmxpYzoKICAgICAgICAgfQogICAgIH0KICAgICAKLSAgICBib29sIGNsb2JiZXJzV29ybGQoTm9k
ZUluZGV4IG5vZGVJbmRleCkKKyAgICBib29sIGNsb2JiZXJzV29ybGQoTm9kZSogbm9kZSkKICAg
ICB7Ci0gICAgICAgIHJldHVybiBjbG9iYmVyc1dvcmxkKGF0KG5vZGVJbmRleCkpOworICAgICAg
ICByZXR1cm4gY2xvYmJlcnNXb3JsZChub2RlKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBkZXRl
cm1pbmVSZWFjaGFiaWxpdHkoKTsKQEAgLTU4NCw1MiArNTYzLDUyIEBAIHB1YmxpYzoKICAgICAK
ICAgICB2b2lkIHJlc2V0RXhpdFN0YXRlcygpOwogICAgIAotICAgIHVuc2lnbmVkIHZhckFyZ051
bUNoaWxkcmVuKE5vZGUmIG5vZGUpCisgICAgdW5zaWduZWQgdmFyQXJnTnVtQ2hpbGRyZW4oTm9k
ZSogbm9kZSkKICAgICB7Ci0gICAgICAgIEFTU0VSVChub2RlLmZsYWdzKCkgJiBOb2RlSGFzVmFy
QXJncyk7Ci0gICAgICAgIHJldHVybiBub2RlLm51bUNoaWxkcmVuKCk7CisgICAgICAgIEFTU0VS
VChub2RlLT5mbGFncygpICYgTm9kZUhhc1ZhckFyZ3MpOworICAgICAgICByZXR1cm4gbm9kZS0+
bnVtQ2hpbGRyZW4oKTsKICAgICB9CiAgICAgCi0gICAgdW5zaWduZWQgbnVtQ2hpbGRyZW4oTm9k
ZSYgbm9kZSkKKyAgICB1bnNpZ25lZCBudW1DaGlsZHJlbihOb2RlKiBub2RlKQogICAgIHsKLSAg
ICAgICAgaWYgKG5vZGUuZmxhZ3MoKSAmIE5vZGVIYXNWYXJBcmdzKQorICAgICAgICBpZiAobm9k
ZS0+ZmxhZ3MoKSAmIE5vZGVIYXNWYXJBcmdzKQogICAgICAgICAgICAgcmV0dXJuIHZhckFyZ051
bUNoaWxkcmVuKG5vZGUpOwogICAgICAgICByZXR1cm4gQWRqYWNlbmN5TGlzdDo6U2l6ZTsKICAg
ICB9CiAgICAgCi0gICAgRWRnZSYgdmFyQXJnQ2hpbGQoTm9kZSYgbm9kZSwgdW5zaWduZWQgaW5k
ZXgpCisgICAgRWRnZSYgdmFyQXJnQ2hpbGQoTm9kZSogbm9kZSwgdW5zaWduZWQgaW5kZXgpCiAg
ICAgewotICAgICAgICBBU1NFUlQobm9kZS5mbGFncygpICYgTm9kZUhhc1ZhckFyZ3MpOwotICAg
ICAgICByZXR1cm4gbV92YXJBcmdDaGlsZHJlbltub2RlLmZpcnN0Q2hpbGQoKSArIGluZGV4XTsK
KyAgICAgICAgQVNTRVJUKG5vZGUtPmZsYWdzKCkgJiBOb2RlSGFzVmFyQXJncyk7CisgICAgICAg
IHJldHVybiBtX3ZhckFyZ0NoaWxkcmVuW25vZGUtPmZpcnN0Q2hpbGQoKSArIGluZGV4XTsKICAg
ICB9CiAgICAgCi0gICAgRWRnZSYgY2hpbGQoTm9kZSYgbm9kZSwgdW5zaWduZWQgaW5kZXgpCisg
ICAgRWRnZSYgY2hpbGQoTm9kZSogbm9kZSwgdW5zaWduZWQgaW5kZXgpCiAgICAgewotICAgICAg
ICBpZiAobm9kZS5mbGFncygpICYgTm9kZUhhc1ZhckFyZ3MpCisgICAgICAgIGlmIChub2RlLT5m
bGFncygpICYgTm9kZUhhc1ZhckFyZ3MpCiAgICAgICAgICAgICByZXR1cm4gdmFyQXJnQ2hpbGQo
bm9kZSwgaW5kZXgpOwotICAgICAgICByZXR1cm4gbm9kZS5jaGlsZHJlbi5jaGlsZChpbmRleCk7
CisgICAgICAgIHJldHVybiBub2RlLT5jaGlsZHJlbi5jaGlsZChpbmRleCk7CiAgICAgfQogICAg
IAogICAgIHZvaWQgdm90ZShFZGdlIGVkZ2UsIHVuc2lnbmVkIGJhbGxvdCkKICAgICB7Ci0gICAg
ICAgIHN3aXRjaCAoYXQoZWRnZSkub3AoKSkgeworICAgICAgICBzd2l0Y2ggKGVkZ2UtPm9wKCkp
IHsKICAgICAgICAgY2FzZSBWYWx1ZVRvSW50MzI6CiAgICAgICAgIGNhc2UgVUludDMyVG9OdW1i
ZXI6Ci0gICAgICAgICAgICBlZGdlID0gYXQoZWRnZSkuY2hpbGQxKCk7CisgICAgICAgICAgICBl
ZGdlID0gZWRnZS0+Y2hpbGQxKCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgZGVmYXVs
dDoKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBpZiAo
YXQoZWRnZSkub3AoKSA9PSBHZXRMb2NhbCkKLSAgICAgICAgICAgIGF0KGVkZ2UpLnZhcmlhYmxl
QWNjZXNzRGF0YSgpLT52b3RlKGJhbGxvdCk7CisgICAgICAgIGlmIChlZGdlLT5vcCgpID09IEdl
dExvY2FsKQorICAgICAgICAgICAgZWRnZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCktPnZvdGUoYmFs
bG90KTsKICAgICB9CiAgICAgCi0gICAgdm9pZCB2b3RlKE5vZGUmIG5vZGUsIHVuc2lnbmVkIGJh
bGxvdCkKKyAgICB2b2lkIHZvdGUoTm9kZSogbm9kZSwgdW5zaWduZWQgYmFsbG90KQogICAgIHsK
LSAgICAgICAgaWYgKG5vZGUuZmxhZ3MoKSAmIE5vZGVIYXNWYXJBcmdzKSB7Ci0gICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGNoaWxkSWR4ID0gbm9kZS5maXJzdENoaWxkKCk7Ci0gICAgICAgICAg
ICAgICAgIGNoaWxkSWR4IDwgbm9kZS5maXJzdENoaWxkKCkgKyBub2RlLm51bUNoaWxkcmVuKCk7
CisgICAgICAgIGlmIChub2RlLT5mbGFncygpICYgTm9kZUhhc1ZhckFyZ3MpIHsKKyAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgY2hpbGRJZHggPSBub2RlLT5maXJzdENoaWxkKCk7CisgICAgICAg
ICAgICAgICAgIGNoaWxkSWR4IDwgbm9kZS0+Zmlyc3RDaGlsZCgpICsgbm9kZS0+bnVtQ2hpbGRy
ZW4oKTsKICAgICAgICAgICAgICAgICAgY2hpbGRJZHgrKykgewogICAgICAgICAgICAgICAgIGlm
ICghIW1fdmFyQXJnQ2hpbGRyZW5bY2hpbGRJZHhdKQogICAgICAgICAgICAgICAgICAgICB2b3Rl
KG1fdmFyQXJnQ2hpbGRyZW5bY2hpbGRJZHhdLCBiYWxsb3QpOwpAQCAtNjM3LDM5ICs2MTYsMzgg
QEAgcHVibGljOgogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIAotICAg
ICAgICBpZiAoIW5vZGUuY2hpbGQxKCkpCisgICAgICAgIGlmICghbm9kZS0+Y2hpbGQxKCkpCiAg
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIHZvdGUobm9kZS5jaGlsZDEoKSwgYmFsbG90KTsK
LSAgICAgICAgaWYgKCFub2RlLmNoaWxkMigpKQorICAgICAgICB2b3RlKG5vZGUtPmNoaWxkMSgp
LCBiYWxsb3QpOworICAgICAgICBpZiAoIW5vZGUtPmNoaWxkMigpKQogICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICB2b3RlKG5vZGUuY2hpbGQyKCksIGJhbGxvdCk7Ci0gICAgICAgIGlmICgh
bm9kZS5jaGlsZDMoKSkKKyAgICAgICAgdm90ZShub2RlLT5jaGlsZDIoKSwgYmFsbG90KTsKKyAg
ICAgICAgaWYgKCFub2RlLT5jaGlsZDMoKSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
dm90ZShub2RlLmNoaWxkMygpLCBiYWxsb3QpOworICAgICAgICB2b3RlKG5vZGUtPmNoaWxkMygp
LCBiYWxsb3QpOwogICAgIH0KICAgICAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiAvLyBUID0g
Tm9kZUluZGV4IG9yIEVkZ2UKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiAvLyBUID0gTm9kZSog
b3IgRWRnZQogICAgIHZvaWQgc3Vic3RpdHV0ZShCYXNpY0Jsb2NrJiBibG9jaywgdW5zaWduZWQg
c3RhcnRJbmRleEluQmxvY2ssIFQgb2xkVGhpbmcsIFQgbmV3VGhpbmcpCiAgICAgewogICAgICAg
ICBmb3IgKHVuc2lnbmVkIGluZGV4SW5CbG9jayA9IHN0YXJ0SW5kZXhJbkJsb2NrOyBpbmRleElu
QmxvY2sgPCBibG9jay5zaXplKCk7ICsraW5kZXhJbkJsb2NrKSB7Ci0gICAgICAgICAgICBOb2Rl
SW5kZXggbm9kZUluZGV4ID0gYmxvY2tbaW5kZXhJbkJsb2NrXTsKLSAgICAgICAgICAgIE5vZGUm
IG5vZGUgPSBhdChub2RlSW5kZXgpOwotICAgICAgICAgICAgaWYgKG5vZGUuZmxhZ3MoKSAmIE5v
ZGVIYXNWYXJBcmdzKSB7Ci0gICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBjaGlsZElkeCA9
IG5vZGUuZmlyc3RDaGlsZCgpOyBjaGlsZElkeCA8IG5vZGUuZmlyc3RDaGlsZCgpICsgbm9kZS5u
dW1DaGlsZHJlbigpOyArK2NoaWxkSWR4KSB7CisgICAgICAgICAgICBOb2RlKiBub2RlID0gYmxv
Y2tbaW5kZXhJbkJsb2NrXTsKKyAgICAgICAgICAgIGlmIChub2RlLT5mbGFncygpICYgTm9kZUhh
c1ZhckFyZ3MpIHsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGNoaWxkSWR4ID0gbm9k
ZS0+Zmlyc3RDaGlsZCgpOyBjaGlsZElkeCA8IG5vZGUtPmZpcnN0Q2hpbGQoKSArIG5vZGUtPm51
bUNoaWxkcmVuKCk7ICsrY2hpbGRJZHgpIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKCEhbV92
YXJBcmdDaGlsZHJlbltjaGlsZElkeF0pCi0gICAgICAgICAgICAgICAgICAgICAgICBjb21wYXJl
QW5kU3dhcChtX3ZhckFyZ0NoaWxkcmVuW2NoaWxkSWR4XSwgb2xkVGhpbmcsIG5ld1RoaW5nLCBu
b2RlLnNob3VsZEdlbmVyYXRlKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgY29tcGFyZUFu
ZFN3YXAobV92YXJBcmdDaGlsZHJlbltjaGlsZElkeF0sIG9sZFRoaW5nLCBuZXdUaGluZywgbm9k
ZS0+c2hvdWxkR2VuZXJhdGUoKSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKCFub2RlLmNoaWxkMSgp
KQorICAgICAgICAgICAgaWYgKCFub2RlLT5jaGlsZDEoKSkKICAgICAgICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgICAgIGNvbXBhcmVBbmRTd2FwKG5vZGUuY2hpbGRyZW4uY2hpbGQxKCks
IG9sZFRoaW5nLCBuZXdUaGluZywgbm9kZS5zaG91bGRHZW5lcmF0ZSgpKTsKLSAgICAgICAgICAg
IGlmICghbm9kZS5jaGlsZDIoKSkKKyAgICAgICAgICAgIGNvbXBhcmVBbmRTd2FwKG5vZGUtPmNo
aWxkcmVuLmNoaWxkMSgpLCBvbGRUaGluZywgbmV3VGhpbmcsIG5vZGUtPnNob3VsZEdlbmVyYXRl
KCkpOworICAgICAgICAgICAgaWYgKCFub2RlLT5jaGlsZDIoKSkKICAgICAgICAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgICAgIGNvbXBhcmVBbmRTd2FwKG5vZGUuY2hpbGRyZW4uY2hpbGQy
KCksIG9sZFRoaW5nLCBuZXdUaGluZywgbm9kZS5zaG91bGRHZW5lcmF0ZSgpKTsKLSAgICAgICAg
ICAgIGlmICghbm9kZS5jaGlsZDMoKSkKKyAgICAgICAgICAgIGNvbXBhcmVBbmRTd2FwKG5vZGUt
PmNoaWxkcmVuLmNoaWxkMigpLCBvbGRUaGluZywgbmV3VGhpbmcsIG5vZGUtPnNob3VsZEdlbmVy
YXRlKCkpOworICAgICAgICAgICAgaWYgKCFub2RlLT5jaGlsZDMoKSkKICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKLSAgICAgICAgICAgIGNvbXBhcmVBbmRTd2FwKG5vZGUuY2hpbGRyZW4uY2hp
bGQzKCksIG9sZFRoaW5nLCBuZXdUaGluZywgbm9kZS5zaG91bGRHZW5lcmF0ZSgpKTsKKyAgICAg
ICAgICAgIGNvbXBhcmVBbmRTd2FwKG5vZGUtPmNoaWxkcmVuLmNoaWxkMygpLCBvbGRUaGluZywg
bmV3VGhpbmcsIG5vZGUtPnNob3VsZEdlbmVyYXRlKCkpOwogICAgICAgICB9CiAgICAgfQogICAg
IApAQCAtNjc3LDI5ICs2NTUsMjggQEAgcHVibGljOgogICAgIC8vIGFueSBHZXRMb2NhbHMgaW4g
dGhlIGJhc2ljIGJsb2NrLgogICAgIC8vIEZJWE1FOiBpdCBtYXkgYmUgYXBwcm9wcmlhdGUsIGlu
IHRoZSBmdXR1cmUsIHRvIGdlbmVyYWxpemUgdGhpcyB0byBoYW5kbGUgR2V0TG9jYWxzCiAgICAg
Ly8gaW50cm9kdWNlZCBhbnl3aGVyZSBpbiB0aGUgYmFzaWMgYmxvY2suCi0gICAgdm9pZCBzdWJz
dGl0dXRlR2V0TG9jYWwoQmFzaWNCbG9jayYgYmxvY2ssIHVuc2lnbmVkIHN0YXJ0SW5kZXhJbkJs
b2NrLCBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSwgTm9kZUluZGV4IG5l
d0dldExvY2FsKQorICAgIHZvaWQgc3Vic3RpdHV0ZUdldExvY2FsKEJhc2ljQmxvY2smIGJsb2Nr
LCB1bnNpZ25lZCBzdGFydEluZGV4SW5CbG9jaywgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJs
ZUFjY2Vzc0RhdGEsIE5vZGUqIG5ld0dldExvY2FsKQogICAgIHsKICAgICAgICAgaWYgKHZhcmlh
YmxlQWNjZXNzRGF0YS0+aXNDYXB0dXJlZCgpKSB7CiAgICAgICAgICAgICAvLyBMZXQgQ1NFIHdv
cnJ5IGFib3V0IHRoaXMgb25lLgogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAg
ICAgIGZvciAodW5zaWduZWQgaW5kZXhJbkJsb2NrID0gc3RhcnRJbmRleEluQmxvY2s7IGluZGV4
SW5CbG9jayA8IGJsb2NrLnNpemUoKTsgKytpbmRleEluQmxvY2spIHsKLSAgICAgICAgICAgIE5v
ZGVJbmRleCBub2RlSW5kZXggPSBibG9ja1tpbmRleEluQmxvY2tdOwotICAgICAgICAgICAgTm9k
ZSYgbm9kZSA9IGF0KG5vZGVJbmRleCk7CisgICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2tb
aW5kZXhJbkJsb2NrXTsKICAgICAgICAgICAgIGJvb2wgc2hvdWxkQ29udGludWUgPSB0cnVlOwot
ICAgICAgICAgICAgc3dpdGNoIChub2RlLm9wKCkpIHsKKyAgICAgICAgICAgIHN3aXRjaCAobm9k
ZS0+b3AoKSkgewogICAgICAgICAgICAgY2FzZSBTZXRMb2NhbDogewotICAgICAgICAgICAgICAg
IGlmIChub2RlLmxvY2FsKCkgPT0gdmFyaWFibGVBY2Nlc3NEYXRhLT5sb2NhbCgpKQorICAgICAg
ICAgICAgICAgIGlmIChub2RlLT5sb2NhbCgpID09IHZhcmlhYmxlQWNjZXNzRGF0YS0+bG9jYWwo
KSkKICAgICAgICAgICAgICAgICAgICAgc2hvdWxkQ29udGludWUgPSBmYWxzZTsKICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKICAgICAgICAg
ICAgIGNhc2UgR2V0TG9jYWw6IHsKLSAgICAgICAgICAgICAgICBpZiAobm9kZS52YXJpYWJsZUFj
Y2Vzc0RhdGEoKSAhPSB2YXJpYWJsZUFjY2Vzc0RhdGEpCisgICAgICAgICAgICAgICAgaWYgKG5v
ZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpICE9IHZhcmlhYmxlQWNjZXNzRGF0YSkKICAgICAgICAg
ICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgc3Vic3RpdHV0ZShibG9jaywg
aW5kZXhJbkJsb2NrLCBub2RlSW5kZXgsIG5ld0dldExvY2FsKTsKLSAgICAgICAgICAgICAgICBO
b2RlSW5kZXggb2xkVGFpbEluZGV4ID0gYmxvY2sudmFyaWFibGVzQXRUYWlsLm9wZXJhbmQodmFy
aWFibGVBY2Nlc3NEYXRhLT5sb2NhbCgpKTsKLSAgICAgICAgICAgICAgICBpZiAob2xkVGFpbElu
ZGV4ID09IG5vZGVJbmRleCkKKyAgICAgICAgICAgICAgICBzdWJzdGl0dXRlKGJsb2NrLCBpbmRl
eEluQmxvY2ssIG5vZGUsIG5ld0dldExvY2FsKTsKKyAgICAgICAgICAgICAgICBOb2RlKiBvbGRU
YWlsTm9kZSA9IGJsb2NrLnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKHZhcmlhYmxlQWNjZXNzRGF0
YS0+bG9jYWwoKSk7CisgICAgICAgICAgICAgICAgaWYgKG9sZFRhaWxOb2RlID09IG5vZGUpCiAg
ICAgICAgICAgICAgICAgICAgIGJsb2NrLnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKHZhcmlhYmxl
QWNjZXNzRGF0YS0+bG9jYWwoKSkgPSBuZXdHZXRMb2NhbDsKICAgICAgICAgICAgICAgICBzaG91
bGRDb250aW51ZSA9IGZhbHNlOwogICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtNzE3LDYgKzY5
NCw4IEBAIHB1YmxpYzoKICAgICBDb2RlQmxvY2sqIG1fY29kZUJsb2NrOwogICAgIFJlZlB0cjxQ
cm9maWxlcjo6Q29tcGlsYXRpb24+IG1fY29tcGlsYXRpb247CiAgICAgQ29kZUJsb2NrKiBtX3By
b2ZpbGVkQmxvY2s7CisgICAgCisgICAgTm9kZUFsbG9jYXRvciYgbV9hbGxvY2F0b3I7CiAKICAg
ICBWZWN0b3I8IE93blB0cjxCYXNpY0Jsb2NrPiAsIDg+IG1fYmxvY2tzOwogICAgIFZlY3RvcjxF
ZGdlLCAxNj4gbV92YXJBcmdDaGlsZHJlbjsKQEAgLTcyNCw3ICs3MDMsNyBAQCBwdWJsaWM6CiAg
ICAgVmVjdG9yPFJlc29sdmVHbG9iYWxEYXRhPiBtX3Jlc29sdmVHbG9iYWxEYXRhOwogICAgIFZl
Y3RvcjxSZXNvbHZlT3BlcmF0aW9uRGF0YT4gbV9yZXNvbHZlT3BlcmF0aW9uc0RhdGE7CiAgICAg
VmVjdG9yPFB1dFRvQmFzZU9wZXJhdGlvbkRhdGE+IG1fcHV0VG9CYXNlT3BlcmF0aW9uRGF0YTsK
LSAgICBWZWN0b3I8Tm9kZUluZGV4LCA4PiBtX2FyZ3VtZW50czsKKyAgICBWZWN0b3I8Tm9kZSos
IDg+IG1fYXJndW1lbnRzOwogICAgIFNlZ21lbnRlZFZlY3RvcjxWYXJpYWJsZUFjY2Vzc0RhdGEs
IDE2PiBtX3ZhcmlhYmxlQWNjZXNzRGF0YTsKICAgICBTZWdtZW50ZWRWZWN0b3I8QXJndW1lbnRQ
b3NpdGlvbiwgOD4gbV9hcmd1bWVudFBvc2l0aW9uczsKICAgICBTZWdtZW50ZWRWZWN0b3I8U3Ry
dWN0dXJlU2V0LCAxNj4gbV9zdHJ1Y3R1cmVTZXQ7CkBAIC03NDQsMjkgKzcyMywyOSBAQCBwcml2
YXRlOgogICAgIAogICAgIHZvaWQgaGFuZGxlU3VjY2Vzc29yKFZlY3RvcjxCbG9ja0luZGV4LCAx
Nj4mIHdvcmtsaXN0LCBCbG9ja0luZGV4IGJsb2NrSW5kZXgsIEJsb2NrSW5kZXggc3VjY2Vzc29y
SW5kZXgpOwogICAgIAotICAgIEFkZFNwZWN1bGF0aW9uTW9kZSBhZGRJbW1lZGlhdGVTaG91bGRT
cGVjdWxhdGVJbnRlZ2VyKE5vZGUmIGFkZCwgYm9vbCB2YXJpYWJsZVNob3VsZFNwZWN1bGF0ZUlu
dGVnZXIsIE5vZGUmIGltbWVkaWF0ZSkKKyAgICBBZGRTcGVjdWxhdGlvbk1vZGUgYWRkSW1tZWRp
YXRlU2hvdWxkU3BlY3VsYXRlSW50ZWdlcihOb2RlKiBhZGQsIGJvb2wgdmFyaWFibGVTaG91bGRT
cGVjdWxhdGVJbnRlZ2VyLCBOb2RlKiBpbW1lZGlhdGUpCiAgICAgewogICAgICAgICBBU1NFUlQo
aW1tZWRpYXRlLmhhc0NvbnN0YW50KCkpOwogICAgICAgICAKLSAgICAgICAgSlNWYWx1ZSBpbW1l
ZGlhdGVWYWx1ZSA9IGltbWVkaWF0ZS52YWx1ZU9mSlNDb25zdGFudChtX2NvZGVCbG9jayk7Ci0g
ICAgICAgIGlmICghaW1tZWRpYXRlVmFsdWUuaXNOdW1iZXIoKSkKKyAgICAgICAgSlNWYWx1ZSBp
bW1lZGlhdGVWYWx1ZSA9IGltbWVkaWF0ZS0+dmFsdWVPZkpTQ29uc3RhbnQobV9jb2RlQmxvY2sp
OworICAgICAgICBpZiAoIWltbWVkaWF0ZVZhbHVlLT5pc051bWJlcigpKQogICAgICAgICAgICAg
cmV0dXJuIERvbnRTcGVjdWxhdGVJbnRlZ2VyOwogICAgICAgICAKICAgICAgICAgaWYgKCF2YXJp
YWJsZVNob3VsZFNwZWN1bGF0ZUludGVnZXIpCiAgICAgICAgICAgICByZXR1cm4gRG9udFNwZWN1
bGF0ZUludGVnZXI7CiAgICAgICAgIAotICAgICAgICBpZiAoaW1tZWRpYXRlVmFsdWUuaXNJbnQz
MigpKQotICAgICAgICAgICAgcmV0dXJuIGFkZC5jYW5TcGVjdWxhdGVJbnRlZ2VyKCkgPyBTcGVj
dWxhdGVJbnRlZ2VyIDogRG9udFNwZWN1bGF0ZUludGVnZXI7CisgICAgICAgIGlmIChpbW1lZGlh
dGVWYWx1ZS0+aXNJbnQzMigpKQorICAgICAgICAgICAgcmV0dXJuIGFkZC0+Y2FuU3BlY3VsYXRl
SW50ZWdlcigpID8gU3BlY3VsYXRlSW50ZWdlciA6IERvbnRTcGVjdWxhdGVJbnRlZ2VyOwogICAg
ICAgICAKICAgICAgICAgZG91YmxlIGRvdWJsZUltbWVkaWF0ZSA9IGltbWVkaWF0ZVZhbHVlLmFz
RG91YmxlKCk7CiAgICAgICAgIGNvbnN0IGRvdWJsZSB0d29Ub1RoZTQ4ID0gMjgxNDc0OTc2NzEw
NjU2LjA7CiAgICAgICAgIGlmIChkb3VibGVJbW1lZGlhdGUgPCAtdHdvVG9UaGU0OCB8fCBkb3Vi
bGVJbW1lZGlhdGUgPiB0d29Ub1RoZTQ4KQogICAgICAgICAgICAgcmV0dXJuIERvbnRTcGVjdWxh
dGVJbnRlZ2VyOwogICAgICAgICAKLSAgICAgICAgcmV0dXJuIG5vZGVDYW5UcnVuY2F0ZUludGVn
ZXIoYWRkLmFyaXRoTm9kZUZsYWdzKCkpID8gU3BlY3VsYXRlSW50ZWdlckJ1dEFsd2F5c1dhdGNo
T3ZlcmZsb3cgOiBEb250U3BlY3VsYXRlSW50ZWdlcjsKKyAgICAgICAgcmV0dXJuIG5vZGVDYW5U
cnVuY2F0ZUludGVnZXIoYWRkLT5hcml0aE5vZGVGbGFncygpKSA/IFNwZWN1bGF0ZUludGVnZXJC
dXRBbHdheXNXYXRjaE92ZXJmbG93IDogRG9udFNwZWN1bGF0ZUludGVnZXI7CiAgICAgfQogICAg
IAotICAgIGJvb2wgbXVsSW1tZWRpYXRlU2hvdWxkU3BlY3VsYXRlSW50ZWdlcihOb2RlJiBtdWws
IE5vZGUmIHZhcmlhYmxlLCBOb2RlJiBpbW1lZGlhdGUpCisgICAgYm9vbCBtdWxJbW1lZGlhdGVT
aG91bGRTcGVjdWxhdGVJbnRlZ2VyKE5vZGUqIG11bCwgTm9kZSogdmFyaWFibGUsIE5vZGUqIGlt
bWVkaWF0ZSkKICAgICB7CiAgICAgICAgIEFTU0VSVChpbW1lZGlhdGUuaGFzQ29uc3RhbnQoKSk7
CiAgICAgICAgIApAQCAtNzc0LDcgKzc1Myw3IEBAIHByaXZhdGU6CiAgICAgICAgIGlmICghaW1t
ZWRpYXRlVmFsdWUuaXNJbnQzMigpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAg
ICAKLSAgICAgICAgaWYgKCF2YXJpYWJsZS5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyRm9yQXJpdGht
ZXRpYygpKQorICAgICAgICBpZiAoIXZhcmlhYmxlLT5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyRm9y
QXJpdGhtZXRpYygpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAKICAgICAg
ICAgaW50MzJfdCBpbnRJbW1lZGlhdGUgPSBpbW1lZGlhdGVWYWx1ZS5hc0ludDMyKCk7CkBAIC03
ODUsMTQgKzc2NCwxNCBAQCBwcml2YXRlOgogICAgICAgICAvLyBjYW5TcGVjdWxhdGVJbnRlZ2Vy
KCkgaW1wbGllcykuCiAgICAgICAgIGNvbnN0IGludDMyX3QgdHdvVG9UaGUyMiA9IDEgPDwgMjI7
CiAgICAgICAgIGlmIChpbnRJbW1lZGlhdGUgPD0gLXR3b1RvVGhlMjIgfHwgaW50SW1tZWRpYXRl
ID49IHR3b1RvVGhlMjIpCi0gICAgICAgICAgICByZXR1cm4gbXVsLmNhblNwZWN1bGF0ZUludGVn
ZXIoKSAmJiAhbm9kZU1heU92ZXJmbG93KG11bC5hcml0aE5vZGVGbGFncygpKTsKKyAgICAgICAg
ICAgIHJldHVybiBtdWwtPmNhblNwZWN1bGF0ZUludGVnZXIoKSAmJiAhbm9kZU1heU92ZXJmbG93
KG11bC0+YXJpdGhOb2RlRmxhZ3MoKSk7CiAKLSAgICAgICAgcmV0dXJuIG11bC5jYW5TcGVjdWxh
dGVJbnRlZ2VyKCk7CisgICAgICAgIHJldHVybiBtdWwtPmNhblNwZWN1bGF0ZUludGVnZXIoKTsK
ICAgICB9CiAgICAgCiAgICAgLy8gV2hlbiBhIG5vZGUncyByZWZDb3VudCBnb2VzIGZyb20gMCB0
byAxLCBpdCBtdXN0IChsb2dpY2FsbHkpIHJlY3Vyc2l2ZWx5IHJlZiBhbGwgb2YgaXRzIGNoaWxk
cmVuLCBhbmQgdmljZSB2ZXJzYS4KLSAgICB2b2lkIHJlZkNoaWxkcmVuKE5vZGVJbmRleCk7Ci0g
ICAgdm9pZCBkZXJlZkNoaWxkcmVuKE5vZGVJbmRleCk7CisgICAgdm9pZCByZWZDaGlsZHJlbihO
b2RlKik7CisgICAgdm9pZCBkZXJlZkNoaWxkcmVuKE5vZGUqKTsKIH07CiAKIGNsYXNzIEdldEJ5
dGVjb2RlQmVnaW5Gb3JCbG9jayB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0luc2VydGlvblNldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHSW5zZXJ0aW9uU2V0LmgJKHJldmlzaW9uIDE0MDMwNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHSW5zZXJ0aW9uU2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTcyLDcgKzcyLDcg
QEAgcHVibGljOgogICAgIH0KIAogI2RlZmluZSBERkdfREVGSU5FX0lOU0VSVF9OT0RFKHRlbXBs
YXRlUHJlLCB0ZW1wbGF0ZVBvc3QsIHR5cGVQYXJhbXMsIHZhbHVlUGFyYW1zQ29tbWEsIHZhbHVl
UGFyYW1zLCB2YWx1ZUFyZ3MpIFwKLSAgICB0ZW1wbGF0ZVByZSB0eXBlUGFyYW1zIHRlbXBsYXRl
UG9zdCBOb2RlSW5kZXggaW5zZXJ0Tm9kZShzaXplX3QgaW5kZXgsIFJlZkNoaWxkcmVuTW9kZSBy
ZWZDaGlsZHJlbk1vZGUsIFJlZk5vZGVNb2RlIHJlZk5vZGVNb2RlLCBTcGVjdWxhdGVkVHlwZSB0
eXBlIHZhbHVlUGFyYW1zQ29tbWEgdmFsdWVQYXJhbXMpIFwKKyAgICB0ZW1wbGF0ZVByZSB0eXBl
UGFyYW1zIHRlbXBsYXRlUG9zdCBOb2RlKiBpbnNlcnROb2RlKHNpemVfdCBpbmRleCwgUmVmQ2hp
bGRyZW5Nb2RlIHJlZkNoaWxkcmVuTW9kZSwgUmVmTm9kZU1vZGUgcmVmTm9kZU1vZGUsIFNwZWN1
bGF0ZWRUeXBlIHR5cGUgdmFsdWVQYXJhbXNDb21tYSB2YWx1ZVBhcmFtcykgXAogICAgIHsgXAog
ICAgICAgICByZXR1cm4gaW5zZXJ0KGluZGV4LCBtX2dyYXBoLmFkZE5vZGUocmVmQ2hpbGRyZW5N
b2RlLCByZWZOb2RlTW9kZSwgdHlwZSB2YWx1ZVBhcmFtc0NvbW1hIHZhbHVlQXJncykpOyBcCiAg
ICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdMb25nTGl2ZWRTdGF0ZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdMb25nTGl2ZWRT
dGF0ZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0xv
bmdMaXZlZFN0YXRlLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0OSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiREZHTG9uZ0xpdmVkU3RhdGUuaCIKKworI2lmIEVOQUJMRShERkdfSklUKQor
CituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK0xvbmdMaXZlZFN0YXRlOjpMb25n
TGl2ZWRTdGF0ZSgpCit7Cit9CisKK0xvbmdMaXZlZFN0YXRlOjp+TG9uZ0xpdmVkU3RhdGUoKQor
eworfQorCit2b2lkIExvbmdMaXZlZFN0YXRlOjpzaHJpbmtUb0ZpdCgpCit7CisgICAgbV9hbGxv
Y2F0b3IucmVzZXQoKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYg
Ly8gRU5BQkxFKERGR19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
TG9uZ0xpdmVkU3RhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0xvbmdMaXZlZFN0YXRlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0xvbmdMaXZlZFN0YXRlLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTUgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBE
RkdMb25nTGl2ZWRTdGF0ZV9oCisjZGVmaW5lIERGR0xvbmdMaXZlZFN0YXRlX2gKKworI2luY2x1
ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJE
RkdOb2RlQWxsb2NhdG9yLmgiCisjaW5jbHVkZSA8d3RmL0Zhc3RBbGxvY0Jhc2UuaD4KKyNpbmNs
dWRlIDx3dGYvTm9uY29weWFibGUuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcg
eworCitjbGFzcyBMb25nTGl2ZWRTdGF0ZSB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7
IFdURl9NQUtFX05PTkNPUFlBQkxFKExvbmdMaXZlZFN0YXRlKTsKK3B1YmxpYzoKKyAgICBMb25n
TGl2ZWRTdGF0ZSgpOworICAgIH5Mb25nTGl2ZWRTdGF0ZSgpOworICAgIAorICAgIHZvaWQgc2hy
aW5rVG9GaXQoKTsKKyAgICAKKyAgICBOb2RlQWxsb2NhdG9yIG1fYWxsb2NhdG9yOworfTsKKwor
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisK
KyNlbmRpZiAvLyBERkdMb25nTGl2ZWRTdGF0ZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHTm9kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdOb2RlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHTm9kZS5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTUgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIkRGR05vZGUuaCIKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAi
REZHTm9kZUFsbG9jYXRvci5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisK
K3Vuc2lnbmVkIE5vZGU6OmluZGV4KCkgY29uc3QKK3sKKyAgICByZXR1cm4gTm9kZUFsbG9jYXRv
cjo6YWxsb2NhdG9yT2YodGhpcyktPmluZGV4T2YodGhpcyk7Cit9CisKK30gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpERkcKKworbmFtZXNwYWNlIFdURiB7CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmlu
dFN0cmVhbSYgb3V0LCBOb2RlKiBub2RlKQoreworICAgIGlmICghbm9kZSkKKyAgICAgICAgb3V0
LnByaW50KCItIik7CisgICAgZWxzZQorICAgICAgICBvdXQucHJpbnQoIkAiLCBub2RlLT5pbmRl
eCgpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJ
VCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHJldmlzaW9uIDE0MDMw
NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTIsIDIw
MTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC02OCw3ICs2OCw3IEBAIHN0cnVjdCBOZXdBcnJheUJ1ZmZlckRhdGEgewog
CiAvLyBUaGlzIHR5cGUgdXNlZCBpbiBwYXNzaW5nIGFuIGltbWVkaWF0ZSBhcmd1bWVudCB0byBO
b2RlIGNvbnN0cnVjdG9yOwogLy8gZGlzdGluZ3Vpc2hlcyBhbiBpbW1lZGlhdGUgdmFsdWUgKHR5
cGljYWxseSBhbiBpbmRleCBpbnRvIGEgQ29kZUJsb2NrIGRhdGEgc3RydWN0dXJlIC0gCi0vLyBh
IGNvbnN0YW50IGluZGV4LCBhcmd1bWVudCwgb3IgaWRlbnRpZmllcikgZnJvbSBhIE5vZGVJbmRl
eC4KKy8vIGEgY29uc3RhbnQgaW5kZXgsIGFyZ3VtZW50LCBvciBpZGVudGlmaWVyKSBmcm9tIGEg
Tm9kZSouCiBzdHJ1Y3QgT3BJbmZvIHsKICAgICBleHBsaWNpdCBPcEluZm8oaW50MzJfdCB2YWx1
ZSkgOiBtX3ZhbHVlKHN0YXRpY19jYXN0PHVpbnRwdHJfdD4odmFsdWUpKSB7IH0KICAgICBleHBs
aWNpdCBPcEluZm8odWludDMyX3QgdmFsdWUpIDogbV92YWx1ZShzdGF0aWNfY2FzdDx1aW50cHRy
X3Q+KHZhbHVlKSkgeyB9CkBAIC05OSw3ICs5OSw3IEBAIHN0cnVjdCBOb2RlIHsKICAgICB9CiAg
ICAgCiAgICAgLy8gQ29uc3RydWN0IGEgbm9kZSB3aXRoIHVwIHRvIDMgY2hpbGRyZW4sIG5vIGlt
bWVkaWF0ZSB2YWx1ZS4KLSAgICBOb2RlKE5vZGVUeXBlIG9wLCBDb2RlT3JpZ2luIGNvZGVPcmln
aW4sIE5vZGVJbmRleCBjaGlsZDEgPSBOb05vZGUsIE5vZGVJbmRleCBjaGlsZDIgPSBOb05vZGUs
IE5vZGVJbmRleCBjaGlsZDMgPSBOb05vZGUpCisgICAgTm9kZShOb2RlVHlwZSBvcCwgQ29kZU9y
aWdpbiBjb2RlT3JpZ2luLCBOb2RlKiBjaGlsZDEgPSAwLCBOb2RlKiBjaGlsZDIgPSAwLCBOb2Rl
KiBjaGlsZDMgPSAwKQogICAgICAgICA6IGNvZGVPcmlnaW4oY29kZU9yaWdpbikKICAgICAgICAg
LCBjaGlsZHJlbihBZGphY2VuY3lMaXN0OjpGaXhlZCwgY2hpbGQxLCBjaGlsZDIsIGNoaWxkMykK
ICAgICAgICAgLCBtX3ZpcnR1YWxSZWdpc3RlcihJbnZhbGlkVmlydHVhbFJlZ2lzdGVyKQpAQCAt
MTExLDcgKzExMSw3IEBAIHN0cnVjdCBOb2RlIHsKICAgICB9CiAKICAgICAvLyBDb25zdHJ1Y3Qg
YSBub2RlIHdpdGggdXAgdG8gMyBjaGlsZHJlbiBhbmQgYW4gaW1tZWRpYXRlIHZhbHVlLgotICAg
IE5vZGUoTm9kZVR5cGUgb3AsIENvZGVPcmlnaW4gY29kZU9yaWdpbiwgT3BJbmZvIGltbSwgTm9k
ZUluZGV4IGNoaWxkMSA9IE5vTm9kZSwgTm9kZUluZGV4IGNoaWxkMiA9IE5vTm9kZSwgTm9kZUlu
ZGV4IGNoaWxkMyA9IE5vTm9kZSkKKyAgICBOb2RlKE5vZGVUeXBlIG9wLCBDb2RlT3JpZ2luIGNv
ZGVPcmlnaW4sIE9wSW5mbyBpbW0sIE5vZGUqIGNoaWxkMSA9IDAsIE5vZGUqIGNoaWxkMiA9IDAs
IE5vZGUqIGNoaWxkMyA9IDApCiAgICAgICAgIDogY29kZU9yaWdpbihjb2RlT3JpZ2luKQogICAg
ICAgICAsIGNoaWxkcmVuKEFkamFjZW5jeUxpc3Q6OkZpeGVkLCBjaGlsZDEsIGNoaWxkMiwgY2hp
bGQzKQogICAgICAgICAsIG1fdmlydHVhbFJlZ2lzdGVyKEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIp
CkBAIC0xMjQsNyArMTI0LDcgQEAgc3RydWN0IE5vZGUgewogICAgIH0KIAogICAgIC8vIENvbnN0
cnVjdCBhIG5vZGUgd2l0aCB1cCB0byAzIGNoaWxkcmVuIGFuZCB0d28gaW1tZWRpYXRlIHZhbHVl
cy4KLSAgICBOb2RlKE5vZGVUeXBlIG9wLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIE9wSW5mbyBp
bW0xLCBPcEluZm8gaW1tMiwgTm9kZUluZGV4IGNoaWxkMSA9IE5vTm9kZSwgTm9kZUluZGV4IGNo
aWxkMiA9IE5vTm9kZSwgTm9kZUluZGV4IGNoaWxkMyA9IE5vTm9kZSkKKyAgICBOb2RlKE5vZGVU
eXBlIG9wLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIE9wSW5mbyBpbW0xLCBPcEluZm8gaW1tMiwg
Tm9kZSogY2hpbGQxID0gMCwgTm9kZSogY2hpbGQyID0gMCwgTm9kZSogY2hpbGQzID0gMCkKICAg
ICAgICAgOiBjb2RlT3JpZ2luKGNvZGVPcmlnaW4pCiAgICAgICAgICwgY2hpbGRyZW4oQWRqYWNl
bmN5TGlzdDo6Rml4ZWQsIGNoaWxkMSwgY2hpbGQyLCBjaGlsZDMpCiAgICAgICAgICwgbV92aXJ0
dWFsUmVnaXN0ZXIoSW52YWxpZFZpcnR1YWxSZWdpc3RlcikKQEAgLTE1NCw2ICsxNTQsOSBAQCBz
dHJ1Y3QgTm9kZSB7CiAgICAgTm9kZVR5cGUgb3AoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2Fz
dDxOb2RlVHlwZT4obV9vcCk7IH0KICAgICBOb2RlRmxhZ3MgZmxhZ3MoKSBjb25zdCB7IHJldHVy
biBtX2ZsYWdzOyB9CiAgICAgCisgICAgLy8gVGhpcyBpcyBub3QgYSBmYXN0IG1ldGhvZC4KKyAg
ICB1bnNpZ25lZCBpbmRleCgpIGNvbnN0OworICAgIAogICAgIHZvaWQgc2V0T3AoTm9kZVR5cGUg
b3ApCiAgICAgewogICAgICAgICBtX29wID0gb3A7CkBAIC0yODEsNyArMjg0LDcgQEAgc3RydWN0
IE5vZGUgewogICAgICAgICBjb252ZXJ0VG9TdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludChz
dHJ1Y3R1cmVTZXQoKS5zaW5nbGV0b25TdHJ1Y3R1cmUoKSk7CiAgICAgfQogICAgIAotICAgIHZv
aWQgY29udmVydFRvR2V0QnlPZmZzZXQodW5zaWduZWQgc3RvcmFnZUFjY2Vzc0RhdGFJbmRleCwg
Tm9kZUluZGV4IHN0b3JhZ2UpCisgICAgdm9pZCBjb252ZXJ0VG9HZXRCeU9mZnNldCh1bnNpZ25l
ZCBzdG9yYWdlQWNjZXNzRGF0YUluZGV4LCBOb2RlKiBzdG9yYWdlKQogICAgIHsKICAgICAgICAg
QVNTRVJUKG1fb3AgPT0gR2V0QnlJZCB8fCBtX29wID09IEdldEJ5SWRGbHVzaCk7CiAgICAgICAg
IG1fb3BJbmZvID0gc3RvcmFnZUFjY2Vzc0RhdGFJbmRleDsKQEAgLTI5MCw3ICsyOTMsNyBAQCBz
dHJ1Y3QgTm9kZSB7CiAgICAgICAgIG1fZmxhZ3MgJj0gfk5vZGVDbG9iYmVyc1dvcmxkOwogICAg
IH0KICAgICAKLSAgICB2b2lkIGNvbnZlcnRUb1B1dEJ5T2Zmc2V0KHVuc2lnbmVkIHN0b3JhZ2VB
Y2Nlc3NEYXRhSW5kZXgsIE5vZGVJbmRleCBzdG9yYWdlKQorICAgIHZvaWQgY29udmVydFRvUHV0
QnlPZmZzZXQodW5zaWduZWQgc3RvcmFnZUFjY2Vzc0RhdGFJbmRleCwgTm9kZSogc3RvcmFnZSkK
ICAgICB7CiAgICAgICAgIEFTU0VSVChtX29wID09IFB1dEJ5SWQgfHwgbV9vcCA9PSBQdXRCeUlk
RGlyZWN0KTsKICAgICAgICAgbV9vcEluZm8gPSBzdG9yYWdlQWNjZXNzRGF0YUluZGV4OwpAQCAt
OTIwLDkgKzkyMywxMCBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAgIHJldHVybiBtX3JlZkNvdW50
OwogICAgIH0KIAotICAgIHZvaWQgcmVmKCkKKyAgICBOb2RlKiByZWYoKQogICAgIHsKICAgICAg
ICAgbV9yZWZDb3VudCsrOworICAgICAgICByZXR1cm4gdGhpczsKICAgICB9CiAKICAgICB1bnNp
Z25lZCBwb3N0Zml4UmVmKCkKQEAgLTExMzUsNDQgKzExMzksNDQgQEAgc3RydWN0IE5vZGUgewog
ICAgICAgICByZXR1cm4gaXNDZWxsU3BlY3VsYXRpb24ocHJlZGljdGlvbigpKTsKICAgICB9CiAg
ICAgCi0gICAgc3RhdGljIGJvb2wgc2hvdWxkU3BlY3VsYXRlSW50ZWdlcihOb2RlJiBvcDEsIE5v
ZGUmIG9wMikKKyAgICBzdGF0aWMgYm9vbCBzaG91bGRTcGVjdWxhdGVJbnRlZ2VyKE5vZGUqIG9w
MSwgTm9kZSogb3AyKQogICAgIHsKLSAgICAgICAgcmV0dXJuIG9wMS5zaG91bGRTcGVjdWxhdGVJ
bnRlZ2VyKCkgJiYgb3AyLnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKTsKKyAgICAgICAgcmV0dXJu
IG9wMS0+c2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpICYmIG9wMi0+c2hvdWxkU3BlY3VsYXRlSW50
ZWdlcigpOwogICAgIH0KICAgICAKLSAgICBzdGF0aWMgYm9vbCBzaG91bGRTcGVjdWxhdGVJbnRl
Z2VyRm9yQXJpdGhtZXRpYyhOb2RlJiBvcDEsIE5vZGUmIG9wMikKKyAgICBzdGF0aWMgYm9vbCBz
aG91bGRTcGVjdWxhdGVJbnRlZ2VyRm9yQXJpdGhtZXRpYyhOb2RlKiBvcDEsIE5vZGUqIG9wMikK
ICAgICB7Ci0gICAgICAgIHJldHVybiBvcDEuc2hvdWxkU3BlY3VsYXRlSW50ZWdlckZvckFyaXRo
bWV0aWMoKSAmJiBvcDIuc2hvdWxkU3BlY3VsYXRlSW50ZWdlckZvckFyaXRobWV0aWMoKTsKKyAg
ICAgICAgcmV0dXJuIG9wMS0+c2hvdWxkU3BlY3VsYXRlSW50ZWdlckZvckFyaXRobWV0aWMoKSAm
JiBvcDItPnNob3VsZFNwZWN1bGF0ZUludGVnZXJGb3JBcml0aG1ldGljKCk7CiAgICAgfQogICAg
IAotICAgIHN0YXRpYyBib29sIHNob3VsZFNwZWN1bGF0ZUludGVnZXJFeHBlY3RpbmdEZWZpbmVk
KE5vZGUmIG9wMSwgTm9kZSYgb3AyKQorICAgIHN0YXRpYyBib29sIHNob3VsZFNwZWN1bGF0ZUlu
dGVnZXJFeHBlY3RpbmdEZWZpbmVkKE5vZGUqIG9wMSwgTm9kZSogb3AyKQogICAgIHsKLSAgICAg
ICAgcmV0dXJuIG9wMS5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyRXhwZWN0aW5nRGVmaW5lZCgpICYm
IG9wMi5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyRXhwZWN0aW5nRGVmaW5lZCgpOworICAgICAgICBy
ZXR1cm4gb3AxLT5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyRXhwZWN0aW5nRGVmaW5lZCgpICYmIG9w
Mi0+c2hvdWxkU3BlY3VsYXRlSW50ZWdlckV4cGVjdGluZ0RlZmluZWQoKTsKICAgICB9CiAgICAg
Ci0gICAgc3RhdGljIGJvb2wgc2hvdWxkU3BlY3VsYXRlRG91YmxlRm9yQXJpdGhtZXRpYyhOb2Rl
JiBvcDEsIE5vZGUmIG9wMikKKyAgICBzdGF0aWMgYm9vbCBzaG91bGRTcGVjdWxhdGVEb3VibGVG
b3JBcml0aG1ldGljKE5vZGUqIG9wMSwgTm9kZSogb3AyKQogICAgIHsKLSAgICAgICAgcmV0dXJu
IG9wMS5zaG91bGRTcGVjdWxhdGVEb3VibGVGb3JBcml0aG1ldGljKCkgJiYgb3AyLnNob3VsZFNw
ZWN1bGF0ZURvdWJsZUZvckFyaXRobWV0aWMoKTsKKyAgICAgICAgcmV0dXJuIG9wMS0+c2hvdWxk
U3BlY3VsYXRlRG91YmxlRm9yQXJpdGhtZXRpYygpICYmIG9wMi0+c2hvdWxkU3BlY3VsYXRlRG91
YmxlRm9yQXJpdGhtZXRpYygpOwogICAgIH0KICAgICAKLSAgICBzdGF0aWMgYm9vbCBzaG91bGRT
cGVjdWxhdGVOdW1iZXIoTm9kZSYgb3AxLCBOb2RlJiBvcDIpCisgICAgc3RhdGljIGJvb2wgc2hv
dWxkU3BlY3VsYXRlTnVtYmVyKE5vZGUqIG9wMSwgTm9kZSogb3AyKQogICAgIHsKLSAgICAgICAg
cmV0dXJuIG9wMS5zaG91bGRTcGVjdWxhdGVOdW1iZXIoKSAmJiBvcDIuc2hvdWxkU3BlY3VsYXRl
TnVtYmVyKCk7CisgICAgICAgIHJldHVybiBvcDEtPnNob3VsZFNwZWN1bGF0ZU51bWJlcigpICYm
IG9wMi0+c2hvdWxkU3BlY3VsYXRlTnVtYmVyKCk7CiAgICAgfQogICAgIAotICAgIHN0YXRpYyBi
b29sIHNob3VsZFNwZWN1bGF0ZU51bWJlckV4cGVjdGluZ0RlZmluZWQoTm9kZSYgb3AxLCBOb2Rl
JiBvcDIpCisgICAgc3RhdGljIGJvb2wgc2hvdWxkU3BlY3VsYXRlTnVtYmVyRXhwZWN0aW5nRGVm
aW5lZChOb2RlKiBvcDEsIE5vZGUqIG9wMikKICAgICB7Ci0gICAgICAgIHJldHVybiBvcDEuc2hv
dWxkU3BlY3VsYXRlTnVtYmVyRXhwZWN0aW5nRGVmaW5lZCgpICYmIG9wMi5zaG91bGRTcGVjdWxh
dGVOdW1iZXJFeHBlY3RpbmdEZWZpbmVkKCk7CisgICAgICAgIHJldHVybiBvcDEtPnNob3VsZFNw
ZWN1bGF0ZU51bWJlckV4cGVjdGluZ0RlZmluZWQoKSAmJiBvcDItPnNob3VsZFNwZWN1bGF0ZU51
bWJlckV4cGVjdGluZ0RlZmluZWQoKTsKICAgICB9CiAgICAgCi0gICAgc3RhdGljIGJvb2wgc2hv
dWxkU3BlY3VsYXRlRmluYWxPYmplY3QoTm9kZSYgb3AxLCBOb2RlJiBvcDIpCisgICAgc3RhdGlj
IGJvb2wgc2hvdWxkU3BlY3VsYXRlRmluYWxPYmplY3QoTm9kZSogb3AxLCBOb2RlKiBvcDIpCiAg
ICAgewotICAgICAgICByZXR1cm4gb3AxLnNob3VsZFNwZWN1bGF0ZUZpbmFsT2JqZWN0KCkgJiYg
b3AyLnNob3VsZFNwZWN1bGF0ZUZpbmFsT2JqZWN0KCk7CisgICAgICAgIHJldHVybiBvcDEtPnNo
b3VsZFNwZWN1bGF0ZUZpbmFsT2JqZWN0KCkgJiYgb3AyLT5zaG91bGRTcGVjdWxhdGVGaW5hbE9i
amVjdCgpOwogICAgIH0KIAotICAgIHN0YXRpYyBib29sIHNob3VsZFNwZWN1bGF0ZUFycmF5KE5v
ZGUmIG9wMSwgTm9kZSYgb3AyKQorICAgIHN0YXRpYyBib29sIHNob3VsZFNwZWN1bGF0ZUFycmF5
KE5vZGUqIG9wMSwgTm9kZSogb3AyKQogICAgIHsKLSAgICAgICAgcmV0dXJuIG9wMS5zaG91bGRT
cGVjdWxhdGVBcnJheSgpICYmIG9wMi5zaG91bGRTcGVjdWxhdGVBcnJheSgpOworICAgICAgICBy
ZXR1cm4gb3AxLT5zaG91bGRTcGVjdWxhdGVBcnJheSgpICYmIG9wMi0+c2hvdWxkU3BlY3VsYXRl
QXJyYXkoKTsKICAgICB9CiAgICAgCiAgICAgYm9vbCBjYW5TcGVjdWxhdGVJbnRlZ2VyKCkKQEAg
LTExODQsMTUgKzExODgsMTcgQEAgc3RydWN0IE5vZGUgewogICAgIHsKICAgICAgICAgaWYgKCFj
aGlsZDEoKSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgb3V0LnByaW50ZigiQCV1Iiwg
Y2hpbGQxKCkuaW5kZXgoKSk7CisgICAgICAgIG91dC5wcmludGYoIkAldSIsIGNoaWxkMSgpLT5p
bmRleCgpKTsKICAgICAgICAgaWYgKCFjaGlsZDIoKSkKICAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgb3V0LnByaW50ZigiLCBAJXUiLCBjaGlsZDIoKS5pbmRleCgpKTsKKyAgICAgICAgb3V0
LnByaW50ZigiLCBAJXUiLCBjaGlsZDIoKS0+aW5kZXgoKSk7CiAgICAgICAgIGlmICghY2hpbGQz
KCkpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIG91dC5wcmludGYoIiwgQCV1IiwgY2hp
bGQzKCkuaW5kZXgoKSk7CisgICAgICAgIG91dC5wcmludGYoIiwgQCV1IiwgY2hpbGQzKCktPmlu
ZGV4KCkpOwogICAgIH0KICAgICAKKyAgICAvLyBOQi4gVGhpcyBjbGFzcyBtdXN0IGhhdmUgYSB0
cml2aWFsIGRlc3RydWN0b3IuCisgICAgCiAgICAgLy8gVXNlZCB0byBsb29rIHVwIGV4Y2VwdGlv
biBoYW5kbGluZyBpbmZvcm1hdGlvbiAoY3VycmVudGx5IGltcGxlbWVudGVkIGFzIGEgYnl0ZWNv
ZGUgaW5kZXgpLgogICAgIENvZGVPcmlnaW4gY29kZU9yaWdpbjsKICAgICAvLyBSZWZlcmVuY2Vz
IHRvIHVwIHRvIDMgY2hpbGRyZW4sIG9yIGxpbmtzIHRvIGEgdmFyaWFibGUgbGVuZ3RoIHNldCBv
ZiBjaGlsZHJlbi4KQEAgLTEyMTUsMTAgKzEyMjEsMTYgQEAgcHJpdmF0ZToKIHB1YmxpYzoKICAg
ICAvLyBGaWVsZHMgdXNlZCBieSB2YXJpb3VzIGFuYWx5c2VzLgogICAgIEFic3RyYWN0VmFsdWUg
dmFsdWU7Ci0gICAgTm9kZUluZGV4IHJlcGxhY2VtZW50OworICAgIE5vZGUqIHJlcGxhY2VtZW50
OwogfTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwogCituYW1lc3BhY2UgV1RGIHsKKwor
dm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiwgTm9kZSopOworCit9IC8vIG5hbWVzcGFj
ZSBXVEYKKwogI2VuZGlmCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHTm9kZUFsbG9jYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHTm9kZUFsbG9jYXRvci5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdOb2RlQWxsb2NhdG9yLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTEgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBE
RkdOb2RlQWxsb2NhdG9yX2gKKyNkZWZpbmUgREZHTm9kZUFsbG9jYXRvcl9oCisKKyNpbmNsdWRl
IDx3dGYvUGxhdGZvcm0uaD4KKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZH
QWxsb2NhdG9yLmgiCisjaW5jbHVkZSAiREZHTm9kZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIERGRyB7CisKK3R5cGVkZWYgQWxsb2NhdG9yPE5vZGUsIDQwOTU+IE5vZGVBbGxvY2F0
b3I7CisKK2lubGluZSB2b2lkKiBvcGVyYXRvciBuZXcgKHNpemVfdCBzaXplLCBOb2RlQWxsb2Nh
dG9yJiBhbGxvY2F0b3IpCit7CisgICAgQVNTRVJUKHNpemUgPT0gc2l6ZW9mKE5vZGUpKTsKKyAg
ICByZXR1cm4gYWxsb2NhdG9yLmFsbG9jYXRlKCk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlND
OjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZHTm9kZUFs
bG9jYXRvcl9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlv
blByb3BhZ2F0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAxNDAzMDYp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBo
YXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTEsIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDExLCAyMDEyLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtODUsNzUgKzg1LDczIEBAIHB1Ymxp
YzoKIHByaXZhdGU6CiAgICAgYm9vbCBzZXRQcmVkaWN0aW9uKFNwZWN1bGF0ZWRUeXBlIHByZWRp
Y3Rpb24pCiAgICAgewotICAgICAgICBBU1NFUlQobV9ncmFwaFttX2NvbXBpbGVJbmRleF0uaGFz
UmVzdWx0KCkpOworICAgICAgICBBU1NFUlQobV9jdXJyZW50Tm9kZS0+aGFzUmVzdWx0KCkpOwog
ICAgICAgICAKICAgICAgICAgLy8gc2V0UHJlZGljdGlvbigpIGlzIHVzZWQgd2hlbiB3ZSBrbm93
IHRoYXQgdGhlcmUgaXMgbm8gd2F5IHRoYXQgd2UgY2FuIGNoYW5nZQogICAgICAgICAvLyBvdXIg
bWluZHMgYWJvdXQgd2hhdCB0aGUgcHJlZGljdGlvbiBpcyBnb2luZyB0byBiZS4gVGhlcmUgaXMg
bm8gc2VtYW50aWMKICAgICAgICAgLy8gZGlmZmVyZW5jZSBiZXR3ZWVuIHNldFByZWRpY3Rpb24o
KSBhbmQgbWVyZ2VTcGVjdWxhdGlvbigpIG90aGVyIHRoYW4gdGhlCiAgICAgICAgIC8vIGluY3Jl
YXNlZCBjaGVja2luZyB0byB2YWxpZGF0ZSB0aGlzIHByb3BlcnR5LgotICAgICAgICBBU1NFUlQo
bV9ncmFwaFttX2NvbXBpbGVJbmRleF0ucHJlZGljdGlvbigpID09IFNwZWNOb25lIHx8IG1fZ3Jh
cGhbbV9jb21waWxlSW5kZXhdLnByZWRpY3Rpb24oKSA9PSBwcmVkaWN0aW9uKTsKKyAgICAgICAg
QVNTRVJUKG1fY3VycmVudE5vZGUtPnByZWRpY3Rpb24oKSA9PSBTcGVjTm9uZSB8fCBtX2N1cnJl
bnROb2RlLT5wcmVkaWN0aW9uKCkgPT0gcHJlZGljdGlvbik7CiAgICAgICAgIAotICAgICAgICBy
ZXR1cm4gbV9ncmFwaFttX2NvbXBpbGVJbmRleF0ucHJlZGljdChwcmVkaWN0aW9uKTsKKyAgICAg
ICAgcmV0dXJuIG1fY3VycmVudE5vZGUtPnByZWRpY3QocHJlZGljdGlvbik7CiAgICAgfQogICAg
IAogICAgIGJvb2wgbWVyZ2VQcmVkaWN0aW9uKFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24pCiAg
ICAgewotICAgICAgICBBU1NFUlQobV9ncmFwaFttX2NvbXBpbGVJbmRleF0uaGFzUmVzdWx0KCkp
OworICAgICAgICBBU1NFUlQobV9jdXJyZW50Tm9kZS0+aGFzUmVzdWx0KCkpOwogICAgICAgICAK
LSAgICAgICAgcmV0dXJuIG1fZ3JhcGhbbV9jb21waWxlSW5kZXhdLnByZWRpY3QocHJlZGljdGlv
bik7CisgICAgICAgIHJldHVybiBtX2N1cnJlbnROb2RlLT5wcmVkaWN0KHByZWRpY3Rpb24pOwog
ICAgIH0KICAgICAKLSAgICBib29sIGlzTm90TmVnWmVybyhOb2RlSW5kZXggbm9kZUluZGV4KQor
ICAgIGJvb2wgaXNOb3ROZWdaZXJvKE5vZGUqIG5vZGUpCiAgICAgewotICAgICAgICBpZiAoIW1f
Z3JhcGguaXNOdW1iZXJDb25zdGFudChub2RlSW5kZXgpKQorICAgICAgICBpZiAoIW1fZ3JhcGgu
aXNOdW1iZXJDb25zdGFudChub2RlKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAg
ICAgZG91YmxlIHZhbHVlID0gbV9ncmFwaC52YWx1ZU9mTnVtYmVyQ29uc3RhbnQobm9kZUluZGV4
KTsKKyAgICAgICAgZG91YmxlIHZhbHVlID0gbV9ncmFwaC52YWx1ZU9mTnVtYmVyQ29uc3RhbnQo
bm9kZSk7CiAgICAgICAgIHJldHVybiAhdmFsdWUgJiYgMS4wIC8gdmFsdWUgPCAwLjA7CiAgICAg
fQogICAgIAotICAgIGJvb2wgaXNOb3RaZXJvKE5vZGVJbmRleCBub2RlSW5kZXgpCisgICAgYm9v
bCBpc05vdFplcm8oTm9kZSogbm9kZSkKICAgICB7Ci0gICAgICAgIGlmICghbV9ncmFwaC5pc051
bWJlckNvbnN0YW50KG5vZGVJbmRleCkpCisgICAgICAgIGlmICghbV9ncmFwaC5pc051bWJlckNv
bnN0YW50KG5vZGUpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICByZXR1cm4g
ISFtX2dyYXBoLnZhbHVlT2ZOdW1iZXJDb25zdGFudChub2RlSW5kZXgpOworICAgICAgICByZXR1
cm4gISFtX2dyYXBoLnZhbHVlT2ZOdW1iZXJDb25zdGFudChub2RlKTsKICAgICB9CiAgICAgCi0g
ICAgYm9vbCBpc1dpdGhpblBvd2VyT2ZUd29Gb3JDb25zdGFudChOb2RlJiBub2RlLCBpbnQgcG93
ZXIpCisgICAgYm9vbCBpc1dpdGhpblBvd2VyT2ZUd29Gb3JDb25zdGFudChOb2RlKiBub2RlLCBp
bnQgcG93ZXIpCiAgICAgewotICAgICAgICBKU1ZhbHVlIGltbWVkaWF0ZVZhbHVlID0gbm9kZS52
YWx1ZU9mSlNDb25zdGFudChjb2RlQmxvY2soKSk7CisgICAgICAgIEpTVmFsdWUgaW1tZWRpYXRl
VmFsdWUgPSBub2RlLT52YWx1ZU9mSlNDb25zdGFudChjb2RlQmxvY2soKSk7CiAgICAgICAgIGlm
ICghaW1tZWRpYXRlVmFsdWUuaXNJbnQzMigpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgICAgICBpbnQzMl90IGludEltbWVkaWF0ZSA9IGltbWVkaWF0ZVZhbHVlLmFzSW50MzIoKTsK
ICAgICAgICAgcmV0dXJuIGludEltbWVkaWF0ZSA+IC0oMSA8PCBwb3dlcikgJiYgaW50SW1tZWRp
YXRlIDwgKDEgPDwgcG93ZXIpOwogICAgIH0KICAgICAKLSAgICBib29sIGlzV2l0aGluUG93ZXJP
ZlR3b05vblJlY3Vyc2l2ZShOb2RlSW5kZXggbm9kZUluZGV4LCBpbnQgcG93ZXIpCisgICAgYm9v
bCBpc1dpdGhpblBvd2VyT2ZUd29Ob25SZWN1cnNpdmUoTm9kZSogbm9kZSwgaW50IHBvd2VyKQog
ICAgIHsKLSAgICAgICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhbbm9kZUluZGV4XTsKLSAgICAgICAg
aWYgKG5vZGUub3AoKSAhPSBKU0NvbnN0YW50KQorICAgICAgICBpZiAobm9kZS0+b3AoKSAhPSBK
U0NvbnN0YW50KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICByZXR1cm4gaXNX
aXRoaW5Qb3dlck9mVHdvRm9yQ29uc3RhbnQobm9kZSwgcG93ZXIpOwogICAgIH0KICAgICAKLSAg
ICBib29sIGlzV2l0aGluUG93ZXJPZlR3byhOb2RlSW5kZXggbm9kZUluZGV4LCBpbnQgcG93ZXIp
CisgICAgYm9vbCBpc1dpdGhpblBvd2VyT2ZUd28oTm9kZSogbm9kZSwgaW50IHBvd2VyKQogICAg
IHsKLSAgICAgICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhbbm9kZUluZGV4XTsKLSAgICAgICAgc3dp
dGNoIChub2RlLm9wKCkpIHsKKyAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CiAgICAgICAg
IGNhc2UgSlNDb25zdGFudDogewogICAgICAgICAgICAgcmV0dXJuIGlzV2l0aGluUG93ZXJPZlR3
b0ZvckNvbnN0YW50KG5vZGUsIHBvd2VyKTsKICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAg
ICAgIGNhc2UgQml0QW5kOiB7Ci0gICAgICAgICAgICByZXR1cm4gaXNXaXRoaW5Qb3dlck9mVHdv
Tm9uUmVjdXJzaXZlKG5vZGUuY2hpbGQxKCkuaW5kZXgoKSwgcG93ZXIpCi0gICAgICAgICAgICAg
ICAgfHwgaXNXaXRoaW5Qb3dlck9mVHdvTm9uUmVjdXJzaXZlKG5vZGUuY2hpbGQyKCkuaW5kZXgo
KSwgcG93ZXIpOworICAgICAgICAgICAgcmV0dXJuIGlzV2l0aGluUG93ZXJPZlR3b05vblJlY3Vy
c2l2ZShub2RlLT5jaGlsZDEoKS5ub2RlKCksIHBvd2VyKQorICAgICAgICAgICAgICAgIHx8IGlz
V2l0aGluUG93ZXJPZlR3b05vblJlY3Vyc2l2ZShub2RlLT5jaGlsZDIoKS5ub2RlKCksIHBvd2Vy
KTsKICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgQml0UlNoaWZ0OgogICAg
ICAgICBjYXNlIEJpdFVSU2hpZnQ6IHsKLSAgICAgICAgICAgIE5vZGUmIHNoaWZ0QW1vdW50ID0g
bV9ncmFwaFtub2RlLmNoaWxkMigpXTsKLSAgICAgICAgICAgIGlmIChzaGlmdEFtb3VudC5vcCgp
ICE9IEpTQ29uc3RhbnQpCisgICAgICAgICAgICBOb2RlKiBzaGlmdEFtb3VudCA9IG5vZGUtPmNo
aWxkMigpLm5vZGUoKTsKKyAgICAgICAgICAgIGlmIChzaGlmdEFtb3VudC0+b3AoKSAhPSBKU0Nv
bnN0YW50KQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIEpTVmFs
dWUgaW1tZWRpYXRlVmFsdWUgPSBzaGlmdEFtb3VudC52YWx1ZU9mSlNDb25zdGFudChjb2RlQmxv
Y2soKSk7CisgICAgICAgICAgICBKU1ZhbHVlIGltbWVkaWF0ZVZhbHVlID0gc2hpZnRBbW91bnQt
PnZhbHVlT2ZKU0NvbnN0YW50KGNvZGVCbG9jaygpKTsKICAgICAgICAgICAgIGlmICghaW1tZWRp
YXRlVmFsdWUuaXNJbnQzMigpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAg
ICAgICAgIHJldHVybiBpbW1lZGlhdGVWYWx1ZSA+IDMyIC0gcG93ZXI7CkBAIC0xNzgsMTYgKzE3
NiwxNiBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4gc3BlY3VsYXRlZERvdWJsZVR5cGVGb3JQ
cmVkaWN0aW9uKG1lcmdlU3BlY3VsYXRpb25zKGxlZnQsIHJpZ2h0KSk7CiAgICAgfQogCi0gICAg
dm9pZCBwcm9wYWdhdGUoTm9kZSYgbm9kZSkKKyAgICB2b2lkIHByb3BhZ2F0ZShOb2RlKiBub2Rl
KQogICAgIHsKLSAgICAgICAgaWYgKCFub2RlLnNob3VsZEdlbmVyYXRlKCkpCisgICAgICAgIGlm
ICghbm9kZS0+c2hvdWxkR2VuZXJhdGUoKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
Ci0gICAgICAgIE5vZGVUeXBlIG9wID0gbm9kZS5vcCgpOwotICAgICAgICBOb2RlRmxhZ3MgZmxh
Z3MgPSBub2RlLmZsYWdzKCkgJiBOb2RlQmFja1Byb3BNYXNrOworICAgICAgICBOb2RlVHlwZSBv
cCA9IG5vZGUtPm9wKCk7CisgICAgICAgIE5vZGVGbGFncyBmbGFncyA9IG5vZGUtPmZsYWdzKCkg
JiBOb2RlQmFja1Byb3BNYXNrOwogCiAjaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9W
RVJCT1NFKQotICAgICAgICBkYXRhTG9nRigiICAgJXMgQCV1OiAlcyAiLCBHcmFwaDo6b3BOYW1l
KG9wKSwgbV9jb21waWxlSW5kZXgsIG5vZGVGbGFnc0FzU3RyaW5nKGZsYWdzKSk7CisgICAgICAg
IGRhdGFMb2coIiAgICIsIEdyYXBoOjpvcE5hbWUob3ApLCAiICIsIG1fY3VycmVudE5vZGUsICI6
ICIsIG5vZGVGbGFnc0FzU3RyaW5nKGZsYWdzKSwgIiAiKTsKICNlbmRpZgogICAgICAgICAKICAg
ICAgICAgYm9vbCBjaGFuZ2VkID0gZmFsc2U7CkBAIC0xOTUsMTIgKzE5MywxMiBAQCBwcml2YXRl
OgogICAgICAgICBzd2l0Y2ggKG9wKSB7CiAgICAgICAgIGNhc2UgSlNDb25zdGFudDoKICAgICAg
ICAgY2FzZSBXZWFrSlNDb25zdGFudDogewotICAgICAgICAgICAgY2hhbmdlZCB8PSBzZXRQcmVk
aWN0aW9uKHNwZWN1bGF0aW9uRnJvbVZhbHVlKG1fZ3JhcGgudmFsdWVPZkpTQ29uc3RhbnQobV9j
b21waWxlSW5kZXgpKSk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IHNldFByZWRpY3Rpb24oc3Bl
Y3VsYXRpb25Gcm9tVmFsdWUobV9ncmFwaC52YWx1ZU9mSlNDb25zdGFudChub2RlKSkpOwogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBjYXNlIEdl
dExvY2FsOiB7Ci0gICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNz
RGF0YSA9IG5vZGUudmFyaWFibGVBY2Nlc3NEYXRhKCk7CisgICAgICAgICAgICBWYXJpYWJsZUFj
Y2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgp
OwogICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiA9IHZhcmlhYmxlQWNjZXNz
RGF0YS0+cHJlZGljdGlvbigpOwogICAgICAgICAgICAgaWYgKHByZWRpY3Rpb24pCiAgICAgICAg
ICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVByZWRpY3Rpb24ocHJlZGljdGlvbik7CkBAIC0yMTAs
MjEgKzIwOCwyMSBAQCBwcml2YXRlOgogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAg
Y2FzZSBTZXRMb2NhbDogewotICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJs
ZUFjY2Vzc0RhdGEgPSBub2RlLnZhcmlhYmxlQWNjZXNzRGF0YSgpOwotICAgICAgICAgICAgY2hh
bmdlZCB8PSB2YXJpYWJsZUFjY2Vzc0RhdGEtPnByZWRpY3QobV9ncmFwaFtub2RlLmNoaWxkMSgp
XS5wcmVkaWN0aW9uKCkpOworICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJs
ZUFjY2Vzc0RhdGEgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKKyAgICAgICAgICAgIGNo
YW5nZWQgfD0gdmFyaWFibGVBY2Nlc3NEYXRhLT5wcmVkaWN0KG5vZGUtPmNoaWxkMSgpLT5wcmVk
aWN0aW9uKCkpOwogCiAgICAgICAgICAgICAvLyBBc3N1bWUgY29uc2VydmF0aXZlbHkgdGhhdCBh
IFNldExvY2FsIGltcGxpZXMgdGhhdCB0aGUgdmFsdWUgbWF5IGZsb3cgdGhyb3VnaCBhIGxvb3As
CiAgICAgICAgICAgICAvLyBhbmQgc28gd2Ugd291bGQgaGF2ZSBvdmVyZmxvdyBsZWFkaW5nIHRv
IHRoZSBwcm9ncmFtICJvYnNlcnZpbmciIG51bWJlcnMgZXZlbiBpZiBhbGwKICAgICAgICAgICAg
IC8vIHVzZXJzIG9mIHRoZSB2YWx1ZSBhcmUgZG9pbmcgdG9JbnQzMi4gSXQgbWlnaHQgYmUgd29y
dGh3aGlsZSB0byByZXZpc2l0IHRoaXMgYXQgc29tZQogICAgICAgICAgICAgLy8gcG9pbnQgYW5k
IGFjdHVhbGx5IGNoZWNrIGlmIHRoZSBkYXRhIGZsb3cgaW52b2x2ZXMgbG9vcHMsIGJ1dCByaWdo
dCBub3cgSSBkb24ndCB0aGluawogICAgICAgICAgICAgLy8gd2UgaGF2ZSBldmlkZW5jZSB0aGF0
IHRoaXMgd291bGQgYmUgYmVuZWZpY2lhbCBmb3IgYmVuY2htYXJrcy4KLSAgICAgICAgICAgIGNo
YW5nZWQgfD0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5tZXJnZUZsYWdzKHZhcmlhYmxlQWNjZXNz
RGF0YS0+ZmxhZ3MoKSB8IE5vZGVVc2VkQXNOdW1iZXIpOworICAgICAgICAgICAgY2hhbmdlZCB8
PSBub2RlLT5jaGlsZDEoKS0+bWVyZ2VGbGFncyh2YXJpYWJsZUFjY2Vzc0RhdGEtPmZsYWdzKCkg
fCBOb2RlVXNlZEFzTnVtYmVyKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAg
ICAgICAgICAKICAgICAgICAgY2FzZSBGbHVzaDogewogICAgICAgICAgICAgLy8gTWFrZSBzdXJl
IHRoYXQgdGhlIGFuYWx5c2lzIGtub3dzIHRoYXQgZmx1c2hlZCBsb2NhbHMgZXNjYXBlLgotICAg
ICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBub2RlLnZh
cmlhYmxlQWNjZXNzRGF0YSgpOworICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJp
YWJsZUFjY2Vzc0RhdGEgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKICAgICAgICAgICAg
IGNoYW5nZWQgfD0gdmFyaWFibGVBY2Nlc3NEYXRhLT5tZXJnZUZsYWdzKE5vZGVVc2VkQXNWYWx1
ZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtMjM4LDggKzIzNiw4IEBAIHBy
aXZhdGU6CiAgICAgICAgICAgICBjaGFuZ2VkIHw9IHNldFByZWRpY3Rpb24oU3BlY0ludDMyKTsK
ICAgICAgICAgICAgIGZsYWdzIHw9IE5vZGVVc2VkQXNJbnQgfCBOb2RlVXNlZEFzSW50TG9jYWxs
eTsKICAgICAgICAgICAgIGZsYWdzICY9IH4oTm9kZVVzZWRBc051bWJlciB8IE5vZGVOZWVkc05l
Z1plcm8gfCBOb2RlVXNlZEFzT3RoZXIpOwotICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBo
W25vZGUuY2hpbGQxKCldLm1lcmdlRmxhZ3MoZmxhZ3MpOwotICAgICAgICAgICAgY2hhbmdlZCB8
PSBtX2dyYXBoW25vZGUuY2hpbGQyKCldLm1lcmdlRmxhZ3MoZmxhZ3MpOworICAgICAgICAgICAg
Y2hhbmdlZCB8PSBub2RlLT5jaGlsZDEoKS0+bWVyZ2VGbGFncyhmbGFncyk7CisgICAgICAgICAg
ICBjaGFuZ2VkIHw9IG5vZGUtPmNoaWxkMigpLT5tZXJnZUZsYWdzKGZsYWdzKTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKQEAgLTI0Nyw1MCArMjQ1LDUwIEBA
IHByaXZhdGU6CiAgICAgICAgICAgICBjaGFuZ2VkIHw9IHNldFByZWRpY3Rpb24oU3BlY0ludDMy
KTsKICAgICAgICAgICAgIGZsYWdzIHw9IE5vZGVVc2VkQXNJbnQgfCBOb2RlVXNlZEFzSW50TG9j
YWxseTsKICAgICAgICAgICAgIGZsYWdzICY9IH4oTm9kZVVzZWRBc051bWJlciB8IE5vZGVOZWVk
c05lZ1plcm8gfCBOb2RlVXNlZEFzT3RoZXIpOwotICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dy
YXBoW25vZGUuY2hpbGQxKCldLm1lcmdlRmxhZ3MoZmxhZ3MpOworICAgICAgICAgICAgY2hhbmdl
ZCB8PSBub2RlLT5jaGlsZDEoKS0+bWVyZ2VGbGFncyhmbGFncyk7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgQXJyYXlQb3A6IHsKLSAg
ICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKG5vZGUuZ2V0SGVhcFByZWRpY3Rp
b24oKSk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbihub2RlLT5nZXRI
ZWFwUHJlZGljdGlvbigpKTsKICAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VEZWZhdWx0Rmxh
Z3Mobm9kZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCiAgICAgICAgIGNhc2Ug
QXJyYXlQdXNoOiB7Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbihub2Rl
LmdldEhlYXBQcmVkaWN0aW9uKCkpOwotICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW25v
ZGUuY2hpbGQxKCldLm1lcmdlRmxhZ3MoTm9kZVVzZWRBc1ZhbHVlKTsKLSAgICAgICAgICAgIGNo
YW5nZWQgfD0gbV9ncmFwaFtub2RlLmNoaWxkMigpXS5tZXJnZUZsYWdzKE5vZGVVc2VkQXNWYWx1
ZSk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbihub2RlLT5nZXRIZWFw
UHJlZGljdGlvbigpKTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbm9kZS0+Y2hpbGQxKCktPm1l
cmdlRmxhZ3MoTm9kZVVzZWRBc1ZhbHVlKTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbm9kZS0+
Y2hpbGQyKCktPm1lcmdlRmxhZ3MoTm9kZVVzZWRBc1ZhbHVlKTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBSZWdFeHBFeGVjOgogICAgICAgICBjYXNlIFJl
Z0V4cFRlc3Q6IHsKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKG5vZGUu
Z2V0SGVhcFByZWRpY3Rpb24oKSk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGlj
dGlvbihub2RlLT5nZXRIZWFwUHJlZGljdGlvbigpKTsKICAgICAgICAgICAgIGNoYW5nZWQgfD0g
bWVyZ2VEZWZhdWx0RmxhZ3Mobm9kZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQog
CiAgICAgICAgIGNhc2UgU3RyaW5nQ2hhckNvZGVBdDogewogICAgICAgICAgICAgY2hhbmdlZCB8
PSBtZXJnZVByZWRpY3Rpb24oU3BlY0ludDMyKTsKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9n
cmFwaFtub2RlLmNoaWxkMSgpXS5tZXJnZUZsYWdzKE5vZGVVc2VkQXNWYWx1ZSk7Ci0gICAgICAg
ICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbm9kZS5jaGlsZDIoKV0ubWVyZ2VGbGFncyhOb2RlVXNl
ZEFzTnVtYmVyIHwgTm9kZVVzZWRBc090aGVyIHwgTm9kZVVzZWRBc0ludCB8IE5vZGVVc2VkQXNJ
bnRMb2NhbGx5KTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbm9kZS0+Y2hpbGQxKCktPm1lcmdl
RmxhZ3MoTm9kZVVzZWRBc1ZhbHVlKTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbm9kZS0+Y2hp
bGQyKCktPm1lcmdlRmxhZ3MoTm9kZVVzZWRBc051bWJlciB8IE5vZGVVc2VkQXNPdGhlciB8IE5v
ZGVVc2VkQXNJbnQgfCBOb2RlVXNlZEFzSW50TG9jYWxseSk7CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgfQogCiAgICAgICAgIGNhc2UgVUludDMyVG9OdW1iZXI6IHsKLSAgICAgICAgICAg
IGlmIChub2RlQ2FuU3BlY3VsYXRlSW50ZWdlcihub2RlLmFyaXRoTm9kZUZsYWdzKCkpKQorICAg
ICAgICAgICAgaWYgKG5vZGVDYW5TcGVjdWxhdGVJbnRlZ2VyKG5vZGUtPmFyaXRoTm9kZUZsYWdz
KCkpKQogICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKFNwZWNJbnQz
Mik7CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVBy
ZWRpY3Rpb24oU3BlY051bWJlcik7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGNoYW5nZWQg
fD0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5tZXJnZUZsYWdzKGZsYWdzKTsKKyAgICAgICAgICAg
IGNoYW5nZWQgfD0gbm9kZS0+Y2hpbGQxKCktPm1lcmdlRmxhZ3MoZmxhZ3MpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIFZhbHVlQWRkOiB7Ci0gICAgICAg
ICAgICBTcGVjdWxhdGVkVHlwZSBsZWZ0ID0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5wcmVkaWN0
aW9uKCk7Ci0gICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSByaWdodCA9IG1fZ3JhcGhbbm9kZS5j
aGlsZDIoKV0ucHJlZGljdGlvbigpOworICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgbGVmdCA9
IG5vZGUtPmNoaWxkMSgpLT5wcmVkaWN0aW9uKCk7CisgICAgICAgICAgICBTcGVjdWxhdGVkVHlw
ZSByaWdodCA9IG5vZGUtPmNoaWxkMigpLT5wcmVkaWN0aW9uKCk7CiAgICAgICAgICAgICAKICAg
ICAgICAgICAgIEFkZFNwZWN1bGF0aW9uTW9kZSBtb2RlID0gRG9udFNwZWN1bGF0ZUludGVnZXI7
CiAgICAgICAgICAgICAKQEAgLTMwNywyMiArMzA1LDIyIEBAIHByaXZhdGU6CiAgICAgICAgICAg
ICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKFNwZWNTdHJpbmcgfCBTcGVjSW50
MzIgfCBTcGVjRG91YmxlKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAgICAg
ICAgaWYgKGlzTm90TmVnWmVybyhub2RlLmNoaWxkMSgpLmluZGV4KCkpIHx8IGlzTm90TmVnWmVy
byhub2RlLmNoaWxkMigpLmluZGV4KCkpKQorICAgICAgICAgICAgaWYgKGlzTm90TmVnWmVybyhu
b2RlLT5jaGlsZDEoKS5ub2RlKCkpIHx8IGlzTm90TmVnWmVybyhub2RlLT5jaGlsZDIoKS5ub2Rl
KCkpKQogICAgICAgICAgICAgICAgIGZsYWdzICY9IH5Ob2RlTmVlZHNOZWdaZXJvOwotICAgICAg
ICAgICAgaWYgKG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0uaGFzTnVtYmVyUmVzdWx0KCkgfHwgbV9n
cmFwaFtub2RlLmNoaWxkMigpXS5oYXNOdW1iZXJSZXN1bHQoKSkKKyAgICAgICAgICAgIGlmIChu
b2RlLT5jaGlsZDEoKS0+aGFzTnVtYmVyUmVzdWx0KCkgfHwgbm9kZS0+Y2hpbGQyKCktPmhhc051
bWJlclJlc3VsdCgpKQogICAgICAgICAgICAgICAgIGZsYWdzICY9IH5Ob2RlVXNlZEFzT3RoZXI7
CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlmIChtb2RlICE9IFNwZWN1bGF0ZUludGVnZXIp
CiAgICAgICAgICAgICAgICAgZmxhZ3MgfD0gTm9kZVVzZWRBc051bWJlcjsKICAgICAgICAgICAg
IAotICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLm1lcmdlRmxh
Z3MoZmxhZ3MpOwotICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQyKCld
Lm1lcmdlRmxhZ3MoZmxhZ3MpOworICAgICAgICAgICAgY2hhbmdlZCB8PSBub2RlLT5jaGlsZDEo
KS0+bWVyZ2VGbGFncyhmbGFncyk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG5vZGUtPmNoaWxk
MigpLT5tZXJnZUZsYWdzKGZsYWdzKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAg
ICAgICAgICAgICAKICAgICAgICAgY2FzZSBBcml0aEFkZDogewotICAgICAgICAgICAgU3BlY3Vs
YXRlZFR5cGUgbGVmdCA9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ucHJlZGljdGlvbigpOwotICAg
ICAgICAgICAgU3BlY3VsYXRlZFR5cGUgcmlnaHQgPSBtX2dyYXBoW25vZGUuY2hpbGQyKCldLnBy
ZWRpY3Rpb24oKTsKKyAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIGxlZnQgPSBub2RlLT5jaGls
ZDEoKS0+cHJlZGljdGlvbigpOworICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgcmlnaHQgPSBu
b2RlLT5jaGlsZDIoKS0+cHJlZGljdGlvbigpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBB
ZGRTcGVjdWxhdGlvbk1vZGUgbW9kZSA9IERvbnRTcGVjdWxhdGVJbnRlZ2VyOwogICAgICAgICAg
ICAgCkBAIC0zMzMsMjEgKzMzMSwyMSBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICBj
aGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbihzcGVjdWxhdGVkRG91YmxlVHlwZUZvclByZWRpY3Rp
b25zKGxlZnQsIHJpZ2h0KSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAg
ICAgIGlmIChpc05vdE5lZ1plcm8obm9kZS5jaGlsZDEoKS5pbmRleCgpKSB8fCBpc05vdE5lZ1pl
cm8obm9kZS5jaGlsZDIoKS5pbmRleCgpKSkKKyAgICAgICAgICAgIGlmIChpc05vdE5lZ1plcm8o
bm9kZS0+Y2hpbGQxKCkubm9kZSgpKSB8fCBpc05vdE5lZ1plcm8obm9kZS0+Y2hpbGQyKCkubm9k
ZSgpKSkKICAgICAgICAgICAgICAgICBmbGFncyAmPSB+Tm9kZU5lZWRzTmVnWmVybzsKICAgICAg
ICAgICAgIGZsYWdzICY9IH5Ob2RlVXNlZEFzT3RoZXI7CiAgICAgICAgICAgICAKICAgICAgICAg
ICAgIGlmIChtb2RlICE9IFNwZWN1bGF0ZUludGVnZXIpCiAgICAgICAgICAgICAgICAgZmxhZ3Mg
fD0gTm9kZVVzZWRBc051bWJlcjsKICAgICAgICAgICAgIAotICAgICAgICAgICAgY2hhbmdlZCB8
PSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLm1lcmdlRmxhZ3MoZmxhZ3MpOwotICAgICAgICAgICAg
Y2hhbmdlZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQyKCldLm1lcmdlRmxhZ3MoZmxhZ3MpOworICAg
ICAgICAgICAgY2hhbmdlZCB8PSBub2RlLT5jaGlsZDEoKS0+bWVyZ2VGbGFncyhmbGFncyk7Cisg
ICAgICAgICAgICBjaGFuZ2VkIHw9IG5vZGUtPmNoaWxkMigpLT5tZXJnZUZsYWdzKGZsYWdzKTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2Fz
ZSBBcml0aFN1YjogewotICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgbGVmdCA9IG1fZ3JhcGhb
bm9kZS5jaGlsZDEoKV0ucHJlZGljdGlvbigpOwotICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUg
cmlnaHQgPSBtX2dyYXBoW25vZGUuY2hpbGQyKCldLnByZWRpY3Rpb24oKTsKKyAgICAgICAgICAg
IFNwZWN1bGF0ZWRUeXBlIGxlZnQgPSBub2RlLT5jaGlsZDEoKS0+cHJlZGljdGlvbigpOworICAg
ICAgICAgICAgU3BlY3VsYXRlZFR5cGUgcmlnaHQgPSBub2RlLT5jaGlsZDIoKS0+cHJlZGljdGlv
bigpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBBZGRTcGVjdWxhdGlvbk1vZGUgbW9kZSA9
IERvbnRTcGVjdWxhdGVJbnRlZ2VyOwogICAgICAgICAgICAgCkBAIC0zNTgsMzkgKzM1NiwzOSBA
QCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlv
bihzcGVjdWxhdGVkRG91YmxlVHlwZUZvclByZWRpY3Rpb25zKGxlZnQsIHJpZ2h0KSk7CiAgICAg
ICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmIChpc05vdFplcm8obm9kZS5jaGlsZDEoKS5pbmRl
eCgpKSB8fCBpc05vdFplcm8obm9kZS5jaGlsZDIoKS5pbmRleCgpKSkKKyAgICAgICAgICAgIGlm
IChpc05vdFplcm8obm9kZS0+Y2hpbGQxKCkubm9kZSgpKSB8fCBpc05vdFplcm8obm9kZS0+Y2hp
bGQyKCkubm9kZSgpKSkKICAgICAgICAgICAgICAgICBmbGFncyAmPSB+Tm9kZU5lZWRzTmVnWmVy
bzsKICAgICAgICAgICAgIGZsYWdzICY9IH5Ob2RlVXNlZEFzT3RoZXI7CiAgICAgICAgICAgICAK
ICAgICAgICAgICAgIGlmIChtb2RlICE9IFNwZWN1bGF0ZUludGVnZXIpCiAgICAgICAgICAgICAg
ICAgZmxhZ3MgfD0gTm9kZVVzZWRBc051bWJlcjsKICAgICAgICAgICAgIAotICAgICAgICAgICAg
Y2hhbmdlZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLm1lcmdlRmxhZ3MoZmxhZ3MpOwotICAg
ICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQyKCldLm1lcmdlRmxhZ3MoZmxh
Z3MpOworICAgICAgICAgICAgY2hhbmdlZCB8PSBub2RlLT5jaGlsZDEoKS0+bWVyZ2VGbGFncyhm
bGFncyk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG5vZGUtPmNoaWxkMigpLT5tZXJnZUZsYWdz
KGZsYWdzKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKICAg
ICAgICAgY2FzZSBBcml0aE5lZ2F0ZToKLSAgICAgICAgICAgIGlmIChtX2dyYXBoW25vZGUuY2hp
bGQxKCldLnByZWRpY3Rpb24oKSkgeworICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5w
cmVkaWN0aW9uKCkpIHsKICAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC5uZWdhdGVTaG91bGRT
cGVjdWxhdGVJbnRlZ2VyKG5vZGUpKQogICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1l
cmdlUHJlZGljdGlvbihTcGVjSW50MzIpOwogICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVByZWRpY3Rpb24oc3BlY3VsYXRlZERvdWJsZVR5
cGVGb3JQcmVkaWN0aW9uKG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ucHJlZGljdGlvbigpKSk7Cisg
ICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKHNwZWN1bGF0ZWRE
b3VibGVUeXBlRm9yUHJlZGljdGlvbihub2RlLT5jaGlsZDEoKS0+cHJlZGljdGlvbigpKSk7CiAg
ICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGZsYWdzICY9IH5Ob2RlVXNlZEFzT3RoZXI7CiAK
LSAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5tZXJnZUZsYWdz
KGZsYWdzKTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbm9kZS0+Y2hpbGQxKCktPm1lcmdlRmxh
Z3MoZmxhZ3MpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICAgICAgY2Fz
ZSBBcml0aE1pbjoKICAgICAgICAgY2FzZSBBcml0aE1heDogewotICAgICAgICAgICAgU3BlY3Vs
YXRlZFR5cGUgbGVmdCA9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ucHJlZGljdGlvbigpOwotICAg
ICAgICAgICAgU3BlY3VsYXRlZFR5cGUgcmlnaHQgPSBtX2dyYXBoW25vZGUuY2hpbGQyKCldLnBy
ZWRpY3Rpb24oKTsKKyAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIGxlZnQgPSBub2RlLT5jaGls
ZDEoKS0+cHJlZGljdGlvbigpOworICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgcmlnaHQgPSBu
b2RlLT5jaGlsZDIoKS0+cHJlZGljdGlvbigpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBp
ZiAobGVmdCAmJiByaWdodCkgewotICAgICAgICAgICAgICAgIGlmIChOb2RlOjpzaG91bGRTcGVj
dWxhdGVJbnRlZ2VyRm9yQXJpdGhtZXRpYyhtX2dyYXBoW25vZGUuY2hpbGQxKCldLCBtX2dyYXBo
W25vZGUuY2hpbGQyKCldKQotICAgICAgICAgICAgICAgICAgICAmJiBub2RlQ2FuU3BlY3VsYXRl
SW50ZWdlcihub2RlLmFyaXRoTm9kZUZsYWdzKCkpKQorICAgICAgICAgICAgICAgIGlmIChOb2Rl
OjpzaG91bGRTcGVjdWxhdGVJbnRlZ2VyRm9yQXJpdGhtZXRpYyhub2RlLT5jaGlsZDEoKS5ub2Rl
KCksIG5vZGUtPmNoaWxkMigpLm5vZGUoKSkKKyAgICAgICAgICAgICAgICAgICAgJiYgbm9kZUNh
blNwZWN1bGF0ZUludGVnZXIobm9kZS0+YXJpdGhOb2RlRmxhZ3MoKSkpCiAgICAgICAgICAgICAg
ICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKFNwZWNJbnQzMik7CiAgICAgICAgICAg
ICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlv
bihzcGVjdWxhdGVkRG91YmxlVHlwZUZvclByZWRpY3Rpb25zKGxlZnQsIHJpZ2h0KSk7CkBAIC0z
OTksMTQgKzM5NywxNCBAQCBwcml2YXRlOgogICAgICAgICAgICAgZmxhZ3MgfD0gTm9kZVVzZWRB
c051bWJlcjsKICAgICAgICAgICAgIGZsYWdzICY9IH5Ob2RlVXNlZEFzT3RoZXI7CiAKLSAgICAg
ICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5tZXJnZUZsYWdzKGZsYWdz
KTsKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaFtub2RlLmNoaWxkMigpXS5tZXJnZUZs
YWdzKGZsYWdzKTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbm9kZS0+Y2hpbGQxKCktPm1lcmdl
RmxhZ3MoZmxhZ3MpOworICAgICAgICAgICAgY2hhbmdlZCB8PSBub2RlLT5jaGlsZDIoKS0+bWVy
Z2VGbGFncyhmbGFncyk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCiAgICAgICAg
IGNhc2UgQXJpdGhNdWw6IHsKLSAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIGxlZnQgPSBtX2dy
YXBoW25vZGUuY2hpbGQxKCldLnByZWRpY3Rpb24oKTsKLSAgICAgICAgICAgIFNwZWN1bGF0ZWRU
eXBlIHJpZ2h0ID0gbV9ncmFwaFtub2RlLmNoaWxkMigpXS5wcmVkaWN0aW9uKCk7CisgICAgICAg
ICAgICBTcGVjdWxhdGVkVHlwZSBsZWZ0ID0gbm9kZS0+Y2hpbGQxKCktPnByZWRpY3Rpb24oKTsK
KyAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHJpZ2h0ID0gbm9kZS0+Y2hpbGQyKCktPnByZWRp
Y3Rpb24oKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKGxlZnQgJiYgcmlnaHQpIHsK
ICAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC5tdWxTaG91bGRTcGVjdWxhdGVJbnRlZ2VyKG5v
ZGUpKQpAQCAtNDIyLDggKzQyMCw4IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAvLyBpdHNlbGYg
dW5sZXNzIHdlIGNhbiBwcm92ZSB0aGF0IHRoZXJlIGlzIG5vIHdheSBmb3IgdGhlIHZhbHVlcwog
ICAgICAgICAgICAgLy8gcHJvZHVjZWQgdG8gY2F1c2UgZG91YmxlIHJvdW5kaW5nLgogICAgICAg
ICAgICAgCi0gICAgICAgICAgICBpZiAoIWlzV2l0aGluUG93ZXJPZlR3byhub2RlLmNoaWxkMSgp
LmluZGV4KCksIDIyKQotICAgICAgICAgICAgICAgICYmICFpc1dpdGhpblBvd2VyT2ZUd28obm9k
ZS5jaGlsZDIoKS5pbmRleCgpLCAyMikpCisgICAgICAgICAgICBpZiAoIWlzV2l0aGluUG93ZXJP
ZlR3byhub2RlLT5jaGlsZDEoKS5ub2RlKCksIDIyKQorICAgICAgICAgICAgICAgICYmICFpc1dp
dGhpblBvd2VyT2ZUd28obm9kZS0+Y2hpbGQyKCkubm9kZSgpLCAyMikpCiAgICAgICAgICAgICAg
ICAgZmxhZ3MgfD0gTm9kZVVzZWRBc051bWJlcjsKICAgICAgICAgICAgIAogICAgICAgICAgICAg
Y2hhbmdlZCB8PSBub2RlLm1lcmdlRmxhZ3MoZmxhZ3MpOwpAQCAtNDMxLDE4ICs0MjksMTggQEAg
cHJpdmF0ZToKICAgICAgICAgICAgIGZsYWdzIHw9IE5vZGVVc2VkQXNOdW1iZXIgfCBOb2RlTmVl
ZHNOZWdaZXJvOwogICAgICAgICAgICAgZmxhZ3MgJj0gfk5vZGVVc2VkQXNPdGhlcjsKIAotICAg
ICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLm1lcmdlRmxhZ3MoZmxh
Z3MpOwotICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQyKCldLm1lcmdl
RmxhZ3MoZmxhZ3MpOworICAgICAgICAgICAgY2hhbmdlZCB8PSBub2RlLT5jaGlsZDEoKS0+bWVy
Z2VGbGFncyhmbGFncyk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG5vZGUtPmNoaWxkMigpLT5t
ZXJnZUZsYWdzKGZsYWdzKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAg
ICAgICAKICAgICAgICAgY2FzZSBBcml0aERpdjogewotICAgICAgICAgICAgU3BlY3VsYXRlZFR5
cGUgbGVmdCA9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ucHJlZGljdGlvbigpOwotICAgICAgICAg
ICAgU3BlY3VsYXRlZFR5cGUgcmlnaHQgPSBtX2dyYXBoW25vZGUuY2hpbGQyKCldLnByZWRpY3Rp
b24oKTsKKyAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIGxlZnQgPSBub2RlLT5jaGlsZDEoKS0+
cHJlZGljdGlvbigpOworICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgcmlnaHQgPSBub2RlLT5j
aGlsZDIoKS0+cHJlZGljdGlvbigpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAobGVm
dCAmJiByaWdodCkgewotICAgICAgICAgICAgICAgIGlmIChOb2RlOjpzaG91bGRTcGVjdWxhdGVJ
bnRlZ2VyRm9yQXJpdGhtZXRpYyhtX2dyYXBoW25vZGUuY2hpbGQxKCldLCBtX2dyYXBoW25vZGUu
Y2hpbGQyKCldKQotICAgICAgICAgICAgICAgICAgICAmJiBub2RlQ2FuU3BlY3VsYXRlSW50ZWdl
cihub2RlLmFyaXRoTm9kZUZsYWdzKCkpKQorICAgICAgICAgICAgICAgIGlmIChOb2RlOjpzaG91
bGRTcGVjdWxhdGVJbnRlZ2VyRm9yQXJpdGhtZXRpYyhub2RlLT5jaGlsZDEoKS5ub2RlKCksIG5v
ZGUtPmNoaWxkMigpLm5vZGUoKSkKKyAgICAgICAgICAgICAgICAgICAgJiYgbm9kZUNhblNwZWN1
bGF0ZUludGVnZXIobm9kZS0+YXJpdGhOb2RlRmxhZ3MoKSkpCiAgICAgICAgICAgICAgICAgICAg
IGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKFNwZWNJbnQzMik7CiAgICAgICAgICAgICAgICAg
ZWxzZQogICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbihTcGVj
RG91YmxlKTsKQEAgLTQ1NiwxOCArNDU0LDE4IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBmbGFn
cyB8PSBOb2RlVXNlZEFzTnVtYmVyIHwgTm9kZU5lZWRzTmVnWmVybzsKICAgICAgICAgICAgIGZs
YWdzICY9IH5Ob2RlVXNlZEFzT3RoZXI7CiAKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFw
aFtub2RlLmNoaWxkMSgpXS5tZXJnZUZsYWdzKGZsYWdzKTsKLSAgICAgICAgICAgIGNoYW5nZWQg
fD0gbV9ncmFwaFtub2RlLmNoaWxkMigpXS5tZXJnZUZsYWdzKGZsYWdzKTsKKyAgICAgICAgICAg
IGNoYW5nZWQgfD0gbm9kZS0+Y2hpbGQxKCktPm1lcmdlRmxhZ3MoZmxhZ3MpOworICAgICAgICAg
ICAgY2hhbmdlZCB8PSBub2RlLT5jaGlsZDIoKS0+bWVyZ2VGbGFncyhmbGFncyk7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgQXJpdGhN
b2Q6IHsKLSAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIGxlZnQgPSBtX2dyYXBoW25vZGUuY2hp
bGQxKCldLnByZWRpY3Rpb24oKTsKLSAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHJpZ2h0ID0g
bV9ncmFwaFtub2RlLmNoaWxkMigpXS5wcmVkaWN0aW9uKCk7CisgICAgICAgICAgICBTcGVjdWxh
dGVkVHlwZSBsZWZ0ID0gbm9kZS0+Y2hpbGQxKCktPnByZWRpY3Rpb24oKTsKKyAgICAgICAgICAg
IFNwZWN1bGF0ZWRUeXBlIHJpZ2h0ID0gbm9kZS0+Y2hpbGQyKCktPnByZWRpY3Rpb24oKTsKICAg
ICAgICAgICAgIAogICAgICAgICAgICAgaWYgKGxlZnQgJiYgcmlnaHQpIHsKLSAgICAgICAgICAg
ICAgICBpZiAoTm9kZTo6c2hvdWxkU3BlY3VsYXRlSW50ZWdlckZvckFyaXRobWV0aWMobV9ncmFw
aFtub2RlLmNoaWxkMSgpXSwgbV9ncmFwaFtub2RlLmNoaWxkMigpXSkKLSAgICAgICAgICAgICAg
ICAgICAgJiYgbm9kZUNhblNwZWN1bGF0ZUludGVnZXIobm9kZS5hcml0aE5vZGVGbGFncygpKSkK
KyAgICAgICAgICAgICAgICBpZiAoTm9kZTo6c2hvdWxkU3BlY3VsYXRlSW50ZWdlckZvckFyaXRo
bWV0aWMobm9kZS0+Y2hpbGQxKCkubm9kZSgpLCBub2RlLT5jaGlsZDIoKS5ub2RlKCkpCisgICAg
ICAgICAgICAgICAgICAgICYmIG5vZGVDYW5TcGVjdWxhdGVJbnRlZ2VyKG5vZGUtPmFyaXRoTm9k
ZUZsYWdzKCkpKQogICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlv
bihTcGVjSW50MzIpOwogICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAg
Y2hhbmdlZCB8PSBtZXJnZVByZWRpY3Rpb24oU3BlY0RvdWJsZSk7CkBAIC00NzYsOCArNDc0LDgg
QEAgcHJpdmF0ZToKICAgICAgICAgICAgIGZsYWdzIHw9IE5vZGVVc2VkQXNOdW1iZXIgfCBOb2Rl
TmVlZHNOZWdaZXJvOwogICAgICAgICAgICAgZmxhZ3MgJj0gfk5vZGVVc2VkQXNPdGhlcjsKIAot
ICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLm1lcmdlRmxhZ3Mo
ZmxhZ3MpOwotICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQyKCldLm1l
cmdlRmxhZ3MoZmxhZ3MpOworICAgICAgICAgICAgY2hhbmdlZCB8PSBub2RlLT5jaGlsZDEoKS0+
bWVyZ2VGbGFncyhmbGFncyk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG5vZGUtPmNoaWxkMigp
LT5tZXJnZUZsYWdzKGZsYWdzKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAg
ICAgICAgICAKQEAgLTQ4NSwxOSArNDgzLDE5IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBjaGFu
Z2VkIHw9IHNldFByZWRpY3Rpb24oU3BlY0RvdWJsZSk7CiAgICAgICAgICAgICBmbGFncyB8PSBO
b2RlVXNlZEFzTnVtYmVyIHwgTm9kZU5lZWRzTmVnWmVybzsKICAgICAgICAgICAgIGZsYWdzICY9
IH5Ob2RlVXNlZEFzT3RoZXI7Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbm9kZS5j
aGlsZDEoKV0ubWVyZ2VGbGFncyhmbGFncyk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG5vZGUt
PmNoaWxkMSgpLT5tZXJnZUZsYWdzKGZsYWdzKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBBcml0aEFiczogewotICAgICAgICAgICAg
U3BlY3VsYXRlZFR5cGUgY2hpbGQgPSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLnByZWRpY3Rpb24o
KTsKKyAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIGNoaWxkID0gbm9kZS0+Y2hpbGQxKCktPnBy
ZWRpY3Rpb24oKTsKICAgICAgICAgICAgIGlmIChpc0ludDMyU3BlY3VsYXRpb25Gb3JBcml0aG1l
dGljKGNoaWxkKQotICAgICAgICAgICAgICAgICYmIG5vZGVDYW5TcGVjdWxhdGVJbnRlZ2VyKG5v
ZGUuYXJpdGhOb2RlRmxhZ3MoKSkpCisgICAgICAgICAgICAgICAgJiYgbm9kZUNhblNwZWN1bGF0
ZUludGVnZXIobm9kZS0+YXJpdGhOb2RlRmxhZ3MoKSkpCiAgICAgICAgICAgICAgICAgY2hhbmdl
ZCB8PSBtZXJnZVByZWRpY3Rpb24oU3BlY0ludDMyKTsKICAgICAgICAgICAgIGVsc2UKICAgICAg
ICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbihzcGVjdWxhdGVkRG91YmxlVHlw
ZUZvclByZWRpY3Rpb24oY2hpbGQpKTsKIAotICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBo
W25vZGUuY2hpbGQxKCldLm1lcmdlRmxhZ3MoZmxhZ3MpOworICAgICAgICAgICAgY2hhbmdlZCB8
PSBub2RlLT5jaGlsZDEoKS0+bWVyZ2VGbGFncyhmbGFncyk7CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgfQogICAgICAgICAgICAgCkBAIC01MjcsMzEgKzUyNSwzMSBAQCBwcml2YXRlOgog
ICAgICAgICB9CiAKICAgICAgICAgY2FzZSBHZXRCeUlkOiB7Ci0gICAgICAgICAgICBjaGFuZ2Vk
IHw9IG1lcmdlUHJlZGljdGlvbihub2RlLmdldEhlYXBQcmVkaWN0aW9uKCkpOworICAgICAgICAg
ICAgY2hhbmdlZCB8PSBtZXJnZVByZWRpY3Rpb24obm9kZS0+Z2V0SGVhcFByZWRpY3Rpb24oKSk7
CiAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlRGVmYXVsdEZsYWdzKG5vZGUpOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBjYXNlIEdldEJ5
SWRGbHVzaDoKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKG5vZGUuZ2V0
SGVhcFByZWRpY3Rpb24oKSk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlv
bihub2RlLT5nZXRIZWFwUHJlZGljdGlvbigpKTsKICAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVy
Z2VEZWZhdWx0RmxhZ3Mobm9kZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIAog
ICAgICAgICBjYXNlIEdldEJ5VmFsOiB7Ci0gICAgICAgICAgICBpZiAobV9ncmFwaFtub2RlLmNo
aWxkMSgpXS5zaG91bGRTcGVjdWxhdGVGbG9hdDMyQXJyYXkoKQotICAgICAgICAgICAgICAgIHx8
IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0uc2hvdWxkU3BlY3VsYXRlRmxvYXQ2NEFycmF5KCkpCisg
ICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZUZsb2F0MzJBcnJh
eSgpCisgICAgICAgICAgICAgICAgfHwgbm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZUZs
b2F0NjRBcnJheSgpKQogICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9u
KFNwZWNEb3VibGUpOwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIGNoYW5nZWQg
fD0gbWVyZ2VQcmVkaWN0aW9uKG5vZGUuZ2V0SGVhcFByZWRpY3Rpb24oKSk7CiAKLSAgICAgICAg
ICAgIGNoYW5nZWQgfD0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5tZXJnZUZsYWdzKE5vZGVVc2Vk
QXNWYWx1ZSk7Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbm9kZS5jaGlsZDIoKV0u
bWVyZ2VGbGFncyhOb2RlVXNlZEFzTnVtYmVyIHwgTm9kZVVzZWRBc090aGVyIHwgTm9kZVVzZWRB
c0ludCB8IE5vZGVVc2VkQXNJbnRMb2NhbGx5KTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbm9k
ZS0+Y2hpbGQxKCktPm1lcmdlRmxhZ3MoTm9kZVVzZWRBc1ZhbHVlKTsKKyAgICAgICAgICAgIGNo
YW5nZWQgfD0gbm9kZS0+Y2hpbGQyKCktPm1lcmdlRmxhZ3MoTm9kZVVzZWRBc051bWJlciB8IE5v
ZGVVc2VkQXNPdGhlciB8IE5vZGVVc2VkQXNJbnQgfCBOb2RlVXNlZEFzSW50TG9jYWxseSk7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgIGNhc2Ug
R2V0TXlBcmd1bWVudEJ5VmFsU2FmZTogewotICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVBy
ZWRpY3Rpb24obm9kZS5nZXRIZWFwUHJlZGljdGlvbigpKTsKLSAgICAgICAgICAgIGNoYW5nZWQg
fD0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5tZXJnZUZsYWdzKE5vZGVVc2VkQXNOdW1iZXIgfCBO
b2RlVXNlZEFzT3RoZXIgfCBOb2RlVXNlZEFzSW50IHwgTm9kZVVzZWRBc0ludExvY2FsbHkpOwor
ICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVByZWRpY3Rpb24obm9kZS0+Z2V0SGVhcFByZWRp
Y3Rpb24oKSk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG5vZGUtPmNoaWxkMSgpLT5tZXJnZUZs
YWdzKE5vZGVVc2VkQXNOdW1iZXIgfCBOb2RlVXNlZEFzT3RoZXIgfCBOb2RlVXNlZEFzSW50IHwg
Tm9kZVVzZWRBc0ludExvY2FsbHkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAg
ICAgICAgICAgIApAQCAtNTcxLDI1ICs1NjksMjMgQEAgcHJpdmF0ZToKICAgICAgICAgfQogCiAg
ICAgICAgIGNhc2UgR2V0QnlPZmZzZXQ6IHsKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VQ
cmVkaWN0aW9uKG5vZGUuZ2V0SGVhcFByZWRpY3Rpb24oKSk7CisgICAgICAgICAgICBjaGFuZ2Vk
IHw9IG1lcmdlUHJlZGljdGlvbihub2RlLT5nZXRIZWFwUHJlZGljdGlvbigpKTsKICAgICAgICAg
ICAgIGNoYW5nZWQgfD0gbWVyZ2VEZWZhdWx0RmxhZ3Mobm9kZSk7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgQ2FsbDoKICAgICAgICAg
Y2FzZSBDb25zdHJ1Y3Q6IHsKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9u
KG5vZGUuZ2V0SGVhcFByZWRpY3Rpb24oKSk7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGNo
aWxkSWR4ID0gbm9kZS5maXJzdENoaWxkKCk7Ci0gICAgICAgICAgICAgICAgIGNoaWxkSWR4IDwg
bm9kZS5maXJzdENoaWxkKCkgKyBub2RlLm51bUNoaWxkcmVuKCk7Ci0gICAgICAgICAgICAgICAg
ICsrY2hpbGRJZHgpIHsKLSAgICAgICAgICAgICAgICBFZGdlIGVkZ2UgPSBtX2dyYXBoLm1fdmFy
QXJnQ2hpbGRyZW5bY2hpbGRJZHhdOwotICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFw
aFtlZGdlXS5tZXJnZUZsYWdzKE5vZGVVc2VkQXNWYWx1ZSk7Ci0gICAgICAgICAgICB9CisgICAg
ICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbihub2RlLT5nZXRIZWFwUHJlZGljdGlv
bigpKTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgY2hpbGRJZHggPSBub2RlLT5maXJzdENo
aWxkKCk7CisgICAgICAgICAgICAgICAgIGNoaWxkSWR4IDwgbm9kZS0+Zmlyc3RDaGlsZCgpICsg
bm9kZS0+bnVtQ2hpbGRyZW4oKTsKKyAgICAgICAgICAgICAgICAgKytjaGlsZElkeCkKKyAgICAg
ICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGgubV92YXJBcmdDaGlsZHJlbltjaGlsZElkeF0t
Pm1lcmdlRmxhZ3MoTm9kZVVzZWRBc1ZhbHVlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBDb252ZXJ0VGhpczogewotICAgICAgICAg
ICAgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiA9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ucHJl
ZGljdGlvbigpOworICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiA9IG5vZGUt
PmNoaWxkMSgpLT5wcmVkaWN0aW9uKCk7CiAgICAgICAgICAgICBpZiAocHJlZGljdGlvbikgewog
ICAgICAgICAgICAgICAgIGlmIChwcmVkaWN0aW9uICYgflNwZWNPYmplY3RNYXNrKSB7CiAgICAg
ICAgICAgICAgICAgICAgIHByZWRpY3Rpb24gJj0gU3BlY09iamVjdE1hc2s7CkBAIC02MDIsMTMg
KzU5OCwxMyBAQCBwcml2YXRlOgogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2Fz
ZSBHZXRHbG9iYWxWYXI6IHsKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9u
KG5vZGUuZ2V0SGVhcFByZWRpY3Rpb24oKSk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdl
UHJlZGljdGlvbihub2RlLT5nZXRIZWFwUHJlZGljdGlvbigpKTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBQdXRHbG9iYWxWYXI6CiAg
ICAgICAgIGNhc2UgUHV0R2xvYmFsVmFyQ2hlY2s6IHsKLSAgICAgICAgICAgIGNoYW5nZWQgfD0g
bV9ncmFwaFtub2RlLmNoaWxkMSgpXS5tZXJnZUZsYWdzKE5vZGVVc2VkQXNWYWx1ZSk7CisgICAg
ICAgICAgICBjaGFuZ2VkIHw9IG5vZGUtPmNoaWxkMSgpLT5tZXJnZUZsYWdzKE5vZGVVc2VkQXNW
YWx1ZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCkBAIC02
MTcsNyArNjEzLDcgQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBSZXNvbHZlQmFzZToKICAgICAg
ICAgY2FzZSBSZXNvbHZlQmFzZVN0cmljdFB1dDoKICAgICAgICAgY2FzZSBSZXNvbHZlR2xvYmFs
OiB7Ci0gICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uID0gbm9kZS5nZXRIZWFw
UHJlZGljdGlvbigpOworICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiA9IG5v
ZGUtPmdldEhlYXBQcmVkaWN0aW9uKCk7CiAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJl
ZGljdGlvbihwcmVkaWN0aW9uKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkBAIC02
NDMsMTggKzYzOSwxNiBAQCBwcml2YXRlOgogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgTmV3
QXJyYXk6IHsKICAgICAgICAgICAgIGNoYW5nZWQgfD0gc2V0UHJlZGljdGlvbihTcGVjQXJyYXkp
OwotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBjaGlsZElkeCA9IG5vZGUuZmlyc3RDaGlsZCgp
OwotICAgICAgICAgICAgICAgICBjaGlsZElkeCA8IG5vZGUuZmlyc3RDaGlsZCgpICsgbm9kZS5u
dW1DaGlsZHJlbigpOwotICAgICAgICAgICAgICAgICArK2NoaWxkSWR4KSB7Ci0gICAgICAgICAg
ICAgICAgRWRnZSBlZGdlID0gbV9ncmFwaC5tX3ZhckFyZ0NoaWxkcmVuW2NoaWxkSWR4XTsKLSAg
ICAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhbZWRnZV0ubWVyZ2VGbGFncyhOb2RlVXNl
ZEFzVmFsdWUpOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBjaGls
ZElkeCA9IG5vZGUtPmZpcnN0Q2hpbGQoKTsKKyAgICAgICAgICAgICAgICAgY2hpbGRJZHggPCBu
b2RlLT5maXJzdENoaWxkKCkgKyBub2RlLT5udW1DaGlsZHJlbigpOworICAgICAgICAgICAgICAg
ICArK2NoaWxkSWR4KQorICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaC5tX3ZhckFy
Z0NoaWxkcmVuW2NoaWxkSWR4XS0+bWVyZ2VGbGFncyhOb2RlVXNlZEFzVmFsdWUpOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBjYXNlIE5ld0Fy
cmF5V2l0aFNpemU6IHsKICAgICAgICAgICAgIGNoYW5nZWQgfD0gc2V0UHJlZGljdGlvbihTcGVj
QXJyYXkpOwotICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLm1l
cmdlRmxhZ3MoTm9kZVVzZWRBc1ZhbHVlIHwgTm9kZVVzZWRBc0ludCB8IE5vZGVVc2VkQXNJbnRM
b2NhbGx5KTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbm9kZS0+Y2hpbGQxKCktPm1lcmdlRmxh
Z3MoTm9kZVVzZWRBc1ZhbHVlIHwgTm9kZVVzZWRBc0ludCB8IE5vZGVVc2VkQXNJbnRMb2NhbGx5
KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKQEAgLTY3MCwy
MiArNjY0LDIyIEBAIHByaXZhdGU6CiAgICAgICAgIAogICAgICAgICBjYXNlIFN0cmluZ0NoYXJB
dDogewogICAgICAgICAgICAgY2hhbmdlZCB8PSBzZXRQcmVkaWN0aW9uKFNwZWNTdHJpbmcpOwot
ICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLm1lcmdlRmxhZ3Mo
Tm9kZVVzZWRBc1ZhbHVlKTsKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaFtub2RlLmNo
aWxkMigpXS5tZXJnZUZsYWdzKE5vZGVVc2VkQXNOdW1iZXIgfCBOb2RlVXNlZEFzT3RoZXIgfCBO
b2RlVXNlZEFzSW50IHwgTm9kZVVzZWRBc0ludExvY2FsbHkpOworICAgICAgICAgICAgY2hhbmdl
ZCB8PSBub2RlLT5jaGlsZDEoKS0+bWVyZ2VGbGFncyhOb2RlVXNlZEFzVmFsdWUpOworICAgICAg
ICAgICAgY2hhbmdlZCB8PSBub2RlLT5jaGlsZDIoKS0+bWVyZ2VGbGFncyhOb2RlVXNlZEFzTnVt
YmVyIHwgTm9kZVVzZWRBc090aGVyIHwgTm9kZVVzZWRBc0ludCB8IE5vZGVVc2VkQXNJbnRMb2Nh
bGx5KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAg
ICAgY2FzZSBTdHJDYXQ6IHsKICAgICAgICAgICAgIGNoYW5nZWQgfD0gc2V0UHJlZGljdGlvbihT
cGVjU3RyaW5nKTsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgY2hpbGRJZHggPSBub2RlLmZp
cnN0Q2hpbGQoKTsKLSAgICAgICAgICAgICAgICAgY2hpbGRJZHggPCBub2RlLmZpcnN0Q2hpbGQo
KSArIG5vZGUubnVtQ2hpbGRyZW4oKTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgY2hpbGRJ
ZHggPSBub2RlLT5maXJzdENoaWxkKCk7CisgICAgICAgICAgICAgICAgIGNoaWxkSWR4IDwgbm9k
ZS0+Zmlyc3RDaGlsZCgpICsgbm9kZS0+bnVtQ2hpbGRyZW4oKTsKICAgICAgICAgICAgICAgICAg
KytjaGlsZElkeCkKLSAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbV9ncmFwaC5t
X3ZhckFyZ0NoaWxkcmVuW2NoaWxkSWR4XV0ubWVyZ2VGbGFncyhOb2RlVXNlZEFzTnVtYmVyIHwg
Tm9kZVVzZWRBc090aGVyKTsKKyAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGgubV92
YXJBcmdDaGlsZHJlbltjaGlsZElkeF0tPm1lcmdlRmxhZ3MoTm9kZVVzZWRBc051bWJlciB8IE5v
ZGVVc2VkQXNPdGhlcik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAg
ICAgCiAgICAgICAgIGNhc2UgVG9QcmltaXRpdmU6IHsKLSAgICAgICAgICAgIFNwZWN1bGF0ZWRU
eXBlIGNoaWxkID0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5wcmVkaWN0aW9uKCk7CisgICAgICAg
ICAgICBTcGVjdWxhdGVkVHlwZSBjaGlsZCA9IG5vZGUtPmNoaWxkMSgpLT5wcmVkaWN0aW9uKCk7
CiAgICAgICAgICAgICBpZiAoY2hpbGQpIHsKICAgICAgICAgICAgICAgICBpZiAoaXNPYmplY3RT
cGVjdWxhdGlvbihjaGlsZCkpIHsKICAgICAgICAgICAgICAgICAgICAgLy8gSSdkIGxvdmUgdG8g
Zm9sZCB0aGlzIGNhc2UgaW50byB0aGUgY2FzZSBiZWxvdywgYnV0IEkgY2FuJ3QsIGJlY2F1c2UK
QEAgLTcwMiw3ICs2OTYsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIH0gZWxzZQogICAg
ICAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbihjaGlsZCk7CiAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0u
bWVyZ2VGbGFncyhmbGFncyk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG5vZGUtPmNoaWxkMSgp
LT5tZXJnZUZsYWdzKGZsYWdzKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAg
ICAgICAgICAKQEAgLTc0NSw0MiArNzM5LDQ1IEBAIHByaXZhdGU6CiAgICAgICAgIH0KICAgICAg
ICAgCiAgICAgICAgIGNhc2UgUHV0QnlWYWw6Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3Jh
cGhbbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKV0ubWVyZ2VGbGFncyhOb2RlVXNlZEFzVmFs
dWUpOwotICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW21fZ3JhcGgudmFyQXJnQ2hpbGQo
bm9kZSwgMSldLm1lcmdlRmxhZ3MoTm9kZVVzZWRBc051bWJlciB8IE5vZGVVc2VkQXNPdGhlciB8
IE5vZGVVc2VkQXNJbnQgfCBOb2RlVXNlZEFzSW50TG9jYWxseSk7Ci0gICAgICAgICAgICBjaGFu
Z2VkIHw9IG1fZ3JhcGhbbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAyKV0ubWVyZ2VGbGFncyhO
b2RlVXNlZEFzVmFsdWUpOworICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoLnZhckFyZ0No
aWxkKG5vZGUsIDApLT5tZXJnZUZsYWdzKE5vZGVVc2VkQXNWYWx1ZSk7CisgICAgICAgICAgICBj
aGFuZ2VkIHw9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSktPm1lcmdlRmxhZ3MoTm9kZVVz
ZWRBc051bWJlciB8IE5vZGVVc2VkQXNPdGhlciB8IE5vZGVVc2VkQXNJbnQgfCBOb2RlVXNlZEFz
SW50TG9jYWxseSk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGgudmFyQXJnQ2hpbGQo
bm9kZSwgMiktPm1lcmdlRmxhZ3MoTm9kZVVzZWRBc1ZhbHVlKTsKICAgICAgICAgICAgIGJyZWFr
OwogCiAgICAgICAgIGNhc2UgUHV0U2NvcGVkVmFyOgotICAgICAgICAgICAgY2hhbmdlZCB8PSBt
X2dyYXBoW25vZGUuY2hpbGQxKCldLm1lcmdlRmxhZ3MoTm9kZVVzZWRBc1ZhbHVlKTsKLSAgICAg
ICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaFtub2RlLmNoaWxkMygpXS5tZXJnZUZsYWdzKE5vZGVV
c2VkQXNWYWx1ZSk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG5vZGUtPmNoaWxkMSgpLT5tZXJn
ZUZsYWdzKE5vZGVVc2VkQXNWYWx1ZSk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG5vZGUtPmNo
aWxkMygpLT5tZXJnZUZsYWdzKE5vZGVVc2VkQXNWYWx1ZSk7CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgIAogICAgICAgICBjYXNlIFJldHVybjoKICAgICAgICAgY2FzZSBUaHJvdzoK
LSAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5tZXJnZUZsYWdz
KE5vZGVVc2VkQXNWYWx1ZSk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG5vZGUtPmNoaWxkMSgp
LT5tZXJnZUZsYWdzKE5vZGVVc2VkQXNWYWx1ZSk7CiAgICAgICAgICAgICBicmVhazsKIAogICAg
ICAgICBjYXNlIFB1dEJ5SWQ6CiAgICAgICAgIGNhc2UgUHV0QnlJZERpcmVjdDoKLSAgICAgICAg
ICAgIGNoYW5nZWQgfD0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5tZXJnZUZsYWdzKE5vZGVVc2Vk
QXNWYWx1ZSk7Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbm9kZS5jaGlsZDIoKV0u
bWVyZ2VGbGFncyhOb2RlVXNlZEFzVmFsdWUpOworICAgICAgICAgICAgY2hhbmdlZCB8PSBub2Rl
LT5jaGlsZDEoKS0+bWVyZ2VGbGFncyhOb2RlVXNlZEFzVmFsdWUpOworICAgICAgICAgICAgY2hh
bmdlZCB8PSBub2RlLT5jaGlsZDIoKS0+bWVyZ2VGbGFncyhOb2RlVXNlZEFzVmFsdWUpOwogICAg
ICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSBQdXRCeU9mZnNldDoKLSAgICAgICAgICAg
IGNoYW5nZWQgfD0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5tZXJnZUZsYWdzKE5vZGVVc2VkQXNW
YWx1ZSk7Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbm9kZS5jaGlsZDMoKV0ubWVy
Z2VGbGFncyhOb2RlVXNlZEFzVmFsdWUpOworICAgICAgICAgICAgY2hhbmdlZCB8PSBub2RlLT5j
aGlsZDEoKS0+bWVyZ2VGbGFncyhOb2RlVXNlZEFzVmFsdWUpOworICAgICAgICAgICAgY2hhbmdl
ZCB8PSBub2RlLT5jaGlsZDMoKS0+bWVyZ2VGbGFncyhOb2RlVXNlZEFzVmFsdWUpOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBQaGk6CisgICAgICAgICAg
ICAvLyBQaGlzIHNob3VsZCBub3QgYmUgdmlzaWJsZSBoZXJlIHNpbmNlIHdlJ3JlIGl0ZXJhdGlu
ZyB0aGUgYWxsLWJ1dC1QaGkncworICAgICAgICAgICAgLy8gcGFydCBvZiBiYXNpYyBibG9ja3Mu
CisgICAgICAgICAgICBDUkFTSCgpOwogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2Fz
ZSBTZXRDYWxsZWU6CiAgICAgICAgIGNhc2UgU2V0TXlTY29wZToKLSAgICAgICAgICAgIGNoYW5n
ZWQgfD0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5tZXJnZUZsYWdzKE5vZGVVc2VkQXNWYWx1ZSk7
CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG5vZGUtPmNoaWxkMSgpLT5tZXJnZUZsYWdzKE5vZGVV
c2VkQXNWYWx1ZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgICAgICBj
YXNlIEdldFNjb3BlOgotICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQx
KCldLm1lcmdlRmxhZ3MoTm9kZVVzZWRBc1ZhbHVlKTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0g
bm9kZS0+Y2hpbGQxKCktPm1lcmdlRmxhZ3MoTm9kZVVzZWRBc1ZhbHVlKTsKICAgICAgICAgICAg
IGNoYW5nZWQgfD0gc2V0UHJlZGljdGlvbihTcGVjQ2VsbE90aGVyKTsKICAgICAgICAgICAgIGJy
ZWFrOwogCkBAIC04MjgsMzIgKzgyNSwzMiBAQCBwcml2YXRlOgogICAgICAgICB9CiAKICNpZiBE
RkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCi0gICAgICAgIGRhdGFMb2coU3Bl
Y3VsYXRpb25EdW1wKG1fZ3JhcGhbbV9jb21waWxlSW5kZXhdLnByZWRpY3Rpb24oKSksICJcbiIp
OworICAgICAgICBkYXRhTG9nKFNwZWN1bGF0aW9uRHVtcChub2RlLT5wcmVkaWN0aW9uKCkpLCAi
XG4iKTsKICNlbmRpZgogICAgICAgICAKICAgICAgICAgbV9jaGFuZ2VkIHw9IGNoYW5nZWQ7CiAg
ICAgfQogICAgICAgICAKLSAgICBib29sIG1lcmdlRGVmYXVsdEZsYWdzKE5vZGUmIG5vZGUpCisg
ICAgYm9vbCBtZXJnZURlZmF1bHRGbGFncyhOb2RlKiBub2RlKQogICAgIHsKICAgICAgICAgYm9v
bCBjaGFuZ2VkID0gZmFsc2U7Ci0gICAgICAgIGlmIChub2RlLmZsYWdzKCkgJiBOb2RlSGFzVmFy
QXJncykgewotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBjaGlsZElkeCA9IG5vZGUuZmlyc3RD
aGlsZCgpOwotICAgICAgICAgICAgICAgICBjaGlsZElkeCA8IG5vZGUuZmlyc3RDaGlsZCgpICsg
bm9kZS5udW1DaGlsZHJlbigpOworICAgICAgICBpZiAobm9kZS0+ZmxhZ3MoKSAmIE5vZGVIYXNW
YXJBcmdzKSB7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGNoaWxkSWR4ID0gbm9kZS0+Zmly
c3RDaGlsZCgpOworICAgICAgICAgICAgICAgICBjaGlsZElkeCA8IG5vZGUtPmZpcnN0Q2hpbGQo
KSArIG5vZGUtPm51bUNoaWxkcmVuKCk7CiAgICAgICAgICAgICAgICAgIGNoaWxkSWR4KyspIHsK
ICAgICAgICAgICAgICAgICBpZiAoISFtX2dyYXBoLm1fdmFyQXJnQ2hpbGRyZW5bY2hpbGRJZHhd
KQotICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbV9ncmFwaC5tX3ZhckFy
Z0NoaWxkcmVuW2NoaWxkSWR4XV0ubWVyZ2VGbGFncyhOb2RlVXNlZEFzVmFsdWUpOworICAgICAg
ICAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGgubV92YXJBcmdDaGlsZHJlbltjaGlsZElk
eF0tPm1lcmdlRmxhZ3MoTm9kZVVzZWRBc1ZhbHVlKTsKICAgICAgICAgICAgIH0KICAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICAgIGlmICghbm9kZS5jaGlsZDEoKSkKKyAgICAgICAgICAgIGlm
ICghbm9kZS0+Y2hpbGQxKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGNoYW5nZWQ7Ci0gICAg
ICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ubWVyZ2VGbGFncyhOb2Rl
VXNlZEFzVmFsdWUpOwotICAgICAgICAgICAgaWYgKCFub2RlLmNoaWxkMigpKQorICAgICAgICAg
ICAgY2hhbmdlZCB8PSBub2RlLT5jaGlsZDEoKS0+bWVyZ2VGbGFncyhOb2RlVXNlZEFzVmFsdWUp
OworICAgICAgICAgICAgaWYgKCFub2RlLT5jaGlsZDIoKSkKICAgICAgICAgICAgICAgICByZXR1
cm4gY2hhbmdlZDsKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaFtub2RlLmNoaWxkMigp
XS5tZXJnZUZsYWdzKE5vZGVVc2VkQXNWYWx1ZSk7Ci0gICAgICAgICAgICBpZiAoIW5vZGUuY2hp
bGQzKCkpCisgICAgICAgICAgICBjaGFuZ2VkIHw9IG5vZGUtPmNoaWxkMigpLT5tZXJnZUZsYWdz
KE5vZGVVc2VkQXNWYWx1ZSk7CisgICAgICAgICAgICBpZiAoIW5vZGUtPmNoaWxkMygpKQogICAg
ICAgICAgICAgICAgIHJldHVybiBjaGFuZ2VkOwotICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dy
YXBoW25vZGUuY2hpbGQzKCldLm1lcmdlRmxhZ3MoTm9kZVVzZWRBc1ZhbHVlKTsKKyAgICAgICAg
ICAgIGNoYW5nZWQgfD0gbm9kZS0+Y2hpbGQzKCktPm1lcmdlRmxhZ3MoTm9kZVVzZWRBc1ZhbHVl
KTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gY2hhbmdlZDsKICAgICB9CkBAIC04NjMsOCAr
ODYwLDE2IEBAIHByaXZhdGU6CiAjaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJC
T1NFKQogICAgICAgICBkYXRhTG9nRigiUHJvcGFnYXRpbmcgcHJlZGljdGlvbnMgZm9yd2FyZCBb
JXVdXG4iLCArK21fY291bnQpOwogI2VuZGlmCi0gICAgICAgIGZvciAobV9jb21waWxlSW5kZXgg
PSAwOyBtX2NvbXBpbGVJbmRleCA8IG1fZ3JhcGguc2l6ZSgpOyArK21fY29tcGlsZUluZGV4KQot
ICAgICAgICAgICAgcHJvcGFnYXRlKG1fZ3JhcGhbbV9jb21waWxlSW5kZXhdKTsKKyAgICAgICAg
Zm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9ncmFwaC5tX2Js
b2Nrcy5zaXplKCk7ICsrYmxvY2tJbmRleCkgeworICAgICAgICAgICAgQmFzaWNCbG9jayogYmxv
Y2sgPSBtX2dyYXBoLm1fYmxvY2tzW2Jsb2NrSW5kZXhdLmdldCgpOworICAgICAgICAgICAgaWYg
KCFibG9jaykKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIEFTU0VSVChi
bG9jay0+aXNSZWFjaGFibGUpOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IGJsb2NrLT5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgICAgIG1fY3VycmVudE5vZGUgPSBi
bG9jay0+YXQoaSk7CisgICAgICAgICAgICAgICAgcHJvcGFnYXRlKG1fY3VycmVudE5vZGUpOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CiAgICAgfQogICAgIAogICAgIHZvaWQgcHJvcGFnYXRl
QmFja3dhcmQoKQpAQCAtODcyLDEyMyArODc3LDEzOSBAQCBwcml2YXRlOgogI2lmIERGR19FTkFC
TEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKICAgICAgICAgZGF0YUxvZ0YoIlByb3BhZ2F0
aW5nIHByZWRpY3Rpb25zIGJhY2t3YXJkIFsldV1cbiIsICsrbV9jb3VudCk7CiAjZW5kaWYKLSAg
ICAgICAgZm9yIChtX2NvbXBpbGVJbmRleCA9IG1fZ3JhcGguc2l6ZSgpOyBtX2NvbXBpbGVJbmRl
eC0tID4gMDspCi0gICAgICAgICAgICBwcm9wYWdhdGUobV9ncmFwaFttX2NvbXBpbGVJbmRleF0p
OworICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IG1fZ3JhcGgubV9ibG9ja3Mu
c2l6ZSgpOyBibG9ja0luZGV4LS07KSB7CisgICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9
IG1fZ3JhcGgubV9ibG9ja3NbYmxvY2tJbmRleF0uZ2V0KCk7CisgICAgICAgICAgICBpZiAoIWJs
b2NrKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgQVNTRVJUKGJsb2Nr
LT5pc1JlYWNoYWJsZSk7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBibG9jay0+c2l6
ZSgpOyBpLS07KSB7CisgICAgICAgICAgICAgICAgbV9jdXJyZW50Tm9kZSA9IGJsb2NrLT5hdChp
KTsKKyAgICAgICAgICAgICAgICBwcm9wYWdhdGUobV9jdXJyZW50Tm9kZSk7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KICAgICB9CiAgICAgCi0gICAgdm9pZCBkb1JvdW5kT2ZEb3VibGVWb3Rp
bmcoKQorICAgIHZvaWQgZG9Eb3VibGVWb3RpbmcoTm9kZSogbm9kZSkKICAgICB7Ci0jaWYgREZH
X0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQotICAgICAgICBkYXRhTG9nRigiVm90
aW5nIG9uIGRvdWJsZSB1c2VzIG9mIGxvY2FscyBbJXVdXG4iLCBtX2NvdW50KTsKLSNlbmRpZgot
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9ncmFwaC5tX3ZhcmlhYmxlQWNjZXNz
RGF0YS5zaXplKCk7ICsraSkKLSAgICAgICAgICAgIG1fZ3JhcGgubV92YXJpYWJsZUFjY2Vzc0Rh
dGFbaV0uZmluZCgpLT5jbGVhclZvdGVzKCk7Ci0gICAgICAgIGZvciAobV9jb21waWxlSW5kZXgg
PSAwOyBtX2NvbXBpbGVJbmRleCA8IG1fZ3JhcGguc2l6ZSgpOyArK21fY29tcGlsZUluZGV4KSB7
Ci0gICAgICAgICAgICBOb2RlJiBub2RlID0gbV9ncmFwaFttX2NvbXBpbGVJbmRleF07Ci0gICAg
ICAgICAgICBzd2l0Y2ggKG5vZGUub3AoKSkgewotICAgICAgICAgICAgY2FzZSBWYWx1ZUFkZDoK
LSAgICAgICAgICAgIGNhc2UgQXJpdGhBZGQ6Ci0gICAgICAgICAgICBjYXNlIEFyaXRoU3ViOiB7
Ci0gICAgICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgbGVmdCA9IG1fZ3JhcGhbbm9kZS5jaGls
ZDEoKV0ucHJlZGljdGlvbigpOwotICAgICAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHJpZ2h0
ID0gbV9ncmFwaFtub2RlLmNoaWxkMigpXS5wcmVkaWN0aW9uKCk7CisgICAgICAgIHN3aXRjaCAo
bm9kZS0+b3AoKSkgeworICAgICAgICBjYXNlIFZhbHVlQWRkOgorICAgICAgICBjYXNlIEFyaXRo
QWRkOgorICAgICAgICBjYXNlIEFyaXRoU3ViOiB7CisgICAgICAgICAgICBTcGVjdWxhdGVkVHlw
ZSBsZWZ0ID0gbm9kZS0+Y2hpbGQxKCktPnByZWRpY3Rpb24oKTsKKyAgICAgICAgICAgIFNwZWN1
bGF0ZWRUeXBlIHJpZ2h0ID0gbm9kZS0+Y2hpbGQyKCktPnByZWRpY3Rpb24oKTsKICAgICAgICAg
ICAgICAgICAKLSAgICAgICAgICAgICAgICBEb3VibGVCYWxsb3QgYmFsbG90OworICAgICAgICAg
ICAgRG91YmxlQmFsbG90IGJhbGxvdDsKICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAg
ICBpZiAoaXNOdW1iZXJTcGVjdWxhdGlvbkV4cGVjdGluZ0RlZmluZWQobGVmdCkgJiYgaXNOdW1i
ZXJTcGVjdWxhdGlvbkV4cGVjdGluZ0RlZmluZWQocmlnaHQpCi0gICAgICAgICAgICAgICAgICAg
ICYmICFtX2dyYXBoLmFkZFNob3VsZFNwZWN1bGF0ZUludGVnZXIobm9kZSkpCi0gICAgICAgICAg
ICAgICAgICAgIGJhbGxvdCA9IFZvdGVEb3VibGU7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgICAgICAgICBiYWxsb3QgPSBWb3RlVmFsdWU7CisgICAgICAgICAgICBpZiAoaXNO
dW1iZXJTcGVjdWxhdGlvbkV4cGVjdGluZ0RlZmluZWQobGVmdCkgJiYgaXNOdW1iZXJTcGVjdWxh
dGlvbkV4cGVjdGluZ0RlZmluZWQocmlnaHQpCisgICAgICAgICAgICAgICAgJiYgIW1fZ3JhcGgu
YWRkU2hvdWxkU3BlY3VsYXRlSW50ZWdlcihub2RlKSkKKyAgICAgICAgICAgICAgICBiYWxsb3Qg
PSBWb3RlRG91YmxlOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGJhbGxvdCA9
IFZvdGVWYWx1ZTsKICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBtX2dyYXBoLnZv
dGUobm9kZS5jaGlsZDEoKSwgYmFsbG90KTsKLSAgICAgICAgICAgICAgICBtX2dyYXBoLnZvdGUo
bm9kZS5jaGlsZDIoKSwgYmFsbG90KTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIG1fZ3JhcGgudm90ZShub2RlLT5jaGlsZDEoKSwgYmFsbG90KTsK
KyAgICAgICAgICAgIG1fZ3JhcGgudm90ZShub2RlLT5jaGlsZDIoKSwgYmFsbG90KTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBj
YXNlIEFyaXRoTXVsOiB7Ci0gICAgICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgbGVmdCA9IG1f
Z3JhcGhbbm9kZS5jaGlsZDEoKV0ucHJlZGljdGlvbigpOwotICAgICAgICAgICAgICAgIFNwZWN1
bGF0ZWRUeXBlIHJpZ2h0ID0gbV9ncmFwaFtub2RlLmNoaWxkMigpXS5wcmVkaWN0aW9uKCk7Cisg
ICAgICAgIGNhc2UgQXJpdGhNdWw6IHsKKyAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIGxlZnQg
PSBub2RlLT5jaGlsZDEoKS0+cHJlZGljdGlvbigpOworICAgICAgICAgICAgU3BlY3VsYXRlZFR5
cGUgcmlnaHQgPSBub2RlLT5jaGlsZDIoKS0+cHJlZGljdGlvbigpOwogICAgICAgICAgICAgICAg
IAotICAgICAgICAgICAgICAgIERvdWJsZUJhbGxvdCBiYWxsb3Q7CisgICAgICAgICAgICBEb3Vi
bGVCYWxsb3QgYmFsbG90OwogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGlmIChp
c051bWJlclNwZWN1bGF0aW9uKGxlZnQpICYmIGlzTnVtYmVyU3BlY3VsYXRpb24ocmlnaHQpCi0g
ICAgICAgICAgICAgICAgICAgICYmICFtX2dyYXBoLm11bFNob3VsZFNwZWN1bGF0ZUludGVnZXIo
bm9kZSkpCi0gICAgICAgICAgICAgICAgICAgIGJhbGxvdCA9IFZvdGVEb3VibGU7Ci0gICAgICAg
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBiYWxsb3QgPSBWb3RlVmFsdWU7Cisg
ICAgICAgICAgICBpZiAoaXNOdW1iZXJTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc051bWJlclNwZWN1
bGF0aW9uKHJpZ2h0KQorICAgICAgICAgICAgICAgICYmICFtX2dyYXBoLm11bFNob3VsZFNwZWN1
bGF0ZUludGVnZXIobm9kZSkpCisgICAgICAgICAgICAgICAgYmFsbG90ID0gVm90ZURvdWJsZTsK
KyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBiYWxsb3QgPSBWb3RlVmFsdWU7CiAg
ICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgbV9ncmFwaC52b3RlKG5vZGUuY2hpbGQx
KCksIGJhbGxvdCk7Ci0gICAgICAgICAgICAgICAgbV9ncmFwaC52b3RlKG5vZGUuY2hpbGQyKCks
IGJhbGxvdCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9CisgICAgICAg
ICAgICBtX2dyYXBoLnZvdGUobm9kZS0+Y2hpbGQxKCksIGJhbGxvdCk7CisgICAgICAgICAgICBt
X2dyYXBoLnZvdGUobm9kZS0+Y2hpbGQyKCksIGJhbGxvdCk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQogCi0gICAgICAgICAgICBjYXNlIEFyaXRoTWluOgotICAgICAgICAgICAgY2Fz
ZSBBcml0aE1heDoKLSAgICAgICAgICAgIGNhc2UgQXJpdGhNb2Q6Ci0gICAgICAgICAgICBjYXNl
IEFyaXRoRGl2OiB7Ci0gICAgICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgbGVmdCA9IG1fZ3Jh
cGhbbm9kZS5jaGlsZDEoKV0ucHJlZGljdGlvbigpOwotICAgICAgICAgICAgICAgIFNwZWN1bGF0
ZWRUeXBlIHJpZ2h0ID0gbV9ncmFwaFtub2RlLmNoaWxkMigpXS5wcmVkaWN0aW9uKCk7CisgICAg
ICAgIGNhc2UgQXJpdGhNaW46CisgICAgICAgIGNhc2UgQXJpdGhNYXg6CisgICAgICAgIGNhc2Ug
QXJpdGhNb2Q6CisgICAgICAgIGNhc2UgQXJpdGhEaXY6IHsKKyAgICAgICAgICAgIFNwZWN1bGF0
ZWRUeXBlIGxlZnQgPSBub2RlLT5jaGlsZDEoKS0+cHJlZGljdGlvbigpOworICAgICAgICAgICAg
U3BlY3VsYXRlZFR5cGUgcmlnaHQgPSBub2RlLT5jaGlsZDIoKS0+cHJlZGljdGlvbigpOwogICAg
ICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIERvdWJsZUJhbGxvdCBiYWxsb3Q7CisgICAg
ICAgICAgICBEb3VibGVCYWxsb3QgYmFsbG90OwogICAgICAgICAgICAgICAgIAotICAgICAgICAg
ICAgICAgIGlmIChpc051bWJlclNwZWN1bGF0aW9uKGxlZnQpICYmIGlzTnVtYmVyU3BlY3VsYXRp
b24ocmlnaHQpCi0gICAgICAgICAgICAgICAgICAgICYmICEoTm9kZTo6c2hvdWxkU3BlY3VsYXRl
SW50ZWdlckZvckFyaXRobWV0aWMobV9ncmFwaFtub2RlLmNoaWxkMSgpXSwgbV9ncmFwaFtub2Rl
LmNoaWxkMSgpXSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAmJiBub2RlLmNhblNwZWN1bGF0
ZUludGVnZXIoKSkpCi0gICAgICAgICAgICAgICAgICAgIGJhbGxvdCA9IFZvdGVEb3VibGU7Ci0g
ICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBiYWxsb3QgPSBWb3RlVmFs
dWU7CisgICAgICAgICAgICBpZiAoaXNOdW1iZXJTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc051bWJl
clNwZWN1bGF0aW9uKHJpZ2h0KQorICAgICAgICAgICAgICAgICYmICEoTm9kZTo6c2hvdWxkU3Bl
Y3VsYXRlSW50ZWdlckZvckFyaXRobWV0aWMobm9kZS0+Y2hpbGQxKCkubm9kZSgpLCBub2RlLT5j
aGlsZDIoKS5ub2RlKCkpCisgICAgICAgICAgICAgICAgICAgICAmJiBub2RlLmNhblNwZWN1bGF0
ZUludGVnZXIoKSkpCisgICAgICAgICAgICAgICAgYmFsbG90ID0gVm90ZURvdWJsZTsKKyAgICAg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBiYWxsb3QgPSBWb3RlVmFsdWU7CiAgICAgICAg
ICAgICAgICAgCi0gICAgICAgICAgICAgICAgbV9ncmFwaC52b3RlKG5vZGUuY2hpbGQxKCksIGJh
bGxvdCk7Ci0gICAgICAgICAgICAgICAgbV9ncmFwaC52b3RlKG5vZGUuY2hpbGQyKCksIGJhbGxv
dCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBt
X2dyYXBoLnZvdGUobm9kZS0+Y2hpbGQxKCksIGJhbGxvdCk7CisgICAgICAgICAgICBtX2dyYXBo
LnZvdGUobm9kZS0+Y2hpbGQyKCksIGJhbGxvdCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgY2FzZSBBcml0aEFiczoKLSAgICAg
ICAgICAgICAgICBEb3VibGVCYWxsb3QgYmFsbG90OwotICAgICAgICAgICAgICAgIGlmICghKG1f
Z3JhcGhbbm9kZS5jaGlsZDEoKV0uc2hvdWxkU3BlY3VsYXRlSW50ZWdlckZvckFyaXRobWV0aWMo
KQotICAgICAgICAgICAgICAgICAgICAgICYmIG5vZGUuY2FuU3BlY3VsYXRlSW50ZWdlcigpKSkK
LSAgICAgICAgICAgICAgICAgICAgYmFsbG90ID0gVm90ZURvdWJsZTsKLSAgICAgICAgICAgICAg
ICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIGJhbGxvdCA9IFZvdGVWYWx1ZTsKKyAgICAgICAg
Y2FzZSBBcml0aEFiczoKKyAgICAgICAgICAgIERvdWJsZUJhbGxvdCBiYWxsb3Q7CisgICAgICAg
ICAgICBpZiAoIShub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlSW50ZWdlckZvckFyaXRo
bWV0aWMoKQorICAgICAgICAgICAgICAgICAgJiYgbm9kZS5jYW5TcGVjdWxhdGVJbnRlZ2VyKCkp
KQorICAgICAgICAgICAgICAgIGJhbGxvdCA9IFZvdGVEb3VibGU7CisgICAgICAgICAgICBlbHNl
CisgICAgICAgICAgICAgICAgYmFsbG90ID0gVm90ZVZhbHVlOwogICAgICAgICAgICAgICAgIAot
ICAgICAgICAgICAgICAgIG1fZ3JhcGgudm90ZShub2RlLmNoaWxkMSgpLCBiYWxsb3QpOwotICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgbV9ncmFwaC52b3RlKG5vZGUtPmNoaWxk
MSgpLCBiYWxsb3QpOworICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgCi0gICAg
ICAgICAgICBjYXNlIEFyaXRoU3FydDoKLSAgICAgICAgICAgICAgICBtX2dyYXBoLnZvdGUobm9k
ZS5jaGlsZDEoKSwgVm90ZURvdWJsZSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgQXJpdGhTcXJ0OgorICAgICAgICAgICAgbV9ncmFwaC52b3RlKG5vZGUtPmNoaWxkMSgp
LCBWb3RlRG91YmxlKTsKKyAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIAotICAg
ICAgICAgICAgY2FzZSBTZXRMb2NhbDogewotICAgICAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBl
IHByZWRpY3Rpb24gPSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLnByZWRpY3Rpb24oKTsKLSAgICAg
ICAgICAgICAgICBpZiAoaXNEb3VibGVTcGVjdWxhdGlvbihwcmVkaWN0aW9uKSkKLSAgICAgICAg
ICAgICAgICAgICAgbm9kZS52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+dm90ZShWb3RlRG91YmxlKTsK
LSAgICAgICAgICAgICAgICBlbHNlIGlmICghaXNOdW1iZXJTcGVjdWxhdGlvbihwcmVkaWN0aW9u
KSB8fCBpc0ludDMyU3BlY3VsYXRpb24ocHJlZGljdGlvbikpCi0gICAgICAgICAgICAgICAgICAg
IG5vZGUudmFyaWFibGVBY2Nlc3NEYXRhKCktPnZvdGUoVm90ZVZhbHVlKTsKLSAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgIH0KKyAgICAgICAgY2FzZSBTZXRMb2NhbDogeworICAg
ICAgICAgICAgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiA9IG5vZGUtPmNoaWxkMSgpLT5wcmVk
aWN0aW9uKCk7CisgICAgICAgICAgICBpZiAoaXNEb3VibGVTcGVjdWxhdGlvbihwcmVkaWN0aW9u
KSkKKyAgICAgICAgICAgICAgICBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+dm90ZShWb3Rl
RG91YmxlKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKCFpc051bWJlclNwZWN1bGF0aW9uKHByZWRp
Y3Rpb24pIHx8IGlzSW50MzJTcGVjdWxhdGlvbihwcmVkaWN0aW9uKSkKKyAgICAgICAgICAgICAg
ICBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+dm90ZShWb3RlVmFsdWUpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGNhc2Ug
UHV0QnlWYWw6Ci0gICAgICAgICAgICBjYXNlIFB1dEJ5VmFsQWxpYXM6IHsKLSAgICAgICAgICAg
ICAgICBFZGdlIGNoaWxkMSA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCk7Ci0gICAgICAg
ICAgICAgICAgRWRnZSBjaGlsZDIgPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpOwotICAg
ICAgICAgICAgICAgIEVkZ2UgY2hpbGQzID0gbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAyKTsK
LSAgICAgICAgICAgICAgICBtX2dyYXBoLnZvdGUoY2hpbGQxLCBWb3RlVmFsdWUpOwotICAgICAg
ICAgICAgICAgIG1fZ3JhcGgudm90ZShjaGlsZDIsIFZvdGVWYWx1ZSk7Ci0gICAgICAgICAgICAg
ICAgc3dpdGNoIChub2RlLmFycmF5TW9kZSgpLnR5cGUoKSkgewotICAgICAgICAgICAgICAgIGNh
c2UgQXJyYXk6OkRvdWJsZToKLSAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC52b3RlKGNoaWxk
MywgVm90ZURvdWJsZSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
ICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgudm90ZShjaGlsZDMsIFZv
dGVWYWx1ZSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgY2FzZSBQdXRCeVZhbDoKKyAgICAgICAgY2FzZSBQdXRCeVZhbEFsaWFzOiB7Cisg
ICAgICAgICAgICBFZGdlIGNoaWxkMSA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCk7Cisg
ICAgICAgICAgICBFZGdlIGNoaWxkMiA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSk7Cisg
ICAgICAgICAgICBFZGdlIGNoaWxkMyA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMik7Cisg
ICAgICAgICAgICBtX2dyYXBoLnZvdGUoY2hpbGQxLCBWb3RlVmFsdWUpOworICAgICAgICAgICAg
bV9ncmFwaC52b3RlKGNoaWxkMiwgVm90ZVZhbHVlKTsKKyAgICAgICAgICAgIHN3aXRjaCAobm9k
ZS5hcnJheU1vZGUoKS50eXBlKCkpIHsKKyAgICAgICAgICAgIGNhc2UgQXJyYXk6OkRvdWJsZToK
KyAgICAgICAgICAgICAgICBtX2dyYXBoLnZvdGUoY2hpbGQzLCBWb3RlRG91YmxlKTsKICAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAKICAgICAg
ICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgbV9ncmFwaC52b3RlKG5vZGUsIFZvdGVW
YWx1ZSk7CisgICAgICAgICAgICAgICAgbV9ncmFwaC52b3RlKGNoaWxkMywgVm90ZVZhbHVlKTsK
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
IG1fZ3JhcGgudm90ZShub2RlLCBWb3RlVmFsdWUpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKyAgICB9CisgICAgCisgICAgdm9pZCBkb1JvdW5kT2ZEb3VibGVWb3RpbmcoKQorICAg
IHsKKyNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCisgICAgICAgIGRh
dGFMb2dGKCJWb3Rpbmcgb24gZG91YmxlIHVzZXMgb2YgbG9jYWxzIFsldV1cbiIsIG1fY291bnQp
OworI2VuZGlmCisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2dyYXBoLm1fdmFy
aWFibGVBY2Nlc3NEYXRhLnNpemUoKTsgKytpKQorICAgICAgICAgICAgbV9ncmFwaC5tX3Zhcmlh
YmxlQWNjZXNzRGF0YVtpXS5maW5kKCktPmNsZWFyVm90ZXMoKTsKKyAgICAgICAgZm9yIChCYXNp
Y0Jsb2NrIGJsb2NrSW5kZXggPSAwOyBpIDwgbV9ncmFwaC5tX2Jsb2Nrcy5zaXplKCk7ICsrYmxv
Y2tJbmRleCkgeworICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLm1fYmxv
Y2tzW2Jsb2NrSW5kZXhdLmdldCgpOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IGJsb2NrLT5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgICAgIG1fY3VycmVudE5vZGUg
PSBibG9jay0+YXQoaSk7CisgICAgICAgICAgICAgICAgZG9Eb3VibGVWb3RpbmcobV9jdXJyZW50
Tm9kZSk7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IG1fZ3JhcGgubV92YXJpYWJsZUFjY2Vzc0RhdGEuc2l6ZSgpOyArK2kpIHsKICAg
ICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhID0gJm1fZ3Jh
cGgubV92YXJpYWJsZUFjY2Vzc0RhdGFbaV07CkBAIC0xMDEyLDcgKzEwMzMsNyBAQCBwcml2YXRl
OgogICAgICAgICB9CiAgICAgfQogICAgIAotICAgIE5vZGVJbmRleCBtX2NvbXBpbGVJbmRleDsK
KyAgICBOb2RlKiBtX2N1cnJlbnROb2RlOwogICAgIGJvb2wgbV9jaGFuZ2VkOwogCiAjaWYgREZH
X0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlLmgJKHJldmlz
aW9uIDE0MDMwNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RydWN0dXJlQWJz
dHJhY3RWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMTQsNiArMzE0LDggQEAgcHVibGljOgog
cHJpdmF0ZToKICAgICBzdGF0aWMgU3RydWN0dXJlKiB0b3BWYWx1ZSgpIHsgcmV0dXJuIHJlaW50
ZXJwcmV0X2Nhc3Q8U3RydWN0dXJlKj4oMSk7IH0KICAgICAKKyAgICAvLyBOQi4gVGhpcyBtdXN0
IGhhdmUgYSB0cml2aWFsIGRlc3RydWN0b3IuCisgICAgCiAgICAgLy8gVGhpcyBjYW4gb25seSBy
ZW1lbWJlciBvbmUgc3RydWN0dXJlIGF0IGEgdGltZS4KICAgICBTdHJ1Y3R1cmUqIG1fc3RydWN0
dXJlOwogfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsaWRhdGUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsaWRhdGUuY3Bw
CShyZXZpc2lvbiAxNDAzMDYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbGlk
YXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODAsNDAgKzgwLDQzIEBAIHB1YmxpYzoKICAgICAg
ICAgLy8gVmFsaWRhdGUgdGhhdCBhbGwgbG9jYWwgdmFyaWFibGVzIGF0IHRoZSBoZWFkIG9mIHRo
ZSByb290IGJsb2NrIGFyZSBkZWFkLgogICAgICAgICBCYXNpY0Jsb2NrKiByb290ID0gbV9ncmFw
aC5tX2Jsb2Nrc1swXS5nZXQoKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHJv
b3QtPnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkxvY2FscygpOyArK2kpCi0gICAgICAgICAgICBW
X0VRVUFMKChzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KGkpLCAwKSwgTm9Ob2RlLCByb290
LT52YXJpYWJsZXNBdEhlYWQubG9jYWwoaSkpOworICAgICAgICAgICAgVl9FUVVBTCgoc3RhdGlj
X2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihpKSwgMCksIDAsIHJvb3QtPnZhcmlhYmxlc0F0SGVhZC5s
b2NhbChpKSk7CiAgICAgICAgIAogICAgICAgICAvLyBWYWxpZGF0ZSByZWYgY291bnRzIGFuZCB1
c2VzLgotICAgICAgICBWZWN0b3I8dW5zaWduZWQ+IG15UmVmQ291bnRzOwotICAgICAgICBteVJl
ZkNvdW50cy5maWxsKDAsIG1fZ3JhcGguc2l6ZSgpKTsKLSAgICAgICAgQml0VmVjdG9yIGFjY2Vw
dGFibGVOb2RlSW5kaWNlczsKKyAgICAgICAgSGFzaE1hcDxOb2RlKiwgdW5zaWduZWQ+IG15UmVm
Q291bnRzOwogICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5k
ZXggPCBtX2dyYXBoLm1fYmxvY2tzLnNpemUoKTsgKytibG9ja0luZGV4KSB7CiAgICAgICAgICAg
ICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGgubV9ibG9ja3NbYmxvY2tJbmRleF0uZ2V0KCk7
Ci0gICAgICAgICAgICBpZiAoIWJsb2NrKQorICAgICAgICAgICAgaWYgKCFibG9jayB8fCAhYmxv
Y2stPmlzUmVhY2hhYmxlKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAg
aWYgKCFibG9jay0+aXNSZWFjaGFibGUpCisgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IGJsb2NrLT5udW1Ob2RlcygpOyArK2kpCisgICAgICAgICAgICAgICAgbXlSZWZDb3VudHMu
YWRkKGJsb2NrLT5ub2RlKGkpLCAwKTsKKyAgICAgICAgfQorICAgICAgICBIYXNoU2V0PE5vZGUq
PiBhY2NlcHRhYmxlTm9kZXM7CisgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0g
MDsgYmxvY2tJbmRleCA8IG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgpOyArK2Jsb2NrSW5kZXgpIHsK
KyAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5tX2Jsb2Nrc1tibG9ja0lu
ZGV4XS5nZXQoKTsKKyAgICAgICAgICAgIGlmICghYmxvY2sgfHwgIWJsb2NrLT5pc1JlYWNoYWJs
ZSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgYmxvY2stPm51bU5vZGVzKCk7ICsraSkgewotICAgICAgICAgICAgICAgIE5vZGVJ
bmRleCBub2RlSW5kZXggPSBibG9jay0+bm9kZUluZGV4KGkpOwotICAgICAgICAgICAgICAgIGFj
Y2VwdGFibGVOb2RlSW5kaWNlcy5zZXQobm9kZUluZGV4KTsKLSAgICAgICAgICAgICAgICBOb2Rl
JiBub2RlID0gbV9ncmFwaFtub2RlSW5kZXhdOwotICAgICAgICAgICAgICAgIGlmICghbm9kZS5z
aG91bGRHZW5lcmF0ZSgpKQorICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+bm9k
ZShpKTsKKyAgICAgICAgICAgICAgICBhY2NlcHRhYmxlTm9kZXMuYWRkKG5vZGUpOworICAgICAg
ICAgICAgICAgIGlmICghbm9kZS0+c2hvdWxkR2VuZXJhdGUoKSkKICAgICAgICAgICAgICAgICAg
ICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gMDsgaiA8IG1f
Z3JhcGgubnVtQ2hpbGRyZW4obm9kZSk7ICsraikgewogICAgICAgICAgICAgICAgICAgICBFZGdl
IGVkZ2UgPSBtX2dyYXBoLmNoaWxkKG5vZGUsIGopOwogICAgICAgICAgICAgICAgICAgICBpZiAo
IWVkZ2UpCiAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAg
ICAgICAgCi0gICAgICAgICAgICAgICAgICAgIG15UmVmQ291bnRzW2VkZ2UuaW5kZXgoKV0rKzsK
KyAgICAgICAgICAgICAgICAgICAgbXlSZWZDb3VudHMuZmluZChlZGdlLm5vZGUoKSktPnZhbHVl
Kys7CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAvLyBVbmxlc3Mg
SSdtIGEgRmx1c2gsIFBoYW50b20sIEdldExvY2FsLCBvciBQaGksIG15IGNoaWxkcmVuIHNob3Vs
ZCBoYXNSZXN1bHQoKS4KLSAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChub2RlLm9wKCkpIHsK
KyAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CiAgICAgICAgICAgICAg
ICAgICAgIGNhc2UgRmx1c2g6CiAgICAgICAgICAgICAgICAgICAgIGNhc2UgUGhhbnRvbToKICAg
ICAgICAgICAgICAgICAgICAgY2FzZSBHZXRMb2NhbDoKICAgICAgICAgICAgICAgICAgICAgY2Fz
ZSBQaGk6CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAg
ICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChub2RlSW5kZXgs
IGVkZ2UpLCBtX2dyYXBoW2VkZ2VdLmhhc1Jlc3VsdCgpKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIFZBTElEQVRFKChub2RlLCBlZGdlKSwgZWRnZS0+aGFzUmVzdWx0KCkpOwogICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICB9CkBAIC0xMjEsNTQgKzEyNCw1MCBAQCBwdWJsaWM6CiAgICAgICAgIH0KICAgICAgICAg
Zm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9ncmFwaC5tX2Js
b2Nrcy5zaXplKCk7ICsrYmxvY2tJbmRleCkgewogICAgICAgICAgICAgQmFzaWNCbG9jayogYmxv
Y2sgPSBtX2dyYXBoLm1fYmxvY2tzW2Jsb2NrSW5kZXhdLmdldCgpOwotICAgICAgICAgICAgaWYg
KCFibG9jaykKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGlmICghYmxv
Y2stPmlzUmVhY2hhYmxlKQorICAgICAgICAgICAgaWYgKCFibG9jayB8fCAhYmxvY2stPmlzUmVh
Y2hhYmxlKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgCi0gICAgICAg
ICAgICBCaXRWZWN0b3IgcGhpc0luVGhpc0Jsb2NrOwotICAgICAgICAgICAgQml0VmVjdG9yIG5v
ZGVzSW5UaGlzQmxvY2s7CisgICAgICAgICAgICBIYXNoU2V0PE5vZGUqPiBwaGlzSW5UaGlzQmxv
Y2s7CisgICAgICAgICAgICBIYXNoU2V0PE5vZGUqPiBub2Rlc0luVGhpc0Jsb2NrOwogICAgICAg
ICAgICAgCiAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGJsb2NrLT5udW1Ob2Rl
cygpOyArK2kpIHsKLSAgICAgICAgICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4ID0gYmxvY2st
Pm5vZGVJbmRleChpKTsKLSAgICAgICAgICAgICAgICBOb2RlJiBub2RlID0gbV9ncmFwaFtub2Rl
SW5kZXhdOwotICAgICAgICAgICAgICAgIG5vZGVzSW5UaGlzQmxvY2suc2V0KG5vZGVJbmRleCk7
CisgICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5ub2RlKGkpOworICAgICAgICAg
ICAgICAgIG5vZGVzSW5UaGlzQmxvY2suYWRkKG5vZGUpOwogICAgICAgICAgICAgICAgIGlmIChi
bG9jay0+aXNQaGlJbmRleChpKSkKLSAgICAgICAgICAgICAgICAgICAgcGhpc0luVGhpc0Jsb2Nr
LnNldChub2RlSW5kZXgpOwotICAgICAgICAgICAgICAgIFZfRVFVQUwoKG5vZGVJbmRleCksIG15
UmVmQ291bnRzW25vZGVJbmRleF0sIG5vZGUuYWRqdXN0ZWRSZWZDb3VudCgpKTsKKyAgICAgICAg
ICAgICAgICAgICAgcGhpc0luVGhpc0Jsb2NrLmFkZChub2RlKTsKKyAgICAgICAgICAgICAgICBW
X0VRVUFMKChub2RlKSwgbXlSZWZDb3VudHMuZ2V0KG5vZGVJbmRleCksIG5vZGUuYWRqdXN0ZWRS
ZWZDb3VudCgpKTsKICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSAwOyBqIDwgbV9n
cmFwaC5udW1DaGlsZHJlbihub2RlKTsgKytqKSB7CiAgICAgICAgICAgICAgICAgICAgIEVkZ2Ug
ZWRnZSA9IG1fZ3JhcGguY2hpbGQobm9kZSwgaik7CiAgICAgICAgICAgICAgICAgICAgIGlmICgh
ZWRnZSkKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAg
ICAgICBWQUxJREFURSgobm9kZUluZGV4LCBlZGdlKSwgYWNjZXB0YWJsZU5vZGVJbmRpY2VzLmdl
dChlZGdlLmluZGV4KCkpKTsKKyAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKG5vZGUsIGVk
Z2UpLCBhY2NlcHRhYmxlTm9kZUluZGljZXMuY29udGFpbnMoZWRnZS5ub2RlKCkpKTsKICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgYmxvY2stPnBoaXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAg
ICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4ID0gYmxvY2stPnBoaXNbaV07Ci0gICAgICAgICAg
ICAgICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhbbm9kZUluZGV4XTsKLSAgICAgICAgICAgICAgICBB
U1NFUlQocGhpc0luVGhpc0Jsb2NrLmdldChub2RlSW5kZXgpKTsKLSAgICAgICAgICAgICAgICBW
QUxJREFURSgobm9kZUluZGV4KSwgbm9kZS5vcCgpID09IFBoaSk7Ci0gICAgICAgICAgICAgICAg
VmlydHVhbFJlZ2lzdGVyIGxvY2FsID0gbm9kZS5sb2NhbCgpOworICAgICAgICAgICAgICAgIE5v
ZGUqIG5vZGUgPSBibG9jay0+cGhpc1tpXTsKKyAgICAgICAgICAgICAgICBBU1NFUlQocGhpc0lu
VGhpc0Jsb2NrLmNvbnRhaW5zKG5vZGUpKTsKKyAgICAgICAgICAgICAgICBWQUxJREFURSgobm9k
ZSksIG5vZGUtPm9wKCkgPT0gUGhpKTsKKyAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIg
bG9jYWwgPSBub2RlLT5sb2NhbCgpOwogICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9
IDA7IGogPCBtX2dyYXBoLm51bUNoaWxkcmVuKG5vZGUpOyArK2opIHsKICAgICAgICAgICAgICAg
ICAgICAgRWRnZSBlZGdlID0gbV9ncmFwaC5jaGlsZChub2RlLCBqKTsKICAgICAgICAgICAgICAg
ICAgICAgaWYgKCFlZGdlKQogICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAg
ICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgobm9kZUluZGV4
LCBlZGdlKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaFtlZGdlXS5vcCgp
ID09IFNldExvY2FsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IG1fZ3JhcGhbZWRn
ZV0ub3AoKSA9PSBTZXRBcmd1bWVudAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBt
X2dyYXBoW2VkZ2VdLm9wKCkgPT0gRmx1c2gKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fHwgbV9ncmFwaFtlZGdlXS5vcCgpID09IFBoaSk7CisgICAgICAgICAgICAgICAgICAgIFZBTElE
QVRFKChub2RlLCBlZGdlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWRnZS0+b3Ao
KSA9PSBTZXRMb2NhbAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBlZGdlLT5vcCgp
ID09IFNldEFyZ3VtZW50CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IGVkZ2UtPm9w
KCkgPT0gRmx1c2gKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgZWRnZS0+b3AoKSA9
PSBQaGkpOwogICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgaWYgKHBo
aXNJblRoaXNCbG9jay5nZXQoZWRnZS5pbmRleCgpKSkKKyAgICAgICAgICAgICAgICAgICAgaWYg
KHBoaXNJblRoaXNCbG9jay5jb250YWlucyhlZGdlLm5vZGUoKSkpCiAgICAgICAgICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAg
ICAgIGlmIChub2Rlc0luVGhpc0Jsb2NrLmdldChlZGdlLmluZGV4KCkpKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBWQUxJREFURSgobm9kZUluZGV4LCBlZGdlKSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG1fZ3JhcGhbZWRnZV0ub3AoKSA9PSBTZXRMb2NhbAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgbV9ncmFwaFtlZGdlXS5vcCgpID09IFNldEFy
Z3VtZW50Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBtX2dyYXBoW2VkZ2Vd
Lm9wKCkgPT0gRmx1c2gpOworICAgICAgICAgICAgICAgICAgICBpZiAobm9kZXNJblRoaXNCbG9j
ay5jb250YWlucyhlZGdlLm5vZGUoKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFZBTElE
QVRFKChub2RlLCBlZGdlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVkZ2Ut
Pm9wKCkgPT0gU2V0TG9jYWwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IGVk
Z2UtPm9wKCkgPT0gU2V0QXJndW1lbnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHx8IGVkZ2UtPm9wKCkgPT0gRmx1c2gpOwogICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAg
ICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICAgfQpAQCAt
MTgwLDMzICsxNzksMzAgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICAgICAgQmFzaWNC
bG9jayogcHJldkJsb2NrID0gbV9ncmFwaC5tX2Jsb2Nrc1tibG9jay0+bV9wcmVkZWNlc3NvcnNb
a11dLmdldCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKEJsb2NrLCBibG9j
ay0+bV9wcmVkZWNlc3NvcnNba10pLCBwcmV2QmxvY2spOwogICAgICAgICAgICAgICAgICAgICAg
ICAgVkFMSURBVEUoKEJsb2NrLCBibG9jay0+bV9wcmVkZWNlc3NvcnNba10pLCBwcmV2QmxvY2st
PmlzUmVhY2hhYmxlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIE5vZGVJbmRleCBwcmV2Tm9k
ZUluZGV4ID0gcHJldkJsb2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZChsb2NhbCk7CisgICAg
ICAgICAgICAgICAgICAgICAgICBOb2RlKiBwcmV2Tm9kZSA9IHByZXZCbG9jay0+dmFyaWFibGVz
QXRUYWlsLm9wZXJhbmQobG9jYWwpOwogICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgd2Ug
aGF2ZSBhIFBoaSB0aGF0IGlzIG5vdCByZWZlcnJpbmcgdG8gKnRoaXMqIGJsb2NrIHRoZW4gYWxs
IHByZWRlY2Vzc29ycwogICAgICAgICAgICAgICAgICAgICAgICAgLy8gbXVzdCBoYXZlIHRoYXQg
bG9jYWwgYXZhaWxhYmxlLgotICAgICAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKGxvY2Fs
LCBibG9ja0luZGV4LCBCbG9jaywgYmxvY2stPm1fcHJlZGVjZXNzb3JzW2tdKSwgcHJldk5vZGVJ
bmRleCAhPSBOb05vZGUpOwotICAgICAgICAgICAgICAgICAgICAgICAgTm9kZSogcHJldk5vZGUg
PSAmbV9ncmFwaFtwcmV2Tm9kZUluZGV4XTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChw
cmV2Tm9kZS0+b3AoKSA9PSBHZXRMb2NhbCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHByZXZOb2RlSW5kZXggPSBwcmV2Tm9kZS0+Y2hpbGQxKCkuaW5kZXgoKTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBwcmV2Tm9kZSA9ICZtX2dyYXBoW3ByZXZOb2RlSW5kZXhdOwotICAg
ICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUu
c2hvdWxkR2VuZXJhdGUoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRF
KChsb2NhbCwgYmxvY2stPm1fcHJlZGVjZXNzb3JzW2tdLCBwcmV2Tm9kZUluZGV4KSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChsb2NhbCwgYmxvY2tJbmRleCwgQmxvY2ssIGJs
b2NrLT5tX3ByZWRlY2Vzc29yc1trXSksIHByZXZOb2RlKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChwcmV2Tm9kZS0+b3AoKSA9PSBHZXRMb2NhbCkKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBwcmV2Tm9kZSA9IHByZXZOb2RlLT5jaGlsZDEoKS5ub2RlKCk7CisgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAobm9kZS0+c2hvdWxkR2VuZXJhdGUoKSkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFZBTElEQVRFKChsb2NhbCwgYmxvY2stPm1fcHJlZGVjZXNzb3JzW2td
LCBwcmV2Tm9kZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldk5v
ZGUtPnNob3VsZEdlbmVyYXRlKCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKGxvY2FsLCBibG9jay0+bV9wcmVkZWNlc3NvcnNb
a10sIHByZXZOb2RlSW5kZXgpLAorICAgICAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKGxv
Y2FsLCBibG9jay0+bV9wcmVkZWNlc3NvcnNba10sIHByZXZOb2RlKSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHByZXZOb2RlLT5vcCgpID09IFNldExvY2FsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB8fCBwcmV2Tm9kZS0+b3AoKSA9PSBTZXRBcmd1bWVudAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgcHJldk5vZGUtPm9wKCkgPT0gRmx1
c2gKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IHByZXZOb2RlLT5vcCgpID09
IFBoaSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJldk5vZGVJbmRleCA9PSBlZGdl
LmluZGV4KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcmV2Tm9kZSA9PSBlZGdl
Lm5vZGUoKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEF0IHRoaXMgcG9pbnQgaXQgY2Fubm90IHJl
ZmVyIGludG8gdGhpcyBibG9jay4KLSAgICAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChs
b2NhbCwgYmxvY2stPm1fcHJlZGVjZXNzb3JzW2tdLCBwcmV2Tm9kZUluZGV4KSwgIXByZXZCbG9j
ay0+aXNJbkJsb2NrKGVkZ2UuaW5kZXgoKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgVkFM
SURBVEUoKGxvY2FsLCBibG9jay0+bV9wcmVkZWNlc3NvcnNba10sIHByZXZOb2RlKSwgIXByZXZC
bG9jay0+aXNJbkJsb2NrKGVkZ2Uubm9kZSgpKSk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChub2RlSW5k
ZXgsIGVkZ2UpLCBmb3VuZCk7CisgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChub2RlLCBl
ZGdlKSwgZm91bmQpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIApAQCAtMjI3LDM0ICsyMjMsMzMgQEAgcHVibGljOgogICAgICAgICAgICAgfQogICAgICAg
ICAgICAgCiAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGJsb2NrLT5zaXplKCk7
ICsraSkgewotICAgICAgICAgICAgICAgIE5vZGVJbmRleCBub2RlSW5kZXggPSBibG9jay0+YXQo
aSk7Ci0gICAgICAgICAgICAgICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhbbm9kZUluZGV4XTsKLSAg
ICAgICAgICAgICAgICBBU1NFUlQobm9kZXNJblRoaXNCbG9jay5nZXQobm9kZUluZGV4KSk7Ci0g
ICAgICAgICAgICAgICAgVkFMSURBVEUoKG5vZGVJbmRleCksIG5vZGUub3AoKSAhPSBQaGkpOwor
ICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+YXQoaSk7CisgICAgICAgICAgICAg
ICAgQVNTRVJUKG5vZGVzSW5UaGlzQmxvY2suY29udGFpbnMobm9kZSkpOworICAgICAgICAgICAg
ICAgIFZBTElEQVRFKChub2RlKSwgbm9kZS0+b3AoKSAhPSBQaGkpOwogICAgICAgICAgICAgICAg
IGZvciAodW5zaWduZWQgaiA9IDA7IGogPCBtX2dyYXBoLm51bUNoaWxkcmVuKG5vZGUpOyArK2op
IHsKICAgICAgICAgICAgICAgICAgICAgRWRnZSBlZGdlID0gbV9ncmFwaC5jaGlsZChub2RlLCBq
KTsKICAgICAgICAgICAgICAgICAgICAgaWYgKCFlZGdlKQogICAgICAgICAgICAgICAgICAgICAg
ICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChub2RlSW5kZXgsIGVk
Z2UpLCBub2Rlc0luVGhpc0Jsb2NrLmdldChub2RlSW5kZXgpKTsKKyAgICAgICAgICAgICAgICAg
ICAgVkFMSURBVEUoKG5vZGUsIGVkZ2UpLCBub2Rlc0luVGhpc0Jsb2NrLmNvbnRhaW5zKGVkZ2Uu
bm9kZSgpKSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIAotICAgICAgICAg
ICAgICAgIGlmICghbm9kZS5zaG91bGRHZW5lcmF0ZSgpKQorICAgICAgICAgICAgICAgIGlmICgh
bm9kZS0+c2hvdWxkR2VuZXJhdGUoKSkKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0g
ICAgICAgICAgICAgICAgc3dpdGNoIChub2RlLm9wKCkpIHsKKyAgICAgICAgICAgICAgICBzd2l0
Y2ggKG5vZGUtPm9wKCkpIHsKICAgICAgICAgICAgICAgICBjYXNlIEdldExvY2FsOgotICAgICAg
ICAgICAgICAgICAgICBpZiAobm9kZS52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+aXNDYXB0dXJlZCgp
KQorICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCktPmlz
Q2FwdHVyZWQoKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
ICAgICAgICBWQUxJREFURSgobm9kZUluZGV4LCBibG9ja0luZGV4KSwgZ2V0TG9jYWxQb3NpdGlv
bnMub3BlcmFuZChub2RlLmxvY2FsKCkpID09IG5vdFNldCk7Ci0gICAgICAgICAgICAgICAgICAg
IGdldExvY2FsUG9zaXRpb25zLm9wZXJhbmQobm9kZS5sb2NhbCgpKSA9IGk7CisgICAgICAgICAg
ICAgICAgICAgIFZBTElEQVRFKChub2RlLCBibG9ja0luZGV4KSwgZ2V0TG9jYWxQb3NpdGlvbnMu
b3BlcmFuZChub2RlLT5sb2NhbCgpKSA9PSBub3RTZXQpOworICAgICAgICAgICAgICAgICAgICBn
ZXRMb2NhbFBvc2l0aW9ucy5vcGVyYW5kKG5vZGUtPmxvY2FsKCkpID0gaTsKICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgY2FzZSBTZXRMb2NhbDoKLSAgICAgICAg
ICAgICAgICAgICAgaWYgKG5vZGUudmFyaWFibGVBY2Nlc3NEYXRhKCktPmlzQ2FwdHVyZWQoKSkK
KyAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5pc0Nh
cHR1cmVkKCkpCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAg
ICAgICAgLy8gT25seSByZWNvcmQgdGhlIGZpcnN0IFNldExvY2FsLiBUaGVyZSBtYXkgYmUgbXVs
dGlwbGUgU2V0TG9jYWxzCiAgICAgICAgICAgICAgICAgICAgIC8vIGJlY2F1c2Ugb2YgZmx1c2hp
bmcuCi0gICAgICAgICAgICAgICAgICAgIGlmIChzZXRMb2NhbFBvc2l0aW9ucy5vcGVyYW5kKG5v
ZGUubG9jYWwoKSkgIT0gbm90U2V0KQorICAgICAgICAgICAgICAgICAgICBpZiAoc2V0TG9jYWxQ
b3NpdGlvbnMub3BlcmFuZChub2RlLT5sb2NhbCgpKSAhPSBub3RTZXQpCiAgICAgICAgICAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgc2V0TG9jYWxQb3NpdGlvbnMu
b3BlcmFuZChub2RlLmxvY2FsKCkpID0gaTsKKyAgICAgICAgICAgICAgICAgICAgc2V0TG9jYWxQ
b3NpdGlvbnMub3BlcmFuZChub2RlLT5sb2NhbCgpKSA9IGk7CiAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwpAQCAtMjk0LDkgKzI4OSw5IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBnZXRMb2NhbFBv
c2l0aW9ucy5vcGVyYW5kKG9wZXJhbmQpIDwgc2V0TG9jYWxQb3NpdGlvbnMub3BlcmFuZChvcGVy
YW5kKSk7CiAgICAgfQogICAgIAotICAgIHZvaWQgcmVwb3J0VmFsaWRhdGlvbkNvbnRleHQoTm9k
ZUluZGV4IG5vZGVJbmRleCkKKyAgICB2b2lkIHJlcG9ydFZhbGlkYXRpb25Db250ZXh0KE5vZGUq
IG5vZGUpCiAgICAgewotICAgICAgICBkYXRhTG9nRigiQCV1Iiwgbm9kZUluZGV4KTsKKyAgICAg
ICAgZGF0YUxvZ0YoIkAldSIsIG5vZGUtPmluZGV4KCkpOwogICAgIH0KICAgICAKICAgICBlbnVt
IEJsb2NrVGFnIHsgQmxvY2sgfTsKQEAgLTMwNSw5ICszMDAsOSBAQCBwcml2YXRlOgogICAgICAg
ICBkYXRhTG9nRigiQmxvY2sgIyV1IiwgYmxvY2tJbmRleCk7CiAgICAgfQogICAgIAotICAgIHZv
aWQgcmVwb3J0VmFsaWRhdGlvbkNvbnRleHQoTm9kZUluZGV4IG5vZGVJbmRleCwgRWRnZSBlZGdl
KQorICAgIHZvaWQgcmVwb3J0VmFsaWRhdGlvbkNvbnRleHQoTm9kZSogbm9kZSwgRWRnZSBlZGdl
KQogICAgIHsKLSAgICAgICAgZGF0YUxvZ0YoIkAldSAtPiAlc0AldSIsIG5vZGVJbmRleCwgdXNl
S2luZFRvU3RyaW5nKGVkZ2UudXNlS2luZCgpKSwgZWRnZS5pbmRleCgpKTsKKyAgICAgICAgZGF0
YUxvZ0YoIkAldSAtPiAlc0AldSIsIG5vZGUtPmluZGV4KCksIHVzZUtpbmRUb1N0cmluZyhlZGdl
LnVzZUtpbmQoKSksIGVkZ2UuaW5kZXgoKSk7CiAgICAgfQogICAgIAogICAgIHZvaWQgcmVwb3J0
VmFsaWRhdGlvbkNvbnRleHQoVmlydHVhbFJlZ2lzdGVyIGxvY2FsLCBCbG9ja0luZGV4IGJsb2Nr
SW5kZXgpCkBAIC0zMjIsMjcgKzMxNywyNyBAQCBwcml2YXRlOgogICAgIH0KICAgICAKICAgICB2
b2lkIHJlcG9ydFZhbGlkYXRpb25Db250ZXh0KAotICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgbG9j
YWwsIEJsb2NrSW5kZXggc291cmNlQmxvY2tJbmRleCwgTm9kZUluZGV4IHByZXZOb2RlSW5kZXgp
CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBsb2NhbCwgQmxvY2tJbmRleCBzb3VyY2VCbG9ja0lu
ZGV4LCBOb2RlKiBwcmV2Tm9kZSkKICAgICB7Ci0gICAgICAgIGRhdGFMb2dGKCJAJXUgZm9yIHIl
ZCBpbiBCbG9jayAjJXUiLCBwcmV2Tm9kZUluZGV4LCBsb2NhbCwgc291cmNlQmxvY2tJbmRleCk7
CisgICAgICAgIGRhdGFMb2dGKCJAJXUgZm9yIHIlZCBpbiBCbG9jayAjJXUiLCBwcmV2Tm9kZS0+
aW5kZXgoKSwgbG9jYWwsIHNvdXJjZUJsb2NrSW5kZXgpOwogICAgIH0KICAgICAKICAgICB2b2lk
IHJlcG9ydFZhbGlkYXRpb25Db250ZXh0KAotICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4LCBC
bG9ja0luZGV4IGJsb2NrSW5kZXgpCisgICAgICAgIE5vZGUqIG5vZGUsIEJsb2NrSW5kZXggYmxv
Y2tJbmRleCkKICAgICB7Ci0gICAgICAgIGRhdGFMb2dGKCJAJXUgaW4gQmxvY2sgIyV1Iiwgbm9k
ZUluZGV4LCBibG9ja0luZGV4KTsKKyAgICAgICAgZGF0YUxvZ0YoIkAldSBpbiBCbG9jayAjJXUi
LCBub2RlLT5pbmRleCgpLCBibG9ja0luZGV4KTsKICAgICB9CiAgICAgCiAgICAgdm9pZCByZXBv
cnRWYWxpZGF0aW9uQ29udGV4dCgKLSAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRleCwgTm9kZUlu
ZGV4IG5vZGVJbmRleDIsIEJsb2NrSW5kZXggYmxvY2tJbmRleCkKKyAgICAgICAgTm9kZSogbm9k
ZSwgTm9kZSogbm9kZTIsIEJsb2NrSW5kZXggYmxvY2tJbmRleCkKICAgICB7Ci0gICAgICAgIGRh
dGFMb2dGKCJAJXUgYW5kIEAldSBpbiBCbG9jayAjJXUiLCBub2RlSW5kZXgsIG5vZGVJbmRleDIs
IGJsb2NrSW5kZXgpOworICAgICAgICBkYXRhTG9nRigiQCV1IGFuZCBAJXUgaW4gQmxvY2sgIyV1
Iiwgbm9kZS0+aW5kZXgoKSwgbm9kZTItPmluZGV4KCksIGJsb2NrSW5kZXgpOwogICAgIH0KICAg
ICAKICAgICB2b2lkIHJlcG9ydFZhbGlkYXRpb25Db250ZXh0KAotICAgICAgICBOb2RlSW5kZXgg
bm9kZUluZGV4LCBCbG9ja0luZGV4IGJsb2NrSW5kZXgsIE5vZGVJbmRleCBleHBlY3RlZE5vZGVJ
bmRleCwgRWRnZSBpbmNvbWluZ0VkZ2UpCisgICAgICAgIE5vZGUqIG5vZGUsIEJsb2NrSW5kZXgg
YmxvY2tJbmRleCwgTm9kZSogZXhwZWN0ZWROb2RlLCBFZGdlIGluY29taW5nRWRnZSkKICAgICB7
Ci0gICAgICAgIGRhdGFMb2dGKCJAJXUgaW4gQmxvY2sgIyV1LCBzZWFyY2hpbmcgZm9yIEAldSBm
cm9tIEAldSIsIG5vZGVJbmRleCwgYmxvY2tJbmRleCwgZXhwZWN0ZWROb2RlSW5kZXgsIGluY29t
aW5nRWRnZS5pbmRleCgpKTsKKyAgICAgICAgZGF0YUxvZ0YoIkAldSBpbiBCbG9jayAjJXUsIHNl
YXJjaGluZyBmb3IgQCV1IGZyb20gQCV1Iiwgbm9kZS0+aW5kZXgoKSwgYmxvY2tJbmRleCwgZXhw
ZWN0ZWROb2RlLT5pbmRleCgpLCBpbmNvbWluZ0VkZ2UuaW5kZXgoKSk7CiAgICAgfQogICAgIAog
ICAgIHZvaWQgZHVtcERhdGEodW5zaWduZWQgdmFsdWUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5jcHAJKHJldmlzaW9uIDE0MDMwNikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJBcmdMaXN0LmgiCiAjaW5jbHVkZSAi
Q29kZUNhY2hlLmgiCiAjaW5jbHVkZSAiQ29tbW9uSWRlbnRpZmllcnMuaCIKKyNpbmNsdWRlICJE
RkdMb25nTGl2ZWRTdGF0ZS5oIgogI2luY2x1ZGUgIkRlYnVnZ2VyQWN0aXZhdGlvbi5oIgogI2lu
Y2x1ZGUgIkZ1bmN0aW9uQ29uc3RydWN0b3IuaCIKICNpbmNsdWRlICJHQ0FjdGl2aXR5Q2FsbGJh
Y2suaCIKQEAgLTI1MSw2ICsyNTIsMTEgQEAgSlNHbG9iYWxEYXRhOjpKU0dsb2JhbERhdGEoR2xv
YmFsRGF0YVR5cAogICAgIAogICAgIGlmIChPcHRpb25zOjplbmFibGVQcm9maWxlcigpKQogICAg
ICAgICBtX3BlckJ5dGVjb2RlUHJvZmlsZXIgPSBhZG9wdFB0cihuZXcgUHJvZmlsZXI6OkRhdGFi
YXNlKCp0aGlzKSk7CisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKyAgICBpZiAoY2FuVXNlSklUKCkp
CisgICAgICAgIG1fZGZnU3RhdGUgPSBhZG9wdFB0cihuZXcgREZHOjpMb25nTGl2ZWRTdGF0ZSgp
KTsKKyNlbmRpZgogfQogCiBKU0dsb2JhbERhdGE6On5KU0dsb2JhbERhdGEoKQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmgJKHJldmlzaW9uIDE0
MDMwNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5oCSh3
b3JraW5nIGNvcHkpCkBAIC05MSw2ICs5MSwxMiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBjbGFz
cyBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTsKICAgICBjbGFzcyBVbmxpbmtlZFByb2dyYW1D
b2RlQmxvY2s7CiAKKyNpZiBFTkFCTEUoREZHX0pJVCkKKyAgICBuYW1lc3BhY2UgREZHIHsKKyAg
ICBjbGFzcyBMb25nTGl2ZWRTdGF0ZTsKKyAgICB9CisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQp
CisKICAgICBzdHJ1Y3QgSGFzaFRhYmxlOwogICAgIHN0cnVjdCBJbnN0cnVjdGlvbjsKIApAQCAt
MTg5LDYgKzE5NSwxMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgLy8gVGhlIGhlYXAgc2hv
dWxkIGJlIGp1c3QgYWZ0ZXIgZXhlY3V0YWJsZUFsbG9jYXRvciBhbmQgYmVmb3JlIG90aGVyIG1l
bWJlcnMgdG8gZW5zdXJlIHRoYXQgaXQncwogICAgICAgICAvLyBkZXN0cnVjdGVkIGFmdGVyIGFs
bCB0aGUgb2JqZWN0cyB0aGF0IHJlZmVyZW5jZSBpdC4KICAgICAgICAgSGVhcCBoZWFwOworICAg
ICAgICAKKyNpZiBFTkFCTEUoREZHX0pJVCkKKyAgICAgICAgT3duUHRyPERGRzo6TG9uZ0xpdmVk
U3RhdGU+IG1fZGZnU3RhdGU7CisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCiAKICAgICAgICAg
R2xvYmFsRGF0YVR5cGUgZ2xvYmFsRGF0YVR5cGU7CiAgICAgICAgIENsaWVudERhdGEqIGNsaWVu
dERhdGE7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>183835</attachid>
            <date>2013-01-21 15:07:12 -0800</date>
            <delta_ts>2013-01-22 15:53:57 -0800</delta_ts>
            <desc>work in progress</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>271309</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmNw
cAkocmV2aXNpb24gMTQwMzA2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0
cmFjdFN0YXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODcsMjEgKzg3LDIxIEBAIHZvaWQgQWJz
dHJhY3RTdGF0ZTo6aW5pdGlhbGl6ZShHcmFwaCYgZ3IKICAgICByb290LT5jZmFIYXNWaXNpdGVk
ID0gZmFsc2U7CiAgICAgcm9vdC0+Y2ZhRm91bmRDb25zdGFudHMgPSBmYWxzZTsKICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IHJvb3QtPnZhbHVlc0F0SGVhZC5udW1iZXJPZkFyZ3VtZW50cygp
OyArK2kpIHsKLSAgICAgICAgTm9kZSYgbm9kZSA9IGdyYXBoW3Jvb3QtPnZhcmlhYmxlc0F0SGVh
ZC5hcmd1bWVudChpKV07Ci0gICAgICAgIEFTU0VSVChub2RlLm9wKCkgPT0gU2V0QXJndW1lbnQp
OwotICAgICAgICBpZiAoIW5vZGUuc2hvdWxkR2VuZXJhdGUoKSkgeworICAgICAgICBOb2RlKiBu
b2RlID0gcm9vdC0+dmFyaWFibGVzQXRIZWFkLmFyZ3VtZW50KGkpOworICAgICAgICBBU1NFUlQo
bm9kZS0+b3AoKSA9PSBTZXRBcmd1bWVudCk7CisgICAgICAgIGlmICghbm9kZS0+c2hvdWxkR2Vu
ZXJhdGUoKSkgewogICAgICAgICAgICAgLy8gVGhlIGFyZ3VtZW50IGlzIGRlYWQuIFdlIGRvbid0
IGRvIGFueSBjaGVja3MgZm9yIHN1Y2ggYXJndW1lbnRzLCBhbmQgc28KICAgICAgICAgICAgIC8v
IGZvciB0aGUgcHVycG9zZSBvZiB0aGUgYW5hbHlzaXMsIHRoZXkgY29udGFpbiBubyB2YWx1ZS4K
ICAgICAgICAgICAgIHJvb3QtPnZhbHVlc0F0SGVhZC5hcmd1bWVudChpKS5jbGVhcigpOwogICAg
ICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIGlmIChub2Rl
LnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5pc0NhcHR1cmVkKCkpIHsKKyAgICAgICAgaWYgKG5vZGUt
PnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5pc0NhcHR1cmVkKCkpIHsKICAgICAgICAgICAgIHJvb3Qt
PnZhbHVlc0F0SGVhZC5hcmd1bWVudChpKS5tYWtlVG9wKCk7CiAgICAgICAgICAgICBjb250aW51
ZTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlv
biA9IG5vZGUudmFyaWFibGVBY2Nlc3NEYXRhKCktPnByZWRpY3Rpb24oKTsKKyAgICAgICAgU3Bl
Y3VsYXRlZFR5cGUgcHJlZGljdGlvbiA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5wcmVk
aWN0aW9uKCk7CiAgICAgICAgIGlmIChpc0ludDMyU3BlY3VsYXRpb24ocHJlZGljdGlvbikpCiAg
ICAgICAgICAgICByb290LT52YWx1ZXNBdEhlYWQuYXJndW1lbnQoaSkuc2V0KFNwZWNJbnQzMik7
CiAgICAgICAgIGVsc2UgaWYgKGlzQm9vbGVhblNwZWN1bGF0aW9uKHByZWRpY3Rpb24pKQpAQCAt
MTE0LDggKzExNCw4IEBAIHZvaWQgQWJzdHJhY3RTdGF0ZTo6aW5pdGlhbGl6ZShHcmFwaCYgZ3IK
ICAgICAgICAgcm9vdC0+dmFsdWVzQXRUYWlsLmFyZ3VtZW50KGkpLmNsZWFyKCk7CiAgICAgfQog
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcm9vdC0+dmFsdWVzQXRIZWFkLm51bWJlck9mTG9j
YWxzKCk7ICsraSkgewotICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4ID0gcm9vdC0+dmFyaWFi
bGVzQXRIZWFkLmxvY2FsKGkpOwotICAgICAgICBpZiAobm9kZUluZGV4ICE9IE5vTm9kZSAmJiBn
cmFwaFtub2RlSW5kZXhdLnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5pc0NhcHR1cmVkKCkpCisgICAg
ICAgIE5vZGUqIG5vZGUgPSByb290LT52YXJpYWJsZXNBdEhlYWQubG9jYWwoaSk7CisgICAgICAg
IGlmIChub2RlICYmIG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5pc0NhcHR1cmVkKCkpCiAg
ICAgICAgICAgICByb290LT52YWx1ZXNBdEhlYWQubG9jYWwoaSkubWFrZVRvcCgpOwogICAgICAg
ICBlbHNlCiAgICAgICAgICAgICByb290LT52YWx1ZXNBdEhlYWQubG9jYWwoaSkuY2xlYXIoKTsK
QEAgLTIxMywxMSArMjEzLDExIEBAIHZvaWQgQWJzdHJhY3RTdGF0ZTo6cmVzZXQoKQogICAgIG1f
YnJhbmNoRGlyZWN0aW9uID0gSW52YWxpZEJyYW5jaERpcmVjdGlvbjsKIH0KIAotQWJzdHJhY3RT
dGF0ZTo6Qm9vbGVhblJlc3VsdCBBYnN0cmFjdFN0YXRlOjpib29sZWFuUmVzdWx0KE5vZGUmIG5v
ZGUsIEFic3RyYWN0VmFsdWUmIHZhbHVlKQorQWJzdHJhY3RTdGF0ZTo6Qm9vbGVhblJlc3VsdCBB
YnN0cmFjdFN0YXRlOjpib29sZWFuUmVzdWx0KE5vZGUqIG5vZGUsIEFic3RyYWN0VmFsdWUmIHZh
bHVlKQogewogICAgIEpTVmFsdWUgY2hpbGRDb25zdCA9IHZhbHVlLnZhbHVlKCk7CiAgICAgaWYg
KGNoaWxkQ29uc3QpIHsKLSAgICAgICAgaWYgKGNoaWxkQ29uc3QudG9Cb29sZWFuKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3RGb3Iobm9kZS5jb2RlT3JpZ2luKS0+Z2xvYmFsRXhlYygpKSkKKyAg
ICAgICAgaWYgKGNoaWxkQ29uc3QudG9Cb29sZWFuKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3RG
b3Iobm9kZS0+Y29kZU9yaWdpbiktPmdsb2JhbEV4ZWMoKSkpCiAgICAgICAgICAgICByZXR1cm4g
RGVmaW5pdGVseVRydWU7CiAgICAgICAgIHJldHVybiBEZWZpbml0ZWx5RmFsc2U7CiAgICAgfQpA
QCAtMjI2LDcgKzIyNiw3IEBAIEFic3RyYWN0U3RhdGU6OkJvb2xlYW5SZXN1bHQgQWJzdHJhY3RT
dGEKICAgICBpZiAoaXNDZWxsU3BlY3VsYXRpb24odmFsdWUubV90eXBlKQogICAgICAgICAmJiB2
YWx1ZS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5oYXNTaW5nbGV0b24oKSkgewogICAgICAgICBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHZhbHVlLm1fY3VycmVudEtub3duU3RydWN0dXJlLnNpbmds
ZXRvbigpOwotICAgICAgICBpZiAoIXN0cnVjdHVyZS0+bWFzcXVlcmFkZXNBc1VuZGVmaW5lZCht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0Rm9yKG5vZGUuY29kZU9yaWdpbikpCisgICAgICAgIGlm
ICghc3RydWN0dXJlLT5tYXNxdWVyYWRlc0FzVW5kZWZpbmVkKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3RGb3Iobm9kZS0+Y29kZU9yaWdpbikpCiAgICAgICAgICAgICAmJiBzdHJ1Y3R1cmUtPnR5
cGVJbmZvKCkudHlwZSgpICE9IFN0cmluZ1R5cGUpCiAgICAgICAgICAgICByZXR1cm4gRGVmaW5p
dGVseVRydWU7CiAgICAgfQpAQCAtMjQxLDMyICsyNDEsMzEgQEAgYm9vbCBBYnN0cmFjdFN0YXRl
OjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgIAogICAgIG1fZGlkQ2xvYmJlciA9IGZhbHNlOwog
ICAgIAotICAgIE5vZGVJbmRleCBub2RlSW5kZXggPSBtX2Jsb2NrLT5hdChpbmRleEluQmxvY2sp
OwotICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW25vZGVJbmRleF07CisgICAgTm9kZSogbm9kZSA9
IG1fYmxvY2stPmF0KGluZGV4SW5CbG9jayk7CiAgICAgICAgIAotICAgIGlmICghbm9kZS5zaG91
bGRHZW5lcmF0ZSgpKQorICAgIGlmICghbm9kZS0+c2hvdWxkR2VuZXJhdGUoKSkKICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgICAgIAotICAgIHN3aXRjaCAobm9kZS5vcCgpKSB7CisgICAgc3dp
dGNoIChub2RlLT5vcCgpKSB7CiAgICAgY2FzZSBKU0NvbnN0YW50OgogICAgIGNhc2UgV2Vha0pT
Q29uc3RhbnQ6CiAgICAgY2FzZSBQaGFudG9tQXJndW1lbnRzOiB7Ci0gICAgICAgIGZvck5vZGUo
bm9kZUluZGV4KS5zZXQobV9ncmFwaC52YWx1ZU9mSlNDb25zdGFudChub2RlSW5kZXgpKTsKLSAg
ICAgICAgbm9kZS5zZXRDYW5FeGl0KGZhbHNlKTsKKyAgICAgICAgZm9yTm9kZShub2RlKS5zZXQo
bV9ncmFwaC52YWx1ZU9mSlNDb25zdGFudChub2RlKSk7CisgICAgICAgIG5vZGUtPnNldENhbkV4
aXQoZmFsc2UpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgSWRl
bnRpdHk6IHsKLSAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpID0gZm9yTm9kZShub2RlLmNoaWxk
MSgpKTsKLSAgICAgICAgbm9kZS5zZXRDYW5FeGl0KGZhbHNlKTsKKyAgICAgICAgZm9yTm9kZShu
b2RlKSA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBub2RlLT5zZXRDYW5FeGl0
KGZhbHNlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAgICAgCiAgICAgY2FzZSBH
ZXRMb2NhbDogewotICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0
YSA9IG5vZGUudmFyaWFibGVBY2Nlc3NEYXRhKCk7CisgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0
YSogdmFyaWFibGVBY2Nlc3NEYXRhID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CiAgICAg
ICAgIGlmICh2YXJpYWJsZUFjY2Vzc0RhdGEtPnByZWRpY3Rpb24oKSA9PSBTcGVjTm9uZSkgewog
ICAgICAgICAgICAgbV9pc1ZhbGlkID0gZmFsc2U7Ci0gICAgICAgICAgICBub2RlLnNldENhbkV4
aXQodHJ1ZSk7CisgICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgYm9vbCBjYW5FeGl0ID0gZmFsc2U7CkBAIC0y
NzcsNTMgKzI3Niw1MyBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5k
CiAgICAgICAgIH0KICAgICAgICAgaWYgKHZhbHVlLnZhbHVlKCkpCiAgICAgICAgICAgICBtX2Zv
dW5kQ29uc3RhbnRzID0gdHJ1ZTsKLSAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpID0gdmFsdWU7
Ci0gICAgICAgIG5vZGUuc2V0Q2FuRXhpdChjYW5FeGl0KTsKKyAgICAgICAgZm9yTm9kZShub2Rl
KSA9IHZhbHVlOworICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGNhbkV4aXQpOwogICAgICAgICBi
cmVhazsKICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgR2V0TG9jYWxVbmxpbmtlZDogewotICAg
ICAgICBBYnN0cmFjdFZhbHVlIHZhbHVlID0gbV92YXJpYWJsZXMub3BlcmFuZChub2RlLnVubGlu
a2VkTG9jYWwoKSk7CisgICAgICAgIEFic3RyYWN0VmFsdWUgdmFsdWUgPSBtX3ZhcmlhYmxlcy5v
cGVyYW5kKG5vZGUtPnVubGlua2VkTG9jYWwoKSk7CiAgICAgICAgIGlmICh2YWx1ZS52YWx1ZSgp
KQogICAgICAgICAgICAgbV9mb3VuZENvbnN0YW50cyA9IHRydWU7Ci0gICAgICAgIGZvck5vZGUo
bm9kZUluZGV4KSA9IHZhbHVlOwotICAgICAgICBub2RlLnNldENhbkV4aXQoZmFsc2UpOworICAg
ICAgICBmb3JOb2RlKG5vZGUpID0gdmFsdWU7CisgICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFs
c2UpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgU2V0TG9jYWw6
IHsKLSAgICAgICAgaWYgKG5vZGUudmFyaWFibGVBY2Nlc3NEYXRhKCktPmlzQ2FwdHVyZWQoKQot
ICAgICAgICAgICAgfHwgbV9ncmFwaC5pc0NyZWF0ZWRUaGlzQXJndW1lbnQobm9kZS5sb2NhbCgp
KSkgewotICAgICAgICAgICAgbV92YXJpYWJsZXMub3BlcmFuZChub2RlLmxvY2FsKCkpID0gZm9y
Tm9kZShub2RlLmNoaWxkMSgpKTsKLSAgICAgICAgICAgIG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7
CisgICAgICAgIGlmIChub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+aXNDYXB0dXJlZCgpCisg
ICAgICAgICAgICB8fCBtX2dyYXBoLmlzQ3JlYXRlZFRoaXNBcmd1bWVudChub2RlLT5sb2NhbCgp
KSkgeworICAgICAgICAgICAgbV92YXJpYWJsZXMub3BlcmFuZChub2RlLT5sb2NhbCgpKSA9IGZv
ck5vZGUobm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxz
ZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgaWYg
KG5vZGUudmFyaWFibGVBY2Nlc3NEYXRhKCktPnNob3VsZFVzZURvdWJsZUZvcm1hdCgpKSB7Cisg
ICAgICAgIGlmIChub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+c2hvdWxkVXNlRG91YmxlRm9y
bWF0KCkpIHsKICAgICAgICAgICAgIHNwZWN1bGF0ZU51bWJlclVuYXJ5KG5vZGUpOwotICAgICAg
ICAgICAgbV92YXJpYWJsZXMub3BlcmFuZChub2RlLmxvY2FsKCkpLnNldChTcGVjRG91YmxlKTsK
KyAgICAgICAgICAgIG1fdmFyaWFibGVzLm9wZXJhbmQobm9kZS0+bG9jYWwoKSkuc2V0KFNwZWNE
b3VibGUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAg
IFNwZWN1bGF0ZWRUeXBlIHByZWRpY3RlZFR5cGUgPSBub2RlLnZhcmlhYmxlQWNjZXNzRGF0YSgp
LT5hcmd1bWVudEF3YXJlUHJlZGljdGlvbigpOworICAgICAgICBTcGVjdWxhdGVkVHlwZSBwcmVk
aWN0ZWRUeXBlID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCktPmFyZ3VtZW50QXdhcmVQcmVk
aWN0aW9uKCk7CiAgICAgICAgIGlmIChpc0ludDMyU3BlY3VsYXRpb24ocHJlZGljdGVkVHlwZSkp
CiAgICAgICAgICAgICBzcGVjdWxhdGVJbnQzMlVuYXJ5KG5vZGUpOwogICAgICAgICBlbHNlIGlm
IChpc0NlbGxTcGVjdWxhdGlvbihwcmVkaWN0ZWRUeXBlKSkgewotICAgICAgICAgICAgbm9kZS5z
ZXRDYW5FeGl0KCFpc0NlbGxTcGVjdWxhdGlvbihmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlw
ZSkpOwotICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY0NlbGwp
OworICAgICAgICAgICAgbm9kZS5zZXRDYW5FeGl0KCFpc0NlbGxTcGVjdWxhdGlvbihmb3JOb2Rl
KG5vZGUtPmNoaWxkMSgpKS5tX3R5cGUpKTsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZS0+Y2hp
bGQxKCkpLmZpbHRlcihTcGVjQ2VsbCk7CiAgICAgICAgIH0gZWxzZSBpZiAoaXNCb29sZWFuU3Bl
Y3VsYXRpb24ocHJlZGljdGVkVHlwZSkpCiAgICAgICAgICAgICBzcGVjdWxhdGVCb29sZWFuVW5h
cnkobm9kZSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIG5vZGUuc2V0Q2FuRXhpdChmYWxz
ZSk7CisgICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgCi0gICAg
ICAgIG1fdmFyaWFibGVzLm9wZXJhbmQobm9kZS5sb2NhbCgpKSA9IGZvck5vZGUobm9kZS5jaGls
ZDEoKSk7CisgICAgICAgIG1fdmFyaWFibGVzLm9wZXJhbmQobm9kZS0+bG9jYWwoKSkgPSBmb3JO
b2RlKG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAgICAg
CiAgICAgY2FzZSBTZXRBcmd1bWVudDoKICAgICAgICAgLy8gQXNzZXJ0IHRoYXQgdGhlIHN0YXRl
IG9mIGFyZ3VtZW50cyBoYXMgYmVlbiBzZXQuCi0gICAgICAgIEFTU0VSVCghbV9ibG9jay0+dmFs
dWVzQXRIZWFkLm9wZXJhbmQobm9kZS5sb2NhbCgpKS5pc0NsZWFyKCkpOwotICAgICAgICBub2Rl
LnNldENhbkV4aXQoZmFsc2UpOworICAgICAgICBBU1NFUlQoIW1fYmxvY2stPnZhbHVlc0F0SGVh
ZC5vcGVyYW5kKG5vZGUtPmxvY2FsKCkpLmlzQ2xlYXIoKSk7CisgICAgICAgIG5vZGUtPnNldENh
bkV4aXQoZmFsc2UpOwogICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgIGNhc2UgQml0
QW5kOgpAQCAtMzMyLDMwICszMzEsMzAgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVu
c2lnbmVkIGluZAogICAgIGNhc2UgQml0UlNoaWZ0OgogICAgIGNhc2UgQml0TFNoaWZ0OgogICAg
IGNhc2UgQml0VVJTaGlmdDogewotICAgICAgICBKU1ZhbHVlIGxlZnQgPSBmb3JOb2RlKG5vZGUu
Y2hpbGQxKCkpLnZhbHVlKCk7Ci0gICAgICAgIEpTVmFsdWUgcmlnaHQgPSBmb3JOb2RlKG5vZGUu
Y2hpbGQyKCkpLnZhbHVlKCk7CisgICAgICAgIEpTVmFsdWUgbGVmdCA9IGZvck5vZGUobm9kZS0+
Y2hpbGQxKCkpLnZhbHVlKCk7CisgICAgICAgIEpTVmFsdWUgcmlnaHQgPSBmb3JOb2RlKG5vZGUt
PmNoaWxkMigpKS52YWx1ZSgpOwogICAgICAgICBpZiAobGVmdCAmJiByaWdodCAmJiBsZWZ0Lmlz
SW50MzIoKSAmJiByaWdodC5pc0ludDMyKCkpIHsKICAgICAgICAgICAgIGludDMyX3QgYSA9IGxl
ZnQuYXNJbnQzMigpOwogICAgICAgICAgICAgaW50MzJfdCBiID0gcmlnaHQuYXNJbnQzMigpOwog
ICAgICAgICAgICAgYm9vbCBjb25zdGFudFdhc1NldDsKICAgICAgICAgICAgIHN3aXRjaCAobm9k
ZS5vcCgpKSB7CiAgICAgICAgICAgICBjYXNlIEJpdEFuZDoKLSAgICAgICAgICAgICAgICBjb25z
dGFudFdhc1NldCA9IHRyeVNldENvbnN0YW50KG5vZGVJbmRleCwgSlNWYWx1ZShhICYgYikpOwor
ICAgICAgICAgICAgICAgIGNvbnN0YW50V2FzU2V0ID0gdHJ5U2V0Q29uc3RhbnQobm9kZSwgSlNW
YWx1ZShhICYgYikpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBC
aXRPcjoKLSAgICAgICAgICAgICAgICBjb25zdGFudFdhc1NldCA9IHRyeVNldENvbnN0YW50KG5v
ZGVJbmRleCwgSlNWYWx1ZShhIHwgYikpOworICAgICAgICAgICAgICAgIGNvbnN0YW50V2FzU2V0
ID0gdHJ5U2V0Q29uc3RhbnQobm9kZSwgSlNWYWx1ZShhIHwgYikpOwogICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgY2FzZSBCaXRYb3I6Ci0gICAgICAgICAgICAgICAgY29uc3Rh
bnRXYXNTZXQgPSB0cnlTZXRDb25zdGFudChub2RlSW5kZXgsIEpTVmFsdWUoYSBeIGIpKTsKKyAg
ICAgICAgICAgICAgICBjb25zdGFudFdhc1NldCA9IHRyeVNldENvbnN0YW50KG5vZGUsIEpTVmFs
dWUoYSBeIGIpKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgQml0
UlNoaWZ0OgotICAgICAgICAgICAgICAgIGNvbnN0YW50V2FzU2V0ID0gdHJ5U2V0Q29uc3RhbnQo
bm9kZUluZGV4LCBKU1ZhbHVlKGEgPj4gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGIpKSk7CisgICAg
ICAgICAgICAgICAgY29uc3RhbnRXYXNTZXQgPSB0cnlTZXRDb25zdGFudChub2RlLCBKU1ZhbHVl
KGEgPj4gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGIpKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICBjYXNlIEJpdExTaGlmdDoKLSAgICAgICAgICAgICAgICBjb25zdGFudFdh
c1NldCA9IHRyeVNldENvbnN0YW50KG5vZGVJbmRleCwgSlNWYWx1ZShhIDw8IHN0YXRpY19jYXN0
PHVpbnQzMl90PihiKSkpOworICAgICAgICAgICAgICAgIGNvbnN0YW50V2FzU2V0ID0gdHJ5U2V0
Q29uc3RhbnQobm9kZSwgSlNWYWx1ZShhIDw8IHN0YXRpY19jYXN0PHVpbnQzMl90PihiKSkpOwog
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBCaXRVUlNoaWZ0OgotICAg
ICAgICAgICAgICAgIGNvbnN0YW50V2FzU2V0ID0gdHJ5U2V0Q29uc3RhbnQobm9kZUluZGV4LCBK
U1ZhbHVlKHN0YXRpY19jYXN0PHVpbnQzMl90PihhKSA+PiBzdGF0aWNfY2FzdDx1aW50MzJfdD4o
YikpKTsKKyAgICAgICAgICAgICAgICBjb25zdGFudFdhc1NldCA9IHRyeVNldENvbnN0YW50KG5v
ZGUsIEpTVmFsdWUoc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGEpID4+IHN0YXRpY19jYXN0PHVpbnQz
Ml90PihiKSkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgZGVmYXVsdDoK
ICAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTM2MywxOTkgKzM2Miwx
OTkgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICAg
ICAgfQogICAgICAgICAgICAgaWYgKGNvbnN0YW50V2FzU2V0KSB7CiAgICAgICAgICAgICAgICAg
bV9mb3VuZENvbnN0YW50cyA9IHRydWU7Ci0gICAgICAgICAgICAgICAgbm9kZS5zZXRDYW5FeGl0
KGZhbHNlKTsKKyAgICAgICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBzcGVj
dWxhdGVJbnQzMkJpbmFyeShub2RlKTsKLSAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChT
cGVjSW50MzIpOworICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjSW50MzIpOwogICAgICAg
ICBicmVhazsKICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgVUludDMyVG9OdW1iZXI6IHsKLSAg
ICAgICAgSlNWYWx1ZSBjaGlsZCA9IGZvck5vZGUobm9kZS5jaGlsZDEoKSkudmFsdWUoKTsKKyAg
ICAgICAgSlNWYWx1ZSBjaGlsZCA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLnZhbHVlKCk7CiAg
ICAgICAgIGlmIChjaGlsZCAmJiBjaGlsZC5pc051bWJlcigpKSB7CiAgICAgICAgICAgICBBU1NF
UlQoY2hpbGQuaXNJbnQzMigpKTsKLSAgICAgICAgICAgIGlmICh0cnlTZXRDb25zdGFudChub2Rl
SW5kZXgsIEpTVmFsdWUoY2hpbGQuYXNVSW50MzIoKSkpKSB7CisgICAgICAgICAgICBpZiAodHJ5
U2V0Q29uc3RhbnQobm9kZSwgSlNWYWx1ZShjaGlsZC5hc1VJbnQzMigpKSkpIHsKICAgICAgICAg
ICAgICAgICBtX2ZvdW5kQ29uc3RhbnRzID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBub2RlLnNl
dENhbkV4aXQoZmFsc2UpOworICAgICAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2Up
OwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAg
ICAgIGlmICghbm9kZS5jYW5TcGVjdWxhdGVJbnRlZ2VyKCkpIHsKLSAgICAgICAgICAgIGZvck5v
ZGUobm9kZUluZGV4KS5zZXQoU3BlY0RvdWJsZSk7Ci0gICAgICAgICAgICBub2RlLnNldENhbkV4
aXQoZmFsc2UpOworICAgICAgICBpZiAoIW5vZGUtPmNhblNwZWN1bGF0ZUludGVnZXIoKSkgewor
ICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0RvdWJsZSk7CisgICAgICAgICAgICBu
b2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGZv
ck5vZGUobm9kZUluZGV4KS5zZXQoU3BlY0ludDMyKTsKLSAgICAgICAgICAgIG5vZGUuc2V0Q2Fu
RXhpdCh0cnVlKTsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNJbnQzMik7Cisg
ICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOwogICAgICAgICB9CiAgICAgICAgIGJy
ZWFrOwogICAgIH0KICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAKICAgICBjYXNlIERvdWJs
ZUFzSW50MzI6IHsKLSAgICAgICAgSlNWYWx1ZSBjaGlsZCA9IGZvck5vZGUobm9kZS5jaGlsZDEo
KSkudmFsdWUoKTsKKyAgICAgICAgSlNWYWx1ZSBjaGlsZCA9IGZvck5vZGUobm9kZS0+Y2hpbGQx
KCkpLnZhbHVlKCk7CiAgICAgICAgIGlmIChjaGlsZCAmJiBjaGlsZC5pc051bWJlcigpKSB7CiAg
ICAgICAgICAgICBkb3VibGUgYXNEb3VibGUgPSBjaGlsZC5hc051bWJlcigpOwogICAgICAgICAg
ICAgaW50MzJfdCBhc0ludCA9IEpTQzo6dG9JbnQzMihhc0RvdWJsZSk7CiAgICAgICAgICAgICBp
ZiAoYml0d2lzZV9jYXN0PGludDY0X3Q+KHN0YXRpY19jYXN0PGRvdWJsZT4oYXNJbnQpKSA9PSBi
aXR3aXNlX2Nhc3Q8aW50NjRfdD4oYXNEb3VibGUpCi0gICAgICAgICAgICAgICAgJiYgdHJ5U2V0
Q29uc3RhbnQobm9kZUluZGV4LCBKU1ZhbHVlKGFzSW50KSkpIHsKKyAgICAgICAgICAgICAgICAm
JiB0cnlTZXRDb25zdGFudChub2RlLCBKU1ZhbHVlKGFzSW50KSkpIHsKICAgICAgICAgICAgICAg
ICBtX2ZvdW5kQ29uc3RhbnRzID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgIH0KICAgICAgICAgfQotICAgICAgICBub2RlLnNldENhbkV4aXQodHJ1ZSk7Ci0gICAg
ICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNOdW1iZXIpOwotICAgICAgICBm
b3JOb2RlKG5vZGVJbmRleCkuc2V0KFNwZWNJbnQzMik7CisgICAgICAgIG5vZGUtPnNldENhbkV4
aXQodHJ1ZSk7CisgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRlcihTcGVjTnVt
YmVyKTsKKyAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0ludDMyKTsKICAgICAgICAgYnJl
YWs7CiAgICAgfQogICAgICAgICAgICAgCiAgICAgY2FzZSBWYWx1ZVRvSW50MzI6IHsKLSAgICAg
ICAgSlNWYWx1ZSBjaGlsZCA9IGZvck5vZGUobm9kZS5jaGlsZDEoKSkudmFsdWUoKTsKKyAgICAg
ICAgSlNWYWx1ZSBjaGlsZCA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLnZhbHVlKCk7CiAgICAg
ICAgIGlmIChjaGlsZCAmJiBjaGlsZC5pc051bWJlcigpKSB7CiAgICAgICAgICAgICBib29sIGNv
bnN0YW50V2FzU2V0OwogICAgICAgICAgICAgaWYgKGNoaWxkLmlzSW50MzIoKSkKLSAgICAgICAg
ICAgICAgICBjb25zdGFudFdhc1NldCA9IHRyeVNldENvbnN0YW50KG5vZGVJbmRleCwgY2hpbGQp
OworICAgICAgICAgICAgICAgIGNvbnN0YW50V2FzU2V0ID0gdHJ5U2V0Q29uc3RhbnQobm9kZSwg
Y2hpbGQpOwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGNvbnN0YW50V2FzU2V0
ID0gdHJ5U2V0Q29uc3RhbnQobm9kZUluZGV4LCBKU1ZhbHVlKEpTQzo6dG9JbnQzMihjaGlsZC5h
c0RvdWJsZSgpKSkpOworICAgICAgICAgICAgICAgIGNvbnN0YW50V2FzU2V0ID0gdHJ5U2V0Q29u
c3RhbnQobm9kZSwgSlNWYWx1ZShKU0M6OnRvSW50MzIoY2hpbGQuYXNEb3VibGUoKSkpKTsKICAg
ICAgICAgICAgIGlmIChjb25zdGFudFdhc1NldCkgewogICAgICAgICAgICAgICAgIG1fZm91bmRD
b25zdGFudHMgPSB0cnVlOwotICAgICAgICAgICAgICAgIG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7
CisgICAgICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgaWYgKG1fZ3JhcGhb
bm9kZS5jaGlsZDEoKV0uc2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKQorICAgICAgICBpZiAobV9n
cmFwaFtub2RlLT5jaGlsZDEoKV0uc2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKQogICAgICAgICAg
ICAgc3BlY3VsYXRlSW50MzJVbmFyeShub2RlKTsKLSAgICAgICAgZWxzZSBpZiAobV9ncmFwaFtu
b2RlLmNoaWxkMSgpXS5zaG91bGRTcGVjdWxhdGVOdW1iZXIoKSkKKyAgICAgICAgZWxzZSBpZiAo
bV9ncmFwaFtub2RlLT5jaGlsZDEoKV0uc2hvdWxkU3BlY3VsYXRlTnVtYmVyKCkpCiAgICAgICAg
ICAgICBzcGVjdWxhdGVOdW1iZXJVbmFyeShub2RlKTsKLSAgICAgICAgZWxzZSBpZiAobV9ncmFw
aFtub2RlLmNoaWxkMSgpXS5zaG91bGRTcGVjdWxhdGVCb29sZWFuKCkpCisgICAgICAgIGVsc2Ug
aWYgKG1fZ3JhcGhbbm9kZS0+Y2hpbGQxKCldLnNob3VsZFNwZWN1bGF0ZUJvb2xlYW4oKSkKICAg
ICAgICAgICAgIHNwZWN1bGF0ZUJvb2xlYW5VbmFyeShub2RlKTsKICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgbm9kZS5zZXRDYW5FeGl0KGZhbHNlKTsKKyAgICAgICAgICAgIG5vZGUtPnNldENh
bkV4aXQoZmFsc2UpOwogICAgICAgICAKLSAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChT
cGVjSW50MzIpOworICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjSW50MzIpOwogICAgICAg
ICBicmVhazsKICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgSW50MzJUb0RvdWJsZTogewotICAg
ICAgICBKU1ZhbHVlIGNoaWxkID0gZm9yTm9kZShub2RlLmNoaWxkMSgpKS52YWx1ZSgpOworICAg
ICAgICBKU1ZhbHVlIGNoaWxkID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSkudmFsdWUoKTsKICAg
ICAgICAgaWYgKGNoaWxkICYmIGNoaWxkLmlzTnVtYmVyKCkKLSAgICAgICAgICAgICYmIHRyeVNl
dENvbnN0YW50KG5vZGVJbmRleCwgSlNWYWx1ZShKU1ZhbHVlOjpFbmNvZGVBc0RvdWJsZSwgY2hp
bGQuYXNOdW1iZXIoKSkpKSB7CisgICAgICAgICAgICAmJiB0cnlTZXRDb25zdGFudChub2RlLCBK
U1ZhbHVlKEpTVmFsdWU6OkVuY29kZUFzRG91YmxlLCBjaGlsZC5hc051bWJlcigpKSkpIHsKICAg
ICAgICAgICAgIG1fZm91bmRDb25zdGFudHMgPSB0cnVlOwotICAgICAgICAgICAgbm9kZS5zZXRD
YW5FeGl0KGZhbHNlKTsKKyAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgc3BlY3VsYXRlTnVtYmVyVW5hcnko
bm9kZSk7Ci0gICAgICAgIGlmIChpc0ludDMyU3BlY3VsYXRpb24oZm9yTm9kZShub2RlLmNoaWxk
MSgpKS5tX3R5cGUpKQotICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChTcGVjRG91
YmxlUmVhbCk7CisgICAgICAgIGlmIChpc0ludDMyU3BlY3VsYXRpb24oZm9yTm9kZShub2RlLT5j
aGlsZDEoKSkubV90eXBlKSkKKyAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNEb3Vi
bGVSZWFsKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNl
dChTcGVjRG91YmxlKTsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNEb3VibGUp
OwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgQ2hlY2tOdW1iZXI6
Ci0gICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNOdW1iZXIpOworICAg
ICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5maWx0ZXIoU3BlY051bWJlcik7CiAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgCiAgICAgY2FzZSBWYWx1ZUFkZDoKICAgICBjYXNlIEFyaXRo
QWRkOiB7Ci0gICAgICAgIEpTVmFsdWUgbGVmdCA9IGZvck5vZGUobm9kZS5jaGlsZDEoKSkudmFs
dWUoKTsKLSAgICAgICAgSlNWYWx1ZSByaWdodCA9IGZvck5vZGUobm9kZS5jaGlsZDIoKSkudmFs
dWUoKTsKKyAgICAgICAgSlNWYWx1ZSBsZWZ0ID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSkudmFs
dWUoKTsKKyAgICAgICAgSlNWYWx1ZSByaWdodCA9IGZvck5vZGUobm9kZS0+Y2hpbGQyKCkpLnZh
bHVlKCk7CiAgICAgICAgIGlmIChsZWZ0ICYmIHJpZ2h0ICYmIGxlZnQuaXNOdW1iZXIoKSAmJiBy
aWdodC5pc051bWJlcigpCi0gICAgICAgICAgICAmJiB0cnlTZXRDb25zdGFudChub2RlSW5kZXgs
IEpTVmFsdWUobGVmdC5hc051bWJlcigpICsgcmlnaHQuYXNOdW1iZXIoKSkpKSB7CisgICAgICAg
ICAgICAmJiB0cnlTZXRDb25zdGFudChub2RlLCBKU1ZhbHVlKGxlZnQuYXNOdW1iZXIoKSArIHJp
Z2h0LmFzTnVtYmVyKCkpKSkgewogICAgICAgICAgICAgbV9mb3VuZENvbnN0YW50cyA9IHRydWU7
CiAgICAgICAgICAgICBub2RlLnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIH0KICAgICAgICAgaWYgKG1fZ3JhcGguYWRkU2hvdWxkU3BlY3VsYXRlSW50ZWdl
cihub2RlKSkgewogICAgICAgICAgICAgc3BlY3VsYXRlSW50MzJCaW5hcnkoCi0gICAgICAgICAg
ICAgICAgbm9kZSwgIW5vZGVDYW5UcnVuY2F0ZUludGVnZXIobm9kZS5hcml0aE5vZGVGbGFncygp
KSk7Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFNwZWNJbnQzMik7CisgICAg
ICAgICAgICAgICAgbm9kZSwgIW5vZGVDYW5UcnVuY2F0ZUludGVnZXIobm9kZS0+YXJpdGhOb2Rl
RmxhZ3MoKSkpOworICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0ludDMyKTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIGlmIChOb2RlOjpzaG91bGRTcGVj
dWxhdGVOdW1iZXJFeHBlY3RpbmdEZWZpbmVkKG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0sIG1fZ3Jh
cGhbbm9kZS5jaGlsZDIoKV0pKSB7CisgICAgICAgIGlmIChOb2RlOjpzaG91bGRTcGVjdWxhdGVO
dW1iZXJFeHBlY3RpbmdEZWZpbmVkKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgbm9kZS0+Y2hpbGQy
KCkubm9kZSgpKSkgewogICAgICAgICAgICAgc3BlY3VsYXRlTnVtYmVyQmluYXJ5KG5vZGUpOwot
ICAgICAgICAgICAgaWYgKGlzUmVhbE51bWJlclNwZWN1bGF0aW9uKGZvck5vZGUobm9kZS5jaGls
ZDEoKSkubV90eXBlKQotICAgICAgICAgICAgICAgICYmIGlzUmVhbE51bWJlclNwZWN1bGF0aW9u
KGZvck5vZGUobm9kZS5jaGlsZDIoKSkubV90eXBlKSkKLSAgICAgICAgICAgICAgICBmb3JOb2Rl
KG5vZGVJbmRleCkuc2V0KFNwZWNEb3VibGVSZWFsKTsKKyAgICAgICAgICAgIGlmIChpc1JlYWxO
dW1iZXJTcGVjdWxhdGlvbihmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX3R5cGUpCisgICAgICAg
ICAgICAgICAgJiYgaXNSZWFsTnVtYmVyU3BlY3VsYXRpb24oZm9yTm9kZShub2RlLT5jaGlsZDIo
KSkubV90eXBlKSkKKyAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjRG91Ymxl
UmVhbCk7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZm9yTm9kZShub2RlSW5k
ZXgpLnNldChTcGVjRG91YmxlKTsKKyAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChT
cGVjRG91YmxlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIGlmIChu
b2RlLm9wKCkgPT0gVmFsdWVBZGQpIHsKLSAgICAgICAgICAgIGNsb2JiZXJXb3JsZChub2RlLmNv
ZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCku
c2V0KFNwZWNTdHJpbmcgfCBTcGVjSW50MzIgfCBTcGVjTnVtYmVyKTsKLSAgICAgICAgICAgIG5v
ZGUuc2V0Q2FuRXhpdChmYWxzZSk7CisgICAgICAgIGlmIChub2RlLT5vcCgpID09IFZhbHVlQWRk
KSB7CisgICAgICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+Y29kZU9yaWdpbiwgaW5kZXhJbkJs
b2NrKTsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNTdHJpbmcgfCBTcGVjSW50
MzIgfCBTcGVjTnVtYmVyKTsKKyAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgLy8gV2UgZG9uJ3QgaGFuZGxl
IHRoaXMgeWV0LiA6LSgKICAgICAgICAgbV9pc1ZhbGlkID0gZmFsc2U7Ci0gICAgICAgIG5vZGUu
c2V0Q2FuRXhpdCh0cnVlKTsKKyAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKICAgICAg
ICAgYnJlYWs7CiAgICAgfQogICAgICAgICAgICAgCiAgICAgY2FzZSBBcml0aFN1YjogewotICAg
ICAgICBKU1ZhbHVlIGxlZnQgPSBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLnZhbHVlKCk7Ci0gICAg
ICAgIEpTVmFsdWUgcmlnaHQgPSBmb3JOb2RlKG5vZGUuY2hpbGQyKCkpLnZhbHVlKCk7CisgICAg
ICAgIEpTVmFsdWUgbGVmdCA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLnZhbHVlKCk7CisgICAg
ICAgIEpTVmFsdWUgcmlnaHQgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMigpKS52YWx1ZSgpOwogICAg
ICAgICBpZiAobGVmdCAmJiByaWdodCAmJiBsZWZ0LmlzTnVtYmVyKCkgJiYgcmlnaHQuaXNOdW1i
ZXIoKQotICAgICAgICAgICAgJiYgdHJ5U2V0Q29uc3RhbnQobm9kZUluZGV4LCBKU1ZhbHVlKGxl
ZnQuYXNOdW1iZXIoKSAtIHJpZ2h0LmFzTnVtYmVyKCkpKSkgeworICAgICAgICAgICAgJiYgdHJ5
U2V0Q29uc3RhbnQobm9kZSwgSlNWYWx1ZShsZWZ0LmFzTnVtYmVyKCkgLSByaWdodC5hc051bWJl
cigpKSkpIHsKICAgICAgICAgICAgIG1fZm91bmRDb25zdGFudHMgPSB0cnVlOwotICAgICAgICAg
ICAgbm9kZS5zZXRDYW5FeGl0KGZhbHNlKTsKKyAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQo
ZmFsc2UpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgaWYgKG1fZ3Jh
cGguYWRkU2hvdWxkU3BlY3VsYXRlSW50ZWdlcihub2RlKSkgewogICAgICAgICAgICAgc3BlY3Vs
YXRlSW50MzJCaW5hcnkoCi0gICAgICAgICAgICAgICAgbm9kZSwgIW5vZGVDYW5UcnVuY2F0ZUlu
dGVnZXIobm9kZS5hcml0aE5vZGVGbGFncygpKSk7Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGVJ
bmRleCkuc2V0KFNwZWNJbnQzMik7CisgICAgICAgICAgICAgICAgbm9kZSwgIW5vZGVDYW5UcnVu
Y2F0ZUludGVnZXIobm9kZS0+YXJpdGhOb2RlRmxhZ3MoKSkpOworICAgICAgICAgICAgZm9yTm9k
ZShub2RlKS5zZXQoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAg
ICAgICAgIHNwZWN1bGF0ZU51bWJlckJpbmFyeShub2RlKTsKLSAgICAgICAgZm9yTm9kZShub2Rl
SW5kZXgpLnNldChTcGVjRG91YmxlKTsKKyAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0Rv
dWJsZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBBcml0aE5l
Z2F0ZTogewotICAgICAgICBKU1ZhbHVlIGNoaWxkID0gZm9yTm9kZShub2RlLmNoaWxkMSgpKS52
YWx1ZSgpOworICAgICAgICBKU1ZhbHVlIGNoaWxkID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSku
dmFsdWUoKTsKICAgICAgICAgaWYgKGNoaWxkICYmIGNoaWxkLmlzTnVtYmVyKCkKLSAgICAgICAg
ICAgICYmIHRyeVNldENvbnN0YW50KG5vZGVJbmRleCwgSlNWYWx1ZSgtY2hpbGQuYXNOdW1iZXIo
KSkpKSB7CisgICAgICAgICAgICAmJiB0cnlTZXRDb25zdGFudChub2RlLCBKU1ZhbHVlKC1jaGls
ZC5hc051bWJlcigpKSkpIHsKICAgICAgICAgICAgIG1fZm91bmRDb25zdGFudHMgPSB0cnVlOwot
ICAgICAgICAgICAgbm9kZS5zZXRDYW5FeGl0KGZhbHNlKTsKKyAgICAgICAgICAgIG5vZGUtPnNl
dENhbkV4aXQoZmFsc2UpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAg
aWYgKG1fZ3JhcGgubmVnYXRlU2hvdWxkU3BlY3VsYXRlSW50ZWdlcihub2RlKSkgewogICAgICAg
ICAgICAgc3BlY3VsYXRlSW50MzJVbmFyeSgKLSAgICAgICAgICAgICAgICBub2RlLCAhbm9kZUNh
blRydW5jYXRlSW50ZWdlcihub2RlLmFyaXRoTm9kZUZsYWdzKCkpKTsKLSAgICAgICAgICAgIGZv
ck5vZGUobm9kZUluZGV4KS5zZXQoU3BlY0ludDMyKTsKKyAgICAgICAgICAgICAgICBub2RlLCAh
bm9kZUNhblRydW5jYXRlSW50ZWdlcihub2RlLT5hcml0aE5vZGVGbGFncygpKSk7CisgICAgICAg
ICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjSW50MzIpOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIH0KICAgICAgICAgc3BlY3VsYXRlTnVtYmVyVW5hcnkobm9kZSk7Ci0gICAgICAgIGZv
ck5vZGUobm9kZUluZGV4KS5zZXQoU3BlY0RvdWJsZSk7CisgICAgICAgIGZvck5vZGUobm9kZSku
c2V0KFNwZWNEb3VibGUpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIAogICAgIGNh
c2UgQXJpdGhNdWw6IHsKLSAgICAgICAgSlNWYWx1ZSBsZWZ0ID0gZm9yTm9kZShub2RlLmNoaWxk
MSgpKS52YWx1ZSgpOwotICAgICAgICBKU1ZhbHVlIHJpZ2h0ID0gZm9yTm9kZShub2RlLmNoaWxk
MigpKS52YWx1ZSgpOworICAgICAgICBKU1ZhbHVlIGxlZnQgPSBmb3JOb2RlKG5vZGUtPmNoaWxk
MSgpKS52YWx1ZSgpOworICAgICAgICBKU1ZhbHVlIHJpZ2h0ID0gZm9yTm9kZShub2RlLT5jaGls
ZDIoKSkudmFsdWUoKTsKICAgICAgICAgaWYgKGxlZnQgJiYgcmlnaHQgJiYgbGVmdC5pc051bWJl
cigpICYmIHJpZ2h0LmlzTnVtYmVyKCkKLSAgICAgICAgICAgICYmIHRyeVNldENvbnN0YW50KG5v
ZGVJbmRleCwgSlNWYWx1ZShsZWZ0LmFzTnVtYmVyKCkgKiByaWdodC5hc051bWJlcigpKSkpIHsK
KyAgICAgICAgICAgICYmIHRyeVNldENvbnN0YW50KG5vZGUsIEpTVmFsdWUobGVmdC5hc051bWJl
cigpICogcmlnaHQuYXNOdW1iZXIoKSkpKSB7CiAgICAgICAgICAgICBtX2ZvdW5kQ29uc3RhbnRz
ID0gdHJ1ZTsKLSAgICAgICAgICAgIG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7CisgICAgICAgICAg
ICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9
CiAgICAgICAgIGlmIChtX2dyYXBoLm11bFNob3VsZFNwZWN1bGF0ZUludGVnZXIobm9kZSkpIHsK
ICAgICAgICAgICAgIHNwZWN1bGF0ZUludDMyQmluYXJ5KAogICAgICAgICAgICAgICAgIG5vZGUs
Ci0gICAgICAgICAgICAgICAgIW5vZGVDYW5UcnVuY2F0ZUludGVnZXIobm9kZS5hcml0aE5vZGVG
bGFncygpKQotICAgICAgICAgICAgICAgIHx8ICFub2RlQ2FuSWdub3JlTmVnYXRpdmVaZXJvKG5v
ZGUuYXJpdGhOb2RlRmxhZ3MoKSkpOwotICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNl
dChTcGVjSW50MzIpOworICAgICAgICAgICAgICAgICFub2RlQ2FuVHJ1bmNhdGVJbnRlZ2VyKG5v
ZGUtPmFyaXRoTm9kZUZsYWdzKCkpCisgICAgICAgICAgICAgICAgfHwgIW5vZGVDYW5JZ25vcmVO
ZWdhdGl2ZVplcm8obm9kZS0+YXJpdGhOb2RlRmxhZ3MoKSkpOworICAgICAgICAgICAgZm9yTm9k
ZShub2RlKS5zZXQoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAg
ICAgICAgIHNwZWN1bGF0ZU51bWJlckJpbmFyeShub2RlKTsKLSAgICAgICAgaWYgKGlzUmVhbE51
bWJlclNwZWN1bGF0aW9uKGZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKQotICAgICAgICAg
ICAgfHwgaXNSZWFsTnVtYmVyU3BlY3VsYXRpb24oZm9yTm9kZShub2RlLmNoaWxkMigpKS5tX3R5
cGUpKQotICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChTcGVjRG91YmxlUmVhbCk7
CisgICAgICAgIGlmIChpc1JlYWxOdW1iZXJTcGVjdWxhdGlvbihmb3JOb2RlKG5vZGUtPmNoaWxk
MSgpKS5tX3R5cGUpCisgICAgICAgICAgICB8fCBpc1JlYWxOdW1iZXJTcGVjdWxhdGlvbihmb3JO
b2RlKG5vZGUtPmNoaWxkMigpKS5tX3R5cGUpKQorICAgICAgICAgICAgZm9yTm9kZShub2RlKS5z
ZXQoU3BlY0RvdWJsZVJlYWwpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBmb3JOb2RlKG5v
ZGVJbmRleCkuc2V0KFNwZWNEb3VibGUpOworICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQo
U3BlY0RvdWJsZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCkBAIC01NjMsMjQg
KzU2MiwyNCBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAg
Y2FzZSBBcml0aE1pbjoKICAgICBjYXNlIEFyaXRoTWF4OgogICAgIGNhc2UgQXJpdGhNb2Q6IHsK
LSAgICAgICAgSlNWYWx1ZSBsZWZ0ID0gZm9yTm9kZShub2RlLmNoaWxkMSgpKS52YWx1ZSgpOwot
ICAgICAgICBKU1ZhbHVlIHJpZ2h0ID0gZm9yTm9kZShub2RlLmNoaWxkMigpKS52YWx1ZSgpOwor
ICAgICAgICBKU1ZhbHVlIGxlZnQgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS52YWx1ZSgpOwor
ICAgICAgICBKU1ZhbHVlIHJpZ2h0ID0gZm9yTm9kZShub2RlLT5jaGlsZDIoKSkudmFsdWUoKTsK
ICAgICAgICAgaWYgKGxlZnQgJiYgcmlnaHQgJiYgbGVmdC5pc051bWJlcigpICYmIHJpZ2h0Lmlz
TnVtYmVyKCkpIHsKICAgICAgICAgICAgIGRvdWJsZSBhID0gbGVmdC5hc051bWJlcigpOwogICAg
ICAgICAgICAgZG91YmxlIGIgPSByaWdodC5hc051bWJlcigpOwogICAgICAgICAgICAgYm9vbCBj
b25zdGFudFdhc1NldDsKICAgICAgICAgICAgIHN3aXRjaCAobm9kZS5vcCgpKSB7CiAgICAgICAg
ICAgICBjYXNlIEFyaXRoRGl2OgotICAgICAgICAgICAgICAgIGNvbnN0YW50V2FzU2V0ID0gdHJ5
U2V0Q29uc3RhbnQobm9kZUluZGV4LCBKU1ZhbHVlKGEgLyBiKSk7CisgICAgICAgICAgICAgICAg
Y29uc3RhbnRXYXNTZXQgPSB0cnlTZXRDb25zdGFudChub2RlLCBKU1ZhbHVlKGEgLyBiKSk7CiAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIEFyaXRoTWluOgotICAgICAg
ICAgICAgICAgIGNvbnN0YW50V2FzU2V0ID0gdHJ5U2V0Q29uc3RhbnQobm9kZUluZGV4LCBKU1Zh
bHVlKGEgPCBiID8gYSA6IChiIDw9IGEgPyBiIDogYSArIGIpKSk7CisgICAgICAgICAgICAgICAg
Y29uc3RhbnRXYXNTZXQgPSB0cnlTZXRDb25zdGFudChub2RlLCBKU1ZhbHVlKGEgPCBiID8gYSA6
IChiIDw9IGEgPyBiIDogYSArIGIpKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICBjYXNlIEFyaXRoTWF4OgotICAgICAgICAgICAgICAgIGNvbnN0YW50V2FzU2V0ID0gdHJ5
U2V0Q29uc3RhbnQobm9kZUluZGV4LCBKU1ZhbHVlKGEgPiBiID8gYSA6IChiID49IGEgPyBiIDog
YSArIGIpKSk7CisgICAgICAgICAgICAgICAgY29uc3RhbnRXYXNTZXQgPSB0cnlTZXRDb25zdGFu
dChub2RlLCBKU1ZhbHVlKGEgPiBiID8gYSA6IChiID49IGEgPyBiIDogYSArIGIpKSk7CiAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIEFyaXRoTW9kOgotICAgICAgICAg
ICAgICAgIGNvbnN0YW50V2FzU2V0ID0gdHJ5U2V0Q29uc3RhbnQobm9kZUluZGV4LCBKU1ZhbHVl
KGZtb2QoYSwgYikpKTsKKyAgICAgICAgICAgICAgICBjb25zdGFudFdhc1NldCA9IHRyeVNldENv
bnN0YW50KG5vZGUsIEpTVmFsdWUoZm1vZChhLCBiKSkpOwogICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKQEAgLTU4OSw4NCArNTg4LDg0IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1
bnNpZ25lZCBpbmQKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChjb25zdGFudFdhc1Nl
dCkgewogICAgICAgICAgICAgICAgIG1fZm91bmRDb25zdGFudHMgPSB0cnVlOwotICAgICAgICAg
ICAgICAgIG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7CisgICAgICAgICAgICAgICAgbm9kZS0+c2V0
Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAg
ICAgICAgIH0KICAgICAgICAgaWYgKE5vZGU6OnNob3VsZFNwZWN1bGF0ZUludGVnZXJGb3JBcml0
aG1ldGljKAotICAgICAgICAgICAgICAgIG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0sIG1fZ3JhcGhb
bm9kZS5jaGlsZDIoKV0pCi0gICAgICAgICAgICAmJiBub2RlLmNhblNwZWN1bGF0ZUludGVnZXIo
KSkgeworICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgbm9kZS0+Y2hpbGQy
KCkubm9kZSgpKQorICAgICAgICAgICAgJiYgbm9kZS0+Y2FuU3BlY3VsYXRlSW50ZWdlcigpKSB7
CiAgICAgICAgICAgICBzcGVjdWxhdGVJbnQzMkJpbmFyeShub2RlLCB0cnVlKTsgLy8gZm9yY2lu
ZyBjYW4tZXhpdCwgd2hpY2ggaXMgYSBiaXQgb24gdGhlIGNvbnNlcnZhdGl2ZSBzaWRlLgotICAg
ICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChTcGVjSW50MzIpOworICAgICAgICAgICAg
Zm9yTm9kZShub2RlKS5zZXQoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9CiAgICAgICAgIHNwZWN1bGF0ZU51bWJlckJpbmFyeShub2RlKTsKLSAgICAgICAgZm9yTm9k
ZShub2RlSW5kZXgpLnNldChTcGVjRG91YmxlKTsKKyAgICAgICAgZm9yTm9kZShub2RlKS5zZXQo
U3BlY0RvdWJsZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgICAgIAogICAgIGNh
c2UgQXJpdGhBYnM6IHsKLSAgICAgICAgSlNWYWx1ZSBjaGlsZCA9IGZvck5vZGUobm9kZS5jaGls
ZDEoKSkudmFsdWUoKTsKKyAgICAgICAgSlNWYWx1ZSBjaGlsZCA9IGZvck5vZGUobm9kZS0+Y2hp
bGQxKCkpLnZhbHVlKCk7CiAgICAgICAgIGlmIChjaGlsZCAmJiBjaGlsZC5pc051bWJlcigpCi0g
ICAgICAgICAgICAmJiB0cnlTZXRDb25zdGFudChub2RlSW5kZXgsIEpTVmFsdWUoZmFicyhjaGls
ZC5hc051bWJlcigpKSkpKSB7CisgICAgICAgICAgICAmJiB0cnlTZXRDb25zdGFudChub2RlLCBK
U1ZhbHVlKGZhYnMoY2hpbGQuYXNOdW1iZXIoKSkpKSkgewogICAgICAgICAgICAgbV9mb3VuZENv
bnN0YW50cyA9IHRydWU7Ci0gICAgICAgICAgICBub2RlLnNldENhbkV4aXQoZmFsc2UpOworICAg
ICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgfQotICAgICAgICBpZiAobV9ncmFwaFtub2RlLmNoaWxkMSgpXS5zaG91bGRTcGVjdWxh
dGVJbnRlZ2VyRm9yQXJpdGhtZXRpYygpCi0gICAgICAgICAgICAmJiBub2RlLmNhblNwZWN1bGF0
ZUludGVnZXIoKSkgeworICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0
ZUludGVnZXJGb3JBcml0aG1ldGljKCkKKyAgICAgICAgICAgICYmIG5vZGUtPmNhblNwZWN1bGF0
ZUludGVnZXIoKSkgewogICAgICAgICAgICAgc3BlY3VsYXRlSW50MzJVbmFyeShub2RlLCB0cnVl
KTsKLSAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoU3BlY0ludDMyKTsKKyAgICAg
ICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNJbnQzMik7CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgfQogICAgICAgICBzcGVjdWxhdGVOdW1iZXJVbmFyeShub2RlKTsKLSAgICAgICAg
Zm9yTm9kZShub2RlSW5kZXgpLnNldChTcGVjRG91YmxlKTsKKyAgICAgICAgZm9yTm9kZShub2Rl
KS5zZXQoU3BlY0RvdWJsZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgICAgIAog
ICAgIGNhc2UgQXJpdGhTcXJ0OiB7Ci0gICAgICAgIEpTVmFsdWUgY2hpbGQgPSBmb3JOb2RlKG5v
ZGUuY2hpbGQxKCkpLnZhbHVlKCk7CisgICAgICAgIEpTVmFsdWUgY2hpbGQgPSBmb3JOb2RlKG5v
ZGUtPmNoaWxkMSgpKS52YWx1ZSgpOwogICAgICAgICBpZiAoY2hpbGQgJiYgY2hpbGQuaXNOdW1i
ZXIoKQotICAgICAgICAgICAgJiYgdHJ5U2V0Q29uc3RhbnQobm9kZUluZGV4LCBKU1ZhbHVlKHNx
cnQoY2hpbGQuYXNOdW1iZXIoKSkpKSkgeworICAgICAgICAgICAgJiYgdHJ5U2V0Q29uc3RhbnQo
bm9kZSwgSlNWYWx1ZShzcXJ0KGNoaWxkLmFzTnVtYmVyKCkpKSkpIHsKICAgICAgICAgICAgIG1f
Zm91bmRDb25zdGFudHMgPSB0cnVlOwotICAgICAgICAgICAgbm9kZS5zZXRDYW5FeGl0KGZhbHNl
KTsKKyAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIH0KICAgICAgICAgc3BlY3VsYXRlTnVtYmVyVW5hcnkobm9kZSk7Ci0gICAg
ICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoU3BlY0RvdWJsZSk7CisgICAgICAgIGZvck5vZGUo
bm9kZSkuc2V0KFNwZWNEb3VibGUpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgICAg
ICAKICAgICBjYXNlIExvZ2ljYWxOb3Q6IHsKICAgICAgICAgYm9vbCBkaWRTZXRDb25zdGFudCA9
IGZhbHNlOwotICAgICAgICBzd2l0Y2ggKGJvb2xlYW5SZXN1bHQobm9kZSwgZm9yTm9kZShub2Rl
LmNoaWxkMSgpKSkpIHsKKyAgICAgICAgc3dpdGNoIChib29sZWFuUmVzdWx0KG5vZGUsIGZvck5v
ZGUobm9kZS0+Y2hpbGQxKCkpKSkgewogICAgICAgICBjYXNlIERlZmluaXRlbHlUcnVlOgotICAg
ICAgICAgICAgZGlkU2V0Q29uc3RhbnQgPSB0cnlTZXRDb25zdGFudChub2RlSW5kZXgsIGpzQm9v
bGVhbihmYWxzZSkpOworICAgICAgICAgICAgZGlkU2V0Q29uc3RhbnQgPSB0cnlTZXRDb25zdGFu
dChub2RlLCBqc0Jvb2xlYW4oZmFsc2UpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBj
YXNlIERlZmluaXRlbHlGYWxzZToKLSAgICAgICAgICAgIGRpZFNldENvbnN0YW50ID0gdHJ5U2V0
Q29uc3RhbnQobm9kZUluZGV4LCBqc0Jvb2xlYW4odHJ1ZSkpOworICAgICAgICAgICAgZGlkU2V0
Q29uc3RhbnQgPSB0cnlTZXRDb25zdGFudChub2RlLCBqc0Jvb2xlYW4odHJ1ZSkpOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgfQogICAgICAgICBpZiAoZGlkU2V0Q29uc3RhbnQpIHsKICAgICAgICAgICAgIG1fZm91bmRD
b25zdGFudHMgPSB0cnVlOwotICAgICAgICAgICAgbm9kZS5zZXRDYW5FeGl0KGZhbHNlKTsKKyAg
ICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIH0KLSAgICAgICAgTm9kZSYgY2hpbGQgPSBtX2dyYXBoW25vZGUuY2hpbGQxKCldOwot
ICAgICAgICBpZiAoaXNCb29sZWFuU3BlY3VsYXRpb24oY2hpbGQucHJlZGljdGlvbigpKSkKKyAg
ICAgICAgTm9kZSogY2hpbGQgPSBub2RlLT5jaGlsZDEoKS5ub2RlKCk7CisgICAgICAgIGlmIChp
c0Jvb2xlYW5TcGVjdWxhdGlvbihjaGlsZC0+cHJlZGljdGlvbigpKSkKICAgICAgICAgICAgIHNw
ZWN1bGF0ZUJvb2xlYW5VbmFyeShub2RlKTsKLSAgICAgICAgZWxzZSBpZiAoY2hpbGQuc2hvdWxk
U3BlY3VsYXRlTm9uU3RyaW5nQ2VsbE9yT3RoZXIoKSkgewotICAgICAgICAgICAgbm9kZS5zZXRD
YW5FeGl0KHRydWUpOwotICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIo
KFNwZWNDZWxsICYgflNwZWNTdHJpbmcpIHwgU3BlY090aGVyKTsKLSAgICAgICAgfSBlbHNlIGlm
IChjaGlsZC5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpCisgICAgICAgIGVsc2UgaWYgKGNoaWxk
LT5zaG91bGRTcGVjdWxhdGVOb25TdHJpbmdDZWxsT3JPdGhlcigpKSB7CisgICAgICAgICAgICBu
b2RlLT5zZXRDYW5FeGl0KHRydWUpOworICAgICAgICAgICAgZm9yTm9kZShjaGlsZCkuZmlsdGVy
KChTcGVjQ2VsbCAmIH5TcGVjU3RyaW5nKSB8IFNwZWNPdGhlcik7CisgICAgICAgIH0gZWxzZSBp
ZiAoY2hpbGQtPnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKSkKICAgICAgICAgICAgIHNwZWN1bGF0
ZUludDMyVW5hcnkobm9kZSk7Ci0gICAgICAgIGVsc2UgaWYgKGNoaWxkLnNob3VsZFNwZWN1bGF0
ZU51bWJlcigpKQorICAgICAgICBlbHNlIGlmIChjaGlsZC0+c2hvdWxkU3BlY3VsYXRlTnVtYmVy
KCkpCiAgICAgICAgICAgICBzcGVjdWxhdGVOdW1iZXJVbmFyeShub2RlKTsKICAgICAgICAgZWxz
ZQotICAgICAgICAgICAgbm9kZS5zZXRDYW5FeGl0KGZhbHNlKTsKLSAgICAgICAgZm9yTm9kZShu
b2RlSW5kZXgpLnNldChTcGVjQm9vbGVhbik7CisgICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0
KGZhbHNlKTsKKyAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0Jvb2xlYW4pOwogICAgICAg
ICBicmVhazsKICAgICB9CiAgICAgICAgIApAQCAtNjc2LDM2ICs2NzUsMzYgQEAgYm9vbCBBYnN0
cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgIGNhc2UgSXNTdHJpbmc6CiAgICAg
Y2FzZSBJc09iamVjdDoKICAgICBjYXNlIElzRnVuY3Rpb246IHsKLSAgICAgICAgbm9kZS5zZXRD
YW5FeGl0KG5vZGUub3AoKSA9PSBJc1VuZGVmaW5lZCAmJiBtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0Rm9yKG5vZGUuY29kZU9yaWdpbiktPm1hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50
KCktPmlzU3RpbGxWYWxpZCgpKTsKLSAgICAgICAgSlNWYWx1ZSBjaGlsZCA9IGZvck5vZGUobm9k
ZS5jaGlsZDEoKSkudmFsdWUoKTsKKyAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChub2RlLT5vcCgp
ID09IElzVW5kZWZpbmVkICYmIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3RGb3Iobm9kZS0+Y29k
ZU9yaWdpbiktPm1hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50KCktPmlzU3RpbGxWYWxp
ZCgpKTsKKyAgICAgICAgSlNWYWx1ZSBjaGlsZCA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLnZh
bHVlKCk7CiAgICAgICAgIGlmIChjaGlsZCkgewogICAgICAgICAgICAgYm9vbCBjb25zdGFudFdh
c1NldDsKLSAgICAgICAgICAgIHN3aXRjaCAobm9kZS5vcCgpKSB7CisgICAgICAgICAgICBzd2l0
Y2ggKG5vZGUtPm9wKCkpIHsKICAgICAgICAgICAgIGNhc2UgSXNVbmRlZmluZWQ6Ci0gICAgICAg
ICAgICAgICAgaWYgKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3RGb3Iobm9kZS5jb2RlT3JpZ2lu
KS0+bWFzcXVlcmFkZXNBc1VuZGVmaW5lZFdhdGNocG9pbnQoKS0+aXNTdGlsbFZhbGlkKCkpIHsK
LSAgICAgICAgICAgICAgICAgICAgY29uc3RhbnRXYXNTZXQgPSB0cnlTZXRDb25zdGFudChub2Rl
SW5kZXgsIGpzQm9vbGVhbigKKyAgICAgICAgICAgICAgICBpZiAobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdEZvcihub2RlLT5jb2RlT3JpZ2luKS0+bWFzcXVlcmFkZXNBc1VuZGVmaW5lZFdhdGNo
cG9pbnQoKS0+aXNTdGlsbFZhbGlkKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgY29uc3RhbnRX
YXNTZXQgPSB0cnlTZXRDb25zdGFudChub2RlLCBqc0Jvb2xlYW4oCiAgICAgICAgICAgICAgICAg
ICAgICAgICBjaGlsZC5pc0NlbGwoKQogICAgICAgICAgICAgICAgICAgICAgICAgPyBmYWxzZSAK
ICAgICAgICAgICAgICAgICAgICAgICAgIDogY2hpbGQuaXNVbmRlZmluZWQoKSkpOwogICAgICAg
ICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnN0YW50V2FzU2V0ID0g
dHJ5U2V0Q29uc3RhbnQobm9kZUluZGV4LCBqc0Jvb2xlYW4oCisgICAgICAgICAgICAgICAgICAg
IGNvbnN0YW50V2FzU2V0ID0gdHJ5U2V0Q29uc3RhbnQobm9kZSwganNCb29sZWFuKAogICAgICAg
ICAgICAgICAgICAgICAgICAgY2hpbGQuaXNDZWxsKCkKLSAgICAgICAgICAgICAgICAgICAgICAg
ID8gY2hpbGQuYXNDZWxsKCktPnN0cnVjdHVyZSgpLT5tYXNxdWVyYWRlc0FzVW5kZWZpbmVkKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3RGb3Iobm9kZS5jb2RlT3JpZ2luKSkKKyAgICAgICAgICAg
ICAgICAgICAgICAgID8gY2hpbGQuYXNDZWxsKCktPnN0cnVjdHVyZSgpLT5tYXNxdWVyYWRlc0Fz
VW5kZWZpbmVkKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3RGb3Iobm9kZS0+Y29kZU9yaWdpbikp
CiAgICAgICAgICAgICAgICAgICAgICAgICA6IGNoaWxkLmlzVW5kZWZpbmVkKCkpKTsKICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIElz
Qm9vbGVhbjoKLSAgICAgICAgICAgICAgICBjb25zdGFudFdhc1NldCA9IHRyeVNldENvbnN0YW50
KG5vZGVJbmRleCwganNCb29sZWFuKGNoaWxkLmlzQm9vbGVhbigpKSk7CisgICAgICAgICAgICAg
ICAgY29uc3RhbnRXYXNTZXQgPSB0cnlTZXRDb25zdGFudChub2RlLCBqc0Jvb2xlYW4oY2hpbGQu
aXNCb29sZWFuKCkpKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2Ug
SXNOdW1iZXI6Ci0gICAgICAgICAgICAgICAgY29uc3RhbnRXYXNTZXQgPSB0cnlTZXRDb25zdGFu
dChub2RlSW5kZXgsIGpzQm9vbGVhbihjaGlsZC5pc051bWJlcigpKSk7CisgICAgICAgICAgICAg
ICAgY29uc3RhbnRXYXNTZXQgPSB0cnlTZXRDb25zdGFudChub2RlLCBqc0Jvb2xlYW4oY2hpbGQu
aXNOdW1iZXIoKSkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBJ
c1N0cmluZzoKLSAgICAgICAgICAgICAgICBjb25zdGFudFdhc1NldCA9IHRyeVNldENvbnN0YW50
KG5vZGVJbmRleCwganNCb29sZWFuKGlzSlNTdHJpbmcoY2hpbGQpKSk7CisgICAgICAgICAgICAg
ICAgY29uc3RhbnRXYXNTZXQgPSB0cnlTZXRDb25zdGFudChub2RlLCBqc0Jvb2xlYW4oaXNKU1N0
cmluZyhjaGlsZCkpKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2Ug
SXNPYmplY3Q6CiAgICAgICAgICAgICAgICAgaWYgKGNoaWxkLmlzTnVsbCgpIHx8ICFjaGlsZC5p
c09iamVjdCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnN0YW50V2FzU2V0ID0gdHJ5U2V0
Q29uc3RhbnQobm9kZUluZGV4LCBqc0Jvb2xlYW4oY2hpbGQuaXNOdWxsKCkpKTsKKyAgICAgICAg
ICAgICAgICAgICAgY29uc3RhbnRXYXNTZXQgPSB0cnlTZXRDb25zdGFudChub2RlLCBqc0Jvb2xl
YW4oY2hpbGQuaXNOdWxsKCkpKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgZGVmYXVsdDoKQEAgLTcxOCw2MSArNzE3LDYxIEBAIGJv
b2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgICAgIH0KICAg
ICAgICAgfQogCi0gICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoU3BlY0Jvb2xlYW4pOwor
ICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjQm9vbGVhbik7CiAgICAgICAgIGJyZWFrOwog
ICAgIH0KIAogICAgIGNhc2UgVHlwZU9mOiB7CiAgICAgICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFs
RGF0YSA9IG1fY29kZUJsb2NrLT5nbG9iYWxEYXRhKCk7Ci0gICAgICAgIEpTVmFsdWUgY2hpbGQg
PSBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLnZhbHVlKCk7Ci0gICAgICAgIEFic3RyYWN0VmFsdWUm
IGFic3RyYWN0Q2hpbGQgPSBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpOworICAgICAgICBKU1ZhbHVl
IGNoaWxkID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSkudmFsdWUoKTsKKyAgICAgICAgQWJzdHJh
Y3RWYWx1ZSYgYWJzdHJhY3RDaGlsZCA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpOwogICAgICAg
ICBpZiAoY2hpbGQpIHsKLSAgICAgICAgICAgIEpTVmFsdWUgdHlwZVN0cmluZyA9IGpzVHlwZVN0
cmluZ0ZvclZhbHVlKCpnbG9iYWxEYXRhLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0Rm9yKG5v
ZGUuY29kZU9yaWdpbiksIGNoaWxkKTsKLSAgICAgICAgICAgIGlmICh0cnlTZXRDb25zdGFudChu
b2RlSW5kZXgsIHR5cGVTdHJpbmcpKSB7CisgICAgICAgICAgICBKU1ZhbHVlIHR5cGVTdHJpbmcg
PSBqc1R5cGVTdHJpbmdGb3JWYWx1ZSgqZ2xvYmFsRGF0YSwgbV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdEZvcihub2RlLT5jb2RlT3JpZ2luKSwgY2hpbGQpOworICAgICAgICAgICAgaWYgKHRyeVNl
dENvbnN0YW50KG5vZGUsIHR5cGVTdHJpbmcpKSB7CiAgICAgICAgICAgICAgICAgbV9mb3VuZENv
bnN0YW50cyA9IHRydWU7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAg
ICAgICAgIH0gZWxzZSBpZiAoaXNOdW1iZXJTcGVjdWxhdGlvbihhYnN0cmFjdENoaWxkLm1fdHlw
ZSkpIHsKLSAgICAgICAgICAgIGlmICh0cnlTZXRDb25zdGFudChub2RlSW5kZXgsIGdsb2JhbERh
dGEtPnNtYWxsU3RyaW5ncy5udW1iZXJTdHJpbmcoKSkpIHsKLSAgICAgICAgICAgICAgICBmb3JO
b2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjTnVtYmVyKTsKKyAgICAgICAgICAgIGlmICh0
cnlTZXRDb25zdGFudChub2RlLCBnbG9iYWxEYXRhLT5zbWFsbFN0cmluZ3MubnVtYmVyU3RyaW5n
KCkpKSB7CisgICAgICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDEoKSkuZmlsdGVyKFNw
ZWNOdW1iZXIpOwogICAgICAgICAgICAgICAgIG1fZm91bmRDb25zdGFudHMgPSB0cnVlOwogICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgaWYgKGlz
U3RyaW5nU3BlY3VsYXRpb24oYWJzdHJhY3RDaGlsZC5tX3R5cGUpKSB7Ci0gICAgICAgICAgICBp
ZiAodHJ5U2V0Q29uc3RhbnQobm9kZUluZGV4LCBnbG9iYWxEYXRhLT5zbWFsbFN0cmluZ3Muc3Ry
aW5nU3RyaW5nKCkpKSB7Ci0gICAgICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5m
aWx0ZXIoU3BlY1N0cmluZyk7CisgICAgICAgICAgICBpZiAodHJ5U2V0Q29uc3RhbnQobm9kZSwg
Z2xvYmFsRGF0YS0+c21hbGxTdHJpbmdzLnN0cmluZ1N0cmluZygpKSkgeworICAgICAgICAgICAg
ICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRlcihTcGVjU3RyaW5nKTsKICAgICAgICAg
ICAgICAgICBtX2ZvdW5kQ29uc3RhbnRzID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIGlmIChpc0ZpbmFsT2JqZWN0U3BlY3VsYXRp
b24oYWJzdHJhY3RDaGlsZC5tX3R5cGUpIHx8IGlzQXJyYXlTcGVjdWxhdGlvbihhYnN0cmFjdENo
aWxkLm1fdHlwZSkgfHwgaXNBcmd1bWVudHNTcGVjdWxhdGlvbihhYnN0cmFjdENoaWxkLm1fdHlw
ZSkpIHsKLSAgICAgICAgICAgIGlmICh0cnlTZXRDb25zdGFudChub2RlSW5kZXgsIGdsb2JhbERh
dGEtPnNtYWxsU3RyaW5ncy5vYmplY3RTdHJpbmcoKSkpIHsKLSAgICAgICAgICAgICAgICBmb3JO
b2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjRmluYWxPYmplY3QgfCBTcGVjQXJyYXkgfCBT
cGVjQXJndW1lbnRzKTsKKyAgICAgICAgICAgIGlmICh0cnlTZXRDb25zdGFudChub2RlLCBnbG9i
YWxEYXRhLT5zbWFsbFN0cmluZ3Mub2JqZWN0U3RyaW5nKCkpKSB7CisgICAgICAgICAgICAgICAg
Zm9yTm9kZShub2RlLT5jaGlsZDEoKSkuZmlsdGVyKFNwZWNGaW5hbE9iamVjdCB8IFNwZWNBcnJh
eSB8IFNwZWNBcmd1bWVudHMpOwogICAgICAgICAgICAgICAgIG1fZm91bmRDb25zdGFudHMgPSB0
cnVlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICB9IGVs
c2UgaWYgKGlzRnVuY3Rpb25TcGVjdWxhdGlvbihhYnN0cmFjdENoaWxkLm1fdHlwZSkpIHsKLSAg
ICAgICAgICAgIGlmICh0cnlTZXRDb25zdGFudChub2RlSW5kZXgsIGdsb2JhbERhdGEtPnNtYWxs
U3RyaW5ncy5mdW5jdGlvblN0cmluZygpKSkgewotICAgICAgICAgICAgICAgIGZvck5vZGUobm9k
ZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNGdW5jdGlvbik7CisgICAgICAgICAgICBpZiAodHJ5U2V0
Q29uc3RhbnQobm9kZSwgZ2xvYmFsRGF0YS0+c21hbGxTdHJpbmdzLmZ1bmN0aW9uU3RyaW5nKCkp
KSB7CisgICAgICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDEoKSkuZmlsdGVyKFNwZWNG
dW5jdGlvbik7CiAgICAgICAgICAgICAgICAgbV9mb3VuZENvbnN0YW50cyA9IHRydWU7CiAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSBpZiAoaXNC
b29sZWFuU3BlY3VsYXRpb24oYWJzdHJhY3RDaGlsZC5tX3R5cGUpKSB7Ci0gICAgICAgICAgICBp
ZiAodHJ5U2V0Q29uc3RhbnQobm9kZUluZGV4LCBnbG9iYWxEYXRhLT5zbWFsbFN0cmluZ3MuYm9v
bGVhblN0cmluZygpKSkgewotICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSku
ZmlsdGVyKFNwZWNCb29sZWFuKTsKKyAgICAgICAgICAgIGlmICh0cnlTZXRDb25zdGFudChub2Rl
LCBnbG9iYWxEYXRhLT5zbWFsbFN0cmluZ3MuYm9vbGVhblN0cmluZygpKSkgeworICAgICAgICAg
ICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRlcihTcGVjQm9vbGVhbik7CiAgICAg
ICAgICAgICAgICAgbV9mb3VuZENvbnN0YW50cyA9IHRydWU7CiAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBOb2RlJiBj
aGlsZE5vZGUgPSBtX2dyYXBoW25vZGUuY2hpbGQxKCldOwotICAgICAgICAgICAgaWYgKGlzQ2Vs
bFNwZWN1bGF0aW9uKGNoaWxkTm9kZS5wcmVkaWN0aW9uKCkpKSB7Ci0gICAgICAgICAgICAgICAg
aWYgKGlzU3RyaW5nU3BlY3VsYXRpb24oY2hpbGROb2RlLnByZWRpY3Rpb24oKSkpCi0gICAgICAg
ICAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNTdHJpbmcpOwor
ICAgICAgICAgICAgTm9kZSogY2hpbGROb2RlID0gbm9kZS0+Y2hpbGQxKCkubm9kZSgpOworICAg
ICAgICAgICAgaWYgKGlzQ2VsbFNwZWN1bGF0aW9uKGNoaWxkTm9kZS0+cHJlZGljdGlvbigpKSkg
eworICAgICAgICAgICAgICAgIGlmIChpc1N0cmluZ1NwZWN1bGF0aW9uKGNoaWxkTm9kZS0+cHJl
ZGljdGlvbigpKSkKKyAgICAgICAgICAgICAgICAgICAgZm9yTm9kZShjaGlsZE5vZGUpLmZpbHRl
cihTcGVjU3RyaW5nKTsKICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAg
IGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNDZWxsKTsKLSAgICAgICAgICAgICAg
ICBub2RlLnNldENhbkV4aXQodHJ1ZSk7CisgICAgICAgICAgICAgICAgICAgIGZvck5vZGUoY2hp
bGROb2RlKS5maWx0ZXIoU3BlY0NlbGwpOworICAgICAgICAgICAgICAgIG5vZGUtPnNldENhbkV4
aXQodHJ1ZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgZm9yTm9kZShub2Rl
SW5kZXgpLnNldChTcGVjU3RyaW5nKTsKKyAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY1N0
cmluZyk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgICAgIApAQCAtNzgzLDI2ICs3
ODIsMjYgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgIGNh
c2UgQ29tcGFyZUVxOiB7CiAgICAgICAgIGJvb2wgY29uc3RhbnRXYXNTZXQgPSBmYWxzZTsKIAot
ICAgICAgICBKU1ZhbHVlIGxlZnRDb25zdCA9IGZvck5vZGUobm9kZS5jaGlsZDEoKSkudmFsdWUo
KTsKLSAgICAgICAgSlNWYWx1ZSByaWdodENvbnN0ID0gZm9yTm9kZShub2RlLmNoaWxkMigpKS52
YWx1ZSgpOworICAgICAgICBKU1ZhbHVlIGxlZnRDb25zdCA9IGZvck5vZGUobm9kZS0+Y2hpbGQx
KCkpLnZhbHVlKCk7CisgICAgICAgIEpTVmFsdWUgcmlnaHRDb25zdCA9IGZvck5vZGUobm9kZS0+
Y2hpbGQyKCkpLnZhbHVlKCk7CiAgICAgICAgIGlmIChsZWZ0Q29uc3QgJiYgcmlnaHRDb25zdCAm
JiBsZWZ0Q29uc3QuaXNOdW1iZXIoKSAmJiByaWdodENvbnN0LmlzTnVtYmVyKCkpIHsKICAgICAg
ICAgICAgIGRvdWJsZSBhID0gbGVmdENvbnN0LmFzTnVtYmVyKCk7CiAgICAgICAgICAgICBkb3Vi
bGUgYiA9IHJpZ2h0Q29uc3QuYXNOdW1iZXIoKTsKICAgICAgICAgICAgIHN3aXRjaCAobm9kZS5v
cCgpKSB7CiAgICAgICAgICAgICBjYXNlIENvbXBhcmVMZXNzOgotICAgICAgICAgICAgICAgIGNv
bnN0YW50V2FzU2V0ID0gdHJ5U2V0Q29uc3RhbnQobm9kZUluZGV4LCBqc0Jvb2xlYW4oYSA8IGIp
KTsKKyAgICAgICAgICAgICAgICBjb25zdGFudFdhc1NldCA9IHRyeVNldENvbnN0YW50KG5vZGUs
IGpzQm9vbGVhbihhIDwgYikpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
Y2FzZSBDb21wYXJlTGVzc0VxOgotICAgICAgICAgICAgICAgIGNvbnN0YW50V2FzU2V0ID0gdHJ5
U2V0Q29uc3RhbnQobm9kZUluZGV4LCBqc0Jvb2xlYW4oYSA8PSBiKSk7CisgICAgICAgICAgICAg
ICAgY29uc3RhbnRXYXNTZXQgPSB0cnlTZXRDb25zdGFudChub2RlLCBqc0Jvb2xlYW4oYSA8PSBi
KSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIENvbXBhcmVHcmVh
dGVyOgotICAgICAgICAgICAgICAgIGNvbnN0YW50V2FzU2V0ID0gdHJ5U2V0Q29uc3RhbnQobm9k
ZUluZGV4LCBqc0Jvb2xlYW4oYSA+IGIpKTsKKyAgICAgICAgICAgICAgICBjb25zdGFudFdhc1Nl
dCA9IHRyeVNldENvbnN0YW50KG5vZGUsIGpzQm9vbGVhbihhID4gYikpOwogICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBDb21wYXJlR3JlYXRlckVxOgotICAgICAgICAg
ICAgICAgIGNvbnN0YW50V2FzU2V0ID0gdHJ5U2V0Q29uc3RhbnQobm9kZUluZGV4LCBqc0Jvb2xl
YW4oYSA+PSBiKSk7CisgICAgICAgICAgICAgICAgY29uc3RhbnRXYXNTZXQgPSB0cnlTZXRDb25z
dGFudChub2RlLCBqc0Jvb2xlYW4oYSA+PSBiKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICBjYXNlIENvbXBhcmVFcToKLSAgICAgICAgICAgICAgICBjb25zdGFudFdhc1Nl
dCA9IHRyeVNldENvbnN0YW50KG5vZGVJbmRleCwganNCb29sZWFuKGEgPT0gYikpOworICAgICAg
ICAgICAgICAgIGNvbnN0YW50V2FzU2V0ID0gdHJ5U2V0Q29uc3RhbnQobm9kZSwganNCb29sZWFu
KGEgPT0gYikpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgZGVmYXVsdDoK
ICAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTgxMSwyNCArODEwLDI0
IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgICAg
IH0KICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgaWYgKCFjb25zdGFudFdhc1NldCAmJiBu
b2RlLm9wKCkgPT0gQ29tcGFyZUVxKSB7Ci0gICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSBsZWZ0
VHlwZSA9IGZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlOwotICAgICAgICAgICAgU3BlY3Vs
YXRlZFR5cGUgcmlnaHRUeXBlID0gZm9yTm9kZShub2RlLmNoaWxkMigpKS5tX3R5cGU7CisgICAg
ICAgIGlmICghY29uc3RhbnRXYXNTZXQgJiYgbm9kZS0+b3AoKSA9PSBDb21wYXJlRXEpIHsKKyAg
ICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIGxlZnRUeXBlID0gZm9yTm9kZShub2RlLT5jaGlsZDEo
KSkubV90eXBlOworICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgcmlnaHRUeXBlID0gZm9yTm9k
ZShub2RlLT5jaGlsZDIoKSkubV90eXBlOwogICAgICAgICAgICAgaWYgKChpc0ludDMyU3BlY3Vs
YXRpb24obGVmdFR5cGUpICYmIGlzT3RoZXJTcGVjdWxhdGlvbihyaWdodFR5cGUpKQogICAgICAg
ICAgICAgICAgIHx8IChpc090aGVyU3BlY3VsYXRpb24obGVmdFR5cGUpICYmIGlzSW50MzJTcGVj
dWxhdGlvbihyaWdodFR5cGUpKSkKLSAgICAgICAgICAgICAgICBjb25zdGFudFdhc1NldCA9IHRy
eVNldENvbnN0YW50KG5vZGVJbmRleCwganNCb29sZWFuKGZhbHNlKSk7CisgICAgICAgICAgICAg
ICAgY29uc3RhbnRXYXNTZXQgPSB0cnlTZXRDb25zdGFudChub2RlLCBqc0Jvb2xlYW4oZmFsc2Up
KTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgaWYgKGNvbnN0YW50V2FzU2V0KSB7CiAg
ICAgICAgICAgICBtX2ZvdW5kQ29uc3RhbnRzID0gdHJ1ZTsKLSAgICAgICAgICAgIG5vZGUuc2V0
Q2FuRXhpdChmYWxzZSk7CisgICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBmb3JOb2RlKG5v
ZGVJbmRleCkuc2V0KFNwZWNCb29sZWFuKTsKKyAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3Bl
Y0Jvb2xlYW4pOwogICAgICAgICAKLSAgICAgICAgTm9kZSYgbGVmdCA9IG1fZ3JhcGhbbm9kZS5j
aGlsZDEoKV07Ci0gICAgICAgIE5vZGUmIHJpZ2h0ID0gbV9ncmFwaFtub2RlLmNoaWxkMigpXTsK
KyAgICAgICAgTm9kZSogbGVmdCA9IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKKyAgICAgICAgTm9k
ZSogcmlnaHQgPSBub2RlLT5jaGlsZDIoKS5ub2RlKCk7CiAgICAgICAgIFNwZWN1bGF0ZWRUeXBl
IGZpbHRlcjsKICAgICAgICAgU3BlY3VsYXRlZFR5cGVDaGVja2VyIGNoZWNrZXI7CiAgICAgICAg
IGlmIChOb2RlOjpzaG91bGRTcGVjdWxhdGVJbnRlZ2VyKGxlZnQsIHJpZ2h0KSkgewpAQCAtODM4
LDEyMSArODM3LDExOSBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5k
CiAgICAgICAgICAgICBmaWx0ZXIgPSBTcGVjTnVtYmVyOwogICAgICAgICAgICAgY2hlY2tlciA9
IGlzTnVtYmVyU3BlY3VsYXRpb247CiAgICAgICAgIH0gZWxzZSBpZiAobm9kZS5vcCgpID09IENv
bXBhcmVFcSkgewotICAgICAgICAgICAgaWYgKChtX2dyYXBoLmlzQ29uc3RhbnQobm9kZS5jaGls
ZDEoKS5pbmRleCgpKQotICAgICAgICAgICAgICAgICAmJiBtX2dyYXBoLnZhbHVlT2ZKU0NvbnN0
YW50KG5vZGUuY2hpbGQxKCkuaW5kZXgoKSkuaXNOdWxsKCkpCi0gICAgICAgICAgICAgICAgfHwg
KG1fZ3JhcGguaXNDb25zdGFudChub2RlLmNoaWxkMigpLmluZGV4KCkpCi0gICAgICAgICAgICAg
ICAgICAgICYmIG1fZ3JhcGgudmFsdWVPZkpTQ29uc3RhbnQobm9kZS5jaGlsZDIoKS5pbmRleCgp
KS5pc051bGwoKSkpIHsKKyAgICAgICAgICAgIGlmICgobV9ncmFwaC5pc0NvbnN0YW50KGxlZnQp
CisgICAgICAgICAgICAgICAgICYmIG1fZ3JhcGgudmFsdWVPZkpTQ29uc3RhbnQobGVmdCkuaXNO
dWxsKCkpCisgICAgICAgICAgICAgICAgfHwgKG1fZ3JhcGguaXNDb25zdGFudChyaWdodCkKKyAg
ICAgICAgICAgICAgICAgICAgJiYgbV9ncmFwaC52YWx1ZU9mSlNDb25zdGFudChyaWdodCkuaXNO
dWxsKCkpKSB7CiAgICAgICAgICAgICAgICAgLy8gV2UgY2FuIGV4aXQgaWYgd2UgaGF2ZW4ndCBm
aXJlZCB0aGUgTWFzcXVlcmFkZXNBc1VuZGVmaW5kIHdhdGNocG9pbnQgeWV0LgotICAgICAgICAg
ICAgICAgIG5vZGUuc2V0Q2FuRXhpdChtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0Rm9yKG5vZGUu
Y29kZU9yaWdpbiktPm1hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50KCktPmlzU3RpbGxW
YWxpZCgpKTsKKyAgICAgICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3RGb3Iobm9kZS0+Y29kZU9yaWdpbiktPm1hc3F1ZXJhZGVzQXNVbmRlZmluZWRX
YXRjaHBvaW50KCktPmlzU3RpbGxWYWxpZCgpKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKGxlZnQuc2hvdWxkU3Bl
Y3VsYXRlU3RyaW5nKCkgfHwgcmlnaHQuc2hvdWxkU3BlY3VsYXRlU3RyaW5nKCkpIHsKLSAgICAg
ICAgICAgICAgICBub2RlLnNldENhbkV4aXQoZmFsc2UpOworICAgICAgICAgICAgaWYgKGxlZnQt
PnNob3VsZFNwZWN1bGF0ZVN0cmluZygpIHx8IHJpZ2h0LT5zaG91bGRTcGVjdWxhdGVTdHJpbmco
KSkgeworICAgICAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfSAKLSAgICAgICAgICAgIGlmIChsZWZ0LnNob3Vs
ZFNwZWN1bGF0ZU5vblN0cmluZ0NlbGwoKSAmJiByaWdodC5zaG91bGRTcGVjdWxhdGVOb25TdHJp
bmdDZWxsT3JPdGhlcigpKSB7Ci0gICAgICAgICAgICAgICAgbm9kZS5zZXRDYW5FeGl0KHRydWUp
OwotICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNDZWxs
ICYgflNwZWNTdHJpbmcpOwotICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDIoKSku
ZmlsdGVyKChTcGVjQ2VsbCAmIH5TcGVjU3RyaW5nKSB8IFNwZWNPdGhlcik7Ci0gICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAobGVmdC5zaG91bGRT
cGVjdWxhdGVOb25TdHJpbmdDZWxsT3JPdGhlcigpICYmIHJpZ2h0LnNob3VsZFNwZWN1bGF0ZU5v
blN0cmluZ0NlbGwoKSkgewotICAgICAgICAgICAgICAgIG5vZGUuc2V0Q2FuRXhpdCh0cnVlKTsK
LSAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcigoU3BlY0NlbGwg
JiB+U3BlY1N0cmluZykgfCBTcGVjT3RoZXIpOwotICAgICAgICAgICAgICAgIGZvck5vZGUobm9k
ZS5jaGlsZDIoKSkuZmlsdGVyKFNwZWNDZWxsICYgflNwZWNTdHJpbmcpOwotICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGxlZnQuc2hvdWxkU3Bl
Y3VsYXRlTm9uU3RyaW5nQ2VsbCgpICYmIHJpZ2h0LnNob3VsZFNwZWN1bGF0ZU5vblN0cmluZ0Nl
bGwoKSkgewotICAgICAgICAgICAgICAgIG5vZGUuc2V0Q2FuRXhpdCh0cnVlKTsKLSAgICAgICAg
ICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjQ2VsbCAmIH5TcGVjU3Ry
aW5nKTsKLSAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQyKCkpLmZpbHRlcihTcGVj
Q2VsbCAmIH5TcGVjU3RyaW5nKTsKKyAgICAgICAgICAgIGlmIChsZWZ0LT5zaG91bGRTcGVjdWxh
dGVOb25TdHJpbmdDZWxsKCkgJiYgcmlnaHQtPnNob3VsZFNwZWN1bGF0ZU5vblN0cmluZ0NlbGxP
ck90aGVyKCkpIHsKKyAgICAgICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOworICAg
ICAgICAgICAgICAgIGZvck5vZGUobGVmdCkuZmlsdGVyKFNwZWNDZWxsICYgflNwZWNTdHJpbmcp
OworICAgICAgICAgICAgICAgIGZvck5vZGUocmlnaHQpLmZpbHRlcigoU3BlY0NlbGwgJiB+U3Bl
Y1N0cmluZykgfCBTcGVjT3RoZXIpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgaWYgKGxlZnQtPnNob3VsZFNwZWN1bGF0ZU5vblN0cmluZ0NlbGxP
ck90aGVyKCkgJiYgcmlnaHQtPnNob3VsZFNwZWN1bGF0ZU5vblN0cmluZ0NlbGwoKSkgeworICAg
ICAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7CisgICAgICAgICAgICAgICAgZm9y
Tm9kZShsZWZ0KS5maWx0ZXIoKFNwZWNDZWxsICYgflNwZWNTdHJpbmcpIHwgU3BlY090aGVyKTsK
KyAgICAgICAgICAgICAgICBmb3JOb2RlKHJpZ2h0KS5maWx0ZXIoU3BlY0NlbGwgJiB+U3BlY1N0
cmluZyk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBpZiAobGVmdC0+c2hvdWxkU3BlY3VsYXRlTm9uU3RyaW5nQ2VsbCgpICYmIHJpZ2h0LT5zaG91
bGRTcGVjdWxhdGVOb25TdHJpbmdDZWxsKCkpIHsKKyAgICAgICAgICAgICAgICBub2RlLT5zZXRD
YW5FeGl0KHRydWUpOworICAgICAgICAgICAgICAgIGZvck5vZGUobGVmdCkuZmlsdGVyKFNwZWND
ZWxsICYgflNwZWNTdHJpbmcpOworICAgICAgICAgICAgICAgIGZvck5vZGUocmlnaHQpLmZpbHRl
cihTcGVjQ2VsbCAmIH5TcGVjU3RyaW5nKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgIH0KICAKICAgICAgICAgICAgIGZpbHRlciA9IFNwZWNUb3A7CiAgICAgICAgICAgICBj
aGVja2VyID0gaXNBbnlTcGVjdWxhdGlvbjsKLSAgICAgICAgICAgIGNsb2JiZXJXb3JsZChub2Rl
LmNvZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7CisgICAgICAgICAgICBjbG9iYmVyV29ybGQobm9k
ZS0+Y29kZU9yaWdpbiwgaW5kZXhJbkJsb2NrKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAg
ICAgIGZpbHRlciA9IFNwZWNUb3A7CiAgICAgICAgICAgICBjaGVja2VyID0gaXNBbnlTcGVjdWxh
dGlvbjsKLSAgICAgICAgICAgIGNsb2JiZXJXb3JsZChub2RlLmNvZGVPcmlnaW4sIGluZGV4SW5C
bG9jayk7CisgICAgICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+Y29kZU9yaWdpbiwgaW5kZXhJ
bkJsb2NrKTsKICAgICAgICAgfQogICAgICAgICBub2RlLnNldENhbkV4aXQoCi0gICAgICAgICAg
ICAhY2hlY2tlcihmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkKLSAgICAgICAgICAgIHx8
ICFjaGVja2VyKGZvck5vZGUobm9kZS5jaGlsZDIoKSkubV90eXBlKSk7Ci0gICAgICAgIGZvck5v
ZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKGZpbHRlcik7Ci0gICAgICAgIGZvck5vZGUobm9kZS5j
aGlsZDIoKSkuZmlsdGVyKGZpbHRlcik7CisgICAgICAgICAgICAhY2hlY2tlcihmb3JOb2RlKGxl
ZnQpLm1fdHlwZSkKKyAgICAgICAgICAgIHx8ICFjaGVja2VyKGZvck5vZGUocmlnaHQpLm1fdHlw
ZSkpOworICAgICAgICBmb3JOb2RlKGxlZnQpLmZpbHRlcihmaWx0ZXIpOworICAgICAgICBmb3JO
b2RlKHJpZ2h0KS5maWx0ZXIoZmlsdGVyKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAg
ICAgICAgCiAgICAgY2FzZSBDb21wYXJlU3RyaWN0RXE6IHsKLSAgICAgICAgSlNWYWx1ZSBsZWZ0
ID0gZm9yTm9kZShub2RlLmNoaWxkMSgpKS52YWx1ZSgpOwotICAgICAgICBKU1ZhbHVlIHJpZ2h0
ID0gZm9yTm9kZShub2RlLmNoaWxkMigpKS52YWx1ZSgpOworICAgICAgICBOb2RlKiBsZWZ0Tm9k
ZSA9IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKKyAgICAgICAgTm9kZSogcmlnaHROb2RlID0gbm9k
ZS0+Y2hpbGQyKCkubm9kZSgpOworICAgICAgICBKU1ZhbHVlIGxlZnQgPSBmb3JOb2RlKGxlZnRO
b2RlKS52YWx1ZSgpOworICAgICAgICBKU1ZhbHVlIHJpZ2h0ID0gZm9yTm9kZShyaWdodE5vZGUp
LnZhbHVlKCk7CiAgICAgICAgIGlmIChsZWZ0ICYmIHJpZ2h0ICYmIGxlZnQuaXNOdW1iZXIoKSAm
JiByaWdodC5pc051bWJlcigpCi0gICAgICAgICAgICAmJiB0cnlTZXRDb25zdGFudChub2RlSW5k
ZXgsIGpzQm9vbGVhbihsZWZ0LmFzTnVtYmVyKCkgPT0gcmlnaHQuYXNOdW1iZXIoKSkpKSB7Cisg
ICAgICAgICAgICAmJiB0cnlTZXRDb25zdGFudChub2RlLCBqc0Jvb2xlYW4obGVmdC5hc051bWJl
cigpID09IHJpZ2h0LmFzTnVtYmVyKCkpKSkgewogICAgICAgICAgICAgbV9mb3VuZENvbnN0YW50
cyA9IHRydWU7CiAgICAgICAgICAgICBub2RlLnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChTcGVj
Qm9vbGVhbik7Ci0gICAgICAgIGlmIChtX2dyYXBoLmlzSlNDb25zdGFudChub2RlLmNoaWxkMSgp
LmluZGV4KCkpKSB7Ci0gICAgICAgICAgICBKU1ZhbHVlIHZhbHVlID0gbV9ncmFwaC52YWx1ZU9m
SlNDb25zdGFudChub2RlLmNoaWxkMSgpLmluZGV4KCkpOworICAgICAgICBmb3JOb2RlKG5vZGUp
LnNldChTcGVjQm9vbGVhbik7CisgICAgICAgIGlmIChtX2dyYXBoLmlzSlNDb25zdGFudChsZWZ0
Tm9kZSkpIHsKKyAgICAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBtX2dyYXBoLnZhbHVlT2ZKU0Nv
bnN0YW50KGxlZnROb2RlKTsKICAgICAgICAgICAgIGlmICghdmFsdWUuaXNOdW1iZXIoKSAmJiAh
dmFsdWUuaXNTdHJpbmcoKSkgewotICAgICAgICAgICAgICAgIG5vZGUuc2V0Q2FuRXhpdChmYWxz
ZSk7CisgICAgICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgaWYgKG1fZ3Jh
cGguaXNKU0NvbnN0YW50KG5vZGUuY2hpbGQyKCkuaW5kZXgoKSkpIHsKLSAgICAgICAgICAgIEpT
VmFsdWUgdmFsdWUgPSBtX2dyYXBoLnZhbHVlT2ZKU0NvbnN0YW50KG5vZGUuY2hpbGQyKCkuaW5k
ZXgoKSk7CisgICAgICAgIGlmIChtX2dyYXBoLmlzSlNDb25zdGFudChyaWdodE5vZGUpKSB7Cisg
ICAgICAgICAgICBKU1ZhbHVlIHZhbHVlID0gbV9ncmFwaC52YWx1ZU9mSlNDb25zdGFudChyaWdo
dE5vZGUpOwogICAgICAgICAgICAgaWYgKCF2YWx1ZS5pc051bWJlcigpICYmICF2YWx1ZS5pc1N0
cmluZygpKSB7Ci0gICAgICAgICAgICAgICAgbm9kZS5zZXRDYW5FeGl0KGZhbHNlKTsKKyAgICAg
ICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICBpZiAoTm9kZTo6c2hvdWxkU3Bl
Y3VsYXRlSW50ZWdlcigKLSAgICAgICAgICAgICAgICBtX2dyYXBoW25vZGUuY2hpbGQxKCldLCBt
X2dyYXBoW25vZGUuY2hpbGQyKCldKSkgeworICAgICAgICBpZiAoTm9kZTo6c2hvdWxkU3BlY3Vs
YXRlSW50ZWdlcihsZWZ0Tm9kZSwgcmlnaHROb2RlKSkgewogICAgICAgICAgICAgc3BlY3VsYXRl
SW50MzJCaW5hcnkobm9kZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAg
ICBpZiAoTm9kZTo6c2hvdWxkU3BlY3VsYXRlTnVtYmVyKAotICAgICAgICAgICAgICAgIG1fZ3Jh
cGhbbm9kZS5jaGlsZDEoKV0sIG1fZ3JhcGhbbm9kZS5jaGlsZDIoKV0pKSB7CisgICAgICAgIGlm
IChOb2RlOjpzaG91bGRTcGVjdWxhdGVOdW1iZXIobGVmdE5vZGUsIHJpZ2h0Tm9kZSkpIHsKICAg
ICAgICAgICAgIHNwZWN1bGF0ZU51bWJlckJpbmFyeShub2RlKTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9Ci0gICAgICAgIE5vZGUmIGxlZnROb2RlID0gbV9ncmFwaFtub2RlLmNoaWxk
MSgpXTsKLSAgICAgICAgTm9kZSYgcmlnaHROb2RlID0gbV9ncmFwaFtub2RlLmNoaWxkMigpXTsK
LSAgICAgICAgaWYgKGxlZnROb2RlLnNob3VsZFNwZWN1bGF0ZVN0cmluZygpIHx8IHJpZ2h0Tm9k
ZS5zaG91bGRTcGVjdWxhdGVTdHJpbmcoKSkgewotICAgICAgICAgICAgbm9kZS5zZXRDYW5FeGl0
KGZhbHNlKTsKKyAgICAgICAgaWYgKGxlZnROb2RlLT5zaG91bGRTcGVjdWxhdGVTdHJpbmcoKSB8
fCByaWdodE5vZGUtPnNob3VsZFNwZWN1bGF0ZVN0cmluZygpKSB7CisgICAgICAgICAgICBub2Rl
LT5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAg
ICAgIGlmIChsZWZ0Tm9kZS5zaG91bGRTcGVjdWxhdGVOb25TdHJpbmdDZWxsKCkgJiYgcmlnaHRO
b2RlLnNob3VsZFNwZWN1bGF0ZU5vblN0cmluZ0NlbGwoKSkgeworICAgICAgICBpZiAobGVmdE5v
ZGUtPnNob3VsZFNwZWN1bGF0ZU5vblN0cmluZ0NlbGwoKSAmJiByaWdodE5vZGUtPnNob3VsZFNw
ZWN1bGF0ZU5vblN0cmluZ0NlbGwoKSkgewogICAgICAgICAgICAgbm9kZS5zZXRDYW5FeGl0KHRy
dWUpOwotICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoKFNwZWNDZWxs
ICYgflNwZWNTdHJpbmcpIHwgU3BlY090aGVyKTsKLSAgICAgICAgICAgIGZvck5vZGUobm9kZS5j
aGlsZDIoKSkuZmlsdGVyKChTcGVjQ2VsbCAmIH5TcGVjU3RyaW5nKSB8IFNwZWNPdGhlcik7Cisg
ICAgICAgICAgICBmb3JOb2RlKGxlZnROb2RlKS5maWx0ZXIoKFNwZWNDZWxsICYgflNwZWNTdHJp
bmcpIHwgU3BlY090aGVyKTsKKyAgICAgICAgICAgIGZvck5vZGUocmlnaHROb2RlKS5maWx0ZXIo
KFNwZWNDZWxsICYgflNwZWNTdHJpbmcpIHwgU3BlY090aGVyKTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9Ci0gICAgICAgIG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7CisgICAgICAgIG5v
ZGUtPnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIAog
ICAgIGNhc2UgU3RyaW5nQ2hhckNvZGVBdDoKLSAgICAgICAgbm9kZS5zZXRDYW5FeGl0KHRydWUp
OwotICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjU3RyaW5nKTsKLSAg
ICAgICAgZm9yTm9kZShub2RlLmNoaWxkMigpKS5maWx0ZXIoU3BlY0ludDMyKTsKLSAgICAgICAg
Zm9yTm9kZShub2RlSW5kZXgpLnNldChTcGVjSW50MzIpOworICAgICAgICBub2RlLT5zZXRDYW5F
eGl0KHRydWUpOworICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5maWx0ZXIoU3BlY1N0
cmluZyk7CisgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQyKCkpLmZpbHRlcihTcGVjSW50MzIp
OworICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjSW50MzIpOwogICAgICAgICBicmVhazsK
ICAgICAgICAgCiAgICAgY2FzZSBTdHJpbmdDaGFyQXQ6Ci0gICAgICAgIG5vZGUuc2V0Q2FuRXhp
dCh0cnVlKTsKLSAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY1N0cmlu
Zyk7Ci0gICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7Ci0g
ICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoU3BlY1N0cmluZyk7CisgICAgICAgIG5vZGUt
PnNldENhbkV4aXQodHJ1ZSk7CisgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRl
cihTcGVjU3RyaW5nKTsKKyAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDIoKSkuZmlsdGVyKFNw
ZWNJbnQzMik7CisgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNTdHJpbmcpOwogICAgICAg
ICBicmVhazsKICAgICAgICAgICAgIAogICAgIGNhc2UgR2V0QnlWYWw6IHsKLSAgICAgICAgbm9k
ZS5zZXRDYW5FeGl0KHRydWUpOwotICAgICAgICBzd2l0Y2ggKG5vZGUuYXJyYXlNb2RlKCkudHlw
ZSgpKSB7CisgICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7CisgICAgICAgIHN3aXRjaCAo
bm9kZS0+YXJyYXlNb2RlKCkudHlwZSgpKSB7CiAgICAgICAgIGNhc2UgQXJyYXk6OlNlbGVjdFVz
aW5nUHJlZGljdGlvbnM6CiAgICAgICAgIGNhc2UgQXJyYXk6OlVucHJvZmlsZWQ6CiAgICAgICAg
IGNhc2UgQXJyYXk6OlVuZGVjaWRlZDoKQEAgLTk2Miw4MSArOTU5LDgxIEBAIGJvb2wgQWJzdHJh
Y3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgICAgIG1faXNWYWxpZCA9IGZh
bHNlOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OkdlbmVyaWM6Ci0g
ICAgICAgICAgICBjbG9iYmVyV29ybGQobm9kZS5jb2RlT3JpZ2luLCBpbmRleEluQmxvY2spOwot
ICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLm1ha2VUb3AoKTsKKyAgICAgICAgICAgIGNs
b2JiZXJXb3JsZChub2RlLT5jb2RlT3JpZ2luLCBpbmRleEluQmxvY2spOworICAgICAgICAgICAg
Zm9yTm9kZShub2RlKS5tYWtlVG9wKCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2Fz
ZSBBcnJheTo6U3RyaW5nOgotICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMigpKS5maWx0
ZXIoU3BlY0ludDMyKTsKLSAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoU3BlY1N0
cmluZyk7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMigpKS5maWx0ZXIoU3BlY0lu
dDMyKTsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNTdHJpbmcpOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OkFyZ3VtZW50czoKLSAgICAgICAgICAg
IGZvck5vZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7Ci0gICAgICAgICAgICBm
b3JOb2RlKG5vZGVJbmRleCkubWFrZVRvcCgpOworICAgICAgICAgICAgZm9yTm9kZShub2RlLT5j
aGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLm1h
a2VUb3AoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEFycmF5OjpJbnQzMjoK
LSAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7Ci0g
ICAgICAgICAgICBpZiAobm9kZS5hcnJheU1vZGUoKS5pc091dE9mQm91bmRzKCkpIHsKLSAgICAg
ICAgICAgICAgICBjbG9iYmVyV29ybGQobm9kZS5jb2RlT3JpZ2luLCBpbmRleEluQmxvY2spOwot
ICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5tYWtlVG9wKCk7CisgICAgICAgICAg
ICBmb3JOb2RlKG5vZGUtPmNoaWxkMigpKS5maWx0ZXIoU3BlY0ludDMyKTsKKyAgICAgICAgICAg
IGlmIChub2RlLT5hcnJheU1vZGUoKS5pc091dE9mQm91bmRzKCkpIHsKKyAgICAgICAgICAgICAg
ICBjbG9iYmVyV29ybGQobm9kZS0+Y29kZU9yaWdpbiwgaW5kZXhJbkJsb2NrKTsKKyAgICAgICAg
ICAgICAgICBmb3JOb2RlKG5vZGUpLm1ha2VUb3AoKTsKICAgICAgICAgICAgIH0gZWxzZQotICAg
ICAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoU3BlY0ludDMyKTsKKyAgICAgICAg
ICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjSW50MzIpOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIGNhc2UgQXJyYXk6OkRvdWJsZToKLSAgICAgICAgICAgIGZvck5vZGUobm9kZS5j
aGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7Ci0gICAgICAgICAgICBpZiAobm9kZS5hcnJheU1v
ZGUoKS5pc091dE9mQm91bmRzKCkpIHsKLSAgICAgICAgICAgICAgICBjbG9iYmVyV29ybGQobm9k
ZS5jb2RlT3JpZ2luLCBpbmRleEluQmxvY2spOwotICAgICAgICAgICAgICAgIGZvck5vZGUobm9k
ZUluZGV4KS5tYWtlVG9wKCk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKG5vZGUuYXJyYXlNb2Rl
KCkuaXNTYW5lQ2hhaW4oKSkKLSAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0
KFNwZWNEb3VibGUpOworICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDIoKSkuZmlsdGVy
KFNwZWNJbnQzMik7CisgICAgICAgICAgICBpZiAobm9kZS0+YXJyYXlNb2RlKCkuaXNPdXRPZkJv
dW5kcygpKSB7CisgICAgICAgICAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUtPmNvZGVPcmlnaW4s
IGluZGV4SW5CbG9jayk7CisgICAgICAgICAgICAgICAgZm9yTm9kZShub2RlKS5tYWtlVG9wKCk7
CisgICAgICAgICAgICB9IGVsc2UgaWYgKG5vZGUtPmFycmF5TW9kZSgpLmlzU2FuZUNoYWluKCkp
CisgICAgICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0RvdWJsZSk7CiAgICAgICAg
ICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChTcGVjRG91
YmxlUmVhbCk7CisgICAgICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0RvdWJsZVJl
YWwpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3VvdXM6
CiAgICAgICAgIGNhc2UgQXJyYXk6OkFycmF5U3RvcmFnZToKICAgICAgICAgY2FzZSBBcnJheTo6
U2xvd1B1dEFycmF5U3RvcmFnZToKLSAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDIoKSku
ZmlsdGVyKFNwZWNJbnQzMik7Ci0gICAgICAgICAgICBpZiAobm9kZS5hcnJheU1vZGUoKS5pc091
dE9mQm91bmRzKCkpCi0gICAgICAgICAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUuY29kZU9yaWdp
biwgaW5kZXhJbkJsb2NrKTsKLSAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5tYWtlVG9w
KCk7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMigpKS5maWx0ZXIoU3BlY0ludDMy
KTsKKyAgICAgICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS5pc091dE9mQm91bmRzKCkpCisg
ICAgICAgICAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUtPmNvZGVPcmlnaW4sIGluZGV4SW5CbG9j
ayk7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLm1ha2VUb3AoKTsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICBjYXNlIEFycmF5OjpJbnQ4QXJyYXk6Ci0gICAgICAgICAgICBmb3JOb2Rl
KG5vZGUuY2hpbGQyKCkpLmZpbHRlcihTcGVjSW50MzIpOwotICAgICAgICAgICAgZm9yTm9kZShu
b2RlSW5kZXgpLnNldChTcGVjSW50MzIpOworICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGls
ZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChT
cGVjSW50MzIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OkludDE2
QXJyYXk6Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQyKCkpLmZpbHRlcihTcGVjSW50
MzIpOwotICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChTcGVjSW50MzIpOworICAg
ICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7CisgICAg
ICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjSW50MzIpOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIGNhc2UgQXJyYXk6OkludDMyQXJyYXk6Ci0gICAgICAgICAgICBmb3JOb2RlKG5v
ZGUuY2hpbGQyKCkpLmZpbHRlcihTcGVjSW50MzIpOwotICAgICAgICAgICAgZm9yTm9kZShub2Rl
SW5kZXgpLnNldChTcGVjSW50MzIpOworICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDIo
KSkuZmlsdGVyKFNwZWNJbnQzMik7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVj
SW50MzIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OlVpbnQ4QXJy
YXk6Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQyKCkpLmZpbHRlcihTcGVjSW50MzIp
OwotICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChTcGVjSW50MzIpOworICAgICAg
ICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7CisgICAgICAg
ICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjSW50MzIpOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIGNhc2UgQXJyYXk6OlVpbnQ4Q2xhbXBlZEFycmF5OgotICAgICAgICAgICAgZm9yTm9k
ZShub2RlLmNoaWxkMigpKS5maWx0ZXIoU3BlY0ludDMyKTsKLSAgICAgICAgICAgIGZvck5vZGUo
bm9kZUluZGV4KS5zZXQoU3BlY0ludDMyKTsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZS0+Y2hp
bGQyKCkpLmZpbHRlcihTcGVjSW50MzIpOworICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQo
U3BlY0ludDMyKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEFycmF5OjpVaW50
MTZBcnJheToKLSAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJ
bnQzMik7Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFNwZWNJbnQzMik7Cisg
ICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMigpKS5maWx0ZXIoU3BlY0ludDMyKTsKKyAg
ICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNJbnQzMik7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgY2FzZSBBcnJheTo6VWludDMyQXJyYXk6Ci0gICAgICAgICAgICBmb3JOb2Rl
KG5vZGUuY2hpbGQyKCkpLmZpbHRlcihTcGVjSW50MzIpOwotICAgICAgICAgICAgaWYgKG5vZGUu
c2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKQotICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZUlu
ZGV4KS5zZXQoU3BlY0ludDMyKTsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQyKCkp
LmZpbHRlcihTcGVjSW50MzIpOworICAgICAgICAgICAgaWYgKG5vZGUtPnNob3VsZFNwZWN1bGF0
ZUludGVnZXIoKSkKKyAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjSW50MzIp
OwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5z
ZXQoU3BlY0RvdWJsZSk7CisgICAgICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0Rv
dWJsZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6RmxvYXQzMkFy
cmF5OgotICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMigpKS5maWx0ZXIoU3BlY0ludDMy
KTsKLSAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoU3BlY0RvdWJsZSk7CisgICAg
ICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMigpKS5maWx0ZXIoU3BlY0ludDMyKTsKKyAgICAg
ICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNEb3VibGUpOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIGNhc2UgQXJyYXk6OkZsb2F0NjRBcnJheToKLSAgICAgICAgICAgIGZvck5vZGUo
bm9kZS5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7Ci0gICAgICAgICAgICBmb3JOb2RlKG5v
ZGVJbmRleCkuc2V0KFNwZWNEb3VibGUpOworICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGls
ZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChT
cGVjRG91YmxlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBkZWZhdWx0OgogICAgICAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC0xMDQ3LDQzICsxMDQ0LDQzIEBAIGJvb2wg
QWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgICAgIAogICAgIGNh
c2UgUHV0QnlWYWw6CiAgICAgY2FzZSBQdXRCeVZhbEFsaWFzOiB7Ci0gICAgICAgIG5vZGUuc2V0
Q2FuRXhpdCh0cnVlKTsKKyAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKICAgICAgICAg
RWRnZSBjaGlsZDEgPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApOwogICAgICAgICBFZGdl
IGNoaWxkMiA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSk7CiAgICAgICAgIEVkZ2UgY2hp
bGQzID0gbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAyKTsKLSAgICAgICAgc3dpdGNoIChub2Rl
LmFycmF5TW9kZSgpLm1vZGVGb3JQdXQoKS50eXBlKCkpIHsKKyAgICAgICAgc3dpdGNoIChub2Rl
LT5hcnJheU1vZGUoKS5tb2RlRm9yUHV0KCkudHlwZSgpKSB7CiAgICAgICAgIGNhc2UgQXJyYXk6
OkZvcmNlRXhpdDoKICAgICAgICAgICAgIG1faXNWYWxpZCA9IGZhbHNlOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OkdlbmVyaWM6Ci0gICAgICAgICAgICBjbG9iYmVy
V29ybGQobm9kZS5jb2RlT3JpZ2luLCBpbmRleEluQmxvY2spOworICAgICAgICAgICAgY2xvYmJl
cldvcmxkKG5vZGUtPmNvZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgY2FzZSBBcnJheTo6SW50MzI6CiAgICAgICAgICAgICBmb3JOb2RlKGNoaWxk
MSkuZmlsdGVyKFNwZWNDZWxsKTsKICAgICAgICAgICAgIGZvck5vZGUoY2hpbGQyKS5maWx0ZXIo
U3BlY0ludDMyKTsKICAgICAgICAgICAgIGZvck5vZGUoY2hpbGQzKS5maWx0ZXIoU3BlY0ludDMy
KTsKLSAgICAgICAgICAgIGlmIChub2RlLmFycmF5TW9kZSgpLmlzT3V0T2ZCb3VuZHMoKSkKLSAg
ICAgICAgICAgICAgICBjbG9iYmVyV29ybGQobm9kZS5jb2RlT3JpZ2luLCBpbmRleEluQmxvY2sp
OworICAgICAgICAgICAgaWYgKG5vZGUtPmFycmF5TW9kZSgpLmlzT3V0T2ZCb3VuZHMoKSkKKyAg
ICAgICAgICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+Y29kZU9yaWdpbiwgaW5kZXhJbkJsb2Nr
KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEFycmF5OjpEb3VibGU6CiAgICAg
ICAgICAgICBmb3JOb2RlKGNoaWxkMSkuZmlsdGVyKFNwZWNDZWxsKTsKICAgICAgICAgICAgIGZv
ck5vZGUoY2hpbGQyKS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGZvck5vZGUoY2hp
bGQzKS5maWx0ZXIoU3BlY1JlYWxOdW1iZXIpOwotICAgICAgICAgICAgaWYgKG5vZGUuYXJyYXlN
b2RlKCkuaXNPdXRPZkJvdW5kcygpKQotICAgICAgICAgICAgICAgIGNsb2JiZXJXb3JsZChub2Rl
LmNvZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7CisgICAgICAgICAgICBpZiAobm9kZS0+YXJyYXlN
b2RlKCkuaXNPdXRPZkJvdW5kcygpKQorICAgICAgICAgICAgICAgIGNsb2JiZXJXb3JsZChub2Rl
LT5jb2RlT3JpZ2luLCBpbmRleEluQmxvY2spOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IGNhc2UgQXJyYXk6OkNvbnRpZ3VvdXM6CiAgICAgICAgIGNhc2UgQXJyYXk6OkFycmF5U3RvcmFn
ZToKICAgICAgICAgICAgIGZvck5vZGUoY2hpbGQxKS5maWx0ZXIoU3BlY0NlbGwpOwogICAgICAg
ICAgICAgZm9yTm9kZShjaGlsZDIpLmZpbHRlcihTcGVjSW50MzIpOwotICAgICAgICAgICAgaWYg
KG5vZGUuYXJyYXlNb2RlKCkuaXNPdXRPZkJvdW5kcygpKQotICAgICAgICAgICAgICAgIGNsb2Ji
ZXJXb3JsZChub2RlLmNvZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7CisgICAgICAgICAgICBpZiAo
bm9kZS0+YXJyYXlNb2RlKCkuaXNPdXRPZkJvdW5kcygpKQorICAgICAgICAgICAgICAgIGNsb2Ji
ZXJXb3JsZChub2RlLT5jb2RlT3JpZ2luLCBpbmRleEluQmxvY2spOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OlNsb3dQdXRBcnJheVN0b3JhZ2U6CiAgICAgICAgICAg
ICBmb3JOb2RlKGNoaWxkMSkuZmlsdGVyKFNwZWNDZWxsKTsKICAgICAgICAgICAgIGZvck5vZGUo
Y2hpbGQyKS5maWx0ZXIoU3BlY0ludDMyKTsKLSAgICAgICAgICAgIGlmIChub2RlLmFycmF5TW9k
ZSgpLm1heVN0b3JlVG9Ib2xlKCkpCi0gICAgICAgICAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUu
Y29kZU9yaWdpbiwgaW5kZXhJbkJsb2NrKTsKKyAgICAgICAgICAgIGlmIChub2RlLT5hcnJheU1v
ZGUoKS5tYXlTdG9yZVRvSG9sZSgpKQorICAgICAgICAgICAgICAgIGNsb2JiZXJXb3JsZChub2Rl
LT5jb2RlT3JpZ2luLCBpbmRleEluQmxvY2spOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IGNhc2UgQXJyYXk6OkFyZ3VtZW50czoKICAgICAgICAgICAgIGZvck5vZGUoY2hpbGQxKS5maWx0
ZXIoU3BlY0NlbGwpOwpAQCAtMTA5Miw3ICsxMDg5LDcgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpl
eGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICBjYXNlIEFycmF5OjpJbnQ4QXJyYXk6CiAgICAg
ICAgICAgICBmb3JOb2RlKGNoaWxkMSkuZmlsdGVyKFNwZWNDZWxsKTsKICAgICAgICAgICAgIGZv
ck5vZGUoY2hpbGQyKS5maWx0ZXIoU3BlY0ludDMyKTsKLSAgICAgICAgICAgIGlmIChtX2dyYXBo
W2NoaWxkM10uc2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKQorICAgICAgICAgICAgaWYgKGNoaWxk
My0+c2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKQogICAgICAgICAgICAgICAgIGZvck5vZGUoY2hp
bGQzKS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAg
ICBmb3JOb2RlKGNoaWxkMykuZmlsdGVyKFNwZWNOdW1iZXIpOwpAQCAtMTEwMCw3ICsxMDk3LDcg
QEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICBjYXNl
IEFycmF5OjpJbnQxNkFycmF5OgogICAgICAgICAgICAgZm9yTm9kZShjaGlsZDEpLmZpbHRlcihT
cGVjQ2VsbCk7CiAgICAgICAgICAgICBmb3JOb2RlKGNoaWxkMikuZmlsdGVyKFNwZWNJbnQzMik7
Ci0gICAgICAgICAgICBpZiAobV9ncmFwaFtjaGlsZDNdLnNob3VsZFNwZWN1bGF0ZUludGVnZXIo
KSkKKyAgICAgICAgICAgIGlmIChjaGlsZDMtPnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKSkKICAg
ICAgICAgICAgICAgICBmb3JOb2RlKGNoaWxkMykuZmlsdGVyKFNwZWNJbnQzMik7CiAgICAgICAg
ICAgICBlbHNlCiAgICAgICAgICAgICAgICAgZm9yTm9kZShjaGlsZDMpLmZpbHRlcihTcGVjTnVt
YmVyKTsKQEAgLTExMDgsNyArMTEwNSw3IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1
bnNpZ25lZCBpbmQKICAgICAgICAgY2FzZSBBcnJheTo6SW50MzJBcnJheToKICAgICAgICAgICAg
IGZvck5vZGUoY2hpbGQxKS5maWx0ZXIoU3BlY0NlbGwpOwogICAgICAgICAgICAgZm9yTm9kZShj
aGlsZDIpLmZpbHRlcihTcGVjSW50MzIpOwotICAgICAgICAgICAgaWYgKG1fZ3JhcGhbY2hpbGQz
XS5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpCisgICAgICAgICAgICBpZiAoY2hpbGQzLT5zaG91
bGRTcGVjdWxhdGVJbnRlZ2VyKCkpCiAgICAgICAgICAgICAgICAgZm9yTm9kZShjaGlsZDMpLmZp
bHRlcihTcGVjSW50MzIpOwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIGZvck5v
ZGUoY2hpbGQzKS5maWx0ZXIoU3BlY051bWJlcik7CkBAIC0xMTE2LDcgKzExMTMsNyBAQCBib29s
IEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgIGNhc2UgQXJyYXk6
OlVpbnQ4QXJyYXk6CiAgICAgICAgICAgICBmb3JOb2RlKGNoaWxkMSkuZmlsdGVyKFNwZWNDZWxs
KTsKICAgICAgICAgICAgIGZvck5vZGUoY2hpbGQyKS5maWx0ZXIoU3BlY0ludDMyKTsKLSAgICAg
ICAgICAgIGlmIChtX2dyYXBoW2NoaWxkM10uc2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKQorICAg
ICAgICAgICAgaWYgKGNoaWxkMy0+c2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKQogICAgICAgICAg
ICAgICAgIGZvck5vZGUoY2hpbGQzKS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGVs
c2UKICAgICAgICAgICAgICAgICBmb3JOb2RlKGNoaWxkMykuZmlsdGVyKFNwZWNOdW1iZXIpOwpA
QCAtMTEyNCw3ICsxMTIxLDcgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVk
IGluZAogICAgICAgICBjYXNlIEFycmF5OjpVaW50OENsYW1wZWRBcnJheToKICAgICAgICAgICAg
IGZvck5vZGUoY2hpbGQxKS5maWx0ZXIoU3BlY0NlbGwpOwogICAgICAgICAgICAgZm9yTm9kZShj
aGlsZDIpLmZpbHRlcihTcGVjSW50MzIpOwotICAgICAgICAgICAgaWYgKG1fZ3JhcGhbY2hpbGQz
XS5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpCisgICAgICAgICAgICBpZiAoY2hpbGQzLT5zaG91
bGRTcGVjdWxhdGVJbnRlZ2VyKCkpCiAgICAgICAgICAgICAgICAgZm9yTm9kZShjaGlsZDMpLmZp
bHRlcihTcGVjSW50MzIpOwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIGZvck5v
ZGUoY2hpbGQzKS5maWx0ZXIoU3BlY051bWJlcik7CkBAIC0xMTMyLDcgKzExMjksNyBAQCBib29s
IEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgIGNhc2UgQXJyYXk6
OlVpbnQxNkFycmF5OgogICAgICAgICAgICAgZm9yTm9kZShjaGlsZDEpLmZpbHRlcihTcGVjQ2Vs
bCk7CiAgICAgICAgICAgICBmb3JOb2RlKGNoaWxkMikuZmlsdGVyKFNwZWNJbnQzMik7Ci0gICAg
ICAgICAgICBpZiAobV9ncmFwaFtjaGlsZDNdLnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKSkKKyAg
ICAgICAgICAgIGlmIChjaGlsZDMtPnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKSkKICAgICAgICAg
ICAgICAgICBmb3JOb2RlKGNoaWxkMykuZmlsdGVyKFNwZWNJbnQzMik7CiAgICAgICAgICAgICBl
bHNlCiAgICAgICAgICAgICAgICAgZm9yTm9kZShjaGlsZDMpLmZpbHRlcihTcGVjTnVtYmVyKTsK
QEAgLTExNDAsNyArMTEzNyw3IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25l
ZCBpbmQKICAgICAgICAgY2FzZSBBcnJheTo6VWludDMyQXJyYXk6CiAgICAgICAgICAgICBmb3JO
b2RlKGNoaWxkMSkuZmlsdGVyKFNwZWNDZWxsKTsKICAgICAgICAgICAgIGZvck5vZGUoY2hpbGQy
KS5maWx0ZXIoU3BlY0ludDMyKTsKLSAgICAgICAgICAgIGlmIChtX2dyYXBoW2NoaWxkM10uc2hv
dWxkU3BlY3VsYXRlSW50ZWdlcigpKQorICAgICAgICAgICAgaWYgKGNoaWxkMy0+c2hvdWxkU3Bl
Y3VsYXRlSW50ZWdlcigpKQogICAgICAgICAgICAgICAgIGZvck5vZGUoY2hpbGQzKS5maWx0ZXIo
U3BlY0ludDMyKTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBmb3JOb2RlKGNo
aWxkMykuZmlsdGVyKFNwZWNOdW1iZXIpOwpAQCAtMTE2MywxNjYgKzExNjAsMTg4IEBAIGJvb2wg
QWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICB9CiAgICAgICAgICAgICAK
ICAgICBjYXNlIEFycmF5UHVzaDoKLSAgICAgICAgbm9kZS5zZXRDYW5FeGl0KHRydWUpOwotICAg
ICAgICBzd2l0Y2ggKG5vZGUuYXJyYXlNb2RlKCkudHlwZSgpKSB7CisgICAgICAgIG5vZGUtPnNl
dENhbkV4aXQodHJ1ZSk7CisgICAgICAgIHN3aXRjaCAobm9kZS0+YXJyYXlNb2RlKCkudHlwZSgp
KSB7CiAgICAgICAgIGNhc2UgQXJyYXk6OkludDMyOgotICAgICAgICAgICAgZm9yTm9kZShub2Rl
LmNoaWxkMigpKS5maWx0ZXIoU3BlY0ludDMyKTsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZS0+
Y2hpbGQyKCkpLmZpbHRlcihTcGVjSW50MzIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IGNhc2UgQXJyYXk6OkRvdWJsZToKLSAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDIoKSku
ZmlsdGVyKFNwZWNSZWFsTnVtYmVyKTsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQy
KCkpLmZpbHRlcihTcGVjUmVhbE51bWJlcik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ZGVmYXVsdDoKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIGNsb2JiZXJX
b3JsZChub2RlLmNvZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7Ci0gICAgICAgIGZvck5vZGUobm9k
ZUluZGV4KS5zZXQoU3BlY051bWJlcik7CisgICAgICAgIGNsb2JiZXJXb3JsZChub2RlLT5jb2Rl
T3JpZ2luLCBpbmRleEluQmxvY2spOworICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjTnVt
YmVyKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICBjYXNlIEFycmF5UG9wOgot
ICAgICAgICBub2RlLnNldENhbkV4aXQodHJ1ZSk7Ci0gICAgICAgIGNsb2JiZXJXb3JsZChub2Rl
LmNvZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7Ci0gICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5t
YWtlVG9wKCk7CisgICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7CisgICAgICAgIGNsb2Ji
ZXJXb3JsZChub2RlLT5jb2RlT3JpZ2luLCBpbmRleEluQmxvY2spOworICAgICAgICBmb3JOb2Rl
KG5vZGUpLm1ha2VUb3AoKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICBjYXNl
IFJlZ0V4cEV4ZWM6CiAgICAgY2FzZSBSZWdFeHBUZXN0OgotICAgICAgICBub2RlLnNldENhbkV4
aXQoCi0gICAgICAgICAgICAhaXNDZWxsU3BlY3VsYXRpb24oZm9yTm9kZShub2RlLmNoaWxkMSgp
KS5tX3R5cGUpCi0gICAgICAgICAgICB8fCAhaXNDZWxsU3BlY3VsYXRpb24oZm9yTm9kZShub2Rl
LmNoaWxkMigpKS5tX3R5cGUpKTsKLSAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0
ZXIoU3BlY0NlbGwpOwotICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQyKCkpLmZpbHRlcihTcGVj
Q2VsbCk7Ci0gICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5tYWtlVG9wKCk7CisgICAgICAgIG5v
ZGUtPnNldENhbkV4aXQoCisgICAgICAgICAgICAhaXNDZWxsU3BlY3VsYXRpb24oZm9yTm9kZShu
b2RlLT5jaGlsZDEoKSkubV90eXBlKQorICAgICAgICAgICAgfHwgIWlzQ2VsbFNwZWN1bGF0aW9u
KGZvck5vZGUobm9kZS0+Y2hpbGQyKCkpLm1fdHlwZSkpOworICAgICAgICBmb3JOb2RlKG5vZGUt
PmNoaWxkMSgpKS5maWx0ZXIoU3BlY0NlbGwpOworICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxk
MigpKS5maWx0ZXIoU3BlY0NlbGwpOworICAgICAgICBmb3JOb2RlKG5vZGUpLm1ha2VUb3AoKTsK
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICBjYXNlIEp1bXA6Ci0gICAgICAgIG5v
ZGUuc2V0Q2FuRXhpdChmYWxzZSk7CisgICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwog
ICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgIGNhc2UgQnJhbmNoOiB7Ci0gICAgICAg
IEJvb2xlYW5SZXN1bHQgcmVzdWx0ID0gYm9vbGVhblJlc3VsdChub2RlLCBmb3JOb2RlKG5vZGUu
Y2hpbGQxKCkpKTsKKyAgICAgICAgTm9kZSogY2hpbGQgPSBub2RlLT5jaGlsZDEoKS5ub2RlKCk7
CisgICAgICAgIEJvb2xlYW5SZXN1bHQgcmVzdWx0ID0gYm9vbGVhblJlc3VsdChub2RlLCBmb3JO
b2RlKGNoaWxkKSk7CiAgICAgICAgIGlmIChyZXN1bHQgPT0gRGVmaW5pdGVseVRydWUpIHsKICAg
ICAgICAgICAgIG1fYnJhbmNoRGlyZWN0aW9uID0gVGFrZVRydWU7Ci0gICAgICAgICAgICBub2Rl
LnNldENhbkV4aXQoZmFsc2UpOworICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBpZiAocmVzdWx0ID09IERl
ZmluaXRlbHlGYWxzZSkgewogICAgICAgICAgICAgbV9icmFuY2hEaXJlY3Rpb24gPSBUYWtlRmFs
c2U7Ci0gICAgICAgICAgICBub2RlLnNldENhbkV4aXQoZmFsc2UpOworICAgICAgICAgICAgbm9k
ZS0+c2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAg
ICAgICAvLyBGSVhNRTogVGhlIGFib3ZlIGhhbmRsZXMgdGhlIHRyaXZpYWwgY2FzZXMgb2Ygc3Bh
cnNlIGNvbmRpdGlvbmFsCiAgICAgICAgIC8vIGNvbnN0YW50IHByb3BhZ2F0aW9uLCBidXQgd2Ug
Y2FuIGRvIGJldHRlcjoKICAgICAgICAgLy8gV2UgY2FuIHNwZWNpYWxpemUgdGhlIHNvdXJjZSB2
YXJpYWJsZSdzIHZhbHVlIG9uIGVhY2ggZGlyZWN0aW9uIG9mCiAgICAgICAgIC8vIHRoZSBicmFu
Y2guCi0gICAgICAgIE5vZGUmIGNoaWxkID0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXTsKLSAgICAg
ICAgaWYgKGNoaWxkLnNob3VsZFNwZWN1bGF0ZUJvb2xlYW4oKSkKKyAgICAgICAgaWYgKGNoaWxk
LT5zaG91bGRTcGVjdWxhdGVCb29sZWFuKCkpCiAgICAgICAgICAgICBzcGVjdWxhdGVCb29sZWFu
VW5hcnkobm9kZSk7Ci0gICAgICAgIGVsc2UgaWYgKGNoaWxkLnNob3VsZFNwZWN1bGF0ZU5vblN0
cmluZ0NlbGxPck90aGVyKCkpIHsKLSAgICAgICAgICAgIG5vZGUuc2V0Q2FuRXhpdCh0cnVlKTsK
LSAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKChTcGVjQ2VsbCAmIH5T
cGVjU3RyaW5nKSB8IFNwZWNPdGhlcik7Ci0gICAgICAgIH0gZWxzZSBpZiAoY2hpbGQuc2hvdWxk
U3BlY3VsYXRlSW50ZWdlcigpKQorICAgICAgICBlbHNlIGlmIChjaGlsZC0+c2hvdWxkU3BlY3Vs
YXRlTm9uU3RyaW5nQ2VsbE9yT3RoZXIoKSkgeworICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhp
dCh0cnVlKTsKKyAgICAgICAgICAgIGZvck5vZGUoY2hpbGQpLmZpbHRlcigoU3BlY0NlbGwgJiB+
U3BlY1N0cmluZykgfCBTcGVjT3RoZXIpOworICAgICAgICB9IGVsc2UgaWYgKGNoaWxkLT5zaG91
bGRTcGVjdWxhdGVJbnRlZ2VyKCkpCiAgICAgICAgICAgICBzcGVjdWxhdGVJbnQzMlVuYXJ5KG5v
ZGUpOwotICAgICAgICBlbHNlIGlmIChjaGlsZC5zaG91bGRTcGVjdWxhdGVOdW1iZXIoKSkKKyAg
ICAgICAgZWxzZSBpZiAoY2hpbGQtPnNob3VsZFNwZWN1bGF0ZU51bWJlcigpKQogICAgICAgICAg
ICAgc3BlY3VsYXRlTnVtYmVyVW5hcnkobm9kZSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAg
IG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7CisgICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZh
bHNlKTsKICAgICAgICAgbV9icmFuY2hEaXJlY3Rpb24gPSBUYWtlQm90aDsKICAgICAgICAgYnJl
YWs7CiAgICAgfQogICAgICAgICAgICAgCiAgICAgY2FzZSBSZXR1cm46CiAgICAgICAgIG1faXNW
YWxpZCA9IGZhbHNlOwotICAgICAgICBub2RlLnNldENhbkV4aXQoZmFsc2UpOworICAgICAgICBu
b2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgIAogICAgIGNh
c2UgVGhyb3c6CiAgICAgY2FzZSBUaHJvd1JlZmVyZW5jZUVycm9yOgogICAgICAgICBtX2lzVmFs
aWQgPSBmYWxzZTsKLSAgICAgICAgbm9kZS5zZXRDYW5FeGl0KHRydWUpOworICAgICAgICBub2Rl
LT5zZXRDYW5FeGl0KHRydWUpOwogICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgIGNh
c2UgVG9QcmltaXRpdmU6IHsKLSAgICAgICAgSlNWYWx1ZSBjaGlsZENvbnN0ID0gZm9yTm9kZShu
b2RlLmNoaWxkMSgpKS52YWx1ZSgpOwotICAgICAgICBpZiAoY2hpbGRDb25zdCAmJiBjaGlsZENv
bnN0LmlzTnVtYmVyKCkgJiYgdHJ5U2V0Q29uc3RhbnQobm9kZUluZGV4LCBjaGlsZENvbnN0KSkg
eworICAgICAgICBOb2RlKiBjaGlsZCA9IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKKyAgICAgICAg
CisgICAgICAgIEpTVmFsdWUgY2hpbGRDb25zdCA9IGZvck5vZGUoY2hpbGQpLnZhbHVlKCk7Cisg
ICAgICAgIGlmIChjaGlsZENvbnN0ICYmIGNoaWxkQ29uc3QuaXNOdW1iZXIoKSAmJiB0cnlTZXRD
b25zdGFudChub2RlLCBjaGlsZENvbnN0KSkgewogICAgICAgICAgICAgbV9mb3VuZENvbnN0YW50
cyA9IHRydWU7Ci0gICAgICAgICAgICBub2RlLnNldENhbkV4aXQoZmFsc2UpOworICAgICAgICAg
ICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
fQogICAgICAgICAKLSAgICAgICAgTm9kZSYgY2hpbGQgPSBtX2dyYXBoW25vZGUuY2hpbGQxKCld
OwotICAgICAgICBpZiAoY2hpbGQuc2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKSB7CisgICAgICAg
IGlmIChjaGlsZC0+c2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKSB7CiAgICAgICAgICAgICBzcGVj
dWxhdGVJbnQzMlVuYXJ5KG5vZGUpOwotICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNl
dChTcGVjSW50MzIpOworICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0ludDMyKTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKLSAgICAgICAgQWJzdHJhY3RWYWx1ZSYg
c291cmNlID0gZm9yTm9kZShub2RlLmNoaWxkMSgpKTsKLSAgICAgICAgQWJzdHJhY3RWYWx1ZSYg
ZGVzdGluYXRpb24gPSBmb3JOb2RlKG5vZGVJbmRleCk7Ci0gICAgICAgICAgICAKKyAgICAgICAg
QWJzdHJhY3RWYWx1ZSYgc291cmNlID0gZm9yTm9kZShjaGlsZCk7CisgICAgICAgIEFic3RyYWN0
VmFsdWUmIGRlc3RpbmF0aW9uID0gZm9yTm9kZShub2RlKTsKKyAgICAgICAgCisgICAgICAgIC8v
IE5CLiBUaGUgbW9yZSBjYW5vbmljYWwgd2F5IG9mIHdyaXRpbmcgdGhpcyB3b3VsZCBoYXZlIGJl
ZW46CisgICAgICAgIC8vCisgICAgICAgIC8vIGRlc3RpbmF0aW9uID0gc291cmNlOworICAgICAg
ICAvLyBpZiAoZGVzdGluYXRpb24ubV90eXBlICYgIShTcGVjTnVtYmVyIHwgU3BlY1N0cmluZyB8
IFNwZWNCb29sZWFuKSkgeworICAgICAgICAvLyAgICAgZGVzdGluYXRpb24uZmlsdGVyKFNwZWNO
dW1iZXIgfCBTcGVjU3RyaW5nIHwgU3BlY0Jvb2xlYW4pOworICAgICAgICAvLyAgICAgQWJzdHJh
Y3RWYWx1ZSBzdHJpbmc7CisgICAgICAgIC8vICAgICBzdHJpbmcuc2V0KGdsb2JhbERhdGEtPnN0
cmluZ1N0cnVjdHVyZSk7CisgICAgICAgIC8vICAgICBkZXN0aW5hdGlvbi5tZXJnZShzdHJpbmcp
OworICAgICAgICAvLyB9CisgICAgICAgIC8vCisgICAgICAgIC8vIFRoZSByZWFzb24gd2h5IHRo
aXMgd291bGQsIGluIG1vc3Qgb3RoZXIgY2FzZXMsIGhhdmUgYmVlbiBiZXR0ZXIgaXMgdGhhdAor
ICAgICAgICAvLyB0aGVuIGRlc3RpbmF0aW9uIHdvdWxkIHByZXNlcnZlIGFueSBub24tU3BlY3Vs
YXRlZFR5cGUga25vd2xlZGdlIG9mIHNvdXJjZS4KKyAgICAgICAgLy8gQXMgaXQgc3RhbmRzLCB0
aGUgY29kZSBiZWxvdyBmb3JnZXRzIGFueSBub24tU3BlY3VsYXRlZFR5cGUga25vd2xlZGdlIHRo
YXQKKyAgICAgICAgLy8gc291cmNlIHdvdWxkIGhhdmUgaGFkLiBGb3J0dW5hdGVseSwgdGhvdWdo
LCBmb3IgdGhpbmdzIGxpa2Ugc3RyaW5ncyBhbmQKKyAgICAgICAgLy8gbnVtYmVycyBhbmQgYm9v
bGVhbnMsIHdlIGRvbid0IGNhcmUgYWJvdXQgdGhlIG5vbi1TcGVjdWxhdGVkVHlwZSBrbm93ZWRn
ZToKKyAgICAgICAgLy8gdGhlIHN0cnVjdHVyZSB3b24ndCB0ZWxsIHVzIGFueXRoaW5nIHdlIGRv
bid0IGFscmVhZHkga25vdywgYW5kIG5laXRoZXIKKyAgICAgICAgLy8gd2lsbCBBcnJheU1vZGVz
LiBBbmQgaWYgdGhlIHNvdXJjZSB3YXMgYSBtZWFuaW5nZnVsIGNvbnN0YW50IHRoZW4gd2UKKyAg
ICAgICAgLy8gd291bGQgaGF2ZSBoYW5kbGVkIHRoYXQgYWJvdmUuIFVuZm9ydHVuYXRlbHksIHRo
aXMgZG9lcyBtZWFuIHRoYXQKKyAgICAgICAgLy8gVG9QcmltaXRpdmUgd2lsbCBjdXJyZW50bHkg
Zm9yZ2V0IHN0cmluZyBjb25zdGFudHMuIEJ1dCB0aGF0J3Mgbm90IGEgYmlnCisgICAgICAgIC8v
IGRlYWwgc2luY2Ugd2UgZG9uJ3QgZG8gYW55IG9wdGltaXphdGlvbiBvbiB0aG9zZSBjdXJyZW50
bHkuCisgICAgICAgIAogICAgICAgICBTcGVjdWxhdGVkVHlwZSB0eXBlID0gc291cmNlLm1fdHlw
ZTsKICAgICAgICAgaWYgKHR5cGUgJiB+KFNwZWNOdW1iZXIgfCBTcGVjU3RyaW5nIHwgU3BlY0Jv
b2xlYW4pKSB7CiAgICAgICAgICAgICB0eXBlICY9IChTcGVjTnVtYmVyIHwgU3BlY1N0cmluZyB8
IFNwZWNCb29sZWFuKTsKICAgICAgICAgICAgIHR5cGUgfD0gU3BlY1N0cmluZzsKICAgICAgICAg
fQogICAgICAgICBkZXN0aW5hdGlvbi5zZXQodHlwZSk7Ci0gICAgICAgIG5vZGUuc2V0Q2FuRXhp
dChmYWxzZSk7CisgICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICBicmVh
azsKICAgICB9CiAgICAgICAgICAgICAKICAgICBjYXNlIFN0ckNhdDoKLSAgICAgICAgbm9kZS5z
ZXRDYW5FeGl0KGZhbHNlKTsKLSAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChTcGVjU3Ry
aW5nKTsKKyAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CisgICAgICAgIGZvck5vZGUo
bm9kZSkuc2V0KFNwZWNTdHJpbmcpOwogICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAg
IGNhc2UgTmV3QXJyYXk6Ci0gICAgICAgIG5vZGUuc2V0Q2FuRXhpdCh0cnVlKTsKLSAgICAgICAg
Zm9yTm9kZShub2RlSW5kZXgpLnNldChtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLmNvZGVP
cmlnaW4pLT5hcnJheVN0cnVjdHVyZUZvckluZGV4aW5nVHlwZUR1cmluZ0FsbG9jYXRpb24obm9k
ZS5pbmRleGluZ1R5cGUoKSkpOworICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOworICAg
ICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUt
PmNvZGVPcmlnaW4pLT5hcnJheVN0cnVjdHVyZUZvckluZGV4aW5nVHlwZUR1cmluZ0FsbG9jYXRp
b24obm9kZS0+aW5kZXhpbmdUeXBlKCkpKTsKICAgICAgICAgbV9oYXZlU3RydWN0dXJlcyA9IHRy
dWU7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAKICAgICBjYXNlIE5ld0FycmF5QnVmZmVyOgot
ICAgICAgICBub2RlLnNldENhbkV4aXQodHJ1ZSk7Ci0gICAgICAgIGZvck5vZGUobm9kZUluZGV4
KS5zZXQobV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS5jb2RlT3JpZ2luKS0+YXJyYXlTdHJ1
Y3R1cmVGb3JJbmRleGluZ1R5cGVEdXJpbmdBbGxvY2F0aW9uKG5vZGUuaW5kZXhpbmdUeXBlKCkp
KTsKKyAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKKyAgICAgICAgZm9yTm9kZShub2Rl
KS5zZXQobV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+Y29kZU9yaWdpbiktPmFycmF5U3Ry
dWN0dXJlRm9ySW5kZXhpbmdUeXBlRHVyaW5nQWxsb2NhdGlvbihub2RlLT5pbmRleGluZ1R5cGUo
KSkpOwogICAgICAgICBtX2hhdmVTdHJ1Y3R1cmVzID0gdHJ1ZTsKICAgICAgICAgYnJlYWs7CiAK
ICAgICBjYXNlIE5ld0FycmF5V2l0aFNpemU6Ci0gICAgICAgIG5vZGUuc2V0Q2FuRXhpdCh0cnVl
KTsKLSAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY0ludDMyKTsKLSAg
ICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChTcGVjQXJyYXkpOworICAgICAgICBub2RlLT5z
ZXRDYW5FeGl0KHRydWUpOworICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5maWx0ZXIo
U3BlY0ludDMyKTsKKyAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0FycmF5KTsKICAgICAg
ICAgbV9oYXZlU3RydWN0dXJlcyA9IHRydWU7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
CiAgICAgY2FzZSBOZXdSZWdleHA6Ci0gICAgICAgIG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7Ci0g
ICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQobV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9k
ZS5jb2RlT3JpZ2luKS0+cmVnRXhwU3RydWN0dXJlKCkpOworICAgICAgICBub2RlLT5zZXRDYW5F
eGl0KGZhbHNlKTsKKyAgICAgICAgZm9yTm9kZShub2RlKS5zZXQobV9ncmFwaC5nbG9iYWxPYmpl
Y3RGb3Iobm9kZS0+Y29kZU9yaWdpbiktPnJlZ0V4cFN0cnVjdHVyZSgpKTsKICAgICAgICAgbV9o
YXZlU3RydWN0dXJlcyA9IHRydWU7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAg
Y2FzZSBDb252ZXJ0VGhpczogewotICAgICAgICBOb2RlJiBjaGlsZCA9IG1fZ3JhcGhbbm9kZS5j
aGlsZDEoKV07Ci0gICAgICAgIEFic3RyYWN0VmFsdWUmIHNvdXJjZSA9IGZvck5vZGUobm9kZS5j
aGlsZDEoKSk7Ci0gICAgICAgIEFic3RyYWN0VmFsdWUmIGRlc3RpbmF0aW9uID0gZm9yTm9kZShu
b2RlSW5kZXgpOworICAgICAgICBOb2RlKiBjaGlsZCA9IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsK
KyAgICAgICAgQWJzdHJhY3RWYWx1ZSYgc291cmNlID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSk7
CisgICAgICAgIEFic3RyYWN0VmFsdWUmIGRlc3RpbmF0aW9uID0gZm9yTm9kZShub2RlKTsKICAg
ICAgICAgICAgIAogICAgICAgICBpZiAoaXNPYmplY3RTcGVjdWxhdGlvbihzb3VyY2UubV90eXBl
KSkgewogICAgICAgICAgICAgLy8gVGhpcyBpcyB0aGUgc2ltcGxlIGNhc2UuIFdlIGFscmVhZHkg
a25vdyB0aGF0IHRoZSBzb3VyY2UgaXMgYW4KICAgICAgICAgICAgIC8vIG9iamVjdCwgc28gdGhl
cmUncyBub3RoaW5nIHRvIGRvLiBJIGRvbid0IHRoaW5rIHRoaXMgY2FzZSB3aWxsCiAgICAgICAg
ICAgICAvLyBiZSBoaXQsIGJ1dCB0aGVuIGFnYWluLCB5b3UgbmV2ZXIga25vdy4KICAgICAgICAg
ICAgIGRlc3RpbmF0aW9uID0gc291cmNlOwotICAgICAgICAgICAgbm9kZS5zZXRDYW5FeGl0KGZh
bHNlKTsKKyAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICAgICAg
bV9mb3VuZENvbnN0YW50cyA9IHRydWU7IC8vIFRlbGwgdGhlIGNvbnN0YW50IGZvbGRlciB0byB0
dXJuIHRoaXMgaW50byBJZGVudGl0eS4KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAg
ICAgICAgIAotICAgICAgICBub2RlLnNldENhbkV4aXQodHJ1ZSk7CisgICAgICAgIG5vZGUtPnNl
dENhbkV4aXQodHJ1ZSk7CiAgICAgICAgIAotICAgICAgICBpZiAoaXNPdGhlclNwZWN1bGF0aW9u
KGNoaWxkLnByZWRpY3Rpb24oKSkpIHsKKyAgICAgICAgaWYgKGlzT3RoZXJTcGVjdWxhdGlvbihj
aGlsZC0+cHJlZGljdGlvbigpKSkgewogICAgICAgICAgICAgc291cmNlLmZpbHRlcihTcGVjT3Ro
ZXIpOwogICAgICAgICAgICAgZGVzdGluYXRpb24uc2V0KFNwZWNPYmplY3RPdGhlcik7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgaWYgKGlzT2JqZWN0
U3BlY3VsYXRpb24oY2hpbGQucHJlZGljdGlvbigpKSkgeworICAgICAgICBpZiAoaXNPYmplY3RT
cGVjdWxhdGlvbihjaGlsZC0+cHJlZGljdGlvbigpKSkgewogICAgICAgICAgICAgc291cmNlLmZp
bHRlcihTcGVjT2JqZWN0TWFzayk7CiAgICAgICAgICAgICBkZXN0aW5hdGlvbiA9IHNvdXJjZTsK
ICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTMzNCwxMCArMTM1MywxMCBAQCBib29sIEFic3RyYWN0
U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgfQogCiAgICAgY2FzZSBDcmVhdGVUaGlz
OiB7Ci0gICAgICAgIEFic3RyYWN0VmFsdWUmIHNvdXJjZSA9IGZvck5vZGUobm9kZS5jaGlsZDEo
KSk7Ci0gICAgICAgIEFic3RyYWN0VmFsdWUmIGRlc3RpbmF0aW9uID0gZm9yTm9kZShub2RlSW5k
ZXgpOworICAgICAgICBBYnN0cmFjdFZhbHVlJiBzb3VyY2UgPSBmb3JOb2RlKG5vZGUtPmNoaWxk
MSgpKTsKKyAgICAgICAgQWJzdHJhY3RWYWx1ZSYgZGVzdGluYXRpb24gPSBmb3JOb2RlKG5vZGUp
OwogICAgICAgICAKLSAgICAgICAgbm9kZS5zZXRDYW5FeGl0KCFpc0NlbGxTcGVjdWxhdGlvbihz
b3VyY2UubV90eXBlKSk7CisgICAgICAgIG5vZGUtPnNldENhbkV4aXQoIWlzQ2VsbFNwZWN1bGF0
aW9uKHNvdXJjZS5tX3R5cGUpKTsKICAgICAgICAgICAgIAogICAgICAgICBzb3VyY2UuZmlsdGVy
KFNwZWNGdW5jdGlvbik7CiAgICAgICAgIGRlc3RpbmF0aW9uLnNldChTcGVjRmluYWxPYmplY3Qp
OwpAQCAtMTM0NSw0MSArMTM2NCw0MSBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5z
aWduZWQgaW5kCiAgICAgfQogICAgICAgICAKICAgICBjYXNlIEluaGVyaXRvcklEV2F0Y2hwb2lu
dDoKLSAgICAgICAgbm9kZS5zZXRDYW5FeGl0KHRydWUpOworICAgICAgICBub2RlLT5zZXRDYW5F
eGl0KHRydWUpOwogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgTmV3T2JqZWN0OgotICAgICAg
ICBub2RlLnNldENhbkV4aXQoZmFsc2UpOwotICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0
KG5vZGUuc3RydWN0dXJlKCkpOworICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKKyAg
ICAgICAgZm9yTm9kZShub2RlKS5zZXQobm9kZS0+c3RydWN0dXJlKCkpOwogICAgICAgICBtX2hh
dmVTdHJ1Y3R1cmVzID0gdHJ1ZTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgIAogICAgIGNhc2Ug
Q3JlYXRlQWN0aXZhdGlvbjoKLSAgICAgICAgbm9kZS5zZXRDYW5FeGl0KGZhbHNlKTsKLSAgICAg
ICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0Rm9yKG5v
ZGUuY29kZU9yaWdpbiktPmFjdGl2YXRpb25TdHJ1Y3R1cmUoKSk7CisgICAgICAgIG5vZGUtPnNl
dENhbkV4aXQoZmFsc2UpOworICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0Rm9yKG5vZGUtPmNvZGVPcmlnaW4pLT5hY3RpdmF0aW9uU3RydWN0dXJlKCkp
OwogICAgICAgICBtX2hhdmVTdHJ1Y3R1cmVzID0gdHJ1ZTsKICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIAogICAgIGNhc2UgQ3JlYXRlQXJndW1lbnRzOgotICAgICAgICBub2RlLnNldENhbkV4aXQo
ZmFsc2UpOwotICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3RGb3Iobm9kZS5jb2RlT3JpZ2luKS0+YXJndW1lbnRzU3RydWN0dXJlKCkpOworICAg
ICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKKyAgICAgICAgZm9yTm9kZShub2RlKS5zZXQo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdEZvcihub2RlLT5jb2RlT3JpZ2luKS0+YXJndW1lbnRz
U3RydWN0dXJlKCkpOwogICAgICAgICBtX2hhdmVTdHJ1Y3R1cmVzID0gdHJ1ZTsKICAgICAgICAg
YnJlYWs7CiAgICAgICAgIAogICAgIGNhc2UgVGVhck9mZkFjdGl2YXRpb246CiAgICAgY2FzZSBU
ZWFyT2ZmQXJndW1lbnRzOgotICAgICAgICBub2RlLnNldENhbkV4aXQoZmFsc2UpOworICAgICAg
ICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgLy8gRG9lcyBub3RoaW5nIHRoYXQg
aXMgdXNlci12aXNpYmxlLgogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgQ2hlY2tBcmd1bWVu
dHNOb3RDcmVhdGVkOgogICAgICAgICBpZiAoaXNFbXB0eVNwZWN1bGF0aW9uKAogICAgICAgICAg
ICAgICAgIG1fdmFyaWFibGVzLm9wZXJhbmQoCi0gICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgu
YXJndW1lbnRzUmVnaXN0ZXJGb3Iobm9kZS5jb2RlT3JpZ2luKSkubV90eXBlKSkgewotICAgICAg
ICAgICAgbm9kZS5zZXRDYW5FeGl0KGZhbHNlKTsKKyAgICAgICAgICAgICAgICAgICAgbV9ncmFw
aC5hcmd1bWVudHNSZWdpc3RlckZvcihub2RlLT5jb2RlT3JpZ2luKSkubV90eXBlKSkgeworICAg
ICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgICAgICBtX2ZvdW5kQ29u
c3RhbnRzID0gdHJ1ZTsKICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBub2RlLnNldENhbkV4
aXQodHJ1ZSk7CisgICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOwogICAgICAgICBi
cmVhazsKICAgICAgICAgCiAgICAgY2FzZSBHZXRNeUFyZ3VtZW50c0xlbmd0aDoKQEAgLTEzODcs
MTExICsxNDA2LDExMSBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5k
CiAgICAgICAgIC8vIHRoZSBhcmd1bWVudHMgYSBiaXQuIE5vdGUgdGhhdCB0aGlzIGlzIG5vdCBz
dWZmaWNpZW50IHRvIGZvcmNlIGNvbnN0YW50IGZvbGRpbmcKICAgICAgICAgLy8gb2YgR2V0TXlB
cmd1bWVudHNMZW5ndGgsIGJlY2F1c2UgR2V0TXlBcmd1bWVudHNMZW5ndGggaXMgYSBjbG9iYmVy
aW5nIG9wZXJhdGlvbi4KICAgICAgICAgLy8gV2UgcGVyZm9ybSBmdXJ0aGVyIG9wdGltaXphdGlv
bnMgb24gdGhpcyBsYXRlciBvbi4KLSAgICAgICAgaWYgKG5vZGUuY29kZU9yaWdpbi5pbmxpbmVD
YWxsRnJhbWUpCi0gICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KGpzTnVtYmVyKG5v
ZGUuY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50cy5zaXplKCkgLSAxKSk7Cisg
ICAgICAgIGlmIChub2RlLT5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSkKKyAgICAgICAgICAg
IGZvck5vZGUobm9kZSkuc2V0KGpzTnVtYmVyKG5vZGUtPmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZy
YW1lLT5hcmd1bWVudHMuc2l6ZSgpIC0gMSkpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBm
b3JOb2RlKG5vZGVJbmRleCkuc2V0KFNwZWNJbnQzMik7CisgICAgICAgICAgICBmb3JOb2RlKG5v
ZGUpLnNldChTcGVjSW50MzIpOwogICAgICAgICBub2RlLnNldENhbkV4aXQoCiAgICAgICAgICAg
ICAhaXNFbXB0eVNwZWN1bGF0aW9uKAogICAgICAgICAgICAgICAgIG1fdmFyaWFibGVzLm9wZXJh
bmQoCi0gICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguYXJndW1lbnRzUmVnaXN0ZXJGb3Iobm9k
ZS5jb2RlT3JpZ2luKSkubV90eXBlKSk7CisgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguYXJn
dW1lbnRzUmVnaXN0ZXJGb3Iobm9kZS0+Y29kZU9yaWdpbikpLm1fdHlwZSkpOwogICAgICAgICBi
cmVhazsKICAgICAgICAgCiAgICAgY2FzZSBHZXRNeUFyZ3VtZW50c0xlbmd0aFNhZmU6Ci0gICAg
ICAgIG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7CisgICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFs
c2UpOwogICAgICAgICAvLyBUaGlzIHBvdGVudGlhbGx5IGNsb2JiZXJzIGFsbCBzdHJ1Y3R1cmVz
IGlmIHRoZSBhcmd1bWVudHMgb2JqZWN0IGhhZCBhIGdldHRlcgogICAgICAgICAvLyBpbnN0YWxs
ZWQgb24gdGhlIGxlbmd0aCBwcm9wZXJ0eS4KLSAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUuY29k
ZU9yaWdpbiwgaW5kZXhJbkJsb2NrKTsKKyAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUtPmNvZGVP
cmlnaW4sIGluZGV4SW5CbG9jayk7CiAgICAgICAgIC8vIFdlIGN1cnJlbnRseSBtYWtlIG5vIGd1
YXJhbnRlZSBhYm91dCB3aGF0IHRoaXMgcmV0dXJucyBiZWNhdXNlIGl0IGRvZXMgbm90CiAgICAg
ICAgIC8vIHNwZWN1bGF0ZSB0aGF0IHRoZSBsZW5ndGggcHJvcGVydHkgaXMgYWN0dWFsbHkgYSBs
ZW5ndGguCi0gICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5tYWtlVG9wKCk7CisgICAgICAgIGZv
ck5vZGUobm9kZSkubWFrZVRvcCgpOwogICAgICAgICBicmVhazsKICAgICAgICAgCiAgICAgY2Fz
ZSBHZXRNeUFyZ3VtZW50QnlWYWw6Ci0gICAgICAgIG5vZGUuc2V0Q2FuRXhpdCh0cnVlKTsKKyAg
ICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKICAgICAgICAgLy8gV2Uga25vdyB0aGF0IHRo
aXMgZXhlY3V0YWJsZSBkb2VzIG5vdCBlc2NhcGUgaXRzIGFyZ3VtZW50cywgc28gd2UgY2FuIG9w
dGltaXplCiAgICAgICAgIC8vIHRoZSBhcmd1bWVudHMgYSBiaXQuIE5vdGUgdGhhdCB0aGlzIGVu
ZHMgdXAgYmVpbmcgZnVydGhlciBvcHRpbWl6ZWQgYnkgdGhlCiAgICAgICAgIC8vIEFyZ3VtZW50
c1NpbXBsaWZpY2F0aW9uUGhhc2UuCi0gICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmls
dGVyKFNwZWNJbnQzMik7Ci0gICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5tYWtlVG9wKCk7Cisg
ICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRlcihTcGVjSW50MzIpOworICAgICAg
ICBmb3JOb2RlKG5vZGUpLm1ha2VUb3AoKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgIAogICAg
IGNhc2UgR2V0TXlBcmd1bWVudEJ5VmFsU2FmZToKLSAgICAgICAgbm9kZS5zZXRDYW5FeGl0KHRy
dWUpOworICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOwogICAgICAgICAvLyBUaGlzIHBv
dGVudGlhbGx5IGNsb2JiZXJzIGFsbCBzdHJ1Y3R1cmVzIGlmIHRoZSBwcm9wZXJ0eSB3ZSdyZSBh
Y2Nlc3NpbmcgaGFzCiAgICAgICAgIC8vIGEgZ2V0dGVyLiBXZSBkb24ndCBzcGVjdWxhdGUgYWdh
aW5zdCB0aGlzLgotICAgICAgICBjbG9iYmVyV29ybGQobm9kZS5jb2RlT3JpZ2luLCBpbmRleElu
QmxvY2spOworICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+Y29kZU9yaWdpbiwgaW5kZXhJbkJs
b2NrKTsKICAgICAgICAgLy8gQnV0IHdlIGRvIHNwZWN1bGF0ZSB0aGF0IHRoZSBpbmRleCBpcyBh
biBpbnRlZ2VyLgotICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjSW50
MzIpOworICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5maWx0ZXIoU3BlY0ludDMyKTsK
ICAgICAgICAgLy8gQW5kIHRoZSByZXN1bHQgaXMgdW5rbm93bi4KLSAgICAgICAgZm9yTm9kZShu
b2RlSW5kZXgpLm1ha2VUb3AoKTsKKyAgICAgICAgZm9yTm9kZShub2RlKS5tYWtlVG9wKCk7CiAg
ICAgICAgIGJyZWFrOwogICAgICAgICAKICAgICBjYXNlIE5ld0Z1bmN0aW9uOgogICAgIGNhc2Ug
TmV3RnVuY3Rpb25FeHByZXNzaW9uOgogICAgIGNhc2UgTmV3RnVuY3Rpb25Ob0NoZWNrOgotICAg
ICAgICBub2RlLnNldENhbkV4aXQoZmFsc2UpOwotICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCku
c2V0KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3RGb3Iobm9kZS5jb2RlT3JpZ2luKS0+ZnVuY3Rp
b25TdHJ1Y3R1cmUoKSk7CisgICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOworICAgICAg
ICBmb3JOb2RlKG5vZGUpLnNldChtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0Rm9yKG5vZGUtPmNv
ZGVPcmlnaW4pLT5mdW5jdGlvblN0cnVjdHVyZSgpKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAg
IAogICAgIGNhc2UgR2V0Q2FsbGVlOgotICAgICAgICBub2RlLnNldENhbkV4aXQoZmFsc2UpOwot
ICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFNwZWNGdW5jdGlvbik7CisgICAgICAgIG5v
ZGUtPnNldENhbkV4aXQoZmFsc2UpOworICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjRnVu
Y3Rpb24pOwogICAgICAgICBicmVhazsKICAgICAgICAgCiAgICAgY2FzZSBTZXRDYWxsZWU6CiAg
ICAgY2FzZSBTZXRNeVNjb3BlOgotICAgICAgICBub2RlLnNldENhbkV4aXQoZmFsc2UpOworICAg
ICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICAKICAgICBjYXNlIEdldFNjb3BlOiAvLyBGSVhNRTogV2UgY291bGQgZ2V0IHJpZCBvZiB0aGVz
ZSBpZiB3ZSBrbm93IHRoYXQgdGhlIEpTRnVuY3Rpb24gaXMgYSBjb25zdGFudC4gaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwNjIwMgogICAgIGNhc2UgR2V0TXlTY29w
ZToKICAgICBjYXNlIFNraXBUb3BTY29wZToKLSAgICAgICAgbm9kZS5zZXRDYW5FeGl0KGZhbHNl
KTsKLSAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChTcGVjQ2VsbE90aGVyKTsKKyAgICAg
ICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CisgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNw
ZWNDZWxsT3RoZXIpOwogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgU2tpcFNjb3BlOiB7Ci0g
ICAgICAgIG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7Ci0gICAgICAgIEpTVmFsdWUgY2hpbGQgPSBm
b3JOb2RlKG5vZGUuY2hpbGQxKCkpLnZhbHVlKCk7Ci0gICAgICAgIGlmIChjaGlsZCAmJiB0cnlT
ZXRDb25zdGFudChub2RlSW5kZXgsIEpTVmFsdWUoanNDYXN0PEpTU2NvcGUqPihjaGlsZC5hc0Nl
bGwoKSktPm5leHQoKSkpKSB7CisgICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOworICAg
ICAgICBKU1ZhbHVlIGNoaWxkID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSkudmFsdWUoKTsKKyAg
ICAgICAgaWYgKGNoaWxkICYmIHRyeVNldENvbnN0YW50KG5vZGUsIEpTVmFsdWUoanNDYXN0PEpT
U2NvcGUqPihjaGlsZC5hc0NlbGwoKSktPm5leHQoKSkpKSB7CiAgICAgICAgICAgICBtX2ZvdW5k
Q29uc3RhbnRzID0gdHJ1ZTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAg
IGZvck5vZGUobm9kZUluZGV4KS5zZXQoU3BlY0NlbGxPdGhlcik7CisgICAgICAgIGZvck5vZGUo
bm9kZSkuc2V0KFNwZWNDZWxsT3RoZXIpOwogICAgICAgICBicmVhazsKICAgICB9CiAKICAgICBj
YXNlIEdldFNjb3BlUmVnaXN0ZXJzOgotICAgICAgICBub2RlLnNldENhbkV4aXQoZmFsc2UpOwot
ICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjQ2VsbCk7Ci0gICAgICAg
IGZvck5vZGUobm9kZUluZGV4KS5jbGVhcigpOyAvLyBUaGUgcmVzdWx0IGlzIG5vdCBhIEpTIHZh
bHVlLgorICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKKyAgICAgICAgZm9yTm9kZShu
b2RlLT5jaGlsZDEoKSkuZmlsdGVyKFNwZWNDZWxsKTsKKyAgICAgICAgZm9yTm9kZShub2RlKS5j
bGVhcigpOyAvLyBUaGUgcmVzdWx0IGlzIG5vdCBhIEpTIHZhbHVlLgogICAgICAgICBicmVhazsK
IAogICAgIGNhc2UgR2V0U2NvcGVkVmFyOgotICAgICAgICBub2RlLnNldENhbkV4aXQoZmFsc2Up
OwotICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkubWFrZVRvcCgpOworICAgICAgICBub2RlLT5z
ZXRDYW5FeGl0KGZhbHNlKTsKKyAgICAgICAgZm9yTm9kZShub2RlKS5tYWtlVG9wKCk7CiAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAgY2FzZSBQdXRTY29wZWRWYXI6Ci0gICAgICAg
IG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7Ci0gICAgICAgIGNsb2JiZXJDYXB0dXJlZFZhcnMobm9k
ZS5jb2RlT3JpZ2luKTsKKyAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CisgICAgICAg
IGNsb2JiZXJDYXB0dXJlZFZhcnMobm9kZS0+Y29kZU9yaWdpbik7CiAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgCiAgICAgY2FzZSBHZXRCeUlkOgogICAgIGNhc2UgR2V0QnlJZEZsdXNoOgot
ICAgICAgICBub2RlLnNldENhbkV4aXQodHJ1ZSk7Ci0gICAgICAgIGlmICghbm9kZS5wcmVkaWN0
aW9uKCkpIHsKKyAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKKyAgICAgICAgaWYgKCFu
b2RlLT5wcmVkaWN0aW9uKCkpIHsKICAgICAgICAgICAgIG1faXNWYWxpZCA9IGZhbHNlOwogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKGlzQ2VsbFNwZWN1bGF0aW9u
KG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ucHJlZGljdGlvbigpKSkgewotICAgICAgICAgICAgZm9y
Tm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY0NlbGwpOworICAgICAgICBpZiAoaXNDZWxs
U3BlY3VsYXRpb24obm9kZS0+Y2hpbGQxKCktPnByZWRpY3Rpb24oKSkpIHsKKyAgICAgICAgICAg
IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRlcihTcGVjQ2VsbCk7CiAKLSAgICAgICAgICAg
IGlmIChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGZvck5vZGUobm9kZS5jaGlsZDEoKSkuYmVzdFBy
b3ZlblN0cnVjdHVyZSgpKSB7CisgICAgICAgICAgICBpZiAoU3RydWN0dXJlKiBzdHJ1Y3R1cmUg
PSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5iZXN0UHJvdmVuU3RydWN0dXJlKCkpIHsKICAgICAg
ICAgICAgICAgICBHZXRCeUlkU3RhdHVzIHN0YXR1cyA9IEdldEJ5SWRTdGF0dXM6OmNvbXB1dGVG
b3IoCiAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgubV9nbG9iYWxEYXRhLCBzdHJ1Y3R1cmUs
Ci0gICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgubV9jb2RlQmxvY2stPmlkZW50aWZpZXIobm9k
ZS5pZGVudGlmaWVyTnVtYmVyKCkpKTsKKyAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5tX2Nv
ZGVCbG9jay0+aWRlbnRpZmllcihub2RlLT5pZGVudGlmaWVyTnVtYmVyKCkpKTsKICAgICAgICAg
ICAgICAgICBpZiAoc3RhdHVzLmlzU2ltcGxlKCkpIHsKICAgICAgICAgICAgICAgICAgICAgLy8g
QXNzZXJ0IHRoaW5ncyB0aGF0IHdlIGNhbid0IGhhbmRsZSBhbmQgdGhhdCB0aGUgY29tcHV0ZUZv
cigpIG1ldGhvZAogICAgICAgICAgICAgICAgICAgICAvLyBhYm92ZSB3b24ndCBiZSBhYmxlIHRv
IHJldHVybi4KQEAgLTE0OTksMjMgKzE1MTgsMjMgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVj
dXRlKHVuc2lnbmVkIGluZAogICAgICAgICAgICAgICAgICAgICBBU1NFUlQoc3RhdHVzLmNoYWlu
KCkuaXNFbXB0eSgpKTsKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAg
IGlmIChzdGF0dXMuc3BlY2lmaWNWYWx1ZSgpKQotICAgICAgICAgICAgICAgICAgICAgICAgZm9y
Tm9kZShub2RlSW5kZXgpLnNldChzdGF0dXMuc3BlY2lmaWNWYWx1ZSgpKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KHN0YXR1cy5zcGVjaWZpY1ZhbHVlKCkpOwog
ICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICBmb3JOb2Rl
KG5vZGVJbmRleCkubWFrZVRvcCgpOwotICAgICAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUu
Y2hpbGQxKCkpLmZpbHRlcihzdGF0dXMuc3RydWN0dXJlU2V0KCkpOworICAgICAgICAgICAgICAg
ICAgICAgICAgZm9yTm9kZShub2RlKS5tYWtlVG9wKCk7CisgICAgICAgICAgICAgICAgICAgIGZv
ck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRlcihzdGF0dXMuc3RydWN0dXJlU2V0KCkpOwogICAg
ICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgbV9mb3VuZENvbnN0YW50cyA9
IHRydWU7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICBjbG9iYmVyV29ybGQobm9kZS5jb2RlT3Jp
Z2luLCBpbmRleEluQmxvY2spOwotICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkubWFrZVRvcCgp
OworICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+Y29kZU9yaWdpbiwgaW5kZXhJbkJsb2NrKTsK
KyAgICAgICAgZm9yTm9kZShub2RlKS5tYWtlVG9wKCk7CiAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgCiAgICAgY2FzZSBHZXRBcnJheUxlbmd0aDoKLSAgICAgICAgbm9kZS5zZXRDYW5FeGl0
KHRydWUpOyAvLyBMaWVzLCBidXQgaXQncyB0cnVlIGZvciB0aGUgY29tbW9uIGNhc2Ugb2YgSlNB
cnJheSwgc28gaXQncyBnb29kIGVub3VnaC4KLSAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNl
dChTcGVjSW50MzIpOworICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOyAvLyBMaWVzLCBi
dXQgaXQncyB0cnVlIGZvciB0aGUgY29tbW9uIGNhc2Ugb2YgSlNBcnJheSwgc28gaXQncyBnb29k
IGVub3VnaC4KKyAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0ludDMyKTsKICAgICAgICAg
YnJlYWs7CiAgICAgICAgIAogICAgIGNhc2UgQ2hlY2tFeGVjdXRhYmxlOiB7CkBAIC0xNTIzLDIz
ICsxNTQyLDIzIEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAg
ICAgICAgLy8gbW9yZSB0aG9yb3VnaGx5LiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTA2MjAwCiAgICAgICAgIC8vIEZJWE1FOiBXZSBjb3VsZCBlbGltaW5hdGUgdGhl
c2UgZW50aXJlbHkgaWYgd2Uga25vdyB0aGUgZXhhY3QgdmFsdWUgdGhhdCBmbG93cyBpbnRvIHRo
aXMuCiAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
MDYyMDEKLSAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY0NlbGwpOwot
ICAgICAgICBub2RlLnNldENhbkV4aXQodHJ1ZSk7CisgICAgICAgIGZvck5vZGUobm9kZS0+Y2hp
bGQxKCkpLmZpbHRlcihTcGVjQ2VsbCk7CisgICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7
CiAgICAgICAgIGJyZWFrOwogICAgIH0KIAogICAgIGNhc2UgQ2hlY2tTdHJ1Y3R1cmU6CiAgICAg
Y2FzZSBGb3J3YXJkQ2hlY2tTdHJ1Y3R1cmU6IHsKICAgICAgICAgLy8gRklYTUU6IFdlIHNob3Vs
ZCBiZSBhYmxlIHRvIHByb3BhZ2F0ZSB0aGUgc3RydWN0dXJlIHNldHMgb2YgY29uc3RhbnRzIChp
LmUuIHByb3RvdHlwZXMpLgotICAgICAgICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSA9IGZvck5vZGUo
bm9kZS5jaGlsZDEoKSk7CisgICAgICAgIEFic3RyYWN0VmFsdWUmIHZhbHVlID0gZm9yTm9kZShu
b2RlLT5jaGlsZDEoKSk7CiAgICAgICAgIC8vIElmIHRoaXMgc3RydWN0dXJlIGNoZWNrIGlzIGF0
dGVtcHRpbmcgdG8gcHJvdmUga25vd2xlZGdlIGFscmVhZHkgaGVsZCBpbgogICAgICAgICAvLyB0
aGUgZnV0dXJlUG9zc2libGVTdHJ1Y3R1cmUgc2V0IHRoZW4gdGhlIGNvbnN0YW50IGZvbGRpbmcg
cGhhc2Ugc2hvdWxkCiAgICAgICAgIC8vIHR1cm4gdGhpcyBpbnRvIGEgd2F0Y2hwb2ludCBpbnN0
ZWFkLgotICAgICAgICBTdHJ1Y3R1cmVTZXQmIHNldCA9IG5vZGUuc3RydWN0dXJlU2V0KCk7Cisg
ICAgICAgIFN0cnVjdHVyZVNldCYgc2V0ID0gbm9kZS0+c3RydWN0dXJlU2V0KCk7CiAgICAgICAg
IGlmICh2YWx1ZS5tX2Z1dHVyZVBvc3NpYmxlU3RydWN0dXJlLmlzU3Vic2V0T2Yoc2V0KQogICAg
ICAgICAgICAgfHwgdmFsdWUubV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuaXNTdWJzZXRPZihzZXQp
KQogICAgICAgICAgICAgbV9mb3VuZENvbnN0YW50cyA9IHRydWU7Ci0gICAgICAgIG5vZGUuc2V0
Q2FuRXhpdCgKKyAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCgKICAgICAgICAgICAgICF2YWx1ZS5t
X2N1cnJlbnRLbm93blN0cnVjdHVyZS5pc1N1YnNldE9mKHNldCkKICAgICAgICAgICAgIHx8ICFp
c0NlbGxTcGVjdWxhdGlvbih2YWx1ZS5tX3R5cGUpKTsKICAgICAgICAgdmFsdWUuZmlsdGVyKHNl
dCk7CkBAIC0xNTQ5LDcgKzE1NjgsNyBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5z
aWduZWQgaW5kCiAgICAgICAgIAogICAgIGNhc2UgU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9p
bnQ6CiAgICAgY2FzZSBGb3J3YXJkU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnQ6IHsKLSAg
ICAgICAgQWJzdHJhY3RWYWx1ZSYgdmFsdWUgPSBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpOworICAg
ICAgICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpOwogCiAg
ICAgICAgIC8vIEl0J3Mgb25seSB2YWxpZCB0byBpc3N1ZSBhIHN0cnVjdHVyZSB0cmFuc2l0aW9u
IHdhdGNocG9pbnQgaWYgd2UgYWxyZWFkeQogICAgICAgICAvLyBrbm93IHRoYXQgdGhlIHdhdGNo
cG9pbnQgY292ZXJzIGEgc3VwZXJzZXQgb2YgdGhlIHN0cnVjdHVyZXMga25vd24gdG8KQEAgLTE1
NTcsMTU0ICsxNTc2LDE1NCBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQg
aW5kCiAgICAgICAgIC8vIEN1cnJlbnRseSwgd2Ugb25seSBpc3N1ZSBzaW5nbGV0b24gd2F0Y2hw
b2ludHMgKHRoYXQgY2hlY2sgb25lIHN0cnVjdHVyZSkKICAgICAgICAgLy8gYW5kIG91ciBmdXR1
cmVQb3NzaWJsZVN0cnVjdHVyZSBzZXQgY2FuIG9ubHkgY29udGFpbiB6ZXJvLCBvbmUsIG9yIGFu
CiAgICAgICAgIC8vIGluZmluaXR5IG9mIHN0cnVjdHVyZXMuCi0gICAgICAgIEFTU0VSVCh2YWx1
ZS5tX2Z1dHVyZVBvc3NpYmxlU3RydWN0dXJlLmlzU3Vic2V0T2YoU3RydWN0dXJlU2V0KG5vZGUu
c3RydWN0dXJlKCkpKSk7CisgICAgICAgIEFTU0VSVCh2YWx1ZS5tX2Z1dHVyZVBvc3NpYmxlU3Ry
dWN0dXJlLmlzU3Vic2V0T2YoU3RydWN0dXJlU2V0KG5vZGUtPnN0cnVjdHVyZSgpKSkpOwogICAg
ICAgICAKICAgICAgICAgQVNTRVJUKHZhbHVlLmlzQ2xlYXIoKSB8fCBpc0NlbGxTcGVjdWxhdGlv
bih2YWx1ZS5tX3R5cGUpKTsgLy8gVmFsdWUgY291bGQgYmUgY2xlYXIgaWYgd2UndmUgcHJvdmVu
IG11c3QtZXhpdCBkdWUgdG8gYSBzcGVjdWxhdGlvbiBzdGF0aWNhbGx5IGtub3duIHRvIGJlIGJh
ZC4KLSAgICAgICAgdmFsdWUuZmlsdGVyKG5vZGUuc3RydWN0dXJlKCkpOworICAgICAgICB2YWx1
ZS5maWx0ZXIobm9kZS0+c3RydWN0dXJlKCkpOwogICAgICAgICBtX2hhdmVTdHJ1Y3R1cmVzID0g
dHJ1ZTsKLSAgICAgICAgbm9kZS5zZXRDYW5FeGl0KHRydWUpOworICAgICAgICBub2RlLT5zZXRD
YW5FeGl0KHRydWUpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgICAgICAKICAgICBj
YXNlIFB1dFN0cnVjdHVyZToKICAgICBjYXNlIFBoYW50b21QdXRTdHJ1Y3R1cmU6Ci0gICAgICAg
IG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7Ci0gICAgICAgIGlmICghZm9yTm9kZShub2RlLmNoaWxk
MSgpKS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5pc0NsZWFyKCkpIHsKKyAgICAgICAgbm9kZS0+
c2V0Q2FuRXhpdChmYWxzZSk7CisgICAgICAgIGlmICghZm9yTm9kZShub2RlLT5jaGlsZDEoKSku
bV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuaXNDbGVhcigpKSB7CiAgICAgICAgICAgICBjbG9iYmVy
U3RydWN0dXJlcyhpbmRleEluQmxvY2spOwotICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxk
MSgpKS5zZXQobm9kZS5zdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSgpLm5ld1N0cnVjdHVyZSk7Cisg
ICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5zZXQobm9kZS0+c3RydWN0dXJlVHJh
bnNpdGlvbkRhdGEoKS5uZXdTdHJ1Y3R1cmUpOwogICAgICAgICAgICAgbV9oYXZlU3RydWN0dXJl
cyA9IHRydWU7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBHZXRCdXR0ZXJm
bHk6CiAgICAgY2FzZSBBbGxvY2F0ZVByb3BlcnR5U3RvcmFnZToKICAgICBjYXNlIFJlYWxsb2Nh
dGVQcm9wZXJ0eVN0b3JhZ2U6Ci0gICAgICAgIG5vZGUuc2V0Q2FuRXhpdCghaXNDZWxsU3BlY3Vs
YXRpb24oZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKTsKLSAgICAgICAgZm9yTm9kZShu
b2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY0NlbGwpOwotICAgICAgICBmb3JOb2RlKG5vZGVJbmRl
eCkuY2xlYXIoKTsgLy8gVGhlIHJlc3VsdCBpcyBub3QgYSBKUyB2YWx1ZS4KKyAgICAgICAgbm9k
ZS0+c2V0Q2FuRXhpdCghaXNDZWxsU3BlY3VsYXRpb24oZm9yTm9kZShub2RlLT5jaGlsZDEoKSku
bV90eXBlKSk7CisgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRlcihTcGVjQ2Vs
bCk7CisgICAgICAgIGZvck5vZGUobm9kZSkuY2xlYXIoKTsgLy8gVGhlIHJlc3VsdCBpcyBub3Qg
YSBKUyB2YWx1ZS4KICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBDaGVja0FycmF5OiB7Ci0gICAg
ICAgIGlmIChub2RlLmFycmF5TW9kZSgpLmFscmVhZHlDaGVja2VkKG1fZ3JhcGgsIG5vZGUsIGZv
ck5vZGUobm9kZS5jaGlsZDEoKSkpKSB7CisgICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS5h
bHJlYWR5Q2hlY2tlZChtX2dyYXBoLCBub2RlLCBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKSkpIHsK
ICAgICAgICAgICAgIG1fZm91bmRDb25zdGFudHMgPSB0cnVlOwotICAgICAgICAgICAgbm9kZS5z
ZXRDYW5FeGl0KGZhbHNlKTsKKyAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgbm9kZS5zZXRDYW5FeGl0KHRy
dWUpOyAvLyBMaWVzLCBidXQgdGhpcyBpcyBmb2xsb3dlZCBieSBvcGVyYXRpb25zIChsaWtlIEdl
dEJ5VmFsKSB0aGF0IGFsd2F5cyBleGl0LCBzbyB0aGVyZSBpcyBubyBwb2ludCBpbiB1cyB0cnlp
bmcgdG8gYmUgY2xldmVyIGhlcmUuCi0gICAgICAgIHN3aXRjaCAobm9kZS5hcnJheU1vZGUoKS50
eXBlKCkpIHsKKyAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsgLy8gTGllcywgYnV0IHRo
aXMgaXMgZm9sbG93ZWQgYnkgb3BlcmF0aW9ucyAobGlrZSBHZXRCeVZhbCkgdGhhdCBhbHdheXMg
ZXhpdCwgc28gdGhlcmUgaXMgbm8gcG9pbnQgaW4gdXMgdHJ5aW5nIHRvIGJlIGNsZXZlciBoZXJl
LgorICAgICAgICBzd2l0Y2ggKG5vZGUtPmFycmF5TW9kZSgpLnR5cGUoKSkgewogICAgICAgICBj
YXNlIEFycmF5OjpTdHJpbmc6Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZp
bHRlcihTcGVjU3RyaW5nKTsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZp
bHRlcihTcGVjU3RyaW5nKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEFycmF5
OjpJbnQzMjoKICAgICAgICAgY2FzZSBBcnJheTo6RG91YmxlOgogICAgICAgICBjYXNlIEFycmF5
OjpDb250aWd1b3VzOgogICAgICAgICBjYXNlIEFycmF5OjpBcnJheVN0b3JhZ2U6CiAgICAgICAg
IGNhc2UgQXJyYXk6OlNsb3dQdXRBcnJheVN0b3JhZ2U6Ci0gICAgICAgICAgICBmb3JOb2RlKG5v
ZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjQ2VsbCk7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUt
PmNoaWxkMSgpKS5maWx0ZXIoU3BlY0NlbGwpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IGNhc2UgQXJyYXk6OkFyZ3VtZW50czoKLSAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEo
KSkuZmlsdGVyKFNwZWNBcmd1bWVudHMpOworICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGls
ZDEoKSkuZmlsdGVyKFNwZWNBcmd1bWVudHMpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IGNhc2UgQXJyYXk6OkludDhBcnJheToKLSAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEo
KSkuZmlsdGVyKFNwZWNJbnQ4QXJyYXkpOworICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGls
ZDEoKSkuZmlsdGVyKFNwZWNJbnQ4QXJyYXkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IGNhc2UgQXJyYXk6OkludDE2QXJyYXk6Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQx
KCkpLmZpbHRlcihTcGVjSW50MTZBcnJheSk7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNo
aWxkMSgpKS5maWx0ZXIoU3BlY0ludDE2QXJyYXkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIGNhc2UgQXJyYXk6OkludDMyQXJyYXk6Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hp
bGQxKCkpLmZpbHRlcihTcGVjSW50MzJBcnJheSk7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUt
PmNoaWxkMSgpKS5maWx0ZXIoU3BlY0ludDMyQXJyYXkpOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIGNhc2UgQXJyYXk6OlVpbnQ4QXJyYXk6Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUu
Y2hpbGQxKCkpLmZpbHRlcihTcGVjVWludDhBcnJheSk7CisgICAgICAgICAgICBmb3JOb2RlKG5v
ZGUtPmNoaWxkMSgpKS5maWx0ZXIoU3BlY1VpbnQ4QXJyYXkpOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIGNhc2UgQXJyYXk6OlVpbnQ4Q2xhbXBlZEFycmF5OgotICAgICAgICAgICAgZm9y
Tm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY1VpbnQ4Q2xhbXBlZEFycmF5KTsKKyAgICAg
ICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRlcihTcGVjVWludDhDbGFtcGVkQXJy
YXkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OlVpbnQxNkFycmF5
OgotICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY1VpbnQxNkFy
cmF5KTsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRlcihTcGVjVWlu
dDE2QXJyYXkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OlVpbnQz
MkFycmF5OgotICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY1Vp
bnQzMkFycmF5KTsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRlcihT
cGVjVWludDMyQXJyYXkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6
OkZsb2F0MzJBcnJheToKLSAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVy
KFNwZWNGbG9hdDMyQXJyYXkpOworICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDEoKSku
ZmlsdGVyKFNwZWNGbG9hdDMyQXJyYXkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNh
c2UgQXJyYXk6OkZsb2F0NjRBcnJheToKLSAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEo
KSkuZmlsdGVyKFNwZWNGbG9hdDY0QXJyYXkpOworICAgICAgICAgICAgZm9yTm9kZShub2RlLT5j
aGlsZDEoKSkuZmlsdGVyKFNwZWNGbG9hdDY0QXJyYXkpOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSku
ZmlsdGVyQXJyYXlNb2Rlcyhub2RlLmFycmF5TW9kZSgpLmFycmF5TW9kZXNUaGF0UGFzc0ZpbHRl
cmluZygpKTsKKyAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDEoKSkuZmlsdGVyQXJyYXlNb2Rl
cyhub2RlLT5hcnJheU1vZGUoKS5hcnJheU1vZGVzVGhhdFBhc3NGaWx0ZXJpbmcoKSk7CiAgICAg
ICAgIG1faGF2ZVN0cnVjdHVyZXMgPSB0cnVlOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAg
Y2FzZSBBcnJheWlmeTogewotICAgICAgICBpZiAobm9kZS5hcnJheU1vZGUoKS5hbHJlYWR5Q2hl
Y2tlZChtX2dyYXBoLCBub2RlLCBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpKSkgeworICAgICAgICBp
ZiAobm9kZS0+YXJyYXlNb2RlKCkuYWxyZWFkeUNoZWNrZWQobV9ncmFwaCwgbm9kZSwgZm9yTm9k
ZShub2RlLT5jaGlsZDEoKSkpKSB7CiAgICAgICAgICAgICBtX2ZvdW5kQ29uc3RhbnRzID0gdHJ1
ZTsKLSAgICAgICAgICAgIG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7CisgICAgICAgICAgICBub2Rl
LT5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAg
ICAgIEFTU0VSVChub2RlLmFycmF5TW9kZSgpLmNvbnZlcnNpb24oKSA9PSBBcnJheTo6Q29udmVy
dAotICAgICAgICAgICAgfHwgbm9kZS5hcnJheU1vZGUoKS5jb252ZXJzaW9uKCkgPT0gQXJyYXk6
OlJhZ2VDb252ZXJ0KTsKLSAgICAgICAgbm9kZS5zZXRDYW5FeGl0KHRydWUpOwotICAgICAgICBm
b3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjQ2VsbCk7Ci0gICAgICAgIGlmIChub2Rl
LmNoaWxkMigpKQotICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMigpKS5maWx0ZXIoU3Bl
Y0ludDMyKTsKKyAgICAgICAgQVNTRVJUKG5vZGUtPmFycmF5TW9kZSgpLmNvbnZlcnNpb24oKSA9
PSBBcnJheTo6Q29udmVydAorICAgICAgICAgICAgfHwgbm9kZS0+YXJyYXlNb2RlKCkuY29udmVy
c2lvbigpID09IEFycmF5OjpSYWdlQ29udmVydCk7CisgICAgICAgIG5vZGUtPnNldENhbkV4aXQo
dHJ1ZSk7CisgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRlcihTcGVjQ2VsbCk7
CisgICAgICAgIGlmIChub2RlLT5jaGlsZDIoKSkKKyAgICAgICAgICAgIGZvck5vZGUobm9kZS0+
Y2hpbGQyKCkpLmZpbHRlcihTcGVjSW50MzIpOwogICAgICAgICBjbG9iYmVyU3RydWN0dXJlcyhp
bmRleEluQmxvY2spOwotICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlckFycmF5
TW9kZXMobm9kZS5hcnJheU1vZGUoKS5hcnJheU1vZGVzVGhhdFBhc3NGaWx0ZXJpbmcoKSk7Cisg
ICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRlckFycmF5TW9kZXMobm9kZS0+YXJy
YXlNb2RlKCkuYXJyYXlNb2Rlc1RoYXRQYXNzRmlsdGVyaW5nKCkpOwogICAgICAgICBtX2hhdmVT
dHJ1Y3R1cmVzID0gdHJ1ZTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGNhc2UgQXJyYXlp
ZnlUb1N0cnVjdHVyZTogewotICAgICAgICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSA9IGZvck5vZGUo
bm9kZS5jaGlsZDEoKSk7Ci0gICAgICAgIFN0cnVjdHVyZVNldCBzZXQgPSBub2RlLnN0cnVjdHVy
ZSgpOworICAgICAgICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSA9IGZvck5vZGUobm9kZS0+Y2hpbGQx
KCkpOworICAgICAgICBTdHJ1Y3R1cmVTZXQgc2V0ID0gbm9kZS0+c3RydWN0dXJlKCk7CiAgICAg
ICAgIGlmICh2YWx1ZS5tX2Z1dHVyZVBvc3NpYmxlU3RydWN0dXJlLmlzU3Vic2V0T2Yoc2V0KQog
ICAgICAgICAgICAgfHwgdmFsdWUubV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuaXNTdWJzZXRPZihz
ZXQpKQogICAgICAgICAgICAgbV9mb3VuZENvbnN0YW50cyA9IHRydWU7Ci0gICAgICAgIG5vZGUu
c2V0Q2FuRXhpdCh0cnVlKTsKLSAgICAgICAgaWYgKG5vZGUuY2hpbGQyKCkpCi0gICAgICAgICAg
ICBmb3JOb2RlKG5vZGUuY2hpbGQyKCkpLmZpbHRlcihTcGVjSW50MzIpOworICAgICAgICBub2Rl
LT5zZXRDYW5FeGl0KHRydWUpOworICAgICAgICBpZiAobm9kZS0+Y2hpbGQyKCkpCisgICAgICAg
ICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMigpKS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAg
Y2xvYmJlclN0cnVjdHVyZXMoaW5kZXhJbkJsb2NrKTsKICAgICAgICAgdmFsdWUuZmlsdGVyKHNl
dCk7CiAgICAgICAgIG1faGF2ZVN0cnVjdHVyZXMgPSB0cnVlOwogICAgICAgICBicmVhazsKICAg
ICB9CiAgICAgY2FzZSBHZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlOiB7Ci0gICAgICAgIG5vZGUu
c2V0Q2FuRXhpdChmYWxzZSk7Ci0gICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5jbGVhcigpOwor
ICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKKyAgICAgICAgZm9yTm9kZShub2RlKS5j
bGVhcigpOwogICAgICAgICBicmVhazsgCiAgICAgfQogICAgIGNhc2UgR2V0QnlPZmZzZXQ6Ci0g
ICAgICAgIGlmICghbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5oYXNTdG9yYWdlUmVzdWx0KCkpIHsK
LSAgICAgICAgICAgIG5vZGUuc2V0Q2FuRXhpdCghaXNDZWxsU3BlY3VsYXRpb24oZm9yTm9kZShu
b2RlLmNoaWxkMSgpKS5tX3R5cGUpKTsKLSAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEo
KSkuZmlsdGVyKFNwZWNDZWxsKTsKKyAgICAgICAgaWYgKCFub2RlLT5jaGlsZDEoKS0+aGFzU3Rv
cmFnZVJlc3VsdCgpKSB7CisgICAgICAgICAgICBub2RlLnNldENhbkV4aXQoIWlzQ2VsbFNwZWN1
bGF0aW9uKGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fdHlwZSkpOworICAgICAgICAgICAgZm9y
Tm9kZShub2RlLT5jaGlsZDEoKSkuZmlsdGVyKFNwZWNDZWxsKTsKICAgICAgICAgfQotICAgICAg
ICBmb3JOb2RlKG5vZGVJbmRleCkubWFrZVRvcCgpOworICAgICAgICBmb3JOb2RlKG5vZGUpLm1h
a2VUb3AoKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICBjYXNlIFB1dEJ5T2Zm
c2V0OiB7CiAgICAgICAgIGJvb2wgY2FuRXhpdCA9IGZhbHNlOwotICAgICAgICBpZiAoIW1fZ3Jh
cGhbbm9kZS5jaGlsZDEoKV0uaGFzU3RvcmFnZVJlc3VsdCgpKSB7Ci0gICAgICAgICAgICBjYW5F
eGl0IHw9ICFpc0NlbGxTcGVjdWxhdGlvbihmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSk7
Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjQ2VsbCk7Ci0g
ICAgICAgIH0KLSAgICAgICAgY2FuRXhpdCB8PSAhaXNDZWxsU3BlY3VsYXRpb24oZm9yTm9kZShu
b2RlLmNoaWxkMigpKS5tX3R5cGUpOwotICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQyKCkpLmZp
bHRlcihTcGVjQ2VsbCk7Ci0gICAgICAgIG5vZGUuc2V0Q2FuRXhpdChjYW5FeGl0KTsKKyAgICAg
ICAgaWYgKCFub2RlLT5jaGlsZDEoKS0+aGFzU3RvcmFnZVJlc3VsdCgpKSB7CisgICAgICAgICAg
ICBjYW5FeGl0IHw9ICFpc0NlbGxTcGVjdWxhdGlvbihmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5t
X3R5cGUpOworICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDEoKSkuZmlsdGVyKFNwZWND
ZWxsKTsKKyAgICAgICAgfQorICAgICAgICBjYW5FeGl0IHw9ICFpc0NlbGxTcGVjdWxhdGlvbihm
b3JOb2RlKG5vZGUtPmNoaWxkMigpKS5tX3R5cGUpOworICAgICAgICBmb3JOb2RlKG5vZGUtPmNo
aWxkMigpKS5maWx0ZXIoU3BlY0NlbGwpOworICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGNhbkV4
aXQpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgICAgICAKICAgICBjYXNlIENoZWNr
RnVuY3Rpb246IHsKLSAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IGZvck5vZGUobm9kZS5jaGlsZDEo
KSkudmFsdWUoKTsKLSAgICAgICAgaWYgKHZhbHVlID09IG5vZGUuZnVuY3Rpb24oKSkgeworICAg
ICAgICBKU1ZhbHVlIHZhbHVlID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSkudmFsdWUoKTsKKyAg
ICAgICAgaWYgKHZhbHVlID09IG5vZGUtPmZ1bmN0aW9uKCkpIHsKICAgICAgICAgICAgIG1fZm91
bmRDb25zdGFudHMgPSB0cnVlOwogICAgICAgICAgICAgQVNTRVJUKHZhbHVlKTsKLSAgICAgICAg
ICAgIG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7CisgICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0
KGZhbHNlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAg
ICBub2RlLnNldENhbkV4aXQodHJ1ZSk7IC8vIExpZXMhIFdlIGNhbiBkbyBiZXR0ZXIuCi0gICAg
ICAgIGlmICghZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXJCeVZhbHVlKG5vZGUuZnVuY3Rp
b24oKSkpIHsKKyAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsgLy8gTGllcyEgV2UgY2Fu
IGRvIGJldHRlci4KKyAgICAgICAgaWYgKCFmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5maWx0ZXJC
eVZhbHVlKG5vZGUtPmZ1bmN0aW9uKCkpKSB7CiAgICAgICAgICAgICBtX2lzVmFsaWQgPSBmYWxz
ZTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkBAIC0xNzEzLDY3ICsxNzMyLDY5IEBA
IGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgCiAgICAg
Y2FzZSBQdXRCeUlkOgogICAgIGNhc2UgUHV0QnlJZERpcmVjdDoKLSAgICAgICAgbm9kZS5zZXRD
YW5FeGl0KHRydWUpOwotICAgICAgICBpZiAoU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBmb3JOb2Rl
KG5vZGUuY2hpbGQxKCkpLmJlc3RQcm92ZW5TdHJ1Y3R1cmUoKSkgeworICAgICAgICBub2RlLT5z
ZXRDYW5FeGl0KHRydWUpOworICAgICAgICBpZiAoU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBmb3JO
b2RlKG5vZGUtPmNoaWxkMSgpKS5iZXN0UHJvdmVuU3RydWN0dXJlKCkpIHsKICAgICAgICAgICAg
IFB1dEJ5SWRTdGF0dXMgc3RhdHVzID0gUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvcigKICAgICAg
ICAgICAgICAgICBtX2dyYXBoLm1fZ2xvYmFsRGF0YSwKLSAgICAgICAgICAgICAgICBtX2dyYXBo
Lmdsb2JhbE9iamVjdEZvcihub2RlLmNvZGVPcmlnaW4pLAorICAgICAgICAgICAgICAgIG1fZ3Jh
cGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPmNvZGVPcmlnaW4pLAogICAgICAgICAgICAgICAgIHN0
cnVjdHVyZSwKLSAgICAgICAgICAgICAgICBtX2dyYXBoLm1fY29kZUJsb2NrLT5pZGVudGlmaWVy
KG5vZGUuaWRlbnRpZmllck51bWJlcigpKSwKLSAgICAgICAgICAgICAgICBub2RlLm9wKCkgPT0g
UHV0QnlJZERpcmVjdCk7CisgICAgICAgICAgICAgICAgbV9ncmFwaC5tX2NvZGVCbG9jay0+aWRl
bnRpZmllcihub2RlLT5pZGVudGlmaWVyTnVtYmVyKCkpLAorICAgICAgICAgICAgICAgIG5vZGUt
Pm9wKCkgPT0gUHV0QnlJZERpcmVjdCk7CiAgICAgICAgICAgICBpZiAoc3RhdHVzLmlzU2ltcGxl
UmVwbGFjZSgpKSB7Ci0gICAgICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0
ZXIoc3RydWN0dXJlKTsKKyAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5m
aWx0ZXIoc3RydWN0dXJlKTsKICAgICAgICAgICAgICAgICBtX2ZvdW5kQ29uc3RhbnRzID0gdHJ1
ZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlm
IChzdGF0dXMuaXNTaW1wbGVUcmFuc2l0aW9uKCkpIHsKICAgICAgICAgICAgICAgICBjbG9iYmVy
U3RydWN0dXJlcyhpbmRleEluQmxvY2spOwotICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZS5j
aGlsZDEoKSkuc2V0KHN0YXR1cy5uZXdTdHJ1Y3R1cmUoKSk7CisgICAgICAgICAgICAgICAgZm9y
Tm9kZShub2RlLT5jaGlsZDEoKSkuc2V0KHN0YXR1cy5uZXdTdHJ1Y3R1cmUoKSk7CiAgICAgICAg
ICAgICAgICAgbV9oYXZlU3RydWN0dXJlcyA9IHRydWU7CiAgICAgICAgICAgICAgICAgbV9mb3Vu
ZENvbnN0YW50cyA9IHRydWU7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9
CiAgICAgICAgIH0KLSAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY0Nl
bGwpOwotICAgICAgICBjbG9iYmVyV29ybGQobm9kZS5jb2RlT3JpZ2luLCBpbmRleEluQmxvY2sp
OworICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5maWx0ZXIoU3BlY0NlbGwpOworICAg
ICAgICBjbG9iYmVyV29ybGQobm9kZS0+Y29kZU9yaWdpbiwgaW5kZXhJbkJsb2NrKTsKICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICBjYXNlIEdldEdsb2JhbFZhcjoKLSAgICAgICAg
bm9kZS5zZXRDYW5FeGl0KGZhbHNlKTsKLSAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLm1ha2VU
b3AoKTsKKyAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CisgICAgICAgIGZvck5vZGUo
bm9kZSkubWFrZVRvcCgpOwogICAgICAgICBicmVhazsKICAgICAgICAgCiAgICAgY2FzZSBHbG9i
YWxWYXJXYXRjaHBvaW50OgotICAgICAgICBub2RlLnNldENhbkV4aXQodHJ1ZSk7CisgICAgICAg
IG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAg
ICAgY2FzZSBQdXRHbG9iYWxWYXI6CiAgICAgY2FzZSBQdXRHbG9iYWxWYXJDaGVjazoKLSAgICAg
ICAgbm9kZS5zZXRDYW5FeGl0KGZhbHNlKTsKKyAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxz
ZSk7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAgY2FzZSBDaGVja0hhc0luc3Rh
bmNlOgotICAgICAgICBub2RlLnNldENhbkV4aXQodHJ1ZSk7Ci0gICAgICAgIGZvck5vZGUobm9k
ZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNDZWxsKTsKKyAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0
cnVlKTsKKyAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDEoKSkuZmlsdGVyKFNwZWNDZWxsKTsK
ICAgICAgICAgLy8gU2FkbHksIHdlIGRvbid0IHByb3BhZ2F0ZSB0aGUgZmFjdCB0aGF0IHdlJ3Zl
IGRvbmUgQ2hlY2tIYXNJbnN0YW5jZQogICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAg
IGNhc2UgSW5zdGFuY2VPZjoKLSAgICAgICAgbm9kZS5zZXRDYW5FeGl0KHRydWUpOworICAgICAg
ICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOwogICAgICAgICAvLyBBZ2Fpbiwgc2FkbHksIHdlIGRv
bid0IHByb3BhZ2F0ZSB0aGUgZmFjdCB0aGF0IHdlJ3ZlIGRvbmUgSW5zdGFuY2VPZgotICAgICAg
ICBpZiAoIShtX2dyYXBoW25vZGUuY2hpbGQxKCldLnByZWRpY3Rpb24oKSAmIH5TcGVjQ2VsbCkg
JiYgIShmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSAmIH5TcGVjQ2VsbCkpCi0gICAgICAg
ICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjQ2VsbCk7Ci0gICAgICAgIGZv
ck5vZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKFNwZWNDZWxsKTsKLSAgICAgICAgZm9yTm9kZShu
b2RlSW5kZXgpLnNldChTcGVjQm9vbGVhbik7CisgICAgICAgIC8vIEZJWE1FOiBUaGlzIGFwcGVh
cnMgYnJva2VuOiBDaGVja0hhc0luc3RhbmNlIGFscmVhZHkgZG9lcyBhbiB1bmNvbmRpdGlvbmFs
IGNlbGwKKyAgICAgICAgLy8gY2hlY2suIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xMDc0NzkKKyAgICAgICAgaWYgKCEobm9kZS0+Y2hpbGQxKCktPnByZWRpY3Rpb24o
KSAmIH5TcGVjQ2VsbCkgJiYgIShmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX3R5cGUgJiB+U3Bl
Y0NlbGwpKQorICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDEoKSkuZmlsdGVyKFNwZWND
ZWxsKTsKKyAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDIoKSkuZmlsdGVyKFNwZWNDZWxsKTsK
KyAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0Jvb2xlYW4pOwogICAgICAgICBicmVhazsK
ICAgICAgICAgICAgIAogICAgIGNhc2UgUGhpOgogICAgIGNhc2UgRmx1c2g6Ci0gICAgICAgIG5v
ZGUuc2V0Q2FuRXhpdChmYWxzZSk7CisgICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwog
ICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgIGNhc2UgQnJlYWtwb2ludDoKLSAgICAg
ICAgbm9kZS5zZXRDYW5FeGl0KGZhbHNlKTsKKyAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxz
ZSk7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAgY2FzZSBDYWxsOgpAQCAtMTc4
MiwxOCArMTgwMywxOCBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5k
CiAgICAgY2FzZSBSZXNvbHZlQmFzZToKICAgICBjYXNlIFJlc29sdmVCYXNlU3RyaWN0UHV0Ogog
ICAgIGNhc2UgUmVzb2x2ZUdsb2JhbDoKLSAgICAgICAgbm9kZS5zZXRDYW5FeGl0KHRydWUpOwot
ICAgICAgICBjbG9iYmVyV29ybGQobm9kZS5jb2RlT3JpZ2luLCBpbmRleEluQmxvY2spOwotICAg
ICAgICBmb3JOb2RlKG5vZGVJbmRleCkubWFrZVRvcCgpOworICAgICAgICBub2RlLT5zZXRDYW5F
eGl0KHRydWUpOworICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+Y29kZU9yaWdpbiwgaW5kZXhJ
bkJsb2NrKTsKKyAgICAgICAgZm9yTm9kZShub2RlKS5tYWtlVG9wKCk7CiAgICAgICAgIGJyZWFr
OwogCiAgICAgY2FzZSBHYXJiYWdlVmFsdWU6Ci0gICAgICAgIGNsb2JiZXJXb3JsZChub2RlLmNv
ZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7Ci0gICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5tYWtl
VG9wKCk7CisgICAgICAgIGNsb2JiZXJXb3JsZChub2RlLT5jb2RlT3JpZ2luLCBpbmRleEluQmxv
Y2spOworICAgICAgICBmb3JOb2RlKG5vZGUpLm1ha2VUb3AoKTsKICAgICAgICAgYnJlYWs7CiAK
ICAgICBjYXNlIEZvcmNlT1NSRXhpdDoKLSAgICAgICAgbm9kZS5zZXRDYW5FeGl0KHRydWUpOwor
ICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOwogICAgICAgICBtX2lzVmFsaWQgPSBmYWxz
ZTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKQEAgLTE4MDEsNyArMTgyMiw3IEBAIGJv
b2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICBjYXNlIElubGluZVN0
YXJ0OgogICAgIGNhc2UgTm9wOgogICAgIGNhc2UgQ291bnRFeGVjdXRpb246Ci0gICAgICAgIG5v
ZGUuc2V0Q2FuRXhpdChmYWxzZSk7CisgICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwog
ICAgICAgICBicmVhazsKICAgICAgICAgCiAgICAgY2FzZSBMYXN0Tm9kZVR5cGU6CkBAIC0xODU0
LDE1ICsxODc1LDE0IEBAIGlubGluZSB2b2lkIEFic3RyYWN0U3RhdGU6OmNsb2JiZXJTdHJ1Y3QK
ICAgICBtX2RpZENsb2JiZXIgPSB0cnVlOwogfQogCi1pbmxpbmUgYm9vbCBBYnN0cmFjdFN0YXRl
OjptZXJnZVN0YXRlQXRUYWlsKEFic3RyYWN0VmFsdWUmIGRlc3RpbmF0aW9uLCBBYnN0cmFjdFZh
bHVlJiBpblZhcmlhYmxlLCBOb2RlSW5kZXggbm9kZUluZGV4KQoraW5saW5lIGJvb2wgQWJzdHJh
Y3RTdGF0ZTo6bWVyZ2VTdGF0ZUF0VGFpbChBYnN0cmFjdFZhbHVlJiBkZXN0aW5hdGlvbiwgQWJz
dHJhY3RWYWx1ZSYgaW5WYXJpYWJsZSwgTm9kZSogbm9kZSkKIHsKLSAgICBpZiAobm9kZUluZGV4
ID09IE5vTm9kZSkKKyAgICBpZiAoIW5vZGUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAg
ICAgCiAgICAgQWJzdHJhY3RWYWx1ZSBzb3VyY2U7CiAgICAgCi0gICAgTm9kZSYgdGFpbE5vZGUg
PSBtX2dyYXBoW25vZGVJbmRleF07Ci0gICAgaWYgKHRhaWxOb2RlLnZhcmlhYmxlQWNjZXNzRGF0
YSgpLT5pc0NhcHR1cmVkKCkpIHsKKyAgICBpZiAobm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCkt
PmlzQ2FwdHVyZWQoKSkgewogICAgICAgICAvLyBJZiBpdCdzIGNhcHR1cmVkIHRoZW4gd2Uga25v
dyB0aGF0IHdoYXRldmVyIHZhbHVlIHdhcyBzdG9yZWQgaW50byB0aGUgdmFyaWFibGUgbGFzdCBp
cyB0aGUKICAgICAgICAgLy8gb25lIHdlIGNhcmUgYWJvdXQuIFRoaXMgaXMgdHJ1ZSBldmVuIGlm
IHRoZSB2YXJpYWJsZSBhdCB0YWlsIGlzIGRlYWQsIHdoaWNoIG1pZ2h0IGhhcHBlbiBpZgogICAg
ICAgICAvLyB0aGUgbGFzdCB0aGluZyB3ZSBkaWQgdG8gdGhlIHZhcmlhYmxlIHdhcyBhIEdldExv
Y2FsIGFuZCB0aGVuIGVuZGVkIHVwIG5vdyB1c2luZyB0aGUKQEAgLTE4NzUsMjYgKzE4OTUsMjUg
QEAgaW5saW5lIGJvb2wgQWJzdHJhY3RTdGF0ZTo6bWVyZ2VTdGF0ZUF0VAogICAgICAgICBkYXRh
TG9nRigiIGZyb20gbGFzdCBhY2Nlc3MgZHVlIHRvIGNhcHR1cmVkIHZhcmlhYmxlLlxuIik7CiAj
ZW5kaWYKICAgICB9IGVsc2UgewotICAgICAgICBpZiAoIXRhaWxOb2RlLnNob3VsZEdlbmVyYXRl
KCkpIHsKKyAgICAgICAgaWYgKCFub2RlLT5zaG91bGRHZW5lcmF0ZSgpKSB7CiAgICAgICAgICAg
ICAvLyBJZiB0aGUgbm9kZSBhdCB0YWlsIGlzIGEgR2V0TG9jYWwgdGhhdCBpcyBkZWFkLCB0aGVu
IHNraXAgaXQgdG8gZ2V0IHRvIHRoZSBQaGkuCiAgICAgICAgICAgICAvLyBUaGUgUGhpIG1heSBi
ZSBsaXZlLgotICAgICAgICAgICAgaWYgKHRhaWxOb2RlLm9wKCkgIT0gR2V0TG9jYWwpCisgICAg
ICAgICAgICBpZiAobm9kZS0+b3AoKSAhPSBHZXRMb2NhbCkKICAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIG5vZGVJbmRleCA9IHRhaWxOb2Rl
LmNoaWxkMSgpLmluZGV4KCk7Ci0gICAgICAgICAgICBBU1NFUlQobV9ncmFwaFtub2RlSW5kZXhd
Lm9wKCkgPT0gUGhpKTsKLSAgICAgICAgICAgIGlmICghbV9ncmFwaFtub2RlSW5kZXhdLnNob3Vs
ZEdlbmVyYXRlKCkpCisgICAgICAgICAgICBub2RlID0gbm9kZS0+Y2hpbGQxKCkubm9kZSgpOwor
ICAgICAgICAgICAgQVNTRVJUKG5vZGUtPm9wKCkgPT0gUGhpKTsKKyAgICAgICAgICAgIGlmICgh
bm9kZS0+c2hvdWxkR2VuZXJhdGUoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW25vZGVJbmRl
eF07Ci0gICAgICAgIEFTU0VSVChub2RlLnNob3VsZEdlbmVyYXRlKCkpOworICAgICAgICBBU1NF
UlQobm9kZS0+c2hvdWxkR2VuZXJhdGUoKSk7CiAKICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BB
R0FUSU9OX1ZFUkJPU0UpCi0gICAgICAgIGRhdGFMb2dGKCIgICAgICAgICAgSXQncyBsaXZlLCBu
b2RlIEAldS5cbiIsIG5vZGVJbmRleCk7CisgICAgICAgIGRhdGFMb2dGKCIgICAgICAgICAgSXQn
cyBsaXZlLCBub2RlIEAldS5cbiIsIG5vZGUtPmluZGV4KCkpOwogI2VuZGlmCiAgICAgCi0gICAg
ICAgIHN3aXRjaCAobm9kZS5vcCgpKSB7CisgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewog
ICAgICAgICBjYXNlIFBoaToKICAgICAgICAgY2FzZSBTZXRBcmd1bWVudDoKICAgICAgICAgY2Fz
ZSBGbHVzaDoKQEAgLTE5MDksNyArMTkyOCw3IEBAIGlubGluZSBib29sIEFic3RyYWN0U3RhdGU6
Om1lcmdlU3RhdGVBdFQKICAgICAgICAgICAgIAogICAgICAgICBjYXNlIEdldExvY2FsOgogICAg
ICAgICAgICAgLy8gVGhlIGJsb2NrIHJlZmluZXMgdGhlIHZhbHVlIHdpdGggYWRkaXRpb25hbCBz
cGVjdWxhdGlvbnMuCi0gICAgICAgICAgICBzb3VyY2UgPSBmb3JOb2RlKG5vZGVJbmRleCk7Cisg
ICAgICAgICAgICBzb3VyY2UgPSBmb3JOb2RlKG5vZGUpOwogI2lmIERGR19FTkFCTEUoREVCVUdf
UFJPUEFHQVRJT05fVkVSQk9TRSkKICAgICAgICAgICAgIGRhdGFMb2dGKCIgICAgICAgICAgUmVm
aW5pbmcgdG8gIik7CiAgICAgICAgICAgICBzb3VyY2UuZHVtcChXVEY6OmRhdGFGaWxlKCkpOwpA
QCAtMTkyMCwxMSArMTkzOSwxMSBAQCBpbmxpbmUgYm9vbCBBYnN0cmFjdFN0YXRlOjptZXJnZVN0
YXRlQXRUCiAgICAgICAgIGNhc2UgU2V0TG9jYWw6CiAgICAgICAgICAgICAvLyBUaGUgYmxvY2sg
c2V0cyB0aGUgdmFyaWFibGUsIGFuZCBwb3RlbnRpYWxseSByZWZpbmVzIGl0LCBib3RoCiAgICAg
ICAgICAgICAvLyBiZWZvcmUgYW5kIGFmdGVyIHNldHRpbmcgaXQuCi0gICAgICAgICAgICBpZiAo
bm9kZS52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+c2hvdWxkVXNlRG91YmxlRm9ybWF0KCkpIHsKKyAg
ICAgICAgICAgIGlmIChub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+c2hvdWxkVXNlRG91Ymxl
Rm9ybWF0KCkpIHsKICAgICAgICAgICAgICAgICAvLyBGSVhNRTogVGhpcyB1bm5lY2Vzc2FyaWx5
IGxvc2VzIHByZWNpc2lvbi4KICAgICAgICAgICAgICAgICBzb3VyY2Uuc2V0KFNwZWNEb3VibGUp
OwogICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgc291cmNlID0gZm9yTm9kZShu
b2RlLmNoaWxkMSgpKTsKKyAgICAgICAgICAgICAgICBzb3VyY2UgPSBmb3JOb2RlKG5vZGUtPmNo
aWxkMSgpKTsKICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCiAgICAg
ICAgICAgICBkYXRhTG9nRigiICAgICAgICAgIFNldHRpbmcgdG8gIik7CiAgICAgICAgICAgICBz
b3VyY2UuZHVtcChXVEY6OmRhdGFGaWxlKCkpOwpAQCAtMTk4MiwzNSArMjAwMSwzNCBAQCBpbmxp
bmUgYm9vbCBBYnN0cmFjdFN0YXRlOjptZXJnZShCYXNpY0JsCiAgICAgcmV0dXJuIGNoYW5nZWQ7
CiB9CiAKLWlubGluZSBib29sIEFic3RyYWN0U3RhdGU6Om1lcmdlVG9TdWNjZXNzb3JzKAotICAg
IEdyYXBoJiBncmFwaCwgQmFzaWNCbG9jayogYmFzaWNCbG9jaykKK2lubGluZSBib29sIEFic3Ry
YWN0U3RhdGU6Om1lcmdlVG9TdWNjZXNzb3JzKEdyYXBoJiBncmFwaCwgQmFzaWNCbG9jayogYmFz
aWNCbG9jaykKIHsKLSAgICBOb2RlJiB0ZXJtaW5hbCA9IGdyYXBoW2Jhc2ljQmxvY2stPmxhc3Qo
KV07CisgICAgTm9kZSogdGVybWluYWwgPSBiYXNpY0Jsb2NrLT5sYXN0KCk7CiAgICAgCi0gICAg
QVNTRVJUKHRlcm1pbmFsLmlzVGVybWluYWwoKSk7CisgICAgQVNTRVJUKHRlcm1pbmFsLT5pc1Rl
cm1pbmFsKCkpOwogICAgIAotICAgIHN3aXRjaCAodGVybWluYWwub3AoKSkgeworICAgIHN3aXRj
aCAodGVybWluYWwtPm9wKCkpIHsKICAgICBjYXNlIEp1bXA6IHsKICAgICAgICAgQVNTRVJUKGJh
c2ljQmxvY2stPmNmYUJyYW5jaERpcmVjdGlvbiA9PSBJbnZhbGlkQnJhbmNoRGlyZWN0aW9uKTsK
ICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCiAgICAgICAgIGRhdGFM
b2dGKCIgICAgICAgIE1lcmdpbmcgdG8gYmxvY2sgIyV1LlxuIiwgdGVybWluYWwudGFrZW5CbG9j
a0luZGV4KCkpOwogI2VuZGlmCi0gICAgICAgIHJldHVybiBtZXJnZShiYXNpY0Jsb2NrLCBncmFw
aC5tX2Jsb2Nrc1t0ZXJtaW5hbC50YWtlbkJsb2NrSW5kZXgoKV0uZ2V0KCkpOworICAgICAgICBy
ZXR1cm4gbWVyZ2UoYmFzaWNCbG9jaywgZ3JhcGgubV9ibG9ja3NbdGVybWluYWwtPnRha2VuQmxv
Y2tJbmRleCgpXS5nZXQoKSk7CiAgICAgfQogICAgICAgICAKICAgICBjYXNlIEJyYW5jaDogewog
ICAgICAgICBBU1NFUlQoYmFzaWNCbG9jay0+Y2ZhQnJhbmNoRGlyZWN0aW9uICE9IEludmFsaWRC
cmFuY2hEaXJlY3Rpb24pOwogICAgICAgICBib29sIGNoYW5nZWQgPSBmYWxzZTsKICNpZiBERkdf
RU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCi0gICAgICAgIGRhdGFMb2dGKCIgICAg
ICAgIE1lcmdpbmcgdG8gYmxvY2sgIyV1LlxuIiwgdGVybWluYWwudGFrZW5CbG9ja0luZGV4KCkp
OworICAgICAgICBkYXRhTG9nRigiICAgICAgICBNZXJnaW5nIHRvIGJsb2NrICMldS5cbiIsIHRl
cm1pbmFsLT50YWtlbkJsb2NrSW5kZXgoKSk7CiAjZW5kaWYKICAgICAgICAgaWYgKGJhc2ljQmxv
Y2stPmNmYUJyYW5jaERpcmVjdGlvbiAhPSBUYWtlRmFsc2UpCi0gICAgICAgICAgICBjaGFuZ2Vk
IHw9IG1lcmdlKGJhc2ljQmxvY2ssIGdyYXBoLm1fYmxvY2tzW3Rlcm1pbmFsLnRha2VuQmxvY2tJ
bmRleCgpXS5nZXQoKSk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlKGJhc2ljQmxvY2ss
IGdyYXBoLm1fYmxvY2tzW3Rlcm1pbmFsLT50YWtlbkJsb2NrSW5kZXgoKV0uZ2V0KCkpOwogI2lm
IERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKICAgICAgICAgZGF0YUxvZ0Yo
IiAgICAgICAgTWVyZ2luZyB0byBibG9jayAjJXUuXG4iLCB0ZXJtaW5hbC5ub3RUYWtlbkJsb2Nr
SW5kZXgoKSk7CiAjZW5kaWYKICAgICAgICAgaWYgKGJhc2ljQmxvY2stPmNmYUJyYW5jaERpcmVj
dGlvbiAhPSBUYWtlVHJ1ZSkKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2UoYmFzaWNCbG9j
aywgZ3JhcGgubV9ibG9ja3NbdGVybWluYWwubm90VGFrZW5CbG9ja0luZGV4KCldLmdldCgpKTsK
KyAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2UoYmFzaWNCbG9jaywgZ3JhcGgubV9ibG9ja3Nb
dGVybWluYWwtPm5vdFRha2VuQmxvY2tJbmRleCgpXS5nZXQoKSk7CiAgICAgICAgIHJldHVybiBj
aGFuZ2VkOwogICAgIH0KICAgICAgICAgCkBAIC0yMDI2LDEyICsyMDQ0LDEyIEBAIGlubGluZSBi
b29sIEFic3RyYWN0U3RhdGU6Om1lcmdlVG9TdWNjZXMKICAgICB9CiB9CiAKLWlubGluZSBib29s
IEFic3RyYWN0U3RhdGU6Om1lcmdlVmFyaWFibGVCZXR3ZWVuQmxvY2tzKEFic3RyYWN0VmFsdWUm
IGRlc3RpbmF0aW9uLCBBYnN0cmFjdFZhbHVlJiBzb3VyY2UsIE5vZGVJbmRleCBkZXN0aW5hdGlv
bk5vZGVJbmRleCwgTm9kZUluZGV4IHNvdXJjZU5vZGVJbmRleCkKK2lubGluZSBib29sIEFic3Ry
YWN0U3RhdGU6Om1lcmdlVmFyaWFibGVCZXR3ZWVuQmxvY2tzKEFic3RyYWN0VmFsdWUmIGRlc3Rp
bmF0aW9uLCBBYnN0cmFjdFZhbHVlJiBzb3VyY2UsIE5vZGUqIGRlc3RpbmF0aW9uTm9kZSwgTm9k
ZSogc291cmNlTm9kZSkKIHsKLSAgICBpZiAoZGVzdGluYXRpb25Ob2RlSW5kZXggPT0gTm9Ob2Rl
KQorICAgIGlmICghZGVzdGluYXRpb25Ob2RlKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
Ci0gICAgQVNTRVJUX1VOVVNFRChzb3VyY2VOb2RlSW5kZXgsIHNvdXJjZU5vZGVJbmRleCAhPSBO
b05vZGUpOworICAgIEFTU0VSVF9VTlVTRUQoc291cmNlTm9kZSwgc291cmNlTm9kZSk7CiAgICAg
CiAgICAgLy8gRklYTUU6IFdlIGNvdWxkIGRvIHNvbWUgc3BhcnNlIGNvbmRpdGlvbmFsIHByb3Bh
Z2F0aW9uIGhlcmUhCiAgICAgCkBAIC0yMDQyLDE1ICsyMDYwLDE1IEBAIHZvaWQgQWJzdHJhY3RT
dGF0ZTo6ZHVtcChQcmludFN0cmVhbSYgb3UKIHsKICAgICBib29sIGZpcnN0ID0gdHJ1ZTsKICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fYmxvY2stPnNpemUoKTsgKytpKSB7Ci0gICAgICAg
IE5vZGVJbmRleCBpbmRleCA9IG1fYmxvY2stPmF0KGkpOwotICAgICAgICBBYnN0cmFjdFZhbHVl
JiB2YWx1ZSA9IGZvck5vZGUoaW5kZXgpOworICAgICAgICBOb2RlKiBub2RlID0gbV9ibG9jay0+
YXQoaSk7CisgICAgICAgIEFic3RyYWN0VmFsdWUmIHZhbHVlID0gZm9yTm9kZShub2RlKTsKICAg
ICAgICAgaWYgKHZhbHVlLmlzQ2xlYXIoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAg
ICBpZiAoZmlyc3QpCiAgICAgICAgICAgICBmaXJzdCA9IGZhbHNlOwogICAgICAgICBlbHNlCiAg
ICAgICAgICAgICBvdXQucHJpbnRmKCIgIik7Ci0gICAgICAgIG91dC5wcmludGYoIkAlbHU6Iiwg
c3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4oaW5kZXgpKTsKKyAgICAgICAgb3V0LnByaW50Zigi
QCVsdToiLCBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nPihub2RlLT5pbmRleCgpKSk7CiAgICAg
ICAgIHZhbHVlLmR1bXAob3V0KTsKICAgICB9CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuaAkocmV2aXNpb24gMTQwMzA2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTcyLDggKzcyLDggQEAgc3RydWN0IEJhc2ljQmxvY2s7CiAvLyBBYnN0cmFjdFN0YXRlIHN0YXRl
KGNvZGVCbG9jaywgZ3JhcGgpOwogLy8gc3RhdGUuYmVnaW5CYXNpY0Jsb2NrKGJhc2ljQmxvY2sp
OwogLy8gYm9vbCBlbmRSZWFjaGVkID0gdHJ1ZTsKLS8vIGZvciAoTm9kZUluZGV4IGlkeCA9IGJh
c2ljQmxvY2suYmVnaW47IGlkeCA8IGJhc2ljQmxvY2suZW5kOyArK2lkeCkgewotLy8gICAgIGlm
ICghc3RhdGUuZXhlY3V0ZShpZHgpKQorLy8gZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGJhc2lj
QmxvY2stPnNpemUoKTsgKytpKSB7CisvLyAgICAgaWYgKCFzdGF0ZS5leGVjdXRlKGkpKQogLy8g
ICAgICAgICBicmVhazsKIC8vIH0KIC8vIGJvb2wgcmVzdWx0ID0gc3RhdGUuZW5kQmFzaWNCbG9j
ayg8ZWl0aGVyIE1lcmdlIG9yIERvbnRNZXJnZT4pOwpAQCAtOTcsMTQgKzk3LDE0IEBAIHB1Ymxp
YzoKICAgICAKICAgICB+QWJzdHJhY3RTdGF0ZSgpOwogICAgIAotICAgIEFic3RyYWN0VmFsdWUm
IGZvck5vZGUoTm9kZUluZGV4IG5vZGVJbmRleCkKKyAgICBBYnN0cmFjdFZhbHVlJiBmb3JOb2Rl
KE5vZGUqIG5vZGUpCiAgICAgewotICAgICAgICByZXR1cm4gbV9ncmFwaFtub2RlSW5kZXhdLnZh
bHVlOworICAgICAgICByZXR1cm4gbm9kZS0+dmFsdWU7CiAgICAgfQogICAgIAotICAgIEFic3Ry
YWN0VmFsdWUmIGZvck5vZGUoRWRnZSBub2RlVXNlKQorICAgIEFic3RyYWN0VmFsdWUmIGZvck5v
ZGUoRWRnZSBlZGdlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGZvck5vZGUobm9kZVVzZS5pbmRl
eCgpKTsKKyAgICAgICAgcmV0dXJuIGZvck5vZGUoZWRnZS5ub2RlKCkpOwogICAgIH0KICAgICAK
ICAgICBPcGVyYW5kczxBYnN0cmFjdFZhbHVlPiYgdmFyaWFibGVzKCkKQEAgLTE4Nyw0OCArMTg3
LDQ4IEBAIHByaXZhdGU6CiAgICAgdm9pZCBjbG9iYmVyQ2FwdHVyZWRWYXJzKGNvbnN0IENvZGVP
cmlnaW4mKTsKICAgICB2b2lkIGNsb2JiZXJTdHJ1Y3R1cmVzKHVuc2lnbmVkIGluZGV4SW5CbG9j
ayk7CiAgICAgCi0gICAgYm9vbCBtZXJnZVN0YXRlQXRUYWlsKEFic3RyYWN0VmFsdWUmIGRlc3Rp
bmF0aW9uLCBBYnN0cmFjdFZhbHVlJiBpblZhcmlhYmxlLCBOb2RlSW5kZXgpOworICAgIGJvb2wg
bWVyZ2VTdGF0ZUF0VGFpbChBYnN0cmFjdFZhbHVlJiBkZXN0aW5hdGlvbiwgQWJzdHJhY3RWYWx1
ZSYgaW5WYXJpYWJsZSwgTm9kZSopOwogICAgIAotICAgIHN0YXRpYyBib29sIG1lcmdlVmFyaWFi
bGVCZXR3ZWVuQmxvY2tzKEFic3RyYWN0VmFsdWUmIGRlc3RpbmF0aW9uLCBBYnN0cmFjdFZhbHVl
JiBzb3VyY2UsIE5vZGVJbmRleCBkZXN0aW5hdGlvbk5vZGVJbmRleCwgTm9kZUluZGV4IHNvdXJj
ZU5vZGVJbmRleCk7CisgICAgc3RhdGljIGJvb2wgbWVyZ2VWYXJpYWJsZUJldHdlZW5CbG9ja3Mo
QWJzdHJhY3RWYWx1ZSYgZGVzdGluYXRpb24sIEFic3RyYWN0VmFsdWUmIHNvdXJjZSwgTm9kZSog
ZGVzdGluYXRpb25Ob2RlLCBOb2RlKiBzb3VyY2VOb2RlKTsKICAgICAKLSAgICB2b2lkIHNwZWN1
bGF0ZUludDMyVW5hcnkoTm9kZSYgbm9kZSwgYm9vbCBmb3JjZUNhbkV4aXQgPSBmYWxzZSkKKyAg
ICB2b2lkIHNwZWN1bGF0ZUludDMyVW5hcnkoTm9kZSogbm9kZSwgYm9vbCBmb3JjZUNhbkV4aXQg
PSBmYWxzZSkKICAgICB7Ci0gICAgICAgIEFic3RyYWN0VmFsdWUmIGNoaWxkVmFsdWUgPSBmb3JO
b2RlKG5vZGUuY2hpbGQxKCkpOwotICAgICAgICBub2RlLnNldENhbkV4aXQoZm9yY2VDYW5FeGl0
IHx8ICFpc0ludDMyU3BlY3VsYXRpb24oY2hpbGRWYWx1ZS5tX3R5cGUpKTsKKyAgICAgICAgQWJz
dHJhY3RWYWx1ZSYgY2hpbGRWYWx1ZSA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpOworICAgICAg
ICBub2RlLT5zZXRDYW5FeGl0KGZvcmNlQ2FuRXhpdCB8fCAhaXNJbnQzMlNwZWN1bGF0aW9uKGNo
aWxkVmFsdWUubV90eXBlKSk7CiAgICAgICAgIGNoaWxkVmFsdWUuZmlsdGVyKFNwZWNJbnQzMik7
CiAgICAgfQogICAgIAotICAgIHZvaWQgc3BlY3VsYXRlTnVtYmVyVW5hcnkoTm9kZSYgbm9kZSkK
KyAgICB2b2lkIHNwZWN1bGF0ZU51bWJlclVuYXJ5KE5vZGUqIG5vZGUpCiAgICAgewotICAgICAg
ICBBYnN0cmFjdFZhbHVlJiBjaGlsZFZhbHVlID0gZm9yTm9kZShub2RlLmNoaWxkMSgpKTsKLSAg
ICAgICAgbm9kZS5zZXRDYW5FeGl0KCFpc051bWJlclNwZWN1bGF0aW9uKGNoaWxkVmFsdWUubV90
eXBlKSk7CisgICAgICAgIEFic3RyYWN0VmFsdWUmIGNoaWxkVmFsdWUgPSBmb3JOb2RlKG5vZGUt
PmNoaWxkMSgpKTsKKyAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCghaXNOdW1iZXJTcGVjdWxhdGlv
bihjaGlsZFZhbHVlLm1fdHlwZSkpOwogICAgICAgICBjaGlsZFZhbHVlLmZpbHRlcihTcGVjTnVt
YmVyKTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBzcGVjdWxhdGVCb29sZWFuVW5hcnkoTm9kZSYg
bm9kZSkKKyAgICB2b2lkIHNwZWN1bGF0ZUJvb2xlYW5VbmFyeShOb2RlKiBub2RlKQogICAgIHsK
LSAgICAgICAgQWJzdHJhY3RWYWx1ZSYgY2hpbGRWYWx1ZSA9IGZvck5vZGUobm9kZS5jaGlsZDEo
KSk7Ci0gICAgICAgIG5vZGUuc2V0Q2FuRXhpdCghaXNCb29sZWFuU3BlY3VsYXRpb24oY2hpbGRW
YWx1ZS5tX3R5cGUpKTsKKyAgICAgICAgQWJzdHJhY3RWYWx1ZSYgY2hpbGRWYWx1ZSA9IGZvck5v
ZGUobm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBub2RlLT5zZXRDYW5FeGl0KCFpc0Jvb2xlYW5T
cGVjdWxhdGlvbihjaGlsZFZhbHVlLm1fdHlwZSkpOwogICAgICAgICBjaGlsZFZhbHVlLmZpbHRl
cihTcGVjQm9vbGVhbik7CiAgICAgfQogICAgIAotICAgIHZvaWQgc3BlY3VsYXRlSW50MzJCaW5h
cnkoTm9kZSYgbm9kZSwgYm9vbCBmb3JjZUNhbkV4aXQgPSBmYWxzZSkKKyAgICB2b2lkIHNwZWN1
bGF0ZUludDMyQmluYXJ5KE5vZGUqIG5vZGUsIGJvb2wgZm9yY2VDYW5FeGl0ID0gZmFsc2UpCiAg
ICAgewotICAgICAgICBBYnN0cmFjdFZhbHVlJiBjaGlsZFZhbHVlMSA9IGZvck5vZGUobm9kZS5j
aGlsZDEoKSk7Ci0gICAgICAgIEFic3RyYWN0VmFsdWUmIGNoaWxkVmFsdWUyID0gZm9yTm9kZShu
b2RlLmNoaWxkMigpKTsKLSAgICAgICAgbm9kZS5zZXRDYW5FeGl0KAorICAgICAgICBBYnN0cmFj
dFZhbHVlJiBjaGlsZFZhbHVlMSA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBB
YnN0cmFjdFZhbHVlJiBjaGlsZFZhbHVlMiA9IGZvck5vZGUobm9kZS0+Y2hpbGQyKCkpOworICAg
ICAgICBub2RlLT5zZXRDYW5FeGl0KAogICAgICAgICAgICAgZm9yY2VDYW5FeGl0Ci0gICAgICAg
ICAgICB8fCAhaXNJbnQzMlNwZWN1bGF0aW9uKGNoaWxkVmFsdWUxLm1fdHlwZSkKLSAgICAgICAg
ICAgIHx8ICFpc0ludDMyU3BlY3VsYXRpb24oY2hpbGRWYWx1ZTIubV90eXBlKSk7CisgICAgICAg
ICAgICB8fCAhaXNJbnQzMlNwZWN1bGF0aW9uKGNoaWxkVmFsdWUxLT5tX3R5cGUpCisgICAgICAg
ICAgICB8fCAhaXNJbnQzMlNwZWN1bGF0aW9uKGNoaWxkVmFsdWUyLT5tX3R5cGUpKTsKICAgICAg
ICAgY2hpbGRWYWx1ZTEuZmlsdGVyKFNwZWNJbnQzMik7CiAgICAgICAgIGNoaWxkVmFsdWUyLmZp
bHRlcihTcGVjSW50MzIpOwogICAgIH0KICAgICAKLSAgICB2b2lkIHNwZWN1bGF0ZU51bWJlckJp
bmFyeShOb2RlJiBub2RlKQorICAgIHZvaWQgc3BlY3VsYXRlTnVtYmVyQmluYXJ5KE5vZGUqIG5v
ZGUpCiAgICAgewotICAgICAgICBBYnN0cmFjdFZhbHVlJiBjaGlsZFZhbHVlMSA9IGZvck5vZGUo
bm9kZS5jaGlsZDEoKSk7Ci0gICAgICAgIEFic3RyYWN0VmFsdWUmIGNoaWxkVmFsdWUyID0gZm9y
Tm9kZShub2RlLmNoaWxkMigpKTsKLSAgICAgICAgbm9kZS5zZXRDYW5FeGl0KAorICAgICAgICBB
YnN0cmFjdFZhbHVlJiBjaGlsZFZhbHVlMSA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpOworICAg
ICAgICBBYnN0cmFjdFZhbHVlJiBjaGlsZFZhbHVlMiA9IGZvck5vZGUobm9kZS0+Y2hpbGQyKCkp
OworICAgICAgICBub2RlLT5zZXRDYW5FeGl0KAogICAgICAgICAgICAgIWlzTnVtYmVyU3BlY3Vs
YXRpb24oY2hpbGRWYWx1ZTEubV90eXBlKQogICAgICAgICAgICAgfHwgIWlzTnVtYmVyU3BlY3Vs
YXRpb24oY2hpbGRWYWx1ZTIubV90eXBlKSk7CiAgICAgICAgIGNoaWxkVmFsdWUxLmZpbHRlcihT
cGVjTnVtYmVyKTsKQEAgLTI0MCw5ICsyNDAsOSBAQCBwcml2YXRlOgogICAgICAgICBEZWZpbml0
ZWx5RmFsc2UsCiAgICAgICAgIERlZmluaXRlbHlUcnVlCiAgICAgfTsKLSAgICBCb29sZWFuUmVz
dWx0IGJvb2xlYW5SZXN1bHQoTm9kZSYsIEFic3RyYWN0VmFsdWUmKTsKKyAgICBCb29sZWFuUmVz
dWx0IGJvb2xlYW5SZXN1bHQoTm9kZSosIEFic3RyYWN0VmFsdWUmKTsKICAgICAKLSAgICBib29s
IHRyeVNldENvbnN0YW50KE5vZGVJbmRleCBub2RlSW5kZXgsIEpTVmFsdWUgdmFsdWUpCisgICAg
Ym9vbCB0cnlTZXRDb25zdGFudChOb2RlKiBub2RlLCBKU1ZhbHVlIHZhbHVlKQogICAgIHsKICAg
ICAgICAgLy8gTWFrZSBzdXJlIHdlIGRvbid0IGNvbnN0YW50IGZvbGQgc29tZXRoaW5nIHRoYXQg
d2lsbCBwcm9kdWNlIHZhbHVlcyB0aGF0IGNvbnRyYXZlbmUKICAgICAgICAgLy8gcHJlZGljdGlv
bnMuIElmIHRoYXQgaGFwcGVucyB0aGVuIHdlIGtub3cgdGhhdCB0aGUgY29kZSB3aWxsIE9TUiBl
eGl0LCBmb3JjaW5nCkBAIC0yNTEsMTEgKzI1MSwxMSBAQCBwcml2YXRlOgogICAgICAgICAvLyBs
b3Qgb2Ygc3VidGxlIGNvZGUgdGhhdCBhc3N1bWVzIHRoYXQKICAgICAgICAgLy8gc3BlY3VsYXRp
b25Gcm9tVmFsdWUoanNDb25zdGFudCkgPT0ganNDb25zdGFudC5wcmVkaWN0aW9uKCkuICJIYXJk
ZW5pbmciIHRoYXQgY29kZQogICAgICAgICAvLyBpcyBwcm9iYWJseSBsZXNzIHNhbmUgdGhhbiBq
dXN0IHB1bGxpbmcgYmFjayBvbiBjb25zdGFudCBmb2xkaW5nLgotICAgICAgICBTcGVjdWxhdGVk
VHlwZSBvbGRUeXBlID0gbV9ncmFwaFtub2RlSW5kZXhdLnByZWRpY3Rpb24oKTsKKyAgICAgICAg
U3BlY3VsYXRlZFR5cGUgb2xkVHlwZSA9IG5vZGUtPnByZWRpY3Rpb24oKTsKICAgICAgICAgaWYg
KG1lcmdlU3BlY3VsYXRpb25zKHNwZWN1bGF0aW9uRnJvbVZhbHVlKHZhbHVlKSwgb2xkVHlwZSkg
IT0gb2xkVHlwZSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgCi0gICAgICAg
IGZvck5vZGUobm9kZUluZGV4KS5zZXQodmFsdWUpOworICAgICAgICBmb3JOb2RlKG5vZGUpLnNl
dCh2YWx1ZSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RWYWx1ZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RWYWx1ZS5oCShyZXZpc2lvbiAxNDAz
MDYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0VmFsdWUuaAkod29y
a2luZyBjb3B5KQpAQCAtNDE4LDYgKzQxOCw4IEBAIHN0cnVjdCBBYnN0cmFjdFZhbHVlIHsKICAg
ICAvLyAgICBjaGFuZ2UgeCdzIHN0cnVjdHVyZSBhbmQgd2UgaGF2ZSBubyB3YXkgb2YgcHJvdmlu
ZyBvdGhlcndpc2UsIGJ1dAogICAgIC8vICAgIHgncyBtX2Z1dHVyZVBvc3NpYmxlU3RydWN0dXJl
IHdpbGwgYmUgd2hhdGV2ZXIgc3RydWN0dXJlIHdlIGhhZCBjaGVja2VkCiAgICAgLy8gICAgd2hl
biBnZXR0aW5nIHByb3BlcnR5ICdmJy4KKyAgICAKKyAgICAvLyBOQi4gQWxsIGZpZWxkcyBpbiB0
aGlzIHN0cnVjdCBtdXN0IGhhdmUgdHJpdmlhbCBkZXN0cnVjdG9ycy4KIAogICAgIC8vIFRoaXMg
aXMgYSBwcm92ZW4gY29uc3RyYWludCBvbiB0aGUgc3RydWN0dXJlcyB0aGF0IHRoaXMgdmFsdWUg
Y2FuIGhhdmUgcmlnaHQKICAgICAvLyBub3cuIFRoZSBzdHJ1Y3R1cmUgb2YgdGhlIGN1cnJlbnQg
dmFsdWUgbXVzdCBiZWxvbmcgdG8gdGhpcyBzZXQuIFRoZSBzZXQgbWF5CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0FkamFjZW5jeUxpc3QuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FkamFjZW5jeUxpc3QuaAkocmV2aXNpb24gMTQwMzA2
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBZGphY2VuY3lMaXN0LmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTU3LDcgKzU3LDcgQEAgcHVibGljOgogICAgICAgICB9CiAgICAgfQogICAgIAot
ICAgIEFkamFjZW5jeUxpc3QoS2luZCBraW5kLCBOb2RlSW5kZXggY2hpbGQxLCBOb2RlSW5kZXgg
Y2hpbGQyLCBOb2RlSW5kZXggY2hpbGQzKQorICAgIEFkamFjZW5jeUxpc3QoS2luZCBraW5kLCBO
b2RlKiBjaGlsZDEsIE5vZGUqIGNoaWxkMiwgTm9kZSogY2hpbGQzKQogI2lmICFBU1NFUlRfRElT
QUJMRUQKICAgICAgICAgOiBtX2tpbmQoRml4ZWQpCiAjZW5kaWYKQEAgLTExOCw3ICsxMTgsNyBA
QCBwdWJsaWM6CiAgICAgICAgIGNoaWxkKDIpID0gY2hpbGQzOwogICAgIH0KICAgICAKLSAgICB2
b2lkIGluaXRpYWxpemUoTm9kZUluZGV4IGNoaWxkMSA9IE5vTm9kZSwgTm9kZUluZGV4IGNoaWxk
MiA9IE5vTm9kZSwgTm9kZUluZGV4IGNoaWxkMyA9IE5vTm9kZSkKKyAgICB2b2lkIGluaXRpYWxp
emUoTm9kZSogY2hpbGQxID0gMCwgTm9kZSogY2hpbGQyID0gMCwgTm9kZSogY2hpbGQzID0gMCkK
ICAgICB7CiAgICAgICAgIGluaXRpYWxpemUoRWRnZShjaGlsZDEpLCBFZGdlKGNoaWxkMiksIEVk
Z2UoY2hpbGQzKSk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdB
bGxvY2F0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fs
bG9jYXRvci5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdB
bGxvY2F0b3IuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyMzUgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdBbGxvY2F0b3JfaAor
I2RlZmluZSBERkdBbGxvY2F0b3JfaAorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNp
ZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgPHd0Zi9QYWdlQWxsb2NhdGlvbkFsaWduZWQu
aD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCisvLyBDdXN0b20gcG9vbCBh
bGxvY2F0b3IgZm9yIGV4YWN0bHkgb25lIHR5cGUgKHR5cGUgVCkuIEl0IGhhcyBmYXN0IChPKDEp
LCBvbmx5IGEgZmV3CisvLyBpbnN0cnVjdGlvbnMpIGFsbG9jYXRvciwgYW5kIGEgc2ltaWxhcmx5
IGZhc3QgZnJlZSgpLiBSZWN5Y2xpbmcgd29ya3MgaWYgZWl0aGVyIG9mCisvLyB0aGUgZm9sbG93
aW5nIGlzIHRydWU6CisvLyAtIFQgaGFzIGEgdHJpdmlhbCBkZXN0cnVjdG9yLiBJbiB0aGF0IGNh
c2UgeW91IGRvbid0IGhhdmUgdG8gZXZlciBjYWxsIGZyZWUoKSBvbgorLy8gICBhbnl0aGluZy4g
WW91IGNhbiBqdXN0IGNhbGwgZnJlZUFsbCgpIGluc3RlYWQuCisvLyAtIFlvdSBjYWxsIGZyZWUo
KSBvbiBhbGwgVCdzIHRoYXQgeW91IGFsbG9jYXRlZCwgYW5kIG5ldmVyIHVzZSBmcmVlQWxsKCku
CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitjbGFzcyBBbGxvY2F0b3IgeworcHVibGljOgorICAg
IEFsbG9jYXRvcigpOworICAgIH5BbGxvY2F0b3IoKTsKKyAgICAKKyAgICB2b2lkKiBhbGxvY2F0
ZSgpOyAvLyBVc2UgcGxhY2VtZW50IG5ldyB0byBhbGxvY2F0ZSwgYW5kIGF2b2lkIHVzaW5nIHRo
aXMgbWV0aG9kLgorICAgIHZvaWQgZnJlZShUKik7IC8vIENhbGwgdGhpcyBtZXRob2QgdG8gZGVs
ZXRlOyBuZXZlciB1c2UgJ2RlbGV0ZScgZGlyZWN0bHkuCisgICAgCisgICAgdm9pZCBmcmVlQWxs
KCk7IC8vIE9ubHkgY2FsbCB0aGlzIGlmIFQgaGFzIGEgdHJpdmlhbCBkZXN0cnVjdG9yLgorICAg
IHZvaWQgcmVzZXQoKTsgLy8gTGlrZSBmcmVlQWxsKCksIGJ1dCBhbHNvIHJldHVybnMgYWxsIG1l
bW9yeSB0byB0aGUgT1MuCisgICAgCisgICAgdW5zaWduZWQgaW5kZXhPZihUKik7CisgICAgCisg
ICAgc3RhdGljIEFsbG9jYXRvciogYWxsb2NhdG9yT2YoVCopOworICAgIAorcHJpdmF0ZToKKyAg
ICB2b2lkKiBidW1wQWxsb2NhdGUoKTsKKyAgICB2b2lkKiBmcmVlTGlzdEFsbG9jYXRlKCk7Cisg
ICAgdm9pZCogYWxsb2NhdGVTbG93KCk7CisgICAgdm9pZCBmcmVlUmVnaW9uc1N0YXJ0aW5nQXQo
UmVnaW9uKik7CisgICAgdm9pZCBzdGFydGluZ0J1bXBpbmdJbihSZWdpb24qKTsKKyAgICAKKyAg
ICBzdHJ1Y3QgUmVnaW9uIHsKKyAgICAgICAgc3RhdGljIHNpemVfdCBzaXplKCkgeyByZXR1cm4g
NjQgKiBLQjsgfQorICAgICAgICBzdGF0aWMgc2l6ZV90IGhlYWRlclNpemUoKSB7IHJldHVybiBz
dGQ6Om1heChzaXplb2YoUmVnaW9uKSwgc2l6ZW9mKFQpKTsgfQorICAgICAgICBzdGF0aWMgdW5z
aWduZWQgbnVtYmVyT2ZUaGluZ3NQZXJSZWdpb24oKSB7IHJldHVybiAoc2l6ZSgpIC0gaGVhZGVy
U2l6ZSgpKSAvIHNpemVvZihUKTsgfQorICAgICAgICBUKiBkYXRhKCkgeyByZXR1cm4gYml0d2lz
ZV9jYXN0PFQqPihiaXR3aXNlX2Nhc3Q8Y2hhcio+KHRoaXMpICsgaGVhZGVyU2l6ZSgpKTsgfQor
ICAgICAgICBib29sIGlzSW5UaGlzUmVnaW9uKFQqIHBvaW50ZXIpIHsgcmV0dXJuIHN0YXRpY19j
YXN0PHVuc2lnbmVkPihwb2ludGVyIC0gZGF0YSgpKSA8IG51bWJlck9mVGhpbmdzUGVyUmVnaW9u
KCk7IH0KKyAgICAgICAgUmVnaW9uKiByZWdpb25Gb3IoVCogcG9pbnRlcikgeyByZXR1cm4gYml0
d2lzZV9jYXN0PFJlZ2lvbio+KGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KHBvaW50ZXIpICYgfihz
aXplKCkgLSAxKSk7IH0KKyAgICAgICAgCisgICAgICAgIFBhZ2VBbGxvY2F0aW9uQWxpZ25lZCBt
X2FsbG9jYXRpb247CisgICAgICAgIEFsbG9jYXRvciogbV9hbGxvY2F0b3I7CisgICAgICAgIFJl
Z2lvbiogbV9uZXh0OworICAgIH07CisgICAgCisgICAgUmVnaW9uKiBtX3JlZ2lvbkhlYWQ7Cisg
ICAgdm9pZCoqIG1fZnJlZUxpc3RIZWFkOworICAgIFQqIG1fYnVtcEVuZDsKKyAgICB1bnNpZ25l
ZCBtX2J1bXBSZW1haW5pbmc7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgoraW5saW5lIEFs
bG9jYXRvcjo6QWxsb2NhdG9yKCkKKyAgICA6IG1fcmVnaW9uSGVhZCgwKQorICAgICwgbV9mcmVl
TGlzdEhlYWQoMCkKKyAgICAsIG1fYnVtcFJlbWFpbmluZygwKQoreworfQorCit0ZW1wbGF0ZTx0
eXBlbmFtZSBUPgoraW5saW5lIEFsbG9jYXRvcjo6fkFsbG9jYXRvcigpCit7CisgICAgcmVzZXQo
KTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK0FMV0FZU19JTkxJTkUgdm9pZCogQWxsb2Nh
dG9yOjphbGxvY2F0ZSgpCit7CisgICAgaWYgKExJS0VMWSh2b2lkKiByZXN1bHQgPSBidW1wQWxs
b2NhdGUoKSkpCisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgcmV0dXJuIGZyZWVMaXN0QWxs
b2NhdGUoKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK3ZvaWQgQWxsb2NhdG9yOjpmcmVl
KFQqIG9iamVjdCkKK3sKKyAgICBvYmplY3QtPn5UKCk7CisgICAgCisgICAgdm9pZCoqIGNlbGwg
PSBiaXR3aXNlX2Nhc3Q8dm9pZCoqPihvYmplY3QpOworICAgICpjZWxsID0gbV9mcmVlTGlzdEhl
YWQ7CisgICAgbV9mcmVlTGlzdEhlYWQgPSBjZWxsOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBU
Pgordm9pZCBBbGxvY2F0b3I6OmZyZWVBbGwoKQoreworICAgIGlmICghbV9yZWdpb25IZWFkKSB7
CisgICAgICAgIEFTU0VSVCghbV9idW1wUmVtYWluaW5nKTsKKyAgICAgICAgQVNTRVJUKCFtX2Zy
ZWVMaXN0SGVhZCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgLy8gU2luY2Ug
dGhlIGNhbGxlciBpcyBvcHRpbmcgb3V0IG9mIGNhbGxpbmcgdGhlIGRlc3RydWN0b3IgZm9yIGFu
eSBhbGxvY2F0ZWQgdGhpbmcsCisgICAgLy8gd2UgaGF2ZSB0d28gY2hvaWNlcywgcGx1cyBhIGNv
bnRpbnV1bSBiZXR3ZWVuOiB3ZSBjYW4gZWl0aGVyIGp1c3QgZGVsZXRlIGFsbCByZWdpb25zCisg
ICAgLy8gKGkuZS4gY2FsbCByZXNldCgpKSwgb3Igd2UgY2FuIG1ha2UgYWxsIHJlZ2lvbnMgYXZh
aWxhYmxlIGZvciByZXVzZS4gV2UgZG8gc29tZXRoaW5nCisgICAgLy8gdGhhdCBvcHRpbWl6ZXMg
Zm9yIChhKSBzcGVlZCBvZiBmcmVlQWxsKCksIChiKSB0aGUgYXNzdW1wdGlvbiB0aGF0IGlmIHRo
ZSB1c2VyIGNhbGxzCisgICAgLy8gZnJlZUFsbCgpIHRoZW4gdGhleSB3aWxsIHByb2JhYmx5IGJl
IGNhbGxpbmcgYWxsb2NhdGUoKSBpbiB0aGUgbmVhciBmdXR1cmUuIE5hbWVseSwKKyAgICAvLyB3
ZSBmcmVlIGFsbCBidXQgb25lIHJlZ2lvbiwgYW5kIG1ha2UgdGhlIHJlbWFpbmluZyByZWdpb24g
YSBidW1wIGFsbG9jYXRpb24gcmVnaW9uLgorICAgIAorICAgIGZvciAoUmVnaW9uKiByZWdpb24g
PSBtX3JlZ2lvbkhlYWQtPm1fbmV4dDsgcmVnaW9uOyByZWdpb24gPSByZWdpb24tPm1fbmV4dCkK
KyAgICAgICAgYnVpbGRGcmVlTGlzdEluKHJlZ2lvbik7CisgICAgCisgICAgbV9yZWdpb25IZWFk
LT5tX25leHQgPSAwOworICAgIG1fZnJlZUxpc3RIZWFkID0gMDsKKyAgICBzdGFydEJ1bXBpbmdJ
bihtX3JlZ2lvbkhlYWQpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgordm9pZCBBbGxvY2F0
b3I6OnJlc2V0KCkKK3sKKyAgICBmcmVlUmVnaW9uc1N0YXJ0aW5nQXQobV9yZWdpb25IZWFkKTsK
KyAgICAKKyAgICBtX3JlZ2lvbkhlYWQgPSAwOworICAgIG1fZnJlZUxpc3RIZWFkID0gMDsKKyAg
ICBtX2J1bXBSZW1haW5pbmcgPSAwOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgordW5zaWdu
ZWQgQWxsb2NhdG9yOjppbmRleE9mKFQqIG9iamVjdCkKK3sKKyAgICB1bnNpZ25lZCBiYXNlSW5k
ZXggPSAwOworICAgIGZvciAoUmVnaW9uKiByZWdpb24gPSBtX3JlZ2lvbkhlYWQ7IHJlZ2lvbjsg
cmVnaW9uID0gcmVnaW9uLT5tX25leHQpIHsKKyAgICAgICAgaWYgKHJlZ2lvbi0+aXNJblRoaXNS
ZWdpb24ob2JqZWN0KSkKKyAgICAgICAgICAgIHJldHVybiBiYXNlSW5kZXggKyAob2JqZWN0IC0g
cmVnaW9uLT5kYXRhKCkpOworICAgICAgICBiYXNlSW5kZXggKz0gUmVnaW9uOjpudW1iZXJPZlRo
aW5nc1BlclJlZ2lvbigpOworICAgIH0KKyAgICBDUkFTSCgpOworICAgIHJldHVybiAwOworfQor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorQWxsb2NhdG9yKiBBbGxvY2F0b3I6OmFsbG9jYXRvck9m
KFQqIG9iamVjdCkKK3sKKyAgICByZXR1cm4gUmVnaW9uOjpyZWdpb25Gb3Iob2JqZWN0KS0+bV9h
bGxvY2F0b3I7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitBTFdBWVNfSU5MSU5FIHZvaWQq
IEFsbG9jYXRvcjo6YnVtcEFsbG9jYXRlKCkKK3sKKyAgICBpZiAodW5zaWduZWQgcmVtYWluaW5n
ID0gbV9idW1wUmVtYWluaW5nKSB7CisgICAgICAgIHJlbWFpbmluZy0tOworICAgICAgICBtX2J1
bXBSZW1haW5pbmcgPSByZW1haW5pbmc7CisgICAgICAgIHJldHVybiBtX2J1bXBFbmQgLSAocmVt
YWluaW5nICsgMSk7CisgICAgfQorICAgIHJldHVybiAwOworfQorCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPgordm9pZCogQWxsb2NhdG9yOjpmcmVlTGlzdEFsbG9jYXRlKCkKK3sKKyAgICB2b2lkKiog
cmVzdWx0ID0gbV9mcmVlTGlzdEhlYWQ7CisgICAgaWYgKFVOTElLRUxZKCFyZXN1bHQpKQorICAg
ICAgICByZXR1cm4gYWxsb2NhdGVTbG93KCk7CisgICAgbV9mcmVlTGlzdEhlYWQgPSBiaXR3aXNl
X2Nhc3Q8dm9pZCoqPigqcmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit0ZW1wbGF0
ZTx0eXBlbmFtZSBUPgordm9pZCogQWxsb2NhdG9yOjphbGxvY2F0ZVNsb3coKQoreworICAgIEFT
U0VSVCghbV9mcmVlTGlzdEhlYWQpOworICAgIEFTU0VSVCghbV9idW1wUmVtYWluaW5nKTsKKyAg
ICAKKyAgICBQYWdlQWxsb2NhdGlvbkFsaWduZWQgYWxsb2NhdGlvbiA9IFBhZ2VBbGxvY2F0aW9u
QWxpZ25lZDo6YWxsb2NhdGUoUmVnaW9uOjpzaXplKCksIFJlZ2lvbjo6c2l6ZSgpLCBPU0FsbG9j
YXRvcjo6SlNHQ0hlYXBQYWdlcyk7CisgICAgaWYgKCFzdGF0aWNfY2FzdDxib29sPihhbGxvY2F0
aW9uKSkKKyAgICAgICAgQ1JBU0goKTsKKyAgICBSZWdpb24qIHJlZ2lvbiA9IHN0YXRpY19jYXN0
PFJlZ2lvbio+KGFsbG9jYXRpb24uYmFzZSgpKTsKKyAgICByZWdpb24tPm1fYWxsb2NhdGlvbiA9
IG1fYWxsb2NhdGlvbjsKKyAgICByZWdpb24tPm1fYWxsb2N0b3IgPSB0aGlzOworICAgIHN0YXJ0
QnVtcGluZ0luKHJlZ2lvbik7CisgICAgcmVnaW9uLT5tX25leHQgPSBtX3JlZ2lvbkhlYWQ7Cisg
ICAgbV9yZWdpb25IZWFkID0gcmVnaW9uOworICAgIAorICAgIHZvaWQqIHJlc3VsdCA9IGJ1bXBB
bGxvY2F0ZSgpOworICAgIEFTU0VSVChyZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisK
K3RlbXBsYXRlPHR5cGVuYW1lIFQ+Cit2b2lkIEFsbG9jYXRvcjo6ZnJlZVJlZ2lvbnNTdGFydGlu
Z0F0KFJlZ2lvbiogcmVnaW9uKQoreworICAgIHdoaWxlIChyZWdpb24pIHsKKyAgICAgICAgUmVn
aW9uKiBuZXh0UmVnaW9uID0gcmVnaW9uLT5tX25leHQ7CisgICAgICAgIHJlZ2lvbi0+bV9hbGxv
Y2F0aW9uLmRlYWxsb2NhdGUoKTsKKyAgICAgICAgcmVnaW9uID0gbmV4dFJlZ2lvbjsKKyAgICB9
Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+Cit2b2lkIEFsbG9jYXRvcjo6c3RhcnRCdW1waW5n
SW4oUmVnaW9uKiByZWdpb24pCit7CisgICAgbV9idW1wRW5kID0gcmVnaW9uLT5kYXRhKCkgKyBS
ZWdpb246Om51bWJlck9mVGhpbmdzUGVyUmVnaW9uKCk7CisgICAgbV9idW1wUmVtYWluaW5nID0g
UmVnaW9uOjpudW1iZXJPZlRoaW5nc1BlclJlZ2lvbigpOworfQorCit9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR0Fs
bG9jYXRvcl9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9j
ay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9j
ay5oCShyZXZpc2lvbiAxNDAzMDYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jh
c2ljQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtNDIsNyArNDIsNyBAQCBjbGFzcyBHcmFwaDsK
IAogdHlwZWRlZiBWZWN0b3IgPEJsb2NrSW5kZXgsIDI+IFByZWRlY2Vzc29yTGlzdDsKIAotc3Ry
dWN0IEJhc2ljQmxvY2sgOiBWZWN0b3I8Tm9kZUluZGV4LCA4PiB7CitzdHJ1Y3QgQmFzaWNCbG9j
ayA6IFZlY3RvcjxOb2RlKiwgOD4gewogICAgIEJhc2ljQmxvY2sodW5zaWduZWQgYnl0ZWNvZGVC
ZWdpbiwgdW5zaWduZWQgbnVtQXJndW1lbnRzLCB1bnNpZ25lZCBudW1Mb2NhbHMpCiAgICAgICAg
IDogYnl0ZWNvZGVCZWdpbihieXRlY29kZUJlZ2luKQogICAgICAgICAsIGlzT1NSVGFyZ2V0KGZh
bHNlKQpAQCAtNzUsNyArNzUsNyBAQCBzdHJ1Y3QgQmFzaWNCbG9jayA6IFZlY3RvcjxOb2RlSW5k
ZXgsIDg+CiAgICAgfQogICAgIAogICAgIHNpemVfdCBudW1Ob2RlcygpIGNvbnN0IHsgcmV0dXJu
IHBoaXMuc2l6ZSgpICsgc2l6ZSgpOyB9Ci0gICAgTm9kZUluZGV4IG5vZGVJbmRleChzaXplX3Qg
aSkgY29uc3QKKyAgICBOb2RlKiBub2RlKHNpemVfdCBpKSBjb25zdAogICAgIHsKICAgICAgICAg
aWYgKGkgPCBwaGlzLnNpemUoKSkKICAgICAgICAgICAgIHJldHVybiBwaGlzW2ldOwpAQCAtODMs
MjYgKzgzLDI2IEBAIHN0cnVjdCBCYXNpY0Jsb2NrIDogVmVjdG9yPE5vZGVJbmRleCwgOD4KICAg
ICB9CiAgICAgYm9vbCBpc1BoaUluZGV4KHNpemVfdCBpKSBjb25zdCB7IHJldHVybiBpIDwgcGhp
cy5zaXplKCk7IH0KICAgICAKLSAgICBib29sIGlzSW5QaGlzKE5vZGVJbmRleCBub2RlSW5kZXgp
IGNvbnN0CisgICAgYm9vbCBpc0luUGhpcyhOb2RlKiBub2RlKSBjb25zdAogICAgIHsKICAgICAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwaGlzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAg
ICBpZiAocGhpc1tpXSA9PSBub2RlSW5kZXgpCisgICAgICAgICAgICBpZiAocGhpc1tpXSA9PSBu
b2RlKQogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICB9CiAgICAgCi0gICAgYm9vbCBpc0luQmxvY2soTm9kZUluZGV4IGlu
ZGV4KSBjb25zdAorICAgIGJvb2wgaXNJbkJsb2NrKE5vZGUqIG15Tm9kZSkgY29uc3QKICAgICB7
CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtTm9kZXMoKTsgKytpKSB7Ci0gICAg
ICAgICAgICBpZiAobm9kZUluZGV4KGkpID09IGluZGV4KQorICAgICAgICAgICAgaWYgKG5vZGUo
aSkgPT0gbXlOb2RlKQogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgCiAjZGVmaW5lIERGR19ERUZJTkVfQVBQ
RU5EX05PREUodGVtcGxhdGVQcmUsIHRlbXBsYXRlUG9zdCwgdHlwZVBhcmFtcywgdmFsdWVQYXJh
bXNDb21tYSwgdmFsdWVQYXJhbXMsIHZhbHVlQXJncykgXAotICAgIHRlbXBsYXRlUHJlIHR5cGVQ
YXJhbXMgdGVtcGxhdGVQb3N0IE5vZGVJbmRleCBhcHBlbmROb2RlKEdyYXBoJiwgUmVmQ2hpbGRy
ZW5Nb2RlLCBSZWZOb2RlTW9kZSwgU3BlY3VsYXRlZFR5cGUgdmFsdWVQYXJhbXNDb21tYSB2YWx1
ZVBhcmFtcyk7CisgICAgdGVtcGxhdGVQcmUgdHlwZVBhcmFtcyB0ZW1wbGF0ZVBvc3QgTm9kZSog
YXBwZW5kTm9kZShHcmFwaCYsIFJlZkNoaWxkcmVuTW9kZSwgUmVmTm9kZU1vZGUsIFNwZWN1bGF0
ZWRUeXBlIHZhbHVlUGFyYW1zQ29tbWEgdmFsdWVQYXJhbXMpOwogICAgIERGR19WQVJJQURJQ19U
RU1QTEFURV9GVU5DVElPTihERkdfREVGSU5FX0FQUEVORF9OT0RFKQogI3VuZGVmIERGR19ERUZJ
TkVfQVBQRU5EX05PREUKICAgICAKQEAgLTEyMSwxMSArMTIxLDExIEBAIHN0cnVjdCBCYXNpY0Js
b2NrIDogVmVjdG9yPE5vZGVJbmRleCwgOD4KICNlbmRpZgogICAgIGJvb2wgaXNSZWFjaGFibGU7
CiAgICAgCi0gICAgVmVjdG9yPE5vZGVJbmRleD4gcGhpczsKKyAgICBWZWN0b3I8Tm9kZSo+IHBo
aXM7CiAgICAgUHJlZGVjZXNzb3JMaXN0IG1fcHJlZGVjZXNzb3JzOwogICAgIAotICAgIE9wZXJh
bmRzPE5vZGVJbmRleCwgTm9kZUluZGV4VHJhaXRzPiB2YXJpYWJsZXNBdEhlYWQ7Ci0gICAgT3Bl
cmFuZHM8Tm9kZUluZGV4LCBOb2RlSW5kZXhUcmFpdHM+IHZhcmlhYmxlc0F0VGFpbDsKKyAgICBP
cGVyYW5kczxOb2RlKiwgTm9kZVBvaW50ZXJUcmFpdHM+IHZhcmlhYmxlc0F0SGVhZDsKKyAgICBP
cGVyYW5kczxOb2RlKiwgTm9kZVBvaW50ZXJUcmFpdHM+IHZhcmlhYmxlc0F0VGFpbDsKICAgICAK
ICAgICBPcGVyYW5kczxBYnN0cmFjdFZhbHVlPiB2YWx1ZXNBdEhlYWQ7CiAgICAgT3BlcmFuZHM8
QWJzdHJhY3RWYWx1ZT4gdmFsdWVzQXRUYWlsOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdCYXNpY0Jsb2NrSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQmFzaWNCbG9ja0lubGluZXMuaAkocmV2aXNpb24gMTQwMzA2KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrSW5saW5lcy5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zNCw5ICszNCw5IEBACiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7
CiAKICNkZWZpbmUgREZHX0RFRklORV9BUFBFTkRfTk9ERSh0ZW1wbGF0ZVByZSwgdGVtcGxhdGVQ
b3N0LCB0eXBlUGFyYW1zLCB2YWx1ZVBhcmFtc0NvbW1hLCB2YWx1ZVBhcmFtcywgdmFsdWVBcmdz
KSBcCi0gICAgdGVtcGxhdGVQcmUgdHlwZVBhcmFtcyB0ZW1wbGF0ZVBvc3QgTm9kZUluZGV4IEJh
c2ljQmxvY2s6OmFwcGVuZE5vZGUoR3JhcGgmIGdyYXBoLCBSZWZDaGlsZHJlbk1vZGUgcmVmQ2hp
bGRyZW5Nb2RlLCBSZWZOb2RlTW9kZSByZWZOb2RlTW9kZSwgU3BlY3VsYXRlZFR5cGUgdHlwZSB2
YWx1ZVBhcmFtc0NvbW1hIHZhbHVlUGFyYW1zKSBcCisgICAgdGVtcGxhdGVQcmUgdHlwZVBhcmFt
cyB0ZW1wbGF0ZVBvc3QgTm9kZSogQmFzaWNCbG9jazo6YXBwZW5kTm9kZShHcmFwaCYgZ3JhcGgs
IFJlZkNoaWxkcmVuTW9kZSByZWZDaGlsZHJlbk1vZGUsIFJlZk5vZGVNb2RlIHJlZk5vZGVNb2Rl
LCBTcGVjdWxhdGVkVHlwZSB0eXBlIHZhbHVlUGFyYW1zQ29tbWEgdmFsdWVQYXJhbXMpIFwKICAg
ICB7IFwKLSAgICAgICAgTm9kZUluZGV4IHJlc3VsdCA9IGdyYXBoLmFkZE5vZGUocmVmQ2hpbGRy
ZW5Nb2RlLCByZWZOb2RlTW9kZSwgdHlwZSB2YWx1ZVBhcmFtc0NvbW1hIHZhbHVlQXJncyk7IFwK
KyAgICAgICAgTm9kZSogcmVzdWx0ID0gZ3JhcGguYWRkTm9kZShyZWZDaGlsZHJlbk1vZGUsIHJl
Zk5vZGVNb2RlLCB0eXBlIHZhbHVlUGFyYW1zQ29tbWEgdmFsdWVBcmdzKTsgXAogICAgICAgICBh
cHBlbmQocmVzdWx0KTsgXAogICAgICAgICByZXR1cm4gcmVzdWx0OyBcCiAgICAgfQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHJl
dmlzaW9uIDE0MDMwNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQ
YXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMjUwLDkgKzMyNTAsNiBAQCB2b2lkIEJ5dGVD
b2RlUGFyc2VyOjpwcm9jZXNzUGhpU3RhY2soKQogICAgICAgICBpZiAoIWVudHJ5Lm1fYmxvY2st
PmlzUmVhY2hhYmxlKQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIAotICAgICAgICBp
ZiAoIWVudHJ5Lm1fYmxvY2stPmlzUmVhY2hhYmxlKQotICAgICAgICAgICAgY29udGludWU7Ci0g
ICAgICAgIAogICAgICAgICBQcmVkZWNlc3Nvckxpc3QmIHByZWRlY2Vzc29ycyA9IGVudHJ5Lm1f
YmxvY2stPm1fcHJlZGVjZXNzb3JzOwogICAgICAgICB1bnNpZ25lZCB2YXJObyA9IGVudHJ5Lm1f
dmFyTm87CiAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogZGF0YUZvclBoaSA9IG1fZ3JhcGhb
ZW50cnkubV9waGldLnZhcmlhYmxlQWNjZXNzRGF0YSgpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdDRkFQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdDRkFQaGFzZS5jcHAJKHJldmlzaW9uIDE0MDMwNikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQ0ZBUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04OCwx
MSArODgsMTEgQEAgcHJpdmF0ZToKICAgICAgICAgZGF0YUxvZ0YoIlxuIik7CiAjZW5kaWYKICAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGJsb2NrLT5zaXplKCk7ICsraSkgewotICAg
ICAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRleCA9IGJsb2NrLT5hdChpKTsKLSAgICAgICAgICAg
IGlmICghbV9ncmFwaFtub2RlSW5kZXhdLnNob3VsZEdlbmVyYXRlKCkpCisgICAgICAgICAgICBO
b2RlKiBub2RlID0gYmxvY2stPmF0KGkpOworICAgICAgICAgICAgaWYgKCFub2RlLT5zaG91bGRH
ZW5lcmF0ZSgpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogI2lmIERGR19FTkFCTEUoREVC
VUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKLSAgICAgICAgICAgIGRhdGFMb2dGKCIgICAgICAlcyBA
JXU6ICIsIEdyYXBoOjpvcE5hbWUobV9ncmFwaFtub2RlSW5kZXhdLm9wKCkpLCBub2RlSW5kZXgp
OworICAgICAgICAgICAgZGF0YUxvZ0YoIiAgICAgICVzIEAldTogIiwgR3JhcGg6Om9wTmFtZSht
X2dyYXBoW25vZGVJbmRleF0ub3AoKSksIG5vZGUtPmluZGV4KCkpOwogICAgICAgICAgICAgbV9z
dGF0ZS5kdW1wKFdURjo6ZGF0YUZpbGUoKSk7CiAgICAgICAgICAgICBkYXRhTG9nRigiXG4iKTsK
ICNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb24uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uLmNwcAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uLmNwcAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSw0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZHQ29tbW9u
LmgiCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBE
RkcgeworCit2b2lkIE5vZGVQb2ludGVyVHJhaXRzOjpkdW1wKE5vZGUqIHZhbHVlLCBQcmludFN0
cmVhbSYgb3V0KQoreworICAgIG91dC5wcmludCh2YWx1ZSk7Cit9CisKK30gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uLmgJKHJldmlzaW9uIDE0MDMwNikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMiwgMjAxMyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTgxLDE2ICs4MSwxNCBAQAogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKLS8v
IFR5cGUgZm9yIGEgcmVmZXJlbmNlIHRvIGFub3RoZXIgbm9kZSBpbiB0aGUgZ3JhcGguCi10eXBl
ZGVmIHVpbnQzMl90IE5vZGVJbmRleDsKLXN0YXRpYyBjb25zdCBOb2RlSW5kZXggTm9Ob2RlID0g
VUlOVF9NQVg7CitjbGFzcyBOb2RlOwogCiB0eXBlZGVmIHVpbnQzMl90IEJsb2NrSW5kZXg7CiBz
dGF0aWMgY29uc3QgQmxvY2tJbmRleCBOb0Jsb2NrID0gVUlOVF9NQVg7CiAKLXN0cnVjdCBOb2Rl
SW5kZXhUcmFpdHMgewotICAgIHN0YXRpYyBOb2RlSW5kZXggZGVmYXVsdFZhbHVlKCkgeyByZXR1
cm4gTm9Ob2RlOyB9Ci0gICAgc3RhdGljIHZvaWQgZHVtcChOb2RlSW5kZXggdmFsdWUsIFByaW50
U3RyZWFtJiBvdXQpCitzdHJ1Y3QgTm9kZVBvaW50ZXJUcmFpdHMgeworICAgIHN0YXRpYyBOb2Rl
KiBkZWZhdWx0VmFsdWUoKSB7IHJldHVybiAwOyB9CisgICAgc3RhdGljIHZvaWQgZHVtcChOb2Rl
KiB2YWx1ZSwgUHJpbnRTdHJlYW0mIG91dCk7CiAgICAgewogICAgICAgICBpZiAodmFsdWUgPT0g
Tm9Ob2RlKQogICAgICAgICAgICAgb3V0LnByaW50ZigiLSIpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdFZGdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdFZGdlLmgJKHJldmlzaW9uIDE0MDMwNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHRWRnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTEsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00Myw0MSArNDMsMzkgQEAgcHVibGlj
OgogICAgIHsKICAgICB9CiAgICAgCi0gICAgZXhwbGljaXQgRWRnZShOb2RlSW5kZXggbm9kZUlu
ZGV4KQotICAgICAgICA6IG1fZW5jb2RlZFdvcmQobWFrZVdvcmQobm9kZUluZGV4LCBVbnR5cGVk
VXNlKSkKKyAgICBleHBsaWNpdCBFZGdlKE5vZGUqIG5vZGUpCisgICAgICAgIDogbV9lbmNvZGVk
V29yZChtYWtlV29yZChub2RlLCBVbnR5cGVkVXNlKSkKICAgICB7CiAgICAgfQogICAgIAotICAg
IEVkZ2UoTm9kZUluZGV4IG5vZGVJbmRleCwgVXNlS2luZCB1c2VLaW5kKQotICAgICAgICA6IG1f
ZW5jb2RlZFdvcmQobWFrZVdvcmQobm9kZUluZGV4LCB1c2VLaW5kKSkKKyAgICBFZGdlKE5vZGUq
IG5vZGUsIFVzZUtpbmQgdXNlS2luZCkKKyAgICAgICAgOiBtX2VuY29kZWRXb3JkKG1ha2VXb3Jk
KG5vZGUsIHVzZUtpbmQpKQogICAgIHsKICAgICB9CiAgICAgCi0gICAgTm9kZUluZGV4IGluZGV4
VW5jaGVja2VkKCkgY29uc3QgeyByZXR1cm4gbV9lbmNvZGVkV29yZCA+PiBzaGlmdCgpOyB9Ci0g
ICAgTm9kZUluZGV4IGluZGV4KCkgY29uc3QKLSAgICB7Ci0gICAgICAgIEFTU0VSVChpc1NldCgp
KTsKLSAgICAgICAgcmV0dXJuIG1fZW5jb2RlZFdvcmQgPj4gc2hpZnQoKTsKLSAgICB9Ci0gICAg
dm9pZCBzZXRJbmRleChOb2RlSW5kZXggbm9kZUluZGV4KQorICAgIE5vZGUqIG5vZGUoKSBjb25z
dCB7IHJldHVybiBtX2VuY29kZWRXb3JkICYgfigoMSA8PCBzaGlmdCgpKSAtIDEpOyB9CisgICAg
Tm9kZSYgb3BlcmF0b3IqKCkgY29uc3QgeyByZXR1cm4gKmdldCgpOyB9CisgICAgTm9kZSogb3Bl
cmF0b3ItPigpIGNvbnN0IHsgcmV0dXJuIGdldCgpOyB9CisgICAgCisgICAgdm9pZCBzZXROb2Rl
KE5vZGUqIG5vZGUpCiAgICAgewotICAgICAgICBtX2VuY29kZWRXb3JkID0gbWFrZVdvcmQobm9k
ZUluZGV4LCB1c2VLaW5kKCkpOworICAgICAgICBtX2VuY29kZWRXb3JkID0gbWFrZVdvcmQobm9k
ZSwgdXNlS2luZCgpKTsKICAgICB9CiAgICAgCiAgICAgVXNlS2luZCB1c2VLaW5kKCkgY29uc3QK
ICAgICB7Ci0gICAgICAgIEFTU0VSVChpc1NldCgpKTsKKyAgICAgICAgQVNTRVJUKG5vZGUoKSk7
CiAgICAgICAgIHVuc2lnbmVkIG1hc2tlZCA9IG1fZW5jb2RlZFdvcmQgJiAoKCgxIDw8IHNoaWZ0
KCkpIC0gMSkpOwogICAgICAgICBBU1NFUlQobWFza2VkIDwgTGFzdFVzZUtpbmQpOwogICAgICAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8VXNlS2luZD4obWFza2VkKTsKICAgICB9CiAgICAgdm9pZCBz
ZXRVc2VLaW5kKFVzZUtpbmQgdXNlS2luZCkKICAgICB7Ci0gICAgICAgIEFTU0VSVChpc1NldCgp
KTsKLSAgICAgICAgbV9lbmNvZGVkV29yZCA9IG1ha2VXb3JkKGluZGV4KCksIHVzZUtpbmQpOwor
ICAgICAgICBBU1NFUlQobm9kZSgpKTsKKyAgICAgICAgbV9lbmNvZGVkV29yZCA9IG1ha2VXb3Jk
KG5vZGUoKSwgdXNlS2luZCk7CiAgICAgfQogICAgIAotICAgIGJvb2wgaXNTZXQoKSBjb25zdCB7
IHJldHVybiBpbmRleFVuY2hlY2tlZCgpICE9IE5vTm9kZTsgfQorICAgIGJvb2wgaXNTZXQoKSBj
b25zdCB7IHJldHVybiAhIW5vZGUoKTsgfQogICAgIAogICAgIHR5cGVkZWYgdm9pZCogRWRnZTo6
KlVuc3BlY2lmaWVkQm9vbFR5cGU7CiAgICAgb3BlcmF0b3IgVW5zcGVjaWZpZWRCb29sVHlwZSoo
KSBjb25zdCB7IHJldHVybiByZWludGVycHJldF9jYXN0PFVuc3BlY2lmaWVkQm9vbFR5cGUqPihp
c1NldCgpKTsgfQpAQCAtOTYsMzQgKzk0LDM1IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgZnJp
ZW5kIGNsYXNzIEFkamFjZW5jeUxpc3Q7CiAgICAgCi0gICAgc3RhdGljIHVpbnQzMl90IHNoaWZ0
KCkgeyByZXR1cm4gNDsgfQorICAgIHN0YXRpYyB1aW50MzJfdCBzaGlmdCgpIHsgcmV0dXJuIDI7
IH0KICAgICAKLSAgICBzdGF0aWMgaW50MzJfdCBtYWtlV29yZChOb2RlSW5kZXggbm9kZUluZGV4
LCBVc2VLaW5kIHVzZUtpbmQpCisgICAgc3RhdGljIHVpbnRwdHJfdCBtYWtlV29yZChOb2RlKiBu
b2RlLCBVc2VLaW5kIHVzZUtpbmQpCiAgICAgewotICAgICAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8
dWludDMyX3Q+KCgoc3RhdGljX2Nhc3Q8aW50MzJfdD4obm9kZUluZGV4KSA8PCBzaGlmdCgpKSA+
PiBzaGlmdCgpKSkgPT0gbm9kZUluZGV4KTsKKyAgICAgICAgdWludHB0cl90IHZhbHVlID0gYml0
d2lzZV9jYXN0PHVpbnRwdHJfdD4obm9kZSk7CisgICAgICAgIEFTU0VSVCghKHZhbHVlICYgKCgx
IDw8IHNoaWZ0KCkpIC0gMSkpKTsKICAgICAgICAgQVNTRVJUKHVzZUtpbmQgPj0gMCAmJiB1c2VL
aW5kIDwgTGFzdFVzZUtpbmQpOwogICAgICAgICBBU1NFUlQoTGFzdFVzZUtpbmQgPD0gKDEgPDwg
c2hpZnQoKSkpOwotICAgICAgICByZXR1cm4gKG5vZGVJbmRleCA8PCBzaGlmdCgpKSB8IHVzZUtp
bmQ7CisgICAgICAgIHJldHVybiB2YWx1ZSB8IHN0YXRpY19jYXN0PHVpbnRwdHJfdD4odXNlS2lu
ZCk7CiAgICAgfQogICAgIAotICAgIGludDMyX3QgbV9lbmNvZGVkV29yZDsKKyAgICB1aW50cHRy
X3QgbV9lbmNvZGVkV29yZDsKIH07CiAKLWlubGluZSBib29sIG9wZXJhdG9yPT0oRWRnZSBub2Rl
VXNlLCBOb2RlSW5kZXggbm9kZUluZGV4KQoraW5saW5lIGJvb2wgb3BlcmF0b3I9PShFZGdlIGVk
Z2UsIE5vZGUqIG5vZGUpCiB7Ci0gICAgcmV0dXJuIG5vZGVVc2UuaW5kZXhVbmNoZWNrZWQoKSA9
PSBub2RlSW5kZXg7CisgICAgcmV0dXJuIGVkZ2Uubm9kZSgpID09IG5vZGU7CiB9Ci1pbmxpbmUg
Ym9vbCBvcGVyYXRvcj09KE5vZGVJbmRleCBub2RlSW5kZXgsIEVkZ2Ugbm9kZVVzZSkKK2lubGlu
ZSBib29sIG9wZXJhdG9yPT0oTm9kZSogbm9kZSwgRWRnZSBlZGdlKQogewotICAgIHJldHVybiBu
b2RlVXNlLmluZGV4VW5jaGVja2VkKCkgPT0gbm9kZUluZGV4OworICAgIHJldHVybiBlZGdlLm5v
ZGUoKSA9PSBub2RlOwogfQotaW5saW5lIGJvb2wgb3BlcmF0b3IhPShFZGdlIG5vZGVVc2UsIE5v
ZGVJbmRleCBub2RlSW5kZXgpCitpbmxpbmUgYm9vbCBvcGVyYXRvciE9KEVkZ2UgZWRnZSwgTm9k
ZSogbm9kZSkKIHsKLSAgICByZXR1cm4gbm9kZVVzZS5pbmRleFVuY2hlY2tlZCgpICE9IG5vZGVJ
bmRleDsKKyAgICByZXR1cm4gZWRnZS5ub2RlKCkgIT0gbm9kZTsKIH0KLWlubGluZSBib29sIG9w
ZXJhdG9yIT0oTm9kZUluZGV4IG5vZGVJbmRleCwgRWRnZSBub2RlVXNlKQoraW5saW5lIGJvb2wg
b3BlcmF0b3IhPShOb2RlKiBub2RlLCBFZGdlIGVkZ2UpCiB7Ci0gICAgcmV0dXJuIG5vZGVVc2Uu
aW5kZXhVbmNoZWNrZWQoKSAhPSBub2RlSW5kZXg7CisgICAgcmV0dXJuIGVkZ2Uubm9kZSgpICE9
IG5vZGU7CiB9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAkocmV2aXNpb24gMTQwMzA2KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDEzIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtNTgsMjEgKzU4LDIxIEBAIHByaXZhdGU6CiAgICAgICAgIEFTU0VSVChibG9jay0+aXNSZWFj
aGFibGUpOwogICAgICAgICBtX2Jsb2NrID0gYmxvY2s7CiAgICAgICAgIGZvciAobV9pbmRleElu
QmxvY2sgPSAwOyBtX2luZGV4SW5CbG9jayA8IGJsb2NrLT5zaXplKCk7ICsrbV9pbmRleEluQmxv
Y2spIHsKLSAgICAgICAgICAgIG1fY29tcGlsZUluZGV4ID0gYmxvY2stPmF0KG1faW5kZXhJbkJs
b2NrKTsKLSAgICAgICAgICAgIGZpeHVwTm9kZShtX2dyYXBoW21fY29tcGlsZUluZGV4XSk7Cisg
ICAgICAgICAgICBtX2N1cnJlbnROb2RlID0gYmxvY2stPmF0KG1faW5kZXhJbkJsb2NrKTsKKyAg
ICAgICAgICAgIGZpeHVwTm9kZShtX2N1cnJlbnROb2RlKTsKICAgICAgICAgfQogICAgICAgICBt
X2luc2VydGlvblNldC5leGVjdXRlKGJsb2NrKTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBmaXh1
cE5vZGUoTm9kZSYgbm9kZSkKKyAgICB2b2lkIGZpeHVwTm9kZShOb2RlKiBub2RlKQogICAgIHsK
LSAgICAgICAgaWYgKCFub2RlLnNob3VsZEdlbmVyYXRlKCkpCisgICAgICAgIGlmICghbm9kZS0+
c2hvdWxkR2VuZXJhdGUoKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgCi0gICAgICAg
IE5vZGVUeXBlIG9wID0gbm9kZS5vcCgpOworICAgICAgICBOb2RlVHlwZSBvcCA9IG5vZGUtPm9w
KCk7CiAKICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCi0gICAgICAg
IGRhdGFMb2dGKCIgICAlcyBAJXU6ICIsIEdyYXBoOjpvcE5hbWUob3ApLCBtX2NvbXBpbGVJbmRl
eCk7CisgICAgICAgIGRhdGFMb2dGKCIgICAlcyBAJXU6ICIsIEdyYXBoOjpvcE5hbWUob3ApLCBu
b2RlLT5pbmRleCgpKTsKICNlbmRpZgogICAgICAgICAKICAgICAgICAgc3dpdGNoIChvcCkgewpA
QCAtODAsODAgKzgwLDcxIEBAIHByaXZhdGU6CiAgICAgICAgICAgICBpZiAobV9ncmFwaC5tX2Zp
eHBvaW50U3RhdGUgPiBCZWZvcmVGaXhwb2ludCkKICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgIAotICAgICAgICAgICAgTm9kZSogbm9kZVB0ciA9ICZub2RlOwotICAgICAgICAg
ICAgCi0gICAgICAgICAgICBpZiAoIWlzSW50MzJTcGVjdWxhdGlvbihtX2dyYXBoW21fY29tcGls
ZUluZGV4XS5wcmVkaWN0aW9uKCkpKQorICAgICAgICAgICAgaWYgKCFpc0ludDMyU3BlY3VsYXRp
b24obm9kZS0+cHJlZGljdGlvbigpKSkKICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgIGlmIChjb2RlQmxvY2soKS0+aWRlbnRpZmllcihub2RlUHRyLT5pZGVudGlmaWVyTnVtYmVy
KCkpICE9IGdsb2JhbERhdGEoKS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgpCisgICAgICAgICAgICBp
ZiAoY29kZUJsb2NrKCktPmlkZW50aWZpZXIobm9kZS0+aWRlbnRpZmllck51bWJlcigpKSAhPSBn
bG9iYWxEYXRhKCkucHJvcGVydHlOYW1lcy0+bGVuZ3RoKQogICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgQXJyYXlQcm9maWxlKiBhcnJheVByb2ZpbGUgPSAKLSAgICAgICAgICAg
ICAgICBtX2dyYXBoLmJhc2VsaW5lQ29kZUJsb2NrRm9yKG5vZGVQdHItPmNvZGVPcmlnaW4pLT5n
ZXRBcnJheVByb2ZpbGUoCi0gICAgICAgICAgICAgICAgICAgIG5vZGVQdHItPmNvZGVPcmlnaW4u
Ynl0ZWNvZGVJbmRleCk7CisgICAgICAgICAgICAgICAgbV9ncmFwaC5iYXNlbGluZUNvZGVCbG9j
a0Zvcihub2RlLT5jb2RlT3JpZ2luKS0+Z2V0QXJyYXlQcm9maWxlKAorICAgICAgICAgICAgICAg
ICAgICBub2RlLT5jb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgpOwogICAgICAgICAgICAgQXJyYXlN
b2RlIGFycmF5TW9kZSA9IEFycmF5TW9kZShBcnJheTo6U2VsZWN0VXNpbmdQcmVkaWN0aW9ucyk7
CiAgICAgICAgICAgICBpZiAoYXJyYXlQcm9maWxlKSB7Ci0gICAgICAgICAgICAgICAgYXJyYXlQ
cm9maWxlLT5jb21wdXRlVXBkYXRlZFByZWRpY3Rpb24obV9ncmFwaC5iYXNlbGluZUNvZGVCbG9j
a0Zvcihub2RlLmNvZGVPcmlnaW4pKTsKKyAgICAgICAgICAgICAgICBhcnJheVByb2ZpbGUtPmNv
bXB1dGVVcGRhdGVkUHJlZGljdGlvbihtX2dyYXBoLmJhc2VsaW5lQ29kZUJsb2NrRm9yKG5vZGUt
PmNvZGVPcmlnaW4pKTsKICAgICAgICAgICAgICAgICBhcnJheU1vZGUgPSBBcnJheU1vZGU6OmZy
b21PYnNlcnZlZChhcnJheVByb2ZpbGUsIEFycmF5OjpSZWFkLCBmYWxzZSk7CiAgICAgICAgICAg
ICAgICAgYXJyYXlNb2RlID0gYXJyYXlNb2RlLnJlZmluZSgKLSAgICAgICAgICAgICAgICAgICAg
bV9ncmFwaFtub2RlLmNoaWxkMSgpXS5wcmVkaWN0aW9uKCksCi0gICAgICAgICAgICAgICAgICAg
IG1fZ3JhcGhbbV9jb21waWxlSW5kZXhdLnByZWRpY3Rpb24oKSk7CisgICAgICAgICAgICAgICAg
ICAgIG5vZGUtPmNoaWxkMSgpLT5wcmVkaWN0aW9uKCksIG5vZGUtPnByZWRpY3Rpb24oKSk7CiAg
ICAgICAgICAgICAgICAgaWYgKGFycmF5TW9kZS5zdXBwb3J0c0xlbmd0aCgpICYmIGFycmF5UHJv
ZmlsZS0+aGFzRGVmaW5pdGVTdHJ1Y3R1cmUoKSkgewogICAgICAgICAgICAgICAgICAgICBtX2lu
c2VydGlvblNldC5pbnNlcnROb2RlKAogICAgICAgICAgICAgICAgICAgICAgICAgbV9pbmRleElu
QmxvY2ssIFJlZkNoaWxkcmVuLCBEb250UmVmTm9kZSwgU3BlY05vbmUsIENoZWNrU3RydWN0dXJl
LAotICAgICAgICAgICAgICAgICAgICAgICAgbm9kZVB0ci0+Y29kZU9yaWdpbiwgT3BJbmZvKG1f
Z3JhcGguYWRkU3RydWN0dXJlU2V0KGFycmF5UHJvZmlsZS0+ZXhwZWN0ZWRTdHJ1Y3R1cmUoKSkp
LAotICAgICAgICAgICAgICAgICAgICAgICAgbm9kZVB0ci0+Y2hpbGQxKCkuaW5kZXgoKSk7Ci0g
ICAgICAgICAgICAgICAgICAgIG5vZGVQdHIgPSAmbV9ncmFwaFttX2NvbXBpbGVJbmRleF07Cisg
ICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5jb2RlT3JpZ2luLCBPcEluZm8obV9ncmFwaC5h
ZGRTdHJ1Y3R1cmVTZXQoYXJyYXlQcm9maWxlLT5leHBlY3RlZFN0cnVjdHVyZSgpKSksCisgICAg
ICAgICAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDEoKS5ub2RlKCkpOwogICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgYXJyYXlNb2RlID0g
YXJyYXlNb2RlLnJlZmluZSgKLSAgICAgICAgICAgICAgICAgICAgbV9ncmFwaFtub2RlLmNoaWxk
MSgpXS5wcmVkaWN0aW9uKCksCi0gICAgICAgICAgICAgICAgICAgIG1fZ3JhcGhbbV9jb21waWxl
SW5kZXhdLnByZWRpY3Rpb24oKSk7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UK
KyAgICAgICAgICAgICAgICBhcnJheU1vZGUgPSBhcnJheU1vZGUucmVmaW5lKG5vZGUtPmNoaWxk
MSgpLT5wcmVkaWN0aW9uKCksIG5vZGUtPnByZWRpY3Rpb24oKSk7CiAgICAgICAgICAgICBpZiAo
IWFycmF5TW9kZS5zdXBwb3J0c0xlbmd0aCgpKQogICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgbm9kZVB0ci0+c2V0T3AoR2V0QXJyYXlMZW5ndGgpOwotICAgICAgICAgICAgQVNT
RVJUKG5vZGVQdHItPmZsYWdzKCkgJiBOb2RlTXVzdEdlbmVyYXRlKTsKLSAgICAgICAgICAgIG5v
ZGVQdHItPmNsZWFyRmxhZ3MoTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVDbG9iYmVyc1dvcmxkKTsK
LSAgICAgICAgICAgIG1fZ3JhcGguZGVyZWYobV9jb21waWxlSW5kZXgpOwotICAgICAgICAgICAg
bm9kZVB0ci0+c2V0QXJyYXlNb2RlKGFycmF5TW9kZSk7CisgICAgICAgICAgICBub2RlLT5zZXRP
cChHZXRBcnJheUxlbmd0aCk7CisgICAgICAgICAgICBBU1NFUlQobm9kZS0+ZmxhZ3MoKSAmIE5v
ZGVNdXN0R2VuZXJhdGUpOworICAgICAgICAgICAgbm9kZS0+Y2xlYXJGbGFncyhOb2RlTXVzdEdl
bmVyYXRlIHwgTm9kZUNsb2JiZXJzV29ybGQpOworICAgICAgICAgICAgbV9ncmFwaC5kZXJlZihu
b2RlKTsKKyAgICAgICAgICAgIG5vZGUtPnNldEFycmF5TW9kZShhcnJheU1vZGUpOwogICAgICAg
ICAgICAgCi0gICAgICAgICAgICBOb2RlSW5kZXggc3RvcmFnZSA9IGNoZWNrQXJyYXkoYXJyYXlN
b2RlLCBub2RlUHRyLT5jb2RlT3JpZ2luLCBub2RlUHRyLT5jaGlsZDEoKS5pbmRleCgpLCBOb05v
ZGUsIGxlbmd0aE5lZWRzU3RvcmFnZSwgbm9kZVB0ci0+c2hvdWxkR2VuZXJhdGUoKSk7Ci0gICAg
ICAgICAgICBpZiAoc3RvcmFnZSA9PSBOb05vZGUpCisgICAgICAgICAgICBOb2RlKiBzdG9yYWdl
ID0gY2hlY2tBcnJheShhcnJheU1vZGUsIG5vZGUtPmNvZGVPcmlnaW4sIG5vZGUtPmNoaWxkMSgp
Lm5vZGUoKSwgMCwgbGVuZ3RoTmVlZHNTdG9yYWdlLCBub2RlLT5zaG91bGRHZW5lcmF0ZSgpKTsK
KyAgICAgICAgICAgIGlmICghc3RvcmFnZSkKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgIAotICAgICAgICAgICAgbm9kZVB0ciA9ICZtX2dyYXBoW21fY29tcGlsZUluZGV4XTsK
LSAgICAgICAgICAgIG5vZGVQdHItPmNoaWxkcmVuLmNoaWxkMigpID0gRWRnZShzdG9yYWdlKTsK
KyAgICAgICAgICAgIG5vZGUtPmNoaWxkcmVuLmNoaWxkMigpID0gRWRnZShzdG9yYWdlKTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgR2V0SW5kZXhlZFByb3Bl
cnR5U3RvcmFnZTogewotICAgICAgICAgICAgQVNTRVJUKG5vZGUuYXJyYXlNb2RlKCkuY2FuQ1NF
U3RvcmFnZSgpKTsKKyAgICAgICAgICAgIEFTU0VSVChub2RlLT5hcnJheU1vZGUoKS5jYW5DU0VT
dG9yYWdlKCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBH
ZXRCeVZhbDogewotICAgICAgICAgICAgbm9kZS5zZXRBcnJheU1vZGUoCi0gICAgICAgICAgICAg
ICAgbm9kZS5hcnJheU1vZGUoKS5yZWZpbmUoCi0gICAgICAgICAgICAgICAgICAgIG1fZ3JhcGhb
bm9kZS5jaGlsZDEoKV0ucHJlZGljdGlvbigpLAotICAgICAgICAgICAgICAgICAgICBtX2dyYXBo
W25vZGUuY2hpbGQyKCldLnByZWRpY3Rpb24oKSwKLSAgICAgICAgICAgICAgICAgICAgU3BlY05v
bmUsIG5vZGUuZmxhZ3MoKSkpOworICAgICAgICAgICAgbm9kZS0+c2V0QXJyYXlNb2RlKAorICAg
ICAgICAgICAgICAgIG5vZGUtPmFycmF5TW9kZSgpLnJlZmluZSgKKyAgICAgICAgICAgICAgICAg
ICAgbm9kZS0+Y2hpbGQxKCktPnByZWRpY3Rpb24oKSwKKyAgICAgICAgICAgICAgICAgICAgbm9k
ZS0+Y2hpbGQyKCktPnByZWRpY3Rpb24oKSwKKyAgICAgICAgICAgICAgICAgICAgU3BlY05vbmUs
IG5vZGUtPmZsYWdzKCkpKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgYmxlc3NBcnJheU9w
ZXJhdGlvbihub2RlLmNoaWxkMSgpLCBub2RlLmNoaWxkMigpLCAyKTsKKyAgICAgICAgICAgIGJs
ZXNzQXJyYXlPcGVyYXRpb24obm9kZS0+Y2hpbGQxKCksIG5vZGUtPmNoaWxkMigpLCAyKTsKICAg
ICAgICAgICAgIAotICAgICAgICAgICAgTm9kZSogbm9kZVB0ciA9ICZtX2dyYXBoW21fY29tcGls
ZUluZGV4XTsKLSAgICAgICAgICAgIEFycmF5TW9kZSBhcnJheU1vZGUgPSBub2RlUHRyLT5hcnJh
eU1vZGUoKTsKKyAgICAgICAgICAgIEFycmF5TW9kZSBhcnJheU1vZGUgPSBub2RlLT5hcnJheU1v
ZGUoKTsKICAgICAgICAgICAgIGlmIChhcnJheU1vZGUudHlwZSgpID09IEFycmF5OjpEb3VibGUK
ICAgICAgICAgICAgICAgICAmJiBhcnJheU1vZGUuYXJyYXlDbGFzcygpID09IEFycmF5OjpPcmln
aW5hbEFycmF5CiAgICAgICAgICAgICAgICAgJiYgYXJyYXlNb2RlLnNwZWN1bGF0aW9uKCkgPT0g
QXJyYXk6OkluQm91bmRzCiAgICAgICAgICAgICAgICAgJiYgYXJyYXlNb2RlLmNvbnZlcnNpb24o
KSA9PSBBcnJheTo6QXNJcwotICAgICAgICAgICAgICAgICYmIG1fZ3JhcGguZ2xvYmFsT2JqZWN0
Rm9yKG5vZGVQdHItPmNvZGVPcmlnaW4pLT5hcnJheVByb3RvdHlwZUNoYWluSXNTYW5lKCkKLSAg
ICAgICAgICAgICAgICAmJiAhKG5vZGVQdHItPmZsYWdzKCkgJiBOb2RlVXNlZEFzT3RoZXIpKQot
ICAgICAgICAgICAgICAgIG5vZGVQdHItPnNldEFycmF5TW9kZShhcnJheU1vZGUud2l0aFNwZWN1
bGF0aW9uKEFycmF5OjpTYW5lQ2hhaW4pKTsKKyAgICAgICAgICAgICAgICAmJiBtX2dyYXBoLmds
b2JhbE9iamVjdEZvcihub2RlLT5jb2RlT3JpZ2luKS0+YXJyYXlQcm90b3R5cGVDaGFpbklzU2Fu
ZSgpCisgICAgICAgICAgICAgICAgJiYgIShub2RlLT5mbGFncygpICYgTm9kZVVzZWRBc090aGVy
KSkKKyAgICAgICAgICAgICAgICBub2RlLT5zZXRBcnJheU1vZGUoYXJyYXlNb2RlLndpdGhTcGVj
dWxhdGlvbihBcnJheTo6U2FuZUNoYWluKSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgU3RyaW5nQ2hhckF0OgogICAgICAgICBjYXNl
IFN0cmluZ0NoYXJDb2RlQXQ6IHsKICAgICAgICAgICAgIC8vIEN1cnJlbnRseSB3ZSBoYXZlIG5v
IGdvb2Qgd2F5IG9mIHJlZmluaW5nIHRoZXNlLgotICAgICAgICAgICAgQVNTRVJUKG5vZGUuYXJy
YXlNb2RlKCkgPT0gQXJyYXlNb2RlKEFycmF5OjpTdHJpbmcpKTsKLSAgICAgICAgICAgIGJsZXNz
QXJyYXlPcGVyYXRpb24obm9kZS5jaGlsZDEoKSwgbm9kZS5jaGlsZDIoKSwgMik7CisgICAgICAg
ICAgICBBU1NFUlQobm9kZS0+YXJyYXlNb2RlKCkgPT0gQXJyYXlNb2RlKEFycmF5OjpTdHJpbmcp
KTsKKyAgICAgICAgICAgIGJsZXNzQXJyYXlPcGVyYXRpb24obm9kZS0+Y2hpbGQxKCksIG5vZGUt
PmNoaWxkMigpLCAyKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAg
ICAKQEAgLTE2NywxNSArMTU4LDE0IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAvLyBpZ25vcmVk
LiBUaGF0J3MgYmVjYXVzZSBBcnJheVB1c2ggY2FuJ3QgaGFuZGxlIGFueSBhcnJheSBtb2RlcyB0
aGF0IGFyZW4ndAogICAgICAgICAgICAgLy8gYXJyYXktcmVsYXRlZCAtIHNvIGlmIHJlZmluZSgp
IHR1cm5lZCB0aGlzIGludG8gYSAiR2VuZXJpYyIgQXJyYXlQdXNoIHRoZW4KICAgICAgICAgICAg
IC8vIHRoYXQgd291bGQgYnJlYWsgdGhpbmdzLgotICAgICAgICAgICAgbm9kZS5zZXRBcnJheU1v
ZGUoCi0gICAgICAgICAgICAgICAgbm9kZS5hcnJheU1vZGUoKS5yZWZpbmUoCi0gICAgICAgICAg
ICAgICAgICAgIG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ucHJlZGljdGlvbigpICYgU3BlY0NlbGws
CisgICAgICAgICAgICBub2RlLT5zZXRBcnJheU1vZGUoCisgICAgICAgICAgICAgICAgbm9kZS0+
YXJyYXlNb2RlKCkucmVmaW5lKAorICAgICAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDEoKS0+
cHJlZGljdGlvbigpICYgU3BlY0NlbGwsCiAgICAgICAgICAgICAgICAgICAgIFNwZWNJbnQzMiwK
LSAgICAgICAgICAgICAgICAgICAgbV9ncmFwaFtub2RlLmNoaWxkMigpXS5wcmVkaWN0aW9uKCkp
KTsKLSAgICAgICAgICAgIGJsZXNzQXJyYXlPcGVyYXRpb24obm9kZS5jaGlsZDEoKSwgRWRnZSgp
LCAyKTsKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQyKCktPnByZWRpY3Rpb24oKSkp
OworICAgICAgICAgICAgYmxlc3NBcnJheU9wZXJhdGlvbihub2RlLT5jaGlsZDEoKSwgRWRnZSgp
LCAyKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgTm9kZSogbm9kZVB0ciA9ICZtX2dyYXBo
W21fY29tcGlsZUluZGV4XTsKLSAgICAgICAgICAgIHN3aXRjaCAobm9kZVB0ci0+YXJyYXlNb2Rl
KCkudHlwZSgpKSB7CisgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPmFycmF5TW9kZSgpLnR5cGUo
KSkgewogICAgICAgICAgICAgY2FzZSBBcnJheTo6RG91YmxlOgogICAgICAgICAgICAgICAgIGZp
eERvdWJsZUVkZ2UoMSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0xODYsMTUgKzE3Niwx
NSBAQCBwcml2YXRlOgogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBBcnJh
eVBvcDogewotICAgICAgICAgICAgYmxlc3NBcnJheU9wZXJhdGlvbihub2RlLmNoaWxkMSgpLCBF
ZGdlKCksIDEpOworICAgICAgICAgICAgYmxlc3NBcnJheU9wZXJhdGlvbihub2RlLT5jaGlsZDEo
KSwgRWRnZSgpLCAxKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAg
ICAKICAgICAgICAgY2FzZSBWYWx1ZVRvSW50MzI6IHsKLSAgICAgICAgICAgIGlmIChtX2dyYXBo
W25vZGUuY2hpbGQxKCldLnNob3VsZFNwZWN1bGF0ZU51bWJlcigpCi0gICAgICAgICAgICAgICAg
JiYgbm9kZS5tdXN0R2VuZXJhdGUoKSkgewotICAgICAgICAgICAgICAgIG5vZGUuY2xlYXJGbGFn
cyhOb2RlTXVzdEdlbmVyYXRlKTsKLSAgICAgICAgICAgICAgICBtX2dyYXBoLmRlcmVmKG1fY29t
cGlsZUluZGV4KTsKKyAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3Vs
YXRlTnVtYmVyKCkKKyAgICAgICAgICAgICAgICAmJiBub2RlLT5tdXN0R2VuZXJhdGUoKSkgewor
ICAgICAgICAgICAgICAgIG5vZGUtPmNsZWFyRmxhZ3MoTm9kZU11c3RHZW5lcmF0ZSk7CisgICAg
ICAgICAgICAgICAgbV9ncmFwaC5kZXJlZihub2RlKTsKICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICB9CkBAIC0yMDUsOCArMTk1LDggQEAgcHJpdmF0ZToKICAgICAg
ICAgY2FzZSBCaXRSU2hpZnQ6CiAgICAgICAgIGNhc2UgQml0TFNoaWZ0OgogICAgICAgICBjYXNl
IEJpdFVSU2hpZnQ6IHsKLSAgICAgICAgICAgIGZpeEludEVkZ2Uobm9kZS5jaGlsZHJlbi5jaGls
ZDEoKSk7Ci0gICAgICAgICAgICBmaXhJbnRFZGdlKG5vZGUuY2hpbGRyZW4uY2hpbGQyKCkpOwor
ICAgICAgICAgICAgZml4SW50RWRnZShub2RlLT5jaGlsZHJlbi5jaGlsZDEoKSk7CisgICAgICAg
ICAgICBmaXhJbnRFZGdlKG5vZGUtPmNoaWxkcmVuLmNoaWxkMigpKTsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKQEAgLTIxNiw5ICsyMDYsOSBAQCBwcml2YXRl
OgogICAgICAgICBjYXNlIENvbXBhcmVHcmVhdGVyOgogICAgICAgICBjYXNlIENvbXBhcmVHcmVh
dGVyRXE6CiAgICAgICAgIGNhc2UgQ29tcGFyZVN0cmljdEVxOiB7Ci0gICAgICAgICAgICBpZiAo
Tm9kZTo6c2hvdWxkU3BlY3VsYXRlSW50ZWdlcihtX2dyYXBoW25vZGUuY2hpbGQxKCldLCBtX2dy
YXBoW25vZGUuY2hpbGQyKCldKSkKKyAgICAgICAgICAgIGlmIChOb2RlOjpzaG91bGRTcGVjdWxh
dGVJbnRlZ2VyKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgbm9kZS0+Y2hpbGQyKCkubm9kZSgpKSkK
ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGlmICghTm9kZTo6c2hvdWxkU3Bl
Y3VsYXRlTnVtYmVyKG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0sIG1fZ3JhcGhbbm9kZS5jaGlsZDIo
KV0pKQorICAgICAgICAgICAgaWYgKCFOb2RlOjpzaG91bGRTcGVjdWxhdGVOdW1iZXIobm9kZS0+
Y2hpbGQxKCkubm9kZSgpLCBub2RlLT5jaGlsZDIoKS5ub2RlKCkpKQogICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgZml4RG91YmxlRWRnZSgwKTsKICAgICAgICAgICAgIGZpeERv
dWJsZUVkZ2UoMSk7CkBAIC0yMjYsNDMgKzIxNiw0MSBAQCBwcml2YXRlOgogICAgICAgICB9CiAg
ICAgICAgICAgICAKICAgICAgICAgY2FzZSBMb2dpY2FsTm90OiB7Ci0gICAgICAgICAgICBpZiAo
bV9ncmFwaFtub2RlLmNoaWxkMSgpXS5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpCisgICAgICAg
ICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKSkKICAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGlmICghbV9ncmFwaFtub2RlLmNoaWxkMSgp
XS5zaG91bGRTcGVjdWxhdGVOdW1iZXIoKSkKKyAgICAgICAgICAgIGlmICghbm9kZS0+Y2hpbGQx
KCktPnNob3VsZFNwZWN1bGF0ZU51bWJlcigpKQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgZml4RG91YmxlRWRnZSgwKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9
CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBCcmFuY2g6IHsKLSAgICAgICAgICAgIGlmICgh
bV9ncmFwaFtub2RlLmNoaWxkMSgpXS5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkKLSAgICAgICAg
ICAgICAgICAmJiBtX2dyYXBoW25vZGUuY2hpbGQxKCldLnNob3VsZFNwZWN1bGF0ZU51bWJlcigp
KQorICAgICAgICAgICAgaWYgKCFub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlSW50ZWdl
cigpCisgICAgICAgICAgICAgICAgJiYgbm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZU51
bWJlcigpKQogICAgICAgICAgICAgICAgIGZpeERvdWJsZUVkZ2UoMCk7CiAKLSAgICAgICAgICAg
IE5vZGUmIG15Tm9kZSA9IG1fZ3JhcGhbbV9jb21waWxlSW5kZXhdOyAvLyByZWxvYWQgYmVjYXVz
ZSB0aGUgZ3JhcGggbWF5IGhhdmUgY2hhbmdlZAotICAgICAgICAgICAgRWRnZSBsb2dpY2FsTm90
RWRnZSA9IG15Tm9kZS5jaGlsZDEoKTsKLSAgICAgICAgICAgIE5vZGUmIGxvZ2ljYWxOb3QgPSBt
X2dyYXBoW2xvZ2ljYWxOb3RFZGdlXTsKLSAgICAgICAgICAgIGlmIChsb2dpY2FsTm90Lm9wKCkg
PT0gTG9naWNhbE5vdAotICAgICAgICAgICAgICAgICYmIGxvZ2ljYWxOb3QuYWRqdXN0ZWRSZWZD
b3VudCgpID09IDEpIHsKLSAgICAgICAgICAgICAgICBFZGdlIG5ld0NoaWxkRWRnZSA9IGxvZ2lj
YWxOb3QuY2hpbGQxKCk7Ci0gICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGhbbmV3Q2hpbGRFZGdl
XS5oYXNCb29sZWFuUmVzdWx0KCkpIHsKKyAgICAgICAgICAgIE5vZGUqIGxvZ2ljYWxOb3QgPSBu
b2RlLT5jaGlsZDEoKS5ub2RlKCk7CisgICAgICAgICAgICBpZiAobG9naWNhbE5vdC0+b3AoKSA9
PSBMb2dpY2FsTm90CisgICAgICAgICAgICAgICAgJiYgbG9naWNhbE5vdC0+YWRqdXN0ZWRSZWZD
b3VudCgpID09IDEpIHsKKyAgICAgICAgICAgICAgICBFZGdlIG5ld0NoaWxkRWRnZSA9IGxvZ2lj
YWxOb3QtPmNoaWxkMSgpOworICAgICAgICAgICAgICAgIGlmIChuZXdDaGlsZEVkZ2UtPmhhc0Jv
b2xlYW5SZXN1bHQoKSkgewogICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLnJlZihuZXdDaGls
ZEVkZ2UpOwotICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLmRlcmVmKGxvZ2ljYWxOb3RFZGdl
KTsKKyAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5kZXJlZihsb2dpY2FsTm90KTsKICAgICAg
ICAgICAgICAgICAgICAgbXlOb2RlLmNoaWxkcmVuLnNldENoaWxkMShuZXdDaGlsZEVkZ2UpOwog
ICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgQmxvY2tJbmRleCB0b0Jl
VGFrZW4gPSBteU5vZGUubm90VGFrZW5CbG9ja0luZGV4KCk7Ci0gICAgICAgICAgICAgICAgICAg
IEJsb2NrSW5kZXggdG9CZU5vdFRha2VuID0gbXlOb2RlLnRha2VuQmxvY2tJbmRleCgpOwotICAg
ICAgICAgICAgICAgICAgICBteU5vZGUuc2V0VGFrZW5CbG9ja0luZGV4KHRvQmVUYWtlbik7Ci0g
ICAgICAgICAgICAgICAgICAgIG15Tm9kZS5zZXROb3RUYWtlbkJsb2NrSW5kZXgodG9CZU5vdFRh
a2VuKTsKKyAgICAgICAgICAgICAgICAgICAgQmxvY2tJbmRleCB0b0JlVGFrZW4gPSBub2RlLT5u
b3RUYWtlbkJsb2NrSW5kZXgoKTsKKyAgICAgICAgICAgICAgICAgICAgQmxvY2tJbmRleCB0b0Jl
Tm90VGFrZW4gPSBub2RlLT50YWtlbkJsb2NrSW5kZXgoKTsKKyAgICAgICAgICAgICAgICAgICAg
bm9kZS0+c2V0VGFrZW5CbG9ja0luZGV4KHRvQmVUYWtlbik7CisgICAgICAgICAgICAgICAgICAg
IG5vZGUtPnNldE5vdFRha2VuQmxvY2tJbmRleCh0b0JlTm90VGFrZW4pOwogICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAg
ICAgICAgICAKICAgICAgICAgY2FzZSBTZXRMb2NhbDogewotICAgICAgICAgICAgaWYgKG5vZGUu
dmFyaWFibGVBY2Nlc3NEYXRhKCktPmlzQ2FwdHVyZWQoKSkKKyAgICAgICAgICAgIGlmIChub2Rl
LT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+aXNDYXB0dXJlZCgpKQogICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgaWYgKCFub2RlLnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5zaG91bGRV
c2VEb3VibGVGb3JtYXQoKSkKKyAgICAgICAgICAgIGlmICghbm9kZS0+dmFyaWFibGVBY2Nlc3NE
YXRhKCktPnNob3VsZFVzZURvdWJsZUZvcm1hdCgpKQogICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgZml4RG91YmxlRWRnZSgwKTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMjcy
LDcgKzI2MCw3IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgVmFsdWVBZGQ6IHsKICAgICAgICAg
ICAgIGlmIChtX2dyYXBoLmFkZFNob3VsZFNwZWN1bGF0ZUludGVnZXIobm9kZSkpCiAgICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBpZiAoIU5vZGU6OnNob3VsZFNwZWN1bGF0ZU51
bWJlckV4cGVjdGluZ0RlZmluZWQobV9ncmFwaFtub2RlLmNoaWxkMSgpXSwgbV9ncmFwaFtub2Rl
LmNoaWxkMigpXSkpCisgICAgICAgICAgICBpZiAoIU5vZGU6OnNob3VsZFNwZWN1bGF0ZU51bWJl
ckV4cGVjdGluZ0RlZmluZWQobm9kZS0+Y2hpbGQxKCkubm9kZSgpLCBub2RlLT5jaGlsZDIoKS5u
b2RlKCkpKQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgZml4RG91YmxlRWRn
ZSgwKTsKICAgICAgICAgICAgIGZpeERvdWJsZUVkZ2UoMSk7CkBAIC0yODEsNyArMjY5LDcgQEAg
cHJpdmF0ZToKICAgICAgICAgICAgIAogICAgICAgICBjYXNlIEFyaXRoU3ViOiB7CiAgICAgICAg
ICAgICBpZiAobV9ncmFwaC5hZGRTaG91bGRTcGVjdWxhdGVJbnRlZ2VyKG5vZGUpCi0gICAgICAg
ICAgICAgICAgJiYgbm9kZS5jYW5TcGVjdWxhdGVJbnRlZ2VyKCkpCisgICAgICAgICAgICAgICAg
JiYgbm9kZS0+Y2FuU3BlY3VsYXRlSW50ZWdlcigpKQogICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgZml4RG91YmxlRWRnZSgwKTsKICAgICAgICAgICAgIGZpeERvdWJsZUVkZ2Uo
MSk7CkBAIC0yOTgsOCArMjg2LDggQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBBcml0aE1pbjoK
ICAgICAgICAgY2FzZSBBcml0aE1heDoKICAgICAgICAgY2FzZSBBcml0aE1vZDogewotICAgICAg
ICAgICAgaWYgKE5vZGU6OnNob3VsZFNwZWN1bGF0ZUludGVnZXJGb3JBcml0aG1ldGljKG1fZ3Jh
cGhbbm9kZS5jaGlsZDEoKV0sIG1fZ3JhcGhbbm9kZS5jaGlsZDIoKV0pCi0gICAgICAgICAgICAg
ICAgJiYgbm9kZS5jYW5TcGVjdWxhdGVJbnRlZ2VyKCkpCisgICAgICAgICAgICBpZiAoTm9kZTo6
c2hvdWxkU3BlY3VsYXRlSW50ZWdlckZvckFyaXRobWV0aWMobm9kZS0+Y2hpbGQxKCkubm9kZSgp
LCBub2RlLT5jaGlsZDIoKS5ub2RlKCkpCisgICAgICAgICAgICAgICAgJiYgbm9kZS0+Y2FuU3Bl
Y3VsYXRlSW50ZWdlcigpKQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgZml4
RG91YmxlRWRnZSgwKTsKICAgICAgICAgICAgIGZpeERvdWJsZUVkZ2UoMSk7CkBAIC0zMTUsOCAr
MzAzLDggQEAgcHJpdmF0ZToKICAgICAgICAgfQogCiAgICAgICAgIGNhc2UgQXJpdGhEaXY6IHsK
LSAgICAgICAgICAgIGlmIChOb2RlOjpzaG91bGRTcGVjdWxhdGVJbnRlZ2VyRm9yQXJpdGhtZXRp
YyhtX2dyYXBoW25vZGUuY2hpbGQxKCldLCBtX2dyYXBoW25vZGUuY2hpbGQyKCldKQotICAgICAg
ICAgICAgICAgICYmIG5vZGUuY2FuU3BlY3VsYXRlSW50ZWdlcigpKSB7CisgICAgICAgICAgICBp
ZiAoTm9kZTo6c2hvdWxkU3BlY3VsYXRlSW50ZWdlckZvckFyaXRobWV0aWMobm9kZS0+Y2hpbGQx
KCkubm9kZSgpLCBub2RlLT5jaGlsZDIoKS5ub2RlKCkpCisgICAgICAgICAgICAgICAgJiYgbm9k
ZS0+Y2FuU3BlY3VsYXRlSW50ZWdlcigpKSB7CiAgICAgICAgICAgICAgICAgaWYgKGlzWDg2KCkp
CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIGluamVjdEludDMy
VG9Eb3VibGVOb2RlKDApOwpAQCAtMzI0LDEyICszMTIsMTEgQEAgcHJpdmF0ZToKIAogICAgICAg
ICAgICAgICAgIC8vIFdlIGRvbid0IG5lZWQgdG8gZG8gcmVmJ2luZyBvbiB0aGUgY2hpbGRyZW4g
YmVjYXVzZSB3ZSdyZSBzdGVhbGluZyB0aGVtIGZyb20KICAgICAgICAgICAgICAgICAvLyB0aGUg
b3JpZ2luYWwgZGl2aXNpb24uCi0gICAgICAgICAgICAgICAgTm9kZUluZGV4IG5ld0RpdmlzaW9u
SW5kZXggPSBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAotICAgICAgICAgICAgICAgICAgICBt
X2luZGV4SW5CbG9jaywgRG9udFJlZkNoaWxkcmVuLCBSZWZOb2RlLCBTcGVjRG91YmxlLCBtX2dy
YXBoW21fY29tcGlsZUluZGV4XSk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAg
bV9ncmFwaFttX2NvbXBpbGVJbmRleF0uc2V0T3AoRG91YmxlQXNJbnQzMik7Ci0gICAgICAgICAg
ICAgICAgbV9ncmFwaFttX2NvbXBpbGVJbmRleF0uY2hpbGRyZW4uaW5pdGlhbGl6ZShFZGdlKG5l
d0RpdmlzaW9uSW5kZXgsIERvdWJsZVVzZSksIEVkZ2UoKSwgRWRnZSgpKTsKKyAgICAgICAgICAg
ICAgICBOb2RlKiBuZXdEaXZpc2lvbiA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCisgICAg
ICAgICAgICAgICAgICAgIG1faW5kZXhJbkJsb2NrLCBEb250UmVmQ2hpbGRyZW4sIFJlZk5vZGUs
IFNwZWNEb3VibGUsIG5vZGUpOwogICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIG5v
ZGUtPnNldE9wKERvdWJsZUFzSW50MzIpOworICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkcmVu
LmluaXRpYWxpemUoRWRnZShuZXdEaXZpc2lvbiwgRG91YmxlVXNlKSwgRWRnZSgpLCBFZGdlKCkp
OwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZml4
RG91YmxlRWRnZSgwKTsKQEAgLTMzOCw4ICszMjUsOCBAQCBwcml2YXRlOgogICAgICAgICB9CiAg
ICAgICAgICAgICAKICAgICAgICAgY2FzZSBBcml0aEFiczogewotICAgICAgICAgICAgaWYgKG1f
Z3JhcGhbbm9kZS5jaGlsZDEoKV0uc2hvdWxkU3BlY3VsYXRlSW50ZWdlckZvckFyaXRobWV0aWMo
KQotICAgICAgICAgICAgICAgICYmIG5vZGUuY2FuU3BlY3VsYXRlSW50ZWdlcigpKQorICAgICAg
ICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyRm9yQXJpdGht
ZXRpYygpCisgICAgICAgICAgICAgICAgJiYgbm9kZS0+Y2FuU3BlY3VsYXRlSW50ZWdlcigpKQog
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgZml4RG91YmxlRWRnZSgwKTsKICAg
ICAgICAgICAgIGJyZWFrOwpAQCAtMzU4LDE1ICszNDUsMTMgQEAgcHJpdmF0ZToKIAogICAgICAg
ICAgICAgbm9kZS5zZXRBcnJheU1vZGUoCiAgICAgICAgICAgICAgICAgbm9kZS5hcnJheU1vZGUo
KS5yZWZpbmUoCi0gICAgICAgICAgICAgICAgICAgIG1fZ3JhcGhbY2hpbGQxXS5wcmVkaWN0aW9u
KCksCi0gICAgICAgICAgICAgICAgICAgIG1fZ3JhcGhbY2hpbGQyXS5wcmVkaWN0aW9uKCksCi0g
ICAgICAgICAgICAgICAgICAgIG1fZ3JhcGhbY2hpbGQzXS5wcmVkaWN0aW9uKCkpKTsKKyAgICAg
ICAgICAgICAgICAgICAgY2hpbGQxLT5wcmVkaWN0aW9uKCksCisgICAgICAgICAgICAgICAgICAg
IGNoaWxkMi0+cHJlZGljdGlvbigpLAorICAgICAgICAgICAgICAgICAgICBjaGlsZDMtPnByZWRp
Y3Rpb24oKSkpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBibGVzc0FycmF5T3BlcmF0aW9u
KGNoaWxkMSwgY2hpbGQyLCAzKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgTm9kZSogbm9k
ZVB0ciA9ICZtX2dyYXBoW21fY29tcGlsZUluZGV4XTsKLSAgICAgICAgICAgIAotICAgICAgICAg
ICAgc3dpdGNoIChub2RlUHRyLT5hcnJheU1vZGUoKS5tb2RlRm9yUHV0KCkudHlwZSgpKSB7Cisg
ICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPmFycmF5TW9kZSgpLm1vZGVGb3JQdXQoKS50eXBlKCkp
IHsKICAgICAgICAgICAgIGNhc2UgQXJyYXk6OkRvdWJsZToKICAgICAgICAgICAgICAgICBmaXhE
b3VibGVFZGdlKDIpOwogICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMzc3LDcgKzM2Miw3IEBA
IHByaXZhdGU6CiAgICAgICAgICAgICBjYXNlIEFycmF5OjpVaW50OENsYW1wZWRBcnJheToKICAg
ICAgICAgICAgIGNhc2UgQXJyYXk6OlVpbnQxNkFycmF5OgogICAgICAgICAgICAgY2FzZSBBcnJh
eTo6VWludDMyQXJyYXk6Ci0gICAgICAgICAgICAgICAgaWYgKCFtX2dyYXBoW2NoaWxkM10uc2hv
dWxkU3BlY3VsYXRlSW50ZWdlcigpKQorICAgICAgICAgICAgICAgIGlmICghY2hpbGQzLT5zaG91
bGRTcGVjdWxhdGVJbnRlZ2VyKCkpCiAgICAgICAgICAgICAgICAgICAgIGZpeERvdWJsZUVkZ2Uo
Mik7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIEFycmF5OjpGbG9h
dDMyQXJyYXk6CkBAIC0zOTIsMTEgKzM3NywxMSBAQCBwcml2YXRlOgogICAgICAgICAgICAgCiAg
ICAgICAgIGNhc2UgTmV3QXJyYXk6IHsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1f
Z3JhcGgudmFyQXJnTnVtQ2hpbGRyZW4obm9kZSk7IGktLTspIHsKLSAgICAgICAgICAgICAgICBu
b2RlLnNldEluZGV4aW5nVHlwZSgKKyAgICAgICAgICAgICAgICBub2RlLT5zZXRJbmRleGluZ1R5
cGUoCiAgICAgICAgICAgICAgICAgICAgIGxlYXN0VXBwZXJCb3VuZE9mSW5kZXhpbmdUeXBlQW5k
VHlwZSgKLSAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUuaW5kZXhpbmdUeXBlKCksIG1fZ3Jh
cGhbbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCBpKV0ucHJlZGljdGlvbigpKSk7CisgICAgICAg
ICAgICAgICAgICAgICAgICBub2RlLmluZGV4aW5nVHlwZSgpLCBtX2dyYXBoLnZhckFyZ0NoaWxk
KG5vZGUsIGkpLT5wcmVkaWN0aW9uKCkpKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlm
IChub2RlLmluZGV4aW5nVHlwZSgpID09IEFycmF5V2l0aERvdWJsZSkgeworICAgICAgICAgICAg
aWYgKG5vZGUtPmluZGV4aW5nVHlwZSgpID09IEFycmF5V2l0aERvdWJsZSkgewogICAgICAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1fZ3JhcGgudmFyQXJnTnVtQ2hpbGRyZW4obm9kZSk7
IGktLTspCiAgICAgICAgICAgICAgICAgICAgIGZpeERvdWJsZUVkZ2UoaSk7CiAgICAgICAgICAg
ICB9CkBAIC00MDgsMTYgKzM5MywxNSBAQCBwcml2YXRlOgogICAgICAgICB9CiAKICNpZiBERkdf
RU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCi0gICAgICAgIE5vZGUqIG5vZGVQdHIg
PSAmbV9ncmFwaFttX2NvbXBpbGVJbmRleF07Ci0gICAgICAgIGlmICghKG5vZGVQdHItPmZsYWdz
KCkgJiBOb2RlSGFzVmFyQXJncykpIHsKKyAgICAgICAgaWYgKCEobm9kZS0+ZmxhZ3MoKSAmIE5v
ZGVIYXNWYXJBcmdzKSkgewogICAgICAgICAgICAgZGF0YUxvZ0YoIm5ldyBjaGlsZHJlbjogIik7
Ci0gICAgICAgICAgICBub2RlUHRyLT5kdW1wQ2hpbGRyZW4oV1RGOjpkYXRhRmlsZSgpKTsKKyAg
ICAgICAgICAgIG5vZGUtPmR1bXBDaGlsZHJlbihXVEY6OmRhdGFGaWxlKCkpOwogICAgICAgICB9
CiAgICAgICAgIGRhdGFMb2dGKCJcbiIpOwogI2VuZGlmCiAgICAgfQogICAgIAotICAgIE5vZGVJ
bmRleCBjaGVja0FycmF5KEFycmF5TW9kZSBhcnJheU1vZGUsIENvZGVPcmlnaW4gY29kZU9yaWdp
biwgTm9kZUluZGV4IGFycmF5LCBOb2RlSW5kZXggaW5kZXgsIGJvb2wgKCpzdG9yYWdlQ2hlY2sp
KGNvbnN0IEFycmF5TW9kZSYpID0gY2FuQ1NFU3RvcmFnZSwgYm9vbCBzaG91bGRHZW5lcmF0ZSA9
IHRydWUpCisgICAgTm9kZSogY2hlY2tBcnJheShBcnJheU1vZGUgYXJyYXlNb2RlLCBDb2RlT3Jp
Z2luIGNvZGVPcmlnaW4sIE5vZGUqIGFycmF5LCBOb2RlKiBpbmRleCwgYm9vbCAoKnN0b3JhZ2VD
aGVjaykoY29uc3QgQXJyYXlNb2RlJikgPSBjYW5DU0VTdG9yYWdlLCBib29sIHNob3VsZEdlbmVy
YXRlID0gdHJ1ZSkKICAgICB7CiAgICAgICAgIEFTU0VSVChhcnJheU1vZGUuaXNTcGVjaWZpYygp
KTsKICAgICAgICAgCkBAIC00MjgsMTEgKzQxMiwxMSBAQCBwcml2YXRlOgogICAgICAgICAgICAg
ICAgIGlmIChtX2luZGV4SW5CbG9jayA+IDApIHsKICAgICAgICAgICAgICAgICAgICAgLy8gSWYg
dGhlIHByZXZpb3VzIG5vZGUgd2FzIGEgQ2hlY2tTdHJ1Y3R1cmUgaW5zZXJ0ZWQgYmVjYXVzZSBv
ZiBzdHVmZgogICAgICAgICAgICAgICAgICAgICAvLyB0aGF0IHRoZSBhcnJheSBwcm9maWxlIHRv
bGQgdXMsIHRoZW4gcmVtb3ZlIGl0LgotICAgICAgICAgICAgICAgICAgICBOb2RlJiBwcmV2aW91
c05vZGUgPSBtX2dyYXBoW21fYmxvY2stPmF0KG1faW5kZXhJbkJsb2NrIC0gMSldOwotICAgICAg
ICAgICAgICAgICAgICBpZiAocHJldmlvdXNOb2RlLm9wKCkgPT0gQ2hlY2tTdHJ1Y3R1cmUKLSAg
ICAgICAgICAgICAgICAgICAgICAgICYmIHByZXZpb3VzTm9kZS5jaGlsZDEoKSA9PSBhcnJheQot
ICAgICAgICAgICAgICAgICAgICAgICAgJiYgcHJldmlvdXNOb2RlLmNvZGVPcmlnaW4gPT0gY29k
ZU9yaWdpbikKLSAgICAgICAgICAgICAgICAgICAgICAgIHByZXZpb3VzTm9kZS5zZXRPcEFuZERl
ZmF1bHRGbGFncyhQaGFudG9tKTsKKyAgICAgICAgICAgICAgICAgICAgTm9kZSogcHJldmlvdXNO
b2RlID0gYmxvY2stPmF0KG1faW5kZXhJbkJsb2NrIC0gMSk7CisgICAgICAgICAgICAgICAgICAg
IGlmIChwcmV2aW91c05vZGUtPm9wKCkgPT0gQ2hlY2tTdHJ1Y3R1cmUKKyAgICAgICAgICAgICAg
ICAgICAgICAgICYmIHByZXZpb3VzTm9kZS0+Y2hpbGQxKCkgPT0gYXJyYXkKKyAgICAgICAgICAg
ICAgICAgICAgICAgICYmIHByZXZpb3VzTm9kZS0+Y29kZU9yaWdpbiA9PSBjb2RlT3JpZ2luKQor
ICAgICAgICAgICAgICAgICAgICAgICAgcHJldmlvdXNOb2RlLT5zZXRPcEFuZERlZmF1bHRGbGFn
cyhQaGFudG9tKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCiAgICAgICAg
ICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKQEAgLTQ1Niw3ICs0NDAsNyBAQCBw
cml2YXRlOgogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBpZiAoIXN0b3JhZ2VDaGVjayhh
cnJheU1vZGUpKQotICAgICAgICAgICAgcmV0dXJuIE5vTm9kZTsKKyAgICAgICAgICAgIHJldHVy
biAwOwogICAgICAgICAKICAgICAgICAgaWYgKGFycmF5TW9kZS51c2VzQnV0dGVyZmx5KCkpIHsK
ICAgICAgICAgICAgIHJldHVybiBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKApAQCAtNDc3LDE0
ICs0NjEsMTQgQEAgcHJpdmF0ZToKICAgICB7CiAgICAgICAgIGlmIChtX2dyYXBoLm1fZml4cG9p
bnRTdGF0ZSA+IEJlZm9yZUZpeHBvaW50KQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAg
ICAgCi0gICAgICAgIE5vZGUqIG5vZGVQdHIgPSAmbV9ncmFwaFttX2NvbXBpbGVJbmRleF07CiAg
ICAgICAgIAotICAgICAgICBzd2l0Y2ggKG5vZGVQdHItPmFycmF5TW9kZSgpLnR5cGUoKSkgewor
ICAgICAgICBOb2RlKiBub2RlID0gbV9jdXJyZW50Tm9kZTsKKyAgICAgICAgCisgICAgICAgIHN3
aXRjaCAobm9kZS0+YXJyYXlNb2RlKCkudHlwZSgpKSB7CiAgICAgICAgIGNhc2UgQXJyYXk6OkZv
cmNlRXhpdDogewogICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKICAgICAg
ICAgICAgICAgICBtX2luZGV4SW5CbG9jaywgRG9udFJlZkNoaWxkcmVuLCBEb250UmVmTm9kZSwg
U3BlY05vbmUsIEZvcmNlT1NSRXhpdCwKLSAgICAgICAgICAgICAgICBub2RlUHRyLT5jb2RlT3Jp
Z2luKTsKKyAgICAgICAgICAgICAgICBub2RlLT5jb2RlT3JpZ2luKTsKICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgfQogICAgICAgICAgICAgCkBAIC00OTcsMjYgKzQ4MSwyNiBAQCBwcml2
YXRlOgogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgCiAgICAgICAgIGRlZmF1bHQ6
IHsKLSAgICAgICAgICAgIE5vZGVJbmRleCBzdG9yYWdlID0gY2hlY2tBcnJheShub2RlUHRyLT5h
cnJheU1vZGUoKSwgbm9kZVB0ci0+Y29kZU9yaWdpbiwgYmFzZS5pbmRleCgpLCBpbmRleC5pbmRl
eFVuY2hlY2tlZCgpKTsKLSAgICAgICAgICAgIGlmIChzdG9yYWdlID09IE5vTm9kZSkKKyAgICAg
ICAgICAgIE5vZGUqIHN0b3JhZ2UgPSBjaGVja0FycmF5KG5vZGUtPmFycmF5TW9kZSgpLCBub2Rl
LT5jb2RlT3JpZ2luLCBiYXNlLm5vZGUoKSwgaW5kZXgubm9kZSgpKTsKKyAgICAgICAgICAgIGlm
ICghc3RvcmFnZSkKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAKLSAgICAg
ICAgICAgIG1fZ3JhcGguY2hpbGQobV9ncmFwaFttX2NvbXBpbGVJbmRleF0sIHN0b3JhZ2VDaGls
ZElkeCkgPSBFZGdlKHN0b3JhZ2UpOworICAgICAgICAgICAgbV9ncmFwaC5jaGlsZChub2RlLCBz
dG9yYWdlQ2hpbGRJZHgpID0gRWRnZShzdG9yYWdlKTsKICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgfSB9CiAgICAgfQogICAgIAogICAgIHZvaWQgZml4SW50RWRnZShFZGdlJiBlZGdlKQog
ICAgIHsKLSAgICAgICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhbZWRnZV07Ci0gICAgICAgIGlmIChu
b2RlLm9wKCkgIT0gVmFsdWVUb0ludDMyKQorICAgICAgICBOb2RlKiBub2RlID0gZWRnZS5ub2Rl
KCk7CisgICAgICAgIGlmIChub2RlLT5vcCgpICE9IFZhbHVlVG9JbnQzMikKICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgCi0gICAgICAgIGlmICghbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5z
aG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpCisgICAgICAgIGlmICghbm9kZS0+Y2hpbGQxKCktPnNo
b3VsZFNwZWN1bGF0ZUludGVnZXIoKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgCiAg
ICAgICAgIEVkZ2Ugb2xkRWRnZSA9IGVkZ2U7Ci0gICAgICAgIEVkZ2UgbmV3RWRnZSA9IG5vZGUu
Y2hpbGQxKCk7CisgICAgICAgIEVkZ2UgbmV3RWRnZSA9IG5vZGUtPmNoaWxkMSgpOwogICAgICAg
ICAKICAgICAgICAgbV9ncmFwaC5yZWYobmV3RWRnZSk7CiAgICAgICAgIG1fZ3JhcGguZGVyZWYo
b2xkRWRnZSk7CkBAIC01MjYsMTEgKzUxMCwxMSBAQCBwcml2YXRlOgogICAgIAogICAgIHZvaWQg
Zml4RG91YmxlRWRnZSh1bnNpZ25lZCBjaGlsZEluZGV4KQogICAgIHsKLSAgICAgICAgTm9kZSYg
c291cmNlID0gbV9ncmFwaFttX2NvbXBpbGVJbmRleF07CisgICAgICAgIE5vZGUqIHNvdXJjZSA9
IG1fY3VycmVudE5vZGU7CiAgICAgICAgIEVkZ2UmIGVkZ2UgPSBtX2dyYXBoLmNoaWxkKHNvdXJj
ZSwgY2hpbGRJbmRleCk7CiAgICAgICAgIAotICAgICAgICBpZiAobV9ncmFwaFtlZGdlXS5wcmVk
aWN0aW9uKCkgJiBTcGVjRG91YmxlKSB7Ci0gICAgICAgICAgICBlZGdlLnNldFVzZUtpbmQoRG91
YmxlVXNlKTsKKyAgICAgICAgaWYgKGVkZ2UtPnByZWRpY3Rpb24oKSAmIFNwZWNEb3VibGUpIHsK
KyAgICAgICAgICAgIGVkZ2UtPnNldFVzZUtpbmQoRG91YmxlVXNlKTsKICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgfQogICAgICAgICAKQEAgLTUzOSwyMyArNTIzLDIyIEBAIHByaXZhdGU6
CiAKICAgICB2b2lkIGluamVjdEludDMyVG9Eb3VibGVOb2RlKHVuc2lnbmVkIGNoaWxkSW5kZXgp
CiAgICAgewotICAgICAgICBOb2RlSW5kZXggcmVzdWx0SW5kZXggPSBtX2luc2VydGlvblNldC5p
bnNlcnROb2RlKAorICAgICAgICBOb2RlKiByZXN1bHQgPSBtX2luc2VydGlvblNldC5pbnNlcnRO
b2RlKAogICAgICAgICAgICAgbV9pbmRleEluQmxvY2ssIERvbnRSZWZDaGlsZHJlbiwgUmVmTm9k
ZSwgU3BlY0RvdWJsZSwgSW50MzJUb0RvdWJsZSwKLSAgICAgICAgICAgIG1fZ3JhcGhbbV9jb21w
aWxlSW5kZXhdLmNvZGVPcmlnaW4sCi0gICAgICAgICAgICBtX2dyYXBoLmNoaWxkKG1fZ3JhcGhb
bV9jb21waWxlSW5kZXhdLCBjaGlsZEluZGV4KS5pbmRleCgpKTsKKyAgICAgICAgICAgIG1fY3Vy
cmVudE5vZGUtPmNvZGVPcmlnaW4sIG1fZ3JhcGguY2hpbGQobV9jdXJyZW50Tm9kZSwgY2hpbGRJ
bmRleCkubm9kZSgpKTsKICAgICAgICAgCiAjaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElP
Tl9WRVJCT1NFKQogICAgICAgICBkYXRhTG9nRigKICAgICAgICAgICAgICIocmVwbGFjaW5nIEAl
dS0+QCV1IHdpdGggQCV1LT5AJXUpICIsCi0gICAgICAgICAgICBtX2NvbXBpbGVJbmRleCwgbV9n
cmFwaC5jaGlsZChtX2dyYXBoW21fY29tcGlsZUluZGV4XSwgY2hpbGRJbmRleCkuaW5kZXgoKSwg
bV9jb21waWxlSW5kZXgsIHJlc3VsdEluZGV4KTsKKyAgICAgICAgICAgIG1fY3VycmVudE5vZGUt
PmluZGV4KCksIG1fZ3JhcGguY2hpbGQobV9jdXJyZW50Tm9kZSwgY2hpbGRJbmRleCktPmluZGV4
KCksIG1fY3VycmVudE5vZGUtPmluZGV4KCksIHJlc3VsdC0+aW5kZXgoKSk7CiAjZW5kaWYKIAot
ICAgICAgICBtX2dyYXBoLmNoaWxkKG1fZ3JhcGhbbV9jb21waWxlSW5kZXhdLCBjaGlsZEluZGV4
KSA9IEVkZ2UocmVzdWx0SW5kZXgsIERvdWJsZVVzZSk7CisgICAgICAgIG1fZ3JhcGguY2hpbGQo
bV9jdXJyZW50Tm9kZSwgY2hpbGRJbmRleCkgPSBFZGdlKHJlc3VsdCwgRG91YmxlVXNlKTsKICAg
ICB9CiAKICAgICBCYXNpY0Jsb2NrKiBtX2Jsb2NrOwogICAgIHVuc2lnbmVkIG1faW5kZXhJbkJs
b2NrOwotICAgIE5vZGVJbmRleCBtX2NvbXBpbGVJbmRleDsKKyAgICBOb2RlKiBtX2N1cnJlbnRO
b2RlOwogICAgIEluc2VydGlvblNldCBtX2luc2VydGlvblNldDsKIH07CiAgICAgCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkocmV2aXNpb24gMTQwMzA2KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQ2LDYgKzQ2LDcgQEAgR3JhcGg6OkdyYXBoKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgQwog
ICAgICwgbV9jb2RlQmxvY2soY29kZUJsb2NrKQogICAgICwgbV9jb21waWxhdGlvbihnbG9iYWxE
YXRhLm1fcGVyQnl0ZWNvZGVQcm9maWxlciA/IGdsb2JhbERhdGEubV9wZXJCeXRlY29kZVByb2Zp
bGVyLT5uZXdDb21waWxhdGlvbihjb2RlQmxvY2ssIFByb2ZpbGVyOjpERkcpIDogMCkKICAgICAs
IG1fcHJvZmlsZWRCbG9jayhjb2RlQmxvY2stPmFsdGVybmF0aXZlKCkpCisgICAgLCBtX2FsbG9j
YXRvcihnbG9iYWxEYXRhLm1fZGZnU3RhdGUtPm1fYWxsb2NhdG9yKQogICAgICwgbV9oYXNBcmd1
bWVudHMoZmFsc2UpCiAgICAgLCBtX29zckVudHJ5Qnl0ZWNvZGVJbmRleChvc3JFbnRyeUJ5dGVj
b2RlSW5kZXgpCiAgICAgLCBtX211c3RIYW5kbGVWYWx1ZXMobXVzdEhhbmRsZVZhbHVlcykKQEAg
LTU0LDYgKzU1LDExIEBAIEdyYXBoOjpHcmFwaChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEMK
ICAgICBBU1NFUlQobV9wcm9maWxlZEJsb2NrKTsKIH0KIAorR3JhcGg6On5HcmFwaCgpCit7Cisg
ICAgbV9hbGxvY2F0b3IuZnJlZUFsbCgpOworfQorCiBjb25zdCBjaGFyICpHcmFwaDo6b3BOYW1l
KE5vZGVUeXBlIG9wKQogewogICAgIHJldHVybiBkZmdPcE5hbWVzW29wXTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHJldmlzaW9uIDE0MDMwNikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEyLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzUsNyAr
MzUsOSBAQAogI2luY2x1ZGUgIkRGR0Fzc2VtYmx5SGVscGVycy5oIgogI2luY2x1ZGUgIkRGR0Jh
c2ljQmxvY2suaCIKICNpbmNsdWRlICJERkdEb21pbmF0b3JzLmgiCisjaW5jbHVkZSAiREZHTG9u
Z0xpdmVkU3RhdGUuaCIKICNpbmNsdWRlICJERkdOb2RlLmgiCisjaW5jbHVkZSAiREZHTm9kZUFs
bG9jYXRvci5oIgogI2luY2x1ZGUgIkRGR1ZhcmlhZGljRnVuY3Rpb24uaCIKICNpbmNsdWRlICJK
U1N0YWNrLmgiCiAjaW5jbHVkZSAiTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5oIgpAQCAt
ODMsNTQgKzg1LDQ4IEBAIGVudW0gQWRkU3BlY3VsYXRpb25Nb2RlIHsKIC8vCiAvLyA9PT0gR3Jh
cGggPT09CiAvLwotLy8gVGhlIGRhdGFmbG93IGdyYXBoIGlzIGFuIG9yZGVyZWQgdmVjdG9yIG9m
IG5vZGVzLgogLy8gVGhlIG9yZGVyIG1heSBiZSBzaWduaWZpY2FudCBmb3Igbm9kZXMgd2l0aCBz
aWRlLWVmZmVjdHMgKHByb3BlcnR5IGFjY2Vzc2VzLCB2YWx1ZSBjb252ZXJzaW9ucykuCiAvLyBO
b2RlcyB0aGF0IGFyZSAnZGVhZCcgcmVtYWluIGluIHRoZSB2ZWN0b3Igd2l0aCByZWZDb3VudCAw
LgotY2xhc3MgR3JhcGggOiBwdWJsaWMgVmVjdG9yPE5vZGUsIDY0PiB7CitjbGFzcyBHcmFwaCB7
CiBwdWJsaWM6CiAgICAgR3JhcGgoSlNHbG9iYWxEYXRhJiwgQ29kZUJsb2NrKiwgdW5zaWduZWQg
b3NyRW50cnlCeXRlY29kZUluZGV4LCBjb25zdCBPcGVyYW5kczxKU1ZhbHVlPiYgbXVzdEhhbmRs
ZVZhbHVlcyk7Ci0gICAgCi0gICAgdXNpbmcgVmVjdG9yPE5vZGUsIDY0Pjo6b3BlcmF0b3JbXTsK
LSAgICB1c2luZyBWZWN0b3I8Tm9kZSwgNjQ+OjphdDsKLSAgICAKLSAgICBOb2RlJiBvcGVyYXRv
cltdKEVkZ2Ugbm9kZVVzZSkgeyByZXR1cm4gYXQobm9kZVVzZS5pbmRleCgpKTsgfQotICAgIGNv
bnN0IE5vZGUmIG9wZXJhdG9yW10oRWRnZSBub2RlVXNlKSBjb25zdCB7IHJldHVybiBhdChub2Rl
VXNlLmluZGV4KCkpOyB9Ci0gICAgCi0gICAgTm9kZSYgYXQoRWRnZSBub2RlVXNlKSB7IHJldHVy
biBhdChub2RlVXNlLmluZGV4KCkpOyB9Ci0gICAgY29uc3QgTm9kZSYgYXQoRWRnZSBub2RlVXNl
KSBjb25zdCB7IHJldHVybiBhdChub2RlVXNlLmluZGV4KCkpOyB9CisgICAgfkdyYXBoKCk7CiAg
ICAgCiAgICAgLy8gTWFyayBhIG5vZGUgYXMgYmVpbmcgcmVmZXJlbmNlZC4KLSAgICBOb2RlSW5k
ZXggcmVmKE5vZGVJbmRleCBub2RlSW5kZXgpCisgICAgTm9kZSogcmVmKE5vZGUqIG5vZGUpCiAg
ICAgewotICAgICAgICBOb2RlJiBub2RlID0gYXQobm9kZUluZGV4KTsKICAgICAgICAgLy8gSWYg
dGhlIHZhbHVlIChiZWZvcmUgaW5jcmVtZW50aW5nKSB3YXMgYXQgcmVmQ291bnQgemVybyB0aGVu
IHdlIG5lZWQgdG8gcmVmIGl0cyBjaGlsZHJlbi4KLSAgICAgICAgaWYgKCFub2RlLnBvc3RmaXhS
ZWYoKSkKLSAgICAgICAgICAgIHJlZkNoaWxkcmVuKG5vZGVJbmRleCk7Ci0gICAgICAgIHJldHVy
biBub2RlSW5kZXg7CisgICAgICAgIGlmICghbm9kZS0+cG9zdGZpeFJlZigpKQorICAgICAgICAg
ICAgcmVmQ2hpbGRyZW4obm9kZSk7CisgICAgICAgIHJldHVybiBub2RlOwogICAgIH0KICAgICBF
ZGdlIHJlZihFZGdlIG5vZGVVc2UpCiAgICAgewotICAgICAgICByZWYobm9kZVVzZS5pbmRleCgp
KTsKKyAgICAgICAgcmVmKG5vZGVVc2Uubm9kZSgpKTsKICAgICAgICAgcmV0dXJuIG5vZGVVc2U7
CiAgICAgfQogICAgIAotICAgIHZvaWQgZGVyZWYoTm9kZUluZGV4IG5vZGVJbmRleCkKKyAgICB2
b2lkIGRlcmVmKE5vZGUqIG5vZGUpCiAgICAgewotICAgICAgICBpZiAoYXQobm9kZUluZGV4KS5w
b3N0Zml4RGVyZWYoKSA9PSAxKQotICAgICAgICAgICAgZGVyZWZDaGlsZHJlbihub2RlSW5kZXgp
OworI2lmICFBU1NFUlRfRElTQUJMRUQKKyAgICAgICAgaWYgKCFub2RlLT5yZWZDb3VudCgpKQor
ICAgICAgICAgICAgZHVtcCgpOworI2VuZGlmCisgICAgICAgIGlmIChub2RlLT5wb3N0Zml4RGVy
ZWYoKSA9PSAxKQorICAgICAgICAgICAgZGVyZWZDaGlsZHJlbihub2RlKTsKICAgICB9CiAgICAg
dm9pZCBkZXJlZihFZGdlIG5vZGVVc2UpCiAgICAgewotICAgICAgICBkZXJlZihub2RlVXNlLmlu
ZGV4KCkpOworICAgICAgICBkZXJlZihub2RlVXNlLm5vZGUoKSk7CiAgICAgfQogICAgIAotICAg
IHZvaWQgY2hhbmdlSW5kZXgoRWRnZSYgZWRnZSwgTm9kZUluZGV4IG5ld0luZGV4LCBib29sIGNo
YW5nZVJlZiA9IHRydWUpCisgICAgdm9pZCBjaGFuZ2VJbmRleChFZGdlJiBlZGdlLCBOb2RlKiBu
ZXdOb2RlLCBib29sIGNoYW5nZVJlZiA9IHRydWUpCiAgICAgewogICAgICAgICBpZiAoY2hhbmdl
UmVmKSB7Ci0gICAgICAgICAgICByZWYobmV3SW5kZXgpOwotICAgICAgICAgICAgZGVyZWYoZWRn
ZS5pbmRleCgpKTsKKyAgICAgICAgICAgIHJlZihuZXdOb2RlKTsKKyAgICAgICAgICAgIGRlcmVm
KGVkZ2Uubm9kZSgpKTsKICAgICAgICAgfQotICAgICAgICBlZGdlLnNldEluZGV4KG5ld0luZGV4
KTsKKyAgICAgICAgZWRnZS5zZXROb2RlKG5ld05vZGUpOwogICAgIH0KICAgICAKICAgICB2b2lk
IGNoYW5nZUVkZ2UoRWRnZSYgZWRnZSwgRWRnZSBuZXdFZGdlLCBib29sIGNoYW5nZVJlZiA9IHRy
dWUpCkBAIC0xNDIsMTEgKzEzOCwxMSBAQCBwdWJsaWM6CiAgICAgICAgIGVkZ2UgPSBuZXdFZGdl
OwogICAgIH0KICAgICAKLSAgICB2b2lkIGNvbXBhcmVBbmRTd2FwKEVkZ2UmIGVkZ2UsIE5vZGVJ
bmRleCBvbGRJbmRleCwgTm9kZUluZGV4IG5ld0luZGV4LCBib29sIGNoYW5nZVJlZikKKyAgICB2
b2lkIGNvbXBhcmVBbmRTd2FwKEVkZ2UmIGVkZ2UsIE5vZGUqIG9sZE5vZGUsIE5vZGUqIG5ld05v
ZGUsIGJvb2wgY2hhbmdlUmVmKQogICAgIHsKLSAgICAgICAgaWYgKGVkZ2UuaW5kZXgoKSAhPSBv
bGRJbmRleCkKKyAgICAgICAgaWYgKGVkZ2Uubm9kZSgpICE9IG9sZE5vZGUpCiAgICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIGNoYW5nZUluZGV4KGVkZ2UsIG5ld0luZGV4LCBjaGFuZ2VSZWYp
OworICAgICAgICBjaGFuZ2VJbmRleChlZGdlLCBuZXdOb2RlLCBjaGFuZ2VSZWYpOwogICAgIH0K
ICAgICAKICAgICB2b2lkIGNvbXBhcmVBbmRTd2FwKEVkZ2UmIGVkZ2UsIEVkZ2Ugb2xkRWRnZSwg
RWRnZSBuZXdFZGdlLCBib29sIGNoYW5nZVJlZikKQEAgLTE1Niw0NCArMTUyLDI5IEBAIHB1Ymxp
YzoKICAgICAgICAgY2hhbmdlRWRnZShlZGdlLCBuZXdFZGdlLCBjaGFuZ2VSZWYpOwogICAgIH0K
ICAgICAKLSAgICB2b2lkIGNsZWFyQW5kRGVyZWZDaGlsZDEoTm9kZSYgbm9kZSkKKyAgICB2b2lk
IGNsZWFyQW5kRGVyZWZDaGlsZChOb2RlKiBub2RlLCB1bnNpZ25lZCBpbmRleCkKICAgICB7Ci0g
ICAgICAgIGlmICghbm9kZS5jaGlsZDEoKSkKKyAgICAgICAgaWYgKCFub2RlLT5jaGlsZHJlbi5j
aGlsZChpbmRleCkpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGRlcmVmKG5vZGUuY2hp
bGQxKCkpOwotICAgICAgICBub2RlLmNoaWxkcmVuLmNoaWxkMSgpID0gRWRnZSgpOwotICAgIH0K
LQotICAgIHZvaWQgY2xlYXJBbmREZXJlZkNoaWxkMihOb2RlJiBub2RlKQotICAgIHsKLSAgICAg
ICAgaWYgKCFub2RlLmNoaWxkMigpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBkZXJl
Zihub2RlLmNoaWxkMigpKTsKLSAgICAgICAgbm9kZS5jaGlsZHJlbi5jaGlsZDIoKSA9IEVkZ2Uo
KTsKLSAgICB9Ci0KLSAgICB2b2lkIGNsZWFyQW5kRGVyZWZDaGlsZDMoTm9kZSYgbm9kZSkKLSAg
ICB7Ci0gICAgICAgIGlmICghbm9kZS5jaGlsZDMoKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgZGVyZWYobm9kZS5jaGlsZDMoKSk7Ci0gICAgICAgIG5vZGUuY2hpbGRyZW4uY2hpbGQz
KCkgPSBFZGdlKCk7CisgICAgICAgIGRlcmVmKG5vZGUtPmNoaWxkcmVuLmNoaWxkKGluZGV4KSk7
CisgICAgICAgIG5vZGUuY2hpbGRyZW4uc2V0Q2hpbGQoaW5kZXgsIEVkZ2UoKSk7CiAgICAgfQor
ICAgIHZvaWQgY2xlYXJBbmREZXJlZkNoaWxkMShOb2RlKiBub2RlKSB7IGNsZWFyQW5kRGVyZWZD
aGlsZChub2RlLCAwKTsgfQorICAgIHZvaWQgY2xlYXJBbmREZXJlZkNoaWxkMihOb2RlKiBub2Rl
KSB7IGNsZWFyQW5kRGVyZWZDaGlsZChub2RlLCAxKTsgfQorICAgIHZvaWQgY2xlYXJBbmREZXJl
ZkNoaWxkMyhOb2RlKiBub2RlKSB7IGNsZWFyQW5kRGVyZWZDaGlsZChub2RlLCAyKTsgfQogICAg
IAogI2RlZmluZSBERkdfREVGSU5FX0FERF9OT0RFKHRlbXBsYXRlUHJlLCB0ZW1wbGF0ZVBvc3Qs
IHR5cGVQYXJhbXMsIHZhbHVlUGFyYW1zQ29tbWEsIHZhbHVlUGFyYW1zLCB2YWx1ZUFyZ3MpIFwK
LSAgICB0ZW1wbGF0ZVByZSB0eXBlUGFyYW1zIHRlbXBsYXRlUG9zdCBOb2RlSW5kZXggYWRkTm9k
ZShSZWZDaGlsZHJlbk1vZGUgcmVmQ2hpbGRyZW5Nb2RlLCBSZWZOb2RlTW9kZSByZWZOb2RlTW9k
ZSwgU3BlY3VsYXRlZFR5cGUgdHlwZSB2YWx1ZVBhcmFtc0NvbW1hIHZhbHVlUGFyYW1zKSBcCisg
ICAgdGVtcGxhdGVQcmUgdHlwZVBhcmFtcyB0ZW1wbGF0ZVBvc3QgTm9kZSogYWRkTm9kZShSZWZD
aGlsZHJlbk1vZGUgcmVmQ2hpbGRyZW5Nb2RlLCBSZWZOb2RlTW9kZSByZWZOb2RlTW9kZSwgU3Bl
Y3VsYXRlZFR5cGUgdHlwZSB2YWx1ZVBhcmFtc0NvbW1hIHZhbHVlUGFyYW1zKSBcCiAgICAgeyBc
Ci0gICAgICAgIE5vZGUgbm9kZSA9IE5vZGUodmFsdWVBcmdzKTsgXAotICAgICAgICBub2RlLnBy
ZWRpY3QodHlwZSk7IFwKLSAgICAgICAgaWYgKG5vZGUuZmxhZ3MoKSAmIE5vZGVNdXN0R2VuZXJh
dGUpIFwKLSAgICAgICAgICAgIG5vZGUucmVmKCk7IFwKKyAgICAgICAgTm9kZSogbm9kZSA9IG5l
dyAobV9hbGxvY2F0b3IpIE5vZGUodmFsdWVBcmdzKTsgXAorICAgICAgICBub2RlLT5wcmVkaWN0
KHR5cGUpOyBcCisgICAgICAgIGlmIChub2RlLT5mbGFncygpICYgTm9kZU11c3RHZW5lcmF0ZSkg
XAorICAgICAgICAgICAgbm9kZS0+cmVmKCk7IFwKICAgICAgICAgaWYgKHJlZk5vZGVNb2RlID09
IFJlZk5vZGUpIFwKLSAgICAgICAgICAgIG5vZGUucmVmKCk7IFwKLSAgICAgICAgTm9kZUluZGV4
IHJlc3VsdCA9IHNpemUoKTsgXAotICAgICAgICBhcHBlbmQobm9kZSk7IFwKKyAgICAgICAgICAg
IG5vZGUtPnJlZigpOyBcCiAgICAgICAgIGlmIChyZWZDaGlsZHJlbk1vZGUgPT0gUmVmQ2hpbGRy
ZW4pIFwKLSAgICAgICAgICAgIHJlZkNoaWxkcmVuKHJlc3VsdCk7IFwKLSAgICAgICAgcmV0dXJu
IHJlc3VsdDsgXAorICAgICAgICAgICAgcmVmQ2hpbGRyZW4obm9kZSk7IFwKKyAgICAgICAgcmV0
dXJuIG5vZGU7IFwKICAgICB9CiAgICAgREZHX1ZBUklBRElDX1RFTVBMQVRFX0ZVTkNUSU9OKERG
R19ERUZJTkVfQUREX05PREUpCiAjdW5kZWYgREZHX0RFRklORV9BRERfTk9ERQpAQCAtMjA0LDE0
ICsxODUsMTQgQEAgcHVibGljOgogICAgIC8vIHJlZmVyZW5jZSBjb3VudHMgYWNjb3JkaW5nIHRv
IHJlYWNoYWJpbGl0eS4KICAgICB2b2lkIGNvbGxlY3RHYXJiYWdlKCk7CiAgICAgCi0gICAgdm9p
ZCBjb252ZXJ0VG9Db25zdGFudChOb2RlSW5kZXggbm9kZUluZGV4LCB1bnNpZ25lZCBjb25zdGFu
dE51bWJlcikKKyAgICB2b2lkIGNvbnZlcnRUb0NvbnN0YW50KE5vZGUqIG5vZGUsIHVuc2lnbmVk
IGNvbnN0YW50TnVtYmVyKQogICAgIHsKLSAgICAgICAgYXQobm9kZUluZGV4KS5jb252ZXJ0VG9D
b25zdGFudChjb25zdGFudE51bWJlcik7CisgICAgICAgIG5vZGUtPmNvbnZlcnRUb0NvbnN0YW50
KGNvbnN0YW50TnVtYmVyKTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBjb252ZXJ0VG9Db25zdGFu
dChOb2RlSW5kZXggbm9kZUluZGV4LCBKU1ZhbHVlIHZhbHVlKQorICAgIHZvaWQgY29udmVydFRv
Q29uc3RhbnQoTm9kZSogbm9kZSwgSlNWYWx1ZSB2YWx1ZSkKICAgICB7Ci0gICAgICAgIGNvbnZl
cnRUb0NvbnN0YW50KG5vZGVJbmRleCwgbV9jb2RlQmxvY2stPmFkZE9yRmluZENvbnN0YW50KHZh
bHVlKSk7CisgICAgICAgIGNvbnZlcnRUb0NvbnN0YW50KG5vZGUsIG1fY29kZUJsb2NrLT5hZGRP
ckZpbmRDb25zdGFudCh2YWx1ZSkpOwogICAgIH0KIAogICAgIC8vIENvZGVCbG9jayBpcyBvcHRp
b25hbCwgYnV0IG1heSBhbGxvdyBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHRvIGJlIGR1bXBlZCAo
ZS5nLiBJZGVudGlmaWVyIG5hbWVzKS4KQEAgLTIxOSwxMjUgKzIwMCwxMjUgQEAgcHVibGljOgog
ICAgIGVudW0gUGhpTm9kZUR1bXBNb2RlIHsgRHVtcExpdmVQaGlzT25seSwgRHVtcEFsbFBoaXMg
fTsKICAgICB2b2lkIGR1bXBCbG9ja0hlYWRlcihQcmludFN0cmVhbSYsIGNvbnN0IGNoYXIqIHBy
ZWZpeCwgQmxvY2tJbmRleCwgUGhpTm9kZUR1bXBNb2RlKTsKICAgICB2b2lkIGR1bXAoUHJpbnRT
dHJlYW0mLCBFZGdlKTsKLSAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mLCBjb25zdCBjaGFyKiBw
cmVmaXgsIE5vZGVJbmRleCk7Ci0gICAgc3RhdGljIGludCBhbW91bnRPZk5vZGVXaGl0ZVNwYWNl
KE5vZGUmKTsKLSAgICBzdGF0aWMgdm9pZCBwcmludE5vZGVXaGl0ZVNwYWNlKFByaW50U3RyZWFt
JiwgTm9kZSYpOworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYsIGNvbnN0IGNoYXIqIHByZWZp
eCwgTm9kZSopOworICAgIHN0YXRpYyBpbnQgYW1vdW50T2ZOb2RlV2hpdGVTcGFjZShOb2RlKik7
CisgICAgc3RhdGljIHZvaWQgcHJpbnROb2RlV2hpdGVTcGFjZShQcmludFN0cmVhbSYsIE5vZGUq
KTsKIAogICAgIC8vIER1bXAgdGhlIGNvZGUgb3JpZ2luIG9mIHRoZSBnaXZlbiBub2RlIGFzIGEg
ZGlmZiBmcm9tIHRoZSBjb2RlIG9yaWdpbiBvZiB0aGUKICAgICAvLyBwcmVjZWRpbmcgbm9kZS4g
UmV0dXJucyB0cnVlIGlmIGFueXRoaW5nIHdhcyBwcmludGVkLgotICAgIGJvb2wgZHVtcENvZGVP
cmlnaW4oUHJpbnRTdHJlYW0mLCBjb25zdCBjaGFyKiBwcmVmaXgsIE5vZGVJbmRleCwgTm9kZUlu
ZGV4KTsKKyAgICBib29sIGR1bXBDb2RlT3JpZ2luKFByaW50U3RyZWFtJiwgY29uc3QgY2hhciog
cHJlZml4LCBOb2RlKiBwcmV2aW91c05vZGUsIE5vZGUqIHN1YnNlcXVlbnROb2RlKTsKIAogICAg
IEJsb2NrSW5kZXggYmxvY2tJbmRleEZvckJ5dGVjb2RlT2Zmc2V0KFZlY3RvcjxCbG9ja0luZGV4
PiYgYmxvY2tzLCB1bnNpZ25lZCBieXRlY29kZUJlZ2luKTsKIAotICAgIFNwZWN1bGF0ZWRUeXBl
IGdldEpTQ29uc3RhbnRTcGVjdWxhdGlvbihOb2RlJiBub2RlKQorICAgIFNwZWN1bGF0ZWRUeXBl
IGdldEpTQ29uc3RhbnRTcGVjdWxhdGlvbihOb2RlKiBub2RlKQogICAgIHsKLSAgICAgICAgcmV0
dXJuIHNwZWN1bGF0aW9uRnJvbVZhbHVlKG5vZGUudmFsdWVPZkpTQ29uc3RhbnQobV9jb2RlQmxv
Y2spKTsKKyAgICAgICAgcmV0dXJuIHNwZWN1bGF0aW9uRnJvbVZhbHVlKG5vZGUtPnZhbHVlT2ZK
U0NvbnN0YW50KG1fY29kZUJsb2NrKSk7CiAgICAgfQogICAgIAotICAgIEFkZFNwZWN1bGF0aW9u
TW9kZSBhZGRTcGVjdWxhdGlvbk1vZGUoTm9kZSYgYWRkLCBib29sIGxlZnRTaG91bGRTcGVjdWxh
dGVJbnRlZ2VyLCBib29sIHJpZ2h0U2hvdWxkU3BlY3VsYXRlSW50ZWdlcikKKyAgICBBZGRTcGVj
dWxhdGlvbk1vZGUgYWRkU3BlY3VsYXRpb25Nb2RlKE5vZGUqIGFkZCwgYm9vbCBsZWZ0U2hvdWxk
U3BlY3VsYXRlSW50ZWdlciwgYm9vbCByaWdodFNob3VsZFNwZWN1bGF0ZUludGVnZXIpCiAgICAg
ewotICAgICAgICBBU1NFUlQoYWRkLm9wKCkgPT0gVmFsdWVBZGQgfHwgYWRkLm9wKCkgPT0gQXJp
dGhBZGQgfHwgYWRkLm9wKCkgPT0gQXJpdGhTdWIpOworICAgICAgICBBU1NFUlQoYWRkLT5vcCgp
ID09IFZhbHVlQWRkIHx8IGFkZC0+b3AoKSA9PSBBcml0aEFkZCB8fCBhZGQtPm9wKCkgPT0gQXJp
dGhTdWIpOwogICAgICAgICAKLSAgICAgICAgTm9kZSYgbGVmdCA9IGF0KGFkZC5jaGlsZDEoKSk7
Ci0gICAgICAgIE5vZGUmIHJpZ2h0ID0gYXQoYWRkLmNoaWxkMigpKTsKKyAgICAgICAgTm9kZSog
bGVmdCA9IGFkZC0+Y2hpbGQxKCkubm9kZSgpOworICAgICAgICBOb2RlKiByaWdodCA9IGFkZC0+
Y2hpbGQyKCkubm9kZSgpOwogICAgICAgICAKLSAgICAgICAgaWYgKGxlZnQuaGFzQ29uc3RhbnQo
KSkKKyAgICAgICAgaWYgKGxlZnQtPmhhc0NvbnN0YW50KCkpCiAgICAgICAgICAgICByZXR1cm4g
YWRkSW1tZWRpYXRlU2hvdWxkU3BlY3VsYXRlSW50ZWdlcihhZGQsIHJpZ2h0U2hvdWxkU3BlY3Vs
YXRlSW50ZWdlciwgbGVmdCk7Ci0gICAgICAgIGlmIChyaWdodC5oYXNDb25zdGFudCgpKQorICAg
ICAgICBpZiAocmlnaHQtPmhhc0NvbnN0YW50KCkpCiAgICAgICAgICAgICByZXR1cm4gYWRkSW1t
ZWRpYXRlU2hvdWxkU3BlY3VsYXRlSW50ZWdlcihhZGQsIGxlZnRTaG91bGRTcGVjdWxhdGVJbnRl
Z2VyLCByaWdodCk7CiAgICAgICAgIAotICAgICAgICByZXR1cm4gKGxlZnRTaG91bGRTcGVjdWxh
dGVJbnRlZ2VyICYmIHJpZ2h0U2hvdWxkU3BlY3VsYXRlSW50ZWdlciAmJiBhZGQuY2FuU3BlY3Vs
YXRlSW50ZWdlcigpKSA/IFNwZWN1bGF0ZUludGVnZXIgOiBEb250U3BlY3VsYXRlSW50ZWdlcjsK
KyAgICAgICAgcmV0dXJuIChsZWZ0U2hvdWxkU3BlY3VsYXRlSW50ZWdlciAmJiByaWdodFNob3Vs
ZFNwZWN1bGF0ZUludGVnZXIgJiYgYWRkLT5jYW5TcGVjdWxhdGVJbnRlZ2VyKCkpID8gU3BlY3Vs
YXRlSW50ZWdlciA6IERvbnRTcGVjdWxhdGVJbnRlZ2VyOwogICAgIH0KICAgICAKLSAgICBBZGRT
cGVjdWxhdGlvbk1vZGUgdmFsdWVBZGRTcGVjdWxhdGlvbk1vZGUoTm9kZSYgYWRkKQorICAgIEFk
ZFNwZWN1bGF0aW9uTW9kZSB2YWx1ZUFkZFNwZWN1bGF0aW9uTW9kZShOb2RlKiBhZGQpCiAgICAg
ewotICAgICAgICByZXR1cm4gYWRkU3BlY3VsYXRpb25Nb2RlKGFkZCwgYXQoYWRkLmNoaWxkMSgp
KS5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyRXhwZWN0aW5nRGVmaW5lZCgpLCBhdChhZGQuY2hpbGQy
KCkpLnNob3VsZFNwZWN1bGF0ZUludGVnZXJFeHBlY3RpbmdEZWZpbmVkKCkpOworICAgICAgICBy
ZXR1cm4gYWRkU3BlY3VsYXRpb25Nb2RlKGFkZCwgYWRkLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3Vs
YXRlSW50ZWdlckV4cGVjdGluZ0RlZmluZWQoKSwgYWRkLT5jaGlsZDIoKS0+c2hvdWxkU3BlY3Vs
YXRlSW50ZWdlckV4cGVjdGluZ0RlZmluZWQoKSk7CiAgICAgfQogICAgIAotICAgIEFkZFNwZWN1
bGF0aW9uTW9kZSBhcml0aEFkZFNwZWN1bGF0aW9uTW9kZShOb2RlJiBhZGQpCisgICAgQWRkU3Bl
Y3VsYXRpb25Nb2RlIGFyaXRoQWRkU3BlY3VsYXRpb25Nb2RlKE5vZGUqIGFkZCkKICAgICB7Ci0g
ICAgICAgIHJldHVybiBhZGRTcGVjdWxhdGlvbk1vZGUoYWRkLCBhdChhZGQuY2hpbGQxKCkpLnNo
b3VsZFNwZWN1bGF0ZUludGVnZXJGb3JBcml0aG1ldGljKCksIGF0KGFkZC5jaGlsZDIoKSkuc2hv
dWxkU3BlY3VsYXRlSW50ZWdlckZvckFyaXRobWV0aWMoKSk7CisgICAgICAgIHJldHVybiBhZGRT
cGVjdWxhdGlvbk1vZGUoYWRkLCBhZGQtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVJbnRlZ2Vy
Rm9yQXJpdGhtZXRpYygpLCBhZGQtPmNoaWxkMigpLT5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyRm9y
QXJpdGhtZXRpYygpKTsKICAgICB9CiAgICAgCi0gICAgQWRkU3BlY3VsYXRpb25Nb2RlIGFkZFNw
ZWN1bGF0aW9uTW9kZShOb2RlJiBhZGQpCisgICAgQWRkU3BlY3VsYXRpb25Nb2RlIGFkZFNwZWN1
bGF0aW9uTW9kZShOb2RlKiBhZGQpCiAgICAgewotICAgICAgICBpZiAoYWRkLm9wKCkgPT0gVmFs
dWVBZGQpCisgICAgICAgIGlmIChhZGQtPm9wKCkgPT0gVmFsdWVBZGQpCiAgICAgICAgICAgICBy
ZXR1cm4gdmFsdWVBZGRTcGVjdWxhdGlvbk1vZGUoYWRkKTsKICAgICAgICAgCiAgICAgICAgIHJl
dHVybiBhcml0aEFkZFNwZWN1bGF0aW9uTW9kZShhZGQpOwogICAgIH0KICAgICAKLSAgICBib29s
IGFkZFNob3VsZFNwZWN1bGF0ZUludGVnZXIoTm9kZSYgYWRkKQorICAgIGJvb2wgYWRkU2hvdWxk
U3BlY3VsYXRlSW50ZWdlcihOb2RlKiBhZGQpCiAgICAgewogICAgICAgICByZXR1cm4gYWRkU3Bl
Y3VsYXRpb25Nb2RlKGFkZCkgIT0gRG9udFNwZWN1bGF0ZUludGVnZXI7CiAgICAgfQogICAgIAot
ICAgIGJvb2wgbXVsU2hvdWxkU3BlY3VsYXRlSW50ZWdlcihOb2RlJiBtdWwpCisgICAgYm9vbCBt
dWxTaG91bGRTcGVjdWxhdGVJbnRlZ2VyKE5vZGUqIG11bCkKICAgICB7Ci0gICAgICAgIEFTU0VS
VChtdWwub3AoKSA9PSBBcml0aE11bCk7CisgICAgICAgIEFTU0VSVChtdWwtPm9wKCkgPT0gQXJp
dGhNdWwpOwogICAgICAgICAKLSAgICAgICAgTm9kZSYgbGVmdCA9IGF0KG11bC5jaGlsZDEoKSk7
Ci0gICAgICAgIE5vZGUmIHJpZ2h0ID0gYXQobXVsLmNoaWxkMigpKTsKKyAgICAgICAgTm9kZSog
bGVmdCA9IG11bC0+Y2hpbGQxKCkubm9kZSgpOworICAgICAgICBOb2RlKiByaWdodCA9IG11bC0+
Y2hpbGQyKCkubm9kZSgpOwogICAgICAgICAKICAgICAgICAgcmV0dXJuIE5vZGU6OnNob3VsZFNw
ZWN1bGF0ZUludGVnZXJGb3JBcml0aG1ldGljKGxlZnQsIHJpZ2h0KSAmJiBtdWwuY2FuU3BlY3Vs
YXRlSW50ZWdlcigpOwogICAgIH0KICAgICAKLSAgICBib29sIG5lZ2F0ZVNob3VsZFNwZWN1bGF0
ZUludGVnZXIoTm9kZSYgbmVnYXRlKQorICAgIGJvb2wgbmVnYXRlU2hvdWxkU3BlY3VsYXRlSW50
ZWdlcihOb2RlKiBuZWdhdGUpCiAgICAgewotICAgICAgICBBU1NFUlQobmVnYXRlLm9wKCkgPT0g
QXJpdGhOZWdhdGUpOwotICAgICAgICByZXR1cm4gYXQobmVnYXRlLmNoaWxkMSgpKS5zaG91bGRT
cGVjdWxhdGVJbnRlZ2VyRm9yQXJpdGhtZXRpYygpICYmIG5lZ2F0ZS5jYW5TcGVjdWxhdGVJbnRl
Z2VyKCk7CisgICAgICAgIEFTU0VSVChuZWdhdGUtPm9wKCkgPT0gQXJpdGhOZWdhdGUpOworICAg
ICAgICByZXR1cm4gbmVnYXRlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlSW50ZWdlckZvckFy
aXRobWV0aWMoKSAmJiBuZWdhdGUtPmNhblNwZWN1bGF0ZUludGVnZXIoKTsKICAgICB9CiAgICAg
Ci0gICAgYm9vbCBhZGRTaG91bGRTcGVjdWxhdGVJbnRlZ2VyKE5vZGVJbmRleCBub2RlSW5kZXgp
CisgICAgYm9vbCBhZGRTaG91bGRTcGVjdWxhdGVJbnRlZ2VyKE5vZGUqIG5vZGUpCiAgICAgewot
ICAgICAgICByZXR1cm4gYWRkU2hvdWxkU3BlY3VsYXRlSW50ZWdlcihhdChub2RlSW5kZXgpKTsK
KyAgICAgICAgcmV0dXJuIGFkZFNob3VsZFNwZWN1bGF0ZUludGVnZXIobm9kZSk7CiAgICAgfQog
ICAgIAogICAgIC8vIEhlbHBlciBtZXRob2RzIHRvIGNoZWNrIG5vZGVzIGZvciBjb25zdGFudHMu
Ci0gICAgYm9vbCBpc0NvbnN0YW50KE5vZGVJbmRleCBub2RlSW5kZXgpCisgICAgYm9vbCBpc0Nv
bnN0YW50KE5vZGUqIG5vZGUpCiAgICAgewotICAgICAgICByZXR1cm4gYXQobm9kZUluZGV4KS5o
YXNDb25zdGFudCgpOworICAgICAgICByZXR1cm4gbm9kZS0+aGFzQ29uc3RhbnQoKTsKICAgICB9
Ci0gICAgYm9vbCBpc0pTQ29uc3RhbnQoTm9kZUluZGV4IG5vZGVJbmRleCkKKyAgICBib29sIGlz
SlNDb25zdGFudChOb2RlKiBub2RlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGF0KG5vZGVJbmRl
eCkuaGFzQ29uc3RhbnQoKTsKKyAgICAgICAgcmV0dXJuIG5vZGUtPmhhc0NvbnN0YW50KCk7CiAg
ICAgfQotICAgIGJvb2wgaXNJbnQzMkNvbnN0YW50KE5vZGVJbmRleCBub2RlSW5kZXgpCisgICAg
Ym9vbCBpc0ludDMyQ29uc3RhbnQoTm9kZSogbm9kZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBh
dChub2RlSW5kZXgpLmlzSW50MzJDb25zdGFudChtX2NvZGVCbG9jayk7CisgICAgICAgIHJldHVy
biBub2RlLT5pc0ludDMyQ29uc3RhbnQobV9jb2RlQmxvY2spOwogICAgIH0KLSAgICBib29sIGlz
RG91YmxlQ29uc3RhbnQoTm9kZUluZGV4IG5vZGVJbmRleCkKKyAgICBib29sIGlzRG91YmxlQ29u
c3RhbnQoTm9kZSogbm9kZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBhdChub2RlSW5kZXgpLmlz
RG91YmxlQ29uc3RhbnQobV9jb2RlQmxvY2spOworICAgICAgICByZXR1cm4gbm9kZS0+aXNEb3Vi
bGVDb25zdGFudChtX2NvZGVCbG9jayk7CiAgICAgfQotICAgIGJvb2wgaXNOdW1iZXJDb25zdGFu
dChOb2RlSW5kZXggbm9kZUluZGV4KQorICAgIGJvb2wgaXNOdW1iZXJDb25zdGFudChOb2RlKiBu
b2RlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGF0KG5vZGVJbmRleCkuaXNOdW1iZXJDb25zdGFu
dChtX2NvZGVCbG9jayk7CisgICAgICAgIHJldHVybiBub2RlLT5pc051bWJlckNvbnN0YW50KG1f
Y29kZUJsb2NrKTsKICAgICB9Ci0gICAgYm9vbCBpc0Jvb2xlYW5Db25zdGFudChOb2RlSW5kZXgg
bm9kZUluZGV4KQorICAgIGJvb2wgaXNCb29sZWFuQ29uc3RhbnQoTm9kZSogbm9kZSkKICAgICB7
Ci0gICAgICAgIHJldHVybiBhdChub2RlSW5kZXgpLmlzQm9vbGVhbkNvbnN0YW50KG1fY29kZUJs
b2NrKTsKKyAgICAgICAgcmV0dXJuIG5vZGUtPmlzQm9vbGVhbkNvbnN0YW50KG1fY29kZUJsb2Nr
KTsKICAgICB9Ci0gICAgYm9vbCBpc0NlbGxDb25zdGFudChOb2RlSW5kZXggbm9kZUluZGV4KQor
ICAgIGJvb2wgaXNDZWxsQ29uc3RhbnQoTm9kZSogbm9kZSkKICAgICB7Ci0gICAgICAgIGlmICgh
aXNKU0NvbnN0YW50KG5vZGVJbmRleCkpCisgICAgICAgIGlmICghaXNKU0NvbnN0YW50KG5vZGUp
KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBKU1ZhbHVlIHZhbHVlID0gdmFs
dWVPZkpTQ29uc3RhbnQobm9kZUluZGV4KTsKKyAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IHZhbHVl
T2ZKU0NvbnN0YW50KG5vZGUpOwogICAgICAgICByZXR1cm4gdmFsdWUuaXNDZWxsKCkgJiYgISF2
YWx1ZTsKICAgICB9Ci0gICAgYm9vbCBpc0Z1bmN0aW9uQ29uc3RhbnQoTm9kZUluZGV4IG5vZGVJ
bmRleCkKKyAgICBib29sIGlzRnVuY3Rpb25Db25zdGFudChOb2RlKiBub2RlKQogICAgIHsKLSAg
ICAgICAgaWYgKCFpc0pTQ29uc3RhbnQobm9kZUluZGV4KSkKKyAgICAgICAgaWYgKCFpc0pTQ29u
c3RhbnQobm9kZSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmICghZ2V0
SlNGdW5jdGlvbih2YWx1ZU9mSlNDb25zdGFudChub2RlSW5kZXgpKSkKKyAgICAgICAgaWYgKCFn
ZXRKU0Z1bmN0aW9uKHZhbHVlT2ZKU0NvbnN0YW50KG5vZGUpKSkKICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQotICAgIGJvb2wgaXNJbnRlcm5h
bEZ1bmN0aW9uQ29uc3RhbnQoTm9kZUluZGV4IG5vZGVJbmRleCkKKyAgICBib29sIGlzSW50ZXJu
YWxGdW5jdGlvbkNvbnN0YW50KE5vZGUqIG5vZGUpCiAgICAgewotICAgICAgICBpZiAoIWlzSlND
b25zdGFudChub2RlSW5kZXgpKQorICAgICAgICBpZiAoIWlzSlNDb25zdGFudChub2RlKSkKICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IHZhbHVlT2ZK
U0NvbnN0YW50KG5vZGVJbmRleCk7CisgICAgICAgIEpTVmFsdWUgdmFsdWUgPSB2YWx1ZU9mSlND
b25zdGFudChub2RlKTsKICAgICAgICAgaWYgKCF2YWx1ZS5pc0NlbGwoKSB8fCAhdmFsdWUpCiAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIEpTQ2VsbCogY2VsbCA9IHZhbHVlLmFz
Q2VsbCgpOwpAQCAtMzQ2LDI1ICszMjcsMjUgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICB9CiAgICAgLy8gSGVscGVyIG1ldGhvZHMgZ2V0IGNvbnN0YW50IHZhbHVlcyBmcm9t
IG5vZGVzLgotICAgIEpTVmFsdWUgdmFsdWVPZkpTQ29uc3RhbnQoTm9kZUluZGV4IG5vZGVJbmRl
eCkKKyAgICBKU1ZhbHVlIHZhbHVlT2ZKU0NvbnN0YW50KE5vZGUqIG5vZGUpCiAgICAgewotICAg
ICAgICByZXR1cm4gYXQobm9kZUluZGV4KS52YWx1ZU9mSlNDb25zdGFudChtX2NvZGVCbG9jayk7
CisgICAgICAgIHJldHVybiBub2RlLT52YWx1ZU9mSlNDb25zdGFudChtX2NvZGVCbG9jayk7CiAg
ICAgfQotICAgIGludDMyX3QgdmFsdWVPZkludDMyQ29uc3RhbnQoTm9kZUluZGV4IG5vZGVJbmRl
eCkKKyAgICBpbnQzMl90IHZhbHVlT2ZJbnQzMkNvbnN0YW50KE5vZGUqIG5vZGUpCiAgICAgewot
ICAgICAgICByZXR1cm4gdmFsdWVPZkpTQ29uc3RhbnQobm9kZUluZGV4KS5hc0ludDMyKCk7Cisg
ICAgICAgIHJldHVybiB2YWx1ZU9mSlNDb25zdGFudChub2RlKS5hc0ludDMyKCk7CiAgICAgfQot
ICAgIGRvdWJsZSB2YWx1ZU9mTnVtYmVyQ29uc3RhbnQoTm9kZUluZGV4IG5vZGVJbmRleCkKKyAg
ICBkb3VibGUgdmFsdWVPZk51bWJlckNvbnN0YW50KE5vZGUqIG5vZGUpCiAgICAgewotICAgICAg
ICByZXR1cm4gdmFsdWVPZkpTQ29uc3RhbnQobm9kZUluZGV4KS5hc051bWJlcigpOworICAgICAg
ICByZXR1cm4gdmFsdWVPZkpTQ29uc3RhbnQobm9kZSkuYXNOdW1iZXIoKTsKICAgICB9Ci0gICAg
Ym9vbCB2YWx1ZU9mQm9vbGVhbkNvbnN0YW50KE5vZGVJbmRleCBub2RlSW5kZXgpCisgICAgYm9v
bCB2YWx1ZU9mQm9vbGVhbkNvbnN0YW50KE5vZGUqIG5vZGUpCiAgICAgewotICAgICAgICByZXR1
cm4gdmFsdWVPZkpTQ29uc3RhbnQobm9kZUluZGV4KS5hc0Jvb2xlYW4oKTsKKyAgICAgICAgcmV0
dXJuIHZhbHVlT2ZKU0NvbnN0YW50KG5vZGUpLmFzQm9vbGVhbigpOwogICAgIH0KLSAgICBKU0Z1
bmN0aW9uKiB2YWx1ZU9mRnVuY3Rpb25Db25zdGFudChOb2RlSW5kZXggbm9kZUluZGV4KQorICAg
IEpTRnVuY3Rpb24qIHZhbHVlT2ZGdW5jdGlvbkNvbnN0YW50KE5vZGUqIG5vZGUpCiAgICAgewot
ICAgICAgICBKU0NlbGwqIGZ1bmN0aW9uID0gZ2V0SlNGdW5jdGlvbih2YWx1ZU9mSlNDb25zdGFu
dChub2RlSW5kZXgpKTsKKyAgICAgICAgSlNDZWxsKiBmdW5jdGlvbiA9IGdldEpTRnVuY3Rpb24o
dmFsdWVPZkpTQ29uc3RhbnQobm9kZSkpOwogICAgICAgICBBU1NFUlQoZnVuY3Rpb24pOwogICAg
ICAgICByZXR1cm4ganNDYXN0PEpTRnVuY3Rpb24qPihmdW5jdGlvbik7CiAgICAgfQpAQCAtNDM5
LDQ1ICs0MjAsNDMgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9jb2RlQmxvY2stPnVuY2hl
Y2tlZEFjdGl2YXRpb25SZWdpc3RlcigpOwogICAgIH0KICAgICAKLSAgICBWYWx1ZVByb2ZpbGUq
IHZhbHVlUHJvZmlsZUZvcihOb2RlSW5kZXggbm9kZUluZGV4KQorICAgIFZhbHVlUHJvZmlsZSog
dmFsdWVQcm9maWxlRm9yKE5vZGUqIG5vZGUpCiAgICAgewotICAgICAgICBpZiAobm9kZUluZGV4
ID09IE5vTm9kZSkKKyAgICAgICAgaWYgKCFub2RlKQogICAgICAgICAgICAgcmV0dXJuIDA7CiAg
ICAgICAgIAotICAgICAgICBOb2RlJiBub2RlID0gYXQobm9kZUluZGV4KTsKLSAgICAgICAgQ29k
ZUJsb2NrKiBwcm9maWxlZEJsb2NrID0gYmFzZWxpbmVDb2RlQmxvY2tGb3Iobm9kZS5jb2RlT3Jp
Z2luKTsKKyAgICAgICAgQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrID0gYmFzZWxpbmVDb2RlQmxv
Y2tGb3Iobm9kZS0+Y29kZU9yaWdpbik7CiAgICAgICAgIAotICAgICAgICBpZiAobm9kZS5oYXNM
b2NhbCgpKSB7Ci0gICAgICAgICAgICBpZiAoIW9wZXJhbmRJc0FyZ3VtZW50KG5vZGUubG9jYWwo
KSkpCisgICAgICAgIGlmIChub2RlLT5oYXNMb2NhbCgpKSB7CisgICAgICAgICAgICBpZiAoIW9w
ZXJhbmRJc0FyZ3VtZW50KG5vZGUtPmxvY2FsKCkpKQogICAgICAgICAgICAgICAgIHJldHVybiAw
OwotICAgICAgICAgICAgaW50IGFyZ3VtZW50ID0gb3BlcmFuZFRvQXJndW1lbnQobm9kZS5sb2Nh
bCgpKTsKLSAgICAgICAgICAgIGlmIChub2RlLnZhcmlhYmxlQWNjZXNzRGF0YSgpICE9IGF0KG1f
YXJndW1lbnRzW2FyZ3VtZW50XSkudmFyaWFibGVBY2Nlc3NEYXRhKCkpCisgICAgICAgICAgICBp
bnQgYXJndW1lbnQgPSBvcGVyYW5kVG9Bcmd1bWVudChub2RlLT5sb2NhbCgpKTsKKyAgICAgICAg
ICAgIGlmIChub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKSAhPSBtX2FyZ3VtZW50c1thcmd1bWVu
dF0tPnZhcmlhYmxlQWNjZXNzRGF0YSgpKQogICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAg
ICAgICAgICAgcmV0dXJuIHByb2ZpbGVkQmxvY2stPnZhbHVlUHJvZmlsZUZvckFyZ3VtZW50KGFy
Z3VtZW50KTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgaWYgKG5vZGUuaGFzSGVhcFBy
ZWRpY3Rpb24oKSkKLSAgICAgICAgICAgIHJldHVybiBwcm9maWxlZEJsb2NrLT52YWx1ZVByb2Zp
bGVGb3JCeXRlY29kZU9mZnNldChub2RlLmNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleEZvclZhbHVl
UHJvZmlsZSgpKTsKKyAgICAgICAgaWYgKG5vZGUtPmhhc0hlYXBQcmVkaWN0aW9uKCkpCisgICAg
ICAgICAgICByZXR1cm4gcHJvZmlsZWRCbG9jay0+dmFsdWVQcm9maWxlRm9yQnl0ZWNvZGVPZmZz
ZXQobm9kZS0+Y29kZU9yaWdpbi5ieXRlY29kZUluZGV4Rm9yVmFsdWVQcm9maWxlKCkpOwogICAg
ICAgICAKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogICAgIAotICAgIE1ldGhvZE9mR2V0dGlu
Z0FWYWx1ZVByb2ZpbGUgbWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZUZvcihOb2RlSW5kZXgg
bm9kZUluZGV4KQorICAgIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUgbWV0aG9kT2ZHZXR0
aW5nQVZhbHVlUHJvZmlsZUZvcihOb2RlKiBub2RlKQogICAgIHsKLSAgICAgICAgaWYgKG5vZGVJ
bmRleCA9PSBOb05vZGUpCisgICAgICAgIGlmICghbm9kZSkKICAgICAgICAgICAgIHJldHVybiBN
ZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlKCk7CiAgICAgICAgIAotICAgICAgICBOb2RlJiBu
b2RlID0gYXQobm9kZUluZGV4KTsKLSAgICAgICAgQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrID0g
YmFzZWxpbmVDb2RlQmxvY2tGb3Iobm9kZS5jb2RlT3JpZ2luKTsKKyAgICAgICAgQ29kZUJsb2Nr
KiBwcm9maWxlZEJsb2NrID0gYmFzZWxpbmVDb2RlQmxvY2tGb3Iobm9kZS0+Y29kZU9yaWdpbik7
CiAgICAgICAgIAotICAgICAgICBpZiAobm9kZS5vcCgpID09IEdldExvY2FsKSB7CisgICAgICAg
IGlmIChub2RlLT5vcCgpID09IEdldExvY2FsKSB7CiAgICAgICAgICAgICByZXR1cm4gTWV0aG9k
T2ZHZXR0aW5nQVZhbHVlUHJvZmlsZTo6ZnJvbUxhenlPcGVyYW5kKAogICAgICAgICAgICAgICAg
IHByb2ZpbGVkQmxvY2ssCiAgICAgICAgICAgICAgICAgTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVL
ZXkoCi0gICAgICAgICAgICAgICAgICAgIG5vZGUuY29kZU9yaWdpbi5ieXRlY29kZUluZGV4LCBu
b2RlLmxvY2FsKCkpKTsKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y29kZU9yaWdpbi5ieXRl
Y29kZUluZGV4LCBub2RlLT5sb2NhbCgpKSk7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAg
IHJldHVybiBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlKHZhbHVlUHJvZmlsZUZvcihub2Rl
SW5kZXgpKTsKKyAgICAgICAgcmV0dXJuIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUodmFs
dWVQcm9maWxlRm9yKG5vZGUpKTsKICAgICB9CiAgICAgCiAgICAgYm9vbCBuZWVkc0FjdGl2YXRp
b24oKSBjb25zdApAQCAtNTAxLDIxICs0ODAsMjEgQEAgcHVibGljOgogICAgIAogICAgIHVuc2ln
bmVkIG51bVN1Y2Nlc3NvcnMoQmFzaWNCbG9jayogYmxvY2spCiAgICAgewotICAgICAgICByZXR1
cm4gYXQoYmxvY2stPmxhc3QoKSkubnVtU3VjY2Vzc29ycygpOworICAgICAgICByZXR1cm4gYmxv
Y2stPmxhc3QoKS0+bnVtU3VjY2Vzc29ycygpOwogICAgIH0KICAgICBCbG9ja0luZGV4IHN1Y2Nl
c3NvcihCYXNpY0Jsb2NrKiBibG9jaywgdW5zaWduZWQgaW5kZXgpCiAgICAgewotICAgICAgICBy
ZXR1cm4gYXQoYmxvY2stPmxhc3QoKSkuc3VjY2Vzc29yKGluZGV4KTsKKyAgICAgICAgcmV0dXJu
IGJsb2NrLT5sYXN0KCktPnN1Y2Nlc3NvcihpbmRleCk7CiAgICAgfQogICAgIEJsb2NrSW5kZXgg
c3VjY2Vzc29yRm9yQ29uZGl0aW9uKEJhc2ljQmxvY2sqIGJsb2NrLCBib29sIGNvbmRpdGlvbikK
ICAgICB7Ci0gICAgICAgIHJldHVybiBhdChibG9jay0+bGFzdCgpKS5zdWNjZXNzb3JGb3JDb25k
aXRpb24oY29uZGl0aW9uKTsKKyAgICAgICAgcmV0dXJuIGJsb2NrLT5sYXN0KCktPnN1Y2Nlc3Nv
ckZvckNvbmRpdGlvbihjb25kaXRpb24pOwogICAgIH0KICAgICAKLSAgICBib29sIGlzUHJlZGlj
dGVkTnVtZXJpY2FsKE5vZGUmIG5vZGUpCisgICAgYm9vbCBpc1ByZWRpY3RlZE51bWVyaWNhbChO
b2RlKiBub2RlKQogICAgIHsKLSAgICAgICAgU3BlY3VsYXRlZFR5cGUgbGVmdCA9IGF0KG5vZGUu
Y2hpbGQxKCkpLnByZWRpY3Rpb24oKTsKLSAgICAgICAgU3BlY3VsYXRlZFR5cGUgcmlnaHQgPSBh
dChub2RlLmNoaWxkMigpKS5wcmVkaWN0aW9uKCk7CisgICAgICAgIFNwZWN1bGF0ZWRUeXBlIGxl
ZnQgPSBub2RlLT5jaGlsZDEoKS0+cHJlZGljdGlvbigpOworICAgICAgICBTcGVjdWxhdGVkVHlw
ZSByaWdodCA9IG5vZGUtPmNoaWxkMigpLT5wcmVkaWN0aW9uKCk7CiAgICAgICAgIHJldHVybiBp
c051bWJlclNwZWN1bGF0aW9uKGxlZnQpICYmIGlzTnVtYmVyU3BlY3VsYXRpb24ocmlnaHQpOwog
ICAgIH0KICAgICAKQEAgLTUyNSwyMyArNTA0LDIzIEBAIHB1YmxpYzoKICAgICAvLyAtIFB1dEJ5
VmFsIGRlZmluaXRlbHkgY2hhbmdlcyB0aGUgYXJyYXkgaXQgc3RvcmVzIHRvLCBhbmQgbWF5IGV2
ZW4gY2hhbmdlIGl0cyBsZW5ndGguCiAgICAgLy8gLSBQdXRCeU9mZnNldCBkZWZpbml0ZWx5IGNo
YW5nZXMgdGhlIG9iamVjdCBpdCBzdG9yZXMgdG8uCiAgICAgLy8gLSBhbmQgc28gb24uCi0gICAg
Ym9vbCBieVZhbElzUHVyZShOb2RlJiBub2RlKQorICAgIGJvb2wgYnlWYWxJc1B1cmUoTm9kZSog
bm9kZSkKICAgICB7Ci0gICAgICAgIHN3aXRjaCAobm9kZS5hcnJheU1vZGUoKS50eXBlKCkpIHsK
KyAgICAgICAgc3dpdGNoIChub2RlLT5hcnJheU1vZGUoKS50eXBlKCkpIHsKICAgICAgICAgY2Fz
ZSBBcnJheTo6R2VuZXJpYzoKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgY2Fz
ZSBBcnJheTo6SW50MzI6CiAgICAgICAgIGNhc2UgQXJyYXk6OkRvdWJsZToKICAgICAgICAgY2Fz
ZSBBcnJheTo6Q29udGlndW91czoKICAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlTdG9yYWdlOgot
ICAgICAgICAgICAgcmV0dXJuICFub2RlLmFycmF5TW9kZSgpLmlzT3V0T2ZCb3VuZHMoKTsKKyAg
ICAgICAgICAgIHJldHVybiAhbm9kZS0+YXJyYXlNb2RlKCkuaXNPdXRPZkJvdW5kcygpOwogICAg
ICAgICBjYXNlIEFycmF5OjpTbG93UHV0QXJyYXlTdG9yYWdlOgotICAgICAgICAgICAgcmV0dXJu
ICFub2RlLmFycmF5TW9kZSgpLm1heVN0b3JlVG9Ib2xlKCk7CisgICAgICAgICAgICByZXR1cm4g
IW5vZGUtPmFycmF5TW9kZSgpLm1heVN0b3JlVG9Ib2xlKCk7CiAgICAgICAgIGNhc2UgQXJyYXk6
OlN0cmluZzoKLSAgICAgICAgICAgIHJldHVybiBub2RlLm9wKCkgPT0gR2V0QnlWYWw7CisgICAg
ICAgICAgICByZXR1cm4gbm9kZS0+b3AoKSA9PSBHZXRCeVZhbDsKICNpZiBVU0UoSlNWQUxVRTMy
XzY0KQogICAgICAgICBjYXNlIEFycmF5OjpBcmd1bWVudHM6Ci0gICAgICAgICAgICBpZiAobm9k
ZS5vcCgpID09IEdldEJ5VmFsKQorICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gR2V0QnlW
YWwpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAjZW5kaWYgLy8gVVNFKEpTVkFMVUUzMl82NCkKQEAgLTU1MCwxMyArNTI5LDEzIEBAIHB1
YmxpYzoKICAgICAgICAgfQogICAgIH0KICAgICAKLSAgICBib29sIGNsb2JiZXJzV29ybGQoTm9k
ZSYgbm9kZSkKKyAgICBib29sIGNsb2JiZXJzV29ybGQoTm9kZSogbm9kZSkKICAgICB7Ci0gICAg
ICAgIGlmIChub2RlLmZsYWdzKCkgJiBOb2RlQ2xvYmJlcnNXb3JsZCkKKyAgICAgICAgaWYgKG5v
ZGUtPmZsYWdzKCkgJiBOb2RlQ2xvYmJlcnNXb3JsZCkKICAgICAgICAgICAgIHJldHVybiB0cnVl
OwotICAgICAgICBpZiAoIShub2RlLmZsYWdzKCkgJiBOb2RlTWlnaHRDbG9iYmVyKSkKKyAgICAg
ICAgaWYgKCEobm9kZS0+ZmxhZ3MoKSAmIE5vZGVNaWdodENsb2JiZXIpKQogICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgICAgICBzd2l0Y2ggKG5vZGUub3AoKSkgeworICAgICAgICBzd2l0
Y2ggKG5vZGUtPm9wKCkpIHsKICAgICAgICAgY2FzZSBWYWx1ZUFkZDoKICAgICAgICAgY2FzZSBD
b21wYXJlTGVzczoKICAgICAgICAgY2FzZSBDb21wYXJlTGVzc0VxOgpAQCAtNTc0LDkgKzU1Myw5
IEBAIHB1YmxpYzoKICAgICAgICAgfQogICAgIH0KICAgICAKLSAgICBib29sIGNsb2JiZXJzV29y
bGQoTm9kZUluZGV4IG5vZGVJbmRleCkKKyAgICBib29sIGNsb2JiZXJzV29ybGQoTm9kZSogbm9k
ZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBjbG9iYmVyc1dvcmxkKGF0KG5vZGVJbmRleCkpOwor
ICAgICAgICByZXR1cm4gY2xvYmJlcnNXb3JsZChub2RlKTsKICAgICB9CiAgICAgCiAgICAgdm9p
ZCBkZXRlcm1pbmVSZWFjaGFiaWxpdHkoKTsKQEAgLTU4NCw1MiArNTYzLDU3IEBAIHB1YmxpYzoK
ICAgICAKICAgICB2b2lkIHJlc2V0RXhpdFN0YXRlcygpOwogICAgIAotICAgIHVuc2lnbmVkIHZh
ckFyZ051bUNoaWxkcmVuKE5vZGUmIG5vZGUpCisgICAgdW5zaWduZWQgdmFyQXJnTnVtQ2hpbGRy
ZW4oTm9kZSogbm9kZSkKICAgICB7Ci0gICAgICAgIEFTU0VSVChub2RlLmZsYWdzKCkgJiBOb2Rl
SGFzVmFyQXJncyk7Ci0gICAgICAgIHJldHVybiBub2RlLm51bUNoaWxkcmVuKCk7CisgICAgICAg
IEFTU0VSVChub2RlLT5mbGFncygpICYgTm9kZUhhc1ZhckFyZ3MpOworICAgICAgICByZXR1cm4g
bm9kZS0+bnVtQ2hpbGRyZW4oKTsKICAgICB9CiAgICAgCi0gICAgdW5zaWduZWQgbnVtQ2hpbGRy
ZW4oTm9kZSYgbm9kZSkKKyAgICB1bnNpZ25lZCBudW1DaGlsZHJlbihOb2RlKiBub2RlKQogICAg
IHsKLSAgICAgICAgaWYgKG5vZGUuZmxhZ3MoKSAmIE5vZGVIYXNWYXJBcmdzKQorICAgICAgICBp
ZiAobm9kZS0+ZmxhZ3MoKSAmIE5vZGVIYXNWYXJBcmdzKQogICAgICAgICAgICAgcmV0dXJuIHZh
ckFyZ051bUNoaWxkcmVuKG5vZGUpOwogICAgICAgICByZXR1cm4gQWRqYWNlbmN5TGlzdDo6U2l6
ZTsKICAgICB9CiAgICAgCi0gICAgRWRnZSYgdmFyQXJnQ2hpbGQoTm9kZSYgbm9kZSwgdW5zaWdu
ZWQgaW5kZXgpCisgICAgRWRnZSYgdmFyQXJnQ2hpbGQoTm9kZSogbm9kZSwgdW5zaWduZWQgaW5k
ZXgpCiAgICAgewotICAgICAgICBBU1NFUlQobm9kZS5mbGFncygpICYgTm9kZUhhc1ZhckFyZ3Mp
OwotICAgICAgICByZXR1cm4gbV92YXJBcmdDaGlsZHJlbltub2RlLmZpcnN0Q2hpbGQoKSArIGlu
ZGV4XTsKKyAgICAgICAgQVNTRVJUKG5vZGUtPmZsYWdzKCkgJiBOb2RlSGFzVmFyQXJncyk7Cisg
ICAgICAgIHJldHVybiBtX3ZhckFyZ0NoaWxkcmVuW25vZGUtPmZpcnN0Q2hpbGQoKSArIGluZGV4
XTsKICAgICB9CiAgICAgCi0gICAgRWRnZSYgY2hpbGQoTm9kZSYgbm9kZSwgdW5zaWduZWQgaW5k
ZXgpCisgICAgRWRnZSYgY2hpbGQoTm9kZSogbm9kZSwgdW5zaWduZWQgaW5kZXgpCiAgICAgewot
ICAgICAgICBpZiAobm9kZS5mbGFncygpICYgTm9kZUhhc1ZhckFyZ3MpCisgICAgICAgIGlmIChu
b2RlLT5mbGFncygpICYgTm9kZUhhc1ZhckFyZ3MpCiAgICAgICAgICAgICByZXR1cm4gdmFyQXJn
Q2hpbGQobm9kZSwgaW5kZXgpOwotICAgICAgICByZXR1cm4gbm9kZS5jaGlsZHJlbi5jaGlsZChp
bmRleCk7CisgICAgICAgIHJldHVybiBub2RlLT5jaGlsZHJlbi5jaGlsZChpbmRleCk7CiAgICAg
fQogICAgIAotICAgIHZvaWQgdm90ZShFZGdlIGVkZ2UsIHVuc2lnbmVkIGJhbGxvdCkKKyAgICB2
b2lkIHZvdGVOb2RlKE5vZGUqIG5vZGUsIHVuc2lnbmVkIGJhbGxvdCkKICAgICB7Ci0gICAgICAg
IHN3aXRjaCAoYXQoZWRnZSkub3AoKSkgeworICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsK
ICAgICAgICAgY2FzZSBWYWx1ZVRvSW50MzI6CiAgICAgICAgIGNhc2UgVUludDMyVG9OdW1iZXI6
Ci0gICAgICAgICAgICBlZGdlID0gYXQoZWRnZSkuY2hpbGQxKCk7CisgICAgICAgICAgICBub2Rl
ID0gbm9kZS0+Y2hpbGQxKCkubm9kZSgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRl
ZmF1bHQ6CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAg
aWYgKGF0KGVkZ2UpLm9wKCkgPT0gR2V0TG9jYWwpCi0gICAgICAgICAgICBhdChlZGdlKS52YXJp
YWJsZUFjY2Vzc0RhdGEoKS0+dm90ZShiYWxsb3QpOworICAgICAgICBpZiAobm9kZS0+b3AoKSA9
PSBHZXRMb2NhbCkKKyAgICAgICAgICAgIG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT52b3Rl
KGJhbGxvdCk7CisgICAgfQorICAgIAorICAgIHZvaWQgdm90ZU5vZGUoRWRnZSBlZGdlLCB1bnNp
Z25lZCBiYWxsb3QpCisgICAgeworICAgICAgICB2b3RlTm9kZShlZGdlLm5vZGUoKSwgYmFsbG90
KTsKICAgICB9CiAgICAgCi0gICAgdm9pZCB2b3RlKE5vZGUmIG5vZGUsIHVuc2lnbmVkIGJhbGxv
dCkKKyAgICB2b2lkIHZvdGVDaGlsZHJlbihOb2RlKiBub2RlLCB1bnNpZ25lZCBiYWxsb3QpCiAg
ICAgewotICAgICAgICBpZiAobm9kZS5mbGFncygpICYgTm9kZUhhc1ZhckFyZ3MpIHsKLSAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgY2hpbGRJZHggPSBub2RlLmZpcnN0Q2hpbGQoKTsKLSAgICAg
ICAgICAgICAgICAgY2hpbGRJZHggPCBub2RlLmZpcnN0Q2hpbGQoKSArIG5vZGUubnVtQ2hpbGRy
ZW4oKTsKKyAgICAgICAgaWYgKG5vZGUtPmZsYWdzKCkgJiBOb2RlSGFzVmFyQXJncykgeworICAg
ICAgICAgICAgZm9yICh1bnNpZ25lZCBjaGlsZElkeCA9IG5vZGUtPmZpcnN0Q2hpbGQoKTsKKyAg
ICAgICAgICAgICAgICAgY2hpbGRJZHggPCBub2RlLT5maXJzdENoaWxkKCkgKyBub2RlLT5udW1D
aGlsZHJlbigpOwogICAgICAgICAgICAgICAgICBjaGlsZElkeCsrKSB7CiAgICAgICAgICAgICAg
ICAgaWYgKCEhbV92YXJBcmdDaGlsZHJlbltjaGlsZElkeF0pCiAgICAgICAgICAgICAgICAgICAg
IHZvdGUobV92YXJBcmdDaGlsZHJlbltjaGlsZElkeF0sIGJhbGxvdCk7CkBAIC02MzcsMzkgKzYy
MSwzOCBAQCBwdWJsaWM6CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAg
Ci0gICAgICAgIGlmICghbm9kZS5jaGlsZDEoKSkKKyAgICAgICAgaWYgKCFub2RlLT5jaGlsZDEo
KSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgdm90ZShub2RlLmNoaWxkMSgpLCBiYWxs
b3QpOwotICAgICAgICBpZiAoIW5vZGUuY2hpbGQyKCkpCisgICAgICAgIHZvdGUobm9kZS0+Y2hp
bGQxKCksIGJhbGxvdCk7CisgICAgICAgIGlmICghbm9kZS0+Y2hpbGQyKCkpCiAgICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIHZvdGUobm9kZS5jaGlsZDIoKSwgYmFsbG90KTsKLSAgICAgICAg
aWYgKCFub2RlLmNoaWxkMygpKQorICAgICAgICB2b3RlKG5vZGUtPmNoaWxkMigpLCBiYWxsb3Qp
OworICAgICAgICBpZiAoIW5vZGUtPmNoaWxkMygpKQogICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICB2b3RlKG5vZGUuY2hpbGQzKCksIGJhbGxvdCk7CisgICAgICAgIHZvdGUobm9kZS0+Y2hp
bGQzKCksIGJhbGxvdCk7CiAgICAgfQogICAgIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IC8v
IFQgPSBOb2RlSW5kZXggb3IgRWRnZQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IC8vIFQgPSBO
b2RlKiBvciBFZGdlCiAgICAgdm9pZCBzdWJzdGl0dXRlKEJhc2ljQmxvY2smIGJsb2NrLCB1bnNp
Z25lZCBzdGFydEluZGV4SW5CbG9jaywgVCBvbGRUaGluZywgVCBuZXdUaGluZykKICAgICB7CiAg
ICAgICAgIGZvciAodW5zaWduZWQgaW5kZXhJbkJsb2NrID0gc3RhcnRJbmRleEluQmxvY2s7IGlu
ZGV4SW5CbG9jayA8IGJsb2NrLnNpemUoKTsgKytpbmRleEluQmxvY2spIHsKLSAgICAgICAgICAg
IE5vZGVJbmRleCBub2RlSW5kZXggPSBibG9ja1tpbmRleEluQmxvY2tdOwotICAgICAgICAgICAg
Tm9kZSYgbm9kZSA9IGF0KG5vZGVJbmRleCk7Ci0gICAgICAgICAgICBpZiAobm9kZS5mbGFncygp
ICYgTm9kZUhhc1ZhckFyZ3MpIHsKLSAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGNoaWxk
SWR4ID0gbm9kZS5maXJzdENoaWxkKCk7IGNoaWxkSWR4IDwgbm9kZS5maXJzdENoaWxkKCkgKyBu
b2RlLm51bUNoaWxkcmVuKCk7ICsrY2hpbGRJZHgpIHsKKyAgICAgICAgICAgIE5vZGUqIG5vZGUg
PSBibG9ja1tpbmRleEluQmxvY2tdOworICAgICAgICAgICAgaWYgKG5vZGUtPmZsYWdzKCkgJiBO
b2RlSGFzVmFyQXJncykgeworICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgY2hpbGRJZHgg
PSBub2RlLT5maXJzdENoaWxkKCk7IGNoaWxkSWR4IDwgbm9kZS0+Zmlyc3RDaGlsZCgpICsgbm9k
ZS0+bnVtQ2hpbGRyZW4oKTsgKytjaGlsZElkeCkgewogICAgICAgICAgICAgICAgICAgICBpZiAo
ISFtX3ZhckFyZ0NoaWxkcmVuW2NoaWxkSWR4XSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGNv
bXBhcmVBbmRTd2FwKG1fdmFyQXJnQ2hpbGRyZW5bY2hpbGRJZHhdLCBvbGRUaGluZywgbmV3VGhp
bmcsIG5vZGUuc2hvdWxkR2VuZXJhdGUoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBjb21w
YXJlQW5kU3dhcChtX3ZhckFyZ0NoaWxkcmVuW2NoaWxkSWR4XSwgb2xkVGhpbmcsIG5ld1RoaW5n
LCBub2RlLT5zaG91bGRHZW5lcmF0ZSgpKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoIW5vZGUuY2hp
bGQxKCkpCisgICAgICAgICAgICBpZiAoIW5vZGUtPmNoaWxkMSgpKQogICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwotICAgICAgICAgICAgY29tcGFyZUFuZFN3YXAobm9kZS5jaGlsZHJlbi5jaGls
ZDEoKSwgb2xkVGhpbmcsIG5ld1RoaW5nLCBub2RlLnNob3VsZEdlbmVyYXRlKCkpOwotICAgICAg
ICAgICAgaWYgKCFub2RlLmNoaWxkMigpKQorICAgICAgICAgICAgY29tcGFyZUFuZFN3YXAobm9k
ZS0+Y2hpbGRyZW4uY2hpbGQxKCksIG9sZFRoaW5nLCBuZXdUaGluZywgbm9kZS0+c2hvdWxkR2Vu
ZXJhdGUoKSk7CisgICAgICAgICAgICBpZiAoIW5vZGUtPmNoaWxkMigpKQogICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgY29tcGFyZUFuZFN3YXAobm9kZS5jaGlsZHJlbi5j
aGlsZDIoKSwgb2xkVGhpbmcsIG5ld1RoaW5nLCBub2RlLnNob3VsZEdlbmVyYXRlKCkpOwotICAg
ICAgICAgICAgaWYgKCFub2RlLmNoaWxkMygpKQorICAgICAgICAgICAgY29tcGFyZUFuZFN3YXAo
bm9kZS0+Y2hpbGRyZW4uY2hpbGQyKCksIG9sZFRoaW5nLCBuZXdUaGluZywgbm9kZS0+c2hvdWxk
R2VuZXJhdGUoKSk7CisgICAgICAgICAgICBpZiAoIW5vZGUtPmNoaWxkMygpKQogICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgY29tcGFyZUFuZFN3YXAobm9kZS5jaGlsZHJl
bi5jaGlsZDMoKSwgb2xkVGhpbmcsIG5ld1RoaW5nLCBub2RlLnNob3VsZEdlbmVyYXRlKCkpOwor
ICAgICAgICAgICAgY29tcGFyZUFuZFN3YXAobm9kZS0+Y2hpbGRyZW4uY2hpbGQzKCksIG9sZFRo
aW5nLCBuZXdUaGluZywgbm9kZS0+c2hvdWxkR2VuZXJhdGUoKSk7CiAgICAgICAgIH0KICAgICB9
CiAgICAgCkBAIC02NzcsMjkgKzY2MCwyOCBAQCBwdWJsaWM6CiAgICAgLy8gYW55IEdldExvY2Fs
cyBpbiB0aGUgYmFzaWMgYmxvY2suCiAgICAgLy8gRklYTUU6IGl0IG1heSBiZSBhcHByb3ByaWF0
ZSwgaW4gdGhlIGZ1dHVyZSwgdG8gZ2VuZXJhbGl6ZSB0aGlzIHRvIGhhbmRsZSBHZXRMb2NhbHMK
ICAgICAvLyBpbnRyb2R1Y2VkIGFueXdoZXJlIGluIHRoZSBiYXNpYyBibG9jay4KLSAgICB2b2lk
IHN1YnN0aXR1dGVHZXRMb2NhbChCYXNpY0Jsb2NrJiBibG9jaywgdW5zaWduZWQgc3RhcnRJbmRl
eEluQmxvY2ssIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhLCBOb2RlSW5k
ZXggbmV3R2V0TG9jYWwpCisgICAgdm9pZCBzdWJzdGl0dXRlR2V0TG9jYWwoQmFzaWNCbG9jayYg
YmxvY2ssIHVuc2lnbmVkIHN0YXJ0SW5kZXhJbkJsb2NrLCBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZh
cmlhYmxlQWNjZXNzRGF0YSwgTm9kZSogbmV3R2V0TG9jYWwpCiAgICAgewogICAgICAgICBpZiAo
dmFyaWFibGVBY2Nlc3NEYXRhLT5pc0NhcHR1cmVkKCkpIHsKICAgICAgICAgICAgIC8vIExldCBD
U0Ugd29ycnkgYWJvdXQgdGhpcyBvbmUuCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0K
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpbmRleEluQmxvY2sgPSBzdGFydEluZGV4SW5CbG9jazsg
aW5kZXhJbkJsb2NrIDwgYmxvY2suc2l6ZSgpOyArK2luZGV4SW5CbG9jaykgewotICAgICAgICAg
ICAgTm9kZUluZGV4IG5vZGVJbmRleCA9IGJsb2NrW2luZGV4SW5CbG9ja107Ci0gICAgICAgICAg
ICBOb2RlJiBub2RlID0gYXQobm9kZUluZGV4KTsKKyAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBi
bG9ja1tpbmRleEluQmxvY2tdOwogICAgICAgICAgICAgYm9vbCBzaG91bGRDb250aW51ZSA9IHRy
dWU7Ci0gICAgICAgICAgICBzd2l0Y2ggKG5vZGUub3AoKSkgeworICAgICAgICAgICAgc3dpdGNo
IChub2RlLT5vcCgpKSB7CiAgICAgICAgICAgICBjYXNlIFNldExvY2FsOiB7Ci0gICAgICAgICAg
ICAgICAgaWYgKG5vZGUubG9jYWwoKSA9PSB2YXJpYWJsZUFjY2Vzc0RhdGEtPmxvY2FsKCkpCisg
ICAgICAgICAgICAgICAgaWYgKG5vZGUtPmxvY2FsKCkgPT0gdmFyaWFibGVBY2Nlc3NEYXRhLT5s
b2NhbCgpKQogICAgICAgICAgICAgICAgICAgICBzaG91bGRDb250aW51ZSA9IGZhbHNlOwogICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIAogICAg
ICAgICAgICAgY2FzZSBHZXRMb2NhbDogewotICAgICAgICAgICAgICAgIGlmIChub2RlLnZhcmlh
YmxlQWNjZXNzRGF0YSgpICE9IHZhcmlhYmxlQWNjZXNzRGF0YSkKKyAgICAgICAgICAgICAgICBp
ZiAobm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCkgIT0gdmFyaWFibGVBY2Nlc3NEYXRhKQogICAg
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICBzdWJzdGl0dXRlKGJs
b2NrLCBpbmRleEluQmxvY2ssIG5vZGVJbmRleCwgbmV3R2V0TG9jYWwpOwotICAgICAgICAgICAg
ICAgIE5vZGVJbmRleCBvbGRUYWlsSW5kZXggPSBibG9jay52YXJpYWJsZXNBdFRhaWwub3BlcmFu
ZCh2YXJpYWJsZUFjY2Vzc0RhdGEtPmxvY2FsKCkpOwotICAgICAgICAgICAgICAgIGlmIChvbGRU
YWlsSW5kZXggPT0gbm9kZUluZGV4KQorICAgICAgICAgICAgICAgIHN1YnN0aXR1dGUoYmxvY2ss
IGluZGV4SW5CbG9jaywgbm9kZSwgbmV3R2V0TG9jYWwpOworICAgICAgICAgICAgICAgIE5vZGUq
IG9sZFRhaWxOb2RlID0gYmxvY2sudmFyaWFibGVzQXRUYWlsLm9wZXJhbmQodmFyaWFibGVBY2Nl
c3NEYXRhLT5sb2NhbCgpKTsKKyAgICAgICAgICAgICAgICBpZiAob2xkVGFpbE5vZGUgPT0gbm9k
ZSkKICAgICAgICAgICAgICAgICAgICAgYmxvY2sudmFyaWFibGVzQXRUYWlsLm9wZXJhbmQodmFy
aWFibGVBY2Nlc3NEYXRhLT5sb2NhbCgpKSA9IG5ld0dldExvY2FsOwogICAgICAgICAgICAgICAg
IHNob3VsZENvbnRpbnVlID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC03MTcs
NiArNjk5LDggQEAgcHVibGljOgogICAgIENvZGVCbG9jayogbV9jb2RlQmxvY2s7CiAgICAgUmVm
UHRyPFByb2ZpbGVyOjpDb21waWxhdGlvbj4gbV9jb21waWxhdGlvbjsKICAgICBDb2RlQmxvY2sq
IG1fcHJvZmlsZWRCbG9jazsKKyAgICAKKyAgICBOb2RlQWxsb2NhdG9yJiBtX2FsbG9jYXRvcjsK
IAogICAgIFZlY3RvcjwgT3duUHRyPEJhc2ljQmxvY2s+ICwgOD4gbV9ibG9ja3M7CiAgICAgVmVj
dG9yPEVkZ2UsIDE2PiBtX3ZhckFyZ0NoaWxkcmVuOwpAQCAtNzI0LDcgKzcwOCw3IEBAIHB1Ymxp
YzoKICAgICBWZWN0b3I8UmVzb2x2ZUdsb2JhbERhdGE+IG1fcmVzb2x2ZUdsb2JhbERhdGE7CiAg
ICAgVmVjdG9yPFJlc29sdmVPcGVyYXRpb25EYXRhPiBtX3Jlc29sdmVPcGVyYXRpb25zRGF0YTsK
ICAgICBWZWN0b3I8UHV0VG9CYXNlT3BlcmF0aW9uRGF0YT4gbV9wdXRUb0Jhc2VPcGVyYXRpb25E
YXRhOwotICAgIFZlY3RvcjxOb2RlSW5kZXgsIDg+IG1fYXJndW1lbnRzOworICAgIFZlY3RvcjxO
b2RlKiwgOD4gbV9hcmd1bWVudHM7CiAgICAgU2VnbWVudGVkVmVjdG9yPFZhcmlhYmxlQWNjZXNz
RGF0YSwgMTY+IG1fdmFyaWFibGVBY2Nlc3NEYXRhOwogICAgIFNlZ21lbnRlZFZlY3RvcjxBcmd1
bWVudFBvc2l0aW9uLCA4PiBtX2FyZ3VtZW50UG9zaXRpb25zOwogICAgIFNlZ21lbnRlZFZlY3Rv
cjxTdHJ1Y3R1cmVTZXQsIDE2PiBtX3N0cnVjdHVyZVNldDsKQEAgLTc0NCwyOSArNzI4LDI5IEBA
IHByaXZhdGU6CiAgICAgCiAgICAgdm9pZCBoYW5kbGVTdWNjZXNzb3IoVmVjdG9yPEJsb2NrSW5k
ZXgsIDE2PiYgd29ya2xpc3QsIEJsb2NrSW5kZXggYmxvY2tJbmRleCwgQmxvY2tJbmRleCBzdWNj
ZXNzb3JJbmRleCk7CiAgICAgCi0gICAgQWRkU3BlY3VsYXRpb25Nb2RlIGFkZEltbWVkaWF0ZVNo
b3VsZFNwZWN1bGF0ZUludGVnZXIoTm9kZSYgYWRkLCBib29sIHZhcmlhYmxlU2hvdWxkU3BlY3Vs
YXRlSW50ZWdlciwgTm9kZSYgaW1tZWRpYXRlKQorICAgIEFkZFNwZWN1bGF0aW9uTW9kZSBhZGRJ
bW1lZGlhdGVTaG91bGRTcGVjdWxhdGVJbnRlZ2VyKE5vZGUqIGFkZCwgYm9vbCB2YXJpYWJsZVNo
b3VsZFNwZWN1bGF0ZUludGVnZXIsIE5vZGUqIGltbWVkaWF0ZSkKICAgICB7CiAgICAgICAgIEFT
U0VSVChpbW1lZGlhdGUuaGFzQ29uc3RhbnQoKSk7CiAgICAgICAgIAotICAgICAgICBKU1ZhbHVl
IGltbWVkaWF0ZVZhbHVlID0gaW1tZWRpYXRlLnZhbHVlT2ZKU0NvbnN0YW50KG1fY29kZUJsb2Nr
KTsKLSAgICAgICAgaWYgKCFpbW1lZGlhdGVWYWx1ZS5pc051bWJlcigpKQorICAgICAgICBKU1Zh
bHVlIGltbWVkaWF0ZVZhbHVlID0gaW1tZWRpYXRlLT52YWx1ZU9mSlNDb25zdGFudChtX2NvZGVC
bG9jayk7CisgICAgICAgIGlmICghaW1tZWRpYXRlVmFsdWUtPmlzTnVtYmVyKCkpCiAgICAgICAg
ICAgICByZXR1cm4gRG9udFNwZWN1bGF0ZUludGVnZXI7CiAgICAgICAgIAogICAgICAgICBpZiAo
IXZhcmlhYmxlU2hvdWxkU3BlY3VsYXRlSW50ZWdlcikKICAgICAgICAgICAgIHJldHVybiBEb250
U3BlY3VsYXRlSW50ZWdlcjsKICAgICAgICAgCi0gICAgICAgIGlmIChpbW1lZGlhdGVWYWx1ZS5p
c0ludDMyKCkpCi0gICAgICAgICAgICByZXR1cm4gYWRkLmNhblNwZWN1bGF0ZUludGVnZXIoKSA/
IFNwZWN1bGF0ZUludGVnZXIgOiBEb250U3BlY3VsYXRlSW50ZWdlcjsKKyAgICAgICAgaWYgKGlt
bWVkaWF0ZVZhbHVlLT5pc0ludDMyKCkpCisgICAgICAgICAgICByZXR1cm4gYWRkLT5jYW5TcGVj
dWxhdGVJbnRlZ2VyKCkgPyBTcGVjdWxhdGVJbnRlZ2VyIDogRG9udFNwZWN1bGF0ZUludGVnZXI7
CiAgICAgICAgIAogICAgICAgICBkb3VibGUgZG91YmxlSW1tZWRpYXRlID0gaW1tZWRpYXRlVmFs
dWUuYXNEb3VibGUoKTsKICAgICAgICAgY29uc3QgZG91YmxlIHR3b1RvVGhlNDggPSAyODE0NzQ5
NzY3MTA2NTYuMDsKICAgICAgICAgaWYgKGRvdWJsZUltbWVkaWF0ZSA8IC10d29Ub1RoZTQ4IHx8
IGRvdWJsZUltbWVkaWF0ZSA+IHR3b1RvVGhlNDgpCiAgICAgICAgICAgICByZXR1cm4gRG9udFNw
ZWN1bGF0ZUludGVnZXI7CiAgICAgICAgIAotICAgICAgICByZXR1cm4gbm9kZUNhblRydW5jYXRl
SW50ZWdlcihhZGQuYXJpdGhOb2RlRmxhZ3MoKSkgPyBTcGVjdWxhdGVJbnRlZ2VyQnV0QWx3YXlz
V2F0Y2hPdmVyZmxvdyA6IERvbnRTcGVjdWxhdGVJbnRlZ2VyOworICAgICAgICByZXR1cm4gbm9k
ZUNhblRydW5jYXRlSW50ZWdlcihhZGQtPmFyaXRoTm9kZUZsYWdzKCkpID8gU3BlY3VsYXRlSW50
ZWdlckJ1dEFsd2F5c1dhdGNoT3ZlcmZsb3cgOiBEb250U3BlY3VsYXRlSW50ZWdlcjsKICAgICB9
CiAgICAgCi0gICAgYm9vbCBtdWxJbW1lZGlhdGVTaG91bGRTcGVjdWxhdGVJbnRlZ2VyKE5vZGUm
IG11bCwgTm9kZSYgdmFyaWFibGUsIE5vZGUmIGltbWVkaWF0ZSkKKyAgICBib29sIG11bEltbWVk
aWF0ZVNob3VsZFNwZWN1bGF0ZUludGVnZXIoTm9kZSogbXVsLCBOb2RlKiB2YXJpYWJsZSwgTm9k
ZSogaW1tZWRpYXRlKQogICAgIHsKICAgICAgICAgQVNTRVJUKGltbWVkaWF0ZS5oYXNDb25zdGFu
dCgpKTsKICAgICAgICAgCkBAIC03NzQsNyArNzU4LDcgQEAgcHJpdmF0ZToKICAgICAgICAgaWYg
KCFpbW1lZGlhdGVWYWx1ZS5pc0ludDMyKCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgICAgIAotICAgICAgICBpZiAoIXZhcmlhYmxlLnNob3VsZFNwZWN1bGF0ZUludGVnZXJGb3JB
cml0aG1ldGljKCkpCisgICAgICAgIGlmICghdmFyaWFibGUtPnNob3VsZFNwZWN1bGF0ZUludGVn
ZXJGb3JBcml0aG1ldGljKCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIAog
ICAgICAgICBpbnQzMl90IGludEltbWVkaWF0ZSA9IGltbWVkaWF0ZVZhbHVlLmFzSW50MzIoKTsK
QEAgLTc4NSwxNCArNzY5LDE0IEBAIHByaXZhdGU6CiAgICAgICAgIC8vIGNhblNwZWN1bGF0ZUlu
dGVnZXIoKSBpbXBsaWVzKS4KICAgICAgICAgY29uc3QgaW50MzJfdCB0d29Ub1RoZTIyID0gMSA8
PCAyMjsKICAgICAgICAgaWYgKGludEltbWVkaWF0ZSA8PSAtdHdvVG9UaGUyMiB8fCBpbnRJbW1l
ZGlhdGUgPj0gdHdvVG9UaGUyMikKLSAgICAgICAgICAgIHJldHVybiBtdWwuY2FuU3BlY3VsYXRl
SW50ZWdlcigpICYmICFub2RlTWF5T3ZlcmZsb3cobXVsLmFyaXRoTm9kZUZsYWdzKCkpOworICAg
ICAgICAgICAgcmV0dXJuIG11bC0+Y2FuU3BlY3VsYXRlSW50ZWdlcigpICYmICFub2RlTWF5T3Zl
cmZsb3cobXVsLT5hcml0aE5vZGVGbGFncygpKTsKIAotICAgICAgICByZXR1cm4gbXVsLmNhblNw
ZWN1bGF0ZUludGVnZXIoKTsKKyAgICAgICAgcmV0dXJuIG11bC0+Y2FuU3BlY3VsYXRlSW50ZWdl
cigpOwogICAgIH0KICAgICAKICAgICAvLyBXaGVuIGEgbm9kZSdzIHJlZkNvdW50IGdvZXMgZnJv
bSAwIHRvIDEsIGl0IG11c3QgKGxvZ2ljYWxseSkgcmVjdXJzaXZlbHkgcmVmIGFsbCBvZiBpdHMg
Y2hpbGRyZW4sIGFuZCB2aWNlIHZlcnNhLgotICAgIHZvaWQgcmVmQ2hpbGRyZW4oTm9kZUluZGV4
KTsKLSAgICB2b2lkIGRlcmVmQ2hpbGRyZW4oTm9kZUluZGV4KTsKKyAgICB2b2lkIHJlZkNoaWxk
cmVuKE5vZGUqKTsKKyAgICB2b2lkIGRlcmVmQ2hpbGRyZW4oTm9kZSopOwogfTsKIAogY2xhc3Mg
R2V0Qnl0ZWNvZGVCZWdpbkZvckJsb2NrIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHSW5zZXJ0aW9uU2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdJbnNlcnRpb25TZXQuaAkocmV2aXNpb24gMTQwMzA2KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdJbnNlcnRpb25TZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMzksMTQg
KzM5LDE0IEBAIGNsYXNzIEluc2VydGlvbiB7CiBwdWJsaWM6CiAgICAgSW5zZXJ0aW9uKCkgeyB9
CiAgICAgCi0gICAgSW5zZXJ0aW9uKHNpemVfdCBpbmRleCwgTm9kZUluZGV4IGVsZW1lbnQpCisg
ICAgSW5zZXJ0aW9uKHNpemVfdCBpbmRleCwgTm9kZSogZWxlbWVudCkKICAgICAgICAgOiBtX2lu
ZGV4KGluZGV4KQogICAgICAgICAsIG1fZWxlbWVudChlbGVtZW50KQogICAgIHsKICAgICB9CiAg
ICAgCiAgICAgc2l6ZV90IGluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9pbmRleDsgfQotICAgIE5v
ZGVJbmRleCBlbGVtZW50KCkgY29uc3QgeyByZXR1cm4gbV9lbGVtZW50OyB9CisgICAgTm9kZSog
ZWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fZWxlbWVudDsgfQogcHJpdmF0ZToKICAgICBzaXpl
X3QgbV9pbmRleDsKICAgICBOb2RlSW5kZXggbV9lbGVtZW50OwpAQCAtNTksMjAgKzU5LDIwIEBA
IHB1YmxpYzoKICAgICB7CiAgICAgfQogICAgIAotICAgIE5vZGVJbmRleCBpbnNlcnQoY29uc3Qg
SW5zZXJ0aW9uJiBpbnNlcnRpb24pCisgICAgTm9kZSogaW5zZXJ0KGNvbnN0IEluc2VydGlvbiYg
aW5zZXJ0aW9uKQogICAgIHsKICAgICAgICAgQVNTRVJUKCFtX2luc2VydGlvbnMuc2l6ZSgpIHx8
IG1faW5zZXJ0aW9ucy5sYXN0KCkuaW5kZXgoKSA8PSBpbnNlcnRpb24uaW5kZXgoKSk7CiAgICAg
ICAgIG1faW5zZXJ0aW9ucy5hcHBlbmQoaW5zZXJ0aW9uKTsKICAgICAgICAgcmV0dXJuIGluc2Vy
dGlvbi5lbGVtZW50KCk7CiAgICAgfQogICAgIAotICAgIE5vZGVJbmRleCBpbnNlcnQoc2l6ZV90
IGluZGV4LCBOb2RlSW5kZXggZWxlbWVudCkKKyAgICBOb2RlKiBpbnNlcnQoc2l6ZV90IGluZGV4
LCBOb2RlSW5kZXggZWxlbWVudCkKICAgICB7CiAgICAgICAgIHJldHVybiBpbnNlcnQoSW5zZXJ0
aW9uKGluZGV4LCBlbGVtZW50KSk7CiAgICAgfQogCiAjZGVmaW5lIERGR19ERUZJTkVfSU5TRVJU
X05PREUodGVtcGxhdGVQcmUsIHRlbXBsYXRlUG9zdCwgdHlwZVBhcmFtcywgdmFsdWVQYXJhbXND
b21tYSwgdmFsdWVQYXJhbXMsIHZhbHVlQXJncykgXAotICAgIHRlbXBsYXRlUHJlIHR5cGVQYXJh
bXMgdGVtcGxhdGVQb3N0IE5vZGVJbmRleCBpbnNlcnROb2RlKHNpemVfdCBpbmRleCwgUmVmQ2hp
bGRyZW5Nb2RlIHJlZkNoaWxkcmVuTW9kZSwgUmVmTm9kZU1vZGUgcmVmTm9kZU1vZGUsIFNwZWN1
bGF0ZWRUeXBlIHR5cGUgdmFsdWVQYXJhbXNDb21tYSB2YWx1ZVBhcmFtcykgXAorICAgIHRlbXBs
YXRlUHJlIHR5cGVQYXJhbXMgdGVtcGxhdGVQb3N0IE5vZGUqIGluc2VydE5vZGUoc2l6ZV90IGlu
ZGV4LCBSZWZDaGlsZHJlbk1vZGUgcmVmQ2hpbGRyZW5Nb2RlLCBSZWZOb2RlTW9kZSByZWZOb2Rl
TW9kZSwgU3BlY3VsYXRlZFR5cGUgdHlwZSB2YWx1ZVBhcmFtc0NvbW1hIHZhbHVlUGFyYW1zKSBc
CiAgICAgeyBcCiAgICAgICAgIHJldHVybiBpbnNlcnQoaW5kZXgsIG1fZ3JhcGguYWRkTm9kZShy
ZWZDaGlsZHJlbk1vZGUsIHJlZk5vZGVNb2RlLCB0eXBlIHZhbHVlUGFyYW1zQ29tbWEgdmFsdWVB
cmdzKSk7IFwKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0xvbmdM
aXZlZFN0YXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0xvbmdMaXZlZFN0YXRlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHTG9uZ0xpdmVkU3RhdGUuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ5IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdMb25nTGl2ZWRTdGF0ZS5oIgorCisjaWYgRU5BQkxF
KERGR19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworTG9uZ0xpdmVk
U3RhdGU6OkxvbmdMaXZlZFN0YXRlKCkKK3sKK30KKworTG9uZ0xpdmVkU3RhdGU6On5Mb25nTGl2
ZWRTdGF0ZSgpCit7Cit9CisKK3ZvaWQgTG9uZ0xpdmVkU3RhdGU6OnNocmlua1RvRml0KCkKK3sK
KyAgICBtX2FsbG9jYXRvci5yZXNldCgpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZH
CisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdMb25nTGl2ZWRTdGF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHTG9uZ0xpdmVkU3RhdGUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHTG9uZ0xpdmVkU3RhdGUuaAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSw1NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaWZuZGVmIERGR0xvbmdMaXZlZFN0YXRlX2gKKyNkZWZpbmUgREZHTG9uZ0xpdmVkU3RhdGVf
aAorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKwor
I2luY2x1ZGUgIkRGR05vZGVBbGxvY2F0b3IuaCIKKyNpbmNsdWRlIDx3dGYvRmFzdEFsbG9jQmFz
ZS5oPgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIERGRyB7CisKK2NsYXNzIExvbmdMaXZlZFN0YXRlIHsKKyAgICBXVEZfTUFLRV9GQVNU
X0FMTE9DQVRFRDsgV1RGX01BS0VfTk9OQ09QWUFCTEUoTG9uZ0xpdmVkU3RhdGUpOworcHVibGlj
OgorICAgIExvbmdMaXZlZFN0YXRlKCk7CisgICAgfkxvbmdMaXZlZFN0YXRlKCk7CisgICAgCisg
ICAgdm9pZCBzaHJpbmtUb0ZpdCgpOworICAgIAorICAgIE5vZGVBbGxvY2F0b3IgbV9hbGxvY2F0
b3I7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUo
REZHX0pJVCkKKworI2VuZGlmIC8vIERGR0xvbmdMaXZlZFN0YXRlX2gKKwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdOb2RlLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1NSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiREZHTm9kZS5oIgorCisjaWYgRU5BQkxFKERGR19KSVQpCisK
KyNpbmNsdWRlICJERkdOb2RlQWxsb2NhdG9yLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgREZHIHsKKwordW5zaWduZWQgTm9kZTo6aW5kZXgoKSBjb25zdAoreworICAgIHJldHVybiBO
b2RlQWxsb2NhdG9yOjphbGxvY2F0b3JPZih0aGlzKS0+aW5kZXhPZih0aGlzKTsKK30KKworfSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCituYW1lc3BhY2UgV1RGIHsKKwordm9pZCBwcmludElu
dGVybmFsKFByaW50U3RyZWFtJiBvdXQsIE5vZGUqIG5vZGUpCit7CisgICAgaWYgKCFub2RlKQor
ICAgICAgICBvdXQucHJpbnQoIi0iKTsKKyAgICBlbHNlCisgICAgICAgIG91dC5wcmludCgiQCIs
IG5vZGUtPmluZGV4KCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIEVO
QUJMRShERkdfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkocmV2
aXNpb24gMTQwMzA2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExLCAy
MDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
MSwgMjAxMiwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTY4LDcgKzY4LDcgQEAgc3RydWN0IE5ld0FycmF5QnVm
ZmVyRGF0YSB7CiAKIC8vIFRoaXMgdHlwZSB1c2VkIGluIHBhc3NpbmcgYW4gaW1tZWRpYXRlIGFy
Z3VtZW50IHRvIE5vZGUgY29uc3RydWN0b3I7CiAvLyBkaXN0aW5ndWlzaGVzIGFuIGltbWVkaWF0
ZSB2YWx1ZSAodHlwaWNhbGx5IGFuIGluZGV4IGludG8gYSBDb2RlQmxvY2sgZGF0YSBzdHJ1Y3R1
cmUgLSAKLS8vIGEgY29uc3RhbnQgaW5kZXgsIGFyZ3VtZW50LCBvciBpZGVudGlmaWVyKSBmcm9t
IGEgTm9kZUluZGV4LgorLy8gYSBjb25zdGFudCBpbmRleCwgYXJndW1lbnQsIG9yIGlkZW50aWZp
ZXIpIGZyb20gYSBOb2RlKi4KIHN0cnVjdCBPcEluZm8gewogICAgIGV4cGxpY2l0IE9wSW5mbyhp
bnQzMl90IHZhbHVlKSA6IG1fdmFsdWUoc3RhdGljX2Nhc3Q8dWludHB0cl90Pih2YWx1ZSkpIHsg
fQogICAgIGV4cGxpY2l0IE9wSW5mbyh1aW50MzJfdCB2YWx1ZSkgOiBtX3ZhbHVlKHN0YXRpY19j
YXN0PHVpbnRwdHJfdD4odmFsdWUpKSB7IH0KQEAgLTk5LDcgKzk5LDcgQEAgc3RydWN0IE5vZGUg
ewogICAgIH0KICAgICAKICAgICAvLyBDb25zdHJ1Y3QgYSBub2RlIHdpdGggdXAgdG8gMyBjaGls
ZHJlbiwgbm8gaW1tZWRpYXRlIHZhbHVlLgotICAgIE5vZGUoTm9kZVR5cGUgb3AsIENvZGVPcmln
aW4gY29kZU9yaWdpbiwgTm9kZUluZGV4IGNoaWxkMSA9IE5vTm9kZSwgTm9kZUluZGV4IGNoaWxk
MiA9IE5vTm9kZSwgTm9kZUluZGV4IGNoaWxkMyA9IE5vTm9kZSkKKyAgICBOb2RlKE5vZGVUeXBl
IG9wLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIE5vZGUqIGNoaWxkMSA9IDAsIE5vZGUqIGNoaWxk
MiA9IDAsIE5vZGUqIGNoaWxkMyA9IDApCiAgICAgICAgIDogY29kZU9yaWdpbihjb2RlT3JpZ2lu
KQogICAgICAgICAsIGNoaWxkcmVuKEFkamFjZW5jeUxpc3Q6OkZpeGVkLCBjaGlsZDEsIGNoaWxk
MiwgY2hpbGQzKQogICAgICAgICAsIG1fdmlydHVhbFJlZ2lzdGVyKEludmFsaWRWaXJ0dWFsUmVn
aXN0ZXIpCkBAIC0xMTEsNyArMTExLDcgQEAgc3RydWN0IE5vZGUgewogICAgIH0KIAogICAgIC8v
IENvbnN0cnVjdCBhIG5vZGUgd2l0aCB1cCB0byAzIGNoaWxkcmVuIGFuZCBhbiBpbW1lZGlhdGUg
dmFsdWUuCi0gICAgTm9kZShOb2RlVHlwZSBvcCwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBPcElu
Zm8gaW1tLCBOb2RlSW5kZXggY2hpbGQxID0gTm9Ob2RlLCBOb2RlSW5kZXggY2hpbGQyID0gTm9O
b2RlLCBOb2RlSW5kZXggY2hpbGQzID0gTm9Ob2RlKQorICAgIE5vZGUoTm9kZVR5cGUgb3AsIENv
ZGVPcmlnaW4gY29kZU9yaWdpbiwgT3BJbmZvIGltbSwgTm9kZSogY2hpbGQxID0gMCwgTm9kZSog
Y2hpbGQyID0gMCwgTm9kZSogY2hpbGQzID0gMCkKICAgICAgICAgOiBjb2RlT3JpZ2luKGNvZGVP
cmlnaW4pCiAgICAgICAgICwgY2hpbGRyZW4oQWRqYWNlbmN5TGlzdDo6Rml4ZWQsIGNoaWxkMSwg
Y2hpbGQyLCBjaGlsZDMpCiAgICAgICAgICwgbV92aXJ0dWFsUmVnaXN0ZXIoSW52YWxpZFZpcnR1
YWxSZWdpc3RlcikKQEAgLTEyNCw3ICsxMjQsNyBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgfQogCiAg
ICAgLy8gQ29uc3RydWN0IGEgbm9kZSB3aXRoIHVwIHRvIDMgY2hpbGRyZW4gYW5kIHR3byBpbW1l
ZGlhdGUgdmFsdWVzLgotICAgIE5vZGUoTm9kZVR5cGUgb3AsIENvZGVPcmlnaW4gY29kZU9yaWdp
biwgT3BJbmZvIGltbTEsIE9wSW5mbyBpbW0yLCBOb2RlSW5kZXggY2hpbGQxID0gTm9Ob2RlLCBO
b2RlSW5kZXggY2hpbGQyID0gTm9Ob2RlLCBOb2RlSW5kZXggY2hpbGQzID0gTm9Ob2RlKQorICAg
IE5vZGUoTm9kZVR5cGUgb3AsIENvZGVPcmlnaW4gY29kZU9yaWdpbiwgT3BJbmZvIGltbTEsIE9w
SW5mbyBpbW0yLCBOb2RlKiBjaGlsZDEgPSAwLCBOb2RlKiBjaGlsZDIgPSAwLCBOb2RlKiBjaGls
ZDMgPSAwKQogICAgICAgICA6IGNvZGVPcmlnaW4oY29kZU9yaWdpbikKICAgICAgICAgLCBjaGls
ZHJlbihBZGphY2VuY3lMaXN0OjpGaXhlZCwgY2hpbGQxLCBjaGlsZDIsIGNoaWxkMykKICAgICAg
ICAgLCBtX3ZpcnR1YWxSZWdpc3RlcihJbnZhbGlkVmlydHVhbFJlZ2lzdGVyKQpAQCAtMTU0LDYg
KzE1NCw5IEBAIHN0cnVjdCBOb2RlIHsKICAgICBOb2RlVHlwZSBvcCgpIGNvbnN0IHsgcmV0dXJu
IHN0YXRpY19jYXN0PE5vZGVUeXBlPihtX29wKTsgfQogICAgIE5vZGVGbGFncyBmbGFncygpIGNv
bnN0IHsgcmV0dXJuIG1fZmxhZ3M7IH0KICAgICAKKyAgICAvLyBUaGlzIGlzIG5vdCBhIGZhc3Qg
bWV0aG9kLgorICAgIHVuc2lnbmVkIGluZGV4KCkgY29uc3Q7CisgICAgCiAgICAgdm9pZCBzZXRP
cChOb2RlVHlwZSBvcCkKICAgICB7CiAgICAgICAgIG1fb3AgPSBvcDsKQEAgLTI4MSw3ICsyODQs
NyBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAgIGNvbnZlcnRUb1N0cnVjdHVyZVRyYW5zaXRpb25X
YXRjaHBvaW50KHN0cnVjdHVyZVNldCgpLnNpbmdsZXRvblN0cnVjdHVyZSgpKTsKICAgICB9CiAg
ICAgCi0gICAgdm9pZCBjb252ZXJ0VG9HZXRCeU9mZnNldCh1bnNpZ25lZCBzdG9yYWdlQWNjZXNz
RGF0YUluZGV4LCBOb2RlSW5kZXggc3RvcmFnZSkKKyAgICB2b2lkIGNvbnZlcnRUb0dldEJ5T2Zm
c2V0KHVuc2lnbmVkIHN0b3JhZ2VBY2Nlc3NEYXRhSW5kZXgsIE5vZGUqIHN0b3JhZ2UpCiAgICAg
ewogICAgICAgICBBU1NFUlQobV9vcCA9PSBHZXRCeUlkIHx8IG1fb3AgPT0gR2V0QnlJZEZsdXNo
KTsKICAgICAgICAgbV9vcEluZm8gPSBzdG9yYWdlQWNjZXNzRGF0YUluZGV4OwpAQCAtMjkwLDcg
KzI5Myw3IEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAgbV9mbGFncyAmPSB+Tm9kZUNsb2JiZXJz
V29ybGQ7CiAgICAgfQogICAgIAotICAgIHZvaWQgY29udmVydFRvUHV0QnlPZmZzZXQodW5zaWdu
ZWQgc3RvcmFnZUFjY2Vzc0RhdGFJbmRleCwgTm9kZUluZGV4IHN0b3JhZ2UpCisgICAgdm9pZCBj
b252ZXJ0VG9QdXRCeU9mZnNldCh1bnNpZ25lZCBzdG9yYWdlQWNjZXNzRGF0YUluZGV4LCBOb2Rl
KiBzdG9yYWdlKQogICAgIHsKICAgICAgICAgQVNTRVJUKG1fb3AgPT0gUHV0QnlJZCB8fCBtX29w
ID09IFB1dEJ5SWREaXJlY3QpOwogICAgICAgICBtX29wSW5mbyA9IHN0b3JhZ2VBY2Nlc3NEYXRh
SW5kZXg7CkBAIC05MjAsOSArOTIzLDEwIEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAgcmV0dXJu
IG1fcmVmQ291bnQ7CiAgICAgfQogCi0gICAgdm9pZCByZWYoKQorICAgIE5vZGUqIHJlZigpCiAg
ICAgewogICAgICAgICBtX3JlZkNvdW50Kys7CisgICAgICAgIHJldHVybiB0aGlzOwogICAgIH0K
IAogICAgIHVuc2lnbmVkIHBvc3RmaXhSZWYoKQpAQCAtMTEzNSw0NCArMTEzOSw0NCBAQCBzdHJ1
Y3QgTm9kZSB7CiAgICAgICAgIHJldHVybiBpc0NlbGxTcGVjdWxhdGlvbihwcmVkaWN0aW9uKCkp
OwogICAgIH0KICAgICAKLSAgICBzdGF0aWMgYm9vbCBzaG91bGRTcGVjdWxhdGVJbnRlZ2VyKE5v
ZGUmIG9wMSwgTm9kZSYgb3AyKQorICAgIHN0YXRpYyBib29sIHNob3VsZFNwZWN1bGF0ZUludGVn
ZXIoTm9kZSogb3AxLCBOb2RlKiBvcDIpCiAgICAgewotICAgICAgICByZXR1cm4gb3AxLnNob3Vs
ZFNwZWN1bGF0ZUludGVnZXIoKSAmJiBvcDIuc2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpOworICAg
ICAgICByZXR1cm4gb3AxLT5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkgJiYgb3AyLT5zaG91bGRT
cGVjdWxhdGVJbnRlZ2VyKCk7CiAgICAgfQogICAgIAotICAgIHN0YXRpYyBib29sIHNob3VsZFNw
ZWN1bGF0ZUludGVnZXJGb3JBcml0aG1ldGljKE5vZGUmIG9wMSwgTm9kZSYgb3AyKQorICAgIHN0
YXRpYyBib29sIHNob3VsZFNwZWN1bGF0ZUludGVnZXJGb3JBcml0aG1ldGljKE5vZGUqIG9wMSwg
Tm9kZSogb3AyKQogICAgIHsKLSAgICAgICAgcmV0dXJuIG9wMS5zaG91bGRTcGVjdWxhdGVJbnRl
Z2VyRm9yQXJpdGhtZXRpYygpICYmIG9wMi5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyRm9yQXJpdGht
ZXRpYygpOworICAgICAgICByZXR1cm4gb3AxLT5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyRm9yQXJp
dGhtZXRpYygpICYmIG9wMi0+c2hvdWxkU3BlY3VsYXRlSW50ZWdlckZvckFyaXRobWV0aWMoKTsK
ICAgICB9CiAgICAgCi0gICAgc3RhdGljIGJvb2wgc2hvdWxkU3BlY3VsYXRlSW50ZWdlckV4cGVj
dGluZ0RlZmluZWQoTm9kZSYgb3AxLCBOb2RlJiBvcDIpCisgICAgc3RhdGljIGJvb2wgc2hvdWxk
U3BlY3VsYXRlSW50ZWdlckV4cGVjdGluZ0RlZmluZWQoTm9kZSogb3AxLCBOb2RlKiBvcDIpCiAg
ICAgewotICAgICAgICByZXR1cm4gb3AxLnNob3VsZFNwZWN1bGF0ZUludGVnZXJFeHBlY3RpbmdE
ZWZpbmVkKCkgJiYgb3AyLnNob3VsZFNwZWN1bGF0ZUludGVnZXJFeHBlY3RpbmdEZWZpbmVkKCk7
CisgICAgICAgIHJldHVybiBvcDEtPnNob3VsZFNwZWN1bGF0ZUludGVnZXJFeHBlY3RpbmdEZWZp
bmVkKCkgJiYgb3AyLT5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyRXhwZWN0aW5nRGVmaW5lZCgpOwog
ICAgIH0KICAgICAKLSAgICBzdGF0aWMgYm9vbCBzaG91bGRTcGVjdWxhdGVEb3VibGVGb3JBcml0
aG1ldGljKE5vZGUmIG9wMSwgTm9kZSYgb3AyKQorICAgIHN0YXRpYyBib29sIHNob3VsZFNwZWN1
bGF0ZURvdWJsZUZvckFyaXRobWV0aWMoTm9kZSogb3AxLCBOb2RlKiBvcDIpCiAgICAgewotICAg
ICAgICByZXR1cm4gb3AxLnNob3VsZFNwZWN1bGF0ZURvdWJsZUZvckFyaXRobWV0aWMoKSAmJiBv
cDIuc2hvdWxkU3BlY3VsYXRlRG91YmxlRm9yQXJpdGhtZXRpYygpOworICAgICAgICByZXR1cm4g
b3AxLT5zaG91bGRTcGVjdWxhdGVEb3VibGVGb3JBcml0aG1ldGljKCkgJiYgb3AyLT5zaG91bGRT
cGVjdWxhdGVEb3VibGVGb3JBcml0aG1ldGljKCk7CiAgICAgfQogICAgIAotICAgIHN0YXRpYyBi
b29sIHNob3VsZFNwZWN1bGF0ZU51bWJlcihOb2RlJiBvcDEsIE5vZGUmIG9wMikKKyAgICBzdGF0
aWMgYm9vbCBzaG91bGRTcGVjdWxhdGVOdW1iZXIoTm9kZSogb3AxLCBOb2RlKiBvcDIpCiAgICAg
ewotICAgICAgICByZXR1cm4gb3AxLnNob3VsZFNwZWN1bGF0ZU51bWJlcigpICYmIG9wMi5zaG91
bGRTcGVjdWxhdGVOdW1iZXIoKTsKKyAgICAgICAgcmV0dXJuIG9wMS0+c2hvdWxkU3BlY3VsYXRl
TnVtYmVyKCkgJiYgb3AyLT5zaG91bGRTcGVjdWxhdGVOdW1iZXIoKTsKICAgICB9CiAgICAgCi0g
ICAgc3RhdGljIGJvb2wgc2hvdWxkU3BlY3VsYXRlTnVtYmVyRXhwZWN0aW5nRGVmaW5lZChOb2Rl
JiBvcDEsIE5vZGUmIG9wMikKKyAgICBzdGF0aWMgYm9vbCBzaG91bGRTcGVjdWxhdGVOdW1iZXJF
eHBlY3RpbmdEZWZpbmVkKE5vZGUqIG9wMSwgTm9kZSogb3AyKQogICAgIHsKLSAgICAgICAgcmV0
dXJuIG9wMS5zaG91bGRTcGVjdWxhdGVOdW1iZXJFeHBlY3RpbmdEZWZpbmVkKCkgJiYgb3AyLnNo
b3VsZFNwZWN1bGF0ZU51bWJlckV4cGVjdGluZ0RlZmluZWQoKTsKKyAgICAgICAgcmV0dXJuIG9w
MS0+c2hvdWxkU3BlY3VsYXRlTnVtYmVyRXhwZWN0aW5nRGVmaW5lZCgpICYmIG9wMi0+c2hvdWxk
U3BlY3VsYXRlTnVtYmVyRXhwZWN0aW5nRGVmaW5lZCgpOwogICAgIH0KICAgICAKLSAgICBzdGF0
aWMgYm9vbCBzaG91bGRTcGVjdWxhdGVGaW5hbE9iamVjdChOb2RlJiBvcDEsIE5vZGUmIG9wMikK
KyAgICBzdGF0aWMgYm9vbCBzaG91bGRTcGVjdWxhdGVGaW5hbE9iamVjdChOb2RlKiBvcDEsIE5v
ZGUqIG9wMikKICAgICB7Ci0gICAgICAgIHJldHVybiBvcDEuc2hvdWxkU3BlY3VsYXRlRmluYWxP
YmplY3QoKSAmJiBvcDIuc2hvdWxkU3BlY3VsYXRlRmluYWxPYmplY3QoKTsKKyAgICAgICAgcmV0
dXJuIG9wMS0+c2hvdWxkU3BlY3VsYXRlRmluYWxPYmplY3QoKSAmJiBvcDItPnNob3VsZFNwZWN1
bGF0ZUZpbmFsT2JqZWN0KCk7CiAgICAgfQogCi0gICAgc3RhdGljIGJvb2wgc2hvdWxkU3BlY3Vs
YXRlQXJyYXkoTm9kZSYgb3AxLCBOb2RlJiBvcDIpCisgICAgc3RhdGljIGJvb2wgc2hvdWxkU3Bl
Y3VsYXRlQXJyYXkoTm9kZSogb3AxLCBOb2RlKiBvcDIpCiAgICAgewotICAgICAgICByZXR1cm4g
b3AxLnNob3VsZFNwZWN1bGF0ZUFycmF5KCkgJiYgb3AyLnNob3VsZFNwZWN1bGF0ZUFycmF5KCk7
CisgICAgICAgIHJldHVybiBvcDEtPnNob3VsZFNwZWN1bGF0ZUFycmF5KCkgJiYgb3AyLT5zaG91
bGRTcGVjdWxhdGVBcnJheSgpOwogICAgIH0KICAgICAKICAgICBib29sIGNhblNwZWN1bGF0ZUlu
dGVnZXIoKQpAQCAtMTE4NCwxNSArMTE4OCwxNyBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgewogICAg
ICAgICBpZiAoIWNoaWxkMSgpKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBvdXQucHJp
bnRmKCJAJXUiLCBjaGlsZDEoKS5pbmRleCgpKTsKKyAgICAgICAgb3V0LnByaW50ZigiQCV1Iiwg
Y2hpbGQxKCktPmluZGV4KCkpOwogICAgICAgICBpZiAoIWNoaWxkMigpKQogICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICBvdXQucHJpbnRmKCIsIEAldSIsIGNoaWxkMigpLmluZGV4KCkpOwor
ICAgICAgICBvdXQucHJpbnRmKCIsIEAldSIsIGNoaWxkMigpLT5pbmRleCgpKTsKICAgICAgICAg
aWYgKCFjaGlsZDMoKSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgb3V0LnByaW50Zigi
LCBAJXUiLCBjaGlsZDMoKS5pbmRleCgpKTsKKyAgICAgICAgb3V0LnByaW50ZigiLCBAJXUiLCBj
aGlsZDMoKS0+aW5kZXgoKSk7CiAgICAgfQogICAgIAorICAgIC8vIE5CLiBUaGlzIGNsYXNzIG11
c3QgaGF2ZSBhIHRyaXZpYWwgZGVzdHJ1Y3Rvci4KKyAgICAKICAgICAvLyBVc2VkIHRvIGxvb2sg
dXAgZXhjZXB0aW9uIGhhbmRsaW5nIGluZm9ybWF0aW9uIChjdXJyZW50bHkgaW1wbGVtZW50ZWQg
YXMgYSBieXRlY29kZSBpbmRleCkuCiAgICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2luOwogICAgIC8v
IFJlZmVyZW5jZXMgdG8gdXAgdG8gMyBjaGlsZHJlbiwgb3IgbGlua3MgdG8gYSB2YXJpYWJsZSBs
ZW5ndGggc2V0IG9mIGNoaWxkcmVuLgpAQCAtMTIxNSwxMCArMTIyMSwxNiBAQCBwcml2YXRlOgog
cHVibGljOgogICAgIC8vIEZpZWxkcyB1c2VkIGJ5IHZhcmlvdXMgYW5hbHlzZXMuCiAgICAgQWJz
dHJhY3RWYWx1ZSB2YWx1ZTsKLSAgICBOb2RlSW5kZXggcmVwbGFjZW1lbnQ7CisgICAgTm9kZSog
cmVwbGFjZW1lbnQ7CiB9OwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCiAKK25hbWVzcGFj
ZSBXVEYgeworCit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mLCBOb2RlKik7CisKK30g
Ly8gbmFtZXNwYWNlIFdURgorCiAjZW5kaWYKICNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdOb2RlQWxsb2NhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdOb2RlQWxsb2NhdG9yLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVBbGxvY2F0b3IuaAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSw1MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaWZuZGVmIERGR05vZGVBbGxvY2F0b3JfaAorI2RlZmluZSBERkdOb2RlQWxsb2NhdG9yX2gK
KworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNp
bmNsdWRlICJERkdBbGxvY2F0b3IuaCIKKyNpbmNsdWRlICJERkdOb2RlLmgiCisKK25hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKwordHlwZWRlZiBBbGxvY2F0b3I8Tm9kZSwgNDA5NT4g
Tm9kZUFsbG9jYXRvcjsKKworaW5saW5lIHZvaWQqIG9wZXJhdG9yIG5ldyAoc2l6ZV90IHNpemUs
IE5vZGVBbGxvY2F0b3ImIGFsbG9jYXRvcikKK3sKKyAgICBBU1NFUlQoc2l6ZSA9PSBzaXplb2Yo
Tm9kZSkpOworICAgIHJldHVybiBhbGxvY2F0b3IuYWxsb2NhdGUoKTsKK30KKworfSB9IC8vIG5h
bWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAv
LyBERkdOb2RlQWxsb2NhdG9yX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAJKHJldmlz
aW9uIDE0MDMwNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblBy
b3BhZ2F0aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMSwgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTIsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC04NSw3NSArODUs
NzMgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBib29sIHNldFByZWRpY3Rpb24oU3BlY3VsYXRl
ZFR5cGUgcHJlZGljdGlvbikKICAgICB7Ci0gICAgICAgIEFTU0VSVChtX2dyYXBoW21fY29tcGls
ZUluZGV4XS5oYXNSZXN1bHQoKSk7CisgICAgICAgIEFTU0VSVChtX2N1cnJlbnROb2RlLT5oYXNS
ZXN1bHQoKSk7CiAgICAgICAgIAogICAgICAgICAvLyBzZXRQcmVkaWN0aW9uKCkgaXMgdXNlZCB3
aGVuIHdlIGtub3cgdGhhdCB0aGVyZSBpcyBubyB3YXkgdGhhdCB3ZSBjYW4gY2hhbmdlCiAgICAg
ICAgIC8vIG91ciBtaW5kcyBhYm91dCB3aGF0IHRoZSBwcmVkaWN0aW9uIGlzIGdvaW5nIHRvIGJl
LiBUaGVyZSBpcyBubyBzZW1hbnRpYwogICAgICAgICAvLyBkaWZmZXJlbmNlIGJldHdlZW4gc2V0
UHJlZGljdGlvbigpIGFuZCBtZXJnZVNwZWN1bGF0aW9uKCkgb3RoZXIgdGhhbiB0aGUKICAgICAg
ICAgLy8gaW5jcmVhc2VkIGNoZWNraW5nIHRvIHZhbGlkYXRlIHRoaXMgcHJvcGVydHkuCi0gICAg
ICAgIEFTU0VSVChtX2dyYXBoW21fY29tcGlsZUluZGV4XS5wcmVkaWN0aW9uKCkgPT0gU3BlY05v
bmUgfHwgbV9ncmFwaFttX2NvbXBpbGVJbmRleF0ucHJlZGljdGlvbigpID09IHByZWRpY3Rpb24p
OworICAgICAgICBBU1NFUlQobV9jdXJyZW50Tm9kZS0+cHJlZGljdGlvbigpID09IFNwZWNOb25l
IHx8IG1fY3VycmVudE5vZGUtPnByZWRpY3Rpb24oKSA9PSBwcmVkaWN0aW9uKTsKICAgICAgICAg
Ci0gICAgICAgIHJldHVybiBtX2dyYXBoW21fY29tcGlsZUluZGV4XS5wcmVkaWN0KHByZWRpY3Rp
b24pOworICAgICAgICByZXR1cm4gbV9jdXJyZW50Tm9kZS0+cHJlZGljdChwcmVkaWN0aW9uKTsK
ICAgICB9CiAgICAgCiAgICAgYm9vbCBtZXJnZVByZWRpY3Rpb24oU3BlY3VsYXRlZFR5cGUgcHJl
ZGljdGlvbikKICAgICB7Ci0gICAgICAgIEFTU0VSVChtX2dyYXBoW21fY29tcGlsZUluZGV4XS5o
YXNSZXN1bHQoKSk7CisgICAgICAgIEFTU0VSVChtX2N1cnJlbnROb2RlLT5oYXNSZXN1bHQoKSk7
CiAgICAgICAgIAotICAgICAgICByZXR1cm4gbV9ncmFwaFttX2NvbXBpbGVJbmRleF0ucHJlZGlj
dChwcmVkaWN0aW9uKTsKKyAgICAgICAgcmV0dXJuIG1fY3VycmVudE5vZGUtPnByZWRpY3QocHJl
ZGljdGlvbik7CiAgICAgfQogICAgIAotICAgIGJvb2wgaXNOb3ROZWdaZXJvKE5vZGVJbmRleCBu
b2RlSW5kZXgpCisgICAgYm9vbCBpc05vdE5lZ1plcm8oTm9kZSogbm9kZSkKICAgICB7Ci0gICAg
ICAgIGlmICghbV9ncmFwaC5pc051bWJlckNvbnN0YW50KG5vZGVJbmRleCkpCisgICAgICAgIGlm
ICghbV9ncmFwaC5pc051bWJlckNvbnN0YW50KG5vZGUpKQogICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgICBkb3VibGUgdmFsdWUgPSBtX2dyYXBoLnZhbHVlT2ZOdW1iZXJDb25zdGFu
dChub2RlSW5kZXgpOworICAgICAgICBkb3VibGUgdmFsdWUgPSBtX2dyYXBoLnZhbHVlT2ZOdW1i
ZXJDb25zdGFudChub2RlKTsKICAgICAgICAgcmV0dXJuICF2YWx1ZSAmJiAxLjAgLyB2YWx1ZSA8
IDAuMDsKICAgICB9CiAgICAgCi0gICAgYm9vbCBpc05vdFplcm8oTm9kZUluZGV4IG5vZGVJbmRl
eCkKKyAgICBib29sIGlzTm90WmVybyhOb2RlKiBub2RlKQogICAgIHsKLSAgICAgICAgaWYgKCFt
X2dyYXBoLmlzTnVtYmVyQ29uc3RhbnQobm9kZUluZGV4KSkKKyAgICAgICAgaWYgKCFtX2dyYXBo
LmlzTnVtYmVyQ29uc3RhbnQobm9kZSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgIHJldHVybiAhIW1fZ3JhcGgudmFsdWVPZk51bWJlckNvbnN0YW50KG5vZGVJbmRleCk7Cisg
ICAgICAgIHJldHVybiAhIW1fZ3JhcGgudmFsdWVPZk51bWJlckNvbnN0YW50KG5vZGUpOwogICAg
IH0KICAgICAKLSAgICBib29sIGlzV2l0aGluUG93ZXJPZlR3b0ZvckNvbnN0YW50KE5vZGUmIG5v
ZGUsIGludCBwb3dlcikKKyAgICBib29sIGlzV2l0aGluUG93ZXJPZlR3b0ZvckNvbnN0YW50KE5v
ZGUqIG5vZGUsIGludCBwb3dlcikKICAgICB7Ci0gICAgICAgIEpTVmFsdWUgaW1tZWRpYXRlVmFs
dWUgPSBub2RlLnZhbHVlT2ZKU0NvbnN0YW50KGNvZGVCbG9jaygpKTsKKyAgICAgICAgSlNWYWx1
ZSBpbW1lZGlhdGVWYWx1ZSA9IG5vZGUtPnZhbHVlT2ZKU0NvbnN0YW50KGNvZGVCbG9jaygpKTsK
ICAgICAgICAgaWYgKCFpbW1lZGlhdGVWYWx1ZS5pc0ludDMyKCkpCiAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgICAgIGludDMyX3QgaW50SW1tZWRpYXRlID0gaW1tZWRpYXRlVmFsdWUu
YXNJbnQzMigpOwogICAgICAgICByZXR1cm4gaW50SW1tZWRpYXRlID4gLSgxIDw8IHBvd2VyKSAm
JiBpbnRJbW1lZGlhdGUgPCAoMSA8PCBwb3dlcik7CiAgICAgfQogICAgIAotICAgIGJvb2wgaXNX
aXRoaW5Qb3dlck9mVHdvTm9uUmVjdXJzaXZlKE5vZGVJbmRleCBub2RlSW5kZXgsIGludCBwb3dl
cikKKyAgICBib29sIGlzV2l0aGluUG93ZXJPZlR3b05vblJlY3Vyc2l2ZShOb2RlKiBub2RlLCBp
bnQgcG93ZXIpCiAgICAgewotICAgICAgICBOb2RlJiBub2RlID0gbV9ncmFwaFtub2RlSW5kZXhd
OwotICAgICAgICBpZiAobm9kZS5vcCgpICE9IEpTQ29uc3RhbnQpCisgICAgICAgIGlmIChub2Rl
LT5vcCgpICE9IEpTQ29uc3RhbnQpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAg
IHJldHVybiBpc1dpdGhpblBvd2VyT2ZUd29Gb3JDb25zdGFudChub2RlLCBwb3dlcik7CiAgICAg
fQogICAgIAotICAgIGJvb2wgaXNXaXRoaW5Qb3dlck9mVHdvKE5vZGVJbmRleCBub2RlSW5kZXgs
IGludCBwb3dlcikKKyAgICBib29sIGlzV2l0aGluUG93ZXJPZlR3byhOb2RlKiBub2RlLCBpbnQg
cG93ZXIpCiAgICAgewotICAgICAgICBOb2RlJiBub2RlID0gbV9ncmFwaFtub2RlSW5kZXhdOwot
ICAgICAgICBzd2l0Y2ggKG5vZGUub3AoKSkgeworICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkp
IHsKICAgICAgICAgY2FzZSBKU0NvbnN0YW50OiB7CiAgICAgICAgICAgICByZXR1cm4gaXNXaXRo
aW5Qb3dlck9mVHdvRm9yQ29uc3RhbnQobm9kZSwgcG93ZXIpOwogICAgICAgICB9CiAgICAgICAg
ICAgICAKICAgICAgICAgY2FzZSBCaXRBbmQ6IHsKLSAgICAgICAgICAgIHJldHVybiBpc1dpdGhp
blBvd2VyT2ZUd29Ob25SZWN1cnNpdmUobm9kZS5jaGlsZDEoKS5pbmRleCgpLCBwb3dlcikKLSAg
ICAgICAgICAgICAgICB8fCBpc1dpdGhpblBvd2VyT2ZUd29Ob25SZWN1cnNpdmUobm9kZS5jaGls
ZDIoKS5pbmRleCgpLCBwb3dlcik7CisgICAgICAgICAgICByZXR1cm4gaXNXaXRoaW5Qb3dlck9m
VHdvTm9uUmVjdXJzaXZlKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgcG93ZXIpCisgICAgICAgICAg
ICAgICAgfHwgaXNXaXRoaW5Qb3dlck9mVHdvTm9uUmVjdXJzaXZlKG5vZGUtPmNoaWxkMigpLm5v
ZGUoKSwgcG93ZXIpOwogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBCaXRS
U2hpZnQ6CiAgICAgICAgIGNhc2UgQml0VVJTaGlmdDogewotICAgICAgICAgICAgTm9kZSYgc2hp
ZnRBbW91bnQgPSBtX2dyYXBoW25vZGUuY2hpbGQyKCldOwotICAgICAgICAgICAgaWYgKHNoaWZ0
QW1vdW50Lm9wKCkgIT0gSlNDb25zdGFudCkKKyAgICAgICAgICAgIE5vZGUqIHNoaWZ0QW1vdW50
ID0gbm9kZS0+Y2hpbGQyKCkubm9kZSgpOworICAgICAgICAgICAgaWYgKHNoaWZ0QW1vdW50LT5v
cCgpICE9IEpTQ29uc3RhbnQpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
ICAgICAgSlNWYWx1ZSBpbW1lZGlhdGVWYWx1ZSA9IHNoaWZ0QW1vdW50LnZhbHVlT2ZKU0NvbnN0
YW50KGNvZGVCbG9jaygpKTsKKyAgICAgICAgICAgIEpTVmFsdWUgaW1tZWRpYXRlVmFsdWUgPSBz
aGlmdEFtb3VudC0+dmFsdWVPZkpTQ29uc3RhbnQoY29kZUJsb2NrKCkpOwogICAgICAgICAgICAg
aWYgKCFpbW1lZGlhdGVWYWx1ZS5pc0ludDMyKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgICAgICAgICAgcmV0dXJuIGltbWVkaWF0ZVZhbHVlID4gMzIgLSBwb3dlcjsKQEAg
LTE3OCwxNiArMTc2LDE2IEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiBzcGVjdWxhdGVkRG91
YmxlVHlwZUZvclByZWRpY3Rpb24obWVyZ2VTcGVjdWxhdGlvbnMobGVmdCwgcmlnaHQpKTsKICAg
ICB9CiAKLSAgICB2b2lkIHByb3BhZ2F0ZShOb2RlJiBub2RlKQorICAgIHZvaWQgcHJvcGFnYXRl
KE5vZGUqIG5vZGUpCiAgICAgewotICAgICAgICBpZiAoIW5vZGUuc2hvdWxkR2VuZXJhdGUoKSkK
KyAgICAgICAgaWYgKCFub2RlLT5zaG91bGRHZW5lcmF0ZSgpKQogICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICAKLSAgICAgICAgTm9kZVR5cGUgb3AgPSBub2RlLm9wKCk7Ci0gICAgICAgIE5v
ZGVGbGFncyBmbGFncyA9IG5vZGUuZmxhZ3MoKSAmIE5vZGVCYWNrUHJvcE1hc2s7CisgICAgICAg
IE5vZGVUeXBlIG9wID0gbm9kZS0+b3AoKTsKKyAgICAgICAgTm9kZUZsYWdzIGZsYWdzID0gbm9k
ZS0+ZmxhZ3MoKSAmIE5vZGVCYWNrUHJvcE1hc2s7CiAKICNpZiBERkdfRU5BQkxFKERFQlVHX1BS
T1BBR0FUSU9OX1ZFUkJPU0UpCi0gICAgICAgIGRhdGFMb2dGKCIgICAlcyBAJXU6ICVzICIsIEdy
YXBoOjpvcE5hbWUob3ApLCBtX2NvbXBpbGVJbmRleCwgbm9kZUZsYWdzQXNTdHJpbmcoZmxhZ3Mp
KTsKKyAgICAgICAgZGF0YUxvZygiICAgIiwgR3JhcGg6Om9wTmFtZShvcCksICIgIiwgbV9jdXJy
ZW50Tm9kZSwgIjogIiwgbm9kZUZsYWdzQXNTdHJpbmcoZmxhZ3MpLCAiICIpOwogI2VuZGlmCiAg
ICAgICAgIAogICAgICAgICBib29sIGNoYW5nZWQgPSBmYWxzZTsKQEAgLTE5NSwxMiArMTkzLDEy
IEBAIHByaXZhdGU6CiAgICAgICAgIHN3aXRjaCAob3ApIHsKICAgICAgICAgY2FzZSBKU0NvbnN0
YW50OgogICAgICAgICBjYXNlIFdlYWtKU0NvbnN0YW50OiB7Ci0gICAgICAgICAgICBjaGFuZ2Vk
IHw9IHNldFByZWRpY3Rpb24oc3BlY3VsYXRpb25Gcm9tVmFsdWUobV9ncmFwaC52YWx1ZU9mSlND
b25zdGFudChtX2NvbXBpbGVJbmRleCkpKTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gc2V0UHJl
ZGljdGlvbihzcGVjdWxhdGlvbkZyb21WYWx1ZShtX2dyYXBoLnZhbHVlT2ZKU0NvbnN0YW50KG5v
ZGUpKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAg
ICAgIGNhc2UgR2V0TG9jYWw6IHsKLSAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFy
aWFibGVBY2Nlc3NEYXRhID0gbm9kZS52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKKyAgICAgICAgICAg
IFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhID0gbm9kZS0+dmFyaWFibGVB
Y2Nlc3NEYXRhKCk7CiAgICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uID0gdmFy
aWFibGVBY2Nlc3NEYXRhLT5wcmVkaWN0aW9uKCk7CiAgICAgICAgICAgICBpZiAocHJlZGljdGlv
bikKICAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbihwcmVkaWN0aW9u
KTsKQEAgLTIxMCwyMSArMjA4LDIxIEBAIHByaXZhdGU6CiAgICAgICAgIH0KICAgICAgICAgICAg
IAogICAgICAgICBjYXNlIFNldExvY2FsOiB7Ci0gICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0Rh
dGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9IG5vZGUudmFyaWFibGVBY2Nlc3NEYXRhKCk7Ci0gICAg
ICAgICAgICBjaGFuZ2VkIHw9IHZhcmlhYmxlQWNjZXNzRGF0YS0+cHJlZGljdChtX2dyYXBoW25v
ZGUuY2hpbGQxKCldLnByZWRpY3Rpb24oKSk7CisgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0Rh
dGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOworICAg
ICAgICAgICAgY2hhbmdlZCB8PSB2YXJpYWJsZUFjY2Vzc0RhdGEtPnByZWRpY3Qobm9kZS0+Y2hp
bGQxKCktPnByZWRpY3Rpb24oKSk7CiAKICAgICAgICAgICAgIC8vIEFzc3VtZSBjb25zZXJ2YXRp
dmVseSB0aGF0IGEgU2V0TG9jYWwgaW1wbGllcyB0aGF0IHRoZSB2YWx1ZSBtYXkgZmxvdyB0aHJv
dWdoIGEgbG9vcCwKICAgICAgICAgICAgIC8vIGFuZCBzbyB3ZSB3b3VsZCBoYXZlIG92ZXJmbG93
IGxlYWRpbmcgdG8gdGhlIHByb2dyYW0gIm9ic2VydmluZyIgbnVtYmVycyBldmVuIGlmIGFsbAog
ICAgICAgICAgICAgLy8gdXNlcnMgb2YgdGhlIHZhbHVlIGFyZSBkb2luZyB0b0ludDMyLiBJdCBt
aWdodCBiZSB3b3J0aHdoaWxlIHRvIHJldmlzaXQgdGhpcyBhdCBzb21lCiAgICAgICAgICAgICAv
LyBwb2ludCBhbmQgYWN0dWFsbHkgY2hlY2sgaWYgdGhlIGRhdGEgZmxvdyBpbnZvbHZlcyBsb29w
cywgYnV0IHJpZ2h0IG5vdyBJIGRvbid0IHRoaW5rCiAgICAgICAgICAgICAvLyB3ZSBoYXZlIGV2
aWRlbmNlIHRoYXQgdGhpcyB3b3VsZCBiZSBiZW5lZmljaWFsIGZvciBiZW5jaG1hcmtzLgotICAg
ICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLm1lcmdlRmxhZ3ModmFy
aWFibGVBY2Nlc3NEYXRhLT5mbGFncygpIHwgTm9kZVVzZWRBc051bWJlcik7CisgICAgICAgICAg
ICBjaGFuZ2VkIHw9IG5vZGUtPmNoaWxkMSgpLT5tZXJnZUZsYWdzKHZhcmlhYmxlQWNjZXNzRGF0
YS0+ZmxhZ3MoKSB8IE5vZGVVc2VkQXNOdW1iZXIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBjYXNlIEZsdXNoOiB7CiAgICAgICAgICAgICAv
LyBNYWtlIHN1cmUgdGhhdCB0aGUgYW5hbHlzaXMga25vd3MgdGhhdCBmbHVzaGVkIGxvY2FscyBl
c2NhcGUuCi0gICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0
YSA9IG5vZGUudmFyaWFibGVBY2Nlc3NEYXRhKCk7CisgICAgICAgICAgICBWYXJpYWJsZUFjY2Vz
c0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOwog
ICAgICAgICAgICAgY2hhbmdlZCB8PSB2YXJpYWJsZUFjY2Vzc0RhdGEtPm1lcmdlRmxhZ3MoTm9k
ZVVzZWRBc1ZhbHVlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkBAIC0yMzgsOCAr
MjM2LDggQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGNoYW5nZWQgfD0gc2V0UHJlZGljdGlvbihT
cGVjSW50MzIpOwogICAgICAgICAgICAgZmxhZ3MgfD0gTm9kZVVzZWRBc0ludCB8IE5vZGVVc2Vk
QXNJbnRMb2NhbGx5OwogICAgICAgICAgICAgZmxhZ3MgJj0gfihOb2RlVXNlZEFzTnVtYmVyIHwg
Tm9kZU5lZWRzTmVnWmVybyB8IE5vZGVVc2VkQXNPdGhlcik7Ci0gICAgICAgICAgICBjaGFuZ2Vk
IHw9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ubWVyZ2VGbGFncyhmbGFncyk7Ci0gICAgICAgICAg
ICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbm9kZS5jaGlsZDIoKV0ubWVyZ2VGbGFncyhmbGFncyk7Cisg
ICAgICAgICAgICBjaGFuZ2VkIHw9IG5vZGUtPmNoaWxkMSgpLT5tZXJnZUZsYWdzKGZsYWdzKTsK
KyAgICAgICAgICAgIGNoYW5nZWQgfD0gbm9kZS0+Y2hpbGQyKCktPm1lcmdlRmxhZ3MoZmxhZ3Mp
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIApAQCAtMjQ3LDUw
ICsyNDUsNTAgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGNoYW5nZWQgfD0gc2V0UHJlZGljdGlv
bihTcGVjSW50MzIpOwogICAgICAgICAgICAgZmxhZ3MgfD0gTm9kZVVzZWRBc0ludCB8IE5vZGVV
c2VkQXNJbnRMb2NhbGx5OwogICAgICAgICAgICAgZmxhZ3MgJj0gfihOb2RlVXNlZEFzTnVtYmVy
IHwgTm9kZU5lZWRzTmVnWmVybyB8IE5vZGVVc2VkQXNPdGhlcik7Ci0gICAgICAgICAgICBjaGFu
Z2VkIHw9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ubWVyZ2VGbGFncyhmbGFncyk7CisgICAgICAg
ICAgICBjaGFuZ2VkIHw9IG5vZGUtPmNoaWxkMSgpLT5tZXJnZUZsYWdzKGZsYWdzKTsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBBcnJh
eVBvcDogewotICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVByZWRpY3Rpb24obm9kZS5nZXRI
ZWFwUHJlZGljdGlvbigpKTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9u
KG5vZGUtPmdldEhlYXBQcmVkaWN0aW9uKCkpOwogICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJn
ZURlZmF1bHRGbGFncyhub2RlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKICAg
ICAgICAgY2FzZSBBcnJheVB1c2g6IHsKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVk
aWN0aW9uKG5vZGUuZ2V0SGVhcFByZWRpY3Rpb24oKSk7Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9
IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ubWVyZ2VGbGFncyhOb2RlVXNlZEFzVmFsdWUpOwotICAg
ICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQyKCldLm1lcmdlRmxhZ3MoTm9k
ZVVzZWRBc1ZhbHVlKTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKG5v
ZGUtPmdldEhlYXBQcmVkaWN0aW9uKCkpOworICAgICAgICAgICAgY2hhbmdlZCB8PSBub2RlLT5j
aGlsZDEoKS0+bWVyZ2VGbGFncyhOb2RlVXNlZEFzVmFsdWUpOworICAgICAgICAgICAgY2hhbmdl
ZCB8PSBub2RlLT5jaGlsZDIoKS0+bWVyZ2VGbGFncyhOb2RlVXNlZEFzVmFsdWUpOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIFJlZ0V4cEV4ZWM6CiAgICAg
ICAgIGNhc2UgUmVnRXhwVGVzdDogewotICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVByZWRp
Y3Rpb24obm9kZS5nZXRIZWFwUHJlZGljdGlvbigpKTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0g
bWVyZ2VQcmVkaWN0aW9uKG5vZGUtPmdldEhlYXBQcmVkaWN0aW9uKCkpOwogICAgICAgICAgICAg
Y2hhbmdlZCB8PSBtZXJnZURlZmF1bHRGbGFncyhub2RlKTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICB9CiAKICAgICAgICAgY2FzZSBTdHJpbmdDaGFyQ29kZUF0OiB7CiAgICAgICAgICAg
ICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbihTcGVjSW50MzIpOwotICAgICAgICAgICAgY2hh
bmdlZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLm1lcmdlRmxhZ3MoTm9kZVVzZWRBc1ZhbHVl
KTsKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaFtub2RlLmNoaWxkMigpXS5tZXJnZUZs
YWdzKE5vZGVVc2VkQXNOdW1iZXIgfCBOb2RlVXNlZEFzT3RoZXIgfCBOb2RlVXNlZEFzSW50IHwg
Tm9kZVVzZWRBc0ludExvY2FsbHkpOworICAgICAgICAgICAgY2hhbmdlZCB8PSBub2RlLT5jaGls
ZDEoKS0+bWVyZ2VGbGFncyhOb2RlVXNlZEFzVmFsdWUpOworICAgICAgICAgICAgY2hhbmdlZCB8
PSBub2RlLT5jaGlsZDIoKS0+bWVyZ2VGbGFncyhOb2RlVXNlZEFzTnVtYmVyIHwgTm9kZVVzZWRB
c090aGVyIHwgTm9kZVVzZWRBc0ludCB8IE5vZGVVc2VkQXNJbnRMb2NhbGx5KTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBVSW50MzJUb051bWJlcjogewot
ICAgICAgICAgICAgaWYgKG5vZGVDYW5TcGVjdWxhdGVJbnRlZ2VyKG5vZGUuYXJpdGhOb2RlRmxh
Z3MoKSkpCisgICAgICAgICAgICBpZiAobm9kZUNhblNwZWN1bGF0ZUludGVnZXIobm9kZS0+YXJp
dGhOb2RlRmxhZ3MoKSkpCiAgICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVByZWRpY3Rp
b24oU3BlY0ludDMyKTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBjaGFuZ2Vk
IHw9IG1lcmdlUHJlZGljdGlvbihTcGVjTnVtYmVyKTsKICAgICAgICAgICAgIAotICAgICAgICAg
ICAgY2hhbmdlZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLm1lcmdlRmxhZ3MoZmxhZ3MpOwor
ICAgICAgICAgICAgY2hhbmdlZCB8PSBub2RlLT5jaGlsZDEoKS0+bWVyZ2VGbGFncyhmbGFncyk7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCiAgICAgICAgIGNhc2UgVmFsdWVBZGQ6
IHsKLSAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIGxlZnQgPSBtX2dyYXBoW25vZGUuY2hpbGQx
KCldLnByZWRpY3Rpb24oKTsKLSAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHJpZ2h0ID0gbV9n
cmFwaFtub2RlLmNoaWxkMigpXS5wcmVkaWN0aW9uKCk7CisgICAgICAgICAgICBTcGVjdWxhdGVk
VHlwZSBsZWZ0ID0gbm9kZS0+Y2hpbGQxKCktPnByZWRpY3Rpb24oKTsKKyAgICAgICAgICAgIFNw
ZWN1bGF0ZWRUeXBlIHJpZ2h0ID0gbm9kZS0+Y2hpbGQyKCktPnByZWRpY3Rpb24oKTsKICAgICAg
ICAgICAgIAogICAgICAgICAgICAgQWRkU3BlY3VsYXRpb25Nb2RlIG1vZGUgPSBEb250U3BlY3Vs
YXRlSW50ZWdlcjsKICAgICAgICAgICAgIApAQCAtMzA3LDIyICszMDUsMjIgQEAgcHJpdmF0ZToK
ICAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVByZWRpY3Rpb24oU3BlY1N0cmlu
ZyB8IFNwZWNJbnQzMiB8IFNwZWNEb3VibGUpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAg
Ci0gICAgICAgICAgICBpZiAoaXNOb3ROZWdaZXJvKG5vZGUuY2hpbGQxKCkuaW5kZXgoKSkgfHwg
aXNOb3ROZWdaZXJvKG5vZGUuY2hpbGQyKCkuaW5kZXgoKSkpCisgICAgICAgICAgICBpZiAoaXNO
b3ROZWdaZXJvKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSkgfHwgaXNOb3ROZWdaZXJvKG5vZGUtPmNo
aWxkMigpLm5vZGUoKSkpCiAgICAgICAgICAgICAgICAgZmxhZ3MgJj0gfk5vZGVOZWVkc05lZ1pl
cm87Ci0gICAgICAgICAgICBpZiAobV9ncmFwaFtub2RlLmNoaWxkMSgpXS5oYXNOdW1iZXJSZXN1
bHQoKSB8fCBtX2dyYXBoW25vZGUuY2hpbGQyKCldLmhhc051bWJlclJlc3VsdCgpKQorICAgICAg
ICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5oYXNOdW1iZXJSZXN1bHQoKSB8fCBub2RlLT5jaGls
ZDIoKS0+aGFzTnVtYmVyUmVzdWx0KCkpCiAgICAgICAgICAgICAgICAgZmxhZ3MgJj0gfk5vZGVV
c2VkQXNPdGhlcjsKICAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKG1vZGUgIT0gU3BlY3Vs
YXRlSW50ZWdlcikKICAgICAgICAgICAgICAgICBmbGFncyB8PSBOb2RlVXNlZEFzTnVtYmVyOwog
ICAgICAgICAgICAgCi0gICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbm9kZS5jaGlsZDEo
KV0ubWVyZ2VGbGFncyhmbGFncyk7Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbm9k
ZS5jaGlsZDIoKV0ubWVyZ2VGbGFncyhmbGFncyk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG5v
ZGUtPmNoaWxkMSgpLT5tZXJnZUZsYWdzKGZsYWdzKTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0g
bm9kZS0+Y2hpbGQyKCktPm1lcmdlRmxhZ3MoZmxhZ3MpOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBjYXNlIEFyaXRoQWRkOiB7Ci0gICAgICAg
ICAgICBTcGVjdWxhdGVkVHlwZSBsZWZ0ID0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5wcmVkaWN0
aW9uKCk7Ci0gICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSByaWdodCA9IG1fZ3JhcGhbbm9kZS5j
aGlsZDIoKV0ucHJlZGljdGlvbigpOworICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgbGVmdCA9
IG5vZGUtPmNoaWxkMSgpLT5wcmVkaWN0aW9uKCk7CisgICAgICAgICAgICBTcGVjdWxhdGVkVHlw
ZSByaWdodCA9IG5vZGUtPmNoaWxkMigpLT5wcmVkaWN0aW9uKCk7CiAgICAgICAgICAgICAKICAg
ICAgICAgICAgIEFkZFNwZWN1bGF0aW9uTW9kZSBtb2RlID0gRG9udFNwZWN1bGF0ZUludGVnZXI7
CiAgICAgICAgICAgICAKQEAgLTMzMywyMSArMzMxLDIxIEBAIHByaXZhdGU6CiAgICAgICAgICAg
ICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKHNwZWN1bGF0ZWREb3VibGVUeXBl
Rm9yUHJlZGljdGlvbnMobGVmdCwgcmlnaHQpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IAotICAgICAgICAgICAgaWYgKGlzTm90TmVnWmVybyhub2RlLmNoaWxkMSgpLmluZGV4KCkpIHx8
IGlzTm90TmVnWmVybyhub2RlLmNoaWxkMigpLmluZGV4KCkpKQorICAgICAgICAgICAgaWYgKGlz
Tm90TmVnWmVybyhub2RlLT5jaGlsZDEoKS5ub2RlKCkpIHx8IGlzTm90TmVnWmVybyhub2RlLT5j
aGlsZDIoKS5ub2RlKCkpKQogICAgICAgICAgICAgICAgIGZsYWdzICY9IH5Ob2RlTmVlZHNOZWda
ZXJvOwogICAgICAgICAgICAgZmxhZ3MgJj0gfk5vZGVVc2VkQXNPdGhlcjsKICAgICAgICAgICAg
IAogICAgICAgICAgICAgaWYgKG1vZGUgIT0gU3BlY3VsYXRlSW50ZWdlcikKICAgICAgICAgICAg
ICAgICBmbGFncyB8PSBOb2RlVXNlZEFzTnVtYmVyOwogICAgICAgICAgICAgCi0gICAgICAgICAg
ICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ubWVyZ2VGbGFncyhmbGFncyk7Ci0g
ICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbm9kZS5jaGlsZDIoKV0ubWVyZ2VGbGFncyhm
bGFncyk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG5vZGUtPmNoaWxkMSgpLT5tZXJnZUZsYWdz
KGZsYWdzKTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbm9kZS0+Y2hpbGQyKCktPm1lcmdlRmxh
Z3MoZmxhZ3MpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIAog
ICAgICAgICBjYXNlIEFyaXRoU3ViOiB7Ci0gICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSBsZWZ0
ID0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5wcmVkaWN0aW9uKCk7Ci0gICAgICAgICAgICBTcGVj
dWxhdGVkVHlwZSByaWdodCA9IG1fZ3JhcGhbbm9kZS5jaGlsZDIoKV0ucHJlZGljdGlvbigpOwor
ICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgbGVmdCA9IG5vZGUtPmNoaWxkMSgpLT5wcmVkaWN0
aW9uKCk7CisgICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSByaWdodCA9IG5vZGUtPmNoaWxkMigp
LT5wcmVkaWN0aW9uKCk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIEFkZFNwZWN1bGF0aW9u
TW9kZSBtb2RlID0gRG9udFNwZWN1bGF0ZUludGVnZXI7CiAgICAgICAgICAgICAKQEAgLTM1OCwz
OSArMzU2LDM5IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVy
Z2VQcmVkaWN0aW9uKHNwZWN1bGF0ZWREb3VibGVUeXBlRm9yUHJlZGljdGlvbnMobGVmdCwgcmln
aHQpKTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgaWYgKGlzTm90WmVybyhub2RlLmNo
aWxkMSgpLmluZGV4KCkpIHx8IGlzTm90WmVybyhub2RlLmNoaWxkMigpLmluZGV4KCkpKQorICAg
ICAgICAgICAgaWYgKGlzTm90WmVybyhub2RlLT5jaGlsZDEoKS5ub2RlKCkpIHx8IGlzTm90WmVy
byhub2RlLT5jaGlsZDIoKS5ub2RlKCkpKQogICAgICAgICAgICAgICAgIGZsYWdzICY9IH5Ob2Rl
TmVlZHNOZWdaZXJvOwogICAgICAgICAgICAgZmxhZ3MgJj0gfk5vZGVVc2VkQXNPdGhlcjsKICAg
ICAgICAgICAgIAogICAgICAgICAgICAgaWYgKG1vZGUgIT0gU3BlY3VsYXRlSW50ZWdlcikKICAg
ICAgICAgICAgICAgICBmbGFncyB8PSBOb2RlVXNlZEFzTnVtYmVyOwogICAgICAgICAgICAgCi0g
ICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ubWVyZ2VGbGFncyhm
bGFncyk7Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbm9kZS5jaGlsZDIoKV0ubWVy
Z2VGbGFncyhmbGFncyk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG5vZGUtPmNoaWxkMSgpLT5t
ZXJnZUZsYWdzKGZsYWdzKTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbm9kZS0+Y2hpbGQyKCkt
Pm1lcmdlRmxhZ3MoZmxhZ3MpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAg
ICAgICAgIAogICAgICAgICBjYXNlIEFyaXRoTmVnYXRlOgotICAgICAgICAgICAgaWYgKG1fZ3Jh
cGhbbm9kZS5jaGlsZDEoKV0ucHJlZGljdGlvbigpKSB7CisgICAgICAgICAgICBpZiAobm9kZS0+
Y2hpbGQxKCktPnByZWRpY3Rpb24oKSkgewogICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLm5l
Z2F0ZVNob3VsZFNwZWN1bGF0ZUludGVnZXIobm9kZSkpCiAgICAgICAgICAgICAgICAgICAgIGNo
YW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKFNwZWNJbnQzMik7CiAgICAgICAgICAgICAgICAgZWxz
ZQotICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbihzcGVjdWxh
dGVkRG91YmxlVHlwZUZvclByZWRpY3Rpb24obV9ncmFwaFtub2RlLmNoaWxkMSgpXS5wcmVkaWN0
aW9uKCkpKTsKKyAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVByZWRpY3Rpb24o
c3BlY3VsYXRlZERvdWJsZVR5cGVGb3JQcmVkaWN0aW9uKG5vZGUtPmNoaWxkMSgpLT5wcmVkaWN0
aW9uKCkpKTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgZmxhZ3MgJj0gfk5vZGVVc2Vk
QXNPdGhlcjsKIAotICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQxKCld
Lm1lcmdlRmxhZ3MoZmxhZ3MpOworICAgICAgICAgICAgY2hhbmdlZCB8PSBub2RlLT5jaGlsZDEo
KS0+bWVyZ2VGbGFncyhmbGFncyk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIAog
ICAgICAgICBjYXNlIEFyaXRoTWluOgogICAgICAgICBjYXNlIEFyaXRoTWF4OiB7Ci0gICAgICAg
ICAgICBTcGVjdWxhdGVkVHlwZSBsZWZ0ID0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5wcmVkaWN0
aW9uKCk7Ci0gICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSByaWdodCA9IG1fZ3JhcGhbbm9kZS5j
aGlsZDIoKV0ucHJlZGljdGlvbigpOworICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgbGVmdCA9
IG5vZGUtPmNoaWxkMSgpLT5wcmVkaWN0aW9uKCk7CisgICAgICAgICAgICBTcGVjdWxhdGVkVHlw
ZSByaWdodCA9IG5vZGUtPmNoaWxkMigpLT5wcmVkaWN0aW9uKCk7CiAgICAgICAgICAgICAKICAg
ICAgICAgICAgIGlmIChsZWZ0ICYmIHJpZ2h0KSB7Ci0gICAgICAgICAgICAgICAgaWYgKE5vZGU6
OnNob3VsZFNwZWN1bGF0ZUludGVnZXJGb3JBcml0aG1ldGljKG1fZ3JhcGhbbm9kZS5jaGlsZDEo
KV0sIG1fZ3JhcGhbbm9kZS5jaGlsZDIoKV0pCi0gICAgICAgICAgICAgICAgICAgICYmIG5vZGVD
YW5TcGVjdWxhdGVJbnRlZ2VyKG5vZGUuYXJpdGhOb2RlRmxhZ3MoKSkpCisgICAgICAgICAgICAg
ICAgaWYgKE5vZGU6OnNob3VsZFNwZWN1bGF0ZUludGVnZXJGb3JBcml0aG1ldGljKG5vZGUtPmNo
aWxkMSgpLm5vZGUoKSwgbm9kZS0+Y2hpbGQyKCkubm9kZSgpKQorICAgICAgICAgICAgICAgICAg
ICAmJiBub2RlQ2FuU3BlY3VsYXRlSW50ZWdlcihub2RlLT5hcml0aE5vZGVGbGFncygpKSkKICAg
ICAgICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVByZWRpY3Rpb24oU3BlY0ludDMyKTsK
ICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVy
Z2VQcmVkaWN0aW9uKHNwZWN1bGF0ZWREb3VibGVUeXBlRm9yUHJlZGljdGlvbnMobGVmdCwgcmln
aHQpKTsKQEAgLTM5OSwxNCArMzk3LDE0IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBmbGFncyB8
PSBOb2RlVXNlZEFzTnVtYmVyOwogICAgICAgICAgICAgZmxhZ3MgJj0gfk5vZGVVc2VkQXNPdGhl
cjsKIAotICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLm1lcmdl
RmxhZ3MoZmxhZ3MpOwotICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQy
KCldLm1lcmdlRmxhZ3MoZmxhZ3MpOworICAgICAgICAgICAgY2hhbmdlZCB8PSBub2RlLT5jaGls
ZDEoKS0+bWVyZ2VGbGFncyhmbGFncyk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG5vZGUtPmNo
aWxkMigpLT5tZXJnZUZsYWdzKGZsYWdzKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9
CiAKICAgICAgICAgY2FzZSBBcml0aE11bDogewotICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUg
bGVmdCA9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ucHJlZGljdGlvbigpOwotICAgICAgICAgICAg
U3BlY3VsYXRlZFR5cGUgcmlnaHQgPSBtX2dyYXBoW25vZGUuY2hpbGQyKCldLnByZWRpY3Rpb24o
KTsKKyAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIGxlZnQgPSBub2RlLT5jaGlsZDEoKS0+cHJl
ZGljdGlvbigpOworICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgcmlnaHQgPSBub2RlLT5jaGls
ZDIoKS0+cHJlZGljdGlvbigpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAobGVmdCAm
JiByaWdodCkgewogICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLm11bFNob3VsZFNwZWN1bGF0
ZUludGVnZXIobm9kZSkpCkBAIC00MjIsOCArNDIwLDggQEAgcHJpdmF0ZToKICAgICAgICAgICAg
IC8vIGl0c2VsZiB1bmxlc3Mgd2UgY2FuIHByb3ZlIHRoYXQgdGhlcmUgaXMgbm8gd2F5IGZvciB0
aGUgdmFsdWVzCiAgICAgICAgICAgICAvLyBwcm9kdWNlZCB0byBjYXVzZSBkb3VibGUgcm91bmRp
bmcuCiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGlmICghaXNXaXRoaW5Qb3dlck9mVHdvKG5v
ZGUuY2hpbGQxKCkuaW5kZXgoKSwgMjIpCi0gICAgICAgICAgICAgICAgJiYgIWlzV2l0aGluUG93
ZXJPZlR3byhub2RlLmNoaWxkMigpLmluZGV4KCksIDIyKSkKKyAgICAgICAgICAgIGlmICghaXNX
aXRoaW5Qb3dlck9mVHdvKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgMjIpCisgICAgICAgICAgICAg
ICAgJiYgIWlzV2l0aGluUG93ZXJPZlR3byhub2RlLT5jaGlsZDIoKS5ub2RlKCksIDIyKSkKICAg
ICAgICAgICAgICAgICBmbGFncyB8PSBOb2RlVXNlZEFzTnVtYmVyOwogICAgICAgICAgICAgCiAg
ICAgICAgICAgICBjaGFuZ2VkIHw9IG5vZGUubWVyZ2VGbGFncyhmbGFncyk7CkBAIC00MzEsMTgg
KzQyOSwxOCBAQCBwcml2YXRlOgogICAgICAgICAgICAgZmxhZ3MgfD0gTm9kZVVzZWRBc051bWJl
ciB8IE5vZGVOZWVkc05lZ1plcm87CiAgICAgICAgICAgICBmbGFncyAmPSB+Tm9kZVVzZWRBc090
aGVyOwogCi0gICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ubWVy
Z2VGbGFncyhmbGFncyk7Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbm9kZS5jaGls
ZDIoKV0ubWVyZ2VGbGFncyhmbGFncyk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG5vZGUtPmNo
aWxkMSgpLT5tZXJnZUZsYWdzKGZsYWdzKTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbm9kZS0+
Y2hpbGQyKCktPm1lcmdlRmxhZ3MoZmxhZ3MpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IH0KICAgICAgICAgICAgIAogICAgICAgICBjYXNlIEFyaXRoRGl2OiB7Ci0gICAgICAgICAgICBT
cGVjdWxhdGVkVHlwZSBsZWZ0ID0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5wcmVkaWN0aW9uKCk7
Ci0gICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSByaWdodCA9IG1fZ3JhcGhbbm9kZS5jaGlsZDIo
KV0ucHJlZGljdGlvbigpOworICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgbGVmdCA9IG5vZGUt
PmNoaWxkMSgpLT5wcmVkaWN0aW9uKCk7CisgICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSByaWdo
dCA9IG5vZGUtPmNoaWxkMigpLT5wcmVkaWN0aW9uKCk7CiAgICAgICAgICAgICAKICAgICAgICAg
ICAgIGlmIChsZWZ0ICYmIHJpZ2h0KSB7Ci0gICAgICAgICAgICAgICAgaWYgKE5vZGU6OnNob3Vs
ZFNwZWN1bGF0ZUludGVnZXJGb3JBcml0aG1ldGljKG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0sIG1f
Z3JhcGhbbm9kZS5jaGlsZDIoKV0pCi0gICAgICAgICAgICAgICAgICAgICYmIG5vZGVDYW5TcGVj
dWxhdGVJbnRlZ2VyKG5vZGUuYXJpdGhOb2RlRmxhZ3MoKSkpCisgICAgICAgICAgICAgICAgaWYg
KE5vZGU6OnNob3VsZFNwZWN1bGF0ZUludGVnZXJGb3JBcml0aG1ldGljKG5vZGUtPmNoaWxkMSgp
Lm5vZGUoKSwgbm9kZS0+Y2hpbGQyKCkubm9kZSgpKQorICAgICAgICAgICAgICAgICAgICAmJiBu
b2RlQ2FuU3BlY3VsYXRlSW50ZWdlcihub2RlLT5hcml0aE5vZGVGbGFncygpKSkKICAgICAgICAg
ICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVByZWRpY3Rpb24oU3BlY0ludDMyKTsKICAgICAg
ICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVk
aWN0aW9uKFNwZWNEb3VibGUpOwpAQCAtNDU2LDE4ICs0NTQsMTggQEAgcHJpdmF0ZToKICAgICAg
ICAgICAgIGZsYWdzIHw9IE5vZGVVc2VkQXNOdW1iZXIgfCBOb2RlTmVlZHNOZWdaZXJvOwogICAg
ICAgICAgICAgZmxhZ3MgJj0gfk5vZGVVc2VkQXNPdGhlcjsKIAotICAgICAgICAgICAgY2hhbmdl
ZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLm1lcmdlRmxhZ3MoZmxhZ3MpOwotICAgICAgICAg
ICAgY2hhbmdlZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQyKCldLm1lcmdlRmxhZ3MoZmxhZ3MpOwor
ICAgICAgICAgICAgY2hhbmdlZCB8PSBub2RlLT5jaGlsZDEoKS0+bWVyZ2VGbGFncyhmbGFncyk7
CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG5vZGUtPmNoaWxkMigpLT5tZXJnZUZsYWdzKGZsYWdz
KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAg
Y2FzZSBBcml0aE1vZDogewotICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgbGVmdCA9IG1fZ3Jh
cGhbbm9kZS5jaGlsZDEoKV0ucHJlZGljdGlvbigpOwotICAgICAgICAgICAgU3BlY3VsYXRlZFR5
cGUgcmlnaHQgPSBtX2dyYXBoW25vZGUuY2hpbGQyKCldLnByZWRpY3Rpb24oKTsKKyAgICAgICAg
ICAgIFNwZWN1bGF0ZWRUeXBlIGxlZnQgPSBub2RlLT5jaGlsZDEoKS0+cHJlZGljdGlvbigpOwor
ICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgcmlnaHQgPSBub2RlLT5jaGlsZDIoKS0+cHJlZGlj
dGlvbigpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAobGVmdCAmJiByaWdodCkgewot
ICAgICAgICAgICAgICAgIGlmIChOb2RlOjpzaG91bGRTcGVjdWxhdGVJbnRlZ2VyRm9yQXJpdGht
ZXRpYyhtX2dyYXBoW25vZGUuY2hpbGQxKCldLCBtX2dyYXBoW25vZGUuY2hpbGQyKCldKQotICAg
ICAgICAgICAgICAgICAgICAmJiBub2RlQ2FuU3BlY3VsYXRlSW50ZWdlcihub2RlLmFyaXRoTm9k
ZUZsYWdzKCkpKQorICAgICAgICAgICAgICAgIGlmIChOb2RlOjpzaG91bGRTcGVjdWxhdGVJbnRl
Z2VyRm9yQXJpdGhtZXRpYyhub2RlLT5jaGlsZDEoKS5ub2RlKCksIG5vZGUtPmNoaWxkMigpLm5v
ZGUoKSkKKyAgICAgICAgICAgICAgICAgICAgJiYgbm9kZUNhblNwZWN1bGF0ZUludGVnZXIobm9k
ZS0+YXJpdGhOb2RlRmxhZ3MoKSkpCiAgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVy
Z2VQcmVkaWN0aW9uKFNwZWNJbnQzMik7CiAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAg
ICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbihTcGVjRG91YmxlKTsKQEAgLTQ3
Niw4ICs0NzQsOCBAQCBwcml2YXRlOgogICAgICAgICAgICAgZmxhZ3MgfD0gTm9kZVVzZWRBc051
bWJlciB8IE5vZGVOZWVkc05lZ1plcm87CiAgICAgICAgICAgICBmbGFncyAmPSB+Tm9kZVVzZWRB
c090aGVyOwogCi0gICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0u
bWVyZ2VGbGFncyhmbGFncyk7Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbm9kZS5j
aGlsZDIoKV0ubWVyZ2VGbGFncyhmbGFncyk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG5vZGUt
PmNoaWxkMSgpLT5tZXJnZUZsYWdzKGZsYWdzKTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbm9k
ZS0+Y2hpbGQyKCktPm1lcmdlRmxhZ3MoZmxhZ3MpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIH0KICAgICAgICAgICAgIApAQCAtNDg1LDE5ICs0ODMsMTkgQEAgcHJpdmF0ZToKICAgICAg
ICAgICAgIGNoYW5nZWQgfD0gc2V0UHJlZGljdGlvbihTcGVjRG91YmxlKTsKICAgICAgICAgICAg
IGZsYWdzIHw9IE5vZGVVc2VkQXNOdW1iZXIgfCBOb2RlTmVlZHNOZWdaZXJvOwogICAgICAgICAg
ICAgZmxhZ3MgJj0gfk5vZGVVc2VkQXNPdGhlcjsKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9n
cmFwaFtub2RlLmNoaWxkMSgpXS5tZXJnZUZsYWdzKGZsYWdzKTsKKyAgICAgICAgICAgIGNoYW5n
ZWQgfD0gbm9kZS0+Y2hpbGQxKCktPm1lcmdlRmxhZ3MoZmxhZ3MpOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBjYXNlIEFyaXRoQWJzOiB7Ci0g
ICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSBjaGlsZCA9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0u
cHJlZGljdGlvbigpOworICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgY2hpbGQgPSBub2RlLT5j
aGlsZDEoKS0+cHJlZGljdGlvbigpOwogICAgICAgICAgICAgaWYgKGlzSW50MzJTcGVjdWxhdGlv
bkZvckFyaXRobWV0aWMoY2hpbGQpCi0gICAgICAgICAgICAgICAgJiYgbm9kZUNhblNwZWN1bGF0
ZUludGVnZXIobm9kZS5hcml0aE5vZGVGbGFncygpKSkKKyAgICAgICAgICAgICAgICAmJiBub2Rl
Q2FuU3BlY3VsYXRlSW50ZWdlcihub2RlLT5hcml0aE5vZGVGbGFncygpKSkKICAgICAgICAgICAg
ICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbihTcGVjSW50MzIpOwogICAgICAgICAgICAg
ZWxzZQogICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKHNwZWN1bGF0
ZWREb3VibGVUeXBlRm9yUHJlZGljdGlvbihjaGlsZCkpOwogCi0gICAgICAgICAgICBjaGFuZ2Vk
IHw9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ubWVyZ2VGbGFncyhmbGFncyk7CisgICAgICAgICAg
ICBjaGFuZ2VkIHw9IG5vZGUtPmNoaWxkMSgpLT5tZXJnZUZsYWdzKGZsYWdzKTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKQEAgLTUyNywzMSArNTI1LDMxIEBA
IHByaXZhdGU6CiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIEdldEJ5SWQ6IHsKLSAgICAgICAg
ICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKG5vZGUuZ2V0SGVhcFByZWRpY3Rpb24oKSk7
CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbihub2RlLT5nZXRIZWFwUHJl
ZGljdGlvbigpKTsKICAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VEZWZhdWx0RmxhZ3Mobm9k
ZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAg
IGNhc2UgR2V0QnlJZEZsdXNoOgotICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVByZWRpY3Rp
b24obm9kZS5nZXRIZWFwUHJlZGljdGlvbigpKTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVy
Z2VQcmVkaWN0aW9uKG5vZGUtPmdldEhlYXBQcmVkaWN0aW9uKCkpOwogICAgICAgICAgICAgY2hh
bmdlZCB8PSBtZXJnZURlZmF1bHRGbGFncyhub2RlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgCiAgICAgICAgIGNhc2UgR2V0QnlWYWw6IHsKLSAgICAgICAgICAgIGlmIChtX2dy
YXBoW25vZGUuY2hpbGQxKCldLnNob3VsZFNwZWN1bGF0ZUZsb2F0MzJBcnJheSgpCi0gICAgICAg
ICAgICAgICAgfHwgbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5zaG91bGRTcGVjdWxhdGVGbG9hdDY0
QXJyYXkoKSkKKyAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRl
RmxvYXQzMkFycmF5KCkKKyAgICAgICAgICAgICAgICB8fCBub2RlLT5jaGlsZDEoKS0+c2hvdWxk
U3BlY3VsYXRlRmxvYXQ2NEFycmF5KCkpCiAgICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJn
ZVByZWRpY3Rpb24oU3BlY0RvdWJsZSk7CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAg
ICAgY2hhbmdlZCB8PSBtZXJnZVByZWRpY3Rpb24obm9kZS5nZXRIZWFwUHJlZGljdGlvbigpKTsK
IAotICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLm1lcmdlRmxh
Z3MoTm9kZVVzZWRBc1ZhbHVlKTsKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaFtub2Rl
LmNoaWxkMigpXS5tZXJnZUZsYWdzKE5vZGVVc2VkQXNOdW1iZXIgfCBOb2RlVXNlZEFzT3RoZXIg
fCBOb2RlVXNlZEFzSW50IHwgTm9kZVVzZWRBc0ludExvY2FsbHkpOworICAgICAgICAgICAgY2hh
bmdlZCB8PSBub2RlLT5jaGlsZDEoKS0+bWVyZ2VGbGFncyhOb2RlVXNlZEFzVmFsdWUpOworICAg
ICAgICAgICAgY2hhbmdlZCB8PSBub2RlLT5jaGlsZDIoKS0+bWVyZ2VGbGFncyhOb2RlVXNlZEFz
TnVtYmVyIHwgTm9kZVVzZWRBc090aGVyIHwgTm9kZVVzZWRBc0ludCB8IE5vZGVVc2VkQXNJbnRM
b2NhbGx5KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKICAg
ICAgICAgY2FzZSBHZXRNeUFyZ3VtZW50QnlWYWxTYWZlOiB7Ci0gICAgICAgICAgICBjaGFuZ2Vk
IHw9IG1lcmdlUHJlZGljdGlvbihub2RlLmdldEhlYXBQcmVkaWN0aW9uKCkpOwotICAgICAgICAg
ICAgY2hhbmdlZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLm1lcmdlRmxhZ3MoTm9kZVVzZWRB
c051bWJlciB8IE5vZGVVc2VkQXNPdGhlciB8IE5vZGVVc2VkQXNJbnQgfCBOb2RlVXNlZEFzSW50
TG9jYWxseSk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbihub2RlLT5n
ZXRIZWFwUHJlZGljdGlvbigpKTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbm9kZS0+Y2hpbGQx
KCktPm1lcmdlRmxhZ3MoTm9kZVVzZWRBc051bWJlciB8IE5vZGVVc2VkQXNPdGhlciB8IE5vZGVV
c2VkQXNJbnQgfCBOb2RlVXNlZEFzSW50TG9jYWxseSk7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgfQogICAgICAgICAgICAgCkBAIC01NzEsMjUgKzU2OSwyMyBAQCBwcml2YXRlOgogICAg
ICAgICB9CiAKICAgICAgICAgY2FzZSBHZXRCeU9mZnNldDogewotICAgICAgICAgICAgY2hhbmdl
ZCB8PSBtZXJnZVByZWRpY3Rpb24obm9kZS5nZXRIZWFwUHJlZGljdGlvbigpKTsKKyAgICAgICAg
ICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKG5vZGUtPmdldEhlYXBQcmVkaWN0aW9uKCkp
OwogICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZURlZmF1bHRGbGFncyhub2RlKTsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBDYWxs
OgogICAgICAgICBjYXNlIENvbnN0cnVjdDogewotICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJn
ZVByZWRpY3Rpb24obm9kZS5nZXRIZWFwUHJlZGljdGlvbigpKTsKLSAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgY2hpbGRJZHggPSBub2RlLmZpcnN0Q2hpbGQoKTsKLSAgICAgICAgICAgICAgICAg
Y2hpbGRJZHggPCBub2RlLmZpcnN0Q2hpbGQoKSArIG5vZGUubnVtQ2hpbGRyZW4oKTsKLSAgICAg
ICAgICAgICAgICAgKytjaGlsZElkeCkgewotICAgICAgICAgICAgICAgIEVkZ2UgZWRnZSA9IG1f
Z3JhcGgubV92YXJBcmdDaGlsZHJlbltjaGlsZElkeF07Ci0gICAgICAgICAgICAgICAgY2hhbmdl
ZCB8PSBtX2dyYXBoW2VkZ2VdLm1lcmdlRmxhZ3MoTm9kZVVzZWRBc1ZhbHVlKTsKLSAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKG5vZGUtPmdldEhl
YXBQcmVkaWN0aW9uKCkpOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBjaGlsZElkeCA9IG5v
ZGUtPmZpcnN0Q2hpbGQoKTsKKyAgICAgICAgICAgICAgICAgY2hpbGRJZHggPCBub2RlLT5maXJz
dENoaWxkKCkgKyBub2RlLT5udW1DaGlsZHJlbigpOworICAgICAgICAgICAgICAgICArK2NoaWxk
SWR4KQorICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaC5tX3ZhckFyZ0NoaWxkcmVu
W2NoaWxkSWR4XS0+bWVyZ2VGbGFncyhOb2RlVXNlZEFzVmFsdWUpOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBjYXNlIENvbnZlcnRUaGlzOiB7
Ci0gICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uID0gbV9ncmFwaFtub2RlLmNo
aWxkMSgpXS5wcmVkaWN0aW9uKCk7CisgICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0
aW9uID0gbm9kZS0+Y2hpbGQxKCktPnByZWRpY3Rpb24oKTsKICAgICAgICAgICAgIGlmIChwcmVk
aWN0aW9uKSB7CiAgICAgICAgICAgICAgICAgaWYgKHByZWRpY3Rpb24gJiB+U3BlY09iamVjdE1h
c2spIHsKICAgICAgICAgICAgICAgICAgICAgcHJlZGljdGlvbiAmPSBTcGVjT2JqZWN0TWFzazsK
QEAgLTYwMiwxMyArNTk4LDEzIEBAIHByaXZhdGU6CiAgICAgICAgIH0KICAgICAgICAgICAgIAog
ICAgICAgICBjYXNlIEdldEdsb2JhbFZhcjogewotICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJn
ZVByZWRpY3Rpb24obm9kZS5nZXRIZWFwUHJlZGljdGlvbigpKTsKKyAgICAgICAgICAgIGNoYW5n
ZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKG5vZGUtPmdldEhlYXBQcmVkaWN0aW9uKCkpOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBjYXNlIFB1dEds
b2JhbFZhcjoKICAgICAgICAgY2FzZSBQdXRHbG9iYWxWYXJDaGVjazogewotICAgICAgICAgICAg
Y2hhbmdlZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLm1lcmdlRmxhZ3MoTm9kZVVzZWRBc1Zh
bHVlKTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbm9kZS0+Y2hpbGQxKCktPm1lcmdlRmxhZ3Mo
Tm9kZVVzZWRBc1ZhbHVlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAg
ICAgICAKQEAgLTYxNyw3ICs2MTMsNyBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIFJlc29sdmVC
YXNlOgogICAgICAgICBjYXNlIFJlc29sdmVCYXNlU3RyaWN0UHV0OgogICAgICAgICBjYXNlIFJl
c29sdmVHbG9iYWw6IHsKLSAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24gPSBu
b2RlLmdldEhlYXBQcmVkaWN0aW9uKCk7CisgICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSBwcmVk
aWN0aW9uID0gbm9kZS0+Z2V0SGVhcFByZWRpY3Rpb24oKTsKICAgICAgICAgICAgIGNoYW5nZWQg
fD0gbWVyZ2VQcmVkaWN0aW9uKHByZWRpY3Rpb24pOwogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIH0KQEAgLTY0MywxOCArNjM5LDE2IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAKICAgICAg
ICAgY2FzZSBOZXdBcnJheTogewogICAgICAgICAgICAgY2hhbmdlZCB8PSBzZXRQcmVkaWN0aW9u
KFNwZWNBcnJheSk7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGNoaWxkSWR4ID0gbm9kZS5m
aXJzdENoaWxkKCk7Ci0gICAgICAgICAgICAgICAgIGNoaWxkSWR4IDwgbm9kZS5maXJzdENoaWxk
KCkgKyBub2RlLm51bUNoaWxkcmVuKCk7Ci0gICAgICAgICAgICAgICAgICsrY2hpbGRJZHgpIHsK
LSAgICAgICAgICAgICAgICBFZGdlIGVkZ2UgPSBtX2dyYXBoLm1fdmFyQXJnQ2hpbGRyZW5bY2hp
bGRJZHhdOwotICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaFtlZGdlXS5tZXJnZUZs
YWdzKE5vZGVVc2VkQXNWYWx1ZSk7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIGNoaWxkSWR4ID0gbm9kZS0+Zmlyc3RDaGlsZCgpOworICAgICAgICAgICAgICAgICBj
aGlsZElkeCA8IG5vZGUtPmZpcnN0Q2hpbGQoKSArIG5vZGUtPm51bUNoaWxkcmVuKCk7CisgICAg
ICAgICAgICAgICAgICsrY2hpbGRJZHgpCisgICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dy
YXBoLm1fdmFyQXJnQ2hpbGRyZW5bY2hpbGRJZHhdLT5tZXJnZUZsYWdzKE5vZGVVc2VkQXNWYWx1
ZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAg
IGNhc2UgTmV3QXJyYXlXaXRoU2l6ZTogewogICAgICAgICAgICAgY2hhbmdlZCB8PSBzZXRQcmVk
aWN0aW9uKFNwZWNBcnJheSk7Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbm9kZS5j
aGlsZDEoKV0ubWVyZ2VGbGFncyhOb2RlVXNlZEFzVmFsdWUgfCBOb2RlVXNlZEFzSW50IHwgTm9k
ZVVzZWRBc0ludExvY2FsbHkpOworICAgICAgICAgICAgY2hhbmdlZCB8PSBub2RlLT5jaGlsZDEo
KS0+bWVyZ2VGbGFncyhOb2RlVXNlZEFzVmFsdWUgfCBOb2RlVXNlZEFzSW50IHwgTm9kZVVzZWRB
c0ludExvY2FsbHkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAg
IApAQCAtNjcwLDIyICs2NjQsMjIgQEAgcHJpdmF0ZToKICAgICAgICAgCiAgICAgICAgIGNhc2Ug
U3RyaW5nQ2hhckF0OiB7CiAgICAgICAgICAgICBjaGFuZ2VkIHw9IHNldFByZWRpY3Rpb24oU3Bl
Y1N0cmluZyk7Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0u
bWVyZ2VGbGFncyhOb2RlVXNlZEFzVmFsdWUpOwotICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dy
YXBoW25vZGUuY2hpbGQyKCldLm1lcmdlRmxhZ3MoTm9kZVVzZWRBc051bWJlciB8IE5vZGVVc2Vk
QXNPdGhlciB8IE5vZGVVc2VkQXNJbnQgfCBOb2RlVXNlZEFzSW50TG9jYWxseSk7CisgICAgICAg
ICAgICBjaGFuZ2VkIHw9IG5vZGUtPmNoaWxkMSgpLT5tZXJnZUZsYWdzKE5vZGVVc2VkQXNWYWx1
ZSk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG5vZGUtPmNoaWxkMigpLT5tZXJnZUZsYWdzKE5v
ZGVVc2VkQXNOdW1iZXIgfCBOb2RlVXNlZEFzT3RoZXIgfCBOb2RlVXNlZEFzSW50IHwgTm9kZVVz
ZWRBc0ludExvY2FsbHkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAg
ICAgIAogICAgICAgICBjYXNlIFN0ckNhdDogewogICAgICAgICAgICAgY2hhbmdlZCB8PSBzZXRQ
cmVkaWN0aW9uKFNwZWNTdHJpbmcpOwotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBjaGlsZElk
eCA9IG5vZGUuZmlyc3RDaGlsZCgpOwotICAgICAgICAgICAgICAgICBjaGlsZElkeCA8IG5vZGUu
Zmlyc3RDaGlsZCgpICsgbm9kZS5udW1DaGlsZHJlbigpOworICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBjaGlsZElkeCA9IG5vZGUtPmZpcnN0Q2hpbGQoKTsKKyAgICAgICAgICAgICAgICAgY2hp
bGRJZHggPCBub2RlLT5maXJzdENoaWxkKCkgKyBub2RlLT5udW1DaGlsZHJlbigpOwogICAgICAg
ICAgICAgICAgICArK2NoaWxkSWR4KQotICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFw
aFttX2dyYXBoLm1fdmFyQXJnQ2hpbGRyZW5bY2hpbGRJZHhdXS5tZXJnZUZsYWdzKE5vZGVVc2Vk
QXNOdW1iZXIgfCBOb2RlVXNlZEFzT3RoZXIpOworICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0g
bV9ncmFwaC5tX3ZhckFyZ0NoaWxkcmVuW2NoaWxkSWR4XS0+bWVyZ2VGbGFncyhOb2RlVXNlZEFz
TnVtYmVyIHwgTm9kZVVzZWRBc090aGVyKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9
CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBUb1ByaW1pdGl2ZTogewotICAgICAgICAgICAg
U3BlY3VsYXRlZFR5cGUgY2hpbGQgPSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLnByZWRpY3Rpb24o
KTsKKyAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIGNoaWxkID0gbm9kZS0+Y2hpbGQxKCktPnBy
ZWRpY3Rpb24oKTsKICAgICAgICAgICAgIGlmIChjaGlsZCkgewogICAgICAgICAgICAgICAgIGlm
IChpc09iamVjdFNwZWN1bGF0aW9uKGNoaWxkKSkgewogICAgICAgICAgICAgICAgICAgICAvLyBJ
J2QgbG92ZSB0byBmb2xkIHRoaXMgY2FzZSBpbnRvIHRoZSBjYXNlIGJlbG93LCBidXQgSSBjYW4n
dCwgYmVjYXVzZQpAQCAtNzAyLDcgKzY5Niw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAg
fSBlbHNlCiAgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKGNo
aWxkKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaFtub2Rl
LmNoaWxkMSgpXS5tZXJnZUZsYWdzKGZsYWdzKTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbm9k
ZS0+Y2hpbGQxKCktPm1lcmdlRmxhZ3MoZmxhZ3MpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIH0KICAgICAgICAgICAgIApAQCAtNzQ1LDQyICs3MzksNDUgQEAgcHJpdmF0ZToKICAgICAg
ICAgfQogICAgICAgICAKICAgICAgICAgY2FzZSBQdXRCeVZhbDoKLSAgICAgICAgICAgIGNoYW5n
ZWQgfD0gbV9ncmFwaFttX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApXS5tZXJnZUZsYWdzKE5v
ZGVVc2VkQXNWYWx1ZSk7Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbV9ncmFwaC52
YXJBcmdDaGlsZChub2RlLCAxKV0ubWVyZ2VGbGFncyhOb2RlVXNlZEFzTnVtYmVyIHwgTm9kZVVz
ZWRBc090aGVyIHwgTm9kZVVzZWRBc0ludCB8IE5vZGVVc2VkQXNJbnRMb2NhbGx5KTsKLSAgICAg
ICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaFttX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpXS5t
ZXJnZUZsYWdzKE5vZGVVc2VkQXNWYWx1ZSk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3Jh
cGgudmFyQXJnQ2hpbGQobm9kZSwgMCktPm1lcmdlRmxhZ3MoTm9kZVVzZWRBc1ZhbHVlKTsKKyAg
ICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKS0+bWVyZ2VG
bGFncyhOb2RlVXNlZEFzTnVtYmVyIHwgTm9kZVVzZWRBc090aGVyIHwgTm9kZVVzZWRBc0ludCB8
IE5vZGVVc2VkQXNJbnRMb2NhbGx5KTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaC52
YXJBcmdDaGlsZChub2RlLCAyKS0+bWVyZ2VGbGFncyhOb2RlVXNlZEFzVmFsdWUpOwogICAgICAg
ICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSBQdXRTY29wZWRWYXI6Ci0gICAgICAgICAgICBj
aGFuZ2VkIHw9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ubWVyZ2VGbGFncyhOb2RlVXNlZEFzVmFs
dWUpOwotICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQzKCldLm1lcmdl
RmxhZ3MoTm9kZVVzZWRBc1ZhbHVlKTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbm9kZS0+Y2hp
bGQxKCktPm1lcmdlRmxhZ3MoTm9kZVVzZWRBc1ZhbHVlKTsKKyAgICAgICAgICAgIGNoYW5nZWQg
fD0gbm9kZS0+Y2hpbGQzKCktPm1lcmdlRmxhZ3MoTm9kZVVzZWRBc1ZhbHVlKTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgUmV0dXJuOgogICAgICAgICBj
YXNlIFRocm93OgotICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQxKCld
Lm1lcmdlRmxhZ3MoTm9kZVVzZWRBc1ZhbHVlKTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbm9k
ZS0+Y2hpbGQxKCktPm1lcmdlRmxhZ3MoTm9kZVVzZWRBc1ZhbHVlKTsKICAgICAgICAgICAgIGJy
ZWFrOwogCiAgICAgICAgIGNhc2UgUHV0QnlJZDoKICAgICAgICAgY2FzZSBQdXRCeUlkRGlyZWN0
OgotICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLm1lcmdlRmxh
Z3MoTm9kZVVzZWRBc1ZhbHVlKTsKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaFtub2Rl
LmNoaWxkMigpXS5tZXJnZUZsYWdzKE5vZGVVc2VkQXNWYWx1ZSk7CisgICAgICAgICAgICBjaGFu
Z2VkIHw9IG5vZGUtPmNoaWxkMSgpLT5tZXJnZUZsYWdzKE5vZGVVc2VkQXNWYWx1ZSk7CisgICAg
ICAgICAgICBjaGFuZ2VkIHw9IG5vZGUtPmNoaWxkMigpLT5tZXJnZUZsYWdzKE5vZGVVc2VkQXNW
YWx1ZSk7CiAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICBjYXNlIFB1dEJ5T2Zmc2V0Ogot
ICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLm1lcmdlRmxhZ3Mo
Tm9kZVVzZWRBc1ZhbHVlKTsKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaFtub2RlLmNo
aWxkMygpXS5tZXJnZUZsYWdzKE5vZGVVc2VkQXNWYWx1ZSk7CisgICAgICAgICAgICBjaGFuZ2Vk
IHw9IG5vZGUtPmNoaWxkMSgpLT5tZXJnZUZsYWdzKE5vZGVVc2VkQXNWYWx1ZSk7CisgICAgICAg
ICAgICBjaGFuZ2VkIHw9IG5vZGUtPmNoaWxkMygpLT5tZXJnZUZsYWdzKE5vZGVVc2VkQXNWYWx1
ZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgICAgICBjYXNlIFBoaToK
KyAgICAgICAgICAgIC8vIFBoaXMgc2hvdWxkIG5vdCBiZSB2aXNpYmxlIGhlcmUgc2luY2Ugd2Un
cmUgaXRlcmF0aW5nIHRoZSBhbGwtYnV0LVBoaSdzCisgICAgICAgICAgICAvLyBwYXJ0IG9mIGJh
c2ljIGJsb2Nrcy4KKyAgICAgICAgICAgIENSQVNIKCk7CiAgICAgICAgICAgICBicmVhazsKIAog
ICAgICAgICBjYXNlIFNldENhbGxlZToKICAgICAgICAgY2FzZSBTZXRNeVNjb3BlOgotICAgICAg
ICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLm1lcmdlRmxhZ3MoTm9kZVVz
ZWRBc1ZhbHVlKTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbm9kZS0+Y2hpbGQxKCktPm1lcmdl
RmxhZ3MoTm9kZVVzZWRBc1ZhbHVlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
CiAgICAgICAgIGNhc2UgR2V0U2NvcGU6Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhb
bm9kZS5jaGlsZDEoKV0ubWVyZ2VGbGFncyhOb2RlVXNlZEFzVmFsdWUpOworICAgICAgICAgICAg
Y2hhbmdlZCB8PSBub2RlLT5jaGlsZDEoKS0+bWVyZ2VGbGFncyhOb2RlVXNlZEFzVmFsdWUpOwog
ICAgICAgICAgICAgY2hhbmdlZCB8PSBzZXRQcmVkaWN0aW9uKFNwZWNDZWxsT3RoZXIpOwogICAg
ICAgICAgICAgYnJlYWs7CiAKQEAgLTgyOCwzMiArODI1LDMyIEBAIHByaXZhdGU6CiAgICAgICAg
IH0KIAogI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKLSAgICAgICAg
ZGF0YUxvZyhTcGVjdWxhdGlvbkR1bXAobV9ncmFwaFttX2NvbXBpbGVJbmRleF0ucHJlZGljdGlv
bigpKSwgIlxuIik7CisgICAgICAgIGRhdGFMb2coU3BlY3VsYXRpb25EdW1wKG5vZGUtPnByZWRp
Y3Rpb24oKSksICJcbiIpOwogI2VuZGlmCiAgICAgICAgIAogICAgICAgICBtX2NoYW5nZWQgfD0g
Y2hhbmdlZDsKICAgICB9CiAgICAgICAgIAotICAgIGJvb2wgbWVyZ2VEZWZhdWx0RmxhZ3MoTm9k
ZSYgbm9kZSkKKyAgICBib29sIG1lcmdlRGVmYXVsdEZsYWdzKE5vZGUqIG5vZGUpCiAgICAgewog
ICAgICAgICBib29sIGNoYW5nZWQgPSBmYWxzZTsKLSAgICAgICAgaWYgKG5vZGUuZmxhZ3MoKSAm
IE5vZGVIYXNWYXJBcmdzKSB7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGNoaWxkSWR4ID0g
bm9kZS5maXJzdENoaWxkKCk7Ci0gICAgICAgICAgICAgICAgIGNoaWxkSWR4IDwgbm9kZS5maXJz
dENoaWxkKCkgKyBub2RlLm51bUNoaWxkcmVuKCk7CisgICAgICAgIGlmIChub2RlLT5mbGFncygp
ICYgTm9kZUhhc1ZhckFyZ3MpIHsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgY2hpbGRJZHgg
PSBub2RlLT5maXJzdENoaWxkKCk7CisgICAgICAgICAgICAgICAgIGNoaWxkSWR4IDwgbm9kZS0+
Zmlyc3RDaGlsZCgpICsgbm9kZS0+bnVtQ2hpbGRyZW4oKTsKICAgICAgICAgICAgICAgICAgY2hp
bGRJZHgrKykgewogICAgICAgICAgICAgICAgIGlmICghIW1fZ3JhcGgubV92YXJBcmdDaGlsZHJl
bltjaGlsZElkeF0pCi0gICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaFttX2dy
YXBoLm1fdmFyQXJnQ2hpbGRyZW5bY2hpbGRJZHhdXS5tZXJnZUZsYWdzKE5vZGVVc2VkQXNWYWx1
ZSk7CisgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaC5tX3ZhckFyZ0NoaWxk
cmVuW2NoaWxkSWR4XS0+bWVyZ2VGbGFncyhOb2RlVXNlZEFzVmFsdWUpOwogICAgICAgICAgICAg
fQogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaWYgKCFub2RlLmNoaWxkMSgpKQorICAg
ICAgICAgICAgaWYgKCFub2RlLT5jaGlsZDEoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gY2hh
bmdlZDsKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5tZXJn
ZUZsYWdzKE5vZGVVc2VkQXNWYWx1ZSk7Ci0gICAgICAgICAgICBpZiAoIW5vZGUuY2hpbGQyKCkp
CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG5vZGUtPmNoaWxkMSgpLT5tZXJnZUZsYWdzKE5vZGVV
c2VkQXNWYWx1ZSk7CisgICAgICAgICAgICBpZiAoIW5vZGUtPmNoaWxkMigpKQogICAgICAgICAg
ICAgICAgIHJldHVybiBjaGFuZ2VkOwotICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW25v
ZGUuY2hpbGQyKCldLm1lcmdlRmxhZ3MoTm9kZVVzZWRBc1ZhbHVlKTsKLSAgICAgICAgICAgIGlm
ICghbm9kZS5jaGlsZDMoKSkKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbm9kZS0+Y2hpbGQyKCkt
Pm1lcmdlRmxhZ3MoTm9kZVVzZWRBc1ZhbHVlKTsKKyAgICAgICAgICAgIGlmICghbm9kZS0+Y2hp
bGQzKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGNoYW5nZWQ7Ci0gICAgICAgICAgICBjaGFu
Z2VkIHw9IG1fZ3JhcGhbbm9kZS5jaGlsZDMoKV0ubWVyZ2VGbGFncyhOb2RlVXNlZEFzVmFsdWUp
OworICAgICAgICAgICAgY2hhbmdlZCB8PSBub2RlLT5jaGlsZDMoKS0+bWVyZ2VGbGFncyhOb2Rl
VXNlZEFzVmFsdWUpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBjaGFuZ2VkOwogICAgIH0K
QEAgLTg2Myw4ICs4NjAsMTYgQEAgcHJpdmF0ZToKICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BB
R0FUSU9OX1ZFUkJPU0UpCiAgICAgICAgIGRhdGFMb2dGKCJQcm9wYWdhdGluZyBwcmVkaWN0aW9u
cyBmb3J3YXJkIFsldV1cbiIsICsrbV9jb3VudCk7CiAjZW5kaWYKLSAgICAgICAgZm9yIChtX2Nv
bXBpbGVJbmRleCA9IDA7IG1fY29tcGlsZUluZGV4IDwgbV9ncmFwaC5zaXplKCk7ICsrbV9jb21w
aWxlSW5kZXgpCi0gICAgICAgICAgICBwcm9wYWdhdGUobV9ncmFwaFttX2NvbXBpbGVJbmRleF0p
OworICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBt
X2dyYXBoLm1fYmxvY2tzLnNpemUoKTsgKytibG9ja0luZGV4KSB7CisgICAgICAgICAgICBCYXNp
Y0Jsb2NrKiBibG9jayA9IG1fZ3JhcGgubV9ibG9ja3NbYmxvY2tJbmRleF0uZ2V0KCk7CisgICAg
ICAgICAgICBpZiAoIWJsb2NrKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAg
ICAgQVNTRVJUKGJsb2NrLT5pc1JlYWNoYWJsZSk7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgYmxvY2stPnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICAgICAgbV9jdXJy
ZW50Tm9kZSA9IGJsb2NrLT5hdChpKTsKKyAgICAgICAgICAgICAgICBwcm9wYWdhdGUobV9jdXJy
ZW50Tm9kZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KICAgICB9CiAgICAgCiAgICAgdm9p
ZCBwcm9wYWdhdGVCYWNrd2FyZCgpCkBAIC04NzIsMTIzICs4NzcsMTM5IEBAIHByaXZhdGU6CiAj
aWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQogICAgICAgICBkYXRhTG9n
RigiUHJvcGFnYXRpbmcgcHJlZGljdGlvbnMgYmFja3dhcmQgWyV1XVxuIiwgKyttX2NvdW50KTsK
ICNlbmRpZgotICAgICAgICBmb3IgKG1fY29tcGlsZUluZGV4ID0gbV9ncmFwaC5zaXplKCk7IG1f
Y29tcGlsZUluZGV4LS0gPiAwOykKLSAgICAgICAgICAgIHByb3BhZ2F0ZShtX2dyYXBoW21fY29t
cGlsZUluZGV4XSk7CisgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gbV9ncmFw
aC5tX2Jsb2Nrcy5zaXplKCk7IGJsb2NrSW5kZXgtLTspIHsKKyAgICAgICAgICAgIEJhc2ljQmxv
Y2sqIGJsb2NrID0gbV9ncmFwaC5tX2Jsb2Nrc1tibG9ja0luZGV4XS5nZXQoKTsKKyAgICAgICAg
ICAgIGlmICghYmxvY2spCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBB
U1NFUlQoYmxvY2stPmlzUmVhY2hhYmxlKTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IGJsb2NrLT5zaXplKCk7IGktLTspIHsKKyAgICAgICAgICAgICAgICBtX2N1cnJlbnROb2RlID0g
YmxvY2stPmF0KGkpOworICAgICAgICAgICAgICAgIHByb3BhZ2F0ZShtX2N1cnJlbnROb2RlKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQogICAgIH0KICAgICAKLSAgICB2b2lkIGRvUm91bmRP
ZkRvdWJsZVZvdGluZygpCisgICAgdm9pZCBkb0RvdWJsZVZvdGluZyhOb2RlKiBub2RlKQogICAg
IHsKLSNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCi0gICAgICAgIGRh
dGFMb2dGKCJWb3Rpbmcgb24gZG91YmxlIHVzZXMgb2YgbG9jYWxzIFsldV1cbiIsIG1fY291bnQp
OwotI2VuZGlmCi0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2dyYXBoLm1fdmFy
aWFibGVBY2Nlc3NEYXRhLnNpemUoKTsgKytpKQotICAgICAgICAgICAgbV9ncmFwaC5tX3Zhcmlh
YmxlQWNjZXNzRGF0YVtpXS5maW5kKCktPmNsZWFyVm90ZXMoKTsKLSAgICAgICAgZm9yIChtX2Nv
bXBpbGVJbmRleCA9IDA7IG1fY29tcGlsZUluZGV4IDwgbV9ncmFwaC5zaXplKCk7ICsrbV9jb21w
aWxlSW5kZXgpIHsKLSAgICAgICAgICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW21fY29tcGlsZUlu
ZGV4XTsKLSAgICAgICAgICAgIHN3aXRjaCAobm9kZS5vcCgpKSB7Ci0gICAgICAgICAgICBjYXNl
IFZhbHVlQWRkOgotICAgICAgICAgICAgY2FzZSBBcml0aEFkZDoKLSAgICAgICAgICAgIGNhc2Ug
QXJpdGhTdWI6IHsKLSAgICAgICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSBsZWZ0ID0gbV9ncmFw
aFtub2RlLmNoaWxkMSgpXS5wcmVkaWN0aW9uKCk7Ci0gICAgICAgICAgICAgICAgU3BlY3VsYXRl
ZFR5cGUgcmlnaHQgPSBtX2dyYXBoW25vZGUuY2hpbGQyKCldLnByZWRpY3Rpb24oKTsKKyAgICAg
ICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CisgICAgICAgIGNhc2UgVmFsdWVBZGQ6CisgICAgICAg
IGNhc2UgQXJpdGhBZGQ6CisgICAgICAgIGNhc2UgQXJpdGhTdWI6IHsKKyAgICAgICAgICAgIFNw
ZWN1bGF0ZWRUeXBlIGxlZnQgPSBub2RlLT5jaGlsZDEoKS0+cHJlZGljdGlvbigpOworICAgICAg
ICAgICAgU3BlY3VsYXRlZFR5cGUgcmlnaHQgPSBub2RlLT5jaGlsZDIoKS0+cHJlZGljdGlvbigp
OwogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIERvdWJsZUJhbGxvdCBiYWxsb3Q7
CisgICAgICAgICAgICBEb3VibGVCYWxsb3QgYmFsbG90OwogICAgICAgICAgICAgICAgIAotICAg
ICAgICAgICAgICAgIGlmIChpc051bWJlclNwZWN1bGF0aW9uRXhwZWN0aW5nRGVmaW5lZChsZWZ0
KSAmJiBpc051bWJlclNwZWN1bGF0aW9uRXhwZWN0aW5nRGVmaW5lZChyaWdodCkKLSAgICAgICAg
ICAgICAgICAgICAgJiYgIW1fZ3JhcGguYWRkU2hvdWxkU3BlY3VsYXRlSW50ZWdlcihub2RlKSkK
LSAgICAgICAgICAgICAgICAgICAgYmFsbG90ID0gVm90ZURvdWJsZTsKLSAgICAgICAgICAgICAg
ICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIGJhbGxvdCA9IFZvdGVWYWx1ZTsKKyAgICAgICAg
ICAgIGlmIChpc051bWJlclNwZWN1bGF0aW9uRXhwZWN0aW5nRGVmaW5lZChsZWZ0KSAmJiBpc051
bWJlclNwZWN1bGF0aW9uRXhwZWN0aW5nRGVmaW5lZChyaWdodCkKKyAgICAgICAgICAgICAgICAm
JiAhbV9ncmFwaC5hZGRTaG91bGRTcGVjdWxhdGVJbnRlZ2VyKG5vZGUpKQorICAgICAgICAgICAg
ICAgIGJhbGxvdCA9IFZvdGVEb3VibGU7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAg
ICAgYmFsbG90ID0gVm90ZVZhbHVlOwogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAg
IG1fZ3JhcGgudm90ZShub2RlLmNoaWxkMSgpLCBiYWxsb3QpOwotICAgICAgICAgICAgICAgIG1f
Z3JhcGgudm90ZShub2RlLmNoaWxkMigpLCBiYWxsb3QpOwotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgfQorICAgICAgICAgICAgbV9ncmFwaC52b3RlTm9kZShub2RlLT5jaGls
ZDEoKSwgYmFsbG90KTsKKyAgICAgICAgICAgIG1fZ3JhcGgudm90ZU5vZGUobm9kZS0+Y2hpbGQy
KCksIGJhbGxvdCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQogICAgICAgICAgICAg
ICAgIAotICAgICAgICAgICAgY2FzZSBBcml0aE11bDogewotICAgICAgICAgICAgICAgIFNwZWN1
bGF0ZWRUeXBlIGxlZnQgPSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLnByZWRpY3Rpb24oKTsKLSAg
ICAgICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSByaWdodCA9IG1fZ3JhcGhbbm9kZS5jaGlsZDIo
KV0ucHJlZGljdGlvbigpOworICAgICAgICBjYXNlIEFyaXRoTXVsOiB7CisgICAgICAgICAgICBT
cGVjdWxhdGVkVHlwZSBsZWZ0ID0gbm9kZS0+Y2hpbGQxKCktPnByZWRpY3Rpb24oKTsKKyAgICAg
ICAgICAgIFNwZWN1bGF0ZWRUeXBlIHJpZ2h0ID0gbm9kZS0+Y2hpbGQyKCktPnByZWRpY3Rpb24o
KTsKICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBEb3VibGVCYWxsb3QgYmFsbG90
OworICAgICAgICAgICAgRG91YmxlQmFsbG90IGJhbGxvdDsKICAgICAgICAgICAgICAgICAKLSAg
ICAgICAgICAgICAgICBpZiAoaXNOdW1iZXJTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc051bWJlclNw
ZWN1bGF0aW9uKHJpZ2h0KQotICAgICAgICAgICAgICAgICAgICAmJiAhbV9ncmFwaC5tdWxTaG91
bGRTcGVjdWxhdGVJbnRlZ2VyKG5vZGUpKQotICAgICAgICAgICAgICAgICAgICBiYWxsb3QgPSBW
b3RlRG91YmxlOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgYmFs
bG90ID0gVm90ZVZhbHVlOworICAgICAgICAgICAgaWYgKGlzTnVtYmVyU3BlY3VsYXRpb24obGVm
dCkgJiYgaXNOdW1iZXJTcGVjdWxhdGlvbihyaWdodCkKKyAgICAgICAgICAgICAgICAmJiAhbV9n
cmFwaC5tdWxTaG91bGRTcGVjdWxhdGVJbnRlZ2VyKG5vZGUpKQorICAgICAgICAgICAgICAgIGJh
bGxvdCA9IFZvdGVEb3VibGU7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgYmFs
bG90ID0gVm90ZVZhbHVlOwogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIG1fZ3Jh
cGgudm90ZShub2RlLmNoaWxkMSgpLCBiYWxsb3QpOwotICAgICAgICAgICAgICAgIG1fZ3JhcGgu
dm90ZShub2RlLmNoaWxkMigpLCBiYWxsb3QpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgfQorICAgICAgICAgICAgbV9ncmFwaC52b3RlTm9kZShub2RlLT5jaGlsZDEoKSwg
YmFsbG90KTsKKyAgICAgICAgICAgIG1fZ3JhcGgudm90ZU5vZGUobm9kZS0+Y2hpbGQyKCksIGJh
bGxvdCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQogCi0gICAgICAgICAgICBjYXNl
IEFyaXRoTWluOgotICAgICAgICAgICAgY2FzZSBBcml0aE1heDoKLSAgICAgICAgICAgIGNhc2Ug
QXJpdGhNb2Q6Ci0gICAgICAgICAgICBjYXNlIEFyaXRoRGl2OiB7Ci0gICAgICAgICAgICAgICAg
U3BlY3VsYXRlZFR5cGUgbGVmdCA9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ucHJlZGljdGlvbigp
OwotICAgICAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHJpZ2h0ID0gbV9ncmFwaFtub2RlLmNo
aWxkMigpXS5wcmVkaWN0aW9uKCk7CisgICAgICAgIGNhc2UgQXJpdGhNaW46CisgICAgICAgIGNh
c2UgQXJpdGhNYXg6CisgICAgICAgIGNhc2UgQXJpdGhNb2Q6CisgICAgICAgIGNhc2UgQXJpdGhE
aXY6IHsKKyAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIGxlZnQgPSBub2RlLT5jaGlsZDEoKS0+
cHJlZGljdGlvbigpOworICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgcmlnaHQgPSBub2RlLT5j
aGlsZDIoKS0+cHJlZGljdGlvbigpOwogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAg
IERvdWJsZUJhbGxvdCBiYWxsb3Q7CisgICAgICAgICAgICBEb3VibGVCYWxsb3QgYmFsbG90Owog
ICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGlmIChpc051bWJlclNwZWN1bGF0aW9u
KGxlZnQpICYmIGlzTnVtYmVyU3BlY3VsYXRpb24ocmlnaHQpCi0gICAgICAgICAgICAgICAgICAg
ICYmICEoTm9kZTo6c2hvdWxkU3BlY3VsYXRlSW50ZWdlckZvckFyaXRobWV0aWMobV9ncmFwaFtu
b2RlLmNoaWxkMSgpXSwgbV9ncmFwaFtub2RlLmNoaWxkMSgpXSkKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAmJiBub2RlLmNhblNwZWN1bGF0ZUludGVnZXIoKSkpCi0gICAgICAgICAgICAgICAg
ICAgIGJhbGxvdCA9IFZvdGVEb3VibGU7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAg
ICAgICAgICAgICBiYWxsb3QgPSBWb3RlVmFsdWU7CisgICAgICAgICAgICBpZiAoaXNOdW1iZXJT
cGVjdWxhdGlvbihsZWZ0KSAmJiBpc051bWJlclNwZWN1bGF0aW9uKHJpZ2h0KQorICAgICAgICAg
ICAgICAgICYmICEoTm9kZTo6c2hvdWxkU3BlY3VsYXRlSW50ZWdlckZvckFyaXRobWV0aWMobm9k
ZS0+Y2hpbGQxKCkubm9kZSgpLCBub2RlLT5jaGlsZDIoKS5ub2RlKCkpCisgICAgICAgICAgICAg
ICAgICAgICAmJiBub2RlLmNhblNwZWN1bGF0ZUludGVnZXIoKSkpCisgICAgICAgICAgICAgICAg
YmFsbG90ID0gVm90ZURvdWJsZTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBi
YWxsb3QgPSBWb3RlVmFsdWU7CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgbV9n
cmFwaC52b3RlKG5vZGUuY2hpbGQxKCksIGJhbGxvdCk7Ci0gICAgICAgICAgICAgICAgbV9ncmFw
aC52b3RlKG5vZGUuY2hpbGQyKCksIGJhbGxvdCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICB9CisgICAgICAgICAgICBtX2dyYXBoLnZvdGVOb2RlKG5vZGUtPmNoaWxkMSgp
LCBiYWxsb3QpOworICAgICAgICAgICAgbV9ncmFwaC52b3RlTm9kZShub2RlLT5jaGlsZDIoKSwg
YmFsbG90KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAgICAgICAgICAgICAgICAg
Ci0gICAgICAgICAgICBjYXNlIEFyaXRoQWJzOgotICAgICAgICAgICAgICAgIERvdWJsZUJhbGxv
dCBiYWxsb3Q7Ci0gICAgICAgICAgICAgICAgaWYgKCEobV9ncmFwaFtub2RlLmNoaWxkMSgpXS5z
aG91bGRTcGVjdWxhdGVJbnRlZ2VyRm9yQXJpdGhtZXRpYygpCi0gICAgICAgICAgICAgICAgICAg
ICAgJiYgbm9kZS5jYW5TcGVjdWxhdGVJbnRlZ2VyKCkpKQotICAgICAgICAgICAgICAgICAgICBi
YWxsb3QgPSBWb3RlRG91YmxlOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAg
ICAgICAgYmFsbG90ID0gVm90ZVZhbHVlOworICAgICAgICBjYXNlIEFyaXRoQWJzOgorICAgICAg
ICAgICAgRG91YmxlQmFsbG90IGJhbGxvdDsKKyAgICAgICAgICAgIGlmICghKG5vZGUtPmNoaWxk
MSgpLT5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyRm9yQXJpdGhtZXRpYygpCisgICAgICAgICAgICAg
ICAgICAmJiBub2RlLmNhblNwZWN1bGF0ZUludGVnZXIoKSkpCisgICAgICAgICAgICAgICAgYmFs
bG90ID0gVm90ZURvdWJsZTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBiYWxs
b3QgPSBWb3RlVmFsdWU7CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgbV9ncmFw
aC52b3RlKG5vZGUuY2hpbGQxKCksIGJhbGxvdCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICBtX2dyYXBoLnZvdGVOb2RlKG5vZGUtPmNoaWxkMSgpLCBiYWxsb3QpOworICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBjYXNlIEFyaXRo
U3FydDoKLSAgICAgICAgICAgICAgICBtX2dyYXBoLnZvdGUobm9kZS5jaGlsZDEoKSwgVm90ZURv
dWJsZSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQXJpdGhTcXJ0Ogor
ICAgICAgICAgICAgbV9ncmFwaC52b3RlTm9kZShub2RlLT5jaGlsZDEoKSwgVm90ZURvdWJsZSk7
CisgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGNhc2Ug
U2V0TG9jYWw6IHsKLSAgICAgICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uID0g
bV9ncmFwaFtub2RlLmNoaWxkMSgpXS5wcmVkaWN0aW9uKCk7Ci0gICAgICAgICAgICAgICAgaWYg
KGlzRG91YmxlU3BlY3VsYXRpb24ocHJlZGljdGlvbikpCi0gICAgICAgICAgICAgICAgICAgIG5v
ZGUudmFyaWFibGVBY2Nlc3NEYXRhKCktPnZvdGUoVm90ZURvdWJsZSk7Ci0gICAgICAgICAgICAg
ICAgZWxzZSBpZiAoIWlzTnVtYmVyU3BlY3VsYXRpb24ocHJlZGljdGlvbikgfHwgaXNJbnQzMlNw
ZWN1bGF0aW9uKHByZWRpY3Rpb24pKQotICAgICAgICAgICAgICAgICAgICBub2RlLnZhcmlhYmxl
QWNjZXNzRGF0YSgpLT52b3RlKFZvdGVWYWx1ZSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICB9CisgICAgICAgIGNhc2UgU2V0TG9jYWw6IHsKKyAgICAgICAgICAgIFNwZWN1
bGF0ZWRUeXBlIHByZWRpY3Rpb24gPSBub2RlLT5jaGlsZDEoKS0+cHJlZGljdGlvbigpOworICAg
ICAgICAgICAgaWYgKGlzRG91YmxlU3BlY3VsYXRpb24ocHJlZGljdGlvbikpCisgICAgICAgICAg
ICAgICAgbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCktPnZvdGUoVm90ZURvdWJsZSk7CisgICAg
ICAgICAgICBlbHNlIGlmICghaXNOdW1iZXJTcGVjdWxhdGlvbihwcmVkaWN0aW9uKSB8fCBpc0lu
dDMyU3BlY3VsYXRpb24ocHJlZGljdGlvbikpCisgICAgICAgICAgICAgICAgbm9kZS0+dmFyaWFi
bGVBY2Nlc3NEYXRhKCktPnZvdGUoVm90ZVZhbHVlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBjYXNlIFB1dEJ5VmFsOgotICAg
ICAgICAgICAgY2FzZSBQdXRCeVZhbEFsaWFzOiB7Ci0gICAgICAgICAgICAgICAgRWRnZSBjaGls
ZDEgPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApOwotICAgICAgICAgICAgICAgIEVkZ2Ug
Y2hpbGQyID0gbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKTsKLSAgICAgICAgICAgICAgICBF
ZGdlIGNoaWxkMyA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMik7Ci0gICAgICAgICAgICAg
ICAgbV9ncmFwaC52b3RlKGNoaWxkMSwgVm90ZVZhbHVlKTsKLSAgICAgICAgICAgICAgICBtX2dy
YXBoLnZvdGUoY2hpbGQyLCBWb3RlVmFsdWUpOwotICAgICAgICAgICAgICAgIHN3aXRjaCAobm9k
ZS5hcnJheU1vZGUoKS50eXBlKCkpIHsKLSAgICAgICAgICAgICAgICBjYXNlIEFycmF5OjpEb3Vi
bGU6Ci0gICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgudm90ZShjaGlsZDMsIFZvdGVEb3VibGUp
OwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBkZWZhdWx0Ogot
ICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLnZvdGUoY2hpbGQzLCBWb3RlVmFsdWUpOwotICAg
ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9CisgICAgICAgIGNhc2Ug
UHV0QnlWYWw6CisgICAgICAgIGNhc2UgUHV0QnlWYWxBbGlhczogeworICAgICAgICAgICAgRWRn
ZSBjaGlsZDEgPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApOworICAgICAgICAgICAgRWRn
ZSBjaGlsZDIgPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpOworICAgICAgICAgICAgRWRn
ZSBjaGlsZDMgPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpOworICAgICAgICAgICAgbV9n
cmFwaC52b3RlTm9kZShjaGlsZDEsIFZvdGVWYWx1ZSk7CisgICAgICAgICAgICBtX2dyYXBoLnZv
dGVOb2RlKGNoaWxkMiwgVm90ZVZhbHVlKTsKKyAgICAgICAgICAgIHN3aXRjaCAobm9kZS5hcnJh
eU1vZGUoKS50eXBlKCkpIHsKKyAgICAgICAgICAgIGNhc2UgQXJyYXk6OkRvdWJsZToKKyAgICAg
ICAgICAgICAgICBtX2dyYXBoLnZvdGVOb2RlKGNoaWxkMywgVm90ZURvdWJsZSk7CiAgICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgCiAgICAgICAg
ICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIG1fZ3JhcGgudm90ZShub2RlLCBWb3RlVmFs
dWUpOworICAgICAgICAgICAgICAgIG1fZ3JhcGgudm90ZU5vZGUoY2hpbGQzLCBWb3RlVmFsdWUp
OwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBkZWZhdWx0OgorICAgICAgICAg
ICAgbV9ncmFwaC52b3RlQ2hpbGRyZW4obm9kZSwgVm90ZVZhbHVlKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIHZvaWQgZG9Sb3VuZE9mRG91YmxlVm90
aW5nKCkKKyAgICB7CisjaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQor
ICAgICAgICBkYXRhTG9nRigiVm90aW5nIG9uIGRvdWJsZSB1c2VzIG9mIGxvY2FscyBbJXVdXG4i
LCBtX2NvdW50KTsKKyNlbmRpZgorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9n
cmFwaC5tX3ZhcmlhYmxlQWNjZXNzRGF0YS5zaXplKCk7ICsraSkKKyAgICAgICAgICAgIG1fZ3Jh
cGgubV92YXJpYWJsZUFjY2Vzc0RhdGFbaV0uZmluZCgpLT5jbGVhclZvdGVzKCk7CisgICAgICAg
IGZvciAoQmFzaWNCbG9jayBibG9ja0luZGV4ID0gMDsgaSA8IG1fZ3JhcGgubV9ibG9ja3Muc2l6
ZSgpOyArK2Jsb2NrSW5kZXgpIHsKKyAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9n
cmFwaC5tX2Jsb2Nrc1tibG9ja0luZGV4XS5nZXQoKTsKKyAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBibG9jay0+c2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgICAgICBtX2N1
cnJlbnROb2RlID0gYmxvY2stPmF0KGkpOworICAgICAgICAgICAgICAgIGRvRG91YmxlVm90aW5n
KG1fY3VycmVudE5vZGUpOworICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBtX2dyYXBoLm1fdmFyaWFibGVBY2Nlc3NEYXRhLnNpemUoKTsg
KytpKSB7CiAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0
YSA9ICZtX2dyYXBoLm1fdmFyaWFibGVBY2Nlc3NEYXRhW2ldOwpAQCAtMTAxMiw3ICsxMDMzLDcg
QEAgcHJpdmF0ZToKICAgICAgICAgfQogICAgIH0KICAgICAKLSAgICBOb2RlSW5kZXggbV9jb21w
aWxlSW5kZXg7CisgICAgTm9kZSogbV9jdXJyZW50Tm9kZTsKICAgICBib29sIG1fY2hhbmdlZDsK
IAogI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RydWN0dXJlQWJzdHJhY3RWYWx1ZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RydWN0dXJlQWJzdHJhY3RWYWx1
ZS5oCShyZXZpc2lvbiAxNDAzMDYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0
cnVjdHVyZUFic3RyYWN0VmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMzE0LDYgKzMxNCw4IEBA
IHB1YmxpYzoKIHByaXZhdGU6CiAgICAgc3RhdGljIFN0cnVjdHVyZSogdG9wVmFsdWUoKSB7IHJl
dHVybiByZWludGVycHJldF9jYXN0PFN0cnVjdHVyZSo+KDEpOyB9CiAgICAgCisgICAgLy8gTkIu
IFRoaXMgbXVzdCBoYXZlIGEgdHJpdmlhbCBkZXN0cnVjdG9yLgorICAgIAogICAgIC8vIFRoaXMg
Y2FuIG9ubHkgcmVtZW1iZXIgb25lIHN0cnVjdHVyZSBhdCBhIHRpbWUuCiAgICAgU3RydWN0dXJl
KiBtX3N0cnVjdHVyZTsKIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0
cnVjdHVyZUNoZWNrSG9pc3RpbmdQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTdHJ1Y3R1cmVDaGVja0hvaXN0aW5nUGhhc2UuY3BwCShyZXZpc2lv
biAxNDAzMDYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0cnVjdHVyZUNoZWNr
SG9pc3RpbmdQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY0LDIzICs2NCwyMiBAQCBwdWJs
aWM6CiAgICAgICAgICAgICBpZiAoIWJsb2NrKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwog
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbmRleEluQmxvY2sgPSAwOyBpbmRleEluQmxvY2sg
PCBibG9jay0+c2l6ZSgpOyArK2luZGV4SW5CbG9jaykgewotICAgICAgICAgICAgICAgIE5vZGVJ
bmRleCBub2RlSW5kZXggPSBibG9jay0+YXQoaW5kZXhJbkJsb2NrKTsKLSAgICAgICAgICAgICAg
ICBOb2RlJiBub2RlID0gbV9ncmFwaFtub2RlSW5kZXhdOwotICAgICAgICAgICAgICAgIGlmICgh
bm9kZS5zaG91bGRHZW5lcmF0ZSgpKQorICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9j
ay0+YXQoaW5kZXhJbkJsb2NrKTsKKyAgICAgICAgICAgICAgICBpZiAoIW5vZGUtPnNob3VsZEdl
bmVyYXRlKCkpCiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAg
IHN3aXRjaCAobm9kZS5vcCgpKSB7CisgICAgICAgICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgp
KSB7CiAgICAgICAgICAgICAgICAgY2FzZSBDaGVja1N0cnVjdHVyZToKICAgICAgICAgICAgICAg
ICBjYXNlIFN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50OiB7Ci0gICAgICAgICAgICAgICAg
ICAgIE5vZGUmIGNoaWxkID0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXTsKLSAgICAgICAgICAgICAg
ICAgICAgaWYgKGNoaWxkLm9wKCkgIT0gR2V0TG9jYWwpCisgICAgICAgICAgICAgICAgICAgIE5v
ZGUqIGNoaWxkID0gbm9kZS0+Y2hpbGQxKCkubm9kZSgpOworICAgICAgICAgICAgICAgICAgICBp
ZiAoY2hpbGQtPm9wKCkgIT0gR2V0TG9jYWwpCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IGNo
aWxkLnZhcmlhYmxlQWNjZXNzRGF0YSgpOworICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZUFj
Y2Vzc0RhdGEqIHZhcmlhYmxlID0gY2hpbGQtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOwogICAgICAg
ICAgICAgICAgICAgICB2YXJpYWJsZS0+dm90ZShWb3RlU3RydWN0dXJlQ2hlY2spOwogICAgICAg
ICAgICAgICAgICAgICBpZiAodmFyaWFibGUtPmlzQ2FwdHVyZWQoKSB8fCB2YXJpYWJsZS0+c3Ry
dWN0dXJlQ2hlY2tIb2lzdGluZ0ZhaWxlZCgpKQogICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICAgICAgICAgIGlmICghaXNDZWxsU3BlY3VsYXRpb24odmFyaWFibGUt
PnByZWRpY3Rpb24oKSkpCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgICAgICAgICAgbm90aWNlU3RydWN0dXJlQ2hlY2sodmFyaWFibGUsIG5vZGUuc3RydWN0dXJl
U2V0KCkpOworICAgICAgICAgICAgICAgICAgICBub3RpY2VTdHJ1Y3R1cmVDaGVjayh2YXJpYWJs
ZSwgbm9kZS0+c3RydWN0dXJlU2V0KCkpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIApAQCAtMTA5LDEzICsxMDgsMTMg
QEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBjYXNlIEFy
cmF5aWZ5VG9TdHJ1Y3R1cmU6CiAgICAgICAgICAgICAgICAgY2FzZSBBcnJheWlmeToKLSAgICAg
ICAgICAgICAgICAgICAgaWYgKG5vZGUuYXJyYXlNb2RlKCkuY29udmVyc2lvbigpID09IEFycmF5
OjpSYWdlQ29udmVydCkgeworICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS0+YXJyYXlNb2Rl
KCkuY29udmVyc2lvbigpID09IEFycmF5OjpSYWdlQ29udmVydCkgewogICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gUmFnZSBjb252ZXJzaW9uIGNoYW5nZXMgc3RydWN0dXJlcy4gV2Ugc2hvdWxk
IGF2b2lkIHR5aW5nIHRvIGRvCiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhbnkga2luZCBv
ZiBob2lzdGluZyB3aGVuIHJhZ2UgY29udmVyc2lvbiBpcyBpbiBwbGF5LgotICAgICAgICAgICAg
ICAgICAgICAgICAgTm9kZSYgY2hpbGQgPSBtX2dyYXBoW25vZGUuY2hpbGQxKCldOwotICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkLm9wKCkgIT0gR2V0TG9jYWwpCisgICAgICAgICAg
ICAgICAgICAgICAgICBOb2RlKiBjaGlsZCA9IG5vZGUtPmNoaWxkMSgpLm5vZGV4KCk7CisgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGQtPm9wKCkgIT0gR2V0TG9jYWwpCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICBWYXJp
YWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gY2hpbGQudmFyaWFibGVBY2Nlc3NEYXRhKCk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gY2hp
bGQtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOwogICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFi
bGUtPnZvdGUoVm90ZU90aGVyKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YXJpYWJs
ZS0+aXNDYXB0dXJlZCgpIHx8IHZhcmlhYmxlLT5zdHJ1Y3R1cmVDaGVja0hvaXN0aW5nRmFpbGVk
KCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0xMzAsMzAgKzEyOSwy
OSBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgIC8vIGtpbmQgb2YgQ2hlY2tTdHJ1Y3R1
cmUsIHRoZW4gd2Ugc2hvdWxkIG5vdGljZSB0aGVtIHRvIGVuc3VyZSB0aGF0CiAgICAgICAgICAg
ICAgICAgICAgIC8vIHdlJ3JlIG5vdCBob2lzdGluZyBhIGNoZWNrIHRoYXQgd291bGQgY29udHJh
dmVuZSBjaGVja3MgdGhhdCBhcmUKICAgICAgICAgICAgICAgICAgICAgLy8gYWxyZWFkeSBiZWlu
ZyBwZXJmb3JtZWQuCi0gICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFy
aWFibGUgPSBub2RlLnZhcmlhYmxlQWNjZXNzRGF0YSgpOworICAgICAgICAgICAgICAgICAgICBW
YXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7
CiAgICAgICAgICAgICAgICAgICAgIGlmICh2YXJpYWJsZS0+aXNDYXB0dXJlZCgpIHx8IHZhcmlh
YmxlLT5zdHJ1Y3R1cmVDaGVja0hvaXN0aW5nRmFpbGVkKCkpCiAgICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgaWYgKCFpc0NlbGxTcGVjdWxhdGlvbih2
YXJpYWJsZS0+cHJlZGljdGlvbigpKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgICAgICAgICBOb2RlSW5kZXggc291cmNlID0gbm9kZS5jaGlsZDEoKS5pbmRl
eCgpOworICAgICAgICAgICAgICAgICAgICBOb2RlKiBzb3VyY2UgPSBub2RlLT5jaGlsZDEoKS5u
b2RlKCk7CiAgICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgc3ViSW5kZXhJbkJsb2Nr
ID0gMDsgc3ViSW5kZXhJbkJsb2NrIDwgYmxvY2stPnNpemUoKTsgKytzdWJJbmRleEluQmxvY2sp
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIE5vZGVJbmRleCBzdWJOb2RlSW5kZXggPSBibG9j
ay0+YXQoc3ViSW5kZXhJbkJsb2NrKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIE5vZGUmIHN1
Yk5vZGUgPSBtX2dyYXBoW3N1Yk5vZGVJbmRleF07Ci0gICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoIXN1Yk5vZGUuc2hvdWxkR2VuZXJhdGUoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIE5v
ZGUqIHN1Yk5vZGUgPSBibG9jay0+YXQoc3ViSW5kZXhJbkJsb2NrKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICghc3ViTm9kZS0+c2hvdWxkR2VuZXJhdGUoKSkKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAo
c3ViTm9kZS5vcCgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHN1Yk5vZGUt
Pm9wKCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgQ2hlY2tTdHJ1Y3R1cmU6IHsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3ViTm9kZS5jaGlsZDEoKS5pbmRleCgp
ICE9IHNvdXJjZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3ViTm9kZS0+Y2hp
bGQxKCkgIT0gc291cmNlKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBub3RpY2VTdHJ1Y3R1cmVDaGVjayh2YXJpYWJsZSwgc3ViTm9kZS5zdHJ1Y3R1cmVTZXQoKSk7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm90aWNlU3RydWN0dXJlQ2hlY2sodmFyaWFi
bGUsIHN1Yk5vZGUtPnN0cnVjdHVyZVNldCgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAg
ICAgIGNhc2UgU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnQ6IHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoc3ViTm9kZS5jaGlsZDEoKS5pbmRleCgpICE9IHNvdXJjZSkKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3ViTm9kZS0+Y2hpbGQxKCkgIT0gc291cmNl
KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3RpY2VTdHJ1Y3R1
cmVDaGVjayh2YXJpYWJsZSwgc3ViTm9kZS5zdHJ1Y3R1cmUoKSk7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbm90aWNlU3RydWN0dXJlQ2hlY2sodmFyaWFibGUsIHN1Yk5vZGUtPnN0cnVj
dHVyZSgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CkBAIC0xNjEs
MTQgKzE1OSwxNCBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAg
IG1fZ3JhcGgudm90ZShub2RlLCBWb3RlT3RoZXIpOworICAgICAgICAgICAgICAgICAgICBtX2dy
YXBoLnZvdGVDaGlsZHJlbihub2RlLCBWb3RlT3RoZXIpOwogICAgICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgY2FzZSBHYXJiYWdlVmFs
dWU6CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAKICAg
ICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLnZvdGUo
bm9kZSwgVm90ZU90aGVyKTsKKyAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC52b3RlQ2hpbGRy
ZW4obm9kZSwgVm90ZU90aGVyKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgfQpAQCAtMjA5LDEwICsyMDcsMTAgQEAgcHVibGljOgog
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBtX2dyYXBoLm1fbXVzdEhhbmRsZVZhbHVlcy5zaXplKCk7ICsraSkgewogICAgICAgICAg
ICAgICAgIGludCBvcGVyYW5kID0gbV9ncmFwaC5tX211c3RIYW5kbGVWYWx1ZXMub3BlcmFuZEZv
ckluZGV4KGkpOwotICAgICAgICAgICAgICAgIE5vZGVJbmRleCBub2RlSW5kZXggPSBibG9jay0+
dmFyaWFibGVzQXRIZWFkLm9wZXJhbmQob3BlcmFuZCk7Ci0gICAgICAgICAgICAgICAgaWYgKG5v
ZGVJbmRleCA9PSBOb05vZGUpCisgICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT52
YXJpYWJsZXNBdEhlYWQub3BlcmFuZChvcGVyYW5kKTsKKyAgICAgICAgICAgICAgICBpZiAoIW5v
ZGUpCiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIFZhcmlh
YmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBtX2dyYXBoW25vZGVJbmRleF0udmFyaWFibGVBY2Nl
c3NEYXRhKCk7CisgICAgICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9
IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOwogICAgICAgICAgICAgICAgIEhhc2hNYXA8VmFy
aWFibGVBY2Nlc3NEYXRhKiwgQ2hlY2tEYXRhPjo6aXRlcmF0b3IgaXRlciA9IG1fbWFwLmZpbmQo
dmFyaWFibGUpOwogICAgICAgICAgICAgICAgIGlmIChpdGVyID09IG1fbWFwLmVuZCgpKQogICAg
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTI2NSw0OCArMjYzLDQ3IEBAIHB1YmxpYzoK
ICAgICAgICAgICAgIGlmICghYmxvY2spCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGluZGV4SW5CbG9jayA9IDA7IGluZGV4SW5CbG9jayA8IGJs
b2NrLT5zaXplKCk7ICsraW5kZXhJbkJsb2NrKSB7Ci0gICAgICAgICAgICAgICAgTm9kZUluZGV4
IG5vZGVJbmRleCA9IGJsb2NrLT5hdChpbmRleEluQmxvY2spOwotICAgICAgICAgICAgICAgIE5v
ZGUmIG5vZGUgPSBtX2dyYXBoW25vZGVJbmRleF07CisgICAgICAgICAgICAgICAgTm9kZSogbm9k
ZSA9IGJsb2NrLT5hdChpbmRleEluQmxvY2spOwogICAgICAgICAgICAgICAgIC8vIEJlIGNhcmVm
dWwgbm90IHRvIHVzZSAnbm9kZScgYWZ0ZXIgYXBwZW5kaW5nIHRvIHRoZSBncmFwaC4gSW4gdGhv
c2Ugc3dpdGNoCiAgICAgICAgICAgICAgICAgLy8gY2FzZXMgd2hlcmUgd2UgbmVlZCB0byBhcHBl
bmQsIHdlIGZpcnN0IGNhcmVmdWxseSBleHRyYWN0IGV2ZXJ5dGhpbmcgd2UgbmVlZAogICAgICAg
ICAgICAgICAgIC8vIGZyb20gdGhlIG5vZGUsIGJlZm9yZSBkb2luZyBhbnkgYXBwZW5kaW5nLgot
ICAgICAgICAgICAgICAgIGlmICghbm9kZS5zaG91bGRHZW5lcmF0ZSgpKQorICAgICAgICAgICAg
ICAgIGlmICghbm9kZS0+c2hvdWxkR2VuZXJhdGUoKSkKICAgICAgICAgICAgICAgICAgICAgY29u
dGludWU7Ci0gICAgICAgICAgICAgICAgc3dpdGNoIChub2RlLm9wKCkpIHsKKyAgICAgICAgICAg
ICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKICAgICAgICAgICAgICAgICBjYXNlIFNldEFyZ3Vt
ZW50OiB7CiAgICAgICAgICAgICAgICAgICAgIEFTU0VSVCghYmxvY2tJbmRleCk7CiAgICAgICAg
ICAgICAgICAgICAgIC8vIEluc2VydCBhIEdldExvY2FsIGFuZCBhIENoZWNrU3RydWN0dXJlIGlt
bWVkaWF0ZWx5IGZvbGxvd2luZyB0aGlzCiAgICAgICAgICAgICAgICAgICAgIC8vIFNldEFyZ3Vt
ZW50LCBpZiB0aGUgdmFyaWFibGUgd2FzIGEgY2FuZGlkYXRlIGZvciBzdHJ1Y3R1cmUgaG9pc3Rp
bmcuCiAgICAgICAgICAgICAgICAgICAgIC8vIElmIHRoZSBiYXNpYyBibG9jayBwcmV2aW91c2x5
IG9ubHkgaGFkIHRoZSBTZXRBcmd1bWVudCBhcyBpdHMKICAgICAgICAgICAgICAgICAgICAgLy8g
dmFyaWFibGUtYXQtdGFpbCwgdGhlbiByZXBsYWNlIGl0IHdpdGggdGhpcyBHZXRMb2NhbC4KLSAg
ICAgICAgICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG5vZGUudmFy
aWFibGVBY2Nlc3NEYXRhKCk7CisgICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0
YSogdmFyaWFibGUgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKICAgICAgICAgICAgICAg
ICAgICAgSGFzaE1hcDxWYXJpYWJsZUFjY2Vzc0RhdGEqLCBDaGVja0RhdGE+OjppdGVyYXRvciBp
dGVyID0gbV9tYXAuZmluZCh2YXJpYWJsZSk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChpdGVy
ID09IG1fbWFwLmVuZCgpKQogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICAgICAgICAgIGlmICghaXRlci0+dmFsdWUubV9zdHJ1Y3R1cmUpCiAgICAgICAgICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAg
ICAgIENvZGVPcmlnaW4gY29kZU9yaWdpbiA9IG5vZGUuY29kZU9yaWdpbjsKKyAgICAgICAgICAg
ICAgICAgICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2luID0gbm9kZS0+Y29kZU9yaWdpbjsKICAgICAg
ICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIE5vZGVJbmRleCBnZXRMb2NhbElu
ZGV4ID0gaW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCisgICAgICAgICAgICAgICAgICAgIE5vZGUq
IGdldExvY2FsID0gaW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCiAgICAgICAgICAgICAgICAgICAg
ICAgICBpbmRleEluQmxvY2sgKyAxLCBEb250UmVmQ2hpbGRyZW4sIERvbnRSZWZOb2RlLCB2YXJp
YWJsZS0+cHJlZGljdGlvbigpLAotICAgICAgICAgICAgICAgICAgICAgICAgR2V0TG9jYWwsIGNv
ZGVPcmlnaW4sIE9wSW5mbyh2YXJpYWJsZSksIG5vZGVJbmRleCk7CisgICAgICAgICAgICAgICAg
ICAgICAgICBHZXRMb2NhbCwgY29kZU9yaWdpbiwgT3BJbmZvKHZhcmlhYmxlKSwgbm9kZSk7CiAg
ICAgICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnROb2RlKAogICAgICAgICAgICAg
ICAgICAgICAgICAgaW5kZXhJbkJsb2NrICsgMSwgUmVmQ2hpbGRyZW4sIERvbnRSZWZOb2RlLCBT
cGVjTm9uZSwgQ2hlY2tTdHJ1Y3R1cmUsCiAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlT3Jp
Z2luLCBPcEluZm8obV9ncmFwaC5hZGRTdHJ1Y3R1cmVTZXQoaXRlci0+dmFsdWUubV9zdHJ1Y3R1
cmUpKSwKICAgICAgICAgICAgICAgICAgICAgICAgIGdldExvY2FsSW5kZXgpOwogCi0gICAgICAg
ICAgICAgICAgICAgIGlmIChibG9jay0+dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQodmFyaWFibGUt
PmxvY2FsKCkpID09IG5vZGVJbmRleCkKLSAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrLT52
YXJpYWJsZXNBdFRhaWwub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkgPSBnZXRMb2NhbEluZGV4
OworICAgICAgICAgICAgICAgICAgICBpZiAoYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5k
KHZhcmlhYmxlLT5sb2NhbCgpKSA9PSBub2RlKQorICAgICAgICAgICAgICAgICAgICAgICAgYmxv
Y2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSA9IGdldExvY2Fs
OwogICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5zdWJz
dGl0dXRlR2V0TG9jYWwoKmJsb2NrLCBpbmRleEluQmxvY2ssIHZhcmlhYmxlLCBnZXRMb2NhbElu
ZGV4KTsKKyAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5zdWJzdGl0dXRlR2V0TG9jYWwoKmJs
b2NrLCBpbmRleEluQmxvY2ssIHZhcmlhYmxlLCBnZXRMb2NhbCk7CiAgICAgICAgICAgICAgICAg
ICAgIAogICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAKICAg
ICAgICAgICAgICAgICBjYXNlIFNldExvY2FsOiB7Ci0gICAgICAgICAgICAgICAgICAgIFZhcmlh
YmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBub2RlLnZhcmlhYmxlQWNjZXNzRGF0YSgpOworICAg
ICAgICAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbm9kZS0+dmFy
aWFibGVBY2Nlc3NEYXRhKCk7CiAgICAgICAgICAgICAgICAgICAgIEhhc2hNYXA8VmFyaWFibGVB
Y2Nlc3NEYXRhKiwgQ2hlY2tEYXRhPjo6aXRlcmF0b3IgaXRlciA9IG1fbWFwLmZpbmQodmFyaWFi
bGUpOwogICAgICAgICAgICAgICAgICAgICBpZiAoaXRlciA9PSBtX21hcC5lbmQoKSkKICAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMzE3LDggKzMxNCw4IEBAIHB1YmxpYzoKICAg
ICAgICAgICAgICAgICAgICAgLy8gYmUgZHJvcHBlZCBpbnRvIHRoaXMgYnl0ZWNvZGUgdmFyaWFi
bGUgaWYgdGhlIENoZWNrU3RydWN0dXJlIGRlY2lkZXMKICAgICAgICAgICAgICAgICAgICAgLy8g
dG8gZXhpdC4KICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIENvZGVP
cmlnaW4gY29kZU9yaWdpbiA9IG5vZGUuY29kZU9yaWdpbjsKLSAgICAgICAgICAgICAgICAgICAg
Tm9kZUluZGV4IGNoaWxkMSA9IG5vZGUuY2hpbGQxKCkuaW5kZXgoKTsKKyAgICAgICAgICAgICAg
ICAgICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2luID0gbm9kZS0+Y29kZU9yaWdpbjsKKyAgICAgICAg
ICAgICAgICAgICAgTm9kZSogY2hpbGQxID0gbm9kZS0+Y2hpbGQxKCkubm9kZSgpOwogICAgICAg
ICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydE5v
ZGUoCiAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleEluQmxvY2ssIERvbnRSZWZDaGlsZHJl
biwgRG9udFJlZk5vZGUsIFNwZWNOb25lLCBTZXRMb2NhbCwgY29kZU9yaWdpbiwKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsaWRhdGUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsaWRhdGUuY3BwCShyZXZpc2lvbiAxNDAzMDYp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbGlkYXRlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtODAsNDAgKzgwLDQzIEBAIHB1YmxpYzoKICAgICAgICAgLy8gVmFsaWRhdGUgdGhh
dCBhbGwgbG9jYWwgdmFyaWFibGVzIGF0IHRoZSBoZWFkIG9mIHRoZSByb290IGJsb2NrIGFyZSBk
ZWFkLgogICAgICAgICBCYXNpY0Jsb2NrKiByb290ID0gbV9ncmFwaC5tX2Jsb2Nrc1swXS5nZXQo
KTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHJvb3QtPnZhcmlhYmxlc0F0SGVh
ZC5udW1iZXJPZkxvY2FscygpOyArK2kpCi0gICAgICAgICAgICBWX0VRVUFMKChzdGF0aWNfY2Fz
dDxWaXJ0dWFsUmVnaXN0ZXI+KGkpLCAwKSwgTm9Ob2RlLCByb290LT52YXJpYWJsZXNBdEhlYWQu
bG9jYWwoaSkpOworICAgICAgICAgICAgVl9FUVVBTCgoc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lz
dGVyPihpKSwgMCksIDAsIHJvb3QtPnZhcmlhYmxlc0F0SGVhZC5sb2NhbChpKSk7CiAgICAgICAg
IAogICAgICAgICAvLyBWYWxpZGF0ZSByZWYgY291bnRzIGFuZCB1c2VzLgotICAgICAgICBWZWN0
b3I8dW5zaWduZWQ+IG15UmVmQ291bnRzOwotICAgICAgICBteVJlZkNvdW50cy5maWxsKDAsIG1f
Z3JhcGguc2l6ZSgpKTsKLSAgICAgICAgQml0VmVjdG9yIGFjY2VwdGFibGVOb2RlSW5kaWNlczsK
KyAgICAgICAgSGFzaE1hcDxOb2RlKiwgdW5zaWduZWQ+IG15UmVmQ291bnRzOwogICAgICAgICBm
b3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2dyYXBoLm1fYmxv
Y2tzLnNpemUoKTsgKytibG9ja0luZGV4KSB7CiAgICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9j
ayA9IG1fZ3JhcGgubV9ibG9ja3NbYmxvY2tJbmRleF0uZ2V0KCk7Ci0gICAgICAgICAgICBpZiAo
IWJsb2NrKQorICAgICAgICAgICAgaWYgKCFibG9jayB8fCAhYmxvY2stPmlzUmVhY2hhYmxlKQog
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgaWYgKCFibG9jay0+aXNSZWFj
aGFibGUpCisgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGJsb2NrLT5udW1Ob2Rl
cygpOyArK2kpCisgICAgICAgICAgICAgICAgbXlSZWZDb3VudHMuYWRkKGJsb2NrLT5ub2RlKGkp
LCAwKTsKKyAgICAgICAgfQorICAgICAgICBIYXNoU2V0PE5vZGUqPiBhY2NlcHRhYmxlTm9kZXM7
CisgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8IG1f
Z3JhcGgubV9ibG9ja3Muc2l6ZSgpOyArK2Jsb2NrSW5kZXgpIHsKKyAgICAgICAgICAgIEJhc2lj
QmxvY2sqIGJsb2NrID0gbV9ncmFwaC5tX2Jsb2Nrc1tibG9ja0luZGV4XS5nZXQoKTsKKyAgICAg
ICAgICAgIGlmICghYmxvY2sgfHwgIWJsb2NrLT5pc1JlYWNoYWJsZSkKICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYmxvY2stPm51
bU5vZGVzKCk7ICsraSkgewotICAgICAgICAgICAgICAgIE5vZGVJbmRleCBub2RlSW5kZXggPSBi
bG9jay0+bm9kZUluZGV4KGkpOwotICAgICAgICAgICAgICAgIGFjY2VwdGFibGVOb2RlSW5kaWNl
cy5zZXQobm9kZUluZGV4KTsKLSAgICAgICAgICAgICAgICBOb2RlJiBub2RlID0gbV9ncmFwaFtu
b2RlSW5kZXhdOwotICAgICAgICAgICAgICAgIGlmICghbm9kZS5zaG91bGRHZW5lcmF0ZSgpKQor
ICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+bm9kZShpKTsKKyAgICAgICAgICAg
ICAgICBhY2NlcHRhYmxlTm9kZXMuYWRkKG5vZGUpOworICAgICAgICAgICAgICAgIGlmICghbm9k
ZS0+c2hvdWxkR2VuZXJhdGUoKSkKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAg
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gMDsgaiA8IG1fZ3JhcGgubnVtQ2hpbGRyZW4o
bm9kZSk7ICsraikgewogICAgICAgICAgICAgICAgICAgICBFZGdlIGVkZ2UgPSBtX2dyYXBoLmNo
aWxkKG5vZGUsIGopOwogICAgICAgICAgICAgICAgICAgICBpZiAoIWVkZ2UpCiAgICAgICAgICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAg
ICAgICAgICAgIG15UmVmQ291bnRzW2VkZ2UuaW5kZXgoKV0rKzsKKyAgICAgICAgICAgICAgICAg
ICAgbXlSZWZDb3VudHMuZmluZChlZGdlLm5vZGUoKSktPnZhbHVlKys7CiAgICAgICAgICAgICAg
ICAgICAgIAogICAgICAgICAgICAgICAgICAgICAvLyBVbmxlc3MgSSdtIGEgRmx1c2gsIFBoYW50
b20sIEdldExvY2FsLCBvciBQaGksIG15IGNoaWxkcmVuIHNob3VsZCBoYXNSZXN1bHQoKS4KLSAg
ICAgICAgICAgICAgICAgICAgc3dpdGNoIChub2RlLm9wKCkpIHsKKyAgICAgICAgICAgICAgICAg
ICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CiAgICAgICAgICAgICAgICAgICAgIGNhc2UgRmx1c2g6
CiAgICAgICAgICAgICAgICAgICAgIGNhc2UgUGhhbnRvbToKICAgICAgICAgICAgICAgICAgICAg
Y2FzZSBHZXRMb2NhbDoKICAgICAgICAgICAgICAgICAgICAgY2FzZSBQaGk6CiAgICAgICAgICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAg
ICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChub2RlSW5kZXgsIGVkZ2UpLCBtX2dyYXBoW2Vk
Z2VdLmhhc1Jlc3VsdCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChub2Rl
LCBlZGdlKSwgZWRnZS0+aGFzUmVzdWx0KCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CkBAIC0xMjEsNTQg
KzEyNCw1MCBAQCBwdWJsaWM6CiAgICAgICAgIH0KICAgICAgICAgZm9yIChCbG9ja0luZGV4IGJs
b2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9ncmFwaC5tX2Jsb2Nrcy5zaXplKCk7ICsrYmxv
Y2tJbmRleCkgewogICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLm1fYmxv
Y2tzW2Jsb2NrSW5kZXhdLmdldCgpOwotICAgICAgICAgICAgaWYgKCFibG9jaykKLSAgICAgICAg
ICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGlmICghYmxvY2stPmlzUmVhY2hhYmxlKQor
ICAgICAgICAgICAgaWYgKCFibG9jayB8fCAhYmxvY2stPmlzUmVhY2hhYmxlKQogICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBCaXRWZWN0b3IgcGhp
c0luVGhpc0Jsb2NrOwotICAgICAgICAgICAgQml0VmVjdG9yIG5vZGVzSW5UaGlzQmxvY2s7Cisg
ICAgICAgICAgICBIYXNoU2V0PE5vZGUqPiBwaGlzSW5UaGlzQmxvY2s7CisgICAgICAgICAgICBI
YXNoU2V0PE5vZGUqPiBub2Rlc0luVGhpc0Jsb2NrOwogICAgICAgICAgICAgCiAgICAgICAgICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGJsb2NrLT5udW1Ob2RlcygpOyArK2kpIHsKLSAgICAg
ICAgICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4ID0gYmxvY2stPm5vZGVJbmRleChpKTsKLSAg
ICAgICAgICAgICAgICBOb2RlJiBub2RlID0gbV9ncmFwaFtub2RlSW5kZXhdOwotICAgICAgICAg
ICAgICAgIG5vZGVzSW5UaGlzQmxvY2suc2V0KG5vZGVJbmRleCk7CisgICAgICAgICAgICAgICAg
Tm9kZSogbm9kZSA9IGJsb2NrLT5ub2RlKGkpOworICAgICAgICAgICAgICAgIG5vZGVzSW5UaGlz
QmxvY2suYWRkKG5vZGUpOwogICAgICAgICAgICAgICAgIGlmIChibG9jay0+aXNQaGlJbmRleChp
KSkKLSAgICAgICAgICAgICAgICAgICAgcGhpc0luVGhpc0Jsb2NrLnNldChub2RlSW5kZXgpOwot
ICAgICAgICAgICAgICAgIFZfRVFVQUwoKG5vZGVJbmRleCksIG15UmVmQ291bnRzW25vZGVJbmRl
eF0sIG5vZGUuYWRqdXN0ZWRSZWZDb3VudCgpKTsKKyAgICAgICAgICAgICAgICAgICAgcGhpc0lu
VGhpc0Jsb2NrLmFkZChub2RlKTsKKyAgICAgICAgICAgICAgICBWX0VRVUFMKChub2RlKSwgbXlS
ZWZDb3VudHMuZ2V0KG5vZGVJbmRleCksIG5vZGUuYWRqdXN0ZWRSZWZDb3VudCgpKTsKICAgICAg
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSAwOyBqIDwgbV9ncmFwaC5udW1DaGlsZHJlbihu
b2RlKTsgKytqKSB7CiAgICAgICAgICAgICAgICAgICAgIEVkZ2UgZWRnZSA9IG1fZ3JhcGguY2hp
bGQobm9kZSwgaik7CiAgICAgICAgICAgICAgICAgICAgIGlmICghZWRnZSkKICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgobm9k
ZUluZGV4LCBlZGdlKSwgYWNjZXB0YWJsZU5vZGVJbmRpY2VzLmdldChlZGdlLmluZGV4KCkpKTsK
KyAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKG5vZGUsIGVkZ2UpLCBhY2NlcHRhYmxlTm9k
ZUluZGljZXMuY29udGFpbnMoZWRnZS5ub2RlKCkpKTsKICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgYmxvY2stPnBoaXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgICAgICBOb2RlSW5kZXgg
bm9kZUluZGV4ID0gYmxvY2stPnBoaXNbaV07Ci0gICAgICAgICAgICAgICAgTm9kZSYgbm9kZSA9
IG1fZ3JhcGhbbm9kZUluZGV4XTsKLSAgICAgICAgICAgICAgICBBU1NFUlQocGhpc0luVGhpc0Js
b2NrLmdldChub2RlSW5kZXgpKTsKLSAgICAgICAgICAgICAgICBWQUxJREFURSgobm9kZUluZGV4
KSwgbm9kZS5vcCgpID09IFBoaSk7Ci0gICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGxv
Y2FsID0gbm9kZS5sb2NhbCgpOworICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+
cGhpc1tpXTsKKyAgICAgICAgICAgICAgICBBU1NFUlQocGhpc0luVGhpc0Jsb2NrLmNvbnRhaW5z
KG5vZGUpKTsKKyAgICAgICAgICAgICAgICBWQUxJREFURSgobm9kZSksIG5vZGUtPm9wKCkgPT0g
UGhpKTsKKyAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgbG9jYWwgPSBub2RlLT5sb2Nh
bCgpOwogICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IDA7IGogPCBtX2dyYXBoLm51
bUNoaWxkcmVuKG5vZGUpOyArK2opIHsKICAgICAgICAgICAgICAgICAgICAgRWRnZSBlZGdlID0g
bV9ncmFwaC5jaGlsZChub2RlLCBqKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKCFlZGdlKQog
ICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgICAgIAot
ICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgobm9kZUluZGV4LCBlZGdlKSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaFtlZGdlXS5vcCgpID09IFNldExvY2FsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHx8IG1fZ3JhcGhbZWRnZV0ub3AoKSA9PSBTZXRBcmd1
bWVudAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBtX2dyYXBoW2VkZ2VdLm9wKCkg
PT0gRmx1c2gKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgbV9ncmFwaFtlZGdlXS5v
cCgpID09IFBoaSk7CisgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChub2RlLCBlZGdlKSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWRnZS0+b3AoKSA9PSBTZXRMb2NhbAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBlZGdlLT5vcCgpID09IFNldEFyZ3VtZW50Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IGVkZ2UtPm9wKCkgPT0gRmx1c2gKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfHwgZWRnZS0+b3AoKSA9PSBQaGkpOwogICAgICAgICAg
ICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgaWYgKHBoaXNJblRoaXNCbG9jay5nZXQo
ZWRnZS5pbmRleCgpKSkKKyAgICAgICAgICAgICAgICAgICAgaWYgKHBoaXNJblRoaXNCbG9jay5j
b250YWlucyhlZGdlLm5vZGUoKSkpCiAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsK
ICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIGlmIChub2Rlc0luVGhp
c0Jsb2NrLmdldChlZGdlLmluZGV4KCkpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBWQUxJ
REFURSgobm9kZUluZGV4LCBlZGdlKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG1fZ3JhcGhbZWRnZV0ub3AoKSA9PSBTZXRMb2NhbAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfHwgbV9ncmFwaFtlZGdlXS5vcCgpID09IFNldEFyZ3VtZW50Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB8fCBtX2dyYXBoW2VkZ2VdLm9wKCkgPT0gRmx1c2gpOwor
ICAgICAgICAgICAgICAgICAgICBpZiAobm9kZXNJblRoaXNCbG9jay5jb250YWlucyhlZGdlLm5v
ZGUoKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChub2RlLCBlZGdlKSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVkZ2UtPm9wKCkgPT0gU2V0TG9jYWwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IGVkZ2UtPm9wKCkgPT0gU2V0QXJn
dW1lbnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IGVkZ2UtPm9wKCkgPT0g
Rmx1c2gpOwogICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICAgfQpAQCAtMTgwLDMzICsxNzksMzAgQEAg
cHVibGljOgogICAgICAgICAgICAgICAgICAgICAgICAgQmFzaWNCbG9jayogcHJldkJsb2NrID0g
bV9ncmFwaC5tX2Jsb2Nrc1tibG9jay0+bV9wcmVkZWNlc3NvcnNba11dLmdldCgpOwogICAgICAg
ICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKEJsb2NrLCBibG9jay0+bV9wcmVkZWNlc3NvcnNb
a10pLCBwcmV2QmxvY2spOwogICAgICAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKEJsb2Nr
LCBibG9jay0+bV9wcmVkZWNlc3NvcnNba10pLCBwcmV2QmxvY2stPmlzUmVhY2hhYmxlKTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIE5vZGVJbmRleCBwcmV2Tm9kZUluZGV4ID0gcHJldkJsb2Nr
LT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZChsb2NhbCk7CisgICAgICAgICAgICAgICAgICAgICAg
ICBOb2RlKiBwcmV2Tm9kZSA9IHByZXZCbG9jay0+dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQobG9j
YWwpOwogICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgd2UgaGF2ZSBhIFBoaSB0aGF0IGlz
IG5vdCByZWZlcnJpbmcgdG8gKnRoaXMqIGJsb2NrIHRoZW4gYWxsIHByZWRlY2Vzc29ycwogICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gbXVzdCBoYXZlIHRoYXQgbG9jYWwgYXZhaWxhYmxlLgot
ICAgICAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKGxvY2FsLCBibG9ja0luZGV4LCBCbG9j
aywgYmxvY2stPm1fcHJlZGVjZXNzb3JzW2tdKSwgcHJldk5vZGVJbmRleCAhPSBOb05vZGUpOwot
ICAgICAgICAgICAgICAgICAgICAgICAgTm9kZSogcHJldk5vZGUgPSAmbV9ncmFwaFtwcmV2Tm9k
ZUluZGV4XTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcmV2Tm9kZS0+b3AoKSA9PSBH
ZXRMb2NhbCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXZOb2RlSW5kZXggPSBw
cmV2Tm9kZS0+Y2hpbGQxKCkuaW5kZXgoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBw
cmV2Tm9kZSA9ICZtX2dyYXBoW3ByZXZOb2RlSW5kZXhdOwotICAgICAgICAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUuc2hvdWxkR2VuZXJhdGUoKSkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChsb2NhbCwgYmxvY2stPm1f
cHJlZGVjZXNzb3JzW2tdLCBwcmV2Tm9kZUluZGV4KSwKKyAgICAgICAgICAgICAgICAgICAgICAg
IFZBTElEQVRFKChsb2NhbCwgYmxvY2tJbmRleCwgQmxvY2ssIGJsb2NrLT5tX3ByZWRlY2Vzc29y
c1trXSksIHByZXZOb2RlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcmV2Tm9kZS0+
b3AoKSA9PSBHZXRMb2NhbCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2Tm9kZSA9
IHByZXZOb2RlLT5jaGlsZDEoKS5ub2RlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
bm9kZS0+c2hvdWxkR2VuZXJhdGUoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZB
TElEQVRFKChsb2NhbCwgYmxvY2stPm1fcHJlZGVjZXNzb3JzW2tdLCBwcmV2Tm9kZSksCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldk5vZGUtPnNob3VsZEdlbmVyYXRl
KCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAg
VkFMSURBVEUoKGxvY2FsLCBibG9jay0+bV9wcmVkZWNlc3NvcnNba10sIHByZXZOb2RlSW5kZXgp
LAorICAgICAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKGxvY2FsLCBibG9jay0+bV9wcmVk
ZWNlc3NvcnNba10sIHByZXZOb2RlKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHByZXZOb2RlLT5vcCgpID09IFNldExvY2FsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB8fCBwcmV2Tm9kZS0+b3AoKSA9PSBTZXRBcmd1bWVudAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfHwgcHJldk5vZGUtPm9wKCkgPT0gRmx1c2gKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHx8IHByZXZOb2RlLT5vcCgpID09IFBoaSk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBpZiAocHJldk5vZGVJbmRleCA9PSBlZGdlLmluZGV4KCkpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChwcmV2Tm9kZSA9PSBlZGdlLm5vZGUoKSkgewogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIEF0IHRoaXMgcG9pbnQgaXQgY2Fubm90IHJlZmVyIGludG8gdGhpcyBibG9j
ay4KLSAgICAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChsb2NhbCwgYmxvY2stPm1fcHJl
ZGVjZXNzb3JzW2tdLCBwcmV2Tm9kZUluZGV4KSwgIXByZXZCbG9jay0+aXNJbkJsb2NrKGVkZ2Uu
aW5kZXgoKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKGxvY2FsLCBibG9j
ay0+bV9wcmVkZWNlc3NvcnNba10sIHByZXZOb2RlKSwgIXByZXZCbG9jay0+aXNJbkJsb2NrKGVk
Z2Uubm9kZSgpKSk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAg
Ci0gICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChub2RlSW5kZXgsIGVkZ2UpLCBmb3VuZCk7
CisgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChub2RlLCBlZGdlKSwgZm91bmQpOwogICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIApAQCAtMjI3LDM0ICsy
MjMsMzMgQEAgcHVibGljOgogICAgICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGJsb2NrLT5zaXplKCk7ICsraSkgewotICAgICAgICAg
ICAgICAgIE5vZGVJbmRleCBub2RlSW5kZXggPSBibG9jay0+YXQoaSk7Ci0gICAgICAgICAgICAg
ICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhbbm9kZUluZGV4XTsKLSAgICAgICAgICAgICAgICBBU1NF
UlQobm9kZXNJblRoaXNCbG9jay5nZXQobm9kZUluZGV4KSk7Ci0gICAgICAgICAgICAgICAgVkFM
SURBVEUoKG5vZGVJbmRleCksIG5vZGUub3AoKSAhPSBQaGkpOworICAgICAgICAgICAgICAgIE5v
ZGUqIG5vZGUgPSBibG9jay0+YXQoaSk7CisgICAgICAgICAgICAgICAgQVNTRVJUKG5vZGVzSW5U
aGlzQmxvY2suY29udGFpbnMobm9kZSkpOworICAgICAgICAgICAgICAgIFZBTElEQVRFKChub2Rl
KSwgbm9kZS0+b3AoKSAhPSBQaGkpOwogICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9
IDA7IGogPCBtX2dyYXBoLm51bUNoaWxkcmVuKG5vZGUpOyArK2opIHsKICAgICAgICAgICAgICAg
ICAgICAgRWRnZSBlZGdlID0gbV9ncmFwaC5jaGlsZChub2RlLCBqKTsKICAgICAgICAgICAgICAg
ICAgICAgaWYgKCFlZGdlKQogICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgICAgICAgICAgICAgIFZBTElEQVRFKChub2RlSW5kZXgsIGVkZ2UpLCBub2Rlc0luVGhpc0Js
b2NrLmdldChub2RlSW5kZXgpKTsKKyAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKG5vZGUs
IGVkZ2UpLCBub2Rlc0luVGhpc0Jsb2NrLmNvbnRhaW5zKGVkZ2Uubm9kZSgpKSk7CiAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGlmICghbm9kZS5z
aG91bGRHZW5lcmF0ZSgpKQorICAgICAgICAgICAgICAgIGlmICghbm9kZS0+c2hvdWxkR2VuZXJh
dGUoKSkKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgc3dp
dGNoIChub2RlLm9wKCkpIHsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsK
ICAgICAgICAgICAgICAgICBjYXNlIEdldExvY2FsOgotICAgICAgICAgICAgICAgICAgICBpZiAo
bm9kZS52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+aXNDYXB0dXJlZCgpKQorICAgICAgICAgICAgICAg
ICAgICBpZiAobm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCktPmlzQ2FwdHVyZWQoKSkKICAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgo
bm9kZUluZGV4LCBibG9ja0luZGV4KSwgZ2V0TG9jYWxQb3NpdGlvbnMub3BlcmFuZChub2RlLmxv
Y2FsKCkpID09IG5vdFNldCk7Ci0gICAgICAgICAgICAgICAgICAgIGdldExvY2FsUG9zaXRpb25z
Lm9wZXJhbmQobm9kZS5sb2NhbCgpKSA9IGk7CisgICAgICAgICAgICAgICAgICAgIFZBTElEQVRF
KChub2RlLCBibG9ja0luZGV4KSwgZ2V0TG9jYWxQb3NpdGlvbnMub3BlcmFuZChub2RlLT5sb2Nh
bCgpKSA9PSBub3RTZXQpOworICAgICAgICAgICAgICAgICAgICBnZXRMb2NhbFBvc2l0aW9ucy5v
cGVyYW5kKG5vZGUtPmxvY2FsKCkpID0gaTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICAgICAgY2FzZSBTZXRMb2NhbDoKLSAgICAgICAgICAgICAgICAgICAgaWYgKG5v
ZGUudmFyaWFibGVBY2Nlc3NEYXRhKCktPmlzQ2FwdHVyZWQoKSkKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5pc0NhcHR1cmVkKCkpCiAgICAgICAg
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgLy8gT25seSByZWNv
cmQgdGhlIGZpcnN0IFNldExvY2FsLiBUaGVyZSBtYXkgYmUgbXVsdGlwbGUgU2V0TG9jYWxzCiAg
ICAgICAgICAgICAgICAgICAgIC8vIGJlY2F1c2Ugb2YgZmx1c2hpbmcuCi0gICAgICAgICAgICAg
ICAgICAgIGlmIChzZXRMb2NhbFBvc2l0aW9ucy5vcGVyYW5kKG5vZGUubG9jYWwoKSkgIT0gbm90
U2V0KQorICAgICAgICAgICAgICAgICAgICBpZiAoc2V0TG9jYWxQb3NpdGlvbnMub3BlcmFuZChu
b2RlLT5sb2NhbCgpKSAhPSBub3RTZXQpCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgICAgICAgICAgc2V0TG9jYWxQb3NpdGlvbnMub3BlcmFuZChub2RlLmxvY2Fs
KCkpID0gaTsKKyAgICAgICAgICAgICAgICAgICAgc2V0TG9jYWxQb3NpdGlvbnMub3BlcmFuZChu
b2RlLT5sb2NhbCgpKSA9IGk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMjk0LDkgKzI4
OSw5IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBnZXRMb2NhbFBvc2l0aW9ucy5vcGVyYW5kKG9w
ZXJhbmQpIDwgc2V0TG9jYWxQb3NpdGlvbnMub3BlcmFuZChvcGVyYW5kKSk7CiAgICAgfQogICAg
IAotICAgIHZvaWQgcmVwb3J0VmFsaWRhdGlvbkNvbnRleHQoTm9kZUluZGV4IG5vZGVJbmRleCkK
KyAgICB2b2lkIHJlcG9ydFZhbGlkYXRpb25Db250ZXh0KE5vZGUqIG5vZGUpCiAgICAgewotICAg
ICAgICBkYXRhTG9nRigiQCV1Iiwgbm9kZUluZGV4KTsKKyAgICAgICAgZGF0YUxvZ0YoIkAldSIs
IG5vZGUtPmluZGV4KCkpOwogICAgIH0KICAgICAKICAgICBlbnVtIEJsb2NrVGFnIHsgQmxvY2sg
fTsKQEAgLTMwNSw5ICszMDAsOSBAQCBwcml2YXRlOgogICAgICAgICBkYXRhTG9nRigiQmxvY2sg
IyV1IiwgYmxvY2tJbmRleCk7CiAgICAgfQogICAgIAotICAgIHZvaWQgcmVwb3J0VmFsaWRhdGlv
bkNvbnRleHQoTm9kZUluZGV4IG5vZGVJbmRleCwgRWRnZSBlZGdlKQorICAgIHZvaWQgcmVwb3J0
VmFsaWRhdGlvbkNvbnRleHQoTm9kZSogbm9kZSwgRWRnZSBlZGdlKQogICAgIHsKLSAgICAgICAg
ZGF0YUxvZ0YoIkAldSAtPiAlc0AldSIsIG5vZGVJbmRleCwgdXNlS2luZFRvU3RyaW5nKGVkZ2Uu
dXNlS2luZCgpKSwgZWRnZS5pbmRleCgpKTsKKyAgICAgICAgZGF0YUxvZ0YoIkAldSAtPiAlc0Al
dSIsIG5vZGUtPmluZGV4KCksIHVzZUtpbmRUb1N0cmluZyhlZGdlLnVzZUtpbmQoKSksIGVkZ2Uu
aW5kZXgoKSk7CiAgICAgfQogICAgIAogICAgIHZvaWQgcmVwb3J0VmFsaWRhdGlvbkNvbnRleHQo
VmlydHVhbFJlZ2lzdGVyIGxvY2FsLCBCbG9ja0luZGV4IGJsb2NrSW5kZXgpCkBAIC0zMjIsMjcg
KzMxNywyNyBAQCBwcml2YXRlOgogICAgIH0KICAgICAKICAgICB2b2lkIHJlcG9ydFZhbGlkYXRp
b25Db250ZXh0KAotICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgbG9jYWwsIEJsb2NrSW5kZXggc291
cmNlQmxvY2tJbmRleCwgTm9kZUluZGV4IHByZXZOb2RlSW5kZXgpCisgICAgICAgIFZpcnR1YWxS
ZWdpc3RlciBsb2NhbCwgQmxvY2tJbmRleCBzb3VyY2VCbG9ja0luZGV4LCBOb2RlKiBwcmV2Tm9k
ZSkKICAgICB7Ci0gICAgICAgIGRhdGFMb2dGKCJAJXUgZm9yIHIlZCBpbiBCbG9jayAjJXUiLCBw
cmV2Tm9kZUluZGV4LCBsb2NhbCwgc291cmNlQmxvY2tJbmRleCk7CisgICAgICAgIGRhdGFMb2dG
KCJAJXUgZm9yIHIlZCBpbiBCbG9jayAjJXUiLCBwcmV2Tm9kZS0+aW5kZXgoKSwgbG9jYWwsIHNv
dXJjZUJsb2NrSW5kZXgpOwogICAgIH0KICAgICAKICAgICB2b2lkIHJlcG9ydFZhbGlkYXRpb25D
b250ZXh0KAotICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4LCBCbG9ja0luZGV4IGJsb2NrSW5k
ZXgpCisgICAgICAgIE5vZGUqIG5vZGUsIEJsb2NrSW5kZXggYmxvY2tJbmRleCkKICAgICB7Ci0g
ICAgICAgIGRhdGFMb2dGKCJAJXUgaW4gQmxvY2sgIyV1Iiwgbm9kZUluZGV4LCBibG9ja0luZGV4
KTsKKyAgICAgICAgZGF0YUxvZ0YoIkAldSBpbiBCbG9jayAjJXUiLCBub2RlLT5pbmRleCgpLCBi
bG9ja0luZGV4KTsKICAgICB9CiAgICAgCiAgICAgdm9pZCByZXBvcnRWYWxpZGF0aW9uQ29udGV4
dCgKLSAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRleCwgTm9kZUluZGV4IG5vZGVJbmRleDIsIEJs
b2NrSW5kZXggYmxvY2tJbmRleCkKKyAgICAgICAgTm9kZSogbm9kZSwgTm9kZSogbm9kZTIsIEJs
b2NrSW5kZXggYmxvY2tJbmRleCkKICAgICB7Ci0gICAgICAgIGRhdGFMb2dGKCJAJXUgYW5kIEAl
dSBpbiBCbG9jayAjJXUiLCBub2RlSW5kZXgsIG5vZGVJbmRleDIsIGJsb2NrSW5kZXgpOworICAg
ICAgICBkYXRhTG9nRigiQCV1IGFuZCBAJXUgaW4gQmxvY2sgIyV1Iiwgbm9kZS0+aW5kZXgoKSwg
bm9kZTItPmluZGV4KCksIGJsb2NrSW5kZXgpOwogICAgIH0KICAgICAKICAgICB2b2lkIHJlcG9y
dFZhbGlkYXRpb25Db250ZXh0KAotICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4LCBCbG9ja0lu
ZGV4IGJsb2NrSW5kZXgsIE5vZGVJbmRleCBleHBlY3RlZE5vZGVJbmRleCwgRWRnZSBpbmNvbWlu
Z0VkZ2UpCisgICAgICAgIE5vZGUqIG5vZGUsIEJsb2NrSW5kZXggYmxvY2tJbmRleCwgTm9kZSog
ZXhwZWN0ZWROb2RlLCBFZGdlIGluY29taW5nRWRnZSkKICAgICB7Ci0gICAgICAgIGRhdGFMb2dG
KCJAJXUgaW4gQmxvY2sgIyV1LCBzZWFyY2hpbmcgZm9yIEAldSBmcm9tIEAldSIsIG5vZGVJbmRl
eCwgYmxvY2tJbmRleCwgZXhwZWN0ZWROb2RlSW5kZXgsIGluY29taW5nRWRnZS5pbmRleCgpKTsK
KyAgICAgICAgZGF0YUxvZ0YoIkAldSBpbiBCbG9jayAjJXUsIHNlYXJjaGluZyBmb3IgQCV1IGZy
b20gQCV1Iiwgbm9kZS0+aW5kZXgoKSwgYmxvY2tJbmRleCwgZXhwZWN0ZWROb2RlLT5pbmRleCgp
LCBpbmNvbWluZ0VkZ2UuaW5kZXgoKSk7CiAgICAgfQogICAgIAogICAgIHZvaWQgZHVtcERhdGEo
dW5zaWduZWQgdmFsdWUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ds
b2JhbERhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTR2xvYmFsRGF0YS5jcHAJKHJldmlzaW9uIDE0MDMwNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMy
LDcgQEAKICNpbmNsdWRlICJBcmdMaXN0LmgiCiAjaW5jbHVkZSAiQ29kZUNhY2hlLmgiCiAjaW5j
bHVkZSAiQ29tbW9uSWRlbnRpZmllcnMuaCIKKyNpbmNsdWRlICJERkdMb25nTGl2ZWRTdGF0ZS5o
IgogI2luY2x1ZGUgIkRlYnVnZ2VyQWN0aXZhdGlvbi5oIgogI2luY2x1ZGUgIkZ1bmN0aW9uQ29u
c3RydWN0b3IuaCIKICNpbmNsdWRlICJHQ0FjdGl2aXR5Q2FsbGJhY2suaCIKQEAgLTI1MSw2ICsy
NTIsMTEgQEAgSlNHbG9iYWxEYXRhOjpKU0dsb2JhbERhdGEoR2xvYmFsRGF0YVR5cAogICAgIAog
ICAgIGlmIChPcHRpb25zOjplbmFibGVQcm9maWxlcigpKQogICAgICAgICBtX3BlckJ5dGVjb2Rl
UHJvZmlsZXIgPSBhZG9wdFB0cihuZXcgUHJvZmlsZXI6OkRhdGFiYXNlKCp0aGlzKSk7CisKKyNp
ZiBFTkFCTEUoREZHX0pJVCkKKyAgICBpZiAoY2FuVXNlSklUKCkpCisgICAgICAgIG1fZGZnU3Rh
dGUgPSBhZG9wdFB0cihuZXcgREZHOjpMb25nTGl2ZWRTdGF0ZSgpKTsKKyNlbmRpZgogfQogCiBK
U0dsb2JhbERhdGE6On5KU0dsb2JhbERhdGEoKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNHbG9iYWxEYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmgJKHJldmlzaW9uIDE0MDMwNikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC05
MSw2ICs5MSwxMiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBjbGFzcyBVbmxpbmtlZEZ1bmN0aW9u
RXhlY3V0YWJsZTsKICAgICBjbGFzcyBVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2s7CiAKKyNpZiBF
TkFCTEUoREZHX0pJVCkKKyAgICBuYW1lc3BhY2UgREZHIHsKKyAgICBjbGFzcyBMb25nTGl2ZWRT
dGF0ZTsKKyAgICB9CisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKICAgICBzdHJ1Y3QgSGFz
aFRhYmxlOwogICAgIHN0cnVjdCBJbnN0cnVjdGlvbjsKIApAQCAtMTg5LDYgKzE5NSwxMCBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAgICAgLy8gVGhlIGhlYXAgc2hvdWxkIGJlIGp1c3QgYWZ0ZXIg
ZXhlY3V0YWJsZUFsbG9jYXRvciBhbmQgYmVmb3JlIG90aGVyIG1lbWJlcnMgdG8gZW5zdXJlIHRo
YXQgaXQncwogICAgICAgICAvLyBkZXN0cnVjdGVkIGFmdGVyIGFsbCB0aGUgb2JqZWN0cyB0aGF0
IHJlZmVyZW5jZSBpdC4KICAgICAgICAgSGVhcCBoZWFwOworICAgICAgICAKKyNpZiBFTkFCTEUo
REZHX0pJVCkKKyAgICAgICAgT3duUHRyPERGRzo6TG9uZ0xpdmVkU3RhdGU+IG1fZGZnU3RhdGU7
CisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCiAKICAgICAgICAgR2xvYmFsRGF0YVR5cGUgZ2xv
YmFsRGF0YVR5cGU7CiAgICAgICAgIENsaWVudERhdGEqIGNsaWVudERhdGE7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>184064</attachid>
            <date>2013-01-22 15:53:57 -0800</date>
            <delta_ts>2013-01-22 22:41:44 -0800</delta_ts>
            <desc>work in progres</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>339196</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmNw
cAkocmV2aXNpb24gMTQwMzA2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0
cmFjdFN0YXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTEsIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDExLCAyMDEyLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtODcsMjEgKzg3LDIxIEBA
IHZvaWQgQWJzdHJhY3RTdGF0ZTo6aW5pdGlhbGl6ZShHcmFwaCYgZ3IKICAgICByb290LT5jZmFI
YXNWaXNpdGVkID0gZmFsc2U7CiAgICAgcm9vdC0+Y2ZhRm91bmRDb25zdGFudHMgPSBmYWxzZTsK
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHJvb3QtPnZhbHVlc0F0SGVhZC5udW1iZXJPZkFy
Z3VtZW50cygpOyArK2kpIHsKLSAgICAgICAgTm9kZSYgbm9kZSA9IGdyYXBoW3Jvb3QtPnZhcmlh
Ymxlc0F0SGVhZC5hcmd1bWVudChpKV07Ci0gICAgICAgIEFTU0VSVChub2RlLm9wKCkgPT0gU2V0
QXJndW1lbnQpOwotICAgICAgICBpZiAoIW5vZGUuc2hvdWxkR2VuZXJhdGUoKSkgeworICAgICAg
ICBOb2RlKiBub2RlID0gcm9vdC0+dmFyaWFibGVzQXRIZWFkLmFyZ3VtZW50KGkpOworICAgICAg
ICBBU1NFUlQobm9kZS0+b3AoKSA9PSBTZXRBcmd1bWVudCk7CisgICAgICAgIGlmICghbm9kZS0+
c2hvdWxkR2VuZXJhdGUoKSkgewogICAgICAgICAgICAgLy8gVGhlIGFyZ3VtZW50IGlzIGRlYWQu
IFdlIGRvbid0IGRvIGFueSBjaGVja3MgZm9yIHN1Y2ggYXJndW1lbnRzLCBhbmQgc28KICAgICAg
ICAgICAgIC8vIGZvciB0aGUgcHVycG9zZSBvZiB0aGUgYW5hbHlzaXMsIHRoZXkgY29udGFpbiBu
byB2YWx1ZS4KICAgICAgICAgICAgIHJvb3QtPnZhbHVlc0F0SGVhZC5hcmd1bWVudChpKS5jbGVh
cigpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAg
IGlmIChub2RlLnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5pc0NhcHR1cmVkKCkpIHsKKyAgICAgICAg
aWYgKG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5pc0NhcHR1cmVkKCkpIHsKICAgICAgICAg
ICAgIHJvb3QtPnZhbHVlc0F0SGVhZC5hcmd1bWVudChpKS5tYWtlVG9wKCk7CiAgICAgICAgICAg
ICBjb250aW51ZTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgU3BlY3VsYXRlZFR5cGUg
cHJlZGljdGlvbiA9IG5vZGUudmFyaWFibGVBY2Nlc3NEYXRhKCktPnByZWRpY3Rpb24oKTsKKyAg
ICAgICAgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0
YSgpLT5wcmVkaWN0aW9uKCk7CiAgICAgICAgIGlmIChpc0ludDMyU3BlY3VsYXRpb24ocHJlZGlj
dGlvbikpCiAgICAgICAgICAgICByb290LT52YWx1ZXNBdEhlYWQuYXJndW1lbnQoaSkuc2V0KFNw
ZWNJbnQzMik7CiAgICAgICAgIGVsc2UgaWYgKGlzQm9vbGVhblNwZWN1bGF0aW9uKHByZWRpY3Rp
b24pKQpAQCAtMTE0LDggKzExNCw4IEBAIHZvaWQgQWJzdHJhY3RTdGF0ZTo6aW5pdGlhbGl6ZShH
cmFwaCYgZ3IKICAgICAgICAgcm9vdC0+dmFsdWVzQXRUYWlsLmFyZ3VtZW50KGkpLmNsZWFyKCk7
CiAgICAgfQogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcm9vdC0+dmFsdWVzQXRIZWFkLm51
bWJlck9mTG9jYWxzKCk7ICsraSkgewotICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4ID0gcm9v
dC0+dmFyaWFibGVzQXRIZWFkLmxvY2FsKGkpOwotICAgICAgICBpZiAobm9kZUluZGV4ICE9IE5v
Tm9kZSAmJiBncmFwaFtub2RlSW5kZXhdLnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5pc0NhcHR1cmVk
KCkpCisgICAgICAgIE5vZGUqIG5vZGUgPSByb290LT52YXJpYWJsZXNBdEhlYWQubG9jYWwoaSk7
CisgICAgICAgIGlmIChub2RlICYmIG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5pc0NhcHR1
cmVkKCkpCiAgICAgICAgICAgICByb290LT52YWx1ZXNBdEhlYWQubG9jYWwoaSkubWFrZVRvcCgp
OwogICAgICAgICBlbHNlCiAgICAgICAgICAgICByb290LT52YWx1ZXNBdEhlYWQubG9jYWwoaSku
Y2xlYXIoKTsKQEAgLTIxMywxMSArMjEzLDExIEBAIHZvaWQgQWJzdHJhY3RTdGF0ZTo6cmVzZXQo
KQogICAgIG1fYnJhbmNoRGlyZWN0aW9uID0gSW52YWxpZEJyYW5jaERpcmVjdGlvbjsKIH0KIAot
QWJzdHJhY3RTdGF0ZTo6Qm9vbGVhblJlc3VsdCBBYnN0cmFjdFN0YXRlOjpib29sZWFuUmVzdWx0
KE5vZGUmIG5vZGUsIEFic3RyYWN0VmFsdWUmIHZhbHVlKQorQWJzdHJhY3RTdGF0ZTo6Qm9vbGVh
blJlc3VsdCBBYnN0cmFjdFN0YXRlOjpib29sZWFuUmVzdWx0KE5vZGUqIG5vZGUsIEFic3RyYWN0
VmFsdWUmIHZhbHVlKQogewogICAgIEpTVmFsdWUgY2hpbGRDb25zdCA9IHZhbHVlLnZhbHVlKCk7
CiAgICAgaWYgKGNoaWxkQ29uc3QpIHsKLSAgICAgICAgaWYgKGNoaWxkQ29uc3QudG9Cb29sZWFu
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3RGb3Iobm9kZS5jb2RlT3JpZ2luKS0+Z2xvYmFsRXhl
YygpKSkKKyAgICAgICAgaWYgKGNoaWxkQ29uc3QudG9Cb29sZWFuKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3RGb3Iobm9kZS0+Y29kZU9yaWdpbiktPmdsb2JhbEV4ZWMoKSkpCiAgICAgICAgICAg
ICByZXR1cm4gRGVmaW5pdGVseVRydWU7CiAgICAgICAgIHJldHVybiBEZWZpbml0ZWx5RmFsc2U7
CiAgICAgfQpAQCAtMjI2LDcgKzIyNiw3IEBAIEFic3RyYWN0U3RhdGU6OkJvb2xlYW5SZXN1bHQg
QWJzdHJhY3RTdGEKICAgICBpZiAoaXNDZWxsU3BlY3VsYXRpb24odmFsdWUubV90eXBlKQogICAg
ICAgICAmJiB2YWx1ZS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5oYXNTaW5nbGV0b24oKSkgewog
ICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHZhbHVlLm1fY3VycmVudEtub3duU3RydWN0
dXJlLnNpbmdsZXRvbigpOwotICAgICAgICBpZiAoIXN0cnVjdHVyZS0+bWFzcXVlcmFkZXNBc1Vu
ZGVmaW5lZChtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0Rm9yKG5vZGUuY29kZU9yaWdpbikpCisg
ICAgICAgIGlmICghc3RydWN0dXJlLT5tYXNxdWVyYWRlc0FzVW5kZWZpbmVkKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3RGb3Iobm9kZS0+Y29kZU9yaWdpbikpCiAgICAgICAgICAgICAmJiBzdHJ1
Y3R1cmUtPnR5cGVJbmZvKCkudHlwZSgpICE9IFN0cmluZ1R5cGUpCiAgICAgICAgICAgICByZXR1
cm4gRGVmaW5pdGVseVRydWU7CiAgICAgfQpAQCAtMjQxLDMyICsyNDEsMzEgQEAgYm9vbCBBYnN0
cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgIAogICAgIG1fZGlkQ2xvYmJlciA9
IGZhbHNlOwogICAgIAotICAgIE5vZGVJbmRleCBub2RlSW5kZXggPSBtX2Jsb2NrLT5hdChpbmRl
eEluQmxvY2spOwotICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW25vZGVJbmRleF07CisgICAgTm9k
ZSogbm9kZSA9IG1fYmxvY2stPmF0KGluZGV4SW5CbG9jayk7CiAgICAgICAgIAotICAgIGlmICgh
bm9kZS5zaG91bGRHZW5lcmF0ZSgpKQorICAgIGlmICghbm9kZS0+c2hvdWxkR2VuZXJhdGUoKSkK
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIAotICAgIHN3aXRjaCAobm9kZS5vcCgpKSB7
CisgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CiAgICAgY2FzZSBKU0NvbnN0YW50OgogICAgIGNh
c2UgV2Vha0pTQ29uc3RhbnQ6CiAgICAgY2FzZSBQaGFudG9tQXJndW1lbnRzOiB7Ci0gICAgICAg
IGZvck5vZGUobm9kZUluZGV4KS5zZXQobV9ncmFwaC52YWx1ZU9mSlNDb25zdGFudChub2RlSW5k
ZXgpKTsKLSAgICAgICAgbm9kZS5zZXRDYW5FeGl0KGZhbHNlKTsKKyAgICAgICAgZm9yTm9kZShu
b2RlKS5zZXQobV9ncmFwaC52YWx1ZU9mSlNDb25zdGFudChub2RlKSk7CisgICAgICAgIG5vZGUt
PnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIAogICAg
IGNhc2UgSWRlbnRpdHk6IHsKLSAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpID0gZm9yTm9kZShu
b2RlLmNoaWxkMSgpKTsKLSAgICAgICAgbm9kZS5zZXRDYW5FeGl0KGZhbHNlKTsKKyAgICAgICAg
Zm9yTm9kZShub2RlKSA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBub2RlLT5z
ZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAgICAgCiAg
ICAgY2FzZSBHZXRMb2NhbDogewotICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxl
QWNjZXNzRGF0YSA9IG5vZGUudmFyaWFibGVBY2Nlc3NEYXRhKCk7CisgICAgICAgIFZhcmlhYmxl
QWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRh
KCk7CiAgICAgICAgIGlmICh2YXJpYWJsZUFjY2Vzc0RhdGEtPnByZWRpY3Rpb24oKSA9PSBTcGVj
Tm9uZSkgewogICAgICAgICAgICAgbV9pc1ZhbGlkID0gZmFsc2U7Ci0gICAgICAgICAgICBub2Rl
LnNldENhbkV4aXQodHJ1ZSk7CisgICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgYm9vbCBjYW5FeGl0ID0gZmFs
c2U7CkBAIC0yNzcsNTMgKzI3Niw1MyBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5z
aWduZWQgaW5kCiAgICAgICAgIH0KICAgICAgICAgaWYgKHZhbHVlLnZhbHVlKCkpCiAgICAgICAg
ICAgICBtX2ZvdW5kQ29uc3RhbnRzID0gdHJ1ZTsKLSAgICAgICAgZm9yTm9kZShub2RlSW5kZXgp
ID0gdmFsdWU7Ci0gICAgICAgIG5vZGUuc2V0Q2FuRXhpdChjYW5FeGl0KTsKKyAgICAgICAgZm9y
Tm9kZShub2RlKSA9IHZhbHVlOworICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGNhbkV4aXQpOwog
ICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgR2V0TG9jYWxVbmxpbmtl
ZDogewotICAgICAgICBBYnN0cmFjdFZhbHVlIHZhbHVlID0gbV92YXJpYWJsZXMub3BlcmFuZChu
b2RlLnVubGlua2VkTG9jYWwoKSk7CisgICAgICAgIEFic3RyYWN0VmFsdWUgdmFsdWUgPSBtX3Zh
cmlhYmxlcy5vcGVyYW5kKG5vZGUtPnVubGlua2VkTG9jYWwoKSk7CiAgICAgICAgIGlmICh2YWx1
ZS52YWx1ZSgpKQogICAgICAgICAgICAgbV9mb3VuZENvbnN0YW50cyA9IHRydWU7Ci0gICAgICAg
IGZvck5vZGUobm9kZUluZGV4KSA9IHZhbHVlOwotICAgICAgICBub2RlLnNldENhbkV4aXQoZmFs
c2UpOworICAgICAgICBmb3JOb2RlKG5vZGUpID0gdmFsdWU7CisgICAgICAgIG5vZGUtPnNldENh
bkV4aXQoZmFsc2UpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIAogICAgIGNhc2Ug
U2V0TG9jYWw6IHsKLSAgICAgICAgaWYgKG5vZGUudmFyaWFibGVBY2Nlc3NEYXRhKCktPmlzQ2Fw
dHVyZWQoKQotICAgICAgICAgICAgfHwgbV9ncmFwaC5pc0NyZWF0ZWRUaGlzQXJndW1lbnQobm9k
ZS5sb2NhbCgpKSkgewotICAgICAgICAgICAgbV92YXJpYWJsZXMub3BlcmFuZChub2RlLmxvY2Fs
KCkpID0gZm9yTm9kZShub2RlLmNoaWxkMSgpKTsKLSAgICAgICAgICAgIG5vZGUuc2V0Q2FuRXhp
dChmYWxzZSk7CisgICAgICAgIGlmIChub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+aXNDYXB0
dXJlZCgpCisgICAgICAgICAgICB8fCBtX2dyYXBoLmlzQ3JlYXRlZFRoaXNBcmd1bWVudChub2Rl
LT5sb2NhbCgpKSkgeworICAgICAgICAgICAgbV92YXJpYWJsZXMub3BlcmFuZChub2RlLT5sb2Nh
bCgpKSA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgbm9kZS0+c2V0Q2Fu
RXhpdChmYWxzZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAKLSAg
ICAgICAgaWYgKG5vZGUudmFyaWFibGVBY2Nlc3NEYXRhKCktPnNob3VsZFVzZURvdWJsZUZvcm1h
dCgpKSB7CisgICAgICAgIGlmIChub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+c2hvdWxkVXNl
RG91YmxlRm9ybWF0KCkpIHsKICAgICAgICAgICAgIHNwZWN1bGF0ZU51bWJlclVuYXJ5KG5vZGUp
OwotICAgICAgICAgICAgbV92YXJpYWJsZXMub3BlcmFuZChub2RlLmxvY2FsKCkpLnNldChTcGVj
RG91YmxlKTsKKyAgICAgICAgICAgIG1fdmFyaWFibGVzLm9wZXJhbmQobm9kZS0+bG9jYWwoKSku
c2V0KFNwZWNEb3VibGUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAg
Ci0gICAgICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3RlZFR5cGUgPSBub2RlLnZhcmlhYmxlQWNj
ZXNzRGF0YSgpLT5hcmd1bWVudEF3YXJlUHJlZGljdGlvbigpOworICAgICAgICBTcGVjdWxhdGVk
VHlwZSBwcmVkaWN0ZWRUeXBlID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCktPmFyZ3VtZW50
QXdhcmVQcmVkaWN0aW9uKCk7CiAgICAgICAgIGlmIChpc0ludDMyU3BlY3VsYXRpb24ocHJlZGlj
dGVkVHlwZSkpCiAgICAgICAgICAgICBzcGVjdWxhdGVJbnQzMlVuYXJ5KG5vZGUpOwogICAgICAg
ICBlbHNlIGlmIChpc0NlbGxTcGVjdWxhdGlvbihwcmVkaWN0ZWRUeXBlKSkgewotICAgICAgICAg
ICAgbm9kZS5zZXRDYW5FeGl0KCFpc0NlbGxTcGVjdWxhdGlvbihmb3JOb2RlKG5vZGUuY2hpbGQx
KCkpLm1fdHlwZSkpOwotICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIo
U3BlY0NlbGwpOworICAgICAgICAgICAgbm9kZS5zZXRDYW5FeGl0KCFpc0NlbGxTcGVjdWxhdGlv
bihmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX3R5cGUpKTsKKyAgICAgICAgICAgIGZvck5vZGUo
bm9kZS0+Y2hpbGQxKCkpLmZpbHRlcihTcGVjQ2VsbCk7CiAgICAgICAgIH0gZWxzZSBpZiAoaXNC
b29sZWFuU3BlY3VsYXRpb24ocHJlZGljdGVkVHlwZSkpCiAgICAgICAgICAgICBzcGVjdWxhdGVC
b29sZWFuVW5hcnkobm9kZSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIG5vZGUuc2V0Q2Fu
RXhpdChmYWxzZSk7CisgICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAg
ICAgCi0gICAgICAgIG1fdmFyaWFibGVzLm9wZXJhbmQobm9kZS5sb2NhbCgpKSA9IGZvck5vZGUo
bm9kZS5jaGlsZDEoKSk7CisgICAgICAgIG1fdmFyaWFibGVzLm9wZXJhbmQobm9kZS0+bG9jYWwo
KSkgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAg
ICAgICAgICAgCiAgICAgY2FzZSBTZXRBcmd1bWVudDoKICAgICAgICAgLy8gQXNzZXJ0IHRoYXQg
dGhlIHN0YXRlIG9mIGFyZ3VtZW50cyBoYXMgYmVlbiBzZXQuCi0gICAgICAgIEFTU0VSVCghbV9i
bG9jay0+dmFsdWVzQXRIZWFkLm9wZXJhbmQobm9kZS5sb2NhbCgpKS5pc0NsZWFyKCkpOwotICAg
ICAgICBub2RlLnNldENhbkV4aXQoZmFsc2UpOworICAgICAgICBBU1NFUlQoIW1fYmxvY2stPnZh
bHVlc0F0SGVhZC5vcGVyYW5kKG5vZGUtPmxvY2FsKCkpLmlzQ2xlYXIoKSk7CisgICAgICAgIG5v
ZGUtPnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAg
IGNhc2UgQml0QW5kOgpAQCAtMzMyLDMwICszMzEsMzAgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpl
eGVjdXRlKHVuc2lnbmVkIGluZAogICAgIGNhc2UgQml0UlNoaWZ0OgogICAgIGNhc2UgQml0TFNo
aWZ0OgogICAgIGNhc2UgQml0VVJTaGlmdDogewotICAgICAgICBKU1ZhbHVlIGxlZnQgPSBmb3JO
b2RlKG5vZGUuY2hpbGQxKCkpLnZhbHVlKCk7Ci0gICAgICAgIEpTVmFsdWUgcmlnaHQgPSBmb3JO
b2RlKG5vZGUuY2hpbGQyKCkpLnZhbHVlKCk7CisgICAgICAgIEpTVmFsdWUgbGVmdCA9IGZvck5v
ZGUobm9kZS0+Y2hpbGQxKCkpLnZhbHVlKCk7CisgICAgICAgIEpTVmFsdWUgcmlnaHQgPSBmb3JO
b2RlKG5vZGUtPmNoaWxkMigpKS52YWx1ZSgpOwogICAgICAgICBpZiAobGVmdCAmJiByaWdodCAm
JiBsZWZ0LmlzSW50MzIoKSAmJiByaWdodC5pc0ludDMyKCkpIHsKICAgICAgICAgICAgIGludDMy
X3QgYSA9IGxlZnQuYXNJbnQzMigpOwogICAgICAgICAgICAgaW50MzJfdCBiID0gcmlnaHQuYXNJ
bnQzMigpOwogICAgICAgICAgICAgYm9vbCBjb25zdGFudFdhc1NldDsKICAgICAgICAgICAgIHN3
aXRjaCAobm9kZS5vcCgpKSB7CiAgICAgICAgICAgICBjYXNlIEJpdEFuZDoKLSAgICAgICAgICAg
ICAgICBjb25zdGFudFdhc1NldCA9IHRyeVNldENvbnN0YW50KG5vZGVJbmRleCwgSlNWYWx1ZShh
ICYgYikpOworICAgICAgICAgICAgICAgIGNvbnN0YW50V2FzU2V0ID0gdHJ5U2V0Q29uc3RhbnQo
bm9kZSwgSlNWYWx1ZShhICYgYikpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgY2FzZSBCaXRPcjoKLSAgICAgICAgICAgICAgICBjb25zdGFudFdhc1NldCA9IHRyeVNldENv
bnN0YW50KG5vZGVJbmRleCwgSlNWYWx1ZShhIHwgYikpOworICAgICAgICAgICAgICAgIGNvbnN0
YW50V2FzU2V0ID0gdHJ5U2V0Q29uc3RhbnQobm9kZSwgSlNWYWx1ZShhIHwgYikpOwogICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBCaXRYb3I6Ci0gICAgICAgICAgICAg
ICAgY29uc3RhbnRXYXNTZXQgPSB0cnlTZXRDb25zdGFudChub2RlSW5kZXgsIEpTVmFsdWUoYSBe
IGIpKTsKKyAgICAgICAgICAgICAgICBjb25zdGFudFdhc1NldCA9IHRyeVNldENvbnN0YW50KG5v
ZGUsIEpTVmFsdWUoYSBeIGIpKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
IGNhc2UgQml0UlNoaWZ0OgotICAgICAgICAgICAgICAgIGNvbnN0YW50V2FzU2V0ID0gdHJ5U2V0
Q29uc3RhbnQobm9kZUluZGV4LCBKU1ZhbHVlKGEgPj4gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGIp
KSk7CisgICAgICAgICAgICAgICAgY29uc3RhbnRXYXNTZXQgPSB0cnlTZXRDb25zdGFudChub2Rl
LCBKU1ZhbHVlKGEgPj4gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGIpKSk7CiAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIEJpdExTaGlmdDoKLSAgICAgICAgICAgICAgICBj
b25zdGFudFdhc1NldCA9IHRyeVNldENvbnN0YW50KG5vZGVJbmRleCwgSlNWYWx1ZShhIDw8IHN0
YXRpY19jYXN0PHVpbnQzMl90PihiKSkpOworICAgICAgICAgICAgICAgIGNvbnN0YW50V2FzU2V0
ID0gdHJ5U2V0Q29uc3RhbnQobm9kZSwgSlNWYWx1ZShhIDw8IHN0YXRpY19jYXN0PHVpbnQzMl90
PihiKSkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBCaXRVUlNo
aWZ0OgotICAgICAgICAgICAgICAgIGNvbnN0YW50V2FzU2V0ID0gdHJ5U2V0Q29uc3RhbnQobm9k
ZUluZGV4LCBKU1ZhbHVlKHN0YXRpY19jYXN0PHVpbnQzMl90PihhKSA+PiBzdGF0aWNfY2FzdDx1
aW50MzJfdD4oYikpKTsKKyAgICAgICAgICAgICAgICBjb25zdGFudFdhc1NldCA9IHRyeVNldENv
bnN0YW50KG5vZGUsIEpTVmFsdWUoc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGEpID4+IHN0YXRpY19j
YXN0PHVpbnQzMl90PihiKSkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
ZGVmYXVsdDoKICAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTM2Mywx
OTkgKzM2MiwxOTkgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAog
ICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKGNvbnN0YW50V2FzU2V0KSB7CiAgICAgICAg
ICAgICAgICAgbV9mb3VuZENvbnN0YW50cyA9IHRydWU7Ci0gICAgICAgICAgICAgICAgbm9kZS5z
ZXRDYW5FeGl0KGZhbHNlKTsKKyAgICAgICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNl
KTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAg
ICAgICBzcGVjdWxhdGVJbnQzMkJpbmFyeShub2RlKTsKLSAgICAgICAgZm9yTm9kZShub2RlSW5k
ZXgpLnNldChTcGVjSW50MzIpOworICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjSW50MzIp
OwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgVUludDMyVG9OdW1i
ZXI6IHsKLSAgICAgICAgSlNWYWx1ZSBjaGlsZCA9IGZvck5vZGUobm9kZS5jaGlsZDEoKSkudmFs
dWUoKTsKKyAgICAgICAgSlNWYWx1ZSBjaGlsZCA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLnZh
bHVlKCk7CiAgICAgICAgIGlmIChjaGlsZCAmJiBjaGlsZC5pc051bWJlcigpKSB7CiAgICAgICAg
ICAgICBBU1NFUlQoY2hpbGQuaXNJbnQzMigpKTsKLSAgICAgICAgICAgIGlmICh0cnlTZXRDb25z
dGFudChub2RlSW5kZXgsIEpTVmFsdWUoY2hpbGQuYXNVSW50MzIoKSkpKSB7CisgICAgICAgICAg
ICBpZiAodHJ5U2V0Q29uc3RhbnQobm9kZSwgSlNWYWx1ZShjaGlsZC5hc1VJbnQzMigpKSkpIHsK
ICAgICAgICAgICAgICAgICBtX2ZvdW5kQ29uc3RhbnRzID0gdHJ1ZTsKLSAgICAgICAgICAgICAg
ICBub2RlLnNldENhbkV4aXQoZmFsc2UpOworICAgICAgICAgICAgICAgIG5vZGUtPnNldENhbkV4
aXQoZmFsc2UpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAg
ICB9Ci0gICAgICAgIGlmICghbm9kZS5jYW5TcGVjdWxhdGVJbnRlZ2VyKCkpIHsKLSAgICAgICAg
ICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoU3BlY0RvdWJsZSk7Ci0gICAgICAgICAgICBub2Rl
LnNldENhbkV4aXQoZmFsc2UpOworICAgICAgICBpZiAoIW5vZGUtPmNhblNwZWN1bGF0ZUludGVn
ZXIoKSkgeworICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0RvdWJsZSk7CisgICAg
ICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoU3BlY0ludDMyKTsKLSAgICAgICAgICAgIG5v
ZGUuc2V0Q2FuRXhpdCh0cnVlKTsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNJ
bnQzMik7CisgICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOwogICAgICAgICB9CiAg
ICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAKICAgICBj
YXNlIERvdWJsZUFzSW50MzI6IHsKLSAgICAgICAgSlNWYWx1ZSBjaGlsZCA9IGZvck5vZGUobm9k
ZS5jaGlsZDEoKSkudmFsdWUoKTsKKyAgICAgICAgSlNWYWx1ZSBjaGlsZCA9IGZvck5vZGUobm9k
ZS0+Y2hpbGQxKCkpLnZhbHVlKCk7CiAgICAgICAgIGlmIChjaGlsZCAmJiBjaGlsZC5pc051bWJl
cigpKSB7CiAgICAgICAgICAgICBkb3VibGUgYXNEb3VibGUgPSBjaGlsZC5hc051bWJlcigpOwog
ICAgICAgICAgICAgaW50MzJfdCBhc0ludCA9IEpTQzo6dG9JbnQzMihhc0RvdWJsZSk7CiAgICAg
ICAgICAgICBpZiAoYml0d2lzZV9jYXN0PGludDY0X3Q+KHN0YXRpY19jYXN0PGRvdWJsZT4oYXNJ
bnQpKSA9PSBiaXR3aXNlX2Nhc3Q8aW50NjRfdD4oYXNEb3VibGUpCi0gICAgICAgICAgICAgICAg
JiYgdHJ5U2V0Q29uc3RhbnQobm9kZUluZGV4LCBKU1ZhbHVlKGFzSW50KSkpIHsKKyAgICAgICAg
ICAgICAgICAmJiB0cnlTZXRDb25zdGFudChub2RlLCBKU1ZhbHVlKGFzSW50KSkpIHsKICAgICAg
ICAgICAgICAgICBtX2ZvdW5kQ29uc3RhbnRzID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICBub2RlLnNldENhbkV4aXQodHJ1
ZSk7Ci0gICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNOdW1iZXIpOwot
ICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFNwZWNJbnQzMik7CisgICAgICAgIG5vZGUt
PnNldENhbkV4aXQodHJ1ZSk7CisgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRl
cihTcGVjTnVtYmVyKTsKKyAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0ludDMyKTsKICAg
ICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAgICAgCiAgICAgY2FzZSBWYWx1ZVRvSW50MzI6
IHsKLSAgICAgICAgSlNWYWx1ZSBjaGlsZCA9IGZvck5vZGUobm9kZS5jaGlsZDEoKSkudmFsdWUo
KTsKKyAgICAgICAgSlNWYWx1ZSBjaGlsZCA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLnZhbHVl
KCk7CiAgICAgICAgIGlmIChjaGlsZCAmJiBjaGlsZC5pc051bWJlcigpKSB7CiAgICAgICAgICAg
ICBib29sIGNvbnN0YW50V2FzU2V0OwogICAgICAgICAgICAgaWYgKGNoaWxkLmlzSW50MzIoKSkK
LSAgICAgICAgICAgICAgICBjb25zdGFudFdhc1NldCA9IHRyeVNldENvbnN0YW50KG5vZGVJbmRl
eCwgY2hpbGQpOworICAgICAgICAgICAgICAgIGNvbnN0YW50V2FzU2V0ID0gdHJ5U2V0Q29uc3Rh
bnQobm9kZSwgY2hpbGQpOwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGNvbnN0
YW50V2FzU2V0ID0gdHJ5U2V0Q29uc3RhbnQobm9kZUluZGV4LCBKU1ZhbHVlKEpTQzo6dG9JbnQz
MihjaGlsZC5hc0RvdWJsZSgpKSkpOworICAgICAgICAgICAgICAgIGNvbnN0YW50V2FzU2V0ID0g
dHJ5U2V0Q29uc3RhbnQobm9kZSwgSlNWYWx1ZShKU0M6OnRvSW50MzIoY2hpbGQuYXNEb3VibGUo
KSkpKTsKICAgICAgICAgICAgIGlmIChjb25zdGFudFdhc1NldCkgewogICAgICAgICAgICAgICAg
IG1fZm91bmRDb25zdGFudHMgPSB0cnVlOwotICAgICAgICAgICAgICAgIG5vZGUuc2V0Q2FuRXhp
dChmYWxzZSk7CisgICAgICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CiAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgaWYg
KG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0uc2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKQorICAgICAg
ICBpZiAobV9ncmFwaFtub2RlLT5jaGlsZDEoKV0uc2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKQog
ICAgICAgICAgICAgc3BlY3VsYXRlSW50MzJVbmFyeShub2RlKTsKLSAgICAgICAgZWxzZSBpZiAo
bV9ncmFwaFtub2RlLmNoaWxkMSgpXS5zaG91bGRTcGVjdWxhdGVOdW1iZXIoKSkKKyAgICAgICAg
ZWxzZSBpZiAobV9ncmFwaFtub2RlLT5jaGlsZDEoKV0uc2hvdWxkU3BlY3VsYXRlTnVtYmVyKCkp
CiAgICAgICAgICAgICBzcGVjdWxhdGVOdW1iZXJVbmFyeShub2RlKTsKLSAgICAgICAgZWxzZSBp
ZiAobV9ncmFwaFtub2RlLmNoaWxkMSgpXS5zaG91bGRTcGVjdWxhdGVCb29sZWFuKCkpCisgICAg
ICAgIGVsc2UgaWYgKG1fZ3JhcGhbbm9kZS0+Y2hpbGQxKCldLnNob3VsZFNwZWN1bGF0ZUJvb2xl
YW4oKSkKICAgICAgICAgICAgIHNwZWN1bGF0ZUJvb2xlYW5VbmFyeShub2RlKTsKICAgICAgICAg
ZWxzZQotICAgICAgICAgICAgbm9kZS5zZXRDYW5FeGl0KGZhbHNlKTsKKyAgICAgICAgICAgIG5v
ZGUtPnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICAKLSAgICAgICAgZm9yTm9kZShub2RlSW5k
ZXgpLnNldChTcGVjSW50MzIpOworICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjSW50MzIp
OwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgSW50MzJUb0RvdWJs
ZTogewotICAgICAgICBKU1ZhbHVlIGNoaWxkID0gZm9yTm9kZShub2RlLmNoaWxkMSgpKS52YWx1
ZSgpOworICAgICAgICBKU1ZhbHVlIGNoaWxkID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSkudmFs
dWUoKTsKICAgICAgICAgaWYgKGNoaWxkICYmIGNoaWxkLmlzTnVtYmVyKCkKLSAgICAgICAgICAg
ICYmIHRyeVNldENvbnN0YW50KG5vZGVJbmRleCwgSlNWYWx1ZShKU1ZhbHVlOjpFbmNvZGVBc0Rv
dWJsZSwgY2hpbGQuYXNOdW1iZXIoKSkpKSB7CisgICAgICAgICAgICAmJiB0cnlTZXRDb25zdGFu
dChub2RlLCBKU1ZhbHVlKEpTVmFsdWU6OkVuY29kZUFzRG91YmxlLCBjaGlsZC5hc051bWJlcigp
KSkpIHsKICAgICAgICAgICAgIG1fZm91bmRDb25zdGFudHMgPSB0cnVlOwotICAgICAgICAgICAg
bm9kZS5zZXRDYW5FeGl0KGZhbHNlKTsKKyAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFs
c2UpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgc3BlY3VsYXRlTnVt
YmVyVW5hcnkobm9kZSk7Ci0gICAgICAgIGlmIChpc0ludDMyU3BlY3VsYXRpb24oZm9yTm9kZShu
b2RlLmNoaWxkMSgpKS5tX3R5cGUpKQotICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNl
dChTcGVjRG91YmxlUmVhbCk7CisgICAgICAgIGlmIChpc0ludDMyU3BlY3VsYXRpb24oZm9yTm9k
ZShub2RlLT5jaGlsZDEoKSkubV90eXBlKSkKKyAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0
KFNwZWNEb3VibGVSZWFsKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgZm9yTm9kZShub2Rl
SW5kZXgpLnNldChTcGVjRG91YmxlKTsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNw
ZWNEb3VibGUpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgQ2hl
Y2tOdW1iZXI6Ci0gICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNOdW1i
ZXIpOworICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5maWx0ZXIoU3BlY051bWJlcik7
CiAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAgY2FzZSBWYWx1ZUFkZDoKICAgICBj
YXNlIEFyaXRoQWRkOiB7Ci0gICAgICAgIEpTVmFsdWUgbGVmdCA9IGZvck5vZGUobm9kZS5jaGls
ZDEoKSkudmFsdWUoKTsKLSAgICAgICAgSlNWYWx1ZSByaWdodCA9IGZvck5vZGUobm9kZS5jaGls
ZDIoKSkudmFsdWUoKTsKKyAgICAgICAgSlNWYWx1ZSBsZWZ0ID0gZm9yTm9kZShub2RlLT5jaGls
ZDEoKSkudmFsdWUoKTsKKyAgICAgICAgSlNWYWx1ZSByaWdodCA9IGZvck5vZGUobm9kZS0+Y2hp
bGQyKCkpLnZhbHVlKCk7CiAgICAgICAgIGlmIChsZWZ0ICYmIHJpZ2h0ICYmIGxlZnQuaXNOdW1i
ZXIoKSAmJiByaWdodC5pc051bWJlcigpCi0gICAgICAgICAgICAmJiB0cnlTZXRDb25zdGFudChu
b2RlSW5kZXgsIEpTVmFsdWUobGVmdC5hc051bWJlcigpICsgcmlnaHQuYXNOdW1iZXIoKSkpKSB7
CisgICAgICAgICAgICAmJiB0cnlTZXRDb25zdGFudChub2RlLCBKU1ZhbHVlKGxlZnQuYXNOdW1i
ZXIoKSArIHJpZ2h0LmFzTnVtYmVyKCkpKSkgewogICAgICAgICAgICAgbV9mb3VuZENvbnN0YW50
cyA9IHRydWU7CiAgICAgICAgICAgICBub2RlLnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgaWYgKG1fZ3JhcGguYWRkU2hvdWxkU3BlY3Vs
YXRlSW50ZWdlcihub2RlKSkgewogICAgICAgICAgICAgc3BlY3VsYXRlSW50MzJCaW5hcnkoCi0g
ICAgICAgICAgICAgICAgbm9kZSwgIW5vZGVDYW5UcnVuY2F0ZUludGVnZXIobm9kZS5hcml0aE5v
ZGVGbGFncygpKSk7Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFNwZWNJbnQz
Mik7CisgICAgICAgICAgICAgICAgbm9kZSwgIW5vZGVDYW5UcnVuY2F0ZUludGVnZXIobm9kZS0+
YXJpdGhOb2RlRmxhZ3MoKSkpOworICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0lu
dDMyKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIGlmIChOb2RlOjpz
aG91bGRTcGVjdWxhdGVOdW1iZXJFeHBlY3RpbmdEZWZpbmVkKG1fZ3JhcGhbbm9kZS5jaGlsZDEo
KV0sIG1fZ3JhcGhbbm9kZS5jaGlsZDIoKV0pKSB7CisgICAgICAgIGlmIChOb2RlOjpzaG91bGRT
cGVjdWxhdGVOdW1iZXJFeHBlY3RpbmdEZWZpbmVkKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgbm9k
ZS0+Y2hpbGQyKCkubm9kZSgpKSkgewogICAgICAgICAgICAgc3BlY3VsYXRlTnVtYmVyQmluYXJ5
KG5vZGUpOwotICAgICAgICAgICAgaWYgKGlzUmVhbE51bWJlclNwZWN1bGF0aW9uKGZvck5vZGUo
bm9kZS5jaGlsZDEoKSkubV90eXBlKQotICAgICAgICAgICAgICAgICYmIGlzUmVhbE51bWJlclNw
ZWN1bGF0aW9uKGZvck5vZGUobm9kZS5jaGlsZDIoKSkubV90eXBlKSkKLSAgICAgICAgICAgICAg
ICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFNwZWNEb3VibGVSZWFsKTsKKyAgICAgICAgICAgIGlm
IChpc1JlYWxOdW1iZXJTcGVjdWxhdGlvbihmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX3R5cGUp
CisgICAgICAgICAgICAgICAgJiYgaXNSZWFsTnVtYmVyU3BlY3VsYXRpb24oZm9yTm9kZShub2Rl
LT5jaGlsZDIoKSkubV90eXBlKSkKKyAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChT
cGVjRG91YmxlUmVhbCk7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZm9yTm9k
ZShub2RlSW5kZXgpLnNldChTcGVjRG91YmxlKTsKKyAgICAgICAgICAgICAgICBmb3JOb2RlKG5v
ZGUpLnNldChTcGVjRG91YmxlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAg
ICAgIGlmIChub2RlLm9wKCkgPT0gVmFsdWVBZGQpIHsKLSAgICAgICAgICAgIGNsb2JiZXJXb3Js
ZChub2RlLmNvZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7Ci0gICAgICAgICAgICBmb3JOb2RlKG5v
ZGVJbmRleCkuc2V0KFNwZWNTdHJpbmcgfCBTcGVjSW50MzIgfCBTcGVjTnVtYmVyKTsKLSAgICAg
ICAgICAgIG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7CisgICAgICAgIGlmIChub2RlLT5vcCgpID09
IFZhbHVlQWRkKSB7CisgICAgICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+Y29kZU9yaWdpbiwg
aW5kZXhJbkJsb2NrKTsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNTdHJpbmcg
fCBTcGVjSW50MzIgfCBTcGVjTnVtYmVyKTsKKyAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQo
ZmFsc2UpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgLy8gV2UgZG9u
J3QgaGFuZGxlIHRoaXMgeWV0LiA6LSgKICAgICAgICAgbV9pc1ZhbGlkID0gZmFsc2U7Ci0gICAg
ICAgIG5vZGUuc2V0Q2FuRXhpdCh0cnVlKTsKKyAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVl
KTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAgICAgCiAgICAgY2FzZSBBcml0aFN1
YjogewotICAgICAgICBKU1ZhbHVlIGxlZnQgPSBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLnZhbHVl
KCk7Ci0gICAgICAgIEpTVmFsdWUgcmlnaHQgPSBmb3JOb2RlKG5vZGUuY2hpbGQyKCkpLnZhbHVl
KCk7CisgICAgICAgIEpTVmFsdWUgbGVmdCA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLnZhbHVl
KCk7CisgICAgICAgIEpTVmFsdWUgcmlnaHQgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMigpKS52YWx1
ZSgpOwogICAgICAgICBpZiAobGVmdCAmJiByaWdodCAmJiBsZWZ0LmlzTnVtYmVyKCkgJiYgcmln
aHQuaXNOdW1iZXIoKQotICAgICAgICAgICAgJiYgdHJ5U2V0Q29uc3RhbnQobm9kZUluZGV4LCBK
U1ZhbHVlKGxlZnQuYXNOdW1iZXIoKSAtIHJpZ2h0LmFzTnVtYmVyKCkpKSkgeworICAgICAgICAg
ICAgJiYgdHJ5U2V0Q29uc3RhbnQobm9kZSwgSlNWYWx1ZShsZWZ0LmFzTnVtYmVyKCkgLSByaWdo
dC5hc051bWJlcigpKSkpIHsKICAgICAgICAgICAgIG1fZm91bmRDb25zdGFudHMgPSB0cnVlOwot
ICAgICAgICAgICAgbm9kZS5zZXRDYW5FeGl0KGZhbHNlKTsKKyAgICAgICAgICAgIG5vZGUtPnNl
dENhbkV4aXQoZmFsc2UpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAg
aWYgKG1fZ3JhcGguYWRkU2hvdWxkU3BlY3VsYXRlSW50ZWdlcihub2RlKSkgewogICAgICAgICAg
ICAgc3BlY3VsYXRlSW50MzJCaW5hcnkoCi0gICAgICAgICAgICAgICAgbm9kZSwgIW5vZGVDYW5U
cnVuY2F0ZUludGVnZXIobm9kZS5hcml0aE5vZGVGbGFncygpKSk7Ci0gICAgICAgICAgICBmb3JO
b2RlKG5vZGVJbmRleCkuc2V0KFNwZWNJbnQzMik7CisgICAgICAgICAgICAgICAgbm9kZSwgIW5v
ZGVDYW5UcnVuY2F0ZUludGVnZXIobm9kZS0+YXJpdGhOb2RlRmxhZ3MoKSkpOworICAgICAgICAg
ICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICB9CiAgICAgICAgIHNwZWN1bGF0ZU51bWJlckJpbmFyeShub2RlKTsKLSAgICAgICAgZm9y
Tm9kZShub2RlSW5kZXgpLnNldChTcGVjRG91YmxlKTsKKyAgICAgICAgZm9yTm9kZShub2RlKS5z
ZXQoU3BlY0RvdWJsZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCiAgICAgY2Fz
ZSBBcml0aE5lZ2F0ZTogewotICAgICAgICBKU1ZhbHVlIGNoaWxkID0gZm9yTm9kZShub2RlLmNo
aWxkMSgpKS52YWx1ZSgpOworICAgICAgICBKU1ZhbHVlIGNoaWxkID0gZm9yTm9kZShub2RlLT5j
aGlsZDEoKSkudmFsdWUoKTsKICAgICAgICAgaWYgKGNoaWxkICYmIGNoaWxkLmlzTnVtYmVyKCkK
LSAgICAgICAgICAgICYmIHRyeVNldENvbnN0YW50KG5vZGVJbmRleCwgSlNWYWx1ZSgtY2hpbGQu
YXNOdW1iZXIoKSkpKSB7CisgICAgICAgICAgICAmJiB0cnlTZXRDb25zdGFudChub2RlLCBKU1Zh
bHVlKC1jaGlsZC5hc051bWJlcigpKSkpIHsKICAgICAgICAgICAgIG1fZm91bmRDb25zdGFudHMg
PSB0cnVlOwotICAgICAgICAgICAgbm9kZS5zZXRDYW5FeGl0KGZhbHNlKTsKKyAgICAgICAgICAg
IG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0K
ICAgICAgICAgaWYgKG1fZ3JhcGgubmVnYXRlU2hvdWxkU3BlY3VsYXRlSW50ZWdlcihub2RlKSkg
ewogICAgICAgICAgICAgc3BlY3VsYXRlSW50MzJVbmFyeSgKLSAgICAgICAgICAgICAgICBub2Rl
LCAhbm9kZUNhblRydW5jYXRlSW50ZWdlcihub2RlLmFyaXRoTm9kZUZsYWdzKCkpKTsKLSAgICAg
ICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoU3BlY0ludDMyKTsKKyAgICAgICAgICAgICAg
ICBub2RlLCAhbm9kZUNhblRydW5jYXRlSW50ZWdlcihub2RlLT5hcml0aE5vZGVGbGFncygpKSk7
CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjSW50MzIpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgc3BlY3VsYXRlTnVtYmVyVW5hcnkobm9kZSk7Ci0g
ICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoU3BlY0RvdWJsZSk7CisgICAgICAgIGZvck5v
ZGUobm9kZSkuc2V0KFNwZWNEb3VibGUpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAg
IAogICAgIGNhc2UgQXJpdGhNdWw6IHsKLSAgICAgICAgSlNWYWx1ZSBsZWZ0ID0gZm9yTm9kZShu
b2RlLmNoaWxkMSgpKS52YWx1ZSgpOwotICAgICAgICBKU1ZhbHVlIHJpZ2h0ID0gZm9yTm9kZShu
b2RlLmNoaWxkMigpKS52YWx1ZSgpOworICAgICAgICBKU1ZhbHVlIGxlZnQgPSBmb3JOb2RlKG5v
ZGUtPmNoaWxkMSgpKS52YWx1ZSgpOworICAgICAgICBKU1ZhbHVlIHJpZ2h0ID0gZm9yTm9kZShu
b2RlLT5jaGlsZDIoKSkudmFsdWUoKTsKICAgICAgICAgaWYgKGxlZnQgJiYgcmlnaHQgJiYgbGVm
dC5pc051bWJlcigpICYmIHJpZ2h0LmlzTnVtYmVyKCkKLSAgICAgICAgICAgICYmIHRyeVNldENv
bnN0YW50KG5vZGVJbmRleCwgSlNWYWx1ZShsZWZ0LmFzTnVtYmVyKCkgKiByaWdodC5hc051bWJl
cigpKSkpIHsKKyAgICAgICAgICAgICYmIHRyeVNldENvbnN0YW50KG5vZGUsIEpTVmFsdWUobGVm
dC5hc051bWJlcigpICogcmlnaHQuYXNOdW1iZXIoKSkpKSB7CiAgICAgICAgICAgICBtX2ZvdW5k
Q29uc3RhbnRzID0gdHJ1ZTsKLSAgICAgICAgICAgIG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7Cisg
ICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICB9CiAgICAgICAgIGlmIChtX2dyYXBoLm11bFNob3VsZFNwZWN1bGF0ZUludGVnZXIo
bm9kZSkpIHsKICAgICAgICAgICAgIHNwZWN1bGF0ZUludDMyQmluYXJ5KAogICAgICAgICAgICAg
ICAgIG5vZGUsCi0gICAgICAgICAgICAgICAgIW5vZGVDYW5UcnVuY2F0ZUludGVnZXIobm9kZS5h
cml0aE5vZGVGbGFncygpKQotICAgICAgICAgICAgICAgIHx8ICFub2RlQ2FuSWdub3JlTmVnYXRp
dmVaZXJvKG5vZGUuYXJpdGhOb2RlRmxhZ3MoKSkpOwotICAgICAgICAgICAgZm9yTm9kZShub2Rl
SW5kZXgpLnNldChTcGVjSW50MzIpOworICAgICAgICAgICAgICAgICFub2RlQ2FuVHJ1bmNhdGVJ
bnRlZ2VyKG5vZGUtPmFyaXRoTm9kZUZsYWdzKCkpCisgICAgICAgICAgICAgICAgfHwgIW5vZGVD
YW5JZ25vcmVOZWdhdGl2ZVplcm8obm9kZS0+YXJpdGhOb2RlRmxhZ3MoKSkpOworICAgICAgICAg
ICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICB9CiAgICAgICAgIHNwZWN1bGF0ZU51bWJlckJpbmFyeShub2RlKTsKLSAgICAgICAgaWYg
KGlzUmVhbE51bWJlclNwZWN1bGF0aW9uKGZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKQot
ICAgICAgICAgICAgfHwgaXNSZWFsTnVtYmVyU3BlY3VsYXRpb24oZm9yTm9kZShub2RlLmNoaWxk
MigpKS5tX3R5cGUpKQotICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChTcGVjRG91
YmxlUmVhbCk7CisgICAgICAgIGlmIChpc1JlYWxOdW1iZXJTcGVjdWxhdGlvbihmb3JOb2RlKG5v
ZGUtPmNoaWxkMSgpKS5tX3R5cGUpCisgICAgICAgICAgICB8fCBpc1JlYWxOdW1iZXJTcGVjdWxh
dGlvbihmb3JOb2RlKG5vZGUtPmNoaWxkMigpKS5tX3R5cGUpKQorICAgICAgICAgICAgZm9yTm9k
ZShub2RlKS5zZXQoU3BlY0RvdWJsZVJlYWwpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBm
b3JOb2RlKG5vZGVJbmRleCkuc2V0KFNwZWNEb3VibGUpOworICAgICAgICAgICAgZm9yTm9kZShu
b2RlKS5zZXQoU3BlY0RvdWJsZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCkBA
IC01NjMsMjQgKzU2MiwyNCBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQg
aW5kCiAgICAgY2FzZSBBcml0aE1pbjoKICAgICBjYXNlIEFyaXRoTWF4OgogICAgIGNhc2UgQXJp
dGhNb2Q6IHsKLSAgICAgICAgSlNWYWx1ZSBsZWZ0ID0gZm9yTm9kZShub2RlLmNoaWxkMSgpKS52
YWx1ZSgpOwotICAgICAgICBKU1ZhbHVlIHJpZ2h0ID0gZm9yTm9kZShub2RlLmNoaWxkMigpKS52
YWx1ZSgpOworICAgICAgICBKU1ZhbHVlIGxlZnQgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS52
YWx1ZSgpOworICAgICAgICBKU1ZhbHVlIHJpZ2h0ID0gZm9yTm9kZShub2RlLT5jaGlsZDIoKSku
dmFsdWUoKTsKICAgICAgICAgaWYgKGxlZnQgJiYgcmlnaHQgJiYgbGVmdC5pc051bWJlcigpICYm
IHJpZ2h0LmlzTnVtYmVyKCkpIHsKICAgICAgICAgICAgIGRvdWJsZSBhID0gbGVmdC5hc051bWJl
cigpOwogICAgICAgICAgICAgZG91YmxlIGIgPSByaWdodC5hc051bWJlcigpOwogICAgICAgICAg
ICAgYm9vbCBjb25zdGFudFdhc1NldDsKICAgICAgICAgICAgIHN3aXRjaCAobm9kZS5vcCgpKSB7
CiAgICAgICAgICAgICBjYXNlIEFyaXRoRGl2OgotICAgICAgICAgICAgICAgIGNvbnN0YW50V2Fz
U2V0ID0gdHJ5U2V0Q29uc3RhbnQobm9kZUluZGV4LCBKU1ZhbHVlKGEgLyBiKSk7CisgICAgICAg
ICAgICAgICAgY29uc3RhbnRXYXNTZXQgPSB0cnlTZXRDb25zdGFudChub2RlLCBKU1ZhbHVlKGEg
LyBiKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIEFyaXRoTWlu
OgotICAgICAgICAgICAgICAgIGNvbnN0YW50V2FzU2V0ID0gdHJ5U2V0Q29uc3RhbnQobm9kZUlu
ZGV4LCBKU1ZhbHVlKGEgPCBiID8gYSA6IChiIDw9IGEgPyBiIDogYSArIGIpKSk7CisgICAgICAg
ICAgICAgICAgY29uc3RhbnRXYXNTZXQgPSB0cnlTZXRDb25zdGFudChub2RlLCBKU1ZhbHVlKGEg
PCBiID8gYSA6IChiIDw9IGEgPyBiIDogYSArIGIpKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICBjYXNlIEFyaXRoTWF4OgotICAgICAgICAgICAgICAgIGNvbnN0YW50V2Fz
U2V0ID0gdHJ5U2V0Q29uc3RhbnQobm9kZUluZGV4LCBKU1ZhbHVlKGEgPiBiID8gYSA6IChiID49
IGEgPyBiIDogYSArIGIpKSk7CisgICAgICAgICAgICAgICAgY29uc3RhbnRXYXNTZXQgPSB0cnlT
ZXRDb25zdGFudChub2RlLCBKU1ZhbHVlKGEgPiBiID8gYSA6IChiID49IGEgPyBiIDogYSArIGIp
KSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIEFyaXRoTW9kOgot
ICAgICAgICAgICAgICAgIGNvbnN0YW50V2FzU2V0ID0gdHJ5U2V0Q29uc3RhbnQobm9kZUluZGV4
LCBKU1ZhbHVlKGZtb2QoYSwgYikpKTsKKyAgICAgICAgICAgICAgICBjb25zdGFudFdhc1NldCA9
IHRyeVNldENvbnN0YW50KG5vZGUsIEpTVmFsdWUoZm1vZChhLCBiKSkpOwogICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKQEAgLTU4OSw4NCArNTg4LDg0IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6
ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChjb25z
dGFudFdhc1NldCkgewogICAgICAgICAgICAgICAgIG1fZm91bmRDb25zdGFudHMgPSB0cnVlOwot
ICAgICAgICAgICAgICAgIG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7CisgICAgICAgICAgICAgICAg
bm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICB9CiAgICAgICAgIH0KICAgICAgICAgaWYgKE5vZGU6OnNob3VsZFNwZWN1bGF0ZUludGVn
ZXJGb3JBcml0aG1ldGljKAotICAgICAgICAgICAgICAgIG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0s
IG1fZ3JhcGhbbm9kZS5jaGlsZDIoKV0pCi0gICAgICAgICAgICAmJiBub2RlLmNhblNwZWN1bGF0
ZUludGVnZXIoKSkgeworICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgbm9k
ZS0+Y2hpbGQyKCkubm9kZSgpKQorICAgICAgICAgICAgJiYgbm9kZS0+Y2FuU3BlY3VsYXRlSW50
ZWdlcigpKSB7CiAgICAgICAgICAgICBzcGVjdWxhdGVJbnQzMkJpbmFyeShub2RlLCB0cnVlKTsg
Ly8gZm9yY2luZyBjYW4tZXhpdCwgd2hpY2ggaXMgYSBiaXQgb24gdGhlIGNvbnNlcnZhdGl2ZSBz
aWRlLgotICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChTcGVjSW50MzIpOworICAg
ICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9CiAgICAgICAgIHNwZWN1bGF0ZU51bWJlckJpbmFyeShub2RlKTsKLSAgICAg
ICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChTcGVjRG91YmxlKTsKKyAgICAgICAgZm9yTm9kZShu
b2RlKS5zZXQoU3BlY0RvdWJsZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgICAg
IAogICAgIGNhc2UgQXJpdGhBYnM6IHsKLSAgICAgICAgSlNWYWx1ZSBjaGlsZCA9IGZvck5vZGUo
bm9kZS5jaGlsZDEoKSkudmFsdWUoKTsKKyAgICAgICAgSlNWYWx1ZSBjaGlsZCA9IGZvck5vZGUo
bm9kZS0+Y2hpbGQxKCkpLnZhbHVlKCk7CiAgICAgICAgIGlmIChjaGlsZCAmJiBjaGlsZC5pc051
bWJlcigpCi0gICAgICAgICAgICAmJiB0cnlTZXRDb25zdGFudChub2RlSW5kZXgsIEpTVmFsdWUo
ZmFicyhjaGlsZC5hc051bWJlcigpKSkpKSB7CisgICAgICAgICAgICAmJiB0cnlTZXRDb25zdGFu
dChub2RlLCBKU1ZhbHVlKGZhYnMoY2hpbGQuYXNOdW1iZXIoKSkpKSkgewogICAgICAgICAgICAg
bV9mb3VuZENvbnN0YW50cyA9IHRydWU7Ci0gICAgICAgICAgICBub2RlLnNldENhbkV4aXQoZmFs
c2UpOworICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQotICAgICAgICBpZiAobV9ncmFwaFtub2RlLmNoaWxkMSgpXS5zaG91
bGRTcGVjdWxhdGVJbnRlZ2VyRm9yQXJpdGhtZXRpYygpCi0gICAgICAgICAgICAmJiBub2RlLmNh
blNwZWN1bGF0ZUludGVnZXIoKSkgeworICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3Vs
ZFNwZWN1bGF0ZUludGVnZXJGb3JBcml0aG1ldGljKCkKKyAgICAgICAgICAgICYmIG5vZGUtPmNh
blNwZWN1bGF0ZUludGVnZXIoKSkgewogICAgICAgICAgICAgc3BlY3VsYXRlSW50MzJVbmFyeShu
b2RlLCB0cnVlKTsKLSAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoU3BlY0ludDMy
KTsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNJbnQzMik7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgfQogICAgICAgICBzcGVjdWxhdGVOdW1iZXJVbmFyeShub2RlKTsK
LSAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChTcGVjRG91YmxlKTsKKyAgICAgICAgZm9y
Tm9kZShub2RlKS5zZXQoU3BlY0RvdWJsZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAg
ICAgICAgIAogICAgIGNhc2UgQXJpdGhTcXJ0OiB7Ci0gICAgICAgIEpTVmFsdWUgY2hpbGQgPSBm
b3JOb2RlKG5vZGUuY2hpbGQxKCkpLnZhbHVlKCk7CisgICAgICAgIEpTVmFsdWUgY2hpbGQgPSBm
b3JOb2RlKG5vZGUtPmNoaWxkMSgpKS52YWx1ZSgpOwogICAgICAgICBpZiAoY2hpbGQgJiYgY2hp
bGQuaXNOdW1iZXIoKQotICAgICAgICAgICAgJiYgdHJ5U2V0Q29uc3RhbnQobm9kZUluZGV4LCBK
U1ZhbHVlKHNxcnQoY2hpbGQuYXNOdW1iZXIoKSkpKSkgeworICAgICAgICAgICAgJiYgdHJ5U2V0
Q29uc3RhbnQobm9kZSwgSlNWYWx1ZShzcXJ0KGNoaWxkLmFzTnVtYmVyKCkpKSkpIHsKICAgICAg
ICAgICAgIG1fZm91bmRDb25zdGFudHMgPSB0cnVlOwotICAgICAgICAgICAgbm9kZS5zZXRDYW5F
eGl0KGZhbHNlKTsKKyAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgc3BlY3VsYXRlTnVtYmVyVW5hcnkobm9k
ZSk7Ci0gICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoU3BlY0RvdWJsZSk7CisgICAgICAg
IGZvck5vZGUobm9kZSkuc2V0KFNwZWNEb3VibGUpOwogICAgICAgICBicmVhazsKICAgICB9CiAg
ICAgICAgICAgICAKICAgICBjYXNlIExvZ2ljYWxOb3Q6IHsKICAgICAgICAgYm9vbCBkaWRTZXRD
b25zdGFudCA9IGZhbHNlOwotICAgICAgICBzd2l0Y2ggKGJvb2xlYW5SZXN1bHQobm9kZSwgZm9y
Tm9kZShub2RlLmNoaWxkMSgpKSkpIHsKKyAgICAgICAgc3dpdGNoIChib29sZWFuUmVzdWx0KG5v
ZGUsIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpKSkgewogICAgICAgICBjYXNlIERlZmluaXRlbHlU
cnVlOgotICAgICAgICAgICAgZGlkU2V0Q29uc3RhbnQgPSB0cnlTZXRDb25zdGFudChub2RlSW5k
ZXgsIGpzQm9vbGVhbihmYWxzZSkpOworICAgICAgICAgICAgZGlkU2V0Q29uc3RhbnQgPSB0cnlT
ZXRDb25zdGFudChub2RlLCBqc0Jvb2xlYW4oZmFsc2UpKTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICBjYXNlIERlZmluaXRlbHlGYWxzZToKLSAgICAgICAgICAgIGRpZFNldENvbnN0YW50
ID0gdHJ5U2V0Q29uc3RhbnQobm9kZUluZGV4LCBqc0Jvb2xlYW4odHJ1ZSkpOworICAgICAgICAg
ICAgZGlkU2V0Q29uc3RhbnQgPSB0cnlTZXRDb25zdGFudChub2RlLCBqc0Jvb2xlYW4odHJ1ZSkp
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgfQogICAgICAgICBpZiAoZGlkU2V0Q29uc3RhbnQpIHsKICAgICAgICAgICAg
IG1fZm91bmRDb25zdGFudHMgPSB0cnVlOwotICAgICAgICAgICAgbm9kZS5zZXRDYW5FeGl0KGZh
bHNlKTsKKyAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgTm9kZSYgY2hpbGQgPSBtX2dyYXBoW25vZGUuY2hp
bGQxKCldOwotICAgICAgICBpZiAoaXNCb29sZWFuU3BlY3VsYXRpb24oY2hpbGQucHJlZGljdGlv
bigpKSkKKyAgICAgICAgTm9kZSogY2hpbGQgPSBub2RlLT5jaGlsZDEoKS5ub2RlKCk7CisgICAg
ICAgIGlmIChpc0Jvb2xlYW5TcGVjdWxhdGlvbihjaGlsZC0+cHJlZGljdGlvbigpKSkKICAgICAg
ICAgICAgIHNwZWN1bGF0ZUJvb2xlYW5VbmFyeShub2RlKTsKLSAgICAgICAgZWxzZSBpZiAoY2hp
bGQuc2hvdWxkU3BlY3VsYXRlTm9uU3RyaW5nQ2VsbE9yT3RoZXIoKSkgewotICAgICAgICAgICAg
bm9kZS5zZXRDYW5FeGl0KHRydWUpOwotICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgp
KS5maWx0ZXIoKFNwZWNDZWxsICYgflNwZWNTdHJpbmcpIHwgU3BlY090aGVyKTsKLSAgICAgICAg
fSBlbHNlIGlmIChjaGlsZC5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpCisgICAgICAgIGVsc2Ug
aWYgKGNoaWxkLT5zaG91bGRTcGVjdWxhdGVOb25TdHJpbmdDZWxsT3JPdGhlcigpKSB7CisgICAg
ICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOworICAgICAgICAgICAgZm9yTm9kZShjaGls
ZCkuZmlsdGVyKChTcGVjQ2VsbCAmIH5TcGVjU3RyaW5nKSB8IFNwZWNPdGhlcik7CisgICAgICAg
IH0gZWxzZSBpZiAoY2hpbGQtPnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKSkKICAgICAgICAgICAg
IHNwZWN1bGF0ZUludDMyVW5hcnkobm9kZSk7Ci0gICAgICAgIGVsc2UgaWYgKGNoaWxkLnNob3Vs
ZFNwZWN1bGF0ZU51bWJlcigpKQorICAgICAgICBlbHNlIGlmIChjaGlsZC0+c2hvdWxkU3BlY3Vs
YXRlTnVtYmVyKCkpCiAgICAgICAgICAgICBzcGVjdWxhdGVOdW1iZXJVbmFyeShub2RlKTsKICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgbm9kZS5zZXRDYW5FeGl0KGZhbHNlKTsKLSAgICAgICAg
Zm9yTm9kZShub2RlSW5kZXgpLnNldChTcGVjQm9vbGVhbik7CisgICAgICAgICAgICBub2RlLT5z
ZXRDYW5FeGl0KGZhbHNlKTsKKyAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0Jvb2xlYW4p
OwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIApAQCAtNjc2LDM2ICs2NzUsMzYgQEAg
Ym9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgIGNhc2UgSXNTdHJp
bmc6CiAgICAgY2FzZSBJc09iamVjdDoKICAgICBjYXNlIElzRnVuY3Rpb246IHsKLSAgICAgICAg
bm9kZS5zZXRDYW5FeGl0KG5vZGUub3AoKSA9PSBJc1VuZGVmaW5lZCAmJiBtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0Rm9yKG5vZGUuY29kZU9yaWdpbiktPm1hc3F1ZXJhZGVzQXNVbmRlZmluZWRX
YXRjaHBvaW50KCktPmlzU3RpbGxWYWxpZCgpKTsKLSAgICAgICAgSlNWYWx1ZSBjaGlsZCA9IGZv
ck5vZGUobm9kZS5jaGlsZDEoKSkudmFsdWUoKTsKKyAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChu
b2RlLT5vcCgpID09IElzVW5kZWZpbmVkICYmIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3RGb3Io
bm9kZS0+Y29kZU9yaWdpbiktPm1hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50KCktPmlz
U3RpbGxWYWxpZCgpKTsKKyAgICAgICAgSlNWYWx1ZSBjaGlsZCA9IGZvck5vZGUobm9kZS0+Y2hp
bGQxKCkpLnZhbHVlKCk7CiAgICAgICAgIGlmIChjaGlsZCkgewogICAgICAgICAgICAgYm9vbCBj
b25zdGFudFdhc1NldDsKLSAgICAgICAgICAgIHN3aXRjaCAobm9kZS5vcCgpKSB7CisgICAgICAg
ICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKICAgICAgICAgICAgIGNhc2UgSXNVbmRlZmluZWQ6
Ci0gICAgICAgICAgICAgICAgaWYgKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3RGb3Iobm9kZS5j
b2RlT3JpZ2luKS0+bWFzcXVlcmFkZXNBc1VuZGVmaW5lZFdhdGNocG9pbnQoKS0+aXNTdGlsbFZh
bGlkKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgY29uc3RhbnRXYXNTZXQgPSB0cnlTZXRDb25z
dGFudChub2RlSW5kZXgsIGpzQm9vbGVhbigKKyAgICAgICAgICAgICAgICBpZiAobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdEZvcihub2RlLT5jb2RlT3JpZ2luKS0+bWFzcXVlcmFkZXNBc1VuZGVm
aW5lZFdhdGNocG9pbnQoKS0+aXNTdGlsbFZhbGlkKCkpIHsKKyAgICAgICAgICAgICAgICAgICAg
Y29uc3RhbnRXYXNTZXQgPSB0cnlTZXRDb25zdGFudChub2RlLCBqc0Jvb2xlYW4oCiAgICAgICAg
ICAgICAgICAgICAgICAgICBjaGlsZC5pc0NlbGwoKQogICAgICAgICAgICAgICAgICAgICAgICAg
PyBmYWxzZSAKICAgICAgICAgICAgICAgICAgICAgICAgIDogY2hpbGQuaXNVbmRlZmluZWQoKSkp
OwogICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnN0YW50
V2FzU2V0ID0gdHJ5U2V0Q29uc3RhbnQobm9kZUluZGV4LCBqc0Jvb2xlYW4oCisgICAgICAgICAg
ICAgICAgICAgIGNvbnN0YW50V2FzU2V0ID0gdHJ5U2V0Q29uc3RhbnQobm9kZSwganNCb29sZWFu
KAogICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGQuaXNDZWxsKCkKLSAgICAgICAgICAgICAg
ICAgICAgICAgID8gY2hpbGQuYXNDZWxsKCktPnN0cnVjdHVyZSgpLT5tYXNxdWVyYWRlc0FzVW5k
ZWZpbmVkKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3RGb3Iobm9kZS5jb2RlT3JpZ2luKSkKKyAg
ICAgICAgICAgICAgICAgICAgICAgID8gY2hpbGQuYXNDZWxsKCktPnN0cnVjdHVyZSgpLT5tYXNx
dWVyYWRlc0FzVW5kZWZpbmVkKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3RGb3Iobm9kZS0+Y29k
ZU9yaWdpbikpCiAgICAgICAgICAgICAgICAgICAgICAgICA6IGNoaWxkLmlzVW5kZWZpbmVkKCkp
KTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICBjYXNlIElzQm9vbGVhbjoKLSAgICAgICAgICAgICAgICBjb25zdGFudFdhc1NldCA9IHRyeVNl
dENvbnN0YW50KG5vZGVJbmRleCwganNCb29sZWFuKGNoaWxkLmlzQm9vbGVhbigpKSk7CisgICAg
ICAgICAgICAgICAgY29uc3RhbnRXYXNTZXQgPSB0cnlTZXRDb25zdGFudChub2RlLCBqc0Jvb2xl
YW4oY2hpbGQuaXNCb29sZWFuKCkpKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgIGNhc2UgSXNOdW1iZXI6Ci0gICAgICAgICAgICAgICAgY29uc3RhbnRXYXNTZXQgPSB0cnlT
ZXRDb25zdGFudChub2RlSW5kZXgsIGpzQm9vbGVhbihjaGlsZC5pc051bWJlcigpKSk7CisgICAg
ICAgICAgICAgICAgY29uc3RhbnRXYXNTZXQgPSB0cnlTZXRDb25zdGFudChub2RlLCBqc0Jvb2xl
YW4oY2hpbGQuaXNOdW1iZXIoKSkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgY2FzZSBJc1N0cmluZzoKLSAgICAgICAgICAgICAgICBjb25zdGFudFdhc1NldCA9IHRyeVNl
dENvbnN0YW50KG5vZGVJbmRleCwganNCb29sZWFuKGlzSlNTdHJpbmcoY2hpbGQpKSk7CisgICAg
ICAgICAgICAgICAgY29uc3RhbnRXYXNTZXQgPSB0cnlTZXRDb25zdGFudChub2RlLCBqc0Jvb2xl
YW4oaXNKU1N0cmluZyhjaGlsZCkpKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgIGNhc2UgSXNPYmplY3Q6CiAgICAgICAgICAgICAgICAgaWYgKGNoaWxkLmlzTnVsbCgpIHx8
ICFjaGlsZC5pc09iamVjdCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnN0YW50V2FzU2V0
ID0gdHJ5U2V0Q29uc3RhbnQobm9kZUluZGV4LCBqc0Jvb2xlYW4oY2hpbGQuaXNOdWxsKCkpKTsK
KyAgICAgICAgICAgICAgICAgICAgY29uc3RhbnRXYXNTZXQgPSB0cnlTZXRDb25zdGFudChub2Rl
LCBqc0Jvb2xlYW4oY2hpbGQuaXNOdWxsKCkpKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgZGVmYXVsdDoKQEAgLTcxOCw2MSArNzE3
LDYxIEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAg
ICAgIH0KICAgICAgICAgfQogCi0gICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoU3BlY0Jv
b2xlYW4pOworICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjQm9vbGVhbik7CiAgICAgICAg
IGJyZWFrOwogICAgIH0KIAogICAgIGNhc2UgVHlwZU9mOiB7CiAgICAgICAgIEpTR2xvYmFsRGF0
YSogZ2xvYmFsRGF0YSA9IG1fY29kZUJsb2NrLT5nbG9iYWxEYXRhKCk7Ci0gICAgICAgIEpTVmFs
dWUgY2hpbGQgPSBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLnZhbHVlKCk7Ci0gICAgICAgIEFic3Ry
YWN0VmFsdWUmIGFic3RyYWN0Q2hpbGQgPSBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpOworICAgICAg
ICBKU1ZhbHVlIGNoaWxkID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSkudmFsdWUoKTsKKyAgICAg
ICAgQWJzdHJhY3RWYWx1ZSYgYWJzdHJhY3RDaGlsZCA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkp
OwogICAgICAgICBpZiAoY2hpbGQpIHsKLSAgICAgICAgICAgIEpTVmFsdWUgdHlwZVN0cmluZyA9
IGpzVHlwZVN0cmluZ0ZvclZhbHVlKCpnbG9iYWxEYXRhLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0Rm9yKG5vZGUuY29kZU9yaWdpbiksIGNoaWxkKTsKLSAgICAgICAgICAgIGlmICh0cnlTZXRD
b25zdGFudChub2RlSW5kZXgsIHR5cGVTdHJpbmcpKSB7CisgICAgICAgICAgICBKU1ZhbHVlIHR5
cGVTdHJpbmcgPSBqc1R5cGVTdHJpbmdGb3JWYWx1ZSgqZ2xvYmFsRGF0YSwgbV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdEZvcihub2RlLT5jb2RlT3JpZ2luKSwgY2hpbGQpOworICAgICAgICAgICAg
aWYgKHRyeVNldENvbnN0YW50KG5vZGUsIHR5cGVTdHJpbmcpKSB7CiAgICAgICAgICAgICAgICAg
bV9mb3VuZENvbnN0YW50cyA9IHRydWU7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICB9CiAgICAgICAgIH0gZWxzZSBpZiAoaXNOdW1iZXJTcGVjdWxhdGlvbihhYnN0cmFjdENo
aWxkLm1fdHlwZSkpIHsKLSAgICAgICAgICAgIGlmICh0cnlTZXRDb25zdGFudChub2RlSW5kZXgs
IGdsb2JhbERhdGEtPnNtYWxsU3RyaW5ncy5udW1iZXJTdHJpbmcoKSkpIHsKLSAgICAgICAgICAg
ICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjTnVtYmVyKTsKKyAgICAgICAg
ICAgIGlmICh0cnlTZXRDb25zdGFudChub2RlLCBnbG9iYWxEYXRhLT5zbWFsbFN0cmluZ3MubnVt
YmVyU3RyaW5nKCkpKSB7CisgICAgICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDEoKSku
ZmlsdGVyKFNwZWNOdW1iZXIpOwogICAgICAgICAgICAgICAgIG1fZm91bmRDb25zdGFudHMgPSB0
cnVlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICB9IGVs
c2UgaWYgKGlzU3RyaW5nU3BlY3VsYXRpb24oYWJzdHJhY3RDaGlsZC5tX3R5cGUpKSB7Ci0gICAg
ICAgICAgICBpZiAodHJ5U2V0Q29uc3RhbnQobm9kZUluZGV4LCBnbG9iYWxEYXRhLT5zbWFsbFN0
cmluZ3Muc3RyaW5nU3RyaW5nKCkpKSB7Ci0gICAgICAgICAgICAgICAgZm9yTm9kZShub2RlLmNo
aWxkMSgpKS5maWx0ZXIoU3BlY1N0cmluZyk7CisgICAgICAgICAgICBpZiAodHJ5U2V0Q29uc3Rh
bnQobm9kZSwgZ2xvYmFsRGF0YS0+c21hbGxTdHJpbmdzLnN0cmluZ1N0cmluZygpKSkgeworICAg
ICAgICAgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRlcihTcGVjU3RyaW5nKTsK
ICAgICAgICAgICAgICAgICBtX2ZvdW5kQ29uc3RhbnRzID0gdHJ1ZTsKICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIGlmIChpc0ZpbmFsT2JqZWN0
U3BlY3VsYXRpb24oYWJzdHJhY3RDaGlsZC5tX3R5cGUpIHx8IGlzQXJyYXlTcGVjdWxhdGlvbihh
YnN0cmFjdENoaWxkLm1fdHlwZSkgfHwgaXNBcmd1bWVudHNTcGVjdWxhdGlvbihhYnN0cmFjdENo
aWxkLm1fdHlwZSkpIHsKLSAgICAgICAgICAgIGlmICh0cnlTZXRDb25zdGFudChub2RlSW5kZXgs
IGdsb2JhbERhdGEtPnNtYWxsU3RyaW5ncy5vYmplY3RTdHJpbmcoKSkpIHsKLSAgICAgICAgICAg
ICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjRmluYWxPYmplY3QgfCBTcGVj
QXJyYXkgfCBTcGVjQXJndW1lbnRzKTsKKyAgICAgICAgICAgIGlmICh0cnlTZXRDb25zdGFudChu
b2RlLCBnbG9iYWxEYXRhLT5zbWFsbFN0cmluZ3Mub2JqZWN0U3RyaW5nKCkpKSB7CisgICAgICAg
ICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDEoKSkuZmlsdGVyKFNwZWNGaW5hbE9iamVjdCB8
IFNwZWNBcnJheSB8IFNwZWNBcmd1bWVudHMpOwogICAgICAgICAgICAgICAgIG1fZm91bmRDb25z
dGFudHMgPSB0cnVlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAg
ICAgICB9IGVsc2UgaWYgKGlzRnVuY3Rpb25TcGVjdWxhdGlvbihhYnN0cmFjdENoaWxkLm1fdHlw
ZSkpIHsKLSAgICAgICAgICAgIGlmICh0cnlTZXRDb25zdGFudChub2RlSW5kZXgsIGdsb2JhbERh
dGEtPnNtYWxsU3RyaW5ncy5mdW5jdGlvblN0cmluZygpKSkgewotICAgICAgICAgICAgICAgIGZv
ck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNGdW5jdGlvbik7CisgICAgICAgICAgICBp
ZiAodHJ5U2V0Q29uc3RhbnQobm9kZSwgZ2xvYmFsRGF0YS0+c21hbGxTdHJpbmdzLmZ1bmN0aW9u
U3RyaW5nKCkpKSB7CisgICAgICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDEoKSkuZmls
dGVyKFNwZWNGdW5jdGlvbik7CiAgICAgICAgICAgICAgICAgbV9mb3VuZENvbnN0YW50cyA9IHRy
dWU7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxz
ZSBpZiAoaXNCb29sZWFuU3BlY3VsYXRpb24oYWJzdHJhY3RDaGlsZC5tX3R5cGUpKSB7Ci0gICAg
ICAgICAgICBpZiAodHJ5U2V0Q29uc3RhbnQobm9kZUluZGV4LCBnbG9iYWxEYXRhLT5zbWFsbFN0
cmluZ3MuYm9vbGVhblN0cmluZygpKSkgewotICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZS5j
aGlsZDEoKSkuZmlsdGVyKFNwZWNCb29sZWFuKTsKKyAgICAgICAgICAgIGlmICh0cnlTZXRDb25z
dGFudChub2RlLCBnbG9iYWxEYXRhLT5zbWFsbFN0cmluZ3MuYm9vbGVhblN0cmluZygpKSkgewor
ICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRlcihTcGVjQm9vbGVh
bik7CiAgICAgICAgICAgICAgICAgbV9mb3VuZENvbnN0YW50cyA9IHRydWU7CiAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICBOb2RlJiBjaGlsZE5vZGUgPSBtX2dyYXBoW25vZGUuY2hpbGQxKCldOwotICAgICAgICAgICAg
aWYgKGlzQ2VsbFNwZWN1bGF0aW9uKGNoaWxkTm9kZS5wcmVkaWN0aW9uKCkpKSB7Ci0gICAgICAg
ICAgICAgICAgaWYgKGlzU3RyaW5nU3BlY3VsYXRpb24oY2hpbGROb2RlLnByZWRpY3Rpb24oKSkp
Ci0gICAgICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNT
dHJpbmcpOworICAgICAgICAgICAgTm9kZSogY2hpbGROb2RlID0gbm9kZS0+Y2hpbGQxKCkubm9k
ZSgpOworICAgICAgICAgICAgaWYgKGlzQ2VsbFNwZWN1bGF0aW9uKGNoaWxkTm9kZS0+cHJlZGlj
dGlvbigpKSkgeworICAgICAgICAgICAgICAgIGlmIChpc1N0cmluZ1NwZWN1bGF0aW9uKGNoaWxk
Tm9kZS0+cHJlZGljdGlvbigpKSkKKyAgICAgICAgICAgICAgICAgICAgZm9yTm9kZShjaGlsZE5v
ZGUpLmZpbHRlcihTcGVjU3RyaW5nKTsKICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAg
ICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNDZWxsKTsKLSAgICAg
ICAgICAgICAgICBub2RlLnNldENhbkV4aXQodHJ1ZSk7CisgICAgICAgICAgICAgICAgICAgIGZv
ck5vZGUoY2hpbGROb2RlKS5maWx0ZXIoU3BlY0NlbGwpOworICAgICAgICAgICAgICAgIG5vZGUt
PnNldENhbkV4aXQodHJ1ZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgZm9y
Tm9kZShub2RlSW5kZXgpLnNldChTcGVjU3RyaW5nKTsKKyAgICAgICAgZm9yTm9kZShub2RlKS5z
ZXQoU3BlY1N0cmluZyk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgICAgIApAQCAt
NzgzLDI2ICs3ODIsMjYgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGlu
ZAogICAgIGNhc2UgQ29tcGFyZUVxOiB7CiAgICAgICAgIGJvb2wgY29uc3RhbnRXYXNTZXQgPSBm
YWxzZTsKIAotICAgICAgICBKU1ZhbHVlIGxlZnRDb25zdCA9IGZvck5vZGUobm9kZS5jaGlsZDEo
KSkudmFsdWUoKTsKLSAgICAgICAgSlNWYWx1ZSByaWdodENvbnN0ID0gZm9yTm9kZShub2RlLmNo
aWxkMigpKS52YWx1ZSgpOworICAgICAgICBKU1ZhbHVlIGxlZnRDb25zdCA9IGZvck5vZGUobm9k
ZS0+Y2hpbGQxKCkpLnZhbHVlKCk7CisgICAgICAgIEpTVmFsdWUgcmlnaHRDb25zdCA9IGZvck5v
ZGUobm9kZS0+Y2hpbGQyKCkpLnZhbHVlKCk7CiAgICAgICAgIGlmIChsZWZ0Q29uc3QgJiYgcmln
aHRDb25zdCAmJiBsZWZ0Q29uc3QuaXNOdW1iZXIoKSAmJiByaWdodENvbnN0LmlzTnVtYmVyKCkp
IHsKICAgICAgICAgICAgIGRvdWJsZSBhID0gbGVmdENvbnN0LmFzTnVtYmVyKCk7CiAgICAgICAg
ICAgICBkb3VibGUgYiA9IHJpZ2h0Q29uc3QuYXNOdW1iZXIoKTsKICAgICAgICAgICAgIHN3aXRj
aCAobm9kZS5vcCgpKSB7CiAgICAgICAgICAgICBjYXNlIENvbXBhcmVMZXNzOgotICAgICAgICAg
ICAgICAgIGNvbnN0YW50V2FzU2V0ID0gdHJ5U2V0Q29uc3RhbnQobm9kZUluZGV4LCBqc0Jvb2xl
YW4oYSA8IGIpKTsKKyAgICAgICAgICAgICAgICBjb25zdGFudFdhc1NldCA9IHRyeVNldENvbnN0
YW50KG5vZGUsIGpzQm9vbGVhbihhIDwgYikpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgY2FzZSBDb21wYXJlTGVzc0VxOgotICAgICAgICAgICAgICAgIGNvbnN0YW50V2Fz
U2V0ID0gdHJ5U2V0Q29uc3RhbnQobm9kZUluZGV4LCBqc0Jvb2xlYW4oYSA8PSBiKSk7CisgICAg
ICAgICAgICAgICAgY29uc3RhbnRXYXNTZXQgPSB0cnlTZXRDb25zdGFudChub2RlLCBqc0Jvb2xl
YW4oYSA8PSBiKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIENv
bXBhcmVHcmVhdGVyOgotICAgICAgICAgICAgICAgIGNvbnN0YW50V2FzU2V0ID0gdHJ5U2V0Q29u
c3RhbnQobm9kZUluZGV4LCBqc0Jvb2xlYW4oYSA+IGIpKTsKKyAgICAgICAgICAgICAgICBjb25z
dGFudFdhc1NldCA9IHRyeVNldENvbnN0YW50KG5vZGUsIGpzQm9vbGVhbihhID4gYikpOwogICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBDb21wYXJlR3JlYXRlckVxOgot
ICAgICAgICAgICAgICAgIGNvbnN0YW50V2FzU2V0ID0gdHJ5U2V0Q29uc3RhbnQobm9kZUluZGV4
LCBqc0Jvb2xlYW4oYSA+PSBiKSk7CisgICAgICAgICAgICAgICAgY29uc3RhbnRXYXNTZXQgPSB0
cnlTZXRDb25zdGFudChub2RlLCBqc0Jvb2xlYW4oYSA+PSBiKSk7CiAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICBjYXNlIENvbXBhcmVFcToKLSAgICAgICAgICAgICAgICBjb25z
dGFudFdhc1NldCA9IHRyeVNldENvbnN0YW50KG5vZGVJbmRleCwganNCb29sZWFuKGEgPT0gYikp
OworICAgICAgICAgICAgICAgIGNvbnN0YW50V2FzU2V0ID0gdHJ5U2V0Q29uc3RhbnQobm9kZSwg
anNCb29sZWFuKGEgPT0gYikpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
ZGVmYXVsdDoKICAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTgxMSwy
NCArODEwLDI0IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAg
ICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgaWYgKCFjb25zdGFudFdh
c1NldCAmJiBub2RlLm9wKCkgPT0gQ29tcGFyZUVxKSB7Ci0gICAgICAgICAgICBTcGVjdWxhdGVk
VHlwZSBsZWZ0VHlwZSA9IGZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlOwotICAgICAgICAg
ICAgU3BlY3VsYXRlZFR5cGUgcmlnaHRUeXBlID0gZm9yTm9kZShub2RlLmNoaWxkMigpKS5tX3R5
cGU7CisgICAgICAgIGlmICghY29uc3RhbnRXYXNTZXQgJiYgbm9kZS0+b3AoKSA9PSBDb21wYXJl
RXEpIHsKKyAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIGxlZnRUeXBlID0gZm9yTm9kZShub2Rl
LT5jaGlsZDEoKSkubV90eXBlOworICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgcmlnaHRUeXBl
ID0gZm9yTm9kZShub2RlLT5jaGlsZDIoKSkubV90eXBlOwogICAgICAgICAgICAgaWYgKChpc0lu
dDMyU3BlY3VsYXRpb24obGVmdFR5cGUpICYmIGlzT3RoZXJTcGVjdWxhdGlvbihyaWdodFR5cGUp
KQogICAgICAgICAgICAgICAgIHx8IChpc090aGVyU3BlY3VsYXRpb24obGVmdFR5cGUpICYmIGlz
SW50MzJTcGVjdWxhdGlvbihyaWdodFR5cGUpKSkKLSAgICAgICAgICAgICAgICBjb25zdGFudFdh
c1NldCA9IHRyeVNldENvbnN0YW50KG5vZGVJbmRleCwganNCb29sZWFuKGZhbHNlKSk7CisgICAg
ICAgICAgICAgICAgY29uc3RhbnRXYXNTZXQgPSB0cnlTZXRDb25zdGFudChub2RlLCBqc0Jvb2xl
YW4oZmFsc2UpKTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgaWYgKGNvbnN0YW50V2Fz
U2V0KSB7CiAgICAgICAgICAgICBtX2ZvdW5kQ29uc3RhbnRzID0gdHJ1ZTsKLSAgICAgICAgICAg
IG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7CisgICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZh
bHNlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBm
b3JOb2RlKG5vZGVJbmRleCkuc2V0KFNwZWNCb29sZWFuKTsKKyAgICAgICAgZm9yTm9kZShub2Rl
KS5zZXQoU3BlY0Jvb2xlYW4pOwogICAgICAgICAKLSAgICAgICAgTm9kZSYgbGVmdCA9IG1fZ3Jh
cGhbbm9kZS5jaGlsZDEoKV07Ci0gICAgICAgIE5vZGUmIHJpZ2h0ID0gbV9ncmFwaFtub2RlLmNo
aWxkMigpXTsKKyAgICAgICAgTm9kZSogbGVmdCA9IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKKyAg
ICAgICAgTm9kZSogcmlnaHQgPSBub2RlLT5jaGlsZDIoKS5ub2RlKCk7CiAgICAgICAgIFNwZWN1
bGF0ZWRUeXBlIGZpbHRlcjsKICAgICAgICAgU3BlY3VsYXRlZFR5cGVDaGVja2VyIGNoZWNrZXI7
CiAgICAgICAgIGlmIChOb2RlOjpzaG91bGRTcGVjdWxhdGVJbnRlZ2VyKGxlZnQsIHJpZ2h0KSkg
ewpAQCAtODM4LDEyMSArODM3LDExOSBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5z
aWduZWQgaW5kCiAgICAgICAgICAgICBmaWx0ZXIgPSBTcGVjTnVtYmVyOwogICAgICAgICAgICAg
Y2hlY2tlciA9IGlzTnVtYmVyU3BlY3VsYXRpb247CiAgICAgICAgIH0gZWxzZSBpZiAobm9kZS5v
cCgpID09IENvbXBhcmVFcSkgewotICAgICAgICAgICAgaWYgKChtX2dyYXBoLmlzQ29uc3RhbnQo
bm9kZS5jaGlsZDEoKS5pbmRleCgpKQotICAgICAgICAgICAgICAgICAmJiBtX2dyYXBoLnZhbHVl
T2ZKU0NvbnN0YW50KG5vZGUuY2hpbGQxKCkuaW5kZXgoKSkuaXNOdWxsKCkpCi0gICAgICAgICAg
ICAgICAgfHwgKG1fZ3JhcGguaXNDb25zdGFudChub2RlLmNoaWxkMigpLmluZGV4KCkpCi0gICAg
ICAgICAgICAgICAgICAgICYmIG1fZ3JhcGgudmFsdWVPZkpTQ29uc3RhbnQobm9kZS5jaGlsZDIo
KS5pbmRleCgpKS5pc051bGwoKSkpIHsKKyAgICAgICAgICAgIGlmICgobV9ncmFwaC5pc0NvbnN0
YW50KGxlZnQpCisgICAgICAgICAgICAgICAgICYmIG1fZ3JhcGgudmFsdWVPZkpTQ29uc3RhbnQo
bGVmdCkuaXNOdWxsKCkpCisgICAgICAgICAgICAgICAgfHwgKG1fZ3JhcGguaXNDb25zdGFudChy
aWdodCkKKyAgICAgICAgICAgICAgICAgICAgJiYgbV9ncmFwaC52YWx1ZU9mSlNDb25zdGFudChy
aWdodCkuaXNOdWxsKCkpKSB7CiAgICAgICAgICAgICAgICAgLy8gV2UgY2FuIGV4aXQgaWYgd2Ug
aGF2ZW4ndCBmaXJlZCB0aGUgTWFzcXVlcmFkZXNBc1VuZGVmaW5kIHdhdGNocG9pbnQgeWV0Lgot
ICAgICAgICAgICAgICAgIG5vZGUuc2V0Q2FuRXhpdChtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
Rm9yKG5vZGUuY29kZU9yaWdpbiktPm1hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50KCkt
PmlzU3RpbGxWYWxpZCgpKTsKKyAgICAgICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3RGb3Iobm9kZS0+Y29kZU9yaWdpbiktPm1hc3F1ZXJhZGVzQXNV
bmRlZmluZWRXYXRjaHBvaW50KCktPmlzU3RpbGxWYWxpZCgpKTsKICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKGxlZnQu
c2hvdWxkU3BlY3VsYXRlU3RyaW5nKCkgfHwgcmlnaHQuc2hvdWxkU3BlY3VsYXRlU3RyaW5nKCkp
IHsKLSAgICAgICAgICAgICAgICBub2RlLnNldENhbkV4aXQoZmFsc2UpOworICAgICAgICAgICAg
aWYgKGxlZnQtPnNob3VsZFNwZWN1bGF0ZVN0cmluZygpIHx8IHJpZ2h0LT5zaG91bGRTcGVjdWxh
dGVTdHJpbmcoKSkgeworICAgICAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwog
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfSAKLSAgICAgICAgICAgIGlmIChs
ZWZ0LnNob3VsZFNwZWN1bGF0ZU5vblN0cmluZ0NlbGwoKSAmJiByaWdodC5zaG91bGRTcGVjdWxh
dGVOb25TdHJpbmdDZWxsT3JPdGhlcigpKSB7Ci0gICAgICAgICAgICAgICAgbm9kZS5zZXRDYW5F
eGl0KHRydWUpOwotICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVy
KFNwZWNDZWxsICYgflNwZWNTdHJpbmcpOwotICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZS5j
aGlsZDIoKSkuZmlsdGVyKChTcGVjQ2VsbCAmIH5TcGVjU3RyaW5nKSB8IFNwZWNPdGhlcik7Ci0g
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAobGVm
dC5zaG91bGRTcGVjdWxhdGVOb25TdHJpbmdDZWxsT3JPdGhlcigpICYmIHJpZ2h0LnNob3VsZFNw
ZWN1bGF0ZU5vblN0cmluZ0NlbGwoKSkgewotICAgICAgICAgICAgICAgIG5vZGUuc2V0Q2FuRXhp
dCh0cnVlKTsKLSAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcigo
U3BlY0NlbGwgJiB+U3BlY1N0cmluZykgfCBTcGVjT3RoZXIpOwotICAgICAgICAgICAgICAgIGZv
ck5vZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKFNwZWNDZWxsICYgflNwZWNTdHJpbmcpOwotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGxlZnQu
c2hvdWxkU3BlY3VsYXRlTm9uU3RyaW5nQ2VsbCgpICYmIHJpZ2h0LnNob3VsZFNwZWN1bGF0ZU5v
blN0cmluZ0NlbGwoKSkgewotICAgICAgICAgICAgICAgIG5vZGUuc2V0Q2FuRXhpdCh0cnVlKTsK
LSAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjQ2VsbCAm
IH5TcGVjU3RyaW5nKTsKLSAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQyKCkpLmZp
bHRlcihTcGVjQ2VsbCAmIH5TcGVjU3RyaW5nKTsKKyAgICAgICAgICAgIGlmIChsZWZ0LT5zaG91
bGRTcGVjdWxhdGVOb25TdHJpbmdDZWxsKCkgJiYgcmlnaHQtPnNob3VsZFNwZWN1bGF0ZU5vblN0
cmluZ0NlbGxPck90aGVyKCkpIHsKKyAgICAgICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRy
dWUpOworICAgICAgICAgICAgICAgIGZvck5vZGUobGVmdCkuZmlsdGVyKFNwZWNDZWxsICYgflNw
ZWNTdHJpbmcpOworICAgICAgICAgICAgICAgIGZvck5vZGUocmlnaHQpLmZpbHRlcigoU3BlY0Nl
bGwgJiB+U3BlY1N0cmluZykgfCBTcGVjT3RoZXIpOworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGxlZnQtPnNob3VsZFNwZWN1bGF0ZU5vblN0
cmluZ0NlbGxPck90aGVyKCkgJiYgcmlnaHQtPnNob3VsZFNwZWN1bGF0ZU5vblN0cmluZ0NlbGwo
KSkgeworICAgICAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7CisgICAgICAgICAg
ICAgICAgZm9yTm9kZShsZWZ0KS5maWx0ZXIoKFNwZWNDZWxsICYgflNwZWNTdHJpbmcpIHwgU3Bl
Y090aGVyKTsKKyAgICAgICAgICAgICAgICBmb3JOb2RlKHJpZ2h0KS5maWx0ZXIoU3BlY0NlbGwg
JiB+U3BlY1N0cmluZyk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBpZiAobGVmdC0+c2hvdWxkU3BlY3VsYXRlTm9uU3RyaW5nQ2VsbCgpICYmIHJp
Z2h0LT5zaG91bGRTcGVjdWxhdGVOb25TdHJpbmdDZWxsKCkpIHsKKyAgICAgICAgICAgICAgICBu
b2RlLT5zZXRDYW5FeGl0KHRydWUpOworICAgICAgICAgICAgICAgIGZvck5vZGUobGVmdCkuZmls
dGVyKFNwZWNDZWxsICYgflNwZWNTdHJpbmcpOworICAgICAgICAgICAgICAgIGZvck5vZGUocmln
aHQpLmZpbHRlcihTcGVjQ2VsbCAmIH5TcGVjU3RyaW5nKTsKICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgIH0KICAKICAgICAgICAgICAgIGZpbHRlciA9IFNwZWNUb3A7CiAgICAg
ICAgICAgICBjaGVja2VyID0gaXNBbnlTcGVjdWxhdGlvbjsKLSAgICAgICAgICAgIGNsb2JiZXJX
b3JsZChub2RlLmNvZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7CisgICAgICAgICAgICBjbG9iYmVy
V29ybGQobm9kZS0+Y29kZU9yaWdpbiwgaW5kZXhJbkJsb2NrKTsKICAgICAgICAgfSBlbHNlIHsK
ICAgICAgICAgICAgIGZpbHRlciA9IFNwZWNUb3A7CiAgICAgICAgICAgICBjaGVja2VyID0gaXNB
bnlTcGVjdWxhdGlvbjsKLSAgICAgICAgICAgIGNsb2JiZXJXb3JsZChub2RlLmNvZGVPcmlnaW4s
IGluZGV4SW5CbG9jayk7CisgICAgICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+Y29kZU9yaWdp
biwgaW5kZXhJbkJsb2NrKTsKICAgICAgICAgfQogICAgICAgICBub2RlLnNldENhbkV4aXQoCi0g
ICAgICAgICAgICAhY2hlY2tlcihmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkKLSAgICAg
ICAgICAgIHx8ICFjaGVja2VyKGZvck5vZGUobm9kZS5jaGlsZDIoKSkubV90eXBlKSk7Ci0gICAg
ICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKGZpbHRlcik7Ci0gICAgICAgIGZvck5v
ZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKGZpbHRlcik7CisgICAgICAgICAgICAhY2hlY2tlcihm
b3JOb2RlKGxlZnQpLm1fdHlwZSkKKyAgICAgICAgICAgIHx8ICFjaGVja2VyKGZvck5vZGUocmln
aHQpLm1fdHlwZSkpOworICAgICAgICBmb3JOb2RlKGxlZnQpLmZpbHRlcihmaWx0ZXIpOworICAg
ICAgICBmb3JOb2RlKHJpZ2h0KS5maWx0ZXIoZmlsdGVyKTsKICAgICAgICAgYnJlYWs7CiAgICAg
fQogICAgICAgICAgICAgCiAgICAgY2FzZSBDb21wYXJlU3RyaWN0RXE6IHsKLSAgICAgICAgSlNW
YWx1ZSBsZWZ0ID0gZm9yTm9kZShub2RlLmNoaWxkMSgpKS52YWx1ZSgpOwotICAgICAgICBKU1Zh
bHVlIHJpZ2h0ID0gZm9yTm9kZShub2RlLmNoaWxkMigpKS52YWx1ZSgpOworICAgICAgICBOb2Rl
KiBsZWZ0Tm9kZSA9IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKKyAgICAgICAgTm9kZSogcmlnaHRO
b2RlID0gbm9kZS0+Y2hpbGQyKCkubm9kZSgpOworICAgICAgICBKU1ZhbHVlIGxlZnQgPSBmb3JO
b2RlKGxlZnROb2RlKS52YWx1ZSgpOworICAgICAgICBKU1ZhbHVlIHJpZ2h0ID0gZm9yTm9kZShy
aWdodE5vZGUpLnZhbHVlKCk7CiAgICAgICAgIGlmIChsZWZ0ICYmIHJpZ2h0ICYmIGxlZnQuaXNO
dW1iZXIoKSAmJiByaWdodC5pc051bWJlcigpCi0gICAgICAgICAgICAmJiB0cnlTZXRDb25zdGFu
dChub2RlSW5kZXgsIGpzQm9vbGVhbihsZWZ0LmFzTnVtYmVyKCkgPT0gcmlnaHQuYXNOdW1iZXIo
KSkpKSB7CisgICAgICAgICAgICAmJiB0cnlTZXRDb25zdGFudChub2RlLCBqc0Jvb2xlYW4obGVm
dC5hc051bWJlcigpID09IHJpZ2h0LmFzTnVtYmVyKCkpKSkgewogICAgICAgICAgICAgbV9mb3Vu
ZENvbnN0YW50cyA9IHRydWU7CiAgICAgICAgICAgICBub2RlLnNldENhbkV4aXQoZmFsc2UpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgZm9yTm9kZShub2RlSW5kZXgp
LnNldChTcGVjQm9vbGVhbik7Ci0gICAgICAgIGlmIChtX2dyYXBoLmlzSlNDb25zdGFudChub2Rl
LmNoaWxkMSgpLmluZGV4KCkpKSB7Ci0gICAgICAgICAgICBKU1ZhbHVlIHZhbHVlID0gbV9ncmFw
aC52YWx1ZU9mSlNDb25zdGFudChub2RlLmNoaWxkMSgpLmluZGV4KCkpOworICAgICAgICBmb3JO
b2RlKG5vZGUpLnNldChTcGVjQm9vbGVhbik7CisgICAgICAgIGlmIChtX2dyYXBoLmlzSlNDb25z
dGFudChsZWZ0Tm9kZSkpIHsKKyAgICAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBtX2dyYXBoLnZh
bHVlT2ZKU0NvbnN0YW50KGxlZnROb2RlKTsKICAgICAgICAgICAgIGlmICghdmFsdWUuaXNOdW1i
ZXIoKSAmJiAhdmFsdWUuaXNTdHJpbmcoKSkgewotICAgICAgICAgICAgICAgIG5vZGUuc2V0Q2Fu
RXhpdChmYWxzZSk7CisgICAgICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CiAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAg
aWYgKG1fZ3JhcGguaXNKU0NvbnN0YW50KG5vZGUuY2hpbGQyKCkuaW5kZXgoKSkpIHsKLSAgICAg
ICAgICAgIEpTVmFsdWUgdmFsdWUgPSBtX2dyYXBoLnZhbHVlT2ZKU0NvbnN0YW50KG5vZGUuY2hp
bGQyKCkuaW5kZXgoKSk7CisgICAgICAgIGlmIChtX2dyYXBoLmlzSlNDb25zdGFudChyaWdodE5v
ZGUpKSB7CisgICAgICAgICAgICBKU1ZhbHVlIHZhbHVlID0gbV9ncmFwaC52YWx1ZU9mSlNDb25z
dGFudChyaWdodE5vZGUpOwogICAgICAgICAgICAgaWYgKCF2YWx1ZS5pc051bWJlcigpICYmICF2
YWx1ZS5pc1N0cmluZygpKSB7Ci0gICAgICAgICAgICAgICAgbm9kZS5zZXRDYW5FeGl0KGZhbHNl
KTsKKyAgICAgICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICBpZiAoTm9kZTo6
c2hvdWxkU3BlY3VsYXRlSW50ZWdlcigKLSAgICAgICAgICAgICAgICBtX2dyYXBoW25vZGUuY2hp
bGQxKCldLCBtX2dyYXBoW25vZGUuY2hpbGQyKCldKSkgeworICAgICAgICBpZiAoTm9kZTo6c2hv
dWxkU3BlY3VsYXRlSW50ZWdlcihsZWZ0Tm9kZSwgcmlnaHROb2RlKSkgewogICAgICAgICAgICAg
c3BlY3VsYXRlSW50MzJCaW5hcnkobm9kZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
fQotICAgICAgICBpZiAoTm9kZTo6c2hvdWxkU3BlY3VsYXRlTnVtYmVyKAotICAgICAgICAgICAg
ICAgIG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0sIG1fZ3JhcGhbbm9kZS5jaGlsZDIoKV0pKSB7Cisg
ICAgICAgIGlmIChOb2RlOjpzaG91bGRTcGVjdWxhdGVOdW1iZXIobGVmdE5vZGUsIHJpZ2h0Tm9k
ZSkpIHsKICAgICAgICAgICAgIHNwZWN1bGF0ZU51bWJlckJpbmFyeShub2RlKTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIE5vZGUmIGxlZnROb2RlID0gbV9ncmFwaFtu
b2RlLmNoaWxkMSgpXTsKLSAgICAgICAgTm9kZSYgcmlnaHROb2RlID0gbV9ncmFwaFtub2RlLmNo
aWxkMigpXTsKLSAgICAgICAgaWYgKGxlZnROb2RlLnNob3VsZFNwZWN1bGF0ZVN0cmluZygpIHx8
IHJpZ2h0Tm9kZS5zaG91bGRTcGVjdWxhdGVTdHJpbmcoKSkgewotICAgICAgICAgICAgbm9kZS5z
ZXRDYW5FeGl0KGZhbHNlKTsKKyAgICAgICAgaWYgKGxlZnROb2RlLT5zaG91bGRTcGVjdWxhdGVT
dHJpbmcoKSB8fCByaWdodE5vZGUtPnNob3VsZFNwZWN1bGF0ZVN0cmluZygpKSB7CisgICAgICAg
ICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9Ci0gICAgICAgIGlmIChsZWZ0Tm9kZS5zaG91bGRTcGVjdWxhdGVOb25TdHJpbmdDZWxsKCkg
JiYgcmlnaHROb2RlLnNob3VsZFNwZWN1bGF0ZU5vblN0cmluZ0NlbGwoKSkgeworICAgICAgICBp
ZiAobGVmdE5vZGUtPnNob3VsZFNwZWN1bGF0ZU5vblN0cmluZ0NlbGwoKSAmJiByaWdodE5vZGUt
PnNob3VsZFNwZWN1bGF0ZU5vblN0cmluZ0NlbGwoKSkgewogICAgICAgICAgICAgbm9kZS5zZXRD
YW5FeGl0KHRydWUpOwotICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIo
KFNwZWNDZWxsICYgflNwZWNTdHJpbmcpIHwgU3BlY090aGVyKTsKLSAgICAgICAgICAgIGZvck5v
ZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKChTcGVjQ2VsbCAmIH5TcGVjU3RyaW5nKSB8IFNwZWNP
dGhlcik7CisgICAgICAgICAgICBmb3JOb2RlKGxlZnROb2RlKS5maWx0ZXIoKFNwZWNDZWxsICYg
flNwZWNTdHJpbmcpIHwgU3BlY090aGVyKTsKKyAgICAgICAgICAgIGZvck5vZGUocmlnaHROb2Rl
KS5maWx0ZXIoKFNwZWNDZWxsICYgflNwZWNTdHJpbmcpIHwgU3BlY090aGVyKTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7Cisg
ICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICBicmVhazsKICAgICB9CiAg
ICAgICAgIAogICAgIGNhc2UgU3RyaW5nQ2hhckNvZGVBdDoKLSAgICAgICAgbm9kZS5zZXRDYW5F
eGl0KHRydWUpOwotICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjU3Ry
aW5nKTsKLSAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMigpKS5maWx0ZXIoU3BlY0ludDMyKTsK
LSAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChTcGVjSW50MzIpOworICAgICAgICBub2Rl
LT5zZXRDYW5FeGl0KHRydWUpOworICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5maWx0
ZXIoU3BlY1N0cmluZyk7CisgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQyKCkpLmZpbHRlcihT
cGVjSW50MzIpOworICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjSW50MzIpOwogICAgICAg
ICBicmVhazsKICAgICAgICAgCiAgICAgY2FzZSBTdHJpbmdDaGFyQXQ6Ci0gICAgICAgIG5vZGUu
c2V0Q2FuRXhpdCh0cnVlKTsKLSAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIo
U3BlY1N0cmluZyk7Ci0gICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJ
bnQzMik7Ci0gICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoU3BlY1N0cmluZyk7CisgICAg
ICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7CisgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQx
KCkpLmZpbHRlcihTcGVjU3RyaW5nKTsKKyAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDIoKSku
ZmlsdGVyKFNwZWNJbnQzMik7CisgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNTdHJpbmcp
OwogICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgIGNhc2UgR2V0QnlWYWw6IHsKLSAg
ICAgICAgbm9kZS5zZXRDYW5FeGl0KHRydWUpOwotICAgICAgICBzd2l0Y2ggKG5vZGUuYXJyYXlN
b2RlKCkudHlwZSgpKSB7CisgICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7CisgICAgICAg
IHN3aXRjaCAobm9kZS0+YXJyYXlNb2RlKCkudHlwZSgpKSB7CiAgICAgICAgIGNhc2UgQXJyYXk6
OlNlbGVjdFVzaW5nUHJlZGljdGlvbnM6CiAgICAgICAgIGNhc2UgQXJyYXk6OlVucHJvZmlsZWQ6
CiAgICAgICAgIGNhc2UgQXJyYXk6OlVuZGVjaWRlZDoKQEAgLTk2Miw4MSArOTU5LDgxIEBAIGJv
b2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgICAgIG1faXNW
YWxpZCA9IGZhbHNlOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6Okdl
bmVyaWM6Ci0gICAgICAgICAgICBjbG9iYmVyV29ybGQobm9kZS5jb2RlT3JpZ2luLCBpbmRleElu
QmxvY2spOwotICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLm1ha2VUb3AoKTsKKyAgICAg
ICAgICAgIGNsb2JiZXJXb3JsZChub2RlLT5jb2RlT3JpZ2luLCBpbmRleEluQmxvY2spOworICAg
ICAgICAgICAgZm9yTm9kZShub2RlKS5tYWtlVG9wKCk7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgY2FzZSBBcnJheTo6U3RyaW5nOgotICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxk
MigpKS5maWx0ZXIoU3BlY0ludDMyKTsKLSAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5z
ZXQoU3BlY1N0cmluZyk7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMigpKS5maWx0
ZXIoU3BlY0ludDMyKTsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNTdHJpbmcp
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OkFyZ3VtZW50czoKLSAg
ICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7Ci0gICAg
ICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkubWFrZVRvcCgpOworICAgICAgICAgICAgZm9yTm9k
ZShub2RlLT5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7CisgICAgICAgICAgICBmb3JOb2Rl
KG5vZGUpLm1ha2VUb3AoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEFycmF5
OjpJbnQzMjoKLSAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJ
bnQzMik7Ci0gICAgICAgICAgICBpZiAobm9kZS5hcnJheU1vZGUoKS5pc091dE9mQm91bmRzKCkp
IHsKLSAgICAgICAgICAgICAgICBjbG9iYmVyV29ybGQobm9kZS5jb2RlT3JpZ2luLCBpbmRleElu
QmxvY2spOwotICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5tYWtlVG9wKCk7Cisg
ICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMigpKS5maWx0ZXIoU3BlY0ludDMyKTsKKyAg
ICAgICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS5pc091dE9mQm91bmRzKCkpIHsKKyAgICAg
ICAgICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+Y29kZU9yaWdpbiwgaW5kZXhJbkJsb2NrKTsK
KyAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLm1ha2VUb3AoKTsKICAgICAgICAgICAgIH0g
ZWxzZQotICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoU3BlY0ludDMyKTsK
KyAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjSW50MzIpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OkRvdWJsZToKLSAgICAgICAgICAgIGZvck5v
ZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7Ci0gICAgICAgICAgICBpZiAobm9k
ZS5hcnJheU1vZGUoKS5pc091dE9mQm91bmRzKCkpIHsKLSAgICAgICAgICAgICAgICBjbG9iYmVy
V29ybGQobm9kZS5jb2RlT3JpZ2luLCBpbmRleEluQmxvY2spOwotICAgICAgICAgICAgICAgIGZv
ck5vZGUobm9kZUluZGV4KS5tYWtlVG9wKCk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKG5vZGUu
YXJyYXlNb2RlKCkuaXNTYW5lQ2hhaW4oKSkKLSAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGVJ
bmRleCkuc2V0KFNwZWNEb3VibGUpOworICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDIo
KSkuZmlsdGVyKFNwZWNJbnQzMik7CisgICAgICAgICAgICBpZiAobm9kZS0+YXJyYXlNb2RlKCku
aXNPdXRPZkJvdW5kcygpKSB7CisgICAgICAgICAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUtPmNv
ZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7CisgICAgICAgICAgICAgICAgZm9yTm9kZShub2RlKS5t
YWtlVG9wKCk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKG5vZGUtPmFycmF5TW9kZSgpLmlzU2Fu
ZUNoYWluKCkpCisgICAgICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0RvdWJsZSk7
CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNl
dChTcGVjRG91YmxlUmVhbCk7CisgICAgICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3Bl
Y0RvdWJsZVJlYWwpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OkNv
bnRpZ3VvdXM6CiAgICAgICAgIGNhc2UgQXJyYXk6OkFycmF5U3RvcmFnZToKICAgICAgICAgY2Fz
ZSBBcnJheTo6U2xvd1B1dEFycmF5U3RvcmFnZToKLSAgICAgICAgICAgIGZvck5vZGUobm9kZS5j
aGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7Ci0gICAgICAgICAgICBpZiAobm9kZS5hcnJheU1v
ZGUoKS5pc091dE9mQm91bmRzKCkpCi0gICAgICAgICAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUu
Y29kZU9yaWdpbiwgaW5kZXhJbkJsb2NrKTsKLSAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4
KS5tYWtlVG9wKCk7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMigpKS5maWx0ZXIo
U3BlY0ludDMyKTsKKyAgICAgICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS5pc091dE9mQm91
bmRzKCkpCisgICAgICAgICAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUtPmNvZGVPcmlnaW4sIGlu
ZGV4SW5CbG9jayk7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLm1ha2VUb3AoKTsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEFycmF5OjpJbnQ4QXJyYXk6Ci0gICAgICAgICAg
ICBmb3JOb2RlKG5vZGUuY2hpbGQyKCkpLmZpbHRlcihTcGVjSW50MzIpOwotICAgICAgICAgICAg
Zm9yTm9kZShub2RlSW5kZXgpLnNldChTcGVjSW50MzIpOworICAgICAgICAgICAgZm9yTm9kZShu
b2RlLT5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7CisgICAgICAgICAgICBmb3JOb2RlKG5v
ZGUpLnNldChTcGVjSW50MzIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJy
YXk6OkludDE2QXJyYXk6Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQyKCkpLmZpbHRl
cihTcGVjSW50MzIpOwotICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChTcGVjSW50
MzIpOworICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQz
Mik7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjSW50MzIpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OkludDMyQXJyYXk6Ci0gICAgICAgICAgICBm
b3JOb2RlKG5vZGUuY2hpbGQyKCkpLmZpbHRlcihTcGVjSW50MzIpOwotICAgICAgICAgICAgZm9y
Tm9kZShub2RlSW5kZXgpLnNldChTcGVjSW50MzIpOworICAgICAgICAgICAgZm9yTm9kZShub2Rl
LT5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUp
LnNldChTcGVjSW50MzIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6
OlVpbnQ4QXJyYXk6Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQyKCkpLmZpbHRlcihT
cGVjSW50MzIpOwotICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChTcGVjSW50MzIp
OworICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7
CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjSW50MzIpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OlVpbnQ4Q2xhbXBlZEFycmF5OgotICAgICAgICAg
ICAgZm9yTm9kZShub2RlLmNoaWxkMigpKS5maWx0ZXIoU3BlY0ludDMyKTsKLSAgICAgICAgICAg
IGZvck5vZGUobm9kZUluZGV4KS5zZXQoU3BlY0ludDMyKTsKKyAgICAgICAgICAgIGZvck5vZGUo
bm9kZS0+Y2hpbGQyKCkpLmZpbHRlcihTcGVjSW50MzIpOworICAgICAgICAgICAgZm9yTm9kZShu
b2RlKS5zZXQoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEFy
cmF5OjpVaW50MTZBcnJheToKLSAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDIoKSkuZmls
dGVyKFNwZWNJbnQzMik7Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFNwZWNJ
bnQzMik7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMigpKS5maWx0ZXIoU3BlY0lu
dDMyKTsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNJbnQzMik7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6VWludDMyQXJyYXk6Ci0gICAgICAgICAg
ICBmb3JOb2RlKG5vZGUuY2hpbGQyKCkpLmZpbHRlcihTcGVjSW50MzIpOwotICAgICAgICAgICAg
aWYgKG5vZGUuc2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKQotICAgICAgICAgICAgICAgIGZvck5v
ZGUobm9kZUluZGV4KS5zZXQoU3BlY0ludDMyKTsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZS0+
Y2hpbGQyKCkpLmZpbHRlcihTcGVjSW50MzIpOworICAgICAgICAgICAgaWYgKG5vZGUtPnNob3Vs
ZFNwZWN1bGF0ZUludGVnZXIoKSkKKyAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChT
cGVjSW50MzIpOwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGZvck5vZGUobm9k
ZUluZGV4KS5zZXQoU3BlY0RvdWJsZSk7CisgICAgICAgICAgICAgICAgZm9yTm9kZShub2RlKS5z
ZXQoU3BlY0RvdWJsZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6
RmxvYXQzMkFycmF5OgotICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMigpKS5maWx0ZXIo
U3BlY0ludDMyKTsKLSAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoU3BlY0RvdWJs
ZSk7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMigpKS5maWx0ZXIoU3BlY0ludDMy
KTsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNEb3VibGUpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OkZsb2F0NjRBcnJheToKLSAgICAgICAgICAg
IGZvck5vZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7Ci0gICAgICAgICAgICBm
b3JOb2RlKG5vZGVJbmRleCkuc2V0KFNwZWNEb3VibGUpOworICAgICAgICAgICAgZm9yTm9kZShu
b2RlLT5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7CisgICAgICAgICAgICBmb3JOb2RlKG5v
ZGUpLnNldChTcGVjRG91YmxlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBkZWZhdWx0
OgogICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC0xMDQ3LDQzICsxMDQ0LDQz
IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgICAg
IAogICAgIGNhc2UgUHV0QnlWYWw6CiAgICAgY2FzZSBQdXRCeVZhbEFsaWFzOiB7Ci0gICAgICAg
IG5vZGUuc2V0Q2FuRXhpdCh0cnVlKTsKKyAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsK
ICAgICAgICAgRWRnZSBjaGlsZDEgPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApOwogICAg
ICAgICBFZGdlIGNoaWxkMiA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSk7CiAgICAgICAg
IEVkZ2UgY2hpbGQzID0gbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAyKTsKLSAgICAgICAgc3dp
dGNoIChub2RlLmFycmF5TW9kZSgpLm1vZGVGb3JQdXQoKS50eXBlKCkpIHsKKyAgICAgICAgc3dp
dGNoIChub2RlLT5hcnJheU1vZGUoKS5tb2RlRm9yUHV0KCkudHlwZSgpKSB7CiAgICAgICAgIGNh
c2UgQXJyYXk6OkZvcmNlRXhpdDoKICAgICAgICAgICAgIG1faXNWYWxpZCA9IGZhbHNlOwogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OkdlbmVyaWM6Ci0gICAgICAgICAg
ICBjbG9iYmVyV29ybGQobm9kZS5jb2RlT3JpZ2luLCBpbmRleEluQmxvY2spOworICAgICAgICAg
ICAgY2xvYmJlcldvcmxkKG5vZGUtPmNvZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6SW50MzI6CiAgICAgICAgICAgICBmb3JO
b2RlKGNoaWxkMSkuZmlsdGVyKFNwZWNDZWxsKTsKICAgICAgICAgICAgIGZvck5vZGUoY2hpbGQy
KS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGZvck5vZGUoY2hpbGQzKS5maWx0ZXIo
U3BlY0ludDMyKTsKLSAgICAgICAgICAgIGlmIChub2RlLmFycmF5TW9kZSgpLmlzT3V0T2ZCb3Vu
ZHMoKSkKLSAgICAgICAgICAgICAgICBjbG9iYmVyV29ybGQobm9kZS5jb2RlT3JpZ2luLCBpbmRl
eEluQmxvY2spOworICAgICAgICAgICAgaWYgKG5vZGUtPmFycmF5TW9kZSgpLmlzT3V0T2ZCb3Vu
ZHMoKSkKKyAgICAgICAgICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+Y29kZU9yaWdpbiwgaW5k
ZXhJbkJsb2NrKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEFycmF5OjpEb3Vi
bGU6CiAgICAgICAgICAgICBmb3JOb2RlKGNoaWxkMSkuZmlsdGVyKFNwZWNDZWxsKTsKICAgICAg
ICAgICAgIGZvck5vZGUoY2hpbGQyKS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGZv
ck5vZGUoY2hpbGQzKS5maWx0ZXIoU3BlY1JlYWxOdW1iZXIpOwotICAgICAgICAgICAgaWYgKG5v
ZGUuYXJyYXlNb2RlKCkuaXNPdXRPZkJvdW5kcygpKQotICAgICAgICAgICAgICAgIGNsb2JiZXJX
b3JsZChub2RlLmNvZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7CisgICAgICAgICAgICBpZiAobm9k
ZS0+YXJyYXlNb2RlKCkuaXNPdXRPZkJvdW5kcygpKQorICAgICAgICAgICAgICAgIGNsb2JiZXJX
b3JsZChub2RlLT5jb2RlT3JpZ2luLCBpbmRleEluQmxvY2spOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3VvdXM6CiAgICAgICAgIGNhc2UgQXJyYXk6OkFy
cmF5U3RvcmFnZToKICAgICAgICAgICAgIGZvck5vZGUoY2hpbGQxKS5maWx0ZXIoU3BlY0NlbGwp
OwogICAgICAgICAgICAgZm9yTm9kZShjaGlsZDIpLmZpbHRlcihTcGVjSW50MzIpOwotICAgICAg
ICAgICAgaWYgKG5vZGUuYXJyYXlNb2RlKCkuaXNPdXRPZkJvdW5kcygpKQotICAgICAgICAgICAg
ICAgIGNsb2JiZXJXb3JsZChub2RlLmNvZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7CisgICAgICAg
ICAgICBpZiAobm9kZS0+YXJyYXlNb2RlKCkuaXNPdXRPZkJvdW5kcygpKQorICAgICAgICAgICAg
ICAgIGNsb2JiZXJXb3JsZChub2RlLT5jb2RlT3JpZ2luLCBpbmRleEluQmxvY2spOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OlNsb3dQdXRBcnJheVN0b3JhZ2U6CiAg
ICAgICAgICAgICBmb3JOb2RlKGNoaWxkMSkuZmlsdGVyKFNwZWNDZWxsKTsKICAgICAgICAgICAg
IGZvck5vZGUoY2hpbGQyKS5maWx0ZXIoU3BlY0ludDMyKTsKLSAgICAgICAgICAgIGlmIChub2Rl
LmFycmF5TW9kZSgpLm1heVN0b3JlVG9Ib2xlKCkpCi0gICAgICAgICAgICAgICAgY2xvYmJlcldv
cmxkKG5vZGUuY29kZU9yaWdpbiwgaW5kZXhJbkJsb2NrKTsKKyAgICAgICAgICAgIGlmIChub2Rl
LT5hcnJheU1vZGUoKS5tYXlTdG9yZVRvSG9sZSgpKQorICAgICAgICAgICAgICAgIGNsb2JiZXJX
b3JsZChub2RlLT5jb2RlT3JpZ2luLCBpbmRleEluQmxvY2spOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIGNhc2UgQXJyYXk6OkFyZ3VtZW50czoKICAgICAgICAgICAgIGZvck5vZGUoY2hp
bGQxKS5maWx0ZXIoU3BlY0NlbGwpOwpAQCAtMTA5Miw3ICsxMDg5LDcgQEAgYm9vbCBBYnN0cmFj
dFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICBjYXNlIEFycmF5OjpJbnQ4QXJy
YXk6CiAgICAgICAgICAgICBmb3JOb2RlKGNoaWxkMSkuZmlsdGVyKFNwZWNDZWxsKTsKICAgICAg
ICAgICAgIGZvck5vZGUoY2hpbGQyKS5maWx0ZXIoU3BlY0ludDMyKTsKLSAgICAgICAgICAgIGlm
IChtX2dyYXBoW2NoaWxkM10uc2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKQorICAgICAgICAgICAg
aWYgKGNoaWxkMy0+c2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKQogICAgICAgICAgICAgICAgIGZv
ck5vZGUoY2hpbGQzKS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGVsc2UKICAgICAg
ICAgICAgICAgICBmb3JOb2RlKGNoaWxkMykuZmlsdGVyKFNwZWNOdW1iZXIpOwpAQCAtMTEwMCw3
ICsxMDk3LDcgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAg
ICAgICBjYXNlIEFycmF5OjpJbnQxNkFycmF5OgogICAgICAgICAgICAgZm9yTm9kZShjaGlsZDEp
LmZpbHRlcihTcGVjQ2VsbCk7CiAgICAgICAgICAgICBmb3JOb2RlKGNoaWxkMikuZmlsdGVyKFNw
ZWNJbnQzMik7Ci0gICAgICAgICAgICBpZiAobV9ncmFwaFtjaGlsZDNdLnNob3VsZFNwZWN1bGF0
ZUludGVnZXIoKSkKKyAgICAgICAgICAgIGlmIChjaGlsZDMtPnNob3VsZFNwZWN1bGF0ZUludGVn
ZXIoKSkKICAgICAgICAgICAgICAgICBmb3JOb2RlKGNoaWxkMykuZmlsdGVyKFNwZWNJbnQzMik7
CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgZm9yTm9kZShjaGlsZDMpLmZpbHRl
cihTcGVjTnVtYmVyKTsKQEAgLTExMDgsNyArMTEwNSw3IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6
ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgY2FzZSBBcnJheTo6SW50MzJBcnJheToKICAg
ICAgICAgICAgIGZvck5vZGUoY2hpbGQxKS5maWx0ZXIoU3BlY0NlbGwpOwogICAgICAgICAgICAg
Zm9yTm9kZShjaGlsZDIpLmZpbHRlcihTcGVjSW50MzIpOwotICAgICAgICAgICAgaWYgKG1fZ3Jh
cGhbY2hpbGQzXS5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpCisgICAgICAgICAgICBpZiAoY2hp
bGQzLT5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpCiAgICAgICAgICAgICAgICAgZm9yTm9kZShj
aGlsZDMpLmZpbHRlcihTcGVjSW50MzIpOwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAg
ICAgIGZvck5vZGUoY2hpbGQzKS5maWx0ZXIoU3BlY051bWJlcik7CkBAIC0xMTE2LDcgKzExMTMs
NyBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgIGNh
c2UgQXJyYXk6OlVpbnQ4QXJyYXk6CiAgICAgICAgICAgICBmb3JOb2RlKGNoaWxkMSkuZmlsdGVy
KFNwZWNDZWxsKTsKICAgICAgICAgICAgIGZvck5vZGUoY2hpbGQyKS5maWx0ZXIoU3BlY0ludDMy
KTsKLSAgICAgICAgICAgIGlmIChtX2dyYXBoW2NoaWxkM10uc2hvdWxkU3BlY3VsYXRlSW50ZWdl
cigpKQorICAgICAgICAgICAgaWYgKGNoaWxkMy0+c2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKQog
ICAgICAgICAgICAgICAgIGZvck5vZGUoY2hpbGQzKS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAg
ICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBmb3JOb2RlKGNoaWxkMykuZmlsdGVyKFNwZWNO
dW1iZXIpOwpAQCAtMTEyNCw3ICsxMTIxLDcgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRl
KHVuc2lnbmVkIGluZAogICAgICAgICBjYXNlIEFycmF5OjpVaW50OENsYW1wZWRBcnJheToKICAg
ICAgICAgICAgIGZvck5vZGUoY2hpbGQxKS5maWx0ZXIoU3BlY0NlbGwpOwogICAgICAgICAgICAg
Zm9yTm9kZShjaGlsZDIpLmZpbHRlcihTcGVjSW50MzIpOwotICAgICAgICAgICAgaWYgKG1fZ3Jh
cGhbY2hpbGQzXS5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpCisgICAgICAgICAgICBpZiAoY2hp
bGQzLT5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpCiAgICAgICAgICAgICAgICAgZm9yTm9kZShj
aGlsZDMpLmZpbHRlcihTcGVjSW50MzIpOwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAg
ICAgIGZvck5vZGUoY2hpbGQzKS5maWx0ZXIoU3BlY051bWJlcik7CkBAIC0xMTMyLDcgKzExMjks
NyBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgIGNh
c2UgQXJyYXk6OlVpbnQxNkFycmF5OgogICAgICAgICAgICAgZm9yTm9kZShjaGlsZDEpLmZpbHRl
cihTcGVjQ2VsbCk7CiAgICAgICAgICAgICBmb3JOb2RlKGNoaWxkMikuZmlsdGVyKFNwZWNJbnQz
Mik7Ci0gICAgICAgICAgICBpZiAobV9ncmFwaFtjaGlsZDNdLnNob3VsZFNwZWN1bGF0ZUludGVn
ZXIoKSkKKyAgICAgICAgICAgIGlmIChjaGlsZDMtPnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKSkK
ICAgICAgICAgICAgICAgICBmb3JOb2RlKGNoaWxkMykuZmlsdGVyKFNwZWNJbnQzMik7CiAgICAg
ICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgZm9yTm9kZShjaGlsZDMpLmZpbHRlcihTcGVj
TnVtYmVyKTsKQEAgLTExNDAsNyArMTEzNyw3IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0
ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgY2FzZSBBcnJheTo6VWludDMyQXJyYXk6CiAgICAgICAg
ICAgICBmb3JOb2RlKGNoaWxkMSkuZmlsdGVyKFNwZWNDZWxsKTsKICAgICAgICAgICAgIGZvck5v
ZGUoY2hpbGQyKS5maWx0ZXIoU3BlY0ludDMyKTsKLSAgICAgICAgICAgIGlmIChtX2dyYXBoW2No
aWxkM10uc2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKQorICAgICAgICAgICAgaWYgKGNoaWxkMy0+
c2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKQogICAgICAgICAgICAgICAgIGZvck5vZGUoY2hpbGQz
KS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBm
b3JOb2RlKGNoaWxkMykuZmlsdGVyKFNwZWNOdW1iZXIpOwpAQCAtMTE2MywxNjYgKzExNjAsMTg4
IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICB9CiAgICAg
ICAgICAgICAKICAgICBjYXNlIEFycmF5UHVzaDoKLSAgICAgICAgbm9kZS5zZXRDYW5FeGl0KHRy
dWUpOwotICAgICAgICBzd2l0Y2ggKG5vZGUuYXJyYXlNb2RlKCkudHlwZSgpKSB7CisgICAgICAg
IG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7CisgICAgICAgIHN3aXRjaCAobm9kZS0+YXJyYXlNb2Rl
KCkudHlwZSgpKSB7CiAgICAgICAgIGNhc2UgQXJyYXk6OkludDMyOgotICAgICAgICAgICAgZm9y
Tm9kZShub2RlLmNoaWxkMigpKS5maWx0ZXIoU3BlY0ludDMyKTsKKyAgICAgICAgICAgIGZvck5v
ZGUobm9kZS0+Y2hpbGQyKCkpLmZpbHRlcihTcGVjSW50MzIpOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIGNhc2UgQXJyYXk6OkRvdWJsZToKLSAgICAgICAgICAgIGZvck5vZGUobm9kZS5j
aGlsZDIoKSkuZmlsdGVyKFNwZWNSZWFsTnVtYmVyKTsKKyAgICAgICAgICAgIGZvck5vZGUobm9k
ZS0+Y2hpbGQyKCkpLmZpbHRlcihTcGVjUmVhbE51bWJlcik7CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAg
IGNsb2JiZXJXb3JsZChub2RlLmNvZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7Ci0gICAgICAgIGZv
ck5vZGUobm9kZUluZGV4KS5zZXQoU3BlY051bWJlcik7CisgICAgICAgIGNsb2JiZXJXb3JsZChu
b2RlLT5jb2RlT3JpZ2luLCBpbmRleEluQmxvY2spOworICAgICAgICBmb3JOb2RlKG5vZGUpLnNl
dChTcGVjTnVtYmVyKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICBjYXNlIEFy
cmF5UG9wOgotICAgICAgICBub2RlLnNldENhbkV4aXQodHJ1ZSk7Ci0gICAgICAgIGNsb2JiZXJX
b3JsZChub2RlLmNvZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7Ci0gICAgICAgIGZvck5vZGUobm9k
ZUluZGV4KS5tYWtlVG9wKCk7CisgICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7CisgICAg
ICAgIGNsb2JiZXJXb3JsZChub2RlLT5jb2RlT3JpZ2luLCBpbmRleEluQmxvY2spOworICAgICAg
ICBmb3JOb2RlKG5vZGUpLm1ha2VUb3AoKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAK
ICAgICBjYXNlIFJlZ0V4cEV4ZWM6CiAgICAgY2FzZSBSZWdFeHBUZXN0OgotICAgICAgICBub2Rl
LnNldENhbkV4aXQoCi0gICAgICAgICAgICAhaXNDZWxsU3BlY3VsYXRpb24oZm9yTm9kZShub2Rl
LmNoaWxkMSgpKS5tX3R5cGUpCi0gICAgICAgICAgICB8fCAhaXNDZWxsU3BlY3VsYXRpb24oZm9y
Tm9kZShub2RlLmNoaWxkMigpKS5tX3R5cGUpKTsKLSAgICAgICAgZm9yTm9kZShub2RlLmNoaWxk
MSgpKS5maWx0ZXIoU3BlY0NlbGwpOwotICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQyKCkpLmZp
bHRlcihTcGVjQ2VsbCk7Ci0gICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5tYWtlVG9wKCk7Cisg
ICAgICAgIG5vZGUtPnNldENhbkV4aXQoCisgICAgICAgICAgICAhaXNDZWxsU3BlY3VsYXRpb24o
Zm9yTm9kZShub2RlLT5jaGlsZDEoKSkubV90eXBlKQorICAgICAgICAgICAgfHwgIWlzQ2VsbFNw
ZWN1bGF0aW9uKGZvck5vZGUobm9kZS0+Y2hpbGQyKCkpLm1fdHlwZSkpOworICAgICAgICBmb3JO
b2RlKG5vZGUtPmNoaWxkMSgpKS5maWx0ZXIoU3BlY0NlbGwpOworICAgICAgICBmb3JOb2RlKG5v
ZGUtPmNoaWxkMigpKS5maWx0ZXIoU3BlY0NlbGwpOworICAgICAgICBmb3JOb2RlKG5vZGUpLm1h
a2VUb3AoKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICBjYXNlIEp1bXA6Ci0g
ICAgICAgIG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7CisgICAgICAgIG5vZGUtPnNldENhbkV4aXQo
ZmFsc2UpOwogICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgIGNhc2UgQnJhbmNoOiB7
Ci0gICAgICAgIEJvb2xlYW5SZXN1bHQgcmVzdWx0ID0gYm9vbGVhblJlc3VsdChub2RlLCBmb3JO
b2RlKG5vZGUuY2hpbGQxKCkpKTsKKyAgICAgICAgTm9kZSogY2hpbGQgPSBub2RlLT5jaGlsZDEo
KS5ub2RlKCk7CisgICAgICAgIEJvb2xlYW5SZXN1bHQgcmVzdWx0ID0gYm9vbGVhblJlc3VsdChu
b2RlLCBmb3JOb2RlKGNoaWxkKSk7CiAgICAgICAgIGlmIChyZXN1bHQgPT0gRGVmaW5pdGVseVRy
dWUpIHsKICAgICAgICAgICAgIG1fYnJhbmNoRGlyZWN0aW9uID0gVGFrZVRydWU7Ci0gICAgICAg
ICAgICBub2RlLnNldENhbkV4aXQoZmFsc2UpOworICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhp
dChmYWxzZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBpZiAocmVz
dWx0ID09IERlZmluaXRlbHlGYWxzZSkgewogICAgICAgICAgICAgbV9icmFuY2hEaXJlY3Rpb24g
PSBUYWtlRmFsc2U7Ci0gICAgICAgICAgICBub2RlLnNldENhbkV4aXQoZmFsc2UpOworICAgICAg
ICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgfQogICAgICAgICAvLyBGSVhNRTogVGhlIGFib3ZlIGhhbmRsZXMgdGhlIHRyaXZpYWwgY2Fz
ZXMgb2Ygc3BhcnNlIGNvbmRpdGlvbmFsCiAgICAgICAgIC8vIGNvbnN0YW50IHByb3BhZ2F0aW9u
LCBidXQgd2UgY2FuIGRvIGJldHRlcjoKICAgICAgICAgLy8gV2UgY2FuIHNwZWNpYWxpemUgdGhl
IHNvdXJjZSB2YXJpYWJsZSdzIHZhbHVlIG9uIGVhY2ggZGlyZWN0aW9uIG9mCiAgICAgICAgIC8v
IHRoZSBicmFuY2guCi0gICAgICAgIE5vZGUmIGNoaWxkID0gbV9ncmFwaFtub2RlLmNoaWxkMSgp
XTsKLSAgICAgICAgaWYgKGNoaWxkLnNob3VsZFNwZWN1bGF0ZUJvb2xlYW4oKSkKKyAgICAgICAg
aWYgKGNoaWxkLT5zaG91bGRTcGVjdWxhdGVCb29sZWFuKCkpCiAgICAgICAgICAgICBzcGVjdWxh
dGVCb29sZWFuVW5hcnkobm9kZSk7Ci0gICAgICAgIGVsc2UgaWYgKGNoaWxkLnNob3VsZFNwZWN1
bGF0ZU5vblN0cmluZ0NlbGxPck90aGVyKCkpIHsKLSAgICAgICAgICAgIG5vZGUuc2V0Q2FuRXhp
dCh0cnVlKTsKLSAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKChTcGVj
Q2VsbCAmIH5TcGVjU3RyaW5nKSB8IFNwZWNPdGhlcik7Ci0gICAgICAgIH0gZWxzZSBpZiAoY2hp
bGQuc2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKQorICAgICAgICBlbHNlIGlmIChjaGlsZC0+c2hv
dWxkU3BlY3VsYXRlTm9uU3RyaW5nQ2VsbE9yT3RoZXIoKSkgeworICAgICAgICAgICAgbm9kZS0+
c2V0Q2FuRXhpdCh0cnVlKTsKKyAgICAgICAgICAgIGZvck5vZGUoY2hpbGQpLmZpbHRlcigoU3Bl
Y0NlbGwgJiB+U3BlY1N0cmluZykgfCBTcGVjT3RoZXIpOworICAgICAgICB9IGVsc2UgaWYgKGNo
aWxkLT5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpCiAgICAgICAgICAgICBzcGVjdWxhdGVJbnQz
MlVuYXJ5KG5vZGUpOwotICAgICAgICBlbHNlIGlmIChjaGlsZC5zaG91bGRTcGVjdWxhdGVOdW1i
ZXIoKSkKKyAgICAgICAgZWxzZSBpZiAoY2hpbGQtPnNob3VsZFNwZWN1bGF0ZU51bWJlcigpKQog
ICAgICAgICAgICAgc3BlY3VsYXRlTnVtYmVyVW5hcnkobm9kZSk7CiAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgIG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7CisgICAgICAgICAgICBub2RlLT5zZXRD
YW5FeGl0KGZhbHNlKTsKICAgICAgICAgbV9icmFuY2hEaXJlY3Rpb24gPSBUYWtlQm90aDsKICAg
ICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAgICAgCiAgICAgY2FzZSBSZXR1cm46CiAgICAg
ICAgIG1faXNWYWxpZCA9IGZhbHNlOwotICAgICAgICBub2RlLnNldENhbkV4aXQoZmFsc2UpOwor
ICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAg
IAogICAgIGNhc2UgVGhyb3c6CiAgICAgY2FzZSBUaHJvd1JlZmVyZW5jZUVycm9yOgogICAgICAg
ICBtX2lzVmFsaWQgPSBmYWxzZTsKLSAgICAgICAgbm9kZS5zZXRDYW5FeGl0KHRydWUpOworICAg
ICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOwogICAgICAgICBicmVhazsKICAgICAgICAgICAg
IAogICAgIGNhc2UgVG9QcmltaXRpdmU6IHsKLSAgICAgICAgSlNWYWx1ZSBjaGlsZENvbnN0ID0g
Zm9yTm9kZShub2RlLmNoaWxkMSgpKS52YWx1ZSgpOwotICAgICAgICBpZiAoY2hpbGRDb25zdCAm
JiBjaGlsZENvbnN0LmlzTnVtYmVyKCkgJiYgdHJ5U2V0Q29uc3RhbnQobm9kZUluZGV4LCBjaGls
ZENvbnN0KSkgeworICAgICAgICBOb2RlKiBjaGlsZCA9IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsK
KyAgICAgICAgCisgICAgICAgIEpTVmFsdWUgY2hpbGRDb25zdCA9IGZvck5vZGUoY2hpbGQpLnZh
bHVlKCk7CisgICAgICAgIGlmIChjaGlsZENvbnN0ICYmIGNoaWxkQ29uc3QuaXNOdW1iZXIoKSAm
JiB0cnlTZXRDb25zdGFudChub2RlLCBjaGlsZENvbnN0KSkgewogICAgICAgICAgICAgbV9mb3Vu
ZENvbnN0YW50cyA9IHRydWU7Ci0gICAgICAgICAgICBub2RlLnNldENhbkV4aXQoZmFsc2UpOwor
ICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgTm9kZSYgY2hpbGQgPSBtX2dyYXBoW25vZGUu
Y2hpbGQxKCldOwotICAgICAgICBpZiAoY2hpbGQuc2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKSB7
CisgICAgICAgIGlmIChjaGlsZC0+c2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKSB7CiAgICAgICAg
ICAgICBzcGVjdWxhdGVJbnQzMlVuYXJ5KG5vZGUpOwotICAgICAgICAgICAgZm9yTm9kZShub2Rl
SW5kZXgpLnNldChTcGVjSW50MzIpOworICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3Bl
Y0ludDMyKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKLSAgICAgICAgQWJzdHJh
Y3RWYWx1ZSYgc291cmNlID0gZm9yTm9kZShub2RlLmNoaWxkMSgpKTsKLSAgICAgICAgQWJzdHJh
Y3RWYWx1ZSYgZGVzdGluYXRpb24gPSBmb3JOb2RlKG5vZGVJbmRleCk7Ci0gICAgICAgICAgICAK
KyAgICAgICAgQWJzdHJhY3RWYWx1ZSYgc291cmNlID0gZm9yTm9kZShjaGlsZCk7CisgICAgICAg
IEFic3RyYWN0VmFsdWUmIGRlc3RpbmF0aW9uID0gZm9yTm9kZShub2RlKTsKKyAgICAgICAgCisg
ICAgICAgIC8vIE5CLiBUaGUgbW9yZSBjYW5vbmljYWwgd2F5IG9mIHdyaXRpbmcgdGhpcyB3b3Vs
ZCBoYXZlIGJlZW46CisgICAgICAgIC8vCisgICAgICAgIC8vIGRlc3RpbmF0aW9uID0gc291cmNl
OworICAgICAgICAvLyBpZiAoZGVzdGluYXRpb24ubV90eXBlICYgIShTcGVjTnVtYmVyIHwgU3Bl
Y1N0cmluZyB8IFNwZWNCb29sZWFuKSkgeworICAgICAgICAvLyAgICAgZGVzdGluYXRpb24uZmls
dGVyKFNwZWNOdW1iZXIgfCBTcGVjU3RyaW5nIHwgU3BlY0Jvb2xlYW4pOworICAgICAgICAvLyAg
ICAgQWJzdHJhY3RWYWx1ZSBzdHJpbmc7CisgICAgICAgIC8vICAgICBzdHJpbmcuc2V0KGdsb2Jh
bERhdGEtPnN0cmluZ1N0cnVjdHVyZSk7CisgICAgICAgIC8vICAgICBkZXN0aW5hdGlvbi5tZXJn
ZShzdHJpbmcpOworICAgICAgICAvLyB9CisgICAgICAgIC8vCisgICAgICAgIC8vIFRoZSByZWFz
b24gd2h5IHRoaXMgd291bGQsIGluIG1vc3Qgb3RoZXIgY2FzZXMsIGhhdmUgYmVlbiBiZXR0ZXIg
aXMgdGhhdAorICAgICAgICAvLyB0aGVuIGRlc3RpbmF0aW9uIHdvdWxkIHByZXNlcnZlIGFueSBu
b24tU3BlY3VsYXRlZFR5cGUga25vd2xlZGdlIG9mIHNvdXJjZS4KKyAgICAgICAgLy8gQXMgaXQg
c3RhbmRzLCB0aGUgY29kZSBiZWxvdyBmb3JnZXRzIGFueSBub24tU3BlY3VsYXRlZFR5cGUga25v
d2xlZGdlIHRoYXQKKyAgICAgICAgLy8gc291cmNlIHdvdWxkIGhhdmUgaGFkLiBGb3J0dW5hdGVs
eSwgdGhvdWdoLCBmb3IgdGhpbmdzIGxpa2Ugc3RyaW5ncyBhbmQKKyAgICAgICAgLy8gbnVtYmVy
cyBhbmQgYm9vbGVhbnMsIHdlIGRvbid0IGNhcmUgYWJvdXQgdGhlIG5vbi1TcGVjdWxhdGVkVHlw
ZSBrbm93ZWRnZToKKyAgICAgICAgLy8gdGhlIHN0cnVjdHVyZSB3b24ndCB0ZWxsIHVzIGFueXRo
aW5nIHdlIGRvbid0IGFscmVhZHkga25vdywgYW5kIG5laXRoZXIKKyAgICAgICAgLy8gd2lsbCBB
cnJheU1vZGVzLiBBbmQgaWYgdGhlIHNvdXJjZSB3YXMgYSBtZWFuaW5nZnVsIGNvbnN0YW50IHRo
ZW4gd2UKKyAgICAgICAgLy8gd291bGQgaGF2ZSBoYW5kbGVkIHRoYXQgYWJvdmUuIFVuZm9ydHVu
YXRlbHksIHRoaXMgZG9lcyBtZWFuIHRoYXQKKyAgICAgICAgLy8gVG9QcmltaXRpdmUgd2lsbCBj
dXJyZW50bHkgZm9yZ2V0IHN0cmluZyBjb25zdGFudHMuIEJ1dCB0aGF0J3Mgbm90IGEgYmlnCisg
ICAgICAgIC8vIGRlYWwgc2luY2Ugd2UgZG9uJ3QgZG8gYW55IG9wdGltaXphdGlvbiBvbiB0aG9z
ZSBjdXJyZW50bHkuCisgICAgICAgIAogICAgICAgICBTcGVjdWxhdGVkVHlwZSB0eXBlID0gc291
cmNlLm1fdHlwZTsKICAgICAgICAgaWYgKHR5cGUgJiB+KFNwZWNOdW1iZXIgfCBTcGVjU3RyaW5n
IHwgU3BlY0Jvb2xlYW4pKSB7CiAgICAgICAgICAgICB0eXBlICY9IChTcGVjTnVtYmVyIHwgU3Bl
Y1N0cmluZyB8IFNwZWNCb29sZWFuKTsKICAgICAgICAgICAgIHR5cGUgfD0gU3BlY1N0cmluZzsK
ICAgICAgICAgfQogICAgICAgICBkZXN0aW5hdGlvbi5zZXQodHlwZSk7Ci0gICAgICAgIG5vZGUu
c2V0Q2FuRXhpdChmYWxzZSk7CisgICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwogICAg
ICAgICBicmVhazsKICAgICB9CiAgICAgICAgICAgICAKICAgICBjYXNlIFN0ckNhdDoKLSAgICAg
ICAgbm9kZS5zZXRDYW5FeGl0KGZhbHNlKTsKLSAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNl
dChTcGVjU3RyaW5nKTsKKyAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CisgICAgICAg
IGZvck5vZGUobm9kZSkuc2V0KFNwZWNTdHJpbmcpOwogICAgICAgICBicmVhazsKICAgICAgICAg
ICAgIAogICAgIGNhc2UgTmV3QXJyYXk6Ci0gICAgICAgIG5vZGUuc2V0Q2FuRXhpdCh0cnVlKTsK
LSAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihu
b2RlLmNvZGVPcmlnaW4pLT5hcnJheVN0cnVjdHVyZUZvckluZGV4aW5nVHlwZUR1cmluZ0FsbG9j
YXRpb24obm9kZS5pbmRleGluZ1R5cGUoKSkpOworICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRy
dWUpOworICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KG1fZ3JhcGguZ2xvYmFsT2JqZWN0
Rm9yKG5vZGUtPmNvZGVPcmlnaW4pLT5hcnJheVN0cnVjdHVyZUZvckluZGV4aW5nVHlwZUR1cmlu
Z0FsbG9jYXRpb24obm9kZS0+aW5kZXhpbmdUeXBlKCkpKTsKICAgICAgICAgbV9oYXZlU3RydWN0
dXJlcyA9IHRydWU7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAKICAgICBjYXNlIE5ld0FycmF5
QnVmZmVyOgotICAgICAgICBub2RlLnNldENhbkV4aXQodHJ1ZSk7Ci0gICAgICAgIGZvck5vZGUo
bm9kZUluZGV4KS5zZXQobV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS5jb2RlT3JpZ2luKS0+
YXJyYXlTdHJ1Y3R1cmVGb3JJbmRleGluZ1R5cGVEdXJpbmdBbGxvY2F0aW9uKG5vZGUuaW5kZXhp
bmdUeXBlKCkpKTsKKyAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKKyAgICAgICAgZm9y
Tm9kZShub2RlKS5zZXQobV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+Y29kZU9yaWdpbikt
PmFycmF5U3RydWN0dXJlRm9ySW5kZXhpbmdUeXBlRHVyaW5nQWxsb2NhdGlvbihub2RlLT5pbmRl
eGluZ1R5cGUoKSkpOwogICAgICAgICBtX2hhdmVTdHJ1Y3R1cmVzID0gdHJ1ZTsKICAgICAgICAg
YnJlYWs7CiAKICAgICBjYXNlIE5ld0FycmF5V2l0aFNpemU6Ci0gICAgICAgIG5vZGUuc2V0Q2Fu
RXhpdCh0cnVlKTsKLSAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY0lu
dDMyKTsKLSAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChTcGVjQXJyYXkpOworICAgICAg
ICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOworICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMSgp
KS5maWx0ZXIoU3BlY0ludDMyKTsKKyAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0FycmF5
KTsKICAgICAgICAgbV9oYXZlU3RydWN0dXJlcyA9IHRydWU7CiAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgCiAgICAgY2FzZSBOZXdSZWdleHA6Ci0gICAgICAgIG5vZGUuc2V0Q2FuRXhpdChm
YWxzZSk7Ci0gICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQobV9ncmFwaC5nbG9iYWxPYmpl
Y3RGb3Iobm9kZS5jb2RlT3JpZ2luKS0+cmVnRXhwU3RydWN0dXJlKCkpOworICAgICAgICBub2Rl
LT5zZXRDYW5FeGl0KGZhbHNlKTsKKyAgICAgICAgZm9yTm9kZShub2RlKS5zZXQobV9ncmFwaC5n
bG9iYWxPYmplY3RGb3Iobm9kZS0+Y29kZU9yaWdpbiktPnJlZ0V4cFN0cnVjdHVyZSgpKTsKICAg
ICAgICAgbV9oYXZlU3RydWN0dXJlcyA9IHRydWU7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgCiAgICAgY2FzZSBDb252ZXJ0VGhpczogewotICAgICAgICBOb2RlJiBjaGlsZCA9IG1fZ3Jh
cGhbbm9kZS5jaGlsZDEoKV07Ci0gICAgICAgIEFic3RyYWN0VmFsdWUmIHNvdXJjZSA9IGZvck5v
ZGUobm9kZS5jaGlsZDEoKSk7Ci0gICAgICAgIEFic3RyYWN0VmFsdWUmIGRlc3RpbmF0aW9uID0g
Zm9yTm9kZShub2RlSW5kZXgpOworICAgICAgICBOb2RlKiBjaGlsZCA9IG5vZGUtPmNoaWxkMSgp
Lm5vZGUoKTsKKyAgICAgICAgQWJzdHJhY3RWYWx1ZSYgc291cmNlID0gZm9yTm9kZShub2RlLT5j
aGlsZDEoKSk7CisgICAgICAgIEFic3RyYWN0VmFsdWUmIGRlc3RpbmF0aW9uID0gZm9yTm9kZShu
b2RlKTsKICAgICAgICAgICAgIAogICAgICAgICBpZiAoaXNPYmplY3RTcGVjdWxhdGlvbihzb3Vy
Y2UubV90eXBlKSkgewogICAgICAgICAgICAgLy8gVGhpcyBpcyB0aGUgc2ltcGxlIGNhc2UuIFdl
IGFscmVhZHkga25vdyB0aGF0IHRoZSBzb3VyY2UgaXMgYW4KICAgICAgICAgICAgIC8vIG9iamVj
dCwgc28gdGhlcmUncyBub3RoaW5nIHRvIGRvLiBJIGRvbid0IHRoaW5rIHRoaXMgY2FzZSB3aWxs
CiAgICAgICAgICAgICAvLyBiZSBoaXQsIGJ1dCB0aGVuIGFnYWluLCB5b3UgbmV2ZXIga25vdy4K
ICAgICAgICAgICAgIGRlc3RpbmF0aW9uID0gc291cmNlOwotICAgICAgICAgICAgbm9kZS5zZXRD
YW5FeGl0KGZhbHNlKTsKKyAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwogICAg
ICAgICAgICAgbV9mb3VuZENvbnN0YW50cyA9IHRydWU7IC8vIFRlbGwgdGhlIGNvbnN0YW50IGZv
bGRlciB0byB0dXJuIHRoaXMgaW50byBJZGVudGl0eS4KICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICB9CiAgICAgICAgIAotICAgICAgICBub2RlLnNldENhbkV4aXQodHJ1ZSk7CisgICAgICAg
IG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7CiAgICAgICAgIAotICAgICAgICBpZiAoaXNPdGhlclNw
ZWN1bGF0aW9uKGNoaWxkLnByZWRpY3Rpb24oKSkpIHsKKyAgICAgICAgaWYgKGlzT3RoZXJTcGVj
dWxhdGlvbihjaGlsZC0+cHJlZGljdGlvbigpKSkgewogICAgICAgICAgICAgc291cmNlLmZpbHRl
cihTcGVjT3RoZXIpOwogICAgICAgICAgICAgZGVzdGluYXRpb24uc2V0KFNwZWNPYmplY3RPdGhl
cik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgaWYg
KGlzT2JqZWN0U3BlY3VsYXRpb24oY2hpbGQucHJlZGljdGlvbigpKSkgeworICAgICAgICBpZiAo
aXNPYmplY3RTcGVjdWxhdGlvbihjaGlsZC0+cHJlZGljdGlvbigpKSkgewogICAgICAgICAgICAg
c291cmNlLmZpbHRlcihTcGVjT2JqZWN0TWFzayk7CiAgICAgICAgICAgICBkZXN0aW5hdGlvbiA9
IHNvdXJjZTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTMzNCwxMCArMTM1MywxMCBAQCBib29s
IEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgfQogCiAgICAgY2FzZSBD
cmVhdGVUaGlzOiB7Ci0gICAgICAgIEFic3RyYWN0VmFsdWUmIHNvdXJjZSA9IGZvck5vZGUobm9k
ZS5jaGlsZDEoKSk7Ci0gICAgICAgIEFic3RyYWN0VmFsdWUmIGRlc3RpbmF0aW9uID0gZm9yTm9k
ZShub2RlSW5kZXgpOworICAgICAgICBBYnN0cmFjdFZhbHVlJiBzb3VyY2UgPSBmb3JOb2RlKG5v
ZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgQWJzdHJhY3RWYWx1ZSYgZGVzdGluYXRpb24gPSBmb3JO
b2RlKG5vZGUpOwogICAgICAgICAKLSAgICAgICAgbm9kZS5zZXRDYW5FeGl0KCFpc0NlbGxTcGVj
dWxhdGlvbihzb3VyY2UubV90eXBlKSk7CisgICAgICAgIG5vZGUtPnNldENhbkV4aXQoIWlzQ2Vs
bFNwZWN1bGF0aW9uKHNvdXJjZS5tX3R5cGUpKTsKICAgICAgICAgICAgIAogICAgICAgICBzb3Vy
Y2UuZmlsdGVyKFNwZWNGdW5jdGlvbik7CiAgICAgICAgIGRlc3RpbmF0aW9uLnNldChTcGVjRmlu
YWxPYmplY3QpOwpAQCAtMTM0NSw0MSArMTM2NCw0MSBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4
ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgfQogICAgICAgICAKICAgICBjYXNlIEluaGVyaXRvcklE
V2F0Y2hwb2ludDoKLSAgICAgICAgbm9kZS5zZXRDYW5FeGl0KHRydWUpOworICAgICAgICBub2Rl
LT5zZXRDYW5FeGl0KHRydWUpOwogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgTmV3T2JqZWN0
OgotICAgICAgICBub2RlLnNldENhbkV4aXQoZmFsc2UpOwotICAgICAgICBmb3JOb2RlKG5vZGVJ
bmRleCkuc2V0KG5vZGUuc3RydWN0dXJlKCkpOworICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZh
bHNlKTsKKyAgICAgICAgZm9yTm9kZShub2RlKS5zZXQobm9kZS0+c3RydWN0dXJlKCkpOwogICAg
ICAgICBtX2hhdmVTdHJ1Y3R1cmVzID0gdHJ1ZTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgIAog
ICAgIGNhc2UgQ3JlYXRlQWN0aXZhdGlvbjoKLSAgICAgICAgbm9kZS5zZXRDYW5FeGl0KGZhbHNl
KTsKLSAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0Rm9yKG5vZGUuY29kZU9yaWdpbiktPmFjdGl2YXRpb25TdHJ1Y3R1cmUoKSk7CisgICAgICAg
IG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOworICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0Rm9yKG5vZGUtPmNvZGVPcmlnaW4pLT5hY3RpdmF0aW9uU3Ry
dWN0dXJlKCkpOwogICAgICAgICBtX2hhdmVTdHJ1Y3R1cmVzID0gdHJ1ZTsKICAgICAgICAgYnJl
YWs7CiAgICAgICAgIAogICAgIGNhc2UgQ3JlYXRlQXJndW1lbnRzOgotICAgICAgICBub2RlLnNl
dENhbkV4aXQoZmFsc2UpOwotICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3RGb3Iobm9kZS5jb2RlT3JpZ2luKS0+YXJndW1lbnRzU3RydWN0dXJl
KCkpOworICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKKyAgICAgICAgZm9yTm9kZShu
b2RlKS5zZXQobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdEZvcihub2RlLT5jb2RlT3JpZ2luKS0+
YXJndW1lbnRzU3RydWN0dXJlKCkpOwogICAgICAgICBtX2hhdmVTdHJ1Y3R1cmVzID0gdHJ1ZTsK
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIAogICAgIGNhc2UgVGVhck9mZkFjdGl2YXRpb246CiAg
ICAgY2FzZSBUZWFyT2ZmQXJndW1lbnRzOgotICAgICAgICBub2RlLnNldENhbkV4aXQoZmFsc2Up
OworICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgLy8gRG9lcyBub3Ro
aW5nIHRoYXQgaXMgdXNlci12aXNpYmxlLgogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgQ2hl
Y2tBcmd1bWVudHNOb3RDcmVhdGVkOgogICAgICAgICBpZiAoaXNFbXB0eVNwZWN1bGF0aW9uKAog
ICAgICAgICAgICAgICAgIG1fdmFyaWFibGVzLm9wZXJhbmQoCi0gICAgICAgICAgICAgICAgICAg
IG1fZ3JhcGguYXJndW1lbnRzUmVnaXN0ZXJGb3Iobm9kZS5jb2RlT3JpZ2luKSkubV90eXBlKSkg
ewotICAgICAgICAgICAgbm9kZS5zZXRDYW5FeGl0KGZhbHNlKTsKKyAgICAgICAgICAgICAgICAg
ICAgbV9ncmFwaC5hcmd1bWVudHNSZWdpc3RlckZvcihub2RlLT5jb2RlT3JpZ2luKSkubV90eXBl
KSkgeworICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgICAgICBt
X2ZvdW5kQ29uc3RhbnRzID0gdHJ1ZTsKICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBub2Rl
LnNldENhbkV4aXQodHJ1ZSk7CisgICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOwog
ICAgICAgICBicmVhazsKICAgICAgICAgCiAgICAgY2FzZSBHZXRNeUFyZ3VtZW50c0xlbmd0aDoK
QEAgLTEzODcsMTExICsxNDA2LDExMSBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5z
aWduZWQgaW5kCiAgICAgICAgIC8vIHRoZSBhcmd1bWVudHMgYSBiaXQuIE5vdGUgdGhhdCB0aGlz
IGlzIG5vdCBzdWZmaWNpZW50IHRvIGZvcmNlIGNvbnN0YW50IGZvbGRpbmcKICAgICAgICAgLy8g
b2YgR2V0TXlBcmd1bWVudHNMZW5ndGgsIGJlY2F1c2UgR2V0TXlBcmd1bWVudHNMZW5ndGggaXMg
YSBjbG9iYmVyaW5nIG9wZXJhdGlvbi4KICAgICAgICAgLy8gV2UgcGVyZm9ybSBmdXJ0aGVyIG9w
dGltaXphdGlvbnMgb24gdGhpcyBsYXRlciBvbi4KLSAgICAgICAgaWYgKG5vZGUuY29kZU9yaWdp
bi5pbmxpbmVDYWxsRnJhbWUpCi0gICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KGpz
TnVtYmVyKG5vZGUuY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50cy5zaXplKCkg
LSAxKSk7CisgICAgICAgIGlmIChub2RlLT5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSkKKyAg
ICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KGpzTnVtYmVyKG5vZGUtPmNvZGVPcmlnaW4uaW5s
aW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgpIC0gMSkpOwogICAgICAgICBlbHNlCi0gICAg
ICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFNwZWNJbnQzMik7CisgICAgICAgICAgICBm
b3JOb2RlKG5vZGUpLnNldChTcGVjSW50MzIpOwogICAgICAgICBub2RlLnNldENhbkV4aXQoCiAg
ICAgICAgICAgICAhaXNFbXB0eVNwZWN1bGF0aW9uKAogICAgICAgICAgICAgICAgIG1fdmFyaWFi
bGVzLm9wZXJhbmQoCi0gICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguYXJndW1lbnRzUmVnaXN0
ZXJGb3Iobm9kZS5jb2RlT3JpZ2luKSkubV90eXBlKSk7CisgICAgICAgICAgICAgICAgICAgIG1f
Z3JhcGguYXJndW1lbnRzUmVnaXN0ZXJGb3Iobm9kZS0+Y29kZU9yaWdpbikpLm1fdHlwZSkpOwog
ICAgICAgICBicmVhazsKICAgICAgICAgCiAgICAgY2FzZSBHZXRNeUFyZ3VtZW50c0xlbmd0aFNh
ZmU6Ci0gICAgICAgIG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7CisgICAgICAgIG5vZGUtPnNldENh
bkV4aXQoZmFsc2UpOwogICAgICAgICAvLyBUaGlzIHBvdGVudGlhbGx5IGNsb2JiZXJzIGFsbCBz
dHJ1Y3R1cmVzIGlmIHRoZSBhcmd1bWVudHMgb2JqZWN0IGhhZCBhIGdldHRlcgogICAgICAgICAv
LyBpbnN0YWxsZWQgb24gdGhlIGxlbmd0aCBwcm9wZXJ0eS4KLSAgICAgICAgY2xvYmJlcldvcmxk
KG5vZGUuY29kZU9yaWdpbiwgaW5kZXhJbkJsb2NrKTsKKyAgICAgICAgY2xvYmJlcldvcmxkKG5v
ZGUtPmNvZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7CiAgICAgICAgIC8vIFdlIGN1cnJlbnRseSBt
YWtlIG5vIGd1YXJhbnRlZSBhYm91dCB3aGF0IHRoaXMgcmV0dXJucyBiZWNhdXNlIGl0IGRvZXMg
bm90CiAgICAgICAgIC8vIHNwZWN1bGF0ZSB0aGF0IHRoZSBsZW5ndGggcHJvcGVydHkgaXMgYWN0
dWFsbHkgYSBsZW5ndGguCi0gICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5tYWtlVG9wKCk7Cisg
ICAgICAgIGZvck5vZGUobm9kZSkubWFrZVRvcCgpOwogICAgICAgICBicmVhazsKICAgICAgICAg
CiAgICAgY2FzZSBHZXRNeUFyZ3VtZW50QnlWYWw6Ci0gICAgICAgIG5vZGUuc2V0Q2FuRXhpdCh0
cnVlKTsKKyAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKICAgICAgICAgLy8gV2Uga25v
dyB0aGF0IHRoaXMgZXhlY3V0YWJsZSBkb2VzIG5vdCBlc2NhcGUgaXRzIGFyZ3VtZW50cywgc28g
d2UgY2FuIG9wdGltaXplCiAgICAgICAgIC8vIHRoZSBhcmd1bWVudHMgYSBiaXQuIE5vdGUgdGhh
dCB0aGlzIGVuZHMgdXAgYmVpbmcgZnVydGhlciBvcHRpbWl6ZWQgYnkgdGhlCiAgICAgICAgIC8v
IEFyZ3VtZW50c1NpbXBsaWZpY2F0aW9uUGhhc2UuCi0gICAgICAgIGZvck5vZGUobm9kZS5jaGls
ZDEoKSkuZmlsdGVyKFNwZWNJbnQzMik7Ci0gICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5tYWtl
VG9wKCk7CisgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRlcihTcGVjSW50MzIp
OworICAgICAgICBmb3JOb2RlKG5vZGUpLm1ha2VUb3AoKTsKICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIAogICAgIGNhc2UgR2V0TXlBcmd1bWVudEJ5VmFsU2FmZToKLSAgICAgICAgbm9kZS5zZXRD
YW5FeGl0KHRydWUpOworICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOwogICAgICAgICAv
LyBUaGlzIHBvdGVudGlhbGx5IGNsb2JiZXJzIGFsbCBzdHJ1Y3R1cmVzIGlmIHRoZSBwcm9wZXJ0
eSB3ZSdyZSBhY2Nlc3NpbmcgaGFzCiAgICAgICAgIC8vIGEgZ2V0dGVyLiBXZSBkb24ndCBzcGVj
dWxhdGUgYWdhaW5zdCB0aGlzLgotICAgICAgICBjbG9iYmVyV29ybGQobm9kZS5jb2RlT3JpZ2lu
LCBpbmRleEluQmxvY2spOworICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+Y29kZU9yaWdpbiwg
aW5kZXhJbkJsb2NrKTsKICAgICAgICAgLy8gQnV0IHdlIGRvIHNwZWN1bGF0ZSB0aGF0IHRoZSBp
bmRleCBpcyBhbiBpbnRlZ2VyLgotICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRl
cihTcGVjSW50MzIpOworICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5maWx0ZXIoU3Bl
Y0ludDMyKTsKICAgICAgICAgLy8gQW5kIHRoZSByZXN1bHQgaXMgdW5rbm93bi4KLSAgICAgICAg
Zm9yTm9kZShub2RlSW5kZXgpLm1ha2VUb3AoKTsKKyAgICAgICAgZm9yTm9kZShub2RlKS5tYWtl
VG9wKCk7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAKICAgICBjYXNlIE5ld0Z1bmN0aW9uOgog
ICAgIGNhc2UgTmV3RnVuY3Rpb25FeHByZXNzaW9uOgogICAgIGNhc2UgTmV3RnVuY3Rpb25Ob0No
ZWNrOgotICAgICAgICBub2RlLnNldENhbkV4aXQoZmFsc2UpOwotICAgICAgICBmb3JOb2RlKG5v
ZGVJbmRleCkuc2V0KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3RGb3Iobm9kZS5jb2RlT3JpZ2lu
KS0+ZnVuY3Rpb25TdHJ1Y3R1cmUoKSk7CisgICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2Up
OworICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0Rm9y
KG5vZGUtPmNvZGVPcmlnaW4pLT5mdW5jdGlvblN0cnVjdHVyZSgpKTsKICAgICAgICAgYnJlYWs7
CiAgICAgICAgIAogICAgIGNhc2UgR2V0Q2FsbGVlOgotICAgICAgICBub2RlLnNldENhbkV4aXQo
ZmFsc2UpOwotICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFNwZWNGdW5jdGlvbik7Cisg
ICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOworICAgICAgICBmb3JOb2RlKG5vZGUpLnNl
dChTcGVjRnVuY3Rpb24pOwogICAgICAgICBicmVhazsKICAgICAgICAgCiAgICAgY2FzZSBTZXRD
YWxsZWU6CiAgICAgY2FzZSBTZXRNeVNjb3BlOgotICAgICAgICBub2RlLnNldENhbkV4aXQoZmFs
c2UpOworICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICAKICAgICBjYXNlIEdldFNjb3BlOiAvLyBGSVhNRTogV2UgY291bGQgZ2V0IHJp
ZCBvZiB0aGVzZSBpZiB3ZSBrbm93IHRoYXQgdGhlIEpTRnVuY3Rpb24gaXMgYSBjb25zdGFudC4g
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwNjIwMgogICAgIGNhc2Ug
R2V0TXlTY29wZToKICAgICBjYXNlIFNraXBUb3BTY29wZToKLSAgICAgICAgbm9kZS5zZXRDYW5F
eGl0KGZhbHNlKTsKLSAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChTcGVjQ2VsbE90aGVy
KTsKKyAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CisgICAgICAgIGZvck5vZGUobm9k
ZSkuc2V0KFNwZWNDZWxsT3RoZXIpOwogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgU2tpcFNj
b3BlOiB7Ci0gICAgICAgIG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7Ci0gICAgICAgIEpTVmFsdWUg
Y2hpbGQgPSBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLnZhbHVlKCk7Ci0gICAgICAgIGlmIChjaGls
ZCAmJiB0cnlTZXRDb25zdGFudChub2RlSW5kZXgsIEpTVmFsdWUoanNDYXN0PEpTU2NvcGUqPihj
aGlsZC5hc0NlbGwoKSktPm5leHQoKSkpKSB7CisgICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFs
c2UpOworICAgICAgICBKU1ZhbHVlIGNoaWxkID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSkudmFs
dWUoKTsKKyAgICAgICAgaWYgKGNoaWxkICYmIHRyeVNldENvbnN0YW50KG5vZGUsIEpTVmFsdWUo
anNDYXN0PEpTU2NvcGUqPihjaGlsZC5hc0NlbGwoKSktPm5leHQoKSkpKSB7CiAgICAgICAgICAg
ICBtX2ZvdW5kQ29uc3RhbnRzID0gdHJ1ZTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9
Ci0gICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoU3BlY0NlbGxPdGhlcik7CisgICAgICAg
IGZvck5vZGUobm9kZSkuc2V0KFNwZWNDZWxsT3RoZXIpOwogICAgICAgICBicmVhazsKICAgICB9
CiAKICAgICBjYXNlIEdldFNjb3BlUmVnaXN0ZXJzOgotICAgICAgICBub2RlLnNldENhbkV4aXQo
ZmFsc2UpOwotICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjQ2VsbCk7
Ci0gICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5jbGVhcigpOyAvLyBUaGUgcmVzdWx0IGlzIG5v
dCBhIEpTIHZhbHVlLgorICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKKyAgICAgICAg
Zm9yTm9kZShub2RlLT5jaGlsZDEoKSkuZmlsdGVyKFNwZWNDZWxsKTsKKyAgICAgICAgZm9yTm9k
ZShub2RlKS5jbGVhcigpOyAvLyBUaGUgcmVzdWx0IGlzIG5vdCBhIEpTIHZhbHVlLgogICAgICAg
ICBicmVhazsKIAogICAgIGNhc2UgR2V0U2NvcGVkVmFyOgotICAgICAgICBub2RlLnNldENhbkV4
aXQoZmFsc2UpOwotICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkubWFrZVRvcCgpOworICAgICAg
ICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKKyAgICAgICAgZm9yTm9kZShub2RlKS5tYWtlVG9w
KCk7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAgY2FzZSBQdXRTY29wZWRWYXI6
Ci0gICAgICAgIG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7Ci0gICAgICAgIGNsb2JiZXJDYXB0dXJl
ZFZhcnMobm9kZS5jb2RlT3JpZ2luKTsKKyAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7
CisgICAgICAgIGNsb2JiZXJDYXB0dXJlZFZhcnMobm9kZS0+Y29kZU9yaWdpbik7CiAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgCiAgICAgY2FzZSBHZXRCeUlkOgogICAgIGNhc2UgR2V0QnlJ
ZEZsdXNoOgotICAgICAgICBub2RlLnNldENhbkV4aXQodHJ1ZSk7Ci0gICAgICAgIGlmICghbm9k
ZS5wcmVkaWN0aW9uKCkpIHsKKyAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKKyAgICAg
ICAgaWYgKCFub2RlLT5wcmVkaWN0aW9uKCkpIHsKICAgICAgICAgICAgIG1faXNWYWxpZCA9IGZh
bHNlOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKGlzQ2VsbFNw
ZWN1bGF0aW9uKG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ucHJlZGljdGlvbigpKSkgewotICAgICAg
ICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY0NlbGwpOworICAgICAgICBp
ZiAoaXNDZWxsU3BlY3VsYXRpb24obm9kZS0+Y2hpbGQxKCktPnByZWRpY3Rpb24oKSkpIHsKKyAg
ICAgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRlcihTcGVjQ2VsbCk7CiAKLSAg
ICAgICAgICAgIGlmIChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGZvck5vZGUobm9kZS5jaGlsZDEo
KSkuYmVzdFByb3ZlblN0cnVjdHVyZSgpKSB7CisgICAgICAgICAgICBpZiAoU3RydWN0dXJlKiBz
dHJ1Y3R1cmUgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5iZXN0UHJvdmVuU3RydWN0dXJlKCkp
IHsKICAgICAgICAgICAgICAgICBHZXRCeUlkU3RhdHVzIHN0YXR1cyA9IEdldEJ5SWRTdGF0dXM6
OmNvbXB1dGVGb3IoCiAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgubV9nbG9iYWxEYXRhLCBz
dHJ1Y3R1cmUsCi0gICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgubV9jb2RlQmxvY2stPmlkZW50
aWZpZXIobm9kZS5pZGVudGlmaWVyTnVtYmVyKCkpKTsKKyAgICAgICAgICAgICAgICAgICAgbV9n
cmFwaC5tX2NvZGVCbG9jay0+aWRlbnRpZmllcihub2RlLT5pZGVudGlmaWVyTnVtYmVyKCkpKTsK
ICAgICAgICAgICAgICAgICBpZiAoc3RhdHVzLmlzU2ltcGxlKCkpIHsKICAgICAgICAgICAgICAg
ICAgICAgLy8gQXNzZXJ0IHRoaW5ncyB0aGF0IHdlIGNhbid0IGhhbmRsZSBhbmQgdGhhdCB0aGUg
Y29tcHV0ZUZvcigpIG1ldGhvZAogICAgICAgICAgICAgICAgICAgICAvLyBhYm92ZSB3b24ndCBi
ZSBhYmxlIHRvIHJldHVybi4KQEAgLTE0OTksMjMgKzE1MTgsMjMgQEAgYm9vbCBBYnN0cmFjdFN0
YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICAgICAgICAgICAgICBBU1NFUlQoc3Rh
dHVzLmNoYWluKCkuaXNFbXB0eSgpKTsKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAg
ICAgICAgICAgIGlmIChzdGF0dXMuc3BlY2lmaWNWYWx1ZSgpKQotICAgICAgICAgICAgICAgICAg
ICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChzdGF0dXMuc3BlY2lmaWNWYWx1ZSgpKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KHN0YXR1cy5zcGVjaWZpY1Zh
bHVlKCkpOwogICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAg
ICBmb3JOb2RlKG5vZGVJbmRleCkubWFrZVRvcCgpOwotICAgICAgICAgICAgICAgICAgICBmb3JO
b2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihzdGF0dXMuc3RydWN0dXJlU2V0KCkpOworICAgICAg
ICAgICAgICAgICAgICAgICAgZm9yTm9kZShub2RlKS5tYWtlVG9wKCk7CisgICAgICAgICAgICAg
ICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRlcihzdGF0dXMuc3RydWN0dXJlU2V0
KCkpOwogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgbV9mb3VuZENv
bnN0YW50cyA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICBjbG9iYmVyV29ybGQobm9k
ZS5jb2RlT3JpZ2luLCBpbmRleEluQmxvY2spOwotICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCku
bWFrZVRvcCgpOworICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+Y29kZU9yaWdpbiwgaW5kZXhJ
bkJsb2NrKTsKKyAgICAgICAgZm9yTm9kZShub2RlKS5tYWtlVG9wKCk7CiAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgCiAgICAgY2FzZSBHZXRBcnJheUxlbmd0aDoKLSAgICAgICAgbm9kZS5z
ZXRDYW5FeGl0KHRydWUpOyAvLyBMaWVzLCBidXQgaXQncyB0cnVlIGZvciB0aGUgY29tbW9uIGNh
c2Ugb2YgSlNBcnJheSwgc28gaXQncyBnb29kIGVub3VnaC4KLSAgICAgICAgZm9yTm9kZShub2Rl
SW5kZXgpLnNldChTcGVjSW50MzIpOworICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOyAv
LyBMaWVzLCBidXQgaXQncyB0cnVlIGZvciB0aGUgY29tbW9uIGNhc2Ugb2YgSlNBcnJheSwgc28g
aXQncyBnb29kIGVub3VnaC4KKyAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0ludDMyKTsK
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIAogICAgIGNhc2UgQ2hlY2tFeGVjdXRhYmxlOiB7CkBA
IC0xNTIzLDIzICsxNTQyLDIzIEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25l
ZCBpbmQKICAgICAgICAgLy8gbW9yZSB0aG9yb3VnaGx5LiBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTA2MjAwCiAgICAgICAgIC8vIEZJWE1FOiBXZSBjb3VsZCBlbGlt
aW5hdGUgdGhlc2UgZW50aXJlbHkgaWYgd2Uga25vdyB0aGUgZXhhY3QgdmFsdWUgdGhhdCBmbG93
cyBpbnRvIHRoaXMuCiAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xMDYyMDEKLSAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3Bl
Y0NlbGwpOwotICAgICAgICBub2RlLnNldENhbkV4aXQodHJ1ZSk7CisgICAgICAgIGZvck5vZGUo
bm9kZS0+Y2hpbGQxKCkpLmZpbHRlcihTcGVjQ2VsbCk7CisgICAgICAgIG5vZGUtPnNldENhbkV4
aXQodHJ1ZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIAogICAgIGNhc2UgQ2hlY2tTdHJ1Y3R1
cmU6CiAgICAgY2FzZSBGb3J3YXJkQ2hlY2tTdHJ1Y3R1cmU6IHsKICAgICAgICAgLy8gRklYTUU6
IFdlIHNob3VsZCBiZSBhYmxlIHRvIHByb3BhZ2F0ZSB0aGUgc3RydWN0dXJlIHNldHMgb2YgY29u
c3RhbnRzIChpLmUuIHByb3RvdHlwZXMpLgotICAgICAgICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSA9
IGZvck5vZGUobm9kZS5jaGlsZDEoKSk7CisgICAgICAgIEFic3RyYWN0VmFsdWUmIHZhbHVlID0g
Zm9yTm9kZShub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgIC8vIElmIHRoaXMgc3RydWN0dXJlIGNo
ZWNrIGlzIGF0dGVtcHRpbmcgdG8gcHJvdmUga25vd2xlZGdlIGFscmVhZHkgaGVsZCBpbgogICAg
ICAgICAvLyB0aGUgZnV0dXJlUG9zc2libGVTdHJ1Y3R1cmUgc2V0IHRoZW4gdGhlIGNvbnN0YW50
IGZvbGRpbmcgcGhhc2Ugc2hvdWxkCiAgICAgICAgIC8vIHR1cm4gdGhpcyBpbnRvIGEgd2F0Y2hw
b2ludCBpbnN0ZWFkLgotICAgICAgICBTdHJ1Y3R1cmVTZXQmIHNldCA9IG5vZGUuc3RydWN0dXJl
U2V0KCk7CisgICAgICAgIFN0cnVjdHVyZVNldCYgc2V0ID0gbm9kZS0+c3RydWN0dXJlU2V0KCk7
CiAgICAgICAgIGlmICh2YWx1ZS5tX2Z1dHVyZVBvc3NpYmxlU3RydWN0dXJlLmlzU3Vic2V0T2Yo
c2V0KQogICAgICAgICAgICAgfHwgdmFsdWUubV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuaXNTdWJz
ZXRPZihzZXQpKQogICAgICAgICAgICAgbV9mb3VuZENvbnN0YW50cyA9IHRydWU7Ci0gICAgICAg
IG5vZGUuc2V0Q2FuRXhpdCgKKyAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCgKICAgICAgICAgICAg
ICF2YWx1ZS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5pc1N1YnNldE9mKHNldCkKICAgICAgICAg
ICAgIHx8ICFpc0NlbGxTcGVjdWxhdGlvbih2YWx1ZS5tX3R5cGUpKTsKICAgICAgICAgdmFsdWUu
ZmlsdGVyKHNldCk7CkBAIC0xNTQ5LDcgKzE1NjgsNyBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4
ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgIAogICAgIGNhc2UgU3RydWN0dXJlVHJhbnNpdGlv
bldhdGNocG9pbnQ6CiAgICAgY2FzZSBGb3J3YXJkU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9p
bnQ6IHsKLSAgICAgICAgQWJzdHJhY3RWYWx1ZSYgdmFsdWUgPSBmb3JOb2RlKG5vZGUuY2hpbGQx
KCkpOworICAgICAgICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSA9IGZvck5vZGUobm9kZS0+Y2hpbGQx
KCkpOwogCiAgICAgICAgIC8vIEl0J3Mgb25seSB2YWxpZCB0byBpc3N1ZSBhIHN0cnVjdHVyZSB0
cmFuc2l0aW9uIHdhdGNocG9pbnQgaWYgd2UgYWxyZWFkeQogICAgICAgICAvLyBrbm93IHRoYXQg
dGhlIHdhdGNocG9pbnQgY292ZXJzIGEgc3VwZXJzZXQgb2YgdGhlIHN0cnVjdHVyZXMga25vd24g
dG8KQEAgLTE1NTcsMTU0ICsxNTc2LDE1NCBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUo
dW5zaWduZWQgaW5kCiAgICAgICAgIC8vIEN1cnJlbnRseSwgd2Ugb25seSBpc3N1ZSBzaW5nbGV0
b24gd2F0Y2hwb2ludHMgKHRoYXQgY2hlY2sgb25lIHN0cnVjdHVyZSkKICAgICAgICAgLy8gYW5k
IG91ciBmdXR1cmVQb3NzaWJsZVN0cnVjdHVyZSBzZXQgY2FuIG9ubHkgY29udGFpbiB6ZXJvLCBv
bmUsIG9yIGFuCiAgICAgICAgIC8vIGluZmluaXR5IG9mIHN0cnVjdHVyZXMuCi0gICAgICAgIEFT
U0VSVCh2YWx1ZS5tX2Z1dHVyZVBvc3NpYmxlU3RydWN0dXJlLmlzU3Vic2V0T2YoU3RydWN0dXJl
U2V0KG5vZGUuc3RydWN0dXJlKCkpKSk7CisgICAgICAgIEFTU0VSVCh2YWx1ZS5tX2Z1dHVyZVBv
c3NpYmxlU3RydWN0dXJlLmlzU3Vic2V0T2YoU3RydWN0dXJlU2V0KG5vZGUtPnN0cnVjdHVyZSgp
KSkpOwogICAgICAgICAKICAgICAgICAgQVNTRVJUKHZhbHVlLmlzQ2xlYXIoKSB8fCBpc0NlbGxT
cGVjdWxhdGlvbih2YWx1ZS5tX3R5cGUpKTsgLy8gVmFsdWUgY291bGQgYmUgY2xlYXIgaWYgd2Un
dmUgcHJvdmVuIG11c3QtZXhpdCBkdWUgdG8gYSBzcGVjdWxhdGlvbiBzdGF0aWNhbGx5IGtub3du
IHRvIGJlIGJhZC4KLSAgICAgICAgdmFsdWUuZmlsdGVyKG5vZGUuc3RydWN0dXJlKCkpOworICAg
ICAgICB2YWx1ZS5maWx0ZXIobm9kZS0+c3RydWN0dXJlKCkpOwogICAgICAgICBtX2hhdmVTdHJ1
Y3R1cmVzID0gdHJ1ZTsKLSAgICAgICAgbm9kZS5zZXRDYW5FeGl0KHRydWUpOworICAgICAgICBu
b2RlLT5zZXRDYW5FeGl0KHRydWUpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgICAg
ICAKICAgICBjYXNlIFB1dFN0cnVjdHVyZToKICAgICBjYXNlIFBoYW50b21QdXRTdHJ1Y3R1cmU6
Ci0gICAgICAgIG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7Ci0gICAgICAgIGlmICghZm9yTm9kZShu
b2RlLmNoaWxkMSgpKS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5pc0NsZWFyKCkpIHsKKyAgICAg
ICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CisgICAgICAgIGlmICghZm9yTm9kZShub2RlLT5j
aGlsZDEoKSkubV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuaXNDbGVhcigpKSB7CiAgICAgICAgICAg
ICBjbG9iYmVyU3RydWN0dXJlcyhpbmRleEluQmxvY2spOwotICAgICAgICAgICAgZm9yTm9kZShu
b2RlLmNoaWxkMSgpKS5zZXQobm9kZS5zdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSgpLm5ld1N0cnVj
dHVyZSk7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5zZXQobm9kZS0+c3Ry
dWN0dXJlVHJhbnNpdGlvbkRhdGEoKS5uZXdTdHJ1Y3R1cmUpOwogICAgICAgICAgICAgbV9oYXZl
U3RydWN0dXJlcyA9IHRydWU7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBH
ZXRCdXR0ZXJmbHk6CiAgICAgY2FzZSBBbGxvY2F0ZVByb3BlcnR5U3RvcmFnZToKICAgICBjYXNl
IFJlYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2U6Ci0gICAgICAgIG5vZGUuc2V0Q2FuRXhpdCghaXND
ZWxsU3BlY3VsYXRpb24oZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKTsKLSAgICAgICAg
Zm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY0NlbGwpOwotICAgICAgICBmb3JOb2Rl
KG5vZGVJbmRleCkuY2xlYXIoKTsgLy8gVGhlIHJlc3VsdCBpcyBub3QgYSBKUyB2YWx1ZS4KKyAg
ICAgICAgbm9kZS0+c2V0Q2FuRXhpdCghaXNDZWxsU3BlY3VsYXRpb24oZm9yTm9kZShub2RlLT5j
aGlsZDEoKSkubV90eXBlKSk7CisgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRl
cihTcGVjQ2VsbCk7CisgICAgICAgIGZvck5vZGUobm9kZSkuY2xlYXIoKTsgLy8gVGhlIHJlc3Vs
dCBpcyBub3QgYSBKUyB2YWx1ZS4KICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBDaGVja0FycmF5
OiB7Ci0gICAgICAgIGlmIChub2RlLmFycmF5TW9kZSgpLmFscmVhZHlDaGVja2VkKG1fZ3JhcGgs
IG5vZGUsIGZvck5vZGUobm9kZS5jaGlsZDEoKSkpKSB7CisgICAgICAgIGlmIChub2RlLT5hcnJh
eU1vZGUoKS5hbHJlYWR5Q2hlY2tlZChtX2dyYXBoLCBub2RlLCBmb3JOb2RlKG5vZGUtPmNoaWxk
MSgpKSkpIHsKICAgICAgICAgICAgIG1fZm91bmRDb25zdGFudHMgPSB0cnVlOwotICAgICAgICAg
ICAgbm9kZS5zZXRDYW5FeGl0KGZhbHNlKTsKKyAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQo
ZmFsc2UpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgbm9kZS5zZXRD
YW5FeGl0KHRydWUpOyAvLyBMaWVzLCBidXQgdGhpcyBpcyBmb2xsb3dlZCBieSBvcGVyYXRpb25z
IChsaWtlIEdldEJ5VmFsKSB0aGF0IGFsd2F5cyBleGl0LCBzbyB0aGVyZSBpcyBubyBwb2ludCBp
biB1cyB0cnlpbmcgdG8gYmUgY2xldmVyIGhlcmUuCi0gICAgICAgIHN3aXRjaCAobm9kZS5hcnJh
eU1vZGUoKS50eXBlKCkpIHsKKyAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsgLy8gTGll
cywgYnV0IHRoaXMgaXMgZm9sbG93ZWQgYnkgb3BlcmF0aW9ucyAobGlrZSBHZXRCeVZhbCkgdGhh
dCBhbHdheXMgZXhpdCwgc28gdGhlcmUgaXMgbm8gcG9pbnQgaW4gdXMgdHJ5aW5nIHRvIGJlIGNs
ZXZlciBoZXJlLgorICAgICAgICBzd2l0Y2ggKG5vZGUtPmFycmF5TW9kZSgpLnR5cGUoKSkgewog
ICAgICAgICBjYXNlIEFycmF5OjpTdHJpbmc6Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hp
bGQxKCkpLmZpbHRlcihTcGVjU3RyaW5nKTsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZS0+Y2hp
bGQxKCkpLmZpbHRlcihTcGVjU3RyaW5nKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBj
YXNlIEFycmF5OjpJbnQzMjoKICAgICAgICAgY2FzZSBBcnJheTo6RG91YmxlOgogICAgICAgICBj
YXNlIEFycmF5OjpDb250aWd1b3VzOgogICAgICAgICBjYXNlIEFycmF5OjpBcnJheVN0b3JhZ2U6
CiAgICAgICAgIGNhc2UgQXJyYXk6OlNsb3dQdXRBcnJheVN0b3JhZ2U6Ci0gICAgICAgICAgICBm
b3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjQ2VsbCk7CisgICAgICAgICAgICBmb3JO
b2RlKG5vZGUtPmNoaWxkMSgpKS5maWx0ZXIoU3BlY0NlbGwpOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIGNhc2UgQXJyYXk6OkFyZ3VtZW50czoKLSAgICAgICAgICAgIGZvck5vZGUobm9k
ZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNBcmd1bWVudHMpOworICAgICAgICAgICAgZm9yTm9kZShu
b2RlLT5jaGlsZDEoKSkuZmlsdGVyKFNwZWNBcmd1bWVudHMpOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIGNhc2UgQXJyYXk6OkludDhBcnJheToKLSAgICAgICAgICAgIGZvck5vZGUobm9k
ZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNJbnQ4QXJyYXkpOworICAgICAgICAgICAgZm9yTm9kZShu
b2RlLT5jaGlsZDEoKSkuZmlsdGVyKFNwZWNJbnQ4QXJyYXkpOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIGNhc2UgQXJyYXk6OkludDE2QXJyYXk6Ci0gICAgICAgICAgICBmb3JOb2RlKG5v
ZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjSW50MTZBcnJheSk7CisgICAgICAgICAgICBmb3JOb2Rl
KG5vZGUtPmNoaWxkMSgpKS5maWx0ZXIoU3BlY0ludDE2QXJyYXkpOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OkludDMyQXJyYXk6Ci0gICAgICAgICAgICBmb3JOb2Rl
KG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjSW50MzJBcnJheSk7CisgICAgICAgICAgICBmb3JO
b2RlKG5vZGUtPmNoaWxkMSgpKS5maWx0ZXIoU3BlY0ludDMyQXJyYXkpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OlVpbnQ4QXJyYXk6Ci0gICAgICAgICAgICBmb3JO
b2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjVWludDhBcnJheSk7CisgICAgICAgICAgICBm
b3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5maWx0ZXIoU3BlY1VpbnQ4QXJyYXkpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OlVpbnQ4Q2xhbXBlZEFycmF5OgotICAgICAg
ICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY1VpbnQ4Q2xhbXBlZEFycmF5
KTsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRlcihTcGVjVWludDhD
bGFtcGVkQXJyYXkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OlVp
bnQxNkFycmF5OgotICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3Bl
Y1VpbnQxNkFycmF5KTsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRl
cihTcGVjVWludDE2QXJyYXkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJy
YXk6OlVpbnQzMkFycmF5OgotICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0
ZXIoU3BlY1VpbnQzMkFycmF5KTsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkp
LmZpbHRlcihTcGVjVWludDMyQXJyYXkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNh
c2UgQXJyYXk6OkZsb2F0MzJBcnJheToKLSAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEo
KSkuZmlsdGVyKFNwZWNGbG9hdDMyQXJyYXkpOworICAgICAgICAgICAgZm9yTm9kZShub2RlLT5j
aGlsZDEoKSkuZmlsdGVyKFNwZWNGbG9hdDMyQXJyYXkpOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIGNhc2UgQXJyYXk6OkZsb2F0NjRBcnJheToKLSAgICAgICAgICAgIGZvck5vZGUobm9k
ZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNGbG9hdDY0QXJyYXkpOworICAgICAgICAgICAgZm9yTm9k
ZShub2RlLT5jaGlsZDEoKSkuZmlsdGVyKFNwZWNGbG9hdDY0QXJyYXkpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIGZvck5vZGUobm9kZS5j
aGlsZDEoKSkuZmlsdGVyQXJyYXlNb2Rlcyhub2RlLmFycmF5TW9kZSgpLmFycmF5TW9kZXNUaGF0
UGFzc0ZpbHRlcmluZygpKTsKKyAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDEoKSkuZmlsdGVy
QXJyYXlNb2Rlcyhub2RlLT5hcnJheU1vZGUoKS5hcnJheU1vZGVzVGhhdFBhc3NGaWx0ZXJpbmco
KSk7CiAgICAgICAgIG1faGF2ZVN0cnVjdHVyZXMgPSB0cnVlOwogICAgICAgICBicmVhazsKICAg
ICB9CiAgICAgY2FzZSBBcnJheWlmeTogewotICAgICAgICBpZiAobm9kZS5hcnJheU1vZGUoKS5h
bHJlYWR5Q2hlY2tlZChtX2dyYXBoLCBub2RlLCBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpKSkgewor
ICAgICAgICBpZiAobm9kZS0+YXJyYXlNb2RlKCkuYWxyZWFkeUNoZWNrZWQobV9ncmFwaCwgbm9k
ZSwgZm9yTm9kZShub2RlLT5jaGlsZDEoKSkpKSB7CiAgICAgICAgICAgICBtX2ZvdW5kQ29uc3Rh
bnRzID0gdHJ1ZTsKLSAgICAgICAgICAgIG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7CisgICAgICAg
ICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9Ci0gICAgICAgIEFTU0VSVChub2RlLmFycmF5TW9kZSgpLmNvbnZlcnNpb24oKSA9PSBBcnJh
eTo6Q29udmVydAotICAgICAgICAgICAgfHwgbm9kZS5hcnJheU1vZGUoKS5jb252ZXJzaW9uKCkg
PT0gQXJyYXk6OlJhZ2VDb252ZXJ0KTsKLSAgICAgICAgbm9kZS5zZXRDYW5FeGl0KHRydWUpOwot
ICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjQ2VsbCk7Ci0gICAgICAg
IGlmIChub2RlLmNoaWxkMigpKQotICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMigpKS5m
aWx0ZXIoU3BlY0ludDMyKTsKKyAgICAgICAgQVNTRVJUKG5vZGUtPmFycmF5TW9kZSgpLmNvbnZl
cnNpb24oKSA9PSBBcnJheTo6Q29udmVydAorICAgICAgICAgICAgfHwgbm9kZS0+YXJyYXlNb2Rl
KCkuY29udmVyc2lvbigpID09IEFycmF5OjpSYWdlQ29udmVydCk7CisgICAgICAgIG5vZGUtPnNl
dENhbkV4aXQodHJ1ZSk7CisgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRlcihT
cGVjQ2VsbCk7CisgICAgICAgIGlmIChub2RlLT5jaGlsZDIoKSkKKyAgICAgICAgICAgIGZvck5v
ZGUobm9kZS0+Y2hpbGQyKCkpLmZpbHRlcihTcGVjSW50MzIpOwogICAgICAgICBjbG9iYmVyU3Ry
dWN0dXJlcyhpbmRleEluQmxvY2spOwotICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZp
bHRlckFycmF5TW9kZXMobm9kZS5hcnJheU1vZGUoKS5hcnJheU1vZGVzVGhhdFBhc3NGaWx0ZXJp
bmcoKSk7CisgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRlckFycmF5TW9kZXMo
bm9kZS0+YXJyYXlNb2RlKCkuYXJyYXlNb2Rlc1RoYXRQYXNzRmlsdGVyaW5nKCkpOwogICAgICAg
ICBtX2hhdmVTdHJ1Y3R1cmVzID0gdHJ1ZTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGNh
c2UgQXJyYXlpZnlUb1N0cnVjdHVyZTogewotICAgICAgICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSA9
IGZvck5vZGUobm9kZS5jaGlsZDEoKSk7Ci0gICAgICAgIFN0cnVjdHVyZVNldCBzZXQgPSBub2Rl
LnN0cnVjdHVyZSgpOworICAgICAgICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSA9IGZvck5vZGUobm9k
ZS0+Y2hpbGQxKCkpOworICAgICAgICBTdHJ1Y3R1cmVTZXQgc2V0ID0gbm9kZS0+c3RydWN0dXJl
KCk7CiAgICAgICAgIGlmICh2YWx1ZS5tX2Z1dHVyZVBvc3NpYmxlU3RydWN0dXJlLmlzU3Vic2V0
T2Yoc2V0KQogICAgICAgICAgICAgfHwgdmFsdWUubV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuaXNT
dWJzZXRPZihzZXQpKQogICAgICAgICAgICAgbV9mb3VuZENvbnN0YW50cyA9IHRydWU7Ci0gICAg
ICAgIG5vZGUuc2V0Q2FuRXhpdCh0cnVlKTsKLSAgICAgICAgaWYgKG5vZGUuY2hpbGQyKCkpCi0g
ICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQyKCkpLmZpbHRlcihTcGVjSW50MzIpOworICAg
ICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOworICAgICAgICBpZiAobm9kZS0+Y2hpbGQyKCkp
CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMigpKS5maWx0ZXIoU3BlY0ludDMyKTsK
ICAgICAgICAgY2xvYmJlclN0cnVjdHVyZXMoaW5kZXhJbkJsb2NrKTsKICAgICAgICAgdmFsdWUu
ZmlsdGVyKHNldCk7CiAgICAgICAgIG1faGF2ZVN0cnVjdHVyZXMgPSB0cnVlOwogICAgICAgICBi
cmVhazsKICAgICB9CiAgICAgY2FzZSBHZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlOiB7Ci0gICAg
ICAgIG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7Ci0gICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5j
bGVhcigpOworICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKKyAgICAgICAgZm9yTm9k
ZShub2RlKS5jbGVhcigpOwogICAgICAgICBicmVhazsgCiAgICAgfQogICAgIGNhc2UgR2V0QnlP
ZmZzZXQ6Ci0gICAgICAgIGlmICghbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5oYXNTdG9yYWdlUmVz
dWx0KCkpIHsKLSAgICAgICAgICAgIG5vZGUuc2V0Q2FuRXhpdCghaXNDZWxsU3BlY3VsYXRpb24o
Zm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKTsKLSAgICAgICAgICAgIGZvck5vZGUobm9k
ZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNDZWxsKTsKKyAgICAgICAgaWYgKCFub2RlLT5jaGlsZDEo
KS0+aGFzU3RvcmFnZVJlc3VsdCgpKSB7CisgICAgICAgICAgICBub2RlLnNldENhbkV4aXQoIWlz
Q2VsbFNwZWN1bGF0aW9uKGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fdHlwZSkpOworICAgICAg
ICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDEoKSkuZmlsdGVyKFNwZWNDZWxsKTsKICAgICAgICAg
fQotICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkubWFrZVRvcCgpOworICAgICAgICBmb3JOb2Rl
KG5vZGUpLm1ha2VUb3AoKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICBjYXNl
IFB1dEJ5T2Zmc2V0OiB7CiAgICAgICAgIGJvb2wgY2FuRXhpdCA9IGZhbHNlOwotICAgICAgICBp
ZiAoIW1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0uaGFzU3RvcmFnZVJlc3VsdCgpKSB7Ci0gICAgICAg
ICAgICBjYW5FeGl0IHw9ICFpc0NlbGxTcGVjdWxhdGlvbihmb3JOb2RlKG5vZGUuY2hpbGQxKCkp
Lm1fdHlwZSk7Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVj
Q2VsbCk7Ci0gICAgICAgIH0KLSAgICAgICAgY2FuRXhpdCB8PSAhaXNDZWxsU3BlY3VsYXRpb24o
Zm9yTm9kZShub2RlLmNoaWxkMigpKS5tX3R5cGUpOwotICAgICAgICBmb3JOb2RlKG5vZGUuY2hp
bGQyKCkpLmZpbHRlcihTcGVjQ2VsbCk7Ci0gICAgICAgIG5vZGUuc2V0Q2FuRXhpdChjYW5FeGl0
KTsKKyAgICAgICAgaWYgKCFub2RlLT5jaGlsZDEoKS0+aGFzU3RvcmFnZVJlc3VsdCgpKSB7Cisg
ICAgICAgICAgICBjYW5FeGl0IHw9ICFpc0NlbGxTcGVjdWxhdGlvbihmb3JOb2RlKG5vZGUtPmNo
aWxkMSgpKS5tX3R5cGUpOworICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDEoKSkuZmls
dGVyKFNwZWNDZWxsKTsKKyAgICAgICAgfQorICAgICAgICBjYW5FeGl0IHw9ICFpc0NlbGxTcGVj
dWxhdGlvbihmb3JOb2RlKG5vZGUtPmNoaWxkMigpKS5tX3R5cGUpOworICAgICAgICBmb3JOb2Rl
KG5vZGUtPmNoaWxkMigpKS5maWx0ZXIoU3BlY0NlbGwpOworICAgICAgICBub2RlLT5zZXRDYW5F
eGl0KGNhbkV4aXQpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgICAgICAKICAgICBj
YXNlIENoZWNrRnVuY3Rpb246IHsKLSAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IGZvck5vZGUobm9k
ZS5jaGlsZDEoKSkudmFsdWUoKTsKLSAgICAgICAgaWYgKHZhbHVlID09IG5vZGUuZnVuY3Rpb24o
KSkgeworICAgICAgICBKU1ZhbHVlIHZhbHVlID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSkudmFs
dWUoKTsKKyAgICAgICAgaWYgKHZhbHVlID09IG5vZGUtPmZ1bmN0aW9uKCkpIHsKICAgICAgICAg
ICAgIG1fZm91bmRDb25zdGFudHMgPSB0cnVlOwogICAgICAgICAgICAgQVNTRVJUKHZhbHVlKTsK
LSAgICAgICAgICAgIG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7CisgICAgICAgICAgICBub2RlLT5z
ZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAg
IAotICAgICAgICBub2RlLnNldENhbkV4aXQodHJ1ZSk7IC8vIExpZXMhIFdlIGNhbiBkbyBiZXR0
ZXIuCi0gICAgICAgIGlmICghZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXJCeVZhbHVlKG5v
ZGUuZnVuY3Rpb24oKSkpIHsKKyAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsgLy8gTGll
cyEgV2UgY2FuIGRvIGJldHRlci4KKyAgICAgICAgaWYgKCFmb3JOb2RlKG5vZGUtPmNoaWxkMSgp
KS5maWx0ZXJCeVZhbHVlKG5vZGUtPmZ1bmN0aW9uKCkpKSB7CiAgICAgICAgICAgICBtX2lzVmFs
aWQgPSBmYWxzZTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkBAIC0xNzEzLDY3ICsx
NzMyLDY5IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAg
ICAgCiAgICAgY2FzZSBQdXRCeUlkOgogICAgIGNhc2UgUHV0QnlJZERpcmVjdDoKLSAgICAgICAg
bm9kZS5zZXRDYW5FeGl0KHRydWUpOwotICAgICAgICBpZiAoU3RydWN0dXJlKiBzdHJ1Y3R1cmUg
PSBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmJlc3RQcm92ZW5TdHJ1Y3R1cmUoKSkgeworICAgICAg
ICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOworICAgICAgICBpZiAoU3RydWN0dXJlKiBzdHJ1Y3R1
cmUgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5iZXN0UHJvdmVuU3RydWN0dXJlKCkpIHsKICAg
ICAgICAgICAgIFB1dEJ5SWRTdGF0dXMgc3RhdHVzID0gUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZv
cigKICAgICAgICAgICAgICAgICBtX2dyYXBoLm1fZ2xvYmFsRGF0YSwKLSAgICAgICAgICAgICAg
ICBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLmNvZGVPcmlnaW4pLAorICAgICAgICAgICAg
ICAgIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPmNvZGVPcmlnaW4pLAogICAgICAgICAg
ICAgICAgIHN0cnVjdHVyZSwKLSAgICAgICAgICAgICAgICBtX2dyYXBoLm1fY29kZUJsb2NrLT5p
ZGVudGlmaWVyKG5vZGUuaWRlbnRpZmllck51bWJlcigpKSwKLSAgICAgICAgICAgICAgICBub2Rl
Lm9wKCkgPT0gUHV0QnlJZERpcmVjdCk7CisgICAgICAgICAgICAgICAgbV9ncmFwaC5tX2NvZGVC
bG9jay0+aWRlbnRpZmllcihub2RlLT5pZGVudGlmaWVyTnVtYmVyKCkpLAorICAgICAgICAgICAg
ICAgIG5vZGUtPm9wKCkgPT0gUHV0QnlJZERpcmVjdCk7CiAgICAgICAgICAgICBpZiAoc3RhdHVz
LmlzU2ltcGxlUmVwbGFjZSgpKSB7Ci0gICAgICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxk
MSgpKS5maWx0ZXIoc3RydWN0dXJlKTsKKyAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNo
aWxkMSgpKS5maWx0ZXIoc3RydWN0dXJlKTsKICAgICAgICAgICAgICAgICBtX2ZvdW5kQ29uc3Rh
bnRzID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIGlmIChzdGF0dXMuaXNTaW1wbGVUcmFuc2l0aW9uKCkpIHsKICAgICAgICAgICAgICAg
ICBjbG9iYmVyU3RydWN0dXJlcyhpbmRleEluQmxvY2spOwotICAgICAgICAgICAgICAgIGZvck5v
ZGUobm9kZS5jaGlsZDEoKSkuc2V0KHN0YXR1cy5uZXdTdHJ1Y3R1cmUoKSk7CisgICAgICAgICAg
ICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDEoKSkuc2V0KHN0YXR1cy5uZXdTdHJ1Y3R1cmUoKSk7
CiAgICAgICAgICAgICAgICAgbV9oYXZlU3RydWN0dXJlcyA9IHRydWU7CiAgICAgICAgICAgICAg
ICAgbV9mb3VuZENvbnN0YW50cyA9IHRydWU7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0
ZXIoU3BlY0NlbGwpOwotICAgICAgICBjbG9iYmVyV29ybGQobm9kZS5jb2RlT3JpZ2luLCBpbmRl
eEluQmxvY2spOworICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5maWx0ZXIoU3BlY0Nl
bGwpOworICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+Y29kZU9yaWdpbiwgaW5kZXhJbkJsb2Nr
KTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICBjYXNlIEdldEdsb2JhbFZhcjoK
LSAgICAgICAgbm9kZS5zZXRDYW5FeGl0KGZhbHNlKTsKLSAgICAgICAgZm9yTm9kZShub2RlSW5k
ZXgpLm1ha2VUb3AoKTsKKyAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CisgICAgICAg
IGZvck5vZGUobm9kZSkubWFrZVRvcCgpOwogICAgICAgICBicmVhazsKICAgICAgICAgCiAgICAg
Y2FzZSBHbG9iYWxWYXJXYXRjaHBvaW50OgotICAgICAgICBub2RlLnNldENhbkV4aXQodHJ1ZSk7
CisgICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7CiAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgCiAgICAgY2FzZSBQdXRHbG9iYWxWYXI6CiAgICAgY2FzZSBQdXRHbG9iYWxWYXJDaGVj
azoKLSAgICAgICAgbm9kZS5zZXRDYW5FeGl0KGZhbHNlKTsKKyAgICAgICAgbm9kZS0+c2V0Q2Fu
RXhpdChmYWxzZSk7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAgY2FzZSBDaGVj
a0hhc0luc3RhbmNlOgotICAgICAgICBub2RlLnNldENhbkV4aXQodHJ1ZSk7Ci0gICAgICAgIGZv
ck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNDZWxsKTsKKyAgICAgICAgbm9kZS0+c2V0
Q2FuRXhpdCh0cnVlKTsKKyAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDEoKSkuZmlsdGVyKFNw
ZWNDZWxsKTsKICAgICAgICAgLy8gU2FkbHksIHdlIGRvbid0IHByb3BhZ2F0ZSB0aGUgZmFjdCB0
aGF0IHdlJ3ZlIGRvbmUgQ2hlY2tIYXNJbnN0YW5jZQogICAgICAgICBicmVhazsKICAgICAgICAg
ICAgIAogICAgIGNhc2UgSW5zdGFuY2VPZjoKLSAgICAgICAgbm9kZS5zZXRDYW5FeGl0KHRydWUp
OworICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOwogICAgICAgICAvLyBBZ2Fpbiwgc2Fk
bHksIHdlIGRvbid0IHByb3BhZ2F0ZSB0aGUgZmFjdCB0aGF0IHdlJ3ZlIGRvbmUgSW5zdGFuY2VP
ZgotICAgICAgICBpZiAoIShtX2dyYXBoW25vZGUuY2hpbGQxKCldLnByZWRpY3Rpb24oKSAmIH5T
cGVjQ2VsbCkgJiYgIShmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSAmIH5TcGVjQ2VsbCkp
Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjQ2VsbCk7Ci0g
ICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKFNwZWNDZWxsKTsKLSAgICAgICAg
Zm9yTm9kZShub2RlSW5kZXgpLnNldChTcGVjQm9vbGVhbik7CisgICAgICAgIC8vIEZJWE1FOiBU
aGlzIGFwcGVhcnMgYnJva2VuOiBDaGVja0hhc0luc3RhbmNlIGFscmVhZHkgZG9lcyBhbiB1bmNv
bmRpdGlvbmFsIGNlbGwKKyAgICAgICAgLy8gY2hlY2suIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xMDc0NzkKKyAgICAgICAgaWYgKCEobm9kZS0+Y2hpbGQxKCktPnBy
ZWRpY3Rpb24oKSAmIH5TcGVjQ2VsbCkgJiYgIShmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX3R5
cGUgJiB+U3BlY0NlbGwpKQorICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDEoKSkuZmls
dGVyKFNwZWNDZWxsKTsKKyAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDIoKSkuZmlsdGVyKFNw
ZWNDZWxsKTsKKyAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0Jvb2xlYW4pOwogICAgICAg
ICBicmVhazsKICAgICAgICAgICAgIAogICAgIGNhc2UgUGhpOgogICAgIGNhc2UgRmx1c2g6Ci0g
ICAgICAgIG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7CisgICAgICAgIG5vZGUtPnNldENhbkV4aXQo
ZmFsc2UpOwogICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgIGNhc2UgQnJlYWtwb2lu
dDoKLSAgICAgICAgbm9kZS5zZXRDYW5FeGl0KGZhbHNlKTsKKyAgICAgICAgbm9kZS0+c2V0Q2Fu
RXhpdChmYWxzZSk7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAgY2FzZSBDYWxs
OgpAQCAtMTc4MiwxOCArMTgwMywxOCBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5z
aWduZWQgaW5kCiAgICAgY2FzZSBSZXNvbHZlQmFzZToKICAgICBjYXNlIFJlc29sdmVCYXNlU3Ry
aWN0UHV0OgogICAgIGNhc2UgUmVzb2x2ZUdsb2JhbDoKLSAgICAgICAgbm9kZS5zZXRDYW5FeGl0
KHRydWUpOwotICAgICAgICBjbG9iYmVyV29ybGQobm9kZS5jb2RlT3JpZ2luLCBpbmRleEluQmxv
Y2spOwotICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkubWFrZVRvcCgpOworICAgICAgICBub2Rl
LT5zZXRDYW5FeGl0KHRydWUpOworICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+Y29kZU9yaWdp
biwgaW5kZXhJbkJsb2NrKTsKKyAgICAgICAgZm9yTm9kZShub2RlKS5tYWtlVG9wKCk7CiAgICAg
ICAgIGJyZWFrOwogCiAgICAgY2FzZSBHYXJiYWdlVmFsdWU6Ci0gICAgICAgIGNsb2JiZXJXb3Js
ZChub2RlLmNvZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7Ci0gICAgICAgIGZvck5vZGUobm9kZUlu
ZGV4KS5tYWtlVG9wKCk7CisgICAgICAgIGNsb2JiZXJXb3JsZChub2RlLT5jb2RlT3JpZ2luLCBp
bmRleEluQmxvY2spOworICAgICAgICBmb3JOb2RlKG5vZGUpLm1ha2VUb3AoKTsKICAgICAgICAg
YnJlYWs7CiAKICAgICBjYXNlIEZvcmNlT1NSRXhpdDoKLSAgICAgICAgbm9kZS5zZXRDYW5FeGl0
KHRydWUpOworICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOwogICAgICAgICBtX2lzVmFs
aWQgPSBmYWxzZTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKQEAgLTE4MDEsNyArMTgy
Miw3IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICBjYXNl
IElubGluZVN0YXJ0OgogICAgIGNhc2UgTm9wOgogICAgIGNhc2UgQ291bnRFeGVjdXRpb246Ci0g
ICAgICAgIG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7CisgICAgICAgIG5vZGUtPnNldENhbkV4aXQo
ZmFsc2UpOwogICAgICAgICBicmVhazsKICAgICAgICAgCiAgICAgY2FzZSBMYXN0Tm9kZVR5cGU6
CkBAIC0xODU0LDE1ICsxODc1LDE0IEBAIGlubGluZSB2b2lkIEFic3RyYWN0U3RhdGU6OmNsb2Ji
ZXJTdHJ1Y3QKICAgICBtX2RpZENsb2JiZXIgPSB0cnVlOwogfQogCi1pbmxpbmUgYm9vbCBBYnN0
cmFjdFN0YXRlOjptZXJnZVN0YXRlQXRUYWlsKEFic3RyYWN0VmFsdWUmIGRlc3RpbmF0aW9uLCBB
YnN0cmFjdFZhbHVlJiBpblZhcmlhYmxlLCBOb2RlSW5kZXggbm9kZUluZGV4KQoraW5saW5lIGJv
b2wgQWJzdHJhY3RTdGF0ZTo6bWVyZ2VTdGF0ZUF0VGFpbChBYnN0cmFjdFZhbHVlJiBkZXN0aW5h
dGlvbiwgQWJzdHJhY3RWYWx1ZSYgaW5WYXJpYWJsZSwgTm9kZSogbm9kZSkKIHsKLSAgICBpZiAo
bm9kZUluZGV4ID09IE5vTm9kZSkKKyAgICBpZiAoIW5vZGUpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICAgICAgCiAgICAgQWJzdHJhY3RWYWx1ZSBzb3VyY2U7CiAgICAgCi0gICAgTm9kZSYg
dGFpbE5vZGUgPSBtX2dyYXBoW25vZGVJbmRleF07Ci0gICAgaWYgKHRhaWxOb2RlLnZhcmlhYmxl
QWNjZXNzRGF0YSgpLT5pc0NhcHR1cmVkKCkpIHsKKyAgICBpZiAobm9kZS0+dmFyaWFibGVBY2Nl
c3NEYXRhKCktPmlzQ2FwdHVyZWQoKSkgewogICAgICAgICAvLyBJZiBpdCdzIGNhcHR1cmVkIHRo
ZW4gd2Uga25vdyB0aGF0IHdoYXRldmVyIHZhbHVlIHdhcyBzdG9yZWQgaW50byB0aGUgdmFyaWFi
bGUgbGFzdCBpcyB0aGUKICAgICAgICAgLy8gb25lIHdlIGNhcmUgYWJvdXQuIFRoaXMgaXMgdHJ1
ZSBldmVuIGlmIHRoZSB2YXJpYWJsZSBhdCB0YWlsIGlzIGRlYWQsIHdoaWNoIG1pZ2h0IGhhcHBl
biBpZgogICAgICAgICAvLyB0aGUgbGFzdCB0aGluZyB3ZSBkaWQgdG8gdGhlIHZhcmlhYmxlIHdh
cyBhIEdldExvY2FsIGFuZCB0aGVuIGVuZGVkIHVwIG5vdyB1c2luZyB0aGUKQEAgLTE4NzUsMjYg
KzE4OTUsMjUgQEAgaW5saW5lIGJvb2wgQWJzdHJhY3RTdGF0ZTo6bWVyZ2VTdGF0ZUF0VAogICAg
ICAgICBkYXRhTG9nRigiIGZyb20gbGFzdCBhY2Nlc3MgZHVlIHRvIGNhcHR1cmVkIHZhcmlhYmxl
LlxuIik7CiAjZW5kaWYKICAgICB9IGVsc2UgewotICAgICAgICBpZiAoIXRhaWxOb2RlLnNob3Vs
ZEdlbmVyYXRlKCkpIHsKKyAgICAgICAgaWYgKCFub2RlLT5zaG91bGRHZW5lcmF0ZSgpKSB7CiAg
ICAgICAgICAgICAvLyBJZiB0aGUgbm9kZSBhdCB0YWlsIGlzIGEgR2V0TG9jYWwgdGhhdCBpcyBk
ZWFkLCB0aGVuIHNraXAgaXQgdG8gZ2V0IHRvIHRoZSBQaGkuCiAgICAgICAgICAgICAvLyBUaGUg
UGhpIG1heSBiZSBsaXZlLgotICAgICAgICAgICAgaWYgKHRhaWxOb2RlLm9wKCkgIT0gR2V0TG9j
YWwpCisgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSAhPSBHZXRMb2NhbCkKICAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIG5vZGVJbmRleCA9
IHRhaWxOb2RlLmNoaWxkMSgpLmluZGV4KCk7Ci0gICAgICAgICAgICBBU1NFUlQobV9ncmFwaFtu
b2RlSW5kZXhdLm9wKCkgPT0gUGhpKTsKLSAgICAgICAgICAgIGlmICghbV9ncmFwaFtub2RlSW5k
ZXhdLnNob3VsZEdlbmVyYXRlKCkpCisgICAgICAgICAgICBub2RlID0gbm9kZS0+Y2hpbGQxKCku
bm9kZSgpOworICAgICAgICAgICAgQVNTRVJUKG5vZGUtPm9wKCkgPT0gUGhpKTsKKyAgICAgICAg
ICAgIGlmICghbm9kZS0+c2hvdWxkR2VuZXJhdGUoKSkKICAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBo
W25vZGVJbmRleF07Ci0gICAgICAgIEFTU0VSVChub2RlLnNob3VsZEdlbmVyYXRlKCkpOworICAg
ICAgICBBU1NFUlQobm9kZS0+c2hvdWxkR2VuZXJhdGUoKSk7CiAKICNpZiBERkdfRU5BQkxFKERF
QlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCi0gICAgICAgIGRhdGFMb2dGKCIgICAgICAgICAgSXQn
cyBsaXZlLCBub2RlIEAldS5cbiIsIG5vZGVJbmRleCk7CisgICAgICAgIGRhdGFMb2dGKCIgICAg
ICAgICAgSXQncyBsaXZlLCBub2RlIEAldS5cbiIsIG5vZGUtPmluZGV4KCkpOwogI2VuZGlmCiAg
ICAgCi0gICAgICAgIHN3aXRjaCAobm9kZS5vcCgpKSB7CisgICAgICAgIHN3aXRjaCAobm9kZS0+
b3AoKSkgewogICAgICAgICBjYXNlIFBoaToKICAgICAgICAgY2FzZSBTZXRBcmd1bWVudDoKICAg
ICAgICAgY2FzZSBGbHVzaDoKQEAgLTE5MDksNyArMTkyOCw3IEBAIGlubGluZSBib29sIEFic3Ry
YWN0U3RhdGU6Om1lcmdlU3RhdGVBdFQKICAgICAgICAgICAgIAogICAgICAgICBjYXNlIEdldExv
Y2FsOgogICAgICAgICAgICAgLy8gVGhlIGJsb2NrIHJlZmluZXMgdGhlIHZhbHVlIHdpdGggYWRk
aXRpb25hbCBzcGVjdWxhdGlvbnMuCi0gICAgICAgICAgICBzb3VyY2UgPSBmb3JOb2RlKG5vZGVJ
bmRleCk7CisgICAgICAgICAgICBzb3VyY2UgPSBmb3JOb2RlKG5vZGUpOwogI2lmIERGR19FTkFC
TEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKICAgICAgICAgICAgIGRhdGFMb2dGKCIgICAg
ICAgICAgUmVmaW5pbmcgdG8gIik7CiAgICAgICAgICAgICBzb3VyY2UuZHVtcChXVEY6OmRhdGFG
aWxlKCkpOwpAQCAtMTkyMCwxMSArMTkzOSwxMSBAQCBpbmxpbmUgYm9vbCBBYnN0cmFjdFN0YXRl
OjptZXJnZVN0YXRlQXRUCiAgICAgICAgIGNhc2UgU2V0TG9jYWw6CiAgICAgICAgICAgICAvLyBU
aGUgYmxvY2sgc2V0cyB0aGUgdmFyaWFibGUsIGFuZCBwb3RlbnRpYWxseSByZWZpbmVzIGl0LCBi
b3RoCiAgICAgICAgICAgICAvLyBiZWZvcmUgYW5kIGFmdGVyIHNldHRpbmcgaXQuCi0gICAgICAg
ICAgICBpZiAobm9kZS52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+c2hvdWxkVXNlRG91YmxlRm9ybWF0
KCkpIHsKKyAgICAgICAgICAgIGlmIChub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+c2hvdWxk
VXNlRG91YmxlRm9ybWF0KCkpIHsKICAgICAgICAgICAgICAgICAvLyBGSVhNRTogVGhpcyB1bm5l
Y2Vzc2FyaWx5IGxvc2VzIHByZWNpc2lvbi4KICAgICAgICAgICAgICAgICBzb3VyY2Uuc2V0KFNw
ZWNEb3VibGUpOwogICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgc291cmNlID0g
Zm9yTm9kZShub2RlLmNoaWxkMSgpKTsKKyAgICAgICAgICAgICAgICBzb3VyY2UgPSBmb3JOb2Rl
KG5vZGUtPmNoaWxkMSgpKTsKICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJP
U0UpCiAgICAgICAgICAgICBkYXRhTG9nRigiICAgICAgICAgIFNldHRpbmcgdG8gIik7CiAgICAg
ICAgICAgICBzb3VyY2UuZHVtcChXVEY6OmRhdGFGaWxlKCkpOwpAQCAtMTk4MiwzNSArMjAwMSwz
NCBAQCBpbmxpbmUgYm9vbCBBYnN0cmFjdFN0YXRlOjptZXJnZShCYXNpY0JsCiAgICAgcmV0dXJu
IGNoYW5nZWQ7CiB9CiAKLWlubGluZSBib29sIEFic3RyYWN0U3RhdGU6Om1lcmdlVG9TdWNjZXNz
b3JzKAotICAgIEdyYXBoJiBncmFwaCwgQmFzaWNCbG9jayogYmFzaWNCbG9jaykKK2lubGluZSBi
b29sIEFic3RyYWN0U3RhdGU6Om1lcmdlVG9TdWNjZXNzb3JzKEdyYXBoJiBncmFwaCwgQmFzaWNC
bG9jayogYmFzaWNCbG9jaykKIHsKLSAgICBOb2RlJiB0ZXJtaW5hbCA9IGdyYXBoW2Jhc2ljQmxv
Y2stPmxhc3QoKV07CisgICAgTm9kZSogdGVybWluYWwgPSBiYXNpY0Jsb2NrLT5sYXN0KCk7CiAg
ICAgCi0gICAgQVNTRVJUKHRlcm1pbmFsLmlzVGVybWluYWwoKSk7CisgICAgQVNTRVJUKHRlcm1p
bmFsLT5pc1Rlcm1pbmFsKCkpOwogICAgIAotICAgIHN3aXRjaCAodGVybWluYWwub3AoKSkgewor
ICAgIHN3aXRjaCAodGVybWluYWwtPm9wKCkpIHsKICAgICBjYXNlIEp1bXA6IHsKICAgICAgICAg
QVNTRVJUKGJhc2ljQmxvY2stPmNmYUJyYW5jaERpcmVjdGlvbiA9PSBJbnZhbGlkQnJhbmNoRGly
ZWN0aW9uKTsKICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCiAgICAg
ICAgIGRhdGFMb2dGKCIgICAgICAgIE1lcmdpbmcgdG8gYmxvY2sgIyV1LlxuIiwgdGVybWluYWwu
dGFrZW5CbG9ja0luZGV4KCkpOwogI2VuZGlmCi0gICAgICAgIHJldHVybiBtZXJnZShiYXNpY0Js
b2NrLCBncmFwaC5tX2Jsb2Nrc1t0ZXJtaW5hbC50YWtlbkJsb2NrSW5kZXgoKV0uZ2V0KCkpOwor
ICAgICAgICByZXR1cm4gbWVyZ2UoYmFzaWNCbG9jaywgZ3JhcGgubV9ibG9ja3NbdGVybWluYWwt
PnRha2VuQmxvY2tJbmRleCgpXS5nZXQoKSk7CiAgICAgfQogICAgICAgICAKICAgICBjYXNlIEJy
YW5jaDogewogICAgICAgICBBU1NFUlQoYmFzaWNCbG9jay0+Y2ZhQnJhbmNoRGlyZWN0aW9uICE9
IEludmFsaWRCcmFuY2hEaXJlY3Rpb24pOwogICAgICAgICBib29sIGNoYW5nZWQgPSBmYWxzZTsK
ICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCi0gICAgICAgIGRhdGFM
b2dGKCIgICAgICAgIE1lcmdpbmcgdG8gYmxvY2sgIyV1LlxuIiwgdGVybWluYWwudGFrZW5CbG9j
a0luZGV4KCkpOworICAgICAgICBkYXRhTG9nRigiICAgICAgICBNZXJnaW5nIHRvIGJsb2NrICMl
dS5cbiIsIHRlcm1pbmFsLT50YWtlbkJsb2NrSW5kZXgoKSk7CiAjZW5kaWYKICAgICAgICAgaWYg
KGJhc2ljQmxvY2stPmNmYUJyYW5jaERpcmVjdGlvbiAhPSBUYWtlRmFsc2UpCi0gICAgICAgICAg
ICBjaGFuZ2VkIHw9IG1lcmdlKGJhc2ljQmxvY2ssIGdyYXBoLm1fYmxvY2tzW3Rlcm1pbmFsLnRh
a2VuQmxvY2tJbmRleCgpXS5nZXQoKSk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlKGJh
c2ljQmxvY2ssIGdyYXBoLm1fYmxvY2tzW3Rlcm1pbmFsLT50YWtlbkJsb2NrSW5kZXgoKV0uZ2V0
KCkpOwogI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKICAgICAgICAg
ZGF0YUxvZ0YoIiAgICAgICAgTWVyZ2luZyB0byBibG9jayAjJXUuXG4iLCB0ZXJtaW5hbC5ub3RU
YWtlbkJsb2NrSW5kZXgoKSk7CiAjZW5kaWYKICAgICAgICAgaWYgKGJhc2ljQmxvY2stPmNmYUJy
YW5jaERpcmVjdGlvbiAhPSBUYWtlVHJ1ZSkKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2Uo
YmFzaWNCbG9jaywgZ3JhcGgubV9ibG9ja3NbdGVybWluYWwubm90VGFrZW5CbG9ja0luZGV4KCld
LmdldCgpKTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2UoYmFzaWNCbG9jaywgZ3JhcGgu
bV9ibG9ja3NbdGVybWluYWwtPm5vdFRha2VuQmxvY2tJbmRleCgpXS5nZXQoKSk7CiAgICAgICAg
IHJldHVybiBjaGFuZ2VkOwogICAgIH0KICAgICAgICAgCkBAIC0yMDI2LDEyICsyMDQ0LDEyIEBA
IGlubGluZSBib29sIEFic3RyYWN0U3RhdGU6Om1lcmdlVG9TdWNjZXMKICAgICB9CiB9CiAKLWlu
bGluZSBib29sIEFic3RyYWN0U3RhdGU6Om1lcmdlVmFyaWFibGVCZXR3ZWVuQmxvY2tzKEFic3Ry
YWN0VmFsdWUmIGRlc3RpbmF0aW9uLCBBYnN0cmFjdFZhbHVlJiBzb3VyY2UsIE5vZGVJbmRleCBk
ZXN0aW5hdGlvbk5vZGVJbmRleCwgTm9kZUluZGV4IHNvdXJjZU5vZGVJbmRleCkKK2lubGluZSBi
b29sIEFic3RyYWN0U3RhdGU6Om1lcmdlVmFyaWFibGVCZXR3ZWVuQmxvY2tzKEFic3RyYWN0VmFs
dWUmIGRlc3RpbmF0aW9uLCBBYnN0cmFjdFZhbHVlJiBzb3VyY2UsIE5vZGUqIGRlc3RpbmF0aW9u
Tm9kZSwgTm9kZSogc291cmNlTm9kZSkKIHsKLSAgICBpZiAoZGVzdGluYXRpb25Ob2RlSW5kZXgg
PT0gTm9Ob2RlKQorICAgIGlmICghZGVzdGluYXRpb25Ob2RlKQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgCi0gICAgQVNTRVJUX1VOVVNFRChzb3VyY2VOb2RlSW5kZXgsIHNvdXJjZU5vZGVJ
bmRleCAhPSBOb05vZGUpOworICAgIEFTU0VSVF9VTlVTRUQoc291cmNlTm9kZSwgc291cmNlTm9k
ZSk7CiAgICAgCiAgICAgLy8gRklYTUU6IFdlIGNvdWxkIGRvIHNvbWUgc3BhcnNlIGNvbmRpdGlv
bmFsIHByb3BhZ2F0aW9uIGhlcmUhCiAgICAgCkBAIC0yMDQyLDE1ICsyMDYwLDE1IEBAIHZvaWQg
QWJzdHJhY3RTdGF0ZTo6ZHVtcChQcmludFN0cmVhbSYgb3UKIHsKICAgICBib29sIGZpcnN0ID0g
dHJ1ZTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fYmxvY2stPnNpemUoKTsgKytpKSB7
Ci0gICAgICAgIE5vZGVJbmRleCBpbmRleCA9IG1fYmxvY2stPmF0KGkpOwotICAgICAgICBBYnN0
cmFjdFZhbHVlJiB2YWx1ZSA9IGZvck5vZGUoaW5kZXgpOworICAgICAgICBOb2RlKiBub2RlID0g
bV9ibG9jay0+YXQoaSk7CisgICAgICAgIEFic3RyYWN0VmFsdWUmIHZhbHVlID0gZm9yTm9kZShu
b2RlKTsKICAgICAgICAgaWYgKHZhbHVlLmlzQ2xlYXIoKSkKICAgICAgICAgICAgIGNvbnRpbnVl
OwogICAgICAgICBpZiAoZmlyc3QpCiAgICAgICAgICAgICBmaXJzdCA9IGZhbHNlOwogICAgICAg
ICBlbHNlCiAgICAgICAgICAgICBvdXQucHJpbnRmKCIgIik7Ci0gICAgICAgIG91dC5wcmludGYo
IkAlbHU6Iiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4oaW5kZXgpKTsKKyAgICAgICAgb3V0
LnByaW50ZigiQCVsdToiLCBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nPihub2RlLT5pbmRleCgp
KSk7CiAgICAgICAgIHZhbHVlLmR1bXAob3V0KTsKICAgICB9CiB9CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuaAkocmV2aXNpb24gMTQwMzA2KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEyIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAx
MiwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTcyLDggKzcyLDggQEAgc3RydWN0IEJhc2ljQmxvY2s7CiAvLyBB
YnN0cmFjdFN0YXRlIHN0YXRlKGNvZGVCbG9jaywgZ3JhcGgpOwogLy8gc3RhdGUuYmVnaW5CYXNp
Y0Jsb2NrKGJhc2ljQmxvY2spOwogLy8gYm9vbCBlbmRSZWFjaGVkID0gdHJ1ZTsKLS8vIGZvciAo
Tm9kZUluZGV4IGlkeCA9IGJhc2ljQmxvY2suYmVnaW47IGlkeCA8IGJhc2ljQmxvY2suZW5kOyAr
K2lkeCkgewotLy8gICAgIGlmICghc3RhdGUuZXhlY3V0ZShpZHgpKQorLy8gZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IGJhc2ljQmxvY2stPnNpemUoKTsgKytpKSB7CisvLyAgICAgaWYgKCFzdGF0
ZS5leGVjdXRlKGkpKQogLy8gICAgICAgICBicmVhazsKIC8vIH0KIC8vIGJvb2wgcmVzdWx0ID0g
c3RhdGUuZW5kQmFzaWNCbG9jayg8ZWl0aGVyIE1lcmdlIG9yIERvbnRNZXJnZT4pOwpAQCAtOTcs
MTQgKzk3LDE0IEBAIHB1YmxpYzoKICAgICAKICAgICB+QWJzdHJhY3RTdGF0ZSgpOwogICAgIAot
ICAgIEFic3RyYWN0VmFsdWUmIGZvck5vZGUoTm9kZUluZGV4IG5vZGVJbmRleCkKKyAgICBBYnN0
cmFjdFZhbHVlJiBmb3JOb2RlKE5vZGUqIG5vZGUpCiAgICAgewotICAgICAgICByZXR1cm4gbV9n
cmFwaFtub2RlSW5kZXhdLnZhbHVlOworICAgICAgICByZXR1cm4gbm9kZS0+dmFsdWU7CiAgICAg
fQogICAgIAotICAgIEFic3RyYWN0VmFsdWUmIGZvck5vZGUoRWRnZSBub2RlVXNlKQorICAgIEFi
c3RyYWN0VmFsdWUmIGZvck5vZGUoRWRnZSBlZGdlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGZv
ck5vZGUobm9kZVVzZS5pbmRleCgpKTsKKyAgICAgICAgcmV0dXJuIGZvck5vZGUoZWRnZS5ub2Rl
KCkpOwogICAgIH0KICAgICAKICAgICBPcGVyYW5kczxBYnN0cmFjdFZhbHVlPiYgdmFyaWFibGVz
KCkKQEAgLTE4Nyw0OCArMTg3LDQ4IEBAIHByaXZhdGU6CiAgICAgdm9pZCBjbG9iYmVyQ2FwdHVy
ZWRWYXJzKGNvbnN0IENvZGVPcmlnaW4mKTsKICAgICB2b2lkIGNsb2JiZXJTdHJ1Y3R1cmVzKHVu
c2lnbmVkIGluZGV4SW5CbG9jayk7CiAgICAgCi0gICAgYm9vbCBtZXJnZVN0YXRlQXRUYWlsKEFi
c3RyYWN0VmFsdWUmIGRlc3RpbmF0aW9uLCBBYnN0cmFjdFZhbHVlJiBpblZhcmlhYmxlLCBOb2Rl
SW5kZXgpOworICAgIGJvb2wgbWVyZ2VTdGF0ZUF0VGFpbChBYnN0cmFjdFZhbHVlJiBkZXN0aW5h
dGlvbiwgQWJzdHJhY3RWYWx1ZSYgaW5WYXJpYWJsZSwgTm9kZSopOwogICAgIAotICAgIHN0YXRp
YyBib29sIG1lcmdlVmFyaWFibGVCZXR3ZWVuQmxvY2tzKEFic3RyYWN0VmFsdWUmIGRlc3RpbmF0
aW9uLCBBYnN0cmFjdFZhbHVlJiBzb3VyY2UsIE5vZGVJbmRleCBkZXN0aW5hdGlvbk5vZGVJbmRl
eCwgTm9kZUluZGV4IHNvdXJjZU5vZGVJbmRleCk7CisgICAgc3RhdGljIGJvb2wgbWVyZ2VWYXJp
YWJsZUJldHdlZW5CbG9ja3MoQWJzdHJhY3RWYWx1ZSYgZGVzdGluYXRpb24sIEFic3RyYWN0VmFs
dWUmIHNvdXJjZSwgTm9kZSogZGVzdGluYXRpb25Ob2RlLCBOb2RlKiBzb3VyY2VOb2RlKTsKICAg
ICAKLSAgICB2b2lkIHNwZWN1bGF0ZUludDMyVW5hcnkoTm9kZSYgbm9kZSwgYm9vbCBmb3JjZUNh
bkV4aXQgPSBmYWxzZSkKKyAgICB2b2lkIHNwZWN1bGF0ZUludDMyVW5hcnkoTm9kZSogbm9kZSwg
Ym9vbCBmb3JjZUNhbkV4aXQgPSBmYWxzZSkKICAgICB7Ci0gICAgICAgIEFic3RyYWN0VmFsdWUm
IGNoaWxkVmFsdWUgPSBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpOwotICAgICAgICBub2RlLnNldENh
bkV4aXQoZm9yY2VDYW5FeGl0IHx8ICFpc0ludDMyU3BlY3VsYXRpb24oY2hpbGRWYWx1ZS5tX3R5
cGUpKTsKKyAgICAgICAgQWJzdHJhY3RWYWx1ZSYgY2hpbGRWYWx1ZSA9IGZvck5vZGUobm9kZS0+
Y2hpbGQxKCkpOworICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZvcmNlQ2FuRXhpdCB8fCAhaXNJ
bnQzMlNwZWN1bGF0aW9uKGNoaWxkVmFsdWUubV90eXBlKSk7CiAgICAgICAgIGNoaWxkVmFsdWUu
ZmlsdGVyKFNwZWNJbnQzMik7CiAgICAgfQogICAgIAotICAgIHZvaWQgc3BlY3VsYXRlTnVtYmVy
VW5hcnkoTm9kZSYgbm9kZSkKKyAgICB2b2lkIHNwZWN1bGF0ZU51bWJlclVuYXJ5KE5vZGUqIG5v
ZGUpCiAgICAgewotICAgICAgICBBYnN0cmFjdFZhbHVlJiBjaGlsZFZhbHVlID0gZm9yTm9kZShu
b2RlLmNoaWxkMSgpKTsKLSAgICAgICAgbm9kZS5zZXRDYW5FeGl0KCFpc051bWJlclNwZWN1bGF0
aW9uKGNoaWxkVmFsdWUubV90eXBlKSk7CisgICAgICAgIEFic3RyYWN0VmFsdWUmIGNoaWxkVmFs
dWUgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCgh
aXNOdW1iZXJTcGVjdWxhdGlvbihjaGlsZFZhbHVlLm1fdHlwZSkpOwogICAgICAgICBjaGlsZFZh
bHVlLmZpbHRlcihTcGVjTnVtYmVyKTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBzcGVjdWxhdGVC
b29sZWFuVW5hcnkoTm9kZSYgbm9kZSkKKyAgICB2b2lkIHNwZWN1bGF0ZUJvb2xlYW5VbmFyeShO
b2RlKiBub2RlKQogICAgIHsKLSAgICAgICAgQWJzdHJhY3RWYWx1ZSYgY2hpbGRWYWx1ZSA9IGZv
ck5vZGUobm9kZS5jaGlsZDEoKSk7Ci0gICAgICAgIG5vZGUuc2V0Q2FuRXhpdCghaXNCb29sZWFu
U3BlY3VsYXRpb24oY2hpbGRWYWx1ZS5tX3R5cGUpKTsKKyAgICAgICAgQWJzdHJhY3RWYWx1ZSYg
Y2hpbGRWYWx1ZSA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBub2RlLT5zZXRD
YW5FeGl0KCFpc0Jvb2xlYW5TcGVjdWxhdGlvbihjaGlsZFZhbHVlLm1fdHlwZSkpOwogICAgICAg
ICBjaGlsZFZhbHVlLmZpbHRlcihTcGVjQm9vbGVhbik7CiAgICAgfQogICAgIAotICAgIHZvaWQg
c3BlY3VsYXRlSW50MzJCaW5hcnkoTm9kZSYgbm9kZSwgYm9vbCBmb3JjZUNhbkV4aXQgPSBmYWxz
ZSkKKyAgICB2b2lkIHNwZWN1bGF0ZUludDMyQmluYXJ5KE5vZGUqIG5vZGUsIGJvb2wgZm9yY2VD
YW5FeGl0ID0gZmFsc2UpCiAgICAgewotICAgICAgICBBYnN0cmFjdFZhbHVlJiBjaGlsZFZhbHVl
MSA9IGZvck5vZGUobm9kZS5jaGlsZDEoKSk7Ci0gICAgICAgIEFic3RyYWN0VmFsdWUmIGNoaWxk
VmFsdWUyID0gZm9yTm9kZShub2RlLmNoaWxkMigpKTsKLSAgICAgICAgbm9kZS5zZXRDYW5FeGl0
KAorICAgICAgICBBYnN0cmFjdFZhbHVlJiBjaGlsZFZhbHVlMSA9IGZvck5vZGUobm9kZS0+Y2hp
bGQxKCkpOworICAgICAgICBBYnN0cmFjdFZhbHVlJiBjaGlsZFZhbHVlMiA9IGZvck5vZGUobm9k
ZS0+Y2hpbGQyKCkpOworICAgICAgICBub2RlLT5zZXRDYW5FeGl0KAogICAgICAgICAgICAgZm9y
Y2VDYW5FeGl0Ci0gICAgICAgICAgICB8fCAhaXNJbnQzMlNwZWN1bGF0aW9uKGNoaWxkVmFsdWUx
Lm1fdHlwZSkKLSAgICAgICAgICAgIHx8ICFpc0ludDMyU3BlY3VsYXRpb24oY2hpbGRWYWx1ZTIu
bV90eXBlKSk7CisgICAgICAgICAgICB8fCAhaXNJbnQzMlNwZWN1bGF0aW9uKGNoaWxkVmFsdWUx
LT5tX3R5cGUpCisgICAgICAgICAgICB8fCAhaXNJbnQzMlNwZWN1bGF0aW9uKGNoaWxkVmFsdWUy
LT5tX3R5cGUpKTsKICAgICAgICAgY2hpbGRWYWx1ZTEuZmlsdGVyKFNwZWNJbnQzMik7CiAgICAg
ICAgIGNoaWxkVmFsdWUyLmZpbHRlcihTcGVjSW50MzIpOwogICAgIH0KICAgICAKLSAgICB2b2lk
IHNwZWN1bGF0ZU51bWJlckJpbmFyeShOb2RlJiBub2RlKQorICAgIHZvaWQgc3BlY3VsYXRlTnVt
YmVyQmluYXJ5KE5vZGUqIG5vZGUpCiAgICAgewotICAgICAgICBBYnN0cmFjdFZhbHVlJiBjaGls
ZFZhbHVlMSA9IGZvck5vZGUobm9kZS5jaGlsZDEoKSk7Ci0gICAgICAgIEFic3RyYWN0VmFsdWUm
IGNoaWxkVmFsdWUyID0gZm9yTm9kZShub2RlLmNoaWxkMigpKTsKLSAgICAgICAgbm9kZS5zZXRD
YW5FeGl0KAorICAgICAgICBBYnN0cmFjdFZhbHVlJiBjaGlsZFZhbHVlMSA9IGZvck5vZGUobm9k
ZS0+Y2hpbGQxKCkpOworICAgICAgICBBYnN0cmFjdFZhbHVlJiBjaGlsZFZhbHVlMiA9IGZvck5v
ZGUobm9kZS0+Y2hpbGQyKCkpOworICAgICAgICBub2RlLT5zZXRDYW5FeGl0KAogICAgICAgICAg
ICAgIWlzTnVtYmVyU3BlY3VsYXRpb24oY2hpbGRWYWx1ZTEubV90eXBlKQogICAgICAgICAgICAg
fHwgIWlzTnVtYmVyU3BlY3VsYXRpb24oY2hpbGRWYWx1ZTIubV90eXBlKSk7CiAgICAgICAgIGNo
aWxkVmFsdWUxLmZpbHRlcihTcGVjTnVtYmVyKTsKQEAgLTI0MCw5ICsyNDAsOSBAQCBwcml2YXRl
OgogICAgICAgICBEZWZpbml0ZWx5RmFsc2UsCiAgICAgICAgIERlZmluaXRlbHlUcnVlCiAgICAg
fTsKLSAgICBCb29sZWFuUmVzdWx0IGJvb2xlYW5SZXN1bHQoTm9kZSYsIEFic3RyYWN0VmFsdWUm
KTsKKyAgICBCb29sZWFuUmVzdWx0IGJvb2xlYW5SZXN1bHQoTm9kZSosIEFic3RyYWN0VmFsdWUm
KTsKICAgICAKLSAgICBib29sIHRyeVNldENvbnN0YW50KE5vZGVJbmRleCBub2RlSW5kZXgsIEpT
VmFsdWUgdmFsdWUpCisgICAgYm9vbCB0cnlTZXRDb25zdGFudChOb2RlKiBub2RlLCBKU1ZhbHVl
IHZhbHVlKQogICAgIHsKICAgICAgICAgLy8gTWFrZSBzdXJlIHdlIGRvbid0IGNvbnN0YW50IGZv
bGQgc29tZXRoaW5nIHRoYXQgd2lsbCBwcm9kdWNlIHZhbHVlcyB0aGF0IGNvbnRyYXZlbmUKICAg
ICAgICAgLy8gcHJlZGljdGlvbnMuIElmIHRoYXQgaGFwcGVucyB0aGVuIHdlIGtub3cgdGhhdCB0
aGUgY29kZSB3aWxsIE9TUiBleGl0LCBmb3JjaW5nCkBAIC0yNTEsMTEgKzI1MSwxMSBAQCBwcml2
YXRlOgogICAgICAgICAvLyBsb3Qgb2Ygc3VidGxlIGNvZGUgdGhhdCBhc3N1bWVzIHRoYXQKICAg
ICAgICAgLy8gc3BlY3VsYXRpb25Gcm9tVmFsdWUoanNDb25zdGFudCkgPT0ganNDb25zdGFudC5w
cmVkaWN0aW9uKCkuICJIYXJkZW5pbmciIHRoYXQgY29kZQogICAgICAgICAvLyBpcyBwcm9iYWJs
eSBsZXNzIHNhbmUgdGhhbiBqdXN0IHB1bGxpbmcgYmFjayBvbiBjb25zdGFudCBmb2xkaW5nLgot
ICAgICAgICBTcGVjdWxhdGVkVHlwZSBvbGRUeXBlID0gbV9ncmFwaFtub2RlSW5kZXhdLnByZWRp
Y3Rpb24oKTsKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUgb2xkVHlwZSA9IG5vZGUtPnByZWRpY3Rp
b24oKTsKICAgICAgICAgaWYgKG1lcmdlU3BlY3VsYXRpb25zKHNwZWN1bGF0aW9uRnJvbVZhbHVl
KHZhbHVlKSwgb2xkVHlwZSkgIT0gb2xkVHlwZSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICAgICAgCi0gICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQodmFsdWUpOworICAgICAg
ICBmb3JOb2RlKG5vZGUpLnNldCh2YWx1ZSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0K
ICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RWYWx1ZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RWYWx1
ZS5oCShyZXZpc2lvbiAxNDAzMDYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fi
c3RyYWN0VmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTEsIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDExLCAyMDEyLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDE4LDYgKzQxOCw4IEBA
IHN0cnVjdCBBYnN0cmFjdFZhbHVlIHsKICAgICAvLyAgICBjaGFuZ2UgeCdzIHN0cnVjdHVyZSBh
bmQgd2UgaGF2ZSBubyB3YXkgb2YgcHJvdmluZyBvdGhlcndpc2UsIGJ1dAogICAgIC8vICAgIHgn
cyBtX2Z1dHVyZVBvc3NpYmxlU3RydWN0dXJlIHdpbGwgYmUgd2hhdGV2ZXIgc3RydWN0dXJlIHdl
IGhhZCBjaGVja2VkCiAgICAgLy8gICAgd2hlbiBnZXR0aW5nIHByb3BlcnR5ICdmJy4KKyAgICAK
KyAgICAvLyBOQi4gQWxsIGZpZWxkcyBpbiB0aGlzIHN0cnVjdCBtdXN0IGhhdmUgdHJpdmlhbCBk
ZXN0cnVjdG9ycy4KIAogICAgIC8vIFRoaXMgaXMgYSBwcm92ZW4gY29uc3RyYWludCBvbiB0aGUg
c3RydWN0dXJlcyB0aGF0IHRoaXMgdmFsdWUgY2FuIGhhdmUgcmlnaHQKICAgICAvLyBub3cuIFRo
ZSBzdHJ1Y3R1cmUgb2YgdGhlIGN1cnJlbnQgdmFsdWUgbXVzdCBiZWxvbmcgdG8gdGhpcyBzZXQu
IFRoZSBzZXQgbWF5CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FkamFjZW5j
eUxpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FkamFj
ZW5jeUxpc3QuaAkocmV2aXNpb24gMTQwMzA2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdBZGphY2VuY3lMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMSwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTU3LDcgKzU3LDcgQEAgcHVibGlj
OgogICAgICAgICB9CiAgICAgfQogICAgIAotICAgIEFkamFjZW5jeUxpc3QoS2luZCBraW5kLCBO
b2RlSW5kZXggY2hpbGQxLCBOb2RlSW5kZXggY2hpbGQyLCBOb2RlSW5kZXggY2hpbGQzKQorICAg
IEFkamFjZW5jeUxpc3QoS2luZCBraW5kLCBOb2RlKiBjaGlsZDEsIE5vZGUqIGNoaWxkMiwgTm9k
ZSogY2hpbGQzKQogI2lmICFBU1NFUlRfRElTQUJMRUQKICAgICAgICAgOiBtX2tpbmQoRml4ZWQp
CiAjZW5kaWYKQEAgLTExOCw3ICsxMTgsNyBAQCBwdWJsaWM6CiAgICAgICAgIGNoaWxkKDIpID0g
Y2hpbGQzOwogICAgIH0KICAgICAKLSAgICB2b2lkIGluaXRpYWxpemUoTm9kZUluZGV4IGNoaWxk
MSA9IE5vTm9kZSwgTm9kZUluZGV4IGNoaWxkMiA9IE5vTm9kZSwgTm9kZUluZGV4IGNoaWxkMyA9
IE5vTm9kZSkKKyAgICB2b2lkIGluaXRpYWxpemUoTm9kZSogY2hpbGQxID0gMCwgTm9kZSogY2hp
bGQyID0gMCwgTm9kZSogY2hpbGQzID0gMCkKICAgICB7CiAgICAgICAgIGluaXRpYWxpemUoRWRn
ZShjaGlsZDEpLCBFZGdlKGNoaWxkMiksIEVkZ2UoY2hpbGQzKSk7CiAgICAgfQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBbGxvY2F0b3IuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FsbG9jYXRvci5oCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBbGxvY2F0b3IuaAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSwyMzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2lmbmRlZiBERkdBbGxvY2F0b3JfaAorI2RlZmluZSBERkdBbGxvY2F0b3JfaAorCisjaW5j
bHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUg
PHd0Zi9QYWdlQWxsb2NhdGlvbkFsaWduZWQuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBERkcgeworCisvLyBDdXN0b20gcG9vbCBhbGxvY2F0b3IgZm9yIGV4YWN0bHkgb25lIHR5cGUg
KHR5cGUgVCkuIEl0IGhhcyBmYXN0IChPKDEpLCBvbmx5IGEgZmV3CisvLyBpbnN0cnVjdGlvbnMp
IGFsbG9jYXRvciwgYW5kIGEgc2ltaWxhcmx5IGZhc3QgZnJlZSgpLiBSZWN5Y2xpbmcgd29ya3Mg
aWYgZWl0aGVyIG9mCisvLyB0aGUgZm9sbG93aW5nIGlzIHRydWU6CisvLyAtIFQgaGFzIGEgdHJp
dmlhbCBkZXN0cnVjdG9yLiBJbiB0aGF0IGNhc2UgeW91IGRvbid0IGhhdmUgdG8gZXZlciBjYWxs
IGZyZWUoKSBvbgorLy8gICBhbnl0aGluZy4gWW91IGNhbiBqdXN0IGNhbGwgZnJlZUFsbCgpIGlu
c3RlYWQuCisvLyAtIFlvdSBjYWxsIGZyZWUoKSBvbiBhbGwgVCdzIHRoYXQgeW91IGFsbG9jYXRl
ZCwgYW5kIG5ldmVyIHVzZSBmcmVlQWxsKCkuCisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitjbGFz
cyBBbGxvY2F0b3IgeworcHVibGljOgorICAgIEFsbG9jYXRvcigpOworICAgIH5BbGxvY2F0b3Io
KTsKKyAgICAKKyAgICB2b2lkKiBhbGxvY2F0ZSgpOyAvLyBVc2UgcGxhY2VtZW50IG5ldyB0byBh
bGxvY2F0ZSwgYW5kIGF2b2lkIHVzaW5nIHRoaXMgbWV0aG9kLgorICAgIHZvaWQgZnJlZShUKik7
IC8vIENhbGwgdGhpcyBtZXRob2QgdG8gZGVsZXRlOyBuZXZlciB1c2UgJ2RlbGV0ZScgZGlyZWN0
bHkuCisgICAgCisgICAgdm9pZCBmcmVlQWxsKCk7IC8vIE9ubHkgY2FsbCB0aGlzIGlmIFQgaGFz
IGEgdHJpdmlhbCBkZXN0cnVjdG9yLgorICAgIHZvaWQgcmVzZXQoKTsgLy8gTGlrZSBmcmVlQWxs
KCksIGJ1dCBhbHNvIHJldHVybnMgYWxsIG1lbW9yeSB0byB0aGUgT1MuCisgICAgCisgICAgdW5z
aWduZWQgaW5kZXhPZihUKik7CisgICAgCisgICAgc3RhdGljIEFsbG9jYXRvciogYWxsb2NhdG9y
T2YoVCopOworICAgIAorcHJpdmF0ZToKKyAgICB2b2lkKiBidW1wQWxsb2NhdGUoKTsKKyAgICB2
b2lkKiBmcmVlTGlzdEFsbG9jYXRlKCk7CisgICAgdm9pZCogYWxsb2NhdGVTbG93KCk7CisgICAg
dm9pZCBmcmVlUmVnaW9uc1N0YXJ0aW5nQXQoUmVnaW9uKik7CisgICAgdm9pZCBzdGFydGluZ0J1
bXBpbmdJbihSZWdpb24qKTsKKyAgICAKKyAgICBzdHJ1Y3QgUmVnaW9uIHsKKyAgICAgICAgc3Rh
dGljIHNpemVfdCBzaXplKCkgeyByZXR1cm4gNjQgKiBLQjsgfQorICAgICAgICBzdGF0aWMgc2l6
ZV90IGhlYWRlclNpemUoKSB7IHJldHVybiBzdGQ6Om1heChzaXplb2YoUmVnaW9uKSwgc2l6ZW9m
KFQpKTsgfQorICAgICAgICBzdGF0aWMgdW5zaWduZWQgbnVtYmVyT2ZUaGluZ3NQZXJSZWdpb24o
KSB7IHJldHVybiAoc2l6ZSgpIC0gaGVhZGVyU2l6ZSgpKSAvIHNpemVvZihUKTsgfQorICAgICAg
ICBUKiBkYXRhKCkgeyByZXR1cm4gYml0d2lzZV9jYXN0PFQqPihiaXR3aXNlX2Nhc3Q8Y2hhcio+
KHRoaXMpICsgaGVhZGVyU2l6ZSgpKTsgfQorICAgICAgICBib29sIGlzSW5UaGlzUmVnaW9uKFQq
IHBvaW50ZXIpIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkPihwb2ludGVyIC0gZGF0YSgp
KSA8IG51bWJlck9mVGhpbmdzUGVyUmVnaW9uKCk7IH0KKyAgICAgICAgUmVnaW9uKiByZWdpb25G
b3IoVCogcG9pbnRlcikgeyByZXR1cm4gYml0d2lzZV9jYXN0PFJlZ2lvbio+KGJpdHdpc2VfY2Fz
dDx1aW50cHRyX3Q+KHBvaW50ZXIpICYgfihzaXplKCkgLSAxKSk7IH0KKyAgICAgICAgCisgICAg
ICAgIFBhZ2VBbGxvY2F0aW9uQWxpZ25lZCBtX2FsbG9jYXRpb247CisgICAgICAgIEFsbG9jYXRv
ciogbV9hbGxvY2F0b3I7CisgICAgICAgIFJlZ2lvbiogbV9uZXh0OworICAgIH07CisgICAgCisg
ICAgUmVnaW9uKiBtX3JlZ2lvbkhlYWQ7CisgICAgdm9pZCoqIG1fZnJlZUxpc3RIZWFkOworICAg
IFQqIG1fYnVtcEVuZDsKKyAgICB1bnNpZ25lZCBtX2J1bXBSZW1haW5pbmc7Cit9OworCit0ZW1w
bGF0ZTx0eXBlbmFtZSBUPgoraW5saW5lIEFsbG9jYXRvcjo6QWxsb2NhdG9yKCkKKyAgICA6IG1f
cmVnaW9uSGVhZCgwKQorICAgICwgbV9mcmVlTGlzdEhlYWQoMCkKKyAgICAsIG1fYnVtcFJlbWFp
bmluZygwKQoreworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgoraW5saW5lIEFsbG9jYXRvcjo6
fkFsbG9jYXRvcigpCit7CisgICAgcmVzZXQoKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4K
K0FMV0FZU19JTkxJTkUgdm9pZCogQWxsb2NhdG9yOjphbGxvY2F0ZSgpCit7CisgICAgaWYgKExJ
S0VMWSh2b2lkKiByZXN1bHQgPSBidW1wQWxsb2NhdGUoKSkpCisgICAgICAgIHJldHVybiByZXN1
bHQ7CisgICAgcmV0dXJuIGZyZWVMaXN0QWxsb2NhdGUoKTsKK30KKwordGVtcGxhdGU8dHlwZW5h
bWUgVD4KK3ZvaWQgQWxsb2NhdG9yOjpmcmVlKFQqIG9iamVjdCkKK3sKKyAgICBvYmplY3QtPn5U
KCk7CisgICAgCisgICAgdm9pZCoqIGNlbGwgPSBiaXR3aXNlX2Nhc3Q8dm9pZCoqPihvYmplY3Qp
OworICAgICpjZWxsID0gbV9mcmVlTGlzdEhlYWQ7CisgICAgbV9mcmVlTGlzdEhlYWQgPSBjZWxs
OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgordm9pZCBBbGxvY2F0b3I6OmZyZWVBbGwoKQor
eworICAgIGlmICghbV9yZWdpb25IZWFkKSB7CisgICAgICAgIEFTU0VSVCghbV9idW1wUmVtYWlu
aW5nKTsKKyAgICAgICAgQVNTRVJUKCFtX2ZyZWVMaXN0SGVhZCk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisgICAgCisgICAgLy8gU2luY2UgdGhlIGNhbGxlciBpcyBvcHRpbmcgb3V0IG9mIGNh
bGxpbmcgdGhlIGRlc3RydWN0b3IgZm9yIGFueSBhbGxvY2F0ZWQgdGhpbmcsCisgICAgLy8gd2Ug
aGF2ZSB0d28gY2hvaWNlcywgcGx1cyBhIGNvbnRpbnV1bSBiZXR3ZWVuOiB3ZSBjYW4gZWl0aGVy
IGp1c3QgZGVsZXRlIGFsbCByZWdpb25zCisgICAgLy8gKGkuZS4gY2FsbCByZXNldCgpKSwgb3Ig
d2UgY2FuIG1ha2UgYWxsIHJlZ2lvbnMgYXZhaWxhYmxlIGZvciByZXVzZS4gV2UgZG8gc29tZXRo
aW5nCisgICAgLy8gdGhhdCBvcHRpbWl6ZXMgZm9yIChhKSBzcGVlZCBvZiBmcmVlQWxsKCksIChi
KSB0aGUgYXNzdW1wdGlvbiB0aGF0IGlmIHRoZSB1c2VyIGNhbGxzCisgICAgLy8gZnJlZUFsbCgp
IHRoZW4gdGhleSB3aWxsIHByb2JhYmx5IGJlIGNhbGxpbmcgYWxsb2NhdGUoKSBpbiB0aGUgbmVh
ciBmdXR1cmUuIE5hbWVseSwKKyAgICAvLyB3ZSBmcmVlIGFsbCBidXQgb25lIHJlZ2lvbiwgYW5k
IG1ha2UgdGhlIHJlbWFpbmluZyByZWdpb24gYSBidW1wIGFsbG9jYXRpb24gcmVnaW9uLgorICAg
IAorICAgIGZvciAoUmVnaW9uKiByZWdpb24gPSBtX3JlZ2lvbkhlYWQtPm1fbmV4dDsgcmVnaW9u
OyByZWdpb24gPSByZWdpb24tPm1fbmV4dCkKKyAgICAgICAgYnVpbGRGcmVlTGlzdEluKHJlZ2lv
bik7CisgICAgCisgICAgbV9yZWdpb25IZWFkLT5tX25leHQgPSAwOworICAgIG1fZnJlZUxpc3RI
ZWFkID0gMDsKKyAgICBzdGFydEJ1bXBpbmdJbihtX3JlZ2lvbkhlYWQpOworfQorCit0ZW1wbGF0
ZTx0eXBlbmFtZSBUPgordm9pZCBBbGxvY2F0b3I6OnJlc2V0KCkKK3sKKyAgICBmcmVlUmVnaW9u
c1N0YXJ0aW5nQXQobV9yZWdpb25IZWFkKTsKKyAgICAKKyAgICBtX3JlZ2lvbkhlYWQgPSAwOwor
ICAgIG1fZnJlZUxpc3RIZWFkID0gMDsKKyAgICBtX2J1bXBSZW1haW5pbmcgPSAwOworfQorCit0
ZW1wbGF0ZTx0eXBlbmFtZSBUPgordW5zaWduZWQgQWxsb2NhdG9yOjppbmRleE9mKFQqIG9iamVj
dCkKK3sKKyAgICB1bnNpZ25lZCBiYXNlSW5kZXggPSAwOworICAgIGZvciAoUmVnaW9uKiByZWdp
b24gPSBtX3JlZ2lvbkhlYWQ7IHJlZ2lvbjsgcmVnaW9uID0gcmVnaW9uLT5tX25leHQpIHsKKyAg
ICAgICAgaWYgKHJlZ2lvbi0+aXNJblRoaXNSZWdpb24ob2JqZWN0KSkKKyAgICAgICAgICAgIHJl
dHVybiBiYXNlSW5kZXggKyAob2JqZWN0IC0gcmVnaW9uLT5kYXRhKCkpOworICAgICAgICBiYXNl
SW5kZXggKz0gUmVnaW9uOjpudW1iZXJPZlRoaW5nc1BlclJlZ2lvbigpOworICAgIH0KKyAgICBD
UkFTSCgpOworICAgIHJldHVybiAwOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorQWxsb2Nh
dG9yKiBBbGxvY2F0b3I6OmFsbG9jYXRvck9mKFQqIG9iamVjdCkKK3sKKyAgICByZXR1cm4gUmVn
aW9uOjpyZWdpb25Gb3Iob2JqZWN0KS0+bV9hbGxvY2F0b3I7Cit9CisKK3RlbXBsYXRlPHR5cGVu
YW1lIFQ+CitBTFdBWVNfSU5MSU5FIHZvaWQqIEFsbG9jYXRvcjo6YnVtcEFsbG9jYXRlKCkKK3sK
KyAgICBpZiAodW5zaWduZWQgcmVtYWluaW5nID0gbV9idW1wUmVtYWluaW5nKSB7CisgICAgICAg
IHJlbWFpbmluZy0tOworICAgICAgICBtX2J1bXBSZW1haW5pbmcgPSByZW1haW5pbmc7CisgICAg
ICAgIHJldHVybiBtX2J1bXBFbmQgLSAocmVtYWluaW5nICsgMSk7CisgICAgfQorICAgIHJldHVy
biAwOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgordm9pZCogQWxsb2NhdG9yOjpmcmVlTGlz
dEFsbG9jYXRlKCkKK3sKKyAgICB2b2lkKiogcmVzdWx0ID0gbV9mcmVlTGlzdEhlYWQ7CisgICAg
aWYgKFVOTElLRUxZKCFyZXN1bHQpKQorICAgICAgICByZXR1cm4gYWxsb2NhdGVTbG93KCk7Cisg
ICAgbV9mcmVlTGlzdEhlYWQgPSBiaXR3aXNlX2Nhc3Q8dm9pZCoqPigqcmVzdWx0KTsKKyAgICBy
ZXR1cm4gcmVzdWx0OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgordm9pZCogQWxsb2NhdG9y
OjphbGxvY2F0ZVNsb3coKQoreworICAgIEFTU0VSVCghbV9mcmVlTGlzdEhlYWQpOworICAgIEFT
U0VSVCghbV9idW1wUmVtYWluaW5nKTsKKyAgICAKKyAgICBQYWdlQWxsb2NhdGlvbkFsaWduZWQg
YWxsb2NhdGlvbiA9IFBhZ2VBbGxvY2F0aW9uQWxpZ25lZDo6YWxsb2NhdGUoUmVnaW9uOjpzaXpl
KCksIFJlZ2lvbjo6c2l6ZSgpLCBPU0FsbG9jYXRvcjo6SlNHQ0hlYXBQYWdlcyk7CisgICAgaWYg
KCFzdGF0aWNfY2FzdDxib29sPihhbGxvY2F0aW9uKSkKKyAgICAgICAgQ1JBU0goKTsKKyAgICBS
ZWdpb24qIHJlZ2lvbiA9IHN0YXRpY19jYXN0PFJlZ2lvbio+KGFsbG9jYXRpb24uYmFzZSgpKTsK
KyAgICByZWdpb24tPm1fYWxsb2NhdGlvbiA9IG1fYWxsb2NhdGlvbjsKKyAgICByZWdpb24tPm1f
YWxsb2N0b3IgPSB0aGlzOworICAgIHN0YXJ0QnVtcGluZ0luKHJlZ2lvbik7CisgICAgcmVnaW9u
LT5tX25leHQgPSBtX3JlZ2lvbkhlYWQ7CisgICAgbV9yZWdpb25IZWFkID0gcmVnaW9uOworICAg
IAorICAgIHZvaWQqIHJlc3VsdCA9IGJ1bXBBbGxvY2F0ZSgpOworICAgIEFTU0VSVChyZXN1bHQp
OworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+Cit2b2lkIEFs
bG9jYXRvcjo6ZnJlZVJlZ2lvbnNTdGFydGluZ0F0KFJlZ2lvbiogcmVnaW9uKQoreworICAgIHdo
aWxlIChyZWdpb24pIHsKKyAgICAgICAgUmVnaW9uKiBuZXh0UmVnaW9uID0gcmVnaW9uLT5tX25l
eHQ7CisgICAgICAgIHJlZ2lvbi0+bV9hbGxvY2F0aW9uLmRlYWxsb2NhdGUoKTsKKyAgICAgICAg
cmVnaW9uID0gbmV4dFJlZ2lvbjsKKyAgICB9Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+Cit2
b2lkIEFsbG9jYXRvcjo6c3RhcnRCdW1waW5nSW4oUmVnaW9uKiByZWdpb24pCit7CisgICAgbV9i
dW1wRW5kID0gcmVnaW9uLT5kYXRhKCkgKyBSZWdpb246Om51bWJlck9mVGhpbmdzUGVyUmVnaW9u
KCk7CisgICAgbV9idW1wUmVtYWluaW5nID0gUmVnaW9uOjpudW1iZXJPZlRoaW5nc1BlclJlZ2lv
bigpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUo
REZHX0pJVCkKKworI2VuZGlmIC8vIERGR0FsbG9jYXRvcl9oCisKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRzU2ltcGxpZmljYXRpb25QaGFzZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVudHNTaW1wbGlmaWNh
dGlvblBoYXNlLmNwcAkocmV2aXNpb24gMTQwMzA2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdBcmd1bWVudHNTaW1wbGlmaWNhdGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDEzIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
MTQ5LDExICsxNDksMTAgQEAgcHVibGljOgogICAgICAgICAgICAgaWYgKCFibG9jaykKICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW5kZXhJbkJs
b2NrID0gMDsgaW5kZXhJbkJsb2NrIDwgYmxvY2stPnNpemUoKTsgKytpbmRleEluQmxvY2spIHsK
LSAgICAgICAgICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4ID0gYmxvY2stPmF0KGluZGV4SW5C
bG9jayk7Ci0gICAgICAgICAgICAgICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhbbm9kZUluZGV4XTsK
LSAgICAgICAgICAgICAgICBpZiAoIW5vZGUuc2hvdWxkR2VuZXJhdGUoKSkKKyAgICAgICAgICAg
ICAgICBOb2RlKiBub2RlID0gYmxvY2stPmF0KGluZGV4SW5CbG9jayk7CisgICAgICAgICAgICAg
ICAgaWYgKCFub2RlLT5zaG91bGRHZW5lcmF0ZSgpKQogICAgICAgICAgICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUub3AoKSkgeworICAgICAgICAgICAg
ICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewogICAgICAgICAgICAgICAgIGNhc2UgQ3JlYXRlQXJn
dW1lbnRzOiB7CiAgICAgICAgICAgICAgICAgICAgIC8vIElnbm9yZSB0aGlzIG9wLiBJZiB3ZSBz
ZWUgYSBsb25lIENyZWF0ZUFyZ3VtZW50cyB0aGVuIHdlIHdhbnQgdG8KICAgICAgICAgICAgICAg
ICAgICAgLy8gY29tcGxldGVseSBpZ25vcmUgaXQgYmVjYXVzZToKQEAgLTE3MywxNiArMTcyLDE2
IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIAogICAg
ICAgICAgICAgICAgIGNhc2UgU2V0TG9jYWw6IHsKLSAgICAgICAgICAgICAgICAgICAgTm9kZSYg
c291cmNlID0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXTsKLSAgICAgICAgICAgICAgICAgICAgVmFy
aWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBub2RlLnZhcmlhYmxlQWNjZXNz
RGF0YSgpOworICAgICAgICAgICAgICAgICAgICBOb2RlKiBzb3VyY2UgPSBub2RlLT5jaGlsZDEo
KS5ub2RlKCk7CisgICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFi
bGVBY2Nlc3NEYXRhID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CiAgICAgICAgICAgICAg
ICAgICAgIGludCBhcmd1bWVudHNSZWdpc3RlciA9Ci0gICAgICAgICAgICAgICAgICAgICAgICBt
X2dyYXBoLnVuY2hlY2tlZEFyZ3VtZW50c1JlZ2lzdGVyRm9yKG5vZGUuY29kZU9yaWdpbik7Ci0g
ICAgICAgICAgICAgICAgICAgIGlmIChzb3VyY2Uub3AoKSAhPSBDcmVhdGVBcmd1bWVudHMgJiYg
c291cmNlLm9wKCkgIT0gUGhhbnRvbUFyZ3VtZW50cykgeworICAgICAgICAgICAgICAgICAgICAg
ICAgbV9ncmFwaC51bmNoZWNrZWRBcmd1bWVudHNSZWdpc3RlckZvcihub2RlLT5jb2RlT3JpZ2lu
KTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHNvdXJjZS0+b3AoKSAhPSBDcmVhdGVBcmd1bWVu
dHMgJiYgc291cmNlLT5vcCgpICE9IFBoYW50b21Bcmd1bWVudHMpIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHRoZSBzb3VyY2Ugb2YgdGhlIFNldExvY2FsIGtu
b3dzIHRoYXQgaWYgaXQncwogICAgICAgICAgICAgICAgICAgICAgICAgLy8gYSB2YXJpYWJsZSB0
aGF0IHdlIHRoaW5rIGlzIGFsaWFzZWQgdG8gdGhlIGFyZ3VtZW50cywgdGhlbiBpdAogICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gbWF5IGVzY2FwZSBhdCB0aGlzIHBvaW50LiBJbiBmdXR1cmUs
IHdlIGNvdWxkIHRyYWNrIHRyYW5zaXRpdmUKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFs
aWFzaW5nLiBCdXQgbm90IHlldC4KLSAgICAgICAgICAgICAgICAgICAgICAgIG9ic2VydmVCYWRB
cmd1bWVudHNVc2Uobm9kZS5jaGlsZDEoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBvYnNl
cnZlQmFkQXJndW1lbnRzVXNlKHNvdXJjZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAKICAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIElmIHRoaXMgaXMgYW4gYXNzaWdubWVudCB0byB0aGUg
YXJndW1lbnRzIHJlZ2lzdGVyLCB0aGVuCiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBwcmV0
ZW5kIGFzIGlmIHRoZSBhcmd1bWVudHMgd2VyZSBjcmVhdGVkLiBXZSBkb24ndCB3YW50IHRvCkBA
IC0xOTUsMTQgKzE5NCwxNCBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBp
bml0X2xhenlfcmVnIHNpbmNlIGl0IHRyZWF0cyBDcmVhdGVBcmd1bWVudHMgYXMgcmVhZGluZwog
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gbG9jYWwgdmFyaWFibGVzLiBUaGF0IGNvdWxkIGJl
IGZpeGVkLCBidXQgaXQncyBlYXNpZXIgdG8KICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdv
cmsgYXJvdW5kIHRoaXMgaGVyZS4KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzb3VyY2Uu
b3AoKSA9PSBKU0NvbnN0YW50Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgIXNvdXJj
ZS52YWx1ZU9mSlNDb25zdGFudChjb2RlQmxvY2soKSkpCisgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoc291cmNlLT5vcCgpID09IEpTQ29uc3RhbnQKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAmJiAhc291cmNlLT52YWx1ZU9mSlNDb25zdGFudChjb2RlQmxvY2soKSkpCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAKICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChhcmd1bWVudHNSZWdpc3RlciAhPSBJbnZhbGlkVmly
dHVhbFJlZ2lzdGVyCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgKHZhcmlhYmxlQWNj
ZXNzRGF0YS0+bG9jYWwoKSA9PSBhcmd1bWVudHNSZWdpc3RlcgogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB8fCB2YXJpYWJsZUFjY2Vzc0RhdGEtPmxvY2FsKCkgPT0gdW5tb2RpZmll
ZEFyZ3VtZW50c1JlZ2lzdGVyKGFyZ3VtZW50c1JlZ2lzdGVyKSkpIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBtX2NyZWF0ZXNBcmd1bWVudHMuYWRkKG5vZGUuY29kZU9yaWdpbi5pbmxp
bmVDYWxsRnJhbWUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fY3JlYXRlc0FyZ3Vt
ZW50cy5hZGQobm9kZS0+Y29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpOwogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgfQogCkBAIC0y
MTQsMTkgKzIxMywxOSBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgICAgICBBcmd1bWVu
dHNBbGlhc2luZ0RhdGEmIGRhdGEgPQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fYXJn
dW1lbnRzQWxpYXNpbmcuZmluZCh2YXJpYWJsZUFjY2Vzc0RhdGEpLT52YWx1ZTsKICAgICAgICAg
ICAgICAgICAgICAgICAgIGRhdGEubWVyZ2VOb25Bcmd1bWVudHNBc3NpZ25tZW50KCk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBkYXRhLm1lcmdlQ2FsbENvbnRleHQobm9kZS5jb2RlT3JpZ2lu
LmlubGluZUNhbGxGcmFtZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLm1lcmdlQ2Fs
bENvbnRleHQobm9kZS0+Y29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpOwogICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICAgICAgaWYgKGFyZ3VtZW50c1JlZ2lzdGVyICE9IEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIKICAg
ICAgICAgICAgICAgICAgICAgICAgICYmICh2YXJpYWJsZUFjY2Vzc0RhdGEtPmxvY2FsKCkgPT0g
YXJndW1lbnRzUmVnaXN0ZXIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCB2YXJpYWJs
ZUFjY2Vzc0RhdGEtPmxvY2FsKCkgPT0gdW5tb2RpZmllZEFyZ3VtZW50c1JlZ2lzdGVyKGFyZ3Vt
ZW50c1JlZ2lzdGVyKSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLmNvZGVP
cmlnaW4uaW5saW5lQ2FsbEZyYW1lID09IHNvdXJjZS5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFt
ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5jb2RlT3JpZ2luLmlubGluZUNh
bGxGcmFtZSA9PSBzb3VyY2UtPmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKQogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgbV9jcmVh
dGVzQXJndW1lbnRzLmFkZChzb3VyY2UuY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpOworICAg
ICAgICAgICAgICAgICAgICAgICAgbV9jcmVhdGVzQXJndW1lbnRzLmFkZChzb3VyY2UtPmNvZGVP
cmlnaW4uaW5saW5lQ2FsbEZyYW1lKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIGlmICh2YXJpYWJsZUFj
Y2Vzc0RhdGEtPmlzQ2FwdHVyZWQoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgbV9jcmVh
dGVzQXJndW1lbnRzLmFkZChzb3VyY2UuY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpOworICAg
ICAgICAgICAgICAgICAgICAgICAgbV9jcmVhdGVzQXJndW1lbnRzLmFkZChzb3VyY2UtPmNvZGVP
cmlnaW4uaW5saW5lQ2FsbEZyYW1lKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIEFyZ3VtZW50c0FsaWFz
aW5nRGF0YSYgZGF0YSA9CkBAIC0yMzQsMjkgKzIzMywyOSBAQCBwdWJsaWM6CiAgICAgICAgICAg
ICAgICAgICAgIGRhdGEubWVyZ2VBcmd1bWVudHNBc3NpZ25tZW50KCk7CiAgICAgICAgICAgICAg
ICAgICAgIC8vIFRoaXMgZW5zdXJlcyB0aGF0IHRoZSB2YXJpYWJsZSdzIHVzZXMgYXJlIGluIHRo
ZSBzYW1lIGNvbnRleHQgYXMKICAgICAgICAgICAgICAgICAgICAgLy8gdGhlIGFyZ3VtZW50cyBp
dCBpcyBhbGlhc2luZy4KLSAgICAgICAgICAgICAgICAgICAgZGF0YS5tZXJnZUNhbGxDb250ZXh0
KG5vZGUuY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpOwotICAgICAgICAgICAgICAgICAgICBk
YXRhLm1lcmdlQ2FsbENvbnRleHQoc291cmNlLmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKTsK
KyAgICAgICAgICAgICAgICAgICAgZGF0YS5tZXJnZUNhbGxDb250ZXh0KG5vZGUtPmNvZGVPcmln
aW4uaW5saW5lQ2FsbEZyYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgZGF0YS5tZXJnZUNhbGxD
b250ZXh0KHNvdXJjZS0+Y29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpOwogICAgICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIAog
ICAgICAgICAgICAgICAgIGNhc2UgR2V0TG9jYWw6CiAgICAgICAgICAgICAgICAgY2FzZSBQaGk6
IHsKLSAgICAgICAgICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vz
c0RhdGEgPSBub2RlLnZhcmlhYmxlQWNjZXNzRGF0YSgpOworICAgICAgICAgICAgICAgICAgICBW
YXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9IG5vZGUtPnZhcmlhYmxlQWNj
ZXNzRGF0YSgpOwogICAgICAgICAgICAgICAgICAgICBpZiAodmFyaWFibGVBY2Nlc3NEYXRhLT5p
c0NhcHR1cmVkKCkpCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
ICAgICAgICAgQXJndW1lbnRzQWxpYXNpbmdEYXRhJiBkYXRhID0KICAgICAgICAgICAgICAgICAg
ICAgICAgIG1fYXJndW1lbnRzQWxpYXNpbmcuZmluZCh2YXJpYWJsZUFjY2Vzc0RhdGEpLT52YWx1
ZTsKLSAgICAgICAgICAgICAgICAgICAgZGF0YS5tZXJnZUNhbGxDb250ZXh0KG5vZGUuY29kZU9y
aWdpbi5pbmxpbmVDYWxsRnJhbWUpOworICAgICAgICAgICAgICAgICAgICBkYXRhLm1lcmdlQ2Fs
bENvbnRleHQobm9kZS0+Y29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpOwogICAgICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIAog
ICAgICAgICAgICAgICAgIGNhc2UgRmx1c2g6IHsKLSAgICAgICAgICAgICAgICAgICAgVmFyaWFi
bGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBub2RlLnZhcmlhYmxlQWNjZXNzRGF0
YSgpOworICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNj
ZXNzRGF0YSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOwogICAgICAgICAgICAgICAgICAg
ICBpZiAodmFyaWFibGVBY2Nlc3NEYXRhLT5pc0NhcHR1cmVkKCkpCiAgICAgICAgICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgQXJndW1lbnRzQWxpYXNpbmdEYXRh
JiBkYXRhID0KICAgICAgICAgICAgICAgICAgICAgICAgIG1fYXJndW1lbnRzQWxpYXNpbmcuZmlu
ZCh2YXJpYWJsZUFjY2Vzc0RhdGEpLT52YWx1ZTsKLSAgICAgICAgICAgICAgICAgICAgZGF0YS5t
ZXJnZUNhbGxDb250ZXh0KG5vZGUuY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpOworICAgICAg
ICAgICAgICAgICAgICBkYXRhLm1lcmdlQ2FsbENvbnRleHQobm9kZS0+Y29kZU9yaWdpbi5pbmxp
bmVDYWxsRnJhbWUpOwogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAg
Ly8gSWYgYSB2YXJpYWJsZSBpcyB1c2VkIGluIGEgZmx1c2ggdGhlbiBieSBkZWZpbml0aW9uIGl0
IGVzY2FwZXMuCiAgICAgICAgICAgICAgICAgICAgIGRhdGEuZXNjYXBlcyA9IHRydWU7CkBAIC0y
NjQsMTggKzI2MywxOCBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgICAgICAKICAgICAgICAgICAgICAgICBjYXNlIFNldEFyZ3VtZW50OiB7Ci0gICAgICAgICAg
ICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhID0gbm9kZS52
YXJpYWJsZUFjY2Vzc0RhdGEoKTsKKyAgICAgICAgICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NE
YXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKICAg
ICAgICAgICAgICAgICAgICAgaWYgKHZhcmlhYmxlQWNjZXNzRGF0YS0+aXNDYXB0dXJlZCgpKQog
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIEFyZ3Vt
ZW50c0FsaWFzaW5nRGF0YSYgZGF0YSA9CiAgICAgICAgICAgICAgICAgICAgICAgICBtX2FyZ3Vt
ZW50c0FsaWFzaW5nLmZpbmQodmFyaWFibGVBY2Nlc3NEYXRhKS0+dmFsdWU7CiAgICAgICAgICAg
ICAgICAgICAgIGRhdGEubWVyZ2VOb25Bcmd1bWVudHNBc3NpZ25tZW50KCk7Ci0gICAgICAgICAg
ICAgICAgICAgIGRhdGEubWVyZ2VDYWxsQ29udGV4dChub2RlLmNvZGVPcmlnaW4uaW5saW5lQ2Fs
bEZyYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgZGF0YS5tZXJnZUNhbGxDb250ZXh0KG5vZGUt
PmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAg
ICBjYXNlIEdldEJ5VmFsOiB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChub2RlLmFycmF5TW9k
ZSgpLnR5cGUoKSAhPSBBcnJheTo6QXJndW1lbnRzKSB7CisgICAgICAgICAgICAgICAgICAgIGlm
IChub2RlLT5hcnJheU1vZGUoKS50eXBlKCkgIT0gQXJyYXk6OkFyZ3VtZW50cykgewogICAgICAg
ICAgICAgICAgICAgICAgICAgb2JzZXJ2ZUJhZEFyZ3VtZW50c1VzZXMobm9kZSk7CiAgICAgICAg
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgfQpAQCAtMjgzLDE4
ICsyODIsMTggQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICAvLyBUaGF0J3Mgc28gYXdm
dWwgYW5kIHByZXR0eSBtdWNoIGltcG9zc2libGUgc2luY2UgaXQgd291bGQKICAgICAgICAgICAg
ICAgICAgICAgLy8gaW1wbHkgdGhhdCB0aGUgYXJndW1lbnRzIHdlcmUgcHJlZGljdGVkIGludGVn
ZXIsIGJ1dCBpdCdzCiAgICAgICAgICAgICAgICAgICAgIC8vIGdvb2QgdG8gYmUgZGVmZW5zaXZl
IGFuZCB0aG9yb3VnaC4KLSAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZUJhZEFyZ3VtZW50c1Vz
ZShub2RlLmNoaWxkMigpKTsKLSAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZVByb3BlckFyZ3Vt
ZW50c1VzZShub2RlLCBub2RlLmNoaWxkMSgpKTsKKyAgICAgICAgICAgICAgICAgICAgb2JzZXJ2
ZUJhZEFyZ3VtZW50c1VzZShub2RlLT5jaGlsZDIoKS5ub2RlKCkpOworICAgICAgICAgICAgICAg
ICAgICBvYnNlcnZlUHJvcGVyQXJndW1lbnRzVXNlKG5vZGUsIG5vZGUtPmNoaWxkMSgpKTsKICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgICAgICAKICAgICAgICAgICAgICAgICBjYXNlIEdldEFycmF5TGVuZ3RoOiB7Ci0gICAgICAg
ICAgICAgICAgICAgIGlmIChub2RlLmFycmF5TW9kZSgpLnR5cGUoKSAhPSBBcnJheTo6QXJndW1l
bnRzKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS50eXBlKCkg
IT0gQXJyYXk6OkFyZ3VtZW50cykgewogICAgICAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZUJh
ZEFyZ3VtZW50c1VzZXMobm9kZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAg
ICAgICAgICAgIG9ic2VydmVQcm9wZXJBcmd1bWVudHNVc2Uobm9kZSwgbm9kZS5jaGlsZDEoKSk7
CisgICAgICAgICAgICAgICAgICAgIG9ic2VydmVQcm9wZXJBcmd1bWVudHNVc2Uobm9kZSwgbm9k
ZS0+Y2hpbGQxKCkpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgICAgIApAQCAtMzM1LDE2ICszMzQsMTUgQEAgcHVibGljOgog
ICAgICAgICAgICAgaWYgKCFibG9jaykKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaW5kZXhJbkJsb2NrID0gMDsgaW5kZXhJbkJsb2NrIDwgYmxv
Y2stPnNpemUoKTsgKytpbmRleEluQmxvY2spIHsKLSAgICAgICAgICAgICAgICBOb2RlSW5kZXgg
bm9kZUluZGV4ID0gYmxvY2stPmF0KGluZGV4SW5CbG9jayk7Ci0gICAgICAgICAgICAgICAgTm9k
ZSYgbm9kZSA9IG1fZ3JhcGhbbm9kZUluZGV4XTsKLSAgICAgICAgICAgICAgICBpZiAoIW5vZGUu
c2hvdWxkR2VuZXJhdGUoKSkKKyAgICAgICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPmF0
KGluZGV4SW5CbG9jayk7CisgICAgICAgICAgICAgICAgaWYgKCFub2RlLT5zaG91bGRHZW5lcmF0
ZSgpKQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICBpZiAo
bm9kZS5vcCgpICE9IFNldExvY2FsKQorICAgICAgICAgICAgICAgIGlmIChub2RlLT5vcCgpICE9
IFNldExvY2FsKQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAg
ICBOb2RlJiBzb3VyY2UgPSBtX2dyYXBoW25vZGUuY2hpbGQxKCldOwotICAgICAgICAgICAgICAg
IGlmIChzb3VyY2Uub3AoKSAhPSBDcmVhdGVBcmd1bWVudHMpCisgICAgICAgICAgICAgICAgTm9k
ZSogc291cmNlID0gbm9kZS0+Y2hpbGQxKCkubm9kZSgpOworICAgICAgICAgICAgICAgIGlmIChz
b3VyY2UtPm9wKCkgIT0gQ3JlYXRlQXJndW1lbnRzKQogICAgICAgICAgICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNz
RGF0YSA9IG5vZGUudmFyaWFibGVBY2Nlc3NEYXRhKCk7CisgICAgICAgICAgICAgICAgVmFyaWFi
bGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0Rh
dGEoKTsKICAgICAgICAgICAgICAgICBpZiAodmFyaWFibGVBY2Nlc3NEYXRhLT5pc0NhcHR1cmVk
KCkpIHsKICAgICAgICAgICAgICAgICAgICAgLy8gVGhlIGNhcHR1cmVkIGNhc2Ugd291bGQgaGF2
ZSBhbHJlYWR5IGJlZW4gdGFrZW4gY2FyZSBvZiBpbiB0aGUKICAgICAgICAgICAgICAgICAgICAg
Ly8gcHJldmlvdXMgcGFzcy4KQEAgLTM1Niw3ICszNTQsNyBAQCBwdWJsaWM6CiAgICAgICAgICAg
ICAgICAgaWYgKGRhdGEuaXNWYWxpZCgpKQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsK
ICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBtX2NyZWF0ZXNBcmd1bWVudHMuYWRk
KHNvdXJjZS5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSk7CisgICAgICAgICAgICAgICAgbV9j
cmVhdGVzQXJndW1lbnRzLmFkZChzb3VyY2UtPmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKTsK
ICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICAKQEAgLTQxNCwyNCArNDEyLDIzIEBA
IHB1YmxpYzoKICAgICAgICAgICAgIGlmICghYmxvY2spCiAgICAgICAgICAgICAgICAgY29udGlu
dWU7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGluZGV4SW5CbG9jayA9IDA7IGluZGV4SW5C
bG9jayA8IGJsb2NrLT5zaXplKCk7ICsraW5kZXhJbkJsb2NrKSB7Ci0gICAgICAgICAgICAgICAg
Tm9kZUluZGV4IG5vZGVJbmRleCA9IGJsb2NrLT5hdChpbmRleEluQmxvY2spOwotICAgICAgICAg
ICAgICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW25vZGVJbmRleF07Ci0gICAgICAgICAgICAgICAg
aWYgKCFub2RlLnNob3VsZEdlbmVyYXRlKCkpCisgICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9
IGJsb2NrLT5hdChpbmRleEluQmxvY2spOworICAgICAgICAgICAgICAgIGlmICghbm9kZS0+c2hv
dWxkR2VuZXJhdGUoKSkKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAg
ICAgICAgCi0gICAgICAgICAgICAgICAgc3dpdGNoIChub2RlLm9wKCkpIHsKKyAgICAgICAgICAg
ICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKICAgICAgICAgICAgICAgICBjYXNlIFNldExvY2Fs
OiB7Ci0gICAgICAgICAgICAgICAgICAgIE5vZGUmIHNvdXJjZSA9IG1fZ3JhcGhbbm9kZS5jaGls
ZDEoKV07Ci0gICAgICAgICAgICAgICAgICAgIGlmIChzb3VyY2Uub3AoKSAhPSBDcmVhdGVBcmd1
bWVudHMpCisgICAgICAgICAgICAgICAgICAgIE5vZGUqIHNvdXJjZSA9IG5vZGUtPmNoaWxkMSgp
Lm5vZGUoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHNvdXJjZS0+b3AoKSAhPSBDcmVhdGVB
cmd1bWVudHMpCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAg
ICAgICAgCi0gICAgICAgICAgICAgICAgICAgIGlmIChtX2NyZWF0ZXNBcmd1bWVudHMuY29udGFp
bnMoc291cmNlLmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKSkKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKG1fY3JlYXRlc0FyZ3VtZW50cy5jb250YWlucyhzb3VyY2UtPmNvZGVPcmlnaW4uaW5s
aW5lQ2FsbEZyYW1lKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJp
YWJsZUFjY2Vzc0RhdGEgPSBub2RlLnZhcmlhYmxlQWNjZXNzRGF0YSgpOworICAgICAgICAgICAg
ICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9IG5vZGUtPnZh
cmlhYmxlQWNjZXNzRGF0YSgpOwogICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAg
ICAgICAgaWYgKG1fZ3JhcGguYXJndW1lbnRzUmVnaXN0ZXJGb3Iobm9kZS5jb2RlT3JpZ2luKSA9
PSB2YXJpYWJsZUFjY2Vzc0RhdGEtPmxvY2FsKCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
IHx8IHVubW9kaWZpZWRBcmd1bWVudHNSZWdpc3RlcihtX2dyYXBoLmFyZ3VtZW50c1JlZ2lzdGVy
Rm9yKG5vZGUuY29kZU9yaWdpbikpID09IHZhcmlhYmxlQWNjZXNzRGF0YS0+bG9jYWwoKSkKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGguYXJndW1lbnRzUmVnaXN0ZXJGb3Iobm9kZS0+
Y29kZU9yaWdpbikgPT0gdmFyaWFibGVBY2Nlc3NEYXRhLT5sb2NhbCgpCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICB8fCB1bm1vZGlmaWVkQXJndW1lbnRzUmVnaXN0ZXIobV9ncmFwaC5hcmd1
bWVudHNSZWdpc3RlckZvcihub2RlLT5jb2RlT3JpZ2luKSkgPT0gdmFyaWFibGVBY2Nlc3NEYXRh
LT5sb2NhbCgpKQogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgICAg
ICAgICAgICAgQVNTRVJUKCF2YXJpYWJsZUFjY2Vzc0RhdGEtPmlzQ2FwdHVyZWQoKSk7CkBAIC00
NjksMTYgKzQ2NiwxNiBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgY2FzZSBGb3J3YXJkU3Ry
dWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnQ6CiAgICAgICAgICAgICAgICAgY2FzZSBDaGVja0Fy
cmF5OiB7CiAgICAgICAgICAgICAgICAgICAgIC8vIFdlIGNhbiBqdXN0IGdldCByaWQgb2YgdGhp
cyBub2RlLCBpZiBpdCByZWZlcmVuY2VzIGEgcGhhbnRvbSBhcmd1bWVudC4KLSAgICAgICAgICAg
ICAgICAgICAgaWYgKCFpc09LVG9PcHRpbWl6ZShtX2dyYXBoW25vZGUuY2hpbGQxKCldKSkKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKCFpc09LVG9PcHRpbWl6ZShub2RlLT5jaGlsZDEoKS5ub2Rl
KCkpKQogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAg
IG1fZ3JhcGguZGVyZWYobm9kZS5jaGlsZDEoKSk7Ci0gICAgICAgICAgICAgICAgICAgIG5vZGUu
c2V0T3BBbmREZWZhdWx0RmxhZ3MoUGhhbnRvbSk7Ci0gICAgICAgICAgICAgICAgICAgIG5vZGUu
Y2hpbGRyZW4uc2V0Q2hpbGQxKEVkZ2UoKSk7CisgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgu
ZGVyZWYobm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgICAgICAgICBub2RlLT5zZXRPcEFu
ZERlZmF1bHRGbGFncyhQaGFudG9tKTsKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGRy
ZW4uc2V0Q2hpbGQxKEVkZ2UoKSk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgY2FzZSBH
ZXRCeVZhbDogewotICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS5hcnJheU1vZGUoKS50eXBl
KCkgIT0gQXJyYXk6OkFyZ3VtZW50cykKKyAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmFy
cmF5TW9kZSgpLnR5cGUoKSAhPSBBcnJheTo6QXJndW1lbnRzKQogICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAKICAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBjYW4gYmUgc2ltcGxp
ZmllZCB0byBHZXRNeUFyZ3VtZW50QnlWYWwgaWYgd2Uga25vdyB0aGF0CkBAIC00ODgsMjggKzQ4
NSwyOCBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgIC8vIDIpIEl0cyBmaXJzdCBjaGls
ZCBpcyBDcmVhdGVBcmd1bWVudHMgYW5kIGl0cyBJbmxpbmVDYWxsRnJhbWUqCiAgICAgICAgICAg
ICAgICAgICAgIC8vICAgIGlzIG5vdCBtYXJrZWQgYXMgY3JlYXRpbmcgYXJndW1lbnRzLgogICAg
ICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFpc09LVG9PcHRpbWl6
ZShtX2dyYXBoW25vZGUuY2hpbGQxKCldKSkKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFpc09L
VG9PcHRpbWl6ZShub2RlLT5jaGlsZDEoKS5ub2RlKCkpKQogICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBtX2dy
YXBoLmRlcmVmKG5vZGUuY2hpbGQxKCkpOwotICAgICAgICAgICAgICAgICAgICBub2RlLmNoaWxk
cmVuLmNoaWxkMSgpID0gbm9kZS5jaGlsZHJlbi5jaGlsZDIoKTsKLSAgICAgICAgICAgICAgICAg
ICAgbm9kZS5jaGlsZHJlbi5jaGlsZDIoKSA9IEVkZ2UoKTsKLSAgICAgICAgICAgICAgICAgICAg
bm9kZS5zZXRPcEFuZERlZmF1bHRGbGFncyhHZXRNeUFyZ3VtZW50QnlWYWwpOworICAgICAgICAg
ICAgICAgICAgICBtX2dyYXBoLmRlcmVmKG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgICAg
ICAgICAgbm9kZS0+Y2hpbGRyZW4uY2hpbGQxKCkgPSBub2RlLT5jaGlsZHJlbi5jaGlsZDIoKTsK
KyAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGRyZW4uY2hpbGQyKCkgPSBFZGdlKCk7Cisg
ICAgICAgICAgICAgICAgICAgIG5vZGUtPnNldE9wQW5kRGVmYXVsdEZsYWdzKEdldE15QXJndW1l
bnRCeVZhbCk7CiAgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgPSB0cnVlOwogICAgICAgICAg
ICAgICAgICAgICAtLWluZGV4SW5CbG9jazsgLy8gRm9yY2UgcmVjb25zaWRlcmF0aW9uIG9mIHRo
aXMgb3Agbm93IHRoYXQgaXQncyBhIEdldE15QXJndW1lbnRCeVZhbC4KICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAKICAg
ICAgICAgICAgICAgICBjYXNlIEdldEFycmF5TGVuZ3RoOiB7Ci0gICAgICAgICAgICAgICAgICAg
IGlmIChub2RlLmFycmF5TW9kZSgpLnR5cGUoKSAhPSBBcnJheTo6QXJndW1lbnRzKQorICAgICAg
ICAgICAgICAgICAgICBpZiAobm9kZS0+YXJyYXlNb2RlKCkudHlwZSgpICE9IEFycmF5OjpBcmd1
bWVudHMpCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAg
ICAgCi0gICAgICAgICAgICAgICAgICAgIGlmICghaXNPS1RvT3B0aW1pemUobV9ncmFwaFtub2Rl
LmNoaWxkMSgpXSkpCisgICAgICAgICAgICAgICAgICAgIGlmICghaXNPS1RvT3B0aW1pemUobm9k
ZS0+Y2hpbGQxKCkubm9kZSgpKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5kZXJlZihub2Rl
LmNoaWxkMSgpKTsKLSAgICAgICAgICAgICAgICAgICAgbm9kZS5jaGlsZHJlbi5jaGlsZDEoKSA9
IEVkZ2UoKTsKLSAgICAgICAgICAgICAgICAgICAgbm9kZS5zZXRPcEFuZERlZmF1bHRGbGFncyhH
ZXRNeUFyZ3VtZW50c0xlbmd0aCk7CisgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguZGVyZWYo
bm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgICAgICAgICBub2RlLT5jaGlsZHJlbi5jaGls
ZDEoKSA9IEVkZ2UoKTsKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+c2V0T3BBbmREZWZhdWx0
RmxhZ3MoR2V0TXlBcmd1bWVudHNMZW5ndGgpOwogICAgICAgICAgICAgICAgICAgICBjaGFuZ2Vk
ID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgLS1pbmRleEluQmxvY2s7IC8vIEZvcmNlIHJl
Y29uc2lkZXJhdGlvbiBvZiB0aGlzIG9wIG5vZXcgdGhhdCBpdCdzIGEgR2V0TXlBcmd1bWVudHNM
ZW5ndGguCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtNTE3LDE2ICs1MTQsMTYgQEAg
cHVibGljOgogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBjYXNlIEdldE15
QXJndW1lbnRzTGVuZ3RoOgogICAgICAgICAgICAgICAgIGNhc2UgR2V0TXlBcmd1bWVudHNMZW5n
dGhTYWZlOiB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChtX2NyZWF0ZXNBcmd1bWVudHMuY29u
dGFpbnMobm9kZS5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSkpIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIEFTU0VSVChub2RlLm9wKCkgPT0gR2V0TXlBcmd1bWVudHNMZW5ndGhTYWZlKTsK
KyAgICAgICAgICAgICAgICAgICAgaWYgKG1fY3JlYXRlc0FyZ3VtZW50cy5jb250YWlucyhub2Rl
LT5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IEFTU0VSVChub2RlLT5vcCgpID09IEdldE15QXJndW1lbnRzTGVuZ3RoU2FmZSk7CiAgICAgICAg
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgICAgICBpZiAobm9kZS5vcCgpID09IEdldE15QXJndW1lbnRzTGVuZ3RoU2FmZSkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS5zZXRPcChHZXRNeUFyZ3VtZW50c0xlbmd0aCk7
CisgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5vcCgpID09IEdldE15QXJndW1lbnRzTGVu
Z3RoU2FmZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+c2V0T3AoR2V0TXlBcmd1
bWVudHNMZW5ndGgpOwogICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCA9IHRydWU7CiAg
ICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAg
ICAgICAgIENvZGVPcmlnaW4gY29kZU9yaWdpbiA9IG5vZGUuY29kZU9yaWdpbjsKKyAgICAgICAg
ICAgICAgICAgICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2luID0gbm9kZS0+Y29kZU9yaWdpbjsKICAg
ICAgICAgICAgICAgICAgICAgaWYgKCFjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSkKICAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAKQEAgLTUzNywz
MiArNTM0LDMyIEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgICAgIENoZWNrQXJndW1l
bnRzTm90Q3JlYXRlZCwgY29kZU9yaWdpbik7CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAg
ICAgICAgICAgICAgICBtX2dyYXBoLmNvbnZlcnRUb0NvbnN0YW50KAotICAgICAgICAgICAgICAg
ICAgICAgICAgbm9kZUluZGV4LCBqc051bWJlcihjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZS0+
YXJndW1lbnRzLnNpemUoKSAtIDEpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUsIGpz
TnVtYmVyKGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgpIC0gMSkp
OwogICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAKICAgICAg
ICAgICAgICAgICBjYXNlIEdldE15QXJndW1lbnRCeVZhbDoKICAgICAgICAgICAgICAgICBjYXNl
IEdldE15QXJndW1lbnRCeVZhbFNhZmU6IHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG1fY3Jl
YXRlc0FyZ3VtZW50cy5jb250YWlucyhub2RlLmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKSkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKG5vZGUub3AoKSA9PSBHZXRNeUFyZ3Vt
ZW50QnlWYWxTYWZlKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1fY3JlYXRlc0FyZ3VtZW50
cy5jb250YWlucyhub2RlLT5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSkpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIEFTU0VSVChub2RlLT5vcCgpID09IEdldE15QXJndW1lbnRCeVZhbFNh
ZmUpOwogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUub3AoKSA9PSBHZXRNeUFyZ3VtZW50QnlW
YWxTYWZlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBub2RlLnNldE9wKEdldE15QXJndW1l
bnRCeVZhbCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5vcCgpID09IEdldE15QXJn
dW1lbnRCeVZhbFNhZmUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPnNldE9wKEdl
dE15QXJndW1lbnRCeVZhbCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkID0gdHJ1
ZTsKICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBpZiAoIW5vZGUu
Y29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpCisgICAgICAgICAgICAgICAgICAgIGlmICghbm9k
ZS0+Y29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpCiAgICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFtX2dyYXBoW25vZGUuY2hpbGQxKCldLmhh
c0NvbnN0YW50KCkpCisgICAgICAgICAgICAgICAgICAgIGlmICghbm9kZS0+Y2hpbGQxKCktPmhh
c0NvbnN0YW50KCkpCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
ICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0udmFsdWVPZkpT
Q29uc3RhbnQoY29kZUJsb2NrKCkpOworICAgICAgICAgICAgICAgICAgICBKU1ZhbHVlIHZhbHVl
ID0gbm9kZS0+Y2hpbGQxKCktPnZhbHVlT2ZKU0NvbnN0YW50KGNvZGVCbG9jaygpKTsKICAgICAg
ICAgICAgICAgICAgICAgaWYgKCF2YWx1ZS5pc0ludDMyKCkpCiAgICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCBpbmRleCA9IHZhbHVlLmFz
SW50MzIoKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKGluZGV4IDwgMAogICAgICAgICAgICAg
ICAgICAgICAgICAgfHwgc3RhdGljX2Nhc3Q8c2l6ZV90PihpbmRleCArIDEpID49Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbm9kZS5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZS0+YXJn
dW1lbnRzLnNpemUoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5jb2RlT3Jp
Z2luLmlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzLnNpemUoKSkKICAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAg
Ly8gV2Uga25vdyB3aGljaCBhcmd1bWVudCB0aGlzIGlzIGFjY2Vzc2luZy4gQnV0IG9ubHkgYWZ0
ZXIgd2UgaGF2ZSBjaGVja2VkCkBAIC01NzQsMTMgKzU3MSwxMyBAQCBwdWJsaWM6CiAgICAgICAg
ICAgICAgICAgICAgIC8vIGhhcyBydW4gLSB0aGVyZWZvcmUgaXQgbWFrZXMgbGl0dGxlIHNlbnNl
IHRvIGxpbmsgdGhlIEdldExvY2FsIG9wZXJhdGlvbgogICAgICAgICAgICAgICAgICAgICAvLyBp
bnRvIHRoZSBWYXJpYWJsZUFjY2Vzc0RhdGEgYW5kIFBoaSBncmFwaHMuCiAKLSAgICAgICAgICAg
ICAgICAgICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2luID0gbm9kZS5jb2RlT3JpZ2luOwotICAgICAg
ICAgICAgICAgICAgICBBZGphY2VuY3lMaXN0IGNoaWxkcmVuID0gbm9kZS5jaGlsZHJlbjsKKyAg
ICAgICAgICAgICAgICAgICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2luID0gbm9kZS0+Y29kZU9yaWdp
bjsKKyAgICAgICAgICAgICAgICAgICAgQWRqYWNlbmN5TGlzdCBjaGlsZHJlbiA9IG5vZGUtPmNo
aWxkcmVuOwogICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgbm9kZS5j
b252ZXJ0VG9HZXRMb2NhbFVubGlua2VkKAorICAgICAgICAgICAgICAgICAgICBub2RlLT5jb252
ZXJ0VG9HZXRMb2NhbFVubGlua2VkKAogICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nh
c3Q8VmlydHVhbFJlZ2lzdGVyPigKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlLmNv
ZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbV9ncmFwaC5iYXNlbGluZUNvZGVCbG9ja0Zvcihub2RlLmNvZGVPcmlnaW4p
LT5hcmd1bWVudEluZGV4QWZ0ZXJDYXB0dXJlKGluZGV4KSkpOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG5vZGUtPmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCAr
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5iYXNlbGluZUNvZGVCbG9ja0Zv
cihub2RlLT5jb2RlT3JpZ2luKS0+YXJndW1lbnRJbmRleEFmdGVyQ2FwdHVyZShpbmRleCkpKTsK
IAogICAgICAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKICAgICAgICAg
ICAgICAgICAgICAgICAgIGluZGV4SW5CbG9jaywgRG9udFJlZkNoaWxkcmVuLCBEb250UmVmTm9k
ZSwgU3BlY05vbmUsIENoZWNrQXJndW1lbnRzTm90Q3JlYXRlZCwKQEAgLTU5NCwxMyArNTkxLDEz
IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIAogICAg
ICAgICAgICAgICAgIGNhc2UgVGVhck9mZkFyZ3VtZW50czogewotICAgICAgICAgICAgICAgICAg
ICBpZiAobV9jcmVhdGVzQXJndW1lbnRzLmNvbnRhaW5zKG5vZGUuY29kZU9yaWdpbi5pbmxpbmVD
YWxsRnJhbWUpKQorICAgICAgICAgICAgICAgICAgICBpZiAobV9jcmVhdGVzQXJndW1lbnRzLmNv
bnRhaW5zKG5vZGUtPmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKSkKICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAg
ICAgICAgbm9kZS5zZXRPcEFuZERlZmF1bHRGbGFncyhOb3ApOworICAgICAgICAgICAgICAgICAg
ICBub2RlLT5zZXRPcEFuZERlZmF1bHRGbGFncyhOb3ApOwogICAgICAgICAgICAgICAgICAgICBt
X2dyYXBoLmNsZWFyQW5kRGVyZWZDaGlsZDEobm9kZSk7CiAgICAgICAgICAgICAgICAgICAgIG1f
Z3JhcGguY2xlYXJBbmREZXJlZkNoaWxkMihub2RlKTsKLSAgICAgICAgICAgICAgICAgICAgbm9k
ZS5zZXRSZWZDb3VudCgwKTsKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+c2V0UmVmQ291bnQo
MCk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICAgICAgCkBAIC02MTYsMjUgKzYxMywyMyBAQCBwdWJsaWM6CiAgICAgICAgICAg
ICBpZiAoIWJsb2NrKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpbmRleEluQmxvY2sgPSAwOyBpbmRleEluQmxvY2sgPCBibG9jay0+c2l6ZSgp
OyArK2luZGV4SW5CbG9jaykgewotICAgICAgICAgICAgICAgIE5vZGVJbmRleCBub2RlSW5kZXgg
PSBibG9jay0+YXQoaW5kZXhJbkJsb2NrKTsKLSAgICAgICAgICAgICAgICBOb2RlKiBub2RlUHRy
ID0gJm1fZ3JhcGhbbm9kZUluZGV4XTsKLSAgICAgICAgICAgICAgICBpZiAobm9kZVB0ci0+b3Ao
KSAhPSBDcmVhdGVBcmd1bWVudHMpCisgICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2Nr
LT5hdChpbmRleEluQmxvY2spOworICAgICAgICAgICAgICAgIGlmIChub2RlLT5vcCgpICE9IENy
ZWF0ZUFyZ3VtZW50cykKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAg
ICAgICAgLy8gSWYgdGhpcyBpcyBhIENyZWF0ZUFyZ3VtZW50cyBmb3IgYW4gSW5saW5lQ2FsbEZy
YW1lKiB0aGF0IGRvZXMKICAgICAgICAgICAgICAgICAvLyBub3QgY3JlYXRlIGFyZ3VtZW50cywg
dGhlbiByZXBsYWNlIGl0IHdpdGggYSBQaGFudG9tQXJndW1lbnRzLgogICAgICAgICAgICAgICAg
IC8vIFBoYW50b21Bcmd1bWVudHMgaXMgYSBub24tZXhlY3V0aW5nIG5vZGUgdGhhdCBqdXN0IGlu
ZGljYXRlcwogICAgICAgICAgICAgICAgIC8vIHRoYXQgdGhlIG5vZGUgc2hvdWxkIGJlIHJlaWZp
ZWQgYXMgYW4gYXJndW1lbnRzIG9iamVjdCBvbiBPU1IKICAgICAgICAgICAgICAgICAvLyBleGl0
LgotICAgICAgICAgICAgICAgIGlmIChtX2NyZWF0ZXNBcmd1bWVudHMuY29udGFpbnMobm9kZVB0
ci0+Y29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpKQorICAgICAgICAgICAgICAgIGlmIChtX2Ny
ZWF0ZXNBcmd1bWVudHMuY29udGFpbnMobm9kZS0+Y29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUp
KQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICBpZiAobm9k
ZVB0ci0+c2hvdWxkR2VuZXJhdGUoKSkgeworICAgICAgICAgICAgICAgIGlmIChub2RlLT5zaG91
bGRHZW5lcmF0ZSgpKSB7CiAgICAgICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnRO
b2RlKAogICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBEb250UmVmQ2hpbGRy
ZW4sIERvbnRSZWZOb2RlLCBTcGVjTm9uZSwgUGhhbnRvbSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgIG5vZGVQdHItPmNvZGVPcmlnaW4sIG5vZGVQdHItPmNoaWxkcmVuKTsKLSAgICAgICAgICAg
ICAgICAgICAgbm9kZVB0ciA9ICZtX2dyYXBoW25vZGVJbmRleF07CisgICAgICAgICAgICAgICAg
ICAgICAgICBub2RlLT5jb2RlT3JpZ2luLCBub2RlLT5jaGlsZHJlbik7CiAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIG5vZGVQdHItPnNldE9wQW5kRGVmYXVsdEZsYWdzKFBoYW50
b21Bcmd1bWVudHMpOwotICAgICAgICAgICAgICAgIG5vZGVQdHItPmNoaWxkcmVuLnJlc2V0KCk7
CisgICAgICAgICAgICAgICAgbm9kZS0+c2V0T3BBbmREZWZhdWx0RmxhZ3MoUGhhbnRvbUFyZ3Vt
ZW50cyk7CisgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGRyZW4ucmVzZXQoKTsKICAgICAgICAg
ICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGluc2Vy
dGlvblNldC5leGVjdXRlKGJsb2NrKTsKQEAgLTY1NCwyOCArNjQ5LDI3IEBAIHByaXZhdGU6CiAg
ICAgICAgICAgICBEZWZhdWx0SGFzaDxWYXJpYWJsZUFjY2Vzc0RhdGEqPjo6SGFzaCwKICAgICAg
ICAgICAgIE51bGxhYmxlSGFzaFRyYWl0czxWYXJpYWJsZUFjY2Vzc0RhdGEqPiA+IG1fYXJndW1l
bnRzQWxpYXNpbmc7CiAKLSAgICB2b2lkIG9ic2VydmVCYWRBcmd1bWVudHNVc2UoRWRnZSBlZGdl
KQorICAgIHZvaWQgb2JzZXJ2ZUJhZEFyZ3VtZW50c1VzZShOb2RlKiBub2RlKQogICAgIHsKLSAg
ICAgICAgaWYgKCFlZGdlKQorICAgICAgICBpZiAoIW5vZGUpCiAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgIAotICAgICAgICBOb2RlJiBjaGlsZCA9IG1fZ3JhcGhbZWRnZV07Ci0gICAgICAg
IHN3aXRjaCAoY2hpbGQub3AoKSkgeworICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKICAg
ICAgICAgY2FzZSBDcmVhdGVBcmd1bWVudHM6IHsKLSAgICAgICAgICAgIG1fY3JlYXRlc0FyZ3Vt
ZW50cy5hZGQoY2hpbGQuY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpOworICAgICAgICAgICAg
bV9jcmVhdGVzQXJndW1lbnRzLmFkZChub2RlLT5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSk7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgIGNh
c2UgR2V0TG9jYWw6IHsKLSAgICAgICAgICAgIGludCBhcmd1bWVudHNSZWdpc3RlciA9IG1fZ3Jh
cGgudW5jaGVja2VkQXJndW1lbnRzUmVnaXN0ZXJGb3IoY2hpbGQuY29kZU9yaWdpbik7CisgICAg
ICAgICAgICBpbnQgYXJndW1lbnRzUmVnaXN0ZXIgPSBtX2dyYXBoLnVuY2hlY2tlZEFyZ3VtZW50
c1JlZ2lzdGVyRm9yKG5vZGUtPmNvZGVPcmlnaW4pOwogICAgICAgICAgICAgaWYgKGFyZ3VtZW50
c1JlZ2lzdGVyICE9IEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIKLSAgICAgICAgICAgICAgICAmJiAo
Y2hpbGQubG9jYWwoKSA9PSBhcmd1bWVudHNSZWdpc3RlcgotICAgICAgICAgICAgICAgICAgICB8
fCBjaGlsZC5sb2NhbCgpID09IHVubW9kaWZpZWRBcmd1bWVudHNSZWdpc3Rlcihhcmd1bWVudHNS
ZWdpc3RlcikpKSB7Ci0gICAgICAgICAgICAgICAgbV9jcmVhdGVzQXJndW1lbnRzLmFkZChjaGls
ZC5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSk7CisgICAgICAgICAgICAgICAgJiYgKG5vZGUt
PmxvY2FsKCkgPT0gYXJndW1lbnRzUmVnaXN0ZXIKKyAgICAgICAgICAgICAgICAgICAgfHwgbm9k
ZS0+bG9jYWwoKSA9PSB1bm1vZGlmaWVkQXJndW1lbnRzUmVnaXN0ZXIoYXJndW1lbnRzUmVnaXN0
ZXIpKSkgeworICAgICAgICAgICAgICAgIG1fY3JlYXRlc0FyZ3VtZW50cy5hZGQobm9kZS0+Y29k
ZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZh
cmlhYmxlQWNjZXNzRGF0YSA9IGNoaWxkLnZhcmlhYmxlQWNjZXNzRGF0YSgpOworICAgICAgICAg
ICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBub2RlLT52YXJpYWJs
ZUFjY2Vzc0RhdGEoKTsKICAgICAgICAgICAgIGlmICh2YXJpYWJsZUFjY2Vzc0RhdGEtPmlzQ2Fw
dHVyZWQoKSkKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIApAQCAtNjg5LDE2
ICs2ODMsMTUgQEAgcHJpdmF0ZToKICAgICAgICAgfQogICAgIH0KICAgICAKLSAgICB2b2lkIG9i
c2VydmVCYWRBcmd1bWVudHNVc2VzKE5vZGUmIG5vZGUpCisgICAgdm9pZCBvYnNlcnZlQmFkQXJn
dW1lbnRzVXNlcyhOb2RlKiBub2RlKQogICAgIHsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
bV9ncmFwaC5udW1DaGlsZHJlbihub2RlKTsgaS0tOykKLSAgICAgICAgICAgIG9ic2VydmVCYWRB
cmd1bWVudHNVc2UobV9ncmFwaC5jaGlsZChub2RlLCBpKSk7CisgICAgICAgICAgICBvYnNlcnZl
QmFkQXJndW1lbnRzVXNlKG1fZ3JhcGguY2hpbGQobm9kZSwgaSkubm9kZSgpKTsKICAgICB9CiAg
ICAgCi0gICAgdm9pZCBvYnNlcnZlUHJvcGVyQXJndW1lbnRzVXNlKE5vZGUmIG5vZGUsIEVkZ2Ug
ZWRnZSkKKyAgICB2b2lkIG9ic2VydmVQcm9wZXJBcmd1bWVudHNVc2UoTm9kZSogbm9kZSwgRWRn
ZSBlZGdlKQogICAgIHsKLSAgICAgICAgTm9kZSYgY2hpbGQgPSBtX2dyYXBoW2VkZ2VdOwotICAg
ICAgICBpZiAoY2hpbGQub3AoKSAhPSBHZXRMb2NhbCkgeworICAgICAgICBpZiAoZWRnZS0+b3Ao
KSAhPSBHZXRMb2NhbCkgewogICAgICAgICAgICAgLy8gV2hlbiBjYW4gdGhpcyBoYXBwZW4/IEF0
IGxlYXN0IHR3byBjYXNlcyB0aGF0IEkgY2FuIHRoaW5rCiAgICAgICAgICAgICAvLyBvZjoKICAg
ICAgICAgICAgIC8vCkBAIC03MTAsMTggKzcwMywxOCBAQCBwcml2YXRlOgogICAgICAgICAgICAg
Ly8KICAgICAgICAgICAgIC8vIDIpIElmIHdlJ3JlIGFjY2Vzc2luZyBhcmd1bWVudHMgd2UgZ290
IGZyb20gdGhlIGhlYXAhCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAg
ICBpZiAoY2hpbGQub3AoKSA9PSBDcmVhdGVBcmd1bWVudHMKLSAgICAgICAgICAgICAgICAmJiBu
b2RlLmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lCi0gICAgICAgICAgICAgICAgICAgIT0gY2hp
bGQuY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpCi0gICAgICAgICAgICAgICAgbV9jcmVhdGVz
QXJndW1lbnRzLmFkZChjaGlsZC5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSk7CisgICAgICAg
ICAgICBpZiAoZWRnZS0+b3AoKSA9PSBDcmVhdGVBcmd1bWVudHMKKyAgICAgICAgICAgICAgICAm
JiBub2RlLT5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZQorICAgICAgICAgICAgICAgICAgICE9
IGVkZ2UtPmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKQorICAgICAgICAgICAgICAgIG1fY3Jl
YXRlc0FyZ3VtZW50cy5hZGQoZWRnZS0+Y29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpOwogICAg
ICAgICAgICAgCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICAgICAgICAgIAotICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0
YSA9IGNoaWxkLnZhcmlhYmxlQWNjZXNzRGF0YSgpOwotICAgICAgICBpZiAoY2hpbGQubG9jYWwo
KSA9PSBtX2dyYXBoLnVuY2hlY2tlZEFyZ3VtZW50c1JlZ2lzdGVyRm9yKGNoaWxkLmNvZGVPcmln
aW4pCi0gICAgICAgICAgICAmJiBub2RlLmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lICE9IGNo
aWxkLmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKSB7Ci0gICAgICAgICAgICBtX2NyZWF0ZXNB
cmd1bWVudHMuYWRkKGNoaWxkLmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKTsKKyAgICAgICAg
VmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBlZGdlLT52YXJpYWJsZUFj
Y2Vzc0RhdGEoKTsKKyAgICAgICAgaWYgKGVkZ2UtPmxvY2FsKCkgPT0gbV9ncmFwaC51bmNoZWNr
ZWRBcmd1bWVudHNSZWdpc3RlckZvcihlZGdlLT5jb2RlT3JpZ2luKQorICAgICAgICAgICAgJiYg
bm9kZS0+Y29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUgIT0gZWRnZS0+Y29kZU9yaWdpbi5pbmxp
bmVDYWxsRnJhbWUpIHsKKyAgICAgICAgICAgIG1fY3JlYXRlc0FyZ3VtZW50cy5hZGQoZWRnZS0+
Y29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICB9CiAKQEAgLTcyOSwxOCArNzIyLDE4IEBAIHByaXZhdGU6CiAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgIAogICAgICAgICBBcmd1bWVudHNBbGlhc2luZ0RhdGEmIGRhdGEgPSBtX2FyZ3Vt
ZW50c0FsaWFzaW5nLmZpbmQodmFyaWFibGVBY2Nlc3NEYXRhKS0+dmFsdWU7Ci0gICAgICAgIGRh
dGEubWVyZ2VDYWxsQ29udGV4dChub2RlLmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKTsKKyAg
ICAgICAgZGF0YS5tZXJnZUNhbGxDb250ZXh0KG5vZGUtPmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZy
YW1lKTsKICAgICB9CiAgICAgCi0gICAgYm9vbCBpc09LVG9PcHRpbWl6ZShOb2RlJiBzb3VyY2Up
CisgICAgYm9vbCBpc09LVG9PcHRpbWl6ZShOb2RlKiBzb3VyY2UpCiAgICAgewotICAgICAgICBp
ZiAobV9jcmVhdGVzQXJndW1lbnRzLmNvbnRhaW5zKHNvdXJjZS5jb2RlT3JpZ2luLmlubGluZUNh
bGxGcmFtZSkpCisgICAgICAgIGlmIChtX2NyZWF0ZXNBcmd1bWVudHMuY29udGFpbnMoc291cmNl
LT5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgICAgIAotICAgICAgICBzd2l0Y2ggKHNvdXJjZS5vcCgpKSB7CisgICAgICAgIHN3aXRj
aCAoc291cmNlLT5vcCgpKSB7CiAgICAgICAgIGNhc2UgR2V0TG9jYWw6IHsKLSAgICAgICAgICAg
IFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhID0gc291cmNlLnZhcmlhYmxl
QWNjZXNzRGF0YSgpOwotICAgICAgICAgICAgaW50IGFyZ3VtZW50c1JlZ2lzdGVyID0gbV9ncmFw
aC51bmNoZWNrZWRBcmd1bWVudHNSZWdpc3RlckZvcihzb3VyY2UuY29kZU9yaWdpbik7CisgICAg
ICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9IHNvdXJjZS0+
dmFyaWFibGVBY2Nlc3NEYXRhKCk7CisgICAgICAgICAgICBpbnQgYXJndW1lbnRzUmVnaXN0ZXIg
PSBtX2dyYXBoLnVuY2hlY2tlZEFyZ3VtZW50c1JlZ2lzdGVyRm9yKHNvdXJjZS0+Y29kZU9yaWdp
bik7CiAgICAgICAgICAgICBpZiAoYXJndW1lbnRzUmVnaXN0ZXIgPT0gSW52YWxpZFZpcnR1YWxS
ZWdpc3RlcikKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGlmIChhcmd1bWVu
dHNSZWdpc3RlciA9PSB2YXJpYWJsZUFjY2Vzc0RhdGEtPmxvY2FsKCkpCkBAIC03NjgsMzggKzc2
MSwzNyBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIAotICAg
IHZvaWQgcmVtb3ZlQXJndW1lbnRzUmVmZXJlbmNpbmdQaGFudG9tQ2hpbGQoTm9kZSYgbm9kZSwg
dW5zaWduZWQgZWRnZUluZGV4KQorICAgIHZvaWQgcmVtb3ZlQXJndW1lbnRzUmVmZXJlbmNpbmdQ
aGFudG9tQ2hpbGQoTm9kZSogbm9kZSwgdW5zaWduZWQgZWRnZUluZGV4KQogICAgIHsKLSAgICAg
ICAgRWRnZSBlZGdlID0gbm9kZS5jaGlsZHJlbi5jaGlsZChlZGdlSW5kZXgpOworICAgICAgICBF
ZGdlIGVkZ2UgPSBub2RlLT5jaGlsZHJlbi5jaGlsZChlZGdlSW5kZXgpOwogICAgICAgICBpZiAo
IWVkZ2UpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIAotICAgICAgICBOb2RlJiBjaGls
ZCA9IG1fZ3JhcGhbZWRnZV07Ci0gICAgICAgIHN3aXRjaCAoY2hpbGQub3AoKSkgeworICAgICAg
ICBzd2l0Y2ggKGVkZ2UtPm9wKCkpIHsKICAgICAgICAgY2FzZSBQaGk6IC8vIEFyaXNlcyBpZiB3
ZSBoYWQgQ1NFIG9uIGEgR2V0TG9jYWwgb2YgdGhlIGFyZ3VtZW50cyByZWdpc3Rlci4KICAgICAg
ICAgY2FzZSBHZXRMb2NhbDogLy8gQXJpc2VzIGlmIHdlIGhhZCBDU0Ugb24gYW4gYXJndW1lbnRz
IGFjY2VzcyB0byBhIHZhcmlhYmxlIGFsaWFzZWQgdG8gdGhlIGFyZ3VtZW50cy4KICAgICAgICAg
Y2FzZSBTZXRMb2NhbDogeyAvLyBBcmlzZXMgaWYgd2UgaGFkIENTRSBvbiBhIEdldExvY2FsIG9m
IHRoZSBhcmd1bWVudHMgcmVnaXN0ZXIuCi0gICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEq
IHZhcmlhYmxlQWNjZXNzRGF0YSA9IGNoaWxkLnZhcmlhYmxlQWNjZXNzRGF0YSgpOworICAgICAg
ICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBlZGdlLT52YXJp
YWJsZUFjY2Vzc0RhdGEoKTsKICAgICAgICAgICAgIGJvb2wgaXNEZWFkQXJndW1lbnRzUmVnaXN0
ZXIgPQogICAgICAgICAgICAgICAgIHZhcmlhYmxlQWNjZXNzRGF0YS0+bG9jYWwoKSA9PQotICAg
ICAgICAgICAgICAgICAgICBtX2dyYXBoLnVuY2hlY2tlZEFyZ3VtZW50c1JlZ2lzdGVyRm9yKGNo
aWxkLmNvZGVPcmlnaW4pCi0gICAgICAgICAgICAgICAgJiYgIW1fY3JlYXRlc0FyZ3VtZW50cy5j
b250YWlucyhjaGlsZC5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSk7CisgICAgICAgICAgICAg
ICAgICAgIG1fZ3JhcGgudW5jaGVja2VkQXJndW1lbnRzUmVnaXN0ZXJGb3IoZWRnZS0+Y29kZU9y
aWdpbikKKyAgICAgICAgICAgICAgICAmJiAhbV9jcmVhdGVzQXJndW1lbnRzLmNvbnRhaW5zKGVk
Z2UtPmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKTsKICAgICAgICAgICAgIGJvb2wgaXNBbGlh
c2VkQXJndW1lbnRzUmVnaXN0ZXIgPQogICAgICAgICAgICAgICAgICF2YXJpYWJsZUFjY2Vzc0Rh
dGEtPmlzQ2FwdHVyZWQoKQogICAgICAgICAgICAgICAgICYmIG1fYXJndW1lbnRzQWxpYXNpbmcu
ZmluZCh2YXJpYWJsZUFjY2Vzc0RhdGEpLT52YWx1ZS5pc1ZhbGlkKCkKLSAgICAgICAgICAgICAg
ICAmJiAhbV9jcmVhdGVzQXJndW1lbnRzLmNvbnRhaW5zKGNoaWxkLmNvZGVPcmlnaW4uaW5saW5l
Q2FsbEZyYW1lKTsKKyAgICAgICAgICAgICAgICAmJiAhbV9jcmVhdGVzQXJndW1lbnRzLmNvbnRh
aW5zKGVkZ2UtPmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKTsKICAgICAgICAgICAgIGlmICgh
aXNEZWFkQXJndW1lbnRzUmVnaXN0ZXIgJiYgIWlzQWxpYXNlZEFyZ3VtZW50c1JlZ2lzdGVyKQog
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgbV9ncmFwaC5kZXJlZihlZGdlKTsK
LSAgICAgICAgICAgIG5vZGUuY2hpbGRyZW4ucmVtb3ZlRWRnZUZyb21CYWcoZWRnZUluZGV4KTsK
KyAgICAgICAgICAgIG5vZGUtPmNoaWxkcmVuLnJlbW92ZUVkZ2VGcm9tQmFnKGVkZ2VJbmRleCk7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgIGNh
c2UgQ3JlYXRlQXJndW1lbnRzOiB7IC8vIEFyaXNlcyBpZiB3ZSBDU0UgdHdvIEdldExvY2FscyB0
byB0aGUgYXJndW1lbnRzIHJlZ2lzdGVyIGFuZCB0aGVuIENTRSB0aGUgc2Vjb25kIHVzZSBvZiB0
aGUgR2V0TG9jYWwgdG8gdGhlIGZpcnN0LgotICAgICAgICAgICAgaWYgKG1fY3JlYXRlc0FyZ3Vt
ZW50cy5jb250YWlucyhjaGlsZC5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSkpCisgICAgICAg
ICAgICBpZiAobV9jcmVhdGVzQXJndW1lbnRzLmNvbnRhaW5zKGVkZ2UtPmNvZGVPcmlnaW4uaW5s
aW5lQ2FsbEZyYW1lKSkKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIG1fZ3Jh
cGguZGVyZWYoZWRnZSk7Ci0gICAgICAgICAgICBub2RlLmNoaWxkcmVuLnJlbW92ZUVkZ2VGcm9t
QmFnKGVkZ2VJbmRleCk7CisgICAgICAgICAgICBub2RlLT5jaGlsZHJlbi5yZW1vdmVFZGdlRnJv
bUJhZyhlZGdlSW5kZXgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAg
ICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJheU1vZGUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlNb2RlLmNwcAko
cmV2aXNpb24gMTQwMzA2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJheU1v
ZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNDYsMTQgKzI0NiwxNCBAQCBTdHJ1Y3R1cmUqIEFy
cmF5TW9kZTo6b3JpZ2luYWxBcnJheVN0cnVjCiAgICAgcmV0dXJuIG9yaWdpbmFsQXJyYXlTdHJ1
Y3R1cmUoZ3JhcGgsIG5vZGUuY29kZU9yaWdpbik7CiB9CiAKLWJvb2wgQXJyYXlNb2RlOjphbHJl
YWR5Q2hlY2tlZChHcmFwaCYgZ3JhcGgsIE5vZGUmIG5vZGUsIEFic3RyYWN0VmFsdWUmIHZhbHVl
LCBJbmRleGluZ1R5cGUgc2hhcGUpIGNvbnN0Citib29sIEFycmF5TW9kZTo6YWxyZWFkeUNoZWNr
ZWQoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlLCBBYnN0cmFjdFZhbHVlJiB2YWx1ZSwgSW5kZXhp
bmdUeXBlIHNoYXBlKSBjb25zdAogewogICAgIHN3aXRjaCAoYXJyYXlDbGFzcygpKSB7CiAgICAg
Y2FzZSBBcnJheTo6T3JpZ2luYWxBcnJheToKICAgICAgICAgcmV0dXJuIHZhbHVlLm1fY3VycmVu
dEtub3duU3RydWN0dXJlLmhhc1NpbmdsZXRvbigpCiAgICAgICAgICAgICAmJiAodmFsdWUubV9j
dXJyZW50S25vd25TdHJ1Y3R1cmUuc2luZ2xldG9uKCktPmluZGV4aW5nVHlwZSgpICYgSW5kZXhp
bmdTaGFwZU1hc2spID09IHNoYXBlCiAgICAgICAgICAgICAmJiAodmFsdWUubV9jdXJyZW50S25v
d25TdHJ1Y3R1cmUuc2luZ2xldG9uKCktPmluZGV4aW5nVHlwZSgpICYgSXNBcnJheSkKLSAgICAg
ICAgICAgICYmIGdyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLmNvZGVPcmlnaW4pLT5pc09yaWdp
bmFsQXJyYXlTdHJ1Y3R1cmUodmFsdWUubV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuc2luZ2xldG9u
KCkpOworICAgICAgICAgICAgJiYgZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPmNvZGVPcmln
aW4pLT5pc09yaWdpbmFsQXJyYXlTdHJ1Y3R1cmUodmFsdWUubV9jdXJyZW50S25vd25TdHJ1Y3R1
cmUuc2luZ2xldG9uKCkpOwogICAgICAgICAKICAgICBjYXNlIEFycmF5OjpBcnJheToKICAgICAg
ICAgaWYgKGFycmF5TW9kZXNBbHJlYWR5Q2hlY2tlZCh2YWx1ZS5tX2FycmF5TW9kZXMsIGFzQXJy
YXlNb2RlcyhzaGFwZSB8IElzQXJyYXkpKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQXJyYXlNb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdBcnJheU1vZGUuaAkocmV2aXNpb24gMTQwMzA2KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdBcnJheU1vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTk3LDcgKzE5Nyw3IEBA
IHB1YmxpYzoKICAgICAKICAgICBBcnJheU1vZGUgcmVmaW5lKFNwZWN1bGF0ZWRUeXBlIGJhc2Us
IFNwZWN1bGF0ZWRUeXBlIGluZGV4LCBTcGVjdWxhdGVkVHlwZSB2YWx1ZSA9IFNwZWNOb25lLCBO
b2RlRmxhZ3MgPSAwKSBjb25zdDsKICAgICAKLSAgICBib29sIGFscmVhZHlDaGVja2VkKEdyYXBo
JiwgTm9kZSYsIEFic3RyYWN0VmFsdWUmKSBjb25zdDsKKyAgICBib29sIGFscmVhZHlDaGVja2Vk
KEdyYXBoJiwgTm9kZSosIEFic3RyYWN0VmFsdWUmKSBjb25zdDsKICAgICAKICAgICB2b2lkIGR1
bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQmFzaWNCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQmFzaWNCbG9jay5oCShyZXZpc2lvbiAxNDAzMDYpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtNDIsNyArNDIs
NyBAQCBjbGFzcyBHcmFwaDsKIAogdHlwZWRlZiBWZWN0b3IgPEJsb2NrSW5kZXgsIDI+IFByZWRl
Y2Vzc29yTGlzdDsKIAotc3RydWN0IEJhc2ljQmxvY2sgOiBWZWN0b3I8Tm9kZUluZGV4LCA4PiB7
CitzdHJ1Y3QgQmFzaWNCbG9jayA6IFZlY3RvcjxOb2RlKiwgOD4gewogICAgIEJhc2ljQmxvY2so
dW5zaWduZWQgYnl0ZWNvZGVCZWdpbiwgdW5zaWduZWQgbnVtQXJndW1lbnRzLCB1bnNpZ25lZCBu
dW1Mb2NhbHMpCiAgICAgICAgIDogYnl0ZWNvZGVCZWdpbihieXRlY29kZUJlZ2luKQogICAgICAg
ICAsIGlzT1NSVGFyZ2V0KGZhbHNlKQpAQCAtNzUsNyArNzUsNyBAQCBzdHJ1Y3QgQmFzaWNCbG9j
ayA6IFZlY3RvcjxOb2RlSW5kZXgsIDg+CiAgICAgfQogICAgIAogICAgIHNpemVfdCBudW1Ob2Rl
cygpIGNvbnN0IHsgcmV0dXJuIHBoaXMuc2l6ZSgpICsgc2l6ZSgpOyB9Ci0gICAgTm9kZUluZGV4
IG5vZGVJbmRleChzaXplX3QgaSkgY29uc3QKKyAgICBOb2RlKiBub2RlKHNpemVfdCBpKSBjb25z
dAogICAgIHsKICAgICAgICAgaWYgKGkgPCBwaGlzLnNpemUoKSkKICAgICAgICAgICAgIHJldHVy
biBwaGlzW2ldOwpAQCAtODMsMjYgKzgzLDI2IEBAIHN0cnVjdCBCYXNpY0Jsb2NrIDogVmVjdG9y
PE5vZGVJbmRleCwgOD4KICAgICB9CiAgICAgYm9vbCBpc1BoaUluZGV4KHNpemVfdCBpKSBjb25z
dCB7IHJldHVybiBpIDwgcGhpcy5zaXplKCk7IH0KICAgICAKLSAgICBib29sIGlzSW5QaGlzKE5v
ZGVJbmRleCBub2RlSW5kZXgpIGNvbnN0CisgICAgYm9vbCBpc0luUGhpcyhOb2RlKiBub2RlKSBj
b25zdAogICAgIHsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwaGlzLnNpemUoKTsg
KytpKSB7Ci0gICAgICAgICAgICBpZiAocGhpc1tpXSA9PSBub2RlSW5kZXgpCisgICAgICAgICAg
ICBpZiAocGhpc1tpXSA9PSBub2RlKQogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAg
ICAgICB9CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgCi0gICAgYm9vbCBpc0lu
QmxvY2soTm9kZUluZGV4IGluZGV4KSBjb25zdAorICAgIGJvb2wgaXNJbkJsb2NrKE5vZGUqIG15
Tm9kZSkgY29uc3QKICAgICB7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtTm9k
ZXMoKTsgKytpKSB7Ci0gICAgICAgICAgICBpZiAobm9kZUluZGV4KGkpID09IGluZGV4KQorICAg
ICAgICAgICAgaWYgKG5vZGUoaSkgPT0gbXlOb2RlKQogICAgICAgICAgICAgICAgIHJldHVybiB0
cnVlOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgCiAjZGVm
aW5lIERGR19ERUZJTkVfQVBQRU5EX05PREUodGVtcGxhdGVQcmUsIHRlbXBsYXRlUG9zdCwgdHlw
ZVBhcmFtcywgdmFsdWVQYXJhbXNDb21tYSwgdmFsdWVQYXJhbXMsIHZhbHVlQXJncykgXAotICAg
IHRlbXBsYXRlUHJlIHR5cGVQYXJhbXMgdGVtcGxhdGVQb3N0IE5vZGVJbmRleCBhcHBlbmROb2Rl
KEdyYXBoJiwgUmVmQ2hpbGRyZW5Nb2RlLCBSZWZOb2RlTW9kZSwgU3BlY3VsYXRlZFR5cGUgdmFs
dWVQYXJhbXNDb21tYSB2YWx1ZVBhcmFtcyk7CisgICAgdGVtcGxhdGVQcmUgdHlwZVBhcmFtcyB0
ZW1wbGF0ZVBvc3QgTm9kZSogYXBwZW5kTm9kZShHcmFwaCYsIFJlZkNoaWxkcmVuTW9kZSwgUmVm
Tm9kZU1vZGUsIFNwZWN1bGF0ZWRUeXBlIHZhbHVlUGFyYW1zQ29tbWEgdmFsdWVQYXJhbXMpOwog
ICAgIERGR19WQVJJQURJQ19URU1QTEFURV9GVU5DVElPTihERkdfREVGSU5FX0FQUEVORF9OT0RF
KQogI3VuZGVmIERGR19ERUZJTkVfQVBQRU5EX05PREUKICAgICAKQEAgLTEyMSwxMSArMTIxLDEx
IEBAIHN0cnVjdCBCYXNpY0Jsb2NrIDogVmVjdG9yPE5vZGVJbmRleCwgOD4KICNlbmRpZgogICAg
IGJvb2wgaXNSZWFjaGFibGU7CiAgICAgCi0gICAgVmVjdG9yPE5vZGVJbmRleD4gcGhpczsKKyAg
ICBWZWN0b3I8Tm9kZSo+IHBoaXM7CiAgICAgUHJlZGVjZXNzb3JMaXN0IG1fcHJlZGVjZXNzb3Jz
OwogICAgIAotICAgIE9wZXJhbmRzPE5vZGVJbmRleCwgTm9kZUluZGV4VHJhaXRzPiB2YXJpYWJs
ZXNBdEhlYWQ7Ci0gICAgT3BlcmFuZHM8Tm9kZUluZGV4LCBOb2RlSW5kZXhUcmFpdHM+IHZhcmlh
Ymxlc0F0VGFpbDsKKyAgICBPcGVyYW5kczxOb2RlKiwgTm9kZVBvaW50ZXJUcmFpdHM+IHZhcmlh
Ymxlc0F0SGVhZDsKKyAgICBPcGVyYW5kczxOb2RlKiwgTm9kZVBvaW50ZXJUcmFpdHM+IHZhcmlh
Ymxlc0F0VGFpbDsKICAgICAKICAgICBPcGVyYW5kczxBYnN0cmFjdFZhbHVlPiB2YWx1ZXNBdEhl
YWQ7CiAgICAgT3BlcmFuZHM8QWJzdHJhY3RWYWx1ZT4gdmFsdWVzQXRUYWlsOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrSW5saW5lcy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9ja0lubGluZXMuaAkocmV2
aXNpb24gMTQwMzA2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2Nr
SW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw5ICszNCw5IEBACiBuYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIERGRyB7CiAKICNkZWZpbmUgREZHX0RFRklORV9BUFBFTkRfTk9ERSh0ZW1w
bGF0ZVByZSwgdGVtcGxhdGVQb3N0LCB0eXBlUGFyYW1zLCB2YWx1ZVBhcmFtc0NvbW1hLCB2YWx1
ZVBhcmFtcywgdmFsdWVBcmdzKSBcCi0gICAgdGVtcGxhdGVQcmUgdHlwZVBhcmFtcyB0ZW1wbGF0
ZVBvc3QgTm9kZUluZGV4IEJhc2ljQmxvY2s6OmFwcGVuZE5vZGUoR3JhcGgmIGdyYXBoLCBSZWZD
aGlsZHJlbk1vZGUgcmVmQ2hpbGRyZW5Nb2RlLCBSZWZOb2RlTW9kZSByZWZOb2RlTW9kZSwgU3Bl
Y3VsYXRlZFR5cGUgdHlwZSB2YWx1ZVBhcmFtc0NvbW1hIHZhbHVlUGFyYW1zKSBcCisgICAgdGVt
cGxhdGVQcmUgdHlwZVBhcmFtcyB0ZW1wbGF0ZVBvc3QgTm9kZSogQmFzaWNCbG9jazo6YXBwZW5k
Tm9kZShHcmFwaCYgZ3JhcGgsIFJlZkNoaWxkcmVuTW9kZSByZWZDaGlsZHJlbk1vZGUsIFJlZk5v
ZGVNb2RlIHJlZk5vZGVNb2RlLCBTcGVjdWxhdGVkVHlwZSB0eXBlIHZhbHVlUGFyYW1zQ29tbWEg
dmFsdWVQYXJhbXMpIFwKICAgICB7IFwKLSAgICAgICAgTm9kZUluZGV4IHJlc3VsdCA9IGdyYXBo
LmFkZE5vZGUocmVmQ2hpbGRyZW5Nb2RlLCByZWZOb2RlTW9kZSwgdHlwZSB2YWx1ZVBhcmFtc0Nv
bW1hIHZhbHVlQXJncyk7IFwKKyAgICAgICAgTm9kZSogcmVzdWx0ID0gZ3JhcGguYWRkTm9kZShy
ZWZDaGlsZHJlbk1vZGUsIHJlZk5vZGVNb2RlLCB0eXBlIHZhbHVlUGFyYW1zQ29tbWEgdmFsdWVB
cmdzKTsgXAogICAgICAgICBhcHBlbmQocmVzdWx0KTsgXAogICAgICAgICByZXR1cm4gcmVzdWx0
OyBcCiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBh
cnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRl
Q29kZVBhcnNlci5jcHAJKHJldmlzaW9uIDE0MDMwNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMjUwLDkgKzMy
NTAsNiBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwcm9jZXNzUGhpU3RhY2soKQogICAgICAgICBp
ZiAoIWVudHJ5Lm1fYmxvY2stPmlzUmVhY2hhYmxlKQogICAgICAgICAgICAgY29udGludWU7CiAg
ICAgICAgIAotICAgICAgICBpZiAoIWVudHJ5Lm1fYmxvY2stPmlzUmVhY2hhYmxlKQotICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgIAogICAgICAgICBQcmVkZWNlc3Nvckxpc3QmIHByZWRl
Y2Vzc29ycyA9IGVudHJ5Lm1fYmxvY2stPm1fcHJlZGVjZXNzb3JzOwogICAgICAgICB1bnNpZ25l
ZCB2YXJObyA9IGVudHJ5Lm1fdmFyTm87CiAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogZGF0
YUZvclBoaSA9IG1fZ3JhcGhbZW50cnkubV9waGldLnZhcmlhYmxlQWNjZXNzRGF0YSgpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDRkFQaGFzZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDRkFQaGFzZS5jcHAJKHJldmlzaW9uIDE0
MDMwNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ0ZBUGhhc2UuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTMg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC04OCwxMSArODgsMTEgQEAgcHJpdmF0ZToKICAgICAgICAgZGF0YUxvZ0YoIlxu
Iik7CiAjZW5kaWYKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGJsb2NrLT5zaXpl
KCk7ICsraSkgewotICAgICAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRleCA9IGJsb2NrLT5hdChp
KTsKLSAgICAgICAgICAgIGlmICghbV9ncmFwaFtub2RlSW5kZXhdLnNob3VsZEdlbmVyYXRlKCkp
CisgICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPmF0KGkpOworICAgICAgICAgICAgaWYg
KCFub2RlLT5zaG91bGRHZW5lcmF0ZSgpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogI2lm
IERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKLSAgICAgICAgICAgIGRhdGFM
b2dGKCIgICAgICAlcyBAJXU6ICIsIEdyYXBoOjpvcE5hbWUobV9ncmFwaFtub2RlSW5kZXhdLm9w
KCkpLCBub2RlSW5kZXgpOworICAgICAgICAgICAgZGF0YUxvZ0YoIiAgICAgICVzIEAldTogIiwg
R3JhcGg6Om9wTmFtZShtX2dyYXBoW25vZGVJbmRleF0ub3AoKSksIG5vZGUtPmluZGV4KCkpOwog
ICAgICAgICAgICAgbV9zdGF0ZS5kdW1wKFdURjo6ZGF0YUZpbGUoKSk7CiAgICAgICAgICAgICBk
YXRhTG9nRigiXG4iKTsKICNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdDRkdTaW1wbGlmaWNhdGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0NGR1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAxNDAz
MDYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NGR1NpbXBsaWZpY2F0aW9uUGhh
c2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTIsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC02MCw3ICs2MCw3IEBAIHB1YmxpYzoKICAgICAgICAgICAg
ICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgQVNTRVJUKGJsb2NrLT5pc1JlYWNo
YWJsZSk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKG1fZ3JhcGhbYmxv
Y2stPmxhc3QoKV0ub3AoKSkgeworICAgICAgICAgICAgICAgIHN3aXRjaCAoYmxvY2stPmxhc3Qo
KS0+b3AoKSkgewogICAgICAgICAgICAgICAgIGNhc2UgSnVtcDogewogICAgICAgICAgICAgICAg
ICAgICAvLyBTdWNjZXNzb3Igd2l0aCBvbmUgcHJlZGVjZXNzb3IgLT4gbWVyZ2UuCiAgICAgICAg
ICAgICAgICAgICAgIGlmIChtX2dyYXBoLm1fYmxvY2tzW21fZ3JhcGguc3VjY2Vzc29yKGJsb2Nr
LCAwKV0tPm1fcHJlZGVjZXNzb3JzLnNpemUoKSA9PSAxKSB7CkBAIC0xMjksMTAgKzEyOSwxMCBA
QCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQmxvY2tJbmRleCB0YWtlbkJs
b2NrSW5kZXggPSBtX2dyYXBoLnN1Y2Nlc3NvckZvckNvbmRpdGlvbihibG9jaywgY29uZGl0aW9u
KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCbG9ja0luZGV4IG5vdFRha2VuQmxvY2tJ
bmRleCA9IG1fZ3JhcGguc3VjY2Vzc29yRm9yQ29uZGl0aW9uKGJsb2NrLCAhY29uZGl0aW9uKTsK
ICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFT
U0VSVChtX2dyYXBoW2Jsb2NrLT5sYXN0KCldLmlzVGVybWluYWwoKSk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgQ29kZU9yaWdpbiBib3VuZGFyeUNvZGVPcmlnaW4gPSBtX2dyYXBoW2Js
b2NrLT5sYXN0KCldLmNvZGVPcmlnaW47Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9n
cmFwaFtibG9jay0+bGFzdCgpXS5zZXRPcEFuZERlZmF1bHRGbGFncyhQaGFudG9tKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQobV9ncmFwaFtibG9jay0+bGFzdCgpXS5yZWZD
b3VudCgpID09IDEpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChibG9jay0+
bGFzdCgpLT5pc1Rlcm1pbmFsKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvZGVP
cmlnaW4gYm91bmRhcnlDb2RlT3JpZ2luID0gYmxvY2stPmxhc3QoKS0+Y29kZU9yaWdpbjsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBibG9jay0+bGFzdCgpLT5zZXRPcEFuZERlZmF1bHRG
bGFncyhQaGFudG9tKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQoYmxvY2st
Pmxhc3QoKS0+cmVmQ291bnQoKSA9PSAxKTsKICAgICAgICAgICAgICAgICAgICAgICAgIAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGpldHRpc29uQmxvY2soYmxvY2tJbmRleCwgbm90VGFr
ZW5CbG9ja0luZGV4LCBib3VuZGFyeUNvZGVPcmlnaW4pOwogICAgICAgICAgICAgICAgICAgICAg
ICAgCkBAIC0xNjAsMTIgKzE2MCwxMSBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZGF0YUxvZ0YoIkNGR1NpbXBsaWZ5OiBCcmFuY2gtPmp1bXAgY29udmVyc2lvbiB0byBz
YW1lIHN1Y2Nlc3NvciBvbiBCbG9jayAjJXUgdG8gQmxvY2sgIyV1LlxuIiwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrSW5kZXgsIHRhcmdldEJsb2NrSW5kZXgpOwog
I2VuZGlmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKG1fZ3JhcGhbYmxvY2st
Pmxhc3QoKV0uaXNUZXJtaW5hbCgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb2Rl
JiBicmFuY2ggPSBtX2dyYXBoW2Jsb2NrLT5sYXN0KCldOwotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEFTU0VSVChicmFuY2guaXNUZXJtaW5hbCgpKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBBU1NFUlQoYnJhbmNoLm9wKCkgPT0gQnJhbmNoKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBicmFuY2guc2V0T3BBbmREZWZhdWx0RmxhZ3MoUGhhbnRvbSk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGJyYW5jaC5yZWZDb3VudCgpID09IDEpOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIE5vZGUqIGJyYW5jaCA9IGJsb2NrLT5sYXN0KCk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGJyYW5jaC0+aXNUZXJtaW5hbCgpKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQoYnJhbmNoLT5vcCgpID09IEJyYW5j
aCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJhbmNoLT5zZXRPcEFuZERlZmF1bHRG
bGFncyhQaGFudG9tKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQoYnJhbmNo
LT5yZWZDb3VudCgpID09IDEpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGJsb2NrLT5hcHBlbmROb2RlKAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBtX2dyYXBoLCBEb250UmVmQ2hpbGRyZW4sIERvbnRSZWZOb2RlLCBT
cGVjTm9uZSwgSnVtcCwKQEAgLTI2MCw0NSArMjU5LDQzIEBAIHByaXZhdGU6CiAgICAgCiAgICAg
dm9pZCBrZWVwT3BlcmFuZEFsaXZlKEJhc2ljQmxvY2sqIGJsb2NrLCBDb2RlT3JpZ2luIGNvZGVP
cmlnaW4sIGludCBvcGVyYW5kKQogICAgIHsKLSAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRleCA9
IGJsb2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZChvcGVyYW5kKTsKLSAgICAgICAgaWYgKG5v
ZGVJbmRleCA9PSBOb05vZGUpCisgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+dmFyaWFibGVz
QXRUYWlsLm9wZXJhbmQob3BlcmFuZCk7CisgICAgICAgIGlmICghbm9kZSkKICAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgaWYgKG1fZ3JhcGhbbm9kZUluZGV4XS52YXJpYWJsZUFjY2Vzc0Rh
dGEoKS0+aXNDYXB0dXJlZCgpKQorICAgICAgICBpZiAobm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRh
KCktPmlzQ2FwdHVyZWQoKSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgaWYgKG1fZ3Jh
cGhbbm9kZUluZGV4XS5vcCgpID09IFNldExvY2FsKQotICAgICAgICAgICAgbm9kZUluZGV4ID0g
bV9ncmFwaFtub2RlSW5kZXhdLmNoaWxkMSgpLmluZGV4KCk7Ci0gICAgICAgIE5vZGUmIG5vZGUg
PSBtX2dyYXBoW25vZGVJbmRleF07Ci0gICAgICAgIGlmICghbm9kZS5zaG91bGRHZW5lcmF0ZSgp
KQorICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBTZXRMb2NhbCkKKyAgICAgICAgICAgIG5vZGUg
PSBub2RlLT5jaGlsZDEoKS5ub2RlKCk7CisgICAgICAgIGlmICghbm9kZS0+c2hvdWxkR2VuZXJh
dGUoKSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgQVNTRVJUKG1fZ3JhcGhbbm9kZUlu
ZGV4XS5vcCgpICE9IFNldExvY2FsKTsKKyAgICAgICAgQVNTRVJUKG5vZGUtPm9wKCkgIT0gU2V0
TG9jYWwpOwogICAgICAgICBibG9jay0+YXBwZW5kTm9kZSgKLSAgICAgICAgICAgIG1fZ3JhcGgs
IFJlZkNoaWxkcmVuLCBEb250UmVmTm9kZSwgU3BlY05vbmUsIFBoYW50b20sIGNvZGVPcmlnaW4s
IG5vZGVJbmRleCk7CisgICAgICAgICAgICBtX2dyYXBoLCBSZWZDaGlsZHJlbiwgRG9udFJlZk5v
ZGUsIFNwZWNOb25lLCBQaGFudG9tLCBjb2RlT3JpZ2luLCBub2RlKTsKICAgICB9CiAgICAgCiAg
ICAgdm9pZCBmaXhQb3NzaWJsZUdldExvY2FsKEJhc2ljQmxvY2sqIGJsb2NrLCBFZGdlJiBlZGdl
LCBib29sIGNoYW5nZVJlZikKICAgICB7Ci0gICAgICAgIE5vZGUmIGNoaWxkID0gbV9ncmFwaFtl
ZGdlXTsKLSAgICAgICAgaWYgKGNoaWxkLm9wKCkgIT0gR2V0TG9jYWwpCisgICAgICAgIE5vZGUq
IGNoaWxkID0gZWRnZS5ub2RlKCk7CisgICAgICAgIGlmIChjaGlsZC0+b3AoKSAhPSBHZXRMb2Nh
bCkKICAgICAgICAgICAgIHJldHVybjsKICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9O
X1ZFUkJPU0UpCi0gICAgICAgIGRhdGFMb2dGKCIgICAgQ29uc2lkZXJpbmcgR2V0TG9jYWwgYXQg
QCV1LCBsb2NhbCByJWQuXG4iLCBlZGdlLmluZGV4KCksIGNoaWxkLmxvY2FsKCkpOworICAgICAg
ICBkYXRhTG9nRigiICAgIENvbnNpZGVyaW5nIEdldExvY2FsIGF0IEAldSwgbG9jYWwgciVkLlxu
Iiwgbm9kZS0+aW5kZXgoKSwgY2hpbGQtPmxvY2FsKCkpOwogI2VuZGlmCi0gICAgICAgIGlmIChj
aGlsZC52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+aXNDYXB0dXJlZCgpKSB7CisgICAgICAgIGlmIChj
aGlsZC0+dmFyaWFibGVBY2Nlc3NEYXRhKCktPmlzQ2FwdHVyZWQoKSkgewogI2lmIERGR19FTkFC
TEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKICAgICAgICAgICAgIGRhdGFMb2dGKCIgICAg
ICAgIEl0J3MgY2FwdHVyZWQuXG4iKTsKICNlbmRpZgogICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICB9Ci0gICAgICAgIE5vZGVJbmRleCBvcmlnaW5hbE5vZGVJbmRleCA9IGJsb2NrLT52YXJp
YWJsZXNBdFRhaWwub3BlcmFuZChjaGlsZC5sb2NhbCgpKTsKKyAgICAgICAgTm9kZSogb3JpZ2lu
YWxOb2RlID0gYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKGNoaWxkLT5sb2NhbCgpKTsK
ICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCi0gICAgICAgIGRhdGFM
b2dGKCIgICAgICAgIERlYWxpbmcgd2l0aCBvcmlnaW5hbCBAJXUuXG4iLCBvcmlnaW5hbE5vZGVJ
bmRleCk7CisgICAgICAgIGRhdGFMb2dGKCIgICAgICAgIERlYWxpbmcgd2l0aCBvcmlnaW5hbCBA
JXUuXG4iLCBvcmlnaW5hbE5vZGUtPmluZGV4KCkpOwogI2VuZGlmCi0gICAgICAgIEFTU0VSVChv
cmlnaW5hbE5vZGVJbmRleCAhPSBOb05vZGUpOwotICAgICAgICBOb2RlKiBvcmlnaW5hbE5vZGUg
PSAmbV9ncmFwaFtvcmlnaW5hbE5vZGVJbmRleF07CisgICAgICAgIEFTU0VSVChvcmlnaW5hbE5v
ZGVJbmRleCk7CiAjaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQogICAg
ICAgICBkYXRhTG9nRigiICAgICAgICBPcmlnaW5hbCBoYXMgbG9jYWwgciVkLlxuIiwgb3JpZ2lu
YWxOb2RlLT5sb2NhbCgpKTsKICNlbmRpZgotICAgICAgICBBU1NFUlQoY2hpbGQubG9jYWwoKSA9
PSBvcmlnaW5hbE5vZGUtPmxvY2FsKCkpOworICAgICAgICBBU1NFUlQoY2hpbGQtPmxvY2FsKCkg
PT0gb3JpZ2luYWxOb2RlLT5sb2NhbCgpKTsKICAgICAgICAgLy8gUG9zc2liaWxpdGllczoKICAg
ICAgICAgLy8gU2V0TG9jYWwgLT4gdGhlIHNlY29uZEJsb2NrIGlzIGdldHRpbmcgdGhlIHZhbHVl
IG9mIHNvbWV0aGluZyB0aGF0IGlzIGltbWVkaWF0ZWx5CiAgICAgICAgIC8vICAgICBhdmFpbGFi
bGUgaW4gdGhlIGZpcnN0IGJsb2NrIHdpdGggYSBrbm93biBOb2RlSW5kZXguCkBAIC0zMTIsMTAg
KzMwOSw4IEBAIHByaXZhdGU6CiAgICAgICAgIC8vIEZsdXNoIC0+IHRoZSBzZWNvbmRCbG9jayBp
cyBhc2tpbmcgZm9yIGtlZXAtYWxpdmUgb24gYW4gb3BlcmFuZCB0aGF0IHRoZSBmaXJzdAogICAg
ICAgICAvLyAgICAgYmxvY2sgd2FzIGZvcmNpbmcgdG8gYmUgYWxpdmUsIHNvIHRoZSBzZWNvbmQg
YmxvY2sgc2hvdWxkIHJlZmVyIGNoaWxkIG9mCiAgICAgICAgIC8vICAgICB0aGUgZmx1c2guCi0g
ICAgICAgIGlmIChvcmlnaW5hbE5vZGUtPm9wKCkgPT0gRmx1c2gpIHsKLSAgICAgICAgICAgIG9y
aWdpbmFsTm9kZUluZGV4ID0gb3JpZ2luYWxOb2RlLT5jaGlsZDEoKS5pbmRleCgpOwotICAgICAg
ICAgICAgb3JpZ2luYWxOb2RlID0gJm1fZ3JhcGhbb3JpZ2luYWxOb2RlSW5kZXhdOwotICAgICAg
ICB9CisgICAgICAgIGlmIChvcmlnaW5hbE5vZGUtPm9wKCkgPT0gRmx1c2gpCisgICAgICAgICAg
ICBvcmlnaW5hbE5vZGUgPSBvcmlnaW5hbE5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKICAgICAgICAg
c3dpdGNoIChvcmlnaW5hbE5vZGUtPm9wKCkpIHsKICAgICAgICAgY2FzZSBTZXRMb2NhbDogewog
ICAgICAgICAgICAgaWYgKGNoYW5nZVJlZikKQEAgLTMyMyw3ICszMTgsNyBAQCBwcml2YXRlOgog
I2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKICAgICAgICAgICAgIGRh
dGFMb2dGKCIgICAgICAgIEl0J3MgYSBTZXRMb2NhbC5cbiIpOwogI2VuZGlmCi0gICAgICAgICAg
ICBtX2dyYXBoLmNoYW5nZUluZGV4KGVkZ2UsIG9yaWdpbmFsTm9kZS0+Y2hpbGQxKCkuaW5kZXgo
KSwgY2hhbmdlUmVmKTsKKyAgICAgICAgICAgIG1fZ3JhcGguY2hhbmdlQ2hpbGQoZWRnZSwgb3Jp
Z2luYWxOb2RlLT5jaGlsZDEoKS5ub2RlKCksIGNoYW5nZVJlZik7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgfQogICAgICAgICBjYXNlIEdldExvY2FsOiB7CkBAIC0zMzEsNyArMzI2LDcg
QEAgcHJpdmF0ZToKICAgICAgICAgICAgIGRhdGFMb2dGKCIgICAgICAgIEl0J3MgYSBHZXRMb2Nh
bC5cbiIpOwogI2VuZGlmCiAgICAgICAgICAgICBpZiAob3JpZ2luYWxOb2RlLT5zaG91bGRHZW5l
cmF0ZSgpKQotICAgICAgICAgICAgICAgIG1fZ3JhcGguY2hhbmdlSW5kZXgoZWRnZSwgb3JpZ2lu
YWxOb2RlSW5kZXgsIGNoYW5nZVJlZik7CisgICAgICAgICAgICAgICAgbV9ncmFwaC5jaGFuZ2VD
aGlsZChlZGdlLCBvcmlnaW5hbE5vZGUsIGNoYW5nZVJlZik7CiAgICAgICAgICAgICAvLyBJZiB3
ZSBoYXZlIGEgR2V0TG9jYWwgdGhhdCBwb2ludHMgdG8gYSBjaGlsZCBHZXRMb2NhbCB0aGF0IGlz
IGRlYWQsIHRoZW4KICAgICAgICAgICAgIC8vIHdlIGhhdmUgbm8gbmVlZCB0byBkbyBhbnl0aGlu
ZzogdGhpcyBvcmlnaW5hbCBHZXRMb2NhbCBpcyBzdGlsbCB2YWxpZC4KICAgICAgICAgICAgIGJy
ZWFrOwpAQCAtMzc1LDIzICszNzAsMjEgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgfQogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGRlc3RpbmF0aW9uQmxv
Y2stPnBoaXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIE5vZGVJbmRleCBwaGlOb2RlSW5k
ZXggPSBkZXN0aW5hdGlvbkJsb2NrLT5waGlzW2ldOwotICAgICAgICAgICAgTm9kZSYgcGhpTm9k
ZSA9IG1fZ3JhcGhbcGhpTm9kZUluZGV4XTsKLSAgICAgICAgICAgIE5vZGVJbmRleCBteU5vZGVJ
bmRleCA9IHNvdXJjZUJsb2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZChwaGlOb2RlLmxvY2Fs
KCkpOwotI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKLSAgICAgICAg
ICAgIGRhdGFMb2dGKCJDb25zaWRlcmluZyByZW1vdmluZyByZWZlcmVuY2UgZnJvbSBwaGkgQCV1
IHRvIEAldSBvbiBsb2NhbCByJWQ6IiwKLSAgICAgICAgICAgICAgICAgICAgcGhpTm9kZUluZGV4
LCBteU5vZGVJbmRleCwgcGhpTm9kZS5sb2NhbCgpKTsKLSNlbmRpZgotICAgICAgICAgICAgaWYg
KG15Tm9kZUluZGV4ID09IE5vTm9kZSkgeworICAgICAgICAgICAgTm9kZSogcGhpTm9kZSA9IGRl
c3RpbmF0aW9uQmxvY2stPnBoaXNbaV07CisgICAgICAgICAgICBOb2RlKiBteU5vZGUgPSBzb3Vy
Y2VCbG9jay0+dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQocGhpTm9kZS0+bG9jYWwoKSk7CisgICAg
ICAgICAgICBpZiAoIW15Tm9kZSkgewogICAgICAgICAgICAgICAgIC8vIFRoaXMgd2lsbCBoYXBw
ZW4gaWYgdGhlcmUgaXMgYSBwaGkgaW4gdGhlIGRlc3RpbmF0aW9uIHRoYXQgcmVmZXJzIGludG8K
ICAgICAgICAgICAgICAgICAvLyB0aGUgZGVzdGluYXRpb24gaXRzZWxmLgogICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgTm9kZSYgbXlOb2RlID0g
bV9ncmFwaFtteU5vZGVJbmRleF07Ci0gICAgICAgICAgICBpZiAobXlOb2RlLm9wKCkgPT0gR2V0
TG9jYWwpCi0gICAgICAgICAgICAgICAgbXlOb2RlSW5kZXggPSBteU5vZGUuY2hpbGQxKCkuaW5k
ZXgoKTsKKyNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCisgICAgICAg
ICAgICBkYXRhTG9nRigiQ29uc2lkZXJpbmcgcmVtb3ZpbmcgcmVmZXJlbmNlIGZyb20gcGhpIEAl
dSB0byBAJXUgb24gbG9jYWwgciVkOiIsCisgICAgICAgICAgICAgICAgICAgICBwaGlOb2RlLT5p
bmRleCgpLCBteU5vZGUtPmluZGV4KCksIHBoaU5vZGUtPmxvY2FsKCkpOworI2VuZGlmCisgICAg
ICAgICAgICBpZiAobXlOb2RlLT5vcCgpID09IEdldExvY2FsKQorICAgICAgICAgICAgICAgIG15
Tm9kZSA9IG15Tm9kZS0+Y2hpbGQxKCkubm9kZSgpOwogICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBqID0gMDsgaiA8IEFkamFjZW5jeUxpc3Q6OlNpemU7ICsraikKLSAgICAgICAgICAgICAgICBy
ZW1vdmVQb3RlbnRpYWxseURlYWRQaGlSZWZlcmVuY2UobXlOb2RlSW5kZXgsIHBoaU5vZGUsIGos
IHNvdXJjZUJsb2NrLT5pc1JlYWNoYWJsZSk7CisgICAgICAgICAgICAgICAgcmVtb3ZlUG90ZW50
aWFsbHlEZWFkUGhpUmVmZXJlbmNlKG15Tm9kZSwgcGhpTm9kZSwgaiwgc291cmNlQmxvY2stPmlz
UmVhY2hhYmxlKTsKICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCiAg
ICAgICAgICAgICBkYXRhTG9nRigiXG4iKTsKICNlbmRpZgpAQCAtNDE2LDU4ICs0MDksNTcgQEAg
cHJpdmF0ZToKICAgICAgICAgZml4UGhpcyhibG9ja0luZGV4LCBqZXR0aXNvbmVkQmxvY2tJbmRl
eCk7CiAgICAgfQogICAgIAotICAgIHZvaWQgcmVtb3ZlUG90ZW50aWFsbHlEZWFkUGhpUmVmZXJl
bmNlKE5vZGVJbmRleCBteU5vZGVJbmRleCwgTm9kZSYgcGhpTm9kZSwgdW5zaWduZWQgZWRnZUlu
ZGV4LCBib29sIGNoYW5nZVJlZikKKyAgICB2b2lkIHJlbW92ZVBvdGVudGlhbGx5RGVhZFBoaVJl
ZmVyZW5jZShOb2RlKiBteU5vZGUsIE5vZGUqIHBoaU5vZGUsIHVuc2lnbmVkIGVkZ2VJbmRleCwg
Ym9vbCBjaGFuZ2VSZWYpCiAgICAgewotICAgICAgICBpZiAocGhpTm9kZS5jaGlsZHJlbi5jaGls
ZChlZGdlSW5kZXgpLmluZGV4VW5jaGVja2VkKCkgIT0gbXlOb2RlSW5kZXgpCisgICAgICAgIGlm
IChwaGlOb2RlLT5jaGlsZHJlbi5jaGlsZChlZGdlSW5kZXgpLm5vZGUoKSAhPSBteU5vZGUpCiAg
ICAgICAgICAgICByZXR1cm47CiAjaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJC
T1NFKQogICAgICAgICBkYXRhTG9nRigiIFJlbW92aW5nIHJlZmVyZW5jZSBhdCBjaGlsZCAldS4i
LCBlZGdlSW5kZXgpOwogI2VuZGlmCi0gICAgICAgIGlmIChjaGFuZ2VSZWYgJiYgcGhpTm9kZS5z
aG91bGRHZW5lcmF0ZSgpKQotICAgICAgICAgICAgbV9ncmFwaC5kZXJlZihteU5vZGVJbmRleCk7
Ci0gICAgICAgIHBoaU5vZGUuY2hpbGRyZW4ucmVtb3ZlRWRnZUZyb21CYWcoZWRnZUluZGV4KTsK
KyAgICAgICAgaWYgKGNoYW5nZVJlZiAmJiBwaGlOb2RlLT5zaG91bGRHZW5lcmF0ZSgpKQorICAg
ICAgICAgICAgbV9ncmFwaC5kZXJlZihteU5vZGUpOworICAgICAgICBwaGlOb2RlLT5jaGlsZHJl
bi5yZW1vdmVFZGdlRnJvbUJhZyhlZGdlSW5kZXgpOwogICAgIH0KICAgICAKICAgICBzdHJ1Y3Qg
T3BlcmFuZFN1YnN0aXR1dGlvbiB7CiAgICAgICAgIE9wZXJhbmRTdWJzdGl0dXRpb24oKQotICAg
ICAgICAgICAgOiBvbGRDaGlsZChOb05vZGUpCi0gICAgICAgICAgICAsIG5ld0NoaWxkKE5vTm9k
ZSkKKyAgICAgICAgICAgIDogb2xkQ2hpbGQoMCkKKyAgICAgICAgICAgICwgbmV3Q2hpbGQoMCkK
ICAgICAgICAgewogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBleHBsaWNpdCBPcGVyYW5k
U3Vic3RpdHV0aW9uKE5vZGVJbmRleCBvbGRDaGlsZCkKKyAgICAgICAgZXhwbGljaXQgT3BlcmFu
ZFN1YnN0aXR1dGlvbihOb2RlKiBvbGRDaGlsZCkKICAgICAgICAgICAgIDogb2xkQ2hpbGQob2xk
Q2hpbGQpCiAgICAgICAgICAgICAsIG5ld0NoaWxkKG9sZENoaWxkKQogICAgICAgICB7CiAgICAg
ICAgIH0KICAgICAgICAgCi0gICAgICAgIE9wZXJhbmRTdWJzdGl0dXRpb24oTm9kZUluZGV4IG9s
ZENoaWxkLCBOb2RlSW5kZXggbmV3Q2hpbGQpCisgICAgICAgIE9wZXJhbmRTdWJzdGl0dXRpb24o
Tm9kZSogb2xkQ2hpbGQsIE5vZGUqIG5ld0NoaWxkKQogICAgICAgICAgICAgOiBvbGRDaGlsZChv
bGRDaGlsZCkKICAgICAgICAgICAgICwgbmV3Q2hpbGQobmV3Q2hpbGQpCiAgICAgICAgIHsKLSAg
ICAgICAgICAgIEFTU0VSVCgob2xkQ2hpbGQgPT0gTm9Ob2RlKSA9PSAobmV3Q2hpbGQgPT0gTm9O
b2RlKSk7CisgICAgICAgICAgICBBU1NFUlQoKCFvbGRDaGlsZCkgPT0gKCFuZXdDaGlsZCkpOwog
ICAgICAgICB9CiAgICAgICAgIAotICAgICAgICB2b2lkIGR1bXAoRklMRSogb3V0KQorICAgICAg
ICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKICAgICAgICAgewotICAgICAgICAg
ICAgaWYgKG9sZENoaWxkID09IE5vTm9kZSkKLSAgICAgICAgICAgICAgICBmcHJpbnRmKG91dCwg
Ii0iKTsKKyAgICAgICAgICAgIGlmICghb2xkQ2hpbGQpCisgICAgICAgICAgICAgICAgb3V0LnBy
aW50ZihvdXQsICItIik7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZnByaW50
ZihvdXQsICJAJXUgLT4gQCV1Iiwgb2xkQ2hpbGQsIG5ld0NoaWxkKTsKKyAgICAgICAgICAgICAg
ICBvdXQucHJpbnRmKG91dCwgIkAldSAtPiBAJXUiLCBvbGRDaGlsZC0+aW5kZXgoKSwgbmV3Q2hp
bGQtPmluZGV4KCkpOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBOb2RlSW5kZXggb2xk
Q2hpbGQ7Ci0gICAgICAgIE5vZGVJbmRleCBuZXdDaGlsZDsKKyAgICAgICAgTm9kZSogb2xkQ2hp
bGQ7CisgICAgICAgIE5vZGUqIG5ld0NoaWxkOwogICAgIH07CiAgICAgCi0gICAgTm9kZUluZGV4
IHNraXBHZXRMb2NhbChOb2RlSW5kZXggbm9kZUluZGV4KQorICAgIE5vZGUqIHNraXBHZXRMb2Nh
bChOb2RlKiBub2RlKQogICAgIHsKLSAgICAgICAgaWYgKG5vZGVJbmRleCA9PSBOb05vZGUpCi0g
ICAgICAgICAgICByZXR1cm4gTm9Ob2RlOwotICAgICAgICBOb2RlJiBub2RlID0gbV9ncmFwaFtu
b2RlSW5kZXhdOwotICAgICAgICBpZiAobm9kZS5vcCgpID09IEdldExvY2FsKQotICAgICAgICAg
ICAgcmV0dXJuIG5vZGUuY2hpbGQxKCkuaW5kZXgoKTsKLSAgICAgICAgcmV0dXJuIG5vZGVJbmRl
eDsKKyAgICAgICAgaWYgKCFub2RlKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIGlm
IChub2RlLT5vcCgpID09IEdldExvY2FsKQorICAgICAgICAgICAgcmV0dXJuIG5vZGUtPmNoaWxk
MSgpLm5vZGUoKTsKKyAgICAgICAgcmV0dXJuIG5vZGU7CiAgICAgfQogICAgIAogICAgIHZvaWQg
cmVjb3JkUG9zc2libGVJbmNvbWluZ1JlZmVyZW5jZSgKQEAgLTQ3NywzMCArNDY5LDI4IEBAIHBy
aXZhdGU6CiAgICAgICAgICAgICBza2lwR2V0TG9jYWwoc2Vjb25kQmxvY2stPnZhcmlhYmxlc0F0
VGFpbC5vcGVyYW5kKG9wZXJhbmQpKSk7CiAgICAgfQogICAgIAotICAgIHZvaWQgcmVjb3JkTmV3
VGFyZ2V0KE9wZXJhbmRzPE9wZXJhbmRTdWJzdGl0dXRpb24+JiBzdWJzdGl0dXRpb25zLCBpbnQg
b3BlcmFuZCwgTm9kZUluZGV4IG5vZGVJbmRleCkKKyAgICB2b2lkIHJlY29yZE5ld1RhcmdldChP
cGVyYW5kczxPcGVyYW5kU3Vic3RpdHV0aW9uPiYgc3Vic3RpdHV0aW9ucywgaW50IG9wZXJhbmQs
IE5vZGVJbmRleCBOb2RlKiBub2RlKQogICAgIHsKLSAgICAgICAgQVNTRVJUKG1fZ3JhcGhbbm9k
ZUluZGV4XS5vcCgpID09IFNldExvY2FsCi0gICAgICAgICAgICAgICB8fCBtX2dyYXBoW25vZGVJ
bmRleF0ub3AoKSA9PSBTZXRBcmd1bWVudAotICAgICAgICAgICAgICAgfHwgbV9ncmFwaFtub2Rl
SW5kZXhdLm9wKCkgPT0gRmx1c2gKLSAgICAgICAgICAgICAgIHx8IG1fZ3JhcGhbbm9kZUluZGV4
XS5vcCgpID09IFBoaSk7Ci0gICAgICAgIHN1YnN0aXR1dGlvbnMub3BlcmFuZChvcGVyYW5kKS5u
ZXdDaGlsZCA9IG5vZGVJbmRleDsKKyAgICAgICAgQVNTRVJUKG5vZGUtPm9wKCkgPT0gU2V0TG9j
YWwKKyAgICAgICAgICAgICAgIHx8IG5vZGUtPm9wKCkgPT0gU2V0QXJndW1lbnQKKyAgICAgICAg
ICAgICAgIHx8IG5vZGUtPm9wKCkgPT0gRmx1c2gKKyAgICAgICAgICAgICAgIHx8IG5vZGUtPm9w
KCkgPT0gUGhpKTsKKyAgICAgICAgc3Vic3RpdHV0aW9ucy5vcGVyYW5kKG9wZXJhbmQpLm5ld0No
aWxkID0gbm9kZTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBmaXhUYWlsT3BlcmFuZCgKICAgICAg
ICAgQmFzaWNCbG9jayogZmlyc3RCbG9jaywgQmFzaWNCbG9jayogc2Vjb25kQmxvY2ssIGludCBv
cGVyYW5kLAogICAgICAgICBPcGVyYW5kczxPcGVyYW5kU3Vic3RpdHV0aW9uPiYgc3Vic3RpdHV0
aW9ucykKICAgICB7Ci0gICAgICAgIE5vZGVJbmRleCBhdFNlY29uZFRhaWwgPSBzZWNvbmRCbG9j
ay0+dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQob3BlcmFuZCk7CisgICAgICAgIE5vZGUqIGF0U2Vj
b25kVGFpbCA9IHNlY29uZEJsb2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZChvcGVyYW5kKTsK
ICAgICAgICAgCi0gICAgICAgIGlmIChhdFNlY29uZFRhaWwgPT0gTm9Ob2RlKSB7CisgICAgICAg
IGlmICghYXRTZWNvbmRUYWlsKSB7CiAgICAgICAgICAgICAvLyBJZiB0aGUgdmFyaWFibGUgaXMg
ZGVhZCBhdCB0aGUgZW5kIG9mIHRoZSBzZWNvbmQgYmxvY2ssIHRoZW4gZG8gbm90aGluZzsgZXNz
ZW50aWFsbHkKICAgICAgICAgICAgIC8vIHRoaXMgbWVhbnMgdGhhdCB3ZSB3YW50IHRoZSB0YWls
IHN0YXRlIHRvIHJlZmxlY3Qgd2hhdGV2ZXIgdGhlIGZpcnN0IGJsb2NrIGRpZC4KICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgfQogCi0gICAgICAgIE5vZGUmIHNlY29uZE5vZGUgPSBtX2dy
YXBoW2F0U2Vjb25kVGFpbF07Ci0gICAgICAgIAotICAgICAgICBzd2l0Y2ggKHNlY29uZE5vZGUu
b3AoKSkgeworICAgICAgICBzd2l0Y2ggKGF0U2Vjb25kVGFpbC0+b3AoKSkgewogICAgICAgICBj
YXNlIFNldExvY2FsOgogICAgICAgICBjYXNlIEZsdXNoOiB7CiAgICAgICAgICAgICAvLyBUaGUg
c2Vjb25kIGJsb2NrIGRpZCBpbnRlcmVzdGluZyB0aGluZ3MgdG8gdGhlIHZhcmlhYmxlcywgc28g
dXBkYXRlIHRoZSB0YWlsCkBAIC01MTEsNyArNTAxLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAg
IAogICAgICAgICBjYXNlIFBoaTogewogICAgICAgICAgICAgLy8gS2VlcCB3aGF0IHdhcyBpbiB0
aGUgZmlyc3QgYmxvY2suCi0gICAgICAgICAgICBBU1NFUlQoZmlyc3RCbG9jay0+dmFyaWFibGVz
QXRUYWlsLm9wZXJhbmQob3BlcmFuZCkgIT0gTm9Ob2RlKTsKKyAgICAgICAgICAgIEFTU0VSVChm
aXJzdEJsb2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZChvcGVyYW5kKSk7CiAgICAgICAgICAg
ICByZWNvcmROZXdUYXJnZXQoc3Vic3RpdHV0aW9ucywgb3BlcmFuZCwgc2tpcEdldExvY2FsKGZp
cnN0QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKG9wZXJhbmQpKSk7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgfQpAQCAtNTIwLDI4ICs1MTAsMjggQEAgcHJpdmF0ZToKICAgICAg
ICAgICAgIC8vIElmIGl0J3MgYSBHZXRMb2NhbCBvbiBhIGNhcHR1cmVkIHZhciwgdGhlbiBkZWZp
bml0ZWx5IGtlZXAgd2hhdCB3YXMKICAgICAgICAgICAgIC8vIGluIHRoZSBzZWNvbmQgYmxvY2su
IEluIHBhcnRpY3VsYXIsIGl0J3MgcG9zc2libGUgdGhhdCB0aGUgZmlyc3QKICAgICAgICAgICAg
IC8vIGJsb2NrIGRvZXNuJ3QgZXZlbiBrbm93IGFib3V0IHRoaXMgdmFyaWFibGUuCi0gICAgICAg
ICAgICBpZiAoc2Vjb25kTm9kZS52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+aXNDYXB0dXJlZCgpKSB7
CisgICAgICAgICAgICBpZiAoYXRTZWNvbmRUYWlsLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+aXND
YXB0dXJlZCgpKSB7CiAgICAgICAgICAgICAgICAgZmlyc3RCbG9jay0+dmFyaWFibGVzQXRUYWls
Lm9wZXJhbmQob3BlcmFuZCkgPSBhdFNlY29uZFRhaWw7Ci0gICAgICAgICAgICAgICAgcmVjb3Jk
TmV3VGFyZ2V0KHN1YnN0aXR1dGlvbnMsIG9wZXJhbmQsIHNlY29uZE5vZGUuY2hpbGQxKCkuaW5k
ZXgoKSk7CisgICAgICAgICAgICAgICAgcmVjb3JkTmV3VGFyZ2V0KHN1YnN0aXR1dGlvbnMsIG9w
ZXJhbmQsIGF0U2Vjb25kVGFpbC0+Y2hpbGQxKCkuaW5kZXgoKSk7CiAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgICAgIC8vIEl0J3Mg
cG9zc2libGUgdGhhdCB0aGUgc2Vjb25kIGJsb2NrIGhhZCBhIEdldExvY2FsIGFuZCB0aGUgZmly
c3QgYmxvY2sKICAgICAgICAgICAgIC8vIGhhZCBhIFNldEFyZ3VtZW50IG9yIGEgUGhpLiBUaGVu
IHVwZGF0ZSB0aGUgdGFpbC4gT3RoZXJ3aXNlIGtlZXAgd2hhdCB3YXMgaW4gdGhlCiAgICAgICAg
ICAgICAvLyBmaXJzdCBibG9jay4KLSAgICAgICAgICAgIE5vZGVJbmRleCBhdEZpcnN0VGFpbCA9
IGZpcnN0QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKG9wZXJhbmQpOwotICAgICAgICAg
ICAgQVNTRVJUKGF0Rmlyc3RUYWlsICE9IE5vTm9kZSk7Ci0gICAgICAgICAgICBzd2l0Y2ggKG1f
Z3JhcGhbYXRGaXJzdFRhaWxdLm9wKCkpIHsKKyAgICAgICAgICAgIE5vZGUqIGF0Rmlyc3RUYWls
ID0gZmlyc3RCbG9jay0+dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQob3BlcmFuZCk7CisgICAgICAg
ICAgICBBU1NFUlQoYXRGaXJzdFRhaWwpOworICAgICAgICAgICAgc3dpdGNoIChhdEZpcnN0VGFp
bC0+b3AoKSkgewogICAgICAgICAgICAgY2FzZSBTZXRBcmd1bWVudDoKICAgICAgICAgICAgIGNh
c2UgUGhpOgogICAgICAgICAgICAgICAgIGZpcnN0QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVy
YW5kKG9wZXJhbmQpID0gYXRTZWNvbmRUYWlsOwotICAgICAgICAgICAgICAgIHJlY29yZE5ld1Rh
cmdldChzdWJzdGl0dXRpb25zLCBvcGVyYW5kLCBzZWNvbmROb2RlLmNoaWxkMSgpLmluZGV4KCkp
OworICAgICAgICAgICAgICAgIHJlY29yZE5ld1RhcmdldChzdWJzdGl0dXRpb25zLCBvcGVyYW5k
LCBhdFNlY29uZFRhaWwtPmNoaWxkMSgpLmluZGV4KCkpOwogICAgICAgICAgICAgICAgIGJyZWFr
OwogCiAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgIC8vIEtlZXAgd2hhdCB3
YXMgaW4gdGhlIGZpcnN0IGJsb2NrLCBhbmQgYWRqdXN0IHRoZSBzdWJzdGl0dXRpb24gdG8gYWNj
b3VudCBmb3IKICAgICAgICAgICAgICAgICAvLyB0aGUgZmFjdCB0aGF0IHN1Y2Nlc3NvcnMgd2ls
bCByZWZlciB0byB0aGUgY2hpbGQgb2YgdGhlIEdldExvY2FsLgotICAgICAgICAgICAgICAgIEFT
U0VSVChmaXJzdEJsb2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZChvcGVyYW5kKSAhPSBOb05v
ZGUpOworICAgICAgICAgICAgICAgIEFTU0VSVChmaXJzdEJsb2NrLT52YXJpYWJsZXNBdFRhaWwu
b3BlcmFuZChvcGVyYW5kKSk7CiAgICAgICAgICAgICAgICAgcmVjb3JkTmV3VGFyZ2V0KHN1YnN0
aXR1dGlvbnMsIG9wZXJhbmQsIHNraXBHZXRMb2NhbChmaXJzdEJsb2NrLT52YXJpYWJsZXNBdFRh
aWwub3BlcmFuZChvcGVyYW5kKSkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb24uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uLmNwcAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uLmNwcAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSw0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZHQ29tbW9uLmgi
CisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcg
eworCit2b2lkIE5vZGVQb2ludGVyVHJhaXRzOjpkdW1wKE5vZGUqIHZhbHVlLCBQcmludFN0cmVh
bSYgb3V0KQoreworICAgIG91dC5wcmludCh2YWx1ZSk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQ29tbW9uLmgJKHJldmlzaW9uIDE0MDMwNikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMiwgMjAxMyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTgx
LDE2ICs4MSwxNCBAQAogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKLS8vIFR5
cGUgZm9yIGEgcmVmZXJlbmNlIHRvIGFub3RoZXIgbm9kZSBpbiB0aGUgZ3JhcGguCi10eXBlZGVm
IHVpbnQzMl90IE5vZGVJbmRleDsKLXN0YXRpYyBjb25zdCBOb2RlSW5kZXggTm9Ob2RlID0gVUlO
VF9NQVg7CitjbGFzcyBOb2RlOwogCiB0eXBlZGVmIHVpbnQzMl90IEJsb2NrSW5kZXg7CiBzdGF0
aWMgY29uc3QgQmxvY2tJbmRleCBOb0Jsb2NrID0gVUlOVF9NQVg7CiAKLXN0cnVjdCBOb2RlSW5k
ZXhUcmFpdHMgewotICAgIHN0YXRpYyBOb2RlSW5kZXggZGVmYXVsdFZhbHVlKCkgeyByZXR1cm4g
Tm9Ob2RlOyB9Ci0gICAgc3RhdGljIHZvaWQgZHVtcChOb2RlSW5kZXggdmFsdWUsIFByaW50U3Ry
ZWFtJiBvdXQpCitzdHJ1Y3QgTm9kZVBvaW50ZXJUcmFpdHMgeworICAgIHN0YXRpYyBOb2RlKiBk
ZWZhdWx0VmFsdWUoKSB7IHJldHVybiAwOyB9CisgICAgc3RhdGljIHZvaWQgZHVtcChOb2RlKiB2
YWx1ZSwgUHJpbnRTdHJlYW0mIG91dCk7CiAgICAgewogICAgICAgICBpZiAodmFsdWUgPT0gTm9O
b2RlKQogICAgICAgICAgICAgb3V0LnByaW50ZigiLSIpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAJKHJldmlz
aW9uIDE0MDMwNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xk
aW5nUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTIsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC03NSwyMiArNzUsMjEgQEAgcHJpdmF0ZToKICAg
ICAgICAgYm9vbCBjaGFuZ2VkID0gZmFsc2U7CiAgICAgICAgIG1fc3RhdGUuYmVnaW5CYXNpY0Js
b2NrKGJsb2NrKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpbmRleEluQmxvY2sgPSAwOyBpbmRl
eEluQmxvY2sgPCBibG9jay0+c2l6ZSgpOyArK2luZGV4SW5CbG9jaykgewotICAgICAgICAgICAg
Tm9kZUluZGV4IG5vZGVJbmRleCA9IGJsb2NrLT5hdChpbmRleEluQmxvY2spOwotICAgICAgICAg
ICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhbbm9kZUluZGV4XTsKLSAgICAgICAgICAgICAgICAKICAg
ICAgICAgICAgIGlmICghbV9zdGF0ZS5pc1ZhbGlkKCkpCiAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICAKKyAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+YXQoaW5kZXhJ
bkJsb2NrKTsKKwogICAgICAgICAgICAgYm9vbCBlbGltaW5hdGVkID0gZmFsc2U7CiAgICAgICAg
ICAgICAgICAgICAgIAotICAgICAgICAgICAgc3dpdGNoIChub2RlLm9wKCkpIHsKKyAgICAgICAg
ICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewogICAgICAgICAgICAgY2FzZSBDaGVja0FyZ3VtZW50
c05vdENyZWF0ZWQ6IHsKICAgICAgICAgICAgICAgICBpZiAoIWlzRW1wdHlTcGVjdWxhdGlvbigK
ICAgICAgICAgICAgICAgICAgICAgICAgIG1fc3RhdGUudmFyaWFibGVzKCkub3BlcmFuZCgKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLmFyZ3VtZW50c1JlZ2lzdGVyRm9yKG5v
ZGUuY29kZU9yaWdpbikpLm1fdHlwZSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9n
cmFwaC5hcmd1bWVudHNSZWdpc3RlckZvcihub2RlLT5jb2RlT3JpZ2luKSkubV90eXBlKSkKICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgQVNTRVJUKG5vZGUucmVm
Q291bnQoKSA9PSAxKTsKLSAgICAgICAgICAgICAgICBub2RlLnNldE9wQW5kRGVmYXVsdEZsYWdz
KFBoYW50b20pOworICAgICAgICAgICAgICAgIG5vZGUtPnNldE9wQW5kRGVmYXVsdEZsYWdzKFBo
YW50b20pOwogICAgICAgICAgICAgICAgIGVsaW1pbmF0ZWQgPSB0cnVlOwogICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgfQpAQCAtOTgsMjQgKzk3LDI0IEBAIHByaXZhdGU6CiAg
ICAgICAgICAgICBjYXNlIENoZWNrU3RydWN0dXJlOgogICAgICAgICAgICAgY2FzZSBGb3J3YXJk
Q2hlY2tTdHJ1Y3R1cmU6CiAgICAgICAgICAgICBjYXNlIEFycmF5aWZ5VG9TdHJ1Y3R1cmU6IHsK
LSAgICAgICAgICAgICAgICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSA9IG1fc3RhdGUuZm9yTm9kZShu
b2RlLmNoaWxkMSgpKTsKKyAgICAgICAgICAgICAgICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSA9IG1f
c3RhdGUuZm9yTm9kZShub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgICAgICAgICAgU3RydWN0dXJl
U2V0IHNldDsKLSAgICAgICAgICAgICAgICBpZiAobm9kZS5vcCgpID09IEFycmF5aWZ5VG9TdHJ1
Y3R1cmUpCi0gICAgICAgICAgICAgICAgICAgIHNldCA9IG5vZGUuc3RydWN0dXJlKCk7CisgICAg
ICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gQXJyYXlpZnlUb1N0cnVjdHVyZSkKKyAgICAg
ICAgICAgICAgICAgICAgc2V0ID0gbm9kZS0+c3RydWN0dXJlKCk7CiAgICAgICAgICAgICAgICAg
ZWxzZQotICAgICAgICAgICAgICAgICAgICBzZXQgPSBub2RlLnN0cnVjdHVyZVNldCgpOworICAg
ICAgICAgICAgICAgICAgICBzZXQgPSBub2RlLT5zdHJ1Y3R1cmVTZXQoKTsKICAgICAgICAgICAg
ICAgICBpZiAoIWlzQ2VsbFNwZWN1bGF0aW9uKHZhbHVlLm1fdHlwZSkpCiAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5tX2N1cnJlbnRLbm93blN0
cnVjdHVyZS5pc1N1YnNldE9mKHNldCkpIHsKICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKG5v
ZGUucmVmQ291bnQoKSA9PSAxKTsKLSAgICAgICAgICAgICAgICAgICAgbm9kZS5zZXRPcEFuZERl
ZmF1bHRGbGFncyhQaGFudG9tKTsKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+c2V0T3BBbmRE
ZWZhdWx0RmxhZ3MoUGhhbnRvbSk7CiAgICAgICAgICAgICAgICAgICAgIGVsaW1pbmF0ZWQgPSB0
cnVlOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICAgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZSYgc3RydWN0dXJlVmFsdWUgPSB2YWx1
ZS5tX2Z1dHVyZVBvc3NpYmxlU3RydWN0dXJlOwogICAgICAgICAgICAgICAgIGlmIChzdHJ1Y3R1
cmVWYWx1ZS5pc1N1YnNldE9mKHNldCkKICAgICAgICAgICAgICAgICAgICAgJiYgc3RydWN0dXJl
VmFsdWUuaGFzU2luZ2xldG9uKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgbm9kZS5jb252ZXJ0
VG9TdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludChzdHJ1Y3R1cmVWYWx1ZS5zaW5nbGV0b24o
KSk7CisgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNvbnZlcnRUb1N0cnVjdHVyZVRyYW5zaXRp
b25XYXRjaHBvaW50KHN0cnVjdHVyZVZhbHVlLnNpbmdsZXRvbigpKTsKICAgICAgICAgICAgICAg
ICAgICAgY2hhbmdlZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
IGJyZWFrOwpAQCAtMTIzLDM3ICsxMjIsMzcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAK
ICAgICAgICAgICAgIGNhc2UgQ2hlY2tBcnJheToKICAgICAgICAgICAgIGNhc2UgQXJyYXlpZnk6
IHsKLSAgICAgICAgICAgICAgICBpZiAoIW5vZGUuYXJyYXlNb2RlKCkuYWxyZWFkeUNoZWNrZWQo
bV9ncmFwaCwgbm9kZSwgbV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpKSkKKyAgICAgICAg
ICAgICAgICBpZiAoIW5vZGUtPmFycmF5TW9kZSgpLmFscmVhZHlDaGVja2VkKG1fZ3JhcGgsIG5v
ZGUsIG1fc3RhdGUuZm9yTm9kZShub2RlLT5jaGlsZDEoKSkpKQogICAgICAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgICAgICBBU1NFUlQobm9kZS5yZWZDb3VudCgpID09IDEpOwot
ICAgICAgICAgICAgICAgIG5vZGUuc2V0T3BBbmREZWZhdWx0RmxhZ3MoUGhhbnRvbSk7CisgICAg
ICAgICAgICAgICAgQVNTRVJUKG5vZGUtPnJlZkNvdW50KCkgPT0gMSk7CisgICAgICAgICAgICAg
ICAgbm9kZS0+c2V0T3BBbmREZWZhdWx0RmxhZ3MoUGhhbnRvbSk7CiAgICAgICAgICAgICAgICAg
ZWxpbWluYXRlZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBjYXNlIENoZWNrRnVuY3Rpb246IHsKLSAg
ICAgICAgICAgICAgICBpZiAobV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLnZhbHVlKCkg
IT0gbm9kZS5mdW5jdGlvbigpKQorICAgICAgICAgICAgICAgIGlmIChtX3N0YXRlLmZvck5vZGUo
bm9kZS0+Y2hpbGQxKCkpLnZhbHVlKCkgIT0gbm9kZS0+ZnVuY3Rpb24oKSkKICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgbm9kZS5zZXRPcEFuZERlZmF1bHRGbGFn
cyhQaGFudG9tKTsKKyAgICAgICAgICAgICAgICBub2RlLT5zZXRPcEFuZERlZmF1bHRGbGFncyhQ
aGFudG9tKTsKICAgICAgICAgICAgICAgICBlbGltaW5hdGVkID0gdHJ1ZTsKICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKICAgICAgICAgICAg
IGNhc2UgQ29udmVydFRoaXM6IHsKLSAgICAgICAgICAgICAgICBpZiAoIWlzT2JqZWN0U3BlY3Vs
YXRpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpCisgICAgICAgICAg
ICAgICAgaWYgKCFpc09iamVjdFNwZWN1bGF0aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLT5jaGls
ZDEoKSkubV90eXBlKSkKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAg
ICAgbm9kZS5zZXRPcEFuZERlZmF1bHRGbGFncyhJZGVudGl0eSk7CisgICAgICAgICAgICAgICAg
bm9kZS0+c2V0T3BBbmREZWZhdWx0RmxhZ3MoSWRlbnRpdHkpOwogICAgICAgICAgICAgICAgIGNo
YW5nZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgIAogICAgICAgICAgICAgY2FzZSBHZXRCeUlkOgogICAgICAgICAgICAgY2Fz
ZSBHZXRCeUlkRmx1c2g6IHsKLSAgICAgICAgICAgICAgICBDb2RlT3JpZ2luIGNvZGVPcmlnaW4g
PSBub2RlLmNvZGVPcmlnaW47Ci0gICAgICAgICAgICAgICAgTm9kZUluZGV4IGNoaWxkID0gbm9k
ZS5jaGlsZDEoKS5pbmRleCgpOwotICAgICAgICAgICAgICAgIHVuc2lnbmVkIGlkZW50aWZpZXJO
dW1iZXIgPSBub2RlLmlkZW50aWZpZXJOdW1iZXIoKTsKKyAgICAgICAgICAgICAgICBDb2RlT3Jp
Z2luIGNvZGVPcmlnaW4gPSBub2RlLT5jb2RlT3JpZ2luOworICAgICAgICAgICAgICAgIE5vZGUq
IGNoaWxkID0gbm9kZS0+Y2hpbGQxKCkubm9kZSgpOworICAgICAgICAgICAgICAgIHVuc2lnbmVk
IGlkZW50aWZpZXJOdW1iZXIgPSBub2RlLT5pZGVudGlmaWVyTnVtYmVyKCk7CiAgICAgICAgICAg
ICAgICAgCi0gICAgICAgICAgICAgICAgaWYgKCFpc0NlbGxTcGVjdWxhdGlvbihtX2dyYXBoW2No
aWxkXS5wcmVkaWN0aW9uKCkpKQorICAgICAgICAgICAgICAgIGlmICghaXNDZWxsU3BlY3VsYXRp
b24oY2hpbGQtPnByZWRpY3Rpb24oKSkpCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gbV9z
dGF0ZS5mb3JOb2RlKGNoaWxkKS5iZXN0UHJvdmVuU3RydWN0dXJlKCk7CkBAIC0xODcsNyArMTg2
LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBOb2RlSW5k
ZXggcHJvcGVydHlTdG9yYWdlSW5kZXg7CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAg
ICAgbV9ncmFwaFtjaGlsZF0ucmVmKCk7CisgICAgICAgICAgICAgICAgY2hpbGQtPnJlZigpOwog
ICAgICAgICAgICAgICAgIGlmIChpc0lubGluZU9mZnNldChzdGF0dXMub2Zmc2V0KCkpKQogICAg
ICAgICAgICAgICAgICAgICBwcm9wZXJ0eVN0b3JhZ2VJbmRleCA9IGNoaWxkOwogICAgICAgICAg
ICAgICAgIGVsc2UgewpAQCAtMTk2LDcgKzE5NSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAg
ICAgICAgICAgICBjaGlsZCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIAot
ICAgICAgICAgICAgICAgIG1fZ3JhcGhbbm9kZUluZGV4XS5jb252ZXJ0VG9HZXRCeU9mZnNldCht
X2dyYXBoLm1fc3RvcmFnZUFjY2Vzc0RhdGEuc2l6ZSgpLCBwcm9wZXJ0eVN0b3JhZ2VJbmRleCk7
CisgICAgICAgICAgICAgICAgbm9kZS0+Y29udmVydFRvR2V0QnlPZmZzZXQobV9ncmFwaC5tX3N0
b3JhZ2VBY2Nlc3NEYXRhLnNpemUoKSwgcHJvcGVydHlTdG9yYWdlSW5kZXgpOwogICAgICAgICAg
ICAgICAgIAogICAgICAgICAgICAgICAgIFN0b3JhZ2VBY2Nlc3NEYXRhIHN0b3JhZ2VBY2Nlc3NE
YXRhOwogICAgICAgICAgICAgICAgIHN0b3JhZ2VBY2Nlc3NEYXRhLm9mZnNldCA9IGluZGV4UmVs
YXRpdmVUb0Jhc2Uoc3RhdHVzLm9mZnNldCgpKTsKQEAgLTIwNyw5ICsyMDYsOSBAQCBwcml2YXRl
OgogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgY2FzZSBQdXRCeUlkOgogICAgICAgICAg
ICAgY2FzZSBQdXRCeUlkRGlyZWN0OiB7Ci0gICAgICAgICAgICAgICAgQ29kZU9yaWdpbiBjb2Rl
T3JpZ2luID0gbm9kZS5jb2RlT3JpZ2luOwotICAgICAgICAgICAgICAgIE5vZGVJbmRleCBjaGls
ZCA9IG5vZGUuY2hpbGQxKCkuaW5kZXgoKTsKLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBpZGVu
dGlmaWVyTnVtYmVyID0gbm9kZS5pZGVudGlmaWVyTnVtYmVyKCk7CisgICAgICAgICAgICAgICAg
Q29kZU9yaWdpbiBjb2RlT3JpZ2luID0gbm9kZS0+Y29kZU9yaWdpbjsKKyAgICAgICAgICAgICAg
ICBOb2RlKiBjaGlsZCA9IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKKyAgICAgICAgICAgICAgICB1
bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyID0gbm9kZS0+aWRlbnRpZmllck51bWJlcigpOwogICAg
ICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gbV9z
dGF0ZS5mb3JOb2RlKGNoaWxkKS5iZXN0UHJvdmVuU3RydWN0dXJlKCk7CiAgICAgICAgICAgICAg
ICAgaWYgKCFzdHJ1Y3R1cmUpCkBAIC0yMjIsNyArMjIxLDcgQEAgcHJpdmF0ZToKICAgICAgICAg
ICAgICAgICAgICAgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3IoY29kZU9yaWdpbiksCiAgICAgICAg
ICAgICAgICAgICAgIHN0cnVjdHVyZSwKICAgICAgICAgICAgICAgICAgICAgY29kZUJsb2NrKCkt
PmlkZW50aWZpZXIoaWRlbnRpZmllck51bWJlciksCi0gICAgICAgICAgICAgICAgICAgIG5vZGUu
b3AoKSA9PSBQdXRCeUlkRGlyZWN0KTsKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+b3AoKSA9
PSBQdXRCeUlkRGlyZWN0KTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBpZiAo
IXN0YXR1cy5pc1NpbXBsZVJlcGxhY2UoKSAmJiAhc3RhdHVzLmlzU2ltcGxlVHJhbnNpdGlvbigp
KQogICAgICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTI0Nyw3ICsyNDYsNyBAQCBwcml2YXRl
OgogICAgICAgICAgICAgICAgICAgICB0cmFuc2l0aW9uRGF0YSA9IG1fZ3JhcGguYWRkU3RydWN0
dXJlVHJhbnNpdGlvbkRhdGEoCiAgICAgICAgICAgICAgICAgICAgICAgICBTdHJ1Y3R1cmVUcmFu
c2l0aW9uRGF0YShzdHJ1Y3R1cmUsIHN0YXR1cy5uZXdTdHJ1Y3R1cmUoKSkpOwogICAgICAgICAg
ICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUub3AoKSA9PSBQdXRCeUlk
KSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5vcCgpID09IFB1dEJ5SWQpIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICghc3RydWN0dXJlLT5zdG9yZWRQcm90b3R5cGUoKS5p
c051bGwoKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZFN0cnVjdHVyZVRyYW5z
aXRpb25DaGVjaygKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZU9yaWdpbiwg
aW5kZXhJbkJsb2NrLApAQCAtMjY1LDE4ICsyNjQsMTggQEAgcHJpdmF0ZToKICAgICAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIE5vZGVJbmRl
eCBwcm9wZXJ0eVN0b3JhZ2VJbmRleDsKKyAgICAgICAgICAgICAgICBOb2RlKiBwcm9wZXJ0eVN0
b3JhZ2U7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgaWYgKGlzSW5saW5lT2Zm
c2V0KHN0YXR1cy5vZmZzZXQoKSkpIHsKLSAgICAgICAgICAgICAgICAgICAgbV9ncmFwaFtjaGls
ZF0ucmVmKCk7IC8vIFRoZSBjaGlsZCB3aWxsIGJlIHVzZWQgYXMgdGhlIHByb3BlcnR5IGluZGV4
LCBzbyByZWYgaXQgdG8gcmVmbGVjdCB0aGUgZG91YmxlIHVzZS4KLSAgICAgICAgICAgICAgICAg
ICAgcHJvcGVydHlTdG9yYWdlSW5kZXggPSBjaGlsZDsKKyAgICAgICAgICAgICAgICAgICAgY2hp
bGQtPnJlZigpOyAvLyBUaGUgY2hpbGQgd2lsbCBiZSB1c2VkIGFzIHRoZSBwcm9wZXJ0eSBpbmRl
eCwgc28gcmVmIGl0IHRvIHJlZmxlY3QgdGhlIGRvdWJsZSB1c2UuCisgICAgICAgICAgICAgICAg
ICAgIHByb3BlcnR5U3RvcmFnZSA9IGNoaWxkOwogICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAo
c3RhdHVzLmlzU2ltcGxlUmVwbGFjZSgpIHx8IHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHko
KSA9PSBzdGF0dXMubmV3U3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCkpIHsKLSAgICAg
ICAgICAgICAgICAgICAgcHJvcGVydHlTdG9yYWdlSW5kZXggPSBtX2luc2VydGlvblNldC5pbnNl
cnROb2RlKAorICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eVN0b3JhZ2UgPSBtX2luc2VydGlv
blNldC5pbnNlcnROb2RlKAogICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBS
ZWZDaGlsZHJlbiwgUmVmTm9kZSwgU3BlY05vbmUsIEdldEJ1dHRlcmZseSwgY29kZU9yaWdpbiwg
Y2hpbGQpOwogICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIXN0cnVjdHVyZS0+b3V0T2ZMaW5l
Q2FwYWNpdHkoKSkgewogICAgICAgICAgICAgICAgICAgICBBU1NFUlQoc3RhdHVzLm5ld1N0cnVj
dHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpKTsKICAgICAgICAgICAgICAgICAgICAgQVNTRVJU
KCFpc0lubGluZU9mZnNldChzdGF0dXMub2Zmc2V0KCkpKTsKLSAgICAgICAgICAgICAgICAgICAg
cHJvcGVydHlTdG9yYWdlSW5kZXggPSBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAorICAgICAg
ICAgICAgICAgICAgICBwcm9wZXJ0eVN0b3JhZ2UgPSBtX2luc2VydGlvblNldC5pbnNlcnROb2Rl
KAogICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBSZWZDaGlsZHJlbiwgUmVm
Tm9kZSwgU3BlY05vbmUsIEFsbG9jYXRlUHJvcGVydHlTdG9yYWdlLAogICAgICAgICAgICAgICAg
ICAgICAgICAgY29kZU9yaWdpbiwgT3BJbmZvKHRyYW5zaXRpb25EYXRhKSwgY2hpbGQpOwogICAg
ICAgICAgICAgICAgIH0gZWxzZSB7CkBAIC0yODQsNyArMjgzLDcgQEAgcHJpdmF0ZToKICAgICAg
ICAgICAgICAgICAgICAgQVNTRVJUKHN0YXR1cy5uZXdTdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2Fw
YWNpdHkoKSA+IHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7CiAgICAgICAgICAgICAg
ICAgICAgIEFTU0VSVCghaXNJbmxpbmVPZmZzZXQoc3RhdHVzLm9mZnNldCgpKSk7CiAgICAgICAg
ICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eVN0b3JhZ2VJbmRleCA9
IG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCisgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5
U3RvcmFnZSA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCiAgICAgICAgICAgICAgICAgICAg
ICAgICBpbmRleEluQmxvY2ssIFJlZkNoaWxkcmVuLCBSZWZOb2RlLCBTcGVjTm9uZSwgUmVhbGxv
Y2F0ZVByb3BlcnR5U3RvcmFnZSwKICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVPcmlnaW4s
IE9wSW5mbyh0cmFuc2l0aW9uRGF0YSksCiAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZCwK
QEAgLTI5OSw3ICsyOTgsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICAgICAgT3BJ
bmZvKHRyYW5zaXRpb25EYXRhKSwgY2hpbGQpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICAKLSAgICAgICAgICAgICAgICBtX2dyYXBoW25vZGVJbmRleF0uY29udmVydFRvUHV0
QnlPZmZzZXQobV9ncmFwaC5tX3N0b3JhZ2VBY2Nlc3NEYXRhLnNpemUoKSwgcHJvcGVydHlTdG9y
YWdlSW5kZXgpOworICAgICAgICAgICAgICAgIG5vZGUtPmNvbnZlcnRUb1B1dEJ5T2Zmc2V0KG1f
Z3JhcGgubV9zdG9yYWdlQWNjZXNzRGF0YS5zaXplKCksIHByb3BlcnR5U3RvcmFnZUluZGV4KTsK
ICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBTdG9yYWdlQWNjZXNzRGF0YSBzdG9y
YWdlQWNjZXNzRGF0YTsKICAgICAgICAgICAgICAgICBzdG9yYWdlQWNjZXNzRGF0YS5vZmZzZXQg
PSBpbmRleFJlbGF0aXZlVG9CYXNlKHN0YXR1cy5vZmZzZXQoKSk7CkBAIC0zMjAsNzIgKzMxOSw3
MCBAQCBwcml2YXRlOgogICAgICAgICAgICAgbV9zdGF0ZS5leGVjdXRlKGluZGV4SW5CbG9jayk7
CiAgICAgICAgICAgICBpZiAoIW5vZGUuc2hvdWxkR2VuZXJhdGUoKSB8fCBtX3N0YXRlLmRpZENs
b2JiZXIoKSB8fCBub2RlLmhhc0NvbnN0YW50KCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7
Ci0gICAgICAgICAgICBKU1ZhbHVlIHZhbHVlID0gbV9zdGF0ZS5mb3JOb2RlKG5vZGVJbmRleCku
dmFsdWUoKTsKKyAgICAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBtX3N0YXRlLmZvck5vZGUobm9k
ZSkudmFsdWUoKTsKICAgICAgICAgICAgIGlmICghdmFsdWUpCiAgICAgICAgICAgICAgICAgY29u
dGludWU7CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAobm9kZS5vcCgpID09IEdl
dExvY2FsKSB7Ci0gICAgICAgICAgICAgICAgTm9kZUluZGV4IHByZXZpb3VzTG9jYWxBY2Nlc3Mg
PSBOb05vZGU7Ci0gICAgICAgICAgICAgICAgaWYgKGJsb2NrLT52YXJpYWJsZXNBdEhlYWQub3Bl
cmFuZChub2RlLmxvY2FsKCkpID09IG5vZGVJbmRleAotICAgICAgICAgICAgICAgICAgICAmJiBt
X2dyYXBoW25vZGUuY2hpbGQxKCldLm9wKCkgPT0gUGhpKSB7CisgICAgICAgICAgICBpZiAobm9k
ZS0+b3AoKSA9PSBHZXRMb2NhbCkgeworICAgICAgICAgICAgICAgIE5vZGUqIHByZXZpb3VzTG9j
YWxBY2Nlc3MgPSAwOworICAgICAgICAgICAgICAgIGlmIChibG9jay0+dmFyaWFibGVzQXRIZWFk
Lm9wZXJhbmQobm9kZS0+bG9jYWwoKSkgPT0gbm9kZQorICAgICAgICAgICAgICAgICAgICAmJiBu
b2RlLT5jaGlsZDEoKS0+b3AoKSA9PSBQaGkpIHsKICAgICAgICAgICAgICAgICAgICAgLy8gV2Ug
ZXhwZWN0IHRoaXMgdG8gYmUgdGhlIGNvbW1vbiBjYXNlLgotICAgICAgICAgICAgICAgICAgICBB
U1NFUlQoYmxvY2stPmlzSW5QaGlzKG5vZGUuY2hpbGQxKCkuaW5kZXgoKSkpOwotICAgICAgICAg
ICAgICAgICAgICBwcmV2aW91c0xvY2FsQWNjZXNzID0gbm9kZS5jaGlsZDEoKS5pbmRleCgpOwot
ICAgICAgICAgICAgICAgICAgICBibG9jay0+dmFyaWFibGVzQXRIZWFkLm9wZXJhbmQobm9kZS5s
b2NhbCgpKSA9IHByZXZpb3VzTG9jYWxBY2Nlc3M7CisgICAgICAgICAgICAgICAgICAgIEFTU0VS
VChibG9jay0+aXNJblBoaXMobm9kZS0+Y2hpbGQxKCkubm9kZSgpKSk7CisgICAgICAgICAgICAg
ICAgICAgIHByZXZpb3VzTG9jYWxBY2Nlc3MgPSBub2RlLT5jaGlsZDEoKS5ub2RlKCk7CisgICAg
ICAgICAgICAgICAgICAgIGJsb2NrLT52YXJpYWJsZXNBdEhlYWQub3BlcmFuZChub2RlLT5sb2Nh
bCgpKSA9IHByZXZpb3VzTG9jYWxBY2Nlc3M7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAg
ICAgICAgICAgICAgICAgICAgQVNTRVJUKGluZGV4SW5CbG9jayA+IDApOwogICAgICAgICAgICAg
ICAgICAgICAvLyBNdXN0IHNlYXJjaCBmb3IgdGhlIHByZXZpb3VzIGFjY2VzcyB0byB0aGlzIGxv
Y2FsLgogICAgICAgICAgICAgICAgICAgICBmb3IgKEJsb2NrSW5kZXggc3ViSW5kZXhJbkJsb2Nr
ID0gaW5kZXhJbkJsb2NrOyBzdWJJbmRleEluQmxvY2stLTspIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIE5vZGVJbmRleCBzdWJOb2RlSW5kZXggPSBibG9jay0+YXQoc3ViSW5kZXhJbkJsb2Nr
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIE5vZGUmIHN1Yk5vZGUgPSBtX2dyYXBoW3N1Yk5v
ZGVJbmRleF07Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXN1Yk5vZGUuc2hvdWxkR2Vu
ZXJhdGUoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIE5vZGUqIHN1Yk5vZGUgPSBibG9jay0+
YXQoc3ViSW5kZXhJbkJsb2NrKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghc3ViTm9k
ZS0+c2hvdWxkR2VuZXJhdGUoKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51
ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICghc3ViTm9kZS5oYXNWYXJpYWJsZUFjY2Vz
c0RhdGEoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghc3ViTm9kZS0+aGFzVmFyaWFi
bGVBY2Nlc3NEYXRhKCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3ViTm9kZS5sb2NhbCgpICE9IG5vZGUubG9jYWwo
KSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdWJOb2RlLT5sb2NhbCgpICE9IG5vZGUt
PmxvY2FsKCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBUaGUgdHdvIG11c3QgaGF2ZSBiZWVuIHVuaWZpZWQuCi0gICAg
ICAgICAgICAgICAgICAgICAgICBBU1NFUlQoc3ViTm9kZS52YXJpYWJsZUFjY2Vzc0RhdGEoKSA9
PSBub2RlLnZhcmlhYmxlQWNjZXNzRGF0YSgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIEFT
U0VSVChzdWJOb2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKSA9PSBub2RlLT52YXJpYWJsZUFjY2Vz
c0RhdGEoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2aW91c0xvY2FsQWNjZXNzID0g
c3ViTm9kZUluZGV4OwogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgaWYgKHByZXZpb3VzTG9jYWxBY2Nlc3Mg
PT0gTm9Ob2RlKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICghcHJldmlvdXNMb2NhbEFjY2Vz
cykgewogICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhlIHByZXZpb3VzIGFjY2VzcyBtdXN0
IGhhdmUgYmVlbiBhIFBoaS4KICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoQmxvY2tJbmRl
eCBwaGlJbmRleEluQmxvY2sgPSBibG9jay0+cGhpcy5zaXplKCk7IHBoaUluZGV4SW5CbG9jay0t
OykgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vZGVJbmRleCBwaGlOb2RlSW5kZXgg
PSBibG9jay0+cGhpc1twaGlJbmRleEluQmxvY2tdOwotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIE5vZGUmIHBoaU5vZGUgPSBtX2dyYXBoW3BoaU5vZGVJbmRleF07Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKCFwaGlOb2RlLnNob3VsZEdlbmVyYXRlKCkpCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgTm9kZSogcGhpTm9kZSA9IGJsb2NrLT5waGlzW3BoaUluZGV4SW5C
bG9ja107CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFwaGlOb2RlLT5zaG91bGRH
ZW5lcmF0ZSgpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGhpTm9kZS5sb2NhbCgpICE9IG5vZGUubG9j
YWwoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGhpTm9kZS0+bG9jYWwoKSAh
PSBub2RlLT5sb2NhbCgpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51
ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGUgdHdvIG11c3QgaGF2ZSBiZWVu
IHVuaWZpZWQuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKHBoaU5vZGUudmFy
aWFibGVBY2Nlc3NEYXRhKCkgPT0gbm9kZS52YXJpYWJsZUFjY2Vzc0RhdGEoKSk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcHJldmlvdXNMb2NhbEFjY2VzcyA9IHBoaU5vZGVJbmRleDsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQocGhpTm9kZS0+dmFyaWFibGVBY2Nl
c3NEYXRhKCkgPT0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCkpOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHByZXZpb3VzTG9jYWxBY2Nlc3MgPSBwaGlOb2RlOwogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgICAgICAgICAgQVNTRVJUKHByZXZpb3VzTG9jYWxBY2Nlc3MgIT0gTm9Ob2RlKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChwcmV2aW91c0xvY2FsQWNjZXNzKTsKICAg
ICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAg
ICAgCi0gICAgICAgICAgICAgICAgQVNTRVJUKHByZXZpb3VzTG9jYWxBY2Nlc3MgIT0gTm9Ob2Rl
KTsKKyAgICAgICAgICAgICAgICBBU1NFUlQocHJldmlvdXNMb2NhbEFjY2Vzcyk7CiAgICAgICAg
ICAgICAgICAgCi0gICAgICAgICAgICAgICAgTm9kZUluZGV4IHRhaWxOb2RlSW5kZXggPSBibG9j
ay0+dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQobm9kZS5sb2NhbCgpKTsKLSAgICAgICAgICAgICAg
ICBpZiAodGFpbE5vZGVJbmRleCA9PSBub2RlSW5kZXgpCi0gICAgICAgICAgICAgICAgICAgIGJs
b2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZChub2RlLmxvY2FsKCkpID0gcHJldmlvdXNMb2Nh
bEFjY2VzczsKKyAgICAgICAgICAgICAgICBOb2RlKiB0YWlsTm9kZSA9IGJsb2NrLT52YXJpYWJs
ZXNBdFRhaWwub3BlcmFuZChub2RlLT5sb2NhbCgpKTsKKyAgICAgICAgICAgICAgICBpZiAodGFp
bE5vZGUgPT0gbm9kZSkKKyAgICAgICAgICAgICAgICAgICAgYmxvY2stPnZhcmlhYmxlc0F0VGFp
bC5vcGVyYW5kKG5vZGUtPmxvY2FsKCkpID0gcHJldmlvdXNMb2NhbEFjY2VzczsKICAgICAgICAg
ICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgQVNTRVJUKG1fZ3JhcGhbdGFpbE5v
ZGVJbmRleF0ub3AoKSA9PSBGbHVzaAotICAgICAgICAgICAgICAgICAgICAgICAgfHwgbV9ncmFw
aFt0YWlsTm9kZUluZGV4XS5vcCgpID09IFNldExvY2FsCi0gICAgICAgICAgICAgICAgICAgICAg
ICB8fCBub2RlLnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5pc0NhcHR1cmVkKCkpOworICAgICAgICAg
ICAgICAgICAgICBBU1NFUlQodGFpbE5vZGUtPm9wKCkgPT0gRmx1c2gKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHx8IHRhaWxOb2RlLT5vcCgpID09IFNldExvY2FsCisgICAgICAgICAgICAgICAg
ICAgICAgICB8fCBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+aXNDYXB0dXJlZCgpKTsKICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgICAg
IENvZGVPcmlnaW4gY29kZU9yaWdpbiA9IG5vZGUuY29kZU9yaWdpbjsKLSAgICAgICAgICAgIEFk
amFjZW5jeUxpc3QgY2hpbGRyZW4gPSBub2RlLmNoaWxkcmVuOworICAgICAgICAgICAgQ29kZU9y
aWdpbiBjb2RlT3JpZ2luID0gbm9kZS0+Y29kZU9yaWdpbjsKKyAgICAgICAgICAgIEFkamFjZW5j
eUxpc3QgY2hpbGRyZW4gPSBub2RlLT5jaGlsZHJlbjsKICAgICAgICAgICAgICAgICAKLSAgICAg
ICAgICAgIG1fZ3JhcGguY29udmVydFRvQ29uc3RhbnQobm9kZUluZGV4LCB2YWx1ZSk7CisgICAg
ICAgICAgICBtX2dyYXBoLmNvbnZlcnRUb0NvbnN0YW50KG5vZGUsIHZhbHVlKTsKICAgICAgICAg
ICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCiAgICAgICAgICAgICAgICAgaW5kZXhJbkJs
b2NrLCBEb250UmVmQ2hpbGRyZW4sIERvbnRSZWZOb2RlLCBTcGVjTm9uZSwgUGhhbnRvbSwgY29k
ZU9yaWdpbiwgY2hpbGRyZW4pOwotICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgCiAgICAg
ICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKICAgICAgICAgfQogICAgICAgICBtX3N0YXRlLnJlc2V0
KCk7CkBAIC0zOTYsMjAgKzM5MywyMCBAQCBwcml2YXRlOgogICAgIAogICAgIHZvaWQgYWRkU3Ry
dWN0dXJlVHJhbnNpdGlvbkNoZWNrKENvZGVPcmlnaW4gY29kZU9yaWdpbiwgdW5zaWduZWQgaW5k
ZXhJbkJsb2NrLCBKU0NlbGwqIGNlbGwpCiAgICAgewotICAgICAgICBOb2RlSW5kZXggd2Vha0Nv
bnN0YW50SW5kZXggPSBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAorICAgICAgICBOb2RlKiB3
ZWFrQ29uc3RhbnQgPSBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAogICAgICAgICAgICAgaW5k
ZXhJbkJsb2NrLCBEb250UmVmQ2hpbGRyZW4sIERvbnRSZWZOb2RlLCBzcGVjdWxhdGlvbkZyb21W
YWx1ZShjZWxsKSwKICAgICAgICAgICAgIFdlYWtKU0NvbnN0YW50LCBjb2RlT3JpZ2luLCBPcElu
Zm8oY2VsbCkpOwogICAgICAgICAKICAgICAgICAgaWYgKGNlbGwtPnN0cnVjdHVyZSgpLT50cmFu
c2l0aW9uV2F0Y2hwb2ludFNldElzU3RpbGxWYWxpZCgpKSB7CiAgICAgICAgICAgICBtX2luc2Vy
dGlvblNldC5pbnNlcnROb2RlKAogICAgICAgICAgICAgICAgIGluZGV4SW5CbG9jaywgUmVmQ2hp
bGRyZW4sIERvbnRSZWZOb2RlLCBTcGVjTm9uZSwgU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9p
bnQsCi0gICAgICAgICAgICAgICAgY29kZU9yaWdpbiwgT3BJbmZvKGNlbGwtPnN0cnVjdHVyZSgp
KSwgd2Vha0NvbnN0YW50SW5kZXgpOworICAgICAgICAgICAgICAgIGNvZGVPcmlnaW4sIE9wSW5m
byhjZWxsLT5zdHJ1Y3R1cmUoKSksIHdlYWtDb25zdGFudCk7CiAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgIH0KIAogICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAogICAgICAg
ICAgICAgaW5kZXhJbkJsb2NrLCBSZWZDaGlsZHJlbiwgRG9udFJlZk5vZGUsIFNwZWNOb25lLCBD
aGVja1N0cnVjdHVyZSwgY29kZU9yaWdpbiwKLSAgICAgICAgICAgIE9wSW5mbyhtX2dyYXBoLmFk
ZFN0cnVjdHVyZVNldChjZWxsLT5zdHJ1Y3R1cmUoKSkpLCB3ZWFrQ29uc3RhbnRJbmRleCk7Cisg
ICAgICAgICAgICBPcEluZm8obV9ncmFwaC5hZGRTdHJ1Y3R1cmVTZXQoY2VsbC0+c3RydWN0dXJl
KCkpKSwgd2Vha0NvbnN0YW50KTsKICAgICB9CiAgICAgCiAgICAgLy8gVGhpcyBpcyBuZWNlc3Nh
cnkgYmVjYXVzZSB0aGUgQ0ZBIG1heSByZWFjaCBjb25jbHVzaW9ucyBhYm91dCBjb25zdGFudHMg
YmFzZWQgb24gaXRzCkBAIC00MzQsOSArNDMxLDggQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGlm
IChtX3N0YXRlLmlzVmFsaWQoKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAg
ICAgIAotICAgICAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRleCA9IGJsb2NrLT5hdChpbmRleElu
QmxvY2spOwotICAgICAgICAgICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhbbm9kZUluZGV4XTsKLSAg
ICAgICAgICAgIHN3aXRjaCAobm9kZS5vcCgpKSB7CisgICAgICAgICAgICBOb2RlKiBub2RlID0g
YmxvY2stPmF0KGluZGV4SW5CbG9jayk7CisgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkp
IHsKICAgICAgICAgICAgIGNhc2UgUmV0dXJuOgogICAgICAgICAgICAgY2FzZSBUaHJvdzoKICAg
ICAgICAgICAgIGNhc2UgVGhyb3dSZWZlcmVuY2VFcnJvcjoKQEAgLTQ0Nyw3ICs0NDMsNyBAQCBw
cml2YXRlOgogICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICBtX2luc2VydGlv
blNldC5pbnNlcnROb2RlKAogICAgICAgICAgICAgICAgICAgICBpbmRleEluQmxvY2ssIERvbnRS
ZWZDaGlsZHJlbiwgRG9udFJlZk5vZGUsIFNwZWNOb25lLCBGb3JjZU9TUkV4aXQsCi0gICAgICAg
ICAgICAgICAgICAgIG5vZGUuY29kZU9yaWdpbik7CisgICAgICAgICAgICAgICAgICAgIG5vZGUt
PmNvZGVPcmlnaW4pOwogICAgICAgICAgICAgICAgIGNoYW5nZWQgPSB0cnVlOwogICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdFZGdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdFZGdlLmgJKHJldmlzaW9uIDE0MDMwNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHRWRnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTEsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00Myw0MSArNDMsMzkgQEAgcHVibGljOgogICAgIHsK
ICAgICB9CiAgICAgCi0gICAgZXhwbGljaXQgRWRnZShOb2RlSW5kZXggbm9kZUluZGV4KQotICAg
ICAgICA6IG1fZW5jb2RlZFdvcmQobWFrZVdvcmQobm9kZUluZGV4LCBVbnR5cGVkVXNlKSkKKyAg
ICBleHBsaWNpdCBFZGdlKE5vZGUqIG5vZGUpCisgICAgICAgIDogbV9lbmNvZGVkV29yZChtYWtl
V29yZChub2RlLCBVbnR5cGVkVXNlKSkKICAgICB7CiAgICAgfQogICAgIAotICAgIEVkZ2UoTm9k
ZUluZGV4IG5vZGVJbmRleCwgVXNlS2luZCB1c2VLaW5kKQotICAgICAgICA6IG1fZW5jb2RlZFdv
cmQobWFrZVdvcmQobm9kZUluZGV4LCB1c2VLaW5kKSkKKyAgICBFZGdlKE5vZGUqIG5vZGUsIFVz
ZUtpbmQgdXNlS2luZCkKKyAgICAgICAgOiBtX2VuY29kZWRXb3JkKG1ha2VXb3JkKG5vZGUsIHVz
ZUtpbmQpKQogICAgIHsKICAgICB9CiAgICAgCi0gICAgTm9kZUluZGV4IGluZGV4VW5jaGVja2Vk
KCkgY29uc3QgeyByZXR1cm4gbV9lbmNvZGVkV29yZCA+PiBzaGlmdCgpOyB9Ci0gICAgTm9kZUlu
ZGV4IGluZGV4KCkgY29uc3QKLSAgICB7Ci0gICAgICAgIEFTU0VSVChpc1NldCgpKTsKLSAgICAg
ICAgcmV0dXJuIG1fZW5jb2RlZFdvcmQgPj4gc2hpZnQoKTsKLSAgICB9Ci0gICAgdm9pZCBzZXRJ
bmRleChOb2RlSW5kZXggbm9kZUluZGV4KQorICAgIE5vZGUqIG5vZGUoKSBjb25zdCB7IHJldHVy
biBtX2VuY29kZWRXb3JkICYgfigoMSA8PCBzaGlmdCgpKSAtIDEpOyB9CisgICAgTm9kZSYgb3Bl
cmF0b3IqKCkgY29uc3QgeyByZXR1cm4gKmdldCgpOyB9CisgICAgTm9kZSogb3BlcmF0b3ItPigp
IGNvbnN0IHsgcmV0dXJuIGdldCgpOyB9CisgICAgCisgICAgdm9pZCBzZXROb2RlKE5vZGUqIG5v
ZGUpCiAgICAgewotICAgICAgICBtX2VuY29kZWRXb3JkID0gbWFrZVdvcmQobm9kZUluZGV4LCB1
c2VLaW5kKCkpOworICAgICAgICBtX2VuY29kZWRXb3JkID0gbWFrZVdvcmQobm9kZSwgdXNlS2lu
ZCgpKTsKICAgICB9CiAgICAgCiAgICAgVXNlS2luZCB1c2VLaW5kKCkgY29uc3QKICAgICB7Ci0g
ICAgICAgIEFTU0VSVChpc1NldCgpKTsKKyAgICAgICAgQVNTRVJUKG5vZGUoKSk7CiAgICAgICAg
IHVuc2lnbmVkIG1hc2tlZCA9IG1fZW5jb2RlZFdvcmQgJiAoKCgxIDw8IHNoaWZ0KCkpIC0gMSkp
OwogICAgICAgICBBU1NFUlQobWFza2VkIDwgTGFzdFVzZUtpbmQpOwogICAgICAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8VXNlS2luZD4obWFza2VkKTsKICAgICB9CiAgICAgdm9pZCBzZXRVc2VLaW5k
KFVzZUtpbmQgdXNlS2luZCkKICAgICB7Ci0gICAgICAgIEFTU0VSVChpc1NldCgpKTsKLSAgICAg
ICAgbV9lbmNvZGVkV29yZCA9IG1ha2VXb3JkKGluZGV4KCksIHVzZUtpbmQpOworICAgICAgICBB
U1NFUlQobm9kZSgpKTsKKyAgICAgICAgbV9lbmNvZGVkV29yZCA9IG1ha2VXb3JkKG5vZGUoKSwg
dXNlS2luZCk7CiAgICAgfQogICAgIAotICAgIGJvb2wgaXNTZXQoKSBjb25zdCB7IHJldHVybiBp
bmRleFVuY2hlY2tlZCgpICE9IE5vTm9kZTsgfQorICAgIGJvb2wgaXNTZXQoKSBjb25zdCB7IHJl
dHVybiAhIW5vZGUoKTsgfQogICAgIAogICAgIHR5cGVkZWYgdm9pZCogRWRnZTo6KlVuc3BlY2lm
aWVkQm9vbFR5cGU7CiAgICAgb3BlcmF0b3IgVW5zcGVjaWZpZWRCb29sVHlwZSooKSBjb25zdCB7
IHJldHVybiByZWludGVycHJldF9jYXN0PFVuc3BlY2lmaWVkQm9vbFR5cGUqPihpc1NldCgpKTsg
fQpAQCAtOTYsMzQgKzk0LDM1IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNz
IEFkamFjZW5jeUxpc3Q7CiAgICAgCi0gICAgc3RhdGljIHVpbnQzMl90IHNoaWZ0KCkgeyByZXR1
cm4gNDsgfQorICAgIHN0YXRpYyB1aW50MzJfdCBzaGlmdCgpIHsgcmV0dXJuIDI7IH0KICAgICAK
LSAgICBzdGF0aWMgaW50MzJfdCBtYWtlV29yZChOb2RlSW5kZXggbm9kZUluZGV4LCBVc2VLaW5k
IHVzZUtpbmQpCisgICAgc3RhdGljIHVpbnRwdHJfdCBtYWtlV29yZChOb2RlKiBub2RlLCBVc2VL
aW5kIHVzZUtpbmQpCiAgICAgewotICAgICAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8dWludDMyX3Q+
KCgoc3RhdGljX2Nhc3Q8aW50MzJfdD4obm9kZUluZGV4KSA8PCBzaGlmdCgpKSA+PiBzaGlmdCgp
KSkgPT0gbm9kZUluZGV4KTsKKyAgICAgICAgdWludHB0cl90IHZhbHVlID0gYml0d2lzZV9jYXN0
PHVpbnRwdHJfdD4obm9kZSk7CisgICAgICAgIEFTU0VSVCghKHZhbHVlICYgKCgxIDw8IHNoaWZ0
KCkpIC0gMSkpKTsKICAgICAgICAgQVNTRVJUKHVzZUtpbmQgPj0gMCAmJiB1c2VLaW5kIDwgTGFz
dFVzZUtpbmQpOwogICAgICAgICBBU1NFUlQoTGFzdFVzZUtpbmQgPD0gKDEgPDwgc2hpZnQoKSkp
OwotICAgICAgICByZXR1cm4gKG5vZGVJbmRleCA8PCBzaGlmdCgpKSB8IHVzZUtpbmQ7CisgICAg
ICAgIHJldHVybiB2YWx1ZSB8IHN0YXRpY19jYXN0PHVpbnRwdHJfdD4odXNlS2luZCk7CiAgICAg
fQogICAgIAotICAgIGludDMyX3QgbV9lbmNvZGVkV29yZDsKKyAgICB1aW50cHRyX3QgbV9lbmNv
ZGVkV29yZDsKIH07CiAKLWlubGluZSBib29sIG9wZXJhdG9yPT0oRWRnZSBub2RlVXNlLCBOb2Rl
SW5kZXggbm9kZUluZGV4KQoraW5saW5lIGJvb2wgb3BlcmF0b3I9PShFZGdlIGVkZ2UsIE5vZGUq
IG5vZGUpCiB7Ci0gICAgcmV0dXJuIG5vZGVVc2UuaW5kZXhVbmNoZWNrZWQoKSA9PSBub2RlSW5k
ZXg7CisgICAgcmV0dXJuIGVkZ2Uubm9kZSgpID09IG5vZGU7CiB9Ci1pbmxpbmUgYm9vbCBvcGVy
YXRvcj09KE5vZGVJbmRleCBub2RlSW5kZXgsIEVkZ2Ugbm9kZVVzZSkKK2lubGluZSBib29sIG9w
ZXJhdG9yPT0oTm9kZSogbm9kZSwgRWRnZSBlZGdlKQogewotICAgIHJldHVybiBub2RlVXNlLmlu
ZGV4VW5jaGVja2VkKCkgPT0gbm9kZUluZGV4OworICAgIHJldHVybiBlZGdlLm5vZGUoKSA9PSBu
b2RlOwogfQotaW5saW5lIGJvb2wgb3BlcmF0b3IhPShFZGdlIG5vZGVVc2UsIE5vZGVJbmRleCBu
b2RlSW5kZXgpCitpbmxpbmUgYm9vbCBvcGVyYXRvciE9KEVkZ2UgZWRnZSwgTm9kZSogbm9kZSkK
IHsKLSAgICByZXR1cm4gbm9kZVVzZS5pbmRleFVuY2hlY2tlZCgpICE9IG5vZGVJbmRleDsKKyAg
ICByZXR1cm4gZWRnZS5ub2RlKCkgIT0gbm9kZTsKIH0KLWlubGluZSBib29sIG9wZXJhdG9yIT0o
Tm9kZUluZGV4IG5vZGVJbmRleCwgRWRnZSBub2RlVXNlKQoraW5saW5lIGJvb2wgb3BlcmF0b3Ih
PShOb2RlKiBub2RlLCBFZGdlIGVkZ2UpCiB7Ci0gICAgcmV0dXJuIG5vZGVVc2UuaW5kZXhVbmNo
ZWNrZWQoKSAhPSBub2RlSW5kZXg7CisgICAgcmV0dXJuIGVkZ2Uubm9kZSgpICE9IG5vZGU7CiB9
CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHRml4dXBQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAkocmV2aXNpb24gMTQwMzA2KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTgsMjEg
KzU4LDIxIEBAIHByaXZhdGU6CiAgICAgICAgIEFTU0VSVChibG9jay0+aXNSZWFjaGFibGUpOwog
ICAgICAgICBtX2Jsb2NrID0gYmxvY2s7CiAgICAgICAgIGZvciAobV9pbmRleEluQmxvY2sgPSAw
OyBtX2luZGV4SW5CbG9jayA8IGJsb2NrLT5zaXplKCk7ICsrbV9pbmRleEluQmxvY2spIHsKLSAg
ICAgICAgICAgIG1fY29tcGlsZUluZGV4ID0gYmxvY2stPmF0KG1faW5kZXhJbkJsb2NrKTsKLSAg
ICAgICAgICAgIGZpeHVwTm9kZShtX2dyYXBoW21fY29tcGlsZUluZGV4XSk7CisgICAgICAgICAg
ICBtX2N1cnJlbnROb2RlID0gYmxvY2stPmF0KG1faW5kZXhJbkJsb2NrKTsKKyAgICAgICAgICAg
IGZpeHVwTm9kZShtX2N1cnJlbnROb2RlKTsKICAgICAgICAgfQogICAgICAgICBtX2luc2VydGlv
blNldC5leGVjdXRlKGJsb2NrKTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBmaXh1cE5vZGUoTm9k
ZSYgbm9kZSkKKyAgICB2b2lkIGZpeHVwTm9kZShOb2RlKiBub2RlKQogICAgIHsKLSAgICAgICAg
aWYgKCFub2RlLnNob3VsZEdlbmVyYXRlKCkpCisgICAgICAgIGlmICghbm9kZS0+c2hvdWxkR2Vu
ZXJhdGUoKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgCi0gICAgICAgIE5vZGVUeXBl
IG9wID0gbm9kZS5vcCgpOworICAgICAgICBOb2RlVHlwZSBvcCA9IG5vZGUtPm9wKCk7CiAKICNp
ZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCi0gICAgICAgIGRhdGFMb2dG
KCIgICAlcyBAJXU6ICIsIEdyYXBoOjpvcE5hbWUob3ApLCBtX2NvbXBpbGVJbmRleCk7CisgICAg
ICAgIGRhdGFMb2dGKCIgICAlcyBAJXU6ICIsIEdyYXBoOjpvcE5hbWUob3ApLCBub2RlLT5pbmRl
eCgpKTsKICNlbmRpZgogICAgICAgICAKICAgICAgICAgc3dpdGNoIChvcCkgewpAQCAtODAsODAg
KzgwLDcxIEBAIHByaXZhdGU6CiAgICAgICAgICAgICBpZiAobV9ncmFwaC5tX2ZpeHBvaW50U3Rh
dGUgPiBCZWZvcmVGaXhwb2ludCkKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
IAotICAgICAgICAgICAgTm9kZSogbm9kZVB0ciA9ICZub2RlOwotICAgICAgICAgICAgCi0gICAg
ICAgICAgICBpZiAoIWlzSW50MzJTcGVjdWxhdGlvbihtX2dyYXBoW21fY29tcGlsZUluZGV4XS5w
cmVkaWN0aW9uKCkpKQorICAgICAgICAgICAgaWYgKCFpc0ludDMyU3BlY3VsYXRpb24obm9kZS0+
cHJlZGljdGlvbigpKSkKICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGlmIChj
b2RlQmxvY2soKS0+aWRlbnRpZmllcihub2RlUHRyLT5pZGVudGlmaWVyTnVtYmVyKCkpICE9IGds
b2JhbERhdGEoKS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgpCisgICAgICAgICAgICBpZiAoY29kZUJs
b2NrKCktPmlkZW50aWZpZXIobm9kZS0+aWRlbnRpZmllck51bWJlcigpKSAhPSBnbG9iYWxEYXRh
KCkucHJvcGVydHlOYW1lcy0+bGVuZ3RoKQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgQXJyYXlQcm9maWxlKiBhcnJheVByb2ZpbGUgPSAKLSAgICAgICAgICAgICAgICBtX2dy
YXBoLmJhc2VsaW5lQ29kZUJsb2NrRm9yKG5vZGVQdHItPmNvZGVPcmlnaW4pLT5nZXRBcnJheVBy
b2ZpbGUoCi0gICAgICAgICAgICAgICAgICAgIG5vZGVQdHItPmNvZGVPcmlnaW4uYnl0ZWNvZGVJ
bmRleCk7CisgICAgICAgICAgICAgICAgbV9ncmFwaC5iYXNlbGluZUNvZGVCbG9ja0Zvcihub2Rl
LT5jb2RlT3JpZ2luKS0+Z2V0QXJyYXlQcm9maWxlKAorICAgICAgICAgICAgICAgICAgICBub2Rl
LT5jb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgpOwogICAgICAgICAgICAgQXJyYXlNb2RlIGFycmF5
TW9kZSA9IEFycmF5TW9kZShBcnJheTo6U2VsZWN0VXNpbmdQcmVkaWN0aW9ucyk7CiAgICAgICAg
ICAgICBpZiAoYXJyYXlQcm9maWxlKSB7Ci0gICAgICAgICAgICAgICAgYXJyYXlQcm9maWxlLT5j
b21wdXRlVXBkYXRlZFByZWRpY3Rpb24obV9ncmFwaC5iYXNlbGluZUNvZGVCbG9ja0Zvcihub2Rl
LmNvZGVPcmlnaW4pKTsKKyAgICAgICAgICAgICAgICBhcnJheVByb2ZpbGUtPmNvbXB1dGVVcGRh
dGVkUHJlZGljdGlvbihtX2dyYXBoLmJhc2VsaW5lQ29kZUJsb2NrRm9yKG5vZGUtPmNvZGVPcmln
aW4pKTsKICAgICAgICAgICAgICAgICBhcnJheU1vZGUgPSBBcnJheU1vZGU6OmZyb21PYnNlcnZl
ZChhcnJheVByb2ZpbGUsIEFycmF5OjpSZWFkLCBmYWxzZSk7CiAgICAgICAgICAgICAgICAgYXJy
YXlNb2RlID0gYXJyYXlNb2RlLnJlZmluZSgKLSAgICAgICAgICAgICAgICAgICAgbV9ncmFwaFtu
b2RlLmNoaWxkMSgpXS5wcmVkaWN0aW9uKCksCi0gICAgICAgICAgICAgICAgICAgIG1fZ3JhcGhb
bV9jb21waWxlSW5kZXhdLnByZWRpY3Rpb24oKSk7CisgICAgICAgICAgICAgICAgICAgIG5vZGUt
PmNoaWxkMSgpLT5wcmVkaWN0aW9uKCksIG5vZGUtPnByZWRpY3Rpb24oKSk7CiAgICAgICAgICAg
ICAgICAgaWYgKGFycmF5TW9kZS5zdXBwb3J0c0xlbmd0aCgpICYmIGFycmF5UHJvZmlsZS0+aGFz
RGVmaW5pdGVTdHJ1Y3R1cmUoKSkgewogICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNl
dC5pbnNlcnROb2RlKAogICAgICAgICAgICAgICAgICAgICAgICAgbV9pbmRleEluQmxvY2ssIFJl
ZkNoaWxkcmVuLCBEb250UmVmTm9kZSwgU3BlY05vbmUsIENoZWNrU3RydWN0dXJlLAotICAgICAg
ICAgICAgICAgICAgICAgICAgbm9kZVB0ci0+Y29kZU9yaWdpbiwgT3BJbmZvKG1fZ3JhcGguYWRk
U3RydWN0dXJlU2V0KGFycmF5UHJvZmlsZS0+ZXhwZWN0ZWRTdHJ1Y3R1cmUoKSkpLAotICAgICAg
ICAgICAgICAgICAgICAgICAgbm9kZVB0ci0+Y2hpbGQxKCkuaW5kZXgoKSk7Ci0gICAgICAgICAg
ICAgICAgICAgIG5vZGVQdHIgPSAmbV9ncmFwaFttX2NvbXBpbGVJbmRleF07CisgICAgICAgICAg
ICAgICAgICAgICAgICBub2RlLT5jb2RlT3JpZ2luLCBPcEluZm8obV9ncmFwaC5hZGRTdHJ1Y3R1
cmVTZXQoYXJyYXlQcm9maWxlLT5leHBlY3RlZFN0cnVjdHVyZSgpKSksCisgICAgICAgICAgICAg
ICAgICAgICAgICBub2RlLT5jaGlsZDEoKS5ub2RlKCkpOwogICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgYXJyYXlNb2RlID0gYXJyYXlNb2Rl
LnJlZmluZSgKLSAgICAgICAgICAgICAgICAgICAgbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5wcmVk
aWN0aW9uKCksCi0gICAgICAgICAgICAgICAgICAgIG1fZ3JhcGhbbV9jb21waWxlSW5kZXhdLnBy
ZWRpY3Rpb24oKSk7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAg
ICAgICAgICBhcnJheU1vZGUgPSBhcnJheU1vZGUucmVmaW5lKG5vZGUtPmNoaWxkMSgpLT5wcmVk
aWN0aW9uKCksIG5vZGUtPnByZWRpY3Rpb24oKSk7CiAgICAgICAgICAgICBpZiAoIWFycmF5TW9k
ZS5zdXBwb3J0c0xlbmd0aCgpKQogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
bm9kZVB0ci0+c2V0T3AoR2V0QXJyYXlMZW5ndGgpOwotICAgICAgICAgICAgQVNTRVJUKG5vZGVQ
dHItPmZsYWdzKCkgJiBOb2RlTXVzdEdlbmVyYXRlKTsKLSAgICAgICAgICAgIG5vZGVQdHItPmNs
ZWFyRmxhZ3MoTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVDbG9iYmVyc1dvcmxkKTsKLSAgICAgICAg
ICAgIG1fZ3JhcGguZGVyZWYobV9jb21waWxlSW5kZXgpOwotICAgICAgICAgICAgbm9kZVB0ci0+
c2V0QXJyYXlNb2RlKGFycmF5TW9kZSk7CisgICAgICAgICAgICBub2RlLT5zZXRPcChHZXRBcnJh
eUxlbmd0aCk7CisgICAgICAgICAgICBBU1NFUlQobm9kZS0+ZmxhZ3MoKSAmIE5vZGVNdXN0R2Vu
ZXJhdGUpOworICAgICAgICAgICAgbm9kZS0+Y2xlYXJGbGFncyhOb2RlTXVzdEdlbmVyYXRlIHwg
Tm9kZUNsb2JiZXJzV29ybGQpOworICAgICAgICAgICAgbV9ncmFwaC5kZXJlZihub2RlKTsKKyAg
ICAgICAgICAgIG5vZGUtPnNldEFycmF5TW9kZShhcnJheU1vZGUpOwogICAgICAgICAgICAgCi0g
ICAgICAgICAgICBOb2RlSW5kZXggc3RvcmFnZSA9IGNoZWNrQXJyYXkoYXJyYXlNb2RlLCBub2Rl
UHRyLT5jb2RlT3JpZ2luLCBub2RlUHRyLT5jaGlsZDEoKS5pbmRleCgpLCBOb05vZGUsIGxlbmd0
aE5lZWRzU3RvcmFnZSwgbm9kZVB0ci0+c2hvdWxkR2VuZXJhdGUoKSk7Ci0gICAgICAgICAgICBp
ZiAoc3RvcmFnZSA9PSBOb05vZGUpCisgICAgICAgICAgICBOb2RlKiBzdG9yYWdlID0gY2hlY2tB
cnJheShhcnJheU1vZGUsIG5vZGUtPmNvZGVPcmlnaW4sIG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwg
MCwgbGVuZ3RoTmVlZHNTdG9yYWdlLCBub2RlLT5zaG91bGRHZW5lcmF0ZSgpKTsKKyAgICAgICAg
ICAgIGlmICghc3RvcmFnZSkKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIAot
ICAgICAgICAgICAgbm9kZVB0ciA9ICZtX2dyYXBoW21fY29tcGlsZUluZGV4XTsKLSAgICAgICAg
ICAgIG5vZGVQdHItPmNoaWxkcmVuLmNoaWxkMigpID0gRWRnZShzdG9yYWdlKTsKKyAgICAgICAg
ICAgIG5vZGUtPmNoaWxkcmVuLmNoaWxkMigpID0gRWRnZShzdG9yYWdlKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgR2V0SW5kZXhlZFByb3BlcnR5U3RvcmFn
ZTogewotICAgICAgICAgICAgQVNTRVJUKG5vZGUuYXJyYXlNb2RlKCkuY2FuQ1NFU3RvcmFnZSgp
KTsKKyAgICAgICAgICAgIEFTU0VSVChub2RlLT5hcnJheU1vZGUoKS5jYW5DU0VTdG9yYWdlKCkp
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBHZXRCeVZhbDog
ewotICAgICAgICAgICAgbm9kZS5zZXRBcnJheU1vZGUoCi0gICAgICAgICAgICAgICAgbm9kZS5h
cnJheU1vZGUoKS5yZWZpbmUoCi0gICAgICAgICAgICAgICAgICAgIG1fZ3JhcGhbbm9kZS5jaGls
ZDEoKV0ucHJlZGljdGlvbigpLAotICAgICAgICAgICAgICAgICAgICBtX2dyYXBoW25vZGUuY2hp
bGQyKCldLnByZWRpY3Rpb24oKSwKLSAgICAgICAgICAgICAgICAgICAgU3BlY05vbmUsIG5vZGUu
ZmxhZ3MoKSkpOworICAgICAgICAgICAgbm9kZS0+c2V0QXJyYXlNb2RlKAorICAgICAgICAgICAg
ICAgIG5vZGUtPmFycmF5TW9kZSgpLnJlZmluZSgKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+
Y2hpbGQxKCktPnByZWRpY3Rpb24oKSwKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQy
KCktPnByZWRpY3Rpb24oKSwKKyAgICAgICAgICAgICAgICAgICAgU3BlY05vbmUsIG5vZGUtPmZs
YWdzKCkpKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgYmxlc3NBcnJheU9wZXJhdGlvbihu
b2RlLmNoaWxkMSgpLCBub2RlLmNoaWxkMigpLCAyKTsKKyAgICAgICAgICAgIGJsZXNzQXJyYXlP
cGVyYXRpb24obm9kZS0+Y2hpbGQxKCksIG5vZGUtPmNoaWxkMigpLCAyKTsKICAgICAgICAgICAg
IAotICAgICAgICAgICAgTm9kZSogbm9kZVB0ciA9ICZtX2dyYXBoW21fY29tcGlsZUluZGV4XTsK
LSAgICAgICAgICAgIEFycmF5TW9kZSBhcnJheU1vZGUgPSBub2RlUHRyLT5hcnJheU1vZGUoKTsK
KyAgICAgICAgICAgIEFycmF5TW9kZSBhcnJheU1vZGUgPSBub2RlLT5hcnJheU1vZGUoKTsKICAg
ICAgICAgICAgIGlmIChhcnJheU1vZGUudHlwZSgpID09IEFycmF5OjpEb3VibGUKICAgICAgICAg
ICAgICAgICAmJiBhcnJheU1vZGUuYXJyYXlDbGFzcygpID09IEFycmF5OjpPcmlnaW5hbEFycmF5
CiAgICAgICAgICAgICAgICAgJiYgYXJyYXlNb2RlLnNwZWN1bGF0aW9uKCkgPT0gQXJyYXk6Oklu
Qm91bmRzCiAgICAgICAgICAgICAgICAgJiYgYXJyYXlNb2RlLmNvbnZlcnNpb24oKSA9PSBBcnJh
eTo6QXNJcwotICAgICAgICAgICAgICAgICYmIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGVQ
dHItPmNvZGVPcmlnaW4pLT5hcnJheVByb3RvdHlwZUNoYWluSXNTYW5lKCkKLSAgICAgICAgICAg
ICAgICAmJiAhKG5vZGVQdHItPmZsYWdzKCkgJiBOb2RlVXNlZEFzT3RoZXIpKQotICAgICAgICAg
ICAgICAgIG5vZGVQdHItPnNldEFycmF5TW9kZShhcnJheU1vZGUud2l0aFNwZWN1bGF0aW9uKEFy
cmF5OjpTYW5lQ2hhaW4pKTsKKyAgICAgICAgICAgICAgICAmJiBtX2dyYXBoLmdsb2JhbE9iamVj
dEZvcihub2RlLT5jb2RlT3JpZ2luKS0+YXJyYXlQcm90b3R5cGVDaGFpbklzU2FuZSgpCisgICAg
ICAgICAgICAgICAgJiYgIShub2RlLT5mbGFncygpICYgTm9kZVVzZWRBc090aGVyKSkKKyAgICAg
ICAgICAgICAgICBub2RlLT5zZXRBcnJheU1vZGUoYXJyYXlNb2RlLndpdGhTcGVjdWxhdGlvbihB
cnJheTo6U2FuZUNoYWluKSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICB9CiAgICAgICAgIGNhc2UgU3RyaW5nQ2hhckF0OgogICAgICAgICBjYXNlIFN0cmluZ0No
YXJDb2RlQXQ6IHsKICAgICAgICAgICAgIC8vIEN1cnJlbnRseSB3ZSBoYXZlIG5vIGdvb2Qgd2F5
IG9mIHJlZmluaW5nIHRoZXNlLgotICAgICAgICAgICAgQVNTRVJUKG5vZGUuYXJyYXlNb2RlKCkg
PT0gQXJyYXlNb2RlKEFycmF5OjpTdHJpbmcpKTsKLSAgICAgICAgICAgIGJsZXNzQXJyYXlPcGVy
YXRpb24obm9kZS5jaGlsZDEoKSwgbm9kZS5jaGlsZDIoKSwgMik7CisgICAgICAgICAgICBBU1NF
UlQobm9kZS0+YXJyYXlNb2RlKCkgPT0gQXJyYXlNb2RlKEFycmF5OjpTdHJpbmcpKTsKKyAgICAg
ICAgICAgIGJsZXNzQXJyYXlPcGVyYXRpb24obm9kZS0+Y2hpbGQxKCksIG5vZGUtPmNoaWxkMigp
LCAyKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKQEAgLTE2
NywxNSArMTU4LDE0IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAvLyBpZ25vcmVkLiBUaGF0J3Mg
YmVjYXVzZSBBcnJheVB1c2ggY2FuJ3QgaGFuZGxlIGFueSBhcnJheSBtb2RlcyB0aGF0IGFyZW4n
dAogICAgICAgICAgICAgLy8gYXJyYXktcmVsYXRlZCAtIHNvIGlmIHJlZmluZSgpIHR1cm5lZCB0
aGlzIGludG8gYSAiR2VuZXJpYyIgQXJyYXlQdXNoIHRoZW4KICAgICAgICAgICAgIC8vIHRoYXQg
d291bGQgYnJlYWsgdGhpbmdzLgotICAgICAgICAgICAgbm9kZS5zZXRBcnJheU1vZGUoCi0gICAg
ICAgICAgICAgICAgbm9kZS5hcnJheU1vZGUoKS5yZWZpbmUoCi0gICAgICAgICAgICAgICAgICAg
IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ucHJlZGljdGlvbigpICYgU3BlY0NlbGwsCisgICAgICAg
ICAgICBub2RlLT5zZXRBcnJheU1vZGUoCisgICAgICAgICAgICAgICAgbm9kZS0+YXJyYXlNb2Rl
KCkucmVmaW5lKAorICAgICAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDEoKS0+cHJlZGljdGlv
bigpICYgU3BlY0NlbGwsCiAgICAgICAgICAgICAgICAgICAgIFNwZWNJbnQzMiwKLSAgICAgICAg
ICAgICAgICAgICAgbV9ncmFwaFtub2RlLmNoaWxkMigpXS5wcmVkaWN0aW9uKCkpKTsKLSAgICAg
ICAgICAgIGJsZXNzQXJyYXlPcGVyYXRpb24obm9kZS5jaGlsZDEoKSwgRWRnZSgpLCAyKTsKKyAg
ICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQyKCktPnByZWRpY3Rpb24oKSkpOworICAgICAg
ICAgICAgYmxlc3NBcnJheU9wZXJhdGlvbihub2RlLT5jaGlsZDEoKSwgRWRnZSgpLCAyKTsKICAg
ICAgICAgICAgIAotICAgICAgICAgICAgTm9kZSogbm9kZVB0ciA9ICZtX2dyYXBoW21fY29tcGls
ZUluZGV4XTsKLSAgICAgICAgICAgIHN3aXRjaCAobm9kZVB0ci0+YXJyYXlNb2RlKCkudHlwZSgp
KSB7CisgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPmFycmF5TW9kZSgpLnR5cGUoKSkgewogICAg
ICAgICAgICAgY2FzZSBBcnJheTo6RG91YmxlOgogICAgICAgICAgICAgICAgIGZpeERvdWJsZUVk
Z2UoMSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0xODYsMTUgKzE3NiwxNSBAQCBwcml2
YXRlOgogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBBcnJheVBvcDogewot
ICAgICAgICAgICAgYmxlc3NBcnJheU9wZXJhdGlvbihub2RlLmNoaWxkMSgpLCBFZGdlKCksIDEp
OworICAgICAgICAgICAgYmxlc3NBcnJheU9wZXJhdGlvbihub2RlLT5jaGlsZDEoKSwgRWRnZSgp
LCAxKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAg
ICAgY2FzZSBWYWx1ZVRvSW50MzI6IHsKLSAgICAgICAgICAgIGlmIChtX2dyYXBoW25vZGUuY2hp
bGQxKCldLnNob3VsZFNwZWN1bGF0ZU51bWJlcigpCi0gICAgICAgICAgICAgICAgJiYgbm9kZS5t
dXN0R2VuZXJhdGUoKSkgewotICAgICAgICAgICAgICAgIG5vZGUuY2xlYXJGbGFncyhOb2RlTXVz
dEdlbmVyYXRlKTsKLSAgICAgICAgICAgICAgICBtX2dyYXBoLmRlcmVmKG1fY29tcGlsZUluZGV4
KTsKKyAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlTnVtYmVy
KCkKKyAgICAgICAgICAgICAgICAmJiBub2RlLT5tdXN0R2VuZXJhdGUoKSkgeworICAgICAgICAg
ICAgICAgIG5vZGUtPmNsZWFyRmxhZ3MoTm9kZU11c3RHZW5lcmF0ZSk7CisgICAgICAgICAgICAg
ICAgbV9ncmFwaC5kZXJlZihub2RlKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9CkBAIC0yMDUsOCArMTk1LDggQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBC
aXRSU2hpZnQ6CiAgICAgICAgIGNhc2UgQml0TFNoaWZ0OgogICAgICAgICBjYXNlIEJpdFVSU2hp
ZnQ6IHsKLSAgICAgICAgICAgIGZpeEludEVkZ2Uobm9kZS5jaGlsZHJlbi5jaGlsZDEoKSk7Ci0g
ICAgICAgICAgICBmaXhJbnRFZGdlKG5vZGUuY2hpbGRyZW4uY2hpbGQyKCkpOworICAgICAgICAg
ICAgZml4SW50RWRnZShub2RlLT5jaGlsZHJlbi5jaGlsZDEoKSk7CisgICAgICAgICAgICBmaXhJ
bnRFZGdlKG5vZGUtPmNoaWxkcmVuLmNoaWxkMigpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICB9CiAgICAgICAgICAgICAKQEAgLTIxNiw5ICsyMDYsOSBAQCBwcml2YXRlOgogICAgICAg
ICBjYXNlIENvbXBhcmVHcmVhdGVyOgogICAgICAgICBjYXNlIENvbXBhcmVHcmVhdGVyRXE6CiAg
ICAgICAgIGNhc2UgQ29tcGFyZVN0cmljdEVxOiB7Ci0gICAgICAgICAgICBpZiAoTm9kZTo6c2hv
dWxkU3BlY3VsYXRlSW50ZWdlcihtX2dyYXBoW25vZGUuY2hpbGQxKCldLCBtX2dyYXBoW25vZGUu
Y2hpbGQyKCldKSkKKyAgICAgICAgICAgIGlmIChOb2RlOjpzaG91bGRTcGVjdWxhdGVJbnRlZ2Vy
KG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgbm9kZS0+Y2hpbGQyKCkubm9kZSgpKSkKICAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGlmICghTm9kZTo6c2hvdWxkU3BlY3VsYXRlTnVt
YmVyKG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0sIG1fZ3JhcGhbbm9kZS5jaGlsZDIoKV0pKQorICAg
ICAgICAgICAgaWYgKCFOb2RlOjpzaG91bGRTcGVjdWxhdGVOdW1iZXIobm9kZS0+Y2hpbGQxKCku
bm9kZSgpLCBub2RlLT5jaGlsZDIoKS5ub2RlKCkpKQogICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgZml4RG91YmxlRWRnZSgwKTsKICAgICAgICAgICAgIGZpeERvdWJsZUVkZ2Uo
MSk7CkBAIC0yMjYsNDMgKzIxNiw0MSBAQCBwcml2YXRlOgogICAgICAgICB9CiAgICAgICAgICAg
ICAKICAgICAgICAgY2FzZSBMb2dpY2FsTm90OiB7Ci0gICAgICAgICAgICBpZiAobV9ncmFwaFtu
b2RlLmNoaWxkMSgpXS5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpCisgICAgICAgICAgICBpZiAo
bm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKSkKICAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgIGlmICghbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5zaG91bGRT
cGVjdWxhdGVOdW1iZXIoKSkKKyAgICAgICAgICAgIGlmICghbm9kZS0+Y2hpbGQxKCktPnNob3Vs
ZFNwZWN1bGF0ZU51bWJlcigpKQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
Zml4RG91YmxlRWRnZSgwKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAg
ICAgICAKICAgICAgICAgY2FzZSBCcmFuY2g6IHsKLSAgICAgICAgICAgIGlmICghbV9ncmFwaFtu
b2RlLmNoaWxkMSgpXS5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkKLSAgICAgICAgICAgICAgICAm
JiBtX2dyYXBoW25vZGUuY2hpbGQxKCldLnNob3VsZFNwZWN1bGF0ZU51bWJlcigpKQorICAgICAg
ICAgICAgaWYgKCFub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpCisgICAg
ICAgICAgICAgICAgJiYgbm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZU51bWJlcigpKQog
ICAgICAgICAgICAgICAgIGZpeERvdWJsZUVkZ2UoMCk7CiAKLSAgICAgICAgICAgIE5vZGUmIG15
Tm9kZSA9IG1fZ3JhcGhbbV9jb21waWxlSW5kZXhdOyAvLyByZWxvYWQgYmVjYXVzZSB0aGUgZ3Jh
cGggbWF5IGhhdmUgY2hhbmdlZAotICAgICAgICAgICAgRWRnZSBsb2dpY2FsTm90RWRnZSA9IG15
Tm9kZS5jaGlsZDEoKTsKLSAgICAgICAgICAgIE5vZGUmIGxvZ2ljYWxOb3QgPSBtX2dyYXBoW2xv
Z2ljYWxOb3RFZGdlXTsKLSAgICAgICAgICAgIGlmIChsb2dpY2FsTm90Lm9wKCkgPT0gTG9naWNh
bE5vdAotICAgICAgICAgICAgICAgICYmIGxvZ2ljYWxOb3QuYWRqdXN0ZWRSZWZDb3VudCgpID09
IDEpIHsKLSAgICAgICAgICAgICAgICBFZGdlIG5ld0NoaWxkRWRnZSA9IGxvZ2ljYWxOb3QuY2hp
bGQxKCk7Ci0gICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGhbbmV3Q2hpbGRFZGdlXS5oYXNCb29s
ZWFuUmVzdWx0KCkpIHsKKyAgICAgICAgICAgIE5vZGUqIGxvZ2ljYWxOb3QgPSBub2RlLT5jaGls
ZDEoKS5ub2RlKCk7CisgICAgICAgICAgICBpZiAobG9naWNhbE5vdC0+b3AoKSA9PSBMb2dpY2Fs
Tm90CisgICAgICAgICAgICAgICAgJiYgbG9naWNhbE5vdC0+YWRqdXN0ZWRSZWZDb3VudCgpID09
IDEpIHsKKyAgICAgICAgICAgICAgICBFZGdlIG5ld0NoaWxkRWRnZSA9IGxvZ2ljYWxOb3QtPmNo
aWxkMSgpOworICAgICAgICAgICAgICAgIGlmIChuZXdDaGlsZEVkZ2UtPmhhc0Jvb2xlYW5SZXN1
bHQoKSkgewogICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLnJlZihuZXdDaGlsZEVkZ2UpOwot
ICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLmRlcmVmKGxvZ2ljYWxOb3RFZGdlKTsKKyAgICAg
ICAgICAgICAgICAgICAgbV9ncmFwaC5kZXJlZihsb2dpY2FsTm90KTsKICAgICAgICAgICAgICAg
ICAgICAgbXlOb2RlLmNoaWxkcmVuLnNldENoaWxkMShuZXdDaGlsZEVkZ2UpOwogICAgICAgICAg
ICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgQmxvY2tJbmRleCB0b0JlVGFrZW4gPSBt
eU5vZGUubm90VGFrZW5CbG9ja0luZGV4KCk7Ci0gICAgICAgICAgICAgICAgICAgIEJsb2NrSW5k
ZXggdG9CZU5vdFRha2VuID0gbXlOb2RlLnRha2VuQmxvY2tJbmRleCgpOwotICAgICAgICAgICAg
ICAgICAgICBteU5vZGUuc2V0VGFrZW5CbG9ja0luZGV4KHRvQmVUYWtlbik7Ci0gICAgICAgICAg
ICAgICAgICAgIG15Tm9kZS5zZXROb3RUYWtlbkJsb2NrSW5kZXgodG9CZU5vdFRha2VuKTsKKyAg
ICAgICAgICAgICAgICAgICAgQmxvY2tJbmRleCB0b0JlVGFrZW4gPSBub2RlLT5ub3RUYWtlbkJs
b2NrSW5kZXgoKTsKKyAgICAgICAgICAgICAgICAgICAgQmxvY2tJbmRleCB0b0JlTm90VGFrZW4g
PSBub2RlLT50YWtlbkJsb2NrSW5kZXgoKTsKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+c2V0
VGFrZW5CbG9ja0luZGV4KHRvQmVUYWtlbik7CisgICAgICAgICAgICAgICAgICAgIG5vZGUtPnNl
dE5vdFRha2VuQmxvY2tJbmRleCh0b0JlTm90VGFrZW4pOwogICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAK
ICAgICAgICAgY2FzZSBTZXRMb2NhbDogewotICAgICAgICAgICAgaWYgKG5vZGUudmFyaWFibGVB
Y2Nlc3NEYXRhKCktPmlzQ2FwdHVyZWQoKSkKKyAgICAgICAgICAgIGlmIChub2RlLT52YXJpYWJs
ZUFjY2Vzc0RhdGEoKS0+aXNDYXB0dXJlZCgpKQogICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgaWYgKCFub2RlLnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5zaG91bGRVc2VEb3VibGVG
b3JtYXQoKSkKKyAgICAgICAgICAgIGlmICghbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCktPnNo
b3VsZFVzZURvdWJsZUZvcm1hdCgpKQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgZml4RG91YmxlRWRnZSgwKTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMjcyLDcgKzI2MCw3
IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgVmFsdWVBZGQ6IHsKICAgICAgICAgICAgIGlmICht
X2dyYXBoLmFkZFNob3VsZFNwZWN1bGF0ZUludGVnZXIobm9kZSkpCiAgICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICBpZiAoIU5vZGU6OnNob3VsZFNwZWN1bGF0ZU51bWJlckV4cGVj
dGluZ0RlZmluZWQobV9ncmFwaFtub2RlLmNoaWxkMSgpXSwgbV9ncmFwaFtub2RlLmNoaWxkMigp
XSkpCisgICAgICAgICAgICBpZiAoIU5vZGU6OnNob3VsZFNwZWN1bGF0ZU51bWJlckV4cGVjdGlu
Z0RlZmluZWQobm9kZS0+Y2hpbGQxKCkubm9kZSgpLCBub2RlLT5jaGlsZDIoKS5ub2RlKCkpKQog
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgZml4RG91YmxlRWRnZSgwKTsKICAg
ICAgICAgICAgIGZpeERvdWJsZUVkZ2UoMSk7CkBAIC0yODEsNyArMjY5LDcgQEAgcHJpdmF0ZToK
ICAgICAgICAgICAgIAogICAgICAgICBjYXNlIEFyaXRoU3ViOiB7CiAgICAgICAgICAgICBpZiAo
bV9ncmFwaC5hZGRTaG91bGRTcGVjdWxhdGVJbnRlZ2VyKG5vZGUpCi0gICAgICAgICAgICAgICAg
JiYgbm9kZS5jYW5TcGVjdWxhdGVJbnRlZ2VyKCkpCisgICAgICAgICAgICAgICAgJiYgbm9kZS0+
Y2FuU3BlY3VsYXRlSW50ZWdlcigpKQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgZml4RG91YmxlRWRnZSgwKTsKICAgICAgICAgICAgIGZpeERvdWJsZUVkZ2UoMSk7CkBAIC0y
OTgsOCArMjg2LDggQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBBcml0aE1pbjoKICAgICAgICAg
Y2FzZSBBcml0aE1heDoKICAgICAgICAgY2FzZSBBcml0aE1vZDogewotICAgICAgICAgICAgaWYg
KE5vZGU6OnNob3VsZFNwZWN1bGF0ZUludGVnZXJGb3JBcml0aG1ldGljKG1fZ3JhcGhbbm9kZS5j
aGlsZDEoKV0sIG1fZ3JhcGhbbm9kZS5jaGlsZDIoKV0pCi0gICAgICAgICAgICAgICAgJiYgbm9k
ZS5jYW5TcGVjdWxhdGVJbnRlZ2VyKCkpCisgICAgICAgICAgICBpZiAoTm9kZTo6c2hvdWxkU3Bl
Y3VsYXRlSW50ZWdlckZvckFyaXRobWV0aWMobm9kZS0+Y2hpbGQxKCkubm9kZSgpLCBub2RlLT5j
aGlsZDIoKS5ub2RlKCkpCisgICAgICAgICAgICAgICAgJiYgbm9kZS0+Y2FuU3BlY3VsYXRlSW50
ZWdlcigpKQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgZml4RG91YmxlRWRn
ZSgwKTsKICAgICAgICAgICAgIGZpeERvdWJsZUVkZ2UoMSk7CkBAIC0zMTUsOCArMzAzLDggQEAg
cHJpdmF0ZToKICAgICAgICAgfQogCiAgICAgICAgIGNhc2UgQXJpdGhEaXY6IHsKLSAgICAgICAg
ICAgIGlmIChOb2RlOjpzaG91bGRTcGVjdWxhdGVJbnRlZ2VyRm9yQXJpdGhtZXRpYyhtX2dyYXBo
W25vZGUuY2hpbGQxKCldLCBtX2dyYXBoW25vZGUuY2hpbGQyKCldKQotICAgICAgICAgICAgICAg
ICYmIG5vZGUuY2FuU3BlY3VsYXRlSW50ZWdlcigpKSB7CisgICAgICAgICAgICBpZiAoTm9kZTo6
c2hvdWxkU3BlY3VsYXRlSW50ZWdlckZvckFyaXRobWV0aWMobm9kZS0+Y2hpbGQxKCkubm9kZSgp
LCBub2RlLT5jaGlsZDIoKS5ub2RlKCkpCisgICAgICAgICAgICAgICAgJiYgbm9kZS0+Y2FuU3Bl
Y3VsYXRlSW50ZWdlcigpKSB7CiAgICAgICAgICAgICAgICAgaWYgKGlzWDg2KCkpCiAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIGluamVjdEludDMyVG9Eb3VibGVO
b2RlKDApOwpAQCAtMzI0LDEyICszMTIsMTEgQEAgcHJpdmF0ZToKIAogICAgICAgICAgICAgICAg
IC8vIFdlIGRvbid0IG5lZWQgdG8gZG8gcmVmJ2luZyBvbiB0aGUgY2hpbGRyZW4gYmVjYXVzZSB3
ZSdyZSBzdGVhbGluZyB0aGVtIGZyb20KICAgICAgICAgICAgICAgICAvLyB0aGUgb3JpZ2luYWwg
ZGl2aXNpb24uCi0gICAgICAgICAgICAgICAgTm9kZUluZGV4IG5ld0RpdmlzaW9uSW5kZXggPSBt
X2luc2VydGlvblNldC5pbnNlcnROb2RlKAotICAgICAgICAgICAgICAgICAgICBtX2luZGV4SW5C
bG9jaywgRG9udFJlZkNoaWxkcmVuLCBSZWZOb2RlLCBTcGVjRG91YmxlLCBtX2dyYXBoW21fY29t
cGlsZUluZGV4XSk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgbV9ncmFwaFtt
X2NvbXBpbGVJbmRleF0uc2V0T3AoRG91YmxlQXNJbnQzMik7Ci0gICAgICAgICAgICAgICAgbV9n
cmFwaFttX2NvbXBpbGVJbmRleF0uY2hpbGRyZW4uaW5pdGlhbGl6ZShFZGdlKG5ld0RpdmlzaW9u
SW5kZXgsIERvdWJsZVVzZSksIEVkZ2UoKSwgRWRnZSgpKTsKKyAgICAgICAgICAgICAgICBOb2Rl
KiBuZXdEaXZpc2lvbiA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCisgICAgICAgICAgICAg
ICAgICAgIG1faW5kZXhJbkJsb2NrLCBEb250UmVmQ2hpbGRyZW4sIFJlZk5vZGUsIFNwZWNEb3Vi
bGUsIG5vZGUpOwogICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIG5vZGUtPnNldE9w
KERvdWJsZUFzSW50MzIpOworICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkcmVuLmluaXRpYWxp
emUoRWRnZShuZXdEaXZpc2lvbiwgRG91YmxlVXNlKSwgRWRnZSgpLCBFZGdlKCkpOwogICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZml4RG91YmxlRWRn
ZSgwKTsKQEAgLTMzOCw4ICszMjUsOCBAQCBwcml2YXRlOgogICAgICAgICB9CiAgICAgICAgICAg
ICAKICAgICAgICAgY2FzZSBBcml0aEFiczogewotICAgICAgICAgICAgaWYgKG1fZ3JhcGhbbm9k
ZS5jaGlsZDEoKV0uc2hvdWxkU3BlY3VsYXRlSW50ZWdlckZvckFyaXRobWV0aWMoKQotICAgICAg
ICAgICAgICAgICYmIG5vZGUuY2FuU3BlY3VsYXRlSW50ZWdlcigpKQorICAgICAgICAgICAgaWYg
KG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyRm9yQXJpdGhtZXRpYygpCisg
ICAgICAgICAgICAgICAgJiYgbm9kZS0+Y2FuU3BlY3VsYXRlSW50ZWdlcigpKQogICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgZml4RG91YmxlRWRnZSgwKTsKICAgICAgICAgICAg
IGJyZWFrOwpAQCAtMzU4LDE1ICszNDUsMTMgQEAgcHJpdmF0ZToKIAogICAgICAgICAgICAgbm9k
ZS5zZXRBcnJheU1vZGUoCiAgICAgICAgICAgICAgICAgbm9kZS5hcnJheU1vZGUoKS5yZWZpbmUo
Ci0gICAgICAgICAgICAgICAgICAgIG1fZ3JhcGhbY2hpbGQxXS5wcmVkaWN0aW9uKCksCi0gICAg
ICAgICAgICAgICAgICAgIG1fZ3JhcGhbY2hpbGQyXS5wcmVkaWN0aW9uKCksCi0gICAgICAgICAg
ICAgICAgICAgIG1fZ3JhcGhbY2hpbGQzXS5wcmVkaWN0aW9uKCkpKTsKKyAgICAgICAgICAgICAg
ICAgICAgY2hpbGQxLT5wcmVkaWN0aW9uKCksCisgICAgICAgICAgICAgICAgICAgIGNoaWxkMi0+
cHJlZGljdGlvbigpLAorICAgICAgICAgICAgICAgICAgICBjaGlsZDMtPnByZWRpY3Rpb24oKSkp
OwogICAgICAgICAgICAgCiAgICAgICAgICAgICBibGVzc0FycmF5T3BlcmF0aW9uKGNoaWxkMSwg
Y2hpbGQyLCAzKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgTm9kZSogbm9kZVB0ciA9ICZt
X2dyYXBoW21fY29tcGlsZUluZGV4XTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgc3dpdGNo
IChub2RlUHRyLT5hcnJheU1vZGUoKS5tb2RlRm9yUHV0KCkudHlwZSgpKSB7CisgICAgICAgICAg
ICBzd2l0Y2ggKG5vZGUtPmFycmF5TW9kZSgpLm1vZGVGb3JQdXQoKS50eXBlKCkpIHsKICAgICAg
ICAgICAgIGNhc2UgQXJyYXk6OkRvdWJsZToKICAgICAgICAgICAgICAgICBmaXhEb3VibGVFZGdl
KDIpOwogICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMzc3LDcgKzM2Miw3IEBAIHByaXZhdGU6
CiAgICAgICAgICAgICBjYXNlIEFycmF5OjpVaW50OENsYW1wZWRBcnJheToKICAgICAgICAgICAg
IGNhc2UgQXJyYXk6OlVpbnQxNkFycmF5OgogICAgICAgICAgICAgY2FzZSBBcnJheTo6VWludDMy
QXJyYXk6Ci0gICAgICAgICAgICAgICAgaWYgKCFtX2dyYXBoW2NoaWxkM10uc2hvdWxkU3BlY3Vs
YXRlSW50ZWdlcigpKQorICAgICAgICAgICAgICAgIGlmICghY2hpbGQzLT5zaG91bGRTcGVjdWxh
dGVJbnRlZ2VyKCkpCiAgICAgICAgICAgICAgICAgICAgIGZpeERvdWJsZUVkZ2UoMik7CiAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIEFycmF5OjpGbG9hdDMyQXJyYXk6
CkBAIC0zOTIsMTEgKzM3NywxMSBAQCBwcml2YXRlOgogICAgICAgICAgICAgCiAgICAgICAgIGNh
c2UgTmV3QXJyYXk6IHsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1fZ3JhcGgudmFy
QXJnTnVtQ2hpbGRyZW4obm9kZSk7IGktLTspIHsKLSAgICAgICAgICAgICAgICBub2RlLnNldElu
ZGV4aW5nVHlwZSgKKyAgICAgICAgICAgICAgICBub2RlLT5zZXRJbmRleGluZ1R5cGUoCiAgICAg
ICAgICAgICAgICAgICAgIGxlYXN0VXBwZXJCb3VuZE9mSW5kZXhpbmdUeXBlQW5kVHlwZSgKLSAg
ICAgICAgICAgICAgICAgICAgICAgIG5vZGUuaW5kZXhpbmdUeXBlKCksIG1fZ3JhcGhbbV9ncmFw
aC52YXJBcmdDaGlsZChub2RlLCBpKV0ucHJlZGljdGlvbigpKSk7CisgICAgICAgICAgICAgICAg
ICAgICAgICBub2RlLmluZGV4aW5nVHlwZSgpLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIGkp
LT5wcmVkaWN0aW9uKCkpKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChub2RlLmlu
ZGV4aW5nVHlwZSgpID09IEFycmF5V2l0aERvdWJsZSkgeworICAgICAgICAgICAgaWYgKG5vZGUt
PmluZGV4aW5nVHlwZSgpID09IEFycmF5V2l0aERvdWJsZSkgewogICAgICAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IG1fZ3JhcGgudmFyQXJnTnVtQ2hpbGRyZW4obm9kZSk7IGktLTspCiAg
ICAgICAgICAgICAgICAgICAgIGZpeERvdWJsZUVkZ2UoaSk7CiAgICAgICAgICAgICB9CkBAIC00
MDgsMTYgKzM5MywxNSBAQCBwcml2YXRlOgogICAgICAgICB9CiAKICNpZiBERkdfRU5BQkxFKERF
QlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCi0gICAgICAgIE5vZGUqIG5vZGVQdHIgPSAmbV9ncmFw
aFttX2NvbXBpbGVJbmRleF07Ci0gICAgICAgIGlmICghKG5vZGVQdHItPmZsYWdzKCkgJiBOb2Rl
SGFzVmFyQXJncykpIHsKKyAgICAgICAgaWYgKCEobm9kZS0+ZmxhZ3MoKSAmIE5vZGVIYXNWYXJB
cmdzKSkgewogICAgICAgICAgICAgZGF0YUxvZ0YoIm5ldyBjaGlsZHJlbjogIik7Ci0gICAgICAg
ICAgICBub2RlUHRyLT5kdW1wQ2hpbGRyZW4oV1RGOjpkYXRhRmlsZSgpKTsKKyAgICAgICAgICAg
IG5vZGUtPmR1bXBDaGlsZHJlbihXVEY6OmRhdGFGaWxlKCkpOwogICAgICAgICB9CiAgICAgICAg
IGRhdGFMb2dGKCJcbiIpOwogI2VuZGlmCiAgICAgfQogICAgIAotICAgIE5vZGVJbmRleCBjaGVj
a0FycmF5KEFycmF5TW9kZSBhcnJheU1vZGUsIENvZGVPcmlnaW4gY29kZU9yaWdpbiwgTm9kZUlu
ZGV4IGFycmF5LCBOb2RlSW5kZXggaW5kZXgsIGJvb2wgKCpzdG9yYWdlQ2hlY2spKGNvbnN0IEFy
cmF5TW9kZSYpID0gY2FuQ1NFU3RvcmFnZSwgYm9vbCBzaG91bGRHZW5lcmF0ZSA9IHRydWUpCisg
ICAgTm9kZSogY2hlY2tBcnJheShBcnJheU1vZGUgYXJyYXlNb2RlLCBDb2RlT3JpZ2luIGNvZGVP
cmlnaW4sIE5vZGUqIGFycmF5LCBOb2RlKiBpbmRleCwgYm9vbCAoKnN0b3JhZ2VDaGVjaykoY29u
c3QgQXJyYXlNb2RlJikgPSBjYW5DU0VTdG9yYWdlLCBib29sIHNob3VsZEdlbmVyYXRlID0gdHJ1
ZSkKICAgICB7CiAgICAgICAgIEFTU0VSVChhcnJheU1vZGUuaXNTcGVjaWZpYygpKTsKICAgICAg
ICAgCkBAIC00MjgsMTEgKzQxMiwxMSBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIGlmICht
X2luZGV4SW5CbG9jayA+IDApIHsKICAgICAgICAgICAgICAgICAgICAgLy8gSWYgdGhlIHByZXZp
b3VzIG5vZGUgd2FzIGEgQ2hlY2tTdHJ1Y3R1cmUgaW5zZXJ0ZWQgYmVjYXVzZSBvZiBzdHVmZgog
ICAgICAgICAgICAgICAgICAgICAvLyB0aGF0IHRoZSBhcnJheSBwcm9maWxlIHRvbGQgdXMsIHRo
ZW4gcmVtb3ZlIGl0LgotICAgICAgICAgICAgICAgICAgICBOb2RlJiBwcmV2aW91c05vZGUgPSBt
X2dyYXBoW21fYmxvY2stPmF0KG1faW5kZXhJbkJsb2NrIC0gMSldOwotICAgICAgICAgICAgICAg
ICAgICBpZiAocHJldmlvdXNOb2RlLm9wKCkgPT0gQ2hlY2tTdHJ1Y3R1cmUKLSAgICAgICAgICAg
ICAgICAgICAgICAgICYmIHByZXZpb3VzTm9kZS5jaGlsZDEoKSA9PSBhcnJheQotICAgICAgICAg
ICAgICAgICAgICAgICAgJiYgcHJldmlvdXNOb2RlLmNvZGVPcmlnaW4gPT0gY29kZU9yaWdpbikK
LSAgICAgICAgICAgICAgICAgICAgICAgIHByZXZpb3VzTm9kZS5zZXRPcEFuZERlZmF1bHRGbGFn
cyhQaGFudG9tKTsKKyAgICAgICAgICAgICAgICAgICAgTm9kZSogcHJldmlvdXNOb2RlID0gYmxv
Y2stPmF0KG1faW5kZXhJbkJsb2NrIC0gMSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChwcmV2
aW91c05vZGUtPm9wKCkgPT0gQ2hlY2tTdHJ1Y3R1cmUKKyAgICAgICAgICAgICAgICAgICAgICAg
ICYmIHByZXZpb3VzTm9kZS0+Y2hpbGQxKCkgPT0gYXJyYXkKKyAgICAgICAgICAgICAgICAgICAg
ICAgICYmIHByZXZpb3VzTm9kZS0+Y29kZU9yaWdpbiA9PSBjb2RlT3JpZ2luKQorICAgICAgICAg
ICAgICAgICAgICAgICAgcHJldmlvdXNOb2RlLT5zZXRPcEFuZERlZmF1bHRGbGFncyhQaGFudG9t
KTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAg
bV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKQEAgLTQ1Niw3ICs0NDAsNyBAQCBwcml2YXRlOgog
ICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBpZiAoIXN0b3JhZ2VDaGVjayhhcnJheU1vZGUp
KQotICAgICAgICAgICAgcmV0dXJuIE5vTm9kZTsKKyAgICAgICAgICAgIHJldHVybiAwOwogICAg
ICAgICAKICAgICAgICAgaWYgKGFycmF5TW9kZS51c2VzQnV0dGVyZmx5KCkpIHsKICAgICAgICAg
ICAgIHJldHVybiBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKApAQCAtNDc3LDE0ICs0NjEsMTQg
QEAgcHJpdmF0ZToKICAgICB7CiAgICAgICAgIGlmIChtX2dyYXBoLm1fZml4cG9pbnRTdGF0ZSA+
IEJlZm9yZUZpeHBvaW50KQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgCi0gICAg
ICAgIE5vZGUqIG5vZGVQdHIgPSAmbV9ncmFwaFttX2NvbXBpbGVJbmRleF07CiAgICAgICAgIAot
ICAgICAgICBzd2l0Y2ggKG5vZGVQdHItPmFycmF5TW9kZSgpLnR5cGUoKSkgeworICAgICAgICBO
b2RlKiBub2RlID0gbV9jdXJyZW50Tm9kZTsKKyAgICAgICAgCisgICAgICAgIHN3aXRjaCAobm9k
ZS0+YXJyYXlNb2RlKCkudHlwZSgpKSB7CiAgICAgICAgIGNhc2UgQXJyYXk6OkZvcmNlRXhpdDog
ewogICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKICAgICAgICAgICAgICAg
ICBtX2luZGV4SW5CbG9jaywgRG9udFJlZkNoaWxkcmVuLCBEb250UmVmTm9kZSwgU3BlY05vbmUs
IEZvcmNlT1NSRXhpdCwKLSAgICAgICAgICAgICAgICBub2RlUHRyLT5jb2RlT3JpZ2luKTsKKyAg
ICAgICAgICAgICAgICBub2RlLT5jb2RlT3JpZ2luKTsKICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgfQogICAgICAgICAgICAgCkBAIC00OTcsMjYgKzQ4MSwyNiBAQCBwcml2YXRlOgogICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgCiAgICAgICAgIGRlZmF1bHQ6IHsKLSAgICAg
ICAgICAgIE5vZGVJbmRleCBzdG9yYWdlID0gY2hlY2tBcnJheShub2RlUHRyLT5hcnJheU1vZGUo
KSwgbm9kZVB0ci0+Y29kZU9yaWdpbiwgYmFzZS5pbmRleCgpLCBpbmRleC5pbmRleFVuY2hlY2tl
ZCgpKTsKLSAgICAgICAgICAgIGlmIChzdG9yYWdlID09IE5vTm9kZSkKKyAgICAgICAgICAgIE5v
ZGUqIHN0b3JhZ2UgPSBjaGVja0FycmF5KG5vZGUtPmFycmF5TW9kZSgpLCBub2RlLT5jb2RlT3Jp
Z2luLCBiYXNlLm5vZGUoKSwgaW5kZXgubm9kZSgpKTsKKyAgICAgICAgICAgIGlmICghc3RvcmFn
ZSkKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIG1f
Z3JhcGguY2hpbGQobV9ncmFwaFttX2NvbXBpbGVJbmRleF0sIHN0b3JhZ2VDaGlsZElkeCkgPSBF
ZGdlKHN0b3JhZ2UpOworICAgICAgICAgICAgbV9ncmFwaC5jaGlsZChub2RlLCBzdG9yYWdlQ2hp
bGRJZHgpID0gRWRnZShzdG9yYWdlKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfSB9
CiAgICAgfQogICAgIAogICAgIHZvaWQgZml4SW50RWRnZShFZGdlJiBlZGdlKQogICAgIHsKLSAg
ICAgICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhbZWRnZV07Ci0gICAgICAgIGlmIChub2RlLm9wKCkg
IT0gVmFsdWVUb0ludDMyKQorICAgICAgICBOb2RlKiBub2RlID0gZWRnZS5ub2RlKCk7CisgICAg
ICAgIGlmIChub2RlLT5vcCgpICE9IFZhbHVlVG9JbnQzMikKICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgCi0gICAgICAgIGlmICghbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5zaG91bGRTcGVj
dWxhdGVJbnRlZ2VyKCkpCisgICAgICAgIGlmICghbm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1
bGF0ZUludGVnZXIoKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAgICAgIEVk
Z2Ugb2xkRWRnZSA9IGVkZ2U7Ci0gICAgICAgIEVkZ2UgbmV3RWRnZSA9IG5vZGUuY2hpbGQxKCk7
CisgICAgICAgIEVkZ2UgbmV3RWRnZSA9IG5vZGUtPmNoaWxkMSgpOwogICAgICAgICAKICAgICAg
ICAgbV9ncmFwaC5yZWYobmV3RWRnZSk7CiAgICAgICAgIG1fZ3JhcGguZGVyZWYob2xkRWRnZSk7
CkBAIC01MjYsMTEgKzUxMCwxMSBAQCBwcml2YXRlOgogICAgIAogICAgIHZvaWQgZml4RG91Ymxl
RWRnZSh1bnNpZ25lZCBjaGlsZEluZGV4KQogICAgIHsKLSAgICAgICAgTm9kZSYgc291cmNlID0g
bV9ncmFwaFttX2NvbXBpbGVJbmRleF07CisgICAgICAgIE5vZGUqIHNvdXJjZSA9IG1fY3VycmVu
dE5vZGU7CiAgICAgICAgIEVkZ2UmIGVkZ2UgPSBtX2dyYXBoLmNoaWxkKHNvdXJjZSwgY2hpbGRJ
bmRleCk7CiAgICAgICAgIAotICAgICAgICBpZiAobV9ncmFwaFtlZGdlXS5wcmVkaWN0aW9uKCkg
JiBTcGVjRG91YmxlKSB7Ci0gICAgICAgICAgICBlZGdlLnNldFVzZUtpbmQoRG91YmxlVXNlKTsK
KyAgICAgICAgaWYgKGVkZ2UtPnByZWRpY3Rpb24oKSAmIFNwZWNEb3VibGUpIHsKKyAgICAgICAg
ICAgIGVkZ2UtPnNldFVzZUtpbmQoRG91YmxlVXNlKTsKICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgfQogICAgICAgICAKQEAgLTUzOSwyMyArNTIzLDIyIEBAIHByaXZhdGU6CiAKICAgICB2
b2lkIGluamVjdEludDMyVG9Eb3VibGVOb2RlKHVuc2lnbmVkIGNoaWxkSW5kZXgpCiAgICAgewot
ICAgICAgICBOb2RlSW5kZXggcmVzdWx0SW5kZXggPSBtX2luc2VydGlvblNldC5pbnNlcnROb2Rl
KAorICAgICAgICBOb2RlKiByZXN1bHQgPSBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAogICAg
ICAgICAgICAgbV9pbmRleEluQmxvY2ssIERvbnRSZWZDaGlsZHJlbiwgUmVmTm9kZSwgU3BlY0Rv
dWJsZSwgSW50MzJUb0RvdWJsZSwKLSAgICAgICAgICAgIG1fZ3JhcGhbbV9jb21waWxlSW5kZXhd
LmNvZGVPcmlnaW4sCi0gICAgICAgICAgICBtX2dyYXBoLmNoaWxkKG1fZ3JhcGhbbV9jb21waWxl
SW5kZXhdLCBjaGlsZEluZGV4KS5pbmRleCgpKTsKKyAgICAgICAgICAgIG1fY3VycmVudE5vZGUt
PmNvZGVPcmlnaW4sIG1fZ3JhcGguY2hpbGQobV9jdXJyZW50Tm9kZSwgY2hpbGRJbmRleCkubm9k
ZSgpKTsKICAgICAgICAgCiAjaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NF
KQogICAgICAgICBkYXRhTG9nRigKICAgICAgICAgICAgICIocmVwbGFjaW5nIEAldS0+QCV1IHdp
dGggQCV1LT5AJXUpICIsCi0gICAgICAgICAgICBtX2NvbXBpbGVJbmRleCwgbV9ncmFwaC5jaGls
ZChtX2dyYXBoW21fY29tcGlsZUluZGV4XSwgY2hpbGRJbmRleCkuaW5kZXgoKSwgbV9jb21waWxl
SW5kZXgsIHJlc3VsdEluZGV4KTsKKyAgICAgICAgICAgIG1fY3VycmVudE5vZGUtPmluZGV4KCks
IG1fZ3JhcGguY2hpbGQobV9jdXJyZW50Tm9kZSwgY2hpbGRJbmRleCktPmluZGV4KCksIG1fY3Vy
cmVudE5vZGUtPmluZGV4KCksIHJlc3VsdC0+aW5kZXgoKSk7CiAjZW5kaWYKIAotICAgICAgICBt
X2dyYXBoLmNoaWxkKG1fZ3JhcGhbbV9jb21waWxlSW5kZXhdLCBjaGlsZEluZGV4KSA9IEVkZ2Uo
cmVzdWx0SW5kZXgsIERvdWJsZVVzZSk7CisgICAgICAgIG1fZ3JhcGguY2hpbGQobV9jdXJyZW50
Tm9kZSwgY2hpbGRJbmRleCkgPSBFZGdlKHJlc3VsdCwgRG91YmxlVXNlKTsKICAgICB9CiAKICAg
ICBCYXNpY0Jsb2NrKiBtX2Jsb2NrOwogICAgIHVuc2lnbmVkIG1faW5kZXhJbkJsb2NrOwotICAg
IE5vZGVJbmRleCBtX2NvbXBpbGVJbmRleDsKKyAgICBOb2RlKiBtX2N1cnJlbnROb2RlOwogICAg
IEluc2VydGlvblNldCBtX2luc2VydGlvblNldDsKIH07CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkocmV2aXNpb24gMTQwMzA2KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDYgKzQ2
LDcgQEAgR3JhcGg6OkdyYXBoKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgQwogICAgICwgbV9j
b2RlQmxvY2soY29kZUJsb2NrKQogICAgICwgbV9jb21waWxhdGlvbihnbG9iYWxEYXRhLm1fcGVy
Qnl0ZWNvZGVQcm9maWxlciA/IGdsb2JhbERhdGEubV9wZXJCeXRlY29kZVByb2ZpbGVyLT5uZXdD
b21waWxhdGlvbihjb2RlQmxvY2ssIFByb2ZpbGVyOjpERkcpIDogMCkKICAgICAsIG1fcHJvZmls
ZWRCbG9jayhjb2RlQmxvY2stPmFsdGVybmF0aXZlKCkpCisgICAgLCBtX2FsbG9jYXRvcihnbG9i
YWxEYXRhLm1fZGZnU3RhdGUtPm1fYWxsb2NhdG9yKQogICAgICwgbV9oYXNBcmd1bWVudHMoZmFs
c2UpCiAgICAgLCBtX29zckVudHJ5Qnl0ZWNvZGVJbmRleChvc3JFbnRyeUJ5dGVjb2RlSW5kZXgp
CiAgICAgLCBtX211c3RIYW5kbGVWYWx1ZXMobXVzdEhhbmRsZVZhbHVlcykKQEAgLTU0LDYgKzU1
LDExIEBAIEdyYXBoOjpHcmFwaChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEMKICAgICBBU1NF
UlQobV9wcm9maWxlZEJsb2NrKTsKIH0KIAorR3JhcGg6On5HcmFwaCgpCit7CisgICAgbV9hbGxv
Y2F0b3IuZnJlZUFsbCgpOworfQorCiBjb25zdCBjaGFyICpHcmFwaDo6b3BOYW1lKE5vZGVUeXBl
IG9wKQogewogICAgIHJldHVybiBkZmdPcE5hbWVzW29wXTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHR3JhcGguaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0dyYXBoLmgJKHJldmlzaW9uIDE0MDMwNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHR3JhcGguaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDExLCAyMDEyLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzUsNyArMzUsOSBAQAog
I2luY2x1ZGUgIkRGR0Fzc2VtYmx5SGVscGVycy5oIgogI2luY2x1ZGUgIkRGR0Jhc2ljQmxvY2su
aCIKICNpbmNsdWRlICJERkdEb21pbmF0b3JzLmgiCisjaW5jbHVkZSAiREZHTG9uZ0xpdmVkU3Rh
dGUuaCIKICNpbmNsdWRlICJERkdOb2RlLmgiCisjaW5jbHVkZSAiREZHTm9kZUFsbG9jYXRvci5o
IgogI2luY2x1ZGUgIkRGR1ZhcmlhZGljRnVuY3Rpb24uaCIKICNpbmNsdWRlICJKU1N0YWNrLmgi
CiAjaW5jbHVkZSAiTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5oIgpAQCAtODMsNTQgKzg1
LDQ4IEBAIGVudW0gQWRkU3BlY3VsYXRpb25Nb2RlIHsKIC8vCiAvLyA9PT0gR3JhcGggPT09CiAv
LwotLy8gVGhlIGRhdGFmbG93IGdyYXBoIGlzIGFuIG9yZGVyZWQgdmVjdG9yIG9mIG5vZGVzLgog
Ly8gVGhlIG9yZGVyIG1heSBiZSBzaWduaWZpY2FudCBmb3Igbm9kZXMgd2l0aCBzaWRlLWVmZmVj
dHMgKHByb3BlcnR5IGFjY2Vzc2VzLCB2YWx1ZSBjb252ZXJzaW9ucykuCiAvLyBOb2RlcyB0aGF0
IGFyZSAnZGVhZCcgcmVtYWluIGluIHRoZSB2ZWN0b3Igd2l0aCByZWZDb3VudCAwLgotY2xhc3Mg
R3JhcGggOiBwdWJsaWMgVmVjdG9yPE5vZGUsIDY0PiB7CitjbGFzcyBHcmFwaCB7CiBwdWJsaWM6
CiAgICAgR3JhcGgoSlNHbG9iYWxEYXRhJiwgQ29kZUJsb2NrKiwgdW5zaWduZWQgb3NyRW50cnlC
eXRlY29kZUluZGV4LCBjb25zdCBPcGVyYW5kczxKU1ZhbHVlPiYgbXVzdEhhbmRsZVZhbHVlcyk7
Ci0gICAgCi0gICAgdXNpbmcgVmVjdG9yPE5vZGUsIDY0Pjo6b3BlcmF0b3JbXTsKLSAgICB1c2lu
ZyBWZWN0b3I8Tm9kZSwgNjQ+OjphdDsKLSAgICAKLSAgICBOb2RlJiBvcGVyYXRvcltdKEVkZ2Ug
bm9kZVVzZSkgeyByZXR1cm4gYXQobm9kZVVzZS5pbmRleCgpKTsgfQotICAgIGNvbnN0IE5vZGUm
IG9wZXJhdG9yW10oRWRnZSBub2RlVXNlKSBjb25zdCB7IHJldHVybiBhdChub2RlVXNlLmluZGV4
KCkpOyB9Ci0gICAgCi0gICAgTm9kZSYgYXQoRWRnZSBub2RlVXNlKSB7IHJldHVybiBhdChub2Rl
VXNlLmluZGV4KCkpOyB9Ci0gICAgY29uc3QgTm9kZSYgYXQoRWRnZSBub2RlVXNlKSBjb25zdCB7
IHJldHVybiBhdChub2RlVXNlLmluZGV4KCkpOyB9CisgICAgfkdyYXBoKCk7CiAgICAgCiAgICAg
Ly8gTWFyayBhIG5vZGUgYXMgYmVpbmcgcmVmZXJlbmNlZC4KLSAgICBOb2RlSW5kZXggcmVmKE5v
ZGVJbmRleCBub2RlSW5kZXgpCisgICAgTm9kZSogcmVmKE5vZGUqIG5vZGUpCiAgICAgewotICAg
ICAgICBOb2RlJiBub2RlID0gYXQobm9kZUluZGV4KTsKICAgICAgICAgLy8gSWYgdGhlIHZhbHVl
IChiZWZvcmUgaW5jcmVtZW50aW5nKSB3YXMgYXQgcmVmQ291bnQgemVybyB0aGVuIHdlIG5lZWQg
dG8gcmVmIGl0cyBjaGlsZHJlbi4KLSAgICAgICAgaWYgKCFub2RlLnBvc3RmaXhSZWYoKSkKLSAg
ICAgICAgICAgIHJlZkNoaWxkcmVuKG5vZGVJbmRleCk7Ci0gICAgICAgIHJldHVybiBub2RlSW5k
ZXg7CisgICAgICAgIGlmICghbm9kZS0+cG9zdGZpeFJlZigpKQorICAgICAgICAgICAgcmVmQ2hp
bGRyZW4obm9kZSk7CisgICAgICAgIHJldHVybiBub2RlOwogICAgIH0KICAgICBFZGdlIHJlZihF
ZGdlIG5vZGVVc2UpCiAgICAgewotICAgICAgICByZWYobm9kZVVzZS5pbmRleCgpKTsKKyAgICAg
ICAgcmVmKG5vZGVVc2Uubm9kZSgpKTsKICAgICAgICAgcmV0dXJuIG5vZGVVc2U7CiAgICAgfQog
ICAgIAotICAgIHZvaWQgZGVyZWYoTm9kZUluZGV4IG5vZGVJbmRleCkKKyAgICB2b2lkIGRlcmVm
KE5vZGUqIG5vZGUpCiAgICAgewotICAgICAgICBpZiAoYXQobm9kZUluZGV4KS5wb3N0Zml4RGVy
ZWYoKSA9PSAxKQotICAgICAgICAgICAgZGVyZWZDaGlsZHJlbihub2RlSW5kZXgpOworI2lmICFB
U1NFUlRfRElTQUJMRUQKKyAgICAgICAgaWYgKCFub2RlLT5yZWZDb3VudCgpKQorICAgICAgICAg
ICAgZHVtcCgpOworI2VuZGlmCisgICAgICAgIGlmIChub2RlLT5wb3N0Zml4RGVyZWYoKSA9PSAx
KQorICAgICAgICAgICAgZGVyZWZDaGlsZHJlbihub2RlKTsKICAgICB9CiAgICAgdm9pZCBkZXJl
ZihFZGdlIG5vZGVVc2UpCiAgICAgewotICAgICAgICBkZXJlZihub2RlVXNlLmluZGV4KCkpOwor
ICAgICAgICBkZXJlZihub2RlVXNlLm5vZGUoKSk7CiAgICAgfQogICAgIAotICAgIHZvaWQgY2hh
bmdlSW5kZXgoRWRnZSYgZWRnZSwgTm9kZUluZGV4IG5ld0luZGV4LCBib29sIGNoYW5nZVJlZiA9
IHRydWUpCisgICAgdm9pZCBjaGFuZ2VDaGlsZChFZGdlJiBlZGdlLCBOb2RlKiBuZXdOb2RlLCBi
b29sIGNoYW5nZVJlZiA9IHRydWUpCiAgICAgewogICAgICAgICBpZiAoY2hhbmdlUmVmKSB7Ci0g
ICAgICAgICAgICByZWYobmV3SW5kZXgpOwotICAgICAgICAgICAgZGVyZWYoZWRnZS5pbmRleCgp
KTsKKyAgICAgICAgICAgIHJlZihuZXdOb2RlKTsKKyAgICAgICAgICAgIGRlcmVmKGVkZ2Uubm9k
ZSgpKTsKICAgICAgICAgfQotICAgICAgICBlZGdlLnNldEluZGV4KG5ld0luZGV4KTsKKyAgICAg
ICAgZWRnZS5zZXROb2RlKG5ld05vZGUpOwogICAgIH0KICAgICAKICAgICB2b2lkIGNoYW5nZUVk
Z2UoRWRnZSYgZWRnZSwgRWRnZSBuZXdFZGdlLCBib29sIGNoYW5nZVJlZiA9IHRydWUpCkBAIC0x
NDIsMTEgKzEzOCwxMSBAQCBwdWJsaWM6CiAgICAgICAgIGVkZ2UgPSBuZXdFZGdlOwogICAgIH0K
ICAgICAKLSAgICB2b2lkIGNvbXBhcmVBbmRTd2FwKEVkZ2UmIGVkZ2UsIE5vZGVJbmRleCBvbGRJ
bmRleCwgTm9kZUluZGV4IG5ld0luZGV4LCBib29sIGNoYW5nZVJlZikKKyAgICB2b2lkIGNvbXBh
cmVBbmRTd2FwKEVkZ2UmIGVkZ2UsIE5vZGUqIG9sZE5vZGUsIE5vZGUqIG5ld05vZGUsIGJvb2wg
Y2hhbmdlUmVmKQogICAgIHsKLSAgICAgICAgaWYgKGVkZ2UuaW5kZXgoKSAhPSBvbGRJbmRleCkK
KyAgICAgICAgaWYgKGVkZ2Uubm9kZSgpICE9IG9sZE5vZGUpCiAgICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIGNoYW5nZUluZGV4KGVkZ2UsIG5ld0luZGV4LCBjaGFuZ2VSZWYpOworICAgICAg
ICBjaGFuZ2VDaGlsZChlZGdlLCBuZXdOb2RlLCBjaGFuZ2VSZWYpOwogICAgIH0KICAgICAKICAg
ICB2b2lkIGNvbXBhcmVBbmRTd2FwKEVkZ2UmIGVkZ2UsIEVkZ2Ugb2xkRWRnZSwgRWRnZSBuZXdF
ZGdlLCBib29sIGNoYW5nZVJlZikKQEAgLTE1Niw0NCArMTUyLDI5IEBAIHB1YmxpYzoKICAgICAg
ICAgY2hhbmdlRWRnZShlZGdlLCBuZXdFZGdlLCBjaGFuZ2VSZWYpOwogICAgIH0KICAgICAKLSAg
ICB2b2lkIGNsZWFyQW5kRGVyZWZDaGlsZDEoTm9kZSYgbm9kZSkKKyAgICB2b2lkIGNsZWFyQW5k
RGVyZWZDaGlsZChOb2RlKiBub2RlLCB1bnNpZ25lZCBpbmRleCkKICAgICB7Ci0gICAgICAgIGlm
ICghbm9kZS5jaGlsZDEoKSkKKyAgICAgICAgaWYgKCFub2RlLT5jaGlsZHJlbi5jaGlsZChpbmRl
eCkpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGRlcmVmKG5vZGUuY2hpbGQxKCkpOwot
ICAgICAgICBub2RlLmNoaWxkcmVuLmNoaWxkMSgpID0gRWRnZSgpOwotICAgIH0KLQotICAgIHZv
aWQgY2xlYXJBbmREZXJlZkNoaWxkMihOb2RlJiBub2RlKQotICAgIHsKLSAgICAgICAgaWYgKCFu
b2RlLmNoaWxkMigpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBkZXJlZihub2RlLmNo
aWxkMigpKTsKLSAgICAgICAgbm9kZS5jaGlsZHJlbi5jaGlsZDIoKSA9IEVkZ2UoKTsKLSAgICB9
Ci0KLSAgICB2b2lkIGNsZWFyQW5kRGVyZWZDaGlsZDMoTm9kZSYgbm9kZSkKLSAgICB7Ci0gICAg
ICAgIGlmICghbm9kZS5jaGlsZDMoKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgZGVy
ZWYobm9kZS5jaGlsZDMoKSk7Ci0gICAgICAgIG5vZGUuY2hpbGRyZW4uY2hpbGQzKCkgPSBFZGdl
KCk7CisgICAgICAgIGRlcmVmKG5vZGUtPmNoaWxkcmVuLmNoaWxkKGluZGV4KSk7CisgICAgICAg
IG5vZGUuY2hpbGRyZW4uc2V0Q2hpbGQoaW5kZXgsIEVkZ2UoKSk7CiAgICAgfQorICAgIHZvaWQg
Y2xlYXJBbmREZXJlZkNoaWxkMShOb2RlKiBub2RlKSB7IGNsZWFyQW5kRGVyZWZDaGlsZChub2Rl
LCAwKTsgfQorICAgIHZvaWQgY2xlYXJBbmREZXJlZkNoaWxkMihOb2RlKiBub2RlKSB7IGNsZWFy
QW5kRGVyZWZDaGlsZChub2RlLCAxKTsgfQorICAgIHZvaWQgY2xlYXJBbmREZXJlZkNoaWxkMyhO
b2RlKiBub2RlKSB7IGNsZWFyQW5kRGVyZWZDaGlsZChub2RlLCAyKTsgfQogICAgIAogI2RlZmlu
ZSBERkdfREVGSU5FX0FERF9OT0RFKHRlbXBsYXRlUHJlLCB0ZW1wbGF0ZVBvc3QsIHR5cGVQYXJh
bXMsIHZhbHVlUGFyYW1zQ29tbWEsIHZhbHVlUGFyYW1zLCB2YWx1ZUFyZ3MpIFwKLSAgICB0ZW1w
bGF0ZVByZSB0eXBlUGFyYW1zIHRlbXBsYXRlUG9zdCBOb2RlSW5kZXggYWRkTm9kZShSZWZDaGls
ZHJlbk1vZGUgcmVmQ2hpbGRyZW5Nb2RlLCBSZWZOb2RlTW9kZSByZWZOb2RlTW9kZSwgU3BlY3Vs
YXRlZFR5cGUgdHlwZSB2YWx1ZVBhcmFtc0NvbW1hIHZhbHVlUGFyYW1zKSBcCisgICAgdGVtcGxh
dGVQcmUgdHlwZVBhcmFtcyB0ZW1wbGF0ZVBvc3QgTm9kZSogYWRkTm9kZShSZWZDaGlsZHJlbk1v
ZGUgcmVmQ2hpbGRyZW5Nb2RlLCBSZWZOb2RlTW9kZSByZWZOb2RlTW9kZSwgU3BlY3VsYXRlZFR5
cGUgdHlwZSB2YWx1ZVBhcmFtc0NvbW1hIHZhbHVlUGFyYW1zKSBcCiAgICAgeyBcCi0gICAgICAg
IE5vZGUgbm9kZSA9IE5vZGUodmFsdWVBcmdzKTsgXAotICAgICAgICBub2RlLnByZWRpY3QodHlw
ZSk7IFwKLSAgICAgICAgaWYgKG5vZGUuZmxhZ3MoKSAmIE5vZGVNdXN0R2VuZXJhdGUpIFwKLSAg
ICAgICAgICAgIG5vZGUucmVmKCk7IFwKKyAgICAgICAgTm9kZSogbm9kZSA9IG5ldyAobV9hbGxv
Y2F0b3IpIE5vZGUodmFsdWVBcmdzKTsgXAorICAgICAgICBub2RlLT5wcmVkaWN0KHR5cGUpOyBc
CisgICAgICAgIGlmIChub2RlLT5mbGFncygpICYgTm9kZU11c3RHZW5lcmF0ZSkgXAorICAgICAg
ICAgICAgbm9kZS0+cmVmKCk7IFwKICAgICAgICAgaWYgKHJlZk5vZGVNb2RlID09IFJlZk5vZGUp
IFwKLSAgICAgICAgICAgIG5vZGUucmVmKCk7IFwKLSAgICAgICAgTm9kZUluZGV4IHJlc3VsdCA9
IHNpemUoKTsgXAotICAgICAgICBhcHBlbmQobm9kZSk7IFwKKyAgICAgICAgICAgIG5vZGUtPnJl
ZigpOyBcCiAgICAgICAgIGlmIChyZWZDaGlsZHJlbk1vZGUgPT0gUmVmQ2hpbGRyZW4pIFwKLSAg
ICAgICAgICAgIHJlZkNoaWxkcmVuKHJlc3VsdCk7IFwKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsg
XAorICAgICAgICAgICAgcmVmQ2hpbGRyZW4obm9kZSk7IFwKKyAgICAgICAgcmV0dXJuIG5vZGU7
IFwKICAgICB9CiAgICAgREZHX1ZBUklBRElDX1RFTVBMQVRFX0ZVTkNUSU9OKERGR19ERUZJTkVf
QUREX05PREUpCiAjdW5kZWYgREZHX0RFRklORV9BRERfTk9ERQpAQCAtMjA0LDE0ICsxODUsMTQg
QEAgcHVibGljOgogICAgIC8vIHJlZmVyZW5jZSBjb3VudHMgYWNjb3JkaW5nIHRvIHJlYWNoYWJp
bGl0eS4KICAgICB2b2lkIGNvbGxlY3RHYXJiYWdlKCk7CiAgICAgCi0gICAgdm9pZCBjb252ZXJ0
VG9Db25zdGFudChOb2RlSW5kZXggbm9kZUluZGV4LCB1bnNpZ25lZCBjb25zdGFudE51bWJlcikK
KyAgICB2b2lkIGNvbnZlcnRUb0NvbnN0YW50KE5vZGUqIG5vZGUsIHVuc2lnbmVkIGNvbnN0YW50
TnVtYmVyKQogICAgIHsKLSAgICAgICAgYXQobm9kZUluZGV4KS5jb252ZXJ0VG9Db25zdGFudChj
b25zdGFudE51bWJlcik7CisgICAgICAgIG5vZGUtPmNvbnZlcnRUb0NvbnN0YW50KGNvbnN0YW50
TnVtYmVyKTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBjb252ZXJ0VG9Db25zdGFudChOb2RlSW5k
ZXggbm9kZUluZGV4LCBKU1ZhbHVlIHZhbHVlKQorICAgIHZvaWQgY29udmVydFRvQ29uc3RhbnQo
Tm9kZSogbm9kZSwgSlNWYWx1ZSB2YWx1ZSkKICAgICB7Ci0gICAgICAgIGNvbnZlcnRUb0NvbnN0
YW50KG5vZGVJbmRleCwgbV9jb2RlQmxvY2stPmFkZE9yRmluZENvbnN0YW50KHZhbHVlKSk7Cisg
ICAgICAgIGNvbnZlcnRUb0NvbnN0YW50KG5vZGUsIG1fY29kZUJsb2NrLT5hZGRPckZpbmRDb25z
dGFudCh2YWx1ZSkpOwogICAgIH0KIAogICAgIC8vIENvZGVCbG9jayBpcyBvcHRpb25hbCwgYnV0
IG1heSBhbGxvdyBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHRvIGJlIGR1bXBlZCAoZS5nLiBJZGVu
dGlmaWVyIG5hbWVzKS4KQEAgLTIxOSwxMjUgKzIwMCwxMjUgQEAgcHVibGljOgogICAgIGVudW0g
UGhpTm9kZUR1bXBNb2RlIHsgRHVtcExpdmVQaGlzT25seSwgRHVtcEFsbFBoaXMgfTsKICAgICB2
b2lkIGR1bXBCbG9ja0hlYWRlcihQcmludFN0cmVhbSYsIGNvbnN0IGNoYXIqIHByZWZpeCwgQmxv
Y2tJbmRleCwgUGhpTm9kZUR1bXBNb2RlKTsKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mLCBF
ZGdlKTsKLSAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mLCBjb25zdCBjaGFyKiBwcmVmaXgsIE5v
ZGVJbmRleCk7Ci0gICAgc3RhdGljIGludCBhbW91bnRPZk5vZGVXaGl0ZVNwYWNlKE5vZGUmKTsK
LSAgICBzdGF0aWMgdm9pZCBwcmludE5vZGVXaGl0ZVNwYWNlKFByaW50U3RyZWFtJiwgTm9kZSYp
OworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYsIGNvbnN0IGNoYXIqIHByZWZpeCwgTm9kZSop
OworICAgIHN0YXRpYyBpbnQgYW1vdW50T2ZOb2RlV2hpdGVTcGFjZShOb2RlKik7CisgICAgc3Rh
dGljIHZvaWQgcHJpbnROb2RlV2hpdGVTcGFjZShQcmludFN0cmVhbSYsIE5vZGUqKTsKIAogICAg
IC8vIER1bXAgdGhlIGNvZGUgb3JpZ2luIG9mIHRoZSBnaXZlbiBub2RlIGFzIGEgZGlmZiBmcm9t
IHRoZSBjb2RlIG9yaWdpbiBvZiB0aGUKICAgICAvLyBwcmVjZWRpbmcgbm9kZS4gUmV0dXJucyB0
cnVlIGlmIGFueXRoaW5nIHdhcyBwcmludGVkLgotICAgIGJvb2wgZHVtcENvZGVPcmlnaW4oUHJp
bnRTdHJlYW0mLCBjb25zdCBjaGFyKiBwcmVmaXgsIE5vZGVJbmRleCwgTm9kZUluZGV4KTsKKyAg
ICBib29sIGR1bXBDb2RlT3JpZ2luKFByaW50U3RyZWFtJiwgY29uc3QgY2hhciogcHJlZml4LCBO
b2RlKiBwcmV2aW91c05vZGUsIE5vZGUqIHN1YnNlcXVlbnROb2RlKTsKIAogICAgIEJsb2NrSW5k
ZXggYmxvY2tJbmRleEZvckJ5dGVjb2RlT2Zmc2V0KFZlY3RvcjxCbG9ja0luZGV4PiYgYmxvY2tz
LCB1bnNpZ25lZCBieXRlY29kZUJlZ2luKTsKIAotICAgIFNwZWN1bGF0ZWRUeXBlIGdldEpTQ29u
c3RhbnRTcGVjdWxhdGlvbihOb2RlJiBub2RlKQorICAgIFNwZWN1bGF0ZWRUeXBlIGdldEpTQ29u
c3RhbnRTcGVjdWxhdGlvbihOb2RlKiBub2RlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIHNwZWN1
bGF0aW9uRnJvbVZhbHVlKG5vZGUudmFsdWVPZkpTQ29uc3RhbnQobV9jb2RlQmxvY2spKTsKKyAg
ICAgICAgcmV0dXJuIHNwZWN1bGF0aW9uRnJvbVZhbHVlKG5vZGUtPnZhbHVlT2ZKU0NvbnN0YW50
KG1fY29kZUJsb2NrKSk7CiAgICAgfQogICAgIAotICAgIEFkZFNwZWN1bGF0aW9uTW9kZSBhZGRT
cGVjdWxhdGlvbk1vZGUoTm9kZSYgYWRkLCBib29sIGxlZnRTaG91bGRTcGVjdWxhdGVJbnRlZ2Vy
LCBib29sIHJpZ2h0U2hvdWxkU3BlY3VsYXRlSW50ZWdlcikKKyAgICBBZGRTcGVjdWxhdGlvbk1v
ZGUgYWRkU3BlY3VsYXRpb25Nb2RlKE5vZGUqIGFkZCwgYm9vbCBsZWZ0U2hvdWxkU3BlY3VsYXRl
SW50ZWdlciwgYm9vbCByaWdodFNob3VsZFNwZWN1bGF0ZUludGVnZXIpCiAgICAgewotICAgICAg
ICBBU1NFUlQoYWRkLm9wKCkgPT0gVmFsdWVBZGQgfHwgYWRkLm9wKCkgPT0gQXJpdGhBZGQgfHwg
YWRkLm9wKCkgPT0gQXJpdGhTdWIpOworICAgICAgICBBU1NFUlQoYWRkLT5vcCgpID09IFZhbHVl
QWRkIHx8IGFkZC0+b3AoKSA9PSBBcml0aEFkZCB8fCBhZGQtPm9wKCkgPT0gQXJpdGhTdWIpOwog
ICAgICAgICAKLSAgICAgICAgTm9kZSYgbGVmdCA9IGF0KGFkZC5jaGlsZDEoKSk7Ci0gICAgICAg
IE5vZGUmIHJpZ2h0ID0gYXQoYWRkLmNoaWxkMigpKTsKKyAgICAgICAgTm9kZSogbGVmdCA9IGFk
ZC0+Y2hpbGQxKCkubm9kZSgpOworICAgICAgICBOb2RlKiByaWdodCA9IGFkZC0+Y2hpbGQyKCku
bm9kZSgpOwogICAgICAgICAKLSAgICAgICAgaWYgKGxlZnQuaGFzQ29uc3RhbnQoKSkKKyAgICAg
ICAgaWYgKGxlZnQtPmhhc0NvbnN0YW50KCkpCiAgICAgICAgICAgICByZXR1cm4gYWRkSW1tZWRp
YXRlU2hvdWxkU3BlY3VsYXRlSW50ZWdlcihhZGQsIHJpZ2h0U2hvdWxkU3BlY3VsYXRlSW50ZWdl
ciwgbGVmdCk7Ci0gICAgICAgIGlmIChyaWdodC5oYXNDb25zdGFudCgpKQorICAgICAgICBpZiAo
cmlnaHQtPmhhc0NvbnN0YW50KCkpCiAgICAgICAgICAgICByZXR1cm4gYWRkSW1tZWRpYXRlU2hv
dWxkU3BlY3VsYXRlSW50ZWdlcihhZGQsIGxlZnRTaG91bGRTcGVjdWxhdGVJbnRlZ2VyLCByaWdo
dCk7CiAgICAgICAgIAotICAgICAgICByZXR1cm4gKGxlZnRTaG91bGRTcGVjdWxhdGVJbnRlZ2Vy
ICYmIHJpZ2h0U2hvdWxkU3BlY3VsYXRlSW50ZWdlciAmJiBhZGQuY2FuU3BlY3VsYXRlSW50ZWdl
cigpKSA/IFNwZWN1bGF0ZUludGVnZXIgOiBEb250U3BlY3VsYXRlSW50ZWdlcjsKKyAgICAgICAg
cmV0dXJuIChsZWZ0U2hvdWxkU3BlY3VsYXRlSW50ZWdlciAmJiByaWdodFNob3VsZFNwZWN1bGF0
ZUludGVnZXIgJiYgYWRkLT5jYW5TcGVjdWxhdGVJbnRlZ2VyKCkpID8gU3BlY3VsYXRlSW50ZWdl
ciA6IERvbnRTcGVjdWxhdGVJbnRlZ2VyOwogICAgIH0KICAgICAKLSAgICBBZGRTcGVjdWxhdGlv
bk1vZGUgdmFsdWVBZGRTcGVjdWxhdGlvbk1vZGUoTm9kZSYgYWRkKQorICAgIEFkZFNwZWN1bGF0
aW9uTW9kZSB2YWx1ZUFkZFNwZWN1bGF0aW9uTW9kZShOb2RlKiBhZGQpCiAgICAgewotICAgICAg
ICByZXR1cm4gYWRkU3BlY3VsYXRpb25Nb2RlKGFkZCwgYXQoYWRkLmNoaWxkMSgpKS5zaG91bGRT
cGVjdWxhdGVJbnRlZ2VyRXhwZWN0aW5nRGVmaW5lZCgpLCBhdChhZGQuY2hpbGQyKCkpLnNob3Vs
ZFNwZWN1bGF0ZUludGVnZXJFeHBlY3RpbmdEZWZpbmVkKCkpOworICAgICAgICByZXR1cm4gYWRk
U3BlY3VsYXRpb25Nb2RlKGFkZCwgYWRkLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlSW50ZWdl
ckV4cGVjdGluZ0RlZmluZWQoKSwgYWRkLT5jaGlsZDIoKS0+c2hvdWxkU3BlY3VsYXRlSW50ZWdl
ckV4cGVjdGluZ0RlZmluZWQoKSk7CiAgICAgfQogICAgIAotICAgIEFkZFNwZWN1bGF0aW9uTW9k
ZSBhcml0aEFkZFNwZWN1bGF0aW9uTW9kZShOb2RlJiBhZGQpCisgICAgQWRkU3BlY3VsYXRpb25N
b2RlIGFyaXRoQWRkU3BlY3VsYXRpb25Nb2RlKE5vZGUqIGFkZCkKICAgICB7Ci0gICAgICAgIHJl
dHVybiBhZGRTcGVjdWxhdGlvbk1vZGUoYWRkLCBhdChhZGQuY2hpbGQxKCkpLnNob3VsZFNwZWN1
bGF0ZUludGVnZXJGb3JBcml0aG1ldGljKCksIGF0KGFkZC5jaGlsZDIoKSkuc2hvdWxkU3BlY3Vs
YXRlSW50ZWdlckZvckFyaXRobWV0aWMoKSk7CisgICAgICAgIHJldHVybiBhZGRTcGVjdWxhdGlv
bk1vZGUoYWRkLCBhZGQtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyRm9yQXJpdGht
ZXRpYygpLCBhZGQtPmNoaWxkMigpLT5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyRm9yQXJpdGhtZXRp
YygpKTsKICAgICB9CiAgICAgCi0gICAgQWRkU3BlY3VsYXRpb25Nb2RlIGFkZFNwZWN1bGF0aW9u
TW9kZShOb2RlJiBhZGQpCisgICAgQWRkU3BlY3VsYXRpb25Nb2RlIGFkZFNwZWN1bGF0aW9uTW9k
ZShOb2RlKiBhZGQpCiAgICAgewotICAgICAgICBpZiAoYWRkLm9wKCkgPT0gVmFsdWVBZGQpCisg
ICAgICAgIGlmIChhZGQtPm9wKCkgPT0gVmFsdWVBZGQpCiAgICAgICAgICAgICByZXR1cm4gdmFs
dWVBZGRTcGVjdWxhdGlvbk1vZGUoYWRkKTsKICAgICAgICAgCiAgICAgICAgIHJldHVybiBhcml0
aEFkZFNwZWN1bGF0aW9uTW9kZShhZGQpOwogICAgIH0KICAgICAKLSAgICBib29sIGFkZFNob3Vs
ZFNwZWN1bGF0ZUludGVnZXIoTm9kZSYgYWRkKQorICAgIGJvb2wgYWRkU2hvdWxkU3BlY3VsYXRl
SW50ZWdlcihOb2RlKiBhZGQpCiAgICAgewogICAgICAgICByZXR1cm4gYWRkU3BlY3VsYXRpb25N
b2RlKGFkZCkgIT0gRG9udFNwZWN1bGF0ZUludGVnZXI7CiAgICAgfQogICAgIAotICAgIGJvb2wg
bXVsU2hvdWxkU3BlY3VsYXRlSW50ZWdlcihOb2RlJiBtdWwpCisgICAgYm9vbCBtdWxTaG91bGRT
cGVjdWxhdGVJbnRlZ2VyKE5vZGUqIG11bCkKICAgICB7Ci0gICAgICAgIEFTU0VSVChtdWwub3Ao
KSA9PSBBcml0aE11bCk7CisgICAgICAgIEFTU0VSVChtdWwtPm9wKCkgPT0gQXJpdGhNdWwpOwog
ICAgICAgICAKLSAgICAgICAgTm9kZSYgbGVmdCA9IGF0KG11bC5jaGlsZDEoKSk7Ci0gICAgICAg
IE5vZGUmIHJpZ2h0ID0gYXQobXVsLmNoaWxkMigpKTsKKyAgICAgICAgTm9kZSogbGVmdCA9IG11
bC0+Y2hpbGQxKCkubm9kZSgpOworICAgICAgICBOb2RlKiByaWdodCA9IG11bC0+Y2hpbGQyKCku
bm9kZSgpOwogICAgICAgICAKICAgICAgICAgcmV0dXJuIE5vZGU6OnNob3VsZFNwZWN1bGF0ZUlu
dGVnZXJGb3JBcml0aG1ldGljKGxlZnQsIHJpZ2h0KSAmJiBtdWwuY2FuU3BlY3VsYXRlSW50ZWdl
cigpOwogICAgIH0KICAgICAKLSAgICBib29sIG5lZ2F0ZVNob3VsZFNwZWN1bGF0ZUludGVnZXIo
Tm9kZSYgbmVnYXRlKQorICAgIGJvb2wgbmVnYXRlU2hvdWxkU3BlY3VsYXRlSW50ZWdlcihOb2Rl
KiBuZWdhdGUpCiAgICAgewotICAgICAgICBBU1NFUlQobmVnYXRlLm9wKCkgPT0gQXJpdGhOZWdh
dGUpOwotICAgICAgICByZXR1cm4gYXQobmVnYXRlLmNoaWxkMSgpKS5zaG91bGRTcGVjdWxhdGVJ
bnRlZ2VyRm9yQXJpdGhtZXRpYygpICYmIG5lZ2F0ZS5jYW5TcGVjdWxhdGVJbnRlZ2VyKCk7Cisg
ICAgICAgIEFTU0VSVChuZWdhdGUtPm9wKCkgPT0gQXJpdGhOZWdhdGUpOworICAgICAgICByZXR1
cm4gbmVnYXRlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlSW50ZWdlckZvckFyaXRobWV0aWMo
KSAmJiBuZWdhdGUtPmNhblNwZWN1bGF0ZUludGVnZXIoKTsKICAgICB9CiAgICAgCi0gICAgYm9v
bCBhZGRTaG91bGRTcGVjdWxhdGVJbnRlZ2VyKE5vZGVJbmRleCBub2RlSW5kZXgpCisgICAgYm9v
bCBhZGRTaG91bGRTcGVjdWxhdGVJbnRlZ2VyKE5vZGUqIG5vZGUpCiAgICAgewotICAgICAgICBy
ZXR1cm4gYWRkU2hvdWxkU3BlY3VsYXRlSW50ZWdlcihhdChub2RlSW5kZXgpKTsKKyAgICAgICAg
cmV0dXJuIGFkZFNob3VsZFNwZWN1bGF0ZUludGVnZXIobm9kZSk7CiAgICAgfQogICAgIAogICAg
IC8vIEhlbHBlciBtZXRob2RzIHRvIGNoZWNrIG5vZGVzIGZvciBjb25zdGFudHMuCi0gICAgYm9v
bCBpc0NvbnN0YW50KE5vZGVJbmRleCBub2RlSW5kZXgpCisgICAgYm9vbCBpc0NvbnN0YW50KE5v
ZGUqIG5vZGUpCiAgICAgewotICAgICAgICByZXR1cm4gYXQobm9kZUluZGV4KS5oYXNDb25zdGFu
dCgpOworICAgICAgICByZXR1cm4gbm9kZS0+aGFzQ29uc3RhbnQoKTsKICAgICB9Ci0gICAgYm9v
bCBpc0pTQ29uc3RhbnQoTm9kZUluZGV4IG5vZGVJbmRleCkKKyAgICBib29sIGlzSlNDb25zdGFu
dChOb2RlKiBub2RlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGF0KG5vZGVJbmRleCkuaGFzQ29u
c3RhbnQoKTsKKyAgICAgICAgcmV0dXJuIG5vZGUtPmhhc0NvbnN0YW50KCk7CiAgICAgfQotICAg
IGJvb2wgaXNJbnQzMkNvbnN0YW50KE5vZGVJbmRleCBub2RlSW5kZXgpCisgICAgYm9vbCBpc0lu
dDMyQ29uc3RhbnQoTm9kZSogbm9kZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBhdChub2RlSW5k
ZXgpLmlzSW50MzJDb25zdGFudChtX2NvZGVCbG9jayk7CisgICAgICAgIHJldHVybiBub2RlLT5p
c0ludDMyQ29uc3RhbnQobV9jb2RlQmxvY2spOwogICAgIH0KLSAgICBib29sIGlzRG91YmxlQ29u
c3RhbnQoTm9kZUluZGV4IG5vZGVJbmRleCkKKyAgICBib29sIGlzRG91YmxlQ29uc3RhbnQoTm9k
ZSogbm9kZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBhdChub2RlSW5kZXgpLmlzRG91YmxlQ29u
c3RhbnQobV9jb2RlQmxvY2spOworICAgICAgICByZXR1cm4gbm9kZS0+aXNEb3VibGVDb25zdGFu
dChtX2NvZGVCbG9jayk7CiAgICAgfQotICAgIGJvb2wgaXNOdW1iZXJDb25zdGFudChOb2RlSW5k
ZXggbm9kZUluZGV4KQorICAgIGJvb2wgaXNOdW1iZXJDb25zdGFudChOb2RlKiBub2RlKQogICAg
IHsKLSAgICAgICAgcmV0dXJuIGF0KG5vZGVJbmRleCkuaXNOdW1iZXJDb25zdGFudChtX2NvZGVC
bG9jayk7CisgICAgICAgIHJldHVybiBub2RlLT5pc051bWJlckNvbnN0YW50KG1fY29kZUJsb2Nr
KTsKICAgICB9Ci0gICAgYm9vbCBpc0Jvb2xlYW5Db25zdGFudChOb2RlSW5kZXggbm9kZUluZGV4
KQorICAgIGJvb2wgaXNCb29sZWFuQ29uc3RhbnQoTm9kZSogbm9kZSkKICAgICB7Ci0gICAgICAg
IHJldHVybiBhdChub2RlSW5kZXgpLmlzQm9vbGVhbkNvbnN0YW50KG1fY29kZUJsb2NrKTsKKyAg
ICAgICAgcmV0dXJuIG5vZGUtPmlzQm9vbGVhbkNvbnN0YW50KG1fY29kZUJsb2NrKTsKICAgICB9
Ci0gICAgYm9vbCBpc0NlbGxDb25zdGFudChOb2RlSW5kZXggbm9kZUluZGV4KQorICAgIGJvb2wg
aXNDZWxsQ29uc3RhbnQoTm9kZSogbm9kZSkKICAgICB7Ci0gICAgICAgIGlmICghaXNKU0NvbnN0
YW50KG5vZGVJbmRleCkpCisgICAgICAgIGlmICghaXNKU0NvbnN0YW50KG5vZGUpKQogICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBKU1ZhbHVlIHZhbHVlID0gdmFsdWVPZkpTQ29u
c3RhbnQobm9kZUluZGV4KTsKKyAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IHZhbHVlT2ZKU0NvbnN0
YW50KG5vZGUpOwogICAgICAgICByZXR1cm4gdmFsdWUuaXNDZWxsKCkgJiYgISF2YWx1ZTsKICAg
ICB9Ci0gICAgYm9vbCBpc0Z1bmN0aW9uQ29uc3RhbnQoTm9kZUluZGV4IG5vZGVJbmRleCkKKyAg
ICBib29sIGlzRnVuY3Rpb25Db25zdGFudChOb2RlKiBub2RlKQogICAgIHsKLSAgICAgICAgaWYg
KCFpc0pTQ29uc3RhbnQobm9kZUluZGV4KSkKKyAgICAgICAgaWYgKCFpc0pTQ29uc3RhbnQobm9k
ZSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmICghZ2V0SlNGdW5jdGlv
bih2YWx1ZU9mSlNDb25zdGFudChub2RlSW5kZXgpKSkKKyAgICAgICAgaWYgKCFnZXRKU0Z1bmN0
aW9uKHZhbHVlT2ZKU0NvbnN0YW50KG5vZGUpKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQotICAgIGJvb2wgaXNJbnRlcm5hbEZ1bmN0aW9u
Q29uc3RhbnQoTm9kZUluZGV4IG5vZGVJbmRleCkKKyAgICBib29sIGlzSW50ZXJuYWxGdW5jdGlv
bkNvbnN0YW50KE5vZGUqIG5vZGUpCiAgICAgewotICAgICAgICBpZiAoIWlzSlNDb25zdGFudChu
b2RlSW5kZXgpKQorICAgICAgICBpZiAoIWlzSlNDb25zdGFudChub2RlKSkKICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IHZhbHVlT2ZKU0NvbnN0YW50
KG5vZGVJbmRleCk7CisgICAgICAgIEpTVmFsdWUgdmFsdWUgPSB2YWx1ZU9mSlNDb25zdGFudChu
b2RlKTsKICAgICAgICAgaWYgKCF2YWx1ZS5pc0NlbGwoKSB8fCAhdmFsdWUpCiAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgICAgIEpTQ2VsbCogY2VsbCA9IHZhbHVlLmFzQ2VsbCgpOwpA
QCAtMzQ2LDI1ICszMjcsMjUgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9
CiAgICAgLy8gSGVscGVyIG1ldGhvZHMgZ2V0IGNvbnN0YW50IHZhbHVlcyBmcm9tIG5vZGVzLgot
ICAgIEpTVmFsdWUgdmFsdWVPZkpTQ29uc3RhbnQoTm9kZUluZGV4IG5vZGVJbmRleCkKKyAgICBK
U1ZhbHVlIHZhbHVlT2ZKU0NvbnN0YW50KE5vZGUqIG5vZGUpCiAgICAgewotICAgICAgICByZXR1
cm4gYXQobm9kZUluZGV4KS52YWx1ZU9mSlNDb25zdGFudChtX2NvZGVCbG9jayk7CisgICAgICAg
IHJldHVybiBub2RlLT52YWx1ZU9mSlNDb25zdGFudChtX2NvZGVCbG9jayk7CiAgICAgfQotICAg
IGludDMyX3QgdmFsdWVPZkludDMyQ29uc3RhbnQoTm9kZUluZGV4IG5vZGVJbmRleCkKKyAgICBp
bnQzMl90IHZhbHVlT2ZJbnQzMkNvbnN0YW50KE5vZGUqIG5vZGUpCiAgICAgewotICAgICAgICBy
ZXR1cm4gdmFsdWVPZkpTQ29uc3RhbnQobm9kZUluZGV4KS5hc0ludDMyKCk7CisgICAgICAgIHJl
dHVybiB2YWx1ZU9mSlNDb25zdGFudChub2RlKS5hc0ludDMyKCk7CiAgICAgfQotICAgIGRvdWJs
ZSB2YWx1ZU9mTnVtYmVyQ29uc3RhbnQoTm9kZUluZGV4IG5vZGVJbmRleCkKKyAgICBkb3VibGUg
dmFsdWVPZk51bWJlckNvbnN0YW50KE5vZGUqIG5vZGUpCiAgICAgewotICAgICAgICByZXR1cm4g
dmFsdWVPZkpTQ29uc3RhbnQobm9kZUluZGV4KS5hc051bWJlcigpOworICAgICAgICByZXR1cm4g
dmFsdWVPZkpTQ29uc3RhbnQobm9kZSkuYXNOdW1iZXIoKTsKICAgICB9Ci0gICAgYm9vbCB2YWx1
ZU9mQm9vbGVhbkNvbnN0YW50KE5vZGVJbmRleCBub2RlSW5kZXgpCisgICAgYm9vbCB2YWx1ZU9m
Qm9vbGVhbkNvbnN0YW50KE5vZGUqIG5vZGUpCiAgICAgewotICAgICAgICByZXR1cm4gdmFsdWVP
ZkpTQ29uc3RhbnQobm9kZUluZGV4KS5hc0Jvb2xlYW4oKTsKKyAgICAgICAgcmV0dXJuIHZhbHVl
T2ZKU0NvbnN0YW50KG5vZGUpLmFzQm9vbGVhbigpOwogICAgIH0KLSAgICBKU0Z1bmN0aW9uKiB2
YWx1ZU9mRnVuY3Rpb25Db25zdGFudChOb2RlSW5kZXggbm9kZUluZGV4KQorICAgIEpTRnVuY3Rp
b24qIHZhbHVlT2ZGdW5jdGlvbkNvbnN0YW50KE5vZGUqIG5vZGUpCiAgICAgewotICAgICAgICBK
U0NlbGwqIGZ1bmN0aW9uID0gZ2V0SlNGdW5jdGlvbih2YWx1ZU9mSlNDb25zdGFudChub2RlSW5k
ZXgpKTsKKyAgICAgICAgSlNDZWxsKiBmdW5jdGlvbiA9IGdldEpTRnVuY3Rpb24odmFsdWVPZkpT
Q29uc3RhbnQobm9kZSkpOwogICAgICAgICBBU1NFUlQoZnVuY3Rpb24pOwogICAgICAgICByZXR1
cm4ganNDYXN0PEpTRnVuY3Rpb24qPihmdW5jdGlvbik7CiAgICAgfQpAQCAtNDM5LDQ1ICs0MjAs
NDMgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9jb2RlQmxvY2stPnVuY2hlY2tlZEFjdGl2
YXRpb25SZWdpc3RlcigpOwogICAgIH0KICAgICAKLSAgICBWYWx1ZVByb2ZpbGUqIHZhbHVlUHJv
ZmlsZUZvcihOb2RlSW5kZXggbm9kZUluZGV4KQorICAgIFZhbHVlUHJvZmlsZSogdmFsdWVQcm9m
aWxlRm9yKE5vZGUqIG5vZGUpCiAgICAgewotICAgICAgICBpZiAobm9kZUluZGV4ID09IE5vTm9k
ZSkKKyAgICAgICAgaWYgKCFub2RlKQogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIAot
ICAgICAgICBOb2RlJiBub2RlID0gYXQobm9kZUluZGV4KTsKLSAgICAgICAgQ29kZUJsb2NrKiBw
cm9maWxlZEJsb2NrID0gYmFzZWxpbmVDb2RlQmxvY2tGb3Iobm9kZS5jb2RlT3JpZ2luKTsKKyAg
ICAgICAgQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrID0gYmFzZWxpbmVDb2RlQmxvY2tGb3Iobm9k
ZS0+Y29kZU9yaWdpbik7CiAgICAgICAgIAotICAgICAgICBpZiAobm9kZS5oYXNMb2NhbCgpKSB7
Ci0gICAgICAgICAgICBpZiAoIW9wZXJhbmRJc0FyZ3VtZW50KG5vZGUubG9jYWwoKSkpCisgICAg
ICAgIGlmIChub2RlLT5oYXNMb2NhbCgpKSB7CisgICAgICAgICAgICBpZiAoIW9wZXJhbmRJc0Fy
Z3VtZW50KG5vZGUtPmxvY2FsKCkpKQogICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAg
ICAgICAgaW50IGFyZ3VtZW50ID0gb3BlcmFuZFRvQXJndW1lbnQobm9kZS5sb2NhbCgpKTsKLSAg
ICAgICAgICAgIGlmIChub2RlLnZhcmlhYmxlQWNjZXNzRGF0YSgpICE9IGF0KG1fYXJndW1lbnRz
W2FyZ3VtZW50XSkudmFyaWFibGVBY2Nlc3NEYXRhKCkpCisgICAgICAgICAgICBpbnQgYXJndW1l
bnQgPSBvcGVyYW5kVG9Bcmd1bWVudChub2RlLT5sb2NhbCgpKTsKKyAgICAgICAgICAgIGlmIChu
b2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKSAhPSBtX2FyZ3VtZW50c1thcmd1bWVudF0tPnZhcmlh
YmxlQWNjZXNzRGF0YSgpKQogICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAg
cmV0dXJuIHByb2ZpbGVkQmxvY2stPnZhbHVlUHJvZmlsZUZvckFyZ3VtZW50KGFyZ3VtZW50KTsK
ICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgaWYgKG5vZGUuaGFzSGVhcFByZWRpY3Rpb24o
KSkKLSAgICAgICAgICAgIHJldHVybiBwcm9maWxlZEJsb2NrLT52YWx1ZVByb2ZpbGVGb3JCeXRl
Y29kZU9mZnNldChub2RlLmNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleEZvclZhbHVlUHJvZmlsZSgp
KTsKKyAgICAgICAgaWYgKG5vZGUtPmhhc0hlYXBQcmVkaWN0aW9uKCkpCisgICAgICAgICAgICBy
ZXR1cm4gcHJvZmlsZWRCbG9jay0+dmFsdWVQcm9maWxlRm9yQnl0ZWNvZGVPZmZzZXQobm9kZS0+
Y29kZU9yaWdpbi5ieXRlY29kZUluZGV4Rm9yVmFsdWVQcm9maWxlKCkpOwogICAgICAgICAKICAg
ICAgICAgcmV0dXJuIDA7CiAgICAgfQogICAgIAotICAgIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVBy
b2ZpbGUgbWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZUZvcihOb2RlSW5kZXggbm9kZUluZGV4
KQorICAgIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUgbWV0aG9kT2ZHZXR0aW5nQVZhbHVl
UHJvZmlsZUZvcihOb2RlKiBub2RlKQogICAgIHsKLSAgICAgICAgaWYgKG5vZGVJbmRleCA9PSBO
b05vZGUpCisgICAgICAgIGlmICghbm9kZSkKICAgICAgICAgICAgIHJldHVybiBNZXRob2RPZkdl
dHRpbmdBVmFsdWVQcm9maWxlKCk7CiAgICAgICAgIAotICAgICAgICBOb2RlJiBub2RlID0gYXQo
bm9kZUluZGV4KTsKLSAgICAgICAgQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrID0gYmFzZWxpbmVD
b2RlQmxvY2tGb3Iobm9kZS5jb2RlT3JpZ2luKTsKKyAgICAgICAgQ29kZUJsb2NrKiBwcm9maWxl
ZEJsb2NrID0gYmFzZWxpbmVDb2RlQmxvY2tGb3Iobm9kZS0+Y29kZU9yaWdpbik7CiAgICAgICAg
IAotICAgICAgICBpZiAobm9kZS5vcCgpID09IEdldExvY2FsKSB7CisgICAgICAgIGlmIChub2Rl
LT5vcCgpID09IEdldExvY2FsKSB7CiAgICAgICAgICAgICByZXR1cm4gTWV0aG9kT2ZHZXR0aW5n
QVZhbHVlUHJvZmlsZTo6ZnJvbUxhenlPcGVyYW5kKAogICAgICAgICAgICAgICAgIHByb2ZpbGVk
QmxvY2ssCiAgICAgICAgICAgICAgICAgTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVLZXkoCi0gICAg
ICAgICAgICAgICAgICAgIG5vZGUuY29kZU9yaWdpbi5ieXRlY29kZUluZGV4LCBub2RlLmxvY2Fs
KCkpKTsKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y29kZU9yaWdpbi5ieXRlY29kZUluZGV4
LCBub2RlLT5sb2NhbCgpKSk7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIHJldHVybiBN
ZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlKHZhbHVlUHJvZmlsZUZvcihub2RlSW5kZXgpKTsK
KyAgICAgICAgcmV0dXJuIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUodmFsdWVQcm9maWxl
Rm9yKG5vZGUpKTsKICAgICB9CiAgICAgCiAgICAgYm9vbCBuZWVkc0FjdGl2YXRpb24oKSBjb25z
dApAQCAtNTAxLDIxICs0ODAsMjEgQEAgcHVibGljOgogICAgIAogICAgIHVuc2lnbmVkIG51bVN1
Y2Nlc3NvcnMoQmFzaWNCbG9jayogYmxvY2spCiAgICAgewotICAgICAgICByZXR1cm4gYXQoYmxv
Y2stPmxhc3QoKSkubnVtU3VjY2Vzc29ycygpOworICAgICAgICByZXR1cm4gYmxvY2stPmxhc3Qo
KS0+bnVtU3VjY2Vzc29ycygpOwogICAgIH0KICAgICBCbG9ja0luZGV4IHN1Y2Nlc3NvcihCYXNp
Y0Jsb2NrKiBibG9jaywgdW5zaWduZWQgaW5kZXgpCiAgICAgewotICAgICAgICByZXR1cm4gYXQo
YmxvY2stPmxhc3QoKSkuc3VjY2Vzc29yKGluZGV4KTsKKyAgICAgICAgcmV0dXJuIGJsb2NrLT5s
YXN0KCktPnN1Y2Nlc3NvcihpbmRleCk7CiAgICAgfQogICAgIEJsb2NrSW5kZXggc3VjY2Vzc29y
Rm9yQ29uZGl0aW9uKEJhc2ljQmxvY2sqIGJsb2NrLCBib29sIGNvbmRpdGlvbikKICAgICB7Ci0g
ICAgICAgIHJldHVybiBhdChibG9jay0+bGFzdCgpKS5zdWNjZXNzb3JGb3JDb25kaXRpb24oY29u
ZGl0aW9uKTsKKyAgICAgICAgcmV0dXJuIGJsb2NrLT5sYXN0KCktPnN1Y2Nlc3NvckZvckNvbmRp
dGlvbihjb25kaXRpb24pOwogICAgIH0KICAgICAKLSAgICBib29sIGlzUHJlZGljdGVkTnVtZXJp
Y2FsKE5vZGUmIG5vZGUpCisgICAgYm9vbCBpc1ByZWRpY3RlZE51bWVyaWNhbChOb2RlKiBub2Rl
KQogICAgIHsKLSAgICAgICAgU3BlY3VsYXRlZFR5cGUgbGVmdCA9IGF0KG5vZGUuY2hpbGQxKCkp
LnByZWRpY3Rpb24oKTsKLSAgICAgICAgU3BlY3VsYXRlZFR5cGUgcmlnaHQgPSBhdChub2RlLmNo
aWxkMigpKS5wcmVkaWN0aW9uKCk7CisgICAgICAgIFNwZWN1bGF0ZWRUeXBlIGxlZnQgPSBub2Rl
LT5jaGlsZDEoKS0+cHJlZGljdGlvbigpOworICAgICAgICBTcGVjdWxhdGVkVHlwZSByaWdodCA9
IG5vZGUtPmNoaWxkMigpLT5wcmVkaWN0aW9uKCk7CiAgICAgICAgIHJldHVybiBpc051bWJlclNw
ZWN1bGF0aW9uKGxlZnQpICYmIGlzTnVtYmVyU3BlY3VsYXRpb24ocmlnaHQpOwogICAgIH0KICAg
ICAKQEAgLTUyNSwyMyArNTA0LDIzIEBAIHB1YmxpYzoKICAgICAvLyAtIFB1dEJ5VmFsIGRlZmlu
aXRlbHkgY2hhbmdlcyB0aGUgYXJyYXkgaXQgc3RvcmVzIHRvLCBhbmQgbWF5IGV2ZW4gY2hhbmdl
IGl0cyBsZW5ndGguCiAgICAgLy8gLSBQdXRCeU9mZnNldCBkZWZpbml0ZWx5IGNoYW5nZXMgdGhl
IG9iamVjdCBpdCBzdG9yZXMgdG8uCiAgICAgLy8gLSBhbmQgc28gb24uCi0gICAgYm9vbCBieVZh
bElzUHVyZShOb2RlJiBub2RlKQorICAgIGJvb2wgYnlWYWxJc1B1cmUoTm9kZSogbm9kZSkKICAg
ICB7Ci0gICAgICAgIHN3aXRjaCAobm9kZS5hcnJheU1vZGUoKS50eXBlKCkpIHsKKyAgICAgICAg
c3dpdGNoIChub2RlLT5hcnJheU1vZGUoKS50eXBlKCkpIHsKICAgICAgICAgY2FzZSBBcnJheTo6
R2VuZXJpYzoKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgY2FzZSBBcnJheTo6
SW50MzI6CiAgICAgICAgIGNhc2UgQXJyYXk6OkRvdWJsZToKICAgICAgICAgY2FzZSBBcnJheTo6
Q29udGlndW91czoKICAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlTdG9yYWdlOgotICAgICAgICAg
ICAgcmV0dXJuICFub2RlLmFycmF5TW9kZSgpLmlzT3V0T2ZCb3VuZHMoKTsKKyAgICAgICAgICAg
IHJldHVybiAhbm9kZS0+YXJyYXlNb2RlKCkuaXNPdXRPZkJvdW5kcygpOwogICAgICAgICBjYXNl
IEFycmF5OjpTbG93UHV0QXJyYXlTdG9yYWdlOgotICAgICAgICAgICAgcmV0dXJuICFub2RlLmFy
cmF5TW9kZSgpLm1heVN0b3JlVG9Ib2xlKCk7CisgICAgICAgICAgICByZXR1cm4gIW5vZGUtPmFy
cmF5TW9kZSgpLm1heVN0b3JlVG9Ib2xlKCk7CiAgICAgICAgIGNhc2UgQXJyYXk6OlN0cmluZzoK
LSAgICAgICAgICAgIHJldHVybiBub2RlLm9wKCkgPT0gR2V0QnlWYWw7CisgICAgICAgICAgICBy
ZXR1cm4gbm9kZS0+b3AoKSA9PSBHZXRCeVZhbDsKICNpZiBVU0UoSlNWQUxVRTMyXzY0KQogICAg
ICAgICBjYXNlIEFycmF5OjpBcmd1bWVudHM6Ci0gICAgICAgICAgICBpZiAobm9kZS5vcCgpID09
IEdldEJ5VmFsKQorICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gR2V0QnlWYWwpCiAgICAg
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAjZW5k
aWYgLy8gVVNFKEpTVkFMVUUzMl82NCkKQEAgLTU1MCwxMyArNTI5LDEzIEBAIHB1YmxpYzoKICAg
ICAgICAgfQogICAgIH0KICAgICAKLSAgICBib29sIGNsb2JiZXJzV29ybGQoTm9kZSYgbm9kZSkK
KyAgICBib29sIGNsb2JiZXJzV29ybGQoTm9kZSogbm9kZSkKICAgICB7Ci0gICAgICAgIGlmIChu
b2RlLmZsYWdzKCkgJiBOb2RlQ2xvYmJlcnNXb3JsZCkKKyAgICAgICAgaWYgKG5vZGUtPmZsYWdz
KCkgJiBOb2RlQ2xvYmJlcnNXb3JsZCkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAg
ICBpZiAoIShub2RlLmZsYWdzKCkgJiBOb2RlTWlnaHRDbG9iYmVyKSkKKyAgICAgICAgaWYgKCEo
bm9kZS0+ZmxhZ3MoKSAmIE5vZGVNaWdodENsb2JiZXIpKQogICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgICBzd2l0Y2ggKG5vZGUub3AoKSkgeworICAgICAgICBzd2l0Y2ggKG5vZGUt
Pm9wKCkpIHsKICAgICAgICAgY2FzZSBWYWx1ZUFkZDoKICAgICAgICAgY2FzZSBDb21wYXJlTGVz
czoKICAgICAgICAgY2FzZSBDb21wYXJlTGVzc0VxOgpAQCAtNTc0LDkgKzU1Myw5IEBAIHB1Ymxp
YzoKICAgICAgICAgfQogICAgIH0KICAgICAKLSAgICBib29sIGNsb2JiZXJzV29ybGQoTm9kZUlu
ZGV4IG5vZGVJbmRleCkKKyAgICBib29sIGNsb2JiZXJzV29ybGQoTm9kZSogbm9kZSkKICAgICB7
Ci0gICAgICAgIHJldHVybiBjbG9iYmVyc1dvcmxkKGF0KG5vZGVJbmRleCkpOworICAgICAgICBy
ZXR1cm4gY2xvYmJlcnNXb3JsZChub2RlKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBkZXRlcm1p
bmVSZWFjaGFiaWxpdHkoKTsKQEAgLTU4NCw1MiArNTYzLDU3IEBAIHB1YmxpYzoKICAgICAKICAg
ICB2b2lkIHJlc2V0RXhpdFN0YXRlcygpOwogICAgIAotICAgIHVuc2lnbmVkIHZhckFyZ051bUNo
aWxkcmVuKE5vZGUmIG5vZGUpCisgICAgdW5zaWduZWQgdmFyQXJnTnVtQ2hpbGRyZW4oTm9kZSog
bm9kZSkKICAgICB7Ci0gICAgICAgIEFTU0VSVChub2RlLmZsYWdzKCkgJiBOb2RlSGFzVmFyQXJn
cyk7Ci0gICAgICAgIHJldHVybiBub2RlLm51bUNoaWxkcmVuKCk7CisgICAgICAgIEFTU0VSVChu
b2RlLT5mbGFncygpICYgTm9kZUhhc1ZhckFyZ3MpOworICAgICAgICByZXR1cm4gbm9kZS0+bnVt
Q2hpbGRyZW4oKTsKICAgICB9CiAgICAgCi0gICAgdW5zaWduZWQgbnVtQ2hpbGRyZW4oTm9kZSYg
bm9kZSkKKyAgICB1bnNpZ25lZCBudW1DaGlsZHJlbihOb2RlKiBub2RlKQogICAgIHsKLSAgICAg
ICAgaWYgKG5vZGUuZmxhZ3MoKSAmIE5vZGVIYXNWYXJBcmdzKQorICAgICAgICBpZiAobm9kZS0+
ZmxhZ3MoKSAmIE5vZGVIYXNWYXJBcmdzKQogICAgICAgICAgICAgcmV0dXJuIHZhckFyZ051bUNo
aWxkcmVuKG5vZGUpOwogICAgICAgICByZXR1cm4gQWRqYWNlbmN5TGlzdDo6U2l6ZTsKICAgICB9
CiAgICAgCi0gICAgRWRnZSYgdmFyQXJnQ2hpbGQoTm9kZSYgbm9kZSwgdW5zaWduZWQgaW5kZXgp
CisgICAgRWRnZSYgdmFyQXJnQ2hpbGQoTm9kZSogbm9kZSwgdW5zaWduZWQgaW5kZXgpCiAgICAg
ewotICAgICAgICBBU1NFUlQobm9kZS5mbGFncygpICYgTm9kZUhhc1ZhckFyZ3MpOwotICAgICAg
ICByZXR1cm4gbV92YXJBcmdDaGlsZHJlbltub2RlLmZpcnN0Q2hpbGQoKSArIGluZGV4XTsKKyAg
ICAgICAgQVNTRVJUKG5vZGUtPmZsYWdzKCkgJiBOb2RlSGFzVmFyQXJncyk7CisgICAgICAgIHJl
dHVybiBtX3ZhckFyZ0NoaWxkcmVuW25vZGUtPmZpcnN0Q2hpbGQoKSArIGluZGV4XTsKICAgICB9
CiAgICAgCi0gICAgRWRnZSYgY2hpbGQoTm9kZSYgbm9kZSwgdW5zaWduZWQgaW5kZXgpCisgICAg
RWRnZSYgY2hpbGQoTm9kZSogbm9kZSwgdW5zaWduZWQgaW5kZXgpCiAgICAgewotICAgICAgICBp
ZiAobm9kZS5mbGFncygpICYgTm9kZUhhc1ZhckFyZ3MpCisgICAgICAgIGlmIChub2RlLT5mbGFn
cygpICYgTm9kZUhhc1ZhckFyZ3MpCiAgICAgICAgICAgICByZXR1cm4gdmFyQXJnQ2hpbGQobm9k
ZSwgaW5kZXgpOwotICAgICAgICByZXR1cm4gbm9kZS5jaGlsZHJlbi5jaGlsZChpbmRleCk7Cisg
ICAgICAgIHJldHVybiBub2RlLT5jaGlsZHJlbi5jaGlsZChpbmRleCk7CiAgICAgfQogICAgIAot
ICAgIHZvaWQgdm90ZShFZGdlIGVkZ2UsIHVuc2lnbmVkIGJhbGxvdCkKKyAgICB2b2lkIHZvdGVO
b2RlKE5vZGUqIG5vZGUsIHVuc2lnbmVkIGJhbGxvdCkKICAgICB7Ci0gICAgICAgIHN3aXRjaCAo
YXQoZWRnZSkub3AoKSkgeworICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKICAgICAgICAg
Y2FzZSBWYWx1ZVRvSW50MzI6CiAgICAgICAgIGNhc2UgVUludDMyVG9OdW1iZXI6Ci0gICAgICAg
ICAgICBlZGdlID0gYXQoZWRnZSkuY2hpbGQxKCk7CisgICAgICAgICAgICBub2RlID0gbm9kZS0+
Y2hpbGQxKCkubm9kZSgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgaWYgKGF0KGVk
Z2UpLm9wKCkgPT0gR2V0TG9jYWwpCi0gICAgICAgICAgICBhdChlZGdlKS52YXJpYWJsZUFjY2Vz
c0RhdGEoKS0+dm90ZShiYWxsb3QpOworICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBHZXRMb2Nh
bCkKKyAgICAgICAgICAgIG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT52b3RlKGJhbGxvdCk7
CisgICAgfQorICAgIAorICAgIHZvaWQgdm90ZU5vZGUoRWRnZSBlZGdlLCB1bnNpZ25lZCBiYWxs
b3QpCisgICAgeworICAgICAgICB2b3RlTm9kZShlZGdlLm5vZGUoKSwgYmFsbG90KTsKICAgICB9
CiAgICAgCi0gICAgdm9pZCB2b3RlKE5vZGUmIG5vZGUsIHVuc2lnbmVkIGJhbGxvdCkKKyAgICB2
b2lkIHZvdGVDaGlsZHJlbihOb2RlKiBub2RlLCB1bnNpZ25lZCBiYWxsb3QpCiAgICAgewotICAg
ICAgICBpZiAobm9kZS5mbGFncygpICYgTm9kZUhhc1ZhckFyZ3MpIHsKLSAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgY2hpbGRJZHggPSBub2RlLmZpcnN0Q2hpbGQoKTsKLSAgICAgICAgICAgICAg
ICAgY2hpbGRJZHggPCBub2RlLmZpcnN0Q2hpbGQoKSArIG5vZGUubnVtQ2hpbGRyZW4oKTsKKyAg
ICAgICAgaWYgKG5vZGUtPmZsYWdzKCkgJiBOb2RlSGFzVmFyQXJncykgeworICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBjaGlsZElkeCA9IG5vZGUtPmZpcnN0Q2hpbGQoKTsKKyAgICAgICAgICAg
ICAgICAgY2hpbGRJZHggPCBub2RlLT5maXJzdENoaWxkKCkgKyBub2RlLT5udW1DaGlsZHJlbigp
OwogICAgICAgICAgICAgICAgICBjaGlsZElkeCsrKSB7CiAgICAgICAgICAgICAgICAgaWYgKCEh
bV92YXJBcmdDaGlsZHJlbltjaGlsZElkeF0pCiAgICAgICAgICAgICAgICAgICAgIHZvdGUobV92
YXJBcmdDaGlsZHJlbltjaGlsZElkeF0sIGJhbGxvdCk7CkBAIC02MzcsMzkgKzYyMSwzOCBAQCBw
dWJsaWM6CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAg
IGlmICghbm9kZS5jaGlsZDEoKSkKKyAgICAgICAgaWYgKCFub2RlLT5jaGlsZDEoKSkKICAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgdm90ZShub2RlLmNoaWxkMSgpLCBiYWxsb3QpOwotICAg
ICAgICBpZiAoIW5vZGUuY2hpbGQyKCkpCisgICAgICAgIHZvdGUobm9kZS0+Y2hpbGQxKCksIGJh
bGxvdCk7CisgICAgICAgIGlmICghbm9kZS0+Y2hpbGQyKCkpCiAgICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIHZvdGUobm9kZS5jaGlsZDIoKSwgYmFsbG90KTsKLSAgICAgICAgaWYgKCFub2Rl
LmNoaWxkMygpKQorICAgICAgICB2b3RlKG5vZGUtPmNoaWxkMigpLCBiYWxsb3QpOworICAgICAg
ICBpZiAoIW5vZGUtPmNoaWxkMygpKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB2b3Rl
KG5vZGUuY2hpbGQzKCksIGJhbGxvdCk7CisgICAgICAgIHZvdGUobm9kZS0+Y2hpbGQzKCksIGJh
bGxvdCk7CiAgICAgfQogICAgIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IC8vIFQgPSBOb2Rl
SW5kZXggb3IgRWRnZQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IC8vIFQgPSBOb2RlKiBvciBF
ZGdlCiAgICAgdm9pZCBzdWJzdGl0dXRlKEJhc2ljQmxvY2smIGJsb2NrLCB1bnNpZ25lZCBzdGFy
dEluZGV4SW5CbG9jaywgVCBvbGRUaGluZywgVCBuZXdUaGluZykKICAgICB7CiAgICAgICAgIGZv
ciAodW5zaWduZWQgaW5kZXhJbkJsb2NrID0gc3RhcnRJbmRleEluQmxvY2s7IGluZGV4SW5CbG9j
ayA8IGJsb2NrLnNpemUoKTsgKytpbmRleEluQmxvY2spIHsKLSAgICAgICAgICAgIE5vZGVJbmRl
eCBub2RlSW5kZXggPSBibG9ja1tpbmRleEluQmxvY2tdOwotICAgICAgICAgICAgTm9kZSYgbm9k
ZSA9IGF0KG5vZGVJbmRleCk7Ci0gICAgICAgICAgICBpZiAobm9kZS5mbGFncygpICYgTm9kZUhh
c1ZhckFyZ3MpIHsKLSAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGNoaWxkSWR4ID0gbm9k
ZS5maXJzdENoaWxkKCk7IGNoaWxkSWR4IDwgbm9kZS5maXJzdENoaWxkKCkgKyBub2RlLm51bUNo
aWxkcmVuKCk7ICsrY2hpbGRJZHgpIHsKKyAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9ja1tp
bmRleEluQmxvY2tdOworICAgICAgICAgICAgaWYgKG5vZGUtPmZsYWdzKCkgJiBOb2RlSGFzVmFy
QXJncykgeworICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgY2hpbGRJZHggPSBub2RlLT5m
aXJzdENoaWxkKCk7IGNoaWxkSWR4IDwgbm9kZS0+Zmlyc3RDaGlsZCgpICsgbm9kZS0+bnVtQ2hp
bGRyZW4oKTsgKytjaGlsZElkeCkgewogICAgICAgICAgICAgICAgICAgICBpZiAoISFtX3ZhckFy
Z0NoaWxkcmVuW2NoaWxkSWR4XSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBhcmVBbmRT
d2FwKG1fdmFyQXJnQ2hpbGRyZW5bY2hpbGRJZHhdLCBvbGRUaGluZywgbmV3VGhpbmcsIG5vZGUu
c2hvdWxkR2VuZXJhdGUoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBjb21wYXJlQW5kU3dh
cChtX3ZhckFyZ0NoaWxkcmVuW2NoaWxkSWR4XSwgb2xkVGhpbmcsIG5ld1RoaW5nLCBub2RlLT5z
aG91bGRHZW5lcmF0ZSgpKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgY29u
dGludWU7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoIW5vZGUuY2hpbGQxKCkpCisg
ICAgICAgICAgICBpZiAoIW5vZGUtPmNoaWxkMSgpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwotICAgICAgICAgICAgY29tcGFyZUFuZFN3YXAobm9kZS5jaGlsZHJlbi5jaGlsZDEoKSwgb2xk
VGhpbmcsIG5ld1RoaW5nLCBub2RlLnNob3VsZEdlbmVyYXRlKCkpOwotICAgICAgICAgICAgaWYg
KCFub2RlLmNoaWxkMigpKQorICAgICAgICAgICAgY29tcGFyZUFuZFN3YXAobm9kZS0+Y2hpbGRy
ZW4uY2hpbGQxKCksIG9sZFRoaW5nLCBuZXdUaGluZywgbm9kZS0+c2hvdWxkR2VuZXJhdGUoKSk7
CisgICAgICAgICAgICBpZiAoIW5vZGUtPmNoaWxkMigpKQogICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwotICAgICAgICAgICAgY29tcGFyZUFuZFN3YXAobm9kZS5jaGlsZHJlbi5jaGlsZDIoKSwg
b2xkVGhpbmcsIG5ld1RoaW5nLCBub2RlLnNob3VsZEdlbmVyYXRlKCkpOwotICAgICAgICAgICAg
aWYgKCFub2RlLmNoaWxkMygpKQorICAgICAgICAgICAgY29tcGFyZUFuZFN3YXAobm9kZS0+Y2hp
bGRyZW4uY2hpbGQyKCksIG9sZFRoaW5nLCBuZXdUaGluZywgbm9kZS0+c2hvdWxkR2VuZXJhdGUo
KSk7CisgICAgICAgICAgICBpZiAoIW5vZGUtPmNoaWxkMygpKQogICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwotICAgICAgICAgICAgY29tcGFyZUFuZFN3YXAobm9kZS5jaGlsZHJlbi5jaGlsZDMo
KSwgb2xkVGhpbmcsIG5ld1RoaW5nLCBub2RlLnNob3VsZEdlbmVyYXRlKCkpOworICAgICAgICAg
ICAgY29tcGFyZUFuZFN3YXAobm9kZS0+Y2hpbGRyZW4uY2hpbGQzKCksIG9sZFRoaW5nLCBuZXdU
aGluZywgbm9kZS0+c2hvdWxkR2VuZXJhdGUoKSk7CiAgICAgICAgIH0KICAgICB9CiAgICAgCkBA
IC02NzcsMjkgKzY2MCwyOCBAQCBwdWJsaWM6CiAgICAgLy8gYW55IEdldExvY2FscyBpbiB0aGUg
YmFzaWMgYmxvY2suCiAgICAgLy8gRklYTUU6IGl0IG1heSBiZSBhcHByb3ByaWF0ZSwgaW4gdGhl
IGZ1dHVyZSwgdG8gZ2VuZXJhbGl6ZSB0aGlzIHRvIGhhbmRsZSBHZXRMb2NhbHMKICAgICAvLyBp
bnRyb2R1Y2VkIGFueXdoZXJlIGluIHRoZSBiYXNpYyBibG9jay4KLSAgICB2b2lkIHN1YnN0aXR1
dGVHZXRMb2NhbChCYXNpY0Jsb2NrJiBibG9jaywgdW5zaWduZWQgc3RhcnRJbmRleEluQmxvY2ss
IFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhLCBOb2RlSW5kZXggbmV3R2V0
TG9jYWwpCisgICAgdm9pZCBzdWJzdGl0dXRlR2V0TG9jYWwoQmFzaWNCbG9jayYgYmxvY2ssIHVu
c2lnbmVkIHN0YXJ0SW5kZXhJbkJsb2NrLCBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNj
ZXNzRGF0YSwgTm9kZSogbmV3R2V0TG9jYWwpCiAgICAgewogICAgICAgICBpZiAodmFyaWFibGVB
Y2Nlc3NEYXRhLT5pc0NhcHR1cmVkKCkpIHsKICAgICAgICAgICAgIC8vIExldCBDU0Ugd29ycnkg
YWJvdXQgdGhpcyBvbmUuCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpbmRleEluQmxvY2sgPSBzdGFydEluZGV4SW5CbG9jazsgaW5kZXhJbkJs
b2NrIDwgYmxvY2suc2l6ZSgpOyArK2luZGV4SW5CbG9jaykgewotICAgICAgICAgICAgTm9kZUlu
ZGV4IG5vZGVJbmRleCA9IGJsb2NrW2luZGV4SW5CbG9ja107Ci0gICAgICAgICAgICBOb2RlJiBu
b2RlID0gYXQobm9kZUluZGV4KTsKKyAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9ja1tpbmRl
eEluQmxvY2tdOwogICAgICAgICAgICAgYm9vbCBzaG91bGRDb250aW51ZSA9IHRydWU7Ci0gICAg
ICAgICAgICBzd2l0Y2ggKG5vZGUub3AoKSkgeworICAgICAgICAgICAgc3dpdGNoIChub2RlLT5v
cCgpKSB7CiAgICAgICAgICAgICBjYXNlIFNldExvY2FsOiB7Ci0gICAgICAgICAgICAgICAgaWYg
KG5vZGUubG9jYWwoKSA9PSB2YXJpYWJsZUFjY2Vzc0RhdGEtPmxvY2FsKCkpCisgICAgICAgICAg
ICAgICAgaWYgKG5vZGUtPmxvY2FsKCkgPT0gdmFyaWFibGVBY2Nlc3NEYXRhLT5sb2NhbCgpKQog
ICAgICAgICAgICAgICAgICAgICBzaG91bGRDb250aW51ZSA9IGZhbHNlOwogICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAg
Y2FzZSBHZXRMb2NhbDogewotICAgICAgICAgICAgICAgIGlmIChub2RlLnZhcmlhYmxlQWNjZXNz
RGF0YSgpICE9IHZhcmlhYmxlQWNjZXNzRGF0YSkKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+
dmFyaWFibGVBY2Nlc3NEYXRhKCkgIT0gdmFyaWFibGVBY2Nlc3NEYXRhKQogICAgICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICBzdWJzdGl0dXRlKGJsb2NrLCBpbmRl
eEluQmxvY2ssIG5vZGVJbmRleCwgbmV3R2V0TG9jYWwpOwotICAgICAgICAgICAgICAgIE5vZGVJ
bmRleCBvbGRUYWlsSW5kZXggPSBibG9jay52YXJpYWJsZXNBdFRhaWwub3BlcmFuZCh2YXJpYWJs
ZUFjY2Vzc0RhdGEtPmxvY2FsKCkpOwotICAgICAgICAgICAgICAgIGlmIChvbGRUYWlsSW5kZXgg
PT0gbm9kZUluZGV4KQorICAgICAgICAgICAgICAgIHN1YnN0aXR1dGUoYmxvY2ssIGluZGV4SW5C
bG9jaywgbm9kZSwgbmV3R2V0TG9jYWwpOworICAgICAgICAgICAgICAgIE5vZGUqIG9sZFRhaWxO
b2RlID0gYmxvY2sudmFyaWFibGVzQXRUYWlsLm9wZXJhbmQodmFyaWFibGVBY2Nlc3NEYXRhLT5s
b2NhbCgpKTsKKyAgICAgICAgICAgICAgICBpZiAob2xkVGFpbE5vZGUgPT0gbm9kZSkKICAgICAg
ICAgICAgICAgICAgICAgYmxvY2sudmFyaWFibGVzQXRUYWlsLm9wZXJhbmQodmFyaWFibGVBY2Nl
c3NEYXRhLT5sb2NhbCgpKSA9IG5ld0dldExvY2FsOwogICAgICAgICAgICAgICAgIHNob3VsZENv
bnRpbnVlID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC03MTcsNiArNjk5LDgg
QEAgcHVibGljOgogICAgIENvZGVCbG9jayogbV9jb2RlQmxvY2s7CiAgICAgUmVmUHRyPFByb2Zp
bGVyOjpDb21waWxhdGlvbj4gbV9jb21waWxhdGlvbjsKICAgICBDb2RlQmxvY2sqIG1fcHJvZmls
ZWRCbG9jazsKKyAgICAKKyAgICBOb2RlQWxsb2NhdG9yJiBtX2FsbG9jYXRvcjsKIAogICAgIFZl
Y3RvcjwgT3duUHRyPEJhc2ljQmxvY2s+ICwgOD4gbV9ibG9ja3M7CiAgICAgVmVjdG9yPEVkZ2Us
IDE2PiBtX3ZhckFyZ0NoaWxkcmVuOwpAQCAtNzI0LDcgKzcwOCw3IEBAIHB1YmxpYzoKICAgICBW
ZWN0b3I8UmVzb2x2ZUdsb2JhbERhdGE+IG1fcmVzb2x2ZUdsb2JhbERhdGE7CiAgICAgVmVjdG9y
PFJlc29sdmVPcGVyYXRpb25EYXRhPiBtX3Jlc29sdmVPcGVyYXRpb25zRGF0YTsKICAgICBWZWN0
b3I8UHV0VG9CYXNlT3BlcmF0aW9uRGF0YT4gbV9wdXRUb0Jhc2VPcGVyYXRpb25EYXRhOwotICAg
IFZlY3RvcjxOb2RlSW5kZXgsIDg+IG1fYXJndW1lbnRzOworICAgIFZlY3RvcjxOb2RlKiwgOD4g
bV9hcmd1bWVudHM7CiAgICAgU2VnbWVudGVkVmVjdG9yPFZhcmlhYmxlQWNjZXNzRGF0YSwgMTY+
IG1fdmFyaWFibGVBY2Nlc3NEYXRhOwogICAgIFNlZ21lbnRlZFZlY3RvcjxBcmd1bWVudFBvc2l0
aW9uLCA4PiBtX2FyZ3VtZW50UG9zaXRpb25zOwogICAgIFNlZ21lbnRlZFZlY3RvcjxTdHJ1Y3R1
cmVTZXQsIDE2PiBtX3N0cnVjdHVyZVNldDsKQEAgLTc0NCwyOSArNzI4LDI5IEBAIHByaXZhdGU6
CiAgICAgCiAgICAgdm9pZCBoYW5kbGVTdWNjZXNzb3IoVmVjdG9yPEJsb2NrSW5kZXgsIDE2PiYg
d29ya2xpc3QsIEJsb2NrSW5kZXggYmxvY2tJbmRleCwgQmxvY2tJbmRleCBzdWNjZXNzb3JJbmRl
eCk7CiAgICAgCi0gICAgQWRkU3BlY3VsYXRpb25Nb2RlIGFkZEltbWVkaWF0ZVNob3VsZFNwZWN1
bGF0ZUludGVnZXIoTm9kZSYgYWRkLCBib29sIHZhcmlhYmxlU2hvdWxkU3BlY3VsYXRlSW50ZWdl
ciwgTm9kZSYgaW1tZWRpYXRlKQorICAgIEFkZFNwZWN1bGF0aW9uTW9kZSBhZGRJbW1lZGlhdGVT
aG91bGRTcGVjdWxhdGVJbnRlZ2VyKE5vZGUqIGFkZCwgYm9vbCB2YXJpYWJsZVNob3VsZFNwZWN1
bGF0ZUludGVnZXIsIE5vZGUqIGltbWVkaWF0ZSkKICAgICB7CiAgICAgICAgIEFTU0VSVChpbW1l
ZGlhdGUuaGFzQ29uc3RhbnQoKSk7CiAgICAgICAgIAotICAgICAgICBKU1ZhbHVlIGltbWVkaWF0
ZVZhbHVlID0gaW1tZWRpYXRlLnZhbHVlT2ZKU0NvbnN0YW50KG1fY29kZUJsb2NrKTsKLSAgICAg
ICAgaWYgKCFpbW1lZGlhdGVWYWx1ZS5pc051bWJlcigpKQorICAgICAgICBKU1ZhbHVlIGltbWVk
aWF0ZVZhbHVlID0gaW1tZWRpYXRlLT52YWx1ZU9mSlNDb25zdGFudChtX2NvZGVCbG9jayk7Cisg
ICAgICAgIGlmICghaW1tZWRpYXRlVmFsdWUtPmlzTnVtYmVyKCkpCiAgICAgICAgICAgICByZXR1
cm4gRG9udFNwZWN1bGF0ZUludGVnZXI7CiAgICAgICAgIAogICAgICAgICBpZiAoIXZhcmlhYmxl
U2hvdWxkU3BlY3VsYXRlSW50ZWdlcikKICAgICAgICAgICAgIHJldHVybiBEb250U3BlY3VsYXRl
SW50ZWdlcjsKICAgICAgICAgCi0gICAgICAgIGlmIChpbW1lZGlhdGVWYWx1ZS5pc0ludDMyKCkp
Ci0gICAgICAgICAgICByZXR1cm4gYWRkLmNhblNwZWN1bGF0ZUludGVnZXIoKSA/IFNwZWN1bGF0
ZUludGVnZXIgOiBEb250U3BlY3VsYXRlSW50ZWdlcjsKKyAgICAgICAgaWYgKGltbWVkaWF0ZVZh
bHVlLT5pc0ludDMyKCkpCisgICAgICAgICAgICByZXR1cm4gYWRkLT5jYW5TcGVjdWxhdGVJbnRl
Z2VyKCkgPyBTcGVjdWxhdGVJbnRlZ2VyIDogRG9udFNwZWN1bGF0ZUludGVnZXI7CiAgICAgICAg
IAogICAgICAgICBkb3VibGUgZG91YmxlSW1tZWRpYXRlID0gaW1tZWRpYXRlVmFsdWUuYXNEb3Vi
bGUoKTsKICAgICAgICAgY29uc3QgZG91YmxlIHR3b1RvVGhlNDggPSAyODE0NzQ5NzY3MTA2NTYu
MDsKICAgICAgICAgaWYgKGRvdWJsZUltbWVkaWF0ZSA8IC10d29Ub1RoZTQ4IHx8IGRvdWJsZUlt
bWVkaWF0ZSA+IHR3b1RvVGhlNDgpCiAgICAgICAgICAgICByZXR1cm4gRG9udFNwZWN1bGF0ZUlu
dGVnZXI7CiAgICAgICAgIAotICAgICAgICByZXR1cm4gbm9kZUNhblRydW5jYXRlSW50ZWdlcihh
ZGQuYXJpdGhOb2RlRmxhZ3MoKSkgPyBTcGVjdWxhdGVJbnRlZ2VyQnV0QWx3YXlzV2F0Y2hPdmVy
ZmxvdyA6IERvbnRTcGVjdWxhdGVJbnRlZ2VyOworICAgICAgICByZXR1cm4gbm9kZUNhblRydW5j
YXRlSW50ZWdlcihhZGQtPmFyaXRoTm9kZUZsYWdzKCkpID8gU3BlY3VsYXRlSW50ZWdlckJ1dEFs
d2F5c1dhdGNoT3ZlcmZsb3cgOiBEb250U3BlY3VsYXRlSW50ZWdlcjsKICAgICB9CiAgICAgCi0g
ICAgYm9vbCBtdWxJbW1lZGlhdGVTaG91bGRTcGVjdWxhdGVJbnRlZ2VyKE5vZGUmIG11bCwgTm9k
ZSYgdmFyaWFibGUsIE5vZGUmIGltbWVkaWF0ZSkKKyAgICBib29sIG11bEltbWVkaWF0ZVNob3Vs
ZFNwZWN1bGF0ZUludGVnZXIoTm9kZSogbXVsLCBOb2RlKiB2YXJpYWJsZSwgTm9kZSogaW1tZWRp
YXRlKQogICAgIHsKICAgICAgICAgQVNTRVJUKGltbWVkaWF0ZS5oYXNDb25zdGFudCgpKTsKICAg
ICAgICAgCkBAIC03NzQsNyArNzU4LDcgQEAgcHJpdmF0ZToKICAgICAgICAgaWYgKCFpbW1lZGlh
dGVWYWx1ZS5pc0ludDMyKCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIAot
ICAgICAgICBpZiAoIXZhcmlhYmxlLnNob3VsZFNwZWN1bGF0ZUludGVnZXJGb3JBcml0aG1ldGlj
KCkpCisgICAgICAgIGlmICghdmFyaWFibGUtPnNob3VsZFNwZWN1bGF0ZUludGVnZXJGb3JBcml0
aG1ldGljKCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIAogICAgICAgICBp
bnQzMl90IGludEltbWVkaWF0ZSA9IGltbWVkaWF0ZVZhbHVlLmFzSW50MzIoKTsKQEAgLTc4NSwx
NCArNzY5LDE0IEBAIHByaXZhdGU6CiAgICAgICAgIC8vIGNhblNwZWN1bGF0ZUludGVnZXIoKSBp
bXBsaWVzKS4KICAgICAgICAgY29uc3QgaW50MzJfdCB0d29Ub1RoZTIyID0gMSA8PCAyMjsKICAg
ICAgICAgaWYgKGludEltbWVkaWF0ZSA8PSAtdHdvVG9UaGUyMiB8fCBpbnRJbW1lZGlhdGUgPj0g
dHdvVG9UaGUyMikKLSAgICAgICAgICAgIHJldHVybiBtdWwuY2FuU3BlY3VsYXRlSW50ZWdlcigp
ICYmICFub2RlTWF5T3ZlcmZsb3cobXVsLmFyaXRoTm9kZUZsYWdzKCkpOworICAgICAgICAgICAg
cmV0dXJuIG11bC0+Y2FuU3BlY3VsYXRlSW50ZWdlcigpICYmICFub2RlTWF5T3ZlcmZsb3cobXVs
LT5hcml0aE5vZGVGbGFncygpKTsKIAotICAgICAgICByZXR1cm4gbXVsLmNhblNwZWN1bGF0ZUlu
dGVnZXIoKTsKKyAgICAgICAgcmV0dXJuIG11bC0+Y2FuU3BlY3VsYXRlSW50ZWdlcigpOwogICAg
IH0KICAgICAKICAgICAvLyBXaGVuIGEgbm9kZSdzIHJlZkNvdW50IGdvZXMgZnJvbSAwIHRvIDEs
IGl0IG11c3QgKGxvZ2ljYWxseSkgcmVjdXJzaXZlbHkgcmVmIGFsbCBvZiBpdHMgY2hpbGRyZW4s
IGFuZCB2aWNlIHZlcnNhLgotICAgIHZvaWQgcmVmQ2hpbGRyZW4oTm9kZUluZGV4KTsKLSAgICB2
b2lkIGRlcmVmQ2hpbGRyZW4oTm9kZUluZGV4KTsKKyAgICB2b2lkIHJlZkNoaWxkcmVuKE5vZGUq
KTsKKyAgICB2b2lkIGRlcmVmQ2hpbGRyZW4oTm9kZSopOwogfTsKIAogY2xhc3MgR2V0Qnl0ZWNv
ZGVCZWdpbkZvckJsb2NrIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5z
ZXJ0aW9uU2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJ
bnNlcnRpb25TZXQuaAkocmV2aXNpb24gMTQwMzA2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdJbnNlcnRpb25TZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMzksMTQgKzM5LDE0IEBA
IGNsYXNzIEluc2VydGlvbiB7CiBwdWJsaWM6CiAgICAgSW5zZXJ0aW9uKCkgeyB9CiAgICAgCi0g
ICAgSW5zZXJ0aW9uKHNpemVfdCBpbmRleCwgTm9kZUluZGV4IGVsZW1lbnQpCisgICAgSW5zZXJ0
aW9uKHNpemVfdCBpbmRleCwgTm9kZSogZWxlbWVudCkKICAgICAgICAgOiBtX2luZGV4KGluZGV4
KQogICAgICAgICAsIG1fZWxlbWVudChlbGVtZW50KQogICAgIHsKICAgICB9CiAgICAgCiAgICAg
c2l6ZV90IGluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9pbmRleDsgfQotICAgIE5vZGVJbmRleCBl
bGVtZW50KCkgY29uc3QgeyByZXR1cm4gbV9lbGVtZW50OyB9CisgICAgTm9kZSogZWxlbWVudCgp
IGNvbnN0IHsgcmV0dXJuIG1fZWxlbWVudDsgfQogcHJpdmF0ZToKICAgICBzaXplX3QgbV9pbmRl
eDsKICAgICBOb2RlSW5kZXggbV9lbGVtZW50OwpAQCAtNTksMjAgKzU5LDIwIEBAIHB1YmxpYzoK
ICAgICB7CiAgICAgfQogICAgIAotICAgIE5vZGVJbmRleCBpbnNlcnQoY29uc3QgSW5zZXJ0aW9u
JiBpbnNlcnRpb24pCisgICAgTm9kZSogaW5zZXJ0KGNvbnN0IEluc2VydGlvbiYgaW5zZXJ0aW9u
KQogICAgIHsKICAgICAgICAgQVNTRVJUKCFtX2luc2VydGlvbnMuc2l6ZSgpIHx8IG1faW5zZXJ0
aW9ucy5sYXN0KCkuaW5kZXgoKSA8PSBpbnNlcnRpb24uaW5kZXgoKSk7CiAgICAgICAgIG1faW5z
ZXJ0aW9ucy5hcHBlbmQoaW5zZXJ0aW9uKTsKICAgICAgICAgcmV0dXJuIGluc2VydGlvbi5lbGVt
ZW50KCk7CiAgICAgfQogICAgIAotICAgIE5vZGVJbmRleCBpbnNlcnQoc2l6ZV90IGluZGV4LCBO
b2RlSW5kZXggZWxlbWVudCkKKyAgICBOb2RlKiBpbnNlcnQoc2l6ZV90IGluZGV4LCBOb2RlSW5k
ZXggZWxlbWVudCkKICAgICB7CiAgICAgICAgIHJldHVybiBpbnNlcnQoSW5zZXJ0aW9uKGluZGV4
LCBlbGVtZW50KSk7CiAgICAgfQogCiAjZGVmaW5lIERGR19ERUZJTkVfSU5TRVJUX05PREUodGVt
cGxhdGVQcmUsIHRlbXBsYXRlUG9zdCwgdHlwZVBhcmFtcywgdmFsdWVQYXJhbXNDb21tYSwgdmFs
dWVQYXJhbXMsIHZhbHVlQXJncykgXAotICAgIHRlbXBsYXRlUHJlIHR5cGVQYXJhbXMgdGVtcGxh
dGVQb3N0IE5vZGVJbmRleCBpbnNlcnROb2RlKHNpemVfdCBpbmRleCwgUmVmQ2hpbGRyZW5Nb2Rl
IHJlZkNoaWxkcmVuTW9kZSwgUmVmTm9kZU1vZGUgcmVmTm9kZU1vZGUsIFNwZWN1bGF0ZWRUeXBl
IHR5cGUgdmFsdWVQYXJhbXNDb21tYSB2YWx1ZVBhcmFtcykgXAorICAgIHRlbXBsYXRlUHJlIHR5
cGVQYXJhbXMgdGVtcGxhdGVQb3N0IE5vZGUqIGluc2VydE5vZGUoc2l6ZV90IGluZGV4LCBSZWZD
aGlsZHJlbk1vZGUgcmVmQ2hpbGRyZW5Nb2RlLCBSZWZOb2RlTW9kZSByZWZOb2RlTW9kZSwgU3Bl
Y3VsYXRlZFR5cGUgdHlwZSB2YWx1ZVBhcmFtc0NvbW1hIHZhbHVlUGFyYW1zKSBcCiAgICAgeyBc
CiAgICAgICAgIHJldHVybiBpbnNlcnQoaW5kZXgsIG1fZ3JhcGguYWRkTm9kZShyZWZDaGlsZHJl
bk1vZGUsIHJlZk5vZGVNb2RlLCB0eXBlIHZhbHVlUGFyYW1zQ29tbWEgdmFsdWVBcmdzKSk7IFwK
ICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0xvbmdMaXZlZFN0YXRl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0xvbmdMaXZl
ZFN0YXRlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
TG9uZ0xpdmVkU3RhdGUuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ5IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJERkdMb25nTGl2ZWRTdGF0ZS5oIgorCisjaWYgRU5BQkxFKERGR19KSVQp
CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworTG9uZ0xpdmVkU3RhdGU6Okxv
bmdMaXZlZFN0YXRlKCkKK3sKK30KKworTG9uZ0xpdmVkU3RhdGU6On5Mb25nTGl2ZWRTdGF0ZSgp
Cit7Cit9CisKK3ZvaWQgTG9uZ0xpdmVkU3RhdGU6OnNocmlua1RvRml0KCkKK3sKKyAgICBtX2Fs
bG9jYXRvci5yZXNldCgpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRp
ZiAvLyBFTkFCTEUoREZHX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdMb25nTGl2ZWRTdGF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHTG9uZ0xpdmVkU3RhdGUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHTG9uZ0xpdmVkU3RhdGUuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1NSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVm
IERGR0xvbmdMaXZlZFN0YXRlX2gKKyNkZWZpbmUgREZHTG9uZ0xpdmVkU3RhdGVfaAorCisjaW5j
bHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUg
IkRGR05vZGVBbGxvY2F0b3IuaCIKKyNpbmNsdWRlIDx3dGYvRmFzdEFsbG9jQmFzZS5oPgorI2lu
Y2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERG
RyB7CisKK2NsYXNzIExvbmdMaXZlZFN0YXRlIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRF
RDsgV1RGX01BS0VfTk9OQ09QWUFCTEUoTG9uZ0xpdmVkU3RhdGUpOworcHVibGljOgorICAgIExv
bmdMaXZlZFN0YXRlKCk7CisgICAgfkxvbmdMaXZlZFN0YXRlKCk7CisgICAgCisgICAgdm9pZCBz
aHJpbmtUb0ZpdCgpOworICAgIAorICAgIE5vZGVBbGxvY2F0b3IgbV9hbGxvY2F0b3I7Cit9Owor
Cit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkK
KworI2VuZGlmIC8vIERGR0xvbmdMaXZlZFN0YXRlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdOb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR05vZGUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdOb2RlLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1NSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiREZHTm9kZS5oIgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRl
ICJERkdOb2RlQWxsb2NhdG9yLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsK
KwordW5zaWduZWQgTm9kZTo6aW5kZXgoKSBjb25zdAoreworICAgIHJldHVybiBOb2RlQWxsb2Nh
dG9yOjphbGxvY2F0b3JPZih0aGlzKS0+aW5kZXhPZih0aGlzKTsKK30KKworfSB9IC8vIG5hbWVz
cGFjZSBKU0M6OkRGRworCituYW1lc3BhY2UgV1RGIHsKKwordm9pZCBwcmludEludGVybmFsKFBy
aW50U3RyZWFtJiBvdXQsIE5vZGUqIG5vZGUpCit7CisgICAgaWYgKCFub2RlKQorICAgICAgICBv
dXQucHJpbnQoIi0iKTsKKyAgICBlbHNlCisgICAgICAgIG91dC5wcmludCgiQCIsIG5vZGUtPmlu
ZGV4KCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIEVOQUJMRShERkdf
SklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkocmV2aXNpb24gMTQw
MzA2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEyIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMiwg
MjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTY4LDcgKzY4LDcgQEAgc3RydWN0IE5ld0FycmF5QnVmZmVyRGF0YSB7
CiAKIC8vIFRoaXMgdHlwZSB1c2VkIGluIHBhc3NpbmcgYW4gaW1tZWRpYXRlIGFyZ3VtZW50IHRv
IE5vZGUgY29uc3RydWN0b3I7CiAvLyBkaXN0aW5ndWlzaGVzIGFuIGltbWVkaWF0ZSB2YWx1ZSAo
dHlwaWNhbGx5IGFuIGluZGV4IGludG8gYSBDb2RlQmxvY2sgZGF0YSBzdHJ1Y3R1cmUgLSAKLS8v
IGEgY29uc3RhbnQgaW5kZXgsIGFyZ3VtZW50LCBvciBpZGVudGlmaWVyKSBmcm9tIGEgTm9kZUlu
ZGV4LgorLy8gYSBjb25zdGFudCBpbmRleCwgYXJndW1lbnQsIG9yIGlkZW50aWZpZXIpIGZyb20g
YSBOb2RlKi4KIHN0cnVjdCBPcEluZm8gewogICAgIGV4cGxpY2l0IE9wSW5mbyhpbnQzMl90IHZh
bHVlKSA6IG1fdmFsdWUoc3RhdGljX2Nhc3Q8dWludHB0cl90Pih2YWx1ZSkpIHsgfQogICAgIGV4
cGxpY2l0IE9wSW5mbyh1aW50MzJfdCB2YWx1ZSkgOiBtX3ZhbHVlKHN0YXRpY19jYXN0PHVpbnRw
dHJfdD4odmFsdWUpKSB7IH0KQEAgLTk5LDcgKzk5LDcgQEAgc3RydWN0IE5vZGUgewogICAgIH0K
ICAgICAKICAgICAvLyBDb25zdHJ1Y3QgYSBub2RlIHdpdGggdXAgdG8gMyBjaGlsZHJlbiwgbm8g
aW1tZWRpYXRlIHZhbHVlLgotICAgIE5vZGUoTm9kZVR5cGUgb3AsIENvZGVPcmlnaW4gY29kZU9y
aWdpbiwgTm9kZUluZGV4IGNoaWxkMSA9IE5vTm9kZSwgTm9kZUluZGV4IGNoaWxkMiA9IE5vTm9k
ZSwgTm9kZUluZGV4IGNoaWxkMyA9IE5vTm9kZSkKKyAgICBOb2RlKE5vZGVUeXBlIG9wLCBDb2Rl
T3JpZ2luIGNvZGVPcmlnaW4sIE5vZGUqIGNoaWxkMSA9IDAsIE5vZGUqIGNoaWxkMiA9IDAsIE5v
ZGUqIGNoaWxkMyA9IDApCiAgICAgICAgIDogY29kZU9yaWdpbihjb2RlT3JpZ2luKQogICAgICAg
ICAsIGNoaWxkcmVuKEFkamFjZW5jeUxpc3Q6OkZpeGVkLCBjaGlsZDEsIGNoaWxkMiwgY2hpbGQz
KQogICAgICAgICAsIG1fdmlydHVhbFJlZ2lzdGVyKEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIpCkBA
IC0xMTEsNyArMTExLDcgQEAgc3RydWN0IE5vZGUgewogICAgIH0KIAogICAgIC8vIENvbnN0cnVj
dCBhIG5vZGUgd2l0aCB1cCB0byAzIGNoaWxkcmVuIGFuZCBhbiBpbW1lZGlhdGUgdmFsdWUuCi0g
ICAgTm9kZShOb2RlVHlwZSBvcCwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBPcEluZm8gaW1tLCBO
b2RlSW5kZXggY2hpbGQxID0gTm9Ob2RlLCBOb2RlSW5kZXggY2hpbGQyID0gTm9Ob2RlLCBOb2Rl
SW5kZXggY2hpbGQzID0gTm9Ob2RlKQorICAgIE5vZGUoTm9kZVR5cGUgb3AsIENvZGVPcmlnaW4g
Y29kZU9yaWdpbiwgT3BJbmZvIGltbSwgTm9kZSogY2hpbGQxID0gMCwgTm9kZSogY2hpbGQyID0g
MCwgTm9kZSogY2hpbGQzID0gMCkKICAgICAgICAgOiBjb2RlT3JpZ2luKGNvZGVPcmlnaW4pCiAg
ICAgICAgICwgY2hpbGRyZW4oQWRqYWNlbmN5TGlzdDo6Rml4ZWQsIGNoaWxkMSwgY2hpbGQyLCBj
aGlsZDMpCiAgICAgICAgICwgbV92aXJ0dWFsUmVnaXN0ZXIoSW52YWxpZFZpcnR1YWxSZWdpc3Rl
cikKQEAgLTEyNCw3ICsxMjQsNyBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgfQogCiAgICAgLy8gQ29u
c3RydWN0IGEgbm9kZSB3aXRoIHVwIHRvIDMgY2hpbGRyZW4gYW5kIHR3byBpbW1lZGlhdGUgdmFs
dWVzLgotICAgIE5vZGUoTm9kZVR5cGUgb3AsIENvZGVPcmlnaW4gY29kZU9yaWdpbiwgT3BJbmZv
IGltbTEsIE9wSW5mbyBpbW0yLCBOb2RlSW5kZXggY2hpbGQxID0gTm9Ob2RlLCBOb2RlSW5kZXgg
Y2hpbGQyID0gTm9Ob2RlLCBOb2RlSW5kZXggY2hpbGQzID0gTm9Ob2RlKQorICAgIE5vZGUoTm9k
ZVR5cGUgb3AsIENvZGVPcmlnaW4gY29kZU9yaWdpbiwgT3BJbmZvIGltbTEsIE9wSW5mbyBpbW0y
LCBOb2RlKiBjaGlsZDEgPSAwLCBOb2RlKiBjaGlsZDIgPSAwLCBOb2RlKiBjaGlsZDMgPSAwKQog
ICAgICAgICA6IGNvZGVPcmlnaW4oY29kZU9yaWdpbikKICAgICAgICAgLCBjaGlsZHJlbihBZGph
Y2VuY3lMaXN0OjpGaXhlZCwgY2hpbGQxLCBjaGlsZDIsIGNoaWxkMykKICAgICAgICAgLCBtX3Zp
cnR1YWxSZWdpc3RlcihJbnZhbGlkVmlydHVhbFJlZ2lzdGVyKQpAQCAtMTU0LDYgKzE1NCw5IEBA
IHN0cnVjdCBOb2RlIHsKICAgICBOb2RlVHlwZSBvcCgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19j
YXN0PE5vZGVUeXBlPihtX29wKTsgfQogICAgIE5vZGVGbGFncyBmbGFncygpIGNvbnN0IHsgcmV0
dXJuIG1fZmxhZ3M7IH0KICAgICAKKyAgICAvLyBUaGlzIGlzIG5vdCBhIGZhc3QgbWV0aG9kLgor
ICAgIHVuc2lnbmVkIGluZGV4KCkgY29uc3Q7CisgICAgCiAgICAgdm9pZCBzZXRPcChOb2RlVHlw
ZSBvcCkKICAgICB7CiAgICAgICAgIG1fb3AgPSBvcDsKQEAgLTI4MSw3ICsyODQsNyBAQCBzdHJ1
Y3QgTm9kZSB7CiAgICAgICAgIGNvbnZlcnRUb1N0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50
KHN0cnVjdHVyZVNldCgpLnNpbmdsZXRvblN0cnVjdHVyZSgpKTsKICAgICB9CiAgICAgCi0gICAg
dm9pZCBjb252ZXJ0VG9HZXRCeU9mZnNldCh1bnNpZ25lZCBzdG9yYWdlQWNjZXNzRGF0YUluZGV4
LCBOb2RlSW5kZXggc3RvcmFnZSkKKyAgICB2b2lkIGNvbnZlcnRUb0dldEJ5T2Zmc2V0KHVuc2ln
bmVkIHN0b3JhZ2VBY2Nlc3NEYXRhSW5kZXgsIE5vZGUqIHN0b3JhZ2UpCiAgICAgewogICAgICAg
ICBBU1NFUlQobV9vcCA9PSBHZXRCeUlkIHx8IG1fb3AgPT0gR2V0QnlJZEZsdXNoKTsKICAgICAg
ICAgbV9vcEluZm8gPSBzdG9yYWdlQWNjZXNzRGF0YUluZGV4OwpAQCAtMjkwLDcgKzI5Myw3IEBA
IHN0cnVjdCBOb2RlIHsKICAgICAgICAgbV9mbGFncyAmPSB+Tm9kZUNsb2JiZXJzV29ybGQ7CiAg
ICAgfQogICAgIAotICAgIHZvaWQgY29udmVydFRvUHV0QnlPZmZzZXQodW5zaWduZWQgc3RvcmFn
ZUFjY2Vzc0RhdGFJbmRleCwgTm9kZUluZGV4IHN0b3JhZ2UpCisgICAgdm9pZCBjb252ZXJ0VG9Q
dXRCeU9mZnNldCh1bnNpZ25lZCBzdG9yYWdlQWNjZXNzRGF0YUluZGV4LCBOb2RlKiBzdG9yYWdl
KQogICAgIHsKICAgICAgICAgQVNTRVJUKG1fb3AgPT0gUHV0QnlJZCB8fCBtX29wID09IFB1dEJ5
SWREaXJlY3QpOwogICAgICAgICBtX29wSW5mbyA9IHN0b3JhZ2VBY2Nlc3NEYXRhSW5kZXg7CkBA
IC05MjAsOSArOTIzLDEwIEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAgcmV0dXJuIG1fcmVmQ291
bnQ7CiAgICAgfQogCi0gICAgdm9pZCByZWYoKQorICAgIE5vZGUqIHJlZigpCiAgICAgewogICAg
ICAgICBtX3JlZkNvdW50Kys7CisgICAgICAgIHJldHVybiB0aGlzOwogICAgIH0KIAogICAgIHVu
c2lnbmVkIHBvc3RmaXhSZWYoKQpAQCAtMTEzNSw0NCArMTEzOSw0NCBAQCBzdHJ1Y3QgTm9kZSB7
CiAgICAgICAgIHJldHVybiBpc0NlbGxTcGVjdWxhdGlvbihwcmVkaWN0aW9uKCkpOwogICAgIH0K
ICAgICAKLSAgICBzdGF0aWMgYm9vbCBzaG91bGRTcGVjdWxhdGVJbnRlZ2VyKE5vZGUmIG9wMSwg
Tm9kZSYgb3AyKQorICAgIHN0YXRpYyBib29sIHNob3VsZFNwZWN1bGF0ZUludGVnZXIoTm9kZSog
b3AxLCBOb2RlKiBvcDIpCiAgICAgewotICAgICAgICByZXR1cm4gb3AxLnNob3VsZFNwZWN1bGF0
ZUludGVnZXIoKSAmJiBvcDIuc2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpOworICAgICAgICByZXR1
cm4gb3AxLT5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkgJiYgb3AyLT5zaG91bGRTcGVjdWxhdGVJ
bnRlZ2VyKCk7CiAgICAgfQogICAgIAotICAgIHN0YXRpYyBib29sIHNob3VsZFNwZWN1bGF0ZUlu
dGVnZXJGb3JBcml0aG1ldGljKE5vZGUmIG9wMSwgTm9kZSYgb3AyKQorICAgIHN0YXRpYyBib29s
IHNob3VsZFNwZWN1bGF0ZUludGVnZXJGb3JBcml0aG1ldGljKE5vZGUqIG9wMSwgTm9kZSogb3Ay
KQogICAgIHsKLSAgICAgICAgcmV0dXJuIG9wMS5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyRm9yQXJp
dGhtZXRpYygpICYmIG9wMi5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyRm9yQXJpdGhtZXRpYygpOwor
ICAgICAgICByZXR1cm4gb3AxLT5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyRm9yQXJpdGhtZXRpYygp
ICYmIG9wMi0+c2hvdWxkU3BlY3VsYXRlSW50ZWdlckZvckFyaXRobWV0aWMoKTsKICAgICB9CiAg
ICAgCi0gICAgc3RhdGljIGJvb2wgc2hvdWxkU3BlY3VsYXRlSW50ZWdlckV4cGVjdGluZ0RlZmlu
ZWQoTm9kZSYgb3AxLCBOb2RlJiBvcDIpCisgICAgc3RhdGljIGJvb2wgc2hvdWxkU3BlY3VsYXRl
SW50ZWdlckV4cGVjdGluZ0RlZmluZWQoTm9kZSogb3AxLCBOb2RlKiBvcDIpCiAgICAgewotICAg
ICAgICByZXR1cm4gb3AxLnNob3VsZFNwZWN1bGF0ZUludGVnZXJFeHBlY3RpbmdEZWZpbmVkKCkg
JiYgb3AyLnNob3VsZFNwZWN1bGF0ZUludGVnZXJFeHBlY3RpbmdEZWZpbmVkKCk7CisgICAgICAg
IHJldHVybiBvcDEtPnNob3VsZFNwZWN1bGF0ZUludGVnZXJFeHBlY3RpbmdEZWZpbmVkKCkgJiYg
b3AyLT5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyRXhwZWN0aW5nRGVmaW5lZCgpOwogICAgIH0KICAg
ICAKLSAgICBzdGF0aWMgYm9vbCBzaG91bGRTcGVjdWxhdGVEb3VibGVGb3JBcml0aG1ldGljKE5v
ZGUmIG9wMSwgTm9kZSYgb3AyKQorICAgIHN0YXRpYyBib29sIHNob3VsZFNwZWN1bGF0ZURvdWJs
ZUZvckFyaXRobWV0aWMoTm9kZSogb3AxLCBOb2RlKiBvcDIpCiAgICAgewotICAgICAgICByZXR1
cm4gb3AxLnNob3VsZFNwZWN1bGF0ZURvdWJsZUZvckFyaXRobWV0aWMoKSAmJiBvcDIuc2hvdWxk
U3BlY3VsYXRlRG91YmxlRm9yQXJpdGhtZXRpYygpOworICAgICAgICByZXR1cm4gb3AxLT5zaG91
bGRTcGVjdWxhdGVEb3VibGVGb3JBcml0aG1ldGljKCkgJiYgb3AyLT5zaG91bGRTcGVjdWxhdGVE
b3VibGVGb3JBcml0aG1ldGljKCk7CiAgICAgfQogICAgIAotICAgIHN0YXRpYyBib29sIHNob3Vs
ZFNwZWN1bGF0ZU51bWJlcihOb2RlJiBvcDEsIE5vZGUmIG9wMikKKyAgICBzdGF0aWMgYm9vbCBz
aG91bGRTcGVjdWxhdGVOdW1iZXIoTm9kZSogb3AxLCBOb2RlKiBvcDIpCiAgICAgewotICAgICAg
ICByZXR1cm4gb3AxLnNob3VsZFNwZWN1bGF0ZU51bWJlcigpICYmIG9wMi5zaG91bGRTcGVjdWxh
dGVOdW1iZXIoKTsKKyAgICAgICAgcmV0dXJuIG9wMS0+c2hvdWxkU3BlY3VsYXRlTnVtYmVyKCkg
JiYgb3AyLT5zaG91bGRTcGVjdWxhdGVOdW1iZXIoKTsKICAgICB9CiAgICAgCi0gICAgc3RhdGlj
IGJvb2wgc2hvdWxkU3BlY3VsYXRlTnVtYmVyRXhwZWN0aW5nRGVmaW5lZChOb2RlJiBvcDEsIE5v
ZGUmIG9wMikKKyAgICBzdGF0aWMgYm9vbCBzaG91bGRTcGVjdWxhdGVOdW1iZXJFeHBlY3RpbmdE
ZWZpbmVkKE5vZGUqIG9wMSwgTm9kZSogb3AyKQogICAgIHsKLSAgICAgICAgcmV0dXJuIG9wMS5z
aG91bGRTcGVjdWxhdGVOdW1iZXJFeHBlY3RpbmdEZWZpbmVkKCkgJiYgb3AyLnNob3VsZFNwZWN1
bGF0ZU51bWJlckV4cGVjdGluZ0RlZmluZWQoKTsKKyAgICAgICAgcmV0dXJuIG9wMS0+c2hvdWxk
U3BlY3VsYXRlTnVtYmVyRXhwZWN0aW5nRGVmaW5lZCgpICYmIG9wMi0+c2hvdWxkU3BlY3VsYXRl
TnVtYmVyRXhwZWN0aW5nRGVmaW5lZCgpOwogICAgIH0KICAgICAKLSAgICBzdGF0aWMgYm9vbCBz
aG91bGRTcGVjdWxhdGVGaW5hbE9iamVjdChOb2RlJiBvcDEsIE5vZGUmIG9wMikKKyAgICBzdGF0
aWMgYm9vbCBzaG91bGRTcGVjdWxhdGVGaW5hbE9iamVjdChOb2RlKiBvcDEsIE5vZGUqIG9wMikK
ICAgICB7Ci0gICAgICAgIHJldHVybiBvcDEuc2hvdWxkU3BlY3VsYXRlRmluYWxPYmplY3QoKSAm
JiBvcDIuc2hvdWxkU3BlY3VsYXRlRmluYWxPYmplY3QoKTsKKyAgICAgICAgcmV0dXJuIG9wMS0+
c2hvdWxkU3BlY3VsYXRlRmluYWxPYmplY3QoKSAmJiBvcDItPnNob3VsZFNwZWN1bGF0ZUZpbmFs
T2JqZWN0KCk7CiAgICAgfQogCi0gICAgc3RhdGljIGJvb2wgc2hvdWxkU3BlY3VsYXRlQXJyYXko
Tm9kZSYgb3AxLCBOb2RlJiBvcDIpCisgICAgc3RhdGljIGJvb2wgc2hvdWxkU3BlY3VsYXRlQXJy
YXkoTm9kZSogb3AxLCBOb2RlKiBvcDIpCiAgICAgewotICAgICAgICByZXR1cm4gb3AxLnNob3Vs
ZFNwZWN1bGF0ZUFycmF5KCkgJiYgb3AyLnNob3VsZFNwZWN1bGF0ZUFycmF5KCk7CisgICAgICAg
IHJldHVybiBvcDEtPnNob3VsZFNwZWN1bGF0ZUFycmF5KCkgJiYgb3AyLT5zaG91bGRTcGVjdWxh
dGVBcnJheSgpOwogICAgIH0KICAgICAKICAgICBib29sIGNhblNwZWN1bGF0ZUludGVnZXIoKQpA
QCAtMTE4NCwxNSArMTE4OCwxNyBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgewogICAgICAgICBpZiAo
IWNoaWxkMSgpKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBvdXQucHJpbnRmKCJAJXUi
LCBjaGlsZDEoKS5pbmRleCgpKTsKKyAgICAgICAgb3V0LnByaW50ZigiQCV1IiwgY2hpbGQxKCkt
PmluZGV4KCkpOwogICAgICAgICBpZiAoIWNoaWxkMigpKQogICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICBvdXQucHJpbnRmKCIsIEAldSIsIGNoaWxkMigpLmluZGV4KCkpOworICAgICAgICBv
dXQucHJpbnRmKCIsIEAldSIsIGNoaWxkMigpLT5pbmRleCgpKTsKICAgICAgICAgaWYgKCFjaGls
ZDMoKSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgb3V0LnByaW50ZigiLCBAJXUiLCBj
aGlsZDMoKS5pbmRleCgpKTsKKyAgICAgICAgb3V0LnByaW50ZigiLCBAJXUiLCBjaGlsZDMoKS0+
aW5kZXgoKSk7CiAgICAgfQogICAgIAorICAgIC8vIE5CLiBUaGlzIGNsYXNzIG11c3QgaGF2ZSBh
IHRyaXZpYWwgZGVzdHJ1Y3Rvci4KKyAgICAKICAgICAvLyBVc2VkIHRvIGxvb2sgdXAgZXhjZXB0
aW9uIGhhbmRsaW5nIGluZm9ybWF0aW9uIChjdXJyZW50bHkgaW1wbGVtZW50ZWQgYXMgYSBieXRl
Y29kZSBpbmRleCkuCiAgICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2luOwogICAgIC8vIFJlZmVyZW5j
ZXMgdG8gdXAgdG8gMyBjaGlsZHJlbiwgb3IgbGlua3MgdG8gYSB2YXJpYWJsZSBsZW5ndGggc2V0
IG9mIGNoaWxkcmVuLgpAQCAtMTIxNSwxMCArMTIyMSwxNiBAQCBwcml2YXRlOgogcHVibGljOgog
ICAgIC8vIEZpZWxkcyB1c2VkIGJ5IHZhcmlvdXMgYW5hbHlzZXMuCiAgICAgQWJzdHJhY3RWYWx1
ZSB2YWx1ZTsKLSAgICBOb2RlSW5kZXggcmVwbGFjZW1lbnQ7CisgICAgTm9kZSogcmVwbGFjZW1l
bnQ7CiB9OwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCiAKK25hbWVzcGFjZSBXVEYgewor
Cit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mLCBOb2RlKik7CisKK30gLy8gbmFtZXNw
YWNlIFdURgorCiAjZW5kaWYKICNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdOb2RlQWxsb2NhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdOb2RlQWxsb2NhdG9yLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR05vZGVBbGxvY2F0b3IuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1MSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVm
IERGR05vZGVBbGxvY2F0b3JfaAorI2RlZmluZSBERkdOb2RlQWxsb2NhdG9yX2gKKworI2luY2x1
ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJE
RkdBbGxvY2F0b3IuaCIKKyNpbmNsdWRlICJERkdOb2RlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgREZHIHsKKwordHlwZWRlZiBBbGxvY2F0b3I8Tm9kZSwgNDA5NT4gTm9kZUFsbG9j
YXRvcjsKKworaW5saW5lIHZvaWQqIG9wZXJhdG9yIG5ldyAoc2l6ZV90IHNpemUsIE5vZGVBbGxv
Y2F0b3ImIGFsbG9jYXRvcikKK3sKKyAgICBBU1NFUlQoc2l6ZSA9PSBzaXplb2YoTm9kZSkpOwor
ICAgIHJldHVybiBhbGxvY2F0b3IuYWxsb2NhdGUoKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdOb2Rl
QWxsb2NhdG9yX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0
aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAJKHJldmlzaW9uIDE0MDMw
NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9u
UGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMSwgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTEsIDIwMTIsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC04NSw3NSArODUsNzMgQEAgcHVi
bGljOgogcHJpdmF0ZToKICAgICBib29sIHNldFByZWRpY3Rpb24oU3BlY3VsYXRlZFR5cGUgcHJl
ZGljdGlvbikKICAgICB7Ci0gICAgICAgIEFTU0VSVChtX2dyYXBoW21fY29tcGlsZUluZGV4XS5o
YXNSZXN1bHQoKSk7CisgICAgICAgIEFTU0VSVChtX2N1cnJlbnROb2RlLT5oYXNSZXN1bHQoKSk7
CiAgICAgICAgIAogICAgICAgICAvLyBzZXRQcmVkaWN0aW9uKCkgaXMgdXNlZCB3aGVuIHdlIGtu
b3cgdGhhdCB0aGVyZSBpcyBubyB3YXkgdGhhdCB3ZSBjYW4gY2hhbmdlCiAgICAgICAgIC8vIG91
ciBtaW5kcyBhYm91dCB3aGF0IHRoZSBwcmVkaWN0aW9uIGlzIGdvaW5nIHRvIGJlLiBUaGVyZSBp
cyBubyBzZW1hbnRpYwogICAgICAgICAvLyBkaWZmZXJlbmNlIGJldHdlZW4gc2V0UHJlZGljdGlv
bigpIGFuZCBtZXJnZVNwZWN1bGF0aW9uKCkgb3RoZXIgdGhhbiB0aGUKICAgICAgICAgLy8gaW5j
cmVhc2VkIGNoZWNraW5nIHRvIHZhbGlkYXRlIHRoaXMgcHJvcGVydHkuCi0gICAgICAgIEFTU0VS
VChtX2dyYXBoW21fY29tcGlsZUluZGV4XS5wcmVkaWN0aW9uKCkgPT0gU3BlY05vbmUgfHwgbV9n
cmFwaFttX2NvbXBpbGVJbmRleF0ucHJlZGljdGlvbigpID09IHByZWRpY3Rpb24pOworICAgICAg
ICBBU1NFUlQobV9jdXJyZW50Tm9kZS0+cHJlZGljdGlvbigpID09IFNwZWNOb25lIHx8IG1fY3Vy
cmVudE5vZGUtPnByZWRpY3Rpb24oKSA9PSBwcmVkaWN0aW9uKTsKICAgICAgICAgCi0gICAgICAg
IHJldHVybiBtX2dyYXBoW21fY29tcGlsZUluZGV4XS5wcmVkaWN0KHByZWRpY3Rpb24pOworICAg
ICAgICByZXR1cm4gbV9jdXJyZW50Tm9kZS0+cHJlZGljdChwcmVkaWN0aW9uKTsKICAgICB9CiAg
ICAgCiAgICAgYm9vbCBtZXJnZVByZWRpY3Rpb24oU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbikK
ICAgICB7Ci0gICAgICAgIEFTU0VSVChtX2dyYXBoW21fY29tcGlsZUluZGV4XS5oYXNSZXN1bHQo
KSk7CisgICAgICAgIEFTU0VSVChtX2N1cnJlbnROb2RlLT5oYXNSZXN1bHQoKSk7CiAgICAgICAg
IAotICAgICAgICByZXR1cm4gbV9ncmFwaFttX2NvbXBpbGVJbmRleF0ucHJlZGljdChwcmVkaWN0
aW9uKTsKKyAgICAgICAgcmV0dXJuIG1fY3VycmVudE5vZGUtPnByZWRpY3QocHJlZGljdGlvbik7
CiAgICAgfQogICAgIAotICAgIGJvb2wgaXNOb3ROZWdaZXJvKE5vZGVJbmRleCBub2RlSW5kZXgp
CisgICAgYm9vbCBpc05vdE5lZ1plcm8oTm9kZSogbm9kZSkKICAgICB7Ci0gICAgICAgIGlmICgh
bV9ncmFwaC5pc051bWJlckNvbnN0YW50KG5vZGVJbmRleCkpCisgICAgICAgIGlmICghbV9ncmFw
aC5pc051bWJlckNvbnN0YW50KG5vZGUpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgICBkb3VibGUgdmFsdWUgPSBtX2dyYXBoLnZhbHVlT2ZOdW1iZXJDb25zdGFudChub2RlSW5k
ZXgpOworICAgICAgICBkb3VibGUgdmFsdWUgPSBtX2dyYXBoLnZhbHVlT2ZOdW1iZXJDb25zdGFu
dChub2RlKTsKICAgICAgICAgcmV0dXJuICF2YWx1ZSAmJiAxLjAgLyB2YWx1ZSA8IDAuMDsKICAg
ICB9CiAgICAgCi0gICAgYm9vbCBpc05vdFplcm8oTm9kZUluZGV4IG5vZGVJbmRleCkKKyAgICBi
b29sIGlzTm90WmVybyhOb2RlKiBub2RlKQogICAgIHsKLSAgICAgICAgaWYgKCFtX2dyYXBoLmlz
TnVtYmVyQ29uc3RhbnQobm9kZUluZGV4KSkKKyAgICAgICAgaWYgKCFtX2dyYXBoLmlzTnVtYmVy
Q29uc3RhbnQobm9kZSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIHJldHVy
biAhIW1fZ3JhcGgudmFsdWVPZk51bWJlckNvbnN0YW50KG5vZGVJbmRleCk7CisgICAgICAgIHJl
dHVybiAhIW1fZ3JhcGgudmFsdWVPZk51bWJlckNvbnN0YW50KG5vZGUpOwogICAgIH0KICAgICAK
LSAgICBib29sIGlzV2l0aGluUG93ZXJPZlR3b0ZvckNvbnN0YW50KE5vZGUmIG5vZGUsIGludCBw
b3dlcikKKyAgICBib29sIGlzV2l0aGluUG93ZXJPZlR3b0ZvckNvbnN0YW50KE5vZGUqIG5vZGUs
IGludCBwb3dlcikKICAgICB7Ci0gICAgICAgIEpTVmFsdWUgaW1tZWRpYXRlVmFsdWUgPSBub2Rl
LnZhbHVlT2ZKU0NvbnN0YW50KGNvZGVCbG9jaygpKTsKKyAgICAgICAgSlNWYWx1ZSBpbW1lZGlh
dGVWYWx1ZSA9IG5vZGUtPnZhbHVlT2ZKU0NvbnN0YW50KGNvZGVCbG9jaygpKTsKICAgICAgICAg
aWYgKCFpbW1lZGlhdGVWYWx1ZS5pc0ludDMyKCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgICAgIGludDMyX3QgaW50SW1tZWRpYXRlID0gaW1tZWRpYXRlVmFsdWUuYXNJbnQzMigp
OwogICAgICAgICByZXR1cm4gaW50SW1tZWRpYXRlID4gLSgxIDw8IHBvd2VyKSAmJiBpbnRJbW1l
ZGlhdGUgPCAoMSA8PCBwb3dlcik7CiAgICAgfQogICAgIAotICAgIGJvb2wgaXNXaXRoaW5Qb3dl
ck9mVHdvTm9uUmVjdXJzaXZlKE5vZGVJbmRleCBub2RlSW5kZXgsIGludCBwb3dlcikKKyAgICBi
b29sIGlzV2l0aGluUG93ZXJPZlR3b05vblJlY3Vyc2l2ZShOb2RlKiBub2RlLCBpbnQgcG93ZXIp
CiAgICAgewotICAgICAgICBOb2RlJiBub2RlID0gbV9ncmFwaFtub2RlSW5kZXhdOwotICAgICAg
ICBpZiAobm9kZS5vcCgpICE9IEpTQ29uc3RhbnQpCisgICAgICAgIGlmIChub2RlLT5vcCgpICE9
IEpTQ29uc3RhbnQpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIHJldHVybiBp
c1dpdGhpblBvd2VyT2ZUd29Gb3JDb25zdGFudChub2RlLCBwb3dlcik7CiAgICAgfQogICAgIAot
ICAgIGJvb2wgaXNXaXRoaW5Qb3dlck9mVHdvKE5vZGVJbmRleCBub2RlSW5kZXgsIGludCBwb3dl
cikKKyAgICBib29sIGlzV2l0aGluUG93ZXJPZlR3byhOb2RlKiBub2RlLCBpbnQgcG93ZXIpCiAg
ICAgewotICAgICAgICBOb2RlJiBub2RlID0gbV9ncmFwaFtub2RlSW5kZXhdOwotICAgICAgICBz
d2l0Y2ggKG5vZGUub3AoKSkgeworICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKICAgICAg
ICAgY2FzZSBKU0NvbnN0YW50OiB7CiAgICAgICAgICAgICByZXR1cm4gaXNXaXRoaW5Qb3dlck9m
VHdvRm9yQ29uc3RhbnQobm9kZSwgcG93ZXIpOwogICAgICAgICB9CiAgICAgICAgICAgICAKICAg
ICAgICAgY2FzZSBCaXRBbmQ6IHsKLSAgICAgICAgICAgIHJldHVybiBpc1dpdGhpblBvd2VyT2ZU
d29Ob25SZWN1cnNpdmUobm9kZS5jaGlsZDEoKS5pbmRleCgpLCBwb3dlcikKLSAgICAgICAgICAg
ICAgICB8fCBpc1dpdGhpblBvd2VyT2ZUd29Ob25SZWN1cnNpdmUobm9kZS5jaGlsZDIoKS5pbmRl
eCgpLCBwb3dlcik7CisgICAgICAgICAgICByZXR1cm4gaXNXaXRoaW5Qb3dlck9mVHdvTm9uUmVj
dXJzaXZlKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgcG93ZXIpCisgICAgICAgICAgICAgICAgfHwg
aXNXaXRoaW5Qb3dlck9mVHdvTm9uUmVjdXJzaXZlKG5vZGUtPmNoaWxkMigpLm5vZGUoKSwgcG93
ZXIpOwogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBCaXRSU2hpZnQ6CiAg
ICAgICAgIGNhc2UgQml0VVJTaGlmdDogewotICAgICAgICAgICAgTm9kZSYgc2hpZnRBbW91bnQg
PSBtX2dyYXBoW25vZGUuY2hpbGQyKCldOwotICAgICAgICAgICAgaWYgKHNoaWZ0QW1vdW50Lm9w
KCkgIT0gSlNDb25zdGFudCkKKyAgICAgICAgICAgIE5vZGUqIHNoaWZ0QW1vdW50ID0gbm9kZS0+
Y2hpbGQyKCkubm9kZSgpOworICAgICAgICAgICAgaWYgKHNoaWZ0QW1vdW50LT5vcCgpICE9IEpT
Q29uc3RhbnQpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgSlNW
YWx1ZSBpbW1lZGlhdGVWYWx1ZSA9IHNoaWZ0QW1vdW50LnZhbHVlT2ZKU0NvbnN0YW50KGNvZGVC
bG9jaygpKTsKKyAgICAgICAgICAgIEpTVmFsdWUgaW1tZWRpYXRlVmFsdWUgPSBzaGlmdEFtb3Vu
dC0+dmFsdWVPZkpTQ29uc3RhbnQoY29kZUJsb2NrKCkpOwogICAgICAgICAgICAgaWYgKCFpbW1l
ZGlhdGVWYWx1ZS5pc0ludDMyKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
ICAgICAgICAgcmV0dXJuIGltbWVkaWF0ZVZhbHVlID4gMzIgLSBwb3dlcjsKQEAgLTE3OCwxNiAr
MTc2LDE2IEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiBzcGVjdWxhdGVkRG91YmxlVHlwZUZv
clByZWRpY3Rpb24obWVyZ2VTcGVjdWxhdGlvbnMobGVmdCwgcmlnaHQpKTsKICAgICB9CiAKLSAg
ICB2b2lkIHByb3BhZ2F0ZShOb2RlJiBub2RlKQorICAgIHZvaWQgcHJvcGFnYXRlKE5vZGUqIG5v
ZGUpCiAgICAgewotICAgICAgICBpZiAoIW5vZGUuc2hvdWxkR2VuZXJhdGUoKSkKKyAgICAgICAg
aWYgKCFub2RlLT5zaG91bGRHZW5lcmF0ZSgpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICAKLSAgICAgICAgTm9kZVR5cGUgb3AgPSBub2RlLm9wKCk7Ci0gICAgICAgIE5vZGVGbGFncyBm
bGFncyA9IG5vZGUuZmxhZ3MoKSAmIE5vZGVCYWNrUHJvcE1hc2s7CisgICAgICAgIE5vZGVUeXBl
IG9wID0gbm9kZS0+b3AoKTsKKyAgICAgICAgTm9kZUZsYWdzIGZsYWdzID0gbm9kZS0+ZmxhZ3Mo
KSAmIE5vZGVCYWNrUHJvcE1hc2s7CiAKICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9O
X1ZFUkJPU0UpCi0gICAgICAgIGRhdGFMb2dGKCIgICAlcyBAJXU6ICVzICIsIEdyYXBoOjpvcE5h
bWUob3ApLCBtX2NvbXBpbGVJbmRleCwgbm9kZUZsYWdzQXNTdHJpbmcoZmxhZ3MpKTsKKyAgICAg
ICAgZGF0YUxvZygiICAgIiwgR3JhcGg6Om9wTmFtZShvcCksICIgIiwgbV9jdXJyZW50Tm9kZSwg
IjogIiwgbm9kZUZsYWdzQXNTdHJpbmcoZmxhZ3MpLCAiICIpOwogI2VuZGlmCiAgICAgICAgIAog
ICAgICAgICBib29sIGNoYW5nZWQgPSBmYWxzZTsKQEAgLTE5NSwxMiArMTkzLDEyIEBAIHByaXZh
dGU6CiAgICAgICAgIHN3aXRjaCAob3ApIHsKICAgICAgICAgY2FzZSBKU0NvbnN0YW50OgogICAg
ICAgICBjYXNlIFdlYWtKU0NvbnN0YW50OiB7Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IHNldFBy
ZWRpY3Rpb24oc3BlY3VsYXRpb25Gcm9tVmFsdWUobV9ncmFwaC52YWx1ZU9mSlNDb25zdGFudCht
X2NvbXBpbGVJbmRleCkpKTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gc2V0UHJlZGljdGlvbihz
cGVjdWxhdGlvbkZyb21WYWx1ZShtX2dyYXBoLnZhbHVlT2ZKU0NvbnN0YW50KG5vZGUpKSk7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgIGNhc2Ug
R2V0TG9jYWw6IHsKLSAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nl
c3NEYXRhID0gbm9kZS52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKKyAgICAgICAgICAgIFZhcmlhYmxl
QWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRh
KCk7CiAgICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uID0gdmFyaWFibGVBY2Nl
c3NEYXRhLT5wcmVkaWN0aW9uKCk7CiAgICAgICAgICAgICBpZiAocHJlZGljdGlvbikKICAgICAg
ICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbihwcmVkaWN0aW9uKTsKQEAgLTIx
MCwyMSArMjA4LDIxIEBAIHByaXZhdGU6CiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAg
ICBjYXNlIFNldExvY2FsOiB7Ci0gICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlh
YmxlQWNjZXNzRGF0YSA9IG5vZGUudmFyaWFibGVBY2Nlc3NEYXRhKCk7Ci0gICAgICAgICAgICBj
aGFuZ2VkIHw9IHZhcmlhYmxlQWNjZXNzRGF0YS0+cHJlZGljdChtX2dyYXBoW25vZGUuY2hpbGQx
KCldLnByZWRpY3Rpb24oKSk7CisgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlh
YmxlQWNjZXNzRGF0YSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOworICAgICAgICAgICAg
Y2hhbmdlZCB8PSB2YXJpYWJsZUFjY2Vzc0RhdGEtPnByZWRpY3Qobm9kZS0+Y2hpbGQxKCktPnBy
ZWRpY3Rpb24oKSk7CiAKICAgICAgICAgICAgIC8vIEFzc3VtZSBjb25zZXJ2YXRpdmVseSB0aGF0
IGEgU2V0TG9jYWwgaW1wbGllcyB0aGF0IHRoZSB2YWx1ZSBtYXkgZmxvdyB0aHJvdWdoIGEgbG9v
cCwKICAgICAgICAgICAgIC8vIGFuZCBzbyB3ZSB3b3VsZCBoYXZlIG92ZXJmbG93IGxlYWRpbmcg
dG8gdGhlIHByb2dyYW0gIm9ic2VydmluZyIgbnVtYmVycyBldmVuIGlmIGFsbAogICAgICAgICAg
ICAgLy8gdXNlcnMgb2YgdGhlIHZhbHVlIGFyZSBkb2luZyB0b0ludDMyLiBJdCBtaWdodCBiZSB3
b3J0aHdoaWxlIHRvIHJldmlzaXQgdGhpcyBhdCBzb21lCiAgICAgICAgICAgICAvLyBwb2ludCBh
bmQgYWN0dWFsbHkgY2hlY2sgaWYgdGhlIGRhdGEgZmxvdyBpbnZvbHZlcyBsb29wcywgYnV0IHJp
Z2h0IG5vdyBJIGRvbid0IHRoaW5rCiAgICAgICAgICAgICAvLyB3ZSBoYXZlIGV2aWRlbmNlIHRo
YXQgdGhpcyB3b3VsZCBiZSBiZW5lZmljaWFsIGZvciBiZW5jaG1hcmtzLgotICAgICAgICAgICAg
Y2hhbmdlZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLm1lcmdlRmxhZ3ModmFyaWFibGVBY2Nl
c3NEYXRhLT5mbGFncygpIHwgTm9kZVVzZWRBc051bWJlcik7CisgICAgICAgICAgICBjaGFuZ2Vk
IHw9IG5vZGUtPmNoaWxkMSgpLT5tZXJnZUZsYWdzKHZhcmlhYmxlQWNjZXNzRGF0YS0+ZmxhZ3Mo
KSB8IE5vZGVVc2VkQXNOdW1iZXIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAg
ICAgICAgICAgIAogICAgICAgICBjYXNlIEZsdXNoOiB7CiAgICAgICAgICAgICAvLyBNYWtlIHN1
cmUgdGhhdCB0aGUgYW5hbHlzaXMga25vd3MgdGhhdCBmbHVzaGVkIGxvY2FscyBlc2NhcGUuCi0g
ICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9IG5vZGUu
dmFyaWFibGVBY2Nlc3NEYXRhKCk7CisgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZh
cmlhYmxlQWNjZXNzRGF0YSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOwogICAgICAgICAg
ICAgY2hhbmdlZCB8PSB2YXJpYWJsZUFjY2Vzc0RhdGEtPm1lcmdlRmxhZ3MoTm9kZVVzZWRBc1Zh
bHVlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkBAIC0yMzgsOCArMjM2LDggQEAg
cHJpdmF0ZToKICAgICAgICAgICAgIGNoYW5nZWQgfD0gc2V0UHJlZGljdGlvbihTcGVjSW50MzIp
OwogICAgICAgICAgICAgZmxhZ3MgfD0gTm9kZVVzZWRBc0ludCB8IE5vZGVVc2VkQXNJbnRMb2Nh
bGx5OwogICAgICAgICAgICAgZmxhZ3MgJj0gfihOb2RlVXNlZEFzTnVtYmVyIHwgTm9kZU5lZWRz
TmVnWmVybyB8IE5vZGVVc2VkQXNPdGhlcik7Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3Jh
cGhbbm9kZS5jaGlsZDEoKV0ubWVyZ2VGbGFncyhmbGFncyk7Ci0gICAgICAgICAgICBjaGFuZ2Vk
IHw9IG1fZ3JhcGhbbm9kZS5jaGlsZDIoKV0ubWVyZ2VGbGFncyhmbGFncyk7CisgICAgICAgICAg
ICBjaGFuZ2VkIHw9IG5vZGUtPmNoaWxkMSgpLT5tZXJnZUZsYWdzKGZsYWdzKTsKKyAgICAgICAg
ICAgIGNoYW5nZWQgfD0gbm9kZS0+Y2hpbGQyKCktPm1lcmdlRmxhZ3MoZmxhZ3MpOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIApAQCAtMjQ3LDUwICsyNDUsNTAg
QEAgcHJpdmF0ZToKICAgICAgICAgICAgIGNoYW5nZWQgfD0gc2V0UHJlZGljdGlvbihTcGVjSW50
MzIpOwogICAgICAgICAgICAgZmxhZ3MgfD0gTm9kZVVzZWRBc0ludCB8IE5vZGVVc2VkQXNJbnRM
b2NhbGx5OwogICAgICAgICAgICAgZmxhZ3MgJj0gfihOb2RlVXNlZEFzTnVtYmVyIHwgTm9kZU5l
ZWRzTmVnWmVybyB8IE5vZGVVc2VkQXNPdGhlcik7Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IG1f
Z3JhcGhbbm9kZS5jaGlsZDEoKV0ubWVyZ2VGbGFncyhmbGFncyk7CisgICAgICAgICAgICBjaGFu
Z2VkIHw9IG5vZGUtPmNoaWxkMSgpLT5tZXJnZUZsYWdzKGZsYWdzKTsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBBcnJheVBvcDogewot
ICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVByZWRpY3Rpb24obm9kZS5nZXRIZWFwUHJlZGlj
dGlvbigpKTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKG5vZGUtPmdl
dEhlYXBQcmVkaWN0aW9uKCkpOwogICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZURlZmF1bHRG
bGFncyhub2RlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKICAgICAgICAgY2Fz
ZSBBcnJheVB1c2g6IHsKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKG5v
ZGUuZ2V0SGVhcFByZWRpY3Rpb24oKSk7Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhb
bm9kZS5jaGlsZDEoKV0ubWVyZ2VGbGFncyhOb2RlVXNlZEFzVmFsdWUpOwotICAgICAgICAgICAg
Y2hhbmdlZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQyKCldLm1lcmdlRmxhZ3MoTm9kZVVzZWRBc1Zh
bHVlKTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKG5vZGUtPmdldEhl
YXBQcmVkaWN0aW9uKCkpOworICAgICAgICAgICAgY2hhbmdlZCB8PSBub2RlLT5jaGlsZDEoKS0+
bWVyZ2VGbGFncyhOb2RlVXNlZEFzVmFsdWUpOworICAgICAgICAgICAgY2hhbmdlZCB8PSBub2Rl
LT5jaGlsZDIoKS0+bWVyZ2VGbGFncyhOb2RlVXNlZEFzVmFsdWUpOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIFJlZ0V4cEV4ZWM6CiAgICAgICAgIGNhc2Ug
UmVnRXhwVGVzdDogewotICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVByZWRpY3Rpb24obm9k
ZS5nZXRIZWFwUHJlZGljdGlvbigpKTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVk
aWN0aW9uKG5vZGUtPmdldEhlYXBQcmVkaWN0aW9uKCkpOwogICAgICAgICAgICAgY2hhbmdlZCB8
PSBtZXJnZURlZmF1bHRGbGFncyhub2RlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9
CiAKICAgICAgICAgY2FzZSBTdHJpbmdDaGFyQ29kZUF0OiB7CiAgICAgICAgICAgICBjaGFuZ2Vk
IHw9IG1lcmdlUHJlZGljdGlvbihTcGVjSW50MzIpOwotICAgICAgICAgICAgY2hhbmdlZCB8PSBt
X2dyYXBoW25vZGUuY2hpbGQxKCldLm1lcmdlRmxhZ3MoTm9kZVVzZWRBc1ZhbHVlKTsKLSAgICAg
ICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaFtub2RlLmNoaWxkMigpXS5tZXJnZUZsYWdzKE5vZGVV
c2VkQXNOdW1iZXIgfCBOb2RlVXNlZEFzT3RoZXIgfCBOb2RlVXNlZEFzSW50IHwgTm9kZVVzZWRB
c0ludExvY2FsbHkpOworICAgICAgICAgICAgY2hhbmdlZCB8PSBub2RlLT5jaGlsZDEoKS0+bWVy
Z2VGbGFncyhOb2RlVXNlZEFzVmFsdWUpOworICAgICAgICAgICAgY2hhbmdlZCB8PSBub2RlLT5j
aGlsZDIoKS0+bWVyZ2VGbGFncyhOb2RlVXNlZEFzTnVtYmVyIHwgTm9kZVVzZWRBc090aGVyIHwg
Tm9kZVVzZWRBc0ludCB8IE5vZGVVc2VkQXNJbnRMb2NhbGx5KTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBVSW50MzJUb051bWJlcjogewotICAgICAgICAg
ICAgaWYgKG5vZGVDYW5TcGVjdWxhdGVJbnRlZ2VyKG5vZGUuYXJpdGhOb2RlRmxhZ3MoKSkpCisg
ICAgICAgICAgICBpZiAobm9kZUNhblNwZWN1bGF0ZUludGVnZXIobm9kZS0+YXJpdGhOb2RlRmxh
Z3MoKSkpCiAgICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVByZWRpY3Rpb24oU3BlY0lu
dDMyKTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdl
UHJlZGljdGlvbihTcGVjTnVtYmVyKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgY2hhbmdl
ZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLm1lcmdlRmxhZ3MoZmxhZ3MpOworICAgICAgICAg
ICAgY2hhbmdlZCB8PSBub2RlLT5jaGlsZDEoKS0+bWVyZ2VGbGFncyhmbGFncyk7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQogCiAgICAgICAgIGNhc2UgVmFsdWVBZGQ6IHsKLSAgICAg
ICAgICAgIFNwZWN1bGF0ZWRUeXBlIGxlZnQgPSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLnByZWRp
Y3Rpb24oKTsKLSAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHJpZ2h0ID0gbV9ncmFwaFtub2Rl
LmNoaWxkMigpXS5wcmVkaWN0aW9uKCk7CisgICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSBsZWZ0
ID0gbm9kZS0+Y2hpbGQxKCktPnByZWRpY3Rpb24oKTsKKyAgICAgICAgICAgIFNwZWN1bGF0ZWRU
eXBlIHJpZ2h0ID0gbm9kZS0+Y2hpbGQyKCktPnByZWRpY3Rpb24oKTsKICAgICAgICAgICAgIAog
ICAgICAgICAgICAgQWRkU3BlY3VsYXRpb25Nb2RlIG1vZGUgPSBEb250U3BlY3VsYXRlSW50ZWdl
cjsKICAgICAgICAgICAgIApAQCAtMzA3LDIyICszMDUsMjIgQEAgcHJpdmF0ZToKICAgICAgICAg
ICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVByZWRpY3Rpb24oU3BlY1N0cmluZyB8IFNwZWNJ
bnQzMiB8IFNwZWNEb3VibGUpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAg
ICAgICBpZiAoaXNOb3ROZWdaZXJvKG5vZGUuY2hpbGQxKCkuaW5kZXgoKSkgfHwgaXNOb3ROZWda
ZXJvKG5vZGUuY2hpbGQyKCkuaW5kZXgoKSkpCisgICAgICAgICAgICBpZiAoaXNOb3ROZWdaZXJv
KG5vZGUtPmNoaWxkMSgpLm5vZGUoKSkgfHwgaXNOb3ROZWdaZXJvKG5vZGUtPmNoaWxkMigpLm5v
ZGUoKSkpCiAgICAgICAgICAgICAgICAgZmxhZ3MgJj0gfk5vZGVOZWVkc05lZ1plcm87Ci0gICAg
ICAgICAgICBpZiAobV9ncmFwaFtub2RlLmNoaWxkMSgpXS5oYXNOdW1iZXJSZXN1bHQoKSB8fCBt
X2dyYXBoW25vZGUuY2hpbGQyKCldLmhhc051bWJlclJlc3VsdCgpKQorICAgICAgICAgICAgaWYg
KG5vZGUtPmNoaWxkMSgpLT5oYXNOdW1iZXJSZXN1bHQoKSB8fCBub2RlLT5jaGlsZDIoKS0+aGFz
TnVtYmVyUmVzdWx0KCkpCiAgICAgICAgICAgICAgICAgZmxhZ3MgJj0gfk5vZGVVc2VkQXNPdGhl
cjsKICAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKG1vZGUgIT0gU3BlY3VsYXRlSW50ZWdl
cikKICAgICAgICAgICAgICAgICBmbGFncyB8PSBOb2RlVXNlZEFzTnVtYmVyOwogICAgICAgICAg
ICAgCi0gICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ubWVyZ2VG
bGFncyhmbGFncyk7Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbm9kZS5jaGlsZDIo
KV0ubWVyZ2VGbGFncyhmbGFncyk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG5vZGUtPmNoaWxk
MSgpLT5tZXJnZUZsYWdzKGZsYWdzKTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbm9kZS0+Y2hp
bGQyKCktPm1lcmdlRmxhZ3MoZmxhZ3MpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0K
ICAgICAgICAgICAgIAogICAgICAgICBjYXNlIEFyaXRoQWRkOiB7Ci0gICAgICAgICAgICBTcGVj
dWxhdGVkVHlwZSBsZWZ0ID0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5wcmVkaWN0aW9uKCk7Ci0g
ICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSByaWdodCA9IG1fZ3JhcGhbbm9kZS5jaGlsZDIoKV0u
cHJlZGljdGlvbigpOworICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgbGVmdCA9IG5vZGUtPmNo
aWxkMSgpLT5wcmVkaWN0aW9uKCk7CisgICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSByaWdodCA9
IG5vZGUtPmNoaWxkMigpLT5wcmVkaWN0aW9uKCk7CiAgICAgICAgICAgICAKICAgICAgICAgICAg
IEFkZFNwZWN1bGF0aW9uTW9kZSBtb2RlID0gRG9udFNwZWN1bGF0ZUludGVnZXI7CiAgICAgICAg
ICAgICAKQEAgLTMzMywyMSArMzMxLDIxIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAg
IGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKHNwZWN1bGF0ZWREb3VibGVUeXBlRm9yUHJlZGlj
dGlvbnMobGVmdCwgcmlnaHQpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAg
ICAgICAgaWYgKGlzTm90TmVnWmVybyhub2RlLmNoaWxkMSgpLmluZGV4KCkpIHx8IGlzTm90TmVn
WmVybyhub2RlLmNoaWxkMigpLmluZGV4KCkpKQorICAgICAgICAgICAgaWYgKGlzTm90TmVnWmVy
byhub2RlLT5jaGlsZDEoKS5ub2RlKCkpIHx8IGlzTm90TmVnWmVybyhub2RlLT5jaGlsZDIoKS5u
b2RlKCkpKQogICAgICAgICAgICAgICAgIGZsYWdzICY9IH5Ob2RlTmVlZHNOZWdaZXJvOwogICAg
ICAgICAgICAgZmxhZ3MgJj0gfk5vZGVVc2VkQXNPdGhlcjsKICAgICAgICAgICAgIAogICAgICAg
ICAgICAgaWYgKG1vZGUgIT0gU3BlY3VsYXRlSW50ZWdlcikKICAgICAgICAgICAgICAgICBmbGFn
cyB8PSBOb2RlVXNlZEFzTnVtYmVyOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBjaGFuZ2Vk
IHw9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ubWVyZ2VGbGFncyhmbGFncyk7Ci0gICAgICAgICAg
ICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbm9kZS5jaGlsZDIoKV0ubWVyZ2VGbGFncyhmbGFncyk7Cisg
ICAgICAgICAgICBjaGFuZ2VkIHw9IG5vZGUtPmNoaWxkMSgpLT5tZXJnZUZsYWdzKGZsYWdzKTsK
KyAgICAgICAgICAgIGNoYW5nZWQgfD0gbm9kZS0+Y2hpbGQyKCktPm1lcmdlRmxhZ3MoZmxhZ3Mp
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBj
YXNlIEFyaXRoU3ViOiB7Ci0gICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSBsZWZ0ID0gbV9ncmFw
aFtub2RlLmNoaWxkMSgpXS5wcmVkaWN0aW9uKCk7Ci0gICAgICAgICAgICBTcGVjdWxhdGVkVHlw
ZSByaWdodCA9IG1fZ3JhcGhbbm9kZS5jaGlsZDIoKV0ucHJlZGljdGlvbigpOworICAgICAgICAg
ICAgU3BlY3VsYXRlZFR5cGUgbGVmdCA9IG5vZGUtPmNoaWxkMSgpLT5wcmVkaWN0aW9uKCk7Cisg
ICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSByaWdodCA9IG5vZGUtPmNoaWxkMigpLT5wcmVkaWN0
aW9uKCk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIEFkZFNwZWN1bGF0aW9uTW9kZSBtb2Rl
ID0gRG9udFNwZWN1bGF0ZUludGVnZXI7CiAgICAgICAgICAgICAKQEAgLTM1OCwzOSArMzU2LDM5
IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0
aW9uKHNwZWN1bGF0ZWREb3VibGVUeXBlRm9yUHJlZGljdGlvbnMobGVmdCwgcmlnaHQpKTsKICAg
ICAgICAgICAgIH0KIAotICAgICAgICAgICAgaWYgKGlzTm90WmVybyhub2RlLmNoaWxkMSgpLmlu
ZGV4KCkpIHx8IGlzTm90WmVybyhub2RlLmNoaWxkMigpLmluZGV4KCkpKQorICAgICAgICAgICAg
aWYgKGlzTm90WmVybyhub2RlLT5jaGlsZDEoKS5ub2RlKCkpIHx8IGlzTm90WmVybyhub2RlLT5j
aGlsZDIoKS5ub2RlKCkpKQogICAgICAgICAgICAgICAgIGZsYWdzICY9IH5Ob2RlTmVlZHNOZWda
ZXJvOwogICAgICAgICAgICAgZmxhZ3MgJj0gfk5vZGVVc2VkQXNPdGhlcjsKICAgICAgICAgICAg
IAogICAgICAgICAgICAgaWYgKG1vZGUgIT0gU3BlY3VsYXRlSW50ZWdlcikKICAgICAgICAgICAg
ICAgICBmbGFncyB8PSBOb2RlVXNlZEFzTnVtYmVyOwogICAgICAgICAgICAgCi0gICAgICAgICAg
ICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ubWVyZ2VGbGFncyhmbGFncyk7Ci0g
ICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbm9kZS5jaGlsZDIoKV0ubWVyZ2VGbGFncyhm
bGFncyk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG5vZGUtPmNoaWxkMSgpLT5tZXJnZUZsYWdz
KGZsYWdzKTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbm9kZS0+Y2hpbGQyKCktPm1lcmdlRmxh
Z3MoZmxhZ3MpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIAog
ICAgICAgICBjYXNlIEFyaXRoTmVnYXRlOgotICAgICAgICAgICAgaWYgKG1fZ3JhcGhbbm9kZS5j
aGlsZDEoKV0ucHJlZGljdGlvbigpKSB7CisgICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCkt
PnByZWRpY3Rpb24oKSkgewogICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLm5lZ2F0ZVNob3Vs
ZFNwZWN1bGF0ZUludGVnZXIobm9kZSkpCiAgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0g
bWVyZ2VQcmVkaWN0aW9uKFNwZWNJbnQzMik7CiAgICAgICAgICAgICAgICAgZWxzZQotICAgICAg
ICAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbihzcGVjdWxhdGVkRG91Ymxl
VHlwZUZvclByZWRpY3Rpb24obV9ncmFwaFtub2RlLmNoaWxkMSgpXS5wcmVkaWN0aW9uKCkpKTsK
KyAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVByZWRpY3Rpb24oc3BlY3VsYXRl
ZERvdWJsZVR5cGVGb3JQcmVkaWN0aW9uKG5vZGUtPmNoaWxkMSgpLT5wcmVkaWN0aW9uKCkpKTsK
ICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgZmxhZ3MgJj0gfk5vZGVVc2VkQXNPdGhlcjsK
IAotICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLm1lcmdlRmxh
Z3MoZmxhZ3MpOworICAgICAgICAgICAgY2hhbmdlZCB8PSBub2RlLT5jaGlsZDEoKS0+bWVyZ2VG
bGFncyhmbGFncyk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgICAgICBj
YXNlIEFyaXRoTWluOgogICAgICAgICBjYXNlIEFyaXRoTWF4OiB7Ci0gICAgICAgICAgICBTcGVj
dWxhdGVkVHlwZSBsZWZ0ID0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5wcmVkaWN0aW9uKCk7Ci0g
ICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSByaWdodCA9IG1fZ3JhcGhbbm9kZS5jaGlsZDIoKV0u
cHJlZGljdGlvbigpOworICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgbGVmdCA9IG5vZGUtPmNo
aWxkMSgpLT5wcmVkaWN0aW9uKCk7CisgICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSByaWdodCA9
IG5vZGUtPmNoaWxkMigpLT5wcmVkaWN0aW9uKCk7CiAgICAgICAgICAgICAKICAgICAgICAgICAg
IGlmIChsZWZ0ICYmIHJpZ2h0KSB7Ci0gICAgICAgICAgICAgICAgaWYgKE5vZGU6OnNob3VsZFNw
ZWN1bGF0ZUludGVnZXJGb3JBcml0aG1ldGljKG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0sIG1fZ3Jh
cGhbbm9kZS5jaGlsZDIoKV0pCi0gICAgICAgICAgICAgICAgICAgICYmIG5vZGVDYW5TcGVjdWxh
dGVJbnRlZ2VyKG5vZGUuYXJpdGhOb2RlRmxhZ3MoKSkpCisgICAgICAgICAgICAgICAgaWYgKE5v
ZGU6OnNob3VsZFNwZWN1bGF0ZUludGVnZXJGb3JBcml0aG1ldGljKG5vZGUtPmNoaWxkMSgpLm5v
ZGUoKSwgbm9kZS0+Y2hpbGQyKCkubm9kZSgpKQorICAgICAgICAgICAgICAgICAgICAmJiBub2Rl
Q2FuU3BlY3VsYXRlSW50ZWdlcihub2RlLT5hcml0aE5vZGVGbGFncygpKSkKICAgICAgICAgICAg
ICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVByZWRpY3Rpb24oU3BlY0ludDMyKTsKICAgICAgICAg
ICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0
aW9uKHNwZWN1bGF0ZWREb3VibGVUeXBlRm9yUHJlZGljdGlvbnMobGVmdCwgcmlnaHQpKTsKQEAg
LTM5OSwxNCArMzk3LDE0IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBmbGFncyB8PSBOb2RlVXNl
ZEFzTnVtYmVyOwogICAgICAgICAgICAgZmxhZ3MgJj0gfk5vZGVVc2VkQXNPdGhlcjsKIAotICAg
ICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLm1lcmdlRmxhZ3MoZmxh
Z3MpOwotICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQyKCldLm1lcmdl
RmxhZ3MoZmxhZ3MpOworICAgICAgICAgICAgY2hhbmdlZCB8PSBub2RlLT5jaGlsZDEoKS0+bWVy
Z2VGbGFncyhmbGFncyk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG5vZGUtPmNoaWxkMigpLT5t
ZXJnZUZsYWdzKGZsYWdzKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKICAgICAg
ICAgY2FzZSBBcml0aE11bDogewotICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgbGVmdCA9IG1f
Z3JhcGhbbm9kZS5jaGlsZDEoKV0ucHJlZGljdGlvbigpOwotICAgICAgICAgICAgU3BlY3VsYXRl
ZFR5cGUgcmlnaHQgPSBtX2dyYXBoW25vZGUuY2hpbGQyKCldLnByZWRpY3Rpb24oKTsKKyAgICAg
ICAgICAgIFNwZWN1bGF0ZWRUeXBlIGxlZnQgPSBub2RlLT5jaGlsZDEoKS0+cHJlZGljdGlvbigp
OworICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgcmlnaHQgPSBub2RlLT5jaGlsZDIoKS0+cHJl
ZGljdGlvbigpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAobGVmdCAmJiByaWdodCkg
ewogICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLm11bFNob3VsZFNwZWN1bGF0ZUludGVnZXIo
bm9kZSkpCkBAIC00MjIsOCArNDIwLDggQEAgcHJpdmF0ZToKICAgICAgICAgICAgIC8vIGl0c2Vs
ZiB1bmxlc3Mgd2UgY2FuIHByb3ZlIHRoYXQgdGhlcmUgaXMgbm8gd2F5IGZvciB0aGUgdmFsdWVz
CiAgICAgICAgICAgICAvLyBwcm9kdWNlZCB0byBjYXVzZSBkb3VibGUgcm91bmRpbmcuCiAgICAg
ICAgICAgICAKLSAgICAgICAgICAgIGlmICghaXNXaXRoaW5Qb3dlck9mVHdvKG5vZGUuY2hpbGQx
KCkuaW5kZXgoKSwgMjIpCi0gICAgICAgICAgICAgICAgJiYgIWlzV2l0aGluUG93ZXJPZlR3byhu
b2RlLmNoaWxkMigpLmluZGV4KCksIDIyKSkKKyAgICAgICAgICAgIGlmICghaXNXaXRoaW5Qb3dl
ck9mVHdvKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgMjIpCisgICAgICAgICAgICAgICAgJiYgIWlz
V2l0aGluUG93ZXJPZlR3byhub2RlLT5jaGlsZDIoKS5ub2RlKCksIDIyKSkKICAgICAgICAgICAg
ICAgICBmbGFncyB8PSBOb2RlVXNlZEFzTnVtYmVyOwogICAgICAgICAgICAgCiAgICAgICAgICAg
ICBjaGFuZ2VkIHw9IG5vZGUubWVyZ2VGbGFncyhmbGFncyk7CkBAIC00MzEsMTggKzQyOSwxOCBA
QCBwcml2YXRlOgogICAgICAgICAgICAgZmxhZ3MgfD0gTm9kZVVzZWRBc051bWJlciB8IE5vZGVO
ZWVkc05lZ1plcm87CiAgICAgICAgICAgICBmbGFncyAmPSB+Tm9kZVVzZWRBc090aGVyOwogCi0g
ICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ubWVyZ2VGbGFncyhm
bGFncyk7Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbm9kZS5jaGlsZDIoKV0ubWVy
Z2VGbGFncyhmbGFncyk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG5vZGUtPmNoaWxkMSgpLT5t
ZXJnZUZsYWdzKGZsYWdzKTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbm9kZS0+Y2hpbGQyKCkt
Pm1lcmdlRmxhZ3MoZmxhZ3MpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAg
ICAgICAgIAogICAgICAgICBjYXNlIEFyaXRoRGl2OiB7Ci0gICAgICAgICAgICBTcGVjdWxhdGVk
VHlwZSBsZWZ0ID0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5wcmVkaWN0aW9uKCk7Ci0gICAgICAg
ICAgICBTcGVjdWxhdGVkVHlwZSByaWdodCA9IG1fZ3JhcGhbbm9kZS5jaGlsZDIoKV0ucHJlZGlj
dGlvbigpOworICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgbGVmdCA9IG5vZGUtPmNoaWxkMSgp
LT5wcmVkaWN0aW9uKCk7CisgICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSByaWdodCA9IG5vZGUt
PmNoaWxkMigpLT5wcmVkaWN0aW9uKCk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlmIChs
ZWZ0ICYmIHJpZ2h0KSB7Ci0gICAgICAgICAgICAgICAgaWYgKE5vZGU6OnNob3VsZFNwZWN1bGF0
ZUludGVnZXJGb3JBcml0aG1ldGljKG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0sIG1fZ3JhcGhbbm9k
ZS5jaGlsZDIoKV0pCi0gICAgICAgICAgICAgICAgICAgICYmIG5vZGVDYW5TcGVjdWxhdGVJbnRl
Z2VyKG5vZGUuYXJpdGhOb2RlRmxhZ3MoKSkpCisgICAgICAgICAgICAgICAgaWYgKE5vZGU6OnNo
b3VsZFNwZWN1bGF0ZUludGVnZXJGb3JBcml0aG1ldGljKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwg
bm9kZS0+Y2hpbGQyKCkubm9kZSgpKQorICAgICAgICAgICAgICAgICAgICAmJiBub2RlQ2FuU3Bl
Y3VsYXRlSW50ZWdlcihub2RlLT5hcml0aE5vZGVGbGFncygpKSkKICAgICAgICAgICAgICAgICAg
ICAgY2hhbmdlZCB8PSBtZXJnZVByZWRpY3Rpb24oU3BlY0ludDMyKTsKICAgICAgICAgICAgICAg
ICBlbHNlCiAgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKFNw
ZWNEb3VibGUpOwpAQCAtNDU2LDE4ICs0NTQsMTggQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGZs
YWdzIHw9IE5vZGVVc2VkQXNOdW1iZXIgfCBOb2RlTmVlZHNOZWdaZXJvOwogICAgICAgICAgICAg
ZmxhZ3MgJj0gfk5vZGVVc2VkQXNPdGhlcjsKIAotICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dy
YXBoW25vZGUuY2hpbGQxKCldLm1lcmdlRmxhZ3MoZmxhZ3MpOwotICAgICAgICAgICAgY2hhbmdl
ZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQyKCldLm1lcmdlRmxhZ3MoZmxhZ3MpOworICAgICAgICAg
ICAgY2hhbmdlZCB8PSBub2RlLT5jaGlsZDEoKS0+bWVyZ2VGbGFncyhmbGFncyk7CisgICAgICAg
ICAgICBjaGFuZ2VkIHw9IG5vZGUtPmNoaWxkMigpLT5tZXJnZUZsYWdzKGZsYWdzKTsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBBcml0
aE1vZDogewotICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgbGVmdCA9IG1fZ3JhcGhbbm9kZS5j
aGlsZDEoKV0ucHJlZGljdGlvbigpOwotICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgcmlnaHQg
PSBtX2dyYXBoW25vZGUuY2hpbGQyKCldLnByZWRpY3Rpb24oKTsKKyAgICAgICAgICAgIFNwZWN1
bGF0ZWRUeXBlIGxlZnQgPSBub2RlLT5jaGlsZDEoKS0+cHJlZGljdGlvbigpOworICAgICAgICAg
ICAgU3BlY3VsYXRlZFR5cGUgcmlnaHQgPSBub2RlLT5jaGlsZDIoKS0+cHJlZGljdGlvbigpOwog
ICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAobGVmdCAmJiByaWdodCkgewotICAgICAgICAg
ICAgICAgIGlmIChOb2RlOjpzaG91bGRTcGVjdWxhdGVJbnRlZ2VyRm9yQXJpdGhtZXRpYyhtX2dy
YXBoW25vZGUuY2hpbGQxKCldLCBtX2dyYXBoW25vZGUuY2hpbGQyKCldKQotICAgICAgICAgICAg
ICAgICAgICAmJiBub2RlQ2FuU3BlY3VsYXRlSW50ZWdlcihub2RlLmFyaXRoTm9kZUZsYWdzKCkp
KQorICAgICAgICAgICAgICAgIGlmIChOb2RlOjpzaG91bGRTcGVjdWxhdGVJbnRlZ2VyRm9yQXJp
dGhtZXRpYyhub2RlLT5jaGlsZDEoKS5ub2RlKCksIG5vZGUtPmNoaWxkMigpLm5vZGUoKSkKKyAg
ICAgICAgICAgICAgICAgICAgJiYgbm9kZUNhblNwZWN1bGF0ZUludGVnZXIobm9kZS0+YXJpdGhO
b2RlRmxhZ3MoKSkpCiAgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0
aW9uKFNwZWNJbnQzMik7CiAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAg
ICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbihTcGVjRG91YmxlKTsKQEAgLTQ3Niw4ICs0NzQs
OCBAQCBwcml2YXRlOgogICAgICAgICAgICAgZmxhZ3MgfD0gTm9kZVVzZWRBc051bWJlciB8IE5v
ZGVOZWVkc05lZ1plcm87CiAgICAgICAgICAgICBmbGFncyAmPSB+Tm9kZVVzZWRBc090aGVyOwog
Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ubWVyZ2VGbGFn
cyhmbGFncyk7Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbm9kZS5jaGlsZDIoKV0u
bWVyZ2VGbGFncyhmbGFncyk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG5vZGUtPmNoaWxkMSgp
LT5tZXJnZUZsYWdzKGZsYWdzKTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbm9kZS0+Y2hpbGQy
KCktPm1lcmdlRmxhZ3MoZmxhZ3MpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAg
ICAgICAgICAgIApAQCAtNDg1LDE5ICs0ODMsMTkgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGNo
YW5nZWQgfD0gc2V0UHJlZGljdGlvbihTcGVjRG91YmxlKTsKICAgICAgICAgICAgIGZsYWdzIHw9
IE5vZGVVc2VkQXNOdW1iZXIgfCBOb2RlTmVlZHNOZWdaZXJvOwogICAgICAgICAgICAgZmxhZ3Mg
Jj0gfk5vZGVVc2VkQXNPdGhlcjsKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaFtub2Rl
LmNoaWxkMSgpXS5tZXJnZUZsYWdzKGZsYWdzKTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbm9k
ZS0+Y2hpbGQxKCktPm1lcmdlRmxhZ3MoZmxhZ3MpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBjYXNlIEFyaXRoQWJzOiB7Ci0gICAgICAgICAg
ICBTcGVjdWxhdGVkVHlwZSBjaGlsZCA9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ucHJlZGljdGlv
bigpOworICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgY2hpbGQgPSBub2RlLT5jaGlsZDEoKS0+
cHJlZGljdGlvbigpOwogICAgICAgICAgICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbkZvckFyaXRo
bWV0aWMoY2hpbGQpCi0gICAgICAgICAgICAgICAgJiYgbm9kZUNhblNwZWN1bGF0ZUludGVnZXIo
bm9kZS5hcml0aE5vZGVGbGFncygpKSkKKyAgICAgICAgICAgICAgICAmJiBub2RlQ2FuU3BlY3Vs
YXRlSW50ZWdlcihub2RlLT5hcml0aE5vZGVGbGFncygpKSkKICAgICAgICAgICAgICAgICBjaGFu
Z2VkIHw9IG1lcmdlUHJlZGljdGlvbihTcGVjSW50MzIpOwogICAgICAgICAgICAgZWxzZQogICAg
ICAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKHNwZWN1bGF0ZWREb3VibGVU
eXBlRm9yUHJlZGljdGlvbihjaGlsZCkpOwogCi0gICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3Jh
cGhbbm9kZS5jaGlsZDEoKV0ubWVyZ2VGbGFncyhmbGFncyk7CisgICAgICAgICAgICBjaGFuZ2Vk
IHw9IG5vZGUtPmNoaWxkMSgpLT5tZXJnZUZsYWdzKGZsYWdzKTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9CiAgICAgICAgICAgICAKQEAgLTUyNywzMSArNTI1LDMxIEBAIHByaXZhdGU6
CiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIEdldEJ5SWQ6IHsKLSAgICAgICAgICAgIGNoYW5n
ZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKG5vZGUuZ2V0SGVhcFByZWRpY3Rpb24oKSk7CisgICAgICAg
ICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbihub2RlLT5nZXRIZWFwUHJlZGljdGlvbigp
KTsKICAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VEZWZhdWx0RmxhZ3Mobm9kZSk7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgR2V0
QnlJZEZsdXNoOgotICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVByZWRpY3Rpb24obm9kZS5n
ZXRIZWFwUHJlZGljdGlvbigpKTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0
aW9uKG5vZGUtPmdldEhlYXBQcmVkaWN0aW9uKCkpOwogICAgICAgICAgICAgY2hhbmdlZCB8PSBt
ZXJnZURlZmF1bHRGbGFncyhub2RlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
CiAgICAgICAgIGNhc2UgR2V0QnlWYWw6IHsKLSAgICAgICAgICAgIGlmIChtX2dyYXBoW25vZGUu
Y2hpbGQxKCldLnNob3VsZFNwZWN1bGF0ZUZsb2F0MzJBcnJheSgpCi0gICAgICAgICAgICAgICAg
fHwgbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5zaG91bGRTcGVjdWxhdGVGbG9hdDY0QXJyYXkoKSkK
KyAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlRmxvYXQzMkFy
cmF5KCkKKyAgICAgICAgICAgICAgICB8fCBub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRl
RmxvYXQ2NEFycmF5KCkpCiAgICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVByZWRpY3Rp
b24oU3BlY0RvdWJsZSk7CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgY2hhbmdl
ZCB8PSBtZXJnZVByZWRpY3Rpb24obm9kZS5nZXRIZWFwUHJlZGljdGlvbigpKTsKIAotICAgICAg
ICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLm1lcmdlRmxhZ3MoTm9kZVVz
ZWRBc1ZhbHVlKTsKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaFtub2RlLmNoaWxkMigp
XS5tZXJnZUZsYWdzKE5vZGVVc2VkQXNOdW1iZXIgfCBOb2RlVXNlZEFzT3RoZXIgfCBOb2RlVXNl
ZEFzSW50IHwgTm9kZVVzZWRBc0ludExvY2FsbHkpOworICAgICAgICAgICAgY2hhbmdlZCB8PSBu
b2RlLT5jaGlsZDEoKS0+bWVyZ2VGbGFncyhOb2RlVXNlZEFzVmFsdWUpOworICAgICAgICAgICAg
Y2hhbmdlZCB8PSBub2RlLT5jaGlsZDIoKS0+bWVyZ2VGbGFncyhOb2RlVXNlZEFzTnVtYmVyIHwg
Tm9kZVVzZWRBc090aGVyIHwgTm9kZVVzZWRBc0ludCB8IE5vZGVVc2VkQXNJbnRMb2NhbGx5KTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2Fz
ZSBHZXRNeUFyZ3VtZW50QnlWYWxTYWZlOiB7Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdl
UHJlZGljdGlvbihub2RlLmdldEhlYXBQcmVkaWN0aW9uKCkpOwotICAgICAgICAgICAgY2hhbmdl
ZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLm1lcmdlRmxhZ3MoTm9kZVVzZWRBc051bWJlciB8
IE5vZGVVc2VkQXNPdGhlciB8IE5vZGVVc2VkQXNJbnQgfCBOb2RlVXNlZEFzSW50TG9jYWxseSk7
CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbihub2RlLT5nZXRIZWFwUHJl
ZGljdGlvbigpKTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbm9kZS0+Y2hpbGQxKCktPm1lcmdl
RmxhZ3MoTm9kZVVzZWRBc051bWJlciB8IE5vZGVVc2VkQXNPdGhlciB8IE5vZGVVc2VkQXNJbnQg
fCBOb2RlVXNlZEFzSW50TG9jYWxseSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQog
ICAgICAgICAgICAgCkBAIC01NzEsMjUgKzU2OSwyMyBAQCBwcml2YXRlOgogICAgICAgICB9CiAK
ICAgICAgICAgY2FzZSBHZXRCeU9mZnNldDogewotICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJn
ZVByZWRpY3Rpb24obm9kZS5nZXRIZWFwUHJlZGljdGlvbigpKTsKKyAgICAgICAgICAgIGNoYW5n
ZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKG5vZGUtPmdldEhlYXBQcmVkaWN0aW9uKCkpOwogICAgICAg
ICAgICAgY2hhbmdlZCB8PSBtZXJnZURlZmF1bHRGbGFncyhub2RlKTsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBDYWxsOgogICAgICAg
ICBjYXNlIENvbnN0cnVjdDogewotICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVByZWRpY3Rp
b24obm9kZS5nZXRIZWFwUHJlZGljdGlvbigpKTsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQg
Y2hpbGRJZHggPSBub2RlLmZpcnN0Q2hpbGQoKTsKLSAgICAgICAgICAgICAgICAgY2hpbGRJZHgg
PCBub2RlLmZpcnN0Q2hpbGQoKSArIG5vZGUubnVtQ2hpbGRyZW4oKTsKLSAgICAgICAgICAgICAg
ICAgKytjaGlsZElkeCkgewotICAgICAgICAgICAgICAgIEVkZ2UgZWRnZSA9IG1fZ3JhcGgubV92
YXJBcmdDaGlsZHJlbltjaGlsZElkeF07Ci0gICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dy
YXBoW2VkZ2VdLm1lcmdlRmxhZ3MoTm9kZVVzZWRBc1ZhbHVlKTsKLSAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKG5vZGUtPmdldEhlYXBQcmVkaWN0
aW9uKCkpOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBjaGlsZElkeCA9IG5vZGUtPmZpcnN0
Q2hpbGQoKTsKKyAgICAgICAgICAgICAgICAgY2hpbGRJZHggPCBub2RlLT5maXJzdENoaWxkKCkg
KyBub2RlLT5udW1DaGlsZHJlbigpOworICAgICAgICAgICAgICAgICArK2NoaWxkSWR4KQorICAg
ICAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaC5tX3ZhckFyZ0NoaWxkcmVuW2NoaWxkSWR4
XS0+bWVyZ2VGbGFncyhOb2RlVXNlZEFzVmFsdWUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBjYXNlIENvbnZlcnRUaGlzOiB7Ci0gICAgICAg
ICAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uID0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5w
cmVkaWN0aW9uKCk7CisgICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uID0gbm9k
ZS0+Y2hpbGQxKCktPnByZWRpY3Rpb24oKTsKICAgICAgICAgICAgIGlmIChwcmVkaWN0aW9uKSB7
CiAgICAgICAgICAgICAgICAgaWYgKHByZWRpY3Rpb24gJiB+U3BlY09iamVjdE1hc2spIHsKICAg
ICAgICAgICAgICAgICAgICAgcHJlZGljdGlvbiAmPSBTcGVjT2JqZWN0TWFzazsKQEAgLTYwMiwx
MyArNTk4LDEzIEBAIHByaXZhdGU6CiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBj
YXNlIEdldEdsb2JhbFZhcjogewotICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVByZWRpY3Rp
b24obm9kZS5nZXRIZWFwUHJlZGljdGlvbigpKTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVy
Z2VQcmVkaWN0aW9uKG5vZGUtPmdldEhlYXBQcmVkaWN0aW9uKCkpOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBjYXNlIFB1dEdsb2JhbFZhcjoK
ICAgICAgICAgY2FzZSBQdXRHbG9iYWxWYXJDaGVjazogewotICAgICAgICAgICAgY2hhbmdlZCB8
PSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLm1lcmdlRmxhZ3MoTm9kZVVzZWRBc1ZhbHVlKTsKKyAg
ICAgICAgICAgIGNoYW5nZWQgfD0gbm9kZS0+Y2hpbGQxKCktPm1lcmdlRmxhZ3MoTm9kZVVzZWRB
c1ZhbHVlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKQEAg
LTYxNyw3ICs2MTMsNyBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIFJlc29sdmVCYXNlOgogICAg
ICAgICBjYXNlIFJlc29sdmVCYXNlU3RyaWN0UHV0OgogICAgICAgICBjYXNlIFJlc29sdmVHbG9i
YWw6IHsKLSAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24gPSBub2RlLmdldEhl
YXBQcmVkaWN0aW9uKCk7CisgICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uID0g
bm9kZS0+Z2V0SGVhcFByZWRpY3Rpb24oKTsKICAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VQ
cmVkaWN0aW9uKHByZWRpY3Rpb24pOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAg
LTY0MywxOCArNjM5LDE2IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBO
ZXdBcnJheTogewogICAgICAgICAgICAgY2hhbmdlZCB8PSBzZXRQcmVkaWN0aW9uKFNwZWNBcnJh
eSk7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGNoaWxkSWR4ID0gbm9kZS5maXJzdENoaWxk
KCk7Ci0gICAgICAgICAgICAgICAgIGNoaWxkSWR4IDwgbm9kZS5maXJzdENoaWxkKCkgKyBub2Rl
Lm51bUNoaWxkcmVuKCk7Ci0gICAgICAgICAgICAgICAgICsrY2hpbGRJZHgpIHsKLSAgICAgICAg
ICAgICAgICBFZGdlIGVkZ2UgPSBtX2dyYXBoLm1fdmFyQXJnQ2hpbGRyZW5bY2hpbGRJZHhdOwot
ICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaFtlZGdlXS5tZXJnZUZsYWdzKE5vZGVV
c2VkQXNWYWx1ZSk7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGNo
aWxkSWR4ID0gbm9kZS0+Zmlyc3RDaGlsZCgpOworICAgICAgICAgICAgICAgICBjaGlsZElkeCA8
IG5vZGUtPmZpcnN0Q2hpbGQoKSArIG5vZGUtPm51bUNoaWxkcmVuKCk7CisgICAgICAgICAgICAg
ICAgICsrY2hpbGRJZHgpCisgICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoLm1fdmFy
QXJnQ2hpbGRyZW5bY2hpbGRJZHhdLT5tZXJnZUZsYWdzKE5vZGVVc2VkQXNWYWx1ZSk7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgTmV3
QXJyYXlXaXRoU2l6ZTogewogICAgICAgICAgICAgY2hhbmdlZCB8PSBzZXRQcmVkaWN0aW9uKFNw
ZWNBcnJheSk7Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0u
bWVyZ2VGbGFncyhOb2RlVXNlZEFzVmFsdWUgfCBOb2RlVXNlZEFzSW50IHwgTm9kZVVzZWRBc0lu
dExvY2FsbHkpOworICAgICAgICAgICAgY2hhbmdlZCB8PSBub2RlLT5jaGlsZDEoKS0+bWVyZ2VG
bGFncyhOb2RlVXNlZEFzVmFsdWUgfCBOb2RlVXNlZEFzSW50IHwgTm9kZVVzZWRBc0ludExvY2Fs
bHkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIApAQCAtNjcw
LDIyICs2NjQsMjIgQEAgcHJpdmF0ZToKICAgICAgICAgCiAgICAgICAgIGNhc2UgU3RyaW5nQ2hh
ckF0OiB7CiAgICAgICAgICAgICBjaGFuZ2VkIHw9IHNldFByZWRpY3Rpb24oU3BlY1N0cmluZyk7
Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ubWVyZ2VGbGFn
cyhOb2RlVXNlZEFzVmFsdWUpOwotICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW25vZGUu
Y2hpbGQyKCldLm1lcmdlRmxhZ3MoTm9kZVVzZWRBc051bWJlciB8IE5vZGVVc2VkQXNPdGhlciB8
IE5vZGVVc2VkQXNJbnQgfCBOb2RlVXNlZEFzSW50TG9jYWxseSk7CisgICAgICAgICAgICBjaGFu
Z2VkIHw9IG5vZGUtPmNoaWxkMSgpLT5tZXJnZUZsYWdzKE5vZGVVc2VkQXNWYWx1ZSk7CisgICAg
ICAgICAgICBjaGFuZ2VkIHw9IG5vZGUtPmNoaWxkMigpLT5tZXJnZUZsYWdzKE5vZGVVc2VkQXNO
dW1iZXIgfCBOb2RlVXNlZEFzT3RoZXIgfCBOb2RlVXNlZEFzSW50IHwgTm9kZVVzZWRBc0ludExv
Y2FsbHkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAg
ICAgICBjYXNlIFN0ckNhdDogewogICAgICAgICAgICAgY2hhbmdlZCB8PSBzZXRQcmVkaWN0aW9u
KFNwZWNTdHJpbmcpOwotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBjaGlsZElkeCA9IG5vZGUu
Zmlyc3RDaGlsZCgpOwotICAgICAgICAgICAgICAgICBjaGlsZElkeCA8IG5vZGUuZmlyc3RDaGls
ZCgpICsgbm9kZS5udW1DaGlsZHJlbigpOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBjaGls
ZElkeCA9IG5vZGUtPmZpcnN0Q2hpbGQoKTsKKyAgICAgICAgICAgICAgICAgY2hpbGRJZHggPCBu
b2RlLT5maXJzdENoaWxkKCkgKyBub2RlLT5udW1DaGlsZHJlbigpOwogICAgICAgICAgICAgICAg
ICArK2NoaWxkSWR4KQotICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaFttX2dyYXBo
Lm1fdmFyQXJnQ2hpbGRyZW5bY2hpbGRJZHhdXS5tZXJnZUZsYWdzKE5vZGVVc2VkQXNOdW1iZXIg
fCBOb2RlVXNlZEFzT3RoZXIpOworICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaC5t
X3ZhckFyZ0NoaWxkcmVuW2NoaWxkSWR4XS0+bWVyZ2VGbGFncyhOb2RlVXNlZEFzTnVtYmVyIHwg
Tm9kZVVzZWRBc090aGVyKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAg
ICAgICAKICAgICAgICAgY2FzZSBUb1ByaW1pdGl2ZTogewotICAgICAgICAgICAgU3BlY3VsYXRl
ZFR5cGUgY2hpbGQgPSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLnByZWRpY3Rpb24oKTsKKyAgICAg
ICAgICAgIFNwZWN1bGF0ZWRUeXBlIGNoaWxkID0gbm9kZS0+Y2hpbGQxKCktPnByZWRpY3Rpb24o
KTsKICAgICAgICAgICAgIGlmIChjaGlsZCkgewogICAgICAgICAgICAgICAgIGlmIChpc09iamVj
dFNwZWN1bGF0aW9uKGNoaWxkKSkgewogICAgICAgICAgICAgICAgICAgICAvLyBJJ2QgbG92ZSB0
byBmb2xkIHRoaXMgY2FzZSBpbnRvIHRoZSBjYXNlIGJlbG93LCBidXQgSSBjYW4ndCwgYmVjYXVz
ZQpAQCAtNzAyLDcgKzY5Niw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgfSBlbHNlCiAg
ICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKGNoaWxkKTsKICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaFtub2RlLmNoaWxkMSgp
XS5tZXJnZUZsYWdzKGZsYWdzKTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbm9kZS0+Y2hpbGQx
KCktPm1lcmdlRmxhZ3MoZmxhZ3MpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAg
ICAgICAgICAgIApAQCAtNzQ1LDQyICs3MzksNDUgQEAgcHJpdmF0ZToKICAgICAgICAgfQogICAg
ICAgICAKICAgICAgICAgY2FzZSBQdXRCeVZhbDoKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9n
cmFwaFttX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApXS5tZXJnZUZsYWdzKE5vZGVVc2VkQXNW
YWx1ZSk7Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbV9ncmFwaC52YXJBcmdDaGls
ZChub2RlLCAxKV0ubWVyZ2VGbGFncyhOb2RlVXNlZEFzTnVtYmVyIHwgTm9kZVVzZWRBc090aGVy
IHwgTm9kZVVzZWRBc0ludCB8IE5vZGVVc2VkQXNJbnRMb2NhbGx5KTsKLSAgICAgICAgICAgIGNo
YW5nZWQgfD0gbV9ncmFwaFttX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpXS5tZXJnZUZsYWdz
KE5vZGVVc2VkQXNWYWx1ZSk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGgudmFyQXJn
Q2hpbGQobm9kZSwgMCktPm1lcmdlRmxhZ3MoTm9kZVVzZWRBc1ZhbHVlKTsKKyAgICAgICAgICAg
IGNoYW5nZWQgfD0gbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKS0+bWVyZ2VGbGFncyhOb2Rl
VXNlZEFzTnVtYmVyIHwgTm9kZVVzZWRBc090aGVyIHwgTm9kZVVzZWRBc0ludCB8IE5vZGVVc2Vk
QXNJbnRMb2NhbGx5KTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaC52YXJBcmdDaGls
ZChub2RlLCAyKS0+bWVyZ2VGbGFncyhOb2RlVXNlZEFzVmFsdWUpOwogICAgICAgICAgICAgYnJl
YWs7CiAKICAgICAgICAgY2FzZSBQdXRTY29wZWRWYXI6Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9
IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ubWVyZ2VGbGFncyhOb2RlVXNlZEFzVmFsdWUpOwotICAg
ICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQzKCldLm1lcmdlRmxhZ3MoTm9k
ZVVzZWRBc1ZhbHVlKTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbm9kZS0+Y2hpbGQxKCktPm1l
cmdlRmxhZ3MoTm9kZVVzZWRBc1ZhbHVlKTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbm9kZS0+
Y2hpbGQzKCktPm1lcmdlRmxhZ3MoTm9kZVVzZWRBc1ZhbHVlKTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgUmV0dXJuOgogICAgICAgICBjYXNlIFRocm93
OgotICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLm1lcmdlRmxh
Z3MoTm9kZVVzZWRBc1ZhbHVlKTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbm9kZS0+Y2hpbGQx
KCktPm1lcmdlRmxhZ3MoTm9kZVVzZWRBc1ZhbHVlKTsKICAgICAgICAgICAgIGJyZWFrOwogCiAg
ICAgICAgIGNhc2UgUHV0QnlJZDoKICAgICAgICAgY2FzZSBQdXRCeUlkRGlyZWN0OgotICAgICAg
ICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLm1lcmdlRmxhZ3MoTm9kZVVz
ZWRBc1ZhbHVlKTsKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaFtub2RlLmNoaWxkMigp
XS5tZXJnZUZsYWdzKE5vZGVVc2VkQXNWYWx1ZSk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG5v
ZGUtPmNoaWxkMSgpLT5tZXJnZUZsYWdzKE5vZGVVc2VkQXNWYWx1ZSk7CisgICAgICAgICAgICBj
aGFuZ2VkIHw9IG5vZGUtPmNoaWxkMigpLT5tZXJnZUZsYWdzKE5vZGVVc2VkQXNWYWx1ZSk7CiAg
ICAgICAgICAgICBicmVhazsKIAogICAgICAgICBjYXNlIFB1dEJ5T2Zmc2V0OgotICAgICAgICAg
ICAgY2hhbmdlZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLm1lcmdlRmxhZ3MoTm9kZVVzZWRB
c1ZhbHVlKTsKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaFtub2RlLmNoaWxkMygpXS5t
ZXJnZUZsYWdzKE5vZGVVc2VkQXNWYWx1ZSk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG5vZGUt
PmNoaWxkMSgpLT5tZXJnZUZsYWdzKE5vZGVVc2VkQXNWYWx1ZSk7CisgICAgICAgICAgICBjaGFu
Z2VkIHw9IG5vZGUtPmNoaWxkMygpLT5tZXJnZUZsYWdzKE5vZGVVc2VkQXNWYWx1ZSk7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgICAgICBjYXNlIFBoaToKKyAgICAgICAg
ICAgIC8vIFBoaXMgc2hvdWxkIG5vdCBiZSB2aXNpYmxlIGhlcmUgc2luY2Ugd2UncmUgaXRlcmF0
aW5nIHRoZSBhbGwtYnV0LVBoaSdzCisgICAgICAgICAgICAvLyBwYXJ0IG9mIGJhc2ljIGJsb2Nr
cy4KKyAgICAgICAgICAgIENSQVNIKCk7CiAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICBj
YXNlIFNldENhbGxlZToKICAgICAgICAgY2FzZSBTZXRNeVNjb3BlOgotICAgICAgICAgICAgY2hh
bmdlZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLm1lcmdlRmxhZ3MoTm9kZVVzZWRBc1ZhbHVl
KTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbm9kZS0+Y2hpbGQxKCktPm1lcmdlRmxhZ3MoTm9k
ZVVzZWRBc1ZhbHVlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAgICAg
IGNhc2UgR2V0U2NvcGU6Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbm9kZS5jaGls
ZDEoKV0ubWVyZ2VGbGFncyhOb2RlVXNlZEFzVmFsdWUpOworICAgICAgICAgICAgY2hhbmdlZCB8
PSBub2RlLT5jaGlsZDEoKS0+bWVyZ2VGbGFncyhOb2RlVXNlZEFzVmFsdWUpOwogICAgICAgICAg
ICAgY2hhbmdlZCB8PSBzZXRQcmVkaWN0aW9uKFNwZWNDZWxsT3RoZXIpOwogICAgICAgICAgICAg
YnJlYWs7CiAKQEAgLTgyOCwzMiArODI1LDMyIEBAIHByaXZhdGU6CiAgICAgICAgIH0KIAogI2lm
IERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKLSAgICAgICAgZGF0YUxvZyhT
cGVjdWxhdGlvbkR1bXAobV9ncmFwaFttX2NvbXBpbGVJbmRleF0ucHJlZGljdGlvbigpKSwgIlxu
Iik7CisgICAgICAgIGRhdGFMb2coU3BlY3VsYXRpb25EdW1wKG5vZGUtPnByZWRpY3Rpb24oKSks
ICJcbiIpOwogI2VuZGlmCiAgICAgICAgIAogICAgICAgICBtX2NoYW5nZWQgfD0gY2hhbmdlZDsK
ICAgICB9CiAgICAgICAgIAotICAgIGJvb2wgbWVyZ2VEZWZhdWx0RmxhZ3MoTm9kZSYgbm9kZSkK
KyAgICBib29sIG1lcmdlRGVmYXVsdEZsYWdzKE5vZGUqIG5vZGUpCiAgICAgewogICAgICAgICBi
b29sIGNoYW5nZWQgPSBmYWxzZTsKLSAgICAgICAgaWYgKG5vZGUuZmxhZ3MoKSAmIE5vZGVIYXNW
YXJBcmdzKSB7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGNoaWxkSWR4ID0gbm9kZS5maXJz
dENoaWxkKCk7Ci0gICAgICAgICAgICAgICAgIGNoaWxkSWR4IDwgbm9kZS5maXJzdENoaWxkKCkg
KyBub2RlLm51bUNoaWxkcmVuKCk7CisgICAgICAgIGlmIChub2RlLT5mbGFncygpICYgTm9kZUhh
c1ZhckFyZ3MpIHsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgY2hpbGRJZHggPSBub2RlLT5m
aXJzdENoaWxkKCk7CisgICAgICAgICAgICAgICAgIGNoaWxkSWR4IDwgbm9kZS0+Zmlyc3RDaGls
ZCgpICsgbm9kZS0+bnVtQ2hpbGRyZW4oKTsKICAgICAgICAgICAgICAgICAgY2hpbGRJZHgrKykg
ewogICAgICAgICAgICAgICAgIGlmICghIW1fZ3JhcGgubV92YXJBcmdDaGlsZHJlbltjaGlsZElk
eF0pCi0gICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaFttX2dyYXBoLm1fdmFy
QXJnQ2hpbGRyZW5bY2hpbGRJZHhdXS5tZXJnZUZsYWdzKE5vZGVVc2VkQXNWYWx1ZSk7CisgICAg
ICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaC5tX3ZhckFyZ0NoaWxkcmVuW2NoaWxk
SWR4XS0+bWVyZ2VGbGFncyhOb2RlVXNlZEFzVmFsdWUpOwogICAgICAgICAgICAgfQogICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgaWYgKCFub2RlLmNoaWxkMSgpKQorICAgICAgICAgICAg
aWYgKCFub2RlLT5jaGlsZDEoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gY2hhbmdlZDsKLSAg
ICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5tZXJnZUZsYWdzKE5v
ZGVVc2VkQXNWYWx1ZSk7Ci0gICAgICAgICAgICBpZiAoIW5vZGUuY2hpbGQyKCkpCisgICAgICAg
ICAgICBjaGFuZ2VkIHw9IG5vZGUtPmNoaWxkMSgpLT5tZXJnZUZsYWdzKE5vZGVVc2VkQXNWYWx1
ZSk7CisgICAgICAgICAgICBpZiAoIW5vZGUtPmNoaWxkMigpKQogICAgICAgICAgICAgICAgIHJl
dHVybiBjaGFuZ2VkOwotICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQy
KCldLm1lcmdlRmxhZ3MoTm9kZVVzZWRBc1ZhbHVlKTsKLSAgICAgICAgICAgIGlmICghbm9kZS5j
aGlsZDMoKSkKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbm9kZS0+Y2hpbGQyKCktPm1lcmdlRmxh
Z3MoTm9kZVVzZWRBc1ZhbHVlKTsKKyAgICAgICAgICAgIGlmICghbm9kZS0+Y2hpbGQzKCkpCiAg
ICAgICAgICAgICAgICAgcmV0dXJuIGNoYW5nZWQ7Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IG1f
Z3JhcGhbbm9kZS5jaGlsZDMoKV0ubWVyZ2VGbGFncyhOb2RlVXNlZEFzVmFsdWUpOworICAgICAg
ICAgICAgY2hhbmdlZCB8PSBub2RlLT5jaGlsZDMoKS0+bWVyZ2VGbGFncyhOb2RlVXNlZEFzVmFs
dWUpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBjaGFuZ2VkOwogICAgIH0KQEAgLTg2Myw4
ICs4NjAsMTYgQEAgcHJpdmF0ZToKICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZF
UkJPU0UpCiAgICAgICAgIGRhdGFMb2dGKCJQcm9wYWdhdGluZyBwcmVkaWN0aW9ucyBmb3J3YXJk
IFsldV1cbiIsICsrbV9jb3VudCk7CiAjZW5kaWYKLSAgICAgICAgZm9yIChtX2NvbXBpbGVJbmRl
eCA9IDA7IG1fY29tcGlsZUluZGV4IDwgbV9ncmFwaC5zaXplKCk7ICsrbV9jb21waWxlSW5kZXgp
Ci0gICAgICAgICAgICBwcm9wYWdhdGUobV9ncmFwaFttX2NvbXBpbGVJbmRleF0pOworICAgICAg
ICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2dyYXBoLm1f
YmxvY2tzLnNpemUoKTsgKytibG9ja0luZGV4KSB7CisgICAgICAgICAgICBCYXNpY0Jsb2NrKiBi
bG9jayA9IG1fZ3JhcGgubV9ibG9ja3NbYmxvY2tJbmRleF0uZ2V0KCk7CisgICAgICAgICAgICBp
ZiAoIWJsb2NrKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgQVNTRVJU
KGJsb2NrLT5pc1JlYWNoYWJsZSk7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgYmxvY2stPnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICAgICAgbV9jdXJyZW50Tm9kZSA9
IGJsb2NrLT5hdChpKTsKKyAgICAgICAgICAgICAgICBwcm9wYWdhdGUobV9jdXJyZW50Tm9kZSk7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KICAgICB9CiAgICAgCiAgICAgdm9pZCBwcm9wYWdh
dGVCYWNrd2FyZCgpCkBAIC04NzIsMTIzICs4NzcsMTM5IEBAIHByaXZhdGU6CiAjaWYgREZHX0VO
QUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQogICAgICAgICBkYXRhTG9nRigiUHJvcGFn
YXRpbmcgcHJlZGljdGlvbnMgYmFja3dhcmQgWyV1XVxuIiwgKyttX2NvdW50KTsKICNlbmRpZgot
ICAgICAgICBmb3IgKG1fY29tcGlsZUluZGV4ID0gbV9ncmFwaC5zaXplKCk7IG1fY29tcGlsZUlu
ZGV4LS0gPiAwOykKLSAgICAgICAgICAgIHByb3BhZ2F0ZShtX2dyYXBoW21fY29tcGlsZUluZGV4
XSk7CisgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gbV9ncmFwaC5tX2Jsb2Nr
cy5zaXplKCk7IGJsb2NrSW5kZXgtLTspIHsKKyAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2Nr
ID0gbV9ncmFwaC5tX2Jsb2Nrc1tibG9ja0luZGV4XS5nZXQoKTsKKyAgICAgICAgICAgIGlmICgh
YmxvY2spCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBBU1NFUlQoYmxv
Y2stPmlzUmVhY2hhYmxlKTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGJsb2NrLT5z
aXplKCk7IGktLTspIHsKKyAgICAgICAgICAgICAgICBtX2N1cnJlbnROb2RlID0gYmxvY2stPmF0
KGkpOworICAgICAgICAgICAgICAgIHByb3BhZ2F0ZShtX2N1cnJlbnROb2RlKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQogICAgIH0KICAgICAKLSAgICB2b2lkIGRvUm91bmRPZkRvdWJsZVZv
dGluZygpCisgICAgdm9pZCBkb0RvdWJsZVZvdGluZyhOb2RlKiBub2RlKQogICAgIHsKLSNpZiBE
RkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCi0gICAgICAgIGRhdGFMb2dGKCJW
b3Rpbmcgb24gZG91YmxlIHVzZXMgb2YgbG9jYWxzIFsldV1cbiIsIG1fY291bnQpOwotI2VuZGlm
Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2dyYXBoLm1fdmFyaWFibGVBY2Nl
c3NEYXRhLnNpemUoKTsgKytpKQotICAgICAgICAgICAgbV9ncmFwaC5tX3ZhcmlhYmxlQWNjZXNz
RGF0YVtpXS5maW5kKCktPmNsZWFyVm90ZXMoKTsKLSAgICAgICAgZm9yIChtX2NvbXBpbGVJbmRl
eCA9IDA7IG1fY29tcGlsZUluZGV4IDwgbV9ncmFwaC5zaXplKCk7ICsrbV9jb21waWxlSW5kZXgp
IHsKLSAgICAgICAgICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW21fY29tcGlsZUluZGV4XTsKLSAg
ICAgICAgICAgIHN3aXRjaCAobm9kZS5vcCgpKSB7Ci0gICAgICAgICAgICBjYXNlIFZhbHVlQWRk
OgotICAgICAgICAgICAgY2FzZSBBcml0aEFkZDoKLSAgICAgICAgICAgIGNhc2UgQXJpdGhTdWI6
IHsKLSAgICAgICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSBsZWZ0ID0gbV9ncmFwaFtub2RlLmNo
aWxkMSgpXS5wcmVkaWN0aW9uKCk7Ci0gICAgICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgcmln
aHQgPSBtX2dyYXBoW25vZGUuY2hpbGQyKCldLnByZWRpY3Rpb24oKTsKKyAgICAgICAgc3dpdGNo
IChub2RlLT5vcCgpKSB7CisgICAgICAgIGNhc2UgVmFsdWVBZGQ6CisgICAgICAgIGNhc2UgQXJp
dGhBZGQ6CisgICAgICAgIGNhc2UgQXJpdGhTdWI6IHsKKyAgICAgICAgICAgIFNwZWN1bGF0ZWRU
eXBlIGxlZnQgPSBub2RlLT5jaGlsZDEoKS0+cHJlZGljdGlvbigpOworICAgICAgICAgICAgU3Bl
Y3VsYXRlZFR5cGUgcmlnaHQgPSBub2RlLT5jaGlsZDIoKS0+cHJlZGljdGlvbigpOwogICAgICAg
ICAgICAgICAgIAotICAgICAgICAgICAgICAgIERvdWJsZUJhbGxvdCBiYWxsb3Q7CisgICAgICAg
ICAgICBEb3VibGVCYWxsb3QgYmFsbG90OwogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAg
ICAgIGlmIChpc051bWJlclNwZWN1bGF0aW9uRXhwZWN0aW5nRGVmaW5lZChsZWZ0KSAmJiBpc051
bWJlclNwZWN1bGF0aW9uRXhwZWN0aW5nRGVmaW5lZChyaWdodCkKLSAgICAgICAgICAgICAgICAg
ICAgJiYgIW1fZ3JhcGguYWRkU2hvdWxkU3BlY3VsYXRlSW50ZWdlcihub2RlKSkKLSAgICAgICAg
ICAgICAgICAgICAgYmFsbG90ID0gVm90ZURvdWJsZTsKLSAgICAgICAgICAgICAgICBlbHNlCi0g
ICAgICAgICAgICAgICAgICAgIGJhbGxvdCA9IFZvdGVWYWx1ZTsKKyAgICAgICAgICAgIGlmIChp
c051bWJlclNwZWN1bGF0aW9uRXhwZWN0aW5nRGVmaW5lZChsZWZ0KSAmJiBpc051bWJlclNwZWN1
bGF0aW9uRXhwZWN0aW5nRGVmaW5lZChyaWdodCkKKyAgICAgICAgICAgICAgICAmJiAhbV9ncmFw
aC5hZGRTaG91bGRTcGVjdWxhdGVJbnRlZ2VyKG5vZGUpKQorICAgICAgICAgICAgICAgIGJhbGxv
dCA9IFZvdGVEb3VibGU7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgYmFsbG90
ID0gVm90ZVZhbHVlOwogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIG1fZ3JhcGgu
dm90ZShub2RlLmNoaWxkMSgpLCBiYWxsb3QpOwotICAgICAgICAgICAgICAgIG1fZ3JhcGgudm90
ZShub2RlLmNoaWxkMigpLCBiYWxsb3QpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgfQorICAgICAgICAgICAgbV9ncmFwaC52b3RlTm9kZShub2RlLT5jaGlsZDEoKSwgYmFs
bG90KTsKKyAgICAgICAgICAgIG1fZ3JhcGgudm90ZU5vZGUobm9kZS0+Y2hpbGQyKCksIGJhbGxv
dCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQogICAgICAgICAgICAgICAgIAotICAg
ICAgICAgICAgY2FzZSBBcml0aE11bDogewotICAgICAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBl
IGxlZnQgPSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLnByZWRpY3Rpb24oKTsKLSAgICAgICAgICAg
ICAgICBTcGVjdWxhdGVkVHlwZSByaWdodCA9IG1fZ3JhcGhbbm9kZS5jaGlsZDIoKV0ucHJlZGlj
dGlvbigpOworICAgICAgICBjYXNlIEFyaXRoTXVsOiB7CisgICAgICAgICAgICBTcGVjdWxhdGVk
VHlwZSBsZWZ0ID0gbm9kZS0+Y2hpbGQxKCktPnByZWRpY3Rpb24oKTsKKyAgICAgICAgICAgIFNw
ZWN1bGF0ZWRUeXBlIHJpZ2h0ID0gbm9kZS0+Y2hpbGQyKCktPnByZWRpY3Rpb24oKTsKICAgICAg
ICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBEb3VibGVCYWxsb3QgYmFsbG90OworICAgICAg
ICAgICAgRG91YmxlQmFsbG90IGJhbGxvdDsKICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAg
ICAgICBpZiAoaXNOdW1iZXJTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc051bWJlclNwZWN1bGF0aW9u
KHJpZ2h0KQotICAgICAgICAgICAgICAgICAgICAmJiAhbV9ncmFwaC5tdWxTaG91bGRTcGVjdWxh
dGVJbnRlZ2VyKG5vZGUpKQotICAgICAgICAgICAgICAgICAgICBiYWxsb3QgPSBWb3RlRG91Ymxl
OwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgYmFsbG90ID0gVm90
ZVZhbHVlOworICAgICAgICAgICAgaWYgKGlzTnVtYmVyU3BlY3VsYXRpb24obGVmdCkgJiYgaXNO
dW1iZXJTcGVjdWxhdGlvbihyaWdodCkKKyAgICAgICAgICAgICAgICAmJiAhbV9ncmFwaC5tdWxT
aG91bGRTcGVjdWxhdGVJbnRlZ2VyKG5vZGUpKQorICAgICAgICAgICAgICAgIGJhbGxvdCA9IFZv
dGVEb3VibGU7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgYmFsbG90ID0gVm90
ZVZhbHVlOwogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIG1fZ3JhcGgudm90ZShu
b2RlLmNoaWxkMSgpLCBiYWxsb3QpOwotICAgICAgICAgICAgICAgIG1fZ3JhcGgudm90ZShub2Rl
LmNoaWxkMigpLCBiYWxsb3QpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
fQorICAgICAgICAgICAgbV9ncmFwaC52b3RlTm9kZShub2RlLT5jaGlsZDEoKSwgYmFsbG90KTsK
KyAgICAgICAgICAgIG1fZ3JhcGgudm90ZU5vZGUobm9kZS0+Y2hpbGQyKCksIGJhbGxvdCk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQogCi0gICAgICAgICAgICBjYXNlIEFyaXRoTWlu
OgotICAgICAgICAgICAgY2FzZSBBcml0aE1heDoKLSAgICAgICAgICAgIGNhc2UgQXJpdGhNb2Q6
Ci0gICAgICAgICAgICBjYXNlIEFyaXRoRGl2OiB7Ci0gICAgICAgICAgICAgICAgU3BlY3VsYXRl
ZFR5cGUgbGVmdCA9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ucHJlZGljdGlvbigpOwotICAgICAg
ICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHJpZ2h0ID0gbV9ncmFwaFtub2RlLmNoaWxkMigpXS5w
cmVkaWN0aW9uKCk7CisgICAgICAgIGNhc2UgQXJpdGhNaW46CisgICAgICAgIGNhc2UgQXJpdGhN
YXg6CisgICAgICAgIGNhc2UgQXJpdGhNb2Q6CisgICAgICAgIGNhc2UgQXJpdGhEaXY6IHsKKyAg
ICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIGxlZnQgPSBub2RlLT5jaGlsZDEoKS0+cHJlZGljdGlv
bigpOworICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgcmlnaHQgPSBub2RlLT5jaGlsZDIoKS0+
cHJlZGljdGlvbigpOwogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIERvdWJsZUJh
bGxvdCBiYWxsb3Q7CisgICAgICAgICAgICBEb3VibGVCYWxsb3QgYmFsbG90OwogICAgICAgICAg
ICAgICAgIAotICAgICAgICAgICAgICAgIGlmIChpc051bWJlclNwZWN1bGF0aW9uKGxlZnQpICYm
IGlzTnVtYmVyU3BlY3VsYXRpb24ocmlnaHQpCi0gICAgICAgICAgICAgICAgICAgICYmICEoTm9k
ZTo6c2hvdWxkU3BlY3VsYXRlSW50ZWdlckZvckFyaXRobWV0aWMobV9ncmFwaFtub2RlLmNoaWxk
MSgpXSwgbV9ncmFwaFtub2RlLmNoaWxkMSgpXSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAm
JiBub2RlLmNhblNwZWN1bGF0ZUludGVnZXIoKSkpCi0gICAgICAgICAgICAgICAgICAgIGJhbGxv
dCA9IFZvdGVEb3VibGU7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAg
ICBiYWxsb3QgPSBWb3RlVmFsdWU7CisgICAgICAgICAgICBpZiAoaXNOdW1iZXJTcGVjdWxhdGlv
bihsZWZ0KSAmJiBpc051bWJlclNwZWN1bGF0aW9uKHJpZ2h0KQorICAgICAgICAgICAgICAgICYm
ICEoTm9kZTo6c2hvdWxkU3BlY3VsYXRlSW50ZWdlckZvckFyaXRobWV0aWMobm9kZS0+Y2hpbGQx
KCkubm9kZSgpLCBub2RlLT5jaGlsZDIoKS5ub2RlKCkpCisgICAgICAgICAgICAgICAgICAgICAm
JiBub2RlLmNhblNwZWN1bGF0ZUludGVnZXIoKSkpCisgICAgICAgICAgICAgICAgYmFsbG90ID0g
Vm90ZURvdWJsZTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBiYWxsb3QgPSBW
b3RlVmFsdWU7CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgbV9ncmFwaC52b3Rl
KG5vZGUuY2hpbGQxKCksIGJhbGxvdCk7Ci0gICAgICAgICAgICAgICAgbV9ncmFwaC52b3RlKG5v
ZGUuY2hpbGQyKCksIGJhbGxvdCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICB9CisgICAgICAgICAgICBtX2dyYXBoLnZvdGVOb2RlKG5vZGUtPmNoaWxkMSgpLCBiYWxsb3Qp
OworICAgICAgICAgICAgbV9ncmFwaC52b3RlTm9kZShub2RlLT5jaGlsZDIoKSwgYmFsbG90KTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAgICAgICAgICAgICAgICAgCi0gICAgICAg
ICAgICBjYXNlIEFyaXRoQWJzOgotICAgICAgICAgICAgICAgIERvdWJsZUJhbGxvdCBiYWxsb3Q7
Ci0gICAgICAgICAgICAgICAgaWYgKCEobV9ncmFwaFtub2RlLmNoaWxkMSgpXS5zaG91bGRTcGVj
dWxhdGVJbnRlZ2VyRm9yQXJpdGhtZXRpYygpCi0gICAgICAgICAgICAgICAgICAgICAgJiYgbm9k
ZS5jYW5TcGVjdWxhdGVJbnRlZ2VyKCkpKQotICAgICAgICAgICAgICAgICAgICBiYWxsb3QgPSBW
b3RlRG91YmxlOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgYmFs
bG90ID0gVm90ZVZhbHVlOworICAgICAgICBjYXNlIEFyaXRoQWJzOgorICAgICAgICAgICAgRG91
YmxlQmFsbG90IGJhbGxvdDsKKyAgICAgICAgICAgIGlmICghKG5vZGUtPmNoaWxkMSgpLT5zaG91
bGRTcGVjdWxhdGVJbnRlZ2VyRm9yQXJpdGhtZXRpYygpCisgICAgICAgICAgICAgICAgICAmJiBu
b2RlLmNhblNwZWN1bGF0ZUludGVnZXIoKSkpCisgICAgICAgICAgICAgICAgYmFsbG90ID0gVm90
ZURvdWJsZTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBiYWxsb3QgPSBWb3Rl
VmFsdWU7CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgbV9ncmFwaC52b3RlKG5v
ZGUuY2hpbGQxKCksIGJhbGxvdCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICBtX2dyYXBoLnZvdGVOb2RlKG5vZGUtPmNoaWxkMSgpLCBiYWxsb3QpOworICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBjYXNlIEFyaXRoU3FydDoKLSAg
ICAgICAgICAgICAgICBtX2dyYXBoLnZvdGUobm9kZS5jaGlsZDEoKSwgVm90ZURvdWJsZSk7Ci0g
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQXJpdGhTcXJ0OgorICAgICAgICAg
ICAgbV9ncmFwaC52b3RlTm9kZShub2RlLT5jaGlsZDEoKSwgVm90ZURvdWJsZSk7CisgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGNhc2UgU2V0TG9jYWw6
IHsKLSAgICAgICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uID0gbV9ncmFwaFtu
b2RlLmNoaWxkMSgpXS5wcmVkaWN0aW9uKCk7Ci0gICAgICAgICAgICAgICAgaWYgKGlzRG91Ymxl
U3BlY3VsYXRpb24ocHJlZGljdGlvbikpCi0gICAgICAgICAgICAgICAgICAgIG5vZGUudmFyaWFi
bGVBY2Nlc3NEYXRhKCktPnZvdGUoVm90ZURvdWJsZSk7Ci0gICAgICAgICAgICAgICAgZWxzZSBp
ZiAoIWlzTnVtYmVyU3BlY3VsYXRpb24ocHJlZGljdGlvbikgfHwgaXNJbnQzMlNwZWN1bGF0aW9u
KHByZWRpY3Rpb24pKQotICAgICAgICAgICAgICAgICAgICBub2RlLnZhcmlhYmxlQWNjZXNzRGF0
YSgpLT52b3RlKFZvdGVWYWx1ZSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICB9CisgICAgICAgIGNhc2UgU2V0TG9jYWw6IHsKKyAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBl
IHByZWRpY3Rpb24gPSBub2RlLT5jaGlsZDEoKS0+cHJlZGljdGlvbigpOworICAgICAgICAgICAg
aWYgKGlzRG91YmxlU3BlY3VsYXRpb24ocHJlZGljdGlvbikpCisgICAgICAgICAgICAgICAgbm9k
ZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCktPnZvdGUoVm90ZURvdWJsZSk7CisgICAgICAgICAgICBl
bHNlIGlmICghaXNOdW1iZXJTcGVjdWxhdGlvbihwcmVkaWN0aW9uKSB8fCBpc0ludDMyU3BlY3Vs
YXRpb24ocHJlZGljdGlvbikpCisgICAgICAgICAgICAgICAgbm9kZS0+dmFyaWFibGVBY2Nlc3NE
YXRhKCktPnZvdGUoVm90ZVZhbHVlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAg
ICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBjYXNlIFB1dEJ5VmFsOgotICAgICAgICAgICAg
Y2FzZSBQdXRCeVZhbEFsaWFzOiB7Ci0gICAgICAgICAgICAgICAgRWRnZSBjaGlsZDEgPSBtX2dy
YXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApOwotICAgICAgICAgICAgICAgIEVkZ2UgY2hpbGQyID0g
bV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKTsKLSAgICAgICAgICAgICAgICBFZGdlIGNoaWxk
MyA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMik7Ci0gICAgICAgICAgICAgICAgbV9ncmFw
aC52b3RlKGNoaWxkMSwgVm90ZVZhbHVlKTsKLSAgICAgICAgICAgICAgICBtX2dyYXBoLnZvdGUo
Y2hpbGQyLCBWb3RlVmFsdWUpOwotICAgICAgICAgICAgICAgIHN3aXRjaCAobm9kZS5hcnJheU1v
ZGUoKS50eXBlKCkpIHsKLSAgICAgICAgICAgICAgICBjYXNlIEFycmF5OjpEb3VibGU6Ci0gICAg
ICAgICAgICAgICAgICAgIG1fZ3JhcGgudm90ZShjaGlsZDMsIFZvdGVEb3VibGUpOwotICAgICAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAg
ICAgICAgICAgICBtX2dyYXBoLnZvdGUoY2hpbGQzLCBWb3RlVmFsdWUpOwotICAgICAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9CisgICAgICAgIGNhc2UgUHV0QnlWYWw6
CisgICAgICAgIGNhc2UgUHV0QnlWYWxBbGlhczogeworICAgICAgICAgICAgRWRnZSBjaGlsZDEg
PSBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApOworICAgICAgICAgICAgRWRnZSBjaGlsZDIg
PSBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpOworICAgICAgICAgICAgRWRnZSBjaGlsZDMg
PSBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpOworICAgICAgICAgICAgbV9ncmFwaC52b3Rl
Tm9kZShjaGlsZDEsIFZvdGVWYWx1ZSk7CisgICAgICAgICAgICBtX2dyYXBoLnZvdGVOb2RlKGNo
aWxkMiwgVm90ZVZhbHVlKTsKKyAgICAgICAgICAgIHN3aXRjaCAobm9kZS5hcnJheU1vZGUoKS50
eXBlKCkpIHsKKyAgICAgICAgICAgIGNhc2UgQXJyYXk6OkRvdWJsZToKKyAgICAgICAgICAgICAg
ICBtX2dyYXBoLnZvdGVOb2RlKGNoaWxkMywgVm90ZURvdWJsZSk7CiAgICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBkZWZh
dWx0OgotICAgICAgICAgICAgICAgIG1fZ3JhcGgudm90ZShub2RlLCBWb3RlVmFsdWUpOworICAg
ICAgICAgICAgICAgIG1fZ3JhcGgudm90ZU5vZGUoY2hpbGQzLCBWb3RlVmFsdWUpOwogICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgbV9ncmFw
aC52b3RlQ2hpbGRyZW4obm9kZSwgVm90ZVZhbHVlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisgICAgfQorICAgIAorICAgIHZvaWQgZG9Sb3VuZE9mRG91YmxlVm90aW5nKCkKKyAg
ICB7CisjaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQorICAgICAgICBk
YXRhTG9nRigiVm90aW5nIG9uIGRvdWJsZSB1c2VzIG9mIGxvY2FscyBbJXVdXG4iLCBtX2NvdW50
KTsKKyNlbmRpZgorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9ncmFwaC5tX3Zh
cmlhYmxlQWNjZXNzRGF0YS5zaXplKCk7ICsraSkKKyAgICAgICAgICAgIG1fZ3JhcGgubV92YXJp
YWJsZUFjY2Vzc0RhdGFbaV0uZmluZCgpLT5jbGVhclZvdGVzKCk7CisgICAgICAgIGZvciAoQmFz
aWNCbG9jayBibG9ja0luZGV4ID0gMDsgaSA8IG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgpOyArK2Js
b2NrSW5kZXgpIHsKKyAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5tX2Js
b2Nrc1tibG9ja0luZGV4XS5nZXQoKTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBibG9jay0+c2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgICAgICBtX2N1cnJlbnROb2Rl
ID0gYmxvY2stPmF0KGkpOworICAgICAgICAgICAgICAgIGRvRG91YmxlVm90aW5nKG1fY3VycmVu
dE5vZGUpOworICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBtX2dyYXBoLm1fdmFyaWFibGVBY2Nlc3NEYXRhLnNpemUoKTsgKytpKSB7CiAg
ICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9ICZtX2dy
YXBoLm1fdmFyaWFibGVBY2Nlc3NEYXRhW2ldOwpAQCAtMTAxMiw3ICsxMDMzLDcgQEAgcHJpdmF0
ZToKICAgICAgICAgfQogICAgIH0KICAgICAKLSAgICBOb2RlSW5kZXggbV9jb21waWxlSW5kZXg7
CisgICAgTm9kZSogbV9jdXJyZW50Tm9kZTsKICAgICBib29sIG1fY2hhbmdlZDsKIAogI2lmIERG
R19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU3RydWN0dXJlQWJzdHJhY3RWYWx1ZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RydWN0dXJlQWJzdHJhY3RWYWx1ZS5oCShyZXZp
c2lvbiAxNDAzMDYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0cnVjdHVyZUFi
c3RyYWN0VmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTEsIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDExLCAyMDEyLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzE0LDYgKzMxNCw4IEBA
IHB1YmxpYzoKIHByaXZhdGU6CiAgICAgc3RhdGljIFN0cnVjdHVyZSogdG9wVmFsdWUoKSB7IHJl
dHVybiByZWludGVycHJldF9jYXN0PFN0cnVjdHVyZSo+KDEpOyB9CiAgICAgCisgICAgLy8gTkIu
IFRoaXMgbXVzdCBoYXZlIGEgdHJpdmlhbCBkZXN0cnVjdG9yLgorICAgIAogICAgIC8vIFRoaXMg
Y2FuIG9ubHkgcmVtZW1iZXIgb25lIHN0cnVjdHVyZSBhdCBhIHRpbWUuCiAgICAgU3RydWN0dXJl
KiBtX3N0cnVjdHVyZTsKIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0
cnVjdHVyZUNoZWNrSG9pc3RpbmdQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTdHJ1Y3R1cmVDaGVja0hvaXN0aW5nUGhhc2UuY3BwCShyZXZpc2lv
biAxNDAzMDYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0cnVjdHVyZUNoZWNr
SG9pc3RpbmdQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY0LDIzICs2NCwyMiBAQCBwdWJs
aWM6CiAgICAgICAgICAgICBpZiAoIWJsb2NrKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwog
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbmRleEluQmxvY2sgPSAwOyBpbmRleEluQmxvY2sg
PCBibG9jay0+c2l6ZSgpOyArK2luZGV4SW5CbG9jaykgewotICAgICAgICAgICAgICAgIE5vZGVJ
bmRleCBub2RlSW5kZXggPSBibG9jay0+YXQoaW5kZXhJbkJsb2NrKTsKLSAgICAgICAgICAgICAg
ICBOb2RlJiBub2RlID0gbV9ncmFwaFtub2RlSW5kZXhdOwotICAgICAgICAgICAgICAgIGlmICgh
bm9kZS5zaG91bGRHZW5lcmF0ZSgpKQorICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9j
ay0+YXQoaW5kZXhJbkJsb2NrKTsKKyAgICAgICAgICAgICAgICBpZiAoIW5vZGUtPnNob3VsZEdl
bmVyYXRlKCkpCiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAg
IHN3aXRjaCAobm9kZS5vcCgpKSB7CisgICAgICAgICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgp
KSB7CiAgICAgICAgICAgICAgICAgY2FzZSBDaGVja1N0cnVjdHVyZToKICAgICAgICAgICAgICAg
ICBjYXNlIFN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50OiB7Ci0gICAgICAgICAgICAgICAg
ICAgIE5vZGUmIGNoaWxkID0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXTsKLSAgICAgICAgICAgICAg
ICAgICAgaWYgKGNoaWxkLm9wKCkgIT0gR2V0TG9jYWwpCisgICAgICAgICAgICAgICAgICAgIE5v
ZGUqIGNoaWxkID0gbm9kZS0+Y2hpbGQxKCkubm9kZSgpOworICAgICAgICAgICAgICAgICAgICBp
ZiAoY2hpbGQtPm9wKCkgIT0gR2V0TG9jYWwpCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IGNo
aWxkLnZhcmlhYmxlQWNjZXNzRGF0YSgpOworICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZUFj
Y2Vzc0RhdGEqIHZhcmlhYmxlID0gY2hpbGQtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOwogICAgICAg
ICAgICAgICAgICAgICB2YXJpYWJsZS0+dm90ZShWb3RlU3RydWN0dXJlQ2hlY2spOwogICAgICAg
ICAgICAgICAgICAgICBpZiAodmFyaWFibGUtPmlzQ2FwdHVyZWQoKSB8fCB2YXJpYWJsZS0+c3Ry
dWN0dXJlQ2hlY2tIb2lzdGluZ0ZhaWxlZCgpKQogICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICAgICAgICAgIGlmICghaXNDZWxsU3BlY3VsYXRpb24odmFyaWFibGUt
PnByZWRpY3Rpb24oKSkpCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgICAgICAgICAgbm90aWNlU3RydWN0dXJlQ2hlY2sodmFyaWFibGUsIG5vZGUuc3RydWN0dXJl
U2V0KCkpOworICAgICAgICAgICAgICAgICAgICBub3RpY2VTdHJ1Y3R1cmVDaGVjayh2YXJpYWJs
ZSwgbm9kZS0+c3RydWN0dXJlU2V0KCkpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIApAQCAtMTA5LDEzICsxMDgsMTMg
QEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBjYXNlIEFy
cmF5aWZ5VG9TdHJ1Y3R1cmU6CiAgICAgICAgICAgICAgICAgY2FzZSBBcnJheWlmeToKLSAgICAg
ICAgICAgICAgICAgICAgaWYgKG5vZGUuYXJyYXlNb2RlKCkuY29udmVyc2lvbigpID09IEFycmF5
OjpSYWdlQ29udmVydCkgeworICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS0+YXJyYXlNb2Rl
KCkuY29udmVyc2lvbigpID09IEFycmF5OjpSYWdlQ29udmVydCkgewogICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gUmFnZSBjb252ZXJzaW9uIGNoYW5nZXMgc3RydWN0dXJlcy4gV2Ugc2hvdWxk
IGF2b2lkIHR5aW5nIHRvIGRvCiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhbnkga2luZCBv
ZiBob2lzdGluZyB3aGVuIHJhZ2UgY29udmVyc2lvbiBpcyBpbiBwbGF5LgotICAgICAgICAgICAg
ICAgICAgICAgICAgTm9kZSYgY2hpbGQgPSBtX2dyYXBoW25vZGUuY2hpbGQxKCldOwotICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkLm9wKCkgIT0gR2V0TG9jYWwpCisgICAgICAgICAg
ICAgICAgICAgICAgICBOb2RlKiBjaGlsZCA9IG5vZGUtPmNoaWxkMSgpLm5vZGV4KCk7CisgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGQtPm9wKCkgIT0gR2V0TG9jYWwpCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICBWYXJp
YWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gY2hpbGQudmFyaWFibGVBY2Nlc3NEYXRhKCk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gY2hp
bGQtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOwogICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFi
bGUtPnZvdGUoVm90ZU90aGVyKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YXJpYWJs
ZS0+aXNDYXB0dXJlZCgpIHx8IHZhcmlhYmxlLT5zdHJ1Y3R1cmVDaGVja0hvaXN0aW5nRmFpbGVk
KCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0xMzAsMzAgKzEyOSwy
OSBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgIC8vIGtpbmQgb2YgQ2hlY2tTdHJ1Y3R1
cmUsIHRoZW4gd2Ugc2hvdWxkIG5vdGljZSB0aGVtIHRvIGVuc3VyZSB0aGF0CiAgICAgICAgICAg
ICAgICAgICAgIC8vIHdlJ3JlIG5vdCBob2lzdGluZyBhIGNoZWNrIHRoYXQgd291bGQgY29udHJh
dmVuZSBjaGVja3MgdGhhdCBhcmUKICAgICAgICAgICAgICAgICAgICAgLy8gYWxyZWFkeSBiZWlu
ZyBwZXJmb3JtZWQuCi0gICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFy
aWFibGUgPSBub2RlLnZhcmlhYmxlQWNjZXNzRGF0YSgpOworICAgICAgICAgICAgICAgICAgICBW
YXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7
CiAgICAgICAgICAgICAgICAgICAgIGlmICh2YXJpYWJsZS0+aXNDYXB0dXJlZCgpIHx8IHZhcmlh
YmxlLT5zdHJ1Y3R1cmVDaGVja0hvaXN0aW5nRmFpbGVkKCkpCiAgICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgaWYgKCFpc0NlbGxTcGVjdWxhdGlvbih2
YXJpYWJsZS0+cHJlZGljdGlvbigpKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgICAgICAgICBOb2RlSW5kZXggc291cmNlID0gbm9kZS5jaGlsZDEoKS5pbmRl
eCgpOworICAgICAgICAgICAgICAgICAgICBOb2RlKiBzb3VyY2UgPSBub2RlLT5jaGlsZDEoKS5u
b2RlKCk7CiAgICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgc3ViSW5kZXhJbkJsb2Nr
ID0gMDsgc3ViSW5kZXhJbkJsb2NrIDwgYmxvY2stPnNpemUoKTsgKytzdWJJbmRleEluQmxvY2sp
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIE5vZGVJbmRleCBzdWJOb2RlSW5kZXggPSBibG9j
ay0+YXQoc3ViSW5kZXhJbkJsb2NrKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIE5vZGUmIHN1
Yk5vZGUgPSBtX2dyYXBoW3N1Yk5vZGVJbmRleF07Ci0gICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoIXN1Yk5vZGUuc2hvdWxkR2VuZXJhdGUoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIE5v
ZGUqIHN1Yk5vZGUgPSBibG9jay0+YXQoc3ViSW5kZXhJbkJsb2NrKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICghc3ViTm9kZS0+c2hvdWxkR2VuZXJhdGUoKSkKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAo
c3ViTm9kZS5vcCgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHN1Yk5vZGUt
Pm9wKCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgQ2hlY2tTdHJ1Y3R1cmU6IHsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3ViTm9kZS5jaGlsZDEoKS5pbmRleCgp
ICE9IHNvdXJjZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3ViTm9kZS0+Y2hp
bGQxKCkgIT0gc291cmNlKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBub3RpY2VTdHJ1Y3R1cmVDaGVjayh2YXJpYWJsZSwgc3ViTm9kZS5zdHJ1Y3R1cmVTZXQoKSk7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm90aWNlU3RydWN0dXJlQ2hlY2sodmFyaWFi
bGUsIHN1Yk5vZGUtPnN0cnVjdHVyZVNldCgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAg
ICAgIGNhc2UgU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnQ6IHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoc3ViTm9kZS5jaGlsZDEoKS5pbmRleCgpICE9IHNvdXJjZSkKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3ViTm9kZS0+Y2hpbGQxKCkgIT0gc291cmNl
KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3RpY2VTdHJ1Y3R1
cmVDaGVjayh2YXJpYWJsZSwgc3ViTm9kZS5zdHJ1Y3R1cmUoKSk7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbm90aWNlU3RydWN0dXJlQ2hlY2sodmFyaWFibGUsIHN1Yk5vZGUtPnN0cnVj
dHVyZSgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CkBAIC0xNjEs
MTQgKzE1OSwxNCBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAg
IG1fZ3JhcGgudm90ZShub2RlLCBWb3RlT3RoZXIpOworICAgICAgICAgICAgICAgICAgICBtX2dy
YXBoLnZvdGVDaGlsZHJlbihub2RlLCBWb3RlT3RoZXIpOwogICAgICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgY2FzZSBHYXJiYWdlVmFs
dWU6CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAKICAg
ICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLnZvdGUo
bm9kZSwgVm90ZU90aGVyKTsKKyAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC52b3RlQ2hpbGRy
ZW4obm9kZSwgVm90ZU90aGVyKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgfQpAQCAtMjA5LDEwICsyMDcsMTAgQEAgcHVibGljOgog
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBtX2dyYXBoLm1fbXVzdEhhbmRsZVZhbHVlcy5zaXplKCk7ICsraSkgewogICAgICAgICAg
ICAgICAgIGludCBvcGVyYW5kID0gbV9ncmFwaC5tX211c3RIYW5kbGVWYWx1ZXMub3BlcmFuZEZv
ckluZGV4KGkpOwotICAgICAgICAgICAgICAgIE5vZGVJbmRleCBub2RlSW5kZXggPSBibG9jay0+
dmFyaWFibGVzQXRIZWFkLm9wZXJhbmQob3BlcmFuZCk7Ci0gICAgICAgICAgICAgICAgaWYgKG5v
ZGVJbmRleCA9PSBOb05vZGUpCisgICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT52
YXJpYWJsZXNBdEhlYWQub3BlcmFuZChvcGVyYW5kKTsKKyAgICAgICAgICAgICAgICBpZiAoIW5v
ZGUpCiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIFZhcmlh
YmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBtX2dyYXBoW25vZGVJbmRleF0udmFyaWFibGVBY2Nl
c3NEYXRhKCk7CisgICAgICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9
IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOwogICAgICAgICAgICAgICAgIEhhc2hNYXA8VmFy
aWFibGVBY2Nlc3NEYXRhKiwgQ2hlY2tEYXRhPjo6aXRlcmF0b3IgaXRlciA9IG1fbWFwLmZpbmQo
dmFyaWFibGUpOwogICAgICAgICAgICAgICAgIGlmIChpdGVyID09IG1fbWFwLmVuZCgpKQogICAg
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTI2NSw0OCArMjYzLDQ3IEBAIHB1YmxpYzoK
ICAgICAgICAgICAgIGlmICghYmxvY2spCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGluZGV4SW5CbG9jayA9IDA7IGluZGV4SW5CbG9jayA8IGJs
b2NrLT5zaXplKCk7ICsraW5kZXhJbkJsb2NrKSB7Ci0gICAgICAgICAgICAgICAgTm9kZUluZGV4
IG5vZGVJbmRleCA9IGJsb2NrLT5hdChpbmRleEluQmxvY2spOwotICAgICAgICAgICAgICAgIE5v
ZGUmIG5vZGUgPSBtX2dyYXBoW25vZGVJbmRleF07CisgICAgICAgICAgICAgICAgTm9kZSogbm9k
ZSA9IGJsb2NrLT5hdChpbmRleEluQmxvY2spOwogICAgICAgICAgICAgICAgIC8vIEJlIGNhcmVm
dWwgbm90IHRvIHVzZSAnbm9kZScgYWZ0ZXIgYXBwZW5kaW5nIHRvIHRoZSBncmFwaC4gSW4gdGhv
c2Ugc3dpdGNoCiAgICAgICAgICAgICAgICAgLy8gY2FzZXMgd2hlcmUgd2UgbmVlZCB0byBhcHBl
bmQsIHdlIGZpcnN0IGNhcmVmdWxseSBleHRyYWN0IGV2ZXJ5dGhpbmcgd2UgbmVlZAogICAgICAg
ICAgICAgICAgIC8vIGZyb20gdGhlIG5vZGUsIGJlZm9yZSBkb2luZyBhbnkgYXBwZW5kaW5nLgot
ICAgICAgICAgICAgICAgIGlmICghbm9kZS5zaG91bGRHZW5lcmF0ZSgpKQorICAgICAgICAgICAg
ICAgIGlmICghbm9kZS0+c2hvdWxkR2VuZXJhdGUoKSkKICAgICAgICAgICAgICAgICAgICAgY29u
dGludWU7Ci0gICAgICAgICAgICAgICAgc3dpdGNoIChub2RlLm9wKCkpIHsKKyAgICAgICAgICAg
ICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKICAgICAgICAgICAgICAgICBjYXNlIFNldEFyZ3Vt
ZW50OiB7CiAgICAgICAgICAgICAgICAgICAgIEFTU0VSVCghYmxvY2tJbmRleCk7CiAgICAgICAg
ICAgICAgICAgICAgIC8vIEluc2VydCBhIEdldExvY2FsIGFuZCBhIENoZWNrU3RydWN0dXJlIGlt
bWVkaWF0ZWx5IGZvbGxvd2luZyB0aGlzCiAgICAgICAgICAgICAgICAgICAgIC8vIFNldEFyZ3Vt
ZW50LCBpZiB0aGUgdmFyaWFibGUgd2FzIGEgY2FuZGlkYXRlIGZvciBzdHJ1Y3R1cmUgaG9pc3Rp
bmcuCiAgICAgICAgICAgICAgICAgICAgIC8vIElmIHRoZSBiYXNpYyBibG9jayBwcmV2aW91c2x5
IG9ubHkgaGFkIHRoZSBTZXRBcmd1bWVudCBhcyBpdHMKICAgICAgICAgICAgICAgICAgICAgLy8g
dmFyaWFibGUtYXQtdGFpbCwgdGhlbiByZXBsYWNlIGl0IHdpdGggdGhpcyBHZXRMb2NhbC4KLSAg
ICAgICAgICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG5vZGUudmFy
aWFibGVBY2Nlc3NEYXRhKCk7CisgICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0
YSogdmFyaWFibGUgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKICAgICAgICAgICAgICAg
ICAgICAgSGFzaE1hcDxWYXJpYWJsZUFjY2Vzc0RhdGEqLCBDaGVja0RhdGE+OjppdGVyYXRvciBp
dGVyID0gbV9tYXAuZmluZCh2YXJpYWJsZSk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChpdGVy
ID09IG1fbWFwLmVuZCgpKQogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICAgICAgICAgIGlmICghaXRlci0+dmFsdWUubV9zdHJ1Y3R1cmUpCiAgICAgICAgICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAg
ICAgIENvZGVPcmlnaW4gY29kZU9yaWdpbiA9IG5vZGUuY29kZU9yaWdpbjsKKyAgICAgICAgICAg
ICAgICAgICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2luID0gbm9kZS0+Y29kZU9yaWdpbjsKICAgICAg
ICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIE5vZGVJbmRleCBnZXRMb2NhbElu
ZGV4ID0gaW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCisgICAgICAgICAgICAgICAgICAgIE5vZGUq
IGdldExvY2FsID0gaW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCiAgICAgICAgICAgICAgICAgICAg
ICAgICBpbmRleEluQmxvY2sgKyAxLCBEb250UmVmQ2hpbGRyZW4sIERvbnRSZWZOb2RlLCB2YXJp
YWJsZS0+cHJlZGljdGlvbigpLAotICAgICAgICAgICAgICAgICAgICAgICAgR2V0TG9jYWwsIGNv
ZGVPcmlnaW4sIE9wSW5mbyh2YXJpYWJsZSksIG5vZGVJbmRleCk7CisgICAgICAgICAgICAgICAg
ICAgICAgICBHZXRMb2NhbCwgY29kZU9yaWdpbiwgT3BJbmZvKHZhcmlhYmxlKSwgbm9kZSk7CiAg
ICAgICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnROb2RlKAogICAgICAgICAgICAg
ICAgICAgICAgICAgaW5kZXhJbkJsb2NrICsgMSwgUmVmQ2hpbGRyZW4sIERvbnRSZWZOb2RlLCBT
cGVjTm9uZSwgQ2hlY2tTdHJ1Y3R1cmUsCiAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlT3Jp
Z2luLCBPcEluZm8obV9ncmFwaC5hZGRTdHJ1Y3R1cmVTZXQoaXRlci0+dmFsdWUubV9zdHJ1Y3R1
cmUpKSwKICAgICAgICAgICAgICAgICAgICAgICAgIGdldExvY2FsSW5kZXgpOwogCi0gICAgICAg
ICAgICAgICAgICAgIGlmIChibG9jay0+dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQodmFyaWFibGUt
PmxvY2FsKCkpID09IG5vZGVJbmRleCkKLSAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrLT52
YXJpYWJsZXNBdFRhaWwub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkgPSBnZXRMb2NhbEluZGV4
OworICAgICAgICAgICAgICAgICAgICBpZiAoYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5k
KHZhcmlhYmxlLT5sb2NhbCgpKSA9PSBub2RlKQorICAgICAgICAgICAgICAgICAgICAgICAgYmxv
Y2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSA9IGdldExvY2Fs
OwogICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5zdWJz
dGl0dXRlR2V0TG9jYWwoKmJsb2NrLCBpbmRleEluQmxvY2ssIHZhcmlhYmxlLCBnZXRMb2NhbElu
ZGV4KTsKKyAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5zdWJzdGl0dXRlR2V0TG9jYWwoKmJs
b2NrLCBpbmRleEluQmxvY2ssIHZhcmlhYmxlLCBnZXRMb2NhbCk7CiAgICAgICAgICAgICAgICAg
ICAgIAogICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAKICAg
ICAgICAgICAgICAgICBjYXNlIFNldExvY2FsOiB7Ci0gICAgICAgICAgICAgICAgICAgIFZhcmlh
YmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBub2RlLnZhcmlhYmxlQWNjZXNzRGF0YSgpOworICAg
ICAgICAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbm9kZS0+dmFy
aWFibGVBY2Nlc3NEYXRhKCk7CiAgICAgICAgICAgICAgICAgICAgIEhhc2hNYXA8VmFyaWFibGVB
Y2Nlc3NEYXRhKiwgQ2hlY2tEYXRhPjo6aXRlcmF0b3IgaXRlciA9IG1fbWFwLmZpbmQodmFyaWFi
bGUpOwogICAgICAgICAgICAgICAgICAgICBpZiAoaXRlciA9PSBtX21hcC5lbmQoKSkKICAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMzE3LDggKzMxNCw4IEBAIHB1YmxpYzoKICAg
ICAgICAgICAgICAgICAgICAgLy8gYmUgZHJvcHBlZCBpbnRvIHRoaXMgYnl0ZWNvZGUgdmFyaWFi
bGUgaWYgdGhlIENoZWNrU3RydWN0dXJlIGRlY2lkZXMKICAgICAgICAgICAgICAgICAgICAgLy8g
dG8gZXhpdC4KICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIENvZGVP
cmlnaW4gY29kZU9yaWdpbiA9IG5vZGUuY29kZU9yaWdpbjsKLSAgICAgICAgICAgICAgICAgICAg
Tm9kZUluZGV4IGNoaWxkMSA9IG5vZGUuY2hpbGQxKCkuaW5kZXgoKTsKKyAgICAgICAgICAgICAg
ICAgICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2luID0gbm9kZS0+Y29kZU9yaWdpbjsKKyAgICAgICAg
ICAgICAgICAgICAgTm9kZSogY2hpbGQxID0gbm9kZS0+Y2hpbGQxKCkubm9kZSgpOwogICAgICAg
ICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydE5v
ZGUoCiAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleEluQmxvY2ssIERvbnRSZWZDaGlsZHJl
biwgRG9udFJlZk5vZGUsIFNwZWNOb25lLCBTZXRMb2NhbCwgY29kZU9yaWdpbiwKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsaWRhdGUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsaWRhdGUuY3BwCShyZXZpc2lvbiAxNDAzMDYp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbGlkYXRlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtODAsNDAgKzgwLDQzIEBAIHB1YmxpYzoKICAgICAgICAgLy8gVmFsaWRhdGUgdGhh
dCBhbGwgbG9jYWwgdmFyaWFibGVzIGF0IHRoZSBoZWFkIG9mIHRoZSByb290IGJsb2NrIGFyZSBk
ZWFkLgogICAgICAgICBCYXNpY0Jsb2NrKiByb290ID0gbV9ncmFwaC5tX2Jsb2Nrc1swXS5nZXQo
KTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHJvb3QtPnZhcmlhYmxlc0F0SGVh
ZC5udW1iZXJPZkxvY2FscygpOyArK2kpCi0gICAgICAgICAgICBWX0VRVUFMKChzdGF0aWNfY2Fz
dDxWaXJ0dWFsUmVnaXN0ZXI+KGkpLCAwKSwgTm9Ob2RlLCByb290LT52YXJpYWJsZXNBdEhlYWQu
bG9jYWwoaSkpOworICAgICAgICAgICAgVl9FUVVBTCgoc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lz
dGVyPihpKSwgMCksIDAsIHJvb3QtPnZhcmlhYmxlc0F0SGVhZC5sb2NhbChpKSk7CiAgICAgICAg
IAogICAgICAgICAvLyBWYWxpZGF0ZSByZWYgY291bnRzIGFuZCB1c2VzLgotICAgICAgICBWZWN0
b3I8dW5zaWduZWQ+IG15UmVmQ291bnRzOwotICAgICAgICBteVJlZkNvdW50cy5maWxsKDAsIG1f
Z3JhcGguc2l6ZSgpKTsKLSAgICAgICAgQml0VmVjdG9yIGFjY2VwdGFibGVOb2RlSW5kaWNlczsK
KyAgICAgICAgSGFzaE1hcDxOb2RlKiwgdW5zaWduZWQ+IG15UmVmQ291bnRzOwogICAgICAgICBm
b3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2dyYXBoLm1fYmxv
Y2tzLnNpemUoKTsgKytibG9ja0luZGV4KSB7CiAgICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9j
ayA9IG1fZ3JhcGgubV9ibG9ja3NbYmxvY2tJbmRleF0uZ2V0KCk7Ci0gICAgICAgICAgICBpZiAo
IWJsb2NrKQorICAgICAgICAgICAgaWYgKCFibG9jayB8fCAhYmxvY2stPmlzUmVhY2hhYmxlKQog
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgaWYgKCFibG9jay0+aXNSZWFj
aGFibGUpCisgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGJsb2NrLT5udW1Ob2Rl
cygpOyArK2kpCisgICAgICAgICAgICAgICAgbXlSZWZDb3VudHMuYWRkKGJsb2NrLT5ub2RlKGkp
LCAwKTsKKyAgICAgICAgfQorICAgICAgICBIYXNoU2V0PE5vZGUqPiBhY2NlcHRhYmxlTm9kZXM7
CisgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8IG1f
Z3JhcGgubV9ibG9ja3Muc2l6ZSgpOyArK2Jsb2NrSW5kZXgpIHsKKyAgICAgICAgICAgIEJhc2lj
QmxvY2sqIGJsb2NrID0gbV9ncmFwaC5tX2Jsb2Nrc1tibG9ja0luZGV4XS5nZXQoKTsKKyAgICAg
ICAgICAgIGlmICghYmxvY2sgfHwgIWJsb2NrLT5pc1JlYWNoYWJsZSkKICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYmxvY2stPm51
bU5vZGVzKCk7ICsraSkgewotICAgICAgICAgICAgICAgIE5vZGVJbmRleCBub2RlSW5kZXggPSBi
bG9jay0+bm9kZUluZGV4KGkpOwotICAgICAgICAgICAgICAgIGFjY2VwdGFibGVOb2RlSW5kaWNl
cy5zZXQobm9kZUluZGV4KTsKLSAgICAgICAgICAgICAgICBOb2RlJiBub2RlID0gbV9ncmFwaFtu
b2RlSW5kZXhdOwotICAgICAgICAgICAgICAgIGlmICghbm9kZS5zaG91bGRHZW5lcmF0ZSgpKQor
ICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+bm9kZShpKTsKKyAgICAgICAgICAg
ICAgICBhY2NlcHRhYmxlTm9kZXMuYWRkKG5vZGUpOworICAgICAgICAgICAgICAgIGlmICghbm9k
ZS0+c2hvdWxkR2VuZXJhdGUoKSkKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAg
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gMDsgaiA8IG1fZ3JhcGgubnVtQ2hpbGRyZW4o
bm9kZSk7ICsraikgewogICAgICAgICAgICAgICAgICAgICBFZGdlIGVkZ2UgPSBtX2dyYXBoLmNo
aWxkKG5vZGUsIGopOwogICAgICAgICAgICAgICAgICAgICBpZiAoIWVkZ2UpCiAgICAgICAgICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAg
ICAgICAgICAgIG15UmVmQ291bnRzW2VkZ2UuaW5kZXgoKV0rKzsKKyAgICAgICAgICAgICAgICAg
ICAgbXlSZWZDb3VudHMuZmluZChlZGdlLm5vZGUoKSktPnZhbHVlKys7CiAgICAgICAgICAgICAg
ICAgICAgIAogICAgICAgICAgICAgICAgICAgICAvLyBVbmxlc3MgSSdtIGEgRmx1c2gsIFBoYW50
b20sIEdldExvY2FsLCBvciBQaGksIG15IGNoaWxkcmVuIHNob3VsZCBoYXNSZXN1bHQoKS4KLSAg
ICAgICAgICAgICAgICAgICAgc3dpdGNoIChub2RlLm9wKCkpIHsKKyAgICAgICAgICAgICAgICAg
ICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CiAgICAgICAgICAgICAgICAgICAgIGNhc2UgRmx1c2g6
CiAgICAgICAgICAgICAgICAgICAgIGNhc2UgUGhhbnRvbToKICAgICAgICAgICAgICAgICAgICAg
Y2FzZSBHZXRMb2NhbDoKICAgICAgICAgICAgICAgICAgICAgY2FzZSBQaGk6CiAgICAgICAgICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAg
ICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChub2RlSW5kZXgsIGVkZ2UpLCBtX2dyYXBoW2Vk
Z2VdLmhhc1Jlc3VsdCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChub2Rl
LCBlZGdlKSwgZWRnZS0+aGFzUmVzdWx0KCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CkBAIC0xMjEsNTQg
KzEyNCw1MCBAQCBwdWJsaWM6CiAgICAgICAgIH0KICAgICAgICAgZm9yIChCbG9ja0luZGV4IGJs
b2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9ncmFwaC5tX2Jsb2Nrcy5zaXplKCk7ICsrYmxv
Y2tJbmRleCkgewogICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLm1fYmxv
Y2tzW2Jsb2NrSW5kZXhdLmdldCgpOwotICAgICAgICAgICAgaWYgKCFibG9jaykKLSAgICAgICAg
ICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGlmICghYmxvY2stPmlzUmVhY2hhYmxlKQor
ICAgICAgICAgICAgaWYgKCFibG9jayB8fCAhYmxvY2stPmlzUmVhY2hhYmxlKQogICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBCaXRWZWN0b3IgcGhp
c0luVGhpc0Jsb2NrOwotICAgICAgICAgICAgQml0VmVjdG9yIG5vZGVzSW5UaGlzQmxvY2s7Cisg
ICAgICAgICAgICBIYXNoU2V0PE5vZGUqPiBwaGlzSW5UaGlzQmxvY2s7CisgICAgICAgICAgICBI
YXNoU2V0PE5vZGUqPiBub2Rlc0luVGhpc0Jsb2NrOwogICAgICAgICAgICAgCiAgICAgICAgICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGJsb2NrLT5udW1Ob2RlcygpOyArK2kpIHsKLSAgICAg
ICAgICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4ID0gYmxvY2stPm5vZGVJbmRleChpKTsKLSAg
ICAgICAgICAgICAgICBOb2RlJiBub2RlID0gbV9ncmFwaFtub2RlSW5kZXhdOwotICAgICAgICAg
ICAgICAgIG5vZGVzSW5UaGlzQmxvY2suc2V0KG5vZGVJbmRleCk7CisgICAgICAgICAgICAgICAg
Tm9kZSogbm9kZSA9IGJsb2NrLT5ub2RlKGkpOworICAgICAgICAgICAgICAgIG5vZGVzSW5UaGlz
QmxvY2suYWRkKG5vZGUpOwogICAgICAgICAgICAgICAgIGlmIChibG9jay0+aXNQaGlJbmRleChp
KSkKLSAgICAgICAgICAgICAgICAgICAgcGhpc0luVGhpc0Jsb2NrLnNldChub2RlSW5kZXgpOwot
ICAgICAgICAgICAgICAgIFZfRVFVQUwoKG5vZGVJbmRleCksIG15UmVmQ291bnRzW25vZGVJbmRl
eF0sIG5vZGUuYWRqdXN0ZWRSZWZDb3VudCgpKTsKKyAgICAgICAgICAgICAgICAgICAgcGhpc0lu
VGhpc0Jsb2NrLmFkZChub2RlKTsKKyAgICAgICAgICAgICAgICBWX0VRVUFMKChub2RlKSwgbXlS
ZWZDb3VudHMuZ2V0KG5vZGVJbmRleCksIG5vZGUuYWRqdXN0ZWRSZWZDb3VudCgpKTsKICAgICAg
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSAwOyBqIDwgbV9ncmFwaC5udW1DaGlsZHJlbihu
b2RlKTsgKytqKSB7CiAgICAgICAgICAgICAgICAgICAgIEVkZ2UgZWRnZSA9IG1fZ3JhcGguY2hp
bGQobm9kZSwgaik7CiAgICAgICAgICAgICAgICAgICAgIGlmICghZWRnZSkKICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgobm9k
ZUluZGV4LCBlZGdlKSwgYWNjZXB0YWJsZU5vZGVJbmRpY2VzLmdldChlZGdlLmluZGV4KCkpKTsK
KyAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKG5vZGUsIGVkZ2UpLCBhY2NlcHRhYmxlTm9k
ZUluZGljZXMuY29udGFpbnMoZWRnZS5ub2RlKCkpKTsKICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgYmxvY2stPnBoaXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgICAgICBOb2RlSW5kZXgg
bm9kZUluZGV4ID0gYmxvY2stPnBoaXNbaV07Ci0gICAgICAgICAgICAgICAgTm9kZSYgbm9kZSA9
IG1fZ3JhcGhbbm9kZUluZGV4XTsKLSAgICAgICAgICAgICAgICBBU1NFUlQocGhpc0luVGhpc0Js
b2NrLmdldChub2RlSW5kZXgpKTsKLSAgICAgICAgICAgICAgICBWQUxJREFURSgobm9kZUluZGV4
KSwgbm9kZS5vcCgpID09IFBoaSk7Ci0gICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGxv
Y2FsID0gbm9kZS5sb2NhbCgpOworICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+
cGhpc1tpXTsKKyAgICAgICAgICAgICAgICBBU1NFUlQocGhpc0luVGhpc0Jsb2NrLmNvbnRhaW5z
KG5vZGUpKTsKKyAgICAgICAgICAgICAgICBWQUxJREFURSgobm9kZSksIG5vZGUtPm9wKCkgPT0g
UGhpKTsKKyAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgbG9jYWwgPSBub2RlLT5sb2Nh
bCgpOwogICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IDA7IGogPCBtX2dyYXBoLm51
bUNoaWxkcmVuKG5vZGUpOyArK2opIHsKICAgICAgICAgICAgICAgICAgICAgRWRnZSBlZGdlID0g
bV9ncmFwaC5jaGlsZChub2RlLCBqKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKCFlZGdlKQog
ICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgICAgIAot
ICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgobm9kZUluZGV4LCBlZGdlKSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaFtlZGdlXS5vcCgpID09IFNldExvY2FsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHx8IG1fZ3JhcGhbZWRnZV0ub3AoKSA9PSBTZXRBcmd1
bWVudAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBtX2dyYXBoW2VkZ2VdLm9wKCkg
PT0gRmx1c2gKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgbV9ncmFwaFtlZGdlXS5v
cCgpID09IFBoaSk7CisgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChub2RlLCBlZGdlKSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWRnZS0+b3AoKSA9PSBTZXRMb2NhbAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBlZGdlLT5vcCgpID09IFNldEFyZ3VtZW50Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IGVkZ2UtPm9wKCkgPT0gRmx1c2gKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfHwgZWRnZS0+b3AoKSA9PSBQaGkpOwogICAgICAgICAg
ICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgaWYgKHBoaXNJblRoaXNCbG9jay5nZXQo
ZWRnZS5pbmRleCgpKSkKKyAgICAgICAgICAgICAgICAgICAgaWYgKHBoaXNJblRoaXNCbG9jay5j
b250YWlucyhlZGdlLm5vZGUoKSkpCiAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsK
ICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIGlmIChub2Rlc0luVGhp
c0Jsb2NrLmdldChlZGdlLmluZGV4KCkpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBWQUxJ
REFURSgobm9kZUluZGV4LCBlZGdlKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG1fZ3JhcGhbZWRnZV0ub3AoKSA9PSBTZXRMb2NhbAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfHwgbV9ncmFwaFtlZGdlXS5vcCgpID09IFNldEFyZ3VtZW50Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB8fCBtX2dyYXBoW2VkZ2VdLm9wKCkgPT0gRmx1c2gpOwor
ICAgICAgICAgICAgICAgICAgICBpZiAobm9kZXNJblRoaXNCbG9jay5jb250YWlucyhlZGdlLm5v
ZGUoKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChub2RlLCBlZGdlKSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVkZ2UtPm9wKCkgPT0gU2V0TG9jYWwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IGVkZ2UtPm9wKCkgPT0gU2V0QXJn
dW1lbnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IGVkZ2UtPm9wKCkgPT0g
Rmx1c2gpOwogICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICAgfQpAQCAtMTgwLDMzICsxNzksMzAgQEAg
cHVibGljOgogICAgICAgICAgICAgICAgICAgICAgICAgQmFzaWNCbG9jayogcHJldkJsb2NrID0g
bV9ncmFwaC5tX2Jsb2Nrc1tibG9jay0+bV9wcmVkZWNlc3NvcnNba11dLmdldCgpOwogICAgICAg
ICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKEJsb2NrLCBibG9jay0+bV9wcmVkZWNlc3NvcnNb
a10pLCBwcmV2QmxvY2spOwogICAgICAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKEJsb2Nr
LCBibG9jay0+bV9wcmVkZWNlc3NvcnNba10pLCBwcmV2QmxvY2stPmlzUmVhY2hhYmxlKTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIE5vZGVJbmRleCBwcmV2Tm9kZUluZGV4ID0gcHJldkJsb2Nr
LT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZChsb2NhbCk7CisgICAgICAgICAgICAgICAgICAgICAg
ICBOb2RlKiBwcmV2Tm9kZSA9IHByZXZCbG9jay0+dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQobG9j
YWwpOwogICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgd2UgaGF2ZSBhIFBoaSB0aGF0IGlz
IG5vdCByZWZlcnJpbmcgdG8gKnRoaXMqIGJsb2NrIHRoZW4gYWxsIHByZWRlY2Vzc29ycwogICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gbXVzdCBoYXZlIHRoYXQgbG9jYWwgYXZhaWxhYmxlLgot
ICAgICAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKGxvY2FsLCBibG9ja0luZGV4LCBCbG9j
aywgYmxvY2stPm1fcHJlZGVjZXNzb3JzW2tdKSwgcHJldk5vZGVJbmRleCAhPSBOb05vZGUpOwot
ICAgICAgICAgICAgICAgICAgICAgICAgTm9kZSogcHJldk5vZGUgPSAmbV9ncmFwaFtwcmV2Tm9k
ZUluZGV4XTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcmV2Tm9kZS0+b3AoKSA9PSBH
ZXRMb2NhbCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXZOb2RlSW5kZXggPSBw
cmV2Tm9kZS0+Y2hpbGQxKCkuaW5kZXgoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBw
cmV2Tm9kZSA9ICZtX2dyYXBoW3ByZXZOb2RlSW5kZXhdOwotICAgICAgICAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUuc2hvdWxkR2VuZXJhdGUoKSkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChsb2NhbCwgYmxvY2stPm1f
cHJlZGVjZXNzb3JzW2tdLCBwcmV2Tm9kZUluZGV4KSwKKyAgICAgICAgICAgICAgICAgICAgICAg
IFZBTElEQVRFKChsb2NhbCwgYmxvY2tJbmRleCwgQmxvY2ssIGJsb2NrLT5tX3ByZWRlY2Vzc29y
c1trXSksIHByZXZOb2RlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcmV2Tm9kZS0+
b3AoKSA9PSBHZXRMb2NhbCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2Tm9kZSA9
IHByZXZOb2RlLT5jaGlsZDEoKS5ub2RlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
bm9kZS0+c2hvdWxkR2VuZXJhdGUoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZB
TElEQVRFKChsb2NhbCwgYmxvY2stPm1fcHJlZGVjZXNzb3JzW2tdLCBwcmV2Tm9kZSksCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldk5vZGUtPnNob3VsZEdlbmVyYXRl
KCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAg
VkFMSURBVEUoKGxvY2FsLCBibG9jay0+bV9wcmVkZWNlc3NvcnNba10sIHByZXZOb2RlSW5kZXgp
LAorICAgICAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKGxvY2FsLCBibG9jay0+bV9wcmVk
ZWNlc3NvcnNba10sIHByZXZOb2RlKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHByZXZOb2RlLT5vcCgpID09IFNldExvY2FsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB8fCBwcmV2Tm9kZS0+b3AoKSA9PSBTZXRBcmd1bWVudAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfHwgcHJldk5vZGUtPm9wKCkgPT0gRmx1c2gKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHx8IHByZXZOb2RlLT5vcCgpID09IFBoaSk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBpZiAocHJldk5vZGVJbmRleCA9PSBlZGdlLmluZGV4KCkpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChwcmV2Tm9kZSA9PSBlZGdlLm5vZGUoKSkgewogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIEF0IHRoaXMgcG9pbnQgaXQgY2Fubm90IHJlZmVyIGludG8gdGhpcyBibG9j
ay4KLSAgICAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChsb2NhbCwgYmxvY2stPm1fcHJl
ZGVjZXNzb3JzW2tdLCBwcmV2Tm9kZUluZGV4KSwgIXByZXZCbG9jay0+aXNJbkJsb2NrKGVkZ2Uu
aW5kZXgoKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKGxvY2FsLCBibG9j
ay0+bV9wcmVkZWNlc3NvcnNba10sIHByZXZOb2RlKSwgIXByZXZCbG9jay0+aXNJbkJsb2NrKGVk
Z2Uubm9kZSgpKSk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAg
Ci0gICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChub2RlSW5kZXgsIGVkZ2UpLCBmb3VuZCk7
CisgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChub2RlLCBlZGdlKSwgZm91bmQpOwogICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIApAQCAtMjI3LDM0ICsy
MjMsMzMgQEAgcHVibGljOgogICAgICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGJsb2NrLT5zaXplKCk7ICsraSkgewotICAgICAgICAg
ICAgICAgIE5vZGVJbmRleCBub2RlSW5kZXggPSBibG9jay0+YXQoaSk7Ci0gICAgICAgICAgICAg
ICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhbbm9kZUluZGV4XTsKLSAgICAgICAgICAgICAgICBBU1NF
UlQobm9kZXNJblRoaXNCbG9jay5nZXQobm9kZUluZGV4KSk7Ci0gICAgICAgICAgICAgICAgVkFM
SURBVEUoKG5vZGVJbmRleCksIG5vZGUub3AoKSAhPSBQaGkpOworICAgICAgICAgICAgICAgIE5v
ZGUqIG5vZGUgPSBibG9jay0+YXQoaSk7CisgICAgICAgICAgICAgICAgQVNTRVJUKG5vZGVzSW5U
aGlzQmxvY2suY29udGFpbnMobm9kZSkpOworICAgICAgICAgICAgICAgIFZBTElEQVRFKChub2Rl
KSwgbm9kZS0+b3AoKSAhPSBQaGkpOwogICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9
IDA7IGogPCBtX2dyYXBoLm51bUNoaWxkcmVuKG5vZGUpOyArK2opIHsKICAgICAgICAgICAgICAg
ICAgICAgRWRnZSBlZGdlID0gbV9ncmFwaC5jaGlsZChub2RlLCBqKTsKICAgICAgICAgICAgICAg
ICAgICAgaWYgKCFlZGdlKQogICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgICAgICAgICAgICAgIFZBTElEQVRFKChub2RlSW5kZXgsIGVkZ2UpLCBub2Rlc0luVGhpc0Js
b2NrLmdldChub2RlSW5kZXgpKTsKKyAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKG5vZGUs
IGVkZ2UpLCBub2Rlc0luVGhpc0Jsb2NrLmNvbnRhaW5zKGVkZ2Uubm9kZSgpKSk7CiAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGlmICghbm9kZS5z
aG91bGRHZW5lcmF0ZSgpKQorICAgICAgICAgICAgICAgIGlmICghbm9kZS0+c2hvdWxkR2VuZXJh
dGUoKSkKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgc3dp
dGNoIChub2RlLm9wKCkpIHsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsK
ICAgICAgICAgICAgICAgICBjYXNlIEdldExvY2FsOgotICAgICAgICAgICAgICAgICAgICBpZiAo
bm9kZS52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+aXNDYXB0dXJlZCgpKQorICAgICAgICAgICAgICAg
ICAgICBpZiAobm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCktPmlzQ2FwdHVyZWQoKSkKICAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgo
bm9kZUluZGV4LCBibG9ja0luZGV4KSwgZ2V0TG9jYWxQb3NpdGlvbnMub3BlcmFuZChub2RlLmxv
Y2FsKCkpID09IG5vdFNldCk7Ci0gICAgICAgICAgICAgICAgICAgIGdldExvY2FsUG9zaXRpb25z
Lm9wZXJhbmQobm9kZS5sb2NhbCgpKSA9IGk7CisgICAgICAgICAgICAgICAgICAgIFZBTElEQVRF
KChub2RlLCBibG9ja0luZGV4KSwgZ2V0TG9jYWxQb3NpdGlvbnMub3BlcmFuZChub2RlLT5sb2Nh
bCgpKSA9PSBub3RTZXQpOworICAgICAgICAgICAgICAgICAgICBnZXRMb2NhbFBvc2l0aW9ucy5v
cGVyYW5kKG5vZGUtPmxvY2FsKCkpID0gaTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICAgICAgY2FzZSBTZXRMb2NhbDoKLSAgICAgICAgICAgICAgICAgICAgaWYgKG5v
ZGUudmFyaWFibGVBY2Nlc3NEYXRhKCktPmlzQ2FwdHVyZWQoKSkKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5pc0NhcHR1cmVkKCkpCiAgICAgICAg
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgLy8gT25seSByZWNv
cmQgdGhlIGZpcnN0IFNldExvY2FsLiBUaGVyZSBtYXkgYmUgbXVsdGlwbGUgU2V0TG9jYWxzCiAg
ICAgICAgICAgICAgICAgICAgIC8vIGJlY2F1c2Ugb2YgZmx1c2hpbmcuCi0gICAgICAgICAgICAg
ICAgICAgIGlmIChzZXRMb2NhbFBvc2l0aW9ucy5vcGVyYW5kKG5vZGUubG9jYWwoKSkgIT0gbm90
U2V0KQorICAgICAgICAgICAgICAgICAgICBpZiAoc2V0TG9jYWxQb3NpdGlvbnMub3BlcmFuZChu
b2RlLT5sb2NhbCgpKSAhPSBub3RTZXQpCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgICAgICAgICAgc2V0TG9jYWxQb3NpdGlvbnMub3BlcmFuZChub2RlLmxvY2Fs
KCkpID0gaTsKKyAgICAgICAgICAgICAgICAgICAgc2V0TG9jYWxQb3NpdGlvbnMub3BlcmFuZChu
b2RlLT5sb2NhbCgpKSA9IGk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMjk0LDkgKzI4
OSw5IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBnZXRMb2NhbFBvc2l0aW9ucy5vcGVyYW5kKG9w
ZXJhbmQpIDwgc2V0TG9jYWxQb3NpdGlvbnMub3BlcmFuZChvcGVyYW5kKSk7CiAgICAgfQogICAg
IAotICAgIHZvaWQgcmVwb3J0VmFsaWRhdGlvbkNvbnRleHQoTm9kZUluZGV4IG5vZGVJbmRleCkK
KyAgICB2b2lkIHJlcG9ydFZhbGlkYXRpb25Db250ZXh0KE5vZGUqIG5vZGUpCiAgICAgewotICAg
ICAgICBkYXRhTG9nRigiQCV1Iiwgbm9kZUluZGV4KTsKKyAgICAgICAgZGF0YUxvZ0YoIkAldSIs
IG5vZGUtPmluZGV4KCkpOwogICAgIH0KICAgICAKICAgICBlbnVtIEJsb2NrVGFnIHsgQmxvY2sg
fTsKQEAgLTMwNSw5ICszMDAsOSBAQCBwcml2YXRlOgogICAgICAgICBkYXRhTG9nRigiQmxvY2sg
IyV1IiwgYmxvY2tJbmRleCk7CiAgICAgfQogICAgIAotICAgIHZvaWQgcmVwb3J0VmFsaWRhdGlv
bkNvbnRleHQoTm9kZUluZGV4IG5vZGVJbmRleCwgRWRnZSBlZGdlKQorICAgIHZvaWQgcmVwb3J0
VmFsaWRhdGlvbkNvbnRleHQoTm9kZSogbm9kZSwgRWRnZSBlZGdlKQogICAgIHsKLSAgICAgICAg
ZGF0YUxvZ0YoIkAldSAtPiAlc0AldSIsIG5vZGVJbmRleCwgdXNlS2luZFRvU3RyaW5nKGVkZ2Uu
dXNlS2luZCgpKSwgZWRnZS5pbmRleCgpKTsKKyAgICAgICAgZGF0YUxvZ0YoIkAldSAtPiAlc0Al
dSIsIG5vZGUtPmluZGV4KCksIHVzZUtpbmRUb1N0cmluZyhlZGdlLnVzZUtpbmQoKSksIGVkZ2Uu
aW5kZXgoKSk7CiAgICAgfQogICAgIAogICAgIHZvaWQgcmVwb3J0VmFsaWRhdGlvbkNvbnRleHQo
VmlydHVhbFJlZ2lzdGVyIGxvY2FsLCBCbG9ja0luZGV4IGJsb2NrSW5kZXgpCkBAIC0zMjIsMjcg
KzMxNywyNyBAQCBwcml2YXRlOgogICAgIH0KICAgICAKICAgICB2b2lkIHJlcG9ydFZhbGlkYXRp
b25Db250ZXh0KAotICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgbG9jYWwsIEJsb2NrSW5kZXggc291
cmNlQmxvY2tJbmRleCwgTm9kZUluZGV4IHByZXZOb2RlSW5kZXgpCisgICAgICAgIFZpcnR1YWxS
ZWdpc3RlciBsb2NhbCwgQmxvY2tJbmRleCBzb3VyY2VCbG9ja0luZGV4LCBOb2RlKiBwcmV2Tm9k
ZSkKICAgICB7Ci0gICAgICAgIGRhdGFMb2dGKCJAJXUgZm9yIHIlZCBpbiBCbG9jayAjJXUiLCBw
cmV2Tm9kZUluZGV4LCBsb2NhbCwgc291cmNlQmxvY2tJbmRleCk7CisgICAgICAgIGRhdGFMb2dG
KCJAJXUgZm9yIHIlZCBpbiBCbG9jayAjJXUiLCBwcmV2Tm9kZS0+aW5kZXgoKSwgbG9jYWwsIHNv
dXJjZUJsb2NrSW5kZXgpOwogICAgIH0KICAgICAKICAgICB2b2lkIHJlcG9ydFZhbGlkYXRpb25D
b250ZXh0KAotICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4LCBCbG9ja0luZGV4IGJsb2NrSW5k
ZXgpCisgICAgICAgIE5vZGUqIG5vZGUsIEJsb2NrSW5kZXggYmxvY2tJbmRleCkKICAgICB7Ci0g
ICAgICAgIGRhdGFMb2dGKCJAJXUgaW4gQmxvY2sgIyV1Iiwgbm9kZUluZGV4LCBibG9ja0luZGV4
KTsKKyAgICAgICAgZGF0YUxvZ0YoIkAldSBpbiBCbG9jayAjJXUiLCBub2RlLT5pbmRleCgpLCBi
bG9ja0luZGV4KTsKICAgICB9CiAgICAgCiAgICAgdm9pZCByZXBvcnRWYWxpZGF0aW9uQ29udGV4
dCgKLSAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRleCwgTm9kZUluZGV4IG5vZGVJbmRleDIsIEJs
b2NrSW5kZXggYmxvY2tJbmRleCkKKyAgICAgICAgTm9kZSogbm9kZSwgTm9kZSogbm9kZTIsIEJs
b2NrSW5kZXggYmxvY2tJbmRleCkKICAgICB7Ci0gICAgICAgIGRhdGFMb2dGKCJAJXUgYW5kIEAl
dSBpbiBCbG9jayAjJXUiLCBub2RlSW5kZXgsIG5vZGVJbmRleDIsIGJsb2NrSW5kZXgpOworICAg
ICAgICBkYXRhTG9nRigiQCV1IGFuZCBAJXUgaW4gQmxvY2sgIyV1Iiwgbm9kZS0+aW5kZXgoKSwg
bm9kZTItPmluZGV4KCksIGJsb2NrSW5kZXgpOwogICAgIH0KICAgICAKICAgICB2b2lkIHJlcG9y
dFZhbGlkYXRpb25Db250ZXh0KAotICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4LCBCbG9ja0lu
ZGV4IGJsb2NrSW5kZXgsIE5vZGVJbmRleCBleHBlY3RlZE5vZGVJbmRleCwgRWRnZSBpbmNvbWlu
Z0VkZ2UpCisgICAgICAgIE5vZGUqIG5vZGUsIEJsb2NrSW5kZXggYmxvY2tJbmRleCwgTm9kZSog
ZXhwZWN0ZWROb2RlLCBFZGdlIGluY29taW5nRWRnZSkKICAgICB7Ci0gICAgICAgIGRhdGFMb2dG
KCJAJXUgaW4gQmxvY2sgIyV1LCBzZWFyY2hpbmcgZm9yIEAldSBmcm9tIEAldSIsIG5vZGVJbmRl
eCwgYmxvY2tJbmRleCwgZXhwZWN0ZWROb2RlSW5kZXgsIGluY29taW5nRWRnZS5pbmRleCgpKTsK
KyAgICAgICAgZGF0YUxvZ0YoIkAldSBpbiBCbG9jayAjJXUsIHNlYXJjaGluZyBmb3IgQCV1IGZy
b20gQCV1Iiwgbm9kZS0+aW5kZXgoKSwgYmxvY2tJbmRleCwgZXhwZWN0ZWROb2RlLT5pbmRleCgp
LCBpbmNvbWluZ0VkZ2UuaW5kZXgoKSk7CiAgICAgfQogICAgIAogICAgIHZvaWQgZHVtcERhdGEo
dW5zaWduZWQgdmFsdWUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ds
b2JhbERhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTR2xvYmFsRGF0YS5jcHAJKHJldmlzaW9uIDE0MDMwNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMy
LDcgQEAKICNpbmNsdWRlICJBcmdMaXN0LmgiCiAjaW5jbHVkZSAiQ29kZUNhY2hlLmgiCiAjaW5j
bHVkZSAiQ29tbW9uSWRlbnRpZmllcnMuaCIKKyNpbmNsdWRlICJERkdMb25nTGl2ZWRTdGF0ZS5o
IgogI2luY2x1ZGUgIkRlYnVnZ2VyQWN0aXZhdGlvbi5oIgogI2luY2x1ZGUgIkZ1bmN0aW9uQ29u
c3RydWN0b3IuaCIKICNpbmNsdWRlICJHQ0FjdGl2aXR5Q2FsbGJhY2suaCIKQEAgLTI1MSw2ICsy
NTIsMTEgQEAgSlNHbG9iYWxEYXRhOjpKU0dsb2JhbERhdGEoR2xvYmFsRGF0YVR5cAogICAgIAog
ICAgIGlmIChPcHRpb25zOjplbmFibGVQcm9maWxlcigpKQogICAgICAgICBtX3BlckJ5dGVjb2Rl
UHJvZmlsZXIgPSBhZG9wdFB0cihuZXcgUHJvZmlsZXI6OkRhdGFiYXNlKCp0aGlzKSk7CisKKyNp
ZiBFTkFCTEUoREZHX0pJVCkKKyAgICBpZiAoY2FuVXNlSklUKCkpCisgICAgICAgIG1fZGZnU3Rh
dGUgPSBhZG9wdFB0cihuZXcgREZHOjpMb25nTGl2ZWRTdGF0ZSgpKTsKKyNlbmRpZgogfQogCiBK
U0dsb2JhbERhdGE6On5KU0dsb2JhbERhdGEoKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNHbG9iYWxEYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmgJKHJldmlzaW9uIDE0MDMwNikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC05
MSw2ICs5MSwxMiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBjbGFzcyBVbmxpbmtlZEZ1bmN0aW9u
RXhlY3V0YWJsZTsKICAgICBjbGFzcyBVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2s7CiAKKyNpZiBF
TkFCTEUoREZHX0pJVCkKKyAgICBuYW1lc3BhY2UgREZHIHsKKyAgICBjbGFzcyBMb25nTGl2ZWRT
dGF0ZTsKKyAgICB9CisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKICAgICBzdHJ1Y3QgSGFz
aFRhYmxlOwogICAgIHN0cnVjdCBJbnN0cnVjdGlvbjsKIApAQCAtMTg5LDYgKzE5NSwxMCBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAgICAgLy8gVGhlIGhlYXAgc2hvdWxkIGJlIGp1c3QgYWZ0ZXIg
ZXhlY3V0YWJsZUFsbG9jYXRvciBhbmQgYmVmb3JlIG90aGVyIG1lbWJlcnMgdG8gZW5zdXJlIHRo
YXQgaXQncwogICAgICAgICAvLyBkZXN0cnVjdGVkIGFmdGVyIGFsbCB0aGUgb2JqZWN0cyB0aGF0
IHJlZmVyZW5jZSBpdC4KICAgICAgICAgSGVhcCBoZWFwOworICAgICAgICAKKyNpZiBFTkFCTEUo
REZHX0pJVCkKKyAgICAgICAgT3duUHRyPERGRzo6TG9uZ0xpdmVkU3RhdGU+IG1fZGZnU3RhdGU7
CisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCiAKICAgICAgICAgR2xvYmFsRGF0YVR5cGUgZ2xv
YmFsRGF0YVR5cGU7CiAgICAgICAgIENsaWVudERhdGEqIGNsaWVudERhdGE7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>184144</attachid>
            <date>2013-01-22 22:41:44 -0800</date>
            <delta_ts>2013-01-23 12:10:04 -0800</delta_ts>
            <desc>work in progress</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>394809</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmNw
cAkocmV2aXNpb24gMTQwNTA0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0
cmFjdFN0YXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTEsIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDExLCAyMDEyLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtODcsMjEgKzg3LDIxIEBA
IHZvaWQgQWJzdHJhY3RTdGF0ZTo6aW5pdGlhbGl6ZShHcmFwaCYgZ3IKICAgICByb290LT5jZmFI
YXNWaXNpdGVkID0gZmFsc2U7CiAgICAgcm9vdC0+Y2ZhRm91bmRDb25zdGFudHMgPSBmYWxzZTsK
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHJvb3QtPnZhbHVlc0F0SGVhZC5udW1iZXJPZkFy
Z3VtZW50cygpOyArK2kpIHsKLSAgICAgICAgTm9kZSYgbm9kZSA9IGdyYXBoW3Jvb3QtPnZhcmlh
Ymxlc0F0SGVhZC5hcmd1bWVudChpKV07Ci0gICAgICAgIEFTU0VSVChub2RlLm9wKCkgPT0gU2V0
QXJndW1lbnQpOwotICAgICAgICBpZiAoIW5vZGUuc2hvdWxkR2VuZXJhdGUoKSkgeworICAgICAg
ICBOb2RlKiBub2RlID0gcm9vdC0+dmFyaWFibGVzQXRIZWFkLmFyZ3VtZW50KGkpOworICAgICAg
ICBBU1NFUlQobm9kZS0+b3AoKSA9PSBTZXRBcmd1bWVudCk7CisgICAgICAgIGlmICghbm9kZS0+
c2hvdWxkR2VuZXJhdGUoKSkgewogICAgICAgICAgICAgLy8gVGhlIGFyZ3VtZW50IGlzIGRlYWQu
IFdlIGRvbid0IGRvIGFueSBjaGVja3MgZm9yIHN1Y2ggYXJndW1lbnRzLCBhbmQgc28KICAgICAg
ICAgICAgIC8vIGZvciB0aGUgcHVycG9zZSBvZiB0aGUgYW5hbHlzaXMsIHRoZXkgY29udGFpbiBu
byB2YWx1ZS4KICAgICAgICAgICAgIHJvb3QtPnZhbHVlc0F0SGVhZC5hcmd1bWVudChpKS5jbGVh
cigpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAg
IGlmIChub2RlLnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5pc0NhcHR1cmVkKCkpIHsKKyAgICAgICAg
aWYgKG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5pc0NhcHR1cmVkKCkpIHsKICAgICAgICAg
ICAgIHJvb3QtPnZhbHVlc0F0SGVhZC5hcmd1bWVudChpKS5tYWtlVG9wKCk7CiAgICAgICAgICAg
ICBjb250aW51ZTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgU3BlY3VsYXRlZFR5cGUg
cHJlZGljdGlvbiA9IG5vZGUudmFyaWFibGVBY2Nlc3NEYXRhKCktPnByZWRpY3Rpb24oKTsKKyAg
ICAgICAgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0
YSgpLT5wcmVkaWN0aW9uKCk7CiAgICAgICAgIGlmIChpc0ludDMyU3BlY3VsYXRpb24ocHJlZGlj
dGlvbikpCiAgICAgICAgICAgICByb290LT52YWx1ZXNBdEhlYWQuYXJndW1lbnQoaSkuc2V0KFNw
ZWNJbnQzMik7CiAgICAgICAgIGVsc2UgaWYgKGlzQm9vbGVhblNwZWN1bGF0aW9uKHByZWRpY3Rp
b24pKQpAQCAtMTE0LDggKzExNCw4IEBAIHZvaWQgQWJzdHJhY3RTdGF0ZTo6aW5pdGlhbGl6ZShH
cmFwaCYgZ3IKICAgICAgICAgcm9vdC0+dmFsdWVzQXRUYWlsLmFyZ3VtZW50KGkpLmNsZWFyKCk7
CiAgICAgfQogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcm9vdC0+dmFsdWVzQXRIZWFkLm51
bWJlck9mTG9jYWxzKCk7ICsraSkgewotICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4ID0gcm9v
dC0+dmFyaWFibGVzQXRIZWFkLmxvY2FsKGkpOwotICAgICAgICBpZiAobm9kZUluZGV4ICE9IE5v
Tm9kZSAmJiBncmFwaFtub2RlSW5kZXhdLnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5pc0NhcHR1cmVk
KCkpCisgICAgICAgIE5vZGUqIG5vZGUgPSByb290LT52YXJpYWJsZXNBdEhlYWQubG9jYWwoaSk7
CisgICAgICAgIGlmIChub2RlICYmIG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5pc0NhcHR1
cmVkKCkpCiAgICAgICAgICAgICByb290LT52YWx1ZXNBdEhlYWQubG9jYWwoaSkubWFrZVRvcCgp
OwogICAgICAgICBlbHNlCiAgICAgICAgICAgICByb290LT52YWx1ZXNBdEhlYWQubG9jYWwoaSku
Y2xlYXIoKTsKQEAgLTIxMywxMSArMjEzLDExIEBAIHZvaWQgQWJzdHJhY3RTdGF0ZTo6cmVzZXQo
KQogICAgIG1fYnJhbmNoRGlyZWN0aW9uID0gSW52YWxpZEJyYW5jaERpcmVjdGlvbjsKIH0KIAot
QWJzdHJhY3RTdGF0ZTo6Qm9vbGVhblJlc3VsdCBBYnN0cmFjdFN0YXRlOjpib29sZWFuUmVzdWx0
KE5vZGUmIG5vZGUsIEFic3RyYWN0VmFsdWUmIHZhbHVlKQorQWJzdHJhY3RTdGF0ZTo6Qm9vbGVh
blJlc3VsdCBBYnN0cmFjdFN0YXRlOjpib29sZWFuUmVzdWx0KE5vZGUqIG5vZGUsIEFic3RyYWN0
VmFsdWUmIHZhbHVlKQogewogICAgIEpTVmFsdWUgY2hpbGRDb25zdCA9IHZhbHVlLnZhbHVlKCk7
CiAgICAgaWYgKGNoaWxkQ29uc3QpIHsKLSAgICAgICAgaWYgKGNoaWxkQ29uc3QudG9Cb29sZWFu
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3RGb3Iobm9kZS5jb2RlT3JpZ2luKS0+Z2xvYmFsRXhl
YygpKSkKKyAgICAgICAgaWYgKGNoaWxkQ29uc3QudG9Cb29sZWFuKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3RGb3Iobm9kZS0+Y29kZU9yaWdpbiktPmdsb2JhbEV4ZWMoKSkpCiAgICAgICAgICAg
ICByZXR1cm4gRGVmaW5pdGVseVRydWU7CiAgICAgICAgIHJldHVybiBEZWZpbml0ZWx5RmFsc2U7
CiAgICAgfQpAQCAtMjI2LDcgKzIyNiw3IEBAIEFic3RyYWN0U3RhdGU6OkJvb2xlYW5SZXN1bHQg
QWJzdHJhY3RTdGEKICAgICBpZiAoaXNDZWxsU3BlY3VsYXRpb24odmFsdWUubV90eXBlKQogICAg
ICAgICAmJiB2YWx1ZS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5oYXNTaW5nbGV0b24oKSkgewog
ICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHZhbHVlLm1fY3VycmVudEtub3duU3RydWN0
dXJlLnNpbmdsZXRvbigpOwotICAgICAgICBpZiAoIXN0cnVjdHVyZS0+bWFzcXVlcmFkZXNBc1Vu
ZGVmaW5lZChtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0Rm9yKG5vZGUuY29kZU9yaWdpbikpCisg
ICAgICAgIGlmICghc3RydWN0dXJlLT5tYXNxdWVyYWRlc0FzVW5kZWZpbmVkKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3RGb3Iobm9kZS0+Y29kZU9yaWdpbikpCiAgICAgICAgICAgICAmJiBzdHJ1
Y3R1cmUtPnR5cGVJbmZvKCkudHlwZSgpICE9IFN0cmluZ1R5cGUpCiAgICAgICAgICAgICByZXR1
cm4gRGVmaW5pdGVseVRydWU7CiAgICAgfQpAQCAtMjQxLDMyICsyNDEsMzEgQEAgYm9vbCBBYnN0
cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgIAogICAgIG1fZGlkQ2xvYmJlciA9
IGZhbHNlOwogICAgIAotICAgIE5vZGVJbmRleCBub2RlSW5kZXggPSBtX2Jsb2NrLT5hdChpbmRl
eEluQmxvY2spOwotICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW25vZGVJbmRleF07CisgICAgTm9k
ZSogbm9kZSA9IG1fYmxvY2stPmF0KGluZGV4SW5CbG9jayk7CiAgICAgICAgIAotICAgIGlmICgh
bm9kZS5zaG91bGRHZW5lcmF0ZSgpKQorICAgIGlmICghbm9kZS0+c2hvdWxkR2VuZXJhdGUoKSkK
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIAotICAgIHN3aXRjaCAobm9kZS5vcCgpKSB7
CisgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CiAgICAgY2FzZSBKU0NvbnN0YW50OgogICAgIGNh
c2UgV2Vha0pTQ29uc3RhbnQ6CiAgICAgY2FzZSBQaGFudG9tQXJndW1lbnRzOiB7Ci0gICAgICAg
IGZvck5vZGUobm9kZUluZGV4KS5zZXQobV9ncmFwaC52YWx1ZU9mSlNDb25zdGFudChub2RlSW5k
ZXgpKTsKLSAgICAgICAgbm9kZS5zZXRDYW5FeGl0KGZhbHNlKTsKKyAgICAgICAgZm9yTm9kZShu
b2RlKS5zZXQobV9ncmFwaC52YWx1ZU9mSlNDb25zdGFudChub2RlKSk7CisgICAgICAgIG5vZGUt
PnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIAogICAg
IGNhc2UgSWRlbnRpdHk6IHsKLSAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpID0gZm9yTm9kZShu
b2RlLmNoaWxkMSgpKTsKLSAgICAgICAgbm9kZS5zZXRDYW5FeGl0KGZhbHNlKTsKKyAgICAgICAg
Zm9yTm9kZShub2RlKSA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBub2RlLT5z
ZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAgICAgCiAg
ICAgY2FzZSBHZXRMb2NhbDogewotICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxl
QWNjZXNzRGF0YSA9IG5vZGUudmFyaWFibGVBY2Nlc3NEYXRhKCk7CisgICAgICAgIFZhcmlhYmxl
QWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRh
KCk7CiAgICAgICAgIGlmICh2YXJpYWJsZUFjY2Vzc0RhdGEtPnByZWRpY3Rpb24oKSA9PSBTcGVj
Tm9uZSkgewogICAgICAgICAgICAgbV9pc1ZhbGlkID0gZmFsc2U7Ci0gICAgICAgICAgICBub2Rl
LnNldENhbkV4aXQodHJ1ZSk7CisgICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgYm9vbCBjYW5FeGl0ID0gZmFs
c2U7CkBAIC0yNzcsNTMgKzI3Niw1MyBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5z
aWduZWQgaW5kCiAgICAgICAgIH0KICAgICAgICAgaWYgKHZhbHVlLnZhbHVlKCkpCiAgICAgICAg
ICAgICBtX2ZvdW5kQ29uc3RhbnRzID0gdHJ1ZTsKLSAgICAgICAgZm9yTm9kZShub2RlSW5kZXgp
ID0gdmFsdWU7Ci0gICAgICAgIG5vZGUuc2V0Q2FuRXhpdChjYW5FeGl0KTsKKyAgICAgICAgZm9y
Tm9kZShub2RlKSA9IHZhbHVlOworICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGNhbkV4aXQpOwog
ICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgR2V0TG9jYWxVbmxpbmtl
ZDogewotICAgICAgICBBYnN0cmFjdFZhbHVlIHZhbHVlID0gbV92YXJpYWJsZXMub3BlcmFuZChu
b2RlLnVubGlua2VkTG9jYWwoKSk7CisgICAgICAgIEFic3RyYWN0VmFsdWUgdmFsdWUgPSBtX3Zh
cmlhYmxlcy5vcGVyYW5kKG5vZGUtPnVubGlua2VkTG9jYWwoKSk7CiAgICAgICAgIGlmICh2YWx1
ZS52YWx1ZSgpKQogICAgICAgICAgICAgbV9mb3VuZENvbnN0YW50cyA9IHRydWU7Ci0gICAgICAg
IGZvck5vZGUobm9kZUluZGV4KSA9IHZhbHVlOwotICAgICAgICBub2RlLnNldENhbkV4aXQoZmFs
c2UpOworICAgICAgICBmb3JOb2RlKG5vZGUpID0gdmFsdWU7CisgICAgICAgIG5vZGUtPnNldENh
bkV4aXQoZmFsc2UpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIAogICAgIGNhc2Ug
U2V0TG9jYWw6IHsKLSAgICAgICAgaWYgKG5vZGUudmFyaWFibGVBY2Nlc3NEYXRhKCktPmlzQ2Fw
dHVyZWQoKQotICAgICAgICAgICAgfHwgbV9ncmFwaC5pc0NyZWF0ZWRUaGlzQXJndW1lbnQobm9k
ZS5sb2NhbCgpKSkgewotICAgICAgICAgICAgbV92YXJpYWJsZXMub3BlcmFuZChub2RlLmxvY2Fs
KCkpID0gZm9yTm9kZShub2RlLmNoaWxkMSgpKTsKLSAgICAgICAgICAgIG5vZGUuc2V0Q2FuRXhp
dChmYWxzZSk7CisgICAgICAgIGlmIChub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+aXNDYXB0
dXJlZCgpCisgICAgICAgICAgICB8fCBtX2dyYXBoLmlzQ3JlYXRlZFRoaXNBcmd1bWVudChub2Rl
LT5sb2NhbCgpKSkgeworICAgICAgICAgICAgbV92YXJpYWJsZXMub3BlcmFuZChub2RlLT5sb2Nh
bCgpKSA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgbm9kZS0+c2V0Q2Fu
RXhpdChmYWxzZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAKLSAg
ICAgICAgaWYgKG5vZGUudmFyaWFibGVBY2Nlc3NEYXRhKCktPnNob3VsZFVzZURvdWJsZUZvcm1h
dCgpKSB7CisgICAgICAgIGlmIChub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+c2hvdWxkVXNl
RG91YmxlRm9ybWF0KCkpIHsKICAgICAgICAgICAgIHNwZWN1bGF0ZU51bWJlclVuYXJ5KG5vZGUp
OwotICAgICAgICAgICAgbV92YXJpYWJsZXMub3BlcmFuZChub2RlLmxvY2FsKCkpLnNldChTcGVj
RG91YmxlKTsKKyAgICAgICAgICAgIG1fdmFyaWFibGVzLm9wZXJhbmQobm9kZS0+bG9jYWwoKSku
c2V0KFNwZWNEb3VibGUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAg
Ci0gICAgICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3RlZFR5cGUgPSBub2RlLnZhcmlhYmxlQWNj
ZXNzRGF0YSgpLT5hcmd1bWVudEF3YXJlUHJlZGljdGlvbigpOworICAgICAgICBTcGVjdWxhdGVk
VHlwZSBwcmVkaWN0ZWRUeXBlID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCktPmFyZ3VtZW50
QXdhcmVQcmVkaWN0aW9uKCk7CiAgICAgICAgIGlmIChpc0ludDMyU3BlY3VsYXRpb24ocHJlZGlj
dGVkVHlwZSkpCiAgICAgICAgICAgICBzcGVjdWxhdGVJbnQzMlVuYXJ5KG5vZGUpOwogICAgICAg
ICBlbHNlIGlmIChpc0NlbGxTcGVjdWxhdGlvbihwcmVkaWN0ZWRUeXBlKSkgewotICAgICAgICAg
ICAgbm9kZS5zZXRDYW5FeGl0KCFpc0NlbGxTcGVjdWxhdGlvbihmb3JOb2RlKG5vZGUuY2hpbGQx
KCkpLm1fdHlwZSkpOwotICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIo
U3BlY0NlbGwpOworICAgICAgICAgICAgbm9kZS5zZXRDYW5FeGl0KCFpc0NlbGxTcGVjdWxhdGlv
bihmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX3R5cGUpKTsKKyAgICAgICAgICAgIGZvck5vZGUo
bm9kZS0+Y2hpbGQxKCkpLmZpbHRlcihTcGVjQ2VsbCk7CiAgICAgICAgIH0gZWxzZSBpZiAoaXNC
b29sZWFuU3BlY3VsYXRpb24ocHJlZGljdGVkVHlwZSkpCiAgICAgICAgICAgICBzcGVjdWxhdGVC
b29sZWFuVW5hcnkobm9kZSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIG5vZGUuc2V0Q2Fu
RXhpdChmYWxzZSk7CisgICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAg
ICAgCi0gICAgICAgIG1fdmFyaWFibGVzLm9wZXJhbmQobm9kZS5sb2NhbCgpKSA9IGZvck5vZGUo
bm9kZS5jaGlsZDEoKSk7CisgICAgICAgIG1fdmFyaWFibGVzLm9wZXJhbmQobm9kZS0+bG9jYWwo
KSkgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAg
ICAgICAgICAgCiAgICAgY2FzZSBTZXRBcmd1bWVudDoKICAgICAgICAgLy8gQXNzZXJ0IHRoYXQg
dGhlIHN0YXRlIG9mIGFyZ3VtZW50cyBoYXMgYmVlbiBzZXQuCi0gICAgICAgIEFTU0VSVCghbV9i
bG9jay0+dmFsdWVzQXRIZWFkLm9wZXJhbmQobm9kZS5sb2NhbCgpKS5pc0NsZWFyKCkpOwotICAg
ICAgICBub2RlLnNldENhbkV4aXQoZmFsc2UpOworICAgICAgICBBU1NFUlQoIW1fYmxvY2stPnZh
bHVlc0F0SGVhZC5vcGVyYW5kKG5vZGUtPmxvY2FsKCkpLmlzQ2xlYXIoKSk7CisgICAgICAgIG5v
ZGUtPnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAg
IGNhc2UgQml0QW5kOgpAQCAtMzMyLDMwICszMzEsMzAgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpl
eGVjdXRlKHVuc2lnbmVkIGluZAogICAgIGNhc2UgQml0UlNoaWZ0OgogICAgIGNhc2UgQml0TFNo
aWZ0OgogICAgIGNhc2UgQml0VVJTaGlmdDogewotICAgICAgICBKU1ZhbHVlIGxlZnQgPSBmb3JO
b2RlKG5vZGUuY2hpbGQxKCkpLnZhbHVlKCk7Ci0gICAgICAgIEpTVmFsdWUgcmlnaHQgPSBmb3JO
b2RlKG5vZGUuY2hpbGQyKCkpLnZhbHVlKCk7CisgICAgICAgIEpTVmFsdWUgbGVmdCA9IGZvck5v
ZGUobm9kZS0+Y2hpbGQxKCkpLnZhbHVlKCk7CisgICAgICAgIEpTVmFsdWUgcmlnaHQgPSBmb3JO
b2RlKG5vZGUtPmNoaWxkMigpKS52YWx1ZSgpOwogICAgICAgICBpZiAobGVmdCAmJiByaWdodCAm
JiBsZWZ0LmlzSW50MzIoKSAmJiByaWdodC5pc0ludDMyKCkpIHsKICAgICAgICAgICAgIGludDMy
X3QgYSA9IGxlZnQuYXNJbnQzMigpOwogICAgICAgICAgICAgaW50MzJfdCBiID0gcmlnaHQuYXNJ
bnQzMigpOwogICAgICAgICAgICAgYm9vbCBjb25zdGFudFdhc1NldDsKICAgICAgICAgICAgIHN3
aXRjaCAobm9kZS5vcCgpKSB7CiAgICAgICAgICAgICBjYXNlIEJpdEFuZDoKLSAgICAgICAgICAg
ICAgICBjb25zdGFudFdhc1NldCA9IHRyeVNldENvbnN0YW50KG5vZGVJbmRleCwgSlNWYWx1ZShh
ICYgYikpOworICAgICAgICAgICAgICAgIGNvbnN0YW50V2FzU2V0ID0gdHJ5U2V0Q29uc3RhbnQo
bm9kZSwgSlNWYWx1ZShhICYgYikpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgY2FzZSBCaXRPcjoKLSAgICAgICAgICAgICAgICBjb25zdGFudFdhc1NldCA9IHRyeVNldENv
bnN0YW50KG5vZGVJbmRleCwgSlNWYWx1ZShhIHwgYikpOworICAgICAgICAgICAgICAgIGNvbnN0
YW50V2FzU2V0ID0gdHJ5U2V0Q29uc3RhbnQobm9kZSwgSlNWYWx1ZShhIHwgYikpOwogICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBCaXRYb3I6Ci0gICAgICAgICAgICAg
ICAgY29uc3RhbnRXYXNTZXQgPSB0cnlTZXRDb25zdGFudChub2RlSW5kZXgsIEpTVmFsdWUoYSBe
IGIpKTsKKyAgICAgICAgICAgICAgICBjb25zdGFudFdhc1NldCA9IHRyeVNldENvbnN0YW50KG5v
ZGUsIEpTVmFsdWUoYSBeIGIpKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
IGNhc2UgQml0UlNoaWZ0OgotICAgICAgICAgICAgICAgIGNvbnN0YW50V2FzU2V0ID0gdHJ5U2V0
Q29uc3RhbnQobm9kZUluZGV4LCBKU1ZhbHVlKGEgPj4gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGIp
KSk7CisgICAgICAgICAgICAgICAgY29uc3RhbnRXYXNTZXQgPSB0cnlTZXRDb25zdGFudChub2Rl
LCBKU1ZhbHVlKGEgPj4gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGIpKSk7CiAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIEJpdExTaGlmdDoKLSAgICAgICAgICAgICAgICBj
b25zdGFudFdhc1NldCA9IHRyeVNldENvbnN0YW50KG5vZGVJbmRleCwgSlNWYWx1ZShhIDw8IHN0
YXRpY19jYXN0PHVpbnQzMl90PihiKSkpOworICAgICAgICAgICAgICAgIGNvbnN0YW50V2FzU2V0
ID0gdHJ5U2V0Q29uc3RhbnQobm9kZSwgSlNWYWx1ZShhIDw8IHN0YXRpY19jYXN0PHVpbnQzMl90
PihiKSkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBCaXRVUlNo
aWZ0OgotICAgICAgICAgICAgICAgIGNvbnN0YW50V2FzU2V0ID0gdHJ5U2V0Q29uc3RhbnQobm9k
ZUluZGV4LCBKU1ZhbHVlKHN0YXRpY19jYXN0PHVpbnQzMl90PihhKSA+PiBzdGF0aWNfY2FzdDx1
aW50MzJfdD4oYikpKTsKKyAgICAgICAgICAgICAgICBjb25zdGFudFdhc1NldCA9IHRyeVNldENv
bnN0YW50KG5vZGUsIEpTVmFsdWUoc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGEpID4+IHN0YXRpY19j
YXN0PHVpbnQzMl90PihiKSkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
ZGVmYXVsdDoKICAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTM2Mywx
OTkgKzM2MiwxOTkgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAog
ICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKGNvbnN0YW50V2FzU2V0KSB7CiAgICAgICAg
ICAgICAgICAgbV9mb3VuZENvbnN0YW50cyA9IHRydWU7Ci0gICAgICAgICAgICAgICAgbm9kZS5z
ZXRDYW5FeGl0KGZhbHNlKTsKKyAgICAgICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNl
KTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAg
ICAgICBzcGVjdWxhdGVJbnQzMkJpbmFyeShub2RlKTsKLSAgICAgICAgZm9yTm9kZShub2RlSW5k
ZXgpLnNldChTcGVjSW50MzIpOworICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjSW50MzIp
OwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgVUludDMyVG9OdW1i
ZXI6IHsKLSAgICAgICAgSlNWYWx1ZSBjaGlsZCA9IGZvck5vZGUobm9kZS5jaGlsZDEoKSkudmFs
dWUoKTsKKyAgICAgICAgSlNWYWx1ZSBjaGlsZCA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLnZh
bHVlKCk7CiAgICAgICAgIGlmIChjaGlsZCAmJiBjaGlsZC5pc051bWJlcigpKSB7CiAgICAgICAg
ICAgICBBU1NFUlQoY2hpbGQuaXNJbnQzMigpKTsKLSAgICAgICAgICAgIGlmICh0cnlTZXRDb25z
dGFudChub2RlSW5kZXgsIEpTVmFsdWUoY2hpbGQuYXNVSW50MzIoKSkpKSB7CisgICAgICAgICAg
ICBpZiAodHJ5U2V0Q29uc3RhbnQobm9kZSwgSlNWYWx1ZShjaGlsZC5hc1VJbnQzMigpKSkpIHsK
ICAgICAgICAgICAgICAgICBtX2ZvdW5kQ29uc3RhbnRzID0gdHJ1ZTsKLSAgICAgICAgICAgICAg
ICBub2RlLnNldENhbkV4aXQoZmFsc2UpOworICAgICAgICAgICAgICAgIG5vZGUtPnNldENhbkV4
aXQoZmFsc2UpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAg
ICB9Ci0gICAgICAgIGlmICghbm9kZS5jYW5TcGVjdWxhdGVJbnRlZ2VyKCkpIHsKLSAgICAgICAg
ICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoU3BlY0RvdWJsZSk7Ci0gICAgICAgICAgICBub2Rl
LnNldENhbkV4aXQoZmFsc2UpOworICAgICAgICBpZiAoIW5vZGUtPmNhblNwZWN1bGF0ZUludGVn
ZXIoKSkgeworICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0RvdWJsZSk7CisgICAg
ICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoU3BlY0ludDMyKTsKLSAgICAgICAgICAgIG5v
ZGUuc2V0Q2FuRXhpdCh0cnVlKTsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNJ
bnQzMik7CisgICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOwogICAgICAgICB9CiAg
ICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAKICAgICBj
YXNlIERvdWJsZUFzSW50MzI6IHsKLSAgICAgICAgSlNWYWx1ZSBjaGlsZCA9IGZvck5vZGUobm9k
ZS5jaGlsZDEoKSkudmFsdWUoKTsKKyAgICAgICAgSlNWYWx1ZSBjaGlsZCA9IGZvck5vZGUobm9k
ZS0+Y2hpbGQxKCkpLnZhbHVlKCk7CiAgICAgICAgIGlmIChjaGlsZCAmJiBjaGlsZC5pc051bWJl
cigpKSB7CiAgICAgICAgICAgICBkb3VibGUgYXNEb3VibGUgPSBjaGlsZC5hc051bWJlcigpOwog
ICAgICAgICAgICAgaW50MzJfdCBhc0ludCA9IEpTQzo6dG9JbnQzMihhc0RvdWJsZSk7CiAgICAg
ICAgICAgICBpZiAoYml0d2lzZV9jYXN0PGludDY0X3Q+KHN0YXRpY19jYXN0PGRvdWJsZT4oYXNJ
bnQpKSA9PSBiaXR3aXNlX2Nhc3Q8aW50NjRfdD4oYXNEb3VibGUpCi0gICAgICAgICAgICAgICAg
JiYgdHJ5U2V0Q29uc3RhbnQobm9kZUluZGV4LCBKU1ZhbHVlKGFzSW50KSkpIHsKKyAgICAgICAg
ICAgICAgICAmJiB0cnlTZXRDb25zdGFudChub2RlLCBKU1ZhbHVlKGFzSW50KSkpIHsKICAgICAg
ICAgICAgICAgICBtX2ZvdW5kQ29uc3RhbnRzID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICBub2RlLnNldENhbkV4aXQodHJ1
ZSk7Ci0gICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNOdW1iZXIpOwot
ICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFNwZWNJbnQzMik7CisgICAgICAgIG5vZGUt
PnNldENhbkV4aXQodHJ1ZSk7CisgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRl
cihTcGVjTnVtYmVyKTsKKyAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0ludDMyKTsKICAg
ICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAgICAgCiAgICAgY2FzZSBWYWx1ZVRvSW50MzI6
IHsKLSAgICAgICAgSlNWYWx1ZSBjaGlsZCA9IGZvck5vZGUobm9kZS5jaGlsZDEoKSkudmFsdWUo
KTsKKyAgICAgICAgSlNWYWx1ZSBjaGlsZCA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLnZhbHVl
KCk7CiAgICAgICAgIGlmIChjaGlsZCAmJiBjaGlsZC5pc051bWJlcigpKSB7CiAgICAgICAgICAg
ICBib29sIGNvbnN0YW50V2FzU2V0OwogICAgICAgICAgICAgaWYgKGNoaWxkLmlzSW50MzIoKSkK
LSAgICAgICAgICAgICAgICBjb25zdGFudFdhc1NldCA9IHRyeVNldENvbnN0YW50KG5vZGVJbmRl
eCwgY2hpbGQpOworICAgICAgICAgICAgICAgIGNvbnN0YW50V2FzU2V0ID0gdHJ5U2V0Q29uc3Rh
bnQobm9kZSwgY2hpbGQpOwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGNvbnN0
YW50V2FzU2V0ID0gdHJ5U2V0Q29uc3RhbnQobm9kZUluZGV4LCBKU1ZhbHVlKEpTQzo6dG9JbnQz
MihjaGlsZC5hc0RvdWJsZSgpKSkpOworICAgICAgICAgICAgICAgIGNvbnN0YW50V2FzU2V0ID0g
dHJ5U2V0Q29uc3RhbnQobm9kZSwgSlNWYWx1ZShKU0M6OnRvSW50MzIoY2hpbGQuYXNEb3VibGUo
KSkpKTsKICAgICAgICAgICAgIGlmIChjb25zdGFudFdhc1NldCkgewogICAgICAgICAgICAgICAg
IG1fZm91bmRDb25zdGFudHMgPSB0cnVlOwotICAgICAgICAgICAgICAgIG5vZGUuc2V0Q2FuRXhp
dChmYWxzZSk7CisgICAgICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CiAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgaWYg
KG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0uc2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKQorICAgICAg
ICBpZiAobV9ncmFwaFtub2RlLT5jaGlsZDEoKV0uc2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKQog
ICAgICAgICAgICAgc3BlY3VsYXRlSW50MzJVbmFyeShub2RlKTsKLSAgICAgICAgZWxzZSBpZiAo
bV9ncmFwaFtub2RlLmNoaWxkMSgpXS5zaG91bGRTcGVjdWxhdGVOdW1iZXIoKSkKKyAgICAgICAg
ZWxzZSBpZiAobV9ncmFwaFtub2RlLT5jaGlsZDEoKV0uc2hvdWxkU3BlY3VsYXRlTnVtYmVyKCkp
CiAgICAgICAgICAgICBzcGVjdWxhdGVOdW1iZXJVbmFyeShub2RlKTsKLSAgICAgICAgZWxzZSBp
ZiAobV9ncmFwaFtub2RlLmNoaWxkMSgpXS5zaG91bGRTcGVjdWxhdGVCb29sZWFuKCkpCisgICAg
ICAgIGVsc2UgaWYgKG1fZ3JhcGhbbm9kZS0+Y2hpbGQxKCldLnNob3VsZFNwZWN1bGF0ZUJvb2xl
YW4oKSkKICAgICAgICAgICAgIHNwZWN1bGF0ZUJvb2xlYW5VbmFyeShub2RlKTsKICAgICAgICAg
ZWxzZQotICAgICAgICAgICAgbm9kZS5zZXRDYW5FeGl0KGZhbHNlKTsKKyAgICAgICAgICAgIG5v
ZGUtPnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICAKLSAgICAgICAgZm9yTm9kZShub2RlSW5k
ZXgpLnNldChTcGVjSW50MzIpOworICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjSW50MzIp
OwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgSW50MzJUb0RvdWJs
ZTogewotICAgICAgICBKU1ZhbHVlIGNoaWxkID0gZm9yTm9kZShub2RlLmNoaWxkMSgpKS52YWx1
ZSgpOworICAgICAgICBKU1ZhbHVlIGNoaWxkID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSkudmFs
dWUoKTsKICAgICAgICAgaWYgKGNoaWxkICYmIGNoaWxkLmlzTnVtYmVyKCkKLSAgICAgICAgICAg
ICYmIHRyeVNldENvbnN0YW50KG5vZGVJbmRleCwgSlNWYWx1ZShKU1ZhbHVlOjpFbmNvZGVBc0Rv
dWJsZSwgY2hpbGQuYXNOdW1iZXIoKSkpKSB7CisgICAgICAgICAgICAmJiB0cnlTZXRDb25zdGFu
dChub2RlLCBKU1ZhbHVlKEpTVmFsdWU6OkVuY29kZUFzRG91YmxlLCBjaGlsZC5hc051bWJlcigp
KSkpIHsKICAgICAgICAgICAgIG1fZm91bmRDb25zdGFudHMgPSB0cnVlOwotICAgICAgICAgICAg
bm9kZS5zZXRDYW5FeGl0KGZhbHNlKTsKKyAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFs
c2UpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgc3BlY3VsYXRlTnVt
YmVyVW5hcnkobm9kZSk7Ci0gICAgICAgIGlmIChpc0ludDMyU3BlY3VsYXRpb24oZm9yTm9kZShu
b2RlLmNoaWxkMSgpKS5tX3R5cGUpKQotICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNl
dChTcGVjRG91YmxlUmVhbCk7CisgICAgICAgIGlmIChpc0ludDMyU3BlY3VsYXRpb24oZm9yTm9k
ZShub2RlLT5jaGlsZDEoKSkubV90eXBlKSkKKyAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0
KFNwZWNEb3VibGVSZWFsKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgZm9yTm9kZShub2Rl
SW5kZXgpLnNldChTcGVjRG91YmxlKTsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNw
ZWNEb3VibGUpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgQ2hl
Y2tOdW1iZXI6Ci0gICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNOdW1i
ZXIpOworICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5maWx0ZXIoU3BlY051bWJlcik7
CiAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAgY2FzZSBWYWx1ZUFkZDoKICAgICBj
YXNlIEFyaXRoQWRkOiB7Ci0gICAgICAgIEpTVmFsdWUgbGVmdCA9IGZvck5vZGUobm9kZS5jaGls
ZDEoKSkudmFsdWUoKTsKLSAgICAgICAgSlNWYWx1ZSByaWdodCA9IGZvck5vZGUobm9kZS5jaGls
ZDIoKSkudmFsdWUoKTsKKyAgICAgICAgSlNWYWx1ZSBsZWZ0ID0gZm9yTm9kZShub2RlLT5jaGls
ZDEoKSkudmFsdWUoKTsKKyAgICAgICAgSlNWYWx1ZSByaWdodCA9IGZvck5vZGUobm9kZS0+Y2hp
bGQyKCkpLnZhbHVlKCk7CiAgICAgICAgIGlmIChsZWZ0ICYmIHJpZ2h0ICYmIGxlZnQuaXNOdW1i
ZXIoKSAmJiByaWdodC5pc051bWJlcigpCi0gICAgICAgICAgICAmJiB0cnlTZXRDb25zdGFudChu
b2RlSW5kZXgsIEpTVmFsdWUobGVmdC5hc051bWJlcigpICsgcmlnaHQuYXNOdW1iZXIoKSkpKSB7
CisgICAgICAgICAgICAmJiB0cnlTZXRDb25zdGFudChub2RlLCBKU1ZhbHVlKGxlZnQuYXNOdW1i
ZXIoKSArIHJpZ2h0LmFzTnVtYmVyKCkpKSkgewogICAgICAgICAgICAgbV9mb3VuZENvbnN0YW50
cyA9IHRydWU7CiAgICAgICAgICAgICBub2RlLnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgaWYgKG1fZ3JhcGguYWRkU2hvdWxkU3BlY3Vs
YXRlSW50ZWdlcihub2RlKSkgewogICAgICAgICAgICAgc3BlY3VsYXRlSW50MzJCaW5hcnkoCi0g
ICAgICAgICAgICAgICAgbm9kZSwgIW5vZGVDYW5UcnVuY2F0ZUludGVnZXIobm9kZS5hcml0aE5v
ZGVGbGFncygpKSk7Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFNwZWNJbnQz
Mik7CisgICAgICAgICAgICAgICAgbm9kZSwgIW5vZGVDYW5UcnVuY2F0ZUludGVnZXIobm9kZS0+
YXJpdGhOb2RlRmxhZ3MoKSkpOworICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0lu
dDMyKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIGlmIChOb2RlOjpz
aG91bGRTcGVjdWxhdGVOdW1iZXJFeHBlY3RpbmdEZWZpbmVkKG1fZ3JhcGhbbm9kZS5jaGlsZDEo
KV0sIG1fZ3JhcGhbbm9kZS5jaGlsZDIoKV0pKSB7CisgICAgICAgIGlmIChOb2RlOjpzaG91bGRT
cGVjdWxhdGVOdW1iZXJFeHBlY3RpbmdEZWZpbmVkKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgbm9k
ZS0+Y2hpbGQyKCkubm9kZSgpKSkgewogICAgICAgICAgICAgc3BlY3VsYXRlTnVtYmVyQmluYXJ5
KG5vZGUpOwotICAgICAgICAgICAgaWYgKGlzUmVhbE51bWJlclNwZWN1bGF0aW9uKGZvck5vZGUo
bm9kZS5jaGlsZDEoKSkubV90eXBlKQotICAgICAgICAgICAgICAgICYmIGlzUmVhbE51bWJlclNw
ZWN1bGF0aW9uKGZvck5vZGUobm9kZS5jaGlsZDIoKSkubV90eXBlKSkKLSAgICAgICAgICAgICAg
ICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFNwZWNEb3VibGVSZWFsKTsKKyAgICAgICAgICAgIGlm
IChpc1JlYWxOdW1iZXJTcGVjdWxhdGlvbihmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX3R5cGUp
CisgICAgICAgICAgICAgICAgJiYgaXNSZWFsTnVtYmVyU3BlY3VsYXRpb24oZm9yTm9kZShub2Rl
LT5jaGlsZDIoKSkubV90eXBlKSkKKyAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChT
cGVjRG91YmxlUmVhbCk7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZm9yTm9k
ZShub2RlSW5kZXgpLnNldChTcGVjRG91YmxlKTsKKyAgICAgICAgICAgICAgICBmb3JOb2RlKG5v
ZGUpLnNldChTcGVjRG91YmxlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAg
ICAgIGlmIChub2RlLm9wKCkgPT0gVmFsdWVBZGQpIHsKLSAgICAgICAgICAgIGNsb2JiZXJXb3Js
ZChub2RlLmNvZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7Ci0gICAgICAgICAgICBmb3JOb2RlKG5v
ZGVJbmRleCkuc2V0KFNwZWNTdHJpbmcgfCBTcGVjSW50MzIgfCBTcGVjTnVtYmVyKTsKLSAgICAg
ICAgICAgIG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7CisgICAgICAgIGlmIChub2RlLT5vcCgpID09
IFZhbHVlQWRkKSB7CisgICAgICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+Y29kZU9yaWdpbiwg
aW5kZXhJbkJsb2NrKTsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNTdHJpbmcg
fCBTcGVjSW50MzIgfCBTcGVjTnVtYmVyKTsKKyAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQo
ZmFsc2UpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgLy8gV2UgZG9u
J3QgaGFuZGxlIHRoaXMgeWV0LiA6LSgKICAgICAgICAgbV9pc1ZhbGlkID0gZmFsc2U7Ci0gICAg
ICAgIG5vZGUuc2V0Q2FuRXhpdCh0cnVlKTsKKyAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVl
KTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAgICAgCiAgICAgY2FzZSBBcml0aFN1
YjogewotICAgICAgICBKU1ZhbHVlIGxlZnQgPSBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLnZhbHVl
KCk7Ci0gICAgICAgIEpTVmFsdWUgcmlnaHQgPSBmb3JOb2RlKG5vZGUuY2hpbGQyKCkpLnZhbHVl
KCk7CisgICAgICAgIEpTVmFsdWUgbGVmdCA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLnZhbHVl
KCk7CisgICAgICAgIEpTVmFsdWUgcmlnaHQgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMigpKS52YWx1
ZSgpOwogICAgICAgICBpZiAobGVmdCAmJiByaWdodCAmJiBsZWZ0LmlzTnVtYmVyKCkgJiYgcmln
aHQuaXNOdW1iZXIoKQotICAgICAgICAgICAgJiYgdHJ5U2V0Q29uc3RhbnQobm9kZUluZGV4LCBK
U1ZhbHVlKGxlZnQuYXNOdW1iZXIoKSAtIHJpZ2h0LmFzTnVtYmVyKCkpKSkgeworICAgICAgICAg
ICAgJiYgdHJ5U2V0Q29uc3RhbnQobm9kZSwgSlNWYWx1ZShsZWZ0LmFzTnVtYmVyKCkgLSByaWdo
dC5hc051bWJlcigpKSkpIHsKICAgICAgICAgICAgIG1fZm91bmRDb25zdGFudHMgPSB0cnVlOwot
ICAgICAgICAgICAgbm9kZS5zZXRDYW5FeGl0KGZhbHNlKTsKKyAgICAgICAgICAgIG5vZGUtPnNl
dENhbkV4aXQoZmFsc2UpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAg
aWYgKG1fZ3JhcGguYWRkU2hvdWxkU3BlY3VsYXRlSW50ZWdlcihub2RlKSkgewogICAgICAgICAg
ICAgc3BlY3VsYXRlSW50MzJCaW5hcnkoCi0gICAgICAgICAgICAgICAgbm9kZSwgIW5vZGVDYW5U
cnVuY2F0ZUludGVnZXIobm9kZS5hcml0aE5vZGVGbGFncygpKSk7Ci0gICAgICAgICAgICBmb3JO
b2RlKG5vZGVJbmRleCkuc2V0KFNwZWNJbnQzMik7CisgICAgICAgICAgICAgICAgbm9kZSwgIW5v
ZGVDYW5UcnVuY2F0ZUludGVnZXIobm9kZS0+YXJpdGhOb2RlRmxhZ3MoKSkpOworICAgICAgICAg
ICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICB9CiAgICAgICAgIHNwZWN1bGF0ZU51bWJlckJpbmFyeShub2RlKTsKLSAgICAgICAgZm9y
Tm9kZShub2RlSW5kZXgpLnNldChTcGVjRG91YmxlKTsKKyAgICAgICAgZm9yTm9kZShub2RlKS5z
ZXQoU3BlY0RvdWJsZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCiAgICAgY2Fz
ZSBBcml0aE5lZ2F0ZTogewotICAgICAgICBKU1ZhbHVlIGNoaWxkID0gZm9yTm9kZShub2RlLmNo
aWxkMSgpKS52YWx1ZSgpOworICAgICAgICBKU1ZhbHVlIGNoaWxkID0gZm9yTm9kZShub2RlLT5j
aGlsZDEoKSkudmFsdWUoKTsKICAgICAgICAgaWYgKGNoaWxkICYmIGNoaWxkLmlzTnVtYmVyKCkK
LSAgICAgICAgICAgICYmIHRyeVNldENvbnN0YW50KG5vZGVJbmRleCwgSlNWYWx1ZSgtY2hpbGQu
YXNOdW1iZXIoKSkpKSB7CisgICAgICAgICAgICAmJiB0cnlTZXRDb25zdGFudChub2RlLCBKU1Zh
bHVlKC1jaGlsZC5hc051bWJlcigpKSkpIHsKICAgICAgICAgICAgIG1fZm91bmRDb25zdGFudHMg
PSB0cnVlOwotICAgICAgICAgICAgbm9kZS5zZXRDYW5FeGl0KGZhbHNlKTsKKyAgICAgICAgICAg
IG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0K
ICAgICAgICAgaWYgKG1fZ3JhcGgubmVnYXRlU2hvdWxkU3BlY3VsYXRlSW50ZWdlcihub2RlKSkg
ewogICAgICAgICAgICAgc3BlY3VsYXRlSW50MzJVbmFyeSgKLSAgICAgICAgICAgICAgICBub2Rl
LCAhbm9kZUNhblRydW5jYXRlSW50ZWdlcihub2RlLmFyaXRoTm9kZUZsYWdzKCkpKTsKLSAgICAg
ICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoU3BlY0ludDMyKTsKKyAgICAgICAgICAgICAg
ICBub2RlLCAhbm9kZUNhblRydW5jYXRlSW50ZWdlcihub2RlLT5hcml0aE5vZGVGbGFncygpKSk7
CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjSW50MzIpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgc3BlY3VsYXRlTnVtYmVyVW5hcnkobm9kZSk7Ci0g
ICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoU3BlY0RvdWJsZSk7CisgICAgICAgIGZvck5v
ZGUobm9kZSkuc2V0KFNwZWNEb3VibGUpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAg
IAogICAgIGNhc2UgQXJpdGhNdWw6IHsKLSAgICAgICAgSlNWYWx1ZSBsZWZ0ID0gZm9yTm9kZShu
b2RlLmNoaWxkMSgpKS52YWx1ZSgpOwotICAgICAgICBKU1ZhbHVlIHJpZ2h0ID0gZm9yTm9kZShu
b2RlLmNoaWxkMigpKS52YWx1ZSgpOworICAgICAgICBKU1ZhbHVlIGxlZnQgPSBmb3JOb2RlKG5v
ZGUtPmNoaWxkMSgpKS52YWx1ZSgpOworICAgICAgICBKU1ZhbHVlIHJpZ2h0ID0gZm9yTm9kZShu
b2RlLT5jaGlsZDIoKSkudmFsdWUoKTsKICAgICAgICAgaWYgKGxlZnQgJiYgcmlnaHQgJiYgbGVm
dC5pc051bWJlcigpICYmIHJpZ2h0LmlzTnVtYmVyKCkKLSAgICAgICAgICAgICYmIHRyeVNldENv
bnN0YW50KG5vZGVJbmRleCwgSlNWYWx1ZShsZWZ0LmFzTnVtYmVyKCkgKiByaWdodC5hc051bWJl
cigpKSkpIHsKKyAgICAgICAgICAgICYmIHRyeVNldENvbnN0YW50KG5vZGUsIEpTVmFsdWUobGVm
dC5hc051bWJlcigpICogcmlnaHQuYXNOdW1iZXIoKSkpKSB7CiAgICAgICAgICAgICBtX2ZvdW5k
Q29uc3RhbnRzID0gdHJ1ZTsKLSAgICAgICAgICAgIG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7Cisg
ICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICB9CiAgICAgICAgIGlmIChtX2dyYXBoLm11bFNob3VsZFNwZWN1bGF0ZUludGVnZXIo
bm9kZSkpIHsKICAgICAgICAgICAgIHNwZWN1bGF0ZUludDMyQmluYXJ5KAogICAgICAgICAgICAg
ICAgIG5vZGUsCi0gICAgICAgICAgICAgICAgIW5vZGVDYW5UcnVuY2F0ZUludGVnZXIobm9kZS5h
cml0aE5vZGVGbGFncygpKQotICAgICAgICAgICAgICAgIHx8ICFub2RlQ2FuSWdub3JlTmVnYXRp
dmVaZXJvKG5vZGUuYXJpdGhOb2RlRmxhZ3MoKSkpOwotICAgICAgICAgICAgZm9yTm9kZShub2Rl
SW5kZXgpLnNldChTcGVjSW50MzIpOworICAgICAgICAgICAgICAgICFub2RlQ2FuVHJ1bmNhdGVJ
bnRlZ2VyKG5vZGUtPmFyaXRoTm9kZUZsYWdzKCkpCisgICAgICAgICAgICAgICAgfHwgIW5vZGVD
YW5JZ25vcmVOZWdhdGl2ZVplcm8obm9kZS0+YXJpdGhOb2RlRmxhZ3MoKSkpOworICAgICAgICAg
ICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICB9CiAgICAgICAgIHNwZWN1bGF0ZU51bWJlckJpbmFyeShub2RlKTsKLSAgICAgICAgaWYg
KGlzUmVhbE51bWJlclNwZWN1bGF0aW9uKGZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKQot
ICAgICAgICAgICAgfHwgaXNSZWFsTnVtYmVyU3BlY3VsYXRpb24oZm9yTm9kZShub2RlLmNoaWxk
MigpKS5tX3R5cGUpKQotICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChTcGVjRG91
YmxlUmVhbCk7CisgICAgICAgIGlmIChpc1JlYWxOdW1iZXJTcGVjdWxhdGlvbihmb3JOb2RlKG5v
ZGUtPmNoaWxkMSgpKS5tX3R5cGUpCisgICAgICAgICAgICB8fCBpc1JlYWxOdW1iZXJTcGVjdWxh
dGlvbihmb3JOb2RlKG5vZGUtPmNoaWxkMigpKS5tX3R5cGUpKQorICAgICAgICAgICAgZm9yTm9k
ZShub2RlKS5zZXQoU3BlY0RvdWJsZVJlYWwpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBm
b3JOb2RlKG5vZGVJbmRleCkuc2V0KFNwZWNEb3VibGUpOworICAgICAgICAgICAgZm9yTm9kZShu
b2RlKS5zZXQoU3BlY0RvdWJsZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCkBA
IC01NjMsMjQgKzU2MiwyNCBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQg
aW5kCiAgICAgY2FzZSBBcml0aE1pbjoKICAgICBjYXNlIEFyaXRoTWF4OgogICAgIGNhc2UgQXJp
dGhNb2Q6IHsKLSAgICAgICAgSlNWYWx1ZSBsZWZ0ID0gZm9yTm9kZShub2RlLmNoaWxkMSgpKS52
YWx1ZSgpOwotICAgICAgICBKU1ZhbHVlIHJpZ2h0ID0gZm9yTm9kZShub2RlLmNoaWxkMigpKS52
YWx1ZSgpOworICAgICAgICBKU1ZhbHVlIGxlZnQgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS52
YWx1ZSgpOworICAgICAgICBKU1ZhbHVlIHJpZ2h0ID0gZm9yTm9kZShub2RlLT5jaGlsZDIoKSku
dmFsdWUoKTsKICAgICAgICAgaWYgKGxlZnQgJiYgcmlnaHQgJiYgbGVmdC5pc051bWJlcigpICYm
IHJpZ2h0LmlzTnVtYmVyKCkpIHsKICAgICAgICAgICAgIGRvdWJsZSBhID0gbGVmdC5hc051bWJl
cigpOwogICAgICAgICAgICAgZG91YmxlIGIgPSByaWdodC5hc051bWJlcigpOwogICAgICAgICAg
ICAgYm9vbCBjb25zdGFudFdhc1NldDsKICAgICAgICAgICAgIHN3aXRjaCAobm9kZS5vcCgpKSB7
CiAgICAgICAgICAgICBjYXNlIEFyaXRoRGl2OgotICAgICAgICAgICAgICAgIGNvbnN0YW50V2Fz
U2V0ID0gdHJ5U2V0Q29uc3RhbnQobm9kZUluZGV4LCBKU1ZhbHVlKGEgLyBiKSk7CisgICAgICAg
ICAgICAgICAgY29uc3RhbnRXYXNTZXQgPSB0cnlTZXRDb25zdGFudChub2RlLCBKU1ZhbHVlKGEg
LyBiKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIEFyaXRoTWlu
OgotICAgICAgICAgICAgICAgIGNvbnN0YW50V2FzU2V0ID0gdHJ5U2V0Q29uc3RhbnQobm9kZUlu
ZGV4LCBKU1ZhbHVlKGEgPCBiID8gYSA6IChiIDw9IGEgPyBiIDogYSArIGIpKSk7CisgICAgICAg
ICAgICAgICAgY29uc3RhbnRXYXNTZXQgPSB0cnlTZXRDb25zdGFudChub2RlLCBKU1ZhbHVlKGEg
PCBiID8gYSA6IChiIDw9IGEgPyBiIDogYSArIGIpKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICBjYXNlIEFyaXRoTWF4OgotICAgICAgICAgICAgICAgIGNvbnN0YW50V2Fz
U2V0ID0gdHJ5U2V0Q29uc3RhbnQobm9kZUluZGV4LCBKU1ZhbHVlKGEgPiBiID8gYSA6IChiID49
IGEgPyBiIDogYSArIGIpKSk7CisgICAgICAgICAgICAgICAgY29uc3RhbnRXYXNTZXQgPSB0cnlT
ZXRDb25zdGFudChub2RlLCBKU1ZhbHVlKGEgPiBiID8gYSA6IChiID49IGEgPyBiIDogYSArIGIp
KSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIEFyaXRoTW9kOgot
ICAgICAgICAgICAgICAgIGNvbnN0YW50V2FzU2V0ID0gdHJ5U2V0Q29uc3RhbnQobm9kZUluZGV4
LCBKU1ZhbHVlKGZtb2QoYSwgYikpKTsKKyAgICAgICAgICAgICAgICBjb25zdGFudFdhc1NldCA9
IHRyeVNldENvbnN0YW50KG5vZGUsIEpTVmFsdWUoZm1vZChhLCBiKSkpOwogICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKQEAgLTU4OSw4NCArNTg4LDg0IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6
ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChjb25z
dGFudFdhc1NldCkgewogICAgICAgICAgICAgICAgIG1fZm91bmRDb25zdGFudHMgPSB0cnVlOwot
ICAgICAgICAgICAgICAgIG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7CisgICAgICAgICAgICAgICAg
bm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICB9CiAgICAgICAgIH0KICAgICAgICAgaWYgKE5vZGU6OnNob3VsZFNwZWN1bGF0ZUludGVn
ZXJGb3JBcml0aG1ldGljKAotICAgICAgICAgICAgICAgIG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0s
IG1fZ3JhcGhbbm9kZS5jaGlsZDIoKV0pCi0gICAgICAgICAgICAmJiBub2RlLmNhblNwZWN1bGF0
ZUludGVnZXIoKSkgeworICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgbm9k
ZS0+Y2hpbGQyKCkubm9kZSgpKQorICAgICAgICAgICAgJiYgbm9kZS0+Y2FuU3BlY3VsYXRlSW50
ZWdlcigpKSB7CiAgICAgICAgICAgICBzcGVjdWxhdGVJbnQzMkJpbmFyeShub2RlLCB0cnVlKTsg
Ly8gZm9yY2luZyBjYW4tZXhpdCwgd2hpY2ggaXMgYSBiaXQgb24gdGhlIGNvbnNlcnZhdGl2ZSBz
aWRlLgotICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChTcGVjSW50MzIpOworICAg
ICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9CiAgICAgICAgIHNwZWN1bGF0ZU51bWJlckJpbmFyeShub2RlKTsKLSAgICAg
ICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChTcGVjRG91YmxlKTsKKyAgICAgICAgZm9yTm9kZShu
b2RlKS5zZXQoU3BlY0RvdWJsZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgICAg
IAogICAgIGNhc2UgQXJpdGhBYnM6IHsKLSAgICAgICAgSlNWYWx1ZSBjaGlsZCA9IGZvck5vZGUo
bm9kZS5jaGlsZDEoKSkudmFsdWUoKTsKKyAgICAgICAgSlNWYWx1ZSBjaGlsZCA9IGZvck5vZGUo
bm9kZS0+Y2hpbGQxKCkpLnZhbHVlKCk7CiAgICAgICAgIGlmIChjaGlsZCAmJiBjaGlsZC5pc051
bWJlcigpCi0gICAgICAgICAgICAmJiB0cnlTZXRDb25zdGFudChub2RlSW5kZXgsIEpTVmFsdWUo
ZmFicyhjaGlsZC5hc051bWJlcigpKSkpKSB7CisgICAgICAgICAgICAmJiB0cnlTZXRDb25zdGFu
dChub2RlLCBKU1ZhbHVlKGZhYnMoY2hpbGQuYXNOdW1iZXIoKSkpKSkgewogICAgICAgICAgICAg
bV9mb3VuZENvbnN0YW50cyA9IHRydWU7Ci0gICAgICAgICAgICBub2RlLnNldENhbkV4aXQoZmFs
c2UpOworICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQotICAgICAgICBpZiAobV9ncmFwaFtub2RlLmNoaWxkMSgpXS5zaG91
bGRTcGVjdWxhdGVJbnRlZ2VyRm9yQXJpdGhtZXRpYygpCi0gICAgICAgICAgICAmJiBub2RlLmNh
blNwZWN1bGF0ZUludGVnZXIoKSkgeworICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3Vs
ZFNwZWN1bGF0ZUludGVnZXJGb3JBcml0aG1ldGljKCkKKyAgICAgICAgICAgICYmIG5vZGUtPmNh
blNwZWN1bGF0ZUludGVnZXIoKSkgewogICAgICAgICAgICAgc3BlY3VsYXRlSW50MzJVbmFyeShu
b2RlLCB0cnVlKTsKLSAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoU3BlY0ludDMy
KTsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNJbnQzMik7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgfQogICAgICAgICBzcGVjdWxhdGVOdW1iZXJVbmFyeShub2RlKTsK
LSAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChTcGVjRG91YmxlKTsKKyAgICAgICAgZm9y
Tm9kZShub2RlKS5zZXQoU3BlY0RvdWJsZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAg
ICAgICAgIAogICAgIGNhc2UgQXJpdGhTcXJ0OiB7Ci0gICAgICAgIEpTVmFsdWUgY2hpbGQgPSBm
b3JOb2RlKG5vZGUuY2hpbGQxKCkpLnZhbHVlKCk7CisgICAgICAgIEpTVmFsdWUgY2hpbGQgPSBm
b3JOb2RlKG5vZGUtPmNoaWxkMSgpKS52YWx1ZSgpOwogICAgICAgICBpZiAoY2hpbGQgJiYgY2hp
bGQuaXNOdW1iZXIoKQotICAgICAgICAgICAgJiYgdHJ5U2V0Q29uc3RhbnQobm9kZUluZGV4LCBK
U1ZhbHVlKHNxcnQoY2hpbGQuYXNOdW1iZXIoKSkpKSkgeworICAgICAgICAgICAgJiYgdHJ5U2V0
Q29uc3RhbnQobm9kZSwgSlNWYWx1ZShzcXJ0KGNoaWxkLmFzTnVtYmVyKCkpKSkpIHsKICAgICAg
ICAgICAgIG1fZm91bmRDb25zdGFudHMgPSB0cnVlOwotICAgICAgICAgICAgbm9kZS5zZXRDYW5F
eGl0KGZhbHNlKTsKKyAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgc3BlY3VsYXRlTnVtYmVyVW5hcnkobm9k
ZSk7Ci0gICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoU3BlY0RvdWJsZSk7CisgICAgICAg
IGZvck5vZGUobm9kZSkuc2V0KFNwZWNEb3VibGUpOwogICAgICAgICBicmVhazsKICAgICB9CiAg
ICAgICAgICAgICAKICAgICBjYXNlIExvZ2ljYWxOb3Q6IHsKICAgICAgICAgYm9vbCBkaWRTZXRD
b25zdGFudCA9IGZhbHNlOwotICAgICAgICBzd2l0Y2ggKGJvb2xlYW5SZXN1bHQobm9kZSwgZm9y
Tm9kZShub2RlLmNoaWxkMSgpKSkpIHsKKyAgICAgICAgc3dpdGNoIChib29sZWFuUmVzdWx0KG5v
ZGUsIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpKSkgewogICAgICAgICBjYXNlIERlZmluaXRlbHlU
cnVlOgotICAgICAgICAgICAgZGlkU2V0Q29uc3RhbnQgPSB0cnlTZXRDb25zdGFudChub2RlSW5k
ZXgsIGpzQm9vbGVhbihmYWxzZSkpOworICAgICAgICAgICAgZGlkU2V0Q29uc3RhbnQgPSB0cnlT
ZXRDb25zdGFudChub2RlLCBqc0Jvb2xlYW4oZmFsc2UpKTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICBjYXNlIERlZmluaXRlbHlGYWxzZToKLSAgICAgICAgICAgIGRpZFNldENvbnN0YW50
ID0gdHJ5U2V0Q29uc3RhbnQobm9kZUluZGV4LCBqc0Jvb2xlYW4odHJ1ZSkpOworICAgICAgICAg
ICAgZGlkU2V0Q29uc3RhbnQgPSB0cnlTZXRDb25zdGFudChub2RlLCBqc0Jvb2xlYW4odHJ1ZSkp
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgfQogICAgICAgICBpZiAoZGlkU2V0Q29uc3RhbnQpIHsKICAgICAgICAgICAg
IG1fZm91bmRDb25zdGFudHMgPSB0cnVlOwotICAgICAgICAgICAgbm9kZS5zZXRDYW5FeGl0KGZh
bHNlKTsKKyAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgTm9kZSYgY2hpbGQgPSBtX2dyYXBoW25vZGUuY2hp
bGQxKCldOwotICAgICAgICBpZiAoaXNCb29sZWFuU3BlY3VsYXRpb24oY2hpbGQucHJlZGljdGlv
bigpKSkKKyAgICAgICAgTm9kZSogY2hpbGQgPSBub2RlLT5jaGlsZDEoKS5ub2RlKCk7CisgICAg
ICAgIGlmIChpc0Jvb2xlYW5TcGVjdWxhdGlvbihjaGlsZC0+cHJlZGljdGlvbigpKSkKICAgICAg
ICAgICAgIHNwZWN1bGF0ZUJvb2xlYW5VbmFyeShub2RlKTsKLSAgICAgICAgZWxzZSBpZiAoY2hp
bGQuc2hvdWxkU3BlY3VsYXRlTm9uU3RyaW5nQ2VsbE9yT3RoZXIoKSkgewotICAgICAgICAgICAg
bm9kZS5zZXRDYW5FeGl0KHRydWUpOwotICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgp
KS5maWx0ZXIoKFNwZWNDZWxsICYgflNwZWNTdHJpbmcpIHwgU3BlY090aGVyKTsKLSAgICAgICAg
fSBlbHNlIGlmIChjaGlsZC5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpCisgICAgICAgIGVsc2Ug
aWYgKGNoaWxkLT5zaG91bGRTcGVjdWxhdGVOb25TdHJpbmdDZWxsT3JPdGhlcigpKSB7CisgICAg
ICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOworICAgICAgICAgICAgZm9yTm9kZShjaGls
ZCkuZmlsdGVyKChTcGVjQ2VsbCAmIH5TcGVjU3RyaW5nKSB8IFNwZWNPdGhlcik7CisgICAgICAg
IH0gZWxzZSBpZiAoY2hpbGQtPnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKSkKICAgICAgICAgICAg
IHNwZWN1bGF0ZUludDMyVW5hcnkobm9kZSk7Ci0gICAgICAgIGVsc2UgaWYgKGNoaWxkLnNob3Vs
ZFNwZWN1bGF0ZU51bWJlcigpKQorICAgICAgICBlbHNlIGlmIChjaGlsZC0+c2hvdWxkU3BlY3Vs
YXRlTnVtYmVyKCkpCiAgICAgICAgICAgICBzcGVjdWxhdGVOdW1iZXJVbmFyeShub2RlKTsKICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgbm9kZS5zZXRDYW5FeGl0KGZhbHNlKTsKLSAgICAgICAg
Zm9yTm9kZShub2RlSW5kZXgpLnNldChTcGVjQm9vbGVhbik7CisgICAgICAgICAgICBub2RlLT5z
ZXRDYW5FeGl0KGZhbHNlKTsKKyAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0Jvb2xlYW4p
OwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIApAQCAtNjc2LDM2ICs2NzUsMzYgQEAg
Ym9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgIGNhc2UgSXNTdHJp
bmc6CiAgICAgY2FzZSBJc09iamVjdDoKICAgICBjYXNlIElzRnVuY3Rpb246IHsKLSAgICAgICAg
bm9kZS5zZXRDYW5FeGl0KG5vZGUub3AoKSA9PSBJc1VuZGVmaW5lZCAmJiBtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0Rm9yKG5vZGUuY29kZU9yaWdpbiktPm1hc3F1ZXJhZGVzQXNVbmRlZmluZWRX
YXRjaHBvaW50KCktPmlzU3RpbGxWYWxpZCgpKTsKLSAgICAgICAgSlNWYWx1ZSBjaGlsZCA9IGZv
ck5vZGUobm9kZS5jaGlsZDEoKSkudmFsdWUoKTsKKyAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChu
b2RlLT5vcCgpID09IElzVW5kZWZpbmVkICYmIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3RGb3Io
bm9kZS0+Y29kZU9yaWdpbiktPm1hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50KCktPmlz
U3RpbGxWYWxpZCgpKTsKKyAgICAgICAgSlNWYWx1ZSBjaGlsZCA9IGZvck5vZGUobm9kZS0+Y2hp
bGQxKCkpLnZhbHVlKCk7CiAgICAgICAgIGlmIChjaGlsZCkgewogICAgICAgICAgICAgYm9vbCBj
b25zdGFudFdhc1NldDsKLSAgICAgICAgICAgIHN3aXRjaCAobm9kZS5vcCgpKSB7CisgICAgICAg
ICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKICAgICAgICAgICAgIGNhc2UgSXNVbmRlZmluZWQ6
Ci0gICAgICAgICAgICAgICAgaWYgKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3RGb3Iobm9kZS5j
b2RlT3JpZ2luKS0+bWFzcXVlcmFkZXNBc1VuZGVmaW5lZFdhdGNocG9pbnQoKS0+aXNTdGlsbFZh
bGlkKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgY29uc3RhbnRXYXNTZXQgPSB0cnlTZXRDb25z
dGFudChub2RlSW5kZXgsIGpzQm9vbGVhbigKKyAgICAgICAgICAgICAgICBpZiAobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdEZvcihub2RlLT5jb2RlT3JpZ2luKS0+bWFzcXVlcmFkZXNBc1VuZGVm
aW5lZFdhdGNocG9pbnQoKS0+aXNTdGlsbFZhbGlkKCkpIHsKKyAgICAgICAgICAgICAgICAgICAg
Y29uc3RhbnRXYXNTZXQgPSB0cnlTZXRDb25zdGFudChub2RlLCBqc0Jvb2xlYW4oCiAgICAgICAg
ICAgICAgICAgICAgICAgICBjaGlsZC5pc0NlbGwoKQogICAgICAgICAgICAgICAgICAgICAgICAg
PyBmYWxzZSAKICAgICAgICAgICAgICAgICAgICAgICAgIDogY2hpbGQuaXNVbmRlZmluZWQoKSkp
OwogICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnN0YW50
V2FzU2V0ID0gdHJ5U2V0Q29uc3RhbnQobm9kZUluZGV4LCBqc0Jvb2xlYW4oCisgICAgICAgICAg
ICAgICAgICAgIGNvbnN0YW50V2FzU2V0ID0gdHJ5U2V0Q29uc3RhbnQobm9kZSwganNCb29sZWFu
KAogICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGQuaXNDZWxsKCkKLSAgICAgICAgICAgICAg
ICAgICAgICAgID8gY2hpbGQuYXNDZWxsKCktPnN0cnVjdHVyZSgpLT5tYXNxdWVyYWRlc0FzVW5k
ZWZpbmVkKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3RGb3Iobm9kZS5jb2RlT3JpZ2luKSkKKyAg
ICAgICAgICAgICAgICAgICAgICAgID8gY2hpbGQuYXNDZWxsKCktPnN0cnVjdHVyZSgpLT5tYXNx
dWVyYWRlc0FzVW5kZWZpbmVkKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3RGb3Iobm9kZS0+Y29k
ZU9yaWdpbikpCiAgICAgICAgICAgICAgICAgICAgICAgICA6IGNoaWxkLmlzVW5kZWZpbmVkKCkp
KTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICBjYXNlIElzQm9vbGVhbjoKLSAgICAgICAgICAgICAgICBjb25zdGFudFdhc1NldCA9IHRyeVNl
dENvbnN0YW50KG5vZGVJbmRleCwganNCb29sZWFuKGNoaWxkLmlzQm9vbGVhbigpKSk7CisgICAg
ICAgICAgICAgICAgY29uc3RhbnRXYXNTZXQgPSB0cnlTZXRDb25zdGFudChub2RlLCBqc0Jvb2xl
YW4oY2hpbGQuaXNCb29sZWFuKCkpKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgIGNhc2UgSXNOdW1iZXI6Ci0gICAgICAgICAgICAgICAgY29uc3RhbnRXYXNTZXQgPSB0cnlT
ZXRDb25zdGFudChub2RlSW5kZXgsIGpzQm9vbGVhbihjaGlsZC5pc051bWJlcigpKSk7CisgICAg
ICAgICAgICAgICAgY29uc3RhbnRXYXNTZXQgPSB0cnlTZXRDb25zdGFudChub2RlLCBqc0Jvb2xl
YW4oY2hpbGQuaXNOdW1iZXIoKSkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgY2FzZSBJc1N0cmluZzoKLSAgICAgICAgICAgICAgICBjb25zdGFudFdhc1NldCA9IHRyeVNl
dENvbnN0YW50KG5vZGVJbmRleCwganNCb29sZWFuKGlzSlNTdHJpbmcoY2hpbGQpKSk7CisgICAg
ICAgICAgICAgICAgY29uc3RhbnRXYXNTZXQgPSB0cnlTZXRDb25zdGFudChub2RlLCBqc0Jvb2xl
YW4oaXNKU1N0cmluZyhjaGlsZCkpKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgIGNhc2UgSXNPYmplY3Q6CiAgICAgICAgICAgICAgICAgaWYgKGNoaWxkLmlzTnVsbCgpIHx8
ICFjaGlsZC5pc09iamVjdCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnN0YW50V2FzU2V0
ID0gdHJ5U2V0Q29uc3RhbnQobm9kZUluZGV4LCBqc0Jvb2xlYW4oY2hpbGQuaXNOdWxsKCkpKTsK
KyAgICAgICAgICAgICAgICAgICAgY29uc3RhbnRXYXNTZXQgPSB0cnlTZXRDb25zdGFudChub2Rl
LCBqc0Jvb2xlYW4oY2hpbGQuaXNOdWxsKCkpKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgZGVmYXVsdDoKQEAgLTcxOCw2MSArNzE3
LDYxIEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAg
ICAgIH0KICAgICAgICAgfQogCi0gICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoU3BlY0Jv
b2xlYW4pOworICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjQm9vbGVhbik7CiAgICAgICAg
IGJyZWFrOwogICAgIH0KIAogICAgIGNhc2UgVHlwZU9mOiB7CiAgICAgICAgIEpTR2xvYmFsRGF0
YSogZ2xvYmFsRGF0YSA9IG1fY29kZUJsb2NrLT5nbG9iYWxEYXRhKCk7Ci0gICAgICAgIEpTVmFs
dWUgY2hpbGQgPSBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLnZhbHVlKCk7Ci0gICAgICAgIEFic3Ry
YWN0VmFsdWUmIGFic3RyYWN0Q2hpbGQgPSBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpOworICAgICAg
ICBKU1ZhbHVlIGNoaWxkID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSkudmFsdWUoKTsKKyAgICAg
ICAgQWJzdHJhY3RWYWx1ZSYgYWJzdHJhY3RDaGlsZCA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkp
OwogICAgICAgICBpZiAoY2hpbGQpIHsKLSAgICAgICAgICAgIEpTVmFsdWUgdHlwZVN0cmluZyA9
IGpzVHlwZVN0cmluZ0ZvclZhbHVlKCpnbG9iYWxEYXRhLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0Rm9yKG5vZGUuY29kZU9yaWdpbiksIGNoaWxkKTsKLSAgICAgICAgICAgIGlmICh0cnlTZXRD
b25zdGFudChub2RlSW5kZXgsIHR5cGVTdHJpbmcpKSB7CisgICAgICAgICAgICBKU1ZhbHVlIHR5
cGVTdHJpbmcgPSBqc1R5cGVTdHJpbmdGb3JWYWx1ZSgqZ2xvYmFsRGF0YSwgbV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdEZvcihub2RlLT5jb2RlT3JpZ2luKSwgY2hpbGQpOworICAgICAgICAgICAg
aWYgKHRyeVNldENvbnN0YW50KG5vZGUsIHR5cGVTdHJpbmcpKSB7CiAgICAgICAgICAgICAgICAg
bV9mb3VuZENvbnN0YW50cyA9IHRydWU7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICB9CiAgICAgICAgIH0gZWxzZSBpZiAoaXNOdW1iZXJTcGVjdWxhdGlvbihhYnN0cmFjdENo
aWxkLm1fdHlwZSkpIHsKLSAgICAgICAgICAgIGlmICh0cnlTZXRDb25zdGFudChub2RlSW5kZXgs
IGdsb2JhbERhdGEtPnNtYWxsU3RyaW5ncy5udW1iZXJTdHJpbmcoKSkpIHsKLSAgICAgICAgICAg
ICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjTnVtYmVyKTsKKyAgICAgICAg
ICAgIGlmICh0cnlTZXRDb25zdGFudChub2RlLCBnbG9iYWxEYXRhLT5zbWFsbFN0cmluZ3MubnVt
YmVyU3RyaW5nKCkpKSB7CisgICAgICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDEoKSku
ZmlsdGVyKFNwZWNOdW1iZXIpOwogICAgICAgICAgICAgICAgIG1fZm91bmRDb25zdGFudHMgPSB0
cnVlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICB9IGVs
c2UgaWYgKGlzU3RyaW5nU3BlY3VsYXRpb24oYWJzdHJhY3RDaGlsZC5tX3R5cGUpKSB7Ci0gICAg
ICAgICAgICBpZiAodHJ5U2V0Q29uc3RhbnQobm9kZUluZGV4LCBnbG9iYWxEYXRhLT5zbWFsbFN0
cmluZ3Muc3RyaW5nU3RyaW5nKCkpKSB7Ci0gICAgICAgICAgICAgICAgZm9yTm9kZShub2RlLmNo
aWxkMSgpKS5maWx0ZXIoU3BlY1N0cmluZyk7CisgICAgICAgICAgICBpZiAodHJ5U2V0Q29uc3Rh
bnQobm9kZSwgZ2xvYmFsRGF0YS0+c21hbGxTdHJpbmdzLnN0cmluZ1N0cmluZygpKSkgeworICAg
ICAgICAgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRlcihTcGVjU3RyaW5nKTsK
ICAgICAgICAgICAgICAgICBtX2ZvdW5kQ29uc3RhbnRzID0gdHJ1ZTsKICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIGlmIChpc0ZpbmFsT2JqZWN0
U3BlY3VsYXRpb24oYWJzdHJhY3RDaGlsZC5tX3R5cGUpIHx8IGlzQXJyYXlTcGVjdWxhdGlvbihh
YnN0cmFjdENoaWxkLm1fdHlwZSkgfHwgaXNBcmd1bWVudHNTcGVjdWxhdGlvbihhYnN0cmFjdENo
aWxkLm1fdHlwZSkpIHsKLSAgICAgICAgICAgIGlmICh0cnlTZXRDb25zdGFudChub2RlSW5kZXgs
IGdsb2JhbERhdGEtPnNtYWxsU3RyaW5ncy5vYmplY3RTdHJpbmcoKSkpIHsKLSAgICAgICAgICAg
ICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjRmluYWxPYmplY3QgfCBTcGVj
QXJyYXkgfCBTcGVjQXJndW1lbnRzKTsKKyAgICAgICAgICAgIGlmICh0cnlTZXRDb25zdGFudChu
b2RlLCBnbG9iYWxEYXRhLT5zbWFsbFN0cmluZ3Mub2JqZWN0U3RyaW5nKCkpKSB7CisgICAgICAg
ICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDEoKSkuZmlsdGVyKFNwZWNGaW5hbE9iamVjdCB8
IFNwZWNBcnJheSB8IFNwZWNBcmd1bWVudHMpOwogICAgICAgICAgICAgICAgIG1fZm91bmRDb25z
dGFudHMgPSB0cnVlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAg
ICAgICB9IGVsc2UgaWYgKGlzRnVuY3Rpb25TcGVjdWxhdGlvbihhYnN0cmFjdENoaWxkLm1fdHlw
ZSkpIHsKLSAgICAgICAgICAgIGlmICh0cnlTZXRDb25zdGFudChub2RlSW5kZXgsIGdsb2JhbERh
dGEtPnNtYWxsU3RyaW5ncy5mdW5jdGlvblN0cmluZygpKSkgewotICAgICAgICAgICAgICAgIGZv
ck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNGdW5jdGlvbik7CisgICAgICAgICAgICBp
ZiAodHJ5U2V0Q29uc3RhbnQobm9kZSwgZ2xvYmFsRGF0YS0+c21hbGxTdHJpbmdzLmZ1bmN0aW9u
U3RyaW5nKCkpKSB7CisgICAgICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDEoKSkuZmls
dGVyKFNwZWNGdW5jdGlvbik7CiAgICAgICAgICAgICAgICAgbV9mb3VuZENvbnN0YW50cyA9IHRy
dWU7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxz
ZSBpZiAoaXNCb29sZWFuU3BlY3VsYXRpb24oYWJzdHJhY3RDaGlsZC5tX3R5cGUpKSB7Ci0gICAg
ICAgICAgICBpZiAodHJ5U2V0Q29uc3RhbnQobm9kZUluZGV4LCBnbG9iYWxEYXRhLT5zbWFsbFN0
cmluZ3MuYm9vbGVhblN0cmluZygpKSkgewotICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZS5j
aGlsZDEoKSkuZmlsdGVyKFNwZWNCb29sZWFuKTsKKyAgICAgICAgICAgIGlmICh0cnlTZXRDb25z
dGFudChub2RlLCBnbG9iYWxEYXRhLT5zbWFsbFN0cmluZ3MuYm9vbGVhblN0cmluZygpKSkgewor
ICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRlcihTcGVjQm9vbGVh
bik7CiAgICAgICAgICAgICAgICAgbV9mb3VuZENvbnN0YW50cyA9IHRydWU7CiAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICBOb2RlJiBjaGlsZE5vZGUgPSBtX2dyYXBoW25vZGUuY2hpbGQxKCldOwotICAgICAgICAgICAg
aWYgKGlzQ2VsbFNwZWN1bGF0aW9uKGNoaWxkTm9kZS5wcmVkaWN0aW9uKCkpKSB7Ci0gICAgICAg
ICAgICAgICAgaWYgKGlzU3RyaW5nU3BlY3VsYXRpb24oY2hpbGROb2RlLnByZWRpY3Rpb24oKSkp
Ci0gICAgICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNT
dHJpbmcpOworICAgICAgICAgICAgTm9kZSogY2hpbGROb2RlID0gbm9kZS0+Y2hpbGQxKCkubm9k
ZSgpOworICAgICAgICAgICAgaWYgKGlzQ2VsbFNwZWN1bGF0aW9uKGNoaWxkTm9kZS0+cHJlZGlj
dGlvbigpKSkgeworICAgICAgICAgICAgICAgIGlmIChpc1N0cmluZ1NwZWN1bGF0aW9uKGNoaWxk
Tm9kZS0+cHJlZGljdGlvbigpKSkKKyAgICAgICAgICAgICAgICAgICAgZm9yTm9kZShjaGlsZE5v
ZGUpLmZpbHRlcihTcGVjU3RyaW5nKTsKICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAg
ICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNDZWxsKTsKLSAgICAg
ICAgICAgICAgICBub2RlLnNldENhbkV4aXQodHJ1ZSk7CisgICAgICAgICAgICAgICAgICAgIGZv
ck5vZGUoY2hpbGROb2RlKS5maWx0ZXIoU3BlY0NlbGwpOworICAgICAgICAgICAgICAgIG5vZGUt
PnNldENhbkV4aXQodHJ1ZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgZm9y
Tm9kZShub2RlSW5kZXgpLnNldChTcGVjU3RyaW5nKTsKKyAgICAgICAgZm9yTm9kZShub2RlKS5z
ZXQoU3BlY1N0cmluZyk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgICAgIApAQCAt
NzgzLDI2ICs3ODIsMjYgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGlu
ZAogICAgIGNhc2UgQ29tcGFyZUVxOiB7CiAgICAgICAgIGJvb2wgY29uc3RhbnRXYXNTZXQgPSBm
YWxzZTsKIAotICAgICAgICBKU1ZhbHVlIGxlZnRDb25zdCA9IGZvck5vZGUobm9kZS5jaGlsZDEo
KSkudmFsdWUoKTsKLSAgICAgICAgSlNWYWx1ZSByaWdodENvbnN0ID0gZm9yTm9kZShub2RlLmNo
aWxkMigpKS52YWx1ZSgpOworICAgICAgICBKU1ZhbHVlIGxlZnRDb25zdCA9IGZvck5vZGUobm9k
ZS0+Y2hpbGQxKCkpLnZhbHVlKCk7CisgICAgICAgIEpTVmFsdWUgcmlnaHRDb25zdCA9IGZvck5v
ZGUobm9kZS0+Y2hpbGQyKCkpLnZhbHVlKCk7CiAgICAgICAgIGlmIChsZWZ0Q29uc3QgJiYgcmln
aHRDb25zdCAmJiBsZWZ0Q29uc3QuaXNOdW1iZXIoKSAmJiByaWdodENvbnN0LmlzTnVtYmVyKCkp
IHsKICAgICAgICAgICAgIGRvdWJsZSBhID0gbGVmdENvbnN0LmFzTnVtYmVyKCk7CiAgICAgICAg
ICAgICBkb3VibGUgYiA9IHJpZ2h0Q29uc3QuYXNOdW1iZXIoKTsKICAgICAgICAgICAgIHN3aXRj
aCAobm9kZS5vcCgpKSB7CiAgICAgICAgICAgICBjYXNlIENvbXBhcmVMZXNzOgotICAgICAgICAg
ICAgICAgIGNvbnN0YW50V2FzU2V0ID0gdHJ5U2V0Q29uc3RhbnQobm9kZUluZGV4LCBqc0Jvb2xl
YW4oYSA8IGIpKTsKKyAgICAgICAgICAgICAgICBjb25zdGFudFdhc1NldCA9IHRyeVNldENvbnN0
YW50KG5vZGUsIGpzQm9vbGVhbihhIDwgYikpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgY2FzZSBDb21wYXJlTGVzc0VxOgotICAgICAgICAgICAgICAgIGNvbnN0YW50V2Fz
U2V0ID0gdHJ5U2V0Q29uc3RhbnQobm9kZUluZGV4LCBqc0Jvb2xlYW4oYSA8PSBiKSk7CisgICAg
ICAgICAgICAgICAgY29uc3RhbnRXYXNTZXQgPSB0cnlTZXRDb25zdGFudChub2RlLCBqc0Jvb2xl
YW4oYSA8PSBiKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIENv
bXBhcmVHcmVhdGVyOgotICAgICAgICAgICAgICAgIGNvbnN0YW50V2FzU2V0ID0gdHJ5U2V0Q29u
c3RhbnQobm9kZUluZGV4LCBqc0Jvb2xlYW4oYSA+IGIpKTsKKyAgICAgICAgICAgICAgICBjb25z
dGFudFdhc1NldCA9IHRyeVNldENvbnN0YW50KG5vZGUsIGpzQm9vbGVhbihhID4gYikpOwogICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBDb21wYXJlR3JlYXRlckVxOgot
ICAgICAgICAgICAgICAgIGNvbnN0YW50V2FzU2V0ID0gdHJ5U2V0Q29uc3RhbnQobm9kZUluZGV4
LCBqc0Jvb2xlYW4oYSA+PSBiKSk7CisgICAgICAgICAgICAgICAgY29uc3RhbnRXYXNTZXQgPSB0
cnlTZXRDb25zdGFudChub2RlLCBqc0Jvb2xlYW4oYSA+PSBiKSk7CiAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICBjYXNlIENvbXBhcmVFcToKLSAgICAgICAgICAgICAgICBjb25z
dGFudFdhc1NldCA9IHRyeVNldENvbnN0YW50KG5vZGVJbmRleCwganNCb29sZWFuKGEgPT0gYikp
OworICAgICAgICAgICAgICAgIGNvbnN0YW50V2FzU2V0ID0gdHJ5U2V0Q29uc3RhbnQobm9kZSwg
anNCb29sZWFuKGEgPT0gYikpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
ZGVmYXVsdDoKICAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTgxMSwy
NCArODEwLDI0IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAg
ICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgaWYgKCFjb25zdGFudFdh
c1NldCAmJiBub2RlLm9wKCkgPT0gQ29tcGFyZUVxKSB7Ci0gICAgICAgICAgICBTcGVjdWxhdGVk
VHlwZSBsZWZ0VHlwZSA9IGZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlOwotICAgICAgICAg
ICAgU3BlY3VsYXRlZFR5cGUgcmlnaHRUeXBlID0gZm9yTm9kZShub2RlLmNoaWxkMigpKS5tX3R5
cGU7CisgICAgICAgIGlmICghY29uc3RhbnRXYXNTZXQgJiYgbm9kZS0+b3AoKSA9PSBDb21wYXJl
RXEpIHsKKyAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIGxlZnRUeXBlID0gZm9yTm9kZShub2Rl
LT5jaGlsZDEoKSkubV90eXBlOworICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgcmlnaHRUeXBl
ID0gZm9yTm9kZShub2RlLT5jaGlsZDIoKSkubV90eXBlOwogICAgICAgICAgICAgaWYgKChpc0lu
dDMyU3BlY3VsYXRpb24obGVmdFR5cGUpICYmIGlzT3RoZXJTcGVjdWxhdGlvbihyaWdodFR5cGUp
KQogICAgICAgICAgICAgICAgIHx8IChpc090aGVyU3BlY3VsYXRpb24obGVmdFR5cGUpICYmIGlz
SW50MzJTcGVjdWxhdGlvbihyaWdodFR5cGUpKSkKLSAgICAgICAgICAgICAgICBjb25zdGFudFdh
c1NldCA9IHRyeVNldENvbnN0YW50KG5vZGVJbmRleCwganNCb29sZWFuKGZhbHNlKSk7CisgICAg
ICAgICAgICAgICAgY29uc3RhbnRXYXNTZXQgPSB0cnlTZXRDb25zdGFudChub2RlLCBqc0Jvb2xl
YW4oZmFsc2UpKTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgaWYgKGNvbnN0YW50V2Fz
U2V0KSB7CiAgICAgICAgICAgICBtX2ZvdW5kQ29uc3RhbnRzID0gdHJ1ZTsKLSAgICAgICAgICAg
IG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7CisgICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZh
bHNlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBm
b3JOb2RlKG5vZGVJbmRleCkuc2V0KFNwZWNCb29sZWFuKTsKKyAgICAgICAgZm9yTm9kZShub2Rl
KS5zZXQoU3BlY0Jvb2xlYW4pOwogICAgICAgICAKLSAgICAgICAgTm9kZSYgbGVmdCA9IG1fZ3Jh
cGhbbm9kZS5jaGlsZDEoKV07Ci0gICAgICAgIE5vZGUmIHJpZ2h0ID0gbV9ncmFwaFtub2RlLmNo
aWxkMigpXTsKKyAgICAgICAgTm9kZSogbGVmdCA9IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKKyAg
ICAgICAgTm9kZSogcmlnaHQgPSBub2RlLT5jaGlsZDIoKS5ub2RlKCk7CiAgICAgICAgIFNwZWN1
bGF0ZWRUeXBlIGZpbHRlcjsKICAgICAgICAgU3BlY3VsYXRlZFR5cGVDaGVja2VyIGNoZWNrZXI7
CiAgICAgICAgIGlmIChOb2RlOjpzaG91bGRTcGVjdWxhdGVJbnRlZ2VyKGxlZnQsIHJpZ2h0KSkg
ewpAQCAtODM4LDEyMSArODM3LDExOSBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5z
aWduZWQgaW5kCiAgICAgICAgICAgICBmaWx0ZXIgPSBTcGVjTnVtYmVyOwogICAgICAgICAgICAg
Y2hlY2tlciA9IGlzTnVtYmVyU3BlY3VsYXRpb247CiAgICAgICAgIH0gZWxzZSBpZiAobm9kZS5v
cCgpID09IENvbXBhcmVFcSkgewotICAgICAgICAgICAgaWYgKChtX2dyYXBoLmlzQ29uc3RhbnQo
bm9kZS5jaGlsZDEoKS5pbmRleCgpKQotICAgICAgICAgICAgICAgICAmJiBtX2dyYXBoLnZhbHVl
T2ZKU0NvbnN0YW50KG5vZGUuY2hpbGQxKCkuaW5kZXgoKSkuaXNOdWxsKCkpCi0gICAgICAgICAg
ICAgICAgfHwgKG1fZ3JhcGguaXNDb25zdGFudChub2RlLmNoaWxkMigpLmluZGV4KCkpCi0gICAg
ICAgICAgICAgICAgICAgICYmIG1fZ3JhcGgudmFsdWVPZkpTQ29uc3RhbnQobm9kZS5jaGlsZDIo
KS5pbmRleCgpKS5pc051bGwoKSkpIHsKKyAgICAgICAgICAgIGlmICgobV9ncmFwaC5pc0NvbnN0
YW50KGxlZnQpCisgICAgICAgICAgICAgICAgICYmIG1fZ3JhcGgudmFsdWVPZkpTQ29uc3RhbnQo
bGVmdCkuaXNOdWxsKCkpCisgICAgICAgICAgICAgICAgfHwgKG1fZ3JhcGguaXNDb25zdGFudChy
aWdodCkKKyAgICAgICAgICAgICAgICAgICAgJiYgbV9ncmFwaC52YWx1ZU9mSlNDb25zdGFudChy
aWdodCkuaXNOdWxsKCkpKSB7CiAgICAgICAgICAgICAgICAgLy8gV2UgY2FuIGV4aXQgaWYgd2Ug
aGF2ZW4ndCBmaXJlZCB0aGUgTWFzcXVlcmFkZXNBc1VuZGVmaW5kIHdhdGNocG9pbnQgeWV0Lgot
ICAgICAgICAgICAgICAgIG5vZGUuc2V0Q2FuRXhpdChtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
Rm9yKG5vZGUuY29kZU9yaWdpbiktPm1hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50KCkt
PmlzU3RpbGxWYWxpZCgpKTsKKyAgICAgICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3RGb3Iobm9kZS0+Y29kZU9yaWdpbiktPm1hc3F1ZXJhZGVzQXNV
bmRlZmluZWRXYXRjaHBvaW50KCktPmlzU3RpbGxWYWxpZCgpKTsKICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKGxlZnQu
c2hvdWxkU3BlY3VsYXRlU3RyaW5nKCkgfHwgcmlnaHQuc2hvdWxkU3BlY3VsYXRlU3RyaW5nKCkp
IHsKLSAgICAgICAgICAgICAgICBub2RlLnNldENhbkV4aXQoZmFsc2UpOworICAgICAgICAgICAg
aWYgKGxlZnQtPnNob3VsZFNwZWN1bGF0ZVN0cmluZygpIHx8IHJpZ2h0LT5zaG91bGRTcGVjdWxh
dGVTdHJpbmcoKSkgeworICAgICAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwog
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfSAKLSAgICAgICAgICAgIGlmIChs
ZWZ0LnNob3VsZFNwZWN1bGF0ZU5vblN0cmluZ0NlbGwoKSAmJiByaWdodC5zaG91bGRTcGVjdWxh
dGVOb25TdHJpbmdDZWxsT3JPdGhlcigpKSB7Ci0gICAgICAgICAgICAgICAgbm9kZS5zZXRDYW5F
eGl0KHRydWUpOwotICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVy
KFNwZWNDZWxsICYgflNwZWNTdHJpbmcpOwotICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZS5j
aGlsZDIoKSkuZmlsdGVyKChTcGVjQ2VsbCAmIH5TcGVjU3RyaW5nKSB8IFNwZWNPdGhlcik7Ci0g
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAobGVm
dC5zaG91bGRTcGVjdWxhdGVOb25TdHJpbmdDZWxsT3JPdGhlcigpICYmIHJpZ2h0LnNob3VsZFNw
ZWN1bGF0ZU5vblN0cmluZ0NlbGwoKSkgewotICAgICAgICAgICAgICAgIG5vZGUuc2V0Q2FuRXhp
dCh0cnVlKTsKLSAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcigo
U3BlY0NlbGwgJiB+U3BlY1N0cmluZykgfCBTcGVjT3RoZXIpOwotICAgICAgICAgICAgICAgIGZv
ck5vZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKFNwZWNDZWxsICYgflNwZWNTdHJpbmcpOwotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGxlZnQu
c2hvdWxkU3BlY3VsYXRlTm9uU3RyaW5nQ2VsbCgpICYmIHJpZ2h0LnNob3VsZFNwZWN1bGF0ZU5v
blN0cmluZ0NlbGwoKSkgewotICAgICAgICAgICAgICAgIG5vZGUuc2V0Q2FuRXhpdCh0cnVlKTsK
LSAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjQ2VsbCAm
IH5TcGVjU3RyaW5nKTsKLSAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQyKCkpLmZp
bHRlcihTcGVjQ2VsbCAmIH5TcGVjU3RyaW5nKTsKKyAgICAgICAgICAgIGlmIChsZWZ0LT5zaG91
bGRTcGVjdWxhdGVOb25TdHJpbmdDZWxsKCkgJiYgcmlnaHQtPnNob3VsZFNwZWN1bGF0ZU5vblN0
cmluZ0NlbGxPck90aGVyKCkpIHsKKyAgICAgICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRy
dWUpOworICAgICAgICAgICAgICAgIGZvck5vZGUobGVmdCkuZmlsdGVyKFNwZWNDZWxsICYgflNw
ZWNTdHJpbmcpOworICAgICAgICAgICAgICAgIGZvck5vZGUocmlnaHQpLmZpbHRlcigoU3BlY0Nl
bGwgJiB+U3BlY1N0cmluZykgfCBTcGVjT3RoZXIpOworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGxlZnQtPnNob3VsZFNwZWN1bGF0ZU5vblN0
cmluZ0NlbGxPck90aGVyKCkgJiYgcmlnaHQtPnNob3VsZFNwZWN1bGF0ZU5vblN0cmluZ0NlbGwo
KSkgeworICAgICAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7CisgICAgICAgICAg
ICAgICAgZm9yTm9kZShsZWZ0KS5maWx0ZXIoKFNwZWNDZWxsICYgflNwZWNTdHJpbmcpIHwgU3Bl
Y090aGVyKTsKKyAgICAgICAgICAgICAgICBmb3JOb2RlKHJpZ2h0KS5maWx0ZXIoU3BlY0NlbGwg
JiB+U3BlY1N0cmluZyk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBpZiAobGVmdC0+c2hvdWxkU3BlY3VsYXRlTm9uU3RyaW5nQ2VsbCgpICYmIHJp
Z2h0LT5zaG91bGRTcGVjdWxhdGVOb25TdHJpbmdDZWxsKCkpIHsKKyAgICAgICAgICAgICAgICBu
b2RlLT5zZXRDYW5FeGl0KHRydWUpOworICAgICAgICAgICAgICAgIGZvck5vZGUobGVmdCkuZmls
dGVyKFNwZWNDZWxsICYgflNwZWNTdHJpbmcpOworICAgICAgICAgICAgICAgIGZvck5vZGUocmln
aHQpLmZpbHRlcihTcGVjQ2VsbCAmIH5TcGVjU3RyaW5nKTsKICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgIH0KICAKICAgICAgICAgICAgIGZpbHRlciA9IFNwZWNUb3A7CiAgICAg
ICAgICAgICBjaGVja2VyID0gaXNBbnlTcGVjdWxhdGlvbjsKLSAgICAgICAgICAgIGNsb2JiZXJX
b3JsZChub2RlLmNvZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7CisgICAgICAgICAgICBjbG9iYmVy
V29ybGQobm9kZS0+Y29kZU9yaWdpbiwgaW5kZXhJbkJsb2NrKTsKICAgICAgICAgfSBlbHNlIHsK
ICAgICAgICAgICAgIGZpbHRlciA9IFNwZWNUb3A7CiAgICAgICAgICAgICBjaGVja2VyID0gaXNB
bnlTcGVjdWxhdGlvbjsKLSAgICAgICAgICAgIGNsb2JiZXJXb3JsZChub2RlLmNvZGVPcmlnaW4s
IGluZGV4SW5CbG9jayk7CisgICAgICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+Y29kZU9yaWdp
biwgaW5kZXhJbkJsb2NrKTsKICAgICAgICAgfQogICAgICAgICBub2RlLnNldENhbkV4aXQoCi0g
ICAgICAgICAgICAhY2hlY2tlcihmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkKLSAgICAg
ICAgICAgIHx8ICFjaGVja2VyKGZvck5vZGUobm9kZS5jaGlsZDIoKSkubV90eXBlKSk7Ci0gICAg
ICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKGZpbHRlcik7Ci0gICAgICAgIGZvck5v
ZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKGZpbHRlcik7CisgICAgICAgICAgICAhY2hlY2tlcihm
b3JOb2RlKGxlZnQpLm1fdHlwZSkKKyAgICAgICAgICAgIHx8ICFjaGVja2VyKGZvck5vZGUocmln
aHQpLm1fdHlwZSkpOworICAgICAgICBmb3JOb2RlKGxlZnQpLmZpbHRlcihmaWx0ZXIpOworICAg
ICAgICBmb3JOb2RlKHJpZ2h0KS5maWx0ZXIoZmlsdGVyKTsKICAgICAgICAgYnJlYWs7CiAgICAg
fQogICAgICAgICAgICAgCiAgICAgY2FzZSBDb21wYXJlU3RyaWN0RXE6IHsKLSAgICAgICAgSlNW
YWx1ZSBsZWZ0ID0gZm9yTm9kZShub2RlLmNoaWxkMSgpKS52YWx1ZSgpOwotICAgICAgICBKU1Zh
bHVlIHJpZ2h0ID0gZm9yTm9kZShub2RlLmNoaWxkMigpKS52YWx1ZSgpOworICAgICAgICBOb2Rl
KiBsZWZ0Tm9kZSA9IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKKyAgICAgICAgTm9kZSogcmlnaHRO
b2RlID0gbm9kZS0+Y2hpbGQyKCkubm9kZSgpOworICAgICAgICBKU1ZhbHVlIGxlZnQgPSBmb3JO
b2RlKGxlZnROb2RlKS52YWx1ZSgpOworICAgICAgICBKU1ZhbHVlIHJpZ2h0ID0gZm9yTm9kZShy
aWdodE5vZGUpLnZhbHVlKCk7CiAgICAgICAgIGlmIChsZWZ0ICYmIHJpZ2h0ICYmIGxlZnQuaXNO
dW1iZXIoKSAmJiByaWdodC5pc051bWJlcigpCi0gICAgICAgICAgICAmJiB0cnlTZXRDb25zdGFu
dChub2RlSW5kZXgsIGpzQm9vbGVhbihsZWZ0LmFzTnVtYmVyKCkgPT0gcmlnaHQuYXNOdW1iZXIo
KSkpKSB7CisgICAgICAgICAgICAmJiB0cnlTZXRDb25zdGFudChub2RlLCBqc0Jvb2xlYW4obGVm
dC5hc051bWJlcigpID09IHJpZ2h0LmFzTnVtYmVyKCkpKSkgewogICAgICAgICAgICAgbV9mb3Vu
ZENvbnN0YW50cyA9IHRydWU7CiAgICAgICAgICAgICBub2RlLnNldENhbkV4aXQoZmFsc2UpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgZm9yTm9kZShub2RlSW5kZXgp
LnNldChTcGVjQm9vbGVhbik7Ci0gICAgICAgIGlmIChtX2dyYXBoLmlzSlNDb25zdGFudChub2Rl
LmNoaWxkMSgpLmluZGV4KCkpKSB7Ci0gICAgICAgICAgICBKU1ZhbHVlIHZhbHVlID0gbV9ncmFw
aC52YWx1ZU9mSlNDb25zdGFudChub2RlLmNoaWxkMSgpLmluZGV4KCkpOworICAgICAgICBmb3JO
b2RlKG5vZGUpLnNldChTcGVjQm9vbGVhbik7CisgICAgICAgIGlmIChtX2dyYXBoLmlzSlNDb25z
dGFudChsZWZ0Tm9kZSkpIHsKKyAgICAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBtX2dyYXBoLnZh
bHVlT2ZKU0NvbnN0YW50KGxlZnROb2RlKTsKICAgICAgICAgICAgIGlmICghdmFsdWUuaXNOdW1i
ZXIoKSAmJiAhdmFsdWUuaXNTdHJpbmcoKSkgewotICAgICAgICAgICAgICAgIG5vZGUuc2V0Q2Fu
RXhpdChmYWxzZSk7CisgICAgICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CiAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAg
aWYgKG1fZ3JhcGguaXNKU0NvbnN0YW50KG5vZGUuY2hpbGQyKCkuaW5kZXgoKSkpIHsKLSAgICAg
ICAgICAgIEpTVmFsdWUgdmFsdWUgPSBtX2dyYXBoLnZhbHVlT2ZKU0NvbnN0YW50KG5vZGUuY2hp
bGQyKCkuaW5kZXgoKSk7CisgICAgICAgIGlmIChtX2dyYXBoLmlzSlNDb25zdGFudChyaWdodE5v
ZGUpKSB7CisgICAgICAgICAgICBKU1ZhbHVlIHZhbHVlID0gbV9ncmFwaC52YWx1ZU9mSlNDb25z
dGFudChyaWdodE5vZGUpOwogICAgICAgICAgICAgaWYgKCF2YWx1ZS5pc051bWJlcigpICYmICF2
YWx1ZS5pc1N0cmluZygpKSB7Ci0gICAgICAgICAgICAgICAgbm9kZS5zZXRDYW5FeGl0KGZhbHNl
KTsKKyAgICAgICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICBpZiAoTm9kZTo6
c2hvdWxkU3BlY3VsYXRlSW50ZWdlcigKLSAgICAgICAgICAgICAgICBtX2dyYXBoW25vZGUuY2hp
bGQxKCldLCBtX2dyYXBoW25vZGUuY2hpbGQyKCldKSkgeworICAgICAgICBpZiAoTm9kZTo6c2hv
dWxkU3BlY3VsYXRlSW50ZWdlcihsZWZ0Tm9kZSwgcmlnaHROb2RlKSkgewogICAgICAgICAgICAg
c3BlY3VsYXRlSW50MzJCaW5hcnkobm9kZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
fQotICAgICAgICBpZiAoTm9kZTo6c2hvdWxkU3BlY3VsYXRlTnVtYmVyKAotICAgICAgICAgICAg
ICAgIG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0sIG1fZ3JhcGhbbm9kZS5jaGlsZDIoKV0pKSB7Cisg
ICAgICAgIGlmIChOb2RlOjpzaG91bGRTcGVjdWxhdGVOdW1iZXIobGVmdE5vZGUsIHJpZ2h0Tm9k
ZSkpIHsKICAgICAgICAgICAgIHNwZWN1bGF0ZU51bWJlckJpbmFyeShub2RlKTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIE5vZGUmIGxlZnROb2RlID0gbV9ncmFwaFtu
b2RlLmNoaWxkMSgpXTsKLSAgICAgICAgTm9kZSYgcmlnaHROb2RlID0gbV9ncmFwaFtub2RlLmNo
aWxkMigpXTsKLSAgICAgICAgaWYgKGxlZnROb2RlLnNob3VsZFNwZWN1bGF0ZVN0cmluZygpIHx8
IHJpZ2h0Tm9kZS5zaG91bGRTcGVjdWxhdGVTdHJpbmcoKSkgewotICAgICAgICAgICAgbm9kZS5z
ZXRDYW5FeGl0KGZhbHNlKTsKKyAgICAgICAgaWYgKGxlZnROb2RlLT5zaG91bGRTcGVjdWxhdGVT
dHJpbmcoKSB8fCByaWdodE5vZGUtPnNob3VsZFNwZWN1bGF0ZVN0cmluZygpKSB7CisgICAgICAg
ICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9Ci0gICAgICAgIGlmIChsZWZ0Tm9kZS5zaG91bGRTcGVjdWxhdGVOb25TdHJpbmdDZWxsKCkg
JiYgcmlnaHROb2RlLnNob3VsZFNwZWN1bGF0ZU5vblN0cmluZ0NlbGwoKSkgeworICAgICAgICBp
ZiAobGVmdE5vZGUtPnNob3VsZFNwZWN1bGF0ZU5vblN0cmluZ0NlbGwoKSAmJiByaWdodE5vZGUt
PnNob3VsZFNwZWN1bGF0ZU5vblN0cmluZ0NlbGwoKSkgewogICAgICAgICAgICAgbm9kZS5zZXRD
YW5FeGl0KHRydWUpOwotICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIo
KFNwZWNDZWxsICYgflNwZWNTdHJpbmcpIHwgU3BlY090aGVyKTsKLSAgICAgICAgICAgIGZvck5v
ZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKChTcGVjQ2VsbCAmIH5TcGVjU3RyaW5nKSB8IFNwZWNP
dGhlcik7CisgICAgICAgICAgICBmb3JOb2RlKGxlZnROb2RlKS5maWx0ZXIoKFNwZWNDZWxsICYg
flNwZWNTdHJpbmcpIHwgU3BlY090aGVyKTsKKyAgICAgICAgICAgIGZvck5vZGUocmlnaHROb2Rl
KS5maWx0ZXIoKFNwZWNDZWxsICYgflNwZWNTdHJpbmcpIHwgU3BlY090aGVyKTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7Cisg
ICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICBicmVhazsKICAgICB9CiAg
ICAgICAgIAogICAgIGNhc2UgU3RyaW5nQ2hhckNvZGVBdDoKLSAgICAgICAgbm9kZS5zZXRDYW5F
eGl0KHRydWUpOwotICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjU3Ry
aW5nKTsKLSAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMigpKS5maWx0ZXIoU3BlY0ludDMyKTsK
LSAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChTcGVjSW50MzIpOworICAgICAgICBub2Rl
LT5zZXRDYW5FeGl0KHRydWUpOworICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5maWx0
ZXIoU3BlY1N0cmluZyk7CisgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQyKCkpLmZpbHRlcihT
cGVjSW50MzIpOworICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjSW50MzIpOwogICAgICAg
ICBicmVhazsKICAgICAgICAgCiAgICAgY2FzZSBTdHJpbmdDaGFyQXQ6Ci0gICAgICAgIG5vZGUu
c2V0Q2FuRXhpdCh0cnVlKTsKLSAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIo
U3BlY1N0cmluZyk7Ci0gICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJ
bnQzMik7Ci0gICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoU3BlY1N0cmluZyk7CisgICAg
ICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7CisgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQx
KCkpLmZpbHRlcihTcGVjU3RyaW5nKTsKKyAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDIoKSku
ZmlsdGVyKFNwZWNJbnQzMik7CisgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNTdHJpbmcp
OwogICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgIGNhc2UgR2V0QnlWYWw6IHsKLSAg
ICAgICAgbm9kZS5zZXRDYW5FeGl0KHRydWUpOwotICAgICAgICBzd2l0Y2ggKG5vZGUuYXJyYXlN
b2RlKCkudHlwZSgpKSB7CisgICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7CisgICAgICAg
IHN3aXRjaCAobm9kZS0+YXJyYXlNb2RlKCkudHlwZSgpKSB7CiAgICAgICAgIGNhc2UgQXJyYXk6
OlNlbGVjdFVzaW5nUHJlZGljdGlvbnM6CiAgICAgICAgIGNhc2UgQXJyYXk6OlVucHJvZmlsZWQ6
CiAgICAgICAgIGNhc2UgQXJyYXk6OlVuZGVjaWRlZDoKQEAgLTk2Miw4MSArOTU5LDgxIEBAIGJv
b2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgICAgIG1faXNW
YWxpZCA9IGZhbHNlOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6Okdl
bmVyaWM6Ci0gICAgICAgICAgICBjbG9iYmVyV29ybGQobm9kZS5jb2RlT3JpZ2luLCBpbmRleElu
QmxvY2spOwotICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLm1ha2VUb3AoKTsKKyAgICAg
ICAgICAgIGNsb2JiZXJXb3JsZChub2RlLT5jb2RlT3JpZ2luLCBpbmRleEluQmxvY2spOworICAg
ICAgICAgICAgZm9yTm9kZShub2RlKS5tYWtlVG9wKCk7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgY2FzZSBBcnJheTo6U3RyaW5nOgotICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxk
MigpKS5maWx0ZXIoU3BlY0ludDMyKTsKLSAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5z
ZXQoU3BlY1N0cmluZyk7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMigpKS5maWx0
ZXIoU3BlY0ludDMyKTsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNTdHJpbmcp
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OkFyZ3VtZW50czoKLSAg
ICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7Ci0gICAg
ICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkubWFrZVRvcCgpOworICAgICAgICAgICAgZm9yTm9k
ZShub2RlLT5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7CisgICAgICAgICAgICBmb3JOb2Rl
KG5vZGUpLm1ha2VUb3AoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEFycmF5
OjpJbnQzMjoKLSAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJ
bnQzMik7Ci0gICAgICAgICAgICBpZiAobm9kZS5hcnJheU1vZGUoKS5pc091dE9mQm91bmRzKCkp
IHsKLSAgICAgICAgICAgICAgICBjbG9iYmVyV29ybGQobm9kZS5jb2RlT3JpZ2luLCBpbmRleElu
QmxvY2spOwotICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5tYWtlVG9wKCk7Cisg
ICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMigpKS5maWx0ZXIoU3BlY0ludDMyKTsKKyAg
ICAgICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS5pc091dE9mQm91bmRzKCkpIHsKKyAgICAg
ICAgICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+Y29kZU9yaWdpbiwgaW5kZXhJbkJsb2NrKTsK
KyAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLm1ha2VUb3AoKTsKICAgICAgICAgICAgIH0g
ZWxzZQotICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoU3BlY0ludDMyKTsK
KyAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjSW50MzIpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OkRvdWJsZToKLSAgICAgICAgICAgIGZvck5v
ZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7Ci0gICAgICAgICAgICBpZiAobm9k
ZS5hcnJheU1vZGUoKS5pc091dE9mQm91bmRzKCkpIHsKLSAgICAgICAgICAgICAgICBjbG9iYmVy
V29ybGQobm9kZS5jb2RlT3JpZ2luLCBpbmRleEluQmxvY2spOwotICAgICAgICAgICAgICAgIGZv
ck5vZGUobm9kZUluZGV4KS5tYWtlVG9wKCk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKG5vZGUu
YXJyYXlNb2RlKCkuaXNTYW5lQ2hhaW4oKSkKLSAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGVJ
bmRleCkuc2V0KFNwZWNEb3VibGUpOworICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDIo
KSkuZmlsdGVyKFNwZWNJbnQzMik7CisgICAgICAgICAgICBpZiAobm9kZS0+YXJyYXlNb2RlKCku
aXNPdXRPZkJvdW5kcygpKSB7CisgICAgICAgICAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUtPmNv
ZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7CisgICAgICAgICAgICAgICAgZm9yTm9kZShub2RlKS5t
YWtlVG9wKCk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKG5vZGUtPmFycmF5TW9kZSgpLmlzU2Fu
ZUNoYWluKCkpCisgICAgICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0RvdWJsZSk7
CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNl
dChTcGVjRG91YmxlUmVhbCk7CisgICAgICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3Bl
Y0RvdWJsZVJlYWwpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OkNv
bnRpZ3VvdXM6CiAgICAgICAgIGNhc2UgQXJyYXk6OkFycmF5U3RvcmFnZToKICAgICAgICAgY2Fz
ZSBBcnJheTo6U2xvd1B1dEFycmF5U3RvcmFnZToKLSAgICAgICAgICAgIGZvck5vZGUobm9kZS5j
aGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7Ci0gICAgICAgICAgICBpZiAobm9kZS5hcnJheU1v
ZGUoKS5pc091dE9mQm91bmRzKCkpCi0gICAgICAgICAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUu
Y29kZU9yaWdpbiwgaW5kZXhJbkJsb2NrKTsKLSAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4
KS5tYWtlVG9wKCk7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMigpKS5maWx0ZXIo
U3BlY0ludDMyKTsKKyAgICAgICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS5pc091dE9mQm91
bmRzKCkpCisgICAgICAgICAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUtPmNvZGVPcmlnaW4sIGlu
ZGV4SW5CbG9jayk7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLm1ha2VUb3AoKTsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEFycmF5OjpJbnQ4QXJyYXk6Ci0gICAgICAgICAg
ICBmb3JOb2RlKG5vZGUuY2hpbGQyKCkpLmZpbHRlcihTcGVjSW50MzIpOwotICAgICAgICAgICAg
Zm9yTm9kZShub2RlSW5kZXgpLnNldChTcGVjSW50MzIpOworICAgICAgICAgICAgZm9yTm9kZShu
b2RlLT5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7CisgICAgICAgICAgICBmb3JOb2RlKG5v
ZGUpLnNldChTcGVjSW50MzIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJy
YXk6OkludDE2QXJyYXk6Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQyKCkpLmZpbHRl
cihTcGVjSW50MzIpOwotICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChTcGVjSW50
MzIpOworICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQz
Mik7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjSW50MzIpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OkludDMyQXJyYXk6Ci0gICAgICAgICAgICBm
b3JOb2RlKG5vZGUuY2hpbGQyKCkpLmZpbHRlcihTcGVjSW50MzIpOwotICAgICAgICAgICAgZm9y
Tm9kZShub2RlSW5kZXgpLnNldChTcGVjSW50MzIpOworICAgICAgICAgICAgZm9yTm9kZShub2Rl
LT5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUp
LnNldChTcGVjSW50MzIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6
OlVpbnQ4QXJyYXk6Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQyKCkpLmZpbHRlcihT
cGVjSW50MzIpOwotICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChTcGVjSW50MzIp
OworICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7
CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjSW50MzIpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OlVpbnQ4Q2xhbXBlZEFycmF5OgotICAgICAgICAg
ICAgZm9yTm9kZShub2RlLmNoaWxkMigpKS5maWx0ZXIoU3BlY0ludDMyKTsKLSAgICAgICAgICAg
IGZvck5vZGUobm9kZUluZGV4KS5zZXQoU3BlY0ludDMyKTsKKyAgICAgICAgICAgIGZvck5vZGUo
bm9kZS0+Y2hpbGQyKCkpLmZpbHRlcihTcGVjSW50MzIpOworICAgICAgICAgICAgZm9yTm9kZShu
b2RlKS5zZXQoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEFy
cmF5OjpVaW50MTZBcnJheToKLSAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDIoKSkuZmls
dGVyKFNwZWNJbnQzMik7Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFNwZWNJ
bnQzMik7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMigpKS5maWx0ZXIoU3BlY0lu
dDMyKTsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNJbnQzMik7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6VWludDMyQXJyYXk6Ci0gICAgICAgICAg
ICBmb3JOb2RlKG5vZGUuY2hpbGQyKCkpLmZpbHRlcihTcGVjSW50MzIpOwotICAgICAgICAgICAg
aWYgKG5vZGUuc2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKQotICAgICAgICAgICAgICAgIGZvck5v
ZGUobm9kZUluZGV4KS5zZXQoU3BlY0ludDMyKTsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZS0+
Y2hpbGQyKCkpLmZpbHRlcihTcGVjSW50MzIpOworICAgICAgICAgICAgaWYgKG5vZGUtPnNob3Vs
ZFNwZWN1bGF0ZUludGVnZXIoKSkKKyAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChT
cGVjSW50MzIpOwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGZvck5vZGUobm9k
ZUluZGV4KS5zZXQoU3BlY0RvdWJsZSk7CisgICAgICAgICAgICAgICAgZm9yTm9kZShub2RlKS5z
ZXQoU3BlY0RvdWJsZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6
RmxvYXQzMkFycmF5OgotICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMigpKS5maWx0ZXIo
U3BlY0ludDMyKTsKLSAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoU3BlY0RvdWJs
ZSk7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMigpKS5maWx0ZXIoU3BlY0ludDMy
KTsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNEb3VibGUpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OkZsb2F0NjRBcnJheToKLSAgICAgICAgICAg
IGZvck5vZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7Ci0gICAgICAgICAgICBm
b3JOb2RlKG5vZGVJbmRleCkuc2V0KFNwZWNEb3VibGUpOworICAgICAgICAgICAgZm9yTm9kZShu
b2RlLT5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7CisgICAgICAgICAgICBmb3JOb2RlKG5v
ZGUpLnNldChTcGVjRG91YmxlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBkZWZhdWx0
OgogICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC0xMDQ3LDQzICsxMDQ0LDQz
IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgICAg
IAogICAgIGNhc2UgUHV0QnlWYWw6CiAgICAgY2FzZSBQdXRCeVZhbEFsaWFzOiB7Ci0gICAgICAg
IG5vZGUuc2V0Q2FuRXhpdCh0cnVlKTsKKyAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsK
ICAgICAgICAgRWRnZSBjaGlsZDEgPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApOwogICAg
ICAgICBFZGdlIGNoaWxkMiA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSk7CiAgICAgICAg
IEVkZ2UgY2hpbGQzID0gbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAyKTsKLSAgICAgICAgc3dp
dGNoIChub2RlLmFycmF5TW9kZSgpLm1vZGVGb3JQdXQoKS50eXBlKCkpIHsKKyAgICAgICAgc3dp
dGNoIChub2RlLT5hcnJheU1vZGUoKS5tb2RlRm9yUHV0KCkudHlwZSgpKSB7CiAgICAgICAgIGNh
c2UgQXJyYXk6OkZvcmNlRXhpdDoKICAgICAgICAgICAgIG1faXNWYWxpZCA9IGZhbHNlOwogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OkdlbmVyaWM6Ci0gICAgICAgICAg
ICBjbG9iYmVyV29ybGQobm9kZS5jb2RlT3JpZ2luLCBpbmRleEluQmxvY2spOworICAgICAgICAg
ICAgY2xvYmJlcldvcmxkKG5vZGUtPmNvZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6SW50MzI6CiAgICAgICAgICAgICBmb3JO
b2RlKGNoaWxkMSkuZmlsdGVyKFNwZWNDZWxsKTsKICAgICAgICAgICAgIGZvck5vZGUoY2hpbGQy
KS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGZvck5vZGUoY2hpbGQzKS5maWx0ZXIo
U3BlY0ludDMyKTsKLSAgICAgICAgICAgIGlmIChub2RlLmFycmF5TW9kZSgpLmlzT3V0T2ZCb3Vu
ZHMoKSkKLSAgICAgICAgICAgICAgICBjbG9iYmVyV29ybGQobm9kZS5jb2RlT3JpZ2luLCBpbmRl
eEluQmxvY2spOworICAgICAgICAgICAgaWYgKG5vZGUtPmFycmF5TW9kZSgpLmlzT3V0T2ZCb3Vu
ZHMoKSkKKyAgICAgICAgICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+Y29kZU9yaWdpbiwgaW5k
ZXhJbkJsb2NrKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEFycmF5OjpEb3Vi
bGU6CiAgICAgICAgICAgICBmb3JOb2RlKGNoaWxkMSkuZmlsdGVyKFNwZWNDZWxsKTsKICAgICAg
ICAgICAgIGZvck5vZGUoY2hpbGQyKS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGZv
ck5vZGUoY2hpbGQzKS5maWx0ZXIoU3BlY1JlYWxOdW1iZXIpOwotICAgICAgICAgICAgaWYgKG5v
ZGUuYXJyYXlNb2RlKCkuaXNPdXRPZkJvdW5kcygpKQotICAgICAgICAgICAgICAgIGNsb2JiZXJX
b3JsZChub2RlLmNvZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7CisgICAgICAgICAgICBpZiAobm9k
ZS0+YXJyYXlNb2RlKCkuaXNPdXRPZkJvdW5kcygpKQorICAgICAgICAgICAgICAgIGNsb2JiZXJX
b3JsZChub2RlLT5jb2RlT3JpZ2luLCBpbmRleEluQmxvY2spOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3VvdXM6CiAgICAgICAgIGNhc2UgQXJyYXk6OkFy
cmF5U3RvcmFnZToKICAgICAgICAgICAgIGZvck5vZGUoY2hpbGQxKS5maWx0ZXIoU3BlY0NlbGwp
OwogICAgICAgICAgICAgZm9yTm9kZShjaGlsZDIpLmZpbHRlcihTcGVjSW50MzIpOwotICAgICAg
ICAgICAgaWYgKG5vZGUuYXJyYXlNb2RlKCkuaXNPdXRPZkJvdW5kcygpKQotICAgICAgICAgICAg
ICAgIGNsb2JiZXJXb3JsZChub2RlLmNvZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7CisgICAgICAg
ICAgICBpZiAobm9kZS0+YXJyYXlNb2RlKCkuaXNPdXRPZkJvdW5kcygpKQorICAgICAgICAgICAg
ICAgIGNsb2JiZXJXb3JsZChub2RlLT5jb2RlT3JpZ2luLCBpbmRleEluQmxvY2spOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OlNsb3dQdXRBcnJheVN0b3JhZ2U6CiAg
ICAgICAgICAgICBmb3JOb2RlKGNoaWxkMSkuZmlsdGVyKFNwZWNDZWxsKTsKICAgICAgICAgICAg
IGZvck5vZGUoY2hpbGQyKS5maWx0ZXIoU3BlY0ludDMyKTsKLSAgICAgICAgICAgIGlmIChub2Rl
LmFycmF5TW9kZSgpLm1heVN0b3JlVG9Ib2xlKCkpCi0gICAgICAgICAgICAgICAgY2xvYmJlcldv
cmxkKG5vZGUuY29kZU9yaWdpbiwgaW5kZXhJbkJsb2NrKTsKKyAgICAgICAgICAgIGlmIChub2Rl
LT5hcnJheU1vZGUoKS5tYXlTdG9yZVRvSG9sZSgpKQorICAgICAgICAgICAgICAgIGNsb2JiZXJX
b3JsZChub2RlLT5jb2RlT3JpZ2luLCBpbmRleEluQmxvY2spOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIGNhc2UgQXJyYXk6OkFyZ3VtZW50czoKICAgICAgICAgICAgIGZvck5vZGUoY2hp
bGQxKS5maWx0ZXIoU3BlY0NlbGwpOwpAQCAtMTA5Miw3ICsxMDg5LDcgQEAgYm9vbCBBYnN0cmFj
dFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICBjYXNlIEFycmF5OjpJbnQ4QXJy
YXk6CiAgICAgICAgICAgICBmb3JOb2RlKGNoaWxkMSkuZmlsdGVyKFNwZWNDZWxsKTsKICAgICAg
ICAgICAgIGZvck5vZGUoY2hpbGQyKS5maWx0ZXIoU3BlY0ludDMyKTsKLSAgICAgICAgICAgIGlm
IChtX2dyYXBoW2NoaWxkM10uc2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKQorICAgICAgICAgICAg
aWYgKGNoaWxkMy0+c2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKQogICAgICAgICAgICAgICAgIGZv
ck5vZGUoY2hpbGQzKS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGVsc2UKICAgICAg
ICAgICAgICAgICBmb3JOb2RlKGNoaWxkMykuZmlsdGVyKFNwZWNOdW1iZXIpOwpAQCAtMTEwMCw3
ICsxMDk3LDcgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAg
ICAgICBjYXNlIEFycmF5OjpJbnQxNkFycmF5OgogICAgICAgICAgICAgZm9yTm9kZShjaGlsZDEp
LmZpbHRlcihTcGVjQ2VsbCk7CiAgICAgICAgICAgICBmb3JOb2RlKGNoaWxkMikuZmlsdGVyKFNw
ZWNJbnQzMik7Ci0gICAgICAgICAgICBpZiAobV9ncmFwaFtjaGlsZDNdLnNob3VsZFNwZWN1bGF0
ZUludGVnZXIoKSkKKyAgICAgICAgICAgIGlmIChjaGlsZDMtPnNob3VsZFNwZWN1bGF0ZUludGVn
ZXIoKSkKICAgICAgICAgICAgICAgICBmb3JOb2RlKGNoaWxkMykuZmlsdGVyKFNwZWNJbnQzMik7
CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgZm9yTm9kZShjaGlsZDMpLmZpbHRl
cihTcGVjTnVtYmVyKTsKQEAgLTExMDgsNyArMTEwNSw3IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6
ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgY2FzZSBBcnJheTo6SW50MzJBcnJheToKICAg
ICAgICAgICAgIGZvck5vZGUoY2hpbGQxKS5maWx0ZXIoU3BlY0NlbGwpOwogICAgICAgICAgICAg
Zm9yTm9kZShjaGlsZDIpLmZpbHRlcihTcGVjSW50MzIpOwotICAgICAgICAgICAgaWYgKG1fZ3Jh
cGhbY2hpbGQzXS5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpCisgICAgICAgICAgICBpZiAoY2hp
bGQzLT5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpCiAgICAgICAgICAgICAgICAgZm9yTm9kZShj
aGlsZDMpLmZpbHRlcihTcGVjSW50MzIpOwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAg
ICAgIGZvck5vZGUoY2hpbGQzKS5maWx0ZXIoU3BlY051bWJlcik7CkBAIC0xMTE2LDcgKzExMTMs
NyBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgIGNh
c2UgQXJyYXk6OlVpbnQ4QXJyYXk6CiAgICAgICAgICAgICBmb3JOb2RlKGNoaWxkMSkuZmlsdGVy
KFNwZWNDZWxsKTsKICAgICAgICAgICAgIGZvck5vZGUoY2hpbGQyKS5maWx0ZXIoU3BlY0ludDMy
KTsKLSAgICAgICAgICAgIGlmIChtX2dyYXBoW2NoaWxkM10uc2hvdWxkU3BlY3VsYXRlSW50ZWdl
cigpKQorICAgICAgICAgICAgaWYgKGNoaWxkMy0+c2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKQog
ICAgICAgICAgICAgICAgIGZvck5vZGUoY2hpbGQzKS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAg
ICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBmb3JOb2RlKGNoaWxkMykuZmlsdGVyKFNwZWNO
dW1iZXIpOwpAQCAtMTEyNCw3ICsxMTIxLDcgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRl
KHVuc2lnbmVkIGluZAogICAgICAgICBjYXNlIEFycmF5OjpVaW50OENsYW1wZWRBcnJheToKICAg
ICAgICAgICAgIGZvck5vZGUoY2hpbGQxKS5maWx0ZXIoU3BlY0NlbGwpOwogICAgICAgICAgICAg
Zm9yTm9kZShjaGlsZDIpLmZpbHRlcihTcGVjSW50MzIpOwotICAgICAgICAgICAgaWYgKG1fZ3Jh
cGhbY2hpbGQzXS5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpCisgICAgICAgICAgICBpZiAoY2hp
bGQzLT5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpCiAgICAgICAgICAgICAgICAgZm9yTm9kZShj
aGlsZDMpLmZpbHRlcihTcGVjSW50MzIpOwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAg
ICAgIGZvck5vZGUoY2hpbGQzKS5maWx0ZXIoU3BlY051bWJlcik7CkBAIC0xMTMyLDcgKzExMjks
NyBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgIGNh
c2UgQXJyYXk6OlVpbnQxNkFycmF5OgogICAgICAgICAgICAgZm9yTm9kZShjaGlsZDEpLmZpbHRl
cihTcGVjQ2VsbCk7CiAgICAgICAgICAgICBmb3JOb2RlKGNoaWxkMikuZmlsdGVyKFNwZWNJbnQz
Mik7Ci0gICAgICAgICAgICBpZiAobV9ncmFwaFtjaGlsZDNdLnNob3VsZFNwZWN1bGF0ZUludGVn
ZXIoKSkKKyAgICAgICAgICAgIGlmIChjaGlsZDMtPnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKSkK
ICAgICAgICAgICAgICAgICBmb3JOb2RlKGNoaWxkMykuZmlsdGVyKFNwZWNJbnQzMik7CiAgICAg
ICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgZm9yTm9kZShjaGlsZDMpLmZpbHRlcihTcGVj
TnVtYmVyKTsKQEAgLTExNDAsNyArMTEzNyw3IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0
ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgY2FzZSBBcnJheTo6VWludDMyQXJyYXk6CiAgICAgICAg
ICAgICBmb3JOb2RlKGNoaWxkMSkuZmlsdGVyKFNwZWNDZWxsKTsKICAgICAgICAgICAgIGZvck5v
ZGUoY2hpbGQyKS5maWx0ZXIoU3BlY0ludDMyKTsKLSAgICAgICAgICAgIGlmIChtX2dyYXBoW2No
aWxkM10uc2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKQorICAgICAgICAgICAgaWYgKGNoaWxkMy0+
c2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKQogICAgICAgICAgICAgICAgIGZvck5vZGUoY2hpbGQz
KS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBm
b3JOb2RlKGNoaWxkMykuZmlsdGVyKFNwZWNOdW1iZXIpOwpAQCAtMTE2MywxNjYgKzExNjAsMTg4
IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICB9CiAgICAg
ICAgICAgICAKICAgICBjYXNlIEFycmF5UHVzaDoKLSAgICAgICAgbm9kZS5zZXRDYW5FeGl0KHRy
dWUpOwotICAgICAgICBzd2l0Y2ggKG5vZGUuYXJyYXlNb2RlKCkudHlwZSgpKSB7CisgICAgICAg
IG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7CisgICAgICAgIHN3aXRjaCAobm9kZS0+YXJyYXlNb2Rl
KCkudHlwZSgpKSB7CiAgICAgICAgIGNhc2UgQXJyYXk6OkludDMyOgotICAgICAgICAgICAgZm9y
Tm9kZShub2RlLmNoaWxkMigpKS5maWx0ZXIoU3BlY0ludDMyKTsKKyAgICAgICAgICAgIGZvck5v
ZGUobm9kZS0+Y2hpbGQyKCkpLmZpbHRlcihTcGVjSW50MzIpOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIGNhc2UgQXJyYXk6OkRvdWJsZToKLSAgICAgICAgICAgIGZvck5vZGUobm9kZS5j
aGlsZDIoKSkuZmlsdGVyKFNwZWNSZWFsTnVtYmVyKTsKKyAgICAgICAgICAgIGZvck5vZGUobm9k
ZS0+Y2hpbGQyKCkpLmZpbHRlcihTcGVjUmVhbE51bWJlcik7CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAg
IGNsb2JiZXJXb3JsZChub2RlLmNvZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7Ci0gICAgICAgIGZv
ck5vZGUobm9kZUluZGV4KS5zZXQoU3BlY051bWJlcik7CisgICAgICAgIGNsb2JiZXJXb3JsZChu
b2RlLT5jb2RlT3JpZ2luLCBpbmRleEluQmxvY2spOworICAgICAgICBmb3JOb2RlKG5vZGUpLnNl
dChTcGVjTnVtYmVyKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICBjYXNlIEFy
cmF5UG9wOgotICAgICAgICBub2RlLnNldENhbkV4aXQodHJ1ZSk7Ci0gICAgICAgIGNsb2JiZXJX
b3JsZChub2RlLmNvZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7Ci0gICAgICAgIGZvck5vZGUobm9k
ZUluZGV4KS5tYWtlVG9wKCk7CisgICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7CisgICAg
ICAgIGNsb2JiZXJXb3JsZChub2RlLT5jb2RlT3JpZ2luLCBpbmRleEluQmxvY2spOworICAgICAg
ICBmb3JOb2RlKG5vZGUpLm1ha2VUb3AoKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAK
ICAgICBjYXNlIFJlZ0V4cEV4ZWM6CiAgICAgY2FzZSBSZWdFeHBUZXN0OgotICAgICAgICBub2Rl
LnNldENhbkV4aXQoCi0gICAgICAgICAgICAhaXNDZWxsU3BlY3VsYXRpb24oZm9yTm9kZShub2Rl
LmNoaWxkMSgpKS5tX3R5cGUpCi0gICAgICAgICAgICB8fCAhaXNDZWxsU3BlY3VsYXRpb24oZm9y
Tm9kZShub2RlLmNoaWxkMigpKS5tX3R5cGUpKTsKLSAgICAgICAgZm9yTm9kZShub2RlLmNoaWxk
MSgpKS5maWx0ZXIoU3BlY0NlbGwpOwotICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQyKCkpLmZp
bHRlcihTcGVjQ2VsbCk7Ci0gICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5tYWtlVG9wKCk7Cisg
ICAgICAgIG5vZGUtPnNldENhbkV4aXQoCisgICAgICAgICAgICAhaXNDZWxsU3BlY3VsYXRpb24o
Zm9yTm9kZShub2RlLT5jaGlsZDEoKSkubV90eXBlKQorICAgICAgICAgICAgfHwgIWlzQ2VsbFNw
ZWN1bGF0aW9uKGZvck5vZGUobm9kZS0+Y2hpbGQyKCkpLm1fdHlwZSkpOworICAgICAgICBmb3JO
b2RlKG5vZGUtPmNoaWxkMSgpKS5maWx0ZXIoU3BlY0NlbGwpOworICAgICAgICBmb3JOb2RlKG5v
ZGUtPmNoaWxkMigpKS5maWx0ZXIoU3BlY0NlbGwpOworICAgICAgICBmb3JOb2RlKG5vZGUpLm1h
a2VUb3AoKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICBjYXNlIEp1bXA6Ci0g
ICAgICAgIG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7CisgICAgICAgIG5vZGUtPnNldENhbkV4aXQo
ZmFsc2UpOwogICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgIGNhc2UgQnJhbmNoOiB7
Ci0gICAgICAgIEJvb2xlYW5SZXN1bHQgcmVzdWx0ID0gYm9vbGVhblJlc3VsdChub2RlLCBmb3JO
b2RlKG5vZGUuY2hpbGQxKCkpKTsKKyAgICAgICAgTm9kZSogY2hpbGQgPSBub2RlLT5jaGlsZDEo
KS5ub2RlKCk7CisgICAgICAgIEJvb2xlYW5SZXN1bHQgcmVzdWx0ID0gYm9vbGVhblJlc3VsdChu
b2RlLCBmb3JOb2RlKGNoaWxkKSk7CiAgICAgICAgIGlmIChyZXN1bHQgPT0gRGVmaW5pdGVseVRy
dWUpIHsKICAgICAgICAgICAgIG1fYnJhbmNoRGlyZWN0aW9uID0gVGFrZVRydWU7Ci0gICAgICAg
ICAgICBub2RlLnNldENhbkV4aXQoZmFsc2UpOworICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhp
dChmYWxzZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBpZiAocmVz
dWx0ID09IERlZmluaXRlbHlGYWxzZSkgewogICAgICAgICAgICAgbV9icmFuY2hEaXJlY3Rpb24g
PSBUYWtlRmFsc2U7Ci0gICAgICAgICAgICBub2RlLnNldENhbkV4aXQoZmFsc2UpOworICAgICAg
ICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgfQogICAgICAgICAvLyBGSVhNRTogVGhlIGFib3ZlIGhhbmRsZXMgdGhlIHRyaXZpYWwgY2Fz
ZXMgb2Ygc3BhcnNlIGNvbmRpdGlvbmFsCiAgICAgICAgIC8vIGNvbnN0YW50IHByb3BhZ2F0aW9u
LCBidXQgd2UgY2FuIGRvIGJldHRlcjoKICAgICAgICAgLy8gV2UgY2FuIHNwZWNpYWxpemUgdGhl
IHNvdXJjZSB2YXJpYWJsZSdzIHZhbHVlIG9uIGVhY2ggZGlyZWN0aW9uIG9mCiAgICAgICAgIC8v
IHRoZSBicmFuY2guCi0gICAgICAgIE5vZGUmIGNoaWxkID0gbV9ncmFwaFtub2RlLmNoaWxkMSgp
XTsKLSAgICAgICAgaWYgKGNoaWxkLnNob3VsZFNwZWN1bGF0ZUJvb2xlYW4oKSkKKyAgICAgICAg
aWYgKGNoaWxkLT5zaG91bGRTcGVjdWxhdGVCb29sZWFuKCkpCiAgICAgICAgICAgICBzcGVjdWxh
dGVCb29sZWFuVW5hcnkobm9kZSk7Ci0gICAgICAgIGVsc2UgaWYgKGNoaWxkLnNob3VsZFNwZWN1
bGF0ZU5vblN0cmluZ0NlbGxPck90aGVyKCkpIHsKLSAgICAgICAgICAgIG5vZGUuc2V0Q2FuRXhp
dCh0cnVlKTsKLSAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKChTcGVj
Q2VsbCAmIH5TcGVjU3RyaW5nKSB8IFNwZWNPdGhlcik7Ci0gICAgICAgIH0gZWxzZSBpZiAoY2hp
bGQuc2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKQorICAgICAgICBlbHNlIGlmIChjaGlsZC0+c2hv
dWxkU3BlY3VsYXRlTm9uU3RyaW5nQ2VsbE9yT3RoZXIoKSkgeworICAgICAgICAgICAgbm9kZS0+
c2V0Q2FuRXhpdCh0cnVlKTsKKyAgICAgICAgICAgIGZvck5vZGUoY2hpbGQpLmZpbHRlcigoU3Bl
Y0NlbGwgJiB+U3BlY1N0cmluZykgfCBTcGVjT3RoZXIpOworICAgICAgICB9IGVsc2UgaWYgKGNo
aWxkLT5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpCiAgICAgICAgICAgICBzcGVjdWxhdGVJbnQz
MlVuYXJ5KG5vZGUpOwotICAgICAgICBlbHNlIGlmIChjaGlsZC5zaG91bGRTcGVjdWxhdGVOdW1i
ZXIoKSkKKyAgICAgICAgZWxzZSBpZiAoY2hpbGQtPnNob3VsZFNwZWN1bGF0ZU51bWJlcigpKQog
ICAgICAgICAgICAgc3BlY3VsYXRlTnVtYmVyVW5hcnkobm9kZSk7CiAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgIG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7CisgICAgICAgICAgICBub2RlLT5zZXRD
YW5FeGl0KGZhbHNlKTsKICAgICAgICAgbV9icmFuY2hEaXJlY3Rpb24gPSBUYWtlQm90aDsKICAg
ICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAgICAgCiAgICAgY2FzZSBSZXR1cm46CiAgICAg
ICAgIG1faXNWYWxpZCA9IGZhbHNlOwotICAgICAgICBub2RlLnNldENhbkV4aXQoZmFsc2UpOwor
ICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAg
IAogICAgIGNhc2UgVGhyb3c6CiAgICAgY2FzZSBUaHJvd1JlZmVyZW5jZUVycm9yOgogICAgICAg
ICBtX2lzVmFsaWQgPSBmYWxzZTsKLSAgICAgICAgbm9kZS5zZXRDYW5FeGl0KHRydWUpOworICAg
ICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOwogICAgICAgICBicmVhazsKICAgICAgICAgICAg
IAogICAgIGNhc2UgVG9QcmltaXRpdmU6IHsKLSAgICAgICAgSlNWYWx1ZSBjaGlsZENvbnN0ID0g
Zm9yTm9kZShub2RlLmNoaWxkMSgpKS52YWx1ZSgpOwotICAgICAgICBpZiAoY2hpbGRDb25zdCAm
JiBjaGlsZENvbnN0LmlzTnVtYmVyKCkgJiYgdHJ5U2V0Q29uc3RhbnQobm9kZUluZGV4LCBjaGls
ZENvbnN0KSkgeworICAgICAgICBOb2RlKiBjaGlsZCA9IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsK
KyAgICAgICAgCisgICAgICAgIEpTVmFsdWUgY2hpbGRDb25zdCA9IGZvck5vZGUoY2hpbGQpLnZh
bHVlKCk7CisgICAgICAgIGlmIChjaGlsZENvbnN0ICYmIGNoaWxkQ29uc3QuaXNOdW1iZXIoKSAm
JiB0cnlTZXRDb25zdGFudChub2RlLCBjaGlsZENvbnN0KSkgewogICAgICAgICAgICAgbV9mb3Vu
ZENvbnN0YW50cyA9IHRydWU7Ci0gICAgICAgICAgICBub2RlLnNldENhbkV4aXQoZmFsc2UpOwor
ICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgTm9kZSYgY2hpbGQgPSBtX2dyYXBoW25vZGUu
Y2hpbGQxKCldOwotICAgICAgICBpZiAoY2hpbGQuc2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKSB7
CisgICAgICAgIGlmIChjaGlsZC0+c2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKSB7CiAgICAgICAg
ICAgICBzcGVjdWxhdGVJbnQzMlVuYXJ5KG5vZGUpOwotICAgICAgICAgICAgZm9yTm9kZShub2Rl
SW5kZXgpLnNldChTcGVjSW50MzIpOworICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3Bl
Y0ludDMyKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKLSAgICAgICAgQWJzdHJh
Y3RWYWx1ZSYgc291cmNlID0gZm9yTm9kZShub2RlLmNoaWxkMSgpKTsKLSAgICAgICAgQWJzdHJh
Y3RWYWx1ZSYgZGVzdGluYXRpb24gPSBmb3JOb2RlKG5vZGVJbmRleCk7Ci0gICAgICAgICAgICAK
KyAgICAgICAgQWJzdHJhY3RWYWx1ZSYgc291cmNlID0gZm9yTm9kZShjaGlsZCk7CisgICAgICAg
IEFic3RyYWN0VmFsdWUmIGRlc3RpbmF0aW9uID0gZm9yTm9kZShub2RlKTsKKyAgICAgICAgCisg
ICAgICAgIC8vIE5CLiBUaGUgbW9yZSBjYW5vbmljYWwgd2F5IG9mIHdyaXRpbmcgdGhpcyB3b3Vs
ZCBoYXZlIGJlZW46CisgICAgICAgIC8vCisgICAgICAgIC8vIGRlc3RpbmF0aW9uID0gc291cmNl
OworICAgICAgICAvLyBpZiAoZGVzdGluYXRpb24ubV90eXBlICYgIShTcGVjTnVtYmVyIHwgU3Bl
Y1N0cmluZyB8IFNwZWNCb29sZWFuKSkgeworICAgICAgICAvLyAgICAgZGVzdGluYXRpb24uZmls
dGVyKFNwZWNOdW1iZXIgfCBTcGVjU3RyaW5nIHwgU3BlY0Jvb2xlYW4pOworICAgICAgICAvLyAg
ICAgQWJzdHJhY3RWYWx1ZSBzdHJpbmc7CisgICAgICAgIC8vICAgICBzdHJpbmcuc2V0KGdsb2Jh
bERhdGEtPnN0cmluZ1N0cnVjdHVyZSk7CisgICAgICAgIC8vICAgICBkZXN0aW5hdGlvbi5tZXJn
ZShzdHJpbmcpOworICAgICAgICAvLyB9CisgICAgICAgIC8vCisgICAgICAgIC8vIFRoZSByZWFz
b24gd2h5IHRoaXMgd291bGQsIGluIG1vc3Qgb3RoZXIgY2FzZXMsIGhhdmUgYmVlbiBiZXR0ZXIg
aXMgdGhhdAorICAgICAgICAvLyB0aGVuIGRlc3RpbmF0aW9uIHdvdWxkIHByZXNlcnZlIGFueSBu
b24tU3BlY3VsYXRlZFR5cGUga25vd2xlZGdlIG9mIHNvdXJjZS4KKyAgICAgICAgLy8gQXMgaXQg
c3RhbmRzLCB0aGUgY29kZSBiZWxvdyBmb3JnZXRzIGFueSBub24tU3BlY3VsYXRlZFR5cGUga25v
d2xlZGdlIHRoYXQKKyAgICAgICAgLy8gc291cmNlIHdvdWxkIGhhdmUgaGFkLiBGb3J0dW5hdGVs
eSwgdGhvdWdoLCBmb3IgdGhpbmdzIGxpa2Ugc3RyaW5ncyBhbmQKKyAgICAgICAgLy8gbnVtYmVy
cyBhbmQgYm9vbGVhbnMsIHdlIGRvbid0IGNhcmUgYWJvdXQgdGhlIG5vbi1TcGVjdWxhdGVkVHlw
ZSBrbm93ZWRnZToKKyAgICAgICAgLy8gdGhlIHN0cnVjdHVyZSB3b24ndCB0ZWxsIHVzIGFueXRo
aW5nIHdlIGRvbid0IGFscmVhZHkga25vdywgYW5kIG5laXRoZXIKKyAgICAgICAgLy8gd2lsbCBB
cnJheU1vZGVzLiBBbmQgaWYgdGhlIHNvdXJjZSB3YXMgYSBtZWFuaW5nZnVsIGNvbnN0YW50IHRo
ZW4gd2UKKyAgICAgICAgLy8gd291bGQgaGF2ZSBoYW5kbGVkIHRoYXQgYWJvdmUuIFVuZm9ydHVu
YXRlbHksIHRoaXMgZG9lcyBtZWFuIHRoYXQKKyAgICAgICAgLy8gVG9QcmltaXRpdmUgd2lsbCBj
dXJyZW50bHkgZm9yZ2V0IHN0cmluZyBjb25zdGFudHMuIEJ1dCB0aGF0J3Mgbm90IGEgYmlnCisg
ICAgICAgIC8vIGRlYWwgc2luY2Ugd2UgZG9uJ3QgZG8gYW55IG9wdGltaXphdGlvbiBvbiB0aG9z
ZSBjdXJyZW50bHkuCisgICAgICAgIAogICAgICAgICBTcGVjdWxhdGVkVHlwZSB0eXBlID0gc291
cmNlLm1fdHlwZTsKICAgICAgICAgaWYgKHR5cGUgJiB+KFNwZWNOdW1iZXIgfCBTcGVjU3RyaW5n
IHwgU3BlY0Jvb2xlYW4pKSB7CiAgICAgICAgICAgICB0eXBlICY9IChTcGVjTnVtYmVyIHwgU3Bl
Y1N0cmluZyB8IFNwZWNCb29sZWFuKTsKICAgICAgICAgICAgIHR5cGUgfD0gU3BlY1N0cmluZzsK
ICAgICAgICAgfQogICAgICAgICBkZXN0aW5hdGlvbi5zZXQodHlwZSk7Ci0gICAgICAgIG5vZGUu
c2V0Q2FuRXhpdChmYWxzZSk7CisgICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwogICAg
ICAgICBicmVhazsKICAgICB9CiAgICAgICAgICAgICAKICAgICBjYXNlIFN0ckNhdDoKLSAgICAg
ICAgbm9kZS5zZXRDYW5FeGl0KGZhbHNlKTsKLSAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNl
dChTcGVjU3RyaW5nKTsKKyAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CisgICAgICAg
IGZvck5vZGUobm9kZSkuc2V0KFNwZWNTdHJpbmcpOwogICAgICAgICBicmVhazsKICAgICAgICAg
ICAgIAogICAgIGNhc2UgTmV3QXJyYXk6Ci0gICAgICAgIG5vZGUuc2V0Q2FuRXhpdCh0cnVlKTsK
LSAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihu
b2RlLmNvZGVPcmlnaW4pLT5hcnJheVN0cnVjdHVyZUZvckluZGV4aW5nVHlwZUR1cmluZ0FsbG9j
YXRpb24obm9kZS5pbmRleGluZ1R5cGUoKSkpOworICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRy
dWUpOworICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KG1fZ3JhcGguZ2xvYmFsT2JqZWN0
Rm9yKG5vZGUtPmNvZGVPcmlnaW4pLT5hcnJheVN0cnVjdHVyZUZvckluZGV4aW5nVHlwZUR1cmlu
Z0FsbG9jYXRpb24obm9kZS0+aW5kZXhpbmdUeXBlKCkpKTsKICAgICAgICAgbV9oYXZlU3RydWN0
dXJlcyA9IHRydWU7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAKICAgICBjYXNlIE5ld0FycmF5
QnVmZmVyOgotICAgICAgICBub2RlLnNldENhbkV4aXQodHJ1ZSk7Ci0gICAgICAgIGZvck5vZGUo
bm9kZUluZGV4KS5zZXQobV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS5jb2RlT3JpZ2luKS0+
YXJyYXlTdHJ1Y3R1cmVGb3JJbmRleGluZ1R5cGVEdXJpbmdBbGxvY2F0aW9uKG5vZGUuaW5kZXhp
bmdUeXBlKCkpKTsKKyAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKKyAgICAgICAgZm9y
Tm9kZShub2RlKS5zZXQobV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+Y29kZU9yaWdpbikt
PmFycmF5U3RydWN0dXJlRm9ySW5kZXhpbmdUeXBlRHVyaW5nQWxsb2NhdGlvbihub2RlLT5pbmRl
eGluZ1R5cGUoKSkpOwogICAgICAgICBtX2hhdmVTdHJ1Y3R1cmVzID0gdHJ1ZTsKICAgICAgICAg
YnJlYWs7CiAKICAgICBjYXNlIE5ld0FycmF5V2l0aFNpemU6Ci0gICAgICAgIG5vZGUuc2V0Q2Fu
RXhpdCh0cnVlKTsKLSAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY0lu
dDMyKTsKLSAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChTcGVjQXJyYXkpOworICAgICAg
ICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOworICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMSgp
KS5maWx0ZXIoU3BlY0ludDMyKTsKKyAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0FycmF5
KTsKICAgICAgICAgbV9oYXZlU3RydWN0dXJlcyA9IHRydWU7CiAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgCiAgICAgY2FzZSBOZXdSZWdleHA6Ci0gICAgICAgIG5vZGUuc2V0Q2FuRXhpdChm
YWxzZSk7Ci0gICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQobV9ncmFwaC5nbG9iYWxPYmpl
Y3RGb3Iobm9kZS5jb2RlT3JpZ2luKS0+cmVnRXhwU3RydWN0dXJlKCkpOworICAgICAgICBub2Rl
LT5zZXRDYW5FeGl0KGZhbHNlKTsKKyAgICAgICAgZm9yTm9kZShub2RlKS5zZXQobV9ncmFwaC5n
bG9iYWxPYmplY3RGb3Iobm9kZS0+Y29kZU9yaWdpbiktPnJlZ0V4cFN0cnVjdHVyZSgpKTsKICAg
ICAgICAgbV9oYXZlU3RydWN0dXJlcyA9IHRydWU7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgCiAgICAgY2FzZSBDb252ZXJ0VGhpczogewotICAgICAgICBOb2RlJiBjaGlsZCA9IG1fZ3Jh
cGhbbm9kZS5jaGlsZDEoKV07Ci0gICAgICAgIEFic3RyYWN0VmFsdWUmIHNvdXJjZSA9IGZvck5v
ZGUobm9kZS5jaGlsZDEoKSk7Ci0gICAgICAgIEFic3RyYWN0VmFsdWUmIGRlc3RpbmF0aW9uID0g
Zm9yTm9kZShub2RlSW5kZXgpOworICAgICAgICBOb2RlKiBjaGlsZCA9IG5vZGUtPmNoaWxkMSgp
Lm5vZGUoKTsKKyAgICAgICAgQWJzdHJhY3RWYWx1ZSYgc291cmNlID0gZm9yTm9kZShub2RlLT5j
aGlsZDEoKSk7CisgICAgICAgIEFic3RyYWN0VmFsdWUmIGRlc3RpbmF0aW9uID0gZm9yTm9kZShu
b2RlKTsKICAgICAgICAgICAgIAogICAgICAgICBpZiAoaXNPYmplY3RTcGVjdWxhdGlvbihzb3Vy
Y2UubV90eXBlKSkgewogICAgICAgICAgICAgLy8gVGhpcyBpcyB0aGUgc2ltcGxlIGNhc2UuIFdl
IGFscmVhZHkga25vdyB0aGF0IHRoZSBzb3VyY2UgaXMgYW4KICAgICAgICAgICAgIC8vIG9iamVj
dCwgc28gdGhlcmUncyBub3RoaW5nIHRvIGRvLiBJIGRvbid0IHRoaW5rIHRoaXMgY2FzZSB3aWxs
CiAgICAgICAgICAgICAvLyBiZSBoaXQsIGJ1dCB0aGVuIGFnYWluLCB5b3UgbmV2ZXIga25vdy4K
ICAgICAgICAgICAgIGRlc3RpbmF0aW9uID0gc291cmNlOwotICAgICAgICAgICAgbm9kZS5zZXRD
YW5FeGl0KGZhbHNlKTsKKyAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwogICAg
ICAgICAgICAgbV9mb3VuZENvbnN0YW50cyA9IHRydWU7IC8vIFRlbGwgdGhlIGNvbnN0YW50IGZv
bGRlciB0byB0dXJuIHRoaXMgaW50byBJZGVudGl0eS4KICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICB9CiAgICAgICAgIAotICAgICAgICBub2RlLnNldENhbkV4aXQodHJ1ZSk7CisgICAgICAg
IG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7CiAgICAgICAgIAotICAgICAgICBpZiAoaXNPdGhlclNw
ZWN1bGF0aW9uKGNoaWxkLnByZWRpY3Rpb24oKSkpIHsKKyAgICAgICAgaWYgKGlzT3RoZXJTcGVj
dWxhdGlvbihjaGlsZC0+cHJlZGljdGlvbigpKSkgewogICAgICAgICAgICAgc291cmNlLmZpbHRl
cihTcGVjT3RoZXIpOwogICAgICAgICAgICAgZGVzdGluYXRpb24uc2V0KFNwZWNPYmplY3RPdGhl
cik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgaWYg
KGlzT2JqZWN0U3BlY3VsYXRpb24oY2hpbGQucHJlZGljdGlvbigpKSkgeworICAgICAgICBpZiAo
aXNPYmplY3RTcGVjdWxhdGlvbihjaGlsZC0+cHJlZGljdGlvbigpKSkgewogICAgICAgICAgICAg
c291cmNlLmZpbHRlcihTcGVjT2JqZWN0TWFzayk7CiAgICAgICAgICAgICBkZXN0aW5hdGlvbiA9
IHNvdXJjZTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTMzNCwxMCArMTM1MywxMCBAQCBib29s
IEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgfQogCiAgICAgY2FzZSBD
cmVhdGVUaGlzOiB7Ci0gICAgICAgIEFic3RyYWN0VmFsdWUmIHNvdXJjZSA9IGZvck5vZGUobm9k
ZS5jaGlsZDEoKSk7Ci0gICAgICAgIEFic3RyYWN0VmFsdWUmIGRlc3RpbmF0aW9uID0gZm9yTm9k
ZShub2RlSW5kZXgpOworICAgICAgICBBYnN0cmFjdFZhbHVlJiBzb3VyY2UgPSBmb3JOb2RlKG5v
ZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgQWJzdHJhY3RWYWx1ZSYgZGVzdGluYXRpb24gPSBmb3JO
b2RlKG5vZGUpOwogICAgICAgICAKLSAgICAgICAgbm9kZS5zZXRDYW5FeGl0KCFpc0NlbGxTcGVj
dWxhdGlvbihzb3VyY2UubV90eXBlKSk7CisgICAgICAgIG5vZGUtPnNldENhbkV4aXQoIWlzQ2Vs
bFNwZWN1bGF0aW9uKHNvdXJjZS5tX3R5cGUpKTsKICAgICAgICAgICAgIAogICAgICAgICBzb3Vy
Y2UuZmlsdGVyKFNwZWNGdW5jdGlvbik7CiAgICAgICAgIGRlc3RpbmF0aW9uLnNldChTcGVjRmlu
YWxPYmplY3QpOwpAQCAtMTM0NSw0MSArMTM2NCw0MSBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4
ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgfQogICAgICAgICAKICAgICBjYXNlIEluaGVyaXRvcklE
V2F0Y2hwb2ludDoKLSAgICAgICAgbm9kZS5zZXRDYW5FeGl0KHRydWUpOworICAgICAgICBub2Rl
LT5zZXRDYW5FeGl0KHRydWUpOwogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgTmV3T2JqZWN0
OgotICAgICAgICBub2RlLnNldENhbkV4aXQoZmFsc2UpOwotICAgICAgICBmb3JOb2RlKG5vZGVJ
bmRleCkuc2V0KG5vZGUuc3RydWN0dXJlKCkpOworICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZh
bHNlKTsKKyAgICAgICAgZm9yTm9kZShub2RlKS5zZXQobm9kZS0+c3RydWN0dXJlKCkpOwogICAg
ICAgICBtX2hhdmVTdHJ1Y3R1cmVzID0gdHJ1ZTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgIAog
ICAgIGNhc2UgQ3JlYXRlQWN0aXZhdGlvbjoKLSAgICAgICAgbm9kZS5zZXRDYW5FeGl0KGZhbHNl
KTsKLSAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0Rm9yKG5vZGUuY29kZU9yaWdpbiktPmFjdGl2YXRpb25TdHJ1Y3R1cmUoKSk7CisgICAgICAg
IG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOworICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0Rm9yKG5vZGUtPmNvZGVPcmlnaW4pLT5hY3RpdmF0aW9uU3Ry
dWN0dXJlKCkpOwogICAgICAgICBtX2hhdmVTdHJ1Y3R1cmVzID0gdHJ1ZTsKICAgICAgICAgYnJl
YWs7CiAgICAgICAgIAogICAgIGNhc2UgQ3JlYXRlQXJndW1lbnRzOgotICAgICAgICBub2RlLnNl
dENhbkV4aXQoZmFsc2UpOwotICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3RGb3Iobm9kZS5jb2RlT3JpZ2luKS0+YXJndW1lbnRzU3RydWN0dXJl
KCkpOworICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKKyAgICAgICAgZm9yTm9kZShu
b2RlKS5zZXQobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdEZvcihub2RlLT5jb2RlT3JpZ2luKS0+
YXJndW1lbnRzU3RydWN0dXJlKCkpOwogICAgICAgICBtX2hhdmVTdHJ1Y3R1cmVzID0gdHJ1ZTsK
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIAogICAgIGNhc2UgVGVhck9mZkFjdGl2YXRpb246CiAg
ICAgY2FzZSBUZWFyT2ZmQXJndW1lbnRzOgotICAgICAgICBub2RlLnNldENhbkV4aXQoZmFsc2Up
OworICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgLy8gRG9lcyBub3Ro
aW5nIHRoYXQgaXMgdXNlci12aXNpYmxlLgogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgQ2hl
Y2tBcmd1bWVudHNOb3RDcmVhdGVkOgogICAgICAgICBpZiAoaXNFbXB0eVNwZWN1bGF0aW9uKAog
ICAgICAgICAgICAgICAgIG1fdmFyaWFibGVzLm9wZXJhbmQoCi0gICAgICAgICAgICAgICAgICAg
IG1fZ3JhcGguYXJndW1lbnRzUmVnaXN0ZXJGb3Iobm9kZS5jb2RlT3JpZ2luKSkubV90eXBlKSkg
ewotICAgICAgICAgICAgbm9kZS5zZXRDYW5FeGl0KGZhbHNlKTsKKyAgICAgICAgICAgICAgICAg
ICAgbV9ncmFwaC5hcmd1bWVudHNSZWdpc3RlckZvcihub2RlLT5jb2RlT3JpZ2luKSkubV90eXBl
KSkgeworICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgICAgICBt
X2ZvdW5kQ29uc3RhbnRzID0gdHJ1ZTsKICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBub2Rl
LnNldENhbkV4aXQodHJ1ZSk7CisgICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOwog
ICAgICAgICBicmVhazsKICAgICAgICAgCiAgICAgY2FzZSBHZXRNeUFyZ3VtZW50c0xlbmd0aDoK
QEAgLTEzODcsMTExICsxNDA2LDExMSBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5z
aWduZWQgaW5kCiAgICAgICAgIC8vIHRoZSBhcmd1bWVudHMgYSBiaXQuIE5vdGUgdGhhdCB0aGlz
IGlzIG5vdCBzdWZmaWNpZW50IHRvIGZvcmNlIGNvbnN0YW50IGZvbGRpbmcKICAgICAgICAgLy8g
b2YgR2V0TXlBcmd1bWVudHNMZW5ndGgsIGJlY2F1c2UgR2V0TXlBcmd1bWVudHNMZW5ndGggaXMg
YSBjbG9iYmVyaW5nIG9wZXJhdGlvbi4KICAgICAgICAgLy8gV2UgcGVyZm9ybSBmdXJ0aGVyIG9w
dGltaXphdGlvbnMgb24gdGhpcyBsYXRlciBvbi4KLSAgICAgICAgaWYgKG5vZGUuY29kZU9yaWdp
bi5pbmxpbmVDYWxsRnJhbWUpCi0gICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KGpz
TnVtYmVyKG5vZGUuY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50cy5zaXplKCkg
LSAxKSk7CisgICAgICAgIGlmIChub2RlLT5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSkKKyAg
ICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KGpzTnVtYmVyKG5vZGUtPmNvZGVPcmlnaW4uaW5s
aW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgpIC0gMSkpOwogICAgICAgICBlbHNlCi0gICAg
ICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFNwZWNJbnQzMik7CisgICAgICAgICAgICBm
b3JOb2RlKG5vZGUpLnNldChTcGVjSW50MzIpOwogICAgICAgICBub2RlLnNldENhbkV4aXQoCiAg
ICAgICAgICAgICAhaXNFbXB0eVNwZWN1bGF0aW9uKAogICAgICAgICAgICAgICAgIG1fdmFyaWFi
bGVzLm9wZXJhbmQoCi0gICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguYXJndW1lbnRzUmVnaXN0
ZXJGb3Iobm9kZS5jb2RlT3JpZ2luKSkubV90eXBlKSk7CisgICAgICAgICAgICAgICAgICAgIG1f
Z3JhcGguYXJndW1lbnRzUmVnaXN0ZXJGb3Iobm9kZS0+Y29kZU9yaWdpbikpLm1fdHlwZSkpOwog
ICAgICAgICBicmVhazsKICAgICAgICAgCiAgICAgY2FzZSBHZXRNeUFyZ3VtZW50c0xlbmd0aFNh
ZmU6Ci0gICAgICAgIG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7CisgICAgICAgIG5vZGUtPnNldENh
bkV4aXQoZmFsc2UpOwogICAgICAgICAvLyBUaGlzIHBvdGVudGlhbGx5IGNsb2JiZXJzIGFsbCBz
dHJ1Y3R1cmVzIGlmIHRoZSBhcmd1bWVudHMgb2JqZWN0IGhhZCBhIGdldHRlcgogICAgICAgICAv
LyBpbnN0YWxsZWQgb24gdGhlIGxlbmd0aCBwcm9wZXJ0eS4KLSAgICAgICAgY2xvYmJlcldvcmxk
KG5vZGUuY29kZU9yaWdpbiwgaW5kZXhJbkJsb2NrKTsKKyAgICAgICAgY2xvYmJlcldvcmxkKG5v
ZGUtPmNvZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7CiAgICAgICAgIC8vIFdlIGN1cnJlbnRseSBt
YWtlIG5vIGd1YXJhbnRlZSBhYm91dCB3aGF0IHRoaXMgcmV0dXJucyBiZWNhdXNlIGl0IGRvZXMg
bm90CiAgICAgICAgIC8vIHNwZWN1bGF0ZSB0aGF0IHRoZSBsZW5ndGggcHJvcGVydHkgaXMgYWN0
dWFsbHkgYSBsZW5ndGguCi0gICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5tYWtlVG9wKCk7Cisg
ICAgICAgIGZvck5vZGUobm9kZSkubWFrZVRvcCgpOwogICAgICAgICBicmVhazsKICAgICAgICAg
CiAgICAgY2FzZSBHZXRNeUFyZ3VtZW50QnlWYWw6Ci0gICAgICAgIG5vZGUuc2V0Q2FuRXhpdCh0
cnVlKTsKKyAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKICAgICAgICAgLy8gV2Uga25v
dyB0aGF0IHRoaXMgZXhlY3V0YWJsZSBkb2VzIG5vdCBlc2NhcGUgaXRzIGFyZ3VtZW50cywgc28g
d2UgY2FuIG9wdGltaXplCiAgICAgICAgIC8vIHRoZSBhcmd1bWVudHMgYSBiaXQuIE5vdGUgdGhh
dCB0aGlzIGVuZHMgdXAgYmVpbmcgZnVydGhlciBvcHRpbWl6ZWQgYnkgdGhlCiAgICAgICAgIC8v
IEFyZ3VtZW50c1NpbXBsaWZpY2F0aW9uUGhhc2UuCi0gICAgICAgIGZvck5vZGUobm9kZS5jaGls
ZDEoKSkuZmlsdGVyKFNwZWNJbnQzMik7Ci0gICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5tYWtl
VG9wKCk7CisgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRlcihTcGVjSW50MzIp
OworICAgICAgICBmb3JOb2RlKG5vZGUpLm1ha2VUb3AoKTsKICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIAogICAgIGNhc2UgR2V0TXlBcmd1bWVudEJ5VmFsU2FmZToKLSAgICAgICAgbm9kZS5zZXRD
YW5FeGl0KHRydWUpOworICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOwogICAgICAgICAv
LyBUaGlzIHBvdGVudGlhbGx5IGNsb2JiZXJzIGFsbCBzdHJ1Y3R1cmVzIGlmIHRoZSBwcm9wZXJ0
eSB3ZSdyZSBhY2Nlc3NpbmcgaGFzCiAgICAgICAgIC8vIGEgZ2V0dGVyLiBXZSBkb24ndCBzcGVj
dWxhdGUgYWdhaW5zdCB0aGlzLgotICAgICAgICBjbG9iYmVyV29ybGQobm9kZS5jb2RlT3JpZ2lu
LCBpbmRleEluQmxvY2spOworICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+Y29kZU9yaWdpbiwg
aW5kZXhJbkJsb2NrKTsKICAgICAgICAgLy8gQnV0IHdlIGRvIHNwZWN1bGF0ZSB0aGF0IHRoZSBp
bmRleCBpcyBhbiBpbnRlZ2VyLgotICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRl
cihTcGVjSW50MzIpOworICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5maWx0ZXIoU3Bl
Y0ludDMyKTsKICAgICAgICAgLy8gQW5kIHRoZSByZXN1bHQgaXMgdW5rbm93bi4KLSAgICAgICAg
Zm9yTm9kZShub2RlSW5kZXgpLm1ha2VUb3AoKTsKKyAgICAgICAgZm9yTm9kZShub2RlKS5tYWtl
VG9wKCk7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAKICAgICBjYXNlIE5ld0Z1bmN0aW9uOgog
ICAgIGNhc2UgTmV3RnVuY3Rpb25FeHByZXNzaW9uOgogICAgIGNhc2UgTmV3RnVuY3Rpb25Ob0No
ZWNrOgotICAgICAgICBub2RlLnNldENhbkV4aXQoZmFsc2UpOwotICAgICAgICBmb3JOb2RlKG5v
ZGVJbmRleCkuc2V0KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3RGb3Iobm9kZS5jb2RlT3JpZ2lu
KS0+ZnVuY3Rpb25TdHJ1Y3R1cmUoKSk7CisgICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2Up
OworICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0Rm9y
KG5vZGUtPmNvZGVPcmlnaW4pLT5mdW5jdGlvblN0cnVjdHVyZSgpKTsKICAgICAgICAgYnJlYWs7
CiAgICAgICAgIAogICAgIGNhc2UgR2V0Q2FsbGVlOgotICAgICAgICBub2RlLnNldENhbkV4aXQo
ZmFsc2UpOwotICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFNwZWNGdW5jdGlvbik7Cisg
ICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOworICAgICAgICBmb3JOb2RlKG5vZGUpLnNl
dChTcGVjRnVuY3Rpb24pOwogICAgICAgICBicmVhazsKICAgICAgICAgCiAgICAgY2FzZSBTZXRD
YWxsZWU6CiAgICAgY2FzZSBTZXRNeVNjb3BlOgotICAgICAgICBub2RlLnNldENhbkV4aXQoZmFs
c2UpOworICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICAKICAgICBjYXNlIEdldFNjb3BlOiAvLyBGSVhNRTogV2UgY291bGQgZ2V0IHJp
ZCBvZiB0aGVzZSBpZiB3ZSBrbm93IHRoYXQgdGhlIEpTRnVuY3Rpb24gaXMgYSBjb25zdGFudC4g
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwNjIwMgogICAgIGNhc2Ug
R2V0TXlTY29wZToKICAgICBjYXNlIFNraXBUb3BTY29wZToKLSAgICAgICAgbm9kZS5zZXRDYW5F
eGl0KGZhbHNlKTsKLSAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChTcGVjQ2VsbE90aGVy
KTsKKyAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CisgICAgICAgIGZvck5vZGUobm9k
ZSkuc2V0KFNwZWNDZWxsT3RoZXIpOwogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgU2tpcFNj
b3BlOiB7Ci0gICAgICAgIG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7Ci0gICAgICAgIEpTVmFsdWUg
Y2hpbGQgPSBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLnZhbHVlKCk7Ci0gICAgICAgIGlmIChjaGls
ZCAmJiB0cnlTZXRDb25zdGFudChub2RlSW5kZXgsIEpTVmFsdWUoanNDYXN0PEpTU2NvcGUqPihj
aGlsZC5hc0NlbGwoKSktPm5leHQoKSkpKSB7CisgICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFs
c2UpOworICAgICAgICBKU1ZhbHVlIGNoaWxkID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSkudmFs
dWUoKTsKKyAgICAgICAgaWYgKGNoaWxkICYmIHRyeVNldENvbnN0YW50KG5vZGUsIEpTVmFsdWUo
anNDYXN0PEpTU2NvcGUqPihjaGlsZC5hc0NlbGwoKSktPm5leHQoKSkpKSB7CiAgICAgICAgICAg
ICBtX2ZvdW5kQ29uc3RhbnRzID0gdHJ1ZTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9
Ci0gICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoU3BlY0NlbGxPdGhlcik7CisgICAgICAg
IGZvck5vZGUobm9kZSkuc2V0KFNwZWNDZWxsT3RoZXIpOwogICAgICAgICBicmVhazsKICAgICB9
CiAKICAgICBjYXNlIEdldFNjb3BlUmVnaXN0ZXJzOgotICAgICAgICBub2RlLnNldENhbkV4aXQo
ZmFsc2UpOwotICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjQ2VsbCk7
Ci0gICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5jbGVhcigpOyAvLyBUaGUgcmVzdWx0IGlzIG5v
dCBhIEpTIHZhbHVlLgorICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKKyAgICAgICAg
Zm9yTm9kZShub2RlLT5jaGlsZDEoKSkuZmlsdGVyKFNwZWNDZWxsKTsKKyAgICAgICAgZm9yTm9k
ZShub2RlKS5jbGVhcigpOyAvLyBUaGUgcmVzdWx0IGlzIG5vdCBhIEpTIHZhbHVlLgogICAgICAg
ICBicmVhazsKIAogICAgIGNhc2UgR2V0U2NvcGVkVmFyOgotICAgICAgICBub2RlLnNldENhbkV4
aXQoZmFsc2UpOwotICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkubWFrZVRvcCgpOworICAgICAg
ICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKKyAgICAgICAgZm9yTm9kZShub2RlKS5tYWtlVG9w
KCk7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAgY2FzZSBQdXRTY29wZWRWYXI6
Ci0gICAgICAgIG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7Ci0gICAgICAgIGNsb2JiZXJDYXB0dXJl
ZFZhcnMobm9kZS5jb2RlT3JpZ2luKTsKKyAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7
CisgICAgICAgIGNsb2JiZXJDYXB0dXJlZFZhcnMobm9kZS0+Y29kZU9yaWdpbik7CiAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgCiAgICAgY2FzZSBHZXRCeUlkOgogICAgIGNhc2UgR2V0QnlJ
ZEZsdXNoOgotICAgICAgICBub2RlLnNldENhbkV4aXQodHJ1ZSk7Ci0gICAgICAgIGlmICghbm9k
ZS5wcmVkaWN0aW9uKCkpIHsKKyAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKKyAgICAg
ICAgaWYgKCFub2RlLT5wcmVkaWN0aW9uKCkpIHsKICAgICAgICAgICAgIG1faXNWYWxpZCA9IGZh
bHNlOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKGlzQ2VsbFNw
ZWN1bGF0aW9uKG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ucHJlZGljdGlvbigpKSkgewotICAgICAg
ICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY0NlbGwpOworICAgICAgICBp
ZiAoaXNDZWxsU3BlY3VsYXRpb24obm9kZS0+Y2hpbGQxKCktPnByZWRpY3Rpb24oKSkpIHsKKyAg
ICAgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRlcihTcGVjQ2VsbCk7CiAKLSAg
ICAgICAgICAgIGlmIChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGZvck5vZGUobm9kZS5jaGlsZDEo
KSkuYmVzdFByb3ZlblN0cnVjdHVyZSgpKSB7CisgICAgICAgICAgICBpZiAoU3RydWN0dXJlKiBz
dHJ1Y3R1cmUgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5iZXN0UHJvdmVuU3RydWN0dXJlKCkp
IHsKICAgICAgICAgICAgICAgICBHZXRCeUlkU3RhdHVzIHN0YXR1cyA9IEdldEJ5SWRTdGF0dXM6
OmNvbXB1dGVGb3IoCiAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgubV9nbG9iYWxEYXRhLCBz
dHJ1Y3R1cmUsCi0gICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgubV9jb2RlQmxvY2stPmlkZW50
aWZpZXIobm9kZS5pZGVudGlmaWVyTnVtYmVyKCkpKTsKKyAgICAgICAgICAgICAgICAgICAgbV9n
cmFwaC5tX2NvZGVCbG9jay0+aWRlbnRpZmllcihub2RlLT5pZGVudGlmaWVyTnVtYmVyKCkpKTsK
ICAgICAgICAgICAgICAgICBpZiAoc3RhdHVzLmlzU2ltcGxlKCkpIHsKICAgICAgICAgICAgICAg
ICAgICAgLy8gQXNzZXJ0IHRoaW5ncyB0aGF0IHdlIGNhbid0IGhhbmRsZSBhbmQgdGhhdCB0aGUg
Y29tcHV0ZUZvcigpIG1ldGhvZAogICAgICAgICAgICAgICAgICAgICAvLyBhYm92ZSB3b24ndCBi
ZSBhYmxlIHRvIHJldHVybi4KQEAgLTE0OTksMjMgKzE1MTgsMjMgQEAgYm9vbCBBYnN0cmFjdFN0
YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICAgICAgICAgICAgICBBU1NFUlQoc3Rh
dHVzLmNoYWluKCkuaXNFbXB0eSgpKTsKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAg
ICAgICAgICAgIGlmIChzdGF0dXMuc3BlY2lmaWNWYWx1ZSgpKQotICAgICAgICAgICAgICAgICAg
ICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChzdGF0dXMuc3BlY2lmaWNWYWx1ZSgpKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KHN0YXR1cy5zcGVjaWZpY1Zh
bHVlKCkpOwogICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAg
ICBmb3JOb2RlKG5vZGVJbmRleCkubWFrZVRvcCgpOwotICAgICAgICAgICAgICAgICAgICBmb3JO
b2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihzdGF0dXMuc3RydWN0dXJlU2V0KCkpOworICAgICAg
ICAgICAgICAgICAgICAgICAgZm9yTm9kZShub2RlKS5tYWtlVG9wKCk7CisgICAgICAgICAgICAg
ICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRlcihzdGF0dXMuc3RydWN0dXJlU2V0
KCkpOwogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgbV9mb3VuZENv
bnN0YW50cyA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICBjbG9iYmVyV29ybGQobm9k
ZS5jb2RlT3JpZ2luLCBpbmRleEluQmxvY2spOwotICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCku
bWFrZVRvcCgpOworICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+Y29kZU9yaWdpbiwgaW5kZXhJ
bkJsb2NrKTsKKyAgICAgICAgZm9yTm9kZShub2RlKS5tYWtlVG9wKCk7CiAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgCiAgICAgY2FzZSBHZXRBcnJheUxlbmd0aDoKLSAgICAgICAgbm9kZS5z
ZXRDYW5FeGl0KHRydWUpOyAvLyBMaWVzLCBidXQgaXQncyB0cnVlIGZvciB0aGUgY29tbW9uIGNh
c2Ugb2YgSlNBcnJheSwgc28gaXQncyBnb29kIGVub3VnaC4KLSAgICAgICAgZm9yTm9kZShub2Rl
SW5kZXgpLnNldChTcGVjSW50MzIpOworICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOyAv
LyBMaWVzLCBidXQgaXQncyB0cnVlIGZvciB0aGUgY29tbW9uIGNhc2Ugb2YgSlNBcnJheSwgc28g
aXQncyBnb29kIGVub3VnaC4KKyAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0ludDMyKTsK
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIAogICAgIGNhc2UgQ2hlY2tFeGVjdXRhYmxlOiB7CkBA
IC0xNTIzLDIzICsxNTQyLDIzIEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25l
ZCBpbmQKICAgICAgICAgLy8gbW9yZSB0aG9yb3VnaGx5LiBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTA2MjAwCiAgICAgICAgIC8vIEZJWE1FOiBXZSBjb3VsZCBlbGlt
aW5hdGUgdGhlc2UgZW50aXJlbHkgaWYgd2Uga25vdyB0aGUgZXhhY3QgdmFsdWUgdGhhdCBmbG93
cyBpbnRvIHRoaXMuCiAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xMDYyMDEKLSAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3Bl
Y0NlbGwpOwotICAgICAgICBub2RlLnNldENhbkV4aXQodHJ1ZSk7CisgICAgICAgIGZvck5vZGUo
bm9kZS0+Y2hpbGQxKCkpLmZpbHRlcihTcGVjQ2VsbCk7CisgICAgICAgIG5vZGUtPnNldENhbkV4
aXQodHJ1ZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIAogICAgIGNhc2UgQ2hlY2tTdHJ1Y3R1
cmU6CiAgICAgY2FzZSBGb3J3YXJkQ2hlY2tTdHJ1Y3R1cmU6IHsKICAgICAgICAgLy8gRklYTUU6
IFdlIHNob3VsZCBiZSBhYmxlIHRvIHByb3BhZ2F0ZSB0aGUgc3RydWN0dXJlIHNldHMgb2YgY29u
c3RhbnRzIChpLmUuIHByb3RvdHlwZXMpLgotICAgICAgICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSA9
IGZvck5vZGUobm9kZS5jaGlsZDEoKSk7CisgICAgICAgIEFic3RyYWN0VmFsdWUmIHZhbHVlID0g
Zm9yTm9kZShub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgIC8vIElmIHRoaXMgc3RydWN0dXJlIGNo
ZWNrIGlzIGF0dGVtcHRpbmcgdG8gcHJvdmUga25vd2xlZGdlIGFscmVhZHkgaGVsZCBpbgogICAg
ICAgICAvLyB0aGUgZnV0dXJlUG9zc2libGVTdHJ1Y3R1cmUgc2V0IHRoZW4gdGhlIGNvbnN0YW50
IGZvbGRpbmcgcGhhc2Ugc2hvdWxkCiAgICAgICAgIC8vIHR1cm4gdGhpcyBpbnRvIGEgd2F0Y2hw
b2ludCBpbnN0ZWFkLgotICAgICAgICBTdHJ1Y3R1cmVTZXQmIHNldCA9IG5vZGUuc3RydWN0dXJl
U2V0KCk7CisgICAgICAgIFN0cnVjdHVyZVNldCYgc2V0ID0gbm9kZS0+c3RydWN0dXJlU2V0KCk7
CiAgICAgICAgIGlmICh2YWx1ZS5tX2Z1dHVyZVBvc3NpYmxlU3RydWN0dXJlLmlzU3Vic2V0T2Yo
c2V0KQogICAgICAgICAgICAgfHwgdmFsdWUubV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuaXNTdWJz
ZXRPZihzZXQpKQogICAgICAgICAgICAgbV9mb3VuZENvbnN0YW50cyA9IHRydWU7Ci0gICAgICAg
IG5vZGUuc2V0Q2FuRXhpdCgKKyAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCgKICAgICAgICAgICAg
ICF2YWx1ZS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5pc1N1YnNldE9mKHNldCkKICAgICAgICAg
ICAgIHx8ICFpc0NlbGxTcGVjdWxhdGlvbih2YWx1ZS5tX3R5cGUpKTsKICAgICAgICAgdmFsdWUu
ZmlsdGVyKHNldCk7CkBAIC0xNTQ5LDcgKzE1NjgsNyBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4
ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgIAogICAgIGNhc2UgU3RydWN0dXJlVHJhbnNpdGlv
bldhdGNocG9pbnQ6CiAgICAgY2FzZSBGb3J3YXJkU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9p
bnQ6IHsKLSAgICAgICAgQWJzdHJhY3RWYWx1ZSYgdmFsdWUgPSBmb3JOb2RlKG5vZGUuY2hpbGQx
KCkpOworICAgICAgICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSA9IGZvck5vZGUobm9kZS0+Y2hpbGQx
KCkpOwogCiAgICAgICAgIC8vIEl0J3Mgb25seSB2YWxpZCB0byBpc3N1ZSBhIHN0cnVjdHVyZSB0
cmFuc2l0aW9uIHdhdGNocG9pbnQgaWYgd2UgYWxyZWFkeQogICAgICAgICAvLyBrbm93IHRoYXQg
dGhlIHdhdGNocG9pbnQgY292ZXJzIGEgc3VwZXJzZXQgb2YgdGhlIHN0cnVjdHVyZXMga25vd24g
dG8KQEAgLTE1NTcsMTU0ICsxNTc2LDE1NCBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUo
dW5zaWduZWQgaW5kCiAgICAgICAgIC8vIEN1cnJlbnRseSwgd2Ugb25seSBpc3N1ZSBzaW5nbGV0
b24gd2F0Y2hwb2ludHMgKHRoYXQgY2hlY2sgb25lIHN0cnVjdHVyZSkKICAgICAgICAgLy8gYW5k
IG91ciBmdXR1cmVQb3NzaWJsZVN0cnVjdHVyZSBzZXQgY2FuIG9ubHkgY29udGFpbiB6ZXJvLCBv
bmUsIG9yIGFuCiAgICAgICAgIC8vIGluZmluaXR5IG9mIHN0cnVjdHVyZXMuCi0gICAgICAgIEFT
U0VSVCh2YWx1ZS5tX2Z1dHVyZVBvc3NpYmxlU3RydWN0dXJlLmlzU3Vic2V0T2YoU3RydWN0dXJl
U2V0KG5vZGUuc3RydWN0dXJlKCkpKSk7CisgICAgICAgIEFTU0VSVCh2YWx1ZS5tX2Z1dHVyZVBv
c3NpYmxlU3RydWN0dXJlLmlzU3Vic2V0T2YoU3RydWN0dXJlU2V0KG5vZGUtPnN0cnVjdHVyZSgp
KSkpOwogICAgICAgICAKICAgICAgICAgQVNTRVJUKHZhbHVlLmlzQ2xlYXIoKSB8fCBpc0NlbGxT
cGVjdWxhdGlvbih2YWx1ZS5tX3R5cGUpKTsgLy8gVmFsdWUgY291bGQgYmUgY2xlYXIgaWYgd2Un
dmUgcHJvdmVuIG11c3QtZXhpdCBkdWUgdG8gYSBzcGVjdWxhdGlvbiBzdGF0aWNhbGx5IGtub3du
IHRvIGJlIGJhZC4KLSAgICAgICAgdmFsdWUuZmlsdGVyKG5vZGUuc3RydWN0dXJlKCkpOworICAg
ICAgICB2YWx1ZS5maWx0ZXIobm9kZS0+c3RydWN0dXJlKCkpOwogICAgICAgICBtX2hhdmVTdHJ1
Y3R1cmVzID0gdHJ1ZTsKLSAgICAgICAgbm9kZS5zZXRDYW5FeGl0KHRydWUpOworICAgICAgICBu
b2RlLT5zZXRDYW5FeGl0KHRydWUpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgICAg
ICAKICAgICBjYXNlIFB1dFN0cnVjdHVyZToKICAgICBjYXNlIFBoYW50b21QdXRTdHJ1Y3R1cmU6
Ci0gICAgICAgIG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7Ci0gICAgICAgIGlmICghZm9yTm9kZShu
b2RlLmNoaWxkMSgpKS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5pc0NsZWFyKCkpIHsKKyAgICAg
ICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CisgICAgICAgIGlmICghZm9yTm9kZShub2RlLT5j
aGlsZDEoKSkubV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuaXNDbGVhcigpKSB7CiAgICAgICAgICAg
ICBjbG9iYmVyU3RydWN0dXJlcyhpbmRleEluQmxvY2spOwotICAgICAgICAgICAgZm9yTm9kZShu
b2RlLmNoaWxkMSgpKS5zZXQobm9kZS5zdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSgpLm5ld1N0cnVj
dHVyZSk7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5zZXQobm9kZS0+c3Ry
dWN0dXJlVHJhbnNpdGlvbkRhdGEoKS5uZXdTdHJ1Y3R1cmUpOwogICAgICAgICAgICAgbV9oYXZl
U3RydWN0dXJlcyA9IHRydWU7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBH
ZXRCdXR0ZXJmbHk6CiAgICAgY2FzZSBBbGxvY2F0ZVByb3BlcnR5U3RvcmFnZToKICAgICBjYXNl
IFJlYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2U6Ci0gICAgICAgIG5vZGUuc2V0Q2FuRXhpdCghaXND
ZWxsU3BlY3VsYXRpb24oZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKTsKLSAgICAgICAg
Zm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY0NlbGwpOwotICAgICAgICBmb3JOb2Rl
KG5vZGVJbmRleCkuY2xlYXIoKTsgLy8gVGhlIHJlc3VsdCBpcyBub3QgYSBKUyB2YWx1ZS4KKyAg
ICAgICAgbm9kZS0+c2V0Q2FuRXhpdCghaXNDZWxsU3BlY3VsYXRpb24oZm9yTm9kZShub2RlLT5j
aGlsZDEoKSkubV90eXBlKSk7CisgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRl
cihTcGVjQ2VsbCk7CisgICAgICAgIGZvck5vZGUobm9kZSkuY2xlYXIoKTsgLy8gVGhlIHJlc3Vs
dCBpcyBub3QgYSBKUyB2YWx1ZS4KICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBDaGVja0FycmF5
OiB7Ci0gICAgICAgIGlmIChub2RlLmFycmF5TW9kZSgpLmFscmVhZHlDaGVja2VkKG1fZ3JhcGgs
IG5vZGUsIGZvck5vZGUobm9kZS5jaGlsZDEoKSkpKSB7CisgICAgICAgIGlmIChub2RlLT5hcnJh
eU1vZGUoKS5hbHJlYWR5Q2hlY2tlZChtX2dyYXBoLCBub2RlLCBmb3JOb2RlKG5vZGUtPmNoaWxk
MSgpKSkpIHsKICAgICAgICAgICAgIG1fZm91bmRDb25zdGFudHMgPSB0cnVlOwotICAgICAgICAg
ICAgbm9kZS5zZXRDYW5FeGl0KGZhbHNlKTsKKyAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQo
ZmFsc2UpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgbm9kZS5zZXRD
YW5FeGl0KHRydWUpOyAvLyBMaWVzLCBidXQgdGhpcyBpcyBmb2xsb3dlZCBieSBvcGVyYXRpb25z
IChsaWtlIEdldEJ5VmFsKSB0aGF0IGFsd2F5cyBleGl0LCBzbyB0aGVyZSBpcyBubyBwb2ludCBp
biB1cyB0cnlpbmcgdG8gYmUgY2xldmVyIGhlcmUuCi0gICAgICAgIHN3aXRjaCAobm9kZS5hcnJh
eU1vZGUoKS50eXBlKCkpIHsKKyAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsgLy8gTGll
cywgYnV0IHRoaXMgaXMgZm9sbG93ZWQgYnkgb3BlcmF0aW9ucyAobGlrZSBHZXRCeVZhbCkgdGhh
dCBhbHdheXMgZXhpdCwgc28gdGhlcmUgaXMgbm8gcG9pbnQgaW4gdXMgdHJ5aW5nIHRvIGJlIGNs
ZXZlciBoZXJlLgorICAgICAgICBzd2l0Y2ggKG5vZGUtPmFycmF5TW9kZSgpLnR5cGUoKSkgewog
ICAgICAgICBjYXNlIEFycmF5OjpTdHJpbmc6Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hp
bGQxKCkpLmZpbHRlcihTcGVjU3RyaW5nKTsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZS0+Y2hp
bGQxKCkpLmZpbHRlcihTcGVjU3RyaW5nKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBj
YXNlIEFycmF5OjpJbnQzMjoKICAgICAgICAgY2FzZSBBcnJheTo6RG91YmxlOgogICAgICAgICBj
YXNlIEFycmF5OjpDb250aWd1b3VzOgogICAgICAgICBjYXNlIEFycmF5OjpBcnJheVN0b3JhZ2U6
CiAgICAgICAgIGNhc2UgQXJyYXk6OlNsb3dQdXRBcnJheVN0b3JhZ2U6Ci0gICAgICAgICAgICBm
b3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjQ2VsbCk7CisgICAgICAgICAgICBmb3JO
b2RlKG5vZGUtPmNoaWxkMSgpKS5maWx0ZXIoU3BlY0NlbGwpOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIGNhc2UgQXJyYXk6OkFyZ3VtZW50czoKLSAgICAgICAgICAgIGZvck5vZGUobm9k
ZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNBcmd1bWVudHMpOworICAgICAgICAgICAgZm9yTm9kZShu
b2RlLT5jaGlsZDEoKSkuZmlsdGVyKFNwZWNBcmd1bWVudHMpOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIGNhc2UgQXJyYXk6OkludDhBcnJheToKLSAgICAgICAgICAgIGZvck5vZGUobm9k
ZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNJbnQ4QXJyYXkpOworICAgICAgICAgICAgZm9yTm9kZShu
b2RlLT5jaGlsZDEoKSkuZmlsdGVyKFNwZWNJbnQ4QXJyYXkpOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIGNhc2UgQXJyYXk6OkludDE2QXJyYXk6Ci0gICAgICAgICAgICBmb3JOb2RlKG5v
ZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjSW50MTZBcnJheSk7CisgICAgICAgICAgICBmb3JOb2Rl
KG5vZGUtPmNoaWxkMSgpKS5maWx0ZXIoU3BlY0ludDE2QXJyYXkpOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OkludDMyQXJyYXk6Ci0gICAgICAgICAgICBmb3JOb2Rl
KG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjSW50MzJBcnJheSk7CisgICAgICAgICAgICBmb3JO
b2RlKG5vZGUtPmNoaWxkMSgpKS5maWx0ZXIoU3BlY0ludDMyQXJyYXkpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OlVpbnQ4QXJyYXk6Ci0gICAgICAgICAgICBmb3JO
b2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjVWludDhBcnJheSk7CisgICAgICAgICAgICBm
b3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5maWx0ZXIoU3BlY1VpbnQ4QXJyYXkpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OlVpbnQ4Q2xhbXBlZEFycmF5OgotICAgICAg
ICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY1VpbnQ4Q2xhbXBlZEFycmF5
KTsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRlcihTcGVjVWludDhD
bGFtcGVkQXJyYXkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OlVp
bnQxNkFycmF5OgotICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3Bl
Y1VpbnQxNkFycmF5KTsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRl
cihTcGVjVWludDE2QXJyYXkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJy
YXk6OlVpbnQzMkFycmF5OgotICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0
ZXIoU3BlY1VpbnQzMkFycmF5KTsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkp
LmZpbHRlcihTcGVjVWludDMyQXJyYXkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNh
c2UgQXJyYXk6OkZsb2F0MzJBcnJheToKLSAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEo
KSkuZmlsdGVyKFNwZWNGbG9hdDMyQXJyYXkpOworICAgICAgICAgICAgZm9yTm9kZShub2RlLT5j
aGlsZDEoKSkuZmlsdGVyKFNwZWNGbG9hdDMyQXJyYXkpOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIGNhc2UgQXJyYXk6OkZsb2F0NjRBcnJheToKLSAgICAgICAgICAgIGZvck5vZGUobm9k
ZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNGbG9hdDY0QXJyYXkpOworICAgICAgICAgICAgZm9yTm9k
ZShub2RlLT5jaGlsZDEoKSkuZmlsdGVyKFNwZWNGbG9hdDY0QXJyYXkpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIGZvck5vZGUobm9kZS5j
aGlsZDEoKSkuZmlsdGVyQXJyYXlNb2Rlcyhub2RlLmFycmF5TW9kZSgpLmFycmF5TW9kZXNUaGF0
UGFzc0ZpbHRlcmluZygpKTsKKyAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDEoKSkuZmlsdGVy
QXJyYXlNb2Rlcyhub2RlLT5hcnJheU1vZGUoKS5hcnJheU1vZGVzVGhhdFBhc3NGaWx0ZXJpbmco
KSk7CiAgICAgICAgIG1faGF2ZVN0cnVjdHVyZXMgPSB0cnVlOwogICAgICAgICBicmVhazsKICAg
ICB9CiAgICAgY2FzZSBBcnJheWlmeTogewotICAgICAgICBpZiAobm9kZS5hcnJheU1vZGUoKS5h
bHJlYWR5Q2hlY2tlZChtX2dyYXBoLCBub2RlLCBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpKSkgewor
ICAgICAgICBpZiAobm9kZS0+YXJyYXlNb2RlKCkuYWxyZWFkeUNoZWNrZWQobV9ncmFwaCwgbm9k
ZSwgZm9yTm9kZShub2RlLT5jaGlsZDEoKSkpKSB7CiAgICAgICAgICAgICBtX2ZvdW5kQ29uc3Rh
bnRzID0gdHJ1ZTsKLSAgICAgICAgICAgIG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7CisgICAgICAg
ICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9Ci0gICAgICAgIEFTU0VSVChub2RlLmFycmF5TW9kZSgpLmNvbnZlcnNpb24oKSA9PSBBcnJh
eTo6Q29udmVydAotICAgICAgICAgICAgfHwgbm9kZS5hcnJheU1vZGUoKS5jb252ZXJzaW9uKCkg
PT0gQXJyYXk6OlJhZ2VDb252ZXJ0KTsKLSAgICAgICAgbm9kZS5zZXRDYW5FeGl0KHRydWUpOwot
ICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjQ2VsbCk7Ci0gICAgICAg
IGlmIChub2RlLmNoaWxkMigpKQotICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMigpKS5m
aWx0ZXIoU3BlY0ludDMyKTsKKyAgICAgICAgQVNTRVJUKG5vZGUtPmFycmF5TW9kZSgpLmNvbnZl
cnNpb24oKSA9PSBBcnJheTo6Q29udmVydAorICAgICAgICAgICAgfHwgbm9kZS0+YXJyYXlNb2Rl
KCkuY29udmVyc2lvbigpID09IEFycmF5OjpSYWdlQ29udmVydCk7CisgICAgICAgIG5vZGUtPnNl
dENhbkV4aXQodHJ1ZSk7CisgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRlcihT
cGVjQ2VsbCk7CisgICAgICAgIGlmIChub2RlLT5jaGlsZDIoKSkKKyAgICAgICAgICAgIGZvck5v
ZGUobm9kZS0+Y2hpbGQyKCkpLmZpbHRlcihTcGVjSW50MzIpOwogICAgICAgICBjbG9iYmVyU3Ry
dWN0dXJlcyhpbmRleEluQmxvY2spOwotICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZp
bHRlckFycmF5TW9kZXMobm9kZS5hcnJheU1vZGUoKS5hcnJheU1vZGVzVGhhdFBhc3NGaWx0ZXJp
bmcoKSk7CisgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRlckFycmF5TW9kZXMo
bm9kZS0+YXJyYXlNb2RlKCkuYXJyYXlNb2Rlc1RoYXRQYXNzRmlsdGVyaW5nKCkpOwogICAgICAg
ICBtX2hhdmVTdHJ1Y3R1cmVzID0gdHJ1ZTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGNh
c2UgQXJyYXlpZnlUb1N0cnVjdHVyZTogewotICAgICAgICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSA9
IGZvck5vZGUobm9kZS5jaGlsZDEoKSk7Ci0gICAgICAgIFN0cnVjdHVyZVNldCBzZXQgPSBub2Rl
LnN0cnVjdHVyZSgpOworICAgICAgICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSA9IGZvck5vZGUobm9k
ZS0+Y2hpbGQxKCkpOworICAgICAgICBTdHJ1Y3R1cmVTZXQgc2V0ID0gbm9kZS0+c3RydWN0dXJl
KCk7CiAgICAgICAgIGlmICh2YWx1ZS5tX2Z1dHVyZVBvc3NpYmxlU3RydWN0dXJlLmlzU3Vic2V0
T2Yoc2V0KQogICAgICAgICAgICAgfHwgdmFsdWUubV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuaXNT
dWJzZXRPZihzZXQpKQogICAgICAgICAgICAgbV9mb3VuZENvbnN0YW50cyA9IHRydWU7Ci0gICAg
ICAgIG5vZGUuc2V0Q2FuRXhpdCh0cnVlKTsKLSAgICAgICAgaWYgKG5vZGUuY2hpbGQyKCkpCi0g
ICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQyKCkpLmZpbHRlcihTcGVjSW50MzIpOworICAg
ICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOworICAgICAgICBpZiAobm9kZS0+Y2hpbGQyKCkp
CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMigpKS5maWx0ZXIoU3BlY0ludDMyKTsK
ICAgICAgICAgY2xvYmJlclN0cnVjdHVyZXMoaW5kZXhJbkJsb2NrKTsKICAgICAgICAgdmFsdWUu
ZmlsdGVyKHNldCk7CiAgICAgICAgIG1faGF2ZVN0cnVjdHVyZXMgPSB0cnVlOwogICAgICAgICBi
cmVhazsKICAgICB9CiAgICAgY2FzZSBHZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlOiB7Ci0gICAg
ICAgIG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7Ci0gICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5j
bGVhcigpOworICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKKyAgICAgICAgZm9yTm9k
ZShub2RlKS5jbGVhcigpOwogICAgICAgICBicmVhazsgCiAgICAgfQogICAgIGNhc2UgR2V0QnlP
ZmZzZXQ6Ci0gICAgICAgIGlmICghbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5oYXNTdG9yYWdlUmVz
dWx0KCkpIHsKLSAgICAgICAgICAgIG5vZGUuc2V0Q2FuRXhpdCghaXNDZWxsU3BlY3VsYXRpb24o
Zm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKTsKLSAgICAgICAgICAgIGZvck5vZGUobm9k
ZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNDZWxsKTsKKyAgICAgICAgaWYgKCFub2RlLT5jaGlsZDEo
KS0+aGFzU3RvcmFnZVJlc3VsdCgpKSB7CisgICAgICAgICAgICBub2RlLnNldENhbkV4aXQoIWlz
Q2VsbFNwZWN1bGF0aW9uKGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fdHlwZSkpOworICAgICAg
ICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDEoKSkuZmlsdGVyKFNwZWNDZWxsKTsKICAgICAgICAg
fQotICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkubWFrZVRvcCgpOworICAgICAgICBmb3JOb2Rl
KG5vZGUpLm1ha2VUb3AoKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICBjYXNl
IFB1dEJ5T2Zmc2V0OiB7CiAgICAgICAgIGJvb2wgY2FuRXhpdCA9IGZhbHNlOwotICAgICAgICBp
ZiAoIW1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0uaGFzU3RvcmFnZVJlc3VsdCgpKSB7Ci0gICAgICAg
ICAgICBjYW5FeGl0IHw9ICFpc0NlbGxTcGVjdWxhdGlvbihmb3JOb2RlKG5vZGUuY2hpbGQxKCkp
Lm1fdHlwZSk7Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVj
Q2VsbCk7Ci0gICAgICAgIH0KLSAgICAgICAgY2FuRXhpdCB8PSAhaXNDZWxsU3BlY3VsYXRpb24o
Zm9yTm9kZShub2RlLmNoaWxkMigpKS5tX3R5cGUpOwotICAgICAgICBmb3JOb2RlKG5vZGUuY2hp
bGQyKCkpLmZpbHRlcihTcGVjQ2VsbCk7Ci0gICAgICAgIG5vZGUuc2V0Q2FuRXhpdChjYW5FeGl0
KTsKKyAgICAgICAgaWYgKCFub2RlLT5jaGlsZDEoKS0+aGFzU3RvcmFnZVJlc3VsdCgpKSB7Cisg
ICAgICAgICAgICBjYW5FeGl0IHw9ICFpc0NlbGxTcGVjdWxhdGlvbihmb3JOb2RlKG5vZGUtPmNo
aWxkMSgpKS5tX3R5cGUpOworICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDEoKSkuZmls
dGVyKFNwZWNDZWxsKTsKKyAgICAgICAgfQorICAgICAgICBjYW5FeGl0IHw9ICFpc0NlbGxTcGVj
dWxhdGlvbihmb3JOb2RlKG5vZGUtPmNoaWxkMigpKS5tX3R5cGUpOworICAgICAgICBmb3JOb2Rl
KG5vZGUtPmNoaWxkMigpKS5maWx0ZXIoU3BlY0NlbGwpOworICAgICAgICBub2RlLT5zZXRDYW5F
eGl0KGNhbkV4aXQpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgICAgICAKICAgICBj
YXNlIENoZWNrRnVuY3Rpb246IHsKLSAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IGZvck5vZGUobm9k
ZS5jaGlsZDEoKSkudmFsdWUoKTsKLSAgICAgICAgaWYgKHZhbHVlID09IG5vZGUuZnVuY3Rpb24o
KSkgeworICAgICAgICBKU1ZhbHVlIHZhbHVlID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSkudmFs
dWUoKTsKKyAgICAgICAgaWYgKHZhbHVlID09IG5vZGUtPmZ1bmN0aW9uKCkpIHsKICAgICAgICAg
ICAgIG1fZm91bmRDb25zdGFudHMgPSB0cnVlOwogICAgICAgICAgICAgQVNTRVJUKHZhbHVlKTsK
LSAgICAgICAgICAgIG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7CisgICAgICAgICAgICBub2RlLT5z
ZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAg
IAotICAgICAgICBub2RlLnNldENhbkV4aXQodHJ1ZSk7IC8vIExpZXMhIFdlIGNhbiBkbyBiZXR0
ZXIuCi0gICAgICAgIGlmICghZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXJCeVZhbHVlKG5v
ZGUuZnVuY3Rpb24oKSkpIHsKKyAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsgLy8gTGll
cyEgV2UgY2FuIGRvIGJldHRlci4KKyAgICAgICAgaWYgKCFmb3JOb2RlKG5vZGUtPmNoaWxkMSgp
KS5maWx0ZXJCeVZhbHVlKG5vZGUtPmZ1bmN0aW9uKCkpKSB7CiAgICAgICAgICAgICBtX2lzVmFs
aWQgPSBmYWxzZTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkBAIC0xNzEzLDY3ICsx
NzMyLDY5IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAg
ICAgCiAgICAgY2FzZSBQdXRCeUlkOgogICAgIGNhc2UgUHV0QnlJZERpcmVjdDoKLSAgICAgICAg
bm9kZS5zZXRDYW5FeGl0KHRydWUpOwotICAgICAgICBpZiAoU3RydWN0dXJlKiBzdHJ1Y3R1cmUg
PSBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmJlc3RQcm92ZW5TdHJ1Y3R1cmUoKSkgeworICAgICAg
ICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOworICAgICAgICBpZiAoU3RydWN0dXJlKiBzdHJ1Y3R1
cmUgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5iZXN0UHJvdmVuU3RydWN0dXJlKCkpIHsKICAg
ICAgICAgICAgIFB1dEJ5SWRTdGF0dXMgc3RhdHVzID0gUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZv
cigKICAgICAgICAgICAgICAgICBtX2dyYXBoLm1fZ2xvYmFsRGF0YSwKLSAgICAgICAgICAgICAg
ICBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLmNvZGVPcmlnaW4pLAorICAgICAgICAgICAg
ICAgIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPmNvZGVPcmlnaW4pLAogICAgICAgICAg
ICAgICAgIHN0cnVjdHVyZSwKLSAgICAgICAgICAgICAgICBtX2dyYXBoLm1fY29kZUJsb2NrLT5p
ZGVudGlmaWVyKG5vZGUuaWRlbnRpZmllck51bWJlcigpKSwKLSAgICAgICAgICAgICAgICBub2Rl
Lm9wKCkgPT0gUHV0QnlJZERpcmVjdCk7CisgICAgICAgICAgICAgICAgbV9ncmFwaC5tX2NvZGVC
bG9jay0+aWRlbnRpZmllcihub2RlLT5pZGVudGlmaWVyTnVtYmVyKCkpLAorICAgICAgICAgICAg
ICAgIG5vZGUtPm9wKCkgPT0gUHV0QnlJZERpcmVjdCk7CiAgICAgICAgICAgICBpZiAoc3RhdHVz
LmlzU2ltcGxlUmVwbGFjZSgpKSB7Ci0gICAgICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxk
MSgpKS5maWx0ZXIoc3RydWN0dXJlKTsKKyAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNo
aWxkMSgpKS5maWx0ZXIoc3RydWN0dXJlKTsKICAgICAgICAgICAgICAgICBtX2ZvdW5kQ29uc3Rh
bnRzID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIGlmIChzdGF0dXMuaXNTaW1wbGVUcmFuc2l0aW9uKCkpIHsKICAgICAgICAgICAgICAg
ICBjbG9iYmVyU3RydWN0dXJlcyhpbmRleEluQmxvY2spOwotICAgICAgICAgICAgICAgIGZvck5v
ZGUobm9kZS5jaGlsZDEoKSkuc2V0KHN0YXR1cy5uZXdTdHJ1Y3R1cmUoKSk7CisgICAgICAgICAg
ICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDEoKSkuc2V0KHN0YXR1cy5uZXdTdHJ1Y3R1cmUoKSk7
CiAgICAgICAgICAgICAgICAgbV9oYXZlU3RydWN0dXJlcyA9IHRydWU7CiAgICAgICAgICAgICAg
ICAgbV9mb3VuZENvbnN0YW50cyA9IHRydWU7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0
ZXIoU3BlY0NlbGwpOwotICAgICAgICBjbG9iYmVyV29ybGQobm9kZS5jb2RlT3JpZ2luLCBpbmRl
eEluQmxvY2spOworICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5maWx0ZXIoU3BlY0Nl
bGwpOworICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+Y29kZU9yaWdpbiwgaW5kZXhJbkJsb2Nr
KTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICBjYXNlIEdldEdsb2JhbFZhcjoK
LSAgICAgICAgbm9kZS5zZXRDYW5FeGl0KGZhbHNlKTsKLSAgICAgICAgZm9yTm9kZShub2RlSW5k
ZXgpLm1ha2VUb3AoKTsKKyAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CisgICAgICAg
IGZvck5vZGUobm9kZSkubWFrZVRvcCgpOwogICAgICAgICBicmVhazsKICAgICAgICAgCiAgICAg
Y2FzZSBHbG9iYWxWYXJXYXRjaHBvaW50OgotICAgICAgICBub2RlLnNldENhbkV4aXQodHJ1ZSk7
CisgICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7CiAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgCiAgICAgY2FzZSBQdXRHbG9iYWxWYXI6CiAgICAgY2FzZSBQdXRHbG9iYWxWYXJDaGVj
azoKLSAgICAgICAgbm9kZS5zZXRDYW5FeGl0KGZhbHNlKTsKKyAgICAgICAgbm9kZS0+c2V0Q2Fu
RXhpdChmYWxzZSk7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAgY2FzZSBDaGVj
a0hhc0luc3RhbmNlOgotICAgICAgICBub2RlLnNldENhbkV4aXQodHJ1ZSk7Ci0gICAgICAgIGZv
ck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNDZWxsKTsKKyAgICAgICAgbm9kZS0+c2V0
Q2FuRXhpdCh0cnVlKTsKKyAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDEoKSkuZmlsdGVyKFNw
ZWNDZWxsKTsKICAgICAgICAgLy8gU2FkbHksIHdlIGRvbid0IHByb3BhZ2F0ZSB0aGUgZmFjdCB0
aGF0IHdlJ3ZlIGRvbmUgQ2hlY2tIYXNJbnN0YW5jZQogICAgICAgICBicmVhazsKICAgICAgICAg
ICAgIAogICAgIGNhc2UgSW5zdGFuY2VPZjoKLSAgICAgICAgbm9kZS5zZXRDYW5FeGl0KHRydWUp
OworICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOwogICAgICAgICAvLyBBZ2Fpbiwgc2Fk
bHksIHdlIGRvbid0IHByb3BhZ2F0ZSB0aGUgZmFjdCB0aGF0IHdlJ3ZlIGRvbmUgSW5zdGFuY2VP
ZgotICAgICAgICBpZiAoIShtX2dyYXBoW25vZGUuY2hpbGQxKCldLnByZWRpY3Rpb24oKSAmIH5T
cGVjQ2VsbCkgJiYgIShmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSAmIH5TcGVjQ2VsbCkp
Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjQ2VsbCk7Ci0g
ICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKFNwZWNDZWxsKTsKLSAgICAgICAg
Zm9yTm9kZShub2RlSW5kZXgpLnNldChTcGVjQm9vbGVhbik7CisgICAgICAgIC8vIEZJWE1FOiBU
aGlzIGFwcGVhcnMgYnJva2VuOiBDaGVja0hhc0luc3RhbmNlIGFscmVhZHkgZG9lcyBhbiB1bmNv
bmRpdGlvbmFsIGNlbGwKKyAgICAgICAgLy8gY2hlY2suIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xMDc0NzkKKyAgICAgICAgaWYgKCEobm9kZS0+Y2hpbGQxKCktPnBy
ZWRpY3Rpb24oKSAmIH5TcGVjQ2VsbCkgJiYgIShmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX3R5
cGUgJiB+U3BlY0NlbGwpKQorICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDEoKSkuZmls
dGVyKFNwZWNDZWxsKTsKKyAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDIoKSkuZmlsdGVyKFNw
ZWNDZWxsKTsKKyAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0Jvb2xlYW4pOwogICAgICAg
ICBicmVhazsKICAgICAgICAgICAgIAogICAgIGNhc2UgUGhpOgogICAgIGNhc2UgRmx1c2g6Ci0g
ICAgICAgIG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7CisgICAgICAgIG5vZGUtPnNldENhbkV4aXQo
ZmFsc2UpOwogICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgIGNhc2UgQnJlYWtwb2lu
dDoKLSAgICAgICAgbm9kZS5zZXRDYW5FeGl0KGZhbHNlKTsKKyAgICAgICAgbm9kZS0+c2V0Q2Fu
RXhpdChmYWxzZSk7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAgY2FzZSBDYWxs
OgpAQCAtMTc4MiwxOCArMTgwMywxOCBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5z
aWduZWQgaW5kCiAgICAgY2FzZSBSZXNvbHZlQmFzZToKICAgICBjYXNlIFJlc29sdmVCYXNlU3Ry
aWN0UHV0OgogICAgIGNhc2UgUmVzb2x2ZUdsb2JhbDoKLSAgICAgICAgbm9kZS5zZXRDYW5FeGl0
KHRydWUpOwotICAgICAgICBjbG9iYmVyV29ybGQobm9kZS5jb2RlT3JpZ2luLCBpbmRleEluQmxv
Y2spOwotICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkubWFrZVRvcCgpOworICAgICAgICBub2Rl
LT5zZXRDYW5FeGl0KHRydWUpOworICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+Y29kZU9yaWdp
biwgaW5kZXhJbkJsb2NrKTsKKyAgICAgICAgZm9yTm9kZShub2RlKS5tYWtlVG9wKCk7CiAgICAg
ICAgIGJyZWFrOwogCiAgICAgY2FzZSBHYXJiYWdlVmFsdWU6Ci0gICAgICAgIGNsb2JiZXJXb3Js
ZChub2RlLmNvZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7Ci0gICAgICAgIGZvck5vZGUobm9kZUlu
ZGV4KS5tYWtlVG9wKCk7CisgICAgICAgIGNsb2JiZXJXb3JsZChub2RlLT5jb2RlT3JpZ2luLCBp
bmRleEluQmxvY2spOworICAgICAgICBmb3JOb2RlKG5vZGUpLm1ha2VUb3AoKTsKICAgICAgICAg
YnJlYWs7CiAKICAgICBjYXNlIEZvcmNlT1NSRXhpdDoKLSAgICAgICAgbm9kZS5zZXRDYW5FeGl0
KHRydWUpOworICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOwogICAgICAgICBtX2lzVmFs
aWQgPSBmYWxzZTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKQEAgLTE4MDEsNyArMTgy
Miw3IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICBjYXNl
IElubGluZVN0YXJ0OgogICAgIGNhc2UgTm9wOgogICAgIGNhc2UgQ291bnRFeGVjdXRpb246Ci0g
ICAgICAgIG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7CisgICAgICAgIG5vZGUtPnNldENhbkV4aXQo
ZmFsc2UpOwogICAgICAgICBicmVhazsKICAgICAgICAgCiAgICAgY2FzZSBMYXN0Tm9kZVR5cGU6
CkBAIC0xODU0LDE1ICsxODc1LDE0IEBAIGlubGluZSB2b2lkIEFic3RyYWN0U3RhdGU6OmNsb2Ji
ZXJTdHJ1Y3QKICAgICBtX2RpZENsb2JiZXIgPSB0cnVlOwogfQogCi1pbmxpbmUgYm9vbCBBYnN0
cmFjdFN0YXRlOjptZXJnZVN0YXRlQXRUYWlsKEFic3RyYWN0VmFsdWUmIGRlc3RpbmF0aW9uLCBB
YnN0cmFjdFZhbHVlJiBpblZhcmlhYmxlLCBOb2RlSW5kZXggbm9kZUluZGV4KQoraW5saW5lIGJv
b2wgQWJzdHJhY3RTdGF0ZTo6bWVyZ2VTdGF0ZUF0VGFpbChBYnN0cmFjdFZhbHVlJiBkZXN0aW5h
dGlvbiwgQWJzdHJhY3RWYWx1ZSYgaW5WYXJpYWJsZSwgTm9kZSogbm9kZSkKIHsKLSAgICBpZiAo
bm9kZUluZGV4ID09IE5vTm9kZSkKKyAgICBpZiAoIW5vZGUpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICAgICAgCiAgICAgQWJzdHJhY3RWYWx1ZSBzb3VyY2U7CiAgICAgCi0gICAgTm9kZSYg
dGFpbE5vZGUgPSBtX2dyYXBoW25vZGVJbmRleF07Ci0gICAgaWYgKHRhaWxOb2RlLnZhcmlhYmxl
QWNjZXNzRGF0YSgpLT5pc0NhcHR1cmVkKCkpIHsKKyAgICBpZiAobm9kZS0+dmFyaWFibGVBY2Nl
c3NEYXRhKCktPmlzQ2FwdHVyZWQoKSkgewogICAgICAgICAvLyBJZiBpdCdzIGNhcHR1cmVkIHRo
ZW4gd2Uga25vdyB0aGF0IHdoYXRldmVyIHZhbHVlIHdhcyBzdG9yZWQgaW50byB0aGUgdmFyaWFi
bGUgbGFzdCBpcyB0aGUKICAgICAgICAgLy8gb25lIHdlIGNhcmUgYWJvdXQuIFRoaXMgaXMgdHJ1
ZSBldmVuIGlmIHRoZSB2YXJpYWJsZSBhdCB0YWlsIGlzIGRlYWQsIHdoaWNoIG1pZ2h0IGhhcHBl
biBpZgogICAgICAgICAvLyB0aGUgbGFzdCB0aGluZyB3ZSBkaWQgdG8gdGhlIHZhcmlhYmxlIHdh
cyBhIEdldExvY2FsIGFuZCB0aGVuIGVuZGVkIHVwIG5vdyB1c2luZyB0aGUKQEAgLTE4NzUsMjYg
KzE4OTUsMjUgQEAgaW5saW5lIGJvb2wgQWJzdHJhY3RTdGF0ZTo6bWVyZ2VTdGF0ZUF0VAogICAg
ICAgICBkYXRhTG9nRigiIGZyb20gbGFzdCBhY2Nlc3MgZHVlIHRvIGNhcHR1cmVkIHZhcmlhYmxl
LlxuIik7CiAjZW5kaWYKICAgICB9IGVsc2UgewotICAgICAgICBpZiAoIXRhaWxOb2RlLnNob3Vs
ZEdlbmVyYXRlKCkpIHsKKyAgICAgICAgaWYgKCFub2RlLT5zaG91bGRHZW5lcmF0ZSgpKSB7CiAg
ICAgICAgICAgICAvLyBJZiB0aGUgbm9kZSBhdCB0YWlsIGlzIGEgR2V0TG9jYWwgdGhhdCBpcyBk
ZWFkLCB0aGVuIHNraXAgaXQgdG8gZ2V0IHRvIHRoZSBQaGkuCiAgICAgICAgICAgICAvLyBUaGUg
UGhpIG1heSBiZSBsaXZlLgotICAgICAgICAgICAgaWYgKHRhaWxOb2RlLm9wKCkgIT0gR2V0TG9j
YWwpCisgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSAhPSBHZXRMb2NhbCkKICAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIG5vZGVJbmRleCA9
IHRhaWxOb2RlLmNoaWxkMSgpLmluZGV4KCk7Ci0gICAgICAgICAgICBBU1NFUlQobV9ncmFwaFtu
b2RlSW5kZXhdLm9wKCkgPT0gUGhpKTsKLSAgICAgICAgICAgIGlmICghbV9ncmFwaFtub2RlSW5k
ZXhdLnNob3VsZEdlbmVyYXRlKCkpCisgICAgICAgICAgICBub2RlID0gbm9kZS0+Y2hpbGQxKCku
bm9kZSgpOworICAgICAgICAgICAgQVNTRVJUKG5vZGUtPm9wKCkgPT0gUGhpKTsKKyAgICAgICAg
ICAgIGlmICghbm9kZS0+c2hvdWxkR2VuZXJhdGUoKSkKICAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBo
W25vZGVJbmRleF07Ci0gICAgICAgIEFTU0VSVChub2RlLnNob3VsZEdlbmVyYXRlKCkpOworICAg
ICAgICBBU1NFUlQobm9kZS0+c2hvdWxkR2VuZXJhdGUoKSk7CiAKICNpZiBERkdfRU5BQkxFKERF
QlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCi0gICAgICAgIGRhdGFMb2dGKCIgICAgICAgICAgSXQn
cyBsaXZlLCBub2RlIEAldS5cbiIsIG5vZGVJbmRleCk7CisgICAgICAgIGRhdGFMb2dGKCIgICAg
ICAgICAgSXQncyBsaXZlLCBub2RlIEAldS5cbiIsIG5vZGUtPmluZGV4KCkpOwogI2VuZGlmCiAg
ICAgCi0gICAgICAgIHN3aXRjaCAobm9kZS5vcCgpKSB7CisgICAgICAgIHN3aXRjaCAobm9kZS0+
b3AoKSkgewogICAgICAgICBjYXNlIFBoaToKICAgICAgICAgY2FzZSBTZXRBcmd1bWVudDoKICAg
ICAgICAgY2FzZSBGbHVzaDoKQEAgLTE5MDksNyArMTkyOCw3IEBAIGlubGluZSBib29sIEFic3Ry
YWN0U3RhdGU6Om1lcmdlU3RhdGVBdFQKICAgICAgICAgICAgIAogICAgICAgICBjYXNlIEdldExv
Y2FsOgogICAgICAgICAgICAgLy8gVGhlIGJsb2NrIHJlZmluZXMgdGhlIHZhbHVlIHdpdGggYWRk
aXRpb25hbCBzcGVjdWxhdGlvbnMuCi0gICAgICAgICAgICBzb3VyY2UgPSBmb3JOb2RlKG5vZGVJ
bmRleCk7CisgICAgICAgICAgICBzb3VyY2UgPSBmb3JOb2RlKG5vZGUpOwogI2lmIERGR19FTkFC
TEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKICAgICAgICAgICAgIGRhdGFMb2dGKCIgICAg
ICAgICAgUmVmaW5pbmcgdG8gIik7CiAgICAgICAgICAgICBzb3VyY2UuZHVtcChXVEY6OmRhdGFG
aWxlKCkpOwpAQCAtMTkyMCwxMSArMTkzOSwxMSBAQCBpbmxpbmUgYm9vbCBBYnN0cmFjdFN0YXRl
OjptZXJnZVN0YXRlQXRUCiAgICAgICAgIGNhc2UgU2V0TG9jYWw6CiAgICAgICAgICAgICAvLyBU
aGUgYmxvY2sgc2V0cyB0aGUgdmFyaWFibGUsIGFuZCBwb3RlbnRpYWxseSByZWZpbmVzIGl0LCBi
b3RoCiAgICAgICAgICAgICAvLyBiZWZvcmUgYW5kIGFmdGVyIHNldHRpbmcgaXQuCi0gICAgICAg
ICAgICBpZiAobm9kZS52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+c2hvdWxkVXNlRG91YmxlRm9ybWF0
KCkpIHsKKyAgICAgICAgICAgIGlmIChub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+c2hvdWxk
VXNlRG91YmxlRm9ybWF0KCkpIHsKICAgICAgICAgICAgICAgICAvLyBGSVhNRTogVGhpcyB1bm5l
Y2Vzc2FyaWx5IGxvc2VzIHByZWNpc2lvbi4KICAgICAgICAgICAgICAgICBzb3VyY2Uuc2V0KFNw
ZWNEb3VibGUpOwogICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgc291cmNlID0g
Zm9yTm9kZShub2RlLmNoaWxkMSgpKTsKKyAgICAgICAgICAgICAgICBzb3VyY2UgPSBmb3JOb2Rl
KG5vZGUtPmNoaWxkMSgpKTsKICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJP
U0UpCiAgICAgICAgICAgICBkYXRhTG9nRigiICAgICAgICAgIFNldHRpbmcgdG8gIik7CiAgICAg
ICAgICAgICBzb3VyY2UuZHVtcChXVEY6OmRhdGFGaWxlKCkpOwpAQCAtMTk4MiwzNSArMjAwMSwz
NCBAQCBpbmxpbmUgYm9vbCBBYnN0cmFjdFN0YXRlOjptZXJnZShCYXNpY0JsCiAgICAgcmV0dXJu
IGNoYW5nZWQ7CiB9CiAKLWlubGluZSBib29sIEFic3RyYWN0U3RhdGU6Om1lcmdlVG9TdWNjZXNz
b3JzKAotICAgIEdyYXBoJiBncmFwaCwgQmFzaWNCbG9jayogYmFzaWNCbG9jaykKK2lubGluZSBi
b29sIEFic3RyYWN0U3RhdGU6Om1lcmdlVG9TdWNjZXNzb3JzKEdyYXBoJiBncmFwaCwgQmFzaWNC
bG9jayogYmFzaWNCbG9jaykKIHsKLSAgICBOb2RlJiB0ZXJtaW5hbCA9IGdyYXBoW2Jhc2ljQmxv
Y2stPmxhc3QoKV07CisgICAgTm9kZSogdGVybWluYWwgPSBiYXNpY0Jsb2NrLT5sYXN0KCk7CiAg
ICAgCi0gICAgQVNTRVJUKHRlcm1pbmFsLmlzVGVybWluYWwoKSk7CisgICAgQVNTRVJUKHRlcm1p
bmFsLT5pc1Rlcm1pbmFsKCkpOwogICAgIAotICAgIHN3aXRjaCAodGVybWluYWwub3AoKSkgewor
ICAgIHN3aXRjaCAodGVybWluYWwtPm9wKCkpIHsKICAgICBjYXNlIEp1bXA6IHsKICAgICAgICAg
QVNTRVJUKGJhc2ljQmxvY2stPmNmYUJyYW5jaERpcmVjdGlvbiA9PSBJbnZhbGlkQnJhbmNoRGly
ZWN0aW9uKTsKICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCiAgICAg
ICAgIGRhdGFMb2dGKCIgICAgICAgIE1lcmdpbmcgdG8gYmxvY2sgIyV1LlxuIiwgdGVybWluYWwu
dGFrZW5CbG9ja0luZGV4KCkpOwogI2VuZGlmCi0gICAgICAgIHJldHVybiBtZXJnZShiYXNpY0Js
b2NrLCBncmFwaC5tX2Jsb2Nrc1t0ZXJtaW5hbC50YWtlbkJsb2NrSW5kZXgoKV0uZ2V0KCkpOwor
ICAgICAgICByZXR1cm4gbWVyZ2UoYmFzaWNCbG9jaywgZ3JhcGgubV9ibG9ja3NbdGVybWluYWwt
PnRha2VuQmxvY2tJbmRleCgpXS5nZXQoKSk7CiAgICAgfQogICAgICAgICAKICAgICBjYXNlIEJy
YW5jaDogewogICAgICAgICBBU1NFUlQoYmFzaWNCbG9jay0+Y2ZhQnJhbmNoRGlyZWN0aW9uICE9
IEludmFsaWRCcmFuY2hEaXJlY3Rpb24pOwogICAgICAgICBib29sIGNoYW5nZWQgPSBmYWxzZTsK
ICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCi0gICAgICAgIGRhdGFM
b2dGKCIgICAgICAgIE1lcmdpbmcgdG8gYmxvY2sgIyV1LlxuIiwgdGVybWluYWwudGFrZW5CbG9j
a0luZGV4KCkpOworICAgICAgICBkYXRhTG9nRigiICAgICAgICBNZXJnaW5nIHRvIGJsb2NrICMl
dS5cbiIsIHRlcm1pbmFsLT50YWtlbkJsb2NrSW5kZXgoKSk7CiAjZW5kaWYKICAgICAgICAgaWYg
KGJhc2ljQmxvY2stPmNmYUJyYW5jaERpcmVjdGlvbiAhPSBUYWtlRmFsc2UpCi0gICAgICAgICAg
ICBjaGFuZ2VkIHw9IG1lcmdlKGJhc2ljQmxvY2ssIGdyYXBoLm1fYmxvY2tzW3Rlcm1pbmFsLnRh
a2VuQmxvY2tJbmRleCgpXS5nZXQoKSk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlKGJh
c2ljQmxvY2ssIGdyYXBoLm1fYmxvY2tzW3Rlcm1pbmFsLT50YWtlbkJsb2NrSW5kZXgoKV0uZ2V0
KCkpOwogI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKICAgICAgICAg
ZGF0YUxvZ0YoIiAgICAgICAgTWVyZ2luZyB0byBibG9jayAjJXUuXG4iLCB0ZXJtaW5hbC5ub3RU
YWtlbkJsb2NrSW5kZXgoKSk7CiAjZW5kaWYKICAgICAgICAgaWYgKGJhc2ljQmxvY2stPmNmYUJy
YW5jaERpcmVjdGlvbiAhPSBUYWtlVHJ1ZSkKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2Uo
YmFzaWNCbG9jaywgZ3JhcGgubV9ibG9ja3NbdGVybWluYWwubm90VGFrZW5CbG9ja0luZGV4KCld
LmdldCgpKTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2UoYmFzaWNCbG9jaywgZ3JhcGgu
bV9ibG9ja3NbdGVybWluYWwtPm5vdFRha2VuQmxvY2tJbmRleCgpXS5nZXQoKSk7CiAgICAgICAg
IHJldHVybiBjaGFuZ2VkOwogICAgIH0KICAgICAgICAgCkBAIC0yMDI2LDEyICsyMDQ0LDEyIEBA
IGlubGluZSBib29sIEFic3RyYWN0U3RhdGU6Om1lcmdlVG9TdWNjZXMKICAgICB9CiB9CiAKLWlu
bGluZSBib29sIEFic3RyYWN0U3RhdGU6Om1lcmdlVmFyaWFibGVCZXR3ZWVuQmxvY2tzKEFic3Ry
YWN0VmFsdWUmIGRlc3RpbmF0aW9uLCBBYnN0cmFjdFZhbHVlJiBzb3VyY2UsIE5vZGVJbmRleCBk
ZXN0aW5hdGlvbk5vZGVJbmRleCwgTm9kZUluZGV4IHNvdXJjZU5vZGVJbmRleCkKK2lubGluZSBi
b29sIEFic3RyYWN0U3RhdGU6Om1lcmdlVmFyaWFibGVCZXR3ZWVuQmxvY2tzKEFic3RyYWN0VmFs
dWUmIGRlc3RpbmF0aW9uLCBBYnN0cmFjdFZhbHVlJiBzb3VyY2UsIE5vZGUqIGRlc3RpbmF0aW9u
Tm9kZSwgTm9kZSogc291cmNlTm9kZSkKIHsKLSAgICBpZiAoZGVzdGluYXRpb25Ob2RlSW5kZXgg
PT0gTm9Ob2RlKQorICAgIGlmICghZGVzdGluYXRpb25Ob2RlKQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgCi0gICAgQVNTRVJUX1VOVVNFRChzb3VyY2VOb2RlSW5kZXgsIHNvdXJjZU5vZGVJ
bmRleCAhPSBOb05vZGUpOworICAgIEFTU0VSVF9VTlVTRUQoc291cmNlTm9kZSwgc291cmNlTm9k
ZSk7CiAgICAgCiAgICAgLy8gRklYTUU6IFdlIGNvdWxkIGRvIHNvbWUgc3BhcnNlIGNvbmRpdGlv
bmFsIHByb3BhZ2F0aW9uIGhlcmUhCiAgICAgCkBAIC0yMDQyLDE1ICsyMDYwLDE1IEBAIHZvaWQg
QWJzdHJhY3RTdGF0ZTo6ZHVtcChQcmludFN0cmVhbSYgb3UKIHsKICAgICBib29sIGZpcnN0ID0g
dHJ1ZTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fYmxvY2stPnNpemUoKTsgKytpKSB7
Ci0gICAgICAgIE5vZGVJbmRleCBpbmRleCA9IG1fYmxvY2stPmF0KGkpOwotICAgICAgICBBYnN0
cmFjdFZhbHVlJiB2YWx1ZSA9IGZvck5vZGUoaW5kZXgpOworICAgICAgICBOb2RlKiBub2RlID0g
bV9ibG9jay0+YXQoaSk7CisgICAgICAgIEFic3RyYWN0VmFsdWUmIHZhbHVlID0gZm9yTm9kZShu
b2RlKTsKICAgICAgICAgaWYgKHZhbHVlLmlzQ2xlYXIoKSkKICAgICAgICAgICAgIGNvbnRpbnVl
OwogICAgICAgICBpZiAoZmlyc3QpCiAgICAgICAgICAgICBmaXJzdCA9IGZhbHNlOwogICAgICAg
ICBlbHNlCiAgICAgICAgICAgICBvdXQucHJpbnRmKCIgIik7Ci0gICAgICAgIG91dC5wcmludGYo
IkAlbHU6Iiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4oaW5kZXgpKTsKKyAgICAgICAgb3V0
LnByaW50ZigiQCVsdToiLCBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nPihub2RlLT5pbmRleCgp
KSk7CiAgICAgICAgIHZhbHVlLmR1bXAob3V0KTsKICAgICB9CiB9CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuaAkocmV2aXNpb24gMTQwNTA0KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEyIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAx
MiwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTcyLDggKzcyLDggQEAgc3RydWN0IEJhc2ljQmxvY2s7CiAvLyBB
YnN0cmFjdFN0YXRlIHN0YXRlKGNvZGVCbG9jaywgZ3JhcGgpOwogLy8gc3RhdGUuYmVnaW5CYXNp
Y0Jsb2NrKGJhc2ljQmxvY2spOwogLy8gYm9vbCBlbmRSZWFjaGVkID0gdHJ1ZTsKLS8vIGZvciAo
Tm9kZUluZGV4IGlkeCA9IGJhc2ljQmxvY2suYmVnaW47IGlkeCA8IGJhc2ljQmxvY2suZW5kOyAr
K2lkeCkgewotLy8gICAgIGlmICghc3RhdGUuZXhlY3V0ZShpZHgpKQorLy8gZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IGJhc2ljQmxvY2stPnNpemUoKTsgKytpKSB7CisvLyAgICAgaWYgKCFzdGF0
ZS5leGVjdXRlKGkpKQogLy8gICAgICAgICBicmVhazsKIC8vIH0KIC8vIGJvb2wgcmVzdWx0ID0g
c3RhdGUuZW5kQmFzaWNCbG9jayg8ZWl0aGVyIE1lcmdlIG9yIERvbnRNZXJnZT4pOwpAQCAtOTcs
MTQgKzk3LDE0IEBAIHB1YmxpYzoKICAgICAKICAgICB+QWJzdHJhY3RTdGF0ZSgpOwogICAgIAot
ICAgIEFic3RyYWN0VmFsdWUmIGZvck5vZGUoTm9kZUluZGV4IG5vZGVJbmRleCkKKyAgICBBYnN0
cmFjdFZhbHVlJiBmb3JOb2RlKE5vZGUqIG5vZGUpCiAgICAgewotICAgICAgICByZXR1cm4gbV9n
cmFwaFtub2RlSW5kZXhdLnZhbHVlOworICAgICAgICByZXR1cm4gbm9kZS0+dmFsdWU7CiAgICAg
fQogICAgIAotICAgIEFic3RyYWN0VmFsdWUmIGZvck5vZGUoRWRnZSBub2RlVXNlKQorICAgIEFi
c3RyYWN0VmFsdWUmIGZvck5vZGUoRWRnZSBlZGdlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGZv
ck5vZGUobm9kZVVzZS5pbmRleCgpKTsKKyAgICAgICAgcmV0dXJuIGZvck5vZGUoZWRnZS5ub2Rl
KCkpOwogICAgIH0KICAgICAKICAgICBPcGVyYW5kczxBYnN0cmFjdFZhbHVlPiYgdmFyaWFibGVz
KCkKQEAgLTE4Nyw0OCArMTg3LDQ4IEBAIHByaXZhdGU6CiAgICAgdm9pZCBjbG9iYmVyQ2FwdHVy
ZWRWYXJzKGNvbnN0IENvZGVPcmlnaW4mKTsKICAgICB2b2lkIGNsb2JiZXJTdHJ1Y3R1cmVzKHVu
c2lnbmVkIGluZGV4SW5CbG9jayk7CiAgICAgCi0gICAgYm9vbCBtZXJnZVN0YXRlQXRUYWlsKEFi
c3RyYWN0VmFsdWUmIGRlc3RpbmF0aW9uLCBBYnN0cmFjdFZhbHVlJiBpblZhcmlhYmxlLCBOb2Rl
SW5kZXgpOworICAgIGJvb2wgbWVyZ2VTdGF0ZUF0VGFpbChBYnN0cmFjdFZhbHVlJiBkZXN0aW5h
dGlvbiwgQWJzdHJhY3RWYWx1ZSYgaW5WYXJpYWJsZSwgTm9kZSopOwogICAgIAotICAgIHN0YXRp
YyBib29sIG1lcmdlVmFyaWFibGVCZXR3ZWVuQmxvY2tzKEFic3RyYWN0VmFsdWUmIGRlc3RpbmF0
aW9uLCBBYnN0cmFjdFZhbHVlJiBzb3VyY2UsIE5vZGVJbmRleCBkZXN0aW5hdGlvbk5vZGVJbmRl
eCwgTm9kZUluZGV4IHNvdXJjZU5vZGVJbmRleCk7CisgICAgc3RhdGljIGJvb2wgbWVyZ2VWYXJp
YWJsZUJldHdlZW5CbG9ja3MoQWJzdHJhY3RWYWx1ZSYgZGVzdGluYXRpb24sIEFic3RyYWN0VmFs
dWUmIHNvdXJjZSwgTm9kZSogZGVzdGluYXRpb25Ob2RlLCBOb2RlKiBzb3VyY2VOb2RlKTsKICAg
ICAKLSAgICB2b2lkIHNwZWN1bGF0ZUludDMyVW5hcnkoTm9kZSYgbm9kZSwgYm9vbCBmb3JjZUNh
bkV4aXQgPSBmYWxzZSkKKyAgICB2b2lkIHNwZWN1bGF0ZUludDMyVW5hcnkoTm9kZSogbm9kZSwg
Ym9vbCBmb3JjZUNhbkV4aXQgPSBmYWxzZSkKICAgICB7Ci0gICAgICAgIEFic3RyYWN0VmFsdWUm
IGNoaWxkVmFsdWUgPSBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpOwotICAgICAgICBub2RlLnNldENh
bkV4aXQoZm9yY2VDYW5FeGl0IHx8ICFpc0ludDMyU3BlY3VsYXRpb24oY2hpbGRWYWx1ZS5tX3R5
cGUpKTsKKyAgICAgICAgQWJzdHJhY3RWYWx1ZSYgY2hpbGRWYWx1ZSA9IGZvck5vZGUobm9kZS0+
Y2hpbGQxKCkpOworICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZvcmNlQ2FuRXhpdCB8fCAhaXNJ
bnQzMlNwZWN1bGF0aW9uKGNoaWxkVmFsdWUubV90eXBlKSk7CiAgICAgICAgIGNoaWxkVmFsdWUu
ZmlsdGVyKFNwZWNJbnQzMik7CiAgICAgfQogICAgIAotICAgIHZvaWQgc3BlY3VsYXRlTnVtYmVy
VW5hcnkoTm9kZSYgbm9kZSkKKyAgICB2b2lkIHNwZWN1bGF0ZU51bWJlclVuYXJ5KE5vZGUqIG5v
ZGUpCiAgICAgewotICAgICAgICBBYnN0cmFjdFZhbHVlJiBjaGlsZFZhbHVlID0gZm9yTm9kZShu
b2RlLmNoaWxkMSgpKTsKLSAgICAgICAgbm9kZS5zZXRDYW5FeGl0KCFpc051bWJlclNwZWN1bGF0
aW9uKGNoaWxkVmFsdWUubV90eXBlKSk7CisgICAgICAgIEFic3RyYWN0VmFsdWUmIGNoaWxkVmFs
dWUgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCgh
aXNOdW1iZXJTcGVjdWxhdGlvbihjaGlsZFZhbHVlLm1fdHlwZSkpOwogICAgICAgICBjaGlsZFZh
bHVlLmZpbHRlcihTcGVjTnVtYmVyKTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBzcGVjdWxhdGVC
b29sZWFuVW5hcnkoTm9kZSYgbm9kZSkKKyAgICB2b2lkIHNwZWN1bGF0ZUJvb2xlYW5VbmFyeShO
b2RlKiBub2RlKQogICAgIHsKLSAgICAgICAgQWJzdHJhY3RWYWx1ZSYgY2hpbGRWYWx1ZSA9IGZv
ck5vZGUobm9kZS5jaGlsZDEoKSk7Ci0gICAgICAgIG5vZGUuc2V0Q2FuRXhpdCghaXNCb29sZWFu
U3BlY3VsYXRpb24oY2hpbGRWYWx1ZS5tX3R5cGUpKTsKKyAgICAgICAgQWJzdHJhY3RWYWx1ZSYg
Y2hpbGRWYWx1ZSA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBub2RlLT5zZXRD
YW5FeGl0KCFpc0Jvb2xlYW5TcGVjdWxhdGlvbihjaGlsZFZhbHVlLm1fdHlwZSkpOwogICAgICAg
ICBjaGlsZFZhbHVlLmZpbHRlcihTcGVjQm9vbGVhbik7CiAgICAgfQogICAgIAotICAgIHZvaWQg
c3BlY3VsYXRlSW50MzJCaW5hcnkoTm9kZSYgbm9kZSwgYm9vbCBmb3JjZUNhbkV4aXQgPSBmYWxz
ZSkKKyAgICB2b2lkIHNwZWN1bGF0ZUludDMyQmluYXJ5KE5vZGUqIG5vZGUsIGJvb2wgZm9yY2VD
YW5FeGl0ID0gZmFsc2UpCiAgICAgewotICAgICAgICBBYnN0cmFjdFZhbHVlJiBjaGlsZFZhbHVl
MSA9IGZvck5vZGUobm9kZS5jaGlsZDEoKSk7Ci0gICAgICAgIEFic3RyYWN0VmFsdWUmIGNoaWxk
VmFsdWUyID0gZm9yTm9kZShub2RlLmNoaWxkMigpKTsKLSAgICAgICAgbm9kZS5zZXRDYW5FeGl0
KAorICAgICAgICBBYnN0cmFjdFZhbHVlJiBjaGlsZFZhbHVlMSA9IGZvck5vZGUobm9kZS0+Y2hp
bGQxKCkpOworICAgICAgICBBYnN0cmFjdFZhbHVlJiBjaGlsZFZhbHVlMiA9IGZvck5vZGUobm9k
ZS0+Y2hpbGQyKCkpOworICAgICAgICBub2RlLT5zZXRDYW5FeGl0KAogICAgICAgICAgICAgZm9y
Y2VDYW5FeGl0Ci0gICAgICAgICAgICB8fCAhaXNJbnQzMlNwZWN1bGF0aW9uKGNoaWxkVmFsdWUx
Lm1fdHlwZSkKLSAgICAgICAgICAgIHx8ICFpc0ludDMyU3BlY3VsYXRpb24oY2hpbGRWYWx1ZTIu
bV90eXBlKSk7CisgICAgICAgICAgICB8fCAhaXNJbnQzMlNwZWN1bGF0aW9uKGNoaWxkVmFsdWUx
LT5tX3R5cGUpCisgICAgICAgICAgICB8fCAhaXNJbnQzMlNwZWN1bGF0aW9uKGNoaWxkVmFsdWUy
LT5tX3R5cGUpKTsKICAgICAgICAgY2hpbGRWYWx1ZTEuZmlsdGVyKFNwZWNJbnQzMik7CiAgICAg
ICAgIGNoaWxkVmFsdWUyLmZpbHRlcihTcGVjSW50MzIpOwogICAgIH0KICAgICAKLSAgICB2b2lk
IHNwZWN1bGF0ZU51bWJlckJpbmFyeShOb2RlJiBub2RlKQorICAgIHZvaWQgc3BlY3VsYXRlTnVt
YmVyQmluYXJ5KE5vZGUqIG5vZGUpCiAgICAgewotICAgICAgICBBYnN0cmFjdFZhbHVlJiBjaGls
ZFZhbHVlMSA9IGZvck5vZGUobm9kZS5jaGlsZDEoKSk7Ci0gICAgICAgIEFic3RyYWN0VmFsdWUm
IGNoaWxkVmFsdWUyID0gZm9yTm9kZShub2RlLmNoaWxkMigpKTsKLSAgICAgICAgbm9kZS5zZXRD
YW5FeGl0KAorICAgICAgICBBYnN0cmFjdFZhbHVlJiBjaGlsZFZhbHVlMSA9IGZvck5vZGUobm9k
ZS0+Y2hpbGQxKCkpOworICAgICAgICBBYnN0cmFjdFZhbHVlJiBjaGlsZFZhbHVlMiA9IGZvck5v
ZGUobm9kZS0+Y2hpbGQyKCkpOworICAgICAgICBub2RlLT5zZXRDYW5FeGl0KAogICAgICAgICAg
ICAgIWlzTnVtYmVyU3BlY3VsYXRpb24oY2hpbGRWYWx1ZTEubV90eXBlKQogICAgICAgICAgICAg
fHwgIWlzTnVtYmVyU3BlY3VsYXRpb24oY2hpbGRWYWx1ZTIubV90eXBlKSk7CiAgICAgICAgIGNo
aWxkVmFsdWUxLmZpbHRlcihTcGVjTnVtYmVyKTsKQEAgLTI0MCw5ICsyNDAsOSBAQCBwcml2YXRl
OgogICAgICAgICBEZWZpbml0ZWx5RmFsc2UsCiAgICAgICAgIERlZmluaXRlbHlUcnVlCiAgICAg
fTsKLSAgICBCb29sZWFuUmVzdWx0IGJvb2xlYW5SZXN1bHQoTm9kZSYsIEFic3RyYWN0VmFsdWUm
KTsKKyAgICBCb29sZWFuUmVzdWx0IGJvb2xlYW5SZXN1bHQoTm9kZSosIEFic3RyYWN0VmFsdWUm
KTsKICAgICAKLSAgICBib29sIHRyeVNldENvbnN0YW50KE5vZGVJbmRleCBub2RlSW5kZXgsIEpT
VmFsdWUgdmFsdWUpCisgICAgYm9vbCB0cnlTZXRDb25zdGFudChOb2RlKiBub2RlLCBKU1ZhbHVl
IHZhbHVlKQogICAgIHsKICAgICAgICAgLy8gTWFrZSBzdXJlIHdlIGRvbid0IGNvbnN0YW50IGZv
bGQgc29tZXRoaW5nIHRoYXQgd2lsbCBwcm9kdWNlIHZhbHVlcyB0aGF0IGNvbnRyYXZlbmUKICAg
ICAgICAgLy8gcHJlZGljdGlvbnMuIElmIHRoYXQgaGFwcGVucyB0aGVuIHdlIGtub3cgdGhhdCB0
aGUgY29kZSB3aWxsIE9TUiBleGl0LCBmb3JjaW5nCkBAIC0yNTEsMTEgKzI1MSwxMSBAQCBwcml2
YXRlOgogICAgICAgICAvLyBsb3Qgb2Ygc3VidGxlIGNvZGUgdGhhdCBhc3N1bWVzIHRoYXQKICAg
ICAgICAgLy8gc3BlY3VsYXRpb25Gcm9tVmFsdWUoanNDb25zdGFudCkgPT0ganNDb25zdGFudC5w
cmVkaWN0aW9uKCkuICJIYXJkZW5pbmciIHRoYXQgY29kZQogICAgICAgICAvLyBpcyBwcm9iYWJs
eSBsZXNzIHNhbmUgdGhhbiBqdXN0IHB1bGxpbmcgYmFjayBvbiBjb25zdGFudCBmb2xkaW5nLgot
ICAgICAgICBTcGVjdWxhdGVkVHlwZSBvbGRUeXBlID0gbV9ncmFwaFtub2RlSW5kZXhdLnByZWRp
Y3Rpb24oKTsKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUgb2xkVHlwZSA9IG5vZGUtPnByZWRpY3Rp
b24oKTsKICAgICAgICAgaWYgKG1lcmdlU3BlY3VsYXRpb25zKHNwZWN1bGF0aW9uRnJvbVZhbHVl
KHZhbHVlKSwgb2xkVHlwZSkgIT0gb2xkVHlwZSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICAgICAgCi0gICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQodmFsdWUpOworICAgICAg
ICBmb3JOb2RlKG5vZGUpLnNldCh2YWx1ZSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0K
ICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RWYWx1ZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RWYWx1
ZS5oCShyZXZpc2lvbiAxNDA1MDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fi
c3RyYWN0VmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTEsIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDExLCAyMDEyLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDE4LDYgKzQxOCw4IEBA
IHN0cnVjdCBBYnN0cmFjdFZhbHVlIHsKICAgICAvLyAgICBjaGFuZ2UgeCdzIHN0cnVjdHVyZSBh
bmQgd2UgaGF2ZSBubyB3YXkgb2YgcHJvdmluZyBvdGhlcndpc2UsIGJ1dAogICAgIC8vICAgIHgn
cyBtX2Z1dHVyZVBvc3NpYmxlU3RydWN0dXJlIHdpbGwgYmUgd2hhdGV2ZXIgc3RydWN0dXJlIHdl
IGhhZCBjaGVja2VkCiAgICAgLy8gICAgd2hlbiBnZXR0aW5nIHByb3BlcnR5ICdmJy4KKyAgICAK
KyAgICAvLyBOQi4gQWxsIGZpZWxkcyBpbiB0aGlzIHN0cnVjdCBtdXN0IGhhdmUgdHJpdmlhbCBk
ZXN0cnVjdG9ycy4KIAogICAgIC8vIFRoaXMgaXMgYSBwcm92ZW4gY29uc3RyYWludCBvbiB0aGUg
c3RydWN0dXJlcyB0aGF0IHRoaXMgdmFsdWUgY2FuIGhhdmUgcmlnaHQKICAgICAvLyBub3cuIFRo
ZSBzdHJ1Y3R1cmUgb2YgdGhlIGN1cnJlbnQgdmFsdWUgbXVzdCBiZWxvbmcgdG8gdGhpcyBzZXQu
IFRoZSBzZXQgbWF5CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FkamFjZW5j
eUxpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FkamFj
ZW5jeUxpc3QuaAkocmV2aXNpb24gMTQwNTA0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdBZGphY2VuY3lMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMSwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTU3LDcgKzU3LDcgQEAgcHVibGlj
OgogICAgICAgICB9CiAgICAgfQogICAgIAotICAgIEFkamFjZW5jeUxpc3QoS2luZCBraW5kLCBO
b2RlSW5kZXggY2hpbGQxLCBOb2RlSW5kZXggY2hpbGQyLCBOb2RlSW5kZXggY2hpbGQzKQorICAg
IEFkamFjZW5jeUxpc3QoS2luZCBraW5kLCBOb2RlKiBjaGlsZDEsIE5vZGUqIGNoaWxkMiwgTm9k
ZSogY2hpbGQzKQogI2lmICFBU1NFUlRfRElTQUJMRUQKICAgICAgICAgOiBtX2tpbmQoRml4ZWQp
CiAjZW5kaWYKQEAgLTExOCw3ICsxMTgsNyBAQCBwdWJsaWM6CiAgICAgICAgIGNoaWxkKDIpID0g
Y2hpbGQzOwogICAgIH0KICAgICAKLSAgICB2b2lkIGluaXRpYWxpemUoTm9kZUluZGV4IGNoaWxk
MSA9IE5vTm9kZSwgTm9kZUluZGV4IGNoaWxkMiA9IE5vTm9kZSwgTm9kZUluZGV4IGNoaWxkMyA9
IE5vTm9kZSkKKyAgICB2b2lkIGluaXRpYWxpemUoTm9kZSogY2hpbGQxID0gMCwgTm9kZSogY2hp
bGQyID0gMCwgTm9kZSogY2hpbGQzID0gMCkKICAgICB7CiAgICAgICAgIGluaXRpYWxpemUoRWRn
ZShjaGlsZDEpLCBFZGdlKGNoaWxkMiksIEVkZ2UoY2hpbGQzKSk7CiAgICAgfQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBbGxvY2F0b3IuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FsbG9jYXRvci5oCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBbGxvY2F0b3IuaAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSwyMzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2lmbmRlZiBERkdBbGxvY2F0b3JfaAorI2RlZmluZSBERkdBbGxvY2F0b3JfaAorCisjaW5j
bHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUg
PHd0Zi9QYWdlQWxsb2NhdGlvbkFsaWduZWQuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBERkcgeworCisvLyBDdXN0b20gcG9vbCBhbGxvY2F0b3IgZm9yIGV4YWN0bHkgb25lIHR5cGUg
KHR5cGUgVCkuIEl0IGhhcyBmYXN0IChPKDEpLCBvbmx5IGEgZmV3CisvLyBpbnN0cnVjdGlvbnMp
IGFsbG9jYXRvciwgYW5kIGEgc2ltaWxhcmx5IGZhc3QgZnJlZSgpLiBSZWN5Y2xpbmcgd29ya3Mg
aWYgZWl0aGVyIG9mCisvLyB0aGUgZm9sbG93aW5nIGlzIHRydWU6CisvLyAtIFQgaGFzIGEgdHJp
dmlhbCBkZXN0cnVjdG9yLiBJbiB0aGF0IGNhc2UgeW91IGRvbid0IGhhdmUgdG8gZXZlciBjYWxs
IGZyZWUoKSBvbgorLy8gICBhbnl0aGluZy4gWW91IGNhbiBqdXN0IGNhbGwgZnJlZUFsbCgpIGlu
c3RlYWQuCisvLyAtIFlvdSBjYWxsIGZyZWUoKSBvbiBhbGwgVCdzIHRoYXQgeW91IGFsbG9jYXRl
ZCwgYW5kIG5ldmVyIHVzZSBmcmVlQWxsKCkuCisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitjbGFz
cyBBbGxvY2F0b3IgeworcHVibGljOgorICAgIEFsbG9jYXRvcigpOworICAgIH5BbGxvY2F0b3Io
KTsKKyAgICAKKyAgICB2b2lkKiBhbGxvY2F0ZSgpOyAvLyBVc2UgcGxhY2VtZW50IG5ldyB0byBh
bGxvY2F0ZSwgYW5kIGF2b2lkIHVzaW5nIHRoaXMgbWV0aG9kLgorICAgIHZvaWQgZnJlZShUKik7
IC8vIENhbGwgdGhpcyBtZXRob2QgdG8gZGVsZXRlOyBuZXZlciB1c2UgJ2RlbGV0ZScgZGlyZWN0
bHkuCisgICAgCisgICAgdm9pZCBmcmVlQWxsKCk7IC8vIE9ubHkgY2FsbCB0aGlzIGlmIFQgaGFz
IGEgdHJpdmlhbCBkZXN0cnVjdG9yLgorICAgIHZvaWQgcmVzZXQoKTsgLy8gTGlrZSBmcmVlQWxs
KCksIGJ1dCBhbHNvIHJldHVybnMgYWxsIG1lbW9yeSB0byB0aGUgT1MuCisgICAgCisgICAgdW5z
aWduZWQgaW5kZXhPZihUKik7CisgICAgCisgICAgc3RhdGljIEFsbG9jYXRvciogYWxsb2NhdG9y
T2YoVCopOworICAgIAorcHJpdmF0ZToKKyAgICB2b2lkKiBidW1wQWxsb2NhdGUoKTsKKyAgICB2
b2lkKiBmcmVlTGlzdEFsbG9jYXRlKCk7CisgICAgdm9pZCogYWxsb2NhdGVTbG93KCk7CisgICAg
dm9pZCBmcmVlUmVnaW9uc1N0YXJ0aW5nQXQoUmVnaW9uKik7CisgICAgdm9pZCBzdGFydGluZ0J1
bXBpbmdJbihSZWdpb24qKTsKKyAgICAKKyAgICBzdHJ1Y3QgUmVnaW9uIHsKKyAgICAgICAgc3Rh
dGljIHNpemVfdCBzaXplKCkgeyByZXR1cm4gNjQgKiBLQjsgfQorICAgICAgICBzdGF0aWMgc2l6
ZV90IGhlYWRlclNpemUoKSB7IHJldHVybiBzdGQ6Om1heChzaXplb2YoUmVnaW9uKSwgc2l6ZW9m
KFQpKTsgfQorICAgICAgICBzdGF0aWMgdW5zaWduZWQgbnVtYmVyT2ZUaGluZ3NQZXJSZWdpb24o
KSB7IHJldHVybiAoc2l6ZSgpIC0gaGVhZGVyU2l6ZSgpKSAvIHNpemVvZihUKTsgfQorICAgICAg
ICBUKiBkYXRhKCkgeyByZXR1cm4gYml0d2lzZV9jYXN0PFQqPihiaXR3aXNlX2Nhc3Q8Y2hhcio+
KHRoaXMpICsgaGVhZGVyU2l6ZSgpKTsgfQorICAgICAgICBib29sIGlzSW5UaGlzUmVnaW9uKFQq
IHBvaW50ZXIpIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkPihwb2ludGVyIC0gZGF0YSgp
KSA8IG51bWJlck9mVGhpbmdzUGVyUmVnaW9uKCk7IH0KKyAgICAgICAgUmVnaW9uKiByZWdpb25G
b3IoVCogcG9pbnRlcikgeyByZXR1cm4gYml0d2lzZV9jYXN0PFJlZ2lvbio+KGJpdHdpc2VfY2Fz
dDx1aW50cHRyX3Q+KHBvaW50ZXIpICYgfihzaXplKCkgLSAxKSk7IH0KKyAgICAgICAgCisgICAg
ICAgIFBhZ2VBbGxvY2F0aW9uQWxpZ25lZCBtX2FsbG9jYXRpb247CisgICAgICAgIEFsbG9jYXRv
ciogbV9hbGxvY2F0b3I7CisgICAgICAgIFJlZ2lvbiogbV9uZXh0OworICAgIH07CisgICAgCisg
ICAgUmVnaW9uKiBtX3JlZ2lvbkhlYWQ7CisgICAgdm9pZCoqIG1fZnJlZUxpc3RIZWFkOworICAg
IFQqIG1fYnVtcEVuZDsKKyAgICB1bnNpZ25lZCBtX2J1bXBSZW1haW5pbmc7Cit9OworCit0ZW1w
bGF0ZTx0eXBlbmFtZSBUPgoraW5saW5lIEFsbG9jYXRvcjo6QWxsb2NhdG9yKCkKKyAgICA6IG1f
cmVnaW9uSGVhZCgwKQorICAgICwgbV9mcmVlTGlzdEhlYWQoMCkKKyAgICAsIG1fYnVtcFJlbWFp
bmluZygwKQoreworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgoraW5saW5lIEFsbG9jYXRvcjo6
fkFsbG9jYXRvcigpCit7CisgICAgcmVzZXQoKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4K
K0FMV0FZU19JTkxJTkUgdm9pZCogQWxsb2NhdG9yOjphbGxvY2F0ZSgpCit7CisgICAgaWYgKExJ
S0VMWSh2b2lkKiByZXN1bHQgPSBidW1wQWxsb2NhdGUoKSkpCisgICAgICAgIHJldHVybiByZXN1
bHQ7CisgICAgcmV0dXJuIGZyZWVMaXN0QWxsb2NhdGUoKTsKK30KKwordGVtcGxhdGU8dHlwZW5h
bWUgVD4KK3ZvaWQgQWxsb2NhdG9yOjpmcmVlKFQqIG9iamVjdCkKK3sKKyAgICBvYmplY3QtPn5U
KCk7CisgICAgCisgICAgdm9pZCoqIGNlbGwgPSBiaXR3aXNlX2Nhc3Q8dm9pZCoqPihvYmplY3Qp
OworICAgICpjZWxsID0gbV9mcmVlTGlzdEhlYWQ7CisgICAgbV9mcmVlTGlzdEhlYWQgPSBjZWxs
OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgordm9pZCBBbGxvY2F0b3I6OmZyZWVBbGwoKQor
eworICAgIGlmICghbV9yZWdpb25IZWFkKSB7CisgICAgICAgIEFTU0VSVCghbV9idW1wUmVtYWlu
aW5nKTsKKyAgICAgICAgQVNTRVJUKCFtX2ZyZWVMaXN0SGVhZCk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisgICAgCisgICAgLy8gU2luY2UgdGhlIGNhbGxlciBpcyBvcHRpbmcgb3V0IG9mIGNh
bGxpbmcgdGhlIGRlc3RydWN0b3IgZm9yIGFueSBhbGxvY2F0ZWQgdGhpbmcsCisgICAgLy8gd2Ug
aGF2ZSB0d28gY2hvaWNlcywgcGx1cyBhIGNvbnRpbnV1bSBiZXR3ZWVuOiB3ZSBjYW4gZWl0aGVy
IGp1c3QgZGVsZXRlIGFsbCByZWdpb25zCisgICAgLy8gKGkuZS4gY2FsbCByZXNldCgpKSwgb3Ig
d2UgY2FuIG1ha2UgYWxsIHJlZ2lvbnMgYXZhaWxhYmxlIGZvciByZXVzZS4gV2UgZG8gc29tZXRo
aW5nCisgICAgLy8gdGhhdCBvcHRpbWl6ZXMgZm9yIChhKSBzcGVlZCBvZiBmcmVlQWxsKCksIChi
KSB0aGUgYXNzdW1wdGlvbiB0aGF0IGlmIHRoZSB1c2VyIGNhbGxzCisgICAgLy8gZnJlZUFsbCgp
IHRoZW4gdGhleSB3aWxsIHByb2JhYmx5IGJlIGNhbGxpbmcgYWxsb2NhdGUoKSBpbiB0aGUgbmVh
ciBmdXR1cmUuIE5hbWVseSwKKyAgICAvLyB3ZSBmcmVlIGFsbCBidXQgb25lIHJlZ2lvbiwgYW5k
IG1ha2UgdGhlIHJlbWFpbmluZyByZWdpb24gYSBidW1wIGFsbG9jYXRpb24gcmVnaW9uLgorICAg
IAorICAgIGZvciAoUmVnaW9uKiByZWdpb24gPSBtX3JlZ2lvbkhlYWQtPm1fbmV4dDsgcmVnaW9u
OyByZWdpb24gPSByZWdpb24tPm1fbmV4dCkKKyAgICAgICAgYnVpbGRGcmVlTGlzdEluKHJlZ2lv
bik7CisgICAgCisgICAgbV9yZWdpb25IZWFkLT5tX25leHQgPSAwOworICAgIG1fZnJlZUxpc3RI
ZWFkID0gMDsKKyAgICBzdGFydEJ1bXBpbmdJbihtX3JlZ2lvbkhlYWQpOworfQorCit0ZW1wbGF0
ZTx0eXBlbmFtZSBUPgordm9pZCBBbGxvY2F0b3I6OnJlc2V0KCkKK3sKKyAgICBmcmVlUmVnaW9u
c1N0YXJ0aW5nQXQobV9yZWdpb25IZWFkKTsKKyAgICAKKyAgICBtX3JlZ2lvbkhlYWQgPSAwOwor
ICAgIG1fZnJlZUxpc3RIZWFkID0gMDsKKyAgICBtX2J1bXBSZW1haW5pbmcgPSAwOworfQorCit0
ZW1wbGF0ZTx0eXBlbmFtZSBUPgordW5zaWduZWQgQWxsb2NhdG9yOjppbmRleE9mKFQqIG9iamVj
dCkKK3sKKyAgICB1bnNpZ25lZCBiYXNlSW5kZXggPSAwOworICAgIGZvciAoUmVnaW9uKiByZWdp
b24gPSBtX3JlZ2lvbkhlYWQ7IHJlZ2lvbjsgcmVnaW9uID0gcmVnaW9uLT5tX25leHQpIHsKKyAg
ICAgICAgaWYgKHJlZ2lvbi0+aXNJblRoaXNSZWdpb24ob2JqZWN0KSkKKyAgICAgICAgICAgIHJl
dHVybiBiYXNlSW5kZXggKyAob2JqZWN0IC0gcmVnaW9uLT5kYXRhKCkpOworICAgICAgICBiYXNl
SW5kZXggKz0gUmVnaW9uOjpudW1iZXJPZlRoaW5nc1BlclJlZ2lvbigpOworICAgIH0KKyAgICBD
UkFTSCgpOworICAgIHJldHVybiAwOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorQWxsb2Nh
dG9yKiBBbGxvY2F0b3I6OmFsbG9jYXRvck9mKFQqIG9iamVjdCkKK3sKKyAgICByZXR1cm4gUmVn
aW9uOjpyZWdpb25Gb3Iob2JqZWN0KS0+bV9hbGxvY2F0b3I7Cit9CisKK3RlbXBsYXRlPHR5cGVu
YW1lIFQ+CitBTFdBWVNfSU5MSU5FIHZvaWQqIEFsbG9jYXRvcjo6YnVtcEFsbG9jYXRlKCkKK3sK
KyAgICBpZiAodW5zaWduZWQgcmVtYWluaW5nID0gbV9idW1wUmVtYWluaW5nKSB7CisgICAgICAg
IHJlbWFpbmluZy0tOworICAgICAgICBtX2J1bXBSZW1haW5pbmcgPSByZW1haW5pbmc7CisgICAg
ICAgIHJldHVybiBtX2J1bXBFbmQgLSAocmVtYWluaW5nICsgMSk7CisgICAgfQorICAgIHJldHVy
biAwOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgordm9pZCogQWxsb2NhdG9yOjpmcmVlTGlz
dEFsbG9jYXRlKCkKK3sKKyAgICB2b2lkKiogcmVzdWx0ID0gbV9mcmVlTGlzdEhlYWQ7CisgICAg
aWYgKFVOTElLRUxZKCFyZXN1bHQpKQorICAgICAgICByZXR1cm4gYWxsb2NhdGVTbG93KCk7Cisg
ICAgbV9mcmVlTGlzdEhlYWQgPSBiaXR3aXNlX2Nhc3Q8dm9pZCoqPigqcmVzdWx0KTsKKyAgICBy
ZXR1cm4gcmVzdWx0OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgordm9pZCogQWxsb2NhdG9y
OjphbGxvY2F0ZVNsb3coKQoreworICAgIEFTU0VSVCghbV9mcmVlTGlzdEhlYWQpOworICAgIEFT
U0VSVCghbV9idW1wUmVtYWluaW5nKTsKKyAgICAKKyAgICBQYWdlQWxsb2NhdGlvbkFsaWduZWQg
YWxsb2NhdGlvbiA9IFBhZ2VBbGxvY2F0aW9uQWxpZ25lZDo6YWxsb2NhdGUoUmVnaW9uOjpzaXpl
KCksIFJlZ2lvbjo6c2l6ZSgpLCBPU0FsbG9jYXRvcjo6SlNHQ0hlYXBQYWdlcyk7CisgICAgaWYg
KCFzdGF0aWNfY2FzdDxib29sPihhbGxvY2F0aW9uKSkKKyAgICAgICAgQ1JBU0goKTsKKyAgICBS
ZWdpb24qIHJlZ2lvbiA9IHN0YXRpY19jYXN0PFJlZ2lvbio+KGFsbG9jYXRpb24uYmFzZSgpKTsK
KyAgICByZWdpb24tPm1fYWxsb2NhdGlvbiA9IG1fYWxsb2NhdGlvbjsKKyAgICByZWdpb24tPm1f
YWxsb2N0b3IgPSB0aGlzOworICAgIHN0YXJ0QnVtcGluZ0luKHJlZ2lvbik7CisgICAgcmVnaW9u
LT5tX25leHQgPSBtX3JlZ2lvbkhlYWQ7CisgICAgbV9yZWdpb25IZWFkID0gcmVnaW9uOworICAg
IAorICAgIHZvaWQqIHJlc3VsdCA9IGJ1bXBBbGxvY2F0ZSgpOworICAgIEFTU0VSVChyZXN1bHQp
OworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+Cit2b2lkIEFs
bG9jYXRvcjo6ZnJlZVJlZ2lvbnNTdGFydGluZ0F0KFJlZ2lvbiogcmVnaW9uKQoreworICAgIHdo
aWxlIChyZWdpb24pIHsKKyAgICAgICAgUmVnaW9uKiBuZXh0UmVnaW9uID0gcmVnaW9uLT5tX25l
eHQ7CisgICAgICAgIHJlZ2lvbi0+bV9hbGxvY2F0aW9uLmRlYWxsb2NhdGUoKTsKKyAgICAgICAg
cmVnaW9uID0gbmV4dFJlZ2lvbjsKKyAgICB9Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+Cit2
b2lkIEFsbG9jYXRvcjo6c3RhcnRCdW1waW5nSW4oUmVnaW9uKiByZWdpb24pCit7CisgICAgbV9i
dW1wRW5kID0gcmVnaW9uLT5kYXRhKCkgKyBSZWdpb246Om51bWJlck9mVGhpbmdzUGVyUmVnaW9u
KCk7CisgICAgbV9idW1wUmVtYWluaW5nID0gUmVnaW9uOjpudW1iZXJPZlRoaW5nc1BlclJlZ2lv
bigpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUo
REZHX0pJVCkKKworI2VuZGlmIC8vIERGR0FsbG9jYXRvcl9oCisKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRzU2ltcGxpZmljYXRpb25QaGFzZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVudHNTaW1wbGlmaWNh
dGlvblBoYXNlLmNwcAkocmV2aXNpb24gMTQwNTA0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdBcmd1bWVudHNTaW1wbGlmaWNhdGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDEzIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
MTQ5LDExICsxNDksMTAgQEAgcHVibGljOgogICAgICAgICAgICAgaWYgKCFibG9jaykKICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW5kZXhJbkJs
b2NrID0gMDsgaW5kZXhJbkJsb2NrIDwgYmxvY2stPnNpemUoKTsgKytpbmRleEluQmxvY2spIHsK
LSAgICAgICAgICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4ID0gYmxvY2stPmF0KGluZGV4SW5C
bG9jayk7Ci0gICAgICAgICAgICAgICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhbbm9kZUluZGV4XTsK
LSAgICAgICAgICAgICAgICBpZiAoIW5vZGUuc2hvdWxkR2VuZXJhdGUoKSkKKyAgICAgICAgICAg
ICAgICBOb2RlKiBub2RlID0gYmxvY2stPmF0KGluZGV4SW5CbG9jayk7CisgICAgICAgICAgICAg
ICAgaWYgKCFub2RlLT5zaG91bGRHZW5lcmF0ZSgpKQogICAgICAgICAgICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUub3AoKSkgeworICAgICAgICAgICAg
ICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewogICAgICAgICAgICAgICAgIGNhc2UgQ3JlYXRlQXJn
dW1lbnRzOiB7CiAgICAgICAgICAgICAgICAgICAgIC8vIElnbm9yZSB0aGlzIG9wLiBJZiB3ZSBz
ZWUgYSBsb25lIENyZWF0ZUFyZ3VtZW50cyB0aGVuIHdlIHdhbnQgdG8KICAgICAgICAgICAgICAg
ICAgICAgLy8gY29tcGxldGVseSBpZ25vcmUgaXQgYmVjYXVzZToKQEAgLTE3MywxNiArMTcyLDE2
IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIAogICAg
ICAgICAgICAgICAgIGNhc2UgU2V0TG9jYWw6IHsKLSAgICAgICAgICAgICAgICAgICAgTm9kZSYg
c291cmNlID0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXTsKLSAgICAgICAgICAgICAgICAgICAgVmFy
aWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBub2RlLnZhcmlhYmxlQWNjZXNz
RGF0YSgpOworICAgICAgICAgICAgICAgICAgICBOb2RlKiBzb3VyY2UgPSBub2RlLT5jaGlsZDEo
KS5ub2RlKCk7CisgICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFi
bGVBY2Nlc3NEYXRhID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CiAgICAgICAgICAgICAg
ICAgICAgIGludCBhcmd1bWVudHNSZWdpc3RlciA9Ci0gICAgICAgICAgICAgICAgICAgICAgICBt
X2dyYXBoLnVuY2hlY2tlZEFyZ3VtZW50c1JlZ2lzdGVyRm9yKG5vZGUuY29kZU9yaWdpbik7Ci0g
ICAgICAgICAgICAgICAgICAgIGlmIChzb3VyY2Uub3AoKSAhPSBDcmVhdGVBcmd1bWVudHMgJiYg
c291cmNlLm9wKCkgIT0gUGhhbnRvbUFyZ3VtZW50cykgeworICAgICAgICAgICAgICAgICAgICAg
ICAgbV9ncmFwaC51bmNoZWNrZWRBcmd1bWVudHNSZWdpc3RlckZvcihub2RlLT5jb2RlT3JpZ2lu
KTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHNvdXJjZS0+b3AoKSAhPSBDcmVhdGVBcmd1bWVu
dHMgJiYgc291cmNlLT5vcCgpICE9IFBoYW50b21Bcmd1bWVudHMpIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHRoZSBzb3VyY2Ugb2YgdGhlIFNldExvY2FsIGtu
b3dzIHRoYXQgaWYgaXQncwogICAgICAgICAgICAgICAgICAgICAgICAgLy8gYSB2YXJpYWJsZSB0
aGF0IHdlIHRoaW5rIGlzIGFsaWFzZWQgdG8gdGhlIGFyZ3VtZW50cywgdGhlbiBpdAogICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gbWF5IGVzY2FwZSBhdCB0aGlzIHBvaW50LiBJbiBmdXR1cmUs
IHdlIGNvdWxkIHRyYWNrIHRyYW5zaXRpdmUKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFs
aWFzaW5nLiBCdXQgbm90IHlldC4KLSAgICAgICAgICAgICAgICAgICAgICAgIG9ic2VydmVCYWRB
cmd1bWVudHNVc2Uobm9kZS5jaGlsZDEoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBvYnNl
cnZlQmFkQXJndW1lbnRzVXNlKHNvdXJjZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAKICAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIElmIHRoaXMgaXMgYW4gYXNzaWdubWVudCB0byB0aGUg
YXJndW1lbnRzIHJlZ2lzdGVyLCB0aGVuCiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBwcmV0
ZW5kIGFzIGlmIHRoZSBhcmd1bWVudHMgd2VyZSBjcmVhdGVkLiBXZSBkb24ndCB3YW50IHRvCkBA
IC0xOTUsMTQgKzE5NCwxNCBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBp
bml0X2xhenlfcmVnIHNpbmNlIGl0IHRyZWF0cyBDcmVhdGVBcmd1bWVudHMgYXMgcmVhZGluZwog
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gbG9jYWwgdmFyaWFibGVzLiBUaGF0IGNvdWxkIGJl
IGZpeGVkLCBidXQgaXQncyBlYXNpZXIgdG8KICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdv
cmsgYXJvdW5kIHRoaXMgaGVyZS4KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzb3VyY2Uu
b3AoKSA9PSBKU0NvbnN0YW50Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgIXNvdXJj
ZS52YWx1ZU9mSlNDb25zdGFudChjb2RlQmxvY2soKSkpCisgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoc291cmNlLT5vcCgpID09IEpTQ29uc3RhbnQKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAmJiAhc291cmNlLT52YWx1ZU9mSlNDb25zdGFudChjb2RlQmxvY2soKSkpCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAKICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChhcmd1bWVudHNSZWdpc3RlciAhPSBJbnZhbGlkVmly
dHVhbFJlZ2lzdGVyCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgKHZhcmlhYmxlQWNj
ZXNzRGF0YS0+bG9jYWwoKSA9PSBhcmd1bWVudHNSZWdpc3RlcgogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB8fCB2YXJpYWJsZUFjY2Vzc0RhdGEtPmxvY2FsKCkgPT0gdW5tb2RpZmll
ZEFyZ3VtZW50c1JlZ2lzdGVyKGFyZ3VtZW50c1JlZ2lzdGVyKSkpIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBtX2NyZWF0ZXNBcmd1bWVudHMuYWRkKG5vZGUuY29kZU9yaWdpbi5pbmxp
bmVDYWxsRnJhbWUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fY3JlYXRlc0FyZ3Vt
ZW50cy5hZGQobm9kZS0+Y29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpOwogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgfQogCkBAIC0y
MTQsMTkgKzIxMywxOSBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgICAgICBBcmd1bWVu
dHNBbGlhc2luZ0RhdGEmIGRhdGEgPQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fYXJn
dW1lbnRzQWxpYXNpbmcuZmluZCh2YXJpYWJsZUFjY2Vzc0RhdGEpLT52YWx1ZTsKICAgICAgICAg
ICAgICAgICAgICAgICAgIGRhdGEubWVyZ2VOb25Bcmd1bWVudHNBc3NpZ25tZW50KCk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBkYXRhLm1lcmdlQ2FsbENvbnRleHQobm9kZS5jb2RlT3JpZ2lu
LmlubGluZUNhbGxGcmFtZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLm1lcmdlQ2Fs
bENvbnRleHQobm9kZS0+Y29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpOwogICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICAgICAgaWYgKGFyZ3VtZW50c1JlZ2lzdGVyICE9IEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIKICAg
ICAgICAgICAgICAgICAgICAgICAgICYmICh2YXJpYWJsZUFjY2Vzc0RhdGEtPmxvY2FsKCkgPT0g
YXJndW1lbnRzUmVnaXN0ZXIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCB2YXJpYWJs
ZUFjY2Vzc0RhdGEtPmxvY2FsKCkgPT0gdW5tb2RpZmllZEFyZ3VtZW50c1JlZ2lzdGVyKGFyZ3Vt
ZW50c1JlZ2lzdGVyKSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLmNvZGVP
cmlnaW4uaW5saW5lQ2FsbEZyYW1lID09IHNvdXJjZS5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFt
ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5jb2RlT3JpZ2luLmlubGluZUNh
bGxGcmFtZSA9PSBzb3VyY2UtPmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKQogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgbV9jcmVh
dGVzQXJndW1lbnRzLmFkZChzb3VyY2UuY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpOworICAg
ICAgICAgICAgICAgICAgICAgICAgbV9jcmVhdGVzQXJndW1lbnRzLmFkZChzb3VyY2UtPmNvZGVP
cmlnaW4uaW5saW5lQ2FsbEZyYW1lKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIGlmICh2YXJpYWJsZUFj
Y2Vzc0RhdGEtPmlzQ2FwdHVyZWQoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgbV9jcmVh
dGVzQXJndW1lbnRzLmFkZChzb3VyY2UuY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpOworICAg
ICAgICAgICAgICAgICAgICAgICAgbV9jcmVhdGVzQXJndW1lbnRzLmFkZChzb3VyY2UtPmNvZGVP
cmlnaW4uaW5saW5lQ2FsbEZyYW1lKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIEFyZ3VtZW50c0FsaWFz
aW5nRGF0YSYgZGF0YSA9CkBAIC0yMzQsMjkgKzIzMywyOSBAQCBwdWJsaWM6CiAgICAgICAgICAg
ICAgICAgICAgIGRhdGEubWVyZ2VBcmd1bWVudHNBc3NpZ25tZW50KCk7CiAgICAgICAgICAgICAg
ICAgICAgIC8vIFRoaXMgZW5zdXJlcyB0aGF0IHRoZSB2YXJpYWJsZSdzIHVzZXMgYXJlIGluIHRo
ZSBzYW1lIGNvbnRleHQgYXMKICAgICAgICAgICAgICAgICAgICAgLy8gdGhlIGFyZ3VtZW50cyBp
dCBpcyBhbGlhc2luZy4KLSAgICAgICAgICAgICAgICAgICAgZGF0YS5tZXJnZUNhbGxDb250ZXh0
KG5vZGUuY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpOwotICAgICAgICAgICAgICAgICAgICBk
YXRhLm1lcmdlQ2FsbENvbnRleHQoc291cmNlLmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKTsK
KyAgICAgICAgICAgICAgICAgICAgZGF0YS5tZXJnZUNhbGxDb250ZXh0KG5vZGUtPmNvZGVPcmln
aW4uaW5saW5lQ2FsbEZyYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgZGF0YS5tZXJnZUNhbGxD
b250ZXh0KHNvdXJjZS0+Y29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpOwogICAgICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIAog
ICAgICAgICAgICAgICAgIGNhc2UgR2V0TG9jYWw6CiAgICAgICAgICAgICAgICAgY2FzZSBQaGk6
IHsKLSAgICAgICAgICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vz
c0RhdGEgPSBub2RlLnZhcmlhYmxlQWNjZXNzRGF0YSgpOworICAgICAgICAgICAgICAgICAgICBW
YXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9IG5vZGUtPnZhcmlhYmxlQWNj
ZXNzRGF0YSgpOwogICAgICAgICAgICAgICAgICAgICBpZiAodmFyaWFibGVBY2Nlc3NEYXRhLT5p
c0NhcHR1cmVkKCkpCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
ICAgICAgICAgQXJndW1lbnRzQWxpYXNpbmdEYXRhJiBkYXRhID0KICAgICAgICAgICAgICAgICAg
ICAgICAgIG1fYXJndW1lbnRzQWxpYXNpbmcuZmluZCh2YXJpYWJsZUFjY2Vzc0RhdGEpLT52YWx1
ZTsKLSAgICAgICAgICAgICAgICAgICAgZGF0YS5tZXJnZUNhbGxDb250ZXh0KG5vZGUuY29kZU9y
aWdpbi5pbmxpbmVDYWxsRnJhbWUpOworICAgICAgICAgICAgICAgICAgICBkYXRhLm1lcmdlQ2Fs
bENvbnRleHQobm9kZS0+Y29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpOwogICAgICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIAog
ICAgICAgICAgICAgICAgIGNhc2UgRmx1c2g6IHsKLSAgICAgICAgICAgICAgICAgICAgVmFyaWFi
bGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBub2RlLnZhcmlhYmxlQWNjZXNzRGF0
YSgpOworICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNj
ZXNzRGF0YSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOwogICAgICAgICAgICAgICAgICAg
ICBpZiAodmFyaWFibGVBY2Nlc3NEYXRhLT5pc0NhcHR1cmVkKCkpCiAgICAgICAgICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgQXJndW1lbnRzQWxpYXNpbmdEYXRh
JiBkYXRhID0KICAgICAgICAgICAgICAgICAgICAgICAgIG1fYXJndW1lbnRzQWxpYXNpbmcuZmlu
ZCh2YXJpYWJsZUFjY2Vzc0RhdGEpLT52YWx1ZTsKLSAgICAgICAgICAgICAgICAgICAgZGF0YS5t
ZXJnZUNhbGxDb250ZXh0KG5vZGUuY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpOworICAgICAg
ICAgICAgICAgICAgICBkYXRhLm1lcmdlQ2FsbENvbnRleHQobm9kZS0+Y29kZU9yaWdpbi5pbmxp
bmVDYWxsRnJhbWUpOwogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAg
Ly8gSWYgYSB2YXJpYWJsZSBpcyB1c2VkIGluIGEgZmx1c2ggdGhlbiBieSBkZWZpbml0aW9uIGl0
IGVzY2FwZXMuCiAgICAgICAgICAgICAgICAgICAgIGRhdGEuZXNjYXBlcyA9IHRydWU7CkBAIC0y
NjQsMTggKzI2MywxOCBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgICAgICAKICAgICAgICAgICAgICAgICBjYXNlIFNldEFyZ3VtZW50OiB7Ci0gICAgICAgICAg
ICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhID0gbm9kZS52
YXJpYWJsZUFjY2Vzc0RhdGEoKTsKKyAgICAgICAgICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NE
YXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKICAg
ICAgICAgICAgICAgICAgICAgaWYgKHZhcmlhYmxlQWNjZXNzRGF0YS0+aXNDYXB0dXJlZCgpKQog
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIEFyZ3Vt
ZW50c0FsaWFzaW5nRGF0YSYgZGF0YSA9CiAgICAgICAgICAgICAgICAgICAgICAgICBtX2FyZ3Vt
ZW50c0FsaWFzaW5nLmZpbmQodmFyaWFibGVBY2Nlc3NEYXRhKS0+dmFsdWU7CiAgICAgICAgICAg
ICAgICAgICAgIGRhdGEubWVyZ2VOb25Bcmd1bWVudHNBc3NpZ25tZW50KCk7Ci0gICAgICAgICAg
ICAgICAgICAgIGRhdGEubWVyZ2VDYWxsQ29udGV4dChub2RlLmNvZGVPcmlnaW4uaW5saW5lQ2Fs
bEZyYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgZGF0YS5tZXJnZUNhbGxDb250ZXh0KG5vZGUt
PmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAg
ICBjYXNlIEdldEJ5VmFsOiB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChub2RlLmFycmF5TW9k
ZSgpLnR5cGUoKSAhPSBBcnJheTo6QXJndW1lbnRzKSB7CisgICAgICAgICAgICAgICAgICAgIGlm
IChub2RlLT5hcnJheU1vZGUoKS50eXBlKCkgIT0gQXJyYXk6OkFyZ3VtZW50cykgewogICAgICAg
ICAgICAgICAgICAgICAgICAgb2JzZXJ2ZUJhZEFyZ3VtZW50c1VzZXMobm9kZSk7CiAgICAgICAg
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgfQpAQCAtMjgzLDE4
ICsyODIsMTggQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICAvLyBUaGF0J3Mgc28gYXdm
dWwgYW5kIHByZXR0eSBtdWNoIGltcG9zc2libGUgc2luY2UgaXQgd291bGQKICAgICAgICAgICAg
ICAgICAgICAgLy8gaW1wbHkgdGhhdCB0aGUgYXJndW1lbnRzIHdlcmUgcHJlZGljdGVkIGludGVn
ZXIsIGJ1dCBpdCdzCiAgICAgICAgICAgICAgICAgICAgIC8vIGdvb2QgdG8gYmUgZGVmZW5zaXZl
IGFuZCB0aG9yb3VnaC4KLSAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZUJhZEFyZ3VtZW50c1Vz
ZShub2RlLmNoaWxkMigpKTsKLSAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZVByb3BlckFyZ3Vt
ZW50c1VzZShub2RlLCBub2RlLmNoaWxkMSgpKTsKKyAgICAgICAgICAgICAgICAgICAgb2JzZXJ2
ZUJhZEFyZ3VtZW50c1VzZShub2RlLT5jaGlsZDIoKS5ub2RlKCkpOworICAgICAgICAgICAgICAg
ICAgICBvYnNlcnZlUHJvcGVyQXJndW1lbnRzVXNlKG5vZGUsIG5vZGUtPmNoaWxkMSgpKTsKICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgICAgICAKICAgICAgICAgICAgICAgICBjYXNlIEdldEFycmF5TGVuZ3RoOiB7Ci0gICAgICAg
ICAgICAgICAgICAgIGlmIChub2RlLmFycmF5TW9kZSgpLnR5cGUoKSAhPSBBcnJheTo6QXJndW1l
bnRzKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS50eXBlKCkg
IT0gQXJyYXk6OkFyZ3VtZW50cykgewogICAgICAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZUJh
ZEFyZ3VtZW50c1VzZXMobm9kZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAg
ICAgICAgICAgIG9ic2VydmVQcm9wZXJBcmd1bWVudHNVc2Uobm9kZSwgbm9kZS5jaGlsZDEoKSk7
CisgICAgICAgICAgICAgICAgICAgIG9ic2VydmVQcm9wZXJBcmd1bWVudHNVc2Uobm9kZSwgbm9k
ZS0+Y2hpbGQxKCkpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgICAgIApAQCAtMzM1LDE2ICszMzQsMTUgQEAgcHVibGljOgog
ICAgICAgICAgICAgaWYgKCFibG9jaykKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaW5kZXhJbkJsb2NrID0gMDsgaW5kZXhJbkJsb2NrIDwgYmxv
Y2stPnNpemUoKTsgKytpbmRleEluQmxvY2spIHsKLSAgICAgICAgICAgICAgICBOb2RlSW5kZXgg
bm9kZUluZGV4ID0gYmxvY2stPmF0KGluZGV4SW5CbG9jayk7Ci0gICAgICAgICAgICAgICAgTm9k
ZSYgbm9kZSA9IG1fZ3JhcGhbbm9kZUluZGV4XTsKLSAgICAgICAgICAgICAgICBpZiAoIW5vZGUu
c2hvdWxkR2VuZXJhdGUoKSkKKyAgICAgICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPmF0
KGluZGV4SW5CbG9jayk7CisgICAgICAgICAgICAgICAgaWYgKCFub2RlLT5zaG91bGRHZW5lcmF0
ZSgpKQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICBpZiAo
bm9kZS5vcCgpICE9IFNldExvY2FsKQorICAgICAgICAgICAgICAgIGlmIChub2RlLT5vcCgpICE9
IFNldExvY2FsKQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAg
ICBOb2RlJiBzb3VyY2UgPSBtX2dyYXBoW25vZGUuY2hpbGQxKCldOwotICAgICAgICAgICAgICAg
IGlmIChzb3VyY2Uub3AoKSAhPSBDcmVhdGVBcmd1bWVudHMpCisgICAgICAgICAgICAgICAgTm9k
ZSogc291cmNlID0gbm9kZS0+Y2hpbGQxKCkubm9kZSgpOworICAgICAgICAgICAgICAgIGlmIChz
b3VyY2UtPm9wKCkgIT0gQ3JlYXRlQXJndW1lbnRzKQogICAgICAgICAgICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNz
RGF0YSA9IG5vZGUudmFyaWFibGVBY2Nlc3NEYXRhKCk7CisgICAgICAgICAgICAgICAgVmFyaWFi
bGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0Rh
dGEoKTsKICAgICAgICAgICAgICAgICBpZiAodmFyaWFibGVBY2Nlc3NEYXRhLT5pc0NhcHR1cmVk
KCkpIHsKICAgICAgICAgICAgICAgICAgICAgLy8gVGhlIGNhcHR1cmVkIGNhc2Ugd291bGQgaGF2
ZSBhbHJlYWR5IGJlZW4gdGFrZW4gY2FyZSBvZiBpbiB0aGUKICAgICAgICAgICAgICAgICAgICAg
Ly8gcHJldmlvdXMgcGFzcy4KQEAgLTM1Niw3ICszNTQsNyBAQCBwdWJsaWM6CiAgICAgICAgICAg
ICAgICAgaWYgKGRhdGEuaXNWYWxpZCgpKQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsK
ICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBtX2NyZWF0ZXNBcmd1bWVudHMuYWRk
KHNvdXJjZS5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSk7CisgICAgICAgICAgICAgICAgbV9j
cmVhdGVzQXJndW1lbnRzLmFkZChzb3VyY2UtPmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKTsK
ICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICAKQEAgLTQxNCwyNCArNDEyLDIzIEBA
IHB1YmxpYzoKICAgICAgICAgICAgIGlmICghYmxvY2spCiAgICAgICAgICAgICAgICAgY29udGlu
dWU7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGluZGV4SW5CbG9jayA9IDA7IGluZGV4SW5C
bG9jayA8IGJsb2NrLT5zaXplKCk7ICsraW5kZXhJbkJsb2NrKSB7Ci0gICAgICAgICAgICAgICAg
Tm9kZUluZGV4IG5vZGVJbmRleCA9IGJsb2NrLT5hdChpbmRleEluQmxvY2spOwotICAgICAgICAg
ICAgICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW25vZGVJbmRleF07Ci0gICAgICAgICAgICAgICAg
aWYgKCFub2RlLnNob3VsZEdlbmVyYXRlKCkpCisgICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9
IGJsb2NrLT5hdChpbmRleEluQmxvY2spOworICAgICAgICAgICAgICAgIGlmICghbm9kZS0+c2hv
dWxkR2VuZXJhdGUoKSkKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAg
ICAgICAgCi0gICAgICAgICAgICAgICAgc3dpdGNoIChub2RlLm9wKCkpIHsKKyAgICAgICAgICAg
ICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKICAgICAgICAgICAgICAgICBjYXNlIFNldExvY2Fs
OiB7Ci0gICAgICAgICAgICAgICAgICAgIE5vZGUmIHNvdXJjZSA9IG1fZ3JhcGhbbm9kZS5jaGls
ZDEoKV07Ci0gICAgICAgICAgICAgICAgICAgIGlmIChzb3VyY2Uub3AoKSAhPSBDcmVhdGVBcmd1
bWVudHMpCisgICAgICAgICAgICAgICAgICAgIE5vZGUqIHNvdXJjZSA9IG5vZGUtPmNoaWxkMSgp
Lm5vZGUoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHNvdXJjZS0+b3AoKSAhPSBDcmVhdGVB
cmd1bWVudHMpCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAg
ICAgICAgCi0gICAgICAgICAgICAgICAgICAgIGlmIChtX2NyZWF0ZXNBcmd1bWVudHMuY29udGFp
bnMoc291cmNlLmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKSkKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKG1fY3JlYXRlc0FyZ3VtZW50cy5jb250YWlucyhzb3VyY2UtPmNvZGVPcmlnaW4uaW5s
aW5lQ2FsbEZyYW1lKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJp
YWJsZUFjY2Vzc0RhdGEgPSBub2RlLnZhcmlhYmxlQWNjZXNzRGF0YSgpOworICAgICAgICAgICAg
ICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9IG5vZGUtPnZh
cmlhYmxlQWNjZXNzRGF0YSgpOwogICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAg
ICAgICAgaWYgKG1fZ3JhcGguYXJndW1lbnRzUmVnaXN0ZXJGb3Iobm9kZS5jb2RlT3JpZ2luKSA9
PSB2YXJpYWJsZUFjY2Vzc0RhdGEtPmxvY2FsKCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
IHx8IHVubW9kaWZpZWRBcmd1bWVudHNSZWdpc3RlcihtX2dyYXBoLmFyZ3VtZW50c1JlZ2lzdGVy
Rm9yKG5vZGUuY29kZU9yaWdpbikpID09IHZhcmlhYmxlQWNjZXNzRGF0YS0+bG9jYWwoKSkKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGguYXJndW1lbnRzUmVnaXN0ZXJGb3Iobm9kZS0+
Y29kZU9yaWdpbikgPT0gdmFyaWFibGVBY2Nlc3NEYXRhLT5sb2NhbCgpCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICB8fCB1bm1vZGlmaWVkQXJndW1lbnRzUmVnaXN0ZXIobV9ncmFwaC5hcmd1
bWVudHNSZWdpc3RlckZvcihub2RlLT5jb2RlT3JpZ2luKSkgPT0gdmFyaWFibGVBY2Nlc3NEYXRh
LT5sb2NhbCgpKQogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgICAg
ICAgICAgICAgQVNTRVJUKCF2YXJpYWJsZUFjY2Vzc0RhdGEtPmlzQ2FwdHVyZWQoKSk7CkBAIC00
NjksMTYgKzQ2NiwxNiBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgY2FzZSBGb3J3YXJkU3Ry
dWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnQ6CiAgICAgICAgICAgICAgICAgY2FzZSBDaGVja0Fy
cmF5OiB7CiAgICAgICAgICAgICAgICAgICAgIC8vIFdlIGNhbiBqdXN0IGdldCByaWQgb2YgdGhp
cyBub2RlLCBpZiBpdCByZWZlcmVuY2VzIGEgcGhhbnRvbSBhcmd1bWVudC4KLSAgICAgICAgICAg
ICAgICAgICAgaWYgKCFpc09LVG9PcHRpbWl6ZShtX2dyYXBoW25vZGUuY2hpbGQxKCldKSkKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKCFpc09LVG9PcHRpbWl6ZShub2RlLT5jaGlsZDEoKS5ub2Rl
KCkpKQogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAg
IG1fZ3JhcGguZGVyZWYobm9kZS5jaGlsZDEoKSk7Ci0gICAgICAgICAgICAgICAgICAgIG5vZGUu
c2V0T3BBbmREZWZhdWx0RmxhZ3MoUGhhbnRvbSk7Ci0gICAgICAgICAgICAgICAgICAgIG5vZGUu
Y2hpbGRyZW4uc2V0Q2hpbGQxKEVkZ2UoKSk7CisgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgu
ZGVyZWYobm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgICAgICAgICBub2RlLT5zZXRPcEFu
ZERlZmF1bHRGbGFncyhQaGFudG9tKTsKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGRy
ZW4uc2V0Q2hpbGQxKEVkZ2UoKSk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgY2FzZSBH
ZXRCeVZhbDogewotICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS5hcnJheU1vZGUoKS50eXBl
KCkgIT0gQXJyYXk6OkFyZ3VtZW50cykKKyAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmFy
cmF5TW9kZSgpLnR5cGUoKSAhPSBBcnJheTo6QXJndW1lbnRzKQogICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAKICAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBjYW4gYmUgc2ltcGxp
ZmllZCB0byBHZXRNeUFyZ3VtZW50QnlWYWwgaWYgd2Uga25vdyB0aGF0CkBAIC00ODgsMjggKzQ4
NSwyOCBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgIC8vIDIpIEl0cyBmaXJzdCBjaGls
ZCBpcyBDcmVhdGVBcmd1bWVudHMgYW5kIGl0cyBJbmxpbmVDYWxsRnJhbWUqCiAgICAgICAgICAg
ICAgICAgICAgIC8vICAgIGlzIG5vdCBtYXJrZWQgYXMgY3JlYXRpbmcgYXJndW1lbnRzLgogICAg
ICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFpc09LVG9PcHRpbWl6
ZShtX2dyYXBoW25vZGUuY2hpbGQxKCldKSkKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFpc09L
VG9PcHRpbWl6ZShub2RlLT5jaGlsZDEoKS5ub2RlKCkpKQogICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBtX2dy
YXBoLmRlcmVmKG5vZGUuY2hpbGQxKCkpOwotICAgICAgICAgICAgICAgICAgICBub2RlLmNoaWxk
cmVuLmNoaWxkMSgpID0gbm9kZS5jaGlsZHJlbi5jaGlsZDIoKTsKLSAgICAgICAgICAgICAgICAg
ICAgbm9kZS5jaGlsZHJlbi5jaGlsZDIoKSA9IEVkZ2UoKTsKLSAgICAgICAgICAgICAgICAgICAg
bm9kZS5zZXRPcEFuZERlZmF1bHRGbGFncyhHZXRNeUFyZ3VtZW50QnlWYWwpOworICAgICAgICAg
ICAgICAgICAgICBtX2dyYXBoLmRlcmVmKG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgICAg
ICAgICAgbm9kZS0+Y2hpbGRyZW4uY2hpbGQxKCkgPSBub2RlLT5jaGlsZHJlbi5jaGlsZDIoKTsK
KyAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGRyZW4uY2hpbGQyKCkgPSBFZGdlKCk7Cisg
ICAgICAgICAgICAgICAgICAgIG5vZGUtPnNldE9wQW5kRGVmYXVsdEZsYWdzKEdldE15QXJndW1l
bnRCeVZhbCk7CiAgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgPSB0cnVlOwogICAgICAgICAg
ICAgICAgICAgICAtLWluZGV4SW5CbG9jazsgLy8gRm9yY2UgcmVjb25zaWRlcmF0aW9uIG9mIHRo
aXMgb3Agbm93IHRoYXQgaXQncyBhIEdldE15QXJndW1lbnRCeVZhbC4KICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAKICAg
ICAgICAgICAgICAgICBjYXNlIEdldEFycmF5TGVuZ3RoOiB7Ci0gICAgICAgICAgICAgICAgICAg
IGlmIChub2RlLmFycmF5TW9kZSgpLnR5cGUoKSAhPSBBcnJheTo6QXJndW1lbnRzKQorICAgICAg
ICAgICAgICAgICAgICBpZiAobm9kZS0+YXJyYXlNb2RlKCkudHlwZSgpICE9IEFycmF5OjpBcmd1
bWVudHMpCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAg
ICAgCi0gICAgICAgICAgICAgICAgICAgIGlmICghaXNPS1RvT3B0aW1pemUobV9ncmFwaFtub2Rl
LmNoaWxkMSgpXSkpCisgICAgICAgICAgICAgICAgICAgIGlmICghaXNPS1RvT3B0aW1pemUobm9k
ZS0+Y2hpbGQxKCkubm9kZSgpKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5kZXJlZihub2Rl
LmNoaWxkMSgpKTsKLSAgICAgICAgICAgICAgICAgICAgbm9kZS5jaGlsZHJlbi5jaGlsZDEoKSA9
IEVkZ2UoKTsKLSAgICAgICAgICAgICAgICAgICAgbm9kZS5zZXRPcEFuZERlZmF1bHRGbGFncyhH
ZXRNeUFyZ3VtZW50c0xlbmd0aCk7CisgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguZGVyZWYo
bm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgICAgICAgICBub2RlLT5jaGlsZHJlbi5jaGls
ZDEoKSA9IEVkZ2UoKTsKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+c2V0T3BBbmREZWZhdWx0
RmxhZ3MoR2V0TXlBcmd1bWVudHNMZW5ndGgpOwogICAgICAgICAgICAgICAgICAgICBjaGFuZ2Vk
ID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgLS1pbmRleEluQmxvY2s7IC8vIEZvcmNlIHJl
Y29uc2lkZXJhdGlvbiBvZiB0aGlzIG9wIG5vZXcgdGhhdCBpdCdzIGEgR2V0TXlBcmd1bWVudHNM
ZW5ndGguCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtNTE3LDE2ICs1MTQsMTYgQEAg
cHVibGljOgogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBjYXNlIEdldE15
QXJndW1lbnRzTGVuZ3RoOgogICAgICAgICAgICAgICAgIGNhc2UgR2V0TXlBcmd1bWVudHNMZW5n
dGhTYWZlOiB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChtX2NyZWF0ZXNBcmd1bWVudHMuY29u
dGFpbnMobm9kZS5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSkpIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIEFTU0VSVChub2RlLm9wKCkgPT0gR2V0TXlBcmd1bWVudHNMZW5ndGhTYWZlKTsK
KyAgICAgICAgICAgICAgICAgICAgaWYgKG1fY3JlYXRlc0FyZ3VtZW50cy5jb250YWlucyhub2Rl
LT5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IEFTU0VSVChub2RlLT5vcCgpID09IEdldE15QXJndW1lbnRzTGVuZ3RoU2FmZSk7CiAgICAgICAg
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgICAgICBpZiAobm9kZS5vcCgpID09IEdldE15QXJndW1lbnRzTGVuZ3RoU2FmZSkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS5zZXRPcChHZXRNeUFyZ3VtZW50c0xlbmd0aCk7
CisgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5vcCgpID09IEdldE15QXJndW1lbnRzTGVu
Z3RoU2FmZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+c2V0T3AoR2V0TXlBcmd1
bWVudHNMZW5ndGgpOwogICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCA9IHRydWU7CiAg
ICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAg
ICAgICAgIENvZGVPcmlnaW4gY29kZU9yaWdpbiA9IG5vZGUuY29kZU9yaWdpbjsKKyAgICAgICAg
ICAgICAgICAgICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2luID0gbm9kZS0+Y29kZU9yaWdpbjsKICAg
ICAgICAgICAgICAgICAgICAgaWYgKCFjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSkKICAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAKQEAgLTUzNywz
MiArNTM0LDMyIEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgICAgIENoZWNrQXJndW1l
bnRzTm90Q3JlYXRlZCwgY29kZU9yaWdpbik7CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAg
ICAgICAgICAgICAgICBtX2dyYXBoLmNvbnZlcnRUb0NvbnN0YW50KAotICAgICAgICAgICAgICAg
ICAgICAgICAgbm9kZUluZGV4LCBqc051bWJlcihjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZS0+
YXJndW1lbnRzLnNpemUoKSAtIDEpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUsIGpz
TnVtYmVyKGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgpIC0gMSkp
OwogICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAKICAgICAg
ICAgICAgICAgICBjYXNlIEdldE15QXJndW1lbnRCeVZhbDoKICAgICAgICAgICAgICAgICBjYXNl
IEdldE15QXJndW1lbnRCeVZhbFNhZmU6IHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG1fY3Jl
YXRlc0FyZ3VtZW50cy5jb250YWlucyhub2RlLmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKSkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKG5vZGUub3AoKSA9PSBHZXRNeUFyZ3Vt
ZW50QnlWYWxTYWZlKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1fY3JlYXRlc0FyZ3VtZW50
cy5jb250YWlucyhub2RlLT5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSkpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIEFTU0VSVChub2RlLT5vcCgpID09IEdldE15QXJndW1lbnRCeVZhbFNh
ZmUpOwogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUub3AoKSA9PSBHZXRNeUFyZ3VtZW50QnlW
YWxTYWZlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBub2RlLnNldE9wKEdldE15QXJndW1l
bnRCeVZhbCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5vcCgpID09IEdldE15QXJn
dW1lbnRCeVZhbFNhZmUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPnNldE9wKEdl
dE15QXJndW1lbnRCeVZhbCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkID0gdHJ1
ZTsKICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBpZiAoIW5vZGUu
Y29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpCisgICAgICAgICAgICAgICAgICAgIGlmICghbm9k
ZS0+Y29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpCiAgICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFtX2dyYXBoW25vZGUuY2hpbGQxKCldLmhh
c0NvbnN0YW50KCkpCisgICAgICAgICAgICAgICAgICAgIGlmICghbm9kZS0+Y2hpbGQxKCktPmhh
c0NvbnN0YW50KCkpCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
ICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0udmFsdWVPZkpT
Q29uc3RhbnQoY29kZUJsb2NrKCkpOworICAgICAgICAgICAgICAgICAgICBKU1ZhbHVlIHZhbHVl
ID0gbm9kZS0+Y2hpbGQxKCktPnZhbHVlT2ZKU0NvbnN0YW50KGNvZGVCbG9jaygpKTsKICAgICAg
ICAgICAgICAgICAgICAgaWYgKCF2YWx1ZS5pc0ludDMyKCkpCiAgICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCBpbmRleCA9IHZhbHVlLmFz
SW50MzIoKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKGluZGV4IDwgMAogICAgICAgICAgICAg
ICAgICAgICAgICAgfHwgc3RhdGljX2Nhc3Q8c2l6ZV90PihpbmRleCArIDEpID49Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbm9kZS5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZS0+YXJn
dW1lbnRzLnNpemUoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5jb2RlT3Jp
Z2luLmlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzLnNpemUoKSkKICAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAg
Ly8gV2Uga25vdyB3aGljaCBhcmd1bWVudCB0aGlzIGlzIGFjY2Vzc2luZy4gQnV0IG9ubHkgYWZ0
ZXIgd2UgaGF2ZSBjaGVja2VkCkBAIC01NzQsMTMgKzU3MSwxMyBAQCBwdWJsaWM6CiAgICAgICAg
ICAgICAgICAgICAgIC8vIGhhcyBydW4gLSB0aGVyZWZvcmUgaXQgbWFrZXMgbGl0dGxlIHNlbnNl
IHRvIGxpbmsgdGhlIEdldExvY2FsIG9wZXJhdGlvbgogICAgICAgICAgICAgICAgICAgICAvLyBp
bnRvIHRoZSBWYXJpYWJsZUFjY2Vzc0RhdGEgYW5kIFBoaSBncmFwaHMuCiAKLSAgICAgICAgICAg
ICAgICAgICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2luID0gbm9kZS5jb2RlT3JpZ2luOwotICAgICAg
ICAgICAgICAgICAgICBBZGphY2VuY3lMaXN0IGNoaWxkcmVuID0gbm9kZS5jaGlsZHJlbjsKKyAg
ICAgICAgICAgICAgICAgICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2luID0gbm9kZS0+Y29kZU9yaWdp
bjsKKyAgICAgICAgICAgICAgICAgICAgQWRqYWNlbmN5TGlzdCBjaGlsZHJlbiA9IG5vZGUtPmNo
aWxkcmVuOwogICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgbm9kZS5j
b252ZXJ0VG9HZXRMb2NhbFVubGlua2VkKAorICAgICAgICAgICAgICAgICAgICBub2RlLT5jb252
ZXJ0VG9HZXRMb2NhbFVubGlua2VkKAogICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nh
c3Q8VmlydHVhbFJlZ2lzdGVyPigKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlLmNv
ZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbV9ncmFwaC5iYXNlbGluZUNvZGVCbG9ja0Zvcihub2RlLmNvZGVPcmlnaW4p
LT5hcmd1bWVudEluZGV4QWZ0ZXJDYXB0dXJlKGluZGV4KSkpOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG5vZGUtPmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCAr
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5iYXNlbGluZUNvZGVCbG9ja0Zv
cihub2RlLT5jb2RlT3JpZ2luKS0+YXJndW1lbnRJbmRleEFmdGVyQ2FwdHVyZShpbmRleCkpKTsK
IAogICAgICAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKICAgICAgICAg
ICAgICAgICAgICAgICAgIGluZGV4SW5CbG9jaywgRG9udFJlZkNoaWxkcmVuLCBEb250UmVmTm9k
ZSwgU3BlY05vbmUsIENoZWNrQXJndW1lbnRzTm90Q3JlYXRlZCwKQEAgLTU5NCwxMyArNTkxLDEz
IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIAogICAg
ICAgICAgICAgICAgIGNhc2UgVGVhck9mZkFyZ3VtZW50czogewotICAgICAgICAgICAgICAgICAg
ICBpZiAobV9jcmVhdGVzQXJndW1lbnRzLmNvbnRhaW5zKG5vZGUuY29kZU9yaWdpbi5pbmxpbmVD
YWxsRnJhbWUpKQorICAgICAgICAgICAgICAgICAgICBpZiAobV9jcmVhdGVzQXJndW1lbnRzLmNv
bnRhaW5zKG5vZGUtPmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKSkKICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAg
ICAgICAgbm9kZS5zZXRPcEFuZERlZmF1bHRGbGFncyhOb3ApOworICAgICAgICAgICAgICAgICAg
ICBub2RlLT5zZXRPcEFuZERlZmF1bHRGbGFncyhOb3ApOwogICAgICAgICAgICAgICAgICAgICBt
X2dyYXBoLmNsZWFyQW5kRGVyZWZDaGlsZDEobm9kZSk7CiAgICAgICAgICAgICAgICAgICAgIG1f
Z3JhcGguY2xlYXJBbmREZXJlZkNoaWxkMihub2RlKTsKLSAgICAgICAgICAgICAgICAgICAgbm9k
ZS5zZXRSZWZDb3VudCgwKTsKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+c2V0UmVmQ291bnQo
MCk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICAgICAgCkBAIC02MTYsMjUgKzYxMywyMyBAQCBwdWJsaWM6CiAgICAgICAgICAg
ICBpZiAoIWJsb2NrKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpbmRleEluQmxvY2sgPSAwOyBpbmRleEluQmxvY2sgPCBibG9jay0+c2l6ZSgp
OyArK2luZGV4SW5CbG9jaykgewotICAgICAgICAgICAgICAgIE5vZGVJbmRleCBub2RlSW5kZXgg
PSBibG9jay0+YXQoaW5kZXhJbkJsb2NrKTsKLSAgICAgICAgICAgICAgICBOb2RlKiBub2RlUHRy
ID0gJm1fZ3JhcGhbbm9kZUluZGV4XTsKLSAgICAgICAgICAgICAgICBpZiAobm9kZVB0ci0+b3Ao
KSAhPSBDcmVhdGVBcmd1bWVudHMpCisgICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2Nr
LT5hdChpbmRleEluQmxvY2spOworICAgICAgICAgICAgICAgIGlmIChub2RlLT5vcCgpICE9IENy
ZWF0ZUFyZ3VtZW50cykKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAg
ICAgICAgLy8gSWYgdGhpcyBpcyBhIENyZWF0ZUFyZ3VtZW50cyBmb3IgYW4gSW5saW5lQ2FsbEZy
YW1lKiB0aGF0IGRvZXMKICAgICAgICAgICAgICAgICAvLyBub3QgY3JlYXRlIGFyZ3VtZW50cywg
dGhlbiByZXBsYWNlIGl0IHdpdGggYSBQaGFudG9tQXJndW1lbnRzLgogICAgICAgICAgICAgICAg
IC8vIFBoYW50b21Bcmd1bWVudHMgaXMgYSBub24tZXhlY3V0aW5nIG5vZGUgdGhhdCBqdXN0IGlu
ZGljYXRlcwogICAgICAgICAgICAgICAgIC8vIHRoYXQgdGhlIG5vZGUgc2hvdWxkIGJlIHJlaWZp
ZWQgYXMgYW4gYXJndW1lbnRzIG9iamVjdCBvbiBPU1IKICAgICAgICAgICAgICAgICAvLyBleGl0
LgotICAgICAgICAgICAgICAgIGlmIChtX2NyZWF0ZXNBcmd1bWVudHMuY29udGFpbnMobm9kZVB0
ci0+Y29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpKQorICAgICAgICAgICAgICAgIGlmIChtX2Ny
ZWF0ZXNBcmd1bWVudHMuY29udGFpbnMobm9kZS0+Y29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUp
KQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICBpZiAobm9k
ZVB0ci0+c2hvdWxkR2VuZXJhdGUoKSkgeworICAgICAgICAgICAgICAgIGlmIChub2RlLT5zaG91
bGRHZW5lcmF0ZSgpKSB7CiAgICAgICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnRO
b2RlKAogICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBEb250UmVmQ2hpbGRy
ZW4sIERvbnRSZWZOb2RlLCBTcGVjTm9uZSwgUGhhbnRvbSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgIG5vZGVQdHItPmNvZGVPcmlnaW4sIG5vZGVQdHItPmNoaWxkcmVuKTsKLSAgICAgICAgICAg
ICAgICAgICAgbm9kZVB0ciA9ICZtX2dyYXBoW25vZGVJbmRleF07CisgICAgICAgICAgICAgICAg
ICAgICAgICBub2RlLT5jb2RlT3JpZ2luLCBub2RlLT5jaGlsZHJlbik7CiAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIG5vZGVQdHItPnNldE9wQW5kRGVmYXVsdEZsYWdzKFBoYW50
b21Bcmd1bWVudHMpOwotICAgICAgICAgICAgICAgIG5vZGVQdHItPmNoaWxkcmVuLnJlc2V0KCk7
CisgICAgICAgICAgICAgICAgbm9kZS0+c2V0T3BBbmREZWZhdWx0RmxhZ3MoUGhhbnRvbUFyZ3Vt
ZW50cyk7CisgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGRyZW4ucmVzZXQoKTsKICAgICAgICAg
ICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGluc2Vy
dGlvblNldC5leGVjdXRlKGJsb2NrKTsKQEAgLTY1NCwyOCArNjQ5LDI3IEBAIHByaXZhdGU6CiAg
ICAgICAgICAgICBEZWZhdWx0SGFzaDxWYXJpYWJsZUFjY2Vzc0RhdGEqPjo6SGFzaCwKICAgICAg
ICAgICAgIE51bGxhYmxlSGFzaFRyYWl0czxWYXJpYWJsZUFjY2Vzc0RhdGEqPiA+IG1fYXJndW1l
bnRzQWxpYXNpbmc7CiAKLSAgICB2b2lkIG9ic2VydmVCYWRBcmd1bWVudHNVc2UoRWRnZSBlZGdl
KQorICAgIHZvaWQgb2JzZXJ2ZUJhZEFyZ3VtZW50c1VzZShOb2RlKiBub2RlKQogICAgIHsKLSAg
ICAgICAgaWYgKCFlZGdlKQorICAgICAgICBpZiAoIW5vZGUpCiAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgIAotICAgICAgICBOb2RlJiBjaGlsZCA9IG1fZ3JhcGhbZWRnZV07Ci0gICAgICAg
IHN3aXRjaCAoY2hpbGQub3AoKSkgeworICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKICAg
ICAgICAgY2FzZSBDcmVhdGVBcmd1bWVudHM6IHsKLSAgICAgICAgICAgIG1fY3JlYXRlc0FyZ3Vt
ZW50cy5hZGQoY2hpbGQuY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpOworICAgICAgICAgICAg
bV9jcmVhdGVzQXJndW1lbnRzLmFkZChub2RlLT5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSk7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgIGNh
c2UgR2V0TG9jYWw6IHsKLSAgICAgICAgICAgIGludCBhcmd1bWVudHNSZWdpc3RlciA9IG1fZ3Jh
cGgudW5jaGVja2VkQXJndW1lbnRzUmVnaXN0ZXJGb3IoY2hpbGQuY29kZU9yaWdpbik7CisgICAg
ICAgICAgICBpbnQgYXJndW1lbnRzUmVnaXN0ZXIgPSBtX2dyYXBoLnVuY2hlY2tlZEFyZ3VtZW50
c1JlZ2lzdGVyRm9yKG5vZGUtPmNvZGVPcmlnaW4pOwogICAgICAgICAgICAgaWYgKGFyZ3VtZW50
c1JlZ2lzdGVyICE9IEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIKLSAgICAgICAgICAgICAgICAmJiAo
Y2hpbGQubG9jYWwoKSA9PSBhcmd1bWVudHNSZWdpc3RlcgotICAgICAgICAgICAgICAgICAgICB8
fCBjaGlsZC5sb2NhbCgpID09IHVubW9kaWZpZWRBcmd1bWVudHNSZWdpc3Rlcihhcmd1bWVudHNS
ZWdpc3RlcikpKSB7Ci0gICAgICAgICAgICAgICAgbV9jcmVhdGVzQXJndW1lbnRzLmFkZChjaGls
ZC5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSk7CisgICAgICAgICAgICAgICAgJiYgKG5vZGUt
PmxvY2FsKCkgPT0gYXJndW1lbnRzUmVnaXN0ZXIKKyAgICAgICAgICAgICAgICAgICAgfHwgbm9k
ZS0+bG9jYWwoKSA9PSB1bm1vZGlmaWVkQXJndW1lbnRzUmVnaXN0ZXIoYXJndW1lbnRzUmVnaXN0
ZXIpKSkgeworICAgICAgICAgICAgICAgIG1fY3JlYXRlc0FyZ3VtZW50cy5hZGQobm9kZS0+Y29k
ZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZh
cmlhYmxlQWNjZXNzRGF0YSA9IGNoaWxkLnZhcmlhYmxlQWNjZXNzRGF0YSgpOworICAgICAgICAg
ICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBub2RlLT52YXJpYWJs
ZUFjY2Vzc0RhdGEoKTsKICAgICAgICAgICAgIGlmICh2YXJpYWJsZUFjY2Vzc0RhdGEtPmlzQ2Fw
dHVyZWQoKSkKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIApAQCAtNjg5LDE2
ICs2ODMsMTUgQEAgcHJpdmF0ZToKICAgICAgICAgfQogICAgIH0KICAgICAKLSAgICB2b2lkIG9i
c2VydmVCYWRBcmd1bWVudHNVc2VzKE5vZGUmIG5vZGUpCisgICAgdm9pZCBvYnNlcnZlQmFkQXJn
dW1lbnRzVXNlcyhOb2RlKiBub2RlKQogICAgIHsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
bV9ncmFwaC5udW1DaGlsZHJlbihub2RlKTsgaS0tOykKLSAgICAgICAgICAgIG9ic2VydmVCYWRB
cmd1bWVudHNVc2UobV9ncmFwaC5jaGlsZChub2RlLCBpKSk7CisgICAgICAgICAgICBvYnNlcnZl
QmFkQXJndW1lbnRzVXNlKG1fZ3JhcGguY2hpbGQobm9kZSwgaSkubm9kZSgpKTsKICAgICB9CiAg
ICAgCi0gICAgdm9pZCBvYnNlcnZlUHJvcGVyQXJndW1lbnRzVXNlKE5vZGUmIG5vZGUsIEVkZ2Ug
ZWRnZSkKKyAgICB2b2lkIG9ic2VydmVQcm9wZXJBcmd1bWVudHNVc2UoTm9kZSogbm9kZSwgRWRn
ZSBlZGdlKQogICAgIHsKLSAgICAgICAgTm9kZSYgY2hpbGQgPSBtX2dyYXBoW2VkZ2VdOwotICAg
ICAgICBpZiAoY2hpbGQub3AoKSAhPSBHZXRMb2NhbCkgeworICAgICAgICBpZiAoZWRnZS0+b3Ao
KSAhPSBHZXRMb2NhbCkgewogICAgICAgICAgICAgLy8gV2hlbiBjYW4gdGhpcyBoYXBwZW4/IEF0
IGxlYXN0IHR3byBjYXNlcyB0aGF0IEkgY2FuIHRoaW5rCiAgICAgICAgICAgICAvLyBvZjoKICAg
ICAgICAgICAgIC8vCkBAIC03MTAsMTggKzcwMywxOCBAQCBwcml2YXRlOgogICAgICAgICAgICAg
Ly8KICAgICAgICAgICAgIC8vIDIpIElmIHdlJ3JlIGFjY2Vzc2luZyBhcmd1bWVudHMgd2UgZ290
IGZyb20gdGhlIGhlYXAhCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAg
ICBpZiAoY2hpbGQub3AoKSA9PSBDcmVhdGVBcmd1bWVudHMKLSAgICAgICAgICAgICAgICAmJiBu
b2RlLmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lCi0gICAgICAgICAgICAgICAgICAgIT0gY2hp
bGQuY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpCi0gICAgICAgICAgICAgICAgbV9jcmVhdGVz
QXJndW1lbnRzLmFkZChjaGlsZC5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSk7CisgICAgICAg
ICAgICBpZiAoZWRnZS0+b3AoKSA9PSBDcmVhdGVBcmd1bWVudHMKKyAgICAgICAgICAgICAgICAm
JiBub2RlLT5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZQorICAgICAgICAgICAgICAgICAgICE9
IGVkZ2UtPmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKQorICAgICAgICAgICAgICAgIG1fY3Jl
YXRlc0FyZ3VtZW50cy5hZGQoZWRnZS0+Y29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpOwogICAg
ICAgICAgICAgCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICAgICAgICAgIAotICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0
YSA9IGNoaWxkLnZhcmlhYmxlQWNjZXNzRGF0YSgpOwotICAgICAgICBpZiAoY2hpbGQubG9jYWwo
KSA9PSBtX2dyYXBoLnVuY2hlY2tlZEFyZ3VtZW50c1JlZ2lzdGVyRm9yKGNoaWxkLmNvZGVPcmln
aW4pCi0gICAgICAgICAgICAmJiBub2RlLmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lICE9IGNo
aWxkLmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKSB7Ci0gICAgICAgICAgICBtX2NyZWF0ZXNB
cmd1bWVudHMuYWRkKGNoaWxkLmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKTsKKyAgICAgICAg
VmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBlZGdlLT52YXJpYWJsZUFj
Y2Vzc0RhdGEoKTsKKyAgICAgICAgaWYgKGVkZ2UtPmxvY2FsKCkgPT0gbV9ncmFwaC51bmNoZWNr
ZWRBcmd1bWVudHNSZWdpc3RlckZvcihlZGdlLT5jb2RlT3JpZ2luKQorICAgICAgICAgICAgJiYg
bm9kZS0+Y29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUgIT0gZWRnZS0+Y29kZU9yaWdpbi5pbmxp
bmVDYWxsRnJhbWUpIHsKKyAgICAgICAgICAgIG1fY3JlYXRlc0FyZ3VtZW50cy5hZGQoZWRnZS0+
Y29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICB9CiAKQEAgLTcyOSwxOCArNzIyLDE4IEBAIHByaXZhdGU6CiAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgIAogICAgICAgICBBcmd1bWVudHNBbGlhc2luZ0RhdGEmIGRhdGEgPSBtX2FyZ3Vt
ZW50c0FsaWFzaW5nLmZpbmQodmFyaWFibGVBY2Nlc3NEYXRhKS0+dmFsdWU7Ci0gICAgICAgIGRh
dGEubWVyZ2VDYWxsQ29udGV4dChub2RlLmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKTsKKyAg
ICAgICAgZGF0YS5tZXJnZUNhbGxDb250ZXh0KG5vZGUtPmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZy
YW1lKTsKICAgICB9CiAgICAgCi0gICAgYm9vbCBpc09LVG9PcHRpbWl6ZShOb2RlJiBzb3VyY2Up
CisgICAgYm9vbCBpc09LVG9PcHRpbWl6ZShOb2RlKiBzb3VyY2UpCiAgICAgewotICAgICAgICBp
ZiAobV9jcmVhdGVzQXJndW1lbnRzLmNvbnRhaW5zKHNvdXJjZS5jb2RlT3JpZ2luLmlubGluZUNh
bGxGcmFtZSkpCisgICAgICAgIGlmIChtX2NyZWF0ZXNBcmd1bWVudHMuY29udGFpbnMoc291cmNl
LT5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgICAgIAotICAgICAgICBzd2l0Y2ggKHNvdXJjZS5vcCgpKSB7CisgICAgICAgIHN3aXRj
aCAoc291cmNlLT5vcCgpKSB7CiAgICAgICAgIGNhc2UgR2V0TG9jYWw6IHsKLSAgICAgICAgICAg
IFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhID0gc291cmNlLnZhcmlhYmxl
QWNjZXNzRGF0YSgpOwotICAgICAgICAgICAgaW50IGFyZ3VtZW50c1JlZ2lzdGVyID0gbV9ncmFw
aC51bmNoZWNrZWRBcmd1bWVudHNSZWdpc3RlckZvcihzb3VyY2UuY29kZU9yaWdpbik7CisgICAg
ICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9IHNvdXJjZS0+
dmFyaWFibGVBY2Nlc3NEYXRhKCk7CisgICAgICAgICAgICBpbnQgYXJndW1lbnRzUmVnaXN0ZXIg
PSBtX2dyYXBoLnVuY2hlY2tlZEFyZ3VtZW50c1JlZ2lzdGVyRm9yKHNvdXJjZS0+Y29kZU9yaWdp
bik7CiAgICAgICAgICAgICBpZiAoYXJndW1lbnRzUmVnaXN0ZXIgPT0gSW52YWxpZFZpcnR1YWxS
ZWdpc3RlcikKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGlmIChhcmd1bWVu
dHNSZWdpc3RlciA9PSB2YXJpYWJsZUFjY2Vzc0RhdGEtPmxvY2FsKCkpCkBAIC03NjgsMzggKzc2
MSwzNyBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIAotICAg
IHZvaWQgcmVtb3ZlQXJndW1lbnRzUmVmZXJlbmNpbmdQaGFudG9tQ2hpbGQoTm9kZSYgbm9kZSwg
dW5zaWduZWQgZWRnZUluZGV4KQorICAgIHZvaWQgcmVtb3ZlQXJndW1lbnRzUmVmZXJlbmNpbmdQ
aGFudG9tQ2hpbGQoTm9kZSogbm9kZSwgdW5zaWduZWQgZWRnZUluZGV4KQogICAgIHsKLSAgICAg
ICAgRWRnZSBlZGdlID0gbm9kZS5jaGlsZHJlbi5jaGlsZChlZGdlSW5kZXgpOworICAgICAgICBF
ZGdlIGVkZ2UgPSBub2RlLT5jaGlsZHJlbi5jaGlsZChlZGdlSW5kZXgpOwogICAgICAgICBpZiAo
IWVkZ2UpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIAotICAgICAgICBOb2RlJiBjaGls
ZCA9IG1fZ3JhcGhbZWRnZV07Ci0gICAgICAgIHN3aXRjaCAoY2hpbGQub3AoKSkgeworICAgICAg
ICBzd2l0Y2ggKGVkZ2UtPm9wKCkpIHsKICAgICAgICAgY2FzZSBQaGk6IC8vIEFyaXNlcyBpZiB3
ZSBoYWQgQ1NFIG9uIGEgR2V0TG9jYWwgb2YgdGhlIGFyZ3VtZW50cyByZWdpc3Rlci4KICAgICAg
ICAgY2FzZSBHZXRMb2NhbDogLy8gQXJpc2VzIGlmIHdlIGhhZCBDU0Ugb24gYW4gYXJndW1lbnRz
IGFjY2VzcyB0byBhIHZhcmlhYmxlIGFsaWFzZWQgdG8gdGhlIGFyZ3VtZW50cy4KICAgICAgICAg
Y2FzZSBTZXRMb2NhbDogeyAvLyBBcmlzZXMgaWYgd2UgaGFkIENTRSBvbiBhIEdldExvY2FsIG9m
IHRoZSBhcmd1bWVudHMgcmVnaXN0ZXIuCi0gICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEq
IHZhcmlhYmxlQWNjZXNzRGF0YSA9IGNoaWxkLnZhcmlhYmxlQWNjZXNzRGF0YSgpOworICAgICAg
ICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBlZGdlLT52YXJp
YWJsZUFjY2Vzc0RhdGEoKTsKICAgICAgICAgICAgIGJvb2wgaXNEZWFkQXJndW1lbnRzUmVnaXN0
ZXIgPQogICAgICAgICAgICAgICAgIHZhcmlhYmxlQWNjZXNzRGF0YS0+bG9jYWwoKSA9PQotICAg
ICAgICAgICAgICAgICAgICBtX2dyYXBoLnVuY2hlY2tlZEFyZ3VtZW50c1JlZ2lzdGVyRm9yKGNo
aWxkLmNvZGVPcmlnaW4pCi0gICAgICAgICAgICAgICAgJiYgIW1fY3JlYXRlc0FyZ3VtZW50cy5j
b250YWlucyhjaGlsZC5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSk7CisgICAgICAgICAgICAg
ICAgICAgIG1fZ3JhcGgudW5jaGVja2VkQXJndW1lbnRzUmVnaXN0ZXJGb3IoZWRnZS0+Y29kZU9y
aWdpbikKKyAgICAgICAgICAgICAgICAmJiAhbV9jcmVhdGVzQXJndW1lbnRzLmNvbnRhaW5zKGVk
Z2UtPmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKTsKICAgICAgICAgICAgIGJvb2wgaXNBbGlh
c2VkQXJndW1lbnRzUmVnaXN0ZXIgPQogICAgICAgICAgICAgICAgICF2YXJpYWJsZUFjY2Vzc0Rh
dGEtPmlzQ2FwdHVyZWQoKQogICAgICAgICAgICAgICAgICYmIG1fYXJndW1lbnRzQWxpYXNpbmcu
ZmluZCh2YXJpYWJsZUFjY2Vzc0RhdGEpLT52YWx1ZS5pc1ZhbGlkKCkKLSAgICAgICAgICAgICAg
ICAmJiAhbV9jcmVhdGVzQXJndW1lbnRzLmNvbnRhaW5zKGNoaWxkLmNvZGVPcmlnaW4uaW5saW5l
Q2FsbEZyYW1lKTsKKyAgICAgICAgICAgICAgICAmJiAhbV9jcmVhdGVzQXJndW1lbnRzLmNvbnRh
aW5zKGVkZ2UtPmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKTsKICAgICAgICAgICAgIGlmICgh
aXNEZWFkQXJndW1lbnRzUmVnaXN0ZXIgJiYgIWlzQWxpYXNlZEFyZ3VtZW50c1JlZ2lzdGVyKQog
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgbV9ncmFwaC5kZXJlZihlZGdlKTsK
LSAgICAgICAgICAgIG5vZGUuY2hpbGRyZW4ucmVtb3ZlRWRnZUZyb21CYWcoZWRnZUluZGV4KTsK
KyAgICAgICAgICAgIG5vZGUtPmNoaWxkcmVuLnJlbW92ZUVkZ2VGcm9tQmFnKGVkZ2VJbmRleCk7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgIGNh
c2UgQ3JlYXRlQXJndW1lbnRzOiB7IC8vIEFyaXNlcyBpZiB3ZSBDU0UgdHdvIEdldExvY2FscyB0
byB0aGUgYXJndW1lbnRzIHJlZ2lzdGVyIGFuZCB0aGVuIENTRSB0aGUgc2Vjb25kIHVzZSBvZiB0
aGUgR2V0TG9jYWwgdG8gdGhlIGZpcnN0LgotICAgICAgICAgICAgaWYgKG1fY3JlYXRlc0FyZ3Vt
ZW50cy5jb250YWlucyhjaGlsZC5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSkpCisgICAgICAg
ICAgICBpZiAobV9jcmVhdGVzQXJndW1lbnRzLmNvbnRhaW5zKGVkZ2UtPmNvZGVPcmlnaW4uaW5s
aW5lQ2FsbEZyYW1lKSkKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIG1fZ3Jh
cGguZGVyZWYoZWRnZSk7Ci0gICAgICAgICAgICBub2RlLmNoaWxkcmVuLnJlbW92ZUVkZ2VGcm9t
QmFnKGVkZ2VJbmRleCk7CisgICAgICAgICAgICBub2RlLT5jaGlsZHJlbi5yZW1vdmVFZGdlRnJv
bUJhZyhlZGdlSW5kZXgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAg
ICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJheU1vZGUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlNb2RlLmNwcAko
cmV2aXNpb24gMTQwNTA0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJheU1v
ZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNDYsMTQgKzI0NiwxNCBAQCBTdHJ1Y3R1cmUqIEFy
cmF5TW9kZTo6b3JpZ2luYWxBcnJheVN0cnVjCiAgICAgcmV0dXJuIG9yaWdpbmFsQXJyYXlTdHJ1
Y3R1cmUoZ3JhcGgsIG5vZGUuY29kZU9yaWdpbik7CiB9CiAKLWJvb2wgQXJyYXlNb2RlOjphbHJl
YWR5Q2hlY2tlZChHcmFwaCYgZ3JhcGgsIE5vZGUmIG5vZGUsIEFic3RyYWN0VmFsdWUmIHZhbHVl
LCBJbmRleGluZ1R5cGUgc2hhcGUpIGNvbnN0Citib29sIEFycmF5TW9kZTo6YWxyZWFkeUNoZWNr
ZWQoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlLCBBYnN0cmFjdFZhbHVlJiB2YWx1ZSwgSW5kZXhp
bmdUeXBlIHNoYXBlKSBjb25zdAogewogICAgIHN3aXRjaCAoYXJyYXlDbGFzcygpKSB7CiAgICAg
Y2FzZSBBcnJheTo6T3JpZ2luYWxBcnJheToKICAgICAgICAgcmV0dXJuIHZhbHVlLm1fY3VycmVu
dEtub3duU3RydWN0dXJlLmhhc1NpbmdsZXRvbigpCiAgICAgICAgICAgICAmJiAodmFsdWUubV9j
dXJyZW50S25vd25TdHJ1Y3R1cmUuc2luZ2xldG9uKCktPmluZGV4aW5nVHlwZSgpICYgSW5kZXhp
bmdTaGFwZU1hc2spID09IHNoYXBlCiAgICAgICAgICAgICAmJiAodmFsdWUubV9jdXJyZW50S25v
d25TdHJ1Y3R1cmUuc2luZ2xldG9uKCktPmluZGV4aW5nVHlwZSgpICYgSXNBcnJheSkKLSAgICAg
ICAgICAgICYmIGdyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLmNvZGVPcmlnaW4pLT5pc09yaWdp
bmFsQXJyYXlTdHJ1Y3R1cmUodmFsdWUubV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuc2luZ2xldG9u
KCkpOworICAgICAgICAgICAgJiYgZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPmNvZGVPcmln
aW4pLT5pc09yaWdpbmFsQXJyYXlTdHJ1Y3R1cmUodmFsdWUubV9jdXJyZW50S25vd25TdHJ1Y3R1
cmUuc2luZ2xldG9uKCkpOwogICAgICAgICAKICAgICBjYXNlIEFycmF5OjpBcnJheToKICAgICAg
ICAgaWYgKGFycmF5TW9kZXNBbHJlYWR5Q2hlY2tlZCh2YWx1ZS5tX2FycmF5TW9kZXMsIGFzQXJy
YXlNb2RlcyhzaGFwZSB8IElzQXJyYXkpKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQXJyYXlNb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdBcnJheU1vZGUuaAkocmV2aXNpb24gMTQwNTA0KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdBcnJheU1vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTk3LDcgKzE5Nyw3IEBA
IHB1YmxpYzoKICAgICAKICAgICBBcnJheU1vZGUgcmVmaW5lKFNwZWN1bGF0ZWRUeXBlIGJhc2Us
IFNwZWN1bGF0ZWRUeXBlIGluZGV4LCBTcGVjdWxhdGVkVHlwZSB2YWx1ZSA9IFNwZWNOb25lLCBO
b2RlRmxhZ3MgPSAwKSBjb25zdDsKICAgICAKLSAgICBib29sIGFscmVhZHlDaGVja2VkKEdyYXBo
JiwgTm9kZSYsIEFic3RyYWN0VmFsdWUmKSBjb25zdDsKKyAgICBib29sIGFscmVhZHlDaGVja2Vk
KEdyYXBoJiwgTm9kZSosIEFic3RyYWN0VmFsdWUmKSBjb25zdDsKICAgICAKICAgICB2b2lkIGR1
bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQmFzaWNCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQmFzaWNCbG9jay5oCShyZXZpc2lvbiAxNDA1MDQpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtNDIsNyArNDIs
NyBAQCBjbGFzcyBHcmFwaDsKIAogdHlwZWRlZiBWZWN0b3IgPEJsb2NrSW5kZXgsIDI+IFByZWRl
Y2Vzc29yTGlzdDsKIAotc3RydWN0IEJhc2ljQmxvY2sgOiBWZWN0b3I8Tm9kZUluZGV4LCA4PiB7
CitzdHJ1Y3QgQmFzaWNCbG9jayA6IFZlY3RvcjxOb2RlKiwgOD4gewogICAgIEJhc2ljQmxvY2so
dW5zaWduZWQgYnl0ZWNvZGVCZWdpbiwgdW5zaWduZWQgbnVtQXJndW1lbnRzLCB1bnNpZ25lZCBu
dW1Mb2NhbHMpCiAgICAgICAgIDogYnl0ZWNvZGVCZWdpbihieXRlY29kZUJlZ2luKQogICAgICAg
ICAsIGlzT1NSVGFyZ2V0KGZhbHNlKQpAQCAtNzUsNyArNzUsNyBAQCBzdHJ1Y3QgQmFzaWNCbG9j
ayA6IFZlY3RvcjxOb2RlSW5kZXgsIDg+CiAgICAgfQogICAgIAogICAgIHNpemVfdCBudW1Ob2Rl
cygpIGNvbnN0IHsgcmV0dXJuIHBoaXMuc2l6ZSgpICsgc2l6ZSgpOyB9Ci0gICAgTm9kZUluZGV4
IG5vZGVJbmRleChzaXplX3QgaSkgY29uc3QKKyAgICBOb2RlKiBub2RlKHNpemVfdCBpKSBjb25z
dAogICAgIHsKICAgICAgICAgaWYgKGkgPCBwaGlzLnNpemUoKSkKICAgICAgICAgICAgIHJldHVy
biBwaGlzW2ldOwpAQCAtODMsMjYgKzgzLDI2IEBAIHN0cnVjdCBCYXNpY0Jsb2NrIDogVmVjdG9y
PE5vZGVJbmRleCwgOD4KICAgICB9CiAgICAgYm9vbCBpc1BoaUluZGV4KHNpemVfdCBpKSBjb25z
dCB7IHJldHVybiBpIDwgcGhpcy5zaXplKCk7IH0KICAgICAKLSAgICBib29sIGlzSW5QaGlzKE5v
ZGVJbmRleCBub2RlSW5kZXgpIGNvbnN0CisgICAgYm9vbCBpc0luUGhpcyhOb2RlKiBub2RlKSBj
b25zdAogICAgIHsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwaGlzLnNpemUoKTsg
KytpKSB7Ci0gICAgICAgICAgICBpZiAocGhpc1tpXSA9PSBub2RlSW5kZXgpCisgICAgICAgICAg
ICBpZiAocGhpc1tpXSA9PSBub2RlKQogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAg
ICAgICB9CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgCi0gICAgYm9vbCBpc0lu
QmxvY2soTm9kZUluZGV4IGluZGV4KSBjb25zdAorICAgIGJvb2wgaXNJbkJsb2NrKE5vZGUqIG15
Tm9kZSkgY29uc3QKICAgICB7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtTm9k
ZXMoKTsgKytpKSB7Ci0gICAgICAgICAgICBpZiAobm9kZUluZGV4KGkpID09IGluZGV4KQorICAg
ICAgICAgICAgaWYgKG5vZGUoaSkgPT0gbXlOb2RlKQogICAgICAgICAgICAgICAgIHJldHVybiB0
cnVlOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgCiAjZGVm
aW5lIERGR19ERUZJTkVfQVBQRU5EX05PREUodGVtcGxhdGVQcmUsIHRlbXBsYXRlUG9zdCwgdHlw
ZVBhcmFtcywgdmFsdWVQYXJhbXNDb21tYSwgdmFsdWVQYXJhbXMsIHZhbHVlQXJncykgXAotICAg
IHRlbXBsYXRlUHJlIHR5cGVQYXJhbXMgdGVtcGxhdGVQb3N0IE5vZGVJbmRleCBhcHBlbmROb2Rl
KEdyYXBoJiwgUmVmQ2hpbGRyZW5Nb2RlLCBSZWZOb2RlTW9kZSwgU3BlY3VsYXRlZFR5cGUgdmFs
dWVQYXJhbXNDb21tYSB2YWx1ZVBhcmFtcyk7CisgICAgdGVtcGxhdGVQcmUgdHlwZVBhcmFtcyB0
ZW1wbGF0ZVBvc3QgTm9kZSogYXBwZW5kTm9kZShHcmFwaCYsIFJlZkNoaWxkcmVuTW9kZSwgUmVm
Tm9kZU1vZGUsIFNwZWN1bGF0ZWRUeXBlIHZhbHVlUGFyYW1zQ29tbWEgdmFsdWVQYXJhbXMpOwog
ICAgIERGR19WQVJJQURJQ19URU1QTEFURV9GVU5DVElPTihERkdfREVGSU5FX0FQUEVORF9OT0RF
KQogI3VuZGVmIERGR19ERUZJTkVfQVBQRU5EX05PREUKICAgICAKQEAgLTEyMSwxMSArMTIxLDEx
IEBAIHN0cnVjdCBCYXNpY0Jsb2NrIDogVmVjdG9yPE5vZGVJbmRleCwgOD4KICNlbmRpZgogICAg
IGJvb2wgaXNSZWFjaGFibGU7CiAgICAgCi0gICAgVmVjdG9yPE5vZGVJbmRleD4gcGhpczsKKyAg
ICBWZWN0b3I8Tm9kZSo+IHBoaXM7CiAgICAgUHJlZGVjZXNzb3JMaXN0IG1fcHJlZGVjZXNzb3Jz
OwogICAgIAotICAgIE9wZXJhbmRzPE5vZGVJbmRleCwgTm9kZUluZGV4VHJhaXRzPiB2YXJpYWJs
ZXNBdEhlYWQ7Ci0gICAgT3BlcmFuZHM8Tm9kZUluZGV4LCBOb2RlSW5kZXhUcmFpdHM+IHZhcmlh
Ymxlc0F0VGFpbDsKKyAgICBPcGVyYW5kczxOb2RlKiwgTm9kZVBvaW50ZXJUcmFpdHM+IHZhcmlh
Ymxlc0F0SGVhZDsKKyAgICBPcGVyYW5kczxOb2RlKiwgTm9kZVBvaW50ZXJUcmFpdHM+IHZhcmlh
Ymxlc0F0VGFpbDsKICAgICAKICAgICBPcGVyYW5kczxBYnN0cmFjdFZhbHVlPiB2YWx1ZXNBdEhl
YWQ7CiAgICAgT3BlcmFuZHM8QWJzdHJhY3RWYWx1ZT4gdmFsdWVzQXRUYWlsOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrSW5saW5lcy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9ja0lubGluZXMuaAkocmV2
aXNpb24gMTQwNTA0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2Nr
SW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw5ICszNCw5IEBACiBuYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIERGRyB7CiAKICNkZWZpbmUgREZHX0RFRklORV9BUFBFTkRfTk9ERSh0ZW1w
bGF0ZVByZSwgdGVtcGxhdGVQb3N0LCB0eXBlUGFyYW1zLCB2YWx1ZVBhcmFtc0NvbW1hLCB2YWx1
ZVBhcmFtcywgdmFsdWVBcmdzKSBcCi0gICAgdGVtcGxhdGVQcmUgdHlwZVBhcmFtcyB0ZW1wbGF0
ZVBvc3QgTm9kZUluZGV4IEJhc2ljQmxvY2s6OmFwcGVuZE5vZGUoR3JhcGgmIGdyYXBoLCBSZWZD
aGlsZHJlbk1vZGUgcmVmQ2hpbGRyZW5Nb2RlLCBSZWZOb2RlTW9kZSByZWZOb2RlTW9kZSwgU3Bl
Y3VsYXRlZFR5cGUgdHlwZSB2YWx1ZVBhcmFtc0NvbW1hIHZhbHVlUGFyYW1zKSBcCisgICAgdGVt
cGxhdGVQcmUgdHlwZVBhcmFtcyB0ZW1wbGF0ZVBvc3QgTm9kZSogQmFzaWNCbG9jazo6YXBwZW5k
Tm9kZShHcmFwaCYgZ3JhcGgsIFJlZkNoaWxkcmVuTW9kZSByZWZDaGlsZHJlbk1vZGUsIFJlZk5v
ZGVNb2RlIHJlZk5vZGVNb2RlLCBTcGVjdWxhdGVkVHlwZSB0eXBlIHZhbHVlUGFyYW1zQ29tbWEg
dmFsdWVQYXJhbXMpIFwKICAgICB7IFwKLSAgICAgICAgTm9kZUluZGV4IHJlc3VsdCA9IGdyYXBo
LmFkZE5vZGUocmVmQ2hpbGRyZW5Nb2RlLCByZWZOb2RlTW9kZSwgdHlwZSB2YWx1ZVBhcmFtc0Nv
bW1hIHZhbHVlQXJncyk7IFwKKyAgICAgICAgTm9kZSogcmVzdWx0ID0gZ3JhcGguYWRkTm9kZShy
ZWZDaGlsZHJlbk1vZGUsIHJlZk5vZGVNb2RlLCB0eXBlIHZhbHVlUGFyYW1zQ29tbWEgdmFsdWVB
cmdzKTsgXAogICAgICAgICBhcHBlbmQocmVzdWx0KTsgXAogICAgICAgICByZXR1cm4gcmVzdWx0
OyBcCiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBh
cnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRl
Q29kZVBhcnNlci5jcHAJKHJldmlzaW9uIDE0MDUwNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMjUwLDkgKzMy
NTAsNiBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwcm9jZXNzUGhpU3RhY2soKQogICAgICAgICBp
ZiAoIWVudHJ5Lm1fYmxvY2stPmlzUmVhY2hhYmxlKQogICAgICAgICAgICAgY29udGludWU7CiAg
ICAgICAgIAotICAgICAgICBpZiAoIWVudHJ5Lm1fYmxvY2stPmlzUmVhY2hhYmxlKQotICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgIAogICAgICAgICBQcmVkZWNlc3Nvckxpc3QmIHByZWRl
Y2Vzc29ycyA9IGVudHJ5Lm1fYmxvY2stPm1fcHJlZGVjZXNzb3JzOwogICAgICAgICB1bnNpZ25l
ZCB2YXJObyA9IGVudHJ5Lm1fdmFyTm87CiAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogZGF0
YUZvclBoaSA9IG1fZ3JhcGhbZW50cnkubV9waGldLnZhcmlhYmxlQWNjZXNzRGF0YSgpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDRkFQaGFzZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDRkFQaGFzZS5jcHAJKHJldmlzaW9uIDE0
MDUwNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ0ZBUGhhc2UuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTMg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC04OCwxMSArODgsMTEgQEAgcHJpdmF0ZToKICAgICAgICAgZGF0YUxvZ0YoIlxu
Iik7CiAjZW5kaWYKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGJsb2NrLT5zaXpl
KCk7ICsraSkgewotICAgICAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRleCA9IGJsb2NrLT5hdChp
KTsKLSAgICAgICAgICAgIGlmICghbV9ncmFwaFtub2RlSW5kZXhdLnNob3VsZEdlbmVyYXRlKCkp
CisgICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPmF0KGkpOworICAgICAgICAgICAgaWYg
KCFub2RlLT5zaG91bGRHZW5lcmF0ZSgpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogI2lm
IERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKLSAgICAgICAgICAgIGRhdGFM
b2dGKCIgICAgICAlcyBAJXU6ICIsIEdyYXBoOjpvcE5hbWUobV9ncmFwaFtub2RlSW5kZXhdLm9w
KCkpLCBub2RlSW5kZXgpOworICAgICAgICAgICAgZGF0YUxvZ0YoIiAgICAgICVzIEAldTogIiwg
R3JhcGg6Om9wTmFtZShtX2dyYXBoW25vZGVJbmRleF0ub3AoKSksIG5vZGUtPmluZGV4KCkpOwog
ICAgICAgICAgICAgbV9zdGF0ZS5kdW1wKFdURjo6ZGF0YUZpbGUoKSk7CiAgICAgICAgICAgICBk
YXRhTG9nRigiXG4iKTsKICNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdDRkdTaW1wbGlmaWNhdGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0NGR1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAxNDA1
MDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NGR1NpbXBsaWZpY2F0aW9uUGhh
c2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTIsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC02MCw3ICs2MCw3IEBAIHB1YmxpYzoKICAgICAgICAgICAg
ICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgQVNTRVJUKGJsb2NrLT5pc1JlYWNo
YWJsZSk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKG1fZ3JhcGhbYmxv
Y2stPmxhc3QoKV0ub3AoKSkgeworICAgICAgICAgICAgICAgIHN3aXRjaCAoYmxvY2stPmxhc3Qo
KS0+b3AoKSkgewogICAgICAgICAgICAgICAgIGNhc2UgSnVtcDogewogICAgICAgICAgICAgICAg
ICAgICAvLyBTdWNjZXNzb3Igd2l0aCBvbmUgcHJlZGVjZXNzb3IgLT4gbWVyZ2UuCiAgICAgICAg
ICAgICAgICAgICAgIGlmIChtX2dyYXBoLm1fYmxvY2tzW21fZ3JhcGguc3VjY2Vzc29yKGJsb2Nr
LCAwKV0tPm1fcHJlZGVjZXNzb3JzLnNpemUoKSA9PSAxKSB7CkBAIC0xMjksMTAgKzEyOSwxMCBA
QCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQmxvY2tJbmRleCB0YWtlbkJs
b2NrSW5kZXggPSBtX2dyYXBoLnN1Y2Nlc3NvckZvckNvbmRpdGlvbihibG9jaywgY29uZGl0aW9u
KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCbG9ja0luZGV4IG5vdFRha2VuQmxvY2tJ
bmRleCA9IG1fZ3JhcGguc3VjY2Vzc29yRm9yQ29uZGl0aW9uKGJsb2NrLCAhY29uZGl0aW9uKTsK
ICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFT
U0VSVChtX2dyYXBoW2Jsb2NrLT5sYXN0KCldLmlzVGVybWluYWwoKSk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgQ29kZU9yaWdpbiBib3VuZGFyeUNvZGVPcmlnaW4gPSBtX2dyYXBoW2Js
b2NrLT5sYXN0KCldLmNvZGVPcmlnaW47Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9n
cmFwaFtibG9jay0+bGFzdCgpXS5zZXRPcEFuZERlZmF1bHRGbGFncyhQaGFudG9tKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQobV9ncmFwaFtibG9jay0+bGFzdCgpXS5yZWZD
b3VudCgpID09IDEpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChibG9jay0+
bGFzdCgpLT5pc1Rlcm1pbmFsKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvZGVP
cmlnaW4gYm91bmRhcnlDb2RlT3JpZ2luID0gYmxvY2stPmxhc3QoKS0+Y29kZU9yaWdpbjsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBibG9jay0+bGFzdCgpLT5zZXRPcEFuZERlZmF1bHRG
bGFncyhQaGFudG9tKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQoYmxvY2st
Pmxhc3QoKS0+cmVmQ291bnQoKSA9PSAxKTsKICAgICAgICAgICAgICAgICAgICAgICAgIAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGpldHRpc29uQmxvY2soYmxvY2tJbmRleCwgbm90VGFr
ZW5CbG9ja0luZGV4LCBib3VuZGFyeUNvZGVPcmlnaW4pOwogICAgICAgICAgICAgICAgICAgICAg
ICAgCkBAIC0xNjAsMTIgKzE2MCwxMSBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZGF0YUxvZ0YoIkNGR1NpbXBsaWZ5OiBCcmFuY2gtPmp1bXAgY29udmVyc2lvbiB0byBz
YW1lIHN1Y2Nlc3NvciBvbiBCbG9jayAjJXUgdG8gQmxvY2sgIyV1LlxuIiwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrSW5kZXgsIHRhcmdldEJsb2NrSW5kZXgpOwog
I2VuZGlmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKG1fZ3JhcGhbYmxvY2st
Pmxhc3QoKV0uaXNUZXJtaW5hbCgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb2Rl
JiBicmFuY2ggPSBtX2dyYXBoW2Jsb2NrLT5sYXN0KCldOwotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEFTU0VSVChicmFuY2guaXNUZXJtaW5hbCgpKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBBU1NFUlQoYnJhbmNoLm9wKCkgPT0gQnJhbmNoKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBicmFuY2guc2V0T3BBbmREZWZhdWx0RmxhZ3MoUGhhbnRvbSk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGJyYW5jaC5yZWZDb3VudCgpID09IDEpOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIE5vZGUqIGJyYW5jaCA9IGJsb2NrLT5sYXN0KCk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGJyYW5jaC0+aXNUZXJtaW5hbCgpKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQoYnJhbmNoLT5vcCgpID09IEJyYW5j
aCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJhbmNoLT5zZXRPcEFuZERlZmF1bHRG
bGFncyhQaGFudG9tKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQoYnJhbmNo
LT5yZWZDb3VudCgpID09IDEpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGJsb2NrLT5hcHBlbmROb2RlKAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBtX2dyYXBoLCBEb250UmVmQ2hpbGRyZW4sIERvbnRSZWZOb2RlLCBT
cGVjTm9uZSwgSnVtcCwKQEAgLTI2MCw0NSArMjU5LDQzIEBAIHByaXZhdGU6CiAgICAgCiAgICAg
dm9pZCBrZWVwT3BlcmFuZEFsaXZlKEJhc2ljQmxvY2sqIGJsb2NrLCBDb2RlT3JpZ2luIGNvZGVP
cmlnaW4sIGludCBvcGVyYW5kKQogICAgIHsKLSAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRleCA9
IGJsb2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZChvcGVyYW5kKTsKLSAgICAgICAgaWYgKG5v
ZGVJbmRleCA9PSBOb05vZGUpCisgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+dmFyaWFibGVz
QXRUYWlsLm9wZXJhbmQob3BlcmFuZCk7CisgICAgICAgIGlmICghbm9kZSkKICAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgaWYgKG1fZ3JhcGhbbm9kZUluZGV4XS52YXJpYWJsZUFjY2Vzc0Rh
dGEoKS0+aXNDYXB0dXJlZCgpKQorICAgICAgICBpZiAobm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRh
KCktPmlzQ2FwdHVyZWQoKSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgaWYgKG1fZ3Jh
cGhbbm9kZUluZGV4XS5vcCgpID09IFNldExvY2FsKQotICAgICAgICAgICAgbm9kZUluZGV4ID0g
bV9ncmFwaFtub2RlSW5kZXhdLmNoaWxkMSgpLmluZGV4KCk7Ci0gICAgICAgIE5vZGUmIG5vZGUg
PSBtX2dyYXBoW25vZGVJbmRleF07Ci0gICAgICAgIGlmICghbm9kZS5zaG91bGRHZW5lcmF0ZSgp
KQorICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBTZXRMb2NhbCkKKyAgICAgICAgICAgIG5vZGUg
PSBub2RlLT5jaGlsZDEoKS5ub2RlKCk7CisgICAgICAgIGlmICghbm9kZS0+c2hvdWxkR2VuZXJh
dGUoKSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgQVNTRVJUKG1fZ3JhcGhbbm9kZUlu
ZGV4XS5vcCgpICE9IFNldExvY2FsKTsKKyAgICAgICAgQVNTRVJUKG5vZGUtPm9wKCkgIT0gU2V0
TG9jYWwpOwogICAgICAgICBibG9jay0+YXBwZW5kTm9kZSgKLSAgICAgICAgICAgIG1fZ3JhcGgs
IFJlZkNoaWxkcmVuLCBEb250UmVmTm9kZSwgU3BlY05vbmUsIFBoYW50b20sIGNvZGVPcmlnaW4s
IG5vZGVJbmRleCk7CisgICAgICAgICAgICBtX2dyYXBoLCBSZWZDaGlsZHJlbiwgRG9udFJlZk5v
ZGUsIFNwZWNOb25lLCBQaGFudG9tLCBjb2RlT3JpZ2luLCBub2RlKTsKICAgICB9CiAgICAgCiAg
ICAgdm9pZCBmaXhQb3NzaWJsZUdldExvY2FsKEJhc2ljQmxvY2sqIGJsb2NrLCBFZGdlJiBlZGdl
LCBib29sIGNoYW5nZVJlZikKICAgICB7Ci0gICAgICAgIE5vZGUmIGNoaWxkID0gbV9ncmFwaFtl
ZGdlXTsKLSAgICAgICAgaWYgKGNoaWxkLm9wKCkgIT0gR2V0TG9jYWwpCisgICAgICAgIE5vZGUq
IGNoaWxkID0gZWRnZS5ub2RlKCk7CisgICAgICAgIGlmIChjaGlsZC0+b3AoKSAhPSBHZXRMb2Nh
bCkKICAgICAgICAgICAgIHJldHVybjsKICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9O
X1ZFUkJPU0UpCi0gICAgICAgIGRhdGFMb2dGKCIgICAgQ29uc2lkZXJpbmcgR2V0TG9jYWwgYXQg
QCV1LCBsb2NhbCByJWQuXG4iLCBlZGdlLmluZGV4KCksIGNoaWxkLmxvY2FsKCkpOworICAgICAg
ICBkYXRhTG9nRigiICAgIENvbnNpZGVyaW5nIEdldExvY2FsIGF0IEAldSwgbG9jYWwgciVkLlxu
Iiwgbm9kZS0+aW5kZXgoKSwgY2hpbGQtPmxvY2FsKCkpOwogI2VuZGlmCi0gICAgICAgIGlmIChj
aGlsZC52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+aXNDYXB0dXJlZCgpKSB7CisgICAgICAgIGlmIChj
aGlsZC0+dmFyaWFibGVBY2Nlc3NEYXRhKCktPmlzQ2FwdHVyZWQoKSkgewogI2lmIERGR19FTkFC
TEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKICAgICAgICAgICAgIGRhdGFMb2dGKCIgICAg
ICAgIEl0J3MgY2FwdHVyZWQuXG4iKTsKICNlbmRpZgogICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICB9Ci0gICAgICAgIE5vZGVJbmRleCBvcmlnaW5hbE5vZGVJbmRleCA9IGJsb2NrLT52YXJp
YWJsZXNBdFRhaWwub3BlcmFuZChjaGlsZC5sb2NhbCgpKTsKKyAgICAgICAgTm9kZSogb3JpZ2lu
YWxOb2RlID0gYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKGNoaWxkLT5sb2NhbCgpKTsK
ICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCi0gICAgICAgIGRhdGFM
b2dGKCIgICAgICAgIERlYWxpbmcgd2l0aCBvcmlnaW5hbCBAJXUuXG4iLCBvcmlnaW5hbE5vZGVJ
bmRleCk7CisgICAgICAgIGRhdGFMb2dGKCIgICAgICAgIERlYWxpbmcgd2l0aCBvcmlnaW5hbCBA
JXUuXG4iLCBvcmlnaW5hbE5vZGUtPmluZGV4KCkpOwogI2VuZGlmCi0gICAgICAgIEFTU0VSVChv
cmlnaW5hbE5vZGVJbmRleCAhPSBOb05vZGUpOwotICAgICAgICBOb2RlKiBvcmlnaW5hbE5vZGUg
PSAmbV9ncmFwaFtvcmlnaW5hbE5vZGVJbmRleF07CisgICAgICAgIEFTU0VSVChvcmlnaW5hbE5v
ZGVJbmRleCk7CiAjaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQogICAg
ICAgICBkYXRhTG9nRigiICAgICAgICBPcmlnaW5hbCBoYXMgbG9jYWwgciVkLlxuIiwgb3JpZ2lu
YWxOb2RlLT5sb2NhbCgpKTsKICNlbmRpZgotICAgICAgICBBU1NFUlQoY2hpbGQubG9jYWwoKSA9
PSBvcmlnaW5hbE5vZGUtPmxvY2FsKCkpOworICAgICAgICBBU1NFUlQoY2hpbGQtPmxvY2FsKCkg
PT0gb3JpZ2luYWxOb2RlLT5sb2NhbCgpKTsKICAgICAgICAgLy8gUG9zc2liaWxpdGllczoKICAg
ICAgICAgLy8gU2V0TG9jYWwgLT4gdGhlIHNlY29uZEJsb2NrIGlzIGdldHRpbmcgdGhlIHZhbHVl
IG9mIHNvbWV0aGluZyB0aGF0IGlzIGltbWVkaWF0ZWx5CiAgICAgICAgIC8vICAgICBhdmFpbGFi
bGUgaW4gdGhlIGZpcnN0IGJsb2NrIHdpdGggYSBrbm93biBOb2RlSW5kZXguCkBAIC0zMTIsMTAg
KzMwOSw4IEBAIHByaXZhdGU6CiAgICAgICAgIC8vIEZsdXNoIC0+IHRoZSBzZWNvbmRCbG9jayBp
cyBhc2tpbmcgZm9yIGtlZXAtYWxpdmUgb24gYW4gb3BlcmFuZCB0aGF0IHRoZSBmaXJzdAogICAg
ICAgICAvLyAgICAgYmxvY2sgd2FzIGZvcmNpbmcgdG8gYmUgYWxpdmUsIHNvIHRoZSBzZWNvbmQg
YmxvY2sgc2hvdWxkIHJlZmVyIGNoaWxkIG9mCiAgICAgICAgIC8vICAgICB0aGUgZmx1c2guCi0g
ICAgICAgIGlmIChvcmlnaW5hbE5vZGUtPm9wKCkgPT0gRmx1c2gpIHsKLSAgICAgICAgICAgIG9y
aWdpbmFsTm9kZUluZGV4ID0gb3JpZ2luYWxOb2RlLT5jaGlsZDEoKS5pbmRleCgpOwotICAgICAg
ICAgICAgb3JpZ2luYWxOb2RlID0gJm1fZ3JhcGhbb3JpZ2luYWxOb2RlSW5kZXhdOwotICAgICAg
ICB9CisgICAgICAgIGlmIChvcmlnaW5hbE5vZGUtPm9wKCkgPT0gRmx1c2gpCisgICAgICAgICAg
ICBvcmlnaW5hbE5vZGUgPSBvcmlnaW5hbE5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKICAgICAgICAg
c3dpdGNoIChvcmlnaW5hbE5vZGUtPm9wKCkpIHsKICAgICAgICAgY2FzZSBTZXRMb2NhbDogewog
ICAgICAgICAgICAgaWYgKGNoYW5nZVJlZikKQEAgLTMyMyw3ICszMTgsNyBAQCBwcml2YXRlOgog
I2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKICAgICAgICAgICAgIGRh
dGFMb2dGKCIgICAgICAgIEl0J3MgYSBTZXRMb2NhbC5cbiIpOwogI2VuZGlmCi0gICAgICAgICAg
ICBtX2dyYXBoLmNoYW5nZUluZGV4KGVkZ2UsIG9yaWdpbmFsTm9kZS0+Y2hpbGQxKCkuaW5kZXgo
KSwgY2hhbmdlUmVmKTsKKyAgICAgICAgICAgIG1fZ3JhcGguY2hhbmdlQ2hpbGQoZWRnZSwgb3Jp
Z2luYWxOb2RlLT5jaGlsZDEoKS5ub2RlKCksIGNoYW5nZVJlZik7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgfQogICAgICAgICBjYXNlIEdldExvY2FsOiB7CkBAIC0zMzEsNyArMzI2LDcg
QEAgcHJpdmF0ZToKICAgICAgICAgICAgIGRhdGFMb2dGKCIgICAgICAgIEl0J3MgYSBHZXRMb2Nh
bC5cbiIpOwogI2VuZGlmCiAgICAgICAgICAgICBpZiAob3JpZ2luYWxOb2RlLT5zaG91bGRHZW5l
cmF0ZSgpKQotICAgICAgICAgICAgICAgIG1fZ3JhcGguY2hhbmdlSW5kZXgoZWRnZSwgb3JpZ2lu
YWxOb2RlSW5kZXgsIGNoYW5nZVJlZik7CisgICAgICAgICAgICAgICAgbV9ncmFwaC5jaGFuZ2VD
aGlsZChlZGdlLCBvcmlnaW5hbE5vZGUsIGNoYW5nZVJlZik7CiAgICAgICAgICAgICAvLyBJZiB3
ZSBoYXZlIGEgR2V0TG9jYWwgdGhhdCBwb2ludHMgdG8gYSBjaGlsZCBHZXRMb2NhbCB0aGF0IGlz
IGRlYWQsIHRoZW4KICAgICAgICAgICAgIC8vIHdlIGhhdmUgbm8gbmVlZCB0byBkbyBhbnl0aGlu
ZzogdGhpcyBvcmlnaW5hbCBHZXRMb2NhbCBpcyBzdGlsbCB2YWxpZC4KICAgICAgICAgICAgIGJy
ZWFrOwpAQCAtMzc1LDIzICszNzAsMjEgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgfQogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGRlc3RpbmF0aW9uQmxv
Y2stPnBoaXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIE5vZGVJbmRleCBwaGlOb2RlSW5k
ZXggPSBkZXN0aW5hdGlvbkJsb2NrLT5waGlzW2ldOwotICAgICAgICAgICAgTm9kZSYgcGhpTm9k
ZSA9IG1fZ3JhcGhbcGhpTm9kZUluZGV4XTsKLSAgICAgICAgICAgIE5vZGVJbmRleCBteU5vZGVJ
bmRleCA9IHNvdXJjZUJsb2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZChwaGlOb2RlLmxvY2Fs
KCkpOwotI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKLSAgICAgICAg
ICAgIGRhdGFMb2dGKCJDb25zaWRlcmluZyByZW1vdmluZyByZWZlcmVuY2UgZnJvbSBwaGkgQCV1
IHRvIEAldSBvbiBsb2NhbCByJWQ6IiwKLSAgICAgICAgICAgICAgICAgICAgcGhpTm9kZUluZGV4
LCBteU5vZGVJbmRleCwgcGhpTm9kZS5sb2NhbCgpKTsKLSNlbmRpZgotICAgICAgICAgICAgaWYg
KG15Tm9kZUluZGV4ID09IE5vTm9kZSkgeworICAgICAgICAgICAgTm9kZSogcGhpTm9kZSA9IGRl
c3RpbmF0aW9uQmxvY2stPnBoaXNbaV07CisgICAgICAgICAgICBOb2RlKiBteU5vZGUgPSBzb3Vy
Y2VCbG9jay0+dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQocGhpTm9kZS0+bG9jYWwoKSk7CisgICAg
ICAgICAgICBpZiAoIW15Tm9kZSkgewogICAgICAgICAgICAgICAgIC8vIFRoaXMgd2lsbCBoYXBw
ZW4gaWYgdGhlcmUgaXMgYSBwaGkgaW4gdGhlIGRlc3RpbmF0aW9uIHRoYXQgcmVmZXJzIGludG8K
ICAgICAgICAgICAgICAgICAvLyB0aGUgZGVzdGluYXRpb24gaXRzZWxmLgogICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgTm9kZSYgbXlOb2RlID0g
bV9ncmFwaFtteU5vZGVJbmRleF07Ci0gICAgICAgICAgICBpZiAobXlOb2RlLm9wKCkgPT0gR2V0
TG9jYWwpCi0gICAgICAgICAgICAgICAgbXlOb2RlSW5kZXggPSBteU5vZGUuY2hpbGQxKCkuaW5k
ZXgoKTsKKyNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCisgICAgICAg
ICAgICBkYXRhTG9nRigiQ29uc2lkZXJpbmcgcmVtb3ZpbmcgcmVmZXJlbmNlIGZyb20gcGhpIEAl
dSB0byBAJXUgb24gbG9jYWwgciVkOiIsCisgICAgICAgICAgICAgICAgICAgICBwaGlOb2RlLT5p
bmRleCgpLCBteU5vZGUtPmluZGV4KCksIHBoaU5vZGUtPmxvY2FsKCkpOworI2VuZGlmCisgICAg
ICAgICAgICBpZiAobXlOb2RlLT5vcCgpID09IEdldExvY2FsKQorICAgICAgICAgICAgICAgIG15
Tm9kZSA9IG15Tm9kZS0+Y2hpbGQxKCkubm9kZSgpOwogICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBqID0gMDsgaiA8IEFkamFjZW5jeUxpc3Q6OlNpemU7ICsraikKLSAgICAgICAgICAgICAgICBy
ZW1vdmVQb3RlbnRpYWxseURlYWRQaGlSZWZlcmVuY2UobXlOb2RlSW5kZXgsIHBoaU5vZGUsIGos
IHNvdXJjZUJsb2NrLT5pc1JlYWNoYWJsZSk7CisgICAgICAgICAgICAgICAgcmVtb3ZlUG90ZW50
aWFsbHlEZWFkUGhpUmVmZXJlbmNlKG15Tm9kZSwgcGhpTm9kZSwgaiwgc291cmNlQmxvY2stPmlz
UmVhY2hhYmxlKTsKICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCiAg
ICAgICAgICAgICBkYXRhTG9nRigiXG4iKTsKICNlbmRpZgpAQCAtNDE2LDU4ICs0MDksNTcgQEAg
cHJpdmF0ZToKICAgICAgICAgZml4UGhpcyhibG9ja0luZGV4LCBqZXR0aXNvbmVkQmxvY2tJbmRl
eCk7CiAgICAgfQogICAgIAotICAgIHZvaWQgcmVtb3ZlUG90ZW50aWFsbHlEZWFkUGhpUmVmZXJl
bmNlKE5vZGVJbmRleCBteU5vZGVJbmRleCwgTm9kZSYgcGhpTm9kZSwgdW5zaWduZWQgZWRnZUlu
ZGV4LCBib29sIGNoYW5nZVJlZikKKyAgICB2b2lkIHJlbW92ZVBvdGVudGlhbGx5RGVhZFBoaVJl
ZmVyZW5jZShOb2RlKiBteU5vZGUsIE5vZGUqIHBoaU5vZGUsIHVuc2lnbmVkIGVkZ2VJbmRleCwg
Ym9vbCBjaGFuZ2VSZWYpCiAgICAgewotICAgICAgICBpZiAocGhpTm9kZS5jaGlsZHJlbi5jaGls
ZChlZGdlSW5kZXgpLmluZGV4VW5jaGVja2VkKCkgIT0gbXlOb2RlSW5kZXgpCisgICAgICAgIGlm
IChwaGlOb2RlLT5jaGlsZHJlbi5jaGlsZChlZGdlSW5kZXgpLm5vZGUoKSAhPSBteU5vZGUpCiAg
ICAgICAgICAgICByZXR1cm47CiAjaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJC
T1NFKQogICAgICAgICBkYXRhTG9nRigiIFJlbW92aW5nIHJlZmVyZW5jZSBhdCBjaGlsZCAldS4i
LCBlZGdlSW5kZXgpOwogI2VuZGlmCi0gICAgICAgIGlmIChjaGFuZ2VSZWYgJiYgcGhpTm9kZS5z
aG91bGRHZW5lcmF0ZSgpKQotICAgICAgICAgICAgbV9ncmFwaC5kZXJlZihteU5vZGVJbmRleCk7
Ci0gICAgICAgIHBoaU5vZGUuY2hpbGRyZW4ucmVtb3ZlRWRnZUZyb21CYWcoZWRnZUluZGV4KTsK
KyAgICAgICAgaWYgKGNoYW5nZVJlZiAmJiBwaGlOb2RlLT5zaG91bGRHZW5lcmF0ZSgpKQorICAg
ICAgICAgICAgbV9ncmFwaC5kZXJlZihteU5vZGUpOworICAgICAgICBwaGlOb2RlLT5jaGlsZHJl
bi5yZW1vdmVFZGdlRnJvbUJhZyhlZGdlSW5kZXgpOwogICAgIH0KICAgICAKICAgICBzdHJ1Y3Qg
T3BlcmFuZFN1YnN0aXR1dGlvbiB7CiAgICAgICAgIE9wZXJhbmRTdWJzdGl0dXRpb24oKQotICAg
ICAgICAgICAgOiBvbGRDaGlsZChOb05vZGUpCi0gICAgICAgICAgICAsIG5ld0NoaWxkKE5vTm9k
ZSkKKyAgICAgICAgICAgIDogb2xkQ2hpbGQoMCkKKyAgICAgICAgICAgICwgbmV3Q2hpbGQoMCkK
ICAgICAgICAgewogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBleHBsaWNpdCBPcGVyYW5k
U3Vic3RpdHV0aW9uKE5vZGVJbmRleCBvbGRDaGlsZCkKKyAgICAgICAgZXhwbGljaXQgT3BlcmFu
ZFN1YnN0aXR1dGlvbihOb2RlKiBvbGRDaGlsZCkKICAgICAgICAgICAgIDogb2xkQ2hpbGQob2xk
Q2hpbGQpCiAgICAgICAgICAgICAsIG5ld0NoaWxkKG9sZENoaWxkKQogICAgICAgICB7CiAgICAg
ICAgIH0KICAgICAgICAgCi0gICAgICAgIE9wZXJhbmRTdWJzdGl0dXRpb24oTm9kZUluZGV4IG9s
ZENoaWxkLCBOb2RlSW5kZXggbmV3Q2hpbGQpCisgICAgICAgIE9wZXJhbmRTdWJzdGl0dXRpb24o
Tm9kZSogb2xkQ2hpbGQsIE5vZGUqIG5ld0NoaWxkKQogICAgICAgICAgICAgOiBvbGRDaGlsZChv
bGRDaGlsZCkKICAgICAgICAgICAgICwgbmV3Q2hpbGQobmV3Q2hpbGQpCiAgICAgICAgIHsKLSAg
ICAgICAgICAgIEFTU0VSVCgob2xkQ2hpbGQgPT0gTm9Ob2RlKSA9PSAobmV3Q2hpbGQgPT0gTm9O
b2RlKSk7CisgICAgICAgICAgICBBU1NFUlQoKCFvbGRDaGlsZCkgPT0gKCFuZXdDaGlsZCkpOwog
ICAgICAgICB9CiAgICAgICAgIAotICAgICAgICB2b2lkIGR1bXAoRklMRSogb3V0KQorICAgICAg
ICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKICAgICAgICAgewotICAgICAgICAg
ICAgaWYgKG9sZENoaWxkID09IE5vTm9kZSkKLSAgICAgICAgICAgICAgICBmcHJpbnRmKG91dCwg
Ii0iKTsKKyAgICAgICAgICAgIGlmICghb2xkQ2hpbGQpCisgICAgICAgICAgICAgICAgb3V0LnBy
aW50ZihvdXQsICItIik7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZnByaW50
ZihvdXQsICJAJXUgLT4gQCV1Iiwgb2xkQ2hpbGQsIG5ld0NoaWxkKTsKKyAgICAgICAgICAgICAg
ICBvdXQucHJpbnRmKG91dCwgIkAldSAtPiBAJXUiLCBvbGRDaGlsZC0+aW5kZXgoKSwgbmV3Q2hp
bGQtPmluZGV4KCkpOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBOb2RlSW5kZXggb2xk
Q2hpbGQ7Ci0gICAgICAgIE5vZGVJbmRleCBuZXdDaGlsZDsKKyAgICAgICAgTm9kZSogb2xkQ2hp
bGQ7CisgICAgICAgIE5vZGUqIG5ld0NoaWxkOwogICAgIH07CiAgICAgCi0gICAgTm9kZUluZGV4
IHNraXBHZXRMb2NhbChOb2RlSW5kZXggbm9kZUluZGV4KQorICAgIE5vZGUqIHNraXBHZXRMb2Nh
bChOb2RlKiBub2RlKQogICAgIHsKLSAgICAgICAgaWYgKG5vZGVJbmRleCA9PSBOb05vZGUpCi0g
ICAgICAgICAgICByZXR1cm4gTm9Ob2RlOwotICAgICAgICBOb2RlJiBub2RlID0gbV9ncmFwaFtu
b2RlSW5kZXhdOwotICAgICAgICBpZiAobm9kZS5vcCgpID09IEdldExvY2FsKQotICAgICAgICAg
ICAgcmV0dXJuIG5vZGUuY2hpbGQxKCkuaW5kZXgoKTsKLSAgICAgICAgcmV0dXJuIG5vZGVJbmRl
eDsKKyAgICAgICAgaWYgKCFub2RlKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIGlm
IChub2RlLT5vcCgpID09IEdldExvY2FsKQorICAgICAgICAgICAgcmV0dXJuIG5vZGUtPmNoaWxk
MSgpLm5vZGUoKTsKKyAgICAgICAgcmV0dXJuIG5vZGU7CiAgICAgfQogICAgIAogICAgIHZvaWQg
cmVjb3JkUG9zc2libGVJbmNvbWluZ1JlZmVyZW5jZSgKQEAgLTQ3NywzMCArNDY5LDI4IEBAIHBy
aXZhdGU6CiAgICAgICAgICAgICBza2lwR2V0TG9jYWwoc2Vjb25kQmxvY2stPnZhcmlhYmxlc0F0
VGFpbC5vcGVyYW5kKG9wZXJhbmQpKSk7CiAgICAgfQogICAgIAotICAgIHZvaWQgcmVjb3JkTmV3
VGFyZ2V0KE9wZXJhbmRzPE9wZXJhbmRTdWJzdGl0dXRpb24+JiBzdWJzdGl0dXRpb25zLCBpbnQg
b3BlcmFuZCwgTm9kZUluZGV4IG5vZGVJbmRleCkKKyAgICB2b2lkIHJlY29yZE5ld1RhcmdldChP
cGVyYW5kczxPcGVyYW5kU3Vic3RpdHV0aW9uPiYgc3Vic3RpdHV0aW9ucywgaW50IG9wZXJhbmQs
IE5vZGVJbmRleCBOb2RlKiBub2RlKQogICAgIHsKLSAgICAgICAgQVNTRVJUKG1fZ3JhcGhbbm9k
ZUluZGV4XS5vcCgpID09IFNldExvY2FsCi0gICAgICAgICAgICAgICB8fCBtX2dyYXBoW25vZGVJ
bmRleF0ub3AoKSA9PSBTZXRBcmd1bWVudAotICAgICAgICAgICAgICAgfHwgbV9ncmFwaFtub2Rl
SW5kZXhdLm9wKCkgPT0gRmx1c2gKLSAgICAgICAgICAgICAgIHx8IG1fZ3JhcGhbbm9kZUluZGV4
XS5vcCgpID09IFBoaSk7Ci0gICAgICAgIHN1YnN0aXR1dGlvbnMub3BlcmFuZChvcGVyYW5kKS5u
ZXdDaGlsZCA9IG5vZGVJbmRleDsKKyAgICAgICAgQVNTRVJUKG5vZGUtPm9wKCkgPT0gU2V0TG9j
YWwKKyAgICAgICAgICAgICAgIHx8IG5vZGUtPm9wKCkgPT0gU2V0QXJndW1lbnQKKyAgICAgICAg
ICAgICAgIHx8IG5vZGUtPm9wKCkgPT0gRmx1c2gKKyAgICAgICAgICAgICAgIHx8IG5vZGUtPm9w
KCkgPT0gUGhpKTsKKyAgICAgICAgc3Vic3RpdHV0aW9ucy5vcGVyYW5kKG9wZXJhbmQpLm5ld0No
aWxkID0gbm9kZTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBmaXhUYWlsT3BlcmFuZCgKICAgICAg
ICAgQmFzaWNCbG9jayogZmlyc3RCbG9jaywgQmFzaWNCbG9jayogc2Vjb25kQmxvY2ssIGludCBv
cGVyYW5kLAogICAgICAgICBPcGVyYW5kczxPcGVyYW5kU3Vic3RpdHV0aW9uPiYgc3Vic3RpdHV0
aW9ucykKICAgICB7Ci0gICAgICAgIE5vZGVJbmRleCBhdFNlY29uZFRhaWwgPSBzZWNvbmRCbG9j
ay0+dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQob3BlcmFuZCk7CisgICAgICAgIE5vZGUqIGF0U2Vj
b25kVGFpbCA9IHNlY29uZEJsb2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZChvcGVyYW5kKTsK
ICAgICAgICAgCi0gICAgICAgIGlmIChhdFNlY29uZFRhaWwgPT0gTm9Ob2RlKSB7CisgICAgICAg
IGlmICghYXRTZWNvbmRUYWlsKSB7CiAgICAgICAgICAgICAvLyBJZiB0aGUgdmFyaWFibGUgaXMg
ZGVhZCBhdCB0aGUgZW5kIG9mIHRoZSBzZWNvbmQgYmxvY2ssIHRoZW4gZG8gbm90aGluZzsgZXNz
ZW50aWFsbHkKICAgICAgICAgICAgIC8vIHRoaXMgbWVhbnMgdGhhdCB3ZSB3YW50IHRoZSB0YWls
IHN0YXRlIHRvIHJlZmxlY3Qgd2hhdGV2ZXIgdGhlIGZpcnN0IGJsb2NrIGRpZC4KICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgfQogCi0gICAgICAgIE5vZGUmIHNlY29uZE5vZGUgPSBtX2dy
YXBoW2F0U2Vjb25kVGFpbF07Ci0gICAgICAgIAotICAgICAgICBzd2l0Y2ggKHNlY29uZE5vZGUu
b3AoKSkgeworICAgICAgICBzd2l0Y2ggKGF0U2Vjb25kVGFpbC0+b3AoKSkgewogICAgICAgICBj
YXNlIFNldExvY2FsOgogICAgICAgICBjYXNlIEZsdXNoOiB7CiAgICAgICAgICAgICAvLyBUaGUg
c2Vjb25kIGJsb2NrIGRpZCBpbnRlcmVzdGluZyB0aGluZ3MgdG8gdGhlIHZhcmlhYmxlcywgc28g
dXBkYXRlIHRoZSB0YWlsCkBAIC01MTEsNyArNTAxLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAg
IAogICAgICAgICBjYXNlIFBoaTogewogICAgICAgICAgICAgLy8gS2VlcCB3aGF0IHdhcyBpbiB0
aGUgZmlyc3QgYmxvY2suCi0gICAgICAgICAgICBBU1NFUlQoZmlyc3RCbG9jay0+dmFyaWFibGVz
QXRUYWlsLm9wZXJhbmQob3BlcmFuZCkgIT0gTm9Ob2RlKTsKKyAgICAgICAgICAgIEFTU0VSVChm
aXJzdEJsb2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZChvcGVyYW5kKSk7CiAgICAgICAgICAg
ICByZWNvcmROZXdUYXJnZXQoc3Vic3RpdHV0aW9ucywgb3BlcmFuZCwgc2tpcEdldExvY2FsKGZp
cnN0QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKG9wZXJhbmQpKSk7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgfQpAQCAtNTIwLDI4ICs1MTAsMjggQEAgcHJpdmF0ZToKICAgICAg
ICAgICAgIC8vIElmIGl0J3MgYSBHZXRMb2NhbCBvbiBhIGNhcHR1cmVkIHZhciwgdGhlbiBkZWZp
bml0ZWx5IGtlZXAgd2hhdCB3YXMKICAgICAgICAgICAgIC8vIGluIHRoZSBzZWNvbmQgYmxvY2su
IEluIHBhcnRpY3VsYXIsIGl0J3MgcG9zc2libGUgdGhhdCB0aGUgZmlyc3QKICAgICAgICAgICAg
IC8vIGJsb2NrIGRvZXNuJ3QgZXZlbiBrbm93IGFib3V0IHRoaXMgdmFyaWFibGUuCi0gICAgICAg
ICAgICBpZiAoc2Vjb25kTm9kZS52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+aXNDYXB0dXJlZCgpKSB7
CisgICAgICAgICAgICBpZiAoYXRTZWNvbmRUYWlsLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+aXND
YXB0dXJlZCgpKSB7CiAgICAgICAgICAgICAgICAgZmlyc3RCbG9jay0+dmFyaWFibGVzQXRUYWls
Lm9wZXJhbmQob3BlcmFuZCkgPSBhdFNlY29uZFRhaWw7Ci0gICAgICAgICAgICAgICAgcmVjb3Jk
TmV3VGFyZ2V0KHN1YnN0aXR1dGlvbnMsIG9wZXJhbmQsIHNlY29uZE5vZGUuY2hpbGQxKCkuaW5k
ZXgoKSk7CisgICAgICAgICAgICAgICAgcmVjb3JkTmV3VGFyZ2V0KHN1YnN0aXR1dGlvbnMsIG9w
ZXJhbmQsIGF0U2Vjb25kVGFpbC0+Y2hpbGQxKCkuaW5kZXgoKSk7CiAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgICAgIC8vIEl0J3Mg
cG9zc2libGUgdGhhdCB0aGUgc2Vjb25kIGJsb2NrIGhhZCBhIEdldExvY2FsIGFuZCB0aGUgZmly
c3QgYmxvY2sKICAgICAgICAgICAgIC8vIGhhZCBhIFNldEFyZ3VtZW50IG9yIGEgUGhpLiBUaGVu
IHVwZGF0ZSB0aGUgdGFpbC4gT3RoZXJ3aXNlIGtlZXAgd2hhdCB3YXMgaW4gdGhlCiAgICAgICAg
ICAgICAvLyBmaXJzdCBibG9jay4KLSAgICAgICAgICAgIE5vZGVJbmRleCBhdEZpcnN0VGFpbCA9
IGZpcnN0QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKG9wZXJhbmQpOwotICAgICAgICAg
ICAgQVNTRVJUKGF0Rmlyc3RUYWlsICE9IE5vTm9kZSk7Ci0gICAgICAgICAgICBzd2l0Y2ggKG1f
Z3JhcGhbYXRGaXJzdFRhaWxdLm9wKCkpIHsKKyAgICAgICAgICAgIE5vZGUqIGF0Rmlyc3RUYWls
ID0gZmlyc3RCbG9jay0+dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQob3BlcmFuZCk7CisgICAgICAg
ICAgICBBU1NFUlQoYXRGaXJzdFRhaWwpOworICAgICAgICAgICAgc3dpdGNoIChhdEZpcnN0VGFp
bC0+b3AoKSkgewogICAgICAgICAgICAgY2FzZSBTZXRBcmd1bWVudDoKICAgICAgICAgICAgIGNh
c2UgUGhpOgogICAgICAgICAgICAgICAgIGZpcnN0QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVy
YW5kKG9wZXJhbmQpID0gYXRTZWNvbmRUYWlsOwotICAgICAgICAgICAgICAgIHJlY29yZE5ld1Rh
cmdldChzdWJzdGl0dXRpb25zLCBvcGVyYW5kLCBzZWNvbmROb2RlLmNoaWxkMSgpLmluZGV4KCkp
OworICAgICAgICAgICAgICAgIHJlY29yZE5ld1RhcmdldChzdWJzdGl0dXRpb25zLCBvcGVyYW5k
LCBhdFNlY29uZFRhaWwtPmNoaWxkMSgpLmluZGV4KCkpOwogICAgICAgICAgICAgICAgIGJyZWFr
OwogCiAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgIC8vIEtlZXAgd2hhdCB3
YXMgaW4gdGhlIGZpcnN0IGJsb2NrLCBhbmQgYWRqdXN0IHRoZSBzdWJzdGl0dXRpb24gdG8gYWNj
b3VudCBmb3IKICAgICAgICAgICAgICAgICAvLyB0aGUgZmFjdCB0aGF0IHN1Y2Nlc3NvcnMgd2ls
bCByZWZlciB0byB0aGUgY2hpbGQgb2YgdGhlIEdldExvY2FsLgotICAgICAgICAgICAgICAgIEFT
U0VSVChmaXJzdEJsb2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZChvcGVyYW5kKSAhPSBOb05v
ZGUpOworICAgICAgICAgICAgICAgIEFTU0VSVChmaXJzdEJsb2NrLT52YXJpYWJsZXNBdFRhaWwu
b3BlcmFuZChvcGVyYW5kKSk7CiAgICAgICAgICAgICAgICAgcmVjb3JkTmV3VGFyZ2V0KHN1YnN0
aXR1dGlvbnMsIG9wZXJhbmQsIHNraXBHZXRMb2NhbChmaXJzdEJsb2NrLT52YXJpYWJsZXNBdFRh
aWwub3BlcmFuZChvcGVyYW5kKSkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgfQpAQCAtNTY3LDEwICs1NTcsMTAgQEAgcHJpdmF0ZToKICAgICAgICAgCiAgICAgICAgIC8v
IFJlbW92ZSB0aGUgdGVybWluYWwgb2YgZmlyc3RCbG9jayBzaW5jZSB3ZSBkb24ndCBuZWVkIGl0
IGFueW1vcmUuIFdlbGwsIHdlIGRvbid0CiAgICAgICAgIC8vIHJlYWxseSByZW1vdmUgaXQ7IHdl
IGFjdHVhbGx5IHR1cm4gaXQgaW50byBhIFBoYW50b20uCi0gICAgICAgIEFTU0VSVChtX2dyYXBo
W2ZpcnN0QmxvY2stPmxhc3QoKV0uaXNUZXJtaW5hbCgpKTsKLSAgICAgICAgQ29kZU9yaWdpbiBi
b3VuZGFyeUNvZGVPcmlnaW4gPSBtX2dyYXBoW2ZpcnN0QmxvY2stPmxhc3QoKV0uY29kZU9yaWdp
bjsKLSAgICAgICAgbV9ncmFwaFtmaXJzdEJsb2NrLT5sYXN0KCldLnNldE9wQW5kRGVmYXVsdEZs
YWdzKFBoYW50b20pOwotICAgICAgICBBU1NFUlQobV9ncmFwaFtmaXJzdEJsb2NrLT5sYXN0KCld
LnJlZkNvdW50KCkgPT0gMSk7CisgICAgICAgIEFTU0VSVChmaXJzdEJsb2NrLT5sYXN0KCktPmlz
VGVybWluYWwoKSk7CisgICAgICAgIENvZGVPcmlnaW4gYm91bmRhcnlDb2RlT3JpZ2luID0gZmly
c3RCbG9jay0+bGFzdCgpLT5jb2RlT3JpZ2luOworICAgICAgICBmaXJzdEJsb2NrLT5sYXN0KCkt
PnNldE9wQW5kRGVmYXVsdEZsYWdzKFBoYW50b20pOworICAgICAgICBBU1NFUlQoZmlyc3RCbG9j
ay0+bGFzdCgpLT5yZWZDb3VudCgpID09IDEpOwogICAgICAgICAKICAgICAgICAgaWYgKGpldHRp
c29uZWRCbG9ja0luZGV4ICE9IE5vQmxvY2spIHsKICAgICAgICAgICAgIEJhc2ljQmxvY2sqIGpl
dHRpc29uZWRCbG9jayA9IG1fZ3JhcGgubV9ibG9ja3NbamV0dGlzb25lZEJsb2NrSW5kZXhdLmdl
dCgpOwpAQCAtNTk5LDI4ICs1ODksMjUgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHJlY29yZFBv
c3NpYmxlSW5jb21pbmdSZWZlcmVuY2Uoc2Vjb25kQmxvY2ssIHN1YnN0aXR1dGlvbnMsIGkpOwog
CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2Vjb25kQmxvY2stPnNpemUoKTsgKytp
KSB7Ci0gICAgICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4ID0gc2Vjb25kQmxvY2stPmF0KGkp
OwotICAgICAgICAgICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhbbm9kZUluZGV4XTsKKyAgICAgICAg
ICAgIE5vZGUqIG5vZGUgPSBzZWNvbmRCbG9jay0+YXQoaSk7CiAgICAgICAgICAgICAKICAgICAg
ICAgICAgIGJvb2wgY2hpbGRyZW5BbHJlYWR5Rml4ZWQgPSBmYWxzZTsKICAgICAgICAgICAgIAot
ICAgICAgICAgICAgc3dpdGNoIChub2RlLm9wKCkpIHsKKyAgICAgICAgICAgIHN3aXRjaCAobm9k
ZS0+b3AoKSkgewogICAgICAgICAgICAgY2FzZSBQaGFudG9tOiB7Ci0gICAgICAgICAgICAgICAg
aWYgKCFub2RlLmNoaWxkMSgpKQorICAgICAgICAgICAgICAgIGlmICghbm9kZS0+Y2hpbGQxKCkp
CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIAotICAgICAgICAg
ICAgICAgIEFTU0VSVChub2RlLnNob3VsZEdlbmVyYXRlKCkpOwotICAgICAgICAgICAgICAgIE5v
ZGUmIHBvc3NpYmxlTG9jYWxPcCA9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV07Ci0gICAgICAgICAg
ICAgICAgaWYgKHBvc3NpYmxlTG9jYWxPcC5vcCgpICE9IEdldExvY2FsCi0gICAgICAgICAgICAg
ICAgICAgICYmIHBvc3NpYmxlTG9jYWxPcC5oYXNMb2NhbCgpCi0gICAgICAgICAgICAgICAgICAg
ICYmICFwb3NzaWJsZUxvY2FsT3AudmFyaWFibGVBY2Nlc3NEYXRhKCktPmlzQ2FwdHVyZWQoKSkg
ewotICAgICAgICAgICAgICAgICAgICBOb2RlSW5kZXggc2V0TG9jYWxJbmRleCA9Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBmaXJzdEJsb2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZChwb3Nz
aWJsZUxvY2FsT3AubG9jYWwoKSk7Ci0gICAgICAgICAgICAgICAgICAgIE5vZGUmIHNldExvY2Fs
ID0gbV9ncmFwaFtzZXRMb2NhbEluZGV4XTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHNldExv
Y2FsLm9wKCkgPT0gU2V0TG9jYWwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgu
Y2hhbmdlRWRnZShub2RlLmNoaWxkcmVuLmNoaWxkMSgpLCBzZXRMb2NhbC5jaGlsZDEoKSk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQoIW5vZGUuY2hpbGQyKCkpOwotICAgICAgICAg
ICAgICAgICAgICAgICAgQVNTRVJUKCFub2RlLmNoaWxkMygpKTsKKyAgICAgICAgICAgICAgICBB
U1NFUlQobm9kZS0+c2hvdWxkR2VuZXJhdGUoKSk7CisgICAgICAgICAgICAgICAgTm9kZSogcG9z
c2libGVMb2NhbE9wID0gbm9kZS0+Y2hpbGQxKCkubm9kZSgpOworICAgICAgICAgICAgICAgIGlm
IChwb3NzaWJsZUxvY2FsT3AtPm9wKCkgIT0gR2V0TG9jYWwKKyAgICAgICAgICAgICAgICAgICAg
JiYgcG9zc2libGVMb2NhbE9wLT5oYXNMb2NhbCgpCisgICAgICAgICAgICAgICAgICAgICYmICFw
b3NzaWJsZUxvY2FsT3AtPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5pc0NhcHR1cmVkKCkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgTm9kZSogc2V0TG9jYWwgPSBmaXJzdEJsb2NrLT52YXJpYWJsZXNB
dFRhaWwub3BlcmFuZChwb3NzaWJsZUxvY2FsT3AtPmxvY2FsKCkpOworICAgICAgICAgICAgICAg
ICAgICBpZiAoc2V0TG9jYWwtPm9wKCkgPT0gU2V0TG9jYWwpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIG1fZ3JhcGguY2hhbmdlRWRnZShub2RlLT5jaGlsZHJlbi5jaGlsZDEoKSwgc2V0TG9j
YWwtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVCghbm9kZS0+Y2hp
bGQyKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKCFub2RlLT5jaGlsZDMoKSk7
CiAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbkFscmVhZHlGaXhlZCA9IHRydWU7CiAg
ICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CkBAIC02MzcsMTEgKzYyNCwx
MSBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIC8vIFNpbWlsYXJseSBmb3IgR2V0TG9jYWw7
IGl0IGNvdWxkIHVzZSBhbnkgb2YgdGhvc2UgZXhjZXB0IGZvcgogICAgICAgICAgICAgICAgIC8v
IEdldExvY2FsLiBJZiBpdCB1c2VzIGEgUGhpIHRoZW4gaXQgc2hvdWxkIGJlIHJlZGlyZWN0ZWQg
dG8gdXNlIGEKICAgICAgICAgICAgICAgICAvLyBQaGkgZnJvbSB0aGUgdGFpbCBvcGVyYW5kLgot
ICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoW25vZGUuY2hpbGQxKCldLm9wKCkgIT0gUGhpKQor
ICAgICAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS0+b3AoKSAhPSBQaGkpCiAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIE5v
ZGVJbmRleCBhdEZpcnN0SW5kZXggPSBmaXJzdEJsb2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFu
ZChub2RlLmxvY2FsKCkpOwotICAgICAgICAgICAgICAgIG1fZ3JhcGguY2hhbmdlRWRnZShub2Rl
LmNoaWxkcmVuLmNoaWxkMSgpLCBFZGdlKHNraXBHZXRMb2NhbChhdEZpcnN0SW5kZXgpKSwgbm9k
ZS5zaG91bGRHZW5lcmF0ZSgpKTsKKyAgICAgICAgICAgICAgICBOb2RlKiBhdEZpcnN0ID0gZmly
c3RCbG9jay0+dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQobm9kZS0+bG9jYWwoKSk7CisgICAgICAg
ICAgICAgICAgbV9ncmFwaC5jaGFuZ2VFZGdlKG5vZGUtPmNoaWxkcmVuLmNoaWxkMSgpLCBFZGdl
KHNraXBHZXRMb2NhbChhdEZpcnN0KSksIG5vZGUtPnNob3VsZEdlbmVyYXRlKCkpOwogICAgICAg
ICAgICAgICAgIGNoaWxkcmVuQWxyZWFkeUZpeGVkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgIH0KQEAgLTY1MSwzMCArNjM4LDMwIEBAIHByaXZhdGU6CiAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlmICghY2hpbGRyZW5BbHJlYWR5
Rml4ZWQpIHsKLSAgICAgICAgICAgICAgICBib29sIGNoYW5nZVJlZiA9IG5vZGUuc2hvdWxkR2Vu
ZXJhdGUoKTsKKyAgICAgICAgICAgICAgICBib29sIGNoYW5nZVJlZiA9IG5vZGUtPnNob3VsZEdl
bmVyYXRlKCk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAvLyBJZiB0aGUgY2hpbGQg
aXMgYSBHZXRMb2NhbCwgdGhlbiB3ZSBtaWdodCBsaWtlIHRvIGZpeCBpdC4KLSAgICAgICAgICAg
ICAgICBpZiAobm9kZS5mbGFncygpICYgTm9kZUhhc1ZhckFyZ3MpIHsKLSAgICAgICAgICAgICAg
ICAgICAgZm9yICh1bnNpZ25lZCBjaGlsZElkeCA9IG5vZGUuZmlyc3RDaGlsZCgpOwotICAgICAg
ICAgICAgICAgICAgICAgICAgIGNoaWxkSWR4IDwgbm9kZS5maXJzdENoaWxkKCkgKyBub2RlLm51
bUNoaWxkcmVuKCk7CisgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmZsYWdzKCkgJiBOb2RlSGFz
VmFyQXJncykgeworICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGNoaWxkSWR4ID0g
bm9kZS0+Zmlyc3RDaGlsZCgpOworICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkSWR4IDwg
bm9kZS0+Zmlyc3RDaGlsZCgpICsgbm9kZS0+bnVtQ2hpbGRyZW4oKTsKICAgICAgICAgICAgICAg
ICAgICAgICAgICArK2NoaWxkSWR4KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoISFt
X2dyYXBoLm1fdmFyQXJnQ2hpbGRyZW5bY2hpbGRJZHhdKQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGZpeFBvc3NpYmxlR2V0TG9jYWwoZmlyc3RCbG9jaywgbV9ncmFwaC5tX3ZhckFyZ0No
aWxkcmVuW2NoaWxkSWR4XSwgY2hhbmdlUmVmKTsKICAgICAgICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIH0gZWxzZSBpZiAoISFub2RlLmNoaWxkMSgpKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIGZpeFBvc3NpYmxlR2V0TG9jYWwoZmlyc3RCbG9jaywgbm9kZS5jaGlsZHJlbi5jaGls
ZDEoKSwgY2hhbmdlUmVmKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCEhbm9kZS5jaGlsZDIo
KSkgewotICAgICAgICAgICAgICAgICAgICAgICAgZml4UG9zc2libGVHZXRMb2NhbChmaXJzdEJs
b2NrLCBub2RlLmNoaWxkcmVuLmNoaWxkMigpLCBjaGFuZ2VSZWYpOwotICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKCEhbm9kZS5jaGlsZDMoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBmaXhQb3NzaWJsZUdldExvY2FsKGZpcnN0QmxvY2ssIG5vZGUuY2hpbGRyZW4uY2hpbGQzKCks
IGNoYW5nZVJlZik7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmICghIW5vZGUtPmNoaWxkMSgp
KSB7CisgICAgICAgICAgICAgICAgICAgIGZpeFBvc3NpYmxlR2V0TG9jYWwoZmlyc3RCbG9jaywg
bm9kZS0+Y2hpbGRyZW4uY2hpbGQxKCksIGNoYW5nZVJlZik7CisgICAgICAgICAgICAgICAgICAg
IGlmICghIW5vZGUtPmNoaWxkMigpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBmaXhQb3Nz
aWJsZUdldExvY2FsKGZpcnN0QmxvY2ssIG5vZGUtPmNoaWxkcmVuLmNoaWxkMigpLCBjaGFuZ2VS
ZWYpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEhbm9kZS0+Y2hpbGQzKCkpCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZml4UG9zc2libGVHZXRMb2NhbChmaXJzdEJsb2NrLCBu
b2RlLT5jaGlsZHJlbi5jaGlsZDMoKSwgY2hhbmdlUmVmKTsKICAgICAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgZmlyc3RC
bG9jay0+YXBwZW5kKG5vZGVJbmRleCk7CisgICAgICAgICAgICBmaXJzdEJsb2NrLT5hcHBlbmQo
bm9kZSk7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIEFTU0VSVChtX2dyYXBoW2ZpcnN0
QmxvY2stPmxhc3QoKV0uaXNUZXJtaW5hbCgpKTsKKyAgICAgICAgQVNTRVJUKGZpcnN0QmxvY2st
Pmxhc3QoKS0+aXNUZXJtaW5hbCgpKTsKICAgICAgICAgCiAgICAgICAgIC8vIEZpeCB0aGUgcHJl
ZGVjZXNzb3JzIG9mIG15IG5ldyBzdWNjZXNzb3JzLiBUaGlzIGlzIHRyaWNreSwgc2luY2Ugd2Ug
YXJlIGdvaW5nIHRvIHJlc2V0CiAgICAgICAgIC8vIGFsbCBwcmVkZWNlc3NvcnMgYW55d2F5IGR1
ZSB0byByZWFjaGFiaWxpdHkgYW5hbHlzaXMuIEJ1dCB3ZSBuZWVkIHRvIGZpeCB0aGUKQEAgLTcw
NCwyNiArNjkxLDI0IEBAIHByaXZhdGU6CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1fZ3Jh
cGgubnVtU3VjY2Vzc29ycyhmaXJzdEJsb2NrKTsgaS0tOykgewogICAgICAgICAgICAgQmFzaWNC
bG9jayogc3VjY2Vzc29yID0gbV9ncmFwaC5tX2Jsb2Nrc1ttX2dyYXBoLnN1Y2Nlc3NvcihmaXJz
dEJsb2NrLCBpKV0uZ2V0KCk7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSAwOyBqIDwg
c3VjY2Vzc29yLT5waGlzLnNpemUoKTsgKytqKSB7Ci0gICAgICAgICAgICAgICAgTm9kZUluZGV4
IHBoaU5vZGVJbmRleCA9IHN1Y2Nlc3Nvci0+cGhpc1tqXTsKLSAgICAgICAgICAgICAgICBOb2Rl
JiBwaGlOb2RlID0gbV9ncmFwaFtwaGlOb2RlSW5kZXhdOwotICAgICAgICAgICAgICAgIGJvb2wg
Y2hhbmdlUmVmID0gcGhpTm9kZS5zaG91bGRHZW5lcmF0ZSgpOwotICAgICAgICAgICAgICAgIE9w
ZXJhbmRTdWJzdGl0dXRpb24gc3Vic3RpdHV0aW9uID0gc3Vic3RpdHV0aW9ucy5vcGVyYW5kKHBo
aU5vZGUubG9jYWwoKSk7CisgICAgICAgICAgICAgICAgTm9kZSogcGhpTm9kZSA9IHN1Y2Nlc3Nv
ci0+cGhpc1tqXTsKKyAgICAgICAgICAgICAgICBib29sIGNoYW5nZVJlZiA9IHBoaU5vZGUtPnNo
b3VsZEdlbmVyYXRlKCk7CisgICAgICAgICAgICAgICAgT3BlcmFuZFN1YnN0aXR1dGlvbiBzdWJz
dGl0dXRpb24gPSBzdWJzdGl0dXRpb25zLm9wZXJhbmQocGhpTm9kZS0+bG9jYWwoKSk7CiAjaWYg
REZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQotICAgICAgICAgICAgICAgIGRh
dGFMb2dGKCIgICAgUGVyZm9ybWluZyBvcGVyYW5kIHN1YnN0aXR1dGlvbiBAJXUgLT4gQCV1Llxu
IiwKLSAgICAgICAgICAgICAgICAgICAgICAgIHN1YnN0aXR1dGlvbi5vbGRDaGlsZCwgc3Vic3Rp
dHV0aW9uLm5ld0NoaWxkKTsKKyAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgUGVyZm9ybWlu
ZyBvcGVyYW5kIHN1YnN0aXR1dGlvbiAiLCBzdWJzdGl0dXRpb24sICIuXG4iKTsKICNlbmRpZgot
ICAgICAgICAgICAgICAgIGlmICghcGhpTm9kZS5jaGlsZDEoKSkKKyAgICAgICAgICAgICAgICBp
ZiAoIXBoaU5vZGUtPmNoaWxkMSgpKQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAg
ICAgICAgICAgICAgICBpZiAocGhpTm9kZS5jaGlsZDEoKS5pbmRleCgpID09IHN1YnN0aXR1dGlv
bi5vbGRDaGlsZCkKLSAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5jaGFuZ2VJbmRleChwaGlO
b2RlLmNoaWxkcmVuLmNoaWxkMSgpLCBzdWJzdGl0dXRpb24ubmV3Q2hpbGQsIGNoYW5nZVJlZik7
Ci0gICAgICAgICAgICAgICAgaWYgKCFwaGlOb2RlLmNoaWxkMigpKQorICAgICAgICAgICAgICAg
IGlmIChwaGlOb2RlLT5jaGlsZDEoKSA9PSBzdWJzdGl0dXRpb24ub2xkQ2hpbGQpCisgICAgICAg
ICAgICAgICAgICAgIG1fZ3JhcGguY2hhbmdlSW5kZXgocGhpTm9kZS0+Y2hpbGRyZW4uY2hpbGQx
KCksIHN1YnN0aXR1dGlvbi5uZXdDaGlsZCwgY2hhbmdlUmVmKTsKKyAgICAgICAgICAgICAgICBp
ZiAoIXBoaU5vZGUtPmNoaWxkMigpKQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAg
ICAgICAgICAgICAgICBpZiAocGhpTm9kZS5jaGlsZDIoKS5pbmRleCgpID09IHN1YnN0aXR1dGlv
bi5vbGRDaGlsZCkKLSAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5jaGFuZ2VJbmRleChwaGlO
b2RlLmNoaWxkcmVuLmNoaWxkMigpLCBzdWJzdGl0dXRpb24ubmV3Q2hpbGQsIGNoYW5nZVJlZik7
Ci0gICAgICAgICAgICAgICAgaWYgKCFwaGlOb2RlLmNoaWxkMygpKQorICAgICAgICAgICAgICAg
IGlmIChwaGlOb2RlLT5jaGlsZDIoKSA9PSBzdWJzdGl0dXRpb24ub2xkQ2hpbGQpCisgICAgICAg
ICAgICAgICAgICAgIG1fZ3JhcGguY2hhbmdlSW5kZXgocGhpTm9kZS0+Y2hpbGRyZW4uY2hpbGQy
KCksIHN1YnN0aXR1dGlvbi5uZXdDaGlsZCwgY2hhbmdlUmVmKTsKKyAgICAgICAgICAgICAgICBp
ZiAoIXBoaU5vZGUtPmNoaWxkMygpKQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAg
ICAgICAgICAgICAgICBpZiAocGhpTm9kZS5jaGlsZDMoKS5pbmRleCgpID09IHN1YnN0aXR1dGlv
bi5vbGRDaGlsZCkKLSAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5jaGFuZ2VJbmRleChwaGlO
b2RlLmNoaWxkcmVuLmNoaWxkMygpLCBzdWJzdGl0dXRpb24ubmV3Q2hpbGQsIGNoYW5nZVJlZik7
CisgICAgICAgICAgICAgICAgaWYgKHBoaU5vZGUtPmNoaWxkMygpID09IHN1YnN0aXR1dGlvbi5v
bGRDaGlsZCkKKyAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5jaGFuZ2VJbmRleChwaGlOb2Rl
LT5jaGlsZHJlbi5jaGlsZDMoKSwgc3Vic3RpdHV0aW9uLm5ld0NoaWxkLCBjaGFuZ2VSZWYpOwog
ICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdDU0VQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdDU0VQaGFzZS5jcHAJKHJldmlzaW9uIDE0MDUwNCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQ1NFUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Mywy
NCArNTMsMjQgQEAgcHVibGljOgogICAgIAogcHJpdmF0ZToKICAgICAKLSAgICBOb2RlSW5kZXgg
Y2Fub25pY2FsaXplKE5vZGVJbmRleCBub2RlSW5kZXgpCisgICAgTm9kZSogY2Fub25pY2FsaXpl
KE5vZGUqIG5vZGUpCiAgICAgewotICAgICAgICBpZiAobm9kZUluZGV4ID09IE5vTm9kZSkKLSAg
ICAgICAgICAgIHJldHVybiBOb05vZGU7CisgICAgICAgIGlmICghbm9kZSkKKyAgICAgICAgICAg
IHJldHVybiAwOwogICAgICAgICAKLSAgICAgICAgaWYgKG1fZ3JhcGhbbm9kZUluZGV4XS5vcCgp
ID09IFZhbHVlVG9JbnQzMikKLSAgICAgICAgICAgIG5vZGVJbmRleCA9IG1fZ3JhcGhbbm9kZUlu
ZGV4XS5jaGlsZDEoKS5pbmRleCgpOworICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBWYWx1ZVRv
SW50MzIpCisgICAgICAgICAgICBub2RlID0gbm9kZS0+Y2hpbGQxKCkubm9kZSgpOwogICAgICAg
ICAKLSAgICAgICAgcmV0dXJuIG5vZGVJbmRleDsKKyAgICAgICAgcmV0dXJuIG5vZGU7CiAgICAg
fQotICAgIE5vZGVJbmRleCBjYW5vbmljYWxpemUoRWRnZSBub2RlVXNlKQorICAgIE5vZGUqIGNh
bm9uaWNhbGl6ZShFZGdlIGVkZ2UpCiAgICAgewotICAgICAgICByZXR1cm4gY2Fub25pY2FsaXpl
KG5vZGVVc2UuaW5kZXhVbmNoZWNrZWQoKSk7CisgICAgICAgIHJldHVybiBjYW5vbmljYWxpemUo
ZWRnZS5ub2RlKCkpOwogICAgIH0KICAgICAKICAgICB1bnNpZ25lZCBlbmRJbmRleEZvclB1cmVD
U0UoKQogICAgIHsKLSAgICAgICAgdW5zaWduZWQgcmVzdWx0ID0gbV9sYXN0U2VlblttX2dyYXBo
W21fY29tcGlsZUluZGV4XS5vcCgpXTsKKyAgICAgICAgdW5zaWduZWQgcmVzdWx0ID0gbV9sYXN0
U2VlblttX2N1cnJlbnROb2RlLT5vcCgpXTsKICAgICAgICAgaWYgKHJlc3VsdCA9PSBVSU5UX01B
WCkKICAgICAgICAgICAgIHJlc3VsdCA9IDA7CiAgICAgICAgIGVsc2UKQEAgLTgyLDI2MSArODIs
MjU3IEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCi0gICAgTm9k
ZUluZGV4IHB1cmVDU0UoTm9kZSYgbm9kZSkKKyAgICBOb2RlKiBwdXJlQ1NFKE5vZGUqIG5vZGUp
CiAgICAgewotICAgICAgICBOb2RlSW5kZXggY2hpbGQxID0gY2Fub25pY2FsaXplKG5vZGUuY2hp
bGQxKCkpOwotICAgICAgICBOb2RlSW5kZXggY2hpbGQyID0gY2Fub25pY2FsaXplKG5vZGUuY2hp
bGQyKCkpOwotICAgICAgICBOb2RlSW5kZXggY2hpbGQzID0gY2Fub25pY2FsaXplKG5vZGUuY2hp
bGQzKCkpOworICAgICAgICBOb2RlKiBjaGlsZDEgPSBjYW5vbmljYWxpemUobm9kZS0+Y2hpbGQx
KCkpOworICAgICAgICBOb2RlKiBjaGlsZDIgPSBjYW5vbmljYWxpemUobm9kZS0+Y2hpbGQyKCkp
OworICAgICAgICBOb2RlKiBjaGlsZDMgPSBjYW5vbmljYWxpemUobm9kZS0+Y2hpbGQzKCkpOwog
ICAgICAgICAKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gZW5kSW5kZXhGb3JQdXJlQ1NFKCk7
IGktLTspIHsKLSAgICAgICAgICAgIE5vZGVJbmRleCBpbmRleCA9IG1fY3VycmVudEJsb2NrLT5h
dChpKTsKLSAgICAgICAgICAgIGlmIChpbmRleCA9PSBjaGlsZDEgfHwgaW5kZXggPT0gY2hpbGQy
IHx8IGluZGV4ID09IGNoaWxkMykKKyAgICAgICAgICAgIE5vZGUqIG90aGVyTm9kZSA9IG1fY3Vy
cmVudEJsb2NrLT5hdChpKTsKKyAgICAgICAgICAgIGlmIChvdGhlck5vZGUgPT0gY2hpbGQxIHx8
IG90aGVyTm9kZSA9PSBjaGlsZDIgfHwgb3RoZXJOb2RlID09IGNoaWxkMykKICAgICAgICAgICAg
ICAgICBicmVhazsKIAotICAgICAgICAgICAgTm9kZSYgb3RoZXJOb2RlID0gbV9ncmFwaFtpbmRl
eF07Ci0gICAgICAgICAgICBpZiAoIW90aGVyTm9kZS5zaG91bGRHZW5lcmF0ZSgpKQorICAgICAg
ICAgICAgaWYgKCFvdGhlck5vZGUtPnNob3VsZEdlbmVyYXRlKCkpCiAgICAgICAgICAgICAgICAg
Y29udGludWU7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChub2RlLm9wKCkgIT0gb3Ro
ZXJOb2RlLm9wKCkpCisgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSAhPSBvdGhlck5vZGUtPm9w
KCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAKLSAgICAgICAgICAg
IGlmIChub2RlLmFyaXRoTm9kZUZsYWdzKCkgIT0gb3RoZXJOb2RlLmFyaXRoTm9kZUZsYWdzKCkp
CisgICAgICAgICAgICBpZiAobm9kZS0+YXJpdGhOb2RlRmxhZ3MoKSAhPSBvdGhlck5vZGUtPmFy
aXRoTm9kZUZsYWdzKCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAK
LSAgICAgICAgICAgIE5vZGVJbmRleCBvdGhlckNoaWxkID0gY2Fub25pY2FsaXplKG90aGVyTm9k
ZS5jaGlsZDEoKSk7Ci0gICAgICAgICAgICBpZiAob3RoZXJDaGlsZCA9PSBOb05vZGUpCi0gICAg
ICAgICAgICAgICAgcmV0dXJuIGluZGV4OworICAgICAgICAgICAgTm9kZSogb3RoZXJDaGlsZCA9
IGNhbm9uaWNhbGl6ZShvdGhlck5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgIGlmICghb3Ro
ZXJDaGlsZCkKKyAgICAgICAgICAgICAgICByZXR1cm4gb3RoZXJOb2RlOwogICAgICAgICAgICAg
aWYgKG90aGVyQ2hpbGQgIT0gY2hpbGQxKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAg
ICAgICAgICAgCi0gICAgICAgICAgICBvdGhlckNoaWxkID0gY2Fub25pY2FsaXplKG90aGVyTm9k
ZS5jaGlsZDIoKSk7Ci0gICAgICAgICAgICBpZiAob3RoZXJDaGlsZCA9PSBOb05vZGUpCi0gICAg
ICAgICAgICAgICAgcmV0dXJuIGluZGV4OworICAgICAgICAgICAgb3RoZXJDaGlsZCA9IGNhbm9u
aWNhbGl6ZShvdGhlck5vZGUtPmNoaWxkMigpKTsKKyAgICAgICAgICAgIGlmICghb3RoZXJDaGls
ZCkKKyAgICAgICAgICAgICAgICByZXR1cm4gb3RoZXJOb2RlOwogICAgICAgICAgICAgaWYgKG90
aGVyQ2hpbGQgIT0gY2hpbGQyKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAg
ICAgCi0gICAgICAgICAgICBvdGhlckNoaWxkID0gY2Fub25pY2FsaXplKG90aGVyTm9kZS5jaGls
ZDMoKSk7Ci0gICAgICAgICAgICBpZiAob3RoZXJDaGlsZCA9PSBOb05vZGUpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIGluZGV4OworICAgICAgICAgICAgb3RoZXJDaGlsZCA9IGNhbm9uaWNhbGl6
ZShvdGhlck5vZGUtPmNoaWxkMygpKTsKKyAgICAgICAgICAgIGlmICghb3RoZXJDaGlsZCkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gb3RoZXJOb2RlOwogICAgICAgICAgICAgaWYgKG90aGVyQ2hp
bGQgIT0gY2hpbGQzKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgCi0g
ICAgICAgICAgICByZXR1cm4gaW5kZXg7CisgICAgICAgICAgICByZXR1cm4gb3RoZXJOb2RlOwog
ICAgICAgICB9Ci0gICAgICAgIHJldHVybiBOb05vZGU7CisgICAgICAgIHJldHVybiAwOwogICAg
IH0KICAgICAKLSAgICBOb2RlSW5kZXggY29uc3RhbnRDU0UoTm9kZSYgbm9kZSkKKyAgICBOb2Rl
KiBjb25zdGFudENTRShOb2RlKiBub2RlKQogICAgIHsKICAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gZW5kSW5kZXhGb3JQdXJlQ1NFKCk7IGktLTspIHsKLSAgICAgICAgICAgIE5vZGVJbmRleCBp
bmRleCA9IG1fY3VycmVudEJsb2NrLT5hdChpKTsKLSAgICAgICAgICAgIE5vZGUmIG90aGVyTm9k
ZSA9IG1fZ3JhcGhbaW5kZXhdOwotICAgICAgICAgICAgaWYgKG90aGVyTm9kZS5vcCgpICE9IEpT
Q29uc3RhbnQpCisgICAgICAgICAgICBOb2RlKiBvdGhlck5vZGUgPSBtX2N1cnJlbnRCbG9jay0+
YXQoaSk7CisgICAgICAgICAgICBpZiAob3RoZXJOb2RlLT5vcCgpICE9IEpTQ29uc3RhbnQpCiAg
ICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChv
dGhlck5vZGUuY29uc3RhbnROdW1iZXIoKSAhPSBub2RlLmNvbnN0YW50TnVtYmVyKCkpCisgICAg
ICAgICAgICBpZiAoIW90aGVyTm9kZS0+c2hvdWxkR2VuZXJhdGUoKSkKICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgcmV0dXJuIGluZGV4OworICAg
ICAgICAgICAgaWYgKG90aGVyTm9kZS0+Y29uc3RhbnROdW1iZXIoKSAhPSBub2RlLT5jb25zdGFu
dE51bWJlcigpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgCisgICAg
ICAgICAgICByZXR1cm4gb3RoZXJOb2RlOwogICAgICAgICB9Ci0gICAgICAgIHJldHVybiBOb05v
ZGU7CisgICAgICAgIHJldHVybiAwOwogICAgIH0KICAgICAKLSAgICBOb2RlSW5kZXggd2Vha0Nv
bnN0YW50Q1NFKE5vZGUmIG5vZGUpCisgICAgTm9kZSogd2Vha0NvbnN0YW50Q1NFKE5vZGUqIG5v
ZGUpCiAgICAgewogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBlbmRJbmRleEZvclB1cmVDU0Uo
KTsgaS0tOykgewotICAgICAgICAgICAgTm9kZUluZGV4IGluZGV4ID0gbV9jdXJyZW50QmxvY2st
PmF0KGkpOwotICAgICAgICAgICAgTm9kZSYgb3RoZXJOb2RlID0gbV9ncmFwaFtpbmRleF07Ci0g
ICAgICAgICAgICBpZiAob3RoZXJOb2RlLm9wKCkgIT0gV2Vha0pTQ29uc3RhbnQpCisgICAgICAg
ICAgICBOb2RlKiBvdGhlck5vZGUgPSBtX2N1cnJlbnRCbG9jay0+YXQoaSk7CisgICAgICAgICAg
ICBpZiAob3RoZXJOb2RlLT5vcCgpICE9IFdlYWtKU0NvbnN0YW50KQogICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAob3RoZXJOb2RlLndlYWtD
b25zdGFudCgpICE9IG5vZGUud2Vha0NvbnN0YW50KCkpCisgICAgICAgICAgICBpZiAoIW90aGVy
Tm9kZS0+c2hvdWxkR2VuZXJhdGUoKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAg
ICAgICAgIAotICAgICAgICAgICAgcmV0dXJuIGluZGV4OworICAgICAgICAgICAgaWYgKG90aGVy
Tm9kZS0+d2Vha0NvbnN0YW50KCkgIT0gbm9kZS0+d2Vha0NvbnN0YW50KCkpCisgICAgICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHJldHVybiBvdGhlck5v
ZGU7CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIE5vTm9kZTsKKyAgICAgICAgcmV0dXJuIDA7
CiAgICAgfQogICAgIAotICAgIE5vZGVJbmRleCBnZXRDYWxsZWVMb2FkRWxpbWluYXRpb24oSW5s
aW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUpCisgICAgTm9kZSogZ2V0Q2FsbGVlTG9hZEVs
aW1pbmF0aW9uKElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lKQogICAgIHsKICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gbV9pbmRleEluQmxvY2s7IGktLTspIHsKLSAgICAgICAgICAg
IE5vZGVJbmRleCBpbmRleCA9IG1fY3VycmVudEJsb2NrLT5hdChpKTsKLSAgICAgICAgICAgIE5v
ZGUmIG5vZGUgPSBtX2dyYXBoW2luZGV4XTsKLSAgICAgICAgICAgIGlmICghbm9kZS5zaG91bGRH
ZW5lcmF0ZSgpKQorICAgICAgICAgICAgTm9kZSogbm9kZSA9IG1fY3VycmVudEJsb2NrLT5hdChp
KTsKKyAgICAgICAgICAgIGlmICghbm9kZS0+c2hvdWxkR2VuZXJhdGUoKSkKICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGlmIChub2RlLmNvZGVPcmlnaW4uaW5saW5lQ2Fs
bEZyYW1lICE9IGlubGluZUNhbGxGcmFtZSkKKyAgICAgICAgICAgIGlmIChub2RlLT5jb2RlT3Jp
Z2luLmlubGluZUNhbGxGcmFtZSAhPSBpbmxpbmVDYWxsRnJhbWUpCiAgICAgICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgICAgICBzd2l0Y2ggKG5vZGUub3AoKSkgeworICAgICAgICAgICAg
c3dpdGNoIChub2RlLT5vcCgpKSB7CiAgICAgICAgICAgICBjYXNlIEdldENhbGxlZToKLSAgICAg
ICAgICAgICAgICByZXR1cm4gaW5kZXg7CisgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGU7CiAg
ICAgICAgICAgICBjYXNlIFNldENhbGxlZToKLSAgICAgICAgICAgICAgICByZXR1cm4gbm9kZS5j
aGlsZDEoKS5pbmRleCgpOworICAgICAgICAgICAgICAgIHJldHVybiBub2RlLT5jaGlsZDEoKS5u
b2RlKCk7CiAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIHJldHVybiBOb05vZGU7CisgICAgICAgIHJl
dHVybiAwOwogICAgIH0KICAgICAKLSAgICBOb2RlSW5kZXggZ2V0QXJyYXlMZW5ndGhFbGltaW5h
dGlvbihOb2RlSW5kZXggYXJyYXkpCisgICAgTm9kZSogZ2V0QXJyYXlMZW5ndGhFbGltaW5hdGlv
bihOb2RlKiBhcnJheSkKICAgICB7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1faW5kZXhJ
bkJsb2NrOyBpLS07KSB7Ci0gICAgICAgICAgICBOb2RlSW5kZXggaW5kZXggPSBtX2N1cnJlbnRC
bG9jay0+YXQoaSk7Ci0gICAgICAgICAgICBOb2RlJiBub2RlID0gbV9ncmFwaFtpbmRleF07Ci0g
ICAgICAgICAgICBpZiAoIW5vZGUuc2hvdWxkR2VuZXJhdGUoKSkKKyAgICAgICAgICAgIE5vZGUq
IG5vZGUgPSBtX2N1cnJlbnRCbG9jay0+YXQoaSk7CisgICAgICAgICAgICBpZiAoIW5vZGUtPnNo
b3VsZEdlbmVyYXRlKCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBz
d2l0Y2ggKG5vZGUub3AoKSkgeworICAgICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CiAg
ICAgICAgICAgICBjYXNlIEdldEFycmF5TGVuZ3RoOgotICAgICAgICAgICAgICAgIGlmIChub2Rl
LmNoaWxkMSgpID09IGFycmF5KQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW5kZXg7Cisg
ICAgICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpID09IGFycmF5KQorICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gbm9kZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
ICAgICAKICAgICAgICAgICAgIGNhc2UgUHV0QnlWYWw6CiAgICAgICAgICAgICAgICAgaWYgKCFt
X2dyYXBoLmJ5VmFsSXNQdXJlKG5vZGUpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gTm9O
b2RlOwotICAgICAgICAgICAgICAgIGlmIChub2RlLmFycmF5TW9kZSgpLm1heVN0b3JlVG9Ib2xl
KCkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBOb05vZGU7CisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiAwOworICAgICAgICAgICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS5tYXlT
dG9yZVRvSG9sZSgpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAg
ICAgICAgICAgICAgaWYgKG1fZ3JhcGguY2xvYmJlcnNXb3JsZChpbmRleCkpCi0gICAgICAgICAg
ICAgICAgICAgIHJldHVybiBOb05vZGU7CisgICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGguY2xv
YmJlcnNXb3JsZChub2RlKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAg
ICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIE5vTm9kZTsKKyAgICAgICAgcmV0dXJu
IDA7CiAgICAgfQogICAgIAotICAgIE5vZGVJbmRleCBnbG9iYWxWYXJMb2FkRWxpbWluYXRpb24o
V3JpdGVCYXJyaWVyPFVua25vd24+KiByZWdpc3RlclBvaW50ZXIpCisgICAgTm9kZSogZ2xvYmFs
VmFyTG9hZEVsaW1pbmF0aW9uKFdyaXRlQmFycmllcjxVbmtub3duPiogcmVnaXN0ZXJQb2ludGVy
KQogICAgIHsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9pbmRleEluQmxvY2s7IGktLTsp
IHsKLSAgICAgICAgICAgIE5vZGVJbmRleCBpbmRleCA9IG1fY3VycmVudEJsb2NrLT5hdChpKTsK
LSAgICAgICAgICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW2luZGV4XTsKLSAgICAgICAgICAgIGlm
ICghbm9kZS5zaG91bGRHZW5lcmF0ZSgpKQorICAgICAgICAgICAgTm9kZSogbm9kZSA9IG1fY3Vy
cmVudEJsb2NrLT5hdChpKTsKKyAgICAgICAgICAgIGlmICghbm9kZS0+c2hvdWxkR2VuZXJhdGUo
KSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIHN3aXRjaCAobm9kZS5v
cCgpKSB7CisgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKICAgICAgICAgICAgIGNh
c2UgR2V0R2xvYmFsVmFyOgotICAgICAgICAgICAgICAgIGlmIChub2RlLnJlZ2lzdGVyUG9pbnRl
cigpID09IHJlZ2lzdGVyUG9pbnRlcikKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGluZGV4
OworICAgICAgICAgICAgICAgIGlmIChub2RlLT5yZWdpc3RlclBvaW50ZXIoKSA9PSByZWdpc3Rl
clBvaW50ZXIpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBub2RlOwogICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBQdXRHbG9iYWxWYXI6Ci0gICAgICAgICAgICAg
ICAgaWYgKG5vZGUucmVnaXN0ZXJQb2ludGVyKCkgPT0gcmVnaXN0ZXJQb2ludGVyKQotICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gbm9kZS5jaGlsZDEoKS5pbmRleCgpOworICAgICAgICAgICAg
ICAgIGlmIChub2RlLT5yZWdpc3RlclBvaW50ZXIoKSA9PSByZWdpc3RlclBvaW50ZXIpCisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBub2RlLT5jaGlsZDEoKS5ub2RlKCk7CiAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKG1fZ3JhcGguY2xvYmJlcnNXb3JsZChp
bmRleCkpCisgICAgICAgICAgICBpZiAobV9ncmFwaC5jbG9iYmVyc1dvcmxkKG5vZGUpKQogICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIHJldHVybiBOb05vZGU7Cisg
ICAgICAgIHJldHVybiAwOwogICAgIH0KICAgICAKLSAgICBOb2RlSW5kZXggc2NvcGVkVmFyTG9h
ZEVsaW1pbmF0aW9uKE5vZGVJbmRleCByZWdpc3RlcnMsIHVuc2lnbmVkIHZhck51bWJlcikKKyAg
ICBOb2RlKiBzY29wZWRWYXJMb2FkRWxpbWluYXRpb24oTm9kZSogcmVnaXN0ZXJzLCB1bnNpZ25l
ZCB2YXJOdW1iZXIpCiAgICAgewogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2luZGV4SW5C
bG9jazsgaS0tOykgewotICAgICAgICAgICAgTm9kZUluZGV4IGluZGV4ID0gbV9jdXJyZW50Qmxv
Y2stPmF0KGkpOwotICAgICAgICAgICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhbaW5kZXhdOwotICAg
ICAgICAgICAgaWYgKCFub2RlLnNob3VsZEdlbmVyYXRlKCkpCisgICAgICAgICAgICBOb2RlKiA9
IG1fY3VycmVudEJsb2NrLT5hdChpKTsKKyAgICAgICAgICAgIGlmICghbm9kZS0+c2hvdWxkR2Vu
ZXJhdGUoKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIHN3aXRjaCAo
bm9kZS5vcCgpKSB7CisgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKICAgICAgICAg
ICAgIGNhc2UgR2V0U2NvcGVkVmFyOiB7Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGUuY2hpbGQx
KCkgPT0gcmVnaXN0ZXJzICYmIG5vZGUudmFyTnVtYmVyKCkgPT0gdmFyTnVtYmVyKQorICAgICAg
ICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKSA9PSByZWdpc3RlcnMgJiYgbm9kZS52YXJOdW1i
ZXIoKSA9PSB2YXJOdW1iZXIpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpbmRleDsKICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0gCiAgICAgICAgICAgICBjYXNlIFB1
dFNjb3BlZFZhcjogewotICAgICAgICAgICAgICAgIGlmIChub2RlLmNoaWxkMigpID09IHJlZ2lz
dGVycyAmJiBub2RlLnZhck51bWJlcigpID09IHZhck51bWJlcikKLSAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIG5vZGUuY2hpbGQzKCkuaW5kZXgoKTsKKyAgICAgICAgICAgICAgICBpZiAobm9k
ZS0+Y2hpbGQyKCkgPT0gcmVnaXN0ZXJzICYmIG5vZGUudmFyTnVtYmVyKCkgPT0gdmFyTnVtYmVy
KQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gbm9kZS0+Y2hpbGQzKCkubm9kZSgpOwogICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgY2FzZSBTZXRM
b2NhbDogewotICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nl
c3NEYXRhID0gbm9kZS52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKKyAgICAgICAgICAgICAgICBWYXJp
YWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNz
RGF0YSgpOwogICAgICAgICAgICAgICAgIGlmICh2YXJpYWJsZUFjY2Vzc0RhdGEtPmlzQ2FwdHVy
ZWQoKQogICAgICAgICAgICAgICAgICAgICAmJiB2YXJpYWJsZUFjY2Vzc0RhdGEtPmxvY2FsKCkg
PT0gc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPih2YXJOdW1iZXIpKQotICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gTm9Ob2RlOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGRlZmF1bHQ6
CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAo
bV9ncmFwaC5jbG9iYmVyc1dvcmxkKGluZGV4KSkKKyAgICAgICAgICAgIGlmIChtX2dyYXBoLmNs
b2JiZXJzV29ybGQobm9kZSkpCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAg
ICAgICAgcmV0dXJuIE5vTm9kZTsKKyAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogICAgIAogICAg
IGJvb2wgZ2xvYmFsVmFyV2F0Y2hwb2ludEVsaW1pbmF0aW9uKFdyaXRlQmFycmllcjxVbmtub3du
PiogcmVnaXN0ZXJQb2ludGVyKQogICAgIHsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9p
bmRleEluQmxvY2s7IGktLTspIHsKLSAgICAgICAgICAgIE5vZGVJbmRleCBpbmRleCA9IG1fY3Vy
cmVudEJsb2NrLT5hdChpKTsKLSAgICAgICAgICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW2luZGV4
XTsKLSAgICAgICAgICAgIGlmICghbm9kZS5zaG91bGRHZW5lcmF0ZSgpKQorICAgICAgICAgICAg
Tm9kZSogbm9kZSA9IG1fY3VycmVudEJsb2NrLT5hdChpKTsKKyAgICAgICAgICAgIGlmICghbm9k
ZS0+c2hvdWxkR2VuZXJhdGUoKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAg
ICAgIHN3aXRjaCAobm9kZS5vcCgpKSB7CisgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkp
IHsKICAgICAgICAgICAgIGNhc2UgR2xvYmFsVmFyV2F0Y2hwb2ludDoKLSAgICAgICAgICAgICAg
ICBpZiAobm9kZS5yZWdpc3RlclBvaW50ZXIoKSA9PSByZWdpc3RlclBvaW50ZXIpCisgICAgICAg
ICAgICAgICAgaWYgKG5vZGUtPnJlZ2lzdGVyUG9pbnRlcigpID09IHJlZ2lzdGVyUG9pbnRlcikK
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICBjYXNlIFB1dEdsb2JhbFZhcjoKLSAgICAgICAgICAgICAgICBpZiAobm9k
ZS5yZWdpc3RlclBvaW50ZXIoKSA9PSByZWdpc3RlclBvaW50ZXIpCisgICAgICAgICAgICAgICAg
aWYgKG5vZGUtPnJlZ2lzdGVyUG9pbnRlcigpID09IHJlZ2lzdGVyUG9pbnRlcikKICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIGlmIChtX2dyYXBoLmNsb2JiZXJzV29ybGQoaW5kZXgpKQorICAgICAgICAgICAg
aWYgKG1fZ3JhcGguY2xvYmJlcnNXb3JsZChub2RlKSkKICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgfQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIAotICAgIE5vZGVJ
bmRleCBnbG9iYWxWYXJTdG9yZUVsaW1pbmF0aW9uKFdyaXRlQmFycmllcjxVbmtub3duPiogcmVn
aXN0ZXJQb2ludGVyKQorICAgIE5vZGUqIGdsb2JhbFZhclN0b3JlRWxpbWluYXRpb24oV3JpdGVC
YXJyaWVyPFVua25vd24+KiByZWdpc3RlclBvaW50ZXIpCiAgICAgewogICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSBtX2luZGV4SW5CbG9jazsgaS0tOykgewotICAgICAgICAgICAgTm9kZUluZGV4
IGluZGV4ID0gbV9jdXJyZW50QmxvY2stPmF0KGkpOwotICAgICAgICAgICAgTm9kZSYgbm9kZSA9
IG1fZ3JhcGhbaW5kZXhdOwotICAgICAgICAgICAgaWYgKCFub2RlLnNob3VsZEdlbmVyYXRlKCkp
CisgICAgICAgICAgICBOb2RlKiBub2RlID0gbV9jdXJyZW50QmxvY2stPmF0KGkpOworICAgICAg
ICAgICAgaWYgKCFub2RlLT5zaG91bGRHZW5lcmF0ZSgpKQogICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwotICAgICAgICAgICAgc3dpdGNoIChub2RlLm9wKCkpIHsKKyAgICAgICAgICAgIHN3aXRj
aCAobm9kZS0+b3AoKSkgewogICAgICAgICAgICAgY2FzZSBQdXRHbG9iYWxWYXI6CiAgICAgICAg
ICAgICBjYXNlIFB1dEdsb2JhbFZhckNoZWNrOgotICAgICAgICAgICAgICAgIGlmIChub2RlLnJl
Z2lzdGVyUG9pbnRlcigpID09IHJlZ2lzdGVyUG9pbnRlcikKLSAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGluZGV4OworICAgICAgICAgICAgICAgIGlmIChub2RlLT5yZWdpc3RlclBvaW50ZXIo
KSA9PSByZWdpc3RlclBvaW50ZXIpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBub2RlOwog
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgY2Fz
ZSBHZXRHbG9iYWxWYXI6Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGUucmVnaXN0ZXJQb2ludGVy
KCkgPT0gcmVnaXN0ZXJQb2ludGVyKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gTm9Ob2Rl
OworICAgICAgICAgICAgICAgIGlmIChub2RlLT5yZWdpc3RlclBvaW50ZXIoKSA9PSByZWdpc3Rl
clBvaW50ZXIpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChtX2dyYXBoLmNs
b2JiZXJzV29ybGQoaW5kZXgpIHx8IG5vZGUuY2FuRXhpdCgpKQotICAgICAgICAgICAgICAgIHJl
dHVybiBOb05vZGU7CisgICAgICAgICAgICBpZiAobV9ncmFwaC5jbG9iYmVyc1dvcmxkKG5vZGUp
IHx8IG5vZGUtPmNhbkV4aXQoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAg
fQotICAgICAgICByZXR1cm4gTm9Ob2RlOworICAgICAgICByZXR1cm4gMDsKICAgICB9CiAgICAg
Ci0gICAgTm9kZUluZGV4IHNjb3BlZFZhclN0b3JlRWxpbWluYXRpb24oTm9kZUluZGV4IHNjb3Bl
LCBOb2RlSW5kZXggcmVnaXN0ZXJzLCB1bnNpZ25lZCB2YXJOdW1iZXIpCisgICAgTm9kZSogc2Nv
cGVkVmFyU3RvcmVFbGltaW5hdGlvbihOb2RlKiBzY29wZSwgTm9kZSogcmVnaXN0ZXJzLCB1bnNp
Z25lZCB2YXJOdW1iZXIpCiAgICAgewogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2luZGV4
SW5CbG9jazsgaS0tOykgewotICAgICAgICAgICAgTm9kZUluZGV4IGluZGV4ID0gbV9jdXJyZW50
QmxvY2stPmF0KGkpOwotICAgICAgICAgICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhbaW5kZXhdOwot
ICAgICAgICAgICAgaWYgKCFub2RlLnNob3VsZEdlbmVyYXRlKCkpCisgICAgICAgICAgICBOb2Rl
KiBub2RlID0gbV9jdXJyZW50QmxvY2stPmF0KGkpOworICAgICAgICAgICAgaWYgKCFub2RlLT5z
aG91bGRHZW5lcmF0ZSgpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAg
c3dpdGNoIChub2RlLm9wKCkpIHsKKyAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewog
ICAgICAgICAgICAgY2FzZSBQdXRTY29wZWRWYXI6IHsKLSAgICAgICAgICAgICAgICBpZiAobm9k
ZS5jaGlsZDEoKSA9PSBzY29wZSAmJiBub2RlLmNoaWxkMigpID09IHJlZ2lzdGVycyAmJiBub2Rl
LnZhck51bWJlcigpID09IHZhck51bWJlcikKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlu
ZGV4OworICAgICAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKSA9PSBzY29wZSAmJiBub2Rl
LT5jaGlsZDIoKSA9PSByZWdpc3RlcnMgJiYgbm9kZS52YXJOdW1iZXIoKSA9PSB2YXJOdW1iZXIp
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBub2RlOwogICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgY2FzZSBHZXRT
Y29wZWRWYXI6IHsKICAgICAgICAgICAgICAgICAvLyBMZXQncyBiZSBjb25zZXJ2YXRpdmUuCi0g
ICAgICAgICAgICAgICAgaWYgKG5vZGUudmFyTnVtYmVyKCkgPT0gdmFyTnVtYmVyKQotICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gTm9Ob2RlOworICAgICAgICAgICAgICAgIGlmIChub2RlLT52
YXJOdW1iZXIoKSA9PSB2YXJOdW1iZXIpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwog
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIApA
QCAtMzQ0LDQ2ICszNDAsNDUgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBWYXJpYWJsZUFj
Y2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9IG5vZGUudmFyaWFibGVBY2Nlc3NEYXRhKCk7
CiAgICAgICAgICAgICAgICAgaWYgKHZhcmlhYmxlQWNjZXNzRGF0YS0+aXNDYXB0dXJlZCgpCiAg
ICAgICAgICAgICAgICAgICAgICYmIHZhcmlhYmxlQWNjZXNzRGF0YS0+bG9jYWwoKSA9PSBzdGF0
aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KHZhck51bWJlcikpCi0gICAgICAgICAgICAgICAgICAg
IHJldHVybiBOb05vZGU7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBkZWZhdWx0OgogICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKG1fZ3Jh
cGguY2xvYmJlcnNXb3JsZChpbmRleCkgfHwgbm9kZS5jYW5FeGl0KCkpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIE5vTm9kZTsKKyAgICAgICAgICAgIGlmIChtX2dyYXBoLmNsb2JiZXJzV29ybGQo
bm9kZSkgfHwgbm9kZS0+Y2FuRXhpdCgpKQorICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAg
ICAgICB9Ci0gICAgICAgIHJldHVybiBOb05vZGU7CisgICAgICAgIHJldHVybiAwOwogICAgIH0K
ICAgICAKLSAgICBOb2RlSW5kZXggZ2V0QnlWYWxMb2FkRWxpbWluYXRpb24oTm9kZUluZGV4IGNo
aWxkMSwgTm9kZUluZGV4IGNoaWxkMikKKyAgICBOb2RlKiBnZXRCeVZhbExvYWRFbGltaW5hdGlv
bihOb2RlKiBjaGlsZDEsIE5vZGUqIGNoaWxkMikKICAgICB7CiAgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IG1faW5kZXhJbkJsb2NrOyBpLS07KSB7Ci0gICAgICAgICAgICBOb2RlSW5kZXggaW5k
ZXggPSBtX2N1cnJlbnRCbG9jay0+YXQoaSk7Ci0gICAgICAgICAgICBpZiAoaW5kZXggPT0gY2hp
bGQxIHx8IGluZGV4ID09IGNhbm9uaWNhbGl6ZShjaGlsZDIpKSAKKyAgICAgICAgICAgIE5vZGUq
IG5vZGUgPSBtX2N1cnJlbnRCbG9jay0+YXQoaSk7CisgICAgICAgICAgICBpZiAobm9kZSA9PSBj
aGlsZDEgfHwgbm9kZSA9PSBjYW5vbmljYWxpemUoY2hpbGQyKSkgCiAgICAgICAgICAgICAgICAg
YnJlYWs7CiAKLSAgICAgICAgICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW2luZGV4XTsKLSAgICAg
ICAgICAgIGlmICghbm9kZS5zaG91bGRHZW5lcmF0ZSgpKQorICAgICAgICAgICAgaWYgKCFub2Rl
LT5zaG91bGRHZW5lcmF0ZSgpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAg
ICAgc3dpdGNoIChub2RlLm9wKCkpIHsKKyAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkg
ewogICAgICAgICAgICAgY2FzZSBHZXRCeVZhbDoKICAgICAgICAgICAgICAgICBpZiAoIW1fZ3Jh
cGguYnlWYWxJc1B1cmUobm9kZSkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOb05vZGU7
Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGUuY2hpbGQxKCkgPT0gY2hpbGQxICYmIGNhbm9uaWNh
bGl6ZShub2RlLmNoaWxkMigpKSA9PSBjYW5vbmljYWxpemUoY2hpbGQyKSkKLSAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGluZGV4OworICAgICAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEo
KSA9PSBjaGlsZDEgJiYgY2Fub25pY2FsaXplKG5vZGUtPmNoaWxkMigpKSA9PSBjYW5vbmljYWxp
emUoY2hpbGQyKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGU7CiAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIFB1dEJ5VmFsOgogICAgICAgICAgICAgY2Fz
ZSBQdXRCeVZhbEFsaWFzOiB7CiAgICAgICAgICAgICAgICAgaWYgKCFtX2dyYXBoLmJ5VmFsSXNQ
dXJlKG5vZGUpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gTm9Ob2RlOworICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC52YXJBcmdD
aGlsZChub2RlLCAwKSA9PSBjaGlsZDEgJiYgY2Fub25pY2FsaXplKG1fZ3JhcGgudmFyQXJnQ2hp
bGQobm9kZSwgMSkpID09IGNhbm9uaWNhbGl6ZShjaGlsZDIpKQotICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAyKS5pbmRleCgpOworICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAyKS5ub2RlKCk7CiAg
ICAgICAgICAgICAgICAgLy8gV2UgbXVzdCBhc3N1bWUgdGhhdCB0aGUgUHV0QnlWYWwgd2lsbCBj
bG9iYmVyIHRoZSBsb2NhdGlvbiB3ZSdyZSBnZXR0aW5nIGZyb20uCiAgICAgICAgICAgICAgICAg
Ly8gRklYTUU6IFdlIGNhbiBkbyBiZXR0ZXI7IGlmIHdlIGtub3cgdGhhdCB0aGUgUHV0QnlWYWwg
aXMgYWNjZXNzaW5nIGFuIGFycmF5IG9mIGEKICAgICAgICAgICAgICAgICAvLyBkaWZmZXJlbnQg
dHlwZSB0aGFuIHRoZSBHZXRCeVZhbCwgdGhlbiB3ZSBrbm93IHRoYXQgdGhleSB3b24ndCBjbG9i
YmVyIGVhY2ggb3RoZXIuCi0gICAgICAgICAgICAgICAgcmV0dXJuIE5vTm9kZTsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGNhc2UgUHV0U3Ry
dWN0dXJlOgogICAgICAgICAgICAgY2FzZSBQdXRCeU9mZnNldDoKQEAgLTM5Myw3MiArMzg4LDY5
IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgLy8gdGhlIEdldEJ5VmFsLgogICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBpZiAo
bV9ncmFwaC5jbG9iYmVyc1dvcmxkKGluZGV4KSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IE5vTm9kZTsKKyAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC5jbG9iYmVyc1dvcmxkKG5vZGUp
KQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICByZXR1cm4gTm9Ob2RlOworICAgICAg
ICByZXR1cm4gMDsKICAgICB9CiAKLSAgICBib29sIGNoZWNrRnVuY3Rpb25FbGltaW5hdGlvbihK
U0NlbGwqIGZ1bmN0aW9uLCBOb2RlSW5kZXggY2hpbGQxKQorICAgIGJvb2wgY2hlY2tGdW5jdGlv
bkVsaW1pbmF0aW9uKEpTQ2VsbCogZnVuY3Rpb24sIE5vZGUqIGNoaWxkMSkKICAgICB7CiAgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IGVuZEluZGV4Rm9yUHVyZUNTRSgpOyBpLS07KSB7Ci0gICAg
ICAgICAgICBOb2RlSW5kZXggaW5kZXggPSBtX2N1cnJlbnRCbG9jay0+YXQoaSk7Ci0gICAgICAg
ICAgICBpZiAoaW5kZXggPT0gY2hpbGQxKSAKKyAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBtX2N1
cnJlbnRCbG9jay0+YXQoaSk7CisgICAgICAgICAgICBpZiAobm9kZSA9PSBjaGlsZDEpIAogICAg
ICAgICAgICAgICAgIGJyZWFrOwogCi0gICAgICAgICAgICBOb2RlJiBub2RlID0gbV9ncmFwaFtp
bmRleF07Ci0gICAgICAgICAgICBpZiAobm9kZS5vcCgpID09IENoZWNrRnVuY3Rpb24gJiYgbm9k
ZS5jaGlsZDEoKSA9PSBjaGlsZDEgJiYgbm9kZS5mdW5jdGlvbigpID09IGZ1bmN0aW9uKQorICAg
ICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gQ2hlY2tGdW5jdGlvbiAmJiBub2RlLT5jaGlsZDEo
KSA9PSBjaGlsZDEgJiYgbm9kZS0+ZnVuY3Rpb24oKSA9PSBmdW5jdGlvbikKICAgICAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
fQogICAgIAotICAgIGJvb2wgY2hlY2tFeGVjdXRhYmxlRWxpbWluYXRpb24oRXhlY3V0YWJsZUJh
c2UqIGV4ZWN1dGFibGUsIE5vZGVJbmRleCBjaGlsZDEpCisgICAgYm9vbCBjaGVja0V4ZWN1dGFi
bGVFbGltaW5hdGlvbihFeGVjdXRhYmxlQmFzZSogZXhlY3V0YWJsZSwgTm9kZSogY2hpbGQxKQog
ICAgIHsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gZW5kSW5kZXhGb3JQdXJlQ1NFKCk7IGkt
LTspIHsKLSAgICAgICAgICAgIE5vZGVJbmRleCBpbmRleCA9IG1fY3VycmVudEJsb2NrLT5hdChp
KTsKLSAgICAgICAgICAgIGlmIChpbmRleCA9PSBjaGlsZDEpCisgICAgICAgICAgICBOb2RlKiBu
b2RlID0gbV9jdXJyZW50QmxvY2stPmF0KGkpOworICAgICAgICAgICAgaWYgKG5vZGUgPT0gY2hp
bGQxKQogICAgICAgICAgICAgICAgIGJyZWFrOwogCi0gICAgICAgICAgICBOb2RlJiBub2RlID0g
bV9ncmFwaFtpbmRleF07Ci0gICAgICAgICAgICBpZiAobm9kZS5vcCgpID09IENoZWNrRXhlY3V0
YWJsZSAmJiBub2RlLmNoaWxkMSgpID09IGNoaWxkMSAmJiBub2RlLmV4ZWN1dGFibGUoKSA9PSBl
eGVjdXRhYmxlKQorICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gQ2hlY2tFeGVjdXRhYmxl
ICYmIG5vZGUtPmNoaWxkMSgpID09IGNoaWxkMSAmJiBub2RlLT5leGVjdXRhYmxlKCkgPT0gZXhl
Y3V0YWJsZSkKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgYm9vbCBjaGVja1N0cnVjdHVyZUVsaW1pbmF0
aW9uKGNvbnN0IFN0cnVjdHVyZVNldCYgc3RydWN0dXJlU2V0LCBOb2RlSW5kZXggY2hpbGQxKQor
ICAgIGJvb2wgY2hlY2tTdHJ1Y3R1cmVFbGltaW5hdGlvbihjb25zdCBTdHJ1Y3R1cmVTZXQmIHN0
cnVjdHVyZVNldCwgTm9kZSogY2hpbGQxKQogICAgIHsKICAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gbV9pbmRleEluQmxvY2s7IGktLTspIHsKLSAgICAgICAgICAgIE5vZGVJbmRleCBpbmRleCA9
IG1fY3VycmVudEJsb2NrLT5hdChpKTsKLSAgICAgICAgICAgIGlmIChpbmRleCA9PSBjaGlsZDEp
IAorICAgICAgICAgICAgTm9kZSogbm9kZSA9IG1fY3VycmVudEJsb2NrLT5hdChpKTsKKyAgICAg
ICAgICAgIGlmIChub2RlID09IGNoaWxkMSkgCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAKLSAg
ICAgICAgICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW2luZGV4XTsKLSAgICAgICAgICAgIGlmICgh
bm9kZS5zaG91bGRHZW5lcmF0ZSgpKQorICAgICAgICAgICAgaWYgKCFub2RlLT5zaG91bGRHZW5l
cmF0ZSgpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgc3dpdGNoIChu
b2RlLm9wKCkpIHsKKyAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewogICAgICAgICAg
ICAgY2FzZSBDaGVja1N0cnVjdHVyZToKICAgICAgICAgICAgIGNhc2UgRm9yd2FyZENoZWNrU3Ry
dWN0dXJlOgotICAgICAgICAgICAgICAgIGlmIChub2RlLmNoaWxkMSgpID09IGNoaWxkMQotICAg
ICAgICAgICAgICAgICAgICAmJiBzdHJ1Y3R1cmVTZXQuaXNTdXBlcnNldE9mKG5vZGUuc3RydWN0
dXJlU2V0KCkpKQorICAgICAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKSA9PSBjaGlsZDEK
KyAgICAgICAgICAgICAgICAgICAgJiYgc3RydWN0dXJlU2V0LmlzU3VwZXJzZXRPZihub2RlLT5z
dHJ1Y3R1cmVTZXQoKSkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgY2FzZSBTdHJ1
Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludDoKICAgICAgICAgICAgIGNhc2UgRm9yd2FyZFN0cnVj
dHVyZVRyYW5zaXRpb25XYXRjaHBvaW50OgotICAgICAgICAgICAgICAgIGlmIChub2RlLmNoaWxk
MSgpID09IGNoaWxkMQotICAgICAgICAgICAgICAgICAgICAmJiBzdHJ1Y3R1cmVTZXQuY29udGFp
bnMobm9kZS5zdHJ1Y3R1cmUoKSkpCisgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgp
ID09IGNoaWxkMQorICAgICAgICAgICAgICAgICAgICAmJiBzdHJ1Y3R1cmVTZXQuY29udGFpbnMo
bm9kZS0+c3RydWN0dXJlKCkpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGNhc2Ug
UHV0U3RydWN0dXJlOgotICAgICAgICAgICAgICAgIGlmIChub2RlLmNoaWxkMSgpID09IGNoaWxk
MQotICAgICAgICAgICAgICAgICAgICAmJiBzdHJ1Y3R1cmVTZXQuY29udGFpbnMobm9kZS5zdHJ1
Y3R1cmVUcmFuc2l0aW9uRGF0YSgpLm5ld1N0cnVjdHVyZSkpCisgICAgICAgICAgICAgICAgaWYg
KG5vZGUtPmNoaWxkMSgpID09IGNoaWxkMQorICAgICAgICAgICAgICAgICAgICAmJiBzdHJ1Y3R1
cmVTZXQuY29udGFpbnMobm9kZS0+c3RydWN0dXJlVHJhbnNpdGlvbkRhdGEoKS5uZXdTdHJ1Y3R1
cmUpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgICAgICBp
ZiAoc3RydWN0dXJlU2V0LmNvbnRhaW5zKG5vZGUuc3RydWN0dXJlVHJhbnNpdGlvbkRhdGEoKS5w
cmV2aW91c1N0cnVjdHVyZSkpCisgICAgICAgICAgICAgICAgaWYgKHN0cnVjdHVyZVNldC5jb250
YWlucyhub2RlLT5zdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSgpLnByZXZpb3VzU3RydWN0dXJlKSkK
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgICAgIApAQCAtNDgzLDcgKzQ3NSw3IEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgZGVm
YXVsdDoKLSAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC5jbG9iYmVyc1dvcmxkKGluZGV4KSkK
KyAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC5jbG9iYmVyc1dvcmxkKG5vZGUpKQogICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICB9CkBAIC00OTEsMjYgKzQ4MywyNSBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgfQogICAgIAotICAgIGJvb2wgc3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9p
bnRFbGltaW5hdGlvbihTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgTm9kZUluZGV4IGNoaWxkMSkKKyAg
ICBib29sIHN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50RWxpbWluYXRpb24oU3RydWN0dXJl
KiBzdHJ1Y3R1cmUsIE5vZGUqIGNoaWxkMSkKICAgICB7CiAgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IG1faW5kZXhJbkJsb2NrOyBpLS07KSB7Ci0gICAgICAgICAgICBOb2RlSW5kZXggaW5kZXgg
PSBtX2N1cnJlbnRCbG9jay0+YXQoaSk7Ci0gICAgICAgICAgICBpZiAoaW5kZXggPT0gY2hpbGQx
KSAKKyAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBtX2N1cnJlbnRCbG9jay0+YXQoaSk7CisgICAg
ICAgICAgICBpZiAobm9kZSA9PSBjaGlsZDEpIAogICAgICAgICAgICAgICAgIGJyZWFrOwogCi0g
ICAgICAgICAgICBOb2RlJiBub2RlID0gbV9ncmFwaFtpbmRleF07Ci0gICAgICAgICAgICBpZiAo
IW5vZGUuc2hvdWxkR2VuZXJhdGUoKSkKKyAgICAgICAgICAgIGlmICghbm9kZS0+c2hvdWxkR2Vu
ZXJhdGUoKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIHN3aXRjaCAo
bm9kZS5vcCgpKSB7CisgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKICAgICAgICAg
ICAgIGNhc2UgQ2hlY2tTdHJ1Y3R1cmU6CiAgICAgICAgICAgICBjYXNlIEZvcndhcmRDaGVja1N0
cnVjdHVyZToKLSAgICAgICAgICAgICAgICBpZiAobm9kZS5jaGlsZDEoKSA9PSBjaGlsZDEKLSAg
ICAgICAgICAgICAgICAgICAgJiYgbm9kZS5zdHJ1Y3R1cmVTZXQoKS5jb250YWluc09ubHkoc3Ry
dWN0dXJlKSkKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCkgPT0gY2hpbGQxCisg
ICAgICAgICAgICAgICAgICAgICYmIG5vZGUtPnN0cnVjdHVyZVNldCgpLmNvbnRhaW5zT25seShz
dHJ1Y3R1cmUpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGNhc2UgUHV0U3RydWN0
dXJlOgotICAgICAgICAgICAgICAgIEFTU0VSVChub2RlLnN0cnVjdHVyZVRyYW5zaXRpb25EYXRh
KCkucHJldmlvdXNTdHJ1Y3R1cmUgIT0gc3RydWN0dXJlKTsKKyAgICAgICAgICAgICAgICBBU1NF
UlQobm9kZS0+c3RydWN0dXJlVHJhbnNpdGlvbkRhdGEoKS5wcmV2aW91c1N0cnVjdHVyZSAhPSBz
dHJ1Y3R1cmUpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIAogICAg
ICAgICAgICAgY2FzZSBQdXRCeU9mZnNldDoKQEAgLTUyOSw3ICs1MjAsNyBAQCBwcml2YXRlOgog
ICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgY2FzZSBTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0
Y2hwb2ludDoKICAgICAgICAgICAgIGNhc2UgRm9yd2FyZFN0cnVjdHVyZVRyYW5zaXRpb25XYXRj
aHBvaW50OgotICAgICAgICAgICAgICAgIGlmIChub2RlLnN0cnVjdHVyZSgpID09IHN0cnVjdHVy
ZSAmJiBub2RlLmNoaWxkMSgpID09IGNoaWxkMSkKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+
c3RydWN0dXJlKCkgPT0gc3RydWN0dXJlICYmIG5vZGUtPmNoaWxkMSgpID09IGNoaWxkMSkKICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICAgICAgCkBAIC01NDAsNyArNTMxLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBkZWZhdWx0
OgotICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLmNsb2JiZXJzV29ybGQoaW5kZXgpKQorICAg
ICAgICAgICAgICAgIGlmIChtX2dyYXBoLmNsb2JiZXJzV29ybGQobm9kZSkpCiAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgIH0KQEAgLTU0OCwyOCArNTM5LDI3IEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICB9CiAgICAgCi0gICAgTm9kZUluZGV4IHB1dFN0cnVjdHVyZVN0b3JlRWxpbWluYXRp
b24oTm9kZUluZGV4IGNoaWxkMSkKKyAgICBOb2RlKiBwdXRTdHJ1Y3R1cmVTdG9yZUVsaW1pbmF0
aW9uKE5vZGUqIGNoaWxkMSkKICAgICB7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1faW5k
ZXhJbkJsb2NrOyBpLS07KSB7Ci0gICAgICAgICAgICBOb2RlSW5kZXggaW5kZXggPSBtX2N1cnJl
bnRCbG9jay0+YXQoaSk7Ci0gICAgICAgICAgICBpZiAoaW5kZXggPT0gY2hpbGQxKQorICAgICAg
ICAgICAgTm9kZSogbm9kZSA9IG1fY3VycmVudEJsb2NrLT5hdChpKTsKKyAgICAgICAgICAgIGlm
IChub2RlID09IGNoaWxkMSkKICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIE5v
ZGUmIG5vZGUgPSBtX2dyYXBoW2luZGV4XTsKLSAgICAgICAgICAgIGlmICghbm9kZS5zaG91bGRH
ZW5lcmF0ZSgpKQorICAgICAgICAgICAgaWYgKCFub2RlLT5zaG91bGRHZW5lcmF0ZSgpKQogICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgc3dpdGNoIChub2RlLm9wKCkpIHsK
KyAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewogICAgICAgICAgICAgY2FzZSBDaGVj
a1N0cnVjdHVyZToKICAgICAgICAgICAgIGNhc2UgRm9yd2FyZENoZWNrU3RydWN0dXJlOgogICAg
ICAgICAgICAgICAgIHJldHVybiBOb05vZGU7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAg
ICBjYXNlIFBoYW50b21QdXRTdHJ1Y3R1cmU6Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGUuY2hp
bGQxKCkgPT0gY2hpbGQxKSAvLyBObyBuZWVkIHRvIHJldHJhY2Ugb3VyIHN0ZXBzLgorICAgICAg
ICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKSA9PSBjaGlsZDEpIC8vIE5vIG5lZWQgdG8gcmV0
cmFjZSBvdXIgc3RlcHMuCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOb05vZGU7CiAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBjYXNlIFB1
dFN0cnVjdHVyZToKLSAgICAgICAgICAgICAgICBpZiAobm9kZS5jaGlsZDEoKSA9PSBjaGlsZDEp
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBpbmRleDsKKyAgICAgICAgICAgICAgICBpZiAo
bm9kZS0+Y2hpbGQxKCkgPT0gY2hpbGQxKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gbm9k
ZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAg
IC8vIFB1dFN0cnVjdHVyZSBuZWVkcyB0byBleGVjdXRlIGlmIHdlIEdDLiBIZW5jZSB0aGlzIG5l
ZWRzIHRvCkBAIC01OTEsNDQgKzU4MSw0MyBAQCBwcml2YXRlOgogICAgICAgICAgICAgY2FzZSBB
bGxvY2F0ZVByb3BlcnR5U3RvcmFnZToKICAgICAgICAgICAgIGNhc2UgUmVhbGxvY2F0ZVByb3Bl
cnR5U3RvcmFnZToKICAgICAgICAgICAgIGNhc2UgVHlwZU9mOgotICAgICAgICAgICAgICAgIHJl
dHVybiBOb05vZGU7CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgICAgICAg
CiAgICAgICAgICAgICBjYXNlIEdldEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2U6Ci0gICAgICAgICAg
ICAgICAgaWYgKG5vZGUuYXJyYXlNb2RlKCkuZ2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZU1heVRy
aWdnZXJHQygpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gTm9Ob2RlOworICAgICAgICAg
ICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS5nZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlTWF5
VHJpZ2dlckdDKCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgZGVmYXVsdDoKICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChtX2dyYXBo
LmNsb2JiZXJzV29ybGQoaW5kZXgpIHx8IG5vZGUuY2FuRXhpdCgpKQotICAgICAgICAgICAgICAg
IHJldHVybiBOb05vZGU7CisgICAgICAgICAgICBpZiAobV9ncmFwaC5jbG9iYmVyc1dvcmxkKG5v
ZGUpIHx8IG5vZGUtPmNhbkV4aXQoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAg
ICAgfQotICAgICAgICByZXR1cm4gTm9Ob2RlOworICAgICAgICByZXR1cm4gMDsKICAgICB9CiAg
ICAgCi0gICAgTm9kZUluZGV4IGdldEJ5T2Zmc2V0TG9hZEVsaW1pbmF0aW9uKHVuc2lnbmVkIGlk
ZW50aWZpZXJOdW1iZXIsIE5vZGVJbmRleCBjaGlsZDEpCisgICAgTm9kZSogZ2V0QnlPZmZzZXRM
b2FkRWxpbWluYXRpb24odW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgTm9kZSogY2hpbGQxKQog
ICAgIHsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9pbmRleEluQmxvY2s7IGktLTspIHsK
LSAgICAgICAgICAgIE5vZGVJbmRleCBpbmRleCA9IG1fY3VycmVudEJsb2NrLT5hdChpKTsKLSAg
ICAgICAgICAgIGlmIChpbmRleCA9PSBjaGlsZDEpCisgICAgICAgICAgICBOb2RlKiBub2RlID0g
bV9jdXJyZW50QmxvY2stPmF0KGkpOworICAgICAgICAgICAgaWYgKG5vZGUgPT0gY2hpbGQxKQog
ICAgICAgICAgICAgICAgIGJyZWFrOwogCi0gICAgICAgICAgICBOb2RlJiBub2RlID0gbV9ncmFw
aFtpbmRleF07Ci0gICAgICAgICAgICBpZiAoIW5vZGUuc2hvdWxkR2VuZXJhdGUoKSkKKyAgICAg
ICAgICAgIGlmICghbm9kZS0+c2hvdWxkR2VuZXJhdGUoKSkKICAgICAgICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgICAgIHN3aXRjaCAobm9kZS5vcCgpKSB7CisgICAgICAgICAgICBzd2l0
Y2ggKG5vZGUtPm9wKCkpIHsKICAgICAgICAgICAgIGNhc2UgR2V0QnlPZmZzZXQ6Ci0gICAgICAg
ICAgICAgICAgaWYgKG5vZGUuY2hpbGQxKCkgPT0gY2hpbGQxCi0gICAgICAgICAgICAgICAgICAg
ICYmIG1fZ3JhcGgubV9zdG9yYWdlQWNjZXNzRGF0YVtub2RlLnN0b3JhZ2VBY2Nlc3NEYXRhSW5k
ZXgoKV0uaWRlbnRpZmllck51bWJlciA9PSBpZGVudGlmaWVyTnVtYmVyKQotICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gaW5kZXg7CisgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgp
ID09IGNoaWxkMQorICAgICAgICAgICAgICAgICAgICAmJiBtX2dyYXBoLm1fc3RvcmFnZUFjY2Vz
c0RhdGFbbm9kZS0+c3RvcmFnZUFjY2Vzc0RhdGFJbmRleCgpXS5pZGVudGlmaWVyTnVtYmVyID09
IGlkZW50aWZpZXJOdW1iZXIpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBub2RlOwogICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgY2FzZSBQ
dXRCeU9mZnNldDoKLSAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC5tX3N0b3JhZ2VBY2Nlc3NE
YXRhW25vZGUuc3RvcmFnZUFjY2Vzc0RhdGFJbmRleCgpXS5pZGVudGlmaWVyTnVtYmVyID09IGlk
ZW50aWZpZXJOdW1iZXIpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUuY2hpbGQxKCkg
PT0gY2hpbGQxKSAvLyBNdXN0IGJlIHNhbWUgcHJvcGVydHkgc3RvcmFnZS4KLSAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBub2RlLmNoaWxkMygpLmluZGV4KCk7Ci0gICAgICAgICAgICAg
ICAgICAgIHJldHVybiBOb05vZGU7CisgICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGgubV9zdG9y
YWdlQWNjZXNzRGF0YVtub2RlLT5zdG9yYWdlQWNjZXNzRGF0YUluZGV4KCldLmlkZW50aWZpZXJO
dW1iZXIgPT0gaWRlbnRpZmllck51bWJlcikgeworICAgICAgICAgICAgICAgICAgICBpZiAobm9k
ZS0+Y2hpbGQxKCkgPT0gY2hpbGQxKSAvLyBNdXN0IGJlIHNhbWUgcHJvcGVydHkgc3RvcmFnZS4K
KyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBub2RlLT5jaGlsZDMoKS5ub2RlKCk7Cisg
ICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAKQEAgLTY0NCwzOCArNjMzLDM3IEBAIHBy
aXZhdGU6CiAgICAgICAgICAgICAgICAgICAgIC8vIGNoYW5nZS4KICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHJldHVybiBOb05v
ZGU7CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgICAgICAgCiAgICAgICAg
ICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLmNsb2JiZXJzV29ybGQo
aW5kZXgpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gTm9Ob2RlOworICAgICAgICAgICAg
ICAgIGlmIChtX2dyYXBoLmNsb2JiZXJzV29ybGQobm9kZSkpCisgICAgICAgICAgICAgICAgICAg
IHJldHVybiAwOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAg
ICB9Ci0gICAgICAgIHJldHVybiBOb05vZGU7CisgICAgICAgIHJldHVybiAwOwogICAgIH0KICAg
ICAKLSAgICBOb2RlSW5kZXggcHV0QnlPZmZzZXRTdG9yZUVsaW1pbmF0aW9uKHVuc2lnbmVkIGlk
ZW50aWZpZXJOdW1iZXIsIE5vZGVJbmRleCBjaGlsZDEpCisgICAgTm9kZSogcHV0QnlPZmZzZXRT
dG9yZUVsaW1pbmF0aW9uKHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIE5vZGUqIGNoaWxkMSkK
ICAgICB7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1faW5kZXhJbkJsb2NrOyBpLS07KSB7
Ci0gICAgICAgICAgICBOb2RlSW5kZXggaW5kZXggPSBtX2N1cnJlbnRCbG9jay0+YXQoaSk7Ci0g
ICAgICAgICAgICBpZiAoaW5kZXggPT0gY2hpbGQxKQorICAgICAgICAgICAgTm9kZSogbm9kZSA9
IG1fY3VycmVudEJsb2NrLT5hdChpKTsKKyAgICAgICAgICAgIGlmIChub2RlID09IGNoaWxkMSkK
ICAgICAgICAgICAgICAgICBicmVhazsKIAotICAgICAgICAgICAgTm9kZSYgbm9kZSA9IG1fZ3Jh
cGhbaW5kZXhdOwotICAgICAgICAgICAgaWYgKCFub2RlLnNob3VsZEdlbmVyYXRlKCkpCisgICAg
ICAgICAgICBpZiAoIW5vZGUtPnNob3VsZEdlbmVyYXRlKCkpCiAgICAgICAgICAgICAgICAgY29u
dGludWU7Ci0gICAgICAgICAgICBzd2l0Y2ggKG5vZGUub3AoKSkgeworICAgICAgICAgICAgc3dp
dGNoIChub2RlLT5vcCgpKSB7CiAgICAgICAgICAgICBjYXNlIEdldEJ5T2Zmc2V0OgotICAgICAg
ICAgICAgICAgIGlmIChtX2dyYXBoLm1fc3RvcmFnZUFjY2Vzc0RhdGFbbm9kZS5zdG9yYWdlQWNj
ZXNzRGF0YUluZGV4KCldLmlkZW50aWZpZXJOdW1iZXIgPT0gaWRlbnRpZmllck51bWJlcikKLSAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIE5vTm9kZTsKKyAgICAgICAgICAgICAgICBpZiAobV9n
cmFwaC5tX3N0b3JhZ2VBY2Nlc3NEYXRhW25vZGUtPnN0b3JhZ2VBY2Nlc3NEYXRhSW5kZXgoKV0u
aWRlbnRpZmllck51bWJlciA9PSBpZGVudGlmaWVyTnVtYmVyKQorICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gMDsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAKICAg
ICAgICAgICAgIGNhc2UgUHV0QnlPZmZzZXQ6Ci0gICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGgu
bV9zdG9yYWdlQWNjZXNzRGF0YVtub2RlLnN0b3JhZ2VBY2Nlc3NEYXRhSW5kZXgoKV0uaWRlbnRp
Zmllck51bWJlciA9PSBpZGVudGlmaWVyTnVtYmVyKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlm
IChub2RlLmNoaWxkMSgpID09IGNoaWxkMSkgLy8gTXVzdCBiZSBzYW1lIHByb3BlcnR5IHN0b3Jh
Z2UuCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW5kZXg7Ci0gICAgICAgICAgICAg
ICAgICAgIHJldHVybiBOb05vZGU7CisgICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGgubV9zdG9y
YWdlQWNjZXNzRGF0YVtub2RlLT5zdG9yYWdlQWNjZXNzRGF0YUluZGV4KCldLmlkZW50aWZpZXJO
dW1iZXIgPT0gaWRlbnRpZmllck51bWJlcikgeworICAgICAgICAgICAgICAgICAgICBpZiAobm9k
ZS0+Y2hpbGQxKCkgPT0gY2hpbGQxKSAvLyBNdXN0IGJlIHNhbWUgcHJvcGVydHkgc3RvcmFnZS4K
KyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBub2RlOworICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gMDsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICAgICAgCkBAIC02ODgsNDUgKzY3Niw0NCBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgICAgICAgICAvLyBjaGFuZ2UuCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICByZXR1cm4gTm9Ob2RlOworICAgICAgICAgICAg
ICAgIHJldHVybiAwOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgZGVmYXVsdDoKLSAg
ICAgICAgICAgICAgICBpZiAobV9ncmFwaC5jbG9iYmVyc1dvcmxkKGluZGV4KSkKLSAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIE5vTm9kZTsKKyAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC5j
bG9iYmVyc1dvcmxkKG5vZGUpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChub2RlLmNh
bkV4aXQoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gTm9Ob2RlOworICAgICAgICAgICAgaWYg
KG5vZGUtPmNhbkV4aXQoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgfQot
ICAgICAgICByZXR1cm4gTm9Ob2RlOworICAgICAgICByZXR1cm4gMDsKICAgICB9CiAgICAgCi0g
ICAgTm9kZUluZGV4IGdldFByb3BlcnR5U3RvcmFnZUxvYWRFbGltaW5hdGlvbihOb2RlSW5kZXgg
Y2hpbGQxKQorICAgIE5vZGUqIGdldFByb3BlcnR5U3RvcmFnZUxvYWRFbGltaW5hdGlvbihOb2Rl
KiBjaGlsZDEpCiAgICAgewogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2luZGV4SW5CbG9j
azsgaS0tOykgewotICAgICAgICAgICAgTm9kZUluZGV4IGluZGV4ID0gbV9jdXJyZW50QmxvY2st
PmF0KGkpOwotICAgICAgICAgICAgaWYgKGluZGV4ID09IGNoaWxkMSkgCisgICAgICAgICAgICBO
b2RlKiBub2RlID0gbV9jdXJyZW50QmxvY2stPmF0KGkpOworICAgICAgICAgICAgaWYgKG5vZGUg
PT0gY2hpbGQxKSAKICAgICAgICAgICAgICAgICBicmVhazsKIAotICAgICAgICAgICAgTm9kZSYg
bm9kZSA9IG1fZ3JhcGhbaW5kZXhdOwotICAgICAgICAgICAgaWYgKCFub2RlLnNob3VsZEdlbmVy
YXRlKCkpCisgICAgICAgICAgICBpZiAoIW5vZGUtPnNob3VsZEdlbmVyYXRlKCkpCiAgICAgICAg
ICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBzd2l0Y2ggKG5vZGUub3AoKSkgeworICAg
ICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CiAgICAgICAgICAgICBjYXNlIEdldEJ1dHRl
cmZseToKLSAgICAgICAgICAgICAgICBpZiAobm9kZS5jaGlsZDEoKSA9PSBjaGlsZDEpCi0gICAg
ICAgICAgICAgICAgICAgIHJldHVybiBpbmRleDsKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+
Y2hpbGQxKCkgPT0gY2hpbGQxKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gbm9kZTsKICAg
ICAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICAgICAgY2FzZSBBbGxvY2F0ZVByb3BlcnR5
U3RvcmFnZToKICAgICAgICAgICAgIGNhc2UgUmVhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZToKICAg
ICAgICAgICAgICAgICAvLyBJZiB3ZSBjYW4gY2hlYXBseSBwcm92ZSB0aGlzIGlzIGEgY2hhbmdl
IHRvIG91ciBvYmplY3QncyBzdG9yYWdlLCB3ZQogICAgICAgICAgICAgICAgIC8vIGNhbiBvcHRp
bWl6ZSBhbmQgdXNlIGl0cyByZXN1bHQuCi0gICAgICAgICAgICAgICAgaWYgKG5vZGUuY2hpbGQx
KCkgPT0gY2hpbGQxKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW5kZXg7CisgICAgICAg
ICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpID09IGNoaWxkMSkKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIG5vZGU7CiAgICAgICAgICAgICAgICAgLy8gT3RoZXJ3aXNlLCB3ZSBjdXJyZW50
bHkgY2FuJ3QgcHJvdmUgdGhhdCB0aGlzIGRvZXNuJ3QgY2hhbmdlIG91ciBvYmplY3QncwogICAg
ICAgICAgICAgICAgIC8vIHN0b3JhZ2UsIHNvIHdlIGNvbnNlcnZhdGl2ZWx5IGFzc3VtZSB0aGF0
IGl0IG1heSBjaGFuZ2UgdGhlIHN0b3JhZ2UKICAgICAgICAgICAgICAgICAvLyBwb2ludGVyIG9m
IGFueSBvYmplY3QsIGluY2x1ZGluZyBvdXJzLgotICAgICAgICAgICAgICAgIHJldHVybiBOb05v
ZGU7CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgICAgICAgCiAgICAgICAg
ICAgICBjYXNlIFB1dEJ5T2Zmc2V0OgogICAgICAgICAgICAgY2FzZSBQdXRTdHJ1Y3R1cmU6CkBA
IC03NDIsMzQgKzcyOSwzMyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICAvLyBjaGFu
Z2UuCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICByZXR1cm4gTm9Ob2RlOworICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAg
ICAgICAgICAgICAgIAogICAgICAgICAgICAgY2FzZSBBcnJheWlmeToKICAgICAgICAgICAgIGNh
c2UgQXJyYXlpZnlUb1N0cnVjdHVyZToKICAgICAgICAgICAgICAgICAvLyBXZSBjb3VsZCBjaGVj
ayBpZiB0aGUgYXJyYXlpZmljYXRpb24gY291bGQgYWZmZWN0IG91ciBidXR0ZXJmbHkuCiAgICAg
ICAgICAgICAgICAgLy8gQnV0IHRoYXQgc2VlbXMgbGlrZSBpdCB3b3VsZCB0YWtlIEVmZm9ydC4K
LSAgICAgICAgICAgICAgICByZXR1cm4gTm9Ob2RlOworICAgICAgICAgICAgICAgIHJldHVybiAw
OwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAg
ICBpZiAobV9ncmFwaC5jbG9iYmVyc1dvcmxkKGluZGV4KSkKLSAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIE5vTm9kZTsKKyAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC5jbG9iYmVyc1dvcmxk
KG5vZGUpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICByZXR1cm4gTm9Ob2RlOwor
ICAgICAgICByZXR1cm4gMDsKICAgICB9CiAgICAgCi0gICAgYm9vbCBjaGVja0FycmF5RWxpbWlu
YXRpb24oTm9kZUluZGV4IGNoaWxkMSwgQXJyYXlNb2RlIGFycmF5TW9kZSkKKyAgICBib29sIGNo
ZWNrQXJyYXlFbGltaW5hdGlvbihOb2RlKiBjaGlsZDEsIEFycmF5TW9kZSBhcnJheU1vZGUpCiAg
ICAgewogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2luZGV4SW5CbG9jazsgaS0tOykgewot
ICAgICAgICAgICAgTm9kZUluZGV4IGluZGV4ID0gbV9jdXJyZW50QmxvY2stPmF0KGkpOwotICAg
ICAgICAgICAgaWYgKGluZGV4ID09IGNoaWxkMSkgCisgICAgICAgICAgICBOb2RlKiBub2RlID0g
bV9jdXJyZW50QmxvY2stPmF0KGkpOworICAgICAgICAgICAgaWYgKG5vZGUgPT0gY2hpbGQxKSAK
ICAgICAgICAgICAgICAgICBicmVhazsKIAotICAgICAgICAgICAgTm9kZSYgbm9kZSA9IG1fZ3Jh
cGhbaW5kZXhdOwotICAgICAgICAgICAgaWYgKCFub2RlLnNob3VsZEdlbmVyYXRlKCkpCisgICAg
ICAgICAgICBpZiAoIW5vZGUtPnNob3VsZEdlbmVyYXRlKCkpCiAgICAgICAgICAgICAgICAgY29u
dGludWU7Ci0gICAgICAgICAgICBzd2l0Y2ggKG5vZGUub3AoKSkgeworICAgICAgICAgICAgc3dp
dGNoIChub2RlLT5vcCgpKSB7CiAgICAgICAgICAgICBjYXNlIFB1dEJ5T2Zmc2V0OgogICAgICAg
ICAgICAgY2FzZSBQdXRTdHJ1Y3R1cmU6CiAgICAgICAgICAgICAgICAgLy8gQ2hhbmdpbmcgdGhl
IHN0cnVjdHVyZSBvciBwdXR0aW5nIHRvIHRoZSBzdG9yYWdlIGNhbm5vdApAQCAtNzc3LDcgKzc2
Myw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAg
CiAgICAgICAgICAgICBjYXNlIENoZWNrQXJyYXk6Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGUu
Y2hpbGQxKCkgPT0gY2hpbGQxICYmIG5vZGUuYXJyYXlNb2RlKCkgPT0gYXJyYXlNb2RlKQorICAg
ICAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKSA9PSBjaGlsZDEgJiYgbm9kZS0+YXJyYXlN
b2RlKCkgPT0gYXJyYXlNb2RlKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAKQEAgLTc4OCw3ICs3NzQsNyBA
QCBwcml2YXRlOgogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgICAg
ICAKICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGguY2xv
YmJlcnNXb3JsZChpbmRleCkpCisgICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGguY2xvYmJlcnNX
b3JsZChub2RlKSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQpAQCAtNzk2LDIwICs3ODIsMTkgQEAgcHJpdmF0
ZToKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIE5vZGVJbmRleCBnZXRJbmRl
eGVkUHJvcGVydHlTdG9yYWdlTG9hZEVsaW1pbmF0aW9uKE5vZGVJbmRleCBjaGlsZDEsIEFycmF5
TW9kZSBhcnJheU1vZGUpCisgICAgTm9kZSogZ2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZUxvYWRF
bGltaW5hdGlvbihOb2RlKiBjaGlsZDEsIEFycmF5TW9kZSBhcnJheU1vZGUpCiAgICAgewogICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2luZGV4SW5CbG9jazsgaS0tOykgewotICAgICAgICAg
ICAgTm9kZUluZGV4IGluZGV4ID0gbV9jdXJyZW50QmxvY2stPmF0KGkpOwotICAgICAgICAgICAg
aWYgKGluZGV4ID09IGNoaWxkMSkgCisgICAgICAgICAgICBOb2RlKiBub2RlID0gbV9jdXJyZW50
QmxvY2stPmF0KGkpOworICAgICAgICAgICAgaWYgKG5vZGUgPT0gY2hpbGQxKSAKICAgICAgICAg
ICAgICAgICBicmVhazsKIAotICAgICAgICAgICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhbaW5kZXhd
OwotICAgICAgICAgICAgaWYgKCFub2RlLnNob3VsZEdlbmVyYXRlKCkpCisgICAgICAgICAgICBp
ZiAoIW5vZGUtPnNob3VsZEdlbmVyYXRlKCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7Ci0g
ICAgICAgICAgICBzd2l0Y2ggKG5vZGUub3AoKSkgeworICAgICAgICAgICAgc3dpdGNoIChub2Rl
LT5vcCgpKSB7CiAgICAgICAgICAgICBjYXNlIEdldEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2U6IHsK
LSAgICAgICAgICAgICAgICBpZiAobm9kZS5jaGlsZDEoKSA9PSBjaGlsZDEgJiYgbm9kZS5hcnJh
eU1vZGUoKSA9PSBhcnJheU1vZGUpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBpbmRleDsK
KyAgICAgICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCkgPT0gY2hpbGQxICYmIG5vZGUtPmFy
cmF5TW9kZSgpID09IGFycmF5TW9kZSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGU7
CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAKQEAgLTgyMCw4MSArODA1
LDc5IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAg
CiAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLmNsb2Ji
ZXJzV29ybGQoaW5kZXgpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gTm9Ob2RlOworICAg
ICAgICAgICAgICAgIGlmIChtX2dyYXBoLmNsb2JiZXJzV29ybGQobm9kZSkpCisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
fQogICAgICAgICB9Ci0gICAgICAgIHJldHVybiBOb05vZGU7CisgICAgICAgIHJldHVybiAwOwog
ICAgIH0KICAgICAKLSAgICBOb2RlSW5kZXggZ2V0TXlTY29wZUxvYWRFbGltaW5hdGlvbihJbmxp
bmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSkKKyAgICBOb2RlKiBnZXRNeVNjb3BlTG9hZEVs
aW1pbmF0aW9uKElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lKQogICAgIHsKICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gbV9pbmRleEluQmxvY2s7IGktLTspIHsKLSAgICAgICAgICAg
IE5vZGVJbmRleCBpbmRleCA9IG1fY3VycmVudEJsb2NrLT5hdChpKTsKLSAgICAgICAgICAgIE5v
ZGUmIG5vZGUgPSBtX2dyYXBoW2luZGV4XTsKLSAgICAgICAgICAgIGlmICghbm9kZS5zaG91bGRH
ZW5lcmF0ZSgpKQorICAgICAgICAgICAgTm9kZSogbm9kZSA9IG1fY3VycmVudEJsb2NrLT5hdChp
KTsKKyAgICAgICAgICAgIGlmICghbm9kZS0+c2hvdWxkR2VuZXJhdGUoKSkKICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGlmIChub2RlLmNvZGVPcmlnaW4uaW5saW5lQ2Fs
bEZyYW1lICE9IGlubGluZUNhbGxGcmFtZSkKKyAgICAgICAgICAgIGlmIChub2RlLT5jb2RlT3Jp
Z2luLmlubGluZUNhbGxGcmFtZSAhPSBpbmxpbmVDYWxsRnJhbWUpCiAgICAgICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgICAgICBzd2l0Y2ggKG5vZGUub3AoKSkgeworICAgICAgICAgICAg
c3dpdGNoIChub2RlLT5vcCgpKSB7CiAgICAgICAgICAgICBjYXNlIENyZWF0ZUFjdGl2YXRpb246
CiAgICAgICAgICAgICAgICAgLy8gVGhpcyBtYXkgY2F1c2UgdXMgdG8gcmV0dXJuIGEgZGlmZmVy
ZW50IHNjb3BlLgotICAgICAgICAgICAgICAgIHJldHVybiBOb05vZGU7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIDA7CiAgICAgICAgICAgICBjYXNlIEdldE15U2NvcGU6Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuIGluZGV4OworICAgICAgICAgICAgICAgIHJldHVybiBub2RlOwogICAgICAgICAg
ICAgY2FzZSBTZXRNeVNjb3BlOgotICAgICAgICAgICAgICAgIHJldHVybiBub2RlLmNoaWxkMSgp
LmluZGV4KCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsK
ICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICB9CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIE5vTm9kZTsKKyAgICAgICAgcmV0dXJuIDA7
CiAgICAgfQogICAgIAotICAgIE5vZGVJbmRleCBnZXRMb2NhbExvYWRFbGltaW5hdGlvbihWaXJ0
dWFsUmVnaXN0ZXIgbG9jYWwsIE5vZGVJbmRleCYgcmVsZXZhbnRMb2NhbE9wLCBib29sIGNhcmVB
Ym91dENsb2JiZXJpbmcpCisgICAgTm9kZSogZ2V0TG9jYWxMb2FkRWxpbWluYXRpb24oVmlydHVh
bFJlZ2lzdGVyIGxvY2FsLCBOb2RlKiYgcmVsZXZhbnRMb2NhbE9wLCBib29sIGNhcmVBYm91dENs
b2JiZXJpbmcpCiAgICAgewotICAgICAgICByZWxldmFudExvY2FsT3AgPSBOb05vZGU7CisgICAg
ICAgIHJlbGV2YW50TG9jYWxPcCA9IDA7CiAgICAgICAgIAogICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSBtX2luZGV4SW5CbG9jazsgaS0tOykgewotICAgICAgICAgICAgTm9kZUluZGV4IGluZGV4
ID0gbV9jdXJyZW50QmxvY2stPmF0KGkpOwotICAgICAgICAgICAgTm9kZSYgbm9kZSA9IG1fZ3Jh
cGhbaW5kZXhdOwotICAgICAgICAgICAgaWYgKCFub2RlLnNob3VsZEdlbmVyYXRlKCkpCisgICAg
ICAgICAgICBOb2RlKiBub2RlID0gbV9jdXJyZW50QmxvY2stPmF0KGkpOworICAgICAgICAgICAg
aWYgKCFub2RlLT5zaG91bGRHZW5lcmF0ZSgpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwot
ICAgICAgICAgICAgc3dpdGNoIChub2RlLm9wKCkpIHsKKyAgICAgICAgICAgIHN3aXRjaCAobm9k
ZS0+b3AoKSkgewogICAgICAgICAgICAgY2FzZSBHZXRMb2NhbDoKLSAgICAgICAgICAgICAgICBp
ZiAobm9kZS5sb2NhbCgpID09IGxvY2FsKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJlbGV2YW50
TG9jYWxPcCA9IGluZGV4OwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW5kZXg7CisgICAg
ICAgICAgICAgICAgaWYgKG5vZGUtPmxvY2FsKCkgPT0gbG9jYWwpIHsKKyAgICAgICAgICAgICAg
ICAgICAgcmVsZXZhbnRMb2NhbE9wID0gbm9kZTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IG5vZGU7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgICAgIAogICAgICAgICAgICAgY2FzZSBHZXRMb2NhbFVubGlua2VkOgotICAgICAgICAg
ICAgICAgIGlmIChub2RlLnVubGlua2VkTG9jYWwoKSA9PSBsb2NhbCkgewotICAgICAgICAgICAg
ICAgICAgICByZWxldmFudExvY2FsT3AgPSBpbmRleDsKLSAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGluZGV4OworICAgICAgICAgICAgICAgIGlmIChub2RlLT51bmxpbmtlZExvY2FsKCkgPT0g
bG9jYWwpIHsKKyAgICAgICAgICAgICAgICAgICAgcmVsZXZhbnRMb2NhbE9wID0gbm9kZTsKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGU7CiAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgY2FzZSBTZXRM
b2NhbDoKLSAgICAgICAgICAgICAgICBpZiAobm9kZS5sb2NhbCgpID09IGxvY2FsKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIHJlbGV2YW50TG9jYWxPcCA9IGluZGV4OwotICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gbm9kZS5jaGlsZDEoKS5pbmRleCgpOworICAgICAgICAgICAgICAgIGlmIChu
b2RlLT5sb2NhbCgpID09IGxvY2FsKSB7CisgICAgICAgICAgICAgICAgICAgIHJlbGV2YW50TG9j
YWxPcCA9IG5vZGU7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBub2RlLT5jaGlsZDEoKS5u
b2RlKCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgICAgIAogICAgICAgICAgICAgY2FzZSBQdXRTY29wZWRWYXI6Ci0gICAgICAgICAgICAg
ICAgaWYgKHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4obm9kZS52YXJOdW1iZXIoKSkgPT0g
bG9jYWwpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBOb05vZGU7CisgICAgICAgICAgICAg
ICAgaWYgKHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4obm9kZS0+dmFyTnVtYmVyKCkpID09
IGxvY2FsKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAg
ICAgICAgaWYgKGNhcmVBYm91dENsb2JiZXJpbmcgJiYgbV9ncmFwaC5jbG9iYmVyc1dvcmxkKGlu
ZGV4KSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5vTm9kZTsKKyAgICAgICAgICAgICAg
ICBpZiAoY2FyZUFib3V0Q2xvYmJlcmluZyAmJiBtX2dyYXBoLmNsb2JiZXJzV29ybGQobm9kZSkp
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIHJldHVybiBOb05vZGU7CisgICAgICAg
IHJldHVybiAwOwogICAgIH0KICAgICAKICAgICBzdHJ1Y3QgU2V0TG9jYWxTdG9yZUVsaW1pbmF0
aW9uUmVzdWx0IHsKQEAgLTkxMCw1MSArODkzLDUwIEBAIHByaXZhdGU6CiAgICAgICAgIGJvb2wg
bWF5Q2xvYmJlcldvcmxkOwogICAgIH07CiAgICAgU2V0TG9jYWxTdG9yZUVsaW1pbmF0aW9uUmVz
dWx0IHNldExvY2FsU3RvcmVFbGltaW5hdGlvbigKLSAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGxv
Y2FsLCBOb2RlSW5kZXggZXhwZWN0ZWROb2RlSW5kZXgpCisgICAgICAgIFZpcnR1YWxSZWdpc3Rl
ciBsb2NhbCwgTm9kZSogZXhwZWN0ZWROb2RlSW5kZXgpCiAgICAgewogICAgICAgICBTZXRMb2Nh
bFN0b3JlRWxpbWluYXRpb25SZXN1bHQgcmVzdWx0OwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSBtX2luZGV4SW5CbG9jazsgaS0tOykgewotICAgICAgICAgICAgTm9kZUluZGV4IGluZGV4ID0g
bV9jdXJyZW50QmxvY2stPmF0KGkpOwotICAgICAgICAgICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhb
aW5kZXhdOwotICAgICAgICAgICAgaWYgKCFub2RlLnNob3VsZEdlbmVyYXRlKCkpCisgICAgICAg
ICAgICBOb2RlKiBub2RlID0gbV9jdXJyZW50QmxvY2stPmF0KGkpOworICAgICAgICAgICAgaWYg
KCFub2RlLT5zaG91bGRHZW5lcmF0ZSgpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAg
ICAgICAgICAgc3dpdGNoIChub2RlLm9wKCkpIHsKKyAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+
b3AoKSkgewogICAgICAgICAgICAgY2FzZSBHZXRMb2NhbDoKICAgICAgICAgICAgIGNhc2UgRmx1
c2g6Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGUubG9jYWwoKSA9PSBsb2NhbCkKKyAgICAgICAg
ICAgICAgICBpZiAobm9kZS0+bG9jYWwoKSA9PSBsb2NhbCkKICAgICAgICAgICAgICAgICAgICAg
cmVzdWx0Lm1heUJlQWNjZXNzZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgICAgIAogICAgICAgICAgICAgY2FzZSBHZXRMb2NhbFVubGlua2VkOgotICAgICAg
ICAgICAgICAgIGlmIChub2RlLnVubGlua2VkTG9jYWwoKSA9PSBsb2NhbCkKKyAgICAgICAgICAg
ICAgICBpZiAobm9kZS0+dW5saW5rZWRMb2NhbCgpID09IGxvY2FsKQogICAgICAgICAgICAgICAg
ICAgICByZXN1bHQubWF5QmVBY2Nlc3NlZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBjYXNlIFNldExvY2FsOiB7Ci0gICAgICAg
ICAgICAgICAgaWYgKG5vZGUubG9jYWwoKSAhPSBsb2NhbCkKKyAgICAgICAgICAgICAgICBpZiAo
bm9kZS0+bG9jYWwoKSAhPSBsb2NhbCkKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICAgICAgaWYgKGluZGV4ICE9IGV4cGVjdGVkTm9kZUluZGV4KQogICAgICAgICAgICAg
ICAgICAgICByZXN1bHQubWF5QmVBY2Nlc3NlZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgaWYg
KG1fZ3JhcGhbaW5kZXhdLnJlZkNvdW50KCkgPiAxKQorICAgICAgICAgICAgICAgIGlmIChub2Rl
LT5yZWZDb3VudCgpID4gMSkKICAgICAgICAgICAgICAgICAgICAgcmVzdWx0Lm1heUJlQWNjZXNz
ZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBjYXNlIEdldFNjb3BlZFZhcjoKLSAgICAg
ICAgICAgICAgICBpZiAoc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihub2RlLnZhck51bWJl
cigpKSA9PSBsb2NhbCkKKyAgICAgICAgICAgICAgICBpZiAoc3RhdGljX2Nhc3Q8VmlydHVhbFJl
Z2lzdGVyPihub2RlLT52YXJOdW1iZXIoKSkgPT0gbG9jYWwpCiAgICAgICAgICAgICAgICAgICAg
IHJlc3VsdC5tYXlCZUFjY2Vzc2VkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgICAgICAKICAgICAgICAgICAgIGNhc2UgR2V0TXlTY29wZToKICAgICAgICAgICAg
IGNhc2UgU2tpcFRvcFNjb3BlOgotICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLnVuY2hlY2tl
ZEFjdGl2YXRpb25SZWdpc3RlckZvcihub2RlLmNvZGVPcmlnaW4pID09IGxvY2FsKQorICAgICAg
ICAgICAgICAgIGlmIChtX2dyYXBoLnVuY2hlY2tlZEFjdGl2YXRpb25SZWdpc3RlckZvcihub2Rl
LT5jb2RlT3JpZ2luKSA9PSBsb2NhbCkKICAgICAgICAgICAgICAgICAgICAgcmVzdWx0Lm1heUJl
QWNjZXNzZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAg
IAogICAgICAgICAgICAgY2FzZSBDaGVja0FyZ3VtZW50c05vdENyZWF0ZWQ6CiAgICAgICAgICAg
ICBjYXNlIEdldE15QXJndW1lbnRzTGVuZ3RoOgogICAgICAgICAgICAgY2FzZSBHZXRNeUFyZ3Vt
ZW50c0xlbmd0aFNhZmU6Ci0gICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGgudW5jaGVja2VkQXJn
dW1lbnRzUmVnaXN0ZXJGb3Iobm9kZS5jb2RlT3JpZ2luKSA9PSBsb2NhbCkKKyAgICAgICAgICAg
ICAgICBpZiAobV9ncmFwaC51bmNoZWNrZWRBcmd1bWVudHNSZWdpc3RlckZvcihub2RlLT5jb2Rl
T3JpZ2luKSA9PSBsb2NhbCkKICAgICAgICAgICAgICAgICAgICAgcmVzdWx0Lm1heUJlQWNjZXNz
ZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIApAQCAt
OTY1LDcgKzk0Nyw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBj
YXNlIEdldEJ5VmFsOgogICAgICAgICAgICAgICAgIC8vIElmIHRoaXMgaXMgYWNjZXNzaW5nIGFy
Z3VtZW50cyB0aGVuIGl0J3MgcG90ZW50aWFsbHkgYWNjZXNzaW5nIGxvY2Fscy4KLSAgICAgICAg
ICAgICAgICBpZiAobV9ncmFwaFtub2RlLmNoaWxkMSgpXS5zaG91bGRTcGVjdWxhdGVBcmd1bWVu
dHMoKSkKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0
ZUFyZ3VtZW50cygpKQogICAgICAgICAgICAgICAgICAgICByZXN1bHQubWF5QmVBY2Nlc3NlZCA9
IHRydWU7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgCkBAIC05ODIs
OCArOTY0LDggQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXN1bHQubWF5RXhpdCB8PSBu
b2RlLmNhbkV4aXQoKTsKLSAgICAgICAgICAgIHJlc3VsdC5tYXlDbG9iYmVyV29ybGQgfD0gbV9n
cmFwaC5jbG9iYmVyc1dvcmxkKGluZGV4KTsKKyAgICAgICAgICAgIHJlc3VsdC5tYXlFeGl0IHw9
IG5vZGUtPmNhbkV4aXQoKTsKKyAgICAgICAgICAgIHJlc3VsdC5tYXlDbG9iYmVyV29ybGQgfD0g
bV9ncmFwaC5jbG9iYmVyc1dvcmxkKG5vZGUpOwogICAgICAgICB9CiAgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwogICAgICAgICAvLyBCZSBzYWZlIGluIHJlbGVhc2UgbW9kZS4KQEAgLTk5
OCw2MiArOTgwLDYxIEBAIHByaXZhdGU6CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIAog
ICAgICAgICAvLyBDaGVjayBpZiB0aGVyZSBpcyBhbnkgcmVwbGFjZW1lbnQuCi0gICAgICAgIE5v
ZGVJbmRleCByZXBsYWNlbWVudCA9IG1fZ3JhcGhbY2hpbGQuaW5kZXgoKV0ucmVwbGFjZW1lbnQ7
Ci0gICAgICAgIGlmIChyZXBsYWNlbWVudCA9PSBOb05vZGUpCisgICAgICAgIE5vZGUqIHJlcGxh
Y2VtZW50ID0gY2hpbGQtPnJlcGxhY2VtZW50OworICAgICAgICBpZiAoIXJlcGxhY2VtZW50KQog
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAKLSAgICAgICAgY2hpbGQuc2V0SW5kZXgocmVw
bGFjZW1lbnQpOworICAgICAgICBjaGlsZC5zZXROb2RlKHJlcGxhY2VtZW50KTsKICAgICAgICAg
CiAgICAgICAgIC8vIFRoZXJlIGlzIGRlZmluaXRlbHkgYSByZXBsYWNlbWVudC4gQXNzZXJ0IHRo
YXQgdGhlIHJlcGxhY2VtZW50IGRvZXMgbm90CiAgICAgICAgIC8vIGhhdmUgYSByZXBsYWNlbWVu
dC4KLSAgICAgICAgQVNTRVJUKG1fZ3JhcGhbY2hpbGQuaW5kZXgoKV0ucmVwbGFjZW1lbnQgPT0g
Tm9Ob2RlKTsKKyAgICAgICAgQVNTRVJUKCFjaGlsZC0+cmVwbGFjZW1lbnQpOwogICAgICAgICAK
ICAgICAgICAgaWYgKGFkZFJlZikKICAgICAgICAgICAgIG1fZ3JhcGgucmVmKGNoaWxkKTsKICAg
ICB9CiAgICAgCi0gICAgdm9pZCBlbGltaW5hdGVJcnJlbGV2YW50UGhhbnRvbUNoaWxkcmVuKE5v
ZGUmIG5vZGUpCisgICAgdm9pZCBlbGltaW5hdGVJcnJlbGV2YW50UGhhbnRvbUNoaWxkcmVuKE5v
ZGUqIG5vZGUpCiAgICAgewotICAgICAgICBBU1NFUlQobm9kZS5vcCgpID09IFBoYW50b20pOwor
ICAgICAgICBBU1NFUlQobm9kZS0+b3AoKSA9PSBQaGFudG9tKTsKICAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IEFkamFjZW5jeUxpc3Q6OlNpemU7ICsraSkgewotICAgICAgICAgICAg
RWRnZSBlZGdlID0gbm9kZS5jaGlsZHJlbi5jaGlsZChpKTsKKyAgICAgICAgICAgIEVkZ2UgZWRn
ZSA9IG5vZGUtPmNoaWxkcmVuLmNoaWxkKGkpOwogICAgICAgICAgICAgaWYgKCFlZGdlKQogICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgaWYgKG1fZ3JhcGhbZWRnZV0uZmxh
Z3MoKSAmIE5vZGVSZWxldmFudFRvT1NSKQorICAgICAgICAgICAgaWYgKGVkZ2UtPmZsYWdzKCkg
JiBOb2RlUmVsZXZhbnRUb09TUikKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAg
ICAgIAogI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKLSAgICAgICAg
ICAgIGRhdGFMb2coIiAgIEVsaW1pbmF0aW5nIGVkZ2UgQCIsIG1fY29tcGlsZUluZGV4LCAiIC0+
IEAiLCBlZGdlLmluZGV4KCkpOworICAgICAgICAgICAgZGF0YUxvZygiICAgRWxpbWluYXRpbmcg
ZWRnZSBAIiwgbV9jdXJyZW50Tm9kZS0+aW5kZXgoKSwgIiAtPiBAIiwgZWRnZS0+aW5kZXgoKSk7
CiAjZW5kaWYKICAgICAgICAgICAgIG1fZ3JhcGguZGVyZWYoZWRnZSk7Ci0gICAgICAgICAgICBu
b2RlLmNoaWxkcmVuLnJlbW92ZUVkZ2VGcm9tQmFnKGktLSk7CisgICAgICAgICAgICBub2RlLT5j
aGlsZHJlbi5yZW1vdmVFZGdlRnJvbUJhZyhpLS0pOwogICAgICAgICAgICAgbV9jaGFuZ2VkID0g
dHJ1ZTsKICAgICAgICAgfQogICAgIH0KICAgICAKICAgICBlbnVtIFByZWRpY3Rpb25IYW5kbGlu
Z01vZGUgeyBSZXF1aXJlU2FtZVByZWRpY3Rpb24sIEFsbG93UHJlZGljdGlvbk1pc21hdGNoIH07
Ci0gICAgYm9vbCBzZXRSZXBsYWNlbWVudChOb2RlSW5kZXggcmVwbGFjZW1lbnQsIFByZWRpY3Rp
b25IYW5kbGluZ01vZGUgcHJlZGljdGlvbkhhbmRsaW5nTW9kZSA9IFJlcXVpcmVTYW1lUHJlZGlj
dGlvbikKKyAgICBib29sIHNldFJlcGxhY2VtZW50KE5vZGUqIHJlcGxhY2VtZW50LCBQcmVkaWN0
aW9uSGFuZGxpbmdNb2RlIHByZWRpY3Rpb25IYW5kbGluZ01vZGUgPSBSZXF1aXJlU2FtZVByZWRp
Y3Rpb24pCiAgICAgewotICAgICAgICBpZiAocmVwbGFjZW1lbnQgPT0gTm9Ob2RlKQorICAgICAg
ICBpZiAoIXJlcGxhY2VtZW50KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAK
ICAgICAgICAgLy8gQmUgc2FmZS4gRG9uJ3QgdHJ5IHRvIHBlcmZvcm0gcmVwbGFjZW1lbnRzIGlm
IHRoZSBwcmVkaWN0aW9ucyBkb24ndAogICAgICAgICAvLyBhZ3JlZS4KICAgICAgICAgaWYgKHBy
ZWRpY3Rpb25IYW5kbGluZ01vZGUgPT0gUmVxdWlyZVNhbWVQcmVkaWN0aW9uCi0gICAgICAgICAg
ICAmJiBtX2dyYXBoW21fY29tcGlsZUluZGV4XS5wcmVkaWN0aW9uKCkgIT0gbV9ncmFwaFtyZXBs
YWNlbWVudF0ucHJlZGljdGlvbigpKQorICAgICAgICAgICAgJiYgbV9jdXJyZW50Tm9kZS0+cHJl
ZGljdGlvbigpICE9IHJlcGxhY2VtZW50LT5wcmVkaWN0aW9uKCkpCiAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgICAgIAogI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVS
Qk9TRSkKLSAgICAgICAgZGF0YUxvZ0YoIiAgIFJlcGxhY2luZyBAJXUgLT4gQCV1IiwgbV9jb21w
aWxlSW5kZXgsIHJlcGxhY2VtZW50KTsKKyAgICAgICAgZGF0YUxvZ0YoIiAgIFJlcGxhY2luZyBA
JXUgLT4gQCV1IiwgbV9jb21waWxlTm9kZS0+aW5kZXgoKSwgcmVwbGFjZW1lbnQtPmluZGV4KCkp
OwogI2VuZGlmCiAgICAgICAgIAotICAgICAgICBOb2RlJiBub2RlID0gbV9ncmFwaFttX2NvbXBp
bGVJbmRleF07Ci0gICAgICAgIG5vZGUuc2V0T3BBbmREZWZhdWx0RmxhZ3MoUGhhbnRvbSk7Ci0g
ICAgICAgIG5vZGUuc2V0UmVmQ291bnQoMSk7Ci0gICAgICAgIGVsaW1pbmF0ZUlycmVsZXZhbnRQ
aGFudG9tQ2hpbGRyZW4obm9kZSk7CisgICAgICAgIG1fY3VycmVudE5vZGUtPnNldE9wQW5kRGVm
YXVsdEZsYWdzKFBoYW50b20pOworICAgICAgICBtX2N1cnJlbnROb2RlLT5zZXRSZWZDb3VudCgx
KTsKKyAgICAgICAgZWxpbWluYXRlSXJyZWxldmFudFBoYW50b21DaGlsZHJlbihtX2N1cnJlbnRO
b2RlKTsKICAgICAgICAgCiAgICAgICAgIC8vIEF0IHRoaXMgcG9pbnQgd2Ugd2lsbCBlbGltaW5h
dGUgYWxsIHJlZmVyZW5jZXMgdG8gdGhpcyBub2RlLgotICAgICAgICBtX2dyYXBoW21fY29tcGls
ZUluZGV4XS5yZXBsYWNlbWVudCA9IHJlcGxhY2VtZW50OworICAgICAgICBtX2N1cnJlbnROb2Rl
LT5yZXBsYWNlbWVudCA9IHJlcGxhY2VtZW50OwogICAgICAgICAKICAgICAgICAgbV9jaGFuZ2Vk
ID0gdHJ1ZTsKICAgICAgICAgCkBAIC0xMDY2LDI0ICsxMDQ3LDIyIEBAIHByaXZhdGU6CiAgICAg
ICAgIGRhdGFMb2dGKCIgICBFbGltaW5hdGluZyBAJXUiLCBtX2NvbXBpbGVJbmRleCk7CiAjZW5k
aWYKICAgICAgICAgCi0gICAgICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW21fY29tcGlsZUluZGV4
XTsKLSAgICAgICAgQVNTRVJUKG5vZGUucmVmQ291bnQoKSA9PSAxKTsKLSAgICAgICAgQVNTRVJU
KG5vZGUubXVzdEdlbmVyYXRlKCkpOwotICAgICAgICBub2RlLnNldE9wQW5kRGVmYXVsdEZsYWdz
KFBoYW50b20pOwotICAgICAgICBlbGltaW5hdGVJcnJlbGV2YW50UGhhbnRvbUNoaWxkcmVuKG5v
ZGUpOworICAgICAgICBBU1NFUlQobV9jdXJyZW50Tm9kZS0+cmVmQ291bnQoKSA9PSAxKTsKKyAg
ICAgICAgQVNTRVJUKG1fY3VycmVudE5vZGUtPm11c3RHZW5lcmF0ZSgpKTsKKyAgICAgICAgbV9j
dXJyZW50Tm9kZS0+c2V0T3BBbmREZWZhdWx0RmxhZ3MoUGhhbnRvbSk7CisgICAgICAgIGVsaW1p
bmF0ZUlycmVsZXZhbnRQaGFudG9tQ2hpbGRyZW4obV9jdXJyZW50Tm9kZSk7CiAgICAgICAgIAog
ICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOwogICAgIH0KICAgICAKLSAgICB2b2lkIGVsaW1pbmF0
ZShOb2RlSW5kZXggbm9kZUluZGV4LCBOb2RlVHlwZSBwaGFudG9tVHlwZSA9IFBoYW50b20pCisg
ICAgdm9pZCBlbGltaW5hdGUoTm9kZSogbm9kZSwgTm9kZVR5cGUgcGhhbnRvbVR5cGUgPSBQaGFu
dG9tKQogICAgIHsKLSAgICAgICAgaWYgKG5vZGVJbmRleCA9PSBOb05vZGUpCisgICAgICAgIGlm
ICghbm9kZSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgTm9kZSYgbm9kZSA9IG1fZ3Jh
cGhbbm9kZUluZGV4XTsKLSAgICAgICAgaWYgKG5vZGUucmVmQ291bnQoKSAhPSAxKQorICAgICAg
ICBpZiAobm9kZS0+cmVmQ291bnQoKSAhPSAxKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICBBU1NFUlQobm9kZS5tdXN0R2VuZXJhdGUoKSk7Ci0gICAgICAgIG5vZGUuc2V0T3BBbmREZWZh
dWx0RmxhZ3MocGhhbnRvbVR5cGUpOworICAgICAgICBBU1NFUlQobm9kZS0+bXVzdEdlbmVyYXRl
KCkpOworICAgICAgICBub2RlLT5zZXRPcEFuZERlZmF1bHRGbGFncyhwaGFudG9tVHlwZSk7CiAg
ICAgICAgIGlmIChwaGFudG9tVHlwZSA9PSBQaGFudG9tKQogICAgICAgICAgICAgZWxpbWluYXRl
SXJyZWxldmFudFBoYW50b21DaGlsZHJlbihub2RlKTsKICAgICAgICAgCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb24uY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb24uY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQx
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdDb21tb24uaCIKKworI2lmIEVOQUJMRShERkdf
SklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK3ZvaWQgTm9kZVBvaW50
ZXJUcmFpdHM6OmR1bXAoTm9kZSogdmFsdWUsIFByaW50U3RyZWFtJiBvdXQpCit7CisgICAgb3V0
LnByaW50KHZhbHVlKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYg
Ly8gRU5BQkxFKERGR19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Q29tbW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21t
b24uaAkocmV2aXNpb24gMTQwNTA0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdD
b21tb24uaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTEsIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDExLCAyMDEyLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtODEsMTYgKzgxLDE0IEBACiAKIG5h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAotLy8gVHlwZSBmb3IgYSByZWZlcmVuY2Ug
dG8gYW5vdGhlciBub2RlIGluIHRoZSBncmFwaC4KLXR5cGVkZWYgdWludDMyX3QgTm9kZUluZGV4
Owotc3RhdGljIGNvbnN0IE5vZGVJbmRleCBOb05vZGUgPSBVSU5UX01BWDsKK2NsYXNzIE5vZGU7
CiAKIHR5cGVkZWYgdWludDMyX3QgQmxvY2tJbmRleDsKIHN0YXRpYyBjb25zdCBCbG9ja0luZGV4
IE5vQmxvY2sgPSBVSU5UX01BWDsKIAotc3RydWN0IE5vZGVJbmRleFRyYWl0cyB7Ci0gICAgc3Rh
dGljIE5vZGVJbmRleCBkZWZhdWx0VmFsdWUoKSB7IHJldHVybiBOb05vZGU7IH0KLSAgICBzdGF0
aWMgdm9pZCBkdW1wKE5vZGVJbmRleCB2YWx1ZSwgUHJpbnRTdHJlYW0mIG91dCkKK3N0cnVjdCBO
b2RlUG9pbnRlclRyYWl0cyB7CisgICAgc3RhdGljIE5vZGUqIGRlZmF1bHRWYWx1ZSgpIHsgcmV0
dXJuIDA7IH0KKyAgICBzdGF0aWMgdm9pZCBkdW1wKE5vZGUqIHZhbHVlLCBQcmludFN0cmVhbSYg
b3V0KTsKICAgICB7CiAgICAgICAgIGlmICh2YWx1ZSA9PSBOb05vZGUpCiAgICAgICAgICAgICBv
dXQucHJpbnRmKCItIik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0
YW50Rm9sZGluZ1BoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcAkocmV2aXNpb24gMTQwNTA0KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxMyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTc1LDIyICs3NSwyMSBAQCBwcml2YXRlOgogICAgICAgICBib29sIGNoYW5nZWQg
PSBmYWxzZTsKICAgICAgICAgbV9zdGF0ZS5iZWdpbkJhc2ljQmxvY2soYmxvY2spOwogICAgICAg
ICBmb3IgKHVuc2lnbmVkIGluZGV4SW5CbG9jayA9IDA7IGluZGV4SW5CbG9jayA8IGJsb2NrLT5z
aXplKCk7ICsraW5kZXhJbkJsb2NrKSB7Ci0gICAgICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4
ID0gYmxvY2stPmF0KGluZGV4SW5CbG9jayk7Ci0gICAgICAgICAgICBOb2RlJiBub2RlID0gbV9n
cmFwaFtub2RlSW5kZXhdOwotICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKCFtX3N0
YXRlLmlzVmFsaWQoKSkKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIAorICAg
ICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5hdChpbmRleEluQmxvY2spOworCiAgICAgICAg
ICAgICBib29sIGVsaW1pbmF0ZWQgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICAgCi0gICAg
ICAgICAgICBzd2l0Y2ggKG5vZGUub3AoKSkgeworICAgICAgICAgICAgc3dpdGNoIChub2RlLT5v
cCgpKSB7CiAgICAgICAgICAgICBjYXNlIENoZWNrQXJndW1lbnRzTm90Q3JlYXRlZDogewogICAg
ICAgICAgICAgICAgIGlmICghaXNFbXB0eVNwZWN1bGF0aW9uKAogICAgICAgICAgICAgICAgICAg
ICAgICAgbV9zdGF0ZS52YXJpYWJsZXMoKS5vcGVyYW5kKAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG1fZ3JhcGguYXJndW1lbnRzUmVnaXN0ZXJGb3Iobm9kZS5jb2RlT3JpZ2luKSkubV90
eXBlKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLmFyZ3VtZW50c1JlZ2lz
dGVyRm9yKG5vZGUtPmNvZGVPcmlnaW4pKS5tX3R5cGUpKQogICAgICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgICAgICBBU1NFUlQobm9kZS5yZWZDb3VudCgpID09IDEpOwotICAg
ICAgICAgICAgICAgIG5vZGUuc2V0T3BBbmREZWZhdWx0RmxhZ3MoUGhhbnRvbSk7CisgICAgICAg
ICAgICAgICAgbm9kZS0+c2V0T3BBbmREZWZhdWx0RmxhZ3MoUGhhbnRvbSk7CiAgICAgICAgICAg
ICAgICAgZWxpbWluYXRlZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICB9CkBAIC05OCwyNCArOTcsMjQgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGNhc2UgQ2hl
Y2tTdHJ1Y3R1cmU6CiAgICAgICAgICAgICBjYXNlIEZvcndhcmRDaGVja1N0cnVjdHVyZToKICAg
ICAgICAgICAgIGNhc2UgQXJyYXlpZnlUb1N0cnVjdHVyZTogewotICAgICAgICAgICAgICAgIEFi
c3RyYWN0VmFsdWUmIHZhbHVlID0gbV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpOworICAg
ICAgICAgICAgICAgIEFic3RyYWN0VmFsdWUmIHZhbHVlID0gbV9zdGF0ZS5mb3JOb2RlKG5vZGUt
PmNoaWxkMSgpKTsKICAgICAgICAgICAgICAgICBTdHJ1Y3R1cmVTZXQgc2V0OwotICAgICAgICAg
ICAgICAgIGlmIChub2RlLm9wKCkgPT0gQXJyYXlpZnlUb1N0cnVjdHVyZSkKLSAgICAgICAgICAg
ICAgICAgICAgc2V0ID0gbm9kZS5zdHJ1Y3R1cmUoKTsKKyAgICAgICAgICAgICAgICBpZiAobm9k
ZS0+b3AoKSA9PSBBcnJheWlmeVRvU3RydWN0dXJlKQorICAgICAgICAgICAgICAgICAgICBzZXQg
PSBub2RlLT5zdHJ1Y3R1cmUoKTsKICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAg
ICAgICAgIHNldCA9IG5vZGUuc3RydWN0dXJlU2V0KCk7CisgICAgICAgICAgICAgICAgICAgIHNl
dCA9IG5vZGUtPnN0cnVjdHVyZVNldCgpOwogICAgICAgICAgICAgICAgIGlmICghaXNDZWxsU3Bl
Y3VsYXRpb24odmFsdWUubV90eXBlKSkKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICAgICAgaWYgKHZhbHVlLm1fY3VycmVudEtub3duU3RydWN0dXJlLmlzU3Vic2V0T2Yo
c2V0KSkgewogICAgICAgICAgICAgICAgICAgICBBU1NFUlQobm9kZS5yZWZDb3VudCgpID09IDEp
OwotICAgICAgICAgICAgICAgICAgICBub2RlLnNldE9wQW5kRGVmYXVsdEZsYWdzKFBoYW50b20p
OworICAgICAgICAgICAgICAgICAgICBub2RlLT5zZXRPcEFuZERlZmF1bHRGbGFncyhQaGFudG9t
KTsKICAgICAgICAgICAgICAgICAgICAgZWxpbWluYXRlZCA9IHRydWU7CiAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBTdHJ1Y3R1
cmVBYnN0cmFjdFZhbHVlJiBzdHJ1Y3R1cmVWYWx1ZSA9IHZhbHVlLm1fZnV0dXJlUG9zc2libGVT
dHJ1Y3R1cmU7CiAgICAgICAgICAgICAgICAgaWYgKHN0cnVjdHVyZVZhbHVlLmlzU3Vic2V0T2Yo
c2V0KQogICAgICAgICAgICAgICAgICAgICAmJiBzdHJ1Y3R1cmVWYWx1ZS5oYXNTaW5nbGV0b24o
KSkgewotICAgICAgICAgICAgICAgICAgICBub2RlLmNvbnZlcnRUb1N0cnVjdHVyZVRyYW5zaXRp
b25XYXRjaHBvaW50KHN0cnVjdHVyZVZhbHVlLnNpbmdsZXRvbigpKTsKKyAgICAgICAgICAgICAg
ICAgICAgbm9kZS0+Y29udmVydFRvU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnQoc3RydWN0
dXJlVmFsdWUuc2luZ2xldG9uKCkpOwogICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkID0gdHJ1
ZTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0xMjMsMzcg
KzEyMiwzNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgY2FzZSBD
aGVja0FycmF5OgogICAgICAgICAgICAgY2FzZSBBcnJheWlmeTogewotICAgICAgICAgICAgICAg
IGlmICghbm9kZS5hcnJheU1vZGUoKS5hbHJlYWR5Q2hlY2tlZChtX2dyYXBoLCBub2RlLCBtX3N0
YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSkpKQorICAgICAgICAgICAgICAgIGlmICghbm9kZS0+
YXJyYXlNb2RlKCkuYWxyZWFkeUNoZWNrZWQobV9ncmFwaCwgbm9kZSwgbV9zdGF0ZS5mb3JOb2Rl
KG5vZGUtPmNoaWxkMSgpKSkpCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgICAgIEFTU0VSVChub2RlLnJlZkNvdW50KCkgPT0gMSk7Ci0gICAgICAgICAgICAgICAgbm9k
ZS5zZXRPcEFuZERlZmF1bHRGbGFncyhQaGFudG9tKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQo
bm9kZS0+cmVmQ291bnQoKSA9PSAxKTsKKyAgICAgICAgICAgICAgICBub2RlLT5zZXRPcEFuZERl
ZmF1bHRGbGFncyhQaGFudG9tKTsKICAgICAgICAgICAgICAgICBlbGltaW5hdGVkID0gdHJ1ZTsK
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAK
ICAgICAgICAgICAgIGNhc2UgQ2hlY2tGdW5jdGlvbjogewotICAgICAgICAgICAgICAgIGlmICht
X3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSkudmFsdWUoKSAhPSBub2RlLmZ1bmN0aW9uKCkp
CisgICAgICAgICAgICAgICAgaWYgKG1fc3RhdGUuZm9yTm9kZShub2RlLT5jaGlsZDEoKSkudmFs
dWUoKSAhPSBub2RlLT5mdW5jdGlvbigpKQogICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgICAgICBub2RlLnNldE9wQW5kRGVmYXVsdEZsYWdzKFBoYW50b20pOworICAgICAg
ICAgICAgICAgIG5vZGUtPnNldE9wQW5kRGVmYXVsdEZsYWdzKFBoYW50b20pOwogICAgICAgICAg
ICAgICAgIGVsaW1pbmF0ZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgY2FzZSBDb252ZXJ0VGhpczog
ewotICAgICAgICAgICAgICAgIGlmICghaXNPYmplY3RTcGVjdWxhdGlvbihtX3N0YXRlLmZvck5v
ZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSkKKyAgICAgICAgICAgICAgICBpZiAoIWlzT2JqZWN0
U3BlY3VsYXRpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX3R5cGUpKQogICAg
ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBub2RlLnNldE9wQW5kRGVm
YXVsdEZsYWdzKElkZW50aXR5KTsKKyAgICAgICAgICAgICAgICBub2RlLT5zZXRPcEFuZERlZmF1
bHRGbGFncyhJZGVudGl0eSk7CiAgICAgICAgICAgICAgICAgY2hhbmdlZCA9IHRydWU7CiAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCiAgICAg
ICAgICAgICBjYXNlIEdldEJ5SWQ6CiAgICAgICAgICAgICBjYXNlIEdldEJ5SWRGbHVzaDogewot
ICAgICAgICAgICAgICAgIENvZGVPcmlnaW4gY29kZU9yaWdpbiA9IG5vZGUuY29kZU9yaWdpbjsK
LSAgICAgICAgICAgICAgICBOb2RlSW5kZXggY2hpbGQgPSBub2RlLmNoaWxkMSgpLmluZGV4KCk7
Ci0gICAgICAgICAgICAgICAgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciA9IG5vZGUuaWRlbnRp
Zmllck51bWJlcigpOworICAgICAgICAgICAgICAgIENvZGVPcmlnaW4gY29kZU9yaWdpbiA9IG5v
ZGUtPmNvZGVPcmlnaW47CisgICAgICAgICAgICAgICAgTm9kZSogY2hpbGQgPSBub2RlLT5jaGls
ZDEoKS5ub2RlKCk7CisgICAgICAgICAgICAgICAgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciA9
IG5vZGUtPmlkZW50aWZpZXJOdW1iZXIoKTsKICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAg
ICAgICBpZiAoIWlzQ2VsbFNwZWN1bGF0aW9uKG1fZ3JhcGhbY2hpbGRdLnByZWRpY3Rpb24oKSkp
CisgICAgICAgICAgICAgICAgaWYgKCFpc0NlbGxTcGVjdWxhdGlvbihjaGlsZC0+cHJlZGljdGlv
bigpKSkKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgCiAgICAg
ICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBtX3N0YXRlLmZvck5vZGUoY2hpbGQp
LmJlc3RQcm92ZW5TdHJ1Y3R1cmUoKTsKQEAgLTE4Nyw3ICsxODYsNyBAQCBwcml2YXRlOgogICAg
ICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIE5vZGVJbmRleCBwcm9wZXJ0eVN0b3JhZ2VJ
bmRleDsKICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBtX2dyYXBoW2NoaWxkXS5y
ZWYoKTsKKyAgICAgICAgICAgICAgICBjaGlsZC0+cmVmKCk7CiAgICAgICAgICAgICAgICAgaWYg
KGlzSW5saW5lT2Zmc2V0KHN0YXR1cy5vZmZzZXQoKSkpCiAgICAgICAgICAgICAgICAgICAgIHBy
b3BlcnR5U3RvcmFnZUluZGV4ID0gY2hpbGQ7CiAgICAgICAgICAgICAgICAgZWxzZSB7CkBAIC0x
OTYsNyArMTk1LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkKTsK
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgbV9n
cmFwaFtub2RlSW5kZXhdLmNvbnZlcnRUb0dldEJ5T2Zmc2V0KG1fZ3JhcGgubV9zdG9yYWdlQWNj
ZXNzRGF0YS5zaXplKCksIHByb3BlcnR5U3RvcmFnZUluZGV4KTsKKyAgICAgICAgICAgICAgICBu
b2RlLT5jb252ZXJ0VG9HZXRCeU9mZnNldChtX2dyYXBoLm1fc3RvcmFnZUFjY2Vzc0RhdGEuc2l6
ZSgpLCBwcm9wZXJ0eVN0b3JhZ2VJbmRleCk7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAg
ICAgICAgU3RvcmFnZUFjY2Vzc0RhdGEgc3RvcmFnZUFjY2Vzc0RhdGE7CiAgICAgICAgICAgICAg
ICAgc3RvcmFnZUFjY2Vzc0RhdGEub2Zmc2V0ID0gaW5kZXhSZWxhdGl2ZVRvQmFzZShzdGF0dXMu
b2Zmc2V0KCkpOwpAQCAtMjA3LDkgKzIwNiw5IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAg
CiAgICAgICAgICAgICBjYXNlIFB1dEJ5SWQ6CiAgICAgICAgICAgICBjYXNlIFB1dEJ5SWREaXJl
Y3Q6IHsKLSAgICAgICAgICAgICAgICBDb2RlT3JpZ2luIGNvZGVPcmlnaW4gPSBub2RlLmNvZGVP
cmlnaW47Ci0gICAgICAgICAgICAgICAgTm9kZUluZGV4IGNoaWxkID0gbm9kZS5jaGlsZDEoKS5p
bmRleCgpOwotICAgICAgICAgICAgICAgIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIgPSBub2Rl
LmlkZW50aWZpZXJOdW1iZXIoKTsKKyAgICAgICAgICAgICAgICBDb2RlT3JpZ2luIGNvZGVPcmln
aW4gPSBub2RlLT5jb2RlT3JpZ2luOworICAgICAgICAgICAgICAgIE5vZGUqIGNoaWxkID0gbm9k
ZS0+Y2hpbGQxKCkubm9kZSgpOworICAgICAgICAgICAgICAgIHVuc2lnbmVkIGlkZW50aWZpZXJO
dW1iZXIgPSBub2RlLT5pZGVudGlmaWVyTnVtYmVyKCk7CiAgICAgICAgICAgICAgICAgCiAgICAg
ICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBtX3N0YXRlLmZvck5vZGUoY2hpbGQp
LmJlc3RQcm92ZW5TdHJ1Y3R1cmUoKTsKICAgICAgICAgICAgICAgICBpZiAoIXN0cnVjdHVyZSkK
QEAgLTIyMiw3ICsyMjEsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICBtX2dyYXBo
Lmdsb2JhbE9iamVjdEZvcihjb2RlT3JpZ2luKSwKICAgICAgICAgICAgICAgICAgICAgc3RydWN0
dXJlLAogICAgICAgICAgICAgICAgICAgICBjb2RlQmxvY2soKS0+aWRlbnRpZmllcihpZGVudGlm
aWVyTnVtYmVyKSwKLSAgICAgICAgICAgICAgICAgICAgbm9kZS5vcCgpID09IFB1dEJ5SWREaXJl
Y3QpOworICAgICAgICAgICAgICAgICAgICBub2RlLT5vcCgpID09IFB1dEJ5SWREaXJlY3QpOwog
ICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGlmICghc3RhdHVzLmlzU2ltcGxlUmVw
bGFjZSgpICYmICFzdGF0dXMuaXNTaW1wbGVUcmFuc2l0aW9uKCkpCiAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwpAQCAtMjQ3LDcgKzI0Niw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAg
ICAgIHRyYW5zaXRpb25EYXRhID0gbV9ncmFwaC5hZGRTdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSgK
ICAgICAgICAgICAgICAgICAgICAgICAgIFN0cnVjdHVyZVRyYW5zaXRpb25EYXRhKHN0cnVjdHVy
ZSwgc3RhdHVzLm5ld1N0cnVjdHVyZSgpKSk7CiAgICAgICAgICAgICAgICAgICAgIAotICAgICAg
ICAgICAgICAgICAgICBpZiAobm9kZS5vcCgpID09IFB1dEJ5SWQpIHsKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gUHV0QnlJZCkgewogICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKCFzdHJ1Y3R1cmUtPnN0b3JlZFByb3RvdHlwZSgpLmlzTnVsbCgpKSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYWRkU3RydWN0dXJlVHJhbnNpdGlvbkNoZWNrKAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlT3JpZ2luLCBpbmRleEluQmxvY2ssCkBAIC0y
NjUsMTggKzI2NCwxOCBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgTm9kZUluZGV4IHByb3BlcnR5U3RvcmFnZUlu
ZGV4OworICAgICAgICAgICAgICAgIE5vZGUqIHByb3BlcnR5U3RvcmFnZTsKICAgICAgICAgICAg
ICAgICAKICAgICAgICAgICAgICAgICBpZiAoaXNJbmxpbmVPZmZzZXQoc3RhdHVzLm9mZnNldCgp
KSkgewotICAgICAgICAgICAgICAgICAgICBtX2dyYXBoW2NoaWxkXS5yZWYoKTsgLy8gVGhlIGNo
aWxkIHdpbGwgYmUgdXNlZCBhcyB0aGUgcHJvcGVydHkgaW5kZXgsIHNvIHJlZiBpdCB0byByZWZs
ZWN0IHRoZSBkb3VibGUgdXNlLgotICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eVN0b3JhZ2VJ
bmRleCA9IGNoaWxkOworICAgICAgICAgICAgICAgICAgICBjaGlsZC0+cmVmKCk7IC8vIFRoZSBj
aGlsZCB3aWxsIGJlIHVzZWQgYXMgdGhlIHByb3BlcnR5IGluZGV4LCBzbyByZWYgaXQgdG8gcmVm
bGVjdCB0aGUgZG91YmxlIHVzZS4KKyAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlTdG9yYWdl
ID0gY2hpbGQ7CiAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdGF0dXMuaXNTaW1wbGVSZXBs
YWNlKCkgfHwgc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpID09IHN0YXR1cy5uZXdTdHJ1
Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSkgewotICAgICAgICAgICAgICAgICAgICBwcm9w
ZXJ0eVN0b3JhZ2VJbmRleCA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCisgICAgICAgICAg
ICAgICAgICAgIHByb3BlcnR5U3RvcmFnZSA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCiAg
ICAgICAgICAgICAgICAgICAgICAgICBpbmRleEluQmxvY2ssIFJlZkNoaWxkcmVuLCBSZWZOb2Rl
LCBTcGVjTm9uZSwgR2V0QnV0dGVyZmx5LCBjb2RlT3JpZ2luLCBjaGlsZCk7CiAgICAgICAgICAg
ICAgICAgfSBlbHNlIGlmICghc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpKSB7CiAgICAg
ICAgICAgICAgICAgICAgIEFTU0VSVChzdGF0dXMubmV3U3RydWN0dXJlKCktPm91dE9mTGluZUNh
cGFjaXR5KCkpOwogICAgICAgICAgICAgICAgICAgICBBU1NFUlQoIWlzSW5saW5lT2Zmc2V0KHN0
YXR1cy5vZmZzZXQoKSkpOwotICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eVN0b3JhZ2VJbmRl
eCA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCisgICAgICAgICAgICAgICAgICAgIHByb3Bl
cnR5U3RvcmFnZSA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCiAgICAgICAgICAgICAgICAg
ICAgICAgICBpbmRleEluQmxvY2ssIFJlZkNoaWxkcmVuLCBSZWZOb2RlLCBTcGVjTm9uZSwgQWxs
b2NhdGVQcm9wZXJ0eVN0b3JhZ2UsCiAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlT3JpZ2lu
LCBPcEluZm8odHJhbnNpdGlvbkRhdGEpLCBjaGlsZCk7CiAgICAgICAgICAgICAgICAgfSBlbHNl
IHsKQEAgLTI4NCw3ICsyODMsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICBBU1NF
UlQoc3RhdHVzLm5ld1N0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpID4gc3RydWN0dXJl
LT5vdXRPZkxpbmVDYXBhY2l0eSgpKTsKICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKCFpc0lu
bGluZU9mZnNldChzdGF0dXMub2Zmc2V0KCkpKTsKICAgICAgICAgICAgICAgICAgICAgCi0gICAg
ICAgICAgICAgICAgICAgIHByb3BlcnR5U3RvcmFnZUluZGV4ID0gbV9pbnNlcnRpb25TZXQuaW5z
ZXJ0Tm9kZSgKKyAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlTdG9yYWdlID0gbV9pbnNlcnRp
b25TZXQuaW5zZXJ0Tm9kZSgKICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4SW5CbG9jaywg
UmVmQ2hpbGRyZW4sIFJlZk5vZGUsIFNwZWNOb25lLCBSZWFsbG9jYXRlUHJvcGVydHlTdG9yYWdl
LAogICAgICAgICAgICAgICAgICAgICAgICAgY29kZU9yaWdpbiwgT3BJbmZvKHRyYW5zaXRpb25E
YXRhKSwKICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkLApAQCAtMjk5LDcgKzI5OCw3IEBA
IHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgICAgICBPcEluZm8odHJhbnNpdGlvbkRhdGEp
LCBjaGlsZCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIAotICAgICAgICAg
ICAgICAgIG1fZ3JhcGhbbm9kZUluZGV4XS5jb252ZXJ0VG9QdXRCeU9mZnNldChtX2dyYXBoLm1f
c3RvcmFnZUFjY2Vzc0RhdGEuc2l6ZSgpLCBwcm9wZXJ0eVN0b3JhZ2VJbmRleCk7CisgICAgICAg
ICAgICAgICAgbm9kZS0+Y29udmVydFRvUHV0QnlPZmZzZXQobV9ncmFwaC5tX3N0b3JhZ2VBY2Nl
c3NEYXRhLnNpemUoKSwgcHJvcGVydHlTdG9yYWdlSW5kZXgpOwogICAgICAgICAgICAgICAgIAog
ICAgICAgICAgICAgICAgIFN0b3JhZ2VBY2Nlc3NEYXRhIHN0b3JhZ2VBY2Nlc3NEYXRhOwogICAg
ICAgICAgICAgICAgIHN0b3JhZ2VBY2Nlc3NEYXRhLm9mZnNldCA9IGluZGV4UmVsYXRpdmVUb0Jh
c2Uoc3RhdHVzLm9mZnNldCgpKTsKQEAgLTMyMCw3MiArMzE5LDcwIEBAIHByaXZhdGU6CiAgICAg
ICAgICAgICBtX3N0YXRlLmV4ZWN1dGUoaW5kZXhJbkJsb2NrKTsKICAgICAgICAgICAgIGlmICgh
bm9kZS5zaG91bGRHZW5lcmF0ZSgpIHx8IG1fc3RhdGUuZGlkQ2xvYmJlcigpIHx8IG5vZGUuaGFz
Q29uc3RhbnQoKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIEpTVmFs
dWUgdmFsdWUgPSBtX3N0YXRlLmZvck5vZGUobm9kZUluZGV4KS52YWx1ZSgpOworICAgICAgICAg
ICAgSlNWYWx1ZSB2YWx1ZSA9IG1fc3RhdGUuZm9yTm9kZShub2RlKS52YWx1ZSgpOwogICAgICAg
ICAgICAgaWYgKCF2YWx1ZSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAg
ICAgICAKLSAgICAgICAgICAgIGlmIChub2RlLm9wKCkgPT0gR2V0TG9jYWwpIHsKLSAgICAgICAg
ICAgICAgICBOb2RlSW5kZXggcHJldmlvdXNMb2NhbEFjY2VzcyA9IE5vTm9kZTsKLSAgICAgICAg
ICAgICAgICBpZiAoYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5vcGVyYW5kKG5vZGUubG9jYWwoKSkg
PT0gbm9kZUluZGV4Ci0gICAgICAgICAgICAgICAgICAgICYmIG1fZ3JhcGhbbm9kZS5jaGlsZDEo
KV0ub3AoKSA9PSBQaGkpIHsKKyAgICAgICAgICAgIGlmIChub2RlLT5vcCgpID09IEdldExvY2Fs
KSB7CisgICAgICAgICAgICAgICAgTm9kZSogcHJldmlvdXNMb2NhbEFjY2VzcyA9IDA7CisgICAg
ICAgICAgICAgICAgaWYgKGJsb2NrLT52YXJpYWJsZXNBdEhlYWQub3BlcmFuZChub2RlLT5sb2Nh
bCgpKSA9PSBub2RlCisgICAgICAgICAgICAgICAgICAgICYmIG5vZGUtPmNoaWxkMSgpLT5vcCgp
ID09IFBoaSkgewogICAgICAgICAgICAgICAgICAgICAvLyBXZSBleHBlY3QgdGhpcyB0byBiZSB0
aGUgY29tbW9uIGNhc2UuCi0gICAgICAgICAgICAgICAgICAgIEFTU0VSVChibG9jay0+aXNJblBo
aXMobm9kZS5jaGlsZDEoKS5pbmRleCgpKSk7Ci0gICAgICAgICAgICAgICAgICAgIHByZXZpb3Vz
TG9jYWxBY2Nlc3MgPSBub2RlLmNoaWxkMSgpLmluZGV4KCk7Ci0gICAgICAgICAgICAgICAgICAg
IGJsb2NrLT52YXJpYWJsZXNBdEhlYWQub3BlcmFuZChub2RlLmxvY2FsKCkpID0gcHJldmlvdXNM
b2NhbEFjY2VzczsKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGJsb2NrLT5pc0luUGhpcyhu
b2RlLT5jaGlsZDEoKS5ub2RlKCkpKTsKKyAgICAgICAgICAgICAgICAgICAgcHJldmlvdXNMb2Nh
bEFjY2VzcyA9IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKKyAgICAgICAgICAgICAgICAgICAgYmxv
Y2stPnZhcmlhYmxlc0F0SGVhZC5vcGVyYW5kKG5vZGUtPmxvY2FsKCkpID0gcHJldmlvdXNMb2Nh
bEFjY2VzczsKICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICBB
U1NFUlQoaW5kZXhJbkJsb2NrID4gMCk7CiAgICAgICAgICAgICAgICAgICAgIC8vIE11c3Qgc2Vh
cmNoIGZvciB0aGUgcHJldmlvdXMgYWNjZXNzIHRvIHRoaXMgbG9jYWwuCiAgICAgICAgICAgICAg
ICAgICAgIGZvciAoQmxvY2tJbmRleCBzdWJJbmRleEluQmxvY2sgPSBpbmRleEluQmxvY2s7IHN1
YkluZGV4SW5CbG9jay0tOykgewotICAgICAgICAgICAgICAgICAgICAgICAgTm9kZUluZGV4IHN1
Yk5vZGVJbmRleCA9IGJsb2NrLT5hdChzdWJJbmRleEluQmxvY2spOwotICAgICAgICAgICAgICAg
ICAgICAgICAgTm9kZSYgc3ViTm9kZSA9IG1fZ3JhcGhbc3ViTm9kZUluZGV4XTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICghc3ViTm9kZS5zaG91bGRHZW5lcmF0ZSgpKQorICAgICAgICAg
ICAgICAgICAgICAgICAgTm9kZSogc3ViTm9kZSA9IGJsb2NrLT5hdChzdWJJbmRleEluQmxvY2sp
OworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFzdWJOb2RlLT5zaG91bGRHZW5lcmF0ZSgp
KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKCFzdWJOb2RlLmhhc1ZhcmlhYmxlQWNjZXNzRGF0YSgpKQorICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKCFzdWJOb2RlLT5oYXNWYXJpYWJsZUFjY2Vzc0RhdGEoKSkKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChzdWJOb2RlLmxvY2FsKCkgIT0gbm9kZS5sb2NhbCgpKQorICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKHN1Yk5vZGUtPmxvY2FsKCkgIT0gbm9kZS0+bG9jYWwoKSkKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICAgICAgIC8v
IFRoZSB0d28gbXVzdCBoYXZlIGJlZW4gdW5pZmllZC4KLSAgICAgICAgICAgICAgICAgICAgICAg
IEFTU0VSVChzdWJOb2RlLnZhcmlhYmxlQWNjZXNzRGF0YSgpID09IG5vZGUudmFyaWFibGVBY2Nl
c3NEYXRhKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKHN1Yk5vZGUtPnZhcmlh
YmxlQWNjZXNzRGF0YSgpID09IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgIHByZXZpb3VzTG9jYWxBY2Nlc3MgPSBzdWJOb2RlSW5kZXg7CiAgICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgICAgICBpZiAocHJldmlvdXNMb2NhbEFjY2VzcyA9PSBOb05vZGUpIHsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKCFwcmV2aW91c0xvY2FsQWNjZXNzKSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAvLyBUaGUgcHJldmlvdXMgYWNjZXNzIG11c3QgaGF2ZSBiZWVuIGEgUGhpLgog
ICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChCbG9ja0luZGV4IHBoaUluZGV4SW5CbG9jayA9
IGJsb2NrLT5waGlzLnNpemUoKTsgcGhpSW5kZXhJbkJsb2NrLS07KSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgTm9kZUluZGV4IHBoaU5vZGVJbmRleCA9IGJsb2NrLT5waGlzW3BoaUlu
ZGV4SW5CbG9ja107Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgTm9kZSYgcGhpTm9kZSA9
IG1fZ3JhcGhbcGhpTm9kZUluZGV4XTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
IXBoaU5vZGUuc2hvdWxkR2VuZXJhdGUoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBO
b2RlKiBwaGlOb2RlID0gYmxvY2stPnBoaXNbcGhpSW5kZXhJbkJsb2NrXTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoIXBoaU5vZGUtPnNob3VsZEdlbmVyYXRlKCkpCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChwaGlOb2RlLmxvY2FsKCkgIT0gbm9kZS5sb2NhbCgpKQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIChwaGlOb2RlLT5sb2NhbCgpICE9IG5vZGUtPmxvY2FsKCkpCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIFRoZSB0d28gbXVzdCBoYXZlIGJlZW4gdW5pZmllZC4KLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBBU1NFUlQocGhpTm9kZS52YXJpYWJsZUFjY2Vzc0RhdGEoKSA9
PSBub2RlLnZhcmlhYmxlQWNjZXNzRGF0YSgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBwcmV2aW91c0xvY2FsQWNjZXNzID0gcGhpTm9kZUluZGV4OworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEFTU0VSVChwaGlOb2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKSA9PSBub2RlLT52
YXJpYWJsZUFjY2Vzc0RhdGEoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldmlv
dXNMb2NhbEFjY2VzcyA9IHBoaU5vZGU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBB
U1NFUlQocHJldmlvdXNMb2NhbEFjY2VzcyAhPSBOb05vZGUpOworICAgICAgICAgICAgICAgICAg
ICAgICAgQVNTRVJUKHByZXZpb3VzTG9jYWxBY2Nlc3MpOwogICAgICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAg
ICBBU1NFUlQocHJldmlvdXNMb2NhbEFjY2VzcyAhPSBOb05vZGUpOworICAgICAgICAgICAgICAg
IEFTU0VSVChwcmV2aW91c0xvY2FsQWNjZXNzKTsKICAgICAgICAgICAgICAgICAKLSAgICAgICAg
ICAgICAgICBOb2RlSW5kZXggdGFpbE5vZGVJbmRleCA9IGJsb2NrLT52YXJpYWJsZXNBdFRhaWwu
b3BlcmFuZChub2RlLmxvY2FsKCkpOwotICAgICAgICAgICAgICAgIGlmICh0YWlsTm9kZUluZGV4
ID09IG5vZGVJbmRleCkKLSAgICAgICAgICAgICAgICAgICAgYmxvY2stPnZhcmlhYmxlc0F0VGFp
bC5vcGVyYW5kKG5vZGUubG9jYWwoKSkgPSBwcmV2aW91c0xvY2FsQWNjZXNzOworICAgICAgICAg
ICAgICAgIE5vZGUqIHRhaWxOb2RlID0gYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKG5v
ZGUtPmxvY2FsKCkpOworICAgICAgICAgICAgICAgIGlmICh0YWlsTm9kZSA9PSBub2RlKQorICAg
ICAgICAgICAgICAgICAgICBibG9jay0+dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQobm9kZS0+bG9j
YWwoKSkgPSBwcmV2aW91c0xvY2FsQWNjZXNzOwogICAgICAgICAgICAgICAgIGVsc2UgewotICAg
ICAgICAgICAgICAgICAgICBBU1NFUlQobV9ncmFwaFt0YWlsTm9kZUluZGV4XS5vcCgpID09IEZs
dXNoCi0gICAgICAgICAgICAgICAgICAgICAgICB8fCBtX2dyYXBoW3RhaWxOb2RlSW5kZXhdLm9w
KCkgPT0gU2V0TG9jYWwKLSAgICAgICAgICAgICAgICAgICAgICAgIHx8IG5vZGUudmFyaWFibGVB
Y2Nlc3NEYXRhKCktPmlzQ2FwdHVyZWQoKSk7CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVCh0
YWlsTm9kZS0+b3AoKSA9PSBGbHVzaAorICAgICAgICAgICAgICAgICAgICAgICAgfHwgdGFpbE5v
ZGUtPm9wKCkgPT0gU2V0TG9jYWwKKyAgICAgICAgICAgICAgICAgICAgICAgIHx8IG5vZGUtPnZh
cmlhYmxlQWNjZXNzRGF0YSgpLT5pc0NhcHR1cmVkKCkpOwogICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAgICAgICAgQ29kZU9yaWdpbiBjb2RlT3Jp
Z2luID0gbm9kZS5jb2RlT3JpZ2luOwotICAgICAgICAgICAgQWRqYWNlbmN5TGlzdCBjaGlsZHJl
biA9IG5vZGUuY2hpbGRyZW47CisgICAgICAgICAgICBDb2RlT3JpZ2luIGNvZGVPcmlnaW4gPSBu
b2RlLT5jb2RlT3JpZ2luOworICAgICAgICAgICAgQWRqYWNlbmN5TGlzdCBjaGlsZHJlbiA9IG5v
ZGUtPmNoaWxkcmVuOwogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgbV9ncmFwaC5jb252
ZXJ0VG9Db25zdGFudChub2RlSW5kZXgsIHZhbHVlKTsKKyAgICAgICAgICAgIG1fZ3JhcGguY29u
dmVydFRvQ29uc3RhbnQobm9kZSwgdmFsdWUpOwogICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQu
aW5zZXJ0Tm9kZSgKICAgICAgICAgICAgICAgICBpbmRleEluQmxvY2ssIERvbnRSZWZDaGlsZHJl
biwgRG9udFJlZk5vZGUsIFNwZWNOb25lLCBQaGFudG9tLCBjb2RlT3JpZ2luLCBjaGlsZHJlbik7
Ci0gICAgICAgICAgICAgICAgCisgICAgICAgICAgICAKICAgICAgICAgICAgIGNoYW5nZWQgPSB0
cnVlOwogICAgICAgICB9CiAgICAgICAgIG1fc3RhdGUucmVzZXQoKTsKQEAgLTM5NiwyMCArMzkz
LDIwIEBAIHByaXZhdGU6CiAgICAgCiAgICAgdm9pZCBhZGRTdHJ1Y3R1cmVUcmFuc2l0aW9uQ2hl
Y2soQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCB1bnNpZ25lZCBpbmRleEluQmxvY2ssIEpTQ2VsbCog
Y2VsbCkKICAgICB7Ci0gICAgICAgIE5vZGVJbmRleCB3ZWFrQ29uc3RhbnRJbmRleCA9IG1faW5z
ZXJ0aW9uU2V0Lmluc2VydE5vZGUoCisgICAgICAgIE5vZGUqIHdlYWtDb25zdGFudCA9IG1faW5z
ZXJ0aW9uU2V0Lmluc2VydE5vZGUoCiAgICAgICAgICAgICBpbmRleEluQmxvY2ssIERvbnRSZWZD
aGlsZHJlbiwgRG9udFJlZk5vZGUsIHNwZWN1bGF0aW9uRnJvbVZhbHVlKGNlbGwpLAogICAgICAg
ICAgICAgV2Vha0pTQ29uc3RhbnQsIGNvZGVPcmlnaW4sIE9wSW5mbyhjZWxsKSk7CiAgICAgICAg
IAogICAgICAgICBpZiAoY2VsbC0+c3RydWN0dXJlKCktPnRyYW5zaXRpb25XYXRjaHBvaW50U2V0
SXNTdGlsbFZhbGlkKCkpIHsKICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUo
CiAgICAgICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBSZWZDaGlsZHJlbiwgRG9udFJlZk5vZGUs
IFNwZWNOb25lLCBTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludCwKLSAgICAgICAgICAgICAg
ICBjb2RlT3JpZ2luLCBPcEluZm8oY2VsbC0+c3RydWN0dXJlKCkpLCB3ZWFrQ29uc3RhbnRJbmRl
eCk7CisgICAgICAgICAgICAgICAgY29kZU9yaWdpbiwgT3BJbmZvKGNlbGwtPnN0cnVjdHVyZSgp
KSwgd2Vha0NvbnN0YW50KTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCiAgICAg
ICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCiAgICAgICAgICAgICBpbmRleEluQmxvY2ss
IFJlZkNoaWxkcmVuLCBEb250UmVmTm9kZSwgU3BlY05vbmUsIENoZWNrU3RydWN0dXJlLCBjb2Rl
T3JpZ2luLAotICAgICAgICAgICAgT3BJbmZvKG1fZ3JhcGguYWRkU3RydWN0dXJlU2V0KGNlbGwt
PnN0cnVjdHVyZSgpKSksIHdlYWtDb25zdGFudEluZGV4KTsKKyAgICAgICAgICAgIE9wSW5mbyht
X2dyYXBoLmFkZFN0cnVjdHVyZVNldChjZWxsLT5zdHJ1Y3R1cmUoKSkpLCB3ZWFrQ29uc3RhbnQp
OwogICAgIH0KICAgICAKICAgICAvLyBUaGlzIGlzIG5lY2Vzc2FyeSBiZWNhdXNlIHRoZSBDRkEg
bWF5IHJlYWNoIGNvbmNsdXNpb25zIGFib3V0IGNvbnN0YW50cyBiYXNlZCBvbiBpdHMKQEAgLTQz
NCw5ICs0MzEsOCBAQCBwcml2YXRlOgogICAgICAgICAgICAgaWYgKG1fc3RhdGUuaXNWYWxpZCgp
KQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBO
b2RlSW5kZXggbm9kZUluZGV4ID0gYmxvY2stPmF0KGluZGV4SW5CbG9jayk7Ci0gICAgICAgICAg
ICBOb2RlJiBub2RlID0gbV9ncmFwaFtub2RlSW5kZXhdOwotICAgICAgICAgICAgc3dpdGNoIChu
b2RlLm9wKCkpIHsKKyAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+YXQoaW5kZXhJbkJs
b2NrKTsKKyAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewogICAgICAgICAgICAgY2Fz
ZSBSZXR1cm46CiAgICAgICAgICAgICBjYXNlIFRocm93OgogICAgICAgICAgICAgY2FzZSBUaHJv
d1JlZmVyZW5jZUVycm9yOgpAQCAtNDQ3LDcgKzQ0Myw3IEBAIHByaXZhdGU6CiAgICAgICAgICAg
ICBkZWZhdWx0OgogICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCiAg
ICAgICAgICAgICAgICAgICAgIGluZGV4SW5CbG9jaywgRG9udFJlZkNoaWxkcmVuLCBEb250UmVm
Tm9kZSwgU3BlY05vbmUsIEZvcmNlT1NSRXhpdCwKLSAgICAgICAgICAgICAgICAgICAgbm9kZS5j
b2RlT3JpZ2luKTsKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y29kZU9yaWdpbik7CiAgICAg
ICAgICAgICAgICAgY2hhbmdlZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0VkZ2UuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0VkZ2UuaAkocmV2aXNpb24g
MTQwNTA0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdFZGdlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTQzLDQxICs0MywzOSBAQCBwdWJsaWM6CiAgICAgewogICAgIH0KICAgICAKLSAgICBl
eHBsaWNpdCBFZGdlKE5vZGVJbmRleCBub2RlSW5kZXgpCi0gICAgICAgIDogbV9lbmNvZGVkV29y
ZChtYWtlV29yZChub2RlSW5kZXgsIFVudHlwZWRVc2UpKQorICAgIGV4cGxpY2l0IEVkZ2UoTm9k
ZSogbm9kZSkKKyAgICAgICAgOiBtX2VuY29kZWRXb3JkKG1ha2VXb3JkKG5vZGUsIFVudHlwZWRV
c2UpKQogICAgIHsKICAgICB9CiAgICAgCi0gICAgRWRnZShOb2RlSW5kZXggbm9kZUluZGV4LCBV
c2VLaW5kIHVzZUtpbmQpCi0gICAgICAgIDogbV9lbmNvZGVkV29yZChtYWtlV29yZChub2RlSW5k
ZXgsIHVzZUtpbmQpKQorICAgIEVkZ2UoTm9kZSogbm9kZSwgVXNlS2luZCB1c2VLaW5kKQorICAg
ICAgICA6IG1fZW5jb2RlZFdvcmQobWFrZVdvcmQobm9kZSwgdXNlS2luZCkpCiAgICAgewogICAg
IH0KICAgICAKLSAgICBOb2RlSW5kZXggaW5kZXhVbmNoZWNrZWQoKSBjb25zdCB7IHJldHVybiBt
X2VuY29kZWRXb3JkID4+IHNoaWZ0KCk7IH0KLSAgICBOb2RlSW5kZXggaW5kZXgoKSBjb25zdAot
ICAgIHsKLSAgICAgICAgQVNTRVJUKGlzU2V0KCkpOwotICAgICAgICByZXR1cm4gbV9lbmNvZGVk
V29yZCA+PiBzaGlmdCgpOwotICAgIH0KLSAgICB2b2lkIHNldEluZGV4KE5vZGVJbmRleCBub2Rl
SW5kZXgpCisgICAgTm9kZSogbm9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fZW5jb2RlZFdvcmQgJiB+
KCgxIDw8IHNoaWZ0KCkpIC0gMSk7IH0KKyAgICBOb2RlJiBvcGVyYXRvciooKSBjb25zdCB7IHJl
dHVybiAqZ2V0KCk7IH0KKyAgICBOb2RlKiBvcGVyYXRvci0+KCkgY29uc3QgeyByZXR1cm4gZ2V0
KCk7IH0KKyAgICAKKyAgICB2b2lkIHNldE5vZGUoTm9kZSogbm9kZSkKICAgICB7Ci0gICAgICAg
IG1fZW5jb2RlZFdvcmQgPSBtYWtlV29yZChub2RlSW5kZXgsIHVzZUtpbmQoKSk7CisgICAgICAg
IG1fZW5jb2RlZFdvcmQgPSBtYWtlV29yZChub2RlLCB1c2VLaW5kKCkpOwogICAgIH0KICAgICAK
ICAgICBVc2VLaW5kIHVzZUtpbmQoKSBjb25zdAogICAgIHsKLSAgICAgICAgQVNTRVJUKGlzU2V0
KCkpOworICAgICAgICBBU1NFUlQobm9kZSgpKTsKICAgICAgICAgdW5zaWduZWQgbWFza2VkID0g
bV9lbmNvZGVkV29yZCAmICgoKDEgPDwgc2hpZnQoKSkgLSAxKSk7CiAgICAgICAgIEFTU0VSVCht
YXNrZWQgPCBMYXN0VXNlS2luZCk7CiAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxVc2VLaW5k
PihtYXNrZWQpOwogICAgIH0KICAgICB2b2lkIHNldFVzZUtpbmQoVXNlS2luZCB1c2VLaW5kKQog
ICAgIHsKLSAgICAgICAgQVNTRVJUKGlzU2V0KCkpOwotICAgICAgICBtX2VuY29kZWRXb3JkID0g
bWFrZVdvcmQoaW5kZXgoKSwgdXNlS2luZCk7CisgICAgICAgIEFTU0VSVChub2RlKCkpOworICAg
ICAgICBtX2VuY29kZWRXb3JkID0gbWFrZVdvcmQobm9kZSgpLCB1c2VLaW5kKTsKICAgICB9CiAg
ICAgCi0gICAgYm9vbCBpc1NldCgpIGNvbnN0IHsgcmV0dXJuIGluZGV4VW5jaGVja2VkKCkgIT0g
Tm9Ob2RlOyB9CisgICAgYm9vbCBpc1NldCgpIGNvbnN0IHsgcmV0dXJuICEhbm9kZSgpOyB9CiAg
ICAgCiAgICAgdHlwZWRlZiB2b2lkKiBFZGdlOjoqVW5zcGVjaWZpZWRCb29sVHlwZTsKICAgICBv
cGVyYXRvciBVbnNwZWNpZmllZEJvb2xUeXBlKigpIGNvbnN0IHsgcmV0dXJuIHJlaW50ZXJwcmV0
X2Nhc3Q8VW5zcGVjaWZpZWRCb29sVHlwZSo+KGlzU2V0KCkpOyB9CkBAIC05NiwzNCArOTQsMzUg
QEAgcHVibGljOgogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgQWRqYWNlbmN5TGlzdDsKICAg
ICAKLSAgICBzdGF0aWMgdWludDMyX3Qgc2hpZnQoKSB7IHJldHVybiA0OyB9CisgICAgc3RhdGlj
IHVpbnQzMl90IHNoaWZ0KCkgeyByZXR1cm4gMjsgfQogICAgIAotICAgIHN0YXRpYyBpbnQzMl90
IG1ha2VXb3JkKE5vZGVJbmRleCBub2RlSW5kZXgsIFVzZUtpbmQgdXNlS2luZCkKKyAgICBzdGF0
aWMgdWludHB0cl90IG1ha2VXb3JkKE5vZGUqIG5vZGUsIFVzZUtpbmQgdXNlS2luZCkKICAgICB7
Ci0gICAgICAgIEFTU0VSVChzdGF0aWNfY2FzdDx1aW50MzJfdD4oKChzdGF0aWNfY2FzdDxpbnQz
Ml90Pihub2RlSW5kZXgpIDw8IHNoaWZ0KCkpID4+IHNoaWZ0KCkpKSA9PSBub2RlSW5kZXgpOwor
ICAgICAgICB1aW50cHRyX3QgdmFsdWUgPSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90Pihub2RlKTsK
KyAgICAgICAgQVNTRVJUKCEodmFsdWUgJiAoKDEgPDwgc2hpZnQoKSkgLSAxKSkpOwogICAgICAg
ICBBU1NFUlQodXNlS2luZCA+PSAwICYmIHVzZUtpbmQgPCBMYXN0VXNlS2luZCk7CiAgICAgICAg
IEFTU0VSVChMYXN0VXNlS2luZCA8PSAoMSA8PCBzaGlmdCgpKSk7Ci0gICAgICAgIHJldHVybiAo
bm9kZUluZGV4IDw8IHNoaWZ0KCkpIHwgdXNlS2luZDsKKyAgICAgICAgcmV0dXJuIHZhbHVlIHwg
c3RhdGljX2Nhc3Q8dWludHB0cl90Pih1c2VLaW5kKTsKICAgICB9CiAgICAgCi0gICAgaW50MzJf
dCBtX2VuY29kZWRXb3JkOworICAgIHVpbnRwdHJfdCBtX2VuY29kZWRXb3JkOwogfTsKIAotaW5s
aW5lIGJvb2wgb3BlcmF0b3I9PShFZGdlIG5vZGVVc2UsIE5vZGVJbmRleCBub2RlSW5kZXgpCitp
bmxpbmUgYm9vbCBvcGVyYXRvcj09KEVkZ2UgZWRnZSwgTm9kZSogbm9kZSkKIHsKLSAgICByZXR1
cm4gbm9kZVVzZS5pbmRleFVuY2hlY2tlZCgpID09IG5vZGVJbmRleDsKKyAgICByZXR1cm4gZWRn
ZS5ub2RlKCkgPT0gbm9kZTsKIH0KLWlubGluZSBib29sIG9wZXJhdG9yPT0oTm9kZUluZGV4IG5v
ZGVJbmRleCwgRWRnZSBub2RlVXNlKQoraW5saW5lIGJvb2wgb3BlcmF0b3I9PShOb2RlKiBub2Rl
LCBFZGdlIGVkZ2UpCiB7Ci0gICAgcmV0dXJuIG5vZGVVc2UuaW5kZXhVbmNoZWNrZWQoKSA9PSBu
b2RlSW5kZXg7CisgICAgcmV0dXJuIGVkZ2Uubm9kZSgpID09IG5vZGU7CiB9Ci1pbmxpbmUgYm9v
bCBvcGVyYXRvciE9KEVkZ2Ugbm9kZVVzZSwgTm9kZUluZGV4IG5vZGVJbmRleCkKK2lubGluZSBi
b29sIG9wZXJhdG9yIT0oRWRnZSBlZGdlLCBOb2RlKiBub2RlKQogewotICAgIHJldHVybiBub2Rl
VXNlLmluZGV4VW5jaGVja2VkKCkgIT0gbm9kZUluZGV4OworICAgIHJldHVybiBlZGdlLm5vZGUo
KSAhPSBub2RlOwogfQotaW5saW5lIGJvb2wgb3BlcmF0b3IhPShOb2RlSW5kZXggbm9kZUluZGV4
LCBFZGdlIG5vZGVVc2UpCitpbmxpbmUgYm9vbCBvcGVyYXRvciE9KE5vZGUqIG5vZGUsIEVkZ2Ug
ZWRnZSkKIHsKLSAgICByZXR1cm4gbm9kZVVzZS5pbmRleFVuY2hlY2tlZCgpICE9IG5vZGVJbmRl
eDsKKyAgICByZXR1cm4gZWRnZS5ub2RlKCkgIT0gbm9kZTsKIH0KIAogfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkRGRwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhh
c2UuY3BwCShyZXZpc2lvbiAxNDA1MDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0ZpeHVwUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTIsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01OCwyMSArNTgsMjEgQEAgcHJpdmF0ZToK
ICAgICAgICAgQVNTRVJUKGJsb2NrLT5pc1JlYWNoYWJsZSk7CiAgICAgICAgIG1fYmxvY2sgPSBi
bG9jazsKICAgICAgICAgZm9yIChtX2luZGV4SW5CbG9jayA9IDA7IG1faW5kZXhJbkJsb2NrIDwg
YmxvY2stPnNpemUoKTsgKyttX2luZGV4SW5CbG9jaykgewotICAgICAgICAgICAgbV9jb21waWxl
SW5kZXggPSBibG9jay0+YXQobV9pbmRleEluQmxvY2spOwotICAgICAgICAgICAgZml4dXBOb2Rl
KG1fZ3JhcGhbbV9jb21waWxlSW5kZXhdKTsKKyAgICAgICAgICAgIG1fY3VycmVudE5vZGUgPSBi
bG9jay0+YXQobV9pbmRleEluQmxvY2spOworICAgICAgICAgICAgZml4dXBOb2RlKG1fY3VycmVu
dE5vZGUpOwogICAgICAgICB9CiAgICAgICAgIG1faW5zZXJ0aW9uU2V0LmV4ZWN1dGUoYmxvY2sp
OwogICAgIH0KICAgICAKLSAgICB2b2lkIGZpeHVwTm9kZShOb2RlJiBub2RlKQorICAgIHZvaWQg
Zml4dXBOb2RlKE5vZGUqIG5vZGUpCiAgICAgewotICAgICAgICBpZiAoIW5vZGUuc2hvdWxkR2Vu
ZXJhdGUoKSkKKyAgICAgICAgaWYgKCFub2RlLT5zaG91bGRHZW5lcmF0ZSgpKQogICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICAKLSAgICAgICAgTm9kZVR5cGUgb3AgPSBub2RlLm9wKCk7Cisg
ICAgICAgIE5vZGVUeXBlIG9wID0gbm9kZS0+b3AoKTsKIAogI2lmIERGR19FTkFCTEUoREVCVUdf
UFJPUEFHQVRJT05fVkVSQk9TRSkKLSAgICAgICAgZGF0YUxvZ0YoIiAgICVzIEAldTogIiwgR3Jh
cGg6Om9wTmFtZShvcCksIG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAgZGF0YUxvZ0YoIiAgICVz
IEAldTogIiwgR3JhcGg6Om9wTmFtZShvcCksIG5vZGUtPmluZGV4KCkpOwogI2VuZGlmCiAgICAg
ICAgIAogICAgICAgICBzd2l0Y2ggKG9wKSB7CkBAIC04MCw4MCArODAsNzEgQEAgcHJpdmF0ZToK
ICAgICAgICAgICAgIGlmIChtX2dyYXBoLm1fZml4cG9pbnRTdGF0ZSA+IEJlZm9yZUZpeHBvaW50
KQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBOb2Rl
KiBub2RlUHRyID0gJm5vZGU7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmICghaXNJbnQz
MlNwZWN1bGF0aW9uKG1fZ3JhcGhbbV9jb21waWxlSW5kZXhdLnByZWRpY3Rpb24oKSkpCisgICAg
ICAgICAgICBpZiAoIWlzSW50MzJTcGVjdWxhdGlvbihub2RlLT5wcmVkaWN0aW9uKCkpKQogICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgaWYgKGNvZGVCbG9jaygpLT5pZGVudGlm
aWVyKG5vZGVQdHItPmlkZW50aWZpZXJOdW1iZXIoKSkgIT0gZ2xvYmFsRGF0YSgpLnByb3BlcnR5
TmFtZXMtPmxlbmd0aCkKKyAgICAgICAgICAgIGlmIChjb2RlQmxvY2soKS0+aWRlbnRpZmllcihu
b2RlLT5pZGVudGlmaWVyTnVtYmVyKCkpICE9IGdsb2JhbERhdGEoKS5wcm9wZXJ0eU5hbWVzLT5s
ZW5ndGgpCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBBcnJheVByb2ZpbGUq
IGFycmF5UHJvZmlsZSA9IAotICAgICAgICAgICAgICAgIG1fZ3JhcGguYmFzZWxpbmVDb2RlQmxv
Y2tGb3Iobm9kZVB0ci0+Y29kZU9yaWdpbiktPmdldEFycmF5UHJvZmlsZSgKLSAgICAgICAgICAg
ICAgICAgICAgbm9kZVB0ci0+Y29kZU9yaWdpbi5ieXRlY29kZUluZGV4KTsKKyAgICAgICAgICAg
ICAgICBtX2dyYXBoLmJhc2VsaW5lQ29kZUJsb2NrRm9yKG5vZGUtPmNvZGVPcmlnaW4pLT5nZXRB
cnJheVByb2ZpbGUoCisgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNvZGVPcmlnaW4uYnl0ZWNv
ZGVJbmRleCk7CiAgICAgICAgICAgICBBcnJheU1vZGUgYXJyYXlNb2RlID0gQXJyYXlNb2RlKEFy
cmF5OjpTZWxlY3RVc2luZ1ByZWRpY3Rpb25zKTsKICAgICAgICAgICAgIGlmIChhcnJheVByb2Zp
bGUpIHsKLSAgICAgICAgICAgICAgICBhcnJheVByb2ZpbGUtPmNvbXB1dGVVcGRhdGVkUHJlZGlj
dGlvbihtX2dyYXBoLmJhc2VsaW5lQ29kZUJsb2NrRm9yKG5vZGUuY29kZU9yaWdpbikpOworICAg
ICAgICAgICAgICAgIGFycmF5UHJvZmlsZS0+Y29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKG1fZ3Jh
cGguYmFzZWxpbmVDb2RlQmxvY2tGb3Iobm9kZS0+Y29kZU9yaWdpbikpOwogICAgICAgICAgICAg
ICAgIGFycmF5TW9kZSA9IEFycmF5TW9kZTo6ZnJvbU9ic2VydmVkKGFycmF5UHJvZmlsZSwgQXJy
YXk6OlJlYWQsIGZhbHNlKTsKICAgICAgICAgICAgICAgICBhcnJheU1vZGUgPSBhcnJheU1vZGUu
cmVmaW5lKAotICAgICAgICAgICAgICAgICAgICBtX2dyYXBoW25vZGUuY2hpbGQxKCldLnByZWRp
Y3Rpb24oKSwKLSAgICAgICAgICAgICAgICAgICAgbV9ncmFwaFttX2NvbXBpbGVJbmRleF0ucHJl
ZGljdGlvbigpKTsKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCktPnByZWRpY3Rp
b24oKSwgbm9kZS0+cHJlZGljdGlvbigpKTsKICAgICAgICAgICAgICAgICBpZiAoYXJyYXlNb2Rl
LnN1cHBvcnRzTGVuZ3RoKCkgJiYgYXJyYXlQcm9maWxlLT5oYXNEZWZpbml0ZVN0cnVjdHVyZSgp
KSB7CiAgICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCiAgICAg
ICAgICAgICAgICAgICAgICAgICBtX2luZGV4SW5CbG9jaywgUmVmQ2hpbGRyZW4sIERvbnRSZWZO
b2RlLCBTcGVjTm9uZSwgQ2hlY2tTdHJ1Y3R1cmUsCi0gICAgICAgICAgICAgICAgICAgICAgICBu
b2RlUHRyLT5jb2RlT3JpZ2luLCBPcEluZm8obV9ncmFwaC5hZGRTdHJ1Y3R1cmVTZXQoYXJyYXlQ
cm9maWxlLT5leHBlY3RlZFN0cnVjdHVyZSgpKSksCi0gICAgICAgICAgICAgICAgICAgICAgICBu
b2RlUHRyLT5jaGlsZDEoKS5pbmRleCgpKTsKLSAgICAgICAgICAgICAgICAgICAgbm9kZVB0ciA9
ICZtX2dyYXBoW21fY29tcGlsZUluZGV4XTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUt
PmNvZGVPcmlnaW4sIE9wSW5mbyhtX2dyYXBoLmFkZFN0cnVjdHVyZVNldChhcnJheVByb2ZpbGUt
PmV4cGVjdGVkU3RydWN0dXJlKCkpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNo
aWxkMSgpLm5vZGUoKSk7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgICAgICBhcnJheU1vZGUgPSBhcnJheU1vZGUucmVmaW5lKAotICAgICAgICAg
ICAgICAgICAgICBtX2dyYXBoW25vZGUuY2hpbGQxKCldLnByZWRpY3Rpb24oKSwKLSAgICAgICAg
ICAgICAgICAgICAgbV9ncmFwaFttX2NvbXBpbGVJbmRleF0ucHJlZGljdGlvbigpKTsKLSAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIGFycmF5TW9kZSA9
IGFycmF5TW9kZS5yZWZpbmUobm9kZS0+Y2hpbGQxKCktPnByZWRpY3Rpb24oKSwgbm9kZS0+cHJl
ZGljdGlvbigpKTsKICAgICAgICAgICAgIGlmICghYXJyYXlNb2RlLnN1cHBvcnRzTGVuZ3RoKCkp
CiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBub2RlUHRyLT5zZXRPcChHZXRB
cnJheUxlbmd0aCk7Ci0gICAgICAgICAgICBBU1NFUlQobm9kZVB0ci0+ZmxhZ3MoKSAmIE5vZGVN
dXN0R2VuZXJhdGUpOwotICAgICAgICAgICAgbm9kZVB0ci0+Y2xlYXJGbGFncyhOb2RlTXVzdEdl
bmVyYXRlIHwgTm9kZUNsb2JiZXJzV29ybGQpOwotICAgICAgICAgICAgbV9ncmFwaC5kZXJlZiht
X2NvbXBpbGVJbmRleCk7Ci0gICAgICAgICAgICBub2RlUHRyLT5zZXRBcnJheU1vZGUoYXJyYXlN
b2RlKTsKKyAgICAgICAgICAgIG5vZGUtPnNldE9wKEdldEFycmF5TGVuZ3RoKTsKKyAgICAgICAg
ICAgIEFTU0VSVChub2RlLT5mbGFncygpICYgTm9kZU11c3RHZW5lcmF0ZSk7CisgICAgICAgICAg
ICBub2RlLT5jbGVhckZsYWdzKE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlQ2xvYmJlcnNXb3JsZCk7
CisgICAgICAgICAgICBtX2dyYXBoLmRlcmVmKG5vZGUpOworICAgICAgICAgICAgbm9kZS0+c2V0
QXJyYXlNb2RlKGFycmF5TW9kZSk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIE5vZGVJbmRl
eCBzdG9yYWdlID0gY2hlY2tBcnJheShhcnJheU1vZGUsIG5vZGVQdHItPmNvZGVPcmlnaW4sIG5v
ZGVQdHItPmNoaWxkMSgpLmluZGV4KCksIE5vTm9kZSwgbGVuZ3RoTmVlZHNTdG9yYWdlLCBub2Rl
UHRyLT5zaG91bGRHZW5lcmF0ZSgpKTsKLSAgICAgICAgICAgIGlmIChzdG9yYWdlID09IE5vTm9k
ZSkKKyAgICAgICAgICAgIE5vZGUqIHN0b3JhZ2UgPSBjaGVja0FycmF5KGFycmF5TW9kZSwgbm9k
ZS0+Y29kZU9yaWdpbiwgbm9kZS0+Y2hpbGQxKCkubm9kZSgpLCAwLCBsZW5ndGhOZWVkc1N0b3Jh
Z2UsIG5vZGUtPnNob3VsZEdlbmVyYXRlKCkpOworICAgICAgICAgICAgaWYgKCFzdG9yYWdlKQog
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBub2RlUHRy
ID0gJm1fZ3JhcGhbbV9jb21waWxlSW5kZXhdOwotICAgICAgICAgICAgbm9kZVB0ci0+Y2hpbGRy
ZW4uY2hpbGQyKCkgPSBFZGdlKHN0b3JhZ2UpOworICAgICAgICAgICAgbm9kZS0+Y2hpbGRyZW4u
Y2hpbGQyKCkgPSBFZGdlKHN0b3JhZ2UpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0K
ICAgICAgICAgY2FzZSBHZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlOiB7Ci0gICAgICAgICAgICBB
U1NFUlQobm9kZS5hcnJheU1vZGUoKS5jYW5DU0VTdG9yYWdlKCkpOworICAgICAgICAgICAgQVNT
RVJUKG5vZGUtPmFycmF5TW9kZSgpLmNhbkNTRVN0b3JhZ2UoKSk7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgfQogICAgICAgICBjYXNlIEdldEJ5VmFsOiB7Ci0gICAgICAgICAgICBub2Rl
LnNldEFycmF5TW9kZSgKLSAgICAgICAgICAgICAgICBub2RlLmFycmF5TW9kZSgpLnJlZmluZSgK
LSAgICAgICAgICAgICAgICAgICAgbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5wcmVkaWN0aW9uKCks
Ci0gICAgICAgICAgICAgICAgICAgIG1fZ3JhcGhbbm9kZS5jaGlsZDIoKV0ucHJlZGljdGlvbigp
LAotICAgICAgICAgICAgICAgICAgICBTcGVjTm9uZSwgbm9kZS5mbGFncygpKSk7CisgICAgICAg
ICAgICBub2RlLT5zZXRBcnJheU1vZGUoCisgICAgICAgICAgICAgICAgbm9kZS0+YXJyYXlNb2Rl
KCkucmVmaW5lKAorICAgICAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDEoKS0+cHJlZGljdGlv
bigpLAorICAgICAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDIoKS0+cHJlZGljdGlvbigpLAor
ICAgICAgICAgICAgICAgICAgICBTcGVjTm9uZSwgbm9kZS0+ZmxhZ3MoKSkpOwogICAgICAgICAg
ICAgCi0gICAgICAgICAgICBibGVzc0FycmF5T3BlcmF0aW9uKG5vZGUuY2hpbGQxKCksIG5vZGUu
Y2hpbGQyKCksIDIpOworICAgICAgICAgICAgYmxlc3NBcnJheU9wZXJhdGlvbihub2RlLT5jaGls
ZDEoKSwgbm9kZS0+Y2hpbGQyKCksIDIpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBOb2Rl
KiBub2RlUHRyID0gJm1fZ3JhcGhbbV9jb21waWxlSW5kZXhdOwotICAgICAgICAgICAgQXJyYXlN
b2RlIGFycmF5TW9kZSA9IG5vZGVQdHItPmFycmF5TW9kZSgpOworICAgICAgICAgICAgQXJyYXlN
b2RlIGFycmF5TW9kZSA9IG5vZGUtPmFycmF5TW9kZSgpOwogICAgICAgICAgICAgaWYgKGFycmF5
TW9kZS50eXBlKCkgPT0gQXJyYXk6OkRvdWJsZQogICAgICAgICAgICAgICAgICYmIGFycmF5TW9k
ZS5hcnJheUNsYXNzKCkgPT0gQXJyYXk6Ok9yaWdpbmFsQXJyYXkKICAgICAgICAgICAgICAgICAm
JiBhcnJheU1vZGUuc3BlY3VsYXRpb24oKSA9PSBBcnJheTo6SW5Cb3VuZHMKICAgICAgICAgICAg
ICAgICAmJiBhcnJheU1vZGUuY29udmVyc2lvbigpID09IEFycmF5OjpBc0lzCi0gICAgICAgICAg
ICAgICAgJiYgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZVB0ci0+Y29kZU9yaWdpbiktPmFy
cmF5UHJvdG90eXBlQ2hhaW5Jc1NhbmUoKQotICAgICAgICAgICAgICAgICYmICEobm9kZVB0ci0+
ZmxhZ3MoKSAmIE5vZGVVc2VkQXNPdGhlcikpCi0gICAgICAgICAgICAgICAgbm9kZVB0ci0+c2V0
QXJyYXlNb2RlKGFycmF5TW9kZS53aXRoU3BlY3VsYXRpb24oQXJyYXk6OlNhbmVDaGFpbikpOwor
ICAgICAgICAgICAgICAgICYmIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPmNvZGVPcmln
aW4pLT5hcnJheVByb3RvdHlwZUNoYWluSXNTYW5lKCkKKyAgICAgICAgICAgICAgICAmJiAhKG5v
ZGUtPmZsYWdzKCkgJiBOb2RlVXNlZEFzT3RoZXIpKQorICAgICAgICAgICAgICAgIG5vZGUtPnNl
dEFycmF5TW9kZShhcnJheU1vZGUud2l0aFNwZWN1bGF0aW9uKEFycmF5OjpTYW5lQ2hhaW4pKTsK
ICAgICAgICAgICAgIAogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2Fz
ZSBTdHJpbmdDaGFyQXQ6CiAgICAgICAgIGNhc2UgU3RyaW5nQ2hhckNvZGVBdDogewogICAgICAg
ICAgICAgLy8gQ3VycmVudGx5IHdlIGhhdmUgbm8gZ29vZCB3YXkgb2YgcmVmaW5pbmcgdGhlc2Uu
Ci0gICAgICAgICAgICBBU1NFUlQobm9kZS5hcnJheU1vZGUoKSA9PSBBcnJheU1vZGUoQXJyYXk6
OlN0cmluZykpOwotICAgICAgICAgICAgYmxlc3NBcnJheU9wZXJhdGlvbihub2RlLmNoaWxkMSgp
LCBub2RlLmNoaWxkMigpLCAyKTsKKyAgICAgICAgICAgIEFTU0VSVChub2RlLT5hcnJheU1vZGUo
KSA9PSBBcnJheU1vZGUoQXJyYXk6OlN0cmluZykpOworICAgICAgICAgICAgYmxlc3NBcnJheU9w
ZXJhdGlvbihub2RlLT5jaGlsZDEoKSwgbm9kZS0+Y2hpbGQyKCksIDIpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIApAQCAtMTY3LDE1ICsxNTgsMTQgQEAgcHJp
dmF0ZToKICAgICAgICAgICAgIC8vIGlnbm9yZWQuIFRoYXQncyBiZWNhdXNlIEFycmF5UHVzaCBj
YW4ndCBoYW5kbGUgYW55IGFycmF5IG1vZGVzIHRoYXQgYXJlbid0CiAgICAgICAgICAgICAvLyBh
cnJheS1yZWxhdGVkIC0gc28gaWYgcmVmaW5lKCkgdHVybmVkIHRoaXMgaW50byBhICJHZW5lcmlj
IiBBcnJheVB1c2ggdGhlbgogICAgICAgICAgICAgLy8gdGhhdCB3b3VsZCBicmVhayB0aGluZ3Mu
Ci0gICAgICAgICAgICBub2RlLnNldEFycmF5TW9kZSgKLSAgICAgICAgICAgICAgICBub2RlLmFy
cmF5TW9kZSgpLnJlZmluZSgKLSAgICAgICAgICAgICAgICAgICAgbV9ncmFwaFtub2RlLmNoaWxk
MSgpXS5wcmVkaWN0aW9uKCkgJiBTcGVjQ2VsbCwKKyAgICAgICAgICAgIG5vZGUtPnNldEFycmF5
TW9kZSgKKyAgICAgICAgICAgICAgICBub2RlLT5hcnJheU1vZGUoKS5yZWZpbmUoCisgICAgICAg
ICAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLT5wcmVkaWN0aW9uKCkgJiBTcGVjQ2VsbCwKICAg
ICAgICAgICAgICAgICAgICAgU3BlY0ludDMyLAotICAgICAgICAgICAgICAgICAgICBtX2dyYXBo
W25vZGUuY2hpbGQyKCldLnByZWRpY3Rpb24oKSkpOwotICAgICAgICAgICAgYmxlc3NBcnJheU9w
ZXJhdGlvbihub2RlLmNoaWxkMSgpLCBFZGdlKCksIDIpOworICAgICAgICAgICAgICAgICAgICBu
b2RlLT5jaGlsZDIoKS0+cHJlZGljdGlvbigpKSk7CisgICAgICAgICAgICBibGVzc0FycmF5T3Bl
cmF0aW9uKG5vZGUtPmNoaWxkMSgpLCBFZGdlKCksIDIpOwogICAgICAgICAgICAgCi0gICAgICAg
ICAgICBOb2RlKiBub2RlUHRyID0gJm1fZ3JhcGhbbV9jb21waWxlSW5kZXhdOwotICAgICAgICAg
ICAgc3dpdGNoIChub2RlUHRyLT5hcnJheU1vZGUoKS50eXBlKCkpIHsKKyAgICAgICAgICAgIHN3
aXRjaCAobm9kZS0+YXJyYXlNb2RlKCkudHlwZSgpKSB7CiAgICAgICAgICAgICBjYXNlIEFycmF5
OjpEb3VibGU6CiAgICAgICAgICAgICAgICAgZml4RG91YmxlRWRnZSgxKTsKICAgICAgICAgICAg
ICAgICBicmVhazsKQEAgLTE4NiwxNSArMTc2LDE1IEBAIHByaXZhdGU6CiAgICAgICAgIH0KICAg
ICAgICAgICAgIAogICAgICAgICBjYXNlIEFycmF5UG9wOiB7Ci0gICAgICAgICAgICBibGVzc0Fy
cmF5T3BlcmF0aW9uKG5vZGUuY2hpbGQxKCksIEVkZ2UoKSwgMSk7CisgICAgICAgICAgICBibGVz
c0FycmF5T3BlcmF0aW9uKG5vZGUtPmNoaWxkMSgpLCBFZGdlKCksIDEpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBjYXNlIFZhbHVlVG9JbnQz
MjogewotICAgICAgICAgICAgaWYgKG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0uc2hvdWxkU3BlY3Vs
YXRlTnVtYmVyKCkKLSAgICAgICAgICAgICAgICAmJiBub2RlLm11c3RHZW5lcmF0ZSgpKSB7Ci0g
ICAgICAgICAgICAgICAgbm9kZS5jbGVhckZsYWdzKE5vZGVNdXN0R2VuZXJhdGUpOwotICAgICAg
ICAgICAgICAgIG1fZ3JhcGguZGVyZWYobV9jb21waWxlSW5kZXgpOworICAgICAgICAgICAgaWYg
KG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVOdW1iZXIoKQorICAgICAgICAgICAgICAg
ICYmIG5vZGUtPm11c3RHZW5lcmF0ZSgpKSB7CisgICAgICAgICAgICAgICAgbm9kZS0+Y2xlYXJG
bGFncyhOb2RlTXVzdEdlbmVyYXRlKTsKKyAgICAgICAgICAgICAgICBtX2dyYXBoLmRlcmVmKG5v
ZGUpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTIw
NSw4ICsxOTUsOCBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIEJpdFJTaGlmdDoKICAgICAgICAg
Y2FzZSBCaXRMU2hpZnQ6CiAgICAgICAgIGNhc2UgQml0VVJTaGlmdDogewotICAgICAgICAgICAg
Zml4SW50RWRnZShub2RlLmNoaWxkcmVuLmNoaWxkMSgpKTsKLSAgICAgICAgICAgIGZpeEludEVk
Z2Uobm9kZS5jaGlsZHJlbi5jaGlsZDIoKSk7CisgICAgICAgICAgICBmaXhJbnRFZGdlKG5vZGUt
PmNoaWxkcmVuLmNoaWxkMSgpKTsKKyAgICAgICAgICAgIGZpeEludEVkZ2Uobm9kZS0+Y2hpbGRy
ZW4uY2hpbGQyKCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAg
IApAQCAtMjE2LDkgKzIwNiw5IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgQ29tcGFyZUdyZWF0
ZXI6CiAgICAgICAgIGNhc2UgQ29tcGFyZUdyZWF0ZXJFcToKICAgICAgICAgY2FzZSBDb21wYXJl
U3RyaWN0RXE6IHsKLSAgICAgICAgICAgIGlmIChOb2RlOjpzaG91bGRTcGVjdWxhdGVJbnRlZ2Vy
KG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0sIG1fZ3JhcGhbbm9kZS5jaGlsZDIoKV0pKQorICAgICAg
ICAgICAgaWYgKE5vZGU6OnNob3VsZFNwZWN1bGF0ZUludGVnZXIobm9kZS0+Y2hpbGQxKCkubm9k
ZSgpLCBub2RlLT5jaGlsZDIoKS5ub2RlKCkpKQogICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgaWYgKCFOb2RlOjpzaG91bGRTcGVjdWxhdGVOdW1iZXIobV9ncmFwaFtub2RlLmNo
aWxkMSgpXSwgbV9ncmFwaFtub2RlLmNoaWxkMigpXSkpCisgICAgICAgICAgICBpZiAoIU5vZGU6
OnNob3VsZFNwZWN1bGF0ZU51bWJlcihub2RlLT5jaGlsZDEoKS5ub2RlKCksIG5vZGUtPmNoaWxk
MigpLm5vZGUoKSkpCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBmaXhEb3Vi
bGVFZGdlKDApOwogICAgICAgICAgICAgZml4RG91YmxlRWRnZSgxKTsKQEAgLTIyNiw0MyArMjE2
LDQxIEBAIHByaXZhdGU6CiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBjYXNlIExv
Z2ljYWxOb3Q6IHsKLSAgICAgICAgICAgIGlmIChtX2dyYXBoW25vZGUuY2hpbGQxKCldLnNob3Vs
ZFNwZWN1bGF0ZUludGVnZXIoKSkKKyAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS0+c2hv
dWxkU3BlY3VsYXRlSW50ZWdlcigpKQogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgaWYgKCFtX2dyYXBoW25vZGUuY2hpbGQxKCldLnNob3VsZFNwZWN1bGF0ZU51bWJlcigpKQor
ICAgICAgICAgICAgaWYgKCFub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlTnVtYmVyKCkp
CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBmaXhEb3VibGVFZGdlKDApOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBjYXNl
IEJyYW5jaDogewotICAgICAgICAgICAgaWYgKCFtX2dyYXBoW25vZGUuY2hpbGQxKCldLnNob3Vs
ZFNwZWN1bGF0ZUludGVnZXIoKQotICAgICAgICAgICAgICAgICYmIG1fZ3JhcGhbbm9kZS5jaGls
ZDEoKV0uc2hvdWxkU3BlY3VsYXRlTnVtYmVyKCkpCisgICAgICAgICAgICBpZiAoIW5vZGUtPmNo
aWxkMSgpLT5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkKKyAgICAgICAgICAgICAgICAmJiBub2Rl
LT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlTnVtYmVyKCkpCiAgICAgICAgICAgICAgICAgZml4
RG91YmxlRWRnZSgwKTsKIAotICAgICAgICAgICAgTm9kZSYgbXlOb2RlID0gbV9ncmFwaFttX2Nv
bXBpbGVJbmRleF07IC8vIHJlbG9hZCBiZWNhdXNlIHRoZSBncmFwaCBtYXkgaGF2ZSBjaGFuZ2Vk
Ci0gICAgICAgICAgICBFZGdlIGxvZ2ljYWxOb3RFZGdlID0gbXlOb2RlLmNoaWxkMSgpOwotICAg
ICAgICAgICAgTm9kZSYgbG9naWNhbE5vdCA9IG1fZ3JhcGhbbG9naWNhbE5vdEVkZ2VdOwotICAg
ICAgICAgICAgaWYgKGxvZ2ljYWxOb3Qub3AoKSA9PSBMb2dpY2FsTm90Ci0gICAgICAgICAgICAg
ICAgJiYgbG9naWNhbE5vdC5hZGp1c3RlZFJlZkNvdW50KCkgPT0gMSkgewotICAgICAgICAgICAg
ICAgIEVkZ2UgbmV3Q2hpbGRFZGdlID0gbG9naWNhbE5vdC5jaGlsZDEoKTsKLSAgICAgICAgICAg
ICAgICBpZiAobV9ncmFwaFtuZXdDaGlsZEVkZ2VdLmhhc0Jvb2xlYW5SZXN1bHQoKSkgeworICAg
ICAgICAgICAgTm9kZSogbG9naWNhbE5vdCA9IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKKyAgICAg
ICAgICAgIGlmIChsb2dpY2FsTm90LT5vcCgpID09IExvZ2ljYWxOb3QKKyAgICAgICAgICAgICAg
ICAmJiBsb2dpY2FsTm90LT5hZGp1c3RlZFJlZkNvdW50KCkgPT0gMSkgeworICAgICAgICAgICAg
ICAgIEVkZ2UgbmV3Q2hpbGRFZGdlID0gbG9naWNhbE5vdC0+Y2hpbGQxKCk7CisgICAgICAgICAg
ICAgICAgaWYgKG5ld0NoaWxkRWRnZS0+aGFzQm9vbGVhblJlc3VsdCgpKSB7CiAgICAgICAgICAg
ICAgICAgICAgIG1fZ3JhcGgucmVmKG5ld0NoaWxkRWRnZSk7Ci0gICAgICAgICAgICAgICAgICAg
IG1fZ3JhcGguZGVyZWYobG9naWNhbE5vdEVkZ2UpOworICAgICAgICAgICAgICAgICAgICBtX2dy
YXBoLmRlcmVmKGxvZ2ljYWxOb3QpOwogICAgICAgICAgICAgICAgICAgICBteU5vZGUuY2hpbGRy
ZW4uc2V0Q2hpbGQxKG5ld0NoaWxkRWRnZSk7CiAgICAgICAgICAgICAgICAgICAgIAotICAgICAg
ICAgICAgICAgICAgICBCbG9ja0luZGV4IHRvQmVUYWtlbiA9IG15Tm9kZS5ub3RUYWtlbkJsb2Nr
SW5kZXgoKTsKLSAgICAgICAgICAgICAgICAgICAgQmxvY2tJbmRleCB0b0JlTm90VGFrZW4gPSBt
eU5vZGUudGFrZW5CbG9ja0luZGV4KCk7Ci0gICAgICAgICAgICAgICAgICAgIG15Tm9kZS5zZXRU
YWtlbkJsb2NrSW5kZXgodG9CZVRha2VuKTsKLSAgICAgICAgICAgICAgICAgICAgbXlOb2RlLnNl
dE5vdFRha2VuQmxvY2tJbmRleCh0b0JlTm90VGFrZW4pOworICAgICAgICAgICAgICAgICAgICBC
bG9ja0luZGV4IHRvQmVUYWtlbiA9IG5vZGUtPm5vdFRha2VuQmxvY2tJbmRleCgpOworICAgICAg
ICAgICAgICAgICAgICBCbG9ja0luZGV4IHRvQmVOb3RUYWtlbiA9IG5vZGUtPnRha2VuQmxvY2tJ
bmRleCgpOworICAgICAgICAgICAgICAgICAgICBub2RlLT5zZXRUYWtlbkJsb2NrSW5kZXgodG9C
ZVRha2VuKTsKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+c2V0Tm90VGFrZW5CbG9ja0luZGV4
KHRvQmVOb3RUYWtlbik7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBjYXNlIFNldExv
Y2FsOiB7Ci0gICAgICAgICAgICBpZiAobm9kZS52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+aXNDYXB0
dXJlZCgpKQorICAgICAgICAgICAgaWYgKG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5pc0Nh
cHR1cmVkKCkpCiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBpZiAoIW5vZGUu
dmFyaWFibGVBY2Nlc3NEYXRhKCktPnNob3VsZFVzZURvdWJsZUZvcm1hdCgpKQorICAgICAgICAg
ICAgaWYgKCFub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+c2hvdWxkVXNlRG91YmxlRm9ybWF0
KCkpCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBmaXhEb3VibGVFZGdlKDAp
OwogICAgICAgICAgICAgYnJlYWs7CkBAIC0yNzIsNyArMjYwLDcgQEAgcHJpdmF0ZToKICAgICAg
ICAgY2FzZSBWYWx1ZUFkZDogewogICAgICAgICAgICAgaWYgKG1fZ3JhcGguYWRkU2hvdWxkU3Bl
Y3VsYXRlSW50ZWdlcihub2RlKSkKICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
IGlmICghTm9kZTo6c2hvdWxkU3BlY3VsYXRlTnVtYmVyRXhwZWN0aW5nRGVmaW5lZChtX2dyYXBo
W25vZGUuY2hpbGQxKCldLCBtX2dyYXBoW25vZGUuY2hpbGQyKCldKSkKKyAgICAgICAgICAgIGlm
ICghTm9kZTo6c2hvdWxkU3BlY3VsYXRlTnVtYmVyRXhwZWN0aW5nRGVmaW5lZChub2RlLT5jaGls
ZDEoKS5ub2RlKCksIG5vZGUtPmNoaWxkMigpLm5vZGUoKSkpCiAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICBmaXhEb3VibGVFZGdlKDApOwogICAgICAgICAgICAgZml4RG91Ymxl
RWRnZSgxKTsKQEAgLTI4MSw3ICsyNjksNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgCiAgICAg
ICAgIGNhc2UgQXJpdGhTdWI6IHsKICAgICAgICAgICAgIGlmIChtX2dyYXBoLmFkZFNob3VsZFNw
ZWN1bGF0ZUludGVnZXIobm9kZSkKLSAgICAgICAgICAgICAgICAmJiBub2RlLmNhblNwZWN1bGF0
ZUludGVnZXIoKSkKKyAgICAgICAgICAgICAgICAmJiBub2RlLT5jYW5TcGVjdWxhdGVJbnRlZ2Vy
KCkpCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBmaXhEb3VibGVFZGdlKDAp
OwogICAgICAgICAgICAgZml4RG91YmxlRWRnZSgxKTsKQEAgLTI5OCw4ICsyODYsOCBAQCBwcml2
YXRlOgogICAgICAgICBjYXNlIEFyaXRoTWluOgogICAgICAgICBjYXNlIEFyaXRoTWF4OgogICAg
ICAgICBjYXNlIEFyaXRoTW9kOiB7Ci0gICAgICAgICAgICBpZiAoTm9kZTo6c2hvdWxkU3BlY3Vs
YXRlSW50ZWdlckZvckFyaXRobWV0aWMobV9ncmFwaFtub2RlLmNoaWxkMSgpXSwgbV9ncmFwaFtu
b2RlLmNoaWxkMigpXSkKLSAgICAgICAgICAgICAgICAmJiBub2RlLmNhblNwZWN1bGF0ZUludGVn
ZXIoKSkKKyAgICAgICAgICAgIGlmIChOb2RlOjpzaG91bGRTcGVjdWxhdGVJbnRlZ2VyRm9yQXJp
dGhtZXRpYyhub2RlLT5jaGlsZDEoKS5ub2RlKCksIG5vZGUtPmNoaWxkMigpLm5vZGUoKSkKKyAg
ICAgICAgICAgICAgICAmJiBub2RlLT5jYW5TcGVjdWxhdGVJbnRlZ2VyKCkpCiAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICBmaXhEb3VibGVFZGdlKDApOwogICAgICAgICAgICAg
Zml4RG91YmxlRWRnZSgxKTsKQEAgLTMxNSw4ICszMDMsOCBAQCBwcml2YXRlOgogICAgICAgICB9
CiAKICAgICAgICAgY2FzZSBBcml0aERpdjogewotICAgICAgICAgICAgaWYgKE5vZGU6OnNob3Vs
ZFNwZWN1bGF0ZUludGVnZXJGb3JBcml0aG1ldGljKG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0sIG1f
Z3JhcGhbbm9kZS5jaGlsZDIoKV0pCi0gICAgICAgICAgICAgICAgJiYgbm9kZS5jYW5TcGVjdWxh
dGVJbnRlZ2VyKCkpIHsKKyAgICAgICAgICAgIGlmIChOb2RlOjpzaG91bGRTcGVjdWxhdGVJbnRl
Z2VyRm9yQXJpdGhtZXRpYyhub2RlLT5jaGlsZDEoKS5ub2RlKCksIG5vZGUtPmNoaWxkMigpLm5v
ZGUoKSkKKyAgICAgICAgICAgICAgICAmJiBub2RlLT5jYW5TcGVjdWxhdGVJbnRlZ2VyKCkpIHsK
ICAgICAgICAgICAgICAgICBpZiAoaXNYODYoKSkKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICAgICAgaW5qZWN0SW50MzJUb0RvdWJsZU5vZGUoMCk7CkBAIC0zMjQsMTIg
KzMxMiwxMSBAQCBwcml2YXRlOgogCiAgICAgICAgICAgICAgICAgLy8gV2UgZG9uJ3QgbmVlZCB0
byBkbyByZWYnaW5nIG9uIHRoZSBjaGlsZHJlbiBiZWNhdXNlIHdlJ3JlIHN0ZWFsaW5nIHRoZW0g
ZnJvbQogICAgICAgICAgICAgICAgIC8vIHRoZSBvcmlnaW5hbCBkaXZpc2lvbi4KLSAgICAgICAg
ICAgICAgICBOb2RlSW5kZXggbmV3RGl2aXNpb25JbmRleCA9IG1faW5zZXJ0aW9uU2V0Lmluc2Vy
dE5vZGUoCi0gICAgICAgICAgICAgICAgICAgIG1faW5kZXhJbkJsb2NrLCBEb250UmVmQ2hpbGRy
ZW4sIFJlZk5vZGUsIFNwZWNEb3VibGUsIG1fZ3JhcGhbbV9jb21waWxlSW5kZXhdKTsKLSAgICAg
ICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBtX2dyYXBoW21fY29tcGlsZUluZGV4XS5zZXRP
cChEb3VibGVBc0ludDMyKTsKLSAgICAgICAgICAgICAgICBtX2dyYXBoW21fY29tcGlsZUluZGV4
XS5jaGlsZHJlbi5pbml0aWFsaXplKEVkZ2UobmV3RGl2aXNpb25JbmRleCwgRG91YmxlVXNlKSwg
RWRnZSgpLCBFZGdlKCkpOworICAgICAgICAgICAgICAgIE5vZGUqIG5ld0RpdmlzaW9uID0gbV9p
bnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKKyAgICAgICAgICAgICAgICAgICAgbV9pbmRleEluQmxv
Y2ssIERvbnRSZWZDaGlsZHJlbiwgUmVmTm9kZSwgU3BlY0RvdWJsZSwgbm9kZSk7CiAgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICAgICAgbm9kZS0+c2V0T3AoRG91YmxlQXNJbnQzMik7Cisg
ICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGRyZW4uaW5pdGlhbGl6ZShFZGdlKG5ld0RpdmlzaW9u
LCBEb3VibGVVc2UpLCBFZGdlKCksIEVkZ2UoKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICBmaXhEb3VibGVFZGdlKDApOwpAQCAtMzM4LDggKzMy
NSw4IEBAIHByaXZhdGU6CiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBjYXNlIEFy
aXRoQWJzOiB7Ci0gICAgICAgICAgICBpZiAobV9ncmFwaFtub2RlLmNoaWxkMSgpXS5zaG91bGRT
cGVjdWxhdGVJbnRlZ2VyRm9yQXJpdGhtZXRpYygpCi0gICAgICAgICAgICAgICAgJiYgbm9kZS5j
YW5TcGVjdWxhdGVJbnRlZ2VyKCkpCisgICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnNo
b3VsZFNwZWN1bGF0ZUludGVnZXJGb3JBcml0aG1ldGljKCkKKyAgICAgICAgICAgICAgICAmJiBu
b2RlLT5jYW5TcGVjdWxhdGVJbnRlZ2VyKCkpCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICBmaXhEb3VibGVFZGdlKDApOwogICAgICAgICAgICAgYnJlYWs7CkBAIC0zNTgsMTUg
KzM0NSwxMyBAQCBwcml2YXRlOgogCiAgICAgICAgICAgICBub2RlLnNldEFycmF5TW9kZSgKICAg
ICAgICAgICAgICAgICBub2RlLmFycmF5TW9kZSgpLnJlZmluZSgKLSAgICAgICAgICAgICAgICAg
ICAgbV9ncmFwaFtjaGlsZDFdLnByZWRpY3Rpb24oKSwKLSAgICAgICAgICAgICAgICAgICAgbV9n
cmFwaFtjaGlsZDJdLnByZWRpY3Rpb24oKSwKLSAgICAgICAgICAgICAgICAgICAgbV9ncmFwaFtj
aGlsZDNdLnByZWRpY3Rpb24oKSkpOworICAgICAgICAgICAgICAgICAgICBjaGlsZDEtPnByZWRp
Y3Rpb24oKSwKKyAgICAgICAgICAgICAgICAgICAgY2hpbGQyLT5wcmVkaWN0aW9uKCksCisgICAg
ICAgICAgICAgICAgICAgIGNoaWxkMy0+cHJlZGljdGlvbigpKSk7CiAgICAgICAgICAgICAKICAg
ICAgICAgICAgIGJsZXNzQXJyYXlPcGVyYXRpb24oY2hpbGQxLCBjaGlsZDIsIDMpOwogICAgICAg
ICAgICAgCi0gICAgICAgICAgICBOb2RlKiBub2RlUHRyID0gJm1fZ3JhcGhbbV9jb21waWxlSW5k
ZXhdOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBzd2l0Y2ggKG5vZGVQdHItPmFycmF5TW9k
ZSgpLm1vZGVGb3JQdXQoKS50eXBlKCkpIHsKKyAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+YXJy
YXlNb2RlKCkubW9kZUZvclB1dCgpLnR5cGUoKSkgewogICAgICAgICAgICAgY2FzZSBBcnJheTo6
RG91YmxlOgogICAgICAgICAgICAgICAgIGZpeERvdWJsZUVkZ2UoMik7CiAgICAgICAgICAgICAg
ICAgYnJlYWs7CkBAIC0zNzcsNyArMzYyLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGNhc2Ug
QXJyYXk6OlVpbnQ4Q2xhbXBlZEFycmF5OgogICAgICAgICAgICAgY2FzZSBBcnJheTo6VWludDE2
QXJyYXk6CiAgICAgICAgICAgICBjYXNlIEFycmF5OjpVaW50MzJBcnJheToKLSAgICAgICAgICAg
ICAgICBpZiAoIW1fZ3JhcGhbY2hpbGQzXS5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpCisgICAg
ICAgICAgICAgICAgaWYgKCFjaGlsZDMtPnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKSkKICAgICAg
ICAgICAgICAgICAgICAgZml4RG91YmxlRWRnZSgyKTsKICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgIGNhc2UgQXJyYXk6OkZsb2F0MzJBcnJheToKQEAgLTM5MiwxMSArMzc3LDEx
IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBOZXdBcnJheTogewogICAg
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9ncmFwaC52YXJBcmdOdW1DaGlsZHJlbihub2Rl
KTsgaS0tOykgewotICAgICAgICAgICAgICAgIG5vZGUuc2V0SW5kZXhpbmdUeXBlKAorICAgICAg
ICAgICAgICAgIG5vZGUtPnNldEluZGV4aW5nVHlwZSgKICAgICAgICAgICAgICAgICAgICAgbGVh
c3RVcHBlckJvdW5kT2ZJbmRleGluZ1R5cGVBbmRUeXBlKAotICAgICAgICAgICAgICAgICAgICAg
ICAgbm9kZS5pbmRleGluZ1R5cGUoKSwgbV9ncmFwaFttX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUs
IGkpXS5wcmVkaWN0aW9uKCkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUuaW5kZXhp
bmdUeXBlKCksIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgaSktPnByZWRpY3Rpb24oKSkpOwog
ICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKG5vZGUuaW5kZXhpbmdUeXBlKCkgPT0gQXJy
YXlXaXRoRG91YmxlKSB7CisgICAgICAgICAgICBpZiAobm9kZS0+aW5kZXhpbmdUeXBlKCkgPT0g
QXJyYXlXaXRoRG91YmxlKSB7CiAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9n
cmFwaC52YXJBcmdOdW1DaGlsZHJlbihub2RlKTsgaS0tOykKICAgICAgICAgICAgICAgICAgICAg
Zml4RG91YmxlRWRnZShpKTsKICAgICAgICAgICAgIH0KQEAgLTQwOCwxNiArMzkzLDE1IEBAIHBy
aXZhdGU6CiAgICAgICAgIH0KIAogI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVS
Qk9TRSkKLSAgICAgICAgTm9kZSogbm9kZVB0ciA9ICZtX2dyYXBoW21fY29tcGlsZUluZGV4XTsK
LSAgICAgICAgaWYgKCEobm9kZVB0ci0+ZmxhZ3MoKSAmIE5vZGVIYXNWYXJBcmdzKSkgeworICAg
ICAgICBpZiAoIShub2RlLT5mbGFncygpICYgTm9kZUhhc1ZhckFyZ3MpKSB7CiAgICAgICAgICAg
ICBkYXRhTG9nRigibmV3IGNoaWxkcmVuOiAiKTsKLSAgICAgICAgICAgIG5vZGVQdHItPmR1bXBD
aGlsZHJlbihXVEY6OmRhdGFGaWxlKCkpOworICAgICAgICAgICAgbm9kZS0+ZHVtcENoaWxkcmVu
KFdURjo6ZGF0YUZpbGUoKSk7CiAgICAgICAgIH0KICAgICAgICAgZGF0YUxvZ0YoIlxuIik7CiAj
ZW5kaWYKICAgICB9CiAgICAgCi0gICAgTm9kZUluZGV4IGNoZWNrQXJyYXkoQXJyYXlNb2RlIGFy
cmF5TW9kZSwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBOb2RlSW5kZXggYXJyYXksIE5vZGVJbmRl
eCBpbmRleCwgYm9vbCAoKnN0b3JhZ2VDaGVjaykoY29uc3QgQXJyYXlNb2RlJikgPSBjYW5DU0VT
dG9yYWdlLCBib29sIHNob3VsZEdlbmVyYXRlID0gdHJ1ZSkKKyAgICBOb2RlKiBjaGVja0FycmF5
KEFycmF5TW9kZSBhcnJheU1vZGUsIENvZGVPcmlnaW4gY29kZU9yaWdpbiwgTm9kZSogYXJyYXks
IE5vZGUqIGluZGV4LCBib29sICgqc3RvcmFnZUNoZWNrKShjb25zdCBBcnJheU1vZGUmKSA9IGNh
bkNTRVN0b3JhZ2UsIGJvb2wgc2hvdWxkR2VuZXJhdGUgPSB0cnVlKQogICAgIHsKICAgICAgICAg
QVNTRVJUKGFycmF5TW9kZS5pc1NwZWNpZmljKCkpOwogICAgICAgICAKQEAgLTQyOCwxMSArNDEy
LDExIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgaWYgKG1faW5kZXhJbkJsb2NrID4gMCkg
ewogICAgICAgICAgICAgICAgICAgICAvLyBJZiB0aGUgcHJldmlvdXMgbm9kZSB3YXMgYSBDaGVj
a1N0cnVjdHVyZSBpbnNlcnRlZCBiZWNhdXNlIG9mIHN0dWZmCiAgICAgICAgICAgICAgICAgICAg
IC8vIHRoYXQgdGhlIGFycmF5IHByb2ZpbGUgdG9sZCB1cywgdGhlbiByZW1vdmUgaXQuCi0gICAg
ICAgICAgICAgICAgICAgIE5vZGUmIHByZXZpb3VzTm9kZSA9IG1fZ3JhcGhbbV9ibG9jay0+YXQo
bV9pbmRleEluQmxvY2sgLSAxKV07Ci0gICAgICAgICAgICAgICAgICAgIGlmIChwcmV2aW91c05v
ZGUub3AoKSA9PSBDaGVja1N0cnVjdHVyZQotICAgICAgICAgICAgICAgICAgICAgICAgJiYgcHJl
dmlvdXNOb2RlLmNoaWxkMSgpID09IGFycmF5Ci0gICAgICAgICAgICAgICAgICAgICAgICAmJiBw
cmV2aW91c05vZGUuY29kZU9yaWdpbiA9PSBjb2RlT3JpZ2luKQotICAgICAgICAgICAgICAgICAg
ICAgICAgcHJldmlvdXNOb2RlLnNldE9wQW5kRGVmYXVsdEZsYWdzKFBoYW50b20pOworICAgICAg
ICAgICAgICAgICAgICBOb2RlKiBwcmV2aW91c05vZGUgPSBibG9jay0+YXQobV9pbmRleEluQmxv
Y2sgLSAxKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHByZXZpb3VzTm9kZS0+b3AoKSA9PSBD
aGVja1N0cnVjdHVyZQorICAgICAgICAgICAgICAgICAgICAgICAgJiYgcHJldmlvdXNOb2RlLT5j
aGlsZDEoKSA9PSBhcnJheQorICAgICAgICAgICAgICAgICAgICAgICAgJiYgcHJldmlvdXNOb2Rl
LT5jb2RlT3JpZ2luID09IGNvZGVPcmlnaW4pCisgICAgICAgICAgICAgICAgICAgICAgICBwcmV2
aW91c05vZGUtPnNldE9wQW5kRGVmYXVsdEZsYWdzKFBoYW50b20pOwogICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNl
cnROb2RlKApAQCAtNDU2LDcgKzQ0MCw3IEBAIHByaXZhdGU6CiAgICAgICAgIH0KICAgICAgICAg
CiAgICAgICAgIGlmICghc3RvcmFnZUNoZWNrKGFycmF5TW9kZSkpCi0gICAgICAgICAgICByZXR1
cm4gTm9Ob2RlOworICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIAogICAgICAgICBpZiAo
YXJyYXlNb2RlLnVzZXNCdXR0ZXJmbHkoKSkgewogICAgICAgICAgICAgcmV0dXJuIG1faW5zZXJ0
aW9uU2V0Lmluc2VydE5vZGUoCkBAIC00NzcsMTQgKzQ2MSwxNCBAQCBwcml2YXRlOgogICAgIHsK
ICAgICAgICAgaWYgKG1fZ3JhcGgubV9maXhwb2ludFN0YXRlID4gQmVmb3JlRml4cG9pbnQpCiAg
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAKLSAgICAgICAgTm9kZSogbm9kZVB0ciA9
ICZtX2dyYXBoW21fY29tcGlsZUluZGV4XTsKICAgICAgICAgCi0gICAgICAgIHN3aXRjaCAobm9k
ZVB0ci0+YXJyYXlNb2RlKCkudHlwZSgpKSB7CisgICAgICAgIE5vZGUqIG5vZGUgPSBtX2N1cnJl
bnROb2RlOworICAgICAgICAKKyAgICAgICAgc3dpdGNoIChub2RlLT5hcnJheU1vZGUoKS50eXBl
KCkpIHsKICAgICAgICAgY2FzZSBBcnJheTo6Rm9yY2VFeGl0OiB7CiAgICAgICAgICAgICBtX2lu
c2VydGlvblNldC5pbnNlcnROb2RlKAogICAgICAgICAgICAgICAgIG1faW5kZXhJbkJsb2NrLCBE
b250UmVmQ2hpbGRyZW4sIERvbnRSZWZOb2RlLCBTcGVjTm9uZSwgRm9yY2VPU1JFeGl0LAotICAg
ICAgICAgICAgICAgIG5vZGVQdHItPmNvZGVPcmlnaW4pOworICAgICAgICAgICAgICAgIG5vZGUt
PmNvZGVPcmlnaW4pOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgICAg
ICAKQEAgLTQ5NywyNiArNDgxLDI2IEBAIHByaXZhdGU6CiAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgICAgICAKICAgICAgICAgZGVmYXVsdDogewotICAgICAgICAgICAgTm9kZUluZGV4IHN0
b3JhZ2UgPSBjaGVja0FycmF5KG5vZGVQdHItPmFycmF5TW9kZSgpLCBub2RlUHRyLT5jb2RlT3Jp
Z2luLCBiYXNlLmluZGV4KCksIGluZGV4LmluZGV4VW5jaGVja2VkKCkpOwotICAgICAgICAgICAg
aWYgKHN0b3JhZ2UgPT0gTm9Ob2RlKQorICAgICAgICAgICAgTm9kZSogc3RvcmFnZSA9IGNoZWNr
QXJyYXkobm9kZS0+YXJyYXlNb2RlKCksIG5vZGUtPmNvZGVPcmlnaW4sIGJhc2Uubm9kZSgpLCBp
bmRleC5ub2RlKCkpOworICAgICAgICAgICAgaWYgKCFzdG9yYWdlKQogICAgICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgICAgIAotICAgICAgICAgICAgbV9ncmFwaC5jaGlsZChtX2dyYXBo
W21fY29tcGlsZUluZGV4XSwgc3RvcmFnZUNoaWxkSWR4KSA9IEVkZ2Uoc3RvcmFnZSk7CisgICAg
ICAgICAgICBtX2dyYXBoLmNoaWxkKG5vZGUsIHN0b3JhZ2VDaGlsZElkeCkgPSBFZGdlKHN0b3Jh
Z2UpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9IH0KICAgICB9CiAgICAgCiAgICAg
dm9pZCBmaXhJbnRFZGdlKEVkZ2UmIGVkZ2UpCiAgICAgewotICAgICAgICBOb2RlJiBub2RlID0g
bV9ncmFwaFtlZGdlXTsKLSAgICAgICAgaWYgKG5vZGUub3AoKSAhPSBWYWx1ZVRvSW50MzIpCisg
ICAgICAgIE5vZGUqIG5vZGUgPSBlZGdlLm5vZGUoKTsKKyAgICAgICAgaWYgKG5vZGUtPm9wKCkg
IT0gVmFsdWVUb0ludDMyKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAKLSAgICAgICAg
aWYgKCFtX2dyYXBoW25vZGUuY2hpbGQxKCldLnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKSkKKyAg
ICAgICAgaWYgKCFub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKQogICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICAKICAgICAgICAgRWRnZSBvbGRFZGdlID0gZWRnZTsK
LSAgICAgICAgRWRnZSBuZXdFZGdlID0gbm9kZS5jaGlsZDEoKTsKKyAgICAgICAgRWRnZSBuZXdF
ZGdlID0gbm9kZS0+Y2hpbGQxKCk7CiAgICAgICAgIAogICAgICAgICBtX2dyYXBoLnJlZihuZXdF
ZGdlKTsKICAgICAgICAgbV9ncmFwaC5kZXJlZihvbGRFZGdlKTsKQEAgLTUyNiwxMSArNTEwLDEx
IEBAIHByaXZhdGU6CiAgICAgCiAgICAgdm9pZCBmaXhEb3VibGVFZGdlKHVuc2lnbmVkIGNoaWxk
SW5kZXgpCiAgICAgewotICAgICAgICBOb2RlJiBzb3VyY2UgPSBtX2dyYXBoW21fY29tcGlsZUlu
ZGV4XTsKKyAgICAgICAgTm9kZSogc291cmNlID0gbV9jdXJyZW50Tm9kZTsKICAgICAgICAgRWRn
ZSYgZWRnZSA9IG1fZ3JhcGguY2hpbGQoc291cmNlLCBjaGlsZEluZGV4KTsKICAgICAgICAgCi0g
ICAgICAgIGlmIChtX2dyYXBoW2VkZ2VdLnByZWRpY3Rpb24oKSAmIFNwZWNEb3VibGUpIHsKLSAg
ICAgICAgICAgIGVkZ2Uuc2V0VXNlS2luZChEb3VibGVVc2UpOworICAgICAgICBpZiAoZWRnZS0+
cHJlZGljdGlvbigpICYgU3BlY0RvdWJsZSkgeworICAgICAgICAgICAgZWRnZS0+c2V0VXNlS2lu
ZChEb3VibGVVc2UpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIApA
QCAtNTM5LDIzICs1MjMsMjIgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgaW5qZWN0SW50MzJUb0Rv
dWJsZU5vZGUodW5zaWduZWQgY2hpbGRJbmRleCkKICAgICB7Ci0gICAgICAgIE5vZGVJbmRleCBy
ZXN1bHRJbmRleCA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCisgICAgICAgIE5vZGUqIHJl
c3VsdCA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCiAgICAgICAgICAgICBtX2luZGV4SW5C
bG9jaywgRG9udFJlZkNoaWxkcmVuLCBSZWZOb2RlLCBTcGVjRG91YmxlLCBJbnQzMlRvRG91Ymxl
LAotICAgICAgICAgICAgbV9ncmFwaFttX2NvbXBpbGVJbmRleF0uY29kZU9yaWdpbiwKLSAgICAg
ICAgICAgIG1fZ3JhcGguY2hpbGQobV9ncmFwaFttX2NvbXBpbGVJbmRleF0sIGNoaWxkSW5kZXgp
LmluZGV4KCkpOworICAgICAgICAgICAgbV9jdXJyZW50Tm9kZS0+Y29kZU9yaWdpbiwgbV9ncmFw
aC5jaGlsZChtX2N1cnJlbnROb2RlLCBjaGlsZEluZGV4KS5ub2RlKCkpOwogICAgICAgICAKICNp
ZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCiAgICAgICAgIGRhdGFMb2dG
KAogICAgICAgICAgICAgIihyZXBsYWNpbmcgQCV1LT5AJXUgd2l0aCBAJXUtPkAldSkgIiwKLSAg
ICAgICAgICAgIG1fY29tcGlsZUluZGV4LCBtX2dyYXBoLmNoaWxkKG1fZ3JhcGhbbV9jb21waWxl
SW5kZXhdLCBjaGlsZEluZGV4KS5pbmRleCgpLCBtX2NvbXBpbGVJbmRleCwgcmVzdWx0SW5kZXgp
OworICAgICAgICAgICAgbV9jdXJyZW50Tm9kZS0+aW5kZXgoKSwgbV9ncmFwaC5jaGlsZChtX2N1
cnJlbnROb2RlLCBjaGlsZEluZGV4KS0+aW5kZXgoKSwgbV9jdXJyZW50Tm9kZS0+aW5kZXgoKSwg
cmVzdWx0LT5pbmRleCgpKTsKICNlbmRpZgogCi0gICAgICAgIG1fZ3JhcGguY2hpbGQobV9ncmFw
aFttX2NvbXBpbGVJbmRleF0sIGNoaWxkSW5kZXgpID0gRWRnZShyZXN1bHRJbmRleCwgRG91Ymxl
VXNlKTsKKyAgICAgICAgbV9ncmFwaC5jaGlsZChtX2N1cnJlbnROb2RlLCBjaGlsZEluZGV4KSA9
IEVkZ2UocmVzdWx0LCBEb3VibGVVc2UpOwogICAgIH0KIAogICAgIEJhc2ljQmxvY2sqIG1fYmxv
Y2s7CiAgICAgdW5zaWduZWQgbV9pbmRleEluQmxvY2s7Ci0gICAgTm9kZUluZGV4IG1fY29tcGls
ZUluZGV4OworICAgIE5vZGUqIG1fY3VycmVudE5vZGU7CiAgICAgSW5zZXJ0aW9uU2V0IG1faW5z
ZXJ0aW9uU2V0OwogfTsKICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
R3JhcGguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3Jh
cGguY3BwCShyZXZpc2lvbiAxNDA1MDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0dyYXBoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDYsNiArNDYsNyBAQCBHcmFwaDo6R3JhcGgo
SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBDCiAgICAgLCBtX2NvZGVCbG9jayhjb2RlQmxvY2sp
CiAgICAgLCBtX2NvbXBpbGF0aW9uKGdsb2JhbERhdGEubV9wZXJCeXRlY29kZVByb2ZpbGVyID8g
Z2xvYmFsRGF0YS5tX3BlckJ5dGVjb2RlUHJvZmlsZXItPm5ld0NvbXBpbGF0aW9uKGNvZGVCbG9j
aywgUHJvZmlsZXI6OkRGRykgOiAwKQogICAgICwgbV9wcm9maWxlZEJsb2NrKGNvZGVCbG9jay0+
YWx0ZXJuYXRpdmUoKSkKKyAgICAsIG1fYWxsb2NhdG9yKGdsb2JhbERhdGEubV9kZmdTdGF0ZS0+
bV9hbGxvY2F0b3IpCiAgICAgLCBtX2hhc0FyZ3VtZW50cyhmYWxzZSkKICAgICAsIG1fb3NyRW50
cnlCeXRlY29kZUluZGV4KG9zckVudHJ5Qnl0ZWNvZGVJbmRleCkKICAgICAsIG1fbXVzdEhhbmRs
ZVZhbHVlcyhtdXN0SGFuZGxlVmFsdWVzKQpAQCAtNTQsNiArNTUsMTEgQEAgR3JhcGg6OkdyYXBo
KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgQwogICAgIEFTU0VSVChtX3Byb2ZpbGVkQmxvY2sp
OwogfQogCitHcmFwaDo6fkdyYXBoKCkKK3sKKyAgICBtX2FsbG9jYXRvci5mcmVlQWxsKCk7Cit9
CisKIGNvbnN0IGNoYXIgKkdyYXBoOjpvcE5hbWUoTm9kZVR5cGUgb3ApCiB7CiAgICAgcmV0dXJu
IGRmZ09wTmFtZXNbb3BdOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFw
aC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAko
cmV2aXNpb24gMTQwNTA0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEs
IDIwMTIsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC0zNSw3ICszNSw5IEBACiAjaW5jbHVkZSAiREZHQXNzZW1i
bHlIZWxwZXJzLmgiCiAjaW5jbHVkZSAiREZHQmFzaWNCbG9jay5oIgogI2luY2x1ZGUgIkRGR0Rv
bWluYXRvcnMuaCIKKyNpbmNsdWRlICJERkdMb25nTGl2ZWRTdGF0ZS5oIgogI2luY2x1ZGUgIkRG
R05vZGUuaCIKKyNpbmNsdWRlICJERkdOb2RlQWxsb2NhdG9yLmgiCiAjaW5jbHVkZSAiREZHVmFy
aWFkaWNGdW5jdGlvbi5oIgogI2luY2x1ZGUgIkpTU3RhY2suaCIKICNpbmNsdWRlICJNZXRob2RP
ZkdldHRpbmdBVmFsdWVQcm9maWxlLmgiCkBAIC04Myw1NCArODUsNDggQEAgZW51bSBBZGRTcGVj
dWxhdGlvbk1vZGUgewogLy8KIC8vID09PSBHcmFwaCA9PT0KIC8vCi0vLyBUaGUgZGF0YWZsb3cg
Z3JhcGggaXMgYW4gb3JkZXJlZCB2ZWN0b3Igb2Ygbm9kZXMuCiAvLyBUaGUgb3JkZXIgbWF5IGJl
IHNpZ25pZmljYW50IGZvciBub2RlcyB3aXRoIHNpZGUtZWZmZWN0cyAocHJvcGVydHkgYWNjZXNz
ZXMsIHZhbHVlIGNvbnZlcnNpb25zKS4KIC8vIE5vZGVzIHRoYXQgYXJlICdkZWFkJyByZW1haW4g
aW4gdGhlIHZlY3RvciB3aXRoIHJlZkNvdW50IDAuCi1jbGFzcyBHcmFwaCA6IHB1YmxpYyBWZWN0
b3I8Tm9kZSwgNjQ+IHsKK2NsYXNzIEdyYXBoIHsKIHB1YmxpYzoKICAgICBHcmFwaChKU0dsb2Jh
bERhdGEmLCBDb2RlQmxvY2sqLCB1bnNpZ25lZCBvc3JFbnRyeUJ5dGVjb2RlSW5kZXgsIGNvbnN0
IE9wZXJhbmRzPEpTVmFsdWU+JiBtdXN0SGFuZGxlVmFsdWVzKTsKLSAgICAKLSAgICB1c2luZyBW
ZWN0b3I8Tm9kZSwgNjQ+OjpvcGVyYXRvcltdOwotICAgIHVzaW5nIFZlY3RvcjxOb2RlLCA2ND46
OmF0OwotICAgIAotICAgIE5vZGUmIG9wZXJhdG9yW10oRWRnZSBub2RlVXNlKSB7IHJldHVybiBh
dChub2RlVXNlLmluZGV4KCkpOyB9Ci0gICAgY29uc3QgTm9kZSYgb3BlcmF0b3JbXShFZGdlIG5v
ZGVVc2UpIGNvbnN0IHsgcmV0dXJuIGF0KG5vZGVVc2UuaW5kZXgoKSk7IH0KLSAgICAKLSAgICBO
b2RlJiBhdChFZGdlIG5vZGVVc2UpIHsgcmV0dXJuIGF0KG5vZGVVc2UuaW5kZXgoKSk7IH0KLSAg
ICBjb25zdCBOb2RlJiBhdChFZGdlIG5vZGVVc2UpIGNvbnN0IHsgcmV0dXJuIGF0KG5vZGVVc2Uu
aW5kZXgoKSk7IH0KKyAgICB+R3JhcGgoKTsKICAgICAKICAgICAvLyBNYXJrIGEgbm9kZSBhcyBi
ZWluZyByZWZlcmVuY2VkLgotICAgIE5vZGVJbmRleCByZWYoTm9kZUluZGV4IG5vZGVJbmRleCkK
KyAgICBOb2RlKiByZWYoTm9kZSogbm9kZSkKICAgICB7Ci0gICAgICAgIE5vZGUmIG5vZGUgPSBh
dChub2RlSW5kZXgpOwogICAgICAgICAvLyBJZiB0aGUgdmFsdWUgKGJlZm9yZSBpbmNyZW1lbnRp
bmcpIHdhcyBhdCByZWZDb3VudCB6ZXJvIHRoZW4gd2UgbmVlZCB0byByZWYgaXRzIGNoaWxkcmVu
LgotICAgICAgICBpZiAoIW5vZGUucG9zdGZpeFJlZigpKQotICAgICAgICAgICAgcmVmQ2hpbGRy
ZW4obm9kZUluZGV4KTsKLSAgICAgICAgcmV0dXJuIG5vZGVJbmRleDsKKyAgICAgICAgaWYgKCFu
b2RlLT5wb3N0Zml4UmVmKCkpCisgICAgICAgICAgICByZWZDaGlsZHJlbihub2RlKTsKKyAgICAg
ICAgcmV0dXJuIG5vZGU7CiAgICAgfQogICAgIEVkZ2UgcmVmKEVkZ2Ugbm9kZVVzZSkKICAgICB7
Ci0gICAgICAgIHJlZihub2RlVXNlLmluZGV4KCkpOworICAgICAgICByZWYobm9kZVVzZS5ub2Rl
KCkpOwogICAgICAgICByZXR1cm4gbm9kZVVzZTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBkZXJl
ZihOb2RlSW5kZXggbm9kZUluZGV4KQorICAgIHZvaWQgZGVyZWYoTm9kZSogbm9kZSkKICAgICB7
Ci0gICAgICAgIGlmIChhdChub2RlSW5kZXgpLnBvc3RmaXhEZXJlZigpID09IDEpCi0gICAgICAg
ICAgICBkZXJlZkNoaWxkcmVuKG5vZGVJbmRleCk7CisjaWYgIUFTU0VSVF9ESVNBQkxFRAorICAg
ICAgICBpZiAoIW5vZGUtPnJlZkNvdW50KCkpCisgICAgICAgICAgICBkdW1wKCk7CisjZW5kaWYK
KyAgICAgICAgaWYgKG5vZGUtPnBvc3RmaXhEZXJlZigpID09IDEpCisgICAgICAgICAgICBkZXJl
ZkNoaWxkcmVuKG5vZGUpOwogICAgIH0KICAgICB2b2lkIGRlcmVmKEVkZ2Ugbm9kZVVzZSkKICAg
ICB7Ci0gICAgICAgIGRlcmVmKG5vZGVVc2UuaW5kZXgoKSk7CisgICAgICAgIGRlcmVmKG5vZGVV
c2Uubm9kZSgpKTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBjaGFuZ2VJbmRleChFZGdlJiBlZGdl
LCBOb2RlSW5kZXggbmV3SW5kZXgsIGJvb2wgY2hhbmdlUmVmID0gdHJ1ZSkKKyAgICB2b2lkIGNo
YW5nZUNoaWxkKEVkZ2UmIGVkZ2UsIE5vZGUqIG5ld05vZGUsIGJvb2wgY2hhbmdlUmVmID0gdHJ1
ZSkKICAgICB7CiAgICAgICAgIGlmIChjaGFuZ2VSZWYpIHsKLSAgICAgICAgICAgIHJlZihuZXdJ
bmRleCk7Ci0gICAgICAgICAgICBkZXJlZihlZGdlLmluZGV4KCkpOworICAgICAgICAgICAgcmVm
KG5ld05vZGUpOworICAgICAgICAgICAgZGVyZWYoZWRnZS5ub2RlKCkpOwogICAgICAgICB9Ci0g
ICAgICAgIGVkZ2Uuc2V0SW5kZXgobmV3SW5kZXgpOworICAgICAgICBlZGdlLnNldE5vZGUobmV3
Tm9kZSk7CiAgICAgfQogICAgIAogICAgIHZvaWQgY2hhbmdlRWRnZShFZGdlJiBlZGdlLCBFZGdl
IG5ld0VkZ2UsIGJvb2wgY2hhbmdlUmVmID0gdHJ1ZSkKQEAgLTE0MiwxMSArMTM4LDExIEBAIHB1
YmxpYzoKICAgICAgICAgZWRnZSA9IG5ld0VkZ2U7CiAgICAgfQogICAgIAotICAgIHZvaWQgY29t
cGFyZUFuZFN3YXAoRWRnZSYgZWRnZSwgTm9kZUluZGV4IG9sZEluZGV4LCBOb2RlSW5kZXggbmV3
SW5kZXgsIGJvb2wgY2hhbmdlUmVmKQorICAgIHZvaWQgY29tcGFyZUFuZFN3YXAoRWRnZSYgZWRn
ZSwgTm9kZSogb2xkTm9kZSwgTm9kZSogbmV3Tm9kZSwgYm9vbCBjaGFuZ2VSZWYpCiAgICAgewot
ICAgICAgICBpZiAoZWRnZS5pbmRleCgpICE9IG9sZEluZGV4KQorICAgICAgICBpZiAoZWRnZS5u
b2RlKCkgIT0gb2xkTm9kZSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgY2hhbmdlSW5k
ZXgoZWRnZSwgbmV3SW5kZXgsIGNoYW5nZVJlZik7CisgICAgICAgIGNoYW5nZUNoaWxkKGVkZ2Us
IG5ld05vZGUsIGNoYW5nZVJlZik7CiAgICAgfQogICAgIAogICAgIHZvaWQgY29tcGFyZUFuZFN3
YXAoRWRnZSYgZWRnZSwgRWRnZSBvbGRFZGdlLCBFZGdlIG5ld0VkZ2UsIGJvb2wgY2hhbmdlUmVm
KQpAQCAtMTU2LDQ0ICsxNTIsMjkgQEAgcHVibGljOgogICAgICAgICBjaGFuZ2VFZGdlKGVkZ2Us
IG5ld0VkZ2UsIGNoYW5nZVJlZik7CiAgICAgfQogICAgIAotICAgIHZvaWQgY2xlYXJBbmREZXJl
ZkNoaWxkMShOb2RlJiBub2RlKQorICAgIHZvaWQgY2xlYXJBbmREZXJlZkNoaWxkKE5vZGUqIG5v
ZGUsIHVuc2lnbmVkIGluZGV4KQogICAgIHsKLSAgICAgICAgaWYgKCFub2RlLmNoaWxkMSgpKQor
ICAgICAgICBpZiAoIW5vZGUtPmNoaWxkcmVuLmNoaWxkKGluZGV4KSkKICAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgZGVyZWYobm9kZS5jaGlsZDEoKSk7Ci0gICAgICAgIG5vZGUuY2hpbGRy
ZW4uY2hpbGQxKCkgPSBFZGdlKCk7Ci0gICAgfQotCi0gICAgdm9pZCBjbGVhckFuZERlcmVmQ2hp
bGQyKE5vZGUmIG5vZGUpCi0gICAgewotICAgICAgICBpZiAoIW5vZGUuY2hpbGQyKCkpCi0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIGRlcmVmKG5vZGUuY2hpbGQyKCkpOwotICAgICAgICBu
b2RlLmNoaWxkcmVuLmNoaWxkMigpID0gRWRnZSgpOwotICAgIH0KLQotICAgIHZvaWQgY2xlYXJB
bmREZXJlZkNoaWxkMyhOb2RlJiBub2RlKQotICAgIHsKLSAgICAgICAgaWYgKCFub2RlLmNoaWxk
MygpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBkZXJlZihub2RlLmNoaWxkMygpKTsK
LSAgICAgICAgbm9kZS5jaGlsZHJlbi5jaGlsZDMoKSA9IEVkZ2UoKTsKKyAgICAgICAgZGVyZWYo
bm9kZS0+Y2hpbGRyZW4uY2hpbGQoaW5kZXgpKTsKKyAgICAgICAgbm9kZS5jaGlsZHJlbi5zZXRD
aGlsZChpbmRleCwgRWRnZSgpKTsKICAgICB9CisgICAgdm9pZCBjbGVhckFuZERlcmVmQ2hpbGQx
KE5vZGUqIG5vZGUpIHsgY2xlYXJBbmREZXJlZkNoaWxkKG5vZGUsIDApOyB9CisgICAgdm9pZCBj
bGVhckFuZERlcmVmQ2hpbGQyKE5vZGUqIG5vZGUpIHsgY2xlYXJBbmREZXJlZkNoaWxkKG5vZGUs
IDEpOyB9CisgICAgdm9pZCBjbGVhckFuZERlcmVmQ2hpbGQzKE5vZGUqIG5vZGUpIHsgY2xlYXJB
bmREZXJlZkNoaWxkKG5vZGUsIDIpOyB9CiAgICAgCiAjZGVmaW5lIERGR19ERUZJTkVfQUREX05P
REUodGVtcGxhdGVQcmUsIHRlbXBsYXRlUG9zdCwgdHlwZVBhcmFtcywgdmFsdWVQYXJhbXNDb21t
YSwgdmFsdWVQYXJhbXMsIHZhbHVlQXJncykgXAotICAgIHRlbXBsYXRlUHJlIHR5cGVQYXJhbXMg
dGVtcGxhdGVQb3N0IE5vZGVJbmRleCBhZGROb2RlKFJlZkNoaWxkcmVuTW9kZSByZWZDaGlsZHJl
bk1vZGUsIFJlZk5vZGVNb2RlIHJlZk5vZGVNb2RlLCBTcGVjdWxhdGVkVHlwZSB0eXBlIHZhbHVl
UGFyYW1zQ29tbWEgdmFsdWVQYXJhbXMpIFwKKyAgICB0ZW1wbGF0ZVByZSB0eXBlUGFyYW1zIHRl
bXBsYXRlUG9zdCBOb2RlKiBhZGROb2RlKFJlZkNoaWxkcmVuTW9kZSByZWZDaGlsZHJlbk1vZGUs
IFJlZk5vZGVNb2RlIHJlZk5vZGVNb2RlLCBTcGVjdWxhdGVkVHlwZSB0eXBlIHZhbHVlUGFyYW1z
Q29tbWEgdmFsdWVQYXJhbXMpIFwKICAgICB7IFwKLSAgICAgICAgTm9kZSBub2RlID0gTm9kZSh2
YWx1ZUFyZ3MpOyBcCi0gICAgICAgIG5vZGUucHJlZGljdCh0eXBlKTsgXAotICAgICAgICBpZiAo
bm9kZS5mbGFncygpICYgTm9kZU11c3RHZW5lcmF0ZSkgXAotICAgICAgICAgICAgbm9kZS5yZWYo
KTsgXAorICAgICAgICBOb2RlKiBub2RlID0gbmV3IChtX2FsbG9jYXRvcikgTm9kZSh2YWx1ZUFy
Z3MpOyBcCisgICAgICAgIG5vZGUtPnByZWRpY3QodHlwZSk7IFwKKyAgICAgICAgaWYgKG5vZGUt
PmZsYWdzKCkgJiBOb2RlTXVzdEdlbmVyYXRlKSBcCisgICAgICAgICAgICBub2RlLT5yZWYoKTsg
XAogICAgICAgICBpZiAocmVmTm9kZU1vZGUgPT0gUmVmTm9kZSkgXAotICAgICAgICAgICAgbm9k
ZS5yZWYoKTsgXAotICAgICAgICBOb2RlSW5kZXggcmVzdWx0ID0gc2l6ZSgpOyBcCi0gICAgICAg
IGFwcGVuZChub2RlKTsgXAorICAgICAgICAgICAgbm9kZS0+cmVmKCk7IFwKICAgICAgICAgaWYg
KHJlZkNoaWxkcmVuTW9kZSA9PSBSZWZDaGlsZHJlbikgXAotICAgICAgICAgICAgcmVmQ2hpbGRy
ZW4ocmVzdWx0KTsgXAotICAgICAgICByZXR1cm4gcmVzdWx0OyBcCisgICAgICAgICAgICByZWZD
aGlsZHJlbihub2RlKTsgXAorICAgICAgICByZXR1cm4gbm9kZTsgXAogICAgIH0KICAgICBERkdf
VkFSSUFESUNfVEVNUExBVEVfRlVOQ1RJT04oREZHX0RFRklORV9BRERfTk9ERSkKICN1bmRlZiBE
RkdfREVGSU5FX0FERF9OT0RFCkBAIC0yMDQsMTQgKzE4NSwxNCBAQCBwdWJsaWM6CiAgICAgLy8g
cmVmZXJlbmNlIGNvdW50cyBhY2NvcmRpbmcgdG8gcmVhY2hhYmlsaXR5LgogICAgIHZvaWQgY29s
bGVjdEdhcmJhZ2UoKTsKICAgICAKLSAgICB2b2lkIGNvbnZlcnRUb0NvbnN0YW50KE5vZGVJbmRl
eCBub2RlSW5kZXgsIHVuc2lnbmVkIGNvbnN0YW50TnVtYmVyKQorICAgIHZvaWQgY29udmVydFRv
Q29uc3RhbnQoTm9kZSogbm9kZSwgdW5zaWduZWQgY29uc3RhbnROdW1iZXIpCiAgICAgewotICAg
ICAgICBhdChub2RlSW5kZXgpLmNvbnZlcnRUb0NvbnN0YW50KGNvbnN0YW50TnVtYmVyKTsKKyAg
ICAgICAgbm9kZS0+Y29udmVydFRvQ29uc3RhbnQoY29uc3RhbnROdW1iZXIpOwogICAgIH0KICAg
ICAKLSAgICB2b2lkIGNvbnZlcnRUb0NvbnN0YW50KE5vZGVJbmRleCBub2RlSW5kZXgsIEpTVmFs
dWUgdmFsdWUpCisgICAgdm9pZCBjb252ZXJ0VG9Db25zdGFudChOb2RlKiBub2RlLCBKU1ZhbHVl
IHZhbHVlKQogICAgIHsKLSAgICAgICAgY29udmVydFRvQ29uc3RhbnQobm9kZUluZGV4LCBtX2Nv
ZGVCbG9jay0+YWRkT3JGaW5kQ29uc3RhbnQodmFsdWUpKTsKKyAgICAgICAgY29udmVydFRvQ29u
c3RhbnQobm9kZSwgbV9jb2RlQmxvY2stPmFkZE9yRmluZENvbnN0YW50KHZhbHVlKSk7CiAgICAg
fQogCiAgICAgLy8gQ29kZUJsb2NrIGlzIG9wdGlvbmFsLCBidXQgbWF5IGFsbG93IGFkZGl0aW9u
YWwgaW5mb3JtYXRpb24gdG8gYmUgZHVtcGVkIChlLmcuIElkZW50aWZpZXIgbmFtZXMpLgpAQCAt
MjE5LDEyNSArMjAwLDEyNSBAQCBwdWJsaWM6CiAgICAgZW51bSBQaGlOb2RlRHVtcE1vZGUgeyBE
dW1wTGl2ZVBoaXNPbmx5LCBEdW1wQWxsUGhpcyB9OwogICAgIHZvaWQgZHVtcEJsb2NrSGVhZGVy
KFByaW50U3RyZWFtJiwgY29uc3QgY2hhciogcHJlZml4LCBCbG9ja0luZGV4LCBQaGlOb2RlRHVt
cE1vZGUpOwogICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYsIEVkZ2UpOwotICAgIHZvaWQgZHVt
cChQcmludFN0cmVhbSYsIGNvbnN0IGNoYXIqIHByZWZpeCwgTm9kZUluZGV4KTsKLSAgICBzdGF0
aWMgaW50IGFtb3VudE9mTm9kZVdoaXRlU3BhY2UoTm9kZSYpOwotICAgIHN0YXRpYyB2b2lkIHBy
aW50Tm9kZVdoaXRlU3BhY2UoUHJpbnRTdHJlYW0mLCBOb2RlJik7CisgICAgdm9pZCBkdW1wKFBy
aW50U3RyZWFtJiwgY29uc3QgY2hhciogcHJlZml4LCBOb2RlKik7CisgICAgc3RhdGljIGludCBh
bW91bnRPZk5vZGVXaGl0ZVNwYWNlKE5vZGUqKTsKKyAgICBzdGF0aWMgdm9pZCBwcmludE5vZGVX
aGl0ZVNwYWNlKFByaW50U3RyZWFtJiwgTm9kZSopOwogCiAgICAgLy8gRHVtcCB0aGUgY29kZSBv
cmlnaW4gb2YgdGhlIGdpdmVuIG5vZGUgYXMgYSBkaWZmIGZyb20gdGhlIGNvZGUgb3JpZ2luIG9m
IHRoZQogICAgIC8vIHByZWNlZGluZyBub2RlLiBSZXR1cm5zIHRydWUgaWYgYW55dGhpbmcgd2Fz
IHByaW50ZWQuCi0gICAgYm9vbCBkdW1wQ29kZU9yaWdpbihQcmludFN0cmVhbSYsIGNvbnN0IGNo
YXIqIHByZWZpeCwgTm9kZUluZGV4LCBOb2RlSW5kZXgpOworICAgIGJvb2wgZHVtcENvZGVPcmln
aW4oUHJpbnRTdHJlYW0mLCBjb25zdCBjaGFyKiBwcmVmaXgsIE5vZGUqIHByZXZpb3VzTm9kZSwg
Tm9kZSogc3Vic2VxdWVudE5vZGUpOwogCiAgICAgQmxvY2tJbmRleCBibG9ja0luZGV4Rm9yQnl0
ZWNvZGVPZmZzZXQoVmVjdG9yPEJsb2NrSW5kZXg+JiBibG9ja3MsIHVuc2lnbmVkIGJ5dGVjb2Rl
QmVnaW4pOwogCi0gICAgU3BlY3VsYXRlZFR5cGUgZ2V0SlNDb25zdGFudFNwZWN1bGF0aW9uKE5v
ZGUmIG5vZGUpCisgICAgU3BlY3VsYXRlZFR5cGUgZ2V0SlNDb25zdGFudFNwZWN1bGF0aW9uKE5v
ZGUqIG5vZGUpCiAgICAgewotICAgICAgICByZXR1cm4gc3BlY3VsYXRpb25Gcm9tVmFsdWUobm9k
ZS52YWx1ZU9mSlNDb25zdGFudChtX2NvZGVCbG9jaykpOworICAgICAgICByZXR1cm4gc3BlY3Vs
YXRpb25Gcm9tVmFsdWUobm9kZS0+dmFsdWVPZkpTQ29uc3RhbnQobV9jb2RlQmxvY2spKTsKICAg
ICB9CiAgICAgCi0gICAgQWRkU3BlY3VsYXRpb25Nb2RlIGFkZFNwZWN1bGF0aW9uTW9kZShOb2Rl
JiBhZGQsIGJvb2wgbGVmdFNob3VsZFNwZWN1bGF0ZUludGVnZXIsIGJvb2wgcmlnaHRTaG91bGRT
cGVjdWxhdGVJbnRlZ2VyKQorICAgIEFkZFNwZWN1bGF0aW9uTW9kZSBhZGRTcGVjdWxhdGlvbk1v
ZGUoTm9kZSogYWRkLCBib29sIGxlZnRTaG91bGRTcGVjdWxhdGVJbnRlZ2VyLCBib29sIHJpZ2h0
U2hvdWxkU3BlY3VsYXRlSW50ZWdlcikKICAgICB7Ci0gICAgICAgIEFTU0VSVChhZGQub3AoKSA9
PSBWYWx1ZUFkZCB8fCBhZGQub3AoKSA9PSBBcml0aEFkZCB8fCBhZGQub3AoKSA9PSBBcml0aFN1
Yik7CisgICAgICAgIEFTU0VSVChhZGQtPm9wKCkgPT0gVmFsdWVBZGQgfHwgYWRkLT5vcCgpID09
IEFyaXRoQWRkIHx8IGFkZC0+b3AoKSA9PSBBcml0aFN1Yik7CiAgICAgICAgIAotICAgICAgICBO
b2RlJiBsZWZ0ID0gYXQoYWRkLmNoaWxkMSgpKTsKLSAgICAgICAgTm9kZSYgcmlnaHQgPSBhdChh
ZGQuY2hpbGQyKCkpOworICAgICAgICBOb2RlKiBsZWZ0ID0gYWRkLT5jaGlsZDEoKS5ub2RlKCk7
CisgICAgICAgIE5vZGUqIHJpZ2h0ID0gYWRkLT5jaGlsZDIoKS5ub2RlKCk7CiAgICAgICAgIAot
ICAgICAgICBpZiAobGVmdC5oYXNDb25zdGFudCgpKQorICAgICAgICBpZiAobGVmdC0+aGFzQ29u
c3RhbnQoKSkKICAgICAgICAgICAgIHJldHVybiBhZGRJbW1lZGlhdGVTaG91bGRTcGVjdWxhdGVJ
bnRlZ2VyKGFkZCwgcmlnaHRTaG91bGRTcGVjdWxhdGVJbnRlZ2VyLCBsZWZ0KTsKLSAgICAgICAg
aWYgKHJpZ2h0Lmhhc0NvbnN0YW50KCkpCisgICAgICAgIGlmIChyaWdodC0+aGFzQ29uc3RhbnQo
KSkKICAgICAgICAgICAgIHJldHVybiBhZGRJbW1lZGlhdGVTaG91bGRTcGVjdWxhdGVJbnRlZ2Vy
KGFkZCwgbGVmdFNob3VsZFNwZWN1bGF0ZUludGVnZXIsIHJpZ2h0KTsKICAgICAgICAgCi0gICAg
ICAgIHJldHVybiAobGVmdFNob3VsZFNwZWN1bGF0ZUludGVnZXIgJiYgcmlnaHRTaG91bGRTcGVj
dWxhdGVJbnRlZ2VyICYmIGFkZC5jYW5TcGVjdWxhdGVJbnRlZ2VyKCkpID8gU3BlY3VsYXRlSW50
ZWdlciA6IERvbnRTcGVjdWxhdGVJbnRlZ2VyOworICAgICAgICByZXR1cm4gKGxlZnRTaG91bGRT
cGVjdWxhdGVJbnRlZ2VyICYmIHJpZ2h0U2hvdWxkU3BlY3VsYXRlSW50ZWdlciAmJiBhZGQtPmNh
blNwZWN1bGF0ZUludGVnZXIoKSkgPyBTcGVjdWxhdGVJbnRlZ2VyIDogRG9udFNwZWN1bGF0ZUlu
dGVnZXI7CiAgICAgfQogICAgIAotICAgIEFkZFNwZWN1bGF0aW9uTW9kZSB2YWx1ZUFkZFNwZWN1
bGF0aW9uTW9kZShOb2RlJiBhZGQpCisgICAgQWRkU3BlY3VsYXRpb25Nb2RlIHZhbHVlQWRkU3Bl
Y3VsYXRpb25Nb2RlKE5vZGUqIGFkZCkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZGRTcGVjdWxh
dGlvbk1vZGUoYWRkLCBhdChhZGQuY2hpbGQxKCkpLnNob3VsZFNwZWN1bGF0ZUludGVnZXJFeHBl
Y3RpbmdEZWZpbmVkKCksIGF0KGFkZC5jaGlsZDIoKSkuc2hvdWxkU3BlY3VsYXRlSW50ZWdlckV4
cGVjdGluZ0RlZmluZWQoKSk7CisgICAgICAgIHJldHVybiBhZGRTcGVjdWxhdGlvbk1vZGUoYWRk
LCBhZGQtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyRXhwZWN0aW5nRGVmaW5lZCgp
LCBhZGQtPmNoaWxkMigpLT5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyRXhwZWN0aW5nRGVmaW5lZCgp
KTsKICAgICB9CiAgICAgCi0gICAgQWRkU3BlY3VsYXRpb25Nb2RlIGFyaXRoQWRkU3BlY3VsYXRp
b25Nb2RlKE5vZGUmIGFkZCkKKyAgICBBZGRTcGVjdWxhdGlvbk1vZGUgYXJpdGhBZGRTcGVjdWxh
dGlvbk1vZGUoTm9kZSogYWRkKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkZFNwZWN1bGF0aW9u
TW9kZShhZGQsIGF0KGFkZC5jaGlsZDEoKSkuc2hvdWxkU3BlY3VsYXRlSW50ZWdlckZvckFyaXRo
bWV0aWMoKSwgYXQoYWRkLmNoaWxkMigpKS5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyRm9yQXJpdGht
ZXRpYygpKTsKKyAgICAgICAgcmV0dXJuIGFkZFNwZWN1bGF0aW9uTW9kZShhZGQsIGFkZC0+Y2hp
bGQxKCktPnNob3VsZFNwZWN1bGF0ZUludGVnZXJGb3JBcml0aG1ldGljKCksIGFkZC0+Y2hpbGQy
KCktPnNob3VsZFNwZWN1bGF0ZUludGVnZXJGb3JBcml0aG1ldGljKCkpOwogICAgIH0KICAgICAK
LSAgICBBZGRTcGVjdWxhdGlvbk1vZGUgYWRkU3BlY3VsYXRpb25Nb2RlKE5vZGUmIGFkZCkKKyAg
ICBBZGRTcGVjdWxhdGlvbk1vZGUgYWRkU3BlY3VsYXRpb25Nb2RlKE5vZGUqIGFkZCkKICAgICB7
Ci0gICAgICAgIGlmIChhZGQub3AoKSA9PSBWYWx1ZUFkZCkKKyAgICAgICAgaWYgKGFkZC0+b3Ao
KSA9PSBWYWx1ZUFkZCkKICAgICAgICAgICAgIHJldHVybiB2YWx1ZUFkZFNwZWN1bGF0aW9uTW9k
ZShhZGQpOwogICAgICAgICAKICAgICAgICAgcmV0dXJuIGFyaXRoQWRkU3BlY3VsYXRpb25Nb2Rl
KGFkZCk7CiAgICAgfQogICAgIAotICAgIGJvb2wgYWRkU2hvdWxkU3BlY3VsYXRlSW50ZWdlcihO
b2RlJiBhZGQpCisgICAgYm9vbCBhZGRTaG91bGRTcGVjdWxhdGVJbnRlZ2VyKE5vZGUqIGFkZCkK
ICAgICB7CiAgICAgICAgIHJldHVybiBhZGRTcGVjdWxhdGlvbk1vZGUoYWRkKSAhPSBEb250U3Bl
Y3VsYXRlSW50ZWdlcjsKICAgICB9CiAgICAgCi0gICAgYm9vbCBtdWxTaG91bGRTcGVjdWxhdGVJ
bnRlZ2VyKE5vZGUmIG11bCkKKyAgICBib29sIG11bFNob3VsZFNwZWN1bGF0ZUludGVnZXIoTm9k
ZSogbXVsKQogICAgIHsKLSAgICAgICAgQVNTRVJUKG11bC5vcCgpID09IEFyaXRoTXVsKTsKKyAg
ICAgICAgQVNTRVJUKG11bC0+b3AoKSA9PSBBcml0aE11bCk7CiAgICAgICAgIAotICAgICAgICBO
b2RlJiBsZWZ0ID0gYXQobXVsLmNoaWxkMSgpKTsKLSAgICAgICAgTm9kZSYgcmlnaHQgPSBhdCht
dWwuY2hpbGQyKCkpOworICAgICAgICBOb2RlKiBsZWZ0ID0gbXVsLT5jaGlsZDEoKS5ub2RlKCk7
CisgICAgICAgIE5vZGUqIHJpZ2h0ID0gbXVsLT5jaGlsZDIoKS5ub2RlKCk7CiAgICAgICAgIAog
ICAgICAgICByZXR1cm4gTm9kZTo6c2hvdWxkU3BlY3VsYXRlSW50ZWdlckZvckFyaXRobWV0aWMo
bGVmdCwgcmlnaHQpICYmIG11bC5jYW5TcGVjdWxhdGVJbnRlZ2VyKCk7CiAgICAgfQogICAgIAot
ICAgIGJvb2wgbmVnYXRlU2hvdWxkU3BlY3VsYXRlSW50ZWdlcihOb2RlJiBuZWdhdGUpCisgICAg
Ym9vbCBuZWdhdGVTaG91bGRTcGVjdWxhdGVJbnRlZ2VyKE5vZGUqIG5lZ2F0ZSkKICAgICB7Ci0g
ICAgICAgIEFTU0VSVChuZWdhdGUub3AoKSA9PSBBcml0aE5lZ2F0ZSk7Ci0gICAgICAgIHJldHVy
biBhdChuZWdhdGUuY2hpbGQxKCkpLnNob3VsZFNwZWN1bGF0ZUludGVnZXJGb3JBcml0aG1ldGlj
KCkgJiYgbmVnYXRlLmNhblNwZWN1bGF0ZUludGVnZXIoKTsKKyAgICAgICAgQVNTRVJUKG5lZ2F0
ZS0+b3AoKSA9PSBBcml0aE5lZ2F0ZSk7CisgICAgICAgIHJldHVybiBuZWdhdGUtPmNoaWxkMSgp
LT5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyRm9yQXJpdGhtZXRpYygpICYmIG5lZ2F0ZS0+Y2FuU3Bl
Y3VsYXRlSW50ZWdlcigpOwogICAgIH0KICAgICAKLSAgICBib29sIGFkZFNob3VsZFNwZWN1bGF0
ZUludGVnZXIoTm9kZUluZGV4IG5vZGVJbmRleCkKKyAgICBib29sIGFkZFNob3VsZFNwZWN1bGF0
ZUludGVnZXIoTm9kZSogbm9kZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZGRTaG91bGRTcGVj
dWxhdGVJbnRlZ2VyKGF0KG5vZGVJbmRleCkpOworICAgICAgICByZXR1cm4gYWRkU2hvdWxkU3Bl
Y3VsYXRlSW50ZWdlcihub2RlKTsKICAgICB9CiAgICAgCiAgICAgLy8gSGVscGVyIG1ldGhvZHMg
dG8gY2hlY2sgbm9kZXMgZm9yIGNvbnN0YW50cy4KLSAgICBib29sIGlzQ29uc3RhbnQoTm9kZUlu
ZGV4IG5vZGVJbmRleCkKKyAgICBib29sIGlzQ29uc3RhbnQoTm9kZSogbm9kZSkKICAgICB7Ci0g
ICAgICAgIHJldHVybiBhdChub2RlSW5kZXgpLmhhc0NvbnN0YW50KCk7CisgICAgICAgIHJldHVy
biBub2RlLT5oYXNDb25zdGFudCgpOwogICAgIH0KLSAgICBib29sIGlzSlNDb25zdGFudChOb2Rl
SW5kZXggbm9kZUluZGV4KQorICAgIGJvb2wgaXNKU0NvbnN0YW50KE5vZGUqIG5vZGUpCiAgICAg
ewotICAgICAgICByZXR1cm4gYXQobm9kZUluZGV4KS5oYXNDb25zdGFudCgpOworICAgICAgICBy
ZXR1cm4gbm9kZS0+aGFzQ29uc3RhbnQoKTsKICAgICB9Ci0gICAgYm9vbCBpc0ludDMyQ29uc3Rh
bnQoTm9kZUluZGV4IG5vZGVJbmRleCkKKyAgICBib29sIGlzSW50MzJDb25zdGFudChOb2RlKiBu
b2RlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGF0KG5vZGVJbmRleCkuaXNJbnQzMkNvbnN0YW50
KG1fY29kZUJsb2NrKTsKKyAgICAgICAgcmV0dXJuIG5vZGUtPmlzSW50MzJDb25zdGFudChtX2Nv
ZGVCbG9jayk7CiAgICAgfQotICAgIGJvb2wgaXNEb3VibGVDb25zdGFudChOb2RlSW5kZXggbm9k
ZUluZGV4KQorICAgIGJvb2wgaXNEb3VibGVDb25zdGFudChOb2RlKiBub2RlKQogICAgIHsKLSAg
ICAgICAgcmV0dXJuIGF0KG5vZGVJbmRleCkuaXNEb3VibGVDb25zdGFudChtX2NvZGVCbG9jayk7
CisgICAgICAgIHJldHVybiBub2RlLT5pc0RvdWJsZUNvbnN0YW50KG1fY29kZUJsb2NrKTsKICAg
ICB9Ci0gICAgYm9vbCBpc051bWJlckNvbnN0YW50KE5vZGVJbmRleCBub2RlSW5kZXgpCisgICAg
Ym9vbCBpc051bWJlckNvbnN0YW50KE5vZGUqIG5vZGUpCiAgICAgewotICAgICAgICByZXR1cm4g
YXQobm9kZUluZGV4KS5pc051bWJlckNvbnN0YW50KG1fY29kZUJsb2NrKTsKKyAgICAgICAgcmV0
dXJuIG5vZGUtPmlzTnVtYmVyQ29uc3RhbnQobV9jb2RlQmxvY2spOwogICAgIH0KLSAgICBib29s
IGlzQm9vbGVhbkNvbnN0YW50KE5vZGVJbmRleCBub2RlSW5kZXgpCisgICAgYm9vbCBpc0Jvb2xl
YW5Db25zdGFudChOb2RlKiBub2RlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGF0KG5vZGVJbmRl
eCkuaXNCb29sZWFuQ29uc3RhbnQobV9jb2RlQmxvY2spOworICAgICAgICByZXR1cm4gbm9kZS0+
aXNCb29sZWFuQ29uc3RhbnQobV9jb2RlQmxvY2spOwogICAgIH0KLSAgICBib29sIGlzQ2VsbENv
bnN0YW50KE5vZGVJbmRleCBub2RlSW5kZXgpCisgICAgYm9vbCBpc0NlbGxDb25zdGFudChOb2Rl
KiBub2RlKQogICAgIHsKLSAgICAgICAgaWYgKCFpc0pTQ29uc3RhbnQobm9kZUluZGV4KSkKKyAg
ICAgICAgaWYgKCFpc0pTQ29uc3RhbnQobm9kZSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgICAgIEpTVmFsdWUgdmFsdWUgPSB2YWx1ZU9mSlNDb25zdGFudChub2RlSW5kZXgpOwor
ICAgICAgICBKU1ZhbHVlIHZhbHVlID0gdmFsdWVPZkpTQ29uc3RhbnQobm9kZSk7CiAgICAgICAg
IHJldHVybiB2YWx1ZS5pc0NlbGwoKSAmJiAhIXZhbHVlOwogICAgIH0KLSAgICBib29sIGlzRnVu
Y3Rpb25Db25zdGFudChOb2RlSW5kZXggbm9kZUluZGV4KQorICAgIGJvb2wgaXNGdW5jdGlvbkNv
bnN0YW50KE5vZGUqIG5vZGUpCiAgICAgewotICAgICAgICBpZiAoIWlzSlNDb25zdGFudChub2Rl
SW5kZXgpKQorICAgICAgICBpZiAoIWlzSlNDb25zdGFudChub2RlKSkKICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgICAgaWYgKCFnZXRKU0Z1bmN0aW9uKHZhbHVlT2ZKU0NvbnN0YW50
KG5vZGVJbmRleCkpKQorICAgICAgICBpZiAoIWdldEpTRnVuY3Rpb24odmFsdWVPZkpTQ29uc3Rh
bnQobm9kZSkpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICB9Ci0gICAgYm9vbCBpc0ludGVybmFsRnVuY3Rpb25Db25zdGFudChOb2RlSW5kZXgg
bm9kZUluZGV4KQorICAgIGJvb2wgaXNJbnRlcm5hbEZ1bmN0aW9uQ29uc3RhbnQoTm9kZSogbm9k
ZSkKICAgICB7Ci0gICAgICAgIGlmICghaXNKU0NvbnN0YW50KG5vZGVJbmRleCkpCisgICAgICAg
IGlmICghaXNKU0NvbnN0YW50KG5vZGUpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgICBKU1ZhbHVlIHZhbHVlID0gdmFsdWVPZkpTQ29uc3RhbnQobm9kZUluZGV4KTsKKyAgICAg
ICAgSlNWYWx1ZSB2YWx1ZSA9IHZhbHVlT2ZKU0NvbnN0YW50KG5vZGUpOwogICAgICAgICBpZiAo
IXZhbHVlLmlzQ2VsbCgpIHx8ICF2YWx1ZSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICAgICAgSlNDZWxsKiBjZWxsID0gdmFsdWUuYXNDZWxsKCk7CkBAIC0zNDYsMjUgKzMyNywyNSBA
QCBwdWJsaWM6CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICAvLyBIZWxwZXIgbWV0
aG9kcyBnZXQgY29uc3RhbnQgdmFsdWVzIGZyb20gbm9kZXMuCi0gICAgSlNWYWx1ZSB2YWx1ZU9m
SlNDb25zdGFudChOb2RlSW5kZXggbm9kZUluZGV4KQorICAgIEpTVmFsdWUgdmFsdWVPZkpTQ29u
c3RhbnQoTm9kZSogbm9kZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBhdChub2RlSW5kZXgpLnZh
bHVlT2ZKU0NvbnN0YW50KG1fY29kZUJsb2NrKTsKKyAgICAgICAgcmV0dXJuIG5vZGUtPnZhbHVl
T2ZKU0NvbnN0YW50KG1fY29kZUJsb2NrKTsKICAgICB9Ci0gICAgaW50MzJfdCB2YWx1ZU9mSW50
MzJDb25zdGFudChOb2RlSW5kZXggbm9kZUluZGV4KQorICAgIGludDMyX3QgdmFsdWVPZkludDMy
Q29uc3RhbnQoTm9kZSogbm9kZSkKICAgICB7Ci0gICAgICAgIHJldHVybiB2YWx1ZU9mSlNDb25z
dGFudChub2RlSW5kZXgpLmFzSW50MzIoKTsKKyAgICAgICAgcmV0dXJuIHZhbHVlT2ZKU0NvbnN0
YW50KG5vZGUpLmFzSW50MzIoKTsKICAgICB9Ci0gICAgZG91YmxlIHZhbHVlT2ZOdW1iZXJDb25z
dGFudChOb2RlSW5kZXggbm9kZUluZGV4KQorICAgIGRvdWJsZSB2YWx1ZU9mTnVtYmVyQ29uc3Rh
bnQoTm9kZSogbm9kZSkKICAgICB7Ci0gICAgICAgIHJldHVybiB2YWx1ZU9mSlNDb25zdGFudChu
b2RlSW5kZXgpLmFzTnVtYmVyKCk7CisgICAgICAgIHJldHVybiB2YWx1ZU9mSlNDb25zdGFudChu
b2RlKS5hc051bWJlcigpOwogICAgIH0KLSAgICBib29sIHZhbHVlT2ZCb29sZWFuQ29uc3RhbnQo
Tm9kZUluZGV4IG5vZGVJbmRleCkKKyAgICBib29sIHZhbHVlT2ZCb29sZWFuQ29uc3RhbnQoTm9k
ZSogbm9kZSkKICAgICB7Ci0gICAgICAgIHJldHVybiB2YWx1ZU9mSlNDb25zdGFudChub2RlSW5k
ZXgpLmFzQm9vbGVhbigpOworICAgICAgICByZXR1cm4gdmFsdWVPZkpTQ29uc3RhbnQobm9kZSku
YXNCb29sZWFuKCk7CiAgICAgfQotICAgIEpTRnVuY3Rpb24qIHZhbHVlT2ZGdW5jdGlvbkNvbnN0
YW50KE5vZGVJbmRleCBub2RlSW5kZXgpCisgICAgSlNGdW5jdGlvbiogdmFsdWVPZkZ1bmN0aW9u
Q29uc3RhbnQoTm9kZSogbm9kZSkKICAgICB7Ci0gICAgICAgIEpTQ2VsbCogZnVuY3Rpb24gPSBn
ZXRKU0Z1bmN0aW9uKHZhbHVlT2ZKU0NvbnN0YW50KG5vZGVJbmRleCkpOworICAgICAgICBKU0Nl
bGwqIGZ1bmN0aW9uID0gZ2V0SlNGdW5jdGlvbih2YWx1ZU9mSlNDb25zdGFudChub2RlKSk7CiAg
ICAgICAgIEFTU0VSVChmdW5jdGlvbik7CiAgICAgICAgIHJldHVybiBqc0Nhc3Q8SlNGdW5jdGlv
bio+KGZ1bmN0aW9uKTsKICAgICB9CkBAIC00MzksNDUgKzQyMCw0MyBAQCBwdWJsaWM6CiAgICAg
ICAgIHJldHVybiBtX2NvZGVCbG9jay0+dW5jaGVja2VkQWN0aXZhdGlvblJlZ2lzdGVyKCk7CiAg
ICAgfQogICAgIAotICAgIFZhbHVlUHJvZmlsZSogdmFsdWVQcm9maWxlRm9yKE5vZGVJbmRleCBu
b2RlSW5kZXgpCisgICAgVmFsdWVQcm9maWxlKiB2YWx1ZVByb2ZpbGVGb3IoTm9kZSogbm9kZSkK
ICAgICB7Ci0gICAgICAgIGlmIChub2RlSW5kZXggPT0gTm9Ob2RlKQorICAgICAgICBpZiAoIW5v
ZGUpCiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgCi0gICAgICAgIE5vZGUmIG5vZGUg
PSBhdChub2RlSW5kZXgpOwotICAgICAgICBDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2sgPSBiYXNl
bGluZUNvZGVCbG9ja0Zvcihub2RlLmNvZGVPcmlnaW4pOworICAgICAgICBDb2RlQmxvY2sqIHBy
b2ZpbGVkQmxvY2sgPSBiYXNlbGluZUNvZGVCbG9ja0Zvcihub2RlLT5jb2RlT3JpZ2luKTsKICAg
ICAgICAgCi0gICAgICAgIGlmIChub2RlLmhhc0xvY2FsKCkpIHsKLSAgICAgICAgICAgIGlmICgh
b3BlcmFuZElzQXJndW1lbnQobm9kZS5sb2NhbCgpKSkKKyAgICAgICAgaWYgKG5vZGUtPmhhc0xv
Y2FsKCkpIHsKKyAgICAgICAgICAgIGlmICghb3BlcmFuZElzQXJndW1lbnQobm9kZS0+bG9jYWwo
KSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICBpbnQgYXJndW1lbnQg
PSBvcGVyYW5kVG9Bcmd1bWVudChub2RlLmxvY2FsKCkpOwotICAgICAgICAgICAgaWYgKG5vZGUu
dmFyaWFibGVBY2Nlc3NEYXRhKCkgIT0gYXQobV9hcmd1bWVudHNbYXJndW1lbnRdKS52YXJpYWJs
ZUFjY2Vzc0RhdGEoKSkKKyAgICAgICAgICAgIGludCBhcmd1bWVudCA9IG9wZXJhbmRUb0FyZ3Vt
ZW50KG5vZGUtPmxvY2FsKCkpOworICAgICAgICAgICAgaWYgKG5vZGUtPnZhcmlhYmxlQWNjZXNz
RGF0YSgpICE9IG1fYXJndW1lbnRzW2FyZ3VtZW50XS0+dmFyaWFibGVBY2Nlc3NEYXRhKCkpCiAg
ICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgICByZXR1cm4gcHJvZmlsZWRCbG9j
ay0+dmFsdWVQcm9maWxlRm9yQXJndW1lbnQoYXJndW1lbnQpOwogICAgICAgICB9CiAgICAgICAg
IAotICAgICAgICBpZiAobm9kZS5oYXNIZWFwUHJlZGljdGlvbigpKQotICAgICAgICAgICAgcmV0
dXJuIHByb2ZpbGVkQmxvY2stPnZhbHVlUHJvZmlsZUZvckJ5dGVjb2RlT2Zmc2V0KG5vZGUuY29k
ZU9yaWdpbi5ieXRlY29kZUluZGV4Rm9yVmFsdWVQcm9maWxlKCkpOworICAgICAgICBpZiAobm9k
ZS0+aGFzSGVhcFByZWRpY3Rpb24oKSkKKyAgICAgICAgICAgIHJldHVybiBwcm9maWxlZEJsb2Nr
LT52YWx1ZVByb2ZpbGVGb3JCeXRlY29kZU9mZnNldChub2RlLT5jb2RlT3JpZ2luLmJ5dGVjb2Rl
SW5kZXhGb3JWYWx1ZVByb2ZpbGUoKSk7CiAgICAgICAgIAogICAgICAgICByZXR1cm4gMDsKICAg
ICB9CiAgICAgCi0gICAgTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZSBtZXRob2RPZkdldHRp
bmdBVmFsdWVQcm9maWxlRm9yKE5vZGVJbmRleCBub2RlSW5kZXgpCisgICAgTWV0aG9kT2ZHZXR0
aW5nQVZhbHVlUHJvZmlsZSBtZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlRm9yKE5vZGUqIG5v
ZGUpCiAgICAgewotICAgICAgICBpZiAobm9kZUluZGV4ID09IE5vTm9kZSkKKyAgICAgICAgaWYg
KCFub2RlKQogICAgICAgICAgICAgcmV0dXJuIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUo
KTsKICAgICAgICAgCi0gICAgICAgIE5vZGUmIG5vZGUgPSBhdChub2RlSW5kZXgpOwotICAgICAg
ICBDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2sgPSBiYXNlbGluZUNvZGVCbG9ja0Zvcihub2RlLmNv
ZGVPcmlnaW4pOworICAgICAgICBDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2sgPSBiYXNlbGluZUNv
ZGVCbG9ja0Zvcihub2RlLT5jb2RlT3JpZ2luKTsKICAgICAgICAgCi0gICAgICAgIGlmIChub2Rl
Lm9wKCkgPT0gR2V0TG9jYWwpIHsKKyAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gR2V0TG9jYWwp
IHsKICAgICAgICAgICAgIHJldHVybiBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlOjpmcm9t
TGF6eU9wZXJhbmQoCiAgICAgICAgICAgICAgICAgcHJvZmlsZWRCbG9jaywKICAgICAgICAgICAg
ICAgICBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZUtleSgKLSAgICAgICAgICAgICAgICAgICAgbm9k
ZS5jb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgsIG5vZGUubG9jYWwoKSkpOworICAgICAgICAgICAg
ICAgICAgICBub2RlLT5jb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgsIG5vZGUtPmxvY2FsKCkpKTsK
ICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgcmV0dXJuIE1ldGhvZE9mR2V0dGluZ0FWYWx1
ZVByb2ZpbGUodmFsdWVQcm9maWxlRm9yKG5vZGVJbmRleCkpOworICAgICAgICByZXR1cm4gTWV0
aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZSh2YWx1ZVByb2ZpbGVGb3Iobm9kZSkpOwogICAgIH0K
ICAgICAKICAgICBib29sIG5lZWRzQWN0aXZhdGlvbigpIGNvbnN0CkBAIC01MDEsMjEgKzQ4MCwy
MSBAQCBwdWJsaWM6CiAgICAgCiAgICAgdW5zaWduZWQgbnVtU3VjY2Vzc29ycyhCYXNpY0Jsb2Nr
KiBibG9jaykKICAgICB7Ci0gICAgICAgIHJldHVybiBhdChibG9jay0+bGFzdCgpKS5udW1TdWNj
ZXNzb3JzKCk7CisgICAgICAgIHJldHVybiBibG9jay0+bGFzdCgpLT5udW1TdWNjZXNzb3JzKCk7
CiAgICAgfQogICAgIEJsb2NrSW5kZXggc3VjY2Vzc29yKEJhc2ljQmxvY2sqIGJsb2NrLCB1bnNp
Z25lZCBpbmRleCkKICAgICB7Ci0gICAgICAgIHJldHVybiBhdChibG9jay0+bGFzdCgpKS5zdWNj
ZXNzb3IoaW5kZXgpOworICAgICAgICByZXR1cm4gYmxvY2stPmxhc3QoKS0+c3VjY2Vzc29yKGlu
ZGV4KTsKICAgICB9CiAgICAgQmxvY2tJbmRleCBzdWNjZXNzb3JGb3JDb25kaXRpb24oQmFzaWNC
bG9jayogYmxvY2ssIGJvb2wgY29uZGl0aW9uKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGF0KGJs
b2NrLT5sYXN0KCkpLnN1Y2Nlc3NvckZvckNvbmRpdGlvbihjb25kaXRpb24pOworICAgICAgICBy
ZXR1cm4gYmxvY2stPmxhc3QoKS0+c3VjY2Vzc29yRm9yQ29uZGl0aW9uKGNvbmRpdGlvbik7CiAg
ICAgfQogICAgIAotICAgIGJvb2wgaXNQcmVkaWN0ZWROdW1lcmljYWwoTm9kZSYgbm9kZSkKKyAg
ICBib29sIGlzUHJlZGljdGVkTnVtZXJpY2FsKE5vZGUqIG5vZGUpCiAgICAgewotICAgICAgICBT
cGVjdWxhdGVkVHlwZSBsZWZ0ID0gYXQobm9kZS5jaGlsZDEoKSkucHJlZGljdGlvbigpOwotICAg
ICAgICBTcGVjdWxhdGVkVHlwZSByaWdodCA9IGF0KG5vZGUuY2hpbGQyKCkpLnByZWRpY3Rpb24o
KTsKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUgbGVmdCA9IG5vZGUtPmNoaWxkMSgpLT5wcmVkaWN0
aW9uKCk7CisgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHJpZ2h0ID0gbm9kZS0+Y2hpbGQyKCktPnBy
ZWRpY3Rpb24oKTsKICAgICAgICAgcmV0dXJuIGlzTnVtYmVyU3BlY3VsYXRpb24obGVmdCkgJiYg
aXNOdW1iZXJTcGVjdWxhdGlvbihyaWdodCk7CiAgICAgfQogICAgIApAQCAtNTI1LDIzICs1MDQs
MjMgQEAgcHVibGljOgogICAgIC8vIC0gUHV0QnlWYWwgZGVmaW5pdGVseSBjaGFuZ2VzIHRoZSBh
cnJheSBpdCBzdG9yZXMgdG8sIGFuZCBtYXkgZXZlbiBjaGFuZ2UgaXRzIGxlbmd0aC4KICAgICAv
LyAtIFB1dEJ5T2Zmc2V0IGRlZmluaXRlbHkgY2hhbmdlcyB0aGUgb2JqZWN0IGl0IHN0b3JlcyB0
by4KICAgICAvLyAtIGFuZCBzbyBvbi4KLSAgICBib29sIGJ5VmFsSXNQdXJlKE5vZGUmIG5vZGUp
CisgICAgYm9vbCBieVZhbElzUHVyZShOb2RlKiBub2RlKQogICAgIHsKLSAgICAgICAgc3dpdGNo
IChub2RlLmFycmF5TW9kZSgpLnR5cGUoKSkgeworICAgICAgICBzd2l0Y2ggKG5vZGUtPmFycmF5
TW9kZSgpLnR5cGUoKSkgewogICAgICAgICBjYXNlIEFycmF5OjpHZW5lcmljOgogICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBjYXNlIEFycmF5OjpJbnQzMjoKICAgICAgICAgY2Fz
ZSBBcnJheTo6RG91YmxlOgogICAgICAgICBjYXNlIEFycmF5OjpDb250aWd1b3VzOgogICAgICAg
ICBjYXNlIEFycmF5OjpBcnJheVN0b3JhZ2U6Ci0gICAgICAgICAgICByZXR1cm4gIW5vZGUuYXJy
YXlNb2RlKCkuaXNPdXRPZkJvdW5kcygpOworICAgICAgICAgICAgcmV0dXJuICFub2RlLT5hcnJh
eU1vZGUoKS5pc091dE9mQm91bmRzKCk7CiAgICAgICAgIGNhc2UgQXJyYXk6OlNsb3dQdXRBcnJh
eVN0b3JhZ2U6Ci0gICAgICAgICAgICByZXR1cm4gIW5vZGUuYXJyYXlNb2RlKCkubWF5U3RvcmVU
b0hvbGUoKTsKKyAgICAgICAgICAgIHJldHVybiAhbm9kZS0+YXJyYXlNb2RlKCkubWF5U3RvcmVU
b0hvbGUoKTsKICAgICAgICAgY2FzZSBBcnJheTo6U3RyaW5nOgotICAgICAgICAgICAgcmV0dXJu
IG5vZGUub3AoKSA9PSBHZXRCeVZhbDsKKyAgICAgICAgICAgIHJldHVybiBub2RlLT5vcCgpID09
IEdldEJ5VmFsOwogI2lmIFVTRShKU1ZBTFVFMzJfNjQpCiAgICAgICAgIGNhc2UgQXJyYXk6OkFy
Z3VtZW50czoKLSAgICAgICAgICAgIGlmIChub2RlLm9wKCkgPT0gR2V0QnlWYWwpCisgICAgICAg
ICAgICBpZiAobm9kZS0+b3AoKSA9PSBHZXRCeVZhbCkKICAgICAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICNlbmRpZiAvLyBVU0UoSlNWQUxVRTMy
XzY0KQpAQCAtNTUwLDEzICs1MjksMTMgQEAgcHVibGljOgogICAgICAgICB9CiAgICAgfQogICAg
IAotICAgIGJvb2wgY2xvYmJlcnNXb3JsZChOb2RlJiBub2RlKQorICAgIGJvb2wgY2xvYmJlcnNX
b3JsZChOb2RlKiBub2RlKQogICAgIHsKLSAgICAgICAgaWYgKG5vZGUuZmxhZ3MoKSAmIE5vZGVD
bG9iYmVyc1dvcmxkKQorICAgICAgICBpZiAobm9kZS0+ZmxhZ3MoKSAmIE5vZGVDbG9iYmVyc1dv
cmxkKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGlmICghKG5vZGUuZmxhZ3Mo
KSAmIE5vZGVNaWdodENsb2JiZXIpKQorICAgICAgICBpZiAoIShub2RlLT5mbGFncygpICYgTm9k
ZU1pZ2h0Q2xvYmJlcikpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIHN3aXRj
aCAobm9kZS5vcCgpKSB7CisgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewogICAgICAgICBj
YXNlIFZhbHVlQWRkOgogICAgICAgICBjYXNlIENvbXBhcmVMZXNzOgogICAgICAgICBjYXNlIENv
bXBhcmVMZXNzRXE6CkBAIC01NzQsOSArNTUzLDkgQEAgcHVibGljOgogICAgICAgICB9CiAgICAg
fQogICAgIAotICAgIGJvb2wgY2xvYmJlcnNXb3JsZChOb2RlSW5kZXggbm9kZUluZGV4KQorICAg
IGJvb2wgY2xvYmJlcnNXb3JsZChOb2RlKiBub2RlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGNs
b2JiZXJzV29ybGQoYXQobm9kZUluZGV4KSk7CisgICAgICAgIHJldHVybiBjbG9iYmVyc1dvcmxk
KG5vZGUpOwogICAgIH0KICAgICAKICAgICB2b2lkIGRldGVybWluZVJlYWNoYWJpbGl0eSgpOwpA
QCAtNTg0LDUyICs1NjMsNTcgQEAgcHVibGljOgogICAgIAogICAgIHZvaWQgcmVzZXRFeGl0U3Rh
dGVzKCk7CiAgICAgCi0gICAgdW5zaWduZWQgdmFyQXJnTnVtQ2hpbGRyZW4oTm9kZSYgbm9kZSkK
KyAgICB1bnNpZ25lZCB2YXJBcmdOdW1DaGlsZHJlbihOb2RlKiBub2RlKQogICAgIHsKLSAgICAg
ICAgQVNTRVJUKG5vZGUuZmxhZ3MoKSAmIE5vZGVIYXNWYXJBcmdzKTsKLSAgICAgICAgcmV0dXJu
IG5vZGUubnVtQ2hpbGRyZW4oKTsKKyAgICAgICAgQVNTRVJUKG5vZGUtPmZsYWdzKCkgJiBOb2Rl
SGFzVmFyQXJncyk7CisgICAgICAgIHJldHVybiBub2RlLT5udW1DaGlsZHJlbigpOwogICAgIH0K
ICAgICAKLSAgICB1bnNpZ25lZCBudW1DaGlsZHJlbihOb2RlJiBub2RlKQorICAgIHVuc2lnbmVk
IG51bUNoaWxkcmVuKE5vZGUqIG5vZGUpCiAgICAgewotICAgICAgICBpZiAobm9kZS5mbGFncygp
ICYgTm9kZUhhc1ZhckFyZ3MpCisgICAgICAgIGlmIChub2RlLT5mbGFncygpICYgTm9kZUhhc1Zh
ckFyZ3MpCiAgICAgICAgICAgICByZXR1cm4gdmFyQXJnTnVtQ2hpbGRyZW4obm9kZSk7CiAgICAg
ICAgIHJldHVybiBBZGphY2VuY3lMaXN0OjpTaXplOwogICAgIH0KICAgICAKLSAgICBFZGdlJiB2
YXJBcmdDaGlsZChOb2RlJiBub2RlLCB1bnNpZ25lZCBpbmRleCkKKyAgICBFZGdlJiB2YXJBcmdD
aGlsZChOb2RlKiBub2RlLCB1bnNpZ25lZCBpbmRleCkKICAgICB7Ci0gICAgICAgIEFTU0VSVChu
b2RlLmZsYWdzKCkgJiBOb2RlSGFzVmFyQXJncyk7Ci0gICAgICAgIHJldHVybiBtX3ZhckFyZ0No
aWxkcmVuW25vZGUuZmlyc3RDaGlsZCgpICsgaW5kZXhdOworICAgICAgICBBU1NFUlQobm9kZS0+
ZmxhZ3MoKSAmIE5vZGVIYXNWYXJBcmdzKTsKKyAgICAgICAgcmV0dXJuIG1fdmFyQXJnQ2hpbGRy
ZW5bbm9kZS0+Zmlyc3RDaGlsZCgpICsgaW5kZXhdOwogICAgIH0KICAgICAKLSAgICBFZGdlJiBj
aGlsZChOb2RlJiBub2RlLCB1bnNpZ25lZCBpbmRleCkKKyAgICBFZGdlJiBjaGlsZChOb2RlKiBu
b2RlLCB1bnNpZ25lZCBpbmRleCkKICAgICB7Ci0gICAgICAgIGlmIChub2RlLmZsYWdzKCkgJiBO
b2RlSGFzVmFyQXJncykKKyAgICAgICAgaWYgKG5vZGUtPmZsYWdzKCkgJiBOb2RlSGFzVmFyQXJn
cykKICAgICAgICAgICAgIHJldHVybiB2YXJBcmdDaGlsZChub2RlLCBpbmRleCk7Ci0gICAgICAg
IHJldHVybiBub2RlLmNoaWxkcmVuLmNoaWxkKGluZGV4KTsKKyAgICAgICAgcmV0dXJuIG5vZGUt
PmNoaWxkcmVuLmNoaWxkKGluZGV4KTsKICAgICB9CiAgICAgCi0gICAgdm9pZCB2b3RlKEVkZ2Ug
ZWRnZSwgdW5zaWduZWQgYmFsbG90KQorICAgIHZvaWQgdm90ZU5vZGUoTm9kZSogbm9kZSwgdW5z
aWduZWQgYmFsbG90KQogICAgIHsKLSAgICAgICAgc3dpdGNoIChhdChlZGdlKS5vcCgpKSB7Cisg
ICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewogICAgICAgICBjYXNlIFZhbHVlVG9JbnQzMjoK
ICAgICAgICAgY2FzZSBVSW50MzJUb051bWJlcjoKLSAgICAgICAgICAgIGVkZ2UgPSBhdChlZGdl
KS5jaGlsZDEoKTsKKyAgICAgICAgICAgIG5vZGUgPSBub2RlLT5jaGlsZDEoKS5ub2RlKCk7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBpZiAoYXQoZWRnZSkub3AoKSA9PSBHZXRMb2Nh
bCkKLSAgICAgICAgICAgIGF0KGVkZ2UpLnZhcmlhYmxlQWNjZXNzRGF0YSgpLT52b3RlKGJhbGxv
dCk7CisgICAgICAgIGlmIChub2RlLT5vcCgpID09IEdldExvY2FsKQorICAgICAgICAgICAgbm9k
ZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCktPnZvdGUoYmFsbG90KTsKKyAgICB9CisgICAgCisgICAg
dm9pZCB2b3RlTm9kZShFZGdlIGVkZ2UsIHVuc2lnbmVkIGJhbGxvdCkKKyAgICB7CisgICAgICAg
IHZvdGVOb2RlKGVkZ2Uubm9kZSgpLCBiYWxsb3QpOwogICAgIH0KICAgICAKLSAgICB2b2lkIHZv
dGUoTm9kZSYgbm9kZSwgdW5zaWduZWQgYmFsbG90KQorICAgIHZvaWQgdm90ZUNoaWxkcmVuKE5v
ZGUqIG5vZGUsIHVuc2lnbmVkIGJhbGxvdCkKICAgICB7Ci0gICAgICAgIGlmIChub2RlLmZsYWdz
KCkgJiBOb2RlSGFzVmFyQXJncykgewotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBjaGlsZElk
eCA9IG5vZGUuZmlyc3RDaGlsZCgpOwotICAgICAgICAgICAgICAgICBjaGlsZElkeCA8IG5vZGUu
Zmlyc3RDaGlsZCgpICsgbm9kZS5udW1DaGlsZHJlbigpOworICAgICAgICBpZiAobm9kZS0+Zmxh
Z3MoKSAmIE5vZGVIYXNWYXJBcmdzKSB7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGNoaWxk
SWR4ID0gbm9kZS0+Zmlyc3RDaGlsZCgpOworICAgICAgICAgICAgICAgICBjaGlsZElkeCA8IG5v
ZGUtPmZpcnN0Q2hpbGQoKSArIG5vZGUtPm51bUNoaWxkcmVuKCk7CiAgICAgICAgICAgICAgICAg
IGNoaWxkSWR4KyspIHsKICAgICAgICAgICAgICAgICBpZiAoISFtX3ZhckFyZ0NoaWxkcmVuW2No
aWxkSWR4XSkKICAgICAgICAgICAgICAgICAgICAgdm90ZShtX3ZhckFyZ0NoaWxkcmVuW2NoaWxk
SWR4XSwgYmFsbG90KTsKQEAgLTYzNywzOSArNjIxLDM4IEBAIHB1YmxpYzoKICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgaWYgKCFub2RlLmNoaWxkMSgp
KQorICAgICAgICBpZiAoIW5vZGUtPmNoaWxkMSgpKQogICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICB2b3RlKG5vZGUuY2hpbGQxKCksIGJhbGxvdCk7Ci0gICAgICAgIGlmICghbm9kZS5jaGls
ZDIoKSkKKyAgICAgICAgdm90ZShub2RlLT5jaGlsZDEoKSwgYmFsbG90KTsKKyAgICAgICAgaWYg
KCFub2RlLT5jaGlsZDIoKSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgdm90ZShub2Rl
LmNoaWxkMigpLCBiYWxsb3QpOwotICAgICAgICBpZiAoIW5vZGUuY2hpbGQzKCkpCisgICAgICAg
IHZvdGUobm9kZS0+Y2hpbGQyKCksIGJhbGxvdCk7CisgICAgICAgIGlmICghbm9kZS0+Y2hpbGQz
KCkpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIHZvdGUobm9kZS5jaGlsZDMoKSwgYmFs
bG90KTsKKyAgICAgICAgdm90ZShub2RlLT5jaGlsZDMoKSwgYmFsbG90KTsKICAgICB9CiAgICAg
Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gLy8gVCA9IE5vZGVJbmRleCBvciBFZGdlCisgICAg
dGVtcGxhdGU8dHlwZW5hbWUgVD4gLy8gVCA9IE5vZGUqIG9yIEVkZ2UKICAgICB2b2lkIHN1YnN0
aXR1dGUoQmFzaWNCbG9jayYgYmxvY2ssIHVuc2lnbmVkIHN0YXJ0SW5kZXhJbkJsb2NrLCBUIG9s
ZFRoaW5nLCBUIG5ld1RoaW5nKQogICAgIHsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpbmRleElu
QmxvY2sgPSBzdGFydEluZGV4SW5CbG9jazsgaW5kZXhJbkJsb2NrIDwgYmxvY2suc2l6ZSgpOyAr
K2luZGV4SW5CbG9jaykgewotICAgICAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRleCA9IGJsb2Nr
W2luZGV4SW5CbG9ja107Ci0gICAgICAgICAgICBOb2RlJiBub2RlID0gYXQobm9kZUluZGV4KTsK
LSAgICAgICAgICAgIGlmIChub2RlLmZsYWdzKCkgJiBOb2RlSGFzVmFyQXJncykgewotICAgICAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgY2hpbGRJZHggPSBub2RlLmZpcnN0Q2hpbGQoKTsgY2hp
bGRJZHggPCBub2RlLmZpcnN0Q2hpbGQoKSArIG5vZGUubnVtQ2hpbGRyZW4oKTsgKytjaGlsZElk
eCkgeworICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrW2luZGV4SW5CbG9ja107CisgICAg
ICAgICAgICBpZiAobm9kZS0+ZmxhZ3MoKSAmIE5vZGVIYXNWYXJBcmdzKSB7CisgICAgICAgICAg
ICAgICAgZm9yICh1bnNpZ25lZCBjaGlsZElkeCA9IG5vZGUtPmZpcnN0Q2hpbGQoKTsgY2hpbGRJ
ZHggPCBub2RlLT5maXJzdENoaWxkKCkgKyBub2RlLT5udW1DaGlsZHJlbigpOyArK2NoaWxkSWR4
KSB7CiAgICAgICAgICAgICAgICAgICAgIGlmICghIW1fdmFyQXJnQ2hpbGRyZW5bY2hpbGRJZHhd
KQotICAgICAgICAgICAgICAgICAgICAgICAgY29tcGFyZUFuZFN3YXAobV92YXJBcmdDaGlsZHJl
bltjaGlsZElkeF0sIG9sZFRoaW5nLCBuZXdUaGluZywgbm9kZS5zaG91bGRHZW5lcmF0ZSgpKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBhcmVBbmRTd2FwKG1fdmFyQXJnQ2hpbGRyZW5b
Y2hpbGRJZHhdLCBvbGRUaGluZywgbmV3VGhpbmcsIG5vZGUtPnNob3VsZEdlbmVyYXRlKCkpOwog
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIGlmICghbm9kZS5jaGlsZDEoKSkKKyAgICAgICAgICAgIGlmICghbm9k
ZS0+Y2hpbGQxKCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBjb21w
YXJlQW5kU3dhcChub2RlLmNoaWxkcmVuLmNoaWxkMSgpLCBvbGRUaGluZywgbmV3VGhpbmcsIG5v
ZGUuc2hvdWxkR2VuZXJhdGUoKSk7Ci0gICAgICAgICAgICBpZiAoIW5vZGUuY2hpbGQyKCkpCisg
ICAgICAgICAgICBjb21wYXJlQW5kU3dhcChub2RlLT5jaGlsZHJlbi5jaGlsZDEoKSwgb2xkVGhp
bmcsIG5ld1RoaW5nLCBub2RlLT5zaG91bGRHZW5lcmF0ZSgpKTsKKyAgICAgICAgICAgIGlmICgh
bm9kZS0+Y2hpbGQyKCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBj
b21wYXJlQW5kU3dhcChub2RlLmNoaWxkcmVuLmNoaWxkMigpLCBvbGRUaGluZywgbmV3VGhpbmcs
IG5vZGUuc2hvdWxkR2VuZXJhdGUoKSk7Ci0gICAgICAgICAgICBpZiAoIW5vZGUuY2hpbGQzKCkp
CisgICAgICAgICAgICBjb21wYXJlQW5kU3dhcChub2RlLT5jaGlsZHJlbi5jaGlsZDIoKSwgb2xk
VGhpbmcsIG5ld1RoaW5nLCBub2RlLT5zaG91bGRHZW5lcmF0ZSgpKTsKKyAgICAgICAgICAgIGlm
ICghbm9kZS0+Y2hpbGQzKCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAg
ICBjb21wYXJlQW5kU3dhcChub2RlLmNoaWxkcmVuLmNoaWxkMygpLCBvbGRUaGluZywgbmV3VGhp
bmcsIG5vZGUuc2hvdWxkR2VuZXJhdGUoKSk7CisgICAgICAgICAgICBjb21wYXJlQW5kU3dhcChu
b2RlLT5jaGlsZHJlbi5jaGlsZDMoKSwgb2xkVGhpbmcsIG5ld1RoaW5nLCBub2RlLT5zaG91bGRH
ZW5lcmF0ZSgpKTsKICAgICAgICAgfQogICAgIH0KICAgICAKQEAgLTY3NywyOSArNjYwLDI4IEBA
IHB1YmxpYzoKICAgICAvLyBhbnkgR2V0TG9jYWxzIGluIHRoZSBiYXNpYyBibG9jay4KICAgICAv
LyBGSVhNRTogaXQgbWF5IGJlIGFwcHJvcHJpYXRlLCBpbiB0aGUgZnV0dXJlLCB0byBnZW5lcmFs
aXplIHRoaXMgdG8gaGFuZGxlIEdldExvY2FscwogICAgIC8vIGludHJvZHVjZWQgYW55d2hlcmUg
aW4gdGhlIGJhc2ljIGJsb2NrLgotICAgIHZvaWQgc3Vic3RpdHV0ZUdldExvY2FsKEJhc2ljQmxv
Y2smIGJsb2NrLCB1bnNpZ25lZCBzdGFydEluZGV4SW5CbG9jaywgVmFyaWFibGVBY2Nlc3NEYXRh
KiB2YXJpYWJsZUFjY2Vzc0RhdGEsIE5vZGVJbmRleCBuZXdHZXRMb2NhbCkKKyAgICB2b2lkIHN1
YnN0aXR1dGVHZXRMb2NhbChCYXNpY0Jsb2NrJiBibG9jaywgdW5zaWduZWQgc3RhcnRJbmRleElu
QmxvY2ssIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhLCBOb2RlKiBuZXdH
ZXRMb2NhbCkKICAgICB7CiAgICAgICAgIGlmICh2YXJpYWJsZUFjY2Vzc0RhdGEtPmlzQ2FwdHVy
ZWQoKSkgewogICAgICAgICAgICAgLy8gTGV0IENTRSB3b3JyeSBhYm91dCB0aGlzIG9uZS4KICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICBmb3IgKHVuc2lnbmVkIGluZGV4
SW5CbG9jayA9IHN0YXJ0SW5kZXhJbkJsb2NrOyBpbmRleEluQmxvY2sgPCBibG9jay5zaXplKCk7
ICsraW5kZXhJbkJsb2NrKSB7Ci0gICAgICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4ID0gYmxv
Y2tbaW5kZXhJbkJsb2NrXTsKLSAgICAgICAgICAgIE5vZGUmIG5vZGUgPSBhdChub2RlSW5kZXgp
OworICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrW2luZGV4SW5CbG9ja107CiAgICAgICAg
ICAgICBib29sIHNob3VsZENvbnRpbnVlID0gdHJ1ZTsKLSAgICAgICAgICAgIHN3aXRjaCAobm9k
ZS5vcCgpKSB7CisgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKICAgICAgICAgICAg
IGNhc2UgU2V0TG9jYWw6IHsKLSAgICAgICAgICAgICAgICBpZiAobm9kZS5sb2NhbCgpID09IHZh
cmlhYmxlQWNjZXNzRGF0YS0+bG9jYWwoKSkKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+bG9j
YWwoKSA9PSB2YXJpYWJsZUFjY2Vzc0RhdGEtPmxvY2FsKCkpCiAgICAgICAgICAgICAgICAgICAg
IHNob3VsZENvbnRpbnVlID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBjYXNlIEdldExvY2FsOiB7Ci0g
ICAgICAgICAgICAgICAgaWYgKG5vZGUudmFyaWFibGVBY2Nlc3NEYXRhKCkgIT0gdmFyaWFibGVB
Y2Nlc3NEYXRhKQorICAgICAgICAgICAgICAgIGlmIChub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEo
KSAhPSB2YXJpYWJsZUFjY2Vzc0RhdGEpCiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwot
ICAgICAgICAgICAgICAgIHN1YnN0aXR1dGUoYmxvY2ssIGluZGV4SW5CbG9jaywgbm9kZUluZGV4
LCBuZXdHZXRMb2NhbCk7Ci0gICAgICAgICAgICAgICAgTm9kZUluZGV4IG9sZFRhaWxJbmRleCA9
IGJsb2NrLnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKHZhcmlhYmxlQWNjZXNzRGF0YS0+bG9jYWwo
KSk7Ci0gICAgICAgICAgICAgICAgaWYgKG9sZFRhaWxJbmRleCA9PSBub2RlSW5kZXgpCisgICAg
ICAgICAgICAgICAgc3Vic3RpdHV0ZShibG9jaywgaW5kZXhJbkJsb2NrLCBub2RlLCBuZXdHZXRM
b2NhbCk7CisgICAgICAgICAgICAgICAgTm9kZSogb2xkVGFpbE5vZGUgPSBibG9jay52YXJpYWJs
ZXNBdFRhaWwub3BlcmFuZCh2YXJpYWJsZUFjY2Vzc0RhdGEtPmxvY2FsKCkpOworICAgICAgICAg
ICAgICAgIGlmIChvbGRUYWlsTm9kZSA9PSBub2RlKQogICAgICAgICAgICAgICAgICAgICBibG9j
ay52YXJpYWJsZXNBdFRhaWwub3BlcmFuZCh2YXJpYWJsZUFjY2Vzc0RhdGEtPmxvY2FsKCkpID0g
bmV3R2V0TG9jYWw7CiAgICAgICAgICAgICAgICAgc2hvdWxkQ29udGludWUgPSBmYWxzZTsKICAg
ICAgICAgICAgICAgICBicmVhazsKQEAgLTcxNyw2ICs2OTksOCBAQCBwdWJsaWM6CiAgICAgQ29k
ZUJsb2NrKiBtX2NvZGVCbG9jazsKICAgICBSZWZQdHI8UHJvZmlsZXI6OkNvbXBpbGF0aW9uPiBt
X2NvbXBpbGF0aW9uOwogICAgIENvZGVCbG9jayogbV9wcm9maWxlZEJsb2NrOworICAgIAorICAg
IE5vZGVBbGxvY2F0b3ImIG1fYWxsb2NhdG9yOwogCiAgICAgVmVjdG9yPCBPd25QdHI8QmFzaWNC
bG9jaz4gLCA4PiBtX2Jsb2NrczsKICAgICBWZWN0b3I8RWRnZSwgMTY+IG1fdmFyQXJnQ2hpbGRy
ZW47CkBAIC03MjQsNyArNzA4LDcgQEAgcHVibGljOgogICAgIFZlY3RvcjxSZXNvbHZlR2xvYmFs
RGF0YT4gbV9yZXNvbHZlR2xvYmFsRGF0YTsKICAgICBWZWN0b3I8UmVzb2x2ZU9wZXJhdGlvbkRh
dGE+IG1fcmVzb2x2ZU9wZXJhdGlvbnNEYXRhOwogICAgIFZlY3RvcjxQdXRUb0Jhc2VPcGVyYXRp
b25EYXRhPiBtX3B1dFRvQmFzZU9wZXJhdGlvbkRhdGE7Ci0gICAgVmVjdG9yPE5vZGVJbmRleCwg
OD4gbV9hcmd1bWVudHM7CisgICAgVmVjdG9yPE5vZGUqLCA4PiBtX2FyZ3VtZW50czsKICAgICBT
ZWdtZW50ZWRWZWN0b3I8VmFyaWFibGVBY2Nlc3NEYXRhLCAxNj4gbV92YXJpYWJsZUFjY2Vzc0Rh
dGE7CiAgICAgU2VnbWVudGVkVmVjdG9yPEFyZ3VtZW50UG9zaXRpb24sIDg+IG1fYXJndW1lbnRQ
b3NpdGlvbnM7CiAgICAgU2VnbWVudGVkVmVjdG9yPFN0cnVjdHVyZVNldCwgMTY+IG1fc3RydWN0
dXJlU2V0OwpAQCAtNzQ0LDI5ICs3MjgsMjkgQEAgcHJpdmF0ZToKICAgICAKICAgICB2b2lkIGhh
bmRsZVN1Y2Nlc3NvcihWZWN0b3I8QmxvY2tJbmRleCwgMTY+JiB3b3JrbGlzdCwgQmxvY2tJbmRl
eCBibG9ja0luZGV4LCBCbG9ja0luZGV4IHN1Y2Nlc3NvckluZGV4KTsKICAgICAKLSAgICBBZGRT
cGVjdWxhdGlvbk1vZGUgYWRkSW1tZWRpYXRlU2hvdWxkU3BlY3VsYXRlSW50ZWdlcihOb2RlJiBh
ZGQsIGJvb2wgdmFyaWFibGVTaG91bGRTcGVjdWxhdGVJbnRlZ2VyLCBOb2RlJiBpbW1lZGlhdGUp
CisgICAgQWRkU3BlY3VsYXRpb25Nb2RlIGFkZEltbWVkaWF0ZVNob3VsZFNwZWN1bGF0ZUludGVn
ZXIoTm9kZSogYWRkLCBib29sIHZhcmlhYmxlU2hvdWxkU3BlY3VsYXRlSW50ZWdlciwgTm9kZSog
aW1tZWRpYXRlKQogICAgIHsKICAgICAgICAgQVNTRVJUKGltbWVkaWF0ZS5oYXNDb25zdGFudCgp
KTsKICAgICAgICAgCi0gICAgICAgIEpTVmFsdWUgaW1tZWRpYXRlVmFsdWUgPSBpbW1lZGlhdGUu
dmFsdWVPZkpTQ29uc3RhbnQobV9jb2RlQmxvY2spOwotICAgICAgICBpZiAoIWltbWVkaWF0ZVZh
bHVlLmlzTnVtYmVyKCkpCisgICAgICAgIEpTVmFsdWUgaW1tZWRpYXRlVmFsdWUgPSBpbW1lZGlh
dGUtPnZhbHVlT2ZKU0NvbnN0YW50KG1fY29kZUJsb2NrKTsKKyAgICAgICAgaWYgKCFpbW1lZGlh
dGVWYWx1ZS0+aXNOdW1iZXIoKSkKICAgICAgICAgICAgIHJldHVybiBEb250U3BlY3VsYXRlSW50
ZWdlcjsKICAgICAgICAgCiAgICAgICAgIGlmICghdmFyaWFibGVTaG91bGRTcGVjdWxhdGVJbnRl
Z2VyKQogICAgICAgICAgICAgcmV0dXJuIERvbnRTcGVjdWxhdGVJbnRlZ2VyOwogICAgICAgICAK
LSAgICAgICAgaWYgKGltbWVkaWF0ZVZhbHVlLmlzSW50MzIoKSkKLSAgICAgICAgICAgIHJldHVy
biBhZGQuY2FuU3BlY3VsYXRlSW50ZWdlcigpID8gU3BlY3VsYXRlSW50ZWdlciA6IERvbnRTcGVj
dWxhdGVJbnRlZ2VyOworICAgICAgICBpZiAoaW1tZWRpYXRlVmFsdWUtPmlzSW50MzIoKSkKKyAg
ICAgICAgICAgIHJldHVybiBhZGQtPmNhblNwZWN1bGF0ZUludGVnZXIoKSA/IFNwZWN1bGF0ZUlu
dGVnZXIgOiBEb250U3BlY3VsYXRlSW50ZWdlcjsKICAgICAgICAgCiAgICAgICAgIGRvdWJsZSBk
b3VibGVJbW1lZGlhdGUgPSBpbW1lZGlhdGVWYWx1ZS5hc0RvdWJsZSgpOwogICAgICAgICBjb25z
dCBkb3VibGUgdHdvVG9UaGU0OCA9IDI4MTQ3NDk3NjcxMDY1Ni4wOwogICAgICAgICBpZiAoZG91
YmxlSW1tZWRpYXRlIDwgLXR3b1RvVGhlNDggfHwgZG91YmxlSW1tZWRpYXRlID4gdHdvVG9UaGU0
OCkKICAgICAgICAgICAgIHJldHVybiBEb250U3BlY3VsYXRlSW50ZWdlcjsKICAgICAgICAgCi0g
ICAgICAgIHJldHVybiBub2RlQ2FuVHJ1bmNhdGVJbnRlZ2VyKGFkZC5hcml0aE5vZGVGbGFncygp
KSA/IFNwZWN1bGF0ZUludGVnZXJCdXRBbHdheXNXYXRjaE92ZXJmbG93IDogRG9udFNwZWN1bGF0
ZUludGVnZXI7CisgICAgICAgIHJldHVybiBub2RlQ2FuVHJ1bmNhdGVJbnRlZ2VyKGFkZC0+YXJp
dGhOb2RlRmxhZ3MoKSkgPyBTcGVjdWxhdGVJbnRlZ2VyQnV0QWx3YXlzV2F0Y2hPdmVyZmxvdyA6
IERvbnRTcGVjdWxhdGVJbnRlZ2VyOwogICAgIH0KICAgICAKLSAgICBib29sIG11bEltbWVkaWF0
ZVNob3VsZFNwZWN1bGF0ZUludGVnZXIoTm9kZSYgbXVsLCBOb2RlJiB2YXJpYWJsZSwgTm9kZSYg
aW1tZWRpYXRlKQorICAgIGJvb2wgbXVsSW1tZWRpYXRlU2hvdWxkU3BlY3VsYXRlSW50ZWdlcihO
b2RlKiBtdWwsIE5vZGUqIHZhcmlhYmxlLCBOb2RlKiBpbW1lZGlhdGUpCiAgICAgewogICAgICAg
ICBBU1NFUlQoaW1tZWRpYXRlLmhhc0NvbnN0YW50KCkpOwogICAgICAgICAKQEAgLTc3NCw3ICs3
NTgsNyBAQCBwcml2YXRlOgogICAgICAgICBpZiAoIWltbWVkaWF0ZVZhbHVlLmlzSW50MzIoKSkK
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgCi0gICAgICAgIGlmICghdmFyaWFi
bGUuc2hvdWxkU3BlY3VsYXRlSW50ZWdlckZvckFyaXRobWV0aWMoKSkKKyAgICAgICAgaWYgKCF2
YXJpYWJsZS0+c2hvdWxkU3BlY3VsYXRlSW50ZWdlckZvckFyaXRobWV0aWMoKSkKICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgCiAgICAgICAgIGludDMyX3QgaW50SW1tZWRpYXRl
ID0gaW1tZWRpYXRlVmFsdWUuYXNJbnQzMigpOwpAQCAtNzg1LDE0ICs3NjksMTQgQEAgcHJpdmF0
ZToKICAgICAgICAgLy8gY2FuU3BlY3VsYXRlSW50ZWdlcigpIGltcGxpZXMpLgogICAgICAgICBj
b25zdCBpbnQzMl90IHR3b1RvVGhlMjIgPSAxIDw8IDIyOwogICAgICAgICBpZiAoaW50SW1tZWRp
YXRlIDw9IC10d29Ub1RoZTIyIHx8IGludEltbWVkaWF0ZSA+PSB0d29Ub1RoZTIyKQotICAgICAg
ICAgICAgcmV0dXJuIG11bC5jYW5TcGVjdWxhdGVJbnRlZ2VyKCkgJiYgIW5vZGVNYXlPdmVyZmxv
dyhtdWwuYXJpdGhOb2RlRmxhZ3MoKSk7CisgICAgICAgICAgICByZXR1cm4gbXVsLT5jYW5TcGVj
dWxhdGVJbnRlZ2VyKCkgJiYgIW5vZGVNYXlPdmVyZmxvdyhtdWwtPmFyaXRoTm9kZUZsYWdzKCkp
OwogCi0gICAgICAgIHJldHVybiBtdWwuY2FuU3BlY3VsYXRlSW50ZWdlcigpOworICAgICAgICBy
ZXR1cm4gbXVsLT5jYW5TcGVjdWxhdGVJbnRlZ2VyKCk7CiAgICAgfQogICAgIAogICAgIC8vIFdo
ZW4gYSBub2RlJ3MgcmVmQ291bnQgZ29lcyBmcm9tIDAgdG8gMSwgaXQgbXVzdCAobG9naWNhbGx5
KSByZWN1cnNpdmVseSByZWYgYWxsIG9mIGl0cyBjaGlsZHJlbiwgYW5kIHZpY2UgdmVyc2EuCi0g
ICAgdm9pZCByZWZDaGlsZHJlbihOb2RlSW5kZXgpOwotICAgIHZvaWQgZGVyZWZDaGlsZHJlbihO
b2RlSW5kZXgpOworICAgIHZvaWQgcmVmQ2hpbGRyZW4oTm9kZSopOworICAgIHZvaWQgZGVyZWZD
aGlsZHJlbihOb2RlKik7CiB9OwogCiBjbGFzcyBHZXRCeXRlY29kZUJlZ2luRm9yQmxvY2sgewpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJbnNlcnRpb25TZXQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0luc2VydGlvblNldC5oCShyZXZp
c2lvbiAxNDA1MDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0luc2VydGlvblNl
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOSwxNCArMzksMTQgQEAgY2xhc3MgSW5zZXJ0aW9uIHsK
IHB1YmxpYzoKICAgICBJbnNlcnRpb24oKSB7IH0KICAgICAKLSAgICBJbnNlcnRpb24oc2l6ZV90
IGluZGV4LCBOb2RlSW5kZXggZWxlbWVudCkKKyAgICBJbnNlcnRpb24oc2l6ZV90IGluZGV4LCBO
b2RlKiBlbGVtZW50KQogICAgICAgICA6IG1faW5kZXgoaW5kZXgpCiAgICAgICAgICwgbV9lbGVt
ZW50KGVsZW1lbnQpCiAgICAgewogICAgIH0KICAgICAKICAgICBzaXplX3QgaW5kZXgoKSBjb25z
dCB7IHJldHVybiBtX2luZGV4OyB9Ci0gICAgTm9kZUluZGV4IGVsZW1lbnQoKSBjb25zdCB7IHJl
dHVybiBtX2VsZW1lbnQ7IH0KKyAgICBOb2RlKiBlbGVtZW50KCkgY29uc3QgeyByZXR1cm4gbV9l
bGVtZW50OyB9CiBwcml2YXRlOgogICAgIHNpemVfdCBtX2luZGV4OwogICAgIE5vZGVJbmRleCBt
X2VsZW1lbnQ7CkBAIC01OSwyMCArNTksMjAgQEAgcHVibGljOgogICAgIHsKICAgICB9CiAgICAg
Ci0gICAgTm9kZUluZGV4IGluc2VydChjb25zdCBJbnNlcnRpb24mIGluc2VydGlvbikKKyAgICBO
b2RlKiBpbnNlcnQoY29uc3QgSW5zZXJ0aW9uJiBpbnNlcnRpb24pCiAgICAgewogICAgICAgICBB
U1NFUlQoIW1faW5zZXJ0aW9ucy5zaXplKCkgfHwgbV9pbnNlcnRpb25zLmxhc3QoKS5pbmRleCgp
IDw9IGluc2VydGlvbi5pbmRleCgpKTsKICAgICAgICAgbV9pbnNlcnRpb25zLmFwcGVuZChpbnNl
cnRpb24pOwogICAgICAgICByZXR1cm4gaW5zZXJ0aW9uLmVsZW1lbnQoKTsKICAgICB9CiAgICAg
Ci0gICAgTm9kZUluZGV4IGluc2VydChzaXplX3QgaW5kZXgsIE5vZGVJbmRleCBlbGVtZW50KQor
ICAgIE5vZGUqIGluc2VydChzaXplX3QgaW5kZXgsIE5vZGVJbmRleCBlbGVtZW50KQogICAgIHsK
ICAgICAgICAgcmV0dXJuIGluc2VydChJbnNlcnRpb24oaW5kZXgsIGVsZW1lbnQpKTsKICAgICB9
CiAKICNkZWZpbmUgREZHX0RFRklORV9JTlNFUlRfTk9ERSh0ZW1wbGF0ZVByZSwgdGVtcGxhdGVQ
b3N0LCB0eXBlUGFyYW1zLCB2YWx1ZVBhcmFtc0NvbW1hLCB2YWx1ZVBhcmFtcywgdmFsdWVBcmdz
KSBcCi0gICAgdGVtcGxhdGVQcmUgdHlwZVBhcmFtcyB0ZW1wbGF0ZVBvc3QgTm9kZUluZGV4IGlu
c2VydE5vZGUoc2l6ZV90IGluZGV4LCBSZWZDaGlsZHJlbk1vZGUgcmVmQ2hpbGRyZW5Nb2RlLCBS
ZWZOb2RlTW9kZSByZWZOb2RlTW9kZSwgU3BlY3VsYXRlZFR5cGUgdHlwZSB2YWx1ZVBhcmFtc0Nv
bW1hIHZhbHVlUGFyYW1zKSBcCisgICAgdGVtcGxhdGVQcmUgdHlwZVBhcmFtcyB0ZW1wbGF0ZVBv
c3QgTm9kZSogaW5zZXJ0Tm9kZShzaXplX3QgaW5kZXgsIFJlZkNoaWxkcmVuTW9kZSByZWZDaGls
ZHJlbk1vZGUsIFJlZk5vZGVNb2RlIHJlZk5vZGVNb2RlLCBTcGVjdWxhdGVkVHlwZSB0eXBlIHZh
bHVlUGFyYW1zQ29tbWEgdmFsdWVQYXJhbXMpIFwKICAgICB7IFwKICAgICAgICAgcmV0dXJuIGlu
c2VydChpbmRleCwgbV9ncmFwaC5hZGROb2RlKHJlZkNoaWxkcmVuTW9kZSwgcmVmTm9kZU1vZGUs
IHR5cGUgdmFsdWVQYXJhbXNDb21tYSB2YWx1ZUFyZ3MpKTsgXAogICAgIH0KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTG9uZ0xpdmVkU3RhdGUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTG9uZ0xpdmVkU3RhdGUuY3BwCShyZXZpc2lv
biAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdMb25nTGl2ZWRTdGF0ZS5jcHAJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGR0xv
bmdMaXZlZFN0YXRlLmgiCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBERkcgeworCitMb25nTGl2ZWRTdGF0ZTo6TG9uZ0xpdmVkU3RhdGUoKQorewor
fQorCitMb25nTGl2ZWRTdGF0ZTo6fkxvbmdMaXZlZFN0YXRlKCkKK3sKK30KKwordm9pZCBMb25n
TGl2ZWRTdGF0ZTo6c2hyaW5rVG9GaXQoKQoreworICAgIG1fYWxsb2NhdG9yLnJlc2V0KCk7Cit9
CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklU
KQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0xvbmdMaXZlZFN0YXRlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdMb25nTGl2ZWRTdGF0
ZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdMb25nTGl2
ZWRTdGF0ZS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDU1IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHTG9uZ0xpdmVkU3RhdGVf
aAorI2RlZmluZSBERkdMb25nTGl2ZWRTdGF0ZV9oCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0u
aD4KKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZHTm9kZUFsbG9jYXRvci5o
IgorI2luY2x1ZGUgPHd0Zi9GYXN0QWxsb2NCYXNlLmg+CisjaW5jbHVkZSA8d3RmL05vbmNvcHlh
YmxlLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3MgTG9uZ0xp
dmVkU3RhdGUgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOyBXVEZfTUFLRV9OT05DT1BZ
QUJMRShMb25nTGl2ZWRTdGF0ZSk7CitwdWJsaWM6CisgICAgTG9uZ0xpdmVkU3RhdGUoKTsKKyAg
ICB+TG9uZ0xpdmVkU3RhdGUoKTsKKyAgICAKKyAgICB2b2lkIHNocmlua1RvRml0KCk7CisgICAg
CisgICAgTm9kZUFsbG9jYXRvciBtX2FsbG9jYXRvcjsKK307CisKK30gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZHTG9u
Z0xpdmVkU3RhdGVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5jcHAJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuY3BwCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDU1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdOb2Rl
LmgiCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRGR05vZGVBbGxvY2F0b3Iu
aCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCit1bnNpZ25lZCBOb2RlOjpp
bmRleCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIE5vZGVBbGxvY2F0b3I6OmFsbG9jYXRvck9mKHRo
aXMpLT5pbmRleE9mKHRoaXMpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKK25h
bWVzcGFjZSBXVEYgeworCit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgTm9k
ZSogbm9kZSkKK3sKKyAgICBpZiAoIW5vZGUpCisgICAgICAgIG91dC5wcmludCgiLSIpOworICAg
IGVsc2UKKyAgICAgICAgb3V0LnByaW50KCJAIiwgbm9kZS0+aW5kZXgoKSk7Cit9CisKK30gLy8g
bmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCShyZXZpc2lvbiAxNDA1MDQpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEyLCAyMDEzIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjgs
NyArNjgsNyBAQCBzdHJ1Y3QgTmV3QXJyYXlCdWZmZXJEYXRhIHsKIAogLy8gVGhpcyB0eXBlIHVz
ZWQgaW4gcGFzc2luZyBhbiBpbW1lZGlhdGUgYXJndW1lbnQgdG8gTm9kZSBjb25zdHJ1Y3RvcjsK
IC8vIGRpc3Rpbmd1aXNoZXMgYW4gaW1tZWRpYXRlIHZhbHVlICh0eXBpY2FsbHkgYW4gaW5kZXgg
aW50byBhIENvZGVCbG9jayBkYXRhIHN0cnVjdHVyZSAtIAotLy8gYSBjb25zdGFudCBpbmRleCwg
YXJndW1lbnQsIG9yIGlkZW50aWZpZXIpIGZyb20gYSBOb2RlSW5kZXguCisvLyBhIGNvbnN0YW50
IGluZGV4LCBhcmd1bWVudCwgb3IgaWRlbnRpZmllcikgZnJvbSBhIE5vZGUqLgogc3RydWN0IE9w
SW5mbyB7CiAgICAgZXhwbGljaXQgT3BJbmZvKGludDMyX3QgdmFsdWUpIDogbV92YWx1ZShzdGF0
aWNfY2FzdDx1aW50cHRyX3Q+KHZhbHVlKSkgeyB9CiAgICAgZXhwbGljaXQgT3BJbmZvKHVpbnQz
Ml90IHZhbHVlKSA6IG1fdmFsdWUoc3RhdGljX2Nhc3Q8dWludHB0cl90Pih2YWx1ZSkpIHsgfQpA
QCAtOTksNyArOTksNyBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgfQogICAgIAogICAgIC8vIENvbnN0
cnVjdCBhIG5vZGUgd2l0aCB1cCB0byAzIGNoaWxkcmVuLCBubyBpbW1lZGlhdGUgdmFsdWUuCi0g
ICAgTm9kZShOb2RlVHlwZSBvcCwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBOb2RlSW5kZXggY2hp
bGQxID0gTm9Ob2RlLCBOb2RlSW5kZXggY2hpbGQyID0gTm9Ob2RlLCBOb2RlSW5kZXggY2hpbGQz
ID0gTm9Ob2RlKQorICAgIE5vZGUoTm9kZVR5cGUgb3AsIENvZGVPcmlnaW4gY29kZU9yaWdpbiwg
Tm9kZSogY2hpbGQxID0gMCwgTm9kZSogY2hpbGQyID0gMCwgTm9kZSogY2hpbGQzID0gMCkKICAg
ICAgICAgOiBjb2RlT3JpZ2luKGNvZGVPcmlnaW4pCiAgICAgICAgICwgY2hpbGRyZW4oQWRqYWNl
bmN5TGlzdDo6Rml4ZWQsIGNoaWxkMSwgY2hpbGQyLCBjaGlsZDMpCiAgICAgICAgICwgbV92aXJ0
dWFsUmVnaXN0ZXIoSW52YWxpZFZpcnR1YWxSZWdpc3RlcikKQEAgLTExMSw3ICsxMTEsNyBAQCBz
dHJ1Y3QgTm9kZSB7CiAgICAgfQogCiAgICAgLy8gQ29uc3RydWN0IGEgbm9kZSB3aXRoIHVwIHRv
IDMgY2hpbGRyZW4gYW5kIGFuIGltbWVkaWF0ZSB2YWx1ZS4KLSAgICBOb2RlKE5vZGVUeXBlIG9w
LCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIE9wSW5mbyBpbW0sIE5vZGVJbmRleCBjaGlsZDEgPSBO
b05vZGUsIE5vZGVJbmRleCBjaGlsZDIgPSBOb05vZGUsIE5vZGVJbmRleCBjaGlsZDMgPSBOb05v
ZGUpCisgICAgTm9kZShOb2RlVHlwZSBvcCwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBPcEluZm8g
aW1tLCBOb2RlKiBjaGlsZDEgPSAwLCBOb2RlKiBjaGlsZDIgPSAwLCBOb2RlKiBjaGlsZDMgPSAw
KQogICAgICAgICA6IGNvZGVPcmlnaW4oY29kZU9yaWdpbikKICAgICAgICAgLCBjaGlsZHJlbihB
ZGphY2VuY3lMaXN0OjpGaXhlZCwgY2hpbGQxLCBjaGlsZDIsIGNoaWxkMykKICAgICAgICAgLCBt
X3ZpcnR1YWxSZWdpc3RlcihJbnZhbGlkVmlydHVhbFJlZ2lzdGVyKQpAQCAtMTI0LDcgKzEyNCw3
IEBAIHN0cnVjdCBOb2RlIHsKICAgICB9CiAKICAgICAvLyBDb25zdHJ1Y3QgYSBub2RlIHdpdGgg
dXAgdG8gMyBjaGlsZHJlbiBhbmQgdHdvIGltbWVkaWF0ZSB2YWx1ZXMuCi0gICAgTm9kZShOb2Rl
VHlwZSBvcCwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBPcEluZm8gaW1tMSwgT3BJbmZvIGltbTIs
IE5vZGVJbmRleCBjaGlsZDEgPSBOb05vZGUsIE5vZGVJbmRleCBjaGlsZDIgPSBOb05vZGUsIE5v
ZGVJbmRleCBjaGlsZDMgPSBOb05vZGUpCisgICAgTm9kZShOb2RlVHlwZSBvcCwgQ29kZU9yaWdp
biBjb2RlT3JpZ2luLCBPcEluZm8gaW1tMSwgT3BJbmZvIGltbTIsIE5vZGUqIGNoaWxkMSA9IDAs
IE5vZGUqIGNoaWxkMiA9IDAsIE5vZGUqIGNoaWxkMyA9IDApCiAgICAgICAgIDogY29kZU9yaWdp
bihjb2RlT3JpZ2luKQogICAgICAgICAsIGNoaWxkcmVuKEFkamFjZW5jeUxpc3Q6OkZpeGVkLCBj
aGlsZDEsIGNoaWxkMiwgY2hpbGQzKQogICAgICAgICAsIG1fdmlydHVhbFJlZ2lzdGVyKEludmFs
aWRWaXJ0dWFsUmVnaXN0ZXIpCkBAIC0xNTQsNiArMTU0LDkgQEAgc3RydWN0IE5vZGUgewogICAg
IE5vZGVUeXBlIG9wKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Tm9kZVR5cGU+KG1fb3Ap
OyB9CiAgICAgTm9kZUZsYWdzIGZsYWdzKCkgY29uc3QgeyByZXR1cm4gbV9mbGFnczsgfQogICAg
IAorICAgIC8vIFRoaXMgaXMgbm90IGEgZmFzdCBtZXRob2QuCisgICAgdW5zaWduZWQgaW5kZXgo
KSBjb25zdDsKKyAgICAKICAgICB2b2lkIHNldE9wKE5vZGVUeXBlIG9wKQogICAgIHsKICAgICAg
ICAgbV9vcCA9IG9wOwpAQCAtMjgxLDcgKzI4NCw3IEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAg
Y29udmVydFRvU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnQoc3RydWN0dXJlU2V0KCkuc2lu
Z2xldG9uU3RydWN0dXJlKCkpOwogICAgIH0KICAgICAKLSAgICB2b2lkIGNvbnZlcnRUb0dldEJ5
T2Zmc2V0KHVuc2lnbmVkIHN0b3JhZ2VBY2Nlc3NEYXRhSW5kZXgsIE5vZGVJbmRleCBzdG9yYWdl
KQorICAgIHZvaWQgY29udmVydFRvR2V0QnlPZmZzZXQodW5zaWduZWQgc3RvcmFnZUFjY2Vzc0Rh
dGFJbmRleCwgTm9kZSogc3RvcmFnZSkKICAgICB7CiAgICAgICAgIEFTU0VSVChtX29wID09IEdl
dEJ5SWQgfHwgbV9vcCA9PSBHZXRCeUlkRmx1c2gpOwogICAgICAgICBtX29wSW5mbyA9IHN0b3Jh
Z2VBY2Nlc3NEYXRhSW5kZXg7CkBAIC0yOTAsNyArMjkzLDcgQEAgc3RydWN0IE5vZGUgewogICAg
ICAgICBtX2ZsYWdzICY9IH5Ob2RlQ2xvYmJlcnNXb3JsZDsKICAgICB9CiAgICAgCi0gICAgdm9p
ZCBjb252ZXJ0VG9QdXRCeU9mZnNldCh1bnNpZ25lZCBzdG9yYWdlQWNjZXNzRGF0YUluZGV4LCBO
b2RlSW5kZXggc3RvcmFnZSkKKyAgICB2b2lkIGNvbnZlcnRUb1B1dEJ5T2Zmc2V0KHVuc2lnbmVk
IHN0b3JhZ2VBY2Nlc3NEYXRhSW5kZXgsIE5vZGUqIHN0b3JhZ2UpCiAgICAgewogICAgICAgICBB
U1NFUlQobV9vcCA9PSBQdXRCeUlkIHx8IG1fb3AgPT0gUHV0QnlJZERpcmVjdCk7CiAgICAgICAg
IG1fb3BJbmZvID0gc3RvcmFnZUFjY2Vzc0RhdGFJbmRleDsKQEAgLTkyMCw5ICs5MjMsMTAgQEAg
c3RydWN0IE5vZGUgewogICAgICAgICByZXR1cm4gbV9yZWZDb3VudDsKICAgICB9CiAKLSAgICB2
b2lkIHJlZigpCisgICAgTm9kZSogcmVmKCkKICAgICB7CiAgICAgICAgIG1fcmVmQ291bnQrKzsK
KyAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgfQogCiAgICAgdW5zaWduZWQgcG9zdGZpeFJlZigp
CkBAIC0xMTM1LDQ0ICsxMTM5LDQ0IEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAgcmV0dXJuIGlz
Q2VsbFNwZWN1bGF0aW9uKHByZWRpY3Rpb24oKSk7CiAgICAgfQogICAgIAotICAgIHN0YXRpYyBi
b29sIHNob3VsZFNwZWN1bGF0ZUludGVnZXIoTm9kZSYgb3AxLCBOb2RlJiBvcDIpCisgICAgc3Rh
dGljIGJvb2wgc2hvdWxkU3BlY3VsYXRlSW50ZWdlcihOb2RlKiBvcDEsIE5vZGUqIG9wMikKICAg
ICB7Ci0gICAgICAgIHJldHVybiBvcDEuc2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpICYmIG9wMi5z
aG91bGRTcGVjdWxhdGVJbnRlZ2VyKCk7CisgICAgICAgIHJldHVybiBvcDEtPnNob3VsZFNwZWN1
bGF0ZUludGVnZXIoKSAmJiBvcDItPnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKTsKICAgICB9CiAg
ICAgCi0gICAgc3RhdGljIGJvb2wgc2hvdWxkU3BlY3VsYXRlSW50ZWdlckZvckFyaXRobWV0aWMo
Tm9kZSYgb3AxLCBOb2RlJiBvcDIpCisgICAgc3RhdGljIGJvb2wgc2hvdWxkU3BlY3VsYXRlSW50
ZWdlckZvckFyaXRobWV0aWMoTm9kZSogb3AxLCBOb2RlKiBvcDIpCiAgICAgewotICAgICAgICBy
ZXR1cm4gb3AxLnNob3VsZFNwZWN1bGF0ZUludGVnZXJGb3JBcml0aG1ldGljKCkgJiYgb3AyLnNo
b3VsZFNwZWN1bGF0ZUludGVnZXJGb3JBcml0aG1ldGljKCk7CisgICAgICAgIHJldHVybiBvcDEt
PnNob3VsZFNwZWN1bGF0ZUludGVnZXJGb3JBcml0aG1ldGljKCkgJiYgb3AyLT5zaG91bGRTcGVj
dWxhdGVJbnRlZ2VyRm9yQXJpdGhtZXRpYygpOwogICAgIH0KICAgICAKLSAgICBzdGF0aWMgYm9v
bCBzaG91bGRTcGVjdWxhdGVJbnRlZ2VyRXhwZWN0aW5nRGVmaW5lZChOb2RlJiBvcDEsIE5vZGUm
IG9wMikKKyAgICBzdGF0aWMgYm9vbCBzaG91bGRTcGVjdWxhdGVJbnRlZ2VyRXhwZWN0aW5nRGVm
aW5lZChOb2RlKiBvcDEsIE5vZGUqIG9wMikKICAgICB7Ci0gICAgICAgIHJldHVybiBvcDEuc2hv
dWxkU3BlY3VsYXRlSW50ZWdlckV4cGVjdGluZ0RlZmluZWQoKSAmJiBvcDIuc2hvdWxkU3BlY3Vs
YXRlSW50ZWdlckV4cGVjdGluZ0RlZmluZWQoKTsKKyAgICAgICAgcmV0dXJuIG9wMS0+c2hvdWxk
U3BlY3VsYXRlSW50ZWdlckV4cGVjdGluZ0RlZmluZWQoKSAmJiBvcDItPnNob3VsZFNwZWN1bGF0
ZUludGVnZXJFeHBlY3RpbmdEZWZpbmVkKCk7CiAgICAgfQogICAgIAotICAgIHN0YXRpYyBib29s
IHNob3VsZFNwZWN1bGF0ZURvdWJsZUZvckFyaXRobWV0aWMoTm9kZSYgb3AxLCBOb2RlJiBvcDIp
CisgICAgc3RhdGljIGJvb2wgc2hvdWxkU3BlY3VsYXRlRG91YmxlRm9yQXJpdGhtZXRpYyhOb2Rl
KiBvcDEsIE5vZGUqIG9wMikKICAgICB7Ci0gICAgICAgIHJldHVybiBvcDEuc2hvdWxkU3BlY3Vs
YXRlRG91YmxlRm9yQXJpdGhtZXRpYygpICYmIG9wMi5zaG91bGRTcGVjdWxhdGVEb3VibGVGb3JB
cml0aG1ldGljKCk7CisgICAgICAgIHJldHVybiBvcDEtPnNob3VsZFNwZWN1bGF0ZURvdWJsZUZv
ckFyaXRobWV0aWMoKSAmJiBvcDItPnNob3VsZFNwZWN1bGF0ZURvdWJsZUZvckFyaXRobWV0aWMo
KTsKICAgICB9CiAgICAgCi0gICAgc3RhdGljIGJvb2wgc2hvdWxkU3BlY3VsYXRlTnVtYmVyKE5v
ZGUmIG9wMSwgTm9kZSYgb3AyKQorICAgIHN0YXRpYyBib29sIHNob3VsZFNwZWN1bGF0ZU51bWJl
cihOb2RlKiBvcDEsIE5vZGUqIG9wMikKICAgICB7Ci0gICAgICAgIHJldHVybiBvcDEuc2hvdWxk
U3BlY3VsYXRlTnVtYmVyKCkgJiYgb3AyLnNob3VsZFNwZWN1bGF0ZU51bWJlcigpOworICAgICAg
ICByZXR1cm4gb3AxLT5zaG91bGRTcGVjdWxhdGVOdW1iZXIoKSAmJiBvcDItPnNob3VsZFNwZWN1
bGF0ZU51bWJlcigpOwogICAgIH0KICAgICAKLSAgICBzdGF0aWMgYm9vbCBzaG91bGRTcGVjdWxh
dGVOdW1iZXJFeHBlY3RpbmdEZWZpbmVkKE5vZGUmIG9wMSwgTm9kZSYgb3AyKQorICAgIHN0YXRp
YyBib29sIHNob3VsZFNwZWN1bGF0ZU51bWJlckV4cGVjdGluZ0RlZmluZWQoTm9kZSogb3AxLCBO
b2RlKiBvcDIpCiAgICAgewotICAgICAgICByZXR1cm4gb3AxLnNob3VsZFNwZWN1bGF0ZU51bWJl
ckV4cGVjdGluZ0RlZmluZWQoKSAmJiBvcDIuc2hvdWxkU3BlY3VsYXRlTnVtYmVyRXhwZWN0aW5n
RGVmaW5lZCgpOworICAgICAgICByZXR1cm4gb3AxLT5zaG91bGRTcGVjdWxhdGVOdW1iZXJFeHBl
Y3RpbmdEZWZpbmVkKCkgJiYgb3AyLT5zaG91bGRTcGVjdWxhdGVOdW1iZXJFeHBlY3RpbmdEZWZp
bmVkKCk7CiAgICAgfQogICAgIAotICAgIHN0YXRpYyBib29sIHNob3VsZFNwZWN1bGF0ZUZpbmFs
T2JqZWN0KE5vZGUmIG9wMSwgTm9kZSYgb3AyKQorICAgIHN0YXRpYyBib29sIHNob3VsZFNwZWN1
bGF0ZUZpbmFsT2JqZWN0KE5vZGUqIG9wMSwgTm9kZSogb3AyKQogICAgIHsKLSAgICAgICAgcmV0
dXJuIG9wMS5zaG91bGRTcGVjdWxhdGVGaW5hbE9iamVjdCgpICYmIG9wMi5zaG91bGRTcGVjdWxh
dGVGaW5hbE9iamVjdCgpOworICAgICAgICByZXR1cm4gb3AxLT5zaG91bGRTcGVjdWxhdGVGaW5h
bE9iamVjdCgpICYmIG9wMi0+c2hvdWxkU3BlY3VsYXRlRmluYWxPYmplY3QoKTsKICAgICB9CiAK
LSAgICBzdGF0aWMgYm9vbCBzaG91bGRTcGVjdWxhdGVBcnJheShOb2RlJiBvcDEsIE5vZGUmIG9w
MikKKyAgICBzdGF0aWMgYm9vbCBzaG91bGRTcGVjdWxhdGVBcnJheShOb2RlKiBvcDEsIE5vZGUq
IG9wMikKICAgICB7Ci0gICAgICAgIHJldHVybiBvcDEuc2hvdWxkU3BlY3VsYXRlQXJyYXkoKSAm
JiBvcDIuc2hvdWxkU3BlY3VsYXRlQXJyYXkoKTsKKyAgICAgICAgcmV0dXJuIG9wMS0+c2hvdWxk
U3BlY3VsYXRlQXJyYXkoKSAmJiBvcDItPnNob3VsZFNwZWN1bGF0ZUFycmF5KCk7CiAgICAgfQog
ICAgIAogICAgIGJvb2wgY2FuU3BlY3VsYXRlSW50ZWdlcigpCkBAIC0xMTg0LDE1ICsxMTg4LDE3
IEBAIHN0cnVjdCBOb2RlIHsKICAgICB7CiAgICAgICAgIGlmICghY2hpbGQxKCkpCiAgICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIG91dC5wcmludGYoIkAldSIsIGNoaWxkMSgpLmluZGV4KCkp
OworICAgICAgICBvdXQucHJpbnRmKCJAJXUiLCBjaGlsZDEoKS0+aW5kZXgoKSk7CiAgICAgICAg
IGlmICghY2hpbGQyKCkpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIG91dC5wcmludGYo
IiwgQCV1IiwgY2hpbGQyKCkuaW5kZXgoKSk7CisgICAgICAgIG91dC5wcmludGYoIiwgQCV1Iiwg
Y2hpbGQyKCktPmluZGV4KCkpOwogICAgICAgICBpZiAoIWNoaWxkMygpKQogICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICBvdXQucHJpbnRmKCIsIEAldSIsIGNoaWxkMygpLmluZGV4KCkpOwor
ICAgICAgICBvdXQucHJpbnRmKCIsIEAldSIsIGNoaWxkMygpLT5pbmRleCgpKTsKICAgICB9CiAg
ICAgCisgICAgLy8gTkIuIFRoaXMgY2xhc3MgbXVzdCBoYXZlIGEgdHJpdmlhbCBkZXN0cnVjdG9y
LgorICAgIAogICAgIC8vIFVzZWQgdG8gbG9vayB1cCBleGNlcHRpb24gaGFuZGxpbmcgaW5mb3Jt
YXRpb24gKGN1cnJlbnRseSBpbXBsZW1lbnRlZCBhcyBhIGJ5dGVjb2RlIGluZGV4KS4KICAgICBD
b2RlT3JpZ2luIGNvZGVPcmlnaW47CiAgICAgLy8gUmVmZXJlbmNlcyB0byB1cCB0byAzIGNoaWxk
cmVuLCBvciBsaW5rcyB0byBhIHZhcmlhYmxlIGxlbmd0aCBzZXQgb2YgY2hpbGRyZW4uCkBAIC0x
MjE1LDEwICsxMjIxLDE2IEBAIHByaXZhdGU6CiBwdWJsaWM6CiAgICAgLy8gRmllbGRzIHVzZWQg
YnkgdmFyaW91cyBhbmFseXNlcy4KICAgICBBYnN0cmFjdFZhbHVlIHZhbHVlOwotICAgIE5vZGVJ
bmRleCByZXBsYWNlbWVudDsKKyAgICBOb2RlKiByZXBsYWNlbWVudDsKIH07CiAKIH0gfSAvLyBu
YW1lc3BhY2UgSlNDOjpERkcKIAorbmFtZXNwYWNlIFdURiB7CisKK3ZvaWQgcHJpbnRJbnRlcm5h
bChQcmludFN0cmVhbSYsIE5vZGUqKTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKICNlbmRpZgog
I2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVBbGxvY2F0b3Iu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVBbGxvY2F0
b3IuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZUFs
bG9jYXRvci5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDUxIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHTm9kZUFsbG9jYXRvcl9o
CisjZGVmaW5lIERGR05vZGVBbGxvY2F0b3JfaAorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+
CisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRGR0FsbG9jYXRvci5oIgorI2lu
Y2x1ZGUgIkRGR05vZGUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCit0
eXBlZGVmIEFsbG9jYXRvcjxOb2RlLCA0MDk1PiBOb2RlQWxsb2NhdG9yOworCitpbmxpbmUgdm9p
ZCogb3BlcmF0b3IgbmV3IChzaXplX3Qgc2l6ZSwgTm9kZUFsbG9jYXRvciYgYWxsb2NhdG9yKQor
eworICAgIEFTU0VSVChzaXplID09IHNpemVvZihOb2RlKSk7CisgICAgcmV0dXJuIGFsbG9jYXRv
ci5hbGxvY2F0ZSgpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAv
LyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR05vZGVBbGxvY2F0b3JfaAorCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rp
b25Qcm9wYWdhdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMTQwNTA0KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEyIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAx
MiwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTg1LDc1ICs4NSw3MyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAg
IGJvb2wgc2V0UHJlZGljdGlvbihTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uKQogICAgIHsKLSAg
ICAgICAgQVNTRVJUKG1fZ3JhcGhbbV9jb21waWxlSW5kZXhdLmhhc1Jlc3VsdCgpKTsKKyAgICAg
ICAgQVNTRVJUKG1fY3VycmVudE5vZGUtPmhhc1Jlc3VsdCgpKTsKICAgICAgICAgCiAgICAgICAg
IC8vIHNldFByZWRpY3Rpb24oKSBpcyB1c2VkIHdoZW4gd2Uga25vdyB0aGF0IHRoZXJlIGlzIG5v
IHdheSB0aGF0IHdlIGNhbiBjaGFuZ2UKICAgICAgICAgLy8gb3VyIG1pbmRzIGFib3V0IHdoYXQg
dGhlIHByZWRpY3Rpb24gaXMgZ29pbmcgdG8gYmUuIFRoZXJlIGlzIG5vIHNlbWFudGljCiAgICAg
ICAgIC8vIGRpZmZlcmVuY2UgYmV0d2VlbiBzZXRQcmVkaWN0aW9uKCkgYW5kIG1lcmdlU3BlY3Vs
YXRpb24oKSBvdGhlciB0aGFuIHRoZQogICAgICAgICAvLyBpbmNyZWFzZWQgY2hlY2tpbmcgdG8g
dmFsaWRhdGUgdGhpcyBwcm9wZXJ0eS4KLSAgICAgICAgQVNTRVJUKG1fZ3JhcGhbbV9jb21waWxl
SW5kZXhdLnByZWRpY3Rpb24oKSA9PSBTcGVjTm9uZSB8fCBtX2dyYXBoW21fY29tcGlsZUluZGV4
XS5wcmVkaWN0aW9uKCkgPT0gcHJlZGljdGlvbik7CisgICAgICAgIEFTU0VSVChtX2N1cnJlbnRO
b2RlLT5wcmVkaWN0aW9uKCkgPT0gU3BlY05vbmUgfHwgbV9jdXJyZW50Tm9kZS0+cHJlZGljdGlv
bigpID09IHByZWRpY3Rpb24pOwogICAgICAgICAKLSAgICAgICAgcmV0dXJuIG1fZ3JhcGhbbV9j
b21waWxlSW5kZXhdLnByZWRpY3QocHJlZGljdGlvbik7CisgICAgICAgIHJldHVybiBtX2N1cnJl
bnROb2RlLT5wcmVkaWN0KHByZWRpY3Rpb24pOwogICAgIH0KICAgICAKICAgICBib29sIG1lcmdl
UHJlZGljdGlvbihTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uKQogICAgIHsKLSAgICAgICAgQVNT
RVJUKG1fZ3JhcGhbbV9jb21waWxlSW5kZXhdLmhhc1Jlc3VsdCgpKTsKKyAgICAgICAgQVNTRVJU
KG1fY3VycmVudE5vZGUtPmhhc1Jlc3VsdCgpKTsKICAgICAgICAgCi0gICAgICAgIHJldHVybiBt
X2dyYXBoW21fY29tcGlsZUluZGV4XS5wcmVkaWN0KHByZWRpY3Rpb24pOworICAgICAgICByZXR1
cm4gbV9jdXJyZW50Tm9kZS0+cHJlZGljdChwcmVkaWN0aW9uKTsKICAgICB9CiAgICAgCi0gICAg
Ym9vbCBpc05vdE5lZ1plcm8oTm9kZUluZGV4IG5vZGVJbmRleCkKKyAgICBib29sIGlzTm90TmVn
WmVybyhOb2RlKiBub2RlKQogICAgIHsKLSAgICAgICAgaWYgKCFtX2dyYXBoLmlzTnVtYmVyQ29u
c3RhbnQobm9kZUluZGV4KSkKKyAgICAgICAgaWYgKCFtX2dyYXBoLmlzTnVtYmVyQ29uc3RhbnQo
bm9kZSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGRvdWJsZSB2YWx1ZSA9
IG1fZ3JhcGgudmFsdWVPZk51bWJlckNvbnN0YW50KG5vZGVJbmRleCk7CisgICAgICAgIGRvdWJs
ZSB2YWx1ZSA9IG1fZ3JhcGgudmFsdWVPZk51bWJlckNvbnN0YW50KG5vZGUpOwogICAgICAgICBy
ZXR1cm4gIXZhbHVlICYmIDEuMCAvIHZhbHVlIDwgMC4wOwogICAgIH0KICAgICAKLSAgICBib29s
IGlzTm90WmVybyhOb2RlSW5kZXggbm9kZUluZGV4KQorICAgIGJvb2wgaXNOb3RaZXJvKE5vZGUq
IG5vZGUpCiAgICAgewotICAgICAgICBpZiAoIW1fZ3JhcGguaXNOdW1iZXJDb25zdGFudChub2Rl
SW5kZXgpKQorICAgICAgICBpZiAoIW1fZ3JhcGguaXNOdW1iZXJDb25zdGFudChub2RlKSkKICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgcmV0dXJuICEhbV9ncmFwaC52YWx1ZU9m
TnVtYmVyQ29uc3RhbnQobm9kZUluZGV4KTsKKyAgICAgICAgcmV0dXJuICEhbV9ncmFwaC52YWx1
ZU9mTnVtYmVyQ29uc3RhbnQobm9kZSk7CiAgICAgfQogICAgIAotICAgIGJvb2wgaXNXaXRoaW5Q
b3dlck9mVHdvRm9yQ29uc3RhbnQoTm9kZSYgbm9kZSwgaW50IHBvd2VyKQorICAgIGJvb2wgaXNX
aXRoaW5Qb3dlck9mVHdvRm9yQ29uc3RhbnQoTm9kZSogbm9kZSwgaW50IHBvd2VyKQogICAgIHsK
LSAgICAgICAgSlNWYWx1ZSBpbW1lZGlhdGVWYWx1ZSA9IG5vZGUudmFsdWVPZkpTQ29uc3RhbnQo
Y29kZUJsb2NrKCkpOworICAgICAgICBKU1ZhbHVlIGltbWVkaWF0ZVZhbHVlID0gbm9kZS0+dmFs
dWVPZkpTQ29uc3RhbnQoY29kZUJsb2NrKCkpOwogICAgICAgICBpZiAoIWltbWVkaWF0ZVZhbHVl
LmlzSW50MzIoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgaW50MzJfdCBp
bnRJbW1lZGlhdGUgPSBpbW1lZGlhdGVWYWx1ZS5hc0ludDMyKCk7CiAgICAgICAgIHJldHVybiBp
bnRJbW1lZGlhdGUgPiAtKDEgPDwgcG93ZXIpICYmIGludEltbWVkaWF0ZSA8ICgxIDw8IHBvd2Vy
KTsKICAgICB9CiAgICAgCi0gICAgYm9vbCBpc1dpdGhpblBvd2VyT2ZUd29Ob25SZWN1cnNpdmUo
Tm9kZUluZGV4IG5vZGVJbmRleCwgaW50IHBvd2VyKQorICAgIGJvb2wgaXNXaXRoaW5Qb3dlck9m
VHdvTm9uUmVjdXJzaXZlKE5vZGUqIG5vZGUsIGludCBwb3dlcikKICAgICB7Ci0gICAgICAgIE5v
ZGUmIG5vZGUgPSBtX2dyYXBoW25vZGVJbmRleF07Ci0gICAgICAgIGlmIChub2RlLm9wKCkgIT0g
SlNDb25zdGFudCkKKyAgICAgICAgaWYgKG5vZGUtPm9wKCkgIT0gSlNDb25zdGFudCkKICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgcmV0dXJuIGlzV2l0aGluUG93ZXJPZlR3b0Zv
ckNvbnN0YW50KG5vZGUsIHBvd2VyKTsKICAgICB9CiAgICAgCi0gICAgYm9vbCBpc1dpdGhpblBv
d2VyT2ZUd28oTm9kZUluZGV4IG5vZGVJbmRleCwgaW50IHBvd2VyKQorICAgIGJvb2wgaXNXaXRo
aW5Qb3dlck9mVHdvKE5vZGUqIG5vZGUsIGludCBwb3dlcikKICAgICB7Ci0gICAgICAgIE5vZGUm
IG5vZGUgPSBtX2dyYXBoW25vZGVJbmRleF07Ci0gICAgICAgIHN3aXRjaCAobm9kZS5vcCgpKSB7
CisgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewogICAgICAgICBjYXNlIEpTQ29uc3RhbnQ6
IHsKICAgICAgICAgICAgIHJldHVybiBpc1dpdGhpblBvd2VyT2ZUd29Gb3JDb25zdGFudChub2Rl
LCBwb3dlcik7CiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBjYXNlIEJpdEFuZDog
ewotICAgICAgICAgICAgcmV0dXJuIGlzV2l0aGluUG93ZXJPZlR3b05vblJlY3Vyc2l2ZShub2Rl
LmNoaWxkMSgpLmluZGV4KCksIHBvd2VyKQotICAgICAgICAgICAgICAgIHx8IGlzV2l0aGluUG93
ZXJPZlR3b05vblJlY3Vyc2l2ZShub2RlLmNoaWxkMigpLmluZGV4KCksIHBvd2VyKTsKKyAgICAg
ICAgICAgIHJldHVybiBpc1dpdGhpblBvd2VyT2ZUd29Ob25SZWN1cnNpdmUobm9kZS0+Y2hpbGQx
KCkubm9kZSgpLCBwb3dlcikKKyAgICAgICAgICAgICAgICB8fCBpc1dpdGhpblBvd2VyT2ZUd29O
b25SZWN1cnNpdmUobm9kZS0+Y2hpbGQyKCkubm9kZSgpLCBwb3dlcik7CiAgICAgICAgIH0KICAg
ICAgICAgICAgIAogICAgICAgICBjYXNlIEJpdFJTaGlmdDoKICAgICAgICAgY2FzZSBCaXRVUlNo
aWZ0OiB7Ci0gICAgICAgICAgICBOb2RlJiBzaGlmdEFtb3VudCA9IG1fZ3JhcGhbbm9kZS5jaGls
ZDIoKV07Ci0gICAgICAgICAgICBpZiAoc2hpZnRBbW91bnQub3AoKSAhPSBKU0NvbnN0YW50KQor
ICAgICAgICAgICAgTm9kZSogc2hpZnRBbW91bnQgPSBub2RlLT5jaGlsZDIoKS5ub2RlKCk7Cisg
ICAgICAgICAgICBpZiAoc2hpZnRBbW91bnQtPm9wKCkgIT0gSlNDb25zdGFudCkKICAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBKU1ZhbHVlIGltbWVkaWF0ZVZhbHVl
ID0gc2hpZnRBbW91bnQudmFsdWVPZkpTQ29uc3RhbnQoY29kZUJsb2NrKCkpOworICAgICAgICAg
ICAgSlNWYWx1ZSBpbW1lZGlhdGVWYWx1ZSA9IHNoaWZ0QW1vdW50LT52YWx1ZU9mSlNDb25zdGFu
dChjb2RlQmxvY2soKSk7CiAgICAgICAgICAgICBpZiAoIWltbWVkaWF0ZVZhbHVlLmlzSW50MzIo
KSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICByZXR1cm4gaW1t
ZWRpYXRlVmFsdWUgPiAzMiAtIHBvd2VyOwpAQCAtMTc4LDE2ICsxNzYsMTYgQEAgcHJpdmF0ZToK
ICAgICAgICAgcmV0dXJuIHNwZWN1bGF0ZWREb3VibGVUeXBlRm9yUHJlZGljdGlvbihtZXJnZVNw
ZWN1bGF0aW9ucyhsZWZ0LCByaWdodCkpOwogICAgIH0KIAotICAgIHZvaWQgcHJvcGFnYXRlKE5v
ZGUmIG5vZGUpCisgICAgdm9pZCBwcm9wYWdhdGUoTm9kZSogbm9kZSkKICAgICB7Ci0gICAgICAg
IGlmICghbm9kZS5zaG91bGRHZW5lcmF0ZSgpKQorICAgICAgICBpZiAoIW5vZGUtPnNob3VsZEdl
bmVyYXRlKCkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIAotICAgICAgICBOb2RlVHlw
ZSBvcCA9IG5vZGUub3AoKTsKLSAgICAgICAgTm9kZUZsYWdzIGZsYWdzID0gbm9kZS5mbGFncygp
ICYgTm9kZUJhY2tQcm9wTWFzazsKKyAgICAgICAgTm9kZVR5cGUgb3AgPSBub2RlLT5vcCgpOwor
ICAgICAgICBOb2RlRmxhZ3MgZmxhZ3MgPSBub2RlLT5mbGFncygpICYgTm9kZUJhY2tQcm9wTWFz
azsKIAogI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKLSAgICAgICAg
ZGF0YUxvZ0YoIiAgICVzIEAldTogJXMgIiwgR3JhcGg6Om9wTmFtZShvcCksIG1fY29tcGlsZUlu
ZGV4LCBub2RlRmxhZ3NBc1N0cmluZyhmbGFncykpOworICAgICAgICBkYXRhTG9nKCIgICAiLCBH
cmFwaDo6b3BOYW1lKG9wKSwgIiAiLCBtX2N1cnJlbnROb2RlLCAiOiAiLCBub2RlRmxhZ3NBc1N0
cmluZyhmbGFncyksICIgIik7CiAjZW5kaWYKICAgICAgICAgCiAgICAgICAgIGJvb2wgY2hhbmdl
ZCA9IGZhbHNlOwpAQCAtMTk1LDEyICsxOTMsMTIgQEAgcHJpdmF0ZToKICAgICAgICAgc3dpdGNo
IChvcCkgewogICAgICAgICBjYXNlIEpTQ29uc3RhbnQ6CiAgICAgICAgIGNhc2UgV2Vha0pTQ29u
c3RhbnQ6IHsKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gc2V0UHJlZGljdGlvbihzcGVjdWxhdGlv
bkZyb21WYWx1ZShtX2dyYXBoLnZhbHVlT2ZKU0NvbnN0YW50KG1fY29tcGlsZUluZGV4KSkpOwor
ICAgICAgICAgICAgY2hhbmdlZCB8PSBzZXRQcmVkaWN0aW9uKHNwZWN1bGF0aW9uRnJvbVZhbHVl
KG1fZ3JhcGgudmFsdWVPZkpTQ29uc3RhbnQobm9kZSkpKTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBHZXRMb2NhbDogewotICAgICAg
ICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBub2RlLnZhcmlh
YmxlQWNjZXNzRGF0YSgpOworICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJs
ZUFjY2Vzc0RhdGEgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKICAgICAgICAgICAgIFNw
ZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24gPSB2YXJpYWJsZUFjY2Vzc0RhdGEtPnByZWRpY3Rpb24o
KTsKICAgICAgICAgICAgIGlmIChwcmVkaWN0aW9uKQogICAgICAgICAgICAgICAgIGNoYW5nZWQg
fD0gbWVyZ2VQcmVkaWN0aW9uKHByZWRpY3Rpb24pOwpAQCAtMjEwLDIxICsyMDgsMjEgQEAgcHJp
dmF0ZToKICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgU2V0TG9jYWw6IHsK
LSAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhID0gbm9k
ZS52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gdmFyaWFibGVB
Y2Nlc3NEYXRhLT5wcmVkaWN0KG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ucHJlZGljdGlvbigpKTsK
KyAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhID0gbm9k
ZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IHZhcmlhYmxl
QWNjZXNzRGF0YS0+cHJlZGljdChub2RlLT5jaGlsZDEoKS0+cHJlZGljdGlvbigpKTsKIAogICAg
ICAgICAgICAgLy8gQXNzdW1lIGNvbnNlcnZhdGl2ZWx5IHRoYXQgYSBTZXRMb2NhbCBpbXBsaWVz
IHRoYXQgdGhlIHZhbHVlIG1heSBmbG93IHRocm91Z2ggYSBsb29wLAogICAgICAgICAgICAgLy8g
YW5kIHNvIHdlIHdvdWxkIGhhdmUgb3ZlcmZsb3cgbGVhZGluZyB0byB0aGUgcHJvZ3JhbSAib2Jz
ZXJ2aW5nIiBudW1iZXJzIGV2ZW4gaWYgYWxsCiAgICAgICAgICAgICAvLyB1c2VycyBvZiB0aGUg
dmFsdWUgYXJlIGRvaW5nIHRvSW50MzIuIEl0IG1pZ2h0IGJlIHdvcnRod2hpbGUgdG8gcmV2aXNp
dCB0aGlzIGF0IHNvbWUKICAgICAgICAgICAgIC8vIHBvaW50IGFuZCBhY3R1YWxseSBjaGVjayBp
ZiB0aGUgZGF0YSBmbG93IGludm9sdmVzIGxvb3BzLCBidXQgcmlnaHQgbm93IEkgZG9uJ3QgdGhp
bmsKICAgICAgICAgICAgIC8vIHdlIGhhdmUgZXZpZGVuY2UgdGhhdCB0aGlzIHdvdWxkIGJlIGJl
bmVmaWNpYWwgZm9yIGJlbmNobWFya3MuCi0gICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhb
bm9kZS5jaGlsZDEoKV0ubWVyZ2VGbGFncyh2YXJpYWJsZUFjY2Vzc0RhdGEtPmZsYWdzKCkgfCBO
b2RlVXNlZEFzTnVtYmVyKTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbm9kZS0+Y2hpbGQxKCkt
Pm1lcmdlRmxhZ3ModmFyaWFibGVBY2Nlc3NEYXRhLT5mbGFncygpIHwgTm9kZVVzZWRBc051bWJl
cik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAg
IGNhc2UgRmx1c2g6IHsKICAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHRoZSBhbmFseXNp
cyBrbm93cyB0aGF0IGZsdXNoZWQgbG9jYWxzIGVzY2FwZS4KLSAgICAgICAgICAgIFZhcmlhYmxl
QWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhID0gbm9kZS52YXJpYWJsZUFjY2Vzc0RhdGEo
KTsKKyAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhID0g
bm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CiAgICAgICAgICAgICBjaGFuZ2VkIHw9IHZhcmlh
YmxlQWNjZXNzRGF0YS0+bWVyZ2VGbGFncyhOb2RlVXNlZEFzVmFsdWUpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KQEAgLTIzOCw4ICsyMzYsOCBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgY2hhbmdlZCB8PSBzZXRQcmVkaWN0aW9uKFNwZWNJbnQzMik7CiAgICAgICAgICAgICBmbGFn
cyB8PSBOb2RlVXNlZEFzSW50IHwgTm9kZVVzZWRBc0ludExvY2FsbHk7CiAgICAgICAgICAgICBm
bGFncyAmPSB+KE5vZGVVc2VkQXNOdW1iZXIgfCBOb2RlTmVlZHNOZWdaZXJvIHwgTm9kZVVzZWRB
c090aGVyKTsKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5t
ZXJnZUZsYWdzKGZsYWdzKTsKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaFtub2RlLmNo
aWxkMigpXS5tZXJnZUZsYWdzKGZsYWdzKTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbm9kZS0+
Y2hpbGQxKCktPm1lcmdlRmxhZ3MoZmxhZ3MpOworICAgICAgICAgICAgY2hhbmdlZCB8PSBub2Rl
LT5jaGlsZDIoKS0+bWVyZ2VGbGFncyhmbGFncyk7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgfQogICAgICAgICAgICAgCkBAIC0yNDcsNTAgKzI0NSw1MCBAQCBwcml2YXRlOgogICAgICAg
ICAgICAgY2hhbmdlZCB8PSBzZXRQcmVkaWN0aW9uKFNwZWNJbnQzMik7CiAgICAgICAgICAgICBm
bGFncyB8PSBOb2RlVXNlZEFzSW50IHwgTm9kZVVzZWRBc0ludExvY2FsbHk7CiAgICAgICAgICAg
ICBmbGFncyAmPSB+KE5vZGVVc2VkQXNOdW1iZXIgfCBOb2RlTmVlZHNOZWdaZXJvIHwgTm9kZVVz
ZWRBc090aGVyKTsKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaFtub2RlLmNoaWxkMSgp
XS5tZXJnZUZsYWdzKGZsYWdzKTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbm9kZS0+Y2hpbGQx
KCktPm1lcmdlRmxhZ3MoZmxhZ3MpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAg
ICAgICAgICAgIAogICAgICAgICBjYXNlIEFycmF5UG9wOiB7Ci0gICAgICAgICAgICBjaGFuZ2Vk
IHw9IG1lcmdlUHJlZGljdGlvbihub2RlLmdldEhlYXBQcmVkaWN0aW9uKCkpOworICAgICAgICAg
ICAgY2hhbmdlZCB8PSBtZXJnZVByZWRpY3Rpb24obm9kZS0+Z2V0SGVhcFByZWRpY3Rpb24oKSk7
CiAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlRGVmYXVsdEZsYWdzKG5vZGUpOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIEFycmF5UHVzaDogewotICAg
ICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVByZWRpY3Rpb24obm9kZS5nZXRIZWFwUHJlZGljdGlv
bigpKTsKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5tZXJn
ZUZsYWdzKE5vZGVVc2VkQXNWYWx1ZSk7Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhb
bm9kZS5jaGlsZDIoKV0ubWVyZ2VGbGFncyhOb2RlVXNlZEFzVmFsdWUpOworICAgICAgICAgICAg
Y2hhbmdlZCB8PSBtZXJnZVByZWRpY3Rpb24obm9kZS0+Z2V0SGVhcFByZWRpY3Rpb24oKSk7Cisg
ICAgICAgICAgICBjaGFuZ2VkIHw9IG5vZGUtPmNoaWxkMSgpLT5tZXJnZUZsYWdzKE5vZGVVc2Vk
QXNWYWx1ZSk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG5vZGUtPmNoaWxkMigpLT5tZXJnZUZs
YWdzKE5vZGVVc2VkQXNWYWx1ZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCiAg
ICAgICAgIGNhc2UgUmVnRXhwRXhlYzoKICAgICAgICAgY2FzZSBSZWdFeHBUZXN0OiB7Ci0gICAg
ICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbihub2RlLmdldEhlYXBQcmVkaWN0aW9u
KCkpOworICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVByZWRpY3Rpb24obm9kZS0+Z2V0SGVh
cFByZWRpY3Rpb24oKSk7CiAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlRGVmYXVsdEZsYWdz
KG5vZGUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIFN0
cmluZ0NoYXJDb2RlQXQ6IHsKICAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9u
KFNwZWNJbnQzMik7Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbm9kZS5jaGlsZDEo
KV0ubWVyZ2VGbGFncyhOb2RlVXNlZEFzVmFsdWUpOwotICAgICAgICAgICAgY2hhbmdlZCB8PSBt
X2dyYXBoW25vZGUuY2hpbGQyKCldLm1lcmdlRmxhZ3MoTm9kZVVzZWRBc051bWJlciB8IE5vZGVV
c2VkQXNPdGhlciB8IE5vZGVVc2VkQXNJbnQgfCBOb2RlVXNlZEFzSW50TG9jYWxseSk7CisgICAg
ICAgICAgICBjaGFuZ2VkIHw9IG5vZGUtPmNoaWxkMSgpLT5tZXJnZUZsYWdzKE5vZGVVc2VkQXNW
YWx1ZSk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG5vZGUtPmNoaWxkMigpLT5tZXJnZUZsYWdz
KE5vZGVVc2VkQXNOdW1iZXIgfCBOb2RlVXNlZEFzT3RoZXIgfCBOb2RlVXNlZEFzSW50IHwgTm9k
ZVVzZWRBc0ludExvY2FsbHkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIAogICAg
ICAgICBjYXNlIFVJbnQzMlRvTnVtYmVyOiB7Ci0gICAgICAgICAgICBpZiAobm9kZUNhblNwZWN1
bGF0ZUludGVnZXIobm9kZS5hcml0aE5vZGVGbGFncygpKSkKKyAgICAgICAgICAgIGlmIChub2Rl
Q2FuU3BlY3VsYXRlSW50ZWdlcihub2RlLT5hcml0aE5vZGVGbGFncygpKSkKICAgICAgICAgICAg
ICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbihTcGVjSW50MzIpOwogICAgICAgICAgICAg
ZWxzZQogICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKFNwZWNOdW1i
ZXIpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbm9kZS5j
aGlsZDEoKV0ubWVyZ2VGbGFncyhmbGFncyk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG5vZGUt
PmNoaWxkMSgpLT5tZXJnZUZsYWdzKGZsYWdzKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9CiAKICAgICAgICAgY2FzZSBWYWx1ZUFkZDogewotICAgICAgICAgICAgU3BlY3VsYXRlZFR5
cGUgbGVmdCA9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ucHJlZGljdGlvbigpOwotICAgICAgICAg
ICAgU3BlY3VsYXRlZFR5cGUgcmlnaHQgPSBtX2dyYXBoW25vZGUuY2hpbGQyKCldLnByZWRpY3Rp
b24oKTsKKyAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIGxlZnQgPSBub2RlLT5jaGlsZDEoKS0+
cHJlZGljdGlvbigpOworICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgcmlnaHQgPSBub2RlLT5j
aGlsZDIoKS0+cHJlZGljdGlvbigpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBBZGRTcGVj
dWxhdGlvbk1vZGUgbW9kZSA9IERvbnRTcGVjdWxhdGVJbnRlZ2VyOwogICAgICAgICAgICAgCkBA
IC0zMDcsMjIgKzMwNSwyMiBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICBjaGFuZ2Vk
IHw9IG1lcmdlUHJlZGljdGlvbihTcGVjU3RyaW5nIHwgU3BlY0ludDMyIHwgU3BlY0RvdWJsZSk7
CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChpc05vdE5lZ1pl
cm8obm9kZS5jaGlsZDEoKS5pbmRleCgpKSB8fCBpc05vdE5lZ1plcm8obm9kZS5jaGlsZDIoKS5p
bmRleCgpKSkKKyAgICAgICAgICAgIGlmIChpc05vdE5lZ1plcm8obm9kZS0+Y2hpbGQxKCkubm9k
ZSgpKSB8fCBpc05vdE5lZ1plcm8obm9kZS0+Y2hpbGQyKCkubm9kZSgpKSkKICAgICAgICAgICAg
ICAgICBmbGFncyAmPSB+Tm9kZU5lZWRzTmVnWmVybzsKLSAgICAgICAgICAgIGlmIChtX2dyYXBo
W25vZGUuY2hpbGQxKCldLmhhc051bWJlclJlc3VsdCgpIHx8IG1fZ3JhcGhbbm9kZS5jaGlsZDIo
KV0uaGFzTnVtYmVyUmVzdWx0KCkpCisgICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPmhh
c051bWJlclJlc3VsdCgpIHx8IG5vZGUtPmNoaWxkMigpLT5oYXNOdW1iZXJSZXN1bHQoKSkKICAg
ICAgICAgICAgICAgICBmbGFncyAmPSB+Tm9kZVVzZWRBc090aGVyOwogICAgICAgICAgICAgCiAg
ICAgICAgICAgICBpZiAobW9kZSAhPSBTcGVjdWxhdGVJbnRlZ2VyKQogICAgICAgICAgICAgICAg
IGZsYWdzIHw9IE5vZGVVc2VkQXNOdW1iZXI7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGNo
YW5nZWQgfD0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5tZXJnZUZsYWdzKGZsYWdzKTsKLSAgICAg
ICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaFtub2RlLmNoaWxkMigpXS5tZXJnZUZsYWdzKGZsYWdz
KTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbm9kZS0+Y2hpbGQxKCktPm1lcmdlRmxhZ3MoZmxh
Z3MpOworICAgICAgICAgICAgY2hhbmdlZCB8PSBub2RlLT5jaGlsZDIoKS0+bWVyZ2VGbGFncyhm
bGFncyk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAg
ICAgIGNhc2UgQXJpdGhBZGQ6IHsKLSAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIGxlZnQgPSBt
X2dyYXBoW25vZGUuY2hpbGQxKCldLnByZWRpY3Rpb24oKTsKLSAgICAgICAgICAgIFNwZWN1bGF0
ZWRUeXBlIHJpZ2h0ID0gbV9ncmFwaFtub2RlLmNoaWxkMigpXS5wcmVkaWN0aW9uKCk7CisgICAg
ICAgICAgICBTcGVjdWxhdGVkVHlwZSBsZWZ0ID0gbm9kZS0+Y2hpbGQxKCktPnByZWRpY3Rpb24o
KTsKKyAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHJpZ2h0ID0gbm9kZS0+Y2hpbGQyKCktPnBy
ZWRpY3Rpb24oKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgQWRkU3BlY3VsYXRpb25Nb2Rl
IG1vZGUgPSBEb250U3BlY3VsYXRlSW50ZWdlcjsKICAgICAgICAgICAgIApAQCAtMzMzLDIxICsz
MzEsMjEgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVBy
ZWRpY3Rpb24oc3BlY3VsYXRlZERvdWJsZVR5cGVGb3JQcmVkaWN0aW9ucyhsZWZ0LCByaWdodCkp
OwogICAgICAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoaXNOb3ROZWda
ZXJvKG5vZGUuY2hpbGQxKCkuaW5kZXgoKSkgfHwgaXNOb3ROZWdaZXJvKG5vZGUuY2hpbGQyKCku
aW5kZXgoKSkpCisgICAgICAgICAgICBpZiAoaXNOb3ROZWdaZXJvKG5vZGUtPmNoaWxkMSgpLm5v
ZGUoKSkgfHwgaXNOb3ROZWdaZXJvKG5vZGUtPmNoaWxkMigpLm5vZGUoKSkpCiAgICAgICAgICAg
ICAgICAgZmxhZ3MgJj0gfk5vZGVOZWVkc05lZ1plcm87CiAgICAgICAgICAgICBmbGFncyAmPSB+
Tm9kZVVzZWRBc090aGVyOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAobW9kZSAhPSBT
cGVjdWxhdGVJbnRlZ2VyKQogICAgICAgICAgICAgICAgIGZsYWdzIHw9IE5vZGVVc2VkQXNOdW1i
ZXI7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaFtub2RlLmNo
aWxkMSgpXS5tZXJnZUZsYWdzKGZsYWdzKTsKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFw
aFtub2RlLmNoaWxkMigpXS5tZXJnZUZsYWdzKGZsYWdzKTsKKyAgICAgICAgICAgIGNoYW5nZWQg
fD0gbm9kZS0+Y2hpbGQxKCktPm1lcmdlRmxhZ3MoZmxhZ3MpOworICAgICAgICAgICAgY2hhbmdl
ZCB8PSBub2RlLT5jaGlsZDIoKS0+bWVyZ2VGbGFncyhmbGFncyk7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgQXJpdGhTdWI6IHsKLSAg
ICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIGxlZnQgPSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLnBy
ZWRpY3Rpb24oKTsKLSAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHJpZ2h0ID0gbV9ncmFwaFtu
b2RlLmNoaWxkMigpXS5wcmVkaWN0aW9uKCk7CisgICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSBs
ZWZ0ID0gbm9kZS0+Y2hpbGQxKCktPnByZWRpY3Rpb24oKTsKKyAgICAgICAgICAgIFNwZWN1bGF0
ZWRUeXBlIHJpZ2h0ID0gbm9kZS0+Y2hpbGQyKCktPnByZWRpY3Rpb24oKTsKICAgICAgICAgICAg
IAogICAgICAgICAgICAgQWRkU3BlY3VsYXRpb25Nb2RlIG1vZGUgPSBEb250U3BlY3VsYXRlSW50
ZWdlcjsKICAgICAgICAgICAgIApAQCAtMzU4LDM5ICszNTYsMzkgQEAgcHJpdmF0ZToKICAgICAg
ICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVByZWRpY3Rpb24oc3BlY3VsYXRlZERvdWJs
ZVR5cGVGb3JQcmVkaWN0aW9ucyhsZWZ0LCByaWdodCkpOwogICAgICAgICAgICAgfQogCi0gICAg
ICAgICAgICBpZiAoaXNOb3RaZXJvKG5vZGUuY2hpbGQxKCkuaW5kZXgoKSkgfHwgaXNOb3RaZXJv
KG5vZGUuY2hpbGQyKCkuaW5kZXgoKSkpCisgICAgICAgICAgICBpZiAoaXNOb3RaZXJvKG5vZGUt
PmNoaWxkMSgpLm5vZGUoKSkgfHwgaXNOb3RaZXJvKG5vZGUtPmNoaWxkMigpLm5vZGUoKSkpCiAg
ICAgICAgICAgICAgICAgZmxhZ3MgJj0gfk5vZGVOZWVkc05lZ1plcm87CiAgICAgICAgICAgICBm
bGFncyAmPSB+Tm9kZVVzZWRBc090aGVyOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAo
bW9kZSAhPSBTcGVjdWxhdGVJbnRlZ2VyKQogICAgICAgICAgICAgICAgIGZsYWdzIHw9IE5vZGVV
c2VkQXNOdW1iZXI7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFw
aFtub2RlLmNoaWxkMSgpXS5tZXJnZUZsYWdzKGZsYWdzKTsKLSAgICAgICAgICAgIGNoYW5nZWQg
fD0gbV9ncmFwaFtub2RlLmNoaWxkMigpXS5tZXJnZUZsYWdzKGZsYWdzKTsKKyAgICAgICAgICAg
IGNoYW5nZWQgfD0gbm9kZS0+Y2hpbGQxKCktPm1lcmdlRmxhZ3MoZmxhZ3MpOworICAgICAgICAg
ICAgY2hhbmdlZCB8PSBub2RlLT5jaGlsZDIoKS0+bWVyZ2VGbGFncyhmbGFncyk7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgQXJpdGhO
ZWdhdGU6Ci0gICAgICAgICAgICBpZiAobV9ncmFwaFtub2RlLmNoaWxkMSgpXS5wcmVkaWN0aW9u
KCkpIHsKKyAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS0+cHJlZGljdGlvbigpKSB7CiAg
ICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGgubmVnYXRlU2hvdWxkU3BlY3VsYXRlSW50ZWdlcihu
b2RlKSkKICAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVByZWRpY3Rpb24oU3Bl
Y0ludDMyKTsKICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIGNoYW5n
ZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKHNwZWN1bGF0ZWREb3VibGVUeXBlRm9yUHJlZGljdGlvbiht
X2dyYXBoW25vZGUuY2hpbGQxKCldLnByZWRpY3Rpb24oKSkpOworICAgICAgICAgICAgICAgICAg
ICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbihzcGVjdWxhdGVkRG91YmxlVHlwZUZvclByZWRp
Y3Rpb24obm9kZS0+Y2hpbGQxKCktPnByZWRpY3Rpb24oKSkpOwogICAgICAgICAgICAgfQogCiAg
ICAgICAgICAgICBmbGFncyAmPSB+Tm9kZVVzZWRBc090aGVyOwogCi0gICAgICAgICAgICBjaGFu
Z2VkIHw9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ubWVyZ2VGbGFncyhmbGFncyk7CisgICAgICAg
ICAgICBjaGFuZ2VkIHw9IG5vZGUtPmNoaWxkMSgpLT5tZXJnZUZsYWdzKGZsYWdzKTsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgQXJpdGhNaW46CiAgICAg
ICAgIGNhc2UgQXJpdGhNYXg6IHsKLSAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIGxlZnQgPSBt
X2dyYXBoW25vZGUuY2hpbGQxKCldLnByZWRpY3Rpb24oKTsKLSAgICAgICAgICAgIFNwZWN1bGF0
ZWRUeXBlIHJpZ2h0ID0gbV9ncmFwaFtub2RlLmNoaWxkMigpXS5wcmVkaWN0aW9uKCk7CisgICAg
ICAgICAgICBTcGVjdWxhdGVkVHlwZSBsZWZ0ID0gbm9kZS0+Y2hpbGQxKCktPnByZWRpY3Rpb24o
KTsKKyAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHJpZ2h0ID0gbm9kZS0+Y2hpbGQyKCktPnBy
ZWRpY3Rpb24oKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKGxlZnQgJiYgcmlnaHQp
IHsKLSAgICAgICAgICAgICAgICBpZiAoTm9kZTo6c2hvdWxkU3BlY3VsYXRlSW50ZWdlckZvckFy
aXRobWV0aWMobV9ncmFwaFtub2RlLmNoaWxkMSgpXSwgbV9ncmFwaFtub2RlLmNoaWxkMigpXSkK
LSAgICAgICAgICAgICAgICAgICAgJiYgbm9kZUNhblNwZWN1bGF0ZUludGVnZXIobm9kZS5hcml0
aE5vZGVGbGFncygpKSkKKyAgICAgICAgICAgICAgICBpZiAoTm9kZTo6c2hvdWxkU3BlY3VsYXRl
SW50ZWdlckZvckFyaXRobWV0aWMobm9kZS0+Y2hpbGQxKCkubm9kZSgpLCBub2RlLT5jaGlsZDIo
KS5ub2RlKCkpCisgICAgICAgICAgICAgICAgICAgICYmIG5vZGVDYW5TcGVjdWxhdGVJbnRlZ2Vy
KG5vZGUtPmFyaXRoTm9kZUZsYWdzKCkpKQogICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9
IG1lcmdlUHJlZGljdGlvbihTcGVjSW50MzIpOwogICAgICAgICAgICAgICAgIGVsc2UKICAgICAg
ICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVByZWRpY3Rpb24oc3BlY3VsYXRlZERvdWJs
ZVR5cGVGb3JQcmVkaWN0aW9ucyhsZWZ0LCByaWdodCkpOwpAQCAtMzk5LDE0ICszOTcsMTQgQEAg
cHJpdmF0ZToKICAgICAgICAgICAgIGZsYWdzIHw9IE5vZGVVc2VkQXNOdW1iZXI7CiAgICAgICAg
ICAgICBmbGFncyAmPSB+Tm9kZVVzZWRBc090aGVyOwogCi0gICAgICAgICAgICBjaGFuZ2VkIHw9
IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ubWVyZ2VGbGFncyhmbGFncyk7Ci0gICAgICAgICAgICBj
aGFuZ2VkIHw9IG1fZ3JhcGhbbm9kZS5jaGlsZDIoKV0ubWVyZ2VGbGFncyhmbGFncyk7CisgICAg
ICAgICAgICBjaGFuZ2VkIHw9IG5vZGUtPmNoaWxkMSgpLT5tZXJnZUZsYWdzKGZsYWdzKTsKKyAg
ICAgICAgICAgIGNoYW5nZWQgfD0gbm9kZS0+Y2hpbGQyKCktPm1lcmdlRmxhZ3MoZmxhZ3MpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIEFyaXRoTXVsOiB7
Ci0gICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSBsZWZ0ID0gbV9ncmFwaFtub2RlLmNoaWxkMSgp
XS5wcmVkaWN0aW9uKCk7Ci0gICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSByaWdodCA9IG1fZ3Jh
cGhbbm9kZS5jaGlsZDIoKV0ucHJlZGljdGlvbigpOworICAgICAgICAgICAgU3BlY3VsYXRlZFR5
cGUgbGVmdCA9IG5vZGUtPmNoaWxkMSgpLT5wcmVkaWN0aW9uKCk7CisgICAgICAgICAgICBTcGVj
dWxhdGVkVHlwZSByaWdodCA9IG5vZGUtPmNoaWxkMigpLT5wcmVkaWN0aW9uKCk7CiAgICAgICAg
ICAgICAKICAgICAgICAgICAgIGlmIChsZWZ0ICYmIHJpZ2h0KSB7CiAgICAgICAgICAgICAgICAg
aWYgKG1fZ3JhcGgubXVsU2hvdWxkU3BlY3VsYXRlSW50ZWdlcihub2RlKSkKQEAgLTQyMiw4ICs0
MjAsOCBAQCBwcml2YXRlOgogICAgICAgICAgICAgLy8gaXRzZWxmIHVubGVzcyB3ZSBjYW4gcHJv
dmUgdGhhdCB0aGVyZSBpcyBubyB3YXkgZm9yIHRoZSB2YWx1ZXMKICAgICAgICAgICAgIC8vIHBy
b2R1Y2VkIHRvIGNhdXNlIGRvdWJsZSByb3VuZGluZy4KICAgICAgICAgICAgIAotICAgICAgICAg
ICAgaWYgKCFpc1dpdGhpblBvd2VyT2ZUd28obm9kZS5jaGlsZDEoKS5pbmRleCgpLCAyMikKLSAg
ICAgICAgICAgICAgICAmJiAhaXNXaXRoaW5Qb3dlck9mVHdvKG5vZGUuY2hpbGQyKCkuaW5kZXgo
KSwgMjIpKQorICAgICAgICAgICAgaWYgKCFpc1dpdGhpblBvd2VyT2ZUd28obm9kZS0+Y2hpbGQx
KCkubm9kZSgpLCAyMikKKyAgICAgICAgICAgICAgICAmJiAhaXNXaXRoaW5Qb3dlck9mVHdvKG5v
ZGUtPmNoaWxkMigpLm5vZGUoKSwgMjIpKQogICAgICAgICAgICAgICAgIGZsYWdzIHw9IE5vZGVV
c2VkQXNOdW1iZXI7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGNoYW5nZWQgfD0gbm9kZS5t
ZXJnZUZsYWdzKGZsYWdzKTsKQEAgLTQzMSwxOCArNDI5LDE4IEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICBmbGFncyB8PSBOb2RlVXNlZEFzTnVtYmVyIHwgTm9kZU5lZWRzTmVnWmVybzsKICAgICAg
ICAgICAgIGZsYWdzICY9IH5Ob2RlVXNlZEFzT3RoZXI7CiAKLSAgICAgICAgICAgIGNoYW5nZWQg
fD0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5tZXJnZUZsYWdzKGZsYWdzKTsKLSAgICAgICAgICAg
IGNoYW5nZWQgfD0gbV9ncmFwaFtub2RlLmNoaWxkMigpXS5tZXJnZUZsYWdzKGZsYWdzKTsKKyAg
ICAgICAgICAgIGNoYW5nZWQgfD0gbm9kZS0+Y2hpbGQxKCktPm1lcmdlRmxhZ3MoZmxhZ3MpOwor
ICAgICAgICAgICAgY2hhbmdlZCB8PSBub2RlLT5jaGlsZDIoKS0+bWVyZ2VGbGFncyhmbGFncyk7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgIGNh
c2UgQXJpdGhEaXY6IHsKLSAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIGxlZnQgPSBtX2dyYXBo
W25vZGUuY2hpbGQxKCldLnByZWRpY3Rpb24oKTsKLSAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBl
IHJpZ2h0ID0gbV9ncmFwaFtub2RlLmNoaWxkMigpXS5wcmVkaWN0aW9uKCk7CisgICAgICAgICAg
ICBTcGVjdWxhdGVkVHlwZSBsZWZ0ID0gbm9kZS0+Y2hpbGQxKCktPnByZWRpY3Rpb24oKTsKKyAg
ICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHJpZ2h0ID0gbm9kZS0+Y2hpbGQyKCktPnByZWRpY3Rp
b24oKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKGxlZnQgJiYgcmlnaHQpIHsKLSAg
ICAgICAgICAgICAgICBpZiAoTm9kZTo6c2hvdWxkU3BlY3VsYXRlSW50ZWdlckZvckFyaXRobWV0
aWMobV9ncmFwaFtub2RlLmNoaWxkMSgpXSwgbV9ncmFwaFtub2RlLmNoaWxkMigpXSkKLSAgICAg
ICAgICAgICAgICAgICAgJiYgbm9kZUNhblNwZWN1bGF0ZUludGVnZXIobm9kZS5hcml0aE5vZGVG
bGFncygpKSkKKyAgICAgICAgICAgICAgICBpZiAoTm9kZTo6c2hvdWxkU3BlY3VsYXRlSW50ZWdl
ckZvckFyaXRobWV0aWMobm9kZS0+Y2hpbGQxKCkubm9kZSgpLCBub2RlLT5jaGlsZDIoKS5ub2Rl
KCkpCisgICAgICAgICAgICAgICAgICAgICYmIG5vZGVDYW5TcGVjdWxhdGVJbnRlZ2VyKG5vZGUt
PmFyaXRoTm9kZUZsYWdzKCkpKQogICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdl
UHJlZGljdGlvbihTcGVjSW50MzIpOwogICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAg
ICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVByZWRpY3Rpb24oU3BlY0RvdWJsZSk7CkBAIC00NTYs
MTggKzQ1NCwxOCBAQCBwcml2YXRlOgogICAgICAgICAgICAgZmxhZ3MgfD0gTm9kZVVzZWRBc051
bWJlciB8IE5vZGVOZWVkc05lZ1plcm87CiAgICAgICAgICAgICBmbGFncyAmPSB+Tm9kZVVzZWRB
c090aGVyOwogCi0gICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0u
bWVyZ2VGbGFncyhmbGFncyk7Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbm9kZS5j
aGlsZDIoKV0ubWVyZ2VGbGFncyhmbGFncyk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG5vZGUt
PmNoaWxkMSgpLT5tZXJnZUZsYWdzKGZsYWdzKTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbm9k
ZS0+Y2hpbGQyKCktPm1lcmdlRmxhZ3MoZmxhZ3MpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBjYXNlIEFyaXRoTW9kOiB7Ci0gICAgICAgICAg
ICBTcGVjdWxhdGVkVHlwZSBsZWZ0ID0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5wcmVkaWN0aW9u
KCk7Ci0gICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSByaWdodCA9IG1fZ3JhcGhbbm9kZS5jaGls
ZDIoKV0ucHJlZGljdGlvbigpOworICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgbGVmdCA9IG5v
ZGUtPmNoaWxkMSgpLT5wcmVkaWN0aW9uKCk7CisgICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSBy
aWdodCA9IG5vZGUtPmNoaWxkMigpLT5wcmVkaWN0aW9uKCk7CiAgICAgICAgICAgICAKICAgICAg
ICAgICAgIGlmIChsZWZ0ICYmIHJpZ2h0KSB7Ci0gICAgICAgICAgICAgICAgaWYgKE5vZGU6OnNo
b3VsZFNwZWN1bGF0ZUludGVnZXJGb3JBcml0aG1ldGljKG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0s
IG1fZ3JhcGhbbm9kZS5jaGlsZDIoKV0pCi0gICAgICAgICAgICAgICAgICAgICYmIG5vZGVDYW5T
cGVjdWxhdGVJbnRlZ2VyKG5vZGUuYXJpdGhOb2RlRmxhZ3MoKSkpCisgICAgICAgICAgICAgICAg
aWYgKE5vZGU6OnNob3VsZFNwZWN1bGF0ZUludGVnZXJGb3JBcml0aG1ldGljKG5vZGUtPmNoaWxk
MSgpLm5vZGUoKSwgbm9kZS0+Y2hpbGQyKCkubm9kZSgpKQorICAgICAgICAgICAgICAgICAgICAm
JiBub2RlQ2FuU3BlY3VsYXRlSW50ZWdlcihub2RlLT5hcml0aE5vZGVGbGFncygpKSkKICAgICAg
ICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVByZWRpY3Rpb24oU3BlY0ludDMyKTsKICAg
ICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VQ
cmVkaWN0aW9uKFNwZWNEb3VibGUpOwpAQCAtNDc2LDggKzQ3NCw4IEBAIHByaXZhdGU6CiAgICAg
ICAgICAgICBmbGFncyB8PSBOb2RlVXNlZEFzTnVtYmVyIHwgTm9kZU5lZWRzTmVnWmVybzsKICAg
ICAgICAgICAgIGZsYWdzICY9IH5Ob2RlVXNlZEFzT3RoZXI7CiAKLSAgICAgICAgICAgIGNoYW5n
ZWQgfD0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5tZXJnZUZsYWdzKGZsYWdzKTsKLSAgICAgICAg
ICAgIGNoYW5nZWQgfD0gbV9ncmFwaFtub2RlLmNoaWxkMigpXS5tZXJnZUZsYWdzKGZsYWdzKTsK
KyAgICAgICAgICAgIGNoYW5nZWQgfD0gbm9kZS0+Y2hpbGQxKCktPm1lcmdlRmxhZ3MoZmxhZ3Mp
OworICAgICAgICAgICAgY2hhbmdlZCB8PSBub2RlLT5jaGlsZDIoKS0+bWVyZ2VGbGFncyhmbGFn
cyk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCkBAIC00ODUs
MTkgKzQ4MywxOSBAQCBwcml2YXRlOgogICAgICAgICAgICAgY2hhbmdlZCB8PSBzZXRQcmVkaWN0
aW9uKFNwZWNEb3VibGUpOwogICAgICAgICAgICAgZmxhZ3MgfD0gTm9kZVVzZWRBc051bWJlciB8
IE5vZGVOZWVkc05lZ1plcm87CiAgICAgICAgICAgICBmbGFncyAmPSB+Tm9kZVVzZWRBc090aGVy
OwotICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLm1lcmdlRmxh
Z3MoZmxhZ3MpOworICAgICAgICAgICAgY2hhbmdlZCB8PSBub2RlLT5jaGlsZDEoKS0+bWVyZ2VG
bGFncyhmbGFncyk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAg
CiAgICAgICAgIGNhc2UgQXJpdGhBYnM6IHsKLSAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIGNo
aWxkID0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5wcmVkaWN0aW9uKCk7CisgICAgICAgICAgICBT
cGVjdWxhdGVkVHlwZSBjaGlsZCA9IG5vZGUtPmNoaWxkMSgpLT5wcmVkaWN0aW9uKCk7CiAgICAg
ICAgICAgICBpZiAoaXNJbnQzMlNwZWN1bGF0aW9uRm9yQXJpdGhtZXRpYyhjaGlsZCkKLSAgICAg
ICAgICAgICAgICAmJiBub2RlQ2FuU3BlY3VsYXRlSW50ZWdlcihub2RlLmFyaXRoTm9kZUZsYWdz
KCkpKQorICAgICAgICAgICAgICAgICYmIG5vZGVDYW5TcGVjdWxhdGVJbnRlZ2VyKG5vZGUtPmFy
aXRoTm9kZUZsYWdzKCkpKQogICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0
aW9uKFNwZWNJbnQzMik7CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgY2hhbmdl
ZCB8PSBtZXJnZVByZWRpY3Rpb24oc3BlY3VsYXRlZERvdWJsZVR5cGVGb3JQcmVkaWN0aW9uKGNo
aWxkKSk7CiAKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5t
ZXJnZUZsYWdzKGZsYWdzKTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbm9kZS0+Y2hpbGQxKCkt
Pm1lcmdlRmxhZ3MoZmxhZ3MpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAg
ICAgICAgIApAQCAtNTI3LDMxICs1MjUsMzEgQEAgcHJpdmF0ZToKICAgICAgICAgfQogCiAgICAg
ICAgIGNhc2UgR2V0QnlJZDogewotICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVByZWRpY3Rp
b24obm9kZS5nZXRIZWFwUHJlZGljdGlvbigpKTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVy
Z2VQcmVkaWN0aW9uKG5vZGUtPmdldEhlYXBQcmVkaWN0aW9uKCkpOwogICAgICAgICAgICAgY2hh
bmdlZCB8PSBtZXJnZURlZmF1bHRGbGFncyhub2RlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBHZXRCeUlkRmx1c2g6Ci0gICAgICAg
ICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbihub2RlLmdldEhlYXBQcmVkaWN0aW9uKCkp
OworICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVByZWRpY3Rpb24obm9kZS0+Z2V0SGVhcFBy
ZWRpY3Rpb24oKSk7CiAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlRGVmYXVsdEZsYWdzKG5v
ZGUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBHZXRC
eVZhbDogewotICAgICAgICAgICAgaWYgKG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0uc2hvdWxkU3Bl
Y3VsYXRlRmxvYXQzMkFycmF5KCkKLSAgICAgICAgICAgICAgICB8fCBtX2dyYXBoW25vZGUuY2hp
bGQxKCldLnNob3VsZFNwZWN1bGF0ZUZsb2F0NjRBcnJheSgpKQorICAgICAgICAgICAgaWYgKG5v
ZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVGbG9hdDMyQXJyYXkoKQorICAgICAgICAgICAg
ICAgIHx8IG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVGbG9hdDY0QXJyYXkoKSkKICAg
ICAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbihTcGVjRG91YmxlKTsKICAg
ICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlv
bihub2RlLmdldEhlYXBQcmVkaWN0aW9uKCkpOwogCi0gICAgICAgICAgICBjaGFuZ2VkIHw9IG1f
Z3JhcGhbbm9kZS5jaGlsZDEoKV0ubWVyZ2VGbGFncyhOb2RlVXNlZEFzVmFsdWUpOwotICAgICAg
ICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQyKCldLm1lcmdlRmxhZ3MoTm9kZVVz
ZWRBc051bWJlciB8IE5vZGVVc2VkQXNPdGhlciB8IE5vZGVVc2VkQXNJbnQgfCBOb2RlVXNlZEFz
SW50TG9jYWxseSk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG5vZGUtPmNoaWxkMSgpLT5tZXJn
ZUZsYWdzKE5vZGVVc2VkQXNWYWx1ZSk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG5vZGUtPmNo
aWxkMigpLT5tZXJnZUZsYWdzKE5vZGVVc2VkQXNOdW1iZXIgfCBOb2RlVXNlZEFzT3RoZXIgfCBO
b2RlVXNlZEFzSW50IHwgTm9kZVVzZWRBc0ludExvY2FsbHkpOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBjYXNlIEdldE15QXJndW1lbnRCeVZh
bFNhZmU6IHsKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKG5vZGUuZ2V0
SGVhcFByZWRpY3Rpb24oKSk7Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbm9kZS5j
aGlsZDEoKV0ubWVyZ2VGbGFncyhOb2RlVXNlZEFzTnVtYmVyIHwgTm9kZVVzZWRBc090aGVyIHwg
Tm9kZVVzZWRBc0ludCB8IE5vZGVVc2VkQXNJbnRMb2NhbGx5KTsKKyAgICAgICAgICAgIGNoYW5n
ZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKG5vZGUtPmdldEhlYXBQcmVkaWN0aW9uKCkpOworICAgICAg
ICAgICAgY2hhbmdlZCB8PSBub2RlLT5jaGlsZDEoKS0+bWVyZ2VGbGFncyhOb2RlVXNlZEFzTnVt
YmVyIHwgTm9kZVVzZWRBc090aGVyIHwgTm9kZVVzZWRBc0ludCB8IE5vZGVVc2VkQXNJbnRMb2Nh
bGx5KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKQEAgLTU3
MSwyNSArNTY5LDIzIEBAIHByaXZhdGU6CiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIEdldEJ5
T2Zmc2V0OiB7Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbihub2RlLmdl
dEhlYXBQcmVkaWN0aW9uKCkpOworICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVByZWRpY3Rp
b24obm9kZS0+Z2V0SGVhcFByZWRpY3Rpb24oKSk7CiAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1l
cmdlRGVmYXVsdEZsYWdzKG5vZGUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAg
ICAgICAgICAgIAogICAgICAgICBjYXNlIENhbGw6CiAgICAgICAgIGNhc2UgQ29uc3RydWN0OiB7
Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbihub2RlLmdldEhlYXBQcmVk
aWN0aW9uKCkpOwotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBjaGlsZElkeCA9IG5vZGUuZmly
c3RDaGlsZCgpOwotICAgICAgICAgICAgICAgICBjaGlsZElkeCA8IG5vZGUuZmlyc3RDaGlsZCgp
ICsgbm9kZS5udW1DaGlsZHJlbigpOwotICAgICAgICAgICAgICAgICArK2NoaWxkSWR4KSB7Ci0g
ICAgICAgICAgICAgICAgRWRnZSBlZGdlID0gbV9ncmFwaC5tX3ZhckFyZ0NoaWxkcmVuW2NoaWxk
SWR4XTsKLSAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhbZWRnZV0ubWVyZ2VGbGFn
cyhOb2RlVXNlZEFzVmFsdWUpOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgY2hhbmdlZCB8
PSBtZXJnZVByZWRpY3Rpb24obm9kZS0+Z2V0SGVhcFByZWRpY3Rpb24oKSk7CisgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGNoaWxkSWR4ID0gbm9kZS0+Zmlyc3RDaGlsZCgpOworICAgICAgICAg
ICAgICAgICBjaGlsZElkeCA8IG5vZGUtPmZpcnN0Q2hpbGQoKSArIG5vZGUtPm51bUNoaWxkcmVu
KCk7CisgICAgICAgICAgICAgICAgICsrY2hpbGRJZHgpCisgICAgICAgICAgICAgICAgY2hhbmdl
ZCB8PSBtX2dyYXBoLm1fdmFyQXJnQ2hpbGRyZW5bY2hpbGRJZHhdLT5tZXJnZUZsYWdzKE5vZGVV
c2VkQXNWYWx1ZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAg
CiAgICAgICAgIGNhc2UgQ29udmVydFRoaXM6IHsKLSAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBl
IHByZWRpY3Rpb24gPSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLnByZWRpY3Rpb24oKTsKKyAgICAg
ICAgICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24gPSBub2RlLT5jaGlsZDEoKS0+cHJlZGlj
dGlvbigpOwogICAgICAgICAgICAgaWYgKHByZWRpY3Rpb24pIHsKICAgICAgICAgICAgICAgICBp
ZiAocHJlZGljdGlvbiAmIH5TcGVjT2JqZWN0TWFzaykgewogICAgICAgICAgICAgICAgICAgICBw
cmVkaWN0aW9uICY9IFNwZWNPYmplY3RNYXNrOwpAQCAtNjAyLDEzICs1OTgsMTMgQEAgcHJpdmF0
ZToKICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgR2V0R2xvYmFsVmFyOiB7
Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbihub2RlLmdldEhlYXBQcmVk
aWN0aW9uKCkpOworICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVByZWRpY3Rpb24obm9kZS0+
Z2V0SGVhcFByZWRpY3Rpb24oKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAg
ICAgICAgICAgCiAgICAgICAgIGNhc2UgUHV0R2xvYmFsVmFyOgogICAgICAgICBjYXNlIFB1dEds
b2JhbFZhckNoZWNrOiB7Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbm9kZS5jaGls
ZDEoKV0ubWVyZ2VGbGFncyhOb2RlVXNlZEFzVmFsdWUpOworICAgICAgICAgICAgY2hhbmdlZCB8
PSBub2RlLT5jaGlsZDEoKS0+bWVyZ2VGbGFncyhOb2RlVXNlZEFzVmFsdWUpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIApAQCAtNjE3LDcgKzYxMyw3IEBAIHBy
aXZhdGU6CiAgICAgICAgIGNhc2UgUmVzb2x2ZUJhc2U6CiAgICAgICAgIGNhc2UgUmVzb2x2ZUJh
c2VTdHJpY3RQdXQ6CiAgICAgICAgIGNhc2UgUmVzb2x2ZUdsb2JhbDogewotICAgICAgICAgICAg
U3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiA9IG5vZGUuZ2V0SGVhcFByZWRpY3Rpb24oKTsKKyAg
ICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24gPSBub2RlLT5nZXRIZWFwUHJlZGlj
dGlvbigpOwogICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVByZWRpY3Rpb24ocHJlZGljdGlv
bik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtNjQzLDE4ICs2MzksMTYgQEAg
cHJpdmF0ZToKICAgICAgICAgICAgIAogICAgICAgICBjYXNlIE5ld0FycmF5OiB7CiAgICAgICAg
ICAgICBjaGFuZ2VkIHw9IHNldFByZWRpY3Rpb24oU3BlY0FycmF5KTsKLSAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgY2hpbGRJZHggPSBub2RlLmZpcnN0Q2hpbGQoKTsKLSAgICAgICAgICAgICAg
ICAgY2hpbGRJZHggPCBub2RlLmZpcnN0Q2hpbGQoKSArIG5vZGUubnVtQ2hpbGRyZW4oKTsKLSAg
ICAgICAgICAgICAgICAgKytjaGlsZElkeCkgewotICAgICAgICAgICAgICAgIEVkZ2UgZWRnZSA9
IG1fZ3JhcGgubV92YXJBcmdDaGlsZHJlbltjaGlsZElkeF07Ci0gICAgICAgICAgICAgICAgY2hh
bmdlZCB8PSBtX2dyYXBoW2VkZ2VdLm1lcmdlRmxhZ3MoTm9kZVVzZWRBc1ZhbHVlKTsKLSAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgY2hpbGRJZHggPSBub2RlLT5maXJz
dENoaWxkKCk7CisgICAgICAgICAgICAgICAgIGNoaWxkSWR4IDwgbm9kZS0+Zmlyc3RDaGlsZCgp
ICsgbm9kZS0+bnVtQ2hpbGRyZW4oKTsKKyAgICAgICAgICAgICAgICAgKytjaGlsZElkeCkKKyAg
ICAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGgubV92YXJBcmdDaGlsZHJlbltjaGlsZElk
eF0tPm1lcmdlRmxhZ3MoTm9kZVVzZWRBc1ZhbHVlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBOZXdBcnJheVdpdGhTaXplOiB7CiAg
ICAgICAgICAgICBjaGFuZ2VkIHw9IHNldFByZWRpY3Rpb24oU3BlY0FycmF5KTsKLSAgICAgICAg
ICAgIGNoYW5nZWQgfD0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5tZXJnZUZsYWdzKE5vZGVVc2Vk
QXNWYWx1ZSB8IE5vZGVVc2VkQXNJbnQgfCBOb2RlVXNlZEFzSW50TG9jYWxseSk7CisgICAgICAg
ICAgICBjaGFuZ2VkIHw9IG5vZGUtPmNoaWxkMSgpLT5tZXJnZUZsYWdzKE5vZGVVc2VkQXNWYWx1
ZSB8IE5vZGVVc2VkQXNJbnQgfCBOb2RlVXNlZEFzSW50TG9jYWxseSk7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCkBAIC02NzAsMjIgKzY2NCwyMiBAQCBwcml2
YXRlOgogICAgICAgICAKICAgICAgICAgY2FzZSBTdHJpbmdDaGFyQXQ6IHsKICAgICAgICAgICAg
IGNoYW5nZWQgfD0gc2V0UHJlZGljdGlvbihTcGVjU3RyaW5nKTsKLSAgICAgICAgICAgIGNoYW5n
ZWQgfD0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5tZXJnZUZsYWdzKE5vZGVVc2VkQXNWYWx1ZSk7
Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbm9kZS5jaGlsZDIoKV0ubWVyZ2VGbGFn
cyhOb2RlVXNlZEFzTnVtYmVyIHwgTm9kZVVzZWRBc090aGVyIHwgTm9kZVVzZWRBc0ludCB8IE5v
ZGVVc2VkQXNJbnRMb2NhbGx5KTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbm9kZS0+Y2hpbGQx
KCktPm1lcmdlRmxhZ3MoTm9kZVVzZWRBc1ZhbHVlKTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0g
bm9kZS0+Y2hpbGQyKCktPm1lcmdlRmxhZ3MoTm9kZVVzZWRBc051bWJlciB8IE5vZGVVc2VkQXNP
dGhlciB8IE5vZGVVc2VkQXNJbnQgfCBOb2RlVXNlZEFzSW50TG9jYWxseSk7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgU3RyQ2F0OiB7
CiAgICAgICAgICAgICBjaGFuZ2VkIHw9IHNldFByZWRpY3Rpb24oU3BlY1N0cmluZyk7Ci0gICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGNoaWxkSWR4ID0gbm9kZS5maXJzdENoaWxkKCk7Ci0gICAg
ICAgICAgICAgICAgIGNoaWxkSWR4IDwgbm9kZS5maXJzdENoaWxkKCkgKyBub2RlLm51bUNoaWxk
cmVuKCk7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGNoaWxkSWR4ID0gbm9kZS0+Zmlyc3RD
aGlsZCgpOworICAgICAgICAgICAgICAgICBjaGlsZElkeCA8IG5vZGUtPmZpcnN0Q2hpbGQoKSAr
IG5vZGUtPm51bUNoaWxkcmVuKCk7CiAgICAgICAgICAgICAgICAgICsrY2hpbGRJZHgpCi0gICAg
ICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW21fZ3JhcGgubV92YXJBcmdDaGlsZHJlbltj
aGlsZElkeF1dLm1lcmdlRmxhZ3MoTm9kZVVzZWRBc051bWJlciB8IE5vZGVVc2VkQXNPdGhlcik7
CisgICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoLm1fdmFyQXJnQ2hpbGRyZW5bY2hp
bGRJZHhdLT5tZXJnZUZsYWdzKE5vZGVVc2VkQXNOdW1iZXIgfCBOb2RlVXNlZEFzT3RoZXIpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBjYXNl
IFRvUHJpbWl0aXZlOiB7Ci0gICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSBjaGlsZCA9IG1fZ3Jh
cGhbbm9kZS5jaGlsZDEoKV0ucHJlZGljdGlvbigpOworICAgICAgICAgICAgU3BlY3VsYXRlZFR5
cGUgY2hpbGQgPSBub2RlLT5jaGlsZDEoKS0+cHJlZGljdGlvbigpOwogICAgICAgICAgICAgaWYg
KGNoaWxkKSB7CiAgICAgICAgICAgICAgICAgaWYgKGlzT2JqZWN0U3BlY3VsYXRpb24oY2hpbGQp
KSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIEknZCBsb3ZlIHRvIGZvbGQgdGhpcyBjYXNlIGlu
dG8gdGhlIGNhc2UgYmVsb3csIGJ1dCBJIGNhbid0LCBiZWNhdXNlCkBAIC03MDIsNyArNjk2LDcg
QEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICAgICAgICAg
Y2hhbmdlZCB8PSBtZXJnZVByZWRpY3Rpb24oY2hpbGQpOwogICAgICAgICAgICAgfQotICAgICAg
ICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLm1lcmdlRmxhZ3MoZmxhZ3Mp
OworICAgICAgICAgICAgY2hhbmdlZCB8PSBub2RlLT5jaGlsZDEoKS0+bWVyZ2VGbGFncyhmbGFn
cyk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCkBAIC03NDUs
NDIgKzczOSw0NSBAQCBwcml2YXRlOgogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBjYXNl
IFB1dEJ5VmFsOgotICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW21fZ3JhcGgudmFyQXJn
Q2hpbGQobm9kZSwgMCldLm1lcmdlRmxhZ3MoTm9kZVVzZWRBc1ZhbHVlKTsKLSAgICAgICAgICAg
IGNoYW5nZWQgfD0gbV9ncmFwaFttX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpXS5tZXJnZUZs
YWdzKE5vZGVVc2VkQXNOdW1iZXIgfCBOb2RlVXNlZEFzT3RoZXIgfCBOb2RlVXNlZEFzSW50IHwg
Tm9kZVVzZWRBc0ludExvY2FsbHkpOwotICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW21f
Z3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMildLm1lcmdlRmxhZ3MoTm9kZVVzZWRBc1ZhbHVlKTsK
KyAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKS0+bWVy
Z2VGbGFncyhOb2RlVXNlZEFzVmFsdWUpOworICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBo
LnZhckFyZ0NoaWxkKG5vZGUsIDEpLT5tZXJnZUZsYWdzKE5vZGVVc2VkQXNOdW1iZXIgfCBOb2Rl
VXNlZEFzT3RoZXIgfCBOb2RlVXNlZEFzSW50IHwgTm9kZVVzZWRBc0ludExvY2FsbHkpOworICAg
ICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpLT5tZXJnZUZs
YWdzKE5vZGVVc2VkQXNWYWx1ZSk7CiAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICBjYXNl
IFB1dFNjb3BlZFZhcjoKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaFtub2RlLmNoaWxk
MSgpXS5tZXJnZUZsYWdzKE5vZGVVc2VkQXNWYWx1ZSk7Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9
IG1fZ3JhcGhbbm9kZS5jaGlsZDMoKV0ubWVyZ2VGbGFncyhOb2RlVXNlZEFzVmFsdWUpOworICAg
ICAgICAgICAgY2hhbmdlZCB8PSBub2RlLT5jaGlsZDEoKS0+bWVyZ2VGbGFncyhOb2RlVXNlZEFz
VmFsdWUpOworICAgICAgICAgICAgY2hhbmdlZCB8PSBub2RlLT5jaGlsZDMoKS0+bWVyZ2VGbGFn
cyhOb2RlVXNlZEFzVmFsdWUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAg
ICAgICAgY2FzZSBSZXR1cm46CiAgICAgICAgIGNhc2UgVGhyb3c6Ci0gICAgICAgICAgICBjaGFu
Z2VkIHw9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ubWVyZ2VGbGFncyhOb2RlVXNlZEFzVmFsdWUp
OworICAgICAgICAgICAgY2hhbmdlZCB8PSBub2RlLT5jaGlsZDEoKS0+bWVyZ2VGbGFncyhOb2Rl
VXNlZEFzVmFsdWUpOwogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSBQdXRCeUlk
OgogICAgICAgICBjYXNlIFB1dEJ5SWREaXJlY3Q6Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IG1f
Z3JhcGhbbm9kZS5jaGlsZDEoKV0ubWVyZ2VGbGFncyhOb2RlVXNlZEFzVmFsdWUpOwotICAgICAg
ICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQyKCldLm1lcmdlRmxhZ3MoTm9kZVVz
ZWRBc1ZhbHVlKTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbm9kZS0+Y2hpbGQxKCktPm1lcmdl
RmxhZ3MoTm9kZVVzZWRBc1ZhbHVlKTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbm9kZS0+Y2hp
bGQyKCktPm1lcmdlRmxhZ3MoTm9kZVVzZWRBc1ZhbHVlKTsKICAgICAgICAgICAgIGJyZWFrOwog
CiAgICAgICAgIGNhc2UgUHV0QnlPZmZzZXQ6Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3Jh
cGhbbm9kZS5jaGlsZDEoKV0ubWVyZ2VGbGFncyhOb2RlVXNlZEFzVmFsdWUpOwotICAgICAgICAg
ICAgY2hhbmdlZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQzKCldLm1lcmdlRmxhZ3MoTm9kZVVzZWRB
c1ZhbHVlKTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbm9kZS0+Y2hpbGQxKCktPm1lcmdlRmxh
Z3MoTm9kZVVzZWRBc1ZhbHVlKTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbm9kZS0+Y2hpbGQz
KCktPm1lcmdlRmxhZ3MoTm9kZVVzZWRBc1ZhbHVlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgCiAgICAgICAgIGNhc2UgUGhpOgorICAgICAgICAgICAgLy8gUGhpcyBzaG91bGQg
bm90IGJlIHZpc2libGUgaGVyZSBzaW5jZSB3ZSdyZSBpdGVyYXRpbmcgdGhlIGFsbC1idXQtUGhp
J3MKKyAgICAgICAgICAgIC8vIHBhcnQgb2YgYmFzaWMgYmxvY2tzLgorICAgICAgICAgICAgQ1JB
U0goKTsKICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2UgU2V0Q2FsbGVlOgogICAg
ICAgICBjYXNlIFNldE15U2NvcGU6Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbm9k
ZS5jaGlsZDEoKV0ubWVyZ2VGbGFncyhOb2RlVXNlZEFzVmFsdWUpOworICAgICAgICAgICAgY2hh
bmdlZCB8PSBub2RlLT5jaGlsZDEoKS0+bWVyZ2VGbGFncyhOb2RlVXNlZEFzVmFsdWUpOwogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBHZXRTY29wZToKLSAg
ICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5tZXJnZUZsYWdzKE5v
ZGVVc2VkQXNWYWx1ZSk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG5vZGUtPmNoaWxkMSgpLT5t
ZXJnZUZsYWdzKE5vZGVVc2VkQXNWYWx1ZSk7CiAgICAgICAgICAgICBjaGFuZ2VkIHw9IHNldFBy
ZWRpY3Rpb24oU3BlY0NlbGxPdGhlcik7CiAgICAgICAgICAgICBicmVhazsKIApAQCAtODI4LDMy
ICs4MjUsMzIgQEAgcHJpdmF0ZToKICAgICAgICAgfQogCiAjaWYgREZHX0VOQUJMRShERUJVR19Q
Uk9QQUdBVElPTl9WRVJCT1NFKQotICAgICAgICBkYXRhTG9nKFNwZWN1bGF0aW9uRHVtcChtX2dy
YXBoW21fY29tcGlsZUluZGV4XS5wcmVkaWN0aW9uKCkpLCAiXG4iKTsKKyAgICAgICAgZGF0YUxv
ZyhTcGVjdWxhdGlvbkR1bXAobm9kZS0+cHJlZGljdGlvbigpKSwgIlxuIik7CiAjZW5kaWYKICAg
ICAgICAgCiAgICAgICAgIG1fY2hhbmdlZCB8PSBjaGFuZ2VkOwogICAgIH0KICAgICAgICAgCi0g
ICAgYm9vbCBtZXJnZURlZmF1bHRGbGFncyhOb2RlJiBub2RlKQorICAgIGJvb2wgbWVyZ2VEZWZh
dWx0RmxhZ3MoTm9kZSogbm9kZSkKICAgICB7CiAgICAgICAgIGJvb2wgY2hhbmdlZCA9IGZhbHNl
OwotICAgICAgICBpZiAobm9kZS5mbGFncygpICYgTm9kZUhhc1ZhckFyZ3MpIHsKLSAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgY2hpbGRJZHggPSBub2RlLmZpcnN0Q2hpbGQoKTsKLSAgICAgICAg
ICAgICAgICAgY2hpbGRJZHggPCBub2RlLmZpcnN0Q2hpbGQoKSArIG5vZGUubnVtQ2hpbGRyZW4o
KTsKKyAgICAgICAgaWYgKG5vZGUtPmZsYWdzKCkgJiBOb2RlSGFzVmFyQXJncykgeworICAgICAg
ICAgICAgZm9yICh1bnNpZ25lZCBjaGlsZElkeCA9IG5vZGUtPmZpcnN0Q2hpbGQoKTsKKyAgICAg
ICAgICAgICAgICAgY2hpbGRJZHggPCBub2RlLT5maXJzdENoaWxkKCkgKyBub2RlLT5udW1DaGls
ZHJlbigpOwogICAgICAgICAgICAgICAgICBjaGlsZElkeCsrKSB7CiAgICAgICAgICAgICAgICAg
aWYgKCEhbV9ncmFwaC5tX3ZhckFyZ0NoaWxkcmVuW2NoaWxkSWR4XSkKLSAgICAgICAgICAgICAg
ICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW21fZ3JhcGgubV92YXJBcmdDaGlsZHJlbltjaGlsZElk
eF1dLm1lcmdlRmxhZ3MoTm9kZVVzZWRBc1ZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgY2hh
bmdlZCB8PSBtX2dyYXBoLm1fdmFyQXJnQ2hpbGRyZW5bY2hpbGRJZHhdLT5tZXJnZUZsYWdzKE5v
ZGVVc2VkQXNWYWx1ZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICBpZiAoIW5vZGUuY2hpbGQxKCkpCisgICAgICAgICAgICBpZiAoIW5vZGUtPmNoaWxkMSgp
KQogICAgICAgICAgICAgICAgIHJldHVybiBjaGFuZ2VkOwotICAgICAgICAgICAgY2hhbmdlZCB8
PSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLm1lcmdlRmxhZ3MoTm9kZVVzZWRBc1ZhbHVlKTsKLSAg
ICAgICAgICAgIGlmICghbm9kZS5jaGlsZDIoKSkKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbm9k
ZS0+Y2hpbGQxKCktPm1lcmdlRmxhZ3MoTm9kZVVzZWRBc1ZhbHVlKTsKKyAgICAgICAgICAgIGlm
ICghbm9kZS0+Y2hpbGQyKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGNoYW5nZWQ7Ci0gICAg
ICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbm9kZS5jaGlsZDIoKV0ubWVyZ2VGbGFncyhOb2Rl
VXNlZEFzVmFsdWUpOwotICAgICAgICAgICAgaWYgKCFub2RlLmNoaWxkMygpKQorICAgICAgICAg
ICAgY2hhbmdlZCB8PSBub2RlLT5jaGlsZDIoKS0+bWVyZ2VGbGFncyhOb2RlVXNlZEFzVmFsdWUp
OworICAgICAgICAgICAgaWYgKCFub2RlLT5jaGlsZDMoKSkKICAgICAgICAgICAgICAgICByZXR1
cm4gY2hhbmdlZDsKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaFtub2RlLmNoaWxkMygp
XS5tZXJnZUZsYWdzKE5vZGVVc2VkQXNWYWx1ZSk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG5v
ZGUtPmNoaWxkMygpLT5tZXJnZUZsYWdzKE5vZGVVc2VkQXNWYWx1ZSk7CiAgICAgICAgIH0KICAg
ICAgICAgcmV0dXJuIGNoYW5nZWQ7CiAgICAgfQpAQCAtODYzLDggKzg2MCwxNiBAQCBwcml2YXRl
OgogI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKICAgICAgICAgZGF0
YUxvZ0YoIlByb3BhZ2F0aW5nIHByZWRpY3Rpb25zIGZvcndhcmQgWyV1XVxuIiwgKyttX2NvdW50
KTsKICNlbmRpZgotICAgICAgICBmb3IgKG1fY29tcGlsZUluZGV4ID0gMDsgbV9jb21waWxlSW5k
ZXggPCBtX2dyYXBoLnNpemUoKTsgKyttX2NvbXBpbGVJbmRleCkKLSAgICAgICAgICAgIHByb3Bh
Z2F0ZShtX2dyYXBoW21fY29tcGlsZUluZGV4XSk7CisgICAgICAgIGZvciAoQmxvY2tJbmRleCBi
bG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8IG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgpOyArK2Js
b2NrSW5kZXgpIHsKKyAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5tX2Js
b2Nrc1tibG9ja0luZGV4XS5nZXQoKTsKKyAgICAgICAgICAgIGlmICghYmxvY2spCisgICAgICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBBU1NFUlQoYmxvY2stPmlzUmVhY2hhYmxl
KTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBibG9jay0+c2l6ZSgpOyAr
K2kpIHsKKyAgICAgICAgICAgICAgICBtX2N1cnJlbnROb2RlID0gYmxvY2stPmF0KGkpOworICAg
ICAgICAgICAgICAgIHByb3BhZ2F0ZShtX2N1cnJlbnROb2RlKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQogICAgIH0KICAgICAKICAgICB2b2lkIHByb3BhZ2F0ZUJhY2t3YXJkKCkKQEAgLTg3
MiwxMjMgKzg3NywxMzkgQEAgcHJpdmF0ZToKICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FU
SU9OX1ZFUkJPU0UpCiAgICAgICAgIGRhdGFMb2dGKCJQcm9wYWdhdGluZyBwcmVkaWN0aW9ucyBi
YWNrd2FyZCBbJXVdXG4iLCArK21fY291bnQpOwogI2VuZGlmCi0gICAgICAgIGZvciAobV9jb21w
aWxlSW5kZXggPSBtX2dyYXBoLnNpemUoKTsgbV9jb21waWxlSW5kZXgtLSA+IDA7KQotICAgICAg
ICAgICAgcHJvcGFnYXRlKG1fZ3JhcGhbbV9jb21waWxlSW5kZXhdKTsKKyAgICAgICAgZm9yIChC
bG9ja0luZGV4IGJsb2NrSW5kZXggPSBtX2dyYXBoLm1fYmxvY2tzLnNpemUoKTsgYmxvY2tJbmRl
eC0tOykgeworICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLm1fYmxvY2tz
W2Jsb2NrSW5kZXhdLmdldCgpOworICAgICAgICAgICAgaWYgKCFibG9jaykKKyAgICAgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIEFTU0VSVChibG9jay0+aXNSZWFjaGFibGUpOwor
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gYmxvY2stPnNpemUoKTsgaS0tOykgeworICAg
ICAgICAgICAgICAgIG1fY3VycmVudE5vZGUgPSBibG9jay0+YXQoaSk7CisgICAgICAgICAgICAg
ICAgcHJvcGFnYXRlKG1fY3VycmVudE5vZGUpOworICAgICAgICAgICAgfQorICAgICAgICB9CiAg
ICAgfQogICAgIAotICAgIHZvaWQgZG9Sb3VuZE9mRG91YmxlVm90aW5nKCkKKyAgICB2b2lkIGRv
RG91YmxlVm90aW5nKE5vZGUqIG5vZGUpCiAgICAgewotI2lmIERGR19FTkFCTEUoREVCVUdfUFJP
UEFHQVRJT05fVkVSQk9TRSkKLSAgICAgICAgZGF0YUxvZ0YoIlZvdGluZyBvbiBkb3VibGUgdXNl
cyBvZiBsb2NhbHMgWyV1XVxuIiwgbV9jb3VudCk7Ci0jZW5kaWYKLSAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IG1fZ3JhcGgubV92YXJpYWJsZUFjY2Vzc0RhdGEuc2l6ZSgpOyArK2kp
Ci0gICAgICAgICAgICBtX2dyYXBoLm1fdmFyaWFibGVBY2Nlc3NEYXRhW2ldLmZpbmQoKS0+Y2xl
YXJWb3RlcygpOwotICAgICAgICBmb3IgKG1fY29tcGlsZUluZGV4ID0gMDsgbV9jb21waWxlSW5k
ZXggPCBtX2dyYXBoLnNpemUoKTsgKyttX2NvbXBpbGVJbmRleCkgewotICAgICAgICAgICAgTm9k
ZSYgbm9kZSA9IG1fZ3JhcGhbbV9jb21waWxlSW5kZXhdOwotICAgICAgICAgICAgc3dpdGNoIChu
b2RlLm9wKCkpIHsKLSAgICAgICAgICAgIGNhc2UgVmFsdWVBZGQ6Ci0gICAgICAgICAgICBjYXNl
IEFyaXRoQWRkOgotICAgICAgICAgICAgY2FzZSBBcml0aFN1YjogewotICAgICAgICAgICAgICAg
IFNwZWN1bGF0ZWRUeXBlIGxlZnQgPSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLnByZWRpY3Rpb24o
KTsKLSAgICAgICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSByaWdodCA9IG1fZ3JhcGhbbm9kZS5j
aGlsZDIoKV0ucHJlZGljdGlvbigpOworICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKKyAg
ICAgICAgY2FzZSBWYWx1ZUFkZDoKKyAgICAgICAgY2FzZSBBcml0aEFkZDoKKyAgICAgICAgY2Fz
ZSBBcml0aFN1YjogeworICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgbGVmdCA9IG5vZGUtPmNo
aWxkMSgpLT5wcmVkaWN0aW9uKCk7CisgICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSByaWdodCA9
IG5vZGUtPmNoaWxkMigpLT5wcmVkaWN0aW9uKCk7CiAgICAgICAgICAgICAgICAgCi0gICAgICAg
ICAgICAgICAgRG91YmxlQmFsbG90IGJhbGxvdDsKKyAgICAgICAgICAgIERvdWJsZUJhbGxvdCBi
YWxsb3Q7CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYgKGlzTnVtYmVyU3Bl
Y3VsYXRpb25FeHBlY3RpbmdEZWZpbmVkKGxlZnQpICYmIGlzTnVtYmVyU3BlY3VsYXRpb25FeHBl
Y3RpbmdEZWZpbmVkKHJpZ2h0KQotICAgICAgICAgICAgICAgICAgICAmJiAhbV9ncmFwaC5hZGRT
aG91bGRTcGVjdWxhdGVJbnRlZ2VyKG5vZGUpKQotICAgICAgICAgICAgICAgICAgICBiYWxsb3Qg
PSBWb3RlRG91YmxlOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAg
YmFsbG90ID0gVm90ZVZhbHVlOworICAgICAgICAgICAgaWYgKGlzTnVtYmVyU3BlY3VsYXRpb25F
eHBlY3RpbmdEZWZpbmVkKGxlZnQpICYmIGlzTnVtYmVyU3BlY3VsYXRpb25FeHBlY3RpbmdEZWZp
bmVkKHJpZ2h0KQorICAgICAgICAgICAgICAgICYmICFtX2dyYXBoLmFkZFNob3VsZFNwZWN1bGF0
ZUludGVnZXIobm9kZSkpCisgICAgICAgICAgICAgICAgYmFsbG90ID0gVm90ZURvdWJsZTsKKyAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBiYWxsb3QgPSBWb3RlVmFsdWU7CiAgICAg
ICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgbV9ncmFwaC52b3RlKG5vZGUuY2hpbGQxKCks
IGJhbGxvdCk7Ci0gICAgICAgICAgICAgICAgbV9ncmFwaC52b3RlKG5vZGUuY2hpbGQyKCksIGJh
bGxvdCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9CisgICAgICAgICAg
ICBtX2dyYXBoLnZvdGVOb2RlKG5vZGUtPmNoaWxkMSgpLCBiYWxsb3QpOworICAgICAgICAgICAg
bV9ncmFwaC52b3RlTm9kZShub2RlLT5jaGlsZDIoKSwgYmFsbG90KTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBjYXNlIEFyaXRo
TXVsOiB7Ci0gICAgICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgbGVmdCA9IG1fZ3JhcGhbbm9k
ZS5jaGlsZDEoKV0ucHJlZGljdGlvbigpOwotICAgICAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBl
IHJpZ2h0ID0gbV9ncmFwaFtub2RlLmNoaWxkMigpXS5wcmVkaWN0aW9uKCk7CisgICAgICAgIGNh
c2UgQXJpdGhNdWw6IHsKKyAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIGxlZnQgPSBub2RlLT5j
aGlsZDEoKS0+cHJlZGljdGlvbigpOworICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgcmlnaHQg
PSBub2RlLT5jaGlsZDIoKS0+cHJlZGljdGlvbigpOwogICAgICAgICAgICAgICAgIAotICAgICAg
ICAgICAgICAgIERvdWJsZUJhbGxvdCBiYWxsb3Q7CisgICAgICAgICAgICBEb3VibGVCYWxsb3Qg
YmFsbG90OwogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGlmIChpc051bWJlclNw
ZWN1bGF0aW9uKGxlZnQpICYmIGlzTnVtYmVyU3BlY3VsYXRpb24ocmlnaHQpCi0gICAgICAgICAg
ICAgICAgICAgICYmICFtX2dyYXBoLm11bFNob3VsZFNwZWN1bGF0ZUludGVnZXIobm9kZSkpCi0g
ICAgICAgICAgICAgICAgICAgIGJhbGxvdCA9IFZvdGVEb3VibGU7Ci0gICAgICAgICAgICAgICAg
ZWxzZQotICAgICAgICAgICAgICAgICAgICBiYWxsb3QgPSBWb3RlVmFsdWU7CisgICAgICAgICAg
ICBpZiAoaXNOdW1iZXJTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc051bWJlclNwZWN1bGF0aW9uKHJp
Z2h0KQorICAgICAgICAgICAgICAgICYmICFtX2dyYXBoLm11bFNob3VsZFNwZWN1bGF0ZUludGVn
ZXIobm9kZSkpCisgICAgICAgICAgICAgICAgYmFsbG90ID0gVm90ZURvdWJsZTsKKyAgICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgICAgICBiYWxsb3QgPSBWb3RlVmFsdWU7CiAgICAgICAgICAg
ICAgICAgCi0gICAgICAgICAgICAgICAgbV9ncmFwaC52b3RlKG5vZGUuY2hpbGQxKCksIGJhbGxv
dCk7Ci0gICAgICAgICAgICAgICAgbV9ncmFwaC52b3RlKG5vZGUuY2hpbGQyKCksIGJhbGxvdCk7
Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBtX2dy
YXBoLnZvdGVOb2RlKG5vZGUtPmNoaWxkMSgpLCBiYWxsb3QpOworICAgICAgICAgICAgbV9ncmFw
aC52b3RlTm9kZShub2RlLT5jaGlsZDIoKSwgYmFsbG90KTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CiAKLSAgICAgICAgICAgIGNhc2UgQXJpdGhNaW46Ci0gICAgICAgICAgICBjYXNl
IEFyaXRoTWF4OgotICAgICAgICAgICAgY2FzZSBBcml0aE1vZDoKLSAgICAgICAgICAgIGNhc2Ug
QXJpdGhEaXY6IHsKLSAgICAgICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSBsZWZ0ID0gbV9ncmFw
aFtub2RlLmNoaWxkMSgpXS5wcmVkaWN0aW9uKCk7Ci0gICAgICAgICAgICAgICAgU3BlY3VsYXRl
ZFR5cGUgcmlnaHQgPSBtX2dyYXBoW25vZGUuY2hpbGQyKCldLnByZWRpY3Rpb24oKTsKKyAgICAg
ICAgY2FzZSBBcml0aE1pbjoKKyAgICAgICAgY2FzZSBBcml0aE1heDoKKyAgICAgICAgY2FzZSBB
cml0aE1vZDoKKyAgICAgICAgY2FzZSBBcml0aERpdjogeworICAgICAgICAgICAgU3BlY3VsYXRl
ZFR5cGUgbGVmdCA9IG5vZGUtPmNoaWxkMSgpLT5wcmVkaWN0aW9uKCk7CisgICAgICAgICAgICBT
cGVjdWxhdGVkVHlwZSByaWdodCA9IG5vZGUtPmNoaWxkMigpLT5wcmVkaWN0aW9uKCk7CiAgICAg
ICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgRG91YmxlQmFsbG90IGJhbGxvdDsKKyAgICAg
ICAgICAgIERvdWJsZUJhbGxvdCBiYWxsb3Q7CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAg
ICAgICAgaWYgKGlzTnVtYmVyU3BlY3VsYXRpb24obGVmdCkgJiYgaXNOdW1iZXJTcGVjdWxhdGlv
bihyaWdodCkKLSAgICAgICAgICAgICAgICAgICAgJiYgIShOb2RlOjpzaG91bGRTcGVjdWxhdGVJ
bnRlZ2VyRm9yQXJpdGhtZXRpYyhtX2dyYXBoW25vZGUuY2hpbGQxKCldLCBtX2dyYXBoW25vZGUu
Y2hpbGQxKCldKQotICAgICAgICAgICAgICAgICAgICAgICAgICYmIG5vZGUuY2FuU3BlY3VsYXRl
SW50ZWdlcigpKSkKLSAgICAgICAgICAgICAgICAgICAgYmFsbG90ID0gVm90ZURvdWJsZTsKLSAg
ICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIGJhbGxvdCA9IFZvdGVWYWx1
ZTsKKyAgICAgICAgICAgIGlmIChpc051bWJlclNwZWN1bGF0aW9uKGxlZnQpICYmIGlzTnVtYmVy
U3BlY3VsYXRpb24ocmlnaHQpCisgICAgICAgICAgICAgICAgJiYgIShOb2RlOjpzaG91bGRTcGVj
dWxhdGVJbnRlZ2VyRm9yQXJpdGhtZXRpYyhub2RlLT5jaGlsZDEoKS5ub2RlKCksIG5vZGUtPmNo
aWxkMigpLm5vZGUoKSkKKyAgICAgICAgICAgICAgICAgICAgICYmIG5vZGUuY2FuU3BlY3VsYXRl
SW50ZWdlcigpKSkKKyAgICAgICAgICAgICAgICBiYWxsb3QgPSBWb3RlRG91YmxlOworICAgICAg
ICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGJhbGxvdCA9IFZvdGVWYWx1ZTsKICAgICAgICAg
ICAgICAgICAKLSAgICAgICAgICAgICAgICBtX2dyYXBoLnZvdGUobm9kZS5jaGlsZDEoKSwgYmFs
bG90KTsKLSAgICAgICAgICAgICAgICBtX2dyYXBoLnZvdGUobm9kZS5jaGlsZDIoKSwgYmFsbG90
KTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1f
Z3JhcGgudm90ZU5vZGUobm9kZS0+Y2hpbGQxKCksIGJhbGxvdCk7CisgICAgICAgICAgICBtX2dy
YXBoLnZvdGVOb2RlKG5vZGUtPmNoaWxkMigpLCBiYWxsb3QpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGNhc2UgQXJpdGhBYnM6
Ci0gICAgICAgICAgICAgICAgRG91YmxlQmFsbG90IGJhbGxvdDsKLSAgICAgICAgICAgICAgICBp
ZiAoIShtX2dyYXBoW25vZGUuY2hpbGQxKCldLnNob3VsZFNwZWN1bGF0ZUludGVnZXJGb3JBcml0
aG1ldGljKCkKLSAgICAgICAgICAgICAgICAgICAgICAmJiBub2RlLmNhblNwZWN1bGF0ZUludGVn
ZXIoKSkpCi0gICAgICAgICAgICAgICAgICAgIGJhbGxvdCA9IFZvdGVEb3VibGU7Ci0gICAgICAg
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBiYWxsb3QgPSBWb3RlVmFsdWU7Cisg
ICAgICAgIGNhc2UgQXJpdGhBYnM6CisgICAgICAgICAgICBEb3VibGVCYWxsb3QgYmFsbG90Owor
ICAgICAgICAgICAgaWYgKCEobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZUludGVnZXJG
b3JBcml0aG1ldGljKCkKKyAgICAgICAgICAgICAgICAgICYmIG5vZGUuY2FuU3BlY3VsYXRlSW50
ZWdlcigpKSkKKyAgICAgICAgICAgICAgICBiYWxsb3QgPSBWb3RlRG91YmxlOworICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgICAgIGJhbGxvdCA9IFZvdGVWYWx1ZTsKICAgICAgICAgICAg
ICAgICAKLSAgICAgICAgICAgICAgICBtX2dyYXBoLnZvdGUobm9kZS5jaGlsZDEoKSwgYmFsbG90
KTsKLSAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIG1fZ3JhcGgudm90ZU5vZGUo
bm9kZS0+Y2hpbGQxKCksIGJhbGxvdCk7CisgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
ICAgICAKLSAgICAgICAgICAgIGNhc2UgQXJpdGhTcXJ0OgotICAgICAgICAgICAgICAgIG1fZ3Jh
cGgudm90ZShub2RlLmNoaWxkMSgpLCBWb3RlRG91YmxlKTsKLSAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBBcml0aFNxcnQ6CisgICAgICAgICAgICBtX2dyYXBoLnZvdGVOb2Rl
KG5vZGUtPmNoaWxkMSgpLCBWb3RlRG91YmxlKTsKKyAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgICAgIAotICAgICAgICAgICAgY2FzZSBTZXRMb2NhbDogewotICAgICAgICAgICAgICAg
IFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24gPSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLnByZWRp
Y3Rpb24oKTsKLSAgICAgICAgICAgICAgICBpZiAoaXNEb3VibGVTcGVjdWxhdGlvbihwcmVkaWN0
aW9uKSkKLSAgICAgICAgICAgICAgICAgICAgbm9kZS52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+dm90
ZShWb3RlRG91YmxlKTsKLSAgICAgICAgICAgICAgICBlbHNlIGlmICghaXNOdW1iZXJTcGVjdWxh
dGlvbihwcmVkaWN0aW9uKSB8fCBpc0ludDMyU3BlY3VsYXRpb24ocHJlZGljdGlvbikpCi0gICAg
ICAgICAgICAgICAgICAgIG5vZGUudmFyaWFibGVBY2Nlc3NEYXRhKCktPnZvdGUoVm90ZVZhbHVl
KTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KKyAgICAgICAgY2FzZSBT
ZXRMb2NhbDogeworICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiA9IG5vZGUt
PmNoaWxkMSgpLT5wcmVkaWN0aW9uKCk7CisgICAgICAgICAgICBpZiAoaXNEb3VibGVTcGVjdWxh
dGlvbihwcmVkaWN0aW9uKSkKKyAgICAgICAgICAgICAgICBub2RlLT52YXJpYWJsZUFjY2Vzc0Rh
dGEoKS0+dm90ZShWb3RlRG91YmxlKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKCFpc051bWJlclNw
ZWN1bGF0aW9uKHByZWRpY3Rpb24pIHx8IGlzSW50MzJTcGVjdWxhdGlvbihwcmVkaWN0aW9uKSkK
KyAgICAgICAgICAgICAgICBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+dm90ZShWb3RlVmFs
dWUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KICAgICAgICAgICAgICAgICAKLSAg
ICAgICAgICAgIGNhc2UgUHV0QnlWYWw6Ci0gICAgICAgICAgICBjYXNlIFB1dEJ5VmFsQWxpYXM6
IHsKLSAgICAgICAgICAgICAgICBFZGdlIGNoaWxkMSA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9k
ZSwgMCk7Ci0gICAgICAgICAgICAgICAgRWRnZSBjaGlsZDIgPSBtX2dyYXBoLnZhckFyZ0NoaWxk
KG5vZGUsIDEpOwotICAgICAgICAgICAgICAgIEVkZ2UgY2hpbGQzID0gbV9ncmFwaC52YXJBcmdD
aGlsZChub2RlLCAyKTsKLSAgICAgICAgICAgICAgICBtX2dyYXBoLnZvdGUoY2hpbGQxLCBWb3Rl
VmFsdWUpOwotICAgICAgICAgICAgICAgIG1fZ3JhcGgudm90ZShjaGlsZDIsIFZvdGVWYWx1ZSk7
Ci0gICAgICAgICAgICAgICAgc3dpdGNoIChub2RlLmFycmF5TW9kZSgpLnR5cGUoKSkgewotICAg
ICAgICAgICAgICAgIGNhc2UgQXJyYXk6OkRvdWJsZToKLSAgICAgICAgICAgICAgICAgICAgbV9n
cmFwaC52b3RlKGNoaWxkMywgVm90ZURvdWJsZSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgu
dm90ZShjaGlsZDMsIFZvdGVWYWx1ZSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgY2FzZSBQdXRCeVZhbDoKKyAgICAgICAgY2FzZSBQdXRC
eVZhbEFsaWFzOiB7CisgICAgICAgICAgICBFZGdlIGNoaWxkMSA9IG1fZ3JhcGgudmFyQXJnQ2hp
bGQobm9kZSwgMCk7CisgICAgICAgICAgICBFZGdlIGNoaWxkMiA9IG1fZ3JhcGgudmFyQXJnQ2hp
bGQobm9kZSwgMSk7CisgICAgICAgICAgICBFZGdlIGNoaWxkMyA9IG1fZ3JhcGgudmFyQXJnQ2hp
bGQobm9kZSwgMik7CisgICAgICAgICAgICBtX2dyYXBoLnZvdGVOb2RlKGNoaWxkMSwgVm90ZVZh
bHVlKTsKKyAgICAgICAgICAgIG1fZ3JhcGgudm90ZU5vZGUoY2hpbGQyLCBWb3RlVmFsdWUpOwor
ICAgICAgICAgICAgc3dpdGNoIChub2RlLmFycmF5TW9kZSgpLnR5cGUoKSkgeworICAgICAgICAg
ICAgY2FzZSBBcnJheTo6RG91YmxlOgorICAgICAgICAgICAgICAgIG1fZ3JhcGgudm90ZU5vZGUo
Y2hpbGQzLCBWb3RlRG91YmxlKTsKICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAg
ICAgbV9ncmFwaC52b3RlKG5vZGUsIFZvdGVWYWx1ZSk7CisgICAgICAgICAgICAgICAgbV9ncmFw
aC52b3RlTm9kZShjaGlsZDMsIFZvdGVWYWx1ZSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAg
CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBtX2dyYXBoLnZvdGVDaGlsZHJlbihub2Rl
LCBWb3RlVmFsdWUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAg
CisgICAgdm9pZCBkb1JvdW5kT2ZEb3VibGVWb3RpbmcoKQorICAgIHsKKyNpZiBERkdfRU5BQkxF
KERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCisgICAgICAgIGRhdGFMb2dGKCJWb3Rpbmcgb24g
ZG91YmxlIHVzZXMgb2YgbG9jYWxzIFsldV1cbiIsIG1fY291bnQpOworI2VuZGlmCisgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2dyYXBoLm1fdmFyaWFibGVBY2Nlc3NEYXRhLnNp
emUoKTsgKytpKQorICAgICAgICAgICAgbV9ncmFwaC5tX3ZhcmlhYmxlQWNjZXNzRGF0YVtpXS5m
aW5kKCktPmNsZWFyVm90ZXMoKTsKKyAgICAgICAgZm9yIChCYXNpY0Jsb2NrIGJsb2NrSW5kZXgg
PSAwOyBpIDwgbV9ncmFwaC5tX2Jsb2Nrcy5zaXplKCk7ICsrYmxvY2tJbmRleCkgeworICAgICAg
ICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLm1fYmxvY2tzW2Jsb2NrSW5kZXhdLmdl
dCgpOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGJsb2NrLT5zaXplKCk7
ICsraSkgeworICAgICAgICAgICAgICAgIG1fY3VycmVudE5vZGUgPSBibG9jay0+YXQoaSk7Cisg
ICAgICAgICAgICAgICAgZG9Eb3VibGVWb3RpbmcobV9jdXJyZW50Tm9kZSk7CisgICAgICAgICAg
ICB9CiAgICAgICAgIH0KICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fZ3JhcGgu
bV92YXJpYWJsZUFjY2Vzc0RhdGEuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgICAgIFZhcmlhYmxl
QWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhID0gJm1fZ3JhcGgubV92YXJpYWJsZUFjY2Vz
c0RhdGFbaV07CkBAIC0xMDEyLDcgKzEwMzMsNyBAQCBwcml2YXRlOgogICAgICAgICB9CiAgICAg
fQogICAgIAotICAgIE5vZGVJbmRleCBtX2NvbXBpbGVJbmRleDsKKyAgICBOb2RlKiBtX2N1cnJl
bnROb2RlOwogICAgIGJvb2wgbV9jaGFuZ2VkOwogCiAjaWYgREZHX0VOQUJMRShERUJVR19QUk9Q
QUdBVElPTl9WRVJCT1NFKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJ1
Y3R1cmVBYnN0cmFjdFZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlLmgJKHJldmlzaW9uIDE0MDUwNCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RydWN0dXJlQWJzdHJhY3RWYWx1ZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAx
MiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEs
IDIwMTIsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC0zMTQsNiArMzE0LDggQEAgcHVibGljOgogcHJpdmF0ZToK
ICAgICBzdGF0aWMgU3RydWN0dXJlKiB0b3BWYWx1ZSgpIHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nh
c3Q8U3RydWN0dXJlKj4oMSk7IH0KICAgICAKKyAgICAvLyBOQi4gVGhpcyBtdXN0IGhhdmUgYSB0
cml2aWFsIGRlc3RydWN0b3IuCisgICAgCiAgICAgLy8gVGhpcyBjYW4gb25seSByZW1lbWJlciBv
bmUgc3RydWN0dXJlIGF0IGEgdGltZS4KICAgICBTdHJ1Y3R1cmUqIG1fc3RydWN0dXJlOwogfTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RydWN0dXJlQ2hlY2tIb2lzdGlu
Z1BoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0
cnVjdHVyZUNoZWNrSG9pc3RpbmdQaGFzZS5jcHAJKHJldmlzaW9uIDE0MDUwNCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RydWN0dXJlQ2hlY2tIb2lzdGluZ1BoYXNlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNjQsMjMgKzY0LDIyIEBAIHB1YmxpYzoKICAgICAgICAgICAgIGlm
ICghYmxvY2spCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIGluZGV4SW5CbG9jayA9IDA7IGluZGV4SW5CbG9jayA8IGJsb2NrLT5zaXplKCk7ICsr
aW5kZXhJbkJsb2NrKSB7Ci0gICAgICAgICAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRleCA9IGJs
b2NrLT5hdChpbmRleEluQmxvY2spOwotICAgICAgICAgICAgICAgIE5vZGUmIG5vZGUgPSBtX2dy
YXBoW25vZGVJbmRleF07Ci0gICAgICAgICAgICAgICAgaWYgKCFub2RlLnNob3VsZEdlbmVyYXRl
KCkpCisgICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5hdChpbmRleEluQmxvY2sp
OworICAgICAgICAgICAgICAgIGlmICghbm9kZS0+c2hvdWxkR2VuZXJhdGUoKSkKICAgICAgICAg
ICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgc3dpdGNoIChub2RlLm9wKCkp
IHsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKICAgICAgICAgICAgICAg
ICBjYXNlIENoZWNrU3RydWN0dXJlOgogICAgICAgICAgICAgICAgIGNhc2UgU3RydWN0dXJlVHJh
bnNpdGlvbldhdGNocG9pbnQ6IHsKLSAgICAgICAgICAgICAgICAgICAgTm9kZSYgY2hpbGQgPSBt
X2dyYXBoW25vZGUuY2hpbGQxKCldOwotICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGQub3Ao
KSAhPSBHZXRMb2NhbCkKKyAgICAgICAgICAgICAgICAgICAgTm9kZSogY2hpbGQgPSBub2RlLT5j
aGlsZDEoKS5ub2RlKCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChjaGlsZC0+b3AoKSAhPSBH
ZXRMb2NhbCkKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAg
ICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gY2hpbGQudmFyaWFibGVBY2Nlc3NE
YXRhKCk7CisgICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUg
PSBjaGlsZC0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CiAgICAgICAgICAgICAgICAgICAgIHZhcmlh
YmxlLT52b3RlKFZvdGVTdHJ1Y3R1cmVDaGVjayk7CiAgICAgICAgICAgICAgICAgICAgIGlmICh2
YXJpYWJsZS0+aXNDYXB0dXJlZCgpIHx8IHZhcmlhYmxlLT5zdHJ1Y3R1cmVDaGVja0hvaXN0aW5n
RmFpbGVkKCkpCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAg
ICAgICAgaWYgKCFpc0NlbGxTcGVjdWxhdGlvbih2YXJpYWJsZS0+cHJlZGljdGlvbigpKSkKICAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBub3RpY2VT
dHJ1Y3R1cmVDaGVjayh2YXJpYWJsZSwgbm9kZS5zdHJ1Y3R1cmVTZXQoKSk7CisgICAgICAgICAg
ICAgICAgICAgIG5vdGljZVN0cnVjdHVyZUNoZWNrKHZhcmlhYmxlLCBub2RlLT5zdHJ1Y3R1cmVT
ZXQoKSk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgICAgICAgCkBAIC0xMDksMTMgKzEwOCwxMyBAQCBwdWJsaWM6CiAgICAgICAg
ICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGNhc2UgQXJyYXlpZnlUb1N0cnVjdHVyZToK
ICAgICAgICAgICAgICAgICBjYXNlIEFycmF5aWZ5OgotICAgICAgICAgICAgICAgICAgICBpZiAo
bm9kZS5hcnJheU1vZGUoKS5jb252ZXJzaW9uKCkgPT0gQXJyYXk6OlJhZ2VDb252ZXJ0KSB7Cisg
ICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS5jb252ZXJzaW9uKCkgPT0g
QXJyYXk6OlJhZ2VDb252ZXJ0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBSYWdlIGNv
bnZlcnNpb24gY2hhbmdlcyBzdHJ1Y3R1cmVzLiBXZSBzaG91bGQgYXZvaWQgdHlpbmcgdG8gZG8K
ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFueSBraW5kIG9mIGhvaXN0aW5nIHdoZW4gcmFn
ZSBjb252ZXJzaW9uIGlzIGluIHBsYXkuCi0gICAgICAgICAgICAgICAgICAgICAgICBOb2RlJiBj
aGlsZCA9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV07Ci0gICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoY2hpbGQub3AoKSAhPSBHZXRMb2NhbCkKKyAgICAgICAgICAgICAgICAgICAgICAgIE5vZGUq
IGNoaWxkID0gbm9kZS0+Y2hpbGQxKCkubm9kZXgoKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChjaGlsZC0+b3AoKSAhPSBHZXRMb2NhbCkKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFy
aWFibGUgPSBjaGlsZC52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBjaGlsZC0+dmFyaWFibGVBY2Nlc3NE
YXRhKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS0+dm90ZShWb3RlT3RoZXIp
OwogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhcmlhYmxlLT5pc0NhcHR1cmVkKCkgfHwg
dmFyaWFibGUtPnN0cnVjdHVyZUNoZWNrSG9pc3RpbmdGYWlsZWQoKSkKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBicmVhazsKQEAgLTEzMCwzMCArMTI5LDI5IEBAIHB1YmxpYzoKICAgICAg
ICAgICAgICAgICAgICAgLy8ga2luZCBvZiBDaGVja1N0cnVjdHVyZSwgdGhlbiB3ZSBzaG91bGQg
bm90aWNlIHRoZW0gdG8gZW5zdXJlIHRoYXQKICAgICAgICAgICAgICAgICAgICAgLy8gd2UncmUg
bm90IGhvaXN0aW5nIGEgY2hlY2sgdGhhdCB3b3VsZCBjb250cmF2ZW5lIGNoZWNrcyB0aGF0IGFy
ZQogICAgICAgICAgICAgICAgICAgICAvLyBhbHJlYWR5IGJlaW5nIHBlcmZvcm1lZC4KLSAgICAg
ICAgICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG5vZGUudmFyaWFi
bGVBY2Nlc3NEYXRhKCk7CisgICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSog
dmFyaWFibGUgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKICAgICAgICAgICAgICAgICAg
ICAgaWYgKHZhcmlhYmxlLT5pc0NhcHR1cmVkKCkgfHwgdmFyaWFibGUtPnN0cnVjdHVyZUNoZWNr
SG9pc3RpbmdGYWlsZWQoKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgICAgICAgICBpZiAoIWlzQ2VsbFNwZWN1bGF0aW9uKHZhcmlhYmxlLT5wcmVkaWN0aW9u
KCkpKQogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAg
IE5vZGVJbmRleCBzb3VyY2UgPSBub2RlLmNoaWxkMSgpLmluZGV4KCk7CisgICAgICAgICAgICAg
ICAgICAgIE5vZGUqIHNvdXJjZSA9IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKICAgICAgICAgICAg
ICAgICAgICAgZm9yICh1bnNpZ25lZCBzdWJJbmRleEluQmxvY2sgPSAwOyBzdWJJbmRleEluQmxv
Y2sgPCBibG9jay0+c2l6ZSgpOyArK3N1YkluZGV4SW5CbG9jaykgewotICAgICAgICAgICAgICAg
ICAgICAgICAgTm9kZUluZGV4IHN1Yk5vZGVJbmRleCA9IGJsb2NrLT5hdChzdWJJbmRleEluQmxv
Y2spOwotICAgICAgICAgICAgICAgICAgICAgICAgTm9kZSYgc3ViTm9kZSA9IG1fZ3JhcGhbc3Vi
Tm9kZUluZGV4XTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICghc3ViTm9kZS5zaG91bGRH
ZW5lcmF0ZSgpKQorICAgICAgICAgICAgICAgICAgICAgICAgTm9kZSogc3ViTm9kZSA9IGJsb2Nr
LT5hdChzdWJJbmRleEluQmxvY2spOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFzdWJO
b2RlLT5zaG91bGRHZW5lcmF0ZSgpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChzdWJOb2RlLm9wKCkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoc3ViTm9kZS0+b3AoKSkgewogICAgICAgICAg
ICAgICAgICAgICAgICAgY2FzZSBDaGVja1N0cnVjdHVyZTogewotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGlmIChzdWJOb2RlLmNoaWxkMSgpLmluZGV4KCkgIT0gc291cmNlKQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChzdWJOb2RlLT5jaGlsZDEoKSAhPSBzb3VyY2UpCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vdGljZVN0cnVjdHVyZUNo
ZWNrKHZhcmlhYmxlLCBzdWJOb2RlLnN0cnVjdHVyZVNldCgpKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBub3RpY2VTdHJ1Y3R1cmVDaGVjayh2YXJpYWJsZSwgc3ViTm9kZS0+c3RydWN0
dXJlU2V0KCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBTdHJ1Y3R1cmVU
cmFuc2l0aW9uV2F0Y2hwb2ludDogewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChz
dWJOb2RlLmNoaWxkMSgpLmluZGV4KCkgIT0gc291cmNlKQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChzdWJOb2RlLT5jaGlsZDEoKSAhPSBzb3VyY2UpCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG5vdGljZVN0cnVjdHVyZUNoZWNrKHZhcmlhYmxlLCBz
dWJOb2RlLnN0cnVjdHVyZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3RpY2VT
dHJ1Y3R1cmVDaGVjayh2YXJpYWJsZSwgc3ViTm9kZS0+c3RydWN0dXJlKCkpOwogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKQEAgLTE2MSwxNCArMTU5LDE0IEBAIHB1Ymxp
YzoKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC52b3RlKG5vZGUs
IFZvdGVPdGhlcik7CisgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgudm90ZUNoaWxkcmVuKG5v
ZGUsIFZvdGVPdGhlcik7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICBjYXNlIEdhcmJhZ2VWYWx1ZToKICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGRlZmF1
bHQ6Ci0gICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgudm90ZShub2RlLCBWb3RlT3RoZXIpOwor
ICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLnZvdGVDaGlsZHJlbihub2RlLCBWb3RlT3RoZXIp
OwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICB9CkBAIC0yMDksMTAgKzIwNywxMCBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgY29u
dGludWU7CiAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fZ3JhcGgubV9tdXN0
SGFuZGxlVmFsdWVzLnNpemUoKTsgKytpKSB7CiAgICAgICAgICAgICAgICAgaW50IG9wZXJhbmQg
PSBtX2dyYXBoLm1fbXVzdEhhbmRsZVZhbHVlcy5vcGVyYW5kRm9ySW5kZXgoaSk7Ci0gICAgICAg
ICAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRleCA9IGJsb2NrLT52YXJpYWJsZXNBdEhlYWQub3Bl
cmFuZChvcGVyYW5kKTsKLSAgICAgICAgICAgICAgICBpZiAobm9kZUluZGV4ID09IE5vTm9kZSkK
KyAgICAgICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5vcGVy
YW5kKG9wZXJhbmQpOworICAgICAgICAgICAgICAgIGlmICghbm9kZSkKICAgICAgICAgICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJp
YWJsZSA9IG1fZ3JhcGhbbm9kZUluZGV4XS52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKKyAgICAgICAg
ICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbm9kZS0+dmFyaWFibGVBY2Nl
c3NEYXRhKCk7CiAgICAgICAgICAgICAgICAgSGFzaE1hcDxWYXJpYWJsZUFjY2Vzc0RhdGEqLCBD
aGVja0RhdGE+OjppdGVyYXRvciBpdGVyID0gbV9tYXAuZmluZCh2YXJpYWJsZSk7CiAgICAgICAg
ICAgICAgICAgaWYgKGl0ZXIgPT0gbV9tYXAuZW5kKCkpCiAgICAgICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwpAQCAtMjY1LDQ4ICsyNjMsNDcgQEAgcHVibGljOgogICAgICAgICAgICAgaWYgKCFi
bG9jaykKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgaW5kZXhJbkJsb2NrID0gMDsgaW5kZXhJbkJsb2NrIDwgYmxvY2stPnNpemUoKTsgKytpbmRl
eEluQmxvY2spIHsKLSAgICAgICAgICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4ID0gYmxvY2st
PmF0KGluZGV4SW5CbG9jayk7Ci0gICAgICAgICAgICAgICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhb
bm9kZUluZGV4XTsKKyAgICAgICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPmF0KGluZGV4
SW5CbG9jayk7CiAgICAgICAgICAgICAgICAgLy8gQmUgY2FyZWZ1bCBub3QgdG8gdXNlICdub2Rl
JyBhZnRlciBhcHBlbmRpbmcgdG8gdGhlIGdyYXBoLiBJbiB0aG9zZSBzd2l0Y2gKICAgICAgICAg
ICAgICAgICAvLyBjYXNlcyB3aGVyZSB3ZSBuZWVkIHRvIGFwcGVuZCwgd2UgZmlyc3QgY2FyZWZ1
bGx5IGV4dHJhY3QgZXZlcnl0aGluZyB3ZSBuZWVkCiAgICAgICAgICAgICAgICAgLy8gZnJvbSB0
aGUgbm9kZSwgYmVmb3JlIGRvaW5nIGFueSBhcHBlbmRpbmcuCi0gICAgICAgICAgICAgICAgaWYg
KCFub2RlLnNob3VsZEdlbmVyYXRlKCkpCisgICAgICAgICAgICAgICAgaWYgKCFub2RlLT5zaG91
bGRHZW5lcmF0ZSgpKQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAg
ICAgICBzd2l0Y2ggKG5vZGUub3AoKSkgeworICAgICAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+
b3AoKSkgewogICAgICAgICAgICAgICAgIGNhc2UgU2V0QXJndW1lbnQ6IHsKICAgICAgICAgICAg
ICAgICAgICAgQVNTRVJUKCFibG9ja0luZGV4KTsKICAgICAgICAgICAgICAgICAgICAgLy8gSW5z
ZXJ0IGEgR2V0TG9jYWwgYW5kIGEgQ2hlY2tTdHJ1Y3R1cmUgaW1tZWRpYXRlbHkgZm9sbG93aW5n
IHRoaXMKICAgICAgICAgICAgICAgICAgICAgLy8gU2V0QXJndW1lbnQsIGlmIHRoZSB2YXJpYWJs
ZSB3YXMgYSBjYW5kaWRhdGUgZm9yIHN0cnVjdHVyZSBob2lzdGluZy4KICAgICAgICAgICAgICAg
ICAgICAgLy8gSWYgdGhlIGJhc2ljIGJsb2NrIHByZXZpb3VzbHkgb25seSBoYWQgdGhlIFNldEFy
Z3VtZW50IGFzIGl0cwogICAgICAgICAgICAgICAgICAgICAvLyB2YXJpYWJsZS1hdC10YWlsLCB0
aGVuIHJlcGxhY2UgaXQgd2l0aCB0aGlzIEdldExvY2FsLgotICAgICAgICAgICAgICAgICAgICBW
YXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbm9kZS52YXJpYWJsZUFjY2Vzc0RhdGEoKTsK
KyAgICAgICAgICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG5vZGUt
PnZhcmlhYmxlQWNjZXNzRGF0YSgpOwogICAgICAgICAgICAgICAgICAgICBIYXNoTWFwPFZhcmlh
YmxlQWNjZXNzRGF0YSosIENoZWNrRGF0YT46Oml0ZXJhdG9yIGl0ZXIgPSBtX21hcC5maW5kKHZh
cmlhYmxlKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZXIgPT0gbV9tYXAuZW5kKCkpCiAg
ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgaWYgKCFp
dGVyLT52YWx1ZS5tX3N0cnVjdHVyZSkKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgQ29kZU9yaWdpbiBjb2Rl
T3JpZ2luID0gbm9kZS5jb2RlT3JpZ2luOworICAgICAgICAgICAgICAgICAgICBDb2RlT3JpZ2lu
IGNvZGVPcmlnaW4gPSBub2RlLT5jb2RlT3JpZ2luOwogICAgICAgICAgICAgICAgICAgICAKLSAg
ICAgICAgICAgICAgICAgICAgTm9kZUluZGV4IGdldExvY2FsSW5kZXggPSBpbnNlcnRpb25TZXQu
aW5zZXJ0Tm9kZSgKKyAgICAgICAgICAgICAgICAgICAgTm9kZSogZ2V0TG9jYWwgPSBpbnNlcnRp
b25TZXQuaW5zZXJ0Tm9kZSgKICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4SW5CbG9jayAr
IDEsIERvbnRSZWZDaGlsZHJlbiwgRG9udFJlZk5vZGUsIHZhcmlhYmxlLT5wcmVkaWN0aW9uKCks
Ci0gICAgICAgICAgICAgICAgICAgICAgICBHZXRMb2NhbCwgY29kZU9yaWdpbiwgT3BJbmZvKHZh
cmlhYmxlKSwgbm9kZUluZGV4KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIEdldExvY2FsLCBj
b2RlT3JpZ2luLCBPcEluZm8odmFyaWFibGUpLCBub2RlKTsKICAgICAgICAgICAgICAgICAgICAg
aW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCiAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleElu
QmxvY2sgKyAxLCBSZWZDaGlsZHJlbiwgRG9udFJlZk5vZGUsIFNwZWNOb25lLCBDaGVja1N0cnVj
dHVyZSwKICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVPcmlnaW4sIE9wSW5mbyhtX2dyYXBo
LmFkZFN0cnVjdHVyZVNldChpdGVyLT52YWx1ZS5tX3N0cnVjdHVyZSkpLAogICAgICAgICAgICAg
ICAgICAgICAgICAgZ2V0TG9jYWxJbmRleCk7CiAKLSAgICAgICAgICAgICAgICAgICAgaWYgKGJs
b2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkgPT0gbm9kZUlu
ZGV4KQotICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVy
YW5kKHZhcmlhYmxlLT5sb2NhbCgpKSA9IGdldExvY2FsSW5kZXg7CisgICAgICAgICAgICAgICAg
ICAgIGlmIChibG9jay0+dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkp
ID09IG5vZGUpCisgICAgICAgICAgICAgICAgICAgICAgICBibG9jay0+dmFyaWFibGVzQXRUYWls
Lm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpID0gZ2V0TG9jYWw7CiAgICAgICAgICAgICAgICAg
ICAgIAotICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLnN1YnN0aXR1dGVHZXRMb2NhbCgqYmxv
Y2ssIGluZGV4SW5CbG9jaywgdmFyaWFibGUsIGdldExvY2FsSW5kZXgpOworICAgICAgICAgICAg
ICAgICAgICBtX2dyYXBoLnN1YnN0aXR1dGVHZXRMb2NhbCgqYmxvY2ssIGluZGV4SW5CbG9jaywg
dmFyaWFibGUsIGdldExvY2FsKTsKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAg
ICAgICAgIGNoYW5nZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGNhc2Ug
U2V0TG9jYWw6IHsKLSAgICAgICAgICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJp
YWJsZSA9IG5vZGUudmFyaWFibGVBY2Nlc3NEYXRhKCk7CisgICAgICAgICAgICAgICAgICAgIFZh
cmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsK
ICAgICAgICAgICAgICAgICAgICAgSGFzaE1hcDxWYXJpYWJsZUFjY2Vzc0RhdGEqLCBDaGVja0Rh
dGE+OjppdGVyYXRvciBpdGVyID0gbV9tYXAuZmluZCh2YXJpYWJsZSk7CiAgICAgICAgICAgICAg
ICAgICAgIGlmIChpdGVyID09IG1fbWFwLmVuZCgpKQogICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CkBAIC0zMTcsOCArMzE0LDggQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICAv
LyBiZSBkcm9wcGVkIGludG8gdGhpcyBieXRlY29kZSB2YXJpYWJsZSBpZiB0aGUgQ2hlY2tTdHJ1
Y3R1cmUgZGVjaWRlcwogICAgICAgICAgICAgICAgICAgICAvLyB0byBleGl0LgogICAgICAgICAg
ICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2luID0g
bm9kZS5jb2RlT3JpZ2luOwotICAgICAgICAgICAgICAgICAgICBOb2RlSW5kZXggY2hpbGQxID0g
bm9kZS5jaGlsZDEoKS5pbmRleCgpOworICAgICAgICAgICAgICAgICAgICBDb2RlT3JpZ2luIGNv
ZGVPcmlnaW4gPSBub2RlLT5jb2RlT3JpZ2luOworICAgICAgICAgICAgICAgICAgICBOb2RlKiBj
aGlsZDEgPSBub2RlLT5jaGlsZDEoKS5ub2RlKCk7CiAgICAgICAgICAgICAgICAgICAgIAogICAg
ICAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKICAgICAgICAgICAgICAg
ICAgICAgICAgIGluZGV4SW5CbG9jaywgRG9udFJlZkNoaWxkcmVuLCBEb250UmVmTm9kZSwgU3Bl
Y05vbmUsIFNldExvY2FsLCBjb2RlT3JpZ2luLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdWYWxpZGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdWYWxpZGF0ZS5jcHAJKHJldmlzaW9uIDE0MDUwNCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHVmFsaWRhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MCw0MCArODAs
NDMgQEAgcHVibGljOgogICAgICAgICAvLyBWYWxpZGF0ZSB0aGF0IGFsbCBsb2NhbCB2YXJpYWJs
ZXMgYXQgdGhlIGhlYWQgb2YgdGhlIHJvb3QgYmxvY2sgYXJlIGRlYWQuCiAgICAgICAgIEJhc2lj
QmxvY2sqIHJvb3QgPSBtX2dyYXBoLm1fYmxvY2tzWzBdLmdldCgpOwogICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgcm9vdC0+dmFyaWFibGVzQXRIZWFkLm51bWJlck9mTG9jYWxzKCk7
ICsraSkKLSAgICAgICAgICAgIFZfRVFVQUwoKHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4o
aSksIDApLCBOb05vZGUsIHJvb3QtPnZhcmlhYmxlc0F0SGVhZC5sb2NhbChpKSk7CisgICAgICAg
ICAgICBWX0VRVUFMKChzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KGkpLCAwKSwgMCwgcm9v
dC0+dmFyaWFibGVzQXRIZWFkLmxvY2FsKGkpKTsKICAgICAgICAgCiAgICAgICAgIC8vIFZhbGlk
YXRlIHJlZiBjb3VudHMgYW5kIHVzZXMuCi0gICAgICAgIFZlY3Rvcjx1bnNpZ25lZD4gbXlSZWZD
b3VudHM7Ci0gICAgICAgIG15UmVmQ291bnRzLmZpbGwoMCwgbV9ncmFwaC5zaXplKCkpOwotICAg
ICAgICBCaXRWZWN0b3IgYWNjZXB0YWJsZU5vZGVJbmRpY2VzOworICAgICAgICBIYXNoTWFwPE5v
ZGUqLCB1bnNpZ25lZD4gbXlSZWZDb3VudHM7CiAgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9j
a0luZGV4ID0gMDsgYmxvY2tJbmRleCA8IG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgpOyArK2Jsb2Nr
SW5kZXgpIHsKICAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5tX2Jsb2Nr
c1tibG9ja0luZGV4XS5nZXQoKTsKLSAgICAgICAgICAgIGlmICghYmxvY2spCisgICAgICAgICAg
ICBpZiAoIWJsb2NrIHx8ICFibG9jay0+aXNSZWFjaGFibGUpCiAgICAgICAgICAgICAgICAgY29u
dGludWU7Ci0gICAgICAgICAgICBpZiAoIWJsb2NrLT5pc1JlYWNoYWJsZSkKKyAgICAgICAgICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYmxvY2stPm51bU5vZGVzKCk7ICsraSkKKyAgICAgICAg
ICAgICAgICBteVJlZkNvdW50cy5hZGQoYmxvY2stPm5vZGUoaSksIDApOworICAgICAgICB9Cisg
ICAgICAgIEhhc2hTZXQ8Tm9kZSo+IGFjY2VwdGFibGVOb2RlczsKKyAgICAgICAgZm9yIChCbG9j
a0luZGV4IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9ncmFwaC5tX2Jsb2Nrcy5zaXpl
KCk7ICsrYmxvY2tJbmRleCkgeworICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dy
YXBoLm1fYmxvY2tzW2Jsb2NrSW5kZXhdLmdldCgpOworICAgICAgICAgICAgaWYgKCFibG9jayB8
fCAhYmxvY2stPmlzUmVhY2hhYmxlKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAg
ICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBibG9jay0+bnVtTm9kZXMoKTsgKytpKSB7Ci0g
ICAgICAgICAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRleCA9IGJsb2NrLT5ub2RlSW5kZXgoaSk7
Ci0gICAgICAgICAgICAgICAgYWNjZXB0YWJsZU5vZGVJbmRpY2VzLnNldChub2RlSW5kZXgpOwot
ICAgICAgICAgICAgICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW25vZGVJbmRleF07Ci0gICAgICAg
ICAgICAgICAgaWYgKCFub2RlLnNob3VsZEdlbmVyYXRlKCkpCisgICAgICAgICAgICAgICAgTm9k
ZSogbm9kZSA9IGJsb2NrLT5ub2RlKGkpOworICAgICAgICAgICAgICAgIGFjY2VwdGFibGVOb2Rl
cy5hZGQobm9kZSk7CisgICAgICAgICAgICAgICAgaWYgKCFub2RlLT5zaG91bGRHZW5lcmF0ZSgp
KQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIGogPSAwOyBqIDwgbV9ncmFwaC5udW1DaGlsZHJlbihub2RlKTsgKytqKSB7CiAgICAg
ICAgICAgICAgICAgICAgIEVkZ2UgZWRnZSA9IG1fZ3JhcGguY2hpbGQobm9kZSwgaik7CiAgICAg
ICAgICAgICAgICAgICAgIGlmICghZWRnZSkKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwogICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgbXlSZWZDb3Vu
dHNbZWRnZS5pbmRleCgpXSsrOworICAgICAgICAgICAgICAgICAgICBteVJlZkNvdW50cy5maW5k
KGVkZ2Uubm9kZSgpKS0+dmFsdWUrKzsKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAg
ICAgICAgICAgIC8vIFVubGVzcyBJJ20gYSBGbHVzaCwgUGhhbnRvbSwgR2V0TG9jYWwsIG9yIFBo
aSwgbXkgY2hpbGRyZW4gc2hvdWxkIGhhc1Jlc3VsdCgpLgotICAgICAgICAgICAgICAgICAgICBz
d2l0Y2ggKG5vZGUub3AoKSkgeworICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9w
KCkpIHsKICAgICAgICAgICAgICAgICAgICAgY2FzZSBGbHVzaDoKICAgICAgICAgICAgICAgICAg
ICAgY2FzZSBQaGFudG9tOgogICAgICAgICAgICAgICAgICAgICBjYXNlIEdldExvY2FsOgogICAg
ICAgICAgICAgICAgICAgICBjYXNlIFBoaToKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICAgICAg
VkFMSURBVEUoKG5vZGVJbmRleCwgZWRnZSksIG1fZ3JhcGhbZWRnZV0uaGFzUmVzdWx0KCkpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKG5vZGUsIGVkZ2UpLCBlZGdlLT5oYXNS
ZXN1bHQoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgIH0KQEAgLTEyMSw1NCArMTI0LDUwIEBAIHB1YmxpYzoK
ICAgICAgICAgfQogICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2Nr
SW5kZXggPCBtX2dyYXBoLm1fYmxvY2tzLnNpemUoKTsgKytibG9ja0luZGV4KSB7CiAgICAgICAg
ICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGgubV9ibG9ja3NbYmxvY2tJbmRleF0uZ2V0
KCk7Ci0gICAgICAgICAgICBpZiAoIWJsb2NrKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwot
ICAgICAgICAgICAgaWYgKCFibG9jay0+aXNSZWFjaGFibGUpCisgICAgICAgICAgICBpZiAoIWJs
b2NrIHx8ICFibG9jay0+aXNSZWFjaGFibGUpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAg
ICAgICAgICAgICAKLSAgICAgICAgICAgIEJpdFZlY3RvciBwaGlzSW5UaGlzQmxvY2s7Ci0gICAg
ICAgICAgICBCaXRWZWN0b3Igbm9kZXNJblRoaXNCbG9jazsKKyAgICAgICAgICAgIEhhc2hTZXQ8
Tm9kZSo+IHBoaXNJblRoaXNCbG9jazsKKyAgICAgICAgICAgIEhhc2hTZXQ8Tm9kZSo+IG5vZGVz
SW5UaGlzQmxvY2s7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgYmxvY2stPm51bU5vZGVzKCk7ICsraSkgewotICAgICAgICAgICAgICAgIE5vZGVJbmRl
eCBub2RlSW5kZXggPSBibG9jay0+bm9kZUluZGV4KGkpOwotICAgICAgICAgICAgICAgIE5vZGUm
IG5vZGUgPSBtX2dyYXBoW25vZGVJbmRleF07Ci0gICAgICAgICAgICAgICAgbm9kZXNJblRoaXNC
bG9jay5zZXQobm9kZUluZGV4KTsKKyAgICAgICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2st
Pm5vZGUoaSk7CisgICAgICAgICAgICAgICAgbm9kZXNJblRoaXNCbG9jay5hZGQobm9kZSk7CiAg
ICAgICAgICAgICAgICAgaWYgKGJsb2NrLT5pc1BoaUluZGV4KGkpKQotICAgICAgICAgICAgICAg
ICAgICBwaGlzSW5UaGlzQmxvY2suc2V0KG5vZGVJbmRleCk7Ci0gICAgICAgICAgICAgICAgVl9F
UVVBTCgobm9kZUluZGV4KSwgbXlSZWZDb3VudHNbbm9kZUluZGV4XSwgbm9kZS5hZGp1c3RlZFJl
ZkNvdW50KCkpOworICAgICAgICAgICAgICAgICAgICBwaGlzSW5UaGlzQmxvY2suYWRkKG5vZGUp
OworICAgICAgICAgICAgICAgIFZfRVFVQUwoKG5vZGUpLCBteVJlZkNvdW50cy5nZXQobm9kZUlu
ZGV4KSwgbm9kZS5hZGp1c3RlZFJlZkNvdW50KCkpOwogICAgICAgICAgICAgICAgIGZvciAodW5z
aWduZWQgaiA9IDA7IGogPCBtX2dyYXBoLm51bUNoaWxkcmVuKG5vZGUpOyArK2opIHsKICAgICAg
ICAgICAgICAgICAgICAgRWRnZSBlZGdlID0gbV9ncmFwaC5jaGlsZChub2RlLCBqKTsKICAgICAg
ICAgICAgICAgICAgICAgaWYgKCFlZGdlKQogICAgICAgICAgICAgICAgICAgICAgICAgY29udGlu
dWU7Ci0gICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChub2RlSW5kZXgsIGVkZ2UpLCBhY2Nl
cHRhYmxlTm9kZUluZGljZXMuZ2V0KGVkZ2UuaW5kZXgoKSkpOworICAgICAgICAgICAgICAgICAg
ICBWQUxJREFURSgobm9kZSwgZWRnZSksIGFjY2VwdGFibGVOb2RlSW5kaWNlcy5jb250YWlucyhl
ZGdlLm5vZGUoKSkpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIAogICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBibG9jay0+cGhpcy5zaXpl
KCk7ICsraSkgewotICAgICAgICAgICAgICAgIE5vZGVJbmRleCBub2RlSW5kZXggPSBibG9jay0+
cGhpc1tpXTsKLSAgICAgICAgICAgICAgICBOb2RlJiBub2RlID0gbV9ncmFwaFtub2RlSW5kZXhd
OwotICAgICAgICAgICAgICAgIEFTU0VSVChwaGlzSW5UaGlzQmxvY2suZ2V0KG5vZGVJbmRleCkp
OwotICAgICAgICAgICAgICAgIFZBTElEQVRFKChub2RlSW5kZXgpLCBub2RlLm9wKCkgPT0gUGhp
KTsKLSAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgbG9jYWwgPSBub2RlLmxvY2FsKCk7
CisgICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5waGlzW2ldOworICAgICAgICAg
ICAgICAgIEFTU0VSVChwaGlzSW5UaGlzQmxvY2suY29udGFpbnMobm9kZSkpOworICAgICAgICAg
ICAgICAgIFZBTElEQVRFKChub2RlKSwgbm9kZS0+b3AoKSA9PSBQaGkpOworICAgICAgICAgICAg
ICAgIFZpcnR1YWxSZWdpc3RlciBsb2NhbCA9IG5vZGUtPmxvY2FsKCk7CiAgICAgICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBqID0gMDsgaiA8IG1fZ3JhcGgubnVtQ2hpbGRyZW4obm9kZSk7ICsr
aikgewogICAgICAgICAgICAgICAgICAgICBFZGdlIGVkZ2UgPSBtX2dyYXBoLmNoaWxkKG5vZGUs
IGopOwogICAgICAgICAgICAgICAgICAgICBpZiAoIWVkZ2UpCiAgICAgICAgICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAg
IFZBTElEQVRFKChub2RlSW5kZXgsIGVkZ2UpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBtX2dyYXBoW2VkZ2VdLm9wKCkgPT0gU2V0TG9jYWwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfHwgbV9ncmFwaFtlZGdlXS5vcCgpID09IFNldEFyZ3VtZW50Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHx8IG1fZ3JhcGhbZWRnZV0ub3AoKSA9PSBGbHVzaAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB8fCBtX2dyYXBoW2VkZ2VdLm9wKCkgPT0gUGhpKTsKKyAgICAg
ICAgICAgICAgICAgICAgVkFMSURBVEUoKG5vZGUsIGVkZ2UpLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBlZGdlLT5vcCgpID09IFNldExvY2FsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHx8IGVkZ2UtPm9wKCkgPT0gU2V0QXJndW1lbnQKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfHwgZWRnZS0+b3AoKSA9PSBGbHVzaAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB8fCBlZGdlLT5vcCgpID09IFBoaSk7CiAgICAgICAgICAgICAgICAgICAgIAotICAgICAg
ICAgICAgICAgICAgICBpZiAocGhpc0luVGhpc0Jsb2NrLmdldChlZGdlLmluZGV4KCkpKQorICAg
ICAgICAgICAgICAgICAgICBpZiAocGhpc0luVGhpc0Jsb2NrLmNvbnRhaW5zKGVkZ2Uubm9kZSgp
KSkKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgICAg
ICAKLSAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGVzSW5UaGlzQmxvY2suZ2V0KGVkZ2UuaW5k
ZXgoKSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChub2RlSW5kZXgsIGVk
Z2UpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaFtlZGdlXS5vcCgp
ID09IFNldExvY2FsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBtX2dyYXBo
W2VkZ2VdLm9wKCkgPT0gU2V0QXJndW1lbnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHx8IG1fZ3JhcGhbZWRnZV0ub3AoKSA9PSBGbHVzaCk7CisgICAgICAgICAgICAgICAgICAg
IGlmIChub2Rlc0luVGhpc0Jsb2NrLmNvbnRhaW5zKGVkZ2Uubm9kZSgpKSkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgVkFMSURBVEUoKG5vZGUsIGVkZ2UpLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZWRnZS0+b3AoKSA9PSBTZXRMb2NhbAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfHwgZWRnZS0+b3AoKSA9PSBTZXRBcmd1bWVudAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfHwgZWRnZS0+b3AoKSA9PSBGbHVzaCk7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAg
ICAgICAgICAgICAgICB9CkBAIC0xODAsMzMgKzE3OSwzMCBAQCBwdWJsaWM6CiAgICAgICAgICAg
ICAgICAgICAgICAgICBCYXNpY0Jsb2NrKiBwcmV2QmxvY2sgPSBtX2dyYXBoLm1fYmxvY2tzW2Js
b2NrLT5tX3ByZWRlY2Vzc29yc1trXV0uZ2V0KCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBW
QUxJREFURSgoQmxvY2ssIGJsb2NrLT5tX3ByZWRlY2Vzc29yc1trXSksIHByZXZCbG9jayk7CiAg
ICAgICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgoQmxvY2ssIGJsb2NrLT5tX3ByZWRlY2Vz
c29yc1trXSksIHByZXZCbG9jay0+aXNSZWFjaGFibGUpOwotICAgICAgICAgICAgICAgICAgICAg
ICAgTm9kZUluZGV4IHByZXZOb2RlSW5kZXggPSBwcmV2QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5v
cGVyYW5kKGxvY2FsKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIE5vZGUqIHByZXZOb2RlID0g
cHJldkJsb2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZChsb2NhbCk7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAvLyBJZiB3ZSBoYXZlIGEgUGhpIHRoYXQgaXMgbm90IHJlZmVycmluZyB0byAq
dGhpcyogYmxvY2sgdGhlbiBhbGwgcHJlZGVjZXNzb3JzCiAgICAgICAgICAgICAgICAgICAgICAg
ICAvLyBtdXN0IGhhdmUgdGhhdCBsb2NhbCBhdmFpbGFibGUuCi0gICAgICAgICAgICAgICAgICAg
ICAgICBWQUxJREFURSgobG9jYWwsIGJsb2NrSW5kZXgsIEJsb2NrLCBibG9jay0+bV9wcmVkZWNl
c3NvcnNba10pLCBwcmV2Tm9kZUluZGV4ICE9IE5vTm9kZSk7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBOb2RlKiBwcmV2Tm9kZSA9ICZtX2dyYXBoW3ByZXZOb2RlSW5kZXhdOwotICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKHByZXZOb2RlLT5vcCgpID09IEdldExvY2FsKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcHJldk5vZGVJbmRleCA9IHByZXZOb2RlLT5jaGlsZDEoKS5p
bmRleCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXZOb2RlID0gJm1fZ3JhcGhb
cHJldk5vZGVJbmRleF07Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBpZiAobm9kZS5zaG91bGRHZW5lcmF0ZSgpKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgVkFMSURBVEUoKGxvY2FsLCBibG9jay0+bV9wcmVkZWNlc3NvcnNba10sIHBy
ZXZOb2RlSW5kZXgpLAorICAgICAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKGxvY2FsLCBi
bG9ja0luZGV4LCBCbG9jaywgYmxvY2stPm1fcHJlZGVjZXNzb3JzW2tdKSwgcHJldk5vZGUpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByZXZOb2RlLT5vcCgpID09IEdldExvY2FsKQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXZOb2RlID0gcHJldk5vZGUtPmNoaWxkMSgp
Lm5vZGUoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5zaG91bGRHZW5lcmF0
ZSgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKGxvY2FsLCBibG9j
ay0+bV9wcmVkZWNlc3NvcnNba10sIHByZXZOb2RlKSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBwcmV2Tm9kZS0+c2hvdWxkR2VuZXJhdGUoKSk7CiAgICAgICAgICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgobG9jYWwsIGJs
b2NrLT5tX3ByZWRlY2Vzc29yc1trXSwgcHJldk5vZGVJbmRleCksCisgICAgICAgICAgICAgICAg
ICAgICAgICBWQUxJREFURSgobG9jYWwsIGJsb2NrLT5tX3ByZWRlY2Vzc29yc1trXSwgcHJldk5v
ZGUpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldk5vZGUtPm9wKCkgPT0g
U2V0TG9jYWwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IHByZXZOb2RlLT5v
cCgpID09IFNldEFyZ3VtZW50CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBw
cmV2Tm9kZS0+b3AoKSA9PSBGbHVzaAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fHwgcHJldk5vZGUtPm9wKCkgPT0gUGhpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChw
cmV2Tm9kZUluZGV4ID09IGVkZ2UuaW5kZXgoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKHByZXZOb2RlID09IGVkZ2Uubm9kZSgpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZm91bmQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgLy8gQXQgdGhp
cyBwb2ludCBpdCBjYW5ub3QgcmVmZXIgaW50byB0aGlzIGJsb2NrLgotICAgICAgICAgICAgICAg
ICAgICAgICAgVkFMSURBVEUoKGxvY2FsLCBibG9jay0+bV9wcmVkZWNlc3NvcnNba10sIHByZXZO
b2RlSW5kZXgpLCAhcHJldkJsb2NrLT5pc0luQmxvY2soZWRnZS5pbmRleCgpKSk7CisgICAgICAg
ICAgICAgICAgICAgICAgICBWQUxJREFURSgobG9jYWwsIGJsb2NrLT5tX3ByZWRlY2Vzc29yc1tr
XSwgcHJldk5vZGUpLCAhcHJldkJsb2NrLT5pc0luQmxvY2soZWRnZS5ub2RlKCkpKTsKICAgICAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAg
ICAgVkFMSURBVEUoKG5vZGVJbmRleCwgZWRnZSksIGZvdW5kKTsKKyAgICAgICAgICAgICAgICAg
ICAgVkFMSURBVEUoKG5vZGUsIGVkZ2UpLCBmb3VuZCk7CiAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgfQogICAgICAgICAgICAgCkBAIC0yMjcsMzQgKzIyMywzMyBAQCBwdWJsaWM6CiAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgYmxvY2stPnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICAgICAgTm9kZUluZGV4IG5v
ZGVJbmRleCA9IGJsb2NrLT5hdChpKTsKLSAgICAgICAgICAgICAgICBOb2RlJiBub2RlID0gbV9n
cmFwaFtub2RlSW5kZXhdOwotICAgICAgICAgICAgICAgIEFTU0VSVChub2Rlc0luVGhpc0Jsb2Nr
LmdldChub2RlSW5kZXgpKTsKLSAgICAgICAgICAgICAgICBWQUxJREFURSgobm9kZUluZGV4KSwg
bm9kZS5vcCgpICE9IFBoaSk7CisgICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5h
dChpKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQobm9kZXNJblRoaXNCbG9jay5jb250YWlucyhu
b2RlKSk7CisgICAgICAgICAgICAgICAgVkFMSURBVEUoKG5vZGUpLCBub2RlLT5vcCgpICE9IFBo
aSk7CiAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gMDsgaiA8IG1fZ3JhcGgubnVt
Q2hpbGRyZW4obm9kZSk7ICsraikgewogICAgICAgICAgICAgICAgICAgICBFZGdlIGVkZ2UgPSBt
X2dyYXBoLmNoaWxkKG5vZGUsIGopOwogICAgICAgICAgICAgICAgICAgICBpZiAoIWVkZ2UpCiAg
ICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICAgICAgVkFM
SURBVEUoKG5vZGVJbmRleCwgZWRnZSksIG5vZGVzSW5UaGlzQmxvY2suZ2V0KG5vZGVJbmRleCkp
OworICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgobm9kZSwgZWRnZSksIG5vZGVzSW5UaGlz
QmxvY2suY29udGFpbnMoZWRnZS5ub2RlKCkpKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYgKCFub2RlLnNob3VsZEdlbmVyYXRlKCkpCisg
ICAgICAgICAgICAgICAgaWYgKCFub2RlLT5zaG91bGRHZW5lcmF0ZSgpKQogICAgICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUub3AoKSkgewor
ICAgICAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewogICAgICAgICAgICAgICAgIGNh
c2UgR2V0TG9jYWw6Ci0gICAgICAgICAgICAgICAgICAgIGlmIChub2RlLnZhcmlhYmxlQWNjZXNz
RGF0YSgpLT5pc0NhcHR1cmVkKCkpCisgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT52YXJp
YWJsZUFjY2Vzc0RhdGEoKS0+aXNDYXB0dXJlZCgpKQogICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChub2RlSW5kZXgsIGJsb2NrSW5k
ZXgpLCBnZXRMb2NhbFBvc2l0aW9ucy5vcGVyYW5kKG5vZGUubG9jYWwoKSkgPT0gbm90U2V0KTsK
LSAgICAgICAgICAgICAgICAgICAgZ2V0TG9jYWxQb3NpdGlvbnMub3BlcmFuZChub2RlLmxvY2Fs
KCkpID0gaTsKKyAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKG5vZGUsIGJsb2NrSW5kZXgp
LCBnZXRMb2NhbFBvc2l0aW9ucy5vcGVyYW5kKG5vZGUtPmxvY2FsKCkpID09IG5vdFNldCk7Cisg
ICAgICAgICAgICAgICAgICAgIGdldExvY2FsUG9zaXRpb25zLm9wZXJhbmQobm9kZS0+bG9jYWwo
KSkgPSBpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICBjYXNl
IFNldExvY2FsOgotICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS52YXJpYWJsZUFjY2Vzc0Rh
dGEoKS0+aXNDYXB0dXJlZCgpKQorICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS0+dmFyaWFi
bGVBY2Nlc3NEYXRhKCktPmlzQ2FwdHVyZWQoKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgICAgICAgICAvLyBPbmx5IHJlY29yZCB0aGUgZmlyc3QgU2V0TG9j
YWwuIFRoZXJlIG1heSBiZSBtdWx0aXBsZSBTZXRMb2NhbHMKICAgICAgICAgICAgICAgICAgICAg
Ly8gYmVjYXVzZSBvZiBmbHVzaGluZy4KLSAgICAgICAgICAgICAgICAgICAgaWYgKHNldExvY2Fs
UG9zaXRpb25zLm9wZXJhbmQobm9kZS5sb2NhbCgpKSAhPSBub3RTZXQpCisgICAgICAgICAgICAg
ICAgICAgIGlmIChzZXRMb2NhbFBvc2l0aW9ucy5vcGVyYW5kKG5vZGUtPmxvY2FsKCkpICE9IG5v
dFNldCkKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAg
ICBzZXRMb2NhbFBvc2l0aW9ucy5vcGVyYW5kKG5vZGUubG9jYWwoKSkgPSBpOworICAgICAgICAg
ICAgICAgICAgICBzZXRMb2NhbFBvc2l0aW9ucy5vcGVyYW5kKG5vZGUtPmxvY2FsKCkpID0gaTsK
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgZGVmYXVsdDoKICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0yOTQsOSArMjg5LDkgQEAgcHJpdmF0ZToKICAg
ICAgICAgICAgIGdldExvY2FsUG9zaXRpb25zLm9wZXJhbmQob3BlcmFuZCkgPCBzZXRMb2NhbFBv
c2l0aW9ucy5vcGVyYW5kKG9wZXJhbmQpKTsKICAgICB9CiAgICAgCi0gICAgdm9pZCByZXBvcnRW
YWxpZGF0aW9uQ29udGV4dChOb2RlSW5kZXggbm9kZUluZGV4KQorICAgIHZvaWQgcmVwb3J0VmFs
aWRhdGlvbkNvbnRleHQoTm9kZSogbm9kZSkKICAgICB7Ci0gICAgICAgIGRhdGFMb2dGKCJAJXUi
LCBub2RlSW5kZXgpOworICAgICAgICBkYXRhTG9nRigiQCV1Iiwgbm9kZS0+aW5kZXgoKSk7CiAg
ICAgfQogICAgIAogICAgIGVudW0gQmxvY2tUYWcgeyBCbG9jayB9OwpAQCAtMzA1LDkgKzMwMCw5
IEBAIHByaXZhdGU6CiAgICAgICAgIGRhdGFMb2dGKCJCbG9jayAjJXUiLCBibG9ja0luZGV4KTsK
ICAgICB9CiAgICAgCi0gICAgdm9pZCByZXBvcnRWYWxpZGF0aW9uQ29udGV4dChOb2RlSW5kZXgg
bm9kZUluZGV4LCBFZGdlIGVkZ2UpCisgICAgdm9pZCByZXBvcnRWYWxpZGF0aW9uQ29udGV4dChO
b2RlKiBub2RlLCBFZGdlIGVkZ2UpCiAgICAgewotICAgICAgICBkYXRhTG9nRigiQCV1IC0+ICVz
QCV1Iiwgbm9kZUluZGV4LCB1c2VLaW5kVG9TdHJpbmcoZWRnZS51c2VLaW5kKCkpLCBlZGdlLmlu
ZGV4KCkpOworICAgICAgICBkYXRhTG9nRigiQCV1IC0+ICVzQCV1Iiwgbm9kZS0+aW5kZXgoKSwg
dXNlS2luZFRvU3RyaW5nKGVkZ2UudXNlS2luZCgpKSwgZWRnZS5pbmRleCgpKTsKICAgICB9CiAg
ICAgCiAgICAgdm9pZCByZXBvcnRWYWxpZGF0aW9uQ29udGV4dChWaXJ0dWFsUmVnaXN0ZXIgbG9j
YWwsIEJsb2NrSW5kZXggYmxvY2tJbmRleCkKQEAgLTMyMiwyNyArMzE3LDI3IEBAIHByaXZhdGU6
CiAgICAgfQogICAgIAogICAgIHZvaWQgcmVwb3J0VmFsaWRhdGlvbkNvbnRleHQoCi0gICAgICAg
IFZpcnR1YWxSZWdpc3RlciBsb2NhbCwgQmxvY2tJbmRleCBzb3VyY2VCbG9ja0luZGV4LCBOb2Rl
SW5kZXggcHJldk5vZGVJbmRleCkKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGxvY2FsLCBCbG9j
a0luZGV4IHNvdXJjZUJsb2NrSW5kZXgsIE5vZGUqIHByZXZOb2RlKQogICAgIHsKLSAgICAgICAg
ZGF0YUxvZ0YoIkAldSBmb3IgciVkIGluIEJsb2NrICMldSIsIHByZXZOb2RlSW5kZXgsIGxvY2Fs
LCBzb3VyY2VCbG9ja0luZGV4KTsKKyAgICAgICAgZGF0YUxvZ0YoIkAldSBmb3IgciVkIGluIEJs
b2NrICMldSIsIHByZXZOb2RlLT5pbmRleCgpLCBsb2NhbCwgc291cmNlQmxvY2tJbmRleCk7CiAg
ICAgfQogICAgIAogICAgIHZvaWQgcmVwb3J0VmFsaWRhdGlvbkNvbnRleHQoCi0gICAgICAgIE5v
ZGVJbmRleCBub2RlSW5kZXgsIEJsb2NrSW5kZXggYmxvY2tJbmRleCkKKyAgICAgICAgTm9kZSog
bm9kZSwgQmxvY2tJbmRleCBibG9ja0luZGV4KQogICAgIHsKLSAgICAgICAgZGF0YUxvZ0YoIkAl
dSBpbiBCbG9jayAjJXUiLCBub2RlSW5kZXgsIGJsb2NrSW5kZXgpOworICAgICAgICBkYXRhTG9n
RigiQCV1IGluIEJsb2NrICMldSIsIG5vZGUtPmluZGV4KCksIGJsb2NrSW5kZXgpOwogICAgIH0K
ICAgICAKICAgICB2b2lkIHJlcG9ydFZhbGlkYXRpb25Db250ZXh0KAotICAgICAgICBOb2RlSW5k
ZXggbm9kZUluZGV4LCBOb2RlSW5kZXggbm9kZUluZGV4MiwgQmxvY2tJbmRleCBibG9ja0luZGV4
KQorICAgICAgICBOb2RlKiBub2RlLCBOb2RlKiBub2RlMiwgQmxvY2tJbmRleCBibG9ja0luZGV4
KQogICAgIHsKLSAgICAgICAgZGF0YUxvZ0YoIkAldSBhbmQgQCV1IGluIEJsb2NrICMldSIsIG5v
ZGVJbmRleCwgbm9kZUluZGV4MiwgYmxvY2tJbmRleCk7CisgICAgICAgIGRhdGFMb2dGKCJAJXUg
YW5kIEAldSBpbiBCbG9jayAjJXUiLCBub2RlLT5pbmRleCgpLCBub2RlMi0+aW5kZXgoKSwgYmxv
Y2tJbmRleCk7CiAgICAgfQogICAgIAogICAgIHZvaWQgcmVwb3J0VmFsaWRhdGlvbkNvbnRleHQo
Ci0gICAgICAgIE5vZGVJbmRleCBub2RlSW5kZXgsIEJsb2NrSW5kZXggYmxvY2tJbmRleCwgTm9k
ZUluZGV4IGV4cGVjdGVkTm9kZUluZGV4LCBFZGdlIGluY29taW5nRWRnZSkKKyAgICAgICAgTm9k
ZSogbm9kZSwgQmxvY2tJbmRleCBibG9ja0luZGV4LCBOb2RlKiBleHBlY3RlZE5vZGUsIEVkZ2Ug
aW5jb21pbmdFZGdlKQogICAgIHsKLSAgICAgICAgZGF0YUxvZ0YoIkAldSBpbiBCbG9jayAjJXUs
IHNlYXJjaGluZyBmb3IgQCV1IGZyb20gQCV1Iiwgbm9kZUluZGV4LCBibG9ja0luZGV4LCBleHBl
Y3RlZE5vZGVJbmRleCwgaW5jb21pbmdFZGdlLmluZGV4KCkpOworICAgICAgICBkYXRhTG9nRigi
QCV1IGluIEJsb2NrICMldSwgc2VhcmNoaW5nIGZvciBAJXUgZnJvbSBAJXUiLCBub2RlLT5pbmRl
eCgpLCBibG9ja0luZGV4LCBleHBlY3RlZE5vZGUtPmluZGV4KCksIGluY29taW5nRWRnZS5pbmRl
eCgpKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBkdW1wRGF0YSh1bnNpZ25lZCB2YWx1ZSkKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmNwcAko
cmV2aXNpb24gMTQwNTA0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9i
YWxEYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIkFy
Z0xpc3QuaCIKICNpbmNsdWRlICJDb2RlQ2FjaGUuaCIKICNpbmNsdWRlICJDb21tb25JZGVudGlm
aWVycy5oIgorI2luY2x1ZGUgIkRGR0xvbmdMaXZlZFN0YXRlLmgiCiAjaW5jbHVkZSAiRGVidWdn
ZXJBY3RpdmF0aW9uLmgiCiAjaW5jbHVkZSAiRnVuY3Rpb25Db25zdHJ1Y3Rvci5oIgogI2luY2x1
ZGUgIkdDQWN0aXZpdHlDYWxsYmFjay5oIgpAQCAtMjUxLDYgKzI1MiwxMSBAQCBKU0dsb2JhbERh
dGE6OkpTR2xvYmFsRGF0YShHbG9iYWxEYXRhVHlwCiAgICAgCiAgICAgaWYgKE9wdGlvbnM6OmVu
YWJsZVByb2ZpbGVyKCkpCiAgICAgICAgIG1fcGVyQnl0ZWNvZGVQcm9maWxlciA9IGFkb3B0UHRy
KG5ldyBQcm9maWxlcjo6RGF0YWJhc2UoKnRoaXMpKTsKKworI2lmIEVOQUJMRShERkdfSklUKQor
ICAgIGlmIChjYW5Vc2VKSVQoKSkKKyAgICAgICAgbV9kZmdTdGF0ZSA9IGFkb3B0UHRyKG5ldyBE
Rkc6OkxvbmdMaXZlZFN0YXRlKCkpOworI2VuZGlmCiB9CiAKIEpTR2xvYmFsRGF0YTo6fkpTR2xv
YmFsRGF0YSgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERh
dGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2Jh
bERhdGEuaAkocmV2aXNpb24gMTQwNTA0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNHbG9iYWxEYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTkxLDYgKzkxLDEyIEBAIG5hbWVz
cGFjZSBKU0MgewogICAgIGNsYXNzIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlOwogICAgIGNs
YXNzIFVubGlua2VkUHJvZ3JhbUNvZGVCbG9jazsKIAorI2lmIEVOQUJMRShERkdfSklUKQorICAg
IG5hbWVzcGFjZSBERkcgeworICAgIGNsYXNzIExvbmdMaXZlZFN0YXRlOworICAgIH0KKyNlbmRp
ZiAvLyBFTkFCTEUoREZHX0pJVCkKKwogICAgIHN0cnVjdCBIYXNoVGFibGU7CiAgICAgc3RydWN0
IEluc3RydWN0aW9uOwogCkBAIC0xODksNiArMTk1LDEwIEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICAvLyBUaGUgaGVhcCBzaG91bGQgYmUganVzdCBhZnRlciBleGVjdXRhYmxlQWxsb2NhdG9y
IGFuZCBiZWZvcmUgb3RoZXIgbWVtYmVycyB0byBlbnN1cmUgdGhhdCBpdCdzCiAgICAgICAgIC8v
IGRlc3RydWN0ZWQgYWZ0ZXIgYWxsIHRoZSBvYmplY3RzIHRoYXQgcmVmZXJlbmNlIGl0LgogICAg
ICAgICBIZWFwIGhlYXA7CisgICAgICAgIAorI2lmIEVOQUJMRShERkdfSklUKQorICAgICAgICBP
d25QdHI8REZHOjpMb25nTGl2ZWRTdGF0ZT4gbV9kZmdTdGF0ZTsKKyNlbmRpZiAvLyBFTkFCTEUo
REZHX0pJVCkKIAogICAgICAgICBHbG9iYWxEYXRhVHlwZSBnbG9iYWxEYXRhVHlwZTsKICAgICAg
ICAgQ2xpZW50RGF0YSogY2xpZW50RGF0YTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>184276</attachid>
            <date>2013-01-23 12:10:04 -0800</date>
            <delta_ts>2013-01-23 17:01:53 -0800</delta_ts>
            <desc>work in progress</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>444246</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmNw
cAkocmV2aXNpb24gMTQwNTA0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0
cmFjdFN0YXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTEsIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDExLCAyMDEyLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtODcsMjEgKzg3LDIxIEBA
IHZvaWQgQWJzdHJhY3RTdGF0ZTo6aW5pdGlhbGl6ZShHcmFwaCYgZ3IKICAgICByb290LT5jZmFI
YXNWaXNpdGVkID0gZmFsc2U7CiAgICAgcm9vdC0+Y2ZhRm91bmRDb25zdGFudHMgPSBmYWxzZTsK
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHJvb3QtPnZhbHVlc0F0SGVhZC5udW1iZXJPZkFy
Z3VtZW50cygpOyArK2kpIHsKLSAgICAgICAgTm9kZSYgbm9kZSA9IGdyYXBoW3Jvb3QtPnZhcmlh
Ymxlc0F0SGVhZC5hcmd1bWVudChpKV07Ci0gICAgICAgIEFTU0VSVChub2RlLm9wKCkgPT0gU2V0
QXJndW1lbnQpOwotICAgICAgICBpZiAoIW5vZGUuc2hvdWxkR2VuZXJhdGUoKSkgeworICAgICAg
ICBOb2RlKiBub2RlID0gcm9vdC0+dmFyaWFibGVzQXRIZWFkLmFyZ3VtZW50KGkpOworICAgICAg
ICBBU1NFUlQobm9kZS0+b3AoKSA9PSBTZXRBcmd1bWVudCk7CisgICAgICAgIGlmICghbm9kZS0+
c2hvdWxkR2VuZXJhdGUoKSkgewogICAgICAgICAgICAgLy8gVGhlIGFyZ3VtZW50IGlzIGRlYWQu
IFdlIGRvbid0IGRvIGFueSBjaGVja3MgZm9yIHN1Y2ggYXJndW1lbnRzLCBhbmQgc28KICAgICAg
ICAgICAgIC8vIGZvciB0aGUgcHVycG9zZSBvZiB0aGUgYW5hbHlzaXMsIHRoZXkgY29udGFpbiBu
byB2YWx1ZS4KICAgICAgICAgICAgIHJvb3QtPnZhbHVlc0F0SGVhZC5hcmd1bWVudChpKS5jbGVh
cigpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAg
IGlmIChub2RlLnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5pc0NhcHR1cmVkKCkpIHsKKyAgICAgICAg
aWYgKG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5pc0NhcHR1cmVkKCkpIHsKICAgICAgICAg
ICAgIHJvb3QtPnZhbHVlc0F0SGVhZC5hcmd1bWVudChpKS5tYWtlVG9wKCk7CiAgICAgICAgICAg
ICBjb250aW51ZTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgU3BlY3VsYXRlZFR5cGUg
cHJlZGljdGlvbiA9IG5vZGUudmFyaWFibGVBY2Nlc3NEYXRhKCktPnByZWRpY3Rpb24oKTsKKyAg
ICAgICAgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0
YSgpLT5wcmVkaWN0aW9uKCk7CiAgICAgICAgIGlmIChpc0ludDMyU3BlY3VsYXRpb24ocHJlZGlj
dGlvbikpCiAgICAgICAgICAgICByb290LT52YWx1ZXNBdEhlYWQuYXJndW1lbnQoaSkuc2V0KFNw
ZWNJbnQzMik7CiAgICAgICAgIGVsc2UgaWYgKGlzQm9vbGVhblNwZWN1bGF0aW9uKHByZWRpY3Rp
b24pKQpAQCAtMTE0LDggKzExNCw4IEBAIHZvaWQgQWJzdHJhY3RTdGF0ZTo6aW5pdGlhbGl6ZShH
cmFwaCYgZ3IKICAgICAgICAgcm9vdC0+dmFsdWVzQXRUYWlsLmFyZ3VtZW50KGkpLmNsZWFyKCk7
CiAgICAgfQogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcm9vdC0+dmFsdWVzQXRIZWFkLm51
bWJlck9mTG9jYWxzKCk7ICsraSkgewotICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4ID0gcm9v
dC0+dmFyaWFibGVzQXRIZWFkLmxvY2FsKGkpOwotICAgICAgICBpZiAobm9kZUluZGV4ICE9IE5v
Tm9kZSAmJiBncmFwaFtub2RlSW5kZXhdLnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5pc0NhcHR1cmVk
KCkpCisgICAgICAgIE5vZGUqIG5vZGUgPSByb290LT52YXJpYWJsZXNBdEhlYWQubG9jYWwoaSk7
CisgICAgICAgIGlmIChub2RlICYmIG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5pc0NhcHR1
cmVkKCkpCiAgICAgICAgICAgICByb290LT52YWx1ZXNBdEhlYWQubG9jYWwoaSkubWFrZVRvcCgp
OwogICAgICAgICBlbHNlCiAgICAgICAgICAgICByb290LT52YWx1ZXNBdEhlYWQubG9jYWwoaSku
Y2xlYXIoKTsKQEAgLTIxMywxMSArMjEzLDExIEBAIHZvaWQgQWJzdHJhY3RTdGF0ZTo6cmVzZXQo
KQogICAgIG1fYnJhbmNoRGlyZWN0aW9uID0gSW52YWxpZEJyYW5jaERpcmVjdGlvbjsKIH0KIAot
QWJzdHJhY3RTdGF0ZTo6Qm9vbGVhblJlc3VsdCBBYnN0cmFjdFN0YXRlOjpib29sZWFuUmVzdWx0
KE5vZGUmIG5vZGUsIEFic3RyYWN0VmFsdWUmIHZhbHVlKQorQWJzdHJhY3RTdGF0ZTo6Qm9vbGVh
blJlc3VsdCBBYnN0cmFjdFN0YXRlOjpib29sZWFuUmVzdWx0KE5vZGUqIG5vZGUsIEFic3RyYWN0
VmFsdWUmIHZhbHVlKQogewogICAgIEpTVmFsdWUgY2hpbGRDb25zdCA9IHZhbHVlLnZhbHVlKCk7
CiAgICAgaWYgKGNoaWxkQ29uc3QpIHsKLSAgICAgICAgaWYgKGNoaWxkQ29uc3QudG9Cb29sZWFu
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3RGb3Iobm9kZS5jb2RlT3JpZ2luKS0+Z2xvYmFsRXhl
YygpKSkKKyAgICAgICAgaWYgKGNoaWxkQ29uc3QudG9Cb29sZWFuKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3RGb3Iobm9kZS0+Y29kZU9yaWdpbiktPmdsb2JhbEV4ZWMoKSkpCiAgICAgICAgICAg
ICByZXR1cm4gRGVmaW5pdGVseVRydWU7CiAgICAgICAgIHJldHVybiBEZWZpbml0ZWx5RmFsc2U7
CiAgICAgfQpAQCAtMjI2LDcgKzIyNiw3IEBAIEFic3RyYWN0U3RhdGU6OkJvb2xlYW5SZXN1bHQg
QWJzdHJhY3RTdGEKICAgICBpZiAoaXNDZWxsU3BlY3VsYXRpb24odmFsdWUubV90eXBlKQogICAg
ICAgICAmJiB2YWx1ZS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5oYXNTaW5nbGV0b24oKSkgewog
ICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHZhbHVlLm1fY3VycmVudEtub3duU3RydWN0
dXJlLnNpbmdsZXRvbigpOwotICAgICAgICBpZiAoIXN0cnVjdHVyZS0+bWFzcXVlcmFkZXNBc1Vu
ZGVmaW5lZChtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0Rm9yKG5vZGUuY29kZU9yaWdpbikpCisg
ICAgICAgIGlmICghc3RydWN0dXJlLT5tYXNxdWVyYWRlc0FzVW5kZWZpbmVkKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3RGb3Iobm9kZS0+Y29kZU9yaWdpbikpCiAgICAgICAgICAgICAmJiBzdHJ1
Y3R1cmUtPnR5cGVJbmZvKCkudHlwZSgpICE9IFN0cmluZ1R5cGUpCiAgICAgICAgICAgICByZXR1
cm4gRGVmaW5pdGVseVRydWU7CiAgICAgfQpAQCAtMjQxLDMyICsyNDEsMzEgQEAgYm9vbCBBYnN0
cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgIAogICAgIG1fZGlkQ2xvYmJlciA9
IGZhbHNlOwogICAgIAotICAgIE5vZGVJbmRleCBub2RlSW5kZXggPSBtX2Jsb2NrLT5hdChpbmRl
eEluQmxvY2spOwotICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW25vZGVJbmRleF07CisgICAgTm9k
ZSogbm9kZSA9IG1fYmxvY2stPmF0KGluZGV4SW5CbG9jayk7CiAgICAgICAgIAotICAgIGlmICgh
bm9kZS5zaG91bGRHZW5lcmF0ZSgpKQorICAgIGlmICghbm9kZS0+c2hvdWxkR2VuZXJhdGUoKSkK
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIAotICAgIHN3aXRjaCAobm9kZS5vcCgpKSB7
CisgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CiAgICAgY2FzZSBKU0NvbnN0YW50OgogICAgIGNh
c2UgV2Vha0pTQ29uc3RhbnQ6CiAgICAgY2FzZSBQaGFudG9tQXJndW1lbnRzOiB7Ci0gICAgICAg
IGZvck5vZGUobm9kZUluZGV4KS5zZXQobV9ncmFwaC52YWx1ZU9mSlNDb25zdGFudChub2RlSW5k
ZXgpKTsKLSAgICAgICAgbm9kZS5zZXRDYW5FeGl0KGZhbHNlKTsKKyAgICAgICAgZm9yTm9kZShu
b2RlKS5zZXQobV9ncmFwaC52YWx1ZU9mSlNDb25zdGFudChub2RlKSk7CisgICAgICAgIG5vZGUt
PnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIAogICAg
IGNhc2UgSWRlbnRpdHk6IHsKLSAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpID0gZm9yTm9kZShu
b2RlLmNoaWxkMSgpKTsKLSAgICAgICAgbm9kZS5zZXRDYW5FeGl0KGZhbHNlKTsKKyAgICAgICAg
Zm9yTm9kZShub2RlKSA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBub2RlLT5z
ZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAgICAgCiAg
ICAgY2FzZSBHZXRMb2NhbDogewotICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxl
QWNjZXNzRGF0YSA9IG5vZGUudmFyaWFibGVBY2Nlc3NEYXRhKCk7CisgICAgICAgIFZhcmlhYmxl
QWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRh
KCk7CiAgICAgICAgIGlmICh2YXJpYWJsZUFjY2Vzc0RhdGEtPnByZWRpY3Rpb24oKSA9PSBTcGVj
Tm9uZSkgewogICAgICAgICAgICAgbV9pc1ZhbGlkID0gZmFsc2U7Ci0gICAgICAgICAgICBub2Rl
LnNldENhbkV4aXQodHJ1ZSk7CisgICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgYm9vbCBjYW5FeGl0ID0gZmFs
c2U7CkBAIC0yNzcsNTMgKzI3Niw1MyBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5z
aWduZWQgaW5kCiAgICAgICAgIH0KICAgICAgICAgaWYgKHZhbHVlLnZhbHVlKCkpCiAgICAgICAg
ICAgICBtX2ZvdW5kQ29uc3RhbnRzID0gdHJ1ZTsKLSAgICAgICAgZm9yTm9kZShub2RlSW5kZXgp
ID0gdmFsdWU7Ci0gICAgICAgIG5vZGUuc2V0Q2FuRXhpdChjYW5FeGl0KTsKKyAgICAgICAgZm9y
Tm9kZShub2RlKSA9IHZhbHVlOworICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGNhbkV4aXQpOwog
ICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgR2V0TG9jYWxVbmxpbmtl
ZDogewotICAgICAgICBBYnN0cmFjdFZhbHVlIHZhbHVlID0gbV92YXJpYWJsZXMub3BlcmFuZChu
b2RlLnVubGlua2VkTG9jYWwoKSk7CisgICAgICAgIEFic3RyYWN0VmFsdWUgdmFsdWUgPSBtX3Zh
cmlhYmxlcy5vcGVyYW5kKG5vZGUtPnVubGlua2VkTG9jYWwoKSk7CiAgICAgICAgIGlmICh2YWx1
ZS52YWx1ZSgpKQogICAgICAgICAgICAgbV9mb3VuZENvbnN0YW50cyA9IHRydWU7Ci0gICAgICAg
IGZvck5vZGUobm9kZUluZGV4KSA9IHZhbHVlOwotICAgICAgICBub2RlLnNldENhbkV4aXQoZmFs
c2UpOworICAgICAgICBmb3JOb2RlKG5vZGUpID0gdmFsdWU7CisgICAgICAgIG5vZGUtPnNldENh
bkV4aXQoZmFsc2UpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIAogICAgIGNhc2Ug
U2V0TG9jYWw6IHsKLSAgICAgICAgaWYgKG5vZGUudmFyaWFibGVBY2Nlc3NEYXRhKCktPmlzQ2Fw
dHVyZWQoKQotICAgICAgICAgICAgfHwgbV9ncmFwaC5pc0NyZWF0ZWRUaGlzQXJndW1lbnQobm9k
ZS5sb2NhbCgpKSkgewotICAgICAgICAgICAgbV92YXJpYWJsZXMub3BlcmFuZChub2RlLmxvY2Fs
KCkpID0gZm9yTm9kZShub2RlLmNoaWxkMSgpKTsKLSAgICAgICAgICAgIG5vZGUuc2V0Q2FuRXhp
dChmYWxzZSk7CisgICAgICAgIGlmIChub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+aXNDYXB0
dXJlZCgpCisgICAgICAgICAgICB8fCBtX2dyYXBoLmlzQ3JlYXRlZFRoaXNBcmd1bWVudChub2Rl
LT5sb2NhbCgpKSkgeworICAgICAgICAgICAgbV92YXJpYWJsZXMub3BlcmFuZChub2RlLT5sb2Nh
bCgpKSA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgbm9kZS0+c2V0Q2Fu
RXhpdChmYWxzZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAKLSAg
ICAgICAgaWYgKG5vZGUudmFyaWFibGVBY2Nlc3NEYXRhKCktPnNob3VsZFVzZURvdWJsZUZvcm1h
dCgpKSB7CisgICAgICAgIGlmIChub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+c2hvdWxkVXNl
RG91YmxlRm9ybWF0KCkpIHsKICAgICAgICAgICAgIHNwZWN1bGF0ZU51bWJlclVuYXJ5KG5vZGUp
OwotICAgICAgICAgICAgbV92YXJpYWJsZXMub3BlcmFuZChub2RlLmxvY2FsKCkpLnNldChTcGVj
RG91YmxlKTsKKyAgICAgICAgICAgIG1fdmFyaWFibGVzLm9wZXJhbmQobm9kZS0+bG9jYWwoKSku
c2V0KFNwZWNEb3VibGUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAg
Ci0gICAgICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3RlZFR5cGUgPSBub2RlLnZhcmlhYmxlQWNj
ZXNzRGF0YSgpLT5hcmd1bWVudEF3YXJlUHJlZGljdGlvbigpOworICAgICAgICBTcGVjdWxhdGVk
VHlwZSBwcmVkaWN0ZWRUeXBlID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCktPmFyZ3VtZW50
QXdhcmVQcmVkaWN0aW9uKCk7CiAgICAgICAgIGlmIChpc0ludDMyU3BlY3VsYXRpb24ocHJlZGlj
dGVkVHlwZSkpCiAgICAgICAgICAgICBzcGVjdWxhdGVJbnQzMlVuYXJ5KG5vZGUpOwogICAgICAg
ICBlbHNlIGlmIChpc0NlbGxTcGVjdWxhdGlvbihwcmVkaWN0ZWRUeXBlKSkgewotICAgICAgICAg
ICAgbm9kZS5zZXRDYW5FeGl0KCFpc0NlbGxTcGVjdWxhdGlvbihmb3JOb2RlKG5vZGUuY2hpbGQx
KCkpLm1fdHlwZSkpOwotICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIo
U3BlY0NlbGwpOworICAgICAgICAgICAgbm9kZS5zZXRDYW5FeGl0KCFpc0NlbGxTcGVjdWxhdGlv
bihmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX3R5cGUpKTsKKyAgICAgICAgICAgIGZvck5vZGUo
bm9kZS0+Y2hpbGQxKCkpLmZpbHRlcihTcGVjQ2VsbCk7CiAgICAgICAgIH0gZWxzZSBpZiAoaXNC
b29sZWFuU3BlY3VsYXRpb24ocHJlZGljdGVkVHlwZSkpCiAgICAgICAgICAgICBzcGVjdWxhdGVC
b29sZWFuVW5hcnkobm9kZSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIG5vZGUuc2V0Q2Fu
RXhpdChmYWxzZSk7CisgICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAg
ICAgCi0gICAgICAgIG1fdmFyaWFibGVzLm9wZXJhbmQobm9kZS5sb2NhbCgpKSA9IGZvck5vZGUo
bm9kZS5jaGlsZDEoKSk7CisgICAgICAgIG1fdmFyaWFibGVzLm9wZXJhbmQobm9kZS0+bG9jYWwo
KSkgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAg
ICAgICAgICAgCiAgICAgY2FzZSBTZXRBcmd1bWVudDoKICAgICAgICAgLy8gQXNzZXJ0IHRoYXQg
dGhlIHN0YXRlIG9mIGFyZ3VtZW50cyBoYXMgYmVlbiBzZXQuCi0gICAgICAgIEFTU0VSVCghbV9i
bG9jay0+dmFsdWVzQXRIZWFkLm9wZXJhbmQobm9kZS5sb2NhbCgpKS5pc0NsZWFyKCkpOwotICAg
ICAgICBub2RlLnNldENhbkV4aXQoZmFsc2UpOworICAgICAgICBBU1NFUlQoIW1fYmxvY2stPnZh
bHVlc0F0SGVhZC5vcGVyYW5kKG5vZGUtPmxvY2FsKCkpLmlzQ2xlYXIoKSk7CisgICAgICAgIG5v
ZGUtPnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAg
IGNhc2UgQml0QW5kOgpAQCAtMzMyLDMwICszMzEsMzAgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpl
eGVjdXRlKHVuc2lnbmVkIGluZAogICAgIGNhc2UgQml0UlNoaWZ0OgogICAgIGNhc2UgQml0TFNo
aWZ0OgogICAgIGNhc2UgQml0VVJTaGlmdDogewotICAgICAgICBKU1ZhbHVlIGxlZnQgPSBmb3JO
b2RlKG5vZGUuY2hpbGQxKCkpLnZhbHVlKCk7Ci0gICAgICAgIEpTVmFsdWUgcmlnaHQgPSBmb3JO
b2RlKG5vZGUuY2hpbGQyKCkpLnZhbHVlKCk7CisgICAgICAgIEpTVmFsdWUgbGVmdCA9IGZvck5v
ZGUobm9kZS0+Y2hpbGQxKCkpLnZhbHVlKCk7CisgICAgICAgIEpTVmFsdWUgcmlnaHQgPSBmb3JO
b2RlKG5vZGUtPmNoaWxkMigpKS52YWx1ZSgpOwogICAgICAgICBpZiAobGVmdCAmJiByaWdodCAm
JiBsZWZ0LmlzSW50MzIoKSAmJiByaWdodC5pc0ludDMyKCkpIHsKICAgICAgICAgICAgIGludDMy
X3QgYSA9IGxlZnQuYXNJbnQzMigpOwogICAgICAgICAgICAgaW50MzJfdCBiID0gcmlnaHQuYXNJ
bnQzMigpOwogICAgICAgICAgICAgYm9vbCBjb25zdGFudFdhc1NldDsKICAgICAgICAgICAgIHN3
aXRjaCAobm9kZS5vcCgpKSB7CiAgICAgICAgICAgICBjYXNlIEJpdEFuZDoKLSAgICAgICAgICAg
ICAgICBjb25zdGFudFdhc1NldCA9IHRyeVNldENvbnN0YW50KG5vZGVJbmRleCwgSlNWYWx1ZShh
ICYgYikpOworICAgICAgICAgICAgICAgIGNvbnN0YW50V2FzU2V0ID0gdHJ5U2V0Q29uc3RhbnQo
bm9kZSwgSlNWYWx1ZShhICYgYikpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgY2FzZSBCaXRPcjoKLSAgICAgICAgICAgICAgICBjb25zdGFudFdhc1NldCA9IHRyeVNldENv
bnN0YW50KG5vZGVJbmRleCwgSlNWYWx1ZShhIHwgYikpOworICAgICAgICAgICAgICAgIGNvbnN0
YW50V2FzU2V0ID0gdHJ5U2V0Q29uc3RhbnQobm9kZSwgSlNWYWx1ZShhIHwgYikpOwogICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBCaXRYb3I6Ci0gICAgICAgICAgICAg
ICAgY29uc3RhbnRXYXNTZXQgPSB0cnlTZXRDb25zdGFudChub2RlSW5kZXgsIEpTVmFsdWUoYSBe
IGIpKTsKKyAgICAgICAgICAgICAgICBjb25zdGFudFdhc1NldCA9IHRyeVNldENvbnN0YW50KG5v
ZGUsIEpTVmFsdWUoYSBeIGIpKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
IGNhc2UgQml0UlNoaWZ0OgotICAgICAgICAgICAgICAgIGNvbnN0YW50V2FzU2V0ID0gdHJ5U2V0
Q29uc3RhbnQobm9kZUluZGV4LCBKU1ZhbHVlKGEgPj4gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGIp
KSk7CisgICAgICAgICAgICAgICAgY29uc3RhbnRXYXNTZXQgPSB0cnlTZXRDb25zdGFudChub2Rl
LCBKU1ZhbHVlKGEgPj4gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGIpKSk7CiAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIEJpdExTaGlmdDoKLSAgICAgICAgICAgICAgICBj
b25zdGFudFdhc1NldCA9IHRyeVNldENvbnN0YW50KG5vZGVJbmRleCwgSlNWYWx1ZShhIDw8IHN0
YXRpY19jYXN0PHVpbnQzMl90PihiKSkpOworICAgICAgICAgICAgICAgIGNvbnN0YW50V2FzU2V0
ID0gdHJ5U2V0Q29uc3RhbnQobm9kZSwgSlNWYWx1ZShhIDw8IHN0YXRpY19jYXN0PHVpbnQzMl90
PihiKSkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBCaXRVUlNo
aWZ0OgotICAgICAgICAgICAgICAgIGNvbnN0YW50V2FzU2V0ID0gdHJ5U2V0Q29uc3RhbnQobm9k
ZUluZGV4LCBKU1ZhbHVlKHN0YXRpY19jYXN0PHVpbnQzMl90PihhKSA+PiBzdGF0aWNfY2FzdDx1
aW50MzJfdD4oYikpKTsKKyAgICAgICAgICAgICAgICBjb25zdGFudFdhc1NldCA9IHRyeVNldENv
bnN0YW50KG5vZGUsIEpTVmFsdWUoc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGEpID4+IHN0YXRpY19j
YXN0PHVpbnQzMl90PihiKSkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
ZGVmYXVsdDoKICAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTM2Mywx
OTkgKzM2MiwxOTkgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAog
ICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKGNvbnN0YW50V2FzU2V0KSB7CiAgICAgICAg
ICAgICAgICAgbV9mb3VuZENvbnN0YW50cyA9IHRydWU7Ci0gICAgICAgICAgICAgICAgbm9kZS5z
ZXRDYW5FeGl0KGZhbHNlKTsKKyAgICAgICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNl
KTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAg
ICAgICBzcGVjdWxhdGVJbnQzMkJpbmFyeShub2RlKTsKLSAgICAgICAgZm9yTm9kZShub2RlSW5k
ZXgpLnNldChTcGVjSW50MzIpOworICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjSW50MzIp
OwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgVUludDMyVG9OdW1i
ZXI6IHsKLSAgICAgICAgSlNWYWx1ZSBjaGlsZCA9IGZvck5vZGUobm9kZS5jaGlsZDEoKSkudmFs
dWUoKTsKKyAgICAgICAgSlNWYWx1ZSBjaGlsZCA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLnZh
bHVlKCk7CiAgICAgICAgIGlmIChjaGlsZCAmJiBjaGlsZC5pc051bWJlcigpKSB7CiAgICAgICAg
ICAgICBBU1NFUlQoY2hpbGQuaXNJbnQzMigpKTsKLSAgICAgICAgICAgIGlmICh0cnlTZXRDb25z
dGFudChub2RlSW5kZXgsIEpTVmFsdWUoY2hpbGQuYXNVSW50MzIoKSkpKSB7CisgICAgICAgICAg
ICBpZiAodHJ5U2V0Q29uc3RhbnQobm9kZSwgSlNWYWx1ZShjaGlsZC5hc1VJbnQzMigpKSkpIHsK
ICAgICAgICAgICAgICAgICBtX2ZvdW5kQ29uc3RhbnRzID0gdHJ1ZTsKLSAgICAgICAgICAgICAg
ICBub2RlLnNldENhbkV4aXQoZmFsc2UpOworICAgICAgICAgICAgICAgIG5vZGUtPnNldENhbkV4
aXQoZmFsc2UpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAg
ICB9Ci0gICAgICAgIGlmICghbm9kZS5jYW5TcGVjdWxhdGVJbnRlZ2VyKCkpIHsKLSAgICAgICAg
ICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoU3BlY0RvdWJsZSk7Ci0gICAgICAgICAgICBub2Rl
LnNldENhbkV4aXQoZmFsc2UpOworICAgICAgICBpZiAoIW5vZGUtPmNhblNwZWN1bGF0ZUludGVn
ZXIoKSkgeworICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0RvdWJsZSk7CisgICAg
ICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoU3BlY0ludDMyKTsKLSAgICAgICAgICAgIG5v
ZGUuc2V0Q2FuRXhpdCh0cnVlKTsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNJ
bnQzMik7CisgICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOwogICAgICAgICB9CiAg
ICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAKICAgICBj
YXNlIERvdWJsZUFzSW50MzI6IHsKLSAgICAgICAgSlNWYWx1ZSBjaGlsZCA9IGZvck5vZGUobm9k
ZS5jaGlsZDEoKSkudmFsdWUoKTsKKyAgICAgICAgSlNWYWx1ZSBjaGlsZCA9IGZvck5vZGUobm9k
ZS0+Y2hpbGQxKCkpLnZhbHVlKCk7CiAgICAgICAgIGlmIChjaGlsZCAmJiBjaGlsZC5pc051bWJl
cigpKSB7CiAgICAgICAgICAgICBkb3VibGUgYXNEb3VibGUgPSBjaGlsZC5hc051bWJlcigpOwog
ICAgICAgICAgICAgaW50MzJfdCBhc0ludCA9IEpTQzo6dG9JbnQzMihhc0RvdWJsZSk7CiAgICAg
ICAgICAgICBpZiAoYml0d2lzZV9jYXN0PGludDY0X3Q+KHN0YXRpY19jYXN0PGRvdWJsZT4oYXNJ
bnQpKSA9PSBiaXR3aXNlX2Nhc3Q8aW50NjRfdD4oYXNEb3VibGUpCi0gICAgICAgICAgICAgICAg
JiYgdHJ5U2V0Q29uc3RhbnQobm9kZUluZGV4LCBKU1ZhbHVlKGFzSW50KSkpIHsKKyAgICAgICAg
ICAgICAgICAmJiB0cnlTZXRDb25zdGFudChub2RlLCBKU1ZhbHVlKGFzSW50KSkpIHsKICAgICAg
ICAgICAgICAgICBtX2ZvdW5kQ29uc3RhbnRzID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICBub2RlLnNldENhbkV4aXQodHJ1
ZSk7Ci0gICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNOdW1iZXIpOwot
ICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFNwZWNJbnQzMik7CisgICAgICAgIG5vZGUt
PnNldENhbkV4aXQodHJ1ZSk7CisgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRl
cihTcGVjTnVtYmVyKTsKKyAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0ludDMyKTsKICAg
ICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAgICAgCiAgICAgY2FzZSBWYWx1ZVRvSW50MzI6
IHsKLSAgICAgICAgSlNWYWx1ZSBjaGlsZCA9IGZvck5vZGUobm9kZS5jaGlsZDEoKSkudmFsdWUo
KTsKKyAgICAgICAgSlNWYWx1ZSBjaGlsZCA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLnZhbHVl
KCk7CiAgICAgICAgIGlmIChjaGlsZCAmJiBjaGlsZC5pc051bWJlcigpKSB7CiAgICAgICAgICAg
ICBib29sIGNvbnN0YW50V2FzU2V0OwogICAgICAgICAgICAgaWYgKGNoaWxkLmlzSW50MzIoKSkK
LSAgICAgICAgICAgICAgICBjb25zdGFudFdhc1NldCA9IHRyeVNldENvbnN0YW50KG5vZGVJbmRl
eCwgY2hpbGQpOworICAgICAgICAgICAgICAgIGNvbnN0YW50V2FzU2V0ID0gdHJ5U2V0Q29uc3Rh
bnQobm9kZSwgY2hpbGQpOwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGNvbnN0
YW50V2FzU2V0ID0gdHJ5U2V0Q29uc3RhbnQobm9kZUluZGV4LCBKU1ZhbHVlKEpTQzo6dG9JbnQz
MihjaGlsZC5hc0RvdWJsZSgpKSkpOworICAgICAgICAgICAgICAgIGNvbnN0YW50V2FzU2V0ID0g
dHJ5U2V0Q29uc3RhbnQobm9kZSwgSlNWYWx1ZShKU0M6OnRvSW50MzIoY2hpbGQuYXNEb3VibGUo
KSkpKTsKICAgICAgICAgICAgIGlmIChjb25zdGFudFdhc1NldCkgewogICAgICAgICAgICAgICAg
IG1fZm91bmRDb25zdGFudHMgPSB0cnVlOwotICAgICAgICAgICAgICAgIG5vZGUuc2V0Q2FuRXhp
dChmYWxzZSk7CisgICAgICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CiAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgaWYg
KG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0uc2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKQorICAgICAg
ICBpZiAobV9ncmFwaFtub2RlLT5jaGlsZDEoKV0uc2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKQog
ICAgICAgICAgICAgc3BlY3VsYXRlSW50MzJVbmFyeShub2RlKTsKLSAgICAgICAgZWxzZSBpZiAo
bV9ncmFwaFtub2RlLmNoaWxkMSgpXS5zaG91bGRTcGVjdWxhdGVOdW1iZXIoKSkKKyAgICAgICAg
ZWxzZSBpZiAobV9ncmFwaFtub2RlLT5jaGlsZDEoKV0uc2hvdWxkU3BlY3VsYXRlTnVtYmVyKCkp
CiAgICAgICAgICAgICBzcGVjdWxhdGVOdW1iZXJVbmFyeShub2RlKTsKLSAgICAgICAgZWxzZSBp
ZiAobV9ncmFwaFtub2RlLmNoaWxkMSgpXS5zaG91bGRTcGVjdWxhdGVCb29sZWFuKCkpCisgICAg
ICAgIGVsc2UgaWYgKG1fZ3JhcGhbbm9kZS0+Y2hpbGQxKCldLnNob3VsZFNwZWN1bGF0ZUJvb2xl
YW4oKSkKICAgICAgICAgICAgIHNwZWN1bGF0ZUJvb2xlYW5VbmFyeShub2RlKTsKICAgICAgICAg
ZWxzZQotICAgICAgICAgICAgbm9kZS5zZXRDYW5FeGl0KGZhbHNlKTsKKyAgICAgICAgICAgIG5v
ZGUtPnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICAKLSAgICAgICAgZm9yTm9kZShub2RlSW5k
ZXgpLnNldChTcGVjSW50MzIpOworICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjSW50MzIp
OwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgSW50MzJUb0RvdWJs
ZTogewotICAgICAgICBKU1ZhbHVlIGNoaWxkID0gZm9yTm9kZShub2RlLmNoaWxkMSgpKS52YWx1
ZSgpOworICAgICAgICBKU1ZhbHVlIGNoaWxkID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSkudmFs
dWUoKTsKICAgICAgICAgaWYgKGNoaWxkICYmIGNoaWxkLmlzTnVtYmVyKCkKLSAgICAgICAgICAg
ICYmIHRyeVNldENvbnN0YW50KG5vZGVJbmRleCwgSlNWYWx1ZShKU1ZhbHVlOjpFbmNvZGVBc0Rv
dWJsZSwgY2hpbGQuYXNOdW1iZXIoKSkpKSB7CisgICAgICAgICAgICAmJiB0cnlTZXRDb25zdGFu
dChub2RlLCBKU1ZhbHVlKEpTVmFsdWU6OkVuY29kZUFzRG91YmxlLCBjaGlsZC5hc051bWJlcigp
KSkpIHsKICAgICAgICAgICAgIG1fZm91bmRDb25zdGFudHMgPSB0cnVlOwotICAgICAgICAgICAg
bm9kZS5zZXRDYW5FeGl0KGZhbHNlKTsKKyAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFs
c2UpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgc3BlY3VsYXRlTnVt
YmVyVW5hcnkobm9kZSk7Ci0gICAgICAgIGlmIChpc0ludDMyU3BlY3VsYXRpb24oZm9yTm9kZShu
b2RlLmNoaWxkMSgpKS5tX3R5cGUpKQotICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNl
dChTcGVjRG91YmxlUmVhbCk7CisgICAgICAgIGlmIChpc0ludDMyU3BlY3VsYXRpb24oZm9yTm9k
ZShub2RlLT5jaGlsZDEoKSkubV90eXBlKSkKKyAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0
KFNwZWNEb3VibGVSZWFsKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgZm9yTm9kZShub2Rl
SW5kZXgpLnNldChTcGVjRG91YmxlKTsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNw
ZWNEb3VibGUpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgQ2hl
Y2tOdW1iZXI6Ci0gICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNOdW1i
ZXIpOworICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5maWx0ZXIoU3BlY051bWJlcik7
CiAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAgY2FzZSBWYWx1ZUFkZDoKICAgICBj
YXNlIEFyaXRoQWRkOiB7Ci0gICAgICAgIEpTVmFsdWUgbGVmdCA9IGZvck5vZGUobm9kZS5jaGls
ZDEoKSkudmFsdWUoKTsKLSAgICAgICAgSlNWYWx1ZSByaWdodCA9IGZvck5vZGUobm9kZS5jaGls
ZDIoKSkudmFsdWUoKTsKKyAgICAgICAgSlNWYWx1ZSBsZWZ0ID0gZm9yTm9kZShub2RlLT5jaGls
ZDEoKSkudmFsdWUoKTsKKyAgICAgICAgSlNWYWx1ZSByaWdodCA9IGZvck5vZGUobm9kZS0+Y2hp
bGQyKCkpLnZhbHVlKCk7CiAgICAgICAgIGlmIChsZWZ0ICYmIHJpZ2h0ICYmIGxlZnQuaXNOdW1i
ZXIoKSAmJiByaWdodC5pc051bWJlcigpCi0gICAgICAgICAgICAmJiB0cnlTZXRDb25zdGFudChu
b2RlSW5kZXgsIEpTVmFsdWUobGVmdC5hc051bWJlcigpICsgcmlnaHQuYXNOdW1iZXIoKSkpKSB7
CisgICAgICAgICAgICAmJiB0cnlTZXRDb25zdGFudChub2RlLCBKU1ZhbHVlKGxlZnQuYXNOdW1i
ZXIoKSArIHJpZ2h0LmFzTnVtYmVyKCkpKSkgewogICAgICAgICAgICAgbV9mb3VuZENvbnN0YW50
cyA9IHRydWU7CiAgICAgICAgICAgICBub2RlLnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgaWYgKG1fZ3JhcGguYWRkU2hvdWxkU3BlY3Vs
YXRlSW50ZWdlcihub2RlKSkgewogICAgICAgICAgICAgc3BlY3VsYXRlSW50MzJCaW5hcnkoCi0g
ICAgICAgICAgICAgICAgbm9kZSwgIW5vZGVDYW5UcnVuY2F0ZUludGVnZXIobm9kZS5hcml0aE5v
ZGVGbGFncygpKSk7Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFNwZWNJbnQz
Mik7CisgICAgICAgICAgICAgICAgbm9kZSwgIW5vZGVDYW5UcnVuY2F0ZUludGVnZXIobm9kZS0+
YXJpdGhOb2RlRmxhZ3MoKSkpOworICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0lu
dDMyKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIGlmIChOb2RlOjpz
aG91bGRTcGVjdWxhdGVOdW1iZXJFeHBlY3RpbmdEZWZpbmVkKG1fZ3JhcGhbbm9kZS5jaGlsZDEo
KV0sIG1fZ3JhcGhbbm9kZS5jaGlsZDIoKV0pKSB7CisgICAgICAgIGlmIChOb2RlOjpzaG91bGRT
cGVjdWxhdGVOdW1iZXJFeHBlY3RpbmdEZWZpbmVkKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgbm9k
ZS0+Y2hpbGQyKCkubm9kZSgpKSkgewogICAgICAgICAgICAgc3BlY3VsYXRlTnVtYmVyQmluYXJ5
KG5vZGUpOwotICAgICAgICAgICAgaWYgKGlzUmVhbE51bWJlclNwZWN1bGF0aW9uKGZvck5vZGUo
bm9kZS5jaGlsZDEoKSkubV90eXBlKQotICAgICAgICAgICAgICAgICYmIGlzUmVhbE51bWJlclNw
ZWN1bGF0aW9uKGZvck5vZGUobm9kZS5jaGlsZDIoKSkubV90eXBlKSkKLSAgICAgICAgICAgICAg
ICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFNwZWNEb3VibGVSZWFsKTsKKyAgICAgICAgICAgIGlm
IChpc1JlYWxOdW1iZXJTcGVjdWxhdGlvbihmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX3R5cGUp
CisgICAgICAgICAgICAgICAgJiYgaXNSZWFsTnVtYmVyU3BlY3VsYXRpb24oZm9yTm9kZShub2Rl
LT5jaGlsZDIoKSkubV90eXBlKSkKKyAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChT
cGVjRG91YmxlUmVhbCk7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZm9yTm9k
ZShub2RlSW5kZXgpLnNldChTcGVjRG91YmxlKTsKKyAgICAgICAgICAgICAgICBmb3JOb2RlKG5v
ZGUpLnNldChTcGVjRG91YmxlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAg
ICAgIGlmIChub2RlLm9wKCkgPT0gVmFsdWVBZGQpIHsKLSAgICAgICAgICAgIGNsb2JiZXJXb3Js
ZChub2RlLmNvZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7Ci0gICAgICAgICAgICBmb3JOb2RlKG5v
ZGVJbmRleCkuc2V0KFNwZWNTdHJpbmcgfCBTcGVjSW50MzIgfCBTcGVjTnVtYmVyKTsKLSAgICAg
ICAgICAgIG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7CisgICAgICAgIGlmIChub2RlLT5vcCgpID09
IFZhbHVlQWRkKSB7CisgICAgICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+Y29kZU9yaWdpbiwg
aW5kZXhJbkJsb2NrKTsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNTdHJpbmcg
fCBTcGVjSW50MzIgfCBTcGVjTnVtYmVyKTsKKyAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQo
ZmFsc2UpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgLy8gV2UgZG9u
J3QgaGFuZGxlIHRoaXMgeWV0LiA6LSgKICAgICAgICAgbV9pc1ZhbGlkID0gZmFsc2U7Ci0gICAg
ICAgIG5vZGUuc2V0Q2FuRXhpdCh0cnVlKTsKKyAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVl
KTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAgICAgCiAgICAgY2FzZSBBcml0aFN1
YjogewotICAgICAgICBKU1ZhbHVlIGxlZnQgPSBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLnZhbHVl
KCk7Ci0gICAgICAgIEpTVmFsdWUgcmlnaHQgPSBmb3JOb2RlKG5vZGUuY2hpbGQyKCkpLnZhbHVl
KCk7CisgICAgICAgIEpTVmFsdWUgbGVmdCA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLnZhbHVl
KCk7CisgICAgICAgIEpTVmFsdWUgcmlnaHQgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMigpKS52YWx1
ZSgpOwogICAgICAgICBpZiAobGVmdCAmJiByaWdodCAmJiBsZWZ0LmlzTnVtYmVyKCkgJiYgcmln
aHQuaXNOdW1iZXIoKQotICAgICAgICAgICAgJiYgdHJ5U2V0Q29uc3RhbnQobm9kZUluZGV4LCBK
U1ZhbHVlKGxlZnQuYXNOdW1iZXIoKSAtIHJpZ2h0LmFzTnVtYmVyKCkpKSkgeworICAgICAgICAg
ICAgJiYgdHJ5U2V0Q29uc3RhbnQobm9kZSwgSlNWYWx1ZShsZWZ0LmFzTnVtYmVyKCkgLSByaWdo
dC5hc051bWJlcigpKSkpIHsKICAgICAgICAgICAgIG1fZm91bmRDb25zdGFudHMgPSB0cnVlOwot
ICAgICAgICAgICAgbm9kZS5zZXRDYW5FeGl0KGZhbHNlKTsKKyAgICAgICAgICAgIG5vZGUtPnNl
dENhbkV4aXQoZmFsc2UpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAg
aWYgKG1fZ3JhcGguYWRkU2hvdWxkU3BlY3VsYXRlSW50ZWdlcihub2RlKSkgewogICAgICAgICAg
ICAgc3BlY3VsYXRlSW50MzJCaW5hcnkoCi0gICAgICAgICAgICAgICAgbm9kZSwgIW5vZGVDYW5U
cnVuY2F0ZUludGVnZXIobm9kZS5hcml0aE5vZGVGbGFncygpKSk7Ci0gICAgICAgICAgICBmb3JO
b2RlKG5vZGVJbmRleCkuc2V0KFNwZWNJbnQzMik7CisgICAgICAgICAgICAgICAgbm9kZSwgIW5v
ZGVDYW5UcnVuY2F0ZUludGVnZXIobm9kZS0+YXJpdGhOb2RlRmxhZ3MoKSkpOworICAgICAgICAg
ICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICB9CiAgICAgICAgIHNwZWN1bGF0ZU51bWJlckJpbmFyeShub2RlKTsKLSAgICAgICAgZm9y
Tm9kZShub2RlSW5kZXgpLnNldChTcGVjRG91YmxlKTsKKyAgICAgICAgZm9yTm9kZShub2RlKS5z
ZXQoU3BlY0RvdWJsZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCiAgICAgY2Fz
ZSBBcml0aE5lZ2F0ZTogewotICAgICAgICBKU1ZhbHVlIGNoaWxkID0gZm9yTm9kZShub2RlLmNo
aWxkMSgpKS52YWx1ZSgpOworICAgICAgICBKU1ZhbHVlIGNoaWxkID0gZm9yTm9kZShub2RlLT5j
aGlsZDEoKSkudmFsdWUoKTsKICAgICAgICAgaWYgKGNoaWxkICYmIGNoaWxkLmlzTnVtYmVyKCkK
LSAgICAgICAgICAgICYmIHRyeVNldENvbnN0YW50KG5vZGVJbmRleCwgSlNWYWx1ZSgtY2hpbGQu
YXNOdW1iZXIoKSkpKSB7CisgICAgICAgICAgICAmJiB0cnlTZXRDb25zdGFudChub2RlLCBKU1Zh
bHVlKC1jaGlsZC5hc051bWJlcigpKSkpIHsKICAgICAgICAgICAgIG1fZm91bmRDb25zdGFudHMg
PSB0cnVlOwotICAgICAgICAgICAgbm9kZS5zZXRDYW5FeGl0KGZhbHNlKTsKKyAgICAgICAgICAg
IG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0K
ICAgICAgICAgaWYgKG1fZ3JhcGgubmVnYXRlU2hvdWxkU3BlY3VsYXRlSW50ZWdlcihub2RlKSkg
ewogICAgICAgICAgICAgc3BlY3VsYXRlSW50MzJVbmFyeSgKLSAgICAgICAgICAgICAgICBub2Rl
LCAhbm9kZUNhblRydW5jYXRlSW50ZWdlcihub2RlLmFyaXRoTm9kZUZsYWdzKCkpKTsKLSAgICAg
ICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoU3BlY0ludDMyKTsKKyAgICAgICAgICAgICAg
ICBub2RlLCAhbm9kZUNhblRydW5jYXRlSW50ZWdlcihub2RlLT5hcml0aE5vZGVGbGFncygpKSk7
CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjSW50MzIpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgc3BlY3VsYXRlTnVtYmVyVW5hcnkobm9kZSk7Ci0g
ICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoU3BlY0RvdWJsZSk7CisgICAgICAgIGZvck5v
ZGUobm9kZSkuc2V0KFNwZWNEb3VibGUpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAg
IAogICAgIGNhc2UgQXJpdGhNdWw6IHsKLSAgICAgICAgSlNWYWx1ZSBsZWZ0ID0gZm9yTm9kZShu
b2RlLmNoaWxkMSgpKS52YWx1ZSgpOwotICAgICAgICBKU1ZhbHVlIHJpZ2h0ID0gZm9yTm9kZShu
b2RlLmNoaWxkMigpKS52YWx1ZSgpOworICAgICAgICBKU1ZhbHVlIGxlZnQgPSBmb3JOb2RlKG5v
ZGUtPmNoaWxkMSgpKS52YWx1ZSgpOworICAgICAgICBKU1ZhbHVlIHJpZ2h0ID0gZm9yTm9kZShu
b2RlLT5jaGlsZDIoKSkudmFsdWUoKTsKICAgICAgICAgaWYgKGxlZnQgJiYgcmlnaHQgJiYgbGVm
dC5pc051bWJlcigpICYmIHJpZ2h0LmlzTnVtYmVyKCkKLSAgICAgICAgICAgICYmIHRyeVNldENv
bnN0YW50KG5vZGVJbmRleCwgSlNWYWx1ZShsZWZ0LmFzTnVtYmVyKCkgKiByaWdodC5hc051bWJl
cigpKSkpIHsKKyAgICAgICAgICAgICYmIHRyeVNldENvbnN0YW50KG5vZGUsIEpTVmFsdWUobGVm
dC5hc051bWJlcigpICogcmlnaHQuYXNOdW1iZXIoKSkpKSB7CiAgICAgICAgICAgICBtX2ZvdW5k
Q29uc3RhbnRzID0gdHJ1ZTsKLSAgICAgICAgICAgIG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7Cisg
ICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICB9CiAgICAgICAgIGlmIChtX2dyYXBoLm11bFNob3VsZFNwZWN1bGF0ZUludGVnZXIo
bm9kZSkpIHsKICAgICAgICAgICAgIHNwZWN1bGF0ZUludDMyQmluYXJ5KAogICAgICAgICAgICAg
ICAgIG5vZGUsCi0gICAgICAgICAgICAgICAgIW5vZGVDYW5UcnVuY2F0ZUludGVnZXIobm9kZS5h
cml0aE5vZGVGbGFncygpKQotICAgICAgICAgICAgICAgIHx8ICFub2RlQ2FuSWdub3JlTmVnYXRp
dmVaZXJvKG5vZGUuYXJpdGhOb2RlRmxhZ3MoKSkpOwotICAgICAgICAgICAgZm9yTm9kZShub2Rl
SW5kZXgpLnNldChTcGVjSW50MzIpOworICAgICAgICAgICAgICAgICFub2RlQ2FuVHJ1bmNhdGVJ
bnRlZ2VyKG5vZGUtPmFyaXRoTm9kZUZsYWdzKCkpCisgICAgICAgICAgICAgICAgfHwgIW5vZGVD
YW5JZ25vcmVOZWdhdGl2ZVplcm8obm9kZS0+YXJpdGhOb2RlRmxhZ3MoKSkpOworICAgICAgICAg
ICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICB9CiAgICAgICAgIHNwZWN1bGF0ZU51bWJlckJpbmFyeShub2RlKTsKLSAgICAgICAgaWYg
KGlzUmVhbE51bWJlclNwZWN1bGF0aW9uKGZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKQot
ICAgICAgICAgICAgfHwgaXNSZWFsTnVtYmVyU3BlY3VsYXRpb24oZm9yTm9kZShub2RlLmNoaWxk
MigpKS5tX3R5cGUpKQotICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChTcGVjRG91
YmxlUmVhbCk7CisgICAgICAgIGlmIChpc1JlYWxOdW1iZXJTcGVjdWxhdGlvbihmb3JOb2RlKG5v
ZGUtPmNoaWxkMSgpKS5tX3R5cGUpCisgICAgICAgICAgICB8fCBpc1JlYWxOdW1iZXJTcGVjdWxh
dGlvbihmb3JOb2RlKG5vZGUtPmNoaWxkMigpKS5tX3R5cGUpKQorICAgICAgICAgICAgZm9yTm9k
ZShub2RlKS5zZXQoU3BlY0RvdWJsZVJlYWwpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBm
b3JOb2RlKG5vZGVJbmRleCkuc2V0KFNwZWNEb3VibGUpOworICAgICAgICAgICAgZm9yTm9kZShu
b2RlKS5zZXQoU3BlY0RvdWJsZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCkBA
IC01NjMsMjQgKzU2MiwyNCBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQg
aW5kCiAgICAgY2FzZSBBcml0aE1pbjoKICAgICBjYXNlIEFyaXRoTWF4OgogICAgIGNhc2UgQXJp
dGhNb2Q6IHsKLSAgICAgICAgSlNWYWx1ZSBsZWZ0ID0gZm9yTm9kZShub2RlLmNoaWxkMSgpKS52
YWx1ZSgpOwotICAgICAgICBKU1ZhbHVlIHJpZ2h0ID0gZm9yTm9kZShub2RlLmNoaWxkMigpKS52
YWx1ZSgpOworICAgICAgICBKU1ZhbHVlIGxlZnQgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS52
YWx1ZSgpOworICAgICAgICBKU1ZhbHVlIHJpZ2h0ID0gZm9yTm9kZShub2RlLT5jaGlsZDIoKSku
dmFsdWUoKTsKICAgICAgICAgaWYgKGxlZnQgJiYgcmlnaHQgJiYgbGVmdC5pc051bWJlcigpICYm
IHJpZ2h0LmlzTnVtYmVyKCkpIHsKICAgICAgICAgICAgIGRvdWJsZSBhID0gbGVmdC5hc051bWJl
cigpOwogICAgICAgICAgICAgZG91YmxlIGIgPSByaWdodC5hc051bWJlcigpOwogICAgICAgICAg
ICAgYm9vbCBjb25zdGFudFdhc1NldDsKICAgICAgICAgICAgIHN3aXRjaCAobm9kZS5vcCgpKSB7
CiAgICAgICAgICAgICBjYXNlIEFyaXRoRGl2OgotICAgICAgICAgICAgICAgIGNvbnN0YW50V2Fz
U2V0ID0gdHJ5U2V0Q29uc3RhbnQobm9kZUluZGV4LCBKU1ZhbHVlKGEgLyBiKSk7CisgICAgICAg
ICAgICAgICAgY29uc3RhbnRXYXNTZXQgPSB0cnlTZXRDb25zdGFudChub2RlLCBKU1ZhbHVlKGEg
LyBiKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIEFyaXRoTWlu
OgotICAgICAgICAgICAgICAgIGNvbnN0YW50V2FzU2V0ID0gdHJ5U2V0Q29uc3RhbnQobm9kZUlu
ZGV4LCBKU1ZhbHVlKGEgPCBiID8gYSA6IChiIDw9IGEgPyBiIDogYSArIGIpKSk7CisgICAgICAg
ICAgICAgICAgY29uc3RhbnRXYXNTZXQgPSB0cnlTZXRDb25zdGFudChub2RlLCBKU1ZhbHVlKGEg
PCBiID8gYSA6IChiIDw9IGEgPyBiIDogYSArIGIpKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICBjYXNlIEFyaXRoTWF4OgotICAgICAgICAgICAgICAgIGNvbnN0YW50V2Fz
U2V0ID0gdHJ5U2V0Q29uc3RhbnQobm9kZUluZGV4LCBKU1ZhbHVlKGEgPiBiID8gYSA6IChiID49
IGEgPyBiIDogYSArIGIpKSk7CisgICAgICAgICAgICAgICAgY29uc3RhbnRXYXNTZXQgPSB0cnlT
ZXRDb25zdGFudChub2RlLCBKU1ZhbHVlKGEgPiBiID8gYSA6IChiID49IGEgPyBiIDogYSArIGIp
KSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIEFyaXRoTW9kOgot
ICAgICAgICAgICAgICAgIGNvbnN0YW50V2FzU2V0ID0gdHJ5U2V0Q29uc3RhbnQobm9kZUluZGV4
LCBKU1ZhbHVlKGZtb2QoYSwgYikpKTsKKyAgICAgICAgICAgICAgICBjb25zdGFudFdhc1NldCA9
IHRyeVNldENvbnN0YW50KG5vZGUsIEpTVmFsdWUoZm1vZChhLCBiKSkpOwogICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKQEAgLTU4OSw4NCArNTg4LDg0IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6
ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChjb25z
dGFudFdhc1NldCkgewogICAgICAgICAgICAgICAgIG1fZm91bmRDb25zdGFudHMgPSB0cnVlOwot
ICAgICAgICAgICAgICAgIG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7CisgICAgICAgICAgICAgICAg
bm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICB9CiAgICAgICAgIH0KICAgICAgICAgaWYgKE5vZGU6OnNob3VsZFNwZWN1bGF0ZUludGVn
ZXJGb3JBcml0aG1ldGljKAotICAgICAgICAgICAgICAgIG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0s
IG1fZ3JhcGhbbm9kZS5jaGlsZDIoKV0pCi0gICAgICAgICAgICAmJiBub2RlLmNhblNwZWN1bGF0
ZUludGVnZXIoKSkgeworICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgbm9k
ZS0+Y2hpbGQyKCkubm9kZSgpKQorICAgICAgICAgICAgJiYgbm9kZS0+Y2FuU3BlY3VsYXRlSW50
ZWdlcigpKSB7CiAgICAgICAgICAgICBzcGVjdWxhdGVJbnQzMkJpbmFyeShub2RlLCB0cnVlKTsg
Ly8gZm9yY2luZyBjYW4tZXhpdCwgd2hpY2ggaXMgYSBiaXQgb24gdGhlIGNvbnNlcnZhdGl2ZSBz
aWRlLgotICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChTcGVjSW50MzIpOworICAg
ICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9CiAgICAgICAgIHNwZWN1bGF0ZU51bWJlckJpbmFyeShub2RlKTsKLSAgICAg
ICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChTcGVjRG91YmxlKTsKKyAgICAgICAgZm9yTm9kZShu
b2RlKS5zZXQoU3BlY0RvdWJsZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgICAg
IAogICAgIGNhc2UgQXJpdGhBYnM6IHsKLSAgICAgICAgSlNWYWx1ZSBjaGlsZCA9IGZvck5vZGUo
bm9kZS5jaGlsZDEoKSkudmFsdWUoKTsKKyAgICAgICAgSlNWYWx1ZSBjaGlsZCA9IGZvck5vZGUo
bm9kZS0+Y2hpbGQxKCkpLnZhbHVlKCk7CiAgICAgICAgIGlmIChjaGlsZCAmJiBjaGlsZC5pc051
bWJlcigpCi0gICAgICAgICAgICAmJiB0cnlTZXRDb25zdGFudChub2RlSW5kZXgsIEpTVmFsdWUo
ZmFicyhjaGlsZC5hc051bWJlcigpKSkpKSB7CisgICAgICAgICAgICAmJiB0cnlTZXRDb25zdGFu
dChub2RlLCBKU1ZhbHVlKGZhYnMoY2hpbGQuYXNOdW1iZXIoKSkpKSkgewogICAgICAgICAgICAg
bV9mb3VuZENvbnN0YW50cyA9IHRydWU7Ci0gICAgICAgICAgICBub2RlLnNldENhbkV4aXQoZmFs
c2UpOworICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQotICAgICAgICBpZiAobV9ncmFwaFtub2RlLmNoaWxkMSgpXS5zaG91
bGRTcGVjdWxhdGVJbnRlZ2VyRm9yQXJpdGhtZXRpYygpCi0gICAgICAgICAgICAmJiBub2RlLmNh
blNwZWN1bGF0ZUludGVnZXIoKSkgeworICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3Vs
ZFNwZWN1bGF0ZUludGVnZXJGb3JBcml0aG1ldGljKCkKKyAgICAgICAgICAgICYmIG5vZGUtPmNh
blNwZWN1bGF0ZUludGVnZXIoKSkgewogICAgICAgICAgICAgc3BlY3VsYXRlSW50MzJVbmFyeShu
b2RlLCB0cnVlKTsKLSAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoU3BlY0ludDMy
KTsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNJbnQzMik7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgfQogICAgICAgICBzcGVjdWxhdGVOdW1iZXJVbmFyeShub2RlKTsK
LSAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChTcGVjRG91YmxlKTsKKyAgICAgICAgZm9y
Tm9kZShub2RlKS5zZXQoU3BlY0RvdWJsZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAg
ICAgICAgIAogICAgIGNhc2UgQXJpdGhTcXJ0OiB7Ci0gICAgICAgIEpTVmFsdWUgY2hpbGQgPSBm
b3JOb2RlKG5vZGUuY2hpbGQxKCkpLnZhbHVlKCk7CisgICAgICAgIEpTVmFsdWUgY2hpbGQgPSBm
b3JOb2RlKG5vZGUtPmNoaWxkMSgpKS52YWx1ZSgpOwogICAgICAgICBpZiAoY2hpbGQgJiYgY2hp
bGQuaXNOdW1iZXIoKQotICAgICAgICAgICAgJiYgdHJ5U2V0Q29uc3RhbnQobm9kZUluZGV4LCBK
U1ZhbHVlKHNxcnQoY2hpbGQuYXNOdW1iZXIoKSkpKSkgeworICAgICAgICAgICAgJiYgdHJ5U2V0
Q29uc3RhbnQobm9kZSwgSlNWYWx1ZShzcXJ0KGNoaWxkLmFzTnVtYmVyKCkpKSkpIHsKICAgICAg
ICAgICAgIG1fZm91bmRDb25zdGFudHMgPSB0cnVlOwotICAgICAgICAgICAgbm9kZS5zZXRDYW5F
eGl0KGZhbHNlKTsKKyAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgc3BlY3VsYXRlTnVtYmVyVW5hcnkobm9k
ZSk7Ci0gICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoU3BlY0RvdWJsZSk7CisgICAgICAg
IGZvck5vZGUobm9kZSkuc2V0KFNwZWNEb3VibGUpOwogICAgICAgICBicmVhazsKICAgICB9CiAg
ICAgICAgICAgICAKICAgICBjYXNlIExvZ2ljYWxOb3Q6IHsKICAgICAgICAgYm9vbCBkaWRTZXRD
b25zdGFudCA9IGZhbHNlOwotICAgICAgICBzd2l0Y2ggKGJvb2xlYW5SZXN1bHQobm9kZSwgZm9y
Tm9kZShub2RlLmNoaWxkMSgpKSkpIHsKKyAgICAgICAgc3dpdGNoIChib29sZWFuUmVzdWx0KG5v
ZGUsIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpKSkgewogICAgICAgICBjYXNlIERlZmluaXRlbHlU
cnVlOgotICAgICAgICAgICAgZGlkU2V0Q29uc3RhbnQgPSB0cnlTZXRDb25zdGFudChub2RlSW5k
ZXgsIGpzQm9vbGVhbihmYWxzZSkpOworICAgICAgICAgICAgZGlkU2V0Q29uc3RhbnQgPSB0cnlT
ZXRDb25zdGFudChub2RlLCBqc0Jvb2xlYW4oZmFsc2UpKTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICBjYXNlIERlZmluaXRlbHlGYWxzZToKLSAgICAgICAgICAgIGRpZFNldENvbnN0YW50
ID0gdHJ5U2V0Q29uc3RhbnQobm9kZUluZGV4LCBqc0Jvb2xlYW4odHJ1ZSkpOworICAgICAgICAg
ICAgZGlkU2V0Q29uc3RhbnQgPSB0cnlTZXRDb25zdGFudChub2RlLCBqc0Jvb2xlYW4odHJ1ZSkp
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgfQogICAgICAgICBpZiAoZGlkU2V0Q29uc3RhbnQpIHsKICAgICAgICAgICAg
IG1fZm91bmRDb25zdGFudHMgPSB0cnVlOwotICAgICAgICAgICAgbm9kZS5zZXRDYW5FeGl0KGZh
bHNlKTsKKyAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgTm9kZSYgY2hpbGQgPSBtX2dyYXBoW25vZGUuY2hp
bGQxKCldOwotICAgICAgICBpZiAoaXNCb29sZWFuU3BlY3VsYXRpb24oY2hpbGQucHJlZGljdGlv
bigpKSkKKyAgICAgICAgTm9kZSogY2hpbGQgPSBub2RlLT5jaGlsZDEoKS5ub2RlKCk7CisgICAg
ICAgIGlmIChpc0Jvb2xlYW5TcGVjdWxhdGlvbihjaGlsZC0+cHJlZGljdGlvbigpKSkKICAgICAg
ICAgICAgIHNwZWN1bGF0ZUJvb2xlYW5VbmFyeShub2RlKTsKLSAgICAgICAgZWxzZSBpZiAoY2hp
bGQuc2hvdWxkU3BlY3VsYXRlTm9uU3RyaW5nQ2VsbE9yT3RoZXIoKSkgewotICAgICAgICAgICAg
bm9kZS5zZXRDYW5FeGl0KHRydWUpOwotICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgp
KS5maWx0ZXIoKFNwZWNDZWxsICYgflNwZWNTdHJpbmcpIHwgU3BlY090aGVyKTsKLSAgICAgICAg
fSBlbHNlIGlmIChjaGlsZC5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpCisgICAgICAgIGVsc2Ug
aWYgKGNoaWxkLT5zaG91bGRTcGVjdWxhdGVOb25TdHJpbmdDZWxsT3JPdGhlcigpKSB7CisgICAg
ICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOworICAgICAgICAgICAgZm9yTm9kZShjaGls
ZCkuZmlsdGVyKChTcGVjQ2VsbCAmIH5TcGVjU3RyaW5nKSB8IFNwZWNPdGhlcik7CisgICAgICAg
IH0gZWxzZSBpZiAoY2hpbGQtPnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKSkKICAgICAgICAgICAg
IHNwZWN1bGF0ZUludDMyVW5hcnkobm9kZSk7Ci0gICAgICAgIGVsc2UgaWYgKGNoaWxkLnNob3Vs
ZFNwZWN1bGF0ZU51bWJlcigpKQorICAgICAgICBlbHNlIGlmIChjaGlsZC0+c2hvdWxkU3BlY3Vs
YXRlTnVtYmVyKCkpCiAgICAgICAgICAgICBzcGVjdWxhdGVOdW1iZXJVbmFyeShub2RlKTsKICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgbm9kZS5zZXRDYW5FeGl0KGZhbHNlKTsKLSAgICAgICAg
Zm9yTm9kZShub2RlSW5kZXgpLnNldChTcGVjQm9vbGVhbik7CisgICAgICAgICAgICBub2RlLT5z
ZXRDYW5FeGl0KGZhbHNlKTsKKyAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0Jvb2xlYW4p
OwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIApAQCAtNjc2LDM2ICs2NzUsMzYgQEAg
Ym9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgIGNhc2UgSXNTdHJp
bmc6CiAgICAgY2FzZSBJc09iamVjdDoKICAgICBjYXNlIElzRnVuY3Rpb246IHsKLSAgICAgICAg
bm9kZS5zZXRDYW5FeGl0KG5vZGUub3AoKSA9PSBJc1VuZGVmaW5lZCAmJiBtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0Rm9yKG5vZGUuY29kZU9yaWdpbiktPm1hc3F1ZXJhZGVzQXNVbmRlZmluZWRX
YXRjaHBvaW50KCktPmlzU3RpbGxWYWxpZCgpKTsKLSAgICAgICAgSlNWYWx1ZSBjaGlsZCA9IGZv
ck5vZGUobm9kZS5jaGlsZDEoKSkudmFsdWUoKTsKKyAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChu
b2RlLT5vcCgpID09IElzVW5kZWZpbmVkICYmIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3RGb3Io
bm9kZS0+Y29kZU9yaWdpbiktPm1hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50KCktPmlz
U3RpbGxWYWxpZCgpKTsKKyAgICAgICAgSlNWYWx1ZSBjaGlsZCA9IGZvck5vZGUobm9kZS0+Y2hp
bGQxKCkpLnZhbHVlKCk7CiAgICAgICAgIGlmIChjaGlsZCkgewogICAgICAgICAgICAgYm9vbCBj
b25zdGFudFdhc1NldDsKLSAgICAgICAgICAgIHN3aXRjaCAobm9kZS5vcCgpKSB7CisgICAgICAg
ICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKICAgICAgICAgICAgIGNhc2UgSXNVbmRlZmluZWQ6
Ci0gICAgICAgICAgICAgICAgaWYgKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3RGb3Iobm9kZS5j
b2RlT3JpZ2luKS0+bWFzcXVlcmFkZXNBc1VuZGVmaW5lZFdhdGNocG9pbnQoKS0+aXNTdGlsbFZh
bGlkKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgY29uc3RhbnRXYXNTZXQgPSB0cnlTZXRDb25z
dGFudChub2RlSW5kZXgsIGpzQm9vbGVhbigKKyAgICAgICAgICAgICAgICBpZiAobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdEZvcihub2RlLT5jb2RlT3JpZ2luKS0+bWFzcXVlcmFkZXNBc1VuZGVm
aW5lZFdhdGNocG9pbnQoKS0+aXNTdGlsbFZhbGlkKCkpIHsKKyAgICAgICAgICAgICAgICAgICAg
Y29uc3RhbnRXYXNTZXQgPSB0cnlTZXRDb25zdGFudChub2RlLCBqc0Jvb2xlYW4oCiAgICAgICAg
ICAgICAgICAgICAgICAgICBjaGlsZC5pc0NlbGwoKQogICAgICAgICAgICAgICAgICAgICAgICAg
PyBmYWxzZSAKICAgICAgICAgICAgICAgICAgICAgICAgIDogY2hpbGQuaXNVbmRlZmluZWQoKSkp
OwogICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnN0YW50
V2FzU2V0ID0gdHJ5U2V0Q29uc3RhbnQobm9kZUluZGV4LCBqc0Jvb2xlYW4oCisgICAgICAgICAg
ICAgICAgICAgIGNvbnN0YW50V2FzU2V0ID0gdHJ5U2V0Q29uc3RhbnQobm9kZSwganNCb29sZWFu
KAogICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGQuaXNDZWxsKCkKLSAgICAgICAgICAgICAg
ICAgICAgICAgID8gY2hpbGQuYXNDZWxsKCktPnN0cnVjdHVyZSgpLT5tYXNxdWVyYWRlc0FzVW5k
ZWZpbmVkKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3RGb3Iobm9kZS5jb2RlT3JpZ2luKSkKKyAg
ICAgICAgICAgICAgICAgICAgICAgID8gY2hpbGQuYXNDZWxsKCktPnN0cnVjdHVyZSgpLT5tYXNx
dWVyYWRlc0FzVW5kZWZpbmVkKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3RGb3Iobm9kZS0+Y29k
ZU9yaWdpbikpCiAgICAgICAgICAgICAgICAgICAgICAgICA6IGNoaWxkLmlzVW5kZWZpbmVkKCkp
KTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICBjYXNlIElzQm9vbGVhbjoKLSAgICAgICAgICAgICAgICBjb25zdGFudFdhc1NldCA9IHRyeVNl
dENvbnN0YW50KG5vZGVJbmRleCwganNCb29sZWFuKGNoaWxkLmlzQm9vbGVhbigpKSk7CisgICAg
ICAgICAgICAgICAgY29uc3RhbnRXYXNTZXQgPSB0cnlTZXRDb25zdGFudChub2RlLCBqc0Jvb2xl
YW4oY2hpbGQuaXNCb29sZWFuKCkpKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgIGNhc2UgSXNOdW1iZXI6Ci0gICAgICAgICAgICAgICAgY29uc3RhbnRXYXNTZXQgPSB0cnlT
ZXRDb25zdGFudChub2RlSW5kZXgsIGpzQm9vbGVhbihjaGlsZC5pc051bWJlcigpKSk7CisgICAg
ICAgICAgICAgICAgY29uc3RhbnRXYXNTZXQgPSB0cnlTZXRDb25zdGFudChub2RlLCBqc0Jvb2xl
YW4oY2hpbGQuaXNOdW1iZXIoKSkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgY2FzZSBJc1N0cmluZzoKLSAgICAgICAgICAgICAgICBjb25zdGFudFdhc1NldCA9IHRyeVNl
dENvbnN0YW50KG5vZGVJbmRleCwganNCb29sZWFuKGlzSlNTdHJpbmcoY2hpbGQpKSk7CisgICAg
ICAgICAgICAgICAgY29uc3RhbnRXYXNTZXQgPSB0cnlTZXRDb25zdGFudChub2RlLCBqc0Jvb2xl
YW4oaXNKU1N0cmluZyhjaGlsZCkpKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgIGNhc2UgSXNPYmplY3Q6CiAgICAgICAgICAgICAgICAgaWYgKGNoaWxkLmlzTnVsbCgpIHx8
ICFjaGlsZC5pc09iamVjdCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnN0YW50V2FzU2V0
ID0gdHJ5U2V0Q29uc3RhbnQobm9kZUluZGV4LCBqc0Jvb2xlYW4oY2hpbGQuaXNOdWxsKCkpKTsK
KyAgICAgICAgICAgICAgICAgICAgY29uc3RhbnRXYXNTZXQgPSB0cnlTZXRDb25zdGFudChub2Rl
LCBqc0Jvb2xlYW4oY2hpbGQuaXNOdWxsKCkpKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgZGVmYXVsdDoKQEAgLTcxOCw2MSArNzE3
LDYxIEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAg
ICAgIH0KICAgICAgICAgfQogCi0gICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoU3BlY0Jv
b2xlYW4pOworICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjQm9vbGVhbik7CiAgICAgICAg
IGJyZWFrOwogICAgIH0KIAogICAgIGNhc2UgVHlwZU9mOiB7CiAgICAgICAgIEpTR2xvYmFsRGF0
YSogZ2xvYmFsRGF0YSA9IG1fY29kZUJsb2NrLT5nbG9iYWxEYXRhKCk7Ci0gICAgICAgIEpTVmFs
dWUgY2hpbGQgPSBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLnZhbHVlKCk7Ci0gICAgICAgIEFic3Ry
YWN0VmFsdWUmIGFic3RyYWN0Q2hpbGQgPSBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpOworICAgICAg
ICBKU1ZhbHVlIGNoaWxkID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSkudmFsdWUoKTsKKyAgICAg
ICAgQWJzdHJhY3RWYWx1ZSYgYWJzdHJhY3RDaGlsZCA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkp
OwogICAgICAgICBpZiAoY2hpbGQpIHsKLSAgICAgICAgICAgIEpTVmFsdWUgdHlwZVN0cmluZyA9
IGpzVHlwZVN0cmluZ0ZvclZhbHVlKCpnbG9iYWxEYXRhLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0Rm9yKG5vZGUuY29kZU9yaWdpbiksIGNoaWxkKTsKLSAgICAgICAgICAgIGlmICh0cnlTZXRD
b25zdGFudChub2RlSW5kZXgsIHR5cGVTdHJpbmcpKSB7CisgICAgICAgICAgICBKU1ZhbHVlIHR5
cGVTdHJpbmcgPSBqc1R5cGVTdHJpbmdGb3JWYWx1ZSgqZ2xvYmFsRGF0YSwgbV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdEZvcihub2RlLT5jb2RlT3JpZ2luKSwgY2hpbGQpOworICAgICAgICAgICAg
aWYgKHRyeVNldENvbnN0YW50KG5vZGUsIHR5cGVTdHJpbmcpKSB7CiAgICAgICAgICAgICAgICAg
bV9mb3VuZENvbnN0YW50cyA9IHRydWU7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICB9CiAgICAgICAgIH0gZWxzZSBpZiAoaXNOdW1iZXJTcGVjdWxhdGlvbihhYnN0cmFjdENo
aWxkLm1fdHlwZSkpIHsKLSAgICAgICAgICAgIGlmICh0cnlTZXRDb25zdGFudChub2RlSW5kZXgs
IGdsb2JhbERhdGEtPnNtYWxsU3RyaW5ncy5udW1iZXJTdHJpbmcoKSkpIHsKLSAgICAgICAgICAg
ICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjTnVtYmVyKTsKKyAgICAgICAg
ICAgIGlmICh0cnlTZXRDb25zdGFudChub2RlLCBnbG9iYWxEYXRhLT5zbWFsbFN0cmluZ3MubnVt
YmVyU3RyaW5nKCkpKSB7CisgICAgICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDEoKSku
ZmlsdGVyKFNwZWNOdW1iZXIpOwogICAgICAgICAgICAgICAgIG1fZm91bmRDb25zdGFudHMgPSB0
cnVlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICB9IGVs
c2UgaWYgKGlzU3RyaW5nU3BlY3VsYXRpb24oYWJzdHJhY3RDaGlsZC5tX3R5cGUpKSB7Ci0gICAg
ICAgICAgICBpZiAodHJ5U2V0Q29uc3RhbnQobm9kZUluZGV4LCBnbG9iYWxEYXRhLT5zbWFsbFN0
cmluZ3Muc3RyaW5nU3RyaW5nKCkpKSB7Ci0gICAgICAgICAgICAgICAgZm9yTm9kZShub2RlLmNo
aWxkMSgpKS5maWx0ZXIoU3BlY1N0cmluZyk7CisgICAgICAgICAgICBpZiAodHJ5U2V0Q29uc3Rh
bnQobm9kZSwgZ2xvYmFsRGF0YS0+c21hbGxTdHJpbmdzLnN0cmluZ1N0cmluZygpKSkgeworICAg
ICAgICAgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRlcihTcGVjU3RyaW5nKTsK
ICAgICAgICAgICAgICAgICBtX2ZvdW5kQ29uc3RhbnRzID0gdHJ1ZTsKICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIGlmIChpc0ZpbmFsT2JqZWN0
U3BlY3VsYXRpb24oYWJzdHJhY3RDaGlsZC5tX3R5cGUpIHx8IGlzQXJyYXlTcGVjdWxhdGlvbihh
YnN0cmFjdENoaWxkLm1fdHlwZSkgfHwgaXNBcmd1bWVudHNTcGVjdWxhdGlvbihhYnN0cmFjdENo
aWxkLm1fdHlwZSkpIHsKLSAgICAgICAgICAgIGlmICh0cnlTZXRDb25zdGFudChub2RlSW5kZXgs
IGdsb2JhbERhdGEtPnNtYWxsU3RyaW5ncy5vYmplY3RTdHJpbmcoKSkpIHsKLSAgICAgICAgICAg
ICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjRmluYWxPYmplY3QgfCBTcGVj
QXJyYXkgfCBTcGVjQXJndW1lbnRzKTsKKyAgICAgICAgICAgIGlmICh0cnlTZXRDb25zdGFudChu
b2RlLCBnbG9iYWxEYXRhLT5zbWFsbFN0cmluZ3Mub2JqZWN0U3RyaW5nKCkpKSB7CisgICAgICAg
ICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDEoKSkuZmlsdGVyKFNwZWNGaW5hbE9iamVjdCB8
IFNwZWNBcnJheSB8IFNwZWNBcmd1bWVudHMpOwogICAgICAgICAgICAgICAgIG1fZm91bmRDb25z
dGFudHMgPSB0cnVlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAg
ICAgICB9IGVsc2UgaWYgKGlzRnVuY3Rpb25TcGVjdWxhdGlvbihhYnN0cmFjdENoaWxkLm1fdHlw
ZSkpIHsKLSAgICAgICAgICAgIGlmICh0cnlTZXRDb25zdGFudChub2RlSW5kZXgsIGdsb2JhbERh
dGEtPnNtYWxsU3RyaW5ncy5mdW5jdGlvblN0cmluZygpKSkgewotICAgICAgICAgICAgICAgIGZv
ck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNGdW5jdGlvbik7CisgICAgICAgICAgICBp
ZiAodHJ5U2V0Q29uc3RhbnQobm9kZSwgZ2xvYmFsRGF0YS0+c21hbGxTdHJpbmdzLmZ1bmN0aW9u
U3RyaW5nKCkpKSB7CisgICAgICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDEoKSkuZmls
dGVyKFNwZWNGdW5jdGlvbik7CiAgICAgICAgICAgICAgICAgbV9mb3VuZENvbnN0YW50cyA9IHRy
dWU7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxz
ZSBpZiAoaXNCb29sZWFuU3BlY3VsYXRpb24oYWJzdHJhY3RDaGlsZC5tX3R5cGUpKSB7Ci0gICAg
ICAgICAgICBpZiAodHJ5U2V0Q29uc3RhbnQobm9kZUluZGV4LCBnbG9iYWxEYXRhLT5zbWFsbFN0
cmluZ3MuYm9vbGVhblN0cmluZygpKSkgewotICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZS5j
aGlsZDEoKSkuZmlsdGVyKFNwZWNCb29sZWFuKTsKKyAgICAgICAgICAgIGlmICh0cnlTZXRDb25z
dGFudChub2RlLCBnbG9iYWxEYXRhLT5zbWFsbFN0cmluZ3MuYm9vbGVhblN0cmluZygpKSkgewor
ICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRlcihTcGVjQm9vbGVh
bik7CiAgICAgICAgICAgICAgICAgbV9mb3VuZENvbnN0YW50cyA9IHRydWU7CiAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICBOb2RlJiBjaGlsZE5vZGUgPSBtX2dyYXBoW25vZGUuY2hpbGQxKCldOwotICAgICAgICAgICAg
aWYgKGlzQ2VsbFNwZWN1bGF0aW9uKGNoaWxkTm9kZS5wcmVkaWN0aW9uKCkpKSB7Ci0gICAgICAg
ICAgICAgICAgaWYgKGlzU3RyaW5nU3BlY3VsYXRpb24oY2hpbGROb2RlLnByZWRpY3Rpb24oKSkp
Ci0gICAgICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNT
dHJpbmcpOworICAgICAgICAgICAgTm9kZSogY2hpbGROb2RlID0gbm9kZS0+Y2hpbGQxKCkubm9k
ZSgpOworICAgICAgICAgICAgaWYgKGlzQ2VsbFNwZWN1bGF0aW9uKGNoaWxkTm9kZS0+cHJlZGlj
dGlvbigpKSkgeworICAgICAgICAgICAgICAgIGlmIChpc1N0cmluZ1NwZWN1bGF0aW9uKGNoaWxk
Tm9kZS0+cHJlZGljdGlvbigpKSkKKyAgICAgICAgICAgICAgICAgICAgZm9yTm9kZShjaGlsZE5v
ZGUpLmZpbHRlcihTcGVjU3RyaW5nKTsKICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAg
ICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNDZWxsKTsKLSAgICAg
ICAgICAgICAgICBub2RlLnNldENhbkV4aXQodHJ1ZSk7CisgICAgICAgICAgICAgICAgICAgIGZv
ck5vZGUoY2hpbGROb2RlKS5maWx0ZXIoU3BlY0NlbGwpOworICAgICAgICAgICAgICAgIG5vZGUt
PnNldENhbkV4aXQodHJ1ZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgZm9y
Tm9kZShub2RlSW5kZXgpLnNldChTcGVjU3RyaW5nKTsKKyAgICAgICAgZm9yTm9kZShub2RlKS5z
ZXQoU3BlY1N0cmluZyk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgICAgIApAQCAt
NzgzLDI2ICs3ODIsMjYgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGlu
ZAogICAgIGNhc2UgQ29tcGFyZUVxOiB7CiAgICAgICAgIGJvb2wgY29uc3RhbnRXYXNTZXQgPSBm
YWxzZTsKIAotICAgICAgICBKU1ZhbHVlIGxlZnRDb25zdCA9IGZvck5vZGUobm9kZS5jaGlsZDEo
KSkudmFsdWUoKTsKLSAgICAgICAgSlNWYWx1ZSByaWdodENvbnN0ID0gZm9yTm9kZShub2RlLmNo
aWxkMigpKS52YWx1ZSgpOworICAgICAgICBKU1ZhbHVlIGxlZnRDb25zdCA9IGZvck5vZGUobm9k
ZS0+Y2hpbGQxKCkpLnZhbHVlKCk7CisgICAgICAgIEpTVmFsdWUgcmlnaHRDb25zdCA9IGZvck5v
ZGUobm9kZS0+Y2hpbGQyKCkpLnZhbHVlKCk7CiAgICAgICAgIGlmIChsZWZ0Q29uc3QgJiYgcmln
aHRDb25zdCAmJiBsZWZ0Q29uc3QuaXNOdW1iZXIoKSAmJiByaWdodENvbnN0LmlzTnVtYmVyKCkp
IHsKICAgICAgICAgICAgIGRvdWJsZSBhID0gbGVmdENvbnN0LmFzTnVtYmVyKCk7CiAgICAgICAg
ICAgICBkb3VibGUgYiA9IHJpZ2h0Q29uc3QuYXNOdW1iZXIoKTsKICAgICAgICAgICAgIHN3aXRj
aCAobm9kZS5vcCgpKSB7CiAgICAgICAgICAgICBjYXNlIENvbXBhcmVMZXNzOgotICAgICAgICAg
ICAgICAgIGNvbnN0YW50V2FzU2V0ID0gdHJ5U2V0Q29uc3RhbnQobm9kZUluZGV4LCBqc0Jvb2xl
YW4oYSA8IGIpKTsKKyAgICAgICAgICAgICAgICBjb25zdGFudFdhc1NldCA9IHRyeVNldENvbnN0
YW50KG5vZGUsIGpzQm9vbGVhbihhIDwgYikpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgY2FzZSBDb21wYXJlTGVzc0VxOgotICAgICAgICAgICAgICAgIGNvbnN0YW50V2Fz
U2V0ID0gdHJ5U2V0Q29uc3RhbnQobm9kZUluZGV4LCBqc0Jvb2xlYW4oYSA8PSBiKSk7CisgICAg
ICAgICAgICAgICAgY29uc3RhbnRXYXNTZXQgPSB0cnlTZXRDb25zdGFudChub2RlLCBqc0Jvb2xl
YW4oYSA8PSBiKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIENv
bXBhcmVHcmVhdGVyOgotICAgICAgICAgICAgICAgIGNvbnN0YW50V2FzU2V0ID0gdHJ5U2V0Q29u
c3RhbnQobm9kZUluZGV4LCBqc0Jvb2xlYW4oYSA+IGIpKTsKKyAgICAgICAgICAgICAgICBjb25z
dGFudFdhc1NldCA9IHRyeVNldENvbnN0YW50KG5vZGUsIGpzQm9vbGVhbihhID4gYikpOwogICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBDb21wYXJlR3JlYXRlckVxOgot
ICAgICAgICAgICAgICAgIGNvbnN0YW50V2FzU2V0ID0gdHJ5U2V0Q29uc3RhbnQobm9kZUluZGV4
LCBqc0Jvb2xlYW4oYSA+PSBiKSk7CisgICAgICAgICAgICAgICAgY29uc3RhbnRXYXNTZXQgPSB0
cnlTZXRDb25zdGFudChub2RlLCBqc0Jvb2xlYW4oYSA+PSBiKSk7CiAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICBjYXNlIENvbXBhcmVFcToKLSAgICAgICAgICAgICAgICBjb25z
dGFudFdhc1NldCA9IHRyeVNldENvbnN0YW50KG5vZGVJbmRleCwganNCb29sZWFuKGEgPT0gYikp
OworICAgICAgICAgICAgICAgIGNvbnN0YW50V2FzU2V0ID0gdHJ5U2V0Q29uc3RhbnQobm9kZSwg
anNCb29sZWFuKGEgPT0gYikpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
ZGVmYXVsdDoKICAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTgxMSwy
NCArODEwLDI0IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAg
ICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgaWYgKCFjb25zdGFudFdh
c1NldCAmJiBub2RlLm9wKCkgPT0gQ29tcGFyZUVxKSB7Ci0gICAgICAgICAgICBTcGVjdWxhdGVk
VHlwZSBsZWZ0VHlwZSA9IGZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlOwotICAgICAgICAg
ICAgU3BlY3VsYXRlZFR5cGUgcmlnaHRUeXBlID0gZm9yTm9kZShub2RlLmNoaWxkMigpKS5tX3R5
cGU7CisgICAgICAgIGlmICghY29uc3RhbnRXYXNTZXQgJiYgbm9kZS0+b3AoKSA9PSBDb21wYXJl
RXEpIHsKKyAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIGxlZnRUeXBlID0gZm9yTm9kZShub2Rl
LT5jaGlsZDEoKSkubV90eXBlOworICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgcmlnaHRUeXBl
ID0gZm9yTm9kZShub2RlLT5jaGlsZDIoKSkubV90eXBlOwogICAgICAgICAgICAgaWYgKChpc0lu
dDMyU3BlY3VsYXRpb24obGVmdFR5cGUpICYmIGlzT3RoZXJTcGVjdWxhdGlvbihyaWdodFR5cGUp
KQogICAgICAgICAgICAgICAgIHx8IChpc090aGVyU3BlY3VsYXRpb24obGVmdFR5cGUpICYmIGlz
SW50MzJTcGVjdWxhdGlvbihyaWdodFR5cGUpKSkKLSAgICAgICAgICAgICAgICBjb25zdGFudFdh
c1NldCA9IHRyeVNldENvbnN0YW50KG5vZGVJbmRleCwganNCb29sZWFuKGZhbHNlKSk7CisgICAg
ICAgICAgICAgICAgY29uc3RhbnRXYXNTZXQgPSB0cnlTZXRDb25zdGFudChub2RlLCBqc0Jvb2xl
YW4oZmFsc2UpKTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgaWYgKGNvbnN0YW50V2Fz
U2V0KSB7CiAgICAgICAgICAgICBtX2ZvdW5kQ29uc3RhbnRzID0gdHJ1ZTsKLSAgICAgICAgICAg
IG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7CisgICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZh
bHNlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBm
b3JOb2RlKG5vZGVJbmRleCkuc2V0KFNwZWNCb29sZWFuKTsKKyAgICAgICAgZm9yTm9kZShub2Rl
KS5zZXQoU3BlY0Jvb2xlYW4pOwogICAgICAgICAKLSAgICAgICAgTm9kZSYgbGVmdCA9IG1fZ3Jh
cGhbbm9kZS5jaGlsZDEoKV07Ci0gICAgICAgIE5vZGUmIHJpZ2h0ID0gbV9ncmFwaFtub2RlLmNo
aWxkMigpXTsKKyAgICAgICAgTm9kZSogbGVmdCA9IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKKyAg
ICAgICAgTm9kZSogcmlnaHQgPSBub2RlLT5jaGlsZDIoKS5ub2RlKCk7CiAgICAgICAgIFNwZWN1
bGF0ZWRUeXBlIGZpbHRlcjsKICAgICAgICAgU3BlY3VsYXRlZFR5cGVDaGVja2VyIGNoZWNrZXI7
CiAgICAgICAgIGlmIChOb2RlOjpzaG91bGRTcGVjdWxhdGVJbnRlZ2VyKGxlZnQsIHJpZ2h0KSkg
ewpAQCAtODM4LDEyMSArODM3LDExOSBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5z
aWduZWQgaW5kCiAgICAgICAgICAgICBmaWx0ZXIgPSBTcGVjTnVtYmVyOwogICAgICAgICAgICAg
Y2hlY2tlciA9IGlzTnVtYmVyU3BlY3VsYXRpb247CiAgICAgICAgIH0gZWxzZSBpZiAobm9kZS5v
cCgpID09IENvbXBhcmVFcSkgewotICAgICAgICAgICAgaWYgKChtX2dyYXBoLmlzQ29uc3RhbnQo
bm9kZS5jaGlsZDEoKS5pbmRleCgpKQotICAgICAgICAgICAgICAgICAmJiBtX2dyYXBoLnZhbHVl
T2ZKU0NvbnN0YW50KG5vZGUuY2hpbGQxKCkuaW5kZXgoKSkuaXNOdWxsKCkpCi0gICAgICAgICAg
ICAgICAgfHwgKG1fZ3JhcGguaXNDb25zdGFudChub2RlLmNoaWxkMigpLmluZGV4KCkpCi0gICAg
ICAgICAgICAgICAgICAgICYmIG1fZ3JhcGgudmFsdWVPZkpTQ29uc3RhbnQobm9kZS5jaGlsZDIo
KS5pbmRleCgpKS5pc051bGwoKSkpIHsKKyAgICAgICAgICAgIGlmICgobV9ncmFwaC5pc0NvbnN0
YW50KGxlZnQpCisgICAgICAgICAgICAgICAgICYmIG1fZ3JhcGgudmFsdWVPZkpTQ29uc3RhbnQo
bGVmdCkuaXNOdWxsKCkpCisgICAgICAgICAgICAgICAgfHwgKG1fZ3JhcGguaXNDb25zdGFudChy
aWdodCkKKyAgICAgICAgICAgICAgICAgICAgJiYgbV9ncmFwaC52YWx1ZU9mSlNDb25zdGFudChy
aWdodCkuaXNOdWxsKCkpKSB7CiAgICAgICAgICAgICAgICAgLy8gV2UgY2FuIGV4aXQgaWYgd2Ug
aGF2ZW4ndCBmaXJlZCB0aGUgTWFzcXVlcmFkZXNBc1VuZGVmaW5kIHdhdGNocG9pbnQgeWV0Lgot
ICAgICAgICAgICAgICAgIG5vZGUuc2V0Q2FuRXhpdChtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
Rm9yKG5vZGUuY29kZU9yaWdpbiktPm1hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50KCkt
PmlzU3RpbGxWYWxpZCgpKTsKKyAgICAgICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3RGb3Iobm9kZS0+Y29kZU9yaWdpbiktPm1hc3F1ZXJhZGVzQXNV
bmRlZmluZWRXYXRjaHBvaW50KCktPmlzU3RpbGxWYWxpZCgpKTsKICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKGxlZnQu
c2hvdWxkU3BlY3VsYXRlU3RyaW5nKCkgfHwgcmlnaHQuc2hvdWxkU3BlY3VsYXRlU3RyaW5nKCkp
IHsKLSAgICAgICAgICAgICAgICBub2RlLnNldENhbkV4aXQoZmFsc2UpOworICAgICAgICAgICAg
aWYgKGxlZnQtPnNob3VsZFNwZWN1bGF0ZVN0cmluZygpIHx8IHJpZ2h0LT5zaG91bGRTcGVjdWxh
dGVTdHJpbmcoKSkgeworICAgICAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwog
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfSAKLSAgICAgICAgICAgIGlmIChs
ZWZ0LnNob3VsZFNwZWN1bGF0ZU5vblN0cmluZ0NlbGwoKSAmJiByaWdodC5zaG91bGRTcGVjdWxh
dGVOb25TdHJpbmdDZWxsT3JPdGhlcigpKSB7Ci0gICAgICAgICAgICAgICAgbm9kZS5zZXRDYW5F
eGl0KHRydWUpOwotICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVy
KFNwZWNDZWxsICYgflNwZWNTdHJpbmcpOwotICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZS5j
aGlsZDIoKSkuZmlsdGVyKChTcGVjQ2VsbCAmIH5TcGVjU3RyaW5nKSB8IFNwZWNPdGhlcik7Ci0g
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAobGVm
dC5zaG91bGRTcGVjdWxhdGVOb25TdHJpbmdDZWxsT3JPdGhlcigpICYmIHJpZ2h0LnNob3VsZFNw
ZWN1bGF0ZU5vblN0cmluZ0NlbGwoKSkgewotICAgICAgICAgICAgICAgIG5vZGUuc2V0Q2FuRXhp
dCh0cnVlKTsKLSAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcigo
U3BlY0NlbGwgJiB+U3BlY1N0cmluZykgfCBTcGVjT3RoZXIpOwotICAgICAgICAgICAgICAgIGZv
ck5vZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKFNwZWNDZWxsICYgflNwZWNTdHJpbmcpOwotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGxlZnQu
c2hvdWxkU3BlY3VsYXRlTm9uU3RyaW5nQ2VsbCgpICYmIHJpZ2h0LnNob3VsZFNwZWN1bGF0ZU5v
blN0cmluZ0NlbGwoKSkgewotICAgICAgICAgICAgICAgIG5vZGUuc2V0Q2FuRXhpdCh0cnVlKTsK
LSAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjQ2VsbCAm
IH5TcGVjU3RyaW5nKTsKLSAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQyKCkpLmZp
bHRlcihTcGVjQ2VsbCAmIH5TcGVjU3RyaW5nKTsKKyAgICAgICAgICAgIGlmIChsZWZ0LT5zaG91
bGRTcGVjdWxhdGVOb25TdHJpbmdDZWxsKCkgJiYgcmlnaHQtPnNob3VsZFNwZWN1bGF0ZU5vblN0
cmluZ0NlbGxPck90aGVyKCkpIHsKKyAgICAgICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRy
dWUpOworICAgICAgICAgICAgICAgIGZvck5vZGUobGVmdCkuZmlsdGVyKFNwZWNDZWxsICYgflNw
ZWNTdHJpbmcpOworICAgICAgICAgICAgICAgIGZvck5vZGUocmlnaHQpLmZpbHRlcigoU3BlY0Nl
bGwgJiB+U3BlY1N0cmluZykgfCBTcGVjT3RoZXIpOworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGxlZnQtPnNob3VsZFNwZWN1bGF0ZU5vblN0
cmluZ0NlbGxPck90aGVyKCkgJiYgcmlnaHQtPnNob3VsZFNwZWN1bGF0ZU5vblN0cmluZ0NlbGwo
KSkgeworICAgICAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7CisgICAgICAgICAg
ICAgICAgZm9yTm9kZShsZWZ0KS5maWx0ZXIoKFNwZWNDZWxsICYgflNwZWNTdHJpbmcpIHwgU3Bl
Y090aGVyKTsKKyAgICAgICAgICAgICAgICBmb3JOb2RlKHJpZ2h0KS5maWx0ZXIoU3BlY0NlbGwg
JiB+U3BlY1N0cmluZyk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBpZiAobGVmdC0+c2hvdWxkU3BlY3VsYXRlTm9uU3RyaW5nQ2VsbCgpICYmIHJp
Z2h0LT5zaG91bGRTcGVjdWxhdGVOb25TdHJpbmdDZWxsKCkpIHsKKyAgICAgICAgICAgICAgICBu
b2RlLT5zZXRDYW5FeGl0KHRydWUpOworICAgICAgICAgICAgICAgIGZvck5vZGUobGVmdCkuZmls
dGVyKFNwZWNDZWxsICYgflNwZWNTdHJpbmcpOworICAgICAgICAgICAgICAgIGZvck5vZGUocmln
aHQpLmZpbHRlcihTcGVjQ2VsbCAmIH5TcGVjU3RyaW5nKTsKICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgIH0KICAKICAgICAgICAgICAgIGZpbHRlciA9IFNwZWNUb3A7CiAgICAg
ICAgICAgICBjaGVja2VyID0gaXNBbnlTcGVjdWxhdGlvbjsKLSAgICAgICAgICAgIGNsb2JiZXJX
b3JsZChub2RlLmNvZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7CisgICAgICAgICAgICBjbG9iYmVy
V29ybGQobm9kZS0+Y29kZU9yaWdpbiwgaW5kZXhJbkJsb2NrKTsKICAgICAgICAgfSBlbHNlIHsK
ICAgICAgICAgICAgIGZpbHRlciA9IFNwZWNUb3A7CiAgICAgICAgICAgICBjaGVja2VyID0gaXNB
bnlTcGVjdWxhdGlvbjsKLSAgICAgICAgICAgIGNsb2JiZXJXb3JsZChub2RlLmNvZGVPcmlnaW4s
IGluZGV4SW5CbG9jayk7CisgICAgICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+Y29kZU9yaWdp
biwgaW5kZXhJbkJsb2NrKTsKICAgICAgICAgfQogICAgICAgICBub2RlLnNldENhbkV4aXQoCi0g
ICAgICAgICAgICAhY2hlY2tlcihmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkKLSAgICAg
ICAgICAgIHx8ICFjaGVja2VyKGZvck5vZGUobm9kZS5jaGlsZDIoKSkubV90eXBlKSk7Ci0gICAg
ICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKGZpbHRlcik7Ci0gICAgICAgIGZvck5v
ZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKGZpbHRlcik7CisgICAgICAgICAgICAhY2hlY2tlcihm
b3JOb2RlKGxlZnQpLm1fdHlwZSkKKyAgICAgICAgICAgIHx8ICFjaGVja2VyKGZvck5vZGUocmln
aHQpLm1fdHlwZSkpOworICAgICAgICBmb3JOb2RlKGxlZnQpLmZpbHRlcihmaWx0ZXIpOworICAg
ICAgICBmb3JOb2RlKHJpZ2h0KS5maWx0ZXIoZmlsdGVyKTsKICAgICAgICAgYnJlYWs7CiAgICAg
fQogICAgICAgICAgICAgCiAgICAgY2FzZSBDb21wYXJlU3RyaWN0RXE6IHsKLSAgICAgICAgSlNW
YWx1ZSBsZWZ0ID0gZm9yTm9kZShub2RlLmNoaWxkMSgpKS52YWx1ZSgpOwotICAgICAgICBKU1Zh
bHVlIHJpZ2h0ID0gZm9yTm9kZShub2RlLmNoaWxkMigpKS52YWx1ZSgpOworICAgICAgICBOb2Rl
KiBsZWZ0Tm9kZSA9IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKKyAgICAgICAgTm9kZSogcmlnaHRO
b2RlID0gbm9kZS0+Y2hpbGQyKCkubm9kZSgpOworICAgICAgICBKU1ZhbHVlIGxlZnQgPSBmb3JO
b2RlKGxlZnROb2RlKS52YWx1ZSgpOworICAgICAgICBKU1ZhbHVlIHJpZ2h0ID0gZm9yTm9kZShy
aWdodE5vZGUpLnZhbHVlKCk7CiAgICAgICAgIGlmIChsZWZ0ICYmIHJpZ2h0ICYmIGxlZnQuaXNO
dW1iZXIoKSAmJiByaWdodC5pc051bWJlcigpCi0gICAgICAgICAgICAmJiB0cnlTZXRDb25zdGFu
dChub2RlSW5kZXgsIGpzQm9vbGVhbihsZWZ0LmFzTnVtYmVyKCkgPT0gcmlnaHQuYXNOdW1iZXIo
KSkpKSB7CisgICAgICAgICAgICAmJiB0cnlTZXRDb25zdGFudChub2RlLCBqc0Jvb2xlYW4obGVm
dC5hc051bWJlcigpID09IHJpZ2h0LmFzTnVtYmVyKCkpKSkgewogICAgICAgICAgICAgbV9mb3Vu
ZENvbnN0YW50cyA9IHRydWU7CiAgICAgICAgICAgICBub2RlLnNldENhbkV4aXQoZmFsc2UpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgZm9yTm9kZShub2RlSW5kZXgp
LnNldChTcGVjQm9vbGVhbik7Ci0gICAgICAgIGlmIChtX2dyYXBoLmlzSlNDb25zdGFudChub2Rl
LmNoaWxkMSgpLmluZGV4KCkpKSB7Ci0gICAgICAgICAgICBKU1ZhbHVlIHZhbHVlID0gbV9ncmFw
aC52YWx1ZU9mSlNDb25zdGFudChub2RlLmNoaWxkMSgpLmluZGV4KCkpOworICAgICAgICBmb3JO
b2RlKG5vZGUpLnNldChTcGVjQm9vbGVhbik7CisgICAgICAgIGlmIChtX2dyYXBoLmlzSlNDb25z
dGFudChsZWZ0Tm9kZSkpIHsKKyAgICAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBtX2dyYXBoLnZh
bHVlT2ZKU0NvbnN0YW50KGxlZnROb2RlKTsKICAgICAgICAgICAgIGlmICghdmFsdWUuaXNOdW1i
ZXIoKSAmJiAhdmFsdWUuaXNTdHJpbmcoKSkgewotICAgICAgICAgICAgICAgIG5vZGUuc2V0Q2Fu
RXhpdChmYWxzZSk7CisgICAgICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CiAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAg
aWYgKG1fZ3JhcGguaXNKU0NvbnN0YW50KG5vZGUuY2hpbGQyKCkuaW5kZXgoKSkpIHsKLSAgICAg
ICAgICAgIEpTVmFsdWUgdmFsdWUgPSBtX2dyYXBoLnZhbHVlT2ZKU0NvbnN0YW50KG5vZGUuY2hp
bGQyKCkuaW5kZXgoKSk7CisgICAgICAgIGlmIChtX2dyYXBoLmlzSlNDb25zdGFudChyaWdodE5v
ZGUpKSB7CisgICAgICAgICAgICBKU1ZhbHVlIHZhbHVlID0gbV9ncmFwaC52YWx1ZU9mSlNDb25z
dGFudChyaWdodE5vZGUpOwogICAgICAgICAgICAgaWYgKCF2YWx1ZS5pc051bWJlcigpICYmICF2
YWx1ZS5pc1N0cmluZygpKSB7Ci0gICAgICAgICAgICAgICAgbm9kZS5zZXRDYW5FeGl0KGZhbHNl
KTsKKyAgICAgICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICBpZiAoTm9kZTo6
c2hvdWxkU3BlY3VsYXRlSW50ZWdlcigKLSAgICAgICAgICAgICAgICBtX2dyYXBoW25vZGUuY2hp
bGQxKCldLCBtX2dyYXBoW25vZGUuY2hpbGQyKCldKSkgeworICAgICAgICBpZiAoTm9kZTo6c2hv
dWxkU3BlY3VsYXRlSW50ZWdlcihsZWZ0Tm9kZSwgcmlnaHROb2RlKSkgewogICAgICAgICAgICAg
c3BlY3VsYXRlSW50MzJCaW5hcnkobm9kZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
fQotICAgICAgICBpZiAoTm9kZTo6c2hvdWxkU3BlY3VsYXRlTnVtYmVyKAotICAgICAgICAgICAg
ICAgIG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0sIG1fZ3JhcGhbbm9kZS5jaGlsZDIoKV0pKSB7Cisg
ICAgICAgIGlmIChOb2RlOjpzaG91bGRTcGVjdWxhdGVOdW1iZXIobGVmdE5vZGUsIHJpZ2h0Tm9k
ZSkpIHsKICAgICAgICAgICAgIHNwZWN1bGF0ZU51bWJlckJpbmFyeShub2RlKTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIE5vZGUmIGxlZnROb2RlID0gbV9ncmFwaFtu
b2RlLmNoaWxkMSgpXTsKLSAgICAgICAgTm9kZSYgcmlnaHROb2RlID0gbV9ncmFwaFtub2RlLmNo
aWxkMigpXTsKLSAgICAgICAgaWYgKGxlZnROb2RlLnNob3VsZFNwZWN1bGF0ZVN0cmluZygpIHx8
IHJpZ2h0Tm9kZS5zaG91bGRTcGVjdWxhdGVTdHJpbmcoKSkgewotICAgICAgICAgICAgbm9kZS5z
ZXRDYW5FeGl0KGZhbHNlKTsKKyAgICAgICAgaWYgKGxlZnROb2RlLT5zaG91bGRTcGVjdWxhdGVT
dHJpbmcoKSB8fCByaWdodE5vZGUtPnNob3VsZFNwZWN1bGF0ZVN0cmluZygpKSB7CisgICAgICAg
ICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9Ci0gICAgICAgIGlmIChsZWZ0Tm9kZS5zaG91bGRTcGVjdWxhdGVOb25TdHJpbmdDZWxsKCkg
JiYgcmlnaHROb2RlLnNob3VsZFNwZWN1bGF0ZU5vblN0cmluZ0NlbGwoKSkgeworICAgICAgICBp
ZiAobGVmdE5vZGUtPnNob3VsZFNwZWN1bGF0ZU5vblN0cmluZ0NlbGwoKSAmJiByaWdodE5vZGUt
PnNob3VsZFNwZWN1bGF0ZU5vblN0cmluZ0NlbGwoKSkgewogICAgICAgICAgICAgbm9kZS5zZXRD
YW5FeGl0KHRydWUpOwotICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIo
KFNwZWNDZWxsICYgflNwZWNTdHJpbmcpIHwgU3BlY090aGVyKTsKLSAgICAgICAgICAgIGZvck5v
ZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKChTcGVjQ2VsbCAmIH5TcGVjU3RyaW5nKSB8IFNwZWNP
dGhlcik7CisgICAgICAgICAgICBmb3JOb2RlKGxlZnROb2RlKS5maWx0ZXIoKFNwZWNDZWxsICYg
flNwZWNTdHJpbmcpIHwgU3BlY090aGVyKTsKKyAgICAgICAgICAgIGZvck5vZGUocmlnaHROb2Rl
KS5maWx0ZXIoKFNwZWNDZWxsICYgflNwZWNTdHJpbmcpIHwgU3BlY090aGVyKTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7Cisg
ICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICBicmVhazsKICAgICB9CiAg
ICAgICAgIAogICAgIGNhc2UgU3RyaW5nQ2hhckNvZGVBdDoKLSAgICAgICAgbm9kZS5zZXRDYW5F
eGl0KHRydWUpOwotICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjU3Ry
aW5nKTsKLSAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMigpKS5maWx0ZXIoU3BlY0ludDMyKTsK
LSAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChTcGVjSW50MzIpOworICAgICAgICBub2Rl
LT5zZXRDYW5FeGl0KHRydWUpOworICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5maWx0
ZXIoU3BlY1N0cmluZyk7CisgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQyKCkpLmZpbHRlcihT
cGVjSW50MzIpOworICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjSW50MzIpOwogICAgICAg
ICBicmVhazsKICAgICAgICAgCiAgICAgY2FzZSBTdHJpbmdDaGFyQXQ6Ci0gICAgICAgIG5vZGUu
c2V0Q2FuRXhpdCh0cnVlKTsKLSAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIo
U3BlY1N0cmluZyk7Ci0gICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJ
bnQzMik7Ci0gICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoU3BlY1N0cmluZyk7CisgICAg
ICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7CisgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQx
KCkpLmZpbHRlcihTcGVjU3RyaW5nKTsKKyAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDIoKSku
ZmlsdGVyKFNwZWNJbnQzMik7CisgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNTdHJpbmcp
OwogICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgIGNhc2UgR2V0QnlWYWw6IHsKLSAg
ICAgICAgbm9kZS5zZXRDYW5FeGl0KHRydWUpOwotICAgICAgICBzd2l0Y2ggKG5vZGUuYXJyYXlN
b2RlKCkudHlwZSgpKSB7CisgICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7CisgICAgICAg
IHN3aXRjaCAobm9kZS0+YXJyYXlNb2RlKCkudHlwZSgpKSB7CiAgICAgICAgIGNhc2UgQXJyYXk6
OlNlbGVjdFVzaW5nUHJlZGljdGlvbnM6CiAgICAgICAgIGNhc2UgQXJyYXk6OlVucHJvZmlsZWQ6
CiAgICAgICAgIGNhc2UgQXJyYXk6OlVuZGVjaWRlZDoKQEAgLTk2Miw4MSArOTU5LDgxIEBAIGJv
b2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgICAgIG1faXNW
YWxpZCA9IGZhbHNlOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6Okdl
bmVyaWM6Ci0gICAgICAgICAgICBjbG9iYmVyV29ybGQobm9kZS5jb2RlT3JpZ2luLCBpbmRleElu
QmxvY2spOwotICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLm1ha2VUb3AoKTsKKyAgICAg
ICAgICAgIGNsb2JiZXJXb3JsZChub2RlLT5jb2RlT3JpZ2luLCBpbmRleEluQmxvY2spOworICAg
ICAgICAgICAgZm9yTm9kZShub2RlKS5tYWtlVG9wKCk7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgY2FzZSBBcnJheTo6U3RyaW5nOgotICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxk
MigpKS5maWx0ZXIoU3BlY0ludDMyKTsKLSAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5z
ZXQoU3BlY1N0cmluZyk7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMigpKS5maWx0
ZXIoU3BlY0ludDMyKTsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNTdHJpbmcp
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OkFyZ3VtZW50czoKLSAg
ICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7Ci0gICAg
ICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkubWFrZVRvcCgpOworICAgICAgICAgICAgZm9yTm9k
ZShub2RlLT5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7CisgICAgICAgICAgICBmb3JOb2Rl
KG5vZGUpLm1ha2VUb3AoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEFycmF5
OjpJbnQzMjoKLSAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJ
bnQzMik7Ci0gICAgICAgICAgICBpZiAobm9kZS5hcnJheU1vZGUoKS5pc091dE9mQm91bmRzKCkp
IHsKLSAgICAgICAgICAgICAgICBjbG9iYmVyV29ybGQobm9kZS5jb2RlT3JpZ2luLCBpbmRleElu
QmxvY2spOwotICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5tYWtlVG9wKCk7Cisg
ICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMigpKS5maWx0ZXIoU3BlY0ludDMyKTsKKyAg
ICAgICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS5pc091dE9mQm91bmRzKCkpIHsKKyAgICAg
ICAgICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+Y29kZU9yaWdpbiwgaW5kZXhJbkJsb2NrKTsK
KyAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLm1ha2VUb3AoKTsKICAgICAgICAgICAgIH0g
ZWxzZQotICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoU3BlY0ludDMyKTsK
KyAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjSW50MzIpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OkRvdWJsZToKLSAgICAgICAgICAgIGZvck5v
ZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7Ci0gICAgICAgICAgICBpZiAobm9k
ZS5hcnJheU1vZGUoKS5pc091dE9mQm91bmRzKCkpIHsKLSAgICAgICAgICAgICAgICBjbG9iYmVy
V29ybGQobm9kZS5jb2RlT3JpZ2luLCBpbmRleEluQmxvY2spOwotICAgICAgICAgICAgICAgIGZv
ck5vZGUobm9kZUluZGV4KS5tYWtlVG9wKCk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKG5vZGUu
YXJyYXlNb2RlKCkuaXNTYW5lQ2hhaW4oKSkKLSAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGVJ
bmRleCkuc2V0KFNwZWNEb3VibGUpOworICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDIo
KSkuZmlsdGVyKFNwZWNJbnQzMik7CisgICAgICAgICAgICBpZiAobm9kZS0+YXJyYXlNb2RlKCku
aXNPdXRPZkJvdW5kcygpKSB7CisgICAgICAgICAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUtPmNv
ZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7CisgICAgICAgICAgICAgICAgZm9yTm9kZShub2RlKS5t
YWtlVG9wKCk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKG5vZGUtPmFycmF5TW9kZSgpLmlzU2Fu
ZUNoYWluKCkpCisgICAgICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0RvdWJsZSk7
CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNl
dChTcGVjRG91YmxlUmVhbCk7CisgICAgICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3Bl
Y0RvdWJsZVJlYWwpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OkNv
bnRpZ3VvdXM6CiAgICAgICAgIGNhc2UgQXJyYXk6OkFycmF5U3RvcmFnZToKICAgICAgICAgY2Fz
ZSBBcnJheTo6U2xvd1B1dEFycmF5U3RvcmFnZToKLSAgICAgICAgICAgIGZvck5vZGUobm9kZS5j
aGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7Ci0gICAgICAgICAgICBpZiAobm9kZS5hcnJheU1v
ZGUoKS5pc091dE9mQm91bmRzKCkpCi0gICAgICAgICAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUu
Y29kZU9yaWdpbiwgaW5kZXhJbkJsb2NrKTsKLSAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4
KS5tYWtlVG9wKCk7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMigpKS5maWx0ZXIo
U3BlY0ludDMyKTsKKyAgICAgICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS5pc091dE9mQm91
bmRzKCkpCisgICAgICAgICAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUtPmNvZGVPcmlnaW4sIGlu
ZGV4SW5CbG9jayk7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLm1ha2VUb3AoKTsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEFycmF5OjpJbnQ4QXJyYXk6Ci0gICAgICAgICAg
ICBmb3JOb2RlKG5vZGUuY2hpbGQyKCkpLmZpbHRlcihTcGVjSW50MzIpOwotICAgICAgICAgICAg
Zm9yTm9kZShub2RlSW5kZXgpLnNldChTcGVjSW50MzIpOworICAgICAgICAgICAgZm9yTm9kZShu
b2RlLT5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7CisgICAgICAgICAgICBmb3JOb2RlKG5v
ZGUpLnNldChTcGVjSW50MzIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJy
YXk6OkludDE2QXJyYXk6Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQyKCkpLmZpbHRl
cihTcGVjSW50MzIpOwotICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChTcGVjSW50
MzIpOworICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQz
Mik7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjSW50MzIpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OkludDMyQXJyYXk6Ci0gICAgICAgICAgICBm
b3JOb2RlKG5vZGUuY2hpbGQyKCkpLmZpbHRlcihTcGVjSW50MzIpOwotICAgICAgICAgICAgZm9y
Tm9kZShub2RlSW5kZXgpLnNldChTcGVjSW50MzIpOworICAgICAgICAgICAgZm9yTm9kZShub2Rl
LT5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUp
LnNldChTcGVjSW50MzIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6
OlVpbnQ4QXJyYXk6Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQyKCkpLmZpbHRlcihT
cGVjSW50MzIpOwotICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChTcGVjSW50MzIp
OworICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7
CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjSW50MzIpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OlVpbnQ4Q2xhbXBlZEFycmF5OgotICAgICAgICAg
ICAgZm9yTm9kZShub2RlLmNoaWxkMigpKS5maWx0ZXIoU3BlY0ludDMyKTsKLSAgICAgICAgICAg
IGZvck5vZGUobm9kZUluZGV4KS5zZXQoU3BlY0ludDMyKTsKKyAgICAgICAgICAgIGZvck5vZGUo
bm9kZS0+Y2hpbGQyKCkpLmZpbHRlcihTcGVjSW50MzIpOworICAgICAgICAgICAgZm9yTm9kZShu
b2RlKS5zZXQoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEFy
cmF5OjpVaW50MTZBcnJheToKLSAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDIoKSkuZmls
dGVyKFNwZWNJbnQzMik7Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFNwZWNJ
bnQzMik7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMigpKS5maWx0ZXIoU3BlY0lu
dDMyKTsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNJbnQzMik7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6VWludDMyQXJyYXk6Ci0gICAgICAgICAg
ICBmb3JOb2RlKG5vZGUuY2hpbGQyKCkpLmZpbHRlcihTcGVjSW50MzIpOwotICAgICAgICAgICAg
aWYgKG5vZGUuc2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKQotICAgICAgICAgICAgICAgIGZvck5v
ZGUobm9kZUluZGV4KS5zZXQoU3BlY0ludDMyKTsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZS0+
Y2hpbGQyKCkpLmZpbHRlcihTcGVjSW50MzIpOworICAgICAgICAgICAgaWYgKG5vZGUtPnNob3Vs
ZFNwZWN1bGF0ZUludGVnZXIoKSkKKyAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChT
cGVjSW50MzIpOwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGZvck5vZGUobm9k
ZUluZGV4KS5zZXQoU3BlY0RvdWJsZSk7CisgICAgICAgICAgICAgICAgZm9yTm9kZShub2RlKS5z
ZXQoU3BlY0RvdWJsZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6
RmxvYXQzMkFycmF5OgotICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMigpKS5maWx0ZXIo
U3BlY0ludDMyKTsKLSAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoU3BlY0RvdWJs
ZSk7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMigpKS5maWx0ZXIoU3BlY0ludDMy
KTsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNEb3VibGUpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OkZsb2F0NjRBcnJheToKLSAgICAgICAgICAg
IGZvck5vZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7Ci0gICAgICAgICAgICBm
b3JOb2RlKG5vZGVJbmRleCkuc2V0KFNwZWNEb3VibGUpOworICAgICAgICAgICAgZm9yTm9kZShu
b2RlLT5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7CisgICAgICAgICAgICBmb3JOb2RlKG5v
ZGUpLnNldChTcGVjRG91YmxlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBkZWZhdWx0
OgogICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC0xMDQ3LDQzICsxMDQ0LDQz
IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgICAg
IAogICAgIGNhc2UgUHV0QnlWYWw6CiAgICAgY2FzZSBQdXRCeVZhbEFsaWFzOiB7Ci0gICAgICAg
IG5vZGUuc2V0Q2FuRXhpdCh0cnVlKTsKKyAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsK
ICAgICAgICAgRWRnZSBjaGlsZDEgPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApOwogICAg
ICAgICBFZGdlIGNoaWxkMiA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSk7CiAgICAgICAg
IEVkZ2UgY2hpbGQzID0gbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAyKTsKLSAgICAgICAgc3dp
dGNoIChub2RlLmFycmF5TW9kZSgpLm1vZGVGb3JQdXQoKS50eXBlKCkpIHsKKyAgICAgICAgc3dp
dGNoIChub2RlLT5hcnJheU1vZGUoKS5tb2RlRm9yUHV0KCkudHlwZSgpKSB7CiAgICAgICAgIGNh
c2UgQXJyYXk6OkZvcmNlRXhpdDoKICAgICAgICAgICAgIG1faXNWYWxpZCA9IGZhbHNlOwogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OkdlbmVyaWM6Ci0gICAgICAgICAg
ICBjbG9iYmVyV29ybGQobm9kZS5jb2RlT3JpZ2luLCBpbmRleEluQmxvY2spOworICAgICAgICAg
ICAgY2xvYmJlcldvcmxkKG5vZGUtPmNvZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6SW50MzI6CiAgICAgICAgICAgICBmb3JO
b2RlKGNoaWxkMSkuZmlsdGVyKFNwZWNDZWxsKTsKICAgICAgICAgICAgIGZvck5vZGUoY2hpbGQy
KS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGZvck5vZGUoY2hpbGQzKS5maWx0ZXIo
U3BlY0ludDMyKTsKLSAgICAgICAgICAgIGlmIChub2RlLmFycmF5TW9kZSgpLmlzT3V0T2ZCb3Vu
ZHMoKSkKLSAgICAgICAgICAgICAgICBjbG9iYmVyV29ybGQobm9kZS5jb2RlT3JpZ2luLCBpbmRl
eEluQmxvY2spOworICAgICAgICAgICAgaWYgKG5vZGUtPmFycmF5TW9kZSgpLmlzT3V0T2ZCb3Vu
ZHMoKSkKKyAgICAgICAgICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+Y29kZU9yaWdpbiwgaW5k
ZXhJbkJsb2NrKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEFycmF5OjpEb3Vi
bGU6CiAgICAgICAgICAgICBmb3JOb2RlKGNoaWxkMSkuZmlsdGVyKFNwZWNDZWxsKTsKICAgICAg
ICAgICAgIGZvck5vZGUoY2hpbGQyKS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGZv
ck5vZGUoY2hpbGQzKS5maWx0ZXIoU3BlY1JlYWxOdW1iZXIpOwotICAgICAgICAgICAgaWYgKG5v
ZGUuYXJyYXlNb2RlKCkuaXNPdXRPZkJvdW5kcygpKQotICAgICAgICAgICAgICAgIGNsb2JiZXJX
b3JsZChub2RlLmNvZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7CisgICAgICAgICAgICBpZiAobm9k
ZS0+YXJyYXlNb2RlKCkuaXNPdXRPZkJvdW5kcygpKQorICAgICAgICAgICAgICAgIGNsb2JiZXJX
b3JsZChub2RlLT5jb2RlT3JpZ2luLCBpbmRleEluQmxvY2spOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3VvdXM6CiAgICAgICAgIGNhc2UgQXJyYXk6OkFy
cmF5U3RvcmFnZToKICAgICAgICAgICAgIGZvck5vZGUoY2hpbGQxKS5maWx0ZXIoU3BlY0NlbGwp
OwogICAgICAgICAgICAgZm9yTm9kZShjaGlsZDIpLmZpbHRlcihTcGVjSW50MzIpOwotICAgICAg
ICAgICAgaWYgKG5vZGUuYXJyYXlNb2RlKCkuaXNPdXRPZkJvdW5kcygpKQotICAgICAgICAgICAg
ICAgIGNsb2JiZXJXb3JsZChub2RlLmNvZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7CisgICAgICAg
ICAgICBpZiAobm9kZS0+YXJyYXlNb2RlKCkuaXNPdXRPZkJvdW5kcygpKQorICAgICAgICAgICAg
ICAgIGNsb2JiZXJXb3JsZChub2RlLT5jb2RlT3JpZ2luLCBpbmRleEluQmxvY2spOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OlNsb3dQdXRBcnJheVN0b3JhZ2U6CiAg
ICAgICAgICAgICBmb3JOb2RlKGNoaWxkMSkuZmlsdGVyKFNwZWNDZWxsKTsKICAgICAgICAgICAg
IGZvck5vZGUoY2hpbGQyKS5maWx0ZXIoU3BlY0ludDMyKTsKLSAgICAgICAgICAgIGlmIChub2Rl
LmFycmF5TW9kZSgpLm1heVN0b3JlVG9Ib2xlKCkpCi0gICAgICAgICAgICAgICAgY2xvYmJlcldv
cmxkKG5vZGUuY29kZU9yaWdpbiwgaW5kZXhJbkJsb2NrKTsKKyAgICAgICAgICAgIGlmIChub2Rl
LT5hcnJheU1vZGUoKS5tYXlTdG9yZVRvSG9sZSgpKQorICAgICAgICAgICAgICAgIGNsb2JiZXJX
b3JsZChub2RlLT5jb2RlT3JpZ2luLCBpbmRleEluQmxvY2spOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIGNhc2UgQXJyYXk6OkFyZ3VtZW50czoKICAgICAgICAgICAgIGZvck5vZGUoY2hp
bGQxKS5maWx0ZXIoU3BlY0NlbGwpOwpAQCAtMTA5Miw3ICsxMDg5LDcgQEAgYm9vbCBBYnN0cmFj
dFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICBjYXNlIEFycmF5OjpJbnQ4QXJy
YXk6CiAgICAgICAgICAgICBmb3JOb2RlKGNoaWxkMSkuZmlsdGVyKFNwZWNDZWxsKTsKICAgICAg
ICAgICAgIGZvck5vZGUoY2hpbGQyKS5maWx0ZXIoU3BlY0ludDMyKTsKLSAgICAgICAgICAgIGlm
IChtX2dyYXBoW2NoaWxkM10uc2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKQorICAgICAgICAgICAg
aWYgKGNoaWxkMy0+c2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKQogICAgICAgICAgICAgICAgIGZv
ck5vZGUoY2hpbGQzKS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGVsc2UKICAgICAg
ICAgICAgICAgICBmb3JOb2RlKGNoaWxkMykuZmlsdGVyKFNwZWNOdW1iZXIpOwpAQCAtMTEwMCw3
ICsxMDk3LDcgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAg
ICAgICBjYXNlIEFycmF5OjpJbnQxNkFycmF5OgogICAgICAgICAgICAgZm9yTm9kZShjaGlsZDEp
LmZpbHRlcihTcGVjQ2VsbCk7CiAgICAgICAgICAgICBmb3JOb2RlKGNoaWxkMikuZmlsdGVyKFNw
ZWNJbnQzMik7Ci0gICAgICAgICAgICBpZiAobV9ncmFwaFtjaGlsZDNdLnNob3VsZFNwZWN1bGF0
ZUludGVnZXIoKSkKKyAgICAgICAgICAgIGlmIChjaGlsZDMtPnNob3VsZFNwZWN1bGF0ZUludGVn
ZXIoKSkKICAgICAgICAgICAgICAgICBmb3JOb2RlKGNoaWxkMykuZmlsdGVyKFNwZWNJbnQzMik7
CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgZm9yTm9kZShjaGlsZDMpLmZpbHRl
cihTcGVjTnVtYmVyKTsKQEAgLTExMDgsNyArMTEwNSw3IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6
ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgY2FzZSBBcnJheTo6SW50MzJBcnJheToKICAg
ICAgICAgICAgIGZvck5vZGUoY2hpbGQxKS5maWx0ZXIoU3BlY0NlbGwpOwogICAgICAgICAgICAg
Zm9yTm9kZShjaGlsZDIpLmZpbHRlcihTcGVjSW50MzIpOwotICAgICAgICAgICAgaWYgKG1fZ3Jh
cGhbY2hpbGQzXS5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpCisgICAgICAgICAgICBpZiAoY2hp
bGQzLT5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpCiAgICAgICAgICAgICAgICAgZm9yTm9kZShj
aGlsZDMpLmZpbHRlcihTcGVjSW50MzIpOwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAg
ICAgIGZvck5vZGUoY2hpbGQzKS5maWx0ZXIoU3BlY051bWJlcik7CkBAIC0xMTE2LDcgKzExMTMs
NyBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgIGNh
c2UgQXJyYXk6OlVpbnQ4QXJyYXk6CiAgICAgICAgICAgICBmb3JOb2RlKGNoaWxkMSkuZmlsdGVy
KFNwZWNDZWxsKTsKICAgICAgICAgICAgIGZvck5vZGUoY2hpbGQyKS5maWx0ZXIoU3BlY0ludDMy
KTsKLSAgICAgICAgICAgIGlmIChtX2dyYXBoW2NoaWxkM10uc2hvdWxkU3BlY3VsYXRlSW50ZWdl
cigpKQorICAgICAgICAgICAgaWYgKGNoaWxkMy0+c2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKQog
ICAgICAgICAgICAgICAgIGZvck5vZGUoY2hpbGQzKS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAg
ICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBmb3JOb2RlKGNoaWxkMykuZmlsdGVyKFNwZWNO
dW1iZXIpOwpAQCAtMTEyNCw3ICsxMTIxLDcgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRl
KHVuc2lnbmVkIGluZAogICAgICAgICBjYXNlIEFycmF5OjpVaW50OENsYW1wZWRBcnJheToKICAg
ICAgICAgICAgIGZvck5vZGUoY2hpbGQxKS5maWx0ZXIoU3BlY0NlbGwpOwogICAgICAgICAgICAg
Zm9yTm9kZShjaGlsZDIpLmZpbHRlcihTcGVjSW50MzIpOwotICAgICAgICAgICAgaWYgKG1fZ3Jh
cGhbY2hpbGQzXS5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpCisgICAgICAgICAgICBpZiAoY2hp
bGQzLT5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpCiAgICAgICAgICAgICAgICAgZm9yTm9kZShj
aGlsZDMpLmZpbHRlcihTcGVjSW50MzIpOwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAg
ICAgIGZvck5vZGUoY2hpbGQzKS5maWx0ZXIoU3BlY051bWJlcik7CkBAIC0xMTMyLDcgKzExMjks
NyBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgIGNh
c2UgQXJyYXk6OlVpbnQxNkFycmF5OgogICAgICAgICAgICAgZm9yTm9kZShjaGlsZDEpLmZpbHRl
cihTcGVjQ2VsbCk7CiAgICAgICAgICAgICBmb3JOb2RlKGNoaWxkMikuZmlsdGVyKFNwZWNJbnQz
Mik7Ci0gICAgICAgICAgICBpZiAobV9ncmFwaFtjaGlsZDNdLnNob3VsZFNwZWN1bGF0ZUludGVn
ZXIoKSkKKyAgICAgICAgICAgIGlmIChjaGlsZDMtPnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKSkK
ICAgICAgICAgICAgICAgICBmb3JOb2RlKGNoaWxkMykuZmlsdGVyKFNwZWNJbnQzMik7CiAgICAg
ICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgZm9yTm9kZShjaGlsZDMpLmZpbHRlcihTcGVj
TnVtYmVyKTsKQEAgLTExNDAsNyArMTEzNyw3IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0
ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgY2FzZSBBcnJheTo6VWludDMyQXJyYXk6CiAgICAgICAg
ICAgICBmb3JOb2RlKGNoaWxkMSkuZmlsdGVyKFNwZWNDZWxsKTsKICAgICAgICAgICAgIGZvck5v
ZGUoY2hpbGQyKS5maWx0ZXIoU3BlY0ludDMyKTsKLSAgICAgICAgICAgIGlmIChtX2dyYXBoW2No
aWxkM10uc2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKQorICAgICAgICAgICAgaWYgKGNoaWxkMy0+
c2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKQogICAgICAgICAgICAgICAgIGZvck5vZGUoY2hpbGQz
KS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBm
b3JOb2RlKGNoaWxkMykuZmlsdGVyKFNwZWNOdW1iZXIpOwpAQCAtMTE2MywxNjYgKzExNjAsMTg4
IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICB9CiAgICAg
ICAgICAgICAKICAgICBjYXNlIEFycmF5UHVzaDoKLSAgICAgICAgbm9kZS5zZXRDYW5FeGl0KHRy
dWUpOwotICAgICAgICBzd2l0Y2ggKG5vZGUuYXJyYXlNb2RlKCkudHlwZSgpKSB7CisgICAgICAg
IG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7CisgICAgICAgIHN3aXRjaCAobm9kZS0+YXJyYXlNb2Rl
KCkudHlwZSgpKSB7CiAgICAgICAgIGNhc2UgQXJyYXk6OkludDMyOgotICAgICAgICAgICAgZm9y
Tm9kZShub2RlLmNoaWxkMigpKS5maWx0ZXIoU3BlY0ludDMyKTsKKyAgICAgICAgICAgIGZvck5v
ZGUobm9kZS0+Y2hpbGQyKCkpLmZpbHRlcihTcGVjSW50MzIpOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIGNhc2UgQXJyYXk6OkRvdWJsZToKLSAgICAgICAgICAgIGZvck5vZGUobm9kZS5j
aGlsZDIoKSkuZmlsdGVyKFNwZWNSZWFsTnVtYmVyKTsKKyAgICAgICAgICAgIGZvck5vZGUobm9k
ZS0+Y2hpbGQyKCkpLmZpbHRlcihTcGVjUmVhbE51bWJlcik7CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAg
IGNsb2JiZXJXb3JsZChub2RlLmNvZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7Ci0gICAgICAgIGZv
ck5vZGUobm9kZUluZGV4KS5zZXQoU3BlY051bWJlcik7CisgICAgICAgIGNsb2JiZXJXb3JsZChu
b2RlLT5jb2RlT3JpZ2luLCBpbmRleEluQmxvY2spOworICAgICAgICBmb3JOb2RlKG5vZGUpLnNl
dChTcGVjTnVtYmVyKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICBjYXNlIEFy
cmF5UG9wOgotICAgICAgICBub2RlLnNldENhbkV4aXQodHJ1ZSk7Ci0gICAgICAgIGNsb2JiZXJX
b3JsZChub2RlLmNvZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7Ci0gICAgICAgIGZvck5vZGUobm9k
ZUluZGV4KS5tYWtlVG9wKCk7CisgICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7CisgICAg
ICAgIGNsb2JiZXJXb3JsZChub2RlLT5jb2RlT3JpZ2luLCBpbmRleEluQmxvY2spOworICAgICAg
ICBmb3JOb2RlKG5vZGUpLm1ha2VUb3AoKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAK
ICAgICBjYXNlIFJlZ0V4cEV4ZWM6CiAgICAgY2FzZSBSZWdFeHBUZXN0OgotICAgICAgICBub2Rl
LnNldENhbkV4aXQoCi0gICAgICAgICAgICAhaXNDZWxsU3BlY3VsYXRpb24oZm9yTm9kZShub2Rl
LmNoaWxkMSgpKS5tX3R5cGUpCi0gICAgICAgICAgICB8fCAhaXNDZWxsU3BlY3VsYXRpb24oZm9y
Tm9kZShub2RlLmNoaWxkMigpKS5tX3R5cGUpKTsKLSAgICAgICAgZm9yTm9kZShub2RlLmNoaWxk
MSgpKS5maWx0ZXIoU3BlY0NlbGwpOwotICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQyKCkpLmZp
bHRlcihTcGVjQ2VsbCk7Ci0gICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5tYWtlVG9wKCk7Cisg
ICAgICAgIG5vZGUtPnNldENhbkV4aXQoCisgICAgICAgICAgICAhaXNDZWxsU3BlY3VsYXRpb24o
Zm9yTm9kZShub2RlLT5jaGlsZDEoKSkubV90eXBlKQorICAgICAgICAgICAgfHwgIWlzQ2VsbFNw
ZWN1bGF0aW9uKGZvck5vZGUobm9kZS0+Y2hpbGQyKCkpLm1fdHlwZSkpOworICAgICAgICBmb3JO
b2RlKG5vZGUtPmNoaWxkMSgpKS5maWx0ZXIoU3BlY0NlbGwpOworICAgICAgICBmb3JOb2RlKG5v
ZGUtPmNoaWxkMigpKS5maWx0ZXIoU3BlY0NlbGwpOworICAgICAgICBmb3JOb2RlKG5vZGUpLm1h
a2VUb3AoKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICBjYXNlIEp1bXA6Ci0g
ICAgICAgIG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7CisgICAgICAgIG5vZGUtPnNldENhbkV4aXQo
ZmFsc2UpOwogICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgIGNhc2UgQnJhbmNoOiB7
Ci0gICAgICAgIEJvb2xlYW5SZXN1bHQgcmVzdWx0ID0gYm9vbGVhblJlc3VsdChub2RlLCBmb3JO
b2RlKG5vZGUuY2hpbGQxKCkpKTsKKyAgICAgICAgTm9kZSogY2hpbGQgPSBub2RlLT5jaGlsZDEo
KS5ub2RlKCk7CisgICAgICAgIEJvb2xlYW5SZXN1bHQgcmVzdWx0ID0gYm9vbGVhblJlc3VsdChu
b2RlLCBmb3JOb2RlKGNoaWxkKSk7CiAgICAgICAgIGlmIChyZXN1bHQgPT0gRGVmaW5pdGVseVRy
dWUpIHsKICAgICAgICAgICAgIG1fYnJhbmNoRGlyZWN0aW9uID0gVGFrZVRydWU7Ci0gICAgICAg
ICAgICBub2RlLnNldENhbkV4aXQoZmFsc2UpOworICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhp
dChmYWxzZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBpZiAocmVz
dWx0ID09IERlZmluaXRlbHlGYWxzZSkgewogICAgICAgICAgICAgbV9icmFuY2hEaXJlY3Rpb24g
PSBUYWtlRmFsc2U7Ci0gICAgICAgICAgICBub2RlLnNldENhbkV4aXQoZmFsc2UpOworICAgICAg
ICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgfQogICAgICAgICAvLyBGSVhNRTogVGhlIGFib3ZlIGhhbmRsZXMgdGhlIHRyaXZpYWwgY2Fz
ZXMgb2Ygc3BhcnNlIGNvbmRpdGlvbmFsCiAgICAgICAgIC8vIGNvbnN0YW50IHByb3BhZ2F0aW9u
LCBidXQgd2UgY2FuIGRvIGJldHRlcjoKICAgICAgICAgLy8gV2UgY2FuIHNwZWNpYWxpemUgdGhl
IHNvdXJjZSB2YXJpYWJsZSdzIHZhbHVlIG9uIGVhY2ggZGlyZWN0aW9uIG9mCiAgICAgICAgIC8v
IHRoZSBicmFuY2guCi0gICAgICAgIE5vZGUmIGNoaWxkID0gbV9ncmFwaFtub2RlLmNoaWxkMSgp
XTsKLSAgICAgICAgaWYgKGNoaWxkLnNob3VsZFNwZWN1bGF0ZUJvb2xlYW4oKSkKKyAgICAgICAg
aWYgKGNoaWxkLT5zaG91bGRTcGVjdWxhdGVCb29sZWFuKCkpCiAgICAgICAgICAgICBzcGVjdWxh
dGVCb29sZWFuVW5hcnkobm9kZSk7Ci0gICAgICAgIGVsc2UgaWYgKGNoaWxkLnNob3VsZFNwZWN1
bGF0ZU5vblN0cmluZ0NlbGxPck90aGVyKCkpIHsKLSAgICAgICAgICAgIG5vZGUuc2V0Q2FuRXhp
dCh0cnVlKTsKLSAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKChTcGVj
Q2VsbCAmIH5TcGVjU3RyaW5nKSB8IFNwZWNPdGhlcik7Ci0gICAgICAgIH0gZWxzZSBpZiAoY2hp
bGQuc2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKQorICAgICAgICBlbHNlIGlmIChjaGlsZC0+c2hv
dWxkU3BlY3VsYXRlTm9uU3RyaW5nQ2VsbE9yT3RoZXIoKSkgeworICAgICAgICAgICAgbm9kZS0+
c2V0Q2FuRXhpdCh0cnVlKTsKKyAgICAgICAgICAgIGZvck5vZGUoY2hpbGQpLmZpbHRlcigoU3Bl
Y0NlbGwgJiB+U3BlY1N0cmluZykgfCBTcGVjT3RoZXIpOworICAgICAgICB9IGVsc2UgaWYgKGNo
aWxkLT5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpCiAgICAgICAgICAgICBzcGVjdWxhdGVJbnQz
MlVuYXJ5KG5vZGUpOwotICAgICAgICBlbHNlIGlmIChjaGlsZC5zaG91bGRTcGVjdWxhdGVOdW1i
ZXIoKSkKKyAgICAgICAgZWxzZSBpZiAoY2hpbGQtPnNob3VsZFNwZWN1bGF0ZU51bWJlcigpKQog
ICAgICAgICAgICAgc3BlY3VsYXRlTnVtYmVyVW5hcnkobm9kZSk7CiAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgIG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7CisgICAgICAgICAgICBub2RlLT5zZXRD
YW5FeGl0KGZhbHNlKTsKICAgICAgICAgbV9icmFuY2hEaXJlY3Rpb24gPSBUYWtlQm90aDsKICAg
ICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAgICAgCiAgICAgY2FzZSBSZXR1cm46CiAgICAg
ICAgIG1faXNWYWxpZCA9IGZhbHNlOwotICAgICAgICBub2RlLnNldENhbkV4aXQoZmFsc2UpOwor
ICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAg
IAogICAgIGNhc2UgVGhyb3c6CiAgICAgY2FzZSBUaHJvd1JlZmVyZW5jZUVycm9yOgogICAgICAg
ICBtX2lzVmFsaWQgPSBmYWxzZTsKLSAgICAgICAgbm9kZS5zZXRDYW5FeGl0KHRydWUpOworICAg
ICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOwogICAgICAgICBicmVhazsKICAgICAgICAgICAg
IAogICAgIGNhc2UgVG9QcmltaXRpdmU6IHsKLSAgICAgICAgSlNWYWx1ZSBjaGlsZENvbnN0ID0g
Zm9yTm9kZShub2RlLmNoaWxkMSgpKS52YWx1ZSgpOwotICAgICAgICBpZiAoY2hpbGRDb25zdCAm
JiBjaGlsZENvbnN0LmlzTnVtYmVyKCkgJiYgdHJ5U2V0Q29uc3RhbnQobm9kZUluZGV4LCBjaGls
ZENvbnN0KSkgeworICAgICAgICBOb2RlKiBjaGlsZCA9IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsK
KyAgICAgICAgCisgICAgICAgIEpTVmFsdWUgY2hpbGRDb25zdCA9IGZvck5vZGUoY2hpbGQpLnZh
bHVlKCk7CisgICAgICAgIGlmIChjaGlsZENvbnN0ICYmIGNoaWxkQ29uc3QuaXNOdW1iZXIoKSAm
JiB0cnlTZXRDb25zdGFudChub2RlLCBjaGlsZENvbnN0KSkgewogICAgICAgICAgICAgbV9mb3Vu
ZENvbnN0YW50cyA9IHRydWU7Ci0gICAgICAgICAgICBub2RlLnNldENhbkV4aXQoZmFsc2UpOwor
ICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgTm9kZSYgY2hpbGQgPSBtX2dyYXBoW25vZGUu
Y2hpbGQxKCldOwotICAgICAgICBpZiAoY2hpbGQuc2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKSB7
CisgICAgICAgIGlmIChjaGlsZC0+c2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKSB7CiAgICAgICAg
ICAgICBzcGVjdWxhdGVJbnQzMlVuYXJ5KG5vZGUpOwotICAgICAgICAgICAgZm9yTm9kZShub2Rl
SW5kZXgpLnNldChTcGVjSW50MzIpOworICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3Bl
Y0ludDMyKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKLSAgICAgICAgQWJzdHJh
Y3RWYWx1ZSYgc291cmNlID0gZm9yTm9kZShub2RlLmNoaWxkMSgpKTsKLSAgICAgICAgQWJzdHJh
Y3RWYWx1ZSYgZGVzdGluYXRpb24gPSBmb3JOb2RlKG5vZGVJbmRleCk7Ci0gICAgICAgICAgICAK
KyAgICAgICAgQWJzdHJhY3RWYWx1ZSYgc291cmNlID0gZm9yTm9kZShjaGlsZCk7CisgICAgICAg
IEFic3RyYWN0VmFsdWUmIGRlc3RpbmF0aW9uID0gZm9yTm9kZShub2RlKTsKKyAgICAgICAgCisg
ICAgICAgIC8vIE5CLiBUaGUgbW9yZSBjYW5vbmljYWwgd2F5IG9mIHdyaXRpbmcgdGhpcyB3b3Vs
ZCBoYXZlIGJlZW46CisgICAgICAgIC8vCisgICAgICAgIC8vIGRlc3RpbmF0aW9uID0gc291cmNl
OworICAgICAgICAvLyBpZiAoZGVzdGluYXRpb24ubV90eXBlICYgIShTcGVjTnVtYmVyIHwgU3Bl
Y1N0cmluZyB8IFNwZWNCb29sZWFuKSkgeworICAgICAgICAvLyAgICAgZGVzdGluYXRpb24uZmls
dGVyKFNwZWNOdW1iZXIgfCBTcGVjU3RyaW5nIHwgU3BlY0Jvb2xlYW4pOworICAgICAgICAvLyAg
ICAgQWJzdHJhY3RWYWx1ZSBzdHJpbmc7CisgICAgICAgIC8vICAgICBzdHJpbmcuc2V0KGdsb2Jh
bERhdGEtPnN0cmluZ1N0cnVjdHVyZSk7CisgICAgICAgIC8vICAgICBkZXN0aW5hdGlvbi5tZXJn
ZShzdHJpbmcpOworICAgICAgICAvLyB9CisgICAgICAgIC8vCisgICAgICAgIC8vIFRoZSByZWFz
b24gd2h5IHRoaXMgd291bGQsIGluIG1vc3Qgb3RoZXIgY2FzZXMsIGhhdmUgYmVlbiBiZXR0ZXIg
aXMgdGhhdAorICAgICAgICAvLyB0aGVuIGRlc3RpbmF0aW9uIHdvdWxkIHByZXNlcnZlIGFueSBu
b24tU3BlY3VsYXRlZFR5cGUga25vd2xlZGdlIG9mIHNvdXJjZS4KKyAgICAgICAgLy8gQXMgaXQg
c3RhbmRzLCB0aGUgY29kZSBiZWxvdyBmb3JnZXRzIGFueSBub24tU3BlY3VsYXRlZFR5cGUga25v
d2xlZGdlIHRoYXQKKyAgICAgICAgLy8gc291cmNlIHdvdWxkIGhhdmUgaGFkLiBGb3J0dW5hdGVs
eSwgdGhvdWdoLCBmb3IgdGhpbmdzIGxpa2Ugc3RyaW5ncyBhbmQKKyAgICAgICAgLy8gbnVtYmVy
cyBhbmQgYm9vbGVhbnMsIHdlIGRvbid0IGNhcmUgYWJvdXQgdGhlIG5vbi1TcGVjdWxhdGVkVHlw
ZSBrbm93ZWRnZToKKyAgICAgICAgLy8gdGhlIHN0cnVjdHVyZSB3b24ndCB0ZWxsIHVzIGFueXRo
aW5nIHdlIGRvbid0IGFscmVhZHkga25vdywgYW5kIG5laXRoZXIKKyAgICAgICAgLy8gd2lsbCBB
cnJheU1vZGVzLiBBbmQgaWYgdGhlIHNvdXJjZSB3YXMgYSBtZWFuaW5nZnVsIGNvbnN0YW50IHRo
ZW4gd2UKKyAgICAgICAgLy8gd291bGQgaGF2ZSBoYW5kbGVkIHRoYXQgYWJvdmUuIFVuZm9ydHVu
YXRlbHksIHRoaXMgZG9lcyBtZWFuIHRoYXQKKyAgICAgICAgLy8gVG9QcmltaXRpdmUgd2lsbCBj
dXJyZW50bHkgZm9yZ2V0IHN0cmluZyBjb25zdGFudHMuIEJ1dCB0aGF0J3Mgbm90IGEgYmlnCisg
ICAgICAgIC8vIGRlYWwgc2luY2Ugd2UgZG9uJ3QgZG8gYW55IG9wdGltaXphdGlvbiBvbiB0aG9z
ZSBjdXJyZW50bHkuCisgICAgICAgIAogICAgICAgICBTcGVjdWxhdGVkVHlwZSB0eXBlID0gc291
cmNlLm1fdHlwZTsKICAgICAgICAgaWYgKHR5cGUgJiB+KFNwZWNOdW1iZXIgfCBTcGVjU3RyaW5n
IHwgU3BlY0Jvb2xlYW4pKSB7CiAgICAgICAgICAgICB0eXBlICY9IChTcGVjTnVtYmVyIHwgU3Bl
Y1N0cmluZyB8IFNwZWNCb29sZWFuKTsKICAgICAgICAgICAgIHR5cGUgfD0gU3BlY1N0cmluZzsK
ICAgICAgICAgfQogICAgICAgICBkZXN0aW5hdGlvbi5zZXQodHlwZSk7Ci0gICAgICAgIG5vZGUu
c2V0Q2FuRXhpdChmYWxzZSk7CisgICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwogICAg
ICAgICBicmVhazsKICAgICB9CiAgICAgICAgICAgICAKICAgICBjYXNlIFN0ckNhdDoKLSAgICAg
ICAgbm9kZS5zZXRDYW5FeGl0KGZhbHNlKTsKLSAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNl
dChTcGVjU3RyaW5nKTsKKyAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CisgICAgICAg
IGZvck5vZGUobm9kZSkuc2V0KFNwZWNTdHJpbmcpOwogICAgICAgICBicmVhazsKICAgICAgICAg
ICAgIAogICAgIGNhc2UgTmV3QXJyYXk6Ci0gICAgICAgIG5vZGUuc2V0Q2FuRXhpdCh0cnVlKTsK
LSAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihu
b2RlLmNvZGVPcmlnaW4pLT5hcnJheVN0cnVjdHVyZUZvckluZGV4aW5nVHlwZUR1cmluZ0FsbG9j
YXRpb24obm9kZS5pbmRleGluZ1R5cGUoKSkpOworICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRy
dWUpOworICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KG1fZ3JhcGguZ2xvYmFsT2JqZWN0
Rm9yKG5vZGUtPmNvZGVPcmlnaW4pLT5hcnJheVN0cnVjdHVyZUZvckluZGV4aW5nVHlwZUR1cmlu
Z0FsbG9jYXRpb24obm9kZS0+aW5kZXhpbmdUeXBlKCkpKTsKICAgICAgICAgbV9oYXZlU3RydWN0
dXJlcyA9IHRydWU7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAKICAgICBjYXNlIE5ld0FycmF5
QnVmZmVyOgotICAgICAgICBub2RlLnNldENhbkV4aXQodHJ1ZSk7Ci0gICAgICAgIGZvck5vZGUo
bm9kZUluZGV4KS5zZXQobV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS5jb2RlT3JpZ2luKS0+
YXJyYXlTdHJ1Y3R1cmVGb3JJbmRleGluZ1R5cGVEdXJpbmdBbGxvY2F0aW9uKG5vZGUuaW5kZXhp
bmdUeXBlKCkpKTsKKyAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKKyAgICAgICAgZm9y
Tm9kZShub2RlKS5zZXQobV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+Y29kZU9yaWdpbikt
PmFycmF5U3RydWN0dXJlRm9ySW5kZXhpbmdUeXBlRHVyaW5nQWxsb2NhdGlvbihub2RlLT5pbmRl
eGluZ1R5cGUoKSkpOwogICAgICAgICBtX2hhdmVTdHJ1Y3R1cmVzID0gdHJ1ZTsKICAgICAgICAg
YnJlYWs7CiAKICAgICBjYXNlIE5ld0FycmF5V2l0aFNpemU6Ci0gICAgICAgIG5vZGUuc2V0Q2Fu
RXhpdCh0cnVlKTsKLSAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY0lu
dDMyKTsKLSAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChTcGVjQXJyYXkpOworICAgICAg
ICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOworICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMSgp
KS5maWx0ZXIoU3BlY0ludDMyKTsKKyAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0FycmF5
KTsKICAgICAgICAgbV9oYXZlU3RydWN0dXJlcyA9IHRydWU7CiAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgCiAgICAgY2FzZSBOZXdSZWdleHA6Ci0gICAgICAgIG5vZGUuc2V0Q2FuRXhpdChm
YWxzZSk7Ci0gICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQobV9ncmFwaC5nbG9iYWxPYmpl
Y3RGb3Iobm9kZS5jb2RlT3JpZ2luKS0+cmVnRXhwU3RydWN0dXJlKCkpOworICAgICAgICBub2Rl
LT5zZXRDYW5FeGl0KGZhbHNlKTsKKyAgICAgICAgZm9yTm9kZShub2RlKS5zZXQobV9ncmFwaC5n
bG9iYWxPYmplY3RGb3Iobm9kZS0+Y29kZU9yaWdpbiktPnJlZ0V4cFN0cnVjdHVyZSgpKTsKICAg
ICAgICAgbV9oYXZlU3RydWN0dXJlcyA9IHRydWU7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgCiAgICAgY2FzZSBDb252ZXJ0VGhpczogewotICAgICAgICBOb2RlJiBjaGlsZCA9IG1fZ3Jh
cGhbbm9kZS5jaGlsZDEoKV07Ci0gICAgICAgIEFic3RyYWN0VmFsdWUmIHNvdXJjZSA9IGZvck5v
ZGUobm9kZS5jaGlsZDEoKSk7Ci0gICAgICAgIEFic3RyYWN0VmFsdWUmIGRlc3RpbmF0aW9uID0g
Zm9yTm9kZShub2RlSW5kZXgpOworICAgICAgICBOb2RlKiBjaGlsZCA9IG5vZGUtPmNoaWxkMSgp
Lm5vZGUoKTsKKyAgICAgICAgQWJzdHJhY3RWYWx1ZSYgc291cmNlID0gZm9yTm9kZShub2RlLT5j
aGlsZDEoKSk7CisgICAgICAgIEFic3RyYWN0VmFsdWUmIGRlc3RpbmF0aW9uID0gZm9yTm9kZShu
b2RlKTsKICAgICAgICAgICAgIAogICAgICAgICBpZiAoaXNPYmplY3RTcGVjdWxhdGlvbihzb3Vy
Y2UubV90eXBlKSkgewogICAgICAgICAgICAgLy8gVGhpcyBpcyB0aGUgc2ltcGxlIGNhc2UuIFdl
IGFscmVhZHkga25vdyB0aGF0IHRoZSBzb3VyY2UgaXMgYW4KICAgICAgICAgICAgIC8vIG9iamVj
dCwgc28gdGhlcmUncyBub3RoaW5nIHRvIGRvLiBJIGRvbid0IHRoaW5rIHRoaXMgY2FzZSB3aWxs
CiAgICAgICAgICAgICAvLyBiZSBoaXQsIGJ1dCB0aGVuIGFnYWluLCB5b3UgbmV2ZXIga25vdy4K
ICAgICAgICAgICAgIGRlc3RpbmF0aW9uID0gc291cmNlOwotICAgICAgICAgICAgbm9kZS5zZXRD
YW5FeGl0KGZhbHNlKTsKKyAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwogICAg
ICAgICAgICAgbV9mb3VuZENvbnN0YW50cyA9IHRydWU7IC8vIFRlbGwgdGhlIGNvbnN0YW50IGZv
bGRlciB0byB0dXJuIHRoaXMgaW50byBJZGVudGl0eS4KICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICB9CiAgICAgICAgIAotICAgICAgICBub2RlLnNldENhbkV4aXQodHJ1ZSk7CisgICAgICAg
IG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7CiAgICAgICAgIAotICAgICAgICBpZiAoaXNPdGhlclNw
ZWN1bGF0aW9uKGNoaWxkLnByZWRpY3Rpb24oKSkpIHsKKyAgICAgICAgaWYgKGlzT3RoZXJTcGVj
dWxhdGlvbihjaGlsZC0+cHJlZGljdGlvbigpKSkgewogICAgICAgICAgICAgc291cmNlLmZpbHRl
cihTcGVjT3RoZXIpOwogICAgICAgICAgICAgZGVzdGluYXRpb24uc2V0KFNwZWNPYmplY3RPdGhl
cik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgaWYg
KGlzT2JqZWN0U3BlY3VsYXRpb24oY2hpbGQucHJlZGljdGlvbigpKSkgeworICAgICAgICBpZiAo
aXNPYmplY3RTcGVjdWxhdGlvbihjaGlsZC0+cHJlZGljdGlvbigpKSkgewogICAgICAgICAgICAg
c291cmNlLmZpbHRlcihTcGVjT2JqZWN0TWFzayk7CiAgICAgICAgICAgICBkZXN0aW5hdGlvbiA9
IHNvdXJjZTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTMzNCwxMCArMTM1MywxMCBAQCBib29s
IEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgfQogCiAgICAgY2FzZSBD
cmVhdGVUaGlzOiB7Ci0gICAgICAgIEFic3RyYWN0VmFsdWUmIHNvdXJjZSA9IGZvck5vZGUobm9k
ZS5jaGlsZDEoKSk7Ci0gICAgICAgIEFic3RyYWN0VmFsdWUmIGRlc3RpbmF0aW9uID0gZm9yTm9k
ZShub2RlSW5kZXgpOworICAgICAgICBBYnN0cmFjdFZhbHVlJiBzb3VyY2UgPSBmb3JOb2RlKG5v
ZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgQWJzdHJhY3RWYWx1ZSYgZGVzdGluYXRpb24gPSBmb3JO
b2RlKG5vZGUpOwogICAgICAgICAKLSAgICAgICAgbm9kZS5zZXRDYW5FeGl0KCFpc0NlbGxTcGVj
dWxhdGlvbihzb3VyY2UubV90eXBlKSk7CisgICAgICAgIG5vZGUtPnNldENhbkV4aXQoIWlzQ2Vs
bFNwZWN1bGF0aW9uKHNvdXJjZS5tX3R5cGUpKTsKICAgICAgICAgICAgIAogICAgICAgICBzb3Vy
Y2UuZmlsdGVyKFNwZWNGdW5jdGlvbik7CiAgICAgICAgIGRlc3RpbmF0aW9uLnNldChTcGVjRmlu
YWxPYmplY3QpOwpAQCAtMTM0NSw0MSArMTM2NCw0MSBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4
ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgfQogICAgICAgICAKICAgICBjYXNlIEluaGVyaXRvcklE
V2F0Y2hwb2ludDoKLSAgICAgICAgbm9kZS5zZXRDYW5FeGl0KHRydWUpOworICAgICAgICBub2Rl
LT5zZXRDYW5FeGl0KHRydWUpOwogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgTmV3T2JqZWN0
OgotICAgICAgICBub2RlLnNldENhbkV4aXQoZmFsc2UpOwotICAgICAgICBmb3JOb2RlKG5vZGVJ
bmRleCkuc2V0KG5vZGUuc3RydWN0dXJlKCkpOworICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZh
bHNlKTsKKyAgICAgICAgZm9yTm9kZShub2RlKS5zZXQobm9kZS0+c3RydWN0dXJlKCkpOwogICAg
ICAgICBtX2hhdmVTdHJ1Y3R1cmVzID0gdHJ1ZTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgIAog
ICAgIGNhc2UgQ3JlYXRlQWN0aXZhdGlvbjoKLSAgICAgICAgbm9kZS5zZXRDYW5FeGl0KGZhbHNl
KTsKLSAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0Rm9yKG5vZGUuY29kZU9yaWdpbiktPmFjdGl2YXRpb25TdHJ1Y3R1cmUoKSk7CisgICAgICAg
IG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOworICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0Rm9yKG5vZGUtPmNvZGVPcmlnaW4pLT5hY3RpdmF0aW9uU3Ry
dWN0dXJlKCkpOwogICAgICAgICBtX2hhdmVTdHJ1Y3R1cmVzID0gdHJ1ZTsKICAgICAgICAgYnJl
YWs7CiAgICAgICAgIAogICAgIGNhc2UgQ3JlYXRlQXJndW1lbnRzOgotICAgICAgICBub2RlLnNl
dENhbkV4aXQoZmFsc2UpOwotICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3RGb3Iobm9kZS5jb2RlT3JpZ2luKS0+YXJndW1lbnRzU3RydWN0dXJl
KCkpOworICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKKyAgICAgICAgZm9yTm9kZShu
b2RlKS5zZXQobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdEZvcihub2RlLT5jb2RlT3JpZ2luKS0+
YXJndW1lbnRzU3RydWN0dXJlKCkpOwogICAgICAgICBtX2hhdmVTdHJ1Y3R1cmVzID0gdHJ1ZTsK
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIAogICAgIGNhc2UgVGVhck9mZkFjdGl2YXRpb246CiAg
ICAgY2FzZSBUZWFyT2ZmQXJndW1lbnRzOgotICAgICAgICBub2RlLnNldENhbkV4aXQoZmFsc2Up
OworICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgLy8gRG9lcyBub3Ro
aW5nIHRoYXQgaXMgdXNlci12aXNpYmxlLgogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgQ2hl
Y2tBcmd1bWVudHNOb3RDcmVhdGVkOgogICAgICAgICBpZiAoaXNFbXB0eVNwZWN1bGF0aW9uKAog
ICAgICAgICAgICAgICAgIG1fdmFyaWFibGVzLm9wZXJhbmQoCi0gICAgICAgICAgICAgICAgICAg
IG1fZ3JhcGguYXJndW1lbnRzUmVnaXN0ZXJGb3Iobm9kZS5jb2RlT3JpZ2luKSkubV90eXBlKSkg
ewotICAgICAgICAgICAgbm9kZS5zZXRDYW5FeGl0KGZhbHNlKTsKKyAgICAgICAgICAgICAgICAg
ICAgbV9ncmFwaC5hcmd1bWVudHNSZWdpc3RlckZvcihub2RlLT5jb2RlT3JpZ2luKSkubV90eXBl
KSkgeworICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgICAgICBt
X2ZvdW5kQ29uc3RhbnRzID0gdHJ1ZTsKICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBub2Rl
LnNldENhbkV4aXQodHJ1ZSk7CisgICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOwog
ICAgICAgICBicmVhazsKICAgICAgICAgCiAgICAgY2FzZSBHZXRNeUFyZ3VtZW50c0xlbmd0aDoK
QEAgLTEzODcsMTExICsxNDA2LDExMSBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5z
aWduZWQgaW5kCiAgICAgICAgIC8vIHRoZSBhcmd1bWVudHMgYSBiaXQuIE5vdGUgdGhhdCB0aGlz
IGlzIG5vdCBzdWZmaWNpZW50IHRvIGZvcmNlIGNvbnN0YW50IGZvbGRpbmcKICAgICAgICAgLy8g
b2YgR2V0TXlBcmd1bWVudHNMZW5ndGgsIGJlY2F1c2UgR2V0TXlBcmd1bWVudHNMZW5ndGggaXMg
YSBjbG9iYmVyaW5nIG9wZXJhdGlvbi4KICAgICAgICAgLy8gV2UgcGVyZm9ybSBmdXJ0aGVyIG9w
dGltaXphdGlvbnMgb24gdGhpcyBsYXRlciBvbi4KLSAgICAgICAgaWYgKG5vZGUuY29kZU9yaWdp
bi5pbmxpbmVDYWxsRnJhbWUpCi0gICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KGpz
TnVtYmVyKG5vZGUuY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50cy5zaXplKCkg
LSAxKSk7CisgICAgICAgIGlmIChub2RlLT5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSkKKyAg
ICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KGpzTnVtYmVyKG5vZGUtPmNvZGVPcmlnaW4uaW5s
aW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgpIC0gMSkpOwogICAgICAgICBlbHNlCi0gICAg
ICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFNwZWNJbnQzMik7CisgICAgICAgICAgICBm
b3JOb2RlKG5vZGUpLnNldChTcGVjSW50MzIpOwogICAgICAgICBub2RlLnNldENhbkV4aXQoCiAg
ICAgICAgICAgICAhaXNFbXB0eVNwZWN1bGF0aW9uKAogICAgICAgICAgICAgICAgIG1fdmFyaWFi
bGVzLm9wZXJhbmQoCi0gICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguYXJndW1lbnRzUmVnaXN0
ZXJGb3Iobm9kZS5jb2RlT3JpZ2luKSkubV90eXBlKSk7CisgICAgICAgICAgICAgICAgICAgIG1f
Z3JhcGguYXJndW1lbnRzUmVnaXN0ZXJGb3Iobm9kZS0+Y29kZU9yaWdpbikpLm1fdHlwZSkpOwog
ICAgICAgICBicmVhazsKICAgICAgICAgCiAgICAgY2FzZSBHZXRNeUFyZ3VtZW50c0xlbmd0aFNh
ZmU6Ci0gICAgICAgIG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7CisgICAgICAgIG5vZGUtPnNldENh
bkV4aXQoZmFsc2UpOwogICAgICAgICAvLyBUaGlzIHBvdGVudGlhbGx5IGNsb2JiZXJzIGFsbCBz
dHJ1Y3R1cmVzIGlmIHRoZSBhcmd1bWVudHMgb2JqZWN0IGhhZCBhIGdldHRlcgogICAgICAgICAv
LyBpbnN0YWxsZWQgb24gdGhlIGxlbmd0aCBwcm9wZXJ0eS4KLSAgICAgICAgY2xvYmJlcldvcmxk
KG5vZGUuY29kZU9yaWdpbiwgaW5kZXhJbkJsb2NrKTsKKyAgICAgICAgY2xvYmJlcldvcmxkKG5v
ZGUtPmNvZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7CiAgICAgICAgIC8vIFdlIGN1cnJlbnRseSBt
YWtlIG5vIGd1YXJhbnRlZSBhYm91dCB3aGF0IHRoaXMgcmV0dXJucyBiZWNhdXNlIGl0IGRvZXMg
bm90CiAgICAgICAgIC8vIHNwZWN1bGF0ZSB0aGF0IHRoZSBsZW5ndGggcHJvcGVydHkgaXMgYWN0
dWFsbHkgYSBsZW5ndGguCi0gICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5tYWtlVG9wKCk7Cisg
ICAgICAgIGZvck5vZGUobm9kZSkubWFrZVRvcCgpOwogICAgICAgICBicmVhazsKICAgICAgICAg
CiAgICAgY2FzZSBHZXRNeUFyZ3VtZW50QnlWYWw6Ci0gICAgICAgIG5vZGUuc2V0Q2FuRXhpdCh0
cnVlKTsKKyAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKICAgICAgICAgLy8gV2Uga25v
dyB0aGF0IHRoaXMgZXhlY3V0YWJsZSBkb2VzIG5vdCBlc2NhcGUgaXRzIGFyZ3VtZW50cywgc28g
d2UgY2FuIG9wdGltaXplCiAgICAgICAgIC8vIHRoZSBhcmd1bWVudHMgYSBiaXQuIE5vdGUgdGhh
dCB0aGlzIGVuZHMgdXAgYmVpbmcgZnVydGhlciBvcHRpbWl6ZWQgYnkgdGhlCiAgICAgICAgIC8v
IEFyZ3VtZW50c1NpbXBsaWZpY2F0aW9uUGhhc2UuCi0gICAgICAgIGZvck5vZGUobm9kZS5jaGls
ZDEoKSkuZmlsdGVyKFNwZWNJbnQzMik7Ci0gICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5tYWtl
VG9wKCk7CisgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRlcihTcGVjSW50MzIp
OworICAgICAgICBmb3JOb2RlKG5vZGUpLm1ha2VUb3AoKTsKICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIAogICAgIGNhc2UgR2V0TXlBcmd1bWVudEJ5VmFsU2FmZToKLSAgICAgICAgbm9kZS5zZXRD
YW5FeGl0KHRydWUpOworICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOwogICAgICAgICAv
LyBUaGlzIHBvdGVudGlhbGx5IGNsb2JiZXJzIGFsbCBzdHJ1Y3R1cmVzIGlmIHRoZSBwcm9wZXJ0
eSB3ZSdyZSBhY2Nlc3NpbmcgaGFzCiAgICAgICAgIC8vIGEgZ2V0dGVyLiBXZSBkb24ndCBzcGVj
dWxhdGUgYWdhaW5zdCB0aGlzLgotICAgICAgICBjbG9iYmVyV29ybGQobm9kZS5jb2RlT3JpZ2lu
LCBpbmRleEluQmxvY2spOworICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+Y29kZU9yaWdpbiwg
aW5kZXhJbkJsb2NrKTsKICAgICAgICAgLy8gQnV0IHdlIGRvIHNwZWN1bGF0ZSB0aGF0IHRoZSBp
bmRleCBpcyBhbiBpbnRlZ2VyLgotICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRl
cihTcGVjSW50MzIpOworICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5maWx0ZXIoU3Bl
Y0ludDMyKTsKICAgICAgICAgLy8gQW5kIHRoZSByZXN1bHQgaXMgdW5rbm93bi4KLSAgICAgICAg
Zm9yTm9kZShub2RlSW5kZXgpLm1ha2VUb3AoKTsKKyAgICAgICAgZm9yTm9kZShub2RlKS5tYWtl
VG9wKCk7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAKICAgICBjYXNlIE5ld0Z1bmN0aW9uOgog
ICAgIGNhc2UgTmV3RnVuY3Rpb25FeHByZXNzaW9uOgogICAgIGNhc2UgTmV3RnVuY3Rpb25Ob0No
ZWNrOgotICAgICAgICBub2RlLnNldENhbkV4aXQoZmFsc2UpOwotICAgICAgICBmb3JOb2RlKG5v
ZGVJbmRleCkuc2V0KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3RGb3Iobm9kZS5jb2RlT3JpZ2lu
KS0+ZnVuY3Rpb25TdHJ1Y3R1cmUoKSk7CisgICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2Up
OworICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0Rm9y
KG5vZGUtPmNvZGVPcmlnaW4pLT5mdW5jdGlvblN0cnVjdHVyZSgpKTsKICAgICAgICAgYnJlYWs7
CiAgICAgICAgIAogICAgIGNhc2UgR2V0Q2FsbGVlOgotICAgICAgICBub2RlLnNldENhbkV4aXQo
ZmFsc2UpOwotICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFNwZWNGdW5jdGlvbik7Cisg
ICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOworICAgICAgICBmb3JOb2RlKG5vZGUpLnNl
dChTcGVjRnVuY3Rpb24pOwogICAgICAgICBicmVhazsKICAgICAgICAgCiAgICAgY2FzZSBTZXRD
YWxsZWU6CiAgICAgY2FzZSBTZXRNeVNjb3BlOgotICAgICAgICBub2RlLnNldENhbkV4aXQoZmFs
c2UpOworICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICAKICAgICBjYXNlIEdldFNjb3BlOiAvLyBGSVhNRTogV2UgY291bGQgZ2V0IHJp
ZCBvZiB0aGVzZSBpZiB3ZSBrbm93IHRoYXQgdGhlIEpTRnVuY3Rpb24gaXMgYSBjb25zdGFudC4g
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwNjIwMgogICAgIGNhc2Ug
R2V0TXlTY29wZToKICAgICBjYXNlIFNraXBUb3BTY29wZToKLSAgICAgICAgbm9kZS5zZXRDYW5F
eGl0KGZhbHNlKTsKLSAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChTcGVjQ2VsbE90aGVy
KTsKKyAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CisgICAgICAgIGZvck5vZGUobm9k
ZSkuc2V0KFNwZWNDZWxsT3RoZXIpOwogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgU2tpcFNj
b3BlOiB7Ci0gICAgICAgIG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7Ci0gICAgICAgIEpTVmFsdWUg
Y2hpbGQgPSBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLnZhbHVlKCk7Ci0gICAgICAgIGlmIChjaGls
ZCAmJiB0cnlTZXRDb25zdGFudChub2RlSW5kZXgsIEpTVmFsdWUoanNDYXN0PEpTU2NvcGUqPihj
aGlsZC5hc0NlbGwoKSktPm5leHQoKSkpKSB7CisgICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFs
c2UpOworICAgICAgICBKU1ZhbHVlIGNoaWxkID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSkudmFs
dWUoKTsKKyAgICAgICAgaWYgKGNoaWxkICYmIHRyeVNldENvbnN0YW50KG5vZGUsIEpTVmFsdWUo
anNDYXN0PEpTU2NvcGUqPihjaGlsZC5hc0NlbGwoKSktPm5leHQoKSkpKSB7CiAgICAgICAgICAg
ICBtX2ZvdW5kQ29uc3RhbnRzID0gdHJ1ZTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9
Ci0gICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoU3BlY0NlbGxPdGhlcik7CisgICAgICAg
IGZvck5vZGUobm9kZSkuc2V0KFNwZWNDZWxsT3RoZXIpOwogICAgICAgICBicmVhazsKICAgICB9
CiAKICAgICBjYXNlIEdldFNjb3BlUmVnaXN0ZXJzOgotICAgICAgICBub2RlLnNldENhbkV4aXQo
ZmFsc2UpOwotICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjQ2VsbCk7
Ci0gICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5jbGVhcigpOyAvLyBUaGUgcmVzdWx0IGlzIG5v
dCBhIEpTIHZhbHVlLgorICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKKyAgICAgICAg
Zm9yTm9kZShub2RlLT5jaGlsZDEoKSkuZmlsdGVyKFNwZWNDZWxsKTsKKyAgICAgICAgZm9yTm9k
ZShub2RlKS5jbGVhcigpOyAvLyBUaGUgcmVzdWx0IGlzIG5vdCBhIEpTIHZhbHVlLgogICAgICAg
ICBicmVhazsKIAogICAgIGNhc2UgR2V0U2NvcGVkVmFyOgotICAgICAgICBub2RlLnNldENhbkV4
aXQoZmFsc2UpOwotICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkubWFrZVRvcCgpOworICAgICAg
ICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKKyAgICAgICAgZm9yTm9kZShub2RlKS5tYWtlVG9w
KCk7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAgY2FzZSBQdXRTY29wZWRWYXI6
Ci0gICAgICAgIG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7Ci0gICAgICAgIGNsb2JiZXJDYXB0dXJl
ZFZhcnMobm9kZS5jb2RlT3JpZ2luKTsKKyAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7
CisgICAgICAgIGNsb2JiZXJDYXB0dXJlZFZhcnMobm9kZS0+Y29kZU9yaWdpbik7CiAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgCiAgICAgY2FzZSBHZXRCeUlkOgogICAgIGNhc2UgR2V0QnlJ
ZEZsdXNoOgotICAgICAgICBub2RlLnNldENhbkV4aXQodHJ1ZSk7Ci0gICAgICAgIGlmICghbm9k
ZS5wcmVkaWN0aW9uKCkpIHsKKyAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKKyAgICAg
ICAgaWYgKCFub2RlLT5wcmVkaWN0aW9uKCkpIHsKICAgICAgICAgICAgIG1faXNWYWxpZCA9IGZh
bHNlOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKGlzQ2VsbFNw
ZWN1bGF0aW9uKG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ucHJlZGljdGlvbigpKSkgewotICAgICAg
ICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY0NlbGwpOworICAgICAgICBp
ZiAoaXNDZWxsU3BlY3VsYXRpb24obm9kZS0+Y2hpbGQxKCktPnByZWRpY3Rpb24oKSkpIHsKKyAg
ICAgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRlcihTcGVjQ2VsbCk7CiAKLSAg
ICAgICAgICAgIGlmIChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGZvck5vZGUobm9kZS5jaGlsZDEo
KSkuYmVzdFByb3ZlblN0cnVjdHVyZSgpKSB7CisgICAgICAgICAgICBpZiAoU3RydWN0dXJlKiBz
dHJ1Y3R1cmUgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5iZXN0UHJvdmVuU3RydWN0dXJlKCkp
IHsKICAgICAgICAgICAgICAgICBHZXRCeUlkU3RhdHVzIHN0YXR1cyA9IEdldEJ5SWRTdGF0dXM6
OmNvbXB1dGVGb3IoCiAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgubV9nbG9iYWxEYXRhLCBz
dHJ1Y3R1cmUsCi0gICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgubV9jb2RlQmxvY2stPmlkZW50
aWZpZXIobm9kZS5pZGVudGlmaWVyTnVtYmVyKCkpKTsKKyAgICAgICAgICAgICAgICAgICAgbV9n
cmFwaC5tX2NvZGVCbG9jay0+aWRlbnRpZmllcihub2RlLT5pZGVudGlmaWVyTnVtYmVyKCkpKTsK
ICAgICAgICAgICAgICAgICBpZiAoc3RhdHVzLmlzU2ltcGxlKCkpIHsKICAgICAgICAgICAgICAg
ICAgICAgLy8gQXNzZXJ0IHRoaW5ncyB0aGF0IHdlIGNhbid0IGhhbmRsZSBhbmQgdGhhdCB0aGUg
Y29tcHV0ZUZvcigpIG1ldGhvZAogICAgICAgICAgICAgICAgICAgICAvLyBhYm92ZSB3b24ndCBi
ZSBhYmxlIHRvIHJldHVybi4KQEAgLTE0OTksMjMgKzE1MTgsMjMgQEAgYm9vbCBBYnN0cmFjdFN0
YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICAgICAgICAgICAgICBBU1NFUlQoc3Rh
dHVzLmNoYWluKCkuaXNFbXB0eSgpKTsKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAg
ICAgICAgICAgIGlmIChzdGF0dXMuc3BlY2lmaWNWYWx1ZSgpKQotICAgICAgICAgICAgICAgICAg
ICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChzdGF0dXMuc3BlY2lmaWNWYWx1ZSgpKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KHN0YXR1cy5zcGVjaWZpY1Zh
bHVlKCkpOwogICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAg
ICBmb3JOb2RlKG5vZGVJbmRleCkubWFrZVRvcCgpOwotICAgICAgICAgICAgICAgICAgICBmb3JO
b2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihzdGF0dXMuc3RydWN0dXJlU2V0KCkpOworICAgICAg
ICAgICAgICAgICAgICAgICAgZm9yTm9kZShub2RlKS5tYWtlVG9wKCk7CisgICAgICAgICAgICAg
ICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRlcihzdGF0dXMuc3RydWN0dXJlU2V0
KCkpOwogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgbV9mb3VuZENv
bnN0YW50cyA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICBjbG9iYmVyV29ybGQobm9k
ZS5jb2RlT3JpZ2luLCBpbmRleEluQmxvY2spOwotICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCku
bWFrZVRvcCgpOworICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+Y29kZU9yaWdpbiwgaW5kZXhJ
bkJsb2NrKTsKKyAgICAgICAgZm9yTm9kZShub2RlKS5tYWtlVG9wKCk7CiAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgCiAgICAgY2FzZSBHZXRBcnJheUxlbmd0aDoKLSAgICAgICAgbm9kZS5z
ZXRDYW5FeGl0KHRydWUpOyAvLyBMaWVzLCBidXQgaXQncyB0cnVlIGZvciB0aGUgY29tbW9uIGNh
c2Ugb2YgSlNBcnJheSwgc28gaXQncyBnb29kIGVub3VnaC4KLSAgICAgICAgZm9yTm9kZShub2Rl
SW5kZXgpLnNldChTcGVjSW50MzIpOworICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOyAv
LyBMaWVzLCBidXQgaXQncyB0cnVlIGZvciB0aGUgY29tbW9uIGNhc2Ugb2YgSlNBcnJheSwgc28g
aXQncyBnb29kIGVub3VnaC4KKyAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0ludDMyKTsK
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIAogICAgIGNhc2UgQ2hlY2tFeGVjdXRhYmxlOiB7CkBA
IC0xNTIzLDIzICsxNTQyLDIzIEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25l
ZCBpbmQKICAgICAgICAgLy8gbW9yZSB0aG9yb3VnaGx5LiBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTA2MjAwCiAgICAgICAgIC8vIEZJWE1FOiBXZSBjb3VsZCBlbGlt
aW5hdGUgdGhlc2UgZW50aXJlbHkgaWYgd2Uga25vdyB0aGUgZXhhY3QgdmFsdWUgdGhhdCBmbG93
cyBpbnRvIHRoaXMuCiAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xMDYyMDEKLSAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3Bl
Y0NlbGwpOwotICAgICAgICBub2RlLnNldENhbkV4aXQodHJ1ZSk7CisgICAgICAgIGZvck5vZGUo
bm9kZS0+Y2hpbGQxKCkpLmZpbHRlcihTcGVjQ2VsbCk7CisgICAgICAgIG5vZGUtPnNldENhbkV4
aXQodHJ1ZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIAogICAgIGNhc2UgQ2hlY2tTdHJ1Y3R1
cmU6CiAgICAgY2FzZSBGb3J3YXJkQ2hlY2tTdHJ1Y3R1cmU6IHsKICAgICAgICAgLy8gRklYTUU6
IFdlIHNob3VsZCBiZSBhYmxlIHRvIHByb3BhZ2F0ZSB0aGUgc3RydWN0dXJlIHNldHMgb2YgY29u
c3RhbnRzIChpLmUuIHByb3RvdHlwZXMpLgotICAgICAgICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSA9
IGZvck5vZGUobm9kZS5jaGlsZDEoKSk7CisgICAgICAgIEFic3RyYWN0VmFsdWUmIHZhbHVlID0g
Zm9yTm9kZShub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgIC8vIElmIHRoaXMgc3RydWN0dXJlIGNo
ZWNrIGlzIGF0dGVtcHRpbmcgdG8gcHJvdmUga25vd2xlZGdlIGFscmVhZHkgaGVsZCBpbgogICAg
ICAgICAvLyB0aGUgZnV0dXJlUG9zc2libGVTdHJ1Y3R1cmUgc2V0IHRoZW4gdGhlIGNvbnN0YW50
IGZvbGRpbmcgcGhhc2Ugc2hvdWxkCiAgICAgICAgIC8vIHR1cm4gdGhpcyBpbnRvIGEgd2F0Y2hw
b2ludCBpbnN0ZWFkLgotICAgICAgICBTdHJ1Y3R1cmVTZXQmIHNldCA9IG5vZGUuc3RydWN0dXJl
U2V0KCk7CisgICAgICAgIFN0cnVjdHVyZVNldCYgc2V0ID0gbm9kZS0+c3RydWN0dXJlU2V0KCk7
CiAgICAgICAgIGlmICh2YWx1ZS5tX2Z1dHVyZVBvc3NpYmxlU3RydWN0dXJlLmlzU3Vic2V0T2Yo
c2V0KQogICAgICAgICAgICAgfHwgdmFsdWUubV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuaXNTdWJz
ZXRPZihzZXQpKQogICAgICAgICAgICAgbV9mb3VuZENvbnN0YW50cyA9IHRydWU7Ci0gICAgICAg
IG5vZGUuc2V0Q2FuRXhpdCgKKyAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCgKICAgICAgICAgICAg
ICF2YWx1ZS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5pc1N1YnNldE9mKHNldCkKICAgICAgICAg
ICAgIHx8ICFpc0NlbGxTcGVjdWxhdGlvbih2YWx1ZS5tX3R5cGUpKTsKICAgICAgICAgdmFsdWUu
ZmlsdGVyKHNldCk7CkBAIC0xNTQ5LDcgKzE1NjgsNyBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4
ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgIAogICAgIGNhc2UgU3RydWN0dXJlVHJhbnNpdGlv
bldhdGNocG9pbnQ6CiAgICAgY2FzZSBGb3J3YXJkU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9p
bnQ6IHsKLSAgICAgICAgQWJzdHJhY3RWYWx1ZSYgdmFsdWUgPSBmb3JOb2RlKG5vZGUuY2hpbGQx
KCkpOworICAgICAgICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSA9IGZvck5vZGUobm9kZS0+Y2hpbGQx
KCkpOwogCiAgICAgICAgIC8vIEl0J3Mgb25seSB2YWxpZCB0byBpc3N1ZSBhIHN0cnVjdHVyZSB0
cmFuc2l0aW9uIHdhdGNocG9pbnQgaWYgd2UgYWxyZWFkeQogICAgICAgICAvLyBrbm93IHRoYXQg
dGhlIHdhdGNocG9pbnQgY292ZXJzIGEgc3VwZXJzZXQgb2YgdGhlIHN0cnVjdHVyZXMga25vd24g
dG8KQEAgLTE1NTcsMTU0ICsxNTc2LDE1NCBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUo
dW5zaWduZWQgaW5kCiAgICAgICAgIC8vIEN1cnJlbnRseSwgd2Ugb25seSBpc3N1ZSBzaW5nbGV0
b24gd2F0Y2hwb2ludHMgKHRoYXQgY2hlY2sgb25lIHN0cnVjdHVyZSkKICAgICAgICAgLy8gYW5k
IG91ciBmdXR1cmVQb3NzaWJsZVN0cnVjdHVyZSBzZXQgY2FuIG9ubHkgY29udGFpbiB6ZXJvLCBv
bmUsIG9yIGFuCiAgICAgICAgIC8vIGluZmluaXR5IG9mIHN0cnVjdHVyZXMuCi0gICAgICAgIEFT
U0VSVCh2YWx1ZS5tX2Z1dHVyZVBvc3NpYmxlU3RydWN0dXJlLmlzU3Vic2V0T2YoU3RydWN0dXJl
U2V0KG5vZGUuc3RydWN0dXJlKCkpKSk7CisgICAgICAgIEFTU0VSVCh2YWx1ZS5tX2Z1dHVyZVBv
c3NpYmxlU3RydWN0dXJlLmlzU3Vic2V0T2YoU3RydWN0dXJlU2V0KG5vZGUtPnN0cnVjdHVyZSgp
KSkpOwogICAgICAgICAKICAgICAgICAgQVNTRVJUKHZhbHVlLmlzQ2xlYXIoKSB8fCBpc0NlbGxT
cGVjdWxhdGlvbih2YWx1ZS5tX3R5cGUpKTsgLy8gVmFsdWUgY291bGQgYmUgY2xlYXIgaWYgd2Un
dmUgcHJvdmVuIG11c3QtZXhpdCBkdWUgdG8gYSBzcGVjdWxhdGlvbiBzdGF0aWNhbGx5IGtub3du
IHRvIGJlIGJhZC4KLSAgICAgICAgdmFsdWUuZmlsdGVyKG5vZGUuc3RydWN0dXJlKCkpOworICAg
ICAgICB2YWx1ZS5maWx0ZXIobm9kZS0+c3RydWN0dXJlKCkpOwogICAgICAgICBtX2hhdmVTdHJ1
Y3R1cmVzID0gdHJ1ZTsKLSAgICAgICAgbm9kZS5zZXRDYW5FeGl0KHRydWUpOworICAgICAgICBu
b2RlLT5zZXRDYW5FeGl0KHRydWUpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgICAg
ICAKICAgICBjYXNlIFB1dFN0cnVjdHVyZToKICAgICBjYXNlIFBoYW50b21QdXRTdHJ1Y3R1cmU6
Ci0gICAgICAgIG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7Ci0gICAgICAgIGlmICghZm9yTm9kZShu
b2RlLmNoaWxkMSgpKS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5pc0NsZWFyKCkpIHsKKyAgICAg
ICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CisgICAgICAgIGlmICghZm9yTm9kZShub2RlLT5j
aGlsZDEoKSkubV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuaXNDbGVhcigpKSB7CiAgICAgICAgICAg
ICBjbG9iYmVyU3RydWN0dXJlcyhpbmRleEluQmxvY2spOwotICAgICAgICAgICAgZm9yTm9kZShu
b2RlLmNoaWxkMSgpKS5zZXQobm9kZS5zdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSgpLm5ld1N0cnVj
dHVyZSk7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5zZXQobm9kZS0+c3Ry
dWN0dXJlVHJhbnNpdGlvbkRhdGEoKS5uZXdTdHJ1Y3R1cmUpOwogICAgICAgICAgICAgbV9oYXZl
U3RydWN0dXJlcyA9IHRydWU7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBH
ZXRCdXR0ZXJmbHk6CiAgICAgY2FzZSBBbGxvY2F0ZVByb3BlcnR5U3RvcmFnZToKICAgICBjYXNl
IFJlYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2U6Ci0gICAgICAgIG5vZGUuc2V0Q2FuRXhpdCghaXND
ZWxsU3BlY3VsYXRpb24oZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKTsKLSAgICAgICAg
Zm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY0NlbGwpOwotICAgICAgICBmb3JOb2Rl
KG5vZGVJbmRleCkuY2xlYXIoKTsgLy8gVGhlIHJlc3VsdCBpcyBub3QgYSBKUyB2YWx1ZS4KKyAg
ICAgICAgbm9kZS0+c2V0Q2FuRXhpdCghaXNDZWxsU3BlY3VsYXRpb24oZm9yTm9kZShub2RlLT5j
aGlsZDEoKSkubV90eXBlKSk7CisgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRl
cihTcGVjQ2VsbCk7CisgICAgICAgIGZvck5vZGUobm9kZSkuY2xlYXIoKTsgLy8gVGhlIHJlc3Vs
dCBpcyBub3QgYSBKUyB2YWx1ZS4KICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBDaGVja0FycmF5
OiB7Ci0gICAgICAgIGlmIChub2RlLmFycmF5TW9kZSgpLmFscmVhZHlDaGVja2VkKG1fZ3JhcGgs
IG5vZGUsIGZvck5vZGUobm9kZS5jaGlsZDEoKSkpKSB7CisgICAgICAgIGlmIChub2RlLT5hcnJh
eU1vZGUoKS5hbHJlYWR5Q2hlY2tlZChtX2dyYXBoLCBub2RlLCBmb3JOb2RlKG5vZGUtPmNoaWxk
MSgpKSkpIHsKICAgICAgICAgICAgIG1fZm91bmRDb25zdGFudHMgPSB0cnVlOwotICAgICAgICAg
ICAgbm9kZS5zZXRDYW5FeGl0KGZhbHNlKTsKKyAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQo
ZmFsc2UpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgbm9kZS5zZXRD
YW5FeGl0KHRydWUpOyAvLyBMaWVzLCBidXQgdGhpcyBpcyBmb2xsb3dlZCBieSBvcGVyYXRpb25z
IChsaWtlIEdldEJ5VmFsKSB0aGF0IGFsd2F5cyBleGl0LCBzbyB0aGVyZSBpcyBubyBwb2ludCBp
biB1cyB0cnlpbmcgdG8gYmUgY2xldmVyIGhlcmUuCi0gICAgICAgIHN3aXRjaCAobm9kZS5hcnJh
eU1vZGUoKS50eXBlKCkpIHsKKyAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsgLy8gTGll
cywgYnV0IHRoaXMgaXMgZm9sbG93ZWQgYnkgb3BlcmF0aW9ucyAobGlrZSBHZXRCeVZhbCkgdGhh
dCBhbHdheXMgZXhpdCwgc28gdGhlcmUgaXMgbm8gcG9pbnQgaW4gdXMgdHJ5aW5nIHRvIGJlIGNs
ZXZlciBoZXJlLgorICAgICAgICBzd2l0Y2ggKG5vZGUtPmFycmF5TW9kZSgpLnR5cGUoKSkgewog
ICAgICAgICBjYXNlIEFycmF5OjpTdHJpbmc6Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hp
bGQxKCkpLmZpbHRlcihTcGVjU3RyaW5nKTsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZS0+Y2hp
bGQxKCkpLmZpbHRlcihTcGVjU3RyaW5nKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBj
YXNlIEFycmF5OjpJbnQzMjoKICAgICAgICAgY2FzZSBBcnJheTo6RG91YmxlOgogICAgICAgICBj
YXNlIEFycmF5OjpDb250aWd1b3VzOgogICAgICAgICBjYXNlIEFycmF5OjpBcnJheVN0b3JhZ2U6
CiAgICAgICAgIGNhc2UgQXJyYXk6OlNsb3dQdXRBcnJheVN0b3JhZ2U6Ci0gICAgICAgICAgICBm
b3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjQ2VsbCk7CisgICAgICAgICAgICBmb3JO
b2RlKG5vZGUtPmNoaWxkMSgpKS5maWx0ZXIoU3BlY0NlbGwpOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIGNhc2UgQXJyYXk6OkFyZ3VtZW50czoKLSAgICAgICAgICAgIGZvck5vZGUobm9k
ZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNBcmd1bWVudHMpOworICAgICAgICAgICAgZm9yTm9kZShu
b2RlLT5jaGlsZDEoKSkuZmlsdGVyKFNwZWNBcmd1bWVudHMpOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIGNhc2UgQXJyYXk6OkludDhBcnJheToKLSAgICAgICAgICAgIGZvck5vZGUobm9k
ZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNJbnQ4QXJyYXkpOworICAgICAgICAgICAgZm9yTm9kZShu
b2RlLT5jaGlsZDEoKSkuZmlsdGVyKFNwZWNJbnQ4QXJyYXkpOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIGNhc2UgQXJyYXk6OkludDE2QXJyYXk6Ci0gICAgICAgICAgICBmb3JOb2RlKG5v
ZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjSW50MTZBcnJheSk7CisgICAgICAgICAgICBmb3JOb2Rl
KG5vZGUtPmNoaWxkMSgpKS5maWx0ZXIoU3BlY0ludDE2QXJyYXkpOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OkludDMyQXJyYXk6Ci0gICAgICAgICAgICBmb3JOb2Rl
KG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjSW50MzJBcnJheSk7CisgICAgICAgICAgICBmb3JO
b2RlKG5vZGUtPmNoaWxkMSgpKS5maWx0ZXIoU3BlY0ludDMyQXJyYXkpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OlVpbnQ4QXJyYXk6Ci0gICAgICAgICAgICBmb3JO
b2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjVWludDhBcnJheSk7CisgICAgICAgICAgICBm
b3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5maWx0ZXIoU3BlY1VpbnQ4QXJyYXkpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OlVpbnQ4Q2xhbXBlZEFycmF5OgotICAgICAg
ICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY1VpbnQ4Q2xhbXBlZEFycmF5
KTsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRlcihTcGVjVWludDhD
bGFtcGVkQXJyYXkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OlVp
bnQxNkFycmF5OgotICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3Bl
Y1VpbnQxNkFycmF5KTsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRl
cihTcGVjVWludDE2QXJyYXkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJy
YXk6OlVpbnQzMkFycmF5OgotICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0
ZXIoU3BlY1VpbnQzMkFycmF5KTsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkp
LmZpbHRlcihTcGVjVWludDMyQXJyYXkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNh
c2UgQXJyYXk6OkZsb2F0MzJBcnJheToKLSAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEo
KSkuZmlsdGVyKFNwZWNGbG9hdDMyQXJyYXkpOworICAgICAgICAgICAgZm9yTm9kZShub2RlLT5j
aGlsZDEoKSkuZmlsdGVyKFNwZWNGbG9hdDMyQXJyYXkpOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIGNhc2UgQXJyYXk6OkZsb2F0NjRBcnJheToKLSAgICAgICAgICAgIGZvck5vZGUobm9k
ZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNGbG9hdDY0QXJyYXkpOworICAgICAgICAgICAgZm9yTm9k
ZShub2RlLT5jaGlsZDEoKSkuZmlsdGVyKFNwZWNGbG9hdDY0QXJyYXkpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIGZvck5vZGUobm9kZS5j
aGlsZDEoKSkuZmlsdGVyQXJyYXlNb2Rlcyhub2RlLmFycmF5TW9kZSgpLmFycmF5TW9kZXNUaGF0
UGFzc0ZpbHRlcmluZygpKTsKKyAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDEoKSkuZmlsdGVy
QXJyYXlNb2Rlcyhub2RlLT5hcnJheU1vZGUoKS5hcnJheU1vZGVzVGhhdFBhc3NGaWx0ZXJpbmco
KSk7CiAgICAgICAgIG1faGF2ZVN0cnVjdHVyZXMgPSB0cnVlOwogICAgICAgICBicmVhazsKICAg
ICB9CiAgICAgY2FzZSBBcnJheWlmeTogewotICAgICAgICBpZiAobm9kZS5hcnJheU1vZGUoKS5h
bHJlYWR5Q2hlY2tlZChtX2dyYXBoLCBub2RlLCBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpKSkgewor
ICAgICAgICBpZiAobm9kZS0+YXJyYXlNb2RlKCkuYWxyZWFkeUNoZWNrZWQobV9ncmFwaCwgbm9k
ZSwgZm9yTm9kZShub2RlLT5jaGlsZDEoKSkpKSB7CiAgICAgICAgICAgICBtX2ZvdW5kQ29uc3Rh
bnRzID0gdHJ1ZTsKLSAgICAgICAgICAgIG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7CisgICAgICAg
ICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9Ci0gICAgICAgIEFTU0VSVChub2RlLmFycmF5TW9kZSgpLmNvbnZlcnNpb24oKSA9PSBBcnJh
eTo6Q29udmVydAotICAgICAgICAgICAgfHwgbm9kZS5hcnJheU1vZGUoKS5jb252ZXJzaW9uKCkg
PT0gQXJyYXk6OlJhZ2VDb252ZXJ0KTsKLSAgICAgICAgbm9kZS5zZXRDYW5FeGl0KHRydWUpOwot
ICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjQ2VsbCk7Ci0gICAgICAg
IGlmIChub2RlLmNoaWxkMigpKQotICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMigpKS5m
aWx0ZXIoU3BlY0ludDMyKTsKKyAgICAgICAgQVNTRVJUKG5vZGUtPmFycmF5TW9kZSgpLmNvbnZl
cnNpb24oKSA9PSBBcnJheTo6Q29udmVydAorICAgICAgICAgICAgfHwgbm9kZS0+YXJyYXlNb2Rl
KCkuY29udmVyc2lvbigpID09IEFycmF5OjpSYWdlQ29udmVydCk7CisgICAgICAgIG5vZGUtPnNl
dENhbkV4aXQodHJ1ZSk7CisgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRlcihT
cGVjQ2VsbCk7CisgICAgICAgIGlmIChub2RlLT5jaGlsZDIoKSkKKyAgICAgICAgICAgIGZvck5v
ZGUobm9kZS0+Y2hpbGQyKCkpLmZpbHRlcihTcGVjSW50MzIpOwogICAgICAgICBjbG9iYmVyU3Ry
dWN0dXJlcyhpbmRleEluQmxvY2spOwotICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZp
bHRlckFycmF5TW9kZXMobm9kZS5hcnJheU1vZGUoKS5hcnJheU1vZGVzVGhhdFBhc3NGaWx0ZXJp
bmcoKSk7CisgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRlckFycmF5TW9kZXMo
bm9kZS0+YXJyYXlNb2RlKCkuYXJyYXlNb2Rlc1RoYXRQYXNzRmlsdGVyaW5nKCkpOwogICAgICAg
ICBtX2hhdmVTdHJ1Y3R1cmVzID0gdHJ1ZTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGNh
c2UgQXJyYXlpZnlUb1N0cnVjdHVyZTogewotICAgICAgICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSA9
IGZvck5vZGUobm9kZS5jaGlsZDEoKSk7Ci0gICAgICAgIFN0cnVjdHVyZVNldCBzZXQgPSBub2Rl
LnN0cnVjdHVyZSgpOworICAgICAgICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSA9IGZvck5vZGUobm9k
ZS0+Y2hpbGQxKCkpOworICAgICAgICBTdHJ1Y3R1cmVTZXQgc2V0ID0gbm9kZS0+c3RydWN0dXJl
KCk7CiAgICAgICAgIGlmICh2YWx1ZS5tX2Z1dHVyZVBvc3NpYmxlU3RydWN0dXJlLmlzU3Vic2V0
T2Yoc2V0KQogICAgICAgICAgICAgfHwgdmFsdWUubV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuaXNT
dWJzZXRPZihzZXQpKQogICAgICAgICAgICAgbV9mb3VuZENvbnN0YW50cyA9IHRydWU7Ci0gICAg
ICAgIG5vZGUuc2V0Q2FuRXhpdCh0cnVlKTsKLSAgICAgICAgaWYgKG5vZGUuY2hpbGQyKCkpCi0g
ICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQyKCkpLmZpbHRlcihTcGVjSW50MzIpOworICAg
ICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOworICAgICAgICBpZiAobm9kZS0+Y2hpbGQyKCkp
CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMigpKS5maWx0ZXIoU3BlY0ludDMyKTsK
ICAgICAgICAgY2xvYmJlclN0cnVjdHVyZXMoaW5kZXhJbkJsb2NrKTsKICAgICAgICAgdmFsdWUu
ZmlsdGVyKHNldCk7CiAgICAgICAgIG1faGF2ZVN0cnVjdHVyZXMgPSB0cnVlOwogICAgICAgICBi
cmVhazsKICAgICB9CiAgICAgY2FzZSBHZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlOiB7Ci0gICAg
ICAgIG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7Ci0gICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5j
bGVhcigpOworICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKKyAgICAgICAgZm9yTm9k
ZShub2RlKS5jbGVhcigpOwogICAgICAgICBicmVhazsgCiAgICAgfQogICAgIGNhc2UgR2V0QnlP
ZmZzZXQ6Ci0gICAgICAgIGlmICghbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5oYXNTdG9yYWdlUmVz
dWx0KCkpIHsKLSAgICAgICAgICAgIG5vZGUuc2V0Q2FuRXhpdCghaXNDZWxsU3BlY3VsYXRpb24o
Zm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKTsKLSAgICAgICAgICAgIGZvck5vZGUobm9k
ZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNDZWxsKTsKKyAgICAgICAgaWYgKCFub2RlLT5jaGlsZDEo
KS0+aGFzU3RvcmFnZVJlc3VsdCgpKSB7CisgICAgICAgICAgICBub2RlLnNldENhbkV4aXQoIWlz
Q2VsbFNwZWN1bGF0aW9uKGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fdHlwZSkpOworICAgICAg
ICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDEoKSkuZmlsdGVyKFNwZWNDZWxsKTsKICAgICAgICAg
fQotICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkubWFrZVRvcCgpOworICAgICAgICBmb3JOb2Rl
KG5vZGUpLm1ha2VUb3AoKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICBjYXNl
IFB1dEJ5T2Zmc2V0OiB7CiAgICAgICAgIGJvb2wgY2FuRXhpdCA9IGZhbHNlOwotICAgICAgICBp
ZiAoIW1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0uaGFzU3RvcmFnZVJlc3VsdCgpKSB7Ci0gICAgICAg
ICAgICBjYW5FeGl0IHw9ICFpc0NlbGxTcGVjdWxhdGlvbihmb3JOb2RlKG5vZGUuY2hpbGQxKCkp
Lm1fdHlwZSk7Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVj
Q2VsbCk7Ci0gICAgICAgIH0KLSAgICAgICAgY2FuRXhpdCB8PSAhaXNDZWxsU3BlY3VsYXRpb24o
Zm9yTm9kZShub2RlLmNoaWxkMigpKS5tX3R5cGUpOwotICAgICAgICBmb3JOb2RlKG5vZGUuY2hp
bGQyKCkpLmZpbHRlcihTcGVjQ2VsbCk7Ci0gICAgICAgIG5vZGUuc2V0Q2FuRXhpdChjYW5FeGl0
KTsKKyAgICAgICAgaWYgKCFub2RlLT5jaGlsZDEoKS0+aGFzU3RvcmFnZVJlc3VsdCgpKSB7Cisg
ICAgICAgICAgICBjYW5FeGl0IHw9ICFpc0NlbGxTcGVjdWxhdGlvbihmb3JOb2RlKG5vZGUtPmNo
aWxkMSgpKS5tX3R5cGUpOworICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDEoKSkuZmls
dGVyKFNwZWNDZWxsKTsKKyAgICAgICAgfQorICAgICAgICBjYW5FeGl0IHw9ICFpc0NlbGxTcGVj
dWxhdGlvbihmb3JOb2RlKG5vZGUtPmNoaWxkMigpKS5tX3R5cGUpOworICAgICAgICBmb3JOb2Rl
KG5vZGUtPmNoaWxkMigpKS5maWx0ZXIoU3BlY0NlbGwpOworICAgICAgICBub2RlLT5zZXRDYW5F
eGl0KGNhbkV4aXQpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgICAgICAKICAgICBj
YXNlIENoZWNrRnVuY3Rpb246IHsKLSAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IGZvck5vZGUobm9k
ZS5jaGlsZDEoKSkudmFsdWUoKTsKLSAgICAgICAgaWYgKHZhbHVlID09IG5vZGUuZnVuY3Rpb24o
KSkgeworICAgICAgICBKU1ZhbHVlIHZhbHVlID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSkudmFs
dWUoKTsKKyAgICAgICAgaWYgKHZhbHVlID09IG5vZGUtPmZ1bmN0aW9uKCkpIHsKICAgICAgICAg
ICAgIG1fZm91bmRDb25zdGFudHMgPSB0cnVlOwogICAgICAgICAgICAgQVNTRVJUKHZhbHVlKTsK
LSAgICAgICAgICAgIG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7CisgICAgICAgICAgICBub2RlLT5z
ZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAg
IAotICAgICAgICBub2RlLnNldENhbkV4aXQodHJ1ZSk7IC8vIExpZXMhIFdlIGNhbiBkbyBiZXR0
ZXIuCi0gICAgICAgIGlmICghZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXJCeVZhbHVlKG5v
ZGUuZnVuY3Rpb24oKSkpIHsKKyAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsgLy8gTGll
cyEgV2UgY2FuIGRvIGJldHRlci4KKyAgICAgICAgaWYgKCFmb3JOb2RlKG5vZGUtPmNoaWxkMSgp
KS5maWx0ZXJCeVZhbHVlKG5vZGUtPmZ1bmN0aW9uKCkpKSB7CiAgICAgICAgICAgICBtX2lzVmFs
aWQgPSBmYWxzZTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkBAIC0xNzEzLDY3ICsx
NzMyLDY5IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAg
ICAgCiAgICAgY2FzZSBQdXRCeUlkOgogICAgIGNhc2UgUHV0QnlJZERpcmVjdDoKLSAgICAgICAg
bm9kZS5zZXRDYW5FeGl0KHRydWUpOwotICAgICAgICBpZiAoU3RydWN0dXJlKiBzdHJ1Y3R1cmUg
PSBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmJlc3RQcm92ZW5TdHJ1Y3R1cmUoKSkgeworICAgICAg
ICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOworICAgICAgICBpZiAoU3RydWN0dXJlKiBzdHJ1Y3R1
cmUgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5iZXN0UHJvdmVuU3RydWN0dXJlKCkpIHsKICAg
ICAgICAgICAgIFB1dEJ5SWRTdGF0dXMgc3RhdHVzID0gUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZv
cigKICAgICAgICAgICAgICAgICBtX2dyYXBoLm1fZ2xvYmFsRGF0YSwKLSAgICAgICAgICAgICAg
ICBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLmNvZGVPcmlnaW4pLAorICAgICAgICAgICAg
ICAgIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPmNvZGVPcmlnaW4pLAogICAgICAgICAg
ICAgICAgIHN0cnVjdHVyZSwKLSAgICAgICAgICAgICAgICBtX2dyYXBoLm1fY29kZUJsb2NrLT5p
ZGVudGlmaWVyKG5vZGUuaWRlbnRpZmllck51bWJlcigpKSwKLSAgICAgICAgICAgICAgICBub2Rl
Lm9wKCkgPT0gUHV0QnlJZERpcmVjdCk7CisgICAgICAgICAgICAgICAgbV9ncmFwaC5tX2NvZGVC
bG9jay0+aWRlbnRpZmllcihub2RlLT5pZGVudGlmaWVyTnVtYmVyKCkpLAorICAgICAgICAgICAg
ICAgIG5vZGUtPm9wKCkgPT0gUHV0QnlJZERpcmVjdCk7CiAgICAgICAgICAgICBpZiAoc3RhdHVz
LmlzU2ltcGxlUmVwbGFjZSgpKSB7Ci0gICAgICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxk
MSgpKS5maWx0ZXIoc3RydWN0dXJlKTsKKyAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNo
aWxkMSgpKS5maWx0ZXIoc3RydWN0dXJlKTsKICAgICAgICAgICAgICAgICBtX2ZvdW5kQ29uc3Rh
bnRzID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIGlmIChzdGF0dXMuaXNTaW1wbGVUcmFuc2l0aW9uKCkpIHsKICAgICAgICAgICAgICAg
ICBjbG9iYmVyU3RydWN0dXJlcyhpbmRleEluQmxvY2spOwotICAgICAgICAgICAgICAgIGZvck5v
ZGUobm9kZS5jaGlsZDEoKSkuc2V0KHN0YXR1cy5uZXdTdHJ1Y3R1cmUoKSk7CisgICAgICAgICAg
ICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDEoKSkuc2V0KHN0YXR1cy5uZXdTdHJ1Y3R1cmUoKSk7
CiAgICAgICAgICAgICAgICAgbV9oYXZlU3RydWN0dXJlcyA9IHRydWU7CiAgICAgICAgICAgICAg
ICAgbV9mb3VuZENvbnN0YW50cyA9IHRydWU7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0
ZXIoU3BlY0NlbGwpOwotICAgICAgICBjbG9iYmVyV29ybGQobm9kZS5jb2RlT3JpZ2luLCBpbmRl
eEluQmxvY2spOworICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5maWx0ZXIoU3BlY0Nl
bGwpOworICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+Y29kZU9yaWdpbiwgaW5kZXhJbkJsb2Nr
KTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICBjYXNlIEdldEdsb2JhbFZhcjoK
LSAgICAgICAgbm9kZS5zZXRDYW5FeGl0KGZhbHNlKTsKLSAgICAgICAgZm9yTm9kZShub2RlSW5k
ZXgpLm1ha2VUb3AoKTsKKyAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CisgICAgICAg
IGZvck5vZGUobm9kZSkubWFrZVRvcCgpOwogICAgICAgICBicmVhazsKICAgICAgICAgCiAgICAg
Y2FzZSBHbG9iYWxWYXJXYXRjaHBvaW50OgotICAgICAgICBub2RlLnNldENhbkV4aXQodHJ1ZSk7
CisgICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7CiAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgCiAgICAgY2FzZSBQdXRHbG9iYWxWYXI6CiAgICAgY2FzZSBQdXRHbG9iYWxWYXJDaGVj
azoKLSAgICAgICAgbm9kZS5zZXRDYW5FeGl0KGZhbHNlKTsKKyAgICAgICAgbm9kZS0+c2V0Q2Fu
RXhpdChmYWxzZSk7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAgY2FzZSBDaGVj
a0hhc0luc3RhbmNlOgotICAgICAgICBub2RlLnNldENhbkV4aXQodHJ1ZSk7Ci0gICAgICAgIGZv
ck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNDZWxsKTsKKyAgICAgICAgbm9kZS0+c2V0
Q2FuRXhpdCh0cnVlKTsKKyAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDEoKSkuZmlsdGVyKFNw
ZWNDZWxsKTsKICAgICAgICAgLy8gU2FkbHksIHdlIGRvbid0IHByb3BhZ2F0ZSB0aGUgZmFjdCB0
aGF0IHdlJ3ZlIGRvbmUgQ2hlY2tIYXNJbnN0YW5jZQogICAgICAgICBicmVhazsKICAgICAgICAg
ICAgIAogICAgIGNhc2UgSW5zdGFuY2VPZjoKLSAgICAgICAgbm9kZS5zZXRDYW5FeGl0KHRydWUp
OworICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOwogICAgICAgICAvLyBBZ2Fpbiwgc2Fk
bHksIHdlIGRvbid0IHByb3BhZ2F0ZSB0aGUgZmFjdCB0aGF0IHdlJ3ZlIGRvbmUgSW5zdGFuY2VP
ZgotICAgICAgICBpZiAoIShtX2dyYXBoW25vZGUuY2hpbGQxKCldLnByZWRpY3Rpb24oKSAmIH5T
cGVjQ2VsbCkgJiYgIShmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSAmIH5TcGVjQ2VsbCkp
Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjQ2VsbCk7Ci0g
ICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKFNwZWNDZWxsKTsKLSAgICAgICAg
Zm9yTm9kZShub2RlSW5kZXgpLnNldChTcGVjQm9vbGVhbik7CisgICAgICAgIC8vIEZJWE1FOiBU
aGlzIGFwcGVhcnMgYnJva2VuOiBDaGVja0hhc0luc3RhbmNlIGFscmVhZHkgZG9lcyBhbiB1bmNv
bmRpdGlvbmFsIGNlbGwKKyAgICAgICAgLy8gY2hlY2suIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xMDc0NzkKKyAgICAgICAgaWYgKCEobm9kZS0+Y2hpbGQxKCktPnBy
ZWRpY3Rpb24oKSAmIH5TcGVjQ2VsbCkgJiYgIShmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX3R5
cGUgJiB+U3BlY0NlbGwpKQorICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDEoKSkuZmls
dGVyKFNwZWNDZWxsKTsKKyAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDIoKSkuZmlsdGVyKFNw
ZWNDZWxsKTsKKyAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0Jvb2xlYW4pOwogICAgICAg
ICBicmVhazsKICAgICAgICAgICAgIAogICAgIGNhc2UgUGhpOgogICAgIGNhc2UgRmx1c2g6Ci0g
ICAgICAgIG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7CisgICAgICAgIG5vZGUtPnNldENhbkV4aXQo
ZmFsc2UpOwogICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgIGNhc2UgQnJlYWtwb2lu
dDoKLSAgICAgICAgbm9kZS5zZXRDYW5FeGl0KGZhbHNlKTsKKyAgICAgICAgbm9kZS0+c2V0Q2Fu
RXhpdChmYWxzZSk7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAgY2FzZSBDYWxs
OgpAQCAtMTc4MiwxOCArMTgwMywxOCBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5z
aWduZWQgaW5kCiAgICAgY2FzZSBSZXNvbHZlQmFzZToKICAgICBjYXNlIFJlc29sdmVCYXNlU3Ry
aWN0UHV0OgogICAgIGNhc2UgUmVzb2x2ZUdsb2JhbDoKLSAgICAgICAgbm9kZS5zZXRDYW5FeGl0
KHRydWUpOwotICAgICAgICBjbG9iYmVyV29ybGQobm9kZS5jb2RlT3JpZ2luLCBpbmRleEluQmxv
Y2spOwotICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkubWFrZVRvcCgpOworICAgICAgICBub2Rl
LT5zZXRDYW5FeGl0KHRydWUpOworICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+Y29kZU9yaWdp
biwgaW5kZXhJbkJsb2NrKTsKKyAgICAgICAgZm9yTm9kZShub2RlKS5tYWtlVG9wKCk7CiAgICAg
ICAgIGJyZWFrOwogCiAgICAgY2FzZSBHYXJiYWdlVmFsdWU6Ci0gICAgICAgIGNsb2JiZXJXb3Js
ZChub2RlLmNvZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7Ci0gICAgICAgIGZvck5vZGUobm9kZUlu
ZGV4KS5tYWtlVG9wKCk7CisgICAgICAgIGNsb2JiZXJXb3JsZChub2RlLT5jb2RlT3JpZ2luLCBp
bmRleEluQmxvY2spOworICAgICAgICBmb3JOb2RlKG5vZGUpLm1ha2VUb3AoKTsKICAgICAgICAg
YnJlYWs7CiAKICAgICBjYXNlIEZvcmNlT1NSRXhpdDoKLSAgICAgICAgbm9kZS5zZXRDYW5FeGl0
KHRydWUpOworICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOwogICAgICAgICBtX2lzVmFs
aWQgPSBmYWxzZTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKQEAgLTE4MDEsNyArMTgy
Miw3IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICBjYXNl
IElubGluZVN0YXJ0OgogICAgIGNhc2UgTm9wOgogICAgIGNhc2UgQ291bnRFeGVjdXRpb246Ci0g
ICAgICAgIG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7CisgICAgICAgIG5vZGUtPnNldENhbkV4aXQo
ZmFsc2UpOwogICAgICAgICBicmVhazsKICAgICAgICAgCiAgICAgY2FzZSBMYXN0Tm9kZVR5cGU6
CkBAIC0xODU0LDE1ICsxODc1LDE0IEBAIGlubGluZSB2b2lkIEFic3RyYWN0U3RhdGU6OmNsb2Ji
ZXJTdHJ1Y3QKICAgICBtX2RpZENsb2JiZXIgPSB0cnVlOwogfQogCi1pbmxpbmUgYm9vbCBBYnN0
cmFjdFN0YXRlOjptZXJnZVN0YXRlQXRUYWlsKEFic3RyYWN0VmFsdWUmIGRlc3RpbmF0aW9uLCBB
YnN0cmFjdFZhbHVlJiBpblZhcmlhYmxlLCBOb2RlSW5kZXggbm9kZUluZGV4KQoraW5saW5lIGJv
b2wgQWJzdHJhY3RTdGF0ZTo6bWVyZ2VTdGF0ZUF0VGFpbChBYnN0cmFjdFZhbHVlJiBkZXN0aW5h
dGlvbiwgQWJzdHJhY3RWYWx1ZSYgaW5WYXJpYWJsZSwgTm9kZSogbm9kZSkKIHsKLSAgICBpZiAo
bm9kZUluZGV4ID09IE5vTm9kZSkKKyAgICBpZiAoIW5vZGUpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICAgICAgCiAgICAgQWJzdHJhY3RWYWx1ZSBzb3VyY2U7CiAgICAgCi0gICAgTm9kZSYg
dGFpbE5vZGUgPSBtX2dyYXBoW25vZGVJbmRleF07Ci0gICAgaWYgKHRhaWxOb2RlLnZhcmlhYmxl
QWNjZXNzRGF0YSgpLT5pc0NhcHR1cmVkKCkpIHsKKyAgICBpZiAobm9kZS0+dmFyaWFibGVBY2Nl
c3NEYXRhKCktPmlzQ2FwdHVyZWQoKSkgewogICAgICAgICAvLyBJZiBpdCdzIGNhcHR1cmVkIHRo
ZW4gd2Uga25vdyB0aGF0IHdoYXRldmVyIHZhbHVlIHdhcyBzdG9yZWQgaW50byB0aGUgdmFyaWFi
bGUgbGFzdCBpcyB0aGUKICAgICAgICAgLy8gb25lIHdlIGNhcmUgYWJvdXQuIFRoaXMgaXMgdHJ1
ZSBldmVuIGlmIHRoZSB2YXJpYWJsZSBhdCB0YWlsIGlzIGRlYWQsIHdoaWNoIG1pZ2h0IGhhcHBl
biBpZgogICAgICAgICAvLyB0aGUgbGFzdCB0aGluZyB3ZSBkaWQgdG8gdGhlIHZhcmlhYmxlIHdh
cyBhIEdldExvY2FsIGFuZCB0aGVuIGVuZGVkIHVwIG5vdyB1c2luZyB0aGUKQEAgLTE4NzUsMjYg
KzE4OTUsMjUgQEAgaW5saW5lIGJvb2wgQWJzdHJhY3RTdGF0ZTo6bWVyZ2VTdGF0ZUF0VAogICAg
ICAgICBkYXRhTG9nRigiIGZyb20gbGFzdCBhY2Nlc3MgZHVlIHRvIGNhcHR1cmVkIHZhcmlhYmxl
LlxuIik7CiAjZW5kaWYKICAgICB9IGVsc2UgewotICAgICAgICBpZiAoIXRhaWxOb2RlLnNob3Vs
ZEdlbmVyYXRlKCkpIHsKKyAgICAgICAgaWYgKCFub2RlLT5zaG91bGRHZW5lcmF0ZSgpKSB7CiAg
ICAgICAgICAgICAvLyBJZiB0aGUgbm9kZSBhdCB0YWlsIGlzIGEgR2V0TG9jYWwgdGhhdCBpcyBk
ZWFkLCB0aGVuIHNraXAgaXQgdG8gZ2V0IHRvIHRoZSBQaGkuCiAgICAgICAgICAgICAvLyBUaGUg
UGhpIG1heSBiZSBsaXZlLgotICAgICAgICAgICAgaWYgKHRhaWxOb2RlLm9wKCkgIT0gR2V0TG9j
YWwpCisgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSAhPSBHZXRMb2NhbCkKICAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIG5vZGVJbmRleCA9
IHRhaWxOb2RlLmNoaWxkMSgpLmluZGV4KCk7Ci0gICAgICAgICAgICBBU1NFUlQobV9ncmFwaFtu
b2RlSW5kZXhdLm9wKCkgPT0gUGhpKTsKLSAgICAgICAgICAgIGlmICghbV9ncmFwaFtub2RlSW5k
ZXhdLnNob3VsZEdlbmVyYXRlKCkpCisgICAgICAgICAgICBub2RlID0gbm9kZS0+Y2hpbGQxKCku
bm9kZSgpOworICAgICAgICAgICAgQVNTRVJUKG5vZGUtPm9wKCkgPT0gUGhpKTsKKyAgICAgICAg
ICAgIGlmICghbm9kZS0+c2hvdWxkR2VuZXJhdGUoKSkKICAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBo
W25vZGVJbmRleF07Ci0gICAgICAgIEFTU0VSVChub2RlLnNob3VsZEdlbmVyYXRlKCkpOworICAg
ICAgICBBU1NFUlQobm9kZS0+c2hvdWxkR2VuZXJhdGUoKSk7CiAKICNpZiBERkdfRU5BQkxFKERF
QlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCi0gICAgICAgIGRhdGFMb2dGKCIgICAgICAgICAgSXQn
cyBsaXZlLCBub2RlIEAldS5cbiIsIG5vZGVJbmRleCk7CisgICAgICAgIGRhdGFMb2dGKCIgICAg
ICAgICAgSXQncyBsaXZlLCBub2RlIEAldS5cbiIsIG5vZGUtPmluZGV4KCkpOwogI2VuZGlmCiAg
ICAgCi0gICAgICAgIHN3aXRjaCAobm9kZS5vcCgpKSB7CisgICAgICAgIHN3aXRjaCAobm9kZS0+
b3AoKSkgewogICAgICAgICBjYXNlIFBoaToKICAgICAgICAgY2FzZSBTZXRBcmd1bWVudDoKICAg
ICAgICAgY2FzZSBGbHVzaDoKQEAgLTE5MDksNyArMTkyOCw3IEBAIGlubGluZSBib29sIEFic3Ry
YWN0U3RhdGU6Om1lcmdlU3RhdGVBdFQKICAgICAgICAgICAgIAogICAgICAgICBjYXNlIEdldExv
Y2FsOgogICAgICAgICAgICAgLy8gVGhlIGJsb2NrIHJlZmluZXMgdGhlIHZhbHVlIHdpdGggYWRk
aXRpb25hbCBzcGVjdWxhdGlvbnMuCi0gICAgICAgICAgICBzb3VyY2UgPSBmb3JOb2RlKG5vZGVJ
bmRleCk7CisgICAgICAgICAgICBzb3VyY2UgPSBmb3JOb2RlKG5vZGUpOwogI2lmIERGR19FTkFC
TEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKICAgICAgICAgICAgIGRhdGFMb2dGKCIgICAg
ICAgICAgUmVmaW5pbmcgdG8gIik7CiAgICAgICAgICAgICBzb3VyY2UuZHVtcChXVEY6OmRhdGFG
aWxlKCkpOwpAQCAtMTkyMCwxMSArMTkzOSwxMSBAQCBpbmxpbmUgYm9vbCBBYnN0cmFjdFN0YXRl
OjptZXJnZVN0YXRlQXRUCiAgICAgICAgIGNhc2UgU2V0TG9jYWw6CiAgICAgICAgICAgICAvLyBU
aGUgYmxvY2sgc2V0cyB0aGUgdmFyaWFibGUsIGFuZCBwb3RlbnRpYWxseSByZWZpbmVzIGl0LCBi
b3RoCiAgICAgICAgICAgICAvLyBiZWZvcmUgYW5kIGFmdGVyIHNldHRpbmcgaXQuCi0gICAgICAg
ICAgICBpZiAobm9kZS52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+c2hvdWxkVXNlRG91YmxlRm9ybWF0
KCkpIHsKKyAgICAgICAgICAgIGlmIChub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+c2hvdWxk
VXNlRG91YmxlRm9ybWF0KCkpIHsKICAgICAgICAgICAgICAgICAvLyBGSVhNRTogVGhpcyB1bm5l
Y2Vzc2FyaWx5IGxvc2VzIHByZWNpc2lvbi4KICAgICAgICAgICAgICAgICBzb3VyY2Uuc2V0KFNw
ZWNEb3VibGUpOwogICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgc291cmNlID0g
Zm9yTm9kZShub2RlLmNoaWxkMSgpKTsKKyAgICAgICAgICAgICAgICBzb3VyY2UgPSBmb3JOb2Rl
KG5vZGUtPmNoaWxkMSgpKTsKICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJP
U0UpCiAgICAgICAgICAgICBkYXRhTG9nRigiICAgICAgICAgIFNldHRpbmcgdG8gIik7CiAgICAg
ICAgICAgICBzb3VyY2UuZHVtcChXVEY6OmRhdGFGaWxlKCkpOwpAQCAtMTk4MiwzNSArMjAwMSwz
NCBAQCBpbmxpbmUgYm9vbCBBYnN0cmFjdFN0YXRlOjptZXJnZShCYXNpY0JsCiAgICAgcmV0dXJu
IGNoYW5nZWQ7CiB9CiAKLWlubGluZSBib29sIEFic3RyYWN0U3RhdGU6Om1lcmdlVG9TdWNjZXNz
b3JzKAotICAgIEdyYXBoJiBncmFwaCwgQmFzaWNCbG9jayogYmFzaWNCbG9jaykKK2lubGluZSBi
b29sIEFic3RyYWN0U3RhdGU6Om1lcmdlVG9TdWNjZXNzb3JzKEdyYXBoJiBncmFwaCwgQmFzaWNC
bG9jayogYmFzaWNCbG9jaykKIHsKLSAgICBOb2RlJiB0ZXJtaW5hbCA9IGdyYXBoW2Jhc2ljQmxv
Y2stPmxhc3QoKV07CisgICAgTm9kZSogdGVybWluYWwgPSBiYXNpY0Jsb2NrLT5sYXN0KCk7CiAg
ICAgCi0gICAgQVNTRVJUKHRlcm1pbmFsLmlzVGVybWluYWwoKSk7CisgICAgQVNTRVJUKHRlcm1p
bmFsLT5pc1Rlcm1pbmFsKCkpOwogICAgIAotICAgIHN3aXRjaCAodGVybWluYWwub3AoKSkgewor
ICAgIHN3aXRjaCAodGVybWluYWwtPm9wKCkpIHsKICAgICBjYXNlIEp1bXA6IHsKICAgICAgICAg
QVNTRVJUKGJhc2ljQmxvY2stPmNmYUJyYW5jaERpcmVjdGlvbiA9PSBJbnZhbGlkQnJhbmNoRGly
ZWN0aW9uKTsKICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCiAgICAg
ICAgIGRhdGFMb2dGKCIgICAgICAgIE1lcmdpbmcgdG8gYmxvY2sgIyV1LlxuIiwgdGVybWluYWwu
dGFrZW5CbG9ja0luZGV4KCkpOwogI2VuZGlmCi0gICAgICAgIHJldHVybiBtZXJnZShiYXNpY0Js
b2NrLCBncmFwaC5tX2Jsb2Nrc1t0ZXJtaW5hbC50YWtlbkJsb2NrSW5kZXgoKV0uZ2V0KCkpOwor
ICAgICAgICByZXR1cm4gbWVyZ2UoYmFzaWNCbG9jaywgZ3JhcGgubV9ibG9ja3NbdGVybWluYWwt
PnRha2VuQmxvY2tJbmRleCgpXS5nZXQoKSk7CiAgICAgfQogICAgICAgICAKICAgICBjYXNlIEJy
YW5jaDogewogICAgICAgICBBU1NFUlQoYmFzaWNCbG9jay0+Y2ZhQnJhbmNoRGlyZWN0aW9uICE9
IEludmFsaWRCcmFuY2hEaXJlY3Rpb24pOwogICAgICAgICBib29sIGNoYW5nZWQgPSBmYWxzZTsK
ICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCi0gICAgICAgIGRhdGFM
b2dGKCIgICAgICAgIE1lcmdpbmcgdG8gYmxvY2sgIyV1LlxuIiwgdGVybWluYWwudGFrZW5CbG9j
a0luZGV4KCkpOworICAgICAgICBkYXRhTG9nRigiICAgICAgICBNZXJnaW5nIHRvIGJsb2NrICMl
dS5cbiIsIHRlcm1pbmFsLT50YWtlbkJsb2NrSW5kZXgoKSk7CiAjZW5kaWYKICAgICAgICAgaWYg
KGJhc2ljQmxvY2stPmNmYUJyYW5jaERpcmVjdGlvbiAhPSBUYWtlRmFsc2UpCi0gICAgICAgICAg
ICBjaGFuZ2VkIHw9IG1lcmdlKGJhc2ljQmxvY2ssIGdyYXBoLm1fYmxvY2tzW3Rlcm1pbmFsLnRh
a2VuQmxvY2tJbmRleCgpXS5nZXQoKSk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlKGJh
c2ljQmxvY2ssIGdyYXBoLm1fYmxvY2tzW3Rlcm1pbmFsLT50YWtlbkJsb2NrSW5kZXgoKV0uZ2V0
KCkpOwogI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKICAgICAgICAg
ZGF0YUxvZ0YoIiAgICAgICAgTWVyZ2luZyB0byBibG9jayAjJXUuXG4iLCB0ZXJtaW5hbC5ub3RU
YWtlbkJsb2NrSW5kZXgoKSk7CiAjZW5kaWYKICAgICAgICAgaWYgKGJhc2ljQmxvY2stPmNmYUJy
YW5jaERpcmVjdGlvbiAhPSBUYWtlVHJ1ZSkKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2Uo
YmFzaWNCbG9jaywgZ3JhcGgubV9ibG9ja3NbdGVybWluYWwubm90VGFrZW5CbG9ja0luZGV4KCld
LmdldCgpKTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2UoYmFzaWNCbG9jaywgZ3JhcGgu
bV9ibG9ja3NbdGVybWluYWwtPm5vdFRha2VuQmxvY2tJbmRleCgpXS5nZXQoKSk7CiAgICAgICAg
IHJldHVybiBjaGFuZ2VkOwogICAgIH0KICAgICAgICAgCkBAIC0yMDI2LDEyICsyMDQ0LDEyIEBA
IGlubGluZSBib29sIEFic3RyYWN0U3RhdGU6Om1lcmdlVG9TdWNjZXMKICAgICB9CiB9CiAKLWlu
bGluZSBib29sIEFic3RyYWN0U3RhdGU6Om1lcmdlVmFyaWFibGVCZXR3ZWVuQmxvY2tzKEFic3Ry
YWN0VmFsdWUmIGRlc3RpbmF0aW9uLCBBYnN0cmFjdFZhbHVlJiBzb3VyY2UsIE5vZGVJbmRleCBk
ZXN0aW5hdGlvbk5vZGVJbmRleCwgTm9kZUluZGV4IHNvdXJjZU5vZGVJbmRleCkKK2lubGluZSBi
b29sIEFic3RyYWN0U3RhdGU6Om1lcmdlVmFyaWFibGVCZXR3ZWVuQmxvY2tzKEFic3RyYWN0VmFs
dWUmIGRlc3RpbmF0aW9uLCBBYnN0cmFjdFZhbHVlJiBzb3VyY2UsIE5vZGUqIGRlc3RpbmF0aW9u
Tm9kZSwgTm9kZSogc291cmNlTm9kZSkKIHsKLSAgICBpZiAoZGVzdGluYXRpb25Ob2RlSW5kZXgg
PT0gTm9Ob2RlKQorICAgIGlmICghZGVzdGluYXRpb25Ob2RlKQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgCi0gICAgQVNTRVJUX1VOVVNFRChzb3VyY2VOb2RlSW5kZXgsIHNvdXJjZU5vZGVJ
bmRleCAhPSBOb05vZGUpOworICAgIEFTU0VSVF9VTlVTRUQoc291cmNlTm9kZSwgc291cmNlTm9k
ZSk7CiAgICAgCiAgICAgLy8gRklYTUU6IFdlIGNvdWxkIGRvIHNvbWUgc3BhcnNlIGNvbmRpdGlv
bmFsIHByb3BhZ2F0aW9uIGhlcmUhCiAgICAgCkBAIC0yMDQyLDE1ICsyMDYwLDE1IEBAIHZvaWQg
QWJzdHJhY3RTdGF0ZTo6ZHVtcChQcmludFN0cmVhbSYgb3UKIHsKICAgICBib29sIGZpcnN0ID0g
dHJ1ZTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fYmxvY2stPnNpemUoKTsgKytpKSB7
Ci0gICAgICAgIE5vZGVJbmRleCBpbmRleCA9IG1fYmxvY2stPmF0KGkpOwotICAgICAgICBBYnN0
cmFjdFZhbHVlJiB2YWx1ZSA9IGZvck5vZGUoaW5kZXgpOworICAgICAgICBOb2RlKiBub2RlID0g
bV9ibG9jay0+YXQoaSk7CisgICAgICAgIEFic3RyYWN0VmFsdWUmIHZhbHVlID0gZm9yTm9kZShu
b2RlKTsKICAgICAgICAgaWYgKHZhbHVlLmlzQ2xlYXIoKSkKICAgICAgICAgICAgIGNvbnRpbnVl
OwogICAgICAgICBpZiAoZmlyc3QpCiAgICAgICAgICAgICBmaXJzdCA9IGZhbHNlOwogICAgICAg
ICBlbHNlCiAgICAgICAgICAgICBvdXQucHJpbnRmKCIgIik7Ci0gICAgICAgIG91dC5wcmludGYo
IkAlbHU6Iiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4oaW5kZXgpKTsKKyAgICAgICAgb3V0
LnByaW50ZigiQCVsdToiLCBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nPihub2RlLT5pbmRleCgp
KSk7CiAgICAgICAgIHZhbHVlLmR1bXAob3V0KTsKICAgICB9CiB9CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuaAkocmV2aXNpb24gMTQwNTA0KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEyIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAx
MiwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTcyLDggKzcyLDggQEAgc3RydWN0IEJhc2ljQmxvY2s7CiAvLyBB
YnN0cmFjdFN0YXRlIHN0YXRlKGNvZGVCbG9jaywgZ3JhcGgpOwogLy8gc3RhdGUuYmVnaW5CYXNp
Y0Jsb2NrKGJhc2ljQmxvY2spOwogLy8gYm9vbCBlbmRSZWFjaGVkID0gdHJ1ZTsKLS8vIGZvciAo
Tm9kZUluZGV4IGlkeCA9IGJhc2ljQmxvY2suYmVnaW47IGlkeCA8IGJhc2ljQmxvY2suZW5kOyAr
K2lkeCkgewotLy8gICAgIGlmICghc3RhdGUuZXhlY3V0ZShpZHgpKQorLy8gZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IGJhc2ljQmxvY2stPnNpemUoKTsgKytpKSB7CisvLyAgICAgaWYgKCFzdGF0
ZS5leGVjdXRlKGkpKQogLy8gICAgICAgICBicmVhazsKIC8vIH0KIC8vIGJvb2wgcmVzdWx0ID0g
c3RhdGUuZW5kQmFzaWNCbG9jayg8ZWl0aGVyIE1lcmdlIG9yIERvbnRNZXJnZT4pOwpAQCAtOTcs
MTQgKzk3LDE0IEBAIHB1YmxpYzoKICAgICAKICAgICB+QWJzdHJhY3RTdGF0ZSgpOwogICAgIAot
ICAgIEFic3RyYWN0VmFsdWUmIGZvck5vZGUoTm9kZUluZGV4IG5vZGVJbmRleCkKKyAgICBBYnN0
cmFjdFZhbHVlJiBmb3JOb2RlKE5vZGUqIG5vZGUpCiAgICAgewotICAgICAgICByZXR1cm4gbV9n
cmFwaFtub2RlSW5kZXhdLnZhbHVlOworICAgICAgICByZXR1cm4gbm9kZS0+dmFsdWU7CiAgICAg
fQogICAgIAotICAgIEFic3RyYWN0VmFsdWUmIGZvck5vZGUoRWRnZSBub2RlVXNlKQorICAgIEFi
c3RyYWN0VmFsdWUmIGZvck5vZGUoRWRnZSBlZGdlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGZv
ck5vZGUobm9kZVVzZS5pbmRleCgpKTsKKyAgICAgICAgcmV0dXJuIGZvck5vZGUoZWRnZS5ub2Rl
KCkpOwogICAgIH0KICAgICAKICAgICBPcGVyYW5kczxBYnN0cmFjdFZhbHVlPiYgdmFyaWFibGVz
KCkKQEAgLTE4Nyw0OCArMTg3LDQ4IEBAIHByaXZhdGU6CiAgICAgdm9pZCBjbG9iYmVyQ2FwdHVy
ZWRWYXJzKGNvbnN0IENvZGVPcmlnaW4mKTsKICAgICB2b2lkIGNsb2JiZXJTdHJ1Y3R1cmVzKHVu
c2lnbmVkIGluZGV4SW5CbG9jayk7CiAgICAgCi0gICAgYm9vbCBtZXJnZVN0YXRlQXRUYWlsKEFi
c3RyYWN0VmFsdWUmIGRlc3RpbmF0aW9uLCBBYnN0cmFjdFZhbHVlJiBpblZhcmlhYmxlLCBOb2Rl
SW5kZXgpOworICAgIGJvb2wgbWVyZ2VTdGF0ZUF0VGFpbChBYnN0cmFjdFZhbHVlJiBkZXN0aW5h
dGlvbiwgQWJzdHJhY3RWYWx1ZSYgaW5WYXJpYWJsZSwgTm9kZSopOwogICAgIAotICAgIHN0YXRp
YyBib29sIG1lcmdlVmFyaWFibGVCZXR3ZWVuQmxvY2tzKEFic3RyYWN0VmFsdWUmIGRlc3RpbmF0
aW9uLCBBYnN0cmFjdFZhbHVlJiBzb3VyY2UsIE5vZGVJbmRleCBkZXN0aW5hdGlvbk5vZGVJbmRl
eCwgTm9kZUluZGV4IHNvdXJjZU5vZGVJbmRleCk7CisgICAgc3RhdGljIGJvb2wgbWVyZ2VWYXJp
YWJsZUJldHdlZW5CbG9ja3MoQWJzdHJhY3RWYWx1ZSYgZGVzdGluYXRpb24sIEFic3RyYWN0VmFs
dWUmIHNvdXJjZSwgTm9kZSogZGVzdGluYXRpb25Ob2RlLCBOb2RlKiBzb3VyY2VOb2RlKTsKICAg
ICAKLSAgICB2b2lkIHNwZWN1bGF0ZUludDMyVW5hcnkoTm9kZSYgbm9kZSwgYm9vbCBmb3JjZUNh
bkV4aXQgPSBmYWxzZSkKKyAgICB2b2lkIHNwZWN1bGF0ZUludDMyVW5hcnkoTm9kZSogbm9kZSwg
Ym9vbCBmb3JjZUNhbkV4aXQgPSBmYWxzZSkKICAgICB7Ci0gICAgICAgIEFic3RyYWN0VmFsdWUm
IGNoaWxkVmFsdWUgPSBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpOwotICAgICAgICBub2RlLnNldENh
bkV4aXQoZm9yY2VDYW5FeGl0IHx8ICFpc0ludDMyU3BlY3VsYXRpb24oY2hpbGRWYWx1ZS5tX3R5
cGUpKTsKKyAgICAgICAgQWJzdHJhY3RWYWx1ZSYgY2hpbGRWYWx1ZSA9IGZvck5vZGUobm9kZS0+
Y2hpbGQxKCkpOworICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZvcmNlQ2FuRXhpdCB8fCAhaXNJ
bnQzMlNwZWN1bGF0aW9uKGNoaWxkVmFsdWUubV90eXBlKSk7CiAgICAgICAgIGNoaWxkVmFsdWUu
ZmlsdGVyKFNwZWNJbnQzMik7CiAgICAgfQogICAgIAotICAgIHZvaWQgc3BlY3VsYXRlTnVtYmVy
VW5hcnkoTm9kZSYgbm9kZSkKKyAgICB2b2lkIHNwZWN1bGF0ZU51bWJlclVuYXJ5KE5vZGUqIG5v
ZGUpCiAgICAgewotICAgICAgICBBYnN0cmFjdFZhbHVlJiBjaGlsZFZhbHVlID0gZm9yTm9kZShu
b2RlLmNoaWxkMSgpKTsKLSAgICAgICAgbm9kZS5zZXRDYW5FeGl0KCFpc051bWJlclNwZWN1bGF0
aW9uKGNoaWxkVmFsdWUubV90eXBlKSk7CisgICAgICAgIEFic3RyYWN0VmFsdWUmIGNoaWxkVmFs
dWUgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCgh
aXNOdW1iZXJTcGVjdWxhdGlvbihjaGlsZFZhbHVlLm1fdHlwZSkpOwogICAgICAgICBjaGlsZFZh
bHVlLmZpbHRlcihTcGVjTnVtYmVyKTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBzcGVjdWxhdGVC
b29sZWFuVW5hcnkoTm9kZSYgbm9kZSkKKyAgICB2b2lkIHNwZWN1bGF0ZUJvb2xlYW5VbmFyeShO
b2RlKiBub2RlKQogICAgIHsKLSAgICAgICAgQWJzdHJhY3RWYWx1ZSYgY2hpbGRWYWx1ZSA9IGZv
ck5vZGUobm9kZS5jaGlsZDEoKSk7Ci0gICAgICAgIG5vZGUuc2V0Q2FuRXhpdCghaXNCb29sZWFu
U3BlY3VsYXRpb24oY2hpbGRWYWx1ZS5tX3R5cGUpKTsKKyAgICAgICAgQWJzdHJhY3RWYWx1ZSYg
Y2hpbGRWYWx1ZSA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBub2RlLT5zZXRD
YW5FeGl0KCFpc0Jvb2xlYW5TcGVjdWxhdGlvbihjaGlsZFZhbHVlLm1fdHlwZSkpOwogICAgICAg
ICBjaGlsZFZhbHVlLmZpbHRlcihTcGVjQm9vbGVhbik7CiAgICAgfQogICAgIAotICAgIHZvaWQg
c3BlY3VsYXRlSW50MzJCaW5hcnkoTm9kZSYgbm9kZSwgYm9vbCBmb3JjZUNhbkV4aXQgPSBmYWxz
ZSkKKyAgICB2b2lkIHNwZWN1bGF0ZUludDMyQmluYXJ5KE5vZGUqIG5vZGUsIGJvb2wgZm9yY2VD
YW5FeGl0ID0gZmFsc2UpCiAgICAgewotICAgICAgICBBYnN0cmFjdFZhbHVlJiBjaGlsZFZhbHVl
MSA9IGZvck5vZGUobm9kZS5jaGlsZDEoKSk7Ci0gICAgICAgIEFic3RyYWN0VmFsdWUmIGNoaWxk
VmFsdWUyID0gZm9yTm9kZShub2RlLmNoaWxkMigpKTsKLSAgICAgICAgbm9kZS5zZXRDYW5FeGl0
KAorICAgICAgICBBYnN0cmFjdFZhbHVlJiBjaGlsZFZhbHVlMSA9IGZvck5vZGUobm9kZS0+Y2hp
bGQxKCkpOworICAgICAgICBBYnN0cmFjdFZhbHVlJiBjaGlsZFZhbHVlMiA9IGZvck5vZGUobm9k
ZS0+Y2hpbGQyKCkpOworICAgICAgICBub2RlLT5zZXRDYW5FeGl0KAogICAgICAgICAgICAgZm9y
Y2VDYW5FeGl0Ci0gICAgICAgICAgICB8fCAhaXNJbnQzMlNwZWN1bGF0aW9uKGNoaWxkVmFsdWUx
Lm1fdHlwZSkKLSAgICAgICAgICAgIHx8ICFpc0ludDMyU3BlY3VsYXRpb24oY2hpbGRWYWx1ZTIu
bV90eXBlKSk7CisgICAgICAgICAgICB8fCAhaXNJbnQzMlNwZWN1bGF0aW9uKGNoaWxkVmFsdWUx
LT5tX3R5cGUpCisgICAgICAgICAgICB8fCAhaXNJbnQzMlNwZWN1bGF0aW9uKGNoaWxkVmFsdWUy
LT5tX3R5cGUpKTsKICAgICAgICAgY2hpbGRWYWx1ZTEuZmlsdGVyKFNwZWNJbnQzMik7CiAgICAg
ICAgIGNoaWxkVmFsdWUyLmZpbHRlcihTcGVjSW50MzIpOwogICAgIH0KICAgICAKLSAgICB2b2lk
IHNwZWN1bGF0ZU51bWJlckJpbmFyeShOb2RlJiBub2RlKQorICAgIHZvaWQgc3BlY3VsYXRlTnVt
YmVyQmluYXJ5KE5vZGUqIG5vZGUpCiAgICAgewotICAgICAgICBBYnN0cmFjdFZhbHVlJiBjaGls
ZFZhbHVlMSA9IGZvck5vZGUobm9kZS5jaGlsZDEoKSk7Ci0gICAgICAgIEFic3RyYWN0VmFsdWUm
IGNoaWxkVmFsdWUyID0gZm9yTm9kZShub2RlLmNoaWxkMigpKTsKLSAgICAgICAgbm9kZS5zZXRD
YW5FeGl0KAorICAgICAgICBBYnN0cmFjdFZhbHVlJiBjaGlsZFZhbHVlMSA9IGZvck5vZGUobm9k
ZS0+Y2hpbGQxKCkpOworICAgICAgICBBYnN0cmFjdFZhbHVlJiBjaGlsZFZhbHVlMiA9IGZvck5v
ZGUobm9kZS0+Y2hpbGQyKCkpOworICAgICAgICBub2RlLT5zZXRDYW5FeGl0KAogICAgICAgICAg
ICAgIWlzTnVtYmVyU3BlY3VsYXRpb24oY2hpbGRWYWx1ZTEubV90eXBlKQogICAgICAgICAgICAg
fHwgIWlzTnVtYmVyU3BlY3VsYXRpb24oY2hpbGRWYWx1ZTIubV90eXBlKSk7CiAgICAgICAgIGNo
aWxkVmFsdWUxLmZpbHRlcihTcGVjTnVtYmVyKTsKQEAgLTI0MCw5ICsyNDAsOSBAQCBwcml2YXRl
OgogICAgICAgICBEZWZpbml0ZWx5RmFsc2UsCiAgICAgICAgIERlZmluaXRlbHlUcnVlCiAgICAg
fTsKLSAgICBCb29sZWFuUmVzdWx0IGJvb2xlYW5SZXN1bHQoTm9kZSYsIEFic3RyYWN0VmFsdWUm
KTsKKyAgICBCb29sZWFuUmVzdWx0IGJvb2xlYW5SZXN1bHQoTm9kZSosIEFic3RyYWN0VmFsdWUm
KTsKICAgICAKLSAgICBib29sIHRyeVNldENvbnN0YW50KE5vZGVJbmRleCBub2RlSW5kZXgsIEpT
VmFsdWUgdmFsdWUpCisgICAgYm9vbCB0cnlTZXRDb25zdGFudChOb2RlKiBub2RlLCBKU1ZhbHVl
IHZhbHVlKQogICAgIHsKICAgICAgICAgLy8gTWFrZSBzdXJlIHdlIGRvbid0IGNvbnN0YW50IGZv
bGQgc29tZXRoaW5nIHRoYXQgd2lsbCBwcm9kdWNlIHZhbHVlcyB0aGF0IGNvbnRyYXZlbmUKICAg
ICAgICAgLy8gcHJlZGljdGlvbnMuIElmIHRoYXQgaGFwcGVucyB0aGVuIHdlIGtub3cgdGhhdCB0
aGUgY29kZSB3aWxsIE9TUiBleGl0LCBmb3JjaW5nCkBAIC0yNTEsMTEgKzI1MSwxMSBAQCBwcml2
YXRlOgogICAgICAgICAvLyBsb3Qgb2Ygc3VidGxlIGNvZGUgdGhhdCBhc3N1bWVzIHRoYXQKICAg
ICAgICAgLy8gc3BlY3VsYXRpb25Gcm9tVmFsdWUoanNDb25zdGFudCkgPT0ganNDb25zdGFudC5w
cmVkaWN0aW9uKCkuICJIYXJkZW5pbmciIHRoYXQgY29kZQogICAgICAgICAvLyBpcyBwcm9iYWJs
eSBsZXNzIHNhbmUgdGhhbiBqdXN0IHB1bGxpbmcgYmFjayBvbiBjb25zdGFudCBmb2xkaW5nLgot
ICAgICAgICBTcGVjdWxhdGVkVHlwZSBvbGRUeXBlID0gbV9ncmFwaFtub2RlSW5kZXhdLnByZWRp
Y3Rpb24oKTsKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUgb2xkVHlwZSA9IG5vZGUtPnByZWRpY3Rp
b24oKTsKICAgICAgICAgaWYgKG1lcmdlU3BlY3VsYXRpb25zKHNwZWN1bGF0aW9uRnJvbVZhbHVl
KHZhbHVlKSwgb2xkVHlwZSkgIT0gb2xkVHlwZSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICAgICAgCi0gICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQodmFsdWUpOworICAgICAg
ICBmb3JOb2RlKG5vZGUpLnNldCh2YWx1ZSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0K
ICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RWYWx1ZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RWYWx1
ZS5oCShyZXZpc2lvbiAxNDA1MDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fi
c3RyYWN0VmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTEsIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDExLCAyMDEyLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDE4LDYgKzQxOCw4IEBA
IHN0cnVjdCBBYnN0cmFjdFZhbHVlIHsKICAgICAvLyAgICBjaGFuZ2UgeCdzIHN0cnVjdHVyZSBh
bmQgd2UgaGF2ZSBubyB3YXkgb2YgcHJvdmluZyBvdGhlcndpc2UsIGJ1dAogICAgIC8vICAgIHgn
cyBtX2Z1dHVyZVBvc3NpYmxlU3RydWN0dXJlIHdpbGwgYmUgd2hhdGV2ZXIgc3RydWN0dXJlIHdl
IGhhZCBjaGVja2VkCiAgICAgLy8gICAgd2hlbiBnZXR0aW5nIHByb3BlcnR5ICdmJy4KKyAgICAK
KyAgICAvLyBOQi4gQWxsIGZpZWxkcyBpbiB0aGlzIHN0cnVjdCBtdXN0IGhhdmUgdHJpdmlhbCBk
ZXN0cnVjdG9ycy4KIAogICAgIC8vIFRoaXMgaXMgYSBwcm92ZW4gY29uc3RyYWludCBvbiB0aGUg
c3RydWN0dXJlcyB0aGF0IHRoaXMgdmFsdWUgY2FuIGhhdmUgcmlnaHQKICAgICAvLyBub3cuIFRo
ZSBzdHJ1Y3R1cmUgb2YgdGhlIGN1cnJlbnQgdmFsdWUgbXVzdCBiZWxvbmcgdG8gdGhpcyBzZXQu
IFRoZSBzZXQgbWF5CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FkamFjZW5j
eUxpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FkamFj
ZW5jeUxpc3QuaAkocmV2aXNpb24gMTQwNTA0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdBZGphY2VuY3lMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMSwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTU3LDcgKzU3LDcgQEAgcHVibGlj
OgogICAgICAgICB9CiAgICAgfQogICAgIAotICAgIEFkamFjZW5jeUxpc3QoS2luZCBraW5kLCBO
b2RlSW5kZXggY2hpbGQxLCBOb2RlSW5kZXggY2hpbGQyLCBOb2RlSW5kZXggY2hpbGQzKQorICAg
IEFkamFjZW5jeUxpc3QoS2luZCBraW5kLCBOb2RlKiBjaGlsZDEsIE5vZGUqIGNoaWxkMiwgTm9k
ZSogY2hpbGQzKQogI2lmICFBU1NFUlRfRElTQUJMRUQKICAgICAgICAgOiBtX2tpbmQoRml4ZWQp
CiAjZW5kaWYKQEAgLTExOCw3ICsxMTgsNyBAQCBwdWJsaWM6CiAgICAgICAgIGNoaWxkKDIpID0g
Y2hpbGQzOwogICAgIH0KICAgICAKLSAgICB2b2lkIGluaXRpYWxpemUoTm9kZUluZGV4IGNoaWxk
MSA9IE5vTm9kZSwgTm9kZUluZGV4IGNoaWxkMiA9IE5vTm9kZSwgTm9kZUluZGV4IGNoaWxkMyA9
IE5vTm9kZSkKKyAgICB2b2lkIGluaXRpYWxpemUoTm9kZSogY2hpbGQxID0gMCwgTm9kZSogY2hp
bGQyID0gMCwgTm9kZSogY2hpbGQzID0gMCkKICAgICB7CiAgICAgICAgIGluaXRpYWxpemUoRWRn
ZShjaGlsZDEpLCBFZGdlKGNoaWxkMiksIEVkZ2UoY2hpbGQzKSk7CiAgICAgfQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBbGxvY2F0b3IuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FsbG9jYXRvci5oCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBbGxvY2F0b3IuaAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSwyMzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2lmbmRlZiBERkdBbGxvY2F0b3JfaAorI2RlZmluZSBERkdBbGxvY2F0b3JfaAorCisjaW5j
bHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUg
PHd0Zi9QYWdlQWxsb2NhdGlvbkFsaWduZWQuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBERkcgeworCisvLyBDdXN0b20gcG9vbCBhbGxvY2F0b3IgZm9yIGV4YWN0bHkgb25lIHR5cGUg
KHR5cGUgVCkuIEl0IGhhcyBmYXN0IChPKDEpLCBvbmx5IGEgZmV3CisvLyBpbnN0cnVjdGlvbnMp
IGFsbG9jYXRvciwgYW5kIGEgc2ltaWxhcmx5IGZhc3QgZnJlZSgpLiBSZWN5Y2xpbmcgd29ya3Mg
aWYgZWl0aGVyIG9mCisvLyB0aGUgZm9sbG93aW5nIGlzIHRydWU6CisvLyAtIFQgaGFzIGEgdHJp
dmlhbCBkZXN0cnVjdG9yLiBJbiB0aGF0IGNhc2UgeW91IGRvbid0IGhhdmUgdG8gZXZlciBjYWxs
IGZyZWUoKSBvbgorLy8gICBhbnl0aGluZy4gWW91IGNhbiBqdXN0IGNhbGwgZnJlZUFsbCgpIGlu
c3RlYWQuCisvLyAtIFlvdSBjYWxsIGZyZWUoKSBvbiBhbGwgVCdzIHRoYXQgeW91IGFsbG9jYXRl
ZCwgYW5kIG5ldmVyIHVzZSBmcmVlQWxsKCkuCisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitjbGFz
cyBBbGxvY2F0b3IgeworcHVibGljOgorICAgIEFsbG9jYXRvcigpOworICAgIH5BbGxvY2F0b3Io
KTsKKyAgICAKKyAgICB2b2lkKiBhbGxvY2F0ZSgpOyAvLyBVc2UgcGxhY2VtZW50IG5ldyB0byBh
bGxvY2F0ZSwgYW5kIGF2b2lkIHVzaW5nIHRoaXMgbWV0aG9kLgorICAgIHZvaWQgZnJlZShUKik7
IC8vIENhbGwgdGhpcyBtZXRob2QgdG8gZGVsZXRlOyBuZXZlciB1c2UgJ2RlbGV0ZScgZGlyZWN0
bHkuCisgICAgCisgICAgdm9pZCBmcmVlQWxsKCk7IC8vIE9ubHkgY2FsbCB0aGlzIGlmIFQgaGFz
IGEgdHJpdmlhbCBkZXN0cnVjdG9yLgorICAgIHZvaWQgcmVzZXQoKTsgLy8gTGlrZSBmcmVlQWxs
KCksIGJ1dCBhbHNvIHJldHVybnMgYWxsIG1lbW9yeSB0byB0aGUgT1MuCisgICAgCisgICAgdW5z
aWduZWQgaW5kZXhPZihUKik7CisgICAgCisgICAgc3RhdGljIEFsbG9jYXRvciogYWxsb2NhdG9y
T2YoVCopOworICAgIAorcHJpdmF0ZToKKyAgICB2b2lkKiBidW1wQWxsb2NhdGUoKTsKKyAgICB2
b2lkKiBmcmVlTGlzdEFsbG9jYXRlKCk7CisgICAgdm9pZCogYWxsb2NhdGVTbG93KCk7CisgICAg
dm9pZCBmcmVlUmVnaW9uc1N0YXJ0aW5nQXQoUmVnaW9uKik7CisgICAgdm9pZCBzdGFydGluZ0J1
bXBpbmdJbihSZWdpb24qKTsKKyAgICAKKyAgICBzdHJ1Y3QgUmVnaW9uIHsKKyAgICAgICAgc3Rh
dGljIHNpemVfdCBzaXplKCkgeyByZXR1cm4gNjQgKiBLQjsgfQorICAgICAgICBzdGF0aWMgc2l6
ZV90IGhlYWRlclNpemUoKSB7IHJldHVybiBzdGQ6Om1heChzaXplb2YoUmVnaW9uKSwgc2l6ZW9m
KFQpKTsgfQorICAgICAgICBzdGF0aWMgdW5zaWduZWQgbnVtYmVyT2ZUaGluZ3NQZXJSZWdpb24o
KSB7IHJldHVybiAoc2l6ZSgpIC0gaGVhZGVyU2l6ZSgpKSAvIHNpemVvZihUKTsgfQorICAgICAg
ICBUKiBkYXRhKCkgeyByZXR1cm4gYml0d2lzZV9jYXN0PFQqPihiaXR3aXNlX2Nhc3Q8Y2hhcio+
KHRoaXMpICsgaGVhZGVyU2l6ZSgpKTsgfQorICAgICAgICBib29sIGlzSW5UaGlzUmVnaW9uKFQq
IHBvaW50ZXIpIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkPihwb2ludGVyIC0gZGF0YSgp
KSA8IG51bWJlck9mVGhpbmdzUGVyUmVnaW9uKCk7IH0KKyAgICAgICAgUmVnaW9uKiByZWdpb25G
b3IoVCogcG9pbnRlcikgeyByZXR1cm4gYml0d2lzZV9jYXN0PFJlZ2lvbio+KGJpdHdpc2VfY2Fz
dDx1aW50cHRyX3Q+KHBvaW50ZXIpICYgfihzaXplKCkgLSAxKSk7IH0KKyAgICAgICAgCisgICAg
ICAgIFBhZ2VBbGxvY2F0aW9uQWxpZ25lZCBtX2FsbG9jYXRpb247CisgICAgICAgIEFsbG9jYXRv
ciogbV9hbGxvY2F0b3I7CisgICAgICAgIFJlZ2lvbiogbV9uZXh0OworICAgIH07CisgICAgCisg
ICAgUmVnaW9uKiBtX3JlZ2lvbkhlYWQ7CisgICAgdm9pZCoqIG1fZnJlZUxpc3RIZWFkOworICAg
IFQqIG1fYnVtcEVuZDsKKyAgICB1bnNpZ25lZCBtX2J1bXBSZW1haW5pbmc7Cit9OworCit0ZW1w
bGF0ZTx0eXBlbmFtZSBUPgoraW5saW5lIEFsbG9jYXRvcjo6QWxsb2NhdG9yKCkKKyAgICA6IG1f
cmVnaW9uSGVhZCgwKQorICAgICwgbV9mcmVlTGlzdEhlYWQoMCkKKyAgICAsIG1fYnVtcFJlbWFp
bmluZygwKQoreworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgoraW5saW5lIEFsbG9jYXRvcjo6
fkFsbG9jYXRvcigpCit7CisgICAgcmVzZXQoKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4K
K0FMV0FZU19JTkxJTkUgdm9pZCogQWxsb2NhdG9yOjphbGxvY2F0ZSgpCit7CisgICAgaWYgKExJ
S0VMWSh2b2lkKiByZXN1bHQgPSBidW1wQWxsb2NhdGUoKSkpCisgICAgICAgIHJldHVybiByZXN1
bHQ7CisgICAgcmV0dXJuIGZyZWVMaXN0QWxsb2NhdGUoKTsKK30KKwordGVtcGxhdGU8dHlwZW5h
bWUgVD4KK3ZvaWQgQWxsb2NhdG9yOjpmcmVlKFQqIG9iamVjdCkKK3sKKyAgICBvYmplY3QtPn5U
KCk7CisgICAgCisgICAgdm9pZCoqIGNlbGwgPSBiaXR3aXNlX2Nhc3Q8dm9pZCoqPihvYmplY3Qp
OworICAgICpjZWxsID0gbV9mcmVlTGlzdEhlYWQ7CisgICAgbV9mcmVlTGlzdEhlYWQgPSBjZWxs
OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgordm9pZCBBbGxvY2F0b3I6OmZyZWVBbGwoKQor
eworICAgIGlmICghbV9yZWdpb25IZWFkKSB7CisgICAgICAgIEFTU0VSVCghbV9idW1wUmVtYWlu
aW5nKTsKKyAgICAgICAgQVNTRVJUKCFtX2ZyZWVMaXN0SGVhZCk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisgICAgCisgICAgLy8gU2luY2UgdGhlIGNhbGxlciBpcyBvcHRpbmcgb3V0IG9mIGNh
bGxpbmcgdGhlIGRlc3RydWN0b3IgZm9yIGFueSBhbGxvY2F0ZWQgdGhpbmcsCisgICAgLy8gd2Ug
aGF2ZSB0d28gY2hvaWNlcywgcGx1cyBhIGNvbnRpbnV1bSBiZXR3ZWVuOiB3ZSBjYW4gZWl0aGVy
IGp1c3QgZGVsZXRlIGFsbCByZWdpb25zCisgICAgLy8gKGkuZS4gY2FsbCByZXNldCgpKSwgb3Ig
d2UgY2FuIG1ha2UgYWxsIHJlZ2lvbnMgYXZhaWxhYmxlIGZvciByZXVzZS4gV2UgZG8gc29tZXRo
aW5nCisgICAgLy8gdGhhdCBvcHRpbWl6ZXMgZm9yIChhKSBzcGVlZCBvZiBmcmVlQWxsKCksIChi
KSB0aGUgYXNzdW1wdGlvbiB0aGF0IGlmIHRoZSB1c2VyIGNhbGxzCisgICAgLy8gZnJlZUFsbCgp
IHRoZW4gdGhleSB3aWxsIHByb2JhYmx5IGJlIGNhbGxpbmcgYWxsb2NhdGUoKSBpbiB0aGUgbmVh
ciBmdXR1cmUuIE5hbWVseSwKKyAgICAvLyB3ZSBmcmVlIGFsbCBidXQgb25lIHJlZ2lvbiwgYW5k
IG1ha2UgdGhlIHJlbWFpbmluZyByZWdpb24gYSBidW1wIGFsbG9jYXRpb24gcmVnaW9uLgorICAg
IAorICAgIGZvciAoUmVnaW9uKiByZWdpb24gPSBtX3JlZ2lvbkhlYWQtPm1fbmV4dDsgcmVnaW9u
OyByZWdpb24gPSByZWdpb24tPm1fbmV4dCkKKyAgICAgICAgYnVpbGRGcmVlTGlzdEluKHJlZ2lv
bik7CisgICAgCisgICAgbV9yZWdpb25IZWFkLT5tX25leHQgPSAwOworICAgIG1fZnJlZUxpc3RI
ZWFkID0gMDsKKyAgICBzdGFydEJ1bXBpbmdJbihtX3JlZ2lvbkhlYWQpOworfQorCit0ZW1wbGF0
ZTx0eXBlbmFtZSBUPgordm9pZCBBbGxvY2F0b3I6OnJlc2V0KCkKK3sKKyAgICBmcmVlUmVnaW9u
c1N0YXJ0aW5nQXQobV9yZWdpb25IZWFkKTsKKyAgICAKKyAgICBtX3JlZ2lvbkhlYWQgPSAwOwor
ICAgIG1fZnJlZUxpc3RIZWFkID0gMDsKKyAgICBtX2J1bXBSZW1haW5pbmcgPSAwOworfQorCit0
ZW1wbGF0ZTx0eXBlbmFtZSBUPgordW5zaWduZWQgQWxsb2NhdG9yOjppbmRleE9mKFQqIG9iamVj
dCkKK3sKKyAgICB1bnNpZ25lZCBiYXNlSW5kZXggPSAwOworICAgIGZvciAoUmVnaW9uKiByZWdp
b24gPSBtX3JlZ2lvbkhlYWQ7IHJlZ2lvbjsgcmVnaW9uID0gcmVnaW9uLT5tX25leHQpIHsKKyAg
ICAgICAgaWYgKHJlZ2lvbi0+aXNJblRoaXNSZWdpb24ob2JqZWN0KSkKKyAgICAgICAgICAgIHJl
dHVybiBiYXNlSW5kZXggKyAob2JqZWN0IC0gcmVnaW9uLT5kYXRhKCkpOworICAgICAgICBiYXNl
SW5kZXggKz0gUmVnaW9uOjpudW1iZXJPZlRoaW5nc1BlclJlZ2lvbigpOworICAgIH0KKyAgICBD
UkFTSCgpOworICAgIHJldHVybiAwOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorQWxsb2Nh
dG9yKiBBbGxvY2F0b3I6OmFsbG9jYXRvck9mKFQqIG9iamVjdCkKK3sKKyAgICByZXR1cm4gUmVn
aW9uOjpyZWdpb25Gb3Iob2JqZWN0KS0+bV9hbGxvY2F0b3I7Cit9CisKK3RlbXBsYXRlPHR5cGVu
YW1lIFQ+CitBTFdBWVNfSU5MSU5FIHZvaWQqIEFsbG9jYXRvcjo6YnVtcEFsbG9jYXRlKCkKK3sK
KyAgICBpZiAodW5zaWduZWQgcmVtYWluaW5nID0gbV9idW1wUmVtYWluaW5nKSB7CisgICAgICAg
IHJlbWFpbmluZy0tOworICAgICAgICBtX2J1bXBSZW1haW5pbmcgPSByZW1haW5pbmc7CisgICAg
ICAgIHJldHVybiBtX2J1bXBFbmQgLSAocmVtYWluaW5nICsgMSk7CisgICAgfQorICAgIHJldHVy
biAwOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgordm9pZCogQWxsb2NhdG9yOjpmcmVlTGlz
dEFsbG9jYXRlKCkKK3sKKyAgICB2b2lkKiogcmVzdWx0ID0gbV9mcmVlTGlzdEhlYWQ7CisgICAg
aWYgKFVOTElLRUxZKCFyZXN1bHQpKQorICAgICAgICByZXR1cm4gYWxsb2NhdGVTbG93KCk7Cisg
ICAgbV9mcmVlTGlzdEhlYWQgPSBiaXR3aXNlX2Nhc3Q8dm9pZCoqPigqcmVzdWx0KTsKKyAgICBy
ZXR1cm4gcmVzdWx0OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgordm9pZCogQWxsb2NhdG9y
OjphbGxvY2F0ZVNsb3coKQoreworICAgIEFTU0VSVCghbV9mcmVlTGlzdEhlYWQpOworICAgIEFT
U0VSVCghbV9idW1wUmVtYWluaW5nKTsKKyAgICAKKyAgICBQYWdlQWxsb2NhdGlvbkFsaWduZWQg
YWxsb2NhdGlvbiA9IFBhZ2VBbGxvY2F0aW9uQWxpZ25lZDo6YWxsb2NhdGUoUmVnaW9uOjpzaXpl
KCksIFJlZ2lvbjo6c2l6ZSgpLCBPU0FsbG9jYXRvcjo6SlNHQ0hlYXBQYWdlcyk7CisgICAgaWYg
KCFzdGF0aWNfY2FzdDxib29sPihhbGxvY2F0aW9uKSkKKyAgICAgICAgQ1JBU0goKTsKKyAgICBS
ZWdpb24qIHJlZ2lvbiA9IHN0YXRpY19jYXN0PFJlZ2lvbio+KGFsbG9jYXRpb24uYmFzZSgpKTsK
KyAgICByZWdpb24tPm1fYWxsb2NhdGlvbiA9IG1fYWxsb2NhdGlvbjsKKyAgICByZWdpb24tPm1f
YWxsb2N0b3IgPSB0aGlzOworICAgIHN0YXJ0QnVtcGluZ0luKHJlZ2lvbik7CisgICAgcmVnaW9u
LT5tX25leHQgPSBtX3JlZ2lvbkhlYWQ7CisgICAgbV9yZWdpb25IZWFkID0gcmVnaW9uOworICAg
IAorICAgIHZvaWQqIHJlc3VsdCA9IGJ1bXBBbGxvY2F0ZSgpOworICAgIEFTU0VSVChyZXN1bHQp
OworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+Cit2b2lkIEFs
bG9jYXRvcjo6ZnJlZVJlZ2lvbnNTdGFydGluZ0F0KFJlZ2lvbiogcmVnaW9uKQoreworICAgIHdo
aWxlIChyZWdpb24pIHsKKyAgICAgICAgUmVnaW9uKiBuZXh0UmVnaW9uID0gcmVnaW9uLT5tX25l
eHQ7CisgICAgICAgIHJlZ2lvbi0+bV9hbGxvY2F0aW9uLmRlYWxsb2NhdGUoKTsKKyAgICAgICAg
cmVnaW9uID0gbmV4dFJlZ2lvbjsKKyAgICB9Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+Cit2
b2lkIEFsbG9jYXRvcjo6c3RhcnRCdW1waW5nSW4oUmVnaW9uKiByZWdpb24pCit7CisgICAgbV9i
dW1wRW5kID0gcmVnaW9uLT5kYXRhKCkgKyBSZWdpb246Om51bWJlck9mVGhpbmdzUGVyUmVnaW9u
KCk7CisgICAgbV9idW1wUmVtYWluaW5nID0gUmVnaW9uOjpudW1iZXJPZlRoaW5nc1BlclJlZ2lv
bigpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUo
REZHX0pJVCkKKworI2VuZGlmIC8vIERGR0FsbG9jYXRvcl9oCisKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRzU2ltcGxpZmljYXRpb25QaGFzZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVudHNTaW1wbGlmaWNh
dGlvblBoYXNlLmNwcAkocmV2aXNpb24gMTQwNTA0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdBcmd1bWVudHNTaW1wbGlmaWNhdGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDEzIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
MTQ5LDExICsxNDksMTAgQEAgcHVibGljOgogICAgICAgICAgICAgaWYgKCFibG9jaykKICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW5kZXhJbkJs
b2NrID0gMDsgaW5kZXhJbkJsb2NrIDwgYmxvY2stPnNpemUoKTsgKytpbmRleEluQmxvY2spIHsK
LSAgICAgICAgICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4ID0gYmxvY2stPmF0KGluZGV4SW5C
bG9jayk7Ci0gICAgICAgICAgICAgICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhbbm9kZUluZGV4XTsK
LSAgICAgICAgICAgICAgICBpZiAoIW5vZGUuc2hvdWxkR2VuZXJhdGUoKSkKKyAgICAgICAgICAg
ICAgICBOb2RlKiBub2RlID0gYmxvY2stPmF0KGluZGV4SW5CbG9jayk7CisgICAgICAgICAgICAg
ICAgaWYgKCFub2RlLT5zaG91bGRHZW5lcmF0ZSgpKQogICAgICAgICAgICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUub3AoKSkgeworICAgICAgICAgICAg
ICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewogICAgICAgICAgICAgICAgIGNhc2UgQ3JlYXRlQXJn
dW1lbnRzOiB7CiAgICAgICAgICAgICAgICAgICAgIC8vIElnbm9yZSB0aGlzIG9wLiBJZiB3ZSBz
ZWUgYSBsb25lIENyZWF0ZUFyZ3VtZW50cyB0aGVuIHdlIHdhbnQgdG8KICAgICAgICAgICAgICAg
ICAgICAgLy8gY29tcGxldGVseSBpZ25vcmUgaXQgYmVjYXVzZToKQEAgLTE3MywxNiArMTcyLDE2
IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIAogICAg
ICAgICAgICAgICAgIGNhc2UgU2V0TG9jYWw6IHsKLSAgICAgICAgICAgICAgICAgICAgTm9kZSYg
c291cmNlID0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXTsKLSAgICAgICAgICAgICAgICAgICAgVmFy
aWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBub2RlLnZhcmlhYmxlQWNjZXNz
RGF0YSgpOworICAgICAgICAgICAgICAgICAgICBOb2RlKiBzb3VyY2UgPSBub2RlLT5jaGlsZDEo
KS5ub2RlKCk7CisgICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFi
bGVBY2Nlc3NEYXRhID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CiAgICAgICAgICAgICAg
ICAgICAgIGludCBhcmd1bWVudHNSZWdpc3RlciA9Ci0gICAgICAgICAgICAgICAgICAgICAgICBt
X2dyYXBoLnVuY2hlY2tlZEFyZ3VtZW50c1JlZ2lzdGVyRm9yKG5vZGUuY29kZU9yaWdpbik7Ci0g
ICAgICAgICAgICAgICAgICAgIGlmIChzb3VyY2Uub3AoKSAhPSBDcmVhdGVBcmd1bWVudHMgJiYg
c291cmNlLm9wKCkgIT0gUGhhbnRvbUFyZ3VtZW50cykgeworICAgICAgICAgICAgICAgICAgICAg
ICAgbV9ncmFwaC51bmNoZWNrZWRBcmd1bWVudHNSZWdpc3RlckZvcihub2RlLT5jb2RlT3JpZ2lu
KTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHNvdXJjZS0+b3AoKSAhPSBDcmVhdGVBcmd1bWVu
dHMgJiYgc291cmNlLT5vcCgpICE9IFBoYW50b21Bcmd1bWVudHMpIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHRoZSBzb3VyY2Ugb2YgdGhlIFNldExvY2FsIGtu
b3dzIHRoYXQgaWYgaXQncwogICAgICAgICAgICAgICAgICAgICAgICAgLy8gYSB2YXJpYWJsZSB0
aGF0IHdlIHRoaW5rIGlzIGFsaWFzZWQgdG8gdGhlIGFyZ3VtZW50cywgdGhlbiBpdAogICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gbWF5IGVzY2FwZSBhdCB0aGlzIHBvaW50LiBJbiBmdXR1cmUs
IHdlIGNvdWxkIHRyYWNrIHRyYW5zaXRpdmUKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFs
aWFzaW5nLiBCdXQgbm90IHlldC4KLSAgICAgICAgICAgICAgICAgICAgICAgIG9ic2VydmVCYWRB
cmd1bWVudHNVc2Uobm9kZS5jaGlsZDEoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBvYnNl
cnZlQmFkQXJndW1lbnRzVXNlKHNvdXJjZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAKICAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIElmIHRoaXMgaXMgYW4gYXNzaWdubWVudCB0byB0aGUg
YXJndW1lbnRzIHJlZ2lzdGVyLCB0aGVuCiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBwcmV0
ZW5kIGFzIGlmIHRoZSBhcmd1bWVudHMgd2VyZSBjcmVhdGVkLiBXZSBkb24ndCB3YW50IHRvCkBA
IC0xOTUsMTQgKzE5NCwxNCBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBp
bml0X2xhenlfcmVnIHNpbmNlIGl0IHRyZWF0cyBDcmVhdGVBcmd1bWVudHMgYXMgcmVhZGluZwog
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gbG9jYWwgdmFyaWFibGVzLiBUaGF0IGNvdWxkIGJl
IGZpeGVkLCBidXQgaXQncyBlYXNpZXIgdG8KICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdv
cmsgYXJvdW5kIHRoaXMgaGVyZS4KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzb3VyY2Uu
b3AoKSA9PSBKU0NvbnN0YW50Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgIXNvdXJj
ZS52YWx1ZU9mSlNDb25zdGFudChjb2RlQmxvY2soKSkpCisgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoc291cmNlLT5vcCgpID09IEpTQ29uc3RhbnQKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAmJiAhc291cmNlLT52YWx1ZU9mSlNDb25zdGFudChjb2RlQmxvY2soKSkpCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAKICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChhcmd1bWVudHNSZWdpc3RlciAhPSBJbnZhbGlkVmly
dHVhbFJlZ2lzdGVyCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgKHZhcmlhYmxlQWNj
ZXNzRGF0YS0+bG9jYWwoKSA9PSBhcmd1bWVudHNSZWdpc3RlcgogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB8fCB2YXJpYWJsZUFjY2Vzc0RhdGEtPmxvY2FsKCkgPT0gdW5tb2RpZmll
ZEFyZ3VtZW50c1JlZ2lzdGVyKGFyZ3VtZW50c1JlZ2lzdGVyKSkpIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBtX2NyZWF0ZXNBcmd1bWVudHMuYWRkKG5vZGUuY29kZU9yaWdpbi5pbmxp
bmVDYWxsRnJhbWUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fY3JlYXRlc0FyZ3Vt
ZW50cy5hZGQobm9kZS0+Y29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpOwogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgfQogCkBAIC0y
MTQsMTkgKzIxMywxOSBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgICAgICBBcmd1bWVu
dHNBbGlhc2luZ0RhdGEmIGRhdGEgPQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fYXJn
dW1lbnRzQWxpYXNpbmcuZmluZCh2YXJpYWJsZUFjY2Vzc0RhdGEpLT52YWx1ZTsKICAgICAgICAg
ICAgICAgICAgICAgICAgIGRhdGEubWVyZ2VOb25Bcmd1bWVudHNBc3NpZ25tZW50KCk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBkYXRhLm1lcmdlQ2FsbENvbnRleHQobm9kZS5jb2RlT3JpZ2lu
LmlubGluZUNhbGxGcmFtZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLm1lcmdlQ2Fs
bENvbnRleHQobm9kZS0+Y29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpOwogICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICAgICAgaWYgKGFyZ3VtZW50c1JlZ2lzdGVyICE9IEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIKICAg
ICAgICAgICAgICAgICAgICAgICAgICYmICh2YXJpYWJsZUFjY2Vzc0RhdGEtPmxvY2FsKCkgPT0g
YXJndW1lbnRzUmVnaXN0ZXIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCB2YXJpYWJs
ZUFjY2Vzc0RhdGEtPmxvY2FsKCkgPT0gdW5tb2RpZmllZEFyZ3VtZW50c1JlZ2lzdGVyKGFyZ3Vt
ZW50c1JlZ2lzdGVyKSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLmNvZGVP
cmlnaW4uaW5saW5lQ2FsbEZyYW1lID09IHNvdXJjZS5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFt
ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5jb2RlT3JpZ2luLmlubGluZUNh
bGxGcmFtZSA9PSBzb3VyY2UtPmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKQogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgbV9jcmVh
dGVzQXJndW1lbnRzLmFkZChzb3VyY2UuY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpOworICAg
ICAgICAgICAgICAgICAgICAgICAgbV9jcmVhdGVzQXJndW1lbnRzLmFkZChzb3VyY2UtPmNvZGVP
cmlnaW4uaW5saW5lQ2FsbEZyYW1lKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIGlmICh2YXJpYWJsZUFj
Y2Vzc0RhdGEtPmlzQ2FwdHVyZWQoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgbV9jcmVh
dGVzQXJndW1lbnRzLmFkZChzb3VyY2UuY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpOworICAg
ICAgICAgICAgICAgICAgICAgICAgbV9jcmVhdGVzQXJndW1lbnRzLmFkZChzb3VyY2UtPmNvZGVP
cmlnaW4uaW5saW5lQ2FsbEZyYW1lKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIEFyZ3VtZW50c0FsaWFz
aW5nRGF0YSYgZGF0YSA9CkBAIC0yMzQsMjkgKzIzMywyOSBAQCBwdWJsaWM6CiAgICAgICAgICAg
ICAgICAgICAgIGRhdGEubWVyZ2VBcmd1bWVudHNBc3NpZ25tZW50KCk7CiAgICAgICAgICAgICAg
ICAgICAgIC8vIFRoaXMgZW5zdXJlcyB0aGF0IHRoZSB2YXJpYWJsZSdzIHVzZXMgYXJlIGluIHRo
ZSBzYW1lIGNvbnRleHQgYXMKICAgICAgICAgICAgICAgICAgICAgLy8gdGhlIGFyZ3VtZW50cyBp
dCBpcyBhbGlhc2luZy4KLSAgICAgICAgICAgICAgICAgICAgZGF0YS5tZXJnZUNhbGxDb250ZXh0
KG5vZGUuY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpOwotICAgICAgICAgICAgICAgICAgICBk
YXRhLm1lcmdlQ2FsbENvbnRleHQoc291cmNlLmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKTsK
KyAgICAgICAgICAgICAgICAgICAgZGF0YS5tZXJnZUNhbGxDb250ZXh0KG5vZGUtPmNvZGVPcmln
aW4uaW5saW5lQ2FsbEZyYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgZGF0YS5tZXJnZUNhbGxD
b250ZXh0KHNvdXJjZS0+Y29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpOwogICAgICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIAog
ICAgICAgICAgICAgICAgIGNhc2UgR2V0TG9jYWw6CiAgICAgICAgICAgICAgICAgY2FzZSBQaGk6
IHsKLSAgICAgICAgICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vz
c0RhdGEgPSBub2RlLnZhcmlhYmxlQWNjZXNzRGF0YSgpOworICAgICAgICAgICAgICAgICAgICBW
YXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9IG5vZGUtPnZhcmlhYmxlQWNj
ZXNzRGF0YSgpOwogICAgICAgICAgICAgICAgICAgICBpZiAodmFyaWFibGVBY2Nlc3NEYXRhLT5p
c0NhcHR1cmVkKCkpCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
ICAgICAgICAgQXJndW1lbnRzQWxpYXNpbmdEYXRhJiBkYXRhID0KICAgICAgICAgICAgICAgICAg
ICAgICAgIG1fYXJndW1lbnRzQWxpYXNpbmcuZmluZCh2YXJpYWJsZUFjY2Vzc0RhdGEpLT52YWx1
ZTsKLSAgICAgICAgICAgICAgICAgICAgZGF0YS5tZXJnZUNhbGxDb250ZXh0KG5vZGUuY29kZU9y
aWdpbi5pbmxpbmVDYWxsRnJhbWUpOworICAgICAgICAgICAgICAgICAgICBkYXRhLm1lcmdlQ2Fs
bENvbnRleHQobm9kZS0+Y29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpOwogICAgICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIAog
ICAgICAgICAgICAgICAgIGNhc2UgRmx1c2g6IHsKLSAgICAgICAgICAgICAgICAgICAgVmFyaWFi
bGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBub2RlLnZhcmlhYmxlQWNjZXNzRGF0
YSgpOworICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNj
ZXNzRGF0YSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOwogICAgICAgICAgICAgICAgICAg
ICBpZiAodmFyaWFibGVBY2Nlc3NEYXRhLT5pc0NhcHR1cmVkKCkpCiAgICAgICAgICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgQXJndW1lbnRzQWxpYXNpbmdEYXRh
JiBkYXRhID0KICAgICAgICAgICAgICAgICAgICAgICAgIG1fYXJndW1lbnRzQWxpYXNpbmcuZmlu
ZCh2YXJpYWJsZUFjY2Vzc0RhdGEpLT52YWx1ZTsKLSAgICAgICAgICAgICAgICAgICAgZGF0YS5t
ZXJnZUNhbGxDb250ZXh0KG5vZGUuY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpOworICAgICAg
ICAgICAgICAgICAgICBkYXRhLm1lcmdlQ2FsbENvbnRleHQobm9kZS0+Y29kZU9yaWdpbi5pbmxp
bmVDYWxsRnJhbWUpOwogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAg
Ly8gSWYgYSB2YXJpYWJsZSBpcyB1c2VkIGluIGEgZmx1c2ggdGhlbiBieSBkZWZpbml0aW9uIGl0
IGVzY2FwZXMuCiAgICAgICAgICAgICAgICAgICAgIGRhdGEuZXNjYXBlcyA9IHRydWU7CkBAIC0y
NjQsMTggKzI2MywxOCBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgICAgICAKICAgICAgICAgICAgICAgICBjYXNlIFNldEFyZ3VtZW50OiB7Ci0gICAgICAgICAg
ICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhID0gbm9kZS52
YXJpYWJsZUFjY2Vzc0RhdGEoKTsKKyAgICAgICAgICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NE
YXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKICAg
ICAgICAgICAgICAgICAgICAgaWYgKHZhcmlhYmxlQWNjZXNzRGF0YS0+aXNDYXB0dXJlZCgpKQog
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIEFyZ3Vt
ZW50c0FsaWFzaW5nRGF0YSYgZGF0YSA9CiAgICAgICAgICAgICAgICAgICAgICAgICBtX2FyZ3Vt
ZW50c0FsaWFzaW5nLmZpbmQodmFyaWFibGVBY2Nlc3NEYXRhKS0+dmFsdWU7CiAgICAgICAgICAg
ICAgICAgICAgIGRhdGEubWVyZ2VOb25Bcmd1bWVudHNBc3NpZ25tZW50KCk7Ci0gICAgICAgICAg
ICAgICAgICAgIGRhdGEubWVyZ2VDYWxsQ29udGV4dChub2RlLmNvZGVPcmlnaW4uaW5saW5lQ2Fs
bEZyYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgZGF0YS5tZXJnZUNhbGxDb250ZXh0KG5vZGUt
PmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAg
ICBjYXNlIEdldEJ5VmFsOiB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChub2RlLmFycmF5TW9k
ZSgpLnR5cGUoKSAhPSBBcnJheTo6QXJndW1lbnRzKSB7CisgICAgICAgICAgICAgICAgICAgIGlm
IChub2RlLT5hcnJheU1vZGUoKS50eXBlKCkgIT0gQXJyYXk6OkFyZ3VtZW50cykgewogICAgICAg
ICAgICAgICAgICAgICAgICAgb2JzZXJ2ZUJhZEFyZ3VtZW50c1VzZXMobm9kZSk7CiAgICAgICAg
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgfQpAQCAtMjgzLDE4
ICsyODIsMTggQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICAvLyBUaGF0J3Mgc28gYXdm
dWwgYW5kIHByZXR0eSBtdWNoIGltcG9zc2libGUgc2luY2UgaXQgd291bGQKICAgICAgICAgICAg
ICAgICAgICAgLy8gaW1wbHkgdGhhdCB0aGUgYXJndW1lbnRzIHdlcmUgcHJlZGljdGVkIGludGVn
ZXIsIGJ1dCBpdCdzCiAgICAgICAgICAgICAgICAgICAgIC8vIGdvb2QgdG8gYmUgZGVmZW5zaXZl
IGFuZCB0aG9yb3VnaC4KLSAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZUJhZEFyZ3VtZW50c1Vz
ZShub2RlLmNoaWxkMigpKTsKLSAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZVByb3BlckFyZ3Vt
ZW50c1VzZShub2RlLCBub2RlLmNoaWxkMSgpKTsKKyAgICAgICAgICAgICAgICAgICAgb2JzZXJ2
ZUJhZEFyZ3VtZW50c1VzZShub2RlLT5jaGlsZDIoKS5ub2RlKCkpOworICAgICAgICAgICAgICAg
ICAgICBvYnNlcnZlUHJvcGVyQXJndW1lbnRzVXNlKG5vZGUsIG5vZGUtPmNoaWxkMSgpKTsKICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgICAgICAKICAgICAgICAgICAgICAgICBjYXNlIEdldEFycmF5TGVuZ3RoOiB7Ci0gICAgICAg
ICAgICAgICAgICAgIGlmIChub2RlLmFycmF5TW9kZSgpLnR5cGUoKSAhPSBBcnJheTo6QXJndW1l
bnRzKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS50eXBlKCkg
IT0gQXJyYXk6OkFyZ3VtZW50cykgewogICAgICAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZUJh
ZEFyZ3VtZW50c1VzZXMobm9kZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAg
ICAgICAgICAgIG9ic2VydmVQcm9wZXJBcmd1bWVudHNVc2Uobm9kZSwgbm9kZS5jaGlsZDEoKSk7
CisgICAgICAgICAgICAgICAgICAgIG9ic2VydmVQcm9wZXJBcmd1bWVudHNVc2Uobm9kZSwgbm9k
ZS0+Y2hpbGQxKCkpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgICAgIApAQCAtMzM1LDE2ICszMzQsMTUgQEAgcHVibGljOgog
ICAgICAgICAgICAgaWYgKCFibG9jaykKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaW5kZXhJbkJsb2NrID0gMDsgaW5kZXhJbkJsb2NrIDwgYmxv
Y2stPnNpemUoKTsgKytpbmRleEluQmxvY2spIHsKLSAgICAgICAgICAgICAgICBOb2RlSW5kZXgg
bm9kZUluZGV4ID0gYmxvY2stPmF0KGluZGV4SW5CbG9jayk7Ci0gICAgICAgICAgICAgICAgTm9k
ZSYgbm9kZSA9IG1fZ3JhcGhbbm9kZUluZGV4XTsKLSAgICAgICAgICAgICAgICBpZiAoIW5vZGUu
c2hvdWxkR2VuZXJhdGUoKSkKKyAgICAgICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPmF0
KGluZGV4SW5CbG9jayk7CisgICAgICAgICAgICAgICAgaWYgKCFub2RlLT5zaG91bGRHZW5lcmF0
ZSgpKQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICBpZiAo
bm9kZS5vcCgpICE9IFNldExvY2FsKQorICAgICAgICAgICAgICAgIGlmIChub2RlLT5vcCgpICE9
IFNldExvY2FsKQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAg
ICBOb2RlJiBzb3VyY2UgPSBtX2dyYXBoW25vZGUuY2hpbGQxKCldOwotICAgICAgICAgICAgICAg
IGlmIChzb3VyY2Uub3AoKSAhPSBDcmVhdGVBcmd1bWVudHMpCisgICAgICAgICAgICAgICAgTm9k
ZSogc291cmNlID0gbm9kZS0+Y2hpbGQxKCkubm9kZSgpOworICAgICAgICAgICAgICAgIGlmIChz
b3VyY2UtPm9wKCkgIT0gQ3JlYXRlQXJndW1lbnRzKQogICAgICAgICAgICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNz
RGF0YSA9IG5vZGUudmFyaWFibGVBY2Nlc3NEYXRhKCk7CisgICAgICAgICAgICAgICAgVmFyaWFi
bGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0Rh
dGEoKTsKICAgICAgICAgICAgICAgICBpZiAodmFyaWFibGVBY2Nlc3NEYXRhLT5pc0NhcHR1cmVk
KCkpIHsKICAgICAgICAgICAgICAgICAgICAgLy8gVGhlIGNhcHR1cmVkIGNhc2Ugd291bGQgaGF2
ZSBhbHJlYWR5IGJlZW4gdGFrZW4gY2FyZSBvZiBpbiB0aGUKICAgICAgICAgICAgICAgICAgICAg
Ly8gcHJldmlvdXMgcGFzcy4KQEAgLTM1Niw3ICszNTQsNyBAQCBwdWJsaWM6CiAgICAgICAgICAg
ICAgICAgaWYgKGRhdGEuaXNWYWxpZCgpKQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsK
ICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBtX2NyZWF0ZXNBcmd1bWVudHMuYWRk
KHNvdXJjZS5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSk7CisgICAgICAgICAgICAgICAgbV9j
cmVhdGVzQXJndW1lbnRzLmFkZChzb3VyY2UtPmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKTsK
ICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICAKQEAgLTQxNCwyNCArNDEyLDIzIEBA
IHB1YmxpYzoKICAgICAgICAgICAgIGlmICghYmxvY2spCiAgICAgICAgICAgICAgICAgY29udGlu
dWU7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGluZGV4SW5CbG9jayA9IDA7IGluZGV4SW5C
bG9jayA8IGJsb2NrLT5zaXplKCk7ICsraW5kZXhJbkJsb2NrKSB7Ci0gICAgICAgICAgICAgICAg
Tm9kZUluZGV4IG5vZGVJbmRleCA9IGJsb2NrLT5hdChpbmRleEluQmxvY2spOwotICAgICAgICAg
ICAgICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW25vZGVJbmRleF07Ci0gICAgICAgICAgICAgICAg
aWYgKCFub2RlLnNob3VsZEdlbmVyYXRlKCkpCisgICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9
IGJsb2NrLT5hdChpbmRleEluQmxvY2spOworICAgICAgICAgICAgICAgIGlmICghbm9kZS0+c2hv
dWxkR2VuZXJhdGUoKSkKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAg
ICAgICAgCi0gICAgICAgICAgICAgICAgc3dpdGNoIChub2RlLm9wKCkpIHsKKyAgICAgICAgICAg
ICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKICAgICAgICAgICAgICAgICBjYXNlIFNldExvY2Fs
OiB7Ci0gICAgICAgICAgICAgICAgICAgIE5vZGUmIHNvdXJjZSA9IG1fZ3JhcGhbbm9kZS5jaGls
ZDEoKV07Ci0gICAgICAgICAgICAgICAgICAgIGlmIChzb3VyY2Uub3AoKSAhPSBDcmVhdGVBcmd1
bWVudHMpCisgICAgICAgICAgICAgICAgICAgIE5vZGUqIHNvdXJjZSA9IG5vZGUtPmNoaWxkMSgp
Lm5vZGUoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHNvdXJjZS0+b3AoKSAhPSBDcmVhdGVB
cmd1bWVudHMpCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAg
ICAgICAgCi0gICAgICAgICAgICAgICAgICAgIGlmIChtX2NyZWF0ZXNBcmd1bWVudHMuY29udGFp
bnMoc291cmNlLmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKSkKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKG1fY3JlYXRlc0FyZ3VtZW50cy5jb250YWlucyhzb3VyY2UtPmNvZGVPcmlnaW4uaW5s
aW5lQ2FsbEZyYW1lKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJp
YWJsZUFjY2Vzc0RhdGEgPSBub2RlLnZhcmlhYmxlQWNjZXNzRGF0YSgpOworICAgICAgICAgICAg
ICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9IG5vZGUtPnZh
cmlhYmxlQWNjZXNzRGF0YSgpOwogICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAg
ICAgICAgaWYgKG1fZ3JhcGguYXJndW1lbnRzUmVnaXN0ZXJGb3Iobm9kZS5jb2RlT3JpZ2luKSA9
PSB2YXJpYWJsZUFjY2Vzc0RhdGEtPmxvY2FsKCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
IHx8IHVubW9kaWZpZWRBcmd1bWVudHNSZWdpc3RlcihtX2dyYXBoLmFyZ3VtZW50c1JlZ2lzdGVy
Rm9yKG5vZGUuY29kZU9yaWdpbikpID09IHZhcmlhYmxlQWNjZXNzRGF0YS0+bG9jYWwoKSkKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGguYXJndW1lbnRzUmVnaXN0ZXJGb3Iobm9kZS0+
Y29kZU9yaWdpbikgPT0gdmFyaWFibGVBY2Nlc3NEYXRhLT5sb2NhbCgpCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICB8fCB1bm1vZGlmaWVkQXJndW1lbnRzUmVnaXN0ZXIobV9ncmFwaC5hcmd1
bWVudHNSZWdpc3RlckZvcihub2RlLT5jb2RlT3JpZ2luKSkgPT0gdmFyaWFibGVBY2Nlc3NEYXRh
LT5sb2NhbCgpKQogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgICAg
ICAgICAgICAgQVNTRVJUKCF2YXJpYWJsZUFjY2Vzc0RhdGEtPmlzQ2FwdHVyZWQoKSk7CkBAIC00
NjksMTYgKzQ2NiwxNiBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgY2FzZSBGb3J3YXJkU3Ry
dWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnQ6CiAgICAgICAgICAgICAgICAgY2FzZSBDaGVja0Fy
cmF5OiB7CiAgICAgICAgICAgICAgICAgICAgIC8vIFdlIGNhbiBqdXN0IGdldCByaWQgb2YgdGhp
cyBub2RlLCBpZiBpdCByZWZlcmVuY2VzIGEgcGhhbnRvbSBhcmd1bWVudC4KLSAgICAgICAgICAg
ICAgICAgICAgaWYgKCFpc09LVG9PcHRpbWl6ZShtX2dyYXBoW25vZGUuY2hpbGQxKCldKSkKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKCFpc09LVG9PcHRpbWl6ZShub2RlLT5jaGlsZDEoKS5ub2Rl
KCkpKQogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAg
IG1fZ3JhcGguZGVyZWYobm9kZS5jaGlsZDEoKSk7Ci0gICAgICAgICAgICAgICAgICAgIG5vZGUu
c2V0T3BBbmREZWZhdWx0RmxhZ3MoUGhhbnRvbSk7Ci0gICAgICAgICAgICAgICAgICAgIG5vZGUu
Y2hpbGRyZW4uc2V0Q2hpbGQxKEVkZ2UoKSk7CisgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgu
ZGVyZWYobm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgICAgICAgICBub2RlLT5zZXRPcEFu
ZERlZmF1bHRGbGFncyhQaGFudG9tKTsKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGRy
ZW4uc2V0Q2hpbGQxKEVkZ2UoKSk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgY2FzZSBH
ZXRCeVZhbDogewotICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS5hcnJheU1vZGUoKS50eXBl
KCkgIT0gQXJyYXk6OkFyZ3VtZW50cykKKyAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmFy
cmF5TW9kZSgpLnR5cGUoKSAhPSBBcnJheTo6QXJndW1lbnRzKQogICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAKICAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBjYW4gYmUgc2ltcGxp
ZmllZCB0byBHZXRNeUFyZ3VtZW50QnlWYWwgaWYgd2Uga25vdyB0aGF0CkBAIC00ODgsMjggKzQ4
NSwyOCBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgIC8vIDIpIEl0cyBmaXJzdCBjaGls
ZCBpcyBDcmVhdGVBcmd1bWVudHMgYW5kIGl0cyBJbmxpbmVDYWxsRnJhbWUqCiAgICAgICAgICAg
ICAgICAgICAgIC8vICAgIGlzIG5vdCBtYXJrZWQgYXMgY3JlYXRpbmcgYXJndW1lbnRzLgogICAg
ICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFpc09LVG9PcHRpbWl6
ZShtX2dyYXBoW25vZGUuY2hpbGQxKCldKSkKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFpc09L
VG9PcHRpbWl6ZShub2RlLT5jaGlsZDEoKS5ub2RlKCkpKQogICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBtX2dy
YXBoLmRlcmVmKG5vZGUuY2hpbGQxKCkpOwotICAgICAgICAgICAgICAgICAgICBub2RlLmNoaWxk
cmVuLmNoaWxkMSgpID0gbm9kZS5jaGlsZHJlbi5jaGlsZDIoKTsKLSAgICAgICAgICAgICAgICAg
ICAgbm9kZS5jaGlsZHJlbi5jaGlsZDIoKSA9IEVkZ2UoKTsKLSAgICAgICAgICAgICAgICAgICAg
bm9kZS5zZXRPcEFuZERlZmF1bHRGbGFncyhHZXRNeUFyZ3VtZW50QnlWYWwpOworICAgICAgICAg
ICAgICAgICAgICBtX2dyYXBoLmRlcmVmKG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgICAg
ICAgICAgbm9kZS0+Y2hpbGRyZW4uY2hpbGQxKCkgPSBub2RlLT5jaGlsZHJlbi5jaGlsZDIoKTsK
KyAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGRyZW4uY2hpbGQyKCkgPSBFZGdlKCk7Cisg
ICAgICAgICAgICAgICAgICAgIG5vZGUtPnNldE9wQW5kRGVmYXVsdEZsYWdzKEdldE15QXJndW1l
bnRCeVZhbCk7CiAgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgPSB0cnVlOwogICAgICAgICAg
ICAgICAgICAgICAtLWluZGV4SW5CbG9jazsgLy8gRm9yY2UgcmVjb25zaWRlcmF0aW9uIG9mIHRo
aXMgb3Agbm93IHRoYXQgaXQncyBhIEdldE15QXJndW1lbnRCeVZhbC4KICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAKICAg
ICAgICAgICAgICAgICBjYXNlIEdldEFycmF5TGVuZ3RoOiB7Ci0gICAgICAgICAgICAgICAgICAg
IGlmIChub2RlLmFycmF5TW9kZSgpLnR5cGUoKSAhPSBBcnJheTo6QXJndW1lbnRzKQorICAgICAg
ICAgICAgICAgICAgICBpZiAobm9kZS0+YXJyYXlNb2RlKCkudHlwZSgpICE9IEFycmF5OjpBcmd1
bWVudHMpCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAg
ICAgCi0gICAgICAgICAgICAgICAgICAgIGlmICghaXNPS1RvT3B0aW1pemUobV9ncmFwaFtub2Rl
LmNoaWxkMSgpXSkpCisgICAgICAgICAgICAgICAgICAgIGlmICghaXNPS1RvT3B0aW1pemUobm9k
ZS0+Y2hpbGQxKCkubm9kZSgpKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5kZXJlZihub2Rl
LmNoaWxkMSgpKTsKLSAgICAgICAgICAgICAgICAgICAgbm9kZS5jaGlsZHJlbi5jaGlsZDEoKSA9
IEVkZ2UoKTsKLSAgICAgICAgICAgICAgICAgICAgbm9kZS5zZXRPcEFuZERlZmF1bHRGbGFncyhH
ZXRNeUFyZ3VtZW50c0xlbmd0aCk7CisgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguZGVyZWYo
bm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgICAgICAgICBub2RlLT5jaGlsZHJlbi5jaGls
ZDEoKSA9IEVkZ2UoKTsKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+c2V0T3BBbmREZWZhdWx0
RmxhZ3MoR2V0TXlBcmd1bWVudHNMZW5ndGgpOwogICAgICAgICAgICAgICAgICAgICBjaGFuZ2Vk
ID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgLS1pbmRleEluQmxvY2s7IC8vIEZvcmNlIHJl
Y29uc2lkZXJhdGlvbiBvZiB0aGlzIG9wIG5vZXcgdGhhdCBpdCdzIGEgR2V0TXlBcmd1bWVudHNM
ZW5ndGguCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtNTE3LDE2ICs1MTQsMTYgQEAg
cHVibGljOgogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBjYXNlIEdldE15
QXJndW1lbnRzTGVuZ3RoOgogICAgICAgICAgICAgICAgIGNhc2UgR2V0TXlBcmd1bWVudHNMZW5n
dGhTYWZlOiB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChtX2NyZWF0ZXNBcmd1bWVudHMuY29u
dGFpbnMobm9kZS5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSkpIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIEFTU0VSVChub2RlLm9wKCkgPT0gR2V0TXlBcmd1bWVudHNMZW5ndGhTYWZlKTsK
KyAgICAgICAgICAgICAgICAgICAgaWYgKG1fY3JlYXRlc0FyZ3VtZW50cy5jb250YWlucyhub2Rl
LT5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IEFTU0VSVChub2RlLT5vcCgpID09IEdldE15QXJndW1lbnRzTGVuZ3RoU2FmZSk7CiAgICAgICAg
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgICAgICBpZiAobm9kZS5vcCgpID09IEdldE15QXJndW1lbnRzTGVuZ3RoU2FmZSkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS5zZXRPcChHZXRNeUFyZ3VtZW50c0xlbmd0aCk7
CisgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5vcCgpID09IEdldE15QXJndW1lbnRzTGVu
Z3RoU2FmZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+c2V0T3AoR2V0TXlBcmd1
bWVudHNMZW5ndGgpOwogICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCA9IHRydWU7CiAg
ICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAg
ICAgICAgIENvZGVPcmlnaW4gY29kZU9yaWdpbiA9IG5vZGUuY29kZU9yaWdpbjsKKyAgICAgICAg
ICAgICAgICAgICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2luID0gbm9kZS0+Y29kZU9yaWdpbjsKICAg
ICAgICAgICAgICAgICAgICAgaWYgKCFjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSkKICAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAKQEAgLTUzNywz
MiArNTM0LDMyIEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgICAgIENoZWNrQXJndW1l
bnRzTm90Q3JlYXRlZCwgY29kZU9yaWdpbik7CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAg
ICAgICAgICAgICAgICBtX2dyYXBoLmNvbnZlcnRUb0NvbnN0YW50KAotICAgICAgICAgICAgICAg
ICAgICAgICAgbm9kZUluZGV4LCBqc051bWJlcihjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZS0+
YXJndW1lbnRzLnNpemUoKSAtIDEpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUsIGpz
TnVtYmVyKGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgpIC0gMSkp
OwogICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAKICAgICAg
ICAgICAgICAgICBjYXNlIEdldE15QXJndW1lbnRCeVZhbDoKICAgICAgICAgICAgICAgICBjYXNl
IEdldE15QXJndW1lbnRCeVZhbFNhZmU6IHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG1fY3Jl
YXRlc0FyZ3VtZW50cy5jb250YWlucyhub2RlLmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKSkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKG5vZGUub3AoKSA9PSBHZXRNeUFyZ3Vt
ZW50QnlWYWxTYWZlKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1fY3JlYXRlc0FyZ3VtZW50
cy5jb250YWlucyhub2RlLT5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSkpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIEFTU0VSVChub2RlLT5vcCgpID09IEdldE15QXJndW1lbnRCeVZhbFNh
ZmUpOwogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUub3AoKSA9PSBHZXRNeUFyZ3VtZW50QnlW
YWxTYWZlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBub2RlLnNldE9wKEdldE15QXJndW1l
bnRCeVZhbCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5vcCgpID09IEdldE15QXJn
dW1lbnRCeVZhbFNhZmUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPnNldE9wKEdl
dE15QXJndW1lbnRCeVZhbCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkID0gdHJ1
ZTsKICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBpZiAoIW5vZGUu
Y29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpCisgICAgICAgICAgICAgICAgICAgIGlmICghbm9k
ZS0+Y29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpCiAgICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFtX2dyYXBoW25vZGUuY2hpbGQxKCldLmhh
c0NvbnN0YW50KCkpCisgICAgICAgICAgICAgICAgICAgIGlmICghbm9kZS0+Y2hpbGQxKCktPmhh
c0NvbnN0YW50KCkpCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
ICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0udmFsdWVPZkpT
Q29uc3RhbnQoY29kZUJsb2NrKCkpOworICAgICAgICAgICAgICAgICAgICBKU1ZhbHVlIHZhbHVl
ID0gbm9kZS0+Y2hpbGQxKCktPnZhbHVlT2ZKU0NvbnN0YW50KGNvZGVCbG9jaygpKTsKICAgICAg
ICAgICAgICAgICAgICAgaWYgKCF2YWx1ZS5pc0ludDMyKCkpCiAgICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCBpbmRleCA9IHZhbHVlLmFz
SW50MzIoKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKGluZGV4IDwgMAogICAgICAgICAgICAg
ICAgICAgICAgICAgfHwgc3RhdGljX2Nhc3Q8c2l6ZV90PihpbmRleCArIDEpID49Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbm9kZS5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZS0+YXJn
dW1lbnRzLnNpemUoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5jb2RlT3Jp
Z2luLmlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzLnNpemUoKSkKICAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAg
Ly8gV2Uga25vdyB3aGljaCBhcmd1bWVudCB0aGlzIGlzIGFjY2Vzc2luZy4gQnV0IG9ubHkgYWZ0
ZXIgd2UgaGF2ZSBjaGVja2VkCkBAIC01NzQsMTMgKzU3MSwxMyBAQCBwdWJsaWM6CiAgICAgICAg
ICAgICAgICAgICAgIC8vIGhhcyBydW4gLSB0aGVyZWZvcmUgaXQgbWFrZXMgbGl0dGxlIHNlbnNl
IHRvIGxpbmsgdGhlIEdldExvY2FsIG9wZXJhdGlvbgogICAgICAgICAgICAgICAgICAgICAvLyBp
bnRvIHRoZSBWYXJpYWJsZUFjY2Vzc0RhdGEgYW5kIFBoaSBncmFwaHMuCiAKLSAgICAgICAgICAg
ICAgICAgICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2luID0gbm9kZS5jb2RlT3JpZ2luOwotICAgICAg
ICAgICAgICAgICAgICBBZGphY2VuY3lMaXN0IGNoaWxkcmVuID0gbm9kZS5jaGlsZHJlbjsKKyAg
ICAgICAgICAgICAgICAgICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2luID0gbm9kZS0+Y29kZU9yaWdp
bjsKKyAgICAgICAgICAgICAgICAgICAgQWRqYWNlbmN5TGlzdCBjaGlsZHJlbiA9IG5vZGUtPmNo
aWxkcmVuOwogICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgbm9kZS5j
b252ZXJ0VG9HZXRMb2NhbFVubGlua2VkKAorICAgICAgICAgICAgICAgICAgICBub2RlLT5jb252
ZXJ0VG9HZXRMb2NhbFVubGlua2VkKAogICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nh
c3Q8VmlydHVhbFJlZ2lzdGVyPigKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlLmNv
ZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbV9ncmFwaC5iYXNlbGluZUNvZGVCbG9ja0Zvcihub2RlLmNvZGVPcmlnaW4p
LT5hcmd1bWVudEluZGV4QWZ0ZXJDYXB0dXJlKGluZGV4KSkpOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG5vZGUtPmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCAr
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5iYXNlbGluZUNvZGVCbG9ja0Zv
cihub2RlLT5jb2RlT3JpZ2luKS0+YXJndW1lbnRJbmRleEFmdGVyQ2FwdHVyZShpbmRleCkpKTsK
IAogICAgICAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKICAgICAgICAg
ICAgICAgICAgICAgICAgIGluZGV4SW5CbG9jaywgRG9udFJlZkNoaWxkcmVuLCBEb250UmVmTm9k
ZSwgU3BlY05vbmUsIENoZWNrQXJndW1lbnRzTm90Q3JlYXRlZCwKQEAgLTU5NCwxMyArNTkxLDEz
IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIAogICAg
ICAgICAgICAgICAgIGNhc2UgVGVhck9mZkFyZ3VtZW50czogewotICAgICAgICAgICAgICAgICAg
ICBpZiAobV9jcmVhdGVzQXJndW1lbnRzLmNvbnRhaW5zKG5vZGUuY29kZU9yaWdpbi5pbmxpbmVD
YWxsRnJhbWUpKQorICAgICAgICAgICAgICAgICAgICBpZiAobV9jcmVhdGVzQXJndW1lbnRzLmNv
bnRhaW5zKG5vZGUtPmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKSkKICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAg
ICAgICAgbm9kZS5zZXRPcEFuZERlZmF1bHRGbGFncyhOb3ApOworICAgICAgICAgICAgICAgICAg
ICBub2RlLT5zZXRPcEFuZERlZmF1bHRGbGFncyhOb3ApOwogICAgICAgICAgICAgICAgICAgICBt
X2dyYXBoLmNsZWFyQW5kRGVyZWZDaGlsZDEobm9kZSk7CiAgICAgICAgICAgICAgICAgICAgIG1f
Z3JhcGguY2xlYXJBbmREZXJlZkNoaWxkMihub2RlKTsKLSAgICAgICAgICAgICAgICAgICAgbm9k
ZS5zZXRSZWZDb3VudCgwKTsKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+c2V0UmVmQ291bnQo
MCk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICAgICAgCkBAIC02MTYsMjUgKzYxMywyMyBAQCBwdWJsaWM6CiAgICAgICAgICAg
ICBpZiAoIWJsb2NrKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpbmRleEluQmxvY2sgPSAwOyBpbmRleEluQmxvY2sgPCBibG9jay0+c2l6ZSgp
OyArK2luZGV4SW5CbG9jaykgewotICAgICAgICAgICAgICAgIE5vZGVJbmRleCBub2RlSW5kZXgg
PSBibG9jay0+YXQoaW5kZXhJbkJsb2NrKTsKLSAgICAgICAgICAgICAgICBOb2RlKiBub2RlUHRy
ID0gJm1fZ3JhcGhbbm9kZUluZGV4XTsKLSAgICAgICAgICAgICAgICBpZiAobm9kZVB0ci0+b3Ao
KSAhPSBDcmVhdGVBcmd1bWVudHMpCisgICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2Nr
LT5hdChpbmRleEluQmxvY2spOworICAgICAgICAgICAgICAgIGlmIChub2RlLT5vcCgpICE9IENy
ZWF0ZUFyZ3VtZW50cykKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAg
ICAgICAgLy8gSWYgdGhpcyBpcyBhIENyZWF0ZUFyZ3VtZW50cyBmb3IgYW4gSW5saW5lQ2FsbEZy
YW1lKiB0aGF0IGRvZXMKICAgICAgICAgICAgICAgICAvLyBub3QgY3JlYXRlIGFyZ3VtZW50cywg
dGhlbiByZXBsYWNlIGl0IHdpdGggYSBQaGFudG9tQXJndW1lbnRzLgogICAgICAgICAgICAgICAg
IC8vIFBoYW50b21Bcmd1bWVudHMgaXMgYSBub24tZXhlY3V0aW5nIG5vZGUgdGhhdCBqdXN0IGlu
ZGljYXRlcwogICAgICAgICAgICAgICAgIC8vIHRoYXQgdGhlIG5vZGUgc2hvdWxkIGJlIHJlaWZp
ZWQgYXMgYW4gYXJndW1lbnRzIG9iamVjdCBvbiBPU1IKICAgICAgICAgICAgICAgICAvLyBleGl0
LgotICAgICAgICAgICAgICAgIGlmIChtX2NyZWF0ZXNBcmd1bWVudHMuY29udGFpbnMobm9kZVB0
ci0+Y29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpKQorICAgICAgICAgICAgICAgIGlmIChtX2Ny
ZWF0ZXNBcmd1bWVudHMuY29udGFpbnMobm9kZS0+Y29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUp
KQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICBpZiAobm9k
ZVB0ci0+c2hvdWxkR2VuZXJhdGUoKSkgeworICAgICAgICAgICAgICAgIGlmIChub2RlLT5zaG91
bGRHZW5lcmF0ZSgpKSB7CiAgICAgICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnRO
b2RlKAogICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBEb250UmVmQ2hpbGRy
ZW4sIERvbnRSZWZOb2RlLCBTcGVjTm9uZSwgUGhhbnRvbSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgIG5vZGVQdHItPmNvZGVPcmlnaW4sIG5vZGVQdHItPmNoaWxkcmVuKTsKLSAgICAgICAgICAg
ICAgICAgICAgbm9kZVB0ciA9ICZtX2dyYXBoW25vZGVJbmRleF07CisgICAgICAgICAgICAgICAg
ICAgICAgICBub2RlLT5jb2RlT3JpZ2luLCBub2RlLT5jaGlsZHJlbik7CiAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIG5vZGVQdHItPnNldE9wQW5kRGVmYXVsdEZsYWdzKFBoYW50
b21Bcmd1bWVudHMpOwotICAgICAgICAgICAgICAgIG5vZGVQdHItPmNoaWxkcmVuLnJlc2V0KCk7
CisgICAgICAgICAgICAgICAgbm9kZS0+c2V0T3BBbmREZWZhdWx0RmxhZ3MoUGhhbnRvbUFyZ3Vt
ZW50cyk7CisgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGRyZW4ucmVzZXQoKTsKICAgICAgICAg
ICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGluc2Vy
dGlvblNldC5leGVjdXRlKGJsb2NrKTsKQEAgLTY1NCwyOCArNjQ5LDI3IEBAIHByaXZhdGU6CiAg
ICAgICAgICAgICBEZWZhdWx0SGFzaDxWYXJpYWJsZUFjY2Vzc0RhdGEqPjo6SGFzaCwKICAgICAg
ICAgICAgIE51bGxhYmxlSGFzaFRyYWl0czxWYXJpYWJsZUFjY2Vzc0RhdGEqPiA+IG1fYXJndW1l
bnRzQWxpYXNpbmc7CiAKLSAgICB2b2lkIG9ic2VydmVCYWRBcmd1bWVudHNVc2UoRWRnZSBlZGdl
KQorICAgIHZvaWQgb2JzZXJ2ZUJhZEFyZ3VtZW50c1VzZShOb2RlKiBub2RlKQogICAgIHsKLSAg
ICAgICAgaWYgKCFlZGdlKQorICAgICAgICBpZiAoIW5vZGUpCiAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgIAotICAgICAgICBOb2RlJiBjaGlsZCA9IG1fZ3JhcGhbZWRnZV07Ci0gICAgICAg
IHN3aXRjaCAoY2hpbGQub3AoKSkgeworICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKICAg
ICAgICAgY2FzZSBDcmVhdGVBcmd1bWVudHM6IHsKLSAgICAgICAgICAgIG1fY3JlYXRlc0FyZ3Vt
ZW50cy5hZGQoY2hpbGQuY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpOworICAgICAgICAgICAg
bV9jcmVhdGVzQXJndW1lbnRzLmFkZChub2RlLT5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSk7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgIGNh
c2UgR2V0TG9jYWw6IHsKLSAgICAgICAgICAgIGludCBhcmd1bWVudHNSZWdpc3RlciA9IG1fZ3Jh
cGgudW5jaGVja2VkQXJndW1lbnRzUmVnaXN0ZXJGb3IoY2hpbGQuY29kZU9yaWdpbik7CisgICAg
ICAgICAgICBpbnQgYXJndW1lbnRzUmVnaXN0ZXIgPSBtX2dyYXBoLnVuY2hlY2tlZEFyZ3VtZW50
c1JlZ2lzdGVyRm9yKG5vZGUtPmNvZGVPcmlnaW4pOwogICAgICAgICAgICAgaWYgKGFyZ3VtZW50
c1JlZ2lzdGVyICE9IEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIKLSAgICAgICAgICAgICAgICAmJiAo
Y2hpbGQubG9jYWwoKSA9PSBhcmd1bWVudHNSZWdpc3RlcgotICAgICAgICAgICAgICAgICAgICB8
fCBjaGlsZC5sb2NhbCgpID09IHVubW9kaWZpZWRBcmd1bWVudHNSZWdpc3Rlcihhcmd1bWVudHNS
ZWdpc3RlcikpKSB7Ci0gICAgICAgICAgICAgICAgbV9jcmVhdGVzQXJndW1lbnRzLmFkZChjaGls
ZC5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSk7CisgICAgICAgICAgICAgICAgJiYgKG5vZGUt
PmxvY2FsKCkgPT0gYXJndW1lbnRzUmVnaXN0ZXIKKyAgICAgICAgICAgICAgICAgICAgfHwgbm9k
ZS0+bG9jYWwoKSA9PSB1bm1vZGlmaWVkQXJndW1lbnRzUmVnaXN0ZXIoYXJndW1lbnRzUmVnaXN0
ZXIpKSkgeworICAgICAgICAgICAgICAgIG1fY3JlYXRlc0FyZ3VtZW50cy5hZGQobm9kZS0+Y29k
ZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZh
cmlhYmxlQWNjZXNzRGF0YSA9IGNoaWxkLnZhcmlhYmxlQWNjZXNzRGF0YSgpOworICAgICAgICAg
ICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBub2RlLT52YXJpYWJs
ZUFjY2Vzc0RhdGEoKTsKICAgICAgICAgICAgIGlmICh2YXJpYWJsZUFjY2Vzc0RhdGEtPmlzQ2Fw
dHVyZWQoKSkKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIApAQCAtNjg5LDE2
ICs2ODMsMTUgQEAgcHJpdmF0ZToKICAgICAgICAgfQogICAgIH0KICAgICAKLSAgICB2b2lkIG9i
c2VydmVCYWRBcmd1bWVudHNVc2VzKE5vZGUmIG5vZGUpCisgICAgdm9pZCBvYnNlcnZlQmFkQXJn
dW1lbnRzVXNlcyhOb2RlKiBub2RlKQogICAgIHsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
bV9ncmFwaC5udW1DaGlsZHJlbihub2RlKTsgaS0tOykKLSAgICAgICAgICAgIG9ic2VydmVCYWRB
cmd1bWVudHNVc2UobV9ncmFwaC5jaGlsZChub2RlLCBpKSk7CisgICAgICAgICAgICBvYnNlcnZl
QmFkQXJndW1lbnRzVXNlKG1fZ3JhcGguY2hpbGQobm9kZSwgaSkubm9kZSgpKTsKICAgICB9CiAg
ICAgCi0gICAgdm9pZCBvYnNlcnZlUHJvcGVyQXJndW1lbnRzVXNlKE5vZGUmIG5vZGUsIEVkZ2Ug
ZWRnZSkKKyAgICB2b2lkIG9ic2VydmVQcm9wZXJBcmd1bWVudHNVc2UoTm9kZSogbm9kZSwgRWRn
ZSBlZGdlKQogICAgIHsKLSAgICAgICAgTm9kZSYgY2hpbGQgPSBtX2dyYXBoW2VkZ2VdOwotICAg
ICAgICBpZiAoY2hpbGQub3AoKSAhPSBHZXRMb2NhbCkgeworICAgICAgICBpZiAoZWRnZS0+b3Ao
KSAhPSBHZXRMb2NhbCkgewogICAgICAgICAgICAgLy8gV2hlbiBjYW4gdGhpcyBoYXBwZW4/IEF0
IGxlYXN0IHR3byBjYXNlcyB0aGF0IEkgY2FuIHRoaW5rCiAgICAgICAgICAgICAvLyBvZjoKICAg
ICAgICAgICAgIC8vCkBAIC03MTAsMTggKzcwMywxOCBAQCBwcml2YXRlOgogICAgICAgICAgICAg
Ly8KICAgICAgICAgICAgIC8vIDIpIElmIHdlJ3JlIGFjY2Vzc2luZyBhcmd1bWVudHMgd2UgZ290
IGZyb20gdGhlIGhlYXAhCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAg
ICBpZiAoY2hpbGQub3AoKSA9PSBDcmVhdGVBcmd1bWVudHMKLSAgICAgICAgICAgICAgICAmJiBu
b2RlLmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lCi0gICAgICAgICAgICAgICAgICAgIT0gY2hp
bGQuY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpCi0gICAgICAgICAgICAgICAgbV9jcmVhdGVz
QXJndW1lbnRzLmFkZChjaGlsZC5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSk7CisgICAgICAg
ICAgICBpZiAoZWRnZS0+b3AoKSA9PSBDcmVhdGVBcmd1bWVudHMKKyAgICAgICAgICAgICAgICAm
JiBub2RlLT5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZQorICAgICAgICAgICAgICAgICAgICE9
IGVkZ2UtPmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKQorICAgICAgICAgICAgICAgIG1fY3Jl
YXRlc0FyZ3VtZW50cy5hZGQoZWRnZS0+Y29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpOwogICAg
ICAgICAgICAgCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICAgICAgICAgIAotICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0
YSA9IGNoaWxkLnZhcmlhYmxlQWNjZXNzRGF0YSgpOwotICAgICAgICBpZiAoY2hpbGQubG9jYWwo
KSA9PSBtX2dyYXBoLnVuY2hlY2tlZEFyZ3VtZW50c1JlZ2lzdGVyRm9yKGNoaWxkLmNvZGVPcmln
aW4pCi0gICAgICAgICAgICAmJiBub2RlLmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lICE9IGNo
aWxkLmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKSB7Ci0gICAgICAgICAgICBtX2NyZWF0ZXNB
cmd1bWVudHMuYWRkKGNoaWxkLmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKTsKKyAgICAgICAg
VmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBlZGdlLT52YXJpYWJsZUFj
Y2Vzc0RhdGEoKTsKKyAgICAgICAgaWYgKGVkZ2UtPmxvY2FsKCkgPT0gbV9ncmFwaC51bmNoZWNr
ZWRBcmd1bWVudHNSZWdpc3RlckZvcihlZGdlLT5jb2RlT3JpZ2luKQorICAgICAgICAgICAgJiYg
bm9kZS0+Y29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUgIT0gZWRnZS0+Y29kZU9yaWdpbi5pbmxp
bmVDYWxsRnJhbWUpIHsKKyAgICAgICAgICAgIG1fY3JlYXRlc0FyZ3VtZW50cy5hZGQoZWRnZS0+
Y29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICB9CiAKQEAgLTcyOSwxOCArNzIyLDE4IEBAIHByaXZhdGU6CiAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgIAogICAgICAgICBBcmd1bWVudHNBbGlhc2luZ0RhdGEmIGRhdGEgPSBtX2FyZ3Vt
ZW50c0FsaWFzaW5nLmZpbmQodmFyaWFibGVBY2Nlc3NEYXRhKS0+dmFsdWU7Ci0gICAgICAgIGRh
dGEubWVyZ2VDYWxsQ29udGV4dChub2RlLmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKTsKKyAg
ICAgICAgZGF0YS5tZXJnZUNhbGxDb250ZXh0KG5vZGUtPmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZy
YW1lKTsKICAgICB9CiAgICAgCi0gICAgYm9vbCBpc09LVG9PcHRpbWl6ZShOb2RlJiBzb3VyY2Up
CisgICAgYm9vbCBpc09LVG9PcHRpbWl6ZShOb2RlKiBzb3VyY2UpCiAgICAgewotICAgICAgICBp
ZiAobV9jcmVhdGVzQXJndW1lbnRzLmNvbnRhaW5zKHNvdXJjZS5jb2RlT3JpZ2luLmlubGluZUNh
bGxGcmFtZSkpCisgICAgICAgIGlmIChtX2NyZWF0ZXNBcmd1bWVudHMuY29udGFpbnMoc291cmNl
LT5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgICAgIAotICAgICAgICBzd2l0Y2ggKHNvdXJjZS5vcCgpKSB7CisgICAgICAgIHN3aXRj
aCAoc291cmNlLT5vcCgpKSB7CiAgICAgICAgIGNhc2UgR2V0TG9jYWw6IHsKLSAgICAgICAgICAg
IFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhID0gc291cmNlLnZhcmlhYmxl
QWNjZXNzRGF0YSgpOwotICAgICAgICAgICAgaW50IGFyZ3VtZW50c1JlZ2lzdGVyID0gbV9ncmFw
aC51bmNoZWNrZWRBcmd1bWVudHNSZWdpc3RlckZvcihzb3VyY2UuY29kZU9yaWdpbik7CisgICAg
ICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9IHNvdXJjZS0+
dmFyaWFibGVBY2Nlc3NEYXRhKCk7CisgICAgICAgICAgICBpbnQgYXJndW1lbnRzUmVnaXN0ZXIg
PSBtX2dyYXBoLnVuY2hlY2tlZEFyZ3VtZW50c1JlZ2lzdGVyRm9yKHNvdXJjZS0+Y29kZU9yaWdp
bik7CiAgICAgICAgICAgICBpZiAoYXJndW1lbnRzUmVnaXN0ZXIgPT0gSW52YWxpZFZpcnR1YWxS
ZWdpc3RlcikKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGlmIChhcmd1bWVu
dHNSZWdpc3RlciA9PSB2YXJpYWJsZUFjY2Vzc0RhdGEtPmxvY2FsKCkpCkBAIC03NjgsMzggKzc2
MSwzNyBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIAotICAg
IHZvaWQgcmVtb3ZlQXJndW1lbnRzUmVmZXJlbmNpbmdQaGFudG9tQ2hpbGQoTm9kZSYgbm9kZSwg
dW5zaWduZWQgZWRnZUluZGV4KQorICAgIHZvaWQgcmVtb3ZlQXJndW1lbnRzUmVmZXJlbmNpbmdQ
aGFudG9tQ2hpbGQoTm9kZSogbm9kZSwgdW5zaWduZWQgZWRnZUluZGV4KQogICAgIHsKLSAgICAg
ICAgRWRnZSBlZGdlID0gbm9kZS5jaGlsZHJlbi5jaGlsZChlZGdlSW5kZXgpOworICAgICAgICBF
ZGdlIGVkZ2UgPSBub2RlLT5jaGlsZHJlbi5jaGlsZChlZGdlSW5kZXgpOwogICAgICAgICBpZiAo
IWVkZ2UpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIAotICAgICAgICBOb2RlJiBjaGls
ZCA9IG1fZ3JhcGhbZWRnZV07Ci0gICAgICAgIHN3aXRjaCAoY2hpbGQub3AoKSkgeworICAgICAg
ICBzd2l0Y2ggKGVkZ2UtPm9wKCkpIHsKICAgICAgICAgY2FzZSBQaGk6IC8vIEFyaXNlcyBpZiB3
ZSBoYWQgQ1NFIG9uIGEgR2V0TG9jYWwgb2YgdGhlIGFyZ3VtZW50cyByZWdpc3Rlci4KICAgICAg
ICAgY2FzZSBHZXRMb2NhbDogLy8gQXJpc2VzIGlmIHdlIGhhZCBDU0Ugb24gYW4gYXJndW1lbnRz
IGFjY2VzcyB0byBhIHZhcmlhYmxlIGFsaWFzZWQgdG8gdGhlIGFyZ3VtZW50cy4KICAgICAgICAg
Y2FzZSBTZXRMb2NhbDogeyAvLyBBcmlzZXMgaWYgd2UgaGFkIENTRSBvbiBhIEdldExvY2FsIG9m
IHRoZSBhcmd1bWVudHMgcmVnaXN0ZXIuCi0gICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEq
IHZhcmlhYmxlQWNjZXNzRGF0YSA9IGNoaWxkLnZhcmlhYmxlQWNjZXNzRGF0YSgpOworICAgICAg
ICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBlZGdlLT52YXJp
YWJsZUFjY2Vzc0RhdGEoKTsKICAgICAgICAgICAgIGJvb2wgaXNEZWFkQXJndW1lbnRzUmVnaXN0
ZXIgPQogICAgICAgICAgICAgICAgIHZhcmlhYmxlQWNjZXNzRGF0YS0+bG9jYWwoKSA9PQotICAg
ICAgICAgICAgICAgICAgICBtX2dyYXBoLnVuY2hlY2tlZEFyZ3VtZW50c1JlZ2lzdGVyRm9yKGNo
aWxkLmNvZGVPcmlnaW4pCi0gICAgICAgICAgICAgICAgJiYgIW1fY3JlYXRlc0FyZ3VtZW50cy5j
b250YWlucyhjaGlsZC5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSk7CisgICAgICAgICAgICAg
ICAgICAgIG1fZ3JhcGgudW5jaGVja2VkQXJndW1lbnRzUmVnaXN0ZXJGb3IoZWRnZS0+Y29kZU9y
aWdpbikKKyAgICAgICAgICAgICAgICAmJiAhbV9jcmVhdGVzQXJndW1lbnRzLmNvbnRhaW5zKGVk
Z2UtPmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKTsKICAgICAgICAgICAgIGJvb2wgaXNBbGlh
c2VkQXJndW1lbnRzUmVnaXN0ZXIgPQogICAgICAgICAgICAgICAgICF2YXJpYWJsZUFjY2Vzc0Rh
dGEtPmlzQ2FwdHVyZWQoKQogICAgICAgICAgICAgICAgICYmIG1fYXJndW1lbnRzQWxpYXNpbmcu
ZmluZCh2YXJpYWJsZUFjY2Vzc0RhdGEpLT52YWx1ZS5pc1ZhbGlkKCkKLSAgICAgICAgICAgICAg
ICAmJiAhbV9jcmVhdGVzQXJndW1lbnRzLmNvbnRhaW5zKGNoaWxkLmNvZGVPcmlnaW4uaW5saW5l
Q2FsbEZyYW1lKTsKKyAgICAgICAgICAgICAgICAmJiAhbV9jcmVhdGVzQXJndW1lbnRzLmNvbnRh
aW5zKGVkZ2UtPmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKTsKICAgICAgICAgICAgIGlmICgh
aXNEZWFkQXJndW1lbnRzUmVnaXN0ZXIgJiYgIWlzQWxpYXNlZEFyZ3VtZW50c1JlZ2lzdGVyKQog
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgbV9ncmFwaC5kZXJlZihlZGdlKTsK
LSAgICAgICAgICAgIG5vZGUuY2hpbGRyZW4ucmVtb3ZlRWRnZUZyb21CYWcoZWRnZUluZGV4KTsK
KyAgICAgICAgICAgIG5vZGUtPmNoaWxkcmVuLnJlbW92ZUVkZ2VGcm9tQmFnKGVkZ2VJbmRleCk7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgIGNh
c2UgQ3JlYXRlQXJndW1lbnRzOiB7IC8vIEFyaXNlcyBpZiB3ZSBDU0UgdHdvIEdldExvY2FscyB0
byB0aGUgYXJndW1lbnRzIHJlZ2lzdGVyIGFuZCB0aGVuIENTRSB0aGUgc2Vjb25kIHVzZSBvZiB0
aGUgR2V0TG9jYWwgdG8gdGhlIGZpcnN0LgotICAgICAgICAgICAgaWYgKG1fY3JlYXRlc0FyZ3Vt
ZW50cy5jb250YWlucyhjaGlsZC5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSkpCisgICAgICAg
ICAgICBpZiAobV9jcmVhdGVzQXJndW1lbnRzLmNvbnRhaW5zKGVkZ2UtPmNvZGVPcmlnaW4uaW5s
aW5lQ2FsbEZyYW1lKSkKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIG1fZ3Jh
cGguZGVyZWYoZWRnZSk7Ci0gICAgICAgICAgICBub2RlLmNoaWxkcmVuLnJlbW92ZUVkZ2VGcm9t
QmFnKGVkZ2VJbmRleCk7CisgICAgICAgICAgICBub2RlLT5jaGlsZHJlbi5yZW1vdmVFZGdlRnJv
bUJhZyhlZGdlSW5kZXgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAg
ICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJheU1vZGUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlNb2RlLmNwcAko
cmV2aXNpb24gMTQwNTA0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJheU1v
ZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNDYsMTQgKzI0NiwxNCBAQCBTdHJ1Y3R1cmUqIEFy
cmF5TW9kZTo6b3JpZ2luYWxBcnJheVN0cnVjCiAgICAgcmV0dXJuIG9yaWdpbmFsQXJyYXlTdHJ1
Y3R1cmUoZ3JhcGgsIG5vZGUuY29kZU9yaWdpbik7CiB9CiAKLWJvb2wgQXJyYXlNb2RlOjphbHJl
YWR5Q2hlY2tlZChHcmFwaCYgZ3JhcGgsIE5vZGUmIG5vZGUsIEFic3RyYWN0VmFsdWUmIHZhbHVl
LCBJbmRleGluZ1R5cGUgc2hhcGUpIGNvbnN0Citib29sIEFycmF5TW9kZTo6YWxyZWFkeUNoZWNr
ZWQoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlLCBBYnN0cmFjdFZhbHVlJiB2YWx1ZSwgSW5kZXhp
bmdUeXBlIHNoYXBlKSBjb25zdAogewogICAgIHN3aXRjaCAoYXJyYXlDbGFzcygpKSB7CiAgICAg
Y2FzZSBBcnJheTo6T3JpZ2luYWxBcnJheToKICAgICAgICAgcmV0dXJuIHZhbHVlLm1fY3VycmVu
dEtub3duU3RydWN0dXJlLmhhc1NpbmdsZXRvbigpCiAgICAgICAgICAgICAmJiAodmFsdWUubV9j
dXJyZW50S25vd25TdHJ1Y3R1cmUuc2luZ2xldG9uKCktPmluZGV4aW5nVHlwZSgpICYgSW5kZXhp
bmdTaGFwZU1hc2spID09IHNoYXBlCiAgICAgICAgICAgICAmJiAodmFsdWUubV9jdXJyZW50S25v
d25TdHJ1Y3R1cmUuc2luZ2xldG9uKCktPmluZGV4aW5nVHlwZSgpICYgSXNBcnJheSkKLSAgICAg
ICAgICAgICYmIGdyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLmNvZGVPcmlnaW4pLT5pc09yaWdp
bmFsQXJyYXlTdHJ1Y3R1cmUodmFsdWUubV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuc2luZ2xldG9u
KCkpOworICAgICAgICAgICAgJiYgZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPmNvZGVPcmln
aW4pLT5pc09yaWdpbmFsQXJyYXlTdHJ1Y3R1cmUodmFsdWUubV9jdXJyZW50S25vd25TdHJ1Y3R1
cmUuc2luZ2xldG9uKCkpOwogICAgICAgICAKICAgICBjYXNlIEFycmF5OjpBcnJheToKICAgICAg
ICAgaWYgKGFycmF5TW9kZXNBbHJlYWR5Q2hlY2tlZCh2YWx1ZS5tX2FycmF5TW9kZXMsIGFzQXJy
YXlNb2RlcyhzaGFwZSB8IElzQXJyYXkpKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQXJyYXlNb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdBcnJheU1vZGUuaAkocmV2aXNpb24gMTQwNTA0KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdBcnJheU1vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTk3LDcgKzE5Nyw3IEBA
IHB1YmxpYzoKICAgICAKICAgICBBcnJheU1vZGUgcmVmaW5lKFNwZWN1bGF0ZWRUeXBlIGJhc2Us
IFNwZWN1bGF0ZWRUeXBlIGluZGV4LCBTcGVjdWxhdGVkVHlwZSB2YWx1ZSA9IFNwZWNOb25lLCBO
b2RlRmxhZ3MgPSAwKSBjb25zdDsKICAgICAKLSAgICBib29sIGFscmVhZHlDaGVja2VkKEdyYXBo
JiwgTm9kZSYsIEFic3RyYWN0VmFsdWUmKSBjb25zdDsKKyAgICBib29sIGFscmVhZHlDaGVja2Vk
KEdyYXBoJiwgTm9kZSosIEFic3RyYWN0VmFsdWUmKSBjb25zdDsKICAgICAKICAgICB2b2lkIGR1
bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQmFzaWNCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQmFzaWNCbG9jay5oCShyZXZpc2lvbiAxNDA1MDQpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtNDIsNyArNDIs
NyBAQCBjbGFzcyBHcmFwaDsKIAogdHlwZWRlZiBWZWN0b3IgPEJsb2NrSW5kZXgsIDI+IFByZWRl
Y2Vzc29yTGlzdDsKIAotc3RydWN0IEJhc2ljQmxvY2sgOiBWZWN0b3I8Tm9kZUluZGV4LCA4PiB7
CitzdHJ1Y3QgQmFzaWNCbG9jayA6IFZlY3RvcjxOb2RlKiwgOD4gewogICAgIEJhc2ljQmxvY2so
dW5zaWduZWQgYnl0ZWNvZGVCZWdpbiwgdW5zaWduZWQgbnVtQXJndW1lbnRzLCB1bnNpZ25lZCBu
dW1Mb2NhbHMpCiAgICAgICAgIDogYnl0ZWNvZGVCZWdpbihieXRlY29kZUJlZ2luKQogICAgICAg
ICAsIGlzT1NSVGFyZ2V0KGZhbHNlKQpAQCAtNzUsNyArNzUsNyBAQCBzdHJ1Y3QgQmFzaWNCbG9j
ayA6IFZlY3RvcjxOb2RlSW5kZXgsIDg+CiAgICAgfQogICAgIAogICAgIHNpemVfdCBudW1Ob2Rl
cygpIGNvbnN0IHsgcmV0dXJuIHBoaXMuc2l6ZSgpICsgc2l6ZSgpOyB9Ci0gICAgTm9kZUluZGV4
IG5vZGVJbmRleChzaXplX3QgaSkgY29uc3QKKyAgICBOb2RlKiBub2RlKHNpemVfdCBpKSBjb25z
dAogICAgIHsKICAgICAgICAgaWYgKGkgPCBwaGlzLnNpemUoKSkKICAgICAgICAgICAgIHJldHVy
biBwaGlzW2ldOwpAQCAtODMsMjYgKzgzLDI2IEBAIHN0cnVjdCBCYXNpY0Jsb2NrIDogVmVjdG9y
PE5vZGVJbmRleCwgOD4KICAgICB9CiAgICAgYm9vbCBpc1BoaUluZGV4KHNpemVfdCBpKSBjb25z
dCB7IHJldHVybiBpIDwgcGhpcy5zaXplKCk7IH0KICAgICAKLSAgICBib29sIGlzSW5QaGlzKE5v
ZGVJbmRleCBub2RlSW5kZXgpIGNvbnN0CisgICAgYm9vbCBpc0luUGhpcyhOb2RlKiBub2RlKSBj
b25zdAogICAgIHsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwaGlzLnNpemUoKTsg
KytpKSB7Ci0gICAgICAgICAgICBpZiAocGhpc1tpXSA9PSBub2RlSW5kZXgpCisgICAgICAgICAg
ICBpZiAocGhpc1tpXSA9PSBub2RlKQogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAg
ICAgICB9CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgCi0gICAgYm9vbCBpc0lu
QmxvY2soTm9kZUluZGV4IGluZGV4KSBjb25zdAorICAgIGJvb2wgaXNJbkJsb2NrKE5vZGUqIG15
Tm9kZSkgY29uc3QKICAgICB7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtTm9k
ZXMoKTsgKytpKSB7Ci0gICAgICAgICAgICBpZiAobm9kZUluZGV4KGkpID09IGluZGV4KQorICAg
ICAgICAgICAgaWYgKG5vZGUoaSkgPT0gbXlOb2RlKQogICAgICAgICAgICAgICAgIHJldHVybiB0
cnVlOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgCiAjZGVm
aW5lIERGR19ERUZJTkVfQVBQRU5EX05PREUodGVtcGxhdGVQcmUsIHRlbXBsYXRlUG9zdCwgdHlw
ZVBhcmFtcywgdmFsdWVQYXJhbXNDb21tYSwgdmFsdWVQYXJhbXMsIHZhbHVlQXJncykgXAotICAg
IHRlbXBsYXRlUHJlIHR5cGVQYXJhbXMgdGVtcGxhdGVQb3N0IE5vZGVJbmRleCBhcHBlbmROb2Rl
KEdyYXBoJiwgUmVmQ2hpbGRyZW5Nb2RlLCBSZWZOb2RlTW9kZSwgU3BlY3VsYXRlZFR5cGUgdmFs
dWVQYXJhbXNDb21tYSB2YWx1ZVBhcmFtcyk7CisgICAgdGVtcGxhdGVQcmUgdHlwZVBhcmFtcyB0
ZW1wbGF0ZVBvc3QgTm9kZSogYXBwZW5kTm9kZShHcmFwaCYsIFJlZkNoaWxkcmVuTW9kZSwgUmVm
Tm9kZU1vZGUsIFNwZWN1bGF0ZWRUeXBlIHZhbHVlUGFyYW1zQ29tbWEgdmFsdWVQYXJhbXMpOwog
ICAgIERGR19WQVJJQURJQ19URU1QTEFURV9GVU5DVElPTihERkdfREVGSU5FX0FQUEVORF9OT0RF
KQogI3VuZGVmIERGR19ERUZJTkVfQVBQRU5EX05PREUKICAgICAKQEAgLTEyMSwxMSArMTIxLDEx
IEBAIHN0cnVjdCBCYXNpY0Jsb2NrIDogVmVjdG9yPE5vZGVJbmRleCwgOD4KICNlbmRpZgogICAg
IGJvb2wgaXNSZWFjaGFibGU7CiAgICAgCi0gICAgVmVjdG9yPE5vZGVJbmRleD4gcGhpczsKKyAg
ICBWZWN0b3I8Tm9kZSo+IHBoaXM7CiAgICAgUHJlZGVjZXNzb3JMaXN0IG1fcHJlZGVjZXNzb3Jz
OwogICAgIAotICAgIE9wZXJhbmRzPE5vZGVJbmRleCwgTm9kZUluZGV4VHJhaXRzPiB2YXJpYWJs
ZXNBdEhlYWQ7Ci0gICAgT3BlcmFuZHM8Tm9kZUluZGV4LCBOb2RlSW5kZXhUcmFpdHM+IHZhcmlh
Ymxlc0F0VGFpbDsKKyAgICBPcGVyYW5kczxOb2RlKiwgTm9kZVBvaW50ZXJUcmFpdHM+IHZhcmlh
Ymxlc0F0SGVhZDsKKyAgICBPcGVyYW5kczxOb2RlKiwgTm9kZVBvaW50ZXJUcmFpdHM+IHZhcmlh
Ymxlc0F0VGFpbDsKICAgICAKICAgICBPcGVyYW5kczxBYnN0cmFjdFZhbHVlPiB2YWx1ZXNBdEhl
YWQ7CiAgICAgT3BlcmFuZHM8QWJzdHJhY3RWYWx1ZT4gdmFsdWVzQXRUYWlsOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrSW5saW5lcy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9ja0lubGluZXMuaAkocmV2
aXNpb24gMTQwNTA0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2Nr
SW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw5ICszNCw5IEBACiBuYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIERGRyB7CiAKICNkZWZpbmUgREZHX0RFRklORV9BUFBFTkRfTk9ERSh0ZW1w
bGF0ZVByZSwgdGVtcGxhdGVQb3N0LCB0eXBlUGFyYW1zLCB2YWx1ZVBhcmFtc0NvbW1hLCB2YWx1
ZVBhcmFtcywgdmFsdWVBcmdzKSBcCi0gICAgdGVtcGxhdGVQcmUgdHlwZVBhcmFtcyB0ZW1wbGF0
ZVBvc3QgTm9kZUluZGV4IEJhc2ljQmxvY2s6OmFwcGVuZE5vZGUoR3JhcGgmIGdyYXBoLCBSZWZD
aGlsZHJlbk1vZGUgcmVmQ2hpbGRyZW5Nb2RlLCBSZWZOb2RlTW9kZSByZWZOb2RlTW9kZSwgU3Bl
Y3VsYXRlZFR5cGUgdHlwZSB2YWx1ZVBhcmFtc0NvbW1hIHZhbHVlUGFyYW1zKSBcCisgICAgdGVt
cGxhdGVQcmUgdHlwZVBhcmFtcyB0ZW1wbGF0ZVBvc3QgTm9kZSogQmFzaWNCbG9jazo6YXBwZW5k
Tm9kZShHcmFwaCYgZ3JhcGgsIFJlZkNoaWxkcmVuTW9kZSByZWZDaGlsZHJlbk1vZGUsIFJlZk5v
ZGVNb2RlIHJlZk5vZGVNb2RlLCBTcGVjdWxhdGVkVHlwZSB0eXBlIHZhbHVlUGFyYW1zQ29tbWEg
dmFsdWVQYXJhbXMpIFwKICAgICB7IFwKLSAgICAgICAgTm9kZUluZGV4IHJlc3VsdCA9IGdyYXBo
LmFkZE5vZGUocmVmQ2hpbGRyZW5Nb2RlLCByZWZOb2RlTW9kZSwgdHlwZSB2YWx1ZVBhcmFtc0Nv
bW1hIHZhbHVlQXJncyk7IFwKKyAgICAgICAgTm9kZSogcmVzdWx0ID0gZ3JhcGguYWRkTm9kZShy
ZWZDaGlsZHJlbk1vZGUsIHJlZk5vZGVNb2RlLCB0eXBlIHZhbHVlUGFyYW1zQ29tbWEgdmFsdWVB
cmdzKTsgXAogICAgICAgICBhcHBlbmQocmVzdWx0KTsgXAogICAgICAgICByZXR1cm4gcmVzdWx0
OyBcCiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBh
cnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRl
Q29kZVBhcnNlci5jcHAJKHJldmlzaW9uIDE0MDUwNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMjUwLDkgKzMy
NTAsNiBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwcm9jZXNzUGhpU3RhY2soKQogICAgICAgICBp
ZiAoIWVudHJ5Lm1fYmxvY2stPmlzUmVhY2hhYmxlKQogICAgICAgICAgICAgY29udGludWU7CiAg
ICAgICAgIAotICAgICAgICBpZiAoIWVudHJ5Lm1fYmxvY2stPmlzUmVhY2hhYmxlKQotICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgIAogICAgICAgICBQcmVkZWNlc3Nvckxpc3QmIHByZWRl
Y2Vzc29ycyA9IGVudHJ5Lm1fYmxvY2stPm1fcHJlZGVjZXNzb3JzOwogICAgICAgICB1bnNpZ25l
ZCB2YXJObyA9IGVudHJ5Lm1fdmFyTm87CiAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogZGF0
YUZvclBoaSA9IG1fZ3JhcGhbZW50cnkubV9waGldLnZhcmlhYmxlQWNjZXNzRGF0YSgpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDRkFQaGFzZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDRkFQaGFzZS5jcHAJKHJldmlzaW9uIDE0
MDUwNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ0ZBUGhhc2UuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTMg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC04OCwxMSArODgsMTEgQEAgcHJpdmF0ZToKICAgICAgICAgZGF0YUxvZ0YoIlxu
Iik7CiAjZW5kaWYKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGJsb2NrLT5zaXpl
KCk7ICsraSkgewotICAgICAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRleCA9IGJsb2NrLT5hdChp
KTsKLSAgICAgICAgICAgIGlmICghbV9ncmFwaFtub2RlSW5kZXhdLnNob3VsZEdlbmVyYXRlKCkp
CisgICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPmF0KGkpOworICAgICAgICAgICAgaWYg
KCFub2RlLT5zaG91bGRHZW5lcmF0ZSgpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogI2lm
IERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKLSAgICAgICAgICAgIGRhdGFM
b2dGKCIgICAgICAlcyBAJXU6ICIsIEdyYXBoOjpvcE5hbWUobV9ncmFwaFtub2RlSW5kZXhdLm9w
KCkpLCBub2RlSW5kZXgpOworICAgICAgICAgICAgZGF0YUxvZ0YoIiAgICAgICVzIEAldTogIiwg
R3JhcGg6Om9wTmFtZShtX2dyYXBoW25vZGVJbmRleF0ub3AoKSksIG5vZGUtPmluZGV4KCkpOwog
ICAgICAgICAgICAgbV9zdGF0ZS5kdW1wKFdURjo6ZGF0YUZpbGUoKSk7CiAgICAgICAgICAgICBk
YXRhTG9nRigiXG4iKTsKICNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdDRkdTaW1wbGlmaWNhdGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0NGR1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAxNDA1
MDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NGR1NpbXBsaWZpY2F0aW9uUGhh
c2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTIsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC02MCw3ICs2MCw3IEBAIHB1YmxpYzoKICAgICAgICAgICAg
ICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgQVNTRVJUKGJsb2NrLT5pc1JlYWNo
YWJsZSk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKG1fZ3JhcGhbYmxv
Y2stPmxhc3QoKV0ub3AoKSkgeworICAgICAgICAgICAgICAgIHN3aXRjaCAoYmxvY2stPmxhc3Qo
KS0+b3AoKSkgewogICAgICAgICAgICAgICAgIGNhc2UgSnVtcDogewogICAgICAgICAgICAgICAg
ICAgICAvLyBTdWNjZXNzb3Igd2l0aCBvbmUgcHJlZGVjZXNzb3IgLT4gbWVyZ2UuCiAgICAgICAg
ICAgICAgICAgICAgIGlmIChtX2dyYXBoLm1fYmxvY2tzW21fZ3JhcGguc3VjY2Vzc29yKGJsb2Nr
LCAwKV0tPm1fcHJlZGVjZXNzb3JzLnNpemUoKSA9PSAxKSB7CkBAIC0xMjksMTAgKzEyOSwxMCBA
QCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQmxvY2tJbmRleCB0YWtlbkJs
b2NrSW5kZXggPSBtX2dyYXBoLnN1Y2Nlc3NvckZvckNvbmRpdGlvbihibG9jaywgY29uZGl0aW9u
KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCbG9ja0luZGV4IG5vdFRha2VuQmxvY2tJ
bmRleCA9IG1fZ3JhcGguc3VjY2Vzc29yRm9yQ29uZGl0aW9uKGJsb2NrLCAhY29uZGl0aW9uKTsK
ICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFT
U0VSVChtX2dyYXBoW2Jsb2NrLT5sYXN0KCldLmlzVGVybWluYWwoKSk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgQ29kZU9yaWdpbiBib3VuZGFyeUNvZGVPcmlnaW4gPSBtX2dyYXBoW2Js
b2NrLT5sYXN0KCldLmNvZGVPcmlnaW47Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9n
cmFwaFtibG9jay0+bGFzdCgpXS5zZXRPcEFuZERlZmF1bHRGbGFncyhQaGFudG9tKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQobV9ncmFwaFtibG9jay0+bGFzdCgpXS5yZWZD
b3VudCgpID09IDEpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChibG9jay0+
bGFzdCgpLT5pc1Rlcm1pbmFsKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvZGVP
cmlnaW4gYm91bmRhcnlDb2RlT3JpZ2luID0gYmxvY2stPmxhc3QoKS0+Y29kZU9yaWdpbjsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBibG9jay0+bGFzdCgpLT5zZXRPcEFuZERlZmF1bHRG
bGFncyhQaGFudG9tKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQoYmxvY2st
Pmxhc3QoKS0+cmVmQ291bnQoKSA9PSAxKTsKICAgICAgICAgICAgICAgICAgICAgICAgIAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGpldHRpc29uQmxvY2soYmxvY2tJbmRleCwgbm90VGFr
ZW5CbG9ja0luZGV4LCBib3VuZGFyeUNvZGVPcmlnaW4pOwogICAgICAgICAgICAgICAgICAgICAg
ICAgCkBAIC0xNjAsMTIgKzE2MCwxMSBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZGF0YUxvZ0YoIkNGR1NpbXBsaWZ5OiBCcmFuY2gtPmp1bXAgY29udmVyc2lvbiB0byBz
YW1lIHN1Y2Nlc3NvciBvbiBCbG9jayAjJXUgdG8gQmxvY2sgIyV1LlxuIiwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrSW5kZXgsIHRhcmdldEJsb2NrSW5kZXgpOwog
I2VuZGlmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKG1fZ3JhcGhbYmxvY2st
Pmxhc3QoKV0uaXNUZXJtaW5hbCgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb2Rl
JiBicmFuY2ggPSBtX2dyYXBoW2Jsb2NrLT5sYXN0KCldOwotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEFTU0VSVChicmFuY2guaXNUZXJtaW5hbCgpKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBBU1NFUlQoYnJhbmNoLm9wKCkgPT0gQnJhbmNoKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBicmFuY2guc2V0T3BBbmREZWZhdWx0RmxhZ3MoUGhhbnRvbSk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGJyYW5jaC5yZWZDb3VudCgpID09IDEpOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIE5vZGUqIGJyYW5jaCA9IGJsb2NrLT5sYXN0KCk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGJyYW5jaC0+aXNUZXJtaW5hbCgpKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQoYnJhbmNoLT5vcCgpID09IEJyYW5j
aCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJhbmNoLT5zZXRPcEFuZERlZmF1bHRG
bGFncyhQaGFudG9tKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQoYnJhbmNo
LT5yZWZDb3VudCgpID09IDEpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGJsb2NrLT5hcHBlbmROb2RlKAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBtX2dyYXBoLCBEb250UmVmQ2hpbGRyZW4sIERvbnRSZWZOb2RlLCBT
cGVjTm9uZSwgSnVtcCwKQEAgLTI2MCw0NSArMjU5LDQzIEBAIHByaXZhdGU6CiAgICAgCiAgICAg
dm9pZCBrZWVwT3BlcmFuZEFsaXZlKEJhc2ljQmxvY2sqIGJsb2NrLCBDb2RlT3JpZ2luIGNvZGVP
cmlnaW4sIGludCBvcGVyYW5kKQogICAgIHsKLSAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRleCA9
IGJsb2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZChvcGVyYW5kKTsKLSAgICAgICAgaWYgKG5v
ZGVJbmRleCA9PSBOb05vZGUpCisgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+dmFyaWFibGVz
QXRUYWlsLm9wZXJhbmQob3BlcmFuZCk7CisgICAgICAgIGlmICghbm9kZSkKICAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgaWYgKG1fZ3JhcGhbbm9kZUluZGV4XS52YXJpYWJsZUFjY2Vzc0Rh
dGEoKS0+aXNDYXB0dXJlZCgpKQorICAgICAgICBpZiAobm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRh
KCktPmlzQ2FwdHVyZWQoKSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgaWYgKG1fZ3Jh
cGhbbm9kZUluZGV4XS5vcCgpID09IFNldExvY2FsKQotICAgICAgICAgICAgbm9kZUluZGV4ID0g
bV9ncmFwaFtub2RlSW5kZXhdLmNoaWxkMSgpLmluZGV4KCk7Ci0gICAgICAgIE5vZGUmIG5vZGUg
PSBtX2dyYXBoW25vZGVJbmRleF07Ci0gICAgICAgIGlmICghbm9kZS5zaG91bGRHZW5lcmF0ZSgp
KQorICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBTZXRMb2NhbCkKKyAgICAgICAgICAgIG5vZGUg
PSBub2RlLT5jaGlsZDEoKS5ub2RlKCk7CisgICAgICAgIGlmICghbm9kZS0+c2hvdWxkR2VuZXJh
dGUoKSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgQVNTRVJUKG1fZ3JhcGhbbm9kZUlu
ZGV4XS5vcCgpICE9IFNldExvY2FsKTsKKyAgICAgICAgQVNTRVJUKG5vZGUtPm9wKCkgIT0gU2V0
TG9jYWwpOwogICAgICAgICBibG9jay0+YXBwZW5kTm9kZSgKLSAgICAgICAgICAgIG1fZ3JhcGgs
IFJlZkNoaWxkcmVuLCBEb250UmVmTm9kZSwgU3BlY05vbmUsIFBoYW50b20sIGNvZGVPcmlnaW4s
IG5vZGVJbmRleCk7CisgICAgICAgICAgICBtX2dyYXBoLCBSZWZDaGlsZHJlbiwgRG9udFJlZk5v
ZGUsIFNwZWNOb25lLCBQaGFudG9tLCBjb2RlT3JpZ2luLCBub2RlKTsKICAgICB9CiAgICAgCiAg
ICAgdm9pZCBmaXhQb3NzaWJsZUdldExvY2FsKEJhc2ljQmxvY2sqIGJsb2NrLCBFZGdlJiBlZGdl
LCBib29sIGNoYW5nZVJlZikKICAgICB7Ci0gICAgICAgIE5vZGUmIGNoaWxkID0gbV9ncmFwaFtl
ZGdlXTsKLSAgICAgICAgaWYgKGNoaWxkLm9wKCkgIT0gR2V0TG9jYWwpCisgICAgICAgIE5vZGUq
IGNoaWxkID0gZWRnZS5ub2RlKCk7CisgICAgICAgIGlmIChjaGlsZC0+b3AoKSAhPSBHZXRMb2Nh
bCkKICAgICAgICAgICAgIHJldHVybjsKICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9O
X1ZFUkJPU0UpCi0gICAgICAgIGRhdGFMb2dGKCIgICAgQ29uc2lkZXJpbmcgR2V0TG9jYWwgYXQg
QCV1LCBsb2NhbCByJWQuXG4iLCBlZGdlLmluZGV4KCksIGNoaWxkLmxvY2FsKCkpOworICAgICAg
ICBkYXRhTG9nRigiICAgIENvbnNpZGVyaW5nIEdldExvY2FsIGF0IEAldSwgbG9jYWwgciVkLlxu
Iiwgbm9kZS0+aW5kZXgoKSwgY2hpbGQtPmxvY2FsKCkpOwogI2VuZGlmCi0gICAgICAgIGlmIChj
aGlsZC52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+aXNDYXB0dXJlZCgpKSB7CisgICAgICAgIGlmIChj
aGlsZC0+dmFyaWFibGVBY2Nlc3NEYXRhKCktPmlzQ2FwdHVyZWQoKSkgewogI2lmIERGR19FTkFC
TEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKICAgICAgICAgICAgIGRhdGFMb2dGKCIgICAg
ICAgIEl0J3MgY2FwdHVyZWQuXG4iKTsKICNlbmRpZgogICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICB9Ci0gICAgICAgIE5vZGVJbmRleCBvcmlnaW5hbE5vZGVJbmRleCA9IGJsb2NrLT52YXJp
YWJsZXNBdFRhaWwub3BlcmFuZChjaGlsZC5sb2NhbCgpKTsKKyAgICAgICAgTm9kZSogb3JpZ2lu
YWxOb2RlID0gYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKGNoaWxkLT5sb2NhbCgpKTsK
ICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCi0gICAgICAgIGRhdGFM
b2dGKCIgICAgICAgIERlYWxpbmcgd2l0aCBvcmlnaW5hbCBAJXUuXG4iLCBvcmlnaW5hbE5vZGVJ
bmRleCk7CisgICAgICAgIGRhdGFMb2dGKCIgICAgICAgIERlYWxpbmcgd2l0aCBvcmlnaW5hbCBA
JXUuXG4iLCBvcmlnaW5hbE5vZGUtPmluZGV4KCkpOwogI2VuZGlmCi0gICAgICAgIEFTU0VSVChv
cmlnaW5hbE5vZGVJbmRleCAhPSBOb05vZGUpOwotICAgICAgICBOb2RlKiBvcmlnaW5hbE5vZGUg
PSAmbV9ncmFwaFtvcmlnaW5hbE5vZGVJbmRleF07CisgICAgICAgIEFTU0VSVChvcmlnaW5hbE5v
ZGVJbmRleCk7CiAjaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQogICAg
ICAgICBkYXRhTG9nRigiICAgICAgICBPcmlnaW5hbCBoYXMgbG9jYWwgciVkLlxuIiwgb3JpZ2lu
YWxOb2RlLT5sb2NhbCgpKTsKICNlbmRpZgotICAgICAgICBBU1NFUlQoY2hpbGQubG9jYWwoKSA9
PSBvcmlnaW5hbE5vZGUtPmxvY2FsKCkpOworICAgICAgICBBU1NFUlQoY2hpbGQtPmxvY2FsKCkg
PT0gb3JpZ2luYWxOb2RlLT5sb2NhbCgpKTsKICAgICAgICAgLy8gUG9zc2liaWxpdGllczoKICAg
ICAgICAgLy8gU2V0TG9jYWwgLT4gdGhlIHNlY29uZEJsb2NrIGlzIGdldHRpbmcgdGhlIHZhbHVl
IG9mIHNvbWV0aGluZyB0aGF0IGlzIGltbWVkaWF0ZWx5CiAgICAgICAgIC8vICAgICBhdmFpbGFi
bGUgaW4gdGhlIGZpcnN0IGJsb2NrIHdpdGggYSBrbm93biBOb2RlSW5kZXguCkBAIC0zMTIsMTAg
KzMwOSw4IEBAIHByaXZhdGU6CiAgICAgICAgIC8vIEZsdXNoIC0+IHRoZSBzZWNvbmRCbG9jayBp
cyBhc2tpbmcgZm9yIGtlZXAtYWxpdmUgb24gYW4gb3BlcmFuZCB0aGF0IHRoZSBmaXJzdAogICAg
ICAgICAvLyAgICAgYmxvY2sgd2FzIGZvcmNpbmcgdG8gYmUgYWxpdmUsIHNvIHRoZSBzZWNvbmQg
YmxvY2sgc2hvdWxkIHJlZmVyIGNoaWxkIG9mCiAgICAgICAgIC8vICAgICB0aGUgZmx1c2guCi0g
ICAgICAgIGlmIChvcmlnaW5hbE5vZGUtPm9wKCkgPT0gRmx1c2gpIHsKLSAgICAgICAgICAgIG9y
aWdpbmFsTm9kZUluZGV4ID0gb3JpZ2luYWxOb2RlLT5jaGlsZDEoKS5pbmRleCgpOwotICAgICAg
ICAgICAgb3JpZ2luYWxOb2RlID0gJm1fZ3JhcGhbb3JpZ2luYWxOb2RlSW5kZXhdOwotICAgICAg
ICB9CisgICAgICAgIGlmIChvcmlnaW5hbE5vZGUtPm9wKCkgPT0gRmx1c2gpCisgICAgICAgICAg
ICBvcmlnaW5hbE5vZGUgPSBvcmlnaW5hbE5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKICAgICAgICAg
c3dpdGNoIChvcmlnaW5hbE5vZGUtPm9wKCkpIHsKICAgICAgICAgY2FzZSBTZXRMb2NhbDogewog
ICAgICAgICAgICAgaWYgKGNoYW5nZVJlZikKQEAgLTMyMyw3ICszMTgsNyBAQCBwcml2YXRlOgog
I2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKICAgICAgICAgICAgIGRh
dGFMb2dGKCIgICAgICAgIEl0J3MgYSBTZXRMb2NhbC5cbiIpOwogI2VuZGlmCi0gICAgICAgICAg
ICBtX2dyYXBoLmNoYW5nZUluZGV4KGVkZ2UsIG9yaWdpbmFsTm9kZS0+Y2hpbGQxKCkuaW5kZXgo
KSwgY2hhbmdlUmVmKTsKKyAgICAgICAgICAgIG1fZ3JhcGguY2hhbmdlQ2hpbGQoZWRnZSwgb3Jp
Z2luYWxOb2RlLT5jaGlsZDEoKS5ub2RlKCksIGNoYW5nZVJlZik7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgfQogICAgICAgICBjYXNlIEdldExvY2FsOiB7CkBAIC0zMzEsNyArMzI2LDcg
QEAgcHJpdmF0ZToKICAgICAgICAgICAgIGRhdGFMb2dGKCIgICAgICAgIEl0J3MgYSBHZXRMb2Nh
bC5cbiIpOwogI2VuZGlmCiAgICAgICAgICAgICBpZiAob3JpZ2luYWxOb2RlLT5zaG91bGRHZW5l
cmF0ZSgpKQotICAgICAgICAgICAgICAgIG1fZ3JhcGguY2hhbmdlSW5kZXgoZWRnZSwgb3JpZ2lu
YWxOb2RlSW5kZXgsIGNoYW5nZVJlZik7CisgICAgICAgICAgICAgICAgbV9ncmFwaC5jaGFuZ2VD
aGlsZChlZGdlLCBvcmlnaW5hbE5vZGUsIGNoYW5nZVJlZik7CiAgICAgICAgICAgICAvLyBJZiB3
ZSBoYXZlIGEgR2V0TG9jYWwgdGhhdCBwb2ludHMgdG8gYSBjaGlsZCBHZXRMb2NhbCB0aGF0IGlz
IGRlYWQsIHRoZW4KICAgICAgICAgICAgIC8vIHdlIGhhdmUgbm8gbmVlZCB0byBkbyBhbnl0aGlu
ZzogdGhpcyBvcmlnaW5hbCBHZXRMb2NhbCBpcyBzdGlsbCB2YWxpZC4KICAgICAgICAgICAgIGJy
ZWFrOwpAQCAtMzc1LDIzICszNzAsMjEgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgfQogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGRlc3RpbmF0aW9uQmxv
Y2stPnBoaXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIE5vZGVJbmRleCBwaGlOb2RlSW5k
ZXggPSBkZXN0aW5hdGlvbkJsb2NrLT5waGlzW2ldOwotICAgICAgICAgICAgTm9kZSYgcGhpTm9k
ZSA9IG1fZ3JhcGhbcGhpTm9kZUluZGV4XTsKLSAgICAgICAgICAgIE5vZGVJbmRleCBteU5vZGVJ
bmRleCA9IHNvdXJjZUJsb2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZChwaGlOb2RlLmxvY2Fs
KCkpOwotI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKLSAgICAgICAg
ICAgIGRhdGFMb2dGKCJDb25zaWRlcmluZyByZW1vdmluZyByZWZlcmVuY2UgZnJvbSBwaGkgQCV1
IHRvIEAldSBvbiBsb2NhbCByJWQ6IiwKLSAgICAgICAgICAgICAgICAgICAgcGhpTm9kZUluZGV4
LCBteU5vZGVJbmRleCwgcGhpTm9kZS5sb2NhbCgpKTsKLSNlbmRpZgotICAgICAgICAgICAgaWYg
KG15Tm9kZUluZGV4ID09IE5vTm9kZSkgeworICAgICAgICAgICAgTm9kZSogcGhpTm9kZSA9IGRl
c3RpbmF0aW9uQmxvY2stPnBoaXNbaV07CisgICAgICAgICAgICBOb2RlKiBteU5vZGUgPSBzb3Vy
Y2VCbG9jay0+dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQocGhpTm9kZS0+bG9jYWwoKSk7CisgICAg
ICAgICAgICBpZiAoIW15Tm9kZSkgewogICAgICAgICAgICAgICAgIC8vIFRoaXMgd2lsbCBoYXBw
ZW4gaWYgdGhlcmUgaXMgYSBwaGkgaW4gdGhlIGRlc3RpbmF0aW9uIHRoYXQgcmVmZXJzIGludG8K
ICAgICAgICAgICAgICAgICAvLyB0aGUgZGVzdGluYXRpb24gaXRzZWxmLgogICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgTm9kZSYgbXlOb2RlID0g
bV9ncmFwaFtteU5vZGVJbmRleF07Ci0gICAgICAgICAgICBpZiAobXlOb2RlLm9wKCkgPT0gR2V0
TG9jYWwpCi0gICAgICAgICAgICAgICAgbXlOb2RlSW5kZXggPSBteU5vZGUuY2hpbGQxKCkuaW5k
ZXgoKTsKKyNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCisgICAgICAg
ICAgICBkYXRhTG9nRigiQ29uc2lkZXJpbmcgcmVtb3ZpbmcgcmVmZXJlbmNlIGZyb20gcGhpIEAl
dSB0byBAJXUgb24gbG9jYWwgciVkOiIsCisgICAgICAgICAgICAgICAgICAgICBwaGlOb2RlLT5p
bmRleCgpLCBteU5vZGUtPmluZGV4KCksIHBoaU5vZGUtPmxvY2FsKCkpOworI2VuZGlmCisgICAg
ICAgICAgICBpZiAobXlOb2RlLT5vcCgpID09IEdldExvY2FsKQorICAgICAgICAgICAgICAgIG15
Tm9kZSA9IG15Tm9kZS0+Y2hpbGQxKCkubm9kZSgpOwogICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBqID0gMDsgaiA8IEFkamFjZW5jeUxpc3Q6OlNpemU7ICsraikKLSAgICAgICAgICAgICAgICBy
ZW1vdmVQb3RlbnRpYWxseURlYWRQaGlSZWZlcmVuY2UobXlOb2RlSW5kZXgsIHBoaU5vZGUsIGos
IHNvdXJjZUJsb2NrLT5pc1JlYWNoYWJsZSk7CisgICAgICAgICAgICAgICAgcmVtb3ZlUG90ZW50
aWFsbHlEZWFkUGhpUmVmZXJlbmNlKG15Tm9kZSwgcGhpTm9kZSwgaiwgc291cmNlQmxvY2stPmlz
UmVhY2hhYmxlKTsKICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCiAg
ICAgICAgICAgICBkYXRhTG9nRigiXG4iKTsKICNlbmRpZgpAQCAtNDE2LDU4ICs0MDksNTcgQEAg
cHJpdmF0ZToKICAgICAgICAgZml4UGhpcyhibG9ja0luZGV4LCBqZXR0aXNvbmVkQmxvY2tJbmRl
eCk7CiAgICAgfQogICAgIAotICAgIHZvaWQgcmVtb3ZlUG90ZW50aWFsbHlEZWFkUGhpUmVmZXJl
bmNlKE5vZGVJbmRleCBteU5vZGVJbmRleCwgTm9kZSYgcGhpTm9kZSwgdW5zaWduZWQgZWRnZUlu
ZGV4LCBib29sIGNoYW5nZVJlZikKKyAgICB2b2lkIHJlbW92ZVBvdGVudGlhbGx5RGVhZFBoaVJl
ZmVyZW5jZShOb2RlKiBteU5vZGUsIE5vZGUqIHBoaU5vZGUsIHVuc2lnbmVkIGVkZ2VJbmRleCwg
Ym9vbCBjaGFuZ2VSZWYpCiAgICAgewotICAgICAgICBpZiAocGhpTm9kZS5jaGlsZHJlbi5jaGls
ZChlZGdlSW5kZXgpLmluZGV4VW5jaGVja2VkKCkgIT0gbXlOb2RlSW5kZXgpCisgICAgICAgIGlm
IChwaGlOb2RlLT5jaGlsZHJlbi5jaGlsZChlZGdlSW5kZXgpLm5vZGUoKSAhPSBteU5vZGUpCiAg
ICAgICAgICAgICByZXR1cm47CiAjaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJC
T1NFKQogICAgICAgICBkYXRhTG9nRigiIFJlbW92aW5nIHJlZmVyZW5jZSBhdCBjaGlsZCAldS4i
LCBlZGdlSW5kZXgpOwogI2VuZGlmCi0gICAgICAgIGlmIChjaGFuZ2VSZWYgJiYgcGhpTm9kZS5z
aG91bGRHZW5lcmF0ZSgpKQotICAgICAgICAgICAgbV9ncmFwaC5kZXJlZihteU5vZGVJbmRleCk7
Ci0gICAgICAgIHBoaU5vZGUuY2hpbGRyZW4ucmVtb3ZlRWRnZUZyb21CYWcoZWRnZUluZGV4KTsK
KyAgICAgICAgaWYgKGNoYW5nZVJlZiAmJiBwaGlOb2RlLT5zaG91bGRHZW5lcmF0ZSgpKQorICAg
ICAgICAgICAgbV9ncmFwaC5kZXJlZihteU5vZGUpOworICAgICAgICBwaGlOb2RlLT5jaGlsZHJl
bi5yZW1vdmVFZGdlRnJvbUJhZyhlZGdlSW5kZXgpOwogICAgIH0KICAgICAKICAgICBzdHJ1Y3Qg
T3BlcmFuZFN1YnN0aXR1dGlvbiB7CiAgICAgICAgIE9wZXJhbmRTdWJzdGl0dXRpb24oKQotICAg
ICAgICAgICAgOiBvbGRDaGlsZChOb05vZGUpCi0gICAgICAgICAgICAsIG5ld0NoaWxkKE5vTm9k
ZSkKKyAgICAgICAgICAgIDogb2xkQ2hpbGQoMCkKKyAgICAgICAgICAgICwgbmV3Q2hpbGQoMCkK
ICAgICAgICAgewogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBleHBsaWNpdCBPcGVyYW5k
U3Vic3RpdHV0aW9uKE5vZGVJbmRleCBvbGRDaGlsZCkKKyAgICAgICAgZXhwbGljaXQgT3BlcmFu
ZFN1YnN0aXR1dGlvbihOb2RlKiBvbGRDaGlsZCkKICAgICAgICAgICAgIDogb2xkQ2hpbGQob2xk
Q2hpbGQpCiAgICAgICAgICAgICAsIG5ld0NoaWxkKG9sZENoaWxkKQogICAgICAgICB7CiAgICAg
ICAgIH0KICAgICAgICAgCi0gICAgICAgIE9wZXJhbmRTdWJzdGl0dXRpb24oTm9kZUluZGV4IG9s
ZENoaWxkLCBOb2RlSW5kZXggbmV3Q2hpbGQpCisgICAgICAgIE9wZXJhbmRTdWJzdGl0dXRpb24o
Tm9kZSogb2xkQ2hpbGQsIE5vZGUqIG5ld0NoaWxkKQogICAgICAgICAgICAgOiBvbGRDaGlsZChv
bGRDaGlsZCkKICAgICAgICAgICAgICwgbmV3Q2hpbGQobmV3Q2hpbGQpCiAgICAgICAgIHsKLSAg
ICAgICAgICAgIEFTU0VSVCgob2xkQ2hpbGQgPT0gTm9Ob2RlKSA9PSAobmV3Q2hpbGQgPT0gTm9O
b2RlKSk7CisgICAgICAgICAgICBBU1NFUlQoKCFvbGRDaGlsZCkgPT0gKCFuZXdDaGlsZCkpOwog
ICAgICAgICB9CiAgICAgICAgIAotICAgICAgICB2b2lkIGR1bXAoRklMRSogb3V0KQorICAgICAg
ICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKICAgICAgICAgewotICAgICAgICAg
ICAgaWYgKG9sZENoaWxkID09IE5vTm9kZSkKLSAgICAgICAgICAgICAgICBmcHJpbnRmKG91dCwg
Ii0iKTsKKyAgICAgICAgICAgIGlmICghb2xkQ2hpbGQpCisgICAgICAgICAgICAgICAgb3V0LnBy
aW50ZihvdXQsICItIik7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZnByaW50
ZihvdXQsICJAJXUgLT4gQCV1Iiwgb2xkQ2hpbGQsIG5ld0NoaWxkKTsKKyAgICAgICAgICAgICAg
ICBvdXQucHJpbnRmKG91dCwgIkAldSAtPiBAJXUiLCBvbGRDaGlsZC0+aW5kZXgoKSwgbmV3Q2hp
bGQtPmluZGV4KCkpOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBOb2RlSW5kZXggb2xk
Q2hpbGQ7Ci0gICAgICAgIE5vZGVJbmRleCBuZXdDaGlsZDsKKyAgICAgICAgTm9kZSogb2xkQ2hp
bGQ7CisgICAgICAgIE5vZGUqIG5ld0NoaWxkOwogICAgIH07CiAgICAgCi0gICAgTm9kZUluZGV4
IHNraXBHZXRMb2NhbChOb2RlSW5kZXggbm9kZUluZGV4KQorICAgIE5vZGUqIHNraXBHZXRMb2Nh
bChOb2RlKiBub2RlKQogICAgIHsKLSAgICAgICAgaWYgKG5vZGVJbmRleCA9PSBOb05vZGUpCi0g
ICAgICAgICAgICByZXR1cm4gTm9Ob2RlOwotICAgICAgICBOb2RlJiBub2RlID0gbV9ncmFwaFtu
b2RlSW5kZXhdOwotICAgICAgICBpZiAobm9kZS5vcCgpID09IEdldExvY2FsKQotICAgICAgICAg
ICAgcmV0dXJuIG5vZGUuY2hpbGQxKCkuaW5kZXgoKTsKLSAgICAgICAgcmV0dXJuIG5vZGVJbmRl
eDsKKyAgICAgICAgaWYgKCFub2RlKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIGlm
IChub2RlLT5vcCgpID09IEdldExvY2FsKQorICAgICAgICAgICAgcmV0dXJuIG5vZGUtPmNoaWxk
MSgpLm5vZGUoKTsKKyAgICAgICAgcmV0dXJuIG5vZGU7CiAgICAgfQogICAgIAogICAgIHZvaWQg
cmVjb3JkUG9zc2libGVJbmNvbWluZ1JlZmVyZW5jZSgKQEAgLTQ3NywzMCArNDY5LDI4IEBAIHBy
aXZhdGU6CiAgICAgICAgICAgICBza2lwR2V0TG9jYWwoc2Vjb25kQmxvY2stPnZhcmlhYmxlc0F0
VGFpbC5vcGVyYW5kKG9wZXJhbmQpKSk7CiAgICAgfQogICAgIAotICAgIHZvaWQgcmVjb3JkTmV3
VGFyZ2V0KE9wZXJhbmRzPE9wZXJhbmRTdWJzdGl0dXRpb24+JiBzdWJzdGl0dXRpb25zLCBpbnQg
b3BlcmFuZCwgTm9kZUluZGV4IG5vZGVJbmRleCkKKyAgICB2b2lkIHJlY29yZE5ld1RhcmdldChP
cGVyYW5kczxPcGVyYW5kU3Vic3RpdHV0aW9uPiYgc3Vic3RpdHV0aW9ucywgaW50IG9wZXJhbmQs
IE5vZGVJbmRleCBOb2RlKiBub2RlKQogICAgIHsKLSAgICAgICAgQVNTRVJUKG1fZ3JhcGhbbm9k
ZUluZGV4XS5vcCgpID09IFNldExvY2FsCi0gICAgICAgICAgICAgICB8fCBtX2dyYXBoW25vZGVJ
bmRleF0ub3AoKSA9PSBTZXRBcmd1bWVudAotICAgICAgICAgICAgICAgfHwgbV9ncmFwaFtub2Rl
SW5kZXhdLm9wKCkgPT0gRmx1c2gKLSAgICAgICAgICAgICAgIHx8IG1fZ3JhcGhbbm9kZUluZGV4
XS5vcCgpID09IFBoaSk7Ci0gICAgICAgIHN1YnN0aXR1dGlvbnMub3BlcmFuZChvcGVyYW5kKS5u
ZXdDaGlsZCA9IG5vZGVJbmRleDsKKyAgICAgICAgQVNTRVJUKG5vZGUtPm9wKCkgPT0gU2V0TG9j
YWwKKyAgICAgICAgICAgICAgIHx8IG5vZGUtPm9wKCkgPT0gU2V0QXJndW1lbnQKKyAgICAgICAg
ICAgICAgIHx8IG5vZGUtPm9wKCkgPT0gRmx1c2gKKyAgICAgICAgICAgICAgIHx8IG5vZGUtPm9w
KCkgPT0gUGhpKTsKKyAgICAgICAgc3Vic3RpdHV0aW9ucy5vcGVyYW5kKG9wZXJhbmQpLm5ld0No
aWxkID0gbm9kZTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBmaXhUYWlsT3BlcmFuZCgKICAgICAg
ICAgQmFzaWNCbG9jayogZmlyc3RCbG9jaywgQmFzaWNCbG9jayogc2Vjb25kQmxvY2ssIGludCBv
cGVyYW5kLAogICAgICAgICBPcGVyYW5kczxPcGVyYW5kU3Vic3RpdHV0aW9uPiYgc3Vic3RpdHV0
aW9ucykKICAgICB7Ci0gICAgICAgIE5vZGVJbmRleCBhdFNlY29uZFRhaWwgPSBzZWNvbmRCbG9j
ay0+dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQob3BlcmFuZCk7CisgICAgICAgIE5vZGUqIGF0U2Vj
b25kVGFpbCA9IHNlY29uZEJsb2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZChvcGVyYW5kKTsK
ICAgICAgICAgCi0gICAgICAgIGlmIChhdFNlY29uZFRhaWwgPT0gTm9Ob2RlKSB7CisgICAgICAg
IGlmICghYXRTZWNvbmRUYWlsKSB7CiAgICAgICAgICAgICAvLyBJZiB0aGUgdmFyaWFibGUgaXMg
ZGVhZCBhdCB0aGUgZW5kIG9mIHRoZSBzZWNvbmQgYmxvY2ssIHRoZW4gZG8gbm90aGluZzsgZXNz
ZW50aWFsbHkKICAgICAgICAgICAgIC8vIHRoaXMgbWVhbnMgdGhhdCB3ZSB3YW50IHRoZSB0YWls
IHN0YXRlIHRvIHJlZmxlY3Qgd2hhdGV2ZXIgdGhlIGZpcnN0IGJsb2NrIGRpZC4KICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgfQogCi0gICAgICAgIE5vZGUmIHNlY29uZE5vZGUgPSBtX2dy
YXBoW2F0U2Vjb25kVGFpbF07Ci0gICAgICAgIAotICAgICAgICBzd2l0Y2ggKHNlY29uZE5vZGUu
b3AoKSkgeworICAgICAgICBzd2l0Y2ggKGF0U2Vjb25kVGFpbC0+b3AoKSkgewogICAgICAgICBj
YXNlIFNldExvY2FsOgogICAgICAgICBjYXNlIEZsdXNoOiB7CiAgICAgICAgICAgICAvLyBUaGUg
c2Vjb25kIGJsb2NrIGRpZCBpbnRlcmVzdGluZyB0aGluZ3MgdG8gdGhlIHZhcmlhYmxlcywgc28g
dXBkYXRlIHRoZSB0YWlsCkBAIC01MTEsNyArNTAxLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAg
IAogICAgICAgICBjYXNlIFBoaTogewogICAgICAgICAgICAgLy8gS2VlcCB3aGF0IHdhcyBpbiB0
aGUgZmlyc3QgYmxvY2suCi0gICAgICAgICAgICBBU1NFUlQoZmlyc3RCbG9jay0+dmFyaWFibGVz
QXRUYWlsLm9wZXJhbmQob3BlcmFuZCkgIT0gTm9Ob2RlKTsKKyAgICAgICAgICAgIEFTU0VSVChm
aXJzdEJsb2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZChvcGVyYW5kKSk7CiAgICAgICAgICAg
ICByZWNvcmROZXdUYXJnZXQoc3Vic3RpdHV0aW9ucywgb3BlcmFuZCwgc2tpcEdldExvY2FsKGZp
cnN0QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKG9wZXJhbmQpKSk7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgfQpAQCAtNTIwLDI4ICs1MTAsMjggQEAgcHJpdmF0ZToKICAgICAg
ICAgICAgIC8vIElmIGl0J3MgYSBHZXRMb2NhbCBvbiBhIGNhcHR1cmVkIHZhciwgdGhlbiBkZWZp
bml0ZWx5IGtlZXAgd2hhdCB3YXMKICAgICAgICAgICAgIC8vIGluIHRoZSBzZWNvbmQgYmxvY2su
IEluIHBhcnRpY3VsYXIsIGl0J3MgcG9zc2libGUgdGhhdCB0aGUgZmlyc3QKICAgICAgICAgICAg
IC8vIGJsb2NrIGRvZXNuJ3QgZXZlbiBrbm93IGFib3V0IHRoaXMgdmFyaWFibGUuCi0gICAgICAg
ICAgICBpZiAoc2Vjb25kTm9kZS52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+aXNDYXB0dXJlZCgpKSB7
CisgICAgICAgICAgICBpZiAoYXRTZWNvbmRUYWlsLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+aXND
YXB0dXJlZCgpKSB7CiAgICAgICAgICAgICAgICAgZmlyc3RCbG9jay0+dmFyaWFibGVzQXRUYWls
Lm9wZXJhbmQob3BlcmFuZCkgPSBhdFNlY29uZFRhaWw7Ci0gICAgICAgICAgICAgICAgcmVjb3Jk
TmV3VGFyZ2V0KHN1YnN0aXR1dGlvbnMsIG9wZXJhbmQsIHNlY29uZE5vZGUuY2hpbGQxKCkuaW5k
ZXgoKSk7CisgICAgICAgICAgICAgICAgcmVjb3JkTmV3VGFyZ2V0KHN1YnN0aXR1dGlvbnMsIG9w
ZXJhbmQsIGF0U2Vjb25kVGFpbC0+Y2hpbGQxKCkuaW5kZXgoKSk7CiAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgICAgIC8vIEl0J3Mg
cG9zc2libGUgdGhhdCB0aGUgc2Vjb25kIGJsb2NrIGhhZCBhIEdldExvY2FsIGFuZCB0aGUgZmly
c3QgYmxvY2sKICAgICAgICAgICAgIC8vIGhhZCBhIFNldEFyZ3VtZW50IG9yIGEgUGhpLiBUaGVu
IHVwZGF0ZSB0aGUgdGFpbC4gT3RoZXJ3aXNlIGtlZXAgd2hhdCB3YXMgaW4gdGhlCiAgICAgICAg
ICAgICAvLyBmaXJzdCBibG9jay4KLSAgICAgICAgICAgIE5vZGVJbmRleCBhdEZpcnN0VGFpbCA9
IGZpcnN0QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKG9wZXJhbmQpOwotICAgICAgICAg
ICAgQVNTRVJUKGF0Rmlyc3RUYWlsICE9IE5vTm9kZSk7Ci0gICAgICAgICAgICBzd2l0Y2ggKG1f
Z3JhcGhbYXRGaXJzdFRhaWxdLm9wKCkpIHsKKyAgICAgICAgICAgIE5vZGUqIGF0Rmlyc3RUYWls
ID0gZmlyc3RCbG9jay0+dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQob3BlcmFuZCk7CisgICAgICAg
ICAgICBBU1NFUlQoYXRGaXJzdFRhaWwpOworICAgICAgICAgICAgc3dpdGNoIChhdEZpcnN0VGFp
bC0+b3AoKSkgewogICAgICAgICAgICAgY2FzZSBTZXRBcmd1bWVudDoKICAgICAgICAgICAgIGNh
c2UgUGhpOgogICAgICAgICAgICAgICAgIGZpcnN0QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVy
YW5kKG9wZXJhbmQpID0gYXRTZWNvbmRUYWlsOwotICAgICAgICAgICAgICAgIHJlY29yZE5ld1Rh
cmdldChzdWJzdGl0dXRpb25zLCBvcGVyYW5kLCBzZWNvbmROb2RlLmNoaWxkMSgpLmluZGV4KCkp
OworICAgICAgICAgICAgICAgIHJlY29yZE5ld1RhcmdldChzdWJzdGl0dXRpb25zLCBvcGVyYW5k
LCBhdFNlY29uZFRhaWwtPmNoaWxkMSgpLmluZGV4KCkpOwogICAgICAgICAgICAgICAgIGJyZWFr
OwogCiAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgIC8vIEtlZXAgd2hhdCB3
YXMgaW4gdGhlIGZpcnN0IGJsb2NrLCBhbmQgYWRqdXN0IHRoZSBzdWJzdGl0dXRpb24gdG8gYWNj
b3VudCBmb3IKICAgICAgICAgICAgICAgICAvLyB0aGUgZmFjdCB0aGF0IHN1Y2Nlc3NvcnMgd2ls
bCByZWZlciB0byB0aGUgY2hpbGQgb2YgdGhlIEdldExvY2FsLgotICAgICAgICAgICAgICAgIEFT
U0VSVChmaXJzdEJsb2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZChvcGVyYW5kKSAhPSBOb05v
ZGUpOworICAgICAgICAgICAgICAgIEFTU0VSVChmaXJzdEJsb2NrLT52YXJpYWJsZXNBdFRhaWwu
b3BlcmFuZChvcGVyYW5kKSk7CiAgICAgICAgICAgICAgICAgcmVjb3JkTmV3VGFyZ2V0KHN1YnN0
aXR1dGlvbnMsIG9wZXJhbmQsIHNraXBHZXRMb2NhbChmaXJzdEJsb2NrLT52YXJpYWJsZXNBdFRh
aWwub3BlcmFuZChvcGVyYW5kKSkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgfQpAQCAtNTY3LDEwICs1NTcsMTAgQEAgcHJpdmF0ZToKICAgICAgICAgCiAgICAgICAgIC8v
IFJlbW92ZSB0aGUgdGVybWluYWwgb2YgZmlyc3RCbG9jayBzaW5jZSB3ZSBkb24ndCBuZWVkIGl0
IGFueW1vcmUuIFdlbGwsIHdlIGRvbid0CiAgICAgICAgIC8vIHJlYWxseSByZW1vdmUgaXQ7IHdl
IGFjdHVhbGx5IHR1cm4gaXQgaW50byBhIFBoYW50b20uCi0gICAgICAgIEFTU0VSVChtX2dyYXBo
W2ZpcnN0QmxvY2stPmxhc3QoKV0uaXNUZXJtaW5hbCgpKTsKLSAgICAgICAgQ29kZU9yaWdpbiBi
b3VuZGFyeUNvZGVPcmlnaW4gPSBtX2dyYXBoW2ZpcnN0QmxvY2stPmxhc3QoKV0uY29kZU9yaWdp
bjsKLSAgICAgICAgbV9ncmFwaFtmaXJzdEJsb2NrLT5sYXN0KCldLnNldE9wQW5kRGVmYXVsdEZs
YWdzKFBoYW50b20pOwotICAgICAgICBBU1NFUlQobV9ncmFwaFtmaXJzdEJsb2NrLT5sYXN0KCld
LnJlZkNvdW50KCkgPT0gMSk7CisgICAgICAgIEFTU0VSVChmaXJzdEJsb2NrLT5sYXN0KCktPmlz
VGVybWluYWwoKSk7CisgICAgICAgIENvZGVPcmlnaW4gYm91bmRhcnlDb2RlT3JpZ2luID0gZmly
c3RCbG9jay0+bGFzdCgpLT5jb2RlT3JpZ2luOworICAgICAgICBmaXJzdEJsb2NrLT5sYXN0KCkt
PnNldE9wQW5kRGVmYXVsdEZsYWdzKFBoYW50b20pOworICAgICAgICBBU1NFUlQoZmlyc3RCbG9j
ay0+bGFzdCgpLT5yZWZDb3VudCgpID09IDEpOwogICAgICAgICAKICAgICAgICAgaWYgKGpldHRp
c29uZWRCbG9ja0luZGV4ICE9IE5vQmxvY2spIHsKICAgICAgICAgICAgIEJhc2ljQmxvY2sqIGpl
dHRpc29uZWRCbG9jayA9IG1fZ3JhcGgubV9ibG9ja3NbamV0dGlzb25lZEJsb2NrSW5kZXhdLmdl
dCgpOwpAQCAtNTk5LDI4ICs1ODksMjUgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHJlY29yZFBv
c3NpYmxlSW5jb21pbmdSZWZlcmVuY2Uoc2Vjb25kQmxvY2ssIHN1YnN0aXR1dGlvbnMsIGkpOwog
CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2Vjb25kQmxvY2stPnNpemUoKTsgKytp
KSB7Ci0gICAgICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4ID0gc2Vjb25kQmxvY2stPmF0KGkp
OwotICAgICAgICAgICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhbbm9kZUluZGV4XTsKKyAgICAgICAg
ICAgIE5vZGUqIG5vZGUgPSBzZWNvbmRCbG9jay0+YXQoaSk7CiAgICAgICAgICAgICAKICAgICAg
ICAgICAgIGJvb2wgY2hpbGRyZW5BbHJlYWR5Rml4ZWQgPSBmYWxzZTsKICAgICAgICAgICAgIAot
ICAgICAgICAgICAgc3dpdGNoIChub2RlLm9wKCkpIHsKKyAgICAgICAgICAgIHN3aXRjaCAobm9k
ZS0+b3AoKSkgewogICAgICAgICAgICAgY2FzZSBQaGFudG9tOiB7Ci0gICAgICAgICAgICAgICAg
aWYgKCFub2RlLmNoaWxkMSgpKQorICAgICAgICAgICAgICAgIGlmICghbm9kZS0+Y2hpbGQxKCkp
CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIAotICAgICAgICAg
ICAgICAgIEFTU0VSVChub2RlLnNob3VsZEdlbmVyYXRlKCkpOwotICAgICAgICAgICAgICAgIE5v
ZGUmIHBvc3NpYmxlTG9jYWxPcCA9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV07Ci0gICAgICAgICAg
ICAgICAgaWYgKHBvc3NpYmxlTG9jYWxPcC5vcCgpICE9IEdldExvY2FsCi0gICAgICAgICAgICAg
ICAgICAgICYmIHBvc3NpYmxlTG9jYWxPcC5oYXNMb2NhbCgpCi0gICAgICAgICAgICAgICAgICAg
ICYmICFwb3NzaWJsZUxvY2FsT3AudmFyaWFibGVBY2Nlc3NEYXRhKCktPmlzQ2FwdHVyZWQoKSkg
ewotICAgICAgICAgICAgICAgICAgICBOb2RlSW5kZXggc2V0TG9jYWxJbmRleCA9Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBmaXJzdEJsb2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZChwb3Nz
aWJsZUxvY2FsT3AubG9jYWwoKSk7Ci0gICAgICAgICAgICAgICAgICAgIE5vZGUmIHNldExvY2Fs
ID0gbV9ncmFwaFtzZXRMb2NhbEluZGV4XTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHNldExv
Y2FsLm9wKCkgPT0gU2V0TG9jYWwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgu
Y2hhbmdlRWRnZShub2RlLmNoaWxkcmVuLmNoaWxkMSgpLCBzZXRMb2NhbC5jaGlsZDEoKSk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQoIW5vZGUuY2hpbGQyKCkpOwotICAgICAgICAg
ICAgICAgICAgICAgICAgQVNTRVJUKCFub2RlLmNoaWxkMygpKTsKKyAgICAgICAgICAgICAgICBB
U1NFUlQobm9kZS0+c2hvdWxkR2VuZXJhdGUoKSk7CisgICAgICAgICAgICAgICAgTm9kZSogcG9z
c2libGVMb2NhbE9wID0gbm9kZS0+Y2hpbGQxKCkubm9kZSgpOworICAgICAgICAgICAgICAgIGlm
IChwb3NzaWJsZUxvY2FsT3AtPm9wKCkgIT0gR2V0TG9jYWwKKyAgICAgICAgICAgICAgICAgICAg
JiYgcG9zc2libGVMb2NhbE9wLT5oYXNMb2NhbCgpCisgICAgICAgICAgICAgICAgICAgICYmICFw
b3NzaWJsZUxvY2FsT3AtPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5pc0NhcHR1cmVkKCkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgTm9kZSogc2V0TG9jYWwgPSBmaXJzdEJsb2NrLT52YXJpYWJsZXNB
dFRhaWwub3BlcmFuZChwb3NzaWJsZUxvY2FsT3AtPmxvY2FsKCkpOworICAgICAgICAgICAgICAg
ICAgICBpZiAoc2V0TG9jYWwtPm9wKCkgPT0gU2V0TG9jYWwpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIG1fZ3JhcGguY2hhbmdlRWRnZShub2RlLT5jaGlsZHJlbi5jaGlsZDEoKSwgc2V0TG9j
YWwtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVCghbm9kZS0+Y2hp
bGQyKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKCFub2RlLT5jaGlsZDMoKSk7
CiAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbkFscmVhZHlGaXhlZCA9IHRydWU7CiAg
ICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CkBAIC02MzcsMTEgKzYyNCwx
MSBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIC8vIFNpbWlsYXJseSBmb3IgR2V0TG9jYWw7
IGl0IGNvdWxkIHVzZSBhbnkgb2YgdGhvc2UgZXhjZXB0IGZvcgogICAgICAgICAgICAgICAgIC8v
IEdldExvY2FsLiBJZiBpdCB1c2VzIGEgUGhpIHRoZW4gaXQgc2hvdWxkIGJlIHJlZGlyZWN0ZWQg
dG8gdXNlIGEKICAgICAgICAgICAgICAgICAvLyBQaGkgZnJvbSB0aGUgdGFpbCBvcGVyYW5kLgot
ICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoW25vZGUuY2hpbGQxKCldLm9wKCkgIT0gUGhpKQor
ICAgICAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS0+b3AoKSAhPSBQaGkpCiAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIE5v
ZGVJbmRleCBhdEZpcnN0SW5kZXggPSBmaXJzdEJsb2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFu
ZChub2RlLmxvY2FsKCkpOwotICAgICAgICAgICAgICAgIG1fZ3JhcGguY2hhbmdlRWRnZShub2Rl
LmNoaWxkcmVuLmNoaWxkMSgpLCBFZGdlKHNraXBHZXRMb2NhbChhdEZpcnN0SW5kZXgpKSwgbm9k
ZS5zaG91bGRHZW5lcmF0ZSgpKTsKKyAgICAgICAgICAgICAgICBOb2RlKiBhdEZpcnN0ID0gZmly
c3RCbG9jay0+dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQobm9kZS0+bG9jYWwoKSk7CisgICAgICAg
ICAgICAgICAgbV9ncmFwaC5jaGFuZ2VFZGdlKG5vZGUtPmNoaWxkcmVuLmNoaWxkMSgpLCBFZGdl
KHNraXBHZXRMb2NhbChhdEZpcnN0KSksIG5vZGUtPnNob3VsZEdlbmVyYXRlKCkpOwogICAgICAg
ICAgICAgICAgIGNoaWxkcmVuQWxyZWFkeUZpeGVkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgIH0KQEAgLTY1MSwzMCArNjM4LDMwIEBAIHByaXZhdGU6CiAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlmICghY2hpbGRyZW5BbHJlYWR5
Rml4ZWQpIHsKLSAgICAgICAgICAgICAgICBib29sIGNoYW5nZVJlZiA9IG5vZGUuc2hvdWxkR2Vu
ZXJhdGUoKTsKKyAgICAgICAgICAgICAgICBib29sIGNoYW5nZVJlZiA9IG5vZGUtPnNob3VsZEdl
bmVyYXRlKCk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAvLyBJZiB0aGUgY2hpbGQg
aXMgYSBHZXRMb2NhbCwgdGhlbiB3ZSBtaWdodCBsaWtlIHRvIGZpeCBpdC4KLSAgICAgICAgICAg
ICAgICBpZiAobm9kZS5mbGFncygpICYgTm9kZUhhc1ZhckFyZ3MpIHsKLSAgICAgICAgICAgICAg
ICAgICAgZm9yICh1bnNpZ25lZCBjaGlsZElkeCA9IG5vZGUuZmlyc3RDaGlsZCgpOwotICAgICAg
ICAgICAgICAgICAgICAgICAgIGNoaWxkSWR4IDwgbm9kZS5maXJzdENoaWxkKCkgKyBub2RlLm51
bUNoaWxkcmVuKCk7CisgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmZsYWdzKCkgJiBOb2RlSGFz
VmFyQXJncykgeworICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGNoaWxkSWR4ID0g
bm9kZS0+Zmlyc3RDaGlsZCgpOworICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkSWR4IDwg
bm9kZS0+Zmlyc3RDaGlsZCgpICsgbm9kZS0+bnVtQ2hpbGRyZW4oKTsKICAgICAgICAgICAgICAg
ICAgICAgICAgICArK2NoaWxkSWR4KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoISFt
X2dyYXBoLm1fdmFyQXJnQ2hpbGRyZW5bY2hpbGRJZHhdKQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGZpeFBvc3NpYmxlR2V0TG9jYWwoZmlyc3RCbG9jaywgbV9ncmFwaC5tX3ZhckFyZ0No
aWxkcmVuW2NoaWxkSWR4XSwgY2hhbmdlUmVmKTsKICAgICAgICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIH0gZWxzZSBpZiAoISFub2RlLmNoaWxkMSgpKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIGZpeFBvc3NpYmxlR2V0TG9jYWwoZmlyc3RCbG9jaywgbm9kZS5jaGlsZHJlbi5jaGls
ZDEoKSwgY2hhbmdlUmVmKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCEhbm9kZS5jaGlsZDIo
KSkgewotICAgICAgICAgICAgICAgICAgICAgICAgZml4UG9zc2libGVHZXRMb2NhbChmaXJzdEJs
b2NrLCBub2RlLmNoaWxkcmVuLmNoaWxkMigpLCBjaGFuZ2VSZWYpOwotICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKCEhbm9kZS5jaGlsZDMoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBmaXhQb3NzaWJsZUdldExvY2FsKGZpcnN0QmxvY2ssIG5vZGUuY2hpbGRyZW4uY2hpbGQzKCks
IGNoYW5nZVJlZik7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmICghIW5vZGUtPmNoaWxkMSgp
KSB7CisgICAgICAgICAgICAgICAgICAgIGZpeFBvc3NpYmxlR2V0TG9jYWwoZmlyc3RCbG9jaywg
bm9kZS0+Y2hpbGRyZW4uY2hpbGQxKCksIGNoYW5nZVJlZik7CisgICAgICAgICAgICAgICAgICAg
IGlmICghIW5vZGUtPmNoaWxkMigpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBmaXhQb3Nz
aWJsZUdldExvY2FsKGZpcnN0QmxvY2ssIG5vZGUtPmNoaWxkcmVuLmNoaWxkMigpLCBjaGFuZ2VS
ZWYpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEhbm9kZS0+Y2hpbGQzKCkpCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZml4UG9zc2libGVHZXRMb2NhbChmaXJzdEJsb2NrLCBu
b2RlLT5jaGlsZHJlbi5jaGlsZDMoKSwgY2hhbmdlUmVmKTsKICAgICAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgZmlyc3RC
bG9jay0+YXBwZW5kKG5vZGVJbmRleCk7CisgICAgICAgICAgICBmaXJzdEJsb2NrLT5hcHBlbmQo
bm9kZSk7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIEFTU0VSVChtX2dyYXBoW2ZpcnN0
QmxvY2stPmxhc3QoKV0uaXNUZXJtaW5hbCgpKTsKKyAgICAgICAgQVNTRVJUKGZpcnN0QmxvY2st
Pmxhc3QoKS0+aXNUZXJtaW5hbCgpKTsKICAgICAgICAgCiAgICAgICAgIC8vIEZpeCB0aGUgcHJl
ZGVjZXNzb3JzIG9mIG15IG5ldyBzdWNjZXNzb3JzLiBUaGlzIGlzIHRyaWNreSwgc2luY2Ugd2Ug
YXJlIGdvaW5nIHRvIHJlc2V0CiAgICAgICAgIC8vIGFsbCBwcmVkZWNlc3NvcnMgYW55d2F5IGR1
ZSB0byByZWFjaGFiaWxpdHkgYW5hbHlzaXMuIEJ1dCB3ZSBuZWVkIHRvIGZpeCB0aGUKQEAgLTcw
NCwyNiArNjkxLDI0IEBAIHByaXZhdGU6CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1fZ3Jh
cGgubnVtU3VjY2Vzc29ycyhmaXJzdEJsb2NrKTsgaS0tOykgewogICAgICAgICAgICAgQmFzaWNC
bG9jayogc3VjY2Vzc29yID0gbV9ncmFwaC5tX2Jsb2Nrc1ttX2dyYXBoLnN1Y2Nlc3NvcihmaXJz
dEJsb2NrLCBpKV0uZ2V0KCk7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSAwOyBqIDwg
c3VjY2Vzc29yLT5waGlzLnNpemUoKTsgKytqKSB7Ci0gICAgICAgICAgICAgICAgTm9kZUluZGV4
IHBoaU5vZGVJbmRleCA9IHN1Y2Nlc3Nvci0+cGhpc1tqXTsKLSAgICAgICAgICAgICAgICBOb2Rl
JiBwaGlOb2RlID0gbV9ncmFwaFtwaGlOb2RlSW5kZXhdOwotICAgICAgICAgICAgICAgIGJvb2wg
Y2hhbmdlUmVmID0gcGhpTm9kZS5zaG91bGRHZW5lcmF0ZSgpOwotICAgICAgICAgICAgICAgIE9w
ZXJhbmRTdWJzdGl0dXRpb24gc3Vic3RpdHV0aW9uID0gc3Vic3RpdHV0aW9ucy5vcGVyYW5kKHBo
aU5vZGUubG9jYWwoKSk7CisgICAgICAgICAgICAgICAgTm9kZSogcGhpTm9kZSA9IHN1Y2Nlc3Nv
ci0+cGhpc1tqXTsKKyAgICAgICAgICAgICAgICBib29sIGNoYW5nZVJlZiA9IHBoaU5vZGUtPnNo
b3VsZEdlbmVyYXRlKCk7CisgICAgICAgICAgICAgICAgT3BlcmFuZFN1YnN0aXR1dGlvbiBzdWJz
dGl0dXRpb24gPSBzdWJzdGl0dXRpb25zLm9wZXJhbmQocGhpTm9kZS0+bG9jYWwoKSk7CiAjaWYg
REZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQotICAgICAgICAgICAgICAgIGRh
dGFMb2dGKCIgICAgUGVyZm9ybWluZyBvcGVyYW5kIHN1YnN0aXR1dGlvbiBAJXUgLT4gQCV1Llxu
IiwKLSAgICAgICAgICAgICAgICAgICAgICAgIHN1YnN0aXR1dGlvbi5vbGRDaGlsZCwgc3Vic3Rp
dHV0aW9uLm5ld0NoaWxkKTsKKyAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgUGVyZm9ybWlu
ZyBvcGVyYW5kIHN1YnN0aXR1dGlvbiAiLCBzdWJzdGl0dXRpb24sICIuXG4iKTsKICNlbmRpZgot
ICAgICAgICAgICAgICAgIGlmICghcGhpTm9kZS5jaGlsZDEoKSkKKyAgICAgICAgICAgICAgICBp
ZiAoIXBoaU5vZGUtPmNoaWxkMSgpKQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAg
ICAgICAgICAgICAgICBpZiAocGhpTm9kZS5jaGlsZDEoKS5pbmRleCgpID09IHN1YnN0aXR1dGlv
bi5vbGRDaGlsZCkKLSAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5jaGFuZ2VJbmRleChwaGlO
b2RlLmNoaWxkcmVuLmNoaWxkMSgpLCBzdWJzdGl0dXRpb24ubmV3Q2hpbGQsIGNoYW5nZVJlZik7
Ci0gICAgICAgICAgICAgICAgaWYgKCFwaGlOb2RlLmNoaWxkMigpKQorICAgICAgICAgICAgICAg
IGlmIChwaGlOb2RlLT5jaGlsZDEoKSA9PSBzdWJzdGl0dXRpb24ub2xkQ2hpbGQpCisgICAgICAg
ICAgICAgICAgICAgIG1fZ3JhcGguY2hhbmdlSW5kZXgocGhpTm9kZS0+Y2hpbGRyZW4uY2hpbGQx
KCksIHN1YnN0aXR1dGlvbi5uZXdDaGlsZCwgY2hhbmdlUmVmKTsKKyAgICAgICAgICAgICAgICBp
ZiAoIXBoaU5vZGUtPmNoaWxkMigpKQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAg
ICAgICAgICAgICAgICBpZiAocGhpTm9kZS5jaGlsZDIoKS5pbmRleCgpID09IHN1YnN0aXR1dGlv
bi5vbGRDaGlsZCkKLSAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5jaGFuZ2VJbmRleChwaGlO
b2RlLmNoaWxkcmVuLmNoaWxkMigpLCBzdWJzdGl0dXRpb24ubmV3Q2hpbGQsIGNoYW5nZVJlZik7
Ci0gICAgICAgICAgICAgICAgaWYgKCFwaGlOb2RlLmNoaWxkMygpKQorICAgICAgICAgICAgICAg
IGlmIChwaGlOb2RlLT5jaGlsZDIoKSA9PSBzdWJzdGl0dXRpb24ub2xkQ2hpbGQpCisgICAgICAg
ICAgICAgICAgICAgIG1fZ3JhcGguY2hhbmdlSW5kZXgocGhpTm9kZS0+Y2hpbGRyZW4uY2hpbGQy
KCksIHN1YnN0aXR1dGlvbi5uZXdDaGlsZCwgY2hhbmdlUmVmKTsKKyAgICAgICAgICAgICAgICBp
ZiAoIXBoaU5vZGUtPmNoaWxkMygpKQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAg
ICAgICAgICAgICAgICBpZiAocGhpTm9kZS5jaGlsZDMoKS5pbmRleCgpID09IHN1YnN0aXR1dGlv
bi5vbGRDaGlsZCkKLSAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5jaGFuZ2VJbmRleChwaGlO
b2RlLmNoaWxkcmVuLmNoaWxkMygpLCBzdWJzdGl0dXRpb24ubmV3Q2hpbGQsIGNoYW5nZVJlZik7
CisgICAgICAgICAgICAgICAgaWYgKHBoaU5vZGUtPmNoaWxkMygpID09IHN1YnN0aXR1dGlvbi5v
bGRDaGlsZCkKKyAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5jaGFuZ2VJbmRleChwaGlOb2Rl
LT5jaGlsZHJlbi5jaGlsZDMoKSwgc3Vic3RpdHV0aW9uLm5ld0NoaWxkLCBjaGFuZ2VSZWYpOwog
ICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdDU0VQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdDU0VQaGFzZS5jcHAJKHJldmlzaW9uIDE0MDUwNCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQ1NFUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Mywy
NCArNTMsMjQgQEAgcHVibGljOgogICAgIAogcHJpdmF0ZToKICAgICAKLSAgICBOb2RlSW5kZXgg
Y2Fub25pY2FsaXplKE5vZGVJbmRleCBub2RlSW5kZXgpCisgICAgTm9kZSogY2Fub25pY2FsaXpl
KE5vZGUqIG5vZGUpCiAgICAgewotICAgICAgICBpZiAobm9kZUluZGV4ID09IE5vTm9kZSkKLSAg
ICAgICAgICAgIHJldHVybiBOb05vZGU7CisgICAgICAgIGlmICghbm9kZSkKKyAgICAgICAgICAg
IHJldHVybiAwOwogICAgICAgICAKLSAgICAgICAgaWYgKG1fZ3JhcGhbbm9kZUluZGV4XS5vcCgp
ID09IFZhbHVlVG9JbnQzMikKLSAgICAgICAgICAgIG5vZGVJbmRleCA9IG1fZ3JhcGhbbm9kZUlu
ZGV4XS5jaGlsZDEoKS5pbmRleCgpOworICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBWYWx1ZVRv
SW50MzIpCisgICAgICAgICAgICBub2RlID0gbm9kZS0+Y2hpbGQxKCkubm9kZSgpOwogICAgICAg
ICAKLSAgICAgICAgcmV0dXJuIG5vZGVJbmRleDsKKyAgICAgICAgcmV0dXJuIG5vZGU7CiAgICAg
fQotICAgIE5vZGVJbmRleCBjYW5vbmljYWxpemUoRWRnZSBub2RlVXNlKQorICAgIE5vZGUqIGNh
bm9uaWNhbGl6ZShFZGdlIGVkZ2UpCiAgICAgewotICAgICAgICByZXR1cm4gY2Fub25pY2FsaXpl
KG5vZGVVc2UuaW5kZXhVbmNoZWNrZWQoKSk7CisgICAgICAgIHJldHVybiBjYW5vbmljYWxpemUo
ZWRnZS5ub2RlKCkpOwogICAgIH0KICAgICAKICAgICB1bnNpZ25lZCBlbmRJbmRleEZvclB1cmVD
U0UoKQogICAgIHsKLSAgICAgICAgdW5zaWduZWQgcmVzdWx0ID0gbV9sYXN0U2VlblttX2dyYXBo
W21fY29tcGlsZUluZGV4XS5vcCgpXTsKKyAgICAgICAgdW5zaWduZWQgcmVzdWx0ID0gbV9sYXN0
U2VlblttX2N1cnJlbnROb2RlLT5vcCgpXTsKICAgICAgICAgaWYgKHJlc3VsdCA9PSBVSU5UX01B
WCkKICAgICAgICAgICAgIHJlc3VsdCA9IDA7CiAgICAgICAgIGVsc2UKQEAgLTgyLDI2MSArODIs
MjU3IEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCi0gICAgTm9k
ZUluZGV4IHB1cmVDU0UoTm9kZSYgbm9kZSkKKyAgICBOb2RlKiBwdXJlQ1NFKE5vZGUqIG5vZGUp
CiAgICAgewotICAgICAgICBOb2RlSW5kZXggY2hpbGQxID0gY2Fub25pY2FsaXplKG5vZGUuY2hp
bGQxKCkpOwotICAgICAgICBOb2RlSW5kZXggY2hpbGQyID0gY2Fub25pY2FsaXplKG5vZGUuY2hp
bGQyKCkpOwotICAgICAgICBOb2RlSW5kZXggY2hpbGQzID0gY2Fub25pY2FsaXplKG5vZGUuY2hp
bGQzKCkpOworICAgICAgICBOb2RlKiBjaGlsZDEgPSBjYW5vbmljYWxpemUobm9kZS0+Y2hpbGQx
KCkpOworICAgICAgICBOb2RlKiBjaGlsZDIgPSBjYW5vbmljYWxpemUobm9kZS0+Y2hpbGQyKCkp
OworICAgICAgICBOb2RlKiBjaGlsZDMgPSBjYW5vbmljYWxpemUobm9kZS0+Y2hpbGQzKCkpOwog
ICAgICAgICAKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gZW5kSW5kZXhGb3JQdXJlQ1NFKCk7
IGktLTspIHsKLSAgICAgICAgICAgIE5vZGVJbmRleCBpbmRleCA9IG1fY3VycmVudEJsb2NrLT5h
dChpKTsKLSAgICAgICAgICAgIGlmIChpbmRleCA9PSBjaGlsZDEgfHwgaW5kZXggPT0gY2hpbGQy
IHx8IGluZGV4ID09IGNoaWxkMykKKyAgICAgICAgICAgIE5vZGUqIG90aGVyTm9kZSA9IG1fY3Vy
cmVudEJsb2NrLT5hdChpKTsKKyAgICAgICAgICAgIGlmIChvdGhlck5vZGUgPT0gY2hpbGQxIHx8
IG90aGVyTm9kZSA9PSBjaGlsZDIgfHwgb3RoZXJOb2RlID09IGNoaWxkMykKICAgICAgICAgICAg
ICAgICBicmVhazsKIAotICAgICAgICAgICAgTm9kZSYgb3RoZXJOb2RlID0gbV9ncmFwaFtpbmRl
eF07Ci0gICAgICAgICAgICBpZiAoIW90aGVyTm9kZS5zaG91bGRHZW5lcmF0ZSgpKQorICAgICAg
ICAgICAgaWYgKCFvdGhlck5vZGUtPnNob3VsZEdlbmVyYXRlKCkpCiAgICAgICAgICAgICAgICAg
Y29udGludWU7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChub2RlLm9wKCkgIT0gb3Ro
ZXJOb2RlLm9wKCkpCisgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSAhPSBvdGhlck5vZGUtPm9w
KCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAKLSAgICAgICAgICAg
IGlmIChub2RlLmFyaXRoTm9kZUZsYWdzKCkgIT0gb3RoZXJOb2RlLmFyaXRoTm9kZUZsYWdzKCkp
CisgICAgICAgICAgICBpZiAobm9kZS0+YXJpdGhOb2RlRmxhZ3MoKSAhPSBvdGhlck5vZGUtPmFy
aXRoTm9kZUZsYWdzKCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAK
LSAgICAgICAgICAgIE5vZGVJbmRleCBvdGhlckNoaWxkID0gY2Fub25pY2FsaXplKG90aGVyTm9k
ZS5jaGlsZDEoKSk7Ci0gICAgICAgICAgICBpZiAob3RoZXJDaGlsZCA9PSBOb05vZGUpCi0gICAg
ICAgICAgICAgICAgcmV0dXJuIGluZGV4OworICAgICAgICAgICAgTm9kZSogb3RoZXJDaGlsZCA9
IGNhbm9uaWNhbGl6ZShvdGhlck5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgIGlmICghb3Ro
ZXJDaGlsZCkKKyAgICAgICAgICAgICAgICByZXR1cm4gb3RoZXJOb2RlOwogICAgICAgICAgICAg
aWYgKG90aGVyQ2hpbGQgIT0gY2hpbGQxKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAg
ICAgICAgICAgCi0gICAgICAgICAgICBvdGhlckNoaWxkID0gY2Fub25pY2FsaXplKG90aGVyTm9k
ZS5jaGlsZDIoKSk7Ci0gICAgICAgICAgICBpZiAob3RoZXJDaGlsZCA9PSBOb05vZGUpCi0gICAg
ICAgICAgICAgICAgcmV0dXJuIGluZGV4OworICAgICAgICAgICAgb3RoZXJDaGlsZCA9IGNhbm9u
aWNhbGl6ZShvdGhlck5vZGUtPmNoaWxkMigpKTsKKyAgICAgICAgICAgIGlmICghb3RoZXJDaGls
ZCkKKyAgICAgICAgICAgICAgICByZXR1cm4gb3RoZXJOb2RlOwogICAgICAgICAgICAgaWYgKG90
aGVyQ2hpbGQgIT0gY2hpbGQyKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAg
ICAgCi0gICAgICAgICAgICBvdGhlckNoaWxkID0gY2Fub25pY2FsaXplKG90aGVyTm9kZS5jaGls
ZDMoKSk7Ci0gICAgICAgICAgICBpZiAob3RoZXJDaGlsZCA9PSBOb05vZGUpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIGluZGV4OworICAgICAgICAgICAgb3RoZXJDaGlsZCA9IGNhbm9uaWNhbGl6
ZShvdGhlck5vZGUtPmNoaWxkMygpKTsKKyAgICAgICAgICAgIGlmICghb3RoZXJDaGlsZCkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gb3RoZXJOb2RlOwogICAgICAgICAgICAgaWYgKG90aGVyQ2hp
bGQgIT0gY2hpbGQzKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgCi0g
ICAgICAgICAgICByZXR1cm4gaW5kZXg7CisgICAgICAgICAgICByZXR1cm4gb3RoZXJOb2RlOwog
ICAgICAgICB9Ci0gICAgICAgIHJldHVybiBOb05vZGU7CisgICAgICAgIHJldHVybiAwOwogICAg
IH0KICAgICAKLSAgICBOb2RlSW5kZXggY29uc3RhbnRDU0UoTm9kZSYgbm9kZSkKKyAgICBOb2Rl
KiBjb25zdGFudENTRShOb2RlKiBub2RlKQogICAgIHsKICAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gZW5kSW5kZXhGb3JQdXJlQ1NFKCk7IGktLTspIHsKLSAgICAgICAgICAgIE5vZGVJbmRleCBp
bmRleCA9IG1fY3VycmVudEJsb2NrLT5hdChpKTsKLSAgICAgICAgICAgIE5vZGUmIG90aGVyTm9k
ZSA9IG1fZ3JhcGhbaW5kZXhdOwotICAgICAgICAgICAgaWYgKG90aGVyTm9kZS5vcCgpICE9IEpT
Q29uc3RhbnQpCisgICAgICAgICAgICBOb2RlKiBvdGhlck5vZGUgPSBtX2N1cnJlbnRCbG9jay0+
YXQoaSk7CisgICAgICAgICAgICBpZiAob3RoZXJOb2RlLT5vcCgpICE9IEpTQ29uc3RhbnQpCiAg
ICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChv
dGhlck5vZGUuY29uc3RhbnROdW1iZXIoKSAhPSBub2RlLmNvbnN0YW50TnVtYmVyKCkpCisgICAg
ICAgICAgICBpZiAoIW90aGVyTm9kZS0+c2hvdWxkR2VuZXJhdGUoKSkKICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgcmV0dXJuIGluZGV4OworICAg
ICAgICAgICAgaWYgKG90aGVyTm9kZS0+Y29uc3RhbnROdW1iZXIoKSAhPSBub2RlLT5jb25zdGFu
dE51bWJlcigpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgCisgICAg
ICAgICAgICByZXR1cm4gb3RoZXJOb2RlOwogICAgICAgICB9Ci0gICAgICAgIHJldHVybiBOb05v
ZGU7CisgICAgICAgIHJldHVybiAwOwogICAgIH0KICAgICAKLSAgICBOb2RlSW5kZXggd2Vha0Nv
bnN0YW50Q1NFKE5vZGUmIG5vZGUpCisgICAgTm9kZSogd2Vha0NvbnN0YW50Q1NFKE5vZGUqIG5v
ZGUpCiAgICAgewogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBlbmRJbmRleEZvclB1cmVDU0Uo
KTsgaS0tOykgewotICAgICAgICAgICAgTm9kZUluZGV4IGluZGV4ID0gbV9jdXJyZW50QmxvY2st
PmF0KGkpOwotICAgICAgICAgICAgTm9kZSYgb3RoZXJOb2RlID0gbV9ncmFwaFtpbmRleF07Ci0g
ICAgICAgICAgICBpZiAob3RoZXJOb2RlLm9wKCkgIT0gV2Vha0pTQ29uc3RhbnQpCisgICAgICAg
ICAgICBOb2RlKiBvdGhlck5vZGUgPSBtX2N1cnJlbnRCbG9jay0+YXQoaSk7CisgICAgICAgICAg
ICBpZiAob3RoZXJOb2RlLT5vcCgpICE9IFdlYWtKU0NvbnN0YW50KQorICAgICAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoIW90aGVyTm9kZS0+c2hv
dWxkR2VuZXJhdGUoKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIAot
ICAgICAgICAgICAgaWYgKG90aGVyTm9kZS53ZWFrQ29uc3RhbnQoKSAhPSBub2RlLndlYWtDb25z
dGFudCgpKQorICAgICAgICAgICAgaWYgKG90aGVyTm9kZS0+d2Vha0NvbnN0YW50KCkgIT0gbm9k
ZS0+d2Vha0NvbnN0YW50KCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAg
ICAKLSAgICAgICAgICAgIHJldHVybiBpbmRleDsKKyAgICAgICAgICAgIHJldHVybiBvdGhlck5v
ZGU7CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIE5vTm9kZTsKKyAgICAgICAgcmV0dXJuIDA7
CiAgICAgfQogICAgIAotICAgIE5vZGVJbmRleCBnZXRDYWxsZWVMb2FkRWxpbWluYXRpb24oSW5s
aW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUpCisgICAgTm9kZSogZ2V0Q2FsbGVlTG9hZEVs
aW1pbmF0aW9uKElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lKQogICAgIHsKICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gbV9pbmRleEluQmxvY2s7IGktLTspIHsKLSAgICAgICAgICAg
IE5vZGVJbmRleCBpbmRleCA9IG1fY3VycmVudEJsb2NrLT5hdChpKTsKLSAgICAgICAgICAgIE5v
ZGUmIG5vZGUgPSBtX2dyYXBoW2luZGV4XTsKLSAgICAgICAgICAgIGlmICghbm9kZS5zaG91bGRH
ZW5lcmF0ZSgpKQorICAgICAgICAgICAgTm9kZSogbm9kZSA9IG1fY3VycmVudEJsb2NrLT5hdChp
KTsKKyAgICAgICAgICAgIGlmICghbm9kZS0+c2hvdWxkR2VuZXJhdGUoKSkKICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGlmIChub2RlLmNvZGVPcmlnaW4uaW5saW5lQ2Fs
bEZyYW1lICE9IGlubGluZUNhbGxGcmFtZSkKKyAgICAgICAgICAgIGlmIChub2RlLT5jb2RlT3Jp
Z2luLmlubGluZUNhbGxGcmFtZSAhPSBpbmxpbmVDYWxsRnJhbWUpCiAgICAgICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgICAgICBzd2l0Y2ggKG5vZGUub3AoKSkgeworICAgICAgICAgICAg
c3dpdGNoIChub2RlLT5vcCgpKSB7CiAgICAgICAgICAgICBjYXNlIEdldENhbGxlZToKLSAgICAg
ICAgICAgICAgICByZXR1cm4gaW5kZXg7CisgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGU7CiAg
ICAgICAgICAgICBjYXNlIFNldENhbGxlZToKLSAgICAgICAgICAgICAgICByZXR1cm4gbm9kZS5j
aGlsZDEoKS5pbmRleCgpOworICAgICAgICAgICAgICAgIHJldHVybiBub2RlLT5jaGlsZDEoKS5u
b2RlKCk7CiAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIHJldHVybiBOb05vZGU7CisgICAgICAgIHJl
dHVybiAwOwogICAgIH0KICAgICAKLSAgICBOb2RlSW5kZXggZ2V0QXJyYXlMZW5ndGhFbGltaW5h
dGlvbihOb2RlSW5kZXggYXJyYXkpCisgICAgTm9kZSogZ2V0QXJyYXlMZW5ndGhFbGltaW5hdGlv
bihOb2RlKiBhcnJheSkKICAgICB7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1faW5kZXhJ
bkJsb2NrOyBpLS07KSB7Ci0gICAgICAgICAgICBOb2RlSW5kZXggaW5kZXggPSBtX2N1cnJlbnRC
bG9jay0+YXQoaSk7Ci0gICAgICAgICAgICBOb2RlJiBub2RlID0gbV9ncmFwaFtpbmRleF07Ci0g
ICAgICAgICAgICBpZiAoIW5vZGUuc2hvdWxkR2VuZXJhdGUoKSkKKyAgICAgICAgICAgIE5vZGUq
IG5vZGUgPSBtX2N1cnJlbnRCbG9jay0+YXQoaSk7CisgICAgICAgICAgICBpZiAoIW5vZGUtPnNo
b3VsZEdlbmVyYXRlKCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBz
d2l0Y2ggKG5vZGUub3AoKSkgeworICAgICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CiAg
ICAgICAgICAgICBjYXNlIEdldEFycmF5TGVuZ3RoOgotICAgICAgICAgICAgICAgIGlmIChub2Rl
LmNoaWxkMSgpID09IGFycmF5KQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW5kZXg7Cisg
ICAgICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpID09IGFycmF5KQorICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gbm9kZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
ICAgICAKICAgICAgICAgICAgIGNhc2UgUHV0QnlWYWw6CiAgICAgICAgICAgICAgICAgaWYgKCFt
X2dyYXBoLmJ5VmFsSXNQdXJlKG5vZGUpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gTm9O
b2RlOwotICAgICAgICAgICAgICAgIGlmIChub2RlLmFycmF5TW9kZSgpLm1heVN0b3JlVG9Ib2xl
KCkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBOb05vZGU7CisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiAwOworICAgICAgICAgICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS5tYXlT
dG9yZVRvSG9sZSgpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAg
ICAgICAgICAgICAgaWYgKG1fZ3JhcGguY2xvYmJlcnNXb3JsZChpbmRleCkpCi0gICAgICAgICAg
ICAgICAgICAgIHJldHVybiBOb05vZGU7CisgICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGguY2xv
YmJlcnNXb3JsZChub2RlKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAg
ICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIE5vTm9kZTsKKyAgICAgICAgcmV0dXJu
IDA7CiAgICAgfQogICAgIAotICAgIE5vZGVJbmRleCBnbG9iYWxWYXJMb2FkRWxpbWluYXRpb24o
V3JpdGVCYXJyaWVyPFVua25vd24+KiByZWdpc3RlclBvaW50ZXIpCisgICAgTm9kZSogZ2xvYmFs
VmFyTG9hZEVsaW1pbmF0aW9uKFdyaXRlQmFycmllcjxVbmtub3duPiogcmVnaXN0ZXJQb2ludGVy
KQogICAgIHsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9pbmRleEluQmxvY2s7IGktLTsp
IHsKLSAgICAgICAgICAgIE5vZGVJbmRleCBpbmRleCA9IG1fY3VycmVudEJsb2NrLT5hdChpKTsK
LSAgICAgICAgICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW2luZGV4XTsKLSAgICAgICAgICAgIGlm
ICghbm9kZS5zaG91bGRHZW5lcmF0ZSgpKQorICAgICAgICAgICAgTm9kZSogbm9kZSA9IG1fY3Vy
cmVudEJsb2NrLT5hdChpKTsKKyAgICAgICAgICAgIGlmICghbm9kZS0+c2hvdWxkR2VuZXJhdGUo
KSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIHN3aXRjaCAobm9kZS5v
cCgpKSB7CisgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKICAgICAgICAgICAgIGNh
c2UgR2V0R2xvYmFsVmFyOgotICAgICAgICAgICAgICAgIGlmIChub2RlLnJlZ2lzdGVyUG9pbnRl
cigpID09IHJlZ2lzdGVyUG9pbnRlcikKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGluZGV4
OworICAgICAgICAgICAgICAgIGlmIChub2RlLT5yZWdpc3RlclBvaW50ZXIoKSA9PSByZWdpc3Rl
clBvaW50ZXIpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBub2RlOwogICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBQdXRHbG9iYWxWYXI6Ci0gICAgICAgICAgICAg
ICAgaWYgKG5vZGUucmVnaXN0ZXJQb2ludGVyKCkgPT0gcmVnaXN0ZXJQb2ludGVyKQotICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gbm9kZS5jaGlsZDEoKS5pbmRleCgpOworICAgICAgICAgICAg
ICAgIGlmIChub2RlLT5yZWdpc3RlclBvaW50ZXIoKSA9PSByZWdpc3RlclBvaW50ZXIpCisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBub2RlLT5jaGlsZDEoKS5ub2RlKCk7CiAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKG1fZ3JhcGguY2xvYmJlcnNXb3JsZChp
bmRleCkpCisgICAgICAgICAgICBpZiAobV9ncmFwaC5jbG9iYmVyc1dvcmxkKG5vZGUpKQogICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIHJldHVybiBOb05vZGU7Cisg
ICAgICAgIHJldHVybiAwOwogICAgIH0KICAgICAKLSAgICBOb2RlSW5kZXggc2NvcGVkVmFyTG9h
ZEVsaW1pbmF0aW9uKE5vZGVJbmRleCByZWdpc3RlcnMsIHVuc2lnbmVkIHZhck51bWJlcikKKyAg
ICBOb2RlKiBzY29wZWRWYXJMb2FkRWxpbWluYXRpb24oTm9kZSogcmVnaXN0ZXJzLCB1bnNpZ25l
ZCB2YXJOdW1iZXIpCiAgICAgewogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2luZGV4SW5C
bG9jazsgaS0tOykgewotICAgICAgICAgICAgTm9kZUluZGV4IGluZGV4ID0gbV9jdXJyZW50Qmxv
Y2stPmF0KGkpOwotICAgICAgICAgICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhbaW5kZXhdOwotICAg
ICAgICAgICAgaWYgKCFub2RlLnNob3VsZEdlbmVyYXRlKCkpCisgICAgICAgICAgICBOb2RlKiA9
IG1fY3VycmVudEJsb2NrLT5hdChpKTsKKyAgICAgICAgICAgIGlmICghbm9kZS0+c2hvdWxkR2Vu
ZXJhdGUoKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIHN3aXRjaCAo
bm9kZS5vcCgpKSB7CisgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKICAgICAgICAg
ICAgIGNhc2UgR2V0U2NvcGVkVmFyOiB7Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGUuY2hpbGQx
KCkgPT0gcmVnaXN0ZXJzICYmIG5vZGUudmFyTnVtYmVyKCkgPT0gdmFyTnVtYmVyKQorICAgICAg
ICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKSA9PSByZWdpc3RlcnMgJiYgbm9kZS52YXJOdW1i
ZXIoKSA9PSB2YXJOdW1iZXIpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpbmRleDsKICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0gCiAgICAgICAgICAgICBjYXNlIFB1
dFNjb3BlZFZhcjogewotICAgICAgICAgICAgICAgIGlmIChub2RlLmNoaWxkMigpID09IHJlZ2lz
dGVycyAmJiBub2RlLnZhck51bWJlcigpID09IHZhck51bWJlcikKLSAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIG5vZGUuY2hpbGQzKCkuaW5kZXgoKTsKKyAgICAgICAgICAgICAgICBpZiAobm9k
ZS0+Y2hpbGQyKCkgPT0gcmVnaXN0ZXJzICYmIG5vZGUudmFyTnVtYmVyKCkgPT0gdmFyTnVtYmVy
KQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gbm9kZS0+Y2hpbGQzKCkubm9kZSgpOwogICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgY2FzZSBTZXRM
b2NhbDogewotICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nl
c3NEYXRhID0gbm9kZS52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKKyAgICAgICAgICAgICAgICBWYXJp
YWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNz
RGF0YSgpOwogICAgICAgICAgICAgICAgIGlmICh2YXJpYWJsZUFjY2Vzc0RhdGEtPmlzQ2FwdHVy
ZWQoKQogICAgICAgICAgICAgICAgICAgICAmJiB2YXJpYWJsZUFjY2Vzc0RhdGEtPmxvY2FsKCkg
PT0gc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPih2YXJOdW1iZXIpKQotICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gTm9Ob2RlOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGRlZmF1bHQ6
CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAo
bV9ncmFwaC5jbG9iYmVyc1dvcmxkKGluZGV4KSkKKyAgICAgICAgICAgIGlmIChtX2dyYXBoLmNs
b2JiZXJzV29ybGQobm9kZSkpCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAg
ICAgICAgcmV0dXJuIE5vTm9kZTsKKyAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogICAgIAogICAg
IGJvb2wgZ2xvYmFsVmFyV2F0Y2hwb2ludEVsaW1pbmF0aW9uKFdyaXRlQmFycmllcjxVbmtub3du
PiogcmVnaXN0ZXJQb2ludGVyKQogICAgIHsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9p
bmRleEluQmxvY2s7IGktLTspIHsKLSAgICAgICAgICAgIE5vZGVJbmRleCBpbmRleCA9IG1fY3Vy
cmVudEJsb2NrLT5hdChpKTsKLSAgICAgICAgICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW2luZGV4
XTsKLSAgICAgICAgICAgIGlmICghbm9kZS5zaG91bGRHZW5lcmF0ZSgpKQorICAgICAgICAgICAg
Tm9kZSogbm9kZSA9IG1fY3VycmVudEJsb2NrLT5hdChpKTsKKyAgICAgICAgICAgIGlmICghbm9k
ZS0+c2hvdWxkR2VuZXJhdGUoKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAg
ICAgIHN3aXRjaCAobm9kZS5vcCgpKSB7CisgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkp
IHsKICAgICAgICAgICAgIGNhc2UgR2xvYmFsVmFyV2F0Y2hwb2ludDoKLSAgICAgICAgICAgICAg
ICBpZiAobm9kZS5yZWdpc3RlclBvaW50ZXIoKSA9PSByZWdpc3RlclBvaW50ZXIpCisgICAgICAg
ICAgICAgICAgaWYgKG5vZGUtPnJlZ2lzdGVyUG9pbnRlcigpID09IHJlZ2lzdGVyUG9pbnRlcikK
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICBjYXNlIFB1dEdsb2JhbFZhcjoKLSAgICAgICAgICAgICAgICBpZiAobm9k
ZS5yZWdpc3RlclBvaW50ZXIoKSA9PSByZWdpc3RlclBvaW50ZXIpCisgICAgICAgICAgICAgICAg
aWYgKG5vZGUtPnJlZ2lzdGVyUG9pbnRlcigpID09IHJlZ2lzdGVyUG9pbnRlcikKICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIGlmIChtX2dyYXBoLmNsb2JiZXJzV29ybGQoaW5kZXgpKQorICAgICAgICAgICAg
aWYgKG1fZ3JhcGguY2xvYmJlcnNXb3JsZChub2RlKSkKICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgfQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIAotICAgIE5vZGVJ
bmRleCBnbG9iYWxWYXJTdG9yZUVsaW1pbmF0aW9uKFdyaXRlQmFycmllcjxVbmtub3duPiogcmVn
aXN0ZXJQb2ludGVyKQorICAgIE5vZGUqIGdsb2JhbFZhclN0b3JlRWxpbWluYXRpb24oV3JpdGVC
YXJyaWVyPFVua25vd24+KiByZWdpc3RlclBvaW50ZXIpCiAgICAgewogICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSBtX2luZGV4SW5CbG9jazsgaS0tOykgewotICAgICAgICAgICAgTm9kZUluZGV4
IGluZGV4ID0gbV9jdXJyZW50QmxvY2stPmF0KGkpOwotICAgICAgICAgICAgTm9kZSYgbm9kZSA9
IG1fZ3JhcGhbaW5kZXhdOwotICAgICAgICAgICAgaWYgKCFub2RlLnNob3VsZEdlbmVyYXRlKCkp
CisgICAgICAgICAgICBOb2RlKiBub2RlID0gbV9jdXJyZW50QmxvY2stPmF0KGkpOworICAgICAg
ICAgICAgaWYgKCFub2RlLT5zaG91bGRHZW5lcmF0ZSgpKQogICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwotICAgICAgICAgICAgc3dpdGNoIChub2RlLm9wKCkpIHsKKyAgICAgICAgICAgIHN3aXRj
aCAobm9kZS0+b3AoKSkgewogICAgICAgICAgICAgY2FzZSBQdXRHbG9iYWxWYXI6CiAgICAgICAg
ICAgICBjYXNlIFB1dEdsb2JhbFZhckNoZWNrOgotICAgICAgICAgICAgICAgIGlmIChub2RlLnJl
Z2lzdGVyUG9pbnRlcigpID09IHJlZ2lzdGVyUG9pbnRlcikKLSAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGluZGV4OworICAgICAgICAgICAgICAgIGlmIChub2RlLT5yZWdpc3RlclBvaW50ZXIo
KSA9PSByZWdpc3RlclBvaW50ZXIpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBub2RlOwog
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgY2Fz
ZSBHZXRHbG9iYWxWYXI6Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGUucmVnaXN0ZXJQb2ludGVy
KCkgPT0gcmVnaXN0ZXJQb2ludGVyKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gTm9Ob2Rl
OworICAgICAgICAgICAgICAgIGlmIChub2RlLT5yZWdpc3RlclBvaW50ZXIoKSA9PSByZWdpc3Rl
clBvaW50ZXIpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChtX2dyYXBoLmNs
b2JiZXJzV29ybGQoaW5kZXgpIHx8IG5vZGUuY2FuRXhpdCgpKQotICAgICAgICAgICAgICAgIHJl
dHVybiBOb05vZGU7CisgICAgICAgICAgICBpZiAobV9ncmFwaC5jbG9iYmVyc1dvcmxkKG5vZGUp
IHx8IG5vZGUtPmNhbkV4aXQoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAg
fQotICAgICAgICByZXR1cm4gTm9Ob2RlOworICAgICAgICByZXR1cm4gMDsKICAgICB9CiAgICAg
Ci0gICAgTm9kZUluZGV4IHNjb3BlZFZhclN0b3JlRWxpbWluYXRpb24oTm9kZUluZGV4IHNjb3Bl
LCBOb2RlSW5kZXggcmVnaXN0ZXJzLCB1bnNpZ25lZCB2YXJOdW1iZXIpCisgICAgTm9kZSogc2Nv
cGVkVmFyU3RvcmVFbGltaW5hdGlvbihOb2RlKiBzY29wZSwgTm9kZSogcmVnaXN0ZXJzLCB1bnNp
Z25lZCB2YXJOdW1iZXIpCiAgICAgewogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2luZGV4
SW5CbG9jazsgaS0tOykgewotICAgICAgICAgICAgTm9kZUluZGV4IGluZGV4ID0gbV9jdXJyZW50
QmxvY2stPmF0KGkpOwotICAgICAgICAgICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhbaW5kZXhdOwot
ICAgICAgICAgICAgaWYgKCFub2RlLnNob3VsZEdlbmVyYXRlKCkpCisgICAgICAgICAgICBOb2Rl
KiBub2RlID0gbV9jdXJyZW50QmxvY2stPmF0KGkpOworICAgICAgICAgICAgaWYgKCFub2RlLT5z
aG91bGRHZW5lcmF0ZSgpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAg
c3dpdGNoIChub2RlLm9wKCkpIHsKKyAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewog
ICAgICAgICAgICAgY2FzZSBQdXRTY29wZWRWYXI6IHsKLSAgICAgICAgICAgICAgICBpZiAobm9k
ZS5jaGlsZDEoKSA9PSBzY29wZSAmJiBub2RlLmNoaWxkMigpID09IHJlZ2lzdGVycyAmJiBub2Rl
LnZhck51bWJlcigpID09IHZhck51bWJlcikKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlu
ZGV4OworICAgICAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKSA9PSBzY29wZSAmJiBub2Rl
LT5jaGlsZDIoKSA9PSByZWdpc3RlcnMgJiYgbm9kZS52YXJOdW1iZXIoKSA9PSB2YXJOdW1iZXIp
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBub2RlOwogICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgY2FzZSBHZXRT
Y29wZWRWYXI6IHsKICAgICAgICAgICAgICAgICAvLyBMZXQncyBiZSBjb25zZXJ2YXRpdmUuCi0g
ICAgICAgICAgICAgICAgaWYgKG5vZGUudmFyTnVtYmVyKCkgPT0gdmFyTnVtYmVyKQotICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gTm9Ob2RlOworICAgICAgICAgICAgICAgIGlmIChub2RlLT52
YXJOdW1iZXIoKSA9PSB2YXJOdW1iZXIpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwog
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIApA
QCAtMzQ0LDQ2ICszNDAsNDUgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBWYXJpYWJsZUFj
Y2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9IG5vZGUudmFyaWFibGVBY2Nlc3NEYXRhKCk7
CiAgICAgICAgICAgICAgICAgaWYgKHZhcmlhYmxlQWNjZXNzRGF0YS0+aXNDYXB0dXJlZCgpCiAg
ICAgICAgICAgICAgICAgICAgICYmIHZhcmlhYmxlQWNjZXNzRGF0YS0+bG9jYWwoKSA9PSBzdGF0
aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KHZhck51bWJlcikpCi0gICAgICAgICAgICAgICAgICAg
IHJldHVybiBOb05vZGU7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBkZWZhdWx0OgogICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKG1fZ3Jh
cGguY2xvYmJlcnNXb3JsZChpbmRleCkgfHwgbm9kZS5jYW5FeGl0KCkpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIE5vTm9kZTsKKyAgICAgICAgICAgIGlmIChtX2dyYXBoLmNsb2JiZXJzV29ybGQo
bm9kZSkgfHwgbm9kZS0+Y2FuRXhpdCgpKQorICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAg
ICAgICB9Ci0gICAgICAgIHJldHVybiBOb05vZGU7CisgICAgICAgIHJldHVybiAwOwogICAgIH0K
ICAgICAKLSAgICBOb2RlSW5kZXggZ2V0QnlWYWxMb2FkRWxpbWluYXRpb24oTm9kZUluZGV4IGNo
aWxkMSwgTm9kZUluZGV4IGNoaWxkMikKKyAgICBOb2RlKiBnZXRCeVZhbExvYWRFbGltaW5hdGlv
bihOb2RlKiBjaGlsZDEsIE5vZGUqIGNoaWxkMikKICAgICB7CiAgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IG1faW5kZXhJbkJsb2NrOyBpLS07KSB7Ci0gICAgICAgICAgICBOb2RlSW5kZXggaW5k
ZXggPSBtX2N1cnJlbnRCbG9jay0+YXQoaSk7Ci0gICAgICAgICAgICBpZiAoaW5kZXggPT0gY2hp
bGQxIHx8IGluZGV4ID09IGNhbm9uaWNhbGl6ZShjaGlsZDIpKSAKKyAgICAgICAgICAgIE5vZGUq
IG5vZGUgPSBtX2N1cnJlbnRCbG9jay0+YXQoaSk7CisgICAgICAgICAgICBpZiAobm9kZSA9PSBj
aGlsZDEgfHwgbm9kZSA9PSBjYW5vbmljYWxpemUoY2hpbGQyKSkgCiAgICAgICAgICAgICAgICAg
YnJlYWs7CiAKLSAgICAgICAgICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW2luZGV4XTsKLSAgICAg
ICAgICAgIGlmICghbm9kZS5zaG91bGRHZW5lcmF0ZSgpKQorICAgICAgICAgICAgaWYgKCFub2Rl
LT5zaG91bGRHZW5lcmF0ZSgpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAg
ICAgc3dpdGNoIChub2RlLm9wKCkpIHsKKyAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkg
ewogICAgICAgICAgICAgY2FzZSBHZXRCeVZhbDoKICAgICAgICAgICAgICAgICBpZiAoIW1fZ3Jh
cGguYnlWYWxJc1B1cmUobm9kZSkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOb05vZGU7
Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGUuY2hpbGQxKCkgPT0gY2hpbGQxICYmIGNhbm9uaWNh
bGl6ZShub2RlLmNoaWxkMigpKSA9PSBjYW5vbmljYWxpemUoY2hpbGQyKSkKLSAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGluZGV4OworICAgICAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEo
KSA9PSBjaGlsZDEgJiYgY2Fub25pY2FsaXplKG5vZGUtPmNoaWxkMigpKSA9PSBjYW5vbmljYWxp
emUoY2hpbGQyKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGU7CiAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIFB1dEJ5VmFsOgogICAgICAgICAgICAgY2Fz
ZSBQdXRCeVZhbEFsaWFzOiB7CiAgICAgICAgICAgICAgICAgaWYgKCFtX2dyYXBoLmJ5VmFsSXNQ
dXJlKG5vZGUpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gTm9Ob2RlOworICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC52YXJBcmdD
aGlsZChub2RlLCAwKSA9PSBjaGlsZDEgJiYgY2Fub25pY2FsaXplKG1fZ3JhcGgudmFyQXJnQ2hp
bGQobm9kZSwgMSkpID09IGNhbm9uaWNhbGl6ZShjaGlsZDIpKQotICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAyKS5pbmRleCgpOworICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAyKS5ub2RlKCk7CiAg
ICAgICAgICAgICAgICAgLy8gV2UgbXVzdCBhc3N1bWUgdGhhdCB0aGUgUHV0QnlWYWwgd2lsbCBj
bG9iYmVyIHRoZSBsb2NhdGlvbiB3ZSdyZSBnZXR0aW5nIGZyb20uCiAgICAgICAgICAgICAgICAg
Ly8gRklYTUU6IFdlIGNhbiBkbyBiZXR0ZXI7IGlmIHdlIGtub3cgdGhhdCB0aGUgUHV0QnlWYWwg
aXMgYWNjZXNzaW5nIGFuIGFycmF5IG9mIGEKICAgICAgICAgICAgICAgICAvLyBkaWZmZXJlbnQg
dHlwZSB0aGFuIHRoZSBHZXRCeVZhbCwgdGhlbiB3ZSBrbm93IHRoYXQgdGhleSB3b24ndCBjbG9i
YmVyIGVhY2ggb3RoZXIuCi0gICAgICAgICAgICAgICAgcmV0dXJuIE5vTm9kZTsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGNhc2UgUHV0U3Ry
dWN0dXJlOgogICAgICAgICAgICAgY2FzZSBQdXRCeU9mZnNldDoKQEAgLTM5Myw3MiArMzg4LDY5
IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgLy8gdGhlIEdldEJ5VmFsLgogICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBpZiAo
bV9ncmFwaC5jbG9iYmVyc1dvcmxkKGluZGV4KSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IE5vTm9kZTsKKyAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC5jbG9iYmVyc1dvcmxkKG5vZGUp
KQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICByZXR1cm4gTm9Ob2RlOworICAgICAg
ICByZXR1cm4gMDsKICAgICB9CiAKLSAgICBib29sIGNoZWNrRnVuY3Rpb25FbGltaW5hdGlvbihK
U0NlbGwqIGZ1bmN0aW9uLCBOb2RlSW5kZXggY2hpbGQxKQorICAgIGJvb2wgY2hlY2tGdW5jdGlv
bkVsaW1pbmF0aW9uKEpTQ2VsbCogZnVuY3Rpb24sIE5vZGUqIGNoaWxkMSkKICAgICB7CiAgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IGVuZEluZGV4Rm9yUHVyZUNTRSgpOyBpLS07KSB7Ci0gICAg
ICAgICAgICBOb2RlSW5kZXggaW5kZXggPSBtX2N1cnJlbnRCbG9jay0+YXQoaSk7Ci0gICAgICAg
ICAgICBpZiAoaW5kZXggPT0gY2hpbGQxKSAKKyAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBtX2N1
cnJlbnRCbG9jay0+YXQoaSk7CisgICAgICAgICAgICBpZiAobm9kZSA9PSBjaGlsZDEpIAogICAg
ICAgICAgICAgICAgIGJyZWFrOwogCi0gICAgICAgICAgICBOb2RlJiBub2RlID0gbV9ncmFwaFtp
bmRleF07Ci0gICAgICAgICAgICBpZiAobm9kZS5vcCgpID09IENoZWNrRnVuY3Rpb24gJiYgbm9k
ZS5jaGlsZDEoKSA9PSBjaGlsZDEgJiYgbm9kZS5mdW5jdGlvbigpID09IGZ1bmN0aW9uKQorICAg
ICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gQ2hlY2tGdW5jdGlvbiAmJiBub2RlLT5jaGlsZDEo
KSA9PSBjaGlsZDEgJiYgbm9kZS0+ZnVuY3Rpb24oKSA9PSBmdW5jdGlvbikKICAgICAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
fQogICAgIAotICAgIGJvb2wgY2hlY2tFeGVjdXRhYmxlRWxpbWluYXRpb24oRXhlY3V0YWJsZUJh
c2UqIGV4ZWN1dGFibGUsIE5vZGVJbmRleCBjaGlsZDEpCisgICAgYm9vbCBjaGVja0V4ZWN1dGFi
bGVFbGltaW5hdGlvbihFeGVjdXRhYmxlQmFzZSogZXhlY3V0YWJsZSwgTm9kZSogY2hpbGQxKQog
ICAgIHsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gZW5kSW5kZXhGb3JQdXJlQ1NFKCk7IGkt
LTspIHsKLSAgICAgICAgICAgIE5vZGVJbmRleCBpbmRleCA9IG1fY3VycmVudEJsb2NrLT5hdChp
KTsKLSAgICAgICAgICAgIGlmIChpbmRleCA9PSBjaGlsZDEpCisgICAgICAgICAgICBOb2RlKiBu
b2RlID0gbV9jdXJyZW50QmxvY2stPmF0KGkpOworICAgICAgICAgICAgaWYgKG5vZGUgPT0gY2hp
bGQxKQogICAgICAgICAgICAgICAgIGJyZWFrOwogCi0gICAgICAgICAgICBOb2RlJiBub2RlID0g
bV9ncmFwaFtpbmRleF07Ci0gICAgICAgICAgICBpZiAobm9kZS5vcCgpID09IENoZWNrRXhlY3V0
YWJsZSAmJiBub2RlLmNoaWxkMSgpID09IGNoaWxkMSAmJiBub2RlLmV4ZWN1dGFibGUoKSA9PSBl
eGVjdXRhYmxlKQorICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gQ2hlY2tFeGVjdXRhYmxl
ICYmIG5vZGUtPmNoaWxkMSgpID09IGNoaWxkMSAmJiBub2RlLT5leGVjdXRhYmxlKCkgPT0gZXhl
Y3V0YWJsZSkKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgYm9vbCBjaGVja1N0cnVjdHVyZUVsaW1pbmF0
aW9uKGNvbnN0IFN0cnVjdHVyZVNldCYgc3RydWN0dXJlU2V0LCBOb2RlSW5kZXggY2hpbGQxKQor
ICAgIGJvb2wgY2hlY2tTdHJ1Y3R1cmVFbGltaW5hdGlvbihjb25zdCBTdHJ1Y3R1cmVTZXQmIHN0
cnVjdHVyZVNldCwgTm9kZSogY2hpbGQxKQogICAgIHsKICAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gbV9pbmRleEluQmxvY2s7IGktLTspIHsKLSAgICAgICAgICAgIE5vZGVJbmRleCBpbmRleCA9
IG1fY3VycmVudEJsb2NrLT5hdChpKTsKLSAgICAgICAgICAgIGlmIChpbmRleCA9PSBjaGlsZDEp
IAorICAgICAgICAgICAgTm9kZSogbm9kZSA9IG1fY3VycmVudEJsb2NrLT5hdChpKTsKKyAgICAg
ICAgICAgIGlmIChub2RlID09IGNoaWxkMSkgCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAKLSAg
ICAgICAgICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW2luZGV4XTsKLSAgICAgICAgICAgIGlmICgh
bm9kZS5zaG91bGRHZW5lcmF0ZSgpKQorICAgICAgICAgICAgaWYgKCFub2RlLT5zaG91bGRHZW5l
cmF0ZSgpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgc3dpdGNoIChu
b2RlLm9wKCkpIHsKKyAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewogICAgICAgICAg
ICAgY2FzZSBDaGVja1N0cnVjdHVyZToKICAgICAgICAgICAgIGNhc2UgRm9yd2FyZENoZWNrU3Ry
dWN0dXJlOgotICAgICAgICAgICAgICAgIGlmIChub2RlLmNoaWxkMSgpID09IGNoaWxkMQotICAg
ICAgICAgICAgICAgICAgICAmJiBzdHJ1Y3R1cmVTZXQuaXNTdXBlcnNldE9mKG5vZGUuc3RydWN0
dXJlU2V0KCkpKQorICAgICAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKSA9PSBjaGlsZDEK
KyAgICAgICAgICAgICAgICAgICAgJiYgc3RydWN0dXJlU2V0LmlzU3VwZXJzZXRPZihub2RlLT5z
dHJ1Y3R1cmVTZXQoKSkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgY2FzZSBTdHJ1
Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludDoKICAgICAgICAgICAgIGNhc2UgRm9yd2FyZFN0cnVj
dHVyZVRyYW5zaXRpb25XYXRjaHBvaW50OgotICAgICAgICAgICAgICAgIGlmIChub2RlLmNoaWxk
MSgpID09IGNoaWxkMQotICAgICAgICAgICAgICAgICAgICAmJiBzdHJ1Y3R1cmVTZXQuY29udGFp
bnMobm9kZS5zdHJ1Y3R1cmUoKSkpCisgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgp
ID09IGNoaWxkMQorICAgICAgICAgICAgICAgICAgICAmJiBzdHJ1Y3R1cmVTZXQuY29udGFpbnMo
bm9kZS0+c3RydWN0dXJlKCkpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGNhc2Ug
UHV0U3RydWN0dXJlOgotICAgICAgICAgICAgICAgIGlmIChub2RlLmNoaWxkMSgpID09IGNoaWxk
MQotICAgICAgICAgICAgICAgICAgICAmJiBzdHJ1Y3R1cmVTZXQuY29udGFpbnMobm9kZS5zdHJ1
Y3R1cmVUcmFuc2l0aW9uRGF0YSgpLm5ld1N0cnVjdHVyZSkpCisgICAgICAgICAgICAgICAgaWYg
KG5vZGUtPmNoaWxkMSgpID09IGNoaWxkMQorICAgICAgICAgICAgICAgICAgICAmJiBzdHJ1Y3R1
cmVTZXQuY29udGFpbnMobm9kZS0+c3RydWN0dXJlVHJhbnNpdGlvbkRhdGEoKS5uZXdTdHJ1Y3R1
cmUpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgICAgICBp
ZiAoc3RydWN0dXJlU2V0LmNvbnRhaW5zKG5vZGUuc3RydWN0dXJlVHJhbnNpdGlvbkRhdGEoKS5w
cmV2aW91c1N0cnVjdHVyZSkpCisgICAgICAgICAgICAgICAgaWYgKHN0cnVjdHVyZVNldC5jb250
YWlucyhub2RlLT5zdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSgpLnByZXZpb3VzU3RydWN0dXJlKSkK
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgICAgIApAQCAtNDgzLDcgKzQ3NSw3IEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgZGVm
YXVsdDoKLSAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC5jbG9iYmVyc1dvcmxkKGluZGV4KSkK
KyAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC5jbG9iYmVyc1dvcmxkKG5vZGUpKQogICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICB9CkBAIC00OTEsMjYgKzQ4MywyNSBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgfQogICAgIAotICAgIGJvb2wgc3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9p
bnRFbGltaW5hdGlvbihTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgTm9kZUluZGV4IGNoaWxkMSkKKyAg
ICBib29sIHN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50RWxpbWluYXRpb24oU3RydWN0dXJl
KiBzdHJ1Y3R1cmUsIE5vZGUqIGNoaWxkMSkKICAgICB7CiAgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IG1faW5kZXhJbkJsb2NrOyBpLS07KSB7Ci0gICAgICAgICAgICBOb2RlSW5kZXggaW5kZXgg
PSBtX2N1cnJlbnRCbG9jay0+YXQoaSk7Ci0gICAgICAgICAgICBpZiAoaW5kZXggPT0gY2hpbGQx
KSAKKyAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBtX2N1cnJlbnRCbG9jay0+YXQoaSk7CisgICAg
ICAgICAgICBpZiAobm9kZSA9PSBjaGlsZDEpIAogICAgICAgICAgICAgICAgIGJyZWFrOwogCi0g
ICAgICAgICAgICBOb2RlJiBub2RlID0gbV9ncmFwaFtpbmRleF07Ci0gICAgICAgICAgICBpZiAo
IW5vZGUuc2hvdWxkR2VuZXJhdGUoKSkKKyAgICAgICAgICAgIGlmICghbm9kZS0+c2hvdWxkR2Vu
ZXJhdGUoKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIHN3aXRjaCAo
bm9kZS5vcCgpKSB7CisgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKICAgICAgICAg
ICAgIGNhc2UgQ2hlY2tTdHJ1Y3R1cmU6CiAgICAgICAgICAgICBjYXNlIEZvcndhcmRDaGVja1N0
cnVjdHVyZToKLSAgICAgICAgICAgICAgICBpZiAobm9kZS5jaGlsZDEoKSA9PSBjaGlsZDEKLSAg
ICAgICAgICAgICAgICAgICAgJiYgbm9kZS5zdHJ1Y3R1cmVTZXQoKS5jb250YWluc09ubHkoc3Ry
dWN0dXJlKSkKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCkgPT0gY2hpbGQxCisg
ICAgICAgICAgICAgICAgICAgICYmIG5vZGUtPnN0cnVjdHVyZVNldCgpLmNvbnRhaW5zT25seShz
dHJ1Y3R1cmUpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGNhc2UgUHV0U3RydWN0
dXJlOgotICAgICAgICAgICAgICAgIEFTU0VSVChub2RlLnN0cnVjdHVyZVRyYW5zaXRpb25EYXRh
KCkucHJldmlvdXNTdHJ1Y3R1cmUgIT0gc3RydWN0dXJlKTsKKyAgICAgICAgICAgICAgICBBU1NF
UlQobm9kZS0+c3RydWN0dXJlVHJhbnNpdGlvbkRhdGEoKS5wcmV2aW91c1N0cnVjdHVyZSAhPSBz
dHJ1Y3R1cmUpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIAogICAg
ICAgICAgICAgY2FzZSBQdXRCeU9mZnNldDoKQEAgLTUyOSw3ICs1MjAsNyBAQCBwcml2YXRlOgog
ICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgY2FzZSBTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0
Y2hwb2ludDoKICAgICAgICAgICAgIGNhc2UgRm9yd2FyZFN0cnVjdHVyZVRyYW5zaXRpb25XYXRj
aHBvaW50OgotICAgICAgICAgICAgICAgIGlmIChub2RlLnN0cnVjdHVyZSgpID09IHN0cnVjdHVy
ZSAmJiBub2RlLmNoaWxkMSgpID09IGNoaWxkMSkKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+
c3RydWN0dXJlKCkgPT0gc3RydWN0dXJlICYmIG5vZGUtPmNoaWxkMSgpID09IGNoaWxkMSkKICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICAgICAgCkBAIC01NDAsNyArNTMxLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBkZWZhdWx0
OgotICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLmNsb2JiZXJzV29ybGQoaW5kZXgpKQorICAg
ICAgICAgICAgICAgIGlmIChtX2dyYXBoLmNsb2JiZXJzV29ybGQobm9kZSkpCiAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgIH0KQEAgLTU0OCwyOCArNTM5LDI3IEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICB9CiAgICAgCi0gICAgTm9kZUluZGV4IHB1dFN0cnVjdHVyZVN0b3JlRWxpbWluYXRp
b24oTm9kZUluZGV4IGNoaWxkMSkKKyAgICBOb2RlKiBwdXRTdHJ1Y3R1cmVTdG9yZUVsaW1pbmF0
aW9uKE5vZGUqIGNoaWxkMSkKICAgICB7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1faW5k
ZXhJbkJsb2NrOyBpLS07KSB7Ci0gICAgICAgICAgICBOb2RlSW5kZXggaW5kZXggPSBtX2N1cnJl
bnRCbG9jay0+YXQoaSk7Ci0gICAgICAgICAgICBpZiAoaW5kZXggPT0gY2hpbGQxKQorICAgICAg
ICAgICAgTm9kZSogbm9kZSA9IG1fY3VycmVudEJsb2NrLT5hdChpKTsKKyAgICAgICAgICAgIGlm
IChub2RlID09IGNoaWxkMSkKICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIE5v
ZGUmIG5vZGUgPSBtX2dyYXBoW2luZGV4XTsKLSAgICAgICAgICAgIGlmICghbm9kZS5zaG91bGRH
ZW5lcmF0ZSgpKQorICAgICAgICAgICAgaWYgKCFub2RlLT5zaG91bGRHZW5lcmF0ZSgpKQogICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgc3dpdGNoIChub2RlLm9wKCkpIHsK
KyAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewogICAgICAgICAgICAgY2FzZSBDaGVj
a1N0cnVjdHVyZToKICAgICAgICAgICAgIGNhc2UgRm9yd2FyZENoZWNrU3RydWN0dXJlOgogICAg
ICAgICAgICAgICAgIHJldHVybiBOb05vZGU7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAg
ICBjYXNlIFBoYW50b21QdXRTdHJ1Y3R1cmU6Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGUuY2hp
bGQxKCkgPT0gY2hpbGQxKSAvLyBObyBuZWVkIHRvIHJldHJhY2Ugb3VyIHN0ZXBzLgorICAgICAg
ICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKSA9PSBjaGlsZDEpIC8vIE5vIG5lZWQgdG8gcmV0
cmFjZSBvdXIgc3RlcHMuCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOb05vZGU7CiAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBjYXNlIFB1
dFN0cnVjdHVyZToKLSAgICAgICAgICAgICAgICBpZiAobm9kZS5jaGlsZDEoKSA9PSBjaGlsZDEp
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBpbmRleDsKKyAgICAgICAgICAgICAgICBpZiAo
bm9kZS0+Y2hpbGQxKCkgPT0gY2hpbGQxKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gbm9k
ZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAg
IC8vIFB1dFN0cnVjdHVyZSBuZWVkcyB0byBleGVjdXRlIGlmIHdlIEdDLiBIZW5jZSB0aGlzIG5l
ZWRzIHRvCkBAIC01OTEsNDQgKzU4MSw0MyBAQCBwcml2YXRlOgogICAgICAgICAgICAgY2FzZSBB
bGxvY2F0ZVByb3BlcnR5U3RvcmFnZToKICAgICAgICAgICAgIGNhc2UgUmVhbGxvY2F0ZVByb3Bl
cnR5U3RvcmFnZToKICAgICAgICAgICAgIGNhc2UgVHlwZU9mOgotICAgICAgICAgICAgICAgIHJl
dHVybiBOb05vZGU7CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgICAgICAg
CiAgICAgICAgICAgICBjYXNlIEdldEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2U6Ci0gICAgICAgICAg
ICAgICAgaWYgKG5vZGUuYXJyYXlNb2RlKCkuZ2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZU1heVRy
aWdnZXJHQygpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gTm9Ob2RlOworICAgICAgICAg
ICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS5nZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlTWF5
VHJpZ2dlckdDKCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgZGVmYXVsdDoKICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChtX2dyYXBo
LmNsb2JiZXJzV29ybGQoaW5kZXgpIHx8IG5vZGUuY2FuRXhpdCgpKQotICAgICAgICAgICAgICAg
IHJldHVybiBOb05vZGU7CisgICAgICAgICAgICBpZiAobV9ncmFwaC5jbG9iYmVyc1dvcmxkKG5v
ZGUpIHx8IG5vZGUtPmNhbkV4aXQoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAg
ICAgfQotICAgICAgICByZXR1cm4gTm9Ob2RlOworICAgICAgICByZXR1cm4gMDsKICAgICB9CiAg
ICAgCi0gICAgTm9kZUluZGV4IGdldEJ5T2Zmc2V0TG9hZEVsaW1pbmF0aW9uKHVuc2lnbmVkIGlk
ZW50aWZpZXJOdW1iZXIsIE5vZGVJbmRleCBjaGlsZDEpCisgICAgTm9kZSogZ2V0QnlPZmZzZXRM
b2FkRWxpbWluYXRpb24odW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgTm9kZSogY2hpbGQxKQog
ICAgIHsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9pbmRleEluQmxvY2s7IGktLTspIHsK
LSAgICAgICAgICAgIE5vZGVJbmRleCBpbmRleCA9IG1fY3VycmVudEJsb2NrLT5hdChpKTsKLSAg
ICAgICAgICAgIGlmIChpbmRleCA9PSBjaGlsZDEpCisgICAgICAgICAgICBOb2RlKiBub2RlID0g
bV9jdXJyZW50QmxvY2stPmF0KGkpOworICAgICAgICAgICAgaWYgKG5vZGUgPT0gY2hpbGQxKQog
ICAgICAgICAgICAgICAgIGJyZWFrOwogCi0gICAgICAgICAgICBOb2RlJiBub2RlID0gbV9ncmFw
aFtpbmRleF07Ci0gICAgICAgICAgICBpZiAoIW5vZGUuc2hvdWxkR2VuZXJhdGUoKSkKKyAgICAg
ICAgICAgIGlmICghbm9kZS0+c2hvdWxkR2VuZXJhdGUoKSkKICAgICAgICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgICAgIHN3aXRjaCAobm9kZS5vcCgpKSB7CisgICAgICAgICAgICBzd2l0
Y2ggKG5vZGUtPm9wKCkpIHsKICAgICAgICAgICAgIGNhc2UgR2V0QnlPZmZzZXQ6Ci0gICAgICAg
ICAgICAgICAgaWYgKG5vZGUuY2hpbGQxKCkgPT0gY2hpbGQxCi0gICAgICAgICAgICAgICAgICAg
ICYmIG1fZ3JhcGgubV9zdG9yYWdlQWNjZXNzRGF0YVtub2RlLnN0b3JhZ2VBY2Nlc3NEYXRhSW5k
ZXgoKV0uaWRlbnRpZmllck51bWJlciA9PSBpZGVudGlmaWVyTnVtYmVyKQotICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gaW5kZXg7CisgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgp
ID09IGNoaWxkMQorICAgICAgICAgICAgICAgICAgICAmJiBtX2dyYXBoLm1fc3RvcmFnZUFjY2Vz
c0RhdGFbbm9kZS0+c3RvcmFnZUFjY2Vzc0RhdGFJbmRleCgpXS5pZGVudGlmaWVyTnVtYmVyID09
IGlkZW50aWZpZXJOdW1iZXIpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBub2RlOwogICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgY2FzZSBQ
dXRCeU9mZnNldDoKLSAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC5tX3N0b3JhZ2VBY2Nlc3NE
YXRhW25vZGUuc3RvcmFnZUFjY2Vzc0RhdGFJbmRleCgpXS5pZGVudGlmaWVyTnVtYmVyID09IGlk
ZW50aWZpZXJOdW1iZXIpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUuY2hpbGQxKCkg
PT0gY2hpbGQxKSAvLyBNdXN0IGJlIHNhbWUgcHJvcGVydHkgc3RvcmFnZS4KLSAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBub2RlLmNoaWxkMygpLmluZGV4KCk7Ci0gICAgICAgICAgICAg
ICAgICAgIHJldHVybiBOb05vZGU7CisgICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGgubV9zdG9y
YWdlQWNjZXNzRGF0YVtub2RlLT5zdG9yYWdlQWNjZXNzRGF0YUluZGV4KCldLmlkZW50aWZpZXJO
dW1iZXIgPT0gaWRlbnRpZmllck51bWJlcikgeworICAgICAgICAgICAgICAgICAgICBpZiAobm9k
ZS0+Y2hpbGQxKCkgPT0gY2hpbGQxKSAvLyBNdXN0IGJlIHNhbWUgcHJvcGVydHkgc3RvcmFnZS4K
KyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBub2RlLT5jaGlsZDMoKS5ub2RlKCk7Cisg
ICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAKQEAgLTY0NCwzOCArNjMzLDM3IEBAIHBy
aXZhdGU6CiAgICAgICAgICAgICAgICAgICAgIC8vIGNoYW5nZS4KICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHJldHVybiBOb05v
ZGU7CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgICAgICAgCiAgICAgICAg
ICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLmNsb2JiZXJzV29ybGQo
aW5kZXgpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gTm9Ob2RlOworICAgICAgICAgICAg
ICAgIGlmIChtX2dyYXBoLmNsb2JiZXJzV29ybGQobm9kZSkpCisgICAgICAgICAgICAgICAgICAg
IHJldHVybiAwOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAg
ICB9Ci0gICAgICAgIHJldHVybiBOb05vZGU7CisgICAgICAgIHJldHVybiAwOwogICAgIH0KICAg
ICAKLSAgICBOb2RlSW5kZXggcHV0QnlPZmZzZXRTdG9yZUVsaW1pbmF0aW9uKHVuc2lnbmVkIGlk
ZW50aWZpZXJOdW1iZXIsIE5vZGVJbmRleCBjaGlsZDEpCisgICAgTm9kZSogcHV0QnlPZmZzZXRT
dG9yZUVsaW1pbmF0aW9uKHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIE5vZGUqIGNoaWxkMSkK
ICAgICB7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1faW5kZXhJbkJsb2NrOyBpLS07KSB7
Ci0gICAgICAgICAgICBOb2RlSW5kZXggaW5kZXggPSBtX2N1cnJlbnRCbG9jay0+YXQoaSk7Ci0g
ICAgICAgICAgICBpZiAoaW5kZXggPT0gY2hpbGQxKQorICAgICAgICAgICAgTm9kZSogbm9kZSA9
IG1fY3VycmVudEJsb2NrLT5hdChpKTsKKyAgICAgICAgICAgIGlmIChub2RlID09IGNoaWxkMSkK
ICAgICAgICAgICAgICAgICBicmVhazsKIAotICAgICAgICAgICAgTm9kZSYgbm9kZSA9IG1fZ3Jh
cGhbaW5kZXhdOwotICAgICAgICAgICAgaWYgKCFub2RlLnNob3VsZEdlbmVyYXRlKCkpCisgICAg
ICAgICAgICBpZiAoIW5vZGUtPnNob3VsZEdlbmVyYXRlKCkpCiAgICAgICAgICAgICAgICAgY29u
dGludWU7Ci0gICAgICAgICAgICBzd2l0Y2ggKG5vZGUub3AoKSkgeworICAgICAgICAgICAgc3dp
dGNoIChub2RlLT5vcCgpKSB7CiAgICAgICAgICAgICBjYXNlIEdldEJ5T2Zmc2V0OgotICAgICAg
ICAgICAgICAgIGlmIChtX2dyYXBoLm1fc3RvcmFnZUFjY2Vzc0RhdGFbbm9kZS5zdG9yYWdlQWNj
ZXNzRGF0YUluZGV4KCldLmlkZW50aWZpZXJOdW1iZXIgPT0gaWRlbnRpZmllck51bWJlcikKLSAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIE5vTm9kZTsKKyAgICAgICAgICAgICAgICBpZiAobV9n
cmFwaC5tX3N0b3JhZ2VBY2Nlc3NEYXRhW25vZGUtPnN0b3JhZ2VBY2Nlc3NEYXRhSW5kZXgoKV0u
aWRlbnRpZmllck51bWJlciA9PSBpZGVudGlmaWVyTnVtYmVyKQorICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gMDsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAKICAg
ICAgICAgICAgIGNhc2UgUHV0QnlPZmZzZXQ6Ci0gICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGgu
bV9zdG9yYWdlQWNjZXNzRGF0YVtub2RlLnN0b3JhZ2VBY2Nlc3NEYXRhSW5kZXgoKV0uaWRlbnRp
Zmllck51bWJlciA9PSBpZGVudGlmaWVyTnVtYmVyKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlm
IChub2RlLmNoaWxkMSgpID09IGNoaWxkMSkgLy8gTXVzdCBiZSBzYW1lIHByb3BlcnR5IHN0b3Jh
Z2UuCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW5kZXg7Ci0gICAgICAgICAgICAg
ICAgICAgIHJldHVybiBOb05vZGU7CisgICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGgubV9zdG9y
YWdlQWNjZXNzRGF0YVtub2RlLT5zdG9yYWdlQWNjZXNzRGF0YUluZGV4KCldLmlkZW50aWZpZXJO
dW1iZXIgPT0gaWRlbnRpZmllck51bWJlcikgeworICAgICAgICAgICAgICAgICAgICBpZiAobm9k
ZS0+Y2hpbGQxKCkgPT0gY2hpbGQxKSAvLyBNdXN0IGJlIHNhbWUgcHJvcGVydHkgc3RvcmFnZS4K
KyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBub2RlOworICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gMDsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICAgICAgCkBAIC02ODgsNDUgKzY3Niw0NCBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgICAgICAgICAvLyBjaGFuZ2UuCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICByZXR1cm4gTm9Ob2RlOworICAgICAgICAgICAg
ICAgIHJldHVybiAwOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgZGVmYXVsdDoKLSAg
ICAgICAgICAgICAgICBpZiAobV9ncmFwaC5jbG9iYmVyc1dvcmxkKGluZGV4KSkKLSAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIE5vTm9kZTsKKyAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC5j
bG9iYmVyc1dvcmxkKG5vZGUpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChub2RlLmNh
bkV4aXQoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gTm9Ob2RlOworICAgICAgICAgICAgaWYg
KG5vZGUtPmNhbkV4aXQoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgfQot
ICAgICAgICByZXR1cm4gTm9Ob2RlOworICAgICAgICByZXR1cm4gMDsKICAgICB9CiAgICAgCi0g
ICAgTm9kZUluZGV4IGdldFByb3BlcnR5U3RvcmFnZUxvYWRFbGltaW5hdGlvbihOb2RlSW5kZXgg
Y2hpbGQxKQorICAgIE5vZGUqIGdldFByb3BlcnR5U3RvcmFnZUxvYWRFbGltaW5hdGlvbihOb2Rl
KiBjaGlsZDEpCiAgICAgewogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2luZGV4SW5CbG9j
azsgaS0tOykgewotICAgICAgICAgICAgTm9kZUluZGV4IGluZGV4ID0gbV9jdXJyZW50QmxvY2st
PmF0KGkpOwotICAgICAgICAgICAgaWYgKGluZGV4ID09IGNoaWxkMSkgCisgICAgICAgICAgICBO
b2RlKiBub2RlID0gbV9jdXJyZW50QmxvY2stPmF0KGkpOworICAgICAgICAgICAgaWYgKG5vZGUg
PT0gY2hpbGQxKSAKICAgICAgICAgICAgICAgICBicmVhazsKIAotICAgICAgICAgICAgTm9kZSYg
bm9kZSA9IG1fZ3JhcGhbaW5kZXhdOwotICAgICAgICAgICAgaWYgKCFub2RlLnNob3VsZEdlbmVy
YXRlKCkpCisgICAgICAgICAgICBpZiAoIW5vZGUtPnNob3VsZEdlbmVyYXRlKCkpCiAgICAgICAg
ICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBzd2l0Y2ggKG5vZGUub3AoKSkgeworICAg
ICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CiAgICAgICAgICAgICBjYXNlIEdldEJ1dHRl
cmZseToKLSAgICAgICAgICAgICAgICBpZiAobm9kZS5jaGlsZDEoKSA9PSBjaGlsZDEpCi0gICAg
ICAgICAgICAgICAgICAgIHJldHVybiBpbmRleDsKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+
Y2hpbGQxKCkgPT0gY2hpbGQxKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gbm9kZTsKICAg
ICAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICAgICAgY2FzZSBBbGxvY2F0ZVByb3BlcnR5
U3RvcmFnZToKICAgICAgICAgICAgIGNhc2UgUmVhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZToKICAg
ICAgICAgICAgICAgICAvLyBJZiB3ZSBjYW4gY2hlYXBseSBwcm92ZSB0aGlzIGlzIGEgY2hhbmdl
IHRvIG91ciBvYmplY3QncyBzdG9yYWdlLCB3ZQogICAgICAgICAgICAgICAgIC8vIGNhbiBvcHRp
bWl6ZSBhbmQgdXNlIGl0cyByZXN1bHQuCi0gICAgICAgICAgICAgICAgaWYgKG5vZGUuY2hpbGQx
KCkgPT0gY2hpbGQxKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW5kZXg7CisgICAgICAg
ICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpID09IGNoaWxkMSkKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIG5vZGU7CiAgICAgICAgICAgICAgICAgLy8gT3RoZXJ3aXNlLCB3ZSBjdXJyZW50
bHkgY2FuJ3QgcHJvdmUgdGhhdCB0aGlzIGRvZXNuJ3QgY2hhbmdlIG91ciBvYmplY3QncwogICAg
ICAgICAgICAgICAgIC8vIHN0b3JhZ2UsIHNvIHdlIGNvbnNlcnZhdGl2ZWx5IGFzc3VtZSB0aGF0
IGl0IG1heSBjaGFuZ2UgdGhlIHN0b3JhZ2UKICAgICAgICAgICAgICAgICAvLyBwb2ludGVyIG9m
IGFueSBvYmplY3QsIGluY2x1ZGluZyBvdXJzLgotICAgICAgICAgICAgICAgIHJldHVybiBOb05v
ZGU7CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgICAgICAgCiAgICAgICAg
ICAgICBjYXNlIFB1dEJ5T2Zmc2V0OgogICAgICAgICAgICAgY2FzZSBQdXRTdHJ1Y3R1cmU6CkBA
IC03NDIsMzQgKzcyOSwzMyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICAvLyBjaGFu
Z2UuCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICByZXR1cm4gTm9Ob2RlOworICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAg
ICAgICAgICAgICAgIAogICAgICAgICAgICAgY2FzZSBBcnJheWlmeToKICAgICAgICAgICAgIGNh
c2UgQXJyYXlpZnlUb1N0cnVjdHVyZToKICAgICAgICAgICAgICAgICAvLyBXZSBjb3VsZCBjaGVj
ayBpZiB0aGUgYXJyYXlpZmljYXRpb24gY291bGQgYWZmZWN0IG91ciBidXR0ZXJmbHkuCiAgICAg
ICAgICAgICAgICAgLy8gQnV0IHRoYXQgc2VlbXMgbGlrZSBpdCB3b3VsZCB0YWtlIEVmZm9ydC4K
LSAgICAgICAgICAgICAgICByZXR1cm4gTm9Ob2RlOworICAgICAgICAgICAgICAgIHJldHVybiAw
OwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAg
ICBpZiAobV9ncmFwaC5jbG9iYmVyc1dvcmxkKGluZGV4KSkKLSAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIE5vTm9kZTsKKyAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC5jbG9iYmVyc1dvcmxk
KG5vZGUpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICByZXR1cm4gTm9Ob2RlOwor
ICAgICAgICByZXR1cm4gMDsKICAgICB9CiAgICAgCi0gICAgYm9vbCBjaGVja0FycmF5RWxpbWlu
YXRpb24oTm9kZUluZGV4IGNoaWxkMSwgQXJyYXlNb2RlIGFycmF5TW9kZSkKKyAgICBib29sIGNo
ZWNrQXJyYXlFbGltaW5hdGlvbihOb2RlKiBjaGlsZDEsIEFycmF5TW9kZSBhcnJheU1vZGUpCiAg
ICAgewogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2luZGV4SW5CbG9jazsgaS0tOykgewot
ICAgICAgICAgICAgTm9kZUluZGV4IGluZGV4ID0gbV9jdXJyZW50QmxvY2stPmF0KGkpOwotICAg
ICAgICAgICAgaWYgKGluZGV4ID09IGNoaWxkMSkgCisgICAgICAgICAgICBOb2RlKiBub2RlID0g
bV9jdXJyZW50QmxvY2stPmF0KGkpOworICAgICAgICAgICAgaWYgKG5vZGUgPT0gY2hpbGQxKSAK
ICAgICAgICAgICAgICAgICBicmVhazsKIAotICAgICAgICAgICAgTm9kZSYgbm9kZSA9IG1fZ3Jh
cGhbaW5kZXhdOwotICAgICAgICAgICAgaWYgKCFub2RlLnNob3VsZEdlbmVyYXRlKCkpCisgICAg
ICAgICAgICBpZiAoIW5vZGUtPnNob3VsZEdlbmVyYXRlKCkpCiAgICAgICAgICAgICAgICAgY29u
dGludWU7Ci0gICAgICAgICAgICBzd2l0Y2ggKG5vZGUub3AoKSkgeworICAgICAgICAgICAgc3dp
dGNoIChub2RlLT5vcCgpKSB7CiAgICAgICAgICAgICBjYXNlIFB1dEJ5T2Zmc2V0OgogICAgICAg
ICAgICAgY2FzZSBQdXRTdHJ1Y3R1cmU6CiAgICAgICAgICAgICAgICAgLy8gQ2hhbmdpbmcgdGhl
IHN0cnVjdHVyZSBvciBwdXR0aW5nIHRvIHRoZSBzdG9yYWdlIGNhbm5vdApAQCAtNzc3LDcgKzc2
Myw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAg
CiAgICAgICAgICAgICBjYXNlIENoZWNrQXJyYXk6Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGUu
Y2hpbGQxKCkgPT0gY2hpbGQxICYmIG5vZGUuYXJyYXlNb2RlKCkgPT0gYXJyYXlNb2RlKQorICAg
ICAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKSA9PSBjaGlsZDEgJiYgbm9kZS0+YXJyYXlN
b2RlKCkgPT0gYXJyYXlNb2RlKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAKQEAgLTc4OCw3ICs3NzQsNyBA
QCBwcml2YXRlOgogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgICAg
ICAKICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGguY2xv
YmJlcnNXb3JsZChpbmRleCkpCisgICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGguY2xvYmJlcnNX
b3JsZChub2RlKSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQpAQCAtNzk2LDIwICs3ODIsMTkgQEAgcHJpdmF0
ZToKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIE5vZGVJbmRleCBnZXRJbmRl
eGVkUHJvcGVydHlTdG9yYWdlTG9hZEVsaW1pbmF0aW9uKE5vZGVJbmRleCBjaGlsZDEsIEFycmF5
TW9kZSBhcnJheU1vZGUpCisgICAgTm9kZSogZ2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZUxvYWRF
bGltaW5hdGlvbihOb2RlKiBjaGlsZDEsIEFycmF5TW9kZSBhcnJheU1vZGUpCiAgICAgewogICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2luZGV4SW5CbG9jazsgaS0tOykgewotICAgICAgICAg
ICAgTm9kZUluZGV4IGluZGV4ID0gbV9jdXJyZW50QmxvY2stPmF0KGkpOwotICAgICAgICAgICAg
aWYgKGluZGV4ID09IGNoaWxkMSkgCisgICAgICAgICAgICBOb2RlKiBub2RlID0gbV9jdXJyZW50
QmxvY2stPmF0KGkpOworICAgICAgICAgICAgaWYgKG5vZGUgPT0gY2hpbGQxKSAKICAgICAgICAg
ICAgICAgICBicmVhazsKIAotICAgICAgICAgICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhbaW5kZXhd
OwotICAgICAgICAgICAgaWYgKCFub2RlLnNob3VsZEdlbmVyYXRlKCkpCisgICAgICAgICAgICBp
ZiAoIW5vZGUtPnNob3VsZEdlbmVyYXRlKCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7Ci0g
ICAgICAgICAgICBzd2l0Y2ggKG5vZGUub3AoKSkgeworICAgICAgICAgICAgc3dpdGNoIChub2Rl
LT5vcCgpKSB7CiAgICAgICAgICAgICBjYXNlIEdldEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2U6IHsK
LSAgICAgICAgICAgICAgICBpZiAobm9kZS5jaGlsZDEoKSA9PSBjaGlsZDEgJiYgbm9kZS5hcnJh
eU1vZGUoKSA9PSBhcnJheU1vZGUpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBpbmRleDsK
KyAgICAgICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCkgPT0gY2hpbGQxICYmIG5vZGUtPmFy
cmF5TW9kZSgpID09IGFycmF5TW9kZSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGU7
CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAKQEAgLTgyMCw4MSArODA1
LDc5IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAg
CiAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLmNsb2Ji
ZXJzV29ybGQoaW5kZXgpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gTm9Ob2RlOworICAg
ICAgICAgICAgICAgIGlmIChtX2dyYXBoLmNsb2JiZXJzV29ybGQobm9kZSkpCisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
fQogICAgICAgICB9Ci0gICAgICAgIHJldHVybiBOb05vZGU7CisgICAgICAgIHJldHVybiAwOwog
ICAgIH0KICAgICAKLSAgICBOb2RlSW5kZXggZ2V0TXlTY29wZUxvYWRFbGltaW5hdGlvbihJbmxp
bmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSkKKyAgICBOb2RlKiBnZXRNeVNjb3BlTG9hZEVs
aW1pbmF0aW9uKElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lKQogICAgIHsKICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gbV9pbmRleEluQmxvY2s7IGktLTspIHsKLSAgICAgICAgICAg
IE5vZGVJbmRleCBpbmRleCA9IG1fY3VycmVudEJsb2NrLT5hdChpKTsKLSAgICAgICAgICAgIE5v
ZGUmIG5vZGUgPSBtX2dyYXBoW2luZGV4XTsKLSAgICAgICAgICAgIGlmICghbm9kZS5zaG91bGRH
ZW5lcmF0ZSgpKQorICAgICAgICAgICAgTm9kZSogbm9kZSA9IG1fY3VycmVudEJsb2NrLT5hdChp
KTsKKyAgICAgICAgICAgIGlmICghbm9kZS0+c2hvdWxkR2VuZXJhdGUoKSkKICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGlmIChub2RlLmNvZGVPcmlnaW4uaW5saW5lQ2Fs
bEZyYW1lICE9IGlubGluZUNhbGxGcmFtZSkKKyAgICAgICAgICAgIGlmIChub2RlLT5jb2RlT3Jp
Z2luLmlubGluZUNhbGxGcmFtZSAhPSBpbmxpbmVDYWxsRnJhbWUpCiAgICAgICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgICAgICBzd2l0Y2ggKG5vZGUub3AoKSkgeworICAgICAgICAgICAg
c3dpdGNoIChub2RlLT5vcCgpKSB7CiAgICAgICAgICAgICBjYXNlIENyZWF0ZUFjdGl2YXRpb246
CiAgICAgICAgICAgICAgICAgLy8gVGhpcyBtYXkgY2F1c2UgdXMgdG8gcmV0dXJuIGEgZGlmZmVy
ZW50IHNjb3BlLgotICAgICAgICAgICAgICAgIHJldHVybiBOb05vZGU7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIDA7CiAgICAgICAgICAgICBjYXNlIEdldE15U2NvcGU6Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuIGluZGV4OworICAgICAgICAgICAgICAgIHJldHVybiBub2RlOwogICAgICAgICAg
ICAgY2FzZSBTZXRNeVNjb3BlOgotICAgICAgICAgICAgICAgIHJldHVybiBub2RlLmNoaWxkMSgp
LmluZGV4KCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsK
ICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICB9CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIE5vTm9kZTsKKyAgICAgICAgcmV0dXJuIDA7
CiAgICAgfQogICAgIAotICAgIE5vZGVJbmRleCBnZXRMb2NhbExvYWRFbGltaW5hdGlvbihWaXJ0
dWFsUmVnaXN0ZXIgbG9jYWwsIE5vZGVJbmRleCYgcmVsZXZhbnRMb2NhbE9wLCBib29sIGNhcmVB
Ym91dENsb2JiZXJpbmcpCisgICAgTm9kZSogZ2V0TG9jYWxMb2FkRWxpbWluYXRpb24oVmlydHVh
bFJlZ2lzdGVyIGxvY2FsLCBOb2RlKiYgcmVsZXZhbnRMb2NhbE9wLCBib29sIGNhcmVBYm91dENs
b2JiZXJpbmcpCiAgICAgewotICAgICAgICByZWxldmFudExvY2FsT3AgPSBOb05vZGU7CisgICAg
ICAgIHJlbGV2YW50TG9jYWxPcCA9IDA7CiAgICAgICAgIAogICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSBtX2luZGV4SW5CbG9jazsgaS0tOykgewotICAgICAgICAgICAgTm9kZUluZGV4IGluZGV4
ID0gbV9jdXJyZW50QmxvY2stPmF0KGkpOwotICAgICAgICAgICAgTm9kZSYgbm9kZSA9IG1fZ3Jh
cGhbaW5kZXhdOwotICAgICAgICAgICAgaWYgKCFub2RlLnNob3VsZEdlbmVyYXRlKCkpCisgICAg
ICAgICAgICBOb2RlKiBub2RlID0gbV9jdXJyZW50QmxvY2stPmF0KGkpOworICAgICAgICAgICAg
aWYgKCFub2RlLT5zaG91bGRHZW5lcmF0ZSgpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwot
ICAgICAgICAgICAgc3dpdGNoIChub2RlLm9wKCkpIHsKKyAgICAgICAgICAgIHN3aXRjaCAobm9k
ZS0+b3AoKSkgewogICAgICAgICAgICAgY2FzZSBHZXRMb2NhbDoKLSAgICAgICAgICAgICAgICBp
ZiAobm9kZS5sb2NhbCgpID09IGxvY2FsKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJlbGV2YW50
TG9jYWxPcCA9IGluZGV4OwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW5kZXg7CisgICAg
ICAgICAgICAgICAgaWYgKG5vZGUtPmxvY2FsKCkgPT0gbG9jYWwpIHsKKyAgICAgICAgICAgICAg
ICAgICAgcmVsZXZhbnRMb2NhbE9wID0gbm9kZTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IG5vZGU7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgICAgIAogICAgICAgICAgICAgY2FzZSBHZXRMb2NhbFVubGlua2VkOgotICAgICAgICAg
ICAgICAgIGlmIChub2RlLnVubGlua2VkTG9jYWwoKSA9PSBsb2NhbCkgewotICAgICAgICAgICAg
ICAgICAgICByZWxldmFudExvY2FsT3AgPSBpbmRleDsKLSAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGluZGV4OworICAgICAgICAgICAgICAgIGlmIChub2RlLT51bmxpbmtlZExvY2FsKCkgPT0g
bG9jYWwpIHsKKyAgICAgICAgICAgICAgICAgICAgcmVsZXZhbnRMb2NhbE9wID0gbm9kZTsKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGU7CiAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgY2FzZSBTZXRM
b2NhbDoKLSAgICAgICAgICAgICAgICBpZiAobm9kZS5sb2NhbCgpID09IGxvY2FsKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIHJlbGV2YW50TG9jYWxPcCA9IGluZGV4OwotICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gbm9kZS5jaGlsZDEoKS5pbmRleCgpOworICAgICAgICAgICAgICAgIGlmIChu
b2RlLT5sb2NhbCgpID09IGxvY2FsKSB7CisgICAgICAgICAgICAgICAgICAgIHJlbGV2YW50TG9j
YWxPcCA9IG5vZGU7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBub2RlLT5jaGlsZDEoKS5u
b2RlKCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgICAgIAogICAgICAgICAgICAgY2FzZSBQdXRTY29wZWRWYXI6Ci0gICAgICAgICAgICAg
ICAgaWYgKHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4obm9kZS52YXJOdW1iZXIoKSkgPT0g
bG9jYWwpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBOb05vZGU7CisgICAgICAgICAgICAg
ICAgaWYgKHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4obm9kZS0+dmFyTnVtYmVyKCkpID09
IGxvY2FsKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAg
ICAgICAgaWYgKGNhcmVBYm91dENsb2JiZXJpbmcgJiYgbV9ncmFwaC5jbG9iYmVyc1dvcmxkKGlu
ZGV4KSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5vTm9kZTsKKyAgICAgICAgICAgICAg
ICBpZiAoY2FyZUFib3V0Q2xvYmJlcmluZyAmJiBtX2dyYXBoLmNsb2JiZXJzV29ybGQobm9kZSkp
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIHJldHVybiBOb05vZGU7CisgICAgICAg
IHJldHVybiAwOwogICAgIH0KICAgICAKICAgICBzdHJ1Y3QgU2V0TG9jYWxTdG9yZUVsaW1pbmF0
aW9uUmVzdWx0IHsKQEAgLTkxMCw1MSArODkzLDUwIEBAIHByaXZhdGU6CiAgICAgICAgIGJvb2wg
bWF5Q2xvYmJlcldvcmxkOwogICAgIH07CiAgICAgU2V0TG9jYWxTdG9yZUVsaW1pbmF0aW9uUmVz
dWx0IHNldExvY2FsU3RvcmVFbGltaW5hdGlvbigKLSAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGxv
Y2FsLCBOb2RlSW5kZXggZXhwZWN0ZWROb2RlSW5kZXgpCisgICAgICAgIFZpcnR1YWxSZWdpc3Rl
ciBsb2NhbCwgTm9kZSogZXhwZWN0ZWROb2RlSW5kZXgpCiAgICAgewogICAgICAgICBTZXRMb2Nh
bFN0b3JlRWxpbWluYXRpb25SZXN1bHQgcmVzdWx0OwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSBtX2luZGV4SW5CbG9jazsgaS0tOykgewotICAgICAgICAgICAgTm9kZUluZGV4IGluZGV4ID0g
bV9jdXJyZW50QmxvY2stPmF0KGkpOwotICAgICAgICAgICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhb
aW5kZXhdOwotICAgICAgICAgICAgaWYgKCFub2RlLnNob3VsZEdlbmVyYXRlKCkpCisgICAgICAg
ICAgICBOb2RlKiBub2RlID0gbV9jdXJyZW50QmxvY2stPmF0KGkpOworICAgICAgICAgICAgaWYg
KCFub2RlLT5zaG91bGRHZW5lcmF0ZSgpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAg
ICAgICAgICAgc3dpdGNoIChub2RlLm9wKCkpIHsKKyAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+
b3AoKSkgewogICAgICAgICAgICAgY2FzZSBHZXRMb2NhbDoKICAgICAgICAgICAgIGNhc2UgRmx1
c2g6Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGUubG9jYWwoKSA9PSBsb2NhbCkKKyAgICAgICAg
ICAgICAgICBpZiAobm9kZS0+bG9jYWwoKSA9PSBsb2NhbCkKICAgICAgICAgICAgICAgICAgICAg
cmVzdWx0Lm1heUJlQWNjZXNzZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgICAgIAogICAgICAgICAgICAgY2FzZSBHZXRMb2NhbFVubGlua2VkOgotICAgICAg
ICAgICAgICAgIGlmIChub2RlLnVubGlua2VkTG9jYWwoKSA9PSBsb2NhbCkKKyAgICAgICAgICAg
ICAgICBpZiAobm9kZS0+dW5saW5rZWRMb2NhbCgpID09IGxvY2FsKQogICAgICAgICAgICAgICAg
ICAgICByZXN1bHQubWF5QmVBY2Nlc3NlZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBjYXNlIFNldExvY2FsOiB7Ci0gICAgICAg
ICAgICAgICAgaWYgKG5vZGUubG9jYWwoKSAhPSBsb2NhbCkKKyAgICAgICAgICAgICAgICBpZiAo
bm9kZS0+bG9jYWwoKSAhPSBsb2NhbCkKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICAgICAgaWYgKGluZGV4ICE9IGV4cGVjdGVkTm9kZUluZGV4KQogICAgICAgICAgICAg
ICAgICAgICByZXN1bHQubWF5QmVBY2Nlc3NlZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgaWYg
KG1fZ3JhcGhbaW5kZXhdLnJlZkNvdW50KCkgPiAxKQorICAgICAgICAgICAgICAgIGlmIChub2Rl
LT5yZWZDb3VudCgpID4gMSkKICAgICAgICAgICAgICAgICAgICAgcmVzdWx0Lm1heUJlQWNjZXNz
ZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBjYXNlIEdldFNjb3BlZFZhcjoKLSAgICAg
ICAgICAgICAgICBpZiAoc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihub2RlLnZhck51bWJl
cigpKSA9PSBsb2NhbCkKKyAgICAgICAgICAgICAgICBpZiAoc3RhdGljX2Nhc3Q8VmlydHVhbFJl
Z2lzdGVyPihub2RlLT52YXJOdW1iZXIoKSkgPT0gbG9jYWwpCiAgICAgICAgICAgICAgICAgICAg
IHJlc3VsdC5tYXlCZUFjY2Vzc2VkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgICAgICAKICAgICAgICAgICAgIGNhc2UgR2V0TXlTY29wZToKICAgICAgICAgICAg
IGNhc2UgU2tpcFRvcFNjb3BlOgotICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLnVuY2hlY2tl
ZEFjdGl2YXRpb25SZWdpc3RlckZvcihub2RlLmNvZGVPcmlnaW4pID09IGxvY2FsKQorICAgICAg
ICAgICAgICAgIGlmIChtX2dyYXBoLnVuY2hlY2tlZEFjdGl2YXRpb25SZWdpc3RlckZvcihub2Rl
LT5jb2RlT3JpZ2luKSA9PSBsb2NhbCkKICAgICAgICAgICAgICAgICAgICAgcmVzdWx0Lm1heUJl
QWNjZXNzZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAg
IAogICAgICAgICAgICAgY2FzZSBDaGVja0FyZ3VtZW50c05vdENyZWF0ZWQ6CiAgICAgICAgICAg
ICBjYXNlIEdldE15QXJndW1lbnRzTGVuZ3RoOgogICAgICAgICAgICAgY2FzZSBHZXRNeUFyZ3Vt
ZW50c0xlbmd0aFNhZmU6Ci0gICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGgudW5jaGVja2VkQXJn
dW1lbnRzUmVnaXN0ZXJGb3Iobm9kZS5jb2RlT3JpZ2luKSA9PSBsb2NhbCkKKyAgICAgICAgICAg
ICAgICBpZiAobV9ncmFwaC51bmNoZWNrZWRBcmd1bWVudHNSZWdpc3RlckZvcihub2RlLT5jb2Rl
T3JpZ2luKSA9PSBsb2NhbCkKICAgICAgICAgICAgICAgICAgICAgcmVzdWx0Lm1heUJlQWNjZXNz
ZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIApAQCAt
OTY1LDcgKzk0Nyw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBj
YXNlIEdldEJ5VmFsOgogICAgICAgICAgICAgICAgIC8vIElmIHRoaXMgaXMgYWNjZXNzaW5nIGFy
Z3VtZW50cyB0aGVuIGl0J3MgcG90ZW50aWFsbHkgYWNjZXNzaW5nIGxvY2Fscy4KLSAgICAgICAg
ICAgICAgICBpZiAobV9ncmFwaFtub2RlLmNoaWxkMSgpXS5zaG91bGRTcGVjdWxhdGVBcmd1bWVu
dHMoKSkKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0
ZUFyZ3VtZW50cygpKQogICAgICAgICAgICAgICAgICAgICByZXN1bHQubWF5QmVBY2Nlc3NlZCA9
IHRydWU7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgCkBAIC05ODIs
OCArOTY0LDggQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXN1bHQubWF5RXhpdCB8PSBu
b2RlLmNhbkV4aXQoKTsKLSAgICAgICAgICAgIHJlc3VsdC5tYXlDbG9iYmVyV29ybGQgfD0gbV9n
cmFwaC5jbG9iYmVyc1dvcmxkKGluZGV4KTsKKyAgICAgICAgICAgIHJlc3VsdC5tYXlFeGl0IHw9
IG5vZGUtPmNhbkV4aXQoKTsKKyAgICAgICAgICAgIHJlc3VsdC5tYXlDbG9iYmVyV29ybGQgfD0g
bV9ncmFwaC5jbG9iYmVyc1dvcmxkKG5vZGUpOwogICAgICAgICB9CiAgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwogICAgICAgICAvLyBCZSBzYWZlIGluIHJlbGVhc2UgbW9kZS4KQEAgLTk5
OCw2MiArOTgwLDYxIEBAIHByaXZhdGU6CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIAog
ICAgICAgICAvLyBDaGVjayBpZiB0aGVyZSBpcyBhbnkgcmVwbGFjZW1lbnQuCi0gICAgICAgIE5v
ZGVJbmRleCByZXBsYWNlbWVudCA9IG1fZ3JhcGhbY2hpbGQuaW5kZXgoKV0ucmVwbGFjZW1lbnQ7
Ci0gICAgICAgIGlmIChyZXBsYWNlbWVudCA9PSBOb05vZGUpCisgICAgICAgIE5vZGUqIHJlcGxh
Y2VtZW50ID0gY2hpbGQtPnJlcGxhY2VtZW50OworICAgICAgICBpZiAoIXJlcGxhY2VtZW50KQog
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAKLSAgICAgICAgY2hpbGQuc2V0SW5kZXgocmVw
bGFjZW1lbnQpOworICAgICAgICBjaGlsZC5zZXROb2RlKHJlcGxhY2VtZW50KTsKICAgICAgICAg
CiAgICAgICAgIC8vIFRoZXJlIGlzIGRlZmluaXRlbHkgYSByZXBsYWNlbWVudC4gQXNzZXJ0IHRo
YXQgdGhlIHJlcGxhY2VtZW50IGRvZXMgbm90CiAgICAgICAgIC8vIGhhdmUgYSByZXBsYWNlbWVu
dC4KLSAgICAgICAgQVNTRVJUKG1fZ3JhcGhbY2hpbGQuaW5kZXgoKV0ucmVwbGFjZW1lbnQgPT0g
Tm9Ob2RlKTsKKyAgICAgICAgQVNTRVJUKCFjaGlsZC0+cmVwbGFjZW1lbnQpOwogICAgICAgICAK
ICAgICAgICAgaWYgKGFkZFJlZikKICAgICAgICAgICAgIG1fZ3JhcGgucmVmKGNoaWxkKTsKICAg
ICB9CiAgICAgCi0gICAgdm9pZCBlbGltaW5hdGVJcnJlbGV2YW50UGhhbnRvbUNoaWxkcmVuKE5v
ZGUmIG5vZGUpCisgICAgdm9pZCBlbGltaW5hdGVJcnJlbGV2YW50UGhhbnRvbUNoaWxkcmVuKE5v
ZGUqIG5vZGUpCiAgICAgewotICAgICAgICBBU1NFUlQobm9kZS5vcCgpID09IFBoYW50b20pOwor
ICAgICAgICBBU1NFUlQobm9kZS0+b3AoKSA9PSBQaGFudG9tKTsKICAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IEFkamFjZW5jeUxpc3Q6OlNpemU7ICsraSkgewotICAgICAgICAgICAg
RWRnZSBlZGdlID0gbm9kZS5jaGlsZHJlbi5jaGlsZChpKTsKKyAgICAgICAgICAgIEVkZ2UgZWRn
ZSA9IG5vZGUtPmNoaWxkcmVuLmNoaWxkKGkpOwogICAgICAgICAgICAgaWYgKCFlZGdlKQogICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgaWYgKG1fZ3JhcGhbZWRnZV0uZmxh
Z3MoKSAmIE5vZGVSZWxldmFudFRvT1NSKQorICAgICAgICAgICAgaWYgKGVkZ2UtPmZsYWdzKCkg
JiBOb2RlUmVsZXZhbnRUb09TUikKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAg
ICAgIAogI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKLSAgICAgICAg
ICAgIGRhdGFMb2coIiAgIEVsaW1pbmF0aW5nIGVkZ2UgQCIsIG1fY29tcGlsZUluZGV4LCAiIC0+
IEAiLCBlZGdlLmluZGV4KCkpOworICAgICAgICAgICAgZGF0YUxvZygiICAgRWxpbWluYXRpbmcg
ZWRnZSBAIiwgbV9jdXJyZW50Tm9kZS0+aW5kZXgoKSwgIiAtPiBAIiwgZWRnZS0+aW5kZXgoKSk7
CiAjZW5kaWYKICAgICAgICAgICAgIG1fZ3JhcGguZGVyZWYoZWRnZSk7Ci0gICAgICAgICAgICBu
b2RlLmNoaWxkcmVuLnJlbW92ZUVkZ2VGcm9tQmFnKGktLSk7CisgICAgICAgICAgICBub2RlLT5j
aGlsZHJlbi5yZW1vdmVFZGdlRnJvbUJhZyhpLS0pOwogICAgICAgICAgICAgbV9jaGFuZ2VkID0g
dHJ1ZTsKICAgICAgICAgfQogICAgIH0KICAgICAKICAgICBlbnVtIFByZWRpY3Rpb25IYW5kbGlu
Z01vZGUgeyBSZXF1aXJlU2FtZVByZWRpY3Rpb24sIEFsbG93UHJlZGljdGlvbk1pc21hdGNoIH07
Ci0gICAgYm9vbCBzZXRSZXBsYWNlbWVudChOb2RlSW5kZXggcmVwbGFjZW1lbnQsIFByZWRpY3Rp
b25IYW5kbGluZ01vZGUgcHJlZGljdGlvbkhhbmRsaW5nTW9kZSA9IFJlcXVpcmVTYW1lUHJlZGlj
dGlvbikKKyAgICBib29sIHNldFJlcGxhY2VtZW50KE5vZGUqIHJlcGxhY2VtZW50LCBQcmVkaWN0
aW9uSGFuZGxpbmdNb2RlIHByZWRpY3Rpb25IYW5kbGluZ01vZGUgPSBSZXF1aXJlU2FtZVByZWRp
Y3Rpb24pCiAgICAgewotICAgICAgICBpZiAocmVwbGFjZW1lbnQgPT0gTm9Ob2RlKQorICAgICAg
ICBpZiAoIXJlcGxhY2VtZW50KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAK
ICAgICAgICAgLy8gQmUgc2FmZS4gRG9uJ3QgdHJ5IHRvIHBlcmZvcm0gcmVwbGFjZW1lbnRzIGlm
IHRoZSBwcmVkaWN0aW9ucyBkb24ndAogICAgICAgICAvLyBhZ3JlZS4KICAgICAgICAgaWYgKHBy
ZWRpY3Rpb25IYW5kbGluZ01vZGUgPT0gUmVxdWlyZVNhbWVQcmVkaWN0aW9uCi0gICAgICAgICAg
ICAmJiBtX2dyYXBoW21fY29tcGlsZUluZGV4XS5wcmVkaWN0aW9uKCkgIT0gbV9ncmFwaFtyZXBs
YWNlbWVudF0ucHJlZGljdGlvbigpKQorICAgICAgICAgICAgJiYgbV9jdXJyZW50Tm9kZS0+cHJl
ZGljdGlvbigpICE9IHJlcGxhY2VtZW50LT5wcmVkaWN0aW9uKCkpCiAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgICAgIAogI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVS
Qk9TRSkKLSAgICAgICAgZGF0YUxvZ0YoIiAgIFJlcGxhY2luZyBAJXUgLT4gQCV1IiwgbV9jb21w
aWxlSW5kZXgsIHJlcGxhY2VtZW50KTsKKyAgICAgICAgZGF0YUxvZ0YoIiAgIFJlcGxhY2luZyBA
JXUgLT4gQCV1IiwgbV9jb21waWxlTm9kZS0+aW5kZXgoKSwgcmVwbGFjZW1lbnQtPmluZGV4KCkp
OwogI2VuZGlmCiAgICAgICAgIAotICAgICAgICBOb2RlJiBub2RlID0gbV9ncmFwaFttX2NvbXBp
bGVJbmRleF07Ci0gICAgICAgIG5vZGUuc2V0T3BBbmREZWZhdWx0RmxhZ3MoUGhhbnRvbSk7Ci0g
ICAgICAgIG5vZGUuc2V0UmVmQ291bnQoMSk7Ci0gICAgICAgIGVsaW1pbmF0ZUlycmVsZXZhbnRQ
aGFudG9tQ2hpbGRyZW4obm9kZSk7CisgICAgICAgIG1fY3VycmVudE5vZGUtPnNldE9wQW5kRGVm
YXVsdEZsYWdzKFBoYW50b20pOworICAgICAgICBtX2N1cnJlbnROb2RlLT5zZXRSZWZDb3VudCgx
KTsKKyAgICAgICAgZWxpbWluYXRlSXJyZWxldmFudFBoYW50b21DaGlsZHJlbihtX2N1cnJlbnRO
b2RlKTsKICAgICAgICAgCiAgICAgICAgIC8vIEF0IHRoaXMgcG9pbnQgd2Ugd2lsbCBlbGltaW5h
dGUgYWxsIHJlZmVyZW5jZXMgdG8gdGhpcyBub2RlLgotICAgICAgICBtX2dyYXBoW21fY29tcGls
ZUluZGV4XS5yZXBsYWNlbWVudCA9IHJlcGxhY2VtZW50OworICAgICAgICBtX2N1cnJlbnROb2Rl
LT5yZXBsYWNlbWVudCA9IHJlcGxhY2VtZW50OwogICAgICAgICAKICAgICAgICAgbV9jaGFuZ2Vk
ID0gdHJ1ZTsKICAgICAgICAgCkBAIC0xMDY2LDUxICsxMDQ3LDQ5IEBAIHByaXZhdGU6CiAgICAg
ICAgIGRhdGFMb2dGKCIgICBFbGltaW5hdGluZyBAJXUiLCBtX2NvbXBpbGVJbmRleCk7CiAjZW5k
aWYKICAgICAgICAgCi0gICAgICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW21fY29tcGlsZUluZGV4
XTsKLSAgICAgICAgQVNTRVJUKG5vZGUucmVmQ291bnQoKSA9PSAxKTsKLSAgICAgICAgQVNTRVJU
KG5vZGUubXVzdEdlbmVyYXRlKCkpOwotICAgICAgICBub2RlLnNldE9wQW5kRGVmYXVsdEZsYWdz
KFBoYW50b20pOwotICAgICAgICBlbGltaW5hdGVJcnJlbGV2YW50UGhhbnRvbUNoaWxkcmVuKG5v
ZGUpOworICAgICAgICBBU1NFUlQobV9jdXJyZW50Tm9kZS0+cmVmQ291bnQoKSA9PSAxKTsKKyAg
ICAgICAgQVNTRVJUKG1fY3VycmVudE5vZGUtPm11c3RHZW5lcmF0ZSgpKTsKKyAgICAgICAgbV9j
dXJyZW50Tm9kZS0+c2V0T3BBbmREZWZhdWx0RmxhZ3MoUGhhbnRvbSk7CisgICAgICAgIGVsaW1p
bmF0ZUlycmVsZXZhbnRQaGFudG9tQ2hpbGRyZW4obV9jdXJyZW50Tm9kZSk7CiAgICAgICAgIAog
ICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOwogICAgIH0KICAgICAKLSAgICB2b2lkIGVsaW1pbmF0
ZShOb2RlSW5kZXggbm9kZUluZGV4LCBOb2RlVHlwZSBwaGFudG9tVHlwZSA9IFBoYW50b20pCisg
ICAgdm9pZCBlbGltaW5hdGUoTm9kZSogbm9kZSwgTm9kZVR5cGUgcGhhbnRvbVR5cGUgPSBQaGFu
dG9tKQogICAgIHsKLSAgICAgICAgaWYgKG5vZGVJbmRleCA9PSBOb05vZGUpCisgICAgICAgIGlm
ICghbm9kZSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgTm9kZSYgbm9kZSA9IG1fZ3Jh
cGhbbm9kZUluZGV4XTsKLSAgICAgICAgaWYgKG5vZGUucmVmQ291bnQoKSAhPSAxKQorICAgICAg
ICBpZiAobm9kZS0+cmVmQ291bnQoKSAhPSAxKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICBBU1NFUlQobm9kZS5tdXN0R2VuZXJhdGUoKSk7Ci0gICAgICAgIG5vZGUuc2V0T3BBbmREZWZh
dWx0RmxhZ3MocGhhbnRvbVR5cGUpOworICAgICAgICBBU1NFUlQobm9kZS0+bXVzdEdlbmVyYXRl
KCkpOworICAgICAgICBub2RlLT5zZXRPcEFuZERlZmF1bHRGbGFncyhwaGFudG9tVHlwZSk7CiAg
ICAgICAgIGlmIChwaGFudG9tVHlwZSA9PSBQaGFudG9tKQogICAgICAgICAgICAgZWxpbWluYXRl
SXJyZWxldmFudFBoYW50b21DaGlsZHJlbihub2RlKTsKICAgICAgICAgCiAgICAgICAgIG1fY2hh
bmdlZCA9IHRydWU7CiAgICAgfQogICAgIAotICAgIHZvaWQgcGVyZm9ybU5vZGVDU0UoTm9kZSYg
bm9kZSkKKyAgICB2b2lkIHBlcmZvcm1Ob2RlQ1NFKE5vZGUqIG5vZGUpCiAgICAgewotICAgICAg
ICBib29sIHNob3VsZEdlbmVyYXRlID0gbm9kZS5zaG91bGRHZW5lcmF0ZSgpOworICAgICAgICBi
b29sIHNob3VsZEdlbmVyYXRlID0gbm9kZS0+c2hvdWxkR2VuZXJhdGUoKTsKIAotICAgICAgICBp
ZiAobm9kZS5mbGFncygpICYgTm9kZUhhc1ZhckFyZ3MpIHsKLSAgICAgICAgICAgIGZvciAodW5z
aWduZWQgY2hpbGRJZHggPSBub2RlLmZpcnN0Q2hpbGQoKTsgY2hpbGRJZHggPCBub2RlLmZpcnN0
Q2hpbGQoKSArIG5vZGUubnVtQ2hpbGRyZW4oKTsgY2hpbGRJZHgrKykKKyAgICAgICAgaWYgKG5v
ZGUtPmZsYWdzKCkgJiBOb2RlSGFzVmFyQXJncykgeworICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBjaGlsZElkeCA9IG5vZGUtPmZpcnN0Q2hpbGQoKTsgY2hpbGRJZHggPCBub2RlLT5maXJzdENo
aWxkKCkgKyBub2RlLT5udW1DaGlsZHJlbigpOyBjaGlsZElkeCsrKQogICAgICAgICAgICAgICAg
IHBlcmZvcm1TdWJzdGl0dXRpb24obV9ncmFwaC5tX3ZhckFyZ0NoaWxkcmVuW2NoaWxkSWR4XSwg
c2hvdWxkR2VuZXJhdGUpOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgcGVyZm9ybVN1
YnN0aXR1dGlvbihub2RlLmNoaWxkcmVuLmNoaWxkMSgpLCBzaG91bGRHZW5lcmF0ZSk7Ci0gICAg
ICAgICAgICBwZXJmb3JtU3Vic3RpdHV0aW9uKG5vZGUuY2hpbGRyZW4uY2hpbGQyKCksIHNob3Vs
ZEdlbmVyYXRlKTsKLSAgICAgICAgICAgIHBlcmZvcm1TdWJzdGl0dXRpb24obm9kZS5jaGlsZHJl
bi5jaGlsZDMoKSwgc2hvdWxkR2VuZXJhdGUpOworICAgICAgICAgICAgcGVyZm9ybVN1YnN0aXR1
dGlvbihub2RlLT5jaGlsZHJlbi5jaGlsZDEoKSwgc2hvdWxkR2VuZXJhdGUpOworICAgICAgICAg
ICAgcGVyZm9ybVN1YnN0aXR1dGlvbihub2RlLT5jaGlsZHJlbi5jaGlsZDIoKSwgc2hvdWxkR2Vu
ZXJhdGUpOworICAgICAgICAgICAgcGVyZm9ybVN1YnN0aXR1dGlvbihub2RlLT5jaGlsZHJlbi5j
aGlsZDMoKSwgc2hvdWxkR2VuZXJhdGUpOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBp
ZiAobm9kZS5vcCgpID09IFNldExvY2FsKQotICAgICAgICAgICAgbV9ncmFwaFtub2RlLmNoaWxk
MSgpXS5tZXJnZUZsYWdzKE5vZGVSZWxldmFudFRvT1NSKTsKKyAgICAgICAgaWYgKG5vZGUtPm9w
KCkgPT0gU2V0TG9jYWwpCisgICAgICAgICAgICBub2RlLT5jaGlsZDEoKS0+bWVyZ2VGbGFncyhO
b2RlUmVsZXZhbnRUb09TUik7CiAgICAgICAgIAogICAgICAgICBpZiAoIXNob3VsZEdlbmVyYXRl
KQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAKICNpZiBERkdfRU5BQkxFKERFQlVHX1BS
T1BBR0FUSU9OX1ZFUkJPU0UpCi0gICAgICAgIGRhdGFMb2dGKCIgICAlcyBAJXU6ICIsIEdyYXBo
OjpvcE5hbWUobV9ncmFwaFttX2NvbXBpbGVJbmRleF0ub3AoKSksIG1fY29tcGlsZUluZGV4KTsK
KyAgICAgICAgZGF0YUxvZ0YoIiAgICVzIEAldTogIiwgR3JhcGg6Om9wTmFtZShub2RlLT5vcCgp
KSwgbm9kZS0+aW5kZXgoKSk7CiAjZW5kaWYKICAgICAgICAgCiAgICAgICAgIC8vIE5PVEU6IHRo
ZXJlIGFyZSBzb21lIG5vZGVzIHRoYXQgd2UgZGVsaWJlcmF0ZWx5IGRvbid0IENTRSBldmVuIHRo
b3VnaCB3ZQpAQCAtMTEyMiwxMCArMTEwMSwxMCBAQCBwcml2YXRlOgogICAgICAgICAvLyBUb1By
aW1pdGl2ZSwgYnV0IHdlIGNvdWxkIGNoYW5nZSB0aGF0IHdpdGggc29tZSBzcGVjdWxhdGlvbnMg
aWYgd2UgcmVhbGx5CiAgICAgICAgIC8vIG5lZWRlZCB0by4KICAgICAgICAgCi0gICAgICAgIHN3
aXRjaCAobm9kZS5vcCgpKSB7CisgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewogICAgICAg
ICAKICAgICAgICAgY2FzZSBJZGVudGl0eToKLSAgICAgICAgICAgIHNldFJlcGxhY2VtZW50KG5v
ZGUuY2hpbGQxKCkuaW5kZXgoKSk7CisgICAgICAgICAgICBzZXRSZXBsYWNlbWVudChub2RlLT5j
aGlsZDEoKS5ub2RlKCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICAg
ICAgLy8gSGFuZGxlIHRoZSBwdXJlIG5vZGVzLiBUaGVzZSBub2RlcyBuZXZlciBoYXZlIGFueSBz
aWRlLWVmZmVjdHMuCkBAIC0xMTY1LDQxICsxMTQ0LDQxIEBAIHByaXZhdGU6CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgIAogICAgICAgICBjYXNlIEdldENhbGxlZToKLSAgICAgICAg
ICAgIHNldFJlcGxhY2VtZW50KGdldENhbGxlZUxvYWRFbGltaW5hdGlvbihub2RlLmNvZGVPcmln
aW4uaW5saW5lQ2FsbEZyYW1lKSk7CisgICAgICAgICAgICBzZXRSZXBsYWNlbWVudChnZXRDYWxs
ZWVMb2FkRWxpbWluYXRpb24obm9kZS0+Y29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpKTsKICAg
ICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2UgR2V0TG9jYWw6IHsKLSAgICAgICAgICAg
IFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhID0gbm9kZS52YXJpYWJsZUFj
Y2Vzc0RhdGEoKTsKKyAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nl
c3NEYXRhID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CiAgICAgICAgICAgICBpZiAoIXZh
cmlhYmxlQWNjZXNzRGF0YS0+aXNDYXB0dXJlZCgpKQogICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgTm9kZUluZGV4IHJlbGV2YW50TG9jYWxPcDsKLSAgICAgICAgICAgIE5vZGVJ
bmRleCBwb3NzaWJsZVJlcGxhY2VtZW50ID0gZ2V0TG9jYWxMb2FkRWxpbWluYXRpb24odmFyaWFi
bGVBY2Nlc3NEYXRhLT5sb2NhbCgpLCByZWxldmFudExvY2FsT3AsIHZhcmlhYmxlQWNjZXNzRGF0
YS0+aXNDYXB0dXJlZCgpKTsKLSAgICAgICAgICAgIGlmIChyZWxldmFudExvY2FsT3AgPT0gTm9O
b2RlKQorICAgICAgICAgICAgTm9kZSogcmVsZXZhbnRMb2NhbE9wOworICAgICAgICAgICAgTm9k
ZSogcG9zc2libGVSZXBsYWNlbWVudCA9IGdldExvY2FsTG9hZEVsaW1pbmF0aW9uKHZhcmlhYmxl
QWNjZXNzRGF0YS0+bG9jYWwoKSwgcmVsZXZhbnRMb2NhbE9wLCB2YXJpYWJsZUFjY2Vzc0RhdGEt
PmlzQ2FwdHVyZWQoKSk7CisgICAgICAgICAgICBpZiAoIXJlbGV2YW50TG9jYWxPcCkKICAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGlmIChtX2dyYXBoW3JlbGV2YW50TG9jYWxP
cF0ub3AoKSAhPSBHZXRMb2NhbFVubGlua2VkCi0gICAgICAgICAgICAgICAgJiYgbV9ncmFwaFty
ZWxldmFudExvY2FsT3BdLnZhcmlhYmxlQWNjZXNzRGF0YSgpICE9IHZhcmlhYmxlQWNjZXNzRGF0
YSkKKyAgICAgICAgICAgIGlmIChyZWxldmFudExvY2FsT3AtPm9wKCkgIT0gR2V0TG9jYWxVbmxp
bmtlZAorICAgICAgICAgICAgICAgICYmIHJlbGV2YW50TG9jYWxPcC0+dmFyaWFibGVBY2Nlc3NE
YXRhKCkgIT0gdmFyaWFibGVBY2Nlc3NEYXRhKQogICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgTm9kZUluZGV4IHBoaUluZGV4ID0gbm9kZS5jaGlsZDEoKS5pbmRleCgpOworICAg
ICAgICAgICAgTm9kZSogcGhpID0gbm9kZS0+Y2hpbGQxKCkubm9kZSgpOwogICAgICAgICAgICAg
aWYgKCFzZXRSZXBsYWNlbWVudChwb3NzaWJsZVJlcGxhY2VtZW50KSkKICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgIC8vIElmIHRoZSBHZXRMb2NhbCB3ZSByZXBsYWNlZCB1c2Vk
IHRvIHJlZmVyIHRvIGEgU2V0TG9jYWwsIHRoZW4gaXQgbm93CiAgICAgICAgICAgICAvLyBzaG91
bGQgcmVmZXIgdG8gdGhlIGNoaWxkIG9mIHRoZSBTZXRMb2NhbCBpbnN0ZWFkLgotICAgICAgICAg
ICAgaWYgKG1fZ3JhcGhbcGhpSW5kZXhdLm9wKCkgPT0gU2V0TG9jYWwpIHsKLSAgICAgICAgICAg
ICAgICBBU1NFUlQobm9kZS5jaGlsZDEoKS5pbmRleCgpID09IHBoaUluZGV4KTsKLSAgICAgICAg
ICAgICAgICBtX2dyYXBoLmNoYW5nZUVkZ2Uobm9kZS5jaGlsZHJlbi5jaGlsZDEoKSwgbV9ncmFw
aFtwaGlJbmRleF0uY2hpbGQxKCkpOworICAgICAgICAgICAgaWYgKHBoaS0+b3AoKSA9PSBTZXRM
b2NhbCkgeworICAgICAgICAgICAgICAgIEFTU0VSVChub2RlLT5jaGlsZDEoKSA9PSBwaGkpOwor
ICAgICAgICAgICAgICAgIG1fZ3JhcGguY2hhbmdlRWRnZShub2RlLT5jaGlsZHJlbi5jaGlsZDEo
KSwgcGhpLT5jaGlsZDEoKSk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBOb2RlSW5kZXgg
b2xkVGFpbEluZGV4ID0gbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKAor
ICAgICAgICAgICAgTm9kZSogb2xkVGFpbCA9IG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRh
aWwub3BlcmFuZCgKICAgICAgICAgICAgICAgICB2YXJpYWJsZUFjY2Vzc0RhdGEtPmxvY2FsKCkp
OwotICAgICAgICAgICAgaWYgKG9sZFRhaWxJbmRleCA9PSBtX2NvbXBpbGVJbmRleCkgeworICAg
ICAgICAgICAgaWYgKG9sZFRhaWwgPT0gbm9kZSkgewogICAgICAgICAgICAgICAgIG1fY3VycmVu
dEJsb2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZCh2YXJpYWJsZUFjY2Vzc0RhdGEtPmxvY2Fs
KCkpID0KICAgICAgICAgICAgICAgICAgICAgcmVsZXZhbnRMb2NhbE9wOwogICAgICAgICAgICAg
ICAgIAogICAgICAgICAgICAgICAgIC8vIE1haW50YWluIGdyYXBoIGludGVncml0eTogc2luY2Ug
d2UncmUgcmVwbGFjaW5nIGEgR2V0TG9jYWwgd2l0aCBhIEdldExvY2FsVW5saW5rZWQsCiAgICAg
ICAgICAgICAgICAgLy8gbWFrZSBzdXJlIHRoYXQgdGhlIEdldExvY2FsVW5saW5rZWQgaXMgbm93
IGxpbmtlZC4KLSAgICAgICAgICAgICAgICBpZiAobV9ncmFwaFtyZWxldmFudExvY2FsT3BdLm9w
KCkgPT0gR2V0TG9jYWxVbmxpbmtlZCkgewotICAgICAgICAgICAgICAgICAgICBtX2dyYXBoW3Jl
bGV2YW50TG9jYWxPcF0uc2V0T3AoR2V0TG9jYWwpOwotICAgICAgICAgICAgICAgICAgICBtX2dy
YXBoW3JlbGV2YW50TG9jYWxPcF0uY2hpbGRyZW4uY2hpbGQxKCkgPSBFZGdlKHBoaUluZGV4KTsK
LSAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5yZWYocGhpSW5kZXgpOworICAgICAgICAgICAg
ICAgIGlmIChyZWxldmFudExvY2FsT3AtPm9wKCkgPT0gR2V0TG9jYWxVbmxpbmtlZCkgeworICAg
ICAgICAgICAgICAgICAgICByZWxldmFudExvY2FsT3AtPnNldE9wKEdldExvY2FsKTsKKyAgICAg
ICAgICAgICAgICAgICAgcmVsZXZhbnRMb2NhbE9wLT5jaGlsZHJlbi5jaGlsZDEoKSA9IEVkZ2Uo
cGhpKTsKKyAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5yZWYocGhpKTsKICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOwpAQCAt
MTIwNywxOSArMTE4NiwxOCBAQCBwcml2YXRlOgogICAgICAgICB9CiAgICAgICAgICAgICAKICAg
ICAgICAgY2FzZSBHZXRMb2NhbFVubGlua2VkOiB7Ci0gICAgICAgICAgICBOb2RlSW5kZXggcmVs
ZXZhbnRMb2NhbE9wSWdub3JlZDsKKyAgICAgICAgICAgIE5vZGUqIHJlbGV2YW50TG9jYWxPcEln
bm9yZWQ7CiAgICAgICAgICAgICBzZXRSZXBsYWNlbWVudChnZXRMb2NhbExvYWRFbGltaW5hdGlv
bihub2RlLnVubGlua2VkTG9jYWwoKSwgcmVsZXZhbnRMb2NhbE9wSWdub3JlZCwgdHJ1ZSkpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBjYXNl
IEZsdXNoOiB7Ci0gICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNz
RGF0YSA9IG5vZGUudmFyaWFibGVBY2Nlc3NEYXRhKCk7CisgICAgICAgICAgICBWYXJpYWJsZUFj
Y2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgp
OwogICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGxvY2FsID0gdmFyaWFibGVBY2Nlc3NEYXRh
LT5sb2NhbCgpOwotICAgICAgICAgICAgTm9kZUluZGV4IHJlcGxhY2VtZW50SW5kZXggPSBub2Rl
LmNoaWxkMSgpLmluZGV4KCk7Ci0gICAgICAgICAgICBOb2RlJiByZXBsYWNlbWVudCA9IG1fZ3Jh
cGhbcmVwbGFjZW1lbnRJbmRleF07Ci0gICAgICAgICAgICBpZiAocmVwbGFjZW1lbnQub3AoKSAh
PSBTZXRMb2NhbCkKKyAgICAgICAgICAgIE5vZGUqIHJlcGxhY2VtZW50ID0gbm9kZS0+Y2hpbGQx
KCkubm9kZSgpOworICAgICAgICAgICAgaWYgKHJlcGxhY2VtZW50LT5vcCgpICE9IFNldExvY2Fs
KQogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgQVNTRVJUKHJlcGxhY2VtZW50
LnZhcmlhYmxlQWNjZXNzRGF0YSgpID09IHZhcmlhYmxlQWNjZXNzRGF0YSk7CisgICAgICAgICAg
ICBBU1NFUlQocmVwbGFjZW1lbnQtPnZhcmlhYmxlQWNjZXNzRGF0YSgpID09IHZhcmlhYmxlQWNj
ZXNzRGF0YSk7CiAgICAgICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGJlIGFibGUgdG8gcmVt
b3ZlIFNldExvY2FscyB0aGF0IGNhbiBleGl0OyB3ZSBqdXN0IG5lZWQKICAgICAgICAgICAgIC8v
IHRvIHJlcGxhY2UgdGhlbSB3aXRoIGFwcHJvcHJpYXRlIHR5cGUgY2hlY2tzLgogICAgICAgICAg
ICAgaWYgKG1fZ3JhcGgubV9maXhwb2ludFN0YXRlID09IEZpeHBvaW50Tm90Q29udmVyZ2VkKSB7
CkBAIC0xMjM5LDI2ICsxMjE3LDI2IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgICAgIGlmIChyZXBsYWNlbWVudC5jYW5FeGl0KCkpCisgICAgICAgICAgICAgICAgaWYg
KHJlcGxhY2VtZW50LT5jYW5FeGl0KCkpCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgfQogICAgICAgICAgICAgU2V0TG9jYWxTdG9yZUVsaW1pbmF0aW9uUmVzdWx0IHJl
c3VsdCA9Ci0gICAgICAgICAgICAgICAgc2V0TG9jYWxTdG9yZUVsaW1pbmF0aW9uKGxvY2FsLCBy
ZXBsYWNlbWVudEluZGV4KTsKKyAgICAgICAgICAgICAgICBzZXRMb2NhbFN0b3JlRWxpbWluYXRp
b24obG9jYWwsIHJlcGxhY2VtZW50KTsKICAgICAgICAgICAgIGlmIChyZXN1bHQubWF5QmVBY2Nl
c3NlZCB8fCByZXN1bHQubWF5Q2xvYmJlcldvcmxkKQogICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgQVNTRVJUKHJlcGxhY2VtZW50Lm9wKCkgPT0gU2V0TG9jYWwpOwotICAgICAg
ICAgICAgQVNTRVJUKHJlcGxhY2VtZW50LnJlZkNvdW50KCkgPT0gMSk7Ci0gICAgICAgICAgICBB
U1NFUlQocmVwbGFjZW1lbnQuc2hvdWxkR2VuZXJhdGUoKSk7CisgICAgICAgICAgICBBU1NFUlQo
cmVwbGFjZW1lbnQtPm9wKCkgPT0gU2V0TG9jYWwpOworICAgICAgICAgICAgQVNTRVJUKHJlcGxh
Y2VtZW50LT5yZWZDb3VudCgpID09IDEpOworICAgICAgICAgICAgQVNTRVJUKHJlcGxhY2VtZW50
LT5zaG91bGRHZW5lcmF0ZSgpKTsKICAgICAgICAgICAgIC8vIEZJWE1FOiBJbnZlc3RpZ2F0ZSB1
c2luZyBtYXlFeGl0IGFzIGEgZnVydGhlciBvcHRpbWl6YXRpb24uCi0gICAgICAgICAgICBub2Rl
LnNldE9wQW5kRGVmYXVsdEZsYWdzKFBoYW50b20pOwotICAgICAgICAgICAgTm9kZUluZGV4IGRh
dGFOb2RlSW5kZXggPSByZXBsYWNlbWVudC5jaGlsZDEoKS5pbmRleCgpOwotICAgICAgICAgICAg
QVNTRVJUKG1fZ3JhcGhbZGF0YU5vZGVJbmRleF0uaGFzUmVzdWx0KCkpOworICAgICAgICAgICAg
bm9kZS0+c2V0T3BBbmREZWZhdWx0RmxhZ3MoUGhhbnRvbSk7CisgICAgICAgICAgICBOb2RlKiBk
YXRhTm9kZSA9IHJlcGxhY2VtZW50LT5jaGlsZDEoKS5ub2RlKCk7CisgICAgICAgICAgICBBU1NF
UlQoZGF0YU5vZGUtPmhhc1Jlc3VsdCgpKTsKICAgICAgICAgICAgIG1fZ3JhcGguY2xlYXJBbmRE
ZXJlZkNoaWxkMShub2RlKTsKLSAgICAgICAgICAgIG5vZGUuY2hpbGRyZW4uY2hpbGQxKCkgPSBF
ZGdlKGRhdGFOb2RlSW5kZXgpOwotICAgICAgICAgICAgbV9ncmFwaC5yZWYoZGF0YU5vZGVJbmRl
eCk7Ci0gICAgICAgICAgICBOb2RlSW5kZXggb2xkVGFpbEluZGV4ID0gbV9jdXJyZW50QmxvY2st
PnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKGxvY2FsKTsKLSAgICAgICAgICAgIGlmIChvbGRUYWls
SW5kZXggPT0gbV9jb21waWxlSW5kZXgpCi0gICAgICAgICAgICAgICAgbV9jdXJyZW50QmxvY2st
PnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKGxvY2FsKSA9IHJlcGxhY2VtZW50SW5kZXg7CisgICAg
ICAgICAgICBub2RlLT5jaGlsZHJlbi5jaGlsZDEoKSA9IEVkZ2UoZGF0YU5vZGUpOworICAgICAg
ICAgICAgbV9ncmFwaC5yZWYoZGF0YU5vZGUpOworICAgICAgICAgICAgTm9kZSogb2xkVGFpbCA9
IG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZChsb2NhbCk7CisgICAgICAg
ICAgICBpZiAob2xkVGFpbCA9PSBub2RlKQorICAgICAgICAgICAgICAgIG1fY3VycmVudEJsb2Nr
LT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZChsb2NhbCkgPSByZXBsYWNlbWVudDsKICAgICAgICAg
ICAgIG1fY2hhbmdlZCA9IHRydWU7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAt
MTI3NSwxMSArMTI1MywxMSBAQCBwcml2YXRlOgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICAKICAgICAgICAgY2FzZSBHZXRBcnJheUxlbmd0aDoKLSAgICAgICAgICAgIHNldFJlcGxh
Y2VtZW50KGdldEFycmF5TGVuZ3RoRWxpbWluYXRpb24obm9kZS5jaGlsZDEoKS5pbmRleCgpKSk7
CisgICAgICAgICAgICBzZXRSZXBsYWNlbWVudChnZXRBcnJheUxlbmd0aEVsaW1pbmF0aW9uKG5v
ZGUtPmNoaWxkMSgpLm5vZGUoKSkpOwogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2Fz
ZSBHZXRNeVNjb3BlOgotICAgICAgICAgICAgc2V0UmVwbGFjZW1lbnQoZ2V0TXlTY29wZUxvYWRF
bGltaW5hdGlvbihub2RlLmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKSk7CisgICAgICAgICAg
ICBzZXRSZXBsYWNlbWVudChnZXRNeVNjb3BlTG9hZEVsaW1pbmF0aW9uKG5vZGUtPmNvZGVPcmln
aW4uaW5saW5lQ2FsbEZyYW1lKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIAog
ICAgICAgICAvLyBIYW5kbGUgbm9kZXMgdGhhdCBhcmUgY29uZGl0aW9uYWxseSBwdXJlOiB0aGVz
ZSBhcmUgcHVyZSwgYW5kIGNhbgpAQCAtMTI5MSw5ICsxMjY5LDkgQEAgcHJpdmF0ZToKICAgICAg
ICAgY2FzZSBDb21wYXJlR3JlYXRlckVxOgogICAgICAgICBjYXNlIENvbXBhcmVFcTogewogICAg
ICAgICAgICAgaWYgKG1fZ3JhcGguaXNQcmVkaWN0ZWROdW1lcmljYWwobm9kZSkpIHsKLSAgICAg
ICAgICAgICAgICBOb2RlSW5kZXggcmVwbGFjZW1lbnRJbmRleCA9IHB1cmVDU0Uobm9kZSk7Ci0g
ICAgICAgICAgICAgICAgaWYgKHJlcGxhY2VtZW50SW5kZXggIT0gTm9Ob2RlICYmIG1fZ3JhcGgu
aXNQcmVkaWN0ZWROdW1lcmljYWwobV9ncmFwaFtyZXBsYWNlbWVudEluZGV4XSkpCi0gICAgICAg
ICAgICAgICAgICAgIHNldFJlcGxhY2VtZW50KHJlcGxhY2VtZW50SW5kZXgpOworICAgICAgICAg
ICAgICAgIE5vZGUqIHJlcGxhY2VtZW50ID0gcHVyZUNTRShub2RlKTsKKyAgICAgICAgICAgICAg
ICBpZiAocmVwbGFjZW1lbnQgJiYgbV9ncmFwaC5pc1ByZWRpY3RlZE51bWVyaWNhbChyZXBsYWNl
bWVudCkpCisgICAgICAgICAgICAgICAgICAgIHNldFJlcGxhY2VtZW50KHJlcGxhY2VtZW50KTsK
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkBAIC0xMzAxLDE2
ICsxMjc5LDE2IEBAIHByaXZhdGU6CiAgICAgICAgIC8vIEZpbmFsbHkgaGFuZGxlIGhlYXAgYWNj
ZXNzZXMuIFRoZXNlIGFyZSBub3QgcXVpdGUgcHVyZSwgYnV0IHdlIGNhbiBzdGlsbAogICAgICAg
ICAvLyBvcHRpbWl6ZSB0aGVtIHByb3ZpZGVkIHRoYXQgc29tZSBzdWJ0bGUgY29uZGl0aW9ucyBh
cmUgbWV0LgogICAgICAgICBjYXNlIEdldEdsb2JhbFZhcjoKLSAgICAgICAgICAgIHNldFJlcGxh
Y2VtZW50KGdsb2JhbFZhckxvYWRFbGltaW5hdGlvbihub2RlLnJlZ2lzdGVyUG9pbnRlcigpKSk7
CisgICAgICAgICAgICBzZXRSZXBsYWNlbWVudChnbG9iYWxWYXJMb2FkRWxpbWluYXRpb24obm9k
ZS0+cmVnaXN0ZXJQb2ludGVyKCkpKTsKICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGNh
c2UgR2V0U2NvcGVkVmFyOiB7Ci0gICAgICAgICAgICBzZXRSZXBsYWNlbWVudChzY29wZWRWYXJM
b2FkRWxpbWluYXRpb24obm9kZS5jaGlsZDEoKS5pbmRleCgpLCBub2RlLnZhck51bWJlcigpKSk7
CisgICAgICAgICAgICBzZXRSZXBsYWNlbWVudChzY29wZWRWYXJMb2FkRWxpbWluYXRpb24obm9k
ZS0+Y2hpbGQxKCkubm9kZSgpLCBub2RlLT52YXJOdW1iZXIoKSkpOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIEdsb2JhbFZhcldhdGNocG9pbnQ6Ci0gICAg
ICAgICAgICBpZiAoZ2xvYmFsVmFyV2F0Y2hwb2ludEVsaW1pbmF0aW9uKG5vZGUucmVnaXN0ZXJQ
b2ludGVyKCkpKQorICAgICAgICAgICAgaWYgKGdsb2JhbFZhcldhdGNocG9pbnRFbGltaW5hdGlv
bihub2RlLT5yZWdpc3RlclBvaW50ZXIoKSkpCiAgICAgICAgICAgICAgICAgZWxpbWluYXRlKCk7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIApAQCAtMTMxOCw4MyArMTI5Niw4MyBA
QCBwcml2YXRlOgogICAgICAgICBjYXNlIFB1dEdsb2JhbFZhckNoZWNrOgogICAgICAgICAgICAg
aWYgKG1fZ3JhcGgubV9maXhwb2ludFN0YXRlID09IEZpeHBvaW50Tm90Q29udmVyZ2VkKQogICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgZWxpbWluYXRlKGdsb2JhbFZhclN0b3Jl
RWxpbWluYXRpb24obm9kZS5yZWdpc3RlclBvaW50ZXIoKSkpOworICAgICAgICAgICAgZWxpbWlu
YXRlKGdsb2JhbFZhclN0b3JlRWxpbWluYXRpb24obm9kZS0+cmVnaXN0ZXJQb2ludGVyKCkpKTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgUHV0U2NvcGVk
VmFyOiB7CiAgICAgICAgICAgICBpZiAobV9ncmFwaC5tX2ZpeHBvaW50U3RhdGUgPT0gRml4cG9p
bnROb3RDb252ZXJnZWQpCiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBlbGlt
aW5hdGUoc2NvcGVkVmFyU3RvcmVFbGltaW5hdGlvbihub2RlLmNoaWxkMSgpLmluZGV4KCksIG5v
ZGUuY2hpbGQyKCkuaW5kZXgoKSwgbm9kZS52YXJOdW1iZXIoKSkpOworICAgICAgICAgICAgZWxp
bWluYXRlKHNjb3BlZFZhclN0b3JlRWxpbWluYXRpb24obm9kZS0+Y2hpbGQxKCkubm9kZSgpLCBu
b2RlLT5jaGlsZDIoKS5ub2RlKCksIG5vZGUtPnZhck51bWJlcigpKSk7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQogCiAgICAgICAgIGNhc2UgR2V0QnlWYWw6CiAgICAgICAgICAgICBp
ZiAobV9ncmFwaC5ieVZhbElzUHVyZShub2RlKSkKLSAgICAgICAgICAgICAgICBzZXRSZXBsYWNl
bWVudChnZXRCeVZhbExvYWRFbGltaW5hdGlvbihub2RlLmNoaWxkMSgpLmluZGV4KCksIG5vZGUu
Y2hpbGQyKCkuaW5kZXgoKSkpOworICAgICAgICAgICAgICAgIHNldFJlcGxhY2VtZW50KGdldEJ5
VmFsTG9hZEVsaW1pbmF0aW9uKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgbm9kZS0+Y2hpbGQyKCku
bm9kZSgpKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgICAgICBjYXNl
IFB1dEJ5VmFsOiB7CiAgICAgICAgICAgICBFZGdlIGNoaWxkMSA9IG1fZ3JhcGgudmFyQXJnQ2hp
bGQobm9kZSwgMCk7CiAgICAgICAgICAgICBFZGdlIGNoaWxkMiA9IG1fZ3JhcGgudmFyQXJnQ2hp
bGQobm9kZSwgMSk7Ci0gICAgICAgICAgICBpZiAobm9kZS5hcnJheU1vZGUoKS5jYW5DU0VTdG9y
YWdlKCkpIHsKLSAgICAgICAgICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4ID0gZ2V0QnlWYWxM
b2FkRWxpbWluYXRpb24oY2hpbGQxLmluZGV4KCksIGNoaWxkMi5pbmRleCgpKTsKLSAgICAgICAg
ICAgICAgICBpZiAobm9kZUluZGV4ID09IE5vTm9kZSkKKyAgICAgICAgICAgIGlmIChub2RlLT5h
cnJheU1vZGUoKS5jYW5DU0VTdG9yYWdlKCkpIHsKKyAgICAgICAgICAgICAgICBOb2RlKiByZXBs
YWNlbWVudCA9IGdldEJ5VmFsTG9hZEVsaW1pbmF0aW9uKGNoaWxkMS5ub2RlKCksIGNoaWxkMi5u
b2RlKCkpOworICAgICAgICAgICAgICAgIGlmICghcmVwbGFjZW1lbnQpCiAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIG5vZGUuc2V0T3AoUHV0QnlWYWxBbGlhcyk7
CisgICAgICAgICAgICAgICAgbm9kZS0+c2V0T3AoUHV0QnlWYWxBbGlhcyk7CiAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAg
IGNhc2UgQ2hlY2tTdHJ1Y3R1cmU6CiAgICAgICAgIGNhc2UgRm9yd2FyZENoZWNrU3RydWN0dXJl
OgotICAgICAgICAgICAgaWYgKGNoZWNrU3RydWN0dXJlRWxpbWluYXRpb24obm9kZS5zdHJ1Y3R1
cmVTZXQoKSwgbm9kZS5jaGlsZDEoKS5pbmRleCgpKSkKKyAgICAgICAgICAgIGlmIChjaGVja1N0
cnVjdHVyZUVsaW1pbmF0aW9uKG5vZGUtPnN0cnVjdHVyZVNldCgpLCBub2RlLT5jaGlsZDEoKS5u
b2RlKCkpKQogICAgICAgICAgICAgICAgIGVsaW1pbmF0ZSgpOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2lu
dDoKICAgICAgICAgY2FzZSBGb3J3YXJkU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnQ6Ci0g
ICAgICAgICAgICBpZiAoc3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnRFbGltaW5hdGlvbihu
b2RlLnN0cnVjdHVyZSgpLCBub2RlLmNoaWxkMSgpLmluZGV4KCkpKQorICAgICAgICAgICAgaWYg
KHN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50RWxpbWluYXRpb24obm9kZS0+c3RydWN0dXJl
KCksIG5vZGUtPmNoaWxkMSgpLm5vZGUoKSkpCiAgICAgICAgICAgICAgICAgZWxpbWluYXRlKCk7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgICAgICBjYXNlIFB1dFN0cnVj
dHVyZToKICAgICAgICAgICAgIGlmIChtX2dyYXBoLm1fZml4cG9pbnRTdGF0ZSA9PSBGaXhwb2lu
dE5vdENvbnZlcmdlZCkKICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGVsaW1p
bmF0ZShwdXRTdHJ1Y3R1cmVTdG9yZUVsaW1pbmF0aW9uKG5vZGUuY2hpbGQxKCkuaW5kZXgoKSks
IFBoYW50b21QdXRTdHJ1Y3R1cmUpOworICAgICAgICAgICAgZWxpbWluYXRlKHB1dFN0cnVjdHVy
ZVN0b3JlRWxpbWluYXRpb24obm9kZS0+Y2hpbGQxKCkubm9kZSgpKSwgUGhhbnRvbVB1dFN0cnVj
dHVyZSk7CiAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICBjYXNlIENoZWNrRnVuY3Rpb246
Ci0gICAgICAgICAgICBpZiAoY2hlY2tGdW5jdGlvbkVsaW1pbmF0aW9uKG5vZGUuZnVuY3Rpb24o
KSwgbm9kZS5jaGlsZDEoKS5pbmRleCgpKSkKKyAgICAgICAgICAgIGlmIChjaGVja0Z1bmN0aW9u
RWxpbWluYXRpb24obm9kZS0+ZnVuY3Rpb24oKSwgbm9kZS0+Y2hpbGQxKCkubm9kZSgpKSkKICAg
ICAgICAgICAgICAgICBlbGltaW5hdGUoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgICAgIAogICAgICAgICBjYXNlIENoZWNrRXhlY3V0YWJsZToKLSAgICAgICAgICAgIGlmIChj
aGVja0V4ZWN1dGFibGVFbGltaW5hdGlvbihub2RlLmV4ZWN1dGFibGUoKSwgbm9kZS5jaGlsZDEo
KS5pbmRleCgpKSkKKyAgICAgICAgICAgIGlmIChjaGVja0V4ZWN1dGFibGVFbGltaW5hdGlvbihu
b2RlLT5leGVjdXRhYmxlKCksIG5vZGUtPmNoaWxkMSgpLm5vZGUoKSkpCiAgICAgICAgICAgICAg
ICAgZWxpbWluYXRlKCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAKICAg
ICAgICAgY2FzZSBDaGVja0FycmF5OgotICAgICAgICAgICAgaWYgKGNoZWNrQXJyYXlFbGltaW5h
dGlvbihub2RlLmNoaWxkMSgpLmluZGV4KCksIG5vZGUuYXJyYXlNb2RlKCkpKQorICAgICAgICAg
ICAgaWYgKGNoZWNrQXJyYXlFbGltaW5hdGlvbihub2RlLT5jaGlsZDEoKS5ub2RlKCksIG5vZGUt
PmFycmF5TW9kZSgpKSkKICAgICAgICAgICAgICAgICBlbGltaW5hdGUoKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgR2V0SW5kZXhlZFByb3BlcnR5U3Rv
cmFnZTogewotICAgICAgICAgICAgc2V0UmVwbGFjZW1lbnQoZ2V0SW5kZXhlZFByb3BlcnR5U3Rv
cmFnZUxvYWRFbGltaW5hdGlvbihub2RlLmNoaWxkMSgpLmluZGV4KCksIG5vZGUuYXJyYXlNb2Rl
KCkpKTsKKyAgICAgICAgICAgIHNldFJlcGxhY2VtZW50KGdldEluZGV4ZWRQcm9wZXJ0eVN0b3Jh
Z2VMb2FkRWxpbWluYXRpb24obm9kZS0+Y2hpbGQxKCkubm9kZSgpLCBub2RlLT5hcnJheU1vZGUo
KSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIEdldEJ1
dHRlcmZseToKLSAgICAgICAgICAgIHNldFJlcGxhY2VtZW50KGdldFByb3BlcnR5U3RvcmFnZUxv
YWRFbGltaW5hdGlvbihub2RlLmNoaWxkMSgpLmluZGV4KCkpKTsKKyAgICAgICAgICAgIHNldFJl
cGxhY2VtZW50KGdldFByb3BlcnR5U3RvcmFnZUxvYWRFbGltaW5hdGlvbihub2RlLT5jaGlsZDEo
KS5ub2RlKCkpKTsKICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2UgR2V0QnlPZmZz
ZXQ6Ci0gICAgICAgICAgICBzZXRSZXBsYWNlbWVudChnZXRCeU9mZnNldExvYWRFbGltaW5hdGlv
bihtX2dyYXBoLm1fc3RvcmFnZUFjY2Vzc0RhdGFbbm9kZS5zdG9yYWdlQWNjZXNzRGF0YUluZGV4
KCldLmlkZW50aWZpZXJOdW1iZXIsIG5vZGUuY2hpbGQxKCkuaW5kZXgoKSkpOworICAgICAgICAg
ICAgc2V0UmVwbGFjZW1lbnQoZ2V0QnlPZmZzZXRMb2FkRWxpbWluYXRpb24obV9ncmFwaC5tX3N0
b3JhZ2VBY2Nlc3NEYXRhW25vZGUtPnN0b3JhZ2VBY2Nlc3NEYXRhSW5kZXgoKV0uaWRlbnRpZmll
ck51bWJlciwgbm9kZS0+Y2hpbGQxKCkubm9kZSgpKSk7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgIAogICAgICAgICBjYXNlIFB1dEJ5T2Zmc2V0OgogICAgICAgICAgICAgaWYgKG1f
Z3JhcGgubV9maXhwb2ludFN0YXRlID09IEZpeHBvaW50Tm90Q29udmVyZ2VkKQogICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgZWxpbWluYXRlKHB1dEJ5T2Zmc2V0U3RvcmVFbGlt
aW5hdGlvbihtX2dyYXBoLm1fc3RvcmFnZUFjY2Vzc0RhdGFbbm9kZS5zdG9yYWdlQWNjZXNzRGF0
YUluZGV4KCldLmlkZW50aWZpZXJOdW1iZXIsIG5vZGUuY2hpbGQxKCkuaW5kZXgoKSkpOworICAg
ICAgICAgICAgZWxpbWluYXRlKHB1dEJ5T2Zmc2V0U3RvcmVFbGltaW5hdGlvbihtX2dyYXBoLm1f
c3RvcmFnZUFjY2Vzc0RhdGFbbm9kZS0+c3RvcmFnZUFjY2Vzc0RhdGFJbmRleCgpXS5pZGVudGlm
aWVyTnVtYmVyLCBub2RlLT5jaGlsZDEoKS5ub2RlKCkpKTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgUGhhbnRvbToKQEAgLTE0MDgsNyArMTM4Niw3IEBA
IHByaXZhdGU6CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAKLSAgICAg
ICAgbV9sYXN0U2Vlbltub2RlLm9wKCldID0gbV9pbmRleEluQmxvY2s7CisgICAgICAgIG1fbGFz
dFNlZW5bbm9kZS0+b3AoKV0gPSBtX2luZGV4SW5CbG9jazsKICNpZiBERkdfRU5BQkxFKERFQlVH
X1BST1BBR0FUSU9OX1ZFUkJPU0UpCiAgICAgICAgIGRhdGFMb2dGKCJcbiIpOwogI2VuZGlmCkBA
IC0xNDI5LDM3ICsxNDA3LDM2IEBAIHByaXZhdGU6CiAgICAgICAgIC8vIHJlcGxhY2VtZW50cyBj
bGVhcmVkLCBzbyB3ZSBkb24ndCBnZXQgY29uZnVzZWQgd2hpbGUgZG9pbmcgc3Vic3RpdHV0aW9u
cyBvbgogICAgICAgICAvLyBHZXRMb2NhbCdzLgogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgYmxvY2stPnBoaXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIEFTU0VSVChtX2dy
YXBoW2Jsb2NrLT5waGlzW2ldXS5mbGFncygpICYgTm9kZVJlbGV2YW50VG9PU1IpOwotICAgICAg
ICAgICAgbV9ncmFwaFtibG9jay0+cGhpc1tpXV0ucmVwbGFjZW1lbnQgPSBOb05vZGU7CisgICAg
ICAgICAgICBBU1NFUlQoYmxvY2stPnBoaXNbaV0tPmZsYWdzKCkgJiBOb2RlUmVsZXZhbnRUb09T
Uik7CisgICAgICAgICAgICBibG9jay0+cGhpc1tpXS0+cmVwbGFjZW1lbnQgPSAwOwogICAgICAg
ICB9CiAgICAgICAgIAogICAgICAgICAvLyBNYWtlIGFsbCBvZiBteSBTZXRMb2NhbCBhbmQgR2V0
TG9jYWwgbm9kZXMgcmVsZXZhbnQgdG8gT1NSLCBhbmQgZG8gc29tZSBvdGhlcgogICAgICAgICAv
LyBuZWNlc3NhcnkgYm9va2tlZXBpbmcuCiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBibG9jay0+c2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIE5vZGVJbmRleCBub2RlSW5kZXgg
PSBibG9jay0+YXQoaSk7Ci0gICAgICAgICAgICBOb2RlJiBub2RlID0gbV9ncmFwaFtub2RlSW5k
ZXhdOworICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5hdChpKTsKICAgICAgICAgICAg
IAotICAgICAgICAgICAgbm9kZS5yZXBsYWNlbWVudCA9IE5vTm9kZTsKKyAgICAgICAgICAgIG5v
ZGUtPnJlcGxhY2VtZW50ID0gMDsKICAgICAgICAgICAgIAotICAgICAgICAgICAgc3dpdGNoIChu
b2RlLm9wKCkpIHsKKyAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewogICAgICAgICAg
ICAgY2FzZSBTZXRMb2NhbDoKICAgICAgICAgICAgIGNhc2UgR2V0TG9jYWw6IC8vIEZJWE1FOiBU
aGUgR2V0TG9jYWwgY2FzZSBpcyBvbmx5IG5lY2Vzc2FyeSB1bnRpbCB3ZSBkbyBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA2NzA3LgotICAgICAgICAgICAgICAgIG5v
ZGUubWVyZ2VGbGFncyhOb2RlUmVsZXZhbnRUb09TUik7CisgICAgICAgICAgICAgICAgbm9kZS0+
bWVyZ2VGbGFncyhOb2RlUmVsZXZhbnRUb09TUik7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIG5vZGUuY2xlYXJGbGFncyhOb2Rl
UmVsZXZhbnRUb09TUik7CisgICAgICAgICAgICAgICAgbm9kZS0+Y2xlYXJGbGFncyhOb2RlUmVs
ZXZhbnRUb09TUik7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAg
ICAgIH0KIAogICAgICAgICBmb3IgKG1faW5kZXhJbkJsb2NrID0gMDsgbV9pbmRleEluQmxvY2sg
PCBibG9jay0+c2l6ZSgpOyArK21faW5kZXhJbkJsb2NrKSB7Ci0gICAgICAgICAgICBtX2NvbXBp
bGVJbmRleCA9IGJsb2NrLT5hdChtX2luZGV4SW5CbG9jayk7Ci0gICAgICAgICAgICBwZXJmb3Jt
Tm9kZUNTRShtX2dyYXBoW21fY29tcGlsZUluZGV4XSk7CisgICAgICAgICAgICBtX2N1cnJlbnRO
b2RlID0gYmxvY2stPmF0KG1faW5kZXhJbkJsb2NrKTsKKyAgICAgICAgICAgIHBlcmZvcm1Ob2Rl
Q1NFKG1fY3VycmVudE5vZGUpOwogICAgICAgICB9CiAgICAgfQogICAgIAogICAgIEJhc2ljQmxv
Y2sqIG1fY3VycmVudEJsb2NrOwotICAgIE5vZGVJbmRleCBtX2NvbXBpbGVJbmRleDsKKyAgICBO
b2RlKiBtX2N1cnJlbnROb2RlOwogICAgIHVuc2lnbmVkIG1faW5kZXhJbkJsb2NrOwogICAgIEZp
eGVkQXJyYXk8dW5zaWduZWQsIExhc3ROb2RlVHlwZT4gbV9sYXN0U2VlbjsKICAgICBib29sIG1f
Y2hhbmdlZDsgLy8gT25seSB0cmFja3MgY2hhbmdlcyB0aGF0IGhhdmUgYSBzdWJzdGFudGl2ZSBl
ZmZlY3Qgb24gb3RoZXIgb3B0aW1pemF0aW9ucy4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQ29tbW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0NvbW1vbi5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0NvbW1vbi5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDEgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIkRGR0NvbW1vbi5oIgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKK25hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKwordm9pZCBOb2RlUG9pbnRlclRyYWl0czo6ZHVt
cChOb2RlKiB2YWx1ZSwgUHJpbnRTdHJlYW0mIG91dCkKK3sKKyAgICBvdXQucHJpbnQodmFsdWUp
OworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZH
X0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb24uaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbi5oCShyZXZpc2lv
biAxNDA1MDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbi5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAx
MiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEs
IDIwMTIsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC04MSwyMiArODEsMTQgQEAKIAogbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBERkcgewogCi0vLyBUeXBlIGZvciBhIHJlZmVyZW5jZSB0byBhbm90aGVyIG5v
ZGUgaW4gdGhlIGdyYXBoLgotdHlwZWRlZiB1aW50MzJfdCBOb2RlSW5kZXg7Ci1zdGF0aWMgY29u
c3QgTm9kZUluZGV4IE5vTm9kZSA9IFVJTlRfTUFYOworY2xhc3MgTm9kZTsKIAogdHlwZWRlZiB1
aW50MzJfdCBCbG9ja0luZGV4Owogc3RhdGljIGNvbnN0IEJsb2NrSW5kZXggTm9CbG9jayA9IFVJ
TlRfTUFYOwogCi1zdHJ1Y3QgTm9kZUluZGV4VHJhaXRzIHsKLSAgICBzdGF0aWMgTm9kZUluZGV4
IGRlZmF1bHRWYWx1ZSgpIHsgcmV0dXJuIE5vTm9kZTsgfQotICAgIHN0YXRpYyB2b2lkIGR1bXAo
Tm9kZUluZGV4IHZhbHVlLCBQcmludFN0cmVhbSYgb3V0KQotICAgIHsKLSAgICAgICAgaWYgKHZh
bHVlID09IE5vTm9kZSkKLSAgICAgICAgICAgIG91dC5wcmludGYoIi0iKTsKLSAgICAgICAgZWxz
ZQotICAgICAgICAgICAgb3V0LnByaW50ZigiQCV1IiwgdmFsdWUpOwotICAgIH0KK3N0cnVjdCBO
b2RlUG9pbnRlclRyYWl0cyB7CisgICAgc3RhdGljIE5vZGUqIGRlZmF1bHRWYWx1ZSgpIHsgcmV0
dXJuIDA7IH0KKyAgICBzdGF0aWMgdm9pZCBkdW1wKE5vZGUqIHZhbHVlLCBQcmludFN0cmVhbSYg
b3V0KTsKIH07CiAKIGVudW0gVXNlS2luZCB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcAkocmV2aXNpb24gMTQw
NTA0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFz
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMiwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTc1LDIyICs3NSwyMSBAQCBwcml2YXRlOgogICAgICAgICBi
b29sIGNoYW5nZWQgPSBmYWxzZTsKICAgICAgICAgbV9zdGF0ZS5iZWdpbkJhc2ljQmxvY2soYmxv
Y2spOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGluZGV4SW5CbG9jayA9IDA7IGluZGV4SW5CbG9j
ayA8IGJsb2NrLT5zaXplKCk7ICsraW5kZXhJbkJsb2NrKSB7Ci0gICAgICAgICAgICBOb2RlSW5k
ZXggbm9kZUluZGV4ID0gYmxvY2stPmF0KGluZGV4SW5CbG9jayk7Ci0gICAgICAgICAgICBOb2Rl
JiBub2RlID0gbV9ncmFwaFtub2RlSW5kZXhdOwotICAgICAgICAgICAgICAgIAogICAgICAgICAg
ICAgaWYgKCFtX3N0YXRlLmlzVmFsaWQoKSkKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgIAorICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5hdChpbmRleEluQmxvY2sp
OworCiAgICAgICAgICAgICBib29sIGVsaW1pbmF0ZWQgPSBmYWxzZTsKICAgICAgICAgICAgICAg
ICAgICAgCi0gICAgICAgICAgICBzd2l0Y2ggKG5vZGUub3AoKSkgeworICAgICAgICAgICAgc3dp
dGNoIChub2RlLT5vcCgpKSB7CiAgICAgICAgICAgICBjYXNlIENoZWNrQXJndW1lbnRzTm90Q3Jl
YXRlZDogewogICAgICAgICAgICAgICAgIGlmICghaXNFbXB0eVNwZWN1bGF0aW9uKAogICAgICAg
ICAgICAgICAgICAgICAgICAgbV9zdGF0ZS52YXJpYWJsZXMoKS5vcGVyYW5kKAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguYXJndW1lbnRzUmVnaXN0ZXJGb3Iobm9kZS5jb2Rl
T3JpZ2luKSkubV90eXBlKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLmFy
Z3VtZW50c1JlZ2lzdGVyRm9yKG5vZGUtPmNvZGVPcmlnaW4pKS5tX3R5cGUpKQogICAgICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICBBU1NFUlQobm9kZS5yZWZDb3VudCgp
ID09IDEpOwotICAgICAgICAgICAgICAgIG5vZGUuc2V0T3BBbmREZWZhdWx0RmxhZ3MoUGhhbnRv
bSk7CisgICAgICAgICAgICAgICAgbm9kZS0+c2V0T3BBbmREZWZhdWx0RmxhZ3MoUGhhbnRvbSk7
CiAgICAgICAgICAgICAgICAgZWxpbWluYXRlZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICB9CkBAIC05OCwyNCArOTcsMjQgQEAgcHJpdmF0ZToKICAgICAgICAg
ICAgIGNhc2UgQ2hlY2tTdHJ1Y3R1cmU6CiAgICAgICAgICAgICBjYXNlIEZvcndhcmRDaGVja1N0
cnVjdHVyZToKICAgICAgICAgICAgIGNhc2UgQXJyYXlpZnlUb1N0cnVjdHVyZTogewotICAgICAg
ICAgICAgICAgIEFic3RyYWN0VmFsdWUmIHZhbHVlID0gbV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hp
bGQxKCkpOworICAgICAgICAgICAgICAgIEFic3RyYWN0VmFsdWUmIHZhbHVlID0gbV9zdGF0ZS5m
b3JOb2RlKG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgICAgICAgICBTdHJ1Y3R1cmVTZXQgc2V0
OwotICAgICAgICAgICAgICAgIGlmIChub2RlLm9wKCkgPT0gQXJyYXlpZnlUb1N0cnVjdHVyZSkK
LSAgICAgICAgICAgICAgICAgICAgc2V0ID0gbm9kZS5zdHJ1Y3R1cmUoKTsKKyAgICAgICAgICAg
ICAgICBpZiAobm9kZS0+b3AoKSA9PSBBcnJheWlmeVRvU3RydWN0dXJlKQorICAgICAgICAgICAg
ICAgICAgICBzZXQgPSBub2RlLT5zdHJ1Y3R1cmUoKTsKICAgICAgICAgICAgICAgICBlbHNlCi0g
ICAgICAgICAgICAgICAgICAgIHNldCA9IG5vZGUuc3RydWN0dXJlU2V0KCk7CisgICAgICAgICAg
ICAgICAgICAgIHNldCA9IG5vZGUtPnN0cnVjdHVyZVNldCgpOwogICAgICAgICAgICAgICAgIGlm
ICghaXNDZWxsU3BlY3VsYXRpb24odmFsdWUubV90eXBlKSkKICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICAgICAgaWYgKHZhbHVlLm1fY3VycmVudEtub3duU3RydWN0dXJl
LmlzU3Vic2V0T2Yoc2V0KSkgewogICAgICAgICAgICAgICAgICAgICBBU1NFUlQobm9kZS5yZWZD
b3VudCgpID09IDEpOwotICAgICAgICAgICAgICAgICAgICBub2RlLnNldE9wQW5kRGVmYXVsdEZs
YWdzKFBoYW50b20pOworICAgICAgICAgICAgICAgICAgICBub2RlLT5zZXRPcEFuZERlZmF1bHRG
bGFncyhQaGFudG9tKTsKICAgICAgICAgICAgICAgICAgICAgZWxpbWluYXRlZCA9IHRydWU7CiAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlJiBzdHJ1Y3R1cmVWYWx1ZSA9IHZhbHVlLm1fZnV0
dXJlUG9zc2libGVTdHJ1Y3R1cmU7CiAgICAgICAgICAgICAgICAgaWYgKHN0cnVjdHVyZVZhbHVl
LmlzU3Vic2V0T2Yoc2V0KQogICAgICAgICAgICAgICAgICAgICAmJiBzdHJ1Y3R1cmVWYWx1ZS5o
YXNTaW5nbGV0b24oKSkgewotICAgICAgICAgICAgICAgICAgICBub2RlLmNvbnZlcnRUb1N0cnVj
dHVyZVRyYW5zaXRpb25XYXRjaHBvaW50KHN0cnVjdHVyZVZhbHVlLnNpbmdsZXRvbigpKTsKKyAg
ICAgICAgICAgICAgICAgICAgbm9kZS0+Y29udmVydFRvU3RydWN0dXJlVHJhbnNpdGlvbldhdGNo
cG9pbnQoc3RydWN0dXJlVmFsdWUuc2luZ2xldG9uKCkpOwogICAgICAgICAgICAgICAgICAgICBj
aGFuZ2VkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgYnJlYWs7
CkBAIC0xMjMsMzcgKzEyMiwzNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIAogICAgICAg
ICAgICAgY2FzZSBDaGVja0FycmF5OgogICAgICAgICAgICAgY2FzZSBBcnJheWlmeTogewotICAg
ICAgICAgICAgICAgIGlmICghbm9kZS5hcnJheU1vZGUoKS5hbHJlYWR5Q2hlY2tlZChtX2dyYXBo
LCBub2RlLCBtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSkpKQorICAgICAgICAgICAgICAg
IGlmICghbm9kZS0+YXJyYXlNb2RlKCkuYWxyZWFkeUNoZWNrZWQobV9ncmFwaCwgbm9kZSwgbV9z
dGF0ZS5mb3JOb2RlKG5vZGUtPmNoaWxkMSgpKSkpCiAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgICAgIEFTU0VSVChub2RlLnJlZkNvdW50KCkgPT0gMSk7Ci0gICAgICAg
ICAgICAgICAgbm9kZS5zZXRPcEFuZERlZmF1bHRGbGFncyhQaGFudG9tKTsKKyAgICAgICAgICAg
ICAgICBBU1NFUlQobm9kZS0+cmVmQ291bnQoKSA9PSAxKTsKKyAgICAgICAgICAgICAgICBub2Rl
LT5zZXRPcEFuZERlZmF1bHRGbGFncyhQaGFudG9tKTsKICAgICAgICAgICAgICAgICBlbGltaW5h
dGVkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICAKICAgICAgICAgICAgIGNhc2UgQ2hlY2tGdW5jdGlvbjogewotICAgICAgICAg
ICAgICAgIGlmIChtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSkudmFsdWUoKSAhPSBub2Rl
LmZ1bmN0aW9uKCkpCisgICAgICAgICAgICAgICAgaWYgKG1fc3RhdGUuZm9yTm9kZShub2RlLT5j
aGlsZDEoKSkudmFsdWUoKSAhPSBub2RlLT5mdW5jdGlvbigpKQogICAgICAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgICAgICBub2RlLnNldE9wQW5kRGVmYXVsdEZsYWdzKFBoYW50
b20pOworICAgICAgICAgICAgICAgIG5vZGUtPnNldE9wQW5kRGVmYXVsdEZsYWdzKFBoYW50b20p
OwogICAgICAgICAgICAgICAgIGVsaW1pbmF0ZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgY2FzZSBD
b252ZXJ0VGhpczogewotICAgICAgICAgICAgICAgIGlmICghaXNPYmplY3RTcGVjdWxhdGlvbiht
X3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSkKKyAgICAgICAgICAgICAgICBp
ZiAoIWlzT2JqZWN0U3BlY3VsYXRpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5t
X3R5cGUpKQogICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBub2Rl
LnNldE9wQW5kRGVmYXVsdEZsYWdzKElkZW50aXR5KTsKKyAgICAgICAgICAgICAgICBub2RlLT5z
ZXRPcEFuZERlZmF1bHRGbGFncyhJZGVudGl0eSk7CiAgICAgICAgICAgICAgICAgY2hhbmdlZCA9
IHRydWU7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICAgCiAgICAgICAgICAgICBjYXNlIEdldEJ5SWQ6CiAgICAgICAgICAgICBjYXNlIEdldEJ5
SWRGbHVzaDogewotICAgICAgICAgICAgICAgIENvZGVPcmlnaW4gY29kZU9yaWdpbiA9IG5vZGUu
Y29kZU9yaWdpbjsKLSAgICAgICAgICAgICAgICBOb2RlSW5kZXggY2hpbGQgPSBub2RlLmNoaWxk
MSgpLmluZGV4KCk7Ci0gICAgICAgICAgICAgICAgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciA9
IG5vZGUuaWRlbnRpZmllck51bWJlcigpOworICAgICAgICAgICAgICAgIENvZGVPcmlnaW4gY29k
ZU9yaWdpbiA9IG5vZGUtPmNvZGVPcmlnaW47CisgICAgICAgICAgICAgICAgTm9kZSogY2hpbGQg
PSBub2RlLT5jaGlsZDEoKS5ub2RlKCk7CisgICAgICAgICAgICAgICAgdW5zaWduZWQgaWRlbnRp
Zmllck51bWJlciA9IG5vZGUtPmlkZW50aWZpZXJOdW1iZXIoKTsKICAgICAgICAgICAgICAgICAK
LSAgICAgICAgICAgICAgICBpZiAoIWlzQ2VsbFNwZWN1bGF0aW9uKG1fZ3JhcGhbY2hpbGRdLnBy
ZWRpY3Rpb24oKSkpCisgICAgICAgICAgICAgICAgaWYgKCFpc0NlbGxTcGVjdWxhdGlvbihjaGls
ZC0+cHJlZGljdGlvbigpKSkKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICAgICAgCiAgICAgICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBtX3N0YXRlLmZv
ck5vZGUoY2hpbGQpLmJlc3RQcm92ZW5TdHJ1Y3R1cmUoKTsKQEAgLTE4Nyw3ICsxODYsNyBAQCBw
cml2YXRlOgogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIE5vZGVJbmRleCBwcm9w
ZXJ0eVN0b3JhZ2VJbmRleDsKICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBtX2dy
YXBoW2NoaWxkXS5yZWYoKTsKKyAgICAgICAgICAgICAgICBjaGlsZC0+cmVmKCk7CiAgICAgICAg
ICAgICAgICAgaWYgKGlzSW5saW5lT2Zmc2V0KHN0YXR1cy5vZmZzZXQoKSkpCiAgICAgICAgICAg
ICAgICAgICAgIHByb3BlcnR5U3RvcmFnZUluZGV4ID0gY2hpbGQ7CiAgICAgICAgICAgICAgICAg
ZWxzZSB7CkBAIC0xOTYsNyArMTk1LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAg
ICAgIGNoaWxkKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCi0gICAgICAg
ICAgICAgICAgbV9ncmFwaFtub2RlSW5kZXhdLmNvbnZlcnRUb0dldEJ5T2Zmc2V0KG1fZ3JhcGgu
bV9zdG9yYWdlQWNjZXNzRGF0YS5zaXplKCksIHByb3BlcnR5U3RvcmFnZUluZGV4KTsKKyAgICAg
ICAgICAgICAgICBub2RlLT5jb252ZXJ0VG9HZXRCeU9mZnNldChtX2dyYXBoLm1fc3RvcmFnZUFj
Y2Vzc0RhdGEuc2l6ZSgpLCBwcm9wZXJ0eVN0b3JhZ2VJbmRleCk7CiAgICAgICAgICAgICAgICAg
CiAgICAgICAgICAgICAgICAgU3RvcmFnZUFjY2Vzc0RhdGEgc3RvcmFnZUFjY2Vzc0RhdGE7CiAg
ICAgICAgICAgICAgICAgc3RvcmFnZUFjY2Vzc0RhdGEub2Zmc2V0ID0gaW5kZXhSZWxhdGl2ZVRv
QmFzZShzdGF0dXMub2Zmc2V0KCkpOwpAQCAtMjA3LDkgKzIwNiw5IEBAIHByaXZhdGU6CiAgICAg
ICAgICAgICAgICAgCiAgICAgICAgICAgICBjYXNlIFB1dEJ5SWQ6CiAgICAgICAgICAgICBjYXNl
IFB1dEJ5SWREaXJlY3Q6IHsKLSAgICAgICAgICAgICAgICBDb2RlT3JpZ2luIGNvZGVPcmlnaW4g
PSBub2RlLmNvZGVPcmlnaW47Ci0gICAgICAgICAgICAgICAgTm9kZUluZGV4IGNoaWxkID0gbm9k
ZS5jaGlsZDEoKS5pbmRleCgpOwotICAgICAgICAgICAgICAgIHVuc2lnbmVkIGlkZW50aWZpZXJO
dW1iZXIgPSBub2RlLmlkZW50aWZpZXJOdW1iZXIoKTsKKyAgICAgICAgICAgICAgICBDb2RlT3Jp
Z2luIGNvZGVPcmlnaW4gPSBub2RlLT5jb2RlT3JpZ2luOworICAgICAgICAgICAgICAgIE5vZGUq
IGNoaWxkID0gbm9kZS0+Y2hpbGQxKCkubm9kZSgpOworICAgICAgICAgICAgICAgIHVuc2lnbmVk
IGlkZW50aWZpZXJOdW1iZXIgPSBub2RlLT5pZGVudGlmaWVyTnVtYmVyKCk7CiAgICAgICAgICAg
ICAgICAgCiAgICAgICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBtX3N0YXRlLmZv
ck5vZGUoY2hpbGQpLmJlc3RQcm92ZW5TdHJ1Y3R1cmUoKTsKICAgICAgICAgICAgICAgICBpZiAo
IXN0cnVjdHVyZSkKQEAgLTIyMiw3ICsyMjEsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAg
ICAgICBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihjb2RlT3JpZ2luKSwKICAgICAgICAgICAgICAg
ICAgICAgc3RydWN0dXJlLAogICAgICAgICAgICAgICAgICAgICBjb2RlQmxvY2soKS0+aWRlbnRp
ZmllcihpZGVudGlmaWVyTnVtYmVyKSwKLSAgICAgICAgICAgICAgICAgICAgbm9kZS5vcCgpID09
IFB1dEJ5SWREaXJlY3QpOworICAgICAgICAgICAgICAgICAgICBub2RlLT5vcCgpID09IFB1dEJ5
SWREaXJlY3QpOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGlmICghc3RhdHVz
LmlzU2ltcGxlUmVwbGFjZSgpICYmICFzdGF0dXMuaXNTaW1wbGVUcmFuc2l0aW9uKCkpCiAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMjQ3LDcgKzI0Niw3IEBAIHByaXZhdGU6CiAgICAg
ICAgICAgICAgICAgICAgIHRyYW5zaXRpb25EYXRhID0gbV9ncmFwaC5hZGRTdHJ1Y3R1cmVUcmFu
c2l0aW9uRGF0YSgKICAgICAgICAgICAgICAgICAgICAgICAgIFN0cnVjdHVyZVRyYW5zaXRpb25E
YXRhKHN0cnVjdHVyZSwgc3RhdHVzLm5ld1N0cnVjdHVyZSgpKSk7CiAgICAgICAgICAgICAgICAg
ICAgIAotICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS5vcCgpID09IFB1dEJ5SWQpIHsKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gUHV0QnlJZCkgewogICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKCFzdHJ1Y3R1cmUtPnN0b3JlZFByb3RvdHlwZSgpLmlzTnVsbCgp
KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkU3RydWN0dXJlVHJhbnNpdGlvbkNo
ZWNrKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlT3JpZ2luLCBpbmRleElu
QmxvY2ssCkBAIC0yNjUsMTggKzI2NCwxOCBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgTm9kZUluZGV4IHByb3Bl
cnR5U3RvcmFnZUluZGV4OworICAgICAgICAgICAgICAgIE5vZGUqIHByb3BlcnR5U3RvcmFnZTsK
ICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBpZiAoaXNJbmxpbmVPZmZzZXQoc3Rh
dHVzLm9mZnNldCgpKSkgewotICAgICAgICAgICAgICAgICAgICBtX2dyYXBoW2NoaWxkXS5yZWYo
KTsgLy8gVGhlIGNoaWxkIHdpbGwgYmUgdXNlZCBhcyB0aGUgcHJvcGVydHkgaW5kZXgsIHNvIHJl
ZiBpdCB0byByZWZsZWN0IHRoZSBkb3VibGUgdXNlLgotICAgICAgICAgICAgICAgICAgICBwcm9w
ZXJ0eVN0b3JhZ2VJbmRleCA9IGNoaWxkOworICAgICAgICAgICAgICAgICAgICBjaGlsZC0+cmVm
KCk7IC8vIFRoZSBjaGlsZCB3aWxsIGJlIHVzZWQgYXMgdGhlIHByb3BlcnR5IGluZGV4LCBzbyBy
ZWYgaXQgdG8gcmVmbGVjdCB0aGUgZG91YmxlIHVzZS4KKyAgICAgICAgICAgICAgICAgICAgcHJv
cGVydHlTdG9yYWdlID0gY2hpbGQ7CiAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdGF0dXMu
aXNTaW1wbGVSZXBsYWNlKCkgfHwgc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpID09IHN0
YXR1cy5uZXdTdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSkgewotICAgICAgICAgICAg
ICAgICAgICBwcm9wZXJ0eVN0b3JhZ2VJbmRleCA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUo
CisgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5U3RvcmFnZSA9IG1faW5zZXJ0aW9uU2V0Lmlu
c2VydE5vZGUoCiAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleEluQmxvY2ssIFJlZkNoaWxk
cmVuLCBSZWZOb2RlLCBTcGVjTm9uZSwgR2V0QnV0dGVyZmx5LCBjb2RlT3JpZ2luLCBjaGlsZCk7
CiAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICghc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0
eSgpKSB7CiAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChzdGF0dXMubmV3U3RydWN0dXJlKCkt
Pm91dE9mTGluZUNhcGFjaXR5KCkpOwogICAgICAgICAgICAgICAgICAgICBBU1NFUlQoIWlzSW5s
aW5lT2Zmc2V0KHN0YXR1cy5vZmZzZXQoKSkpOwotICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0
eVN0b3JhZ2VJbmRleCA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCisgICAgICAgICAgICAg
ICAgICAgIHByb3BlcnR5U3RvcmFnZSA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCiAgICAg
ICAgICAgICAgICAgICAgICAgICBpbmRleEluQmxvY2ssIFJlZkNoaWxkcmVuLCBSZWZOb2RlLCBT
cGVjTm9uZSwgQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UsCiAgICAgICAgICAgICAgICAgICAgICAg
ICBjb2RlT3JpZ2luLCBPcEluZm8odHJhbnNpdGlvbkRhdGEpLCBjaGlsZCk7CiAgICAgICAgICAg
ICAgICAgfSBlbHNlIHsKQEAgLTI4NCw3ICsyODMsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAg
ICAgICAgICBBU1NFUlQoc3RhdHVzLm5ld1N0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgp
ID4gc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpKTsKICAgICAgICAgICAgICAgICAgICAg
QVNTRVJUKCFpc0lubGluZU9mZnNldChzdGF0dXMub2Zmc2V0KCkpKTsKICAgICAgICAgICAgICAg
ICAgICAgCi0gICAgICAgICAgICAgICAgICAgIHByb3BlcnR5U3RvcmFnZUluZGV4ID0gbV9pbnNl
cnRpb25TZXQuaW5zZXJ0Tm9kZSgKKyAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlTdG9yYWdl
ID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKICAgICAgICAgICAgICAgICAgICAgICAgIGlu
ZGV4SW5CbG9jaywgUmVmQ2hpbGRyZW4sIFJlZk5vZGUsIFNwZWNOb25lLCBSZWFsbG9jYXRlUHJv
cGVydHlTdG9yYWdlLAogICAgICAgICAgICAgICAgICAgICAgICAgY29kZU9yaWdpbiwgT3BJbmZv
KHRyYW5zaXRpb25EYXRhKSwKICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkLApAQCAtMjk5
LDcgKzI5OCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgICAgICBPcEluZm8odHJh
bnNpdGlvbkRhdGEpLCBjaGlsZCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
IAotICAgICAgICAgICAgICAgIG1fZ3JhcGhbbm9kZUluZGV4XS5jb252ZXJ0VG9QdXRCeU9mZnNl
dChtX2dyYXBoLm1fc3RvcmFnZUFjY2Vzc0RhdGEuc2l6ZSgpLCBwcm9wZXJ0eVN0b3JhZ2VJbmRl
eCk7CisgICAgICAgICAgICAgICAgbm9kZS0+Y29udmVydFRvUHV0QnlPZmZzZXQobV9ncmFwaC5t
X3N0b3JhZ2VBY2Nlc3NEYXRhLnNpemUoKSwgcHJvcGVydHlTdG9yYWdlSW5kZXgpOwogICAgICAg
ICAgICAgICAgIAogICAgICAgICAgICAgICAgIFN0b3JhZ2VBY2Nlc3NEYXRhIHN0b3JhZ2VBY2Nl
c3NEYXRhOwogICAgICAgICAgICAgICAgIHN0b3JhZ2VBY2Nlc3NEYXRhLm9mZnNldCA9IGluZGV4
UmVsYXRpdmVUb0Jhc2Uoc3RhdHVzLm9mZnNldCgpKTsKQEAgLTMyMCw3MiArMzE5LDcwIEBAIHBy
aXZhdGU6CiAgICAgICAgICAgICBtX3N0YXRlLmV4ZWN1dGUoaW5kZXhJbkJsb2NrKTsKICAgICAg
ICAgICAgIGlmICghbm9kZS5zaG91bGRHZW5lcmF0ZSgpIHx8IG1fc3RhdGUuZGlkQ2xvYmJlcigp
IHx8IG5vZGUuaGFzQ29uc3RhbnQoKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAg
ICAgICAgIEpTVmFsdWUgdmFsdWUgPSBtX3N0YXRlLmZvck5vZGUobm9kZUluZGV4KS52YWx1ZSgp
OworICAgICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IG1fc3RhdGUuZm9yTm9kZShub2RlKS52YWx1
ZSgpOwogICAgICAgICAgICAgaWYgKCF2YWx1ZSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsK
ICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChub2RlLm9wKCkgPT0gR2V0TG9jYWwp
IHsKLSAgICAgICAgICAgICAgICBOb2RlSW5kZXggcHJldmlvdXNMb2NhbEFjY2VzcyA9IE5vTm9k
ZTsKLSAgICAgICAgICAgICAgICBpZiAoYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5vcGVyYW5kKG5v
ZGUubG9jYWwoKSkgPT0gbm9kZUluZGV4Ci0gICAgICAgICAgICAgICAgICAgICYmIG1fZ3JhcGhb
bm9kZS5jaGlsZDEoKV0ub3AoKSA9PSBQaGkpIHsKKyAgICAgICAgICAgIGlmIChub2RlLT5vcCgp
ID09IEdldExvY2FsKSB7CisgICAgICAgICAgICAgICAgTm9kZSogcHJldmlvdXNMb2NhbEFjY2Vz
cyA9IDA7CisgICAgICAgICAgICAgICAgaWYgKGJsb2NrLT52YXJpYWJsZXNBdEhlYWQub3BlcmFu
ZChub2RlLT5sb2NhbCgpKSA9PSBub2RlCisgICAgICAgICAgICAgICAgICAgICYmIG5vZGUtPmNo
aWxkMSgpLT5vcCgpID09IFBoaSkgewogICAgICAgICAgICAgICAgICAgICAvLyBXZSBleHBlY3Qg
dGhpcyB0byBiZSB0aGUgY29tbW9uIGNhc2UuCi0gICAgICAgICAgICAgICAgICAgIEFTU0VSVChi
bG9jay0+aXNJblBoaXMobm9kZS5jaGlsZDEoKS5pbmRleCgpKSk7Ci0gICAgICAgICAgICAgICAg
ICAgIHByZXZpb3VzTG9jYWxBY2Nlc3MgPSBub2RlLmNoaWxkMSgpLmluZGV4KCk7Ci0gICAgICAg
ICAgICAgICAgICAgIGJsb2NrLT52YXJpYWJsZXNBdEhlYWQub3BlcmFuZChub2RlLmxvY2FsKCkp
ID0gcHJldmlvdXNMb2NhbEFjY2VzczsKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGJsb2Nr
LT5pc0luUGhpcyhub2RlLT5jaGlsZDEoKS5ub2RlKCkpKTsKKyAgICAgICAgICAgICAgICAgICAg
cHJldmlvdXNMb2NhbEFjY2VzcyA9IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKKyAgICAgICAgICAg
ICAgICAgICAgYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5vcGVyYW5kKG5vZGUtPmxvY2FsKCkpID0g
cHJldmlvdXNMb2NhbEFjY2VzczsKICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAg
ICAgICAgICAgICBBU1NFUlQoaW5kZXhJbkJsb2NrID4gMCk7CiAgICAgICAgICAgICAgICAgICAg
IC8vIE11c3Qgc2VhcmNoIGZvciB0aGUgcHJldmlvdXMgYWNjZXNzIHRvIHRoaXMgbG9jYWwuCiAg
ICAgICAgICAgICAgICAgICAgIGZvciAoQmxvY2tJbmRleCBzdWJJbmRleEluQmxvY2sgPSBpbmRl
eEluQmxvY2s7IHN1YkluZGV4SW5CbG9jay0tOykgewotICAgICAgICAgICAgICAgICAgICAgICAg
Tm9kZUluZGV4IHN1Yk5vZGVJbmRleCA9IGJsb2NrLT5hdChzdWJJbmRleEluQmxvY2spOwotICAg
ICAgICAgICAgICAgICAgICAgICAgTm9kZSYgc3ViTm9kZSA9IG1fZ3JhcGhbc3ViTm9kZUluZGV4
XTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICghc3ViTm9kZS5zaG91bGRHZW5lcmF0ZSgp
KQorICAgICAgICAgICAgICAgICAgICAgICAgTm9kZSogc3ViTm9kZSA9IGJsb2NrLT5hdChzdWJJ
bmRleEluQmxvY2spOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFzdWJOb2RlLT5zaG91
bGRHZW5lcmF0ZSgpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKCFzdWJOb2RlLmhhc1ZhcmlhYmxlQWNjZXNzRGF0YSgp
KQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFzdWJOb2RlLT5oYXNWYXJpYWJsZUFjY2Vz
c0RhdGEoKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIChzdWJOb2RlLmxvY2FsKCkgIT0gbm9kZS5sb2NhbCgpKQorICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKHN1Yk5vZGUtPmxvY2FsKCkgIT0gbm9kZS0+bG9jYWwo
KSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIFRoZSB0d28gbXVzdCBoYXZlIGJlZW4gdW5pZmllZC4KLSAgICAgICAgICAg
ICAgICAgICAgICAgIEFTU0VSVChzdWJOb2RlLnZhcmlhYmxlQWNjZXNzRGF0YSgpID09IG5vZGUu
dmFyaWFibGVBY2Nlc3NEYXRhKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKHN1
Yk5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpID09IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgp
KTsKICAgICAgICAgICAgICAgICAgICAgICAgIHByZXZpb3VzTG9jYWxBY2Nlc3MgPSBzdWJOb2Rl
SW5kZXg7CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgICAgICBpZiAocHJldmlvdXNMb2NhbEFjY2VzcyA9PSBOb05v
ZGUpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFwcmV2aW91c0xvY2FsQWNjZXNzKSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGUgcHJldmlvdXMgYWNjZXNzIG11c3QgaGF2ZSBi
ZWVuIGEgUGhpLgogICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChCbG9ja0luZGV4IHBoaUlu
ZGV4SW5CbG9jayA9IGJsb2NrLT5waGlzLnNpemUoKTsgcGhpSW5kZXhJbkJsb2NrLS07KSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgTm9kZUluZGV4IHBoaU5vZGVJbmRleCA9IGJsb2Nr
LT5waGlzW3BoaUluZGV4SW5CbG9ja107Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgTm9k
ZSYgcGhpTm9kZSA9IG1fZ3JhcGhbcGhpTm9kZUluZGV4XTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoIXBoaU5vZGUuc2hvdWxkR2VuZXJhdGUoKSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBOb2RlKiBwaGlOb2RlID0gYmxvY2stPnBoaXNbcGhpSW5kZXhJbkJsb2NrXTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXBoaU5vZGUtPnNob3VsZEdlbmVyYXRl
KCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChwaGlOb2RlLmxvY2FsKCkgIT0gbm9kZS5sb2NhbCgpKQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwaGlOb2RlLT5sb2NhbCgpICE9IG5vZGUt
PmxvY2FsKCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoZSB0d28gbXVzdCBoYXZlIGJlZW4gdW5pZmll
ZC4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQocGhpTm9kZS52YXJpYWJsZUFj
Y2Vzc0RhdGEoKSA9PSBub2RlLnZhcmlhYmxlQWNjZXNzRGF0YSgpKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBwcmV2aW91c0xvY2FsQWNjZXNzID0gcGhpTm9kZUluZGV4OworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChwaGlOb2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEo
KSA9PSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKSk7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcHJldmlvdXNMb2NhbEFjY2VzcyA9IHBoaU5vZGU7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBBU1NFUlQocHJldmlvdXNMb2NhbEFjY2VzcyAhPSBOb05vZGUpOworICAgICAg
ICAgICAgICAgICAgICAgICAgQVNTRVJUKHByZXZpb3VzTG9jYWxBY2Nlc3MpOwogICAgICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAKLSAg
ICAgICAgICAgICAgICBBU1NFUlQocHJldmlvdXNMb2NhbEFjY2VzcyAhPSBOb05vZGUpOworICAg
ICAgICAgICAgICAgIEFTU0VSVChwcmV2aW91c0xvY2FsQWNjZXNzKTsKICAgICAgICAgICAgICAg
ICAKLSAgICAgICAgICAgICAgICBOb2RlSW5kZXggdGFpbE5vZGVJbmRleCA9IGJsb2NrLT52YXJp
YWJsZXNBdFRhaWwub3BlcmFuZChub2RlLmxvY2FsKCkpOwotICAgICAgICAgICAgICAgIGlmICh0
YWlsTm9kZUluZGV4ID09IG5vZGVJbmRleCkKLSAgICAgICAgICAgICAgICAgICAgYmxvY2stPnZh
cmlhYmxlc0F0VGFpbC5vcGVyYW5kKG5vZGUubG9jYWwoKSkgPSBwcmV2aW91c0xvY2FsQWNjZXNz
OworICAgICAgICAgICAgICAgIE5vZGUqIHRhaWxOb2RlID0gYmxvY2stPnZhcmlhYmxlc0F0VGFp
bC5vcGVyYW5kKG5vZGUtPmxvY2FsKCkpOworICAgICAgICAgICAgICAgIGlmICh0YWlsTm9kZSA9
PSBub2RlKQorICAgICAgICAgICAgICAgICAgICBibG9jay0+dmFyaWFibGVzQXRUYWlsLm9wZXJh
bmQobm9kZS0+bG9jYWwoKSkgPSBwcmV2aW91c0xvY2FsQWNjZXNzOwogICAgICAgICAgICAgICAg
IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBBU1NFUlQobV9ncmFwaFt0YWlsTm9kZUluZGV4
XS5vcCgpID09IEZsdXNoCi0gICAgICAgICAgICAgICAgICAgICAgICB8fCBtX2dyYXBoW3RhaWxO
b2RlSW5kZXhdLm9wKCkgPT0gU2V0TG9jYWwKLSAgICAgICAgICAgICAgICAgICAgICAgIHx8IG5v
ZGUudmFyaWFibGVBY2Nlc3NEYXRhKCktPmlzQ2FwdHVyZWQoKSk7CisgICAgICAgICAgICAgICAg
ICAgIEFTU0VSVCh0YWlsTm9kZS0+b3AoKSA9PSBGbHVzaAorICAgICAgICAgICAgICAgICAgICAg
ICAgfHwgdGFpbE5vZGUtPm9wKCkgPT0gU2V0TG9jYWwKKyAgICAgICAgICAgICAgICAgICAgICAg
IHx8IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5pc0NhcHR1cmVkKCkpOwogICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAgICAgICAgQ29kZU9y
aWdpbiBjb2RlT3JpZ2luID0gbm9kZS5jb2RlT3JpZ2luOwotICAgICAgICAgICAgQWRqYWNlbmN5
TGlzdCBjaGlsZHJlbiA9IG5vZGUuY2hpbGRyZW47CisgICAgICAgICAgICBDb2RlT3JpZ2luIGNv
ZGVPcmlnaW4gPSBub2RlLT5jb2RlT3JpZ2luOworICAgICAgICAgICAgQWRqYWNlbmN5TGlzdCBj
aGlsZHJlbiA9IG5vZGUtPmNoaWxkcmVuOwogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAg
bV9ncmFwaC5jb252ZXJ0VG9Db25zdGFudChub2RlSW5kZXgsIHZhbHVlKTsKKyAgICAgICAgICAg
IG1fZ3JhcGguY29udmVydFRvQ29uc3RhbnQobm9kZSwgdmFsdWUpOwogICAgICAgICAgICAgbV9p
bnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKICAgICAgICAgICAgICAgICBpbmRleEluQmxvY2ssIERv
bnRSZWZDaGlsZHJlbiwgRG9udFJlZk5vZGUsIFNwZWNOb25lLCBQaGFudG9tLCBjb2RlT3JpZ2lu
LCBjaGlsZHJlbik7Ci0gICAgICAgICAgICAgICAgCisgICAgICAgICAgICAKICAgICAgICAgICAg
IGNoYW5nZWQgPSB0cnVlOwogICAgICAgICB9CiAgICAgICAgIG1fc3RhdGUucmVzZXQoKTsKQEAg
LTM5NiwyMCArMzkzLDIwIEBAIHByaXZhdGU6CiAgICAgCiAgICAgdm9pZCBhZGRTdHJ1Y3R1cmVU
cmFuc2l0aW9uQ2hlY2soQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCB1bnNpZ25lZCBpbmRleEluQmxv
Y2ssIEpTQ2VsbCogY2VsbCkKICAgICB7Ci0gICAgICAgIE5vZGVJbmRleCB3ZWFrQ29uc3RhbnRJ
bmRleCA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCisgICAgICAgIE5vZGUqIHdlYWtDb25z
dGFudCA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCiAgICAgICAgICAgICBpbmRleEluQmxv
Y2ssIERvbnRSZWZDaGlsZHJlbiwgRG9udFJlZk5vZGUsIHNwZWN1bGF0aW9uRnJvbVZhbHVlKGNl
bGwpLAogICAgICAgICAgICAgV2Vha0pTQ29uc3RhbnQsIGNvZGVPcmlnaW4sIE9wSW5mbyhjZWxs
KSk7CiAgICAgICAgIAogICAgICAgICBpZiAoY2VsbC0+c3RydWN0dXJlKCktPnRyYW5zaXRpb25X
YXRjaHBvaW50U2V0SXNTdGlsbFZhbGlkKCkpIHsKICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0
Lmluc2VydE5vZGUoCiAgICAgICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBSZWZDaGlsZHJlbiwg
RG9udFJlZk5vZGUsIFNwZWNOb25lLCBTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludCwKLSAg
ICAgICAgICAgICAgICBjb2RlT3JpZ2luLCBPcEluZm8oY2VsbC0+c3RydWN0dXJlKCkpLCB3ZWFr
Q29uc3RhbnRJbmRleCk7CisgICAgICAgICAgICAgICAgY29kZU9yaWdpbiwgT3BJbmZvKGNlbGwt
PnN0cnVjdHVyZSgpKSwgd2Vha0NvbnN0YW50KTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgfQogCiAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCiAgICAgICAgICAgICBp
bmRleEluQmxvY2ssIFJlZkNoaWxkcmVuLCBEb250UmVmTm9kZSwgU3BlY05vbmUsIENoZWNrU3Ry
dWN0dXJlLCBjb2RlT3JpZ2luLAotICAgICAgICAgICAgT3BJbmZvKG1fZ3JhcGguYWRkU3RydWN0
dXJlU2V0KGNlbGwtPnN0cnVjdHVyZSgpKSksIHdlYWtDb25zdGFudEluZGV4KTsKKyAgICAgICAg
ICAgIE9wSW5mbyhtX2dyYXBoLmFkZFN0cnVjdHVyZVNldChjZWxsLT5zdHJ1Y3R1cmUoKSkpLCB3
ZWFrQ29uc3RhbnQpOwogICAgIH0KICAgICAKICAgICAvLyBUaGlzIGlzIG5lY2Vzc2FyeSBiZWNh
dXNlIHRoZSBDRkEgbWF5IHJlYWNoIGNvbmNsdXNpb25zIGFib3V0IGNvbnN0YW50cyBiYXNlZCBv
biBpdHMKQEAgLTQzNCw5ICs0MzEsOCBAQCBwcml2YXRlOgogICAgICAgICAgICAgaWYgKG1fc3Rh
dGUuaXNWYWxpZCgpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgCi0g
ICAgICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4ID0gYmxvY2stPmF0KGluZGV4SW5CbG9jayk7
Ci0gICAgICAgICAgICBOb2RlJiBub2RlID0gbV9ncmFwaFtub2RlSW5kZXhdOwotICAgICAgICAg
ICAgc3dpdGNoIChub2RlLm9wKCkpIHsKKyAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+
YXQoaW5kZXhJbkJsb2NrKTsKKyAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewogICAg
ICAgICAgICAgY2FzZSBSZXR1cm46CiAgICAgICAgICAgICBjYXNlIFRocm93OgogICAgICAgICAg
ICAgY2FzZSBUaHJvd1JlZmVyZW5jZUVycm9yOgpAQCAtNDQ3LDcgKzQ0Myw3IEBAIHByaXZhdGU6
CiAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmlu
c2VydE5vZGUoCiAgICAgICAgICAgICAgICAgICAgIGluZGV4SW5CbG9jaywgRG9udFJlZkNoaWxk
cmVuLCBEb250UmVmTm9kZSwgU3BlY05vbmUsIEZvcmNlT1NSRXhpdCwKLSAgICAgICAgICAgICAg
ICAgICAgbm9kZS5jb2RlT3JpZ2luKTsKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y29kZU9y
aWdpbik7CiAgICAgICAgICAgICAgICAgY2hhbmdlZCA9IHRydWU7CiAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0VkZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRWRn
ZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0VkZ2Uu
Y3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJE
RkdFZGdlLmgiCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBERkcgeworCit2b2lkIEVkZ2U6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sK
KyAgICBvdXQucHJpbnQodXNlS2luZFRvU3RyaW5nKHVzZUtpbmQoKSksIG5vZGUoKSk7Cit9CisK
K30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQor
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0VkZ2UuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0VkZ2UuaAkocmV2aXNpb24gMTQwNTA0KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdFZGdlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQz
LDQxICs0MywzOSBAQCBwdWJsaWM6CiAgICAgewogICAgIH0KICAgICAKLSAgICBleHBsaWNpdCBF
ZGdlKE5vZGVJbmRleCBub2RlSW5kZXgpCi0gICAgICAgIDogbV9lbmNvZGVkV29yZChtYWtlV29y
ZChub2RlSW5kZXgsIFVudHlwZWRVc2UpKQorICAgIGV4cGxpY2l0IEVkZ2UoTm9kZSogbm9kZSkK
KyAgICAgICAgOiBtX2VuY29kZWRXb3JkKG1ha2VXb3JkKG5vZGUsIFVudHlwZWRVc2UpKQogICAg
IHsKICAgICB9CiAgICAgCi0gICAgRWRnZShOb2RlSW5kZXggbm9kZUluZGV4LCBVc2VLaW5kIHVz
ZUtpbmQpCi0gICAgICAgIDogbV9lbmNvZGVkV29yZChtYWtlV29yZChub2RlSW5kZXgsIHVzZUtp
bmQpKQorICAgIEVkZ2UoTm9kZSogbm9kZSwgVXNlS2luZCB1c2VLaW5kKQorICAgICAgICA6IG1f
ZW5jb2RlZFdvcmQobWFrZVdvcmQobm9kZSwgdXNlS2luZCkpCiAgICAgewogICAgIH0KICAgICAK
LSAgICBOb2RlSW5kZXggaW5kZXhVbmNoZWNrZWQoKSBjb25zdCB7IHJldHVybiBtX2VuY29kZWRX
b3JkID4+IHNoaWZ0KCk7IH0KLSAgICBOb2RlSW5kZXggaW5kZXgoKSBjb25zdAotICAgIHsKLSAg
ICAgICAgQVNTRVJUKGlzU2V0KCkpOwotICAgICAgICByZXR1cm4gbV9lbmNvZGVkV29yZCA+PiBz
aGlmdCgpOwotICAgIH0KLSAgICB2b2lkIHNldEluZGV4KE5vZGVJbmRleCBub2RlSW5kZXgpCisg
ICAgTm9kZSogbm9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fZW5jb2RlZFdvcmQgJiB+KCgxIDw8IHNo
aWZ0KCkpIC0gMSk7IH0KKyAgICBOb2RlJiBvcGVyYXRvciooKSBjb25zdCB7IHJldHVybiAqZ2V0
KCk7IH0KKyAgICBOb2RlKiBvcGVyYXRvci0+KCkgY29uc3QgeyByZXR1cm4gZ2V0KCk7IH0KKyAg
ICAKKyAgICB2b2lkIHNldE5vZGUoTm9kZSogbm9kZSkKICAgICB7Ci0gICAgICAgIG1fZW5jb2Rl
ZFdvcmQgPSBtYWtlV29yZChub2RlSW5kZXgsIHVzZUtpbmQoKSk7CisgICAgICAgIG1fZW5jb2Rl
ZFdvcmQgPSBtYWtlV29yZChub2RlLCB1c2VLaW5kKCkpOwogICAgIH0KICAgICAKICAgICBVc2VL
aW5kIHVzZUtpbmQoKSBjb25zdAogICAgIHsKLSAgICAgICAgQVNTRVJUKGlzU2V0KCkpOworICAg
ICAgICBBU1NFUlQobm9kZSgpKTsKICAgICAgICAgdW5zaWduZWQgbWFza2VkID0gbV9lbmNvZGVk
V29yZCAmICgoKDEgPDwgc2hpZnQoKSkgLSAxKSk7CiAgICAgICAgIEFTU0VSVChtYXNrZWQgPCBM
YXN0VXNlS2luZCk7CiAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxVc2VLaW5kPihtYXNrZWQp
OwogICAgIH0KICAgICB2b2lkIHNldFVzZUtpbmQoVXNlS2luZCB1c2VLaW5kKQogICAgIHsKLSAg
ICAgICAgQVNTRVJUKGlzU2V0KCkpOwotICAgICAgICBtX2VuY29kZWRXb3JkID0gbWFrZVdvcmQo
aW5kZXgoKSwgdXNlS2luZCk7CisgICAgICAgIEFTU0VSVChub2RlKCkpOworICAgICAgICBtX2Vu
Y29kZWRXb3JkID0gbWFrZVdvcmQobm9kZSgpLCB1c2VLaW5kKTsKICAgICB9CiAgICAgCi0gICAg
Ym9vbCBpc1NldCgpIGNvbnN0IHsgcmV0dXJuIGluZGV4VW5jaGVja2VkKCkgIT0gTm9Ob2RlOyB9
CisgICAgYm9vbCBpc1NldCgpIGNvbnN0IHsgcmV0dXJuICEhbm9kZSgpOyB9CiAgICAgCiAgICAg
dHlwZWRlZiB2b2lkKiBFZGdlOjoqVW5zcGVjaWZpZWRCb29sVHlwZTsKICAgICBvcGVyYXRvciBV
bnNwZWNpZmllZEJvb2xUeXBlKigpIGNvbnN0IHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8VW5z
cGVjaWZpZWRCb29sVHlwZSo+KGlzU2V0KCkpOyB9CkBAIC05MiwzOCArOTAsNDEgQEAgcHVibGlj
OgogICAgIHsKICAgICAgICAgcmV0dXJuIG1fZW5jb2RlZFdvcmQgIT0gb3RoZXIubV9lbmNvZGVk
V29yZDsKICAgICB9CisgICAgCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CiAK
IHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIEFkamFjZW5jeUxpc3Q7CiAgICAgCi0gICAgc3Rh
dGljIHVpbnQzMl90IHNoaWZ0KCkgeyByZXR1cm4gNDsgfQorICAgIHN0YXRpYyB1aW50MzJfdCBz
aGlmdCgpIHsgcmV0dXJuIDI7IH0KICAgICAKLSAgICBzdGF0aWMgaW50MzJfdCBtYWtlV29yZChO
b2RlSW5kZXggbm9kZUluZGV4LCBVc2VLaW5kIHVzZUtpbmQpCisgICAgc3RhdGljIHVpbnRwdHJf
dCBtYWtlV29yZChOb2RlKiBub2RlLCBVc2VLaW5kIHVzZUtpbmQpCiAgICAgewotICAgICAgICBB
U1NFUlQoc3RhdGljX2Nhc3Q8dWludDMyX3Q+KCgoc3RhdGljX2Nhc3Q8aW50MzJfdD4obm9kZUlu
ZGV4KSA8PCBzaGlmdCgpKSA+PiBzaGlmdCgpKSkgPT0gbm9kZUluZGV4KTsKKyAgICAgICAgdWlu
dHB0cl90IHZhbHVlID0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4obm9kZSk7CisgICAgICAgIEFT
U0VSVCghKHZhbHVlICYgKCgxIDw8IHNoaWZ0KCkpIC0gMSkpKTsKICAgICAgICAgQVNTRVJUKHVz
ZUtpbmQgPj0gMCAmJiB1c2VLaW5kIDwgTGFzdFVzZUtpbmQpOwogICAgICAgICBBU1NFUlQoTGFz
dFVzZUtpbmQgPD0gKDEgPDwgc2hpZnQoKSkpOwotICAgICAgICByZXR1cm4gKG5vZGVJbmRleCA8
PCBzaGlmdCgpKSB8IHVzZUtpbmQ7CisgICAgICAgIHJldHVybiB2YWx1ZSB8IHN0YXRpY19jYXN0
PHVpbnRwdHJfdD4odXNlS2luZCk7CiAgICAgfQogICAgIAotICAgIGludDMyX3QgbV9lbmNvZGVk
V29yZDsKKyAgICB1aW50cHRyX3QgbV9lbmNvZGVkV29yZDsKIH07CiAKLWlubGluZSBib29sIG9w
ZXJhdG9yPT0oRWRnZSBub2RlVXNlLCBOb2RlSW5kZXggbm9kZUluZGV4KQoraW5saW5lIGJvb2wg
b3BlcmF0b3I9PShFZGdlIGVkZ2UsIE5vZGUqIG5vZGUpCiB7Ci0gICAgcmV0dXJuIG5vZGVVc2Uu
aW5kZXhVbmNoZWNrZWQoKSA9PSBub2RlSW5kZXg7CisgICAgcmV0dXJuIGVkZ2Uubm9kZSgpID09
IG5vZGU7CiB9Ci1pbmxpbmUgYm9vbCBvcGVyYXRvcj09KE5vZGVJbmRleCBub2RlSW5kZXgsIEVk
Z2Ugbm9kZVVzZSkKK2lubGluZSBib29sIG9wZXJhdG9yPT0oTm9kZSogbm9kZSwgRWRnZSBlZGdl
KQogewotICAgIHJldHVybiBub2RlVXNlLmluZGV4VW5jaGVja2VkKCkgPT0gbm9kZUluZGV4Owor
ICAgIHJldHVybiBlZGdlLm5vZGUoKSA9PSBub2RlOwogfQotaW5saW5lIGJvb2wgb3BlcmF0b3Ih
PShFZGdlIG5vZGVVc2UsIE5vZGVJbmRleCBub2RlSW5kZXgpCitpbmxpbmUgYm9vbCBvcGVyYXRv
ciE9KEVkZ2UgZWRnZSwgTm9kZSogbm9kZSkKIHsKLSAgICByZXR1cm4gbm9kZVVzZS5pbmRleFVu
Y2hlY2tlZCgpICE9IG5vZGVJbmRleDsKKyAgICByZXR1cm4gZWRnZS5ub2RlKCkgIT0gbm9kZTsK
IH0KLWlubGluZSBib29sIG9wZXJhdG9yIT0oTm9kZUluZGV4IG5vZGVJbmRleCwgRWRnZSBub2Rl
VXNlKQoraW5saW5lIGJvb2wgb3BlcmF0b3IhPShOb2RlKiBub2RlLCBFZGdlIGVkZ2UpCiB7Ci0g
ICAgcmV0dXJuIG5vZGVVc2UuaW5kZXhVbmNoZWNrZWQoKSAhPSBub2RlSW5kZXg7CisgICAgcmV0
dXJuIGVkZ2Uubm9kZSgpICE9IG5vZGU7CiB9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAkocmV2
aXNpb24gMTQwNTA0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDEyLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtNTgsMjEgKzU4LDIxIEBAIHByaXZhdGU6CiAgICAgICAgIEFT
U0VSVChibG9jay0+aXNSZWFjaGFibGUpOwogICAgICAgICBtX2Jsb2NrID0gYmxvY2s7CiAgICAg
ICAgIGZvciAobV9pbmRleEluQmxvY2sgPSAwOyBtX2luZGV4SW5CbG9jayA8IGJsb2NrLT5zaXpl
KCk7ICsrbV9pbmRleEluQmxvY2spIHsKLSAgICAgICAgICAgIG1fY29tcGlsZUluZGV4ID0gYmxv
Y2stPmF0KG1faW5kZXhJbkJsb2NrKTsKLSAgICAgICAgICAgIGZpeHVwTm9kZShtX2dyYXBoW21f
Y29tcGlsZUluZGV4XSk7CisgICAgICAgICAgICBtX2N1cnJlbnROb2RlID0gYmxvY2stPmF0KG1f
aW5kZXhJbkJsb2NrKTsKKyAgICAgICAgICAgIGZpeHVwTm9kZShtX2N1cnJlbnROb2RlKTsKICAg
ICAgICAgfQogICAgICAgICBtX2luc2VydGlvblNldC5leGVjdXRlKGJsb2NrKTsKICAgICB9CiAg
ICAgCi0gICAgdm9pZCBmaXh1cE5vZGUoTm9kZSYgbm9kZSkKKyAgICB2b2lkIGZpeHVwTm9kZShO
b2RlKiBub2RlKQogICAgIHsKLSAgICAgICAgaWYgKCFub2RlLnNob3VsZEdlbmVyYXRlKCkpCisg
ICAgICAgIGlmICghbm9kZS0+c2hvdWxkR2VuZXJhdGUoKSkKICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgCi0gICAgICAgIE5vZGVUeXBlIG9wID0gbm9kZS5vcCgpOworICAgICAgICBOb2Rl
VHlwZSBvcCA9IG5vZGUtPm9wKCk7CiAKICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9O
X1ZFUkJPU0UpCi0gICAgICAgIGRhdGFMb2dGKCIgICAlcyBAJXU6ICIsIEdyYXBoOjpvcE5hbWUo
b3ApLCBtX2NvbXBpbGVJbmRleCk7CisgICAgICAgIGRhdGFMb2dGKCIgICAlcyBAJXU6ICIsIEdy
YXBoOjpvcE5hbWUob3ApLCBub2RlLT5pbmRleCgpKTsKICNlbmRpZgogICAgICAgICAKICAgICAg
ICAgc3dpdGNoIChvcCkgewpAQCAtODAsODAgKzgwLDcxIEBAIHByaXZhdGU6CiAgICAgICAgICAg
ICBpZiAobV9ncmFwaC5tX2ZpeHBvaW50U3RhdGUgPiBCZWZvcmVGaXhwb2ludCkKICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgIAotICAgICAgICAgICAgTm9kZSogbm9kZVB0ciA9
ICZub2RlOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoIWlzSW50MzJTcGVjdWxhdGlv
bihtX2dyYXBoW21fY29tcGlsZUluZGV4XS5wcmVkaWN0aW9uKCkpKQorICAgICAgICAgICAgaWYg
KCFpc0ludDMyU3BlY3VsYXRpb24obm9kZS0+cHJlZGljdGlvbigpKSkKICAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgIGlmIChjb2RlQmxvY2soKS0+aWRlbnRpZmllcihub2RlUHRy
LT5pZGVudGlmaWVyTnVtYmVyKCkpICE9IGdsb2JhbERhdGEoKS5wcm9wZXJ0eU5hbWVzLT5sZW5n
dGgpCisgICAgICAgICAgICBpZiAoY29kZUJsb2NrKCktPmlkZW50aWZpZXIobm9kZS0+aWRlbnRp
Zmllck51bWJlcigpKSAhPSBnbG9iYWxEYXRhKCkucHJvcGVydHlOYW1lcy0+bGVuZ3RoKQogICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgQXJyYXlQcm9maWxlKiBhcnJheVByb2Zp
bGUgPSAKLSAgICAgICAgICAgICAgICBtX2dyYXBoLmJhc2VsaW5lQ29kZUJsb2NrRm9yKG5vZGVQ
dHItPmNvZGVPcmlnaW4pLT5nZXRBcnJheVByb2ZpbGUoCi0gICAgICAgICAgICAgICAgICAgIG5v
ZGVQdHItPmNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCk7CisgICAgICAgICAgICAgICAgbV9ncmFw
aC5iYXNlbGluZUNvZGVCbG9ja0Zvcihub2RlLT5jb2RlT3JpZ2luKS0+Z2V0QXJyYXlQcm9maWxl
KAorICAgICAgICAgICAgICAgICAgICBub2RlLT5jb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgpOwog
ICAgICAgICAgICAgQXJyYXlNb2RlIGFycmF5TW9kZSA9IEFycmF5TW9kZShBcnJheTo6U2VsZWN0
VXNpbmdQcmVkaWN0aW9ucyk7CiAgICAgICAgICAgICBpZiAoYXJyYXlQcm9maWxlKSB7Ci0gICAg
ICAgICAgICAgICAgYXJyYXlQcm9maWxlLT5jb21wdXRlVXBkYXRlZFByZWRpY3Rpb24obV9ncmFw
aC5iYXNlbGluZUNvZGVCbG9ja0Zvcihub2RlLmNvZGVPcmlnaW4pKTsKKyAgICAgICAgICAgICAg
ICBhcnJheVByb2ZpbGUtPmNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbihtX2dyYXBoLmJhc2VsaW5l
Q29kZUJsb2NrRm9yKG5vZGUtPmNvZGVPcmlnaW4pKTsKICAgICAgICAgICAgICAgICBhcnJheU1v
ZGUgPSBBcnJheU1vZGU6OmZyb21PYnNlcnZlZChhcnJheVByb2ZpbGUsIEFycmF5OjpSZWFkLCBm
YWxzZSk7CiAgICAgICAgICAgICAgICAgYXJyYXlNb2RlID0gYXJyYXlNb2RlLnJlZmluZSgKLSAg
ICAgICAgICAgICAgICAgICAgbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5wcmVkaWN0aW9uKCksCi0g
ICAgICAgICAgICAgICAgICAgIG1fZ3JhcGhbbV9jb21waWxlSW5kZXhdLnByZWRpY3Rpb24oKSk7
CisgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLT5wcmVkaWN0aW9uKCksIG5vZGUt
PnByZWRpY3Rpb24oKSk7CiAgICAgICAgICAgICAgICAgaWYgKGFycmF5TW9kZS5zdXBwb3J0c0xl
bmd0aCgpICYmIGFycmF5UHJvZmlsZS0+aGFzRGVmaW5pdGVTdHJ1Y3R1cmUoKSkgewogICAgICAg
ICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAogICAgICAgICAgICAgICAg
ICAgICAgICAgbV9pbmRleEluQmxvY2ssIFJlZkNoaWxkcmVuLCBEb250UmVmTm9kZSwgU3BlY05v
bmUsIENoZWNrU3RydWN0dXJlLAotICAgICAgICAgICAgICAgICAgICAgICAgbm9kZVB0ci0+Y29k
ZU9yaWdpbiwgT3BJbmZvKG1fZ3JhcGguYWRkU3RydWN0dXJlU2V0KGFycmF5UHJvZmlsZS0+ZXhw
ZWN0ZWRTdHJ1Y3R1cmUoKSkpLAotICAgICAgICAgICAgICAgICAgICAgICAgbm9kZVB0ci0+Y2hp
bGQxKCkuaW5kZXgoKSk7Ci0gICAgICAgICAgICAgICAgICAgIG5vZGVQdHIgPSAmbV9ncmFwaFtt
X2NvbXBpbGVJbmRleF07CisgICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5jb2RlT3JpZ2lu
LCBPcEluZm8obV9ncmFwaC5hZGRTdHJ1Y3R1cmVTZXQoYXJyYXlQcm9maWxlLT5leHBlY3RlZFN0
cnVjdHVyZSgpKSksCisgICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDEoKS5ub2Rl
KCkpOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICAgICAgYXJyYXlNb2RlID0gYXJyYXlNb2RlLnJlZmluZSgKLSAgICAgICAgICAgICAgICAgICAg
bV9ncmFwaFtub2RlLmNoaWxkMSgpXS5wcmVkaWN0aW9uKCksCi0gICAgICAgICAgICAgICAgICAg
IG1fZ3JhcGhbbV9jb21waWxlSW5kZXhdLnByZWRpY3Rpb24oKSk7Ci0gICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICBhcnJheU1vZGUgPSBhcnJheU1vZGUu
cmVmaW5lKG5vZGUtPmNoaWxkMSgpLT5wcmVkaWN0aW9uKCksIG5vZGUtPnByZWRpY3Rpb24oKSk7
CiAgICAgICAgICAgICBpZiAoIWFycmF5TW9kZS5zdXBwb3J0c0xlbmd0aCgpKQogICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgbm9kZVB0ci0+c2V0T3AoR2V0QXJyYXlMZW5ndGgp
OwotICAgICAgICAgICAgQVNTRVJUKG5vZGVQdHItPmZsYWdzKCkgJiBOb2RlTXVzdEdlbmVyYXRl
KTsKLSAgICAgICAgICAgIG5vZGVQdHItPmNsZWFyRmxhZ3MoTm9kZU11c3RHZW5lcmF0ZSB8IE5v
ZGVDbG9iYmVyc1dvcmxkKTsKLSAgICAgICAgICAgIG1fZ3JhcGguZGVyZWYobV9jb21waWxlSW5k
ZXgpOwotICAgICAgICAgICAgbm9kZVB0ci0+c2V0QXJyYXlNb2RlKGFycmF5TW9kZSk7CisgICAg
ICAgICAgICBub2RlLT5zZXRPcChHZXRBcnJheUxlbmd0aCk7CisgICAgICAgICAgICBBU1NFUlQo
bm9kZS0+ZmxhZ3MoKSAmIE5vZGVNdXN0R2VuZXJhdGUpOworICAgICAgICAgICAgbm9kZS0+Y2xl
YXJGbGFncyhOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZUNsb2JiZXJzV29ybGQpOworICAgICAgICAg
ICAgbV9ncmFwaC5kZXJlZihub2RlKTsKKyAgICAgICAgICAgIG5vZGUtPnNldEFycmF5TW9kZShh
cnJheU1vZGUpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBOb2RlSW5kZXggc3RvcmFnZSA9
IGNoZWNrQXJyYXkoYXJyYXlNb2RlLCBub2RlUHRyLT5jb2RlT3JpZ2luLCBub2RlUHRyLT5jaGls
ZDEoKS5pbmRleCgpLCBOb05vZGUsIGxlbmd0aE5lZWRzU3RvcmFnZSwgbm9kZVB0ci0+c2hvdWxk
R2VuZXJhdGUoKSk7Ci0gICAgICAgICAgICBpZiAoc3RvcmFnZSA9PSBOb05vZGUpCisgICAgICAg
ICAgICBOb2RlKiBzdG9yYWdlID0gY2hlY2tBcnJheShhcnJheU1vZGUsIG5vZGUtPmNvZGVPcmln
aW4sIG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgMCwgbGVuZ3RoTmVlZHNTdG9yYWdlLCBub2RlLT5z
aG91bGRHZW5lcmF0ZSgpKTsKKyAgICAgICAgICAgIGlmICghc3RvcmFnZSkKICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgIAotICAgICAgICAgICAgbm9kZVB0ciA9ICZtX2dyYXBo
W21fY29tcGlsZUluZGV4XTsKLSAgICAgICAgICAgIG5vZGVQdHItPmNoaWxkcmVuLmNoaWxkMigp
ID0gRWRnZShzdG9yYWdlKTsKKyAgICAgICAgICAgIG5vZGUtPmNoaWxkcmVuLmNoaWxkMigpID0g
RWRnZShzdG9yYWdlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNh
c2UgR2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZTogewotICAgICAgICAgICAgQVNTRVJUKG5vZGUu
YXJyYXlNb2RlKCkuY2FuQ1NFU3RvcmFnZSgpKTsKKyAgICAgICAgICAgIEFTU0VSVChub2RlLT5h
cnJheU1vZGUoKS5jYW5DU0VTdG9yYWdlKCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IH0KICAgICAgICAgY2FzZSBHZXRCeVZhbDogewotICAgICAgICAgICAgbm9kZS5zZXRBcnJheU1v
ZGUoCi0gICAgICAgICAgICAgICAgbm9kZS5hcnJheU1vZGUoKS5yZWZpbmUoCi0gICAgICAgICAg
ICAgICAgICAgIG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ucHJlZGljdGlvbigpLAotICAgICAgICAg
ICAgICAgICAgICBtX2dyYXBoW25vZGUuY2hpbGQyKCldLnByZWRpY3Rpb24oKSwKLSAgICAgICAg
ICAgICAgICAgICAgU3BlY05vbmUsIG5vZGUuZmxhZ3MoKSkpOworICAgICAgICAgICAgbm9kZS0+
c2V0QXJyYXlNb2RlKAorICAgICAgICAgICAgICAgIG5vZGUtPmFycmF5TW9kZSgpLnJlZmluZSgK
KyAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCktPnByZWRpY3Rpb24oKSwKKyAgICAg
ICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQyKCktPnByZWRpY3Rpb24oKSwKKyAgICAgICAgICAg
ICAgICAgICAgU3BlY05vbmUsIG5vZGUtPmZsYWdzKCkpKTsKICAgICAgICAgICAgIAotICAgICAg
ICAgICAgYmxlc3NBcnJheU9wZXJhdGlvbihub2RlLmNoaWxkMSgpLCBub2RlLmNoaWxkMigpLCAy
KTsKKyAgICAgICAgICAgIGJsZXNzQXJyYXlPcGVyYXRpb24obm9kZS0+Y2hpbGQxKCksIG5vZGUt
PmNoaWxkMigpLCAyKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgTm9kZSogbm9kZVB0ciA9
ICZtX2dyYXBoW21fY29tcGlsZUluZGV4XTsKLSAgICAgICAgICAgIEFycmF5TW9kZSBhcnJheU1v
ZGUgPSBub2RlUHRyLT5hcnJheU1vZGUoKTsKKyAgICAgICAgICAgIEFycmF5TW9kZSBhcnJheU1v
ZGUgPSBub2RlLT5hcnJheU1vZGUoKTsKICAgICAgICAgICAgIGlmIChhcnJheU1vZGUudHlwZSgp
ID09IEFycmF5OjpEb3VibGUKICAgICAgICAgICAgICAgICAmJiBhcnJheU1vZGUuYXJyYXlDbGFz
cygpID09IEFycmF5OjpPcmlnaW5hbEFycmF5CiAgICAgICAgICAgICAgICAgJiYgYXJyYXlNb2Rl
LnNwZWN1bGF0aW9uKCkgPT0gQXJyYXk6OkluQm91bmRzCiAgICAgICAgICAgICAgICAgJiYgYXJy
YXlNb2RlLmNvbnZlcnNpb24oKSA9PSBBcnJheTo6QXNJcwotICAgICAgICAgICAgICAgICYmIG1f
Z3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGVQdHItPmNvZGVPcmlnaW4pLT5hcnJheVByb3RvdHlw
ZUNoYWluSXNTYW5lKCkKLSAgICAgICAgICAgICAgICAmJiAhKG5vZGVQdHItPmZsYWdzKCkgJiBO
b2RlVXNlZEFzT3RoZXIpKQotICAgICAgICAgICAgICAgIG5vZGVQdHItPnNldEFycmF5TW9kZShh
cnJheU1vZGUud2l0aFNwZWN1bGF0aW9uKEFycmF5OjpTYW5lQ2hhaW4pKTsKKyAgICAgICAgICAg
ICAgICAmJiBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5jb2RlT3JpZ2luKS0+YXJyYXlQ
cm90b3R5cGVDaGFpbklzU2FuZSgpCisgICAgICAgICAgICAgICAgJiYgIShub2RlLT5mbGFncygp
ICYgTm9kZVVzZWRBc090aGVyKSkKKyAgICAgICAgICAgICAgICBub2RlLT5zZXRBcnJheU1vZGUo
YXJyYXlNb2RlLndpdGhTcGVjdWxhdGlvbihBcnJheTo6U2FuZUNoYWluKSk7CiAgICAgICAgICAg
ICAKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgU3RyaW5nQ2hh
ckF0OgogICAgICAgICBjYXNlIFN0cmluZ0NoYXJDb2RlQXQ6IHsKICAgICAgICAgICAgIC8vIEN1
cnJlbnRseSB3ZSBoYXZlIG5vIGdvb2Qgd2F5IG9mIHJlZmluaW5nIHRoZXNlLgotICAgICAgICAg
ICAgQVNTRVJUKG5vZGUuYXJyYXlNb2RlKCkgPT0gQXJyYXlNb2RlKEFycmF5OjpTdHJpbmcpKTsK
LSAgICAgICAgICAgIGJsZXNzQXJyYXlPcGVyYXRpb24obm9kZS5jaGlsZDEoKSwgbm9kZS5jaGls
ZDIoKSwgMik7CisgICAgICAgICAgICBBU1NFUlQobm9kZS0+YXJyYXlNb2RlKCkgPT0gQXJyYXlN
b2RlKEFycmF5OjpTdHJpbmcpKTsKKyAgICAgICAgICAgIGJsZXNzQXJyYXlPcGVyYXRpb24obm9k
ZS0+Y2hpbGQxKCksIG5vZGUtPmNoaWxkMigpLCAyKTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICB9CiAgICAgICAgICAgICAKQEAgLTE2NywxNSArMTU4LDE0IEBAIHByaXZhdGU6CiAgICAg
ICAgICAgICAvLyBpZ25vcmVkLiBUaGF0J3MgYmVjYXVzZSBBcnJheVB1c2ggY2FuJ3QgaGFuZGxl
IGFueSBhcnJheSBtb2RlcyB0aGF0IGFyZW4ndAogICAgICAgICAgICAgLy8gYXJyYXktcmVsYXRl
ZCAtIHNvIGlmIHJlZmluZSgpIHR1cm5lZCB0aGlzIGludG8gYSAiR2VuZXJpYyIgQXJyYXlQdXNo
IHRoZW4KICAgICAgICAgICAgIC8vIHRoYXQgd291bGQgYnJlYWsgdGhpbmdzLgotICAgICAgICAg
ICAgbm9kZS5zZXRBcnJheU1vZGUoCi0gICAgICAgICAgICAgICAgbm9kZS5hcnJheU1vZGUoKS5y
ZWZpbmUoCi0gICAgICAgICAgICAgICAgICAgIG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ucHJlZGlj
dGlvbigpICYgU3BlY0NlbGwsCisgICAgICAgICAgICBub2RlLT5zZXRBcnJheU1vZGUoCisgICAg
ICAgICAgICAgICAgbm9kZS0+YXJyYXlNb2RlKCkucmVmaW5lKAorICAgICAgICAgICAgICAgICAg
ICBub2RlLT5jaGlsZDEoKS0+cHJlZGljdGlvbigpICYgU3BlY0NlbGwsCiAgICAgICAgICAgICAg
ICAgICAgIFNwZWNJbnQzMiwKLSAgICAgICAgICAgICAgICAgICAgbV9ncmFwaFtub2RlLmNoaWxk
MigpXS5wcmVkaWN0aW9uKCkpKTsKLSAgICAgICAgICAgIGJsZXNzQXJyYXlPcGVyYXRpb24obm9k
ZS5jaGlsZDEoKSwgRWRnZSgpLCAyKTsKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQy
KCktPnByZWRpY3Rpb24oKSkpOworICAgICAgICAgICAgYmxlc3NBcnJheU9wZXJhdGlvbihub2Rl
LT5jaGlsZDEoKSwgRWRnZSgpLCAyKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgTm9kZSog
bm9kZVB0ciA9ICZtX2dyYXBoW21fY29tcGlsZUluZGV4XTsKLSAgICAgICAgICAgIHN3aXRjaCAo
bm9kZVB0ci0+YXJyYXlNb2RlKCkudHlwZSgpKSB7CisgICAgICAgICAgICBzd2l0Y2ggKG5vZGUt
PmFycmF5TW9kZSgpLnR5cGUoKSkgewogICAgICAgICAgICAgY2FzZSBBcnJheTo6RG91YmxlOgog
ICAgICAgICAgICAgICAgIGZpeERvdWJsZUVkZ2UoMSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7
CkBAIC0xODYsMTUgKzE3NiwxNSBAQCBwcml2YXRlOgogICAgICAgICB9CiAgICAgICAgICAgICAK
ICAgICAgICAgY2FzZSBBcnJheVBvcDogewotICAgICAgICAgICAgYmxlc3NBcnJheU9wZXJhdGlv
bihub2RlLmNoaWxkMSgpLCBFZGdlKCksIDEpOworICAgICAgICAgICAgYmxlc3NBcnJheU9wZXJh
dGlvbihub2RlLT5jaGlsZDEoKSwgRWRnZSgpLCAxKTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBWYWx1ZVRvSW50MzI6IHsKLSAgICAg
ICAgICAgIGlmIChtX2dyYXBoW25vZGUuY2hpbGQxKCldLnNob3VsZFNwZWN1bGF0ZU51bWJlcigp
Ci0gICAgICAgICAgICAgICAgJiYgbm9kZS5tdXN0R2VuZXJhdGUoKSkgewotICAgICAgICAgICAg
ICAgIG5vZGUuY2xlYXJGbGFncyhOb2RlTXVzdEdlbmVyYXRlKTsKLSAgICAgICAgICAgICAgICBt
X2dyYXBoLmRlcmVmKG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAgICAgIGlmIChub2RlLT5jaGls
ZDEoKS0+c2hvdWxkU3BlY3VsYXRlTnVtYmVyKCkKKyAgICAgICAgICAgICAgICAmJiBub2RlLT5t
dXN0R2VuZXJhdGUoKSkgeworICAgICAgICAgICAgICAgIG5vZGUtPmNsZWFyRmxhZ3MoTm9kZU11
c3RHZW5lcmF0ZSk7CisgICAgICAgICAgICAgICAgbV9ncmFwaC5kZXJlZihub2RlKTsKICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkBAIC0yMDUsOCArMTk1LDgg
QEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBCaXRSU2hpZnQ6CiAgICAgICAgIGNhc2UgQml0TFNo
aWZ0OgogICAgICAgICBjYXNlIEJpdFVSU2hpZnQ6IHsKLSAgICAgICAgICAgIGZpeEludEVkZ2Uo
bm9kZS5jaGlsZHJlbi5jaGlsZDEoKSk7Ci0gICAgICAgICAgICBmaXhJbnRFZGdlKG5vZGUuY2hp
bGRyZW4uY2hpbGQyKCkpOworICAgICAgICAgICAgZml4SW50RWRnZShub2RlLT5jaGlsZHJlbi5j
aGlsZDEoKSk7CisgICAgICAgICAgICBmaXhJbnRFZGdlKG5vZGUtPmNoaWxkcmVuLmNoaWxkMigp
KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKQEAgLTIxNiw5
ICsyMDYsOSBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIENvbXBhcmVHcmVhdGVyOgogICAgICAg
ICBjYXNlIENvbXBhcmVHcmVhdGVyRXE6CiAgICAgICAgIGNhc2UgQ29tcGFyZVN0cmljdEVxOiB7
Ci0gICAgICAgICAgICBpZiAoTm9kZTo6c2hvdWxkU3BlY3VsYXRlSW50ZWdlcihtX2dyYXBoW25v
ZGUuY2hpbGQxKCldLCBtX2dyYXBoW25vZGUuY2hpbGQyKCldKSkKKyAgICAgICAgICAgIGlmIChO
b2RlOjpzaG91bGRTcGVjdWxhdGVJbnRlZ2VyKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgbm9kZS0+
Y2hpbGQyKCkubm9kZSgpKSkKICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGlm
ICghTm9kZTo6c2hvdWxkU3BlY3VsYXRlTnVtYmVyKG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0sIG1f
Z3JhcGhbbm9kZS5jaGlsZDIoKV0pKQorICAgICAgICAgICAgaWYgKCFOb2RlOjpzaG91bGRTcGVj
dWxhdGVOdW1iZXIobm9kZS0+Y2hpbGQxKCkubm9kZSgpLCBub2RlLT5jaGlsZDIoKS5ub2RlKCkp
KQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgZml4RG91YmxlRWRnZSgwKTsK
ICAgICAgICAgICAgIGZpeERvdWJsZUVkZ2UoMSk7CkBAIC0yMjYsNDMgKzIxNiw0MSBAQCBwcml2
YXRlOgogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBMb2dpY2FsTm90OiB7
Ci0gICAgICAgICAgICBpZiAobV9ncmFwaFtub2RlLmNoaWxkMSgpXS5zaG91bGRTcGVjdWxhdGVJ
bnRlZ2VyKCkpCisgICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0
ZUludGVnZXIoKSkKICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGlmICghbV9n
cmFwaFtub2RlLmNoaWxkMSgpXS5zaG91bGRTcGVjdWxhdGVOdW1iZXIoKSkKKyAgICAgICAgICAg
IGlmICghbm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZU51bWJlcigpKQogICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgZml4RG91YmxlRWRnZSgwKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBCcmFuY2g6IHsK
LSAgICAgICAgICAgIGlmICghbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5zaG91bGRTcGVjdWxhdGVJ
bnRlZ2VyKCkKLSAgICAgICAgICAgICAgICAmJiBtX2dyYXBoW25vZGUuY2hpbGQxKCldLnNob3Vs
ZFNwZWN1bGF0ZU51bWJlcigpKQorICAgICAgICAgICAgaWYgKCFub2RlLT5jaGlsZDEoKS0+c2hv
dWxkU3BlY3VsYXRlSW50ZWdlcigpCisgICAgICAgICAgICAgICAgJiYgbm9kZS0+Y2hpbGQxKCkt
PnNob3VsZFNwZWN1bGF0ZU51bWJlcigpKQogICAgICAgICAgICAgICAgIGZpeERvdWJsZUVkZ2Uo
MCk7CiAKLSAgICAgICAgICAgIE5vZGUmIG15Tm9kZSA9IG1fZ3JhcGhbbV9jb21waWxlSW5kZXhd
OyAvLyByZWxvYWQgYmVjYXVzZSB0aGUgZ3JhcGggbWF5IGhhdmUgY2hhbmdlZAotICAgICAgICAg
ICAgRWRnZSBsb2dpY2FsTm90RWRnZSA9IG15Tm9kZS5jaGlsZDEoKTsKLSAgICAgICAgICAgIE5v
ZGUmIGxvZ2ljYWxOb3QgPSBtX2dyYXBoW2xvZ2ljYWxOb3RFZGdlXTsKLSAgICAgICAgICAgIGlm
IChsb2dpY2FsTm90Lm9wKCkgPT0gTG9naWNhbE5vdAotICAgICAgICAgICAgICAgICYmIGxvZ2lj
YWxOb3QuYWRqdXN0ZWRSZWZDb3VudCgpID09IDEpIHsKLSAgICAgICAgICAgICAgICBFZGdlIG5l
d0NoaWxkRWRnZSA9IGxvZ2ljYWxOb3QuY2hpbGQxKCk7Ci0gICAgICAgICAgICAgICAgaWYgKG1f
Z3JhcGhbbmV3Q2hpbGRFZGdlXS5oYXNCb29sZWFuUmVzdWx0KCkpIHsKKyAgICAgICAgICAgIE5v
ZGUqIGxvZ2ljYWxOb3QgPSBub2RlLT5jaGlsZDEoKS5ub2RlKCk7CisgICAgICAgICAgICBpZiAo
bG9naWNhbE5vdC0+b3AoKSA9PSBMb2dpY2FsTm90CisgICAgICAgICAgICAgICAgJiYgbG9naWNh
bE5vdC0+YWRqdXN0ZWRSZWZDb3VudCgpID09IDEpIHsKKyAgICAgICAgICAgICAgICBFZGdlIG5l
d0NoaWxkRWRnZSA9IGxvZ2ljYWxOb3QtPmNoaWxkMSgpOworICAgICAgICAgICAgICAgIGlmIChu
ZXdDaGlsZEVkZ2UtPmhhc0Jvb2xlYW5SZXN1bHQoKSkgewogICAgICAgICAgICAgICAgICAgICBt
X2dyYXBoLnJlZihuZXdDaGlsZEVkZ2UpOwotICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLmRl
cmVmKGxvZ2ljYWxOb3RFZGdlKTsKKyAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5kZXJlZihs
b2dpY2FsTm90KTsKICAgICAgICAgICAgICAgICAgICAgbXlOb2RlLmNoaWxkcmVuLnNldENoaWxk
MShuZXdDaGlsZEVkZ2UpOwogICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAg
ICAgQmxvY2tJbmRleCB0b0JlVGFrZW4gPSBteU5vZGUubm90VGFrZW5CbG9ja0luZGV4KCk7Ci0g
ICAgICAgICAgICAgICAgICAgIEJsb2NrSW5kZXggdG9CZU5vdFRha2VuID0gbXlOb2RlLnRha2Vu
QmxvY2tJbmRleCgpOwotICAgICAgICAgICAgICAgICAgICBteU5vZGUuc2V0VGFrZW5CbG9ja0lu
ZGV4KHRvQmVUYWtlbik7Ci0gICAgICAgICAgICAgICAgICAgIG15Tm9kZS5zZXROb3RUYWtlbkJs
b2NrSW5kZXgodG9CZU5vdFRha2VuKTsKKyAgICAgICAgICAgICAgICAgICAgQmxvY2tJbmRleCB0
b0JlVGFrZW4gPSBub2RlLT5ub3RUYWtlbkJsb2NrSW5kZXgoKTsKKyAgICAgICAgICAgICAgICAg
ICAgQmxvY2tJbmRleCB0b0JlTm90VGFrZW4gPSBub2RlLT50YWtlbkJsb2NrSW5kZXgoKTsKKyAg
ICAgICAgICAgICAgICAgICAgbm9kZS0+c2V0VGFrZW5CbG9ja0luZGV4KHRvQmVUYWtlbik7Cisg
ICAgICAgICAgICAgICAgICAgIG5vZGUtPnNldE5vdFRha2VuQmxvY2tJbmRleCh0b0JlTm90VGFr
ZW4pOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBTZXRMb2NhbDogewotICAg
ICAgICAgICAgaWYgKG5vZGUudmFyaWFibGVBY2Nlc3NEYXRhKCktPmlzQ2FwdHVyZWQoKSkKKyAg
ICAgICAgICAgIGlmIChub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+aXNDYXB0dXJlZCgpKQog
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgaWYgKCFub2RlLnZhcmlhYmxlQWNj
ZXNzRGF0YSgpLT5zaG91bGRVc2VEb3VibGVGb3JtYXQoKSkKKyAgICAgICAgICAgIGlmICghbm9k
ZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCktPnNob3VsZFVzZURvdWJsZUZvcm1hdCgpKQogICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgZml4RG91YmxlRWRnZSgwKTsKICAgICAgICAg
ICAgIGJyZWFrOwpAQCAtMjcyLDcgKzI2MCw3IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgVmFs
dWVBZGQ6IHsKICAgICAgICAgICAgIGlmIChtX2dyYXBoLmFkZFNob3VsZFNwZWN1bGF0ZUludGVn
ZXIobm9kZSkpCiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBpZiAoIU5vZGU6
OnNob3VsZFNwZWN1bGF0ZU51bWJlckV4cGVjdGluZ0RlZmluZWQobV9ncmFwaFtub2RlLmNoaWxk
MSgpXSwgbV9ncmFwaFtub2RlLmNoaWxkMigpXSkpCisgICAgICAgICAgICBpZiAoIU5vZGU6OnNo
b3VsZFNwZWN1bGF0ZU51bWJlckV4cGVjdGluZ0RlZmluZWQobm9kZS0+Y2hpbGQxKCkubm9kZSgp
LCBub2RlLT5jaGlsZDIoKS5ub2RlKCkpKQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgZml4RG91YmxlRWRnZSgwKTsKICAgICAgICAgICAgIGZpeERvdWJsZUVkZ2UoMSk7CkBA
IC0yODEsNyArMjY5LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIAogICAgICAgICBjYXNlIEFy
aXRoU3ViOiB7CiAgICAgICAgICAgICBpZiAobV9ncmFwaC5hZGRTaG91bGRTcGVjdWxhdGVJbnRl
Z2VyKG5vZGUpCi0gICAgICAgICAgICAgICAgJiYgbm9kZS5jYW5TcGVjdWxhdGVJbnRlZ2VyKCkp
CisgICAgICAgICAgICAgICAgJiYgbm9kZS0+Y2FuU3BlY3VsYXRlSW50ZWdlcigpKQogICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgZml4RG91YmxlRWRnZSgwKTsKICAgICAgICAg
ICAgIGZpeERvdWJsZUVkZ2UoMSk7CkBAIC0yOTgsOCArMjg2LDggQEAgcHJpdmF0ZToKICAgICAg
ICAgY2FzZSBBcml0aE1pbjoKICAgICAgICAgY2FzZSBBcml0aE1heDoKICAgICAgICAgY2FzZSBB
cml0aE1vZDogewotICAgICAgICAgICAgaWYgKE5vZGU6OnNob3VsZFNwZWN1bGF0ZUludGVnZXJG
b3JBcml0aG1ldGljKG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0sIG1fZ3JhcGhbbm9kZS5jaGlsZDIo
KV0pCi0gICAgICAgICAgICAgICAgJiYgbm9kZS5jYW5TcGVjdWxhdGVJbnRlZ2VyKCkpCisgICAg
ICAgICAgICBpZiAoTm9kZTo6c2hvdWxkU3BlY3VsYXRlSW50ZWdlckZvckFyaXRobWV0aWMobm9k
ZS0+Y2hpbGQxKCkubm9kZSgpLCBub2RlLT5jaGlsZDIoKS5ub2RlKCkpCisgICAgICAgICAgICAg
ICAgJiYgbm9kZS0+Y2FuU3BlY3VsYXRlSW50ZWdlcigpKQogICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgZml4RG91YmxlRWRnZSgwKTsKICAgICAgICAgICAgIGZpeERvdWJsZUVk
Z2UoMSk7CkBAIC0zMTUsOCArMzAzLDggQEAgcHJpdmF0ZToKICAgICAgICAgfQogCiAgICAgICAg
IGNhc2UgQXJpdGhEaXY6IHsKLSAgICAgICAgICAgIGlmIChOb2RlOjpzaG91bGRTcGVjdWxhdGVJ
bnRlZ2VyRm9yQXJpdGhtZXRpYyhtX2dyYXBoW25vZGUuY2hpbGQxKCldLCBtX2dyYXBoW25vZGUu
Y2hpbGQyKCldKQotICAgICAgICAgICAgICAgICYmIG5vZGUuY2FuU3BlY3VsYXRlSW50ZWdlcigp
KSB7CisgICAgICAgICAgICBpZiAoTm9kZTo6c2hvdWxkU3BlY3VsYXRlSW50ZWdlckZvckFyaXRo
bWV0aWMobm9kZS0+Y2hpbGQxKCkubm9kZSgpLCBub2RlLT5jaGlsZDIoKS5ub2RlKCkpCisgICAg
ICAgICAgICAgICAgJiYgbm9kZS0+Y2FuU3BlY3VsYXRlSW50ZWdlcigpKSB7CiAgICAgICAgICAg
ICAgICAgaWYgKGlzWDg2KCkpCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgICAgIGluamVjdEludDMyVG9Eb3VibGVOb2RlKDApOwpAQCAtMzI0LDEyICszMTIsMTEgQEAg
cHJpdmF0ZToKIAogICAgICAgICAgICAgICAgIC8vIFdlIGRvbid0IG5lZWQgdG8gZG8gcmVmJ2lu
ZyBvbiB0aGUgY2hpbGRyZW4gYmVjYXVzZSB3ZSdyZSBzdGVhbGluZyB0aGVtIGZyb20KICAgICAg
ICAgICAgICAgICAvLyB0aGUgb3JpZ2luYWwgZGl2aXNpb24uCi0gICAgICAgICAgICAgICAgTm9k
ZUluZGV4IG5ld0RpdmlzaW9uSW5kZXggPSBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAotICAg
ICAgICAgICAgICAgICAgICBtX2luZGV4SW5CbG9jaywgRG9udFJlZkNoaWxkcmVuLCBSZWZOb2Rl
LCBTcGVjRG91YmxlLCBtX2dyYXBoW21fY29tcGlsZUluZGV4XSk7Ci0gICAgICAgICAgICAgICAg
Ci0gICAgICAgICAgICAgICAgbV9ncmFwaFttX2NvbXBpbGVJbmRleF0uc2V0T3AoRG91YmxlQXNJ
bnQzMik7Ci0gICAgICAgICAgICAgICAgbV9ncmFwaFttX2NvbXBpbGVJbmRleF0uY2hpbGRyZW4u
aW5pdGlhbGl6ZShFZGdlKG5ld0RpdmlzaW9uSW5kZXgsIERvdWJsZVVzZSksIEVkZ2UoKSwgRWRn
ZSgpKTsKKyAgICAgICAgICAgICAgICBOb2RlKiBuZXdEaXZpc2lvbiA9IG1faW5zZXJ0aW9uU2V0
Lmluc2VydE5vZGUoCisgICAgICAgICAgICAgICAgICAgIG1faW5kZXhJbkJsb2NrLCBEb250UmVm
Q2hpbGRyZW4sIFJlZk5vZGUsIFNwZWNEb3VibGUsIG5vZGUpOwogICAgICAgICAgICAgICAgIAor
ICAgICAgICAgICAgICAgIG5vZGUtPnNldE9wKERvdWJsZUFzSW50MzIpOworICAgICAgICAgICAg
ICAgIG5vZGUtPmNoaWxkcmVuLmluaXRpYWxpemUoRWRnZShuZXdEaXZpc2lvbiwgRG91YmxlVXNl
KSwgRWRnZSgpLCBFZGdlKCkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
fQogICAgICAgICAgICAgZml4RG91YmxlRWRnZSgwKTsKQEAgLTMzOCw4ICszMjUsOCBAQCBwcml2
YXRlOgogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBBcml0aEFiczogewot
ICAgICAgICAgICAgaWYgKG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0uc2hvdWxkU3BlY3VsYXRlSW50
ZWdlckZvckFyaXRobWV0aWMoKQotICAgICAgICAgICAgICAgICYmIG5vZGUuY2FuU3BlY3VsYXRl
SW50ZWdlcigpKQorICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxh
dGVJbnRlZ2VyRm9yQXJpdGhtZXRpYygpCisgICAgICAgICAgICAgICAgJiYgbm9kZS0+Y2FuU3Bl
Y3VsYXRlSW50ZWdlcigpKQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgZml4
RG91YmxlRWRnZSgwKTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMzU4LDE1ICszNDUsMTMgQEAg
cHJpdmF0ZToKIAogICAgICAgICAgICAgbm9kZS5zZXRBcnJheU1vZGUoCiAgICAgICAgICAgICAg
ICAgbm9kZS5hcnJheU1vZGUoKS5yZWZpbmUoCi0gICAgICAgICAgICAgICAgICAgIG1fZ3JhcGhb
Y2hpbGQxXS5wcmVkaWN0aW9uKCksCi0gICAgICAgICAgICAgICAgICAgIG1fZ3JhcGhbY2hpbGQy
XS5wcmVkaWN0aW9uKCksCi0gICAgICAgICAgICAgICAgICAgIG1fZ3JhcGhbY2hpbGQzXS5wcmVk
aWN0aW9uKCkpKTsKKyAgICAgICAgICAgICAgICAgICAgY2hpbGQxLT5wcmVkaWN0aW9uKCksCisg
ICAgICAgICAgICAgICAgICAgIGNoaWxkMi0+cHJlZGljdGlvbigpLAorICAgICAgICAgICAgICAg
ICAgICBjaGlsZDMtPnByZWRpY3Rpb24oKSkpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBi
bGVzc0FycmF5T3BlcmF0aW9uKGNoaWxkMSwgY2hpbGQyLCAzKTsKICAgICAgICAgICAgIAotICAg
ICAgICAgICAgTm9kZSogbm9kZVB0ciA9ICZtX2dyYXBoW21fY29tcGlsZUluZGV4XTsKLSAgICAg
ICAgICAgIAotICAgICAgICAgICAgc3dpdGNoIChub2RlUHRyLT5hcnJheU1vZGUoKS5tb2RlRm9y
UHV0KCkudHlwZSgpKSB7CisgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPmFycmF5TW9kZSgpLm1v
ZGVGb3JQdXQoKS50eXBlKCkpIHsKICAgICAgICAgICAgIGNhc2UgQXJyYXk6OkRvdWJsZToKICAg
ICAgICAgICAgICAgICBmaXhEb3VibGVFZGdlKDIpOwogICAgICAgICAgICAgICAgIGJyZWFrOwpA
QCAtMzc3LDcgKzM2Miw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBjYXNlIEFycmF5OjpVaW50
OENsYW1wZWRBcnJheToKICAgICAgICAgICAgIGNhc2UgQXJyYXk6OlVpbnQxNkFycmF5OgogICAg
ICAgICAgICAgY2FzZSBBcnJheTo6VWludDMyQXJyYXk6Ci0gICAgICAgICAgICAgICAgaWYgKCFt
X2dyYXBoW2NoaWxkM10uc2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKQorICAgICAgICAgICAgICAg
IGlmICghY2hpbGQzLT5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpCiAgICAgICAgICAgICAgICAg
ICAgIGZpeERvdWJsZUVkZ2UoMik7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICBjYXNlIEFycmF5OjpGbG9hdDMyQXJyYXk6CkBAIC0zOTIsMTEgKzM3NywxMSBAQCBwcml2YXRl
OgogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgTmV3QXJyYXk6IHsKICAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IG1fZ3JhcGgudmFyQXJnTnVtQ2hpbGRyZW4obm9kZSk7IGktLTspIHsK
LSAgICAgICAgICAgICAgICBub2RlLnNldEluZGV4aW5nVHlwZSgKKyAgICAgICAgICAgICAgICBu
b2RlLT5zZXRJbmRleGluZ1R5cGUoCiAgICAgICAgICAgICAgICAgICAgIGxlYXN0VXBwZXJCb3Vu
ZE9mSW5kZXhpbmdUeXBlQW5kVHlwZSgKLSAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUuaW5k
ZXhpbmdUeXBlKCksIG1fZ3JhcGhbbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCBpKV0ucHJlZGlj
dGlvbigpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBub2RlLmluZGV4aW5nVHlwZSgpLCBt
X2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIGkpLT5wcmVkaWN0aW9uKCkpKTsKICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIGlmIChub2RlLmluZGV4aW5nVHlwZSgpID09IEFycmF5V2l0aERvdWJs
ZSkgeworICAgICAgICAgICAgaWYgKG5vZGUtPmluZGV4aW5nVHlwZSgpID09IEFycmF5V2l0aERv
dWJsZSkgewogICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1fZ3JhcGgudmFyQXJn
TnVtQ2hpbGRyZW4obm9kZSk7IGktLTspCiAgICAgICAgICAgICAgICAgICAgIGZpeERvdWJsZUVk
Z2UoaSk7CiAgICAgICAgICAgICB9CkBAIC00MDgsMTYgKzM5MywxNSBAQCBwcml2YXRlOgogICAg
ICAgICB9CiAKICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCi0gICAg
ICAgIE5vZGUqIG5vZGVQdHIgPSAmbV9ncmFwaFttX2NvbXBpbGVJbmRleF07Ci0gICAgICAgIGlm
ICghKG5vZGVQdHItPmZsYWdzKCkgJiBOb2RlSGFzVmFyQXJncykpIHsKKyAgICAgICAgaWYgKCEo
bm9kZS0+ZmxhZ3MoKSAmIE5vZGVIYXNWYXJBcmdzKSkgewogICAgICAgICAgICAgZGF0YUxvZ0Yo
Im5ldyBjaGlsZHJlbjogIik7Ci0gICAgICAgICAgICBub2RlUHRyLT5kdW1wQ2hpbGRyZW4oV1RG
OjpkYXRhRmlsZSgpKTsKKyAgICAgICAgICAgIG5vZGUtPmR1bXBDaGlsZHJlbihXVEY6OmRhdGFG
aWxlKCkpOwogICAgICAgICB9CiAgICAgICAgIGRhdGFMb2dGKCJcbiIpOwogI2VuZGlmCiAgICAg
fQogICAgIAotICAgIE5vZGVJbmRleCBjaGVja0FycmF5KEFycmF5TW9kZSBhcnJheU1vZGUsIENv
ZGVPcmlnaW4gY29kZU9yaWdpbiwgTm9kZUluZGV4IGFycmF5LCBOb2RlSW5kZXggaW5kZXgsIGJv
b2wgKCpzdG9yYWdlQ2hlY2spKGNvbnN0IEFycmF5TW9kZSYpID0gY2FuQ1NFU3RvcmFnZSwgYm9v
bCBzaG91bGRHZW5lcmF0ZSA9IHRydWUpCisgICAgTm9kZSogY2hlY2tBcnJheShBcnJheU1vZGUg
YXJyYXlNb2RlLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIE5vZGUqIGFycmF5LCBOb2RlKiBpbmRl
eCwgYm9vbCAoKnN0b3JhZ2VDaGVjaykoY29uc3QgQXJyYXlNb2RlJikgPSBjYW5DU0VTdG9yYWdl
LCBib29sIHNob3VsZEdlbmVyYXRlID0gdHJ1ZSkKICAgICB7CiAgICAgICAgIEFTU0VSVChhcnJh
eU1vZGUuaXNTcGVjaWZpYygpKTsKICAgICAgICAgCkBAIC00MjgsMTEgKzQxMiwxMSBAQCBwcml2
YXRlOgogICAgICAgICAgICAgICAgIGlmIChtX2luZGV4SW5CbG9jayA+IDApIHsKICAgICAgICAg
ICAgICAgICAgICAgLy8gSWYgdGhlIHByZXZpb3VzIG5vZGUgd2FzIGEgQ2hlY2tTdHJ1Y3R1cmUg
aW5zZXJ0ZWQgYmVjYXVzZSBvZiBzdHVmZgogICAgICAgICAgICAgICAgICAgICAvLyB0aGF0IHRo
ZSBhcnJheSBwcm9maWxlIHRvbGQgdXMsIHRoZW4gcmVtb3ZlIGl0LgotICAgICAgICAgICAgICAg
ICAgICBOb2RlJiBwcmV2aW91c05vZGUgPSBtX2dyYXBoW21fYmxvY2stPmF0KG1faW5kZXhJbkJs
b2NrIC0gMSldOwotICAgICAgICAgICAgICAgICAgICBpZiAocHJldmlvdXNOb2RlLm9wKCkgPT0g
Q2hlY2tTdHJ1Y3R1cmUKLSAgICAgICAgICAgICAgICAgICAgICAgICYmIHByZXZpb3VzTm9kZS5j
aGlsZDEoKSA9PSBhcnJheQotICAgICAgICAgICAgICAgICAgICAgICAgJiYgcHJldmlvdXNOb2Rl
LmNvZGVPcmlnaW4gPT0gY29kZU9yaWdpbikKLSAgICAgICAgICAgICAgICAgICAgICAgIHByZXZp
b3VzTm9kZS5zZXRPcEFuZERlZmF1bHRGbGFncyhQaGFudG9tKTsKKyAgICAgICAgICAgICAgICAg
ICAgTm9kZSogcHJldmlvdXNOb2RlID0gYmxvY2stPmF0KG1faW5kZXhJbkJsb2NrIC0gMSk7Cisg
ICAgICAgICAgICAgICAgICAgIGlmIChwcmV2aW91c05vZGUtPm9wKCkgPT0gQ2hlY2tTdHJ1Y3R1
cmUKKyAgICAgICAgICAgICAgICAgICAgICAgICYmIHByZXZpb3VzTm9kZS0+Y2hpbGQxKCkgPT0g
YXJyYXkKKyAgICAgICAgICAgICAgICAgICAgICAgICYmIHByZXZpb3VzTm9kZS0+Y29kZU9yaWdp
biA9PSBjb2RlT3JpZ2luKQorICAgICAgICAgICAgICAgICAgICAgICAgcHJldmlvdXNOb2RlLT5z
ZXRPcEFuZERlZmF1bHRGbGFncyhQaGFudG9tKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICAgCiAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKQEAg
LTQ1Niw3ICs0NDAsNyBAQCBwcml2YXRlOgogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBp
ZiAoIXN0b3JhZ2VDaGVjayhhcnJheU1vZGUpKQotICAgICAgICAgICAgcmV0dXJuIE5vTm9kZTsK
KyAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAKICAgICAgICAgaWYgKGFycmF5TW9kZS51
c2VzQnV0dGVyZmx5KCkpIHsKICAgICAgICAgICAgIHJldHVybiBtX2luc2VydGlvblNldC5pbnNl
cnROb2RlKApAQCAtNDc3LDE0ICs0NjEsMTQgQEAgcHJpdmF0ZToKICAgICB7CiAgICAgICAgIGlm
IChtX2dyYXBoLm1fZml4cG9pbnRTdGF0ZSA+IEJlZm9yZUZpeHBvaW50KQogICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICAgICAgCi0gICAgICAgIE5vZGUqIG5vZGVQdHIgPSAmbV9ncmFwaFtt
X2NvbXBpbGVJbmRleF07CiAgICAgICAgIAotICAgICAgICBzd2l0Y2ggKG5vZGVQdHItPmFycmF5
TW9kZSgpLnR5cGUoKSkgeworICAgICAgICBOb2RlKiBub2RlID0gbV9jdXJyZW50Tm9kZTsKKyAg
ICAgICAgCisgICAgICAgIHN3aXRjaCAobm9kZS0+YXJyYXlNb2RlKCkudHlwZSgpKSB7CiAgICAg
ICAgIGNhc2UgQXJyYXk6OkZvcmNlRXhpdDogewogICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQu
aW5zZXJ0Tm9kZSgKICAgICAgICAgICAgICAgICBtX2luZGV4SW5CbG9jaywgRG9udFJlZkNoaWxk
cmVuLCBEb250UmVmTm9kZSwgU3BlY05vbmUsIEZvcmNlT1NSRXhpdCwKLSAgICAgICAgICAgICAg
ICBub2RlUHRyLT5jb2RlT3JpZ2luKTsKKyAgICAgICAgICAgICAgICBub2RlLT5jb2RlT3JpZ2lu
KTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICAgICAgCkBAIC00OTcs
MjYgKzQ4MSwyNiBAQCBwcml2YXRlOgogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAg
CiAgICAgICAgIGRlZmF1bHQ6IHsKLSAgICAgICAgICAgIE5vZGVJbmRleCBzdG9yYWdlID0gY2hl
Y2tBcnJheShub2RlUHRyLT5hcnJheU1vZGUoKSwgbm9kZVB0ci0+Y29kZU9yaWdpbiwgYmFzZS5p
bmRleCgpLCBpbmRleC5pbmRleFVuY2hlY2tlZCgpKTsKLSAgICAgICAgICAgIGlmIChzdG9yYWdl
ID09IE5vTm9kZSkKKyAgICAgICAgICAgIE5vZGUqIHN0b3JhZ2UgPSBjaGVja0FycmF5KG5vZGUt
PmFycmF5TW9kZSgpLCBub2RlLT5jb2RlT3JpZ2luLCBiYXNlLm5vZGUoKSwgaW5kZXgubm9kZSgp
KTsKKyAgICAgICAgICAgIGlmICghc3RvcmFnZSkKICAgICAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgICAgICAKLSAgICAgICAgICAgIG1fZ3JhcGguY2hpbGQobV9ncmFwaFttX2NvbXBpbGVJ
bmRleF0sIHN0b3JhZ2VDaGlsZElkeCkgPSBFZGdlKHN0b3JhZ2UpOworICAgICAgICAgICAgbV9n
cmFwaC5jaGlsZChub2RlLCBzdG9yYWdlQ2hpbGRJZHgpID0gRWRnZShzdG9yYWdlKTsKICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgfSB9CiAgICAgfQogICAgIAogICAgIHZvaWQgZml4SW50
RWRnZShFZGdlJiBlZGdlKQogICAgIHsKLSAgICAgICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhbZWRn
ZV07Ci0gICAgICAgIGlmIChub2RlLm9wKCkgIT0gVmFsdWVUb0ludDMyKQorICAgICAgICBOb2Rl
KiBub2RlID0gZWRnZS5ub2RlKCk7CisgICAgICAgIGlmIChub2RlLT5vcCgpICE9IFZhbHVlVG9J
bnQzMikKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgCi0gICAgICAgIGlmICghbV9ncmFw
aFtub2RlLmNoaWxkMSgpXS5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpCisgICAgICAgIGlmICgh
bm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKSkKICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgCiAgICAgICAgIEVkZ2Ugb2xkRWRnZSA9IGVkZ2U7Ci0gICAgICAgIEVk
Z2UgbmV3RWRnZSA9IG5vZGUuY2hpbGQxKCk7CisgICAgICAgIEVkZ2UgbmV3RWRnZSA9IG5vZGUt
PmNoaWxkMSgpOwogICAgICAgICAKICAgICAgICAgbV9ncmFwaC5yZWYobmV3RWRnZSk7CiAgICAg
ICAgIG1fZ3JhcGguZGVyZWYob2xkRWRnZSk7CkBAIC01MjYsMTEgKzUxMCwxMSBAQCBwcml2YXRl
OgogICAgIAogICAgIHZvaWQgZml4RG91YmxlRWRnZSh1bnNpZ25lZCBjaGlsZEluZGV4KQogICAg
IHsKLSAgICAgICAgTm9kZSYgc291cmNlID0gbV9ncmFwaFttX2NvbXBpbGVJbmRleF07CisgICAg
ICAgIE5vZGUqIHNvdXJjZSA9IG1fY3VycmVudE5vZGU7CiAgICAgICAgIEVkZ2UmIGVkZ2UgPSBt
X2dyYXBoLmNoaWxkKHNvdXJjZSwgY2hpbGRJbmRleCk7CiAgICAgICAgIAotICAgICAgICBpZiAo
bV9ncmFwaFtlZGdlXS5wcmVkaWN0aW9uKCkgJiBTcGVjRG91YmxlKSB7Ci0gICAgICAgICAgICBl
ZGdlLnNldFVzZUtpbmQoRG91YmxlVXNlKTsKKyAgICAgICAgaWYgKGVkZ2UtPnByZWRpY3Rpb24o
KSAmIFNwZWNEb3VibGUpIHsKKyAgICAgICAgICAgIGVkZ2UtPnNldFVzZUtpbmQoRG91YmxlVXNl
KTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICAKQEAgLTUzOSwyMyAr
NTIzLDIyIEBAIHByaXZhdGU6CiAKICAgICB2b2lkIGluamVjdEludDMyVG9Eb3VibGVOb2RlKHVu
c2lnbmVkIGNoaWxkSW5kZXgpCiAgICAgewotICAgICAgICBOb2RlSW5kZXggcmVzdWx0SW5kZXgg
PSBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAorICAgICAgICBOb2RlKiByZXN1bHQgPSBtX2lu
c2VydGlvblNldC5pbnNlcnROb2RlKAogICAgICAgICAgICAgbV9pbmRleEluQmxvY2ssIERvbnRS
ZWZDaGlsZHJlbiwgUmVmTm9kZSwgU3BlY0RvdWJsZSwgSW50MzJUb0RvdWJsZSwKLSAgICAgICAg
ICAgIG1fZ3JhcGhbbV9jb21waWxlSW5kZXhdLmNvZGVPcmlnaW4sCi0gICAgICAgICAgICBtX2dy
YXBoLmNoaWxkKG1fZ3JhcGhbbV9jb21waWxlSW5kZXhdLCBjaGlsZEluZGV4KS5pbmRleCgpKTsK
KyAgICAgICAgICAgIG1fY3VycmVudE5vZGUtPmNvZGVPcmlnaW4sIG1fZ3JhcGguY2hpbGQobV9j
dXJyZW50Tm9kZSwgY2hpbGRJbmRleCkubm9kZSgpKTsKICAgICAgICAgCiAjaWYgREZHX0VOQUJM
RShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQogICAgICAgICBkYXRhTG9nRigKICAgICAgICAg
ICAgICIocmVwbGFjaW5nIEAldS0+QCV1IHdpdGggQCV1LT5AJXUpICIsCi0gICAgICAgICAgICBt
X2NvbXBpbGVJbmRleCwgbV9ncmFwaC5jaGlsZChtX2dyYXBoW21fY29tcGlsZUluZGV4XSwgY2hp
bGRJbmRleCkuaW5kZXgoKSwgbV9jb21waWxlSW5kZXgsIHJlc3VsdEluZGV4KTsKKyAgICAgICAg
ICAgIG1fY3VycmVudE5vZGUtPmluZGV4KCksIG1fZ3JhcGguY2hpbGQobV9jdXJyZW50Tm9kZSwg
Y2hpbGRJbmRleCktPmluZGV4KCksIG1fY3VycmVudE5vZGUtPmluZGV4KCksIHJlc3VsdC0+aW5k
ZXgoKSk7CiAjZW5kaWYKIAotICAgICAgICBtX2dyYXBoLmNoaWxkKG1fZ3JhcGhbbV9jb21waWxl
SW5kZXhdLCBjaGlsZEluZGV4KSA9IEVkZ2UocmVzdWx0SW5kZXgsIERvdWJsZVVzZSk7CisgICAg
ICAgIG1fZ3JhcGguY2hpbGQobV9jdXJyZW50Tm9kZSwgY2hpbGRJbmRleCkgPSBFZGdlKHJlc3Vs
dCwgRG91YmxlVXNlKTsKICAgICB9CiAKICAgICBCYXNpY0Jsb2NrKiBtX2Jsb2NrOwogICAgIHVu
c2lnbmVkIG1faW5kZXhJbkJsb2NrOwotICAgIE5vZGVJbmRleCBtX2NvbXBpbGVJbmRleDsKKyAg
ICBOb2RlKiBtX2N1cnJlbnROb2RlOwogICAgIEluc2VydGlvblNldCBtX2luc2VydGlvblNldDsK
IH07CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkocmV2
aXNpb24gMTQwNTA0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTQ2LDYgKzQ2LDcgQEAgR3JhcGg6OkdyYXBoKEpTR2xvYmFsRGF0
YSYgZ2xvYmFsRGF0YSwgQwogICAgICwgbV9jb2RlQmxvY2soY29kZUJsb2NrKQogICAgICwgbV9j
b21waWxhdGlvbihnbG9iYWxEYXRhLm1fcGVyQnl0ZWNvZGVQcm9maWxlciA/IGdsb2JhbERhdGEu
bV9wZXJCeXRlY29kZVByb2ZpbGVyLT5uZXdDb21waWxhdGlvbihjb2RlQmxvY2ssIFByb2ZpbGVy
OjpERkcpIDogMCkKICAgICAsIG1fcHJvZmlsZWRCbG9jayhjb2RlQmxvY2stPmFsdGVybmF0aXZl
KCkpCisgICAgLCBtX2FsbG9jYXRvcihnbG9iYWxEYXRhLm1fZGZnU3RhdGUtPm1fYWxsb2NhdG9y
KQogICAgICwgbV9oYXNBcmd1bWVudHMoZmFsc2UpCiAgICAgLCBtX29zckVudHJ5Qnl0ZWNvZGVJ
bmRleChvc3JFbnRyeUJ5dGVjb2RlSW5kZXgpCiAgICAgLCBtX211c3RIYW5kbGVWYWx1ZXMobXVz
dEhhbmRsZVZhbHVlcykKQEAgLTU0LDYgKzU1LDExIEBAIEdyYXBoOjpHcmFwaChKU0dsb2JhbERh
dGEmIGdsb2JhbERhdGEsIEMKICAgICBBU1NFUlQobV9wcm9maWxlZEJsb2NrKTsKIH0KIAorR3Jh
cGg6On5HcmFwaCgpCit7CisgICAgbV9hbGxvY2F0b3IuZnJlZUFsbCgpOworfQorCiBjb25zdCBj
aGFyICpHcmFwaDo6b3BOYW1lKE5vZGVUeXBlIG9wKQogewogICAgIHJldHVybiBkZmdPcE5hbWVz
W29wXTsKQEAgLTY1LDE4ICs3MSwxNiBAQCBzdGF0aWMgdm9pZCBwcmludFdoaXRlU3BhY2UoUHJp
bnRTdHJlYW0mCiAgICAgICAgIG91dC5wcmludCgiICIpOwogfQogCi1ib29sIEdyYXBoOjpkdW1w
Q29kZU9yaWdpbihQcmludFN0cmVhbSYgb3V0LCBjb25zdCBjaGFyKiBwcmVmaXgsIE5vZGVJbmRl
eCBwcmV2Tm9kZUluZGV4LCBOb2RlSW5kZXggbm9kZUluZGV4KQorYm9vbCBHcmFwaDo6ZHVtcENv
ZGVPcmlnaW4oUHJpbnRTdHJlYW0mIG91dCwgY29uc3QgY2hhciogcHJlZml4LCBOb2RlKiBwcmV2
aW91c05vZGUsIE5vZGUqIGN1cnJlbnROb2RlKQogewotICAgIGlmIChwcmV2Tm9kZUluZGV4ID09
IE5vTm9kZSkKKyAgICBpZiAoIXByZXZpb3VzTm9kZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgIAotICAgIE5vZGUmIGN1cnJlbnROb2RlID0gYXQobm9kZUluZGV4KTsKLSAgICBOb2RlJiBw
cmV2aW91c05vZGUgPSBhdChwcmV2Tm9kZUluZGV4KTsKLSAgICBpZiAocHJldmlvdXNOb2RlLmNv
ZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lID09IGN1cnJlbnROb2RlLmNvZGVPcmlnaW4uaW5saW5l
Q2FsbEZyYW1lKQorICAgIGlmIChwcmV2aW91c05vZGUtPmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZy
YW1lID09IGN1cnJlbnROb2RlLT5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgIAotICAgIFZlY3RvcjxDb2RlT3JpZ2luPiBwcmV2aW91c0lubGlu
ZVN0YWNrID0gcHJldmlvdXNOb2RlLmNvZGVPcmlnaW4uaW5saW5lU3RhY2soKTsKLSAgICBWZWN0
b3I8Q29kZU9yaWdpbj4gY3VycmVudElubGluZVN0YWNrID0gY3VycmVudE5vZGUuY29kZU9yaWdp
bi5pbmxpbmVTdGFjaygpOworICAgIFZlY3RvcjxDb2RlT3JpZ2luPiBwcmV2aW91c0lubGluZVN0
YWNrID0gcHJldmlvdXNOb2RlLT5jb2RlT3JpZ2luLmlubGluZVN0YWNrKCk7CisgICAgVmVjdG9y
PENvZGVPcmlnaW4+IGN1cnJlbnRJbmxpbmVTdGFjayA9IGN1cnJlbnROb2RlLT5jb2RlT3JpZ2lu
LmlubGluZVN0YWNrKCk7CiAgICAgdW5zaWduZWQgY29tbW9uU2l6ZSA9IHN0ZDo6bWluKHByZXZp
b3VzSW5saW5lU3RhY2suc2l6ZSgpLCBjdXJyZW50SW5saW5lU3RhY2suc2l6ZSgpKTsKICAgICB1
bnNpZ25lZCBpbmRleE9mRGl2ZXJnZW5jZSA9IGNvbW1vblNpemU7CiAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IGNvbW1vblNpemU7ICsraSkgewpAQCAtMTA3LDMyICsxMTEsMjMgQEAgYm9v
bCBHcmFwaDo6ZHVtcENvZGVPcmlnaW4oUHJpbnRTdHJlYW0mIAogICAgIHJldHVybiBoYXNQcmlu
dGVkOwogfQogCi1pbnQgR3JhcGg6OmFtb3VudE9mTm9kZVdoaXRlU3BhY2UoTm9kZSYgbm9kZSkK
K2ludCBHcmFwaDo6YW1vdW50T2ZOb2RlV2hpdGVTcGFjZShOb2RlKiBub2RlKQogewotICAgIHJl
dHVybiAobm9kZS5jb2RlT3JpZ2luLmlubGluZURlcHRoKCkgLSAxKSAqIDI7CisgICAgcmV0dXJu
IChub2RlLT5jb2RlT3JpZ2luLmlubGluZURlcHRoKCkgLSAxKSAqIDI7CiB9CiAKLXZvaWQgR3Jh
cGg6OnByaW50Tm9kZVdoaXRlU3BhY2UoUHJpbnRTdHJlYW0mIG91dCwgTm9kZSYgbm9kZSkKK3Zv
aWQgR3JhcGg6OnByaW50Tm9kZVdoaXRlU3BhY2UoUHJpbnRTdHJlYW0mIG91dCwgTm9kZSogbm9k
ZSkKIHsKICAgICBwcmludFdoaXRlU3BhY2Uob3V0LCBhbW91bnRPZk5vZGVXaGl0ZVNwYWNlKG5v
ZGUpKTsKIH0KIAotdm9pZCBHcmFwaDo6ZHVtcChQcmludFN0cmVhbSYgb3V0LCBFZGdlIGVkZ2Up
Cit2b2lkIEdyYXBoOjpkdW1wKFByaW50U3RyZWFtJiBvdXQsIGNvbnN0IGNoYXIqIHByZWZpeCwg
Tm9kZSogbm9kZSkKIHsKLSAgICBvdXQucHJpbnQoCi0gICAgICAgIHVzZUtpbmRUb1N0cmluZyhl
ZGdlLnVzZUtpbmQoKSksCi0gICAgICAgICJAIiwgZWRnZS5pbmRleCgpLAotICAgICAgICBBYmJy
ZXZpYXRlZFNwZWN1bGF0aW9uRHVtcChhdChlZGdlKS5wcmVkaWN0aW9uKCkpKTsKLX0KKyAgICBO
b2RlVHlwZSBvcCA9IG5vZGUtPm9wKCk7CiAKLXZvaWQgR3JhcGg6OmR1bXAoUHJpbnRTdHJlYW0m
IG91dCwgY29uc3QgY2hhciogcHJlZml4LCBOb2RlSW5kZXggbm9kZUluZGV4KQotewotICAgIE5v
ZGUmIG5vZGUgPSBhdChub2RlSW5kZXgpOwotICAgIE5vZGVUeXBlIG9wID0gbm9kZS5vcCgpOwot
Ci0gICAgdW5zaWduZWQgcmVmQ291bnQgPSBub2RlLnJlZkNvdW50KCk7CisgICAgdW5zaWduZWQg
cmVmQ291bnQgPSBub2RlLT5yZWZDb3VudCgpOwogICAgIGJvb2wgc2tpcHBlZCA9ICFyZWZDb3Vu
dDsKLSAgICBib29sIG11c3RHZW5lcmF0ZSA9IG5vZGUubXVzdEdlbmVyYXRlKCk7CisgICAgYm9v
bCBtdXN0R2VuZXJhdGUgPSBub2RlLT5tdXN0R2VuZXJhdGUoKTsKICAgICBpZiAobXVzdEdlbmVy
YXRlKQogICAgICAgICAtLXJlZkNvdW50OwogCkBAIC0xNTYsMTUwICsxNTEsOTYgQEAgdm9pZCBH
cmFwaDo6ZHVtcChQcmludFN0cmVhbSYgb3V0LCBjb25zdAogICAgIC8vICAgICAgICAgJCMgICAt
IHRoZSBpbmRleCBpbiB0aGUgQ29kZUJsb2NrIG9mIGEgY29uc3RhbnQgeyBmb3IgbnVtZXJpYyBj
b25zdGFudHMgdGhlIHZhbHVlIGlzIGRpc3BsYXllZCB8IGZvciBpbnRlZ2VycywgaW4gYm90aCBk
ZWNpbWFsIGFuZCBoZXggfS4KICAgICAvLyAgICAgICAgIGlkIyAgLSB0aGUgaW5kZXggaW4gdGhl
IENvZGVCbG9jayBvZiBhbiBpZGVudGlmaWVyIHsgaWYgY29kZUJsb2NrIGlzIHBhc3NlZCB0byBk
dW1wKCksIHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gaXMgZGlzcGxheWVkIH0uCiAgICAgLy8g
ICAgICAgICB2YXIjIC0gdGhlIGluZGV4IG9mIGEgdmFyIG9uIHRoZSBnbG9iYWwgb2JqZWN0LCB1
c2VkIGJ5IEdldEdsb2JhbFZhci9QdXRHbG9iYWxWYXIgb3BlcmF0aW9ucy4KLSAgICBvdXQucHJp
bnRmKCIlIDRkOiVzPCVjJXU6IiwgKGludClub2RlSW5kZXgsIHNraXBwZWQgPyAiICBza2lwcGVk
ICAiIDogIiAgICAgICAgICAgIiwgbXVzdEdlbmVyYXRlID8gJyEnIDogJyAnLCByZWZDb3VudCk7
Ci0gICAgaWYgKG5vZGUuaGFzUmVzdWx0KCkgJiYgIXNraXBwZWQgJiYgbm9kZS5oYXNWaXJ0dWFs
UmVnaXN0ZXIoKSkKLSAgICAgICAgb3V0LnByaW50KG5vZGUudmlydHVhbFJlZ2lzdGVyKCkpOwor
ICAgIG91dC5wcmludGYoIiUgNGQ6JXM8JWMldToiLCAoaW50KW5vZGUtPmluZGV4KCksIHNraXBw
ZWQgPyAiICBza2lwcGVkICAiIDogIiAgICAgICAgICAgIiwgbXVzdEdlbmVyYXRlID8gJyEnIDog
JyAnLCByZWZDb3VudCk7CisgICAgaWYgKG5vZGUtPmhhc1Jlc3VsdCgpICYmICFza2lwcGVkICYm
IG5vZGUtPmhhc1ZpcnR1YWxSZWdpc3RlcigpKQorICAgICAgICBvdXQucHJpbnQobm9kZS0+dmly
dHVhbFJlZ2lzdGVyKCkpOwogICAgIGVsc2UKICAgICAgICAgb3V0LnByaW50KCItIik7CiAgICAg
b3V0LnByaW50KCI+XHQiLCBvcE5hbWUob3ApLCAiKCIpOwotICAgIGJvb2wgaGFzUHJpbnRlZCA9
IGZhbHNlOwotICAgIGlmIChub2RlLmZsYWdzKCkgJiBOb2RlSGFzVmFyQXJncykgewotICAgICAg
ICBmb3IgKHVuc2lnbmVkIGNoaWxkSWR4ID0gbm9kZS5maXJzdENoaWxkKCk7IGNoaWxkSWR4IDwg
bm9kZS5maXJzdENoaWxkKCkgKyBub2RlLm51bUNoaWxkcmVuKCk7IGNoaWxkSWR4KyspIHsKLSAg
ICAgICAgICAgIGlmIChoYXNQcmludGVkKQotICAgICAgICAgICAgICAgIG91dC5wcmludCgiLCAi
KTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBoYXNQcmludGVkID0gdHJ1ZTsK
KyAgICBDb21tYVByaW50ZXIgY29tbWE7CisgICAgaWYgKG5vZGUtPmZsYWdzKCkgJiBOb2RlSGFz
VmFyQXJncykgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGNoaWxkSWR4ID0gbm9kZS0+Zmlyc3RD
aGlsZCgpOyBjaGlsZElkeCA8IG5vZGUtPmZpcnN0Q2hpbGQoKSArIG5vZGUtPm51bUNoaWxkcmVu
KCk7IGNoaWxkSWR4KyspIHsKICAgICAgICAgICAgIGlmICghbV92YXJBcmdDaGlsZHJlbltjaGls
ZElkeF0pCiAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBkdW1wKG91dCwg
bV92YXJBcmdDaGlsZHJlbltjaGlsZElkeF0pOworICAgICAgICAgICAgb3V0LnByaW50KGNvbW1h
LCBtX3ZhckFyZ0NoaWxkcmVuW2NoaWxkSWR4XSk7CiAgICAgICAgIH0KICAgICB9IGVsc2Ugewot
ICAgICAgICBpZiAoISFub2RlLmNoaWxkMSgpKSB7Ci0gICAgICAgICAgICBkdW1wKG91dCwgbm9k
ZS5jaGlsZDEoKSk7Ci0gICAgICAgICAgICBoYXNQcmludGVkID0gdHJ1ZTsKLSAgICAgICAgfQot
ICAgICAgICBpZiAoISFub2RlLmNoaWxkMigpKSB7Ci0gICAgICAgICAgICBvdXQucHJpbnQoIiwg
Iik7IC8vIFdoZXRoZXIgb3Igbm90IHRoZXJlIGlzIGEgZmlyc3QgY2hpbGQsIHdlIHByaW50IGEg
Y29tbWEgdG8gZW5zdXJlIHRoYXQgd2Ugc2VlIGEgYmxhbmsgZW50cnkgaWYgdGhlcmUgd2Fzbid0
IG9uZS4KLSAgICAgICAgICAgIGR1bXAob3V0LCBub2RlLmNoaWxkMigpKTsKLSAgICAgICAgICAg
IGhhc1ByaW50ZWQgPSB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIGlmICghIW5vZGUuY2hpbGQz
KCkpIHsKLSAgICAgICAgICAgIGlmICghbm9kZS5jaGlsZDEoKSAmJiAhbm9kZS5jaGlsZDIoKSkK
LSAgICAgICAgICAgICAgICBvdXQucHJpbnQoIiwgIik7IC8vIElmIHRoZSB0aGlyZCBjaGlsZCBp
cyB0aGUgZmlyc3Qgbm9uLWVtcHR5IG9uZSB0aGVuIG1ha2Ugc3VyZSB3ZSBoYXZlIHR3byBibGFu
a3MgcHJlY2VkaW5nIGl0LgotICAgICAgICAgICAgb3V0LnByaW50KCIsICIpOwotICAgICAgICAg
ICAgZHVtcChvdXQsIG5vZGUuY2hpbGQzKCkpOwotICAgICAgICAgICAgaGFzUHJpbnRlZCA9IHRy
dWU7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoc3RybGVuKG5vZGVGbGFnc0FzU3RyaW5n
KG5vZGUuZmxhZ3MoKSkpKSB7Ci0gICAgICAgIG91dC5wcmludChoYXNQcmludGVkID8gIiwgIiA6
ICIiLCBub2RlRmxhZ3NBc1N0cmluZyhub2RlLmZsYWdzKCkpKTsKLSAgICAgICAgaGFzUHJpbnRl
ZCA9IHRydWU7Ci0gICAgfQotICAgIGlmIChub2RlLmhhc0FycmF5TW9kZSgpKSB7Ci0gICAgICAg
IG91dC5wcmludChoYXNQcmludGVkID8gIiwgIiA6ICIiLCBub2RlLmFycmF5TW9kZSgpKTsKLSAg
ICAgICAgaGFzUHJpbnRlZCA9IHRydWU7Ci0gICAgfQotICAgIGlmIChub2RlLmhhc1Zhck51bWJl
cigpKSB7Ci0gICAgICAgIG91dC5wcmludChoYXNQcmludGVkID8gIiwgIiA6ICIiLCAidmFyIiwg
bm9kZS52YXJOdW1iZXIoKSk7Ci0gICAgICAgIGhhc1ByaW50ZWQgPSB0cnVlOwotICAgIH0KLSAg
ICBpZiAobm9kZS5oYXNSZWdpc3RlclBvaW50ZXIoKSkgewotICAgICAgICBvdXQucHJpbnQoaGFz
UHJpbnRlZCA/ICIsICIgOiAiIiwgImdsb2JhbCIsIGdsb2JhbE9iamVjdEZvcihub2RlLmNvZGVP
cmlnaW4pLT5maW5kUmVnaXN0ZXJJbmRleChub2RlLnJlZ2lzdGVyUG9pbnRlcigpKSwgIigiLCBS
YXdQb2ludGVyKG5vZGUucmVnaXN0ZXJQb2ludGVyKCkpLCAiKSIpOwotICAgICAgICBoYXNQcmlu
dGVkID0gdHJ1ZTsKLSAgICB9Ci0gICAgaWYgKG5vZGUuaGFzSWRlbnRpZmllcigpKSB7Ci0gICAg
ICAgIG91dC5wcmludChoYXNQcmludGVkID8gIiwgIiA6ICIiLCAiaWQiLCBub2RlLmlkZW50aWZp
ZXJOdW1iZXIoKSwgInsiLCBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihub2RlLmlkZW50aWZpZXJO
dW1iZXIoKSkuc3RyaW5nKCksICJ9Iik7Ci0gICAgICAgIGhhc1ByaW50ZWQgPSB0cnVlOwotICAg
IH0KLSAgICBpZiAobm9kZS5oYXNTdHJ1Y3R1cmVTZXQoKSkgewotICAgICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IG5vZGUuc3RydWN0dXJlU2V0KCkuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAg
ICAgIG91dC5wcmludChoYXNQcmludGVkID8gIiwgIiA6ICIiLCAic3RydWN0KCIsIFJhd1BvaW50
ZXIobm9kZS5zdHJ1Y3R1cmVTZXQoKVtpXSksICI6ICIsIEluZGV4aW5nVHlwZUR1bXAobm9kZS5z
dHJ1Y3R1cmVTZXQoKVtpXS0+aW5kZXhpbmdUeXBlKCkpLCAiKSIpOwotICAgICAgICAgICAgaGFz
UHJpbnRlZCA9IHRydWU7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgaWYgKG5vZGUuaGFzU3RydWN0
dXJlKCkpIHsKLSAgICAgICAgb3V0LnByaW50KGhhc1ByaW50ZWQgPyAiLCAiIDogIiIsICJzdHJ1
Y3QoIiwgUmF3UG9pbnRlcihub2RlLnN0cnVjdHVyZSgpKSwgIjogIiwgSW5kZXhpbmdUeXBlRHVt
cChub2RlLnN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSksICIpIik7Ci0gICAgICAgIGhhc1By
aW50ZWQgPSB0cnVlOwotICAgIH0KLSAgICBpZiAobm9kZS5oYXNTdHJ1Y3R1cmVUcmFuc2l0aW9u
RGF0YSgpKSB7Ci0gICAgICAgIG91dC5wcmludChoYXNQcmludGVkID8gIiwgIiA6ICIiLCAic3Ry
dWN0KCIsIFJhd1BvaW50ZXIobm9kZS5zdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSgpLnByZXZpb3Vz
U3RydWN0dXJlKSwgIiAtPiAiLCBSYXdQb2ludGVyKG5vZGUuc3RydWN0dXJlVHJhbnNpdGlvbkRh
dGEoKS5uZXdTdHJ1Y3R1cmUpLCAiKSIpOwotICAgICAgICBoYXNQcmludGVkID0gdHJ1ZTsKLSAg
ICB9Ci0gICAgaWYgKG5vZGUuaGFzRnVuY3Rpb24oKSkgewotICAgICAgICBvdXQucHJpbnQoaGFz
UHJpbnRlZCA/ICIsICIgOiAiIiwgUmF3UG9pbnRlcihub2RlLmZ1bmN0aW9uKCkpKTsKLSAgICAg
ICAgaGFzUHJpbnRlZCA9IHRydWU7Ci0gICAgfQotICAgIGlmIChub2RlLmhhc1N0b3JhZ2VBY2Nl
c3NEYXRhKCkpIHsKLSAgICAgICAgU3RvcmFnZUFjY2Vzc0RhdGEmIHN0b3JhZ2VBY2Nlc3NEYXRh
ID0gbV9zdG9yYWdlQWNjZXNzRGF0YVtub2RlLnN0b3JhZ2VBY2Nlc3NEYXRhSW5kZXgoKV07Ci0g
ICAgICAgIG91dC5wcmludChoYXNQcmludGVkID8gIiwgIiA6ICIiLCAiaWQiLCBzdG9yYWdlQWNj
ZXNzRGF0YS5pZGVudGlmaWVyTnVtYmVyLCAieyIsIG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKHN0
b3JhZ2VBY2Nlc3NEYXRhLmlkZW50aWZpZXJOdW1iZXIpLnN0cmluZygpLCAifSIpOworICAgICAg
ICBpZiAoISFub2RlLmNoaWxkMSgpIHx8ICEhbm9kZS5jaGlsZDIoKSB8fCAhIW5vZGUuY2hpbGQz
KCkpCisgICAgICAgICAgICBvdXQucHJpbnQoY29tbWEsIG5vZGUuY2hpbGQxKCkpOworICAgICAg
ICBpZiAoISFub2RlLmNoaWxkMigpIHx8ICEhbm9kZS5jaGlsZDMoKSkKKyAgICAgICAgICAgIG91
dC5wcmludChjb21tYSwgbm9kZS5jaGlsZDIoKSk7CisgICAgICAgIGlmICghIW5vZGUuY2hpbGQz
KCkpCisgICAgICAgICAgICBvdXQucHJpbnQoY29tbWEsIG5vZGUuY2hpbGQzKCkpOworICAgIH0K
KworICAgIGlmIChzdHJsZW4obm9kZUZsYWdzQXNTdHJpbmcobm9kZS0+ZmxhZ3MoKSkpKQorICAg
ICAgICBvdXQucHJpbnQoY29tbWEsIG5vZGVGbGFnc0FzU3RyaW5nKG5vZGUtPmZsYWdzKCkpKTsK
KyAgICBpZiAobm9kZS0+aGFzQXJyYXlNb2RlKCkpIHsKKyAgICAgICAgb3V0LnByaW50KGNvbW1h
LCBub2RlLT5hcnJheU1vZGUoKSk7CisgICAgaWYgKG5vZGUtPmhhc1Zhck51bWJlcigpKSB7Cisg
ICAgICAgIG91dC5wcmludChjb21tYSwgbm9kZS0+dmFyTnVtYmVyKCkpOworICAgIGlmIChub2Rl
LT5oYXNSZWdpc3RlclBvaW50ZXIoKSkKKyAgICAgICAgb3V0LnByaW50KGNvbW1hLCAiZ2xvYmFs
IiwgZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPmNvZGVPcmlnaW4pLT5maW5kUmVnaXN0ZXJJbmRleChu
b2RlLT5yZWdpc3RlclBvaW50ZXIoKSksICIoIiwgUmF3UG9pbnRlcihub2RlLT5yZWdpc3RlclBv
aW50ZXIoKSksICIpIik7CisgICAgaWYgKG5vZGUtPmhhc0lkZW50aWZpZXIoKSkKKyAgICAgICAg
b3V0LnByaW50KGNvbW1hLCAiaWQiLCBub2RlLT5pZGVudGlmaWVyTnVtYmVyKCksICJ7IiwgbV9j
b2RlQmxvY2stPmlkZW50aWZpZXIobm9kZS0+aWRlbnRpZmllck51bWJlcigpKS5zdHJpbmcoKSwg
In0iKTsKKyAgICBpZiAobm9kZS0+aGFzU3RydWN0dXJlU2V0KCkpIHsKKyAgICAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBub2RlLnN0cnVjdHVyZVNldCgpLnNpemUoKTsgKytpKQorICAgICAg
ICAgICAgb3V0LnByaW50KGNvbW1hLCAic3RydWN0KCIsIFJhd1BvaW50ZXIobm9kZS0+c3RydWN0
dXJlU2V0KClbaV0pLCAiOiAiLCBJbmRleGluZ1R5cGVEdW1wKG5vZGUtPnN0cnVjdHVyZVNldCgp
W2ldLT5pbmRleGluZ1R5cGUoKSksICIpIik7CisgICAgfQorICAgIGlmIChub2RlLT5oYXNTdHJ1
Y3R1cmUoKSkKKyAgICAgICAgb3V0LnByaW50KGNvbW1hLCAic3RydWN0KCIsIFJhd1BvaW50ZXIo
bm9kZS0+c3RydWN0dXJlKCkpLCAiOiAiLCBJbmRleGluZ1R5cGVEdW1wKG5vZGUtPnN0cnVjdHVy
ZSgpLT5pbmRleGluZ1R5cGUoKSksICIpIik7CisgICAgaWYgKG5vZGUtPmhhc1N0cnVjdHVyZVRy
YW5zaXRpb25EYXRhKCkpCisgICAgICAgIG91dC5wcmludChjb21tYSwgInN0cnVjdCgiLCBSYXdQ
b2ludGVyKG5vZGUtPnN0cnVjdHVyZVRyYW5zaXRpb25EYXRhKCkucHJldmlvdXNTdHJ1Y3R1cmUp
LCAiIC0+ICIsIFJhd1BvaW50ZXIobm9kZS0+c3RydWN0dXJlVHJhbnNpdGlvbkRhdGEoKS5uZXdT
dHJ1Y3R1cmUpLCAiKSIpOworICAgIGlmIChub2RlLT5oYXNGdW5jdGlvbigpKQorICAgICAgICBv
dXQucHJpbnQoY29tbWEsICJmdW5jdGlvbigiLCBSYXdQb2ludGVyKG5vZGUtPmZ1bmN0aW9uKCkp
LCAiLCAiLCBGdW5jdGlvbkV4ZWN1dGFibGVEdW1wKG5vZGUtPmZ1bmN0aW9uKCktPmpzRXhlY3V0
YWJsZSgpKSwgIikiKTsKKyAgICBpZiAobm9kZS0+aGFzRXhlY3V0YWJsZSgpKQorICAgICAgICBv
dXQucHJpbnQoY29tbWEsICJleGVjdXRhYmxlKCIsIEZ1bmN0aW9uRXhlY3V0YWJsZUR1bXAobm9k
ZS0+ZXhlY3V0YWJsZSgpKSwgIikiKTsKKyAgICBpZiAobm9kZS0+aGFzU3RvcmFnZUFjY2Vzc0Rh
dGEoKSkgeworICAgICAgICBTdG9yYWdlQWNjZXNzRGF0YSYgc3RvcmFnZUFjY2Vzc0RhdGEgPSBt
X3N0b3JhZ2VBY2Nlc3NEYXRhW25vZGUtPnN0b3JhZ2VBY2Nlc3NEYXRhSW5kZXgoKV07CisgICAg
ICAgIG91dC5wcmludChjb21tYSwgImlkIiwgc3RvcmFnZUFjY2Vzc0RhdGEuaWRlbnRpZmllck51
bWJlciwgInsiLCBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihzdG9yYWdlQWNjZXNzRGF0YS5pZGVu
dGlmaWVyTnVtYmVyKS5zdHJpbmcoKSwgIn0iKTsKICAgICAgICAgb3V0LnByaW50KCIsICIsIHN0
YXRpY19jYXN0PHB0cmRpZmZfdD4oc3RvcmFnZUFjY2Vzc0RhdGEub2Zmc2V0KSk7Ci0gICAgICAg
IGhhc1ByaW50ZWQgPSB0cnVlOwogICAgIH0KLSAgICBBU1NFUlQobm9kZS5oYXNWYXJpYWJsZUFj
Y2Vzc0RhdGEoKSA9PSBub2RlLmhhc0xvY2FsKCkpOwotICAgIGlmIChub2RlLmhhc1ZhcmlhYmxl
QWNjZXNzRGF0YSgpKSB7Ci0gICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nl
c3NEYXRhID0gbm9kZS52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKKyAgICBBU1NFUlQobm9kZS0+aGFz
VmFyaWFibGVBY2Nlc3NEYXRhKCkgPT0gbm9kZS0+aGFzTG9jYWwoKSk7CisgICAgaWYgKG5vZGUt
Pmhhc1ZhcmlhYmxlQWNjZXNzRGF0YSgpKSB7CisgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSog
dmFyaWFibGVBY2Nlc3NEYXRhID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CiAgICAgICAg
IGludCBvcGVyYW5kID0gdmFyaWFibGVBY2Nlc3NEYXRhLT5vcGVyYW5kKCk7CiAgICAgICAgIGlm
IChvcGVyYW5kSXNBcmd1bWVudChvcGVyYW5kKSkKLSAgICAgICAgICAgIG91dC5wcmludChoYXNQ
cmludGVkID8gIiwgIiA6ICIiLCAiYXJnIiwgb3BlcmFuZFRvQXJndW1lbnQob3BlcmFuZCksICIo
IiwgVmFyaWFibGVBY2Nlc3NEYXRhRHVtcCgqdGhpcywgdmFyaWFibGVBY2Nlc3NEYXRhKSwgIiki
KTsKKyAgICAgICAgICAgIG91dC5wcmludChjb21tYSwgImFyZyIsIG9wZXJhbmRUb0FyZ3VtZW50
KG9wZXJhbmQpLCAiKCIsIFZhcmlhYmxlQWNjZXNzRGF0YUR1bXAoKnRoaXMsIHZhcmlhYmxlQWNj
ZXNzRGF0YSksICIpIik7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIG91dC5wcmludChoYXNQ
cmludGVkID8gIiwgIiA6ICIiLCAiciIsIG9wZXJhbmQsICIoIiwgVmFyaWFibGVBY2Nlc3NEYXRh
RHVtcCgqdGhpcywgdmFyaWFibGVBY2Nlc3NEYXRhKSwgIikiKTsKLSAgICAgICAgaGFzUHJpbnRl
ZCA9IHRydWU7CisgICAgICAgICAgICBvdXQucHJpbnQoY29tbWEsICJyIiwgb3BlcmFuZCwgIigi
LCBWYXJpYWJsZUFjY2Vzc0RhdGFEdW1wKCp0aGlzLCB2YXJpYWJsZUFjY2Vzc0RhdGEpLCAiKSIp
OwogICAgIH0KLSAgICBpZiAobm9kZS5oYXNDb25zdGFudEJ1ZmZlcigpKSB7Ci0gICAgICAgIGlm
IChoYXNQcmludGVkKQotICAgICAgICAgICAgb3V0LnByaW50KCIsICIpOworICAgIGlmIChub2Rl
LT5oYXNDb25zdGFudEJ1ZmZlcigpKSB7CisgICAgICAgIG91dC5wcmludChjb21tYSk7CiAgICAg
ICAgIG91dC5wcmludChub2RlLnN0YXJ0Q29uc3RhbnQoKSwgIjpbIik7Ci0gICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBub2RlLm51bUNvbnN0YW50cygpOyArK2kpIHsKLSAgICAgICAg
ICAgIGlmIChpKQotICAgICAgICAgICAgICAgIG91dC5wcmludCgiLCAiKTsKLSAgICAgICAgICAg
IG91dC5wcmludChtX2NvZGVCbG9jay0+Y29uc3RhbnRCdWZmZXIobm9kZS5zdGFydENvbnN0YW50
KCkpW2ldKTsKLSAgICAgICAgfQorICAgICAgICBDb21tYVByaW50ZXIgYW5vdGhlckNvbW1hOwor
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbm9kZS5udW1Db25zdGFudHMoKTsgKytp
KQorICAgICAgICAgICAgb3V0LnByaW50KGFub3RoZXJDb21tYSwgbV9jb2RlQmxvY2stPmNvbnN0
YW50QnVmZmVyKG5vZGUuc3RhcnRDb25zdGFudCgpKVtpXSk7CiAgICAgICAgIG91dC5wcmludCgi
XSIpOwotICAgICAgICBoYXNQcmludGVkID0gdHJ1ZTsKLSAgICB9Ci0gICAgaWYgKG5vZGUuaGFz
SW5kZXhpbmdUeXBlKCkpIHsKLSAgICAgICAgaWYgKGhhc1ByaW50ZWQpCi0gICAgICAgICAgICBv
dXQucHJpbnQoIiwgIik7Ci0gICAgICAgIG91dC5wcmludChJbmRleGluZ1R5cGVEdW1wKG5vZGUu
aW5kZXhpbmdUeXBlKCkpKTsKLSAgICAgICAgaGFzUHJpbnRlZCA9IHRydWU7Ci0gICAgfQotICAg
IGlmIChub2RlLmhhc0V4ZWN1dGlvbkNvdW50ZXIoKSkgewotICAgICAgICBpZiAoaGFzUHJpbnRl
ZCkKLSAgICAgICAgICAgIG91dC5wcmludCgiLCAiKTsKLSAgICAgICAgb3V0LnByaW50KFJhd1Bv
aW50ZXIobm9kZS5leGVjdXRpb25Db3VudGVyKCkpKTsKLSAgICAgICAgaGFzUHJpbnRlZCA9IHRy
dWU7CiAgICAgfQorICAgIGlmIChub2RlLT5oYXNJbmRleGluZ1R5cGUoKSkKKyAgICAgICAgb3V0
LnByaW50KGNvbW1hLCBJbmRleGluZ1R5cGVEdW1wKG5vZGUtPmluZGV4aW5nVHlwZSgpKSk7Cisg
ICAgaWYgKG5vZGUtPmhhc0V4ZWN1dGlvbkNvdW50ZXIoKSkgeworICAgICAgICBvdXQucHJpbnQo
Y29tbWEsIFJhd1BvaW50ZXIobm9kZS0+ZXhlY3V0aW9uQ291bnRlcigpKSk7CiAgICAgaWYgKG9w
ID09IEpTQ29uc3RhbnQpIHsKLSAgICAgICAgb3V0LnByaW50KGhhc1ByaW50ZWQgPyAiLCAiIDog
IiIsICIkIiwgbm9kZS5jb25zdGFudE51bWJlcigpKTsKLSAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9
IHZhbHVlT2ZKU0NvbnN0YW50KG5vZGVJbmRleCk7CisgICAgICAgIG91dC5wcmludChjb21tYSwg
IiQiLCBub2RlLT5jb25zdGFudE51bWJlcigpKTsKKyAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IHZh
bHVlT2ZKU0NvbnN0YW50KG5vZGUpOwogICAgICAgICBvdXQucHJpbnQoIiA9ICIsIHZhbHVlKTsK
LSAgICAgICAgaGFzUHJpbnRlZCA9IHRydWU7Ci0gICAgfQotICAgIGlmIChvcCA9PSBXZWFrSlND
b25zdGFudCkgewotICAgICAgICBvdXQucHJpbnQoaGFzUHJpbnRlZCA/ICIsICIgOiAiIiwgUmF3
UG9pbnRlcihub2RlLndlYWtDb25zdGFudCgpKSk7Ci0gICAgICAgIGhhc1ByaW50ZWQgPSB0cnVl
OwotICAgIH0KLSAgICBpZiAgKG5vZGUuaXNCcmFuY2goKSB8fCBub2RlLmlzSnVtcCgpKSB7Ci0g
ICAgICAgIG91dC5wcmludChoYXNQcmludGVkID8gIiwgIiA6ICIiLCAiVDojIiwgbm9kZS50YWtl
bkJsb2NrSW5kZXgoKSk7Ci0gICAgICAgIGhhc1ByaW50ZWQgPSB0cnVlOwotICAgIH0KLSAgICBp
ZiAgKG5vZGUuaXNCcmFuY2goKSkgewotICAgICAgICBvdXQucHJpbnQoaGFzUHJpbnRlZCA/ICIs
ICIgOiAiIiwgIkY6IyIsIG5vZGUubm90VGFrZW5CbG9ja0luZGV4KCkpOwotICAgICAgICBoYXNQ
cmludGVkID0gdHJ1ZTsKICAgICB9Ci0gICAgb3V0LnByaW50KGhhc1ByaW50ZWQgPyAiLCAiIDog
IiIsICJiYyMiLCBub2RlLmNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCk7Ci0gICAgaGFzUHJpbnRl
ZCA9IHRydWU7Ci0gICAgCi0gICAgKHZvaWQpaGFzUHJpbnRlZDsKKyAgICBpZiAob3AgPT0gV2Vh
a0pTQ29uc3RhbnQpCisgICAgICAgIG91dC0+cHJpbnQoY29tbWEsIFJhd1BvaW50ZXIobm9kZS0+
d2Vha0NvbnN0YW50KCkpKTsKKyAgICBpZiAobm9kZS0+aXNCcmFuY2goKSB8fCBub2RlLT5pc0p1
bXAoKSkKKyAgICAgICAgb3V0LnByaW50KGNvbW1hLCAiVDojIiwgbm9kZS0+dGFrZW5CbG9ja0lu
ZGV4KCkpOworICAgIGlmIChub2RlLT5pc0JyYW5jaCgpKQorICAgICAgICBvdXQucHJpbnQoY29t
bWEsICJGOiMiLCBub2RlLT5ub3RUYWtlbkJsb2NrSW5kZXgoKSk7CisgICAgb3V0LnByaW50KGNv
bW1hLCAiYmMjIiwgbm9kZS0+Y29kZU9yaWdpbi5ieXRlY29kZUluZGV4KTsKICAgICAKICAgICBv
dXQucHJpbnQoIikiKTsKIAogICAgIGlmICghc2tpcHBlZCkgewotICAgICAgICBpZiAobm9kZS5o
YXNWYXJpYWJsZUFjY2Vzc0RhdGEoKSkKLSAgICAgICAgICAgIG91dC5wcmludCgiICBwcmVkaWN0
aW5nICIsIFNwZWN1bGF0aW9uRHVtcChub2RlLnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5wcmVkaWN0
aW9uKCkpLCBub2RlLnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5zaG91bGRVc2VEb3VibGVGb3JtYXQo
KSA/ICIsIGZvcmNpbmcgZG91YmxlIiA6ICIiKTsKLSAgICAgICAgZWxzZSBpZiAobm9kZS5oYXNI
ZWFwUHJlZGljdGlvbigpKQotICAgICAgICAgICAgb3V0LnByaW50KCIgIHByZWRpY3RpbmcgIiwg
U3BlY3VsYXRpb25EdW1wKG5vZGUuZ2V0SGVhcFByZWRpY3Rpb24oKSkpOworICAgICAgICBpZiAo
bm9kZS0+aGFzVmFyaWFibGVBY2Nlc3NEYXRhKCkpCisgICAgICAgICAgICBvdXQucHJpbnQoIiAg
cHJlZGljdGluZyAiLCBTcGVjdWxhdGlvbkR1bXAobm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCkt
PnByZWRpY3Rpb24oKSksIG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5zaG91bGRVc2VEb3Vi
bGVGb3JtYXQoKSA/ICIsIGZvcmNpbmcgZG91YmxlIiA6ICIiKTsKKyAgICAgICAgZWxzZSBpZiAo
bm9kZS0+aGFzSGVhcFByZWRpY3Rpb24oKSkKKyAgICAgICAgICAgIG91dC5wcmludCgiICBwcmVk
aWN0aW5nICIsIFNwZWN1bGF0aW9uRHVtcChub2RlLT5nZXRIZWFwUHJlZGljdGlvbigpKSk7CiAg
ICAgfQogICAgIAogICAgIG91dC5wcmludCgiXG4iKTsKQEAgLTMwOSw3ICsyNTAsNyBAQCB2b2lk
IEdyYXBoOjpkdW1wQmxvY2tIZWFkZXIoUHJpbnRTdHJlYW0mCiB7CiAgICAgQmFzaWNCbG9jayog
YmxvY2sgPSBtX2Jsb2Nrc1tibG9ja0luZGV4XS5nZXQoKTsKIAotICAgIG91dC5wcmludChwcmVm
aXgsICJCbG9jayAjIiwgYmxvY2tJbmRleCwgIiAoIiwgYXQoYmxvY2stPmF0KDApKS5jb2RlT3Jp
Z2luLCAiKTogIiwgYmxvY2stPmlzUmVhY2hhYmxlID8gIiIgOiAiKHNraXBwZWQpIiwgYmxvY2st
PmlzT1NSVGFyZ2V0ID8gIiAoT1NSIHRhcmdldCkiIDogIiIsICJcbiIpOworICAgIG91dC5wcmlu
dChwcmVmaXgsICJCbG9jayAjIiwgYmxvY2tJbmRleCwgIiAoIiwgYmxvY2stPmF0KDApLT5jb2Rl
T3JpZ2luLCAiKTogIiwgYmxvY2stPmlzUmVhY2hhYmxlID8gIiIgOiAiKHNraXBwZWQpIiwgYmxv
Y2stPmlzT1NSVGFyZ2V0ID8gIiAoT1NSIHRhcmdldCkiIDogIiIsICJcbiIpOwogICAgIG91dC5w
cmludChwcmVmaXgsICIgIFByZWRlY2Vzc29yczoiKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IGJsb2NrLT5tX3ByZWRlY2Vzc29ycy5zaXplKCk7ICsraSkKICAgICAgICAgb3V0LnByaW50
KCIgIyIsIGJsb2NrLT5tX3ByZWRlY2Vzc29yc1tpXSk7CkBAIC0zMzIsMTcgKzI3MywxNiBAQCB2
b2lkIEdyYXBoOjpkdW1wQmxvY2tIZWFkZXIoUHJpbnRTdHJlYW0mCiAgICAgfQogICAgIG91dC5w
cmludChwcmVmaXgsICIgIFBoaSBOb2RlczoiKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IGJsb2NrLT5waGlzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIE5vZGVJbmRleCBwaGlOb2RlSW5k
ZXggPSBibG9jay0+cGhpc1tpXTsKLSAgICAgICAgTm9kZSYgcGhpTm9kZSA9IGF0KHBoaU5vZGVJ
bmRleCk7Ci0gICAgICAgIGlmICghcGhpTm9kZS5zaG91bGRHZW5lcmF0ZSgpICYmIHBoaU5vZGVE
dW1wTW9kZSA9PSBEdW1wTGl2ZVBoaXNPbmx5KQorICAgICAgICBOb2RlKiBwaGlOb2RlID0gYmxv
Y2stPnBoaXNbaV07CisgICAgICAgIGlmICghcGhpTm9kZS0+c2hvdWxkR2VuZXJhdGUoKSAmJiBw
aGlOb2RlRHVtcE1vZGUgPT0gRHVtcExpdmVQaGlzT25seSkKICAgICAgICAgICAgIGNvbnRpbnVl
OwotICAgICAgICBvdXQucHJpbnQoIiBAIiwgcGhpTm9kZUluZGV4LCAiPCIsIHBoaU5vZGUucmVm
Q291bnQoKSwgIj4tPigiKTsKLSAgICAgICAgaWYgKHBoaU5vZGUuY2hpbGQxKCkpIHsKLSAgICAg
ICAgICAgIG91dC5wcmludCgiQCIsIHBoaU5vZGUuY2hpbGQxKCkuaW5kZXgoKSk7Ci0gICAgICAg
ICAgICBpZiAocGhpTm9kZS5jaGlsZDIoKSkgewotICAgICAgICAgICAgICAgIG91dC5wcmludCgi
LCBAIiwgcGhpTm9kZS5jaGlsZDIoKS5pbmRleCgpKTsKLSAgICAgICAgICAgICAgICBpZiAocGhp
Tm9kZS5jaGlsZDMoKSkKLSAgICAgICAgICAgICAgICAgICAgb3V0LnByaW50KCIsIEAiLCBwaGlO
b2RlLmNoaWxkMygpLmluZGV4KCkpOworICAgICAgICBvdXQucHJpbnQoIiBAIiwgcGhpTm9kZS0+
aW5kZXgoKSwgIjwiLCBwaGlOb2RlLT5yZWZDb3VudCgpLCAiPi0+KCIpOworICAgICAgICBpZiAo
cGhpTm9kZS0+Y2hpbGQxKCkpIHsKKyAgICAgICAgICAgIG91dC5wcmludCgiQCIsIHBoaU5vZGUt
PmNoaWxkMSgpLT5pbmRleCgpKCkpOworICAgICAgICAgICAgaWYgKHBoaU5vZGUtPmNoaWxkMigp
KSB7CisgICAgICAgICAgICAgICAgb3V0LnByaW50KCIsIEAiLCBwaGlOb2RlLT5jaGlsZDIoKS0+
aW5kZXgoKSk7CisgICAgICAgICAgICAgICAgaWYgKHBoaU5vZGUtPmNoaWxkMygpKQorICAgICAg
ICAgICAgICAgICAgICBvdXQucHJpbnQoIiwgQCIsIHBoaU5vZGUtPmNoaWxkMygpLT5pbmRleCgp
KTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBvdXQucHJpbnQoIikiLCBpICsg
MSA8IGJsb2NrLT5waGlzLnNpemUoKSA/ICIsIiA6ICIiKTsKQEAgLTM1Miw3ICsyOTIsNyBAQCB2
b2lkIEdyYXBoOjpkdW1wQmxvY2tIZWFkZXIoUHJpbnRTdHJlYW0mCiAKIHZvaWQgR3JhcGg6OmR1
bXAoUHJpbnRTdHJlYW0mIG91dCkKIHsKLSAgICBOb2RlSW5kZXggbGFzdE5vZGVJbmRleCA9IE5v
Tm9kZTsKKyAgICBOb2RlKiBsYXN0Tm9kZSA9IDA7CiAgICAgZm9yIChzaXplX3QgYiA9IDA7IGIg
PCBtX2Jsb2Nrcy5zaXplKCk7ICsrYikgewogICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1f
YmxvY2tzW2JdLmdldCgpOwogICAgICAgICBpZiAoIWJsb2NrKQpAQCAtMzY4LDkgKzMwOCw5IEBA
IHZvaWQgR3JhcGg6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkKICAgICAgICAgZHVtcE9wZXJhbmRz
KGJsb2NrLT52YXJpYWJsZXNBdEhlYWQsIG91dCk7CiAgICAgICAgIG91dC5wcmludCgiXG4iKTsK
ICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBibG9jay0+c2l6ZSgpOyArK2kpIHsKLSAg
ICAgICAgICAgIGR1bXBDb2RlT3JpZ2luKG91dCwgIiIsIGxhc3ROb2RlSW5kZXgsIGJsb2NrLT5h
dChpKSk7CisgICAgICAgICAgICBkdW1wQ29kZU9yaWdpbihvdXQsICIiLCBsYXN0Tm9kZSwgYmxv
Y2stPmF0KGkpKTsKICAgICAgICAgICAgIGR1bXAob3V0LCAiIiwgYmxvY2stPmF0KGkpKTsKLSAg
ICAgICAgICAgIGxhc3ROb2RlSW5kZXggPSBibG9jay0+YXQoaSk7CisgICAgICAgICAgICBsYXN0
Tm9kZSA9IGJsb2NrLT5hdChpKTsKICAgICAgICAgfQogICAgICAgICBvdXQucHJpbnQoIiAgdmFy
cyBhZnRlcjogIik7CiAgICAgICAgIGlmIChibG9jay0+Y2ZhSGFzVmlzaXRlZCkKQEAgLTM4Niw0
MCArMzI2LDQwIEBAIHZvaWQgR3JhcGg6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkKIAogLy8gRklY
TUU6IENvbnZlcnQgdGhpcyB0byBiZSBpdGVyYXRpdmUsIG5vdCByZWN1cnNpdmUuCiAjZGVmaW5l
IERPX1RPX0NISUxEUkVOKG5vZGUsIHRoaW5nVG9EbykgZG8geyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCi0gICAgICAgIE5vZGUmIF9ub2RlID0gKG5vZGUpOyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIGlmIChfbm9kZS5mbGFncygpICYg
Tm9kZUhhc1ZhckFyZ3MpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIF9jaGlsZElkeCA9IF9ub2RlLmZpcnN0Q2hpbGQoKTsgICAgICAgICAg
ICAgICBcCi0gICAgICAgICAgICAgICAgIF9jaGlsZElkeCA8IF9ub2RlLmZpcnN0Q2hpbGQoKSAr
IF9ub2RlLm51bUNoaWxkcmVuKCk7ICBcCisgICAgICAgIE5vZGUqIF9ub2RlID0gKG5vZGUpOyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGlmIChf
bm9kZS0+ZmxhZ3MoKSAmIE5vZGVIYXNWYXJBcmdzKSB7ICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIF9jaGlsZElkeCA9IF9ub2RlLT5maXJzdENo
aWxkKCk7ICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgIF9jaGlsZElkeCA8IF9ub2Rl
LT5maXJzdENoaWxkKCkgKyBfbm9kZS0+bnVtQ2hpbGRyZW4oKTsgXAogICAgICAgICAgICAgICAg
ICBfY2hpbGRJZHgrKykgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAogICAgICAgICAgICAgICAgIGlmICghIW1fdmFyQXJnQ2hpbGRyZW5bX2NoaWxkSWR4XSkgICAg
ICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICAgICAgICAgICB0aGluZ1RvRG8obV92YXJB
cmdDaGlsZHJlbltfY2hpbGRJZHhdKTsgICAgICAgICAgICAgXAogICAgICAgICAgICAgfSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAog
ICAgICAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgaWYgKCFfbm9kZS5jaGlsZDEoKSkgeyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgIEFTU0VS
VCghX25vZGUuY2hpbGQyKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAg
ICAgICAgICAgICAgICAgICAgICAmJiAhX25vZGUuY2hpbGQzKCkpOyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAorICAgICAgICAgICAgaWYgKCFfbm9kZS0+Y2hpbGQxKCkpIHsgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIEFTU0VSVCgh
X25vZGUtPmNoaWxkMigpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAg
ICAgICAgICAgICAgICAgICAmJiAhX25vZGUtPmNoaWxkMygpKTsgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAogICAgICAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICAgfSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAg
ICAgdGhpbmdUb0RvKF9ub2RlLmNoaWxkMSgpKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAorICAgICAgICAgICAgdGhpbmdUb0RvKF9ub2RlLT5jaGlsZDEoKSk7ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAg
aWYgKCFfbm9kZS5jaGlsZDIoKSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAotICAgICAgICAgICAgICAgIEFTU0VSVCghX25vZGUuY2hpbGQzKCkpOyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgaWYgKCFfbm9kZS0+Y2hpbGQyKCkp
IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAg
IEFTU0VSVCghX25vZGUtPmNoaWxkMygpKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAogICAgICAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgdGhpbmdU
b0RvKF9ub2RlLmNoaWxkMigpKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAor
ICAgICAgICAgICAgdGhpbmdUb0RvKF9ub2RlLT5jaGlsZDIoKSk7ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgaWYgKCFfbm9k
ZS5jaGlsZDMoKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAg
ICAgICAgICAgaWYgKCFfbm9kZS0+Y2hpbGQzKCkpICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAogICAgICAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgdGhpbmdUb0RvKF9u
b2RlLmNoaWxkMygpKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAg
ICAgICAgdGhpbmdUb0RvKF9ub2RlLT5jaGlsZDMoKSk7ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAogICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIH0gd2hpbGUgKGZhbHNlKQogCi12b2lk
IEdyYXBoOjpyZWZDaGlsZHJlbihOb2RlSW5kZXggb3ApCit2b2lkIEdyYXBoOjpyZWZDaGlsZHJl
bihOb2RlKiBvcCkKIHsKICAgICBET19UT19DSElMRFJFTihhdChvcCksIHJlZik7CiB9CiAKLXZv
aWQgR3JhcGg6OmRlcmVmQ2hpbGRyZW4oTm9kZUluZGV4IG9wKQordm9pZCBHcmFwaDo6ZGVyZWZD
aGlsZHJlbihOb2RlKiBvcCkKIHsKICAgICBET19UT19DSElMRFJFTihhdChvcCksIGRlcmVmKTsK
IH0KQEAgLTQzMiwxMiArMzcyLDEyIEBAIHZvaWQgR3JhcGg6OnByZWRpY3RBcmd1bWVudFR5cGVz
KCkKICAgICAgICAgaWYgKCFwcm9maWxlKQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAg
IAotICAgICAgICBhdChtX2FyZ3VtZW50c1thcmddKS52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+cHJl
ZGljdChwcm9maWxlLT5jb21wdXRlVXBkYXRlZFByZWRpY3Rpb24oKSk7CisgICAgICAgIG1fYXJn
dW1lbnRzW2FyZ10tPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5wcmVkaWN0KHByb2ZpbGUtPmNvbXB1
dGVVcGRhdGVkUHJlZGljdGlvbigpKTsKICAgICAgICAgCiAjaWYgREZHX0VOQUJMRShERUJVR19W
RVJCT1NFKQogICAgICAgICBkYXRhTG9nKAogICAgICAgICAgICAgIkFyZ3VtZW50IFsiLCBhcmcs
ICJdIHByZWRpY3Rpb246ICIsCi0gICAgICAgICAgICBTcGVjdWxhdGlvbkR1bXAoYXQobV9hcmd1
bWVudHNbYXJnXSkudmFyaWFibGVBY2Nlc3NEYXRhKCktPnByZWRpY3Rpb24oKSksICJcbiIpOwor
ICAgICAgICAgICAgU3BlY3VsYXRpb25EdW1wKG1fYXJndW1lbnRzW2FyZ10tPnZhcmlhYmxlQWNj
ZXNzRGF0YSgpLT5wcmVkaWN0aW9uKCkpLCAiXG4iKTsKICNlbmRpZgogICAgIH0KIH0KQEAgLTQ1
Niw1MSArMzk2LDU0IEBAIHZvaWQgR3JhcGg6OmhhbmRsZVN1Y2Nlc3NvcihWZWN0b3I8QmxvY2sK
IHZvaWQgR3JhcGg6OmNvbGxlY3RHYXJiYWdlKCkKIHsKICAgICAvLyBGaXJzdCByZXNldCB0aGUg
Y291bnRzIHRvIDAgZm9yIGFsbCBub2Rlcy4KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSBzaXplKCk7
IGktLTspCi0gICAgICAgIGF0KGkpLnNldFJlZkNvdW50KDApOworICAgIGZvciAoQmxvY2tJbmRl
eCBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8IG1fYmxvY2tzLnNpemUoKTsgKytibG9ja0lu
ZGV4KSB7CisgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ibG9ja3NbYmxvY2tJbmRleF0u
Z2V0KCk7CisgICAgICAgIGlmICghYmxvY2spCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgZm9yICh1bnNpZ25lZCBpbmRleEluQmxvY2sgPSBibG9jay0+c2l6ZSgpOyBpbmRleEluQmxv
Y2stLTspCisgICAgICAgICAgICBibG9jay0+YXQoaW5kZXhJbkJsb2NrKS0+c2V0UmVmQ291bnQo
MCk7CisgICAgfQogICAgIAogICAgIC8vIE5vdyBmaW5kIHRoZSByb290czogdGhlIG5vZGVzIHRo
YXQgYXJlIG11c3QtZ2VuZXJhdGUuIFNldCB0aGVpciByZWYgY291bnRzIHRvCiAgICAgLy8gMSBh
bmQgcHV0IHRoZW0gb24gdGhlIHdvcmtsaXN0LgotICAgIFZlY3RvcjxOb2RlSW5kZXgsIDEyOD4g
d29ya2xpc3Q7CisgICAgVmVjdG9yPE5vZGUqLCAxMjg+IHdvcmtsaXN0OwogICAgIGZvciAoQmxv
Y2tJbmRleCBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8IG1fYmxvY2tzLnNpemUoKTsgKyti
bG9ja0luZGV4KSB7CiAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ibG9ja3NbYmxvY2tJ
bmRleF0uZ2V0KCk7CiAgICAgICAgIGlmICghYmxvY2spCiAgICAgICAgICAgICBjb250aW51ZTsK
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpbmRleEluQmxvY2sgPSBibG9jay0+c2l6ZSgpOyBpbmRl
eEluQmxvY2stLTspIHsKLSAgICAgICAgICAgIE5vZGVJbmRleCBub2RlSW5kZXggPSBibG9jay0+
YXQoaW5kZXhJbkJsb2NrKTsKLSAgICAgICAgICAgIE5vZGUmIG5vZGUgPSBhdChub2RlSW5kZXgp
OwotICAgICAgICAgICAgaWYgKCEobm9kZS5mbGFncygpICYgTm9kZU11c3RHZW5lcmF0ZSkpCisg
ICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPmF0KGluZGV4SW5CbG9jayk7CisgICAgICAg
ICAgICBpZiAoIShub2RlLT5mbGFncygpICYgTm9kZU11c3RHZW5lcmF0ZSkpCiAgICAgICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBub2RlLnNldFJlZkNvdW50KDEpOwotICAgICAg
ICAgICAgd29ya2xpc3QuYXBwZW5kKG5vZGVJbmRleCk7CisgICAgICAgICAgICBub2RlLT5zZXRS
ZWZDb3VudCgxKTsKKyAgICAgICAgICAgIHdvcmtsaXN0LmFwcGVuZChub2RlKTsKICAgICAgICAg
fQogICAgIH0KICAgICAKICAgICB3aGlsZSAoIXdvcmtsaXN0LmlzRW1wdHkoKSkgewotICAgICAg
ICBOb2RlSW5kZXggbm9kZUluZGV4ID0gd29ya2xpc3QubGFzdCgpOworICAgICAgICBOb2RlKiBu
b2RlID0gd29ya2xpc3QubGFzdCgpOwogICAgICAgICB3b3JrbGlzdC5yZW1vdmVMYXN0KCk7Ci0g
ICAgICAgIE5vZGUmIG5vZGUgPSBhdChub2RlSW5kZXgpOwotICAgICAgICBBU1NFUlQobm9kZS5z
aG91bGRHZW5lcmF0ZSgpKTsgLy8gSXQgc2hvdWxkIG5vdCBiZSBvbiB0aGUgd29ya2xpc3QgdW5s
ZXNzIGl0J3MgcmVmJ2VkLgotICAgICAgICBpZiAobm9kZS5mbGFncygpICYgTm9kZUhhc1ZhckFy
Z3MpIHsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgY2hpbGRJZHggPSBub2RlLmZpcnN0Q2hp
bGQoKTsKLSAgICAgICAgICAgICAgICAgY2hpbGRJZHggPCBub2RlLmZpcnN0Q2hpbGQoKSArIG5v
ZGUubnVtQ2hpbGRyZW4oKTsKKyAgICAgICAgQVNTRVJUKG5vZGUtPnNob3VsZEdlbmVyYXRlKCkp
OyAvLyBJdCBzaG91bGQgbm90IGJlIG9uIHRoZSB3b3JrbGlzdCB1bmxlc3MgaXQncyByZWYnZWQu
CisgICAgICAgIGlmIChub2RlLT5mbGFncygpICYgTm9kZUhhc1ZhckFyZ3MpIHsKKyAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgY2hpbGRJZHggPSBub2RlLT5maXJzdENoaWxkKCk7CisgICAgICAg
ICAgICAgICAgIGNoaWxkSWR4IDwgbm9kZS0+Zmlyc3RDaGlsZCgpICsgbm9kZS0+bnVtQ2hpbGRy
ZW4oKTsKICAgICAgICAgICAgICAgICAgKytjaGlsZElkeCkgewogICAgICAgICAgICAgICAgIGlm
ICghbV92YXJBcmdDaGlsZHJlbltjaGlsZElkeF0pCiAgICAgICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwotICAgICAgICAgICAgICAgIE5vZGVJbmRleCBjaGlsZE5vZGVJbmRleCA9IG1fdmFyQXJn
Q2hpbGRyZW5bY2hpbGRJZHhdLmluZGV4KCk7Ci0gICAgICAgICAgICAgICAgaWYgKGF0KGNoaWxk
Tm9kZUluZGV4KS5wb3N0Zml4UmVmKCkpCisgICAgICAgICAgICAgICAgTm9kZSogY2hpbGROb2Rl
ID0gbV92YXJBcmdDaGlsZHJlbltjaGlsZElkeF0ubm9kZSgpOworICAgICAgICAgICAgICAgIGlm
IChjaGlsZE5vZGUtPnBvc3RmaXhSZWYoKSkKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7
Ci0gICAgICAgICAgICAgICAgd29ya2xpc3QuYXBwZW5kKGNoaWxkTm9kZUluZGV4KTsKKyAgICAg
ICAgICAgICAgICB3b3JrbGlzdC5hcHBlbmQoY2hpbGROb2RlKTsKICAgICAgICAgICAgIH0KLSAg
ICAgICAgfSBlbHNlIGlmIChub2RlLmNoaWxkMSgpKSB7Ci0gICAgICAgICAgICBpZiAoIWF0KG5v
ZGUuY2hpbGQxKCkpLnBvc3RmaXhSZWYoKSkKLSAgICAgICAgICAgICAgICB3b3JrbGlzdC5hcHBl
bmQobm9kZS5jaGlsZDEoKS5pbmRleCgpKTsKLSAgICAgICAgICAgIGlmIChub2RlLmNoaWxkMigp
KSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFhdChub2RlLmNoaWxkMigpKS5wb3N0Zml4UmVmKCkp
Ci0gICAgICAgICAgICAgICAgICAgIHdvcmtsaXN0LmFwcGVuZChub2RlLmNoaWxkMigpLmluZGV4
KCkpOwotICAgICAgICAgICAgICAgIGlmIChub2RlLmNoaWxkMygpKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIGlmICghYXQobm9kZS5jaGlsZDMoKSkucG9zdGZpeFJlZigpKQotICAgICAgICAgICAg
ICAgICAgICAgICAgd29ya2xpc3QuYXBwZW5kKG5vZGUuY2hpbGQzKCkuaW5kZXgoKSk7CisgICAg
ICAgIH0gZWxzZSBpZiAobm9kZS0+Y2hpbGQxKCkpIHsKKyAgICAgICAgICAgIGlmICghbm9kZS0+
Y2hpbGQxKCktPnBvc3RmaXhSZWYoKSkKKyAgICAgICAgICAgICAgICB3b3JrbGlzdC5hcHBlbmQo
bm9kZS0+Y2hpbGQxKCkubm9kZSgpKTsKKyAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDIoKSkg
eworICAgICAgICAgICAgICAgIGlmICghbm9kZS0+Y2hpbGQyKCktPnBvc3RmaXhSZWYoKSkKKyAg
ICAgICAgICAgICAgICAgICAgd29ya2xpc3QuYXBwZW5kKG5vZGUtPmNoaWxkMigpLm5vZGUoKSk7
CisgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMygpKSB7CisgICAgICAgICAgICAgICAg
ICAgIGlmICghbm9kZS0+Y2hpbGQzKCktPnBvc3RmaXhSZWYoKSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHdvcmtsaXN0LmFwcGVuZChub2RlLT5jaGlsZDMoKS5ub2RlKCkpOwogICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtNTE5LDE0ICs0NjIsMTQgQEAg
dm9pZCBHcmFwaDo6ZGV0ZXJtaW5lUmVhY2hhYmlsaXR5KCkKICAgICAgICAgQmFzaWNCbG9jayog
YmxvY2sgPSBtX2Jsb2Nrc1tpbmRleF0uZ2V0KCk7CiAgICAgICAgIEFTU0VSVChibG9jay0+aXNM
aW5rZWQpOwogICAgICAgICAKLSAgICAgICAgTm9kZSYgbm9kZSA9IGF0KGJsb2NrLT5sYXN0KCkp
OwotICAgICAgICBBU1NFUlQobm9kZS5pc1Rlcm1pbmFsKCkpOworICAgICAgICBOb2RlKiBub2Rl
ID0gYmxvY2stPmxhc3QoKTsKKyAgICAgICAgQVNTRVJUKG5vZGUtPmlzVGVybWluYWwoKSk7CiAg
ICAgICAgIAotICAgICAgICBpZiAobm9kZS5pc0p1bXAoKSkKLSAgICAgICAgICAgIGhhbmRsZVN1
Y2Nlc3Nvcih3b3JrbGlzdCwgaW5kZXgsIG5vZGUudGFrZW5CbG9ja0luZGV4KCkpOwotICAgICAg
ICBlbHNlIGlmIChub2RlLmlzQnJhbmNoKCkpIHsKLSAgICAgICAgICAgIGhhbmRsZVN1Y2Nlc3Nv
cih3b3JrbGlzdCwgaW5kZXgsIG5vZGUudGFrZW5CbG9ja0luZGV4KCkpOwotICAgICAgICAgICAg
aGFuZGxlU3VjY2Vzc29yKHdvcmtsaXN0LCBpbmRleCwgbm9kZS5ub3RUYWtlbkJsb2NrSW5kZXgo
KSk7CisgICAgICAgIGlmIChub2RlLT5pc0p1bXAoKSkKKyAgICAgICAgICAgIGhhbmRsZVN1Y2Nl
c3Nvcih3b3JrbGlzdCwgaW5kZXgsIG5vZGUtPnRha2VuQmxvY2tJbmRleCgpKTsKKyAgICAgICAg
ZWxzZSBpZiAobm9kZS0+aXNCcmFuY2goKSkgeworICAgICAgICAgICAgaGFuZGxlU3VjY2Vzc29y
KHdvcmtsaXN0LCBpbmRleCwgbm9kZS0+dGFrZW5CbG9ja0luZGV4KCkpOworICAgICAgICAgICAg
aGFuZGxlU3VjY2Vzc29yKHdvcmtsaXN0LCBpbmRleCwgbm9kZS0+bm90VGFrZW5CbG9ja0luZGV4
KCkpOwogICAgICAgICB9CiAgICAgfQogfQpAQCAtNTQ2LDggKzQ4OSwxMyBAQCB2b2lkIEdyYXBo
OjpyZXNldFJlYWNoYWJpbGl0eSgpCiAKIHZvaWQgR3JhcGg6OnJlc2V0RXhpdFN0YXRlcygpCiB7
Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gc2l6ZSgpOyBpLS07KQotICAgICAgICBhdChpKS5zZXRD
YW5FeGl0KHRydWUpOworICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gMDsgYmxvY2tJ
bmRleCA8IG1fYmxvY2tzLnNpemUoKTsgKytibG9ja0luZGV4KSB7CisgICAgICAgIEJhc2ljQmxv
Y2sqIGJsb2NrID0gbV9ibG9ja3NbYmxvY2tJbmRleF0uZ2V0KCk7CisgICAgICAgIGlmICghYmxv
Y2spCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbmRleElu
QmxvY2sgPSBibG9jay0+c2l6ZSgpOyBpbmRleEluQmxvY2stLTspCisgICAgICAgICAgICBibG9j
ay0+YXQoaW5kZXhJbkJsb2NrKS0+c2V0Q2FuRXhpdCh0cnVlKTsKKyAgICB9CiB9CiAKIH0gfSAv
LyBuYW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
R3JhcGguaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBo
LmgJKHJldmlzaW9uIDE0MDUwNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3Jh
cGguaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDExLCAyMDEyLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzUsNyArMzUsOSBAQAogI2luY2x1ZGUgIkRGR0Fz
c2VtYmx5SGVscGVycy5oIgogI2luY2x1ZGUgIkRGR0Jhc2ljQmxvY2suaCIKICNpbmNsdWRlICJE
RkdEb21pbmF0b3JzLmgiCisjaW5jbHVkZSAiREZHTG9uZ0xpdmVkU3RhdGUuaCIKICNpbmNsdWRl
ICJERkdOb2RlLmgiCisjaW5jbHVkZSAiREZHTm9kZUFsbG9jYXRvci5oIgogI2luY2x1ZGUgIkRG
R1ZhcmlhZGljRnVuY3Rpb24uaCIKICNpbmNsdWRlICJKU1N0YWNrLmgiCiAjaW5jbHVkZSAiTWV0
aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5oIgpAQCAtODMsNTQgKzg1LDQ4IEBAIGVudW0gQWRk
U3BlY3VsYXRpb25Nb2RlIHsKIC8vCiAvLyA9PT0gR3JhcGggPT09CiAvLwotLy8gVGhlIGRhdGFm
bG93IGdyYXBoIGlzIGFuIG9yZGVyZWQgdmVjdG9yIG9mIG5vZGVzLgogLy8gVGhlIG9yZGVyIG1h
eSBiZSBzaWduaWZpY2FudCBmb3Igbm9kZXMgd2l0aCBzaWRlLWVmZmVjdHMgKHByb3BlcnR5IGFj
Y2Vzc2VzLCB2YWx1ZSBjb252ZXJzaW9ucykuCiAvLyBOb2RlcyB0aGF0IGFyZSAnZGVhZCcgcmVt
YWluIGluIHRoZSB2ZWN0b3Igd2l0aCByZWZDb3VudCAwLgotY2xhc3MgR3JhcGggOiBwdWJsaWMg
VmVjdG9yPE5vZGUsIDY0PiB7CitjbGFzcyBHcmFwaCB7CiBwdWJsaWM6CiAgICAgR3JhcGgoSlNH
bG9iYWxEYXRhJiwgQ29kZUJsb2NrKiwgdW5zaWduZWQgb3NyRW50cnlCeXRlY29kZUluZGV4LCBj
b25zdCBPcGVyYW5kczxKU1ZhbHVlPiYgbXVzdEhhbmRsZVZhbHVlcyk7Ci0gICAgCi0gICAgdXNp
bmcgVmVjdG9yPE5vZGUsIDY0Pjo6b3BlcmF0b3JbXTsKLSAgICB1c2luZyBWZWN0b3I8Tm9kZSwg
NjQ+OjphdDsKLSAgICAKLSAgICBOb2RlJiBvcGVyYXRvcltdKEVkZ2Ugbm9kZVVzZSkgeyByZXR1
cm4gYXQobm9kZVVzZS5pbmRleCgpKTsgfQotICAgIGNvbnN0IE5vZGUmIG9wZXJhdG9yW10oRWRn
ZSBub2RlVXNlKSBjb25zdCB7IHJldHVybiBhdChub2RlVXNlLmluZGV4KCkpOyB9Ci0gICAgCi0g
ICAgTm9kZSYgYXQoRWRnZSBub2RlVXNlKSB7IHJldHVybiBhdChub2RlVXNlLmluZGV4KCkpOyB9
Ci0gICAgY29uc3QgTm9kZSYgYXQoRWRnZSBub2RlVXNlKSBjb25zdCB7IHJldHVybiBhdChub2Rl
VXNlLmluZGV4KCkpOyB9CisgICAgfkdyYXBoKCk7CiAgICAgCiAgICAgLy8gTWFyayBhIG5vZGUg
YXMgYmVpbmcgcmVmZXJlbmNlZC4KLSAgICBOb2RlSW5kZXggcmVmKE5vZGVJbmRleCBub2RlSW5k
ZXgpCisgICAgTm9kZSogcmVmKE5vZGUqIG5vZGUpCiAgICAgewotICAgICAgICBOb2RlJiBub2Rl
ID0gYXQobm9kZUluZGV4KTsKICAgICAgICAgLy8gSWYgdGhlIHZhbHVlIChiZWZvcmUgaW5jcmVt
ZW50aW5nKSB3YXMgYXQgcmVmQ291bnQgemVybyB0aGVuIHdlIG5lZWQgdG8gcmVmIGl0cyBjaGls
ZHJlbi4KLSAgICAgICAgaWYgKCFub2RlLnBvc3RmaXhSZWYoKSkKLSAgICAgICAgICAgIHJlZkNo
aWxkcmVuKG5vZGVJbmRleCk7Ci0gICAgICAgIHJldHVybiBub2RlSW5kZXg7CisgICAgICAgIGlm
ICghbm9kZS0+cG9zdGZpeFJlZigpKQorICAgICAgICAgICAgcmVmQ2hpbGRyZW4obm9kZSk7Cisg
ICAgICAgIHJldHVybiBub2RlOwogICAgIH0KICAgICBFZGdlIHJlZihFZGdlIG5vZGVVc2UpCiAg
ICAgewotICAgICAgICByZWYobm9kZVVzZS5pbmRleCgpKTsKKyAgICAgICAgcmVmKG5vZGVVc2Uu
bm9kZSgpKTsKICAgICAgICAgcmV0dXJuIG5vZGVVc2U7CiAgICAgfQogICAgIAotICAgIHZvaWQg
ZGVyZWYoTm9kZUluZGV4IG5vZGVJbmRleCkKKyAgICB2b2lkIGRlcmVmKE5vZGUqIG5vZGUpCiAg
ICAgewotICAgICAgICBpZiAoYXQobm9kZUluZGV4KS5wb3N0Zml4RGVyZWYoKSA9PSAxKQotICAg
ICAgICAgICAgZGVyZWZDaGlsZHJlbihub2RlSW5kZXgpOworI2lmICFBU1NFUlRfRElTQUJMRUQK
KyAgICAgICAgaWYgKCFub2RlLT5yZWZDb3VudCgpKQorICAgICAgICAgICAgZHVtcCgpOworI2Vu
ZGlmCisgICAgICAgIGlmIChub2RlLT5wb3N0Zml4RGVyZWYoKSA9PSAxKQorICAgICAgICAgICAg
ZGVyZWZDaGlsZHJlbihub2RlKTsKICAgICB9CiAgICAgdm9pZCBkZXJlZihFZGdlIG5vZGVVc2Up
CiAgICAgewotICAgICAgICBkZXJlZihub2RlVXNlLmluZGV4KCkpOworICAgICAgICBkZXJlZihu
b2RlVXNlLm5vZGUoKSk7CiAgICAgfQogICAgIAotICAgIHZvaWQgY2hhbmdlSW5kZXgoRWRnZSYg
ZWRnZSwgTm9kZUluZGV4IG5ld0luZGV4LCBib29sIGNoYW5nZVJlZiA9IHRydWUpCisgICAgdm9p
ZCBjaGFuZ2VDaGlsZChFZGdlJiBlZGdlLCBOb2RlKiBuZXdOb2RlLCBib29sIGNoYW5nZVJlZiA9
IHRydWUpCiAgICAgewogICAgICAgICBpZiAoY2hhbmdlUmVmKSB7Ci0gICAgICAgICAgICByZWYo
bmV3SW5kZXgpOwotICAgICAgICAgICAgZGVyZWYoZWRnZS5pbmRleCgpKTsKKyAgICAgICAgICAg
IHJlZihuZXdOb2RlKTsKKyAgICAgICAgICAgIGRlcmVmKGVkZ2Uubm9kZSgpKTsKICAgICAgICAg
fQotICAgICAgICBlZGdlLnNldEluZGV4KG5ld0luZGV4KTsKKyAgICAgICAgZWRnZS5zZXROb2Rl
KG5ld05vZGUpOwogICAgIH0KICAgICAKICAgICB2b2lkIGNoYW5nZUVkZ2UoRWRnZSYgZWRnZSwg
RWRnZSBuZXdFZGdlLCBib29sIGNoYW5nZVJlZiA9IHRydWUpCkBAIC0xNDIsMTEgKzEzOCwxMSBA
QCBwdWJsaWM6CiAgICAgICAgIGVkZ2UgPSBuZXdFZGdlOwogICAgIH0KICAgICAKLSAgICB2b2lk
IGNvbXBhcmVBbmRTd2FwKEVkZ2UmIGVkZ2UsIE5vZGVJbmRleCBvbGRJbmRleCwgTm9kZUluZGV4
IG5ld0luZGV4LCBib29sIGNoYW5nZVJlZikKKyAgICB2b2lkIGNvbXBhcmVBbmRTd2FwKEVkZ2Um
IGVkZ2UsIE5vZGUqIG9sZE5vZGUsIE5vZGUqIG5ld05vZGUsIGJvb2wgY2hhbmdlUmVmKQogICAg
IHsKLSAgICAgICAgaWYgKGVkZ2UuaW5kZXgoKSAhPSBvbGRJbmRleCkKKyAgICAgICAgaWYgKGVk
Z2Uubm9kZSgpICE9IG9sZE5vZGUpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGNoYW5n
ZUluZGV4KGVkZ2UsIG5ld0luZGV4LCBjaGFuZ2VSZWYpOworICAgICAgICBjaGFuZ2VDaGlsZChl
ZGdlLCBuZXdOb2RlLCBjaGFuZ2VSZWYpOwogICAgIH0KICAgICAKICAgICB2b2lkIGNvbXBhcmVB
bmRTd2FwKEVkZ2UmIGVkZ2UsIEVkZ2Ugb2xkRWRnZSwgRWRnZSBuZXdFZGdlLCBib29sIGNoYW5n
ZVJlZikKQEAgLTE1Niw0NCArMTUyLDI5IEBAIHB1YmxpYzoKICAgICAgICAgY2hhbmdlRWRnZShl
ZGdlLCBuZXdFZGdlLCBjaGFuZ2VSZWYpOwogICAgIH0KICAgICAKLSAgICB2b2lkIGNsZWFyQW5k
RGVyZWZDaGlsZDEoTm9kZSYgbm9kZSkKKyAgICB2b2lkIGNsZWFyQW5kRGVyZWZDaGlsZChOb2Rl
KiBub2RlLCB1bnNpZ25lZCBpbmRleCkKICAgICB7Ci0gICAgICAgIGlmICghbm9kZS5jaGlsZDEo
KSkKKyAgICAgICAgaWYgKCFub2RlLT5jaGlsZHJlbi5jaGlsZChpbmRleCkpCiAgICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIGRlcmVmKG5vZGUuY2hpbGQxKCkpOwotICAgICAgICBub2RlLmNo
aWxkcmVuLmNoaWxkMSgpID0gRWRnZSgpOwotICAgIH0KLQotICAgIHZvaWQgY2xlYXJBbmREZXJl
ZkNoaWxkMihOb2RlJiBub2RlKQotICAgIHsKLSAgICAgICAgaWYgKCFub2RlLmNoaWxkMigpKQot
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBkZXJlZihub2RlLmNoaWxkMigpKTsKLSAgICAg
ICAgbm9kZS5jaGlsZHJlbi5jaGlsZDIoKSA9IEVkZ2UoKTsKLSAgICB9Ci0KLSAgICB2b2lkIGNs
ZWFyQW5kRGVyZWZDaGlsZDMoTm9kZSYgbm9kZSkKLSAgICB7Ci0gICAgICAgIGlmICghbm9kZS5j
aGlsZDMoKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgZGVyZWYobm9kZS5jaGlsZDMo
KSk7Ci0gICAgICAgIG5vZGUuY2hpbGRyZW4uY2hpbGQzKCkgPSBFZGdlKCk7CisgICAgICAgIGRl
cmVmKG5vZGUtPmNoaWxkcmVuLmNoaWxkKGluZGV4KSk7CisgICAgICAgIG5vZGUuY2hpbGRyZW4u
c2V0Q2hpbGQoaW5kZXgsIEVkZ2UoKSk7CiAgICAgfQorICAgIHZvaWQgY2xlYXJBbmREZXJlZkNo
aWxkMShOb2RlKiBub2RlKSB7IGNsZWFyQW5kRGVyZWZDaGlsZChub2RlLCAwKTsgfQorICAgIHZv
aWQgY2xlYXJBbmREZXJlZkNoaWxkMihOb2RlKiBub2RlKSB7IGNsZWFyQW5kRGVyZWZDaGlsZChu
b2RlLCAxKTsgfQorICAgIHZvaWQgY2xlYXJBbmREZXJlZkNoaWxkMyhOb2RlKiBub2RlKSB7IGNs
ZWFyQW5kRGVyZWZDaGlsZChub2RlLCAyKTsgfQogICAgIAogI2RlZmluZSBERkdfREVGSU5FX0FE
RF9OT0RFKHRlbXBsYXRlUHJlLCB0ZW1wbGF0ZVBvc3QsIHR5cGVQYXJhbXMsIHZhbHVlUGFyYW1z
Q29tbWEsIHZhbHVlUGFyYW1zLCB2YWx1ZUFyZ3MpIFwKLSAgICB0ZW1wbGF0ZVByZSB0eXBlUGFy
YW1zIHRlbXBsYXRlUG9zdCBOb2RlSW5kZXggYWRkTm9kZShSZWZDaGlsZHJlbk1vZGUgcmVmQ2hp
bGRyZW5Nb2RlLCBSZWZOb2RlTW9kZSByZWZOb2RlTW9kZSwgU3BlY3VsYXRlZFR5cGUgdHlwZSB2
YWx1ZVBhcmFtc0NvbW1hIHZhbHVlUGFyYW1zKSBcCisgICAgdGVtcGxhdGVQcmUgdHlwZVBhcmFt
cyB0ZW1wbGF0ZVBvc3QgTm9kZSogYWRkTm9kZShSZWZDaGlsZHJlbk1vZGUgcmVmQ2hpbGRyZW5N
b2RlLCBSZWZOb2RlTW9kZSByZWZOb2RlTW9kZSwgU3BlY3VsYXRlZFR5cGUgdHlwZSB2YWx1ZVBh
cmFtc0NvbW1hIHZhbHVlUGFyYW1zKSBcCiAgICAgeyBcCi0gICAgICAgIE5vZGUgbm9kZSA9IE5v
ZGUodmFsdWVBcmdzKTsgXAotICAgICAgICBub2RlLnByZWRpY3QodHlwZSk7IFwKLSAgICAgICAg
aWYgKG5vZGUuZmxhZ3MoKSAmIE5vZGVNdXN0R2VuZXJhdGUpIFwKLSAgICAgICAgICAgIG5vZGUu
cmVmKCk7IFwKKyAgICAgICAgTm9kZSogbm9kZSA9IG5ldyAobV9hbGxvY2F0b3IpIE5vZGUodmFs
dWVBcmdzKTsgXAorICAgICAgICBub2RlLT5wcmVkaWN0KHR5cGUpOyBcCisgICAgICAgIGlmIChu
b2RlLT5mbGFncygpICYgTm9kZU11c3RHZW5lcmF0ZSkgXAorICAgICAgICAgICAgbm9kZS0+cmVm
KCk7IFwKICAgICAgICAgaWYgKHJlZk5vZGVNb2RlID09IFJlZk5vZGUpIFwKLSAgICAgICAgICAg
IG5vZGUucmVmKCk7IFwKLSAgICAgICAgTm9kZUluZGV4IHJlc3VsdCA9IHNpemUoKTsgXAotICAg
ICAgICBhcHBlbmQobm9kZSk7IFwKKyAgICAgICAgICAgIG5vZGUtPnJlZigpOyBcCiAgICAgICAg
IGlmIChyZWZDaGlsZHJlbk1vZGUgPT0gUmVmQ2hpbGRyZW4pIFwKLSAgICAgICAgICAgIHJlZkNo
aWxkcmVuKHJlc3VsdCk7IFwKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsgXAorICAgICAgICAgICAg
cmVmQ2hpbGRyZW4obm9kZSk7IFwKKyAgICAgICAgcmV0dXJuIG5vZGU7IFwKICAgICB9CiAgICAg
REZHX1ZBUklBRElDX1RFTVBMQVRFX0ZVTkNUSU9OKERGR19ERUZJTkVfQUREX05PREUpCiAjdW5k
ZWYgREZHX0RFRklORV9BRERfTk9ERQpAQCAtMjA0LDE0ICsxODUsMTQgQEAgcHVibGljOgogICAg
IC8vIHJlZmVyZW5jZSBjb3VudHMgYWNjb3JkaW5nIHRvIHJlYWNoYWJpbGl0eS4KICAgICB2b2lk
IGNvbGxlY3RHYXJiYWdlKCk7CiAgICAgCi0gICAgdm9pZCBjb252ZXJ0VG9Db25zdGFudChOb2Rl
SW5kZXggbm9kZUluZGV4LCB1bnNpZ25lZCBjb25zdGFudE51bWJlcikKKyAgICB2b2lkIGNvbnZl
cnRUb0NvbnN0YW50KE5vZGUqIG5vZGUsIHVuc2lnbmVkIGNvbnN0YW50TnVtYmVyKQogICAgIHsK
LSAgICAgICAgYXQobm9kZUluZGV4KS5jb252ZXJ0VG9Db25zdGFudChjb25zdGFudE51bWJlcik7
CisgICAgICAgIG5vZGUtPmNvbnZlcnRUb0NvbnN0YW50KGNvbnN0YW50TnVtYmVyKTsKICAgICB9
CiAgICAgCi0gICAgdm9pZCBjb252ZXJ0VG9Db25zdGFudChOb2RlSW5kZXggbm9kZUluZGV4LCBK
U1ZhbHVlIHZhbHVlKQorICAgIHZvaWQgY29udmVydFRvQ29uc3RhbnQoTm9kZSogbm9kZSwgSlNW
YWx1ZSB2YWx1ZSkKICAgICB7Ci0gICAgICAgIGNvbnZlcnRUb0NvbnN0YW50KG5vZGVJbmRleCwg
bV9jb2RlQmxvY2stPmFkZE9yRmluZENvbnN0YW50KHZhbHVlKSk7CisgICAgICAgIGNvbnZlcnRU
b0NvbnN0YW50KG5vZGUsIG1fY29kZUJsb2NrLT5hZGRPckZpbmRDb25zdGFudCh2YWx1ZSkpOwog
ICAgIH0KIAogICAgIC8vIENvZGVCbG9jayBpcyBvcHRpb25hbCwgYnV0IG1heSBhbGxvdyBhZGRp
dGlvbmFsIGluZm9ybWF0aW9uIHRvIGJlIGR1bXBlZCAoZS5nLiBJZGVudGlmaWVyIG5hbWVzKS4K
QEAgLTIxOSwxMjUgKzIwMCwxMjUgQEAgcHVibGljOgogICAgIGVudW0gUGhpTm9kZUR1bXBNb2Rl
IHsgRHVtcExpdmVQaGlzT25seSwgRHVtcEFsbFBoaXMgfTsKICAgICB2b2lkIGR1bXBCbG9ja0hl
YWRlcihQcmludFN0cmVhbSYsIGNvbnN0IGNoYXIqIHByZWZpeCwgQmxvY2tJbmRleCwgUGhpTm9k
ZUR1bXBNb2RlKTsKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mLCBFZGdlKTsKLSAgICB2b2lk
IGR1bXAoUHJpbnRTdHJlYW0mLCBjb25zdCBjaGFyKiBwcmVmaXgsIE5vZGVJbmRleCk7Ci0gICAg
c3RhdGljIGludCBhbW91bnRPZk5vZGVXaGl0ZVNwYWNlKE5vZGUmKTsKLSAgICBzdGF0aWMgdm9p
ZCBwcmludE5vZGVXaGl0ZVNwYWNlKFByaW50U3RyZWFtJiwgTm9kZSYpOworICAgIHZvaWQgZHVt
cChQcmludFN0cmVhbSYsIGNvbnN0IGNoYXIqIHByZWZpeCwgTm9kZSopOworICAgIHN0YXRpYyBp
bnQgYW1vdW50T2ZOb2RlV2hpdGVTcGFjZShOb2RlKik7CisgICAgc3RhdGljIHZvaWQgcHJpbnRO
b2RlV2hpdGVTcGFjZShQcmludFN0cmVhbSYsIE5vZGUqKTsKIAogICAgIC8vIER1bXAgdGhlIGNv
ZGUgb3JpZ2luIG9mIHRoZSBnaXZlbiBub2RlIGFzIGEgZGlmZiBmcm9tIHRoZSBjb2RlIG9yaWdp
biBvZiB0aGUKICAgICAvLyBwcmVjZWRpbmcgbm9kZS4gUmV0dXJucyB0cnVlIGlmIGFueXRoaW5n
IHdhcyBwcmludGVkLgotICAgIGJvb2wgZHVtcENvZGVPcmlnaW4oUHJpbnRTdHJlYW0mLCBjb25z
dCBjaGFyKiBwcmVmaXgsIE5vZGVJbmRleCwgTm9kZUluZGV4KTsKKyAgICBib29sIGR1bXBDb2Rl
T3JpZ2luKFByaW50U3RyZWFtJiwgY29uc3QgY2hhciogcHJlZml4LCBOb2RlKiBwcmV2aW91c05v
ZGUsIE5vZGUqIGN1cnJlbnROb2RlKTsKIAogICAgIEJsb2NrSW5kZXggYmxvY2tJbmRleEZvckJ5
dGVjb2RlT2Zmc2V0KFZlY3RvcjxCbG9ja0luZGV4PiYgYmxvY2tzLCB1bnNpZ25lZCBieXRlY29k
ZUJlZ2luKTsKIAotICAgIFNwZWN1bGF0ZWRUeXBlIGdldEpTQ29uc3RhbnRTcGVjdWxhdGlvbihO
b2RlJiBub2RlKQorICAgIFNwZWN1bGF0ZWRUeXBlIGdldEpTQ29uc3RhbnRTcGVjdWxhdGlvbihO
b2RlKiBub2RlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIHNwZWN1bGF0aW9uRnJvbVZhbHVlKG5v
ZGUudmFsdWVPZkpTQ29uc3RhbnQobV9jb2RlQmxvY2spKTsKKyAgICAgICAgcmV0dXJuIHNwZWN1
bGF0aW9uRnJvbVZhbHVlKG5vZGUtPnZhbHVlT2ZKU0NvbnN0YW50KG1fY29kZUJsb2NrKSk7CiAg
ICAgfQogICAgIAotICAgIEFkZFNwZWN1bGF0aW9uTW9kZSBhZGRTcGVjdWxhdGlvbk1vZGUoTm9k
ZSYgYWRkLCBib29sIGxlZnRTaG91bGRTcGVjdWxhdGVJbnRlZ2VyLCBib29sIHJpZ2h0U2hvdWxk
U3BlY3VsYXRlSW50ZWdlcikKKyAgICBBZGRTcGVjdWxhdGlvbk1vZGUgYWRkU3BlY3VsYXRpb25N
b2RlKE5vZGUqIGFkZCwgYm9vbCBsZWZ0U2hvdWxkU3BlY3VsYXRlSW50ZWdlciwgYm9vbCByaWdo
dFNob3VsZFNwZWN1bGF0ZUludGVnZXIpCiAgICAgewotICAgICAgICBBU1NFUlQoYWRkLm9wKCkg
PT0gVmFsdWVBZGQgfHwgYWRkLm9wKCkgPT0gQXJpdGhBZGQgfHwgYWRkLm9wKCkgPT0gQXJpdGhT
dWIpOworICAgICAgICBBU1NFUlQoYWRkLT5vcCgpID09IFZhbHVlQWRkIHx8IGFkZC0+b3AoKSA9
PSBBcml0aEFkZCB8fCBhZGQtPm9wKCkgPT0gQXJpdGhTdWIpOwogICAgICAgICAKLSAgICAgICAg
Tm9kZSYgbGVmdCA9IGF0KGFkZC5jaGlsZDEoKSk7Ci0gICAgICAgIE5vZGUmIHJpZ2h0ID0gYXQo
YWRkLmNoaWxkMigpKTsKKyAgICAgICAgTm9kZSogbGVmdCA9IGFkZC0+Y2hpbGQxKCkubm9kZSgp
OworICAgICAgICBOb2RlKiByaWdodCA9IGFkZC0+Y2hpbGQyKCkubm9kZSgpOwogICAgICAgICAK
LSAgICAgICAgaWYgKGxlZnQuaGFzQ29uc3RhbnQoKSkKKyAgICAgICAgaWYgKGxlZnQtPmhhc0Nv
bnN0YW50KCkpCiAgICAgICAgICAgICByZXR1cm4gYWRkSW1tZWRpYXRlU2hvdWxkU3BlY3VsYXRl
SW50ZWdlcihhZGQsIHJpZ2h0U2hvdWxkU3BlY3VsYXRlSW50ZWdlciwgbGVmdCk7Ci0gICAgICAg
IGlmIChyaWdodC5oYXNDb25zdGFudCgpKQorICAgICAgICBpZiAocmlnaHQtPmhhc0NvbnN0YW50
KCkpCiAgICAgICAgICAgICByZXR1cm4gYWRkSW1tZWRpYXRlU2hvdWxkU3BlY3VsYXRlSW50ZWdl
cihhZGQsIGxlZnRTaG91bGRTcGVjdWxhdGVJbnRlZ2VyLCByaWdodCk7CiAgICAgICAgIAotICAg
ICAgICByZXR1cm4gKGxlZnRTaG91bGRTcGVjdWxhdGVJbnRlZ2VyICYmIHJpZ2h0U2hvdWxkU3Bl
Y3VsYXRlSW50ZWdlciAmJiBhZGQuY2FuU3BlY3VsYXRlSW50ZWdlcigpKSA/IFNwZWN1bGF0ZUlu
dGVnZXIgOiBEb250U3BlY3VsYXRlSW50ZWdlcjsKKyAgICAgICAgcmV0dXJuIChsZWZ0U2hvdWxk
U3BlY3VsYXRlSW50ZWdlciAmJiByaWdodFNob3VsZFNwZWN1bGF0ZUludGVnZXIgJiYgYWRkLT5j
YW5TcGVjdWxhdGVJbnRlZ2VyKCkpID8gU3BlY3VsYXRlSW50ZWdlciA6IERvbnRTcGVjdWxhdGVJ
bnRlZ2VyOwogICAgIH0KICAgICAKLSAgICBBZGRTcGVjdWxhdGlvbk1vZGUgdmFsdWVBZGRTcGVj
dWxhdGlvbk1vZGUoTm9kZSYgYWRkKQorICAgIEFkZFNwZWN1bGF0aW9uTW9kZSB2YWx1ZUFkZFNw
ZWN1bGF0aW9uTW9kZShOb2RlKiBhZGQpCiAgICAgewotICAgICAgICByZXR1cm4gYWRkU3BlY3Vs
YXRpb25Nb2RlKGFkZCwgYXQoYWRkLmNoaWxkMSgpKS5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyRXhw
ZWN0aW5nRGVmaW5lZCgpLCBhdChhZGQuY2hpbGQyKCkpLnNob3VsZFNwZWN1bGF0ZUludGVnZXJF
eHBlY3RpbmdEZWZpbmVkKCkpOworICAgICAgICByZXR1cm4gYWRkU3BlY3VsYXRpb25Nb2RlKGFk
ZCwgYWRkLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlSW50ZWdlckV4cGVjdGluZ0RlZmluZWQo
KSwgYWRkLT5jaGlsZDIoKS0+c2hvdWxkU3BlY3VsYXRlSW50ZWdlckV4cGVjdGluZ0RlZmluZWQo
KSk7CiAgICAgfQogICAgIAotICAgIEFkZFNwZWN1bGF0aW9uTW9kZSBhcml0aEFkZFNwZWN1bGF0
aW9uTW9kZShOb2RlJiBhZGQpCisgICAgQWRkU3BlY3VsYXRpb25Nb2RlIGFyaXRoQWRkU3BlY3Vs
YXRpb25Nb2RlKE5vZGUqIGFkZCkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZGRTcGVjdWxhdGlv
bk1vZGUoYWRkLCBhdChhZGQuY2hpbGQxKCkpLnNob3VsZFNwZWN1bGF0ZUludGVnZXJGb3JBcml0
aG1ldGljKCksIGF0KGFkZC5jaGlsZDIoKSkuc2hvdWxkU3BlY3VsYXRlSW50ZWdlckZvckFyaXRo
bWV0aWMoKSk7CisgICAgICAgIHJldHVybiBhZGRTcGVjdWxhdGlvbk1vZGUoYWRkLCBhZGQtPmNo
aWxkMSgpLT5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyRm9yQXJpdGhtZXRpYygpLCBhZGQtPmNoaWxk
MigpLT5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyRm9yQXJpdGhtZXRpYygpKTsKICAgICB9CiAgICAg
Ci0gICAgQWRkU3BlY3VsYXRpb25Nb2RlIGFkZFNwZWN1bGF0aW9uTW9kZShOb2RlJiBhZGQpCisg
ICAgQWRkU3BlY3VsYXRpb25Nb2RlIGFkZFNwZWN1bGF0aW9uTW9kZShOb2RlKiBhZGQpCiAgICAg
ewotICAgICAgICBpZiAoYWRkLm9wKCkgPT0gVmFsdWVBZGQpCisgICAgICAgIGlmIChhZGQtPm9w
KCkgPT0gVmFsdWVBZGQpCiAgICAgICAgICAgICByZXR1cm4gdmFsdWVBZGRTcGVjdWxhdGlvbk1v
ZGUoYWRkKTsKICAgICAgICAgCiAgICAgICAgIHJldHVybiBhcml0aEFkZFNwZWN1bGF0aW9uTW9k
ZShhZGQpOwogICAgIH0KICAgICAKLSAgICBib29sIGFkZFNob3VsZFNwZWN1bGF0ZUludGVnZXIo
Tm9kZSYgYWRkKQorICAgIGJvb2wgYWRkU2hvdWxkU3BlY3VsYXRlSW50ZWdlcihOb2RlKiBhZGQp
CiAgICAgewogICAgICAgICByZXR1cm4gYWRkU3BlY3VsYXRpb25Nb2RlKGFkZCkgIT0gRG9udFNw
ZWN1bGF0ZUludGVnZXI7CiAgICAgfQogICAgIAotICAgIGJvb2wgbXVsU2hvdWxkU3BlY3VsYXRl
SW50ZWdlcihOb2RlJiBtdWwpCisgICAgYm9vbCBtdWxTaG91bGRTcGVjdWxhdGVJbnRlZ2VyKE5v
ZGUqIG11bCkKICAgICB7Ci0gICAgICAgIEFTU0VSVChtdWwub3AoKSA9PSBBcml0aE11bCk7Cisg
ICAgICAgIEFTU0VSVChtdWwtPm9wKCkgPT0gQXJpdGhNdWwpOwogICAgICAgICAKLSAgICAgICAg
Tm9kZSYgbGVmdCA9IGF0KG11bC5jaGlsZDEoKSk7Ci0gICAgICAgIE5vZGUmIHJpZ2h0ID0gYXQo
bXVsLmNoaWxkMigpKTsKKyAgICAgICAgTm9kZSogbGVmdCA9IG11bC0+Y2hpbGQxKCkubm9kZSgp
OworICAgICAgICBOb2RlKiByaWdodCA9IG11bC0+Y2hpbGQyKCkubm9kZSgpOwogICAgICAgICAK
ICAgICAgICAgcmV0dXJuIE5vZGU6OnNob3VsZFNwZWN1bGF0ZUludGVnZXJGb3JBcml0aG1ldGlj
KGxlZnQsIHJpZ2h0KSAmJiBtdWwuY2FuU3BlY3VsYXRlSW50ZWdlcigpOwogICAgIH0KICAgICAK
LSAgICBib29sIG5lZ2F0ZVNob3VsZFNwZWN1bGF0ZUludGVnZXIoTm9kZSYgbmVnYXRlKQorICAg
IGJvb2wgbmVnYXRlU2hvdWxkU3BlY3VsYXRlSW50ZWdlcihOb2RlKiBuZWdhdGUpCiAgICAgewot
ICAgICAgICBBU1NFUlQobmVnYXRlLm9wKCkgPT0gQXJpdGhOZWdhdGUpOwotICAgICAgICByZXR1
cm4gYXQobmVnYXRlLmNoaWxkMSgpKS5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyRm9yQXJpdGhtZXRp
YygpICYmIG5lZ2F0ZS5jYW5TcGVjdWxhdGVJbnRlZ2VyKCk7CisgICAgICAgIEFTU0VSVChuZWdh
dGUtPm9wKCkgPT0gQXJpdGhOZWdhdGUpOworICAgICAgICByZXR1cm4gbmVnYXRlLT5jaGlsZDEo
KS0+c2hvdWxkU3BlY3VsYXRlSW50ZWdlckZvckFyaXRobWV0aWMoKSAmJiBuZWdhdGUtPmNhblNw
ZWN1bGF0ZUludGVnZXIoKTsKICAgICB9CiAgICAgCi0gICAgYm9vbCBhZGRTaG91bGRTcGVjdWxh
dGVJbnRlZ2VyKE5vZGVJbmRleCBub2RlSW5kZXgpCisgICAgYm9vbCBhZGRTaG91bGRTcGVjdWxh
dGVJbnRlZ2VyKE5vZGUqIG5vZGUpCiAgICAgewotICAgICAgICByZXR1cm4gYWRkU2hvdWxkU3Bl
Y3VsYXRlSW50ZWdlcihhdChub2RlSW5kZXgpKTsKKyAgICAgICAgcmV0dXJuIGFkZFNob3VsZFNw
ZWN1bGF0ZUludGVnZXIobm9kZSk7CiAgICAgfQogICAgIAogICAgIC8vIEhlbHBlciBtZXRob2Rz
IHRvIGNoZWNrIG5vZGVzIGZvciBjb25zdGFudHMuCi0gICAgYm9vbCBpc0NvbnN0YW50KE5vZGVJ
bmRleCBub2RlSW5kZXgpCisgICAgYm9vbCBpc0NvbnN0YW50KE5vZGUqIG5vZGUpCiAgICAgewot
ICAgICAgICByZXR1cm4gYXQobm9kZUluZGV4KS5oYXNDb25zdGFudCgpOworICAgICAgICByZXR1
cm4gbm9kZS0+aGFzQ29uc3RhbnQoKTsKICAgICB9Ci0gICAgYm9vbCBpc0pTQ29uc3RhbnQoTm9k
ZUluZGV4IG5vZGVJbmRleCkKKyAgICBib29sIGlzSlNDb25zdGFudChOb2RlKiBub2RlKQogICAg
IHsKLSAgICAgICAgcmV0dXJuIGF0KG5vZGVJbmRleCkuaGFzQ29uc3RhbnQoKTsKKyAgICAgICAg
cmV0dXJuIG5vZGUtPmhhc0NvbnN0YW50KCk7CiAgICAgfQotICAgIGJvb2wgaXNJbnQzMkNvbnN0
YW50KE5vZGVJbmRleCBub2RlSW5kZXgpCisgICAgYm9vbCBpc0ludDMyQ29uc3RhbnQoTm9kZSog
bm9kZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBhdChub2RlSW5kZXgpLmlzSW50MzJDb25zdGFu
dChtX2NvZGVCbG9jayk7CisgICAgICAgIHJldHVybiBub2RlLT5pc0ludDMyQ29uc3RhbnQobV9j
b2RlQmxvY2spOwogICAgIH0KLSAgICBib29sIGlzRG91YmxlQ29uc3RhbnQoTm9kZUluZGV4IG5v
ZGVJbmRleCkKKyAgICBib29sIGlzRG91YmxlQ29uc3RhbnQoTm9kZSogbm9kZSkKICAgICB7Ci0g
ICAgICAgIHJldHVybiBhdChub2RlSW5kZXgpLmlzRG91YmxlQ29uc3RhbnQobV9jb2RlQmxvY2sp
OworICAgICAgICByZXR1cm4gbm9kZS0+aXNEb3VibGVDb25zdGFudChtX2NvZGVCbG9jayk7CiAg
ICAgfQotICAgIGJvb2wgaXNOdW1iZXJDb25zdGFudChOb2RlSW5kZXggbm9kZUluZGV4KQorICAg
IGJvb2wgaXNOdW1iZXJDb25zdGFudChOb2RlKiBub2RlKQogICAgIHsKLSAgICAgICAgcmV0dXJu
IGF0KG5vZGVJbmRleCkuaXNOdW1iZXJDb25zdGFudChtX2NvZGVCbG9jayk7CisgICAgICAgIHJl
dHVybiBub2RlLT5pc051bWJlckNvbnN0YW50KG1fY29kZUJsb2NrKTsKICAgICB9Ci0gICAgYm9v
bCBpc0Jvb2xlYW5Db25zdGFudChOb2RlSW5kZXggbm9kZUluZGV4KQorICAgIGJvb2wgaXNCb29s
ZWFuQ29uc3RhbnQoTm9kZSogbm9kZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBhdChub2RlSW5k
ZXgpLmlzQm9vbGVhbkNvbnN0YW50KG1fY29kZUJsb2NrKTsKKyAgICAgICAgcmV0dXJuIG5vZGUt
PmlzQm9vbGVhbkNvbnN0YW50KG1fY29kZUJsb2NrKTsKICAgICB9Ci0gICAgYm9vbCBpc0NlbGxD
b25zdGFudChOb2RlSW5kZXggbm9kZUluZGV4KQorICAgIGJvb2wgaXNDZWxsQ29uc3RhbnQoTm9k
ZSogbm9kZSkKICAgICB7Ci0gICAgICAgIGlmICghaXNKU0NvbnN0YW50KG5vZGVJbmRleCkpCisg
ICAgICAgIGlmICghaXNKU0NvbnN0YW50KG5vZGUpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICBKU1ZhbHVlIHZhbHVlID0gdmFsdWVPZkpTQ29uc3RhbnQobm9kZUluZGV4KTsK
KyAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IHZhbHVlT2ZKU0NvbnN0YW50KG5vZGUpOwogICAgICAg
ICByZXR1cm4gdmFsdWUuaXNDZWxsKCkgJiYgISF2YWx1ZTsKICAgICB9Ci0gICAgYm9vbCBpc0Z1
bmN0aW9uQ29uc3RhbnQoTm9kZUluZGV4IG5vZGVJbmRleCkKKyAgICBib29sIGlzRnVuY3Rpb25D
b25zdGFudChOb2RlKiBub2RlKQogICAgIHsKLSAgICAgICAgaWYgKCFpc0pTQ29uc3RhbnQobm9k
ZUluZGV4KSkKKyAgICAgICAgaWYgKCFpc0pTQ29uc3RhbnQobm9kZSkpCiAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmICghZ2V0SlNGdW5jdGlvbih2YWx1ZU9mSlNDb25zdGFu
dChub2RlSW5kZXgpKSkKKyAgICAgICAgaWYgKCFnZXRKU0Z1bmN0aW9uKHZhbHVlT2ZKU0NvbnN0
YW50KG5vZGUpKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgfQotICAgIGJvb2wgaXNJbnRlcm5hbEZ1bmN0aW9uQ29uc3RhbnQoTm9kZUluZGV4
IG5vZGVJbmRleCkKKyAgICBib29sIGlzSW50ZXJuYWxGdW5jdGlvbkNvbnN0YW50KE5vZGUqIG5v
ZGUpCiAgICAgewotICAgICAgICBpZiAoIWlzSlNDb25zdGFudChub2RlSW5kZXgpKQorICAgICAg
ICBpZiAoIWlzSlNDb25zdGFudChub2RlKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgSlNWYWx1ZSB2YWx1ZSA9IHZhbHVlT2ZKU0NvbnN0YW50KG5vZGVJbmRleCk7CisgICAg
ICAgIEpTVmFsdWUgdmFsdWUgPSB2YWx1ZU9mSlNDb25zdGFudChub2RlKTsKICAgICAgICAgaWYg
KCF2YWx1ZS5pc0NlbGwoKSB8fCAhdmFsdWUpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgICAgIEpTQ2VsbCogY2VsbCA9IHZhbHVlLmFzQ2VsbCgpOwpAQCAtMzQ2LDI1ICszMjcsMjUg
QEAgcHVibGljOgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgLy8gSGVscGVyIG1l
dGhvZHMgZ2V0IGNvbnN0YW50IHZhbHVlcyBmcm9tIG5vZGVzLgotICAgIEpTVmFsdWUgdmFsdWVP
ZkpTQ29uc3RhbnQoTm9kZUluZGV4IG5vZGVJbmRleCkKKyAgICBKU1ZhbHVlIHZhbHVlT2ZKU0Nv
bnN0YW50KE5vZGUqIG5vZGUpCiAgICAgewotICAgICAgICByZXR1cm4gYXQobm9kZUluZGV4KS52
YWx1ZU9mSlNDb25zdGFudChtX2NvZGVCbG9jayk7CisgICAgICAgIHJldHVybiBub2RlLT52YWx1
ZU9mSlNDb25zdGFudChtX2NvZGVCbG9jayk7CiAgICAgfQotICAgIGludDMyX3QgdmFsdWVPZklu
dDMyQ29uc3RhbnQoTm9kZUluZGV4IG5vZGVJbmRleCkKKyAgICBpbnQzMl90IHZhbHVlT2ZJbnQz
MkNvbnN0YW50KE5vZGUqIG5vZGUpCiAgICAgewotICAgICAgICByZXR1cm4gdmFsdWVPZkpTQ29u
c3RhbnQobm9kZUluZGV4KS5hc0ludDMyKCk7CisgICAgICAgIHJldHVybiB2YWx1ZU9mSlNDb25z
dGFudChub2RlKS5hc0ludDMyKCk7CiAgICAgfQotICAgIGRvdWJsZSB2YWx1ZU9mTnVtYmVyQ29u
c3RhbnQoTm9kZUluZGV4IG5vZGVJbmRleCkKKyAgICBkb3VibGUgdmFsdWVPZk51bWJlckNvbnN0
YW50KE5vZGUqIG5vZGUpCiAgICAgewotICAgICAgICByZXR1cm4gdmFsdWVPZkpTQ29uc3RhbnQo
bm9kZUluZGV4KS5hc051bWJlcigpOworICAgICAgICByZXR1cm4gdmFsdWVPZkpTQ29uc3RhbnQo
bm9kZSkuYXNOdW1iZXIoKTsKICAgICB9Ci0gICAgYm9vbCB2YWx1ZU9mQm9vbGVhbkNvbnN0YW50
KE5vZGVJbmRleCBub2RlSW5kZXgpCisgICAgYm9vbCB2YWx1ZU9mQm9vbGVhbkNvbnN0YW50KE5v
ZGUqIG5vZGUpCiAgICAgewotICAgICAgICByZXR1cm4gdmFsdWVPZkpTQ29uc3RhbnQobm9kZUlu
ZGV4KS5hc0Jvb2xlYW4oKTsKKyAgICAgICAgcmV0dXJuIHZhbHVlT2ZKU0NvbnN0YW50KG5vZGUp
LmFzQm9vbGVhbigpOwogICAgIH0KLSAgICBKU0Z1bmN0aW9uKiB2YWx1ZU9mRnVuY3Rpb25Db25z
dGFudChOb2RlSW5kZXggbm9kZUluZGV4KQorICAgIEpTRnVuY3Rpb24qIHZhbHVlT2ZGdW5jdGlv
bkNvbnN0YW50KE5vZGUqIG5vZGUpCiAgICAgewotICAgICAgICBKU0NlbGwqIGZ1bmN0aW9uID0g
Z2V0SlNGdW5jdGlvbih2YWx1ZU9mSlNDb25zdGFudChub2RlSW5kZXgpKTsKKyAgICAgICAgSlND
ZWxsKiBmdW5jdGlvbiA9IGdldEpTRnVuY3Rpb24odmFsdWVPZkpTQ29uc3RhbnQobm9kZSkpOwog
ICAgICAgICBBU1NFUlQoZnVuY3Rpb24pOwogICAgICAgICByZXR1cm4ganNDYXN0PEpTRnVuY3Rp
b24qPihmdW5jdGlvbik7CiAgICAgfQpAQCAtNDM5LDQ1ICs0MjAsNDMgQEAgcHVibGljOgogICAg
ICAgICByZXR1cm4gbV9jb2RlQmxvY2stPnVuY2hlY2tlZEFjdGl2YXRpb25SZWdpc3RlcigpOwog
ICAgIH0KICAgICAKLSAgICBWYWx1ZVByb2ZpbGUqIHZhbHVlUHJvZmlsZUZvcihOb2RlSW5kZXgg
bm9kZUluZGV4KQorICAgIFZhbHVlUHJvZmlsZSogdmFsdWVQcm9maWxlRm9yKE5vZGUqIG5vZGUp
CiAgICAgewotICAgICAgICBpZiAobm9kZUluZGV4ID09IE5vTm9kZSkKKyAgICAgICAgaWYgKCFu
b2RlKQogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIAotICAgICAgICBOb2RlJiBub2Rl
ID0gYXQobm9kZUluZGV4KTsKLSAgICAgICAgQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrID0gYmFz
ZWxpbmVDb2RlQmxvY2tGb3Iobm9kZS5jb2RlT3JpZ2luKTsKKyAgICAgICAgQ29kZUJsb2NrKiBw
cm9maWxlZEJsb2NrID0gYmFzZWxpbmVDb2RlQmxvY2tGb3Iobm9kZS0+Y29kZU9yaWdpbik7CiAg
ICAgICAgIAotICAgICAgICBpZiAobm9kZS5oYXNMb2NhbCgpKSB7Ci0gICAgICAgICAgICBpZiAo
IW9wZXJhbmRJc0FyZ3VtZW50KG5vZGUubG9jYWwoKSkpCisgICAgICAgIGlmIChub2RlLT5oYXNM
b2NhbCgpKSB7CisgICAgICAgICAgICBpZiAoIW9wZXJhbmRJc0FyZ3VtZW50KG5vZGUtPmxvY2Fs
KCkpKQogICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgaW50IGFyZ3VtZW50
ID0gb3BlcmFuZFRvQXJndW1lbnQobm9kZS5sb2NhbCgpKTsKLSAgICAgICAgICAgIGlmIChub2Rl
LnZhcmlhYmxlQWNjZXNzRGF0YSgpICE9IGF0KG1fYXJndW1lbnRzW2FyZ3VtZW50XSkudmFyaWFi
bGVBY2Nlc3NEYXRhKCkpCisgICAgICAgICAgICBpbnQgYXJndW1lbnQgPSBvcGVyYW5kVG9Bcmd1
bWVudChub2RlLT5sb2NhbCgpKTsKKyAgICAgICAgICAgIGlmIChub2RlLT52YXJpYWJsZUFjY2Vz
c0RhdGEoKSAhPSBtX2FyZ3VtZW50c1thcmd1bWVudF0tPnZhcmlhYmxlQWNjZXNzRGF0YSgpKQog
ICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAgcmV0dXJuIHByb2ZpbGVkQmxv
Y2stPnZhbHVlUHJvZmlsZUZvckFyZ3VtZW50KGFyZ3VtZW50KTsKICAgICAgICAgfQogICAgICAg
ICAKLSAgICAgICAgaWYgKG5vZGUuaGFzSGVhcFByZWRpY3Rpb24oKSkKLSAgICAgICAgICAgIHJl
dHVybiBwcm9maWxlZEJsb2NrLT52YWx1ZVByb2ZpbGVGb3JCeXRlY29kZU9mZnNldChub2RlLmNv
ZGVPcmlnaW4uYnl0ZWNvZGVJbmRleEZvclZhbHVlUHJvZmlsZSgpKTsKKyAgICAgICAgaWYgKG5v
ZGUtPmhhc0hlYXBQcmVkaWN0aW9uKCkpCisgICAgICAgICAgICByZXR1cm4gcHJvZmlsZWRCbG9j
ay0+dmFsdWVQcm9maWxlRm9yQnl0ZWNvZGVPZmZzZXQobm9kZS0+Y29kZU9yaWdpbi5ieXRlY29k
ZUluZGV4Rm9yVmFsdWVQcm9maWxlKCkpOwogICAgICAgICAKICAgICAgICAgcmV0dXJuIDA7CiAg
ICAgfQogICAgIAotICAgIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUgbWV0aG9kT2ZHZXR0
aW5nQVZhbHVlUHJvZmlsZUZvcihOb2RlSW5kZXggbm9kZUluZGV4KQorICAgIE1ldGhvZE9mR2V0
dGluZ0FWYWx1ZVByb2ZpbGUgbWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZUZvcihOb2RlKiBu
b2RlKQogICAgIHsKLSAgICAgICAgaWYgKG5vZGVJbmRleCA9PSBOb05vZGUpCisgICAgICAgIGlm
ICghbm9kZSkKICAgICAgICAgICAgIHJldHVybiBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxl
KCk7CiAgICAgICAgIAotICAgICAgICBOb2RlJiBub2RlID0gYXQobm9kZUluZGV4KTsKLSAgICAg
ICAgQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrID0gYmFzZWxpbmVDb2RlQmxvY2tGb3Iobm9kZS5j
b2RlT3JpZ2luKTsKKyAgICAgICAgQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrID0gYmFzZWxpbmVD
b2RlQmxvY2tGb3Iobm9kZS0+Y29kZU9yaWdpbik7CiAgICAgICAgIAotICAgICAgICBpZiAobm9k
ZS5vcCgpID09IEdldExvY2FsKSB7CisgICAgICAgIGlmIChub2RlLT5vcCgpID09IEdldExvY2Fs
KSB7CiAgICAgICAgICAgICByZXR1cm4gTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZTo6ZnJv
bUxhenlPcGVyYW5kKAogICAgICAgICAgICAgICAgIHByb2ZpbGVkQmxvY2ssCiAgICAgICAgICAg
ICAgICAgTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVLZXkoCi0gICAgICAgICAgICAgICAgICAgIG5v
ZGUuY29kZU9yaWdpbi5ieXRlY29kZUluZGV4LCBub2RlLmxvY2FsKCkpKTsKKyAgICAgICAgICAg
ICAgICAgICAgbm9kZS0+Y29kZU9yaWdpbi5ieXRlY29kZUluZGV4LCBub2RlLT5sb2NhbCgpKSk7
CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIHJldHVybiBNZXRob2RPZkdldHRpbmdBVmFs
dWVQcm9maWxlKHZhbHVlUHJvZmlsZUZvcihub2RlSW5kZXgpKTsKKyAgICAgICAgcmV0dXJuIE1l
dGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUodmFsdWVQcm9maWxlRm9yKG5vZGUpKTsKICAgICB9
CiAgICAgCiAgICAgYm9vbCBuZWVkc0FjdGl2YXRpb24oKSBjb25zdApAQCAtNTAxLDIxICs0ODAs
MjEgQEAgcHVibGljOgogICAgIAogICAgIHVuc2lnbmVkIG51bVN1Y2Nlc3NvcnMoQmFzaWNCbG9j
ayogYmxvY2spCiAgICAgewotICAgICAgICByZXR1cm4gYXQoYmxvY2stPmxhc3QoKSkubnVtU3Vj
Y2Vzc29ycygpOworICAgICAgICByZXR1cm4gYmxvY2stPmxhc3QoKS0+bnVtU3VjY2Vzc29ycygp
OwogICAgIH0KICAgICBCbG9ja0luZGV4IHN1Y2Nlc3NvcihCYXNpY0Jsb2NrKiBibG9jaywgdW5z
aWduZWQgaW5kZXgpCiAgICAgewotICAgICAgICByZXR1cm4gYXQoYmxvY2stPmxhc3QoKSkuc3Vj
Y2Vzc29yKGluZGV4KTsKKyAgICAgICAgcmV0dXJuIGJsb2NrLT5sYXN0KCktPnN1Y2Nlc3Nvcihp
bmRleCk7CiAgICAgfQogICAgIEJsb2NrSW5kZXggc3VjY2Vzc29yRm9yQ29uZGl0aW9uKEJhc2lj
QmxvY2sqIGJsb2NrLCBib29sIGNvbmRpdGlvbikKICAgICB7Ci0gICAgICAgIHJldHVybiBhdChi
bG9jay0+bGFzdCgpKS5zdWNjZXNzb3JGb3JDb25kaXRpb24oY29uZGl0aW9uKTsKKyAgICAgICAg
cmV0dXJuIGJsb2NrLT5sYXN0KCktPnN1Y2Nlc3NvckZvckNvbmRpdGlvbihjb25kaXRpb24pOwog
ICAgIH0KICAgICAKLSAgICBib29sIGlzUHJlZGljdGVkTnVtZXJpY2FsKE5vZGUmIG5vZGUpCisg
ICAgYm9vbCBpc1ByZWRpY3RlZE51bWVyaWNhbChOb2RlKiBub2RlKQogICAgIHsKLSAgICAgICAg
U3BlY3VsYXRlZFR5cGUgbGVmdCA9IGF0KG5vZGUuY2hpbGQxKCkpLnByZWRpY3Rpb24oKTsKLSAg
ICAgICAgU3BlY3VsYXRlZFR5cGUgcmlnaHQgPSBhdChub2RlLmNoaWxkMigpKS5wcmVkaWN0aW9u
KCk7CisgICAgICAgIFNwZWN1bGF0ZWRUeXBlIGxlZnQgPSBub2RlLT5jaGlsZDEoKS0+cHJlZGlj
dGlvbigpOworICAgICAgICBTcGVjdWxhdGVkVHlwZSByaWdodCA9IG5vZGUtPmNoaWxkMigpLT5w
cmVkaWN0aW9uKCk7CiAgICAgICAgIHJldHVybiBpc051bWJlclNwZWN1bGF0aW9uKGxlZnQpICYm
IGlzTnVtYmVyU3BlY3VsYXRpb24ocmlnaHQpOwogICAgIH0KICAgICAKQEAgLTUyNSwyMyArNTA0
LDIzIEBAIHB1YmxpYzoKICAgICAvLyAtIFB1dEJ5VmFsIGRlZmluaXRlbHkgY2hhbmdlcyB0aGUg
YXJyYXkgaXQgc3RvcmVzIHRvLCBhbmQgbWF5IGV2ZW4gY2hhbmdlIGl0cyBsZW5ndGguCiAgICAg
Ly8gLSBQdXRCeU9mZnNldCBkZWZpbml0ZWx5IGNoYW5nZXMgdGhlIG9iamVjdCBpdCBzdG9yZXMg
dG8uCiAgICAgLy8gLSBhbmQgc28gb24uCi0gICAgYm9vbCBieVZhbElzUHVyZShOb2RlJiBub2Rl
KQorICAgIGJvb2wgYnlWYWxJc1B1cmUoTm9kZSogbm9kZSkKICAgICB7Ci0gICAgICAgIHN3aXRj
aCAobm9kZS5hcnJheU1vZGUoKS50eXBlKCkpIHsKKyAgICAgICAgc3dpdGNoIChub2RlLT5hcnJh
eU1vZGUoKS50eXBlKCkpIHsKICAgICAgICAgY2FzZSBBcnJheTo6R2VuZXJpYzoKICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgY2FzZSBBcnJheTo6SW50MzI6CiAgICAgICAgIGNh
c2UgQXJyYXk6OkRvdWJsZToKICAgICAgICAgY2FzZSBBcnJheTo6Q29udGlndW91czoKICAgICAg
ICAgY2FzZSBBcnJheTo6QXJyYXlTdG9yYWdlOgotICAgICAgICAgICAgcmV0dXJuICFub2RlLmFy
cmF5TW9kZSgpLmlzT3V0T2ZCb3VuZHMoKTsKKyAgICAgICAgICAgIHJldHVybiAhbm9kZS0+YXJy
YXlNb2RlKCkuaXNPdXRPZkJvdW5kcygpOwogICAgICAgICBjYXNlIEFycmF5OjpTbG93UHV0QXJy
YXlTdG9yYWdlOgotICAgICAgICAgICAgcmV0dXJuICFub2RlLmFycmF5TW9kZSgpLm1heVN0b3Jl
VG9Ib2xlKCk7CisgICAgICAgICAgICByZXR1cm4gIW5vZGUtPmFycmF5TW9kZSgpLm1heVN0b3Jl
VG9Ib2xlKCk7CiAgICAgICAgIGNhc2UgQXJyYXk6OlN0cmluZzoKLSAgICAgICAgICAgIHJldHVy
biBub2RlLm9wKCkgPT0gR2V0QnlWYWw7CisgICAgICAgICAgICByZXR1cm4gbm9kZS0+b3AoKSA9
PSBHZXRCeVZhbDsKICNpZiBVU0UoSlNWQUxVRTMyXzY0KQogICAgICAgICBjYXNlIEFycmF5OjpB
cmd1bWVudHM6Ci0gICAgICAgICAgICBpZiAobm9kZS5vcCgpID09IEdldEJ5VmFsKQorICAgICAg
ICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gR2V0QnlWYWwpCiAgICAgICAgICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAjZW5kaWYgLy8gVVNFKEpTVkFMVUUz
Ml82NCkKQEAgLTU1MCwxMyArNTI5LDEzIEBAIHB1YmxpYzoKICAgICAgICAgfQogICAgIH0KICAg
ICAKLSAgICBib29sIGNsb2JiZXJzV29ybGQoTm9kZSYgbm9kZSkKKyAgICBib29sIGNsb2JiZXJz
V29ybGQoTm9kZSogbm9kZSkKICAgICB7Ci0gICAgICAgIGlmIChub2RlLmZsYWdzKCkgJiBOb2Rl
Q2xvYmJlcnNXb3JsZCkKKyAgICAgICAgaWYgKG5vZGUtPmZsYWdzKCkgJiBOb2RlQ2xvYmJlcnNX
b3JsZCkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBpZiAoIShub2RlLmZsYWdz
KCkgJiBOb2RlTWlnaHRDbG9iYmVyKSkKKyAgICAgICAgaWYgKCEobm9kZS0+ZmxhZ3MoKSAmIE5v
ZGVNaWdodENsb2JiZXIpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBzd2l0
Y2ggKG5vZGUub3AoKSkgeworICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKICAgICAgICAg
Y2FzZSBWYWx1ZUFkZDoKICAgICAgICAgY2FzZSBDb21wYXJlTGVzczoKICAgICAgICAgY2FzZSBD
b21wYXJlTGVzc0VxOgpAQCAtNTc0LDkgKzU1Myw5IEBAIHB1YmxpYzoKICAgICAgICAgfQogICAg
IH0KICAgICAKLSAgICBib29sIGNsb2JiZXJzV29ybGQoTm9kZUluZGV4IG5vZGVJbmRleCkKKyAg
ICBib29sIGNsb2JiZXJzV29ybGQoTm9kZSogbm9kZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBj
bG9iYmVyc1dvcmxkKGF0KG5vZGVJbmRleCkpOworICAgICAgICByZXR1cm4gY2xvYmJlcnNXb3Js
ZChub2RlKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBkZXRlcm1pbmVSZWFjaGFiaWxpdHkoKTsK
QEAgLTU4NCw1MiArNTYzLDU3IEBAIHB1YmxpYzoKICAgICAKICAgICB2b2lkIHJlc2V0RXhpdFN0
YXRlcygpOwogICAgIAotICAgIHVuc2lnbmVkIHZhckFyZ051bUNoaWxkcmVuKE5vZGUmIG5vZGUp
CisgICAgdW5zaWduZWQgdmFyQXJnTnVtQ2hpbGRyZW4oTm9kZSogbm9kZSkKICAgICB7Ci0gICAg
ICAgIEFTU0VSVChub2RlLmZsYWdzKCkgJiBOb2RlSGFzVmFyQXJncyk7Ci0gICAgICAgIHJldHVy
biBub2RlLm51bUNoaWxkcmVuKCk7CisgICAgICAgIEFTU0VSVChub2RlLT5mbGFncygpICYgTm9k
ZUhhc1ZhckFyZ3MpOworICAgICAgICByZXR1cm4gbm9kZS0+bnVtQ2hpbGRyZW4oKTsKICAgICB9
CiAgICAgCi0gICAgdW5zaWduZWQgbnVtQ2hpbGRyZW4oTm9kZSYgbm9kZSkKKyAgICB1bnNpZ25l
ZCBudW1DaGlsZHJlbihOb2RlKiBub2RlKQogICAgIHsKLSAgICAgICAgaWYgKG5vZGUuZmxhZ3Mo
KSAmIE5vZGVIYXNWYXJBcmdzKQorICAgICAgICBpZiAobm9kZS0+ZmxhZ3MoKSAmIE5vZGVIYXNW
YXJBcmdzKQogICAgICAgICAgICAgcmV0dXJuIHZhckFyZ051bUNoaWxkcmVuKG5vZGUpOwogICAg
ICAgICByZXR1cm4gQWRqYWNlbmN5TGlzdDo6U2l6ZTsKICAgICB9CiAgICAgCi0gICAgRWRnZSYg
dmFyQXJnQ2hpbGQoTm9kZSYgbm9kZSwgdW5zaWduZWQgaW5kZXgpCisgICAgRWRnZSYgdmFyQXJn
Q2hpbGQoTm9kZSogbm9kZSwgdW5zaWduZWQgaW5kZXgpCiAgICAgewotICAgICAgICBBU1NFUlQo
bm9kZS5mbGFncygpICYgTm9kZUhhc1ZhckFyZ3MpOwotICAgICAgICByZXR1cm4gbV92YXJBcmdD
aGlsZHJlbltub2RlLmZpcnN0Q2hpbGQoKSArIGluZGV4XTsKKyAgICAgICAgQVNTRVJUKG5vZGUt
PmZsYWdzKCkgJiBOb2RlSGFzVmFyQXJncyk7CisgICAgICAgIHJldHVybiBtX3ZhckFyZ0NoaWxk
cmVuW25vZGUtPmZpcnN0Q2hpbGQoKSArIGluZGV4XTsKICAgICB9CiAgICAgCi0gICAgRWRnZSYg
Y2hpbGQoTm9kZSYgbm9kZSwgdW5zaWduZWQgaW5kZXgpCisgICAgRWRnZSYgY2hpbGQoTm9kZSog
bm9kZSwgdW5zaWduZWQgaW5kZXgpCiAgICAgewotICAgICAgICBpZiAobm9kZS5mbGFncygpICYg
Tm9kZUhhc1ZhckFyZ3MpCisgICAgICAgIGlmIChub2RlLT5mbGFncygpICYgTm9kZUhhc1ZhckFy
Z3MpCiAgICAgICAgICAgICByZXR1cm4gdmFyQXJnQ2hpbGQobm9kZSwgaW5kZXgpOwotICAgICAg
ICByZXR1cm4gbm9kZS5jaGlsZHJlbi5jaGlsZChpbmRleCk7CisgICAgICAgIHJldHVybiBub2Rl
LT5jaGlsZHJlbi5jaGlsZChpbmRleCk7CiAgICAgfQogICAgIAotICAgIHZvaWQgdm90ZShFZGdl
IGVkZ2UsIHVuc2lnbmVkIGJhbGxvdCkKKyAgICB2b2lkIHZvdGVOb2RlKE5vZGUqIG5vZGUsIHVu
c2lnbmVkIGJhbGxvdCkKICAgICB7Ci0gICAgICAgIHN3aXRjaCAoYXQoZWRnZSkub3AoKSkgewor
ICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKICAgICAgICAgY2FzZSBWYWx1ZVRvSW50MzI6
CiAgICAgICAgIGNhc2UgVUludDMyVG9OdW1iZXI6Ci0gICAgICAgICAgICBlZGdlID0gYXQoZWRn
ZSkuY2hpbGQxKCk7CisgICAgICAgICAgICBub2RlID0gbm9kZS0+Y2hpbGQxKCkubm9kZSgpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgaWYgKGF0KGVkZ2UpLm9wKCkgPT0gR2V0TG9j
YWwpCi0gICAgICAgICAgICBhdChlZGdlKS52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+dm90ZShiYWxs
b3QpOworICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBHZXRMb2NhbCkKKyAgICAgICAgICAgIG5v
ZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT52b3RlKGJhbGxvdCk7CisgICAgfQorICAgIAorICAg
IHZvaWQgdm90ZU5vZGUoRWRnZSBlZGdlLCB1bnNpZ25lZCBiYWxsb3QpCisgICAgeworICAgICAg
ICB2b3RlTm9kZShlZGdlLm5vZGUoKSwgYmFsbG90KTsKICAgICB9CiAgICAgCi0gICAgdm9pZCB2
b3RlKE5vZGUmIG5vZGUsIHVuc2lnbmVkIGJhbGxvdCkKKyAgICB2b2lkIHZvdGVDaGlsZHJlbihO
b2RlKiBub2RlLCB1bnNpZ25lZCBiYWxsb3QpCiAgICAgewotICAgICAgICBpZiAobm9kZS5mbGFn
cygpICYgTm9kZUhhc1ZhckFyZ3MpIHsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgY2hpbGRJ
ZHggPSBub2RlLmZpcnN0Q2hpbGQoKTsKLSAgICAgICAgICAgICAgICAgY2hpbGRJZHggPCBub2Rl
LmZpcnN0Q2hpbGQoKSArIG5vZGUubnVtQ2hpbGRyZW4oKTsKKyAgICAgICAgaWYgKG5vZGUtPmZs
YWdzKCkgJiBOb2RlSGFzVmFyQXJncykgeworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBjaGls
ZElkeCA9IG5vZGUtPmZpcnN0Q2hpbGQoKTsKKyAgICAgICAgICAgICAgICAgY2hpbGRJZHggPCBu
b2RlLT5maXJzdENoaWxkKCkgKyBub2RlLT5udW1DaGlsZHJlbigpOwogICAgICAgICAgICAgICAg
ICBjaGlsZElkeCsrKSB7CiAgICAgICAgICAgICAgICAgaWYgKCEhbV92YXJBcmdDaGlsZHJlbltj
aGlsZElkeF0pCiAgICAgICAgICAgICAgICAgICAgIHZvdGUobV92YXJBcmdDaGlsZHJlbltjaGls
ZElkeF0sIGJhbGxvdCk7CkBAIC02MzcsMzkgKzYyMSwzOCBAQCBwdWJsaWM6CiAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIGlmICghbm9kZS5jaGlsZDEo
KSkKKyAgICAgICAgaWYgKCFub2RlLT5jaGlsZDEoKSkKICAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgdm90ZShub2RlLmNoaWxkMSgpLCBiYWxsb3QpOwotICAgICAgICBpZiAoIW5vZGUuY2hp
bGQyKCkpCisgICAgICAgIHZvdGUobm9kZS0+Y2hpbGQxKCksIGJhbGxvdCk7CisgICAgICAgIGlm
ICghbm9kZS0+Y2hpbGQyKCkpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIHZvdGUobm9k
ZS5jaGlsZDIoKSwgYmFsbG90KTsKLSAgICAgICAgaWYgKCFub2RlLmNoaWxkMygpKQorICAgICAg
ICB2b3RlKG5vZGUtPmNoaWxkMigpLCBiYWxsb3QpOworICAgICAgICBpZiAoIW5vZGUtPmNoaWxk
MygpKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB2b3RlKG5vZGUuY2hpbGQzKCksIGJh
bGxvdCk7CisgICAgICAgIHZvdGUobm9kZS0+Y2hpbGQzKCksIGJhbGxvdCk7CiAgICAgfQogICAg
IAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IC8vIFQgPSBOb2RlSW5kZXggb3IgRWRnZQorICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFQ+IC8vIFQgPSBOb2RlKiBvciBFZGdlCiAgICAgdm9pZCBzdWJz
dGl0dXRlKEJhc2ljQmxvY2smIGJsb2NrLCB1bnNpZ25lZCBzdGFydEluZGV4SW5CbG9jaywgVCBv
bGRUaGluZywgVCBuZXdUaGluZykKICAgICB7CiAgICAgICAgIGZvciAodW5zaWduZWQgaW5kZXhJ
bkJsb2NrID0gc3RhcnRJbmRleEluQmxvY2s7IGluZGV4SW5CbG9jayA8IGJsb2NrLnNpemUoKTsg
KytpbmRleEluQmxvY2spIHsKLSAgICAgICAgICAgIE5vZGVJbmRleCBub2RlSW5kZXggPSBibG9j
a1tpbmRleEluQmxvY2tdOwotICAgICAgICAgICAgTm9kZSYgbm9kZSA9IGF0KG5vZGVJbmRleCk7
Ci0gICAgICAgICAgICBpZiAobm9kZS5mbGFncygpICYgTm9kZUhhc1ZhckFyZ3MpIHsKLSAgICAg
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGNoaWxkSWR4ID0gbm9kZS5maXJzdENoaWxkKCk7IGNo
aWxkSWR4IDwgbm9kZS5maXJzdENoaWxkKCkgKyBub2RlLm51bUNoaWxkcmVuKCk7ICsrY2hpbGRJ
ZHgpIHsKKyAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9ja1tpbmRleEluQmxvY2tdOworICAg
ICAgICAgICAgaWYgKG5vZGUtPmZsYWdzKCkgJiBOb2RlSGFzVmFyQXJncykgeworICAgICAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgY2hpbGRJZHggPSBub2RlLT5maXJzdENoaWxkKCk7IGNoaWxk
SWR4IDwgbm9kZS0+Zmlyc3RDaGlsZCgpICsgbm9kZS0+bnVtQ2hpbGRyZW4oKTsgKytjaGlsZElk
eCkgewogICAgICAgICAgICAgICAgICAgICBpZiAoISFtX3ZhckFyZ0NoaWxkcmVuW2NoaWxkSWR4
XSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBhcmVBbmRTd2FwKG1fdmFyQXJnQ2hpbGRy
ZW5bY2hpbGRJZHhdLCBvbGRUaGluZywgbmV3VGhpbmcsIG5vZGUuc2hvdWxkR2VuZXJhdGUoKSk7
CisgICAgICAgICAgICAgICAgICAgICAgICBjb21wYXJlQW5kU3dhcChtX3ZhckFyZ0NoaWxkcmVu
W2NoaWxkSWR4XSwgb2xkVGhpbmcsIG5ld1RoaW5nLCBub2RlLT5zaG91bGRHZW5lcmF0ZSgpKTsK
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBpZiAoIW5vZGUuY2hpbGQxKCkpCisgICAgICAgICAgICBpZiAoIW5v
ZGUtPmNoaWxkMSgpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgY29t
cGFyZUFuZFN3YXAobm9kZS5jaGlsZHJlbi5jaGlsZDEoKSwgb2xkVGhpbmcsIG5ld1RoaW5nLCBu
b2RlLnNob3VsZEdlbmVyYXRlKCkpOwotICAgICAgICAgICAgaWYgKCFub2RlLmNoaWxkMigpKQor
ICAgICAgICAgICAgY29tcGFyZUFuZFN3YXAobm9kZS0+Y2hpbGRyZW4uY2hpbGQxKCksIG9sZFRo
aW5nLCBuZXdUaGluZywgbm9kZS0+c2hvdWxkR2VuZXJhdGUoKSk7CisgICAgICAgICAgICBpZiAo
IW5vZGUtPmNoaWxkMigpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAg
Y29tcGFyZUFuZFN3YXAobm9kZS5jaGlsZHJlbi5jaGlsZDIoKSwgb2xkVGhpbmcsIG5ld1RoaW5n
LCBub2RlLnNob3VsZEdlbmVyYXRlKCkpOwotICAgICAgICAgICAgaWYgKCFub2RlLmNoaWxkMygp
KQorICAgICAgICAgICAgY29tcGFyZUFuZFN3YXAobm9kZS0+Y2hpbGRyZW4uY2hpbGQyKCksIG9s
ZFRoaW5nLCBuZXdUaGluZywgbm9kZS0+c2hvdWxkR2VuZXJhdGUoKSk7CisgICAgICAgICAgICBp
ZiAoIW5vZGUtPmNoaWxkMygpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAg
ICAgY29tcGFyZUFuZFN3YXAobm9kZS5jaGlsZHJlbi5jaGlsZDMoKSwgb2xkVGhpbmcsIG5ld1Ro
aW5nLCBub2RlLnNob3VsZEdlbmVyYXRlKCkpOworICAgICAgICAgICAgY29tcGFyZUFuZFN3YXAo
bm9kZS0+Y2hpbGRyZW4uY2hpbGQzKCksIG9sZFRoaW5nLCBuZXdUaGluZywgbm9kZS0+c2hvdWxk
R2VuZXJhdGUoKSk7CiAgICAgICAgIH0KICAgICB9CiAgICAgCkBAIC02NzcsMjkgKzY2MCwyOCBA
QCBwdWJsaWM6CiAgICAgLy8gYW55IEdldExvY2FscyBpbiB0aGUgYmFzaWMgYmxvY2suCiAgICAg
Ly8gRklYTUU6IGl0IG1heSBiZSBhcHByb3ByaWF0ZSwgaW4gdGhlIGZ1dHVyZSwgdG8gZ2VuZXJh
bGl6ZSB0aGlzIHRvIGhhbmRsZSBHZXRMb2NhbHMKICAgICAvLyBpbnRyb2R1Y2VkIGFueXdoZXJl
IGluIHRoZSBiYXNpYyBibG9jay4KLSAgICB2b2lkIHN1YnN0aXR1dGVHZXRMb2NhbChCYXNpY0Js
b2NrJiBibG9jaywgdW5zaWduZWQgc3RhcnRJbmRleEluQmxvY2ssIFZhcmlhYmxlQWNjZXNzRGF0
YSogdmFyaWFibGVBY2Nlc3NEYXRhLCBOb2RlSW5kZXggbmV3R2V0TG9jYWwpCisgICAgdm9pZCBz
dWJzdGl0dXRlR2V0TG9jYWwoQmFzaWNCbG9jayYgYmxvY2ssIHVuc2lnbmVkIHN0YXJ0SW5kZXhJ
bkJsb2NrLCBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSwgTm9kZSogbmV3
R2V0TG9jYWwpCiAgICAgewogICAgICAgICBpZiAodmFyaWFibGVBY2Nlc3NEYXRhLT5pc0NhcHR1
cmVkKCkpIHsKICAgICAgICAgICAgIC8vIExldCBDU0Ugd29ycnkgYWJvdXQgdGhpcyBvbmUuCiAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgZm9yICh1bnNpZ25lZCBpbmRl
eEluQmxvY2sgPSBzdGFydEluZGV4SW5CbG9jazsgaW5kZXhJbkJsb2NrIDwgYmxvY2suc2l6ZSgp
OyArK2luZGV4SW5CbG9jaykgewotICAgICAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRleCA9IGJs
b2NrW2luZGV4SW5CbG9ja107Ci0gICAgICAgICAgICBOb2RlJiBub2RlID0gYXQobm9kZUluZGV4
KTsKKyAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9ja1tpbmRleEluQmxvY2tdOwogICAgICAg
ICAgICAgYm9vbCBzaG91bGRDb250aW51ZSA9IHRydWU7Ci0gICAgICAgICAgICBzd2l0Y2ggKG5v
ZGUub3AoKSkgeworICAgICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CiAgICAgICAgICAg
ICBjYXNlIFNldExvY2FsOiB7Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGUubG9jYWwoKSA9PSB2
YXJpYWJsZUFjY2Vzc0RhdGEtPmxvY2FsKCkpCisgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmxv
Y2FsKCkgPT0gdmFyaWFibGVBY2Nlc3NEYXRhLT5sb2NhbCgpKQogICAgICAgICAgICAgICAgICAg
ICBzaG91bGRDb250aW51ZSA9IGZhbHNlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgY2FzZSBHZXRMb2NhbDogewot
ICAgICAgICAgICAgICAgIGlmIChub2RlLnZhcmlhYmxlQWNjZXNzRGF0YSgpICE9IHZhcmlhYmxl
QWNjZXNzRGF0YSkKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRh
KCkgIT0gdmFyaWFibGVBY2Nlc3NEYXRhKQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsK
LSAgICAgICAgICAgICAgICBzdWJzdGl0dXRlKGJsb2NrLCBpbmRleEluQmxvY2ssIG5vZGVJbmRl
eCwgbmV3R2V0TG9jYWwpOwotICAgICAgICAgICAgICAgIE5vZGVJbmRleCBvbGRUYWlsSW5kZXgg
PSBibG9jay52YXJpYWJsZXNBdFRhaWwub3BlcmFuZCh2YXJpYWJsZUFjY2Vzc0RhdGEtPmxvY2Fs
KCkpOwotICAgICAgICAgICAgICAgIGlmIChvbGRUYWlsSW5kZXggPT0gbm9kZUluZGV4KQorICAg
ICAgICAgICAgICAgIHN1YnN0aXR1dGUoYmxvY2ssIGluZGV4SW5CbG9jaywgbm9kZSwgbmV3R2V0
TG9jYWwpOworICAgICAgICAgICAgICAgIE5vZGUqIG9sZFRhaWxOb2RlID0gYmxvY2sudmFyaWFi
bGVzQXRUYWlsLm9wZXJhbmQodmFyaWFibGVBY2Nlc3NEYXRhLT5sb2NhbCgpKTsKKyAgICAgICAg
ICAgICAgICBpZiAob2xkVGFpbE5vZGUgPT0gbm9kZSkKICAgICAgICAgICAgICAgICAgICAgYmxv
Y2sudmFyaWFibGVzQXRUYWlsLm9wZXJhbmQodmFyaWFibGVBY2Nlc3NEYXRhLT5sb2NhbCgpKSA9
IG5ld0dldExvY2FsOwogICAgICAgICAgICAgICAgIHNob3VsZENvbnRpbnVlID0gZmFsc2U7CiAg
ICAgICAgICAgICAgICAgYnJlYWs7CkBAIC03MTcsNiArNjk5LDggQEAgcHVibGljOgogICAgIENv
ZGVCbG9jayogbV9jb2RlQmxvY2s7CiAgICAgUmVmUHRyPFByb2ZpbGVyOjpDb21waWxhdGlvbj4g
bV9jb21waWxhdGlvbjsKICAgICBDb2RlQmxvY2sqIG1fcHJvZmlsZWRCbG9jazsKKyAgICAKKyAg
ICBOb2RlQWxsb2NhdG9yJiBtX2FsbG9jYXRvcjsKIAogICAgIFZlY3RvcjwgT3duUHRyPEJhc2lj
QmxvY2s+ICwgOD4gbV9ibG9ja3M7CiAgICAgVmVjdG9yPEVkZ2UsIDE2PiBtX3ZhckFyZ0NoaWxk
cmVuOwpAQCAtNzI0LDcgKzcwOCw3IEBAIHB1YmxpYzoKICAgICBWZWN0b3I8UmVzb2x2ZUdsb2Jh
bERhdGE+IG1fcmVzb2x2ZUdsb2JhbERhdGE7CiAgICAgVmVjdG9yPFJlc29sdmVPcGVyYXRpb25E
YXRhPiBtX3Jlc29sdmVPcGVyYXRpb25zRGF0YTsKICAgICBWZWN0b3I8UHV0VG9CYXNlT3BlcmF0
aW9uRGF0YT4gbV9wdXRUb0Jhc2VPcGVyYXRpb25EYXRhOwotICAgIFZlY3RvcjxOb2RlSW5kZXgs
IDg+IG1fYXJndW1lbnRzOworICAgIFZlY3RvcjxOb2RlKiwgOD4gbV9hcmd1bWVudHM7CiAgICAg
U2VnbWVudGVkVmVjdG9yPFZhcmlhYmxlQWNjZXNzRGF0YSwgMTY+IG1fdmFyaWFibGVBY2Nlc3NE
YXRhOwogICAgIFNlZ21lbnRlZFZlY3RvcjxBcmd1bWVudFBvc2l0aW9uLCA4PiBtX2FyZ3VtZW50
UG9zaXRpb25zOwogICAgIFNlZ21lbnRlZFZlY3RvcjxTdHJ1Y3R1cmVTZXQsIDE2PiBtX3N0cnVj
dHVyZVNldDsKQEAgLTc0NCwyOSArNzI4LDI5IEBAIHByaXZhdGU6CiAgICAgCiAgICAgdm9pZCBo
YW5kbGVTdWNjZXNzb3IoVmVjdG9yPEJsb2NrSW5kZXgsIDE2PiYgd29ya2xpc3QsIEJsb2NrSW5k
ZXggYmxvY2tJbmRleCwgQmxvY2tJbmRleCBzdWNjZXNzb3JJbmRleCk7CiAgICAgCi0gICAgQWRk
U3BlY3VsYXRpb25Nb2RlIGFkZEltbWVkaWF0ZVNob3VsZFNwZWN1bGF0ZUludGVnZXIoTm9kZSYg
YWRkLCBib29sIHZhcmlhYmxlU2hvdWxkU3BlY3VsYXRlSW50ZWdlciwgTm9kZSYgaW1tZWRpYXRl
KQorICAgIEFkZFNwZWN1bGF0aW9uTW9kZSBhZGRJbW1lZGlhdGVTaG91bGRTcGVjdWxhdGVJbnRl
Z2VyKE5vZGUqIGFkZCwgYm9vbCB2YXJpYWJsZVNob3VsZFNwZWN1bGF0ZUludGVnZXIsIE5vZGUq
IGltbWVkaWF0ZSkKICAgICB7CiAgICAgICAgIEFTU0VSVChpbW1lZGlhdGUuaGFzQ29uc3RhbnQo
KSk7CiAgICAgICAgIAotICAgICAgICBKU1ZhbHVlIGltbWVkaWF0ZVZhbHVlID0gaW1tZWRpYXRl
LnZhbHVlT2ZKU0NvbnN0YW50KG1fY29kZUJsb2NrKTsKLSAgICAgICAgaWYgKCFpbW1lZGlhdGVW
YWx1ZS5pc051bWJlcigpKQorICAgICAgICBKU1ZhbHVlIGltbWVkaWF0ZVZhbHVlID0gaW1tZWRp
YXRlLT52YWx1ZU9mSlNDb25zdGFudChtX2NvZGVCbG9jayk7CisgICAgICAgIGlmICghaW1tZWRp
YXRlVmFsdWUtPmlzTnVtYmVyKCkpCiAgICAgICAgICAgICByZXR1cm4gRG9udFNwZWN1bGF0ZUlu
dGVnZXI7CiAgICAgICAgIAogICAgICAgICBpZiAoIXZhcmlhYmxlU2hvdWxkU3BlY3VsYXRlSW50
ZWdlcikKICAgICAgICAgICAgIHJldHVybiBEb250U3BlY3VsYXRlSW50ZWdlcjsKICAgICAgICAg
Ci0gICAgICAgIGlmIChpbW1lZGlhdGVWYWx1ZS5pc0ludDMyKCkpCi0gICAgICAgICAgICByZXR1
cm4gYWRkLmNhblNwZWN1bGF0ZUludGVnZXIoKSA/IFNwZWN1bGF0ZUludGVnZXIgOiBEb250U3Bl
Y3VsYXRlSW50ZWdlcjsKKyAgICAgICAgaWYgKGltbWVkaWF0ZVZhbHVlLT5pc0ludDMyKCkpCisg
ICAgICAgICAgICByZXR1cm4gYWRkLT5jYW5TcGVjdWxhdGVJbnRlZ2VyKCkgPyBTcGVjdWxhdGVJ
bnRlZ2VyIDogRG9udFNwZWN1bGF0ZUludGVnZXI7CiAgICAgICAgIAogICAgICAgICBkb3VibGUg
ZG91YmxlSW1tZWRpYXRlID0gaW1tZWRpYXRlVmFsdWUuYXNEb3VibGUoKTsKICAgICAgICAgY29u
c3QgZG91YmxlIHR3b1RvVGhlNDggPSAyODE0NzQ5NzY3MTA2NTYuMDsKICAgICAgICAgaWYgKGRv
dWJsZUltbWVkaWF0ZSA8IC10d29Ub1RoZTQ4IHx8IGRvdWJsZUltbWVkaWF0ZSA+IHR3b1RvVGhl
NDgpCiAgICAgICAgICAgICByZXR1cm4gRG9udFNwZWN1bGF0ZUludGVnZXI7CiAgICAgICAgIAot
ICAgICAgICByZXR1cm4gbm9kZUNhblRydW5jYXRlSW50ZWdlcihhZGQuYXJpdGhOb2RlRmxhZ3Mo
KSkgPyBTcGVjdWxhdGVJbnRlZ2VyQnV0QWx3YXlzV2F0Y2hPdmVyZmxvdyA6IERvbnRTcGVjdWxh
dGVJbnRlZ2VyOworICAgICAgICByZXR1cm4gbm9kZUNhblRydW5jYXRlSW50ZWdlcihhZGQtPmFy
aXRoTm9kZUZsYWdzKCkpID8gU3BlY3VsYXRlSW50ZWdlckJ1dEFsd2F5c1dhdGNoT3ZlcmZsb3cg
OiBEb250U3BlY3VsYXRlSW50ZWdlcjsKICAgICB9CiAgICAgCi0gICAgYm9vbCBtdWxJbW1lZGlh
dGVTaG91bGRTcGVjdWxhdGVJbnRlZ2VyKE5vZGUmIG11bCwgTm9kZSYgdmFyaWFibGUsIE5vZGUm
IGltbWVkaWF0ZSkKKyAgICBib29sIG11bEltbWVkaWF0ZVNob3VsZFNwZWN1bGF0ZUludGVnZXIo
Tm9kZSogbXVsLCBOb2RlKiB2YXJpYWJsZSwgTm9kZSogaW1tZWRpYXRlKQogICAgIHsKICAgICAg
ICAgQVNTRVJUKGltbWVkaWF0ZS5oYXNDb25zdGFudCgpKTsKICAgICAgICAgCkBAIC03NzQsNyAr
NzU4LDcgQEAgcHJpdmF0ZToKICAgICAgICAgaWYgKCFpbW1lZGlhdGVWYWx1ZS5pc0ludDMyKCkp
CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIAotICAgICAgICBpZiAoIXZhcmlh
YmxlLnNob3VsZFNwZWN1bGF0ZUludGVnZXJGb3JBcml0aG1ldGljKCkpCisgICAgICAgIGlmICgh
dmFyaWFibGUtPnNob3VsZFNwZWN1bGF0ZUludGVnZXJGb3JBcml0aG1ldGljKCkpCiAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIAogICAgICAgICBpbnQzMl90IGludEltbWVkaWF0
ZSA9IGltbWVkaWF0ZVZhbHVlLmFzSW50MzIoKTsKQEAgLTc4NSwxNCArNzY5LDE0IEBAIHByaXZh
dGU6CiAgICAgICAgIC8vIGNhblNwZWN1bGF0ZUludGVnZXIoKSBpbXBsaWVzKS4KICAgICAgICAg
Y29uc3QgaW50MzJfdCB0d29Ub1RoZTIyID0gMSA8PCAyMjsKICAgICAgICAgaWYgKGludEltbWVk
aWF0ZSA8PSAtdHdvVG9UaGUyMiB8fCBpbnRJbW1lZGlhdGUgPj0gdHdvVG9UaGUyMikKLSAgICAg
ICAgICAgIHJldHVybiBtdWwuY2FuU3BlY3VsYXRlSW50ZWdlcigpICYmICFub2RlTWF5T3ZlcmZs
b3cobXVsLmFyaXRoTm9kZUZsYWdzKCkpOworICAgICAgICAgICAgcmV0dXJuIG11bC0+Y2FuU3Bl
Y3VsYXRlSW50ZWdlcigpICYmICFub2RlTWF5T3ZlcmZsb3cobXVsLT5hcml0aE5vZGVGbGFncygp
KTsKIAotICAgICAgICByZXR1cm4gbXVsLmNhblNwZWN1bGF0ZUludGVnZXIoKTsKKyAgICAgICAg
cmV0dXJuIG11bC0+Y2FuU3BlY3VsYXRlSW50ZWdlcigpOwogICAgIH0KICAgICAKICAgICAvLyBX
aGVuIGEgbm9kZSdzIHJlZkNvdW50IGdvZXMgZnJvbSAwIHRvIDEsIGl0IG11c3QgKGxvZ2ljYWxs
eSkgcmVjdXJzaXZlbHkgcmVmIGFsbCBvZiBpdHMgY2hpbGRyZW4sIGFuZCB2aWNlIHZlcnNhLgot
ICAgIHZvaWQgcmVmQ2hpbGRyZW4oTm9kZUluZGV4KTsKLSAgICB2b2lkIGRlcmVmQ2hpbGRyZW4o
Tm9kZUluZGV4KTsKKyAgICB2b2lkIHJlZkNoaWxkcmVuKE5vZGUqKTsKKyAgICB2b2lkIGRlcmVm
Q2hpbGRyZW4oTm9kZSopOwogfTsKIAogY2xhc3MgR2V0Qnl0ZWNvZGVCZWdpbkZvckJsb2NrIHsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5zZXJ0aW9uU2V0LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJbnNlcnRpb25TZXQuaAkocmV2
aXNpb24gMTQwNTA0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJbnNlcnRpb25T
ZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMzksMTQgKzM5LDE0IEBAIGNsYXNzIEluc2VydGlvbiB7
CiBwdWJsaWM6CiAgICAgSW5zZXJ0aW9uKCkgeyB9CiAgICAgCi0gICAgSW5zZXJ0aW9uKHNpemVf
dCBpbmRleCwgTm9kZUluZGV4IGVsZW1lbnQpCisgICAgSW5zZXJ0aW9uKHNpemVfdCBpbmRleCwg
Tm9kZSogZWxlbWVudCkKICAgICAgICAgOiBtX2luZGV4KGluZGV4KQogICAgICAgICAsIG1fZWxl
bWVudChlbGVtZW50KQogICAgIHsKICAgICB9CiAgICAgCiAgICAgc2l6ZV90IGluZGV4KCkgY29u
c3QgeyByZXR1cm4gbV9pbmRleDsgfQotICAgIE5vZGVJbmRleCBlbGVtZW50KCkgY29uc3QgeyBy
ZXR1cm4gbV9lbGVtZW50OyB9CisgICAgTm9kZSogZWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIG1f
ZWxlbWVudDsgfQogcHJpdmF0ZToKICAgICBzaXplX3QgbV9pbmRleDsKICAgICBOb2RlSW5kZXgg
bV9lbGVtZW50OwpAQCAtNTksMjAgKzU5LDIwIEBAIHB1YmxpYzoKICAgICB7CiAgICAgfQogICAg
IAotICAgIE5vZGVJbmRleCBpbnNlcnQoY29uc3QgSW5zZXJ0aW9uJiBpbnNlcnRpb24pCisgICAg
Tm9kZSogaW5zZXJ0KGNvbnN0IEluc2VydGlvbiYgaW5zZXJ0aW9uKQogICAgIHsKICAgICAgICAg
QVNTRVJUKCFtX2luc2VydGlvbnMuc2l6ZSgpIHx8IG1faW5zZXJ0aW9ucy5sYXN0KCkuaW5kZXgo
KSA8PSBpbnNlcnRpb24uaW5kZXgoKSk7CiAgICAgICAgIG1faW5zZXJ0aW9ucy5hcHBlbmQoaW5z
ZXJ0aW9uKTsKICAgICAgICAgcmV0dXJuIGluc2VydGlvbi5lbGVtZW50KCk7CiAgICAgfQogICAg
IAotICAgIE5vZGVJbmRleCBpbnNlcnQoc2l6ZV90IGluZGV4LCBOb2RlSW5kZXggZWxlbWVudCkK
KyAgICBOb2RlKiBpbnNlcnQoc2l6ZV90IGluZGV4LCBOb2RlSW5kZXggZWxlbWVudCkKICAgICB7
CiAgICAgICAgIHJldHVybiBpbnNlcnQoSW5zZXJ0aW9uKGluZGV4LCBlbGVtZW50KSk7CiAgICAg
fQogCiAjZGVmaW5lIERGR19ERUZJTkVfSU5TRVJUX05PREUodGVtcGxhdGVQcmUsIHRlbXBsYXRl
UG9zdCwgdHlwZVBhcmFtcywgdmFsdWVQYXJhbXNDb21tYSwgdmFsdWVQYXJhbXMsIHZhbHVlQXJn
cykgXAotICAgIHRlbXBsYXRlUHJlIHR5cGVQYXJhbXMgdGVtcGxhdGVQb3N0IE5vZGVJbmRleCBp
bnNlcnROb2RlKHNpemVfdCBpbmRleCwgUmVmQ2hpbGRyZW5Nb2RlIHJlZkNoaWxkcmVuTW9kZSwg
UmVmTm9kZU1vZGUgcmVmTm9kZU1vZGUsIFNwZWN1bGF0ZWRUeXBlIHR5cGUgdmFsdWVQYXJhbXND
b21tYSB2YWx1ZVBhcmFtcykgXAorICAgIHRlbXBsYXRlUHJlIHR5cGVQYXJhbXMgdGVtcGxhdGVQ
b3N0IE5vZGUqIGluc2VydE5vZGUoc2l6ZV90IGluZGV4LCBSZWZDaGlsZHJlbk1vZGUgcmVmQ2hp
bGRyZW5Nb2RlLCBSZWZOb2RlTW9kZSByZWZOb2RlTW9kZSwgU3BlY3VsYXRlZFR5cGUgdHlwZSB2
YWx1ZVBhcmFtc0NvbW1hIHZhbHVlUGFyYW1zKSBcCiAgICAgeyBcCiAgICAgICAgIHJldHVybiBp
bnNlcnQoaW5kZXgsIG1fZ3JhcGguYWRkTm9kZShyZWZDaGlsZHJlbk1vZGUsIHJlZk5vZGVNb2Rl
LCB0eXBlIHZhbHVlUGFyYW1zQ29tbWEgdmFsdWVBcmdzKSk7IFwKICAgICB9CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0xvbmdMaXZlZFN0YXRlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0xvbmdMaXZlZFN0YXRlLmNwcAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTG9uZ0xpdmVkU3RhdGUuY3Bw
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEz
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdM
b25nTGl2ZWRTdGF0ZS5oIgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKK25hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgREZHIHsKKworTG9uZ0xpdmVkU3RhdGU6OkxvbmdMaXZlZFN0YXRlKCkKK3sK
K30KKworTG9uZ0xpdmVkU3RhdGU6On5Mb25nTGl2ZWRTdGF0ZSgpCit7Cit9CisKK3ZvaWQgTG9u
Z0xpdmVkU3RhdGU6OnNocmlua1RvRml0KCkKK3sKKyAgICBtX2FsbG9jYXRvci5yZXNldCgpOwor
fQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJ
VCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdMb25nTGl2ZWRTdGF0ZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTG9uZ0xpdmVkU3Rh
dGUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTG9uZ0xp
dmVkU3RhdGUuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1NSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIERGR0xvbmdMaXZlZFN0YXRl
X2gKKyNkZWZpbmUgREZHTG9uZ0xpdmVkU3RhdGVfaAorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3Jt
Lmg+CisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRGR05vZGVBbGxvY2F0b3Iu
aCIKKyNpbmNsdWRlIDx3dGYvRmFzdEFsbG9jQmFzZS5oPgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5
YWJsZS5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK2NsYXNzIExvbmdM
aXZlZFN0YXRlIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsgV1RGX01BS0VfTk9OQ09Q
WUFCTEUoTG9uZ0xpdmVkU3RhdGUpOworcHVibGljOgorICAgIExvbmdMaXZlZFN0YXRlKCk7Cisg
ICAgfkxvbmdMaXZlZFN0YXRlKCk7CisgICAgCisgICAgdm9pZCBzaHJpbmtUb0ZpdCgpOworICAg
IAorICAgIE5vZGVBbGxvY2F0b3IgbV9hbGxvY2F0b3I7Cit9OworCit9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR0xv
bmdMaXZlZFN0YXRlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2Rl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuY3Bw
CShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmNwcAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSw1NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZHTm9k
ZS5oIgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJERkdOb2RlQWxsb2NhdG9y
LmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKwordW5zaWduZWQgTm9kZTo6
aW5kZXgoKSBjb25zdAoreworICAgIHJldHVybiBOb2RlQWxsb2NhdG9yOjphbGxvY2F0b3JPZih0
aGlzKS0+aW5kZXhPZih0aGlzKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCitu
YW1lc3BhY2UgV1RGIHsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIE5v
ZGUqIG5vZGUpCit7CisgICAgaWYgKCFub2RlKQorICAgICAgICBvdXQucHJpbnQoIi0iKTsKKyAg
ICBlbHNlCisgICAgICAgIG91dC5wcmludCgiQCIsIG5vZGUtPmluZGV4KCkpOworICAgIG91dC5w
cmludChBYmJyZXZpYXRlZFNwZWN1bGF0aW9uRHVtcChub2RlLT5wcmVkaWN0aW9uKCkpKTsKK30K
KworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHJldmlzaW9uIDE0MDUwNCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTIsIDIwMTMgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC02OCw3ICs2OCw3IEBAIHN0cnVjdCBOZXdBcnJheUJ1ZmZlckRhdGEgewogCiAvLyBUaGlz
IHR5cGUgdXNlZCBpbiBwYXNzaW5nIGFuIGltbWVkaWF0ZSBhcmd1bWVudCB0byBOb2RlIGNvbnN0
cnVjdG9yOwogLy8gZGlzdGluZ3Vpc2hlcyBhbiBpbW1lZGlhdGUgdmFsdWUgKHR5cGljYWxseSBh
biBpbmRleCBpbnRvIGEgQ29kZUJsb2NrIGRhdGEgc3RydWN0dXJlIC0gCi0vLyBhIGNvbnN0YW50
IGluZGV4LCBhcmd1bWVudCwgb3IgaWRlbnRpZmllcikgZnJvbSBhIE5vZGVJbmRleC4KKy8vIGEg
Y29uc3RhbnQgaW5kZXgsIGFyZ3VtZW50LCBvciBpZGVudGlmaWVyKSBmcm9tIGEgTm9kZSouCiBz
dHJ1Y3QgT3BJbmZvIHsKICAgICBleHBsaWNpdCBPcEluZm8oaW50MzJfdCB2YWx1ZSkgOiBtX3Zh
bHVlKHN0YXRpY19jYXN0PHVpbnRwdHJfdD4odmFsdWUpKSB7IH0KICAgICBleHBsaWNpdCBPcElu
Zm8odWludDMyX3QgdmFsdWUpIDogbV92YWx1ZShzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KHZhbHVl
KSkgeyB9CkBAIC05OSw3ICs5OSw3IEBAIHN0cnVjdCBOb2RlIHsKICAgICB9CiAgICAgCiAgICAg
Ly8gQ29uc3RydWN0IGEgbm9kZSB3aXRoIHVwIHRvIDMgY2hpbGRyZW4sIG5vIGltbWVkaWF0ZSB2
YWx1ZS4KLSAgICBOb2RlKE5vZGVUeXBlIG9wLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIE5vZGVJ
bmRleCBjaGlsZDEgPSBOb05vZGUsIE5vZGVJbmRleCBjaGlsZDIgPSBOb05vZGUsIE5vZGVJbmRl
eCBjaGlsZDMgPSBOb05vZGUpCisgICAgTm9kZShOb2RlVHlwZSBvcCwgQ29kZU9yaWdpbiBjb2Rl
T3JpZ2luLCBOb2RlKiBjaGlsZDEgPSAwLCBOb2RlKiBjaGlsZDIgPSAwLCBOb2RlKiBjaGlsZDMg
PSAwKQogICAgICAgICA6IGNvZGVPcmlnaW4oY29kZU9yaWdpbikKICAgICAgICAgLCBjaGlsZHJl
bihBZGphY2VuY3lMaXN0OjpGaXhlZCwgY2hpbGQxLCBjaGlsZDIsIGNoaWxkMykKICAgICAgICAg
LCBtX3ZpcnR1YWxSZWdpc3RlcihJbnZhbGlkVmlydHVhbFJlZ2lzdGVyKQpAQCAtMTExLDcgKzEx
MSw3IEBAIHN0cnVjdCBOb2RlIHsKICAgICB9CiAKICAgICAvLyBDb25zdHJ1Y3QgYSBub2RlIHdp
dGggdXAgdG8gMyBjaGlsZHJlbiBhbmQgYW4gaW1tZWRpYXRlIHZhbHVlLgotICAgIE5vZGUoTm9k
ZVR5cGUgb3AsIENvZGVPcmlnaW4gY29kZU9yaWdpbiwgT3BJbmZvIGltbSwgTm9kZUluZGV4IGNo
aWxkMSA9IE5vTm9kZSwgTm9kZUluZGV4IGNoaWxkMiA9IE5vTm9kZSwgTm9kZUluZGV4IGNoaWxk
MyA9IE5vTm9kZSkKKyAgICBOb2RlKE5vZGVUeXBlIG9wLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4s
IE9wSW5mbyBpbW0sIE5vZGUqIGNoaWxkMSA9IDAsIE5vZGUqIGNoaWxkMiA9IDAsIE5vZGUqIGNo
aWxkMyA9IDApCiAgICAgICAgIDogY29kZU9yaWdpbihjb2RlT3JpZ2luKQogICAgICAgICAsIGNo
aWxkcmVuKEFkamFjZW5jeUxpc3Q6OkZpeGVkLCBjaGlsZDEsIGNoaWxkMiwgY2hpbGQzKQogICAg
ICAgICAsIG1fdmlydHVhbFJlZ2lzdGVyKEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIpCkBAIC0xMjQs
NyArMTI0LDcgQEAgc3RydWN0IE5vZGUgewogICAgIH0KIAogICAgIC8vIENvbnN0cnVjdCBhIG5v
ZGUgd2l0aCB1cCB0byAzIGNoaWxkcmVuIGFuZCB0d28gaW1tZWRpYXRlIHZhbHVlcy4KLSAgICBO
b2RlKE5vZGVUeXBlIG9wLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIE9wSW5mbyBpbW0xLCBPcElu
Zm8gaW1tMiwgTm9kZUluZGV4IGNoaWxkMSA9IE5vTm9kZSwgTm9kZUluZGV4IGNoaWxkMiA9IE5v
Tm9kZSwgTm9kZUluZGV4IGNoaWxkMyA9IE5vTm9kZSkKKyAgICBOb2RlKE5vZGVUeXBlIG9wLCBD
b2RlT3JpZ2luIGNvZGVPcmlnaW4sIE9wSW5mbyBpbW0xLCBPcEluZm8gaW1tMiwgTm9kZSogY2hp
bGQxID0gMCwgTm9kZSogY2hpbGQyID0gMCwgTm9kZSogY2hpbGQzID0gMCkKICAgICAgICAgOiBj
b2RlT3JpZ2luKGNvZGVPcmlnaW4pCiAgICAgICAgICwgY2hpbGRyZW4oQWRqYWNlbmN5TGlzdDo6
Rml4ZWQsIGNoaWxkMSwgY2hpbGQyLCBjaGlsZDMpCiAgICAgICAgICwgbV92aXJ0dWFsUmVnaXN0
ZXIoSW52YWxpZFZpcnR1YWxSZWdpc3RlcikKQEAgLTE1NCw2ICsxNTQsOSBAQCBzdHJ1Y3QgTm9k
ZSB7CiAgICAgTm9kZVR5cGUgb3AoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxOb2RlVHlw
ZT4obV9vcCk7IH0KICAgICBOb2RlRmxhZ3MgZmxhZ3MoKSBjb25zdCB7IHJldHVybiBtX2ZsYWdz
OyB9CiAgICAgCisgICAgLy8gVGhpcyBpcyBub3QgYSBmYXN0IG1ldGhvZC4KKyAgICB1bnNpZ25l
ZCBpbmRleCgpIGNvbnN0OworICAgIAogICAgIHZvaWQgc2V0T3AoTm9kZVR5cGUgb3ApCiAgICAg
ewogICAgICAgICBtX29wID0gb3A7CkBAIC0yODEsNyArMjg0LDcgQEAgc3RydWN0IE5vZGUgewog
ICAgICAgICBjb252ZXJ0VG9TdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludChzdHJ1Y3R1cmVT
ZXQoKS5zaW5nbGV0b25TdHJ1Y3R1cmUoKSk7CiAgICAgfQogICAgIAotICAgIHZvaWQgY29udmVy
dFRvR2V0QnlPZmZzZXQodW5zaWduZWQgc3RvcmFnZUFjY2Vzc0RhdGFJbmRleCwgTm9kZUluZGV4
IHN0b3JhZ2UpCisgICAgdm9pZCBjb252ZXJ0VG9HZXRCeU9mZnNldCh1bnNpZ25lZCBzdG9yYWdl
QWNjZXNzRGF0YUluZGV4LCBOb2RlKiBzdG9yYWdlKQogICAgIHsKICAgICAgICAgQVNTRVJUKG1f
b3AgPT0gR2V0QnlJZCB8fCBtX29wID09IEdldEJ5SWRGbHVzaCk7CiAgICAgICAgIG1fb3BJbmZv
ID0gc3RvcmFnZUFjY2Vzc0RhdGFJbmRleDsKQEAgLTI5MCw3ICsyOTMsNyBAQCBzdHJ1Y3QgTm9k
ZSB7CiAgICAgICAgIG1fZmxhZ3MgJj0gfk5vZGVDbG9iYmVyc1dvcmxkOwogICAgIH0KICAgICAK
LSAgICB2b2lkIGNvbnZlcnRUb1B1dEJ5T2Zmc2V0KHVuc2lnbmVkIHN0b3JhZ2VBY2Nlc3NEYXRh
SW5kZXgsIE5vZGVJbmRleCBzdG9yYWdlKQorICAgIHZvaWQgY29udmVydFRvUHV0QnlPZmZzZXQo
dW5zaWduZWQgc3RvcmFnZUFjY2Vzc0RhdGFJbmRleCwgTm9kZSogc3RvcmFnZSkKICAgICB7CiAg
ICAgICAgIEFTU0VSVChtX29wID09IFB1dEJ5SWQgfHwgbV9vcCA9PSBQdXRCeUlkRGlyZWN0KTsK
ICAgICAgICAgbV9vcEluZm8gPSBzdG9yYWdlQWNjZXNzRGF0YUluZGV4OwpAQCAtOTIwLDkgKzky
MywxMCBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAgIHJldHVybiBtX3JlZkNvdW50OwogICAgIH0K
IAotICAgIHZvaWQgcmVmKCkKKyAgICBOb2RlKiByZWYoKQogICAgIHsKICAgICAgICAgbV9yZWZD
b3VudCsrOworICAgICAgICByZXR1cm4gdGhpczsKICAgICB9CiAKICAgICB1bnNpZ25lZCBwb3N0
Zml4UmVmKCkKQEAgLTExMzUsNDQgKzExMzksNDQgQEAgc3RydWN0IE5vZGUgewogICAgICAgICBy
ZXR1cm4gaXNDZWxsU3BlY3VsYXRpb24ocHJlZGljdGlvbigpKTsKICAgICB9CiAgICAgCi0gICAg
c3RhdGljIGJvb2wgc2hvdWxkU3BlY3VsYXRlSW50ZWdlcihOb2RlJiBvcDEsIE5vZGUmIG9wMikK
KyAgICBzdGF0aWMgYm9vbCBzaG91bGRTcGVjdWxhdGVJbnRlZ2VyKE5vZGUqIG9wMSwgTm9kZSog
b3AyKQogICAgIHsKLSAgICAgICAgcmV0dXJuIG9wMS5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkg
JiYgb3AyLnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKTsKKyAgICAgICAgcmV0dXJuIG9wMS0+c2hv
dWxkU3BlY3VsYXRlSW50ZWdlcigpICYmIG9wMi0+c2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpOwog
ICAgIH0KICAgICAKLSAgICBzdGF0aWMgYm9vbCBzaG91bGRTcGVjdWxhdGVJbnRlZ2VyRm9yQXJp
dGhtZXRpYyhOb2RlJiBvcDEsIE5vZGUmIG9wMikKKyAgICBzdGF0aWMgYm9vbCBzaG91bGRTcGVj
dWxhdGVJbnRlZ2VyRm9yQXJpdGhtZXRpYyhOb2RlKiBvcDEsIE5vZGUqIG9wMikKICAgICB7Ci0g
ICAgICAgIHJldHVybiBvcDEuc2hvdWxkU3BlY3VsYXRlSW50ZWdlckZvckFyaXRobWV0aWMoKSAm
JiBvcDIuc2hvdWxkU3BlY3VsYXRlSW50ZWdlckZvckFyaXRobWV0aWMoKTsKKyAgICAgICAgcmV0
dXJuIG9wMS0+c2hvdWxkU3BlY3VsYXRlSW50ZWdlckZvckFyaXRobWV0aWMoKSAmJiBvcDItPnNo
b3VsZFNwZWN1bGF0ZUludGVnZXJGb3JBcml0aG1ldGljKCk7CiAgICAgfQogICAgIAotICAgIHN0
YXRpYyBib29sIHNob3VsZFNwZWN1bGF0ZUludGVnZXJFeHBlY3RpbmdEZWZpbmVkKE5vZGUmIG9w
MSwgTm9kZSYgb3AyKQorICAgIHN0YXRpYyBib29sIHNob3VsZFNwZWN1bGF0ZUludGVnZXJFeHBl
Y3RpbmdEZWZpbmVkKE5vZGUqIG9wMSwgTm9kZSogb3AyKQogICAgIHsKLSAgICAgICAgcmV0dXJu
IG9wMS5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyRXhwZWN0aW5nRGVmaW5lZCgpICYmIG9wMi5zaG91
bGRTcGVjdWxhdGVJbnRlZ2VyRXhwZWN0aW5nRGVmaW5lZCgpOworICAgICAgICByZXR1cm4gb3Ax
LT5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyRXhwZWN0aW5nRGVmaW5lZCgpICYmIG9wMi0+c2hvdWxk
U3BlY3VsYXRlSW50ZWdlckV4cGVjdGluZ0RlZmluZWQoKTsKICAgICB9CiAgICAgCi0gICAgc3Rh
dGljIGJvb2wgc2hvdWxkU3BlY3VsYXRlRG91YmxlRm9yQXJpdGhtZXRpYyhOb2RlJiBvcDEsIE5v
ZGUmIG9wMikKKyAgICBzdGF0aWMgYm9vbCBzaG91bGRTcGVjdWxhdGVEb3VibGVGb3JBcml0aG1l
dGljKE5vZGUqIG9wMSwgTm9kZSogb3AyKQogICAgIHsKLSAgICAgICAgcmV0dXJuIG9wMS5zaG91
bGRTcGVjdWxhdGVEb3VibGVGb3JBcml0aG1ldGljKCkgJiYgb3AyLnNob3VsZFNwZWN1bGF0ZURv
dWJsZUZvckFyaXRobWV0aWMoKTsKKyAgICAgICAgcmV0dXJuIG9wMS0+c2hvdWxkU3BlY3VsYXRl
RG91YmxlRm9yQXJpdGhtZXRpYygpICYmIG9wMi0+c2hvdWxkU3BlY3VsYXRlRG91YmxlRm9yQXJp
dGhtZXRpYygpOwogICAgIH0KICAgICAKLSAgICBzdGF0aWMgYm9vbCBzaG91bGRTcGVjdWxhdGVO
dW1iZXIoTm9kZSYgb3AxLCBOb2RlJiBvcDIpCisgICAgc3RhdGljIGJvb2wgc2hvdWxkU3BlY3Vs
YXRlTnVtYmVyKE5vZGUqIG9wMSwgTm9kZSogb3AyKQogICAgIHsKLSAgICAgICAgcmV0dXJuIG9w
MS5zaG91bGRTcGVjdWxhdGVOdW1iZXIoKSAmJiBvcDIuc2hvdWxkU3BlY3VsYXRlTnVtYmVyKCk7
CisgICAgICAgIHJldHVybiBvcDEtPnNob3VsZFNwZWN1bGF0ZU51bWJlcigpICYmIG9wMi0+c2hv
dWxkU3BlY3VsYXRlTnVtYmVyKCk7CiAgICAgfQogICAgIAotICAgIHN0YXRpYyBib29sIHNob3Vs
ZFNwZWN1bGF0ZU51bWJlckV4cGVjdGluZ0RlZmluZWQoTm9kZSYgb3AxLCBOb2RlJiBvcDIpCisg
ICAgc3RhdGljIGJvb2wgc2hvdWxkU3BlY3VsYXRlTnVtYmVyRXhwZWN0aW5nRGVmaW5lZChOb2Rl
KiBvcDEsIE5vZGUqIG9wMikKICAgICB7Ci0gICAgICAgIHJldHVybiBvcDEuc2hvdWxkU3BlY3Vs
YXRlTnVtYmVyRXhwZWN0aW5nRGVmaW5lZCgpICYmIG9wMi5zaG91bGRTcGVjdWxhdGVOdW1iZXJF
eHBlY3RpbmdEZWZpbmVkKCk7CisgICAgICAgIHJldHVybiBvcDEtPnNob3VsZFNwZWN1bGF0ZU51
bWJlckV4cGVjdGluZ0RlZmluZWQoKSAmJiBvcDItPnNob3VsZFNwZWN1bGF0ZU51bWJlckV4cGVj
dGluZ0RlZmluZWQoKTsKICAgICB9CiAgICAgCi0gICAgc3RhdGljIGJvb2wgc2hvdWxkU3BlY3Vs
YXRlRmluYWxPYmplY3QoTm9kZSYgb3AxLCBOb2RlJiBvcDIpCisgICAgc3RhdGljIGJvb2wgc2hv
dWxkU3BlY3VsYXRlRmluYWxPYmplY3QoTm9kZSogb3AxLCBOb2RlKiBvcDIpCiAgICAgewotICAg
ICAgICByZXR1cm4gb3AxLnNob3VsZFNwZWN1bGF0ZUZpbmFsT2JqZWN0KCkgJiYgb3AyLnNob3Vs
ZFNwZWN1bGF0ZUZpbmFsT2JqZWN0KCk7CisgICAgICAgIHJldHVybiBvcDEtPnNob3VsZFNwZWN1
bGF0ZUZpbmFsT2JqZWN0KCkgJiYgb3AyLT5zaG91bGRTcGVjdWxhdGVGaW5hbE9iamVjdCgpOwog
ICAgIH0KIAotICAgIHN0YXRpYyBib29sIHNob3VsZFNwZWN1bGF0ZUFycmF5KE5vZGUmIG9wMSwg
Tm9kZSYgb3AyKQorICAgIHN0YXRpYyBib29sIHNob3VsZFNwZWN1bGF0ZUFycmF5KE5vZGUqIG9w
MSwgTm9kZSogb3AyKQogICAgIHsKLSAgICAgICAgcmV0dXJuIG9wMS5zaG91bGRTcGVjdWxhdGVB
cnJheSgpICYmIG9wMi5zaG91bGRTcGVjdWxhdGVBcnJheSgpOworICAgICAgICByZXR1cm4gb3Ax
LT5zaG91bGRTcGVjdWxhdGVBcnJheSgpICYmIG9wMi0+c2hvdWxkU3BlY3VsYXRlQXJyYXkoKTsK
ICAgICB9CiAgICAgCiAgICAgYm9vbCBjYW5TcGVjdWxhdGVJbnRlZ2VyKCkKQEAgLTExODQsMTUg
KzExODgsMTcgQEAgc3RydWN0IE5vZGUgewogICAgIHsKICAgICAgICAgaWYgKCFjaGlsZDEoKSkK
ICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgb3V0LnByaW50ZigiQCV1IiwgY2hpbGQxKCku
aW5kZXgoKSk7CisgICAgICAgIG91dC5wcmludGYoIkAldSIsIGNoaWxkMSgpLT5pbmRleCgpKTsK
ICAgICAgICAgaWYgKCFjaGlsZDIoKSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgb3V0
LnByaW50ZigiLCBAJXUiLCBjaGlsZDIoKS5pbmRleCgpKTsKKyAgICAgICAgb3V0LnByaW50Zigi
LCBAJXUiLCBjaGlsZDIoKS0+aW5kZXgoKSk7CiAgICAgICAgIGlmICghY2hpbGQzKCkpCiAgICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIG91dC5wcmludGYoIiwgQCV1IiwgY2hpbGQzKCkuaW5k
ZXgoKSk7CisgICAgICAgIG91dC5wcmludGYoIiwgQCV1IiwgY2hpbGQzKCktPmluZGV4KCkpOwog
ICAgIH0KICAgICAKKyAgICAvLyBOQi4gVGhpcyBjbGFzcyBtdXN0IGhhdmUgYSB0cml2aWFsIGRl
c3RydWN0b3IuCisgICAgCiAgICAgLy8gVXNlZCB0byBsb29rIHVwIGV4Y2VwdGlvbiBoYW5kbGlu
ZyBpbmZvcm1hdGlvbiAoY3VycmVudGx5IGltcGxlbWVudGVkIGFzIGEgYnl0ZWNvZGUgaW5kZXgp
LgogICAgIENvZGVPcmlnaW4gY29kZU9yaWdpbjsKICAgICAvLyBSZWZlcmVuY2VzIHRvIHVwIHRv
IDMgY2hpbGRyZW4sIG9yIGxpbmtzIHRvIGEgdmFyaWFibGUgbGVuZ3RoIHNldCBvZiBjaGlsZHJl
bi4KQEAgLTEyMTUsMTAgKzEyMjEsMTYgQEAgcHJpdmF0ZToKIHB1YmxpYzoKICAgICAvLyBGaWVs
ZHMgdXNlZCBieSB2YXJpb3VzIGFuYWx5c2VzLgogICAgIEFic3RyYWN0VmFsdWUgdmFsdWU7Ci0g
ICAgTm9kZUluZGV4IHJlcGxhY2VtZW50OworICAgIE5vZGUqIHJlcGxhY2VtZW50OwogfTsKIAog
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwogCituYW1lc3BhY2UgV1RGIHsKKwordm9pZCBwcmlu
dEludGVybmFsKFByaW50U3RyZWFtJiwgTm9kZSopOworCit9IC8vIG5hbWVzcGFjZSBXVEYKKwog
I2VuZGlmCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZUFs
bG9jYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9k
ZUFsbG9jYXRvci5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdOb2RlQWxsb2NhdG9yLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTEgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdOb2RlQWxs
b2NhdG9yX2gKKyNkZWZpbmUgREZHTm9kZUFsbG9jYXRvcl9oCisKKyNpbmNsdWRlIDx3dGYvUGxh
dGZvcm0uaD4KKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZHQWxsb2NhdG9y
LmgiCisjaW5jbHVkZSAiREZHTm9kZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERG
RyB7CisKK3R5cGVkZWYgQWxsb2NhdG9yPE5vZGUsIDQwOTU+IE5vZGVBbGxvY2F0b3I7CisKK2lu
bGluZSB2b2lkKiBvcGVyYXRvciBuZXcgKHNpemVfdCBzaXplLCBOb2RlQWxsb2NhdG9yJiBhbGxv
Y2F0b3IpCit7CisgICAgQVNTRVJUKHNpemUgPT0gc2l6ZW9mKE5vZGUpKTsKKyAgICByZXR1cm4g
YWxsb2NhdG9yLmFsbG9jYXRlKCk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKwor
I2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZHTm9kZUFsbG9jYXRvcl9o
CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0
aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
UHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAxNDA1MDQpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEs
IDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDExLCAyMDEyLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtODUsNzUgKzg1LDczIEBAIHB1YmxpYzoKIHByaXZh
dGU6CiAgICAgYm9vbCBzZXRQcmVkaWN0aW9uKFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24pCiAg
ICAgewotICAgICAgICBBU1NFUlQobV9ncmFwaFttX2NvbXBpbGVJbmRleF0uaGFzUmVzdWx0KCkp
OworICAgICAgICBBU1NFUlQobV9jdXJyZW50Tm9kZS0+aGFzUmVzdWx0KCkpOwogICAgICAgICAK
ICAgICAgICAgLy8gc2V0UHJlZGljdGlvbigpIGlzIHVzZWQgd2hlbiB3ZSBrbm93IHRoYXQgdGhl
cmUgaXMgbm8gd2F5IHRoYXQgd2UgY2FuIGNoYW5nZQogICAgICAgICAvLyBvdXIgbWluZHMgYWJv
dXQgd2hhdCB0aGUgcHJlZGljdGlvbiBpcyBnb2luZyB0byBiZS4gVGhlcmUgaXMgbm8gc2VtYW50
aWMKICAgICAgICAgLy8gZGlmZmVyZW5jZSBiZXR3ZWVuIHNldFByZWRpY3Rpb24oKSBhbmQgbWVy
Z2VTcGVjdWxhdGlvbigpIG90aGVyIHRoYW4gdGhlCiAgICAgICAgIC8vIGluY3JlYXNlZCBjaGVj
a2luZyB0byB2YWxpZGF0ZSB0aGlzIHByb3BlcnR5LgotICAgICAgICBBU1NFUlQobV9ncmFwaFtt
X2NvbXBpbGVJbmRleF0ucHJlZGljdGlvbigpID09IFNwZWNOb25lIHx8IG1fZ3JhcGhbbV9jb21w
aWxlSW5kZXhdLnByZWRpY3Rpb24oKSA9PSBwcmVkaWN0aW9uKTsKKyAgICAgICAgQVNTRVJUKG1f
Y3VycmVudE5vZGUtPnByZWRpY3Rpb24oKSA9PSBTcGVjTm9uZSB8fCBtX2N1cnJlbnROb2RlLT5w
cmVkaWN0aW9uKCkgPT0gcHJlZGljdGlvbik7CiAgICAgICAgIAotICAgICAgICByZXR1cm4gbV9n
cmFwaFttX2NvbXBpbGVJbmRleF0ucHJlZGljdChwcmVkaWN0aW9uKTsKKyAgICAgICAgcmV0dXJu
IG1fY3VycmVudE5vZGUtPnByZWRpY3QocHJlZGljdGlvbik7CiAgICAgfQogICAgIAogICAgIGJv
b2wgbWVyZ2VQcmVkaWN0aW9uKFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24pCiAgICAgewotICAg
ICAgICBBU1NFUlQobV9ncmFwaFttX2NvbXBpbGVJbmRleF0uaGFzUmVzdWx0KCkpOworICAgICAg
ICBBU1NFUlQobV9jdXJyZW50Tm9kZS0+aGFzUmVzdWx0KCkpOwogICAgICAgICAKLSAgICAgICAg
cmV0dXJuIG1fZ3JhcGhbbV9jb21waWxlSW5kZXhdLnByZWRpY3QocHJlZGljdGlvbik7CisgICAg
ICAgIHJldHVybiBtX2N1cnJlbnROb2RlLT5wcmVkaWN0KHByZWRpY3Rpb24pOwogICAgIH0KICAg
ICAKLSAgICBib29sIGlzTm90TmVnWmVybyhOb2RlSW5kZXggbm9kZUluZGV4KQorICAgIGJvb2wg
aXNOb3ROZWdaZXJvKE5vZGUqIG5vZGUpCiAgICAgewotICAgICAgICBpZiAoIW1fZ3JhcGguaXNO
dW1iZXJDb25zdGFudChub2RlSW5kZXgpKQorICAgICAgICBpZiAoIW1fZ3JhcGguaXNOdW1iZXJD
b25zdGFudChub2RlKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgZG91Ymxl
IHZhbHVlID0gbV9ncmFwaC52YWx1ZU9mTnVtYmVyQ29uc3RhbnQobm9kZUluZGV4KTsKKyAgICAg
ICAgZG91YmxlIHZhbHVlID0gbV9ncmFwaC52YWx1ZU9mTnVtYmVyQ29uc3RhbnQobm9kZSk7CiAg
ICAgICAgIHJldHVybiAhdmFsdWUgJiYgMS4wIC8gdmFsdWUgPCAwLjA7CiAgICAgfQogICAgIAot
ICAgIGJvb2wgaXNOb3RaZXJvKE5vZGVJbmRleCBub2RlSW5kZXgpCisgICAgYm9vbCBpc05vdFpl
cm8oTm9kZSogbm9kZSkKICAgICB7Ci0gICAgICAgIGlmICghbV9ncmFwaC5pc051bWJlckNvbnN0
YW50KG5vZGVJbmRleCkpCisgICAgICAgIGlmICghbV9ncmFwaC5pc051bWJlckNvbnN0YW50KG5v
ZGUpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICByZXR1cm4gISFtX2dyYXBo
LnZhbHVlT2ZOdW1iZXJDb25zdGFudChub2RlSW5kZXgpOworICAgICAgICByZXR1cm4gISFtX2dy
YXBoLnZhbHVlT2ZOdW1iZXJDb25zdGFudChub2RlKTsKICAgICB9CiAgICAgCi0gICAgYm9vbCBp
c1dpdGhpblBvd2VyT2ZUd29Gb3JDb25zdGFudChOb2RlJiBub2RlLCBpbnQgcG93ZXIpCisgICAg
Ym9vbCBpc1dpdGhpblBvd2VyT2ZUd29Gb3JDb25zdGFudChOb2RlKiBub2RlLCBpbnQgcG93ZXIp
CiAgICAgewotICAgICAgICBKU1ZhbHVlIGltbWVkaWF0ZVZhbHVlID0gbm9kZS52YWx1ZU9mSlND
b25zdGFudChjb2RlQmxvY2soKSk7CisgICAgICAgIEpTVmFsdWUgaW1tZWRpYXRlVmFsdWUgPSBu
b2RlLT52YWx1ZU9mSlNDb25zdGFudChjb2RlQmxvY2soKSk7CiAgICAgICAgIGlmICghaW1tZWRp
YXRlVmFsdWUuaXNJbnQzMigpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBp
bnQzMl90IGludEltbWVkaWF0ZSA9IGltbWVkaWF0ZVZhbHVlLmFzSW50MzIoKTsKICAgICAgICAg
cmV0dXJuIGludEltbWVkaWF0ZSA+IC0oMSA8PCBwb3dlcikgJiYgaW50SW1tZWRpYXRlIDwgKDEg
PDwgcG93ZXIpOwogICAgIH0KICAgICAKLSAgICBib29sIGlzV2l0aGluUG93ZXJPZlR3b05vblJl
Y3Vyc2l2ZShOb2RlSW5kZXggbm9kZUluZGV4LCBpbnQgcG93ZXIpCisgICAgYm9vbCBpc1dpdGhp
blBvd2VyT2ZUd29Ob25SZWN1cnNpdmUoTm9kZSogbm9kZSwgaW50IHBvd2VyKQogICAgIHsKLSAg
ICAgICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhbbm9kZUluZGV4XTsKLSAgICAgICAgaWYgKG5vZGUu
b3AoKSAhPSBKU0NvbnN0YW50KQorICAgICAgICBpZiAobm9kZS0+b3AoKSAhPSBKU0NvbnN0YW50
KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICByZXR1cm4gaXNXaXRoaW5Qb3dl
ck9mVHdvRm9yQ29uc3RhbnQobm9kZSwgcG93ZXIpOwogICAgIH0KICAgICAKLSAgICBib29sIGlz
V2l0aGluUG93ZXJPZlR3byhOb2RlSW5kZXggbm9kZUluZGV4LCBpbnQgcG93ZXIpCisgICAgYm9v
bCBpc1dpdGhpblBvd2VyT2ZUd28oTm9kZSogbm9kZSwgaW50IHBvd2VyKQogICAgIHsKLSAgICAg
ICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhbbm9kZUluZGV4XTsKLSAgICAgICAgc3dpdGNoIChub2Rl
Lm9wKCkpIHsKKyAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CiAgICAgICAgIGNhc2UgSlND
b25zdGFudDogewogICAgICAgICAgICAgcmV0dXJuIGlzV2l0aGluUG93ZXJPZlR3b0ZvckNvbnN0
YW50KG5vZGUsIHBvd2VyKTsKICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgIGNhc2Ug
Qml0QW5kOiB7Ci0gICAgICAgICAgICByZXR1cm4gaXNXaXRoaW5Qb3dlck9mVHdvTm9uUmVjdXJz
aXZlKG5vZGUuY2hpbGQxKCkuaW5kZXgoKSwgcG93ZXIpCi0gICAgICAgICAgICAgICAgfHwgaXNX
aXRoaW5Qb3dlck9mVHdvTm9uUmVjdXJzaXZlKG5vZGUuY2hpbGQyKCkuaW5kZXgoKSwgcG93ZXIp
OworICAgICAgICAgICAgcmV0dXJuIGlzV2l0aGluUG93ZXJPZlR3b05vblJlY3Vyc2l2ZShub2Rl
LT5jaGlsZDEoKS5ub2RlKCksIHBvd2VyKQorICAgICAgICAgICAgICAgIHx8IGlzV2l0aGluUG93
ZXJPZlR3b05vblJlY3Vyc2l2ZShub2RlLT5jaGlsZDIoKS5ub2RlKCksIHBvd2VyKTsKICAgICAg
ICAgfQogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgQml0UlNoaWZ0OgogICAgICAgICBjYXNl
IEJpdFVSU2hpZnQ6IHsKLSAgICAgICAgICAgIE5vZGUmIHNoaWZ0QW1vdW50ID0gbV9ncmFwaFtu
b2RlLmNoaWxkMigpXTsKLSAgICAgICAgICAgIGlmIChzaGlmdEFtb3VudC5vcCgpICE9IEpTQ29u
c3RhbnQpCisgICAgICAgICAgICBOb2RlKiBzaGlmdEFtb3VudCA9IG5vZGUtPmNoaWxkMigpLm5v
ZGUoKTsKKyAgICAgICAgICAgIGlmIChzaGlmdEFtb3VudC0+b3AoKSAhPSBKU0NvbnN0YW50KQog
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIEpTVmFsdWUgaW1tZWRp
YXRlVmFsdWUgPSBzaGlmdEFtb3VudC52YWx1ZU9mSlNDb25zdGFudChjb2RlQmxvY2soKSk7Cisg
ICAgICAgICAgICBKU1ZhbHVlIGltbWVkaWF0ZVZhbHVlID0gc2hpZnRBbW91bnQtPnZhbHVlT2ZK
U0NvbnN0YW50KGNvZGVCbG9jaygpKTsKICAgICAgICAgICAgIGlmICghaW1tZWRpYXRlVmFsdWUu
aXNJbnQzMigpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgIHJl
dHVybiBpbW1lZGlhdGVWYWx1ZSA+IDMyIC0gcG93ZXI7CkBAIC0xNzgsMTYgKzE3NiwxNiBAQCBw
cml2YXRlOgogICAgICAgICByZXR1cm4gc3BlY3VsYXRlZERvdWJsZVR5cGVGb3JQcmVkaWN0aW9u
KG1lcmdlU3BlY3VsYXRpb25zKGxlZnQsIHJpZ2h0KSk7CiAgICAgfQogCi0gICAgdm9pZCBwcm9w
YWdhdGUoTm9kZSYgbm9kZSkKKyAgICB2b2lkIHByb3BhZ2F0ZShOb2RlKiBub2RlKQogICAgIHsK
LSAgICAgICAgaWYgKCFub2RlLnNob3VsZEdlbmVyYXRlKCkpCisgICAgICAgIGlmICghbm9kZS0+
c2hvdWxkR2VuZXJhdGUoKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgCi0gICAgICAg
IE5vZGVUeXBlIG9wID0gbm9kZS5vcCgpOwotICAgICAgICBOb2RlRmxhZ3MgZmxhZ3MgPSBub2Rl
LmZsYWdzKCkgJiBOb2RlQmFja1Byb3BNYXNrOworICAgICAgICBOb2RlVHlwZSBvcCA9IG5vZGUt
Pm9wKCk7CisgICAgICAgIE5vZGVGbGFncyBmbGFncyA9IG5vZGUtPmZsYWdzKCkgJiBOb2RlQmFj
a1Byb3BNYXNrOwogCiAjaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQot
ICAgICAgICBkYXRhTG9nRigiICAgJXMgQCV1OiAlcyAiLCBHcmFwaDo6b3BOYW1lKG9wKSwgbV9j
b21waWxlSW5kZXgsIG5vZGVGbGFnc0FzU3RyaW5nKGZsYWdzKSk7CisgICAgICAgIGRhdGFMb2co
IiAgICIsIEdyYXBoOjpvcE5hbWUob3ApLCAiICIsIG1fY3VycmVudE5vZGUsICI6ICIsIG5vZGVG
bGFnc0FzU3RyaW5nKGZsYWdzKSwgIiAiKTsKICNlbmRpZgogICAgICAgICAKICAgICAgICAgYm9v
bCBjaGFuZ2VkID0gZmFsc2U7CkBAIC0xOTUsMTIgKzE5MywxMiBAQCBwcml2YXRlOgogICAgICAg
ICBzd2l0Y2ggKG9wKSB7CiAgICAgICAgIGNhc2UgSlNDb25zdGFudDoKICAgICAgICAgY2FzZSBX
ZWFrSlNDb25zdGFudDogewotICAgICAgICAgICAgY2hhbmdlZCB8PSBzZXRQcmVkaWN0aW9uKHNw
ZWN1bGF0aW9uRnJvbVZhbHVlKG1fZ3JhcGgudmFsdWVPZkpTQ29uc3RhbnQobV9jb21waWxlSW5k
ZXgpKSk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IHNldFByZWRpY3Rpb24oc3BlY3VsYXRpb25G
cm9tVmFsdWUobV9ncmFwaC52YWx1ZU9mSlNDb25zdGFudChub2RlKSkpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBjYXNlIEdldExvY2FsOiB7
Ci0gICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9IG5v
ZGUudmFyaWFibGVBY2Nlc3NEYXRhKCk7CisgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEq
IHZhcmlhYmxlQWNjZXNzRGF0YSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOwogICAgICAg
ICAgICAgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiA9IHZhcmlhYmxlQWNjZXNzRGF0YS0+cHJl
ZGljdGlvbigpOwogICAgICAgICAgICAgaWYgKHByZWRpY3Rpb24pCiAgICAgICAgICAgICAgICAg
Y2hhbmdlZCB8PSBtZXJnZVByZWRpY3Rpb24ocHJlZGljdGlvbik7CkBAIC0yMTAsMjEgKzIwOCwy
MSBAQCBwcml2YXRlOgogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBTZXRM
b2NhbDogewotICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0Rh
dGEgPSBub2RlLnZhcmlhYmxlQWNjZXNzRGF0YSgpOwotICAgICAgICAgICAgY2hhbmdlZCB8PSB2
YXJpYWJsZUFjY2Vzc0RhdGEtPnByZWRpY3QobV9ncmFwaFtub2RlLmNoaWxkMSgpXS5wcmVkaWN0
aW9uKCkpOworICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0Rh
dGEgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0g
dmFyaWFibGVBY2Nlc3NEYXRhLT5wcmVkaWN0KG5vZGUtPmNoaWxkMSgpLT5wcmVkaWN0aW9uKCkp
OwogCiAgICAgICAgICAgICAvLyBBc3N1bWUgY29uc2VydmF0aXZlbHkgdGhhdCBhIFNldExvY2Fs
IGltcGxpZXMgdGhhdCB0aGUgdmFsdWUgbWF5IGZsb3cgdGhyb3VnaCBhIGxvb3AsCiAgICAgICAg
ICAgICAvLyBhbmQgc28gd2Ugd291bGQgaGF2ZSBvdmVyZmxvdyBsZWFkaW5nIHRvIHRoZSBwcm9n
cmFtICJvYnNlcnZpbmciIG51bWJlcnMgZXZlbiBpZiBhbGwKICAgICAgICAgICAgIC8vIHVzZXJz
IG9mIHRoZSB2YWx1ZSBhcmUgZG9pbmcgdG9JbnQzMi4gSXQgbWlnaHQgYmUgd29ydGh3aGlsZSB0
byByZXZpc2l0IHRoaXMgYXQgc29tZQogICAgICAgICAgICAgLy8gcG9pbnQgYW5kIGFjdHVhbGx5
IGNoZWNrIGlmIHRoZSBkYXRhIGZsb3cgaW52b2x2ZXMgbG9vcHMsIGJ1dCByaWdodCBub3cgSSBk
b24ndCB0aGluawogICAgICAgICAgICAgLy8gd2UgaGF2ZSBldmlkZW5jZSB0aGF0IHRoaXMgd291
bGQgYmUgYmVuZWZpY2lhbCBmb3IgYmVuY2htYXJrcy4KLSAgICAgICAgICAgIGNoYW5nZWQgfD0g
bV9ncmFwaFtub2RlLmNoaWxkMSgpXS5tZXJnZUZsYWdzKHZhcmlhYmxlQWNjZXNzRGF0YS0+Zmxh
Z3MoKSB8IE5vZGVVc2VkQXNOdW1iZXIpOworICAgICAgICAgICAgY2hhbmdlZCB8PSBub2RlLT5j
aGlsZDEoKS0+bWVyZ2VGbGFncyh2YXJpYWJsZUFjY2Vzc0RhdGEtPmZsYWdzKCkgfCBOb2RlVXNl
ZEFzTnVtYmVyKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAK
ICAgICAgICAgY2FzZSBGbHVzaDogewogICAgICAgICAgICAgLy8gTWFrZSBzdXJlIHRoYXQgdGhl
IGFuYWx5c2lzIGtub3dzIHRoYXQgZmx1c2hlZCBsb2NhbHMgZXNjYXBlLgotICAgICAgICAgICAg
VmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBub2RlLnZhcmlhYmxlQWNj
ZXNzRGF0YSgpOworICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vz
c0RhdGEgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKICAgICAgICAgICAgIGNoYW5nZWQg
fD0gdmFyaWFibGVBY2Nlc3NEYXRhLT5tZXJnZUZsYWdzKE5vZGVVc2VkQXNWYWx1ZSk7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtMjM4LDggKzIzNiw4IEBAIHByaXZhdGU6CiAg
ICAgICAgICAgICBjaGFuZ2VkIHw9IHNldFByZWRpY3Rpb24oU3BlY0ludDMyKTsKICAgICAgICAg
ICAgIGZsYWdzIHw9IE5vZGVVc2VkQXNJbnQgfCBOb2RlVXNlZEFzSW50TG9jYWxseTsKICAgICAg
ICAgICAgIGZsYWdzICY9IH4oTm9kZVVzZWRBc051bWJlciB8IE5vZGVOZWVkc05lZ1plcm8gfCBO
b2RlVXNlZEFzT3RoZXIpOwotICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW25vZGUuY2hp
bGQxKCldLm1lcmdlRmxhZ3MoZmxhZ3MpOwotICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBo
W25vZGUuY2hpbGQyKCldLm1lcmdlRmxhZ3MoZmxhZ3MpOworICAgICAgICAgICAgY2hhbmdlZCB8
PSBub2RlLT5jaGlsZDEoKS0+bWVyZ2VGbGFncyhmbGFncyk7CisgICAgICAgICAgICBjaGFuZ2Vk
IHw9IG5vZGUtPmNoaWxkMigpLT5tZXJnZUZsYWdzKGZsYWdzKTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9CiAgICAgICAgICAgICAKQEAgLTI0Nyw1MCArMjQ1LDUwIEBAIHByaXZhdGU6
CiAgICAgICAgICAgICBjaGFuZ2VkIHw9IHNldFByZWRpY3Rpb24oU3BlY0ludDMyKTsKICAgICAg
ICAgICAgIGZsYWdzIHw9IE5vZGVVc2VkQXNJbnQgfCBOb2RlVXNlZEFzSW50TG9jYWxseTsKICAg
ICAgICAgICAgIGZsYWdzICY9IH4oTm9kZVVzZWRBc051bWJlciB8IE5vZGVOZWVkc05lZ1plcm8g
fCBOb2RlVXNlZEFzT3RoZXIpOwotICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW25vZGUu
Y2hpbGQxKCldLm1lcmdlRmxhZ3MoZmxhZ3MpOworICAgICAgICAgICAgY2hhbmdlZCB8PSBub2Rl
LT5jaGlsZDEoKS0+bWVyZ2VGbGFncyhmbGFncyk7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgfQogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgQXJyYXlQb3A6IHsKLSAgICAgICAgICAg
IGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKG5vZGUuZ2V0SGVhcFByZWRpY3Rpb24oKSk7Cisg
ICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbihub2RlLT5nZXRIZWFwUHJlZGlj
dGlvbigpKTsKICAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VEZWZhdWx0RmxhZ3Mobm9kZSk7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCiAgICAgICAgIGNhc2UgQXJyYXlQdXNo
OiB7Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbihub2RlLmdldEhlYXBQ
cmVkaWN0aW9uKCkpOwotICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQx
KCldLm1lcmdlRmxhZ3MoTm9kZVVzZWRBc1ZhbHVlKTsKLSAgICAgICAgICAgIGNoYW5nZWQgfD0g
bV9ncmFwaFtub2RlLmNoaWxkMigpXS5tZXJnZUZsYWdzKE5vZGVVc2VkQXNWYWx1ZSk7CisgICAg
ICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbihub2RlLT5nZXRIZWFwUHJlZGljdGlv
bigpKTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbm9kZS0+Y2hpbGQxKCktPm1lcmdlRmxhZ3Mo
Tm9kZVVzZWRBc1ZhbHVlKTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbm9kZS0+Y2hpbGQyKCkt
Pm1lcmdlRmxhZ3MoTm9kZVVzZWRBc1ZhbHVlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9CiAKICAgICAgICAgY2FzZSBSZWdFeHBFeGVjOgogICAgICAgICBjYXNlIFJlZ0V4cFRlc3Q6
IHsKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKG5vZGUuZ2V0SGVhcFBy
ZWRpY3Rpb24oKSk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbihub2Rl
LT5nZXRIZWFwUHJlZGljdGlvbigpKTsKICAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VEZWZh
dWx0RmxhZ3Mobm9kZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCiAgICAgICAg
IGNhc2UgU3RyaW5nQ2hhckNvZGVBdDogewogICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVBy
ZWRpY3Rpb24oU3BlY0ludDMyKTsKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaFtub2Rl
LmNoaWxkMSgpXS5tZXJnZUZsYWdzKE5vZGVVc2VkQXNWYWx1ZSk7Ci0gICAgICAgICAgICBjaGFu
Z2VkIHw9IG1fZ3JhcGhbbm9kZS5jaGlsZDIoKV0ubWVyZ2VGbGFncyhOb2RlVXNlZEFzTnVtYmVy
IHwgTm9kZVVzZWRBc090aGVyIHwgTm9kZVVzZWRBc0ludCB8IE5vZGVVc2VkQXNJbnRMb2NhbGx5
KTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbm9kZS0+Y2hpbGQxKCktPm1lcmdlRmxhZ3MoTm9k
ZVVzZWRBc1ZhbHVlKTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbm9kZS0+Y2hpbGQyKCktPm1l
cmdlRmxhZ3MoTm9kZVVzZWRBc051bWJlciB8IE5vZGVVc2VkQXNPdGhlciB8IE5vZGVVc2VkQXNJ
bnQgfCBOb2RlVXNlZEFzSW50TG9jYWxseSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
fQogCiAgICAgICAgIGNhc2UgVUludDMyVG9OdW1iZXI6IHsKLSAgICAgICAgICAgIGlmIChub2Rl
Q2FuU3BlY3VsYXRlSW50ZWdlcihub2RlLmFyaXRoTm9kZUZsYWdzKCkpKQorICAgICAgICAgICAg
aWYgKG5vZGVDYW5TcGVjdWxhdGVJbnRlZ2VyKG5vZGUtPmFyaXRoTm9kZUZsYWdzKCkpKQogICAg
ICAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKFNwZWNJbnQzMik7CiAgICAg
ICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVByZWRpY3Rpb24o
U3BlY051bWJlcik7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFw
aFtub2RlLmNoaWxkMSgpXS5tZXJnZUZsYWdzKGZsYWdzKTsKKyAgICAgICAgICAgIGNoYW5nZWQg
fD0gbm9kZS0+Y2hpbGQxKCktPm1lcmdlRmxhZ3MoZmxhZ3MpOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIFZhbHVlQWRkOiB7Ci0gICAgICAgICAgICBTcGVj
dWxhdGVkVHlwZSBsZWZ0ID0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5wcmVkaWN0aW9uKCk7Ci0g
ICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSByaWdodCA9IG1fZ3JhcGhbbm9kZS5jaGlsZDIoKV0u
cHJlZGljdGlvbigpOworICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgbGVmdCA9IG5vZGUtPmNo
aWxkMSgpLT5wcmVkaWN0aW9uKCk7CisgICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSByaWdodCA9
IG5vZGUtPmNoaWxkMigpLT5wcmVkaWN0aW9uKCk7CiAgICAgICAgICAgICAKICAgICAgICAgICAg
IEFkZFNwZWN1bGF0aW9uTW9kZSBtb2RlID0gRG9udFNwZWN1bGF0ZUludGVnZXI7CiAgICAgICAg
ICAgICAKQEAgLTMwNywyMiArMzA1LDIyIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAg
IGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKFNwZWNTdHJpbmcgfCBTcGVjSW50MzIgfCBTcGVj
RG91YmxlKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKGlz
Tm90TmVnWmVybyhub2RlLmNoaWxkMSgpLmluZGV4KCkpIHx8IGlzTm90TmVnWmVybyhub2RlLmNo
aWxkMigpLmluZGV4KCkpKQorICAgICAgICAgICAgaWYgKGlzTm90TmVnWmVybyhub2RlLT5jaGls
ZDEoKS5ub2RlKCkpIHx8IGlzTm90TmVnWmVybyhub2RlLT5jaGlsZDIoKS5ub2RlKCkpKQogICAg
ICAgICAgICAgICAgIGZsYWdzICY9IH5Ob2RlTmVlZHNOZWdaZXJvOwotICAgICAgICAgICAgaWYg
KG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0uaGFzTnVtYmVyUmVzdWx0KCkgfHwgbV9ncmFwaFtub2Rl
LmNoaWxkMigpXS5oYXNOdW1iZXJSZXN1bHQoKSkKKyAgICAgICAgICAgIGlmIChub2RlLT5jaGls
ZDEoKS0+aGFzTnVtYmVyUmVzdWx0KCkgfHwgbm9kZS0+Y2hpbGQyKCktPmhhc051bWJlclJlc3Vs
dCgpKQogICAgICAgICAgICAgICAgIGZsYWdzICY9IH5Ob2RlVXNlZEFzT3RoZXI7CiAgICAgICAg
ICAgICAKICAgICAgICAgICAgIGlmIChtb2RlICE9IFNwZWN1bGF0ZUludGVnZXIpCiAgICAgICAg
ICAgICAgICAgZmxhZ3MgfD0gTm9kZVVzZWRBc051bWJlcjsKICAgICAgICAgICAgIAotICAgICAg
ICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLm1lcmdlRmxhZ3MoZmxhZ3Mp
OwotICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQyKCldLm1lcmdlRmxh
Z3MoZmxhZ3MpOworICAgICAgICAgICAgY2hhbmdlZCB8PSBub2RlLT5jaGlsZDEoKS0+bWVyZ2VG
bGFncyhmbGFncyk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG5vZGUtPmNoaWxkMigpLT5tZXJn
ZUZsYWdzKGZsYWdzKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAg
ICAKICAgICAgICAgY2FzZSBBcml0aEFkZDogewotICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUg
bGVmdCA9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ucHJlZGljdGlvbigpOwotICAgICAgICAgICAg
U3BlY3VsYXRlZFR5cGUgcmlnaHQgPSBtX2dyYXBoW25vZGUuY2hpbGQyKCldLnByZWRpY3Rpb24o
KTsKKyAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIGxlZnQgPSBub2RlLT5jaGlsZDEoKS0+cHJl
ZGljdGlvbigpOworICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgcmlnaHQgPSBub2RlLT5jaGls
ZDIoKS0+cHJlZGljdGlvbigpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBBZGRTcGVjdWxh
dGlvbk1vZGUgbW9kZSA9IERvbnRTcGVjdWxhdGVJbnRlZ2VyOwogICAgICAgICAgICAgCkBAIC0z
MzMsMjEgKzMzMSwyMSBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9
IG1lcmdlUHJlZGljdGlvbihzcGVjdWxhdGVkRG91YmxlVHlwZUZvclByZWRpY3Rpb25zKGxlZnQs
IHJpZ2h0KSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChp
c05vdE5lZ1plcm8obm9kZS5jaGlsZDEoKS5pbmRleCgpKSB8fCBpc05vdE5lZ1plcm8obm9kZS5j
aGlsZDIoKS5pbmRleCgpKSkKKyAgICAgICAgICAgIGlmIChpc05vdE5lZ1plcm8obm9kZS0+Y2hp
bGQxKCkubm9kZSgpKSB8fCBpc05vdE5lZ1plcm8obm9kZS0+Y2hpbGQyKCkubm9kZSgpKSkKICAg
ICAgICAgICAgICAgICBmbGFncyAmPSB+Tm9kZU5lZWRzTmVnWmVybzsKICAgICAgICAgICAgIGZs
YWdzICY9IH5Ob2RlVXNlZEFzT3RoZXI7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlmICht
b2RlICE9IFNwZWN1bGF0ZUludGVnZXIpCiAgICAgICAgICAgICAgICAgZmxhZ3MgfD0gTm9kZVVz
ZWRBc051bWJlcjsKICAgICAgICAgICAgIAotICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBo
W25vZGUuY2hpbGQxKCldLm1lcmdlRmxhZ3MoZmxhZ3MpOwotICAgICAgICAgICAgY2hhbmdlZCB8
PSBtX2dyYXBoW25vZGUuY2hpbGQyKCldLm1lcmdlRmxhZ3MoZmxhZ3MpOworICAgICAgICAgICAg
Y2hhbmdlZCB8PSBub2RlLT5jaGlsZDEoKS0+bWVyZ2VGbGFncyhmbGFncyk7CisgICAgICAgICAg
ICBjaGFuZ2VkIHw9IG5vZGUtPmNoaWxkMigpLT5tZXJnZUZsYWdzKGZsYWdzKTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBBcml0aFN1
YjogewotICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgbGVmdCA9IG1fZ3JhcGhbbm9kZS5jaGls
ZDEoKV0ucHJlZGljdGlvbigpOwotICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgcmlnaHQgPSBt
X2dyYXBoW25vZGUuY2hpbGQyKCldLnByZWRpY3Rpb24oKTsKKyAgICAgICAgICAgIFNwZWN1bGF0
ZWRUeXBlIGxlZnQgPSBub2RlLT5jaGlsZDEoKS0+cHJlZGljdGlvbigpOworICAgICAgICAgICAg
U3BlY3VsYXRlZFR5cGUgcmlnaHQgPSBub2RlLT5jaGlsZDIoKS0+cHJlZGljdGlvbigpOwogICAg
ICAgICAgICAgCiAgICAgICAgICAgICBBZGRTcGVjdWxhdGlvbk1vZGUgbW9kZSA9IERvbnRTcGVj
dWxhdGVJbnRlZ2VyOwogICAgICAgICAgICAgCkBAIC0zNTgsMzkgKzM1NiwzOSBAQCBwcml2YXRl
OgogICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbihzcGVjdWxh
dGVkRG91YmxlVHlwZUZvclByZWRpY3Rpb25zKGxlZnQsIHJpZ2h0KSk7CiAgICAgICAgICAgICB9
CiAKLSAgICAgICAgICAgIGlmIChpc05vdFplcm8obm9kZS5jaGlsZDEoKS5pbmRleCgpKSB8fCBp
c05vdFplcm8obm9kZS5jaGlsZDIoKS5pbmRleCgpKSkKKyAgICAgICAgICAgIGlmIChpc05vdFpl
cm8obm9kZS0+Y2hpbGQxKCkubm9kZSgpKSB8fCBpc05vdFplcm8obm9kZS0+Y2hpbGQyKCkubm9k
ZSgpKSkKICAgICAgICAgICAgICAgICBmbGFncyAmPSB+Tm9kZU5lZWRzTmVnWmVybzsKICAgICAg
ICAgICAgIGZsYWdzICY9IH5Ob2RlVXNlZEFzT3RoZXI7CiAgICAgICAgICAgICAKICAgICAgICAg
ICAgIGlmIChtb2RlICE9IFNwZWN1bGF0ZUludGVnZXIpCiAgICAgICAgICAgICAgICAgZmxhZ3Mg
fD0gTm9kZVVzZWRBc051bWJlcjsKICAgICAgICAgICAgIAotICAgICAgICAgICAgY2hhbmdlZCB8
PSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLm1lcmdlRmxhZ3MoZmxhZ3MpOwotICAgICAgICAgICAg
Y2hhbmdlZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQyKCldLm1lcmdlRmxhZ3MoZmxhZ3MpOworICAg
ICAgICAgICAgY2hhbmdlZCB8PSBub2RlLT5jaGlsZDEoKS0+bWVyZ2VGbGFncyhmbGFncyk7Cisg
ICAgICAgICAgICBjaGFuZ2VkIHw9IG5vZGUtPmNoaWxkMigpLT5tZXJnZUZsYWdzKGZsYWdzKTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2Fz
ZSBBcml0aE5lZ2F0ZToKLSAgICAgICAgICAgIGlmIChtX2dyYXBoW25vZGUuY2hpbGQxKCldLnBy
ZWRpY3Rpb24oKSkgeworICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5wcmVkaWN0aW9u
KCkpIHsKICAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC5uZWdhdGVTaG91bGRTcGVjdWxhdGVJ
bnRlZ2VyKG5vZGUpKQogICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGlj
dGlvbihTcGVjSW50MzIpOwogICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAg
ICAgY2hhbmdlZCB8PSBtZXJnZVByZWRpY3Rpb24oc3BlY3VsYXRlZERvdWJsZVR5cGVGb3JQcmVk
aWN0aW9uKG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ucHJlZGljdGlvbigpKSk7CisgICAgICAgICAg
ICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKHNwZWN1bGF0ZWREb3VibGVUeXBl
Rm9yUHJlZGljdGlvbihub2RlLT5jaGlsZDEoKS0+cHJlZGljdGlvbigpKSk7CiAgICAgICAgICAg
ICB9CiAKICAgICAgICAgICAgIGZsYWdzICY9IH5Ob2RlVXNlZEFzT3RoZXI7CiAKLSAgICAgICAg
ICAgIGNoYW5nZWQgfD0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5tZXJnZUZsYWdzKGZsYWdzKTsK
KyAgICAgICAgICAgIGNoYW5nZWQgfD0gbm9kZS0+Y2hpbGQxKCktPm1lcmdlRmxhZ3MoZmxhZ3Mp
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBBcml0aE1p
bjoKICAgICAgICAgY2FzZSBBcml0aE1heDogewotICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUg
bGVmdCA9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ucHJlZGljdGlvbigpOwotICAgICAgICAgICAg
U3BlY3VsYXRlZFR5cGUgcmlnaHQgPSBtX2dyYXBoW25vZGUuY2hpbGQyKCldLnByZWRpY3Rpb24o
KTsKKyAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIGxlZnQgPSBub2RlLT5jaGlsZDEoKS0+cHJl
ZGljdGlvbigpOworICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgcmlnaHQgPSBub2RlLT5jaGls
ZDIoKS0+cHJlZGljdGlvbigpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAobGVmdCAm
JiByaWdodCkgewotICAgICAgICAgICAgICAgIGlmIChOb2RlOjpzaG91bGRTcGVjdWxhdGVJbnRl
Z2VyRm9yQXJpdGhtZXRpYyhtX2dyYXBoW25vZGUuY2hpbGQxKCldLCBtX2dyYXBoW25vZGUuY2hp
bGQyKCldKQotICAgICAgICAgICAgICAgICAgICAmJiBub2RlQ2FuU3BlY3VsYXRlSW50ZWdlcihu
b2RlLmFyaXRoTm9kZUZsYWdzKCkpKQorICAgICAgICAgICAgICAgIGlmIChOb2RlOjpzaG91bGRT
cGVjdWxhdGVJbnRlZ2VyRm9yQXJpdGhtZXRpYyhub2RlLT5jaGlsZDEoKS5ub2RlKCksIG5vZGUt
PmNoaWxkMigpLm5vZGUoKSkKKyAgICAgICAgICAgICAgICAgICAgJiYgbm9kZUNhblNwZWN1bGF0
ZUludGVnZXIobm9kZS0+YXJpdGhOb2RlRmxhZ3MoKSkpCiAgICAgICAgICAgICAgICAgICAgIGNo
YW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKFNwZWNJbnQzMik7CiAgICAgICAgICAgICAgICAgZWxz
ZQogICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbihzcGVjdWxh
dGVkRG91YmxlVHlwZUZvclByZWRpY3Rpb25zKGxlZnQsIHJpZ2h0KSk7CkBAIC0zOTksMTQgKzM5
NywxNCBAQCBwcml2YXRlOgogICAgICAgICAgICAgZmxhZ3MgfD0gTm9kZVVzZWRBc051bWJlcjsK
ICAgICAgICAgICAgIGZsYWdzICY9IH5Ob2RlVXNlZEFzT3RoZXI7CiAKLSAgICAgICAgICAgIGNo
YW5nZWQgfD0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5tZXJnZUZsYWdzKGZsYWdzKTsKLSAgICAg
ICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaFtub2RlLmNoaWxkMigpXS5tZXJnZUZsYWdzKGZsYWdz
KTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbm9kZS0+Y2hpbGQxKCktPm1lcmdlRmxhZ3MoZmxh
Z3MpOworICAgICAgICAgICAgY2hhbmdlZCB8PSBub2RlLT5jaGlsZDIoKS0+bWVyZ2VGbGFncyhm
bGFncyk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCiAgICAgICAgIGNhc2UgQXJp
dGhNdWw6IHsKLSAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIGxlZnQgPSBtX2dyYXBoW25vZGUu
Y2hpbGQxKCldLnByZWRpY3Rpb24oKTsKLSAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHJpZ2h0
ID0gbV9ncmFwaFtub2RlLmNoaWxkMigpXS5wcmVkaWN0aW9uKCk7CisgICAgICAgICAgICBTcGVj
dWxhdGVkVHlwZSBsZWZ0ID0gbm9kZS0+Y2hpbGQxKCktPnByZWRpY3Rpb24oKTsKKyAgICAgICAg
ICAgIFNwZWN1bGF0ZWRUeXBlIHJpZ2h0ID0gbm9kZS0+Y2hpbGQyKCktPnByZWRpY3Rpb24oKTsK
ICAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKGxlZnQgJiYgcmlnaHQpIHsKICAgICAgICAg
ICAgICAgICBpZiAobV9ncmFwaC5tdWxTaG91bGRTcGVjdWxhdGVJbnRlZ2VyKG5vZGUpKQpAQCAt
NDIyLDggKzQyMCw4IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAvLyBpdHNlbGYgdW5sZXNzIHdl
IGNhbiBwcm92ZSB0aGF0IHRoZXJlIGlzIG5vIHdheSBmb3IgdGhlIHZhbHVlcwogICAgICAgICAg
ICAgLy8gcHJvZHVjZWQgdG8gY2F1c2UgZG91YmxlIHJvdW5kaW5nLgogICAgICAgICAgICAgCi0g
ICAgICAgICAgICBpZiAoIWlzV2l0aGluUG93ZXJPZlR3byhub2RlLmNoaWxkMSgpLmluZGV4KCks
IDIyKQotICAgICAgICAgICAgICAgICYmICFpc1dpdGhpblBvd2VyT2ZUd28obm9kZS5jaGlsZDIo
KS5pbmRleCgpLCAyMikpCisgICAgICAgICAgICBpZiAoIWlzV2l0aGluUG93ZXJPZlR3byhub2Rl
LT5jaGlsZDEoKS5ub2RlKCksIDIyKQorICAgICAgICAgICAgICAgICYmICFpc1dpdGhpblBvd2Vy
T2ZUd28obm9kZS0+Y2hpbGQyKCkubm9kZSgpLCAyMikpCiAgICAgICAgICAgICAgICAgZmxhZ3Mg
fD0gTm9kZVVzZWRBc051bWJlcjsKICAgICAgICAgICAgIAogICAgICAgICAgICAgY2hhbmdlZCB8
PSBub2RlLm1lcmdlRmxhZ3MoZmxhZ3MpOwpAQCAtNDMxLDE4ICs0MjksMTggQEAgcHJpdmF0ZToK
ICAgICAgICAgICAgIGZsYWdzIHw9IE5vZGVVc2VkQXNOdW1iZXIgfCBOb2RlTmVlZHNOZWdaZXJv
OwogICAgICAgICAgICAgZmxhZ3MgJj0gfk5vZGVVc2VkQXNPdGhlcjsKIAotICAgICAgICAgICAg
Y2hhbmdlZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLm1lcmdlRmxhZ3MoZmxhZ3MpOwotICAg
ICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQyKCldLm1lcmdlRmxhZ3MoZmxh
Z3MpOworICAgICAgICAgICAgY2hhbmdlZCB8PSBub2RlLT5jaGlsZDEoKS0+bWVyZ2VGbGFncyhm
bGFncyk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG5vZGUtPmNoaWxkMigpLT5tZXJnZUZsYWdz
KGZsYWdzKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKICAg
ICAgICAgY2FzZSBBcml0aERpdjogewotICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgbGVmdCA9
IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ucHJlZGljdGlvbigpOwotICAgICAgICAgICAgU3BlY3Vs
YXRlZFR5cGUgcmlnaHQgPSBtX2dyYXBoW25vZGUuY2hpbGQyKCldLnByZWRpY3Rpb24oKTsKKyAg
ICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIGxlZnQgPSBub2RlLT5jaGlsZDEoKS0+cHJlZGljdGlv
bigpOworICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgcmlnaHQgPSBub2RlLT5jaGlsZDIoKS0+
cHJlZGljdGlvbigpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAobGVmdCAmJiByaWdo
dCkgewotICAgICAgICAgICAgICAgIGlmIChOb2RlOjpzaG91bGRTcGVjdWxhdGVJbnRlZ2VyRm9y
QXJpdGhtZXRpYyhtX2dyYXBoW25vZGUuY2hpbGQxKCldLCBtX2dyYXBoW25vZGUuY2hpbGQyKCld
KQotICAgICAgICAgICAgICAgICAgICAmJiBub2RlQ2FuU3BlY3VsYXRlSW50ZWdlcihub2RlLmFy
aXRoTm9kZUZsYWdzKCkpKQorICAgICAgICAgICAgICAgIGlmIChOb2RlOjpzaG91bGRTcGVjdWxh
dGVJbnRlZ2VyRm9yQXJpdGhtZXRpYyhub2RlLT5jaGlsZDEoKS5ub2RlKCksIG5vZGUtPmNoaWxk
MigpLm5vZGUoKSkKKyAgICAgICAgICAgICAgICAgICAgJiYgbm9kZUNhblNwZWN1bGF0ZUludGVn
ZXIobm9kZS0+YXJpdGhOb2RlRmxhZ3MoKSkpCiAgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQg
fD0gbWVyZ2VQcmVkaWN0aW9uKFNwZWNJbnQzMik7CiAgICAgICAgICAgICAgICAgZWxzZQogICAg
ICAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbihTcGVjRG91YmxlKTsK
QEAgLTQ1NiwxOCArNDU0LDE4IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBmbGFncyB8PSBOb2Rl
VXNlZEFzTnVtYmVyIHwgTm9kZU5lZWRzTmVnWmVybzsKICAgICAgICAgICAgIGZsYWdzICY9IH5O
b2RlVXNlZEFzT3RoZXI7CiAKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaFtub2RlLmNo
aWxkMSgpXS5tZXJnZUZsYWdzKGZsYWdzKTsKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFw
aFtub2RlLmNoaWxkMigpXS5tZXJnZUZsYWdzKGZsYWdzKTsKKyAgICAgICAgICAgIGNoYW5nZWQg
fD0gbm9kZS0+Y2hpbGQxKCktPm1lcmdlRmxhZ3MoZmxhZ3MpOworICAgICAgICAgICAgY2hhbmdl
ZCB8PSBub2RlLT5jaGlsZDIoKS0+bWVyZ2VGbGFncyhmbGFncyk7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgQXJpdGhNb2Q6IHsKLSAg
ICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIGxlZnQgPSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLnBy
ZWRpY3Rpb24oKTsKLSAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHJpZ2h0ID0gbV9ncmFwaFtu
b2RlLmNoaWxkMigpXS5wcmVkaWN0aW9uKCk7CisgICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSBs
ZWZ0ID0gbm9kZS0+Y2hpbGQxKCktPnByZWRpY3Rpb24oKTsKKyAgICAgICAgICAgIFNwZWN1bGF0
ZWRUeXBlIHJpZ2h0ID0gbm9kZS0+Y2hpbGQyKCktPnByZWRpY3Rpb24oKTsKICAgICAgICAgICAg
IAogICAgICAgICAgICAgaWYgKGxlZnQgJiYgcmlnaHQpIHsKLSAgICAgICAgICAgICAgICBpZiAo
Tm9kZTo6c2hvdWxkU3BlY3VsYXRlSW50ZWdlckZvckFyaXRobWV0aWMobV9ncmFwaFtub2RlLmNo
aWxkMSgpXSwgbV9ncmFwaFtub2RlLmNoaWxkMigpXSkKLSAgICAgICAgICAgICAgICAgICAgJiYg
bm9kZUNhblNwZWN1bGF0ZUludGVnZXIobm9kZS5hcml0aE5vZGVGbGFncygpKSkKKyAgICAgICAg
ICAgICAgICBpZiAoTm9kZTo6c2hvdWxkU3BlY3VsYXRlSW50ZWdlckZvckFyaXRobWV0aWMobm9k
ZS0+Y2hpbGQxKCkubm9kZSgpLCBub2RlLT5jaGlsZDIoKS5ub2RlKCkpCisgICAgICAgICAgICAg
ICAgICAgICYmIG5vZGVDYW5TcGVjdWxhdGVJbnRlZ2VyKG5vZGUtPmFyaXRoTm9kZUZsYWdzKCkp
KQogICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbihTcGVjSW50
MzIpOwogICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCB8
PSBtZXJnZVByZWRpY3Rpb24oU3BlY0RvdWJsZSk7CkBAIC00NzYsOCArNDc0LDggQEAgcHJpdmF0
ZToKICAgICAgICAgICAgIGZsYWdzIHw9IE5vZGVVc2VkQXNOdW1iZXIgfCBOb2RlTmVlZHNOZWda
ZXJvOwogICAgICAgICAgICAgZmxhZ3MgJj0gfk5vZGVVc2VkQXNPdGhlcjsKIAotICAgICAgICAg
ICAgY2hhbmdlZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLm1lcmdlRmxhZ3MoZmxhZ3MpOwot
ICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQyKCldLm1lcmdlRmxhZ3Mo
ZmxhZ3MpOworICAgICAgICAgICAgY2hhbmdlZCB8PSBub2RlLT5jaGlsZDEoKS0+bWVyZ2VGbGFn
cyhmbGFncyk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG5vZGUtPmNoaWxkMigpLT5tZXJnZUZs
YWdzKGZsYWdzKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAK
QEAgLTQ4NSwxOSArNDgzLDE5IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBjaGFuZ2VkIHw9IHNl
dFByZWRpY3Rpb24oU3BlY0RvdWJsZSk7CiAgICAgICAgICAgICBmbGFncyB8PSBOb2RlVXNlZEFz
TnVtYmVyIHwgTm9kZU5lZWRzTmVnWmVybzsKICAgICAgICAgICAgIGZsYWdzICY9IH5Ob2RlVXNl
ZEFzT3RoZXI7Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0u
bWVyZ2VGbGFncyhmbGFncyk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG5vZGUtPmNoaWxkMSgp
LT5tZXJnZUZsYWdzKGZsYWdzKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAg
ICAgICAgICAKICAgICAgICAgY2FzZSBBcml0aEFiczogewotICAgICAgICAgICAgU3BlY3VsYXRl
ZFR5cGUgY2hpbGQgPSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLnByZWRpY3Rpb24oKTsKKyAgICAg
ICAgICAgIFNwZWN1bGF0ZWRUeXBlIGNoaWxkID0gbm9kZS0+Y2hpbGQxKCktPnByZWRpY3Rpb24o
KTsKICAgICAgICAgICAgIGlmIChpc0ludDMyU3BlY3VsYXRpb25Gb3JBcml0aG1ldGljKGNoaWxk
KQotICAgICAgICAgICAgICAgICYmIG5vZGVDYW5TcGVjdWxhdGVJbnRlZ2VyKG5vZGUuYXJpdGhO
b2RlRmxhZ3MoKSkpCisgICAgICAgICAgICAgICAgJiYgbm9kZUNhblNwZWN1bGF0ZUludGVnZXIo
bm9kZS0+YXJpdGhOb2RlRmxhZ3MoKSkpCiAgICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJn
ZVByZWRpY3Rpb24oU3BlY0ludDMyKTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAg
ICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbihzcGVjdWxhdGVkRG91YmxlVHlwZUZvclByZWRp
Y3Rpb24oY2hpbGQpKTsKIAotICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW25vZGUuY2hp
bGQxKCldLm1lcmdlRmxhZ3MoZmxhZ3MpOworICAgICAgICAgICAgY2hhbmdlZCB8PSBub2RlLT5j
aGlsZDEoKS0+bWVyZ2VGbGFncyhmbGFncyk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
fQogICAgICAgICAgICAgCkBAIC01MjcsMzEgKzUyNSwzMSBAQCBwcml2YXRlOgogICAgICAgICB9
CiAKICAgICAgICAgY2FzZSBHZXRCeUlkOiB7Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdl
UHJlZGljdGlvbihub2RlLmdldEhlYXBQcmVkaWN0aW9uKCkpOworICAgICAgICAgICAgY2hhbmdl
ZCB8PSBtZXJnZVByZWRpY3Rpb24obm9kZS0+Z2V0SGVhcFByZWRpY3Rpb24oKSk7CiAgICAgICAg
ICAgICBjaGFuZ2VkIHw9IG1lcmdlRGVmYXVsdEZsYWdzKG5vZGUpOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBjYXNlIEdldEJ5SWRGbHVzaDoK
LSAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKG5vZGUuZ2V0SGVhcFByZWRp
Y3Rpb24oKSk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbihub2RlLT5n
ZXRIZWFwUHJlZGljdGlvbigpKTsKICAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VEZWZhdWx0
RmxhZ3Mobm9kZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgICAgICBj
YXNlIEdldEJ5VmFsOiB7Ci0gICAgICAgICAgICBpZiAobV9ncmFwaFtub2RlLmNoaWxkMSgpXS5z
aG91bGRTcGVjdWxhdGVGbG9hdDMyQXJyYXkoKQotICAgICAgICAgICAgICAgIHx8IG1fZ3JhcGhb
bm9kZS5jaGlsZDEoKV0uc2hvdWxkU3BlY3VsYXRlRmxvYXQ2NEFycmF5KCkpCisgICAgICAgICAg
ICBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZUZsb2F0MzJBcnJheSgpCisgICAg
ICAgICAgICAgICAgfHwgbm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZUZsb2F0NjRBcnJh
eSgpKQogICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKFNwZWNEb3Vi
bGUpOwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VQ
cmVkaWN0aW9uKG5vZGUuZ2V0SGVhcFByZWRpY3Rpb24oKSk7CiAKLSAgICAgICAgICAgIGNoYW5n
ZWQgfD0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5tZXJnZUZsYWdzKE5vZGVVc2VkQXNWYWx1ZSk7
Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbm9kZS5jaGlsZDIoKV0ubWVyZ2VGbGFn
cyhOb2RlVXNlZEFzTnVtYmVyIHwgTm9kZVVzZWRBc090aGVyIHwgTm9kZVVzZWRBc0ludCB8IE5v
ZGVVc2VkQXNJbnRMb2NhbGx5KTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbm9kZS0+Y2hpbGQx
KCktPm1lcmdlRmxhZ3MoTm9kZVVzZWRBc1ZhbHVlKTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0g
bm9kZS0+Y2hpbGQyKCktPm1lcmdlRmxhZ3MoTm9kZVVzZWRBc051bWJlciB8IE5vZGVVc2VkQXNP
dGhlciB8IE5vZGVVc2VkQXNJbnQgfCBOb2RlVXNlZEFzSW50TG9jYWxseSk7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgR2V0TXlBcmd1
bWVudEJ5VmFsU2FmZTogewotICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVByZWRpY3Rpb24o
bm9kZS5nZXRIZWFwUHJlZGljdGlvbigpKTsKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFw
aFtub2RlLmNoaWxkMSgpXS5tZXJnZUZsYWdzKE5vZGVVc2VkQXNOdW1iZXIgfCBOb2RlVXNlZEFz
T3RoZXIgfCBOb2RlVXNlZEFzSW50IHwgTm9kZVVzZWRBc0ludExvY2FsbHkpOworICAgICAgICAg
ICAgY2hhbmdlZCB8PSBtZXJnZVByZWRpY3Rpb24obm9kZS0+Z2V0SGVhcFByZWRpY3Rpb24oKSk7
CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG5vZGUtPmNoaWxkMSgpLT5tZXJnZUZsYWdzKE5vZGVV
c2VkQXNOdW1iZXIgfCBOb2RlVXNlZEFzT3RoZXIgfCBOb2RlVXNlZEFzSW50IHwgTm9kZVVzZWRB
c0ludExvY2FsbHkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAg
IApAQCAtNTcxLDI1ICs1NjksMjMgQEAgcHJpdmF0ZToKICAgICAgICAgfQogCiAgICAgICAgIGNh
c2UgR2V0QnlPZmZzZXQ6IHsKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9u
KG5vZGUuZ2V0SGVhcFByZWRpY3Rpb24oKSk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdl
UHJlZGljdGlvbihub2RlLT5nZXRIZWFwUHJlZGljdGlvbigpKTsKICAgICAgICAgICAgIGNoYW5n
ZWQgfD0gbWVyZ2VEZWZhdWx0RmxhZ3Mobm9kZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgfQogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgQ2FsbDoKICAgICAgICAgY2FzZSBDb25z
dHJ1Y3Q6IHsKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKG5vZGUuZ2V0
SGVhcFByZWRpY3Rpb24oKSk7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGNoaWxkSWR4ID0g
bm9kZS5maXJzdENoaWxkKCk7Ci0gICAgICAgICAgICAgICAgIGNoaWxkSWR4IDwgbm9kZS5maXJz
dENoaWxkKCkgKyBub2RlLm51bUNoaWxkcmVuKCk7Ci0gICAgICAgICAgICAgICAgICsrY2hpbGRJ
ZHgpIHsKLSAgICAgICAgICAgICAgICBFZGdlIGVkZ2UgPSBtX2dyYXBoLm1fdmFyQXJnQ2hpbGRy
ZW5bY2hpbGRJZHhdOwotICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaFtlZGdlXS5t
ZXJnZUZsYWdzKE5vZGVVc2VkQXNWYWx1ZSk7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBj
aGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbihub2RlLT5nZXRIZWFwUHJlZGljdGlvbigpKTsKKyAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgY2hpbGRJZHggPSBub2RlLT5maXJzdENoaWxkKCk7Cisg
ICAgICAgICAgICAgICAgIGNoaWxkSWR4IDwgbm9kZS0+Zmlyc3RDaGlsZCgpICsgbm9kZS0+bnVt
Q2hpbGRyZW4oKTsKKyAgICAgICAgICAgICAgICAgKytjaGlsZElkeCkKKyAgICAgICAgICAgICAg
ICBjaGFuZ2VkIHw9IG1fZ3JhcGgubV92YXJBcmdDaGlsZHJlbltjaGlsZElkeF0tPm1lcmdlRmxh
Z3MoTm9kZVVzZWRBc1ZhbHVlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAg
ICAgICAgICAKICAgICAgICAgY2FzZSBDb252ZXJ0VGhpczogewotICAgICAgICAgICAgU3BlY3Vs
YXRlZFR5cGUgcHJlZGljdGlvbiA9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ucHJlZGljdGlvbigp
OworICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiA9IG5vZGUtPmNoaWxkMSgp
LT5wcmVkaWN0aW9uKCk7CiAgICAgICAgICAgICBpZiAocHJlZGljdGlvbikgewogICAgICAgICAg
ICAgICAgIGlmIChwcmVkaWN0aW9uICYgflNwZWNPYmplY3RNYXNrKSB7CiAgICAgICAgICAgICAg
ICAgICAgIHByZWRpY3Rpb24gJj0gU3BlY09iamVjdE1hc2s7CkBAIC02MDIsMTMgKzU5OCwxMyBA
QCBwcml2YXRlOgogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBHZXRHbG9i
YWxWYXI6IHsKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKG5vZGUuZ2V0
SGVhcFByZWRpY3Rpb24oKSk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlv
bihub2RlLT5nZXRIZWFwUHJlZGljdGlvbigpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBQdXRHbG9iYWxWYXI6CiAgICAgICAgIGNh
c2UgUHV0R2xvYmFsVmFyQ2hlY2s6IHsKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaFtu
b2RlLmNoaWxkMSgpXS5tZXJnZUZsYWdzKE5vZGVVc2VkQXNWYWx1ZSk7CisgICAgICAgICAgICBj
aGFuZ2VkIHw9IG5vZGUtPmNoaWxkMSgpLT5tZXJnZUZsYWdzKE5vZGVVc2VkQXNWYWx1ZSk7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCkBAIC02MTcsNyArNjEz
LDcgQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBSZXNvbHZlQmFzZToKICAgICAgICAgY2FzZSBS
ZXNvbHZlQmFzZVN0cmljdFB1dDoKICAgICAgICAgY2FzZSBSZXNvbHZlR2xvYmFsOiB7Ci0gICAg
ICAgICAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uID0gbm9kZS5nZXRIZWFwUHJlZGljdGlv
bigpOworICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiA9IG5vZGUtPmdldEhl
YXBQcmVkaWN0aW9uKCk7CiAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbihw
cmVkaWN0aW9uKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkBAIC02NDMsMTggKzYz
OSwxNiBAQCBwcml2YXRlOgogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgTmV3QXJyYXk6IHsK
ICAgICAgICAgICAgIGNoYW5nZWQgfD0gc2V0UHJlZGljdGlvbihTcGVjQXJyYXkpOwotICAgICAg
ICAgICAgZm9yICh1bnNpZ25lZCBjaGlsZElkeCA9IG5vZGUuZmlyc3RDaGlsZCgpOwotICAgICAg
ICAgICAgICAgICBjaGlsZElkeCA8IG5vZGUuZmlyc3RDaGlsZCgpICsgbm9kZS5udW1DaGlsZHJl
bigpOwotICAgICAgICAgICAgICAgICArK2NoaWxkSWR4KSB7Ci0gICAgICAgICAgICAgICAgRWRn
ZSBlZGdlID0gbV9ncmFwaC5tX3ZhckFyZ0NoaWxkcmVuW2NoaWxkSWR4XTsKLSAgICAgICAgICAg
ICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhbZWRnZV0ubWVyZ2VGbGFncyhOb2RlVXNlZEFzVmFsdWUp
OwotICAgICAgICAgICAgfQorICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBjaGlsZElkeCA9IG5v
ZGUtPmZpcnN0Q2hpbGQoKTsKKyAgICAgICAgICAgICAgICAgY2hpbGRJZHggPCBub2RlLT5maXJz
dENoaWxkKCkgKyBub2RlLT5udW1DaGlsZHJlbigpOworICAgICAgICAgICAgICAgICArK2NoaWxk
SWR4KQorICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaC5tX3ZhckFyZ0NoaWxkcmVu
W2NoaWxkSWR4XS0+bWVyZ2VGbGFncyhOb2RlVXNlZEFzVmFsdWUpOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBjYXNlIE5ld0FycmF5V2l0aFNp
emU6IHsKICAgICAgICAgICAgIGNoYW5nZWQgfD0gc2V0UHJlZGljdGlvbihTcGVjQXJyYXkpOwot
ICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLm1lcmdlRmxhZ3Mo
Tm9kZVVzZWRBc1ZhbHVlIHwgTm9kZVVzZWRBc0ludCB8IE5vZGVVc2VkQXNJbnRMb2NhbGx5KTsK
KyAgICAgICAgICAgIGNoYW5nZWQgfD0gbm9kZS0+Y2hpbGQxKCktPm1lcmdlRmxhZ3MoTm9kZVVz
ZWRBc1ZhbHVlIHwgTm9kZVVzZWRBc0ludCB8IE5vZGVVc2VkQXNJbnRMb2NhbGx5KTsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKQEAgLTY3MCwyMiArNjY0LDIy
IEBAIHByaXZhdGU6CiAgICAgICAgIAogICAgICAgICBjYXNlIFN0cmluZ0NoYXJBdDogewogICAg
ICAgICAgICAgY2hhbmdlZCB8PSBzZXRQcmVkaWN0aW9uKFNwZWNTdHJpbmcpOwotICAgICAgICAg
ICAgY2hhbmdlZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLm1lcmdlRmxhZ3MoTm9kZVVzZWRB
c1ZhbHVlKTsKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaFtub2RlLmNoaWxkMigpXS5t
ZXJnZUZsYWdzKE5vZGVVc2VkQXNOdW1iZXIgfCBOb2RlVXNlZEFzT3RoZXIgfCBOb2RlVXNlZEFz
SW50IHwgTm9kZVVzZWRBc0ludExvY2FsbHkpOworICAgICAgICAgICAgY2hhbmdlZCB8PSBub2Rl
LT5jaGlsZDEoKS0+bWVyZ2VGbGFncyhOb2RlVXNlZEFzVmFsdWUpOworICAgICAgICAgICAgY2hh
bmdlZCB8PSBub2RlLT5jaGlsZDIoKS0+bWVyZ2VGbGFncyhOb2RlVXNlZEFzTnVtYmVyIHwgTm9k
ZVVzZWRBc090aGVyIHwgTm9kZVVzZWRBc0ludCB8IE5vZGVVc2VkQXNJbnRMb2NhbGx5KTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBT
dHJDYXQ6IHsKICAgICAgICAgICAgIGNoYW5nZWQgfD0gc2V0UHJlZGljdGlvbihTcGVjU3RyaW5n
KTsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgY2hpbGRJZHggPSBub2RlLmZpcnN0Q2hpbGQo
KTsKLSAgICAgICAgICAgICAgICAgY2hpbGRJZHggPCBub2RlLmZpcnN0Q2hpbGQoKSArIG5vZGUu
bnVtQ2hpbGRyZW4oKTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgY2hpbGRJZHggPSBub2Rl
LT5maXJzdENoaWxkKCk7CisgICAgICAgICAgICAgICAgIGNoaWxkSWR4IDwgbm9kZS0+Zmlyc3RD
aGlsZCgpICsgbm9kZS0+bnVtQ2hpbGRyZW4oKTsKICAgICAgICAgICAgICAgICAgKytjaGlsZElk
eCkKLSAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbV9ncmFwaC5tX3ZhckFyZ0No
aWxkcmVuW2NoaWxkSWR4XV0ubWVyZ2VGbGFncyhOb2RlVXNlZEFzTnVtYmVyIHwgTm9kZVVzZWRB
c090aGVyKTsKKyAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGgubV92YXJBcmdDaGls
ZHJlbltjaGlsZElkeF0tPm1lcmdlRmxhZ3MoTm9kZVVzZWRBc051bWJlciB8IE5vZGVVc2VkQXNP
dGhlcik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAg
ICAgIGNhc2UgVG9QcmltaXRpdmU6IHsKLSAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIGNoaWxk
ID0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5wcmVkaWN0aW9uKCk7CisgICAgICAgICAgICBTcGVj
dWxhdGVkVHlwZSBjaGlsZCA9IG5vZGUtPmNoaWxkMSgpLT5wcmVkaWN0aW9uKCk7CiAgICAgICAg
ICAgICBpZiAoY2hpbGQpIHsKICAgICAgICAgICAgICAgICBpZiAoaXNPYmplY3RTcGVjdWxhdGlv
bihjaGlsZCkpIHsKICAgICAgICAgICAgICAgICAgICAgLy8gSSdkIGxvdmUgdG8gZm9sZCB0aGlz
IGNhc2UgaW50byB0aGUgY2FzZSBiZWxvdywgYnV0IEkgY2FuJ3QsIGJlY2F1c2UKQEAgLTcwMiw3
ICs2OTYsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAg
ICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbihjaGlsZCk7CiAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ubWVyZ2VGbGFn
cyhmbGFncyk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG5vZGUtPmNoaWxkMSgpLT5tZXJnZUZs
YWdzKGZsYWdzKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAK
QEAgLTc0NSw0MiArNzM5LDQ1IEBAIHByaXZhdGU6CiAgICAgICAgIH0KICAgICAgICAgCiAgICAg
ICAgIGNhc2UgUHV0QnlWYWw6Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbV9ncmFw
aC52YXJBcmdDaGlsZChub2RlLCAwKV0ubWVyZ2VGbGFncyhOb2RlVXNlZEFzVmFsdWUpOwotICAg
ICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW21fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSld
Lm1lcmdlRmxhZ3MoTm9kZVVzZWRBc051bWJlciB8IE5vZGVVc2VkQXNPdGhlciB8IE5vZGVVc2Vk
QXNJbnQgfCBOb2RlVXNlZEFzSW50TG9jYWxseSk7Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IG1f
Z3JhcGhbbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAyKV0ubWVyZ2VGbGFncyhOb2RlVXNlZEFz
VmFsdWUpOworICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUs
IDApLT5tZXJnZUZsYWdzKE5vZGVVc2VkQXNWYWx1ZSk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9
IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSktPm1lcmdlRmxhZ3MoTm9kZVVzZWRBc051bWJl
ciB8IE5vZGVVc2VkQXNPdGhlciB8IE5vZGVVc2VkQXNJbnQgfCBOb2RlVXNlZEFzSW50TG9jYWxs
eSk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMikt
Pm1lcmdlRmxhZ3MoTm9kZVVzZWRBc1ZhbHVlKTsKICAgICAgICAgICAgIGJyZWFrOwogCiAgICAg
ICAgIGNhc2UgUHV0U2NvcGVkVmFyOgotICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW25v
ZGUuY2hpbGQxKCldLm1lcmdlRmxhZ3MoTm9kZVVzZWRBc1ZhbHVlKTsKLSAgICAgICAgICAgIGNo
YW5nZWQgfD0gbV9ncmFwaFtub2RlLmNoaWxkMygpXS5tZXJnZUZsYWdzKE5vZGVVc2VkQXNWYWx1
ZSk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG5vZGUtPmNoaWxkMSgpLT5tZXJnZUZsYWdzKE5v
ZGVVc2VkQXNWYWx1ZSk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG5vZGUtPmNoaWxkMygpLT5t
ZXJnZUZsYWdzKE5vZGVVc2VkQXNWYWx1ZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgIAogICAgICAgICBjYXNlIFJldHVybjoKICAgICAgICAgY2FzZSBUaHJvdzoKLSAgICAgICAg
ICAgIGNoYW5nZWQgfD0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5tZXJnZUZsYWdzKE5vZGVVc2Vk
QXNWYWx1ZSk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG5vZGUtPmNoaWxkMSgpLT5tZXJnZUZs
YWdzKE5vZGVVc2VkQXNWYWx1ZSk7CiAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICBjYXNl
IFB1dEJ5SWQ6CiAgICAgICAgIGNhc2UgUHV0QnlJZERpcmVjdDoKLSAgICAgICAgICAgIGNoYW5n
ZWQgfD0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5tZXJnZUZsYWdzKE5vZGVVc2VkQXNWYWx1ZSk7
Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbm9kZS5jaGlsZDIoKV0ubWVyZ2VGbGFn
cyhOb2RlVXNlZEFzVmFsdWUpOworICAgICAgICAgICAgY2hhbmdlZCB8PSBub2RlLT5jaGlsZDEo
KS0+bWVyZ2VGbGFncyhOb2RlVXNlZEFzVmFsdWUpOworICAgICAgICAgICAgY2hhbmdlZCB8PSBu
b2RlLT5jaGlsZDIoKS0+bWVyZ2VGbGFncyhOb2RlVXNlZEFzVmFsdWUpOwogICAgICAgICAgICAg
YnJlYWs7CiAKICAgICAgICAgY2FzZSBQdXRCeU9mZnNldDoKLSAgICAgICAgICAgIGNoYW5nZWQg
fD0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5tZXJnZUZsYWdzKE5vZGVVc2VkQXNWYWx1ZSk7Ci0g
ICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbm9kZS5jaGlsZDMoKV0ubWVyZ2VGbGFncyhO
b2RlVXNlZEFzVmFsdWUpOworICAgICAgICAgICAgY2hhbmdlZCB8PSBub2RlLT5jaGlsZDEoKS0+
bWVyZ2VGbGFncyhOb2RlVXNlZEFzVmFsdWUpOworICAgICAgICAgICAgY2hhbmdlZCB8PSBub2Rl
LT5jaGlsZDMoKS0+bWVyZ2VGbGFncyhOb2RlVXNlZEFzVmFsdWUpOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBQaGk6CisgICAgICAgICAgICAvLyBQaGlz
IHNob3VsZCBub3QgYmUgdmlzaWJsZSBoZXJlIHNpbmNlIHdlJ3JlIGl0ZXJhdGluZyB0aGUgYWxs
LWJ1dC1QaGkncworICAgICAgICAgICAgLy8gcGFydCBvZiBiYXNpYyBibG9ja3MuCisgICAgICAg
ICAgICBDUkFTSCgpOwogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSBTZXRDYWxs
ZWU6CiAgICAgICAgIGNhc2UgU2V0TXlTY29wZToKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9n
cmFwaFtub2RlLmNoaWxkMSgpXS5tZXJnZUZsYWdzKE5vZGVVc2VkQXNWYWx1ZSk7CisgICAgICAg
ICAgICBjaGFuZ2VkIHw9IG5vZGUtPmNoaWxkMSgpLT5tZXJnZUZsYWdzKE5vZGVVc2VkQXNWYWx1
ZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgICAgICBjYXNlIEdldFNj
b3BlOgotICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLm1lcmdl
RmxhZ3MoTm9kZVVzZWRBc1ZhbHVlKTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbm9kZS0+Y2hp
bGQxKCktPm1lcmdlRmxhZ3MoTm9kZVVzZWRBc1ZhbHVlKTsKICAgICAgICAgICAgIGNoYW5nZWQg
fD0gc2V0UHJlZGljdGlvbihTcGVjQ2VsbE90aGVyKTsKICAgICAgICAgICAgIGJyZWFrOwogCkBA
IC04MjgsMzIgKzgyNSwzMiBAQCBwcml2YXRlOgogICAgICAgICB9CiAKICNpZiBERkdfRU5BQkxF
KERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCi0gICAgICAgIGRhdGFMb2coU3BlY3VsYXRpb25E
dW1wKG1fZ3JhcGhbbV9jb21waWxlSW5kZXhdLnByZWRpY3Rpb24oKSksICJcbiIpOworICAgICAg
ICBkYXRhTG9nKFNwZWN1bGF0aW9uRHVtcChub2RlLT5wcmVkaWN0aW9uKCkpLCAiXG4iKTsKICNl
bmRpZgogICAgICAgICAKICAgICAgICAgbV9jaGFuZ2VkIHw9IGNoYW5nZWQ7CiAgICAgfQogICAg
ICAgICAKLSAgICBib29sIG1lcmdlRGVmYXVsdEZsYWdzKE5vZGUmIG5vZGUpCisgICAgYm9vbCBt
ZXJnZURlZmF1bHRGbGFncyhOb2RlKiBub2RlKQogICAgIHsKICAgICAgICAgYm9vbCBjaGFuZ2Vk
ID0gZmFsc2U7Ci0gICAgICAgIGlmIChub2RlLmZsYWdzKCkgJiBOb2RlSGFzVmFyQXJncykgewot
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBjaGlsZElkeCA9IG5vZGUuZmlyc3RDaGlsZCgpOwot
ICAgICAgICAgICAgICAgICBjaGlsZElkeCA8IG5vZGUuZmlyc3RDaGlsZCgpICsgbm9kZS5udW1D
aGlsZHJlbigpOworICAgICAgICBpZiAobm9kZS0+ZmxhZ3MoKSAmIE5vZGVIYXNWYXJBcmdzKSB7
CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGNoaWxkSWR4ID0gbm9kZS0+Zmlyc3RDaGlsZCgp
OworICAgICAgICAgICAgICAgICBjaGlsZElkeCA8IG5vZGUtPmZpcnN0Q2hpbGQoKSArIG5vZGUt
Pm51bUNoaWxkcmVuKCk7CiAgICAgICAgICAgICAgICAgIGNoaWxkSWR4KyspIHsKICAgICAgICAg
ICAgICAgICBpZiAoISFtX2dyYXBoLm1fdmFyQXJnQ2hpbGRyZW5bY2hpbGRJZHhdKQotICAgICAg
ICAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbV9ncmFwaC5tX3ZhckFyZ0NoaWxkcmVu
W2NoaWxkSWR4XV0ubWVyZ2VGbGFncyhOb2RlVXNlZEFzVmFsdWUpOworICAgICAgICAgICAgICAg
ICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGgubV92YXJBcmdDaGlsZHJlbltjaGlsZElkeF0tPm1lcmdl
RmxhZ3MoTm9kZVVzZWRBc1ZhbHVlKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgIGlmICghbm9kZS5jaGlsZDEoKSkKKyAgICAgICAgICAgIGlmICghbm9kZS0+
Y2hpbGQxKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGNoYW5nZWQ7Ci0gICAgICAgICAgICBj
aGFuZ2VkIHw9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ubWVyZ2VGbGFncyhOb2RlVXNlZEFzVmFs
dWUpOwotICAgICAgICAgICAgaWYgKCFub2RlLmNoaWxkMigpKQorICAgICAgICAgICAgY2hhbmdl
ZCB8PSBub2RlLT5jaGlsZDEoKS0+bWVyZ2VGbGFncyhOb2RlVXNlZEFzVmFsdWUpOworICAgICAg
ICAgICAgaWYgKCFub2RlLT5jaGlsZDIoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gY2hhbmdl
ZDsKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaFtub2RlLmNoaWxkMigpXS5tZXJnZUZs
YWdzKE5vZGVVc2VkQXNWYWx1ZSk7Ci0gICAgICAgICAgICBpZiAoIW5vZGUuY2hpbGQzKCkpCisg
ICAgICAgICAgICBjaGFuZ2VkIHw9IG5vZGUtPmNoaWxkMigpLT5tZXJnZUZsYWdzKE5vZGVVc2Vk
QXNWYWx1ZSk7CisgICAgICAgICAgICBpZiAoIW5vZGUtPmNoaWxkMygpKQogICAgICAgICAgICAg
ICAgIHJldHVybiBjaGFuZ2VkOwotICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW25vZGUu
Y2hpbGQzKCldLm1lcmdlRmxhZ3MoTm9kZVVzZWRBc1ZhbHVlKTsKKyAgICAgICAgICAgIGNoYW5n
ZWQgfD0gbm9kZS0+Y2hpbGQzKCktPm1lcmdlRmxhZ3MoTm9kZVVzZWRBc1ZhbHVlKTsKICAgICAg
ICAgfQogICAgICAgICByZXR1cm4gY2hhbmdlZDsKICAgICB9CkBAIC04NjMsOCArODYwLDE2IEBA
IHByaXZhdGU6CiAjaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQogICAg
ICAgICBkYXRhTG9nRigiUHJvcGFnYXRpbmcgcHJlZGljdGlvbnMgZm9yd2FyZCBbJXVdXG4iLCAr
K21fY291bnQpOwogI2VuZGlmCi0gICAgICAgIGZvciAobV9jb21waWxlSW5kZXggPSAwOyBtX2Nv
bXBpbGVJbmRleCA8IG1fZ3JhcGguc2l6ZSgpOyArK21fY29tcGlsZUluZGV4KQotICAgICAgICAg
ICAgcHJvcGFnYXRlKG1fZ3JhcGhbbV9jb21waWxlSW5kZXhdKTsKKyAgICAgICAgZm9yIChCbG9j
a0luZGV4IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9ncmFwaC5tX2Jsb2Nrcy5zaXpl
KCk7ICsrYmxvY2tJbmRleCkgeworICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dy
YXBoLm1fYmxvY2tzW2Jsb2NrSW5kZXhdLmdldCgpOworICAgICAgICAgICAgaWYgKCFibG9jaykK
KyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIEFTU0VSVChibG9jay0+aXNS
ZWFjaGFibGUpOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGJsb2NrLT5z
aXplKCk7ICsraSkgeworICAgICAgICAgICAgICAgIG1fY3VycmVudE5vZGUgPSBibG9jay0+YXQo
aSk7CisgICAgICAgICAgICAgICAgcHJvcGFnYXRlKG1fY3VycmVudE5vZGUpOworICAgICAgICAg
ICAgfQorICAgICAgICB9CiAgICAgfQogICAgIAogICAgIHZvaWQgcHJvcGFnYXRlQmFja3dhcmQo
KQpAQCAtODcyLDEyMyArODc3LDEzOSBAQCBwcml2YXRlOgogI2lmIERGR19FTkFCTEUoREVCVUdf
UFJPUEFHQVRJT05fVkVSQk9TRSkKICAgICAgICAgZGF0YUxvZ0YoIlByb3BhZ2F0aW5nIHByZWRp
Y3Rpb25zIGJhY2t3YXJkIFsldV1cbiIsICsrbV9jb3VudCk7CiAjZW5kaWYKLSAgICAgICAgZm9y
IChtX2NvbXBpbGVJbmRleCA9IG1fZ3JhcGguc2l6ZSgpOyBtX2NvbXBpbGVJbmRleC0tID4gMDsp
Ci0gICAgICAgICAgICBwcm9wYWdhdGUobV9ncmFwaFttX2NvbXBpbGVJbmRleF0pOworICAgICAg
ICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgpOyBi
bG9ja0luZGV4LS07KSB7CisgICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGgu
bV9ibG9ja3NbYmxvY2tJbmRleF0uZ2V0KCk7CisgICAgICAgICAgICBpZiAoIWJsb2NrKQorICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgQVNTRVJUKGJsb2NrLT5pc1JlYWNo
YWJsZSk7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBibG9jay0+c2l6ZSgpOyBpLS07
KSB7CisgICAgICAgICAgICAgICAgbV9jdXJyZW50Tm9kZSA9IGJsb2NrLT5hdChpKTsKKyAgICAg
ICAgICAgICAgICBwcm9wYWdhdGUobV9jdXJyZW50Tm9kZSk7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KICAgICB9CiAgICAgCi0gICAgdm9pZCBkb1JvdW5kT2ZEb3VibGVWb3RpbmcoKQorICAg
IHZvaWQgZG9Eb3VibGVWb3RpbmcoTm9kZSogbm9kZSkKICAgICB7Ci0jaWYgREZHX0VOQUJMRShE
RUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQotICAgICAgICBkYXRhTG9nRigiVm90aW5nIG9uIGRv
dWJsZSB1c2VzIG9mIGxvY2FscyBbJXVdXG4iLCBtX2NvdW50KTsKLSNlbmRpZgotICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9ncmFwaC5tX3ZhcmlhYmxlQWNjZXNzRGF0YS5zaXpl
KCk7ICsraSkKLSAgICAgICAgICAgIG1fZ3JhcGgubV92YXJpYWJsZUFjY2Vzc0RhdGFbaV0uZmlu
ZCgpLT5jbGVhclZvdGVzKCk7Ci0gICAgICAgIGZvciAobV9jb21waWxlSW5kZXggPSAwOyBtX2Nv
bXBpbGVJbmRleCA8IG1fZ3JhcGguc2l6ZSgpOyArK21fY29tcGlsZUluZGV4KSB7Ci0gICAgICAg
ICAgICBOb2RlJiBub2RlID0gbV9ncmFwaFttX2NvbXBpbGVJbmRleF07Ci0gICAgICAgICAgICBz
d2l0Y2ggKG5vZGUub3AoKSkgewotICAgICAgICAgICAgY2FzZSBWYWx1ZUFkZDoKLSAgICAgICAg
ICAgIGNhc2UgQXJpdGhBZGQ6Ci0gICAgICAgICAgICBjYXNlIEFyaXRoU3ViOiB7Ci0gICAgICAg
ICAgICAgICAgU3BlY3VsYXRlZFR5cGUgbGVmdCA9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ucHJl
ZGljdGlvbigpOwotICAgICAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHJpZ2h0ID0gbV9ncmFw
aFtub2RlLmNoaWxkMigpXS5wcmVkaWN0aW9uKCk7CisgICAgICAgIHN3aXRjaCAobm9kZS0+b3Ao
KSkgeworICAgICAgICBjYXNlIFZhbHVlQWRkOgorICAgICAgICBjYXNlIEFyaXRoQWRkOgorICAg
ICAgICBjYXNlIEFyaXRoU3ViOiB7CisgICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSBsZWZ0ID0g
bm9kZS0+Y2hpbGQxKCktPnByZWRpY3Rpb24oKTsKKyAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBl
IHJpZ2h0ID0gbm9kZS0+Y2hpbGQyKCktPnByZWRpY3Rpb24oKTsKICAgICAgICAgICAgICAgICAK
LSAgICAgICAgICAgICAgICBEb3VibGVCYWxsb3QgYmFsbG90OworICAgICAgICAgICAgRG91Ymxl
QmFsbG90IGJhbGxvdDsKICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBpZiAoaXNO
dW1iZXJTcGVjdWxhdGlvbkV4cGVjdGluZ0RlZmluZWQobGVmdCkgJiYgaXNOdW1iZXJTcGVjdWxh
dGlvbkV4cGVjdGluZ0RlZmluZWQocmlnaHQpCi0gICAgICAgICAgICAgICAgICAgICYmICFtX2dy
YXBoLmFkZFNob3VsZFNwZWN1bGF0ZUludGVnZXIobm9kZSkpCi0gICAgICAgICAgICAgICAgICAg
IGJhbGxvdCA9IFZvdGVEb3VibGU7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAg
ICAgICAgICBiYWxsb3QgPSBWb3RlVmFsdWU7CisgICAgICAgICAgICBpZiAoaXNOdW1iZXJTcGVj
dWxhdGlvbkV4cGVjdGluZ0RlZmluZWQobGVmdCkgJiYgaXNOdW1iZXJTcGVjdWxhdGlvbkV4cGVj
dGluZ0RlZmluZWQocmlnaHQpCisgICAgICAgICAgICAgICAgJiYgIW1fZ3JhcGguYWRkU2hvdWxk
U3BlY3VsYXRlSW50ZWdlcihub2RlKSkKKyAgICAgICAgICAgICAgICBiYWxsb3QgPSBWb3RlRG91
YmxlOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGJhbGxvdCA9IFZvdGVWYWx1
ZTsKICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBtX2dyYXBoLnZvdGUobm9kZS5j
aGlsZDEoKSwgYmFsbG90KTsKLSAgICAgICAgICAgICAgICBtX2dyYXBoLnZvdGUobm9kZS5jaGls
ZDIoKSwgYmFsbG90KTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIG1fZ3JhcGgudm90ZU5vZGUobm9kZS0+Y2hpbGQxKCksIGJhbGxvdCk7CisgICAg
ICAgICAgICBtX2dyYXBoLnZvdGVOb2RlKG5vZGUtPmNoaWxkMigpLCBiYWxsb3QpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGNh
c2UgQXJpdGhNdWw6IHsKLSAgICAgICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSBsZWZ0ID0gbV9n
cmFwaFtub2RlLmNoaWxkMSgpXS5wcmVkaWN0aW9uKCk7Ci0gICAgICAgICAgICAgICAgU3BlY3Vs
YXRlZFR5cGUgcmlnaHQgPSBtX2dyYXBoW25vZGUuY2hpbGQyKCldLnByZWRpY3Rpb24oKTsKKyAg
ICAgICAgY2FzZSBBcml0aE11bDogeworICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgbGVmdCA9
IG5vZGUtPmNoaWxkMSgpLT5wcmVkaWN0aW9uKCk7CisgICAgICAgICAgICBTcGVjdWxhdGVkVHlw
ZSByaWdodCA9IG5vZGUtPmNoaWxkMigpLT5wcmVkaWN0aW9uKCk7CiAgICAgICAgICAgICAgICAg
Ci0gICAgICAgICAgICAgICAgRG91YmxlQmFsbG90IGJhbGxvdDsKKyAgICAgICAgICAgIERvdWJs
ZUJhbGxvdCBiYWxsb3Q7CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYgKGlz
TnVtYmVyU3BlY3VsYXRpb24obGVmdCkgJiYgaXNOdW1iZXJTcGVjdWxhdGlvbihyaWdodCkKLSAg
ICAgICAgICAgICAgICAgICAgJiYgIW1fZ3JhcGgubXVsU2hvdWxkU3BlY3VsYXRlSW50ZWdlcihu
b2RlKSkKLSAgICAgICAgICAgICAgICAgICAgYmFsbG90ID0gVm90ZURvdWJsZTsKLSAgICAgICAg
ICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIGJhbGxvdCA9IFZvdGVWYWx1ZTsKKyAg
ICAgICAgICAgIGlmIChpc051bWJlclNwZWN1bGF0aW9uKGxlZnQpICYmIGlzTnVtYmVyU3BlY3Vs
YXRpb24ocmlnaHQpCisgICAgICAgICAgICAgICAgJiYgIW1fZ3JhcGgubXVsU2hvdWxkU3BlY3Vs
YXRlSW50ZWdlcihub2RlKSkKKyAgICAgICAgICAgICAgICBiYWxsb3QgPSBWb3RlRG91YmxlOwor
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGJhbGxvdCA9IFZvdGVWYWx1ZTsKICAg
ICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBtX2dyYXBoLnZvdGUobm9kZS5jaGlsZDEo
KSwgYmFsbG90KTsKLSAgICAgICAgICAgICAgICBtX2dyYXBoLnZvdGUobm9kZS5jaGlsZDIoKSwg
YmFsbG90KTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIG1fZ3JhcGgudm90ZU5vZGUobm9kZS0+Y2hpbGQxKCksIGJhbGxvdCk7CisgICAgICAgICAg
ICBtX2dyYXBoLnZvdGVOb2RlKG5vZGUtPmNoaWxkMigpLCBiYWxsb3QpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KIAotICAgICAgICAgICAgY2FzZSBBcml0aE1pbjoKLSAgICAgICAg
ICAgIGNhc2UgQXJpdGhNYXg6Ci0gICAgICAgICAgICBjYXNlIEFyaXRoTW9kOgotICAgICAgICAg
ICAgY2FzZSBBcml0aERpdjogewotICAgICAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIGxlZnQg
PSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLnByZWRpY3Rpb24oKTsKLSAgICAgICAgICAgICAgICBT
cGVjdWxhdGVkVHlwZSByaWdodCA9IG1fZ3JhcGhbbm9kZS5jaGlsZDIoKV0ucHJlZGljdGlvbigp
OworICAgICAgICBjYXNlIEFyaXRoTWluOgorICAgICAgICBjYXNlIEFyaXRoTWF4OgorICAgICAg
ICBjYXNlIEFyaXRoTW9kOgorICAgICAgICBjYXNlIEFyaXRoRGl2OiB7CisgICAgICAgICAgICBT
cGVjdWxhdGVkVHlwZSBsZWZ0ID0gbm9kZS0+Y2hpbGQxKCktPnByZWRpY3Rpb24oKTsKKyAgICAg
ICAgICAgIFNwZWN1bGF0ZWRUeXBlIHJpZ2h0ID0gbm9kZS0+Y2hpbGQyKCktPnByZWRpY3Rpb24o
KTsKICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBEb3VibGVCYWxsb3QgYmFsbG90
OworICAgICAgICAgICAgRG91YmxlQmFsbG90IGJhbGxvdDsKICAgICAgICAgICAgICAgICAKLSAg
ICAgICAgICAgICAgICBpZiAoaXNOdW1iZXJTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc051bWJlclNw
ZWN1bGF0aW9uKHJpZ2h0KQotICAgICAgICAgICAgICAgICAgICAmJiAhKE5vZGU6OnNob3VsZFNw
ZWN1bGF0ZUludGVnZXJGb3JBcml0aG1ldGljKG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0sIG1fZ3Jh
cGhbbm9kZS5jaGlsZDEoKV0pCi0gICAgICAgICAgICAgICAgICAgICAgICAgJiYgbm9kZS5jYW5T
cGVjdWxhdGVJbnRlZ2VyKCkpKQotICAgICAgICAgICAgICAgICAgICBiYWxsb3QgPSBWb3RlRG91
YmxlOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgYmFsbG90ID0g
Vm90ZVZhbHVlOworICAgICAgICAgICAgaWYgKGlzTnVtYmVyU3BlY3VsYXRpb24obGVmdCkgJiYg
aXNOdW1iZXJTcGVjdWxhdGlvbihyaWdodCkKKyAgICAgICAgICAgICAgICAmJiAhKE5vZGU6OnNo
b3VsZFNwZWN1bGF0ZUludGVnZXJGb3JBcml0aG1ldGljKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwg
bm9kZS0+Y2hpbGQyKCkubm9kZSgpKQorICAgICAgICAgICAgICAgICAgICAgJiYgbm9kZS5jYW5T
cGVjdWxhdGVJbnRlZ2VyKCkpKQorICAgICAgICAgICAgICAgIGJhbGxvdCA9IFZvdGVEb3VibGU7
CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgYmFsbG90ID0gVm90ZVZhbHVlOwog
ICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIG1fZ3JhcGgudm90ZShub2RlLmNoaWxk
MSgpLCBiYWxsb3QpOwotICAgICAgICAgICAgICAgIG1fZ3JhcGgudm90ZShub2RlLmNoaWxkMigp
LCBiYWxsb3QpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQorICAgICAg
ICAgICAgbV9ncmFwaC52b3RlTm9kZShub2RlLT5jaGlsZDEoKSwgYmFsbG90KTsKKyAgICAgICAg
ICAgIG1fZ3JhcGgudm90ZU5vZGUobm9kZS0+Y2hpbGQyKCksIGJhbGxvdCk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgY2FzZSBB
cml0aEFiczoKLSAgICAgICAgICAgICAgICBEb3VibGVCYWxsb3QgYmFsbG90OwotICAgICAgICAg
ICAgICAgIGlmICghKG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0uc2hvdWxkU3BlY3VsYXRlSW50ZWdl
ckZvckFyaXRobWV0aWMoKQotICAgICAgICAgICAgICAgICAgICAgICYmIG5vZGUuY2FuU3BlY3Vs
YXRlSW50ZWdlcigpKSkKLSAgICAgICAgICAgICAgICAgICAgYmFsbG90ID0gVm90ZURvdWJsZTsK
LSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIGJhbGxvdCA9IFZvdGVW
YWx1ZTsKKyAgICAgICAgY2FzZSBBcml0aEFiczoKKyAgICAgICAgICAgIERvdWJsZUJhbGxvdCBi
YWxsb3Q7CisgICAgICAgICAgICBpZiAoIShub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRl
SW50ZWdlckZvckFyaXRobWV0aWMoKQorICAgICAgICAgICAgICAgICAgJiYgbm9kZS5jYW5TcGVj
dWxhdGVJbnRlZ2VyKCkpKQorICAgICAgICAgICAgICAgIGJhbGxvdCA9IFZvdGVEb3VibGU7Cisg
ICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgYmFsbG90ID0gVm90ZVZhbHVlOwogICAg
ICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIG1fZ3JhcGgudm90ZShub2RlLmNoaWxkMSgp
LCBiYWxsb3QpOwotICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgbV9ncmFwaC52
b3RlTm9kZShub2RlLT5jaGlsZDEoKSwgYmFsbG90KTsKKyAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgICAgIAotICAgICAgICAgICAgY2FzZSBBcml0aFNxcnQ6Ci0gICAgICAgICAgICAg
ICAgbV9ncmFwaC52b3RlKG5vZGUuY2hpbGQxKCksIFZvdGVEb3VibGUpOwotICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIEFyaXRoU3FydDoKKyAgICAgICAgICAgIG1fZ3JhcGgu
dm90ZU5vZGUobm9kZS0+Y2hpbGQxKCksIFZvdGVEb3VibGUpOworICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBjYXNlIFNldExvY2FsOiB7Ci0gICAgICAg
ICAgICAgICAgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiA9IG1fZ3JhcGhbbm9kZS5jaGlsZDEo
KV0ucHJlZGljdGlvbigpOwotICAgICAgICAgICAgICAgIGlmIChpc0RvdWJsZVNwZWN1bGF0aW9u
KHByZWRpY3Rpb24pKQotICAgICAgICAgICAgICAgICAgICBub2RlLnZhcmlhYmxlQWNjZXNzRGF0
YSgpLT52b3RlKFZvdGVEb3VibGUpOwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKCFpc051bWJl
clNwZWN1bGF0aW9uKHByZWRpY3Rpb24pIHx8IGlzSW50MzJTcGVjdWxhdGlvbihwcmVkaWN0aW9u
KSkKLSAgICAgICAgICAgICAgICAgICAgbm9kZS52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+dm90ZShW
b3RlVmFsdWUpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQorICAgICAg
ICBjYXNlIFNldExvY2FsOiB7CisgICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9u
ID0gbm9kZS0+Y2hpbGQxKCktPnByZWRpY3Rpb24oKTsKKyAgICAgICAgICAgIGlmIChpc0RvdWJs
ZVNwZWN1bGF0aW9uKHByZWRpY3Rpb24pKQorICAgICAgICAgICAgICAgIG5vZGUtPnZhcmlhYmxl
QWNjZXNzRGF0YSgpLT52b3RlKFZvdGVEb3VibGUpOworICAgICAgICAgICAgZWxzZSBpZiAoIWlz
TnVtYmVyU3BlY3VsYXRpb24ocHJlZGljdGlvbikgfHwgaXNJbnQzMlNwZWN1bGF0aW9uKHByZWRp
Y3Rpb24pKQorICAgICAgICAgICAgICAgIG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT52b3Rl
KFZvdGVWYWx1ZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQogICAgICAgICAgICAg
ICAgIAotICAgICAgICAgICAgY2FzZSBQdXRCeVZhbDoKLSAgICAgICAgICAgIGNhc2UgUHV0QnlW
YWxBbGlhczogewotICAgICAgICAgICAgICAgIEVkZ2UgY2hpbGQxID0gbV9ncmFwaC52YXJBcmdD
aGlsZChub2RlLCAwKTsKLSAgICAgICAgICAgICAgICBFZGdlIGNoaWxkMiA9IG1fZ3JhcGgudmFy
QXJnQ2hpbGQobm9kZSwgMSk7Ci0gICAgICAgICAgICAgICAgRWRnZSBjaGlsZDMgPSBtX2dyYXBo
LnZhckFyZ0NoaWxkKG5vZGUsIDIpOwotICAgICAgICAgICAgICAgIG1fZ3JhcGgudm90ZShjaGls
ZDEsIFZvdGVWYWx1ZSk7Ci0gICAgICAgICAgICAgICAgbV9ncmFwaC52b3RlKGNoaWxkMiwgVm90
ZVZhbHVlKTsKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUuYXJyYXlNb2RlKCkudHlwZSgp
KSB7Ci0gICAgICAgICAgICAgICAgY2FzZSBBcnJheTo6RG91YmxlOgotICAgICAgICAgICAgICAg
ICAgICBtX2dyYXBoLnZvdGUoY2hpbGQzLCBWb3RlRG91YmxlKTsKLSAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAg
bV9ncmFwaC52b3RlKGNoaWxkMywgVm90ZVZhbHVlKTsKLSAgICAgICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICBjYXNlIFB1dEJ5VmFsOgorICAgICAgICBj
YXNlIFB1dEJ5VmFsQWxpYXM6IHsKKyAgICAgICAgICAgIEVkZ2UgY2hpbGQxID0gbV9ncmFwaC52
YXJBcmdDaGlsZChub2RlLCAwKTsKKyAgICAgICAgICAgIEVkZ2UgY2hpbGQyID0gbV9ncmFwaC52
YXJBcmdDaGlsZChub2RlLCAxKTsKKyAgICAgICAgICAgIEVkZ2UgY2hpbGQzID0gbV9ncmFwaC52
YXJBcmdDaGlsZChub2RlLCAyKTsKKyAgICAgICAgICAgIG1fZ3JhcGgudm90ZU5vZGUoY2hpbGQx
LCBWb3RlVmFsdWUpOworICAgICAgICAgICAgbV9ncmFwaC52b3RlTm9kZShjaGlsZDIsIFZvdGVW
YWx1ZSk7CisgICAgICAgICAgICBzd2l0Y2ggKG5vZGUuYXJyYXlNb2RlKCkudHlwZSgpKSB7Cisg
ICAgICAgICAgICBjYXNlIEFycmF5OjpEb3VibGU6CisgICAgICAgICAgICAgICAgbV9ncmFwaC52
b3RlTm9kZShjaGlsZDMsIFZvdGVEb3VibGUpOwogICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAg
ICAgICAgICAgICBtX2dyYXBoLnZvdGUobm9kZSwgVm90ZVZhbHVlKTsKKyAgICAgICAgICAgICAg
ICBtX2dyYXBoLnZvdGVOb2RlKGNoaWxkMywgVm90ZVZhbHVlKTsKICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAg
ICAgICAgICAKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIG1fZ3JhcGgudm90ZUNoaWxk
cmVuKG5vZGUsIFZvdGVWYWx1ZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAg
IH0KKyAgICAKKyAgICB2b2lkIGRvUm91bmRPZkRvdWJsZVZvdGluZygpCisgICAgeworI2lmIERG
R19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKKyAgICAgICAgZGF0YUxvZ0YoIlZv
dGluZyBvbiBkb3VibGUgdXNlcyBvZiBsb2NhbHMgWyV1XVxuIiwgbV9jb3VudCk7CisjZW5kaWYK
KyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fZ3JhcGgubV92YXJpYWJsZUFjY2Vz
c0RhdGEuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICBtX2dyYXBoLm1fdmFyaWFibGVBY2Nlc3NE
YXRhW2ldLmZpbmQoKS0+Y2xlYXJWb3RlcygpOworICAgICAgICBmb3IgKEJhc2ljQmxvY2sgYmxv
Y2tJbmRleCA9IDA7IGkgPCBtX2dyYXBoLm1fYmxvY2tzLnNpemUoKTsgKytibG9ja0luZGV4KSB7
CisgICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGgubV9ibG9ja3NbYmxvY2tJ
bmRleF0uZ2V0KCk7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYmxvY2st
PnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICAgICAgbV9jdXJyZW50Tm9kZSA9IGJsb2NrLT5h
dChpKTsKKyAgICAgICAgICAgICAgICBkb0RvdWJsZVZvdGluZyhtX2N1cnJlbnROb2RlKTsKKyAg
ICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
bV9ncmFwaC5tX3ZhcmlhYmxlQWNjZXNzRGF0YS5zaXplKCk7ICsraSkgewogICAgICAgICAgICAg
VmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSAmbV9ncmFwaC5tX3Zhcmlh
YmxlQWNjZXNzRGF0YVtpXTsKQEAgLTEwMTIsNyArMTAzMyw3IEBAIHByaXZhdGU6CiAgICAgICAg
IH0KICAgICB9CiAgICAgCi0gICAgTm9kZUluZGV4IG1fY29tcGlsZUluZGV4OworICAgIE5vZGUq
IG1fY3VycmVudE5vZGU7CiAgICAgYm9vbCBtX2NoYW5nZWQ7CiAKICNpZiBERkdfRU5BQkxFKERF
QlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1N0cnVjdHVyZUFic3RyYWN0VmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1N0cnVjdHVyZUFic3RyYWN0VmFsdWUuaAkocmV2aXNpb24gMTQwNTA0
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDExLCAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMSwgMjAxMiwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMxNCw2ICszMTQsOCBAQCBwdWJsaWM6CiBw
cml2YXRlOgogICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIHRvcFZhbHVlKCkgeyByZXR1cm4gcmVpbnRl
cnByZXRfY2FzdDxTdHJ1Y3R1cmUqPigxKTsgfQogICAgIAorICAgIC8vIE5CLiBUaGlzIG11c3Qg
aGF2ZSBhIHRyaXZpYWwgZGVzdHJ1Y3Rvci4KKyAgICAKICAgICAvLyBUaGlzIGNhbiBvbmx5IHJl
bWVtYmVyIG9uZSBzdHJ1Y3R1cmUgYXQgYSB0aW1lLgogICAgIFN0cnVjdHVyZSogbV9zdHJ1Y3R1
cmU7CiB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJ1Y3R1cmVDaGVj
a0hvaXN0aW5nUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3RydWN0dXJlQ2hlY2tIb2lzdGluZ1BoYXNlLmNwcAkocmV2aXNpb24gMTQwNTA0KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJ1Y3R1cmVDaGVja0hvaXN0aW5nUGhh
c2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NCwyMyArNjQsMjIgQEAgcHVibGljOgogICAgICAg
ICAgICAgaWYgKCFibG9jaykKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAg
IGZvciAodW5zaWduZWQgaW5kZXhJbkJsb2NrID0gMDsgaW5kZXhJbkJsb2NrIDwgYmxvY2stPnNp
emUoKTsgKytpbmRleEluQmxvY2spIHsKLSAgICAgICAgICAgICAgICBOb2RlSW5kZXggbm9kZUlu
ZGV4ID0gYmxvY2stPmF0KGluZGV4SW5CbG9jayk7Ci0gICAgICAgICAgICAgICAgTm9kZSYgbm9k
ZSA9IG1fZ3JhcGhbbm9kZUluZGV4XTsKLSAgICAgICAgICAgICAgICBpZiAoIW5vZGUuc2hvdWxk
R2VuZXJhdGUoKSkKKyAgICAgICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPmF0KGluZGV4
SW5CbG9jayk7CisgICAgICAgICAgICAgICAgaWYgKCFub2RlLT5zaG91bGRHZW5lcmF0ZSgpKQog
ICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKG5v
ZGUub3AoKSkgeworICAgICAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewogICAgICAg
ICAgICAgICAgIGNhc2UgQ2hlY2tTdHJ1Y3R1cmU6CiAgICAgICAgICAgICAgICAgY2FzZSBTdHJ1
Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludDogewotICAgICAgICAgICAgICAgICAgICBOb2RlJiBj
aGlsZCA9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV07Ci0gICAgICAgICAgICAgICAgICAgIGlmIChj
aGlsZC5vcCgpICE9IEdldExvY2FsKQorICAgICAgICAgICAgICAgICAgICBOb2RlKiBjaGlsZCA9
IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkLT5v
cCgpICE9IEdldExvY2FsKQogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBjaGlsZC52YXJpYWJs
ZUFjY2Vzc0RhdGEoKTsKKyAgICAgICAgICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2
YXJpYWJsZSA9IGNoaWxkLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKICAgICAgICAgICAgICAgICAg
ICAgdmFyaWFibGUtPnZvdGUoVm90ZVN0cnVjdHVyZUNoZWNrKTsKICAgICAgICAgICAgICAgICAg
ICAgaWYgKHZhcmlhYmxlLT5pc0NhcHR1cmVkKCkgfHwgdmFyaWFibGUtPnN0cnVjdHVyZUNoZWNr
SG9pc3RpbmdGYWlsZWQoKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgICAgICAgICBpZiAoIWlzQ2VsbFNwZWN1bGF0aW9uKHZhcmlhYmxlLT5wcmVkaWN0aW9u
KCkpKQogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAg
IG5vdGljZVN0cnVjdHVyZUNoZWNrKHZhcmlhYmxlLCBub2RlLnN0cnVjdHVyZVNldCgpKTsKKyAg
ICAgICAgICAgICAgICAgICAgbm90aWNlU3RydWN0dXJlQ2hlY2sodmFyaWFibGUsIG5vZGUtPnN0
cnVjdHVyZVNldCgpKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgICAgICAKQEAgLTEwOSwxMyArMTA4LDEzIEBAIHB1YmxpYzoK
ICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgY2FzZSBBcnJheWlmeVRvU3Ry
dWN0dXJlOgogICAgICAgICAgICAgICAgIGNhc2UgQXJyYXlpZnk6Ci0gICAgICAgICAgICAgICAg
ICAgIGlmIChub2RlLmFycmF5TW9kZSgpLmNvbnZlcnNpb24oKSA9PSBBcnJheTo6UmFnZUNvbnZl
cnQpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmFycmF5TW9kZSgpLmNvbnZlcnNp
b24oKSA9PSBBcnJheTo6UmFnZUNvbnZlcnQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIC8v
IFJhZ2UgY29udmVyc2lvbiBjaGFuZ2VzIHN0cnVjdHVyZXMuIFdlIHNob3VsZCBhdm9pZCB0eWlu
ZyB0byBkbwogICAgICAgICAgICAgICAgICAgICAgICAgLy8gYW55IGtpbmQgb2YgaG9pc3Rpbmcg
d2hlbiByYWdlIGNvbnZlcnNpb24gaXMgaW4gcGxheS4KLSAgICAgICAgICAgICAgICAgICAgICAg
IE5vZGUmIGNoaWxkID0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChjaGlsZC5vcCgpICE9IEdldExvY2FsKQorICAgICAgICAgICAgICAgICAgICAg
ICAgTm9kZSogY2hpbGQgPSBub2RlLT5jaGlsZDEoKS5ub2RleCgpOworICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKGNoaWxkLT5vcCgpICE9IEdldExvY2FsKQogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NE
YXRhKiB2YXJpYWJsZSA9IGNoaWxkLnZhcmlhYmxlQWNjZXNzRGF0YSgpOworICAgICAgICAgICAg
ICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IGNoaWxkLT52YXJpYWJs
ZUFjY2Vzc0RhdGEoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLT52b3RlKFZv
dGVPdGhlcik7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFyaWFibGUtPmlzQ2FwdHVy
ZWQoKSB8fCB2YXJpYWJsZS0+c3RydWN0dXJlQ2hlY2tIb2lzdGluZ0ZhaWxlZCgpKQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTMwLDMwICsxMjksMjkgQEAgcHVibGlj
OgogICAgICAgICAgICAgICAgICAgICAvLyBraW5kIG9mIENoZWNrU3RydWN0dXJlLCB0aGVuIHdl
IHNob3VsZCBub3RpY2UgdGhlbSB0byBlbnN1cmUgdGhhdAogICAgICAgICAgICAgICAgICAgICAv
LyB3ZSdyZSBub3QgaG9pc3RpbmcgYSBjaGVjayB0aGF0IHdvdWxkIGNvbnRyYXZlbmUgY2hlY2tz
IHRoYXQgYXJlCiAgICAgICAgICAgICAgICAgICAgIC8vIGFscmVhZHkgYmVpbmcgcGVyZm9ybWVk
LgotICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbm9k
ZS52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKKyAgICAgICAgICAgICAgICAgICAgVmFyaWFibGVBY2Nl
c3NEYXRhKiB2YXJpYWJsZSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOwogICAgICAgICAg
ICAgICAgICAgICBpZiAodmFyaWFibGUtPmlzQ2FwdHVyZWQoKSB8fCB2YXJpYWJsZS0+c3RydWN0
dXJlQ2hlY2tIb2lzdGluZ0ZhaWxlZCgpKQogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICAgICAgICAgIGlmICghaXNDZWxsU3BlY3VsYXRpb24odmFyaWFibGUtPnBy
ZWRpY3Rpb24oKSkpCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
ICAgICAgICAgTm9kZUluZGV4IHNvdXJjZSA9IG5vZGUuY2hpbGQxKCkuaW5kZXgoKTsKKyAgICAg
ICAgICAgICAgICAgICAgTm9kZSogc291cmNlID0gbm9kZS0+Y2hpbGQxKCkubm9kZSgpOwogICAg
ICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIHN1YkluZGV4SW5CbG9jayA9IDA7IHN1Yklu
ZGV4SW5CbG9jayA8IGJsb2NrLT5zaXplKCk7ICsrc3ViSW5kZXhJbkJsb2NrKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBOb2RlSW5kZXggc3ViTm9kZUluZGV4ID0gYmxvY2stPmF0KHN1Yklu
ZGV4SW5CbG9jayk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBOb2RlJiBzdWJOb2RlID0gbV9n
cmFwaFtzdWJOb2RlSW5kZXhdOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFzdWJOb2Rl
LnNob3VsZEdlbmVyYXRlKCkpCisgICAgICAgICAgICAgICAgICAgICAgICBOb2RlKiBzdWJOb2Rl
ID0gYmxvY2stPmF0KHN1YkluZGV4SW5CbG9jayk7CisgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoIXN1Yk5vZGUtPnNob3VsZEdlbmVyYXRlKCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHN1Yk5vZGUub3Ao
KSkgeworICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChzdWJOb2RlLT5vcCgpKSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgICBjYXNlIENoZWNrU3RydWN0dXJlOiB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKHN1Yk5vZGUuY2hpbGQxKCkuaW5kZXgoKSAhPSBzb3VyY2Up
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN1Yk5vZGUtPmNoaWxkMSgpICE9IHNv
dXJjZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbm90aWNlU3Ry
dWN0dXJlQ2hlY2sodmFyaWFibGUsIHN1Yk5vZGUuc3RydWN0dXJlU2V0KCkpOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG5vdGljZVN0cnVjdHVyZUNoZWNrKHZhcmlhYmxlLCBzdWJOb2Rl
LT5zdHJ1Y3R1cmVTZXQoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFN0
cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50OiB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKHN1Yk5vZGUuY2hpbGQxKCkuaW5kZXgoKSAhPSBzb3VyY2UpCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKHN1Yk5vZGUtPmNoaWxkMSgpICE9IHNvdXJjZSkKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbm90aWNlU3RydWN0dXJlQ2hlY2sodmFy
aWFibGUsIHN1Yk5vZGUuc3RydWN0dXJlKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG5vdGljZVN0cnVjdHVyZUNoZWNrKHZhcmlhYmxlLCBzdWJOb2RlLT5zdHJ1Y3R1cmUoKSk7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgpAQCAtMTYxLDE0ICsxNTksMTQg
QEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLnZv
dGUobm9kZSwgVm90ZU90aGVyKTsKKyAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC52b3RlQ2hp
bGRyZW4obm9kZSwgVm90ZU90aGVyKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGNhc2UgR2FyYmFnZVZhbHVlOgogICAgICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAg
ICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC52b3RlKG5vZGUsIFZvdGVP
dGhlcik7CisgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgudm90ZUNoaWxkcmVuKG5vZGUsIFZv
dGVPdGhlcik7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIH0KQEAgLTIwOSwxMCArMjA3LDEwIEBAIHB1YmxpYzoKICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9ncmFw
aC5tX211c3RIYW5kbGVWYWx1ZXMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgICAgICAgICBpbnQg
b3BlcmFuZCA9IG1fZ3JhcGgubV9tdXN0SGFuZGxlVmFsdWVzLm9wZXJhbmRGb3JJbmRleChpKTsK
LSAgICAgICAgICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4ID0gYmxvY2stPnZhcmlhYmxlc0F0
SGVhZC5vcGVyYW5kKG9wZXJhbmQpOwotICAgICAgICAgICAgICAgIGlmIChub2RlSW5kZXggPT0g
Tm9Ob2RlKQorICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+dmFyaWFibGVzQXRI
ZWFkLm9wZXJhbmQob3BlcmFuZCk7CisgICAgICAgICAgICAgICAgaWYgKCFub2RlKQogICAgICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0Rh
dGEqIHZhcmlhYmxlID0gbV9ncmFwaFtub2RlSW5kZXhdLnZhcmlhYmxlQWNjZXNzRGF0YSgpOwor
ICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBub2RlLT52YXJp
YWJsZUFjY2Vzc0RhdGEoKTsKICAgICAgICAgICAgICAgICBIYXNoTWFwPFZhcmlhYmxlQWNjZXNz
RGF0YSosIENoZWNrRGF0YT46Oml0ZXJhdG9yIGl0ZXIgPSBtX21hcC5maW5kKHZhcmlhYmxlKTsK
ICAgICAgICAgICAgICAgICBpZiAoaXRlciA9PSBtX21hcC5lbmQoKSkKICAgICAgICAgICAgICAg
ICAgICAgY29udGludWU7CkBAIC0yNjUsNDggKzI2Myw0NyBAQCBwdWJsaWM6CiAgICAgICAgICAg
ICBpZiAoIWJsb2NrKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpbmRleEluQmxvY2sgPSAwOyBpbmRleEluQmxvY2sgPCBibG9jay0+c2l6ZSgp
OyArK2luZGV4SW5CbG9jaykgewotICAgICAgICAgICAgICAgIE5vZGVJbmRleCBub2RlSW5kZXgg
PSBibG9jay0+YXQoaW5kZXhJbkJsb2NrKTsKLSAgICAgICAgICAgICAgICBOb2RlJiBub2RlID0g
bV9ncmFwaFtub2RlSW5kZXhdOworICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+
YXQoaW5kZXhJbkJsb2NrKTsKICAgICAgICAgICAgICAgICAvLyBCZSBjYXJlZnVsIG5vdCB0byB1
c2UgJ25vZGUnIGFmdGVyIGFwcGVuZGluZyB0byB0aGUgZ3JhcGguIEluIHRob3NlIHN3aXRjaAog
ICAgICAgICAgICAgICAgIC8vIGNhc2VzIHdoZXJlIHdlIG5lZWQgdG8gYXBwZW5kLCB3ZSBmaXJz
dCBjYXJlZnVsbHkgZXh0cmFjdCBldmVyeXRoaW5nIHdlIG5lZWQKICAgICAgICAgICAgICAgICAv
LyBmcm9tIHRoZSBub2RlLCBiZWZvcmUgZG9pbmcgYW55IGFwcGVuZGluZy4KLSAgICAgICAgICAg
ICAgICBpZiAoIW5vZGUuc2hvdWxkR2VuZXJhdGUoKSkKKyAgICAgICAgICAgICAgICBpZiAoIW5v
ZGUtPnNob3VsZEdlbmVyYXRlKCkpCiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAg
ICAgICAgICAgICAgIHN3aXRjaCAobm9kZS5vcCgpKSB7CisgICAgICAgICAgICAgICAgc3dpdGNo
IChub2RlLT5vcCgpKSB7CiAgICAgICAgICAgICAgICAgY2FzZSBTZXRBcmd1bWVudDogewogICAg
ICAgICAgICAgICAgICAgICBBU1NFUlQoIWJsb2NrSW5kZXgpOwogICAgICAgICAgICAgICAgICAg
ICAvLyBJbnNlcnQgYSBHZXRMb2NhbCBhbmQgYSBDaGVja1N0cnVjdHVyZSBpbW1lZGlhdGVseSBm
b2xsb3dpbmcgdGhpcwogICAgICAgICAgICAgICAgICAgICAvLyBTZXRBcmd1bWVudCwgaWYgdGhl
IHZhcmlhYmxlIHdhcyBhIGNhbmRpZGF0ZSBmb3Igc3RydWN0dXJlIGhvaXN0aW5nLgogICAgICAg
ICAgICAgICAgICAgICAvLyBJZiB0aGUgYmFzaWMgYmxvY2sgcHJldmlvdXNseSBvbmx5IGhhZCB0
aGUgU2V0QXJndW1lbnQgYXMgaXRzCiAgICAgICAgICAgICAgICAgICAgIC8vIHZhcmlhYmxlLWF0
LXRhaWwsIHRoZW4gcmVwbGFjZSBpdCB3aXRoIHRoaXMgR2V0TG9jYWwuCi0gICAgICAgICAgICAg
ICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBub2RlLnZhcmlhYmxlQWNjZXNz
RGF0YSgpOworICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxl
ID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CiAgICAgICAgICAgICAgICAgICAgIEhhc2hN
YXA8VmFyaWFibGVBY2Nlc3NEYXRhKiwgQ2hlY2tEYXRhPjo6aXRlcmF0b3IgaXRlciA9IG1fbWFw
LmZpbmQodmFyaWFibGUpOwogICAgICAgICAgICAgICAgICAgICBpZiAoaXRlciA9PSBtX21hcC5l
bmQoKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAg
ICBpZiAoIWl0ZXItPnZhbHVlLm1fc3RydWN0dXJlKQogICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBDb2RlT3Jp
Z2luIGNvZGVPcmlnaW4gPSBub2RlLmNvZGVPcmlnaW47CisgICAgICAgICAgICAgICAgICAgIENv
ZGVPcmlnaW4gY29kZU9yaWdpbiA9IG5vZGUtPmNvZGVPcmlnaW47CiAgICAgICAgICAgICAgICAg
ICAgIAotICAgICAgICAgICAgICAgICAgICBOb2RlSW5kZXggZ2V0TG9jYWxJbmRleCA9IGluc2Vy
dGlvblNldC5pbnNlcnROb2RlKAorICAgICAgICAgICAgICAgICAgICBOb2RlKiBnZXRMb2NhbCA9
IGluc2VydGlvblNldC5pbnNlcnROb2RlKAogICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhJ
bkJsb2NrICsgMSwgRG9udFJlZkNoaWxkcmVuLCBEb250UmVmTm9kZSwgdmFyaWFibGUtPnByZWRp
Y3Rpb24oKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIEdldExvY2FsLCBjb2RlT3JpZ2luLCBP
cEluZm8odmFyaWFibGUpLCBub2RlSW5kZXgpOworICAgICAgICAgICAgICAgICAgICAgICAgR2V0
TG9jYWwsIGNvZGVPcmlnaW4sIE9wSW5mbyh2YXJpYWJsZSksIG5vZGUpOwogICAgICAgICAgICAg
ICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKICAgICAgICAgICAgICAgICAgICAgICAg
IGluZGV4SW5CbG9jayArIDEsIFJlZkNoaWxkcmVuLCBEb250UmVmTm9kZSwgU3BlY05vbmUsIENo
ZWNrU3RydWN0dXJlLAogICAgICAgICAgICAgICAgICAgICAgICAgY29kZU9yaWdpbiwgT3BJbmZv
KG1fZ3JhcGguYWRkU3RydWN0dXJlU2V0KGl0ZXItPnZhbHVlLm1fc3RydWN0dXJlKSksCiAgICAg
ICAgICAgICAgICAgICAgICAgICBnZXRMb2NhbEluZGV4KTsKIAotICAgICAgICAgICAgICAgICAg
ICBpZiAoYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSA9
PSBub2RlSW5kZXgpCi0gICAgICAgICAgICAgICAgICAgICAgICBibG9jay0+dmFyaWFibGVzQXRU
YWlsLm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpID0gZ2V0TG9jYWxJbmRleDsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKGJsb2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZCh2YXJpYWJsZS0+
bG9jYWwoKSkgPT0gbm9kZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrLT52YXJpYWJs
ZXNBdFRhaWwub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkgPSBnZXRMb2NhbDsKICAgICAgICAg
ICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguc3Vic3RpdHV0ZUdldExv
Y2FsKCpibG9jaywgaW5kZXhJbkJsb2NrLCB2YXJpYWJsZSwgZ2V0TG9jYWxJbmRleCk7CisgICAg
ICAgICAgICAgICAgICAgIG1fZ3JhcGguc3Vic3RpdHV0ZUdldExvY2FsKCpibG9jaywgaW5kZXhJ
bkJsb2NrLCB2YXJpYWJsZSwgZ2V0TG9jYWwpOwogICAgICAgICAgICAgICAgICAgICAKICAgICAg
ICAgICAgICAgICAgICAgY2hhbmdlZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAg
ICAgY2FzZSBTZXRMb2NhbDogewotICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0Rh
dGEqIHZhcmlhYmxlID0gbm9kZS52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKKyAgICAgICAgICAgICAg
ICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNz
RGF0YSgpOwogICAgICAgICAgICAgICAgICAgICBIYXNoTWFwPFZhcmlhYmxlQWNjZXNzRGF0YSos
IENoZWNrRGF0YT46Oml0ZXJhdG9yIGl0ZXIgPSBtX21hcC5maW5kKHZhcmlhYmxlKTsKICAgICAg
ICAgICAgICAgICAgICAgaWYgKGl0ZXIgPT0gbV9tYXAuZW5kKCkpCiAgICAgICAgICAgICAgICAg
ICAgICAgICBicmVhazsKQEAgLTMxNyw4ICszMTQsOCBAQCBwdWJsaWM6CiAgICAgICAgICAgICAg
ICAgICAgIC8vIGJlIGRyb3BwZWQgaW50byB0aGlzIGJ5dGVjb2RlIHZhcmlhYmxlIGlmIHRoZSBD
aGVja1N0cnVjdHVyZSBkZWNpZGVzCiAgICAgICAgICAgICAgICAgICAgIC8vIHRvIGV4aXQuCiAg
ICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBDb2RlT3JpZ2luIGNvZGVP
cmlnaW4gPSBub2RlLmNvZGVPcmlnaW47Ci0gICAgICAgICAgICAgICAgICAgIE5vZGVJbmRleCBj
aGlsZDEgPSBub2RlLmNoaWxkMSgpLmluZGV4KCk7CisgICAgICAgICAgICAgICAgICAgIENvZGVP
cmlnaW4gY29kZU9yaWdpbiA9IG5vZGUtPmNvZGVPcmlnaW47CisgICAgICAgICAgICAgICAgICAg
IE5vZGUqIGNoaWxkMSA9IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKICAgICAgICAgICAgICAgICAg
ICAgCiAgICAgICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnROb2RlKAogICAgICAg
ICAgICAgICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBEb250UmVmQ2hpbGRyZW4sIERvbnRSZWZO
b2RlLCBTcGVjTm9uZSwgU2V0TG9jYWwsIGNvZGVPcmlnaW4sCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1ZhbGlkYXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1ZhbGlkYXRlLmNwcAkocmV2aXNpb24gMTQwNTA0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYWxpZGF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgw
LDQwICs4MCw0MyBAQCBwdWJsaWM6CiAgICAgICAgIC8vIFZhbGlkYXRlIHRoYXQgYWxsIGxvY2Fs
IHZhcmlhYmxlcyBhdCB0aGUgaGVhZCBvZiB0aGUgcm9vdCBibG9jayBhcmUgZGVhZC4KICAgICAg
ICAgQmFzaWNCbG9jayogcm9vdCA9IG1fZ3JhcGgubV9ibG9ja3NbMF0uZ2V0KCk7CiAgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCByb290LT52YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZM
b2NhbHMoKTsgKytpKQotICAgICAgICAgICAgVl9FUVVBTCgoc3RhdGljX2Nhc3Q8VmlydHVhbFJl
Z2lzdGVyPihpKSwgMCksIE5vTm9kZSwgcm9vdC0+dmFyaWFibGVzQXRIZWFkLmxvY2FsKGkpKTsK
KyAgICAgICAgICAgIFZfRVFVQUwoKHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4oaSksIDAp
LCAwLCByb290LT52YXJpYWJsZXNBdEhlYWQubG9jYWwoaSkpOwogICAgICAgICAKICAgICAgICAg
Ly8gVmFsaWRhdGUgcmVmIGNvdW50cyBhbmQgdXNlcy4KLSAgICAgICAgVmVjdG9yPHVuc2lnbmVk
PiBteVJlZkNvdW50czsKLSAgICAgICAgbXlSZWZDb3VudHMuZmlsbCgwLCBtX2dyYXBoLnNpemUo
KSk7Ci0gICAgICAgIEJpdFZlY3RvciBhY2NlcHRhYmxlTm9kZUluZGljZXM7CisgICAgICAgIEhh
c2hNYXA8Tm9kZSosIHVuc2lnbmVkPiBteVJlZkNvdW50czsKICAgICAgICAgZm9yIChCbG9ja0lu
ZGV4IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9ncmFwaC5tX2Jsb2Nrcy5zaXplKCk7
ICsrYmxvY2tJbmRleCkgewogICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBo
Lm1fYmxvY2tzW2Jsb2NrSW5kZXhdLmdldCgpOwotICAgICAgICAgICAgaWYgKCFibG9jaykKKyAg
ICAgICAgICAgIGlmICghYmxvY2sgfHwgIWJsb2NrLT5pc1JlYWNoYWJsZSkKICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGlmICghYmxvY2stPmlzUmVhY2hhYmxlKQorICAg
ICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBibG9jay0+bnVtTm9kZXMoKTsgKytpKQor
ICAgICAgICAgICAgICAgIG15UmVmQ291bnRzLmFkZChibG9jay0+bm9kZShpKSwgMCk7CisgICAg
ICAgIH0KKyAgICAgICAgSGFzaFNldDxOb2RlKj4gYWNjZXB0YWJsZU5vZGVzOworICAgICAgICBm
b3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2dyYXBoLm1fYmxv
Y2tzLnNpemUoKTsgKytibG9ja0luZGV4KSB7CisgICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9j
ayA9IG1fZ3JhcGgubV9ibG9ja3NbYmxvY2tJbmRleF0uZ2V0KCk7CisgICAgICAgICAgICBpZiAo
IWJsb2NrIHx8ICFibG9jay0+aXNSZWFjaGFibGUpCiAgICAgICAgICAgICAgICAgY29udGludWU7
CiAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGJsb2NrLT5udW1Ob2RlcygpOyAr
K2kpIHsKLSAgICAgICAgICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4ID0gYmxvY2stPm5vZGVJ
bmRleChpKTsKLSAgICAgICAgICAgICAgICBhY2NlcHRhYmxlTm9kZUluZGljZXMuc2V0KG5vZGVJ
bmRleCk7Ci0gICAgICAgICAgICAgICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhbbm9kZUluZGV4XTsK
LSAgICAgICAgICAgICAgICBpZiAoIW5vZGUuc2hvdWxkR2VuZXJhdGUoKSkKKyAgICAgICAgICAg
ICAgICBOb2RlKiBub2RlID0gYmxvY2stPm5vZGUoaSk7CisgICAgICAgICAgICAgICAgYWNjZXB0
YWJsZU5vZGVzLmFkZChub2RlKTsKKyAgICAgICAgICAgICAgICBpZiAoIW5vZGUtPnNob3VsZEdl
bmVyYXRlKCkpCiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAg
IGZvciAodW5zaWduZWQgaiA9IDA7IGogPCBtX2dyYXBoLm51bUNoaWxkcmVuKG5vZGUpOyArK2op
IHsKICAgICAgICAgICAgICAgICAgICAgRWRnZSBlZGdlID0gbV9ncmFwaC5jaGlsZChub2RlLCBq
KTsKICAgICAgICAgICAgICAgICAgICAgaWYgKCFlZGdlKQogICAgICAgICAgICAgICAgICAgICAg
ICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBt
eVJlZkNvdW50c1tlZGdlLmluZGV4KCldKys7CisgICAgICAgICAgICAgICAgICAgIG15UmVmQ291
bnRzLmZpbmQoZWRnZS5ub2RlKCkpLT52YWx1ZSsrOwogICAgICAgICAgICAgICAgICAgICAKICAg
ICAgICAgICAgICAgICAgICAgLy8gVW5sZXNzIEknbSBhIEZsdXNoLCBQaGFudG9tLCBHZXRMb2Nh
bCwgb3IgUGhpLCBteSBjaGlsZHJlbiBzaG91bGQgaGFzUmVzdWx0KCkuCi0gICAgICAgICAgICAg
ICAgICAgIHN3aXRjaCAobm9kZS5vcCgpKSB7CisgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAo
bm9kZS0+b3AoKSkgewogICAgICAgICAgICAgICAgICAgICBjYXNlIEZsdXNoOgogICAgICAgICAg
ICAgICAgICAgICBjYXNlIFBoYW50b206CiAgICAgICAgICAgICAgICAgICAgIGNhc2UgR2V0TG9j
YWw6CiAgICAgICAgICAgICAgICAgICAgIGNhc2UgUGhpOgogICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBWQUxJREFURSgobm9kZUluZGV4LCBlZGdlKSwgbV9ncmFwaFtlZGdlXS5oYXNSZXN1
bHQoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgobm9kZSwgZWRnZSksIGVk
Z2UtPmhhc1Jlc3VsdCgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQpAQCAtMTIxLDU0ICsxMjQsNTAgQEAg
cHVibGljOgogICAgICAgICB9CiAgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0g
MDsgYmxvY2tJbmRleCA8IG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgpOyArK2Jsb2NrSW5kZXgpIHsK
ICAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5tX2Jsb2Nrc1tibG9ja0lu
ZGV4XS5nZXQoKTsKLSAgICAgICAgICAgIGlmICghYmxvY2spCi0gICAgICAgICAgICAgICAgY29u
dGludWU7Ci0gICAgICAgICAgICBpZiAoIWJsb2NrLT5pc1JlYWNoYWJsZSkKKyAgICAgICAgICAg
IGlmICghYmxvY2sgfHwgIWJsb2NrLT5pc1JlYWNoYWJsZSkKICAgICAgICAgICAgICAgICBjb250
aW51ZTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgQml0VmVjdG9yIHBoaXNJblRoaXNCbG9j
azsKLSAgICAgICAgICAgIEJpdFZlY3RvciBub2Rlc0luVGhpc0Jsb2NrOworICAgICAgICAgICAg
SGFzaFNldDxOb2RlKj4gcGhpc0luVGhpc0Jsb2NrOworICAgICAgICAgICAgSGFzaFNldDxOb2Rl
Kj4gbm9kZXNJblRoaXNCbG9jazsKICAgICAgICAgICAgIAogICAgICAgICAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBibG9jay0+bnVtTm9kZXMoKTsgKytpKSB7Ci0gICAgICAgICAgICAgICAg
Tm9kZUluZGV4IG5vZGVJbmRleCA9IGJsb2NrLT5ub2RlSW5kZXgoaSk7Ci0gICAgICAgICAgICAg
ICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhbbm9kZUluZGV4XTsKLSAgICAgICAgICAgICAgICBub2Rl
c0luVGhpc0Jsb2NrLnNldChub2RlSW5kZXgpOworICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUg
PSBibG9jay0+bm9kZShpKTsKKyAgICAgICAgICAgICAgICBub2Rlc0luVGhpc0Jsb2NrLmFkZChu
b2RlKTsKICAgICAgICAgICAgICAgICBpZiAoYmxvY2stPmlzUGhpSW5kZXgoaSkpCi0gICAgICAg
ICAgICAgICAgICAgIHBoaXNJblRoaXNCbG9jay5zZXQobm9kZUluZGV4KTsKLSAgICAgICAgICAg
ICAgICBWX0VRVUFMKChub2RlSW5kZXgpLCBteVJlZkNvdW50c1tub2RlSW5kZXhdLCBub2RlLmFk
anVzdGVkUmVmQ291bnQoKSk7CisgICAgICAgICAgICAgICAgICAgIHBoaXNJblRoaXNCbG9jay5h
ZGQobm9kZSk7CisgICAgICAgICAgICAgICAgVl9FUVVBTCgobm9kZSksIG15UmVmQ291bnRzLmdl
dChub2RlSW5kZXgpLCBub2RlLmFkanVzdGVkUmVmQ291bnQoKSk7CiAgICAgICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBqID0gMDsgaiA8IG1fZ3JhcGgubnVtQ2hpbGRyZW4obm9kZSk7ICsraikg
ewogICAgICAgICAgICAgICAgICAgICBFZGdlIGVkZ2UgPSBtX2dyYXBoLmNoaWxkKG5vZGUsIGop
OwogICAgICAgICAgICAgICAgICAgICBpZiAoIWVkZ2UpCiAgICAgICAgICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKG5vZGVJbmRleCwgZWRn
ZSksIGFjY2VwdGFibGVOb2RlSW5kaWNlcy5nZXQoZWRnZS5pbmRleCgpKSk7CisgICAgICAgICAg
ICAgICAgICAgIFZBTElEQVRFKChub2RlLCBlZGdlKSwgYWNjZXB0YWJsZU5vZGVJbmRpY2VzLmNv
bnRhaW5zKGVkZ2Uubm9kZSgpKSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQog
ICAgICAgICAgICAgCiAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGJsb2NrLT5w
aGlzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRleCA9
IGJsb2NrLT5waGlzW2ldOwotICAgICAgICAgICAgICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW25v
ZGVJbmRleF07Ci0gICAgICAgICAgICAgICAgQVNTRVJUKHBoaXNJblRoaXNCbG9jay5nZXQobm9k
ZUluZGV4KSk7Ci0gICAgICAgICAgICAgICAgVkFMSURBVEUoKG5vZGVJbmRleCksIG5vZGUub3Ao
KSA9PSBQaGkpOwotICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBsb2NhbCA9IG5vZGUu
bG9jYWwoKTsKKyAgICAgICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPnBoaXNbaV07Cisg
ICAgICAgICAgICAgICAgQVNTRVJUKHBoaXNJblRoaXNCbG9jay5jb250YWlucyhub2RlKSk7Cisg
ICAgICAgICAgICAgICAgVkFMSURBVEUoKG5vZGUpLCBub2RlLT5vcCgpID09IFBoaSk7CisgICAg
ICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGxvY2FsID0gbm9kZS0+bG9jYWwoKTsKICAgICAg
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSAwOyBqIDwgbV9ncmFwaC5udW1DaGlsZHJlbihu
b2RlKTsgKytqKSB7CiAgICAgICAgICAgICAgICAgICAgIEVkZ2UgZWRnZSA9IG1fZ3JhcGguY2hp
bGQobm9kZSwgaik7CiAgICAgICAgICAgICAgICAgICAgIGlmICghZWRnZSkKICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAg
ICAgICAgICAgVkFMSURBVEUoKG5vZGVJbmRleCwgZWRnZSksCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG1fZ3JhcGhbZWRnZV0ub3AoKSA9PSBTZXRMb2NhbAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB8fCBtX2dyYXBoW2VkZ2VdLm9wKCkgPT0gU2V0QXJndW1lbnQKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfHwgbV9ncmFwaFtlZGdlXS5vcCgpID09IEZsdXNoCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IG1fZ3JhcGhbZWRnZV0ub3AoKSA9PSBQaGkp
OworICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgobm9kZSwgZWRnZSksCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGVkZ2UtPm9wKCkgPT0gU2V0TG9jYWwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfHwgZWRnZS0+b3AoKSA9PSBTZXRBcmd1bWVudAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB8fCBlZGdlLT5vcCgpID09IEZsdXNoCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHx8IGVkZ2UtPm9wKCkgPT0gUGhpKTsKICAgICAgICAgICAgICAgICAgICAg
Ci0gICAgICAgICAgICAgICAgICAgIGlmIChwaGlzSW5UaGlzQmxvY2suZ2V0KGVkZ2UuaW5kZXgo
KSkpCisgICAgICAgICAgICAgICAgICAgIGlmIChwaGlzSW5UaGlzQmxvY2suY29udGFpbnMoZWRn
ZS5ub2RlKCkpKQogICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAg
ICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBpZiAobm9kZXNJblRoaXNCbG9jay5nZXQo
ZWRnZS5pbmRleCgpKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKG5vZGVJ
bmRleCwgZWRnZSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoW2Vk
Z2VdLm9wKCkgPT0gU2V0TG9jYWwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8
IG1fZ3JhcGhbZWRnZV0ub3AoKSA9PSBTZXRBcmd1bWVudAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfHwgbV9ncmFwaFtlZGdlXS5vcCgpID09IEZsdXNoKTsKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKG5vZGVzSW5UaGlzQmxvY2suY29udGFpbnMoZWRnZS5ub2RlKCkpKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgobm9kZSwgZWRnZSksCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBlZGdlLT5vcCgpID09IFNldExvY2FsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB8fCBlZGdlLT5vcCgpID09IFNldEFyZ3VtZW50CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBlZGdlLT5vcCgpID09IEZsdXNoKTsKICAg
ICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7
CiAgICAgICAgICAgICAgICAgICAgIH0KQEAgLTE4MCwzMyArMTc5LDMwIEBAIHB1YmxpYzoKICAg
ICAgICAgICAgICAgICAgICAgICAgIEJhc2ljQmxvY2sqIHByZXZCbG9jayA9IG1fZ3JhcGgubV9i
bG9ja3NbYmxvY2stPm1fcHJlZGVjZXNzb3JzW2tdXS5nZXQoKTsKICAgICAgICAgICAgICAgICAg
ICAgICAgIFZBTElEQVRFKChCbG9jaywgYmxvY2stPm1fcHJlZGVjZXNzb3JzW2tdKSwgcHJldkJs
b2NrKTsKICAgICAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChCbG9jaywgYmxvY2stPm1f
cHJlZGVjZXNzb3JzW2tdKSwgcHJldkJsb2NrLT5pc1JlYWNoYWJsZSk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBOb2RlSW5kZXggcHJldk5vZGVJbmRleCA9IHByZXZCbG9jay0+dmFyaWFibGVz
QXRUYWlsLm9wZXJhbmQobG9jYWwpOworICAgICAgICAgICAgICAgICAgICAgICAgTm9kZSogcHJl
dk5vZGUgPSBwcmV2QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKGxvY2FsKTsKICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIElmIHdlIGhhdmUgYSBQaGkgdGhhdCBpcyBub3QgcmVmZXJy
aW5nIHRvICp0aGlzKiBibG9jayB0aGVuIGFsbCBwcmVkZWNlc3NvcnMKICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIG11c3QgaGF2ZSB0aGF0IGxvY2FsIGF2YWlsYWJsZS4KLSAgICAgICAgICAg
ICAgICAgICAgICAgIFZBTElEQVRFKChsb2NhbCwgYmxvY2tJbmRleCwgQmxvY2ssIGJsb2NrLT5t
X3ByZWRlY2Vzc29yc1trXSksIHByZXZOb2RlSW5kZXggIT0gTm9Ob2RlKTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIE5vZGUqIHByZXZOb2RlID0gJm1fZ3JhcGhbcHJldk5vZGVJbmRleF07Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJldk5vZGUtPm9wKCkgPT0gR2V0TG9jYWwpIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2Tm9kZUluZGV4ID0gcHJldk5vZGUtPmNo
aWxkMSgpLmluZGV4KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldk5vZGUgPSAm
bV9ncmFwaFtwcmV2Tm9kZUluZGV4XTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChub2RlLnNob3VsZEdlbmVyYXRlKCkpIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgobG9jYWwsIGJsb2NrLT5tX3ByZWRlY2Vzc29y
c1trXSwgcHJldk5vZGVJbmRleCksCisgICAgICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgo
bG9jYWwsIGJsb2NrSW5kZXgsIEJsb2NrLCBibG9jay0+bV9wcmVkZWNlc3NvcnNba10pLCBwcmV2
Tm9kZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJldk5vZGUtPm9wKCkgPT0gR2V0
TG9jYWwpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldk5vZGUgPSBwcmV2Tm9kZS0+
Y2hpbGQxKCkubm9kZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPnNob3Vs
ZEdlbmVyYXRlKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgobG9j
YWwsIGJsb2NrLT5tX3ByZWRlY2Vzc29yc1trXSwgcHJldk5vZGUpLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHByZXZOb2RlLT5zaG91bGRHZW5lcmF0ZSgpKTsKICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChs
b2NhbCwgYmxvY2stPm1fcHJlZGVjZXNzb3JzW2tdLCBwcmV2Tm9kZUluZGV4KSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgIFZBTElEQVRFKChsb2NhbCwgYmxvY2stPm1fcHJlZGVjZXNzb3JzW2td
LCBwcmV2Tm9kZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2Tm9kZS0+
b3AoKSA9PSBTZXRMb2NhbAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgcHJl
dk5vZGUtPm9wKCkgPT0gU2V0QXJndW1lbnQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHx8IHByZXZOb2RlLT5vcCgpID09IEZsdXNoCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB8fCBwcmV2Tm9kZS0+b3AoKSA9PSBQaGkpOwotICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKHByZXZOb2RlSW5kZXggPT0gZWRnZS5pbmRleCgpKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAocHJldk5vZGUgPT0gZWRnZS5ub2RlKCkpIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBmb3VuZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAv
LyBBdCB0aGlzIHBvaW50IGl0IGNhbm5vdCByZWZlciBpbnRvIHRoaXMgYmxvY2suCi0gICAgICAg
ICAgICAgICAgICAgICAgICBWQUxJREFURSgobG9jYWwsIGJsb2NrLT5tX3ByZWRlY2Vzc29yc1tr
XSwgcHJldk5vZGVJbmRleCksICFwcmV2QmxvY2stPmlzSW5CbG9jayhlZGdlLmluZGV4KCkpKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChsb2NhbCwgYmxvY2stPm1fcHJlZGVj
ZXNzb3JzW2tdLCBwcmV2Tm9kZSksICFwcmV2QmxvY2stPmlzSW5CbG9jayhlZGdlLm5vZGUoKSkp
OwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAg
ICAgICAgICAgICBWQUxJREFURSgobm9kZUluZGV4LCBlZGdlKSwgZm91bmQpOworICAgICAgICAg
ICAgICAgICAgICBWQUxJREFURSgobm9kZSwgZWRnZSksIGZvdW5kKTsKICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKQEAgLTIyNywzNCArMjIzLDMzIEBAIHB1
YmxpYzoKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBibG9jay0+c2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgICAgICBOb2Rl
SW5kZXggbm9kZUluZGV4ID0gYmxvY2stPmF0KGkpOwotICAgICAgICAgICAgICAgIE5vZGUmIG5v
ZGUgPSBtX2dyYXBoW25vZGVJbmRleF07Ci0gICAgICAgICAgICAgICAgQVNTRVJUKG5vZGVzSW5U
aGlzQmxvY2suZ2V0KG5vZGVJbmRleCkpOwotICAgICAgICAgICAgICAgIFZBTElEQVRFKChub2Rl
SW5kZXgpLCBub2RlLm9wKCkgIT0gUGhpKTsKKyAgICAgICAgICAgICAgICBOb2RlKiBub2RlID0g
YmxvY2stPmF0KGkpOworICAgICAgICAgICAgICAgIEFTU0VSVChub2Rlc0luVGhpc0Jsb2NrLmNv
bnRhaW5zKG5vZGUpKTsKKyAgICAgICAgICAgICAgICBWQUxJREFURSgobm9kZSksIG5vZGUtPm9w
KCkgIT0gUGhpKTsKICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSAwOyBqIDwgbV9n
cmFwaC5udW1DaGlsZHJlbihub2RlKTsgKytqKSB7CiAgICAgICAgICAgICAgICAgICAgIEVkZ2Ug
ZWRnZSA9IG1fZ3JhcGguY2hpbGQobm9kZSwgaik7CiAgICAgICAgICAgICAgICAgICAgIGlmICgh
ZWRnZSkKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAg
ICAgICBWQUxJREFURSgobm9kZUluZGV4LCBlZGdlKSwgbm9kZXNJblRoaXNCbG9jay5nZXQobm9k
ZUluZGV4KSk7CisgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChub2RlLCBlZGdlKSwgbm9k
ZXNJblRoaXNCbG9jay5jb250YWlucyhlZGdlLm5vZGUoKSkpOwogICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBpZiAoIW5vZGUuc2hvdWxkR2VuZXJh
dGUoKSkKKyAgICAgICAgICAgICAgICBpZiAoIW5vZGUtPnNob3VsZEdlbmVyYXRlKCkpCiAgICAg
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIHN3aXRjaCAobm9kZS5v
cCgpKSB7CisgICAgICAgICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CiAgICAgICAgICAg
ICAgICAgY2FzZSBHZXRMb2NhbDoKLSAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUudmFyaWFi
bGVBY2Nlc3NEYXRhKCktPmlzQ2FwdHVyZWQoKSkKKyAgICAgICAgICAgICAgICAgICAgaWYgKG5v
ZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5pc0NhcHR1cmVkKCkpCiAgICAgICAgICAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKG5vZGVJbmRleCwg
YmxvY2tJbmRleCksIGdldExvY2FsUG9zaXRpb25zLm9wZXJhbmQobm9kZS5sb2NhbCgpKSA9PSBu
b3RTZXQpOwotICAgICAgICAgICAgICAgICAgICBnZXRMb2NhbFBvc2l0aW9ucy5vcGVyYW5kKG5v
ZGUubG9jYWwoKSkgPSBpOworICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgobm9kZSwgYmxv
Y2tJbmRleCksIGdldExvY2FsUG9zaXRpb25zLm9wZXJhbmQobm9kZS0+bG9jYWwoKSkgPT0gbm90
U2V0KTsKKyAgICAgICAgICAgICAgICAgICAgZ2V0TG9jYWxQb3NpdGlvbnMub3BlcmFuZChub2Rl
LT5sb2NhbCgpKSA9IGk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
ICAgIGNhc2UgU2V0TG9jYWw6Ci0gICAgICAgICAgICAgICAgICAgIGlmIChub2RlLnZhcmlhYmxl
QWNjZXNzRGF0YSgpLT5pc0NhcHR1cmVkKCkpCisgICAgICAgICAgICAgICAgICAgIGlmIChub2Rl
LT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+aXNDYXB0dXJlZCgpKQogICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIC8vIE9ubHkgcmVjb3JkIHRoZSBmaXJz
dCBTZXRMb2NhbC4gVGhlcmUgbWF5IGJlIG11bHRpcGxlIFNldExvY2FscwogICAgICAgICAgICAg
ICAgICAgICAvLyBiZWNhdXNlIG9mIGZsdXNoaW5nLgotICAgICAgICAgICAgICAgICAgICBpZiAo
c2V0TG9jYWxQb3NpdGlvbnMub3BlcmFuZChub2RlLmxvY2FsKCkpICE9IG5vdFNldCkKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKHNldExvY2FsUG9zaXRpb25zLm9wZXJhbmQobm9kZS0+bG9jYWwo
KSkgIT0gbm90U2V0KQogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAgICAgICAgIHNldExvY2FsUG9zaXRpb25zLm9wZXJhbmQobm9kZS5sb2NhbCgpKSA9IGk7Cisg
ICAgICAgICAgICAgICAgICAgIHNldExvY2FsUG9zaXRpb25zLm9wZXJhbmQobm9kZS0+bG9jYWwo
KSkgPSBpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICBkZWZh
dWx0OgogICAgICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTI5NCw5ICsyODksOSBAQCBwcml2
YXRlOgogICAgICAgICAgICAgZ2V0TG9jYWxQb3NpdGlvbnMub3BlcmFuZChvcGVyYW5kKSA8IHNl
dExvY2FsUG9zaXRpb25zLm9wZXJhbmQob3BlcmFuZCkpOwogICAgIH0KICAgICAKLSAgICB2b2lk
IHJlcG9ydFZhbGlkYXRpb25Db250ZXh0KE5vZGVJbmRleCBub2RlSW5kZXgpCisgICAgdm9pZCBy
ZXBvcnRWYWxpZGF0aW9uQ29udGV4dChOb2RlKiBub2RlKQogICAgIHsKLSAgICAgICAgZGF0YUxv
Z0YoIkAldSIsIG5vZGVJbmRleCk7CisgICAgICAgIGRhdGFMb2dGKCJAJXUiLCBub2RlLT5pbmRl
eCgpKTsKICAgICB9CiAgICAgCiAgICAgZW51bSBCbG9ja1RhZyB7IEJsb2NrIH07CkBAIC0zMDUs
OSArMzAwLDkgQEAgcHJpdmF0ZToKICAgICAgICAgZGF0YUxvZ0YoIkJsb2NrICMldSIsIGJsb2Nr
SW5kZXgpOwogICAgIH0KICAgICAKLSAgICB2b2lkIHJlcG9ydFZhbGlkYXRpb25Db250ZXh0KE5v
ZGVJbmRleCBub2RlSW5kZXgsIEVkZ2UgZWRnZSkKKyAgICB2b2lkIHJlcG9ydFZhbGlkYXRpb25D
b250ZXh0KE5vZGUqIG5vZGUsIEVkZ2UgZWRnZSkKICAgICB7Ci0gICAgICAgIGRhdGFMb2dGKCJA
JXUgLT4gJXNAJXUiLCBub2RlSW5kZXgsIHVzZUtpbmRUb1N0cmluZyhlZGdlLnVzZUtpbmQoKSks
IGVkZ2UuaW5kZXgoKSk7CisgICAgICAgIGRhdGFMb2dGKCJAJXUgLT4gJXNAJXUiLCBub2RlLT5p
bmRleCgpLCB1c2VLaW5kVG9TdHJpbmcoZWRnZS51c2VLaW5kKCkpLCBlZGdlLmluZGV4KCkpOwog
ICAgIH0KICAgICAKICAgICB2b2lkIHJlcG9ydFZhbGlkYXRpb25Db250ZXh0KFZpcnR1YWxSZWdp
c3RlciBsb2NhbCwgQmxvY2tJbmRleCBibG9ja0luZGV4KQpAQCAtMzIyLDI3ICszMTcsMjcgQEAg
cHJpdmF0ZToKICAgICB9CiAgICAgCiAgICAgdm9pZCByZXBvcnRWYWxpZGF0aW9uQ29udGV4dCgK
LSAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGxvY2FsLCBCbG9ja0luZGV4IHNvdXJjZUJsb2NrSW5k
ZXgsIE5vZGVJbmRleCBwcmV2Tm9kZUluZGV4KQorICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgbG9j
YWwsIEJsb2NrSW5kZXggc291cmNlQmxvY2tJbmRleCwgTm9kZSogcHJldk5vZGUpCiAgICAgewot
ICAgICAgICBkYXRhTG9nRigiQCV1IGZvciByJWQgaW4gQmxvY2sgIyV1IiwgcHJldk5vZGVJbmRl
eCwgbG9jYWwsIHNvdXJjZUJsb2NrSW5kZXgpOworICAgICAgICBkYXRhTG9nRigiQCV1IGZvciBy
JWQgaW4gQmxvY2sgIyV1IiwgcHJldk5vZGUtPmluZGV4KCksIGxvY2FsLCBzb3VyY2VCbG9ja0lu
ZGV4KTsKICAgICB9CiAgICAgCiAgICAgdm9pZCByZXBvcnRWYWxpZGF0aW9uQ29udGV4dCgKLSAg
ICAgICAgTm9kZUluZGV4IG5vZGVJbmRleCwgQmxvY2tJbmRleCBibG9ja0luZGV4KQorICAgICAg
ICBOb2RlKiBub2RlLCBCbG9ja0luZGV4IGJsb2NrSW5kZXgpCiAgICAgewotICAgICAgICBkYXRh
TG9nRigiQCV1IGluIEJsb2NrICMldSIsIG5vZGVJbmRleCwgYmxvY2tJbmRleCk7CisgICAgICAg
IGRhdGFMb2dGKCJAJXUgaW4gQmxvY2sgIyV1Iiwgbm9kZS0+aW5kZXgoKSwgYmxvY2tJbmRleCk7
CiAgICAgfQogICAgIAogICAgIHZvaWQgcmVwb3J0VmFsaWRhdGlvbkNvbnRleHQoCi0gICAgICAg
IE5vZGVJbmRleCBub2RlSW5kZXgsIE5vZGVJbmRleCBub2RlSW5kZXgyLCBCbG9ja0luZGV4IGJs
b2NrSW5kZXgpCisgICAgICAgIE5vZGUqIG5vZGUsIE5vZGUqIG5vZGUyLCBCbG9ja0luZGV4IGJs
b2NrSW5kZXgpCiAgICAgewotICAgICAgICBkYXRhTG9nRigiQCV1IGFuZCBAJXUgaW4gQmxvY2sg
IyV1Iiwgbm9kZUluZGV4LCBub2RlSW5kZXgyLCBibG9ja0luZGV4KTsKKyAgICAgICAgZGF0YUxv
Z0YoIkAldSBhbmQgQCV1IGluIEJsb2NrICMldSIsIG5vZGUtPmluZGV4KCksIG5vZGUyLT5pbmRl
eCgpLCBibG9ja0luZGV4KTsKICAgICB9CiAgICAgCiAgICAgdm9pZCByZXBvcnRWYWxpZGF0aW9u
Q29udGV4dCgKLSAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRleCwgQmxvY2tJbmRleCBibG9ja0lu
ZGV4LCBOb2RlSW5kZXggZXhwZWN0ZWROb2RlSW5kZXgsIEVkZ2UgaW5jb21pbmdFZGdlKQorICAg
ICAgICBOb2RlKiBub2RlLCBCbG9ja0luZGV4IGJsb2NrSW5kZXgsIE5vZGUqIGV4cGVjdGVkTm9k
ZSwgRWRnZSBpbmNvbWluZ0VkZ2UpCiAgICAgewotICAgICAgICBkYXRhTG9nRigiQCV1IGluIEJs
b2NrICMldSwgc2VhcmNoaW5nIGZvciBAJXUgZnJvbSBAJXUiLCBub2RlSW5kZXgsIGJsb2NrSW5k
ZXgsIGV4cGVjdGVkTm9kZUluZGV4LCBpbmNvbWluZ0VkZ2UuaW5kZXgoKSk7CisgICAgICAgIGRh
dGFMb2dGKCJAJXUgaW4gQmxvY2sgIyV1LCBzZWFyY2hpbmcgZm9yIEAldSBmcm9tIEAldSIsIG5v
ZGUtPmluZGV4KCksIGJsb2NrSW5kZXgsIGV4cGVjdGVkTm9kZS0+aW5kZXgoKSwgaW5jb21pbmdF
ZGdlLmluZGV4KCkpOwogICAgIH0KICAgICAKICAgICB2b2lkIGR1bXBEYXRhKHVuc2lnbmVkIHZh
bHVlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25FeGVjdXRh
YmxlRHVtcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
RnVuY3Rpb25FeGVjdXRhYmxlRHVtcC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9GdW5jdGlvbkV4ZWN1dGFibGVEdW1wLmNwcAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSwzNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRnVuY3Rpb25FeGVjdXRhYmxl
RHVtcC5oIgorCituYW1lc3BhY2UgSlNDIHsKKwordm9pZCBGdW5jdGlvbkV4ZWN1dGFibGVEdW1w
OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KG1fZXhlY3V0
YWJsZS0+aW5mZXJyZWROYW1lKCkuc3RyaW5nKCksICIjIiwgbV9leGVjdXRhYmxlLT5oYXNoRm9y
KENvZGVGb3JDYWxsKSwgIi8iLCBtX2V4ZWN1dGFibGUtPmhhc2hGb3IoQ29kZUZvckNvbnN0cnVj
dCksICI6WyIsIFJhd1BvaW50ZXIobV9leGVjdXRhYmxlKSwgIl0iKTsKK30KKworfSAvLyBuYW1l
c3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9u
RXhlY3V0YWJsZUR1bXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9GdW5jdGlvbkV4ZWN1dGFibGVEdW1wLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvbkV4ZWN1dGFibGVEdW1wLmgJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsNDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2lmbmRlZiBGdW5jdGlvbkV4ZWN1dGFibGVEdW1wX2gKKyNkZWZpbmUgRnVuY3Rp
b25FeGVjdXRhYmxlRHVtcF9oCisKKyNpbmNsdWRlICJFeGVjdXRhYmxlLmgiCisjaW5jbHVkZSA8
d3RmL1ByaW50U3RyZWFtLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBGdW5jdGlvbkV4
ZWN1dGFibGVEdW1wIHsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBGdW5jdGlvbkV4ZWN1dGFibGVE
dW1wKEZ1bmN0aW9uRXhlY3V0YWJsZSogZXhlY3V0YWJsZSkKKyAgICAgICAgOiBtX2V4ZWN1dGFi
bGUoZXhlY3V0YWJsZSkKKyAgICB7CisgICAgfQorICAgIAorICAgIHZvaWQgZHVtcChQcmludFN0
cmVhbSYpIGNvbnN0OworcHJpdmF0ZToKKyAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIG1fZXhlY3V0
YWJsZTsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gRnVuY3Rpb25FeGVj
dXRhYmxlRHVtcF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xv
YmFsRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNHbG9iYWxEYXRhLmNwcAkocmV2aXNpb24gMTQwNTA0KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIs
NyBAQAogI2luY2x1ZGUgIkFyZ0xpc3QuaCIKICNpbmNsdWRlICJDb2RlQ2FjaGUuaCIKICNpbmNs
dWRlICJDb21tb25JZGVudGlmaWVycy5oIgorI2luY2x1ZGUgIkRGR0xvbmdMaXZlZFN0YXRlLmgi
CiAjaW5jbHVkZSAiRGVidWdnZXJBY3RpdmF0aW9uLmgiCiAjaW5jbHVkZSAiRnVuY3Rpb25Db25z
dHJ1Y3Rvci5oIgogI2luY2x1ZGUgIkdDQWN0aXZpdHlDYWxsYmFjay5oIgpAQCAtMjUxLDYgKzI1
MiwxMSBAQCBKU0dsb2JhbERhdGE6OkpTR2xvYmFsRGF0YShHbG9iYWxEYXRhVHlwCiAgICAgCiAg
ICAgaWYgKE9wdGlvbnM6OmVuYWJsZVByb2ZpbGVyKCkpCiAgICAgICAgIG1fcGVyQnl0ZWNvZGVQ
cm9maWxlciA9IGFkb3B0UHRyKG5ldyBQcm9maWxlcjo6RGF0YWJhc2UoKnRoaXMpKTsKKworI2lm
IEVOQUJMRShERkdfSklUKQorICAgIGlmIChjYW5Vc2VKSVQoKSkKKyAgICAgICAgbV9kZmdTdGF0
ZSA9IGFkb3B0UHRyKG5ldyBERkc6OkxvbmdMaXZlZFN0YXRlKCkpOworI2VuZGlmCiB9CiAKIEpT
R2xvYmFsRGF0YTo6fkpTR2xvYmFsRGF0YSgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0dsb2JhbERhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0dsb2JhbERhdGEuaAkocmV2aXNpb24gMTQwNTA0KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTkx
LDYgKzkxLDEyIEBAIG5hbWVzcGFjZSBKU0MgewogICAgIGNsYXNzIFVubGlua2VkRnVuY3Rpb25F
eGVjdXRhYmxlOwogICAgIGNsYXNzIFVubGlua2VkUHJvZ3JhbUNvZGVCbG9jazsKIAorI2lmIEVO
QUJMRShERkdfSklUKQorICAgIG5hbWVzcGFjZSBERkcgeworICAgIGNsYXNzIExvbmdMaXZlZFN0
YXRlOworICAgIH0KKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwogICAgIHN0cnVjdCBIYXNo
VGFibGU7CiAgICAgc3RydWN0IEluc3RydWN0aW9uOwogCkBAIC0xODksNiArMTk1LDEwIEBAIG5h
bWVzcGFjZSBKU0MgewogICAgICAgICAvLyBUaGUgaGVhcCBzaG91bGQgYmUganVzdCBhZnRlciBl
eGVjdXRhYmxlQWxsb2NhdG9yIGFuZCBiZWZvcmUgb3RoZXIgbWVtYmVycyB0byBlbnN1cmUgdGhh
dCBpdCdzCiAgICAgICAgIC8vIGRlc3RydWN0ZWQgYWZ0ZXIgYWxsIHRoZSBvYmplY3RzIHRoYXQg
cmVmZXJlbmNlIGl0LgogICAgICAgICBIZWFwIGhlYXA7CisgICAgICAgIAorI2lmIEVOQUJMRShE
RkdfSklUKQorICAgICAgICBPd25QdHI8REZHOjpMb25nTGl2ZWRTdGF0ZT4gbV9kZmdTdGF0ZTsK
KyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKIAogICAgICAgICBHbG9iYWxEYXRhVHlwZSBnbG9i
YWxEYXRhVHlwZTsKICAgICAgICAgQ2xpZW50RGF0YSogY2xpZW50RGF0YTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>184356</attachid>
            <date>2013-01-23 17:01:53 -0800</date>
            <delta_ts>2013-01-24 12:58:54 -0800</delta_ts>
            <desc>work in progress</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>470232</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmNw
cAkocmV2aXNpb24gMTQwNTY3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0
cmFjdFN0YXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTEsIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDExLCAyMDEyLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtODcsMjEgKzg3LDIxIEBA
IHZvaWQgQWJzdHJhY3RTdGF0ZTo6aW5pdGlhbGl6ZShHcmFwaCYgZ3IKICAgICByb290LT5jZmFI
YXNWaXNpdGVkID0gZmFsc2U7CiAgICAgcm9vdC0+Y2ZhRm91bmRDb25zdGFudHMgPSBmYWxzZTsK
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHJvb3QtPnZhbHVlc0F0SGVhZC5udW1iZXJPZkFy
Z3VtZW50cygpOyArK2kpIHsKLSAgICAgICAgTm9kZSYgbm9kZSA9IGdyYXBoW3Jvb3QtPnZhcmlh
Ymxlc0F0SGVhZC5hcmd1bWVudChpKV07Ci0gICAgICAgIEFTU0VSVChub2RlLm9wKCkgPT0gU2V0
QXJndW1lbnQpOwotICAgICAgICBpZiAoIW5vZGUuc2hvdWxkR2VuZXJhdGUoKSkgeworICAgICAg
ICBOb2RlKiBub2RlID0gcm9vdC0+dmFyaWFibGVzQXRIZWFkLmFyZ3VtZW50KGkpOworICAgICAg
ICBBU1NFUlQobm9kZS0+b3AoKSA9PSBTZXRBcmd1bWVudCk7CisgICAgICAgIGlmICghbm9kZS0+
c2hvdWxkR2VuZXJhdGUoKSkgewogICAgICAgICAgICAgLy8gVGhlIGFyZ3VtZW50IGlzIGRlYWQu
IFdlIGRvbid0IGRvIGFueSBjaGVja3MgZm9yIHN1Y2ggYXJndW1lbnRzLCBhbmQgc28KICAgICAg
ICAgICAgIC8vIGZvciB0aGUgcHVycG9zZSBvZiB0aGUgYW5hbHlzaXMsIHRoZXkgY29udGFpbiBu
byB2YWx1ZS4KICAgICAgICAgICAgIHJvb3QtPnZhbHVlc0F0SGVhZC5hcmd1bWVudChpKS5jbGVh
cigpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAg
IGlmIChub2RlLnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5pc0NhcHR1cmVkKCkpIHsKKyAgICAgICAg
aWYgKG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5pc0NhcHR1cmVkKCkpIHsKICAgICAgICAg
ICAgIHJvb3QtPnZhbHVlc0F0SGVhZC5hcmd1bWVudChpKS5tYWtlVG9wKCk7CiAgICAgICAgICAg
ICBjb250aW51ZTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgU3BlY3VsYXRlZFR5cGUg
cHJlZGljdGlvbiA9IG5vZGUudmFyaWFibGVBY2Nlc3NEYXRhKCktPnByZWRpY3Rpb24oKTsKKyAg
ICAgICAgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0
YSgpLT5wcmVkaWN0aW9uKCk7CiAgICAgICAgIGlmIChpc0ludDMyU3BlY3VsYXRpb24ocHJlZGlj
dGlvbikpCiAgICAgICAgICAgICByb290LT52YWx1ZXNBdEhlYWQuYXJndW1lbnQoaSkuc2V0KFNw
ZWNJbnQzMik7CiAgICAgICAgIGVsc2UgaWYgKGlzQm9vbGVhblNwZWN1bGF0aW9uKHByZWRpY3Rp
b24pKQpAQCAtMTE0LDggKzExNCw4IEBAIHZvaWQgQWJzdHJhY3RTdGF0ZTo6aW5pdGlhbGl6ZShH
cmFwaCYgZ3IKICAgICAgICAgcm9vdC0+dmFsdWVzQXRUYWlsLmFyZ3VtZW50KGkpLmNsZWFyKCk7
CiAgICAgfQogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcm9vdC0+dmFsdWVzQXRIZWFkLm51
bWJlck9mTG9jYWxzKCk7ICsraSkgewotICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4ID0gcm9v
dC0+dmFyaWFibGVzQXRIZWFkLmxvY2FsKGkpOwotICAgICAgICBpZiAobm9kZUluZGV4ICE9IE5v
Tm9kZSAmJiBncmFwaFtub2RlSW5kZXhdLnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5pc0NhcHR1cmVk
KCkpCisgICAgICAgIE5vZGUqIG5vZGUgPSByb290LT52YXJpYWJsZXNBdEhlYWQubG9jYWwoaSk7
CisgICAgICAgIGlmIChub2RlICYmIG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5pc0NhcHR1
cmVkKCkpCiAgICAgICAgICAgICByb290LT52YWx1ZXNBdEhlYWQubG9jYWwoaSkubWFrZVRvcCgp
OwogICAgICAgICBlbHNlCiAgICAgICAgICAgICByb290LT52YWx1ZXNBdEhlYWQubG9jYWwoaSku
Y2xlYXIoKTsKQEAgLTIxMywxMSArMjEzLDExIEBAIHZvaWQgQWJzdHJhY3RTdGF0ZTo6cmVzZXQo
KQogICAgIG1fYnJhbmNoRGlyZWN0aW9uID0gSW52YWxpZEJyYW5jaERpcmVjdGlvbjsKIH0KIAot
QWJzdHJhY3RTdGF0ZTo6Qm9vbGVhblJlc3VsdCBBYnN0cmFjdFN0YXRlOjpib29sZWFuUmVzdWx0
KE5vZGUmIG5vZGUsIEFic3RyYWN0VmFsdWUmIHZhbHVlKQorQWJzdHJhY3RTdGF0ZTo6Qm9vbGVh
blJlc3VsdCBBYnN0cmFjdFN0YXRlOjpib29sZWFuUmVzdWx0KE5vZGUqIG5vZGUsIEFic3RyYWN0
VmFsdWUmIHZhbHVlKQogewogICAgIEpTVmFsdWUgY2hpbGRDb25zdCA9IHZhbHVlLnZhbHVlKCk7
CiAgICAgaWYgKGNoaWxkQ29uc3QpIHsKLSAgICAgICAgaWYgKGNoaWxkQ29uc3QudG9Cb29sZWFu
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3RGb3Iobm9kZS5jb2RlT3JpZ2luKS0+Z2xvYmFsRXhl
YygpKSkKKyAgICAgICAgaWYgKGNoaWxkQ29uc3QudG9Cb29sZWFuKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3RGb3Iobm9kZS0+Y29kZU9yaWdpbiktPmdsb2JhbEV4ZWMoKSkpCiAgICAgICAgICAg
ICByZXR1cm4gRGVmaW5pdGVseVRydWU7CiAgICAgICAgIHJldHVybiBEZWZpbml0ZWx5RmFsc2U7
CiAgICAgfQpAQCAtMjI2LDcgKzIyNiw3IEBAIEFic3RyYWN0U3RhdGU6OkJvb2xlYW5SZXN1bHQg
QWJzdHJhY3RTdGEKICAgICBpZiAoaXNDZWxsU3BlY3VsYXRpb24odmFsdWUubV90eXBlKQogICAg
ICAgICAmJiB2YWx1ZS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5oYXNTaW5nbGV0b24oKSkgewog
ICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHZhbHVlLm1fY3VycmVudEtub3duU3RydWN0
dXJlLnNpbmdsZXRvbigpOwotICAgICAgICBpZiAoIXN0cnVjdHVyZS0+bWFzcXVlcmFkZXNBc1Vu
ZGVmaW5lZChtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0Rm9yKG5vZGUuY29kZU9yaWdpbikpCisg
ICAgICAgIGlmICghc3RydWN0dXJlLT5tYXNxdWVyYWRlc0FzVW5kZWZpbmVkKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3RGb3Iobm9kZS0+Y29kZU9yaWdpbikpCiAgICAgICAgICAgICAmJiBzdHJ1
Y3R1cmUtPnR5cGVJbmZvKCkudHlwZSgpICE9IFN0cmluZ1R5cGUpCiAgICAgICAgICAgICByZXR1
cm4gRGVmaW5pdGVseVRydWU7CiAgICAgfQpAQCAtMjQxLDMyICsyNDEsMzEgQEAgYm9vbCBBYnN0
cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgIAogICAgIG1fZGlkQ2xvYmJlciA9
IGZhbHNlOwogICAgIAotICAgIE5vZGVJbmRleCBub2RlSW5kZXggPSBtX2Jsb2NrLT5hdChpbmRl
eEluQmxvY2spOwotICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW25vZGVJbmRleF07CisgICAgTm9k
ZSogbm9kZSA9IG1fYmxvY2stPmF0KGluZGV4SW5CbG9jayk7CiAgICAgICAgIAotICAgIGlmICgh
bm9kZS5zaG91bGRHZW5lcmF0ZSgpKQorICAgIGlmICghbm9kZS0+c2hvdWxkR2VuZXJhdGUoKSkK
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIAotICAgIHN3aXRjaCAobm9kZS5vcCgpKSB7
CisgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CiAgICAgY2FzZSBKU0NvbnN0YW50OgogICAgIGNh
c2UgV2Vha0pTQ29uc3RhbnQ6CiAgICAgY2FzZSBQaGFudG9tQXJndW1lbnRzOiB7Ci0gICAgICAg
IGZvck5vZGUobm9kZUluZGV4KS5zZXQobV9ncmFwaC52YWx1ZU9mSlNDb25zdGFudChub2RlSW5k
ZXgpKTsKLSAgICAgICAgbm9kZS5zZXRDYW5FeGl0KGZhbHNlKTsKKyAgICAgICAgZm9yTm9kZShu
b2RlKS5zZXQobV9ncmFwaC52YWx1ZU9mSlNDb25zdGFudChub2RlKSk7CisgICAgICAgIG5vZGUt
PnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIAogICAg
IGNhc2UgSWRlbnRpdHk6IHsKLSAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpID0gZm9yTm9kZShu
b2RlLmNoaWxkMSgpKTsKLSAgICAgICAgbm9kZS5zZXRDYW5FeGl0KGZhbHNlKTsKKyAgICAgICAg
Zm9yTm9kZShub2RlKSA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBub2RlLT5z
ZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAgICAgCiAg
ICAgY2FzZSBHZXRMb2NhbDogewotICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxl
QWNjZXNzRGF0YSA9IG5vZGUudmFyaWFibGVBY2Nlc3NEYXRhKCk7CisgICAgICAgIFZhcmlhYmxl
QWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRh
KCk7CiAgICAgICAgIGlmICh2YXJpYWJsZUFjY2Vzc0RhdGEtPnByZWRpY3Rpb24oKSA9PSBTcGVj
Tm9uZSkgewogICAgICAgICAgICAgbV9pc1ZhbGlkID0gZmFsc2U7Ci0gICAgICAgICAgICBub2Rl
LnNldENhbkV4aXQodHJ1ZSk7CisgICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgYm9vbCBjYW5FeGl0ID0gZmFs
c2U7CkBAIC0yNzcsNTMgKzI3Niw1MyBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5z
aWduZWQgaW5kCiAgICAgICAgIH0KICAgICAgICAgaWYgKHZhbHVlLnZhbHVlKCkpCiAgICAgICAg
ICAgICBtX2ZvdW5kQ29uc3RhbnRzID0gdHJ1ZTsKLSAgICAgICAgZm9yTm9kZShub2RlSW5kZXgp
ID0gdmFsdWU7Ci0gICAgICAgIG5vZGUuc2V0Q2FuRXhpdChjYW5FeGl0KTsKKyAgICAgICAgZm9y
Tm9kZShub2RlKSA9IHZhbHVlOworICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGNhbkV4aXQpOwog
ICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgR2V0TG9jYWxVbmxpbmtl
ZDogewotICAgICAgICBBYnN0cmFjdFZhbHVlIHZhbHVlID0gbV92YXJpYWJsZXMub3BlcmFuZChu
b2RlLnVubGlua2VkTG9jYWwoKSk7CisgICAgICAgIEFic3RyYWN0VmFsdWUgdmFsdWUgPSBtX3Zh
cmlhYmxlcy5vcGVyYW5kKG5vZGUtPnVubGlua2VkTG9jYWwoKSk7CiAgICAgICAgIGlmICh2YWx1
ZS52YWx1ZSgpKQogICAgICAgICAgICAgbV9mb3VuZENvbnN0YW50cyA9IHRydWU7Ci0gICAgICAg
IGZvck5vZGUobm9kZUluZGV4KSA9IHZhbHVlOwotICAgICAgICBub2RlLnNldENhbkV4aXQoZmFs
c2UpOworICAgICAgICBmb3JOb2RlKG5vZGUpID0gdmFsdWU7CisgICAgICAgIG5vZGUtPnNldENh
bkV4aXQoZmFsc2UpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIAogICAgIGNhc2Ug
U2V0TG9jYWw6IHsKLSAgICAgICAgaWYgKG5vZGUudmFyaWFibGVBY2Nlc3NEYXRhKCktPmlzQ2Fw
dHVyZWQoKQotICAgICAgICAgICAgfHwgbV9ncmFwaC5pc0NyZWF0ZWRUaGlzQXJndW1lbnQobm9k
ZS5sb2NhbCgpKSkgewotICAgICAgICAgICAgbV92YXJpYWJsZXMub3BlcmFuZChub2RlLmxvY2Fs
KCkpID0gZm9yTm9kZShub2RlLmNoaWxkMSgpKTsKLSAgICAgICAgICAgIG5vZGUuc2V0Q2FuRXhp
dChmYWxzZSk7CisgICAgICAgIGlmIChub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+aXNDYXB0
dXJlZCgpCisgICAgICAgICAgICB8fCBtX2dyYXBoLmlzQ3JlYXRlZFRoaXNBcmd1bWVudChub2Rl
LT5sb2NhbCgpKSkgeworICAgICAgICAgICAgbV92YXJpYWJsZXMub3BlcmFuZChub2RlLT5sb2Nh
bCgpKSA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgbm9kZS0+c2V0Q2Fu
RXhpdChmYWxzZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAKLSAg
ICAgICAgaWYgKG5vZGUudmFyaWFibGVBY2Nlc3NEYXRhKCktPnNob3VsZFVzZURvdWJsZUZvcm1h
dCgpKSB7CisgICAgICAgIGlmIChub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+c2hvdWxkVXNl
RG91YmxlRm9ybWF0KCkpIHsKICAgICAgICAgICAgIHNwZWN1bGF0ZU51bWJlclVuYXJ5KG5vZGUp
OwotICAgICAgICAgICAgbV92YXJpYWJsZXMub3BlcmFuZChub2RlLmxvY2FsKCkpLnNldChTcGVj
RG91YmxlKTsKKyAgICAgICAgICAgIG1fdmFyaWFibGVzLm9wZXJhbmQobm9kZS0+bG9jYWwoKSku
c2V0KFNwZWNEb3VibGUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAg
Ci0gICAgICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3RlZFR5cGUgPSBub2RlLnZhcmlhYmxlQWNj
ZXNzRGF0YSgpLT5hcmd1bWVudEF3YXJlUHJlZGljdGlvbigpOworICAgICAgICBTcGVjdWxhdGVk
VHlwZSBwcmVkaWN0ZWRUeXBlID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCktPmFyZ3VtZW50
QXdhcmVQcmVkaWN0aW9uKCk7CiAgICAgICAgIGlmIChpc0ludDMyU3BlY3VsYXRpb24ocHJlZGlj
dGVkVHlwZSkpCiAgICAgICAgICAgICBzcGVjdWxhdGVJbnQzMlVuYXJ5KG5vZGUpOwogICAgICAg
ICBlbHNlIGlmIChpc0NlbGxTcGVjdWxhdGlvbihwcmVkaWN0ZWRUeXBlKSkgewotICAgICAgICAg
ICAgbm9kZS5zZXRDYW5FeGl0KCFpc0NlbGxTcGVjdWxhdGlvbihmb3JOb2RlKG5vZGUuY2hpbGQx
KCkpLm1fdHlwZSkpOwotICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIo
U3BlY0NlbGwpOworICAgICAgICAgICAgbm9kZS5zZXRDYW5FeGl0KCFpc0NlbGxTcGVjdWxhdGlv
bihmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX3R5cGUpKTsKKyAgICAgICAgICAgIGZvck5vZGUo
bm9kZS0+Y2hpbGQxKCkpLmZpbHRlcihTcGVjQ2VsbCk7CiAgICAgICAgIH0gZWxzZSBpZiAoaXNC
b29sZWFuU3BlY3VsYXRpb24ocHJlZGljdGVkVHlwZSkpCiAgICAgICAgICAgICBzcGVjdWxhdGVC
b29sZWFuVW5hcnkobm9kZSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIG5vZGUuc2V0Q2Fu
RXhpdChmYWxzZSk7CisgICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAg
ICAgCi0gICAgICAgIG1fdmFyaWFibGVzLm9wZXJhbmQobm9kZS5sb2NhbCgpKSA9IGZvck5vZGUo
bm9kZS5jaGlsZDEoKSk7CisgICAgICAgIG1fdmFyaWFibGVzLm9wZXJhbmQobm9kZS0+bG9jYWwo
KSkgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAg
ICAgICAgICAgCiAgICAgY2FzZSBTZXRBcmd1bWVudDoKICAgICAgICAgLy8gQXNzZXJ0IHRoYXQg
dGhlIHN0YXRlIG9mIGFyZ3VtZW50cyBoYXMgYmVlbiBzZXQuCi0gICAgICAgIEFTU0VSVCghbV9i
bG9jay0+dmFsdWVzQXRIZWFkLm9wZXJhbmQobm9kZS5sb2NhbCgpKS5pc0NsZWFyKCkpOwotICAg
ICAgICBub2RlLnNldENhbkV4aXQoZmFsc2UpOworICAgICAgICBBU1NFUlQoIW1fYmxvY2stPnZh
bHVlc0F0SGVhZC5vcGVyYW5kKG5vZGUtPmxvY2FsKCkpLmlzQ2xlYXIoKSk7CisgICAgICAgIG5v
ZGUtPnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAg
IGNhc2UgQml0QW5kOgpAQCAtMzMyLDMwICszMzEsMzAgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpl
eGVjdXRlKHVuc2lnbmVkIGluZAogICAgIGNhc2UgQml0UlNoaWZ0OgogICAgIGNhc2UgQml0TFNo
aWZ0OgogICAgIGNhc2UgQml0VVJTaGlmdDogewotICAgICAgICBKU1ZhbHVlIGxlZnQgPSBmb3JO
b2RlKG5vZGUuY2hpbGQxKCkpLnZhbHVlKCk7Ci0gICAgICAgIEpTVmFsdWUgcmlnaHQgPSBmb3JO
b2RlKG5vZGUuY2hpbGQyKCkpLnZhbHVlKCk7CisgICAgICAgIEpTVmFsdWUgbGVmdCA9IGZvck5v
ZGUobm9kZS0+Y2hpbGQxKCkpLnZhbHVlKCk7CisgICAgICAgIEpTVmFsdWUgcmlnaHQgPSBmb3JO
b2RlKG5vZGUtPmNoaWxkMigpKS52YWx1ZSgpOwogICAgICAgICBpZiAobGVmdCAmJiByaWdodCAm
JiBsZWZ0LmlzSW50MzIoKSAmJiByaWdodC5pc0ludDMyKCkpIHsKICAgICAgICAgICAgIGludDMy
X3QgYSA9IGxlZnQuYXNJbnQzMigpOwogICAgICAgICAgICAgaW50MzJfdCBiID0gcmlnaHQuYXNJ
bnQzMigpOwogICAgICAgICAgICAgYm9vbCBjb25zdGFudFdhc1NldDsKICAgICAgICAgICAgIHN3
aXRjaCAobm9kZS5vcCgpKSB7CiAgICAgICAgICAgICBjYXNlIEJpdEFuZDoKLSAgICAgICAgICAg
ICAgICBjb25zdGFudFdhc1NldCA9IHRyeVNldENvbnN0YW50KG5vZGVJbmRleCwgSlNWYWx1ZShh
ICYgYikpOworICAgICAgICAgICAgICAgIGNvbnN0YW50V2FzU2V0ID0gdHJ5U2V0Q29uc3RhbnQo
bm9kZSwgSlNWYWx1ZShhICYgYikpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgY2FzZSBCaXRPcjoKLSAgICAgICAgICAgICAgICBjb25zdGFudFdhc1NldCA9IHRyeVNldENv
bnN0YW50KG5vZGVJbmRleCwgSlNWYWx1ZShhIHwgYikpOworICAgICAgICAgICAgICAgIGNvbnN0
YW50V2FzU2V0ID0gdHJ5U2V0Q29uc3RhbnQobm9kZSwgSlNWYWx1ZShhIHwgYikpOwogICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBCaXRYb3I6Ci0gICAgICAgICAgICAg
ICAgY29uc3RhbnRXYXNTZXQgPSB0cnlTZXRDb25zdGFudChub2RlSW5kZXgsIEpTVmFsdWUoYSBe
IGIpKTsKKyAgICAgICAgICAgICAgICBjb25zdGFudFdhc1NldCA9IHRyeVNldENvbnN0YW50KG5v
ZGUsIEpTVmFsdWUoYSBeIGIpKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
IGNhc2UgQml0UlNoaWZ0OgotICAgICAgICAgICAgICAgIGNvbnN0YW50V2FzU2V0ID0gdHJ5U2V0
Q29uc3RhbnQobm9kZUluZGV4LCBKU1ZhbHVlKGEgPj4gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGIp
KSk7CisgICAgICAgICAgICAgICAgY29uc3RhbnRXYXNTZXQgPSB0cnlTZXRDb25zdGFudChub2Rl
LCBKU1ZhbHVlKGEgPj4gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGIpKSk7CiAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIEJpdExTaGlmdDoKLSAgICAgICAgICAgICAgICBj
b25zdGFudFdhc1NldCA9IHRyeVNldENvbnN0YW50KG5vZGVJbmRleCwgSlNWYWx1ZShhIDw8IHN0
YXRpY19jYXN0PHVpbnQzMl90PihiKSkpOworICAgICAgICAgICAgICAgIGNvbnN0YW50V2FzU2V0
ID0gdHJ5U2V0Q29uc3RhbnQobm9kZSwgSlNWYWx1ZShhIDw8IHN0YXRpY19jYXN0PHVpbnQzMl90
PihiKSkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBCaXRVUlNo
aWZ0OgotICAgICAgICAgICAgICAgIGNvbnN0YW50V2FzU2V0ID0gdHJ5U2V0Q29uc3RhbnQobm9k
ZUluZGV4LCBKU1ZhbHVlKHN0YXRpY19jYXN0PHVpbnQzMl90PihhKSA+PiBzdGF0aWNfY2FzdDx1
aW50MzJfdD4oYikpKTsKKyAgICAgICAgICAgICAgICBjb25zdGFudFdhc1NldCA9IHRyeVNldENv
bnN0YW50KG5vZGUsIEpTVmFsdWUoc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGEpID4+IHN0YXRpY19j
YXN0PHVpbnQzMl90PihiKSkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
ZGVmYXVsdDoKICAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTM2Mywx
OTkgKzM2MiwxOTkgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAog
ICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKGNvbnN0YW50V2FzU2V0KSB7CiAgICAgICAg
ICAgICAgICAgbV9mb3VuZENvbnN0YW50cyA9IHRydWU7Ci0gICAgICAgICAgICAgICAgbm9kZS5z
ZXRDYW5FeGl0KGZhbHNlKTsKKyAgICAgICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNl
KTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAg
ICAgICBzcGVjdWxhdGVJbnQzMkJpbmFyeShub2RlKTsKLSAgICAgICAgZm9yTm9kZShub2RlSW5k
ZXgpLnNldChTcGVjSW50MzIpOworICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjSW50MzIp
OwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgVUludDMyVG9OdW1i
ZXI6IHsKLSAgICAgICAgSlNWYWx1ZSBjaGlsZCA9IGZvck5vZGUobm9kZS5jaGlsZDEoKSkudmFs
dWUoKTsKKyAgICAgICAgSlNWYWx1ZSBjaGlsZCA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLnZh
bHVlKCk7CiAgICAgICAgIGlmIChjaGlsZCAmJiBjaGlsZC5pc051bWJlcigpKSB7CiAgICAgICAg
ICAgICBBU1NFUlQoY2hpbGQuaXNJbnQzMigpKTsKLSAgICAgICAgICAgIGlmICh0cnlTZXRDb25z
dGFudChub2RlSW5kZXgsIEpTVmFsdWUoY2hpbGQuYXNVSW50MzIoKSkpKSB7CisgICAgICAgICAg
ICBpZiAodHJ5U2V0Q29uc3RhbnQobm9kZSwgSlNWYWx1ZShjaGlsZC5hc1VJbnQzMigpKSkpIHsK
ICAgICAgICAgICAgICAgICBtX2ZvdW5kQ29uc3RhbnRzID0gdHJ1ZTsKLSAgICAgICAgICAgICAg
ICBub2RlLnNldENhbkV4aXQoZmFsc2UpOworICAgICAgICAgICAgICAgIG5vZGUtPnNldENhbkV4
aXQoZmFsc2UpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAg
ICB9Ci0gICAgICAgIGlmICghbm9kZS5jYW5TcGVjdWxhdGVJbnRlZ2VyKCkpIHsKLSAgICAgICAg
ICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoU3BlY0RvdWJsZSk7Ci0gICAgICAgICAgICBub2Rl
LnNldENhbkV4aXQoZmFsc2UpOworICAgICAgICBpZiAoIW5vZGUtPmNhblNwZWN1bGF0ZUludGVn
ZXIoKSkgeworICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0RvdWJsZSk7CisgICAg
ICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoU3BlY0ludDMyKTsKLSAgICAgICAgICAgIG5v
ZGUuc2V0Q2FuRXhpdCh0cnVlKTsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNJ
bnQzMik7CisgICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOwogICAgICAgICB9CiAg
ICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAKICAgICBj
YXNlIERvdWJsZUFzSW50MzI6IHsKLSAgICAgICAgSlNWYWx1ZSBjaGlsZCA9IGZvck5vZGUobm9k
ZS5jaGlsZDEoKSkudmFsdWUoKTsKKyAgICAgICAgSlNWYWx1ZSBjaGlsZCA9IGZvck5vZGUobm9k
ZS0+Y2hpbGQxKCkpLnZhbHVlKCk7CiAgICAgICAgIGlmIChjaGlsZCAmJiBjaGlsZC5pc051bWJl
cigpKSB7CiAgICAgICAgICAgICBkb3VibGUgYXNEb3VibGUgPSBjaGlsZC5hc051bWJlcigpOwog
ICAgICAgICAgICAgaW50MzJfdCBhc0ludCA9IEpTQzo6dG9JbnQzMihhc0RvdWJsZSk7CiAgICAg
ICAgICAgICBpZiAoYml0d2lzZV9jYXN0PGludDY0X3Q+KHN0YXRpY19jYXN0PGRvdWJsZT4oYXNJ
bnQpKSA9PSBiaXR3aXNlX2Nhc3Q8aW50NjRfdD4oYXNEb3VibGUpCi0gICAgICAgICAgICAgICAg
JiYgdHJ5U2V0Q29uc3RhbnQobm9kZUluZGV4LCBKU1ZhbHVlKGFzSW50KSkpIHsKKyAgICAgICAg
ICAgICAgICAmJiB0cnlTZXRDb25zdGFudChub2RlLCBKU1ZhbHVlKGFzSW50KSkpIHsKICAgICAg
ICAgICAgICAgICBtX2ZvdW5kQ29uc3RhbnRzID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICBub2RlLnNldENhbkV4aXQodHJ1
ZSk7Ci0gICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNOdW1iZXIpOwot
ICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFNwZWNJbnQzMik7CisgICAgICAgIG5vZGUt
PnNldENhbkV4aXQodHJ1ZSk7CisgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRl
cihTcGVjTnVtYmVyKTsKKyAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0ludDMyKTsKICAg
ICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAgICAgCiAgICAgY2FzZSBWYWx1ZVRvSW50MzI6
IHsKLSAgICAgICAgSlNWYWx1ZSBjaGlsZCA9IGZvck5vZGUobm9kZS5jaGlsZDEoKSkudmFsdWUo
KTsKKyAgICAgICAgSlNWYWx1ZSBjaGlsZCA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLnZhbHVl
KCk7CiAgICAgICAgIGlmIChjaGlsZCAmJiBjaGlsZC5pc051bWJlcigpKSB7CiAgICAgICAgICAg
ICBib29sIGNvbnN0YW50V2FzU2V0OwogICAgICAgICAgICAgaWYgKGNoaWxkLmlzSW50MzIoKSkK
LSAgICAgICAgICAgICAgICBjb25zdGFudFdhc1NldCA9IHRyeVNldENvbnN0YW50KG5vZGVJbmRl
eCwgY2hpbGQpOworICAgICAgICAgICAgICAgIGNvbnN0YW50V2FzU2V0ID0gdHJ5U2V0Q29uc3Rh
bnQobm9kZSwgY2hpbGQpOwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGNvbnN0
YW50V2FzU2V0ID0gdHJ5U2V0Q29uc3RhbnQobm9kZUluZGV4LCBKU1ZhbHVlKEpTQzo6dG9JbnQz
MihjaGlsZC5hc0RvdWJsZSgpKSkpOworICAgICAgICAgICAgICAgIGNvbnN0YW50V2FzU2V0ID0g
dHJ5U2V0Q29uc3RhbnQobm9kZSwgSlNWYWx1ZShKU0M6OnRvSW50MzIoY2hpbGQuYXNEb3VibGUo
KSkpKTsKICAgICAgICAgICAgIGlmIChjb25zdGFudFdhc1NldCkgewogICAgICAgICAgICAgICAg
IG1fZm91bmRDb25zdGFudHMgPSB0cnVlOwotICAgICAgICAgICAgICAgIG5vZGUuc2V0Q2FuRXhp
dChmYWxzZSk7CisgICAgICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CiAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgaWYg
KG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0uc2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKQorICAgICAg
ICBpZiAobV9ncmFwaFtub2RlLT5jaGlsZDEoKV0uc2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKQog
ICAgICAgICAgICAgc3BlY3VsYXRlSW50MzJVbmFyeShub2RlKTsKLSAgICAgICAgZWxzZSBpZiAo
bV9ncmFwaFtub2RlLmNoaWxkMSgpXS5zaG91bGRTcGVjdWxhdGVOdW1iZXIoKSkKKyAgICAgICAg
ZWxzZSBpZiAobV9ncmFwaFtub2RlLT5jaGlsZDEoKV0uc2hvdWxkU3BlY3VsYXRlTnVtYmVyKCkp
CiAgICAgICAgICAgICBzcGVjdWxhdGVOdW1iZXJVbmFyeShub2RlKTsKLSAgICAgICAgZWxzZSBp
ZiAobV9ncmFwaFtub2RlLmNoaWxkMSgpXS5zaG91bGRTcGVjdWxhdGVCb29sZWFuKCkpCisgICAg
ICAgIGVsc2UgaWYgKG1fZ3JhcGhbbm9kZS0+Y2hpbGQxKCldLnNob3VsZFNwZWN1bGF0ZUJvb2xl
YW4oKSkKICAgICAgICAgICAgIHNwZWN1bGF0ZUJvb2xlYW5VbmFyeShub2RlKTsKICAgICAgICAg
ZWxzZQotICAgICAgICAgICAgbm9kZS5zZXRDYW5FeGl0KGZhbHNlKTsKKyAgICAgICAgICAgIG5v
ZGUtPnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICAKLSAgICAgICAgZm9yTm9kZShub2RlSW5k
ZXgpLnNldChTcGVjSW50MzIpOworICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjSW50MzIp
OwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgSW50MzJUb0RvdWJs
ZTogewotICAgICAgICBKU1ZhbHVlIGNoaWxkID0gZm9yTm9kZShub2RlLmNoaWxkMSgpKS52YWx1
ZSgpOworICAgICAgICBKU1ZhbHVlIGNoaWxkID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSkudmFs
dWUoKTsKICAgICAgICAgaWYgKGNoaWxkICYmIGNoaWxkLmlzTnVtYmVyKCkKLSAgICAgICAgICAg
ICYmIHRyeVNldENvbnN0YW50KG5vZGVJbmRleCwgSlNWYWx1ZShKU1ZhbHVlOjpFbmNvZGVBc0Rv
dWJsZSwgY2hpbGQuYXNOdW1iZXIoKSkpKSB7CisgICAgICAgICAgICAmJiB0cnlTZXRDb25zdGFu
dChub2RlLCBKU1ZhbHVlKEpTVmFsdWU6OkVuY29kZUFzRG91YmxlLCBjaGlsZC5hc051bWJlcigp
KSkpIHsKICAgICAgICAgICAgIG1fZm91bmRDb25zdGFudHMgPSB0cnVlOwotICAgICAgICAgICAg
bm9kZS5zZXRDYW5FeGl0KGZhbHNlKTsKKyAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFs
c2UpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgc3BlY3VsYXRlTnVt
YmVyVW5hcnkobm9kZSk7Ci0gICAgICAgIGlmIChpc0ludDMyU3BlY3VsYXRpb24oZm9yTm9kZShu
b2RlLmNoaWxkMSgpKS5tX3R5cGUpKQotICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNl
dChTcGVjRG91YmxlUmVhbCk7CisgICAgICAgIGlmIChpc0ludDMyU3BlY3VsYXRpb24oZm9yTm9k
ZShub2RlLT5jaGlsZDEoKSkubV90eXBlKSkKKyAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0
KFNwZWNEb3VibGVSZWFsKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgZm9yTm9kZShub2Rl
SW5kZXgpLnNldChTcGVjRG91YmxlKTsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNw
ZWNEb3VibGUpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgQ2hl
Y2tOdW1iZXI6Ci0gICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNOdW1i
ZXIpOworICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5maWx0ZXIoU3BlY051bWJlcik7
CiAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAgY2FzZSBWYWx1ZUFkZDoKICAgICBj
YXNlIEFyaXRoQWRkOiB7Ci0gICAgICAgIEpTVmFsdWUgbGVmdCA9IGZvck5vZGUobm9kZS5jaGls
ZDEoKSkudmFsdWUoKTsKLSAgICAgICAgSlNWYWx1ZSByaWdodCA9IGZvck5vZGUobm9kZS5jaGls
ZDIoKSkudmFsdWUoKTsKKyAgICAgICAgSlNWYWx1ZSBsZWZ0ID0gZm9yTm9kZShub2RlLT5jaGls
ZDEoKSkudmFsdWUoKTsKKyAgICAgICAgSlNWYWx1ZSByaWdodCA9IGZvck5vZGUobm9kZS0+Y2hp
bGQyKCkpLnZhbHVlKCk7CiAgICAgICAgIGlmIChsZWZ0ICYmIHJpZ2h0ICYmIGxlZnQuaXNOdW1i
ZXIoKSAmJiByaWdodC5pc051bWJlcigpCi0gICAgICAgICAgICAmJiB0cnlTZXRDb25zdGFudChu
b2RlSW5kZXgsIEpTVmFsdWUobGVmdC5hc051bWJlcigpICsgcmlnaHQuYXNOdW1iZXIoKSkpKSB7
CisgICAgICAgICAgICAmJiB0cnlTZXRDb25zdGFudChub2RlLCBKU1ZhbHVlKGxlZnQuYXNOdW1i
ZXIoKSArIHJpZ2h0LmFzTnVtYmVyKCkpKSkgewogICAgICAgICAgICAgbV9mb3VuZENvbnN0YW50
cyA9IHRydWU7CiAgICAgICAgICAgICBub2RlLnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgaWYgKG1fZ3JhcGguYWRkU2hvdWxkU3BlY3Vs
YXRlSW50ZWdlcihub2RlKSkgewogICAgICAgICAgICAgc3BlY3VsYXRlSW50MzJCaW5hcnkoCi0g
ICAgICAgICAgICAgICAgbm9kZSwgIW5vZGVDYW5UcnVuY2F0ZUludGVnZXIobm9kZS5hcml0aE5v
ZGVGbGFncygpKSk7Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFNwZWNJbnQz
Mik7CisgICAgICAgICAgICAgICAgbm9kZSwgIW5vZGVDYW5UcnVuY2F0ZUludGVnZXIobm9kZS0+
YXJpdGhOb2RlRmxhZ3MoKSkpOworICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0lu
dDMyKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIGlmIChOb2RlOjpz
aG91bGRTcGVjdWxhdGVOdW1iZXJFeHBlY3RpbmdEZWZpbmVkKG1fZ3JhcGhbbm9kZS5jaGlsZDEo
KV0sIG1fZ3JhcGhbbm9kZS5jaGlsZDIoKV0pKSB7CisgICAgICAgIGlmIChOb2RlOjpzaG91bGRT
cGVjdWxhdGVOdW1iZXJFeHBlY3RpbmdEZWZpbmVkKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgbm9k
ZS0+Y2hpbGQyKCkubm9kZSgpKSkgewogICAgICAgICAgICAgc3BlY3VsYXRlTnVtYmVyQmluYXJ5
KG5vZGUpOwotICAgICAgICAgICAgaWYgKGlzUmVhbE51bWJlclNwZWN1bGF0aW9uKGZvck5vZGUo
bm9kZS5jaGlsZDEoKSkubV90eXBlKQotICAgICAgICAgICAgICAgICYmIGlzUmVhbE51bWJlclNw
ZWN1bGF0aW9uKGZvck5vZGUobm9kZS5jaGlsZDIoKSkubV90eXBlKSkKLSAgICAgICAgICAgICAg
ICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFNwZWNEb3VibGVSZWFsKTsKKyAgICAgICAgICAgIGlm
IChpc1JlYWxOdW1iZXJTcGVjdWxhdGlvbihmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX3R5cGUp
CisgICAgICAgICAgICAgICAgJiYgaXNSZWFsTnVtYmVyU3BlY3VsYXRpb24oZm9yTm9kZShub2Rl
LT5jaGlsZDIoKSkubV90eXBlKSkKKyAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChT
cGVjRG91YmxlUmVhbCk7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZm9yTm9k
ZShub2RlSW5kZXgpLnNldChTcGVjRG91YmxlKTsKKyAgICAgICAgICAgICAgICBmb3JOb2RlKG5v
ZGUpLnNldChTcGVjRG91YmxlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAg
ICAgIGlmIChub2RlLm9wKCkgPT0gVmFsdWVBZGQpIHsKLSAgICAgICAgICAgIGNsb2JiZXJXb3Js
ZChub2RlLmNvZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7Ci0gICAgICAgICAgICBmb3JOb2RlKG5v
ZGVJbmRleCkuc2V0KFNwZWNTdHJpbmcgfCBTcGVjSW50MzIgfCBTcGVjTnVtYmVyKTsKLSAgICAg
ICAgICAgIG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7CisgICAgICAgIGlmIChub2RlLT5vcCgpID09
IFZhbHVlQWRkKSB7CisgICAgICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+Y29kZU9yaWdpbiwg
aW5kZXhJbkJsb2NrKTsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNTdHJpbmcg
fCBTcGVjSW50MzIgfCBTcGVjTnVtYmVyKTsKKyAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQo
ZmFsc2UpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgLy8gV2UgZG9u
J3QgaGFuZGxlIHRoaXMgeWV0LiA6LSgKICAgICAgICAgbV9pc1ZhbGlkID0gZmFsc2U7Ci0gICAg
ICAgIG5vZGUuc2V0Q2FuRXhpdCh0cnVlKTsKKyAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVl
KTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAgICAgCiAgICAgY2FzZSBBcml0aFN1
YjogewotICAgICAgICBKU1ZhbHVlIGxlZnQgPSBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLnZhbHVl
KCk7Ci0gICAgICAgIEpTVmFsdWUgcmlnaHQgPSBmb3JOb2RlKG5vZGUuY2hpbGQyKCkpLnZhbHVl
KCk7CisgICAgICAgIEpTVmFsdWUgbGVmdCA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLnZhbHVl
KCk7CisgICAgICAgIEpTVmFsdWUgcmlnaHQgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMigpKS52YWx1
ZSgpOwogICAgICAgICBpZiAobGVmdCAmJiByaWdodCAmJiBsZWZ0LmlzTnVtYmVyKCkgJiYgcmln
aHQuaXNOdW1iZXIoKQotICAgICAgICAgICAgJiYgdHJ5U2V0Q29uc3RhbnQobm9kZUluZGV4LCBK
U1ZhbHVlKGxlZnQuYXNOdW1iZXIoKSAtIHJpZ2h0LmFzTnVtYmVyKCkpKSkgeworICAgICAgICAg
ICAgJiYgdHJ5U2V0Q29uc3RhbnQobm9kZSwgSlNWYWx1ZShsZWZ0LmFzTnVtYmVyKCkgLSByaWdo
dC5hc051bWJlcigpKSkpIHsKICAgICAgICAgICAgIG1fZm91bmRDb25zdGFudHMgPSB0cnVlOwot
ICAgICAgICAgICAgbm9kZS5zZXRDYW5FeGl0KGZhbHNlKTsKKyAgICAgICAgICAgIG5vZGUtPnNl
dENhbkV4aXQoZmFsc2UpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAg
aWYgKG1fZ3JhcGguYWRkU2hvdWxkU3BlY3VsYXRlSW50ZWdlcihub2RlKSkgewogICAgICAgICAg
ICAgc3BlY3VsYXRlSW50MzJCaW5hcnkoCi0gICAgICAgICAgICAgICAgbm9kZSwgIW5vZGVDYW5U
cnVuY2F0ZUludGVnZXIobm9kZS5hcml0aE5vZGVGbGFncygpKSk7Ci0gICAgICAgICAgICBmb3JO
b2RlKG5vZGVJbmRleCkuc2V0KFNwZWNJbnQzMik7CisgICAgICAgICAgICAgICAgbm9kZSwgIW5v
ZGVDYW5UcnVuY2F0ZUludGVnZXIobm9kZS0+YXJpdGhOb2RlRmxhZ3MoKSkpOworICAgICAgICAg
ICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICB9CiAgICAgICAgIHNwZWN1bGF0ZU51bWJlckJpbmFyeShub2RlKTsKLSAgICAgICAgZm9y
Tm9kZShub2RlSW5kZXgpLnNldChTcGVjRG91YmxlKTsKKyAgICAgICAgZm9yTm9kZShub2RlKS5z
ZXQoU3BlY0RvdWJsZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCiAgICAgY2Fz
ZSBBcml0aE5lZ2F0ZTogewotICAgICAgICBKU1ZhbHVlIGNoaWxkID0gZm9yTm9kZShub2RlLmNo
aWxkMSgpKS52YWx1ZSgpOworICAgICAgICBKU1ZhbHVlIGNoaWxkID0gZm9yTm9kZShub2RlLT5j
aGlsZDEoKSkudmFsdWUoKTsKICAgICAgICAgaWYgKGNoaWxkICYmIGNoaWxkLmlzTnVtYmVyKCkK
LSAgICAgICAgICAgICYmIHRyeVNldENvbnN0YW50KG5vZGVJbmRleCwgSlNWYWx1ZSgtY2hpbGQu
YXNOdW1iZXIoKSkpKSB7CisgICAgICAgICAgICAmJiB0cnlTZXRDb25zdGFudChub2RlLCBKU1Zh
bHVlKC1jaGlsZC5hc051bWJlcigpKSkpIHsKICAgICAgICAgICAgIG1fZm91bmRDb25zdGFudHMg
PSB0cnVlOwotICAgICAgICAgICAgbm9kZS5zZXRDYW5FeGl0KGZhbHNlKTsKKyAgICAgICAgICAg
IG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0K
ICAgICAgICAgaWYgKG1fZ3JhcGgubmVnYXRlU2hvdWxkU3BlY3VsYXRlSW50ZWdlcihub2RlKSkg
ewogICAgICAgICAgICAgc3BlY3VsYXRlSW50MzJVbmFyeSgKLSAgICAgICAgICAgICAgICBub2Rl
LCAhbm9kZUNhblRydW5jYXRlSW50ZWdlcihub2RlLmFyaXRoTm9kZUZsYWdzKCkpKTsKLSAgICAg
ICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoU3BlY0ludDMyKTsKKyAgICAgICAgICAgICAg
ICBub2RlLCAhbm9kZUNhblRydW5jYXRlSW50ZWdlcihub2RlLT5hcml0aE5vZGVGbGFncygpKSk7
CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjSW50MzIpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgc3BlY3VsYXRlTnVtYmVyVW5hcnkobm9kZSk7Ci0g
ICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoU3BlY0RvdWJsZSk7CisgICAgICAgIGZvck5v
ZGUobm9kZSkuc2V0KFNwZWNEb3VibGUpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAg
IAogICAgIGNhc2UgQXJpdGhNdWw6IHsKLSAgICAgICAgSlNWYWx1ZSBsZWZ0ID0gZm9yTm9kZShu
b2RlLmNoaWxkMSgpKS52YWx1ZSgpOwotICAgICAgICBKU1ZhbHVlIHJpZ2h0ID0gZm9yTm9kZShu
b2RlLmNoaWxkMigpKS52YWx1ZSgpOworICAgICAgICBKU1ZhbHVlIGxlZnQgPSBmb3JOb2RlKG5v
ZGUtPmNoaWxkMSgpKS52YWx1ZSgpOworICAgICAgICBKU1ZhbHVlIHJpZ2h0ID0gZm9yTm9kZShu
b2RlLT5jaGlsZDIoKSkudmFsdWUoKTsKICAgICAgICAgaWYgKGxlZnQgJiYgcmlnaHQgJiYgbGVm
dC5pc051bWJlcigpICYmIHJpZ2h0LmlzTnVtYmVyKCkKLSAgICAgICAgICAgICYmIHRyeVNldENv
bnN0YW50KG5vZGVJbmRleCwgSlNWYWx1ZShsZWZ0LmFzTnVtYmVyKCkgKiByaWdodC5hc051bWJl
cigpKSkpIHsKKyAgICAgICAgICAgICYmIHRyeVNldENvbnN0YW50KG5vZGUsIEpTVmFsdWUobGVm
dC5hc051bWJlcigpICogcmlnaHQuYXNOdW1iZXIoKSkpKSB7CiAgICAgICAgICAgICBtX2ZvdW5k
Q29uc3RhbnRzID0gdHJ1ZTsKLSAgICAgICAgICAgIG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7Cisg
ICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICB9CiAgICAgICAgIGlmIChtX2dyYXBoLm11bFNob3VsZFNwZWN1bGF0ZUludGVnZXIo
bm9kZSkpIHsKICAgICAgICAgICAgIHNwZWN1bGF0ZUludDMyQmluYXJ5KAogICAgICAgICAgICAg
ICAgIG5vZGUsCi0gICAgICAgICAgICAgICAgIW5vZGVDYW5UcnVuY2F0ZUludGVnZXIobm9kZS5h
cml0aE5vZGVGbGFncygpKQotICAgICAgICAgICAgICAgIHx8ICFub2RlQ2FuSWdub3JlTmVnYXRp
dmVaZXJvKG5vZGUuYXJpdGhOb2RlRmxhZ3MoKSkpOwotICAgICAgICAgICAgZm9yTm9kZShub2Rl
SW5kZXgpLnNldChTcGVjSW50MzIpOworICAgICAgICAgICAgICAgICFub2RlQ2FuVHJ1bmNhdGVJ
bnRlZ2VyKG5vZGUtPmFyaXRoTm9kZUZsYWdzKCkpCisgICAgICAgICAgICAgICAgfHwgIW5vZGVD
YW5JZ25vcmVOZWdhdGl2ZVplcm8obm9kZS0+YXJpdGhOb2RlRmxhZ3MoKSkpOworICAgICAgICAg
ICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICB9CiAgICAgICAgIHNwZWN1bGF0ZU51bWJlckJpbmFyeShub2RlKTsKLSAgICAgICAgaWYg
KGlzUmVhbE51bWJlclNwZWN1bGF0aW9uKGZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKQot
ICAgICAgICAgICAgfHwgaXNSZWFsTnVtYmVyU3BlY3VsYXRpb24oZm9yTm9kZShub2RlLmNoaWxk
MigpKS5tX3R5cGUpKQotICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChTcGVjRG91
YmxlUmVhbCk7CisgICAgICAgIGlmIChpc1JlYWxOdW1iZXJTcGVjdWxhdGlvbihmb3JOb2RlKG5v
ZGUtPmNoaWxkMSgpKS5tX3R5cGUpCisgICAgICAgICAgICB8fCBpc1JlYWxOdW1iZXJTcGVjdWxh
dGlvbihmb3JOb2RlKG5vZGUtPmNoaWxkMigpKS5tX3R5cGUpKQorICAgICAgICAgICAgZm9yTm9k
ZShub2RlKS5zZXQoU3BlY0RvdWJsZVJlYWwpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBm
b3JOb2RlKG5vZGVJbmRleCkuc2V0KFNwZWNEb3VibGUpOworICAgICAgICAgICAgZm9yTm9kZShu
b2RlKS5zZXQoU3BlY0RvdWJsZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCkBA
IC01NjMsMjQgKzU2MiwyNCBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQg
aW5kCiAgICAgY2FzZSBBcml0aE1pbjoKICAgICBjYXNlIEFyaXRoTWF4OgogICAgIGNhc2UgQXJp
dGhNb2Q6IHsKLSAgICAgICAgSlNWYWx1ZSBsZWZ0ID0gZm9yTm9kZShub2RlLmNoaWxkMSgpKS52
YWx1ZSgpOwotICAgICAgICBKU1ZhbHVlIHJpZ2h0ID0gZm9yTm9kZShub2RlLmNoaWxkMigpKS52
YWx1ZSgpOworICAgICAgICBKU1ZhbHVlIGxlZnQgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS52
YWx1ZSgpOworICAgICAgICBKU1ZhbHVlIHJpZ2h0ID0gZm9yTm9kZShub2RlLT5jaGlsZDIoKSku
dmFsdWUoKTsKICAgICAgICAgaWYgKGxlZnQgJiYgcmlnaHQgJiYgbGVmdC5pc051bWJlcigpICYm
IHJpZ2h0LmlzTnVtYmVyKCkpIHsKICAgICAgICAgICAgIGRvdWJsZSBhID0gbGVmdC5hc051bWJl
cigpOwogICAgICAgICAgICAgZG91YmxlIGIgPSByaWdodC5hc051bWJlcigpOwogICAgICAgICAg
ICAgYm9vbCBjb25zdGFudFdhc1NldDsKICAgICAgICAgICAgIHN3aXRjaCAobm9kZS5vcCgpKSB7
CiAgICAgICAgICAgICBjYXNlIEFyaXRoRGl2OgotICAgICAgICAgICAgICAgIGNvbnN0YW50V2Fz
U2V0ID0gdHJ5U2V0Q29uc3RhbnQobm9kZUluZGV4LCBKU1ZhbHVlKGEgLyBiKSk7CisgICAgICAg
ICAgICAgICAgY29uc3RhbnRXYXNTZXQgPSB0cnlTZXRDb25zdGFudChub2RlLCBKU1ZhbHVlKGEg
LyBiKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIEFyaXRoTWlu
OgotICAgICAgICAgICAgICAgIGNvbnN0YW50V2FzU2V0ID0gdHJ5U2V0Q29uc3RhbnQobm9kZUlu
ZGV4LCBKU1ZhbHVlKGEgPCBiID8gYSA6IChiIDw9IGEgPyBiIDogYSArIGIpKSk7CisgICAgICAg
ICAgICAgICAgY29uc3RhbnRXYXNTZXQgPSB0cnlTZXRDb25zdGFudChub2RlLCBKU1ZhbHVlKGEg
PCBiID8gYSA6IChiIDw9IGEgPyBiIDogYSArIGIpKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICBjYXNlIEFyaXRoTWF4OgotICAgICAgICAgICAgICAgIGNvbnN0YW50V2Fz
U2V0ID0gdHJ5U2V0Q29uc3RhbnQobm9kZUluZGV4LCBKU1ZhbHVlKGEgPiBiID8gYSA6IChiID49
IGEgPyBiIDogYSArIGIpKSk7CisgICAgICAgICAgICAgICAgY29uc3RhbnRXYXNTZXQgPSB0cnlT
ZXRDb25zdGFudChub2RlLCBKU1ZhbHVlKGEgPiBiID8gYSA6IChiID49IGEgPyBiIDogYSArIGIp
KSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIEFyaXRoTW9kOgot
ICAgICAgICAgICAgICAgIGNvbnN0YW50V2FzU2V0ID0gdHJ5U2V0Q29uc3RhbnQobm9kZUluZGV4
LCBKU1ZhbHVlKGZtb2QoYSwgYikpKTsKKyAgICAgICAgICAgICAgICBjb25zdGFudFdhc1NldCA9
IHRyeVNldENvbnN0YW50KG5vZGUsIEpTVmFsdWUoZm1vZChhLCBiKSkpOwogICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKQEAgLTU4OSw4NCArNTg4LDg0IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6
ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChjb25z
dGFudFdhc1NldCkgewogICAgICAgICAgICAgICAgIG1fZm91bmRDb25zdGFudHMgPSB0cnVlOwot
ICAgICAgICAgICAgICAgIG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7CisgICAgICAgICAgICAgICAg
bm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICB9CiAgICAgICAgIH0KICAgICAgICAgaWYgKE5vZGU6OnNob3VsZFNwZWN1bGF0ZUludGVn
ZXJGb3JBcml0aG1ldGljKAotICAgICAgICAgICAgICAgIG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0s
IG1fZ3JhcGhbbm9kZS5jaGlsZDIoKV0pCi0gICAgICAgICAgICAmJiBub2RlLmNhblNwZWN1bGF0
ZUludGVnZXIoKSkgeworICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgbm9k
ZS0+Y2hpbGQyKCkubm9kZSgpKQorICAgICAgICAgICAgJiYgbm9kZS0+Y2FuU3BlY3VsYXRlSW50
ZWdlcigpKSB7CiAgICAgICAgICAgICBzcGVjdWxhdGVJbnQzMkJpbmFyeShub2RlLCB0cnVlKTsg
Ly8gZm9yY2luZyBjYW4tZXhpdCwgd2hpY2ggaXMgYSBiaXQgb24gdGhlIGNvbnNlcnZhdGl2ZSBz
aWRlLgotICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChTcGVjSW50MzIpOworICAg
ICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9CiAgICAgICAgIHNwZWN1bGF0ZU51bWJlckJpbmFyeShub2RlKTsKLSAgICAg
ICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChTcGVjRG91YmxlKTsKKyAgICAgICAgZm9yTm9kZShu
b2RlKS5zZXQoU3BlY0RvdWJsZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgICAg
IAogICAgIGNhc2UgQXJpdGhBYnM6IHsKLSAgICAgICAgSlNWYWx1ZSBjaGlsZCA9IGZvck5vZGUo
bm9kZS5jaGlsZDEoKSkudmFsdWUoKTsKKyAgICAgICAgSlNWYWx1ZSBjaGlsZCA9IGZvck5vZGUo
bm9kZS0+Y2hpbGQxKCkpLnZhbHVlKCk7CiAgICAgICAgIGlmIChjaGlsZCAmJiBjaGlsZC5pc051
bWJlcigpCi0gICAgICAgICAgICAmJiB0cnlTZXRDb25zdGFudChub2RlSW5kZXgsIEpTVmFsdWUo
ZmFicyhjaGlsZC5hc051bWJlcigpKSkpKSB7CisgICAgICAgICAgICAmJiB0cnlTZXRDb25zdGFu
dChub2RlLCBKU1ZhbHVlKGZhYnMoY2hpbGQuYXNOdW1iZXIoKSkpKSkgewogICAgICAgICAgICAg
bV9mb3VuZENvbnN0YW50cyA9IHRydWU7Ci0gICAgICAgICAgICBub2RlLnNldENhbkV4aXQoZmFs
c2UpOworICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQotICAgICAgICBpZiAobV9ncmFwaFtub2RlLmNoaWxkMSgpXS5zaG91
bGRTcGVjdWxhdGVJbnRlZ2VyRm9yQXJpdGhtZXRpYygpCi0gICAgICAgICAgICAmJiBub2RlLmNh
blNwZWN1bGF0ZUludGVnZXIoKSkgeworICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3Vs
ZFNwZWN1bGF0ZUludGVnZXJGb3JBcml0aG1ldGljKCkKKyAgICAgICAgICAgICYmIG5vZGUtPmNh
blNwZWN1bGF0ZUludGVnZXIoKSkgewogICAgICAgICAgICAgc3BlY3VsYXRlSW50MzJVbmFyeShu
b2RlLCB0cnVlKTsKLSAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoU3BlY0ludDMy
KTsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNJbnQzMik7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgfQogICAgICAgICBzcGVjdWxhdGVOdW1iZXJVbmFyeShub2RlKTsK
LSAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChTcGVjRG91YmxlKTsKKyAgICAgICAgZm9y
Tm9kZShub2RlKS5zZXQoU3BlY0RvdWJsZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAg
ICAgICAgIAogICAgIGNhc2UgQXJpdGhTcXJ0OiB7Ci0gICAgICAgIEpTVmFsdWUgY2hpbGQgPSBm
b3JOb2RlKG5vZGUuY2hpbGQxKCkpLnZhbHVlKCk7CisgICAgICAgIEpTVmFsdWUgY2hpbGQgPSBm
b3JOb2RlKG5vZGUtPmNoaWxkMSgpKS52YWx1ZSgpOwogICAgICAgICBpZiAoY2hpbGQgJiYgY2hp
bGQuaXNOdW1iZXIoKQotICAgICAgICAgICAgJiYgdHJ5U2V0Q29uc3RhbnQobm9kZUluZGV4LCBK
U1ZhbHVlKHNxcnQoY2hpbGQuYXNOdW1iZXIoKSkpKSkgeworICAgICAgICAgICAgJiYgdHJ5U2V0
Q29uc3RhbnQobm9kZSwgSlNWYWx1ZShzcXJ0KGNoaWxkLmFzTnVtYmVyKCkpKSkpIHsKICAgICAg
ICAgICAgIG1fZm91bmRDb25zdGFudHMgPSB0cnVlOwotICAgICAgICAgICAgbm9kZS5zZXRDYW5F
eGl0KGZhbHNlKTsKKyAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgc3BlY3VsYXRlTnVtYmVyVW5hcnkobm9k
ZSk7Ci0gICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoU3BlY0RvdWJsZSk7CisgICAgICAg
IGZvck5vZGUobm9kZSkuc2V0KFNwZWNEb3VibGUpOwogICAgICAgICBicmVhazsKICAgICB9CiAg
ICAgICAgICAgICAKICAgICBjYXNlIExvZ2ljYWxOb3Q6IHsKICAgICAgICAgYm9vbCBkaWRTZXRD
b25zdGFudCA9IGZhbHNlOwotICAgICAgICBzd2l0Y2ggKGJvb2xlYW5SZXN1bHQobm9kZSwgZm9y
Tm9kZShub2RlLmNoaWxkMSgpKSkpIHsKKyAgICAgICAgc3dpdGNoIChib29sZWFuUmVzdWx0KG5v
ZGUsIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpKSkgewogICAgICAgICBjYXNlIERlZmluaXRlbHlU
cnVlOgotICAgICAgICAgICAgZGlkU2V0Q29uc3RhbnQgPSB0cnlTZXRDb25zdGFudChub2RlSW5k
ZXgsIGpzQm9vbGVhbihmYWxzZSkpOworICAgICAgICAgICAgZGlkU2V0Q29uc3RhbnQgPSB0cnlT
ZXRDb25zdGFudChub2RlLCBqc0Jvb2xlYW4oZmFsc2UpKTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICBjYXNlIERlZmluaXRlbHlGYWxzZToKLSAgICAgICAgICAgIGRpZFNldENvbnN0YW50
ID0gdHJ5U2V0Q29uc3RhbnQobm9kZUluZGV4LCBqc0Jvb2xlYW4odHJ1ZSkpOworICAgICAgICAg
ICAgZGlkU2V0Q29uc3RhbnQgPSB0cnlTZXRDb25zdGFudChub2RlLCBqc0Jvb2xlYW4odHJ1ZSkp
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgfQogICAgICAgICBpZiAoZGlkU2V0Q29uc3RhbnQpIHsKICAgICAgICAgICAg
IG1fZm91bmRDb25zdGFudHMgPSB0cnVlOwotICAgICAgICAgICAgbm9kZS5zZXRDYW5FeGl0KGZh
bHNlKTsKKyAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgTm9kZSYgY2hpbGQgPSBtX2dyYXBoW25vZGUuY2hp
bGQxKCldOwotICAgICAgICBpZiAoaXNCb29sZWFuU3BlY3VsYXRpb24oY2hpbGQucHJlZGljdGlv
bigpKSkKKyAgICAgICAgTm9kZSogY2hpbGQgPSBub2RlLT5jaGlsZDEoKS5ub2RlKCk7CisgICAg
ICAgIGlmIChpc0Jvb2xlYW5TcGVjdWxhdGlvbihjaGlsZC0+cHJlZGljdGlvbigpKSkKICAgICAg
ICAgICAgIHNwZWN1bGF0ZUJvb2xlYW5VbmFyeShub2RlKTsKLSAgICAgICAgZWxzZSBpZiAoY2hp
bGQuc2hvdWxkU3BlY3VsYXRlTm9uU3RyaW5nQ2VsbE9yT3RoZXIoKSkgewotICAgICAgICAgICAg
bm9kZS5zZXRDYW5FeGl0KHRydWUpOwotICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgp
KS5maWx0ZXIoKFNwZWNDZWxsICYgflNwZWNTdHJpbmcpIHwgU3BlY090aGVyKTsKLSAgICAgICAg
fSBlbHNlIGlmIChjaGlsZC5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpCisgICAgICAgIGVsc2Ug
aWYgKGNoaWxkLT5zaG91bGRTcGVjdWxhdGVOb25TdHJpbmdDZWxsT3JPdGhlcigpKSB7CisgICAg
ICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOworICAgICAgICAgICAgZm9yTm9kZShjaGls
ZCkuZmlsdGVyKChTcGVjQ2VsbCAmIH5TcGVjU3RyaW5nKSB8IFNwZWNPdGhlcik7CisgICAgICAg
IH0gZWxzZSBpZiAoY2hpbGQtPnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKSkKICAgICAgICAgICAg
IHNwZWN1bGF0ZUludDMyVW5hcnkobm9kZSk7Ci0gICAgICAgIGVsc2UgaWYgKGNoaWxkLnNob3Vs
ZFNwZWN1bGF0ZU51bWJlcigpKQorICAgICAgICBlbHNlIGlmIChjaGlsZC0+c2hvdWxkU3BlY3Vs
YXRlTnVtYmVyKCkpCiAgICAgICAgICAgICBzcGVjdWxhdGVOdW1iZXJVbmFyeShub2RlKTsKICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgbm9kZS5zZXRDYW5FeGl0KGZhbHNlKTsKLSAgICAgICAg
Zm9yTm9kZShub2RlSW5kZXgpLnNldChTcGVjQm9vbGVhbik7CisgICAgICAgICAgICBub2RlLT5z
ZXRDYW5FeGl0KGZhbHNlKTsKKyAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0Jvb2xlYW4p
OwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIApAQCAtNjc2LDM2ICs2NzUsMzYgQEAg
Ym9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgIGNhc2UgSXNTdHJp
bmc6CiAgICAgY2FzZSBJc09iamVjdDoKICAgICBjYXNlIElzRnVuY3Rpb246IHsKLSAgICAgICAg
bm9kZS5zZXRDYW5FeGl0KG5vZGUub3AoKSA9PSBJc1VuZGVmaW5lZCAmJiBtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0Rm9yKG5vZGUuY29kZU9yaWdpbiktPm1hc3F1ZXJhZGVzQXNVbmRlZmluZWRX
YXRjaHBvaW50KCktPmlzU3RpbGxWYWxpZCgpKTsKLSAgICAgICAgSlNWYWx1ZSBjaGlsZCA9IGZv
ck5vZGUobm9kZS5jaGlsZDEoKSkudmFsdWUoKTsKKyAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChu
b2RlLT5vcCgpID09IElzVW5kZWZpbmVkICYmIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3RGb3Io
bm9kZS0+Y29kZU9yaWdpbiktPm1hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50KCktPmlz
U3RpbGxWYWxpZCgpKTsKKyAgICAgICAgSlNWYWx1ZSBjaGlsZCA9IGZvck5vZGUobm9kZS0+Y2hp
bGQxKCkpLnZhbHVlKCk7CiAgICAgICAgIGlmIChjaGlsZCkgewogICAgICAgICAgICAgYm9vbCBj
b25zdGFudFdhc1NldDsKLSAgICAgICAgICAgIHN3aXRjaCAobm9kZS5vcCgpKSB7CisgICAgICAg
ICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKICAgICAgICAgICAgIGNhc2UgSXNVbmRlZmluZWQ6
Ci0gICAgICAgICAgICAgICAgaWYgKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3RGb3Iobm9kZS5j
b2RlT3JpZ2luKS0+bWFzcXVlcmFkZXNBc1VuZGVmaW5lZFdhdGNocG9pbnQoKS0+aXNTdGlsbFZh
bGlkKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgY29uc3RhbnRXYXNTZXQgPSB0cnlTZXRDb25z
dGFudChub2RlSW5kZXgsIGpzQm9vbGVhbigKKyAgICAgICAgICAgICAgICBpZiAobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdEZvcihub2RlLT5jb2RlT3JpZ2luKS0+bWFzcXVlcmFkZXNBc1VuZGVm
aW5lZFdhdGNocG9pbnQoKS0+aXNTdGlsbFZhbGlkKCkpIHsKKyAgICAgICAgICAgICAgICAgICAg
Y29uc3RhbnRXYXNTZXQgPSB0cnlTZXRDb25zdGFudChub2RlLCBqc0Jvb2xlYW4oCiAgICAgICAg
ICAgICAgICAgICAgICAgICBjaGlsZC5pc0NlbGwoKQogICAgICAgICAgICAgICAgICAgICAgICAg
PyBmYWxzZSAKICAgICAgICAgICAgICAgICAgICAgICAgIDogY2hpbGQuaXNVbmRlZmluZWQoKSkp
OwogICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnN0YW50
V2FzU2V0ID0gdHJ5U2V0Q29uc3RhbnQobm9kZUluZGV4LCBqc0Jvb2xlYW4oCisgICAgICAgICAg
ICAgICAgICAgIGNvbnN0YW50V2FzU2V0ID0gdHJ5U2V0Q29uc3RhbnQobm9kZSwganNCb29sZWFu
KAogICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGQuaXNDZWxsKCkKLSAgICAgICAgICAgICAg
ICAgICAgICAgID8gY2hpbGQuYXNDZWxsKCktPnN0cnVjdHVyZSgpLT5tYXNxdWVyYWRlc0FzVW5k
ZWZpbmVkKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3RGb3Iobm9kZS5jb2RlT3JpZ2luKSkKKyAg
ICAgICAgICAgICAgICAgICAgICAgID8gY2hpbGQuYXNDZWxsKCktPnN0cnVjdHVyZSgpLT5tYXNx
dWVyYWRlc0FzVW5kZWZpbmVkKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3RGb3Iobm9kZS0+Y29k
ZU9yaWdpbikpCiAgICAgICAgICAgICAgICAgICAgICAgICA6IGNoaWxkLmlzVW5kZWZpbmVkKCkp
KTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICBjYXNlIElzQm9vbGVhbjoKLSAgICAgICAgICAgICAgICBjb25zdGFudFdhc1NldCA9IHRyeVNl
dENvbnN0YW50KG5vZGVJbmRleCwganNCb29sZWFuKGNoaWxkLmlzQm9vbGVhbigpKSk7CisgICAg
ICAgICAgICAgICAgY29uc3RhbnRXYXNTZXQgPSB0cnlTZXRDb25zdGFudChub2RlLCBqc0Jvb2xl
YW4oY2hpbGQuaXNCb29sZWFuKCkpKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgIGNhc2UgSXNOdW1iZXI6Ci0gICAgICAgICAgICAgICAgY29uc3RhbnRXYXNTZXQgPSB0cnlT
ZXRDb25zdGFudChub2RlSW5kZXgsIGpzQm9vbGVhbihjaGlsZC5pc051bWJlcigpKSk7CisgICAg
ICAgICAgICAgICAgY29uc3RhbnRXYXNTZXQgPSB0cnlTZXRDb25zdGFudChub2RlLCBqc0Jvb2xl
YW4oY2hpbGQuaXNOdW1iZXIoKSkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgY2FzZSBJc1N0cmluZzoKLSAgICAgICAgICAgICAgICBjb25zdGFudFdhc1NldCA9IHRyeVNl
dENvbnN0YW50KG5vZGVJbmRleCwganNCb29sZWFuKGlzSlNTdHJpbmcoY2hpbGQpKSk7CisgICAg
ICAgICAgICAgICAgY29uc3RhbnRXYXNTZXQgPSB0cnlTZXRDb25zdGFudChub2RlLCBqc0Jvb2xl
YW4oaXNKU1N0cmluZyhjaGlsZCkpKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgIGNhc2UgSXNPYmplY3Q6CiAgICAgICAgICAgICAgICAgaWYgKGNoaWxkLmlzTnVsbCgpIHx8
ICFjaGlsZC5pc09iamVjdCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnN0YW50V2FzU2V0
ID0gdHJ5U2V0Q29uc3RhbnQobm9kZUluZGV4LCBqc0Jvb2xlYW4oY2hpbGQuaXNOdWxsKCkpKTsK
KyAgICAgICAgICAgICAgICAgICAgY29uc3RhbnRXYXNTZXQgPSB0cnlTZXRDb25zdGFudChub2Rl
LCBqc0Jvb2xlYW4oY2hpbGQuaXNOdWxsKCkpKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgZGVmYXVsdDoKQEAgLTcxOCw2MSArNzE3
LDYxIEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAg
ICAgIH0KICAgICAgICAgfQogCi0gICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoU3BlY0Jv
b2xlYW4pOworICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjQm9vbGVhbik7CiAgICAgICAg
IGJyZWFrOwogICAgIH0KIAogICAgIGNhc2UgVHlwZU9mOiB7CiAgICAgICAgIEpTR2xvYmFsRGF0
YSogZ2xvYmFsRGF0YSA9IG1fY29kZUJsb2NrLT5nbG9iYWxEYXRhKCk7Ci0gICAgICAgIEpTVmFs
dWUgY2hpbGQgPSBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLnZhbHVlKCk7Ci0gICAgICAgIEFic3Ry
YWN0VmFsdWUmIGFic3RyYWN0Q2hpbGQgPSBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpOworICAgICAg
ICBKU1ZhbHVlIGNoaWxkID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSkudmFsdWUoKTsKKyAgICAg
ICAgQWJzdHJhY3RWYWx1ZSYgYWJzdHJhY3RDaGlsZCA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkp
OwogICAgICAgICBpZiAoY2hpbGQpIHsKLSAgICAgICAgICAgIEpTVmFsdWUgdHlwZVN0cmluZyA9
IGpzVHlwZVN0cmluZ0ZvclZhbHVlKCpnbG9iYWxEYXRhLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0Rm9yKG5vZGUuY29kZU9yaWdpbiksIGNoaWxkKTsKLSAgICAgICAgICAgIGlmICh0cnlTZXRD
b25zdGFudChub2RlSW5kZXgsIHR5cGVTdHJpbmcpKSB7CisgICAgICAgICAgICBKU1ZhbHVlIHR5
cGVTdHJpbmcgPSBqc1R5cGVTdHJpbmdGb3JWYWx1ZSgqZ2xvYmFsRGF0YSwgbV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdEZvcihub2RlLT5jb2RlT3JpZ2luKSwgY2hpbGQpOworICAgICAgICAgICAg
aWYgKHRyeVNldENvbnN0YW50KG5vZGUsIHR5cGVTdHJpbmcpKSB7CiAgICAgICAgICAgICAgICAg
bV9mb3VuZENvbnN0YW50cyA9IHRydWU7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICB9CiAgICAgICAgIH0gZWxzZSBpZiAoaXNOdW1iZXJTcGVjdWxhdGlvbihhYnN0cmFjdENo
aWxkLm1fdHlwZSkpIHsKLSAgICAgICAgICAgIGlmICh0cnlTZXRDb25zdGFudChub2RlSW5kZXgs
IGdsb2JhbERhdGEtPnNtYWxsU3RyaW5ncy5udW1iZXJTdHJpbmcoKSkpIHsKLSAgICAgICAgICAg
ICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjTnVtYmVyKTsKKyAgICAgICAg
ICAgIGlmICh0cnlTZXRDb25zdGFudChub2RlLCBnbG9iYWxEYXRhLT5zbWFsbFN0cmluZ3MubnVt
YmVyU3RyaW5nKCkpKSB7CisgICAgICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDEoKSku
ZmlsdGVyKFNwZWNOdW1iZXIpOwogICAgICAgICAgICAgICAgIG1fZm91bmRDb25zdGFudHMgPSB0
cnVlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICB9IGVs
c2UgaWYgKGlzU3RyaW5nU3BlY3VsYXRpb24oYWJzdHJhY3RDaGlsZC5tX3R5cGUpKSB7Ci0gICAg
ICAgICAgICBpZiAodHJ5U2V0Q29uc3RhbnQobm9kZUluZGV4LCBnbG9iYWxEYXRhLT5zbWFsbFN0
cmluZ3Muc3RyaW5nU3RyaW5nKCkpKSB7Ci0gICAgICAgICAgICAgICAgZm9yTm9kZShub2RlLmNo
aWxkMSgpKS5maWx0ZXIoU3BlY1N0cmluZyk7CisgICAgICAgICAgICBpZiAodHJ5U2V0Q29uc3Rh
bnQobm9kZSwgZ2xvYmFsRGF0YS0+c21hbGxTdHJpbmdzLnN0cmluZ1N0cmluZygpKSkgeworICAg
ICAgICAgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRlcihTcGVjU3RyaW5nKTsK
ICAgICAgICAgICAgICAgICBtX2ZvdW5kQ29uc3RhbnRzID0gdHJ1ZTsKICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIGlmIChpc0ZpbmFsT2JqZWN0
U3BlY3VsYXRpb24oYWJzdHJhY3RDaGlsZC5tX3R5cGUpIHx8IGlzQXJyYXlTcGVjdWxhdGlvbihh
YnN0cmFjdENoaWxkLm1fdHlwZSkgfHwgaXNBcmd1bWVudHNTcGVjdWxhdGlvbihhYnN0cmFjdENo
aWxkLm1fdHlwZSkpIHsKLSAgICAgICAgICAgIGlmICh0cnlTZXRDb25zdGFudChub2RlSW5kZXgs
IGdsb2JhbERhdGEtPnNtYWxsU3RyaW5ncy5vYmplY3RTdHJpbmcoKSkpIHsKLSAgICAgICAgICAg
ICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjRmluYWxPYmplY3QgfCBTcGVj
QXJyYXkgfCBTcGVjQXJndW1lbnRzKTsKKyAgICAgICAgICAgIGlmICh0cnlTZXRDb25zdGFudChu
b2RlLCBnbG9iYWxEYXRhLT5zbWFsbFN0cmluZ3Mub2JqZWN0U3RyaW5nKCkpKSB7CisgICAgICAg
ICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDEoKSkuZmlsdGVyKFNwZWNGaW5hbE9iamVjdCB8
IFNwZWNBcnJheSB8IFNwZWNBcmd1bWVudHMpOwogICAgICAgICAgICAgICAgIG1fZm91bmRDb25z
dGFudHMgPSB0cnVlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAg
ICAgICB9IGVsc2UgaWYgKGlzRnVuY3Rpb25TcGVjdWxhdGlvbihhYnN0cmFjdENoaWxkLm1fdHlw
ZSkpIHsKLSAgICAgICAgICAgIGlmICh0cnlTZXRDb25zdGFudChub2RlSW5kZXgsIGdsb2JhbERh
dGEtPnNtYWxsU3RyaW5ncy5mdW5jdGlvblN0cmluZygpKSkgewotICAgICAgICAgICAgICAgIGZv
ck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNGdW5jdGlvbik7CisgICAgICAgICAgICBp
ZiAodHJ5U2V0Q29uc3RhbnQobm9kZSwgZ2xvYmFsRGF0YS0+c21hbGxTdHJpbmdzLmZ1bmN0aW9u
U3RyaW5nKCkpKSB7CisgICAgICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDEoKSkuZmls
dGVyKFNwZWNGdW5jdGlvbik7CiAgICAgICAgICAgICAgICAgbV9mb3VuZENvbnN0YW50cyA9IHRy
dWU7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxz
ZSBpZiAoaXNCb29sZWFuU3BlY3VsYXRpb24oYWJzdHJhY3RDaGlsZC5tX3R5cGUpKSB7Ci0gICAg
ICAgICAgICBpZiAodHJ5U2V0Q29uc3RhbnQobm9kZUluZGV4LCBnbG9iYWxEYXRhLT5zbWFsbFN0
cmluZ3MuYm9vbGVhblN0cmluZygpKSkgewotICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZS5j
aGlsZDEoKSkuZmlsdGVyKFNwZWNCb29sZWFuKTsKKyAgICAgICAgICAgIGlmICh0cnlTZXRDb25z
dGFudChub2RlLCBnbG9iYWxEYXRhLT5zbWFsbFN0cmluZ3MuYm9vbGVhblN0cmluZygpKSkgewor
ICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRlcihTcGVjQm9vbGVh
bik7CiAgICAgICAgICAgICAgICAgbV9mb3VuZENvbnN0YW50cyA9IHRydWU7CiAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICBOb2RlJiBjaGlsZE5vZGUgPSBtX2dyYXBoW25vZGUuY2hpbGQxKCldOwotICAgICAgICAgICAg
aWYgKGlzQ2VsbFNwZWN1bGF0aW9uKGNoaWxkTm9kZS5wcmVkaWN0aW9uKCkpKSB7Ci0gICAgICAg
ICAgICAgICAgaWYgKGlzU3RyaW5nU3BlY3VsYXRpb24oY2hpbGROb2RlLnByZWRpY3Rpb24oKSkp
Ci0gICAgICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNT
dHJpbmcpOworICAgICAgICAgICAgTm9kZSogY2hpbGROb2RlID0gbm9kZS0+Y2hpbGQxKCkubm9k
ZSgpOworICAgICAgICAgICAgaWYgKGlzQ2VsbFNwZWN1bGF0aW9uKGNoaWxkTm9kZS0+cHJlZGlj
dGlvbigpKSkgeworICAgICAgICAgICAgICAgIGlmIChpc1N0cmluZ1NwZWN1bGF0aW9uKGNoaWxk
Tm9kZS0+cHJlZGljdGlvbigpKSkKKyAgICAgICAgICAgICAgICAgICAgZm9yTm9kZShjaGlsZE5v
ZGUpLmZpbHRlcihTcGVjU3RyaW5nKTsKICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAg
ICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNDZWxsKTsKLSAgICAg
ICAgICAgICAgICBub2RlLnNldENhbkV4aXQodHJ1ZSk7CisgICAgICAgICAgICAgICAgICAgIGZv
ck5vZGUoY2hpbGROb2RlKS5maWx0ZXIoU3BlY0NlbGwpOworICAgICAgICAgICAgICAgIG5vZGUt
PnNldENhbkV4aXQodHJ1ZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgZm9y
Tm9kZShub2RlSW5kZXgpLnNldChTcGVjU3RyaW5nKTsKKyAgICAgICAgZm9yTm9kZShub2RlKS5z
ZXQoU3BlY1N0cmluZyk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgICAgIApAQCAt
NzgzLDI2ICs3ODIsMjYgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGlu
ZAogICAgIGNhc2UgQ29tcGFyZUVxOiB7CiAgICAgICAgIGJvb2wgY29uc3RhbnRXYXNTZXQgPSBm
YWxzZTsKIAotICAgICAgICBKU1ZhbHVlIGxlZnRDb25zdCA9IGZvck5vZGUobm9kZS5jaGlsZDEo
KSkudmFsdWUoKTsKLSAgICAgICAgSlNWYWx1ZSByaWdodENvbnN0ID0gZm9yTm9kZShub2RlLmNo
aWxkMigpKS52YWx1ZSgpOworICAgICAgICBKU1ZhbHVlIGxlZnRDb25zdCA9IGZvck5vZGUobm9k
ZS0+Y2hpbGQxKCkpLnZhbHVlKCk7CisgICAgICAgIEpTVmFsdWUgcmlnaHRDb25zdCA9IGZvck5v
ZGUobm9kZS0+Y2hpbGQyKCkpLnZhbHVlKCk7CiAgICAgICAgIGlmIChsZWZ0Q29uc3QgJiYgcmln
aHRDb25zdCAmJiBsZWZ0Q29uc3QuaXNOdW1iZXIoKSAmJiByaWdodENvbnN0LmlzTnVtYmVyKCkp
IHsKICAgICAgICAgICAgIGRvdWJsZSBhID0gbGVmdENvbnN0LmFzTnVtYmVyKCk7CiAgICAgICAg
ICAgICBkb3VibGUgYiA9IHJpZ2h0Q29uc3QuYXNOdW1iZXIoKTsKICAgICAgICAgICAgIHN3aXRj
aCAobm9kZS5vcCgpKSB7CiAgICAgICAgICAgICBjYXNlIENvbXBhcmVMZXNzOgotICAgICAgICAg
ICAgICAgIGNvbnN0YW50V2FzU2V0ID0gdHJ5U2V0Q29uc3RhbnQobm9kZUluZGV4LCBqc0Jvb2xl
YW4oYSA8IGIpKTsKKyAgICAgICAgICAgICAgICBjb25zdGFudFdhc1NldCA9IHRyeVNldENvbnN0
YW50KG5vZGUsIGpzQm9vbGVhbihhIDwgYikpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgY2FzZSBDb21wYXJlTGVzc0VxOgotICAgICAgICAgICAgICAgIGNvbnN0YW50V2Fz
U2V0ID0gdHJ5U2V0Q29uc3RhbnQobm9kZUluZGV4LCBqc0Jvb2xlYW4oYSA8PSBiKSk7CisgICAg
ICAgICAgICAgICAgY29uc3RhbnRXYXNTZXQgPSB0cnlTZXRDb25zdGFudChub2RlLCBqc0Jvb2xl
YW4oYSA8PSBiKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIENv
bXBhcmVHcmVhdGVyOgotICAgICAgICAgICAgICAgIGNvbnN0YW50V2FzU2V0ID0gdHJ5U2V0Q29u
c3RhbnQobm9kZUluZGV4LCBqc0Jvb2xlYW4oYSA+IGIpKTsKKyAgICAgICAgICAgICAgICBjb25z
dGFudFdhc1NldCA9IHRyeVNldENvbnN0YW50KG5vZGUsIGpzQm9vbGVhbihhID4gYikpOwogICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBDb21wYXJlR3JlYXRlckVxOgot
ICAgICAgICAgICAgICAgIGNvbnN0YW50V2FzU2V0ID0gdHJ5U2V0Q29uc3RhbnQobm9kZUluZGV4
LCBqc0Jvb2xlYW4oYSA+PSBiKSk7CisgICAgICAgICAgICAgICAgY29uc3RhbnRXYXNTZXQgPSB0
cnlTZXRDb25zdGFudChub2RlLCBqc0Jvb2xlYW4oYSA+PSBiKSk7CiAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICBjYXNlIENvbXBhcmVFcToKLSAgICAgICAgICAgICAgICBjb25z
dGFudFdhc1NldCA9IHRyeVNldENvbnN0YW50KG5vZGVJbmRleCwganNCb29sZWFuKGEgPT0gYikp
OworICAgICAgICAgICAgICAgIGNvbnN0YW50V2FzU2V0ID0gdHJ5U2V0Q29uc3RhbnQobm9kZSwg
anNCb29sZWFuKGEgPT0gYikpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
ZGVmYXVsdDoKICAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTgxMSwy
NCArODEwLDI0IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAg
ICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgaWYgKCFjb25zdGFudFdh
c1NldCAmJiBub2RlLm9wKCkgPT0gQ29tcGFyZUVxKSB7Ci0gICAgICAgICAgICBTcGVjdWxhdGVk
VHlwZSBsZWZ0VHlwZSA9IGZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlOwotICAgICAgICAg
ICAgU3BlY3VsYXRlZFR5cGUgcmlnaHRUeXBlID0gZm9yTm9kZShub2RlLmNoaWxkMigpKS5tX3R5
cGU7CisgICAgICAgIGlmICghY29uc3RhbnRXYXNTZXQgJiYgbm9kZS0+b3AoKSA9PSBDb21wYXJl
RXEpIHsKKyAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIGxlZnRUeXBlID0gZm9yTm9kZShub2Rl
LT5jaGlsZDEoKSkubV90eXBlOworICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgcmlnaHRUeXBl
ID0gZm9yTm9kZShub2RlLT5jaGlsZDIoKSkubV90eXBlOwogICAgICAgICAgICAgaWYgKChpc0lu
dDMyU3BlY3VsYXRpb24obGVmdFR5cGUpICYmIGlzT3RoZXJTcGVjdWxhdGlvbihyaWdodFR5cGUp
KQogICAgICAgICAgICAgICAgIHx8IChpc090aGVyU3BlY3VsYXRpb24obGVmdFR5cGUpICYmIGlz
SW50MzJTcGVjdWxhdGlvbihyaWdodFR5cGUpKSkKLSAgICAgICAgICAgICAgICBjb25zdGFudFdh
c1NldCA9IHRyeVNldENvbnN0YW50KG5vZGVJbmRleCwganNCb29sZWFuKGZhbHNlKSk7CisgICAg
ICAgICAgICAgICAgY29uc3RhbnRXYXNTZXQgPSB0cnlTZXRDb25zdGFudChub2RlLCBqc0Jvb2xl
YW4oZmFsc2UpKTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgaWYgKGNvbnN0YW50V2Fz
U2V0KSB7CiAgICAgICAgICAgICBtX2ZvdW5kQ29uc3RhbnRzID0gdHJ1ZTsKLSAgICAgICAgICAg
IG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7CisgICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZh
bHNlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBm
b3JOb2RlKG5vZGVJbmRleCkuc2V0KFNwZWNCb29sZWFuKTsKKyAgICAgICAgZm9yTm9kZShub2Rl
KS5zZXQoU3BlY0Jvb2xlYW4pOwogICAgICAgICAKLSAgICAgICAgTm9kZSYgbGVmdCA9IG1fZ3Jh
cGhbbm9kZS5jaGlsZDEoKV07Ci0gICAgICAgIE5vZGUmIHJpZ2h0ID0gbV9ncmFwaFtub2RlLmNo
aWxkMigpXTsKKyAgICAgICAgTm9kZSogbGVmdCA9IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKKyAg
ICAgICAgTm9kZSogcmlnaHQgPSBub2RlLT5jaGlsZDIoKS5ub2RlKCk7CiAgICAgICAgIFNwZWN1
bGF0ZWRUeXBlIGZpbHRlcjsKICAgICAgICAgU3BlY3VsYXRlZFR5cGVDaGVja2VyIGNoZWNrZXI7
CiAgICAgICAgIGlmIChOb2RlOjpzaG91bGRTcGVjdWxhdGVJbnRlZ2VyKGxlZnQsIHJpZ2h0KSkg
ewpAQCAtODM4LDEyMSArODM3LDExOSBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5z
aWduZWQgaW5kCiAgICAgICAgICAgICBmaWx0ZXIgPSBTcGVjTnVtYmVyOwogICAgICAgICAgICAg
Y2hlY2tlciA9IGlzTnVtYmVyU3BlY3VsYXRpb247CiAgICAgICAgIH0gZWxzZSBpZiAobm9kZS5v
cCgpID09IENvbXBhcmVFcSkgewotICAgICAgICAgICAgaWYgKChtX2dyYXBoLmlzQ29uc3RhbnQo
bm9kZS5jaGlsZDEoKS5pbmRleCgpKQotICAgICAgICAgICAgICAgICAmJiBtX2dyYXBoLnZhbHVl
T2ZKU0NvbnN0YW50KG5vZGUuY2hpbGQxKCkuaW5kZXgoKSkuaXNOdWxsKCkpCi0gICAgICAgICAg
ICAgICAgfHwgKG1fZ3JhcGguaXNDb25zdGFudChub2RlLmNoaWxkMigpLmluZGV4KCkpCi0gICAg
ICAgICAgICAgICAgICAgICYmIG1fZ3JhcGgudmFsdWVPZkpTQ29uc3RhbnQobm9kZS5jaGlsZDIo
KS5pbmRleCgpKS5pc051bGwoKSkpIHsKKyAgICAgICAgICAgIGlmICgobV9ncmFwaC5pc0NvbnN0
YW50KGxlZnQpCisgICAgICAgICAgICAgICAgICYmIG1fZ3JhcGgudmFsdWVPZkpTQ29uc3RhbnQo
bGVmdCkuaXNOdWxsKCkpCisgICAgICAgICAgICAgICAgfHwgKG1fZ3JhcGguaXNDb25zdGFudChy
aWdodCkKKyAgICAgICAgICAgICAgICAgICAgJiYgbV9ncmFwaC52YWx1ZU9mSlNDb25zdGFudChy
aWdodCkuaXNOdWxsKCkpKSB7CiAgICAgICAgICAgICAgICAgLy8gV2UgY2FuIGV4aXQgaWYgd2Ug
aGF2ZW4ndCBmaXJlZCB0aGUgTWFzcXVlcmFkZXNBc1VuZGVmaW5kIHdhdGNocG9pbnQgeWV0Lgot
ICAgICAgICAgICAgICAgIG5vZGUuc2V0Q2FuRXhpdChtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
Rm9yKG5vZGUuY29kZU9yaWdpbiktPm1hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50KCkt
PmlzU3RpbGxWYWxpZCgpKTsKKyAgICAgICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3RGb3Iobm9kZS0+Y29kZU9yaWdpbiktPm1hc3F1ZXJhZGVzQXNV
bmRlZmluZWRXYXRjaHBvaW50KCktPmlzU3RpbGxWYWxpZCgpKTsKICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKGxlZnQu
c2hvdWxkU3BlY3VsYXRlU3RyaW5nKCkgfHwgcmlnaHQuc2hvdWxkU3BlY3VsYXRlU3RyaW5nKCkp
IHsKLSAgICAgICAgICAgICAgICBub2RlLnNldENhbkV4aXQoZmFsc2UpOworICAgICAgICAgICAg
aWYgKGxlZnQtPnNob3VsZFNwZWN1bGF0ZVN0cmluZygpIHx8IHJpZ2h0LT5zaG91bGRTcGVjdWxh
dGVTdHJpbmcoKSkgeworICAgICAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwog
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfSAKLSAgICAgICAgICAgIGlmIChs
ZWZ0LnNob3VsZFNwZWN1bGF0ZU5vblN0cmluZ0NlbGwoKSAmJiByaWdodC5zaG91bGRTcGVjdWxh
dGVOb25TdHJpbmdDZWxsT3JPdGhlcigpKSB7Ci0gICAgICAgICAgICAgICAgbm9kZS5zZXRDYW5F
eGl0KHRydWUpOwotICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVy
KFNwZWNDZWxsICYgflNwZWNTdHJpbmcpOwotICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZS5j
aGlsZDIoKSkuZmlsdGVyKChTcGVjQ2VsbCAmIH5TcGVjU3RyaW5nKSB8IFNwZWNPdGhlcik7Ci0g
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAobGVm
dC5zaG91bGRTcGVjdWxhdGVOb25TdHJpbmdDZWxsT3JPdGhlcigpICYmIHJpZ2h0LnNob3VsZFNw
ZWN1bGF0ZU5vblN0cmluZ0NlbGwoKSkgewotICAgICAgICAgICAgICAgIG5vZGUuc2V0Q2FuRXhp
dCh0cnVlKTsKLSAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcigo
U3BlY0NlbGwgJiB+U3BlY1N0cmluZykgfCBTcGVjT3RoZXIpOwotICAgICAgICAgICAgICAgIGZv
ck5vZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKFNwZWNDZWxsICYgflNwZWNTdHJpbmcpOwotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGxlZnQu
c2hvdWxkU3BlY3VsYXRlTm9uU3RyaW5nQ2VsbCgpICYmIHJpZ2h0LnNob3VsZFNwZWN1bGF0ZU5v
blN0cmluZ0NlbGwoKSkgewotICAgICAgICAgICAgICAgIG5vZGUuc2V0Q2FuRXhpdCh0cnVlKTsK
LSAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjQ2VsbCAm
IH5TcGVjU3RyaW5nKTsKLSAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQyKCkpLmZp
bHRlcihTcGVjQ2VsbCAmIH5TcGVjU3RyaW5nKTsKKyAgICAgICAgICAgIGlmIChsZWZ0LT5zaG91
bGRTcGVjdWxhdGVOb25TdHJpbmdDZWxsKCkgJiYgcmlnaHQtPnNob3VsZFNwZWN1bGF0ZU5vblN0
cmluZ0NlbGxPck90aGVyKCkpIHsKKyAgICAgICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRy
dWUpOworICAgICAgICAgICAgICAgIGZvck5vZGUobGVmdCkuZmlsdGVyKFNwZWNDZWxsICYgflNw
ZWNTdHJpbmcpOworICAgICAgICAgICAgICAgIGZvck5vZGUocmlnaHQpLmZpbHRlcigoU3BlY0Nl
bGwgJiB+U3BlY1N0cmluZykgfCBTcGVjT3RoZXIpOworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGxlZnQtPnNob3VsZFNwZWN1bGF0ZU5vblN0
cmluZ0NlbGxPck90aGVyKCkgJiYgcmlnaHQtPnNob3VsZFNwZWN1bGF0ZU5vblN0cmluZ0NlbGwo
KSkgeworICAgICAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7CisgICAgICAgICAg
ICAgICAgZm9yTm9kZShsZWZ0KS5maWx0ZXIoKFNwZWNDZWxsICYgflNwZWNTdHJpbmcpIHwgU3Bl
Y090aGVyKTsKKyAgICAgICAgICAgICAgICBmb3JOb2RlKHJpZ2h0KS5maWx0ZXIoU3BlY0NlbGwg
JiB+U3BlY1N0cmluZyk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBpZiAobGVmdC0+c2hvdWxkU3BlY3VsYXRlTm9uU3RyaW5nQ2VsbCgpICYmIHJp
Z2h0LT5zaG91bGRTcGVjdWxhdGVOb25TdHJpbmdDZWxsKCkpIHsKKyAgICAgICAgICAgICAgICBu
b2RlLT5zZXRDYW5FeGl0KHRydWUpOworICAgICAgICAgICAgICAgIGZvck5vZGUobGVmdCkuZmls
dGVyKFNwZWNDZWxsICYgflNwZWNTdHJpbmcpOworICAgICAgICAgICAgICAgIGZvck5vZGUocmln
aHQpLmZpbHRlcihTcGVjQ2VsbCAmIH5TcGVjU3RyaW5nKTsKICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgIH0KICAKICAgICAgICAgICAgIGZpbHRlciA9IFNwZWNUb3A7CiAgICAg
ICAgICAgICBjaGVja2VyID0gaXNBbnlTcGVjdWxhdGlvbjsKLSAgICAgICAgICAgIGNsb2JiZXJX
b3JsZChub2RlLmNvZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7CisgICAgICAgICAgICBjbG9iYmVy
V29ybGQobm9kZS0+Y29kZU9yaWdpbiwgaW5kZXhJbkJsb2NrKTsKICAgICAgICAgfSBlbHNlIHsK
ICAgICAgICAgICAgIGZpbHRlciA9IFNwZWNUb3A7CiAgICAgICAgICAgICBjaGVja2VyID0gaXNB
bnlTcGVjdWxhdGlvbjsKLSAgICAgICAgICAgIGNsb2JiZXJXb3JsZChub2RlLmNvZGVPcmlnaW4s
IGluZGV4SW5CbG9jayk7CisgICAgICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+Y29kZU9yaWdp
biwgaW5kZXhJbkJsb2NrKTsKICAgICAgICAgfQogICAgICAgICBub2RlLnNldENhbkV4aXQoCi0g
ICAgICAgICAgICAhY2hlY2tlcihmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkKLSAgICAg
ICAgICAgIHx8ICFjaGVja2VyKGZvck5vZGUobm9kZS5jaGlsZDIoKSkubV90eXBlKSk7Ci0gICAg
ICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKGZpbHRlcik7Ci0gICAgICAgIGZvck5v
ZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKGZpbHRlcik7CisgICAgICAgICAgICAhY2hlY2tlcihm
b3JOb2RlKGxlZnQpLm1fdHlwZSkKKyAgICAgICAgICAgIHx8ICFjaGVja2VyKGZvck5vZGUocmln
aHQpLm1fdHlwZSkpOworICAgICAgICBmb3JOb2RlKGxlZnQpLmZpbHRlcihmaWx0ZXIpOworICAg
ICAgICBmb3JOb2RlKHJpZ2h0KS5maWx0ZXIoZmlsdGVyKTsKICAgICAgICAgYnJlYWs7CiAgICAg
fQogICAgICAgICAgICAgCiAgICAgY2FzZSBDb21wYXJlU3RyaWN0RXE6IHsKLSAgICAgICAgSlNW
YWx1ZSBsZWZ0ID0gZm9yTm9kZShub2RlLmNoaWxkMSgpKS52YWx1ZSgpOwotICAgICAgICBKU1Zh
bHVlIHJpZ2h0ID0gZm9yTm9kZShub2RlLmNoaWxkMigpKS52YWx1ZSgpOworICAgICAgICBOb2Rl
KiBsZWZ0Tm9kZSA9IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKKyAgICAgICAgTm9kZSogcmlnaHRO
b2RlID0gbm9kZS0+Y2hpbGQyKCkubm9kZSgpOworICAgICAgICBKU1ZhbHVlIGxlZnQgPSBmb3JO
b2RlKGxlZnROb2RlKS52YWx1ZSgpOworICAgICAgICBKU1ZhbHVlIHJpZ2h0ID0gZm9yTm9kZShy
aWdodE5vZGUpLnZhbHVlKCk7CiAgICAgICAgIGlmIChsZWZ0ICYmIHJpZ2h0ICYmIGxlZnQuaXNO
dW1iZXIoKSAmJiByaWdodC5pc051bWJlcigpCi0gICAgICAgICAgICAmJiB0cnlTZXRDb25zdGFu
dChub2RlSW5kZXgsIGpzQm9vbGVhbihsZWZ0LmFzTnVtYmVyKCkgPT0gcmlnaHQuYXNOdW1iZXIo
KSkpKSB7CisgICAgICAgICAgICAmJiB0cnlTZXRDb25zdGFudChub2RlLCBqc0Jvb2xlYW4obGVm
dC5hc051bWJlcigpID09IHJpZ2h0LmFzTnVtYmVyKCkpKSkgewogICAgICAgICAgICAgbV9mb3Vu
ZENvbnN0YW50cyA9IHRydWU7CiAgICAgICAgICAgICBub2RlLnNldENhbkV4aXQoZmFsc2UpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgZm9yTm9kZShub2RlSW5kZXgp
LnNldChTcGVjQm9vbGVhbik7Ci0gICAgICAgIGlmIChtX2dyYXBoLmlzSlNDb25zdGFudChub2Rl
LmNoaWxkMSgpLmluZGV4KCkpKSB7Ci0gICAgICAgICAgICBKU1ZhbHVlIHZhbHVlID0gbV9ncmFw
aC52YWx1ZU9mSlNDb25zdGFudChub2RlLmNoaWxkMSgpLmluZGV4KCkpOworICAgICAgICBmb3JO
b2RlKG5vZGUpLnNldChTcGVjQm9vbGVhbik7CisgICAgICAgIGlmIChtX2dyYXBoLmlzSlNDb25z
dGFudChsZWZ0Tm9kZSkpIHsKKyAgICAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBtX2dyYXBoLnZh
bHVlT2ZKU0NvbnN0YW50KGxlZnROb2RlKTsKICAgICAgICAgICAgIGlmICghdmFsdWUuaXNOdW1i
ZXIoKSAmJiAhdmFsdWUuaXNTdHJpbmcoKSkgewotICAgICAgICAgICAgICAgIG5vZGUuc2V0Q2Fu
RXhpdChmYWxzZSk7CisgICAgICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CiAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAg
aWYgKG1fZ3JhcGguaXNKU0NvbnN0YW50KG5vZGUuY2hpbGQyKCkuaW5kZXgoKSkpIHsKLSAgICAg
ICAgICAgIEpTVmFsdWUgdmFsdWUgPSBtX2dyYXBoLnZhbHVlT2ZKU0NvbnN0YW50KG5vZGUuY2hp
bGQyKCkuaW5kZXgoKSk7CisgICAgICAgIGlmIChtX2dyYXBoLmlzSlNDb25zdGFudChyaWdodE5v
ZGUpKSB7CisgICAgICAgICAgICBKU1ZhbHVlIHZhbHVlID0gbV9ncmFwaC52YWx1ZU9mSlNDb25z
dGFudChyaWdodE5vZGUpOwogICAgICAgICAgICAgaWYgKCF2YWx1ZS5pc051bWJlcigpICYmICF2
YWx1ZS5pc1N0cmluZygpKSB7Ci0gICAgICAgICAgICAgICAgbm9kZS5zZXRDYW5FeGl0KGZhbHNl
KTsKKyAgICAgICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICBpZiAoTm9kZTo6
c2hvdWxkU3BlY3VsYXRlSW50ZWdlcigKLSAgICAgICAgICAgICAgICBtX2dyYXBoW25vZGUuY2hp
bGQxKCldLCBtX2dyYXBoW25vZGUuY2hpbGQyKCldKSkgeworICAgICAgICBpZiAoTm9kZTo6c2hv
dWxkU3BlY3VsYXRlSW50ZWdlcihsZWZ0Tm9kZSwgcmlnaHROb2RlKSkgewogICAgICAgICAgICAg
c3BlY3VsYXRlSW50MzJCaW5hcnkobm9kZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
fQotICAgICAgICBpZiAoTm9kZTo6c2hvdWxkU3BlY3VsYXRlTnVtYmVyKAotICAgICAgICAgICAg
ICAgIG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0sIG1fZ3JhcGhbbm9kZS5jaGlsZDIoKV0pKSB7Cisg
ICAgICAgIGlmIChOb2RlOjpzaG91bGRTcGVjdWxhdGVOdW1iZXIobGVmdE5vZGUsIHJpZ2h0Tm9k
ZSkpIHsKICAgICAgICAgICAgIHNwZWN1bGF0ZU51bWJlckJpbmFyeShub2RlKTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIE5vZGUmIGxlZnROb2RlID0gbV9ncmFwaFtu
b2RlLmNoaWxkMSgpXTsKLSAgICAgICAgTm9kZSYgcmlnaHROb2RlID0gbV9ncmFwaFtub2RlLmNo
aWxkMigpXTsKLSAgICAgICAgaWYgKGxlZnROb2RlLnNob3VsZFNwZWN1bGF0ZVN0cmluZygpIHx8
IHJpZ2h0Tm9kZS5zaG91bGRTcGVjdWxhdGVTdHJpbmcoKSkgewotICAgICAgICAgICAgbm9kZS5z
ZXRDYW5FeGl0KGZhbHNlKTsKKyAgICAgICAgaWYgKGxlZnROb2RlLT5zaG91bGRTcGVjdWxhdGVT
dHJpbmcoKSB8fCByaWdodE5vZGUtPnNob3VsZFNwZWN1bGF0ZVN0cmluZygpKSB7CisgICAgICAg
ICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9Ci0gICAgICAgIGlmIChsZWZ0Tm9kZS5zaG91bGRTcGVjdWxhdGVOb25TdHJpbmdDZWxsKCkg
JiYgcmlnaHROb2RlLnNob3VsZFNwZWN1bGF0ZU5vblN0cmluZ0NlbGwoKSkgeworICAgICAgICBp
ZiAobGVmdE5vZGUtPnNob3VsZFNwZWN1bGF0ZU5vblN0cmluZ0NlbGwoKSAmJiByaWdodE5vZGUt
PnNob3VsZFNwZWN1bGF0ZU5vblN0cmluZ0NlbGwoKSkgewogICAgICAgICAgICAgbm9kZS5zZXRD
YW5FeGl0KHRydWUpOwotICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIo
KFNwZWNDZWxsICYgflNwZWNTdHJpbmcpIHwgU3BlY090aGVyKTsKLSAgICAgICAgICAgIGZvck5v
ZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKChTcGVjQ2VsbCAmIH5TcGVjU3RyaW5nKSB8IFNwZWNP
dGhlcik7CisgICAgICAgICAgICBmb3JOb2RlKGxlZnROb2RlKS5maWx0ZXIoKFNwZWNDZWxsICYg
flNwZWNTdHJpbmcpIHwgU3BlY090aGVyKTsKKyAgICAgICAgICAgIGZvck5vZGUocmlnaHROb2Rl
KS5maWx0ZXIoKFNwZWNDZWxsICYgflNwZWNTdHJpbmcpIHwgU3BlY090aGVyKTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7Cisg
ICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICBicmVhazsKICAgICB9CiAg
ICAgICAgIAogICAgIGNhc2UgU3RyaW5nQ2hhckNvZGVBdDoKLSAgICAgICAgbm9kZS5zZXRDYW5F
eGl0KHRydWUpOwotICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjU3Ry
aW5nKTsKLSAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMigpKS5maWx0ZXIoU3BlY0ludDMyKTsK
LSAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChTcGVjSW50MzIpOworICAgICAgICBub2Rl
LT5zZXRDYW5FeGl0KHRydWUpOworICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5maWx0
ZXIoU3BlY1N0cmluZyk7CisgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQyKCkpLmZpbHRlcihT
cGVjSW50MzIpOworICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjSW50MzIpOwogICAgICAg
ICBicmVhazsKICAgICAgICAgCiAgICAgY2FzZSBTdHJpbmdDaGFyQXQ6Ci0gICAgICAgIG5vZGUu
c2V0Q2FuRXhpdCh0cnVlKTsKLSAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIo
U3BlY1N0cmluZyk7Ci0gICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJ
bnQzMik7Ci0gICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoU3BlY1N0cmluZyk7CisgICAg
ICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7CisgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQx
KCkpLmZpbHRlcihTcGVjU3RyaW5nKTsKKyAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDIoKSku
ZmlsdGVyKFNwZWNJbnQzMik7CisgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNTdHJpbmcp
OwogICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgIGNhc2UgR2V0QnlWYWw6IHsKLSAg
ICAgICAgbm9kZS5zZXRDYW5FeGl0KHRydWUpOwotICAgICAgICBzd2l0Y2ggKG5vZGUuYXJyYXlN
b2RlKCkudHlwZSgpKSB7CisgICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7CisgICAgICAg
IHN3aXRjaCAobm9kZS0+YXJyYXlNb2RlKCkudHlwZSgpKSB7CiAgICAgICAgIGNhc2UgQXJyYXk6
OlNlbGVjdFVzaW5nUHJlZGljdGlvbnM6CiAgICAgICAgIGNhc2UgQXJyYXk6OlVucHJvZmlsZWQ6
CiAgICAgICAgIGNhc2UgQXJyYXk6OlVuZGVjaWRlZDoKQEAgLTk2Miw4MSArOTU5LDgxIEBAIGJv
b2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgICAgIG1faXNW
YWxpZCA9IGZhbHNlOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6Okdl
bmVyaWM6Ci0gICAgICAgICAgICBjbG9iYmVyV29ybGQobm9kZS5jb2RlT3JpZ2luLCBpbmRleElu
QmxvY2spOwotICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLm1ha2VUb3AoKTsKKyAgICAg
ICAgICAgIGNsb2JiZXJXb3JsZChub2RlLT5jb2RlT3JpZ2luLCBpbmRleEluQmxvY2spOworICAg
ICAgICAgICAgZm9yTm9kZShub2RlKS5tYWtlVG9wKCk7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgY2FzZSBBcnJheTo6U3RyaW5nOgotICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxk
MigpKS5maWx0ZXIoU3BlY0ludDMyKTsKLSAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5z
ZXQoU3BlY1N0cmluZyk7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMigpKS5maWx0
ZXIoU3BlY0ludDMyKTsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNTdHJpbmcp
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OkFyZ3VtZW50czoKLSAg
ICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7Ci0gICAg
ICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkubWFrZVRvcCgpOworICAgICAgICAgICAgZm9yTm9k
ZShub2RlLT5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7CisgICAgICAgICAgICBmb3JOb2Rl
KG5vZGUpLm1ha2VUb3AoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEFycmF5
OjpJbnQzMjoKLSAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJ
bnQzMik7Ci0gICAgICAgICAgICBpZiAobm9kZS5hcnJheU1vZGUoKS5pc091dE9mQm91bmRzKCkp
IHsKLSAgICAgICAgICAgICAgICBjbG9iYmVyV29ybGQobm9kZS5jb2RlT3JpZ2luLCBpbmRleElu
QmxvY2spOwotICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5tYWtlVG9wKCk7Cisg
ICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMigpKS5maWx0ZXIoU3BlY0ludDMyKTsKKyAg
ICAgICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS5pc091dE9mQm91bmRzKCkpIHsKKyAgICAg
ICAgICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+Y29kZU9yaWdpbiwgaW5kZXhJbkJsb2NrKTsK
KyAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLm1ha2VUb3AoKTsKICAgICAgICAgICAgIH0g
ZWxzZQotICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoU3BlY0ludDMyKTsK
KyAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjSW50MzIpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OkRvdWJsZToKLSAgICAgICAgICAgIGZvck5v
ZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7Ci0gICAgICAgICAgICBpZiAobm9k
ZS5hcnJheU1vZGUoKS5pc091dE9mQm91bmRzKCkpIHsKLSAgICAgICAgICAgICAgICBjbG9iYmVy
V29ybGQobm9kZS5jb2RlT3JpZ2luLCBpbmRleEluQmxvY2spOwotICAgICAgICAgICAgICAgIGZv
ck5vZGUobm9kZUluZGV4KS5tYWtlVG9wKCk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKG5vZGUu
YXJyYXlNb2RlKCkuaXNTYW5lQ2hhaW4oKSkKLSAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGVJ
bmRleCkuc2V0KFNwZWNEb3VibGUpOworICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDIo
KSkuZmlsdGVyKFNwZWNJbnQzMik7CisgICAgICAgICAgICBpZiAobm9kZS0+YXJyYXlNb2RlKCku
aXNPdXRPZkJvdW5kcygpKSB7CisgICAgICAgICAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUtPmNv
ZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7CisgICAgICAgICAgICAgICAgZm9yTm9kZShub2RlKS5t
YWtlVG9wKCk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKG5vZGUtPmFycmF5TW9kZSgpLmlzU2Fu
ZUNoYWluKCkpCisgICAgICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0RvdWJsZSk7
CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNl
dChTcGVjRG91YmxlUmVhbCk7CisgICAgICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3Bl
Y0RvdWJsZVJlYWwpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OkNv
bnRpZ3VvdXM6CiAgICAgICAgIGNhc2UgQXJyYXk6OkFycmF5U3RvcmFnZToKICAgICAgICAgY2Fz
ZSBBcnJheTo6U2xvd1B1dEFycmF5U3RvcmFnZToKLSAgICAgICAgICAgIGZvck5vZGUobm9kZS5j
aGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7Ci0gICAgICAgICAgICBpZiAobm9kZS5hcnJheU1v
ZGUoKS5pc091dE9mQm91bmRzKCkpCi0gICAgICAgICAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUu
Y29kZU9yaWdpbiwgaW5kZXhJbkJsb2NrKTsKLSAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4
KS5tYWtlVG9wKCk7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMigpKS5maWx0ZXIo
U3BlY0ludDMyKTsKKyAgICAgICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS5pc091dE9mQm91
bmRzKCkpCisgICAgICAgICAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUtPmNvZGVPcmlnaW4sIGlu
ZGV4SW5CbG9jayk7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLm1ha2VUb3AoKTsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEFycmF5OjpJbnQ4QXJyYXk6Ci0gICAgICAgICAg
ICBmb3JOb2RlKG5vZGUuY2hpbGQyKCkpLmZpbHRlcihTcGVjSW50MzIpOwotICAgICAgICAgICAg
Zm9yTm9kZShub2RlSW5kZXgpLnNldChTcGVjSW50MzIpOworICAgICAgICAgICAgZm9yTm9kZShu
b2RlLT5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7CisgICAgICAgICAgICBmb3JOb2RlKG5v
ZGUpLnNldChTcGVjSW50MzIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJy
YXk6OkludDE2QXJyYXk6Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQyKCkpLmZpbHRl
cihTcGVjSW50MzIpOwotICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChTcGVjSW50
MzIpOworICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQz
Mik7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjSW50MzIpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OkludDMyQXJyYXk6Ci0gICAgICAgICAgICBm
b3JOb2RlKG5vZGUuY2hpbGQyKCkpLmZpbHRlcihTcGVjSW50MzIpOwotICAgICAgICAgICAgZm9y
Tm9kZShub2RlSW5kZXgpLnNldChTcGVjSW50MzIpOworICAgICAgICAgICAgZm9yTm9kZShub2Rl
LT5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUp
LnNldChTcGVjSW50MzIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6
OlVpbnQ4QXJyYXk6Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQyKCkpLmZpbHRlcihT
cGVjSW50MzIpOwotICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChTcGVjSW50MzIp
OworICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7
CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjSW50MzIpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OlVpbnQ4Q2xhbXBlZEFycmF5OgotICAgICAgICAg
ICAgZm9yTm9kZShub2RlLmNoaWxkMigpKS5maWx0ZXIoU3BlY0ludDMyKTsKLSAgICAgICAgICAg
IGZvck5vZGUobm9kZUluZGV4KS5zZXQoU3BlY0ludDMyKTsKKyAgICAgICAgICAgIGZvck5vZGUo
bm9kZS0+Y2hpbGQyKCkpLmZpbHRlcihTcGVjSW50MzIpOworICAgICAgICAgICAgZm9yTm9kZShu
b2RlKS5zZXQoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEFy
cmF5OjpVaW50MTZBcnJheToKLSAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDIoKSkuZmls
dGVyKFNwZWNJbnQzMik7Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFNwZWNJ
bnQzMik7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMigpKS5maWx0ZXIoU3BlY0lu
dDMyKTsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNJbnQzMik7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6VWludDMyQXJyYXk6Ci0gICAgICAgICAg
ICBmb3JOb2RlKG5vZGUuY2hpbGQyKCkpLmZpbHRlcihTcGVjSW50MzIpOwotICAgICAgICAgICAg
aWYgKG5vZGUuc2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKQotICAgICAgICAgICAgICAgIGZvck5v
ZGUobm9kZUluZGV4KS5zZXQoU3BlY0ludDMyKTsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZS0+
Y2hpbGQyKCkpLmZpbHRlcihTcGVjSW50MzIpOworICAgICAgICAgICAgaWYgKG5vZGUtPnNob3Vs
ZFNwZWN1bGF0ZUludGVnZXIoKSkKKyAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChT
cGVjSW50MzIpOwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGZvck5vZGUobm9k
ZUluZGV4KS5zZXQoU3BlY0RvdWJsZSk7CisgICAgICAgICAgICAgICAgZm9yTm9kZShub2RlKS5z
ZXQoU3BlY0RvdWJsZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6
RmxvYXQzMkFycmF5OgotICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMigpKS5maWx0ZXIo
U3BlY0ludDMyKTsKLSAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoU3BlY0RvdWJs
ZSk7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMigpKS5maWx0ZXIoU3BlY0ludDMy
KTsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNEb3VibGUpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OkZsb2F0NjRBcnJheToKLSAgICAgICAgICAg
IGZvck5vZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7Ci0gICAgICAgICAgICBm
b3JOb2RlKG5vZGVJbmRleCkuc2V0KFNwZWNEb3VibGUpOworICAgICAgICAgICAgZm9yTm9kZShu
b2RlLT5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7CisgICAgICAgICAgICBmb3JOb2RlKG5v
ZGUpLnNldChTcGVjRG91YmxlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBkZWZhdWx0
OgogICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC0xMDQ3LDQzICsxMDQ0LDQz
IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgICAg
IAogICAgIGNhc2UgUHV0QnlWYWw6CiAgICAgY2FzZSBQdXRCeVZhbEFsaWFzOiB7Ci0gICAgICAg
IG5vZGUuc2V0Q2FuRXhpdCh0cnVlKTsKKyAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsK
ICAgICAgICAgRWRnZSBjaGlsZDEgPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApOwogICAg
ICAgICBFZGdlIGNoaWxkMiA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSk7CiAgICAgICAg
IEVkZ2UgY2hpbGQzID0gbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAyKTsKLSAgICAgICAgc3dp
dGNoIChub2RlLmFycmF5TW9kZSgpLm1vZGVGb3JQdXQoKS50eXBlKCkpIHsKKyAgICAgICAgc3dp
dGNoIChub2RlLT5hcnJheU1vZGUoKS5tb2RlRm9yUHV0KCkudHlwZSgpKSB7CiAgICAgICAgIGNh
c2UgQXJyYXk6OkZvcmNlRXhpdDoKICAgICAgICAgICAgIG1faXNWYWxpZCA9IGZhbHNlOwogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OkdlbmVyaWM6Ci0gICAgICAgICAg
ICBjbG9iYmVyV29ybGQobm9kZS5jb2RlT3JpZ2luLCBpbmRleEluQmxvY2spOworICAgICAgICAg
ICAgY2xvYmJlcldvcmxkKG5vZGUtPmNvZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6SW50MzI6CiAgICAgICAgICAgICBmb3JO
b2RlKGNoaWxkMSkuZmlsdGVyKFNwZWNDZWxsKTsKICAgICAgICAgICAgIGZvck5vZGUoY2hpbGQy
KS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGZvck5vZGUoY2hpbGQzKS5maWx0ZXIo
U3BlY0ludDMyKTsKLSAgICAgICAgICAgIGlmIChub2RlLmFycmF5TW9kZSgpLmlzT3V0T2ZCb3Vu
ZHMoKSkKLSAgICAgICAgICAgICAgICBjbG9iYmVyV29ybGQobm9kZS5jb2RlT3JpZ2luLCBpbmRl
eEluQmxvY2spOworICAgICAgICAgICAgaWYgKG5vZGUtPmFycmF5TW9kZSgpLmlzT3V0T2ZCb3Vu
ZHMoKSkKKyAgICAgICAgICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+Y29kZU9yaWdpbiwgaW5k
ZXhJbkJsb2NrKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEFycmF5OjpEb3Vi
bGU6CiAgICAgICAgICAgICBmb3JOb2RlKGNoaWxkMSkuZmlsdGVyKFNwZWNDZWxsKTsKICAgICAg
ICAgICAgIGZvck5vZGUoY2hpbGQyKS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGZv
ck5vZGUoY2hpbGQzKS5maWx0ZXIoU3BlY1JlYWxOdW1iZXIpOwotICAgICAgICAgICAgaWYgKG5v
ZGUuYXJyYXlNb2RlKCkuaXNPdXRPZkJvdW5kcygpKQotICAgICAgICAgICAgICAgIGNsb2JiZXJX
b3JsZChub2RlLmNvZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7CisgICAgICAgICAgICBpZiAobm9k
ZS0+YXJyYXlNb2RlKCkuaXNPdXRPZkJvdW5kcygpKQorICAgICAgICAgICAgICAgIGNsb2JiZXJX
b3JsZChub2RlLT5jb2RlT3JpZ2luLCBpbmRleEluQmxvY2spOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3VvdXM6CiAgICAgICAgIGNhc2UgQXJyYXk6OkFy
cmF5U3RvcmFnZToKICAgICAgICAgICAgIGZvck5vZGUoY2hpbGQxKS5maWx0ZXIoU3BlY0NlbGwp
OwogICAgICAgICAgICAgZm9yTm9kZShjaGlsZDIpLmZpbHRlcihTcGVjSW50MzIpOwotICAgICAg
ICAgICAgaWYgKG5vZGUuYXJyYXlNb2RlKCkuaXNPdXRPZkJvdW5kcygpKQotICAgICAgICAgICAg
ICAgIGNsb2JiZXJXb3JsZChub2RlLmNvZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7CisgICAgICAg
ICAgICBpZiAobm9kZS0+YXJyYXlNb2RlKCkuaXNPdXRPZkJvdW5kcygpKQorICAgICAgICAgICAg
ICAgIGNsb2JiZXJXb3JsZChub2RlLT5jb2RlT3JpZ2luLCBpbmRleEluQmxvY2spOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OlNsb3dQdXRBcnJheVN0b3JhZ2U6CiAg
ICAgICAgICAgICBmb3JOb2RlKGNoaWxkMSkuZmlsdGVyKFNwZWNDZWxsKTsKICAgICAgICAgICAg
IGZvck5vZGUoY2hpbGQyKS5maWx0ZXIoU3BlY0ludDMyKTsKLSAgICAgICAgICAgIGlmIChub2Rl
LmFycmF5TW9kZSgpLm1heVN0b3JlVG9Ib2xlKCkpCi0gICAgICAgICAgICAgICAgY2xvYmJlcldv
cmxkKG5vZGUuY29kZU9yaWdpbiwgaW5kZXhJbkJsb2NrKTsKKyAgICAgICAgICAgIGlmIChub2Rl
LT5hcnJheU1vZGUoKS5tYXlTdG9yZVRvSG9sZSgpKQorICAgICAgICAgICAgICAgIGNsb2JiZXJX
b3JsZChub2RlLT5jb2RlT3JpZ2luLCBpbmRleEluQmxvY2spOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIGNhc2UgQXJyYXk6OkFyZ3VtZW50czoKICAgICAgICAgICAgIGZvck5vZGUoY2hp
bGQxKS5maWx0ZXIoU3BlY0NlbGwpOwpAQCAtMTA5Miw3ICsxMDg5LDcgQEAgYm9vbCBBYnN0cmFj
dFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICBjYXNlIEFycmF5OjpJbnQ4QXJy
YXk6CiAgICAgICAgICAgICBmb3JOb2RlKGNoaWxkMSkuZmlsdGVyKFNwZWNDZWxsKTsKICAgICAg
ICAgICAgIGZvck5vZGUoY2hpbGQyKS5maWx0ZXIoU3BlY0ludDMyKTsKLSAgICAgICAgICAgIGlm
IChtX2dyYXBoW2NoaWxkM10uc2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKQorICAgICAgICAgICAg
aWYgKGNoaWxkMy0+c2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKQogICAgICAgICAgICAgICAgIGZv
ck5vZGUoY2hpbGQzKS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGVsc2UKICAgICAg
ICAgICAgICAgICBmb3JOb2RlKGNoaWxkMykuZmlsdGVyKFNwZWNOdW1iZXIpOwpAQCAtMTEwMCw3
ICsxMDk3LDcgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAg
ICAgICBjYXNlIEFycmF5OjpJbnQxNkFycmF5OgogICAgICAgICAgICAgZm9yTm9kZShjaGlsZDEp
LmZpbHRlcihTcGVjQ2VsbCk7CiAgICAgICAgICAgICBmb3JOb2RlKGNoaWxkMikuZmlsdGVyKFNw
ZWNJbnQzMik7Ci0gICAgICAgICAgICBpZiAobV9ncmFwaFtjaGlsZDNdLnNob3VsZFNwZWN1bGF0
ZUludGVnZXIoKSkKKyAgICAgICAgICAgIGlmIChjaGlsZDMtPnNob3VsZFNwZWN1bGF0ZUludGVn
ZXIoKSkKICAgICAgICAgICAgICAgICBmb3JOb2RlKGNoaWxkMykuZmlsdGVyKFNwZWNJbnQzMik7
CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgZm9yTm9kZShjaGlsZDMpLmZpbHRl
cihTcGVjTnVtYmVyKTsKQEAgLTExMDgsNyArMTEwNSw3IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6
ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgY2FzZSBBcnJheTo6SW50MzJBcnJheToKICAg
ICAgICAgICAgIGZvck5vZGUoY2hpbGQxKS5maWx0ZXIoU3BlY0NlbGwpOwogICAgICAgICAgICAg
Zm9yTm9kZShjaGlsZDIpLmZpbHRlcihTcGVjSW50MzIpOwotICAgICAgICAgICAgaWYgKG1fZ3Jh
cGhbY2hpbGQzXS5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpCisgICAgICAgICAgICBpZiAoY2hp
bGQzLT5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpCiAgICAgICAgICAgICAgICAgZm9yTm9kZShj
aGlsZDMpLmZpbHRlcihTcGVjSW50MzIpOwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAg
ICAgIGZvck5vZGUoY2hpbGQzKS5maWx0ZXIoU3BlY051bWJlcik7CkBAIC0xMTE2LDcgKzExMTMs
NyBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgIGNh
c2UgQXJyYXk6OlVpbnQ4QXJyYXk6CiAgICAgICAgICAgICBmb3JOb2RlKGNoaWxkMSkuZmlsdGVy
KFNwZWNDZWxsKTsKICAgICAgICAgICAgIGZvck5vZGUoY2hpbGQyKS5maWx0ZXIoU3BlY0ludDMy
KTsKLSAgICAgICAgICAgIGlmIChtX2dyYXBoW2NoaWxkM10uc2hvdWxkU3BlY3VsYXRlSW50ZWdl
cigpKQorICAgICAgICAgICAgaWYgKGNoaWxkMy0+c2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKQog
ICAgICAgICAgICAgICAgIGZvck5vZGUoY2hpbGQzKS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAg
ICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBmb3JOb2RlKGNoaWxkMykuZmlsdGVyKFNwZWNO
dW1iZXIpOwpAQCAtMTEyNCw3ICsxMTIxLDcgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRl
KHVuc2lnbmVkIGluZAogICAgICAgICBjYXNlIEFycmF5OjpVaW50OENsYW1wZWRBcnJheToKICAg
ICAgICAgICAgIGZvck5vZGUoY2hpbGQxKS5maWx0ZXIoU3BlY0NlbGwpOwogICAgICAgICAgICAg
Zm9yTm9kZShjaGlsZDIpLmZpbHRlcihTcGVjSW50MzIpOwotICAgICAgICAgICAgaWYgKG1fZ3Jh
cGhbY2hpbGQzXS5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpCisgICAgICAgICAgICBpZiAoY2hp
bGQzLT5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpCiAgICAgICAgICAgICAgICAgZm9yTm9kZShj
aGlsZDMpLmZpbHRlcihTcGVjSW50MzIpOwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAg
ICAgIGZvck5vZGUoY2hpbGQzKS5maWx0ZXIoU3BlY051bWJlcik7CkBAIC0xMTMyLDcgKzExMjks
NyBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgIGNh
c2UgQXJyYXk6OlVpbnQxNkFycmF5OgogICAgICAgICAgICAgZm9yTm9kZShjaGlsZDEpLmZpbHRl
cihTcGVjQ2VsbCk7CiAgICAgICAgICAgICBmb3JOb2RlKGNoaWxkMikuZmlsdGVyKFNwZWNJbnQz
Mik7Ci0gICAgICAgICAgICBpZiAobV9ncmFwaFtjaGlsZDNdLnNob3VsZFNwZWN1bGF0ZUludGVn
ZXIoKSkKKyAgICAgICAgICAgIGlmIChjaGlsZDMtPnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKSkK
ICAgICAgICAgICAgICAgICBmb3JOb2RlKGNoaWxkMykuZmlsdGVyKFNwZWNJbnQzMik7CiAgICAg
ICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgZm9yTm9kZShjaGlsZDMpLmZpbHRlcihTcGVj
TnVtYmVyKTsKQEAgLTExNDAsNyArMTEzNyw3IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0
ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgY2FzZSBBcnJheTo6VWludDMyQXJyYXk6CiAgICAgICAg
ICAgICBmb3JOb2RlKGNoaWxkMSkuZmlsdGVyKFNwZWNDZWxsKTsKICAgICAgICAgICAgIGZvck5v
ZGUoY2hpbGQyKS5maWx0ZXIoU3BlY0ludDMyKTsKLSAgICAgICAgICAgIGlmIChtX2dyYXBoW2No
aWxkM10uc2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKQorICAgICAgICAgICAgaWYgKGNoaWxkMy0+
c2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKQogICAgICAgICAgICAgICAgIGZvck5vZGUoY2hpbGQz
KS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBm
b3JOb2RlKGNoaWxkMykuZmlsdGVyKFNwZWNOdW1iZXIpOwpAQCAtMTE2MywxNjYgKzExNjAsMTg4
IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICB9CiAgICAg
ICAgICAgICAKICAgICBjYXNlIEFycmF5UHVzaDoKLSAgICAgICAgbm9kZS5zZXRDYW5FeGl0KHRy
dWUpOwotICAgICAgICBzd2l0Y2ggKG5vZGUuYXJyYXlNb2RlKCkudHlwZSgpKSB7CisgICAgICAg
IG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7CisgICAgICAgIHN3aXRjaCAobm9kZS0+YXJyYXlNb2Rl
KCkudHlwZSgpKSB7CiAgICAgICAgIGNhc2UgQXJyYXk6OkludDMyOgotICAgICAgICAgICAgZm9y
Tm9kZShub2RlLmNoaWxkMigpKS5maWx0ZXIoU3BlY0ludDMyKTsKKyAgICAgICAgICAgIGZvck5v
ZGUobm9kZS0+Y2hpbGQyKCkpLmZpbHRlcihTcGVjSW50MzIpOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIGNhc2UgQXJyYXk6OkRvdWJsZToKLSAgICAgICAgICAgIGZvck5vZGUobm9kZS5j
aGlsZDIoKSkuZmlsdGVyKFNwZWNSZWFsTnVtYmVyKTsKKyAgICAgICAgICAgIGZvck5vZGUobm9k
ZS0+Y2hpbGQyKCkpLmZpbHRlcihTcGVjUmVhbE51bWJlcik7CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAg
IGNsb2JiZXJXb3JsZChub2RlLmNvZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7Ci0gICAgICAgIGZv
ck5vZGUobm9kZUluZGV4KS5zZXQoU3BlY051bWJlcik7CisgICAgICAgIGNsb2JiZXJXb3JsZChu
b2RlLT5jb2RlT3JpZ2luLCBpbmRleEluQmxvY2spOworICAgICAgICBmb3JOb2RlKG5vZGUpLnNl
dChTcGVjTnVtYmVyKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICBjYXNlIEFy
cmF5UG9wOgotICAgICAgICBub2RlLnNldENhbkV4aXQodHJ1ZSk7Ci0gICAgICAgIGNsb2JiZXJX
b3JsZChub2RlLmNvZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7Ci0gICAgICAgIGZvck5vZGUobm9k
ZUluZGV4KS5tYWtlVG9wKCk7CisgICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7CisgICAg
ICAgIGNsb2JiZXJXb3JsZChub2RlLT5jb2RlT3JpZ2luLCBpbmRleEluQmxvY2spOworICAgICAg
ICBmb3JOb2RlKG5vZGUpLm1ha2VUb3AoKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAK
ICAgICBjYXNlIFJlZ0V4cEV4ZWM6CiAgICAgY2FzZSBSZWdFeHBUZXN0OgotICAgICAgICBub2Rl
LnNldENhbkV4aXQoCi0gICAgICAgICAgICAhaXNDZWxsU3BlY3VsYXRpb24oZm9yTm9kZShub2Rl
LmNoaWxkMSgpKS5tX3R5cGUpCi0gICAgICAgICAgICB8fCAhaXNDZWxsU3BlY3VsYXRpb24oZm9y
Tm9kZShub2RlLmNoaWxkMigpKS5tX3R5cGUpKTsKLSAgICAgICAgZm9yTm9kZShub2RlLmNoaWxk
MSgpKS5maWx0ZXIoU3BlY0NlbGwpOwotICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQyKCkpLmZp
bHRlcihTcGVjQ2VsbCk7Ci0gICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5tYWtlVG9wKCk7Cisg
ICAgICAgIG5vZGUtPnNldENhbkV4aXQoCisgICAgICAgICAgICAhaXNDZWxsU3BlY3VsYXRpb24o
Zm9yTm9kZShub2RlLT5jaGlsZDEoKSkubV90eXBlKQorICAgICAgICAgICAgfHwgIWlzQ2VsbFNw
ZWN1bGF0aW9uKGZvck5vZGUobm9kZS0+Y2hpbGQyKCkpLm1fdHlwZSkpOworICAgICAgICBmb3JO
b2RlKG5vZGUtPmNoaWxkMSgpKS5maWx0ZXIoU3BlY0NlbGwpOworICAgICAgICBmb3JOb2RlKG5v
ZGUtPmNoaWxkMigpKS5maWx0ZXIoU3BlY0NlbGwpOworICAgICAgICBmb3JOb2RlKG5vZGUpLm1h
a2VUb3AoKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICBjYXNlIEp1bXA6Ci0g
ICAgICAgIG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7CisgICAgICAgIG5vZGUtPnNldENhbkV4aXQo
ZmFsc2UpOwogICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgIGNhc2UgQnJhbmNoOiB7
Ci0gICAgICAgIEJvb2xlYW5SZXN1bHQgcmVzdWx0ID0gYm9vbGVhblJlc3VsdChub2RlLCBmb3JO
b2RlKG5vZGUuY2hpbGQxKCkpKTsKKyAgICAgICAgTm9kZSogY2hpbGQgPSBub2RlLT5jaGlsZDEo
KS5ub2RlKCk7CisgICAgICAgIEJvb2xlYW5SZXN1bHQgcmVzdWx0ID0gYm9vbGVhblJlc3VsdChu
b2RlLCBmb3JOb2RlKGNoaWxkKSk7CiAgICAgICAgIGlmIChyZXN1bHQgPT0gRGVmaW5pdGVseVRy
dWUpIHsKICAgICAgICAgICAgIG1fYnJhbmNoRGlyZWN0aW9uID0gVGFrZVRydWU7Ci0gICAgICAg
ICAgICBub2RlLnNldENhbkV4aXQoZmFsc2UpOworICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhp
dChmYWxzZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBpZiAocmVz
dWx0ID09IERlZmluaXRlbHlGYWxzZSkgewogICAgICAgICAgICAgbV9icmFuY2hEaXJlY3Rpb24g
PSBUYWtlRmFsc2U7Ci0gICAgICAgICAgICBub2RlLnNldENhbkV4aXQoZmFsc2UpOworICAgICAg
ICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgfQogICAgICAgICAvLyBGSVhNRTogVGhlIGFib3ZlIGhhbmRsZXMgdGhlIHRyaXZpYWwgY2Fz
ZXMgb2Ygc3BhcnNlIGNvbmRpdGlvbmFsCiAgICAgICAgIC8vIGNvbnN0YW50IHByb3BhZ2F0aW9u
LCBidXQgd2UgY2FuIGRvIGJldHRlcjoKICAgICAgICAgLy8gV2UgY2FuIHNwZWNpYWxpemUgdGhl
IHNvdXJjZSB2YXJpYWJsZSdzIHZhbHVlIG9uIGVhY2ggZGlyZWN0aW9uIG9mCiAgICAgICAgIC8v
IHRoZSBicmFuY2guCi0gICAgICAgIE5vZGUmIGNoaWxkID0gbV9ncmFwaFtub2RlLmNoaWxkMSgp
XTsKLSAgICAgICAgaWYgKGNoaWxkLnNob3VsZFNwZWN1bGF0ZUJvb2xlYW4oKSkKKyAgICAgICAg
aWYgKGNoaWxkLT5zaG91bGRTcGVjdWxhdGVCb29sZWFuKCkpCiAgICAgICAgICAgICBzcGVjdWxh
dGVCb29sZWFuVW5hcnkobm9kZSk7Ci0gICAgICAgIGVsc2UgaWYgKGNoaWxkLnNob3VsZFNwZWN1
bGF0ZU5vblN0cmluZ0NlbGxPck90aGVyKCkpIHsKLSAgICAgICAgICAgIG5vZGUuc2V0Q2FuRXhp
dCh0cnVlKTsKLSAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKChTcGVj
Q2VsbCAmIH5TcGVjU3RyaW5nKSB8IFNwZWNPdGhlcik7Ci0gICAgICAgIH0gZWxzZSBpZiAoY2hp
bGQuc2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKQorICAgICAgICBlbHNlIGlmIChjaGlsZC0+c2hv
dWxkU3BlY3VsYXRlTm9uU3RyaW5nQ2VsbE9yT3RoZXIoKSkgeworICAgICAgICAgICAgbm9kZS0+
c2V0Q2FuRXhpdCh0cnVlKTsKKyAgICAgICAgICAgIGZvck5vZGUoY2hpbGQpLmZpbHRlcigoU3Bl
Y0NlbGwgJiB+U3BlY1N0cmluZykgfCBTcGVjT3RoZXIpOworICAgICAgICB9IGVsc2UgaWYgKGNo
aWxkLT5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpCiAgICAgICAgICAgICBzcGVjdWxhdGVJbnQz
MlVuYXJ5KG5vZGUpOwotICAgICAgICBlbHNlIGlmIChjaGlsZC5zaG91bGRTcGVjdWxhdGVOdW1i
ZXIoKSkKKyAgICAgICAgZWxzZSBpZiAoY2hpbGQtPnNob3VsZFNwZWN1bGF0ZU51bWJlcigpKQog
ICAgICAgICAgICAgc3BlY3VsYXRlTnVtYmVyVW5hcnkobm9kZSk7CiAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgIG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7CisgICAgICAgICAgICBub2RlLT5zZXRD
YW5FeGl0KGZhbHNlKTsKICAgICAgICAgbV9icmFuY2hEaXJlY3Rpb24gPSBUYWtlQm90aDsKICAg
ICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAgICAgCiAgICAgY2FzZSBSZXR1cm46CiAgICAg
ICAgIG1faXNWYWxpZCA9IGZhbHNlOwotICAgICAgICBub2RlLnNldENhbkV4aXQoZmFsc2UpOwor
ICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAg
IAogICAgIGNhc2UgVGhyb3c6CiAgICAgY2FzZSBUaHJvd1JlZmVyZW5jZUVycm9yOgogICAgICAg
ICBtX2lzVmFsaWQgPSBmYWxzZTsKLSAgICAgICAgbm9kZS5zZXRDYW5FeGl0KHRydWUpOworICAg
ICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOwogICAgICAgICBicmVhazsKICAgICAgICAgICAg
IAogICAgIGNhc2UgVG9QcmltaXRpdmU6IHsKLSAgICAgICAgSlNWYWx1ZSBjaGlsZENvbnN0ID0g
Zm9yTm9kZShub2RlLmNoaWxkMSgpKS52YWx1ZSgpOwotICAgICAgICBpZiAoY2hpbGRDb25zdCAm
JiBjaGlsZENvbnN0LmlzTnVtYmVyKCkgJiYgdHJ5U2V0Q29uc3RhbnQobm9kZUluZGV4LCBjaGls
ZENvbnN0KSkgeworICAgICAgICBOb2RlKiBjaGlsZCA9IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsK
KyAgICAgICAgCisgICAgICAgIEpTVmFsdWUgY2hpbGRDb25zdCA9IGZvck5vZGUoY2hpbGQpLnZh
bHVlKCk7CisgICAgICAgIGlmIChjaGlsZENvbnN0ICYmIGNoaWxkQ29uc3QuaXNOdW1iZXIoKSAm
JiB0cnlTZXRDb25zdGFudChub2RlLCBjaGlsZENvbnN0KSkgewogICAgICAgICAgICAgbV9mb3Vu
ZENvbnN0YW50cyA9IHRydWU7Ci0gICAgICAgICAgICBub2RlLnNldENhbkV4aXQoZmFsc2UpOwor
ICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgTm9kZSYgY2hpbGQgPSBtX2dyYXBoW25vZGUu
Y2hpbGQxKCldOwotICAgICAgICBpZiAoY2hpbGQuc2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKSB7
CisgICAgICAgIGlmIChjaGlsZC0+c2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKSB7CiAgICAgICAg
ICAgICBzcGVjdWxhdGVJbnQzMlVuYXJ5KG5vZGUpOwotICAgICAgICAgICAgZm9yTm9kZShub2Rl
SW5kZXgpLnNldChTcGVjSW50MzIpOworICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3Bl
Y0ludDMyKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKLSAgICAgICAgQWJzdHJh
Y3RWYWx1ZSYgc291cmNlID0gZm9yTm9kZShub2RlLmNoaWxkMSgpKTsKLSAgICAgICAgQWJzdHJh
Y3RWYWx1ZSYgZGVzdGluYXRpb24gPSBmb3JOb2RlKG5vZGVJbmRleCk7Ci0gICAgICAgICAgICAK
KyAgICAgICAgQWJzdHJhY3RWYWx1ZSYgc291cmNlID0gZm9yTm9kZShjaGlsZCk7CisgICAgICAg
IEFic3RyYWN0VmFsdWUmIGRlc3RpbmF0aW9uID0gZm9yTm9kZShub2RlKTsKKyAgICAgICAgCisg
ICAgICAgIC8vIE5CLiBUaGUgbW9yZSBjYW5vbmljYWwgd2F5IG9mIHdyaXRpbmcgdGhpcyB3b3Vs
ZCBoYXZlIGJlZW46CisgICAgICAgIC8vCisgICAgICAgIC8vIGRlc3RpbmF0aW9uID0gc291cmNl
OworICAgICAgICAvLyBpZiAoZGVzdGluYXRpb24ubV90eXBlICYgIShTcGVjTnVtYmVyIHwgU3Bl
Y1N0cmluZyB8IFNwZWNCb29sZWFuKSkgeworICAgICAgICAvLyAgICAgZGVzdGluYXRpb24uZmls
dGVyKFNwZWNOdW1iZXIgfCBTcGVjU3RyaW5nIHwgU3BlY0Jvb2xlYW4pOworICAgICAgICAvLyAg
ICAgQWJzdHJhY3RWYWx1ZSBzdHJpbmc7CisgICAgICAgIC8vICAgICBzdHJpbmcuc2V0KGdsb2Jh
bERhdGEtPnN0cmluZ1N0cnVjdHVyZSk7CisgICAgICAgIC8vICAgICBkZXN0aW5hdGlvbi5tZXJn
ZShzdHJpbmcpOworICAgICAgICAvLyB9CisgICAgICAgIC8vCisgICAgICAgIC8vIFRoZSByZWFz
b24gd2h5IHRoaXMgd291bGQsIGluIG1vc3Qgb3RoZXIgY2FzZXMsIGhhdmUgYmVlbiBiZXR0ZXIg
aXMgdGhhdAorICAgICAgICAvLyB0aGVuIGRlc3RpbmF0aW9uIHdvdWxkIHByZXNlcnZlIGFueSBu
b24tU3BlY3VsYXRlZFR5cGUga25vd2xlZGdlIG9mIHNvdXJjZS4KKyAgICAgICAgLy8gQXMgaXQg
c3RhbmRzLCB0aGUgY29kZSBiZWxvdyBmb3JnZXRzIGFueSBub24tU3BlY3VsYXRlZFR5cGUga25v
d2xlZGdlIHRoYXQKKyAgICAgICAgLy8gc291cmNlIHdvdWxkIGhhdmUgaGFkLiBGb3J0dW5hdGVs
eSwgdGhvdWdoLCBmb3IgdGhpbmdzIGxpa2Ugc3RyaW5ncyBhbmQKKyAgICAgICAgLy8gbnVtYmVy
cyBhbmQgYm9vbGVhbnMsIHdlIGRvbid0IGNhcmUgYWJvdXQgdGhlIG5vbi1TcGVjdWxhdGVkVHlw
ZSBrbm93ZWRnZToKKyAgICAgICAgLy8gdGhlIHN0cnVjdHVyZSB3b24ndCB0ZWxsIHVzIGFueXRo
aW5nIHdlIGRvbid0IGFscmVhZHkga25vdywgYW5kIG5laXRoZXIKKyAgICAgICAgLy8gd2lsbCBB
cnJheU1vZGVzLiBBbmQgaWYgdGhlIHNvdXJjZSB3YXMgYSBtZWFuaW5nZnVsIGNvbnN0YW50IHRo
ZW4gd2UKKyAgICAgICAgLy8gd291bGQgaGF2ZSBoYW5kbGVkIHRoYXQgYWJvdmUuIFVuZm9ydHVu
YXRlbHksIHRoaXMgZG9lcyBtZWFuIHRoYXQKKyAgICAgICAgLy8gVG9QcmltaXRpdmUgd2lsbCBj
dXJyZW50bHkgZm9yZ2V0IHN0cmluZyBjb25zdGFudHMuIEJ1dCB0aGF0J3Mgbm90IGEgYmlnCisg
ICAgICAgIC8vIGRlYWwgc2luY2Ugd2UgZG9uJ3QgZG8gYW55IG9wdGltaXphdGlvbiBvbiB0aG9z
ZSBjdXJyZW50bHkuCisgICAgICAgIAogICAgICAgICBTcGVjdWxhdGVkVHlwZSB0eXBlID0gc291
cmNlLm1fdHlwZTsKICAgICAgICAgaWYgKHR5cGUgJiB+KFNwZWNOdW1iZXIgfCBTcGVjU3RyaW5n
IHwgU3BlY0Jvb2xlYW4pKSB7CiAgICAgICAgICAgICB0eXBlICY9IChTcGVjTnVtYmVyIHwgU3Bl
Y1N0cmluZyB8IFNwZWNCb29sZWFuKTsKICAgICAgICAgICAgIHR5cGUgfD0gU3BlY1N0cmluZzsK
ICAgICAgICAgfQogICAgICAgICBkZXN0aW5hdGlvbi5zZXQodHlwZSk7Ci0gICAgICAgIG5vZGUu
c2V0Q2FuRXhpdChmYWxzZSk7CisgICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwogICAg
ICAgICBicmVhazsKICAgICB9CiAgICAgICAgICAgICAKICAgICBjYXNlIFN0ckNhdDoKLSAgICAg
ICAgbm9kZS5zZXRDYW5FeGl0KGZhbHNlKTsKLSAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNl
dChTcGVjU3RyaW5nKTsKKyAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CisgICAgICAg
IGZvck5vZGUobm9kZSkuc2V0KFNwZWNTdHJpbmcpOwogICAgICAgICBicmVhazsKICAgICAgICAg
ICAgIAogICAgIGNhc2UgTmV3QXJyYXk6Ci0gICAgICAgIG5vZGUuc2V0Q2FuRXhpdCh0cnVlKTsK
LSAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihu
b2RlLmNvZGVPcmlnaW4pLT5hcnJheVN0cnVjdHVyZUZvckluZGV4aW5nVHlwZUR1cmluZ0FsbG9j
YXRpb24obm9kZS5pbmRleGluZ1R5cGUoKSkpOworICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRy
dWUpOworICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KG1fZ3JhcGguZ2xvYmFsT2JqZWN0
Rm9yKG5vZGUtPmNvZGVPcmlnaW4pLT5hcnJheVN0cnVjdHVyZUZvckluZGV4aW5nVHlwZUR1cmlu
Z0FsbG9jYXRpb24obm9kZS0+aW5kZXhpbmdUeXBlKCkpKTsKICAgICAgICAgbV9oYXZlU3RydWN0
dXJlcyA9IHRydWU7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAKICAgICBjYXNlIE5ld0FycmF5
QnVmZmVyOgotICAgICAgICBub2RlLnNldENhbkV4aXQodHJ1ZSk7Ci0gICAgICAgIGZvck5vZGUo
bm9kZUluZGV4KS5zZXQobV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS5jb2RlT3JpZ2luKS0+
YXJyYXlTdHJ1Y3R1cmVGb3JJbmRleGluZ1R5cGVEdXJpbmdBbGxvY2F0aW9uKG5vZGUuaW5kZXhp
bmdUeXBlKCkpKTsKKyAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKKyAgICAgICAgZm9y
Tm9kZShub2RlKS5zZXQobV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+Y29kZU9yaWdpbikt
PmFycmF5U3RydWN0dXJlRm9ySW5kZXhpbmdUeXBlRHVyaW5nQWxsb2NhdGlvbihub2RlLT5pbmRl
eGluZ1R5cGUoKSkpOwogICAgICAgICBtX2hhdmVTdHJ1Y3R1cmVzID0gdHJ1ZTsKICAgICAgICAg
YnJlYWs7CiAKICAgICBjYXNlIE5ld0FycmF5V2l0aFNpemU6Ci0gICAgICAgIG5vZGUuc2V0Q2Fu
RXhpdCh0cnVlKTsKLSAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY0lu
dDMyKTsKLSAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChTcGVjQXJyYXkpOworICAgICAg
ICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOworICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMSgp
KS5maWx0ZXIoU3BlY0ludDMyKTsKKyAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0FycmF5
KTsKICAgICAgICAgbV9oYXZlU3RydWN0dXJlcyA9IHRydWU7CiAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgCiAgICAgY2FzZSBOZXdSZWdleHA6Ci0gICAgICAgIG5vZGUuc2V0Q2FuRXhpdChm
YWxzZSk7Ci0gICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQobV9ncmFwaC5nbG9iYWxPYmpl
Y3RGb3Iobm9kZS5jb2RlT3JpZ2luKS0+cmVnRXhwU3RydWN0dXJlKCkpOworICAgICAgICBub2Rl
LT5zZXRDYW5FeGl0KGZhbHNlKTsKKyAgICAgICAgZm9yTm9kZShub2RlKS5zZXQobV9ncmFwaC5n
bG9iYWxPYmplY3RGb3Iobm9kZS0+Y29kZU9yaWdpbiktPnJlZ0V4cFN0cnVjdHVyZSgpKTsKICAg
ICAgICAgbV9oYXZlU3RydWN0dXJlcyA9IHRydWU7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgCiAgICAgY2FzZSBDb252ZXJ0VGhpczogewotICAgICAgICBOb2RlJiBjaGlsZCA9IG1fZ3Jh
cGhbbm9kZS5jaGlsZDEoKV07Ci0gICAgICAgIEFic3RyYWN0VmFsdWUmIHNvdXJjZSA9IGZvck5v
ZGUobm9kZS5jaGlsZDEoKSk7Ci0gICAgICAgIEFic3RyYWN0VmFsdWUmIGRlc3RpbmF0aW9uID0g
Zm9yTm9kZShub2RlSW5kZXgpOworICAgICAgICBOb2RlKiBjaGlsZCA9IG5vZGUtPmNoaWxkMSgp
Lm5vZGUoKTsKKyAgICAgICAgQWJzdHJhY3RWYWx1ZSYgc291cmNlID0gZm9yTm9kZShub2RlLT5j
aGlsZDEoKSk7CisgICAgICAgIEFic3RyYWN0VmFsdWUmIGRlc3RpbmF0aW9uID0gZm9yTm9kZShu
b2RlKTsKICAgICAgICAgICAgIAogICAgICAgICBpZiAoaXNPYmplY3RTcGVjdWxhdGlvbihzb3Vy
Y2UubV90eXBlKSkgewogICAgICAgICAgICAgLy8gVGhpcyBpcyB0aGUgc2ltcGxlIGNhc2UuIFdl
IGFscmVhZHkga25vdyB0aGF0IHRoZSBzb3VyY2UgaXMgYW4KICAgICAgICAgICAgIC8vIG9iamVj
dCwgc28gdGhlcmUncyBub3RoaW5nIHRvIGRvLiBJIGRvbid0IHRoaW5rIHRoaXMgY2FzZSB3aWxs
CiAgICAgICAgICAgICAvLyBiZSBoaXQsIGJ1dCB0aGVuIGFnYWluLCB5b3UgbmV2ZXIga25vdy4K
ICAgICAgICAgICAgIGRlc3RpbmF0aW9uID0gc291cmNlOwotICAgICAgICAgICAgbm9kZS5zZXRD
YW5FeGl0KGZhbHNlKTsKKyAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwogICAg
ICAgICAgICAgbV9mb3VuZENvbnN0YW50cyA9IHRydWU7IC8vIFRlbGwgdGhlIGNvbnN0YW50IGZv
bGRlciB0byB0dXJuIHRoaXMgaW50byBJZGVudGl0eS4KICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICB9CiAgICAgICAgIAotICAgICAgICBub2RlLnNldENhbkV4aXQodHJ1ZSk7CisgICAgICAg
IG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7CiAgICAgICAgIAotICAgICAgICBpZiAoaXNPdGhlclNw
ZWN1bGF0aW9uKGNoaWxkLnByZWRpY3Rpb24oKSkpIHsKKyAgICAgICAgaWYgKGlzT3RoZXJTcGVj
dWxhdGlvbihjaGlsZC0+cHJlZGljdGlvbigpKSkgewogICAgICAgICAgICAgc291cmNlLmZpbHRl
cihTcGVjT3RoZXIpOwogICAgICAgICAgICAgZGVzdGluYXRpb24uc2V0KFNwZWNPYmplY3RPdGhl
cik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgaWYg
KGlzT2JqZWN0U3BlY3VsYXRpb24oY2hpbGQucHJlZGljdGlvbigpKSkgeworICAgICAgICBpZiAo
aXNPYmplY3RTcGVjdWxhdGlvbihjaGlsZC0+cHJlZGljdGlvbigpKSkgewogICAgICAgICAgICAg
c291cmNlLmZpbHRlcihTcGVjT2JqZWN0TWFzayk7CiAgICAgICAgICAgICBkZXN0aW5hdGlvbiA9
IHNvdXJjZTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTMzNCwxMCArMTM1MywxMCBAQCBib29s
IEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgfQogCiAgICAgY2FzZSBD
cmVhdGVUaGlzOiB7Ci0gICAgICAgIEFic3RyYWN0VmFsdWUmIHNvdXJjZSA9IGZvck5vZGUobm9k
ZS5jaGlsZDEoKSk7Ci0gICAgICAgIEFic3RyYWN0VmFsdWUmIGRlc3RpbmF0aW9uID0gZm9yTm9k
ZShub2RlSW5kZXgpOworICAgICAgICBBYnN0cmFjdFZhbHVlJiBzb3VyY2UgPSBmb3JOb2RlKG5v
ZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgQWJzdHJhY3RWYWx1ZSYgZGVzdGluYXRpb24gPSBmb3JO
b2RlKG5vZGUpOwogICAgICAgICAKLSAgICAgICAgbm9kZS5zZXRDYW5FeGl0KCFpc0NlbGxTcGVj
dWxhdGlvbihzb3VyY2UubV90eXBlKSk7CisgICAgICAgIG5vZGUtPnNldENhbkV4aXQoIWlzQ2Vs
bFNwZWN1bGF0aW9uKHNvdXJjZS5tX3R5cGUpKTsKICAgICAgICAgICAgIAogICAgICAgICBzb3Vy
Y2UuZmlsdGVyKFNwZWNGdW5jdGlvbik7CiAgICAgICAgIGRlc3RpbmF0aW9uLnNldChTcGVjRmlu
YWxPYmplY3QpOwpAQCAtMTM0NSw0MSArMTM2NCw0MSBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4
ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgfQogICAgICAgICAKICAgICBjYXNlIEluaGVyaXRvcklE
V2F0Y2hwb2ludDoKLSAgICAgICAgbm9kZS5zZXRDYW5FeGl0KHRydWUpOworICAgICAgICBub2Rl
LT5zZXRDYW5FeGl0KHRydWUpOwogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgTmV3T2JqZWN0
OgotICAgICAgICBub2RlLnNldENhbkV4aXQoZmFsc2UpOwotICAgICAgICBmb3JOb2RlKG5vZGVJ
bmRleCkuc2V0KG5vZGUuc3RydWN0dXJlKCkpOworICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZh
bHNlKTsKKyAgICAgICAgZm9yTm9kZShub2RlKS5zZXQobm9kZS0+c3RydWN0dXJlKCkpOwogICAg
ICAgICBtX2hhdmVTdHJ1Y3R1cmVzID0gdHJ1ZTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgIAog
ICAgIGNhc2UgQ3JlYXRlQWN0aXZhdGlvbjoKLSAgICAgICAgbm9kZS5zZXRDYW5FeGl0KGZhbHNl
KTsKLSAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0Rm9yKG5vZGUuY29kZU9yaWdpbiktPmFjdGl2YXRpb25TdHJ1Y3R1cmUoKSk7CisgICAgICAg
IG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOworICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0Rm9yKG5vZGUtPmNvZGVPcmlnaW4pLT5hY3RpdmF0aW9uU3Ry
dWN0dXJlKCkpOwogICAgICAgICBtX2hhdmVTdHJ1Y3R1cmVzID0gdHJ1ZTsKICAgICAgICAgYnJl
YWs7CiAgICAgICAgIAogICAgIGNhc2UgQ3JlYXRlQXJndW1lbnRzOgotICAgICAgICBub2RlLnNl
dENhbkV4aXQoZmFsc2UpOwotICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3RGb3Iobm9kZS5jb2RlT3JpZ2luKS0+YXJndW1lbnRzU3RydWN0dXJl
KCkpOworICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKKyAgICAgICAgZm9yTm9kZShu
b2RlKS5zZXQobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdEZvcihub2RlLT5jb2RlT3JpZ2luKS0+
YXJndW1lbnRzU3RydWN0dXJlKCkpOwogICAgICAgICBtX2hhdmVTdHJ1Y3R1cmVzID0gdHJ1ZTsK
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIAogICAgIGNhc2UgVGVhck9mZkFjdGl2YXRpb246CiAg
ICAgY2FzZSBUZWFyT2ZmQXJndW1lbnRzOgotICAgICAgICBub2RlLnNldENhbkV4aXQoZmFsc2Up
OworICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgLy8gRG9lcyBub3Ro
aW5nIHRoYXQgaXMgdXNlci12aXNpYmxlLgogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgQ2hl
Y2tBcmd1bWVudHNOb3RDcmVhdGVkOgogICAgICAgICBpZiAoaXNFbXB0eVNwZWN1bGF0aW9uKAog
ICAgICAgICAgICAgICAgIG1fdmFyaWFibGVzLm9wZXJhbmQoCi0gICAgICAgICAgICAgICAgICAg
IG1fZ3JhcGguYXJndW1lbnRzUmVnaXN0ZXJGb3Iobm9kZS5jb2RlT3JpZ2luKSkubV90eXBlKSkg
ewotICAgICAgICAgICAgbm9kZS5zZXRDYW5FeGl0KGZhbHNlKTsKKyAgICAgICAgICAgICAgICAg
ICAgbV9ncmFwaC5hcmd1bWVudHNSZWdpc3RlckZvcihub2RlLT5jb2RlT3JpZ2luKSkubV90eXBl
KSkgeworICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgICAgICBt
X2ZvdW5kQ29uc3RhbnRzID0gdHJ1ZTsKICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBub2Rl
LnNldENhbkV4aXQodHJ1ZSk7CisgICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOwog
ICAgICAgICBicmVhazsKICAgICAgICAgCiAgICAgY2FzZSBHZXRNeUFyZ3VtZW50c0xlbmd0aDoK
QEAgLTEzODcsMTExICsxNDA2LDExMSBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5z
aWduZWQgaW5kCiAgICAgICAgIC8vIHRoZSBhcmd1bWVudHMgYSBiaXQuIE5vdGUgdGhhdCB0aGlz
IGlzIG5vdCBzdWZmaWNpZW50IHRvIGZvcmNlIGNvbnN0YW50IGZvbGRpbmcKICAgICAgICAgLy8g
b2YgR2V0TXlBcmd1bWVudHNMZW5ndGgsIGJlY2F1c2UgR2V0TXlBcmd1bWVudHNMZW5ndGggaXMg
YSBjbG9iYmVyaW5nIG9wZXJhdGlvbi4KICAgICAgICAgLy8gV2UgcGVyZm9ybSBmdXJ0aGVyIG9w
dGltaXphdGlvbnMgb24gdGhpcyBsYXRlciBvbi4KLSAgICAgICAgaWYgKG5vZGUuY29kZU9yaWdp
bi5pbmxpbmVDYWxsRnJhbWUpCi0gICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KGpz
TnVtYmVyKG5vZGUuY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50cy5zaXplKCkg
LSAxKSk7CisgICAgICAgIGlmIChub2RlLT5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSkKKyAg
ICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KGpzTnVtYmVyKG5vZGUtPmNvZGVPcmlnaW4uaW5s
aW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgpIC0gMSkpOwogICAgICAgICBlbHNlCi0gICAg
ICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFNwZWNJbnQzMik7CisgICAgICAgICAgICBm
b3JOb2RlKG5vZGUpLnNldChTcGVjSW50MzIpOwogICAgICAgICBub2RlLnNldENhbkV4aXQoCiAg
ICAgICAgICAgICAhaXNFbXB0eVNwZWN1bGF0aW9uKAogICAgICAgICAgICAgICAgIG1fdmFyaWFi
bGVzLm9wZXJhbmQoCi0gICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguYXJndW1lbnRzUmVnaXN0
ZXJGb3Iobm9kZS5jb2RlT3JpZ2luKSkubV90eXBlKSk7CisgICAgICAgICAgICAgICAgICAgIG1f
Z3JhcGguYXJndW1lbnRzUmVnaXN0ZXJGb3Iobm9kZS0+Y29kZU9yaWdpbikpLm1fdHlwZSkpOwog
ICAgICAgICBicmVhazsKICAgICAgICAgCiAgICAgY2FzZSBHZXRNeUFyZ3VtZW50c0xlbmd0aFNh
ZmU6Ci0gICAgICAgIG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7CisgICAgICAgIG5vZGUtPnNldENh
bkV4aXQoZmFsc2UpOwogICAgICAgICAvLyBUaGlzIHBvdGVudGlhbGx5IGNsb2JiZXJzIGFsbCBz
dHJ1Y3R1cmVzIGlmIHRoZSBhcmd1bWVudHMgb2JqZWN0IGhhZCBhIGdldHRlcgogICAgICAgICAv
LyBpbnN0YWxsZWQgb24gdGhlIGxlbmd0aCBwcm9wZXJ0eS4KLSAgICAgICAgY2xvYmJlcldvcmxk
KG5vZGUuY29kZU9yaWdpbiwgaW5kZXhJbkJsb2NrKTsKKyAgICAgICAgY2xvYmJlcldvcmxkKG5v
ZGUtPmNvZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7CiAgICAgICAgIC8vIFdlIGN1cnJlbnRseSBt
YWtlIG5vIGd1YXJhbnRlZSBhYm91dCB3aGF0IHRoaXMgcmV0dXJucyBiZWNhdXNlIGl0IGRvZXMg
bm90CiAgICAgICAgIC8vIHNwZWN1bGF0ZSB0aGF0IHRoZSBsZW5ndGggcHJvcGVydHkgaXMgYWN0
dWFsbHkgYSBsZW5ndGguCi0gICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5tYWtlVG9wKCk7Cisg
ICAgICAgIGZvck5vZGUobm9kZSkubWFrZVRvcCgpOwogICAgICAgICBicmVhazsKICAgICAgICAg
CiAgICAgY2FzZSBHZXRNeUFyZ3VtZW50QnlWYWw6Ci0gICAgICAgIG5vZGUuc2V0Q2FuRXhpdCh0
cnVlKTsKKyAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKICAgICAgICAgLy8gV2Uga25v
dyB0aGF0IHRoaXMgZXhlY3V0YWJsZSBkb2VzIG5vdCBlc2NhcGUgaXRzIGFyZ3VtZW50cywgc28g
d2UgY2FuIG9wdGltaXplCiAgICAgICAgIC8vIHRoZSBhcmd1bWVudHMgYSBiaXQuIE5vdGUgdGhh
dCB0aGlzIGVuZHMgdXAgYmVpbmcgZnVydGhlciBvcHRpbWl6ZWQgYnkgdGhlCiAgICAgICAgIC8v
IEFyZ3VtZW50c1NpbXBsaWZpY2F0aW9uUGhhc2UuCi0gICAgICAgIGZvck5vZGUobm9kZS5jaGls
ZDEoKSkuZmlsdGVyKFNwZWNJbnQzMik7Ci0gICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5tYWtl
VG9wKCk7CisgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRlcihTcGVjSW50MzIp
OworICAgICAgICBmb3JOb2RlKG5vZGUpLm1ha2VUb3AoKTsKICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIAogICAgIGNhc2UgR2V0TXlBcmd1bWVudEJ5VmFsU2FmZToKLSAgICAgICAgbm9kZS5zZXRD
YW5FeGl0KHRydWUpOworICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOwogICAgICAgICAv
LyBUaGlzIHBvdGVudGlhbGx5IGNsb2JiZXJzIGFsbCBzdHJ1Y3R1cmVzIGlmIHRoZSBwcm9wZXJ0
eSB3ZSdyZSBhY2Nlc3NpbmcgaGFzCiAgICAgICAgIC8vIGEgZ2V0dGVyLiBXZSBkb24ndCBzcGVj
dWxhdGUgYWdhaW5zdCB0aGlzLgotICAgICAgICBjbG9iYmVyV29ybGQobm9kZS5jb2RlT3JpZ2lu
LCBpbmRleEluQmxvY2spOworICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+Y29kZU9yaWdpbiwg
aW5kZXhJbkJsb2NrKTsKICAgICAgICAgLy8gQnV0IHdlIGRvIHNwZWN1bGF0ZSB0aGF0IHRoZSBp
bmRleCBpcyBhbiBpbnRlZ2VyLgotICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRl
cihTcGVjSW50MzIpOworICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5maWx0ZXIoU3Bl
Y0ludDMyKTsKICAgICAgICAgLy8gQW5kIHRoZSByZXN1bHQgaXMgdW5rbm93bi4KLSAgICAgICAg
Zm9yTm9kZShub2RlSW5kZXgpLm1ha2VUb3AoKTsKKyAgICAgICAgZm9yTm9kZShub2RlKS5tYWtl
VG9wKCk7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAKICAgICBjYXNlIE5ld0Z1bmN0aW9uOgog
ICAgIGNhc2UgTmV3RnVuY3Rpb25FeHByZXNzaW9uOgogICAgIGNhc2UgTmV3RnVuY3Rpb25Ob0No
ZWNrOgotICAgICAgICBub2RlLnNldENhbkV4aXQoZmFsc2UpOwotICAgICAgICBmb3JOb2RlKG5v
ZGVJbmRleCkuc2V0KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3RGb3Iobm9kZS5jb2RlT3JpZ2lu
KS0+ZnVuY3Rpb25TdHJ1Y3R1cmUoKSk7CisgICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2Up
OworICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0Rm9y
KG5vZGUtPmNvZGVPcmlnaW4pLT5mdW5jdGlvblN0cnVjdHVyZSgpKTsKICAgICAgICAgYnJlYWs7
CiAgICAgICAgIAogICAgIGNhc2UgR2V0Q2FsbGVlOgotICAgICAgICBub2RlLnNldENhbkV4aXQo
ZmFsc2UpOwotICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFNwZWNGdW5jdGlvbik7Cisg
ICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOworICAgICAgICBmb3JOb2RlKG5vZGUpLnNl
dChTcGVjRnVuY3Rpb24pOwogICAgICAgICBicmVhazsKICAgICAgICAgCiAgICAgY2FzZSBTZXRD
YWxsZWU6CiAgICAgY2FzZSBTZXRNeVNjb3BlOgotICAgICAgICBub2RlLnNldENhbkV4aXQoZmFs
c2UpOworICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICAKICAgICBjYXNlIEdldFNjb3BlOiAvLyBGSVhNRTogV2UgY291bGQgZ2V0IHJp
ZCBvZiB0aGVzZSBpZiB3ZSBrbm93IHRoYXQgdGhlIEpTRnVuY3Rpb24gaXMgYSBjb25zdGFudC4g
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwNjIwMgogICAgIGNhc2Ug
R2V0TXlTY29wZToKICAgICBjYXNlIFNraXBUb3BTY29wZToKLSAgICAgICAgbm9kZS5zZXRDYW5F
eGl0KGZhbHNlKTsKLSAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChTcGVjQ2VsbE90aGVy
KTsKKyAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CisgICAgICAgIGZvck5vZGUobm9k
ZSkuc2V0KFNwZWNDZWxsT3RoZXIpOwogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgU2tpcFNj
b3BlOiB7Ci0gICAgICAgIG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7Ci0gICAgICAgIEpTVmFsdWUg
Y2hpbGQgPSBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLnZhbHVlKCk7Ci0gICAgICAgIGlmIChjaGls
ZCAmJiB0cnlTZXRDb25zdGFudChub2RlSW5kZXgsIEpTVmFsdWUoanNDYXN0PEpTU2NvcGUqPihj
aGlsZC5hc0NlbGwoKSktPm5leHQoKSkpKSB7CisgICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFs
c2UpOworICAgICAgICBKU1ZhbHVlIGNoaWxkID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSkudmFs
dWUoKTsKKyAgICAgICAgaWYgKGNoaWxkICYmIHRyeVNldENvbnN0YW50KG5vZGUsIEpTVmFsdWUo
anNDYXN0PEpTU2NvcGUqPihjaGlsZC5hc0NlbGwoKSktPm5leHQoKSkpKSB7CiAgICAgICAgICAg
ICBtX2ZvdW5kQ29uc3RhbnRzID0gdHJ1ZTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9
Ci0gICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoU3BlY0NlbGxPdGhlcik7CisgICAgICAg
IGZvck5vZGUobm9kZSkuc2V0KFNwZWNDZWxsT3RoZXIpOwogICAgICAgICBicmVhazsKICAgICB9
CiAKICAgICBjYXNlIEdldFNjb3BlUmVnaXN0ZXJzOgotICAgICAgICBub2RlLnNldENhbkV4aXQo
ZmFsc2UpOwotICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjQ2VsbCk7
Ci0gICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5jbGVhcigpOyAvLyBUaGUgcmVzdWx0IGlzIG5v
dCBhIEpTIHZhbHVlLgorICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKKyAgICAgICAg
Zm9yTm9kZShub2RlLT5jaGlsZDEoKSkuZmlsdGVyKFNwZWNDZWxsKTsKKyAgICAgICAgZm9yTm9k
ZShub2RlKS5jbGVhcigpOyAvLyBUaGUgcmVzdWx0IGlzIG5vdCBhIEpTIHZhbHVlLgogICAgICAg
ICBicmVhazsKIAogICAgIGNhc2UgR2V0U2NvcGVkVmFyOgotICAgICAgICBub2RlLnNldENhbkV4
aXQoZmFsc2UpOwotICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkubWFrZVRvcCgpOworICAgICAg
ICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKKyAgICAgICAgZm9yTm9kZShub2RlKS5tYWtlVG9w
KCk7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAgY2FzZSBQdXRTY29wZWRWYXI6
Ci0gICAgICAgIG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7Ci0gICAgICAgIGNsb2JiZXJDYXB0dXJl
ZFZhcnMobm9kZS5jb2RlT3JpZ2luKTsKKyAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7
CisgICAgICAgIGNsb2JiZXJDYXB0dXJlZFZhcnMobm9kZS0+Y29kZU9yaWdpbik7CiAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgCiAgICAgY2FzZSBHZXRCeUlkOgogICAgIGNhc2UgR2V0QnlJ
ZEZsdXNoOgotICAgICAgICBub2RlLnNldENhbkV4aXQodHJ1ZSk7Ci0gICAgICAgIGlmICghbm9k
ZS5wcmVkaWN0aW9uKCkpIHsKKyAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKKyAgICAg
ICAgaWYgKCFub2RlLT5wcmVkaWN0aW9uKCkpIHsKICAgICAgICAgICAgIG1faXNWYWxpZCA9IGZh
bHNlOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKGlzQ2VsbFNw
ZWN1bGF0aW9uKG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ucHJlZGljdGlvbigpKSkgewotICAgICAg
ICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY0NlbGwpOworICAgICAgICBp
ZiAoaXNDZWxsU3BlY3VsYXRpb24obm9kZS0+Y2hpbGQxKCktPnByZWRpY3Rpb24oKSkpIHsKKyAg
ICAgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRlcihTcGVjQ2VsbCk7CiAKLSAg
ICAgICAgICAgIGlmIChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGZvck5vZGUobm9kZS5jaGlsZDEo
KSkuYmVzdFByb3ZlblN0cnVjdHVyZSgpKSB7CisgICAgICAgICAgICBpZiAoU3RydWN0dXJlKiBz
dHJ1Y3R1cmUgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5iZXN0UHJvdmVuU3RydWN0dXJlKCkp
IHsKICAgICAgICAgICAgICAgICBHZXRCeUlkU3RhdHVzIHN0YXR1cyA9IEdldEJ5SWRTdGF0dXM6
OmNvbXB1dGVGb3IoCiAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgubV9nbG9iYWxEYXRhLCBz
dHJ1Y3R1cmUsCi0gICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgubV9jb2RlQmxvY2stPmlkZW50
aWZpZXIobm9kZS5pZGVudGlmaWVyTnVtYmVyKCkpKTsKKyAgICAgICAgICAgICAgICAgICAgbV9n
cmFwaC5tX2NvZGVCbG9jay0+aWRlbnRpZmllcihub2RlLT5pZGVudGlmaWVyTnVtYmVyKCkpKTsK
ICAgICAgICAgICAgICAgICBpZiAoc3RhdHVzLmlzU2ltcGxlKCkpIHsKICAgICAgICAgICAgICAg
ICAgICAgLy8gQXNzZXJ0IHRoaW5ncyB0aGF0IHdlIGNhbid0IGhhbmRsZSBhbmQgdGhhdCB0aGUg
Y29tcHV0ZUZvcigpIG1ldGhvZAogICAgICAgICAgICAgICAgICAgICAvLyBhYm92ZSB3b24ndCBi
ZSBhYmxlIHRvIHJldHVybi4KQEAgLTE0OTksMjMgKzE1MTgsMjMgQEAgYm9vbCBBYnN0cmFjdFN0
YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICAgICAgICAgICAgICBBU1NFUlQoc3Rh
dHVzLmNoYWluKCkuaXNFbXB0eSgpKTsKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAg
ICAgICAgICAgIGlmIChzdGF0dXMuc3BlY2lmaWNWYWx1ZSgpKQotICAgICAgICAgICAgICAgICAg
ICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChzdGF0dXMuc3BlY2lmaWNWYWx1ZSgpKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KHN0YXR1cy5zcGVjaWZpY1Zh
bHVlKCkpOwogICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAg
ICBmb3JOb2RlKG5vZGVJbmRleCkubWFrZVRvcCgpOwotICAgICAgICAgICAgICAgICAgICBmb3JO
b2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihzdGF0dXMuc3RydWN0dXJlU2V0KCkpOworICAgICAg
ICAgICAgICAgICAgICAgICAgZm9yTm9kZShub2RlKS5tYWtlVG9wKCk7CisgICAgICAgICAgICAg
ICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRlcihzdGF0dXMuc3RydWN0dXJlU2V0
KCkpOwogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgbV9mb3VuZENv
bnN0YW50cyA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICBjbG9iYmVyV29ybGQobm9k
ZS5jb2RlT3JpZ2luLCBpbmRleEluQmxvY2spOwotICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCku
bWFrZVRvcCgpOworICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+Y29kZU9yaWdpbiwgaW5kZXhJ
bkJsb2NrKTsKKyAgICAgICAgZm9yTm9kZShub2RlKS5tYWtlVG9wKCk7CiAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgCiAgICAgY2FzZSBHZXRBcnJheUxlbmd0aDoKLSAgICAgICAgbm9kZS5z
ZXRDYW5FeGl0KHRydWUpOyAvLyBMaWVzLCBidXQgaXQncyB0cnVlIGZvciB0aGUgY29tbW9uIGNh
c2Ugb2YgSlNBcnJheSwgc28gaXQncyBnb29kIGVub3VnaC4KLSAgICAgICAgZm9yTm9kZShub2Rl
SW5kZXgpLnNldChTcGVjSW50MzIpOworICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOyAv
LyBMaWVzLCBidXQgaXQncyB0cnVlIGZvciB0aGUgY29tbW9uIGNhc2Ugb2YgSlNBcnJheSwgc28g
aXQncyBnb29kIGVub3VnaC4KKyAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0ludDMyKTsK
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIAogICAgIGNhc2UgQ2hlY2tFeGVjdXRhYmxlOiB7CkBA
IC0xNTIzLDIzICsxNTQyLDIzIEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25l
ZCBpbmQKICAgICAgICAgLy8gbW9yZSB0aG9yb3VnaGx5LiBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTA2MjAwCiAgICAgICAgIC8vIEZJWE1FOiBXZSBjb3VsZCBlbGlt
aW5hdGUgdGhlc2UgZW50aXJlbHkgaWYgd2Uga25vdyB0aGUgZXhhY3QgdmFsdWUgdGhhdCBmbG93
cyBpbnRvIHRoaXMuCiAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xMDYyMDEKLSAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3Bl
Y0NlbGwpOwotICAgICAgICBub2RlLnNldENhbkV4aXQodHJ1ZSk7CisgICAgICAgIGZvck5vZGUo
bm9kZS0+Y2hpbGQxKCkpLmZpbHRlcihTcGVjQ2VsbCk7CisgICAgICAgIG5vZGUtPnNldENhbkV4
aXQodHJ1ZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIAogICAgIGNhc2UgQ2hlY2tTdHJ1Y3R1
cmU6CiAgICAgY2FzZSBGb3J3YXJkQ2hlY2tTdHJ1Y3R1cmU6IHsKICAgICAgICAgLy8gRklYTUU6
IFdlIHNob3VsZCBiZSBhYmxlIHRvIHByb3BhZ2F0ZSB0aGUgc3RydWN0dXJlIHNldHMgb2YgY29u
c3RhbnRzIChpLmUuIHByb3RvdHlwZXMpLgotICAgICAgICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSA9
IGZvck5vZGUobm9kZS5jaGlsZDEoKSk7CisgICAgICAgIEFic3RyYWN0VmFsdWUmIHZhbHVlID0g
Zm9yTm9kZShub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgIC8vIElmIHRoaXMgc3RydWN0dXJlIGNo
ZWNrIGlzIGF0dGVtcHRpbmcgdG8gcHJvdmUga25vd2xlZGdlIGFscmVhZHkgaGVsZCBpbgogICAg
ICAgICAvLyB0aGUgZnV0dXJlUG9zc2libGVTdHJ1Y3R1cmUgc2V0IHRoZW4gdGhlIGNvbnN0YW50
IGZvbGRpbmcgcGhhc2Ugc2hvdWxkCiAgICAgICAgIC8vIHR1cm4gdGhpcyBpbnRvIGEgd2F0Y2hw
b2ludCBpbnN0ZWFkLgotICAgICAgICBTdHJ1Y3R1cmVTZXQmIHNldCA9IG5vZGUuc3RydWN0dXJl
U2V0KCk7CisgICAgICAgIFN0cnVjdHVyZVNldCYgc2V0ID0gbm9kZS0+c3RydWN0dXJlU2V0KCk7
CiAgICAgICAgIGlmICh2YWx1ZS5tX2Z1dHVyZVBvc3NpYmxlU3RydWN0dXJlLmlzU3Vic2V0T2Yo
c2V0KQogICAgICAgICAgICAgfHwgdmFsdWUubV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuaXNTdWJz
ZXRPZihzZXQpKQogICAgICAgICAgICAgbV9mb3VuZENvbnN0YW50cyA9IHRydWU7Ci0gICAgICAg
IG5vZGUuc2V0Q2FuRXhpdCgKKyAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCgKICAgICAgICAgICAg
ICF2YWx1ZS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5pc1N1YnNldE9mKHNldCkKICAgICAgICAg
ICAgIHx8ICFpc0NlbGxTcGVjdWxhdGlvbih2YWx1ZS5tX3R5cGUpKTsKICAgICAgICAgdmFsdWUu
ZmlsdGVyKHNldCk7CkBAIC0xNTQ5LDcgKzE1NjgsNyBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4
ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgIAogICAgIGNhc2UgU3RydWN0dXJlVHJhbnNpdGlv
bldhdGNocG9pbnQ6CiAgICAgY2FzZSBGb3J3YXJkU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9p
bnQ6IHsKLSAgICAgICAgQWJzdHJhY3RWYWx1ZSYgdmFsdWUgPSBmb3JOb2RlKG5vZGUuY2hpbGQx
KCkpOworICAgICAgICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSA9IGZvck5vZGUobm9kZS0+Y2hpbGQx
KCkpOwogCiAgICAgICAgIC8vIEl0J3Mgb25seSB2YWxpZCB0byBpc3N1ZSBhIHN0cnVjdHVyZSB0
cmFuc2l0aW9uIHdhdGNocG9pbnQgaWYgd2UgYWxyZWFkeQogICAgICAgICAvLyBrbm93IHRoYXQg
dGhlIHdhdGNocG9pbnQgY292ZXJzIGEgc3VwZXJzZXQgb2YgdGhlIHN0cnVjdHVyZXMga25vd24g
dG8KQEAgLTE1NTcsMTU0ICsxNTc2LDE1NCBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUo
dW5zaWduZWQgaW5kCiAgICAgICAgIC8vIEN1cnJlbnRseSwgd2Ugb25seSBpc3N1ZSBzaW5nbGV0
b24gd2F0Y2hwb2ludHMgKHRoYXQgY2hlY2sgb25lIHN0cnVjdHVyZSkKICAgICAgICAgLy8gYW5k
IG91ciBmdXR1cmVQb3NzaWJsZVN0cnVjdHVyZSBzZXQgY2FuIG9ubHkgY29udGFpbiB6ZXJvLCBv
bmUsIG9yIGFuCiAgICAgICAgIC8vIGluZmluaXR5IG9mIHN0cnVjdHVyZXMuCi0gICAgICAgIEFT
U0VSVCh2YWx1ZS5tX2Z1dHVyZVBvc3NpYmxlU3RydWN0dXJlLmlzU3Vic2V0T2YoU3RydWN0dXJl
U2V0KG5vZGUuc3RydWN0dXJlKCkpKSk7CisgICAgICAgIEFTU0VSVCh2YWx1ZS5tX2Z1dHVyZVBv
c3NpYmxlU3RydWN0dXJlLmlzU3Vic2V0T2YoU3RydWN0dXJlU2V0KG5vZGUtPnN0cnVjdHVyZSgp
KSkpOwogICAgICAgICAKICAgICAgICAgQVNTRVJUKHZhbHVlLmlzQ2xlYXIoKSB8fCBpc0NlbGxT
cGVjdWxhdGlvbih2YWx1ZS5tX3R5cGUpKTsgLy8gVmFsdWUgY291bGQgYmUgY2xlYXIgaWYgd2Un
dmUgcHJvdmVuIG11c3QtZXhpdCBkdWUgdG8gYSBzcGVjdWxhdGlvbiBzdGF0aWNhbGx5IGtub3du
IHRvIGJlIGJhZC4KLSAgICAgICAgdmFsdWUuZmlsdGVyKG5vZGUuc3RydWN0dXJlKCkpOworICAg
ICAgICB2YWx1ZS5maWx0ZXIobm9kZS0+c3RydWN0dXJlKCkpOwogICAgICAgICBtX2hhdmVTdHJ1
Y3R1cmVzID0gdHJ1ZTsKLSAgICAgICAgbm9kZS5zZXRDYW5FeGl0KHRydWUpOworICAgICAgICBu
b2RlLT5zZXRDYW5FeGl0KHRydWUpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgICAg
ICAKICAgICBjYXNlIFB1dFN0cnVjdHVyZToKICAgICBjYXNlIFBoYW50b21QdXRTdHJ1Y3R1cmU6
Ci0gICAgICAgIG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7Ci0gICAgICAgIGlmICghZm9yTm9kZShu
b2RlLmNoaWxkMSgpKS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5pc0NsZWFyKCkpIHsKKyAgICAg
ICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CisgICAgICAgIGlmICghZm9yTm9kZShub2RlLT5j
aGlsZDEoKSkubV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuaXNDbGVhcigpKSB7CiAgICAgICAgICAg
ICBjbG9iYmVyU3RydWN0dXJlcyhpbmRleEluQmxvY2spOwotICAgICAgICAgICAgZm9yTm9kZShu
b2RlLmNoaWxkMSgpKS5zZXQobm9kZS5zdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSgpLm5ld1N0cnVj
dHVyZSk7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5zZXQobm9kZS0+c3Ry
dWN0dXJlVHJhbnNpdGlvbkRhdGEoKS5uZXdTdHJ1Y3R1cmUpOwogICAgICAgICAgICAgbV9oYXZl
U3RydWN0dXJlcyA9IHRydWU7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBH
ZXRCdXR0ZXJmbHk6CiAgICAgY2FzZSBBbGxvY2F0ZVByb3BlcnR5U3RvcmFnZToKICAgICBjYXNl
IFJlYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2U6Ci0gICAgICAgIG5vZGUuc2V0Q2FuRXhpdCghaXND
ZWxsU3BlY3VsYXRpb24oZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKTsKLSAgICAgICAg
Zm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY0NlbGwpOwotICAgICAgICBmb3JOb2Rl
KG5vZGVJbmRleCkuY2xlYXIoKTsgLy8gVGhlIHJlc3VsdCBpcyBub3QgYSBKUyB2YWx1ZS4KKyAg
ICAgICAgbm9kZS0+c2V0Q2FuRXhpdCghaXNDZWxsU3BlY3VsYXRpb24oZm9yTm9kZShub2RlLT5j
aGlsZDEoKSkubV90eXBlKSk7CisgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRl
cihTcGVjQ2VsbCk7CisgICAgICAgIGZvck5vZGUobm9kZSkuY2xlYXIoKTsgLy8gVGhlIHJlc3Vs
dCBpcyBub3QgYSBKUyB2YWx1ZS4KICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBDaGVja0FycmF5
OiB7Ci0gICAgICAgIGlmIChub2RlLmFycmF5TW9kZSgpLmFscmVhZHlDaGVja2VkKG1fZ3JhcGgs
IG5vZGUsIGZvck5vZGUobm9kZS5jaGlsZDEoKSkpKSB7CisgICAgICAgIGlmIChub2RlLT5hcnJh
eU1vZGUoKS5hbHJlYWR5Q2hlY2tlZChtX2dyYXBoLCBub2RlLCBmb3JOb2RlKG5vZGUtPmNoaWxk
MSgpKSkpIHsKICAgICAgICAgICAgIG1fZm91bmRDb25zdGFudHMgPSB0cnVlOwotICAgICAgICAg
ICAgbm9kZS5zZXRDYW5FeGl0KGZhbHNlKTsKKyAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQo
ZmFsc2UpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgbm9kZS5zZXRD
YW5FeGl0KHRydWUpOyAvLyBMaWVzLCBidXQgdGhpcyBpcyBmb2xsb3dlZCBieSBvcGVyYXRpb25z
IChsaWtlIEdldEJ5VmFsKSB0aGF0IGFsd2F5cyBleGl0LCBzbyB0aGVyZSBpcyBubyBwb2ludCBp
biB1cyB0cnlpbmcgdG8gYmUgY2xldmVyIGhlcmUuCi0gICAgICAgIHN3aXRjaCAobm9kZS5hcnJh
eU1vZGUoKS50eXBlKCkpIHsKKyAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsgLy8gTGll
cywgYnV0IHRoaXMgaXMgZm9sbG93ZWQgYnkgb3BlcmF0aW9ucyAobGlrZSBHZXRCeVZhbCkgdGhh
dCBhbHdheXMgZXhpdCwgc28gdGhlcmUgaXMgbm8gcG9pbnQgaW4gdXMgdHJ5aW5nIHRvIGJlIGNs
ZXZlciBoZXJlLgorICAgICAgICBzd2l0Y2ggKG5vZGUtPmFycmF5TW9kZSgpLnR5cGUoKSkgewog
ICAgICAgICBjYXNlIEFycmF5OjpTdHJpbmc6Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hp
bGQxKCkpLmZpbHRlcihTcGVjU3RyaW5nKTsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZS0+Y2hp
bGQxKCkpLmZpbHRlcihTcGVjU3RyaW5nKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBj
YXNlIEFycmF5OjpJbnQzMjoKICAgICAgICAgY2FzZSBBcnJheTo6RG91YmxlOgogICAgICAgICBj
YXNlIEFycmF5OjpDb250aWd1b3VzOgogICAgICAgICBjYXNlIEFycmF5OjpBcnJheVN0b3JhZ2U6
CiAgICAgICAgIGNhc2UgQXJyYXk6OlNsb3dQdXRBcnJheVN0b3JhZ2U6Ci0gICAgICAgICAgICBm
b3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjQ2VsbCk7CisgICAgICAgICAgICBmb3JO
b2RlKG5vZGUtPmNoaWxkMSgpKS5maWx0ZXIoU3BlY0NlbGwpOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIGNhc2UgQXJyYXk6OkFyZ3VtZW50czoKLSAgICAgICAgICAgIGZvck5vZGUobm9k
ZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNBcmd1bWVudHMpOworICAgICAgICAgICAgZm9yTm9kZShu
b2RlLT5jaGlsZDEoKSkuZmlsdGVyKFNwZWNBcmd1bWVudHMpOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIGNhc2UgQXJyYXk6OkludDhBcnJheToKLSAgICAgICAgICAgIGZvck5vZGUobm9k
ZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNJbnQ4QXJyYXkpOworICAgICAgICAgICAgZm9yTm9kZShu
b2RlLT5jaGlsZDEoKSkuZmlsdGVyKFNwZWNJbnQ4QXJyYXkpOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIGNhc2UgQXJyYXk6OkludDE2QXJyYXk6Ci0gICAgICAgICAgICBmb3JOb2RlKG5v
ZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjSW50MTZBcnJheSk7CisgICAgICAgICAgICBmb3JOb2Rl
KG5vZGUtPmNoaWxkMSgpKS5maWx0ZXIoU3BlY0ludDE2QXJyYXkpOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OkludDMyQXJyYXk6Ci0gICAgICAgICAgICBmb3JOb2Rl
KG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjSW50MzJBcnJheSk7CisgICAgICAgICAgICBmb3JO
b2RlKG5vZGUtPmNoaWxkMSgpKS5maWx0ZXIoU3BlY0ludDMyQXJyYXkpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OlVpbnQ4QXJyYXk6Ci0gICAgICAgICAgICBmb3JO
b2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjVWludDhBcnJheSk7CisgICAgICAgICAgICBm
b3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5maWx0ZXIoU3BlY1VpbnQ4QXJyYXkpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OlVpbnQ4Q2xhbXBlZEFycmF5OgotICAgICAg
ICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY1VpbnQ4Q2xhbXBlZEFycmF5
KTsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRlcihTcGVjVWludDhD
bGFtcGVkQXJyYXkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OlVp
bnQxNkFycmF5OgotICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3Bl
Y1VpbnQxNkFycmF5KTsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRl
cihTcGVjVWludDE2QXJyYXkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJy
YXk6OlVpbnQzMkFycmF5OgotICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0
ZXIoU3BlY1VpbnQzMkFycmF5KTsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkp
LmZpbHRlcihTcGVjVWludDMyQXJyYXkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNh
c2UgQXJyYXk6OkZsb2F0MzJBcnJheToKLSAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEo
KSkuZmlsdGVyKFNwZWNGbG9hdDMyQXJyYXkpOworICAgICAgICAgICAgZm9yTm9kZShub2RlLT5j
aGlsZDEoKSkuZmlsdGVyKFNwZWNGbG9hdDMyQXJyYXkpOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIGNhc2UgQXJyYXk6OkZsb2F0NjRBcnJheToKLSAgICAgICAgICAgIGZvck5vZGUobm9k
ZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNGbG9hdDY0QXJyYXkpOworICAgICAgICAgICAgZm9yTm9k
ZShub2RlLT5jaGlsZDEoKSkuZmlsdGVyKFNwZWNGbG9hdDY0QXJyYXkpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIGZvck5vZGUobm9kZS5j
aGlsZDEoKSkuZmlsdGVyQXJyYXlNb2Rlcyhub2RlLmFycmF5TW9kZSgpLmFycmF5TW9kZXNUaGF0
UGFzc0ZpbHRlcmluZygpKTsKKyAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDEoKSkuZmlsdGVy
QXJyYXlNb2Rlcyhub2RlLT5hcnJheU1vZGUoKS5hcnJheU1vZGVzVGhhdFBhc3NGaWx0ZXJpbmco
KSk7CiAgICAgICAgIG1faGF2ZVN0cnVjdHVyZXMgPSB0cnVlOwogICAgICAgICBicmVhazsKICAg
ICB9CiAgICAgY2FzZSBBcnJheWlmeTogewotICAgICAgICBpZiAobm9kZS5hcnJheU1vZGUoKS5h
bHJlYWR5Q2hlY2tlZChtX2dyYXBoLCBub2RlLCBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpKSkgewor
ICAgICAgICBpZiAobm9kZS0+YXJyYXlNb2RlKCkuYWxyZWFkeUNoZWNrZWQobV9ncmFwaCwgbm9k
ZSwgZm9yTm9kZShub2RlLT5jaGlsZDEoKSkpKSB7CiAgICAgICAgICAgICBtX2ZvdW5kQ29uc3Rh
bnRzID0gdHJ1ZTsKLSAgICAgICAgICAgIG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7CisgICAgICAg
ICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9Ci0gICAgICAgIEFTU0VSVChub2RlLmFycmF5TW9kZSgpLmNvbnZlcnNpb24oKSA9PSBBcnJh
eTo6Q29udmVydAotICAgICAgICAgICAgfHwgbm9kZS5hcnJheU1vZGUoKS5jb252ZXJzaW9uKCkg
PT0gQXJyYXk6OlJhZ2VDb252ZXJ0KTsKLSAgICAgICAgbm9kZS5zZXRDYW5FeGl0KHRydWUpOwot
ICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjQ2VsbCk7Ci0gICAgICAg
IGlmIChub2RlLmNoaWxkMigpKQotICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMigpKS5m
aWx0ZXIoU3BlY0ludDMyKTsKKyAgICAgICAgQVNTRVJUKG5vZGUtPmFycmF5TW9kZSgpLmNvbnZl
cnNpb24oKSA9PSBBcnJheTo6Q29udmVydAorICAgICAgICAgICAgfHwgbm9kZS0+YXJyYXlNb2Rl
KCkuY29udmVyc2lvbigpID09IEFycmF5OjpSYWdlQ29udmVydCk7CisgICAgICAgIG5vZGUtPnNl
dENhbkV4aXQodHJ1ZSk7CisgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRlcihT
cGVjQ2VsbCk7CisgICAgICAgIGlmIChub2RlLT5jaGlsZDIoKSkKKyAgICAgICAgICAgIGZvck5v
ZGUobm9kZS0+Y2hpbGQyKCkpLmZpbHRlcihTcGVjSW50MzIpOwogICAgICAgICBjbG9iYmVyU3Ry
dWN0dXJlcyhpbmRleEluQmxvY2spOwotICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZp
bHRlckFycmF5TW9kZXMobm9kZS5hcnJheU1vZGUoKS5hcnJheU1vZGVzVGhhdFBhc3NGaWx0ZXJp
bmcoKSk7CisgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRlckFycmF5TW9kZXMo
bm9kZS0+YXJyYXlNb2RlKCkuYXJyYXlNb2Rlc1RoYXRQYXNzRmlsdGVyaW5nKCkpOwogICAgICAg
ICBtX2hhdmVTdHJ1Y3R1cmVzID0gdHJ1ZTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGNh
c2UgQXJyYXlpZnlUb1N0cnVjdHVyZTogewotICAgICAgICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSA9
IGZvck5vZGUobm9kZS5jaGlsZDEoKSk7Ci0gICAgICAgIFN0cnVjdHVyZVNldCBzZXQgPSBub2Rl
LnN0cnVjdHVyZSgpOworICAgICAgICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSA9IGZvck5vZGUobm9k
ZS0+Y2hpbGQxKCkpOworICAgICAgICBTdHJ1Y3R1cmVTZXQgc2V0ID0gbm9kZS0+c3RydWN0dXJl
KCk7CiAgICAgICAgIGlmICh2YWx1ZS5tX2Z1dHVyZVBvc3NpYmxlU3RydWN0dXJlLmlzU3Vic2V0
T2Yoc2V0KQogICAgICAgICAgICAgfHwgdmFsdWUubV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuaXNT
dWJzZXRPZihzZXQpKQogICAgICAgICAgICAgbV9mb3VuZENvbnN0YW50cyA9IHRydWU7Ci0gICAg
ICAgIG5vZGUuc2V0Q2FuRXhpdCh0cnVlKTsKLSAgICAgICAgaWYgKG5vZGUuY2hpbGQyKCkpCi0g
ICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQyKCkpLmZpbHRlcihTcGVjSW50MzIpOworICAg
ICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOworICAgICAgICBpZiAobm9kZS0+Y2hpbGQyKCkp
CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMigpKS5maWx0ZXIoU3BlY0ludDMyKTsK
ICAgICAgICAgY2xvYmJlclN0cnVjdHVyZXMoaW5kZXhJbkJsb2NrKTsKICAgICAgICAgdmFsdWUu
ZmlsdGVyKHNldCk7CiAgICAgICAgIG1faGF2ZVN0cnVjdHVyZXMgPSB0cnVlOwogICAgICAgICBi
cmVhazsKICAgICB9CiAgICAgY2FzZSBHZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlOiB7Ci0gICAg
ICAgIG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7Ci0gICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5j
bGVhcigpOworICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKKyAgICAgICAgZm9yTm9k
ZShub2RlKS5jbGVhcigpOwogICAgICAgICBicmVhazsgCiAgICAgfQogICAgIGNhc2UgR2V0QnlP
ZmZzZXQ6Ci0gICAgICAgIGlmICghbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5oYXNTdG9yYWdlUmVz
dWx0KCkpIHsKLSAgICAgICAgICAgIG5vZGUuc2V0Q2FuRXhpdCghaXNDZWxsU3BlY3VsYXRpb24o
Zm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKTsKLSAgICAgICAgICAgIGZvck5vZGUobm9k
ZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNDZWxsKTsKKyAgICAgICAgaWYgKCFub2RlLT5jaGlsZDEo
KS0+aGFzU3RvcmFnZVJlc3VsdCgpKSB7CisgICAgICAgICAgICBub2RlLnNldENhbkV4aXQoIWlz
Q2VsbFNwZWN1bGF0aW9uKGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fdHlwZSkpOworICAgICAg
ICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDEoKSkuZmlsdGVyKFNwZWNDZWxsKTsKICAgICAgICAg
fQotICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkubWFrZVRvcCgpOworICAgICAgICBmb3JOb2Rl
KG5vZGUpLm1ha2VUb3AoKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICBjYXNl
IFB1dEJ5T2Zmc2V0OiB7CiAgICAgICAgIGJvb2wgY2FuRXhpdCA9IGZhbHNlOwotICAgICAgICBp
ZiAoIW1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0uaGFzU3RvcmFnZVJlc3VsdCgpKSB7Ci0gICAgICAg
ICAgICBjYW5FeGl0IHw9ICFpc0NlbGxTcGVjdWxhdGlvbihmb3JOb2RlKG5vZGUuY2hpbGQxKCkp
Lm1fdHlwZSk7Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVj
Q2VsbCk7Ci0gICAgICAgIH0KLSAgICAgICAgY2FuRXhpdCB8PSAhaXNDZWxsU3BlY3VsYXRpb24o
Zm9yTm9kZShub2RlLmNoaWxkMigpKS5tX3R5cGUpOwotICAgICAgICBmb3JOb2RlKG5vZGUuY2hp
bGQyKCkpLmZpbHRlcihTcGVjQ2VsbCk7Ci0gICAgICAgIG5vZGUuc2V0Q2FuRXhpdChjYW5FeGl0
KTsKKyAgICAgICAgaWYgKCFub2RlLT5jaGlsZDEoKS0+aGFzU3RvcmFnZVJlc3VsdCgpKSB7Cisg
ICAgICAgICAgICBjYW5FeGl0IHw9ICFpc0NlbGxTcGVjdWxhdGlvbihmb3JOb2RlKG5vZGUtPmNo
aWxkMSgpKS5tX3R5cGUpOworICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDEoKSkuZmls
dGVyKFNwZWNDZWxsKTsKKyAgICAgICAgfQorICAgICAgICBjYW5FeGl0IHw9ICFpc0NlbGxTcGVj
dWxhdGlvbihmb3JOb2RlKG5vZGUtPmNoaWxkMigpKS5tX3R5cGUpOworICAgICAgICBmb3JOb2Rl
KG5vZGUtPmNoaWxkMigpKS5maWx0ZXIoU3BlY0NlbGwpOworICAgICAgICBub2RlLT5zZXRDYW5F
eGl0KGNhbkV4aXQpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgICAgICAKICAgICBj
YXNlIENoZWNrRnVuY3Rpb246IHsKLSAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IGZvck5vZGUobm9k
ZS5jaGlsZDEoKSkudmFsdWUoKTsKLSAgICAgICAgaWYgKHZhbHVlID09IG5vZGUuZnVuY3Rpb24o
KSkgeworICAgICAgICBKU1ZhbHVlIHZhbHVlID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSkudmFs
dWUoKTsKKyAgICAgICAgaWYgKHZhbHVlID09IG5vZGUtPmZ1bmN0aW9uKCkpIHsKICAgICAgICAg
ICAgIG1fZm91bmRDb25zdGFudHMgPSB0cnVlOwogICAgICAgICAgICAgQVNTRVJUKHZhbHVlKTsK
LSAgICAgICAgICAgIG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7CisgICAgICAgICAgICBub2RlLT5z
ZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAg
IAotICAgICAgICBub2RlLnNldENhbkV4aXQodHJ1ZSk7IC8vIExpZXMhIFdlIGNhbiBkbyBiZXR0
ZXIuCi0gICAgICAgIGlmICghZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXJCeVZhbHVlKG5v
ZGUuZnVuY3Rpb24oKSkpIHsKKyAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsgLy8gTGll
cyEgV2UgY2FuIGRvIGJldHRlci4KKyAgICAgICAgaWYgKCFmb3JOb2RlKG5vZGUtPmNoaWxkMSgp
KS5maWx0ZXJCeVZhbHVlKG5vZGUtPmZ1bmN0aW9uKCkpKSB7CiAgICAgICAgICAgICBtX2lzVmFs
aWQgPSBmYWxzZTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkBAIC0xNzEzLDY3ICsx
NzMyLDY5IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAg
ICAgCiAgICAgY2FzZSBQdXRCeUlkOgogICAgIGNhc2UgUHV0QnlJZERpcmVjdDoKLSAgICAgICAg
bm9kZS5zZXRDYW5FeGl0KHRydWUpOwotICAgICAgICBpZiAoU3RydWN0dXJlKiBzdHJ1Y3R1cmUg
PSBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmJlc3RQcm92ZW5TdHJ1Y3R1cmUoKSkgeworICAgICAg
ICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOworICAgICAgICBpZiAoU3RydWN0dXJlKiBzdHJ1Y3R1
cmUgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5iZXN0UHJvdmVuU3RydWN0dXJlKCkpIHsKICAg
ICAgICAgICAgIFB1dEJ5SWRTdGF0dXMgc3RhdHVzID0gUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZv
cigKICAgICAgICAgICAgICAgICBtX2dyYXBoLm1fZ2xvYmFsRGF0YSwKLSAgICAgICAgICAgICAg
ICBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLmNvZGVPcmlnaW4pLAorICAgICAgICAgICAg
ICAgIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPmNvZGVPcmlnaW4pLAogICAgICAgICAg
ICAgICAgIHN0cnVjdHVyZSwKLSAgICAgICAgICAgICAgICBtX2dyYXBoLm1fY29kZUJsb2NrLT5p
ZGVudGlmaWVyKG5vZGUuaWRlbnRpZmllck51bWJlcigpKSwKLSAgICAgICAgICAgICAgICBub2Rl
Lm9wKCkgPT0gUHV0QnlJZERpcmVjdCk7CisgICAgICAgICAgICAgICAgbV9ncmFwaC5tX2NvZGVC
bG9jay0+aWRlbnRpZmllcihub2RlLT5pZGVudGlmaWVyTnVtYmVyKCkpLAorICAgICAgICAgICAg
ICAgIG5vZGUtPm9wKCkgPT0gUHV0QnlJZERpcmVjdCk7CiAgICAgICAgICAgICBpZiAoc3RhdHVz
LmlzU2ltcGxlUmVwbGFjZSgpKSB7Ci0gICAgICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxk
MSgpKS5maWx0ZXIoc3RydWN0dXJlKTsKKyAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNo
aWxkMSgpKS5maWx0ZXIoc3RydWN0dXJlKTsKICAgICAgICAgICAgICAgICBtX2ZvdW5kQ29uc3Rh
bnRzID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIGlmIChzdGF0dXMuaXNTaW1wbGVUcmFuc2l0aW9uKCkpIHsKICAgICAgICAgICAgICAg
ICBjbG9iYmVyU3RydWN0dXJlcyhpbmRleEluQmxvY2spOwotICAgICAgICAgICAgICAgIGZvck5v
ZGUobm9kZS5jaGlsZDEoKSkuc2V0KHN0YXR1cy5uZXdTdHJ1Y3R1cmUoKSk7CisgICAgICAgICAg
ICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDEoKSkuc2V0KHN0YXR1cy5uZXdTdHJ1Y3R1cmUoKSk7
CiAgICAgICAgICAgICAgICAgbV9oYXZlU3RydWN0dXJlcyA9IHRydWU7CiAgICAgICAgICAgICAg
ICAgbV9mb3VuZENvbnN0YW50cyA9IHRydWU7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0
ZXIoU3BlY0NlbGwpOwotICAgICAgICBjbG9iYmVyV29ybGQobm9kZS5jb2RlT3JpZ2luLCBpbmRl
eEluQmxvY2spOworICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5maWx0ZXIoU3BlY0Nl
bGwpOworICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+Y29kZU9yaWdpbiwgaW5kZXhJbkJsb2Nr
KTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICBjYXNlIEdldEdsb2JhbFZhcjoK
LSAgICAgICAgbm9kZS5zZXRDYW5FeGl0KGZhbHNlKTsKLSAgICAgICAgZm9yTm9kZShub2RlSW5k
ZXgpLm1ha2VUb3AoKTsKKyAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CisgICAgICAg
IGZvck5vZGUobm9kZSkubWFrZVRvcCgpOwogICAgICAgICBicmVhazsKICAgICAgICAgCiAgICAg
Y2FzZSBHbG9iYWxWYXJXYXRjaHBvaW50OgotICAgICAgICBub2RlLnNldENhbkV4aXQodHJ1ZSk7
CisgICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7CiAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgCiAgICAgY2FzZSBQdXRHbG9iYWxWYXI6CiAgICAgY2FzZSBQdXRHbG9iYWxWYXJDaGVj
azoKLSAgICAgICAgbm9kZS5zZXRDYW5FeGl0KGZhbHNlKTsKKyAgICAgICAgbm9kZS0+c2V0Q2Fu
RXhpdChmYWxzZSk7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAgY2FzZSBDaGVj
a0hhc0luc3RhbmNlOgotICAgICAgICBub2RlLnNldENhbkV4aXQodHJ1ZSk7Ci0gICAgICAgIGZv
ck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNDZWxsKTsKKyAgICAgICAgbm9kZS0+c2V0
Q2FuRXhpdCh0cnVlKTsKKyAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDEoKSkuZmlsdGVyKFNw
ZWNDZWxsKTsKICAgICAgICAgLy8gU2FkbHksIHdlIGRvbid0IHByb3BhZ2F0ZSB0aGUgZmFjdCB0
aGF0IHdlJ3ZlIGRvbmUgQ2hlY2tIYXNJbnN0YW5jZQogICAgICAgICBicmVhazsKICAgICAgICAg
ICAgIAogICAgIGNhc2UgSW5zdGFuY2VPZjoKLSAgICAgICAgbm9kZS5zZXRDYW5FeGl0KHRydWUp
OworICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOwogICAgICAgICAvLyBBZ2Fpbiwgc2Fk
bHksIHdlIGRvbid0IHByb3BhZ2F0ZSB0aGUgZmFjdCB0aGF0IHdlJ3ZlIGRvbmUgSW5zdGFuY2VP
ZgotICAgICAgICBpZiAoIShtX2dyYXBoW25vZGUuY2hpbGQxKCldLnByZWRpY3Rpb24oKSAmIH5T
cGVjQ2VsbCkgJiYgIShmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSAmIH5TcGVjQ2VsbCkp
Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjQ2VsbCk7Ci0g
ICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKFNwZWNDZWxsKTsKLSAgICAgICAg
Zm9yTm9kZShub2RlSW5kZXgpLnNldChTcGVjQm9vbGVhbik7CisgICAgICAgIC8vIEZJWE1FOiBU
aGlzIGFwcGVhcnMgYnJva2VuOiBDaGVja0hhc0luc3RhbmNlIGFscmVhZHkgZG9lcyBhbiB1bmNv
bmRpdGlvbmFsIGNlbGwKKyAgICAgICAgLy8gY2hlY2suIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xMDc0NzkKKyAgICAgICAgaWYgKCEobm9kZS0+Y2hpbGQxKCktPnBy
ZWRpY3Rpb24oKSAmIH5TcGVjQ2VsbCkgJiYgIShmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX3R5
cGUgJiB+U3BlY0NlbGwpKQorICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDEoKSkuZmls
dGVyKFNwZWNDZWxsKTsKKyAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDIoKSkuZmlsdGVyKFNw
ZWNDZWxsKTsKKyAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0Jvb2xlYW4pOwogICAgICAg
ICBicmVhazsKICAgICAgICAgICAgIAogICAgIGNhc2UgUGhpOgogICAgIGNhc2UgRmx1c2g6Ci0g
ICAgICAgIG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7CisgICAgICAgIG5vZGUtPnNldENhbkV4aXQo
ZmFsc2UpOwogICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgIGNhc2UgQnJlYWtwb2lu
dDoKLSAgICAgICAgbm9kZS5zZXRDYW5FeGl0KGZhbHNlKTsKKyAgICAgICAgbm9kZS0+c2V0Q2Fu
RXhpdChmYWxzZSk7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAgY2FzZSBDYWxs
OgpAQCAtMTc4MiwxOCArMTgwMywxOCBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5z
aWduZWQgaW5kCiAgICAgY2FzZSBSZXNvbHZlQmFzZToKICAgICBjYXNlIFJlc29sdmVCYXNlU3Ry
aWN0UHV0OgogICAgIGNhc2UgUmVzb2x2ZUdsb2JhbDoKLSAgICAgICAgbm9kZS5zZXRDYW5FeGl0
KHRydWUpOwotICAgICAgICBjbG9iYmVyV29ybGQobm9kZS5jb2RlT3JpZ2luLCBpbmRleEluQmxv
Y2spOwotICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkubWFrZVRvcCgpOworICAgICAgICBub2Rl
LT5zZXRDYW5FeGl0KHRydWUpOworICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+Y29kZU9yaWdp
biwgaW5kZXhJbkJsb2NrKTsKKyAgICAgICAgZm9yTm9kZShub2RlKS5tYWtlVG9wKCk7CiAgICAg
ICAgIGJyZWFrOwogCiAgICAgY2FzZSBHYXJiYWdlVmFsdWU6Ci0gICAgICAgIGNsb2JiZXJXb3Js
ZChub2RlLmNvZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7Ci0gICAgICAgIGZvck5vZGUobm9kZUlu
ZGV4KS5tYWtlVG9wKCk7CisgICAgICAgIGNsb2JiZXJXb3JsZChub2RlLT5jb2RlT3JpZ2luLCBp
bmRleEluQmxvY2spOworICAgICAgICBmb3JOb2RlKG5vZGUpLm1ha2VUb3AoKTsKICAgICAgICAg
YnJlYWs7CiAKICAgICBjYXNlIEZvcmNlT1NSRXhpdDoKLSAgICAgICAgbm9kZS5zZXRDYW5FeGl0
KHRydWUpOworICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOwogICAgICAgICBtX2lzVmFs
aWQgPSBmYWxzZTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKQEAgLTE4MDEsNyArMTgy
Miw3IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICBjYXNl
IElubGluZVN0YXJ0OgogICAgIGNhc2UgTm9wOgogICAgIGNhc2UgQ291bnRFeGVjdXRpb246Ci0g
ICAgICAgIG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7CisgICAgICAgIG5vZGUtPnNldENhbkV4aXQo
ZmFsc2UpOwogICAgICAgICBicmVhazsKICAgICAgICAgCiAgICAgY2FzZSBMYXN0Tm9kZVR5cGU6
CkBAIC0xODU0LDE1ICsxODc1LDE0IEBAIGlubGluZSB2b2lkIEFic3RyYWN0U3RhdGU6OmNsb2Ji
ZXJTdHJ1Y3QKICAgICBtX2RpZENsb2JiZXIgPSB0cnVlOwogfQogCi1pbmxpbmUgYm9vbCBBYnN0
cmFjdFN0YXRlOjptZXJnZVN0YXRlQXRUYWlsKEFic3RyYWN0VmFsdWUmIGRlc3RpbmF0aW9uLCBB
YnN0cmFjdFZhbHVlJiBpblZhcmlhYmxlLCBOb2RlSW5kZXggbm9kZUluZGV4KQoraW5saW5lIGJv
b2wgQWJzdHJhY3RTdGF0ZTo6bWVyZ2VTdGF0ZUF0VGFpbChBYnN0cmFjdFZhbHVlJiBkZXN0aW5h
dGlvbiwgQWJzdHJhY3RWYWx1ZSYgaW5WYXJpYWJsZSwgTm9kZSogbm9kZSkKIHsKLSAgICBpZiAo
bm9kZUluZGV4ID09IE5vTm9kZSkKKyAgICBpZiAoIW5vZGUpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICAgICAgCiAgICAgQWJzdHJhY3RWYWx1ZSBzb3VyY2U7CiAgICAgCi0gICAgTm9kZSYg
dGFpbE5vZGUgPSBtX2dyYXBoW25vZGVJbmRleF07Ci0gICAgaWYgKHRhaWxOb2RlLnZhcmlhYmxl
QWNjZXNzRGF0YSgpLT5pc0NhcHR1cmVkKCkpIHsKKyAgICBpZiAobm9kZS0+dmFyaWFibGVBY2Nl
c3NEYXRhKCktPmlzQ2FwdHVyZWQoKSkgewogICAgICAgICAvLyBJZiBpdCdzIGNhcHR1cmVkIHRo
ZW4gd2Uga25vdyB0aGF0IHdoYXRldmVyIHZhbHVlIHdhcyBzdG9yZWQgaW50byB0aGUgdmFyaWFi
bGUgbGFzdCBpcyB0aGUKICAgICAgICAgLy8gb25lIHdlIGNhcmUgYWJvdXQuIFRoaXMgaXMgdHJ1
ZSBldmVuIGlmIHRoZSB2YXJpYWJsZSBhdCB0YWlsIGlzIGRlYWQsIHdoaWNoIG1pZ2h0IGhhcHBl
biBpZgogICAgICAgICAvLyB0aGUgbGFzdCB0aGluZyB3ZSBkaWQgdG8gdGhlIHZhcmlhYmxlIHdh
cyBhIEdldExvY2FsIGFuZCB0aGVuIGVuZGVkIHVwIG5vdyB1c2luZyB0aGUKQEAgLTE4NzUsMjYg
KzE4OTUsMjUgQEAgaW5saW5lIGJvb2wgQWJzdHJhY3RTdGF0ZTo6bWVyZ2VTdGF0ZUF0VAogICAg
ICAgICBkYXRhTG9nRigiIGZyb20gbGFzdCBhY2Nlc3MgZHVlIHRvIGNhcHR1cmVkIHZhcmlhYmxl
LlxuIik7CiAjZW5kaWYKICAgICB9IGVsc2UgewotICAgICAgICBpZiAoIXRhaWxOb2RlLnNob3Vs
ZEdlbmVyYXRlKCkpIHsKKyAgICAgICAgaWYgKCFub2RlLT5zaG91bGRHZW5lcmF0ZSgpKSB7CiAg
ICAgICAgICAgICAvLyBJZiB0aGUgbm9kZSBhdCB0YWlsIGlzIGEgR2V0TG9jYWwgdGhhdCBpcyBk
ZWFkLCB0aGVuIHNraXAgaXQgdG8gZ2V0IHRvIHRoZSBQaGkuCiAgICAgICAgICAgICAvLyBUaGUg
UGhpIG1heSBiZSBsaXZlLgotICAgICAgICAgICAgaWYgKHRhaWxOb2RlLm9wKCkgIT0gR2V0TG9j
YWwpCisgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSAhPSBHZXRMb2NhbCkKICAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIG5vZGVJbmRleCA9
IHRhaWxOb2RlLmNoaWxkMSgpLmluZGV4KCk7Ci0gICAgICAgICAgICBBU1NFUlQobV9ncmFwaFtu
b2RlSW5kZXhdLm9wKCkgPT0gUGhpKTsKLSAgICAgICAgICAgIGlmICghbV9ncmFwaFtub2RlSW5k
ZXhdLnNob3VsZEdlbmVyYXRlKCkpCisgICAgICAgICAgICBub2RlID0gbm9kZS0+Y2hpbGQxKCku
bm9kZSgpOworICAgICAgICAgICAgQVNTRVJUKG5vZGUtPm9wKCkgPT0gUGhpKTsKKyAgICAgICAg
ICAgIGlmICghbm9kZS0+c2hvdWxkR2VuZXJhdGUoKSkKICAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBo
W25vZGVJbmRleF07Ci0gICAgICAgIEFTU0VSVChub2RlLnNob3VsZEdlbmVyYXRlKCkpOworICAg
ICAgICBBU1NFUlQobm9kZS0+c2hvdWxkR2VuZXJhdGUoKSk7CiAKICNpZiBERkdfRU5BQkxFKERF
QlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCi0gICAgICAgIGRhdGFMb2dGKCIgICAgICAgICAgSXQn
cyBsaXZlLCBub2RlIEAldS5cbiIsIG5vZGVJbmRleCk7CisgICAgICAgIGRhdGFMb2dGKCIgICAg
ICAgICAgSXQncyBsaXZlLCBub2RlIEAldS5cbiIsIG5vZGUtPmluZGV4KCkpOwogI2VuZGlmCiAg
ICAgCi0gICAgICAgIHN3aXRjaCAobm9kZS5vcCgpKSB7CisgICAgICAgIHN3aXRjaCAobm9kZS0+
b3AoKSkgewogICAgICAgICBjYXNlIFBoaToKICAgICAgICAgY2FzZSBTZXRBcmd1bWVudDoKICAg
ICAgICAgY2FzZSBGbHVzaDoKQEAgLTE5MDksNyArMTkyOCw3IEBAIGlubGluZSBib29sIEFic3Ry
YWN0U3RhdGU6Om1lcmdlU3RhdGVBdFQKICAgICAgICAgICAgIAogICAgICAgICBjYXNlIEdldExv
Y2FsOgogICAgICAgICAgICAgLy8gVGhlIGJsb2NrIHJlZmluZXMgdGhlIHZhbHVlIHdpdGggYWRk
aXRpb25hbCBzcGVjdWxhdGlvbnMuCi0gICAgICAgICAgICBzb3VyY2UgPSBmb3JOb2RlKG5vZGVJ
bmRleCk7CisgICAgICAgICAgICBzb3VyY2UgPSBmb3JOb2RlKG5vZGUpOwogI2lmIERGR19FTkFC
TEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKICAgICAgICAgICAgIGRhdGFMb2dGKCIgICAg
ICAgICAgUmVmaW5pbmcgdG8gIik7CiAgICAgICAgICAgICBzb3VyY2UuZHVtcChXVEY6OmRhdGFG
aWxlKCkpOwpAQCAtMTkyMCwxMSArMTkzOSwxMSBAQCBpbmxpbmUgYm9vbCBBYnN0cmFjdFN0YXRl
OjptZXJnZVN0YXRlQXRUCiAgICAgICAgIGNhc2UgU2V0TG9jYWw6CiAgICAgICAgICAgICAvLyBU
aGUgYmxvY2sgc2V0cyB0aGUgdmFyaWFibGUsIGFuZCBwb3RlbnRpYWxseSByZWZpbmVzIGl0LCBi
b3RoCiAgICAgICAgICAgICAvLyBiZWZvcmUgYW5kIGFmdGVyIHNldHRpbmcgaXQuCi0gICAgICAg
ICAgICBpZiAobm9kZS52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+c2hvdWxkVXNlRG91YmxlRm9ybWF0
KCkpIHsKKyAgICAgICAgICAgIGlmIChub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+c2hvdWxk
VXNlRG91YmxlRm9ybWF0KCkpIHsKICAgICAgICAgICAgICAgICAvLyBGSVhNRTogVGhpcyB1bm5l
Y2Vzc2FyaWx5IGxvc2VzIHByZWNpc2lvbi4KICAgICAgICAgICAgICAgICBzb3VyY2Uuc2V0KFNw
ZWNEb3VibGUpOwogICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgc291cmNlID0g
Zm9yTm9kZShub2RlLmNoaWxkMSgpKTsKKyAgICAgICAgICAgICAgICBzb3VyY2UgPSBmb3JOb2Rl
KG5vZGUtPmNoaWxkMSgpKTsKICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJP
U0UpCiAgICAgICAgICAgICBkYXRhTG9nRigiICAgICAgICAgIFNldHRpbmcgdG8gIik7CiAgICAg
ICAgICAgICBzb3VyY2UuZHVtcChXVEY6OmRhdGFGaWxlKCkpOwpAQCAtMTk4MiwzNSArMjAwMSwz
NCBAQCBpbmxpbmUgYm9vbCBBYnN0cmFjdFN0YXRlOjptZXJnZShCYXNpY0JsCiAgICAgcmV0dXJu
IGNoYW5nZWQ7CiB9CiAKLWlubGluZSBib29sIEFic3RyYWN0U3RhdGU6Om1lcmdlVG9TdWNjZXNz
b3JzKAotICAgIEdyYXBoJiBncmFwaCwgQmFzaWNCbG9jayogYmFzaWNCbG9jaykKK2lubGluZSBi
b29sIEFic3RyYWN0U3RhdGU6Om1lcmdlVG9TdWNjZXNzb3JzKEdyYXBoJiBncmFwaCwgQmFzaWNC
bG9jayogYmFzaWNCbG9jaykKIHsKLSAgICBOb2RlJiB0ZXJtaW5hbCA9IGdyYXBoW2Jhc2ljQmxv
Y2stPmxhc3QoKV07CisgICAgTm9kZSogdGVybWluYWwgPSBiYXNpY0Jsb2NrLT5sYXN0KCk7CiAg
ICAgCi0gICAgQVNTRVJUKHRlcm1pbmFsLmlzVGVybWluYWwoKSk7CisgICAgQVNTRVJUKHRlcm1p
bmFsLT5pc1Rlcm1pbmFsKCkpOwogICAgIAotICAgIHN3aXRjaCAodGVybWluYWwub3AoKSkgewor
ICAgIHN3aXRjaCAodGVybWluYWwtPm9wKCkpIHsKICAgICBjYXNlIEp1bXA6IHsKICAgICAgICAg
QVNTRVJUKGJhc2ljQmxvY2stPmNmYUJyYW5jaERpcmVjdGlvbiA9PSBJbnZhbGlkQnJhbmNoRGly
ZWN0aW9uKTsKICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCiAgICAg
ICAgIGRhdGFMb2dGKCIgICAgICAgIE1lcmdpbmcgdG8gYmxvY2sgIyV1LlxuIiwgdGVybWluYWwu
dGFrZW5CbG9ja0luZGV4KCkpOwogI2VuZGlmCi0gICAgICAgIHJldHVybiBtZXJnZShiYXNpY0Js
b2NrLCBncmFwaC5tX2Jsb2Nrc1t0ZXJtaW5hbC50YWtlbkJsb2NrSW5kZXgoKV0uZ2V0KCkpOwor
ICAgICAgICByZXR1cm4gbWVyZ2UoYmFzaWNCbG9jaywgZ3JhcGgubV9ibG9ja3NbdGVybWluYWwt
PnRha2VuQmxvY2tJbmRleCgpXS5nZXQoKSk7CiAgICAgfQogICAgICAgICAKICAgICBjYXNlIEJy
YW5jaDogewogICAgICAgICBBU1NFUlQoYmFzaWNCbG9jay0+Y2ZhQnJhbmNoRGlyZWN0aW9uICE9
IEludmFsaWRCcmFuY2hEaXJlY3Rpb24pOwogICAgICAgICBib29sIGNoYW5nZWQgPSBmYWxzZTsK
ICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCi0gICAgICAgIGRhdGFM
b2dGKCIgICAgICAgIE1lcmdpbmcgdG8gYmxvY2sgIyV1LlxuIiwgdGVybWluYWwudGFrZW5CbG9j
a0luZGV4KCkpOworICAgICAgICBkYXRhTG9nRigiICAgICAgICBNZXJnaW5nIHRvIGJsb2NrICMl
dS5cbiIsIHRlcm1pbmFsLT50YWtlbkJsb2NrSW5kZXgoKSk7CiAjZW5kaWYKICAgICAgICAgaWYg
KGJhc2ljQmxvY2stPmNmYUJyYW5jaERpcmVjdGlvbiAhPSBUYWtlRmFsc2UpCi0gICAgICAgICAg
ICBjaGFuZ2VkIHw9IG1lcmdlKGJhc2ljQmxvY2ssIGdyYXBoLm1fYmxvY2tzW3Rlcm1pbmFsLnRh
a2VuQmxvY2tJbmRleCgpXS5nZXQoKSk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlKGJh
c2ljQmxvY2ssIGdyYXBoLm1fYmxvY2tzW3Rlcm1pbmFsLT50YWtlbkJsb2NrSW5kZXgoKV0uZ2V0
KCkpOwogI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKICAgICAgICAg
ZGF0YUxvZ0YoIiAgICAgICAgTWVyZ2luZyB0byBibG9jayAjJXUuXG4iLCB0ZXJtaW5hbC5ub3RU
YWtlbkJsb2NrSW5kZXgoKSk7CiAjZW5kaWYKICAgICAgICAgaWYgKGJhc2ljQmxvY2stPmNmYUJy
YW5jaERpcmVjdGlvbiAhPSBUYWtlVHJ1ZSkKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2Uo
YmFzaWNCbG9jaywgZ3JhcGgubV9ibG9ja3NbdGVybWluYWwubm90VGFrZW5CbG9ja0luZGV4KCld
LmdldCgpKTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2UoYmFzaWNCbG9jaywgZ3JhcGgu
bV9ibG9ja3NbdGVybWluYWwtPm5vdFRha2VuQmxvY2tJbmRleCgpXS5nZXQoKSk7CiAgICAgICAg
IHJldHVybiBjaGFuZ2VkOwogICAgIH0KICAgICAgICAgCkBAIC0yMDI2LDEyICsyMDQ0LDEyIEBA
IGlubGluZSBib29sIEFic3RyYWN0U3RhdGU6Om1lcmdlVG9TdWNjZXMKICAgICB9CiB9CiAKLWlu
bGluZSBib29sIEFic3RyYWN0U3RhdGU6Om1lcmdlVmFyaWFibGVCZXR3ZWVuQmxvY2tzKEFic3Ry
YWN0VmFsdWUmIGRlc3RpbmF0aW9uLCBBYnN0cmFjdFZhbHVlJiBzb3VyY2UsIE5vZGVJbmRleCBk
ZXN0aW5hdGlvbk5vZGVJbmRleCwgTm9kZUluZGV4IHNvdXJjZU5vZGVJbmRleCkKK2lubGluZSBi
b29sIEFic3RyYWN0U3RhdGU6Om1lcmdlVmFyaWFibGVCZXR3ZWVuQmxvY2tzKEFic3RyYWN0VmFs
dWUmIGRlc3RpbmF0aW9uLCBBYnN0cmFjdFZhbHVlJiBzb3VyY2UsIE5vZGUqIGRlc3RpbmF0aW9u
Tm9kZSwgTm9kZSogc291cmNlTm9kZSkKIHsKLSAgICBpZiAoZGVzdGluYXRpb25Ob2RlSW5kZXgg
PT0gTm9Ob2RlKQorICAgIGlmICghZGVzdGluYXRpb25Ob2RlKQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgCi0gICAgQVNTRVJUX1VOVVNFRChzb3VyY2VOb2RlSW5kZXgsIHNvdXJjZU5vZGVJ
bmRleCAhPSBOb05vZGUpOworICAgIEFTU0VSVF9VTlVTRUQoc291cmNlTm9kZSwgc291cmNlTm9k
ZSk7CiAgICAgCiAgICAgLy8gRklYTUU6IFdlIGNvdWxkIGRvIHNvbWUgc3BhcnNlIGNvbmRpdGlv
bmFsIHByb3BhZ2F0aW9uIGhlcmUhCiAgICAgCkBAIC0yMDQyLDE1ICsyMDYwLDE1IEBAIHZvaWQg
QWJzdHJhY3RTdGF0ZTo6ZHVtcChQcmludFN0cmVhbSYgb3UKIHsKICAgICBib29sIGZpcnN0ID0g
dHJ1ZTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fYmxvY2stPnNpemUoKTsgKytpKSB7
Ci0gICAgICAgIE5vZGVJbmRleCBpbmRleCA9IG1fYmxvY2stPmF0KGkpOwotICAgICAgICBBYnN0
cmFjdFZhbHVlJiB2YWx1ZSA9IGZvck5vZGUoaW5kZXgpOworICAgICAgICBOb2RlKiBub2RlID0g
bV9ibG9jay0+YXQoaSk7CisgICAgICAgIEFic3RyYWN0VmFsdWUmIHZhbHVlID0gZm9yTm9kZShu
b2RlKTsKICAgICAgICAgaWYgKHZhbHVlLmlzQ2xlYXIoKSkKICAgICAgICAgICAgIGNvbnRpbnVl
OwogICAgICAgICBpZiAoZmlyc3QpCiAgICAgICAgICAgICBmaXJzdCA9IGZhbHNlOwogICAgICAg
ICBlbHNlCiAgICAgICAgICAgICBvdXQucHJpbnRmKCIgIik7Ci0gICAgICAgIG91dC5wcmludGYo
IkAlbHU6Iiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4oaW5kZXgpKTsKKyAgICAgICAgb3V0
LnByaW50ZigiQCVsdToiLCBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nPihub2RlLT5pbmRleCgp
KSk7CiAgICAgICAgIHZhbHVlLmR1bXAob3V0KTsKICAgICB9CiB9CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuaAkocmV2aXNpb24gMTQwNTY3KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEyIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAx
MiwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTcyLDggKzcyLDggQEAgc3RydWN0IEJhc2ljQmxvY2s7CiAvLyBB
YnN0cmFjdFN0YXRlIHN0YXRlKGNvZGVCbG9jaywgZ3JhcGgpOwogLy8gc3RhdGUuYmVnaW5CYXNp
Y0Jsb2NrKGJhc2ljQmxvY2spOwogLy8gYm9vbCBlbmRSZWFjaGVkID0gdHJ1ZTsKLS8vIGZvciAo
Tm9kZUluZGV4IGlkeCA9IGJhc2ljQmxvY2suYmVnaW47IGlkeCA8IGJhc2ljQmxvY2suZW5kOyAr
K2lkeCkgewotLy8gICAgIGlmICghc3RhdGUuZXhlY3V0ZShpZHgpKQorLy8gZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IGJhc2ljQmxvY2stPnNpemUoKTsgKytpKSB7CisvLyAgICAgaWYgKCFzdGF0
ZS5leGVjdXRlKGkpKQogLy8gICAgICAgICBicmVhazsKIC8vIH0KIC8vIGJvb2wgcmVzdWx0ID0g
c3RhdGUuZW5kQmFzaWNCbG9jayg8ZWl0aGVyIE1lcmdlIG9yIERvbnRNZXJnZT4pOwpAQCAtOTcs
MTQgKzk3LDE0IEBAIHB1YmxpYzoKICAgICAKICAgICB+QWJzdHJhY3RTdGF0ZSgpOwogICAgIAot
ICAgIEFic3RyYWN0VmFsdWUmIGZvck5vZGUoTm9kZUluZGV4IG5vZGVJbmRleCkKKyAgICBBYnN0
cmFjdFZhbHVlJiBmb3JOb2RlKE5vZGUqIG5vZGUpCiAgICAgewotICAgICAgICByZXR1cm4gbV9n
cmFwaFtub2RlSW5kZXhdLnZhbHVlOworICAgICAgICByZXR1cm4gbm9kZS0+dmFsdWU7CiAgICAg
fQogICAgIAotICAgIEFic3RyYWN0VmFsdWUmIGZvck5vZGUoRWRnZSBub2RlVXNlKQorICAgIEFi
c3RyYWN0VmFsdWUmIGZvck5vZGUoRWRnZSBlZGdlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGZv
ck5vZGUobm9kZVVzZS5pbmRleCgpKTsKKyAgICAgICAgcmV0dXJuIGZvck5vZGUoZWRnZS5ub2Rl
KCkpOwogICAgIH0KICAgICAKICAgICBPcGVyYW5kczxBYnN0cmFjdFZhbHVlPiYgdmFyaWFibGVz
KCkKQEAgLTE4Nyw0OCArMTg3LDQ4IEBAIHByaXZhdGU6CiAgICAgdm9pZCBjbG9iYmVyQ2FwdHVy
ZWRWYXJzKGNvbnN0IENvZGVPcmlnaW4mKTsKICAgICB2b2lkIGNsb2JiZXJTdHJ1Y3R1cmVzKHVu
c2lnbmVkIGluZGV4SW5CbG9jayk7CiAgICAgCi0gICAgYm9vbCBtZXJnZVN0YXRlQXRUYWlsKEFi
c3RyYWN0VmFsdWUmIGRlc3RpbmF0aW9uLCBBYnN0cmFjdFZhbHVlJiBpblZhcmlhYmxlLCBOb2Rl
SW5kZXgpOworICAgIGJvb2wgbWVyZ2VTdGF0ZUF0VGFpbChBYnN0cmFjdFZhbHVlJiBkZXN0aW5h
dGlvbiwgQWJzdHJhY3RWYWx1ZSYgaW5WYXJpYWJsZSwgTm9kZSopOwogICAgIAotICAgIHN0YXRp
YyBib29sIG1lcmdlVmFyaWFibGVCZXR3ZWVuQmxvY2tzKEFic3RyYWN0VmFsdWUmIGRlc3RpbmF0
aW9uLCBBYnN0cmFjdFZhbHVlJiBzb3VyY2UsIE5vZGVJbmRleCBkZXN0aW5hdGlvbk5vZGVJbmRl
eCwgTm9kZUluZGV4IHNvdXJjZU5vZGVJbmRleCk7CisgICAgc3RhdGljIGJvb2wgbWVyZ2VWYXJp
YWJsZUJldHdlZW5CbG9ja3MoQWJzdHJhY3RWYWx1ZSYgZGVzdGluYXRpb24sIEFic3RyYWN0VmFs
dWUmIHNvdXJjZSwgTm9kZSogZGVzdGluYXRpb25Ob2RlLCBOb2RlKiBzb3VyY2VOb2RlKTsKICAg
ICAKLSAgICB2b2lkIHNwZWN1bGF0ZUludDMyVW5hcnkoTm9kZSYgbm9kZSwgYm9vbCBmb3JjZUNh
bkV4aXQgPSBmYWxzZSkKKyAgICB2b2lkIHNwZWN1bGF0ZUludDMyVW5hcnkoTm9kZSogbm9kZSwg
Ym9vbCBmb3JjZUNhbkV4aXQgPSBmYWxzZSkKICAgICB7Ci0gICAgICAgIEFic3RyYWN0VmFsdWUm
IGNoaWxkVmFsdWUgPSBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpOwotICAgICAgICBub2RlLnNldENh
bkV4aXQoZm9yY2VDYW5FeGl0IHx8ICFpc0ludDMyU3BlY3VsYXRpb24oY2hpbGRWYWx1ZS5tX3R5
cGUpKTsKKyAgICAgICAgQWJzdHJhY3RWYWx1ZSYgY2hpbGRWYWx1ZSA9IGZvck5vZGUobm9kZS0+
Y2hpbGQxKCkpOworICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZvcmNlQ2FuRXhpdCB8fCAhaXNJ
bnQzMlNwZWN1bGF0aW9uKGNoaWxkVmFsdWUubV90eXBlKSk7CiAgICAgICAgIGNoaWxkVmFsdWUu
ZmlsdGVyKFNwZWNJbnQzMik7CiAgICAgfQogICAgIAotICAgIHZvaWQgc3BlY3VsYXRlTnVtYmVy
VW5hcnkoTm9kZSYgbm9kZSkKKyAgICB2b2lkIHNwZWN1bGF0ZU51bWJlclVuYXJ5KE5vZGUqIG5v
ZGUpCiAgICAgewotICAgICAgICBBYnN0cmFjdFZhbHVlJiBjaGlsZFZhbHVlID0gZm9yTm9kZShu
b2RlLmNoaWxkMSgpKTsKLSAgICAgICAgbm9kZS5zZXRDYW5FeGl0KCFpc051bWJlclNwZWN1bGF0
aW9uKGNoaWxkVmFsdWUubV90eXBlKSk7CisgICAgICAgIEFic3RyYWN0VmFsdWUmIGNoaWxkVmFs
dWUgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCgh
aXNOdW1iZXJTcGVjdWxhdGlvbihjaGlsZFZhbHVlLm1fdHlwZSkpOwogICAgICAgICBjaGlsZFZh
bHVlLmZpbHRlcihTcGVjTnVtYmVyKTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBzcGVjdWxhdGVC
b29sZWFuVW5hcnkoTm9kZSYgbm9kZSkKKyAgICB2b2lkIHNwZWN1bGF0ZUJvb2xlYW5VbmFyeShO
b2RlKiBub2RlKQogICAgIHsKLSAgICAgICAgQWJzdHJhY3RWYWx1ZSYgY2hpbGRWYWx1ZSA9IGZv
ck5vZGUobm9kZS5jaGlsZDEoKSk7Ci0gICAgICAgIG5vZGUuc2V0Q2FuRXhpdCghaXNCb29sZWFu
U3BlY3VsYXRpb24oY2hpbGRWYWx1ZS5tX3R5cGUpKTsKKyAgICAgICAgQWJzdHJhY3RWYWx1ZSYg
Y2hpbGRWYWx1ZSA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBub2RlLT5zZXRD
YW5FeGl0KCFpc0Jvb2xlYW5TcGVjdWxhdGlvbihjaGlsZFZhbHVlLm1fdHlwZSkpOwogICAgICAg
ICBjaGlsZFZhbHVlLmZpbHRlcihTcGVjQm9vbGVhbik7CiAgICAgfQogICAgIAotICAgIHZvaWQg
c3BlY3VsYXRlSW50MzJCaW5hcnkoTm9kZSYgbm9kZSwgYm9vbCBmb3JjZUNhbkV4aXQgPSBmYWxz
ZSkKKyAgICB2b2lkIHNwZWN1bGF0ZUludDMyQmluYXJ5KE5vZGUqIG5vZGUsIGJvb2wgZm9yY2VD
YW5FeGl0ID0gZmFsc2UpCiAgICAgewotICAgICAgICBBYnN0cmFjdFZhbHVlJiBjaGlsZFZhbHVl
MSA9IGZvck5vZGUobm9kZS5jaGlsZDEoKSk7Ci0gICAgICAgIEFic3RyYWN0VmFsdWUmIGNoaWxk
VmFsdWUyID0gZm9yTm9kZShub2RlLmNoaWxkMigpKTsKLSAgICAgICAgbm9kZS5zZXRDYW5FeGl0
KAorICAgICAgICBBYnN0cmFjdFZhbHVlJiBjaGlsZFZhbHVlMSA9IGZvck5vZGUobm9kZS0+Y2hp
bGQxKCkpOworICAgICAgICBBYnN0cmFjdFZhbHVlJiBjaGlsZFZhbHVlMiA9IGZvck5vZGUobm9k
ZS0+Y2hpbGQyKCkpOworICAgICAgICBub2RlLT5zZXRDYW5FeGl0KAogICAgICAgICAgICAgZm9y
Y2VDYW5FeGl0Ci0gICAgICAgICAgICB8fCAhaXNJbnQzMlNwZWN1bGF0aW9uKGNoaWxkVmFsdWUx
Lm1fdHlwZSkKLSAgICAgICAgICAgIHx8ICFpc0ludDMyU3BlY3VsYXRpb24oY2hpbGRWYWx1ZTIu
bV90eXBlKSk7CisgICAgICAgICAgICB8fCAhaXNJbnQzMlNwZWN1bGF0aW9uKGNoaWxkVmFsdWUx
LT5tX3R5cGUpCisgICAgICAgICAgICB8fCAhaXNJbnQzMlNwZWN1bGF0aW9uKGNoaWxkVmFsdWUy
LT5tX3R5cGUpKTsKICAgICAgICAgY2hpbGRWYWx1ZTEuZmlsdGVyKFNwZWNJbnQzMik7CiAgICAg
ICAgIGNoaWxkVmFsdWUyLmZpbHRlcihTcGVjSW50MzIpOwogICAgIH0KICAgICAKLSAgICB2b2lk
IHNwZWN1bGF0ZU51bWJlckJpbmFyeShOb2RlJiBub2RlKQorICAgIHZvaWQgc3BlY3VsYXRlTnVt
YmVyQmluYXJ5KE5vZGUqIG5vZGUpCiAgICAgewotICAgICAgICBBYnN0cmFjdFZhbHVlJiBjaGls
ZFZhbHVlMSA9IGZvck5vZGUobm9kZS5jaGlsZDEoKSk7Ci0gICAgICAgIEFic3RyYWN0VmFsdWUm
IGNoaWxkVmFsdWUyID0gZm9yTm9kZShub2RlLmNoaWxkMigpKTsKLSAgICAgICAgbm9kZS5zZXRD
YW5FeGl0KAorICAgICAgICBBYnN0cmFjdFZhbHVlJiBjaGlsZFZhbHVlMSA9IGZvck5vZGUobm9k
ZS0+Y2hpbGQxKCkpOworICAgICAgICBBYnN0cmFjdFZhbHVlJiBjaGlsZFZhbHVlMiA9IGZvck5v
ZGUobm9kZS0+Y2hpbGQyKCkpOworICAgICAgICBub2RlLT5zZXRDYW5FeGl0KAogICAgICAgICAg
ICAgIWlzTnVtYmVyU3BlY3VsYXRpb24oY2hpbGRWYWx1ZTEubV90eXBlKQogICAgICAgICAgICAg
fHwgIWlzTnVtYmVyU3BlY3VsYXRpb24oY2hpbGRWYWx1ZTIubV90eXBlKSk7CiAgICAgICAgIGNo
aWxkVmFsdWUxLmZpbHRlcihTcGVjTnVtYmVyKTsKQEAgLTI0MCw5ICsyNDAsOSBAQCBwcml2YXRl
OgogICAgICAgICBEZWZpbml0ZWx5RmFsc2UsCiAgICAgICAgIERlZmluaXRlbHlUcnVlCiAgICAg
fTsKLSAgICBCb29sZWFuUmVzdWx0IGJvb2xlYW5SZXN1bHQoTm9kZSYsIEFic3RyYWN0VmFsdWUm
KTsKKyAgICBCb29sZWFuUmVzdWx0IGJvb2xlYW5SZXN1bHQoTm9kZSosIEFic3RyYWN0VmFsdWUm
KTsKICAgICAKLSAgICBib29sIHRyeVNldENvbnN0YW50KE5vZGVJbmRleCBub2RlSW5kZXgsIEpT
VmFsdWUgdmFsdWUpCisgICAgYm9vbCB0cnlTZXRDb25zdGFudChOb2RlKiBub2RlLCBKU1ZhbHVl
IHZhbHVlKQogICAgIHsKICAgICAgICAgLy8gTWFrZSBzdXJlIHdlIGRvbid0IGNvbnN0YW50IGZv
bGQgc29tZXRoaW5nIHRoYXQgd2lsbCBwcm9kdWNlIHZhbHVlcyB0aGF0IGNvbnRyYXZlbmUKICAg
ICAgICAgLy8gcHJlZGljdGlvbnMuIElmIHRoYXQgaGFwcGVucyB0aGVuIHdlIGtub3cgdGhhdCB0
aGUgY29kZSB3aWxsIE9TUiBleGl0LCBmb3JjaW5nCkBAIC0yNTEsMTEgKzI1MSwxMSBAQCBwcml2
YXRlOgogICAgICAgICAvLyBsb3Qgb2Ygc3VidGxlIGNvZGUgdGhhdCBhc3N1bWVzIHRoYXQKICAg
ICAgICAgLy8gc3BlY3VsYXRpb25Gcm9tVmFsdWUoanNDb25zdGFudCkgPT0ganNDb25zdGFudC5w
cmVkaWN0aW9uKCkuICJIYXJkZW5pbmciIHRoYXQgY29kZQogICAgICAgICAvLyBpcyBwcm9iYWJs
eSBsZXNzIHNhbmUgdGhhbiBqdXN0IHB1bGxpbmcgYmFjayBvbiBjb25zdGFudCBmb2xkaW5nLgot
ICAgICAgICBTcGVjdWxhdGVkVHlwZSBvbGRUeXBlID0gbV9ncmFwaFtub2RlSW5kZXhdLnByZWRp
Y3Rpb24oKTsKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUgb2xkVHlwZSA9IG5vZGUtPnByZWRpY3Rp
b24oKTsKICAgICAgICAgaWYgKG1lcmdlU3BlY3VsYXRpb25zKHNwZWN1bGF0aW9uRnJvbVZhbHVl
KHZhbHVlKSwgb2xkVHlwZSkgIT0gb2xkVHlwZSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICAgICAgCi0gICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQodmFsdWUpOworICAgICAg
ICBmb3JOb2RlKG5vZGUpLnNldCh2YWx1ZSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0K
ICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RWYWx1ZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RWYWx1
ZS5oCShyZXZpc2lvbiAxNDA1NjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fi
c3RyYWN0VmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTEsIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDExLCAyMDEyLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDE4LDYgKzQxOCw4IEBA
IHN0cnVjdCBBYnN0cmFjdFZhbHVlIHsKICAgICAvLyAgICBjaGFuZ2UgeCdzIHN0cnVjdHVyZSBh
bmQgd2UgaGF2ZSBubyB3YXkgb2YgcHJvdmluZyBvdGhlcndpc2UsIGJ1dAogICAgIC8vICAgIHgn
cyBtX2Z1dHVyZVBvc3NpYmxlU3RydWN0dXJlIHdpbGwgYmUgd2hhdGV2ZXIgc3RydWN0dXJlIHdl
IGhhZCBjaGVja2VkCiAgICAgLy8gICAgd2hlbiBnZXR0aW5nIHByb3BlcnR5ICdmJy4KKyAgICAK
KyAgICAvLyBOQi4gQWxsIGZpZWxkcyBpbiB0aGlzIHN0cnVjdCBtdXN0IGhhdmUgdHJpdmlhbCBk
ZXN0cnVjdG9ycy4KIAogICAgIC8vIFRoaXMgaXMgYSBwcm92ZW4gY29uc3RyYWludCBvbiB0aGUg
c3RydWN0dXJlcyB0aGF0IHRoaXMgdmFsdWUgY2FuIGhhdmUgcmlnaHQKICAgICAvLyBub3cuIFRo
ZSBzdHJ1Y3R1cmUgb2YgdGhlIGN1cnJlbnQgdmFsdWUgbXVzdCBiZWxvbmcgdG8gdGhpcyBzZXQu
IFRoZSBzZXQgbWF5CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FkamFjZW5j
eUxpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FkamFj
ZW5jeUxpc3QuaAkocmV2aXNpb24gMTQwNTY3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdBZGphY2VuY3lMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMSwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTU3LDcgKzU3LDcgQEAgcHVibGlj
OgogICAgICAgICB9CiAgICAgfQogICAgIAotICAgIEFkamFjZW5jeUxpc3QoS2luZCBraW5kLCBO
b2RlSW5kZXggY2hpbGQxLCBOb2RlSW5kZXggY2hpbGQyLCBOb2RlSW5kZXggY2hpbGQzKQorICAg
IEFkamFjZW5jeUxpc3QoS2luZCBraW5kLCBOb2RlKiBjaGlsZDEsIE5vZGUqIGNoaWxkMiwgTm9k
ZSogY2hpbGQzKQogI2lmICFBU1NFUlRfRElTQUJMRUQKICAgICAgICAgOiBtX2tpbmQoRml4ZWQp
CiAjZW5kaWYKQEAgLTExOCw3ICsxMTgsNyBAQCBwdWJsaWM6CiAgICAgICAgIGNoaWxkKDIpID0g
Y2hpbGQzOwogICAgIH0KICAgICAKLSAgICB2b2lkIGluaXRpYWxpemUoTm9kZUluZGV4IGNoaWxk
MSA9IE5vTm9kZSwgTm9kZUluZGV4IGNoaWxkMiA9IE5vTm9kZSwgTm9kZUluZGV4IGNoaWxkMyA9
IE5vTm9kZSkKKyAgICB2b2lkIGluaXRpYWxpemUoTm9kZSogY2hpbGQxID0gMCwgTm9kZSogY2hp
bGQyID0gMCwgTm9kZSogY2hpbGQzID0gMCkKICAgICB7CiAgICAgICAgIGluaXRpYWxpemUoRWRn
ZShjaGlsZDEpLCBFZGdlKGNoaWxkMiksIEVkZ2UoY2hpbGQzKSk7CiAgICAgfQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBbGxvY2F0b3IuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FsbG9jYXRvci5oCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBbGxvY2F0b3IuaAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSwyMzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2lmbmRlZiBERkdBbGxvY2F0b3JfaAorI2RlZmluZSBERkdBbGxvY2F0b3JfaAorCisjaW5j
bHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUg
PHd0Zi9QYWdlQWxsb2NhdGlvbkFsaWduZWQuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBERkcgeworCisvLyBDdXN0b20gcG9vbCBhbGxvY2F0b3IgZm9yIGV4YWN0bHkgb25lIHR5cGUg
KHR5cGUgVCkuIEl0IGhhcyBmYXN0IChPKDEpLCBvbmx5IGEgZmV3CisvLyBpbnN0cnVjdGlvbnMp
IGFsbG9jYXRvciwgYW5kIGEgc2ltaWxhcmx5IGZhc3QgZnJlZSgpLiBSZWN5Y2xpbmcgd29ya3Mg
aWYgZWl0aGVyIG9mCisvLyB0aGUgZm9sbG93aW5nIGlzIHRydWU6CisvLyAtIFQgaGFzIGEgdHJp
dmlhbCBkZXN0cnVjdG9yLiBJbiB0aGF0IGNhc2UgeW91IGRvbid0IGhhdmUgdG8gZXZlciBjYWxs
IGZyZWUoKSBvbgorLy8gICBhbnl0aGluZy4gWW91IGNhbiBqdXN0IGNhbGwgZnJlZUFsbCgpIGlu
c3RlYWQuCisvLyAtIFlvdSBjYWxsIGZyZWUoKSBvbiBhbGwgVCdzIHRoYXQgeW91IGFsbG9jYXRl
ZCwgYW5kIG5ldmVyIHVzZSBmcmVlQWxsKCkuCisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitjbGFz
cyBBbGxvY2F0b3IgeworcHVibGljOgorICAgIEFsbG9jYXRvcigpOworICAgIH5BbGxvY2F0b3Io
KTsKKyAgICAKKyAgICB2b2lkKiBhbGxvY2F0ZSgpOyAvLyBVc2UgcGxhY2VtZW50IG5ldyB0byBh
bGxvY2F0ZSwgYW5kIGF2b2lkIHVzaW5nIHRoaXMgbWV0aG9kLgorICAgIHZvaWQgZnJlZShUKik7
IC8vIENhbGwgdGhpcyBtZXRob2QgdG8gZGVsZXRlOyBuZXZlciB1c2UgJ2RlbGV0ZScgZGlyZWN0
bHkuCisgICAgCisgICAgdm9pZCBmcmVlQWxsKCk7IC8vIE9ubHkgY2FsbCB0aGlzIGlmIFQgaGFz
IGEgdHJpdmlhbCBkZXN0cnVjdG9yLgorICAgIHZvaWQgcmVzZXQoKTsgLy8gTGlrZSBmcmVlQWxs
KCksIGJ1dCBhbHNvIHJldHVybnMgYWxsIG1lbW9yeSB0byB0aGUgT1MuCisgICAgCisgICAgdW5z
aWduZWQgaW5kZXhPZihUKik7CisgICAgCisgICAgc3RhdGljIEFsbG9jYXRvciogYWxsb2NhdG9y
T2YoVCopOworICAgIAorcHJpdmF0ZToKKyAgICB2b2lkKiBidW1wQWxsb2NhdGUoKTsKKyAgICB2
b2lkKiBmcmVlTGlzdEFsbG9jYXRlKCk7CisgICAgdm9pZCogYWxsb2NhdGVTbG93KCk7CisgICAg
dm9pZCBmcmVlUmVnaW9uc1N0YXJ0aW5nQXQoUmVnaW9uKik7CisgICAgdm9pZCBzdGFydGluZ0J1
bXBpbmdJbihSZWdpb24qKTsKKyAgICAKKyAgICBzdHJ1Y3QgUmVnaW9uIHsKKyAgICAgICAgc3Rh
dGljIHNpemVfdCBzaXplKCkgeyByZXR1cm4gNjQgKiBLQjsgfQorICAgICAgICBzdGF0aWMgc2l6
ZV90IGhlYWRlclNpemUoKSB7IHJldHVybiBzdGQ6Om1heChzaXplb2YoUmVnaW9uKSwgc2l6ZW9m
KFQpKTsgfQorICAgICAgICBzdGF0aWMgdW5zaWduZWQgbnVtYmVyT2ZUaGluZ3NQZXJSZWdpb24o
KSB7IHJldHVybiAoc2l6ZSgpIC0gaGVhZGVyU2l6ZSgpKSAvIHNpemVvZihUKTsgfQorICAgICAg
ICBUKiBkYXRhKCkgeyByZXR1cm4gYml0d2lzZV9jYXN0PFQqPihiaXR3aXNlX2Nhc3Q8Y2hhcio+
KHRoaXMpICsgaGVhZGVyU2l6ZSgpKTsgfQorICAgICAgICBib29sIGlzSW5UaGlzUmVnaW9uKFQq
IHBvaW50ZXIpIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkPihwb2ludGVyIC0gZGF0YSgp
KSA8IG51bWJlck9mVGhpbmdzUGVyUmVnaW9uKCk7IH0KKyAgICAgICAgUmVnaW9uKiByZWdpb25G
b3IoVCogcG9pbnRlcikgeyByZXR1cm4gYml0d2lzZV9jYXN0PFJlZ2lvbio+KGJpdHdpc2VfY2Fz
dDx1aW50cHRyX3Q+KHBvaW50ZXIpICYgfihzaXplKCkgLSAxKSk7IH0KKyAgICAgICAgCisgICAg
ICAgIFBhZ2VBbGxvY2F0aW9uQWxpZ25lZCBtX2FsbG9jYXRpb247CisgICAgICAgIEFsbG9jYXRv
ciogbV9hbGxvY2F0b3I7CisgICAgICAgIFJlZ2lvbiogbV9uZXh0OworICAgIH07CisgICAgCisg
ICAgUmVnaW9uKiBtX3JlZ2lvbkhlYWQ7CisgICAgdm9pZCoqIG1fZnJlZUxpc3RIZWFkOworICAg
IFQqIG1fYnVtcEVuZDsKKyAgICB1bnNpZ25lZCBtX2J1bXBSZW1haW5pbmc7Cit9OworCit0ZW1w
bGF0ZTx0eXBlbmFtZSBUPgoraW5saW5lIEFsbG9jYXRvcjo6QWxsb2NhdG9yKCkKKyAgICA6IG1f
cmVnaW9uSGVhZCgwKQorICAgICwgbV9mcmVlTGlzdEhlYWQoMCkKKyAgICAsIG1fYnVtcFJlbWFp
bmluZygwKQoreworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgoraW5saW5lIEFsbG9jYXRvcjo6
fkFsbG9jYXRvcigpCit7CisgICAgcmVzZXQoKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4K
K0FMV0FZU19JTkxJTkUgdm9pZCogQWxsb2NhdG9yOjphbGxvY2F0ZSgpCit7CisgICAgaWYgKExJ
S0VMWSh2b2lkKiByZXN1bHQgPSBidW1wQWxsb2NhdGUoKSkpCisgICAgICAgIHJldHVybiByZXN1
bHQ7CisgICAgcmV0dXJuIGZyZWVMaXN0QWxsb2NhdGUoKTsKK30KKwordGVtcGxhdGU8dHlwZW5h
bWUgVD4KK3ZvaWQgQWxsb2NhdG9yOjpmcmVlKFQqIG9iamVjdCkKK3sKKyAgICBvYmplY3QtPn5U
KCk7CisgICAgCisgICAgdm9pZCoqIGNlbGwgPSBiaXR3aXNlX2Nhc3Q8dm9pZCoqPihvYmplY3Qp
OworICAgICpjZWxsID0gbV9mcmVlTGlzdEhlYWQ7CisgICAgbV9mcmVlTGlzdEhlYWQgPSBjZWxs
OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgordm9pZCBBbGxvY2F0b3I6OmZyZWVBbGwoKQor
eworICAgIGlmICghbV9yZWdpb25IZWFkKSB7CisgICAgICAgIEFTU0VSVCghbV9idW1wUmVtYWlu
aW5nKTsKKyAgICAgICAgQVNTRVJUKCFtX2ZyZWVMaXN0SGVhZCk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisgICAgCisgICAgLy8gU2luY2UgdGhlIGNhbGxlciBpcyBvcHRpbmcgb3V0IG9mIGNh
bGxpbmcgdGhlIGRlc3RydWN0b3IgZm9yIGFueSBhbGxvY2F0ZWQgdGhpbmcsCisgICAgLy8gd2Ug
aGF2ZSB0d28gY2hvaWNlcywgcGx1cyBhIGNvbnRpbnV1bSBiZXR3ZWVuOiB3ZSBjYW4gZWl0aGVy
IGp1c3QgZGVsZXRlIGFsbCByZWdpb25zCisgICAgLy8gKGkuZS4gY2FsbCByZXNldCgpKSwgb3Ig
d2UgY2FuIG1ha2UgYWxsIHJlZ2lvbnMgYXZhaWxhYmxlIGZvciByZXVzZS4gV2UgZG8gc29tZXRo
aW5nCisgICAgLy8gdGhhdCBvcHRpbWl6ZXMgZm9yIChhKSBzcGVlZCBvZiBmcmVlQWxsKCksIChi
KSB0aGUgYXNzdW1wdGlvbiB0aGF0IGlmIHRoZSB1c2VyIGNhbGxzCisgICAgLy8gZnJlZUFsbCgp
IHRoZW4gdGhleSB3aWxsIHByb2JhYmx5IGJlIGNhbGxpbmcgYWxsb2NhdGUoKSBpbiB0aGUgbmVh
ciBmdXR1cmUuIE5hbWVseSwKKyAgICAvLyB3ZSBmcmVlIGFsbCBidXQgb25lIHJlZ2lvbiwgYW5k
IG1ha2UgdGhlIHJlbWFpbmluZyByZWdpb24gYSBidW1wIGFsbG9jYXRpb24gcmVnaW9uLgorICAg
IAorICAgIGZvciAoUmVnaW9uKiByZWdpb24gPSBtX3JlZ2lvbkhlYWQtPm1fbmV4dDsgcmVnaW9u
OyByZWdpb24gPSByZWdpb24tPm1fbmV4dCkKKyAgICAgICAgYnVpbGRGcmVlTGlzdEluKHJlZ2lv
bik7CisgICAgCisgICAgbV9yZWdpb25IZWFkLT5tX25leHQgPSAwOworICAgIG1fZnJlZUxpc3RI
ZWFkID0gMDsKKyAgICBzdGFydEJ1bXBpbmdJbihtX3JlZ2lvbkhlYWQpOworfQorCit0ZW1wbGF0
ZTx0eXBlbmFtZSBUPgordm9pZCBBbGxvY2F0b3I6OnJlc2V0KCkKK3sKKyAgICBmcmVlUmVnaW9u
c1N0YXJ0aW5nQXQobV9yZWdpb25IZWFkKTsKKyAgICAKKyAgICBtX3JlZ2lvbkhlYWQgPSAwOwor
ICAgIG1fZnJlZUxpc3RIZWFkID0gMDsKKyAgICBtX2J1bXBSZW1haW5pbmcgPSAwOworfQorCit0
ZW1wbGF0ZTx0eXBlbmFtZSBUPgordW5zaWduZWQgQWxsb2NhdG9yOjppbmRleE9mKFQqIG9iamVj
dCkKK3sKKyAgICB1bnNpZ25lZCBiYXNlSW5kZXggPSAwOworICAgIGZvciAoUmVnaW9uKiByZWdp
b24gPSBtX3JlZ2lvbkhlYWQ7IHJlZ2lvbjsgcmVnaW9uID0gcmVnaW9uLT5tX25leHQpIHsKKyAg
ICAgICAgaWYgKHJlZ2lvbi0+aXNJblRoaXNSZWdpb24ob2JqZWN0KSkKKyAgICAgICAgICAgIHJl
dHVybiBiYXNlSW5kZXggKyAob2JqZWN0IC0gcmVnaW9uLT5kYXRhKCkpOworICAgICAgICBiYXNl
SW5kZXggKz0gUmVnaW9uOjpudW1iZXJPZlRoaW5nc1BlclJlZ2lvbigpOworICAgIH0KKyAgICBD
UkFTSCgpOworICAgIHJldHVybiAwOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorQWxsb2Nh
dG9yKiBBbGxvY2F0b3I6OmFsbG9jYXRvck9mKFQqIG9iamVjdCkKK3sKKyAgICByZXR1cm4gUmVn
aW9uOjpyZWdpb25Gb3Iob2JqZWN0KS0+bV9hbGxvY2F0b3I7Cit9CisKK3RlbXBsYXRlPHR5cGVu
YW1lIFQ+CitBTFdBWVNfSU5MSU5FIHZvaWQqIEFsbG9jYXRvcjo6YnVtcEFsbG9jYXRlKCkKK3sK
KyAgICBpZiAodW5zaWduZWQgcmVtYWluaW5nID0gbV9idW1wUmVtYWluaW5nKSB7CisgICAgICAg
IHJlbWFpbmluZy0tOworICAgICAgICBtX2J1bXBSZW1haW5pbmcgPSByZW1haW5pbmc7CisgICAg
ICAgIHJldHVybiBtX2J1bXBFbmQgLSAocmVtYWluaW5nICsgMSk7CisgICAgfQorICAgIHJldHVy
biAwOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgordm9pZCogQWxsb2NhdG9yOjpmcmVlTGlz
dEFsbG9jYXRlKCkKK3sKKyAgICB2b2lkKiogcmVzdWx0ID0gbV9mcmVlTGlzdEhlYWQ7CisgICAg
aWYgKFVOTElLRUxZKCFyZXN1bHQpKQorICAgICAgICByZXR1cm4gYWxsb2NhdGVTbG93KCk7Cisg
ICAgbV9mcmVlTGlzdEhlYWQgPSBiaXR3aXNlX2Nhc3Q8dm9pZCoqPigqcmVzdWx0KTsKKyAgICBy
ZXR1cm4gcmVzdWx0OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgordm9pZCogQWxsb2NhdG9y
OjphbGxvY2F0ZVNsb3coKQoreworICAgIEFTU0VSVCghbV9mcmVlTGlzdEhlYWQpOworICAgIEFT
U0VSVCghbV9idW1wUmVtYWluaW5nKTsKKyAgICAKKyAgICBQYWdlQWxsb2NhdGlvbkFsaWduZWQg
YWxsb2NhdGlvbiA9IFBhZ2VBbGxvY2F0aW9uQWxpZ25lZDo6YWxsb2NhdGUoUmVnaW9uOjpzaXpl
KCksIFJlZ2lvbjo6c2l6ZSgpLCBPU0FsbG9jYXRvcjo6SlNHQ0hlYXBQYWdlcyk7CisgICAgaWYg
KCFzdGF0aWNfY2FzdDxib29sPihhbGxvY2F0aW9uKSkKKyAgICAgICAgQ1JBU0goKTsKKyAgICBS
ZWdpb24qIHJlZ2lvbiA9IHN0YXRpY19jYXN0PFJlZ2lvbio+KGFsbG9jYXRpb24uYmFzZSgpKTsK
KyAgICByZWdpb24tPm1fYWxsb2NhdGlvbiA9IG1fYWxsb2NhdGlvbjsKKyAgICByZWdpb24tPm1f
YWxsb2N0b3IgPSB0aGlzOworICAgIHN0YXJ0QnVtcGluZ0luKHJlZ2lvbik7CisgICAgcmVnaW9u
LT5tX25leHQgPSBtX3JlZ2lvbkhlYWQ7CisgICAgbV9yZWdpb25IZWFkID0gcmVnaW9uOworICAg
IAorICAgIHZvaWQqIHJlc3VsdCA9IGJ1bXBBbGxvY2F0ZSgpOworICAgIEFTU0VSVChyZXN1bHQp
OworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+Cit2b2lkIEFs
bG9jYXRvcjo6ZnJlZVJlZ2lvbnNTdGFydGluZ0F0KFJlZ2lvbiogcmVnaW9uKQoreworICAgIHdo
aWxlIChyZWdpb24pIHsKKyAgICAgICAgUmVnaW9uKiBuZXh0UmVnaW9uID0gcmVnaW9uLT5tX25l
eHQ7CisgICAgICAgIHJlZ2lvbi0+bV9hbGxvY2F0aW9uLmRlYWxsb2NhdGUoKTsKKyAgICAgICAg
cmVnaW9uID0gbmV4dFJlZ2lvbjsKKyAgICB9Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+Cit2
b2lkIEFsbG9jYXRvcjo6c3RhcnRCdW1waW5nSW4oUmVnaW9uKiByZWdpb24pCit7CisgICAgbV9i
dW1wRW5kID0gcmVnaW9uLT5kYXRhKCkgKyBSZWdpb246Om51bWJlck9mVGhpbmdzUGVyUmVnaW9u
KCk7CisgICAgbV9idW1wUmVtYWluaW5nID0gUmVnaW9uOjpudW1iZXJPZlRoaW5nc1BlclJlZ2lv
bigpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUo
REZHX0pJVCkKKworI2VuZGlmIC8vIERGR0FsbG9jYXRvcl9oCisKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRzU2ltcGxpZmljYXRpb25QaGFzZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVudHNTaW1wbGlmaWNh
dGlvblBoYXNlLmNwcAkocmV2aXNpb24gMTQwNTY3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdBcmd1bWVudHNTaW1wbGlmaWNhdGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDEzIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
MTQ5LDExICsxNDksMTAgQEAgcHVibGljOgogICAgICAgICAgICAgaWYgKCFibG9jaykKICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW5kZXhJbkJs
b2NrID0gMDsgaW5kZXhJbkJsb2NrIDwgYmxvY2stPnNpemUoKTsgKytpbmRleEluQmxvY2spIHsK
LSAgICAgICAgICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4ID0gYmxvY2stPmF0KGluZGV4SW5C
bG9jayk7Ci0gICAgICAgICAgICAgICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhbbm9kZUluZGV4XTsK
LSAgICAgICAgICAgICAgICBpZiAoIW5vZGUuc2hvdWxkR2VuZXJhdGUoKSkKKyAgICAgICAgICAg
ICAgICBOb2RlKiBub2RlID0gYmxvY2stPmF0KGluZGV4SW5CbG9jayk7CisgICAgICAgICAgICAg
ICAgaWYgKCFub2RlLT5zaG91bGRHZW5lcmF0ZSgpKQogICAgICAgICAgICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUub3AoKSkgeworICAgICAgICAgICAg
ICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewogICAgICAgICAgICAgICAgIGNhc2UgQ3JlYXRlQXJn
dW1lbnRzOiB7CiAgICAgICAgICAgICAgICAgICAgIC8vIElnbm9yZSB0aGlzIG9wLiBJZiB3ZSBz
ZWUgYSBsb25lIENyZWF0ZUFyZ3VtZW50cyB0aGVuIHdlIHdhbnQgdG8KICAgICAgICAgICAgICAg
ICAgICAgLy8gY29tcGxldGVseSBpZ25vcmUgaXQgYmVjYXVzZToKQEAgLTE3MywxNiArMTcyLDE2
IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIAogICAg
ICAgICAgICAgICAgIGNhc2UgU2V0TG9jYWw6IHsKLSAgICAgICAgICAgICAgICAgICAgTm9kZSYg
c291cmNlID0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXTsKLSAgICAgICAgICAgICAgICAgICAgVmFy
aWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBub2RlLnZhcmlhYmxlQWNjZXNz
RGF0YSgpOworICAgICAgICAgICAgICAgICAgICBOb2RlKiBzb3VyY2UgPSBub2RlLT5jaGlsZDEo
KS5ub2RlKCk7CisgICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFi
bGVBY2Nlc3NEYXRhID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CiAgICAgICAgICAgICAg
ICAgICAgIGludCBhcmd1bWVudHNSZWdpc3RlciA9Ci0gICAgICAgICAgICAgICAgICAgICAgICBt
X2dyYXBoLnVuY2hlY2tlZEFyZ3VtZW50c1JlZ2lzdGVyRm9yKG5vZGUuY29kZU9yaWdpbik7Ci0g
ICAgICAgICAgICAgICAgICAgIGlmIChzb3VyY2Uub3AoKSAhPSBDcmVhdGVBcmd1bWVudHMgJiYg
c291cmNlLm9wKCkgIT0gUGhhbnRvbUFyZ3VtZW50cykgeworICAgICAgICAgICAgICAgICAgICAg
ICAgbV9ncmFwaC51bmNoZWNrZWRBcmd1bWVudHNSZWdpc3RlckZvcihub2RlLT5jb2RlT3JpZ2lu
KTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHNvdXJjZS0+b3AoKSAhPSBDcmVhdGVBcmd1bWVu
dHMgJiYgc291cmNlLT5vcCgpICE9IFBoYW50b21Bcmd1bWVudHMpIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHRoZSBzb3VyY2Ugb2YgdGhlIFNldExvY2FsIGtu
b3dzIHRoYXQgaWYgaXQncwogICAgICAgICAgICAgICAgICAgICAgICAgLy8gYSB2YXJpYWJsZSB0
aGF0IHdlIHRoaW5rIGlzIGFsaWFzZWQgdG8gdGhlIGFyZ3VtZW50cywgdGhlbiBpdAogICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gbWF5IGVzY2FwZSBhdCB0aGlzIHBvaW50LiBJbiBmdXR1cmUs
IHdlIGNvdWxkIHRyYWNrIHRyYW5zaXRpdmUKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFs
aWFzaW5nLiBCdXQgbm90IHlldC4KLSAgICAgICAgICAgICAgICAgICAgICAgIG9ic2VydmVCYWRB
cmd1bWVudHNVc2Uobm9kZS5jaGlsZDEoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBvYnNl
cnZlQmFkQXJndW1lbnRzVXNlKHNvdXJjZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAKICAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIElmIHRoaXMgaXMgYW4gYXNzaWdubWVudCB0byB0aGUg
YXJndW1lbnRzIHJlZ2lzdGVyLCB0aGVuCiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBwcmV0
ZW5kIGFzIGlmIHRoZSBhcmd1bWVudHMgd2VyZSBjcmVhdGVkLiBXZSBkb24ndCB3YW50IHRvCkBA
IC0xOTUsMTQgKzE5NCwxNCBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBp
bml0X2xhenlfcmVnIHNpbmNlIGl0IHRyZWF0cyBDcmVhdGVBcmd1bWVudHMgYXMgcmVhZGluZwog
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gbG9jYWwgdmFyaWFibGVzLiBUaGF0IGNvdWxkIGJl
IGZpeGVkLCBidXQgaXQncyBlYXNpZXIgdG8KICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdv
cmsgYXJvdW5kIHRoaXMgaGVyZS4KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzb3VyY2Uu
b3AoKSA9PSBKU0NvbnN0YW50Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgIXNvdXJj
ZS52YWx1ZU9mSlNDb25zdGFudChjb2RlQmxvY2soKSkpCisgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoc291cmNlLT5vcCgpID09IEpTQ29uc3RhbnQKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAmJiAhc291cmNlLT52YWx1ZU9mSlNDb25zdGFudChjb2RlQmxvY2soKSkpCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAKICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChhcmd1bWVudHNSZWdpc3RlciAhPSBJbnZhbGlkVmly
dHVhbFJlZ2lzdGVyCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgKHZhcmlhYmxlQWNj
ZXNzRGF0YS0+bG9jYWwoKSA9PSBhcmd1bWVudHNSZWdpc3RlcgogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB8fCB2YXJpYWJsZUFjY2Vzc0RhdGEtPmxvY2FsKCkgPT0gdW5tb2RpZmll
ZEFyZ3VtZW50c1JlZ2lzdGVyKGFyZ3VtZW50c1JlZ2lzdGVyKSkpIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBtX2NyZWF0ZXNBcmd1bWVudHMuYWRkKG5vZGUuY29kZU9yaWdpbi5pbmxp
bmVDYWxsRnJhbWUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fY3JlYXRlc0FyZ3Vt
ZW50cy5hZGQobm9kZS0+Y29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpOwogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgfQogCkBAIC0y
MTQsMTkgKzIxMywxOSBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgICAgICBBcmd1bWVu
dHNBbGlhc2luZ0RhdGEmIGRhdGEgPQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fYXJn
dW1lbnRzQWxpYXNpbmcuZmluZCh2YXJpYWJsZUFjY2Vzc0RhdGEpLT52YWx1ZTsKICAgICAgICAg
ICAgICAgICAgICAgICAgIGRhdGEubWVyZ2VOb25Bcmd1bWVudHNBc3NpZ25tZW50KCk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBkYXRhLm1lcmdlQ2FsbENvbnRleHQobm9kZS5jb2RlT3JpZ2lu
LmlubGluZUNhbGxGcmFtZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLm1lcmdlQ2Fs
bENvbnRleHQobm9kZS0+Y29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpOwogICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICAgICAgaWYgKGFyZ3VtZW50c1JlZ2lzdGVyICE9IEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIKICAg
ICAgICAgICAgICAgICAgICAgICAgICYmICh2YXJpYWJsZUFjY2Vzc0RhdGEtPmxvY2FsKCkgPT0g
YXJndW1lbnRzUmVnaXN0ZXIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCB2YXJpYWJs
ZUFjY2Vzc0RhdGEtPmxvY2FsKCkgPT0gdW5tb2RpZmllZEFyZ3VtZW50c1JlZ2lzdGVyKGFyZ3Vt
ZW50c1JlZ2lzdGVyKSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLmNvZGVP
cmlnaW4uaW5saW5lQ2FsbEZyYW1lID09IHNvdXJjZS5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFt
ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5jb2RlT3JpZ2luLmlubGluZUNh
bGxGcmFtZSA9PSBzb3VyY2UtPmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKQogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgbV9jcmVh
dGVzQXJndW1lbnRzLmFkZChzb3VyY2UuY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpOworICAg
ICAgICAgICAgICAgICAgICAgICAgbV9jcmVhdGVzQXJndW1lbnRzLmFkZChzb3VyY2UtPmNvZGVP
cmlnaW4uaW5saW5lQ2FsbEZyYW1lKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIGlmICh2YXJpYWJsZUFj
Y2Vzc0RhdGEtPmlzQ2FwdHVyZWQoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgbV9jcmVh
dGVzQXJndW1lbnRzLmFkZChzb3VyY2UuY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpOworICAg
ICAgICAgICAgICAgICAgICAgICAgbV9jcmVhdGVzQXJndW1lbnRzLmFkZChzb3VyY2UtPmNvZGVP
cmlnaW4uaW5saW5lQ2FsbEZyYW1lKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIEFyZ3VtZW50c0FsaWFz
aW5nRGF0YSYgZGF0YSA9CkBAIC0yMzQsMjkgKzIzMywyOSBAQCBwdWJsaWM6CiAgICAgICAgICAg
ICAgICAgICAgIGRhdGEubWVyZ2VBcmd1bWVudHNBc3NpZ25tZW50KCk7CiAgICAgICAgICAgICAg
ICAgICAgIC8vIFRoaXMgZW5zdXJlcyB0aGF0IHRoZSB2YXJpYWJsZSdzIHVzZXMgYXJlIGluIHRo
ZSBzYW1lIGNvbnRleHQgYXMKICAgICAgICAgICAgICAgICAgICAgLy8gdGhlIGFyZ3VtZW50cyBp
dCBpcyBhbGlhc2luZy4KLSAgICAgICAgICAgICAgICAgICAgZGF0YS5tZXJnZUNhbGxDb250ZXh0
KG5vZGUuY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpOwotICAgICAgICAgICAgICAgICAgICBk
YXRhLm1lcmdlQ2FsbENvbnRleHQoc291cmNlLmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKTsK
KyAgICAgICAgICAgICAgICAgICAgZGF0YS5tZXJnZUNhbGxDb250ZXh0KG5vZGUtPmNvZGVPcmln
aW4uaW5saW5lQ2FsbEZyYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgZGF0YS5tZXJnZUNhbGxD
b250ZXh0KHNvdXJjZS0+Y29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpOwogICAgICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIAog
ICAgICAgICAgICAgICAgIGNhc2UgR2V0TG9jYWw6CiAgICAgICAgICAgICAgICAgY2FzZSBQaGk6
IHsKLSAgICAgICAgICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vz
c0RhdGEgPSBub2RlLnZhcmlhYmxlQWNjZXNzRGF0YSgpOworICAgICAgICAgICAgICAgICAgICBW
YXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9IG5vZGUtPnZhcmlhYmxlQWNj
ZXNzRGF0YSgpOwogICAgICAgICAgICAgICAgICAgICBpZiAodmFyaWFibGVBY2Nlc3NEYXRhLT5p
c0NhcHR1cmVkKCkpCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
ICAgICAgICAgQXJndW1lbnRzQWxpYXNpbmdEYXRhJiBkYXRhID0KICAgICAgICAgICAgICAgICAg
ICAgICAgIG1fYXJndW1lbnRzQWxpYXNpbmcuZmluZCh2YXJpYWJsZUFjY2Vzc0RhdGEpLT52YWx1
ZTsKLSAgICAgICAgICAgICAgICAgICAgZGF0YS5tZXJnZUNhbGxDb250ZXh0KG5vZGUuY29kZU9y
aWdpbi5pbmxpbmVDYWxsRnJhbWUpOworICAgICAgICAgICAgICAgICAgICBkYXRhLm1lcmdlQ2Fs
bENvbnRleHQobm9kZS0+Y29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpOwogICAgICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIAog
ICAgICAgICAgICAgICAgIGNhc2UgRmx1c2g6IHsKLSAgICAgICAgICAgICAgICAgICAgVmFyaWFi
bGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBub2RlLnZhcmlhYmxlQWNjZXNzRGF0
YSgpOworICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNj
ZXNzRGF0YSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOwogICAgICAgICAgICAgICAgICAg
ICBpZiAodmFyaWFibGVBY2Nlc3NEYXRhLT5pc0NhcHR1cmVkKCkpCiAgICAgICAgICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgQXJndW1lbnRzQWxpYXNpbmdEYXRh
JiBkYXRhID0KICAgICAgICAgICAgICAgICAgICAgICAgIG1fYXJndW1lbnRzQWxpYXNpbmcuZmlu
ZCh2YXJpYWJsZUFjY2Vzc0RhdGEpLT52YWx1ZTsKLSAgICAgICAgICAgICAgICAgICAgZGF0YS5t
ZXJnZUNhbGxDb250ZXh0KG5vZGUuY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpOworICAgICAg
ICAgICAgICAgICAgICBkYXRhLm1lcmdlQ2FsbENvbnRleHQobm9kZS0+Y29kZU9yaWdpbi5pbmxp
bmVDYWxsRnJhbWUpOwogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAg
Ly8gSWYgYSB2YXJpYWJsZSBpcyB1c2VkIGluIGEgZmx1c2ggdGhlbiBieSBkZWZpbml0aW9uIGl0
IGVzY2FwZXMuCiAgICAgICAgICAgICAgICAgICAgIGRhdGEuZXNjYXBlcyA9IHRydWU7CkBAIC0y
NjQsMTggKzI2MywxOCBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgICAgICAKICAgICAgICAgICAgICAgICBjYXNlIFNldEFyZ3VtZW50OiB7Ci0gICAgICAgICAg
ICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhID0gbm9kZS52
YXJpYWJsZUFjY2Vzc0RhdGEoKTsKKyAgICAgICAgICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NE
YXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKICAg
ICAgICAgICAgICAgICAgICAgaWYgKHZhcmlhYmxlQWNjZXNzRGF0YS0+aXNDYXB0dXJlZCgpKQog
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIEFyZ3Vt
ZW50c0FsaWFzaW5nRGF0YSYgZGF0YSA9CiAgICAgICAgICAgICAgICAgICAgICAgICBtX2FyZ3Vt
ZW50c0FsaWFzaW5nLmZpbmQodmFyaWFibGVBY2Nlc3NEYXRhKS0+dmFsdWU7CiAgICAgICAgICAg
ICAgICAgICAgIGRhdGEubWVyZ2VOb25Bcmd1bWVudHNBc3NpZ25tZW50KCk7Ci0gICAgICAgICAg
ICAgICAgICAgIGRhdGEubWVyZ2VDYWxsQ29udGV4dChub2RlLmNvZGVPcmlnaW4uaW5saW5lQ2Fs
bEZyYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgZGF0YS5tZXJnZUNhbGxDb250ZXh0KG5vZGUt
PmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAg
ICBjYXNlIEdldEJ5VmFsOiB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChub2RlLmFycmF5TW9k
ZSgpLnR5cGUoKSAhPSBBcnJheTo6QXJndW1lbnRzKSB7CisgICAgICAgICAgICAgICAgICAgIGlm
IChub2RlLT5hcnJheU1vZGUoKS50eXBlKCkgIT0gQXJyYXk6OkFyZ3VtZW50cykgewogICAgICAg
ICAgICAgICAgICAgICAgICAgb2JzZXJ2ZUJhZEFyZ3VtZW50c1VzZXMobm9kZSk7CiAgICAgICAg
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgfQpAQCAtMjgzLDE4
ICsyODIsMTggQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICAvLyBUaGF0J3Mgc28gYXdm
dWwgYW5kIHByZXR0eSBtdWNoIGltcG9zc2libGUgc2luY2UgaXQgd291bGQKICAgICAgICAgICAg
ICAgICAgICAgLy8gaW1wbHkgdGhhdCB0aGUgYXJndW1lbnRzIHdlcmUgcHJlZGljdGVkIGludGVn
ZXIsIGJ1dCBpdCdzCiAgICAgICAgICAgICAgICAgICAgIC8vIGdvb2QgdG8gYmUgZGVmZW5zaXZl
IGFuZCB0aG9yb3VnaC4KLSAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZUJhZEFyZ3VtZW50c1Vz
ZShub2RlLmNoaWxkMigpKTsKLSAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZVByb3BlckFyZ3Vt
ZW50c1VzZShub2RlLCBub2RlLmNoaWxkMSgpKTsKKyAgICAgICAgICAgICAgICAgICAgb2JzZXJ2
ZUJhZEFyZ3VtZW50c1VzZShub2RlLT5jaGlsZDIoKS5ub2RlKCkpOworICAgICAgICAgICAgICAg
ICAgICBvYnNlcnZlUHJvcGVyQXJndW1lbnRzVXNlKG5vZGUsIG5vZGUtPmNoaWxkMSgpKTsKICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgICAgICAKICAgICAgICAgICAgICAgICBjYXNlIEdldEFycmF5TGVuZ3RoOiB7Ci0gICAgICAg
ICAgICAgICAgICAgIGlmIChub2RlLmFycmF5TW9kZSgpLnR5cGUoKSAhPSBBcnJheTo6QXJndW1l
bnRzKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS50eXBlKCkg
IT0gQXJyYXk6OkFyZ3VtZW50cykgewogICAgICAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZUJh
ZEFyZ3VtZW50c1VzZXMobm9kZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAg
ICAgICAgICAgIG9ic2VydmVQcm9wZXJBcmd1bWVudHNVc2Uobm9kZSwgbm9kZS5jaGlsZDEoKSk7
CisgICAgICAgICAgICAgICAgICAgIG9ic2VydmVQcm9wZXJBcmd1bWVudHNVc2Uobm9kZSwgbm9k
ZS0+Y2hpbGQxKCkpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgICAgIApAQCAtMzM1LDE2ICszMzQsMTUgQEAgcHVibGljOgog
ICAgICAgICAgICAgaWYgKCFibG9jaykKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaW5kZXhJbkJsb2NrID0gMDsgaW5kZXhJbkJsb2NrIDwgYmxv
Y2stPnNpemUoKTsgKytpbmRleEluQmxvY2spIHsKLSAgICAgICAgICAgICAgICBOb2RlSW5kZXgg
bm9kZUluZGV4ID0gYmxvY2stPmF0KGluZGV4SW5CbG9jayk7Ci0gICAgICAgICAgICAgICAgTm9k
ZSYgbm9kZSA9IG1fZ3JhcGhbbm9kZUluZGV4XTsKLSAgICAgICAgICAgICAgICBpZiAoIW5vZGUu
c2hvdWxkR2VuZXJhdGUoKSkKKyAgICAgICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPmF0
KGluZGV4SW5CbG9jayk7CisgICAgICAgICAgICAgICAgaWYgKCFub2RlLT5zaG91bGRHZW5lcmF0
ZSgpKQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICBpZiAo
bm9kZS5vcCgpICE9IFNldExvY2FsKQorICAgICAgICAgICAgICAgIGlmIChub2RlLT5vcCgpICE9
IFNldExvY2FsKQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAg
ICBOb2RlJiBzb3VyY2UgPSBtX2dyYXBoW25vZGUuY2hpbGQxKCldOwotICAgICAgICAgICAgICAg
IGlmIChzb3VyY2Uub3AoKSAhPSBDcmVhdGVBcmd1bWVudHMpCisgICAgICAgICAgICAgICAgTm9k
ZSogc291cmNlID0gbm9kZS0+Y2hpbGQxKCkubm9kZSgpOworICAgICAgICAgICAgICAgIGlmIChz
b3VyY2UtPm9wKCkgIT0gQ3JlYXRlQXJndW1lbnRzKQogICAgICAgICAgICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNz
RGF0YSA9IG5vZGUudmFyaWFibGVBY2Nlc3NEYXRhKCk7CisgICAgICAgICAgICAgICAgVmFyaWFi
bGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0Rh
dGEoKTsKICAgICAgICAgICAgICAgICBpZiAodmFyaWFibGVBY2Nlc3NEYXRhLT5pc0NhcHR1cmVk
KCkpIHsKICAgICAgICAgICAgICAgICAgICAgLy8gVGhlIGNhcHR1cmVkIGNhc2Ugd291bGQgaGF2
ZSBhbHJlYWR5IGJlZW4gdGFrZW4gY2FyZSBvZiBpbiB0aGUKICAgICAgICAgICAgICAgICAgICAg
Ly8gcHJldmlvdXMgcGFzcy4KQEAgLTM1Niw3ICszNTQsNyBAQCBwdWJsaWM6CiAgICAgICAgICAg
ICAgICAgaWYgKGRhdGEuaXNWYWxpZCgpKQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsK
ICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBtX2NyZWF0ZXNBcmd1bWVudHMuYWRk
KHNvdXJjZS5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSk7CisgICAgICAgICAgICAgICAgbV9j
cmVhdGVzQXJndW1lbnRzLmFkZChzb3VyY2UtPmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKTsK
ICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICAKQEAgLTQxNCwyNCArNDEyLDIzIEBA
IHB1YmxpYzoKICAgICAgICAgICAgIGlmICghYmxvY2spCiAgICAgICAgICAgICAgICAgY29udGlu
dWU7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGluZGV4SW5CbG9jayA9IDA7IGluZGV4SW5C
bG9jayA8IGJsb2NrLT5zaXplKCk7ICsraW5kZXhJbkJsb2NrKSB7Ci0gICAgICAgICAgICAgICAg
Tm9kZUluZGV4IG5vZGVJbmRleCA9IGJsb2NrLT5hdChpbmRleEluQmxvY2spOwotICAgICAgICAg
ICAgICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW25vZGVJbmRleF07Ci0gICAgICAgICAgICAgICAg
aWYgKCFub2RlLnNob3VsZEdlbmVyYXRlKCkpCisgICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9
IGJsb2NrLT5hdChpbmRleEluQmxvY2spOworICAgICAgICAgICAgICAgIGlmICghbm9kZS0+c2hv
dWxkR2VuZXJhdGUoKSkKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAg
ICAgICAgCi0gICAgICAgICAgICAgICAgc3dpdGNoIChub2RlLm9wKCkpIHsKKyAgICAgICAgICAg
ICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKICAgICAgICAgICAgICAgICBjYXNlIFNldExvY2Fs
OiB7Ci0gICAgICAgICAgICAgICAgICAgIE5vZGUmIHNvdXJjZSA9IG1fZ3JhcGhbbm9kZS5jaGls
ZDEoKV07Ci0gICAgICAgICAgICAgICAgICAgIGlmIChzb3VyY2Uub3AoKSAhPSBDcmVhdGVBcmd1
bWVudHMpCisgICAgICAgICAgICAgICAgICAgIE5vZGUqIHNvdXJjZSA9IG5vZGUtPmNoaWxkMSgp
Lm5vZGUoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHNvdXJjZS0+b3AoKSAhPSBDcmVhdGVB
cmd1bWVudHMpCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAg
ICAgICAgCi0gICAgICAgICAgICAgICAgICAgIGlmIChtX2NyZWF0ZXNBcmd1bWVudHMuY29udGFp
bnMoc291cmNlLmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKSkKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKG1fY3JlYXRlc0FyZ3VtZW50cy5jb250YWlucyhzb3VyY2UtPmNvZGVPcmlnaW4uaW5s
aW5lQ2FsbEZyYW1lKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJp
YWJsZUFjY2Vzc0RhdGEgPSBub2RlLnZhcmlhYmxlQWNjZXNzRGF0YSgpOworICAgICAgICAgICAg
ICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9IG5vZGUtPnZh
cmlhYmxlQWNjZXNzRGF0YSgpOwogICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAg
ICAgICAgaWYgKG1fZ3JhcGguYXJndW1lbnRzUmVnaXN0ZXJGb3Iobm9kZS5jb2RlT3JpZ2luKSA9
PSB2YXJpYWJsZUFjY2Vzc0RhdGEtPmxvY2FsKCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
IHx8IHVubW9kaWZpZWRBcmd1bWVudHNSZWdpc3RlcihtX2dyYXBoLmFyZ3VtZW50c1JlZ2lzdGVy
Rm9yKG5vZGUuY29kZU9yaWdpbikpID09IHZhcmlhYmxlQWNjZXNzRGF0YS0+bG9jYWwoKSkKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGguYXJndW1lbnRzUmVnaXN0ZXJGb3Iobm9kZS0+
Y29kZU9yaWdpbikgPT0gdmFyaWFibGVBY2Nlc3NEYXRhLT5sb2NhbCgpCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICB8fCB1bm1vZGlmaWVkQXJndW1lbnRzUmVnaXN0ZXIobV9ncmFwaC5hcmd1
bWVudHNSZWdpc3RlckZvcihub2RlLT5jb2RlT3JpZ2luKSkgPT0gdmFyaWFibGVBY2Nlc3NEYXRh
LT5sb2NhbCgpKQogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgICAg
ICAgICAgICAgQVNTRVJUKCF2YXJpYWJsZUFjY2Vzc0RhdGEtPmlzQ2FwdHVyZWQoKSk7CkBAIC00
NjksMTYgKzQ2NiwxNiBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgY2FzZSBGb3J3YXJkU3Ry
dWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnQ6CiAgICAgICAgICAgICAgICAgY2FzZSBDaGVja0Fy
cmF5OiB7CiAgICAgICAgICAgICAgICAgICAgIC8vIFdlIGNhbiBqdXN0IGdldCByaWQgb2YgdGhp
cyBub2RlLCBpZiBpdCByZWZlcmVuY2VzIGEgcGhhbnRvbSBhcmd1bWVudC4KLSAgICAgICAgICAg
ICAgICAgICAgaWYgKCFpc09LVG9PcHRpbWl6ZShtX2dyYXBoW25vZGUuY2hpbGQxKCldKSkKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKCFpc09LVG9PcHRpbWl6ZShub2RlLT5jaGlsZDEoKS5ub2Rl
KCkpKQogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAg
IG1fZ3JhcGguZGVyZWYobm9kZS5jaGlsZDEoKSk7Ci0gICAgICAgICAgICAgICAgICAgIG5vZGUu
c2V0T3BBbmREZWZhdWx0RmxhZ3MoUGhhbnRvbSk7Ci0gICAgICAgICAgICAgICAgICAgIG5vZGUu
Y2hpbGRyZW4uc2V0Q2hpbGQxKEVkZ2UoKSk7CisgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgu
ZGVyZWYobm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgICAgICAgICBub2RlLT5zZXRPcEFu
ZERlZmF1bHRGbGFncyhQaGFudG9tKTsKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGRy
ZW4uc2V0Q2hpbGQxKEVkZ2UoKSk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgY2FzZSBH
ZXRCeVZhbDogewotICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS5hcnJheU1vZGUoKS50eXBl
KCkgIT0gQXJyYXk6OkFyZ3VtZW50cykKKyAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmFy
cmF5TW9kZSgpLnR5cGUoKSAhPSBBcnJheTo6QXJndW1lbnRzKQogICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAKICAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBjYW4gYmUgc2ltcGxp
ZmllZCB0byBHZXRNeUFyZ3VtZW50QnlWYWwgaWYgd2Uga25vdyB0aGF0CkBAIC00ODgsMjggKzQ4
NSwyOCBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgIC8vIDIpIEl0cyBmaXJzdCBjaGls
ZCBpcyBDcmVhdGVBcmd1bWVudHMgYW5kIGl0cyBJbmxpbmVDYWxsRnJhbWUqCiAgICAgICAgICAg
ICAgICAgICAgIC8vICAgIGlzIG5vdCBtYXJrZWQgYXMgY3JlYXRpbmcgYXJndW1lbnRzLgogICAg
ICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFpc09LVG9PcHRpbWl6
ZShtX2dyYXBoW25vZGUuY2hpbGQxKCldKSkKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFpc09L
VG9PcHRpbWl6ZShub2RlLT5jaGlsZDEoKS5ub2RlKCkpKQogICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBtX2dy
YXBoLmRlcmVmKG5vZGUuY2hpbGQxKCkpOwotICAgICAgICAgICAgICAgICAgICBub2RlLmNoaWxk
cmVuLmNoaWxkMSgpID0gbm9kZS5jaGlsZHJlbi5jaGlsZDIoKTsKLSAgICAgICAgICAgICAgICAg
ICAgbm9kZS5jaGlsZHJlbi5jaGlsZDIoKSA9IEVkZ2UoKTsKLSAgICAgICAgICAgICAgICAgICAg
bm9kZS5zZXRPcEFuZERlZmF1bHRGbGFncyhHZXRNeUFyZ3VtZW50QnlWYWwpOworICAgICAgICAg
ICAgICAgICAgICBtX2dyYXBoLmRlcmVmKG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgICAg
ICAgICAgbm9kZS0+Y2hpbGRyZW4uY2hpbGQxKCkgPSBub2RlLT5jaGlsZHJlbi5jaGlsZDIoKTsK
KyAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGRyZW4uY2hpbGQyKCkgPSBFZGdlKCk7Cisg
ICAgICAgICAgICAgICAgICAgIG5vZGUtPnNldE9wQW5kRGVmYXVsdEZsYWdzKEdldE15QXJndW1l
bnRCeVZhbCk7CiAgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgPSB0cnVlOwogICAgICAgICAg
ICAgICAgICAgICAtLWluZGV4SW5CbG9jazsgLy8gRm9yY2UgcmVjb25zaWRlcmF0aW9uIG9mIHRo
aXMgb3Agbm93IHRoYXQgaXQncyBhIEdldE15QXJndW1lbnRCeVZhbC4KICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAKICAg
ICAgICAgICAgICAgICBjYXNlIEdldEFycmF5TGVuZ3RoOiB7Ci0gICAgICAgICAgICAgICAgICAg
IGlmIChub2RlLmFycmF5TW9kZSgpLnR5cGUoKSAhPSBBcnJheTo6QXJndW1lbnRzKQorICAgICAg
ICAgICAgICAgICAgICBpZiAobm9kZS0+YXJyYXlNb2RlKCkudHlwZSgpICE9IEFycmF5OjpBcmd1
bWVudHMpCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAg
ICAgCi0gICAgICAgICAgICAgICAgICAgIGlmICghaXNPS1RvT3B0aW1pemUobV9ncmFwaFtub2Rl
LmNoaWxkMSgpXSkpCisgICAgICAgICAgICAgICAgICAgIGlmICghaXNPS1RvT3B0aW1pemUobm9k
ZS0+Y2hpbGQxKCkubm9kZSgpKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5kZXJlZihub2Rl
LmNoaWxkMSgpKTsKLSAgICAgICAgICAgICAgICAgICAgbm9kZS5jaGlsZHJlbi5jaGlsZDEoKSA9
IEVkZ2UoKTsKLSAgICAgICAgICAgICAgICAgICAgbm9kZS5zZXRPcEFuZERlZmF1bHRGbGFncyhH
ZXRNeUFyZ3VtZW50c0xlbmd0aCk7CisgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguZGVyZWYo
bm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgICAgICAgICBub2RlLT5jaGlsZHJlbi5jaGls
ZDEoKSA9IEVkZ2UoKTsKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+c2V0T3BBbmREZWZhdWx0
RmxhZ3MoR2V0TXlBcmd1bWVudHNMZW5ndGgpOwogICAgICAgICAgICAgICAgICAgICBjaGFuZ2Vk
ID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgLS1pbmRleEluQmxvY2s7IC8vIEZvcmNlIHJl
Y29uc2lkZXJhdGlvbiBvZiB0aGlzIG9wIG5vZXcgdGhhdCBpdCdzIGEgR2V0TXlBcmd1bWVudHNM
ZW5ndGguCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtNTE3LDE2ICs1MTQsMTYgQEAg
cHVibGljOgogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBjYXNlIEdldE15
QXJndW1lbnRzTGVuZ3RoOgogICAgICAgICAgICAgICAgIGNhc2UgR2V0TXlBcmd1bWVudHNMZW5n
dGhTYWZlOiB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChtX2NyZWF0ZXNBcmd1bWVudHMuY29u
dGFpbnMobm9kZS5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSkpIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIEFTU0VSVChub2RlLm9wKCkgPT0gR2V0TXlBcmd1bWVudHNMZW5ndGhTYWZlKTsK
KyAgICAgICAgICAgICAgICAgICAgaWYgKG1fY3JlYXRlc0FyZ3VtZW50cy5jb250YWlucyhub2Rl
LT5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IEFTU0VSVChub2RlLT5vcCgpID09IEdldE15QXJndW1lbnRzTGVuZ3RoU2FmZSk7CiAgICAgICAg
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgICAgICBpZiAobm9kZS5vcCgpID09IEdldE15QXJndW1lbnRzTGVuZ3RoU2FmZSkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS5zZXRPcChHZXRNeUFyZ3VtZW50c0xlbmd0aCk7
CisgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5vcCgpID09IEdldE15QXJndW1lbnRzTGVu
Z3RoU2FmZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+c2V0T3AoR2V0TXlBcmd1
bWVudHNMZW5ndGgpOwogICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCA9IHRydWU7CiAg
ICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAg
ICAgICAgIENvZGVPcmlnaW4gY29kZU9yaWdpbiA9IG5vZGUuY29kZU9yaWdpbjsKKyAgICAgICAg
ICAgICAgICAgICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2luID0gbm9kZS0+Y29kZU9yaWdpbjsKICAg
ICAgICAgICAgICAgICAgICAgaWYgKCFjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSkKICAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAKQEAgLTUzNywz
MiArNTM0LDMyIEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgICAgIENoZWNrQXJndW1l
bnRzTm90Q3JlYXRlZCwgY29kZU9yaWdpbik7CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAg
ICAgICAgICAgICAgICBtX2dyYXBoLmNvbnZlcnRUb0NvbnN0YW50KAotICAgICAgICAgICAgICAg
ICAgICAgICAgbm9kZUluZGV4LCBqc051bWJlcihjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZS0+
YXJndW1lbnRzLnNpemUoKSAtIDEpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUsIGpz
TnVtYmVyKGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgpIC0gMSkp
OwogICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAKICAgICAg
ICAgICAgICAgICBjYXNlIEdldE15QXJndW1lbnRCeVZhbDoKICAgICAgICAgICAgICAgICBjYXNl
IEdldE15QXJndW1lbnRCeVZhbFNhZmU6IHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG1fY3Jl
YXRlc0FyZ3VtZW50cy5jb250YWlucyhub2RlLmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKSkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKG5vZGUub3AoKSA9PSBHZXRNeUFyZ3Vt
ZW50QnlWYWxTYWZlKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1fY3JlYXRlc0FyZ3VtZW50
cy5jb250YWlucyhub2RlLT5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSkpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIEFTU0VSVChub2RlLT5vcCgpID09IEdldE15QXJndW1lbnRCeVZhbFNh
ZmUpOwogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUub3AoKSA9PSBHZXRNeUFyZ3VtZW50QnlW
YWxTYWZlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBub2RlLnNldE9wKEdldE15QXJndW1l
bnRCeVZhbCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5vcCgpID09IEdldE15QXJn
dW1lbnRCeVZhbFNhZmUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPnNldE9wKEdl
dE15QXJndW1lbnRCeVZhbCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkID0gdHJ1
ZTsKICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBpZiAoIW5vZGUu
Y29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpCisgICAgICAgICAgICAgICAgICAgIGlmICghbm9k
ZS0+Y29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpCiAgICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFtX2dyYXBoW25vZGUuY2hpbGQxKCldLmhh
c0NvbnN0YW50KCkpCisgICAgICAgICAgICAgICAgICAgIGlmICghbm9kZS0+Y2hpbGQxKCktPmhh
c0NvbnN0YW50KCkpCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
ICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0udmFsdWVPZkpT
Q29uc3RhbnQoY29kZUJsb2NrKCkpOworICAgICAgICAgICAgICAgICAgICBKU1ZhbHVlIHZhbHVl
ID0gbm9kZS0+Y2hpbGQxKCktPnZhbHVlT2ZKU0NvbnN0YW50KGNvZGVCbG9jaygpKTsKICAgICAg
ICAgICAgICAgICAgICAgaWYgKCF2YWx1ZS5pc0ludDMyKCkpCiAgICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCBpbmRleCA9IHZhbHVlLmFz
SW50MzIoKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKGluZGV4IDwgMAogICAgICAgICAgICAg
ICAgICAgICAgICAgfHwgc3RhdGljX2Nhc3Q8c2l6ZV90PihpbmRleCArIDEpID49Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbm9kZS5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZS0+YXJn
dW1lbnRzLnNpemUoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5jb2RlT3Jp
Z2luLmlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzLnNpemUoKSkKICAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAg
Ly8gV2Uga25vdyB3aGljaCBhcmd1bWVudCB0aGlzIGlzIGFjY2Vzc2luZy4gQnV0IG9ubHkgYWZ0
ZXIgd2UgaGF2ZSBjaGVja2VkCkBAIC01NzQsMTMgKzU3MSwxMyBAQCBwdWJsaWM6CiAgICAgICAg
ICAgICAgICAgICAgIC8vIGhhcyBydW4gLSB0aGVyZWZvcmUgaXQgbWFrZXMgbGl0dGxlIHNlbnNl
IHRvIGxpbmsgdGhlIEdldExvY2FsIG9wZXJhdGlvbgogICAgICAgICAgICAgICAgICAgICAvLyBp
bnRvIHRoZSBWYXJpYWJsZUFjY2Vzc0RhdGEgYW5kIFBoaSBncmFwaHMuCiAKLSAgICAgICAgICAg
ICAgICAgICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2luID0gbm9kZS5jb2RlT3JpZ2luOwotICAgICAg
ICAgICAgICAgICAgICBBZGphY2VuY3lMaXN0IGNoaWxkcmVuID0gbm9kZS5jaGlsZHJlbjsKKyAg
ICAgICAgICAgICAgICAgICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2luID0gbm9kZS0+Y29kZU9yaWdp
bjsKKyAgICAgICAgICAgICAgICAgICAgQWRqYWNlbmN5TGlzdCBjaGlsZHJlbiA9IG5vZGUtPmNo
aWxkcmVuOwogICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgbm9kZS5j
b252ZXJ0VG9HZXRMb2NhbFVubGlua2VkKAorICAgICAgICAgICAgICAgICAgICBub2RlLT5jb252
ZXJ0VG9HZXRMb2NhbFVubGlua2VkKAogICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nh
c3Q8VmlydHVhbFJlZ2lzdGVyPigKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlLmNv
ZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbV9ncmFwaC5iYXNlbGluZUNvZGVCbG9ja0Zvcihub2RlLmNvZGVPcmlnaW4p
LT5hcmd1bWVudEluZGV4QWZ0ZXJDYXB0dXJlKGluZGV4KSkpOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG5vZGUtPmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCAr
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5iYXNlbGluZUNvZGVCbG9ja0Zv
cihub2RlLT5jb2RlT3JpZ2luKS0+YXJndW1lbnRJbmRleEFmdGVyQ2FwdHVyZShpbmRleCkpKTsK
IAogICAgICAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKICAgICAgICAg
ICAgICAgICAgICAgICAgIGluZGV4SW5CbG9jaywgRG9udFJlZkNoaWxkcmVuLCBEb250UmVmTm9k
ZSwgU3BlY05vbmUsIENoZWNrQXJndW1lbnRzTm90Q3JlYXRlZCwKQEAgLTU5NCwxMyArNTkxLDEz
IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIAogICAg
ICAgICAgICAgICAgIGNhc2UgVGVhck9mZkFyZ3VtZW50czogewotICAgICAgICAgICAgICAgICAg
ICBpZiAobV9jcmVhdGVzQXJndW1lbnRzLmNvbnRhaW5zKG5vZGUuY29kZU9yaWdpbi5pbmxpbmVD
YWxsRnJhbWUpKQorICAgICAgICAgICAgICAgICAgICBpZiAobV9jcmVhdGVzQXJndW1lbnRzLmNv
bnRhaW5zKG5vZGUtPmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKSkKICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAg
ICAgICAgbm9kZS5zZXRPcEFuZERlZmF1bHRGbGFncyhOb3ApOworICAgICAgICAgICAgICAgICAg
ICBub2RlLT5zZXRPcEFuZERlZmF1bHRGbGFncyhOb3ApOwogICAgICAgICAgICAgICAgICAgICBt
X2dyYXBoLmNsZWFyQW5kRGVyZWZDaGlsZDEobm9kZSk7CiAgICAgICAgICAgICAgICAgICAgIG1f
Z3JhcGguY2xlYXJBbmREZXJlZkNoaWxkMihub2RlKTsKLSAgICAgICAgICAgICAgICAgICAgbm9k
ZS5zZXRSZWZDb3VudCgwKTsKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+c2V0UmVmQ291bnQo
MCk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICAgICAgCkBAIC02MTYsMjUgKzYxMywyMyBAQCBwdWJsaWM6CiAgICAgICAgICAg
ICBpZiAoIWJsb2NrKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpbmRleEluQmxvY2sgPSAwOyBpbmRleEluQmxvY2sgPCBibG9jay0+c2l6ZSgp
OyArK2luZGV4SW5CbG9jaykgewotICAgICAgICAgICAgICAgIE5vZGVJbmRleCBub2RlSW5kZXgg
PSBibG9jay0+YXQoaW5kZXhJbkJsb2NrKTsKLSAgICAgICAgICAgICAgICBOb2RlKiBub2RlUHRy
ID0gJm1fZ3JhcGhbbm9kZUluZGV4XTsKLSAgICAgICAgICAgICAgICBpZiAobm9kZVB0ci0+b3Ao
KSAhPSBDcmVhdGVBcmd1bWVudHMpCisgICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2Nr
LT5hdChpbmRleEluQmxvY2spOworICAgICAgICAgICAgICAgIGlmIChub2RlLT5vcCgpICE9IENy
ZWF0ZUFyZ3VtZW50cykKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAg
ICAgICAgLy8gSWYgdGhpcyBpcyBhIENyZWF0ZUFyZ3VtZW50cyBmb3IgYW4gSW5saW5lQ2FsbEZy
YW1lKiB0aGF0IGRvZXMKICAgICAgICAgICAgICAgICAvLyBub3QgY3JlYXRlIGFyZ3VtZW50cywg
dGhlbiByZXBsYWNlIGl0IHdpdGggYSBQaGFudG9tQXJndW1lbnRzLgogICAgICAgICAgICAgICAg
IC8vIFBoYW50b21Bcmd1bWVudHMgaXMgYSBub24tZXhlY3V0aW5nIG5vZGUgdGhhdCBqdXN0IGlu
ZGljYXRlcwogICAgICAgICAgICAgICAgIC8vIHRoYXQgdGhlIG5vZGUgc2hvdWxkIGJlIHJlaWZp
ZWQgYXMgYW4gYXJndW1lbnRzIG9iamVjdCBvbiBPU1IKICAgICAgICAgICAgICAgICAvLyBleGl0
LgotICAgICAgICAgICAgICAgIGlmIChtX2NyZWF0ZXNBcmd1bWVudHMuY29udGFpbnMobm9kZVB0
ci0+Y29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpKQorICAgICAgICAgICAgICAgIGlmIChtX2Ny
ZWF0ZXNBcmd1bWVudHMuY29udGFpbnMobm9kZS0+Y29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUp
KQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICBpZiAobm9k
ZVB0ci0+c2hvdWxkR2VuZXJhdGUoKSkgeworICAgICAgICAgICAgICAgIGlmIChub2RlLT5zaG91
bGRHZW5lcmF0ZSgpKSB7CiAgICAgICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnRO
b2RlKAogICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBEb250UmVmQ2hpbGRy
ZW4sIERvbnRSZWZOb2RlLCBTcGVjTm9uZSwgUGhhbnRvbSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgIG5vZGVQdHItPmNvZGVPcmlnaW4sIG5vZGVQdHItPmNoaWxkcmVuKTsKLSAgICAgICAgICAg
ICAgICAgICAgbm9kZVB0ciA9ICZtX2dyYXBoW25vZGVJbmRleF07CisgICAgICAgICAgICAgICAg
ICAgICAgICBub2RlLT5jb2RlT3JpZ2luLCBub2RlLT5jaGlsZHJlbik7CiAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIG5vZGVQdHItPnNldE9wQW5kRGVmYXVsdEZsYWdzKFBoYW50
b21Bcmd1bWVudHMpOwotICAgICAgICAgICAgICAgIG5vZGVQdHItPmNoaWxkcmVuLnJlc2V0KCk7
CisgICAgICAgICAgICAgICAgbm9kZS0+c2V0T3BBbmREZWZhdWx0RmxhZ3MoUGhhbnRvbUFyZ3Vt
ZW50cyk7CisgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGRyZW4ucmVzZXQoKTsKICAgICAgICAg
ICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGluc2Vy
dGlvblNldC5leGVjdXRlKGJsb2NrKTsKQEAgLTY1NCwyOCArNjQ5LDI3IEBAIHByaXZhdGU6CiAg
ICAgICAgICAgICBEZWZhdWx0SGFzaDxWYXJpYWJsZUFjY2Vzc0RhdGEqPjo6SGFzaCwKICAgICAg
ICAgICAgIE51bGxhYmxlSGFzaFRyYWl0czxWYXJpYWJsZUFjY2Vzc0RhdGEqPiA+IG1fYXJndW1l
bnRzQWxpYXNpbmc7CiAKLSAgICB2b2lkIG9ic2VydmVCYWRBcmd1bWVudHNVc2UoRWRnZSBlZGdl
KQorICAgIHZvaWQgb2JzZXJ2ZUJhZEFyZ3VtZW50c1VzZShOb2RlKiBub2RlKQogICAgIHsKLSAg
ICAgICAgaWYgKCFlZGdlKQorICAgICAgICBpZiAoIW5vZGUpCiAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgIAotICAgICAgICBOb2RlJiBjaGlsZCA9IG1fZ3JhcGhbZWRnZV07Ci0gICAgICAg
IHN3aXRjaCAoY2hpbGQub3AoKSkgeworICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKICAg
ICAgICAgY2FzZSBDcmVhdGVBcmd1bWVudHM6IHsKLSAgICAgICAgICAgIG1fY3JlYXRlc0FyZ3Vt
ZW50cy5hZGQoY2hpbGQuY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpOworICAgICAgICAgICAg
bV9jcmVhdGVzQXJndW1lbnRzLmFkZChub2RlLT5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSk7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgIGNh
c2UgR2V0TG9jYWw6IHsKLSAgICAgICAgICAgIGludCBhcmd1bWVudHNSZWdpc3RlciA9IG1fZ3Jh
cGgudW5jaGVja2VkQXJndW1lbnRzUmVnaXN0ZXJGb3IoY2hpbGQuY29kZU9yaWdpbik7CisgICAg
ICAgICAgICBpbnQgYXJndW1lbnRzUmVnaXN0ZXIgPSBtX2dyYXBoLnVuY2hlY2tlZEFyZ3VtZW50
c1JlZ2lzdGVyRm9yKG5vZGUtPmNvZGVPcmlnaW4pOwogICAgICAgICAgICAgaWYgKGFyZ3VtZW50
c1JlZ2lzdGVyICE9IEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIKLSAgICAgICAgICAgICAgICAmJiAo
Y2hpbGQubG9jYWwoKSA9PSBhcmd1bWVudHNSZWdpc3RlcgotICAgICAgICAgICAgICAgICAgICB8
fCBjaGlsZC5sb2NhbCgpID09IHVubW9kaWZpZWRBcmd1bWVudHNSZWdpc3Rlcihhcmd1bWVudHNS
ZWdpc3RlcikpKSB7Ci0gICAgICAgICAgICAgICAgbV9jcmVhdGVzQXJndW1lbnRzLmFkZChjaGls
ZC5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSk7CisgICAgICAgICAgICAgICAgJiYgKG5vZGUt
PmxvY2FsKCkgPT0gYXJndW1lbnRzUmVnaXN0ZXIKKyAgICAgICAgICAgICAgICAgICAgfHwgbm9k
ZS0+bG9jYWwoKSA9PSB1bm1vZGlmaWVkQXJndW1lbnRzUmVnaXN0ZXIoYXJndW1lbnRzUmVnaXN0
ZXIpKSkgeworICAgICAgICAgICAgICAgIG1fY3JlYXRlc0FyZ3VtZW50cy5hZGQobm9kZS0+Y29k
ZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZh
cmlhYmxlQWNjZXNzRGF0YSA9IGNoaWxkLnZhcmlhYmxlQWNjZXNzRGF0YSgpOworICAgICAgICAg
ICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBub2RlLT52YXJpYWJs
ZUFjY2Vzc0RhdGEoKTsKICAgICAgICAgICAgIGlmICh2YXJpYWJsZUFjY2Vzc0RhdGEtPmlzQ2Fw
dHVyZWQoKSkKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIApAQCAtNjg5LDE2
ICs2ODMsMTUgQEAgcHJpdmF0ZToKICAgICAgICAgfQogICAgIH0KICAgICAKLSAgICB2b2lkIG9i
c2VydmVCYWRBcmd1bWVudHNVc2VzKE5vZGUmIG5vZGUpCisgICAgdm9pZCBvYnNlcnZlQmFkQXJn
dW1lbnRzVXNlcyhOb2RlKiBub2RlKQogICAgIHsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
bV9ncmFwaC5udW1DaGlsZHJlbihub2RlKTsgaS0tOykKLSAgICAgICAgICAgIG9ic2VydmVCYWRB
cmd1bWVudHNVc2UobV9ncmFwaC5jaGlsZChub2RlLCBpKSk7CisgICAgICAgICAgICBvYnNlcnZl
QmFkQXJndW1lbnRzVXNlKG1fZ3JhcGguY2hpbGQobm9kZSwgaSkubm9kZSgpKTsKICAgICB9CiAg
ICAgCi0gICAgdm9pZCBvYnNlcnZlUHJvcGVyQXJndW1lbnRzVXNlKE5vZGUmIG5vZGUsIEVkZ2Ug
ZWRnZSkKKyAgICB2b2lkIG9ic2VydmVQcm9wZXJBcmd1bWVudHNVc2UoTm9kZSogbm9kZSwgRWRn
ZSBlZGdlKQogICAgIHsKLSAgICAgICAgTm9kZSYgY2hpbGQgPSBtX2dyYXBoW2VkZ2VdOwotICAg
ICAgICBpZiAoY2hpbGQub3AoKSAhPSBHZXRMb2NhbCkgeworICAgICAgICBpZiAoZWRnZS0+b3Ao
KSAhPSBHZXRMb2NhbCkgewogICAgICAgICAgICAgLy8gV2hlbiBjYW4gdGhpcyBoYXBwZW4/IEF0
IGxlYXN0IHR3byBjYXNlcyB0aGF0IEkgY2FuIHRoaW5rCiAgICAgICAgICAgICAvLyBvZjoKICAg
ICAgICAgICAgIC8vCkBAIC03MTAsMTggKzcwMywxOCBAQCBwcml2YXRlOgogICAgICAgICAgICAg
Ly8KICAgICAgICAgICAgIC8vIDIpIElmIHdlJ3JlIGFjY2Vzc2luZyBhcmd1bWVudHMgd2UgZ290
IGZyb20gdGhlIGhlYXAhCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAg
ICBpZiAoY2hpbGQub3AoKSA9PSBDcmVhdGVBcmd1bWVudHMKLSAgICAgICAgICAgICAgICAmJiBu
b2RlLmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lCi0gICAgICAgICAgICAgICAgICAgIT0gY2hp
bGQuY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpCi0gICAgICAgICAgICAgICAgbV9jcmVhdGVz
QXJndW1lbnRzLmFkZChjaGlsZC5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSk7CisgICAgICAg
ICAgICBpZiAoZWRnZS0+b3AoKSA9PSBDcmVhdGVBcmd1bWVudHMKKyAgICAgICAgICAgICAgICAm
JiBub2RlLT5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZQorICAgICAgICAgICAgICAgICAgICE9
IGVkZ2UtPmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKQorICAgICAgICAgICAgICAgIG1fY3Jl
YXRlc0FyZ3VtZW50cy5hZGQoZWRnZS0+Y29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpOwogICAg
ICAgICAgICAgCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICAgICAgICAgIAotICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0
YSA9IGNoaWxkLnZhcmlhYmxlQWNjZXNzRGF0YSgpOwotICAgICAgICBpZiAoY2hpbGQubG9jYWwo
KSA9PSBtX2dyYXBoLnVuY2hlY2tlZEFyZ3VtZW50c1JlZ2lzdGVyRm9yKGNoaWxkLmNvZGVPcmln
aW4pCi0gICAgICAgICAgICAmJiBub2RlLmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lICE9IGNo
aWxkLmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKSB7Ci0gICAgICAgICAgICBtX2NyZWF0ZXNB
cmd1bWVudHMuYWRkKGNoaWxkLmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKTsKKyAgICAgICAg
VmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBlZGdlLT52YXJpYWJsZUFj
Y2Vzc0RhdGEoKTsKKyAgICAgICAgaWYgKGVkZ2UtPmxvY2FsKCkgPT0gbV9ncmFwaC51bmNoZWNr
ZWRBcmd1bWVudHNSZWdpc3RlckZvcihlZGdlLT5jb2RlT3JpZ2luKQorICAgICAgICAgICAgJiYg
bm9kZS0+Y29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUgIT0gZWRnZS0+Y29kZU9yaWdpbi5pbmxp
bmVDYWxsRnJhbWUpIHsKKyAgICAgICAgICAgIG1fY3JlYXRlc0FyZ3VtZW50cy5hZGQoZWRnZS0+
Y29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICB9CiAKQEAgLTcyOSwxOCArNzIyLDE4IEBAIHByaXZhdGU6CiAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgIAogICAgICAgICBBcmd1bWVudHNBbGlhc2luZ0RhdGEmIGRhdGEgPSBtX2FyZ3Vt
ZW50c0FsaWFzaW5nLmZpbmQodmFyaWFibGVBY2Nlc3NEYXRhKS0+dmFsdWU7Ci0gICAgICAgIGRh
dGEubWVyZ2VDYWxsQ29udGV4dChub2RlLmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKTsKKyAg
ICAgICAgZGF0YS5tZXJnZUNhbGxDb250ZXh0KG5vZGUtPmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZy
YW1lKTsKICAgICB9CiAgICAgCi0gICAgYm9vbCBpc09LVG9PcHRpbWl6ZShOb2RlJiBzb3VyY2Up
CisgICAgYm9vbCBpc09LVG9PcHRpbWl6ZShOb2RlKiBzb3VyY2UpCiAgICAgewotICAgICAgICBp
ZiAobV9jcmVhdGVzQXJndW1lbnRzLmNvbnRhaW5zKHNvdXJjZS5jb2RlT3JpZ2luLmlubGluZUNh
bGxGcmFtZSkpCisgICAgICAgIGlmIChtX2NyZWF0ZXNBcmd1bWVudHMuY29udGFpbnMoc291cmNl
LT5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgICAgIAotICAgICAgICBzd2l0Y2ggKHNvdXJjZS5vcCgpKSB7CisgICAgICAgIHN3aXRj
aCAoc291cmNlLT5vcCgpKSB7CiAgICAgICAgIGNhc2UgR2V0TG9jYWw6IHsKLSAgICAgICAgICAg
IFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhID0gc291cmNlLnZhcmlhYmxl
QWNjZXNzRGF0YSgpOwotICAgICAgICAgICAgaW50IGFyZ3VtZW50c1JlZ2lzdGVyID0gbV9ncmFw
aC51bmNoZWNrZWRBcmd1bWVudHNSZWdpc3RlckZvcihzb3VyY2UuY29kZU9yaWdpbik7CisgICAg
ICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9IHNvdXJjZS0+
dmFyaWFibGVBY2Nlc3NEYXRhKCk7CisgICAgICAgICAgICBpbnQgYXJndW1lbnRzUmVnaXN0ZXIg
PSBtX2dyYXBoLnVuY2hlY2tlZEFyZ3VtZW50c1JlZ2lzdGVyRm9yKHNvdXJjZS0+Y29kZU9yaWdp
bik7CiAgICAgICAgICAgICBpZiAoYXJndW1lbnRzUmVnaXN0ZXIgPT0gSW52YWxpZFZpcnR1YWxS
ZWdpc3RlcikKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGlmIChhcmd1bWVu
dHNSZWdpc3RlciA9PSB2YXJpYWJsZUFjY2Vzc0RhdGEtPmxvY2FsKCkpCkBAIC03NjgsMzggKzc2
MSwzNyBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIAotICAg
IHZvaWQgcmVtb3ZlQXJndW1lbnRzUmVmZXJlbmNpbmdQaGFudG9tQ2hpbGQoTm9kZSYgbm9kZSwg
dW5zaWduZWQgZWRnZUluZGV4KQorICAgIHZvaWQgcmVtb3ZlQXJndW1lbnRzUmVmZXJlbmNpbmdQ
aGFudG9tQ2hpbGQoTm9kZSogbm9kZSwgdW5zaWduZWQgZWRnZUluZGV4KQogICAgIHsKLSAgICAg
ICAgRWRnZSBlZGdlID0gbm9kZS5jaGlsZHJlbi5jaGlsZChlZGdlSW5kZXgpOworICAgICAgICBF
ZGdlIGVkZ2UgPSBub2RlLT5jaGlsZHJlbi5jaGlsZChlZGdlSW5kZXgpOwogICAgICAgICBpZiAo
IWVkZ2UpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIAotICAgICAgICBOb2RlJiBjaGls
ZCA9IG1fZ3JhcGhbZWRnZV07Ci0gICAgICAgIHN3aXRjaCAoY2hpbGQub3AoKSkgeworICAgICAg
ICBzd2l0Y2ggKGVkZ2UtPm9wKCkpIHsKICAgICAgICAgY2FzZSBQaGk6IC8vIEFyaXNlcyBpZiB3
ZSBoYWQgQ1NFIG9uIGEgR2V0TG9jYWwgb2YgdGhlIGFyZ3VtZW50cyByZWdpc3Rlci4KICAgICAg
ICAgY2FzZSBHZXRMb2NhbDogLy8gQXJpc2VzIGlmIHdlIGhhZCBDU0Ugb24gYW4gYXJndW1lbnRz
IGFjY2VzcyB0byBhIHZhcmlhYmxlIGFsaWFzZWQgdG8gdGhlIGFyZ3VtZW50cy4KICAgICAgICAg
Y2FzZSBTZXRMb2NhbDogeyAvLyBBcmlzZXMgaWYgd2UgaGFkIENTRSBvbiBhIEdldExvY2FsIG9m
IHRoZSBhcmd1bWVudHMgcmVnaXN0ZXIuCi0gICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEq
IHZhcmlhYmxlQWNjZXNzRGF0YSA9IGNoaWxkLnZhcmlhYmxlQWNjZXNzRGF0YSgpOworICAgICAg
ICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBlZGdlLT52YXJp
YWJsZUFjY2Vzc0RhdGEoKTsKICAgICAgICAgICAgIGJvb2wgaXNEZWFkQXJndW1lbnRzUmVnaXN0
ZXIgPQogICAgICAgICAgICAgICAgIHZhcmlhYmxlQWNjZXNzRGF0YS0+bG9jYWwoKSA9PQotICAg
ICAgICAgICAgICAgICAgICBtX2dyYXBoLnVuY2hlY2tlZEFyZ3VtZW50c1JlZ2lzdGVyRm9yKGNo
aWxkLmNvZGVPcmlnaW4pCi0gICAgICAgICAgICAgICAgJiYgIW1fY3JlYXRlc0FyZ3VtZW50cy5j
b250YWlucyhjaGlsZC5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSk7CisgICAgICAgICAgICAg
ICAgICAgIG1fZ3JhcGgudW5jaGVja2VkQXJndW1lbnRzUmVnaXN0ZXJGb3IoZWRnZS0+Y29kZU9y
aWdpbikKKyAgICAgICAgICAgICAgICAmJiAhbV9jcmVhdGVzQXJndW1lbnRzLmNvbnRhaW5zKGVk
Z2UtPmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKTsKICAgICAgICAgICAgIGJvb2wgaXNBbGlh
c2VkQXJndW1lbnRzUmVnaXN0ZXIgPQogICAgICAgICAgICAgICAgICF2YXJpYWJsZUFjY2Vzc0Rh
dGEtPmlzQ2FwdHVyZWQoKQogICAgICAgICAgICAgICAgICYmIG1fYXJndW1lbnRzQWxpYXNpbmcu
ZmluZCh2YXJpYWJsZUFjY2Vzc0RhdGEpLT52YWx1ZS5pc1ZhbGlkKCkKLSAgICAgICAgICAgICAg
ICAmJiAhbV9jcmVhdGVzQXJndW1lbnRzLmNvbnRhaW5zKGNoaWxkLmNvZGVPcmlnaW4uaW5saW5l
Q2FsbEZyYW1lKTsKKyAgICAgICAgICAgICAgICAmJiAhbV9jcmVhdGVzQXJndW1lbnRzLmNvbnRh
aW5zKGVkZ2UtPmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKTsKICAgICAgICAgICAgIGlmICgh
aXNEZWFkQXJndW1lbnRzUmVnaXN0ZXIgJiYgIWlzQWxpYXNlZEFyZ3VtZW50c1JlZ2lzdGVyKQog
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgbV9ncmFwaC5kZXJlZihlZGdlKTsK
LSAgICAgICAgICAgIG5vZGUuY2hpbGRyZW4ucmVtb3ZlRWRnZUZyb21CYWcoZWRnZUluZGV4KTsK
KyAgICAgICAgICAgIG5vZGUtPmNoaWxkcmVuLnJlbW92ZUVkZ2VGcm9tQmFnKGVkZ2VJbmRleCk7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgIGNh
c2UgQ3JlYXRlQXJndW1lbnRzOiB7IC8vIEFyaXNlcyBpZiB3ZSBDU0UgdHdvIEdldExvY2FscyB0
byB0aGUgYXJndW1lbnRzIHJlZ2lzdGVyIGFuZCB0aGVuIENTRSB0aGUgc2Vjb25kIHVzZSBvZiB0
aGUgR2V0TG9jYWwgdG8gdGhlIGZpcnN0LgotICAgICAgICAgICAgaWYgKG1fY3JlYXRlc0FyZ3Vt
ZW50cy5jb250YWlucyhjaGlsZC5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSkpCisgICAgICAg
ICAgICBpZiAobV9jcmVhdGVzQXJndW1lbnRzLmNvbnRhaW5zKGVkZ2UtPmNvZGVPcmlnaW4uaW5s
aW5lQ2FsbEZyYW1lKSkKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIG1fZ3Jh
cGguZGVyZWYoZWRnZSk7Ci0gICAgICAgICAgICBub2RlLmNoaWxkcmVuLnJlbW92ZUVkZ2VGcm9t
QmFnKGVkZ2VJbmRleCk7CisgICAgICAgICAgICBub2RlLT5jaGlsZHJlbi5yZW1vdmVFZGdlRnJv
bUJhZyhlZGdlSW5kZXgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAg
ICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJheU1vZGUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlNb2RlLmNwcAko
cmV2aXNpb24gMTQwNTY3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJheU1v
ZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNDYsMTQgKzI0NiwxNCBAQCBTdHJ1Y3R1cmUqIEFy
cmF5TW9kZTo6b3JpZ2luYWxBcnJheVN0cnVjCiAgICAgcmV0dXJuIG9yaWdpbmFsQXJyYXlTdHJ1
Y3R1cmUoZ3JhcGgsIG5vZGUuY29kZU9yaWdpbik7CiB9CiAKLWJvb2wgQXJyYXlNb2RlOjphbHJl
YWR5Q2hlY2tlZChHcmFwaCYgZ3JhcGgsIE5vZGUmIG5vZGUsIEFic3RyYWN0VmFsdWUmIHZhbHVl
LCBJbmRleGluZ1R5cGUgc2hhcGUpIGNvbnN0Citib29sIEFycmF5TW9kZTo6YWxyZWFkeUNoZWNr
ZWQoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlLCBBYnN0cmFjdFZhbHVlJiB2YWx1ZSwgSW5kZXhp
bmdUeXBlIHNoYXBlKSBjb25zdAogewogICAgIHN3aXRjaCAoYXJyYXlDbGFzcygpKSB7CiAgICAg
Y2FzZSBBcnJheTo6T3JpZ2luYWxBcnJheToKICAgICAgICAgcmV0dXJuIHZhbHVlLm1fY3VycmVu
dEtub3duU3RydWN0dXJlLmhhc1NpbmdsZXRvbigpCiAgICAgICAgICAgICAmJiAodmFsdWUubV9j
dXJyZW50S25vd25TdHJ1Y3R1cmUuc2luZ2xldG9uKCktPmluZGV4aW5nVHlwZSgpICYgSW5kZXhp
bmdTaGFwZU1hc2spID09IHNoYXBlCiAgICAgICAgICAgICAmJiAodmFsdWUubV9jdXJyZW50S25v
d25TdHJ1Y3R1cmUuc2luZ2xldG9uKCktPmluZGV4aW5nVHlwZSgpICYgSXNBcnJheSkKLSAgICAg
ICAgICAgICYmIGdyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLmNvZGVPcmlnaW4pLT5pc09yaWdp
bmFsQXJyYXlTdHJ1Y3R1cmUodmFsdWUubV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuc2luZ2xldG9u
KCkpOworICAgICAgICAgICAgJiYgZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPmNvZGVPcmln
aW4pLT5pc09yaWdpbmFsQXJyYXlTdHJ1Y3R1cmUodmFsdWUubV9jdXJyZW50S25vd25TdHJ1Y3R1
cmUuc2luZ2xldG9uKCkpOwogICAgICAgICAKICAgICBjYXNlIEFycmF5OjpBcnJheToKICAgICAg
ICAgaWYgKGFycmF5TW9kZXNBbHJlYWR5Q2hlY2tlZCh2YWx1ZS5tX2FycmF5TW9kZXMsIGFzQXJy
YXlNb2RlcyhzaGFwZSB8IElzQXJyYXkpKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQXJyYXlNb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdBcnJheU1vZGUuaAkocmV2aXNpb24gMTQwNTY3KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdBcnJheU1vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTk3LDcgKzE5Nyw3IEBA
IHB1YmxpYzoKICAgICAKICAgICBBcnJheU1vZGUgcmVmaW5lKFNwZWN1bGF0ZWRUeXBlIGJhc2Us
IFNwZWN1bGF0ZWRUeXBlIGluZGV4LCBTcGVjdWxhdGVkVHlwZSB2YWx1ZSA9IFNwZWNOb25lLCBO
b2RlRmxhZ3MgPSAwKSBjb25zdDsKICAgICAKLSAgICBib29sIGFscmVhZHlDaGVja2VkKEdyYXBo
JiwgTm9kZSYsIEFic3RyYWN0VmFsdWUmKSBjb25zdDsKKyAgICBib29sIGFscmVhZHlDaGVja2Vk
KEdyYXBoJiwgTm9kZSosIEFic3RyYWN0VmFsdWUmKSBjb25zdDsKICAgICAKICAgICB2b2lkIGR1
bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQmFzaWNCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQmFzaWNCbG9jay5oCShyZXZpc2lvbiAxNDA1NjcpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtNDIsNyArNDIs
NyBAQCBjbGFzcyBHcmFwaDsKIAogdHlwZWRlZiBWZWN0b3IgPEJsb2NrSW5kZXgsIDI+IFByZWRl
Y2Vzc29yTGlzdDsKIAotc3RydWN0IEJhc2ljQmxvY2sgOiBWZWN0b3I8Tm9kZUluZGV4LCA4PiB7
CitzdHJ1Y3QgQmFzaWNCbG9jayA6IFZlY3RvcjxOb2RlKiwgOD4gewogICAgIEJhc2ljQmxvY2so
dW5zaWduZWQgYnl0ZWNvZGVCZWdpbiwgdW5zaWduZWQgbnVtQXJndW1lbnRzLCB1bnNpZ25lZCBu
dW1Mb2NhbHMpCiAgICAgICAgIDogYnl0ZWNvZGVCZWdpbihieXRlY29kZUJlZ2luKQogICAgICAg
ICAsIGlzT1NSVGFyZ2V0KGZhbHNlKQpAQCAtNzUsNyArNzUsNyBAQCBzdHJ1Y3QgQmFzaWNCbG9j
ayA6IFZlY3RvcjxOb2RlSW5kZXgsIDg+CiAgICAgfQogICAgIAogICAgIHNpemVfdCBudW1Ob2Rl
cygpIGNvbnN0IHsgcmV0dXJuIHBoaXMuc2l6ZSgpICsgc2l6ZSgpOyB9Ci0gICAgTm9kZUluZGV4
IG5vZGVJbmRleChzaXplX3QgaSkgY29uc3QKKyAgICBOb2RlKiBub2RlKHNpemVfdCBpKSBjb25z
dAogICAgIHsKICAgICAgICAgaWYgKGkgPCBwaGlzLnNpemUoKSkKICAgICAgICAgICAgIHJldHVy
biBwaGlzW2ldOwpAQCAtODMsMjYgKzgzLDI2IEBAIHN0cnVjdCBCYXNpY0Jsb2NrIDogVmVjdG9y
PE5vZGVJbmRleCwgOD4KICAgICB9CiAgICAgYm9vbCBpc1BoaUluZGV4KHNpemVfdCBpKSBjb25z
dCB7IHJldHVybiBpIDwgcGhpcy5zaXplKCk7IH0KICAgICAKLSAgICBib29sIGlzSW5QaGlzKE5v
ZGVJbmRleCBub2RlSW5kZXgpIGNvbnN0CisgICAgYm9vbCBpc0luUGhpcyhOb2RlKiBub2RlKSBj
b25zdAogICAgIHsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwaGlzLnNpemUoKTsg
KytpKSB7Ci0gICAgICAgICAgICBpZiAocGhpc1tpXSA9PSBub2RlSW5kZXgpCisgICAgICAgICAg
ICBpZiAocGhpc1tpXSA9PSBub2RlKQogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAg
ICAgICB9CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgCi0gICAgYm9vbCBpc0lu
QmxvY2soTm9kZUluZGV4IGluZGV4KSBjb25zdAorICAgIGJvb2wgaXNJbkJsb2NrKE5vZGUqIG15
Tm9kZSkgY29uc3QKICAgICB7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtTm9k
ZXMoKTsgKytpKSB7Ci0gICAgICAgICAgICBpZiAobm9kZUluZGV4KGkpID09IGluZGV4KQorICAg
ICAgICAgICAgaWYgKG5vZGUoaSkgPT0gbXlOb2RlKQogICAgICAgICAgICAgICAgIHJldHVybiB0
cnVlOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgCiAjZGVm
aW5lIERGR19ERUZJTkVfQVBQRU5EX05PREUodGVtcGxhdGVQcmUsIHRlbXBsYXRlUG9zdCwgdHlw
ZVBhcmFtcywgdmFsdWVQYXJhbXNDb21tYSwgdmFsdWVQYXJhbXMsIHZhbHVlQXJncykgXAotICAg
IHRlbXBsYXRlUHJlIHR5cGVQYXJhbXMgdGVtcGxhdGVQb3N0IE5vZGVJbmRleCBhcHBlbmROb2Rl
KEdyYXBoJiwgUmVmQ2hpbGRyZW5Nb2RlLCBSZWZOb2RlTW9kZSwgU3BlY3VsYXRlZFR5cGUgdmFs
dWVQYXJhbXNDb21tYSB2YWx1ZVBhcmFtcyk7CisgICAgdGVtcGxhdGVQcmUgdHlwZVBhcmFtcyB0
ZW1wbGF0ZVBvc3QgTm9kZSogYXBwZW5kTm9kZShHcmFwaCYsIFJlZkNoaWxkcmVuTW9kZSwgUmVm
Tm9kZU1vZGUsIFNwZWN1bGF0ZWRUeXBlIHZhbHVlUGFyYW1zQ29tbWEgdmFsdWVQYXJhbXMpOwog
ICAgIERGR19WQVJJQURJQ19URU1QTEFURV9GVU5DVElPTihERkdfREVGSU5FX0FQUEVORF9OT0RF
KQogI3VuZGVmIERGR19ERUZJTkVfQVBQRU5EX05PREUKICAgICAKQEAgLTEyMSwxMSArMTIxLDEx
IEBAIHN0cnVjdCBCYXNpY0Jsb2NrIDogVmVjdG9yPE5vZGVJbmRleCwgOD4KICNlbmRpZgogICAg
IGJvb2wgaXNSZWFjaGFibGU7CiAgICAgCi0gICAgVmVjdG9yPE5vZGVJbmRleD4gcGhpczsKKyAg
ICBWZWN0b3I8Tm9kZSo+IHBoaXM7CiAgICAgUHJlZGVjZXNzb3JMaXN0IG1fcHJlZGVjZXNzb3Jz
OwogICAgIAotICAgIE9wZXJhbmRzPE5vZGVJbmRleCwgTm9kZUluZGV4VHJhaXRzPiB2YXJpYWJs
ZXNBdEhlYWQ7Ci0gICAgT3BlcmFuZHM8Tm9kZUluZGV4LCBOb2RlSW5kZXhUcmFpdHM+IHZhcmlh
Ymxlc0F0VGFpbDsKKyAgICBPcGVyYW5kczxOb2RlKiwgTm9kZVBvaW50ZXJUcmFpdHM+IHZhcmlh
Ymxlc0F0SGVhZDsKKyAgICBPcGVyYW5kczxOb2RlKiwgTm9kZVBvaW50ZXJUcmFpdHM+IHZhcmlh
Ymxlc0F0VGFpbDsKICAgICAKICAgICBPcGVyYW5kczxBYnN0cmFjdFZhbHVlPiB2YWx1ZXNBdEhl
YWQ7CiAgICAgT3BlcmFuZHM8QWJzdHJhY3RWYWx1ZT4gdmFsdWVzQXRUYWlsOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrSW5saW5lcy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9ja0lubGluZXMuaAkocmV2
aXNpb24gMTQwNTY3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2Nr
SW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw5ICszNCw5IEBACiBuYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIERGRyB7CiAKICNkZWZpbmUgREZHX0RFRklORV9BUFBFTkRfTk9ERSh0ZW1w
bGF0ZVByZSwgdGVtcGxhdGVQb3N0LCB0eXBlUGFyYW1zLCB2YWx1ZVBhcmFtc0NvbW1hLCB2YWx1
ZVBhcmFtcywgdmFsdWVBcmdzKSBcCi0gICAgdGVtcGxhdGVQcmUgdHlwZVBhcmFtcyB0ZW1wbGF0
ZVBvc3QgTm9kZUluZGV4IEJhc2ljQmxvY2s6OmFwcGVuZE5vZGUoR3JhcGgmIGdyYXBoLCBSZWZD
aGlsZHJlbk1vZGUgcmVmQ2hpbGRyZW5Nb2RlLCBSZWZOb2RlTW9kZSByZWZOb2RlTW9kZSwgU3Bl
Y3VsYXRlZFR5cGUgdHlwZSB2YWx1ZVBhcmFtc0NvbW1hIHZhbHVlUGFyYW1zKSBcCisgICAgdGVt
cGxhdGVQcmUgdHlwZVBhcmFtcyB0ZW1wbGF0ZVBvc3QgTm9kZSogQmFzaWNCbG9jazo6YXBwZW5k
Tm9kZShHcmFwaCYgZ3JhcGgsIFJlZkNoaWxkcmVuTW9kZSByZWZDaGlsZHJlbk1vZGUsIFJlZk5v
ZGVNb2RlIHJlZk5vZGVNb2RlLCBTcGVjdWxhdGVkVHlwZSB0eXBlIHZhbHVlUGFyYW1zQ29tbWEg
dmFsdWVQYXJhbXMpIFwKICAgICB7IFwKLSAgICAgICAgTm9kZUluZGV4IHJlc3VsdCA9IGdyYXBo
LmFkZE5vZGUocmVmQ2hpbGRyZW5Nb2RlLCByZWZOb2RlTW9kZSwgdHlwZSB2YWx1ZVBhcmFtc0Nv
bW1hIHZhbHVlQXJncyk7IFwKKyAgICAgICAgTm9kZSogcmVzdWx0ID0gZ3JhcGguYWRkTm9kZShy
ZWZDaGlsZHJlbk1vZGUsIHJlZk5vZGVNb2RlLCB0eXBlIHZhbHVlUGFyYW1zQ29tbWEgdmFsdWVB
cmdzKTsgXAogICAgICAgICBhcHBlbmQocmVzdWx0KTsgXAogICAgICAgICByZXR1cm4gcmVzdWx0
OyBcCiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBh
cnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRl
Q29kZVBhcnNlci5jcHAJKHJldmlzaW9uIDE0MDU2NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjEsMjYgKzE2
MSwyNiBAQCBwcml2YXRlOgogICAgIAogICAgIC8vIEhhbmRsZSBjYWxscy4gVGhpcyByZXNvbHZl
cyBpc3N1ZXMgc3Vycm91bmRpbmcgaW5saW5pbmcgYW5kIGludHJpbnNpY3MuCiAgICAgdm9pZCBo
YW5kbGVDYWxsKEludGVycHJldGVyKiwgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
Tm9kZVR5cGUgb3AsIENvZGVTcGVjaWFsaXphdGlvbktpbmQpOwotICAgIHZvaWQgZW1pdEZ1bmN0
aW9uQ2hlY2tzKGNvbnN0IENhbGxMaW5rU3RhdHVzJiwgTm9kZUluZGV4IGNhbGxUYXJnZXQsIGlu
dCByZWdpc3Rlck9mZnNldCwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCk7CisgICAgdm9pZCBlbWl0
RnVuY3Rpb25DaGVja3MoY29uc3QgQ2FsbExpbmtTdGF0dXMmLCBOb2RlKiBjYWxsVGFyZ2V0LCBp
bnQgcmVnaXN0ZXJPZmZzZXQsIENvZGVTcGVjaWFsaXphdGlvbktpbmQpOwogICAgIC8vIEhhbmRs
ZSBpbmxpbmluZy4gUmV0dXJuIHRydWUgaWYgaXQgc3VjY2VlZGVkLCBmYWxzZSBpZiB3ZSBuZWVk
IHRvIHBsYW50IGEgY2FsbC4KLSAgICBib29sIGhhbmRsZUlubGluaW5nKGJvb2wgdXNlc1Jlc3Vs
dCwgTm9kZUluZGV4IGNhbGxUYXJnZXROb2RlSW5kZXgsIGludCByZXN1bHRPcGVyYW5kLCBjb25z
dCBDYWxsTGlua1N0YXR1cyYsIGludCByZWdpc3Rlck9mZnNldCwgaW50IGFyZ3VtZW50Q291bnRJ
bmNsdWRpbmdUaGlzLCB1bnNpZ25lZCBuZXh0T2Zmc2V0LCBDb2RlU3BlY2lhbGl6YXRpb25LaW5k
KTsKKyAgICBib29sIGhhbmRsZUlubGluaW5nKGJvb2wgdXNlc1Jlc3VsdCwgTm9kZSogY2FsbFRh
cmdldE5vZGUsIGludCByZXN1bHRPcGVyYW5kLCBjb25zdCBDYWxsTGlua1N0YXR1cyYsIGludCBy
ZWdpc3Rlck9mZnNldCwgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCB1bnNpZ25lZCBu
ZXh0T2Zmc2V0LCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kKTsKICAgICAvLyBIYW5kbGUgc2V0dGlu
ZyB0aGUgcmVzdWx0IG9mIGFuIGludHJpbnNpYy4KLSAgICB2b2lkIHNldEludHJpbnNpY1Jlc3Vs
dChib29sIHVzZXNSZXN1bHQsIGludCByZXN1bHRPcGVyYW5kLCBOb2RlSW5kZXgpOworICAgIHZv
aWQgc2V0SW50cmluc2ljUmVzdWx0KGJvb2wgdXNlc1Jlc3VsdCwgaW50IHJlc3VsdE9wZXJhbmQs
IE5vZGUqKTsKICAgICAvLyBIYW5kbGUgaW50cmluc2ljIGZ1bmN0aW9ucy4gUmV0dXJuIHRydWUg
aWYgaXQgc3VjY2VlZGVkLCBmYWxzZSBpZiB3ZSBuZWVkIHRvIHBsYW50IGEgY2FsbC4KICAgICBi
b29sIGhhbmRsZUludHJpbnNpYyhib29sIHVzZXNSZXN1bHQsIGludCByZXN1bHRPcGVyYW5kLCBJ
bnRyaW5zaWMsIGludCByZWdpc3Rlck9mZnNldCwgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdU
aGlzLCBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uKTsKICAgICBib29sIGhhbmRsZUNvbnN0YW50
SW50ZXJuYWxGdW5jdGlvbihib29sIHVzZXNSZXN1bHQsIGludCByZXN1bHRPcGVyYW5kLCBJbnRl
cm5hbEZ1bmN0aW9uKiwgaW50IHJlZ2lzdGVyT2Zmc2V0LCBpbnQgYXJndW1lbnRDb3VudEluY2x1
ZGluZ1RoaXMsIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24sIENvZGVTcGVjaWFsaXphdGlvbktp
bmQpOwotICAgIE5vZGVJbmRleCBoYW5kbGVHZXRCeU9mZnNldChTcGVjdWxhdGVkVHlwZSwgTm9k
ZUluZGV4IGJhc2UsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIFByb3BlcnR5T2Zmc2V0KTsK
KyAgICBOb2RlKiBoYW5kbGVHZXRCeU9mZnNldChTcGVjdWxhdGVkVHlwZSwgTm9kZSogYmFzZSwg
dW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgUHJvcGVydHlPZmZzZXQpOwogICAgIHZvaWQgaGFu
ZGxlR2V0QnlPZmZzZXQoCi0gICAgICAgIGludCBkZXN0aW5hdGlvbk9wZXJhbmQsIFNwZWN1bGF0
ZWRUeXBlLCBOb2RlSW5kZXggYmFzZSwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwKKyAgICAg
ICAgaW50IGRlc3RpbmF0aW9uT3BlcmFuZCwgU3BlY3VsYXRlZFR5cGUsIE5vZGUqIGJhc2UsIHVu
c2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsCiAgICAgICAgIFByb3BlcnR5T2Zmc2V0KTsKICAgICB2
b2lkIGhhbmRsZUdldEJ5SWQoCi0gICAgICAgIGludCBkZXN0aW5hdGlvbk9wZXJhbmQsIFNwZWN1
bGF0ZWRUeXBlLCBOb2RlSW5kZXggYmFzZSwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwKKyAg
ICAgICAgaW50IGRlc3RpbmF0aW9uT3BlcmFuZCwgU3BlY3VsYXRlZFR5cGUsIE5vZGUqIGJhc2Us
IHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsCiAgICAgICAgIGNvbnN0IEdldEJ5SWRTdGF0dXMm
KTsKIAotICAgIE5vZGVJbmRleCBnZXRTY29wZShib29sIHNraXBUb3AsIHVuc2lnbmVkIHNraXBD
b3VudCk7CisgICAgTm9kZSogZ2V0U2NvcGUoYm9vbCBza2lwVG9wLCB1bnNpZ25lZCBza2lwQ291
bnQpOwogICAgIAogICAgIC8vIENvbnZlcnQgYSBzZXQgb2YgUmVzb2x2ZU9wZXJhdGlvbnMgaW50
byBncmFwaCBub2RlcwotICAgIGJvb2wgcGFyc2VSZXNvbHZlT3BlcmF0aW9ucyhTcGVjdWxhdGVk
VHlwZSwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgdW5zaWduZWQgb3BlcmF0aW9ucywgdW5z
aWduZWQgcHV0VG9CYXNlT3BlcmF0aW9uLCBOb2RlSW5kZXgqIGJhc2UsIE5vZGVJbmRleCogdmFs
dWUpOworICAgIGJvb2wgcGFyc2VSZXNvbHZlT3BlcmF0aW9ucyhTcGVjdWxhdGVkVHlwZSwgdW5z
aWduZWQgaWRlbnRpZmllck51bWJlciwgdW5zaWduZWQgb3BlcmF0aW9ucywgdW5zaWduZWQgcHV0
VG9CYXNlT3BlcmF0aW9uLCBOb2RlKiogYmFzZSwgTm9kZSoqIHZhbHVlKTsKIAogICAgIC8vIFBy
ZXBhcmUgdG8gcGFyc2UgYSBibG9jay4KICAgICB2b2lkIHByZXBhcmVUb1BhcnNlQmxvY2soKTsK
QEAgLTIxMCw3ICsyMTAsNyBAQCBwcml2YXRlOgogICAgIH0KICAgICAKICAgICAvLyBHZXQvU2V0
IHRoZSBvcGVyYW5kcy9yZXN1bHQgb2YgYSBieXRlY29kZSBpbnN0cnVjdGlvbi4KLSAgICBOb2Rl
SW5kZXggZ2V0RGlyZWN0KGludCBvcGVyYW5kKQorICAgIE5vZGUqIGdldERpcmVjdChpbnQgb3Bl
cmFuZCkKICAgICB7CiAgICAgICAgIC8vIElzIHRoaXMgYSBjb25zdGFudD8KICAgICAgICAgaWYg
KG9wZXJhbmQgPj0gRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXgpIHsKQEAgLTIyOCw3ICsyMjgs
NyBAQCBwcml2YXRlOgogICAgICAgICAvLyBNdXN0IGJlIGEgbG9jYWwuCiAgICAgICAgIHJldHVy
biBnZXRMb2NhbCgodW5zaWduZWQpb3BlcmFuZCk7CiAgICAgfQotICAgIE5vZGVJbmRleCBnZXQo
aW50IG9wZXJhbmQpCisgICAgTm9kZSogZ2V0KGludCBvcGVyYW5kKQogICAgIHsKICAgICAgICAg
aWYgKG9wZXJhbmQgPT0gSlNTdGFjazo6Q2FsbGVlKSB7CiAgICAgICAgICAgICBpZiAobV9pbmxp
bmVTdGFja1RvcC0+bV9pbmxpbmVDYWxsRnJhbWUgJiYgbV9pbmxpbmVTdGFja1RvcC0+bV9pbmxp
bmVDYWxsRnJhbWUtPmNhbGxlZSkKQEAgLTI0MCw3ICsyNDAsNyBAQCBwcml2YXRlOgogICAgICAg
ICByZXR1cm4gZ2V0RGlyZWN0KG1faW5saW5lU3RhY2tUb3AtPnJlbWFwT3BlcmFuZChvcGVyYW5k
KSk7CiAgICAgfQogICAgIGVudW0gU2V0TW9kZSB7IE5vcm1hbFNldCwgU2V0T25FbnRyeSB9Owot
ICAgIHZvaWQgc2V0RGlyZWN0KGludCBvcGVyYW5kLCBOb2RlSW5kZXggdmFsdWUsIFNldE1vZGUg
c2V0TW9kZSA9IE5vcm1hbFNldCkKKyAgICB2b2lkIHNldERpcmVjdChpbnQgb3BlcmFuZCwgTm9k
ZSogdmFsdWUsIFNldE1vZGUgc2V0TW9kZSA9IE5vcm1hbFNldCkKICAgICB7CiAgICAgICAgIC8v
IElzIHRoaXMgYW4gYXJndW1lbnQ/CiAgICAgICAgIGlmIChvcGVyYW5kSXNBcmd1bWVudChvcGVy
YW5kKSkgewpAQCAtMjUxLDEyICsyNTEsMTIgQEAgcHJpdmF0ZToKICAgICAgICAgLy8gTXVzdCBi
ZSBhIGxvY2FsLgogICAgICAgICBzZXRMb2NhbCgodW5zaWduZWQpb3BlcmFuZCwgdmFsdWUsIHNl
dE1vZGUpOwogICAgIH0KLSAgICB2b2lkIHNldChpbnQgb3BlcmFuZCwgTm9kZUluZGV4IHZhbHVl
LCBTZXRNb2RlIHNldE1vZGUgPSBOb3JtYWxTZXQpCisgICAgdm9pZCBzZXQoaW50IG9wZXJhbmQs
IE5vZGUqIHZhbHVlLCBTZXRNb2RlIHNldE1vZGUgPSBOb3JtYWxTZXQpCiAgICAgewogICAgICAg
ICBzZXREaXJlY3QobV9pbmxpbmVTdGFja1RvcC0+cmVtYXBPcGVyYW5kKG9wZXJhbmQpLCB2YWx1
ZSwgc2V0TW9kZSk7CiAgICAgfQogICAgIAotICAgIHZvaWQgc2V0UGFpcihpbnQgb3BlcmFuZDEs
IE5vZGVJbmRleCB2YWx1ZTEsIGludCBvcGVyYW5kMiwgTm9kZUluZGV4IHZhbHVlMikKKyAgICB2
b2lkIHNldFBhaXIoaW50IG9wZXJhbmQxLCBOb2RlKiB2YWx1ZTEsIGludCBvcGVyYW5kMiwgTm9k
ZSogdmFsdWUyKQogICAgIHsKICAgICAgICAgLy8gRmlyc3QgZW1pdCBkZWFkIFNldExvY2FscyBm
b3IgdGhlIGJlbmVmaXQgb2YgT1NSLgogICAgICAgICBzZXQob3BlcmFuZDEsIHZhbHVlMSk7CkBA
IC0yNjcsNDkgKzI2Nyw0NCBAQCBwcml2YXRlOgogICAgICAgICBzZXQob3BlcmFuZDIsIHZhbHVl
Mik7CiAgICAgfQogICAgIAotICAgIE5vZGVJbmRleCBpbmplY3RMYXp5T3BlcmFuZFNwZWN1bGF0
aW9uKE5vZGVJbmRleCBub2RlSW5kZXgpCisgICAgTm9kZSogaW5qZWN0TGF6eU9wZXJhbmRTcGVj
dWxhdGlvbihOb2RlKiBub2RlKQogICAgIHsKLSAgICAgICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhb
bm9kZUluZGV4XTsKLSAgICAgICAgQVNTRVJUKG5vZGUub3AoKSA9PSBHZXRMb2NhbCk7Ci0gICAg
ICAgIEFTU0VSVChub2RlLmNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCA9PSBtX2N1cnJlbnRJbmRl
eCk7CisgICAgICAgIEFTU0VSVChub2RlLT5vcCgpID09IEdldExvY2FsKTsKKyAgICAgICAgQVNT
RVJUKG5vZGUtPmNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCA9PSBtX2N1cnJlbnRJbmRleCk7CiAg
ICAgICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24gPSAKICAgICAgICAgICAgIG1faW5saW5l
U3RhY2tUb3AtPm1fbGF6eU9wZXJhbmRzLnByZWRpY3Rpb24oCi0gICAgICAgICAgICAgICAgTGF6
eU9wZXJhbmRWYWx1ZVByb2ZpbGVLZXkobV9jdXJyZW50SW5kZXgsIG5vZGUubG9jYWwoKSkpOwor
ICAgICAgICAgICAgICAgIExhenlPcGVyYW5kVmFsdWVQcm9maWxlS2V5KG1fY3VycmVudEluZGV4
LCBub2RlLT5sb2NhbCgpKSk7CiAjaWYgREZHX0VOQUJMRShERUJVR19WRVJCT1NFKQotICAgICAg
ICBkYXRhTG9nKCJMYXp5IG9wZXJhbmQgW0AiLCBub2RlSW5kZXgsICIsIGJjIyIsIG1fY3VycmVu
dEluZGV4LCAiLCByIiwgbm9kZS5sb2NhbCgpLCAiXSBwcmVkaWN0aW9uOiAiLCBTcGVjdWxhdGlv
bkR1bXAocHJlZGljdGlvbiksICJcbiIpOworICAgICAgICBkYXRhTG9nKCJMYXp5IG9wZXJhbmQg
W0AiLCBub2RlLT5pbmRleCgpLCAiLCBiYyMiLCBtX2N1cnJlbnRJbmRleCwgIiwgciIsIG5vZGUt
PmxvY2FsKCksICJdIHByZWRpY3Rpb246ICIsIFNwZWN1bGF0aW9uRHVtcChwcmVkaWN0aW9uKSwg
IlxuIik7CiAjZW5kaWYKLSAgICAgICAgbm9kZS52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+cHJlZGlj
dChwcmVkaWN0aW9uKTsKLSAgICAgICAgcmV0dXJuIG5vZGVJbmRleDsKKyAgICAgICAgbm9kZS0+
dmFyaWFibGVBY2Nlc3NEYXRhKCktPnByZWRpY3QocHJlZGljdGlvbik7CisgICAgICAgIHJldHVy
biBub2RlOwogICAgIH0KIAogICAgIC8vIFVzZWQgaW4gaW1wbGVtZW50aW5nIGdldC9zZXQsIGFi
b3ZlLCB3aGVyZSB0aGUgb3BlcmFuZCBpcyBhIGxvY2FsIHZhcmlhYmxlLgotICAgIE5vZGVJbmRl
eCBnZXRMb2NhbCh1bnNpZ25lZCBvcGVyYW5kKQorICAgIE5vZGUqIGdldExvY2FsKHVuc2lnbmVk
IG9wZXJhbmQpCiAgICAgewotICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4ID0gbV9jdXJyZW50
QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5sb2NhbChvcGVyYW5kKTsKKyAgICAgICAgTm9kZSogbm9k
ZSA9IG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwubG9jYWwob3BlcmFuZCk7CiAgICAg
ICAgIGJvb2wgaXNDYXB0dXJlZCA9IG1fY29kZUJsb2NrLT5pc0NhcHR1cmVkKG9wZXJhbmQsIG1f
aW5saW5lU3RhY2tUb3AtPm1faW5saW5lQ2FsbEZyYW1lKTsKICAgICAgICAgCi0gICAgICAgIGlm
IChub2RlSW5kZXggIT0gTm9Ob2RlKSB7Ci0gICAgICAgICAgICBOb2RlKiBub2RlUHRyID0gJm1f
Z3JhcGhbbm9kZUluZGV4XTsKLSAgICAgICAgICAgIGlmIChub2RlUHRyLT5vcCgpID09IEZsdXNo
KSB7CisgICAgICAgIGlmIChub2RlKSB7CisgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBG
bHVzaCkgewogICAgICAgICAgICAgICAgIC8vIFR3byBwb3NzaWJpbGl0aWVzOiBlaXRoZXIgdGhl
IGJsb2NrIHdhbnRzIHRoZSBsb2NhbCB0byBiZSBsaXZlCiAgICAgICAgICAgICAgICAgLy8gYnV0
IGhhcyBub3QgbG9hZGVkIGl0cyB2YWx1ZSwgb3IgaXQgaGFzIGxvYWRlZCBpdHMgdmFsdWUsIGlu
CiAgICAgICAgICAgICAgICAgLy8gd2hpY2ggY2FzZSB3ZSdyZSBkb25lLgotICAgICAgICAgICAg
ICAgIG5vZGVJbmRleCA9IG5vZGVQdHItPmNoaWxkMSgpLmluZGV4KCk7Ci0gICAgICAgICAgICAg
ICAgTm9kZSYgZmx1c2hDaGlsZCA9IG1fZ3JhcGhbbm9kZUluZGV4XTsKLSAgICAgICAgICAgICAg
ICBpZiAoZmx1c2hDaGlsZC5vcCgpID09IFBoaSkgewotICAgICAgICAgICAgICAgICAgICBWYXJp
YWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9IGZsdXNoQ2hpbGQudmFyaWFibGVB
Y2Nlc3NEYXRhKCk7CisgICAgICAgICAgICAgICAgbm9kZSA9IG5vZGUtPmNoaWxkMSgpLm5vZGUo
KTsKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBQaGkpIHsKKyAgICAgICAgICAg
ICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBub2RlLT52
YXJpYWJsZUFjY2Vzc0RhdGEoKTsKICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVBY2Nlc3NE
YXRhLT5tZXJnZUlzQ2FwdHVyZWQoaXNDYXB0dXJlZCk7Ci0gICAgICAgICAgICAgICAgICAgIG5v
ZGVJbmRleCA9IGluamVjdExhenlPcGVyYW5kU3BlY3VsYXRpb24oYWRkVG9HcmFwaChHZXRMb2Nh
bCwgT3BJbmZvKHZhcmlhYmxlQWNjZXNzRGF0YSksIG5vZGVJbmRleCkpOwotICAgICAgICAgICAg
ICAgICAgICBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLmxvY2FsKG9wZXJhbmQpID0g
bm9kZUluZGV4OwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gbm9kZUluZGV4OworICAgICAg
ICAgICAgICAgICAgICBub2RlSW5kZXggPSBpbmplY3RMYXp5T3BlcmFuZFNwZWN1bGF0aW9uKGFk
ZFRvR3JhcGgoR2V0TG9jYWwsIE9wSW5mbyh2YXJpYWJsZUFjY2Vzc0RhdGEpLCBub2RlKSk7Cisg
ICAgICAgICAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwubG9jYWwo
b3BlcmFuZCkgPSBub2RlOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gbm9kZTsKICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgbm9kZVB0ciA9ICZmbHVzaENoaWxkOwogICAg
ICAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgICAgICBBU1NFUlQoJm1fZ3JhcGhbbm9k
ZUluZGV4XSA9PSBub2RlUHRyKTsKLSAgICAgICAgICAgIEFTU0VSVChub2RlUHRyLT5vcCgpICE9
IEZsdXNoKTsKKyAgICAgICAgICAgIEFTU0VSVChub2RlLT5vcCgpICE9IEZsdXNoKTsKIAotICAg
ICAgICAgICAgbm9kZVB0ci0+dmFyaWFibGVBY2Nlc3NEYXRhKCktPm1lcmdlSXNDYXB0dXJlZChp
c0NhcHR1cmVkKTsKKyAgICAgICAgICAgIG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5tZXJn
ZUlzQ2FwdHVyZWQoaXNDYXB0dXJlZCk7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBp
ZiAoaXNDYXB0dXJlZCkgewogICAgICAgICAgICAgICAgIC8vIFdlIHdpc2ggdG8gdXNlIHRoZSBz
YW1lIHZhcmlhYmxlIGFjY2VzcyBkYXRhIGFzIHRoZSBwcmV2aW91cyBhY2Nlc3MsCkBAIC0zMTcs
MTkgKzMxMiwxOSBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIC8vIGtub3csIGF0IHRoaXMg
c3RhZ2Ugb2YgY29tcGlsYXRpb24sIHRoZSBsb2NhbCBoYXMgYmVlbiBjbG9iYmVyZWQuCiAgICAg
ICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgLy8gTWFrZSBzdXJlIHdlIGxpbmsgdG8gdGhl
IFBoaSBub2RlLCBub3QgdG8gdGhlIEdldExvY2FsLgotICAgICAgICAgICAgICAgIGlmIChub2Rl
UHRyLT5vcCgpID09IEdldExvY2FsKQotICAgICAgICAgICAgICAgICAgICBub2RlSW5kZXggPSBu
b2RlUHRyLT5jaGlsZDEoKS5pbmRleCgpOworICAgICAgICAgICAgICAgIGlmIChub2RlLT5vcCgp
ID09IEdldExvY2FsKQorICAgICAgICAgICAgICAgICAgICBub2RlID0gbm9kZS0+Y2hpbGQxKCku
bm9kZSgpOwogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIE5vZGVJbmRleCBuZXdH
ZXRMb2NhbCA9IGluamVjdExhenlPcGVyYW5kU3BlY3VsYXRpb24oCi0gICAgICAgICAgICAgICAg
ICAgIGFkZFRvR3JhcGgoR2V0TG9jYWwsIE9wSW5mbyhub2RlUHRyLT52YXJpYWJsZUFjY2Vzc0Rh
dGEoKSksIG5vZGVJbmRleCkpOworICAgICAgICAgICAgICAgIE5vZGUqIG5ld0dldExvY2FsID0g
aW5qZWN0TGF6eU9wZXJhbmRTcGVjdWxhdGlvbigKKyAgICAgICAgICAgICAgICAgICAgYWRkVG9H
cmFwaChHZXRMb2NhbCwgT3BJbmZvKG5vZGVQdHItPnZhcmlhYmxlQWNjZXNzRGF0YSgpKSwgbm9k
ZSkpOwogICAgICAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwubG9j
YWwob3BlcmFuZCkgPSBuZXdHZXRMb2NhbDsKICAgICAgICAgICAgICAgICByZXR1cm4gbmV3R2V0
TG9jYWw7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChub2Rl
UHRyLT5vcCgpID09IEdldExvY2FsKQotICAgICAgICAgICAgICAgIHJldHVybiBub2RlSW5kZXg7
Ci0gICAgICAgICAgICBBU1NFUlQobm9kZVB0ci0+b3AoKSA9PSBTZXRMb2NhbCk7Ci0gICAgICAg
ICAgICByZXR1cm4gbm9kZVB0ci0+Y2hpbGQxKCkuaW5kZXgoKTsKKyAgICAgICAgICAgIGlmIChu
b2RlLT5vcCgpID09IEdldExvY2FsKQorICAgICAgICAgICAgICAgIHJldHVybiBub2RlOworICAg
ICAgICAgICAgQVNTRVJUKG5vZGUtPm9wKCkgPT0gU2V0TG9jYWwpOworICAgICAgICAgICAgcmV0
dXJuIG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKICAgICAgICAgfQogCiAgICAgICAgIC8vIENoZWNr
IGZvciByZWFkcyBvZiB0ZW1wb3JhcmllcyBmcm9tIHByaW9yIGJsb2NrcywKQEAgLTMzOCwxNiAr
MzMzLDE2IEBAIHByaXZhdGU6CiAgICAgICAgIAogICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEq
IHZhcmlhYmxlQWNjZXNzRGF0YSA9IG5ld1ZhcmlhYmxlQWNjZXNzRGF0YShvcGVyYW5kLCBpc0Nh
cHR1cmVkKTsKICAgICAgICAgCi0gICAgICAgIE5vZGVJbmRleCBwaGkgPSBhZGRUb0dyYXBoKFBo
aSwgT3BJbmZvKHZhcmlhYmxlQWNjZXNzRGF0YSkpOworICAgICAgICBOb2RlKiBwaGkgPSBhZGRU
b0dyYXBoKFBoaSwgT3BJbmZvKHZhcmlhYmxlQWNjZXNzRGF0YSkpOwogICAgICAgICBtX2xvY2Fs
UGhpU3RhY2suYXBwZW5kKFBoaVN0YWNrRW50cnkobV9jdXJyZW50QmxvY2ssIHBoaSwgb3BlcmFu
ZCkpOwotICAgICAgICBub2RlSW5kZXggPSBpbmplY3RMYXp5T3BlcmFuZFNwZWN1bGF0aW9uKGFk
ZFRvR3JhcGgoR2V0TG9jYWwsIE9wSW5mbyh2YXJpYWJsZUFjY2Vzc0RhdGEpLCBwaGkpKTsKLSAg
ICAgICAgbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5sb2NhbChvcGVyYW5kKSA9IG5v
ZGVJbmRleDsKKyAgICAgICAgbm9kZSA9IGluamVjdExhenlPcGVyYW5kU3BlY3VsYXRpb24oYWRk
VG9HcmFwaChHZXRMb2NhbCwgT3BJbmZvKHZhcmlhYmxlQWNjZXNzRGF0YSksIHBoaSkpOworICAg
ICAgICBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLmxvY2FsKG9wZXJhbmQpID0gbm9k
ZTsKICAgICAgICAgCi0gICAgICAgIG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdEhlYWQuc2V0
TG9jYWxGaXJzdFRpbWUob3BlcmFuZCwgbm9kZUluZGV4KTsKKyAgICAgICAgbV9jdXJyZW50Qmxv
Y2stPnZhcmlhYmxlc0F0SGVhZC5zZXRMb2NhbEZpcnN0VGltZShvcGVyYW5kLCBub2RlKTsKICAg
ICAgICAgCi0gICAgICAgIHJldHVybiBub2RlSW5kZXg7CisgICAgICAgIHJldHVybiBub2RlOwog
ICAgIH0KLSAgICB2b2lkIHNldExvY2FsKHVuc2lnbmVkIG9wZXJhbmQsIE5vZGVJbmRleCB2YWx1
ZSwgU2V0TW9kZSBzZXRNb2RlID0gTm9ybWFsU2V0KQorICAgIHZvaWQgc2V0TG9jYWwodW5zaWdu
ZWQgb3BlcmFuZCwgTm9kZSogdmFsdWUsIFNldE1vZGUgc2V0TW9kZSA9IE5vcm1hbFNldCkKICAg
ICB7CiAgICAgICAgIGJvb2wgaXNDYXB0dXJlZCA9IG1fY29kZUJsb2NrLT5pc0NhcHR1cmVkKG9w
ZXJhbmQsIG1faW5saW5lU3RhY2tUb3AtPm1faW5saW5lQ2FsbEZyYW1lKTsKICAgICAgICAgCkBA
IC0zNjAsNzcgKzM1NSw3MyBAQCBwcml2YXRlOgogICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEq
IHZhcmlhYmxlQWNjZXNzRGF0YSA9IG5ld1ZhcmlhYmxlQWNjZXNzRGF0YShvcGVyYW5kLCBpc0Nh
cHR1cmVkKTsKICAgICAgICAgdmFyaWFibGVBY2Nlc3NEYXRhLT5tZXJnZVN0cnVjdHVyZUNoZWNr
SG9pc3RpbmdGYWlsZWQoCiAgICAgICAgICAgICBtX2lubGluZVN0YWNrVG9wLT5tX2V4aXRQcm9m
aWxlLmhhc0V4aXRTaXRlKG1fY3VycmVudEluZGV4LCBCYWRDYWNoZSkpOwotICAgICAgICBOb2Rl
SW5kZXggbm9kZUluZGV4ID0gYWRkVG9HcmFwaChTZXRMb2NhbCwgT3BJbmZvKHZhcmlhYmxlQWNj
ZXNzRGF0YSksIHZhbHVlKTsKLSAgICAgICAgbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFp
bC5sb2NhbChvcGVyYW5kKSA9IG5vZGVJbmRleDsKKyAgICAgICAgTm9kZSogbm9kZSA9IGFkZFRv
R3JhcGgoU2V0TG9jYWwsIE9wSW5mbyh2YXJpYWJsZUFjY2Vzc0RhdGEpLCB2YWx1ZSk7CisgICAg
ICAgIG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwubG9jYWwob3BlcmFuZCkgPSBub2Rl
OwogICAgIH0KIAogICAgIC8vIFVzZWQgaW4gaW1wbGVtZW50aW5nIGdldC9zZXQsIGFib3ZlLCB3
aGVyZSB0aGUgb3BlcmFuZCBpcyBhbiBhcmd1bWVudC4KLSAgICBOb2RlSW5kZXggZ2V0QXJndW1l
bnQodW5zaWduZWQgb3BlcmFuZCkKKyAgICBOb2RlKiBnZXRBcmd1bWVudCh1bnNpZ25lZCBvcGVy
YW5kKQogICAgIHsKICAgICAgICAgdW5zaWduZWQgYXJndW1lbnQgPSBvcGVyYW5kVG9Bcmd1bWVu
dChvcGVyYW5kKTsKICAgICAgICAgQVNTRVJUKGFyZ3VtZW50IDwgbV9udW1Bcmd1bWVudHMpOwog
ICAgICAgICAKLSAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRleCA9IG1fY3VycmVudEJsb2NrLT52
YXJpYWJsZXNBdFRhaWwuYXJndW1lbnQoYXJndW1lbnQpOworICAgICAgICBOb2RlKiBub2RlID0g
bV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5hcmd1bWVudChhcmd1bWVudCk7CiAgICAg
ICAgIGJvb2wgaXNDYXB0dXJlZCA9IG1fY29kZUJsb2NrLT5pc0NhcHR1cmVkKG9wZXJhbmQpOwog
Ci0gICAgICAgIGlmIChub2RlSW5kZXggIT0gTm9Ob2RlKSB7Ci0gICAgICAgICAgICBOb2RlKiBu
b2RlUHRyID0gJm1fZ3JhcGhbbm9kZUluZGV4XTsKLSAgICAgICAgICAgIGlmIChub2RlUHRyLT5v
cCgpID09IEZsdXNoKSB7CisgICAgICAgIGlmIChub2RlKSB7CisgICAgICAgICAgICBpZiAobm9k
ZS0+b3AoKSA9PSBGbHVzaCkgewogICAgICAgICAgICAgICAgIC8vIFR3byBwb3NzaWJpbGl0aWVz
OiBlaXRoZXIgdGhlIGJsb2NrIHdhbnRzIHRoZSBsb2NhbCB0byBiZSBsaXZlCiAgICAgICAgICAg
ICAgICAgLy8gYnV0IGhhcyBub3QgbG9hZGVkIGl0cyB2YWx1ZSwgb3IgaXQgaGFzIGxvYWRlZCBp
dHMgdmFsdWUsIGluCiAgICAgICAgICAgICAgICAgLy8gd2hpY2ggY2FzZSB3ZSdyZSBkb25lLgot
ICAgICAgICAgICAgICAgIG5vZGVJbmRleCA9IG5vZGVQdHItPmNoaWxkMSgpLmluZGV4KCk7Ci0g
ICAgICAgICAgICAgICAgTm9kZSYgZmx1c2hDaGlsZCA9IG1fZ3JhcGhbbm9kZUluZGV4XTsKLSAg
ICAgICAgICAgICAgICBpZiAoZmx1c2hDaGlsZC5vcCgpID09IFBoaSkgewotICAgICAgICAgICAg
ICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9IGZsdXNoQ2hp
bGQudmFyaWFibGVBY2Nlc3NEYXRhKCk7CisgICAgICAgICAgICAgICAgbm9kZSA9IG5vZGUtPmNo
aWxkMSgpLm5vZGUoKTsKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBQaGkpIHsK
KyAgICAgICAgICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0Rh
dGEgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKICAgICAgICAgICAgICAgICAgICAgdmFy
aWFibGVBY2Nlc3NEYXRhLT5tZXJnZUlzQ2FwdHVyZWQoaXNDYXB0dXJlZCk7Ci0gICAgICAgICAg
ICAgICAgICAgIG5vZGVJbmRleCA9IGluamVjdExhenlPcGVyYW5kU3BlY3VsYXRpb24oYWRkVG9H
cmFwaChHZXRMb2NhbCwgT3BJbmZvKHZhcmlhYmxlQWNjZXNzRGF0YSksIG5vZGVJbmRleCkpOwot
ICAgICAgICAgICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLmFyZ3Vt
ZW50KGFyZ3VtZW50KSA9IG5vZGVJbmRleDsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5v
ZGVJbmRleDsKKyAgICAgICAgICAgICAgICAgICAgbm9kZSA9IGluamVjdExhenlPcGVyYW5kU3Bl
Y3VsYXRpb24oYWRkVG9HcmFwaChHZXRMb2NhbCwgT3BJbmZvKHZhcmlhYmxlQWNjZXNzRGF0YSks
IG5vZGUpKTsKKyAgICAgICAgICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0
VGFpbC5hcmd1bWVudChhcmd1bWVudCkgPSBub2RlOworICAgICAgICAgICAgICAgICAgICByZXR1
cm4gbm9kZTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgbm9kZVB0ciA9ICZm
bHVzaENoaWxkOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgICAgICBBU1NF
UlQoJm1fZ3JhcGhbbm9kZUluZGV4XSA9PSBub2RlUHRyKTsKLSAgICAgICAgICAgIEFTU0VSVChu
b2RlUHRyLT5vcCgpICE9IEZsdXNoKTsKKyAgICAgICAgICAgIEFTU0VSVChub2RlLT5vcCgpICE9
IEZsdXNoKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgbm9kZVB0ci0+dmFyaWFibGVBY2Nl
c3NEYXRhKCktPm1lcmdlSXNDYXB0dXJlZChpc0NhcHR1cmVkKTsKKyAgICAgICAgICAgIG5vZGUt
PnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5tZXJnZUlzQ2FwdHVyZWQoaXNDYXB0dXJlZCk7CiAgICAg
ICAgICAgICAKLSAgICAgICAgICAgIGlmIChub2RlUHRyLT5vcCgpID09IFNldEFyZ3VtZW50KSB7
CisgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBTZXRBcmd1bWVudCkgewogICAgICAgICAg
ICAgICAgIC8vIFdlJ3JlIGdldHRpbmcgYW4gYXJndW1lbnQgaW4gdGhlIGZpcnN0IGJhc2ljIGJs
b2NrOyBsaW5rCiAgICAgICAgICAgICAgICAgLy8gdGhlIEdldExvY2FsIHRvIHRoZSBTZXRBcmd1
bWVudC4KLSAgICAgICAgICAgICAgICBBU1NFUlQobm9kZVB0ci0+bG9jYWwoKSA9PSBzdGF0aWNf
Y2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KG9wZXJhbmQpKTsKLSAgICAgICAgICAgICAgICBWYXJpYWJs
ZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbm9kZVB0ci0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7Ci0g
ICAgICAgICAgICAgICAgbm9kZUluZGV4ID0gaW5qZWN0TGF6eU9wZXJhbmRTcGVjdWxhdGlvbihh
ZGRUb0dyYXBoKEdldExvY2FsLCBPcEluZm8odmFyaWFibGUpLCBub2RlSW5kZXgpKTsKLSAgICAg
ICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLmFyZ3VtZW50KGFyZ3Vt
ZW50KSA9IG5vZGVJbmRleDsKLSAgICAgICAgICAgICAgICByZXR1cm4gbm9kZUluZGV4OworICAg
ICAgICAgICAgICAgIEFTU0VSVChub2RlLT5sb2NhbCgpID09IHN0YXRpY19jYXN0PFZpcnR1YWxS
ZWdpc3Rlcj4ob3BlcmFuZCkpOworICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSog
dmFyaWFibGUgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKKyAgICAgICAgICAgICAgICBu
b2RlID0gaW5qZWN0TGF6eU9wZXJhbmRTcGVjdWxhdGlvbihhZGRUb0dyYXBoKEdldExvY2FsLCBP
cEluZm8odmFyaWFibGUpLCBub2RlKSk7CisgICAgICAgICAgICAgICAgbV9jdXJyZW50QmxvY2st
PnZhcmlhYmxlc0F0VGFpbC5hcmd1bWVudChhcmd1bWVudCkgPSBub2RlOworICAgICAgICAgICAg
ICAgIHJldHVybiBub2RlOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgICAg
ICBpZiAoaXNDYXB0dXJlZCkgewotICAgICAgICAgICAgICAgIGlmIChub2RlUHRyLT5vcCgpID09
IEdldExvY2FsKQotICAgICAgICAgICAgICAgICAgICBub2RlSW5kZXggPSBub2RlUHRyLT5jaGls
ZDEoKS5pbmRleCgpOwotICAgICAgICAgICAgICAgIHJldHVybiBpbmplY3RMYXp5T3BlcmFuZFNw
ZWN1bGF0aW9uKGFkZFRvR3JhcGgoR2V0TG9jYWwsIE9wSW5mbyhub2RlUHRyLT52YXJpYWJsZUFj
Y2Vzc0RhdGEoKSksIG5vZGVJbmRleCkpOworICAgICAgICAgICAgICAgIGlmIChub2RlLT5vcCgp
ID09IEdldExvY2FsKQorICAgICAgICAgICAgICAgICAgICBub2RlID0gbm9kZS0+Y2hpbGQxKCku
bm9kZSgpOworICAgICAgICAgICAgICAgIHJldHVybiBpbmplY3RMYXp5T3BlcmFuZFNwZWN1bGF0
aW9uKGFkZFRvR3JhcGgoR2V0TG9jYWwsIE9wSW5mbyhub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEo
KSksIG5vZGUpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAgICAgICAgaWYg
KG5vZGVQdHItPm9wKCkgPT0gR2V0TG9jYWwpCi0gICAgICAgICAgICAgICAgcmV0dXJuIG5vZGVJ
bmRleDsKKyAgICAgICAgICAgIGlmIChub2RlLT5vcCgpID09IEdldExvY2FsKQorICAgICAgICAg
ICAgICAgIHJldHVybiBub2RlOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBBU1NFUlQobm9k
ZVB0ci0+b3AoKSA9PSBTZXRMb2NhbCk7Ci0gICAgICAgICAgICByZXR1cm4gbm9kZVB0ci0+Y2hp
bGQxKCkuaW5kZXgoKTsKKyAgICAgICAgICAgIEFTU0VSVChub2RlLT5vcCgpID09IFNldExvY2Fs
KTsKKyAgICAgICAgICAgIHJldHVybiBub2RlLT5jaGlsZDEoKS5ub2RlKCk7CiAgICAgICAgIH0K
ICAgICAgICAgCiAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRh
ID0gbmV3VmFyaWFibGVBY2Nlc3NEYXRhKG9wZXJhbmQsIGlzQ2FwdHVyZWQpOwogCi0gICAgICAg
IE5vZGVJbmRleCBwaGkgPSBhZGRUb0dyYXBoKFBoaSwgT3BJbmZvKHZhcmlhYmxlQWNjZXNzRGF0
YSkpOworICAgICAgICBOb2RlKiBwaGkgPSBhZGRUb0dyYXBoKFBoaSwgT3BJbmZvKHZhcmlhYmxl
QWNjZXNzRGF0YSkpOwogICAgICAgICBtX2FyZ3VtZW50UGhpU3RhY2suYXBwZW5kKFBoaVN0YWNr
RW50cnkobV9jdXJyZW50QmxvY2ssIHBoaSwgYXJndW1lbnQpKTsKLSAgICAgICAgbm9kZUluZGV4
ID0gaW5qZWN0TGF6eU9wZXJhbmRTcGVjdWxhdGlvbihhZGRUb0dyYXBoKEdldExvY2FsLCBPcElu
Zm8odmFyaWFibGVBY2Nlc3NEYXRhKSwgcGhpKSk7Ci0gICAgICAgIG1fY3VycmVudEJsb2NrLT52
YXJpYWJsZXNBdFRhaWwuYXJndW1lbnQoYXJndW1lbnQpID0gbm9kZUluZGV4OworICAgICAgICBu
b2RlID0gaW5qZWN0TGF6eU9wZXJhbmRTcGVjdWxhdGlvbihhZGRUb0dyYXBoKEdldExvY2FsLCBP
cEluZm8odmFyaWFibGVBY2Nlc3NEYXRhKSwgcGhpKSk7CisgICAgICAgIG1fY3VycmVudEJsb2Nr
LT52YXJpYWJsZXNBdFRhaWwuYXJndW1lbnQoYXJndW1lbnQpID0gbm9kZTsKICAgICAgICAgCi0g
ICAgICAgIG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdEhlYWQuc2V0QXJndW1lbnRGaXJzdFRp
bWUoYXJndW1lbnQsIG5vZGVJbmRleCk7CisgICAgICAgIG1fY3VycmVudEJsb2NrLT52YXJpYWJs
ZXNBdEhlYWQuc2V0QXJndW1lbnRGaXJzdFRpbWUoYXJndW1lbnQsIG5vZGUpOwogICAgICAgICAK
LSAgICAgICAgcmV0dXJuIG5vZGVJbmRleDsKKyAgICAgICAgcmV0dXJuIG5vZGU7CiAgICAgfQot
ICAgIHZvaWQgc2V0QXJndW1lbnQoaW50IG9wZXJhbmQsIE5vZGVJbmRleCB2YWx1ZSwgU2V0TW9k
ZSBzZXRNb2RlID0gTm9ybWFsU2V0KQorICAgIHZvaWQgc2V0QXJndW1lbnQoaW50IG9wZXJhbmQs
IE5vZGUqIHZhbHVlLCBTZXRNb2RlIHNldE1vZGUgPSBOb3JtYWxTZXQpCiAgICAgewogICAgICAg
ICB1bnNpZ25lZCBhcmd1bWVudCA9IG9wZXJhbmRUb0FyZ3VtZW50KG9wZXJhbmQpOwogICAgICAg
ICBBU1NFUlQoYXJndW1lbnQgPCBtX251bUFyZ3VtZW50cyk7CkBAIC00NDQsOCArNDM1LDggQEAg
cHJpdmF0ZToKICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEg
PSBuZXdWYXJpYWJsZUFjY2Vzc0RhdGEob3BlcmFuZCwgaXNDYXB0dXJlZCk7CiAgICAgICAgIHZh
cmlhYmxlQWNjZXNzRGF0YS0+bWVyZ2VTdHJ1Y3R1cmVDaGVja0hvaXN0aW5nRmFpbGVkKAogICAg
ICAgICAgICAgbV9pbmxpbmVTdGFja1RvcC0+bV9leGl0UHJvZmlsZS5oYXNFeGl0U2l0ZShtX2N1
cnJlbnRJbmRleCwgQmFkQ2FjaGUpKTsKLSAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRleCA9IGFk
ZFRvR3JhcGgoU2V0TG9jYWwsIE9wSW5mbyh2YXJpYWJsZUFjY2Vzc0RhdGEpLCB2YWx1ZSk7Ci0g
ICAgICAgIG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwuYXJndW1lbnQoYXJndW1lbnQp
ID0gbm9kZUluZGV4OworICAgICAgICBOb2RlKiBub2RlID0gYWRkVG9HcmFwaChTZXRMb2NhbCwg
T3BJbmZvKHZhcmlhYmxlQWNjZXNzRGF0YSksIHZhbHVlKTsKKyAgICAgICAgbV9jdXJyZW50Qmxv
Y2stPnZhcmlhYmxlc0F0VGFpbC5hcmd1bWVudChhcmd1bWVudCkgPSBub2RlOwogICAgIH0KICAg
ICAKICAgICBBcmd1bWVudFBvc2l0aW9uKiBmaW5kQXJndW1lbnRQb3NpdGlvbkZvckFyZ3VtZW50
KGludCBhcmd1bWVudCkKQEAgLTUwMCw1NSArNDkxLDUzIEBAIHByaXZhdGU6CiAgICAgICAgIAog
ICAgICAgICBBU1NFUlQob3BlcmFuZCA8IEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4KTsKICAg
ICAgICAgCi0gICAgICAgIE5vZGVJbmRleCBub2RlSW5kZXg7CisgICAgICAgIE5vZGUqIG5vZGU7
CiAgICAgICAgIGludCBpbmRleDsKICAgICAgICAgaWYgKG9wZXJhbmRJc0FyZ3VtZW50KG9wZXJh
bmQpKSB7CiAgICAgICAgICAgICBpbmRleCA9IG9wZXJhbmRUb0FyZ3VtZW50KG9wZXJhbmQpOwot
ICAgICAgICAgICAgbm9kZUluZGV4ID0gbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5h
cmd1bWVudChpbmRleCk7CisgICAgICAgICAgICBub2RlID0gbV9jdXJyZW50QmxvY2stPnZhcmlh
Ymxlc0F0VGFpbC5hcmd1bWVudChpbmRleCk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAg
ICBpbmRleCA9IG9wZXJhbmQ7Ci0gICAgICAgICAgICBub2RlSW5kZXggPSBtX2N1cnJlbnRCbG9j
ay0+dmFyaWFibGVzQXRUYWlsLmxvY2FsKGluZGV4KTsKKyAgICAgICAgICAgIG5vZGUgPSBtX2N1
cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLmxvY2FsKGluZGV4KTsKICAgICAgICAgICAgIG1f
cHJlc2VydmVkVmFycy5zZXQob3BlcmFuZCk7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAg
IGlmIChub2RlSW5kZXggIT0gTm9Ob2RlKSB7Ci0gICAgICAgICAgICBOb2RlJiBub2RlID0gbV9n
cmFwaFtub2RlSW5kZXhdOwotICAgICAgICAgICAgc3dpdGNoIChub2RlLm9wKCkpIHsKKyAgICAg
ICAgaWYgKG5vZGUpIHsKKyAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewogICAgICAg
ICAgICAgY2FzZSBGbHVzaDoKLSAgICAgICAgICAgICAgICBub2RlSW5kZXggPSBub2RlLmNoaWxk
MSgpLmluZGV4KCk7CisgICAgICAgICAgICAgICAgbm9kZSA9IG5vZGUtPmNoaWxkMSgpLm5vZGUo
KTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgR2V0TG9jYWw6Ci0g
ICAgICAgICAgICAgICAgbm9kZUluZGV4ID0gbm9kZS5jaGlsZDEoKS5pbmRleCgpOworICAgICAg
ICAgICAgICAgIG5vZGUgPSBub2RlLT5jaGlsZDEoKS5ub2RlKCk7CiAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgICAgICBBU1NFUlQobV9ncmFwaFtub2Rl
SW5kZXhdLm9wKCkgIT0gRmx1c2gKLSAgICAgICAgICAgICAgICAgICAmJiBtX2dyYXBoW25vZGVJ
bmRleF0ub3AoKSAhPSBHZXRMb2NhbCk7CisgICAgICAgICAgICBBU1NFUlQobm9kZS0+b3AoKSAh
PSBGbHVzaCAmJiBub2RlLT5vcCgpICE9IEdldExvY2FsKTsKICAgICAgICAgICAgIAogICAgICAg
ICAgICAgLy8gRW1pdCBhIEZsdXNoIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB3ZSBhbHJlYWR5IGZs
dXNoZWQgaXQuCiAgICAgICAgICAgICAvLyBUaGlzIGdpdmVzIHVzIGd1aWRhbmNlIHRvIHNlZSB0
aGF0IHRoZSB2YXJpYWJsZSBhbHNvIG5lZWRzIHRvIGJlIGZsdXNoZWQKICAgICAgICAgICAgIC8v
IGZvciBhcmd1bWVudHMsIGV2ZW4gaWYgaXQgYWxyZWFkeSBoYWQgdG8gYmUgZmx1c2hlZCBmb3Ig
b3RoZXIgcmVhc29ucy4KLSAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGVB
Y2Nlc3NEYXRhID0gbm9kZS52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKKyAgICAgICAgICAgIFZhcmlh
YmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NE
YXRhKCk7CiAgICAgICAgICAgICB2YXJpYWJsZUFjY2Vzc0RhdGEtPm1lcmdlSXNDYXB0dXJlZChp
c0NhcHR1cmVkKTsKLSAgICAgICAgICAgIGFkZFRvR3JhcGgoRmx1c2gsIE9wSW5mbyh2YXJpYWJs
ZUFjY2Vzc0RhdGEpLCBub2RlSW5kZXgpOworICAgICAgICAgICAgYWRkVG9HcmFwaChGbHVzaCwg
T3BJbmZvKHZhcmlhYmxlQWNjZXNzRGF0YSksIG5vZGUpOwogICAgICAgICAgICAgaWYgKGFyZ3Vt
ZW50UG9zaXRpb24pCiAgICAgICAgICAgICAgICAgYXJndW1lbnRQb3NpdGlvbi0+YWRkVmFyaWFi
bGUodmFyaWFibGVBY2Nlc3NEYXRhKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQog
ICAgICAgICAKICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEg
PSBuZXdWYXJpYWJsZUFjY2Vzc0RhdGEob3BlcmFuZCwgaXNDYXB0dXJlZCk7Ci0gICAgICAgIE5v
ZGVJbmRleCBwaGkgPSBhZGRUb0dyYXBoKFBoaSwgT3BJbmZvKHZhcmlhYmxlQWNjZXNzRGF0YSkp
OwotICAgICAgICBub2RlSW5kZXggPSBhZGRUb0dyYXBoKEZsdXNoLCBPcEluZm8odmFyaWFibGVB
Y2Nlc3NEYXRhKSwgcGhpKTsKKyAgICAgICAgTm9kZSogcGhpID0gYWRkVG9HcmFwaChQaGksIE9w
SW5mbyh2YXJpYWJsZUFjY2Vzc0RhdGEpKTsKKyAgICAgICAgbm9kZSA9IGFkZFRvR3JhcGgoRmx1
c2gsIE9wSW5mbyh2YXJpYWJsZUFjY2Vzc0RhdGEpLCBwaGkpOwogICAgICAgICBpZiAob3BlcmFu
ZElzQXJndW1lbnQob3BlcmFuZCkpIHsKICAgICAgICAgICAgIG1fYXJndW1lbnRQaGlTdGFjay5h
cHBlbmQoUGhpU3RhY2tFbnRyeShtX2N1cnJlbnRCbG9jaywgcGhpLCBpbmRleCkpOwotICAgICAg
ICAgICAgbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5hcmd1bWVudChpbmRleCkgPSBu
b2RlSW5kZXg7Ci0gICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRIZWFkLnNl
dEFyZ3VtZW50Rmlyc3RUaW1lKGluZGV4LCBub2RlSW5kZXgpOworICAgICAgICAgICAgbV9jdXJy
ZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5hcmd1bWVudChpbmRleCkgPSBub2RlOworICAgICAg
ICAgICAgbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0SGVhZC5zZXRBcmd1bWVudEZpcnN0VGlt
ZShpbmRleCwgbm9kZSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBtX2xvY2FsUGhp
U3RhY2suYXBwZW5kKFBoaVN0YWNrRW50cnkobV9jdXJyZW50QmxvY2ssIHBoaSwgaW5kZXgpKTsK
LSAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwubG9jYWwoaW5kZXgp
ID0gbm9kZUluZGV4OwotICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0SGVh
ZC5zZXRMb2NhbEZpcnN0VGltZShpbmRleCwgbm9kZUluZGV4KTsKKyAgICAgICAgICAgIG1fY3Vy
cmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwubG9jYWwoaW5kZXgpID0gbm9kZTsKKyAgICAgICAg
ICAgIG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdEhlYWQuc2V0TG9jYWxGaXJzdFRpbWUoaW5k
ZXgsIG5vZGUpOwogICAgICAgICB9CiAgICAgICAgIGlmIChhcmd1bWVudFBvc2l0aW9uKQogICAg
ICAgICAgICAgYXJndW1lbnRQb3NpdGlvbi0+YWRkVmFyaWFibGUodmFyaWFibGVBY2Nlc3NEYXRh
KTsKQEAgLTU3MSwzNSArNTYwLDMzIEBAIHByaXZhdGU6CiAgICAgfQogCiAgICAgLy8gR2V0IGFu
IG9wZXJhbmQsIGFuZCBwZXJmb3JtIGEgVG9JbnQzMi9Ub051bWJlciBjb252ZXJzaW9uIG9uIGl0
LgotICAgIE5vZGVJbmRleCBnZXRUb0ludDMyKGludCBvcGVyYW5kKQorICAgIE5vZGUqIGdldFRv
SW50MzIoaW50IG9wZXJhbmQpCiAgICAgewogICAgICAgICByZXR1cm4gdG9JbnQzMihnZXQob3Bl
cmFuZCkpOwogICAgIH0KIAogICAgIC8vIFBlcmZvcm0gYW4gRVM1IFRvSW50MzIgb3BlcmF0aW9u
IC0gcmV0dXJucyBhIG5vZGUgb2YgdHlwZSBOb2RlUmVzdWx0SW50MzIuCi0gICAgTm9kZUluZGV4
IHRvSW50MzIoTm9kZUluZGV4IGluZGV4KQorICAgIE5vZGUqIHRvSW50MzIoTm9kZSogbm9kZSkK
ICAgICB7Ci0gICAgICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW2luZGV4XTsKLQotICAgICAgICBp
ZiAobm9kZS5oYXNJbnQzMlJlc3VsdCgpKQotICAgICAgICAgICAgcmV0dXJuIGluZGV4OworICAg
ICAgICBpZiAobm9kZS0+aGFzSW50MzJSZXN1bHQoKSkKKyAgICAgICAgICAgIHJldHVybiBub2Rl
OwogCi0gICAgICAgIGlmIChub2RlLm9wKCkgPT0gVUludDMyVG9OdW1iZXIpCi0gICAgICAgICAg
ICByZXR1cm4gbm9kZS5jaGlsZDEoKS5pbmRleCgpOworICAgICAgICBpZiAobm9kZS0+b3AoKSA9
PSBVSW50MzJUb051bWJlcikKKyAgICAgICAgICAgIHJldHVybiBub2RlLT5jaGlsZDEoKS5ub2Rl
KCk7CiAKICAgICAgICAgLy8gQ2hlY2sgZm9yIG51bWVyaWMgY29uc3RhbnRzIGJveGVkIGFzIEpT
VmFsdWVzLgotICAgICAgICBpZiAobm9kZS5vcCgpID09IEpTQ29uc3RhbnQpIHsKLSAgICAgICAg
ICAgIEpTVmFsdWUgdiA9IHZhbHVlT2ZKU0NvbnN0YW50KGluZGV4KTsKKyAgICAgICAgaWYgKG5v
ZGUtPm9wKCkgPT0gSlNDb25zdGFudCkgeworICAgICAgICAgICAgSlNWYWx1ZSB2ID0gdmFsdWVP
ZkpTQ29uc3RhbnQobm9kZSk7CiAgICAgICAgICAgICBpZiAodi5pc0ludDMyKCkpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIGdldEpTQ29uc3RhbnQobm9kZS5jb25zdGFudE51bWJlcigpKTsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZ2V0SlNDb25zdGFudChub2RlLT5jb25zdGFudE51bWJlcigp
KTsKICAgICAgICAgICAgIGlmICh2LmlzTnVtYmVyKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJu
IGdldEpTQ29uc3RhbnRGb3JWYWx1ZShKU1ZhbHVlKEpTQzo6dG9JbnQzMih2LmFzTnVtYmVyKCkp
KSk7CiAgICAgICAgIH0KIAotICAgICAgICByZXR1cm4gYWRkVG9HcmFwaChWYWx1ZVRvSW50MzIs
IGluZGV4KTsKKyAgICAgICAgcmV0dXJuIGFkZFRvR3JhcGgoVmFsdWVUb0ludDMyLCBub2RlKTsK
ICAgICB9CiAKLSAgICBOb2RlSW5kZXggZ2V0SlNDb25zdGFudEZvclZhbHVlKEpTVmFsdWUgY29u
c3RhbnRWYWx1ZSkKKyAgICBOb2RlKiBnZXRKU0NvbnN0YW50Rm9yVmFsdWUoSlNWYWx1ZSBjb25z
dGFudFZhbHVlKQogICAgIHsKICAgICAgICAgdW5zaWduZWQgY29uc3RhbnRJbmRleCA9IG1fY29k
ZUJsb2NrLT5hZGRPckZpbmRDb25zdGFudChjb25zdGFudFZhbHVlKTsKICAgICAgICAgaWYgKGNv
bnN0YW50SW5kZXggPj0gbV9jb25zdGFudHMuc2l6ZSgpKQpAQCAtNjEwLDU1ICs1OTcsNTUgQEAg
cHJpdmF0ZToKICAgICAgICAgcmV0dXJuIGdldEpTQ29uc3RhbnQoY29uc3RhbnRJbmRleCk7CiAg
ICAgfQogCi0gICAgTm9kZUluZGV4IGdldEpTQ29uc3RhbnQodW5zaWduZWQgY29uc3RhbnQpCisg
ICAgTm9kZSogZ2V0SlNDb25zdGFudCh1bnNpZ25lZCBjb25zdGFudCkKICAgICB7Ci0gICAgICAg
IE5vZGVJbmRleCBpbmRleCA9IG1fY29uc3RhbnRzW2NvbnN0YW50XS5hc0pTVmFsdWU7Ci0gICAg
ICAgIGlmIChpbmRleCAhPSBOb05vZGUpCi0gICAgICAgICAgICByZXR1cm4gaW5kZXg7CisgICAg
ICAgIE5vZGUqIG5vZGUgPSBtX2NvbnN0YW50c1tjb25zdGFudF0uYXNKU1ZhbHVlOworICAgICAg
ICBpZiAobm9kZSkKKyAgICAgICAgICAgIHJldHVybiBub2RlOwogCi0gICAgICAgIE5vZGVJbmRl
eCByZXN1bHRJbmRleCA9IGFkZFRvR3JhcGgoSlNDb25zdGFudCwgT3BJbmZvKGNvbnN0YW50KSk7
Ci0gICAgICAgIG1fY29uc3RhbnRzW2NvbnN0YW50XS5hc0pTVmFsdWUgPSByZXN1bHRJbmRleDsK
LSAgICAgICAgcmV0dXJuIHJlc3VsdEluZGV4OworICAgICAgICBOb2RlKiByZXN1bHQgPSBhZGRU
b0dyYXBoKEpTQ29uc3RhbnQsIE9wSW5mbyhjb25zdGFudCkpOworICAgICAgICBtX2NvbnN0YW50
c1tjb25zdGFudF0uYXNKU1ZhbHVlID0gcmVzdWx0OworICAgICAgICByZXR1cm4gcmVzdWx0Owog
ICAgIH0KIAotICAgIE5vZGVJbmRleCBnZXRDYWxsZWUoKQorICAgIE5vZGUqIGdldENhbGxlZSgp
CiAgICAgewogICAgICAgICByZXR1cm4gYWRkVG9HcmFwaChHZXRDYWxsZWUpOwogICAgIH0KIAog
ICAgIC8vIEhlbHBlciBmdW5jdGlvbnMgdG8gZ2V0L3NldCB0aGUgdGhpcyB2YWx1ZS4KLSAgICBO
b2RlSW5kZXggZ2V0VGhpcygpCisgICAgTm9kZSogZ2V0VGhpcygpCiAgICAgewogICAgICAgICBy
ZXR1cm4gZ2V0KG1faW5saW5lU3RhY2tUb3AtPm1fY29kZUJsb2NrLT50aGlzUmVnaXN0ZXIoKSk7
CiAgICAgfQotICAgIHZvaWQgc2V0VGhpcyhOb2RlSW5kZXggdmFsdWUpCisgICAgdm9pZCBzZXRU
aGlzKE5vZGUqIHZhbHVlKQogICAgIHsKICAgICAgICAgc2V0KG1faW5saW5lU3RhY2tUb3AtPm1f
Y29kZUJsb2NrLT50aGlzUmVnaXN0ZXIoKSwgdmFsdWUpOwogICAgIH0KIAogICAgIC8vIENvbnZl
bmllbmNlIG1ldGhvZHMgZm9yIGNoZWNraW5nIG5vZGVzIGZvciBjb25zdGFudHMuCi0gICAgYm9v
bCBpc0pTQ29uc3RhbnQoTm9kZUluZGV4IGluZGV4KQorICAgIGJvb2wgaXNKU0NvbnN0YW50KE5v
ZGUqIG5vZGUpCiAgICAgewotICAgICAgICByZXR1cm4gbV9ncmFwaFtpbmRleF0ub3AoKSA9PSBK
U0NvbnN0YW50OworICAgICAgICByZXR1cm4gbm9kZS0+b3AoKSA9PSBKU0NvbnN0YW50OwogICAg
IH0KLSAgICBib29sIGlzSW50MzJDb25zdGFudChOb2RlSW5kZXggbm9kZUluZGV4KQorICAgIGJv
b2wgaXNJbnQzMkNvbnN0YW50KE5vZGUqIG5vZGUpCiAgICAgewotICAgICAgICByZXR1cm4gaXNK
U0NvbnN0YW50KG5vZGVJbmRleCkgJiYgdmFsdWVPZkpTQ29uc3RhbnQobm9kZUluZGV4KS5pc0lu
dDMyKCk7CisgICAgICAgIHJldHVybiBpc0pTQ29uc3RhbnQobm9kZSkgJiYgdmFsdWVPZkpTQ29u
c3RhbnQobm9kZSkuaXNJbnQzMigpOwogICAgIH0KICAgICAvLyBDb252ZW5pZW5jZSBtZXRob2Rz
IGZvciBnZXR0aW5nIGNvbnN0YW50IHZhbHVlcy4KLSAgICBKU1ZhbHVlIHZhbHVlT2ZKU0NvbnN0
YW50KE5vZGVJbmRleCBpbmRleCkKKyAgICBKU1ZhbHVlIHZhbHVlT2ZKU0NvbnN0YW50KE5vZGUq
IG5vZGUpCiAgICAgewotICAgICAgICBBU1NFUlQoaXNKU0NvbnN0YW50KGluZGV4KSk7Ci0gICAg
ICAgIHJldHVybiBtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQoRmlyc3RDb25zdGFudFJlZ2lzdGVy
SW5kZXggKyBtX2dyYXBoW2luZGV4XS5jb25zdGFudE51bWJlcigpKTsKKyAgICAgICAgQVNTRVJU
KGlzSlNDb25zdGFudChub2RlKSk7CisgICAgICAgIHJldHVybiBtX2NvZGVCbG9jay0+Z2V0Q29u
c3RhbnQoRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXggKyBub2RlLT5jb25zdGFudE51bWJlcigp
KTsKICAgICB9Ci0gICAgaW50MzJfdCB2YWx1ZU9mSW50MzJDb25zdGFudChOb2RlSW5kZXggbm9k
ZUluZGV4KQorICAgIGludDMyX3QgdmFsdWVPZkludDMyQ29uc3RhbnQoTm9kZSogbm9kZSkKICAg
ICB7Ci0gICAgICAgIEFTU0VSVChpc0ludDMyQ29uc3RhbnQobm9kZUluZGV4KSk7Ci0gICAgICAg
IHJldHVybiB2YWx1ZU9mSlNDb25zdGFudChub2RlSW5kZXgpLmFzSW50MzIoKTsKKyAgICAgICAg
QVNTRVJUKGlzSW50MzJDb25zdGFudChub2RlKSk7CisgICAgICAgIHJldHVybiB2YWx1ZU9mSlND
b25zdGFudChub2RlKS5hc0ludDMyKCk7CiAgICAgfQogICAgIAogICAgIC8vIFRoaXMgbWV0aG9k
IHJldHVybnMgYSBKU0NvbnN0YW50IHdpdGggdGhlIHZhbHVlICd1bmRlZmluZWQnLgotICAgIE5v
ZGVJbmRleCBjb25zdGFudFVuZGVmaW5lZCgpCisgICAgTm9kZSogY29uc3RhbnRVbmRlZmluZWQo
KQogICAgIHsKICAgICAgICAgLy8gSGFzIG1fY29uc3RhbnRVbmRlZmluZWQgYmVlbiBzZXQgdXAg
eWV0PwogICAgICAgICBpZiAobV9jb25zdGFudFVuZGVmaW5lZCA9PSBVSU5UX01BWCkgewpAQCAt
NjgzLDcgKzY3MCw3IEBAIHByaXZhdGU6CiAgICAgfQogCiAgICAgLy8gVGhpcyBtZXRob2QgcmV0
dXJucyBhIEpTQ29uc3RhbnQgd2l0aCB0aGUgdmFsdWUgJ251bGwnLgotICAgIE5vZGVJbmRleCBj
b25zdGFudE51bGwoKQorICAgIE5vZGUqIGNvbnN0YW50TnVsbCgpCiAgICAgewogICAgICAgICAv
LyBIYXMgbV9jb25zdGFudE51bGwgYmVlbiBzZXQgdXAgeWV0PwogICAgICAgICBpZiAobV9jb25z
dGFudE51bGwgPT0gVUlOVF9NQVgpIHsKQEAgLTcwOCw3ICs2OTUsNyBAQCBwcml2YXRlOgogICAg
IH0KIAogICAgIC8vIFRoaXMgbWV0aG9kIHJldHVybnMgYSBEb3VibGVDb25zdGFudCB3aXRoIHRo
ZSB2YWx1ZSAxLgotICAgIE5vZGVJbmRleCBvbmUoKQorICAgIE5vZGUqIG9uZSgpCiAgICAgewog
ICAgICAgICAvLyBIYXMgbV9jb25zdGFudDEgYmVlbiBzZXQgdXAgeWV0PwogICAgICAgICBpZiAo
bV9jb25zdGFudDEgPT0gVUlOVF9NQVgpIHsKQEAgLTczNCw3ICs3MjEsNyBAQCBwcml2YXRlOgog
ICAgIH0KICAgICAKICAgICAvLyBUaGlzIG1ldGhvZCByZXR1cm5zIGEgRG91YmxlQ29uc3RhbnQg
d2l0aCB0aGUgdmFsdWUgTmFOLgotICAgIE5vZGVJbmRleCBjb25zdGFudE5hTigpCisgICAgTm9k
ZSogY29uc3RhbnROYU4oKQogICAgIHsKICAgICAgICAgSlNWYWx1ZSBuYW4gPSBqc05hTigpOwog
ICAgICAgICAKQEAgLTc2MSw5ICs3NDgsOSBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4gZ2V0
SlNDb25zdGFudChtX2NvbnN0YW50TmFOKTsKICAgICB9CiAgICAgCi0gICAgTm9kZUluZGV4IGNl
bGxDb25zdGFudChKU0NlbGwqIGNlbGwpCisgICAgTm9kZSogY2VsbENvbnN0YW50KEpTQ2VsbCog
Y2VsbCkKICAgICB7Ci0gICAgICAgIEhhc2hNYXA8SlNDZWxsKiwgTm9kZUluZGV4Pjo6QWRkUmVz
dWx0IHJlc3VsdCA9IG1fY2VsbENvbnN0YW50Tm9kZXMuYWRkKGNlbGwsIE5vTm9kZSk7CisgICAg
ICAgIEhhc2hNYXA8SlNDZWxsKiwgTm9kZUluZGV4Pjo6QWRkUmVzdWx0IHJlc3VsdCA9IG1fY2Vs
bENvbnN0YW50Tm9kZXMuYWRkKGNlbGwsIDApOwogICAgICAgICBpZiAocmVzdWx0LmlzTmV3RW50
cnkpCiAgICAgICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gYWRkVG9HcmFwaChXZWFr
SlNDb25zdGFudCwgT3BJbmZvKGNlbGwpKTsKICAgICAgICAgCkBAIC0zMjUwLDkgKzMyMzcsNiBA
QCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwcm9jZXNzUGhpU3RhY2soKQogICAgICAgICBpZiAoIWVu
dHJ5Lm1fYmxvY2stPmlzUmVhY2hhYmxlKQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAg
IAotICAgICAgICBpZiAoIWVudHJ5Lm1fYmxvY2stPmlzUmVhY2hhYmxlKQotICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgIAogICAgICAgICBQcmVkZWNlc3Nvckxpc3QmIHByZWRlY2Vzc29y
cyA9IGVudHJ5Lm1fYmxvY2stPm1fcHJlZGVjZXNzb3JzOwogICAgICAgICB1bnNpZ25lZCB2YXJO
byA9IGVudHJ5Lm1fdmFyTm87CiAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogZGF0YUZvclBo
aSA9IG1fZ3JhcGhbZW50cnkubV9waGldLnZhcmlhYmxlQWNjZXNzRGF0YSgpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDRkFQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDRkFQaGFzZS5jcHAJKHJldmlzaW9uIDE0MDU2NykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ0ZBUGhhc2UuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTMgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC04OCwxMSArODgsMTEgQEAgcHJpdmF0ZToKICAgICAgICAgZGF0YUxvZ0YoIlxuIik7CiAj
ZW5kaWYKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGJsb2NrLT5zaXplKCk7ICsr
aSkgewotICAgICAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRleCA9IGJsb2NrLT5hdChpKTsKLSAg
ICAgICAgICAgIGlmICghbV9ncmFwaFtub2RlSW5kZXhdLnNob3VsZEdlbmVyYXRlKCkpCisgICAg
ICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPmF0KGkpOworICAgICAgICAgICAgaWYgKCFub2Rl
LT5zaG91bGRHZW5lcmF0ZSgpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogI2lmIERGR19F
TkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKLSAgICAgICAgICAgIGRhdGFMb2dGKCIg
ICAgICAlcyBAJXU6ICIsIEdyYXBoOjpvcE5hbWUobV9ncmFwaFtub2RlSW5kZXhdLm9wKCkpLCBu
b2RlSW5kZXgpOworICAgICAgICAgICAgZGF0YUxvZ0YoIiAgICAgICVzIEAldTogIiwgR3JhcGg6
Om9wTmFtZShtX2dyYXBoW25vZGVJbmRleF0ub3AoKSksIG5vZGUtPmluZGV4KCkpOwogICAgICAg
ICAgICAgbV9zdGF0ZS5kdW1wKFdURjo6ZGF0YUZpbGUoKSk7CiAgICAgICAgICAgICBkYXRhTG9n
RigiXG4iKTsKICNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDRkdT
aW1wbGlmaWNhdGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0NGR1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAxNDA1NjcpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NGR1NpbXBsaWZpY2F0aW9uUGhhc2UuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIs
IDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC02MCw3ICs2MCw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAg
ICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgQVNTRVJUKGJsb2NrLT5pc1JlYWNoYWJsZSk7
CiAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKG1fZ3JhcGhbYmxvY2stPmxh
c3QoKV0ub3AoKSkgeworICAgICAgICAgICAgICAgIHN3aXRjaCAoYmxvY2stPmxhc3QoKS0+b3Ao
KSkgewogICAgICAgICAgICAgICAgIGNhc2UgSnVtcDogewogICAgICAgICAgICAgICAgICAgICAv
LyBTdWNjZXNzb3Igd2l0aCBvbmUgcHJlZGVjZXNzb3IgLT4gbWVyZ2UuCiAgICAgICAgICAgICAg
ICAgICAgIGlmIChtX2dyYXBoLm1fYmxvY2tzW21fZ3JhcGguc3VjY2Vzc29yKGJsb2NrLCAwKV0t
Pm1fcHJlZGVjZXNzb3JzLnNpemUoKSA9PSAxKSB7CkBAIC0xMjksMTAgKzEyOSwxMCBAQCBwdWJs
aWM6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQmxvY2tJbmRleCB0YWtlbkJsb2NrSW5k
ZXggPSBtX2dyYXBoLnN1Y2Nlc3NvckZvckNvbmRpdGlvbihibG9jaywgY29uZGl0aW9uKTsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBCbG9ja0luZGV4IG5vdFRha2VuQmxvY2tJbmRleCA9
IG1fZ3JhcGguc3VjY2Vzc29yRm9yQ29uZGl0aW9uKGJsb2NrLCAhY29uZGl0aW9uKTsKICAgICAg
ICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVCht
X2dyYXBoW2Jsb2NrLT5sYXN0KCldLmlzVGVybWluYWwoKSk7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgQ29kZU9yaWdpbiBib3VuZGFyeUNvZGVPcmlnaW4gPSBtX2dyYXBoW2Jsb2NrLT5s
YXN0KCldLmNvZGVPcmlnaW47Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaFti
bG9jay0+bGFzdCgpXS5zZXRPcEFuZERlZmF1bHRGbGFncyhQaGFudG9tKTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBBU1NFUlQobV9ncmFwaFtibG9jay0+bGFzdCgpXS5yZWZDb3VudCgp
ID09IDEpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChibG9jay0+bGFzdCgp
LT5pc1Rlcm1pbmFsKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvZGVPcmlnaW4g
Ym91bmRhcnlDb2RlT3JpZ2luID0gYmxvY2stPmxhc3QoKS0+Y29kZU9yaWdpbjsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBibG9jay0+bGFzdCgpLT5zZXRPcEFuZERlZmF1bHRGbGFncyhQ
aGFudG9tKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQoYmxvY2stPmxhc3Qo
KS0+cmVmQ291bnQoKSA9PSAxKTsKICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGpldHRpc29uQmxvY2soYmxvY2tJbmRleCwgbm90VGFrZW5CbG9j
a0luZGV4LCBib3VuZGFyeUNvZGVPcmlnaW4pOwogICAgICAgICAgICAgICAgICAgICAgICAgCkBA
IC0xNjAsMTIgKzE2MCwxMSBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZGF0YUxvZ0YoIkNGR1NpbXBsaWZ5OiBCcmFuY2gtPmp1bXAgY29udmVyc2lvbiB0byBzYW1lIHN1
Y2Nlc3NvciBvbiBCbG9jayAjJXUgdG8gQmxvY2sgIyV1LlxuIiwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGJsb2NrSW5kZXgsIHRhcmdldEJsb2NrSW5kZXgpOwogI2VuZGlm
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKG1fZ3JhcGhbYmxvY2stPmxhc3Qo
KV0uaXNUZXJtaW5hbCgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb2RlJiBicmFu
Y2ggPSBtX2dyYXBoW2Jsb2NrLT5sYXN0KCldOwotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEFTU0VSVChicmFuY2guaXNUZXJtaW5hbCgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBBU1NFUlQoYnJhbmNoLm9wKCkgPT0gQnJhbmNoKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBicmFuY2guc2V0T3BBbmREZWZhdWx0RmxhZ3MoUGhhbnRvbSk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgQVNTRVJUKGJyYW5jaC5yZWZDb3VudCgpID09IDEpOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIE5vZGUqIGJyYW5jaCA9IGJsb2NrLT5sYXN0KCk7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGJyYW5jaC0+aXNUZXJtaW5hbCgpKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQoYnJhbmNoLT5vcCgpID09IEJyYW5jaCk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJhbmNoLT5zZXRPcEFuZERlZmF1bHRGbGFncyhQ
aGFudG9tKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQoYnJhbmNoLT5yZWZD
b3VudCgpID09IDEpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGJsb2NrLT5hcHBlbmROb2RlKAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBtX2dyYXBoLCBEb250UmVmQ2hpbGRyZW4sIERvbnRSZWZOb2RlLCBTcGVjTm9u
ZSwgSnVtcCwKQEAgLTI2MCw0NSArMjU5LDQzIEBAIHByaXZhdGU6CiAgICAgCiAgICAgdm9pZCBr
ZWVwT3BlcmFuZEFsaXZlKEJhc2ljQmxvY2sqIGJsb2NrLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4s
IGludCBvcGVyYW5kKQogICAgIHsKLSAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRleCA9IGJsb2Nr
LT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZChvcGVyYW5kKTsKLSAgICAgICAgaWYgKG5vZGVJbmRl
eCA9PSBOb05vZGUpCisgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+dmFyaWFibGVzQXRUYWls
Lm9wZXJhbmQob3BlcmFuZCk7CisgICAgICAgIGlmICghbm9kZSkKICAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgaWYgKG1fZ3JhcGhbbm9kZUluZGV4XS52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+
aXNDYXB0dXJlZCgpKQorICAgICAgICBpZiAobm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCktPmlz
Q2FwdHVyZWQoKSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgaWYgKG1fZ3JhcGhbbm9k
ZUluZGV4XS5vcCgpID09IFNldExvY2FsKQotICAgICAgICAgICAgbm9kZUluZGV4ID0gbV9ncmFw
aFtub2RlSW5kZXhdLmNoaWxkMSgpLmluZGV4KCk7Ci0gICAgICAgIE5vZGUmIG5vZGUgPSBtX2dy
YXBoW25vZGVJbmRleF07Ci0gICAgICAgIGlmICghbm9kZS5zaG91bGRHZW5lcmF0ZSgpKQorICAg
ICAgICBpZiAobm9kZS0+b3AoKSA9PSBTZXRMb2NhbCkKKyAgICAgICAgICAgIG5vZGUgPSBub2Rl
LT5jaGlsZDEoKS5ub2RlKCk7CisgICAgICAgIGlmICghbm9kZS0+c2hvdWxkR2VuZXJhdGUoKSkK
ICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgQVNTRVJUKG1fZ3JhcGhbbm9kZUluZGV4XS5v
cCgpICE9IFNldExvY2FsKTsKKyAgICAgICAgQVNTRVJUKG5vZGUtPm9wKCkgIT0gU2V0TG9jYWwp
OwogICAgICAgICBibG9jay0+YXBwZW5kTm9kZSgKLSAgICAgICAgICAgIG1fZ3JhcGgsIFJlZkNo
aWxkcmVuLCBEb250UmVmTm9kZSwgU3BlY05vbmUsIFBoYW50b20sIGNvZGVPcmlnaW4sIG5vZGVJ
bmRleCk7CisgICAgICAgICAgICBtX2dyYXBoLCBSZWZDaGlsZHJlbiwgRG9udFJlZk5vZGUsIFNw
ZWNOb25lLCBQaGFudG9tLCBjb2RlT3JpZ2luLCBub2RlKTsKICAgICB9CiAgICAgCiAgICAgdm9p
ZCBmaXhQb3NzaWJsZUdldExvY2FsKEJhc2ljQmxvY2sqIGJsb2NrLCBFZGdlJiBlZGdlLCBib29s
IGNoYW5nZVJlZikKICAgICB7Ci0gICAgICAgIE5vZGUmIGNoaWxkID0gbV9ncmFwaFtlZGdlXTsK
LSAgICAgICAgaWYgKGNoaWxkLm9wKCkgIT0gR2V0TG9jYWwpCisgICAgICAgIE5vZGUqIGNoaWxk
ID0gZWRnZS5ub2RlKCk7CisgICAgICAgIGlmIChjaGlsZC0+b3AoKSAhPSBHZXRMb2NhbCkKICAg
ICAgICAgICAgIHJldHVybjsKICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJP
U0UpCi0gICAgICAgIGRhdGFMb2dGKCIgICAgQ29uc2lkZXJpbmcgR2V0TG9jYWwgYXQgQCV1LCBs
b2NhbCByJWQuXG4iLCBlZGdlLmluZGV4KCksIGNoaWxkLmxvY2FsKCkpOworICAgICAgICBkYXRh
TG9nRigiICAgIENvbnNpZGVyaW5nIEdldExvY2FsIGF0IEAldSwgbG9jYWwgciVkLlxuIiwgbm9k
ZS0+aW5kZXgoKSwgY2hpbGQtPmxvY2FsKCkpOwogI2VuZGlmCi0gICAgICAgIGlmIChjaGlsZC52
YXJpYWJsZUFjY2Vzc0RhdGEoKS0+aXNDYXB0dXJlZCgpKSB7CisgICAgICAgIGlmIChjaGlsZC0+
dmFyaWFibGVBY2Nlc3NEYXRhKCktPmlzQ2FwdHVyZWQoKSkgewogI2lmIERGR19FTkFCTEUoREVC
VUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKICAgICAgICAgICAgIGRhdGFMb2dGKCIgICAgICAgIEl0
J3MgY2FwdHVyZWQuXG4iKTsKICNlbmRpZgogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9
Ci0gICAgICAgIE5vZGVJbmRleCBvcmlnaW5hbE5vZGVJbmRleCA9IGJsb2NrLT52YXJpYWJsZXNB
dFRhaWwub3BlcmFuZChjaGlsZC5sb2NhbCgpKTsKKyAgICAgICAgTm9kZSogb3JpZ2luYWxOb2Rl
ID0gYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKGNoaWxkLT5sb2NhbCgpKTsKICNpZiBE
RkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCi0gICAgICAgIGRhdGFMb2dGKCIg
ICAgICAgIERlYWxpbmcgd2l0aCBvcmlnaW5hbCBAJXUuXG4iLCBvcmlnaW5hbE5vZGVJbmRleCk7
CisgICAgICAgIGRhdGFMb2dGKCIgICAgICAgIERlYWxpbmcgd2l0aCBvcmlnaW5hbCBAJXUuXG4i
LCBvcmlnaW5hbE5vZGUtPmluZGV4KCkpOwogI2VuZGlmCi0gICAgICAgIEFTU0VSVChvcmlnaW5h
bE5vZGVJbmRleCAhPSBOb05vZGUpOwotICAgICAgICBOb2RlKiBvcmlnaW5hbE5vZGUgPSAmbV9n
cmFwaFtvcmlnaW5hbE5vZGVJbmRleF07CisgICAgICAgIEFTU0VSVChvcmlnaW5hbE5vZGVJbmRl
eCk7CiAjaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQogICAgICAgICBk
YXRhTG9nRigiICAgICAgICBPcmlnaW5hbCBoYXMgbG9jYWwgciVkLlxuIiwgb3JpZ2luYWxOb2Rl
LT5sb2NhbCgpKTsKICNlbmRpZgotICAgICAgICBBU1NFUlQoY2hpbGQubG9jYWwoKSA9PSBvcmln
aW5hbE5vZGUtPmxvY2FsKCkpOworICAgICAgICBBU1NFUlQoY2hpbGQtPmxvY2FsKCkgPT0gb3Jp
Z2luYWxOb2RlLT5sb2NhbCgpKTsKICAgICAgICAgLy8gUG9zc2liaWxpdGllczoKICAgICAgICAg
Ly8gU2V0TG9jYWwgLT4gdGhlIHNlY29uZEJsb2NrIGlzIGdldHRpbmcgdGhlIHZhbHVlIG9mIHNv
bWV0aGluZyB0aGF0IGlzIGltbWVkaWF0ZWx5CiAgICAgICAgIC8vICAgICBhdmFpbGFibGUgaW4g
dGhlIGZpcnN0IGJsb2NrIHdpdGggYSBrbm93biBOb2RlSW5kZXguCkBAIC0zMTIsMTAgKzMwOSw4
IEBAIHByaXZhdGU6CiAgICAgICAgIC8vIEZsdXNoIC0+IHRoZSBzZWNvbmRCbG9jayBpcyBhc2tp
bmcgZm9yIGtlZXAtYWxpdmUgb24gYW4gb3BlcmFuZCB0aGF0IHRoZSBmaXJzdAogICAgICAgICAv
LyAgICAgYmxvY2sgd2FzIGZvcmNpbmcgdG8gYmUgYWxpdmUsIHNvIHRoZSBzZWNvbmQgYmxvY2sg
c2hvdWxkIHJlZmVyIGNoaWxkIG9mCiAgICAgICAgIC8vICAgICB0aGUgZmx1c2guCi0gICAgICAg
IGlmIChvcmlnaW5hbE5vZGUtPm9wKCkgPT0gRmx1c2gpIHsKLSAgICAgICAgICAgIG9yaWdpbmFs
Tm9kZUluZGV4ID0gb3JpZ2luYWxOb2RlLT5jaGlsZDEoKS5pbmRleCgpOwotICAgICAgICAgICAg
b3JpZ2luYWxOb2RlID0gJm1fZ3JhcGhbb3JpZ2luYWxOb2RlSW5kZXhdOwotICAgICAgICB9Cisg
ICAgICAgIGlmIChvcmlnaW5hbE5vZGUtPm9wKCkgPT0gRmx1c2gpCisgICAgICAgICAgICBvcmln
aW5hbE5vZGUgPSBvcmlnaW5hbE5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKICAgICAgICAgc3dpdGNo
IChvcmlnaW5hbE5vZGUtPm9wKCkpIHsKICAgICAgICAgY2FzZSBTZXRMb2NhbDogewogICAgICAg
ICAgICAgaWYgKGNoYW5nZVJlZikKQEAgLTMyMyw3ICszMTgsNyBAQCBwcml2YXRlOgogI2lmIERG
R19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKICAgICAgICAgICAgIGRhdGFMb2dG
KCIgICAgICAgIEl0J3MgYSBTZXRMb2NhbC5cbiIpOwogI2VuZGlmCi0gICAgICAgICAgICBtX2dy
YXBoLmNoYW5nZUluZGV4KGVkZ2UsIG9yaWdpbmFsTm9kZS0+Y2hpbGQxKCkuaW5kZXgoKSwgY2hh
bmdlUmVmKTsKKyAgICAgICAgICAgIG1fZ3JhcGguY2hhbmdlQ2hpbGQoZWRnZSwgb3JpZ2luYWxO
b2RlLT5jaGlsZDEoKS5ub2RlKCksIGNoYW5nZVJlZik7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgfQogICAgICAgICBjYXNlIEdldExvY2FsOiB7CkBAIC0zMzEsNyArMzI2LDcgQEAgcHJp
dmF0ZToKICAgICAgICAgICAgIGRhdGFMb2dGKCIgICAgICAgIEl0J3MgYSBHZXRMb2NhbC5cbiIp
OwogI2VuZGlmCiAgICAgICAgICAgICBpZiAob3JpZ2luYWxOb2RlLT5zaG91bGRHZW5lcmF0ZSgp
KQotICAgICAgICAgICAgICAgIG1fZ3JhcGguY2hhbmdlSW5kZXgoZWRnZSwgb3JpZ2luYWxOb2Rl
SW5kZXgsIGNoYW5nZVJlZik7CisgICAgICAgICAgICAgICAgbV9ncmFwaC5jaGFuZ2VDaGlsZChl
ZGdlLCBvcmlnaW5hbE5vZGUsIGNoYW5nZVJlZik7CiAgICAgICAgICAgICAvLyBJZiB3ZSBoYXZl
IGEgR2V0TG9jYWwgdGhhdCBwb2ludHMgdG8gYSBjaGlsZCBHZXRMb2NhbCB0aGF0IGlzIGRlYWQs
IHRoZW4KICAgICAgICAgICAgIC8vIHdlIGhhdmUgbm8gbmVlZCB0byBkbyBhbnl0aGluZzogdGhp
cyBvcmlnaW5hbCBHZXRMb2NhbCBpcyBzdGlsbCB2YWxpZC4KICAgICAgICAgICAgIGJyZWFrOwpA
QCAtMzc1LDIzICszNzAsMjEgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgfQogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGRlc3RpbmF0aW9uQmxvY2stPnBo
aXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIE5vZGVJbmRleCBwaGlOb2RlSW5kZXggPSBk
ZXN0aW5hdGlvbkJsb2NrLT5waGlzW2ldOwotICAgICAgICAgICAgTm9kZSYgcGhpTm9kZSA9IG1f
Z3JhcGhbcGhpTm9kZUluZGV4XTsKLSAgICAgICAgICAgIE5vZGVJbmRleCBteU5vZGVJbmRleCA9
IHNvdXJjZUJsb2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZChwaGlOb2RlLmxvY2FsKCkpOwot
I2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKLSAgICAgICAgICAgIGRh
dGFMb2dGKCJDb25zaWRlcmluZyByZW1vdmluZyByZWZlcmVuY2UgZnJvbSBwaGkgQCV1IHRvIEAl
dSBvbiBsb2NhbCByJWQ6IiwKLSAgICAgICAgICAgICAgICAgICAgcGhpTm9kZUluZGV4LCBteU5v
ZGVJbmRleCwgcGhpTm9kZS5sb2NhbCgpKTsKLSNlbmRpZgotICAgICAgICAgICAgaWYgKG15Tm9k
ZUluZGV4ID09IE5vTm9kZSkgeworICAgICAgICAgICAgTm9kZSogcGhpTm9kZSA9IGRlc3RpbmF0
aW9uQmxvY2stPnBoaXNbaV07CisgICAgICAgICAgICBOb2RlKiBteU5vZGUgPSBzb3VyY2VCbG9j
ay0+dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQocGhpTm9kZS0+bG9jYWwoKSk7CisgICAgICAgICAg
ICBpZiAoIW15Tm9kZSkgewogICAgICAgICAgICAgICAgIC8vIFRoaXMgd2lsbCBoYXBwZW4gaWYg
dGhlcmUgaXMgYSBwaGkgaW4gdGhlIGRlc3RpbmF0aW9uIHRoYXQgcmVmZXJzIGludG8KICAgICAg
ICAgICAgICAgICAvLyB0aGUgZGVzdGluYXRpb24gaXRzZWxmLgogICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgTm9kZSYgbXlOb2RlID0gbV9ncmFw
aFtteU5vZGVJbmRleF07Ci0gICAgICAgICAgICBpZiAobXlOb2RlLm9wKCkgPT0gR2V0TG9jYWwp
Ci0gICAgICAgICAgICAgICAgbXlOb2RlSW5kZXggPSBteU5vZGUuY2hpbGQxKCkuaW5kZXgoKTsK
KyNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCisgICAgICAgICAgICBk
YXRhTG9nRigiQ29uc2lkZXJpbmcgcmVtb3ZpbmcgcmVmZXJlbmNlIGZyb20gcGhpIEAldSB0byBA
JXUgb24gbG9jYWwgciVkOiIsCisgICAgICAgICAgICAgICAgICAgICBwaGlOb2RlLT5pbmRleCgp
LCBteU5vZGUtPmluZGV4KCksIHBoaU5vZGUtPmxvY2FsKCkpOworI2VuZGlmCisgICAgICAgICAg
ICBpZiAobXlOb2RlLT5vcCgpID09IEdldExvY2FsKQorICAgICAgICAgICAgICAgIG15Tm9kZSA9
IG15Tm9kZS0+Y2hpbGQxKCkubm9kZSgpOwogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0g
MDsgaiA8IEFkamFjZW5jeUxpc3Q6OlNpemU7ICsraikKLSAgICAgICAgICAgICAgICByZW1vdmVQ
b3RlbnRpYWxseURlYWRQaGlSZWZlcmVuY2UobXlOb2RlSW5kZXgsIHBoaU5vZGUsIGosIHNvdXJj
ZUJsb2NrLT5pc1JlYWNoYWJsZSk7CisgICAgICAgICAgICAgICAgcmVtb3ZlUG90ZW50aWFsbHlE
ZWFkUGhpUmVmZXJlbmNlKG15Tm9kZSwgcGhpTm9kZSwgaiwgc291cmNlQmxvY2stPmlzUmVhY2hh
YmxlKTsKICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCiAgICAgICAg
ICAgICBkYXRhTG9nRigiXG4iKTsKICNlbmRpZgpAQCAtNDE2LDU4ICs0MDksNTcgQEAgcHJpdmF0
ZToKICAgICAgICAgZml4UGhpcyhibG9ja0luZGV4LCBqZXR0aXNvbmVkQmxvY2tJbmRleCk7CiAg
ICAgfQogICAgIAotICAgIHZvaWQgcmVtb3ZlUG90ZW50aWFsbHlEZWFkUGhpUmVmZXJlbmNlKE5v
ZGVJbmRleCBteU5vZGVJbmRleCwgTm9kZSYgcGhpTm9kZSwgdW5zaWduZWQgZWRnZUluZGV4LCBi
b29sIGNoYW5nZVJlZikKKyAgICB2b2lkIHJlbW92ZVBvdGVudGlhbGx5RGVhZFBoaVJlZmVyZW5j
ZShOb2RlKiBteU5vZGUsIE5vZGUqIHBoaU5vZGUsIHVuc2lnbmVkIGVkZ2VJbmRleCwgYm9vbCBj
aGFuZ2VSZWYpCiAgICAgewotICAgICAgICBpZiAocGhpTm9kZS5jaGlsZHJlbi5jaGlsZChlZGdl
SW5kZXgpLmluZGV4VW5jaGVja2VkKCkgIT0gbXlOb2RlSW5kZXgpCisgICAgICAgIGlmIChwaGlO
b2RlLT5jaGlsZHJlbi5jaGlsZChlZGdlSW5kZXgpLm5vZGUoKSAhPSBteU5vZGUpCiAgICAgICAg
ICAgICByZXR1cm47CiAjaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQog
ICAgICAgICBkYXRhTG9nRigiIFJlbW92aW5nIHJlZmVyZW5jZSBhdCBjaGlsZCAldS4iLCBlZGdl
SW5kZXgpOwogI2VuZGlmCi0gICAgICAgIGlmIChjaGFuZ2VSZWYgJiYgcGhpTm9kZS5zaG91bGRH
ZW5lcmF0ZSgpKQotICAgICAgICAgICAgbV9ncmFwaC5kZXJlZihteU5vZGVJbmRleCk7Ci0gICAg
ICAgIHBoaU5vZGUuY2hpbGRyZW4ucmVtb3ZlRWRnZUZyb21CYWcoZWRnZUluZGV4KTsKKyAgICAg
ICAgaWYgKGNoYW5nZVJlZiAmJiBwaGlOb2RlLT5zaG91bGRHZW5lcmF0ZSgpKQorICAgICAgICAg
ICAgbV9ncmFwaC5kZXJlZihteU5vZGUpOworICAgICAgICBwaGlOb2RlLT5jaGlsZHJlbi5yZW1v
dmVFZGdlRnJvbUJhZyhlZGdlSW5kZXgpOwogICAgIH0KICAgICAKICAgICBzdHJ1Y3QgT3BlcmFu
ZFN1YnN0aXR1dGlvbiB7CiAgICAgICAgIE9wZXJhbmRTdWJzdGl0dXRpb24oKQotICAgICAgICAg
ICAgOiBvbGRDaGlsZChOb05vZGUpCi0gICAgICAgICAgICAsIG5ld0NoaWxkKE5vTm9kZSkKKyAg
ICAgICAgICAgIDogb2xkQ2hpbGQoMCkKKyAgICAgICAgICAgICwgbmV3Q2hpbGQoMCkKICAgICAg
ICAgewogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBleHBsaWNpdCBPcGVyYW5kU3Vic3Rp
dHV0aW9uKE5vZGVJbmRleCBvbGRDaGlsZCkKKyAgICAgICAgZXhwbGljaXQgT3BlcmFuZFN1YnN0
aXR1dGlvbihOb2RlKiBvbGRDaGlsZCkKICAgICAgICAgICAgIDogb2xkQ2hpbGQob2xkQ2hpbGQp
CiAgICAgICAgICAgICAsIG5ld0NoaWxkKG9sZENoaWxkKQogICAgICAgICB7CiAgICAgICAgIH0K
ICAgICAgICAgCi0gICAgICAgIE9wZXJhbmRTdWJzdGl0dXRpb24oTm9kZUluZGV4IG9sZENoaWxk
LCBOb2RlSW5kZXggbmV3Q2hpbGQpCisgICAgICAgIE9wZXJhbmRTdWJzdGl0dXRpb24oTm9kZSog
b2xkQ2hpbGQsIE5vZGUqIG5ld0NoaWxkKQogICAgICAgICAgICAgOiBvbGRDaGlsZChvbGRDaGls
ZCkKICAgICAgICAgICAgICwgbmV3Q2hpbGQobmV3Q2hpbGQpCiAgICAgICAgIHsKLSAgICAgICAg
ICAgIEFTU0VSVCgob2xkQ2hpbGQgPT0gTm9Ob2RlKSA9PSAobmV3Q2hpbGQgPT0gTm9Ob2RlKSk7
CisgICAgICAgICAgICBBU1NFUlQoKCFvbGRDaGlsZCkgPT0gKCFuZXdDaGlsZCkpOwogICAgICAg
ICB9CiAgICAgICAgIAotICAgICAgICB2b2lkIGR1bXAoRklMRSogb3V0KQorICAgICAgICB2b2lk
IGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKICAgICAgICAgewotICAgICAgICAgICAgaWYg
KG9sZENoaWxkID09IE5vTm9kZSkKLSAgICAgICAgICAgICAgICBmcHJpbnRmKG91dCwgIi0iKTsK
KyAgICAgICAgICAgIGlmICghb2xkQ2hpbGQpCisgICAgICAgICAgICAgICAgb3V0LnByaW50Zihv
dXQsICItIik7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZnByaW50ZihvdXQs
ICJAJXUgLT4gQCV1Iiwgb2xkQ2hpbGQsIG5ld0NoaWxkKTsKKyAgICAgICAgICAgICAgICBvdXQu
cHJpbnRmKG91dCwgIkAldSAtPiBAJXUiLCBvbGRDaGlsZC0+aW5kZXgoKSwgbmV3Q2hpbGQtPmlu
ZGV4KCkpOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBOb2RlSW5kZXggb2xkQ2hpbGQ7
Ci0gICAgICAgIE5vZGVJbmRleCBuZXdDaGlsZDsKKyAgICAgICAgTm9kZSogb2xkQ2hpbGQ7Cisg
ICAgICAgIE5vZGUqIG5ld0NoaWxkOwogICAgIH07CiAgICAgCi0gICAgTm9kZUluZGV4IHNraXBH
ZXRMb2NhbChOb2RlSW5kZXggbm9kZUluZGV4KQorICAgIE5vZGUqIHNraXBHZXRMb2NhbChOb2Rl
KiBub2RlKQogICAgIHsKLSAgICAgICAgaWYgKG5vZGVJbmRleCA9PSBOb05vZGUpCi0gICAgICAg
ICAgICByZXR1cm4gTm9Ob2RlOwotICAgICAgICBOb2RlJiBub2RlID0gbV9ncmFwaFtub2RlSW5k
ZXhdOwotICAgICAgICBpZiAobm9kZS5vcCgpID09IEdldExvY2FsKQotICAgICAgICAgICAgcmV0
dXJuIG5vZGUuY2hpbGQxKCkuaW5kZXgoKTsKLSAgICAgICAgcmV0dXJuIG5vZGVJbmRleDsKKyAg
ICAgICAgaWYgKCFub2RlKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIGlmIChub2Rl
LT5vcCgpID09IEdldExvY2FsKQorICAgICAgICAgICAgcmV0dXJuIG5vZGUtPmNoaWxkMSgpLm5v
ZGUoKTsKKyAgICAgICAgcmV0dXJuIG5vZGU7CiAgICAgfQogICAgIAogICAgIHZvaWQgcmVjb3Jk
UG9zc2libGVJbmNvbWluZ1JlZmVyZW5jZSgKQEAgLTQ3NywzMCArNDY5LDI4IEBAIHByaXZhdGU6
CiAgICAgICAgICAgICBza2lwR2V0TG9jYWwoc2Vjb25kQmxvY2stPnZhcmlhYmxlc0F0VGFpbC5v
cGVyYW5kKG9wZXJhbmQpKSk7CiAgICAgfQogICAgIAotICAgIHZvaWQgcmVjb3JkTmV3VGFyZ2V0
KE9wZXJhbmRzPE9wZXJhbmRTdWJzdGl0dXRpb24+JiBzdWJzdGl0dXRpb25zLCBpbnQgb3BlcmFu
ZCwgTm9kZUluZGV4IG5vZGVJbmRleCkKKyAgICB2b2lkIHJlY29yZE5ld1RhcmdldChPcGVyYW5k
czxPcGVyYW5kU3Vic3RpdHV0aW9uPiYgc3Vic3RpdHV0aW9ucywgaW50IG9wZXJhbmQsIE5vZGVJ
bmRleCBOb2RlKiBub2RlKQogICAgIHsKLSAgICAgICAgQVNTRVJUKG1fZ3JhcGhbbm9kZUluZGV4
XS5vcCgpID09IFNldExvY2FsCi0gICAgICAgICAgICAgICB8fCBtX2dyYXBoW25vZGVJbmRleF0u
b3AoKSA9PSBTZXRBcmd1bWVudAotICAgICAgICAgICAgICAgfHwgbV9ncmFwaFtub2RlSW5kZXhd
Lm9wKCkgPT0gRmx1c2gKLSAgICAgICAgICAgICAgIHx8IG1fZ3JhcGhbbm9kZUluZGV4XS5vcCgp
ID09IFBoaSk7Ci0gICAgICAgIHN1YnN0aXR1dGlvbnMub3BlcmFuZChvcGVyYW5kKS5uZXdDaGls
ZCA9IG5vZGVJbmRleDsKKyAgICAgICAgQVNTRVJUKG5vZGUtPm9wKCkgPT0gU2V0TG9jYWwKKyAg
ICAgICAgICAgICAgIHx8IG5vZGUtPm9wKCkgPT0gU2V0QXJndW1lbnQKKyAgICAgICAgICAgICAg
IHx8IG5vZGUtPm9wKCkgPT0gRmx1c2gKKyAgICAgICAgICAgICAgIHx8IG5vZGUtPm9wKCkgPT0g
UGhpKTsKKyAgICAgICAgc3Vic3RpdHV0aW9ucy5vcGVyYW5kKG9wZXJhbmQpLm5ld0NoaWxkID0g
bm9kZTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBmaXhUYWlsT3BlcmFuZCgKICAgICAgICAgQmFz
aWNCbG9jayogZmlyc3RCbG9jaywgQmFzaWNCbG9jayogc2Vjb25kQmxvY2ssIGludCBvcGVyYW5k
LAogICAgICAgICBPcGVyYW5kczxPcGVyYW5kU3Vic3RpdHV0aW9uPiYgc3Vic3RpdHV0aW9ucykK
ICAgICB7Ci0gICAgICAgIE5vZGVJbmRleCBhdFNlY29uZFRhaWwgPSBzZWNvbmRCbG9jay0+dmFy
aWFibGVzQXRUYWlsLm9wZXJhbmQob3BlcmFuZCk7CisgICAgICAgIE5vZGUqIGF0U2Vjb25kVGFp
bCA9IHNlY29uZEJsb2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZChvcGVyYW5kKTsKICAgICAg
ICAgCi0gICAgICAgIGlmIChhdFNlY29uZFRhaWwgPT0gTm9Ob2RlKSB7CisgICAgICAgIGlmICgh
YXRTZWNvbmRUYWlsKSB7CiAgICAgICAgICAgICAvLyBJZiB0aGUgdmFyaWFibGUgaXMgZGVhZCBh
dCB0aGUgZW5kIG9mIHRoZSBzZWNvbmQgYmxvY2ssIHRoZW4gZG8gbm90aGluZzsgZXNzZW50aWFs
bHkKICAgICAgICAgICAgIC8vIHRoaXMgbWVhbnMgdGhhdCB3ZSB3YW50IHRoZSB0YWlsIHN0YXRl
IHRvIHJlZmxlY3Qgd2hhdGV2ZXIgdGhlIGZpcnN0IGJsb2NrIGRpZC4KICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgfQogCi0gICAgICAgIE5vZGUmIHNlY29uZE5vZGUgPSBtX2dyYXBoW2F0
U2Vjb25kVGFpbF07Ci0gICAgICAgIAotICAgICAgICBzd2l0Y2ggKHNlY29uZE5vZGUub3AoKSkg
eworICAgICAgICBzd2l0Y2ggKGF0U2Vjb25kVGFpbC0+b3AoKSkgewogICAgICAgICBjYXNlIFNl
dExvY2FsOgogICAgICAgICBjYXNlIEZsdXNoOiB7CiAgICAgICAgICAgICAvLyBUaGUgc2Vjb25k
IGJsb2NrIGRpZCBpbnRlcmVzdGluZyB0aGluZ3MgdG8gdGhlIHZhcmlhYmxlcywgc28gdXBkYXRl
IHRoZSB0YWlsCkBAIC01MTEsNyArNTAxLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIAogICAg
ICAgICBjYXNlIFBoaTogewogICAgICAgICAgICAgLy8gS2VlcCB3aGF0IHdhcyBpbiB0aGUgZmly
c3QgYmxvY2suCi0gICAgICAgICAgICBBU1NFUlQoZmlyc3RCbG9jay0+dmFyaWFibGVzQXRUYWls
Lm9wZXJhbmQob3BlcmFuZCkgIT0gTm9Ob2RlKTsKKyAgICAgICAgICAgIEFTU0VSVChmaXJzdEJs
b2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZChvcGVyYW5kKSk7CiAgICAgICAgICAgICByZWNv
cmROZXdUYXJnZXQoc3Vic3RpdHV0aW9ucywgb3BlcmFuZCwgc2tpcEdldExvY2FsKGZpcnN0Qmxv
Y2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKG9wZXJhbmQpKSk7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgfQpAQCAtNTIwLDI4ICs1MTAsMjggQEAgcHJpdmF0ZToKICAgICAgICAgICAg
IC8vIElmIGl0J3MgYSBHZXRMb2NhbCBvbiBhIGNhcHR1cmVkIHZhciwgdGhlbiBkZWZpbml0ZWx5
IGtlZXAgd2hhdCB3YXMKICAgICAgICAgICAgIC8vIGluIHRoZSBzZWNvbmQgYmxvY2suIEluIHBh
cnRpY3VsYXIsIGl0J3MgcG9zc2libGUgdGhhdCB0aGUgZmlyc3QKICAgICAgICAgICAgIC8vIGJs
b2NrIGRvZXNuJ3QgZXZlbiBrbm93IGFib3V0IHRoaXMgdmFyaWFibGUuCi0gICAgICAgICAgICBp
ZiAoc2Vjb25kTm9kZS52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+aXNDYXB0dXJlZCgpKSB7CisgICAg
ICAgICAgICBpZiAoYXRTZWNvbmRUYWlsLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+aXNDYXB0dXJl
ZCgpKSB7CiAgICAgICAgICAgICAgICAgZmlyc3RCbG9jay0+dmFyaWFibGVzQXRUYWlsLm9wZXJh
bmQob3BlcmFuZCkgPSBhdFNlY29uZFRhaWw7Ci0gICAgICAgICAgICAgICAgcmVjb3JkTmV3VGFy
Z2V0KHN1YnN0aXR1dGlvbnMsIG9wZXJhbmQsIHNlY29uZE5vZGUuY2hpbGQxKCkuaW5kZXgoKSk7
CisgICAgICAgICAgICAgICAgcmVjb3JkTmV3VGFyZ2V0KHN1YnN0aXR1dGlvbnMsIG9wZXJhbmQs
IGF0U2Vjb25kVGFpbC0+Y2hpbGQxKCkuaW5kZXgoKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgICAgIC8vIEl0J3MgcG9zc2li
bGUgdGhhdCB0aGUgc2Vjb25kIGJsb2NrIGhhZCBhIEdldExvY2FsIGFuZCB0aGUgZmlyc3QgYmxv
Y2sKICAgICAgICAgICAgIC8vIGhhZCBhIFNldEFyZ3VtZW50IG9yIGEgUGhpLiBUaGVuIHVwZGF0
ZSB0aGUgdGFpbC4gT3RoZXJ3aXNlIGtlZXAgd2hhdCB3YXMgaW4gdGhlCiAgICAgICAgICAgICAv
LyBmaXJzdCBibG9jay4KLSAgICAgICAgICAgIE5vZGVJbmRleCBhdEZpcnN0VGFpbCA9IGZpcnN0
QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKG9wZXJhbmQpOwotICAgICAgICAgICAgQVNT
RVJUKGF0Rmlyc3RUYWlsICE9IE5vTm9kZSk7Ci0gICAgICAgICAgICBzd2l0Y2ggKG1fZ3JhcGhb
YXRGaXJzdFRhaWxdLm9wKCkpIHsKKyAgICAgICAgICAgIE5vZGUqIGF0Rmlyc3RUYWlsID0gZmly
c3RCbG9jay0+dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQob3BlcmFuZCk7CisgICAgICAgICAgICBB
U1NFUlQoYXRGaXJzdFRhaWwpOworICAgICAgICAgICAgc3dpdGNoIChhdEZpcnN0VGFpbC0+b3Ao
KSkgewogICAgICAgICAgICAgY2FzZSBTZXRBcmd1bWVudDoKICAgICAgICAgICAgIGNhc2UgUGhp
OgogICAgICAgICAgICAgICAgIGZpcnN0QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKG9w
ZXJhbmQpID0gYXRTZWNvbmRUYWlsOwotICAgICAgICAgICAgICAgIHJlY29yZE5ld1RhcmdldChz
dWJzdGl0dXRpb25zLCBvcGVyYW5kLCBzZWNvbmROb2RlLmNoaWxkMSgpLmluZGV4KCkpOworICAg
ICAgICAgICAgICAgIHJlY29yZE5ld1RhcmdldChzdWJzdGl0dXRpb25zLCBvcGVyYW5kLCBhdFNl
Y29uZFRhaWwtPmNoaWxkMSgpLmluZGV4KCkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogCiAg
ICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgIC8vIEtlZXAgd2hhdCB3YXMgaW4g
dGhlIGZpcnN0IGJsb2NrLCBhbmQgYWRqdXN0IHRoZSBzdWJzdGl0dXRpb24gdG8gYWNjb3VudCBm
b3IKICAgICAgICAgICAgICAgICAvLyB0aGUgZmFjdCB0aGF0IHN1Y2Nlc3NvcnMgd2lsbCByZWZl
ciB0byB0aGUgY2hpbGQgb2YgdGhlIEdldExvY2FsLgotICAgICAgICAgICAgICAgIEFTU0VSVChm
aXJzdEJsb2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZChvcGVyYW5kKSAhPSBOb05vZGUpOwor
ICAgICAgICAgICAgICAgIEFTU0VSVChmaXJzdEJsb2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFu
ZChvcGVyYW5kKSk7CiAgICAgICAgICAgICAgICAgcmVjb3JkTmV3VGFyZ2V0KHN1YnN0aXR1dGlv
bnMsIG9wZXJhbmQsIHNraXBHZXRMb2NhbChmaXJzdEJsb2NrLT52YXJpYWJsZXNBdFRhaWwub3Bl
cmFuZChvcGVyYW5kKSkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQpA
QCAtNTY3LDEwICs1NTcsMTAgQEAgcHJpdmF0ZToKICAgICAgICAgCiAgICAgICAgIC8vIFJlbW92
ZSB0aGUgdGVybWluYWwgb2YgZmlyc3RCbG9jayBzaW5jZSB3ZSBkb24ndCBuZWVkIGl0IGFueW1v
cmUuIFdlbGwsIHdlIGRvbid0CiAgICAgICAgIC8vIHJlYWxseSByZW1vdmUgaXQ7IHdlIGFjdHVh
bGx5IHR1cm4gaXQgaW50byBhIFBoYW50b20uCi0gICAgICAgIEFTU0VSVChtX2dyYXBoW2ZpcnN0
QmxvY2stPmxhc3QoKV0uaXNUZXJtaW5hbCgpKTsKLSAgICAgICAgQ29kZU9yaWdpbiBib3VuZGFy
eUNvZGVPcmlnaW4gPSBtX2dyYXBoW2ZpcnN0QmxvY2stPmxhc3QoKV0uY29kZU9yaWdpbjsKLSAg
ICAgICAgbV9ncmFwaFtmaXJzdEJsb2NrLT5sYXN0KCldLnNldE9wQW5kRGVmYXVsdEZsYWdzKFBo
YW50b20pOwotICAgICAgICBBU1NFUlQobV9ncmFwaFtmaXJzdEJsb2NrLT5sYXN0KCldLnJlZkNv
dW50KCkgPT0gMSk7CisgICAgICAgIEFTU0VSVChmaXJzdEJsb2NrLT5sYXN0KCktPmlzVGVybWlu
YWwoKSk7CisgICAgICAgIENvZGVPcmlnaW4gYm91bmRhcnlDb2RlT3JpZ2luID0gZmlyc3RCbG9j
ay0+bGFzdCgpLT5jb2RlT3JpZ2luOworICAgICAgICBmaXJzdEJsb2NrLT5sYXN0KCktPnNldE9w
QW5kRGVmYXVsdEZsYWdzKFBoYW50b20pOworICAgICAgICBBU1NFUlQoZmlyc3RCbG9jay0+bGFz
dCgpLT5yZWZDb3VudCgpID09IDEpOwogICAgICAgICAKICAgICAgICAgaWYgKGpldHRpc29uZWRC
bG9ja0luZGV4ICE9IE5vQmxvY2spIHsKICAgICAgICAgICAgIEJhc2ljQmxvY2sqIGpldHRpc29u
ZWRCbG9jayA9IG1fZ3JhcGgubV9ibG9ja3NbamV0dGlzb25lZEJsb2NrSW5kZXhdLmdldCgpOwpA
QCAtNTk5LDI4ICs1ODksMjUgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHJlY29yZFBvc3NpYmxl
SW5jb21pbmdSZWZlcmVuY2Uoc2Vjb25kQmxvY2ssIHN1YnN0aXR1dGlvbnMsIGkpOwogCiAgICAg
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2Vjb25kQmxvY2stPnNpemUoKTsgKytpKSB7Ci0g
ICAgICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4ID0gc2Vjb25kQmxvY2stPmF0KGkpOwotICAg
ICAgICAgICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhbbm9kZUluZGV4XTsKKyAgICAgICAgICAgIE5v
ZGUqIG5vZGUgPSBzZWNvbmRCbG9jay0+YXQoaSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAg
IGJvb2wgY2hpbGRyZW5BbHJlYWR5Rml4ZWQgPSBmYWxzZTsKICAgICAgICAgICAgIAotICAgICAg
ICAgICAgc3dpdGNoIChub2RlLm9wKCkpIHsKKyAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3Ao
KSkgewogICAgICAgICAgICAgY2FzZSBQaGFudG9tOiB7Ci0gICAgICAgICAgICAgICAgaWYgKCFu
b2RlLmNoaWxkMSgpKQorICAgICAgICAgICAgICAgIGlmICghbm9kZS0+Y2hpbGQxKCkpCiAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAg
IEFTU0VSVChub2RlLnNob3VsZEdlbmVyYXRlKCkpOwotICAgICAgICAgICAgICAgIE5vZGUmIHBv
c3NpYmxlTG9jYWxPcCA9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV07Ci0gICAgICAgICAgICAgICAg
aWYgKHBvc3NpYmxlTG9jYWxPcC5vcCgpICE9IEdldExvY2FsCi0gICAgICAgICAgICAgICAgICAg
ICYmIHBvc3NpYmxlTG9jYWxPcC5oYXNMb2NhbCgpCi0gICAgICAgICAgICAgICAgICAgICYmICFw
b3NzaWJsZUxvY2FsT3AudmFyaWFibGVBY2Nlc3NEYXRhKCktPmlzQ2FwdHVyZWQoKSkgewotICAg
ICAgICAgICAgICAgICAgICBOb2RlSW5kZXggc2V0TG9jYWxJbmRleCA9Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBmaXJzdEJsb2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZChwb3NzaWJsZUxv
Y2FsT3AubG9jYWwoKSk7Ci0gICAgICAgICAgICAgICAgICAgIE5vZGUmIHNldExvY2FsID0gbV9n
cmFwaFtzZXRMb2NhbEluZGV4XTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHNldExvY2FsLm9w
KCkgPT0gU2V0TG9jYWwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguY2hhbmdl
RWRnZShub2RlLmNoaWxkcmVuLmNoaWxkMSgpLCBzZXRMb2NhbC5jaGlsZDEoKSk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBBU1NFUlQoIW5vZGUuY2hpbGQyKCkpOwotICAgICAgICAgICAgICAg
ICAgICAgICAgQVNTRVJUKCFub2RlLmNoaWxkMygpKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQo
bm9kZS0+c2hvdWxkR2VuZXJhdGUoKSk7CisgICAgICAgICAgICAgICAgTm9kZSogcG9zc2libGVM
b2NhbE9wID0gbm9kZS0+Y2hpbGQxKCkubm9kZSgpOworICAgICAgICAgICAgICAgIGlmIChwb3Nz
aWJsZUxvY2FsT3AtPm9wKCkgIT0gR2V0TG9jYWwKKyAgICAgICAgICAgICAgICAgICAgJiYgcG9z
c2libGVMb2NhbE9wLT5oYXNMb2NhbCgpCisgICAgICAgICAgICAgICAgICAgICYmICFwb3NzaWJs
ZUxvY2FsT3AtPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5pc0NhcHR1cmVkKCkpIHsKKyAgICAgICAg
ICAgICAgICAgICAgTm9kZSogc2V0TG9jYWwgPSBmaXJzdEJsb2NrLT52YXJpYWJsZXNBdFRhaWwu
b3BlcmFuZChwb3NzaWJsZUxvY2FsT3AtPmxvY2FsKCkpOworICAgICAgICAgICAgICAgICAgICBp
ZiAoc2V0TG9jYWwtPm9wKCkgPT0gU2V0TG9jYWwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IG1fZ3JhcGguY2hhbmdlRWRnZShub2RlLT5jaGlsZHJlbi5jaGlsZDEoKSwgc2V0TG9jYWwtPmNo
aWxkMSgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVCghbm9kZS0+Y2hpbGQyKCkp
OworICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKCFub2RlLT5jaGlsZDMoKSk7CiAgICAg
ICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbkFscmVhZHlGaXhlZCA9IHRydWU7CiAgICAgICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CkBAIC02MzcsMTEgKzYyNCwxMSBAQCBw
cml2YXRlOgogICAgICAgICAgICAgICAgIC8vIFNpbWlsYXJseSBmb3IgR2V0TG9jYWw7IGl0IGNv
dWxkIHVzZSBhbnkgb2YgdGhvc2UgZXhjZXB0IGZvcgogICAgICAgICAgICAgICAgIC8vIEdldExv
Y2FsLiBJZiBpdCB1c2VzIGEgUGhpIHRoZW4gaXQgc2hvdWxkIGJlIHJlZGlyZWN0ZWQgdG8gdXNl
IGEKICAgICAgICAgICAgICAgICAvLyBQaGkgZnJvbSB0aGUgdGFpbCBvcGVyYW5kLgotICAgICAg
ICAgICAgICAgIGlmIChtX2dyYXBoW25vZGUuY2hpbGQxKCldLm9wKCkgIT0gUGhpKQorICAgICAg
ICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS0+b3AoKSAhPSBQaGkpCiAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIE5vZGVJbmRl
eCBhdEZpcnN0SW5kZXggPSBmaXJzdEJsb2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZChub2Rl
LmxvY2FsKCkpOwotICAgICAgICAgICAgICAgIG1fZ3JhcGguY2hhbmdlRWRnZShub2RlLmNoaWxk
cmVuLmNoaWxkMSgpLCBFZGdlKHNraXBHZXRMb2NhbChhdEZpcnN0SW5kZXgpKSwgbm9kZS5zaG91
bGRHZW5lcmF0ZSgpKTsKKyAgICAgICAgICAgICAgICBOb2RlKiBhdEZpcnN0ID0gZmlyc3RCbG9j
ay0+dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQobm9kZS0+bG9jYWwoKSk7CisgICAgICAgICAgICAg
ICAgbV9ncmFwaC5jaGFuZ2VFZGdlKG5vZGUtPmNoaWxkcmVuLmNoaWxkMSgpLCBFZGdlKHNraXBH
ZXRMb2NhbChhdEZpcnN0KSksIG5vZGUtPnNob3VsZEdlbmVyYXRlKCkpOwogICAgICAgICAgICAg
ICAgIGNoaWxkcmVuQWxyZWFkeUZpeGVkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgIH0KQEAgLTY1MSwzMCArNjM4LDMwIEBAIHByaXZhdGU6CiAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlmICghY2hpbGRyZW5BbHJlYWR5Rml4ZWQp
IHsKLSAgICAgICAgICAgICAgICBib29sIGNoYW5nZVJlZiA9IG5vZGUuc2hvdWxkR2VuZXJhdGUo
KTsKKyAgICAgICAgICAgICAgICBib29sIGNoYW5nZVJlZiA9IG5vZGUtPnNob3VsZEdlbmVyYXRl
KCk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAvLyBJZiB0aGUgY2hpbGQgaXMgYSBH
ZXRMb2NhbCwgdGhlbiB3ZSBtaWdodCBsaWtlIHRvIGZpeCBpdC4KLSAgICAgICAgICAgICAgICBp
ZiAobm9kZS5mbGFncygpICYgTm9kZUhhc1ZhckFyZ3MpIHsKLSAgICAgICAgICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBjaGlsZElkeCA9IG5vZGUuZmlyc3RDaGlsZCgpOwotICAgICAgICAgICAg
ICAgICAgICAgICAgIGNoaWxkSWR4IDwgbm9kZS5maXJzdENoaWxkKCkgKyBub2RlLm51bUNoaWxk
cmVuKCk7CisgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmZsYWdzKCkgJiBOb2RlSGFzVmFyQXJn
cykgeworICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGNoaWxkSWR4ID0gbm9kZS0+
Zmlyc3RDaGlsZCgpOworICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkSWR4IDwgbm9kZS0+
Zmlyc3RDaGlsZCgpICsgbm9kZS0+bnVtQ2hpbGRyZW4oKTsKICAgICAgICAgICAgICAgICAgICAg
ICAgICArK2NoaWxkSWR4KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoISFtX2dyYXBo
Lm1fdmFyQXJnQ2hpbGRyZW5bY2hpbGRJZHhdKQogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGZpeFBvc3NpYmxlR2V0TG9jYWwoZmlyc3RCbG9jaywgbV9ncmFwaC5tX3ZhckFyZ0NoaWxkcmVu
W2NoaWxkSWR4XSwgY2hhbmdlUmVmKTsKICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgIH0gZWxzZSBpZiAoISFub2RlLmNoaWxkMSgpKSB7Ci0gICAgICAgICAgICAgICAgICAg
IGZpeFBvc3NpYmxlR2V0TG9jYWwoZmlyc3RCbG9jaywgbm9kZS5jaGlsZHJlbi5jaGlsZDEoKSwg
Y2hhbmdlUmVmKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCEhbm9kZS5jaGlsZDIoKSkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgZml4UG9zc2libGVHZXRMb2NhbChmaXJzdEJsb2NrLCBu
b2RlLmNoaWxkcmVuLmNoaWxkMigpLCBjaGFuZ2VSZWYpOwotICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKCEhbm9kZS5jaGlsZDMoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXhQ
b3NzaWJsZUdldExvY2FsKGZpcnN0QmxvY2ssIG5vZGUuY2hpbGRyZW4uY2hpbGQzKCksIGNoYW5n
ZVJlZik7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmICghIW5vZGUtPmNoaWxkMSgpKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGZpeFBvc3NpYmxlR2V0TG9jYWwoZmlyc3RCbG9jaywgbm9kZS0+
Y2hpbGRyZW4uY2hpbGQxKCksIGNoYW5nZVJlZik7CisgICAgICAgICAgICAgICAgICAgIGlmICgh
IW5vZGUtPmNoaWxkMigpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBmaXhQb3NzaWJsZUdl
dExvY2FsKGZpcnN0QmxvY2ssIG5vZGUtPmNoaWxkcmVuLmNoaWxkMigpLCBjaGFuZ2VSZWYpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEhbm9kZS0+Y2hpbGQzKCkpCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZml4UG9zc2libGVHZXRMb2NhbChmaXJzdEJsb2NrLCBub2RlLT5j
aGlsZHJlbi5jaGlsZDMoKSwgY2hhbmdlUmVmKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgZmlyc3RCbG9jay0+
YXBwZW5kKG5vZGVJbmRleCk7CisgICAgICAgICAgICBmaXJzdEJsb2NrLT5hcHBlbmQobm9kZSk7
CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIEFTU0VSVChtX2dyYXBoW2ZpcnN0QmxvY2st
Pmxhc3QoKV0uaXNUZXJtaW5hbCgpKTsKKyAgICAgICAgQVNTRVJUKGZpcnN0QmxvY2stPmxhc3Qo
KS0+aXNUZXJtaW5hbCgpKTsKICAgICAgICAgCiAgICAgICAgIC8vIEZpeCB0aGUgcHJlZGVjZXNz
b3JzIG9mIG15IG5ldyBzdWNjZXNzb3JzLiBUaGlzIGlzIHRyaWNreSwgc2luY2Ugd2UgYXJlIGdv
aW5nIHRvIHJlc2V0CiAgICAgICAgIC8vIGFsbCBwcmVkZWNlc3NvcnMgYW55d2F5IGR1ZSB0byBy
ZWFjaGFiaWxpdHkgYW5hbHlzaXMuIEJ1dCB3ZSBuZWVkIHRvIGZpeCB0aGUKQEAgLTcwNCwyNiAr
NjkxLDI0IEBAIHByaXZhdGU6CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1fZ3JhcGgubnVt
U3VjY2Vzc29ycyhmaXJzdEJsb2NrKTsgaS0tOykgewogICAgICAgICAgICAgQmFzaWNCbG9jayog
c3VjY2Vzc29yID0gbV9ncmFwaC5tX2Jsb2Nrc1ttX2dyYXBoLnN1Y2Nlc3NvcihmaXJzdEJsb2Nr
LCBpKV0uZ2V0KCk7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSAwOyBqIDwgc3VjY2Vz
c29yLT5waGlzLnNpemUoKTsgKytqKSB7Ci0gICAgICAgICAgICAgICAgTm9kZUluZGV4IHBoaU5v
ZGVJbmRleCA9IHN1Y2Nlc3Nvci0+cGhpc1tqXTsKLSAgICAgICAgICAgICAgICBOb2RlJiBwaGlO
b2RlID0gbV9ncmFwaFtwaGlOb2RlSW5kZXhdOwotICAgICAgICAgICAgICAgIGJvb2wgY2hhbmdl
UmVmID0gcGhpTm9kZS5zaG91bGRHZW5lcmF0ZSgpOwotICAgICAgICAgICAgICAgIE9wZXJhbmRT
dWJzdGl0dXRpb24gc3Vic3RpdHV0aW9uID0gc3Vic3RpdHV0aW9ucy5vcGVyYW5kKHBoaU5vZGUu
bG9jYWwoKSk7CisgICAgICAgICAgICAgICAgTm9kZSogcGhpTm9kZSA9IHN1Y2Nlc3Nvci0+cGhp
c1tqXTsKKyAgICAgICAgICAgICAgICBib29sIGNoYW5nZVJlZiA9IHBoaU5vZGUtPnNob3VsZEdl
bmVyYXRlKCk7CisgICAgICAgICAgICAgICAgT3BlcmFuZFN1YnN0aXR1dGlvbiBzdWJzdGl0dXRp
b24gPSBzdWJzdGl0dXRpb25zLm9wZXJhbmQocGhpTm9kZS0+bG9jYWwoKSk7CiAjaWYgREZHX0VO
QUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQotICAgICAgICAgICAgICAgIGRhdGFMb2dG
KCIgICAgUGVyZm9ybWluZyBvcGVyYW5kIHN1YnN0aXR1dGlvbiBAJXUgLT4gQCV1LlxuIiwKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHN1YnN0aXR1dGlvbi5vbGRDaGlsZCwgc3Vic3RpdHV0aW9u
Lm5ld0NoaWxkKTsKKyAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgUGVyZm9ybWluZyBvcGVy
YW5kIHN1YnN0aXR1dGlvbiAiLCBzdWJzdGl0dXRpb24sICIuXG4iKTsKICNlbmRpZgotICAgICAg
ICAgICAgICAgIGlmICghcGhpTm9kZS5jaGlsZDEoKSkKKyAgICAgICAgICAgICAgICBpZiAoIXBo
aU5vZGUtPmNoaWxkMSgpKQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAg
ICAgICAgICBpZiAocGhpTm9kZS5jaGlsZDEoKS5pbmRleCgpID09IHN1YnN0aXR1dGlvbi5vbGRD
aGlsZCkKLSAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5jaGFuZ2VJbmRleChwaGlOb2RlLmNo
aWxkcmVuLmNoaWxkMSgpLCBzdWJzdGl0dXRpb24ubmV3Q2hpbGQsIGNoYW5nZVJlZik7Ci0gICAg
ICAgICAgICAgICAgaWYgKCFwaGlOb2RlLmNoaWxkMigpKQorICAgICAgICAgICAgICAgIGlmIChw
aGlOb2RlLT5jaGlsZDEoKSA9PSBzdWJzdGl0dXRpb24ub2xkQ2hpbGQpCisgICAgICAgICAgICAg
ICAgICAgIG1fZ3JhcGguY2hhbmdlSW5kZXgocGhpTm9kZS0+Y2hpbGRyZW4uY2hpbGQxKCksIHN1
YnN0aXR1dGlvbi5uZXdDaGlsZCwgY2hhbmdlUmVmKTsKKyAgICAgICAgICAgICAgICBpZiAoIXBo
aU5vZGUtPmNoaWxkMigpKQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAg
ICAgICAgICBpZiAocGhpTm9kZS5jaGlsZDIoKS5pbmRleCgpID09IHN1YnN0aXR1dGlvbi5vbGRD
aGlsZCkKLSAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5jaGFuZ2VJbmRleChwaGlOb2RlLmNo
aWxkcmVuLmNoaWxkMigpLCBzdWJzdGl0dXRpb24ubmV3Q2hpbGQsIGNoYW5nZVJlZik7Ci0gICAg
ICAgICAgICAgICAgaWYgKCFwaGlOb2RlLmNoaWxkMygpKQorICAgICAgICAgICAgICAgIGlmIChw
aGlOb2RlLT5jaGlsZDIoKSA9PSBzdWJzdGl0dXRpb24ub2xkQ2hpbGQpCisgICAgICAgICAgICAg
ICAgICAgIG1fZ3JhcGguY2hhbmdlSW5kZXgocGhpTm9kZS0+Y2hpbGRyZW4uY2hpbGQyKCksIHN1
YnN0aXR1dGlvbi5uZXdDaGlsZCwgY2hhbmdlUmVmKTsKKyAgICAgICAgICAgICAgICBpZiAoIXBo
aU5vZGUtPmNoaWxkMygpKQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAg
ICAgICAgICBpZiAocGhpTm9kZS5jaGlsZDMoKS5pbmRleCgpID09IHN1YnN0aXR1dGlvbi5vbGRD
aGlsZCkKLSAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5jaGFuZ2VJbmRleChwaGlOb2RlLmNo
aWxkcmVuLmNoaWxkMygpLCBzdWJzdGl0dXRpb24ubmV3Q2hpbGQsIGNoYW5nZVJlZik7CisgICAg
ICAgICAgICAgICAgaWYgKHBoaU5vZGUtPmNoaWxkMygpID09IHN1YnN0aXR1dGlvbi5vbGRDaGls
ZCkKKyAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5jaGFuZ2VJbmRleChwaGlOb2RlLT5jaGls
ZHJlbi5jaGlsZDMoKSwgc3Vic3RpdHV0aW9uLm5ld0NoaWxkLCBjaGFuZ2VSZWYpOwogICAgICAg
ICAgICAgfQogICAgICAgICB9CiAgICAgICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdDU0VQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdDU0VQaGFzZS5jcHAJKHJldmlzaW9uIDE0MDU2NykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQ1NFUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MywyNCArNTMs
MjQgQEAgcHVibGljOgogICAgIAogcHJpdmF0ZToKICAgICAKLSAgICBOb2RlSW5kZXggY2Fub25p
Y2FsaXplKE5vZGVJbmRleCBub2RlSW5kZXgpCisgICAgTm9kZSogY2Fub25pY2FsaXplKE5vZGUq
IG5vZGUpCiAgICAgewotICAgICAgICBpZiAobm9kZUluZGV4ID09IE5vTm9kZSkKLSAgICAgICAg
ICAgIHJldHVybiBOb05vZGU7CisgICAgICAgIGlmICghbm9kZSkKKyAgICAgICAgICAgIHJldHVy
biAwOwogICAgICAgICAKLSAgICAgICAgaWYgKG1fZ3JhcGhbbm9kZUluZGV4XS5vcCgpID09IFZh
bHVlVG9JbnQzMikKLSAgICAgICAgICAgIG5vZGVJbmRleCA9IG1fZ3JhcGhbbm9kZUluZGV4XS5j
aGlsZDEoKS5pbmRleCgpOworICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBWYWx1ZVRvSW50MzIp
CisgICAgICAgICAgICBub2RlID0gbm9kZS0+Y2hpbGQxKCkubm9kZSgpOwogICAgICAgICAKLSAg
ICAgICAgcmV0dXJuIG5vZGVJbmRleDsKKyAgICAgICAgcmV0dXJuIG5vZGU7CiAgICAgfQotICAg
IE5vZGVJbmRleCBjYW5vbmljYWxpemUoRWRnZSBub2RlVXNlKQorICAgIE5vZGUqIGNhbm9uaWNh
bGl6ZShFZGdlIGVkZ2UpCiAgICAgewotICAgICAgICByZXR1cm4gY2Fub25pY2FsaXplKG5vZGVV
c2UuaW5kZXhVbmNoZWNrZWQoKSk7CisgICAgICAgIHJldHVybiBjYW5vbmljYWxpemUoZWRnZS5u
b2RlKCkpOwogICAgIH0KICAgICAKICAgICB1bnNpZ25lZCBlbmRJbmRleEZvclB1cmVDU0UoKQog
ICAgIHsKLSAgICAgICAgdW5zaWduZWQgcmVzdWx0ID0gbV9sYXN0U2VlblttX2dyYXBoW21fY29t
cGlsZUluZGV4XS5vcCgpXTsKKyAgICAgICAgdW5zaWduZWQgcmVzdWx0ID0gbV9sYXN0U2Vlbltt
X2N1cnJlbnROb2RlLT5vcCgpXTsKICAgICAgICAgaWYgKHJlc3VsdCA9PSBVSU5UX01BWCkKICAg
ICAgICAgICAgIHJlc3VsdCA9IDA7CiAgICAgICAgIGVsc2UKQEAgLTgyLDI2MSArODIsMjU3IEBA
IHByaXZhdGU6CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCi0gICAgTm9kZUluZGV4
IHB1cmVDU0UoTm9kZSYgbm9kZSkKKyAgICBOb2RlKiBwdXJlQ1NFKE5vZGUqIG5vZGUpCiAgICAg
ewotICAgICAgICBOb2RlSW5kZXggY2hpbGQxID0gY2Fub25pY2FsaXplKG5vZGUuY2hpbGQxKCkp
OwotICAgICAgICBOb2RlSW5kZXggY2hpbGQyID0gY2Fub25pY2FsaXplKG5vZGUuY2hpbGQyKCkp
OwotICAgICAgICBOb2RlSW5kZXggY2hpbGQzID0gY2Fub25pY2FsaXplKG5vZGUuY2hpbGQzKCkp
OworICAgICAgICBOb2RlKiBjaGlsZDEgPSBjYW5vbmljYWxpemUobm9kZS0+Y2hpbGQxKCkpOwor
ICAgICAgICBOb2RlKiBjaGlsZDIgPSBjYW5vbmljYWxpemUobm9kZS0+Y2hpbGQyKCkpOworICAg
ICAgICBOb2RlKiBjaGlsZDMgPSBjYW5vbmljYWxpemUobm9kZS0+Y2hpbGQzKCkpOwogICAgICAg
ICAKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gZW5kSW5kZXhGb3JQdXJlQ1NFKCk7IGktLTsp
IHsKLSAgICAgICAgICAgIE5vZGVJbmRleCBpbmRleCA9IG1fY3VycmVudEJsb2NrLT5hdChpKTsK
LSAgICAgICAgICAgIGlmIChpbmRleCA9PSBjaGlsZDEgfHwgaW5kZXggPT0gY2hpbGQyIHx8IGlu
ZGV4ID09IGNoaWxkMykKKyAgICAgICAgICAgIE5vZGUqIG90aGVyTm9kZSA9IG1fY3VycmVudEJs
b2NrLT5hdChpKTsKKyAgICAgICAgICAgIGlmIChvdGhlck5vZGUgPT0gY2hpbGQxIHx8IG90aGVy
Tm9kZSA9PSBjaGlsZDIgfHwgb3RoZXJOb2RlID09IGNoaWxkMykKICAgICAgICAgICAgICAgICBi
cmVhazsKIAotICAgICAgICAgICAgTm9kZSYgb3RoZXJOb2RlID0gbV9ncmFwaFtpbmRleF07Ci0g
ICAgICAgICAgICBpZiAoIW90aGVyTm9kZS5zaG91bGRHZW5lcmF0ZSgpKQorICAgICAgICAgICAg
aWYgKCFvdGhlck5vZGUtPnNob3VsZEdlbmVyYXRlKCkpCiAgICAgICAgICAgICAgICAgY29udGlu
dWU7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChub2RlLm9wKCkgIT0gb3RoZXJOb2Rl
Lm9wKCkpCisgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSAhPSBvdGhlck5vZGUtPm9wKCkpCiAg
ICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChu
b2RlLmFyaXRoTm9kZUZsYWdzKCkgIT0gb3RoZXJOb2RlLmFyaXRoTm9kZUZsYWdzKCkpCisgICAg
ICAgICAgICBpZiAobm9kZS0+YXJpdGhOb2RlRmxhZ3MoKSAhPSBvdGhlck5vZGUtPmFyaXRoTm9k
ZUZsYWdzKCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAKLSAgICAg
ICAgICAgIE5vZGVJbmRleCBvdGhlckNoaWxkID0gY2Fub25pY2FsaXplKG90aGVyTm9kZS5jaGls
ZDEoKSk7Ci0gICAgICAgICAgICBpZiAob3RoZXJDaGlsZCA9PSBOb05vZGUpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIGluZGV4OworICAgICAgICAgICAgTm9kZSogb3RoZXJDaGlsZCA9IGNhbm9u
aWNhbGl6ZShvdGhlck5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgIGlmICghb3RoZXJDaGls
ZCkKKyAgICAgICAgICAgICAgICByZXR1cm4gb3RoZXJOb2RlOwogICAgICAgICAgICAgaWYgKG90
aGVyQ2hpbGQgIT0gY2hpbGQxKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAg
ICAgCi0gICAgICAgICAgICBvdGhlckNoaWxkID0gY2Fub25pY2FsaXplKG90aGVyTm9kZS5jaGls
ZDIoKSk7Ci0gICAgICAgICAgICBpZiAob3RoZXJDaGlsZCA9PSBOb05vZGUpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIGluZGV4OworICAgICAgICAgICAgb3RoZXJDaGlsZCA9IGNhbm9uaWNhbGl6
ZShvdGhlck5vZGUtPmNoaWxkMigpKTsKKyAgICAgICAgICAgIGlmICghb3RoZXJDaGlsZCkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gb3RoZXJOb2RlOwogICAgICAgICAgICAgaWYgKG90aGVyQ2hp
bGQgIT0gY2hpbGQyKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgCi0g
ICAgICAgICAgICBvdGhlckNoaWxkID0gY2Fub25pY2FsaXplKG90aGVyTm9kZS5jaGlsZDMoKSk7
Ci0gICAgICAgICAgICBpZiAob3RoZXJDaGlsZCA9PSBOb05vZGUpCi0gICAgICAgICAgICAgICAg
cmV0dXJuIGluZGV4OworICAgICAgICAgICAgb3RoZXJDaGlsZCA9IGNhbm9uaWNhbGl6ZShvdGhl
ck5vZGUtPmNoaWxkMygpKTsKKyAgICAgICAgICAgIGlmICghb3RoZXJDaGlsZCkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gb3RoZXJOb2RlOwogICAgICAgICAgICAgaWYgKG90aGVyQ2hpbGQgIT0g
Y2hpbGQzKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgCi0gICAgICAg
ICAgICByZXR1cm4gaW5kZXg7CisgICAgICAgICAgICByZXR1cm4gb3RoZXJOb2RlOwogICAgICAg
ICB9Ci0gICAgICAgIHJldHVybiBOb05vZGU7CisgICAgICAgIHJldHVybiAwOwogICAgIH0KICAg
ICAKLSAgICBOb2RlSW5kZXggY29uc3RhbnRDU0UoTm9kZSYgbm9kZSkKKyAgICBOb2RlKiBjb25z
dGFudENTRShOb2RlKiBub2RlKQogICAgIHsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gZW5k
SW5kZXhGb3JQdXJlQ1NFKCk7IGktLTspIHsKLSAgICAgICAgICAgIE5vZGVJbmRleCBpbmRleCA9
IG1fY3VycmVudEJsb2NrLT5hdChpKTsKLSAgICAgICAgICAgIE5vZGUmIG90aGVyTm9kZSA9IG1f
Z3JhcGhbaW5kZXhdOwotICAgICAgICAgICAgaWYgKG90aGVyTm9kZS5vcCgpICE9IEpTQ29uc3Rh
bnQpCisgICAgICAgICAgICBOb2RlKiBvdGhlck5vZGUgPSBtX2N1cnJlbnRCbG9jay0+YXQoaSk7
CisgICAgICAgICAgICBpZiAob3RoZXJOb2RlLT5vcCgpICE9IEpTQ29uc3RhbnQpCiAgICAgICAg
ICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChvdGhlck5v
ZGUuY29uc3RhbnROdW1iZXIoKSAhPSBub2RlLmNvbnN0YW50TnVtYmVyKCkpCisgICAgICAgICAg
ICBpZiAoIW90aGVyTm9kZS0+c2hvdWxkR2VuZXJhdGUoKSkKICAgICAgICAgICAgICAgICBjb250
aW51ZTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgcmV0dXJuIGluZGV4OworICAgICAgICAg
ICAgaWYgKG90aGVyTm9kZS0+Y29uc3RhbnROdW1iZXIoKSAhPSBub2RlLT5jb25zdGFudE51bWJl
cigpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgCisgICAgICAgICAg
ICByZXR1cm4gb3RoZXJOb2RlOwogICAgICAgICB9Ci0gICAgICAgIHJldHVybiBOb05vZGU7Cisg
ICAgICAgIHJldHVybiAwOwogICAgIH0KICAgICAKLSAgICBOb2RlSW5kZXggd2Vha0NvbnN0YW50
Q1NFKE5vZGUmIG5vZGUpCisgICAgTm9kZSogd2Vha0NvbnN0YW50Q1NFKE5vZGUqIG5vZGUpCiAg
ICAgewogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBlbmRJbmRleEZvclB1cmVDU0UoKTsgaS0t
OykgewotICAgICAgICAgICAgTm9kZUluZGV4IGluZGV4ID0gbV9jdXJyZW50QmxvY2stPmF0KGkp
OwotICAgICAgICAgICAgTm9kZSYgb3RoZXJOb2RlID0gbV9ncmFwaFtpbmRleF07Ci0gICAgICAg
ICAgICBpZiAob3RoZXJOb2RlLm9wKCkgIT0gV2Vha0pTQ29uc3RhbnQpCisgICAgICAgICAgICBO
b2RlKiBvdGhlck5vZGUgPSBtX2N1cnJlbnRCbG9jay0+YXQoaSk7CisgICAgICAgICAgICBpZiAo
b3RoZXJOb2RlLT5vcCgpICE9IFdlYWtKU0NvbnN0YW50KQorICAgICAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoIW90aGVyTm9kZS0+c2hvdWxkR2Vu
ZXJhdGUoKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIAotICAgICAg
ICAgICAgaWYgKG90aGVyTm9kZS53ZWFrQ29uc3RhbnQoKSAhPSBub2RlLndlYWtDb25zdGFudCgp
KQorICAgICAgICAgICAgaWYgKG90aGVyTm9kZS0+d2Vha0NvbnN0YW50KCkgIT0gbm9kZS0+d2Vh
a0NvbnN0YW50KCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAKLSAg
ICAgICAgICAgIHJldHVybiBpbmRleDsKKyAgICAgICAgICAgIHJldHVybiBvdGhlck5vZGU7CiAg
ICAgICAgIH0KLSAgICAgICAgcmV0dXJuIE5vTm9kZTsKKyAgICAgICAgcmV0dXJuIDA7CiAgICAg
fQogICAgIAotICAgIE5vZGVJbmRleCBnZXRDYWxsZWVMb2FkRWxpbWluYXRpb24oSW5saW5lQ2Fs
bEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUpCisgICAgTm9kZSogZ2V0Q2FsbGVlTG9hZEVsaW1pbmF0
aW9uKElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lKQogICAgIHsKICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gbV9pbmRleEluQmxvY2s7IGktLTspIHsKLSAgICAgICAgICAgIE5vZGVJ
bmRleCBpbmRleCA9IG1fY3VycmVudEJsb2NrLT5hdChpKTsKLSAgICAgICAgICAgIE5vZGUmIG5v
ZGUgPSBtX2dyYXBoW2luZGV4XTsKLSAgICAgICAgICAgIGlmICghbm9kZS5zaG91bGRHZW5lcmF0
ZSgpKQorICAgICAgICAgICAgTm9kZSogbm9kZSA9IG1fY3VycmVudEJsb2NrLT5hdChpKTsKKyAg
ICAgICAgICAgIGlmICghbm9kZS0+c2hvdWxkR2VuZXJhdGUoKSkKICAgICAgICAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgICAgIGlmIChub2RlLmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1l
ICE9IGlubGluZUNhbGxGcmFtZSkKKyAgICAgICAgICAgIGlmIChub2RlLT5jb2RlT3JpZ2luLmlu
bGluZUNhbGxGcmFtZSAhPSBpbmxpbmVDYWxsRnJhbWUpCiAgICAgICAgICAgICAgICAgY29udGlu
dWU7Ci0gICAgICAgICAgICBzd2l0Y2ggKG5vZGUub3AoKSkgeworICAgICAgICAgICAgc3dpdGNo
IChub2RlLT5vcCgpKSB7CiAgICAgICAgICAgICBjYXNlIEdldENhbGxlZToKLSAgICAgICAgICAg
ICAgICByZXR1cm4gaW5kZXg7CisgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGU7CiAgICAgICAg
ICAgICBjYXNlIFNldENhbGxlZToKLSAgICAgICAgICAgICAgICByZXR1cm4gbm9kZS5jaGlsZDEo
KS5pbmRleCgpOworICAgICAgICAgICAgICAgIHJldHVybiBub2RlLT5jaGlsZDEoKS5ub2RlKCk7
CiAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgfQogICAgICAgICB9Ci0gICAgICAgIHJldHVybiBOb05vZGU7CisgICAgICAgIHJldHVybiAw
OwogICAgIH0KICAgICAKLSAgICBOb2RlSW5kZXggZ2V0QXJyYXlMZW5ndGhFbGltaW5hdGlvbihO
b2RlSW5kZXggYXJyYXkpCisgICAgTm9kZSogZ2V0QXJyYXlMZW5ndGhFbGltaW5hdGlvbihOb2Rl
KiBhcnJheSkKICAgICB7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1faW5kZXhJbkJsb2Nr
OyBpLS07KSB7Ci0gICAgICAgICAgICBOb2RlSW5kZXggaW5kZXggPSBtX2N1cnJlbnRCbG9jay0+
YXQoaSk7Ci0gICAgICAgICAgICBOb2RlJiBub2RlID0gbV9ncmFwaFtpbmRleF07Ci0gICAgICAg
ICAgICBpZiAoIW5vZGUuc2hvdWxkR2VuZXJhdGUoKSkKKyAgICAgICAgICAgIE5vZGUqIG5vZGUg
PSBtX2N1cnJlbnRCbG9jay0+YXQoaSk7CisgICAgICAgICAgICBpZiAoIW5vZGUtPnNob3VsZEdl
bmVyYXRlKCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBzd2l0Y2gg
KG5vZGUub3AoKSkgeworICAgICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CiAgICAgICAg
ICAgICBjYXNlIEdldEFycmF5TGVuZ3RoOgotICAgICAgICAgICAgICAgIGlmIChub2RlLmNoaWxk
MSgpID09IGFycmF5KQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW5kZXg7CisgICAgICAg
ICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpID09IGFycmF5KQorICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gbm9kZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAK
ICAgICAgICAgICAgIGNhc2UgUHV0QnlWYWw6CiAgICAgICAgICAgICAgICAgaWYgKCFtX2dyYXBo
LmJ5VmFsSXNQdXJlKG5vZGUpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gTm9Ob2RlOwot
ICAgICAgICAgICAgICAgIGlmIChub2RlLmFycmF5TW9kZSgpLm1heVN0b3JlVG9Ib2xlKCkpCi0g
ICAgICAgICAgICAgICAgICAgIHJldHVybiBOb05vZGU7CisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiAwOworICAgICAgICAgICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS5tYXlTdG9yZVRv
SG9sZSgpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAg
ICAgICAgaWYgKG1fZ3JhcGguY2xvYmJlcnNXb3JsZChpbmRleCkpCi0gICAgICAgICAgICAgICAg
ICAgIHJldHVybiBOb05vZGU7CisgICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGguY2xvYmJlcnNX
b3JsZChub2RlKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgICB9
CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIE5vTm9kZTsKKyAgICAgICAgcmV0dXJuIDA7CiAg
ICAgfQogICAgIAotICAgIE5vZGVJbmRleCBnbG9iYWxWYXJMb2FkRWxpbWluYXRpb24oV3JpdGVC
YXJyaWVyPFVua25vd24+KiByZWdpc3RlclBvaW50ZXIpCisgICAgTm9kZSogZ2xvYmFsVmFyTG9h
ZEVsaW1pbmF0aW9uKFdyaXRlQmFycmllcjxVbmtub3duPiogcmVnaXN0ZXJQb2ludGVyKQogICAg
IHsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9pbmRleEluQmxvY2s7IGktLTspIHsKLSAg
ICAgICAgICAgIE5vZGVJbmRleCBpbmRleCA9IG1fY3VycmVudEJsb2NrLT5hdChpKTsKLSAgICAg
ICAgICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW2luZGV4XTsKLSAgICAgICAgICAgIGlmICghbm9k
ZS5zaG91bGRHZW5lcmF0ZSgpKQorICAgICAgICAgICAgTm9kZSogbm9kZSA9IG1fY3VycmVudEJs
b2NrLT5hdChpKTsKKyAgICAgICAgICAgIGlmICghbm9kZS0+c2hvdWxkR2VuZXJhdGUoKSkKICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIHN3aXRjaCAobm9kZS5vcCgpKSB7
CisgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKICAgICAgICAgICAgIGNhc2UgR2V0
R2xvYmFsVmFyOgotICAgICAgICAgICAgICAgIGlmIChub2RlLnJlZ2lzdGVyUG9pbnRlcigpID09
IHJlZ2lzdGVyUG9pbnRlcikKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGluZGV4OworICAg
ICAgICAgICAgICAgIGlmIChub2RlLT5yZWdpc3RlclBvaW50ZXIoKSA9PSByZWdpc3RlclBvaW50
ZXIpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBub2RlOwogICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgY2FzZSBQdXRHbG9iYWxWYXI6Ci0gICAgICAgICAgICAgICAgaWYg
KG5vZGUucmVnaXN0ZXJQb2ludGVyKCkgPT0gcmVnaXN0ZXJQb2ludGVyKQotICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gbm9kZS5jaGlsZDEoKS5pbmRleCgpOworICAgICAgICAgICAgICAgIGlm
IChub2RlLT5yZWdpc3RlclBvaW50ZXIoKSA9PSByZWdpc3RlclBvaW50ZXIpCisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBub2RlLT5jaGlsZDEoKS5ub2RlKCk7CiAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgfQotICAgICAgICAgICAgaWYgKG1fZ3JhcGguY2xvYmJlcnNXb3JsZChpbmRleCkp
CisgICAgICAgICAgICBpZiAobV9ncmFwaC5jbG9iYmVyc1dvcmxkKG5vZGUpKQogICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIHJldHVybiBOb05vZGU7CisgICAgICAg
IHJldHVybiAwOwogICAgIH0KICAgICAKLSAgICBOb2RlSW5kZXggc2NvcGVkVmFyTG9hZEVsaW1p
bmF0aW9uKE5vZGVJbmRleCByZWdpc3RlcnMsIHVuc2lnbmVkIHZhck51bWJlcikKKyAgICBOb2Rl
KiBzY29wZWRWYXJMb2FkRWxpbWluYXRpb24oTm9kZSogcmVnaXN0ZXJzLCB1bnNpZ25lZCB2YXJO
dW1iZXIpCiAgICAgewogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2luZGV4SW5CbG9jazsg
aS0tOykgewotICAgICAgICAgICAgTm9kZUluZGV4IGluZGV4ID0gbV9jdXJyZW50QmxvY2stPmF0
KGkpOwotICAgICAgICAgICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhbaW5kZXhdOwotICAgICAgICAg
ICAgaWYgKCFub2RlLnNob3VsZEdlbmVyYXRlKCkpCisgICAgICAgICAgICBOb2RlKiA9IG1fY3Vy
cmVudEJsb2NrLT5hdChpKTsKKyAgICAgICAgICAgIGlmICghbm9kZS0+c2hvdWxkR2VuZXJhdGUo
KSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIHN3aXRjaCAobm9kZS5v
cCgpKSB7CisgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKICAgICAgICAgICAgIGNh
c2UgR2V0U2NvcGVkVmFyOiB7Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGUuY2hpbGQxKCkgPT0g
cmVnaXN0ZXJzICYmIG5vZGUudmFyTnVtYmVyKCkgPT0gdmFyTnVtYmVyKQorICAgICAgICAgICAg
ICAgIGlmIChub2RlLT5jaGlsZDEoKSA9PSByZWdpc3RlcnMgJiYgbm9kZS52YXJOdW1iZXIoKSA9
PSB2YXJOdW1iZXIpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpbmRleDsKICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0gCiAgICAgICAgICAgICBjYXNlIFB1dFNjb3Bl
ZFZhcjogewotICAgICAgICAgICAgICAgIGlmIChub2RlLmNoaWxkMigpID09IHJlZ2lzdGVycyAm
JiBub2RlLnZhck51bWJlcigpID09IHZhck51bWJlcikKLSAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIG5vZGUuY2hpbGQzKCkuaW5kZXgoKTsKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+Y2hp
bGQyKCkgPT0gcmVnaXN0ZXJzICYmIG5vZGUudmFyTnVtYmVyKCkgPT0gdmFyTnVtYmVyKQorICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gbm9kZS0+Y2hpbGQzKCkubm9kZSgpOwogICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgY2FzZSBTZXRMb2NhbDog
ewotICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRh
ID0gbm9kZS52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKKyAgICAgICAgICAgICAgICBWYXJpYWJsZUFj
Y2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgp
OwogICAgICAgICAgICAgICAgIGlmICh2YXJpYWJsZUFjY2Vzc0RhdGEtPmlzQ2FwdHVyZWQoKQog
ICAgICAgICAgICAgICAgICAgICAmJiB2YXJpYWJsZUFjY2Vzc0RhdGEtPmxvY2FsKCkgPT0gc3Rh
dGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPih2YXJOdW1iZXIpKQotICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gTm9Ob2RlOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAobV9ncmFw
aC5jbG9iYmVyc1dvcmxkKGluZGV4KSkKKyAgICAgICAgICAgIGlmIChtX2dyYXBoLmNsb2JiZXJz
V29ybGQobm9kZSkpCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAg
cmV0dXJuIE5vTm9kZTsKKyAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogICAgIAogICAgIGJvb2wg
Z2xvYmFsVmFyV2F0Y2hwb2ludEVsaW1pbmF0aW9uKFdyaXRlQmFycmllcjxVbmtub3duPiogcmVn
aXN0ZXJQb2ludGVyKQogICAgIHsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9pbmRleElu
QmxvY2s7IGktLTspIHsKLSAgICAgICAgICAgIE5vZGVJbmRleCBpbmRleCA9IG1fY3VycmVudEJs
b2NrLT5hdChpKTsKLSAgICAgICAgICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW2luZGV4XTsKLSAg
ICAgICAgICAgIGlmICghbm9kZS5zaG91bGRHZW5lcmF0ZSgpKQorICAgICAgICAgICAgTm9kZSog
bm9kZSA9IG1fY3VycmVudEJsb2NrLT5hdChpKTsKKyAgICAgICAgICAgIGlmICghbm9kZS0+c2hv
dWxkR2VuZXJhdGUoKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIHN3
aXRjaCAobm9kZS5vcCgpKSB7CisgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKICAg
ICAgICAgICAgIGNhc2UgR2xvYmFsVmFyV2F0Y2hwb2ludDoKLSAgICAgICAgICAgICAgICBpZiAo
bm9kZS5yZWdpc3RlclBvaW50ZXIoKSA9PSByZWdpc3RlclBvaW50ZXIpCisgICAgICAgICAgICAg
ICAgaWYgKG5vZGUtPnJlZ2lzdGVyUG9pbnRlcigpID09IHJlZ2lzdGVyUG9pbnRlcikKICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICBjYXNlIFB1dEdsb2JhbFZhcjoKLSAgICAgICAgICAgICAgICBpZiAobm9kZS5yZWdp
c3RlclBvaW50ZXIoKSA9PSByZWdpc3RlclBvaW50ZXIpCisgICAgICAgICAgICAgICAgaWYgKG5v
ZGUtPnJlZ2lzdGVyUG9pbnRlcigpID09IHJlZ2lzdGVyUG9pbnRlcikKICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
ZGVmYXVsdDoKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIGlmIChtX2dyYXBoLmNsb2JiZXJzV29ybGQoaW5kZXgpKQorICAgICAgICAgICAgaWYgKG1f
Z3JhcGguY2xvYmJlcnNXb3JsZChub2RlKSkKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgfQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIAotICAgIE5vZGVJbmRleCBn
bG9iYWxWYXJTdG9yZUVsaW1pbmF0aW9uKFdyaXRlQmFycmllcjxVbmtub3duPiogcmVnaXN0ZXJQ
b2ludGVyKQorICAgIE5vZGUqIGdsb2JhbFZhclN0b3JlRWxpbWluYXRpb24oV3JpdGVCYXJyaWVy
PFVua25vd24+KiByZWdpc3RlclBvaW50ZXIpCiAgICAgewogICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSBtX2luZGV4SW5CbG9jazsgaS0tOykgewotICAgICAgICAgICAgTm9kZUluZGV4IGluZGV4
ID0gbV9jdXJyZW50QmxvY2stPmF0KGkpOwotICAgICAgICAgICAgTm9kZSYgbm9kZSA9IG1fZ3Jh
cGhbaW5kZXhdOwotICAgICAgICAgICAgaWYgKCFub2RlLnNob3VsZEdlbmVyYXRlKCkpCisgICAg
ICAgICAgICBOb2RlKiBub2RlID0gbV9jdXJyZW50QmxvY2stPmF0KGkpOworICAgICAgICAgICAg
aWYgKCFub2RlLT5zaG91bGRHZW5lcmF0ZSgpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwot
ICAgICAgICAgICAgc3dpdGNoIChub2RlLm9wKCkpIHsKKyAgICAgICAgICAgIHN3aXRjaCAobm9k
ZS0+b3AoKSkgewogICAgICAgICAgICAgY2FzZSBQdXRHbG9iYWxWYXI6CiAgICAgICAgICAgICBj
YXNlIFB1dEdsb2JhbFZhckNoZWNrOgotICAgICAgICAgICAgICAgIGlmIChub2RlLnJlZ2lzdGVy
UG9pbnRlcigpID09IHJlZ2lzdGVyUG9pbnRlcikKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGluZGV4OworICAgICAgICAgICAgICAgIGlmIChub2RlLT5yZWdpc3RlclBvaW50ZXIoKSA9PSBy
ZWdpc3RlclBvaW50ZXIpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBub2RlOwogICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgY2FzZSBHZXRH
bG9iYWxWYXI6Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGUucmVnaXN0ZXJQb2ludGVyKCkgPT0g
cmVnaXN0ZXJQb2ludGVyKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gTm9Ob2RlOworICAg
ICAgICAgICAgICAgIGlmIChub2RlLT5yZWdpc3RlclBvaW50ZXIoKSA9PSByZWdpc3RlclBvaW50
ZXIpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChtX2dyYXBoLmNsb2JiZXJz
V29ybGQoaW5kZXgpIHx8IG5vZGUuY2FuRXhpdCgpKQotICAgICAgICAgICAgICAgIHJldHVybiBO
b05vZGU7CisgICAgICAgICAgICBpZiAobV9ncmFwaC5jbG9iYmVyc1dvcmxkKG5vZGUpIHx8IG5v
ZGUtPmNhbkV4aXQoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgfQotICAg
ICAgICByZXR1cm4gTm9Ob2RlOworICAgICAgICByZXR1cm4gMDsKICAgICB9CiAgICAgCi0gICAg
Tm9kZUluZGV4IHNjb3BlZFZhclN0b3JlRWxpbWluYXRpb24oTm9kZUluZGV4IHNjb3BlLCBOb2Rl
SW5kZXggcmVnaXN0ZXJzLCB1bnNpZ25lZCB2YXJOdW1iZXIpCisgICAgTm9kZSogc2NvcGVkVmFy
U3RvcmVFbGltaW5hdGlvbihOb2RlKiBzY29wZSwgTm9kZSogcmVnaXN0ZXJzLCB1bnNpZ25lZCB2
YXJOdW1iZXIpCiAgICAgewogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2luZGV4SW5CbG9j
azsgaS0tOykgewotICAgICAgICAgICAgTm9kZUluZGV4IGluZGV4ID0gbV9jdXJyZW50QmxvY2st
PmF0KGkpOwotICAgICAgICAgICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhbaW5kZXhdOwotICAgICAg
ICAgICAgaWYgKCFub2RlLnNob3VsZEdlbmVyYXRlKCkpCisgICAgICAgICAgICBOb2RlKiBub2Rl
ID0gbV9jdXJyZW50QmxvY2stPmF0KGkpOworICAgICAgICAgICAgaWYgKCFub2RlLT5zaG91bGRH
ZW5lcmF0ZSgpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgc3dpdGNo
IChub2RlLm9wKCkpIHsKKyAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewogICAgICAg
ICAgICAgY2FzZSBQdXRTY29wZWRWYXI6IHsKLSAgICAgICAgICAgICAgICBpZiAobm9kZS5jaGls
ZDEoKSA9PSBzY29wZSAmJiBub2RlLmNoaWxkMigpID09IHJlZ2lzdGVycyAmJiBub2RlLnZhck51
bWJlcigpID09IHZhck51bWJlcikKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGluZGV4Owor
ICAgICAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKSA9PSBzY29wZSAmJiBub2RlLT5jaGls
ZDIoKSA9PSByZWdpc3RlcnMgJiYgbm9kZS52YXJOdW1iZXIoKSA9PSB2YXJOdW1iZXIpCisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBub2RlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgY2FzZSBHZXRTY29wZWRW
YXI6IHsKICAgICAgICAgICAgICAgICAvLyBMZXQncyBiZSBjb25zZXJ2YXRpdmUuCi0gICAgICAg
ICAgICAgICAgaWYgKG5vZGUudmFyTnVtYmVyKCkgPT0gdmFyTnVtYmVyKQotICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gTm9Ob2RlOworICAgICAgICAgICAgICAgIGlmIChub2RlLT52YXJOdW1i
ZXIoKSA9PSB2YXJOdW1iZXIpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIApAQCAtMzQ0
LDQ2ICszNDAsNDUgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0Rh
dGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9IG5vZGUudmFyaWFibGVBY2Nlc3NEYXRhKCk7CiAgICAg
ICAgICAgICAgICAgaWYgKHZhcmlhYmxlQWNjZXNzRGF0YS0+aXNDYXB0dXJlZCgpCiAgICAgICAg
ICAgICAgICAgICAgICYmIHZhcmlhYmxlQWNjZXNzRGF0YS0+bG9jYWwoKSA9PSBzdGF0aWNfY2Fz
dDxWaXJ0dWFsUmVnaXN0ZXI+KHZhck51bWJlcikpCi0gICAgICAgICAgICAgICAgICAgIHJldHVy
biBOb05vZGU7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKG1fZ3JhcGguY2xv
YmJlcnNXb3JsZChpbmRleCkgfHwgbm9kZS5jYW5FeGl0KCkpCi0gICAgICAgICAgICAgICAgcmV0
dXJuIE5vTm9kZTsKKyAgICAgICAgICAgIGlmIChtX2dyYXBoLmNsb2JiZXJzV29ybGQobm9kZSkg
fHwgbm9kZS0+Y2FuRXhpdCgpKQorICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICB9
Ci0gICAgICAgIHJldHVybiBOb05vZGU7CisgICAgICAgIHJldHVybiAwOwogICAgIH0KICAgICAK
LSAgICBOb2RlSW5kZXggZ2V0QnlWYWxMb2FkRWxpbWluYXRpb24oTm9kZUluZGV4IGNoaWxkMSwg
Tm9kZUluZGV4IGNoaWxkMikKKyAgICBOb2RlKiBnZXRCeVZhbExvYWRFbGltaW5hdGlvbihOb2Rl
KiBjaGlsZDEsIE5vZGUqIGNoaWxkMikKICAgICB7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IG1faW5kZXhJbkJsb2NrOyBpLS07KSB7Ci0gICAgICAgICAgICBOb2RlSW5kZXggaW5kZXggPSBt
X2N1cnJlbnRCbG9jay0+YXQoaSk7Ci0gICAgICAgICAgICBpZiAoaW5kZXggPT0gY2hpbGQxIHx8
IGluZGV4ID09IGNhbm9uaWNhbGl6ZShjaGlsZDIpKSAKKyAgICAgICAgICAgIE5vZGUqIG5vZGUg
PSBtX2N1cnJlbnRCbG9jay0+YXQoaSk7CisgICAgICAgICAgICBpZiAobm9kZSA9PSBjaGlsZDEg
fHwgbm9kZSA9PSBjYW5vbmljYWxpemUoY2hpbGQyKSkgCiAgICAgICAgICAgICAgICAgYnJlYWs7
CiAKLSAgICAgICAgICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW2luZGV4XTsKLSAgICAgICAgICAg
IGlmICghbm9kZS5zaG91bGRHZW5lcmF0ZSgpKQorICAgICAgICAgICAgaWYgKCFub2RlLT5zaG91
bGRHZW5lcmF0ZSgpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgc3dp
dGNoIChub2RlLm9wKCkpIHsKKyAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewogICAg
ICAgICAgICAgY2FzZSBHZXRCeVZhbDoKICAgICAgICAgICAgICAgICBpZiAoIW1fZ3JhcGguYnlW
YWxJc1B1cmUobm9kZSkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOb05vZGU7Ci0gICAg
ICAgICAgICAgICAgaWYgKG5vZGUuY2hpbGQxKCkgPT0gY2hpbGQxICYmIGNhbm9uaWNhbGl6ZShu
b2RlLmNoaWxkMigpKSA9PSBjYW5vbmljYWxpemUoY2hpbGQyKSkKLSAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGluZGV4OworICAgICAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKSA9PSBj
aGlsZDEgJiYgY2Fub25pY2FsaXplKG5vZGUtPmNoaWxkMigpKSA9PSBjYW5vbmljYWxpemUoY2hp
bGQyKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGU7CiAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICBjYXNlIFB1dEJ5VmFsOgogICAgICAgICAgICAgY2FzZSBQdXRC
eVZhbEFsaWFzOiB7CiAgICAgICAgICAgICAgICAgaWYgKCFtX2dyYXBoLmJ5VmFsSXNQdXJlKG5v
ZGUpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gTm9Ob2RlOworICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gMDsKICAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC52YXJBcmdDaGlsZChu
b2RlLCAwKSA9PSBjaGlsZDEgJiYgY2Fub25pY2FsaXplKG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9k
ZSwgMSkpID09IGNhbm9uaWNhbGl6ZShjaGlsZDIpKQotICAgICAgICAgICAgICAgICAgICByZXR1
cm4gbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAyKS5pbmRleCgpOworICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAyKS5ub2RlKCk7CiAgICAgICAg
ICAgICAgICAgLy8gV2UgbXVzdCBhc3N1bWUgdGhhdCB0aGUgUHV0QnlWYWwgd2lsbCBjbG9iYmVy
IHRoZSBsb2NhdGlvbiB3ZSdyZSBnZXR0aW5nIGZyb20uCiAgICAgICAgICAgICAgICAgLy8gRklY
TUU6IFdlIGNhbiBkbyBiZXR0ZXI7IGlmIHdlIGtub3cgdGhhdCB0aGUgUHV0QnlWYWwgaXMgYWNj
ZXNzaW5nIGFuIGFycmF5IG9mIGEKICAgICAgICAgICAgICAgICAvLyBkaWZmZXJlbnQgdHlwZSB0
aGFuIHRoZSBHZXRCeVZhbCwgdGhlbiB3ZSBrbm93IHRoYXQgdGhleSB3b24ndCBjbG9iYmVyIGVh
Y2ggb3RoZXIuCi0gICAgICAgICAgICAgICAgcmV0dXJuIE5vTm9kZTsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gMDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGNhc2UgUHV0U3RydWN0dXJl
OgogICAgICAgICAgICAgY2FzZSBQdXRCeU9mZnNldDoKQEAgLTM5Myw3MiArMzg4LDY5IEBAIHBy
aXZhdGU6CiAgICAgICAgICAgICAgICAgLy8gdGhlIEdldEJ5VmFsLgogICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBpZiAobV9ncmFw
aC5jbG9iYmVyc1dvcmxkKGluZGV4KSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5vTm9k
ZTsKKyAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC5jbG9iYmVyc1dvcmxkKG5vZGUpKQorICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgIH0KICAgICAgICAgfQotICAgICAgICByZXR1cm4gTm9Ob2RlOworICAgICAgICByZXR1
cm4gMDsKICAgICB9CiAKLSAgICBib29sIGNoZWNrRnVuY3Rpb25FbGltaW5hdGlvbihKU0NlbGwq
IGZ1bmN0aW9uLCBOb2RlSW5kZXggY2hpbGQxKQorICAgIGJvb2wgY2hlY2tGdW5jdGlvbkVsaW1p
bmF0aW9uKEpTQ2VsbCogZnVuY3Rpb24sIE5vZGUqIGNoaWxkMSkKICAgICB7CiAgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IGVuZEluZGV4Rm9yUHVyZUNTRSgpOyBpLS07KSB7Ci0gICAgICAgICAg
ICBOb2RlSW5kZXggaW5kZXggPSBtX2N1cnJlbnRCbG9jay0+YXQoaSk7Ci0gICAgICAgICAgICBp
ZiAoaW5kZXggPT0gY2hpbGQxKSAKKyAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBtX2N1cnJlbnRC
bG9jay0+YXQoaSk7CisgICAgICAgICAgICBpZiAobm9kZSA9PSBjaGlsZDEpIAogICAgICAgICAg
ICAgICAgIGJyZWFrOwogCi0gICAgICAgICAgICBOb2RlJiBub2RlID0gbV9ncmFwaFtpbmRleF07
Ci0gICAgICAgICAgICBpZiAobm9kZS5vcCgpID09IENoZWNrRnVuY3Rpb24gJiYgbm9kZS5jaGls
ZDEoKSA9PSBjaGlsZDEgJiYgbm9kZS5mdW5jdGlvbigpID09IGZ1bmN0aW9uKQorICAgICAgICAg
ICAgaWYgKG5vZGUtPm9wKCkgPT0gQ2hlY2tGdW5jdGlvbiAmJiBub2RlLT5jaGlsZDEoKSA9PSBj
aGlsZDEgJiYgbm9kZS0+ZnVuY3Rpb24oKSA9PSBmdW5jdGlvbikKICAgICAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAg
IAotICAgIGJvb2wgY2hlY2tFeGVjdXRhYmxlRWxpbWluYXRpb24oRXhlY3V0YWJsZUJhc2UqIGV4
ZWN1dGFibGUsIE5vZGVJbmRleCBjaGlsZDEpCisgICAgYm9vbCBjaGVja0V4ZWN1dGFibGVFbGlt
aW5hdGlvbihFeGVjdXRhYmxlQmFzZSogZXhlY3V0YWJsZSwgTm9kZSogY2hpbGQxKQogICAgIHsK
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gZW5kSW5kZXhGb3JQdXJlQ1NFKCk7IGktLTspIHsK
LSAgICAgICAgICAgIE5vZGVJbmRleCBpbmRleCA9IG1fY3VycmVudEJsb2NrLT5hdChpKTsKLSAg
ICAgICAgICAgIGlmIChpbmRleCA9PSBjaGlsZDEpCisgICAgICAgICAgICBOb2RlKiBub2RlID0g
bV9jdXJyZW50QmxvY2stPmF0KGkpOworICAgICAgICAgICAgaWYgKG5vZGUgPT0gY2hpbGQxKQog
ICAgICAgICAgICAgICAgIGJyZWFrOwogCi0gICAgICAgICAgICBOb2RlJiBub2RlID0gbV9ncmFw
aFtpbmRleF07Ci0gICAgICAgICAgICBpZiAobm9kZS5vcCgpID09IENoZWNrRXhlY3V0YWJsZSAm
JiBub2RlLmNoaWxkMSgpID09IGNoaWxkMSAmJiBub2RlLmV4ZWN1dGFibGUoKSA9PSBleGVjdXRh
YmxlKQorICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gQ2hlY2tFeGVjdXRhYmxlICYmIG5v
ZGUtPmNoaWxkMSgpID09IGNoaWxkMSAmJiBub2RlLT5leGVjdXRhYmxlKCkgPT0gZXhlY3V0YWJs
ZSkKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgfQogCi0gICAgYm9vbCBjaGVja1N0cnVjdHVyZUVsaW1pbmF0aW9uKGNv
bnN0IFN0cnVjdHVyZVNldCYgc3RydWN0dXJlU2V0LCBOb2RlSW5kZXggY2hpbGQxKQorICAgIGJv
b2wgY2hlY2tTdHJ1Y3R1cmVFbGltaW5hdGlvbihjb25zdCBTdHJ1Y3R1cmVTZXQmIHN0cnVjdHVy
ZVNldCwgTm9kZSogY2hpbGQxKQogICAgIHsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9p
bmRleEluQmxvY2s7IGktLTspIHsKLSAgICAgICAgICAgIE5vZGVJbmRleCBpbmRleCA9IG1fY3Vy
cmVudEJsb2NrLT5hdChpKTsKLSAgICAgICAgICAgIGlmIChpbmRleCA9PSBjaGlsZDEpIAorICAg
ICAgICAgICAgTm9kZSogbm9kZSA9IG1fY3VycmVudEJsb2NrLT5hdChpKTsKKyAgICAgICAgICAg
IGlmIChub2RlID09IGNoaWxkMSkgCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAg
ICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW2luZGV4XTsKLSAgICAgICAgICAgIGlmICghbm9kZS5z
aG91bGRHZW5lcmF0ZSgpKQorICAgICAgICAgICAgaWYgKCFub2RlLT5zaG91bGRHZW5lcmF0ZSgp
KQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgc3dpdGNoIChub2RlLm9w
KCkpIHsKKyAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewogICAgICAgICAgICAgY2Fz
ZSBDaGVja1N0cnVjdHVyZToKICAgICAgICAgICAgIGNhc2UgRm9yd2FyZENoZWNrU3RydWN0dXJl
OgotICAgICAgICAgICAgICAgIGlmIChub2RlLmNoaWxkMSgpID09IGNoaWxkMQotICAgICAgICAg
ICAgICAgICAgICAmJiBzdHJ1Y3R1cmVTZXQuaXNTdXBlcnNldE9mKG5vZGUuc3RydWN0dXJlU2V0
KCkpKQorICAgICAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKSA9PSBjaGlsZDEKKyAgICAg
ICAgICAgICAgICAgICAgJiYgc3RydWN0dXJlU2V0LmlzU3VwZXJzZXRPZihub2RlLT5zdHJ1Y3R1
cmVTZXQoKSkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgY2FzZSBTdHJ1Y3R1cmVU
cmFuc2l0aW9uV2F0Y2hwb2ludDoKICAgICAgICAgICAgIGNhc2UgRm9yd2FyZFN0cnVjdHVyZVRy
YW5zaXRpb25XYXRjaHBvaW50OgotICAgICAgICAgICAgICAgIGlmIChub2RlLmNoaWxkMSgpID09
IGNoaWxkMQotICAgICAgICAgICAgICAgICAgICAmJiBzdHJ1Y3R1cmVTZXQuY29udGFpbnMobm9k
ZS5zdHJ1Y3R1cmUoKSkpCisgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpID09IGNo
aWxkMQorICAgICAgICAgICAgICAgICAgICAmJiBzdHJ1Y3R1cmVTZXQuY29udGFpbnMobm9kZS0+
c3RydWN0dXJlKCkpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGNhc2UgUHV0U3Ry
dWN0dXJlOgotICAgICAgICAgICAgICAgIGlmIChub2RlLmNoaWxkMSgpID09IGNoaWxkMQotICAg
ICAgICAgICAgICAgICAgICAmJiBzdHJ1Y3R1cmVTZXQuY29udGFpbnMobm9kZS5zdHJ1Y3R1cmVU
cmFuc2l0aW9uRGF0YSgpLm5ld1N0cnVjdHVyZSkpCisgICAgICAgICAgICAgICAgaWYgKG5vZGUt
PmNoaWxkMSgpID09IGNoaWxkMQorICAgICAgICAgICAgICAgICAgICAmJiBzdHJ1Y3R1cmVTZXQu
Y29udGFpbnMobm9kZS0+c3RydWN0dXJlVHJhbnNpdGlvbkRhdGEoKS5uZXdTdHJ1Y3R1cmUpKQog
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgICAgICBpZiAoc3Ry
dWN0dXJlU2V0LmNvbnRhaW5zKG5vZGUuc3RydWN0dXJlVHJhbnNpdGlvbkRhdGEoKS5wcmV2aW91
c1N0cnVjdHVyZSkpCisgICAgICAgICAgICAgICAgaWYgKHN0cnVjdHVyZVNldC5jb250YWlucyhu
b2RlLT5zdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSgpLnByZXZpb3VzU3RydWN0dXJlKSkKICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgICAgIApAQCAtNDgzLDcgKzQ3NSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgZGVmYXVsdDoK
LSAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC5jbG9iYmVyc1dvcmxkKGluZGV4KSkKKyAgICAg
ICAgICAgICAgICBpZiAobV9ncmFwaC5jbG9iYmVyc1dvcmxkKG5vZGUpKQogICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICB9CkBAIC00OTEsMjYgKzQ4MywyNSBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgfQogICAgIAotICAgIGJvb2wgc3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnRFbGlt
aW5hdGlvbihTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgTm9kZUluZGV4IGNoaWxkMSkKKyAgICBib29s
IHN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50RWxpbWluYXRpb24oU3RydWN0dXJlKiBzdHJ1
Y3R1cmUsIE5vZGUqIGNoaWxkMSkKICAgICB7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1f
aW5kZXhJbkJsb2NrOyBpLS07KSB7Ci0gICAgICAgICAgICBOb2RlSW5kZXggaW5kZXggPSBtX2N1
cnJlbnRCbG9jay0+YXQoaSk7Ci0gICAgICAgICAgICBpZiAoaW5kZXggPT0gY2hpbGQxKSAKKyAg
ICAgICAgICAgIE5vZGUqIG5vZGUgPSBtX2N1cnJlbnRCbG9jay0+YXQoaSk7CisgICAgICAgICAg
ICBpZiAobm9kZSA9PSBjaGlsZDEpIAogICAgICAgICAgICAgICAgIGJyZWFrOwogCi0gICAgICAg
ICAgICBOb2RlJiBub2RlID0gbV9ncmFwaFtpbmRleF07Ci0gICAgICAgICAgICBpZiAoIW5vZGUu
c2hvdWxkR2VuZXJhdGUoKSkKKyAgICAgICAgICAgIGlmICghbm9kZS0+c2hvdWxkR2VuZXJhdGUo
KSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIHN3aXRjaCAobm9kZS5v
cCgpKSB7CisgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKICAgICAgICAgICAgIGNh
c2UgQ2hlY2tTdHJ1Y3R1cmU6CiAgICAgICAgICAgICBjYXNlIEZvcndhcmRDaGVja1N0cnVjdHVy
ZToKLSAgICAgICAgICAgICAgICBpZiAobm9kZS5jaGlsZDEoKSA9PSBjaGlsZDEKLSAgICAgICAg
ICAgICAgICAgICAgJiYgbm9kZS5zdHJ1Y3R1cmVTZXQoKS5jb250YWluc09ubHkoc3RydWN0dXJl
KSkKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCkgPT0gY2hpbGQxCisgICAgICAg
ICAgICAgICAgICAgICYmIG5vZGUtPnN0cnVjdHVyZVNldCgpLmNvbnRhaW5zT25seShzdHJ1Y3R1
cmUpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGNhc2UgUHV0U3RydWN0dXJlOgot
ICAgICAgICAgICAgICAgIEFTU0VSVChub2RlLnN0cnVjdHVyZVRyYW5zaXRpb25EYXRhKCkucHJl
dmlvdXNTdHJ1Y3R1cmUgIT0gc3RydWN0dXJlKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQobm9k
ZS0+c3RydWN0dXJlVHJhbnNpdGlvbkRhdGEoKS5wcmV2aW91c1N0cnVjdHVyZSAhPSBzdHJ1Y3R1
cmUpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIAogICAgICAgICAg
ICAgY2FzZSBQdXRCeU9mZnNldDoKQEAgLTUyOSw3ICs1MjAsNyBAQCBwcml2YXRlOgogICAgICAg
ICAgICAgICAgIAogICAgICAgICAgICAgY2FzZSBTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2lu
dDoKICAgICAgICAgICAgIGNhc2UgRm9yd2FyZFN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50
OgotICAgICAgICAgICAgICAgIGlmIChub2RlLnN0cnVjdHVyZSgpID09IHN0cnVjdHVyZSAmJiBu
b2RlLmNoaWxkMSgpID09IGNoaWxkMSkKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+c3RydWN0
dXJlKCkgPT0gc3RydWN0dXJlICYmIG5vZGUtPmNoaWxkMSgpID09IGNoaWxkMSkKICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICAgICAgCkBAIC01NDAsNyArNTMxLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBkZWZhdWx0OgotICAg
ICAgICAgICAgICAgIGlmIChtX2dyYXBoLmNsb2JiZXJzV29ybGQoaW5kZXgpKQorICAgICAgICAg
ICAgICAgIGlmIChtX2dyYXBoLmNsb2JiZXJzV29ybGQobm9kZSkpCiAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0K
QEAgLTU0OCwyOCArNTM5LDI3IEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICB9CiAgICAgCi0gICAgTm9kZUluZGV4IHB1dFN0cnVjdHVyZVN0b3JlRWxpbWluYXRpb24oTm9k
ZUluZGV4IGNoaWxkMSkKKyAgICBOb2RlKiBwdXRTdHJ1Y3R1cmVTdG9yZUVsaW1pbmF0aW9uKE5v
ZGUqIGNoaWxkMSkKICAgICB7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1faW5kZXhJbkJs
b2NrOyBpLS07KSB7Ci0gICAgICAgICAgICBOb2RlSW5kZXggaW5kZXggPSBtX2N1cnJlbnRCbG9j
ay0+YXQoaSk7Ci0gICAgICAgICAgICBpZiAoaW5kZXggPT0gY2hpbGQxKQorICAgICAgICAgICAg
Tm9kZSogbm9kZSA9IG1fY3VycmVudEJsb2NrLT5hdChpKTsKKyAgICAgICAgICAgIGlmIChub2Rl
ID09IGNoaWxkMSkKICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIE5vZGUmIG5v
ZGUgPSBtX2dyYXBoW2luZGV4XTsKLSAgICAgICAgICAgIGlmICghbm9kZS5zaG91bGRHZW5lcmF0
ZSgpKQorICAgICAgICAgICAgaWYgKCFub2RlLT5zaG91bGRHZW5lcmF0ZSgpKQogICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgc3dpdGNoIChub2RlLm9wKCkpIHsKKyAgICAg
ICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewogICAgICAgICAgICAgY2FzZSBDaGVja1N0cnVj
dHVyZToKICAgICAgICAgICAgIGNhc2UgRm9yd2FyZENoZWNrU3RydWN0dXJlOgogICAgICAgICAg
ICAgICAgIHJldHVybiBOb05vZGU7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBjYXNl
IFBoYW50b21QdXRTdHJ1Y3R1cmU6Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGUuY2hpbGQxKCkg
PT0gY2hpbGQxKSAvLyBObyBuZWVkIHRvIHJldHJhY2Ugb3VyIHN0ZXBzLgorICAgICAgICAgICAg
ICAgIGlmIChub2RlLT5jaGlsZDEoKSA9PSBjaGlsZDEpIC8vIE5vIG5lZWQgdG8gcmV0cmFjZSBv
dXIgc3RlcHMuCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOb05vZGU7CiAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBjYXNlIFB1dFN0cnVj
dHVyZToKLSAgICAgICAgICAgICAgICBpZiAobm9kZS5jaGlsZDEoKSA9PSBjaGlsZDEpCi0gICAg
ICAgICAgICAgICAgICAgIHJldHVybiBpbmRleDsKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+
Y2hpbGQxKCkgPT0gY2hpbGQxKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gbm9kZTsKICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIC8vIFB1
dFN0cnVjdHVyZSBuZWVkcyB0byBleGVjdXRlIGlmIHdlIEdDLiBIZW5jZSB0aGlzIG5lZWRzIHRv
CkBAIC01OTEsNDQgKzU4MSw0MyBAQCBwcml2YXRlOgogICAgICAgICAgICAgY2FzZSBBbGxvY2F0
ZVByb3BlcnR5U3RvcmFnZToKICAgICAgICAgICAgIGNhc2UgUmVhbGxvY2F0ZVByb3BlcnR5U3Rv
cmFnZToKICAgICAgICAgICAgIGNhc2UgVHlwZU9mOgotICAgICAgICAgICAgICAgIHJldHVybiBO
b05vZGU7CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgICAgICAgCiAgICAg
ICAgICAgICBjYXNlIEdldEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2U6Ci0gICAgICAgICAgICAgICAg
aWYgKG5vZGUuYXJyYXlNb2RlKCkuZ2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZU1heVRyaWdnZXJH
QygpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gTm9Ob2RlOworICAgICAgICAgICAgICAg
IGlmIChub2RlLT5hcnJheU1vZGUoKS5nZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlTWF5VHJpZ2dl
ckdDKCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChtX2dyYXBoLmNsb2Ji
ZXJzV29ybGQoaW5kZXgpIHx8IG5vZGUuY2FuRXhpdCgpKQotICAgICAgICAgICAgICAgIHJldHVy
biBOb05vZGU7CisgICAgICAgICAgICBpZiAobV9ncmFwaC5jbG9iYmVyc1dvcmxkKG5vZGUpIHx8
IG5vZGUtPmNhbkV4aXQoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgfQot
ICAgICAgICByZXR1cm4gTm9Ob2RlOworICAgICAgICByZXR1cm4gMDsKICAgICB9CiAgICAgCi0g
ICAgTm9kZUluZGV4IGdldEJ5T2Zmc2V0TG9hZEVsaW1pbmF0aW9uKHVuc2lnbmVkIGlkZW50aWZp
ZXJOdW1iZXIsIE5vZGVJbmRleCBjaGlsZDEpCisgICAgTm9kZSogZ2V0QnlPZmZzZXRMb2FkRWxp
bWluYXRpb24odW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgTm9kZSogY2hpbGQxKQogICAgIHsK
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9pbmRleEluQmxvY2s7IGktLTspIHsKLSAgICAg
ICAgICAgIE5vZGVJbmRleCBpbmRleCA9IG1fY3VycmVudEJsb2NrLT5hdChpKTsKLSAgICAgICAg
ICAgIGlmIChpbmRleCA9PSBjaGlsZDEpCisgICAgICAgICAgICBOb2RlKiBub2RlID0gbV9jdXJy
ZW50QmxvY2stPmF0KGkpOworICAgICAgICAgICAgaWYgKG5vZGUgPT0gY2hpbGQxKQogICAgICAg
ICAgICAgICAgIGJyZWFrOwogCi0gICAgICAgICAgICBOb2RlJiBub2RlID0gbV9ncmFwaFtpbmRl
eF07Ci0gICAgICAgICAgICBpZiAoIW5vZGUuc2hvdWxkR2VuZXJhdGUoKSkKKyAgICAgICAgICAg
IGlmICghbm9kZS0+c2hvdWxkR2VuZXJhdGUoKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsK
LSAgICAgICAgICAgIHN3aXRjaCAobm9kZS5vcCgpKSB7CisgICAgICAgICAgICBzd2l0Y2ggKG5v
ZGUtPm9wKCkpIHsKICAgICAgICAgICAgIGNhc2UgR2V0QnlPZmZzZXQ6Ci0gICAgICAgICAgICAg
ICAgaWYgKG5vZGUuY2hpbGQxKCkgPT0gY2hpbGQxCi0gICAgICAgICAgICAgICAgICAgICYmIG1f
Z3JhcGgubV9zdG9yYWdlQWNjZXNzRGF0YVtub2RlLnN0b3JhZ2VBY2Nlc3NEYXRhSW5kZXgoKV0u
aWRlbnRpZmllck51bWJlciA9PSBpZGVudGlmaWVyTnVtYmVyKQotICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gaW5kZXg7CisgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpID09IGNo
aWxkMQorICAgICAgICAgICAgICAgICAgICAmJiBtX2dyYXBoLm1fc3RvcmFnZUFjY2Vzc0RhdGFb
bm9kZS0+c3RvcmFnZUFjY2Vzc0RhdGFJbmRleCgpXS5pZGVudGlmaWVyTnVtYmVyID09IGlkZW50
aWZpZXJOdW1iZXIpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBub2RlOwogICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgY2FzZSBQdXRCeU9m
ZnNldDoKLSAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC5tX3N0b3JhZ2VBY2Nlc3NEYXRhW25v
ZGUuc3RvcmFnZUFjY2Vzc0RhdGFJbmRleCgpXS5pZGVudGlmaWVyTnVtYmVyID09IGlkZW50aWZp
ZXJOdW1iZXIpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUuY2hpbGQxKCkgPT0gY2hp
bGQxKSAvLyBNdXN0IGJlIHNhbWUgcHJvcGVydHkgc3RvcmFnZS4KLSAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBub2RlLmNoaWxkMygpLmluZGV4KCk7Ci0gICAgICAgICAgICAgICAgICAg
IHJldHVybiBOb05vZGU7CisgICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGgubV9zdG9yYWdlQWNj
ZXNzRGF0YVtub2RlLT5zdG9yYWdlQWNjZXNzRGF0YUluZGV4KCldLmlkZW50aWZpZXJOdW1iZXIg
PT0gaWRlbnRpZmllck51bWJlcikgeworICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS0+Y2hp
bGQxKCkgPT0gY2hpbGQxKSAvLyBNdXN0IGJlIHNhbWUgcHJvcGVydHkgc3RvcmFnZS4KKyAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBub2RlLT5jaGlsZDMoKS5ub2RlKCk7CisgICAgICAg
ICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgICAgICAKQEAgLTY0NCwzOCArNjMzLDM3IEBAIHByaXZhdGU6
CiAgICAgICAgICAgICAgICAgICAgIC8vIGNoYW5nZS4KICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHJldHVybiBOb05vZGU7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBk
ZWZhdWx0OgotICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLmNsb2JiZXJzV29ybGQoaW5kZXgp
KQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gTm9Ob2RlOworICAgICAgICAgICAgICAgIGlm
IChtX2dyYXBoLmNsb2JiZXJzV29ybGQobm9kZSkpCisgICAgICAgICAgICAgICAgICAgIHJldHVy
biAwOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0g
ICAgICAgIHJldHVybiBOb05vZGU7CisgICAgICAgIHJldHVybiAwOwogICAgIH0KICAgICAKLSAg
ICBOb2RlSW5kZXggcHV0QnlPZmZzZXRTdG9yZUVsaW1pbmF0aW9uKHVuc2lnbmVkIGlkZW50aWZp
ZXJOdW1iZXIsIE5vZGVJbmRleCBjaGlsZDEpCisgICAgTm9kZSogcHV0QnlPZmZzZXRTdG9yZUVs
aW1pbmF0aW9uKHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIE5vZGUqIGNoaWxkMSkKICAgICB7
CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1faW5kZXhJbkJsb2NrOyBpLS07KSB7Ci0gICAg
ICAgICAgICBOb2RlSW5kZXggaW5kZXggPSBtX2N1cnJlbnRCbG9jay0+YXQoaSk7Ci0gICAgICAg
ICAgICBpZiAoaW5kZXggPT0gY2hpbGQxKQorICAgICAgICAgICAgTm9kZSogbm9kZSA9IG1fY3Vy
cmVudEJsb2NrLT5hdChpKTsKKyAgICAgICAgICAgIGlmIChub2RlID09IGNoaWxkMSkKICAgICAg
ICAgICAgICAgICBicmVhazsKIAotICAgICAgICAgICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhbaW5k
ZXhdOwotICAgICAgICAgICAgaWYgKCFub2RlLnNob3VsZEdlbmVyYXRlKCkpCisgICAgICAgICAg
ICBpZiAoIW5vZGUtPnNob3VsZEdlbmVyYXRlKCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7
Ci0gICAgICAgICAgICBzd2l0Y2ggKG5vZGUub3AoKSkgeworICAgICAgICAgICAgc3dpdGNoIChu
b2RlLT5vcCgpKSB7CiAgICAgICAgICAgICBjYXNlIEdldEJ5T2Zmc2V0OgotICAgICAgICAgICAg
ICAgIGlmIChtX2dyYXBoLm1fc3RvcmFnZUFjY2Vzc0RhdGFbbm9kZS5zdG9yYWdlQWNjZXNzRGF0
YUluZGV4KCldLmlkZW50aWZpZXJOdW1iZXIgPT0gaWRlbnRpZmllck51bWJlcikKLSAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIE5vTm9kZTsKKyAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC5t
X3N0b3JhZ2VBY2Nlc3NEYXRhW25vZGUtPnN0b3JhZ2VBY2Nlc3NEYXRhSW5kZXgoKV0uaWRlbnRp
Zmllck51bWJlciA9PSBpZGVudGlmaWVyTnVtYmVyKQorICAgICAgICAgICAgICAgICAgICByZXR1
cm4gMDsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAKICAgICAgICAg
ICAgIGNhc2UgUHV0QnlPZmZzZXQ6Ci0gICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGgubV9zdG9y
YWdlQWNjZXNzRGF0YVtub2RlLnN0b3JhZ2VBY2Nlc3NEYXRhSW5kZXgoKV0uaWRlbnRpZmllck51
bWJlciA9PSBpZGVudGlmaWVyTnVtYmVyKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChub2Rl
LmNoaWxkMSgpID09IGNoaWxkMSkgLy8gTXVzdCBiZSBzYW1lIHByb3BlcnR5IHN0b3JhZ2UuCi0g
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW5kZXg7Ci0gICAgICAgICAgICAgICAgICAg
IHJldHVybiBOb05vZGU7CisgICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGgubV9zdG9yYWdlQWNj
ZXNzRGF0YVtub2RlLT5zdG9yYWdlQWNjZXNzRGF0YUluZGV4KCldLmlkZW50aWZpZXJOdW1iZXIg
PT0gaWRlbnRpZmllck51bWJlcikgeworICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS0+Y2hp
bGQxKCkgPT0gY2hpbGQxKSAvLyBNdXN0IGJlIHNhbWUgcHJvcGVydHkgc3RvcmFnZS4KKyAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBub2RlOworICAgICAgICAgICAgICAgICAgICByZXR1
cm4gMDsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICAgICAgCkBAIC02ODgsNDUgKzY3Niw0NCBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAg
ICAgICAvLyBjaGFuZ2UuCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICByZXR1cm4gTm9Ob2RlOworICAgICAgICAgICAgICAgIHJl
dHVybiAwOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAg
ICAgICAgICBpZiAobV9ncmFwaC5jbG9iYmVyc1dvcmxkKGluZGV4KSkKLSAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIE5vTm9kZTsKKyAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC5jbG9iYmVy
c1dvcmxkKG5vZGUpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChub2RlLmNhbkV4aXQo
KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gTm9Ob2RlOworICAgICAgICAgICAgaWYgKG5vZGUt
PmNhbkV4aXQoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgfQotICAgICAg
ICByZXR1cm4gTm9Ob2RlOworICAgICAgICByZXR1cm4gMDsKICAgICB9CiAgICAgCi0gICAgTm9k
ZUluZGV4IGdldFByb3BlcnR5U3RvcmFnZUxvYWRFbGltaW5hdGlvbihOb2RlSW5kZXggY2hpbGQx
KQorICAgIE5vZGUqIGdldFByb3BlcnR5U3RvcmFnZUxvYWRFbGltaW5hdGlvbihOb2RlKiBjaGls
ZDEpCiAgICAgewogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2luZGV4SW5CbG9jazsgaS0t
OykgewotICAgICAgICAgICAgTm9kZUluZGV4IGluZGV4ID0gbV9jdXJyZW50QmxvY2stPmF0KGkp
OwotICAgICAgICAgICAgaWYgKGluZGV4ID09IGNoaWxkMSkgCisgICAgICAgICAgICBOb2RlKiBu
b2RlID0gbV9jdXJyZW50QmxvY2stPmF0KGkpOworICAgICAgICAgICAgaWYgKG5vZGUgPT0gY2hp
bGQxKSAKICAgICAgICAgICAgICAgICBicmVhazsKIAotICAgICAgICAgICAgTm9kZSYgbm9kZSA9
IG1fZ3JhcGhbaW5kZXhdOwotICAgICAgICAgICAgaWYgKCFub2RlLnNob3VsZEdlbmVyYXRlKCkp
CisgICAgICAgICAgICBpZiAoIW5vZGUtPnNob3VsZEdlbmVyYXRlKCkpCiAgICAgICAgICAgICAg
ICAgY29udGludWU7Ci0gICAgICAgICAgICBzd2l0Y2ggKG5vZGUub3AoKSkgeworICAgICAgICAg
ICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CiAgICAgICAgICAgICBjYXNlIEdldEJ1dHRlcmZseToK
LSAgICAgICAgICAgICAgICBpZiAobm9kZS5jaGlsZDEoKSA9PSBjaGlsZDEpCi0gICAgICAgICAg
ICAgICAgICAgIHJldHVybiBpbmRleDsKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQx
KCkgPT0gY2hpbGQxKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gbm9kZTsKICAgICAgICAg
ICAgICAgICBicmVhazsKIAogICAgICAgICAgICAgY2FzZSBBbGxvY2F0ZVByb3BlcnR5U3RvcmFn
ZToKICAgICAgICAgICAgIGNhc2UgUmVhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZToKICAgICAgICAg
ICAgICAgICAvLyBJZiB3ZSBjYW4gY2hlYXBseSBwcm92ZSB0aGlzIGlzIGEgY2hhbmdlIHRvIG91
ciBvYmplY3QncyBzdG9yYWdlLCB3ZQogICAgICAgICAgICAgICAgIC8vIGNhbiBvcHRpbWl6ZSBh
bmQgdXNlIGl0cyByZXN1bHQuCi0gICAgICAgICAgICAgICAgaWYgKG5vZGUuY2hpbGQxKCkgPT0g
Y2hpbGQxKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW5kZXg7CisgICAgICAgICAgICAg
ICAgaWYgKG5vZGUtPmNoaWxkMSgpID09IGNoaWxkMSkKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIG5vZGU7CiAgICAgICAgICAgICAgICAgLy8gT3RoZXJ3aXNlLCB3ZSBjdXJyZW50bHkgY2Fu
J3QgcHJvdmUgdGhhdCB0aGlzIGRvZXNuJ3QgY2hhbmdlIG91ciBvYmplY3QncwogICAgICAgICAg
ICAgICAgIC8vIHN0b3JhZ2UsIHNvIHdlIGNvbnNlcnZhdGl2ZWx5IGFzc3VtZSB0aGF0IGl0IG1h
eSBjaGFuZ2UgdGhlIHN0b3JhZ2UKICAgICAgICAgICAgICAgICAvLyBwb2ludGVyIG9mIGFueSBv
YmplY3QsIGluY2x1ZGluZyBvdXJzLgotICAgICAgICAgICAgICAgIHJldHVybiBOb05vZGU7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBj
YXNlIFB1dEJ5T2Zmc2V0OgogICAgICAgICAgICAgY2FzZSBQdXRTdHJ1Y3R1cmU6CkBAIC03NDIs
MzQgKzcyOSwzMyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICAvLyBjaGFuZ2UuCiAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICByZXR1cm4gTm9Ob2RlOworICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAg
ICAgICAgIAogICAgICAgICAgICAgY2FzZSBBcnJheWlmeToKICAgICAgICAgICAgIGNhc2UgQXJy
YXlpZnlUb1N0cnVjdHVyZToKICAgICAgICAgICAgICAgICAvLyBXZSBjb3VsZCBjaGVjayBpZiB0
aGUgYXJyYXlpZmljYXRpb24gY291bGQgYWZmZWN0IG91ciBidXR0ZXJmbHkuCiAgICAgICAgICAg
ICAgICAgLy8gQnV0IHRoYXQgc2VlbXMgbGlrZSBpdCB3b3VsZCB0YWtlIEVmZm9ydC4KLSAgICAg
ICAgICAgICAgICByZXR1cm4gTm9Ob2RlOworICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAg
ICAgICAgICAgICAgIAogICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBpZiAo
bV9ncmFwaC5jbG9iYmVyc1dvcmxkKGluZGV4KSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IE5vTm9kZTsKKyAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC5jbG9iYmVyc1dvcmxkKG5vZGUp
KQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICByZXR1cm4gTm9Ob2RlOworICAgICAg
ICByZXR1cm4gMDsKICAgICB9CiAgICAgCi0gICAgYm9vbCBjaGVja0FycmF5RWxpbWluYXRpb24o
Tm9kZUluZGV4IGNoaWxkMSwgQXJyYXlNb2RlIGFycmF5TW9kZSkKKyAgICBib29sIGNoZWNrQXJy
YXlFbGltaW5hdGlvbihOb2RlKiBjaGlsZDEsIEFycmF5TW9kZSBhcnJheU1vZGUpCiAgICAgewog
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2luZGV4SW5CbG9jazsgaS0tOykgewotICAgICAg
ICAgICAgTm9kZUluZGV4IGluZGV4ID0gbV9jdXJyZW50QmxvY2stPmF0KGkpOwotICAgICAgICAg
ICAgaWYgKGluZGV4ID09IGNoaWxkMSkgCisgICAgICAgICAgICBOb2RlKiBub2RlID0gbV9jdXJy
ZW50QmxvY2stPmF0KGkpOworICAgICAgICAgICAgaWYgKG5vZGUgPT0gY2hpbGQxKSAKICAgICAg
ICAgICAgICAgICBicmVhazsKIAotICAgICAgICAgICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhbaW5k
ZXhdOwotICAgICAgICAgICAgaWYgKCFub2RlLnNob3VsZEdlbmVyYXRlKCkpCisgICAgICAgICAg
ICBpZiAoIW5vZGUtPnNob3VsZEdlbmVyYXRlKCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7
Ci0gICAgICAgICAgICBzd2l0Y2ggKG5vZGUub3AoKSkgeworICAgICAgICAgICAgc3dpdGNoIChu
b2RlLT5vcCgpKSB7CiAgICAgICAgICAgICBjYXNlIFB1dEJ5T2Zmc2V0OgogICAgICAgICAgICAg
Y2FzZSBQdXRTdHJ1Y3R1cmU6CiAgICAgICAgICAgICAgICAgLy8gQ2hhbmdpbmcgdGhlIHN0cnVj
dHVyZSBvciBwdXR0aW5nIHRvIHRoZSBzdG9yYWdlIGNhbm5vdApAQCAtNzc3LDcgKzc2Myw3IEBA
IHByaXZhdGU6CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgCiAgICAg
ICAgICAgICBjYXNlIENoZWNrQXJyYXk6Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGUuY2hpbGQx
KCkgPT0gY2hpbGQxICYmIG5vZGUuYXJyYXlNb2RlKCkgPT0gYXJyYXlNb2RlKQorICAgICAgICAg
ICAgICAgIGlmIChub2RlLT5jaGlsZDEoKSA9PSBjaGlsZDEgJiYgbm9kZS0+YXJyYXlNb2RlKCkg
PT0gYXJyYXlNb2RlKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAKQEAgLTc4OCw3ICs3NzQsNyBAQCBwcml2
YXRlOgogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgICAgICAKICAg
ICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGguY2xvYmJlcnNX
b3JsZChpbmRleCkpCisgICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGguY2xvYmJlcnNXb3JsZChu
b2RlKSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgfQpAQCAtNzk2LDIwICs3ODIsMTkgQEAgcHJpdmF0ZToKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIE5vZGVJbmRleCBnZXRJbmRleGVkUHJv
cGVydHlTdG9yYWdlTG9hZEVsaW1pbmF0aW9uKE5vZGVJbmRleCBjaGlsZDEsIEFycmF5TW9kZSBh
cnJheU1vZGUpCisgICAgTm9kZSogZ2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZUxvYWRFbGltaW5h
dGlvbihOb2RlKiBjaGlsZDEsIEFycmF5TW9kZSBhcnJheU1vZGUpCiAgICAgewogICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSBtX2luZGV4SW5CbG9jazsgaS0tOykgewotICAgICAgICAgICAgTm9k
ZUluZGV4IGluZGV4ID0gbV9jdXJyZW50QmxvY2stPmF0KGkpOwotICAgICAgICAgICAgaWYgKGlu
ZGV4ID09IGNoaWxkMSkgCisgICAgICAgICAgICBOb2RlKiBub2RlID0gbV9jdXJyZW50QmxvY2st
PmF0KGkpOworICAgICAgICAgICAgaWYgKG5vZGUgPT0gY2hpbGQxKSAKICAgICAgICAgICAgICAg
ICBicmVhazsKIAotICAgICAgICAgICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhbaW5kZXhdOwotICAg
ICAgICAgICAgaWYgKCFub2RlLnNob3VsZEdlbmVyYXRlKCkpCisgICAgICAgICAgICBpZiAoIW5v
ZGUtPnNob3VsZEdlbmVyYXRlKCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAg
ICAgICBzd2l0Y2ggKG5vZGUub3AoKSkgeworICAgICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgp
KSB7CiAgICAgICAgICAgICBjYXNlIEdldEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2U6IHsKLSAgICAg
ICAgICAgICAgICBpZiAobm9kZS5jaGlsZDEoKSA9PSBjaGlsZDEgJiYgbm9kZS5hcnJheU1vZGUo
KSA9PSBhcnJheU1vZGUpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBpbmRleDsKKyAgICAg
ICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCkgPT0gY2hpbGQxICYmIG5vZGUtPmFycmF5TW9k
ZSgpID09IGFycmF5TW9kZSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGU7CiAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAKQEAgLTgyMCw4MSArODA1LDc5IEBA
IHByaXZhdGU6CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgCiAgICAg
ICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLmNsb2JiZXJzV29y
bGQoaW5kZXgpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gTm9Ob2RlOworICAgICAgICAg
ICAgICAgIGlmIChtX2dyYXBoLmNsb2JiZXJzV29ybGQobm9kZSkpCisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiAwOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAg
ICAgICB9Ci0gICAgICAgIHJldHVybiBOb05vZGU7CisgICAgICAgIHJldHVybiAwOwogICAgIH0K
ICAgICAKLSAgICBOb2RlSW5kZXggZ2V0TXlTY29wZUxvYWRFbGltaW5hdGlvbihJbmxpbmVDYWxs
RnJhbWUqIGlubGluZUNhbGxGcmFtZSkKKyAgICBOb2RlKiBnZXRNeVNjb3BlTG9hZEVsaW1pbmF0
aW9uKElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lKQogICAgIHsKICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gbV9pbmRleEluQmxvY2s7IGktLTspIHsKLSAgICAgICAgICAgIE5vZGVJ
bmRleCBpbmRleCA9IG1fY3VycmVudEJsb2NrLT5hdChpKTsKLSAgICAgICAgICAgIE5vZGUmIG5v
ZGUgPSBtX2dyYXBoW2luZGV4XTsKLSAgICAgICAgICAgIGlmICghbm9kZS5zaG91bGRHZW5lcmF0
ZSgpKQorICAgICAgICAgICAgTm9kZSogbm9kZSA9IG1fY3VycmVudEJsb2NrLT5hdChpKTsKKyAg
ICAgICAgICAgIGlmICghbm9kZS0+c2hvdWxkR2VuZXJhdGUoKSkKICAgICAgICAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgICAgIGlmIChub2RlLmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1l
ICE9IGlubGluZUNhbGxGcmFtZSkKKyAgICAgICAgICAgIGlmIChub2RlLT5jb2RlT3JpZ2luLmlu
bGluZUNhbGxGcmFtZSAhPSBpbmxpbmVDYWxsRnJhbWUpCiAgICAgICAgICAgICAgICAgY29udGlu
dWU7Ci0gICAgICAgICAgICBzd2l0Y2ggKG5vZGUub3AoKSkgeworICAgICAgICAgICAgc3dpdGNo
IChub2RlLT5vcCgpKSB7CiAgICAgICAgICAgICBjYXNlIENyZWF0ZUFjdGl2YXRpb246CiAgICAg
ICAgICAgICAgICAgLy8gVGhpcyBtYXkgY2F1c2UgdXMgdG8gcmV0dXJuIGEgZGlmZmVyZW50IHNj
b3BlLgotICAgICAgICAgICAgICAgIHJldHVybiBOb05vZGU7CisgICAgICAgICAgICAgICAgcmV0
dXJuIDA7CiAgICAgICAgICAgICBjYXNlIEdldE15U2NvcGU6Ci0gICAgICAgICAgICAgICAgcmV0
dXJuIGluZGV4OworICAgICAgICAgICAgICAgIHJldHVybiBub2RlOwogICAgICAgICAgICAgY2Fz
ZSBTZXRNeVNjb3BlOgotICAgICAgICAgICAgICAgIHJldHVybiBub2RlLmNoaWxkMSgpLmluZGV4
KCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKICAgICAg
ICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAg
ICAgICAgIH0KLSAgICAgICAgcmV0dXJuIE5vTm9kZTsKKyAgICAgICAgcmV0dXJuIDA7CiAgICAg
fQogICAgIAotICAgIE5vZGVJbmRleCBnZXRMb2NhbExvYWRFbGltaW5hdGlvbihWaXJ0dWFsUmVn
aXN0ZXIgbG9jYWwsIE5vZGVJbmRleCYgcmVsZXZhbnRMb2NhbE9wLCBib29sIGNhcmVBYm91dENs
b2JiZXJpbmcpCisgICAgTm9kZSogZ2V0TG9jYWxMb2FkRWxpbWluYXRpb24oVmlydHVhbFJlZ2lz
dGVyIGxvY2FsLCBOb2RlKiYgcmVsZXZhbnRMb2NhbE9wLCBib29sIGNhcmVBYm91dENsb2JiZXJp
bmcpCiAgICAgewotICAgICAgICByZWxldmFudExvY2FsT3AgPSBOb05vZGU7CisgICAgICAgIHJl
bGV2YW50TG9jYWxPcCA9IDA7CiAgICAgICAgIAogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBt
X2luZGV4SW5CbG9jazsgaS0tOykgewotICAgICAgICAgICAgTm9kZUluZGV4IGluZGV4ID0gbV9j
dXJyZW50QmxvY2stPmF0KGkpOwotICAgICAgICAgICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhbaW5k
ZXhdOwotICAgICAgICAgICAgaWYgKCFub2RlLnNob3VsZEdlbmVyYXRlKCkpCisgICAgICAgICAg
ICBOb2RlKiBub2RlID0gbV9jdXJyZW50QmxvY2stPmF0KGkpOworICAgICAgICAgICAgaWYgKCFu
b2RlLT5zaG91bGRHZW5lcmF0ZSgpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAg
ICAgICAgc3dpdGNoIChub2RlLm9wKCkpIHsKKyAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3Ao
KSkgewogICAgICAgICAgICAgY2FzZSBHZXRMb2NhbDoKLSAgICAgICAgICAgICAgICBpZiAobm9k
ZS5sb2NhbCgpID09IGxvY2FsKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJlbGV2YW50TG9jYWxP
cCA9IGluZGV4OwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW5kZXg7CisgICAgICAgICAg
ICAgICAgaWYgKG5vZGUtPmxvY2FsKCkgPT0gbG9jYWwpIHsKKyAgICAgICAgICAgICAgICAgICAg
cmVsZXZhbnRMb2NhbE9wID0gbm9kZTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGU7
CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
ICAgIAogICAgICAgICAgICAgY2FzZSBHZXRMb2NhbFVubGlua2VkOgotICAgICAgICAgICAgICAg
IGlmIChub2RlLnVubGlua2VkTG9jYWwoKSA9PSBsb2NhbCkgewotICAgICAgICAgICAgICAgICAg
ICByZWxldmFudExvY2FsT3AgPSBpbmRleDsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlu
ZGV4OworICAgICAgICAgICAgICAgIGlmIChub2RlLT51bmxpbmtlZExvY2FsKCkgPT0gbG9jYWwp
IHsKKyAgICAgICAgICAgICAgICAgICAgcmVsZXZhbnRMb2NhbE9wID0gbm9kZTsKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIG5vZGU7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgY2FzZSBTZXRMb2NhbDoK
LSAgICAgICAgICAgICAgICBpZiAobm9kZS5sb2NhbCgpID09IGxvY2FsKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIHJlbGV2YW50TG9jYWxPcCA9IGluZGV4OwotICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gbm9kZS5jaGlsZDEoKS5pbmRleCgpOworICAgICAgICAgICAgICAgIGlmIChub2RlLT5s
b2NhbCgpID09IGxvY2FsKSB7CisgICAgICAgICAgICAgICAgICAgIHJlbGV2YW50TG9jYWxPcCA9
IG5vZGU7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBub2RlLT5jaGlsZDEoKS5ub2RlKCk7
CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
ICAgIAogICAgICAgICAgICAgY2FzZSBQdXRTY29wZWRWYXI6Ci0gICAgICAgICAgICAgICAgaWYg
KHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4obm9kZS52YXJOdW1iZXIoKSkgPT0gbG9jYWwp
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBOb05vZGU7CisgICAgICAgICAgICAgICAgaWYg
KHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4obm9kZS0+dmFyTnVtYmVyKCkpID09IGxvY2Fs
KQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAg
aWYgKGNhcmVBYm91dENsb2JiZXJpbmcgJiYgbV9ncmFwaC5jbG9iYmVyc1dvcmxkKGluZGV4KSkK
LSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5vTm9kZTsKKyAgICAgICAgICAgICAgICBpZiAo
Y2FyZUFib3V0Q2xvYmJlcmluZyAmJiBtX2dyYXBoLmNsb2JiZXJzV29ybGQobm9kZSkpCisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIHJldHVybiBOb05vZGU7CisgICAgICAgIHJldHVy
biAwOwogICAgIH0KICAgICAKICAgICBzdHJ1Y3QgU2V0TG9jYWxTdG9yZUVsaW1pbmF0aW9uUmVz
dWx0IHsKQEAgLTkxMCw1MSArODkzLDUwIEBAIHByaXZhdGU6CiAgICAgICAgIGJvb2wgbWF5Q2xv
YmJlcldvcmxkOwogICAgIH07CiAgICAgU2V0TG9jYWxTdG9yZUVsaW1pbmF0aW9uUmVzdWx0IHNl
dExvY2FsU3RvcmVFbGltaW5hdGlvbigKLSAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGxvY2FsLCBO
b2RlSW5kZXggZXhwZWN0ZWROb2RlSW5kZXgpCisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBsb2Nh
bCwgTm9kZSogZXhwZWN0ZWROb2RlSW5kZXgpCiAgICAgewogICAgICAgICBTZXRMb2NhbFN0b3Jl
RWxpbWluYXRpb25SZXN1bHQgcmVzdWx0OwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2lu
ZGV4SW5CbG9jazsgaS0tOykgewotICAgICAgICAgICAgTm9kZUluZGV4IGluZGV4ID0gbV9jdXJy
ZW50QmxvY2stPmF0KGkpOwotICAgICAgICAgICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhbaW5kZXhd
OwotICAgICAgICAgICAgaWYgKCFub2RlLnNob3VsZEdlbmVyYXRlKCkpCisgICAgICAgICAgICBO
b2RlKiBub2RlID0gbV9jdXJyZW50QmxvY2stPmF0KGkpOworICAgICAgICAgICAgaWYgKCFub2Rl
LT5zaG91bGRHZW5lcmF0ZSgpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAg
ICAgc3dpdGNoIChub2RlLm9wKCkpIHsKKyAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkg
ewogICAgICAgICAgICAgY2FzZSBHZXRMb2NhbDoKICAgICAgICAgICAgIGNhc2UgRmx1c2g6Ci0g
ICAgICAgICAgICAgICAgaWYgKG5vZGUubG9jYWwoKSA9PSBsb2NhbCkKKyAgICAgICAgICAgICAg
ICBpZiAobm9kZS0+bG9jYWwoKSA9PSBsb2NhbCkKICAgICAgICAgICAgICAgICAgICAgcmVzdWx0
Lm1heUJlQWNjZXNzZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgICAgIAogICAgICAgICAgICAgY2FzZSBHZXRMb2NhbFVubGlua2VkOgotICAgICAgICAgICAg
ICAgIGlmIChub2RlLnVubGlua2VkTG9jYWwoKSA9PSBsb2NhbCkKKyAgICAgICAgICAgICAgICBp
ZiAobm9kZS0+dW5saW5rZWRMb2NhbCgpID09IGxvY2FsKQogICAgICAgICAgICAgICAgICAgICBy
ZXN1bHQubWF5QmVBY2Nlc3NlZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICAgICAgCiAgICAgICAgICAgICBjYXNlIFNldExvY2FsOiB7Ci0gICAgICAgICAgICAg
ICAgaWYgKG5vZGUubG9jYWwoKSAhPSBsb2NhbCkKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+
bG9jYWwoKSAhPSBsb2NhbCkKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICAgICAgaWYgKGluZGV4ICE9IGV4cGVjdGVkTm9kZUluZGV4KQogICAgICAgICAgICAgICAgICAg
ICByZXN1bHQubWF5QmVBY2Nlc3NlZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgaWYgKG1fZ3Jh
cGhbaW5kZXhdLnJlZkNvdW50KCkgPiAxKQorICAgICAgICAgICAgICAgIGlmIChub2RlLT5yZWZD
b3VudCgpID4gMSkKICAgICAgICAgICAgICAgICAgICAgcmVzdWx0Lm1heUJlQWNjZXNzZWQgPSB0
cnVlOwogICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICAgCiAgICAgICAgICAgICBjYXNlIEdldFNjb3BlZFZhcjoKLSAgICAgICAgICAg
ICAgICBpZiAoc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihub2RlLnZhck51bWJlcigpKSA9
PSBsb2NhbCkKKyAgICAgICAgICAgICAgICBpZiAoc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVy
Pihub2RlLT52YXJOdW1iZXIoKSkgPT0gbG9jYWwpCiAgICAgICAgICAgICAgICAgICAgIHJlc3Vs
dC5tYXlCZUFjY2Vzc2VkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgICAgICAKICAgICAgICAgICAgIGNhc2UgR2V0TXlTY29wZToKICAgICAgICAgICAgIGNhc2Ug
U2tpcFRvcFNjb3BlOgotICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLnVuY2hlY2tlZEFjdGl2
YXRpb25SZWdpc3RlckZvcihub2RlLmNvZGVPcmlnaW4pID09IGxvY2FsKQorICAgICAgICAgICAg
ICAgIGlmIChtX2dyYXBoLnVuY2hlY2tlZEFjdGl2YXRpb25SZWdpc3RlckZvcihub2RlLT5jb2Rl
T3JpZ2luKSA9PSBsb2NhbCkKICAgICAgICAgICAgICAgICAgICAgcmVzdWx0Lm1heUJlQWNjZXNz
ZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIAogICAg
ICAgICAgICAgY2FzZSBDaGVja0FyZ3VtZW50c05vdENyZWF0ZWQ6CiAgICAgICAgICAgICBjYXNl
IEdldE15QXJndW1lbnRzTGVuZ3RoOgogICAgICAgICAgICAgY2FzZSBHZXRNeUFyZ3VtZW50c0xl
bmd0aFNhZmU6Ci0gICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGgudW5jaGVja2VkQXJndW1lbnRz
UmVnaXN0ZXJGb3Iobm9kZS5jb2RlT3JpZ2luKSA9PSBsb2NhbCkKKyAgICAgICAgICAgICAgICBp
ZiAobV9ncmFwaC51bmNoZWNrZWRBcmd1bWVudHNSZWdpc3RlckZvcihub2RlLT5jb2RlT3JpZ2lu
KSA9PSBsb2NhbCkKICAgICAgICAgICAgICAgICAgICAgcmVzdWx0Lm1heUJlQWNjZXNzZWQgPSB0
cnVlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIApAQCAtOTY1LDcg
Kzk0Nyw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBjYXNlIEdl
dEJ5VmFsOgogICAgICAgICAgICAgICAgIC8vIElmIHRoaXMgaXMgYWNjZXNzaW5nIGFyZ3VtZW50
cyB0aGVuIGl0J3MgcG90ZW50aWFsbHkgYWNjZXNzaW5nIGxvY2Fscy4KLSAgICAgICAgICAgICAg
ICBpZiAobV9ncmFwaFtub2RlLmNoaWxkMSgpXS5zaG91bGRTcGVjdWxhdGVBcmd1bWVudHMoKSkK
KyAgICAgICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZUFyZ3Vt
ZW50cygpKQogICAgICAgICAgICAgICAgICAgICByZXN1bHQubWF5QmVBY2Nlc3NlZCA9IHRydWU7
CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgCkBAIC05ODIsOCArOTY0
LDggQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXN1bHQubWF5RXhpdCB8PSBub2RlLmNh
bkV4aXQoKTsKLSAgICAgICAgICAgIHJlc3VsdC5tYXlDbG9iYmVyV29ybGQgfD0gbV9ncmFwaC5j
bG9iYmVyc1dvcmxkKGluZGV4KTsKKyAgICAgICAgICAgIHJlc3VsdC5tYXlFeGl0IHw9IG5vZGUt
PmNhbkV4aXQoKTsKKyAgICAgICAgICAgIHJlc3VsdC5tYXlDbG9iYmVyV29ybGQgfD0gbV9ncmFw
aC5jbG9iYmVyc1dvcmxkKG5vZGUpOwogICAgICAgICB9CiAgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwogICAgICAgICAvLyBCZSBzYWZlIGluIHJlbGVhc2UgbW9kZS4KQEAgLTk5OCw2MiAr
OTgwLDYxIEBAIHByaXZhdGU6CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIAogICAgICAg
ICAvLyBDaGVjayBpZiB0aGVyZSBpcyBhbnkgcmVwbGFjZW1lbnQuCi0gICAgICAgIE5vZGVJbmRl
eCByZXBsYWNlbWVudCA9IG1fZ3JhcGhbY2hpbGQuaW5kZXgoKV0ucmVwbGFjZW1lbnQ7Ci0gICAg
ICAgIGlmIChyZXBsYWNlbWVudCA9PSBOb05vZGUpCisgICAgICAgIE5vZGUqIHJlcGxhY2VtZW50
ID0gY2hpbGQtPnJlcGxhY2VtZW50OworICAgICAgICBpZiAoIXJlcGxhY2VtZW50KQogICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICAKLSAgICAgICAgY2hpbGQuc2V0SW5kZXgocmVwbGFjZW1l
bnQpOworICAgICAgICBjaGlsZC5zZXROb2RlKHJlcGxhY2VtZW50KTsKICAgICAgICAgCiAgICAg
ICAgIC8vIFRoZXJlIGlzIGRlZmluaXRlbHkgYSByZXBsYWNlbWVudC4gQXNzZXJ0IHRoYXQgdGhl
IHJlcGxhY2VtZW50IGRvZXMgbm90CiAgICAgICAgIC8vIGhhdmUgYSByZXBsYWNlbWVudC4KLSAg
ICAgICAgQVNTRVJUKG1fZ3JhcGhbY2hpbGQuaW5kZXgoKV0ucmVwbGFjZW1lbnQgPT0gTm9Ob2Rl
KTsKKyAgICAgICAgQVNTRVJUKCFjaGlsZC0+cmVwbGFjZW1lbnQpOwogICAgICAgICAKICAgICAg
ICAgaWYgKGFkZFJlZikKICAgICAgICAgICAgIG1fZ3JhcGgucmVmKGNoaWxkKTsKICAgICB9CiAg
ICAgCi0gICAgdm9pZCBlbGltaW5hdGVJcnJlbGV2YW50UGhhbnRvbUNoaWxkcmVuKE5vZGUmIG5v
ZGUpCisgICAgdm9pZCBlbGltaW5hdGVJcnJlbGV2YW50UGhhbnRvbUNoaWxkcmVuKE5vZGUqIG5v
ZGUpCiAgICAgewotICAgICAgICBBU1NFUlQobm9kZS5vcCgpID09IFBoYW50b20pOworICAgICAg
ICBBU1NFUlQobm9kZS0+b3AoKSA9PSBQaGFudG9tKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IEFkamFjZW5jeUxpc3Q6OlNpemU7ICsraSkgewotICAgICAgICAgICAgRWRnZSBl
ZGdlID0gbm9kZS5jaGlsZHJlbi5jaGlsZChpKTsKKyAgICAgICAgICAgIEVkZ2UgZWRnZSA9IG5v
ZGUtPmNoaWxkcmVuLmNoaWxkKGkpOwogICAgICAgICAgICAgaWYgKCFlZGdlKQogICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgaWYgKG1fZ3JhcGhbZWRnZV0uZmxhZ3MoKSAm
IE5vZGVSZWxldmFudFRvT1NSKQorICAgICAgICAgICAgaWYgKGVkZ2UtPmZsYWdzKCkgJiBOb2Rl
UmVsZXZhbnRUb09TUikKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIAog
I2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKLSAgICAgICAgICAgIGRh
dGFMb2coIiAgIEVsaW1pbmF0aW5nIGVkZ2UgQCIsIG1fY29tcGlsZUluZGV4LCAiIC0+IEAiLCBl
ZGdlLmluZGV4KCkpOworICAgICAgICAgICAgZGF0YUxvZygiICAgRWxpbWluYXRpbmcgZWRnZSBA
IiwgbV9jdXJyZW50Tm9kZS0+aW5kZXgoKSwgIiAtPiBAIiwgZWRnZS0+aW5kZXgoKSk7CiAjZW5k
aWYKICAgICAgICAgICAgIG1fZ3JhcGguZGVyZWYoZWRnZSk7Ci0gICAgICAgICAgICBub2RlLmNo
aWxkcmVuLnJlbW92ZUVkZ2VGcm9tQmFnKGktLSk7CisgICAgICAgICAgICBub2RlLT5jaGlsZHJl
bi5yZW1vdmVFZGdlRnJvbUJhZyhpLS0pOwogICAgICAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsK
ICAgICAgICAgfQogICAgIH0KICAgICAKICAgICBlbnVtIFByZWRpY3Rpb25IYW5kbGluZ01vZGUg
eyBSZXF1aXJlU2FtZVByZWRpY3Rpb24sIEFsbG93UHJlZGljdGlvbk1pc21hdGNoIH07Ci0gICAg
Ym9vbCBzZXRSZXBsYWNlbWVudChOb2RlSW5kZXggcmVwbGFjZW1lbnQsIFByZWRpY3Rpb25IYW5k
bGluZ01vZGUgcHJlZGljdGlvbkhhbmRsaW5nTW9kZSA9IFJlcXVpcmVTYW1lUHJlZGljdGlvbikK
KyAgICBib29sIHNldFJlcGxhY2VtZW50KE5vZGUqIHJlcGxhY2VtZW50LCBQcmVkaWN0aW9uSGFu
ZGxpbmdNb2RlIHByZWRpY3Rpb25IYW5kbGluZ01vZGUgPSBSZXF1aXJlU2FtZVByZWRpY3Rpb24p
CiAgICAgewotICAgICAgICBpZiAocmVwbGFjZW1lbnQgPT0gTm9Ob2RlKQorICAgICAgICBpZiAo
IXJlcGxhY2VtZW50KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAKICAgICAg
ICAgLy8gQmUgc2FmZS4gRG9uJ3QgdHJ5IHRvIHBlcmZvcm0gcmVwbGFjZW1lbnRzIGlmIHRoZSBw
cmVkaWN0aW9ucyBkb24ndAogICAgICAgICAvLyBhZ3JlZS4KICAgICAgICAgaWYgKHByZWRpY3Rp
b25IYW5kbGluZ01vZGUgPT0gUmVxdWlyZVNhbWVQcmVkaWN0aW9uCi0gICAgICAgICAgICAmJiBt
X2dyYXBoW21fY29tcGlsZUluZGV4XS5wcmVkaWN0aW9uKCkgIT0gbV9ncmFwaFtyZXBsYWNlbWVu
dF0ucHJlZGljdGlvbigpKQorICAgICAgICAgICAgJiYgbV9jdXJyZW50Tm9kZS0+cHJlZGljdGlv
bigpICE9IHJlcGxhY2VtZW50LT5wcmVkaWN0aW9uKCkpCiAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgICAgIAogI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkK
LSAgICAgICAgZGF0YUxvZ0YoIiAgIFJlcGxhY2luZyBAJXUgLT4gQCV1IiwgbV9jb21waWxlSW5k
ZXgsIHJlcGxhY2VtZW50KTsKKyAgICAgICAgZGF0YUxvZ0YoIiAgIFJlcGxhY2luZyBAJXUgLT4g
QCV1IiwgbV9jb21waWxlTm9kZS0+aW5kZXgoKSwgcmVwbGFjZW1lbnQtPmluZGV4KCkpOwogI2Vu
ZGlmCiAgICAgICAgIAotICAgICAgICBOb2RlJiBub2RlID0gbV9ncmFwaFttX2NvbXBpbGVJbmRl
eF07Ci0gICAgICAgIG5vZGUuc2V0T3BBbmREZWZhdWx0RmxhZ3MoUGhhbnRvbSk7Ci0gICAgICAg
IG5vZGUuc2V0UmVmQ291bnQoMSk7Ci0gICAgICAgIGVsaW1pbmF0ZUlycmVsZXZhbnRQaGFudG9t
Q2hpbGRyZW4obm9kZSk7CisgICAgICAgIG1fY3VycmVudE5vZGUtPnNldE9wQW5kRGVmYXVsdEZs
YWdzKFBoYW50b20pOworICAgICAgICBtX2N1cnJlbnROb2RlLT5zZXRSZWZDb3VudCgxKTsKKyAg
ICAgICAgZWxpbWluYXRlSXJyZWxldmFudFBoYW50b21DaGlsZHJlbihtX2N1cnJlbnROb2RlKTsK
ICAgICAgICAgCiAgICAgICAgIC8vIEF0IHRoaXMgcG9pbnQgd2Ugd2lsbCBlbGltaW5hdGUgYWxs
IHJlZmVyZW5jZXMgdG8gdGhpcyBub2RlLgotICAgICAgICBtX2dyYXBoW21fY29tcGlsZUluZGV4
XS5yZXBsYWNlbWVudCA9IHJlcGxhY2VtZW50OworICAgICAgICBtX2N1cnJlbnROb2RlLT5yZXBs
YWNlbWVudCA9IHJlcGxhY2VtZW50OwogICAgICAgICAKICAgICAgICAgbV9jaGFuZ2VkID0gdHJ1
ZTsKICAgICAgICAgCkBAIC0xMDY2LDUxICsxMDQ3LDQ5IEBAIHByaXZhdGU6CiAgICAgICAgIGRh
dGFMb2dGKCIgICBFbGltaW5hdGluZyBAJXUiLCBtX2NvbXBpbGVJbmRleCk7CiAjZW5kaWYKICAg
ICAgICAgCi0gICAgICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW21fY29tcGlsZUluZGV4XTsKLSAg
ICAgICAgQVNTRVJUKG5vZGUucmVmQ291bnQoKSA9PSAxKTsKLSAgICAgICAgQVNTRVJUKG5vZGUu
bXVzdEdlbmVyYXRlKCkpOwotICAgICAgICBub2RlLnNldE9wQW5kRGVmYXVsdEZsYWdzKFBoYW50
b20pOwotICAgICAgICBlbGltaW5hdGVJcnJlbGV2YW50UGhhbnRvbUNoaWxkcmVuKG5vZGUpOwor
ICAgICAgICBBU1NFUlQobV9jdXJyZW50Tm9kZS0+cmVmQ291bnQoKSA9PSAxKTsKKyAgICAgICAg
QVNTRVJUKG1fY3VycmVudE5vZGUtPm11c3RHZW5lcmF0ZSgpKTsKKyAgICAgICAgbV9jdXJyZW50
Tm9kZS0+c2V0T3BBbmREZWZhdWx0RmxhZ3MoUGhhbnRvbSk7CisgICAgICAgIGVsaW1pbmF0ZUly
cmVsZXZhbnRQaGFudG9tQ2hpbGRyZW4obV9jdXJyZW50Tm9kZSk7CiAgICAgICAgIAogICAgICAg
ICBtX2NoYW5nZWQgPSB0cnVlOwogICAgIH0KICAgICAKLSAgICB2b2lkIGVsaW1pbmF0ZShOb2Rl
SW5kZXggbm9kZUluZGV4LCBOb2RlVHlwZSBwaGFudG9tVHlwZSA9IFBoYW50b20pCisgICAgdm9p
ZCBlbGltaW5hdGUoTm9kZSogbm9kZSwgTm9kZVR5cGUgcGhhbnRvbVR5cGUgPSBQaGFudG9tKQog
ICAgIHsKLSAgICAgICAgaWYgKG5vZGVJbmRleCA9PSBOb05vZGUpCisgICAgICAgIGlmICghbm9k
ZSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhbbm9k
ZUluZGV4XTsKLSAgICAgICAgaWYgKG5vZGUucmVmQ291bnQoKSAhPSAxKQorICAgICAgICBpZiAo
bm9kZS0+cmVmQ291bnQoKSAhPSAxKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBBU1NF
UlQobm9kZS5tdXN0R2VuZXJhdGUoKSk7Ci0gICAgICAgIG5vZGUuc2V0T3BBbmREZWZhdWx0Rmxh
Z3MocGhhbnRvbVR5cGUpOworICAgICAgICBBU1NFUlQobm9kZS0+bXVzdEdlbmVyYXRlKCkpOwor
ICAgICAgICBub2RlLT5zZXRPcEFuZERlZmF1bHRGbGFncyhwaGFudG9tVHlwZSk7CiAgICAgICAg
IGlmIChwaGFudG9tVHlwZSA9PSBQaGFudG9tKQogICAgICAgICAgICAgZWxpbWluYXRlSXJyZWxl
dmFudFBoYW50b21DaGlsZHJlbihub2RlKTsKICAgICAgICAgCiAgICAgICAgIG1fY2hhbmdlZCA9
IHRydWU7CiAgICAgfQogICAgIAotICAgIHZvaWQgcGVyZm9ybU5vZGVDU0UoTm9kZSYgbm9kZSkK
KyAgICB2b2lkIHBlcmZvcm1Ob2RlQ1NFKE5vZGUqIG5vZGUpCiAgICAgewotICAgICAgICBib29s
IHNob3VsZEdlbmVyYXRlID0gbm9kZS5zaG91bGRHZW5lcmF0ZSgpOworICAgICAgICBib29sIHNo
b3VsZEdlbmVyYXRlID0gbm9kZS0+c2hvdWxkR2VuZXJhdGUoKTsKIAotICAgICAgICBpZiAobm9k
ZS5mbGFncygpICYgTm9kZUhhc1ZhckFyZ3MpIHsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQg
Y2hpbGRJZHggPSBub2RlLmZpcnN0Q2hpbGQoKTsgY2hpbGRJZHggPCBub2RlLmZpcnN0Q2hpbGQo
KSArIG5vZGUubnVtQ2hpbGRyZW4oKTsgY2hpbGRJZHgrKykKKyAgICAgICAgaWYgKG5vZGUtPmZs
YWdzKCkgJiBOb2RlSGFzVmFyQXJncykgeworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBjaGls
ZElkeCA9IG5vZGUtPmZpcnN0Q2hpbGQoKTsgY2hpbGRJZHggPCBub2RlLT5maXJzdENoaWxkKCkg
KyBub2RlLT5udW1DaGlsZHJlbigpOyBjaGlsZElkeCsrKQogICAgICAgICAgICAgICAgIHBlcmZv
cm1TdWJzdGl0dXRpb24obV9ncmFwaC5tX3ZhckFyZ0NoaWxkcmVuW2NoaWxkSWR4XSwgc2hvdWxk
R2VuZXJhdGUpOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgcGVyZm9ybVN1YnN0aXR1
dGlvbihub2RlLmNoaWxkcmVuLmNoaWxkMSgpLCBzaG91bGRHZW5lcmF0ZSk7Ci0gICAgICAgICAg
ICBwZXJmb3JtU3Vic3RpdHV0aW9uKG5vZGUuY2hpbGRyZW4uY2hpbGQyKCksIHNob3VsZEdlbmVy
YXRlKTsKLSAgICAgICAgICAgIHBlcmZvcm1TdWJzdGl0dXRpb24obm9kZS5jaGlsZHJlbi5jaGls
ZDMoKSwgc2hvdWxkR2VuZXJhdGUpOworICAgICAgICAgICAgcGVyZm9ybVN1YnN0aXR1dGlvbihu
b2RlLT5jaGlsZHJlbi5jaGlsZDEoKSwgc2hvdWxkR2VuZXJhdGUpOworICAgICAgICAgICAgcGVy
Zm9ybVN1YnN0aXR1dGlvbihub2RlLT5jaGlsZHJlbi5jaGlsZDIoKSwgc2hvdWxkR2VuZXJhdGUp
OworICAgICAgICAgICAgcGVyZm9ybVN1YnN0aXR1dGlvbihub2RlLT5jaGlsZHJlbi5jaGlsZDMo
KSwgc2hvdWxkR2VuZXJhdGUpOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBpZiAobm9k
ZS5vcCgpID09IFNldExvY2FsKQotICAgICAgICAgICAgbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5t
ZXJnZUZsYWdzKE5vZGVSZWxldmFudFRvT1NSKTsKKyAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0g
U2V0TG9jYWwpCisgICAgICAgICAgICBub2RlLT5jaGlsZDEoKS0+bWVyZ2VGbGFncyhOb2RlUmVs
ZXZhbnRUb09TUik7CiAgICAgICAgIAogICAgICAgICBpZiAoIXNob3VsZEdlbmVyYXRlKQogICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICAKICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FU
SU9OX1ZFUkJPU0UpCi0gICAgICAgIGRhdGFMb2dGKCIgICAlcyBAJXU6ICIsIEdyYXBoOjpvcE5h
bWUobV9ncmFwaFttX2NvbXBpbGVJbmRleF0ub3AoKSksIG1fY29tcGlsZUluZGV4KTsKKyAgICAg
ICAgZGF0YUxvZ0YoIiAgICVzIEAldTogIiwgR3JhcGg6Om9wTmFtZShub2RlLT5vcCgpKSwgbm9k
ZS0+aW5kZXgoKSk7CiAjZW5kaWYKICAgICAgICAgCiAgICAgICAgIC8vIE5PVEU6IHRoZXJlIGFy
ZSBzb21lIG5vZGVzIHRoYXQgd2UgZGVsaWJlcmF0ZWx5IGRvbid0IENTRSBldmVuIHRob3VnaCB3
ZQpAQCAtMTEyMiwxMCArMTEwMSwxMCBAQCBwcml2YXRlOgogICAgICAgICAvLyBUb1ByaW1pdGl2
ZSwgYnV0IHdlIGNvdWxkIGNoYW5nZSB0aGF0IHdpdGggc29tZSBzcGVjdWxhdGlvbnMgaWYgd2Ug
cmVhbGx5CiAgICAgICAgIC8vIG5lZWRlZCB0by4KICAgICAgICAgCi0gICAgICAgIHN3aXRjaCAo
bm9kZS5vcCgpKSB7CisgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewogICAgICAgICAKICAg
ICAgICAgY2FzZSBJZGVudGl0eToKLSAgICAgICAgICAgIHNldFJlcGxhY2VtZW50KG5vZGUuY2hp
bGQxKCkuaW5kZXgoKSk7CisgICAgICAgICAgICBzZXRSZXBsYWNlbWVudChub2RlLT5jaGlsZDEo
KS5ub2RlKCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICAgICAgLy8g
SGFuZGxlIHRoZSBwdXJlIG5vZGVzLiBUaGVzZSBub2RlcyBuZXZlciBoYXZlIGFueSBzaWRlLWVm
ZmVjdHMuCkBAIC0xMTY1LDQxICsxMTQ0LDQxIEBAIHByaXZhdGU6CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgIAogICAgICAgICBjYXNlIEdldENhbGxlZToKLSAgICAgICAgICAgIHNl
dFJlcGxhY2VtZW50KGdldENhbGxlZUxvYWRFbGltaW5hdGlvbihub2RlLmNvZGVPcmlnaW4uaW5s
aW5lQ2FsbEZyYW1lKSk7CisgICAgICAgICAgICBzZXRSZXBsYWNlbWVudChnZXRDYWxsZWVMb2Fk
RWxpbWluYXRpb24obm9kZS0+Y29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpKTsKICAgICAgICAg
ICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2UgR2V0TG9jYWw6IHsKLSAgICAgICAgICAgIFZhcmlh
YmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhID0gbm9kZS52YXJpYWJsZUFjY2Vzc0Rh
dGEoKTsKKyAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRh
ID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CiAgICAgICAgICAgICBpZiAoIXZhcmlhYmxl
QWNjZXNzRGF0YS0+aXNDYXB0dXJlZCgpKQogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgTm9kZUluZGV4IHJlbGV2YW50TG9jYWxPcDsKLSAgICAgICAgICAgIE5vZGVJbmRleCBw
b3NzaWJsZVJlcGxhY2VtZW50ID0gZ2V0TG9jYWxMb2FkRWxpbWluYXRpb24odmFyaWFibGVBY2Nl
c3NEYXRhLT5sb2NhbCgpLCByZWxldmFudExvY2FsT3AsIHZhcmlhYmxlQWNjZXNzRGF0YS0+aXND
YXB0dXJlZCgpKTsKLSAgICAgICAgICAgIGlmIChyZWxldmFudExvY2FsT3AgPT0gTm9Ob2RlKQor
ICAgICAgICAgICAgTm9kZSogcmVsZXZhbnRMb2NhbE9wOworICAgICAgICAgICAgTm9kZSogcG9z
c2libGVSZXBsYWNlbWVudCA9IGdldExvY2FsTG9hZEVsaW1pbmF0aW9uKHZhcmlhYmxlQWNjZXNz
RGF0YS0+bG9jYWwoKSwgcmVsZXZhbnRMb2NhbE9wLCB2YXJpYWJsZUFjY2Vzc0RhdGEtPmlzQ2Fw
dHVyZWQoKSk7CisgICAgICAgICAgICBpZiAoIXJlbGV2YW50TG9jYWxPcCkKICAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgIGlmIChtX2dyYXBoW3JlbGV2YW50TG9jYWxPcF0ub3Ao
KSAhPSBHZXRMb2NhbFVubGlua2VkCi0gICAgICAgICAgICAgICAgJiYgbV9ncmFwaFtyZWxldmFu
dExvY2FsT3BdLnZhcmlhYmxlQWNjZXNzRGF0YSgpICE9IHZhcmlhYmxlQWNjZXNzRGF0YSkKKyAg
ICAgICAgICAgIGlmIChyZWxldmFudExvY2FsT3AtPm9wKCkgIT0gR2V0TG9jYWxVbmxpbmtlZAor
ICAgICAgICAgICAgICAgICYmIHJlbGV2YW50TG9jYWxPcC0+dmFyaWFibGVBY2Nlc3NEYXRhKCkg
IT0gdmFyaWFibGVBY2Nlc3NEYXRhKQogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgTm9kZUluZGV4IHBoaUluZGV4ID0gbm9kZS5jaGlsZDEoKS5pbmRleCgpOworICAgICAgICAg
ICAgTm9kZSogcGhpID0gbm9kZS0+Y2hpbGQxKCkubm9kZSgpOwogICAgICAgICAgICAgaWYgKCFz
ZXRSZXBsYWNlbWVudChwb3NzaWJsZVJlcGxhY2VtZW50KSkKICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgIC8vIElmIHRoZSBHZXRMb2NhbCB3ZSByZXBsYWNlZCB1c2VkIHRvIHJl
ZmVyIHRvIGEgU2V0TG9jYWwsIHRoZW4gaXQgbm93CiAgICAgICAgICAgICAvLyBzaG91bGQgcmVm
ZXIgdG8gdGhlIGNoaWxkIG9mIHRoZSBTZXRMb2NhbCBpbnN0ZWFkLgotICAgICAgICAgICAgaWYg
KG1fZ3JhcGhbcGhpSW5kZXhdLm9wKCkgPT0gU2V0TG9jYWwpIHsKLSAgICAgICAgICAgICAgICBB
U1NFUlQobm9kZS5jaGlsZDEoKS5pbmRleCgpID09IHBoaUluZGV4KTsKLSAgICAgICAgICAgICAg
ICBtX2dyYXBoLmNoYW5nZUVkZ2Uobm9kZS5jaGlsZHJlbi5jaGlsZDEoKSwgbV9ncmFwaFtwaGlJ
bmRleF0uY2hpbGQxKCkpOworICAgICAgICAgICAgaWYgKHBoaS0+b3AoKSA9PSBTZXRMb2NhbCkg
eworICAgICAgICAgICAgICAgIEFTU0VSVChub2RlLT5jaGlsZDEoKSA9PSBwaGkpOworICAgICAg
ICAgICAgICAgIG1fZ3JhcGguY2hhbmdlRWRnZShub2RlLT5jaGlsZHJlbi5jaGlsZDEoKSwgcGhp
LT5jaGlsZDEoKSk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBOb2RlSW5kZXggb2xkVGFp
bEluZGV4ID0gbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKAorICAgICAg
ICAgICAgTm9kZSogb2xkVGFpbCA9IG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwub3Bl
cmFuZCgKICAgICAgICAgICAgICAgICB2YXJpYWJsZUFjY2Vzc0RhdGEtPmxvY2FsKCkpOwotICAg
ICAgICAgICAgaWYgKG9sZFRhaWxJbmRleCA9PSBtX2NvbXBpbGVJbmRleCkgeworICAgICAgICAg
ICAgaWYgKG9sZFRhaWwgPT0gbm9kZSkgewogICAgICAgICAgICAgICAgIG1fY3VycmVudEJsb2Nr
LT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZCh2YXJpYWJsZUFjY2Vzc0RhdGEtPmxvY2FsKCkpID0K
ICAgICAgICAgICAgICAgICAgICAgcmVsZXZhbnRMb2NhbE9wOwogICAgICAgICAgICAgICAgIAog
ICAgICAgICAgICAgICAgIC8vIE1haW50YWluIGdyYXBoIGludGVncml0eTogc2luY2Ugd2UncmUg
cmVwbGFjaW5nIGEgR2V0TG9jYWwgd2l0aCBhIEdldExvY2FsVW5saW5rZWQsCiAgICAgICAgICAg
ICAgICAgLy8gbWFrZSBzdXJlIHRoYXQgdGhlIEdldExvY2FsVW5saW5rZWQgaXMgbm93IGxpbmtl
ZC4KLSAgICAgICAgICAgICAgICBpZiAobV9ncmFwaFtyZWxldmFudExvY2FsT3BdLm9wKCkgPT0g
R2V0TG9jYWxVbmxpbmtlZCkgewotICAgICAgICAgICAgICAgICAgICBtX2dyYXBoW3JlbGV2YW50
TG9jYWxPcF0uc2V0T3AoR2V0TG9jYWwpOwotICAgICAgICAgICAgICAgICAgICBtX2dyYXBoW3Jl
bGV2YW50TG9jYWxPcF0uY2hpbGRyZW4uY2hpbGQxKCkgPSBFZGdlKHBoaUluZGV4KTsKLSAgICAg
ICAgICAgICAgICAgICAgbV9ncmFwaC5yZWYocGhpSW5kZXgpOworICAgICAgICAgICAgICAgIGlm
IChyZWxldmFudExvY2FsT3AtPm9wKCkgPT0gR2V0TG9jYWxVbmxpbmtlZCkgeworICAgICAgICAg
ICAgICAgICAgICByZWxldmFudExvY2FsT3AtPnNldE9wKEdldExvY2FsKTsKKyAgICAgICAgICAg
ICAgICAgICAgcmVsZXZhbnRMb2NhbE9wLT5jaGlsZHJlbi5jaGlsZDEoKSA9IEVkZ2UocGhpKTsK
KyAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5yZWYocGhpKTsKICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOwpAQCAtMTIwNywx
OSArMTE4NiwxOCBAQCBwcml2YXRlOgogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAg
Y2FzZSBHZXRMb2NhbFVubGlua2VkOiB7Ci0gICAgICAgICAgICBOb2RlSW5kZXggcmVsZXZhbnRM
b2NhbE9wSWdub3JlZDsKKyAgICAgICAgICAgIE5vZGUqIHJlbGV2YW50TG9jYWxPcElnbm9yZWQ7
CiAgICAgICAgICAgICBzZXRSZXBsYWNlbWVudChnZXRMb2NhbExvYWRFbGltaW5hdGlvbihub2Rl
LnVubGlua2VkTG9jYWwoKSwgcmVsZXZhbnRMb2NhbE9wSWdub3JlZCwgdHJ1ZSkpOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBjYXNlIEZsdXNo
OiB7Ci0gICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9
IG5vZGUudmFyaWFibGVBY2Nlc3NEYXRhKCk7CisgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0Rh
dGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOwogICAg
ICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGxvY2FsID0gdmFyaWFibGVBY2Nlc3NEYXRhLT5sb2Nh
bCgpOwotICAgICAgICAgICAgTm9kZUluZGV4IHJlcGxhY2VtZW50SW5kZXggPSBub2RlLmNoaWxk
MSgpLmluZGV4KCk7Ci0gICAgICAgICAgICBOb2RlJiByZXBsYWNlbWVudCA9IG1fZ3JhcGhbcmVw
bGFjZW1lbnRJbmRleF07Ci0gICAgICAgICAgICBpZiAocmVwbGFjZW1lbnQub3AoKSAhPSBTZXRM
b2NhbCkKKyAgICAgICAgICAgIE5vZGUqIHJlcGxhY2VtZW50ID0gbm9kZS0+Y2hpbGQxKCkubm9k
ZSgpOworICAgICAgICAgICAgaWYgKHJlcGxhY2VtZW50LT5vcCgpICE9IFNldExvY2FsKQogICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgQVNTRVJUKHJlcGxhY2VtZW50LnZhcmlh
YmxlQWNjZXNzRGF0YSgpID09IHZhcmlhYmxlQWNjZXNzRGF0YSk7CisgICAgICAgICAgICBBU1NF
UlQocmVwbGFjZW1lbnQtPnZhcmlhYmxlQWNjZXNzRGF0YSgpID09IHZhcmlhYmxlQWNjZXNzRGF0
YSk7CiAgICAgICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGJlIGFibGUgdG8gcmVtb3ZlIFNl
dExvY2FscyB0aGF0IGNhbiBleGl0OyB3ZSBqdXN0IG5lZWQKICAgICAgICAgICAgIC8vIHRvIHJl
cGxhY2UgdGhlbSB3aXRoIGFwcHJvcHJpYXRlIHR5cGUgY2hlY2tzLgogICAgICAgICAgICAgaWYg
KG1fZ3JhcGgubV9maXhwb2ludFN0YXRlID09IEZpeHBvaW50Tm90Q29udmVyZ2VkKSB7CkBAIC0x
MjM5LDI2ICsxMjE3LDI2IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
ICAgIGlmIChyZXBsYWNlbWVudC5jYW5FeGl0KCkpCisgICAgICAgICAgICAgICAgaWYgKHJlcGxh
Y2VtZW50LT5jYW5FeGl0KCkpCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgfQogICAgICAgICAgICAgU2V0TG9jYWxTdG9yZUVsaW1pbmF0aW9uUmVzdWx0IHJlc3VsdCA9
Ci0gICAgICAgICAgICAgICAgc2V0TG9jYWxTdG9yZUVsaW1pbmF0aW9uKGxvY2FsLCByZXBsYWNl
bWVudEluZGV4KTsKKyAgICAgICAgICAgICAgICBzZXRMb2NhbFN0b3JlRWxpbWluYXRpb24obG9j
YWwsIHJlcGxhY2VtZW50KTsKICAgICAgICAgICAgIGlmIChyZXN1bHQubWF5QmVBY2Nlc3NlZCB8
fCByZXN1bHQubWF5Q2xvYmJlcldvcmxkKQogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgQVNTRVJUKHJlcGxhY2VtZW50Lm9wKCkgPT0gU2V0TG9jYWwpOwotICAgICAgICAgICAg
QVNTRVJUKHJlcGxhY2VtZW50LnJlZkNvdW50KCkgPT0gMSk7Ci0gICAgICAgICAgICBBU1NFUlQo
cmVwbGFjZW1lbnQuc2hvdWxkR2VuZXJhdGUoKSk7CisgICAgICAgICAgICBBU1NFUlQocmVwbGFj
ZW1lbnQtPm9wKCkgPT0gU2V0TG9jYWwpOworICAgICAgICAgICAgQVNTRVJUKHJlcGxhY2VtZW50
LT5yZWZDb3VudCgpID09IDEpOworICAgICAgICAgICAgQVNTRVJUKHJlcGxhY2VtZW50LT5zaG91
bGRHZW5lcmF0ZSgpKTsKICAgICAgICAgICAgIC8vIEZJWE1FOiBJbnZlc3RpZ2F0ZSB1c2luZyBt
YXlFeGl0IGFzIGEgZnVydGhlciBvcHRpbWl6YXRpb24uCi0gICAgICAgICAgICBub2RlLnNldE9w
QW5kRGVmYXVsdEZsYWdzKFBoYW50b20pOwotICAgICAgICAgICAgTm9kZUluZGV4IGRhdGFOb2Rl
SW5kZXggPSByZXBsYWNlbWVudC5jaGlsZDEoKS5pbmRleCgpOwotICAgICAgICAgICAgQVNTRVJU
KG1fZ3JhcGhbZGF0YU5vZGVJbmRleF0uaGFzUmVzdWx0KCkpOworICAgICAgICAgICAgbm9kZS0+
c2V0T3BBbmREZWZhdWx0RmxhZ3MoUGhhbnRvbSk7CisgICAgICAgICAgICBOb2RlKiBkYXRhTm9k
ZSA9IHJlcGxhY2VtZW50LT5jaGlsZDEoKS5ub2RlKCk7CisgICAgICAgICAgICBBU1NFUlQoZGF0
YU5vZGUtPmhhc1Jlc3VsdCgpKTsKICAgICAgICAgICAgIG1fZ3JhcGguY2xlYXJBbmREZXJlZkNo
aWxkMShub2RlKTsKLSAgICAgICAgICAgIG5vZGUuY2hpbGRyZW4uY2hpbGQxKCkgPSBFZGdlKGRh
dGFOb2RlSW5kZXgpOwotICAgICAgICAgICAgbV9ncmFwaC5yZWYoZGF0YU5vZGVJbmRleCk7Ci0g
ICAgICAgICAgICBOb2RlSW5kZXggb2xkVGFpbEluZGV4ID0gbV9jdXJyZW50QmxvY2stPnZhcmlh
Ymxlc0F0VGFpbC5vcGVyYW5kKGxvY2FsKTsKLSAgICAgICAgICAgIGlmIChvbGRUYWlsSW5kZXgg
PT0gbV9jb21waWxlSW5kZXgpCi0gICAgICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPnZhcmlh
Ymxlc0F0VGFpbC5vcGVyYW5kKGxvY2FsKSA9IHJlcGxhY2VtZW50SW5kZXg7CisgICAgICAgICAg
ICBub2RlLT5jaGlsZHJlbi5jaGlsZDEoKSA9IEVkZ2UoZGF0YU5vZGUpOworICAgICAgICAgICAg
bV9ncmFwaC5yZWYoZGF0YU5vZGUpOworICAgICAgICAgICAgTm9kZSogb2xkVGFpbCA9IG1fY3Vy
cmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZChsb2NhbCk7CisgICAgICAgICAgICBp
ZiAob2xkVGFpbCA9PSBub2RlKQorICAgICAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT52YXJp
YWJsZXNBdFRhaWwub3BlcmFuZChsb2NhbCkgPSByZXBsYWNlbWVudDsKICAgICAgICAgICAgIG1f
Y2hhbmdlZCA9IHRydWU7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtMTI3NSwx
MSArMTI1MywxMSBAQCBwcml2YXRlOgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAK
ICAgICAgICAgY2FzZSBHZXRBcnJheUxlbmd0aDoKLSAgICAgICAgICAgIHNldFJlcGxhY2VtZW50
KGdldEFycmF5TGVuZ3RoRWxpbWluYXRpb24obm9kZS5jaGlsZDEoKS5pbmRleCgpKSk7CisgICAg
ICAgICAgICBzZXRSZXBsYWNlbWVudChnZXRBcnJheUxlbmd0aEVsaW1pbmF0aW9uKG5vZGUtPmNo
aWxkMSgpLm5vZGUoKSkpOwogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSBHZXRN
eVNjb3BlOgotICAgICAgICAgICAgc2V0UmVwbGFjZW1lbnQoZ2V0TXlTY29wZUxvYWRFbGltaW5h
dGlvbihub2RlLmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKSk7CisgICAgICAgICAgICBzZXRS
ZXBsYWNlbWVudChnZXRNeVNjb3BlTG9hZEVsaW1pbmF0aW9uKG5vZGUtPmNvZGVPcmlnaW4uaW5s
aW5lQ2FsbEZyYW1lKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgICAg
ICAvLyBIYW5kbGUgbm9kZXMgdGhhdCBhcmUgY29uZGl0aW9uYWxseSBwdXJlOiB0aGVzZSBhcmUg
cHVyZSwgYW5kIGNhbgpAQCAtMTI5MSw5ICsxMjY5LDkgQEAgcHJpdmF0ZToKICAgICAgICAgY2Fz
ZSBDb21wYXJlR3JlYXRlckVxOgogICAgICAgICBjYXNlIENvbXBhcmVFcTogewogICAgICAgICAg
ICAgaWYgKG1fZ3JhcGguaXNQcmVkaWN0ZWROdW1lcmljYWwobm9kZSkpIHsKLSAgICAgICAgICAg
ICAgICBOb2RlSW5kZXggcmVwbGFjZW1lbnRJbmRleCA9IHB1cmVDU0Uobm9kZSk7Ci0gICAgICAg
ICAgICAgICAgaWYgKHJlcGxhY2VtZW50SW5kZXggIT0gTm9Ob2RlICYmIG1fZ3JhcGguaXNQcmVk
aWN0ZWROdW1lcmljYWwobV9ncmFwaFtyZXBsYWNlbWVudEluZGV4XSkpCi0gICAgICAgICAgICAg
ICAgICAgIHNldFJlcGxhY2VtZW50KHJlcGxhY2VtZW50SW5kZXgpOworICAgICAgICAgICAgICAg
IE5vZGUqIHJlcGxhY2VtZW50ID0gcHVyZUNTRShub2RlKTsKKyAgICAgICAgICAgICAgICBpZiAo
cmVwbGFjZW1lbnQgJiYgbV9ncmFwaC5pc1ByZWRpY3RlZE51bWVyaWNhbChyZXBsYWNlbWVudCkp
CisgICAgICAgICAgICAgICAgICAgIHNldFJlcGxhY2VtZW50KHJlcGxhY2VtZW50KTsKICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkBAIC0xMzAxLDE2ICsxMjc5
LDE2IEBAIHByaXZhdGU6CiAgICAgICAgIC8vIEZpbmFsbHkgaGFuZGxlIGhlYXAgYWNjZXNzZXMu
IFRoZXNlIGFyZSBub3QgcXVpdGUgcHVyZSwgYnV0IHdlIGNhbiBzdGlsbAogICAgICAgICAvLyBv
cHRpbWl6ZSB0aGVtIHByb3ZpZGVkIHRoYXQgc29tZSBzdWJ0bGUgY29uZGl0aW9ucyBhcmUgbWV0
LgogICAgICAgICBjYXNlIEdldEdsb2JhbFZhcjoKLSAgICAgICAgICAgIHNldFJlcGxhY2VtZW50
KGdsb2JhbFZhckxvYWRFbGltaW5hdGlvbihub2RlLnJlZ2lzdGVyUG9pbnRlcigpKSk7CisgICAg
ICAgICAgICBzZXRSZXBsYWNlbWVudChnbG9iYWxWYXJMb2FkRWxpbWluYXRpb24obm9kZS0+cmVn
aXN0ZXJQb2ludGVyKCkpKTsKICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2UgR2V0
U2NvcGVkVmFyOiB7Ci0gICAgICAgICAgICBzZXRSZXBsYWNlbWVudChzY29wZWRWYXJMb2FkRWxp
bWluYXRpb24obm9kZS5jaGlsZDEoKS5pbmRleCgpLCBub2RlLnZhck51bWJlcigpKSk7CisgICAg
ICAgICAgICBzZXRSZXBsYWNlbWVudChzY29wZWRWYXJMb2FkRWxpbWluYXRpb24obm9kZS0+Y2hp
bGQxKCkubm9kZSgpLCBub2RlLT52YXJOdW1iZXIoKSkpOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIH0KIAogICAgICAgICBjYXNlIEdsb2JhbFZhcldhdGNocG9pbnQ6Ci0gICAgICAgICAg
ICBpZiAoZ2xvYmFsVmFyV2F0Y2hwb2ludEVsaW1pbmF0aW9uKG5vZGUucmVnaXN0ZXJQb2ludGVy
KCkpKQorICAgICAgICAgICAgaWYgKGdsb2JhbFZhcldhdGNocG9pbnRFbGltaW5hdGlvbihub2Rl
LT5yZWdpc3RlclBvaW50ZXIoKSkpCiAgICAgICAgICAgICAgICAgZWxpbWluYXRlKCk7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgIApAQCAtMTMxOCw4MyArMTI5Niw4MyBAQCBwcml2
YXRlOgogICAgICAgICBjYXNlIFB1dEdsb2JhbFZhckNoZWNrOgogICAgICAgICAgICAgaWYgKG1f
Z3JhcGgubV9maXhwb2ludFN0YXRlID09IEZpeHBvaW50Tm90Q29udmVyZ2VkKQogICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgZWxpbWluYXRlKGdsb2JhbFZhclN0b3JlRWxpbWlu
YXRpb24obm9kZS5yZWdpc3RlclBvaW50ZXIoKSkpOworICAgICAgICAgICAgZWxpbWluYXRlKGds
b2JhbFZhclN0b3JlRWxpbWluYXRpb24obm9kZS0+cmVnaXN0ZXJQb2ludGVyKCkpKTsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgUHV0U2NvcGVkVmFyOiB7
CiAgICAgICAgICAgICBpZiAobV9ncmFwaC5tX2ZpeHBvaW50U3RhdGUgPT0gRml4cG9pbnROb3RD
b252ZXJnZWQpCiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBlbGltaW5hdGUo
c2NvcGVkVmFyU3RvcmVFbGltaW5hdGlvbihub2RlLmNoaWxkMSgpLmluZGV4KCksIG5vZGUuY2hp
bGQyKCkuaW5kZXgoKSwgbm9kZS52YXJOdW1iZXIoKSkpOworICAgICAgICAgICAgZWxpbWluYXRl
KHNjb3BlZFZhclN0b3JlRWxpbWluYXRpb24obm9kZS0+Y2hpbGQxKCkubm9kZSgpLCBub2RlLT5j
aGlsZDIoKS5ub2RlKCksIG5vZGUtPnZhck51bWJlcigpKSk7CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgfQogCiAgICAgICAgIGNhc2UgR2V0QnlWYWw6CiAgICAgICAgICAgICBpZiAobV9n
cmFwaC5ieVZhbElzUHVyZShub2RlKSkKLSAgICAgICAgICAgICAgICBzZXRSZXBsYWNlbWVudChn
ZXRCeVZhbExvYWRFbGltaW5hdGlvbihub2RlLmNoaWxkMSgpLmluZGV4KCksIG5vZGUuY2hpbGQy
KCkuaW5kZXgoKSkpOworICAgICAgICAgICAgICAgIHNldFJlcGxhY2VtZW50KGdldEJ5VmFsTG9h
ZEVsaW1pbmF0aW9uKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgbm9kZS0+Y2hpbGQyKCkubm9kZSgp
KSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgICAgICBjYXNlIFB1dEJ5
VmFsOiB7CiAgICAgICAgICAgICBFZGdlIGNoaWxkMSA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9k
ZSwgMCk7CiAgICAgICAgICAgICBFZGdlIGNoaWxkMiA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9k
ZSwgMSk7Ci0gICAgICAgICAgICBpZiAobm9kZS5hcnJheU1vZGUoKS5jYW5DU0VTdG9yYWdlKCkp
IHsKLSAgICAgICAgICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4ID0gZ2V0QnlWYWxMb2FkRWxp
bWluYXRpb24oY2hpbGQxLmluZGV4KCksIGNoaWxkMi5pbmRleCgpKTsKLSAgICAgICAgICAgICAg
ICBpZiAobm9kZUluZGV4ID09IE5vTm9kZSkKKyAgICAgICAgICAgIGlmIChub2RlLT5hcnJheU1v
ZGUoKS5jYW5DU0VTdG9yYWdlKCkpIHsKKyAgICAgICAgICAgICAgICBOb2RlKiByZXBsYWNlbWVu
dCA9IGdldEJ5VmFsTG9hZEVsaW1pbmF0aW9uKGNoaWxkMS5ub2RlKCksIGNoaWxkMi5ub2RlKCkp
OworICAgICAgICAgICAgICAgIGlmICghcmVwbGFjZW1lbnQpCiAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgICAgIG5vZGUuc2V0T3AoUHV0QnlWYWxBbGlhcyk7CisgICAg
ICAgICAgICAgICAgbm9kZS0+c2V0T3AoUHV0QnlWYWxBbGlhcyk7CiAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgIGNhc2Ug
Q2hlY2tTdHJ1Y3R1cmU6CiAgICAgICAgIGNhc2UgRm9yd2FyZENoZWNrU3RydWN0dXJlOgotICAg
ICAgICAgICAgaWYgKGNoZWNrU3RydWN0dXJlRWxpbWluYXRpb24obm9kZS5zdHJ1Y3R1cmVTZXQo
KSwgbm9kZS5jaGlsZDEoKS5pbmRleCgpKSkKKyAgICAgICAgICAgIGlmIChjaGVja1N0cnVjdHVy
ZUVsaW1pbmF0aW9uKG5vZGUtPnN0cnVjdHVyZVNldCgpLCBub2RlLT5jaGlsZDEoKS5ub2RlKCkp
KQogICAgICAgICAgICAgICAgIGVsaW1pbmF0ZSgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICAKICAgICAgICAgY2FzZSBTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludDoKICAg
ICAgICAgY2FzZSBGb3J3YXJkU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnQ6Ci0gICAgICAg
ICAgICBpZiAoc3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnRFbGltaW5hdGlvbihub2RlLnN0
cnVjdHVyZSgpLCBub2RlLmNoaWxkMSgpLmluZGV4KCkpKQorICAgICAgICAgICAgaWYgKHN0cnVj
dHVyZVRyYW5zaXRpb25XYXRjaHBvaW50RWxpbWluYXRpb24obm9kZS0+c3RydWN0dXJlKCksIG5v
ZGUtPmNoaWxkMSgpLm5vZGUoKSkpCiAgICAgICAgICAgICAgICAgZWxpbWluYXRlKCk7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgICAgICBjYXNlIFB1dFN0cnVjdHVyZToK
ICAgICAgICAgICAgIGlmIChtX2dyYXBoLm1fZml4cG9pbnRTdGF0ZSA9PSBGaXhwb2ludE5vdENv
bnZlcmdlZCkKICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGVsaW1pbmF0ZShw
dXRTdHJ1Y3R1cmVTdG9yZUVsaW1pbmF0aW9uKG5vZGUuY2hpbGQxKCkuaW5kZXgoKSksIFBoYW50
b21QdXRTdHJ1Y3R1cmUpOworICAgICAgICAgICAgZWxpbWluYXRlKHB1dFN0cnVjdHVyZVN0b3Jl
RWxpbWluYXRpb24obm9kZS0+Y2hpbGQxKCkubm9kZSgpKSwgUGhhbnRvbVB1dFN0cnVjdHVyZSk7
CiAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICBjYXNlIENoZWNrRnVuY3Rpb246Ci0gICAg
ICAgICAgICBpZiAoY2hlY2tGdW5jdGlvbkVsaW1pbmF0aW9uKG5vZGUuZnVuY3Rpb24oKSwgbm9k
ZS5jaGlsZDEoKS5pbmRleCgpKSkKKyAgICAgICAgICAgIGlmIChjaGVja0Z1bmN0aW9uRWxpbWlu
YXRpb24obm9kZS0+ZnVuY3Rpb24oKSwgbm9kZS0+Y2hpbGQxKCkubm9kZSgpKSkKICAgICAgICAg
ICAgICAgICBlbGltaW5hdGUoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAg
IAogICAgICAgICBjYXNlIENoZWNrRXhlY3V0YWJsZToKLSAgICAgICAgICAgIGlmIChjaGVja0V4
ZWN1dGFibGVFbGltaW5hdGlvbihub2RlLmV4ZWN1dGFibGUoKSwgbm9kZS5jaGlsZDEoKS5pbmRl
eCgpKSkKKyAgICAgICAgICAgIGlmIChjaGVja0V4ZWN1dGFibGVFbGltaW5hdGlvbihub2RlLT5l
eGVjdXRhYmxlKCksIG5vZGUtPmNoaWxkMSgpLm5vZGUoKSkpCiAgICAgICAgICAgICAgICAgZWxp
bWluYXRlKCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAKICAgICAgICAg
Y2FzZSBDaGVja0FycmF5OgotICAgICAgICAgICAgaWYgKGNoZWNrQXJyYXlFbGltaW5hdGlvbihu
b2RlLmNoaWxkMSgpLmluZGV4KCksIG5vZGUuYXJyYXlNb2RlKCkpKQorICAgICAgICAgICAgaWYg
KGNoZWNrQXJyYXlFbGltaW5hdGlvbihub2RlLT5jaGlsZDEoKS5ub2RlKCksIG5vZGUtPmFycmF5
TW9kZSgpKSkKICAgICAgICAgICAgICAgICBlbGltaW5hdGUoKTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgR2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZTog
ewotICAgICAgICAgICAgc2V0UmVwbGFjZW1lbnQoZ2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZUxv
YWRFbGltaW5hdGlvbihub2RlLmNoaWxkMSgpLmluZGV4KCksIG5vZGUuYXJyYXlNb2RlKCkpKTsK
KyAgICAgICAgICAgIHNldFJlcGxhY2VtZW50KGdldEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2VMb2Fk
RWxpbWluYXRpb24obm9kZS0+Y2hpbGQxKCkubm9kZSgpLCBub2RlLT5hcnJheU1vZGUoKSkpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIEdldEJ1dHRlcmZs
eToKLSAgICAgICAgICAgIHNldFJlcGxhY2VtZW50KGdldFByb3BlcnR5U3RvcmFnZUxvYWRFbGlt
aW5hdGlvbihub2RlLmNoaWxkMSgpLmluZGV4KCkpKTsKKyAgICAgICAgICAgIHNldFJlcGxhY2Vt
ZW50KGdldFByb3BlcnR5U3RvcmFnZUxvYWRFbGltaW5hdGlvbihub2RlLT5jaGlsZDEoKS5ub2Rl
KCkpKTsKICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2UgR2V0QnlPZmZzZXQ6Ci0g
ICAgICAgICAgICBzZXRSZXBsYWNlbWVudChnZXRCeU9mZnNldExvYWRFbGltaW5hdGlvbihtX2dy
YXBoLm1fc3RvcmFnZUFjY2Vzc0RhdGFbbm9kZS5zdG9yYWdlQWNjZXNzRGF0YUluZGV4KCldLmlk
ZW50aWZpZXJOdW1iZXIsIG5vZGUuY2hpbGQxKCkuaW5kZXgoKSkpOworICAgICAgICAgICAgc2V0
UmVwbGFjZW1lbnQoZ2V0QnlPZmZzZXRMb2FkRWxpbWluYXRpb24obV9ncmFwaC5tX3N0b3JhZ2VB
Y2Nlc3NEYXRhW25vZGUtPnN0b3JhZ2VBY2Nlc3NEYXRhSW5kZXgoKV0uaWRlbnRpZmllck51bWJl
ciwgbm9kZS0+Y2hpbGQxKCkubm9kZSgpKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgIAogICAgICAgICBjYXNlIFB1dEJ5T2Zmc2V0OgogICAgICAgICAgICAgaWYgKG1fZ3JhcGgu
bV9maXhwb2ludFN0YXRlID09IEZpeHBvaW50Tm90Q29udmVyZ2VkKQogICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgZWxpbWluYXRlKHB1dEJ5T2Zmc2V0U3RvcmVFbGltaW5hdGlv
bihtX2dyYXBoLm1fc3RvcmFnZUFjY2Vzc0RhdGFbbm9kZS5zdG9yYWdlQWNjZXNzRGF0YUluZGV4
KCldLmlkZW50aWZpZXJOdW1iZXIsIG5vZGUuY2hpbGQxKCkuaW5kZXgoKSkpOworICAgICAgICAg
ICAgZWxpbWluYXRlKHB1dEJ5T2Zmc2V0U3RvcmVFbGltaW5hdGlvbihtX2dyYXBoLm1fc3RvcmFn
ZUFjY2Vzc0RhdGFbbm9kZS0+c3RvcmFnZUFjY2Vzc0RhdGFJbmRleCgpXS5pZGVudGlmaWVyTnVt
YmVyLCBub2RlLT5jaGlsZDEoKS5ub2RlKCkpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgCiAgICAgICAgIGNhc2UgUGhhbnRvbToKQEAgLTE0MDgsNyArMTM4Niw3IEBAIHByaXZh
dGU6CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgbV9s
YXN0U2Vlbltub2RlLm9wKCldID0gbV9pbmRleEluQmxvY2s7CisgICAgICAgIG1fbGFzdFNlZW5b
bm9kZS0+b3AoKV0gPSBtX2luZGV4SW5CbG9jazsKICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BB
R0FUSU9OX1ZFUkJPU0UpCiAgICAgICAgIGRhdGFMb2dGKCJcbiIpOwogI2VuZGlmCkBAIC0xNDI5
LDM3ICsxNDA3LDM2IEBAIHByaXZhdGU6CiAgICAgICAgIC8vIHJlcGxhY2VtZW50cyBjbGVhcmVk
LCBzbyB3ZSBkb24ndCBnZXQgY29uZnVzZWQgd2hpbGUgZG9pbmcgc3Vic3RpdHV0aW9ucyBvbgog
ICAgICAgICAvLyBHZXRMb2NhbCdzLgogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
YmxvY2stPnBoaXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIEFTU0VSVChtX2dyYXBoW2Js
b2NrLT5waGlzW2ldXS5mbGFncygpICYgTm9kZVJlbGV2YW50VG9PU1IpOwotICAgICAgICAgICAg
bV9ncmFwaFtibG9jay0+cGhpc1tpXV0ucmVwbGFjZW1lbnQgPSBOb05vZGU7CisgICAgICAgICAg
ICBBU1NFUlQoYmxvY2stPnBoaXNbaV0tPmZsYWdzKCkgJiBOb2RlUmVsZXZhbnRUb09TUik7Cisg
ICAgICAgICAgICBibG9jay0+cGhpc1tpXS0+cmVwbGFjZW1lbnQgPSAwOwogICAgICAgICB9CiAg
ICAgICAgIAogICAgICAgICAvLyBNYWtlIGFsbCBvZiBteSBTZXRMb2NhbCBhbmQgR2V0TG9jYWwg
bm9kZXMgcmVsZXZhbnQgdG8gT1NSLCBhbmQgZG8gc29tZSBvdGhlcgogICAgICAgICAvLyBuZWNl
c3NhcnkgYm9va2tlZXBpbmcuCiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBibG9j
ay0+c2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIE5vZGVJbmRleCBub2RlSW5kZXggPSBibG9j
ay0+YXQoaSk7Ci0gICAgICAgICAgICBOb2RlJiBub2RlID0gbV9ncmFwaFtub2RlSW5kZXhdOwor
ICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5hdChpKTsKICAgICAgICAgICAgIAotICAg
ICAgICAgICAgbm9kZS5yZXBsYWNlbWVudCA9IE5vTm9kZTsKKyAgICAgICAgICAgIG5vZGUtPnJl
cGxhY2VtZW50ID0gMDsKICAgICAgICAgICAgIAotICAgICAgICAgICAgc3dpdGNoIChub2RlLm9w
KCkpIHsKKyAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewogICAgICAgICAgICAgY2Fz
ZSBTZXRMb2NhbDoKICAgICAgICAgICAgIGNhc2UgR2V0TG9jYWw6IC8vIEZJWE1FOiBUaGUgR2V0
TG9jYWwgY2FzZSBpcyBvbmx5IG5lY2Vzc2FyeSB1bnRpbCB3ZSBkbyBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA2NzA3LgotICAgICAgICAgICAgICAgIG5vZGUubWVy
Z2VGbGFncyhOb2RlUmVsZXZhbnRUb09TUik7CisgICAgICAgICAgICAgICAgbm9kZS0+bWVyZ2VG
bGFncyhOb2RlUmVsZXZhbnRUb09TUik7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIG5vZGUuY2xlYXJGbGFncyhOb2RlUmVsZXZh
bnRUb09TUik7CisgICAgICAgICAgICAgICAgbm9kZS0+Y2xlYXJGbGFncyhOb2RlUmVsZXZhbnRU
b09TUik7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0K
IAogICAgICAgICBmb3IgKG1faW5kZXhJbkJsb2NrID0gMDsgbV9pbmRleEluQmxvY2sgPCBibG9j
ay0+c2l6ZSgpOyArK21faW5kZXhJbkJsb2NrKSB7Ci0gICAgICAgICAgICBtX2NvbXBpbGVJbmRl
eCA9IGJsb2NrLT5hdChtX2luZGV4SW5CbG9jayk7Ci0gICAgICAgICAgICBwZXJmb3JtTm9kZUNT
RShtX2dyYXBoW21fY29tcGlsZUluZGV4XSk7CisgICAgICAgICAgICBtX2N1cnJlbnROb2RlID0g
YmxvY2stPmF0KG1faW5kZXhJbkJsb2NrKTsKKyAgICAgICAgICAgIHBlcmZvcm1Ob2RlQ1NFKG1f
Y3VycmVudE5vZGUpOwogICAgICAgICB9CiAgICAgfQogICAgIAogICAgIEJhc2ljQmxvY2sqIG1f
Y3VycmVudEJsb2NrOwotICAgIE5vZGVJbmRleCBtX2NvbXBpbGVJbmRleDsKKyAgICBOb2RlKiBt
X2N1cnJlbnROb2RlOwogICAgIHVuc2lnbmVkIG1faW5kZXhJbkJsb2NrOwogICAgIEZpeGVkQXJy
YXk8dW5zaWduZWQsIExhc3ROb2RlVHlwZT4gbV9sYXN0U2VlbjsKICAgICBib29sIG1fY2hhbmdl
ZDsgLy8gT25seSB0cmFja3MgY2hhbmdlcyB0aGF0IGhhdmUgYSBzdWJzdGFudGl2ZSBlZmZlY3Qg
b24gb3RoZXIgb3B0aW1pemF0aW9ucy4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQ29tbW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0NvbW1vbi5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0NvbW1vbi5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDEgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIkRGR0NvbW1vbi5oIgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKK25hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgREZHIHsKKwordm9pZCBOb2RlUG9pbnRlclRyYWl0czo6ZHVtcChOb2Rl
KiB2YWx1ZSwgUHJpbnRTdHJlYW0mIG91dCkKK3sKKyAgICBvdXQucHJpbnQodmFsdWUpOworfQor
Cit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkK
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb24uaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbi5oCShyZXZpc2lvbiAxNDA1
NjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbi5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTIs
IDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC04MSwyMiArODEsMTQgQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBERkcgewogCi0vLyBUeXBlIGZvciBhIHJlZmVyZW5jZSB0byBhbm90aGVyIG5vZGUgaW4g
dGhlIGdyYXBoLgotdHlwZWRlZiB1aW50MzJfdCBOb2RlSW5kZXg7Ci1zdGF0aWMgY29uc3QgTm9k
ZUluZGV4IE5vTm9kZSA9IFVJTlRfTUFYOworY2xhc3MgTm9kZTsKIAogdHlwZWRlZiB1aW50MzJf
dCBCbG9ja0luZGV4Owogc3RhdGljIGNvbnN0IEJsb2NrSW5kZXggTm9CbG9jayA9IFVJTlRfTUFY
OwogCi1zdHJ1Y3QgTm9kZUluZGV4VHJhaXRzIHsKLSAgICBzdGF0aWMgTm9kZUluZGV4IGRlZmF1
bHRWYWx1ZSgpIHsgcmV0dXJuIE5vTm9kZTsgfQotICAgIHN0YXRpYyB2b2lkIGR1bXAoTm9kZUlu
ZGV4IHZhbHVlLCBQcmludFN0cmVhbSYgb3V0KQotICAgIHsKLSAgICAgICAgaWYgKHZhbHVlID09
IE5vTm9kZSkKLSAgICAgICAgICAgIG91dC5wcmludGYoIi0iKTsKLSAgICAgICAgZWxzZQotICAg
ICAgICAgICAgb3V0LnByaW50ZigiQCV1IiwgdmFsdWUpOwotICAgIH0KK3N0cnVjdCBOb2RlUG9p
bnRlclRyYWl0cyB7CisgICAgc3RhdGljIE5vZGUqIGRlZmF1bHRWYWx1ZSgpIHsgcmV0dXJuIDA7
IH0KKyAgICBzdGF0aWMgdm9pZCBkdW1wKE5vZGUqIHZhbHVlLCBQcmludFN0cmVhbSYgb3V0KTsK
IH07CiAKIGVudW0gVXNlS2luZCB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcAkocmV2aXNpb24gMTQwNTY3KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEy
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMiwg
MjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTc1LDIyICs3NSwyMSBAQCBwcml2YXRlOgogICAgICAgICBib29sIGNo
YW5nZWQgPSBmYWxzZTsKICAgICAgICAgbV9zdGF0ZS5iZWdpbkJhc2ljQmxvY2soYmxvY2spOwog
ICAgICAgICBmb3IgKHVuc2lnbmVkIGluZGV4SW5CbG9jayA9IDA7IGluZGV4SW5CbG9jayA8IGJs
b2NrLT5zaXplKCk7ICsraW5kZXhJbkJsb2NrKSB7Ci0gICAgICAgICAgICBOb2RlSW5kZXggbm9k
ZUluZGV4ID0gYmxvY2stPmF0KGluZGV4SW5CbG9jayk7Ci0gICAgICAgICAgICBOb2RlJiBub2Rl
ID0gbV9ncmFwaFtub2RlSW5kZXhdOwotICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgaWYg
KCFtX3N0YXRlLmlzVmFsaWQoKSkKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
IAorICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5hdChpbmRleEluQmxvY2spOworCiAg
ICAgICAgICAgICBib29sIGVsaW1pbmF0ZWQgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICAg
Ci0gICAgICAgICAgICBzd2l0Y2ggKG5vZGUub3AoKSkgeworICAgICAgICAgICAgc3dpdGNoIChu
b2RlLT5vcCgpKSB7CiAgICAgICAgICAgICBjYXNlIENoZWNrQXJndW1lbnRzTm90Q3JlYXRlZDog
ewogICAgICAgICAgICAgICAgIGlmICghaXNFbXB0eVNwZWN1bGF0aW9uKAogICAgICAgICAgICAg
ICAgICAgICAgICAgbV9zdGF0ZS52YXJpYWJsZXMoKS5vcGVyYW5kKAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG1fZ3JhcGguYXJndW1lbnRzUmVnaXN0ZXJGb3Iobm9kZS5jb2RlT3JpZ2lu
KSkubV90eXBlKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLmFyZ3VtZW50
c1JlZ2lzdGVyRm9yKG5vZGUtPmNvZGVPcmlnaW4pKS5tX3R5cGUpKQogICAgICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgICAgICBBU1NFUlQobm9kZS5yZWZDb3VudCgpID09IDEp
OwotICAgICAgICAgICAgICAgIG5vZGUuc2V0T3BBbmREZWZhdWx0RmxhZ3MoUGhhbnRvbSk7Cisg
ICAgICAgICAgICAgICAgbm9kZS0+c2V0T3BBbmREZWZhdWx0RmxhZ3MoUGhhbnRvbSk7CiAgICAg
ICAgICAgICAgICAgZWxpbWluYXRlZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICB9CkBAIC05OCwyNCArOTcsMjQgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGNh
c2UgQ2hlY2tTdHJ1Y3R1cmU6CiAgICAgICAgICAgICBjYXNlIEZvcndhcmRDaGVja1N0cnVjdHVy
ZToKICAgICAgICAgICAgIGNhc2UgQXJyYXlpZnlUb1N0cnVjdHVyZTogewotICAgICAgICAgICAg
ICAgIEFic3RyYWN0VmFsdWUmIHZhbHVlID0gbV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkp
OworICAgICAgICAgICAgICAgIEFic3RyYWN0VmFsdWUmIHZhbHVlID0gbV9zdGF0ZS5mb3JOb2Rl
KG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgICAgICAgICBTdHJ1Y3R1cmVTZXQgc2V0OwotICAg
ICAgICAgICAgICAgIGlmIChub2RlLm9wKCkgPT0gQXJyYXlpZnlUb1N0cnVjdHVyZSkKLSAgICAg
ICAgICAgICAgICAgICAgc2V0ID0gbm9kZS5zdHJ1Y3R1cmUoKTsKKyAgICAgICAgICAgICAgICBp
ZiAobm9kZS0+b3AoKSA9PSBBcnJheWlmeVRvU3RydWN0dXJlKQorICAgICAgICAgICAgICAgICAg
ICBzZXQgPSBub2RlLT5zdHJ1Y3R1cmUoKTsKICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAg
ICAgICAgICAgICAgIHNldCA9IG5vZGUuc3RydWN0dXJlU2V0KCk7CisgICAgICAgICAgICAgICAg
ICAgIHNldCA9IG5vZGUtPnN0cnVjdHVyZVNldCgpOwogICAgICAgICAgICAgICAgIGlmICghaXND
ZWxsU3BlY3VsYXRpb24odmFsdWUubV90eXBlKSkKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICAgICAgaWYgKHZhbHVlLm1fY3VycmVudEtub3duU3RydWN0dXJlLmlzU3Vi
c2V0T2Yoc2V0KSkgewogICAgICAgICAgICAgICAgICAgICBBU1NFUlQobm9kZS5yZWZDb3VudCgp
ID09IDEpOwotICAgICAgICAgICAgICAgICAgICBub2RlLnNldE9wQW5kRGVmYXVsdEZsYWdzKFBo
YW50b20pOworICAgICAgICAgICAgICAgICAgICBub2RlLT5zZXRPcEFuZERlZmF1bHRGbGFncyhQ
aGFudG9tKTsKICAgICAgICAgICAgICAgICAgICAgZWxpbWluYXRlZCA9IHRydWU7CiAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBT
dHJ1Y3R1cmVBYnN0cmFjdFZhbHVlJiBzdHJ1Y3R1cmVWYWx1ZSA9IHZhbHVlLm1fZnV0dXJlUG9z
c2libGVTdHJ1Y3R1cmU7CiAgICAgICAgICAgICAgICAgaWYgKHN0cnVjdHVyZVZhbHVlLmlzU3Vi
c2V0T2Yoc2V0KQogICAgICAgICAgICAgICAgICAgICAmJiBzdHJ1Y3R1cmVWYWx1ZS5oYXNTaW5n
bGV0b24oKSkgewotICAgICAgICAgICAgICAgICAgICBub2RlLmNvbnZlcnRUb1N0cnVjdHVyZVRy
YW5zaXRpb25XYXRjaHBvaW50KHN0cnVjdHVyZVZhbHVlLnNpbmdsZXRvbigpKTsKKyAgICAgICAg
ICAgICAgICAgICAgbm9kZS0+Y29udmVydFRvU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnQo
c3RydWN0dXJlVmFsdWUuc2luZ2xldG9uKCkpOwogICAgICAgICAgICAgICAgICAgICBjaGFuZ2Vk
ID0gdHJ1ZTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0x
MjMsMzcgKzEyMiwzNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAg
Y2FzZSBDaGVja0FycmF5OgogICAgICAgICAgICAgY2FzZSBBcnJheWlmeTogewotICAgICAgICAg
ICAgICAgIGlmICghbm9kZS5hcnJheU1vZGUoKS5hbHJlYWR5Q2hlY2tlZChtX2dyYXBoLCBub2Rl
LCBtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSkpKQorICAgICAgICAgICAgICAgIGlmICgh
bm9kZS0+YXJyYXlNb2RlKCkuYWxyZWFkeUNoZWNrZWQobV9ncmFwaCwgbm9kZSwgbV9zdGF0ZS5m
b3JOb2RlKG5vZGUtPmNoaWxkMSgpKSkpCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICAgIEFTU0VSVChub2RlLnJlZkNvdW50KCkgPT0gMSk7Ci0gICAgICAgICAgICAg
ICAgbm9kZS5zZXRPcEFuZERlZmF1bHRGbGFncyhQaGFudG9tKTsKKyAgICAgICAgICAgICAgICBB
U1NFUlQobm9kZS0+cmVmQ291bnQoKSA9PSAxKTsKKyAgICAgICAgICAgICAgICBub2RlLT5zZXRP
cEFuZERlZmF1bHRGbGFncyhQaGFudG9tKTsKICAgICAgICAgICAgICAgICBlbGltaW5hdGVkID0g
dHJ1ZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICAKICAgICAgICAgICAgIGNhc2UgQ2hlY2tGdW5jdGlvbjogewotICAgICAgICAgICAgICAg
IGlmIChtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSkudmFsdWUoKSAhPSBub2RlLmZ1bmN0
aW9uKCkpCisgICAgICAgICAgICAgICAgaWYgKG1fc3RhdGUuZm9yTm9kZShub2RlLT5jaGlsZDEo
KSkudmFsdWUoKSAhPSBub2RlLT5mdW5jdGlvbigpKQogICAgICAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgICAgICBub2RlLnNldE9wQW5kRGVmYXVsdEZsYWdzKFBoYW50b20pOwor
ICAgICAgICAgICAgICAgIG5vZGUtPnNldE9wQW5kRGVmYXVsdEZsYWdzKFBoYW50b20pOwogICAg
ICAgICAgICAgICAgIGVsaW1pbmF0ZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgY2FzZSBDb252ZXJ0
VGhpczogewotICAgICAgICAgICAgICAgIGlmICghaXNPYmplY3RTcGVjdWxhdGlvbihtX3N0YXRl
LmZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSkKKyAgICAgICAgICAgICAgICBpZiAoIWlz
T2JqZWN0U3BlY3VsYXRpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX3R5cGUp
KQogICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBub2RlLnNldE9w
QW5kRGVmYXVsdEZsYWdzKElkZW50aXR5KTsKKyAgICAgICAgICAgICAgICBub2RlLT5zZXRPcEFu
ZERlZmF1bHRGbGFncyhJZGVudGl0eSk7CiAgICAgICAgICAgICAgICAgY2hhbmdlZCA9IHRydWU7
CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
CiAgICAgICAgICAgICBjYXNlIEdldEJ5SWQ6CiAgICAgICAgICAgICBjYXNlIEdldEJ5SWRGbHVz
aDogewotICAgICAgICAgICAgICAgIENvZGVPcmlnaW4gY29kZU9yaWdpbiA9IG5vZGUuY29kZU9y
aWdpbjsKLSAgICAgICAgICAgICAgICBOb2RlSW5kZXggY2hpbGQgPSBub2RlLmNoaWxkMSgpLmlu
ZGV4KCk7Ci0gICAgICAgICAgICAgICAgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciA9IG5vZGUu
aWRlbnRpZmllck51bWJlcigpOworICAgICAgICAgICAgICAgIENvZGVPcmlnaW4gY29kZU9yaWdp
biA9IG5vZGUtPmNvZGVPcmlnaW47CisgICAgICAgICAgICAgICAgTm9kZSogY2hpbGQgPSBub2Rl
LT5jaGlsZDEoKS5ub2RlKCk7CisgICAgICAgICAgICAgICAgdW5zaWduZWQgaWRlbnRpZmllck51
bWJlciA9IG5vZGUtPmlkZW50aWZpZXJOdW1iZXIoKTsKICAgICAgICAgICAgICAgICAKLSAgICAg
ICAgICAgICAgICBpZiAoIWlzQ2VsbFNwZWN1bGF0aW9uKG1fZ3JhcGhbY2hpbGRdLnByZWRpY3Rp
b24oKSkpCisgICAgICAgICAgICAgICAgaWYgKCFpc0NlbGxTcGVjdWxhdGlvbihjaGlsZC0+cHJl
ZGljdGlvbigpKSkKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAg
CiAgICAgICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBtX3N0YXRlLmZvck5vZGUo
Y2hpbGQpLmJlc3RQcm92ZW5TdHJ1Y3R1cmUoKTsKQEAgLTE4Nyw3ICsxODYsNyBAQCBwcml2YXRl
OgogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIE5vZGVJbmRleCBwcm9wZXJ0eVN0
b3JhZ2VJbmRleDsKICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBtX2dyYXBoW2No
aWxkXS5yZWYoKTsKKyAgICAgICAgICAgICAgICBjaGlsZC0+cmVmKCk7CiAgICAgICAgICAgICAg
ICAgaWYgKGlzSW5saW5lT2Zmc2V0KHN0YXR1cy5vZmZzZXQoKSkpCiAgICAgICAgICAgICAgICAg
ICAgIHByb3BlcnR5U3RvcmFnZUluZGV4ID0gY2hpbGQ7CiAgICAgICAgICAgICAgICAgZWxzZSB7
CkBAIC0xOTYsNyArMTk1LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgICAgIGNo
aWxkKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAg
ICAgbV9ncmFwaFtub2RlSW5kZXhdLmNvbnZlcnRUb0dldEJ5T2Zmc2V0KG1fZ3JhcGgubV9zdG9y
YWdlQWNjZXNzRGF0YS5zaXplKCksIHByb3BlcnR5U3RvcmFnZUluZGV4KTsKKyAgICAgICAgICAg
ICAgICBub2RlLT5jb252ZXJ0VG9HZXRCeU9mZnNldChtX2dyYXBoLm1fc3RvcmFnZUFjY2Vzc0Rh
dGEuc2l6ZSgpLCBwcm9wZXJ0eVN0b3JhZ2VJbmRleCk7CiAgICAgICAgICAgICAgICAgCiAgICAg
ICAgICAgICAgICAgU3RvcmFnZUFjY2Vzc0RhdGEgc3RvcmFnZUFjY2Vzc0RhdGE7CiAgICAgICAg
ICAgICAgICAgc3RvcmFnZUFjY2Vzc0RhdGEub2Zmc2V0ID0gaW5kZXhSZWxhdGl2ZVRvQmFzZShz
dGF0dXMub2Zmc2V0KCkpOwpAQCAtMjA3LDkgKzIwNiw5IEBAIHByaXZhdGU6CiAgICAgICAgICAg
ICAgICAgCiAgICAgICAgICAgICBjYXNlIFB1dEJ5SWQ6CiAgICAgICAgICAgICBjYXNlIFB1dEJ5
SWREaXJlY3Q6IHsKLSAgICAgICAgICAgICAgICBDb2RlT3JpZ2luIGNvZGVPcmlnaW4gPSBub2Rl
LmNvZGVPcmlnaW47Ci0gICAgICAgICAgICAgICAgTm9kZUluZGV4IGNoaWxkID0gbm9kZS5jaGls
ZDEoKS5pbmRleCgpOwotICAgICAgICAgICAgICAgIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIg
PSBub2RlLmlkZW50aWZpZXJOdW1iZXIoKTsKKyAgICAgICAgICAgICAgICBDb2RlT3JpZ2luIGNv
ZGVPcmlnaW4gPSBub2RlLT5jb2RlT3JpZ2luOworICAgICAgICAgICAgICAgIE5vZGUqIGNoaWxk
ID0gbm9kZS0+Y2hpbGQxKCkubm9kZSgpOworICAgICAgICAgICAgICAgIHVuc2lnbmVkIGlkZW50
aWZpZXJOdW1iZXIgPSBub2RlLT5pZGVudGlmaWVyTnVtYmVyKCk7CiAgICAgICAgICAgICAgICAg
CiAgICAgICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBtX3N0YXRlLmZvck5vZGUo
Y2hpbGQpLmJlc3RQcm92ZW5TdHJ1Y3R1cmUoKTsKICAgICAgICAgICAgICAgICBpZiAoIXN0cnVj
dHVyZSkKQEAgLTIyMiw3ICsyMjEsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICBt
X2dyYXBoLmdsb2JhbE9iamVjdEZvcihjb2RlT3JpZ2luKSwKICAgICAgICAgICAgICAgICAgICAg
c3RydWN0dXJlLAogICAgICAgICAgICAgICAgICAgICBjb2RlQmxvY2soKS0+aWRlbnRpZmllcihp
ZGVudGlmaWVyTnVtYmVyKSwKLSAgICAgICAgICAgICAgICAgICAgbm9kZS5vcCgpID09IFB1dEJ5
SWREaXJlY3QpOworICAgICAgICAgICAgICAgICAgICBub2RlLT5vcCgpID09IFB1dEJ5SWREaXJl
Y3QpOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGlmICghc3RhdHVzLmlzU2lt
cGxlUmVwbGFjZSgpICYmICFzdGF0dXMuaXNTaW1wbGVUcmFuc2l0aW9uKCkpCiAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwpAQCAtMjQ3LDcgKzI0Niw3IEBAIHByaXZhdGU6CiAgICAgICAgICAg
ICAgICAgICAgIHRyYW5zaXRpb25EYXRhID0gbV9ncmFwaC5hZGRTdHJ1Y3R1cmVUcmFuc2l0aW9u
RGF0YSgKICAgICAgICAgICAgICAgICAgICAgICAgIFN0cnVjdHVyZVRyYW5zaXRpb25EYXRhKHN0
cnVjdHVyZSwgc3RhdHVzLm5ld1N0cnVjdHVyZSgpKSk7CiAgICAgICAgICAgICAgICAgICAgIAot
ICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS5vcCgpID09IFB1dEJ5SWQpIHsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gUHV0QnlJZCkgewogICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKCFzdHJ1Y3R1cmUtPnN0b3JlZFByb3RvdHlwZSgpLmlzTnVsbCgpKSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkU3RydWN0dXJlVHJhbnNpdGlvbkNoZWNrKAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlT3JpZ2luLCBpbmRleEluQmxvY2ss
CkBAIC0yNjUsMTggKzI2NCwxOCBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgTm9kZUluZGV4IHByb3BlcnR5U3Rv
cmFnZUluZGV4OworICAgICAgICAgICAgICAgIE5vZGUqIHByb3BlcnR5U3RvcmFnZTsKICAgICAg
ICAgICAgICAgICAKICAgICAgICAgICAgICAgICBpZiAoaXNJbmxpbmVPZmZzZXQoc3RhdHVzLm9m
ZnNldCgpKSkgewotICAgICAgICAgICAgICAgICAgICBtX2dyYXBoW2NoaWxkXS5yZWYoKTsgLy8g
VGhlIGNoaWxkIHdpbGwgYmUgdXNlZCBhcyB0aGUgcHJvcGVydHkgaW5kZXgsIHNvIHJlZiBpdCB0
byByZWZsZWN0IHRoZSBkb3VibGUgdXNlLgotICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eVN0
b3JhZ2VJbmRleCA9IGNoaWxkOworICAgICAgICAgICAgICAgICAgICBjaGlsZC0+cmVmKCk7IC8v
IFRoZSBjaGlsZCB3aWxsIGJlIHVzZWQgYXMgdGhlIHByb3BlcnR5IGluZGV4LCBzbyByZWYgaXQg
dG8gcmVmbGVjdCB0aGUgZG91YmxlIHVzZS4KKyAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlT
dG9yYWdlID0gY2hpbGQ7CiAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdGF0dXMuaXNTaW1w
bGVSZXBsYWNlKCkgfHwgc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpID09IHN0YXR1cy5u
ZXdTdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSkgewotICAgICAgICAgICAgICAgICAg
ICBwcm9wZXJ0eVN0b3JhZ2VJbmRleCA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCisgICAg
ICAgICAgICAgICAgICAgIHByb3BlcnR5U3RvcmFnZSA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydE5v
ZGUoCiAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleEluQmxvY2ssIFJlZkNoaWxkcmVuLCBS
ZWZOb2RlLCBTcGVjTm9uZSwgR2V0QnV0dGVyZmx5LCBjb2RlT3JpZ2luLCBjaGlsZCk7CiAgICAg
ICAgICAgICAgICAgfSBlbHNlIGlmICghc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpKSB7
CiAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChzdGF0dXMubmV3U3RydWN0dXJlKCktPm91dE9m
TGluZUNhcGFjaXR5KCkpOwogICAgICAgICAgICAgICAgICAgICBBU1NFUlQoIWlzSW5saW5lT2Zm
c2V0KHN0YXR1cy5vZmZzZXQoKSkpOwotICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eVN0b3Jh
Z2VJbmRleCA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCisgICAgICAgICAgICAgICAgICAg
IHByb3BlcnR5U3RvcmFnZSA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCiAgICAgICAgICAg
ICAgICAgICAgICAgICBpbmRleEluQmxvY2ssIFJlZkNoaWxkcmVuLCBSZWZOb2RlLCBTcGVjTm9u
ZSwgQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UsCiAgICAgICAgICAgICAgICAgICAgICAgICBjb2Rl
T3JpZ2luLCBPcEluZm8odHJhbnNpdGlvbkRhdGEpLCBjaGlsZCk7CiAgICAgICAgICAgICAgICAg
fSBlbHNlIHsKQEAgLTI4NCw3ICsyODMsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAg
ICBBU1NFUlQoc3RhdHVzLm5ld1N0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpID4gc3Ry
dWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpKTsKICAgICAgICAgICAgICAgICAgICAgQVNTRVJU
KCFpc0lubGluZU9mZnNldChzdGF0dXMub2Zmc2V0KCkpKTsKICAgICAgICAgICAgICAgICAgICAg
Ci0gICAgICAgICAgICAgICAgICAgIHByb3BlcnR5U3RvcmFnZUluZGV4ID0gbV9pbnNlcnRpb25T
ZXQuaW5zZXJ0Tm9kZSgKKyAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlTdG9yYWdlID0gbV9p
bnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4SW5C
bG9jaywgUmVmQ2hpbGRyZW4sIFJlZk5vZGUsIFNwZWNOb25lLCBSZWFsbG9jYXRlUHJvcGVydHlT
dG9yYWdlLAogICAgICAgICAgICAgICAgICAgICAgICAgY29kZU9yaWdpbiwgT3BJbmZvKHRyYW5z
aXRpb25EYXRhKSwKICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkLApAQCAtMjk5LDcgKzI5
OCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgICAgICBPcEluZm8odHJhbnNpdGlv
bkRhdGEpLCBjaGlsZCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIAotICAg
ICAgICAgICAgICAgIG1fZ3JhcGhbbm9kZUluZGV4XS5jb252ZXJ0VG9QdXRCeU9mZnNldChtX2dy
YXBoLm1fc3RvcmFnZUFjY2Vzc0RhdGEuc2l6ZSgpLCBwcm9wZXJ0eVN0b3JhZ2VJbmRleCk7Cisg
ICAgICAgICAgICAgICAgbm9kZS0+Y29udmVydFRvUHV0QnlPZmZzZXQobV9ncmFwaC5tX3N0b3Jh
Z2VBY2Nlc3NEYXRhLnNpemUoKSwgcHJvcGVydHlTdG9yYWdlSW5kZXgpOwogICAgICAgICAgICAg
ICAgIAogICAgICAgICAgICAgICAgIFN0b3JhZ2VBY2Nlc3NEYXRhIHN0b3JhZ2VBY2Nlc3NEYXRh
OwogICAgICAgICAgICAgICAgIHN0b3JhZ2VBY2Nlc3NEYXRhLm9mZnNldCA9IGluZGV4UmVsYXRp
dmVUb0Jhc2Uoc3RhdHVzLm9mZnNldCgpKTsKQEAgLTMyMCw3MiArMzE5LDcwIEBAIHByaXZhdGU6
CiAgICAgICAgICAgICBtX3N0YXRlLmV4ZWN1dGUoaW5kZXhJbkJsb2NrKTsKICAgICAgICAgICAg
IGlmICghbm9kZS5zaG91bGRHZW5lcmF0ZSgpIHx8IG1fc3RhdGUuZGlkQ2xvYmJlcigpIHx8IG5v
ZGUuaGFzQ29uc3RhbnQoKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAg
IEpTVmFsdWUgdmFsdWUgPSBtX3N0YXRlLmZvck5vZGUobm9kZUluZGV4KS52YWx1ZSgpOworICAg
ICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IG1fc3RhdGUuZm9yTm9kZShub2RlKS52YWx1ZSgpOwog
ICAgICAgICAgICAgaWYgKCF2YWx1ZSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAg
ICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChub2RlLm9wKCkgPT0gR2V0TG9jYWwpIHsKLSAg
ICAgICAgICAgICAgICBOb2RlSW5kZXggcHJldmlvdXNMb2NhbEFjY2VzcyA9IE5vTm9kZTsKLSAg
ICAgICAgICAgICAgICBpZiAoYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5vcGVyYW5kKG5vZGUubG9j
YWwoKSkgPT0gbm9kZUluZGV4Ci0gICAgICAgICAgICAgICAgICAgICYmIG1fZ3JhcGhbbm9kZS5j
aGlsZDEoKV0ub3AoKSA9PSBQaGkpIHsKKyAgICAgICAgICAgIGlmIChub2RlLT5vcCgpID09IEdl
dExvY2FsKSB7CisgICAgICAgICAgICAgICAgTm9kZSogcHJldmlvdXNMb2NhbEFjY2VzcyA9IDA7
CisgICAgICAgICAgICAgICAgaWYgKGJsb2NrLT52YXJpYWJsZXNBdEhlYWQub3BlcmFuZChub2Rl
LT5sb2NhbCgpKSA9PSBub2RlCisgICAgICAgICAgICAgICAgICAgICYmIG5vZGUtPmNoaWxkMSgp
LT5vcCgpID09IFBoaSkgewogICAgICAgICAgICAgICAgICAgICAvLyBXZSBleHBlY3QgdGhpcyB0
byBiZSB0aGUgY29tbW9uIGNhc2UuCi0gICAgICAgICAgICAgICAgICAgIEFTU0VSVChibG9jay0+
aXNJblBoaXMobm9kZS5jaGlsZDEoKS5pbmRleCgpKSk7Ci0gICAgICAgICAgICAgICAgICAgIHBy
ZXZpb3VzTG9jYWxBY2Nlc3MgPSBub2RlLmNoaWxkMSgpLmluZGV4KCk7Ci0gICAgICAgICAgICAg
ICAgICAgIGJsb2NrLT52YXJpYWJsZXNBdEhlYWQub3BlcmFuZChub2RlLmxvY2FsKCkpID0gcHJl
dmlvdXNMb2NhbEFjY2VzczsKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGJsb2NrLT5pc0lu
UGhpcyhub2RlLT5jaGlsZDEoKS5ub2RlKCkpKTsKKyAgICAgICAgICAgICAgICAgICAgcHJldmlv
dXNMb2NhbEFjY2VzcyA9IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKKyAgICAgICAgICAgICAgICAg
ICAgYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5vcGVyYW5kKG5vZGUtPmxvY2FsKCkpID0gcHJldmlv
dXNMb2NhbEFjY2VzczsKICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAg
ICAgICBBU1NFUlQoaW5kZXhJbkJsb2NrID4gMCk7CiAgICAgICAgICAgICAgICAgICAgIC8vIE11
c3Qgc2VhcmNoIGZvciB0aGUgcHJldmlvdXMgYWNjZXNzIHRvIHRoaXMgbG9jYWwuCiAgICAgICAg
ICAgICAgICAgICAgIGZvciAoQmxvY2tJbmRleCBzdWJJbmRleEluQmxvY2sgPSBpbmRleEluQmxv
Y2s7IHN1YkluZGV4SW5CbG9jay0tOykgewotICAgICAgICAgICAgICAgICAgICAgICAgTm9kZUlu
ZGV4IHN1Yk5vZGVJbmRleCA9IGJsb2NrLT5hdChzdWJJbmRleEluQmxvY2spOwotICAgICAgICAg
ICAgICAgICAgICAgICAgTm9kZSYgc3ViTm9kZSA9IG1fZ3JhcGhbc3ViTm9kZUluZGV4XTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICghc3ViTm9kZS5zaG91bGRHZW5lcmF0ZSgpKQorICAg
ICAgICAgICAgICAgICAgICAgICAgTm9kZSogc3ViTm9kZSA9IGJsb2NrLT5hdChzdWJJbmRleElu
QmxvY2spOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFzdWJOb2RlLT5zaG91bGRHZW5l
cmF0ZSgpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKCFzdWJOb2RlLmhhc1ZhcmlhYmxlQWNjZXNzRGF0YSgpKQorICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKCFzdWJOb2RlLT5oYXNWYXJpYWJsZUFjY2Vzc0RhdGEo
KSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGlmIChzdWJOb2RlLmxvY2FsKCkgIT0gbm9kZS5sb2NhbCgpKQorICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKHN1Yk5vZGUtPmxvY2FsKCkgIT0gbm9kZS0+bG9jYWwoKSkKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIFRoZSB0d28gbXVzdCBoYXZlIGJlZW4gdW5pZmllZC4KLSAgICAgICAgICAgICAgICAg
ICAgICAgIEFTU0VSVChzdWJOb2RlLnZhcmlhYmxlQWNjZXNzRGF0YSgpID09IG5vZGUudmFyaWFi
bGVBY2Nlc3NEYXRhKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKHN1Yk5vZGUt
PnZhcmlhYmxlQWNjZXNzRGF0YSgpID09IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpKTsKICAg
ICAgICAgICAgICAgICAgICAgICAgIHByZXZpb3VzTG9jYWxBY2Nlc3MgPSBzdWJOb2RlSW5kZXg7
CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgICAgICBpZiAocHJldmlvdXNMb2NhbEFjY2VzcyA9PSBOb05vZGUpIHsK
KyAgICAgICAgICAgICAgICAgICAgaWYgKCFwcmV2aW91c0xvY2FsQWNjZXNzKSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBUaGUgcHJldmlvdXMgYWNjZXNzIG11c3QgaGF2ZSBiZWVuIGEg
UGhpLgogICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChCbG9ja0luZGV4IHBoaUluZGV4SW5C
bG9jayA9IGJsb2NrLT5waGlzLnNpemUoKTsgcGhpSW5kZXhJbkJsb2NrLS07KSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgTm9kZUluZGV4IHBoaU5vZGVJbmRleCA9IGJsb2NrLT5waGlz
W3BoaUluZGV4SW5CbG9ja107Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgTm9kZSYgcGhp
Tm9kZSA9IG1fZ3JhcGhbcGhpTm9kZUluZGV4XTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoIXBoaU5vZGUuc2hvdWxkR2VuZXJhdGUoKSkKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBOb2RlKiBwaGlOb2RlID0gYmxvY2stPnBoaXNbcGhpSW5kZXhJbkJsb2NrXTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXBoaU5vZGUtPnNob3VsZEdlbmVyYXRlKCkpCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIChwaGlOb2RlLmxvY2FsKCkgIT0gbm9kZS5sb2NhbCgpKQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChwaGlOb2RlLT5sb2NhbCgpICE9IG5vZGUtPmxvY2Fs
KCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIFRoZSB0d28gbXVzdCBoYXZlIGJlZW4gdW5pZmllZC4KLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQocGhpTm9kZS52YXJpYWJsZUFjY2Vzc0Rh
dGEoKSA9PSBub2RlLnZhcmlhYmxlQWNjZXNzRGF0YSgpKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBwcmV2aW91c0xvY2FsQWNjZXNzID0gcGhpTm9kZUluZGV4OworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEFTU0VSVChwaGlOb2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKSA9PSBu
b2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cHJldmlvdXNMb2NhbEFjY2VzcyA9IHBoaU5vZGU7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBBU1NFUlQocHJldmlvdXNMb2NhbEFjY2VzcyAhPSBOb05vZGUpOworICAgICAgICAgICAg
ICAgICAgICAgICAgQVNTRVJUKHByZXZpb3VzTG9jYWxBY2Nlc3MpOwogICAgICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAg
ICAgICAgICBBU1NFUlQocHJldmlvdXNMb2NhbEFjY2VzcyAhPSBOb05vZGUpOworICAgICAgICAg
ICAgICAgIEFTU0VSVChwcmV2aW91c0xvY2FsQWNjZXNzKTsKICAgICAgICAgICAgICAgICAKLSAg
ICAgICAgICAgICAgICBOb2RlSW5kZXggdGFpbE5vZGVJbmRleCA9IGJsb2NrLT52YXJpYWJsZXNB
dFRhaWwub3BlcmFuZChub2RlLmxvY2FsKCkpOwotICAgICAgICAgICAgICAgIGlmICh0YWlsTm9k
ZUluZGV4ID09IG5vZGVJbmRleCkKLSAgICAgICAgICAgICAgICAgICAgYmxvY2stPnZhcmlhYmxl
c0F0VGFpbC5vcGVyYW5kKG5vZGUubG9jYWwoKSkgPSBwcmV2aW91c0xvY2FsQWNjZXNzOworICAg
ICAgICAgICAgICAgIE5vZGUqIHRhaWxOb2RlID0gYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVy
YW5kKG5vZGUtPmxvY2FsKCkpOworICAgICAgICAgICAgICAgIGlmICh0YWlsTm9kZSA9PSBub2Rl
KQorICAgICAgICAgICAgICAgICAgICBibG9jay0+dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQobm9k
ZS0+bG9jYWwoKSkgPSBwcmV2aW91c0xvY2FsQWNjZXNzOwogICAgICAgICAgICAgICAgIGVsc2Ug
ewotICAgICAgICAgICAgICAgICAgICBBU1NFUlQobV9ncmFwaFt0YWlsTm9kZUluZGV4XS5vcCgp
ID09IEZsdXNoCi0gICAgICAgICAgICAgICAgICAgICAgICB8fCBtX2dyYXBoW3RhaWxOb2RlSW5k
ZXhdLm9wKCkgPT0gU2V0TG9jYWwKLSAgICAgICAgICAgICAgICAgICAgICAgIHx8IG5vZGUudmFy
aWFibGVBY2Nlc3NEYXRhKCktPmlzQ2FwdHVyZWQoKSk7CisgICAgICAgICAgICAgICAgICAgIEFT
U0VSVCh0YWlsTm9kZS0+b3AoKSA9PSBGbHVzaAorICAgICAgICAgICAgICAgICAgICAgICAgfHwg
dGFpbE5vZGUtPm9wKCkgPT0gU2V0TG9jYWwKKyAgICAgICAgICAgICAgICAgICAgICAgIHx8IG5v
ZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5pc0NhcHR1cmVkKCkpOwogICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAgICAgICAgQ29kZU9yaWdpbiBj
b2RlT3JpZ2luID0gbm9kZS5jb2RlT3JpZ2luOwotICAgICAgICAgICAgQWRqYWNlbmN5TGlzdCBj
aGlsZHJlbiA9IG5vZGUuY2hpbGRyZW47CisgICAgICAgICAgICBDb2RlT3JpZ2luIGNvZGVPcmln
aW4gPSBub2RlLT5jb2RlT3JpZ2luOworICAgICAgICAgICAgQWRqYWNlbmN5TGlzdCBjaGlsZHJl
biA9IG5vZGUtPmNoaWxkcmVuOwogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgbV9ncmFw
aC5jb252ZXJ0VG9Db25zdGFudChub2RlSW5kZXgsIHZhbHVlKTsKKyAgICAgICAgICAgIG1fZ3Jh
cGguY29udmVydFRvQ29uc3RhbnQobm9kZSwgdmFsdWUpOwogICAgICAgICAgICAgbV9pbnNlcnRp
b25TZXQuaW5zZXJ0Tm9kZSgKICAgICAgICAgICAgICAgICBpbmRleEluQmxvY2ssIERvbnRSZWZD
aGlsZHJlbiwgRG9udFJlZk5vZGUsIFNwZWNOb25lLCBQaGFudG9tLCBjb2RlT3JpZ2luLCBjaGls
ZHJlbik7Ci0gICAgICAgICAgICAgICAgCisgICAgICAgICAgICAKICAgICAgICAgICAgIGNoYW5n
ZWQgPSB0cnVlOwogICAgICAgICB9CiAgICAgICAgIG1fc3RhdGUucmVzZXQoKTsKQEAgLTM5Niwy
MCArMzkzLDIwIEBAIHByaXZhdGU6CiAgICAgCiAgICAgdm9pZCBhZGRTdHJ1Y3R1cmVUcmFuc2l0
aW9uQ2hlY2soQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCB1bnNpZ25lZCBpbmRleEluQmxvY2ssIEpT
Q2VsbCogY2VsbCkKICAgICB7Ci0gICAgICAgIE5vZGVJbmRleCB3ZWFrQ29uc3RhbnRJbmRleCA9
IG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCisgICAgICAgIE5vZGUqIHdlYWtDb25zdGFudCA9
IG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCiAgICAgICAgICAgICBpbmRleEluQmxvY2ssIERv
bnRSZWZDaGlsZHJlbiwgRG9udFJlZk5vZGUsIHNwZWN1bGF0aW9uRnJvbVZhbHVlKGNlbGwpLAog
ICAgICAgICAgICAgV2Vha0pTQ29uc3RhbnQsIGNvZGVPcmlnaW4sIE9wSW5mbyhjZWxsKSk7CiAg
ICAgICAgIAogICAgICAgICBpZiAoY2VsbC0+c3RydWN0dXJlKCktPnRyYW5zaXRpb25XYXRjaHBv
aW50U2V0SXNTdGlsbFZhbGlkKCkpIHsKICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2Vy
dE5vZGUoCiAgICAgICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBSZWZDaGlsZHJlbiwgRG9udFJl
Zk5vZGUsIFNwZWNOb25lLCBTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludCwKLSAgICAgICAg
ICAgICAgICBjb2RlT3JpZ2luLCBPcEluZm8oY2VsbC0+c3RydWN0dXJlKCkpLCB3ZWFrQ29uc3Rh
bnRJbmRleCk7CisgICAgICAgICAgICAgICAgY29kZU9yaWdpbiwgT3BJbmZvKGNlbGwtPnN0cnVj
dHVyZSgpKSwgd2Vha0NvbnN0YW50KTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQog
CiAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCiAgICAgICAgICAgICBpbmRleElu
QmxvY2ssIFJlZkNoaWxkcmVuLCBEb250UmVmTm9kZSwgU3BlY05vbmUsIENoZWNrU3RydWN0dXJl
LCBjb2RlT3JpZ2luLAotICAgICAgICAgICAgT3BJbmZvKG1fZ3JhcGguYWRkU3RydWN0dXJlU2V0
KGNlbGwtPnN0cnVjdHVyZSgpKSksIHdlYWtDb25zdGFudEluZGV4KTsKKyAgICAgICAgICAgIE9w
SW5mbyhtX2dyYXBoLmFkZFN0cnVjdHVyZVNldChjZWxsLT5zdHJ1Y3R1cmUoKSkpLCB3ZWFrQ29u
c3RhbnQpOwogICAgIH0KICAgICAKICAgICAvLyBUaGlzIGlzIG5lY2Vzc2FyeSBiZWNhdXNlIHRo
ZSBDRkEgbWF5IHJlYWNoIGNvbmNsdXNpb25zIGFib3V0IGNvbnN0YW50cyBiYXNlZCBvbiBpdHMK
QEAgLTQzNCw5ICs0MzEsOCBAQCBwcml2YXRlOgogICAgICAgICAgICAgaWYgKG1fc3RhdGUuaXNW
YWxpZCgpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgCi0gICAgICAg
ICAgICBOb2RlSW5kZXggbm9kZUluZGV4ID0gYmxvY2stPmF0KGluZGV4SW5CbG9jayk7Ci0gICAg
ICAgICAgICBOb2RlJiBub2RlID0gbV9ncmFwaFtub2RlSW5kZXhdOwotICAgICAgICAgICAgc3dp
dGNoIChub2RlLm9wKCkpIHsKKyAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+YXQoaW5k
ZXhJbkJsb2NrKTsKKyAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewogICAgICAgICAg
ICAgY2FzZSBSZXR1cm46CiAgICAgICAgICAgICBjYXNlIFRocm93OgogICAgICAgICAgICAgY2Fz
ZSBUaHJvd1JlZmVyZW5jZUVycm9yOgpAQCAtNDQ3LDcgKzQ0Myw3IEBAIHByaXZhdGU6CiAgICAg
ICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5v
ZGUoCiAgICAgICAgICAgICAgICAgICAgIGluZGV4SW5CbG9jaywgRG9udFJlZkNoaWxkcmVuLCBE
b250UmVmTm9kZSwgU3BlY05vbmUsIEZvcmNlT1NSRXhpdCwKLSAgICAgICAgICAgICAgICAgICAg
bm9kZS5jb2RlT3JpZ2luKTsKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y29kZU9yaWdpbik7
CiAgICAgICAgICAgICAgICAgY2hhbmdlZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0VkZ2Uu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRWRnZS5jcHAJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0VkZ2UuY3BwCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdFZGdl
LmgiCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBE
RkcgeworCit2b2lkIEVkZ2U6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBv
dXQucHJpbnQodXNlS2luZFRvU3RyaW5nKHVzZUtpbmQoKSksIG5vZGUoKSk7Cit9CisKK30gfSAv
LyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0VkZ2UuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0VkZ2UuaAkocmV2aXNpb24gMTQwNTY3KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdFZGdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQzLDQxICs0
MywzOSBAQCBwdWJsaWM6CiAgICAgewogICAgIH0KICAgICAKLSAgICBleHBsaWNpdCBFZGdlKE5v
ZGVJbmRleCBub2RlSW5kZXgpCi0gICAgICAgIDogbV9lbmNvZGVkV29yZChtYWtlV29yZChub2Rl
SW5kZXgsIFVudHlwZWRVc2UpKQorICAgIGV4cGxpY2l0IEVkZ2UoTm9kZSogbm9kZSkKKyAgICAg
ICAgOiBtX2VuY29kZWRXb3JkKG1ha2VXb3JkKG5vZGUsIFVudHlwZWRVc2UpKQogICAgIHsKICAg
ICB9CiAgICAgCi0gICAgRWRnZShOb2RlSW5kZXggbm9kZUluZGV4LCBVc2VLaW5kIHVzZUtpbmQp
Ci0gICAgICAgIDogbV9lbmNvZGVkV29yZChtYWtlV29yZChub2RlSW5kZXgsIHVzZUtpbmQpKQor
ICAgIEVkZ2UoTm9kZSogbm9kZSwgVXNlS2luZCB1c2VLaW5kKQorICAgICAgICA6IG1fZW5jb2Rl
ZFdvcmQobWFrZVdvcmQobm9kZSwgdXNlS2luZCkpCiAgICAgewogICAgIH0KICAgICAKLSAgICBO
b2RlSW5kZXggaW5kZXhVbmNoZWNrZWQoKSBjb25zdCB7IHJldHVybiBtX2VuY29kZWRXb3JkID4+
IHNoaWZ0KCk7IH0KLSAgICBOb2RlSW5kZXggaW5kZXgoKSBjb25zdAotICAgIHsKLSAgICAgICAg
QVNTRVJUKGlzU2V0KCkpOwotICAgICAgICByZXR1cm4gbV9lbmNvZGVkV29yZCA+PiBzaGlmdCgp
OwotICAgIH0KLSAgICB2b2lkIHNldEluZGV4KE5vZGVJbmRleCBub2RlSW5kZXgpCisgICAgTm9k
ZSogbm9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fZW5jb2RlZFdvcmQgJiB+KCgxIDw8IHNoaWZ0KCkp
IC0gMSk7IH0KKyAgICBOb2RlJiBvcGVyYXRvciooKSBjb25zdCB7IHJldHVybiAqZ2V0KCk7IH0K
KyAgICBOb2RlKiBvcGVyYXRvci0+KCkgY29uc3QgeyByZXR1cm4gZ2V0KCk7IH0KKyAgICAKKyAg
ICB2b2lkIHNldE5vZGUoTm9kZSogbm9kZSkKICAgICB7Ci0gICAgICAgIG1fZW5jb2RlZFdvcmQg
PSBtYWtlV29yZChub2RlSW5kZXgsIHVzZUtpbmQoKSk7CisgICAgICAgIG1fZW5jb2RlZFdvcmQg
PSBtYWtlV29yZChub2RlLCB1c2VLaW5kKCkpOwogICAgIH0KICAgICAKICAgICBVc2VLaW5kIHVz
ZUtpbmQoKSBjb25zdAogICAgIHsKLSAgICAgICAgQVNTRVJUKGlzU2V0KCkpOworICAgICAgICBB
U1NFUlQobm9kZSgpKTsKICAgICAgICAgdW5zaWduZWQgbWFza2VkID0gbV9lbmNvZGVkV29yZCAm
ICgoKDEgPDwgc2hpZnQoKSkgLSAxKSk7CiAgICAgICAgIEFTU0VSVChtYXNrZWQgPCBMYXN0VXNl
S2luZCk7CiAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxVc2VLaW5kPihtYXNrZWQpOwogICAg
IH0KICAgICB2b2lkIHNldFVzZUtpbmQoVXNlS2luZCB1c2VLaW5kKQogICAgIHsKLSAgICAgICAg
QVNTRVJUKGlzU2V0KCkpOwotICAgICAgICBtX2VuY29kZWRXb3JkID0gbWFrZVdvcmQoaW5kZXgo
KSwgdXNlS2luZCk7CisgICAgICAgIEFTU0VSVChub2RlKCkpOworICAgICAgICBtX2VuY29kZWRX
b3JkID0gbWFrZVdvcmQobm9kZSgpLCB1c2VLaW5kKTsKICAgICB9CiAgICAgCi0gICAgYm9vbCBp
c1NldCgpIGNvbnN0IHsgcmV0dXJuIGluZGV4VW5jaGVja2VkKCkgIT0gTm9Ob2RlOyB9CisgICAg
Ym9vbCBpc1NldCgpIGNvbnN0IHsgcmV0dXJuICEhbm9kZSgpOyB9CiAgICAgCiAgICAgdHlwZWRl
ZiB2b2lkKiBFZGdlOjoqVW5zcGVjaWZpZWRCb29sVHlwZTsKICAgICBvcGVyYXRvciBVbnNwZWNp
ZmllZEJvb2xUeXBlKigpIGNvbnN0IHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8VW5zcGVjaWZp
ZWRCb29sVHlwZSo+KGlzU2V0KCkpOyB9CkBAIC05MiwzOCArOTAsNDEgQEAgcHVibGljOgogICAg
IHsKICAgICAgICAgcmV0dXJuIG1fZW5jb2RlZFdvcmQgIT0gb3RoZXIubV9lbmNvZGVkV29yZDsK
ICAgICB9CisgICAgCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CiAKIHByaXZh
dGU6CiAgICAgZnJpZW5kIGNsYXNzIEFkamFjZW5jeUxpc3Q7CiAgICAgCi0gICAgc3RhdGljIHVp
bnQzMl90IHNoaWZ0KCkgeyByZXR1cm4gNDsgfQorICAgIHN0YXRpYyB1aW50MzJfdCBzaGlmdCgp
IHsgcmV0dXJuIDI7IH0KICAgICAKLSAgICBzdGF0aWMgaW50MzJfdCBtYWtlV29yZChOb2RlSW5k
ZXggbm9kZUluZGV4LCBVc2VLaW5kIHVzZUtpbmQpCisgICAgc3RhdGljIHVpbnRwdHJfdCBtYWtl
V29yZChOb2RlKiBub2RlLCBVc2VLaW5kIHVzZUtpbmQpCiAgICAgewotICAgICAgICBBU1NFUlQo
c3RhdGljX2Nhc3Q8dWludDMyX3Q+KCgoc3RhdGljX2Nhc3Q8aW50MzJfdD4obm9kZUluZGV4KSA8
PCBzaGlmdCgpKSA+PiBzaGlmdCgpKSkgPT0gbm9kZUluZGV4KTsKKyAgICAgICAgdWludHB0cl90
IHZhbHVlID0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4obm9kZSk7CisgICAgICAgIEFTU0VSVCgh
KHZhbHVlICYgKCgxIDw8IHNoaWZ0KCkpIC0gMSkpKTsKICAgICAgICAgQVNTRVJUKHVzZUtpbmQg
Pj0gMCAmJiB1c2VLaW5kIDwgTGFzdFVzZUtpbmQpOwogICAgICAgICBBU1NFUlQoTGFzdFVzZUtp
bmQgPD0gKDEgPDwgc2hpZnQoKSkpOwotICAgICAgICByZXR1cm4gKG5vZGVJbmRleCA8PCBzaGlm
dCgpKSB8IHVzZUtpbmQ7CisgICAgICAgIHJldHVybiB2YWx1ZSB8IHN0YXRpY19jYXN0PHVpbnRw
dHJfdD4odXNlS2luZCk7CiAgICAgfQogICAgIAotICAgIGludDMyX3QgbV9lbmNvZGVkV29yZDsK
KyAgICB1aW50cHRyX3QgbV9lbmNvZGVkV29yZDsKIH07CiAKLWlubGluZSBib29sIG9wZXJhdG9y
PT0oRWRnZSBub2RlVXNlLCBOb2RlSW5kZXggbm9kZUluZGV4KQoraW5saW5lIGJvb2wgb3BlcmF0
b3I9PShFZGdlIGVkZ2UsIE5vZGUqIG5vZGUpCiB7Ci0gICAgcmV0dXJuIG5vZGVVc2UuaW5kZXhV
bmNoZWNrZWQoKSA9PSBub2RlSW5kZXg7CisgICAgcmV0dXJuIGVkZ2Uubm9kZSgpID09IG5vZGU7
CiB9Ci1pbmxpbmUgYm9vbCBvcGVyYXRvcj09KE5vZGVJbmRleCBub2RlSW5kZXgsIEVkZ2Ugbm9k
ZVVzZSkKK2lubGluZSBib29sIG9wZXJhdG9yPT0oTm9kZSogbm9kZSwgRWRnZSBlZGdlKQogewot
ICAgIHJldHVybiBub2RlVXNlLmluZGV4VW5jaGVja2VkKCkgPT0gbm9kZUluZGV4OworICAgIHJl
dHVybiBlZGdlLm5vZGUoKSA9PSBub2RlOwogfQotaW5saW5lIGJvb2wgb3BlcmF0b3IhPShFZGdl
IG5vZGVVc2UsIE5vZGVJbmRleCBub2RlSW5kZXgpCitpbmxpbmUgYm9vbCBvcGVyYXRvciE9KEVk
Z2UgZWRnZSwgTm9kZSogbm9kZSkKIHsKLSAgICByZXR1cm4gbm9kZVVzZS5pbmRleFVuY2hlY2tl
ZCgpICE9IG5vZGVJbmRleDsKKyAgICByZXR1cm4gZWRnZS5ub2RlKCkgIT0gbm9kZTsKIH0KLWlu
bGluZSBib29sIG9wZXJhdG9yIT0oTm9kZUluZGV4IG5vZGVJbmRleCwgRWRnZSBub2RlVXNlKQor
aW5saW5lIGJvb2wgb3BlcmF0b3IhPShOb2RlKiBub2RlLCBFZGdlIGVkZ2UpCiB7Ci0gICAgcmV0
dXJuIG5vZGVVc2UuaW5kZXhVbmNoZWNrZWQoKSAhPSBub2RlSW5kZXg7CisgICAgcmV0dXJuIGVk
Z2Uubm9kZSgpICE9IG5vZGU7CiB9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAkocmV2aXNpb24g
MTQwNTY3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLCAy
MDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtNTgsMjEgKzU4LDIxIEBAIHByaXZhdGU6CiAgICAgICAgIEFTU0VSVChi
bG9jay0+aXNSZWFjaGFibGUpOwogICAgICAgICBtX2Jsb2NrID0gYmxvY2s7CiAgICAgICAgIGZv
ciAobV9pbmRleEluQmxvY2sgPSAwOyBtX2luZGV4SW5CbG9jayA8IGJsb2NrLT5zaXplKCk7ICsr
bV9pbmRleEluQmxvY2spIHsKLSAgICAgICAgICAgIG1fY29tcGlsZUluZGV4ID0gYmxvY2stPmF0
KG1faW5kZXhJbkJsb2NrKTsKLSAgICAgICAgICAgIGZpeHVwTm9kZShtX2dyYXBoW21fY29tcGls
ZUluZGV4XSk7CisgICAgICAgICAgICBtX2N1cnJlbnROb2RlID0gYmxvY2stPmF0KG1faW5kZXhJ
bkJsb2NrKTsKKyAgICAgICAgICAgIGZpeHVwTm9kZShtX2N1cnJlbnROb2RlKTsKICAgICAgICAg
fQogICAgICAgICBtX2luc2VydGlvblNldC5leGVjdXRlKGJsb2NrKTsKICAgICB9CiAgICAgCi0g
ICAgdm9pZCBmaXh1cE5vZGUoTm9kZSYgbm9kZSkKKyAgICB2b2lkIGZpeHVwTm9kZShOb2RlKiBu
b2RlKQogICAgIHsKLSAgICAgICAgaWYgKCFub2RlLnNob3VsZEdlbmVyYXRlKCkpCisgICAgICAg
IGlmICghbm9kZS0+c2hvdWxkR2VuZXJhdGUoKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgCi0gICAgICAgIE5vZGVUeXBlIG9wID0gbm9kZS5vcCgpOworICAgICAgICBOb2RlVHlwZSBv
cCA9IG5vZGUtPm9wKCk7CiAKICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJP
U0UpCi0gICAgICAgIGRhdGFMb2dGKCIgICAlcyBAJXU6ICIsIEdyYXBoOjpvcE5hbWUob3ApLCBt
X2NvbXBpbGVJbmRleCk7CisgICAgICAgIGRhdGFMb2dGKCIgICAlcyBAJXU6ICIsIEdyYXBoOjpv
cE5hbWUob3ApLCBub2RlLT5pbmRleCgpKTsKICNlbmRpZgogICAgICAgICAKICAgICAgICAgc3dp
dGNoIChvcCkgewpAQCAtODAsODAgKzgwLDcxIEBAIHByaXZhdGU6CiAgICAgICAgICAgICBpZiAo
bV9ncmFwaC5tX2ZpeHBvaW50U3RhdGUgPiBCZWZvcmVGaXhwb2ludCkKICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgIAotICAgICAgICAgICAgTm9kZSogbm9kZVB0ciA9ICZub2Rl
OwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoIWlzSW50MzJTcGVjdWxhdGlvbihtX2dy
YXBoW21fY29tcGlsZUluZGV4XS5wcmVkaWN0aW9uKCkpKQorICAgICAgICAgICAgaWYgKCFpc0lu
dDMyU3BlY3VsYXRpb24obm9kZS0+cHJlZGljdGlvbigpKSkKICAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgIGlmIChjb2RlQmxvY2soKS0+aWRlbnRpZmllcihub2RlUHRyLT5pZGVu
dGlmaWVyTnVtYmVyKCkpICE9IGdsb2JhbERhdGEoKS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgpCisg
ICAgICAgICAgICBpZiAoY29kZUJsb2NrKCktPmlkZW50aWZpZXIobm9kZS0+aWRlbnRpZmllck51
bWJlcigpKSAhPSBnbG9iYWxEYXRhKCkucHJvcGVydHlOYW1lcy0+bGVuZ3RoKQogICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgQXJyYXlQcm9maWxlKiBhcnJheVByb2ZpbGUgPSAK
LSAgICAgICAgICAgICAgICBtX2dyYXBoLmJhc2VsaW5lQ29kZUJsb2NrRm9yKG5vZGVQdHItPmNv
ZGVPcmlnaW4pLT5nZXRBcnJheVByb2ZpbGUoCi0gICAgICAgICAgICAgICAgICAgIG5vZGVQdHIt
PmNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCk7CisgICAgICAgICAgICAgICAgbV9ncmFwaC5iYXNl
bGluZUNvZGVCbG9ja0Zvcihub2RlLT5jb2RlT3JpZ2luKS0+Z2V0QXJyYXlQcm9maWxlKAorICAg
ICAgICAgICAgICAgICAgICBub2RlLT5jb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgpOwogICAgICAg
ICAgICAgQXJyYXlNb2RlIGFycmF5TW9kZSA9IEFycmF5TW9kZShBcnJheTo6U2VsZWN0VXNpbmdQ
cmVkaWN0aW9ucyk7CiAgICAgICAgICAgICBpZiAoYXJyYXlQcm9maWxlKSB7Ci0gICAgICAgICAg
ICAgICAgYXJyYXlQcm9maWxlLT5jb21wdXRlVXBkYXRlZFByZWRpY3Rpb24obV9ncmFwaC5iYXNl
bGluZUNvZGVCbG9ja0Zvcihub2RlLmNvZGVPcmlnaW4pKTsKKyAgICAgICAgICAgICAgICBhcnJh
eVByb2ZpbGUtPmNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbihtX2dyYXBoLmJhc2VsaW5lQ29kZUJs
b2NrRm9yKG5vZGUtPmNvZGVPcmlnaW4pKTsKICAgICAgICAgICAgICAgICBhcnJheU1vZGUgPSBB
cnJheU1vZGU6OmZyb21PYnNlcnZlZChhcnJheVByb2ZpbGUsIEFycmF5OjpSZWFkLCBmYWxzZSk7
CiAgICAgICAgICAgICAgICAgYXJyYXlNb2RlID0gYXJyYXlNb2RlLnJlZmluZSgKLSAgICAgICAg
ICAgICAgICAgICAgbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5wcmVkaWN0aW9uKCksCi0gICAgICAg
ICAgICAgICAgICAgIG1fZ3JhcGhbbV9jb21waWxlSW5kZXhdLnByZWRpY3Rpb24oKSk7CisgICAg
ICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLT5wcmVkaWN0aW9uKCksIG5vZGUtPnByZWRp
Y3Rpb24oKSk7CiAgICAgICAgICAgICAgICAgaWYgKGFycmF5TW9kZS5zdXBwb3J0c0xlbmd0aCgp
ICYmIGFycmF5UHJvZmlsZS0+aGFzRGVmaW5pdGVTdHJ1Y3R1cmUoKSkgewogICAgICAgICAgICAg
ICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAogICAgICAgICAgICAgICAgICAgICAg
ICAgbV9pbmRleEluQmxvY2ssIFJlZkNoaWxkcmVuLCBEb250UmVmTm9kZSwgU3BlY05vbmUsIENo
ZWNrU3RydWN0dXJlLAotICAgICAgICAgICAgICAgICAgICAgICAgbm9kZVB0ci0+Y29kZU9yaWdp
biwgT3BJbmZvKG1fZ3JhcGguYWRkU3RydWN0dXJlU2V0KGFycmF5UHJvZmlsZS0+ZXhwZWN0ZWRT
dHJ1Y3R1cmUoKSkpLAotICAgICAgICAgICAgICAgICAgICAgICAgbm9kZVB0ci0+Y2hpbGQxKCku
aW5kZXgoKSk7Ci0gICAgICAgICAgICAgICAgICAgIG5vZGVQdHIgPSAmbV9ncmFwaFttX2NvbXBp
bGVJbmRleF07CisgICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5jb2RlT3JpZ2luLCBPcElu
Zm8obV9ncmFwaC5hZGRTdHJ1Y3R1cmVTZXQoYXJyYXlQcm9maWxlLT5leHBlY3RlZFN0cnVjdHVy
ZSgpKSksCisgICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDEoKS5ub2RlKCkpOwog
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAg
YXJyYXlNb2RlID0gYXJyYXlNb2RlLnJlZmluZSgKLSAgICAgICAgICAgICAgICAgICAgbV9ncmFw
aFtub2RlLmNoaWxkMSgpXS5wcmVkaWN0aW9uKCksCi0gICAgICAgICAgICAgICAgICAgIG1fZ3Jh
cGhbbV9jb21waWxlSW5kZXhdLnByZWRpY3Rpb24oKSk7Ci0gICAgICAgICAgICB9CisgICAgICAg
ICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICBhcnJheU1vZGUgPSBhcnJheU1vZGUucmVmaW5l
KG5vZGUtPmNoaWxkMSgpLT5wcmVkaWN0aW9uKCksIG5vZGUtPnByZWRpY3Rpb24oKSk7CiAgICAg
ICAgICAgICBpZiAoIWFycmF5TW9kZS5zdXBwb3J0c0xlbmd0aCgpKQogICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgbm9kZVB0ci0+c2V0T3AoR2V0QXJyYXlMZW5ndGgpOwotICAg
ICAgICAgICAgQVNTRVJUKG5vZGVQdHItPmZsYWdzKCkgJiBOb2RlTXVzdEdlbmVyYXRlKTsKLSAg
ICAgICAgICAgIG5vZGVQdHItPmNsZWFyRmxhZ3MoTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVDbG9i
YmVyc1dvcmxkKTsKLSAgICAgICAgICAgIG1fZ3JhcGguZGVyZWYobV9jb21waWxlSW5kZXgpOwot
ICAgICAgICAgICAgbm9kZVB0ci0+c2V0QXJyYXlNb2RlKGFycmF5TW9kZSk7CisgICAgICAgICAg
ICBub2RlLT5zZXRPcChHZXRBcnJheUxlbmd0aCk7CisgICAgICAgICAgICBBU1NFUlQobm9kZS0+
ZmxhZ3MoKSAmIE5vZGVNdXN0R2VuZXJhdGUpOworICAgICAgICAgICAgbm9kZS0+Y2xlYXJGbGFn
cyhOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZUNsb2JiZXJzV29ybGQpOworICAgICAgICAgICAgbV9n
cmFwaC5kZXJlZihub2RlKTsKKyAgICAgICAgICAgIG5vZGUtPnNldEFycmF5TW9kZShhcnJheU1v
ZGUpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBOb2RlSW5kZXggc3RvcmFnZSA9IGNoZWNr
QXJyYXkoYXJyYXlNb2RlLCBub2RlUHRyLT5jb2RlT3JpZ2luLCBub2RlUHRyLT5jaGlsZDEoKS5p
bmRleCgpLCBOb05vZGUsIGxlbmd0aE5lZWRzU3RvcmFnZSwgbm9kZVB0ci0+c2hvdWxkR2VuZXJh
dGUoKSk7Ci0gICAgICAgICAgICBpZiAoc3RvcmFnZSA9PSBOb05vZGUpCisgICAgICAgICAgICBO
b2RlKiBzdG9yYWdlID0gY2hlY2tBcnJheShhcnJheU1vZGUsIG5vZGUtPmNvZGVPcmlnaW4sIG5v
ZGUtPmNoaWxkMSgpLm5vZGUoKSwgMCwgbGVuZ3RoTmVlZHNTdG9yYWdlLCBub2RlLT5zaG91bGRH
ZW5lcmF0ZSgpKTsKKyAgICAgICAgICAgIGlmICghc3RvcmFnZSkKICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgIAotICAgICAgICAgICAgbm9kZVB0ciA9ICZtX2dyYXBoW21fY29t
cGlsZUluZGV4XTsKLSAgICAgICAgICAgIG5vZGVQdHItPmNoaWxkcmVuLmNoaWxkMigpID0gRWRn
ZShzdG9yYWdlKTsKKyAgICAgICAgICAgIG5vZGUtPmNoaWxkcmVuLmNoaWxkMigpID0gRWRnZShz
dG9yYWdlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgR2V0
SW5kZXhlZFByb3BlcnR5U3RvcmFnZTogewotICAgICAgICAgICAgQVNTRVJUKG5vZGUuYXJyYXlN
b2RlKCkuY2FuQ1NFU3RvcmFnZSgpKTsKKyAgICAgICAgICAgIEFTU0VSVChub2RlLT5hcnJheU1v
ZGUoKS5jYW5DU0VTdG9yYWdlKCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAg
ICAgICAgY2FzZSBHZXRCeVZhbDogewotICAgICAgICAgICAgbm9kZS5zZXRBcnJheU1vZGUoCi0g
ICAgICAgICAgICAgICAgbm9kZS5hcnJheU1vZGUoKS5yZWZpbmUoCi0gICAgICAgICAgICAgICAg
ICAgIG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ucHJlZGljdGlvbigpLAotICAgICAgICAgICAgICAg
ICAgICBtX2dyYXBoW25vZGUuY2hpbGQyKCldLnByZWRpY3Rpb24oKSwKLSAgICAgICAgICAgICAg
ICAgICAgU3BlY05vbmUsIG5vZGUuZmxhZ3MoKSkpOworICAgICAgICAgICAgbm9kZS0+c2V0QXJy
YXlNb2RlKAorICAgICAgICAgICAgICAgIG5vZGUtPmFycmF5TW9kZSgpLnJlZmluZSgKKyAgICAg
ICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCktPnByZWRpY3Rpb24oKSwKKyAgICAgICAgICAg
ICAgICAgICAgbm9kZS0+Y2hpbGQyKCktPnByZWRpY3Rpb24oKSwKKyAgICAgICAgICAgICAgICAg
ICAgU3BlY05vbmUsIG5vZGUtPmZsYWdzKCkpKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAg
Ymxlc3NBcnJheU9wZXJhdGlvbihub2RlLmNoaWxkMSgpLCBub2RlLmNoaWxkMigpLCAyKTsKKyAg
ICAgICAgICAgIGJsZXNzQXJyYXlPcGVyYXRpb24obm9kZS0+Y2hpbGQxKCksIG5vZGUtPmNoaWxk
MigpLCAyKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgTm9kZSogbm9kZVB0ciA9ICZtX2dy
YXBoW21fY29tcGlsZUluZGV4XTsKLSAgICAgICAgICAgIEFycmF5TW9kZSBhcnJheU1vZGUgPSBu
b2RlUHRyLT5hcnJheU1vZGUoKTsKKyAgICAgICAgICAgIEFycmF5TW9kZSBhcnJheU1vZGUgPSBu
b2RlLT5hcnJheU1vZGUoKTsKICAgICAgICAgICAgIGlmIChhcnJheU1vZGUudHlwZSgpID09IEFy
cmF5OjpEb3VibGUKICAgICAgICAgICAgICAgICAmJiBhcnJheU1vZGUuYXJyYXlDbGFzcygpID09
IEFycmF5OjpPcmlnaW5hbEFycmF5CiAgICAgICAgICAgICAgICAgJiYgYXJyYXlNb2RlLnNwZWN1
bGF0aW9uKCkgPT0gQXJyYXk6OkluQm91bmRzCiAgICAgICAgICAgICAgICAgJiYgYXJyYXlNb2Rl
LmNvbnZlcnNpb24oKSA9PSBBcnJheTo6QXNJcwotICAgICAgICAgICAgICAgICYmIG1fZ3JhcGgu
Z2xvYmFsT2JqZWN0Rm9yKG5vZGVQdHItPmNvZGVPcmlnaW4pLT5hcnJheVByb3RvdHlwZUNoYWlu
SXNTYW5lKCkKLSAgICAgICAgICAgICAgICAmJiAhKG5vZGVQdHItPmZsYWdzKCkgJiBOb2RlVXNl
ZEFzT3RoZXIpKQotICAgICAgICAgICAgICAgIG5vZGVQdHItPnNldEFycmF5TW9kZShhcnJheU1v
ZGUud2l0aFNwZWN1bGF0aW9uKEFycmF5OjpTYW5lQ2hhaW4pKTsKKyAgICAgICAgICAgICAgICAm
JiBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5jb2RlT3JpZ2luKS0+YXJyYXlQcm90b3R5
cGVDaGFpbklzU2FuZSgpCisgICAgICAgICAgICAgICAgJiYgIShub2RlLT5mbGFncygpICYgTm9k
ZVVzZWRBc090aGVyKSkKKyAgICAgICAgICAgICAgICBub2RlLT5zZXRBcnJheU1vZGUoYXJyYXlN
b2RlLndpdGhTcGVjdWxhdGlvbihBcnJheTo6U2FuZUNoYWluKSk7CiAgICAgICAgICAgICAKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgU3RyaW5nQ2hhckF0Ogog
ICAgICAgICBjYXNlIFN0cmluZ0NoYXJDb2RlQXQ6IHsKICAgICAgICAgICAgIC8vIEN1cnJlbnRs
eSB3ZSBoYXZlIG5vIGdvb2Qgd2F5IG9mIHJlZmluaW5nIHRoZXNlLgotICAgICAgICAgICAgQVNT
RVJUKG5vZGUuYXJyYXlNb2RlKCkgPT0gQXJyYXlNb2RlKEFycmF5OjpTdHJpbmcpKTsKLSAgICAg
ICAgICAgIGJsZXNzQXJyYXlPcGVyYXRpb24obm9kZS5jaGlsZDEoKSwgbm9kZS5jaGlsZDIoKSwg
Mik7CisgICAgICAgICAgICBBU1NFUlQobm9kZS0+YXJyYXlNb2RlKCkgPT0gQXJyYXlNb2RlKEFy
cmF5OjpTdHJpbmcpKTsKKyAgICAgICAgICAgIGJsZXNzQXJyYXlPcGVyYXRpb24obm9kZS0+Y2hp
bGQxKCksIG5vZGUtPmNoaWxkMigpLCAyKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9
CiAgICAgICAgICAgICAKQEAgLTE2NywxNSArMTU4LDE0IEBAIHByaXZhdGU6CiAgICAgICAgICAg
ICAvLyBpZ25vcmVkLiBUaGF0J3MgYmVjYXVzZSBBcnJheVB1c2ggY2FuJ3QgaGFuZGxlIGFueSBh
cnJheSBtb2RlcyB0aGF0IGFyZW4ndAogICAgICAgICAgICAgLy8gYXJyYXktcmVsYXRlZCAtIHNv
IGlmIHJlZmluZSgpIHR1cm5lZCB0aGlzIGludG8gYSAiR2VuZXJpYyIgQXJyYXlQdXNoIHRoZW4K
ICAgICAgICAgICAgIC8vIHRoYXQgd291bGQgYnJlYWsgdGhpbmdzLgotICAgICAgICAgICAgbm9k
ZS5zZXRBcnJheU1vZGUoCi0gICAgICAgICAgICAgICAgbm9kZS5hcnJheU1vZGUoKS5yZWZpbmUo
Ci0gICAgICAgICAgICAgICAgICAgIG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ucHJlZGljdGlvbigp
ICYgU3BlY0NlbGwsCisgICAgICAgICAgICBub2RlLT5zZXRBcnJheU1vZGUoCisgICAgICAgICAg
ICAgICAgbm9kZS0+YXJyYXlNb2RlKCkucmVmaW5lKAorICAgICAgICAgICAgICAgICAgICBub2Rl
LT5jaGlsZDEoKS0+cHJlZGljdGlvbigpICYgU3BlY0NlbGwsCiAgICAgICAgICAgICAgICAgICAg
IFNwZWNJbnQzMiwKLSAgICAgICAgICAgICAgICAgICAgbV9ncmFwaFtub2RlLmNoaWxkMigpXS5w
cmVkaWN0aW9uKCkpKTsKLSAgICAgICAgICAgIGJsZXNzQXJyYXlPcGVyYXRpb24obm9kZS5jaGls
ZDEoKSwgRWRnZSgpLCAyKTsKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQyKCktPnBy
ZWRpY3Rpb24oKSkpOworICAgICAgICAgICAgYmxlc3NBcnJheU9wZXJhdGlvbihub2RlLT5jaGls
ZDEoKSwgRWRnZSgpLCAyKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgTm9kZSogbm9kZVB0
ciA9ICZtX2dyYXBoW21fY29tcGlsZUluZGV4XTsKLSAgICAgICAgICAgIHN3aXRjaCAobm9kZVB0
ci0+YXJyYXlNb2RlKCkudHlwZSgpKSB7CisgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPmFycmF5
TW9kZSgpLnR5cGUoKSkgewogICAgICAgICAgICAgY2FzZSBBcnJheTo6RG91YmxlOgogICAgICAg
ICAgICAgICAgIGZpeERvdWJsZUVkZ2UoMSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0x
ODYsMTUgKzE3NiwxNSBAQCBwcml2YXRlOgogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAg
ICAgY2FzZSBBcnJheVBvcDogewotICAgICAgICAgICAgYmxlc3NBcnJheU9wZXJhdGlvbihub2Rl
LmNoaWxkMSgpLCBFZGdlKCksIDEpOworICAgICAgICAgICAgYmxlc3NBcnJheU9wZXJhdGlvbihu
b2RlLT5jaGlsZDEoKSwgRWRnZSgpLCAxKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9
CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBWYWx1ZVRvSW50MzI6IHsKLSAgICAgICAgICAg
IGlmIChtX2dyYXBoW25vZGUuY2hpbGQxKCldLnNob3VsZFNwZWN1bGF0ZU51bWJlcigpCi0gICAg
ICAgICAgICAgICAgJiYgbm9kZS5tdXN0R2VuZXJhdGUoKSkgewotICAgICAgICAgICAgICAgIG5v
ZGUuY2xlYXJGbGFncyhOb2RlTXVzdEdlbmVyYXRlKTsKLSAgICAgICAgICAgICAgICBtX2dyYXBo
LmRlcmVmKG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS0+
c2hvdWxkU3BlY3VsYXRlTnVtYmVyKCkKKyAgICAgICAgICAgICAgICAmJiBub2RlLT5tdXN0R2Vu
ZXJhdGUoKSkgeworICAgICAgICAgICAgICAgIG5vZGUtPmNsZWFyRmxhZ3MoTm9kZU11c3RHZW5l
cmF0ZSk7CisgICAgICAgICAgICAgICAgbV9ncmFwaC5kZXJlZihub2RlKTsKICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkBAIC0yMDUsOCArMTk1LDggQEAgcHJp
dmF0ZToKICAgICAgICAgY2FzZSBCaXRSU2hpZnQ6CiAgICAgICAgIGNhc2UgQml0TFNoaWZ0Ogog
ICAgICAgICBjYXNlIEJpdFVSU2hpZnQ6IHsKLSAgICAgICAgICAgIGZpeEludEVkZ2Uobm9kZS5j
aGlsZHJlbi5jaGlsZDEoKSk7Ci0gICAgICAgICAgICBmaXhJbnRFZGdlKG5vZGUuY2hpbGRyZW4u
Y2hpbGQyKCkpOworICAgICAgICAgICAgZml4SW50RWRnZShub2RlLT5jaGlsZHJlbi5jaGlsZDEo
KSk7CisgICAgICAgICAgICBmaXhJbnRFZGdlKG5vZGUtPmNoaWxkcmVuLmNoaWxkMigpKTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKQEAgLTIxNiw5ICsyMDYs
OSBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIENvbXBhcmVHcmVhdGVyOgogICAgICAgICBjYXNl
IENvbXBhcmVHcmVhdGVyRXE6CiAgICAgICAgIGNhc2UgQ29tcGFyZVN0cmljdEVxOiB7Ci0gICAg
ICAgICAgICBpZiAoTm9kZTo6c2hvdWxkU3BlY3VsYXRlSW50ZWdlcihtX2dyYXBoW25vZGUuY2hp
bGQxKCldLCBtX2dyYXBoW25vZGUuY2hpbGQyKCldKSkKKyAgICAgICAgICAgIGlmIChOb2RlOjpz
aG91bGRTcGVjdWxhdGVJbnRlZ2VyKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgbm9kZS0+Y2hpbGQy
KCkubm9kZSgpKSkKICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGlmICghTm9k
ZTo6c2hvdWxkU3BlY3VsYXRlTnVtYmVyKG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0sIG1fZ3JhcGhb
bm9kZS5jaGlsZDIoKV0pKQorICAgICAgICAgICAgaWYgKCFOb2RlOjpzaG91bGRTcGVjdWxhdGVO
dW1iZXIobm9kZS0+Y2hpbGQxKCkubm9kZSgpLCBub2RlLT5jaGlsZDIoKS5ub2RlKCkpKQogICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgZml4RG91YmxlRWRnZSgwKTsKICAgICAg
ICAgICAgIGZpeERvdWJsZUVkZ2UoMSk7CkBAIC0yMjYsNDMgKzIxNiw0MSBAQCBwcml2YXRlOgog
ICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBMb2dpY2FsTm90OiB7Ci0gICAg
ICAgICAgICBpZiAobV9ncmFwaFtub2RlLmNoaWxkMSgpXS5zaG91bGRTcGVjdWxhdGVJbnRlZ2Vy
KCkpCisgICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZUludGVn
ZXIoKSkKICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGlmICghbV9ncmFwaFtu
b2RlLmNoaWxkMSgpXS5zaG91bGRTcGVjdWxhdGVOdW1iZXIoKSkKKyAgICAgICAgICAgIGlmICgh
bm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZU51bWJlcigpKQogICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgZml4RG91YmxlRWRnZSgwKTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBCcmFuY2g6IHsKLSAgICAg
ICAgICAgIGlmICghbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5zaG91bGRTcGVjdWxhdGVJbnRlZ2Vy
KCkKLSAgICAgICAgICAgICAgICAmJiBtX2dyYXBoW25vZGUuY2hpbGQxKCldLnNob3VsZFNwZWN1
bGF0ZU51bWJlcigpKQorICAgICAgICAgICAgaWYgKCFub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3Bl
Y3VsYXRlSW50ZWdlcigpCisgICAgICAgICAgICAgICAgJiYgbm9kZS0+Y2hpbGQxKCktPnNob3Vs
ZFNwZWN1bGF0ZU51bWJlcigpKQogICAgICAgICAgICAgICAgIGZpeERvdWJsZUVkZ2UoMCk7CiAK
LSAgICAgICAgICAgIE5vZGUmIG15Tm9kZSA9IG1fZ3JhcGhbbV9jb21waWxlSW5kZXhdOyAvLyBy
ZWxvYWQgYmVjYXVzZSB0aGUgZ3JhcGggbWF5IGhhdmUgY2hhbmdlZAotICAgICAgICAgICAgRWRn
ZSBsb2dpY2FsTm90RWRnZSA9IG15Tm9kZS5jaGlsZDEoKTsKLSAgICAgICAgICAgIE5vZGUmIGxv
Z2ljYWxOb3QgPSBtX2dyYXBoW2xvZ2ljYWxOb3RFZGdlXTsKLSAgICAgICAgICAgIGlmIChsb2dp
Y2FsTm90Lm9wKCkgPT0gTG9naWNhbE5vdAotICAgICAgICAgICAgICAgICYmIGxvZ2ljYWxOb3Qu
YWRqdXN0ZWRSZWZDb3VudCgpID09IDEpIHsKLSAgICAgICAgICAgICAgICBFZGdlIG5ld0NoaWxk
RWRnZSA9IGxvZ2ljYWxOb3QuY2hpbGQxKCk7Ci0gICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGhb
bmV3Q2hpbGRFZGdlXS5oYXNCb29sZWFuUmVzdWx0KCkpIHsKKyAgICAgICAgICAgIE5vZGUqIGxv
Z2ljYWxOb3QgPSBub2RlLT5jaGlsZDEoKS5ub2RlKCk7CisgICAgICAgICAgICBpZiAobG9naWNh
bE5vdC0+b3AoKSA9PSBMb2dpY2FsTm90CisgICAgICAgICAgICAgICAgJiYgbG9naWNhbE5vdC0+
YWRqdXN0ZWRSZWZDb3VudCgpID09IDEpIHsKKyAgICAgICAgICAgICAgICBFZGdlIG5ld0NoaWxk
RWRnZSA9IGxvZ2ljYWxOb3QtPmNoaWxkMSgpOworICAgICAgICAgICAgICAgIGlmIChuZXdDaGls
ZEVkZ2UtPmhhc0Jvb2xlYW5SZXN1bHQoKSkgewogICAgICAgICAgICAgICAgICAgICBtX2dyYXBo
LnJlZihuZXdDaGlsZEVkZ2UpOwotICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLmRlcmVmKGxv
Z2ljYWxOb3RFZGdlKTsKKyAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5kZXJlZihsb2dpY2Fs
Tm90KTsKICAgICAgICAgICAgICAgICAgICAgbXlOb2RlLmNoaWxkcmVuLnNldENoaWxkMShuZXdD
aGlsZEVkZ2UpOwogICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgQmxv
Y2tJbmRleCB0b0JlVGFrZW4gPSBteU5vZGUubm90VGFrZW5CbG9ja0luZGV4KCk7Ci0gICAgICAg
ICAgICAgICAgICAgIEJsb2NrSW5kZXggdG9CZU5vdFRha2VuID0gbXlOb2RlLnRha2VuQmxvY2tJ
bmRleCgpOwotICAgICAgICAgICAgICAgICAgICBteU5vZGUuc2V0VGFrZW5CbG9ja0luZGV4KHRv
QmVUYWtlbik7Ci0gICAgICAgICAgICAgICAgICAgIG15Tm9kZS5zZXROb3RUYWtlbkJsb2NrSW5k
ZXgodG9CZU5vdFRha2VuKTsKKyAgICAgICAgICAgICAgICAgICAgQmxvY2tJbmRleCB0b0JlVGFr
ZW4gPSBub2RlLT5ub3RUYWtlbkJsb2NrSW5kZXgoKTsKKyAgICAgICAgICAgICAgICAgICAgQmxv
Y2tJbmRleCB0b0JlTm90VGFrZW4gPSBub2RlLT50YWtlbkJsb2NrSW5kZXgoKTsKKyAgICAgICAg
ICAgICAgICAgICAgbm9kZS0+c2V0VGFrZW5CbG9ja0luZGV4KHRvQmVUYWtlbik7CisgICAgICAg
ICAgICAgICAgICAgIG5vZGUtPnNldE5vdFRha2VuQmxvY2tJbmRleCh0b0JlTm90VGFrZW4pOwog
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBTZXRMb2NhbDogewotICAgICAgICAg
ICAgaWYgKG5vZGUudmFyaWFibGVBY2Nlc3NEYXRhKCktPmlzQ2FwdHVyZWQoKSkKKyAgICAgICAg
ICAgIGlmIChub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+aXNDYXB0dXJlZCgpKQogICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgaWYgKCFub2RlLnZhcmlhYmxlQWNjZXNzRGF0
YSgpLT5zaG91bGRVc2VEb3VibGVGb3JtYXQoKSkKKyAgICAgICAgICAgIGlmICghbm9kZS0+dmFy
aWFibGVBY2Nlc3NEYXRhKCktPnNob3VsZFVzZURvdWJsZUZvcm1hdCgpKQogICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgZml4RG91YmxlRWRnZSgwKTsKICAgICAgICAgICAgIGJy
ZWFrOwpAQCAtMjcyLDcgKzI2MCw3IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgVmFsdWVBZGQ6
IHsKICAgICAgICAgICAgIGlmIChtX2dyYXBoLmFkZFNob3VsZFNwZWN1bGF0ZUludGVnZXIobm9k
ZSkpCiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBpZiAoIU5vZGU6OnNob3Vs
ZFNwZWN1bGF0ZU51bWJlckV4cGVjdGluZ0RlZmluZWQobV9ncmFwaFtub2RlLmNoaWxkMSgpXSwg
bV9ncmFwaFtub2RlLmNoaWxkMigpXSkpCisgICAgICAgICAgICBpZiAoIU5vZGU6OnNob3VsZFNw
ZWN1bGF0ZU51bWJlckV4cGVjdGluZ0RlZmluZWQobm9kZS0+Y2hpbGQxKCkubm9kZSgpLCBub2Rl
LT5jaGlsZDIoKS5ub2RlKCkpKQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
Zml4RG91YmxlRWRnZSgwKTsKICAgICAgICAgICAgIGZpeERvdWJsZUVkZ2UoMSk7CkBAIC0yODEs
NyArMjY5LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIAogICAgICAgICBjYXNlIEFyaXRoU3Vi
OiB7CiAgICAgICAgICAgICBpZiAobV9ncmFwaC5hZGRTaG91bGRTcGVjdWxhdGVJbnRlZ2VyKG5v
ZGUpCi0gICAgICAgICAgICAgICAgJiYgbm9kZS5jYW5TcGVjdWxhdGVJbnRlZ2VyKCkpCisgICAg
ICAgICAgICAgICAgJiYgbm9kZS0+Y2FuU3BlY3VsYXRlSW50ZWdlcigpKQogICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgZml4RG91YmxlRWRnZSgwKTsKICAgICAgICAgICAgIGZp
eERvdWJsZUVkZ2UoMSk7CkBAIC0yOTgsOCArMjg2LDggQEAgcHJpdmF0ZToKICAgICAgICAgY2Fz
ZSBBcml0aE1pbjoKICAgICAgICAgY2FzZSBBcml0aE1heDoKICAgICAgICAgY2FzZSBBcml0aE1v
ZDogewotICAgICAgICAgICAgaWYgKE5vZGU6OnNob3VsZFNwZWN1bGF0ZUludGVnZXJGb3JBcml0
aG1ldGljKG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0sIG1fZ3JhcGhbbm9kZS5jaGlsZDIoKV0pCi0g
ICAgICAgICAgICAgICAgJiYgbm9kZS5jYW5TcGVjdWxhdGVJbnRlZ2VyKCkpCisgICAgICAgICAg
ICBpZiAoTm9kZTo6c2hvdWxkU3BlY3VsYXRlSW50ZWdlckZvckFyaXRobWV0aWMobm9kZS0+Y2hp
bGQxKCkubm9kZSgpLCBub2RlLT5jaGlsZDIoKS5ub2RlKCkpCisgICAgICAgICAgICAgICAgJiYg
bm9kZS0+Y2FuU3BlY3VsYXRlSW50ZWdlcigpKQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgZml4RG91YmxlRWRnZSgwKTsKICAgICAgICAgICAgIGZpeERvdWJsZUVkZ2UoMSk7
CkBAIC0zMTUsOCArMzAzLDggQEAgcHJpdmF0ZToKICAgICAgICAgfQogCiAgICAgICAgIGNhc2Ug
QXJpdGhEaXY6IHsKLSAgICAgICAgICAgIGlmIChOb2RlOjpzaG91bGRTcGVjdWxhdGVJbnRlZ2Vy
Rm9yQXJpdGhtZXRpYyhtX2dyYXBoW25vZGUuY2hpbGQxKCldLCBtX2dyYXBoW25vZGUuY2hpbGQy
KCldKQotICAgICAgICAgICAgICAgICYmIG5vZGUuY2FuU3BlY3VsYXRlSW50ZWdlcigpKSB7Cisg
ICAgICAgICAgICBpZiAoTm9kZTo6c2hvdWxkU3BlY3VsYXRlSW50ZWdlckZvckFyaXRobWV0aWMo
bm9kZS0+Y2hpbGQxKCkubm9kZSgpLCBub2RlLT5jaGlsZDIoKS5ub2RlKCkpCisgICAgICAgICAg
ICAgICAgJiYgbm9kZS0+Y2FuU3BlY3VsYXRlSW50ZWdlcigpKSB7CiAgICAgICAgICAgICAgICAg
aWYgKGlzWDg2KCkpCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAg
IGluamVjdEludDMyVG9Eb3VibGVOb2RlKDApOwpAQCAtMzI0LDEyICszMTIsMTEgQEAgcHJpdmF0
ZToKIAogICAgICAgICAgICAgICAgIC8vIFdlIGRvbid0IG5lZWQgdG8gZG8gcmVmJ2luZyBvbiB0
aGUgY2hpbGRyZW4gYmVjYXVzZSB3ZSdyZSBzdGVhbGluZyB0aGVtIGZyb20KICAgICAgICAgICAg
ICAgICAvLyB0aGUgb3JpZ2luYWwgZGl2aXNpb24uCi0gICAgICAgICAgICAgICAgTm9kZUluZGV4
IG5ld0RpdmlzaW9uSW5kZXggPSBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAotICAgICAgICAg
ICAgICAgICAgICBtX2luZGV4SW5CbG9jaywgRG9udFJlZkNoaWxkcmVuLCBSZWZOb2RlLCBTcGVj
RG91YmxlLCBtX2dyYXBoW21fY29tcGlsZUluZGV4XSk7Ci0gICAgICAgICAgICAgICAgCi0gICAg
ICAgICAgICAgICAgbV9ncmFwaFttX2NvbXBpbGVJbmRleF0uc2V0T3AoRG91YmxlQXNJbnQzMik7
Ci0gICAgICAgICAgICAgICAgbV9ncmFwaFttX2NvbXBpbGVJbmRleF0uY2hpbGRyZW4uaW5pdGlh
bGl6ZShFZGdlKG5ld0RpdmlzaW9uSW5kZXgsIERvdWJsZVVzZSksIEVkZ2UoKSwgRWRnZSgpKTsK
KyAgICAgICAgICAgICAgICBOb2RlKiBuZXdEaXZpc2lvbiA9IG1faW5zZXJ0aW9uU2V0Lmluc2Vy
dE5vZGUoCisgICAgICAgICAgICAgICAgICAgIG1faW5kZXhJbkJsb2NrLCBEb250UmVmQ2hpbGRy
ZW4sIFJlZk5vZGUsIFNwZWNEb3VibGUsIG5vZGUpOwogICAgICAgICAgICAgICAgIAorICAgICAg
ICAgICAgICAgIG5vZGUtPnNldE9wKERvdWJsZUFzSW50MzIpOworICAgICAgICAgICAgICAgIG5v
ZGUtPmNoaWxkcmVuLmluaXRpYWxpemUoRWRnZShuZXdEaXZpc2lvbiwgRG91YmxlVXNlKSwgRWRn
ZSgpLCBFZGdlKCkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAg
ICAgICAgICAgZml4RG91YmxlRWRnZSgwKTsKQEAgLTMzOCw4ICszMjUsOCBAQCBwcml2YXRlOgog
ICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBBcml0aEFiczogewotICAgICAg
ICAgICAgaWYgKG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0uc2hvdWxkU3BlY3VsYXRlSW50ZWdlckZv
ckFyaXRobWV0aWMoKQotICAgICAgICAgICAgICAgICYmIG5vZGUuY2FuU3BlY3VsYXRlSW50ZWdl
cigpKQorICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVJbnRl
Z2VyRm9yQXJpdGhtZXRpYygpCisgICAgICAgICAgICAgICAgJiYgbm9kZS0+Y2FuU3BlY3VsYXRl
SW50ZWdlcigpKQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgZml4RG91Ymxl
RWRnZSgwKTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMzU4LDE1ICszNDUsMTMgQEAgcHJpdmF0
ZToKIAogICAgICAgICAgICAgbm9kZS5zZXRBcnJheU1vZGUoCiAgICAgICAgICAgICAgICAgbm9k
ZS5hcnJheU1vZGUoKS5yZWZpbmUoCi0gICAgICAgICAgICAgICAgICAgIG1fZ3JhcGhbY2hpbGQx
XS5wcmVkaWN0aW9uKCksCi0gICAgICAgICAgICAgICAgICAgIG1fZ3JhcGhbY2hpbGQyXS5wcmVk
aWN0aW9uKCksCi0gICAgICAgICAgICAgICAgICAgIG1fZ3JhcGhbY2hpbGQzXS5wcmVkaWN0aW9u
KCkpKTsKKyAgICAgICAgICAgICAgICAgICAgY2hpbGQxLT5wcmVkaWN0aW9uKCksCisgICAgICAg
ICAgICAgICAgICAgIGNoaWxkMi0+cHJlZGljdGlvbigpLAorICAgICAgICAgICAgICAgICAgICBj
aGlsZDMtPnByZWRpY3Rpb24oKSkpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBibGVzc0Fy
cmF5T3BlcmF0aW9uKGNoaWxkMSwgY2hpbGQyLCAzKTsKICAgICAgICAgICAgIAotICAgICAgICAg
ICAgTm9kZSogbm9kZVB0ciA9ICZtX2dyYXBoW21fY29tcGlsZUluZGV4XTsKLSAgICAgICAgICAg
IAotICAgICAgICAgICAgc3dpdGNoIChub2RlUHRyLT5hcnJheU1vZGUoKS5tb2RlRm9yUHV0KCku
dHlwZSgpKSB7CisgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPmFycmF5TW9kZSgpLm1vZGVGb3JQ
dXQoKS50eXBlKCkpIHsKICAgICAgICAgICAgIGNhc2UgQXJyYXk6OkRvdWJsZToKICAgICAgICAg
ICAgICAgICBmaXhEb3VibGVFZGdlKDIpOwogICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMzc3
LDcgKzM2Miw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBjYXNlIEFycmF5OjpVaW50OENsYW1w
ZWRBcnJheToKICAgICAgICAgICAgIGNhc2UgQXJyYXk6OlVpbnQxNkFycmF5OgogICAgICAgICAg
ICAgY2FzZSBBcnJheTo6VWludDMyQXJyYXk6Ci0gICAgICAgICAgICAgICAgaWYgKCFtX2dyYXBo
W2NoaWxkM10uc2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKQorICAgICAgICAgICAgICAgIGlmICgh
Y2hpbGQzLT5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpCiAgICAgICAgICAgICAgICAgICAgIGZp
eERvdWJsZUVkZ2UoMik7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNl
IEFycmF5OjpGbG9hdDMyQXJyYXk6CkBAIC0zOTIsMTEgKzM3NywxMSBAQCBwcml2YXRlOgogICAg
ICAgICAgICAgCiAgICAgICAgIGNhc2UgTmV3QXJyYXk6IHsKICAgICAgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IG1fZ3JhcGgudmFyQXJnTnVtQ2hpbGRyZW4obm9kZSk7IGktLTspIHsKLSAgICAg
ICAgICAgICAgICBub2RlLnNldEluZGV4aW5nVHlwZSgKKyAgICAgICAgICAgICAgICBub2RlLT5z
ZXRJbmRleGluZ1R5cGUoCiAgICAgICAgICAgICAgICAgICAgIGxlYXN0VXBwZXJCb3VuZE9mSW5k
ZXhpbmdUeXBlQW5kVHlwZSgKLSAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUuaW5kZXhpbmdU
eXBlKCksIG1fZ3JhcGhbbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCBpKV0ucHJlZGljdGlvbigp
KSk7CisgICAgICAgICAgICAgICAgICAgICAgICBub2RlLmluZGV4aW5nVHlwZSgpLCBtX2dyYXBo
LnZhckFyZ0NoaWxkKG5vZGUsIGkpLT5wcmVkaWN0aW9uKCkpKTsKICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIGlmIChub2RlLmluZGV4aW5nVHlwZSgpID09IEFycmF5V2l0aERvdWJsZSkgewor
ICAgICAgICAgICAgaWYgKG5vZGUtPmluZGV4aW5nVHlwZSgpID09IEFycmF5V2l0aERvdWJsZSkg
ewogICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1fZ3JhcGgudmFyQXJnTnVtQ2hp
bGRyZW4obm9kZSk7IGktLTspCiAgICAgICAgICAgICAgICAgICAgIGZpeERvdWJsZUVkZ2UoaSk7
CiAgICAgICAgICAgICB9CkBAIC00MDgsMTYgKzM5MywxNSBAQCBwcml2YXRlOgogICAgICAgICB9
CiAKICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCi0gICAgICAgIE5v
ZGUqIG5vZGVQdHIgPSAmbV9ncmFwaFttX2NvbXBpbGVJbmRleF07Ci0gICAgICAgIGlmICghKG5v
ZGVQdHItPmZsYWdzKCkgJiBOb2RlSGFzVmFyQXJncykpIHsKKyAgICAgICAgaWYgKCEobm9kZS0+
ZmxhZ3MoKSAmIE5vZGVIYXNWYXJBcmdzKSkgewogICAgICAgICAgICAgZGF0YUxvZ0YoIm5ldyBj
aGlsZHJlbjogIik7Ci0gICAgICAgICAgICBub2RlUHRyLT5kdW1wQ2hpbGRyZW4oV1RGOjpkYXRh
RmlsZSgpKTsKKyAgICAgICAgICAgIG5vZGUtPmR1bXBDaGlsZHJlbihXVEY6OmRhdGFGaWxlKCkp
OwogICAgICAgICB9CiAgICAgICAgIGRhdGFMb2dGKCJcbiIpOwogI2VuZGlmCiAgICAgfQogICAg
IAotICAgIE5vZGVJbmRleCBjaGVja0FycmF5KEFycmF5TW9kZSBhcnJheU1vZGUsIENvZGVPcmln
aW4gY29kZU9yaWdpbiwgTm9kZUluZGV4IGFycmF5LCBOb2RlSW5kZXggaW5kZXgsIGJvb2wgKCpz
dG9yYWdlQ2hlY2spKGNvbnN0IEFycmF5TW9kZSYpID0gY2FuQ1NFU3RvcmFnZSwgYm9vbCBzaG91
bGRHZW5lcmF0ZSA9IHRydWUpCisgICAgTm9kZSogY2hlY2tBcnJheShBcnJheU1vZGUgYXJyYXlN
b2RlLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIE5vZGUqIGFycmF5LCBOb2RlKiBpbmRleCwgYm9v
bCAoKnN0b3JhZ2VDaGVjaykoY29uc3QgQXJyYXlNb2RlJikgPSBjYW5DU0VTdG9yYWdlLCBib29s
IHNob3VsZEdlbmVyYXRlID0gdHJ1ZSkKICAgICB7CiAgICAgICAgIEFTU0VSVChhcnJheU1vZGUu
aXNTcGVjaWZpYygpKTsKICAgICAgICAgCkBAIC00MjgsMTEgKzQxMiwxMSBAQCBwcml2YXRlOgog
ICAgICAgICAgICAgICAgIGlmIChtX2luZGV4SW5CbG9jayA+IDApIHsKICAgICAgICAgICAgICAg
ICAgICAgLy8gSWYgdGhlIHByZXZpb3VzIG5vZGUgd2FzIGEgQ2hlY2tTdHJ1Y3R1cmUgaW5zZXJ0
ZWQgYmVjYXVzZSBvZiBzdHVmZgogICAgICAgICAgICAgICAgICAgICAvLyB0aGF0IHRoZSBhcnJh
eSBwcm9maWxlIHRvbGQgdXMsIHRoZW4gcmVtb3ZlIGl0LgotICAgICAgICAgICAgICAgICAgICBO
b2RlJiBwcmV2aW91c05vZGUgPSBtX2dyYXBoW21fYmxvY2stPmF0KG1faW5kZXhJbkJsb2NrIC0g
MSldOwotICAgICAgICAgICAgICAgICAgICBpZiAocHJldmlvdXNOb2RlLm9wKCkgPT0gQ2hlY2tT
dHJ1Y3R1cmUKLSAgICAgICAgICAgICAgICAgICAgICAgICYmIHByZXZpb3VzTm9kZS5jaGlsZDEo
KSA9PSBhcnJheQotICAgICAgICAgICAgICAgICAgICAgICAgJiYgcHJldmlvdXNOb2RlLmNvZGVP
cmlnaW4gPT0gY29kZU9yaWdpbikKLSAgICAgICAgICAgICAgICAgICAgICAgIHByZXZpb3VzTm9k
ZS5zZXRPcEFuZERlZmF1bHRGbGFncyhQaGFudG9tKTsKKyAgICAgICAgICAgICAgICAgICAgTm9k
ZSogcHJldmlvdXNOb2RlID0gYmxvY2stPmF0KG1faW5kZXhJbkJsb2NrIC0gMSk7CisgICAgICAg
ICAgICAgICAgICAgIGlmIChwcmV2aW91c05vZGUtPm9wKCkgPT0gQ2hlY2tTdHJ1Y3R1cmUKKyAg
ICAgICAgICAgICAgICAgICAgICAgICYmIHByZXZpb3VzTm9kZS0+Y2hpbGQxKCkgPT0gYXJyYXkK
KyAgICAgICAgICAgICAgICAgICAgICAgICYmIHByZXZpb3VzTm9kZS0+Y29kZU9yaWdpbiA9PSBj
b2RlT3JpZ2luKQorICAgICAgICAgICAgICAgICAgICAgICAgcHJldmlvdXNOb2RlLT5zZXRPcEFu
ZERlZmF1bHRGbGFncyhQaGFudG9tKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICAgCiAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKQEAgLTQ1Niw3
ICs0NDAsNyBAQCBwcml2YXRlOgogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBpZiAoIXN0
b3JhZ2VDaGVjayhhcnJheU1vZGUpKQotICAgICAgICAgICAgcmV0dXJuIE5vTm9kZTsKKyAgICAg
ICAgICAgIHJldHVybiAwOwogICAgICAgICAKICAgICAgICAgaWYgKGFycmF5TW9kZS51c2VzQnV0
dGVyZmx5KCkpIHsKICAgICAgICAgICAgIHJldHVybiBtX2luc2VydGlvblNldC5pbnNlcnROb2Rl
KApAQCAtNDc3LDE0ICs0NjEsMTQgQEAgcHJpdmF0ZToKICAgICB7CiAgICAgICAgIGlmIChtX2dy
YXBoLm1fZml4cG9pbnRTdGF0ZSA+IEJlZm9yZUZpeHBvaW50KQogICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICAgICAgCi0gICAgICAgIE5vZGUqIG5vZGVQdHIgPSAmbV9ncmFwaFttX2NvbXBp
bGVJbmRleF07CiAgICAgICAgIAotICAgICAgICBzd2l0Y2ggKG5vZGVQdHItPmFycmF5TW9kZSgp
LnR5cGUoKSkgeworICAgICAgICBOb2RlKiBub2RlID0gbV9jdXJyZW50Tm9kZTsKKyAgICAgICAg
CisgICAgICAgIHN3aXRjaCAobm9kZS0+YXJyYXlNb2RlKCkudHlwZSgpKSB7CiAgICAgICAgIGNh
c2UgQXJyYXk6OkZvcmNlRXhpdDogewogICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0
Tm9kZSgKICAgICAgICAgICAgICAgICBtX2luZGV4SW5CbG9jaywgRG9udFJlZkNoaWxkcmVuLCBE
b250UmVmTm9kZSwgU3BlY05vbmUsIEZvcmNlT1NSRXhpdCwKLSAgICAgICAgICAgICAgICBub2Rl
UHRyLT5jb2RlT3JpZ2luKTsKKyAgICAgICAgICAgICAgICBub2RlLT5jb2RlT3JpZ2luKTsKICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICAgICAgCkBAIC00OTcsMjYgKzQ4
MSwyNiBAQCBwcml2YXRlOgogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgCiAgICAg
ICAgIGRlZmF1bHQ6IHsKLSAgICAgICAgICAgIE5vZGVJbmRleCBzdG9yYWdlID0gY2hlY2tBcnJh
eShub2RlUHRyLT5hcnJheU1vZGUoKSwgbm9kZVB0ci0+Y29kZU9yaWdpbiwgYmFzZS5pbmRleCgp
LCBpbmRleC5pbmRleFVuY2hlY2tlZCgpKTsKLSAgICAgICAgICAgIGlmIChzdG9yYWdlID09IE5v
Tm9kZSkKKyAgICAgICAgICAgIE5vZGUqIHN0b3JhZ2UgPSBjaGVja0FycmF5KG5vZGUtPmFycmF5
TW9kZSgpLCBub2RlLT5jb2RlT3JpZ2luLCBiYXNlLm5vZGUoKSwgaW5kZXgubm9kZSgpKTsKKyAg
ICAgICAgICAgIGlmICghc3RvcmFnZSkKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
ICAgICAKLSAgICAgICAgICAgIG1fZ3JhcGguY2hpbGQobV9ncmFwaFttX2NvbXBpbGVJbmRleF0s
IHN0b3JhZ2VDaGlsZElkeCkgPSBFZGdlKHN0b3JhZ2UpOworICAgICAgICAgICAgbV9ncmFwaC5j
aGlsZChub2RlLCBzdG9yYWdlQ2hpbGRJZHgpID0gRWRnZShzdG9yYWdlKTsKICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgfSB9CiAgICAgfQogICAgIAogICAgIHZvaWQgZml4SW50RWRnZShF
ZGdlJiBlZGdlKQogICAgIHsKLSAgICAgICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhbZWRnZV07Ci0g
ICAgICAgIGlmIChub2RlLm9wKCkgIT0gVmFsdWVUb0ludDMyKQorICAgICAgICBOb2RlKiBub2Rl
ID0gZWRnZS5ub2RlKCk7CisgICAgICAgIGlmIChub2RlLT5vcCgpICE9IFZhbHVlVG9JbnQzMikK
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgCi0gICAgICAgIGlmICghbV9ncmFwaFtub2Rl
LmNoaWxkMSgpXS5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpCisgICAgICAgIGlmICghbm9kZS0+
Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKSkKICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgCiAgICAgICAgIEVkZ2Ugb2xkRWRnZSA9IGVkZ2U7Ci0gICAgICAgIEVkZ2UgbmV3
RWRnZSA9IG5vZGUuY2hpbGQxKCk7CisgICAgICAgIEVkZ2UgbmV3RWRnZSA9IG5vZGUtPmNoaWxk
MSgpOwogICAgICAgICAKICAgICAgICAgbV9ncmFwaC5yZWYobmV3RWRnZSk7CiAgICAgICAgIG1f
Z3JhcGguZGVyZWYob2xkRWRnZSk7CkBAIC01MjYsMTEgKzUxMCwxMSBAQCBwcml2YXRlOgogICAg
IAogICAgIHZvaWQgZml4RG91YmxlRWRnZSh1bnNpZ25lZCBjaGlsZEluZGV4KQogICAgIHsKLSAg
ICAgICAgTm9kZSYgc291cmNlID0gbV9ncmFwaFttX2NvbXBpbGVJbmRleF07CisgICAgICAgIE5v
ZGUqIHNvdXJjZSA9IG1fY3VycmVudE5vZGU7CiAgICAgICAgIEVkZ2UmIGVkZ2UgPSBtX2dyYXBo
LmNoaWxkKHNvdXJjZSwgY2hpbGRJbmRleCk7CiAgICAgICAgIAotICAgICAgICBpZiAobV9ncmFw
aFtlZGdlXS5wcmVkaWN0aW9uKCkgJiBTcGVjRG91YmxlKSB7Ci0gICAgICAgICAgICBlZGdlLnNl
dFVzZUtpbmQoRG91YmxlVXNlKTsKKyAgICAgICAgaWYgKGVkZ2UtPnByZWRpY3Rpb24oKSAmIFNw
ZWNEb3VibGUpIHsKKyAgICAgICAgICAgIGVkZ2UtPnNldFVzZUtpbmQoRG91YmxlVXNlKTsKICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICAKQEAgLTUzOSwyMyArNTIzLDIy
IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIGluamVjdEludDMyVG9Eb3VibGVOb2RlKHVuc2lnbmVk
IGNoaWxkSW5kZXgpCiAgICAgewotICAgICAgICBOb2RlSW5kZXggcmVzdWx0SW5kZXggPSBtX2lu
c2VydGlvblNldC5pbnNlcnROb2RlKAorICAgICAgICBOb2RlKiByZXN1bHQgPSBtX2luc2VydGlv
blNldC5pbnNlcnROb2RlKAogICAgICAgICAgICAgbV9pbmRleEluQmxvY2ssIERvbnRSZWZDaGls
ZHJlbiwgUmVmTm9kZSwgU3BlY0RvdWJsZSwgSW50MzJUb0RvdWJsZSwKLSAgICAgICAgICAgIG1f
Z3JhcGhbbV9jb21waWxlSW5kZXhdLmNvZGVPcmlnaW4sCi0gICAgICAgICAgICBtX2dyYXBoLmNo
aWxkKG1fZ3JhcGhbbV9jb21waWxlSW5kZXhdLCBjaGlsZEluZGV4KS5pbmRleCgpKTsKKyAgICAg
ICAgICAgIG1fY3VycmVudE5vZGUtPmNvZGVPcmlnaW4sIG1fZ3JhcGguY2hpbGQobV9jdXJyZW50
Tm9kZSwgY2hpbGRJbmRleCkubm9kZSgpKTsKICAgICAgICAgCiAjaWYgREZHX0VOQUJMRShERUJV
R19QUk9QQUdBVElPTl9WRVJCT1NFKQogICAgICAgICBkYXRhTG9nRigKICAgICAgICAgICAgICIo
cmVwbGFjaW5nIEAldS0+QCV1IHdpdGggQCV1LT5AJXUpICIsCi0gICAgICAgICAgICBtX2NvbXBp
bGVJbmRleCwgbV9ncmFwaC5jaGlsZChtX2dyYXBoW21fY29tcGlsZUluZGV4XSwgY2hpbGRJbmRl
eCkuaW5kZXgoKSwgbV9jb21waWxlSW5kZXgsIHJlc3VsdEluZGV4KTsKKyAgICAgICAgICAgIG1f
Y3VycmVudE5vZGUtPmluZGV4KCksIG1fZ3JhcGguY2hpbGQobV9jdXJyZW50Tm9kZSwgY2hpbGRJ
bmRleCktPmluZGV4KCksIG1fY3VycmVudE5vZGUtPmluZGV4KCksIHJlc3VsdC0+aW5kZXgoKSk7
CiAjZW5kaWYKIAotICAgICAgICBtX2dyYXBoLmNoaWxkKG1fZ3JhcGhbbV9jb21waWxlSW5kZXhd
LCBjaGlsZEluZGV4KSA9IEVkZ2UocmVzdWx0SW5kZXgsIERvdWJsZVVzZSk7CisgICAgICAgIG1f
Z3JhcGguY2hpbGQobV9jdXJyZW50Tm9kZSwgY2hpbGRJbmRleCkgPSBFZGdlKHJlc3VsdCwgRG91
YmxlVXNlKTsKICAgICB9CiAKICAgICBCYXNpY0Jsb2NrKiBtX2Jsb2NrOwogICAgIHVuc2lnbmVk
IG1faW5kZXhJbkJsb2NrOwotICAgIE5vZGVJbmRleCBtX2NvbXBpbGVJbmRleDsKKyAgICBOb2Rl
KiBtX2N1cnJlbnROb2RlOwogICAgIEluc2VydGlvblNldCBtX2luc2VydGlvblNldDsKIH07CiAg
ICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkocmV2aXNpb24g
MTQwNTY3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQ2LDYgKzQ2LDcgQEAgR3JhcGg6OkdyYXBoKEpTR2xvYmFsRGF0YSYgZ2xv
YmFsRGF0YSwgQwogICAgICwgbV9jb2RlQmxvY2soY29kZUJsb2NrKQogICAgICwgbV9jb21waWxh
dGlvbihnbG9iYWxEYXRhLm1fcGVyQnl0ZWNvZGVQcm9maWxlciA/IGdsb2JhbERhdGEubV9wZXJC
eXRlY29kZVByb2ZpbGVyLT5uZXdDb21waWxhdGlvbihjb2RlQmxvY2ssIFByb2ZpbGVyOjpERkcp
IDogMCkKICAgICAsIG1fcHJvZmlsZWRCbG9jayhjb2RlQmxvY2stPmFsdGVybmF0aXZlKCkpCisg
ICAgLCBtX2FsbG9jYXRvcihnbG9iYWxEYXRhLm1fZGZnU3RhdGUtPm1fYWxsb2NhdG9yKQogICAg
ICwgbV9oYXNBcmd1bWVudHMoZmFsc2UpCiAgICAgLCBtX29zckVudHJ5Qnl0ZWNvZGVJbmRleChv
c3JFbnRyeUJ5dGVjb2RlSW5kZXgpCiAgICAgLCBtX211c3RIYW5kbGVWYWx1ZXMobXVzdEhhbmRs
ZVZhbHVlcykKQEAgLTU0LDYgKzU1LDExIEBAIEdyYXBoOjpHcmFwaChKU0dsb2JhbERhdGEmIGds
b2JhbERhdGEsIEMKICAgICBBU1NFUlQobV9wcm9maWxlZEJsb2NrKTsKIH0KIAorR3JhcGg6On5H
cmFwaCgpCit7CisgICAgbV9hbGxvY2F0b3IuZnJlZUFsbCgpOworfQorCiBjb25zdCBjaGFyICpH
cmFwaDo6b3BOYW1lKE5vZGVUeXBlIG9wKQogewogICAgIHJldHVybiBkZmdPcE5hbWVzW29wXTsK
QEAgLTY1LDE4ICs3MSwxNiBAQCBzdGF0aWMgdm9pZCBwcmludFdoaXRlU3BhY2UoUHJpbnRTdHJl
YW0mCiAgICAgICAgIG91dC5wcmludCgiICIpOwogfQogCi1ib29sIEdyYXBoOjpkdW1wQ29kZU9y
aWdpbihQcmludFN0cmVhbSYgb3V0LCBjb25zdCBjaGFyKiBwcmVmaXgsIE5vZGVJbmRleCBwcmV2
Tm9kZUluZGV4LCBOb2RlSW5kZXggbm9kZUluZGV4KQorYm9vbCBHcmFwaDo6ZHVtcENvZGVPcmln
aW4oUHJpbnRTdHJlYW0mIG91dCwgY29uc3QgY2hhciogcHJlZml4LCBOb2RlKiBwcmV2aW91c05v
ZGUsIE5vZGUqIGN1cnJlbnROb2RlKQogewotICAgIGlmIChwcmV2Tm9kZUluZGV4ID09IE5vTm9k
ZSkKKyAgICBpZiAoIXByZXZpb3VzTm9kZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAot
ICAgIE5vZGUmIGN1cnJlbnROb2RlID0gYXQobm9kZUluZGV4KTsKLSAgICBOb2RlJiBwcmV2aW91
c05vZGUgPSBhdChwcmV2Tm9kZUluZGV4KTsKLSAgICBpZiAocHJldmlvdXNOb2RlLmNvZGVPcmln
aW4uaW5saW5lQ2FsbEZyYW1lID09IGN1cnJlbnROb2RlLmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZy
YW1lKQorICAgIGlmIChwcmV2aW91c05vZGUtPmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lID09
IGN1cnJlbnROb2RlLT5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIAotICAgIFZlY3RvcjxDb2RlT3JpZ2luPiBwcmV2aW91c0lubGluZVN0YWNr
ID0gcHJldmlvdXNOb2RlLmNvZGVPcmlnaW4uaW5saW5lU3RhY2soKTsKLSAgICBWZWN0b3I8Q29k
ZU9yaWdpbj4gY3VycmVudElubGluZVN0YWNrID0gY3VycmVudE5vZGUuY29kZU9yaWdpbi5pbmxp
bmVTdGFjaygpOworICAgIFZlY3RvcjxDb2RlT3JpZ2luPiBwcmV2aW91c0lubGluZVN0YWNrID0g
cHJldmlvdXNOb2RlLT5jb2RlT3JpZ2luLmlubGluZVN0YWNrKCk7CisgICAgVmVjdG9yPENvZGVP
cmlnaW4+IGN1cnJlbnRJbmxpbmVTdGFjayA9IGN1cnJlbnROb2RlLT5jb2RlT3JpZ2luLmlubGlu
ZVN0YWNrKCk7CiAgICAgdW5zaWduZWQgY29tbW9uU2l6ZSA9IHN0ZDo6bWluKHByZXZpb3VzSW5s
aW5lU3RhY2suc2l6ZSgpLCBjdXJyZW50SW5saW5lU3RhY2suc2l6ZSgpKTsKICAgICB1bnNpZ25l
ZCBpbmRleE9mRGl2ZXJnZW5jZSA9IGNvbW1vblNpemU7CiAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IGNvbW1vblNpemU7ICsraSkgewpAQCAtMTA3LDMyICsxMTEsMjMgQEAgYm9vbCBHcmFw
aDo6ZHVtcENvZGVPcmlnaW4oUHJpbnRTdHJlYW0mIAogICAgIHJldHVybiBoYXNQcmludGVkOwog
fQogCi1pbnQgR3JhcGg6OmFtb3VudE9mTm9kZVdoaXRlU3BhY2UoTm9kZSYgbm9kZSkKK2ludCBH
cmFwaDo6YW1vdW50T2ZOb2RlV2hpdGVTcGFjZShOb2RlKiBub2RlKQogewotICAgIHJldHVybiAo
bm9kZS5jb2RlT3JpZ2luLmlubGluZURlcHRoKCkgLSAxKSAqIDI7CisgICAgcmV0dXJuIChub2Rl
LT5jb2RlT3JpZ2luLmlubGluZURlcHRoKCkgLSAxKSAqIDI7CiB9CiAKLXZvaWQgR3JhcGg6OnBy
aW50Tm9kZVdoaXRlU3BhY2UoUHJpbnRTdHJlYW0mIG91dCwgTm9kZSYgbm9kZSkKK3ZvaWQgR3Jh
cGg6OnByaW50Tm9kZVdoaXRlU3BhY2UoUHJpbnRTdHJlYW0mIG91dCwgTm9kZSogbm9kZSkKIHsK
ICAgICBwcmludFdoaXRlU3BhY2Uob3V0LCBhbW91bnRPZk5vZGVXaGl0ZVNwYWNlKG5vZGUpKTsK
IH0KIAotdm9pZCBHcmFwaDo6ZHVtcChQcmludFN0cmVhbSYgb3V0LCBFZGdlIGVkZ2UpCit2b2lk
IEdyYXBoOjpkdW1wKFByaW50U3RyZWFtJiBvdXQsIGNvbnN0IGNoYXIqIHByZWZpeCwgTm9kZSog
bm9kZSkKIHsKLSAgICBvdXQucHJpbnQoCi0gICAgICAgIHVzZUtpbmRUb1N0cmluZyhlZGdlLnVz
ZUtpbmQoKSksCi0gICAgICAgICJAIiwgZWRnZS5pbmRleCgpLAotICAgICAgICBBYmJyZXZpYXRl
ZFNwZWN1bGF0aW9uRHVtcChhdChlZGdlKS5wcmVkaWN0aW9uKCkpKTsKLX0KKyAgICBOb2RlVHlw
ZSBvcCA9IG5vZGUtPm9wKCk7CiAKLXZvaWQgR3JhcGg6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCwg
Y29uc3QgY2hhciogcHJlZml4LCBOb2RlSW5kZXggbm9kZUluZGV4KQotewotICAgIE5vZGUmIG5v
ZGUgPSBhdChub2RlSW5kZXgpOwotICAgIE5vZGVUeXBlIG9wID0gbm9kZS5vcCgpOwotCi0gICAg
dW5zaWduZWQgcmVmQ291bnQgPSBub2RlLnJlZkNvdW50KCk7CisgICAgdW5zaWduZWQgcmVmQ291
bnQgPSBub2RlLT5yZWZDb3VudCgpOwogICAgIGJvb2wgc2tpcHBlZCA9ICFyZWZDb3VudDsKLSAg
ICBib29sIG11c3RHZW5lcmF0ZSA9IG5vZGUubXVzdEdlbmVyYXRlKCk7CisgICAgYm9vbCBtdXN0
R2VuZXJhdGUgPSBub2RlLT5tdXN0R2VuZXJhdGUoKTsKICAgICBpZiAobXVzdEdlbmVyYXRlKQog
ICAgICAgICAtLXJlZkNvdW50OwogCkBAIC0xNTYsMTUwICsxNTEsOTYgQEAgdm9pZCBHcmFwaDo6
ZHVtcChQcmludFN0cmVhbSYgb3V0LCBjb25zdAogICAgIC8vICAgICAgICAgJCMgICAtIHRoZSBp
bmRleCBpbiB0aGUgQ29kZUJsb2NrIG9mIGEgY29uc3RhbnQgeyBmb3IgbnVtZXJpYyBjb25zdGFu
dHMgdGhlIHZhbHVlIGlzIGRpc3BsYXllZCB8IGZvciBpbnRlZ2VycywgaW4gYm90aCBkZWNpbWFs
IGFuZCBoZXggfS4KICAgICAvLyAgICAgICAgIGlkIyAgLSB0aGUgaW5kZXggaW4gdGhlIENvZGVC
bG9jayBvZiBhbiBpZGVudGlmaWVyIHsgaWYgY29kZUJsb2NrIGlzIHBhc3NlZCB0byBkdW1wKCks
IHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gaXMgZGlzcGxheWVkIH0uCiAgICAgLy8gICAgICAg
ICB2YXIjIC0gdGhlIGluZGV4IG9mIGEgdmFyIG9uIHRoZSBnbG9iYWwgb2JqZWN0LCB1c2VkIGJ5
IEdldEdsb2JhbFZhci9QdXRHbG9iYWxWYXIgb3BlcmF0aW9ucy4KLSAgICBvdXQucHJpbnRmKCIl
IDRkOiVzPCVjJXU6IiwgKGludClub2RlSW5kZXgsIHNraXBwZWQgPyAiICBza2lwcGVkICAiIDog
IiAgICAgICAgICAgIiwgbXVzdEdlbmVyYXRlID8gJyEnIDogJyAnLCByZWZDb3VudCk7Ci0gICAg
aWYgKG5vZGUuaGFzUmVzdWx0KCkgJiYgIXNraXBwZWQgJiYgbm9kZS5oYXNWaXJ0dWFsUmVnaXN0
ZXIoKSkKLSAgICAgICAgb3V0LnByaW50KG5vZGUudmlydHVhbFJlZ2lzdGVyKCkpOworICAgIG91
dC5wcmludGYoIiUgNGQ6JXM8JWMldToiLCAoaW50KW5vZGUtPmluZGV4KCksIHNraXBwZWQgPyAi
ICBza2lwcGVkICAiIDogIiAgICAgICAgICAgIiwgbXVzdEdlbmVyYXRlID8gJyEnIDogJyAnLCBy
ZWZDb3VudCk7CisgICAgaWYgKG5vZGUtPmhhc1Jlc3VsdCgpICYmICFza2lwcGVkICYmIG5vZGUt
Pmhhc1ZpcnR1YWxSZWdpc3RlcigpKQorICAgICAgICBvdXQucHJpbnQobm9kZS0+dmlydHVhbFJl
Z2lzdGVyKCkpOwogICAgIGVsc2UKICAgICAgICAgb3V0LnByaW50KCItIik7CiAgICAgb3V0LnBy
aW50KCI+XHQiLCBvcE5hbWUob3ApLCAiKCIpOwotICAgIGJvb2wgaGFzUHJpbnRlZCA9IGZhbHNl
OwotICAgIGlmIChub2RlLmZsYWdzKCkgJiBOb2RlSGFzVmFyQXJncykgewotICAgICAgICBmb3Ig
KHVuc2lnbmVkIGNoaWxkSWR4ID0gbm9kZS5maXJzdENoaWxkKCk7IGNoaWxkSWR4IDwgbm9kZS5m
aXJzdENoaWxkKCkgKyBub2RlLm51bUNoaWxkcmVuKCk7IGNoaWxkSWR4KyspIHsKLSAgICAgICAg
ICAgIGlmIChoYXNQcmludGVkKQotICAgICAgICAgICAgICAgIG91dC5wcmludCgiLCAiKTsKLSAg
ICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBoYXNQcmludGVkID0gdHJ1ZTsKKyAgICBD
b21tYVByaW50ZXIgY29tbWE7CisgICAgaWYgKG5vZGUtPmZsYWdzKCkgJiBOb2RlSGFzVmFyQXJn
cykgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGNoaWxkSWR4ID0gbm9kZS0+Zmlyc3RDaGlsZCgp
OyBjaGlsZElkeCA8IG5vZGUtPmZpcnN0Q2hpbGQoKSArIG5vZGUtPm51bUNoaWxkcmVuKCk7IGNo
aWxkSWR4KyspIHsKICAgICAgICAgICAgIGlmICghbV92YXJBcmdDaGlsZHJlbltjaGlsZElkeF0p
CiAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBkdW1wKG91dCwgbV92YXJB
cmdDaGlsZHJlbltjaGlsZElkeF0pOworICAgICAgICAgICAgb3V0LnByaW50KGNvbW1hLCBtX3Zh
ckFyZ0NoaWxkcmVuW2NoaWxkSWR4XSk7CiAgICAgICAgIH0KICAgICB9IGVsc2UgewotICAgICAg
ICBpZiAoISFub2RlLmNoaWxkMSgpKSB7Ci0gICAgICAgICAgICBkdW1wKG91dCwgbm9kZS5jaGls
ZDEoKSk7Ci0gICAgICAgICAgICBoYXNQcmludGVkID0gdHJ1ZTsKLSAgICAgICAgfQotICAgICAg
ICBpZiAoISFub2RlLmNoaWxkMigpKSB7Ci0gICAgICAgICAgICBvdXQucHJpbnQoIiwgIik7IC8v
IFdoZXRoZXIgb3Igbm90IHRoZXJlIGlzIGEgZmlyc3QgY2hpbGQsIHdlIHByaW50IGEgY29tbWEg
dG8gZW5zdXJlIHRoYXQgd2Ugc2VlIGEgYmxhbmsgZW50cnkgaWYgdGhlcmUgd2Fzbid0IG9uZS4K
LSAgICAgICAgICAgIGR1bXAob3V0LCBub2RlLmNoaWxkMigpKTsKLSAgICAgICAgICAgIGhhc1By
aW50ZWQgPSB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIGlmICghIW5vZGUuY2hpbGQzKCkpIHsK
LSAgICAgICAgICAgIGlmICghbm9kZS5jaGlsZDEoKSAmJiAhbm9kZS5jaGlsZDIoKSkKLSAgICAg
ICAgICAgICAgICBvdXQucHJpbnQoIiwgIik7IC8vIElmIHRoZSB0aGlyZCBjaGlsZCBpcyB0aGUg
Zmlyc3Qgbm9uLWVtcHR5IG9uZSB0aGVuIG1ha2Ugc3VyZSB3ZSBoYXZlIHR3byBibGFua3MgcHJl
Y2VkaW5nIGl0LgotICAgICAgICAgICAgb3V0LnByaW50KCIsICIpOwotICAgICAgICAgICAgZHVt
cChvdXQsIG5vZGUuY2hpbGQzKCkpOwotICAgICAgICAgICAgaGFzUHJpbnRlZCA9IHRydWU7Ci0g
ICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoc3RybGVuKG5vZGVGbGFnc0FzU3RyaW5nKG5vZGUu
ZmxhZ3MoKSkpKSB7Ci0gICAgICAgIG91dC5wcmludChoYXNQcmludGVkID8gIiwgIiA6ICIiLCBu
b2RlRmxhZ3NBc1N0cmluZyhub2RlLmZsYWdzKCkpKTsKLSAgICAgICAgaGFzUHJpbnRlZCA9IHRy
dWU7Ci0gICAgfQotICAgIGlmIChub2RlLmhhc0FycmF5TW9kZSgpKSB7Ci0gICAgICAgIG91dC5w
cmludChoYXNQcmludGVkID8gIiwgIiA6ICIiLCBub2RlLmFycmF5TW9kZSgpKTsKLSAgICAgICAg
aGFzUHJpbnRlZCA9IHRydWU7Ci0gICAgfQotICAgIGlmIChub2RlLmhhc1Zhck51bWJlcigpKSB7
Ci0gICAgICAgIG91dC5wcmludChoYXNQcmludGVkID8gIiwgIiA6ICIiLCAidmFyIiwgbm9kZS52
YXJOdW1iZXIoKSk7Ci0gICAgICAgIGhhc1ByaW50ZWQgPSB0cnVlOwotICAgIH0KLSAgICBpZiAo
bm9kZS5oYXNSZWdpc3RlclBvaW50ZXIoKSkgewotICAgICAgICBvdXQucHJpbnQoaGFzUHJpbnRl
ZCA/ICIsICIgOiAiIiwgImdsb2JhbCIsIGdsb2JhbE9iamVjdEZvcihub2RlLmNvZGVPcmlnaW4p
LT5maW5kUmVnaXN0ZXJJbmRleChub2RlLnJlZ2lzdGVyUG9pbnRlcigpKSwgIigiLCBSYXdQb2lu
dGVyKG5vZGUucmVnaXN0ZXJQb2ludGVyKCkpLCAiKSIpOwotICAgICAgICBoYXNQcmludGVkID0g
dHJ1ZTsKLSAgICB9Ci0gICAgaWYgKG5vZGUuaGFzSWRlbnRpZmllcigpKSB7Ci0gICAgICAgIG91
dC5wcmludChoYXNQcmludGVkID8gIiwgIiA6ICIiLCAiaWQiLCBub2RlLmlkZW50aWZpZXJOdW1i
ZXIoKSwgInsiLCBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihub2RlLmlkZW50aWZpZXJOdW1iZXIo
KSkuc3RyaW5nKCksICJ9Iik7Ci0gICAgICAgIGhhc1ByaW50ZWQgPSB0cnVlOwotICAgIH0KLSAg
ICBpZiAobm9kZS5oYXNTdHJ1Y3R1cmVTZXQoKSkgewotICAgICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IG5vZGUuc3RydWN0dXJlU2V0KCkuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIG91
dC5wcmludChoYXNQcmludGVkID8gIiwgIiA6ICIiLCAic3RydWN0KCIsIFJhd1BvaW50ZXIobm9k
ZS5zdHJ1Y3R1cmVTZXQoKVtpXSksICI6ICIsIEluZGV4aW5nVHlwZUR1bXAobm9kZS5zdHJ1Y3R1
cmVTZXQoKVtpXS0+aW5kZXhpbmdUeXBlKCkpLCAiKSIpOwotICAgICAgICAgICAgaGFzUHJpbnRl
ZCA9IHRydWU7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgaWYgKG5vZGUuaGFzU3RydWN0dXJlKCkp
IHsKLSAgICAgICAgb3V0LnByaW50KGhhc1ByaW50ZWQgPyAiLCAiIDogIiIsICJzdHJ1Y3QoIiwg
UmF3UG9pbnRlcihub2RlLnN0cnVjdHVyZSgpKSwgIjogIiwgSW5kZXhpbmdUeXBlRHVtcChub2Rl
LnN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSksICIpIik7Ci0gICAgICAgIGhhc1ByaW50ZWQg
PSB0cnVlOwotICAgIH0KLSAgICBpZiAobm9kZS5oYXNTdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSgp
KSB7Ci0gICAgICAgIG91dC5wcmludChoYXNQcmludGVkID8gIiwgIiA6ICIiLCAic3RydWN0KCIs
IFJhd1BvaW50ZXIobm9kZS5zdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSgpLnByZXZpb3VzU3RydWN0
dXJlKSwgIiAtPiAiLCBSYXdQb2ludGVyKG5vZGUuc3RydWN0dXJlVHJhbnNpdGlvbkRhdGEoKS5u
ZXdTdHJ1Y3R1cmUpLCAiKSIpOwotICAgICAgICBoYXNQcmludGVkID0gdHJ1ZTsKLSAgICB9Ci0g
ICAgaWYgKG5vZGUuaGFzRnVuY3Rpb24oKSkgewotICAgICAgICBvdXQucHJpbnQoaGFzUHJpbnRl
ZCA/ICIsICIgOiAiIiwgUmF3UG9pbnRlcihub2RlLmZ1bmN0aW9uKCkpKTsKLSAgICAgICAgaGFz
UHJpbnRlZCA9IHRydWU7Ci0gICAgfQotICAgIGlmIChub2RlLmhhc1N0b3JhZ2VBY2Nlc3NEYXRh
KCkpIHsKLSAgICAgICAgU3RvcmFnZUFjY2Vzc0RhdGEmIHN0b3JhZ2VBY2Nlc3NEYXRhID0gbV9z
dG9yYWdlQWNjZXNzRGF0YVtub2RlLnN0b3JhZ2VBY2Nlc3NEYXRhSW5kZXgoKV07Ci0gICAgICAg
IG91dC5wcmludChoYXNQcmludGVkID8gIiwgIiA6ICIiLCAiaWQiLCBzdG9yYWdlQWNjZXNzRGF0
YS5pZGVudGlmaWVyTnVtYmVyLCAieyIsIG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKHN0b3JhZ2VB
Y2Nlc3NEYXRhLmlkZW50aWZpZXJOdW1iZXIpLnN0cmluZygpLCAifSIpOworICAgICAgICBpZiAo
ISFub2RlLmNoaWxkMSgpIHx8ICEhbm9kZS5jaGlsZDIoKSB8fCAhIW5vZGUuY2hpbGQzKCkpCisg
ICAgICAgICAgICBvdXQucHJpbnQoY29tbWEsIG5vZGUuY2hpbGQxKCkpOworICAgICAgICBpZiAo
ISFub2RlLmNoaWxkMigpIHx8ICEhbm9kZS5jaGlsZDMoKSkKKyAgICAgICAgICAgIG91dC5wcmlu
dChjb21tYSwgbm9kZS5jaGlsZDIoKSk7CisgICAgICAgIGlmICghIW5vZGUuY2hpbGQzKCkpCisg
ICAgICAgICAgICBvdXQucHJpbnQoY29tbWEsIG5vZGUuY2hpbGQzKCkpOworICAgIH0KKworICAg
IGlmIChzdHJsZW4obm9kZUZsYWdzQXNTdHJpbmcobm9kZS0+ZmxhZ3MoKSkpKQorICAgICAgICBv
dXQucHJpbnQoY29tbWEsIG5vZGVGbGFnc0FzU3RyaW5nKG5vZGUtPmZsYWdzKCkpKTsKKyAgICBp
ZiAobm9kZS0+aGFzQXJyYXlNb2RlKCkpIHsKKyAgICAgICAgb3V0LnByaW50KGNvbW1hLCBub2Rl
LT5hcnJheU1vZGUoKSk7CisgICAgaWYgKG5vZGUtPmhhc1Zhck51bWJlcigpKSB7CisgICAgICAg
IG91dC5wcmludChjb21tYSwgbm9kZS0+dmFyTnVtYmVyKCkpOworICAgIGlmIChub2RlLT5oYXNS
ZWdpc3RlclBvaW50ZXIoKSkKKyAgICAgICAgb3V0LnByaW50KGNvbW1hLCAiZ2xvYmFsIiwgZ2xv
YmFsT2JqZWN0Rm9yKG5vZGUtPmNvZGVPcmlnaW4pLT5maW5kUmVnaXN0ZXJJbmRleChub2RlLT5y
ZWdpc3RlclBvaW50ZXIoKSksICIoIiwgUmF3UG9pbnRlcihub2RlLT5yZWdpc3RlclBvaW50ZXIo
KSksICIpIik7CisgICAgaWYgKG5vZGUtPmhhc0lkZW50aWZpZXIoKSkKKyAgICAgICAgb3V0LnBy
aW50KGNvbW1hLCAiaWQiLCBub2RlLT5pZGVudGlmaWVyTnVtYmVyKCksICJ7IiwgbV9jb2RlQmxv
Y2stPmlkZW50aWZpZXIobm9kZS0+aWRlbnRpZmllck51bWJlcigpKS5zdHJpbmcoKSwgIn0iKTsK
KyAgICBpZiAobm9kZS0+aGFzU3RydWN0dXJlU2V0KCkpIHsKKyAgICAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBub2RlLnN0cnVjdHVyZVNldCgpLnNpemUoKTsgKytpKQorICAgICAgICAgICAg
b3V0LnByaW50KGNvbW1hLCAic3RydWN0KCIsIFJhd1BvaW50ZXIobm9kZS0+c3RydWN0dXJlU2V0
KClbaV0pLCAiOiAiLCBJbmRleGluZ1R5cGVEdW1wKG5vZGUtPnN0cnVjdHVyZVNldCgpW2ldLT5p
bmRleGluZ1R5cGUoKSksICIpIik7CisgICAgfQorICAgIGlmIChub2RlLT5oYXNTdHJ1Y3R1cmUo
KSkKKyAgICAgICAgb3V0LnByaW50KGNvbW1hLCAic3RydWN0KCIsIFJhd1BvaW50ZXIobm9kZS0+
c3RydWN0dXJlKCkpLCAiOiAiLCBJbmRleGluZ1R5cGVEdW1wKG5vZGUtPnN0cnVjdHVyZSgpLT5p
bmRleGluZ1R5cGUoKSksICIpIik7CisgICAgaWYgKG5vZGUtPmhhc1N0cnVjdHVyZVRyYW5zaXRp
b25EYXRhKCkpCisgICAgICAgIG91dC5wcmludChjb21tYSwgInN0cnVjdCgiLCBSYXdQb2ludGVy
KG5vZGUtPnN0cnVjdHVyZVRyYW5zaXRpb25EYXRhKCkucHJldmlvdXNTdHJ1Y3R1cmUpLCAiIC0+
ICIsIFJhd1BvaW50ZXIobm9kZS0+c3RydWN0dXJlVHJhbnNpdGlvbkRhdGEoKS5uZXdTdHJ1Y3R1
cmUpLCAiKSIpOworICAgIGlmIChub2RlLT5oYXNGdW5jdGlvbigpKQorICAgICAgICBvdXQucHJp
bnQoY29tbWEsICJmdW5jdGlvbigiLCBSYXdQb2ludGVyKG5vZGUtPmZ1bmN0aW9uKCkpLCAiLCAi
LCBGdW5jdGlvbkV4ZWN1dGFibGVEdW1wKG5vZGUtPmZ1bmN0aW9uKCktPmpzRXhlY3V0YWJsZSgp
KSwgIikiKTsKKyAgICBpZiAobm9kZS0+aGFzRXhlY3V0YWJsZSgpKQorICAgICAgICBvdXQucHJp
bnQoY29tbWEsICJleGVjdXRhYmxlKCIsIEZ1bmN0aW9uRXhlY3V0YWJsZUR1bXAobm9kZS0+ZXhl
Y3V0YWJsZSgpKSwgIikiKTsKKyAgICBpZiAobm9kZS0+aGFzU3RvcmFnZUFjY2Vzc0RhdGEoKSkg
eworICAgICAgICBTdG9yYWdlQWNjZXNzRGF0YSYgc3RvcmFnZUFjY2Vzc0RhdGEgPSBtX3N0b3Jh
Z2VBY2Nlc3NEYXRhW25vZGUtPnN0b3JhZ2VBY2Nlc3NEYXRhSW5kZXgoKV07CisgICAgICAgIG91
dC5wcmludChjb21tYSwgImlkIiwgc3RvcmFnZUFjY2Vzc0RhdGEuaWRlbnRpZmllck51bWJlciwg
InsiLCBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihzdG9yYWdlQWNjZXNzRGF0YS5pZGVudGlmaWVy
TnVtYmVyKS5zdHJpbmcoKSwgIn0iKTsKICAgICAgICAgb3V0LnByaW50KCIsICIsIHN0YXRpY19j
YXN0PHB0cmRpZmZfdD4oc3RvcmFnZUFjY2Vzc0RhdGEub2Zmc2V0KSk7Ci0gICAgICAgIGhhc1By
aW50ZWQgPSB0cnVlOwogICAgIH0KLSAgICBBU1NFUlQobm9kZS5oYXNWYXJpYWJsZUFjY2Vzc0Rh
dGEoKSA9PSBub2RlLmhhc0xvY2FsKCkpOwotICAgIGlmIChub2RlLmhhc1ZhcmlhYmxlQWNjZXNz
RGF0YSgpKSB7Ci0gICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRh
ID0gbm9kZS52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKKyAgICBBU1NFUlQobm9kZS0+aGFzVmFyaWFi
bGVBY2Nlc3NEYXRhKCkgPT0gbm9kZS0+aGFzTG9jYWwoKSk7CisgICAgaWYgKG5vZGUtPmhhc1Zh
cmlhYmxlQWNjZXNzRGF0YSgpKSB7CisgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFi
bGVBY2Nlc3NEYXRhID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CiAgICAgICAgIGludCBv
cGVyYW5kID0gdmFyaWFibGVBY2Nlc3NEYXRhLT5vcGVyYW5kKCk7CiAgICAgICAgIGlmIChvcGVy
YW5kSXNBcmd1bWVudChvcGVyYW5kKSkKLSAgICAgICAgICAgIG91dC5wcmludChoYXNQcmludGVk
ID8gIiwgIiA6ICIiLCAiYXJnIiwgb3BlcmFuZFRvQXJndW1lbnQob3BlcmFuZCksICIoIiwgVmFy
aWFibGVBY2Nlc3NEYXRhRHVtcCgqdGhpcywgdmFyaWFibGVBY2Nlc3NEYXRhKSwgIikiKTsKKyAg
ICAgICAgICAgIG91dC5wcmludChjb21tYSwgImFyZyIsIG9wZXJhbmRUb0FyZ3VtZW50KG9wZXJh
bmQpLCAiKCIsIFZhcmlhYmxlQWNjZXNzRGF0YUR1bXAoKnRoaXMsIHZhcmlhYmxlQWNjZXNzRGF0
YSksICIpIik7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIG91dC5wcmludChoYXNQcmludGVk
ID8gIiwgIiA6ICIiLCAiciIsIG9wZXJhbmQsICIoIiwgVmFyaWFibGVBY2Nlc3NEYXRhRHVtcCgq
dGhpcywgdmFyaWFibGVBY2Nlc3NEYXRhKSwgIikiKTsKLSAgICAgICAgaGFzUHJpbnRlZCA9IHRy
dWU7CisgICAgICAgICAgICBvdXQucHJpbnQoY29tbWEsICJyIiwgb3BlcmFuZCwgIigiLCBWYXJp
YWJsZUFjY2Vzc0RhdGFEdW1wKCp0aGlzLCB2YXJpYWJsZUFjY2Vzc0RhdGEpLCAiKSIpOwogICAg
IH0KLSAgICBpZiAobm9kZS5oYXNDb25zdGFudEJ1ZmZlcigpKSB7Ci0gICAgICAgIGlmIChoYXNQ
cmludGVkKQotICAgICAgICAgICAgb3V0LnByaW50KCIsICIpOworICAgIGlmIChub2RlLT5oYXND
b25zdGFudEJ1ZmZlcigpKSB7CisgICAgICAgIG91dC5wcmludChjb21tYSk7CiAgICAgICAgIG91
dC5wcmludChub2RlLnN0YXJ0Q29uc3RhbnQoKSwgIjpbIik7Ci0gICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBub2RlLm51bUNvbnN0YW50cygpOyArK2kpIHsKLSAgICAgICAgICAgIGlm
IChpKQotICAgICAgICAgICAgICAgIG91dC5wcmludCgiLCAiKTsKLSAgICAgICAgICAgIG91dC5w
cmludChtX2NvZGVCbG9jay0+Y29uc3RhbnRCdWZmZXIobm9kZS5zdGFydENvbnN0YW50KCkpW2ld
KTsKLSAgICAgICAgfQorICAgICAgICBDb21tYVByaW50ZXIgYW5vdGhlckNvbW1hOworICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbm9kZS5udW1Db25zdGFudHMoKTsgKytpKQorICAg
ICAgICAgICAgb3V0LnByaW50KGFub3RoZXJDb21tYSwgbV9jb2RlQmxvY2stPmNvbnN0YW50QnVm
ZmVyKG5vZGUuc3RhcnRDb25zdGFudCgpKVtpXSk7CiAgICAgICAgIG91dC5wcmludCgiXSIpOwot
ICAgICAgICBoYXNQcmludGVkID0gdHJ1ZTsKLSAgICB9Ci0gICAgaWYgKG5vZGUuaGFzSW5kZXhp
bmdUeXBlKCkpIHsKLSAgICAgICAgaWYgKGhhc1ByaW50ZWQpCi0gICAgICAgICAgICBvdXQucHJp
bnQoIiwgIik7Ci0gICAgICAgIG91dC5wcmludChJbmRleGluZ1R5cGVEdW1wKG5vZGUuaW5kZXhp
bmdUeXBlKCkpKTsKLSAgICAgICAgaGFzUHJpbnRlZCA9IHRydWU7Ci0gICAgfQotICAgIGlmIChu
b2RlLmhhc0V4ZWN1dGlvbkNvdW50ZXIoKSkgewotICAgICAgICBpZiAoaGFzUHJpbnRlZCkKLSAg
ICAgICAgICAgIG91dC5wcmludCgiLCAiKTsKLSAgICAgICAgb3V0LnByaW50KFJhd1BvaW50ZXIo
bm9kZS5leGVjdXRpb25Db3VudGVyKCkpKTsKLSAgICAgICAgaGFzUHJpbnRlZCA9IHRydWU7CiAg
ICAgfQorICAgIGlmIChub2RlLT5oYXNJbmRleGluZ1R5cGUoKSkKKyAgICAgICAgb3V0LnByaW50
KGNvbW1hLCBJbmRleGluZ1R5cGVEdW1wKG5vZGUtPmluZGV4aW5nVHlwZSgpKSk7CisgICAgaWYg
KG5vZGUtPmhhc0V4ZWN1dGlvbkNvdW50ZXIoKSkgeworICAgICAgICBvdXQucHJpbnQoY29tbWEs
IFJhd1BvaW50ZXIobm9kZS0+ZXhlY3V0aW9uQ291bnRlcigpKSk7CiAgICAgaWYgKG9wID09IEpT
Q29uc3RhbnQpIHsKLSAgICAgICAgb3V0LnByaW50KGhhc1ByaW50ZWQgPyAiLCAiIDogIiIsICIk
Iiwgbm9kZS5jb25zdGFudE51bWJlcigpKTsKLSAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IHZhbHVl
T2ZKU0NvbnN0YW50KG5vZGVJbmRleCk7CisgICAgICAgIG91dC5wcmludChjb21tYSwgIiQiLCBu
b2RlLT5jb25zdGFudE51bWJlcigpKTsKKyAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IHZhbHVlT2ZK
U0NvbnN0YW50KG5vZGUpOwogICAgICAgICBvdXQucHJpbnQoIiA9ICIsIHZhbHVlKTsKLSAgICAg
ICAgaGFzUHJpbnRlZCA9IHRydWU7Ci0gICAgfQotICAgIGlmIChvcCA9PSBXZWFrSlNDb25zdGFu
dCkgewotICAgICAgICBvdXQucHJpbnQoaGFzUHJpbnRlZCA/ICIsICIgOiAiIiwgUmF3UG9pbnRl
cihub2RlLndlYWtDb25zdGFudCgpKSk7Ci0gICAgICAgIGhhc1ByaW50ZWQgPSB0cnVlOwotICAg
IH0KLSAgICBpZiAgKG5vZGUuaXNCcmFuY2goKSB8fCBub2RlLmlzSnVtcCgpKSB7Ci0gICAgICAg
IG91dC5wcmludChoYXNQcmludGVkID8gIiwgIiA6ICIiLCAiVDojIiwgbm9kZS50YWtlbkJsb2Nr
SW5kZXgoKSk7Ci0gICAgICAgIGhhc1ByaW50ZWQgPSB0cnVlOwotICAgIH0KLSAgICBpZiAgKG5v
ZGUuaXNCcmFuY2goKSkgewotICAgICAgICBvdXQucHJpbnQoaGFzUHJpbnRlZCA/ICIsICIgOiAi
IiwgIkY6IyIsIG5vZGUubm90VGFrZW5CbG9ja0luZGV4KCkpOwotICAgICAgICBoYXNQcmludGVk
ID0gdHJ1ZTsKICAgICB9Ci0gICAgb3V0LnByaW50KGhhc1ByaW50ZWQgPyAiLCAiIDogIiIsICJi
YyMiLCBub2RlLmNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCk7Ci0gICAgaGFzUHJpbnRlZCA9IHRy
dWU7Ci0gICAgCi0gICAgKHZvaWQpaGFzUHJpbnRlZDsKKyAgICBpZiAob3AgPT0gV2Vha0pTQ29u
c3RhbnQpCisgICAgICAgIG91dC0+cHJpbnQoY29tbWEsIFJhd1BvaW50ZXIobm9kZS0+d2Vha0Nv
bnN0YW50KCkpKTsKKyAgICBpZiAobm9kZS0+aXNCcmFuY2goKSB8fCBub2RlLT5pc0p1bXAoKSkK
KyAgICAgICAgb3V0LnByaW50KGNvbW1hLCAiVDojIiwgbm9kZS0+dGFrZW5CbG9ja0luZGV4KCkp
OworICAgIGlmIChub2RlLT5pc0JyYW5jaCgpKQorICAgICAgICBvdXQucHJpbnQoY29tbWEsICJG
OiMiLCBub2RlLT5ub3RUYWtlbkJsb2NrSW5kZXgoKSk7CisgICAgb3V0LnByaW50KGNvbW1hLCAi
YmMjIiwgbm9kZS0+Y29kZU9yaWdpbi5ieXRlY29kZUluZGV4KTsKICAgICAKICAgICBvdXQucHJp
bnQoIikiKTsKIAogICAgIGlmICghc2tpcHBlZCkgewotICAgICAgICBpZiAobm9kZS5oYXNWYXJp
YWJsZUFjY2Vzc0RhdGEoKSkKLSAgICAgICAgICAgIG91dC5wcmludCgiICBwcmVkaWN0aW5nICIs
IFNwZWN1bGF0aW9uRHVtcChub2RlLnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5wcmVkaWN0aW9uKCkp
LCBub2RlLnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5zaG91bGRVc2VEb3VibGVGb3JtYXQoKSA/ICIs
IGZvcmNpbmcgZG91YmxlIiA6ICIiKTsKLSAgICAgICAgZWxzZSBpZiAobm9kZS5oYXNIZWFwUHJl
ZGljdGlvbigpKQotICAgICAgICAgICAgb3V0LnByaW50KCIgIHByZWRpY3RpbmcgIiwgU3BlY3Vs
YXRpb25EdW1wKG5vZGUuZ2V0SGVhcFByZWRpY3Rpb24oKSkpOworICAgICAgICBpZiAobm9kZS0+
aGFzVmFyaWFibGVBY2Nlc3NEYXRhKCkpCisgICAgICAgICAgICBvdXQucHJpbnQoIiAgcHJlZGlj
dGluZyAiLCBTcGVjdWxhdGlvbkR1bXAobm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCktPnByZWRp
Y3Rpb24oKSksIG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5zaG91bGRVc2VEb3VibGVGb3Jt
YXQoKSA/ICIsIGZvcmNpbmcgZG91YmxlIiA6ICIiKTsKKyAgICAgICAgZWxzZSBpZiAobm9kZS0+
aGFzSGVhcFByZWRpY3Rpb24oKSkKKyAgICAgICAgICAgIG91dC5wcmludCgiICBwcmVkaWN0aW5n
ICIsIFNwZWN1bGF0aW9uRHVtcChub2RlLT5nZXRIZWFwUHJlZGljdGlvbigpKSk7CiAgICAgfQog
ICAgIAogICAgIG91dC5wcmludCgiXG4iKTsKQEAgLTMwOSw3ICsyNTAsNyBAQCB2b2lkIEdyYXBo
OjpkdW1wQmxvY2tIZWFkZXIoUHJpbnRTdHJlYW0mCiB7CiAgICAgQmFzaWNCbG9jayogYmxvY2sg
PSBtX2Jsb2Nrc1tibG9ja0luZGV4XS5nZXQoKTsKIAotICAgIG91dC5wcmludChwcmVmaXgsICJC
bG9jayAjIiwgYmxvY2tJbmRleCwgIiAoIiwgYXQoYmxvY2stPmF0KDApKS5jb2RlT3JpZ2luLCAi
KTogIiwgYmxvY2stPmlzUmVhY2hhYmxlID8gIiIgOiAiKHNraXBwZWQpIiwgYmxvY2stPmlzT1NS
VGFyZ2V0ID8gIiAoT1NSIHRhcmdldCkiIDogIiIsICJcbiIpOworICAgIG91dC5wcmludChwcmVm
aXgsICJCbG9jayAjIiwgYmxvY2tJbmRleCwgIiAoIiwgYmxvY2stPmF0KDApLT5jb2RlT3JpZ2lu
LCAiKTogIiwgYmxvY2stPmlzUmVhY2hhYmxlID8gIiIgOiAiKHNraXBwZWQpIiwgYmxvY2stPmlz
T1NSVGFyZ2V0ID8gIiAoT1NSIHRhcmdldCkiIDogIiIsICJcbiIpOwogICAgIG91dC5wcmludChw
cmVmaXgsICIgIFByZWRlY2Vzc29yczoiKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGJs
b2NrLT5tX3ByZWRlY2Vzc29ycy5zaXplKCk7ICsraSkKICAgICAgICAgb3V0LnByaW50KCIgIyIs
IGJsb2NrLT5tX3ByZWRlY2Vzc29yc1tpXSk7CkBAIC0zMzIsMTcgKzI3MywxNiBAQCB2b2lkIEdy
YXBoOjpkdW1wQmxvY2tIZWFkZXIoUHJpbnRTdHJlYW0mCiAgICAgfQogICAgIG91dC5wcmludChw
cmVmaXgsICIgIFBoaSBOb2RlczoiKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGJsb2Nr
LT5waGlzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIE5vZGVJbmRleCBwaGlOb2RlSW5kZXggPSBi
bG9jay0+cGhpc1tpXTsKLSAgICAgICAgTm9kZSYgcGhpTm9kZSA9IGF0KHBoaU5vZGVJbmRleCk7
Ci0gICAgICAgIGlmICghcGhpTm9kZS5zaG91bGRHZW5lcmF0ZSgpICYmIHBoaU5vZGVEdW1wTW9k
ZSA9PSBEdW1wTGl2ZVBoaXNPbmx5KQorICAgICAgICBOb2RlKiBwaGlOb2RlID0gYmxvY2stPnBo
aXNbaV07CisgICAgICAgIGlmICghcGhpTm9kZS0+c2hvdWxkR2VuZXJhdGUoKSAmJiBwaGlOb2Rl
RHVtcE1vZGUgPT0gRHVtcExpdmVQaGlzT25seSkKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAg
ICAgICBvdXQucHJpbnQoIiBAIiwgcGhpTm9kZUluZGV4LCAiPCIsIHBoaU5vZGUucmVmQ291bnQo
KSwgIj4tPigiKTsKLSAgICAgICAgaWYgKHBoaU5vZGUuY2hpbGQxKCkpIHsKLSAgICAgICAgICAg
IG91dC5wcmludCgiQCIsIHBoaU5vZGUuY2hpbGQxKCkuaW5kZXgoKSk7Ci0gICAgICAgICAgICBp
ZiAocGhpTm9kZS5jaGlsZDIoKSkgewotICAgICAgICAgICAgICAgIG91dC5wcmludCgiLCBAIiwg
cGhpTm9kZS5jaGlsZDIoKS5pbmRleCgpKTsKLSAgICAgICAgICAgICAgICBpZiAocGhpTm9kZS5j
aGlsZDMoKSkKLSAgICAgICAgICAgICAgICAgICAgb3V0LnByaW50KCIsIEAiLCBwaGlOb2RlLmNo
aWxkMygpLmluZGV4KCkpOworICAgICAgICBvdXQucHJpbnQoIiBAIiwgcGhpTm9kZS0+aW5kZXgo
KSwgIjwiLCBwaGlOb2RlLT5yZWZDb3VudCgpLCAiPi0+KCIpOworICAgICAgICBpZiAocGhpTm9k
ZS0+Y2hpbGQxKCkpIHsKKyAgICAgICAgICAgIG91dC5wcmludCgiQCIsIHBoaU5vZGUtPmNoaWxk
MSgpLT5pbmRleCgpKCkpOworICAgICAgICAgICAgaWYgKHBoaU5vZGUtPmNoaWxkMigpKSB7Cisg
ICAgICAgICAgICAgICAgb3V0LnByaW50KCIsIEAiLCBwaGlOb2RlLT5jaGlsZDIoKS0+aW5kZXgo
KSk7CisgICAgICAgICAgICAgICAgaWYgKHBoaU5vZGUtPmNoaWxkMygpKQorICAgICAgICAgICAg
ICAgICAgICBvdXQucHJpbnQoIiwgQCIsIHBoaU5vZGUtPmNoaWxkMygpLT5pbmRleCgpKTsKICAg
ICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBvdXQucHJpbnQoIikiLCBpICsgMSA8IGJs
b2NrLT5waGlzLnNpemUoKSA/ICIsIiA6ICIiKTsKQEAgLTM1Miw3ICsyOTIsNyBAQCB2b2lkIEdy
YXBoOjpkdW1wQmxvY2tIZWFkZXIoUHJpbnRTdHJlYW0mCiAKIHZvaWQgR3JhcGg6OmR1bXAoUHJp
bnRTdHJlYW0mIG91dCkKIHsKLSAgICBOb2RlSW5kZXggbGFzdE5vZGVJbmRleCA9IE5vTm9kZTsK
KyAgICBOb2RlKiBsYXN0Tm9kZSA9IDA7CiAgICAgZm9yIChzaXplX3QgYiA9IDA7IGIgPCBtX2Js
b2Nrcy5zaXplKCk7ICsrYikgewogICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fYmxvY2tz
W2JdLmdldCgpOwogICAgICAgICBpZiAoIWJsb2NrKQpAQCAtMzY4LDkgKzMwOCw5IEBAIHZvaWQg
R3JhcGg6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkKICAgICAgICAgZHVtcE9wZXJhbmRzKGJsb2Nr
LT52YXJpYWJsZXNBdEhlYWQsIG91dCk7CiAgICAgICAgIG91dC5wcmludCgiXG4iKTsKICAgICAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBibG9jay0+c2l6ZSgpOyArK2kpIHsKLSAgICAgICAg
ICAgIGR1bXBDb2RlT3JpZ2luKG91dCwgIiIsIGxhc3ROb2RlSW5kZXgsIGJsb2NrLT5hdChpKSk7
CisgICAgICAgICAgICBkdW1wQ29kZU9yaWdpbihvdXQsICIiLCBsYXN0Tm9kZSwgYmxvY2stPmF0
KGkpKTsKICAgICAgICAgICAgIGR1bXAob3V0LCAiIiwgYmxvY2stPmF0KGkpKTsKLSAgICAgICAg
ICAgIGxhc3ROb2RlSW5kZXggPSBibG9jay0+YXQoaSk7CisgICAgICAgICAgICBsYXN0Tm9kZSA9
IGJsb2NrLT5hdChpKTsKICAgICAgICAgfQogICAgICAgICBvdXQucHJpbnQoIiAgdmFycyBhZnRl
cjogIik7CiAgICAgICAgIGlmIChibG9jay0+Y2ZhSGFzVmlzaXRlZCkKQEAgLTM4Niw0MCArMzI2
LDQwIEBAIHZvaWQgR3JhcGg6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkKIAogLy8gRklYTUU6IENv
bnZlcnQgdGhpcyB0byBiZSBpdGVyYXRpdmUsIG5vdCByZWN1cnNpdmUuCiAjZGVmaW5lIERPX1RP
X0NISUxEUkVOKG5vZGUsIHRoaW5nVG9EbykgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCi0gICAgICAgIE5vZGUmIF9ub2RlID0gKG5vZGUpOyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIGlmIChfbm9kZS5mbGFncygpICYgTm9kZUhh
c1ZhckFyZ3MpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIF9jaGlsZElkeCA9IF9ub2RlLmZpcnN0Q2hpbGQoKTsgICAgICAgICAgICAgICBc
Ci0gICAgICAgICAgICAgICAgIF9jaGlsZElkeCA8IF9ub2RlLmZpcnN0Q2hpbGQoKSArIF9ub2Rl
Lm51bUNoaWxkcmVuKCk7ICBcCisgICAgICAgIE5vZGUqIF9ub2RlID0gKG5vZGUpOyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGlmIChfbm9kZS0+
ZmxhZ3MoKSAmIE5vZGVIYXNWYXJBcmdzKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisg
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIF9jaGlsZElkeCA9IF9ub2RlLT5maXJzdENoaWxkKCk7
ICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgIF9jaGlsZElkeCA8IF9ub2RlLT5maXJz
dENoaWxkKCkgKyBfbm9kZS0+bnVtQ2hpbGRyZW4oKTsgXAogICAgICAgICAgICAgICAgICBfY2hp
bGRJZHgrKykgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAg
ICAgICAgICAgICAgIGlmICghIW1fdmFyQXJnQ2hpbGRyZW5bX2NoaWxkSWR4XSkgICAgICAgICAg
ICAgICAgICAgICAgXAogICAgICAgICAgICAgICAgICAgICB0aGluZ1RvRG8obV92YXJBcmdDaGls
ZHJlbltfY2hpbGRJZHhdKTsgICAgICAgICAgICAgXAogICAgICAgICAgICAgfSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAg
ICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAotICAgICAgICAgICAgaWYgKCFfbm9kZS5jaGlsZDEoKSkgeyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgIEFTU0VSVCghX25v
ZGUuY2hpbGQyKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAg
ICAgICAgICAgICAgICAmJiAhX25vZGUuY2hpbGQzKCkpOyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAorICAgICAgICAgICAgaWYgKCFfbm9kZS0+Y2hpbGQxKCkpIHsgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIEFTU0VSVCghX25vZGUt
PmNoaWxkMigpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAg
ICAgICAgICAgICAmJiAhX25vZGUtPmNoaWxkMygpKTsgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAogICAgICAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgdGhp
bmdUb0RvKF9ub2RlLmNoaWxkMSgpKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAorICAgICAgICAgICAgdGhpbmdUb0RvKF9ub2RlLT5jaGlsZDEoKSk7ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgaWYgKCFf
bm9kZS5jaGlsZDIoKSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAot
ICAgICAgICAgICAgICAgIEFTU0VSVCghX25vZGUuY2hpbGQzKCkpOyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgaWYgKCFfbm9kZS0+Y2hpbGQyKCkpIHsgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIEFTU0VS
VCghX25vZGUtPmNoaWxkMygpKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAg
ICAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAogICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgdGhpbmdUb0RvKF9u
b2RlLmNoaWxkMigpKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAg
ICAgICAgdGhpbmdUb0RvKF9ub2RlLT5jaGlsZDIoKSk7ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgaWYgKCFfbm9kZS5jaGls
ZDMoKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAg
ICAgaWYgKCFfbm9kZS0+Y2hpbGQzKCkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAogICAgICAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgdGhpbmdUb0RvKF9ub2RlLmNo
aWxkMygpKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAg
dGhpbmdUb0RvKF9ub2RlLT5jaGlsZDMoKSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAogICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAogICAgIH0gd2hpbGUgKGZhbHNlKQogCi12b2lkIEdyYXBo
OjpyZWZDaGlsZHJlbihOb2RlSW5kZXggb3ApCit2b2lkIEdyYXBoOjpyZWZDaGlsZHJlbihOb2Rl
KiBvcCkKIHsKICAgICBET19UT19DSElMRFJFTihhdChvcCksIHJlZik7CiB9CiAKLXZvaWQgR3Jh
cGg6OmRlcmVmQ2hpbGRyZW4oTm9kZUluZGV4IG9wKQordm9pZCBHcmFwaDo6ZGVyZWZDaGlsZHJl
bihOb2RlKiBvcCkKIHsKICAgICBET19UT19DSElMRFJFTihhdChvcCksIGRlcmVmKTsKIH0KQEAg
LTQzMiwxMiArMzcyLDEyIEBAIHZvaWQgR3JhcGg6OnByZWRpY3RBcmd1bWVudFR5cGVzKCkKICAg
ICAgICAgaWYgKCFwcm9maWxlKQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIAotICAg
ICAgICBhdChtX2FyZ3VtZW50c1thcmddKS52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+cHJlZGljdChw
cm9maWxlLT5jb21wdXRlVXBkYXRlZFByZWRpY3Rpb24oKSk7CisgICAgICAgIG1fYXJndW1lbnRz
W2FyZ10tPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5wcmVkaWN0KHByb2ZpbGUtPmNvbXB1dGVVcGRh
dGVkUHJlZGljdGlvbigpKTsKICAgICAgICAgCiAjaWYgREZHX0VOQUJMRShERUJVR19WRVJCT1NF
KQogICAgICAgICBkYXRhTG9nKAogICAgICAgICAgICAgIkFyZ3VtZW50IFsiLCBhcmcsICJdIHBy
ZWRpY3Rpb246ICIsCi0gICAgICAgICAgICBTcGVjdWxhdGlvbkR1bXAoYXQobV9hcmd1bWVudHNb
YXJnXSkudmFyaWFibGVBY2Nlc3NEYXRhKCktPnByZWRpY3Rpb24oKSksICJcbiIpOworICAgICAg
ICAgICAgU3BlY3VsYXRpb25EdW1wKG1fYXJndW1lbnRzW2FyZ10tPnZhcmlhYmxlQWNjZXNzRGF0
YSgpLT5wcmVkaWN0aW9uKCkpLCAiXG4iKTsKICNlbmRpZgogICAgIH0KIH0KQEAgLTQ1Niw1MSAr
Mzk2LDU0IEBAIHZvaWQgR3JhcGg6OmhhbmRsZVN1Y2Nlc3NvcihWZWN0b3I8QmxvY2sKIHZvaWQg
R3JhcGg6OmNvbGxlY3RHYXJiYWdlKCkKIHsKICAgICAvLyBGaXJzdCByZXNldCB0aGUgY291bnRz
IHRvIDAgZm9yIGFsbCBub2Rlcy4KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSBzaXplKCk7IGktLTsp
Ci0gICAgICAgIGF0KGkpLnNldFJlZkNvdW50KDApOworICAgIGZvciAoQmxvY2tJbmRleCBibG9j
a0luZGV4ID0gMDsgYmxvY2tJbmRleCA8IG1fYmxvY2tzLnNpemUoKTsgKytibG9ja0luZGV4KSB7
CisgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ibG9ja3NbYmxvY2tJbmRleF0uZ2V0KCk7
CisgICAgICAgIGlmICghYmxvY2spCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgZm9y
ICh1bnNpZ25lZCBpbmRleEluQmxvY2sgPSBibG9jay0+c2l6ZSgpOyBpbmRleEluQmxvY2stLTsp
CisgICAgICAgICAgICBibG9jay0+YXQoaW5kZXhJbkJsb2NrKS0+c2V0UmVmQ291bnQoMCk7Cisg
ICAgfQogICAgIAogICAgIC8vIE5vdyBmaW5kIHRoZSByb290czogdGhlIG5vZGVzIHRoYXQgYXJl
IG11c3QtZ2VuZXJhdGUuIFNldCB0aGVpciByZWYgY291bnRzIHRvCiAgICAgLy8gMSBhbmQgcHV0
IHRoZW0gb24gdGhlIHdvcmtsaXN0LgotICAgIFZlY3RvcjxOb2RlSW5kZXgsIDEyOD4gd29ya2xp
c3Q7CisgICAgVmVjdG9yPE5vZGUqLCAxMjg+IHdvcmtsaXN0OwogICAgIGZvciAoQmxvY2tJbmRl
eCBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8IG1fYmxvY2tzLnNpemUoKTsgKytibG9ja0lu
ZGV4KSB7CiAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ibG9ja3NbYmxvY2tJbmRleF0u
Z2V0KCk7CiAgICAgICAgIGlmICghYmxvY2spCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpbmRleEluQmxvY2sgPSBibG9jay0+c2l6ZSgpOyBpbmRleEluQmxv
Y2stLTspIHsKLSAgICAgICAgICAgIE5vZGVJbmRleCBub2RlSW5kZXggPSBibG9jay0+YXQoaW5k
ZXhJbkJsb2NrKTsKLSAgICAgICAgICAgIE5vZGUmIG5vZGUgPSBhdChub2RlSW5kZXgpOwotICAg
ICAgICAgICAgaWYgKCEobm9kZS5mbGFncygpICYgTm9kZU11c3RHZW5lcmF0ZSkpCisgICAgICAg
ICAgICBOb2RlKiBub2RlID0gYmxvY2stPmF0KGluZGV4SW5CbG9jayk7CisgICAgICAgICAgICBp
ZiAoIShub2RlLT5mbGFncygpICYgTm9kZU11c3RHZW5lcmF0ZSkpCiAgICAgICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgICAgICBub2RlLnNldFJlZkNvdW50KDEpOwotICAgICAgICAgICAg
d29ya2xpc3QuYXBwZW5kKG5vZGVJbmRleCk7CisgICAgICAgICAgICBub2RlLT5zZXRSZWZDb3Vu
dCgxKTsKKyAgICAgICAgICAgIHdvcmtsaXN0LmFwcGVuZChub2RlKTsKICAgICAgICAgfQogICAg
IH0KICAgICAKICAgICB3aGlsZSAoIXdvcmtsaXN0LmlzRW1wdHkoKSkgewotICAgICAgICBOb2Rl
SW5kZXggbm9kZUluZGV4ID0gd29ya2xpc3QubGFzdCgpOworICAgICAgICBOb2RlKiBub2RlID0g
d29ya2xpc3QubGFzdCgpOwogICAgICAgICB3b3JrbGlzdC5yZW1vdmVMYXN0KCk7Ci0gICAgICAg
IE5vZGUmIG5vZGUgPSBhdChub2RlSW5kZXgpOwotICAgICAgICBBU1NFUlQobm9kZS5zaG91bGRH
ZW5lcmF0ZSgpKTsgLy8gSXQgc2hvdWxkIG5vdCBiZSBvbiB0aGUgd29ya2xpc3QgdW5sZXNzIGl0
J3MgcmVmJ2VkLgotICAgICAgICBpZiAobm9kZS5mbGFncygpICYgTm9kZUhhc1ZhckFyZ3MpIHsK
LSAgICAgICAgICAgIGZvciAodW5zaWduZWQgY2hpbGRJZHggPSBub2RlLmZpcnN0Q2hpbGQoKTsK
LSAgICAgICAgICAgICAgICAgY2hpbGRJZHggPCBub2RlLmZpcnN0Q2hpbGQoKSArIG5vZGUubnVt
Q2hpbGRyZW4oKTsKKyAgICAgICAgQVNTRVJUKG5vZGUtPnNob3VsZEdlbmVyYXRlKCkpOyAvLyBJ
dCBzaG91bGQgbm90IGJlIG9uIHRoZSB3b3JrbGlzdCB1bmxlc3MgaXQncyByZWYnZWQuCisgICAg
ICAgIGlmIChub2RlLT5mbGFncygpICYgTm9kZUhhc1ZhckFyZ3MpIHsKKyAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgY2hpbGRJZHggPSBub2RlLT5maXJzdENoaWxkKCk7CisgICAgICAgICAgICAg
ICAgIGNoaWxkSWR4IDwgbm9kZS0+Zmlyc3RDaGlsZCgpICsgbm9kZS0+bnVtQ2hpbGRyZW4oKTsK
ICAgICAgICAgICAgICAgICAgKytjaGlsZElkeCkgewogICAgICAgICAgICAgICAgIGlmICghbV92
YXJBcmdDaGlsZHJlbltjaGlsZElkeF0pCiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwot
ICAgICAgICAgICAgICAgIE5vZGVJbmRleCBjaGlsZE5vZGVJbmRleCA9IG1fdmFyQXJnQ2hpbGRy
ZW5bY2hpbGRJZHhdLmluZGV4KCk7Ci0gICAgICAgICAgICAgICAgaWYgKGF0KGNoaWxkTm9kZUlu
ZGV4KS5wb3N0Zml4UmVmKCkpCisgICAgICAgICAgICAgICAgTm9kZSogY2hpbGROb2RlID0gbV92
YXJBcmdDaGlsZHJlbltjaGlsZElkeF0ubm9kZSgpOworICAgICAgICAgICAgICAgIGlmIChjaGls
ZE5vZGUtPnBvc3RmaXhSZWYoKSkKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgICAgICAgICAgd29ya2xpc3QuYXBwZW5kKGNoaWxkTm9kZUluZGV4KTsKKyAgICAgICAgICAg
ICAgICB3b3JrbGlzdC5hcHBlbmQoY2hpbGROb2RlKTsKICAgICAgICAgICAgIH0KLSAgICAgICAg
fSBlbHNlIGlmIChub2RlLmNoaWxkMSgpKSB7Ci0gICAgICAgICAgICBpZiAoIWF0KG5vZGUuY2hp
bGQxKCkpLnBvc3RmaXhSZWYoKSkKLSAgICAgICAgICAgICAgICB3b3JrbGlzdC5hcHBlbmQobm9k
ZS5jaGlsZDEoKS5pbmRleCgpKTsKLSAgICAgICAgICAgIGlmIChub2RlLmNoaWxkMigpKSB7Ci0g
ICAgICAgICAgICAgICAgaWYgKCFhdChub2RlLmNoaWxkMigpKS5wb3N0Zml4UmVmKCkpCi0gICAg
ICAgICAgICAgICAgICAgIHdvcmtsaXN0LmFwcGVuZChub2RlLmNoaWxkMigpLmluZGV4KCkpOwot
ICAgICAgICAgICAgICAgIGlmIChub2RlLmNoaWxkMygpKSB7Ci0gICAgICAgICAgICAgICAgICAg
IGlmICghYXQobm9kZS5jaGlsZDMoKSkucG9zdGZpeFJlZigpKQotICAgICAgICAgICAgICAgICAg
ICAgICAgd29ya2xpc3QuYXBwZW5kKG5vZGUuY2hpbGQzKCkuaW5kZXgoKSk7CisgICAgICAgIH0g
ZWxzZSBpZiAobm9kZS0+Y2hpbGQxKCkpIHsKKyAgICAgICAgICAgIGlmICghbm9kZS0+Y2hpbGQx
KCktPnBvc3RmaXhSZWYoKSkKKyAgICAgICAgICAgICAgICB3b3JrbGlzdC5hcHBlbmQobm9kZS0+
Y2hpbGQxKCkubm9kZSgpKTsKKyAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDIoKSkgeworICAg
ICAgICAgICAgICAgIGlmICghbm9kZS0+Y2hpbGQyKCktPnBvc3RmaXhSZWYoKSkKKyAgICAgICAg
ICAgICAgICAgICAgd29ya2xpc3QuYXBwZW5kKG5vZGUtPmNoaWxkMigpLm5vZGUoKSk7CisgICAg
ICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMygpKSB7CisgICAgICAgICAgICAgICAgICAgIGlm
ICghbm9kZS0+Y2hpbGQzKCktPnBvc3RmaXhSZWYoKSkKKyAgICAgICAgICAgICAgICAgICAgICAg
IHdvcmtsaXN0LmFwcGVuZChub2RlLT5jaGlsZDMoKS5ub2RlKCkpOwogICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtNTE5LDE0ICs0NjIsMTQgQEAgdm9pZCBH
cmFwaDo6ZGV0ZXJtaW5lUmVhY2hhYmlsaXR5KCkKICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sg
PSBtX2Jsb2Nrc1tpbmRleF0uZ2V0KCk7CiAgICAgICAgIEFTU0VSVChibG9jay0+aXNMaW5rZWQp
OwogICAgICAgICAKLSAgICAgICAgTm9kZSYgbm9kZSA9IGF0KGJsb2NrLT5sYXN0KCkpOwotICAg
ICAgICBBU1NFUlQobm9kZS5pc1Rlcm1pbmFsKCkpOworICAgICAgICBOb2RlKiBub2RlID0gYmxv
Y2stPmxhc3QoKTsKKyAgICAgICAgQVNTRVJUKG5vZGUtPmlzVGVybWluYWwoKSk7CiAgICAgICAg
IAotICAgICAgICBpZiAobm9kZS5pc0p1bXAoKSkKLSAgICAgICAgICAgIGhhbmRsZVN1Y2Nlc3Nv
cih3b3JrbGlzdCwgaW5kZXgsIG5vZGUudGFrZW5CbG9ja0luZGV4KCkpOwotICAgICAgICBlbHNl
IGlmIChub2RlLmlzQnJhbmNoKCkpIHsKLSAgICAgICAgICAgIGhhbmRsZVN1Y2Nlc3Nvcih3b3Jr
bGlzdCwgaW5kZXgsIG5vZGUudGFrZW5CbG9ja0luZGV4KCkpOwotICAgICAgICAgICAgaGFuZGxl
U3VjY2Vzc29yKHdvcmtsaXN0LCBpbmRleCwgbm9kZS5ub3RUYWtlbkJsb2NrSW5kZXgoKSk7Cisg
ICAgICAgIGlmIChub2RlLT5pc0p1bXAoKSkKKyAgICAgICAgICAgIGhhbmRsZVN1Y2Nlc3Nvcih3
b3JrbGlzdCwgaW5kZXgsIG5vZGUtPnRha2VuQmxvY2tJbmRleCgpKTsKKyAgICAgICAgZWxzZSBp
ZiAobm9kZS0+aXNCcmFuY2goKSkgeworICAgICAgICAgICAgaGFuZGxlU3VjY2Vzc29yKHdvcmts
aXN0LCBpbmRleCwgbm9kZS0+dGFrZW5CbG9ja0luZGV4KCkpOworICAgICAgICAgICAgaGFuZGxl
U3VjY2Vzc29yKHdvcmtsaXN0LCBpbmRleCwgbm9kZS0+bm90VGFrZW5CbG9ja0luZGV4KCkpOwog
ICAgICAgICB9CiAgICAgfQogfQpAQCAtNTQ2LDggKzQ4OSwxMyBAQCB2b2lkIEdyYXBoOjpyZXNl
dFJlYWNoYWJpbGl0eSgpCiAKIHZvaWQgR3JhcGg6OnJlc2V0RXhpdFN0YXRlcygpCiB7Ci0gICAg
Zm9yICh1bnNpZ25lZCBpID0gc2l6ZSgpOyBpLS07KQotICAgICAgICBhdChpKS5zZXRDYW5FeGl0
KHRydWUpOworICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8
IG1fYmxvY2tzLnNpemUoKTsgKytibG9ja0luZGV4KSB7CisgICAgICAgIEJhc2ljQmxvY2sqIGJs
b2NrID0gbV9ibG9ja3NbYmxvY2tJbmRleF0uZ2V0KCk7CisgICAgICAgIGlmICghYmxvY2spCisg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbmRleEluQmxvY2sg
PSBibG9jay0+c2l6ZSgpOyBpbmRleEluQmxvY2stLTspCisgICAgICAgICAgICBibG9jay0+YXQo
aW5kZXhJbkJsb2NrKS0+c2V0Q2FuRXhpdCh0cnVlKTsKKyAgICB9CiB9CiAKIH0gfSAvLyBuYW1l
c3BhY2UgSlNDOjpERkcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGgu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHJl
dmlzaW9uIDE0MDU2NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLCAy
MDEyLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtMzUsNyArMzUsOSBAQAogI2luY2x1ZGUgIkRGR0Fzc2VtYmx5
SGVscGVycy5oIgogI2luY2x1ZGUgIkRGR0Jhc2ljQmxvY2suaCIKICNpbmNsdWRlICJERkdEb21p
bmF0b3JzLmgiCisjaW5jbHVkZSAiREZHTG9uZ0xpdmVkU3RhdGUuaCIKICNpbmNsdWRlICJERkdO
b2RlLmgiCisjaW5jbHVkZSAiREZHTm9kZUFsbG9jYXRvci5oIgogI2luY2x1ZGUgIkRGR1Zhcmlh
ZGljRnVuY3Rpb24uaCIKICNpbmNsdWRlICJKU1N0YWNrLmgiCiAjaW5jbHVkZSAiTWV0aG9kT2ZH
ZXR0aW5nQVZhbHVlUHJvZmlsZS5oIgpAQCAtODMsNTQgKzg1LDQ4IEBAIGVudW0gQWRkU3BlY3Vs
YXRpb25Nb2RlIHsKIC8vCiAvLyA9PT0gR3JhcGggPT09CiAvLwotLy8gVGhlIGRhdGFmbG93IGdy
YXBoIGlzIGFuIG9yZGVyZWQgdmVjdG9yIG9mIG5vZGVzLgogLy8gVGhlIG9yZGVyIG1heSBiZSBz
aWduaWZpY2FudCBmb3Igbm9kZXMgd2l0aCBzaWRlLWVmZmVjdHMgKHByb3BlcnR5IGFjY2Vzc2Vz
LCB2YWx1ZSBjb252ZXJzaW9ucykuCiAvLyBOb2RlcyB0aGF0IGFyZSAnZGVhZCcgcmVtYWluIGlu
IHRoZSB2ZWN0b3Igd2l0aCByZWZDb3VudCAwLgotY2xhc3MgR3JhcGggOiBwdWJsaWMgVmVjdG9y
PE5vZGUsIDY0PiB7CitjbGFzcyBHcmFwaCB7CiBwdWJsaWM6CiAgICAgR3JhcGgoSlNHbG9iYWxE
YXRhJiwgQ29kZUJsb2NrKiwgdW5zaWduZWQgb3NyRW50cnlCeXRlY29kZUluZGV4LCBjb25zdCBP
cGVyYW5kczxKU1ZhbHVlPiYgbXVzdEhhbmRsZVZhbHVlcyk7Ci0gICAgCi0gICAgdXNpbmcgVmVj
dG9yPE5vZGUsIDY0Pjo6b3BlcmF0b3JbXTsKLSAgICB1c2luZyBWZWN0b3I8Tm9kZSwgNjQ+Ojph
dDsKLSAgICAKLSAgICBOb2RlJiBvcGVyYXRvcltdKEVkZ2Ugbm9kZVVzZSkgeyByZXR1cm4gYXQo
bm9kZVVzZS5pbmRleCgpKTsgfQotICAgIGNvbnN0IE5vZGUmIG9wZXJhdG9yW10oRWRnZSBub2Rl
VXNlKSBjb25zdCB7IHJldHVybiBhdChub2RlVXNlLmluZGV4KCkpOyB9Ci0gICAgCi0gICAgTm9k
ZSYgYXQoRWRnZSBub2RlVXNlKSB7IHJldHVybiBhdChub2RlVXNlLmluZGV4KCkpOyB9Ci0gICAg
Y29uc3QgTm9kZSYgYXQoRWRnZSBub2RlVXNlKSBjb25zdCB7IHJldHVybiBhdChub2RlVXNlLmlu
ZGV4KCkpOyB9CisgICAgfkdyYXBoKCk7CiAgICAgCiAgICAgLy8gTWFyayBhIG5vZGUgYXMgYmVp
bmcgcmVmZXJlbmNlZC4KLSAgICBOb2RlSW5kZXggcmVmKE5vZGVJbmRleCBub2RlSW5kZXgpCisg
ICAgTm9kZSogcmVmKE5vZGUqIG5vZGUpCiAgICAgewotICAgICAgICBOb2RlJiBub2RlID0gYXQo
bm9kZUluZGV4KTsKICAgICAgICAgLy8gSWYgdGhlIHZhbHVlIChiZWZvcmUgaW5jcmVtZW50aW5n
KSB3YXMgYXQgcmVmQ291bnQgemVybyB0aGVuIHdlIG5lZWQgdG8gcmVmIGl0cyBjaGlsZHJlbi4K
LSAgICAgICAgaWYgKCFub2RlLnBvc3RmaXhSZWYoKSkKLSAgICAgICAgICAgIHJlZkNoaWxkcmVu
KG5vZGVJbmRleCk7Ci0gICAgICAgIHJldHVybiBub2RlSW5kZXg7CisgICAgICAgIGlmICghbm9k
ZS0+cG9zdGZpeFJlZigpKQorICAgICAgICAgICAgcmVmQ2hpbGRyZW4obm9kZSk7CisgICAgICAg
IHJldHVybiBub2RlOwogICAgIH0KICAgICBFZGdlIHJlZihFZGdlIG5vZGVVc2UpCiAgICAgewot
ICAgICAgICByZWYobm9kZVVzZS5pbmRleCgpKTsKKyAgICAgICAgcmVmKG5vZGVVc2Uubm9kZSgp
KTsKICAgICAgICAgcmV0dXJuIG5vZGVVc2U7CiAgICAgfQogICAgIAotICAgIHZvaWQgZGVyZWYo
Tm9kZUluZGV4IG5vZGVJbmRleCkKKyAgICB2b2lkIGRlcmVmKE5vZGUqIG5vZGUpCiAgICAgewot
ICAgICAgICBpZiAoYXQobm9kZUluZGV4KS5wb3N0Zml4RGVyZWYoKSA9PSAxKQotICAgICAgICAg
ICAgZGVyZWZDaGlsZHJlbihub2RlSW5kZXgpOworI2lmICFBU1NFUlRfRElTQUJMRUQKKyAgICAg
ICAgaWYgKCFub2RlLT5yZWZDb3VudCgpKQorICAgICAgICAgICAgZHVtcCgpOworI2VuZGlmCisg
ICAgICAgIGlmIChub2RlLT5wb3N0Zml4RGVyZWYoKSA9PSAxKQorICAgICAgICAgICAgZGVyZWZD
aGlsZHJlbihub2RlKTsKICAgICB9CiAgICAgdm9pZCBkZXJlZihFZGdlIG5vZGVVc2UpCiAgICAg
ewotICAgICAgICBkZXJlZihub2RlVXNlLmluZGV4KCkpOworICAgICAgICBkZXJlZihub2RlVXNl
Lm5vZGUoKSk7CiAgICAgfQogICAgIAotICAgIHZvaWQgY2hhbmdlSW5kZXgoRWRnZSYgZWRnZSwg
Tm9kZUluZGV4IG5ld0luZGV4LCBib29sIGNoYW5nZVJlZiA9IHRydWUpCisgICAgdm9pZCBjaGFu
Z2VDaGlsZChFZGdlJiBlZGdlLCBOb2RlKiBuZXdOb2RlLCBib29sIGNoYW5nZVJlZiA9IHRydWUp
CiAgICAgewogICAgICAgICBpZiAoY2hhbmdlUmVmKSB7Ci0gICAgICAgICAgICByZWYobmV3SW5k
ZXgpOwotICAgICAgICAgICAgZGVyZWYoZWRnZS5pbmRleCgpKTsKKyAgICAgICAgICAgIHJlZihu
ZXdOb2RlKTsKKyAgICAgICAgICAgIGRlcmVmKGVkZ2Uubm9kZSgpKTsKICAgICAgICAgfQotICAg
ICAgICBlZGdlLnNldEluZGV4KG5ld0luZGV4KTsKKyAgICAgICAgZWRnZS5zZXROb2RlKG5ld05v
ZGUpOwogICAgIH0KICAgICAKICAgICB2b2lkIGNoYW5nZUVkZ2UoRWRnZSYgZWRnZSwgRWRnZSBu
ZXdFZGdlLCBib29sIGNoYW5nZVJlZiA9IHRydWUpCkBAIC0xNDIsMTEgKzEzOCwxMSBAQCBwdWJs
aWM6CiAgICAgICAgIGVkZ2UgPSBuZXdFZGdlOwogICAgIH0KICAgICAKLSAgICB2b2lkIGNvbXBh
cmVBbmRTd2FwKEVkZ2UmIGVkZ2UsIE5vZGVJbmRleCBvbGRJbmRleCwgTm9kZUluZGV4IG5ld0lu
ZGV4LCBib29sIGNoYW5nZVJlZikKKyAgICB2b2lkIGNvbXBhcmVBbmRTd2FwKEVkZ2UmIGVkZ2Us
IE5vZGUqIG9sZE5vZGUsIE5vZGUqIG5ld05vZGUsIGJvb2wgY2hhbmdlUmVmKQogICAgIHsKLSAg
ICAgICAgaWYgKGVkZ2UuaW5kZXgoKSAhPSBvbGRJbmRleCkKKyAgICAgICAgaWYgKGVkZ2Uubm9k
ZSgpICE9IG9sZE5vZGUpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGNoYW5nZUluZGV4
KGVkZ2UsIG5ld0luZGV4LCBjaGFuZ2VSZWYpOworICAgICAgICBjaGFuZ2VDaGlsZChlZGdlLCBu
ZXdOb2RlLCBjaGFuZ2VSZWYpOwogICAgIH0KICAgICAKICAgICB2b2lkIGNvbXBhcmVBbmRTd2Fw
KEVkZ2UmIGVkZ2UsIEVkZ2Ugb2xkRWRnZSwgRWRnZSBuZXdFZGdlLCBib29sIGNoYW5nZVJlZikK
QEAgLTE1Niw0NCArMTUyLDI5IEBAIHB1YmxpYzoKICAgICAgICAgY2hhbmdlRWRnZShlZGdlLCBu
ZXdFZGdlLCBjaGFuZ2VSZWYpOwogICAgIH0KICAgICAKLSAgICB2b2lkIGNsZWFyQW5kRGVyZWZD
aGlsZDEoTm9kZSYgbm9kZSkKKyAgICB2b2lkIGNsZWFyQW5kRGVyZWZDaGlsZChOb2RlKiBub2Rl
LCB1bnNpZ25lZCBpbmRleCkKICAgICB7Ci0gICAgICAgIGlmICghbm9kZS5jaGlsZDEoKSkKKyAg
ICAgICAgaWYgKCFub2RlLT5jaGlsZHJlbi5jaGlsZChpbmRleCkpCiAgICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIGRlcmVmKG5vZGUuY2hpbGQxKCkpOwotICAgICAgICBub2RlLmNoaWxkcmVu
LmNoaWxkMSgpID0gRWRnZSgpOwotICAgIH0KLQotICAgIHZvaWQgY2xlYXJBbmREZXJlZkNoaWxk
MihOb2RlJiBub2RlKQotICAgIHsKLSAgICAgICAgaWYgKCFub2RlLmNoaWxkMigpKQotICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICBkZXJlZihub2RlLmNoaWxkMigpKTsKLSAgICAgICAgbm9k
ZS5jaGlsZHJlbi5jaGlsZDIoKSA9IEVkZ2UoKTsKLSAgICB9Ci0KLSAgICB2b2lkIGNsZWFyQW5k
RGVyZWZDaGlsZDMoTm9kZSYgbm9kZSkKLSAgICB7Ci0gICAgICAgIGlmICghbm9kZS5jaGlsZDMo
KSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgZGVyZWYobm9kZS5jaGlsZDMoKSk7Ci0g
ICAgICAgIG5vZGUuY2hpbGRyZW4uY2hpbGQzKCkgPSBFZGdlKCk7CisgICAgICAgIGRlcmVmKG5v
ZGUtPmNoaWxkcmVuLmNoaWxkKGluZGV4KSk7CisgICAgICAgIG5vZGUuY2hpbGRyZW4uc2V0Q2hp
bGQoaW5kZXgsIEVkZ2UoKSk7CiAgICAgfQorICAgIHZvaWQgY2xlYXJBbmREZXJlZkNoaWxkMShO
b2RlKiBub2RlKSB7IGNsZWFyQW5kRGVyZWZDaGlsZChub2RlLCAwKTsgfQorICAgIHZvaWQgY2xl
YXJBbmREZXJlZkNoaWxkMihOb2RlKiBub2RlKSB7IGNsZWFyQW5kRGVyZWZDaGlsZChub2RlLCAx
KTsgfQorICAgIHZvaWQgY2xlYXJBbmREZXJlZkNoaWxkMyhOb2RlKiBub2RlKSB7IGNsZWFyQW5k
RGVyZWZDaGlsZChub2RlLCAyKTsgfQogICAgIAogI2RlZmluZSBERkdfREVGSU5FX0FERF9OT0RF
KHRlbXBsYXRlUHJlLCB0ZW1wbGF0ZVBvc3QsIHR5cGVQYXJhbXMsIHZhbHVlUGFyYW1zQ29tbWEs
IHZhbHVlUGFyYW1zLCB2YWx1ZUFyZ3MpIFwKLSAgICB0ZW1wbGF0ZVByZSB0eXBlUGFyYW1zIHRl
bXBsYXRlUG9zdCBOb2RlSW5kZXggYWRkTm9kZShSZWZDaGlsZHJlbk1vZGUgcmVmQ2hpbGRyZW5N
b2RlLCBSZWZOb2RlTW9kZSByZWZOb2RlTW9kZSwgU3BlY3VsYXRlZFR5cGUgdHlwZSB2YWx1ZVBh
cmFtc0NvbW1hIHZhbHVlUGFyYW1zKSBcCisgICAgdGVtcGxhdGVQcmUgdHlwZVBhcmFtcyB0ZW1w
bGF0ZVBvc3QgTm9kZSogYWRkTm9kZShSZWZDaGlsZHJlbk1vZGUgcmVmQ2hpbGRyZW5Nb2RlLCBS
ZWZOb2RlTW9kZSByZWZOb2RlTW9kZSwgU3BlY3VsYXRlZFR5cGUgdHlwZSB2YWx1ZVBhcmFtc0Nv
bW1hIHZhbHVlUGFyYW1zKSBcCiAgICAgeyBcCi0gICAgICAgIE5vZGUgbm9kZSA9IE5vZGUodmFs
dWVBcmdzKTsgXAotICAgICAgICBub2RlLnByZWRpY3QodHlwZSk7IFwKLSAgICAgICAgaWYgKG5v
ZGUuZmxhZ3MoKSAmIE5vZGVNdXN0R2VuZXJhdGUpIFwKLSAgICAgICAgICAgIG5vZGUucmVmKCk7
IFwKKyAgICAgICAgTm9kZSogbm9kZSA9IG5ldyAobV9hbGxvY2F0b3IpIE5vZGUodmFsdWVBcmdz
KTsgXAorICAgICAgICBub2RlLT5wcmVkaWN0KHR5cGUpOyBcCisgICAgICAgIGlmIChub2RlLT5m
bGFncygpICYgTm9kZU11c3RHZW5lcmF0ZSkgXAorICAgICAgICAgICAgbm9kZS0+cmVmKCk7IFwK
ICAgICAgICAgaWYgKHJlZk5vZGVNb2RlID09IFJlZk5vZGUpIFwKLSAgICAgICAgICAgIG5vZGUu
cmVmKCk7IFwKLSAgICAgICAgTm9kZUluZGV4IHJlc3VsdCA9IHNpemUoKTsgXAotICAgICAgICBh
cHBlbmQobm9kZSk7IFwKKyAgICAgICAgICAgIG5vZGUtPnJlZigpOyBcCiAgICAgICAgIGlmIChy
ZWZDaGlsZHJlbk1vZGUgPT0gUmVmQ2hpbGRyZW4pIFwKLSAgICAgICAgICAgIHJlZkNoaWxkcmVu
KHJlc3VsdCk7IFwKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsgXAorICAgICAgICAgICAgcmVmQ2hp
bGRyZW4obm9kZSk7IFwKKyAgICAgICAgcmV0dXJuIG5vZGU7IFwKICAgICB9CiAgICAgREZHX1ZB
UklBRElDX1RFTVBMQVRFX0ZVTkNUSU9OKERGR19ERUZJTkVfQUREX05PREUpCiAjdW5kZWYgREZH
X0RFRklORV9BRERfTk9ERQpAQCAtMjA0LDE0ICsxODUsMTQgQEAgcHVibGljOgogICAgIC8vIHJl
ZmVyZW5jZSBjb3VudHMgYWNjb3JkaW5nIHRvIHJlYWNoYWJpbGl0eS4KICAgICB2b2lkIGNvbGxl
Y3RHYXJiYWdlKCk7CiAgICAgCi0gICAgdm9pZCBjb252ZXJ0VG9Db25zdGFudChOb2RlSW5kZXgg
bm9kZUluZGV4LCB1bnNpZ25lZCBjb25zdGFudE51bWJlcikKKyAgICB2b2lkIGNvbnZlcnRUb0Nv
bnN0YW50KE5vZGUqIG5vZGUsIHVuc2lnbmVkIGNvbnN0YW50TnVtYmVyKQogICAgIHsKLSAgICAg
ICAgYXQobm9kZUluZGV4KS5jb252ZXJ0VG9Db25zdGFudChjb25zdGFudE51bWJlcik7CisgICAg
ICAgIG5vZGUtPmNvbnZlcnRUb0NvbnN0YW50KGNvbnN0YW50TnVtYmVyKTsKICAgICB9CiAgICAg
Ci0gICAgdm9pZCBjb252ZXJ0VG9Db25zdGFudChOb2RlSW5kZXggbm9kZUluZGV4LCBKU1ZhbHVl
IHZhbHVlKQorICAgIHZvaWQgY29udmVydFRvQ29uc3RhbnQoTm9kZSogbm9kZSwgSlNWYWx1ZSB2
YWx1ZSkKICAgICB7Ci0gICAgICAgIGNvbnZlcnRUb0NvbnN0YW50KG5vZGVJbmRleCwgbV9jb2Rl
QmxvY2stPmFkZE9yRmluZENvbnN0YW50KHZhbHVlKSk7CisgICAgICAgIGNvbnZlcnRUb0NvbnN0
YW50KG5vZGUsIG1fY29kZUJsb2NrLT5hZGRPckZpbmRDb25zdGFudCh2YWx1ZSkpOwogICAgIH0K
IAogICAgIC8vIENvZGVCbG9jayBpcyBvcHRpb25hbCwgYnV0IG1heSBhbGxvdyBhZGRpdGlvbmFs
IGluZm9ybWF0aW9uIHRvIGJlIGR1bXBlZCAoZS5nLiBJZGVudGlmaWVyIG5hbWVzKS4KQEAgLTIx
OSwxMjUgKzIwMCwxMjUgQEAgcHVibGljOgogICAgIGVudW0gUGhpTm9kZUR1bXBNb2RlIHsgRHVt
cExpdmVQaGlzT25seSwgRHVtcEFsbFBoaXMgfTsKICAgICB2b2lkIGR1bXBCbG9ja0hlYWRlcihQ
cmludFN0cmVhbSYsIGNvbnN0IGNoYXIqIHByZWZpeCwgQmxvY2tJbmRleCwgUGhpTm9kZUR1bXBN
b2RlKTsKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mLCBFZGdlKTsKLSAgICB2b2lkIGR1bXAo
UHJpbnRTdHJlYW0mLCBjb25zdCBjaGFyKiBwcmVmaXgsIE5vZGVJbmRleCk7Ci0gICAgc3RhdGlj
IGludCBhbW91bnRPZk5vZGVXaGl0ZVNwYWNlKE5vZGUmKTsKLSAgICBzdGF0aWMgdm9pZCBwcmlu
dE5vZGVXaGl0ZVNwYWNlKFByaW50U3RyZWFtJiwgTm9kZSYpOworICAgIHZvaWQgZHVtcChQcmlu
dFN0cmVhbSYsIGNvbnN0IGNoYXIqIHByZWZpeCwgTm9kZSopOworICAgIHN0YXRpYyBpbnQgYW1v
dW50T2ZOb2RlV2hpdGVTcGFjZShOb2RlKik7CisgICAgc3RhdGljIHZvaWQgcHJpbnROb2RlV2hp
dGVTcGFjZShQcmludFN0cmVhbSYsIE5vZGUqKTsKIAogICAgIC8vIER1bXAgdGhlIGNvZGUgb3Jp
Z2luIG9mIHRoZSBnaXZlbiBub2RlIGFzIGEgZGlmZiBmcm9tIHRoZSBjb2RlIG9yaWdpbiBvZiB0
aGUKICAgICAvLyBwcmVjZWRpbmcgbm9kZS4gUmV0dXJucyB0cnVlIGlmIGFueXRoaW5nIHdhcyBw
cmludGVkLgotICAgIGJvb2wgZHVtcENvZGVPcmlnaW4oUHJpbnRTdHJlYW0mLCBjb25zdCBjaGFy
KiBwcmVmaXgsIE5vZGVJbmRleCwgTm9kZUluZGV4KTsKKyAgICBib29sIGR1bXBDb2RlT3JpZ2lu
KFByaW50U3RyZWFtJiwgY29uc3QgY2hhciogcHJlZml4LCBOb2RlKiBwcmV2aW91c05vZGUsIE5v
ZGUqIGN1cnJlbnROb2RlKTsKIAogICAgIEJsb2NrSW5kZXggYmxvY2tJbmRleEZvckJ5dGVjb2Rl
T2Zmc2V0KFZlY3RvcjxCbG9ja0luZGV4PiYgYmxvY2tzLCB1bnNpZ25lZCBieXRlY29kZUJlZ2lu
KTsKIAotICAgIFNwZWN1bGF0ZWRUeXBlIGdldEpTQ29uc3RhbnRTcGVjdWxhdGlvbihOb2RlJiBu
b2RlKQorICAgIFNwZWN1bGF0ZWRUeXBlIGdldEpTQ29uc3RhbnRTcGVjdWxhdGlvbihOb2RlKiBu
b2RlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIHNwZWN1bGF0aW9uRnJvbVZhbHVlKG5vZGUudmFs
dWVPZkpTQ29uc3RhbnQobV9jb2RlQmxvY2spKTsKKyAgICAgICAgcmV0dXJuIHNwZWN1bGF0aW9u
RnJvbVZhbHVlKG5vZGUtPnZhbHVlT2ZKU0NvbnN0YW50KG1fY29kZUJsb2NrKSk7CiAgICAgfQog
ICAgIAotICAgIEFkZFNwZWN1bGF0aW9uTW9kZSBhZGRTcGVjdWxhdGlvbk1vZGUoTm9kZSYgYWRk
LCBib29sIGxlZnRTaG91bGRTcGVjdWxhdGVJbnRlZ2VyLCBib29sIHJpZ2h0U2hvdWxkU3BlY3Vs
YXRlSW50ZWdlcikKKyAgICBBZGRTcGVjdWxhdGlvbk1vZGUgYWRkU3BlY3VsYXRpb25Nb2RlKE5v
ZGUqIGFkZCwgYm9vbCBsZWZ0U2hvdWxkU3BlY3VsYXRlSW50ZWdlciwgYm9vbCByaWdodFNob3Vs
ZFNwZWN1bGF0ZUludGVnZXIpCiAgICAgewotICAgICAgICBBU1NFUlQoYWRkLm9wKCkgPT0gVmFs
dWVBZGQgfHwgYWRkLm9wKCkgPT0gQXJpdGhBZGQgfHwgYWRkLm9wKCkgPT0gQXJpdGhTdWIpOwor
ICAgICAgICBBU1NFUlQoYWRkLT5vcCgpID09IFZhbHVlQWRkIHx8IGFkZC0+b3AoKSA9PSBBcml0
aEFkZCB8fCBhZGQtPm9wKCkgPT0gQXJpdGhTdWIpOwogICAgICAgICAKLSAgICAgICAgTm9kZSYg
bGVmdCA9IGF0KGFkZC5jaGlsZDEoKSk7Ci0gICAgICAgIE5vZGUmIHJpZ2h0ID0gYXQoYWRkLmNo
aWxkMigpKTsKKyAgICAgICAgTm9kZSogbGVmdCA9IGFkZC0+Y2hpbGQxKCkubm9kZSgpOworICAg
ICAgICBOb2RlKiByaWdodCA9IGFkZC0+Y2hpbGQyKCkubm9kZSgpOwogICAgICAgICAKLSAgICAg
ICAgaWYgKGxlZnQuaGFzQ29uc3RhbnQoKSkKKyAgICAgICAgaWYgKGxlZnQtPmhhc0NvbnN0YW50
KCkpCiAgICAgICAgICAgICByZXR1cm4gYWRkSW1tZWRpYXRlU2hvdWxkU3BlY3VsYXRlSW50ZWdl
cihhZGQsIHJpZ2h0U2hvdWxkU3BlY3VsYXRlSW50ZWdlciwgbGVmdCk7Ci0gICAgICAgIGlmIChy
aWdodC5oYXNDb25zdGFudCgpKQorICAgICAgICBpZiAocmlnaHQtPmhhc0NvbnN0YW50KCkpCiAg
ICAgICAgICAgICByZXR1cm4gYWRkSW1tZWRpYXRlU2hvdWxkU3BlY3VsYXRlSW50ZWdlcihhZGQs
IGxlZnRTaG91bGRTcGVjdWxhdGVJbnRlZ2VyLCByaWdodCk7CiAgICAgICAgIAotICAgICAgICBy
ZXR1cm4gKGxlZnRTaG91bGRTcGVjdWxhdGVJbnRlZ2VyICYmIHJpZ2h0U2hvdWxkU3BlY3VsYXRl
SW50ZWdlciAmJiBhZGQuY2FuU3BlY3VsYXRlSW50ZWdlcigpKSA/IFNwZWN1bGF0ZUludGVnZXIg
OiBEb250U3BlY3VsYXRlSW50ZWdlcjsKKyAgICAgICAgcmV0dXJuIChsZWZ0U2hvdWxkU3BlY3Vs
YXRlSW50ZWdlciAmJiByaWdodFNob3VsZFNwZWN1bGF0ZUludGVnZXIgJiYgYWRkLT5jYW5TcGVj
dWxhdGVJbnRlZ2VyKCkpID8gU3BlY3VsYXRlSW50ZWdlciA6IERvbnRTcGVjdWxhdGVJbnRlZ2Vy
OwogICAgIH0KICAgICAKLSAgICBBZGRTcGVjdWxhdGlvbk1vZGUgdmFsdWVBZGRTcGVjdWxhdGlv
bk1vZGUoTm9kZSYgYWRkKQorICAgIEFkZFNwZWN1bGF0aW9uTW9kZSB2YWx1ZUFkZFNwZWN1bGF0
aW9uTW9kZShOb2RlKiBhZGQpCiAgICAgewotICAgICAgICByZXR1cm4gYWRkU3BlY3VsYXRpb25N
b2RlKGFkZCwgYXQoYWRkLmNoaWxkMSgpKS5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyRXhwZWN0aW5n
RGVmaW5lZCgpLCBhdChhZGQuY2hpbGQyKCkpLnNob3VsZFNwZWN1bGF0ZUludGVnZXJFeHBlY3Rp
bmdEZWZpbmVkKCkpOworICAgICAgICByZXR1cm4gYWRkU3BlY3VsYXRpb25Nb2RlKGFkZCwgYWRk
LT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlSW50ZWdlckV4cGVjdGluZ0RlZmluZWQoKSwgYWRk
LT5jaGlsZDIoKS0+c2hvdWxkU3BlY3VsYXRlSW50ZWdlckV4cGVjdGluZ0RlZmluZWQoKSk7CiAg
ICAgfQogICAgIAotICAgIEFkZFNwZWN1bGF0aW9uTW9kZSBhcml0aEFkZFNwZWN1bGF0aW9uTW9k
ZShOb2RlJiBhZGQpCisgICAgQWRkU3BlY3VsYXRpb25Nb2RlIGFyaXRoQWRkU3BlY3VsYXRpb25N
b2RlKE5vZGUqIGFkZCkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZGRTcGVjdWxhdGlvbk1vZGUo
YWRkLCBhdChhZGQuY2hpbGQxKCkpLnNob3VsZFNwZWN1bGF0ZUludGVnZXJGb3JBcml0aG1ldGlj
KCksIGF0KGFkZC5jaGlsZDIoKSkuc2hvdWxkU3BlY3VsYXRlSW50ZWdlckZvckFyaXRobWV0aWMo
KSk7CisgICAgICAgIHJldHVybiBhZGRTcGVjdWxhdGlvbk1vZGUoYWRkLCBhZGQtPmNoaWxkMSgp
LT5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyRm9yQXJpdGhtZXRpYygpLCBhZGQtPmNoaWxkMigpLT5z
aG91bGRTcGVjdWxhdGVJbnRlZ2VyRm9yQXJpdGhtZXRpYygpKTsKICAgICB9CiAgICAgCi0gICAg
QWRkU3BlY3VsYXRpb25Nb2RlIGFkZFNwZWN1bGF0aW9uTW9kZShOb2RlJiBhZGQpCisgICAgQWRk
U3BlY3VsYXRpb25Nb2RlIGFkZFNwZWN1bGF0aW9uTW9kZShOb2RlKiBhZGQpCiAgICAgewotICAg
ICAgICBpZiAoYWRkLm9wKCkgPT0gVmFsdWVBZGQpCisgICAgICAgIGlmIChhZGQtPm9wKCkgPT0g
VmFsdWVBZGQpCiAgICAgICAgICAgICByZXR1cm4gdmFsdWVBZGRTcGVjdWxhdGlvbk1vZGUoYWRk
KTsKICAgICAgICAgCiAgICAgICAgIHJldHVybiBhcml0aEFkZFNwZWN1bGF0aW9uTW9kZShhZGQp
OwogICAgIH0KICAgICAKLSAgICBib29sIGFkZFNob3VsZFNwZWN1bGF0ZUludGVnZXIoTm9kZSYg
YWRkKQorICAgIGJvb2wgYWRkU2hvdWxkU3BlY3VsYXRlSW50ZWdlcihOb2RlKiBhZGQpCiAgICAg
ewogICAgICAgICByZXR1cm4gYWRkU3BlY3VsYXRpb25Nb2RlKGFkZCkgIT0gRG9udFNwZWN1bGF0
ZUludGVnZXI7CiAgICAgfQogICAgIAotICAgIGJvb2wgbXVsU2hvdWxkU3BlY3VsYXRlSW50ZWdl
cihOb2RlJiBtdWwpCisgICAgYm9vbCBtdWxTaG91bGRTcGVjdWxhdGVJbnRlZ2VyKE5vZGUqIG11
bCkKICAgICB7Ci0gICAgICAgIEFTU0VSVChtdWwub3AoKSA9PSBBcml0aE11bCk7CisgICAgICAg
IEFTU0VSVChtdWwtPm9wKCkgPT0gQXJpdGhNdWwpOwogICAgICAgICAKLSAgICAgICAgTm9kZSYg
bGVmdCA9IGF0KG11bC5jaGlsZDEoKSk7Ci0gICAgICAgIE5vZGUmIHJpZ2h0ID0gYXQobXVsLmNo
aWxkMigpKTsKKyAgICAgICAgTm9kZSogbGVmdCA9IG11bC0+Y2hpbGQxKCkubm9kZSgpOworICAg
ICAgICBOb2RlKiByaWdodCA9IG11bC0+Y2hpbGQyKCkubm9kZSgpOwogICAgICAgICAKICAgICAg
ICAgcmV0dXJuIE5vZGU6OnNob3VsZFNwZWN1bGF0ZUludGVnZXJGb3JBcml0aG1ldGljKGxlZnQs
IHJpZ2h0KSAmJiBtdWwuY2FuU3BlY3VsYXRlSW50ZWdlcigpOwogICAgIH0KICAgICAKLSAgICBi
b29sIG5lZ2F0ZVNob3VsZFNwZWN1bGF0ZUludGVnZXIoTm9kZSYgbmVnYXRlKQorICAgIGJvb2wg
bmVnYXRlU2hvdWxkU3BlY3VsYXRlSW50ZWdlcihOb2RlKiBuZWdhdGUpCiAgICAgewotICAgICAg
ICBBU1NFUlQobmVnYXRlLm9wKCkgPT0gQXJpdGhOZWdhdGUpOwotICAgICAgICByZXR1cm4gYXQo
bmVnYXRlLmNoaWxkMSgpKS5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyRm9yQXJpdGhtZXRpYygpICYm
IG5lZ2F0ZS5jYW5TcGVjdWxhdGVJbnRlZ2VyKCk7CisgICAgICAgIEFTU0VSVChuZWdhdGUtPm9w
KCkgPT0gQXJpdGhOZWdhdGUpOworICAgICAgICByZXR1cm4gbmVnYXRlLT5jaGlsZDEoKS0+c2hv
dWxkU3BlY3VsYXRlSW50ZWdlckZvckFyaXRobWV0aWMoKSAmJiBuZWdhdGUtPmNhblNwZWN1bGF0
ZUludGVnZXIoKTsKICAgICB9CiAgICAgCi0gICAgYm9vbCBhZGRTaG91bGRTcGVjdWxhdGVJbnRl
Z2VyKE5vZGVJbmRleCBub2RlSW5kZXgpCisgICAgYm9vbCBhZGRTaG91bGRTcGVjdWxhdGVJbnRl
Z2VyKE5vZGUqIG5vZGUpCiAgICAgewotICAgICAgICByZXR1cm4gYWRkU2hvdWxkU3BlY3VsYXRl
SW50ZWdlcihhdChub2RlSW5kZXgpKTsKKyAgICAgICAgcmV0dXJuIGFkZFNob3VsZFNwZWN1bGF0
ZUludGVnZXIobm9kZSk7CiAgICAgfQogICAgIAogICAgIC8vIEhlbHBlciBtZXRob2RzIHRvIGNo
ZWNrIG5vZGVzIGZvciBjb25zdGFudHMuCi0gICAgYm9vbCBpc0NvbnN0YW50KE5vZGVJbmRleCBu
b2RlSW5kZXgpCisgICAgYm9vbCBpc0NvbnN0YW50KE5vZGUqIG5vZGUpCiAgICAgewotICAgICAg
ICByZXR1cm4gYXQobm9kZUluZGV4KS5oYXNDb25zdGFudCgpOworICAgICAgICByZXR1cm4gbm9k
ZS0+aGFzQ29uc3RhbnQoKTsKICAgICB9Ci0gICAgYm9vbCBpc0pTQ29uc3RhbnQoTm9kZUluZGV4
IG5vZGVJbmRleCkKKyAgICBib29sIGlzSlNDb25zdGFudChOb2RlKiBub2RlKQogICAgIHsKLSAg
ICAgICAgcmV0dXJuIGF0KG5vZGVJbmRleCkuaGFzQ29uc3RhbnQoKTsKKyAgICAgICAgcmV0dXJu
IG5vZGUtPmhhc0NvbnN0YW50KCk7CiAgICAgfQotICAgIGJvb2wgaXNJbnQzMkNvbnN0YW50KE5v
ZGVJbmRleCBub2RlSW5kZXgpCisgICAgYm9vbCBpc0ludDMyQ29uc3RhbnQoTm9kZSogbm9kZSkK
ICAgICB7Ci0gICAgICAgIHJldHVybiBhdChub2RlSW5kZXgpLmlzSW50MzJDb25zdGFudChtX2Nv
ZGVCbG9jayk7CisgICAgICAgIHJldHVybiBub2RlLT5pc0ludDMyQ29uc3RhbnQobV9jb2RlQmxv
Y2spOwogICAgIH0KLSAgICBib29sIGlzRG91YmxlQ29uc3RhbnQoTm9kZUluZGV4IG5vZGVJbmRl
eCkKKyAgICBib29sIGlzRG91YmxlQ29uc3RhbnQoTm9kZSogbm9kZSkKICAgICB7Ci0gICAgICAg
IHJldHVybiBhdChub2RlSW5kZXgpLmlzRG91YmxlQ29uc3RhbnQobV9jb2RlQmxvY2spOworICAg
ICAgICByZXR1cm4gbm9kZS0+aXNEb3VibGVDb25zdGFudChtX2NvZGVCbG9jayk7CiAgICAgfQot
ICAgIGJvb2wgaXNOdW1iZXJDb25zdGFudChOb2RlSW5kZXggbm9kZUluZGV4KQorICAgIGJvb2wg
aXNOdW1iZXJDb25zdGFudChOb2RlKiBub2RlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGF0KG5v
ZGVJbmRleCkuaXNOdW1iZXJDb25zdGFudChtX2NvZGVCbG9jayk7CisgICAgICAgIHJldHVybiBu
b2RlLT5pc051bWJlckNvbnN0YW50KG1fY29kZUJsb2NrKTsKICAgICB9Ci0gICAgYm9vbCBpc0Jv
b2xlYW5Db25zdGFudChOb2RlSW5kZXggbm9kZUluZGV4KQorICAgIGJvb2wgaXNCb29sZWFuQ29u
c3RhbnQoTm9kZSogbm9kZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBhdChub2RlSW5kZXgpLmlz
Qm9vbGVhbkNvbnN0YW50KG1fY29kZUJsb2NrKTsKKyAgICAgICAgcmV0dXJuIG5vZGUtPmlzQm9v
bGVhbkNvbnN0YW50KG1fY29kZUJsb2NrKTsKICAgICB9Ci0gICAgYm9vbCBpc0NlbGxDb25zdGFu
dChOb2RlSW5kZXggbm9kZUluZGV4KQorICAgIGJvb2wgaXNDZWxsQ29uc3RhbnQoTm9kZSogbm9k
ZSkKICAgICB7Ci0gICAgICAgIGlmICghaXNKU0NvbnN0YW50KG5vZGVJbmRleCkpCisgICAgICAg
IGlmICghaXNKU0NvbnN0YW50KG5vZGUpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgICBKU1ZhbHVlIHZhbHVlID0gdmFsdWVPZkpTQ29uc3RhbnQobm9kZUluZGV4KTsKKyAgICAg
ICAgSlNWYWx1ZSB2YWx1ZSA9IHZhbHVlT2ZKU0NvbnN0YW50KG5vZGUpOwogICAgICAgICByZXR1
cm4gdmFsdWUuaXNDZWxsKCkgJiYgISF2YWx1ZTsKICAgICB9Ci0gICAgYm9vbCBpc0Z1bmN0aW9u
Q29uc3RhbnQoTm9kZUluZGV4IG5vZGVJbmRleCkKKyAgICBib29sIGlzRnVuY3Rpb25Db25zdGFu
dChOb2RlKiBub2RlKQogICAgIHsKLSAgICAgICAgaWYgKCFpc0pTQ29uc3RhbnQobm9kZUluZGV4
KSkKKyAgICAgICAgaWYgKCFpc0pTQ29uc3RhbnQobm9kZSkpCiAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgIGlmICghZ2V0SlNGdW5jdGlvbih2YWx1ZU9mSlNDb25zdGFudChub2Rl
SW5kZXgpKSkKKyAgICAgICAgaWYgKCFnZXRKU0Z1bmN0aW9uKHZhbHVlT2ZKU0NvbnN0YW50KG5v
ZGUpKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgfQotICAgIGJvb2wgaXNJbnRlcm5hbEZ1bmN0aW9uQ29uc3RhbnQoTm9kZUluZGV4IG5vZGVJ
bmRleCkKKyAgICBib29sIGlzSW50ZXJuYWxGdW5jdGlvbkNvbnN0YW50KE5vZGUqIG5vZGUpCiAg
ICAgewotICAgICAgICBpZiAoIWlzSlNDb25zdGFudChub2RlSW5kZXgpKQorICAgICAgICBpZiAo
IWlzSlNDb25zdGFudChub2RlKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAg
SlNWYWx1ZSB2YWx1ZSA9IHZhbHVlT2ZKU0NvbnN0YW50KG5vZGVJbmRleCk7CisgICAgICAgIEpT
VmFsdWUgdmFsdWUgPSB2YWx1ZU9mSlNDb25zdGFudChub2RlKTsKICAgICAgICAgaWYgKCF2YWx1
ZS5pc0NlbGwoKSB8fCAhdmFsdWUpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAg
IEpTQ2VsbCogY2VsbCA9IHZhbHVlLmFzQ2VsbCgpOwpAQCAtMzQ2LDI1ICszMjcsMjUgQEAgcHVi
bGljOgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgLy8gSGVscGVyIG1ldGhvZHMg
Z2V0IGNvbnN0YW50IHZhbHVlcyBmcm9tIG5vZGVzLgotICAgIEpTVmFsdWUgdmFsdWVPZkpTQ29u
c3RhbnQoTm9kZUluZGV4IG5vZGVJbmRleCkKKyAgICBKU1ZhbHVlIHZhbHVlT2ZKU0NvbnN0YW50
KE5vZGUqIG5vZGUpCiAgICAgewotICAgICAgICByZXR1cm4gYXQobm9kZUluZGV4KS52YWx1ZU9m
SlNDb25zdGFudChtX2NvZGVCbG9jayk7CisgICAgICAgIHJldHVybiBub2RlLT52YWx1ZU9mSlND
b25zdGFudChtX2NvZGVCbG9jayk7CiAgICAgfQotICAgIGludDMyX3QgdmFsdWVPZkludDMyQ29u
c3RhbnQoTm9kZUluZGV4IG5vZGVJbmRleCkKKyAgICBpbnQzMl90IHZhbHVlT2ZJbnQzMkNvbnN0
YW50KE5vZGUqIG5vZGUpCiAgICAgewotICAgICAgICByZXR1cm4gdmFsdWVPZkpTQ29uc3RhbnQo
bm9kZUluZGV4KS5hc0ludDMyKCk7CisgICAgICAgIHJldHVybiB2YWx1ZU9mSlNDb25zdGFudChu
b2RlKS5hc0ludDMyKCk7CiAgICAgfQotICAgIGRvdWJsZSB2YWx1ZU9mTnVtYmVyQ29uc3RhbnQo
Tm9kZUluZGV4IG5vZGVJbmRleCkKKyAgICBkb3VibGUgdmFsdWVPZk51bWJlckNvbnN0YW50KE5v
ZGUqIG5vZGUpCiAgICAgewotICAgICAgICByZXR1cm4gdmFsdWVPZkpTQ29uc3RhbnQobm9kZUlu
ZGV4KS5hc051bWJlcigpOworICAgICAgICByZXR1cm4gdmFsdWVPZkpTQ29uc3RhbnQobm9kZSku
YXNOdW1iZXIoKTsKICAgICB9Ci0gICAgYm9vbCB2YWx1ZU9mQm9vbGVhbkNvbnN0YW50KE5vZGVJ
bmRleCBub2RlSW5kZXgpCisgICAgYm9vbCB2YWx1ZU9mQm9vbGVhbkNvbnN0YW50KE5vZGUqIG5v
ZGUpCiAgICAgewotICAgICAgICByZXR1cm4gdmFsdWVPZkpTQ29uc3RhbnQobm9kZUluZGV4KS5h
c0Jvb2xlYW4oKTsKKyAgICAgICAgcmV0dXJuIHZhbHVlT2ZKU0NvbnN0YW50KG5vZGUpLmFzQm9v
bGVhbigpOwogICAgIH0KLSAgICBKU0Z1bmN0aW9uKiB2YWx1ZU9mRnVuY3Rpb25Db25zdGFudChO
b2RlSW5kZXggbm9kZUluZGV4KQorICAgIEpTRnVuY3Rpb24qIHZhbHVlT2ZGdW5jdGlvbkNvbnN0
YW50KE5vZGUqIG5vZGUpCiAgICAgewotICAgICAgICBKU0NlbGwqIGZ1bmN0aW9uID0gZ2V0SlNG
dW5jdGlvbih2YWx1ZU9mSlNDb25zdGFudChub2RlSW5kZXgpKTsKKyAgICAgICAgSlNDZWxsKiBm
dW5jdGlvbiA9IGdldEpTRnVuY3Rpb24odmFsdWVPZkpTQ29uc3RhbnQobm9kZSkpOwogICAgICAg
ICBBU1NFUlQoZnVuY3Rpb24pOwogICAgICAgICByZXR1cm4ganNDYXN0PEpTRnVuY3Rpb24qPihm
dW5jdGlvbik7CiAgICAgfQpAQCAtNDM5LDQ1ICs0MjAsNDMgQEAgcHVibGljOgogICAgICAgICBy
ZXR1cm4gbV9jb2RlQmxvY2stPnVuY2hlY2tlZEFjdGl2YXRpb25SZWdpc3RlcigpOwogICAgIH0K
ICAgICAKLSAgICBWYWx1ZVByb2ZpbGUqIHZhbHVlUHJvZmlsZUZvcihOb2RlSW5kZXggbm9kZUlu
ZGV4KQorICAgIFZhbHVlUHJvZmlsZSogdmFsdWVQcm9maWxlRm9yKE5vZGUqIG5vZGUpCiAgICAg
ewotICAgICAgICBpZiAobm9kZUluZGV4ID09IE5vTm9kZSkKKyAgICAgICAgaWYgKCFub2RlKQog
ICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIAotICAgICAgICBOb2RlJiBub2RlID0gYXQo
bm9kZUluZGV4KTsKLSAgICAgICAgQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrID0gYmFzZWxpbmVD
b2RlQmxvY2tGb3Iobm9kZS5jb2RlT3JpZ2luKTsKKyAgICAgICAgQ29kZUJsb2NrKiBwcm9maWxl
ZEJsb2NrID0gYmFzZWxpbmVDb2RlQmxvY2tGb3Iobm9kZS0+Y29kZU9yaWdpbik7CiAgICAgICAg
IAotICAgICAgICBpZiAobm9kZS5oYXNMb2NhbCgpKSB7Ci0gICAgICAgICAgICBpZiAoIW9wZXJh
bmRJc0FyZ3VtZW50KG5vZGUubG9jYWwoKSkpCisgICAgICAgIGlmIChub2RlLT5oYXNMb2NhbCgp
KSB7CisgICAgICAgICAgICBpZiAoIW9wZXJhbmRJc0FyZ3VtZW50KG5vZGUtPmxvY2FsKCkpKQog
ICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgaW50IGFyZ3VtZW50ID0gb3Bl
cmFuZFRvQXJndW1lbnQobm9kZS5sb2NhbCgpKTsKLSAgICAgICAgICAgIGlmIChub2RlLnZhcmlh
YmxlQWNjZXNzRGF0YSgpICE9IGF0KG1fYXJndW1lbnRzW2FyZ3VtZW50XSkudmFyaWFibGVBY2Nl
c3NEYXRhKCkpCisgICAgICAgICAgICBpbnQgYXJndW1lbnQgPSBvcGVyYW5kVG9Bcmd1bWVudChu
b2RlLT5sb2NhbCgpKTsKKyAgICAgICAgICAgIGlmIChub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEo
KSAhPSBtX2FyZ3VtZW50c1thcmd1bWVudF0tPnZhcmlhYmxlQWNjZXNzRGF0YSgpKQogICAgICAg
ICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAgcmV0dXJuIHByb2ZpbGVkQmxvY2stPnZh
bHVlUHJvZmlsZUZvckFyZ3VtZW50KGFyZ3VtZW50KTsKICAgICAgICAgfQogICAgICAgICAKLSAg
ICAgICAgaWYgKG5vZGUuaGFzSGVhcFByZWRpY3Rpb24oKSkKLSAgICAgICAgICAgIHJldHVybiBw
cm9maWxlZEJsb2NrLT52YWx1ZVByb2ZpbGVGb3JCeXRlY29kZU9mZnNldChub2RlLmNvZGVPcmln
aW4uYnl0ZWNvZGVJbmRleEZvclZhbHVlUHJvZmlsZSgpKTsKKyAgICAgICAgaWYgKG5vZGUtPmhh
c0hlYXBQcmVkaWN0aW9uKCkpCisgICAgICAgICAgICByZXR1cm4gcHJvZmlsZWRCbG9jay0+dmFs
dWVQcm9maWxlRm9yQnl0ZWNvZGVPZmZzZXQobm9kZS0+Y29kZU9yaWdpbi5ieXRlY29kZUluZGV4
Rm9yVmFsdWVQcm9maWxlKCkpOwogICAgICAgICAKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQog
ICAgIAotICAgIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUgbWV0aG9kT2ZHZXR0aW5nQVZh
bHVlUHJvZmlsZUZvcihOb2RlSW5kZXggbm9kZUluZGV4KQorICAgIE1ldGhvZE9mR2V0dGluZ0FW
YWx1ZVByb2ZpbGUgbWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZUZvcihOb2RlKiBub2RlKQog
ICAgIHsKLSAgICAgICAgaWYgKG5vZGVJbmRleCA9PSBOb05vZGUpCisgICAgICAgIGlmICghbm9k
ZSkKICAgICAgICAgICAgIHJldHVybiBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlKCk7CiAg
ICAgICAgIAotICAgICAgICBOb2RlJiBub2RlID0gYXQobm9kZUluZGV4KTsKLSAgICAgICAgQ29k
ZUJsb2NrKiBwcm9maWxlZEJsb2NrID0gYmFzZWxpbmVDb2RlQmxvY2tGb3Iobm9kZS5jb2RlT3Jp
Z2luKTsKKyAgICAgICAgQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrID0gYmFzZWxpbmVDb2RlQmxv
Y2tGb3Iobm9kZS0+Y29kZU9yaWdpbik7CiAgICAgICAgIAotICAgICAgICBpZiAobm9kZS5vcCgp
ID09IEdldExvY2FsKSB7CisgICAgICAgIGlmIChub2RlLT5vcCgpID09IEdldExvY2FsKSB7CiAg
ICAgICAgICAgICByZXR1cm4gTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZTo6ZnJvbUxhenlP
cGVyYW5kKAogICAgICAgICAgICAgICAgIHByb2ZpbGVkQmxvY2ssCiAgICAgICAgICAgICAgICAg
TGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVLZXkoCi0gICAgICAgICAgICAgICAgICAgIG5vZGUuY29k
ZU9yaWdpbi5ieXRlY29kZUluZGV4LCBub2RlLmxvY2FsKCkpKTsKKyAgICAgICAgICAgICAgICAg
ICAgbm9kZS0+Y29kZU9yaWdpbi5ieXRlY29kZUluZGV4LCBub2RlLT5sb2NhbCgpKSk7CiAgICAg
ICAgIH0KICAgICAgICAgCi0gICAgICAgIHJldHVybiBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9m
aWxlKHZhbHVlUHJvZmlsZUZvcihub2RlSW5kZXgpKTsKKyAgICAgICAgcmV0dXJuIE1ldGhvZE9m
R2V0dGluZ0FWYWx1ZVByb2ZpbGUodmFsdWVQcm9maWxlRm9yKG5vZGUpKTsKICAgICB9CiAgICAg
CiAgICAgYm9vbCBuZWVkc0FjdGl2YXRpb24oKSBjb25zdApAQCAtNTAxLDIxICs0ODAsMjEgQEAg
cHVibGljOgogICAgIAogICAgIHVuc2lnbmVkIG51bVN1Y2Nlc3NvcnMoQmFzaWNCbG9jayogYmxv
Y2spCiAgICAgewotICAgICAgICByZXR1cm4gYXQoYmxvY2stPmxhc3QoKSkubnVtU3VjY2Vzc29y
cygpOworICAgICAgICByZXR1cm4gYmxvY2stPmxhc3QoKS0+bnVtU3VjY2Vzc29ycygpOwogICAg
IH0KICAgICBCbG9ja0luZGV4IHN1Y2Nlc3NvcihCYXNpY0Jsb2NrKiBibG9jaywgdW5zaWduZWQg
aW5kZXgpCiAgICAgewotICAgICAgICByZXR1cm4gYXQoYmxvY2stPmxhc3QoKSkuc3VjY2Vzc29y
KGluZGV4KTsKKyAgICAgICAgcmV0dXJuIGJsb2NrLT5sYXN0KCktPnN1Y2Nlc3NvcihpbmRleCk7
CiAgICAgfQogICAgIEJsb2NrSW5kZXggc3VjY2Vzc29yRm9yQ29uZGl0aW9uKEJhc2ljQmxvY2sq
IGJsb2NrLCBib29sIGNvbmRpdGlvbikKICAgICB7Ci0gICAgICAgIHJldHVybiBhdChibG9jay0+
bGFzdCgpKS5zdWNjZXNzb3JGb3JDb25kaXRpb24oY29uZGl0aW9uKTsKKyAgICAgICAgcmV0dXJu
IGJsb2NrLT5sYXN0KCktPnN1Y2Nlc3NvckZvckNvbmRpdGlvbihjb25kaXRpb24pOwogICAgIH0K
ICAgICAKLSAgICBib29sIGlzUHJlZGljdGVkTnVtZXJpY2FsKE5vZGUmIG5vZGUpCisgICAgYm9v
bCBpc1ByZWRpY3RlZE51bWVyaWNhbChOb2RlKiBub2RlKQogICAgIHsKLSAgICAgICAgU3BlY3Vs
YXRlZFR5cGUgbGVmdCA9IGF0KG5vZGUuY2hpbGQxKCkpLnByZWRpY3Rpb24oKTsKLSAgICAgICAg
U3BlY3VsYXRlZFR5cGUgcmlnaHQgPSBhdChub2RlLmNoaWxkMigpKS5wcmVkaWN0aW9uKCk7Cisg
ICAgICAgIFNwZWN1bGF0ZWRUeXBlIGxlZnQgPSBub2RlLT5jaGlsZDEoKS0+cHJlZGljdGlvbigp
OworICAgICAgICBTcGVjdWxhdGVkVHlwZSByaWdodCA9IG5vZGUtPmNoaWxkMigpLT5wcmVkaWN0
aW9uKCk7CiAgICAgICAgIHJldHVybiBpc051bWJlclNwZWN1bGF0aW9uKGxlZnQpICYmIGlzTnVt
YmVyU3BlY3VsYXRpb24ocmlnaHQpOwogICAgIH0KICAgICAKQEAgLTUyNSwyMyArNTA0LDIzIEBA
IHB1YmxpYzoKICAgICAvLyAtIFB1dEJ5VmFsIGRlZmluaXRlbHkgY2hhbmdlcyB0aGUgYXJyYXkg
aXQgc3RvcmVzIHRvLCBhbmQgbWF5IGV2ZW4gY2hhbmdlIGl0cyBsZW5ndGguCiAgICAgLy8gLSBQ
dXRCeU9mZnNldCBkZWZpbml0ZWx5IGNoYW5nZXMgdGhlIG9iamVjdCBpdCBzdG9yZXMgdG8uCiAg
ICAgLy8gLSBhbmQgc28gb24uCi0gICAgYm9vbCBieVZhbElzUHVyZShOb2RlJiBub2RlKQorICAg
IGJvb2wgYnlWYWxJc1B1cmUoTm9kZSogbm9kZSkKICAgICB7Ci0gICAgICAgIHN3aXRjaCAobm9k
ZS5hcnJheU1vZGUoKS50eXBlKCkpIHsKKyAgICAgICAgc3dpdGNoIChub2RlLT5hcnJheU1vZGUo
KS50eXBlKCkpIHsKICAgICAgICAgY2FzZSBBcnJheTo6R2VuZXJpYzoKICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICAgICAgY2FzZSBBcnJheTo6SW50MzI6CiAgICAgICAgIGNhc2UgQXJy
YXk6OkRvdWJsZToKICAgICAgICAgY2FzZSBBcnJheTo6Q29udGlndW91czoKICAgICAgICAgY2Fz
ZSBBcnJheTo6QXJyYXlTdG9yYWdlOgotICAgICAgICAgICAgcmV0dXJuICFub2RlLmFycmF5TW9k
ZSgpLmlzT3V0T2ZCb3VuZHMoKTsKKyAgICAgICAgICAgIHJldHVybiAhbm9kZS0+YXJyYXlNb2Rl
KCkuaXNPdXRPZkJvdW5kcygpOwogICAgICAgICBjYXNlIEFycmF5OjpTbG93UHV0QXJyYXlTdG9y
YWdlOgotICAgICAgICAgICAgcmV0dXJuICFub2RlLmFycmF5TW9kZSgpLm1heVN0b3JlVG9Ib2xl
KCk7CisgICAgICAgICAgICByZXR1cm4gIW5vZGUtPmFycmF5TW9kZSgpLm1heVN0b3JlVG9Ib2xl
KCk7CiAgICAgICAgIGNhc2UgQXJyYXk6OlN0cmluZzoKLSAgICAgICAgICAgIHJldHVybiBub2Rl
Lm9wKCkgPT0gR2V0QnlWYWw7CisgICAgICAgICAgICByZXR1cm4gbm9kZS0+b3AoKSA9PSBHZXRC
eVZhbDsKICNpZiBVU0UoSlNWQUxVRTMyXzY0KQogICAgICAgICBjYXNlIEFycmF5OjpBcmd1bWVu
dHM6Ci0gICAgICAgICAgICBpZiAobm9kZS5vcCgpID09IEdldEJ5VmFsKQorICAgICAgICAgICAg
aWYgKG5vZGUtPm9wKCkgPT0gR2V0QnlWYWwpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAjZW5kaWYgLy8gVVNFKEpTVkFMVUUzMl82NCkK
QEAgLTU1MCwxMyArNTI5LDEzIEBAIHB1YmxpYzoKICAgICAgICAgfQogICAgIH0KICAgICAKLSAg
ICBib29sIGNsb2JiZXJzV29ybGQoTm9kZSYgbm9kZSkKKyAgICBib29sIGNsb2JiZXJzV29ybGQo
Tm9kZSogbm9kZSkKICAgICB7Ci0gICAgICAgIGlmIChub2RlLmZsYWdzKCkgJiBOb2RlQ2xvYmJl
cnNXb3JsZCkKKyAgICAgICAgaWYgKG5vZGUtPmZsYWdzKCkgJiBOb2RlQ2xvYmJlcnNXb3JsZCkK
ICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBpZiAoIShub2RlLmZsYWdzKCkgJiBO
b2RlTWlnaHRDbG9iYmVyKSkKKyAgICAgICAgaWYgKCEobm9kZS0+ZmxhZ3MoKSAmIE5vZGVNaWdo
dENsb2JiZXIpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBzd2l0Y2ggKG5v
ZGUub3AoKSkgeworICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKICAgICAgICAgY2FzZSBW
YWx1ZUFkZDoKICAgICAgICAgY2FzZSBDb21wYXJlTGVzczoKICAgICAgICAgY2FzZSBDb21wYXJl
TGVzc0VxOgpAQCAtNTc0LDkgKzU1Myw5IEBAIHB1YmxpYzoKICAgICAgICAgfQogICAgIH0KICAg
ICAKLSAgICBib29sIGNsb2JiZXJzV29ybGQoTm9kZUluZGV4IG5vZGVJbmRleCkKKyAgICBib29s
IGNsb2JiZXJzV29ybGQoTm9kZSogbm9kZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBjbG9iYmVy
c1dvcmxkKGF0KG5vZGVJbmRleCkpOworICAgICAgICByZXR1cm4gY2xvYmJlcnNXb3JsZChub2Rl
KTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBkZXRlcm1pbmVSZWFjaGFiaWxpdHkoKTsKQEAgLTU4
NCw1MiArNTYzLDU3IEBAIHB1YmxpYzoKICAgICAKICAgICB2b2lkIHJlc2V0RXhpdFN0YXRlcygp
OwogICAgIAotICAgIHVuc2lnbmVkIHZhckFyZ051bUNoaWxkcmVuKE5vZGUmIG5vZGUpCisgICAg
dW5zaWduZWQgdmFyQXJnTnVtQ2hpbGRyZW4oTm9kZSogbm9kZSkKICAgICB7Ci0gICAgICAgIEFT
U0VSVChub2RlLmZsYWdzKCkgJiBOb2RlSGFzVmFyQXJncyk7Ci0gICAgICAgIHJldHVybiBub2Rl
Lm51bUNoaWxkcmVuKCk7CisgICAgICAgIEFTU0VSVChub2RlLT5mbGFncygpICYgTm9kZUhhc1Zh
ckFyZ3MpOworICAgICAgICByZXR1cm4gbm9kZS0+bnVtQ2hpbGRyZW4oKTsKICAgICB9CiAgICAg
Ci0gICAgdW5zaWduZWQgbnVtQ2hpbGRyZW4oTm9kZSYgbm9kZSkKKyAgICB1bnNpZ25lZCBudW1D
aGlsZHJlbihOb2RlKiBub2RlKQogICAgIHsKLSAgICAgICAgaWYgKG5vZGUuZmxhZ3MoKSAmIE5v
ZGVIYXNWYXJBcmdzKQorICAgICAgICBpZiAobm9kZS0+ZmxhZ3MoKSAmIE5vZGVIYXNWYXJBcmdz
KQogICAgICAgICAgICAgcmV0dXJuIHZhckFyZ051bUNoaWxkcmVuKG5vZGUpOwogICAgICAgICBy
ZXR1cm4gQWRqYWNlbmN5TGlzdDo6U2l6ZTsKICAgICB9CiAgICAgCi0gICAgRWRnZSYgdmFyQXJn
Q2hpbGQoTm9kZSYgbm9kZSwgdW5zaWduZWQgaW5kZXgpCisgICAgRWRnZSYgdmFyQXJnQ2hpbGQo
Tm9kZSogbm9kZSwgdW5zaWduZWQgaW5kZXgpCiAgICAgewotICAgICAgICBBU1NFUlQobm9kZS5m
bGFncygpICYgTm9kZUhhc1ZhckFyZ3MpOwotICAgICAgICByZXR1cm4gbV92YXJBcmdDaGlsZHJl
bltub2RlLmZpcnN0Q2hpbGQoKSArIGluZGV4XTsKKyAgICAgICAgQVNTRVJUKG5vZGUtPmZsYWdz
KCkgJiBOb2RlSGFzVmFyQXJncyk7CisgICAgICAgIHJldHVybiBtX3ZhckFyZ0NoaWxkcmVuW25v
ZGUtPmZpcnN0Q2hpbGQoKSArIGluZGV4XTsKICAgICB9CiAgICAgCi0gICAgRWRnZSYgY2hpbGQo
Tm9kZSYgbm9kZSwgdW5zaWduZWQgaW5kZXgpCisgICAgRWRnZSYgY2hpbGQoTm9kZSogbm9kZSwg
dW5zaWduZWQgaW5kZXgpCiAgICAgewotICAgICAgICBpZiAobm9kZS5mbGFncygpICYgTm9kZUhh
c1ZhckFyZ3MpCisgICAgICAgIGlmIChub2RlLT5mbGFncygpICYgTm9kZUhhc1ZhckFyZ3MpCiAg
ICAgICAgICAgICByZXR1cm4gdmFyQXJnQ2hpbGQobm9kZSwgaW5kZXgpOwotICAgICAgICByZXR1
cm4gbm9kZS5jaGlsZHJlbi5jaGlsZChpbmRleCk7CisgICAgICAgIHJldHVybiBub2RlLT5jaGls
ZHJlbi5jaGlsZChpbmRleCk7CiAgICAgfQogICAgIAotICAgIHZvaWQgdm90ZShFZGdlIGVkZ2Us
IHVuc2lnbmVkIGJhbGxvdCkKKyAgICB2b2lkIHZvdGVOb2RlKE5vZGUqIG5vZGUsIHVuc2lnbmVk
IGJhbGxvdCkKICAgICB7Ci0gICAgICAgIHN3aXRjaCAoYXQoZWRnZSkub3AoKSkgeworICAgICAg
ICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKICAgICAgICAgY2FzZSBWYWx1ZVRvSW50MzI6CiAgICAg
ICAgIGNhc2UgVUludDMyVG9OdW1iZXI6Ci0gICAgICAgICAgICBlZGdlID0gYXQoZWRnZSkuY2hp
bGQxKCk7CisgICAgICAgICAgICBub2RlID0gbm9kZS0+Y2hpbGQxKCkubm9kZSgpOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgfQogICAgICAgICAKLSAgICAgICAgaWYgKGF0KGVkZ2UpLm9wKCkgPT0gR2V0TG9jYWwpCi0g
ICAgICAgICAgICBhdChlZGdlKS52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+dm90ZShiYWxsb3QpOwor
ICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBHZXRMb2NhbCkKKyAgICAgICAgICAgIG5vZGUtPnZh
cmlhYmxlQWNjZXNzRGF0YSgpLT52b3RlKGJhbGxvdCk7CisgICAgfQorICAgIAorICAgIHZvaWQg
dm90ZU5vZGUoRWRnZSBlZGdlLCB1bnNpZ25lZCBiYWxsb3QpCisgICAgeworICAgICAgICB2b3Rl
Tm9kZShlZGdlLm5vZGUoKSwgYmFsbG90KTsKICAgICB9CiAgICAgCi0gICAgdm9pZCB2b3RlKE5v
ZGUmIG5vZGUsIHVuc2lnbmVkIGJhbGxvdCkKKyAgICB2b2lkIHZvdGVDaGlsZHJlbihOb2RlKiBu
b2RlLCB1bnNpZ25lZCBiYWxsb3QpCiAgICAgewotICAgICAgICBpZiAobm9kZS5mbGFncygpICYg
Tm9kZUhhc1ZhckFyZ3MpIHsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgY2hpbGRJZHggPSBu
b2RlLmZpcnN0Q2hpbGQoKTsKLSAgICAgICAgICAgICAgICAgY2hpbGRJZHggPCBub2RlLmZpcnN0
Q2hpbGQoKSArIG5vZGUubnVtQ2hpbGRyZW4oKTsKKyAgICAgICAgaWYgKG5vZGUtPmZsYWdzKCkg
JiBOb2RlSGFzVmFyQXJncykgeworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBjaGlsZElkeCA9
IG5vZGUtPmZpcnN0Q2hpbGQoKTsKKyAgICAgICAgICAgICAgICAgY2hpbGRJZHggPCBub2RlLT5m
aXJzdENoaWxkKCkgKyBub2RlLT5udW1DaGlsZHJlbigpOwogICAgICAgICAgICAgICAgICBjaGls
ZElkeCsrKSB7CiAgICAgICAgICAgICAgICAgaWYgKCEhbV92YXJBcmdDaGlsZHJlbltjaGlsZElk
eF0pCiAgICAgICAgICAgICAgICAgICAgIHZvdGUobV92YXJBcmdDaGlsZHJlbltjaGlsZElkeF0s
IGJhbGxvdCk7CkBAIC02MzcsMzkgKzYyMSwzOCBAQCBwdWJsaWM6CiAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIGlmICghbm9kZS5jaGlsZDEoKSkKKyAg
ICAgICAgaWYgKCFub2RlLT5jaGlsZDEoKSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
dm90ZShub2RlLmNoaWxkMSgpLCBiYWxsb3QpOwotICAgICAgICBpZiAoIW5vZGUuY2hpbGQyKCkp
CisgICAgICAgIHZvdGUobm9kZS0+Y2hpbGQxKCksIGJhbGxvdCk7CisgICAgICAgIGlmICghbm9k
ZS0+Y2hpbGQyKCkpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIHZvdGUobm9kZS5jaGls
ZDIoKSwgYmFsbG90KTsKLSAgICAgICAgaWYgKCFub2RlLmNoaWxkMygpKQorICAgICAgICB2b3Rl
KG5vZGUtPmNoaWxkMigpLCBiYWxsb3QpOworICAgICAgICBpZiAoIW5vZGUtPmNoaWxkMygpKQog
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB2b3RlKG5vZGUuY2hpbGQzKCksIGJhbGxvdCk7
CisgICAgICAgIHZvdGUobm9kZS0+Y2hpbGQzKCksIGJhbGxvdCk7CiAgICAgfQogICAgIAotICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFQ+IC8vIFQgPSBOb2RlSW5kZXggb3IgRWRnZQorICAgIHRlbXBs
YXRlPHR5cGVuYW1lIFQ+IC8vIFQgPSBOb2RlKiBvciBFZGdlCiAgICAgdm9pZCBzdWJzdGl0dXRl
KEJhc2ljQmxvY2smIGJsb2NrLCB1bnNpZ25lZCBzdGFydEluZGV4SW5CbG9jaywgVCBvbGRUaGlu
ZywgVCBuZXdUaGluZykKICAgICB7CiAgICAgICAgIGZvciAodW5zaWduZWQgaW5kZXhJbkJsb2Nr
ID0gc3RhcnRJbmRleEluQmxvY2s7IGluZGV4SW5CbG9jayA8IGJsb2NrLnNpemUoKTsgKytpbmRl
eEluQmxvY2spIHsKLSAgICAgICAgICAgIE5vZGVJbmRleCBub2RlSW5kZXggPSBibG9ja1tpbmRl
eEluQmxvY2tdOwotICAgICAgICAgICAgTm9kZSYgbm9kZSA9IGF0KG5vZGVJbmRleCk7Ci0gICAg
ICAgICAgICBpZiAobm9kZS5mbGFncygpICYgTm9kZUhhc1ZhckFyZ3MpIHsKLSAgICAgICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGNoaWxkSWR4ID0gbm9kZS5maXJzdENoaWxkKCk7IGNoaWxkSWR4
IDwgbm9kZS5maXJzdENoaWxkKCkgKyBub2RlLm51bUNoaWxkcmVuKCk7ICsrY2hpbGRJZHgpIHsK
KyAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9ja1tpbmRleEluQmxvY2tdOworICAgICAgICAg
ICAgaWYgKG5vZGUtPmZsYWdzKCkgJiBOb2RlSGFzVmFyQXJncykgeworICAgICAgICAgICAgICAg
IGZvciAodW5zaWduZWQgY2hpbGRJZHggPSBub2RlLT5maXJzdENoaWxkKCk7IGNoaWxkSWR4IDwg
bm9kZS0+Zmlyc3RDaGlsZCgpICsgbm9kZS0+bnVtQ2hpbGRyZW4oKTsgKytjaGlsZElkeCkgewog
ICAgICAgICAgICAgICAgICAgICBpZiAoISFtX3ZhckFyZ0NoaWxkcmVuW2NoaWxkSWR4XSkKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbXBhcmVBbmRTd2FwKG1fdmFyQXJnQ2hpbGRyZW5bY2hp
bGRJZHhdLCBvbGRUaGluZywgbmV3VGhpbmcsIG5vZGUuc2hvdWxkR2VuZXJhdGUoKSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICBjb21wYXJlQW5kU3dhcChtX3ZhckFyZ0NoaWxkcmVuW2NoaWxk
SWR4XSwgb2xkVGhpbmcsIG5ld1RoaW5nLCBub2RlLT5zaG91bGRHZW5lcmF0ZSgpKTsKICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBpZiAoIW5vZGUuY2hpbGQxKCkpCisgICAgICAgICAgICBpZiAoIW5vZGUtPmNo
aWxkMSgpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgY29tcGFyZUFu
ZFN3YXAobm9kZS5jaGlsZHJlbi5jaGlsZDEoKSwgb2xkVGhpbmcsIG5ld1RoaW5nLCBub2RlLnNo
b3VsZEdlbmVyYXRlKCkpOwotICAgICAgICAgICAgaWYgKCFub2RlLmNoaWxkMigpKQorICAgICAg
ICAgICAgY29tcGFyZUFuZFN3YXAobm9kZS0+Y2hpbGRyZW4uY2hpbGQxKCksIG9sZFRoaW5nLCBu
ZXdUaGluZywgbm9kZS0+c2hvdWxkR2VuZXJhdGUoKSk7CisgICAgICAgICAgICBpZiAoIW5vZGUt
PmNoaWxkMigpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgY29tcGFy
ZUFuZFN3YXAobm9kZS5jaGlsZHJlbi5jaGlsZDIoKSwgb2xkVGhpbmcsIG5ld1RoaW5nLCBub2Rl
LnNob3VsZEdlbmVyYXRlKCkpOwotICAgICAgICAgICAgaWYgKCFub2RlLmNoaWxkMygpKQorICAg
ICAgICAgICAgY29tcGFyZUFuZFN3YXAobm9kZS0+Y2hpbGRyZW4uY2hpbGQyKCksIG9sZFRoaW5n
LCBuZXdUaGluZywgbm9kZS0+c2hvdWxkR2VuZXJhdGUoKSk7CisgICAgICAgICAgICBpZiAoIW5v
ZGUtPmNoaWxkMygpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgY29t
cGFyZUFuZFN3YXAobm9kZS5jaGlsZHJlbi5jaGlsZDMoKSwgb2xkVGhpbmcsIG5ld1RoaW5nLCBu
b2RlLnNob3VsZEdlbmVyYXRlKCkpOworICAgICAgICAgICAgY29tcGFyZUFuZFN3YXAobm9kZS0+
Y2hpbGRyZW4uY2hpbGQzKCksIG9sZFRoaW5nLCBuZXdUaGluZywgbm9kZS0+c2hvdWxkR2VuZXJh
dGUoKSk7CiAgICAgICAgIH0KICAgICB9CiAgICAgCkBAIC02NzcsMjkgKzY2MCwyOCBAQCBwdWJs
aWM6CiAgICAgLy8gYW55IEdldExvY2FscyBpbiB0aGUgYmFzaWMgYmxvY2suCiAgICAgLy8gRklY
TUU6IGl0IG1heSBiZSBhcHByb3ByaWF0ZSwgaW4gdGhlIGZ1dHVyZSwgdG8gZ2VuZXJhbGl6ZSB0
aGlzIHRvIGhhbmRsZSBHZXRMb2NhbHMKICAgICAvLyBpbnRyb2R1Y2VkIGFueXdoZXJlIGluIHRo
ZSBiYXNpYyBibG9jay4KLSAgICB2b2lkIHN1YnN0aXR1dGVHZXRMb2NhbChCYXNpY0Jsb2NrJiBi
bG9jaywgdW5zaWduZWQgc3RhcnRJbmRleEluQmxvY2ssIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFy
aWFibGVBY2Nlc3NEYXRhLCBOb2RlSW5kZXggbmV3R2V0TG9jYWwpCisgICAgdm9pZCBzdWJzdGl0
dXRlR2V0TG9jYWwoQmFzaWNCbG9jayYgYmxvY2ssIHVuc2lnbmVkIHN0YXJ0SW5kZXhJbkJsb2Nr
LCBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSwgTm9kZSogbmV3R2V0TG9j
YWwpCiAgICAgewogICAgICAgICBpZiAodmFyaWFibGVBY2Nlc3NEYXRhLT5pc0NhcHR1cmVkKCkp
IHsKICAgICAgICAgICAgIC8vIExldCBDU0Ugd29ycnkgYWJvdXQgdGhpcyBvbmUuCiAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgZm9yICh1bnNpZ25lZCBpbmRleEluQmxv
Y2sgPSBzdGFydEluZGV4SW5CbG9jazsgaW5kZXhJbkJsb2NrIDwgYmxvY2suc2l6ZSgpOyArK2lu
ZGV4SW5CbG9jaykgewotICAgICAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRleCA9IGJsb2NrW2lu
ZGV4SW5CbG9ja107Ci0gICAgICAgICAgICBOb2RlJiBub2RlID0gYXQobm9kZUluZGV4KTsKKyAg
ICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9ja1tpbmRleEluQmxvY2tdOwogICAgICAgICAgICAg
Ym9vbCBzaG91bGRDb250aW51ZSA9IHRydWU7Ci0gICAgICAgICAgICBzd2l0Y2ggKG5vZGUub3Ao
KSkgeworICAgICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CiAgICAgICAgICAgICBjYXNl
IFNldExvY2FsOiB7Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGUubG9jYWwoKSA9PSB2YXJpYWJs
ZUFjY2Vzc0RhdGEtPmxvY2FsKCkpCisgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmxvY2FsKCkg
PT0gdmFyaWFibGVBY2Nlc3NEYXRhLT5sb2NhbCgpKQogICAgICAgICAgICAgICAgICAgICBzaG91
bGRDb250aW51ZSA9IGZhbHNlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
fQogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgY2FzZSBHZXRMb2NhbDogewotICAgICAg
ICAgICAgICAgIGlmIChub2RlLnZhcmlhYmxlQWNjZXNzRGF0YSgpICE9IHZhcmlhYmxlQWNjZXNz
RGF0YSkKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCkgIT0g
dmFyaWFibGVBY2Nlc3NEYXRhKQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAg
ICAgICAgICAgICBzdWJzdGl0dXRlKGJsb2NrLCBpbmRleEluQmxvY2ssIG5vZGVJbmRleCwgbmV3
R2V0TG9jYWwpOwotICAgICAgICAgICAgICAgIE5vZGVJbmRleCBvbGRUYWlsSW5kZXggPSBibG9j
ay52YXJpYWJsZXNBdFRhaWwub3BlcmFuZCh2YXJpYWJsZUFjY2Vzc0RhdGEtPmxvY2FsKCkpOwot
ICAgICAgICAgICAgICAgIGlmIChvbGRUYWlsSW5kZXggPT0gbm9kZUluZGV4KQorICAgICAgICAg
ICAgICAgIHN1YnN0aXR1dGUoYmxvY2ssIGluZGV4SW5CbG9jaywgbm9kZSwgbmV3R2V0TG9jYWwp
OworICAgICAgICAgICAgICAgIE5vZGUqIG9sZFRhaWxOb2RlID0gYmxvY2sudmFyaWFibGVzQXRU
YWlsLm9wZXJhbmQodmFyaWFibGVBY2Nlc3NEYXRhLT5sb2NhbCgpKTsKKyAgICAgICAgICAgICAg
ICBpZiAob2xkVGFpbE5vZGUgPT0gbm9kZSkKICAgICAgICAgICAgICAgICAgICAgYmxvY2sudmFy
aWFibGVzQXRUYWlsLm9wZXJhbmQodmFyaWFibGVBY2Nlc3NEYXRhLT5sb2NhbCgpKSA9IG5ld0dl
dExvY2FsOwogICAgICAgICAgICAgICAgIHNob3VsZENvbnRpbnVlID0gZmFsc2U7CiAgICAgICAg
ICAgICAgICAgYnJlYWs7CkBAIC03MTcsNiArNjk5LDggQEAgcHVibGljOgogICAgIENvZGVCbG9j
ayogbV9jb2RlQmxvY2s7CiAgICAgUmVmUHRyPFByb2ZpbGVyOjpDb21waWxhdGlvbj4gbV9jb21w
aWxhdGlvbjsKICAgICBDb2RlQmxvY2sqIG1fcHJvZmlsZWRCbG9jazsKKyAgICAKKyAgICBOb2Rl
QWxsb2NhdG9yJiBtX2FsbG9jYXRvcjsKIAogICAgIFZlY3RvcjwgT3duUHRyPEJhc2ljQmxvY2s+
ICwgOD4gbV9ibG9ja3M7CiAgICAgVmVjdG9yPEVkZ2UsIDE2PiBtX3ZhckFyZ0NoaWxkcmVuOwpA
QCAtNzI0LDcgKzcwOCw3IEBAIHB1YmxpYzoKICAgICBWZWN0b3I8UmVzb2x2ZUdsb2JhbERhdGE+
IG1fcmVzb2x2ZUdsb2JhbERhdGE7CiAgICAgVmVjdG9yPFJlc29sdmVPcGVyYXRpb25EYXRhPiBt
X3Jlc29sdmVPcGVyYXRpb25zRGF0YTsKICAgICBWZWN0b3I8UHV0VG9CYXNlT3BlcmF0aW9uRGF0
YT4gbV9wdXRUb0Jhc2VPcGVyYXRpb25EYXRhOwotICAgIFZlY3RvcjxOb2RlSW5kZXgsIDg+IG1f
YXJndW1lbnRzOworICAgIFZlY3RvcjxOb2RlKiwgOD4gbV9hcmd1bWVudHM7CiAgICAgU2VnbWVu
dGVkVmVjdG9yPFZhcmlhYmxlQWNjZXNzRGF0YSwgMTY+IG1fdmFyaWFibGVBY2Nlc3NEYXRhOwog
ICAgIFNlZ21lbnRlZFZlY3RvcjxBcmd1bWVudFBvc2l0aW9uLCA4PiBtX2FyZ3VtZW50UG9zaXRp
b25zOwogICAgIFNlZ21lbnRlZFZlY3RvcjxTdHJ1Y3R1cmVTZXQsIDE2PiBtX3N0cnVjdHVyZVNl
dDsKQEAgLTc0NCwyOSArNzI4LDI5IEBAIHByaXZhdGU6CiAgICAgCiAgICAgdm9pZCBoYW5kbGVT
dWNjZXNzb3IoVmVjdG9yPEJsb2NrSW5kZXgsIDE2PiYgd29ya2xpc3QsIEJsb2NrSW5kZXggYmxv
Y2tJbmRleCwgQmxvY2tJbmRleCBzdWNjZXNzb3JJbmRleCk7CiAgICAgCi0gICAgQWRkU3BlY3Vs
YXRpb25Nb2RlIGFkZEltbWVkaWF0ZVNob3VsZFNwZWN1bGF0ZUludGVnZXIoTm9kZSYgYWRkLCBi
b29sIHZhcmlhYmxlU2hvdWxkU3BlY3VsYXRlSW50ZWdlciwgTm9kZSYgaW1tZWRpYXRlKQorICAg
IEFkZFNwZWN1bGF0aW9uTW9kZSBhZGRJbW1lZGlhdGVTaG91bGRTcGVjdWxhdGVJbnRlZ2VyKE5v
ZGUqIGFkZCwgYm9vbCB2YXJpYWJsZVNob3VsZFNwZWN1bGF0ZUludGVnZXIsIE5vZGUqIGltbWVk
aWF0ZSkKICAgICB7CiAgICAgICAgIEFTU0VSVChpbW1lZGlhdGUuaGFzQ29uc3RhbnQoKSk7CiAg
ICAgICAgIAotICAgICAgICBKU1ZhbHVlIGltbWVkaWF0ZVZhbHVlID0gaW1tZWRpYXRlLnZhbHVl
T2ZKU0NvbnN0YW50KG1fY29kZUJsb2NrKTsKLSAgICAgICAgaWYgKCFpbW1lZGlhdGVWYWx1ZS5p
c051bWJlcigpKQorICAgICAgICBKU1ZhbHVlIGltbWVkaWF0ZVZhbHVlID0gaW1tZWRpYXRlLT52
YWx1ZU9mSlNDb25zdGFudChtX2NvZGVCbG9jayk7CisgICAgICAgIGlmICghaW1tZWRpYXRlVmFs
dWUtPmlzTnVtYmVyKCkpCiAgICAgICAgICAgICByZXR1cm4gRG9udFNwZWN1bGF0ZUludGVnZXI7
CiAgICAgICAgIAogICAgICAgICBpZiAoIXZhcmlhYmxlU2hvdWxkU3BlY3VsYXRlSW50ZWdlcikK
ICAgICAgICAgICAgIHJldHVybiBEb250U3BlY3VsYXRlSW50ZWdlcjsKICAgICAgICAgCi0gICAg
ICAgIGlmIChpbW1lZGlhdGVWYWx1ZS5pc0ludDMyKCkpCi0gICAgICAgICAgICByZXR1cm4gYWRk
LmNhblNwZWN1bGF0ZUludGVnZXIoKSA/IFNwZWN1bGF0ZUludGVnZXIgOiBEb250U3BlY3VsYXRl
SW50ZWdlcjsKKyAgICAgICAgaWYgKGltbWVkaWF0ZVZhbHVlLT5pc0ludDMyKCkpCisgICAgICAg
ICAgICByZXR1cm4gYWRkLT5jYW5TcGVjdWxhdGVJbnRlZ2VyKCkgPyBTcGVjdWxhdGVJbnRlZ2Vy
IDogRG9udFNwZWN1bGF0ZUludGVnZXI7CiAgICAgICAgIAogICAgICAgICBkb3VibGUgZG91Ymxl
SW1tZWRpYXRlID0gaW1tZWRpYXRlVmFsdWUuYXNEb3VibGUoKTsKICAgICAgICAgY29uc3QgZG91
YmxlIHR3b1RvVGhlNDggPSAyODE0NzQ5NzY3MTA2NTYuMDsKICAgICAgICAgaWYgKGRvdWJsZUlt
bWVkaWF0ZSA8IC10d29Ub1RoZTQ4IHx8IGRvdWJsZUltbWVkaWF0ZSA+IHR3b1RvVGhlNDgpCiAg
ICAgICAgICAgICByZXR1cm4gRG9udFNwZWN1bGF0ZUludGVnZXI7CiAgICAgICAgIAotICAgICAg
ICByZXR1cm4gbm9kZUNhblRydW5jYXRlSW50ZWdlcihhZGQuYXJpdGhOb2RlRmxhZ3MoKSkgPyBT
cGVjdWxhdGVJbnRlZ2VyQnV0QWx3YXlzV2F0Y2hPdmVyZmxvdyA6IERvbnRTcGVjdWxhdGVJbnRl
Z2VyOworICAgICAgICByZXR1cm4gbm9kZUNhblRydW5jYXRlSW50ZWdlcihhZGQtPmFyaXRoTm9k
ZUZsYWdzKCkpID8gU3BlY3VsYXRlSW50ZWdlckJ1dEFsd2F5c1dhdGNoT3ZlcmZsb3cgOiBEb250
U3BlY3VsYXRlSW50ZWdlcjsKICAgICB9CiAgICAgCi0gICAgYm9vbCBtdWxJbW1lZGlhdGVTaG91
bGRTcGVjdWxhdGVJbnRlZ2VyKE5vZGUmIG11bCwgTm9kZSYgdmFyaWFibGUsIE5vZGUmIGltbWVk
aWF0ZSkKKyAgICBib29sIG11bEltbWVkaWF0ZVNob3VsZFNwZWN1bGF0ZUludGVnZXIoTm9kZSog
bXVsLCBOb2RlKiB2YXJpYWJsZSwgTm9kZSogaW1tZWRpYXRlKQogICAgIHsKICAgICAgICAgQVNT
RVJUKGltbWVkaWF0ZS5oYXNDb25zdGFudCgpKTsKICAgICAgICAgCkBAIC03NzQsNyArNzU4LDcg
QEAgcHJpdmF0ZToKICAgICAgICAgaWYgKCFpbW1lZGlhdGVWYWx1ZS5pc0ludDMyKCkpCiAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIAotICAgICAgICBpZiAoIXZhcmlhYmxlLnNo
b3VsZFNwZWN1bGF0ZUludGVnZXJGb3JBcml0aG1ldGljKCkpCisgICAgICAgIGlmICghdmFyaWFi
bGUtPnNob3VsZFNwZWN1bGF0ZUludGVnZXJGb3JBcml0aG1ldGljKCkpCiAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgICAgIAogICAgICAgICBpbnQzMl90IGludEltbWVkaWF0ZSA9IGlt
bWVkaWF0ZVZhbHVlLmFzSW50MzIoKTsKQEAgLTc4NSwxNCArNzY5LDE0IEBAIHByaXZhdGU6CiAg
ICAgICAgIC8vIGNhblNwZWN1bGF0ZUludGVnZXIoKSBpbXBsaWVzKS4KICAgICAgICAgY29uc3Qg
aW50MzJfdCB0d29Ub1RoZTIyID0gMSA8PCAyMjsKICAgICAgICAgaWYgKGludEltbWVkaWF0ZSA8
PSAtdHdvVG9UaGUyMiB8fCBpbnRJbW1lZGlhdGUgPj0gdHdvVG9UaGUyMikKLSAgICAgICAgICAg
IHJldHVybiBtdWwuY2FuU3BlY3VsYXRlSW50ZWdlcigpICYmICFub2RlTWF5T3ZlcmZsb3cobXVs
LmFyaXRoTm9kZUZsYWdzKCkpOworICAgICAgICAgICAgcmV0dXJuIG11bC0+Y2FuU3BlY3VsYXRl
SW50ZWdlcigpICYmICFub2RlTWF5T3ZlcmZsb3cobXVsLT5hcml0aE5vZGVGbGFncygpKTsKIAot
ICAgICAgICByZXR1cm4gbXVsLmNhblNwZWN1bGF0ZUludGVnZXIoKTsKKyAgICAgICAgcmV0dXJu
IG11bC0+Y2FuU3BlY3VsYXRlSW50ZWdlcigpOwogICAgIH0KICAgICAKICAgICAvLyBXaGVuIGEg
bm9kZSdzIHJlZkNvdW50IGdvZXMgZnJvbSAwIHRvIDEsIGl0IG11c3QgKGxvZ2ljYWxseSkgcmVj
dXJzaXZlbHkgcmVmIGFsbCBvZiBpdHMgY2hpbGRyZW4sIGFuZCB2aWNlIHZlcnNhLgotICAgIHZv
aWQgcmVmQ2hpbGRyZW4oTm9kZUluZGV4KTsKLSAgICB2b2lkIGRlcmVmQ2hpbGRyZW4oTm9kZUlu
ZGV4KTsKKyAgICB2b2lkIHJlZkNoaWxkcmVuKE5vZGUqKTsKKyAgICB2b2lkIGRlcmVmQ2hpbGRy
ZW4oTm9kZSopOwogfTsKIAogY2xhc3MgR2V0Qnl0ZWNvZGVCZWdpbkZvckJsb2NrIHsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5zZXJ0aW9uU2V0LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJbnNlcnRpb25TZXQuaAkocmV2aXNpb24g
MTQwNTY3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJbnNlcnRpb25TZXQuaAko
d29ya2luZyBjb3B5KQpAQCAtMzksMTQgKzM5LDE0IEBAIGNsYXNzIEluc2VydGlvbiB7CiBwdWJs
aWM6CiAgICAgSW5zZXJ0aW9uKCkgeyB9CiAgICAgCi0gICAgSW5zZXJ0aW9uKHNpemVfdCBpbmRl
eCwgTm9kZUluZGV4IGVsZW1lbnQpCisgICAgSW5zZXJ0aW9uKHNpemVfdCBpbmRleCwgTm9kZSog
ZWxlbWVudCkKICAgICAgICAgOiBtX2luZGV4KGluZGV4KQogICAgICAgICAsIG1fZWxlbWVudChl
bGVtZW50KQogICAgIHsKICAgICB9CiAgICAgCiAgICAgc2l6ZV90IGluZGV4KCkgY29uc3QgeyBy
ZXR1cm4gbV9pbmRleDsgfQotICAgIE5vZGVJbmRleCBlbGVtZW50KCkgY29uc3QgeyByZXR1cm4g
bV9lbGVtZW50OyB9CisgICAgTm9kZSogZWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fZWxlbWVu
dDsgfQogcHJpdmF0ZToKICAgICBzaXplX3QgbV9pbmRleDsKICAgICBOb2RlSW5kZXggbV9lbGVt
ZW50OwpAQCAtNTksMjAgKzU5LDIwIEBAIHB1YmxpYzoKICAgICB7CiAgICAgfQogICAgIAotICAg
IE5vZGVJbmRleCBpbnNlcnQoY29uc3QgSW5zZXJ0aW9uJiBpbnNlcnRpb24pCisgICAgTm9kZSog
aW5zZXJ0KGNvbnN0IEluc2VydGlvbiYgaW5zZXJ0aW9uKQogICAgIHsKICAgICAgICAgQVNTRVJU
KCFtX2luc2VydGlvbnMuc2l6ZSgpIHx8IG1faW5zZXJ0aW9ucy5sYXN0KCkuaW5kZXgoKSA8PSBp
bnNlcnRpb24uaW5kZXgoKSk7CiAgICAgICAgIG1faW5zZXJ0aW9ucy5hcHBlbmQoaW5zZXJ0aW9u
KTsKICAgICAgICAgcmV0dXJuIGluc2VydGlvbi5lbGVtZW50KCk7CiAgICAgfQogICAgIAotICAg
IE5vZGVJbmRleCBpbnNlcnQoc2l6ZV90IGluZGV4LCBOb2RlSW5kZXggZWxlbWVudCkKKyAgICBO
b2RlKiBpbnNlcnQoc2l6ZV90IGluZGV4LCBOb2RlSW5kZXggZWxlbWVudCkKICAgICB7CiAgICAg
ICAgIHJldHVybiBpbnNlcnQoSW5zZXJ0aW9uKGluZGV4LCBlbGVtZW50KSk7CiAgICAgfQogCiAj
ZGVmaW5lIERGR19ERUZJTkVfSU5TRVJUX05PREUodGVtcGxhdGVQcmUsIHRlbXBsYXRlUG9zdCwg
dHlwZVBhcmFtcywgdmFsdWVQYXJhbXNDb21tYSwgdmFsdWVQYXJhbXMsIHZhbHVlQXJncykgXAot
ICAgIHRlbXBsYXRlUHJlIHR5cGVQYXJhbXMgdGVtcGxhdGVQb3N0IE5vZGVJbmRleCBpbnNlcnRO
b2RlKHNpemVfdCBpbmRleCwgUmVmQ2hpbGRyZW5Nb2RlIHJlZkNoaWxkcmVuTW9kZSwgUmVmTm9k
ZU1vZGUgcmVmTm9kZU1vZGUsIFNwZWN1bGF0ZWRUeXBlIHR5cGUgdmFsdWVQYXJhbXNDb21tYSB2
YWx1ZVBhcmFtcykgXAorICAgIHRlbXBsYXRlUHJlIHR5cGVQYXJhbXMgdGVtcGxhdGVQb3N0IE5v
ZGUqIGluc2VydE5vZGUoc2l6ZV90IGluZGV4LCBSZWZDaGlsZHJlbk1vZGUgcmVmQ2hpbGRyZW5N
b2RlLCBSZWZOb2RlTW9kZSByZWZOb2RlTW9kZSwgU3BlY3VsYXRlZFR5cGUgdHlwZSB2YWx1ZVBh
cmFtc0NvbW1hIHZhbHVlUGFyYW1zKSBcCiAgICAgeyBcCiAgICAgICAgIHJldHVybiBpbnNlcnQo
aW5kZXgsIG1fZ3JhcGguYWRkTm9kZShyZWZDaGlsZHJlbk1vZGUsIHJlZk5vZGVNb2RlLCB0eXBl
IHZhbHVlUGFyYW1zQ29tbWEgdmFsdWVBcmdzKSk7IFwKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0xvbmdMaXZlZFN0YXRlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0xvbmdMaXZlZFN0YXRlLmNwcAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTG9uZ0xpdmVkU3RhdGUuY3BwCShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDQ5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdMb25nTGl2
ZWRTdGF0ZS5oIgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgREZHIHsKKworTG9uZ0xpdmVkU3RhdGU6OkxvbmdMaXZlZFN0YXRlKCkKK3sKK30KKwor
TG9uZ0xpdmVkU3RhdGU6On5Mb25nTGl2ZWRTdGF0ZSgpCit7Cit9CisKK3ZvaWQgTG9uZ0xpdmVk
U3RhdGU6OnNocmlua1RvRml0KCkKK3sKKyAgICBtX2FsbG9jYXRvci5yZXNldCgpOworfQorCit9
IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdMb25nTGl2ZWRTdGF0ZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTG9uZ0xpdmVkU3RhdGUuaAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTG9uZ0xpdmVkU3Rh
dGUuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIERGR0xvbmdMaXZlZFN0YXRlX2gKKyNk
ZWZpbmUgREZHTG9uZ0xpdmVkU3RhdGVfaAorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisK
KyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRGR05vZGVBbGxvY2F0b3IuaCIKKyNp
bmNsdWRlIDx3dGYvRmFzdEFsbG9jQmFzZS5oPgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5o
PgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK2NsYXNzIExvbmdMaXZlZFN0
YXRlIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsgV1RGX01BS0VfTk9OQ09QWUFCTEUo
TG9uZ0xpdmVkU3RhdGUpOworcHVibGljOgorICAgIExvbmdMaXZlZFN0YXRlKCk7CisgICAgfkxv
bmdMaXZlZFN0YXRlKCk7CisgICAgCisgICAgdm9pZCBzaHJpbmtUb0ZpdCgpOworICAgIAorICAg
IE5vZGVBbGxvY2F0b3IgbV9hbGxvY2F0b3I7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR0xvbmdMaXZl
ZFN0YXRlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuY3BwCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmNwcAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSw1NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZHTm9kZS5oIgor
CisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJERkdOb2RlQWxsb2NhdG9yLmgiCisK
K25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKwordW5zaWduZWQgTm9kZTo6aW5kZXgo
KSBjb25zdAoreworICAgIHJldHVybiBOb2RlQWxsb2NhdG9yOjphbGxvY2F0b3JPZih0aGlzKS0+
aW5kZXhPZih0aGlzKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCituYW1lc3Bh
Y2UgV1RGIHsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIE5vZGUqIG5v
ZGUpCit7CisgICAgaWYgKCFub2RlKQorICAgICAgICBvdXQucHJpbnQoIi0iKTsKKyAgICBlbHNl
CisgICAgICAgIG91dC5wcmludCgiQCIsIG5vZGUtPmluZGV4KCkpOworICAgIG91dC5wcmludChB
YmJyZXZpYXRlZFNwZWN1bGF0aW9uRHVtcChub2RlLT5wcmVkaWN0aW9uKCkpKTsKK30KKworfSAv
LyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHJldmlzaW9uIDE0MDU2NykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTIsIDIwMTMgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02
OCw3ICs2OCw3IEBAIHN0cnVjdCBOZXdBcnJheUJ1ZmZlckRhdGEgewogCiAvLyBUaGlzIHR5cGUg
dXNlZCBpbiBwYXNzaW5nIGFuIGltbWVkaWF0ZSBhcmd1bWVudCB0byBOb2RlIGNvbnN0cnVjdG9y
OwogLy8gZGlzdGluZ3Vpc2hlcyBhbiBpbW1lZGlhdGUgdmFsdWUgKHR5cGljYWxseSBhbiBpbmRl
eCBpbnRvIGEgQ29kZUJsb2NrIGRhdGEgc3RydWN0dXJlIC0gCi0vLyBhIGNvbnN0YW50IGluZGV4
LCBhcmd1bWVudCwgb3IgaWRlbnRpZmllcikgZnJvbSBhIE5vZGVJbmRleC4KKy8vIGEgY29uc3Rh
bnQgaW5kZXgsIGFyZ3VtZW50LCBvciBpZGVudGlmaWVyKSBmcm9tIGEgTm9kZSouCiBzdHJ1Y3Qg
T3BJbmZvIHsKICAgICBleHBsaWNpdCBPcEluZm8oaW50MzJfdCB2YWx1ZSkgOiBtX3ZhbHVlKHN0
YXRpY19jYXN0PHVpbnRwdHJfdD4odmFsdWUpKSB7IH0KICAgICBleHBsaWNpdCBPcEluZm8odWlu
dDMyX3QgdmFsdWUpIDogbV92YWx1ZShzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KHZhbHVlKSkgeyB9
CkBAIC05OSw3ICs5OSw3IEBAIHN0cnVjdCBOb2RlIHsKICAgICB9CiAgICAgCiAgICAgLy8gQ29u
c3RydWN0IGEgbm9kZSB3aXRoIHVwIHRvIDMgY2hpbGRyZW4sIG5vIGltbWVkaWF0ZSB2YWx1ZS4K
LSAgICBOb2RlKE5vZGVUeXBlIG9wLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIE5vZGVJbmRleCBj
aGlsZDEgPSBOb05vZGUsIE5vZGVJbmRleCBjaGlsZDIgPSBOb05vZGUsIE5vZGVJbmRleCBjaGls
ZDMgPSBOb05vZGUpCisgICAgTm9kZShOb2RlVHlwZSBvcCwgQ29kZU9yaWdpbiBjb2RlT3JpZ2lu
LCBOb2RlKiBjaGlsZDEgPSAwLCBOb2RlKiBjaGlsZDIgPSAwLCBOb2RlKiBjaGlsZDMgPSAwKQog
ICAgICAgICA6IGNvZGVPcmlnaW4oY29kZU9yaWdpbikKICAgICAgICAgLCBjaGlsZHJlbihBZGph
Y2VuY3lMaXN0OjpGaXhlZCwgY2hpbGQxLCBjaGlsZDIsIGNoaWxkMykKICAgICAgICAgLCBtX3Zp
cnR1YWxSZWdpc3RlcihJbnZhbGlkVmlydHVhbFJlZ2lzdGVyKQpAQCAtMTExLDcgKzExMSw3IEBA
IHN0cnVjdCBOb2RlIHsKICAgICB9CiAKICAgICAvLyBDb25zdHJ1Y3QgYSBub2RlIHdpdGggdXAg
dG8gMyBjaGlsZHJlbiBhbmQgYW4gaW1tZWRpYXRlIHZhbHVlLgotICAgIE5vZGUoTm9kZVR5cGUg
b3AsIENvZGVPcmlnaW4gY29kZU9yaWdpbiwgT3BJbmZvIGltbSwgTm9kZUluZGV4IGNoaWxkMSA9
IE5vTm9kZSwgTm9kZUluZGV4IGNoaWxkMiA9IE5vTm9kZSwgTm9kZUluZGV4IGNoaWxkMyA9IE5v
Tm9kZSkKKyAgICBOb2RlKE5vZGVUeXBlIG9wLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIE9wSW5m
byBpbW0sIE5vZGUqIGNoaWxkMSA9IDAsIE5vZGUqIGNoaWxkMiA9IDAsIE5vZGUqIGNoaWxkMyA9
IDApCiAgICAgICAgIDogY29kZU9yaWdpbihjb2RlT3JpZ2luKQogICAgICAgICAsIGNoaWxkcmVu
KEFkamFjZW5jeUxpc3Q6OkZpeGVkLCBjaGlsZDEsIGNoaWxkMiwgY2hpbGQzKQogICAgICAgICAs
IG1fdmlydHVhbFJlZ2lzdGVyKEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIpCkBAIC0xMjQsNyArMTI0
LDcgQEAgc3RydWN0IE5vZGUgewogICAgIH0KIAogICAgIC8vIENvbnN0cnVjdCBhIG5vZGUgd2l0
aCB1cCB0byAzIGNoaWxkcmVuIGFuZCB0d28gaW1tZWRpYXRlIHZhbHVlcy4KLSAgICBOb2RlKE5v
ZGVUeXBlIG9wLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIE9wSW5mbyBpbW0xLCBPcEluZm8gaW1t
MiwgTm9kZUluZGV4IGNoaWxkMSA9IE5vTm9kZSwgTm9kZUluZGV4IGNoaWxkMiA9IE5vTm9kZSwg
Tm9kZUluZGV4IGNoaWxkMyA9IE5vTm9kZSkKKyAgICBOb2RlKE5vZGVUeXBlIG9wLCBDb2RlT3Jp
Z2luIGNvZGVPcmlnaW4sIE9wSW5mbyBpbW0xLCBPcEluZm8gaW1tMiwgTm9kZSogY2hpbGQxID0g
MCwgTm9kZSogY2hpbGQyID0gMCwgTm9kZSogY2hpbGQzID0gMCkKICAgICAgICAgOiBjb2RlT3Jp
Z2luKGNvZGVPcmlnaW4pCiAgICAgICAgICwgY2hpbGRyZW4oQWRqYWNlbmN5TGlzdDo6Rml4ZWQs
IGNoaWxkMSwgY2hpbGQyLCBjaGlsZDMpCiAgICAgICAgICwgbV92aXJ0dWFsUmVnaXN0ZXIoSW52
YWxpZFZpcnR1YWxSZWdpc3RlcikKQEAgLTE1NCw2ICsxNTQsOSBAQCBzdHJ1Y3QgTm9kZSB7CiAg
ICAgTm9kZVR5cGUgb3AoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxOb2RlVHlwZT4obV9v
cCk7IH0KICAgICBOb2RlRmxhZ3MgZmxhZ3MoKSBjb25zdCB7IHJldHVybiBtX2ZsYWdzOyB9CiAg
ICAgCisgICAgLy8gVGhpcyBpcyBub3QgYSBmYXN0IG1ldGhvZC4KKyAgICB1bnNpZ25lZCBpbmRl
eCgpIGNvbnN0OworICAgIAogICAgIHZvaWQgc2V0T3AoTm9kZVR5cGUgb3ApCiAgICAgewogICAg
ICAgICBtX29wID0gb3A7CkBAIC0yODEsNyArMjg0LDcgQEAgc3RydWN0IE5vZGUgewogICAgICAg
ICBjb252ZXJ0VG9TdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludChzdHJ1Y3R1cmVTZXQoKS5z
aW5nbGV0b25TdHJ1Y3R1cmUoKSk7CiAgICAgfQogICAgIAotICAgIHZvaWQgY29udmVydFRvR2V0
QnlPZmZzZXQodW5zaWduZWQgc3RvcmFnZUFjY2Vzc0RhdGFJbmRleCwgTm9kZUluZGV4IHN0b3Jh
Z2UpCisgICAgdm9pZCBjb252ZXJ0VG9HZXRCeU9mZnNldCh1bnNpZ25lZCBzdG9yYWdlQWNjZXNz
RGF0YUluZGV4LCBOb2RlKiBzdG9yYWdlKQogICAgIHsKICAgICAgICAgQVNTRVJUKG1fb3AgPT0g
R2V0QnlJZCB8fCBtX29wID09IEdldEJ5SWRGbHVzaCk7CiAgICAgICAgIG1fb3BJbmZvID0gc3Rv
cmFnZUFjY2Vzc0RhdGFJbmRleDsKQEAgLTI5MCw3ICsyOTMsNyBAQCBzdHJ1Y3QgTm9kZSB7CiAg
ICAgICAgIG1fZmxhZ3MgJj0gfk5vZGVDbG9iYmVyc1dvcmxkOwogICAgIH0KICAgICAKLSAgICB2
b2lkIGNvbnZlcnRUb1B1dEJ5T2Zmc2V0KHVuc2lnbmVkIHN0b3JhZ2VBY2Nlc3NEYXRhSW5kZXgs
IE5vZGVJbmRleCBzdG9yYWdlKQorICAgIHZvaWQgY29udmVydFRvUHV0QnlPZmZzZXQodW5zaWdu
ZWQgc3RvcmFnZUFjY2Vzc0RhdGFJbmRleCwgTm9kZSogc3RvcmFnZSkKICAgICB7CiAgICAgICAg
IEFTU0VSVChtX29wID09IFB1dEJ5SWQgfHwgbV9vcCA9PSBQdXRCeUlkRGlyZWN0KTsKICAgICAg
ICAgbV9vcEluZm8gPSBzdG9yYWdlQWNjZXNzRGF0YUluZGV4OwpAQCAtOTIwLDkgKzkyMywxMCBA
QCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAgIHJldHVybiBtX3JlZkNvdW50OwogICAgIH0KIAotICAg
IHZvaWQgcmVmKCkKKyAgICBOb2RlKiByZWYoKQogICAgIHsKICAgICAgICAgbV9yZWZDb3VudCsr
OworICAgICAgICByZXR1cm4gdGhpczsKICAgICB9CiAKICAgICB1bnNpZ25lZCBwb3N0Zml4UmVm
KCkKQEAgLTExMzUsNDQgKzExMzksNDQgQEAgc3RydWN0IE5vZGUgewogICAgICAgICByZXR1cm4g
aXNDZWxsU3BlY3VsYXRpb24ocHJlZGljdGlvbigpKTsKICAgICB9CiAgICAgCi0gICAgc3RhdGlj
IGJvb2wgc2hvdWxkU3BlY3VsYXRlSW50ZWdlcihOb2RlJiBvcDEsIE5vZGUmIG9wMikKKyAgICBz
dGF0aWMgYm9vbCBzaG91bGRTcGVjdWxhdGVJbnRlZ2VyKE5vZGUqIG9wMSwgTm9kZSogb3AyKQog
ICAgIHsKLSAgICAgICAgcmV0dXJuIG9wMS5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkgJiYgb3Ay
LnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKTsKKyAgICAgICAgcmV0dXJuIG9wMS0+c2hvdWxkU3Bl
Y3VsYXRlSW50ZWdlcigpICYmIG9wMi0+c2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpOwogICAgIH0K
ICAgICAKLSAgICBzdGF0aWMgYm9vbCBzaG91bGRTcGVjdWxhdGVJbnRlZ2VyRm9yQXJpdGhtZXRp
YyhOb2RlJiBvcDEsIE5vZGUmIG9wMikKKyAgICBzdGF0aWMgYm9vbCBzaG91bGRTcGVjdWxhdGVJ
bnRlZ2VyRm9yQXJpdGhtZXRpYyhOb2RlKiBvcDEsIE5vZGUqIG9wMikKICAgICB7Ci0gICAgICAg
IHJldHVybiBvcDEuc2hvdWxkU3BlY3VsYXRlSW50ZWdlckZvckFyaXRobWV0aWMoKSAmJiBvcDIu
c2hvdWxkU3BlY3VsYXRlSW50ZWdlckZvckFyaXRobWV0aWMoKTsKKyAgICAgICAgcmV0dXJuIG9w
MS0+c2hvdWxkU3BlY3VsYXRlSW50ZWdlckZvckFyaXRobWV0aWMoKSAmJiBvcDItPnNob3VsZFNw
ZWN1bGF0ZUludGVnZXJGb3JBcml0aG1ldGljKCk7CiAgICAgfQogICAgIAotICAgIHN0YXRpYyBi
b29sIHNob3VsZFNwZWN1bGF0ZUludGVnZXJFeHBlY3RpbmdEZWZpbmVkKE5vZGUmIG9wMSwgTm9k
ZSYgb3AyKQorICAgIHN0YXRpYyBib29sIHNob3VsZFNwZWN1bGF0ZUludGVnZXJFeHBlY3RpbmdE
ZWZpbmVkKE5vZGUqIG9wMSwgTm9kZSogb3AyKQogICAgIHsKLSAgICAgICAgcmV0dXJuIG9wMS5z
aG91bGRTcGVjdWxhdGVJbnRlZ2VyRXhwZWN0aW5nRGVmaW5lZCgpICYmIG9wMi5zaG91bGRTcGVj
dWxhdGVJbnRlZ2VyRXhwZWN0aW5nRGVmaW5lZCgpOworICAgICAgICByZXR1cm4gb3AxLT5zaG91
bGRTcGVjdWxhdGVJbnRlZ2VyRXhwZWN0aW5nRGVmaW5lZCgpICYmIG9wMi0+c2hvdWxkU3BlY3Vs
YXRlSW50ZWdlckV4cGVjdGluZ0RlZmluZWQoKTsKICAgICB9CiAgICAgCi0gICAgc3RhdGljIGJv
b2wgc2hvdWxkU3BlY3VsYXRlRG91YmxlRm9yQXJpdGhtZXRpYyhOb2RlJiBvcDEsIE5vZGUmIG9w
MikKKyAgICBzdGF0aWMgYm9vbCBzaG91bGRTcGVjdWxhdGVEb3VibGVGb3JBcml0aG1ldGljKE5v
ZGUqIG9wMSwgTm9kZSogb3AyKQogICAgIHsKLSAgICAgICAgcmV0dXJuIG9wMS5zaG91bGRTcGVj
dWxhdGVEb3VibGVGb3JBcml0aG1ldGljKCkgJiYgb3AyLnNob3VsZFNwZWN1bGF0ZURvdWJsZUZv
ckFyaXRobWV0aWMoKTsKKyAgICAgICAgcmV0dXJuIG9wMS0+c2hvdWxkU3BlY3VsYXRlRG91Ymxl
Rm9yQXJpdGhtZXRpYygpICYmIG9wMi0+c2hvdWxkU3BlY3VsYXRlRG91YmxlRm9yQXJpdGhtZXRp
YygpOwogICAgIH0KICAgICAKLSAgICBzdGF0aWMgYm9vbCBzaG91bGRTcGVjdWxhdGVOdW1iZXIo
Tm9kZSYgb3AxLCBOb2RlJiBvcDIpCisgICAgc3RhdGljIGJvb2wgc2hvdWxkU3BlY3VsYXRlTnVt
YmVyKE5vZGUqIG9wMSwgTm9kZSogb3AyKQogICAgIHsKLSAgICAgICAgcmV0dXJuIG9wMS5zaG91
bGRTcGVjdWxhdGVOdW1iZXIoKSAmJiBvcDIuc2hvdWxkU3BlY3VsYXRlTnVtYmVyKCk7CisgICAg
ICAgIHJldHVybiBvcDEtPnNob3VsZFNwZWN1bGF0ZU51bWJlcigpICYmIG9wMi0+c2hvdWxkU3Bl
Y3VsYXRlTnVtYmVyKCk7CiAgICAgfQogICAgIAotICAgIHN0YXRpYyBib29sIHNob3VsZFNwZWN1
bGF0ZU51bWJlckV4cGVjdGluZ0RlZmluZWQoTm9kZSYgb3AxLCBOb2RlJiBvcDIpCisgICAgc3Rh
dGljIGJvb2wgc2hvdWxkU3BlY3VsYXRlTnVtYmVyRXhwZWN0aW5nRGVmaW5lZChOb2RlKiBvcDEs
IE5vZGUqIG9wMikKICAgICB7Ci0gICAgICAgIHJldHVybiBvcDEuc2hvdWxkU3BlY3VsYXRlTnVt
YmVyRXhwZWN0aW5nRGVmaW5lZCgpICYmIG9wMi5zaG91bGRTcGVjdWxhdGVOdW1iZXJFeHBlY3Rp
bmdEZWZpbmVkKCk7CisgICAgICAgIHJldHVybiBvcDEtPnNob3VsZFNwZWN1bGF0ZU51bWJlckV4
cGVjdGluZ0RlZmluZWQoKSAmJiBvcDItPnNob3VsZFNwZWN1bGF0ZU51bWJlckV4cGVjdGluZ0Rl
ZmluZWQoKTsKICAgICB9CiAgICAgCi0gICAgc3RhdGljIGJvb2wgc2hvdWxkU3BlY3VsYXRlRmlu
YWxPYmplY3QoTm9kZSYgb3AxLCBOb2RlJiBvcDIpCisgICAgc3RhdGljIGJvb2wgc2hvdWxkU3Bl
Y3VsYXRlRmluYWxPYmplY3QoTm9kZSogb3AxLCBOb2RlKiBvcDIpCiAgICAgewotICAgICAgICBy
ZXR1cm4gb3AxLnNob3VsZFNwZWN1bGF0ZUZpbmFsT2JqZWN0KCkgJiYgb3AyLnNob3VsZFNwZWN1
bGF0ZUZpbmFsT2JqZWN0KCk7CisgICAgICAgIHJldHVybiBvcDEtPnNob3VsZFNwZWN1bGF0ZUZp
bmFsT2JqZWN0KCkgJiYgb3AyLT5zaG91bGRTcGVjdWxhdGVGaW5hbE9iamVjdCgpOwogICAgIH0K
IAotICAgIHN0YXRpYyBib29sIHNob3VsZFNwZWN1bGF0ZUFycmF5KE5vZGUmIG9wMSwgTm9kZSYg
b3AyKQorICAgIHN0YXRpYyBib29sIHNob3VsZFNwZWN1bGF0ZUFycmF5KE5vZGUqIG9wMSwgTm9k
ZSogb3AyKQogICAgIHsKLSAgICAgICAgcmV0dXJuIG9wMS5zaG91bGRTcGVjdWxhdGVBcnJheSgp
ICYmIG9wMi5zaG91bGRTcGVjdWxhdGVBcnJheSgpOworICAgICAgICByZXR1cm4gb3AxLT5zaG91
bGRTcGVjdWxhdGVBcnJheSgpICYmIG9wMi0+c2hvdWxkU3BlY3VsYXRlQXJyYXkoKTsKICAgICB9
CiAgICAgCiAgICAgYm9vbCBjYW5TcGVjdWxhdGVJbnRlZ2VyKCkKQEAgLTExODQsMTUgKzExODgs
MTcgQEAgc3RydWN0IE5vZGUgewogICAgIHsKICAgICAgICAgaWYgKCFjaGlsZDEoKSkKICAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgb3V0LnByaW50ZigiQCV1IiwgY2hpbGQxKCkuaW5kZXgo
KSk7CisgICAgICAgIG91dC5wcmludGYoIkAldSIsIGNoaWxkMSgpLT5pbmRleCgpKTsKICAgICAg
ICAgaWYgKCFjaGlsZDIoKSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgb3V0LnByaW50
ZigiLCBAJXUiLCBjaGlsZDIoKS5pbmRleCgpKTsKKyAgICAgICAgb3V0LnByaW50ZigiLCBAJXUi
LCBjaGlsZDIoKS0+aW5kZXgoKSk7CiAgICAgICAgIGlmICghY2hpbGQzKCkpCiAgICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIG91dC5wcmludGYoIiwgQCV1IiwgY2hpbGQzKCkuaW5kZXgoKSk7
CisgICAgICAgIG91dC5wcmludGYoIiwgQCV1IiwgY2hpbGQzKCktPmluZGV4KCkpOwogICAgIH0K
ICAgICAKKyAgICAvLyBOQi4gVGhpcyBjbGFzcyBtdXN0IGhhdmUgYSB0cml2aWFsIGRlc3RydWN0
b3IuCisgICAgCiAgICAgLy8gVXNlZCB0byBsb29rIHVwIGV4Y2VwdGlvbiBoYW5kbGluZyBpbmZv
cm1hdGlvbiAoY3VycmVudGx5IGltcGxlbWVudGVkIGFzIGEgYnl0ZWNvZGUgaW5kZXgpLgogICAg
IENvZGVPcmlnaW4gY29kZU9yaWdpbjsKICAgICAvLyBSZWZlcmVuY2VzIHRvIHVwIHRvIDMgY2hp
bGRyZW4sIG9yIGxpbmtzIHRvIGEgdmFyaWFibGUgbGVuZ3RoIHNldCBvZiBjaGlsZHJlbi4KQEAg
LTEyMTUsMTAgKzEyMjEsMTYgQEAgcHJpdmF0ZToKIHB1YmxpYzoKICAgICAvLyBGaWVsZHMgdXNl
ZCBieSB2YXJpb3VzIGFuYWx5c2VzLgogICAgIEFic3RyYWN0VmFsdWUgdmFsdWU7Ci0gICAgTm9k
ZUluZGV4IHJlcGxhY2VtZW50OworICAgIE5vZGUqIHJlcGxhY2VtZW50OwogfTsKIAogfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkRGRwogCituYW1lc3BhY2UgV1RGIHsKKwordm9pZCBwcmludEludGVy
bmFsKFByaW50U3RyZWFtJiwgTm9kZSopOworCit9IC8vIG5hbWVzcGFjZSBXVEYKKwogI2VuZGlm
CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZUFsbG9jYXRv
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZUFsbG9j
YXRvci5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2Rl
QWxsb2NhdG9yLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTEgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdOb2RlQWxsb2NhdG9y
X2gKKyNkZWZpbmUgREZHTm9kZUFsbG9jYXRvcl9oCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0u
aD4KKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZHQWxsb2NhdG9yLmgiCisj
aW5jbHVkZSAiREZHTm9kZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisK
K3R5cGVkZWYgQWxsb2NhdG9yPE5vZGUsIDQwOTU+IE5vZGVBbGxvY2F0b3I7CisKK2lubGluZSB2
b2lkKiBvcGVyYXRvciBuZXcgKHNpemVfdCBzaXplLCBOb2RlQWxsb2NhdG9yJiBhbGxvY2F0b3Ip
Cit7CisgICAgQVNTRVJUKHNpemUgPT0gc2l6ZW9mKE5vZGUpKTsKKyAgICByZXR1cm4gYWxsb2Nh
dG9yLmFsbG9jYXRlKCk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlm
IC8vIEVOQUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZHTm9kZUFsbG9jYXRvcl9oCisKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhh
c2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGlj
dGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAxNDA1NjcpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTIg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLCAy
MDEyLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtODUsNzUgKzg1LDczIEBAIHB1YmxpYzoKIHByaXZhdGU6CiAg
ICAgYm9vbCBzZXRQcmVkaWN0aW9uKFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24pCiAgICAgewot
ICAgICAgICBBU1NFUlQobV9ncmFwaFttX2NvbXBpbGVJbmRleF0uaGFzUmVzdWx0KCkpOworICAg
ICAgICBBU1NFUlQobV9jdXJyZW50Tm9kZS0+aGFzUmVzdWx0KCkpOwogICAgICAgICAKICAgICAg
ICAgLy8gc2V0UHJlZGljdGlvbigpIGlzIHVzZWQgd2hlbiB3ZSBrbm93IHRoYXQgdGhlcmUgaXMg
bm8gd2F5IHRoYXQgd2UgY2FuIGNoYW5nZQogICAgICAgICAvLyBvdXIgbWluZHMgYWJvdXQgd2hh
dCB0aGUgcHJlZGljdGlvbiBpcyBnb2luZyB0byBiZS4gVGhlcmUgaXMgbm8gc2VtYW50aWMKICAg
ICAgICAgLy8gZGlmZmVyZW5jZSBiZXR3ZWVuIHNldFByZWRpY3Rpb24oKSBhbmQgbWVyZ2VTcGVj
dWxhdGlvbigpIG90aGVyIHRoYW4gdGhlCiAgICAgICAgIC8vIGluY3JlYXNlZCBjaGVja2luZyB0
byB2YWxpZGF0ZSB0aGlzIHByb3BlcnR5LgotICAgICAgICBBU1NFUlQobV9ncmFwaFttX2NvbXBp
bGVJbmRleF0ucHJlZGljdGlvbigpID09IFNwZWNOb25lIHx8IG1fZ3JhcGhbbV9jb21waWxlSW5k
ZXhdLnByZWRpY3Rpb24oKSA9PSBwcmVkaWN0aW9uKTsKKyAgICAgICAgQVNTRVJUKG1fY3VycmVu
dE5vZGUtPnByZWRpY3Rpb24oKSA9PSBTcGVjTm9uZSB8fCBtX2N1cnJlbnROb2RlLT5wcmVkaWN0
aW9uKCkgPT0gcHJlZGljdGlvbik7CiAgICAgICAgIAotICAgICAgICByZXR1cm4gbV9ncmFwaFtt
X2NvbXBpbGVJbmRleF0ucHJlZGljdChwcmVkaWN0aW9uKTsKKyAgICAgICAgcmV0dXJuIG1fY3Vy
cmVudE5vZGUtPnByZWRpY3QocHJlZGljdGlvbik7CiAgICAgfQogICAgIAogICAgIGJvb2wgbWVy
Z2VQcmVkaWN0aW9uKFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24pCiAgICAgewotICAgICAgICBB
U1NFUlQobV9ncmFwaFttX2NvbXBpbGVJbmRleF0uaGFzUmVzdWx0KCkpOworICAgICAgICBBU1NF
UlQobV9jdXJyZW50Tm9kZS0+aGFzUmVzdWx0KCkpOwogICAgICAgICAKLSAgICAgICAgcmV0dXJu
IG1fZ3JhcGhbbV9jb21waWxlSW5kZXhdLnByZWRpY3QocHJlZGljdGlvbik7CisgICAgICAgIHJl
dHVybiBtX2N1cnJlbnROb2RlLT5wcmVkaWN0KHByZWRpY3Rpb24pOwogICAgIH0KICAgICAKLSAg
ICBib29sIGlzTm90TmVnWmVybyhOb2RlSW5kZXggbm9kZUluZGV4KQorICAgIGJvb2wgaXNOb3RO
ZWdaZXJvKE5vZGUqIG5vZGUpCiAgICAgewotICAgICAgICBpZiAoIW1fZ3JhcGguaXNOdW1iZXJD
b25zdGFudChub2RlSW5kZXgpKQorICAgICAgICBpZiAoIW1fZ3JhcGguaXNOdW1iZXJDb25zdGFu
dChub2RlKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgZG91YmxlIHZhbHVl
ID0gbV9ncmFwaC52YWx1ZU9mTnVtYmVyQ29uc3RhbnQobm9kZUluZGV4KTsKKyAgICAgICAgZG91
YmxlIHZhbHVlID0gbV9ncmFwaC52YWx1ZU9mTnVtYmVyQ29uc3RhbnQobm9kZSk7CiAgICAgICAg
IHJldHVybiAhdmFsdWUgJiYgMS4wIC8gdmFsdWUgPCAwLjA7CiAgICAgfQogICAgIAotICAgIGJv
b2wgaXNOb3RaZXJvKE5vZGVJbmRleCBub2RlSW5kZXgpCisgICAgYm9vbCBpc05vdFplcm8oTm9k
ZSogbm9kZSkKICAgICB7Ci0gICAgICAgIGlmICghbV9ncmFwaC5pc051bWJlckNvbnN0YW50KG5v
ZGVJbmRleCkpCisgICAgICAgIGlmICghbV9ncmFwaC5pc051bWJlckNvbnN0YW50KG5vZGUpKQog
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICByZXR1cm4gISFtX2dyYXBoLnZhbHVl
T2ZOdW1iZXJDb25zdGFudChub2RlSW5kZXgpOworICAgICAgICByZXR1cm4gISFtX2dyYXBoLnZh
bHVlT2ZOdW1iZXJDb25zdGFudChub2RlKTsKICAgICB9CiAgICAgCi0gICAgYm9vbCBpc1dpdGhp
blBvd2VyT2ZUd29Gb3JDb25zdGFudChOb2RlJiBub2RlLCBpbnQgcG93ZXIpCisgICAgYm9vbCBp
c1dpdGhpblBvd2VyT2ZUd29Gb3JDb25zdGFudChOb2RlKiBub2RlLCBpbnQgcG93ZXIpCiAgICAg
ewotICAgICAgICBKU1ZhbHVlIGltbWVkaWF0ZVZhbHVlID0gbm9kZS52YWx1ZU9mSlNDb25zdGFu
dChjb2RlQmxvY2soKSk7CisgICAgICAgIEpTVmFsdWUgaW1tZWRpYXRlVmFsdWUgPSBub2RlLT52
YWx1ZU9mSlNDb25zdGFudChjb2RlQmxvY2soKSk7CiAgICAgICAgIGlmICghaW1tZWRpYXRlVmFs
dWUuaXNJbnQzMigpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBpbnQzMl90
IGludEltbWVkaWF0ZSA9IGltbWVkaWF0ZVZhbHVlLmFzSW50MzIoKTsKICAgICAgICAgcmV0dXJu
IGludEltbWVkaWF0ZSA+IC0oMSA8PCBwb3dlcikgJiYgaW50SW1tZWRpYXRlIDwgKDEgPDwgcG93
ZXIpOwogICAgIH0KICAgICAKLSAgICBib29sIGlzV2l0aGluUG93ZXJPZlR3b05vblJlY3Vyc2l2
ZShOb2RlSW5kZXggbm9kZUluZGV4LCBpbnQgcG93ZXIpCisgICAgYm9vbCBpc1dpdGhpblBvd2Vy
T2ZUd29Ob25SZWN1cnNpdmUoTm9kZSogbm9kZSwgaW50IHBvd2VyKQogICAgIHsKLSAgICAgICAg
Tm9kZSYgbm9kZSA9IG1fZ3JhcGhbbm9kZUluZGV4XTsKLSAgICAgICAgaWYgKG5vZGUub3AoKSAh
PSBKU0NvbnN0YW50KQorICAgICAgICBpZiAobm9kZS0+b3AoKSAhPSBKU0NvbnN0YW50KQogICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICByZXR1cm4gaXNXaXRoaW5Qb3dlck9mVHdv
Rm9yQ29uc3RhbnQobm9kZSwgcG93ZXIpOwogICAgIH0KICAgICAKLSAgICBib29sIGlzV2l0aGlu
UG93ZXJPZlR3byhOb2RlSW5kZXggbm9kZUluZGV4LCBpbnQgcG93ZXIpCisgICAgYm9vbCBpc1dp
dGhpblBvd2VyT2ZUd28oTm9kZSogbm9kZSwgaW50IHBvd2VyKQogICAgIHsKLSAgICAgICAgTm9k
ZSYgbm9kZSA9IG1fZ3JhcGhbbm9kZUluZGV4XTsKLSAgICAgICAgc3dpdGNoIChub2RlLm9wKCkp
IHsKKyAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CiAgICAgICAgIGNhc2UgSlNDb25zdGFu
dDogewogICAgICAgICAgICAgcmV0dXJuIGlzV2l0aGluUG93ZXJPZlR3b0ZvckNvbnN0YW50KG5v
ZGUsIHBvd2VyKTsKICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgQml0QW5k
OiB7Ci0gICAgICAgICAgICByZXR1cm4gaXNXaXRoaW5Qb3dlck9mVHdvTm9uUmVjdXJzaXZlKG5v
ZGUuY2hpbGQxKCkuaW5kZXgoKSwgcG93ZXIpCi0gICAgICAgICAgICAgICAgfHwgaXNXaXRoaW5Q
b3dlck9mVHdvTm9uUmVjdXJzaXZlKG5vZGUuY2hpbGQyKCkuaW5kZXgoKSwgcG93ZXIpOworICAg
ICAgICAgICAgcmV0dXJuIGlzV2l0aGluUG93ZXJPZlR3b05vblJlY3Vyc2l2ZShub2RlLT5jaGls
ZDEoKS5ub2RlKCksIHBvd2VyKQorICAgICAgICAgICAgICAgIHx8IGlzV2l0aGluUG93ZXJPZlR3
b05vblJlY3Vyc2l2ZShub2RlLT5jaGlsZDIoKS5ub2RlKCksIHBvd2VyKTsKICAgICAgICAgfQog
ICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgQml0UlNoaWZ0OgogICAgICAgICBjYXNlIEJpdFVS
U2hpZnQ6IHsKLSAgICAgICAgICAgIE5vZGUmIHNoaWZ0QW1vdW50ID0gbV9ncmFwaFtub2RlLmNo
aWxkMigpXTsKLSAgICAgICAgICAgIGlmIChzaGlmdEFtb3VudC5vcCgpICE9IEpTQ29uc3RhbnQp
CisgICAgICAgICAgICBOb2RlKiBzaGlmdEFtb3VudCA9IG5vZGUtPmNoaWxkMigpLm5vZGUoKTsK
KyAgICAgICAgICAgIGlmIChzaGlmdEFtb3VudC0+b3AoKSAhPSBKU0NvbnN0YW50KQogICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIEpTVmFsdWUgaW1tZWRpYXRlVmFs
dWUgPSBzaGlmdEFtb3VudC52YWx1ZU9mSlNDb25zdGFudChjb2RlQmxvY2soKSk7CisgICAgICAg
ICAgICBKU1ZhbHVlIGltbWVkaWF0ZVZhbHVlID0gc2hpZnRBbW91bnQtPnZhbHVlT2ZKU0NvbnN0
YW50KGNvZGVCbG9jaygpKTsKICAgICAgICAgICAgIGlmICghaW1tZWRpYXRlVmFsdWUuaXNJbnQz
MigpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgIHJldHVybiBp
bW1lZGlhdGVWYWx1ZSA+IDMyIC0gcG93ZXI7CkBAIC0xNzgsMTYgKzE3NiwxNiBAQCBwcml2YXRl
OgogICAgICAgICByZXR1cm4gc3BlY3VsYXRlZERvdWJsZVR5cGVGb3JQcmVkaWN0aW9uKG1lcmdl
U3BlY3VsYXRpb25zKGxlZnQsIHJpZ2h0KSk7CiAgICAgfQogCi0gICAgdm9pZCBwcm9wYWdhdGUo
Tm9kZSYgbm9kZSkKKyAgICB2b2lkIHByb3BhZ2F0ZShOb2RlKiBub2RlKQogICAgIHsKLSAgICAg
ICAgaWYgKCFub2RlLnNob3VsZEdlbmVyYXRlKCkpCisgICAgICAgIGlmICghbm9kZS0+c2hvdWxk
R2VuZXJhdGUoKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgCi0gICAgICAgIE5vZGVU
eXBlIG9wID0gbm9kZS5vcCgpOwotICAgICAgICBOb2RlRmxhZ3MgZmxhZ3MgPSBub2RlLmZsYWdz
KCkgJiBOb2RlQmFja1Byb3BNYXNrOworICAgICAgICBOb2RlVHlwZSBvcCA9IG5vZGUtPm9wKCk7
CisgICAgICAgIE5vZGVGbGFncyBmbGFncyA9IG5vZGUtPmZsYWdzKCkgJiBOb2RlQmFja1Byb3BN
YXNrOwogCiAjaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQotICAgICAg
ICBkYXRhTG9nRigiICAgJXMgQCV1OiAlcyAiLCBHcmFwaDo6b3BOYW1lKG9wKSwgbV9jb21waWxl
SW5kZXgsIG5vZGVGbGFnc0FzU3RyaW5nKGZsYWdzKSk7CisgICAgICAgIGRhdGFMb2coIiAgICIs
IEdyYXBoOjpvcE5hbWUob3ApLCAiICIsIG1fY3VycmVudE5vZGUsICI6ICIsIG5vZGVGbGFnc0Fz
U3RyaW5nKGZsYWdzKSwgIiAiKTsKICNlbmRpZgogICAgICAgICAKICAgICAgICAgYm9vbCBjaGFu
Z2VkID0gZmFsc2U7CkBAIC0xOTUsMTIgKzE5MywxMiBAQCBwcml2YXRlOgogICAgICAgICBzd2l0
Y2ggKG9wKSB7CiAgICAgICAgIGNhc2UgSlNDb25zdGFudDoKICAgICAgICAgY2FzZSBXZWFrSlND
b25zdGFudDogewotICAgICAgICAgICAgY2hhbmdlZCB8PSBzZXRQcmVkaWN0aW9uKHNwZWN1bGF0
aW9uRnJvbVZhbHVlKG1fZ3JhcGgudmFsdWVPZkpTQ29uc3RhbnQobV9jb21waWxlSW5kZXgpKSk7
CisgICAgICAgICAgICBjaGFuZ2VkIHw9IHNldFByZWRpY3Rpb24oc3BlY3VsYXRpb25Gcm9tVmFs
dWUobV9ncmFwaC52YWx1ZU9mSlNDb25zdGFudChub2RlKSkpOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBjYXNlIEdldExvY2FsOiB7Ci0gICAg
ICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9IG5vZGUudmFy
aWFibGVBY2Nlc3NEYXRhKCk7CisgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlh
YmxlQWNjZXNzRGF0YSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOwogICAgICAgICAgICAg
U3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiA9IHZhcmlhYmxlQWNjZXNzRGF0YS0+cHJlZGljdGlv
bigpOwogICAgICAgICAgICAgaWYgKHByZWRpY3Rpb24pCiAgICAgICAgICAgICAgICAgY2hhbmdl
ZCB8PSBtZXJnZVByZWRpY3Rpb24ocHJlZGljdGlvbik7CkBAIC0yMTAsMjEgKzIwOCwyMSBAQCBw
cml2YXRlOgogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBTZXRMb2NhbDog
ewotICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBu
b2RlLnZhcmlhYmxlQWNjZXNzRGF0YSgpOwotICAgICAgICAgICAgY2hhbmdlZCB8PSB2YXJpYWJs
ZUFjY2Vzc0RhdGEtPnByZWRpY3QobV9ncmFwaFtub2RlLmNoaWxkMSgpXS5wcmVkaWN0aW9uKCkp
OworICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBu
b2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gdmFyaWFi
bGVBY2Nlc3NEYXRhLT5wcmVkaWN0KG5vZGUtPmNoaWxkMSgpLT5wcmVkaWN0aW9uKCkpOwogCiAg
ICAgICAgICAgICAvLyBBc3N1bWUgY29uc2VydmF0aXZlbHkgdGhhdCBhIFNldExvY2FsIGltcGxp
ZXMgdGhhdCB0aGUgdmFsdWUgbWF5IGZsb3cgdGhyb3VnaCBhIGxvb3AsCiAgICAgICAgICAgICAv
LyBhbmQgc28gd2Ugd291bGQgaGF2ZSBvdmVyZmxvdyBsZWFkaW5nIHRvIHRoZSBwcm9ncmFtICJv
YnNlcnZpbmciIG51bWJlcnMgZXZlbiBpZiBhbGwKICAgICAgICAgICAgIC8vIHVzZXJzIG9mIHRo
ZSB2YWx1ZSBhcmUgZG9pbmcgdG9JbnQzMi4gSXQgbWlnaHQgYmUgd29ydGh3aGlsZSB0byByZXZp
c2l0IHRoaXMgYXQgc29tZQogICAgICAgICAgICAgLy8gcG9pbnQgYW5kIGFjdHVhbGx5IGNoZWNr
IGlmIHRoZSBkYXRhIGZsb3cgaW52b2x2ZXMgbG9vcHMsIGJ1dCByaWdodCBub3cgSSBkb24ndCB0
aGluawogICAgICAgICAgICAgLy8gd2UgaGF2ZSBldmlkZW5jZSB0aGF0IHRoaXMgd291bGQgYmUg
YmVuZWZpY2lhbCBmb3IgYmVuY2htYXJrcy4KLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFw
aFtub2RlLmNoaWxkMSgpXS5tZXJnZUZsYWdzKHZhcmlhYmxlQWNjZXNzRGF0YS0+ZmxhZ3MoKSB8
IE5vZGVVc2VkQXNOdW1iZXIpOworICAgICAgICAgICAgY2hhbmdlZCB8PSBub2RlLT5jaGlsZDEo
KS0+bWVyZ2VGbGFncyh2YXJpYWJsZUFjY2Vzc0RhdGEtPmZsYWdzKCkgfCBOb2RlVXNlZEFzTnVt
YmVyKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAg
ICAgY2FzZSBGbHVzaDogewogICAgICAgICAgICAgLy8gTWFrZSBzdXJlIHRoYXQgdGhlIGFuYWx5
c2lzIGtub3dzIHRoYXQgZmx1c2hlZCBsb2NhbHMgZXNjYXBlLgotICAgICAgICAgICAgVmFyaWFi
bGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBub2RlLnZhcmlhYmxlQWNjZXNzRGF0
YSgpOworICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEg
PSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKICAgICAgICAgICAgIGNoYW5nZWQgfD0gdmFy
aWFibGVBY2Nlc3NEYXRhLT5tZXJnZUZsYWdzKE5vZGVVc2VkQXNWYWx1ZSk7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgfQpAQCAtMjM4LDggKzIzNiw4IEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICBjaGFuZ2VkIHw9IHNldFByZWRpY3Rpb24oU3BlY0ludDMyKTsKICAgICAgICAgICAgIGZs
YWdzIHw9IE5vZGVVc2VkQXNJbnQgfCBOb2RlVXNlZEFzSW50TG9jYWxseTsKICAgICAgICAgICAg
IGZsYWdzICY9IH4oTm9kZVVzZWRBc051bWJlciB8IE5vZGVOZWVkc05lZ1plcm8gfCBOb2RlVXNl
ZEFzT3RoZXIpOwotICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQxKCld
Lm1lcmdlRmxhZ3MoZmxhZ3MpOwotICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW25vZGUu
Y2hpbGQyKCldLm1lcmdlRmxhZ3MoZmxhZ3MpOworICAgICAgICAgICAgY2hhbmdlZCB8PSBub2Rl
LT5jaGlsZDEoKS0+bWVyZ2VGbGFncyhmbGFncyk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG5v
ZGUtPmNoaWxkMigpLT5tZXJnZUZsYWdzKGZsYWdzKTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICB9CiAgICAgICAgICAgICAKQEAgLTI0Nyw1MCArMjQ1LDUwIEBAIHByaXZhdGU6CiAgICAg
ICAgICAgICBjaGFuZ2VkIHw9IHNldFByZWRpY3Rpb24oU3BlY0ludDMyKTsKICAgICAgICAgICAg
IGZsYWdzIHw9IE5vZGVVc2VkQXNJbnQgfCBOb2RlVXNlZEFzSW50TG9jYWxseTsKICAgICAgICAg
ICAgIGZsYWdzICY9IH4oTm9kZVVzZWRBc051bWJlciB8IE5vZGVOZWVkc05lZ1plcm8gfCBOb2Rl
VXNlZEFzT3RoZXIpOwotICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQx
KCldLm1lcmdlRmxhZ3MoZmxhZ3MpOworICAgICAgICAgICAgY2hhbmdlZCB8PSBub2RlLT5jaGls
ZDEoKS0+bWVyZ2VGbGFncyhmbGFncyk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQog
ICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgQXJyYXlQb3A6IHsKLSAgICAgICAgICAgIGNoYW5n
ZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKG5vZGUuZ2V0SGVhcFByZWRpY3Rpb24oKSk7CisgICAgICAg
ICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbihub2RlLT5nZXRIZWFwUHJlZGljdGlvbigp
KTsKICAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VEZWZhdWx0RmxhZ3Mobm9kZSk7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQogCiAgICAgICAgIGNhc2UgQXJyYXlQdXNoOiB7Ci0g
ICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbihub2RlLmdldEhlYXBQcmVkaWN0
aW9uKCkpOwotICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLm1l
cmdlRmxhZ3MoTm9kZVVzZWRBc1ZhbHVlKTsKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFw
aFtub2RlLmNoaWxkMigpXS5tZXJnZUZsYWdzKE5vZGVVc2VkQXNWYWx1ZSk7CisgICAgICAgICAg
ICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbihub2RlLT5nZXRIZWFwUHJlZGljdGlvbigpKTsK
KyAgICAgICAgICAgIGNoYW5nZWQgfD0gbm9kZS0+Y2hpbGQxKCktPm1lcmdlRmxhZ3MoTm9kZVVz
ZWRBc1ZhbHVlKTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbm9kZS0+Y2hpbGQyKCktPm1lcmdl
RmxhZ3MoTm9kZVVzZWRBc1ZhbHVlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAK
ICAgICAgICAgY2FzZSBSZWdFeHBFeGVjOgogICAgICAgICBjYXNlIFJlZ0V4cFRlc3Q6IHsKLSAg
ICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKG5vZGUuZ2V0SGVhcFByZWRpY3Rp
b24oKSk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbihub2RlLT5nZXRI
ZWFwUHJlZGljdGlvbigpKTsKICAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VEZWZhdWx0Rmxh
Z3Mobm9kZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCiAgICAgICAgIGNhc2Ug
U3RyaW5nQ2hhckNvZGVBdDogewogICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVByZWRpY3Rp
b24oU3BlY0ludDMyKTsKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaFtub2RlLmNoaWxk
MSgpXS5tZXJnZUZsYWdzKE5vZGVVc2VkQXNWYWx1ZSk7Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9
IG1fZ3JhcGhbbm9kZS5jaGlsZDIoKV0ubWVyZ2VGbGFncyhOb2RlVXNlZEFzTnVtYmVyIHwgTm9k
ZVVzZWRBc090aGVyIHwgTm9kZVVzZWRBc0ludCB8IE5vZGVVc2VkQXNJbnRMb2NhbGx5KTsKKyAg
ICAgICAgICAgIGNoYW5nZWQgfD0gbm9kZS0+Y2hpbGQxKCktPm1lcmdlRmxhZ3MoTm9kZVVzZWRB
c1ZhbHVlKTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbm9kZS0+Y2hpbGQyKCktPm1lcmdlRmxh
Z3MoTm9kZVVzZWRBc051bWJlciB8IE5vZGVVc2VkQXNPdGhlciB8IE5vZGVVc2VkQXNJbnQgfCBO
b2RlVXNlZEFzSW50TG9jYWxseSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCiAg
ICAgICAgIGNhc2UgVUludDMyVG9OdW1iZXI6IHsKLSAgICAgICAgICAgIGlmIChub2RlQ2FuU3Bl
Y3VsYXRlSW50ZWdlcihub2RlLmFyaXRoTm9kZUZsYWdzKCkpKQorICAgICAgICAgICAgaWYgKG5v
ZGVDYW5TcGVjdWxhdGVJbnRlZ2VyKG5vZGUtPmFyaXRoTm9kZUZsYWdzKCkpKQogICAgICAgICAg
ICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKFNwZWNJbnQzMik7CiAgICAgICAgICAg
ICBlbHNlCiAgICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVByZWRpY3Rpb24oU3BlY051
bWJlcik7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaFtub2Rl
LmNoaWxkMSgpXS5tZXJnZUZsYWdzKGZsYWdzKTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbm9k
ZS0+Y2hpbGQxKCktPm1lcmdlRmxhZ3MoZmxhZ3MpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIH0KIAogICAgICAgICBjYXNlIFZhbHVlQWRkOiB7Ci0gICAgICAgICAgICBTcGVjdWxhdGVk
VHlwZSBsZWZ0ID0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5wcmVkaWN0aW9uKCk7Ci0gICAgICAg
ICAgICBTcGVjdWxhdGVkVHlwZSByaWdodCA9IG1fZ3JhcGhbbm9kZS5jaGlsZDIoKV0ucHJlZGlj
dGlvbigpOworICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgbGVmdCA9IG5vZGUtPmNoaWxkMSgp
LT5wcmVkaWN0aW9uKCk7CisgICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSByaWdodCA9IG5vZGUt
PmNoaWxkMigpLT5wcmVkaWN0aW9uKCk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIEFkZFNw
ZWN1bGF0aW9uTW9kZSBtb2RlID0gRG9udFNwZWN1bGF0ZUludGVnZXI7CiAgICAgICAgICAgICAK
QEAgLTMwNywyMiArMzA1LDIyIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgIGNoYW5n
ZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKFNwZWNTdHJpbmcgfCBTcGVjSW50MzIgfCBTcGVjRG91Ymxl
KTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKGlzTm90TmVn
WmVybyhub2RlLmNoaWxkMSgpLmluZGV4KCkpIHx8IGlzTm90TmVnWmVybyhub2RlLmNoaWxkMigp
LmluZGV4KCkpKQorICAgICAgICAgICAgaWYgKGlzTm90TmVnWmVybyhub2RlLT5jaGlsZDEoKS5u
b2RlKCkpIHx8IGlzTm90TmVnWmVybyhub2RlLT5jaGlsZDIoKS5ub2RlKCkpKQogICAgICAgICAg
ICAgICAgIGZsYWdzICY9IH5Ob2RlTmVlZHNOZWdaZXJvOwotICAgICAgICAgICAgaWYgKG1fZ3Jh
cGhbbm9kZS5jaGlsZDEoKV0uaGFzTnVtYmVyUmVzdWx0KCkgfHwgbV9ncmFwaFtub2RlLmNoaWxk
MigpXS5oYXNOdW1iZXJSZXN1bHQoKSkKKyAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS0+
aGFzTnVtYmVyUmVzdWx0KCkgfHwgbm9kZS0+Y2hpbGQyKCktPmhhc051bWJlclJlc3VsdCgpKQog
ICAgICAgICAgICAgICAgIGZsYWdzICY9IH5Ob2RlVXNlZEFzT3RoZXI7CiAgICAgICAgICAgICAK
ICAgICAgICAgICAgIGlmIChtb2RlICE9IFNwZWN1bGF0ZUludGVnZXIpCiAgICAgICAgICAgICAg
ICAgZmxhZ3MgfD0gTm9kZVVzZWRBc051bWJlcjsKICAgICAgICAgICAgIAotICAgICAgICAgICAg
Y2hhbmdlZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLm1lcmdlRmxhZ3MoZmxhZ3MpOwotICAg
ICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQyKCldLm1lcmdlRmxhZ3MoZmxh
Z3MpOworICAgICAgICAgICAgY2hhbmdlZCB8PSBub2RlLT5jaGlsZDEoKS0+bWVyZ2VGbGFncyhm
bGFncyk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG5vZGUtPmNoaWxkMigpLT5tZXJnZUZsYWdz
KGZsYWdzKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKICAg
ICAgICAgY2FzZSBBcml0aEFkZDogewotICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgbGVmdCA9
IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ucHJlZGljdGlvbigpOwotICAgICAgICAgICAgU3BlY3Vs
YXRlZFR5cGUgcmlnaHQgPSBtX2dyYXBoW25vZGUuY2hpbGQyKCldLnByZWRpY3Rpb24oKTsKKyAg
ICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIGxlZnQgPSBub2RlLT5jaGlsZDEoKS0+cHJlZGljdGlv
bigpOworICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgcmlnaHQgPSBub2RlLT5jaGlsZDIoKS0+
cHJlZGljdGlvbigpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBBZGRTcGVjdWxhdGlvbk1v
ZGUgbW9kZSA9IERvbnRTcGVjdWxhdGVJbnRlZ2VyOwogICAgICAgICAgICAgCkBAIC0zMzMsMjEg
KzMzMSwyMSBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdl
UHJlZGljdGlvbihzcGVjdWxhdGVkRG91YmxlVHlwZUZvclByZWRpY3Rpb25zKGxlZnQsIHJpZ2h0
KSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChpc05vdE5l
Z1plcm8obm9kZS5jaGlsZDEoKS5pbmRleCgpKSB8fCBpc05vdE5lZ1plcm8obm9kZS5jaGlsZDIo
KS5pbmRleCgpKSkKKyAgICAgICAgICAgIGlmIChpc05vdE5lZ1plcm8obm9kZS0+Y2hpbGQxKCku
bm9kZSgpKSB8fCBpc05vdE5lZ1plcm8obm9kZS0+Y2hpbGQyKCkubm9kZSgpKSkKICAgICAgICAg
ICAgICAgICBmbGFncyAmPSB+Tm9kZU5lZWRzTmVnWmVybzsKICAgICAgICAgICAgIGZsYWdzICY9
IH5Ob2RlVXNlZEFzT3RoZXI7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlmIChtb2RlICE9
IFNwZWN1bGF0ZUludGVnZXIpCiAgICAgICAgICAgICAgICAgZmxhZ3MgfD0gTm9kZVVzZWRBc051
bWJlcjsKICAgICAgICAgICAgIAotICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW25vZGUu
Y2hpbGQxKCldLm1lcmdlRmxhZ3MoZmxhZ3MpOwotICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dy
YXBoW25vZGUuY2hpbGQyKCldLm1lcmdlRmxhZ3MoZmxhZ3MpOworICAgICAgICAgICAgY2hhbmdl
ZCB8PSBub2RlLT5jaGlsZDEoKS0+bWVyZ2VGbGFncyhmbGFncyk7CisgICAgICAgICAgICBjaGFu
Z2VkIHw9IG5vZGUtPmNoaWxkMigpLT5tZXJnZUZsYWdzKGZsYWdzKTsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBBcml0aFN1Yjogewot
ICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgbGVmdCA9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0u
cHJlZGljdGlvbigpOwotICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgcmlnaHQgPSBtX2dyYXBo
W25vZGUuY2hpbGQyKCldLnByZWRpY3Rpb24oKTsKKyAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBl
IGxlZnQgPSBub2RlLT5jaGlsZDEoKS0+cHJlZGljdGlvbigpOworICAgICAgICAgICAgU3BlY3Vs
YXRlZFR5cGUgcmlnaHQgPSBub2RlLT5jaGlsZDIoKS0+cHJlZGljdGlvbigpOwogICAgICAgICAg
ICAgCiAgICAgICAgICAgICBBZGRTcGVjdWxhdGlvbk1vZGUgbW9kZSA9IERvbnRTcGVjdWxhdGVJ
bnRlZ2VyOwogICAgICAgICAgICAgCkBAIC0zNTgsMzkgKzM1NiwzOSBAQCBwcml2YXRlOgogICAg
ICAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbihzcGVjdWxhdGVkRG91
YmxlVHlwZUZvclByZWRpY3Rpb25zKGxlZnQsIHJpZ2h0KSk7CiAgICAgICAgICAgICB9CiAKLSAg
ICAgICAgICAgIGlmIChpc05vdFplcm8obm9kZS5jaGlsZDEoKS5pbmRleCgpKSB8fCBpc05vdFpl
cm8obm9kZS5jaGlsZDIoKS5pbmRleCgpKSkKKyAgICAgICAgICAgIGlmIChpc05vdFplcm8obm9k
ZS0+Y2hpbGQxKCkubm9kZSgpKSB8fCBpc05vdFplcm8obm9kZS0+Y2hpbGQyKCkubm9kZSgpKSkK
ICAgICAgICAgICAgICAgICBmbGFncyAmPSB+Tm9kZU5lZWRzTmVnWmVybzsKICAgICAgICAgICAg
IGZsYWdzICY9IH5Ob2RlVXNlZEFzT3RoZXI7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlm
IChtb2RlICE9IFNwZWN1bGF0ZUludGVnZXIpCiAgICAgICAgICAgICAgICAgZmxhZ3MgfD0gTm9k
ZVVzZWRBc051bWJlcjsKICAgICAgICAgICAgIAotICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dy
YXBoW25vZGUuY2hpbGQxKCldLm1lcmdlRmxhZ3MoZmxhZ3MpOwotICAgICAgICAgICAgY2hhbmdl
ZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQyKCldLm1lcmdlRmxhZ3MoZmxhZ3MpOworICAgICAgICAg
ICAgY2hhbmdlZCB8PSBub2RlLT5jaGlsZDEoKS0+bWVyZ2VGbGFncyhmbGFncyk7CisgICAgICAg
ICAgICBjaGFuZ2VkIHw9IG5vZGUtPmNoaWxkMigpLT5tZXJnZUZsYWdzKGZsYWdzKTsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBBcml0
aE5lZ2F0ZToKLSAgICAgICAgICAgIGlmIChtX2dyYXBoW25vZGUuY2hpbGQxKCldLnByZWRpY3Rp
b24oKSkgeworICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5wcmVkaWN0aW9uKCkpIHsK
ICAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC5uZWdhdGVTaG91bGRTcGVjdWxhdGVJbnRlZ2Vy
KG5vZGUpKQogICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbihT
cGVjSW50MzIpOwogICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgY2hh
bmdlZCB8PSBtZXJnZVByZWRpY3Rpb24oc3BlY3VsYXRlZERvdWJsZVR5cGVGb3JQcmVkaWN0aW9u
KG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ucHJlZGljdGlvbigpKSk7CisgICAgICAgICAgICAgICAg
ICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKHNwZWN1bGF0ZWREb3VibGVUeXBlRm9yUHJl
ZGljdGlvbihub2RlLT5jaGlsZDEoKS0+cHJlZGljdGlvbigpKSk7CiAgICAgICAgICAgICB9CiAK
ICAgICAgICAgICAgIGZsYWdzICY9IH5Ob2RlVXNlZEFzT3RoZXI7CiAKLSAgICAgICAgICAgIGNo
YW5nZWQgfD0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5tZXJnZUZsYWdzKGZsYWdzKTsKKyAgICAg
ICAgICAgIGNoYW5nZWQgfD0gbm9kZS0+Y2hpbGQxKCktPm1lcmdlRmxhZ3MoZmxhZ3MpOwogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBBcml0aE1pbjoKICAg
ICAgICAgY2FzZSBBcml0aE1heDogewotICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgbGVmdCA9
IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ucHJlZGljdGlvbigpOwotICAgICAgICAgICAgU3BlY3Vs
YXRlZFR5cGUgcmlnaHQgPSBtX2dyYXBoW25vZGUuY2hpbGQyKCldLnByZWRpY3Rpb24oKTsKKyAg
ICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIGxlZnQgPSBub2RlLT5jaGlsZDEoKS0+cHJlZGljdGlv
bigpOworICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgcmlnaHQgPSBub2RlLT5jaGlsZDIoKS0+
cHJlZGljdGlvbigpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAobGVmdCAmJiByaWdo
dCkgewotICAgICAgICAgICAgICAgIGlmIChOb2RlOjpzaG91bGRTcGVjdWxhdGVJbnRlZ2VyRm9y
QXJpdGhtZXRpYyhtX2dyYXBoW25vZGUuY2hpbGQxKCldLCBtX2dyYXBoW25vZGUuY2hpbGQyKCld
KQotICAgICAgICAgICAgICAgICAgICAmJiBub2RlQ2FuU3BlY3VsYXRlSW50ZWdlcihub2RlLmFy
aXRoTm9kZUZsYWdzKCkpKQorICAgICAgICAgICAgICAgIGlmIChOb2RlOjpzaG91bGRTcGVjdWxh
dGVJbnRlZ2VyRm9yQXJpdGhtZXRpYyhub2RlLT5jaGlsZDEoKS5ub2RlKCksIG5vZGUtPmNoaWxk
MigpLm5vZGUoKSkKKyAgICAgICAgICAgICAgICAgICAgJiYgbm9kZUNhblNwZWN1bGF0ZUludGVn
ZXIobm9kZS0+YXJpdGhOb2RlRmxhZ3MoKSkpCiAgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQg
fD0gbWVyZ2VQcmVkaWN0aW9uKFNwZWNJbnQzMik7CiAgICAgICAgICAgICAgICAgZWxzZQogICAg
ICAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbihzcGVjdWxhdGVkRG91
YmxlVHlwZUZvclByZWRpY3Rpb25zKGxlZnQsIHJpZ2h0KSk7CkBAIC0zOTksMTQgKzM5NywxNCBA
QCBwcml2YXRlOgogICAgICAgICAgICAgZmxhZ3MgfD0gTm9kZVVzZWRBc051bWJlcjsKICAgICAg
ICAgICAgIGZsYWdzICY9IH5Ob2RlVXNlZEFzT3RoZXI7CiAKLSAgICAgICAgICAgIGNoYW5nZWQg
fD0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5tZXJnZUZsYWdzKGZsYWdzKTsKLSAgICAgICAgICAg
IGNoYW5nZWQgfD0gbV9ncmFwaFtub2RlLmNoaWxkMigpXS5tZXJnZUZsYWdzKGZsYWdzKTsKKyAg
ICAgICAgICAgIGNoYW5nZWQgfD0gbm9kZS0+Y2hpbGQxKCktPm1lcmdlRmxhZ3MoZmxhZ3MpOwor
ICAgICAgICAgICAgY2hhbmdlZCB8PSBub2RlLT5jaGlsZDIoKS0+bWVyZ2VGbGFncyhmbGFncyk7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCiAgICAgICAgIGNhc2UgQXJpdGhNdWw6
IHsKLSAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIGxlZnQgPSBtX2dyYXBoW25vZGUuY2hpbGQx
KCldLnByZWRpY3Rpb24oKTsKLSAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHJpZ2h0ID0gbV9n
cmFwaFtub2RlLmNoaWxkMigpXS5wcmVkaWN0aW9uKCk7CisgICAgICAgICAgICBTcGVjdWxhdGVk
VHlwZSBsZWZ0ID0gbm9kZS0+Y2hpbGQxKCktPnByZWRpY3Rpb24oKTsKKyAgICAgICAgICAgIFNw
ZWN1bGF0ZWRUeXBlIHJpZ2h0ID0gbm9kZS0+Y2hpbGQyKCktPnByZWRpY3Rpb24oKTsKICAgICAg
ICAgICAgIAogICAgICAgICAgICAgaWYgKGxlZnQgJiYgcmlnaHQpIHsKICAgICAgICAgICAgICAg
ICBpZiAobV9ncmFwaC5tdWxTaG91bGRTcGVjdWxhdGVJbnRlZ2VyKG5vZGUpKQpAQCAtNDIyLDgg
KzQyMCw4IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAvLyBpdHNlbGYgdW5sZXNzIHdlIGNhbiBw
cm92ZSB0aGF0IHRoZXJlIGlzIG5vIHdheSBmb3IgdGhlIHZhbHVlcwogICAgICAgICAgICAgLy8g
cHJvZHVjZWQgdG8gY2F1c2UgZG91YmxlIHJvdW5kaW5nLgogICAgICAgICAgICAgCi0gICAgICAg
ICAgICBpZiAoIWlzV2l0aGluUG93ZXJPZlR3byhub2RlLmNoaWxkMSgpLmluZGV4KCksIDIyKQot
ICAgICAgICAgICAgICAgICYmICFpc1dpdGhpblBvd2VyT2ZUd28obm9kZS5jaGlsZDIoKS5pbmRl
eCgpLCAyMikpCisgICAgICAgICAgICBpZiAoIWlzV2l0aGluUG93ZXJPZlR3byhub2RlLT5jaGls
ZDEoKS5ub2RlKCksIDIyKQorICAgICAgICAgICAgICAgICYmICFpc1dpdGhpblBvd2VyT2ZUd28o
bm9kZS0+Y2hpbGQyKCkubm9kZSgpLCAyMikpCiAgICAgICAgICAgICAgICAgZmxhZ3MgfD0gTm9k
ZVVzZWRBc051bWJlcjsKICAgICAgICAgICAgIAogICAgICAgICAgICAgY2hhbmdlZCB8PSBub2Rl
Lm1lcmdlRmxhZ3MoZmxhZ3MpOwpAQCAtNDMxLDE4ICs0MjksMTggQEAgcHJpdmF0ZToKICAgICAg
ICAgICAgIGZsYWdzIHw9IE5vZGVVc2VkQXNOdW1iZXIgfCBOb2RlTmVlZHNOZWdaZXJvOwogICAg
ICAgICAgICAgZmxhZ3MgJj0gfk5vZGVVc2VkQXNPdGhlcjsKIAotICAgICAgICAgICAgY2hhbmdl
ZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLm1lcmdlRmxhZ3MoZmxhZ3MpOwotICAgICAgICAg
ICAgY2hhbmdlZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQyKCldLm1lcmdlRmxhZ3MoZmxhZ3MpOwor
ICAgICAgICAgICAgY2hhbmdlZCB8PSBub2RlLT5jaGlsZDEoKS0+bWVyZ2VGbGFncyhmbGFncyk7
CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG5vZGUtPmNoaWxkMigpLT5tZXJnZUZsYWdzKGZsYWdz
KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAg
Y2FzZSBBcml0aERpdjogewotICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgbGVmdCA9IG1fZ3Jh
cGhbbm9kZS5jaGlsZDEoKV0ucHJlZGljdGlvbigpOwotICAgICAgICAgICAgU3BlY3VsYXRlZFR5
cGUgcmlnaHQgPSBtX2dyYXBoW25vZGUuY2hpbGQyKCldLnByZWRpY3Rpb24oKTsKKyAgICAgICAg
ICAgIFNwZWN1bGF0ZWRUeXBlIGxlZnQgPSBub2RlLT5jaGlsZDEoKS0+cHJlZGljdGlvbigpOwor
ICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgcmlnaHQgPSBub2RlLT5jaGlsZDIoKS0+cHJlZGlj
dGlvbigpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAobGVmdCAmJiByaWdodCkgewot
ICAgICAgICAgICAgICAgIGlmIChOb2RlOjpzaG91bGRTcGVjdWxhdGVJbnRlZ2VyRm9yQXJpdGht
ZXRpYyhtX2dyYXBoW25vZGUuY2hpbGQxKCldLCBtX2dyYXBoW25vZGUuY2hpbGQyKCldKQotICAg
ICAgICAgICAgICAgICAgICAmJiBub2RlQ2FuU3BlY3VsYXRlSW50ZWdlcihub2RlLmFyaXRoTm9k
ZUZsYWdzKCkpKQorICAgICAgICAgICAgICAgIGlmIChOb2RlOjpzaG91bGRTcGVjdWxhdGVJbnRl
Z2VyRm9yQXJpdGhtZXRpYyhub2RlLT5jaGlsZDEoKS5ub2RlKCksIG5vZGUtPmNoaWxkMigpLm5v
ZGUoKSkKKyAgICAgICAgICAgICAgICAgICAgJiYgbm9kZUNhblNwZWN1bGF0ZUludGVnZXIobm9k
ZS0+YXJpdGhOb2RlRmxhZ3MoKSkpCiAgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVy
Z2VQcmVkaWN0aW9uKFNwZWNJbnQzMik7CiAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAg
ICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbihTcGVjRG91YmxlKTsKQEAgLTQ1
NiwxOCArNDU0LDE4IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBmbGFncyB8PSBOb2RlVXNlZEFz
TnVtYmVyIHwgTm9kZU5lZWRzTmVnWmVybzsKICAgICAgICAgICAgIGZsYWdzICY9IH5Ob2RlVXNl
ZEFzT3RoZXI7CiAKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaFtub2RlLmNoaWxkMSgp
XS5tZXJnZUZsYWdzKGZsYWdzKTsKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaFtub2Rl
LmNoaWxkMigpXS5tZXJnZUZsYWdzKGZsYWdzKTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbm9k
ZS0+Y2hpbGQxKCktPm1lcmdlRmxhZ3MoZmxhZ3MpOworICAgICAgICAgICAgY2hhbmdlZCB8PSBu
b2RlLT5jaGlsZDIoKS0+bWVyZ2VGbGFncyhmbGFncyk7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgQXJpdGhNb2Q6IHsKLSAgICAgICAg
ICAgIFNwZWN1bGF0ZWRUeXBlIGxlZnQgPSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLnByZWRpY3Rp
b24oKTsKLSAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHJpZ2h0ID0gbV9ncmFwaFtub2RlLmNo
aWxkMigpXS5wcmVkaWN0aW9uKCk7CisgICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSBsZWZ0ID0g
bm9kZS0+Y2hpbGQxKCktPnByZWRpY3Rpb24oKTsKKyAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBl
IHJpZ2h0ID0gbm9kZS0+Y2hpbGQyKCktPnByZWRpY3Rpb24oKTsKICAgICAgICAgICAgIAogICAg
ICAgICAgICAgaWYgKGxlZnQgJiYgcmlnaHQpIHsKLSAgICAgICAgICAgICAgICBpZiAoTm9kZTo6
c2hvdWxkU3BlY3VsYXRlSW50ZWdlckZvckFyaXRobWV0aWMobV9ncmFwaFtub2RlLmNoaWxkMSgp
XSwgbV9ncmFwaFtub2RlLmNoaWxkMigpXSkKLSAgICAgICAgICAgICAgICAgICAgJiYgbm9kZUNh
blNwZWN1bGF0ZUludGVnZXIobm9kZS5hcml0aE5vZGVGbGFncygpKSkKKyAgICAgICAgICAgICAg
ICBpZiAoTm9kZTo6c2hvdWxkU3BlY3VsYXRlSW50ZWdlckZvckFyaXRobWV0aWMobm9kZS0+Y2hp
bGQxKCkubm9kZSgpLCBub2RlLT5jaGlsZDIoKS5ub2RlKCkpCisgICAgICAgICAgICAgICAgICAg
ICYmIG5vZGVDYW5TcGVjdWxhdGVJbnRlZ2VyKG5vZGUtPmFyaXRoTm9kZUZsYWdzKCkpKQogICAg
ICAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbihTcGVjSW50MzIpOwog
ICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJn
ZVByZWRpY3Rpb24oU3BlY0RvdWJsZSk7CkBAIC00NzYsOCArNDc0LDggQEAgcHJpdmF0ZToKICAg
ICAgICAgICAgIGZsYWdzIHw9IE5vZGVVc2VkQXNOdW1iZXIgfCBOb2RlTmVlZHNOZWdaZXJvOwog
ICAgICAgICAgICAgZmxhZ3MgJj0gfk5vZGVVc2VkQXNPdGhlcjsKIAotICAgICAgICAgICAgY2hh
bmdlZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLm1lcmdlRmxhZ3MoZmxhZ3MpOwotICAgICAg
ICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQyKCldLm1lcmdlRmxhZ3MoZmxhZ3Mp
OworICAgICAgICAgICAgY2hhbmdlZCB8PSBub2RlLT5jaGlsZDEoKS0+bWVyZ2VGbGFncyhmbGFn
cyk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG5vZGUtPmNoaWxkMigpLT5tZXJnZUZsYWdzKGZs
YWdzKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKQEAgLTQ4
NSwxOSArNDgzLDE5IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBjaGFuZ2VkIHw9IHNldFByZWRp
Y3Rpb24oU3BlY0RvdWJsZSk7CiAgICAgICAgICAgICBmbGFncyB8PSBOb2RlVXNlZEFzTnVtYmVy
IHwgTm9kZU5lZWRzTmVnWmVybzsKICAgICAgICAgICAgIGZsYWdzICY9IH5Ob2RlVXNlZEFzT3Ro
ZXI7Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ubWVyZ2VG
bGFncyhmbGFncyk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG5vZGUtPmNoaWxkMSgpLT5tZXJn
ZUZsYWdzKGZsYWdzKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAg
ICAKICAgICAgICAgY2FzZSBBcml0aEFiczogewotICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUg
Y2hpbGQgPSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLnByZWRpY3Rpb24oKTsKKyAgICAgICAgICAg
IFNwZWN1bGF0ZWRUeXBlIGNoaWxkID0gbm9kZS0+Y2hpbGQxKCktPnByZWRpY3Rpb24oKTsKICAg
ICAgICAgICAgIGlmIChpc0ludDMyU3BlY3VsYXRpb25Gb3JBcml0aG1ldGljKGNoaWxkKQotICAg
ICAgICAgICAgICAgICYmIG5vZGVDYW5TcGVjdWxhdGVJbnRlZ2VyKG5vZGUuYXJpdGhOb2RlRmxh
Z3MoKSkpCisgICAgICAgICAgICAgICAgJiYgbm9kZUNhblNwZWN1bGF0ZUludGVnZXIobm9kZS0+
YXJpdGhOb2RlRmxhZ3MoKSkpCiAgICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVByZWRp
Y3Rpb24oU3BlY0ludDMyKTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBjaGFu
Z2VkIHw9IG1lcmdlUHJlZGljdGlvbihzcGVjdWxhdGVkRG91YmxlVHlwZUZvclByZWRpY3Rpb24o
Y2hpbGQpKTsKIAotICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQxKCld
Lm1lcmdlRmxhZ3MoZmxhZ3MpOworICAgICAgICAgICAgY2hhbmdlZCB8PSBub2RlLT5jaGlsZDEo
KS0+bWVyZ2VGbGFncyhmbGFncyk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAg
ICAgICAgICAgCkBAIC01MjcsMzEgKzUyNSwzMSBAQCBwcml2YXRlOgogICAgICAgICB9CiAKICAg
ICAgICAgY2FzZSBHZXRCeUlkOiB7Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGlj
dGlvbihub2RlLmdldEhlYXBQcmVkaWN0aW9uKCkpOworICAgICAgICAgICAgY2hhbmdlZCB8PSBt
ZXJnZVByZWRpY3Rpb24obm9kZS0+Z2V0SGVhcFByZWRpY3Rpb24oKSk7CiAgICAgICAgICAgICBj
aGFuZ2VkIHw9IG1lcmdlRGVmYXVsdEZsYWdzKG5vZGUpOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBjYXNlIEdldEJ5SWRGbHVzaDoKLSAgICAg
ICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKG5vZGUuZ2V0SGVhcFByZWRpY3Rpb24o
KSk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbihub2RlLT5nZXRIZWFw
UHJlZGljdGlvbigpKTsKICAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VEZWZhdWx0RmxhZ3Mo
bm9kZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgICAgICBjYXNlIEdl
dEJ5VmFsOiB7Ci0gICAgICAgICAgICBpZiAobV9ncmFwaFtub2RlLmNoaWxkMSgpXS5zaG91bGRT
cGVjdWxhdGVGbG9hdDMyQXJyYXkoKQotICAgICAgICAgICAgICAgIHx8IG1fZ3JhcGhbbm9kZS5j
aGlsZDEoKV0uc2hvdWxkU3BlY3VsYXRlRmxvYXQ2NEFycmF5KCkpCisgICAgICAgICAgICBpZiAo
bm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZUZsb2F0MzJBcnJheSgpCisgICAgICAgICAg
ICAgICAgfHwgbm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZUZsb2F0NjRBcnJheSgpKQog
ICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKFNwZWNEb3VibGUpOwog
ICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0
aW9uKG5vZGUuZ2V0SGVhcFByZWRpY3Rpb24oKSk7CiAKLSAgICAgICAgICAgIGNoYW5nZWQgfD0g
bV9ncmFwaFtub2RlLmNoaWxkMSgpXS5tZXJnZUZsYWdzKE5vZGVVc2VkQXNWYWx1ZSk7Ci0gICAg
ICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbm9kZS5jaGlsZDIoKV0ubWVyZ2VGbGFncyhOb2Rl
VXNlZEFzTnVtYmVyIHwgTm9kZVVzZWRBc090aGVyIHwgTm9kZVVzZWRBc0ludCB8IE5vZGVVc2Vk
QXNJbnRMb2NhbGx5KTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbm9kZS0+Y2hpbGQxKCktPm1l
cmdlRmxhZ3MoTm9kZVVzZWRBc1ZhbHVlKTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbm9kZS0+
Y2hpbGQyKCktPm1lcmdlRmxhZ3MoTm9kZVVzZWRBc051bWJlciB8IE5vZGVVc2VkQXNPdGhlciB8
IE5vZGVVc2VkQXNJbnQgfCBOb2RlVXNlZEFzSW50TG9jYWxseSk7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgR2V0TXlBcmd1bWVudEJ5
VmFsU2FmZTogewotICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVByZWRpY3Rpb24obm9kZS5n
ZXRIZWFwUHJlZGljdGlvbigpKTsKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaFtub2Rl
LmNoaWxkMSgpXS5tZXJnZUZsYWdzKE5vZGVVc2VkQXNOdW1iZXIgfCBOb2RlVXNlZEFzT3RoZXIg
fCBOb2RlVXNlZEFzSW50IHwgTm9kZVVzZWRBc0ludExvY2FsbHkpOworICAgICAgICAgICAgY2hh
bmdlZCB8PSBtZXJnZVByZWRpY3Rpb24obm9kZS0+Z2V0SGVhcFByZWRpY3Rpb24oKSk7CisgICAg
ICAgICAgICBjaGFuZ2VkIHw9IG5vZGUtPmNoaWxkMSgpLT5tZXJnZUZsYWdzKE5vZGVVc2VkQXNO
dW1iZXIgfCBOb2RlVXNlZEFzT3RoZXIgfCBOb2RlVXNlZEFzSW50IHwgTm9kZVVzZWRBc0ludExv
Y2FsbHkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIApAQCAt
NTcxLDI1ICs1NjksMjMgQEAgcHJpdmF0ZToKICAgICAgICAgfQogCiAgICAgICAgIGNhc2UgR2V0
QnlPZmZzZXQ6IHsKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKG5vZGUu
Z2V0SGVhcFByZWRpY3Rpb24oKSk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGlj
dGlvbihub2RlLT5nZXRIZWFwUHJlZGljdGlvbigpKTsKICAgICAgICAgICAgIGNoYW5nZWQgfD0g
bWVyZ2VEZWZhdWx0RmxhZ3Mobm9kZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQog
ICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgQ2FsbDoKICAgICAgICAgY2FzZSBDb25zdHJ1Y3Q6
IHsKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKG5vZGUuZ2V0SGVhcFBy
ZWRpY3Rpb24oKSk7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGNoaWxkSWR4ID0gbm9kZS5m
aXJzdENoaWxkKCk7Ci0gICAgICAgICAgICAgICAgIGNoaWxkSWR4IDwgbm9kZS5maXJzdENoaWxk
KCkgKyBub2RlLm51bUNoaWxkcmVuKCk7Ci0gICAgICAgICAgICAgICAgICsrY2hpbGRJZHgpIHsK
LSAgICAgICAgICAgICAgICBFZGdlIGVkZ2UgPSBtX2dyYXBoLm1fdmFyQXJnQ2hpbGRyZW5bY2hp
bGRJZHhdOwotICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaFtlZGdlXS5tZXJnZUZs
YWdzKE5vZGVVc2VkQXNWYWx1ZSk7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBjaGFuZ2Vk
IHw9IG1lcmdlUHJlZGljdGlvbihub2RlLT5nZXRIZWFwUHJlZGljdGlvbigpKTsKKyAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgY2hpbGRJZHggPSBub2RlLT5maXJzdENoaWxkKCk7CisgICAgICAg
ICAgICAgICAgIGNoaWxkSWR4IDwgbm9kZS0+Zmlyc3RDaGlsZCgpICsgbm9kZS0+bnVtQ2hpbGRy
ZW4oKTsKKyAgICAgICAgICAgICAgICAgKytjaGlsZElkeCkKKyAgICAgICAgICAgICAgICBjaGFu
Z2VkIHw9IG1fZ3JhcGgubV92YXJBcmdDaGlsZHJlbltjaGlsZElkeF0tPm1lcmdlRmxhZ3MoTm9k
ZVVzZWRBc1ZhbHVlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAg
ICAKICAgICAgICAgY2FzZSBDb252ZXJ0VGhpczogewotICAgICAgICAgICAgU3BlY3VsYXRlZFR5
cGUgcHJlZGljdGlvbiA9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ucHJlZGljdGlvbigpOworICAg
ICAgICAgICAgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiA9IG5vZGUtPmNoaWxkMSgpLT5wcmVk
aWN0aW9uKCk7CiAgICAgICAgICAgICBpZiAocHJlZGljdGlvbikgewogICAgICAgICAgICAgICAg
IGlmIChwcmVkaWN0aW9uICYgflNwZWNPYmplY3RNYXNrKSB7CiAgICAgICAgICAgICAgICAgICAg
IHByZWRpY3Rpb24gJj0gU3BlY09iamVjdE1hc2s7CkBAIC02MDIsMTMgKzU5OCwxMyBAQCBwcml2
YXRlOgogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBHZXRHbG9iYWxWYXI6
IHsKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKG5vZGUuZ2V0SGVhcFBy
ZWRpY3Rpb24oKSk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbihub2Rl
LT5nZXRIZWFwUHJlZGljdGlvbigpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAg
ICAgICAgICAgICAKICAgICAgICAgY2FzZSBQdXRHbG9iYWxWYXI6CiAgICAgICAgIGNhc2UgUHV0
R2xvYmFsVmFyQ2hlY2s6IHsKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaFtub2RlLmNo
aWxkMSgpXS5tZXJnZUZsYWdzKE5vZGVVc2VkQXNWYWx1ZSk7CisgICAgICAgICAgICBjaGFuZ2Vk
IHw9IG5vZGUtPmNoaWxkMSgpLT5tZXJnZUZsYWdzKE5vZGVVc2VkQXNWYWx1ZSk7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCkBAIC02MTcsNyArNjEzLDcgQEAg
cHJpdmF0ZToKICAgICAgICAgY2FzZSBSZXNvbHZlQmFzZToKICAgICAgICAgY2FzZSBSZXNvbHZl
QmFzZVN0cmljdFB1dDoKICAgICAgICAgY2FzZSBSZXNvbHZlR2xvYmFsOiB7Ci0gICAgICAgICAg
ICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uID0gbm9kZS5nZXRIZWFwUHJlZGljdGlvbigpOwor
ICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiA9IG5vZGUtPmdldEhlYXBQcmVk
aWN0aW9uKCk7CiAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbihwcmVkaWN0
aW9uKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkBAIC02NDMsMTggKzYzOSwxNiBA
QCBwcml2YXRlOgogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgTmV3QXJyYXk6IHsKICAgICAg
ICAgICAgIGNoYW5nZWQgfD0gc2V0UHJlZGljdGlvbihTcGVjQXJyYXkpOwotICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBjaGlsZElkeCA9IG5vZGUuZmlyc3RDaGlsZCgpOwotICAgICAgICAgICAg
ICAgICBjaGlsZElkeCA8IG5vZGUuZmlyc3RDaGlsZCgpICsgbm9kZS5udW1DaGlsZHJlbigpOwot
ICAgICAgICAgICAgICAgICArK2NoaWxkSWR4KSB7Ci0gICAgICAgICAgICAgICAgRWRnZSBlZGdl
ID0gbV9ncmFwaC5tX3ZhckFyZ0NoaWxkcmVuW2NoaWxkSWR4XTsKLSAgICAgICAgICAgICAgICBj
aGFuZ2VkIHw9IG1fZ3JhcGhbZWRnZV0ubWVyZ2VGbGFncyhOb2RlVXNlZEFzVmFsdWUpOwotICAg
ICAgICAgICAgfQorICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBjaGlsZElkeCA9IG5vZGUtPmZp
cnN0Q2hpbGQoKTsKKyAgICAgICAgICAgICAgICAgY2hpbGRJZHggPCBub2RlLT5maXJzdENoaWxk
KCkgKyBub2RlLT5udW1DaGlsZHJlbigpOworICAgICAgICAgICAgICAgICArK2NoaWxkSWR4KQor
ICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaC5tX3ZhckFyZ0NoaWxkcmVuW2NoaWxk
SWR4XS0+bWVyZ2VGbGFncyhOb2RlVXNlZEFzVmFsdWUpOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBjYXNlIE5ld0FycmF5V2l0aFNpemU6IHsK
ICAgICAgICAgICAgIGNoYW5nZWQgfD0gc2V0UHJlZGljdGlvbihTcGVjQXJyYXkpOwotICAgICAg
ICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLm1lcmdlRmxhZ3MoTm9kZVVz
ZWRBc1ZhbHVlIHwgTm9kZVVzZWRBc0ludCB8IE5vZGVVc2VkQXNJbnRMb2NhbGx5KTsKKyAgICAg
ICAgICAgIGNoYW5nZWQgfD0gbm9kZS0+Y2hpbGQxKCktPm1lcmdlRmxhZ3MoTm9kZVVzZWRBc1Zh
bHVlIHwgTm9kZVVzZWRBc0ludCB8IE5vZGVVc2VkQXNJbnRMb2NhbGx5KTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKQEAgLTY3MCwyMiArNjY0LDIyIEBAIHBy
aXZhdGU6CiAgICAgICAgIAogICAgICAgICBjYXNlIFN0cmluZ0NoYXJBdDogewogICAgICAgICAg
ICAgY2hhbmdlZCB8PSBzZXRQcmVkaWN0aW9uKFNwZWNTdHJpbmcpOwotICAgICAgICAgICAgY2hh
bmdlZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLm1lcmdlRmxhZ3MoTm9kZVVzZWRBc1ZhbHVl
KTsKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaFtub2RlLmNoaWxkMigpXS5tZXJnZUZs
YWdzKE5vZGVVc2VkQXNOdW1iZXIgfCBOb2RlVXNlZEFzT3RoZXIgfCBOb2RlVXNlZEFzSW50IHwg
Tm9kZVVzZWRBc0ludExvY2FsbHkpOworICAgICAgICAgICAgY2hhbmdlZCB8PSBub2RlLT5jaGls
ZDEoKS0+bWVyZ2VGbGFncyhOb2RlVXNlZEFzVmFsdWUpOworICAgICAgICAgICAgY2hhbmdlZCB8
PSBub2RlLT5jaGlsZDIoKS0+bWVyZ2VGbGFncyhOb2RlVXNlZEFzTnVtYmVyIHwgTm9kZVVzZWRB
c090aGVyIHwgTm9kZVVzZWRBc0ludCB8IE5vZGVVc2VkQXNJbnRMb2NhbGx5KTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBTdHJDYXQ6
IHsKICAgICAgICAgICAgIGNoYW5nZWQgfD0gc2V0UHJlZGljdGlvbihTcGVjU3RyaW5nKTsKLSAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgY2hpbGRJZHggPSBub2RlLmZpcnN0Q2hpbGQoKTsKLSAg
ICAgICAgICAgICAgICAgY2hpbGRJZHggPCBub2RlLmZpcnN0Q2hpbGQoKSArIG5vZGUubnVtQ2hp
bGRyZW4oKTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgY2hpbGRJZHggPSBub2RlLT5maXJz
dENoaWxkKCk7CisgICAgICAgICAgICAgICAgIGNoaWxkSWR4IDwgbm9kZS0+Zmlyc3RDaGlsZCgp
ICsgbm9kZS0+bnVtQ2hpbGRyZW4oKTsKICAgICAgICAgICAgICAgICAgKytjaGlsZElkeCkKLSAg
ICAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbV9ncmFwaC5tX3ZhckFyZ0NoaWxkcmVu
W2NoaWxkSWR4XV0ubWVyZ2VGbGFncyhOb2RlVXNlZEFzTnVtYmVyIHwgTm9kZVVzZWRBc090aGVy
KTsKKyAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGgubV92YXJBcmdDaGlsZHJlbltj
aGlsZElkeF0tPm1lcmdlRmxhZ3MoTm9kZVVzZWRBc051bWJlciB8IE5vZGVVc2VkQXNPdGhlcik7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgIGNh
c2UgVG9QcmltaXRpdmU6IHsKLSAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIGNoaWxkID0gbV9n
cmFwaFtub2RlLmNoaWxkMSgpXS5wcmVkaWN0aW9uKCk7CisgICAgICAgICAgICBTcGVjdWxhdGVk
VHlwZSBjaGlsZCA9IG5vZGUtPmNoaWxkMSgpLT5wcmVkaWN0aW9uKCk7CiAgICAgICAgICAgICBp
ZiAoY2hpbGQpIHsKICAgICAgICAgICAgICAgICBpZiAoaXNPYmplY3RTcGVjdWxhdGlvbihjaGls
ZCkpIHsKICAgICAgICAgICAgICAgICAgICAgLy8gSSdkIGxvdmUgdG8gZm9sZCB0aGlzIGNhc2Ug
aW50byB0aGUgY2FzZSBiZWxvdywgYnV0IEkgY2FuJ3QsIGJlY2F1c2UKQEAgLTcwMiw3ICs2OTYs
NyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgICAgICAg
ICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbihjaGlsZCk7CiAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ubWVyZ2VGbGFncyhmbGFn
cyk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG5vZGUtPmNoaWxkMSgpLT5tZXJnZUZsYWdzKGZs
YWdzKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKQEAgLTc0
NSw0MiArNzM5LDQ1IEBAIHByaXZhdGU6CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIGNh
c2UgUHV0QnlWYWw6Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbV9ncmFwaC52YXJB
cmdDaGlsZChub2RlLCAwKV0ubWVyZ2VGbGFncyhOb2RlVXNlZEFzVmFsdWUpOwotICAgICAgICAg
ICAgY2hhbmdlZCB8PSBtX2dyYXBoW21fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSldLm1lcmdl
RmxhZ3MoTm9kZVVzZWRBc051bWJlciB8IE5vZGVVc2VkQXNPdGhlciB8IE5vZGVVc2VkQXNJbnQg
fCBOb2RlVXNlZEFzSW50TG9jYWxseSk7Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhb
bV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAyKV0ubWVyZ2VGbGFncyhOb2RlVXNlZEFzVmFsdWUp
OworICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApLT5t
ZXJnZUZsYWdzKE5vZGVVc2VkQXNWYWx1ZSk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3Jh
cGgudmFyQXJnQ2hpbGQobm9kZSwgMSktPm1lcmdlRmxhZ3MoTm9kZVVzZWRBc051bWJlciB8IE5v
ZGVVc2VkQXNPdGhlciB8IE5vZGVVc2VkQXNJbnQgfCBOb2RlVXNlZEFzSW50TG9jYWxseSk7Cisg
ICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMiktPm1lcmdl
RmxhZ3MoTm9kZVVzZWRBc1ZhbHVlKTsKICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGNh
c2UgUHV0U2NvcGVkVmFyOgotICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW25vZGUuY2hp
bGQxKCldLm1lcmdlRmxhZ3MoTm9kZVVzZWRBc1ZhbHVlKTsKLSAgICAgICAgICAgIGNoYW5nZWQg
fD0gbV9ncmFwaFtub2RlLmNoaWxkMygpXS5tZXJnZUZsYWdzKE5vZGVVc2VkQXNWYWx1ZSk7Cisg
ICAgICAgICAgICBjaGFuZ2VkIHw9IG5vZGUtPmNoaWxkMSgpLT5tZXJnZUZsYWdzKE5vZGVVc2Vk
QXNWYWx1ZSk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG5vZGUtPmNoaWxkMygpLT5tZXJnZUZs
YWdzKE5vZGVVc2VkQXNWYWx1ZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIAog
ICAgICAgICBjYXNlIFJldHVybjoKICAgICAgICAgY2FzZSBUaHJvdzoKLSAgICAgICAgICAgIGNo
YW5nZWQgfD0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5tZXJnZUZsYWdzKE5vZGVVc2VkQXNWYWx1
ZSk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG5vZGUtPmNoaWxkMSgpLT5tZXJnZUZsYWdzKE5v
ZGVVc2VkQXNWYWx1ZSk7CiAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICBjYXNlIFB1dEJ5
SWQ6CiAgICAgICAgIGNhc2UgUHV0QnlJZERpcmVjdDoKLSAgICAgICAgICAgIGNoYW5nZWQgfD0g
bV9ncmFwaFtub2RlLmNoaWxkMSgpXS5tZXJnZUZsYWdzKE5vZGVVc2VkQXNWYWx1ZSk7Ci0gICAg
ICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbm9kZS5jaGlsZDIoKV0ubWVyZ2VGbGFncyhOb2Rl
VXNlZEFzVmFsdWUpOworICAgICAgICAgICAgY2hhbmdlZCB8PSBub2RlLT5jaGlsZDEoKS0+bWVy
Z2VGbGFncyhOb2RlVXNlZEFzVmFsdWUpOworICAgICAgICAgICAgY2hhbmdlZCB8PSBub2RlLT5j
aGlsZDIoKS0+bWVyZ2VGbGFncyhOb2RlVXNlZEFzVmFsdWUpOwogICAgICAgICAgICAgYnJlYWs7
CiAKICAgICAgICAgY2FzZSBQdXRCeU9mZnNldDoKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9n
cmFwaFtub2RlLmNoaWxkMSgpXS5tZXJnZUZsYWdzKE5vZGVVc2VkQXNWYWx1ZSk7Ci0gICAgICAg
ICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbm9kZS5jaGlsZDMoKV0ubWVyZ2VGbGFncyhOb2RlVXNl
ZEFzVmFsdWUpOworICAgICAgICAgICAgY2hhbmdlZCB8PSBub2RlLT5jaGlsZDEoKS0+bWVyZ2VG
bGFncyhOb2RlVXNlZEFzVmFsdWUpOworICAgICAgICAgICAgY2hhbmdlZCB8PSBub2RlLT5jaGls
ZDMoKS0+bWVyZ2VGbGFncyhOb2RlVXNlZEFzVmFsdWUpOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICAKICAgICAgICAgY2FzZSBQaGk6CisgICAgICAgICAgICAvLyBQaGlzIHNob3Vs
ZCBub3QgYmUgdmlzaWJsZSBoZXJlIHNpbmNlIHdlJ3JlIGl0ZXJhdGluZyB0aGUgYWxsLWJ1dC1Q
aGkncworICAgICAgICAgICAgLy8gcGFydCBvZiBiYXNpYyBibG9ja3MuCisgICAgICAgICAgICBD
UkFTSCgpOwogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSBTZXRDYWxsZWU6CiAg
ICAgICAgIGNhc2UgU2V0TXlTY29wZToKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaFtu
b2RlLmNoaWxkMSgpXS5tZXJnZUZsYWdzKE5vZGVVc2VkQXNWYWx1ZSk7CisgICAgICAgICAgICBj
aGFuZ2VkIHw9IG5vZGUtPmNoaWxkMSgpLT5tZXJnZUZsYWdzKE5vZGVVc2VkQXNWYWx1ZSk7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgICAgICBjYXNlIEdldFNjb3BlOgot
ICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLm1lcmdlRmxhZ3Mo
Tm9kZVVzZWRBc1ZhbHVlKTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbm9kZS0+Y2hpbGQxKCkt
Pm1lcmdlRmxhZ3MoTm9kZVVzZWRBc1ZhbHVlKTsKICAgICAgICAgICAgIGNoYW5nZWQgfD0gc2V0
UHJlZGljdGlvbihTcGVjQ2VsbE90aGVyKTsKICAgICAgICAgICAgIGJyZWFrOwogCkBAIC04Mjgs
MzIgKzgyNSwzMiBAQCBwcml2YXRlOgogICAgICAgICB9CiAKICNpZiBERkdfRU5BQkxFKERFQlVH
X1BST1BBR0FUSU9OX1ZFUkJPU0UpCi0gICAgICAgIGRhdGFMb2coU3BlY3VsYXRpb25EdW1wKG1f
Z3JhcGhbbV9jb21waWxlSW5kZXhdLnByZWRpY3Rpb24oKSksICJcbiIpOworICAgICAgICBkYXRh
TG9nKFNwZWN1bGF0aW9uRHVtcChub2RlLT5wcmVkaWN0aW9uKCkpLCAiXG4iKTsKICNlbmRpZgog
ICAgICAgICAKICAgICAgICAgbV9jaGFuZ2VkIHw9IGNoYW5nZWQ7CiAgICAgfQogICAgICAgICAK
LSAgICBib29sIG1lcmdlRGVmYXVsdEZsYWdzKE5vZGUmIG5vZGUpCisgICAgYm9vbCBtZXJnZURl
ZmF1bHRGbGFncyhOb2RlKiBub2RlKQogICAgIHsKICAgICAgICAgYm9vbCBjaGFuZ2VkID0gZmFs
c2U7Ci0gICAgICAgIGlmIChub2RlLmZsYWdzKCkgJiBOb2RlSGFzVmFyQXJncykgewotICAgICAg
ICAgICAgZm9yICh1bnNpZ25lZCBjaGlsZElkeCA9IG5vZGUuZmlyc3RDaGlsZCgpOwotICAgICAg
ICAgICAgICAgICBjaGlsZElkeCA8IG5vZGUuZmlyc3RDaGlsZCgpICsgbm9kZS5udW1DaGlsZHJl
bigpOworICAgICAgICBpZiAobm9kZS0+ZmxhZ3MoKSAmIE5vZGVIYXNWYXJBcmdzKSB7CisgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGNoaWxkSWR4ID0gbm9kZS0+Zmlyc3RDaGlsZCgpOworICAg
ICAgICAgICAgICAgICBjaGlsZElkeCA8IG5vZGUtPmZpcnN0Q2hpbGQoKSArIG5vZGUtPm51bUNo
aWxkcmVuKCk7CiAgICAgICAgICAgICAgICAgIGNoaWxkSWR4KyspIHsKICAgICAgICAgICAgICAg
ICBpZiAoISFtX2dyYXBoLm1fdmFyQXJnQ2hpbGRyZW5bY2hpbGRJZHhdKQotICAgICAgICAgICAg
ICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbV9ncmFwaC5tX3ZhckFyZ0NoaWxkcmVuW2NoaWxk
SWR4XV0ubWVyZ2VGbGFncyhOb2RlVXNlZEFzVmFsdWUpOworICAgICAgICAgICAgICAgICAgICBj
aGFuZ2VkIHw9IG1fZ3JhcGgubV92YXJBcmdDaGlsZHJlbltjaGlsZElkeF0tPm1lcmdlRmxhZ3Mo
Tm9kZVVzZWRBc1ZhbHVlKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgIGlmICghbm9kZS5jaGlsZDEoKSkKKyAgICAgICAgICAgIGlmICghbm9kZS0+Y2hpbGQx
KCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGNoYW5nZWQ7Ci0gICAgICAgICAgICBjaGFuZ2Vk
IHw9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ubWVyZ2VGbGFncyhOb2RlVXNlZEFzVmFsdWUpOwot
ICAgICAgICAgICAgaWYgKCFub2RlLmNoaWxkMigpKQorICAgICAgICAgICAgY2hhbmdlZCB8PSBu
b2RlLT5jaGlsZDEoKS0+bWVyZ2VGbGFncyhOb2RlVXNlZEFzVmFsdWUpOworICAgICAgICAgICAg
aWYgKCFub2RlLT5jaGlsZDIoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gY2hhbmdlZDsKLSAg
ICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaFtub2RlLmNoaWxkMigpXS5tZXJnZUZsYWdzKE5v
ZGVVc2VkQXNWYWx1ZSk7Ci0gICAgICAgICAgICBpZiAoIW5vZGUuY2hpbGQzKCkpCisgICAgICAg
ICAgICBjaGFuZ2VkIHw9IG5vZGUtPmNoaWxkMigpLT5tZXJnZUZsYWdzKE5vZGVVc2VkQXNWYWx1
ZSk7CisgICAgICAgICAgICBpZiAoIW5vZGUtPmNoaWxkMygpKQogICAgICAgICAgICAgICAgIHJl
dHVybiBjaGFuZ2VkOwotICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQz
KCldLm1lcmdlRmxhZ3MoTm9kZVVzZWRBc1ZhbHVlKTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0g
bm9kZS0+Y2hpbGQzKCktPm1lcmdlRmxhZ3MoTm9kZVVzZWRBc1ZhbHVlKTsKICAgICAgICAgfQog
ICAgICAgICByZXR1cm4gY2hhbmdlZDsKICAgICB9CkBAIC04NjMsOCArODYwLDE2IEBAIHByaXZh
dGU6CiAjaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQogICAgICAgICBk
YXRhTG9nRigiUHJvcGFnYXRpbmcgcHJlZGljdGlvbnMgZm9yd2FyZCBbJXVdXG4iLCArK21fY291
bnQpOwogI2VuZGlmCi0gICAgICAgIGZvciAobV9jb21waWxlSW5kZXggPSAwOyBtX2NvbXBpbGVJ
bmRleCA8IG1fZ3JhcGguc2l6ZSgpOyArK21fY29tcGlsZUluZGV4KQotICAgICAgICAgICAgcHJv
cGFnYXRlKG1fZ3JhcGhbbV9jb21waWxlSW5kZXhdKTsKKyAgICAgICAgZm9yIChCbG9ja0luZGV4
IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9ncmFwaC5tX2Jsb2Nrcy5zaXplKCk7ICsr
YmxvY2tJbmRleCkgeworICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLm1f
YmxvY2tzW2Jsb2NrSW5kZXhdLmdldCgpOworICAgICAgICAgICAgaWYgKCFibG9jaykKKyAgICAg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIEFTU0VSVChibG9jay0+aXNSZWFjaGFi
bGUpOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGJsb2NrLT5zaXplKCk7
ICsraSkgeworICAgICAgICAgICAgICAgIG1fY3VycmVudE5vZGUgPSBibG9jay0+YXQoaSk7Cisg
ICAgICAgICAgICAgICAgcHJvcGFnYXRlKG1fY3VycmVudE5vZGUpOworICAgICAgICAgICAgfQor
ICAgICAgICB9CiAgICAgfQogICAgIAogICAgIHZvaWQgcHJvcGFnYXRlQmFja3dhcmQoKQpAQCAt
ODcyLDEyMyArODc3LDEzOSBAQCBwcml2YXRlOgogI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFH
QVRJT05fVkVSQk9TRSkKICAgICAgICAgZGF0YUxvZ0YoIlByb3BhZ2F0aW5nIHByZWRpY3Rpb25z
IGJhY2t3YXJkIFsldV1cbiIsICsrbV9jb3VudCk7CiAjZW5kaWYKLSAgICAgICAgZm9yIChtX2Nv
bXBpbGVJbmRleCA9IG1fZ3JhcGguc2l6ZSgpOyBtX2NvbXBpbGVJbmRleC0tID4gMDspCi0gICAg
ICAgICAgICBwcm9wYWdhdGUobV9ncmFwaFttX2NvbXBpbGVJbmRleF0pOworICAgICAgICBmb3Ig
KEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgpOyBibG9ja0lu
ZGV4LS07KSB7CisgICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGgubV9ibG9j
a3NbYmxvY2tJbmRleF0uZ2V0KCk7CisgICAgICAgICAgICBpZiAoIWJsb2NrKQorICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgQVNTRVJUKGJsb2NrLT5pc1JlYWNoYWJsZSk7
CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBibG9jay0+c2l6ZSgpOyBpLS07KSB7Cisg
ICAgICAgICAgICAgICAgbV9jdXJyZW50Tm9kZSA9IGJsb2NrLT5hdChpKTsKKyAgICAgICAgICAg
ICAgICBwcm9wYWdhdGUobV9jdXJyZW50Tm9kZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
ICAgICB9CiAgICAgCi0gICAgdm9pZCBkb1JvdW5kT2ZEb3VibGVWb3RpbmcoKQorICAgIHZvaWQg
ZG9Eb3VibGVWb3RpbmcoTm9kZSogbm9kZSkKICAgICB7Ci0jaWYgREZHX0VOQUJMRShERUJVR19Q
Uk9QQUdBVElPTl9WRVJCT1NFKQotICAgICAgICBkYXRhTG9nRigiVm90aW5nIG9uIGRvdWJsZSB1
c2VzIG9mIGxvY2FscyBbJXVdXG4iLCBtX2NvdW50KTsKLSNlbmRpZgotICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgbV9ncmFwaC5tX3ZhcmlhYmxlQWNjZXNzRGF0YS5zaXplKCk7ICsr
aSkKLSAgICAgICAgICAgIG1fZ3JhcGgubV92YXJpYWJsZUFjY2Vzc0RhdGFbaV0uZmluZCgpLT5j
bGVhclZvdGVzKCk7Ci0gICAgICAgIGZvciAobV9jb21waWxlSW5kZXggPSAwOyBtX2NvbXBpbGVJ
bmRleCA8IG1fZ3JhcGguc2l6ZSgpOyArK21fY29tcGlsZUluZGV4KSB7Ci0gICAgICAgICAgICBO
b2RlJiBub2RlID0gbV9ncmFwaFttX2NvbXBpbGVJbmRleF07Ci0gICAgICAgICAgICBzd2l0Y2gg
KG5vZGUub3AoKSkgewotICAgICAgICAgICAgY2FzZSBWYWx1ZUFkZDoKLSAgICAgICAgICAgIGNh
c2UgQXJpdGhBZGQ6Ci0gICAgICAgICAgICBjYXNlIEFyaXRoU3ViOiB7Ci0gICAgICAgICAgICAg
ICAgU3BlY3VsYXRlZFR5cGUgbGVmdCA9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ucHJlZGljdGlv
bigpOwotICAgICAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHJpZ2h0ID0gbV9ncmFwaFtub2Rl
LmNoaWxkMigpXS5wcmVkaWN0aW9uKCk7CisgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewor
ICAgICAgICBjYXNlIFZhbHVlQWRkOgorICAgICAgICBjYXNlIEFyaXRoQWRkOgorICAgICAgICBj
YXNlIEFyaXRoU3ViOiB7CisgICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSBsZWZ0ID0gbm9kZS0+
Y2hpbGQxKCktPnByZWRpY3Rpb24oKTsKKyAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHJpZ2h0
ID0gbm9kZS0+Y2hpbGQyKCktPnByZWRpY3Rpb24oKTsKICAgICAgICAgICAgICAgICAKLSAgICAg
ICAgICAgICAgICBEb3VibGVCYWxsb3QgYmFsbG90OworICAgICAgICAgICAgRG91YmxlQmFsbG90
IGJhbGxvdDsKICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBpZiAoaXNOdW1iZXJT
cGVjdWxhdGlvbkV4cGVjdGluZ0RlZmluZWQobGVmdCkgJiYgaXNOdW1iZXJTcGVjdWxhdGlvbkV4
cGVjdGluZ0RlZmluZWQocmlnaHQpCi0gICAgICAgICAgICAgICAgICAgICYmICFtX2dyYXBoLmFk
ZFNob3VsZFNwZWN1bGF0ZUludGVnZXIobm9kZSkpCi0gICAgICAgICAgICAgICAgICAgIGJhbGxv
dCA9IFZvdGVEb3VibGU7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAg
ICBiYWxsb3QgPSBWb3RlVmFsdWU7CisgICAgICAgICAgICBpZiAoaXNOdW1iZXJTcGVjdWxhdGlv
bkV4cGVjdGluZ0RlZmluZWQobGVmdCkgJiYgaXNOdW1iZXJTcGVjdWxhdGlvbkV4cGVjdGluZ0Rl
ZmluZWQocmlnaHQpCisgICAgICAgICAgICAgICAgJiYgIW1fZ3JhcGguYWRkU2hvdWxkU3BlY3Vs
YXRlSW50ZWdlcihub2RlKSkKKyAgICAgICAgICAgICAgICBiYWxsb3QgPSBWb3RlRG91YmxlOwor
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGJhbGxvdCA9IFZvdGVWYWx1ZTsKICAg
ICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBtX2dyYXBoLnZvdGUobm9kZS5jaGlsZDEo
KSwgYmFsbG90KTsKLSAgICAgICAgICAgICAgICBtX2dyYXBoLnZvdGUobm9kZS5jaGlsZDIoKSwg
YmFsbG90KTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIG1fZ3JhcGgudm90ZU5vZGUobm9kZS0+Y2hpbGQxKCksIGJhbGxvdCk7CisgICAgICAgICAg
ICBtX2dyYXBoLnZvdGVOb2RlKG5vZGUtPmNoaWxkMigpLCBiYWxsb3QpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGNhc2UgQXJp
dGhNdWw6IHsKLSAgICAgICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSBsZWZ0ID0gbV9ncmFwaFtu
b2RlLmNoaWxkMSgpXS5wcmVkaWN0aW9uKCk7Ci0gICAgICAgICAgICAgICAgU3BlY3VsYXRlZFR5
cGUgcmlnaHQgPSBtX2dyYXBoW25vZGUuY2hpbGQyKCldLnByZWRpY3Rpb24oKTsKKyAgICAgICAg
Y2FzZSBBcml0aE11bDogeworICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgbGVmdCA9IG5vZGUt
PmNoaWxkMSgpLT5wcmVkaWN0aW9uKCk7CisgICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSByaWdo
dCA9IG5vZGUtPmNoaWxkMigpLT5wcmVkaWN0aW9uKCk7CiAgICAgICAgICAgICAgICAgCi0gICAg
ICAgICAgICAgICAgRG91YmxlQmFsbG90IGJhbGxvdDsKKyAgICAgICAgICAgIERvdWJsZUJhbGxv
dCBiYWxsb3Q7CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYgKGlzTnVtYmVy
U3BlY3VsYXRpb24obGVmdCkgJiYgaXNOdW1iZXJTcGVjdWxhdGlvbihyaWdodCkKLSAgICAgICAg
ICAgICAgICAgICAgJiYgIW1fZ3JhcGgubXVsU2hvdWxkU3BlY3VsYXRlSW50ZWdlcihub2RlKSkK
LSAgICAgICAgICAgICAgICAgICAgYmFsbG90ID0gVm90ZURvdWJsZTsKLSAgICAgICAgICAgICAg
ICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIGJhbGxvdCA9IFZvdGVWYWx1ZTsKKyAgICAgICAg
ICAgIGlmIChpc051bWJlclNwZWN1bGF0aW9uKGxlZnQpICYmIGlzTnVtYmVyU3BlY3VsYXRpb24o
cmlnaHQpCisgICAgICAgICAgICAgICAgJiYgIW1fZ3JhcGgubXVsU2hvdWxkU3BlY3VsYXRlSW50
ZWdlcihub2RlKSkKKyAgICAgICAgICAgICAgICBiYWxsb3QgPSBWb3RlRG91YmxlOworICAgICAg
ICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGJhbGxvdCA9IFZvdGVWYWx1ZTsKICAgICAgICAg
ICAgICAgICAKLSAgICAgICAgICAgICAgICBtX2dyYXBoLnZvdGUobm9kZS5jaGlsZDEoKSwgYmFs
bG90KTsKLSAgICAgICAgICAgICAgICBtX2dyYXBoLnZvdGUobm9kZS5jaGlsZDIoKSwgYmFsbG90
KTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1f
Z3JhcGgudm90ZU5vZGUobm9kZS0+Y2hpbGQxKCksIGJhbGxvdCk7CisgICAgICAgICAgICBtX2dy
YXBoLnZvdGVOb2RlKG5vZGUtPmNoaWxkMigpLCBiYWxsb3QpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KIAotICAgICAgICAgICAgY2FzZSBBcml0aE1pbjoKLSAgICAgICAgICAgIGNh
c2UgQXJpdGhNYXg6Ci0gICAgICAgICAgICBjYXNlIEFyaXRoTW9kOgotICAgICAgICAgICAgY2Fz
ZSBBcml0aERpdjogewotICAgICAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIGxlZnQgPSBtX2dy
YXBoW25vZGUuY2hpbGQxKCldLnByZWRpY3Rpb24oKTsKLSAgICAgICAgICAgICAgICBTcGVjdWxh
dGVkVHlwZSByaWdodCA9IG1fZ3JhcGhbbm9kZS5jaGlsZDIoKV0ucHJlZGljdGlvbigpOworICAg
ICAgICBjYXNlIEFyaXRoTWluOgorICAgICAgICBjYXNlIEFyaXRoTWF4OgorICAgICAgICBjYXNl
IEFyaXRoTW9kOgorICAgICAgICBjYXNlIEFyaXRoRGl2OiB7CisgICAgICAgICAgICBTcGVjdWxh
dGVkVHlwZSBsZWZ0ID0gbm9kZS0+Y2hpbGQxKCktPnByZWRpY3Rpb24oKTsKKyAgICAgICAgICAg
IFNwZWN1bGF0ZWRUeXBlIHJpZ2h0ID0gbm9kZS0+Y2hpbGQyKCktPnByZWRpY3Rpb24oKTsKICAg
ICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBEb3VibGVCYWxsb3QgYmFsbG90OworICAg
ICAgICAgICAgRG91YmxlQmFsbG90IGJhbGxvdDsKICAgICAgICAgICAgICAgICAKLSAgICAgICAg
ICAgICAgICBpZiAoaXNOdW1iZXJTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc051bWJlclNwZWN1bGF0
aW9uKHJpZ2h0KQotICAgICAgICAgICAgICAgICAgICAmJiAhKE5vZGU6OnNob3VsZFNwZWN1bGF0
ZUludGVnZXJGb3JBcml0aG1ldGljKG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0sIG1fZ3JhcGhbbm9k
ZS5jaGlsZDEoKV0pCi0gICAgICAgICAgICAgICAgICAgICAgICAgJiYgbm9kZS5jYW5TcGVjdWxh
dGVJbnRlZ2VyKCkpKQotICAgICAgICAgICAgICAgICAgICBiYWxsb3QgPSBWb3RlRG91YmxlOwot
ICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgYmFsbG90ID0gVm90ZVZh
bHVlOworICAgICAgICAgICAgaWYgKGlzTnVtYmVyU3BlY3VsYXRpb24obGVmdCkgJiYgaXNOdW1i
ZXJTcGVjdWxhdGlvbihyaWdodCkKKyAgICAgICAgICAgICAgICAmJiAhKE5vZGU6OnNob3VsZFNw
ZWN1bGF0ZUludGVnZXJGb3JBcml0aG1ldGljKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgbm9kZS0+
Y2hpbGQyKCkubm9kZSgpKQorICAgICAgICAgICAgICAgICAgICAgJiYgbm9kZS5jYW5TcGVjdWxh
dGVJbnRlZ2VyKCkpKQorICAgICAgICAgICAgICAgIGJhbGxvdCA9IFZvdGVEb3VibGU7CisgICAg
ICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgYmFsbG90ID0gVm90ZVZhbHVlOwogICAgICAg
ICAgICAgICAgIAotICAgICAgICAgICAgICAgIG1fZ3JhcGgudm90ZShub2RlLmNoaWxkMSgpLCBi
YWxsb3QpOwotICAgICAgICAgICAgICAgIG1fZ3JhcGgudm90ZShub2RlLmNoaWxkMigpLCBiYWxs
b3QpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQorICAgICAgICAgICAg
bV9ncmFwaC52b3RlTm9kZShub2RlLT5jaGlsZDEoKSwgYmFsbG90KTsKKyAgICAgICAgICAgIG1f
Z3JhcGgudm90ZU5vZGUobm9kZS0+Y2hpbGQyKCksIGJhbGxvdCk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgY2FzZSBBcml0aEFi
czoKLSAgICAgICAgICAgICAgICBEb3VibGVCYWxsb3QgYmFsbG90OwotICAgICAgICAgICAgICAg
IGlmICghKG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0uc2hvdWxkU3BlY3VsYXRlSW50ZWdlckZvckFy
aXRobWV0aWMoKQotICAgICAgICAgICAgICAgICAgICAgICYmIG5vZGUuY2FuU3BlY3VsYXRlSW50
ZWdlcigpKSkKLSAgICAgICAgICAgICAgICAgICAgYmFsbG90ID0gVm90ZURvdWJsZTsKLSAgICAg
ICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIGJhbGxvdCA9IFZvdGVWYWx1ZTsK
KyAgICAgICAgY2FzZSBBcml0aEFiczoKKyAgICAgICAgICAgIERvdWJsZUJhbGxvdCBiYWxsb3Q7
CisgICAgICAgICAgICBpZiAoIShub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlSW50ZWdl
ckZvckFyaXRobWV0aWMoKQorICAgICAgICAgICAgICAgICAgJiYgbm9kZS5jYW5TcGVjdWxhdGVJ
bnRlZ2VyKCkpKQorICAgICAgICAgICAgICAgIGJhbGxvdCA9IFZvdGVEb3VibGU7CisgICAgICAg
ICAgICBlbHNlCisgICAgICAgICAgICAgICAgYmFsbG90ID0gVm90ZVZhbHVlOwogICAgICAgICAg
ICAgICAgIAotICAgICAgICAgICAgICAgIG1fZ3JhcGgudm90ZShub2RlLmNoaWxkMSgpLCBiYWxs
b3QpOwotICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgbV9ncmFwaC52b3RlTm9k
ZShub2RlLT5jaGlsZDEoKSwgYmFsbG90KTsKKyAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgICAgIAotICAgICAgICAgICAgY2FzZSBBcml0aFNxcnQ6Ci0gICAgICAgICAgICAgICAgbV9n
cmFwaC52b3RlKG5vZGUuY2hpbGQxKCksIFZvdGVEb3VibGUpOwotICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIEFyaXRoU3FydDoKKyAgICAgICAgICAgIG1fZ3JhcGgudm90ZU5v
ZGUobm9kZS0+Y2hpbGQxKCksIFZvdGVEb3VibGUpOworICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICAgICAgCi0gICAgICAgICAgICBjYXNlIFNldExvY2FsOiB7Ci0gICAgICAgICAgICAg
ICAgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiA9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ucHJl
ZGljdGlvbigpOwotICAgICAgICAgICAgICAgIGlmIChpc0RvdWJsZVNwZWN1bGF0aW9uKHByZWRp
Y3Rpb24pKQotICAgICAgICAgICAgICAgICAgICBub2RlLnZhcmlhYmxlQWNjZXNzRGF0YSgpLT52
b3RlKFZvdGVEb3VibGUpOwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKCFpc051bWJlclNwZWN1
bGF0aW9uKHByZWRpY3Rpb24pIHx8IGlzSW50MzJTcGVjdWxhdGlvbihwcmVkaWN0aW9uKSkKLSAg
ICAgICAgICAgICAgICAgICAgbm9kZS52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+dm90ZShWb3RlVmFs
dWUpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQorICAgICAgICBjYXNl
IFNldExvY2FsOiB7CisgICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uID0gbm9k
ZS0+Y2hpbGQxKCktPnByZWRpY3Rpb24oKTsKKyAgICAgICAgICAgIGlmIChpc0RvdWJsZVNwZWN1
bGF0aW9uKHByZWRpY3Rpb24pKQorICAgICAgICAgICAgICAgIG5vZGUtPnZhcmlhYmxlQWNjZXNz
RGF0YSgpLT52b3RlKFZvdGVEb3VibGUpOworICAgICAgICAgICAgZWxzZSBpZiAoIWlzTnVtYmVy
U3BlY3VsYXRpb24ocHJlZGljdGlvbikgfHwgaXNJbnQzMlNwZWN1bGF0aW9uKHByZWRpY3Rpb24p
KQorICAgICAgICAgICAgICAgIG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT52b3RlKFZvdGVW
YWx1ZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQogICAgICAgICAgICAgICAgIAot
ICAgICAgICAgICAgY2FzZSBQdXRCeVZhbDoKLSAgICAgICAgICAgIGNhc2UgUHV0QnlWYWxBbGlh
czogewotICAgICAgICAgICAgICAgIEVkZ2UgY2hpbGQxID0gbV9ncmFwaC52YXJBcmdDaGlsZChu
b2RlLCAwKTsKLSAgICAgICAgICAgICAgICBFZGdlIGNoaWxkMiA9IG1fZ3JhcGgudmFyQXJnQ2hp
bGQobm9kZSwgMSk7Ci0gICAgICAgICAgICAgICAgRWRnZSBjaGlsZDMgPSBtX2dyYXBoLnZhckFy
Z0NoaWxkKG5vZGUsIDIpOwotICAgICAgICAgICAgICAgIG1fZ3JhcGgudm90ZShjaGlsZDEsIFZv
dGVWYWx1ZSk7Ci0gICAgICAgICAgICAgICAgbV9ncmFwaC52b3RlKGNoaWxkMiwgVm90ZVZhbHVl
KTsKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUuYXJyYXlNb2RlKCkudHlwZSgpKSB7Ci0g
ICAgICAgICAgICAgICAgY2FzZSBBcnJheTo6RG91YmxlOgotICAgICAgICAgICAgICAgICAgICBt
X2dyYXBoLnZvdGUoY2hpbGQzLCBWb3RlRG91YmxlKTsKLSAgICAgICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgbV9ncmFw
aC52b3RlKGNoaWxkMywgVm90ZVZhbHVlKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICAgICAgfQorICAgICAgICBjYXNlIFB1dEJ5VmFsOgorICAgICAgICBjYXNlIFB1
dEJ5VmFsQWxpYXM6IHsKKyAgICAgICAgICAgIEVkZ2UgY2hpbGQxID0gbV9ncmFwaC52YXJBcmdD
aGlsZChub2RlLCAwKTsKKyAgICAgICAgICAgIEVkZ2UgY2hpbGQyID0gbV9ncmFwaC52YXJBcmdD
aGlsZChub2RlLCAxKTsKKyAgICAgICAgICAgIEVkZ2UgY2hpbGQzID0gbV9ncmFwaC52YXJBcmdD
aGlsZChub2RlLCAyKTsKKyAgICAgICAgICAgIG1fZ3JhcGgudm90ZU5vZGUoY2hpbGQxLCBWb3Rl
VmFsdWUpOworICAgICAgICAgICAgbV9ncmFwaC52b3RlTm9kZShjaGlsZDIsIFZvdGVWYWx1ZSk7
CisgICAgICAgICAgICBzd2l0Y2ggKG5vZGUuYXJyYXlNb2RlKCkudHlwZSgpKSB7CisgICAgICAg
ICAgICBjYXNlIEFycmF5OjpEb3VibGU6CisgICAgICAgICAgICAgICAgbV9ncmFwaC52b3RlTm9k
ZShjaGlsZDMsIFZvdGVEb3VibGUpOwogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAg
ICAgICBtX2dyYXBoLnZvdGUobm9kZSwgVm90ZVZhbHVlKTsKKyAgICAgICAgICAgICAgICBtX2dy
YXBoLnZvdGVOb2RlKGNoaWxkMywgVm90ZVZhbHVlKTsKICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgICAg
ICAKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIG1fZ3JhcGgudm90ZUNoaWxkcmVuKG5v
ZGUsIFZvdGVWYWx1ZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyAg
ICAKKyAgICB2b2lkIGRvUm91bmRPZkRvdWJsZVZvdGluZygpCisgICAgeworI2lmIERGR19FTkFC
TEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKKyAgICAgICAgZGF0YUxvZ0YoIlZvdGluZyBv
biBkb3VibGUgdXNlcyBvZiBsb2NhbHMgWyV1XVxuIiwgbV9jb3VudCk7CisjZW5kaWYKKyAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fZ3JhcGgubV92YXJpYWJsZUFjY2Vzc0RhdGEu
c2l6ZSgpOyArK2kpCisgICAgICAgICAgICBtX2dyYXBoLm1fdmFyaWFibGVBY2Nlc3NEYXRhW2ld
LmZpbmQoKS0+Y2xlYXJWb3RlcygpOworICAgICAgICBmb3IgKEJhc2ljQmxvY2sgYmxvY2tJbmRl
eCA9IDA7IGkgPCBtX2dyYXBoLm1fYmxvY2tzLnNpemUoKTsgKytibG9ja0luZGV4KSB7CisgICAg
ICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGgubV9ibG9ja3NbYmxvY2tJbmRleF0u
Z2V0KCk7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYmxvY2stPnNpemUo
KTsgKytpKSB7CisgICAgICAgICAgICAgICAgbV9jdXJyZW50Tm9kZSA9IGJsb2NrLT5hdChpKTsK
KyAgICAgICAgICAgICAgICBkb0RvdWJsZVZvdGluZyhtX2N1cnJlbnROb2RlKTsKKyAgICAgICAg
ICAgIH0KICAgICAgICAgfQogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9ncmFw
aC5tX3ZhcmlhYmxlQWNjZXNzRGF0YS5zaXplKCk7ICsraSkgewogICAgICAgICAgICAgVmFyaWFi
bGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSAmbV9ncmFwaC5tX3ZhcmlhYmxlQWNj
ZXNzRGF0YVtpXTsKQEAgLTEwMTIsNyArMTAzMyw3IEBAIHByaXZhdGU6CiAgICAgICAgIH0KICAg
ICB9CiAgICAgCi0gICAgTm9kZUluZGV4IG1fY29tcGlsZUluZGV4OworICAgIE5vZGUqIG1fY3Vy
cmVudE5vZGU7CiAgICAgYm9vbCBtX2NoYW5nZWQ7CiAKICNpZiBERkdfRU5BQkxFKERFQlVHX1BS
T1BBR0FUSU9OX1ZFUkJPU0UpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0
cnVjdHVyZUFic3RyYWN0VmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1N0cnVjdHVyZUFic3RyYWN0VmFsdWUuaAkocmV2aXNpb24gMTQwNTY3KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExLCAy
MDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
MSwgMjAxMiwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMxNCw2ICszMTQsOCBAQCBwdWJsaWM6CiBwcml2YXRl
OgogICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIHRvcFZhbHVlKCkgeyByZXR1cm4gcmVpbnRlcnByZXRf
Y2FzdDxTdHJ1Y3R1cmUqPigxKTsgfQogICAgIAorICAgIC8vIE5CLiBUaGlzIG11c3QgaGF2ZSBh
IHRyaXZpYWwgZGVzdHJ1Y3Rvci4KKyAgICAKICAgICAvLyBUaGlzIGNhbiBvbmx5IHJlbWVtYmVy
IG9uZSBzdHJ1Y3R1cmUgYXQgYSB0aW1lLgogICAgIFN0cnVjdHVyZSogbV9zdHJ1Y3R1cmU7CiB9
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJ1Y3R1cmVDaGVja0hvaXN0
aW5nUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3RydWN0dXJlQ2hlY2tIb2lzdGluZ1BoYXNlLmNwcAkocmV2aXNpb24gMTQwNTY3KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJ1Y3R1cmVDaGVja0hvaXN0aW5nUGhhc2UuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC02NCwyMyArNjQsMjIgQEAgcHVibGljOgogICAgICAgICAgICAg
aWYgKCFibG9jaykKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgaW5kZXhJbkJsb2NrID0gMDsgaW5kZXhJbkJsb2NrIDwgYmxvY2stPnNpemUoKTsg
KytpbmRleEluQmxvY2spIHsKLSAgICAgICAgICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4ID0g
YmxvY2stPmF0KGluZGV4SW5CbG9jayk7Ci0gICAgICAgICAgICAgICAgTm9kZSYgbm9kZSA9IG1f
Z3JhcGhbbm9kZUluZGV4XTsKLSAgICAgICAgICAgICAgICBpZiAoIW5vZGUuc2hvdWxkR2VuZXJh
dGUoKSkKKyAgICAgICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPmF0KGluZGV4SW5CbG9j
ayk7CisgICAgICAgICAgICAgICAgaWYgKCFub2RlLT5zaG91bGRHZW5lcmF0ZSgpKQogICAgICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUub3Ao
KSkgeworICAgICAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewogICAgICAgICAgICAg
ICAgIGNhc2UgQ2hlY2tTdHJ1Y3R1cmU6CiAgICAgICAgICAgICAgICAgY2FzZSBTdHJ1Y3R1cmVU
cmFuc2l0aW9uV2F0Y2hwb2ludDogewotICAgICAgICAgICAgICAgICAgICBOb2RlJiBjaGlsZCA9
IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV07Ci0gICAgICAgICAgICAgICAgICAgIGlmIChjaGlsZC5v
cCgpICE9IEdldExvY2FsKQorICAgICAgICAgICAgICAgICAgICBOb2RlKiBjaGlsZCA9IG5vZGUt
PmNoaWxkMSgpLm5vZGUoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkLT5vcCgpICE9
IEdldExvY2FsKQogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAg
ICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBjaGlsZC52YXJpYWJsZUFjY2Vz
c0RhdGEoKTsKKyAgICAgICAgICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJs
ZSA9IGNoaWxkLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKICAgICAgICAgICAgICAgICAgICAgdmFy
aWFibGUtPnZvdGUoVm90ZVN0cnVjdHVyZUNoZWNrKTsKICAgICAgICAgICAgICAgICAgICAgaWYg
KHZhcmlhYmxlLT5pc0NhcHR1cmVkKCkgfHwgdmFyaWFibGUtPnN0cnVjdHVyZUNoZWNrSG9pc3Rp
bmdGYWlsZWQoKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
ICAgICAgICBpZiAoIWlzQ2VsbFNwZWN1bGF0aW9uKHZhcmlhYmxlLT5wcmVkaWN0aW9uKCkpKQog
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIG5vdGlj
ZVN0cnVjdHVyZUNoZWNrKHZhcmlhYmxlLCBub2RlLnN0cnVjdHVyZVNldCgpKTsKKyAgICAgICAg
ICAgICAgICAgICAgbm90aWNlU3RydWN0dXJlQ2hlY2sodmFyaWFibGUsIG5vZGUtPnN0cnVjdHVy
ZVNldCgpKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgICAgICAKQEAgLTEwOSwxMyArMTA4LDEzIEBAIHB1YmxpYzoKICAgICAg
ICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgY2FzZSBBcnJheWlmeVRvU3RydWN0dXJl
OgogICAgICAgICAgICAgICAgIGNhc2UgQXJyYXlpZnk6Ci0gICAgICAgICAgICAgICAgICAgIGlm
IChub2RlLmFycmF5TW9kZSgpLmNvbnZlcnNpb24oKSA9PSBBcnJheTo6UmFnZUNvbnZlcnQpIHsK
KyAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmFycmF5TW9kZSgpLmNvbnZlcnNpb24oKSA9
PSBBcnJheTo6UmFnZUNvbnZlcnQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJhZ2Ug
Y29udmVyc2lvbiBjaGFuZ2VzIHN0cnVjdHVyZXMuIFdlIHNob3VsZCBhdm9pZCB0eWluZyB0byBk
bwogICAgICAgICAgICAgICAgICAgICAgICAgLy8gYW55IGtpbmQgb2YgaG9pc3Rpbmcgd2hlbiBy
YWdlIGNvbnZlcnNpb24gaXMgaW4gcGxheS4KLSAgICAgICAgICAgICAgICAgICAgICAgIE5vZGUm
IGNoaWxkID0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChjaGlsZC5vcCgpICE9IEdldExvY2FsKQorICAgICAgICAgICAgICAgICAgICAgICAgTm9k
ZSogY2hpbGQgPSBub2RlLT5jaGlsZDEoKS5ub2RleCgpOworICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKGNoaWxkLT5vcCgpICE9IEdldExvY2FsKQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2
YXJpYWJsZSA9IGNoaWxkLnZhcmlhYmxlQWNjZXNzRGF0YSgpOworICAgICAgICAgICAgICAgICAg
ICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IGNoaWxkLT52YXJpYWJsZUFjY2Vz
c0RhdGEoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLT52b3RlKFZvdGVPdGhl
cik7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFyaWFibGUtPmlzQ2FwdHVyZWQoKSB8
fCB2YXJpYWJsZS0+c3RydWN0dXJlQ2hlY2tIb2lzdGluZ0ZhaWxlZCgpKQogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTMwLDMwICsxMjksMjkgQEAgcHVibGljOgogICAg
ICAgICAgICAgICAgICAgICAvLyBraW5kIG9mIENoZWNrU3RydWN0dXJlLCB0aGVuIHdlIHNob3Vs
ZCBub3RpY2UgdGhlbSB0byBlbnN1cmUgdGhhdAogICAgICAgICAgICAgICAgICAgICAvLyB3ZSdy
ZSBub3QgaG9pc3RpbmcgYSBjaGVjayB0aGF0IHdvdWxkIGNvbnRyYXZlbmUgY2hlY2tzIHRoYXQg
YXJlCiAgICAgICAgICAgICAgICAgICAgIC8vIGFscmVhZHkgYmVpbmcgcGVyZm9ybWVkLgotICAg
ICAgICAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbm9kZS52YXJp
YWJsZUFjY2Vzc0RhdGEoKTsKKyAgICAgICAgICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRh
KiB2YXJpYWJsZSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOwogICAgICAgICAgICAgICAg
ICAgICBpZiAodmFyaWFibGUtPmlzQ2FwdHVyZWQoKSB8fCB2YXJpYWJsZS0+c3RydWN0dXJlQ2hl
Y2tIb2lzdGluZ0ZhaWxlZCgpKQogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICAgICAgICAgIGlmICghaXNDZWxsU3BlY3VsYXRpb24odmFyaWFibGUtPnByZWRpY3Rp
b24oKSkpCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAg
ICAgTm9kZUluZGV4IHNvdXJjZSA9IG5vZGUuY2hpbGQxKCkuaW5kZXgoKTsKKyAgICAgICAgICAg
ICAgICAgICAgTm9kZSogc291cmNlID0gbm9kZS0+Y2hpbGQxKCkubm9kZSgpOwogICAgICAgICAg
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIHN1YkluZGV4SW5CbG9jayA9IDA7IHN1YkluZGV4SW5C
bG9jayA8IGJsb2NrLT5zaXplKCk7ICsrc3ViSW5kZXhJbkJsb2NrKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBOb2RlSW5kZXggc3ViTm9kZUluZGV4ID0gYmxvY2stPmF0KHN1YkluZGV4SW5C
bG9jayk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBOb2RlJiBzdWJOb2RlID0gbV9ncmFwaFtz
dWJOb2RlSW5kZXhdOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFzdWJOb2RlLnNob3Vs
ZEdlbmVyYXRlKCkpCisgICAgICAgICAgICAgICAgICAgICAgICBOb2RlKiBzdWJOb2RlID0gYmxv
Y2stPmF0KHN1YkluZGV4SW5CbG9jayk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXN1
Yk5vZGUtPnNob3VsZEdlbmVyYXRlKCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
dGludWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHN1Yk5vZGUub3AoKSkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChzdWJOb2RlLT5vcCgpKSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICBjYXNlIENoZWNrU3RydWN0dXJlOiB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKHN1Yk5vZGUuY2hpbGQxKCkuaW5kZXgoKSAhPSBzb3VyY2UpCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN1Yk5vZGUtPmNoaWxkMSgpICE9IHNvdXJjZSkK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbm90aWNlU3RydWN0dXJl
Q2hlY2sodmFyaWFibGUsIHN1Yk5vZGUuc3RydWN0dXJlU2V0KCkpOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG5vdGljZVN0cnVjdHVyZUNoZWNrKHZhcmlhYmxlLCBzdWJOb2RlLT5zdHJ1
Y3R1cmVTZXQoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFN0cnVjdHVy
ZVRyYW5zaXRpb25XYXRjaHBvaW50OiB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KHN1Yk5vZGUuY2hpbGQxKCkuaW5kZXgoKSAhPSBzb3VyY2UpCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKHN1Yk5vZGUtPmNoaWxkMSgpICE9IHNvdXJjZSkKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbm90aWNlU3RydWN0dXJlQ2hlY2sodmFyaWFibGUs
IHN1Yk5vZGUuc3RydWN0dXJlKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vdGlj
ZVN0cnVjdHVyZUNoZWNrKHZhcmlhYmxlLCBzdWJOb2RlLT5zdHJ1Y3R1cmUoKSk7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgpAQCAtMTYxLDE0ICsxNTksMTQgQEAgcHVi
bGljOgogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLnZvdGUobm9k
ZSwgVm90ZU90aGVyKTsKKyAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC52b3RlQ2hpbGRyZW4o
bm9kZSwgVm90ZU90aGVyKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgIGNhc2UgR2FyYmFnZVZhbHVlOgogICAgICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgZGVm
YXVsdDoKLSAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC52b3RlKG5vZGUsIFZvdGVPdGhlcik7
CisgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgudm90ZUNoaWxkcmVuKG5vZGUsIFZvdGVPdGhl
cik7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIH0KQEAgLTIwOSwxMCArMjA3LDEwIEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBj
b250aW51ZTsKICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9ncmFwaC5tX211
c3RIYW5kbGVWYWx1ZXMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgICAgICAgICBpbnQgb3BlcmFu
ZCA9IG1fZ3JhcGgubV9tdXN0SGFuZGxlVmFsdWVzLm9wZXJhbmRGb3JJbmRleChpKTsKLSAgICAg
ICAgICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4ID0gYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5v
cGVyYW5kKG9wZXJhbmQpOwotICAgICAgICAgICAgICAgIGlmIChub2RlSW5kZXggPT0gTm9Ob2Rl
KQorICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+dmFyaWFibGVzQXRIZWFkLm9w
ZXJhbmQob3BlcmFuZCk7CisgICAgICAgICAgICAgICAgaWYgKCFub2RlKQogICAgICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZh
cmlhYmxlID0gbV9ncmFwaFtub2RlSW5kZXhdLnZhcmlhYmxlQWNjZXNzRGF0YSgpOworICAgICAg
ICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBub2RlLT52YXJpYWJsZUFj
Y2Vzc0RhdGEoKTsKICAgICAgICAgICAgICAgICBIYXNoTWFwPFZhcmlhYmxlQWNjZXNzRGF0YSos
IENoZWNrRGF0YT46Oml0ZXJhdG9yIGl0ZXIgPSBtX21hcC5maW5kKHZhcmlhYmxlKTsKICAgICAg
ICAgICAgICAgICBpZiAoaXRlciA9PSBtX21hcC5lbmQoKSkKICAgICAgICAgICAgICAgICAgICAg
Y29udGludWU7CkBAIC0yNjUsNDggKzI2Myw0NyBAQCBwdWJsaWM6CiAgICAgICAgICAgICBpZiAo
IWJsb2NrKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBpbmRleEluQmxvY2sgPSAwOyBpbmRleEluQmxvY2sgPCBibG9jay0+c2l6ZSgpOyArK2lu
ZGV4SW5CbG9jaykgewotICAgICAgICAgICAgICAgIE5vZGVJbmRleCBub2RlSW5kZXggPSBibG9j
ay0+YXQoaW5kZXhJbkJsb2NrKTsKLSAgICAgICAgICAgICAgICBOb2RlJiBub2RlID0gbV9ncmFw
aFtub2RlSW5kZXhdOworICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+YXQoaW5k
ZXhJbkJsb2NrKTsKICAgICAgICAgICAgICAgICAvLyBCZSBjYXJlZnVsIG5vdCB0byB1c2UgJ25v
ZGUnIGFmdGVyIGFwcGVuZGluZyB0byB0aGUgZ3JhcGguIEluIHRob3NlIHN3aXRjaAogICAgICAg
ICAgICAgICAgIC8vIGNhc2VzIHdoZXJlIHdlIG5lZWQgdG8gYXBwZW5kLCB3ZSBmaXJzdCBjYXJl
ZnVsbHkgZXh0cmFjdCBldmVyeXRoaW5nIHdlIG5lZWQKICAgICAgICAgICAgICAgICAvLyBmcm9t
IHRoZSBub2RlLCBiZWZvcmUgZG9pbmcgYW55IGFwcGVuZGluZy4KLSAgICAgICAgICAgICAgICBp
ZiAoIW5vZGUuc2hvdWxkR2VuZXJhdGUoKSkKKyAgICAgICAgICAgICAgICBpZiAoIW5vZGUtPnNo
b3VsZEdlbmVyYXRlKCkpCiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAg
ICAgICAgIHN3aXRjaCAobm9kZS5vcCgpKSB7CisgICAgICAgICAgICAgICAgc3dpdGNoIChub2Rl
LT5vcCgpKSB7CiAgICAgICAgICAgICAgICAgY2FzZSBTZXRBcmd1bWVudDogewogICAgICAgICAg
ICAgICAgICAgICBBU1NFUlQoIWJsb2NrSW5kZXgpOwogICAgICAgICAgICAgICAgICAgICAvLyBJ
bnNlcnQgYSBHZXRMb2NhbCBhbmQgYSBDaGVja1N0cnVjdHVyZSBpbW1lZGlhdGVseSBmb2xsb3dp
bmcgdGhpcwogICAgICAgICAgICAgICAgICAgICAvLyBTZXRBcmd1bWVudCwgaWYgdGhlIHZhcmlh
YmxlIHdhcyBhIGNhbmRpZGF0ZSBmb3Igc3RydWN0dXJlIGhvaXN0aW5nLgogICAgICAgICAgICAg
ICAgICAgICAvLyBJZiB0aGUgYmFzaWMgYmxvY2sgcHJldmlvdXNseSBvbmx5IGhhZCB0aGUgU2V0
QXJndW1lbnQgYXMgaXRzCiAgICAgICAgICAgICAgICAgICAgIC8vIHZhcmlhYmxlLWF0LXRhaWws
IHRoZW4gcmVwbGFjZSBpdCB3aXRoIHRoaXMgR2V0TG9jYWwuCi0gICAgICAgICAgICAgICAgICAg
IFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBub2RlLnZhcmlhYmxlQWNjZXNzRGF0YSgp
OworICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbm9k
ZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CiAgICAgICAgICAgICAgICAgICAgIEhhc2hNYXA8VmFy
aWFibGVBY2Nlc3NEYXRhKiwgQ2hlY2tEYXRhPjo6aXRlcmF0b3IgaXRlciA9IG1fbWFwLmZpbmQo
dmFyaWFibGUpOwogICAgICAgICAgICAgICAgICAgICBpZiAoaXRlciA9PSBtX21hcC5lbmQoKSkK
ICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICBpZiAo
IWl0ZXItPnZhbHVlLm1fc3RydWN0dXJlKQogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBDb2RlT3JpZ2luIGNv
ZGVPcmlnaW4gPSBub2RlLmNvZGVPcmlnaW47CisgICAgICAgICAgICAgICAgICAgIENvZGVPcmln
aW4gY29kZU9yaWdpbiA9IG5vZGUtPmNvZGVPcmlnaW47CiAgICAgICAgICAgICAgICAgICAgIAot
ICAgICAgICAgICAgICAgICAgICBOb2RlSW5kZXggZ2V0TG9jYWxJbmRleCA9IGluc2VydGlvblNl
dC5pbnNlcnROb2RlKAorICAgICAgICAgICAgICAgICAgICBOb2RlKiBnZXRMb2NhbCA9IGluc2Vy
dGlvblNldC5pbnNlcnROb2RlKAogICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhJbkJsb2Nr
ICsgMSwgRG9udFJlZkNoaWxkcmVuLCBEb250UmVmTm9kZSwgdmFyaWFibGUtPnByZWRpY3Rpb24o
KSwKLSAgICAgICAgICAgICAgICAgICAgICAgIEdldExvY2FsLCBjb2RlT3JpZ2luLCBPcEluZm8o
dmFyaWFibGUpLCBub2RlSW5kZXgpOworICAgICAgICAgICAgICAgICAgICAgICAgR2V0TG9jYWws
IGNvZGVPcmlnaW4sIE9wSW5mbyh2YXJpYWJsZSksIG5vZGUpOwogICAgICAgICAgICAgICAgICAg
ICBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4
SW5CbG9jayArIDEsIFJlZkNoaWxkcmVuLCBEb250UmVmTm9kZSwgU3BlY05vbmUsIENoZWNrU3Ry
dWN0dXJlLAogICAgICAgICAgICAgICAgICAgICAgICAgY29kZU9yaWdpbiwgT3BJbmZvKG1fZ3Jh
cGguYWRkU3RydWN0dXJlU2V0KGl0ZXItPnZhbHVlLm1fc3RydWN0dXJlKSksCiAgICAgICAgICAg
ICAgICAgICAgICAgICBnZXRMb2NhbEluZGV4KTsKIAotICAgICAgICAgICAgICAgICAgICBpZiAo
YmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSA9PSBub2Rl
SW5kZXgpCi0gICAgICAgICAgICAgICAgICAgICAgICBibG9jay0+dmFyaWFibGVzQXRUYWlsLm9w
ZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpID0gZ2V0TG9jYWxJbmRleDsKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKGJsb2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwo
KSkgPT0gbm9kZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrLT52YXJpYWJsZXNBdFRh
aWwub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkgPSBnZXRMb2NhbDsKICAgICAgICAgICAgICAg
ICAgICAgCi0gICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguc3Vic3RpdHV0ZUdldExvY2FsKCpi
bG9jaywgaW5kZXhJbkJsb2NrLCB2YXJpYWJsZSwgZ2V0TG9jYWxJbmRleCk7CisgICAgICAgICAg
ICAgICAgICAgIG1fZ3JhcGguc3Vic3RpdHV0ZUdldExvY2FsKCpibG9jaywgaW5kZXhJbkJsb2Nr
LCB2YXJpYWJsZSwgZ2V0TG9jYWwpOwogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAg
ICAgICAgICAgY2hhbmdlZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgY2Fz
ZSBTZXRMb2NhbDogewotICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZh
cmlhYmxlID0gbm9kZS52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKKyAgICAgICAgICAgICAgICAgICAg
VmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgp
OwogICAgICAgICAgICAgICAgICAgICBIYXNoTWFwPFZhcmlhYmxlQWNjZXNzRGF0YSosIENoZWNr
RGF0YT46Oml0ZXJhdG9yIGl0ZXIgPSBtX21hcC5maW5kKHZhcmlhYmxlKTsKICAgICAgICAgICAg
ICAgICAgICAgaWYgKGl0ZXIgPT0gbV9tYXAuZW5kKCkpCiAgICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKQEAgLTMxNyw4ICszMTQsOCBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAg
IC8vIGJlIGRyb3BwZWQgaW50byB0aGlzIGJ5dGVjb2RlIHZhcmlhYmxlIGlmIHRoZSBDaGVja1N0
cnVjdHVyZSBkZWNpZGVzCiAgICAgICAgICAgICAgICAgICAgIC8vIHRvIGV4aXQuCiAgICAgICAg
ICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBDb2RlT3JpZ2luIGNvZGVPcmlnaW4g
PSBub2RlLmNvZGVPcmlnaW47Ci0gICAgICAgICAgICAgICAgICAgIE5vZGVJbmRleCBjaGlsZDEg
PSBub2RlLmNoaWxkMSgpLmluZGV4KCk7CisgICAgICAgICAgICAgICAgICAgIENvZGVPcmlnaW4g
Y29kZU9yaWdpbiA9IG5vZGUtPmNvZGVPcmlnaW47CisgICAgICAgICAgICAgICAgICAgIE5vZGUq
IGNoaWxkMSA9IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKICAgICAgICAgICAgICAgICAgICAgCiAg
ICAgICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnROb2RlKAogICAgICAgICAgICAg
ICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBEb250UmVmQ2hpbGRyZW4sIERvbnRSZWZOb2RlLCBT
cGVjTm9uZSwgU2V0TG9jYWwsIGNvZGVPcmlnaW4sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1ZhbGlkYXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1ZhbGlkYXRlLmNwcAkocmV2aXNpb24gMTQwNTY3KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdWYWxpZGF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgwLDQwICs4
MCw0MyBAQCBwdWJsaWM6CiAgICAgICAgIC8vIFZhbGlkYXRlIHRoYXQgYWxsIGxvY2FsIHZhcmlh
YmxlcyBhdCB0aGUgaGVhZCBvZiB0aGUgcm9vdCBibG9jayBhcmUgZGVhZC4KICAgICAgICAgQmFz
aWNCbG9jayogcm9vdCA9IG1fZ3JhcGgubV9ibG9ja3NbMF0uZ2V0KCk7CiAgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCByb290LT52YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZMb2NhbHMo
KTsgKytpKQotICAgICAgICAgICAgVl9FUVVBTCgoc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVy
PihpKSwgMCksIE5vTm9kZSwgcm9vdC0+dmFyaWFibGVzQXRIZWFkLmxvY2FsKGkpKTsKKyAgICAg
ICAgICAgIFZfRVFVQUwoKHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4oaSksIDApLCAwLCBy
b290LT52YXJpYWJsZXNBdEhlYWQubG9jYWwoaSkpOwogICAgICAgICAKICAgICAgICAgLy8gVmFs
aWRhdGUgcmVmIGNvdW50cyBhbmQgdXNlcy4KLSAgICAgICAgVmVjdG9yPHVuc2lnbmVkPiBteVJl
ZkNvdW50czsKLSAgICAgICAgbXlSZWZDb3VudHMuZmlsbCgwLCBtX2dyYXBoLnNpemUoKSk7Ci0g
ICAgICAgIEJpdFZlY3RvciBhY2NlcHRhYmxlTm9kZUluZGljZXM7CisgICAgICAgIEhhc2hNYXA8
Tm9kZSosIHVuc2lnbmVkPiBteVJlZkNvdW50czsKICAgICAgICAgZm9yIChCbG9ja0luZGV4IGJs
b2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9ncmFwaC5tX2Jsb2Nrcy5zaXplKCk7ICsrYmxv
Y2tJbmRleCkgewogICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLm1fYmxv
Y2tzW2Jsb2NrSW5kZXhdLmdldCgpOwotICAgICAgICAgICAgaWYgKCFibG9jaykKKyAgICAgICAg
ICAgIGlmICghYmxvY2sgfHwgIWJsb2NrLT5pc1JlYWNoYWJsZSkKICAgICAgICAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgICAgIGlmICghYmxvY2stPmlzUmVhY2hhYmxlKQorICAgICAgICAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBibG9jay0+bnVtTm9kZXMoKTsgKytpKQorICAgICAg
ICAgICAgICAgIG15UmVmQ291bnRzLmFkZChibG9jay0+bm9kZShpKSwgMCk7CisgICAgICAgIH0K
KyAgICAgICAgSGFzaFNldDxOb2RlKj4gYWNjZXB0YWJsZU5vZGVzOworICAgICAgICBmb3IgKEJs
b2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2dyYXBoLm1fYmxvY2tzLnNp
emUoKTsgKytibG9ja0luZGV4KSB7CisgICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1f
Z3JhcGgubV9ibG9ja3NbYmxvY2tJbmRleF0uZ2V0KCk7CisgICAgICAgICAgICBpZiAoIWJsb2Nr
IHx8ICFibG9jay0+aXNSZWFjaGFibGUpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAg
ICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGJsb2NrLT5udW1Ob2RlcygpOyArK2kpIHsK
LSAgICAgICAgICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4ID0gYmxvY2stPm5vZGVJbmRleChp
KTsKLSAgICAgICAgICAgICAgICBhY2NlcHRhYmxlTm9kZUluZGljZXMuc2V0KG5vZGVJbmRleCk7
Ci0gICAgICAgICAgICAgICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhbbm9kZUluZGV4XTsKLSAgICAg
ICAgICAgICAgICBpZiAoIW5vZGUuc2hvdWxkR2VuZXJhdGUoKSkKKyAgICAgICAgICAgICAgICBO
b2RlKiBub2RlID0gYmxvY2stPm5vZGUoaSk7CisgICAgICAgICAgICAgICAgYWNjZXB0YWJsZU5v
ZGVzLmFkZChub2RlKTsKKyAgICAgICAgICAgICAgICBpZiAoIW5vZGUtPnNob3VsZEdlbmVyYXRl
KCkpCiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgaiA9IDA7IGogPCBtX2dyYXBoLm51bUNoaWxkcmVuKG5vZGUpOyArK2opIHsKICAg
ICAgICAgICAgICAgICAgICAgRWRnZSBlZGdlID0gbV9ncmFwaC5jaGlsZChub2RlLCBqKTsKICAg
ICAgICAgICAgICAgICAgICAgaWYgKCFlZGdlKQogICAgICAgICAgICAgICAgICAgICAgICAgY29u
dGludWU7CiAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBteVJlZkNv
dW50c1tlZGdlLmluZGV4KCldKys7CisgICAgICAgICAgICAgICAgICAgIG15UmVmQ291bnRzLmZp
bmQoZWRnZS5ub2RlKCkpLT52YWx1ZSsrOwogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAg
ICAgICAgICAgICAgLy8gVW5sZXNzIEknbSBhIEZsdXNoLCBQaGFudG9tLCBHZXRMb2NhbCwgb3Ig
UGhpLCBteSBjaGlsZHJlbiBzaG91bGQgaGFzUmVzdWx0KCkuCi0gICAgICAgICAgICAgICAgICAg
IHN3aXRjaCAobm9kZS5vcCgpKSB7CisgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+
b3AoKSkgewogICAgICAgICAgICAgICAgICAgICBjYXNlIEZsdXNoOgogICAgICAgICAgICAgICAg
ICAgICBjYXNlIFBoYW50b206CiAgICAgICAgICAgICAgICAgICAgIGNhc2UgR2V0TG9jYWw6CiAg
ICAgICAgICAgICAgICAgICAgIGNhc2UgUGhpOgogICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBWQUxJREFURSgobm9kZUluZGV4LCBlZGdlKSwgbV9ncmFwaFtlZGdlXS5oYXNSZXN1bHQoKSk7
CisgICAgICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgobm9kZSwgZWRnZSksIGVkZ2UtPmhh
c1Jlc3VsdCgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQpAQCAtMTIxLDU0ICsxMjQsNTAgQEAgcHVibGlj
OgogICAgICAgICB9CiAgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gMDsgYmxv
Y2tJbmRleCA8IG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgpOyArK2Jsb2NrSW5kZXgpIHsKICAgICAg
ICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5tX2Jsb2Nrc1tibG9ja0luZGV4XS5n
ZXQoKTsKLSAgICAgICAgICAgIGlmICghYmxvY2spCi0gICAgICAgICAgICAgICAgY29udGludWU7
Ci0gICAgICAgICAgICBpZiAoIWJsb2NrLT5pc1JlYWNoYWJsZSkKKyAgICAgICAgICAgIGlmICgh
YmxvY2sgfHwgIWJsb2NrLT5pc1JlYWNoYWJsZSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsK
ICAgICAgICAgICAgIAotICAgICAgICAgICAgQml0VmVjdG9yIHBoaXNJblRoaXNCbG9jazsKLSAg
ICAgICAgICAgIEJpdFZlY3RvciBub2Rlc0luVGhpc0Jsb2NrOworICAgICAgICAgICAgSGFzaFNl
dDxOb2RlKj4gcGhpc0luVGhpc0Jsb2NrOworICAgICAgICAgICAgSGFzaFNldDxOb2RlKj4gbm9k
ZXNJblRoaXNCbG9jazsKICAgICAgICAgICAgIAogICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBibG9jay0+bnVtTm9kZXMoKTsgKytpKSB7Ci0gICAgICAgICAgICAgICAgTm9kZUlu
ZGV4IG5vZGVJbmRleCA9IGJsb2NrLT5ub2RlSW5kZXgoaSk7Ci0gICAgICAgICAgICAgICAgTm9k
ZSYgbm9kZSA9IG1fZ3JhcGhbbm9kZUluZGV4XTsKLSAgICAgICAgICAgICAgICBub2Rlc0luVGhp
c0Jsb2NrLnNldChub2RlSW5kZXgpOworICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9j
ay0+bm9kZShpKTsKKyAgICAgICAgICAgICAgICBub2Rlc0luVGhpc0Jsb2NrLmFkZChub2RlKTsK
ICAgICAgICAgICAgICAgICBpZiAoYmxvY2stPmlzUGhpSW5kZXgoaSkpCi0gICAgICAgICAgICAg
ICAgICAgIHBoaXNJblRoaXNCbG9jay5zZXQobm9kZUluZGV4KTsKLSAgICAgICAgICAgICAgICBW
X0VRVUFMKChub2RlSW5kZXgpLCBteVJlZkNvdW50c1tub2RlSW5kZXhdLCBub2RlLmFkanVzdGVk
UmVmQ291bnQoKSk7CisgICAgICAgICAgICAgICAgICAgIHBoaXNJblRoaXNCbG9jay5hZGQobm9k
ZSk7CisgICAgICAgICAgICAgICAgVl9FUVVBTCgobm9kZSksIG15UmVmQ291bnRzLmdldChub2Rl
SW5kZXgpLCBub2RlLmFkanVzdGVkUmVmQ291bnQoKSk7CiAgICAgICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBqID0gMDsgaiA8IG1fZ3JhcGgubnVtQ2hpbGRyZW4obm9kZSk7ICsraikgewogICAg
ICAgICAgICAgICAgICAgICBFZGdlIGVkZ2UgPSBtX2dyYXBoLmNoaWxkKG5vZGUsIGopOwogICAg
ICAgICAgICAgICAgICAgICBpZiAoIWVkZ2UpCiAgICAgICAgICAgICAgICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKG5vZGVJbmRleCwgZWRnZSksIGFj
Y2VwdGFibGVOb2RlSW5kaWNlcy5nZXQoZWRnZS5pbmRleCgpKSk7CisgICAgICAgICAgICAgICAg
ICAgIFZBTElEQVRFKChub2RlLCBlZGdlKSwgYWNjZXB0YWJsZU5vZGVJbmRpY2VzLmNvbnRhaW5z
KGVkZ2Uubm9kZSgpKSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAg
ICAgICAgCiAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGJsb2NrLT5waGlzLnNp
emUoKTsgKytpKSB7Ci0gICAgICAgICAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRleCA9IGJsb2Nr
LT5waGlzW2ldOwotICAgICAgICAgICAgICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW25vZGVJbmRl
eF07Ci0gICAgICAgICAgICAgICAgQVNTRVJUKHBoaXNJblRoaXNCbG9jay5nZXQobm9kZUluZGV4
KSk7Ci0gICAgICAgICAgICAgICAgVkFMSURBVEUoKG5vZGVJbmRleCksIG5vZGUub3AoKSA9PSBQ
aGkpOwotICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBsb2NhbCA9IG5vZGUubG9jYWwo
KTsKKyAgICAgICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPnBoaXNbaV07CisgICAgICAg
ICAgICAgICAgQVNTRVJUKHBoaXNJblRoaXNCbG9jay5jb250YWlucyhub2RlKSk7CisgICAgICAg
ICAgICAgICAgVkFMSURBVEUoKG5vZGUpLCBub2RlLT5vcCgpID09IFBoaSk7CisgICAgICAgICAg
ICAgICAgVmlydHVhbFJlZ2lzdGVyIGxvY2FsID0gbm9kZS0+bG9jYWwoKTsKICAgICAgICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGogPSAwOyBqIDwgbV9ncmFwaC5udW1DaGlsZHJlbihub2RlKTsg
KytqKSB7CiAgICAgICAgICAgICAgICAgICAgIEVkZ2UgZWRnZSA9IG1fZ3JhcGguY2hpbGQobm9k
ZSwgaik7CiAgICAgICAgICAgICAgICAgICAgIGlmICghZWRnZSkKICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAg
ICAgVkFMSURBVEUoKG5vZGVJbmRleCwgZWRnZSksCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG1fZ3JhcGhbZWRnZV0ub3AoKSA9PSBTZXRMb2NhbAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB8fCBtX2dyYXBoW2VkZ2VdLm9wKCkgPT0gU2V0QXJndW1lbnQKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfHwgbV9ncmFwaFtlZGdlXS5vcCgpID09IEZsdXNoCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHx8IG1fZ3JhcGhbZWRnZV0ub3AoKSA9PSBQaGkpOworICAg
ICAgICAgICAgICAgICAgICBWQUxJREFURSgobm9kZSwgZWRnZSksCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGVkZ2UtPm9wKCkgPT0gU2V0TG9jYWwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfHwgZWRnZS0+b3AoKSA9PSBTZXRBcmd1bWVudAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB8fCBlZGdlLT5vcCgpID09IEZsdXNoCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHx8IGVkZ2UtPm9wKCkgPT0gUGhpKTsKICAgICAgICAgICAgICAgICAgICAgCi0gICAg
ICAgICAgICAgICAgICAgIGlmIChwaGlzSW5UaGlzQmxvY2suZ2V0KGVkZ2UuaW5kZXgoKSkpCisg
ICAgICAgICAgICAgICAgICAgIGlmIChwaGlzSW5UaGlzQmxvY2suY29udGFpbnMoZWRnZS5ub2Rl
KCkpKQogICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAg
ICAgIAotICAgICAgICAgICAgICAgICAgICBpZiAobm9kZXNJblRoaXNCbG9jay5nZXQoZWRnZS5p
bmRleCgpKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKG5vZGVJbmRleCwg
ZWRnZSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoW2VkZ2VdLm9w
KCkgPT0gU2V0TG9jYWwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IG1fZ3Jh
cGhbZWRnZV0ub3AoKSA9PSBTZXRBcmd1bWVudAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfHwgbV9ncmFwaFtlZGdlXS5vcCgpID09IEZsdXNoKTsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKG5vZGVzSW5UaGlzQmxvY2suY29udGFpbnMoZWRnZS5ub2RlKCkpKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBWQUxJREFURSgobm9kZSwgZWRnZSksCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBlZGdlLT5vcCgpID09IFNldExvY2FsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB8fCBlZGdlLT5vcCgpID09IFNldEFyZ3VtZW50CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB8fCBlZGdlLT5vcCgpID09IEZsdXNoKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAg
ICAgICAgICAgICAgICAgIH0KQEAgLTE4MCwzMyArMTc5LDMwIEBAIHB1YmxpYzoKICAgICAgICAg
ICAgICAgICAgICAgICAgIEJhc2ljQmxvY2sqIHByZXZCbG9jayA9IG1fZ3JhcGgubV9ibG9ja3Nb
YmxvY2stPm1fcHJlZGVjZXNzb3JzW2tdXS5nZXQoKTsKICAgICAgICAgICAgICAgICAgICAgICAg
IFZBTElEQVRFKChCbG9jaywgYmxvY2stPm1fcHJlZGVjZXNzb3JzW2tdKSwgcHJldkJsb2NrKTsK
ICAgICAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChCbG9jaywgYmxvY2stPm1fcHJlZGVj
ZXNzb3JzW2tdKSwgcHJldkJsb2NrLT5pc1JlYWNoYWJsZSk7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBOb2RlSW5kZXggcHJldk5vZGVJbmRleCA9IHByZXZCbG9jay0+dmFyaWFibGVzQXRUYWls
Lm9wZXJhbmQobG9jYWwpOworICAgICAgICAgICAgICAgICAgICAgICAgTm9kZSogcHJldk5vZGUg
PSBwcmV2QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKGxvY2FsKTsKICAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIElmIHdlIGhhdmUgYSBQaGkgdGhhdCBpcyBub3QgcmVmZXJyaW5nIHRv
ICp0aGlzKiBibG9jayB0aGVuIGFsbCBwcmVkZWNlc3NvcnMKICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIG11c3QgaGF2ZSB0aGF0IGxvY2FsIGF2YWlsYWJsZS4KLSAgICAgICAgICAgICAgICAg
ICAgICAgIFZBTElEQVRFKChsb2NhbCwgYmxvY2tJbmRleCwgQmxvY2ssIGJsb2NrLT5tX3ByZWRl
Y2Vzc29yc1trXSksIHByZXZOb2RlSW5kZXggIT0gTm9Ob2RlKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIE5vZGUqIHByZXZOb2RlID0gJm1fZ3JhcGhbcHJldk5vZGVJbmRleF07Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBpZiAocHJldk5vZGUtPm9wKCkgPT0gR2V0TG9jYWwpIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBwcmV2Tm9kZUluZGV4ID0gcHJldk5vZGUtPmNoaWxkMSgp
LmluZGV4KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldk5vZGUgPSAmbV9ncmFw
aFtwcmV2Tm9kZUluZGV4XTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIChub2RlLnNob3VsZEdlbmVyYXRlKCkpIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBWQUxJREFURSgobG9jYWwsIGJsb2NrLT5tX3ByZWRlY2Vzc29yc1trXSwg
cHJldk5vZGVJbmRleCksCisgICAgICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgobG9jYWws
IGJsb2NrSW5kZXgsIEJsb2NrLCBibG9jay0+bV9wcmVkZWNlc3NvcnNba10pLCBwcmV2Tm9kZSk7
CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJldk5vZGUtPm9wKCkgPT0gR2V0TG9jYWwp
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldk5vZGUgPSBwcmV2Tm9kZS0+Y2hpbGQx
KCkubm9kZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPnNob3VsZEdlbmVy
YXRlKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgobG9jYWwsIGJs
b2NrLT5tX3ByZWRlY2Vzc29yc1trXSwgcHJldk5vZGUpLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHByZXZOb2RlLT5zaG91bGRHZW5lcmF0ZSgpKTsKICAgICAgICAgICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChsb2NhbCwg
YmxvY2stPm1fcHJlZGVjZXNzb3JzW2tdLCBwcmV2Tm9kZUluZGV4KSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgIFZBTElEQVRFKChsb2NhbCwgYmxvY2stPm1fcHJlZGVjZXNzb3JzW2tdLCBwcmV2
Tm9kZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2Tm9kZS0+b3AoKSA9
PSBTZXRMb2NhbAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgcHJldk5vZGUt
Pm9wKCkgPT0gU2V0QXJndW1lbnQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8
IHByZXZOb2RlLT5vcCgpID09IEZsdXNoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB8fCBwcmV2Tm9kZS0+b3AoKSA9PSBQaGkpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KHByZXZOb2RlSW5kZXggPT0gZWRnZS5pbmRleCgpKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAocHJldk5vZGUgPT0gZWRnZS5ub2RlKCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBmb3VuZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBBdCB0
aGlzIHBvaW50IGl0IGNhbm5vdCByZWZlciBpbnRvIHRoaXMgYmxvY2suCi0gICAgICAgICAgICAg
ICAgICAgICAgICBWQUxJREFURSgobG9jYWwsIGJsb2NrLT5tX3ByZWRlY2Vzc29yc1trXSwgcHJl
dk5vZGVJbmRleCksICFwcmV2QmxvY2stPmlzSW5CbG9jayhlZGdlLmluZGV4KCkpKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChsb2NhbCwgYmxvY2stPm1fcHJlZGVjZXNzb3Jz
W2tdLCBwcmV2Tm9kZSksICFwcmV2QmxvY2stPmlzSW5CbG9jayhlZGdlLm5vZGUoKSkpOwogICAg
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAg
ICAgICBWQUxJREFURSgobm9kZUluZGV4LCBlZGdlKSwgZm91bmQpOworICAgICAgICAgICAgICAg
ICAgICBWQUxJREFURSgobm9kZSwgZWRnZSksIGZvdW5kKTsKICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAKQEAgLTIyNywzNCArMjIzLDMzIEBAIHB1YmxpYzoK
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBibG9jay0+c2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgICAgICBOb2RlSW5kZXgg
bm9kZUluZGV4ID0gYmxvY2stPmF0KGkpOwotICAgICAgICAgICAgICAgIE5vZGUmIG5vZGUgPSBt
X2dyYXBoW25vZGVJbmRleF07Ci0gICAgICAgICAgICAgICAgQVNTRVJUKG5vZGVzSW5UaGlzQmxv
Y2suZ2V0KG5vZGVJbmRleCkpOwotICAgICAgICAgICAgICAgIFZBTElEQVRFKChub2RlSW5kZXgp
LCBub2RlLm9wKCkgIT0gUGhpKTsKKyAgICAgICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2st
PmF0KGkpOworICAgICAgICAgICAgICAgIEFTU0VSVChub2Rlc0luVGhpc0Jsb2NrLmNvbnRhaW5z
KG5vZGUpKTsKKyAgICAgICAgICAgICAgICBWQUxJREFURSgobm9kZSksIG5vZGUtPm9wKCkgIT0g
UGhpKTsKICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSAwOyBqIDwgbV9ncmFwaC5u
dW1DaGlsZHJlbihub2RlKTsgKytqKSB7CiAgICAgICAgICAgICAgICAgICAgIEVkZ2UgZWRnZSA9
IG1fZ3JhcGguY2hpbGQobm9kZSwgaik7CiAgICAgICAgICAgICAgICAgICAgIGlmICghZWRnZSkK
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAgICBW
QUxJREFURSgobm9kZUluZGV4LCBlZGdlKSwgbm9kZXNJblRoaXNCbG9jay5nZXQobm9kZUluZGV4
KSk7CisgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChub2RlLCBlZGdlKSwgbm9kZXNJblRo
aXNCbG9jay5jb250YWlucyhlZGdlLm5vZGUoKSkpOwogICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBpZiAoIW5vZGUuc2hvdWxkR2VuZXJhdGUoKSkK
KyAgICAgICAgICAgICAgICBpZiAoIW5vZGUtPnNob3VsZEdlbmVyYXRlKCkpCiAgICAgICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIHN3aXRjaCAobm9kZS5vcCgpKSB7
CisgICAgICAgICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CiAgICAgICAgICAgICAgICAg
Y2FzZSBHZXRMb2NhbDoKLSAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUudmFyaWFibGVBY2Nl
c3NEYXRhKCktPmlzQ2FwdHVyZWQoKSkKKyAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPnZh
cmlhYmxlQWNjZXNzRGF0YSgpLT5pc0NhcHR1cmVkKCkpCiAgICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKG5vZGVJbmRleCwgYmxvY2tJ
bmRleCksIGdldExvY2FsUG9zaXRpb25zLm9wZXJhbmQobm9kZS5sb2NhbCgpKSA9PSBub3RTZXQp
OwotICAgICAgICAgICAgICAgICAgICBnZXRMb2NhbFBvc2l0aW9ucy5vcGVyYW5kKG5vZGUubG9j
YWwoKSkgPSBpOworICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgobm9kZSwgYmxvY2tJbmRl
eCksIGdldExvY2FsUG9zaXRpb25zLm9wZXJhbmQobm9kZS0+bG9jYWwoKSkgPT0gbm90U2V0KTsK
KyAgICAgICAgICAgICAgICAgICAgZ2V0TG9jYWxQb3NpdGlvbnMub3BlcmFuZChub2RlLT5sb2Nh
bCgpKSA9IGk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIGNh
c2UgU2V0TG9jYWw6Ci0gICAgICAgICAgICAgICAgICAgIGlmIChub2RlLnZhcmlhYmxlQWNjZXNz
RGF0YSgpLT5pc0NhcHR1cmVkKCkpCisgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT52YXJp
YWJsZUFjY2Vzc0RhdGEoKS0+aXNDYXB0dXJlZCgpKQogICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIC8vIE9ubHkgcmVjb3JkIHRoZSBmaXJzdCBTZXRM
b2NhbC4gVGhlcmUgbWF5IGJlIG11bHRpcGxlIFNldExvY2FscwogICAgICAgICAgICAgICAgICAg
ICAvLyBiZWNhdXNlIG9mIGZsdXNoaW5nLgotICAgICAgICAgICAgICAgICAgICBpZiAoc2V0TG9j
YWxQb3NpdGlvbnMub3BlcmFuZChub2RlLmxvY2FsKCkpICE9IG5vdFNldCkKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKHNldExvY2FsUG9zaXRpb25zLm9wZXJhbmQobm9kZS0+bG9jYWwoKSkgIT0g
bm90U2V0KQogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAg
ICAgIHNldExvY2FsUG9zaXRpb25zLm9wZXJhbmQobm9kZS5sb2NhbCgpKSA9IGk7CisgICAgICAg
ICAgICAgICAgICAgIHNldExvY2FsUG9zaXRpb25zLm9wZXJhbmQobm9kZS0+bG9jYWwoKSkgPSBp
OwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICBkZWZhdWx0Ogog
ICAgICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTI5NCw5ICsyODksOSBAQCBwcml2YXRlOgog
ICAgICAgICAgICAgZ2V0TG9jYWxQb3NpdGlvbnMub3BlcmFuZChvcGVyYW5kKSA8IHNldExvY2Fs
UG9zaXRpb25zLm9wZXJhbmQob3BlcmFuZCkpOwogICAgIH0KICAgICAKLSAgICB2b2lkIHJlcG9y
dFZhbGlkYXRpb25Db250ZXh0KE5vZGVJbmRleCBub2RlSW5kZXgpCisgICAgdm9pZCByZXBvcnRW
YWxpZGF0aW9uQ29udGV4dChOb2RlKiBub2RlKQogICAgIHsKLSAgICAgICAgZGF0YUxvZ0YoIkAl
dSIsIG5vZGVJbmRleCk7CisgICAgICAgIGRhdGFMb2dGKCJAJXUiLCBub2RlLT5pbmRleCgpKTsK
ICAgICB9CiAgICAgCiAgICAgZW51bSBCbG9ja1RhZyB7IEJsb2NrIH07CkBAIC0zMDUsOSArMzAw
LDkgQEAgcHJpdmF0ZToKICAgICAgICAgZGF0YUxvZ0YoIkJsb2NrICMldSIsIGJsb2NrSW5kZXgp
OwogICAgIH0KICAgICAKLSAgICB2b2lkIHJlcG9ydFZhbGlkYXRpb25Db250ZXh0KE5vZGVJbmRl
eCBub2RlSW5kZXgsIEVkZ2UgZWRnZSkKKyAgICB2b2lkIHJlcG9ydFZhbGlkYXRpb25Db250ZXh0
KE5vZGUqIG5vZGUsIEVkZ2UgZWRnZSkKICAgICB7Ci0gICAgICAgIGRhdGFMb2dGKCJAJXUgLT4g
JXNAJXUiLCBub2RlSW5kZXgsIHVzZUtpbmRUb1N0cmluZyhlZGdlLnVzZUtpbmQoKSksIGVkZ2Uu
aW5kZXgoKSk7CisgICAgICAgIGRhdGFMb2dGKCJAJXUgLT4gJXNAJXUiLCBub2RlLT5pbmRleCgp
LCB1c2VLaW5kVG9TdHJpbmcoZWRnZS51c2VLaW5kKCkpLCBlZGdlLmluZGV4KCkpOwogICAgIH0K
ICAgICAKICAgICB2b2lkIHJlcG9ydFZhbGlkYXRpb25Db250ZXh0KFZpcnR1YWxSZWdpc3RlciBs
b2NhbCwgQmxvY2tJbmRleCBibG9ja0luZGV4KQpAQCAtMzIyLDI3ICszMTcsMjcgQEAgcHJpdmF0
ZToKICAgICB9CiAgICAgCiAgICAgdm9pZCByZXBvcnRWYWxpZGF0aW9uQ29udGV4dCgKLSAgICAg
ICAgVmlydHVhbFJlZ2lzdGVyIGxvY2FsLCBCbG9ja0luZGV4IHNvdXJjZUJsb2NrSW5kZXgsIE5v
ZGVJbmRleCBwcmV2Tm9kZUluZGV4KQorICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgbG9jYWwsIEJs
b2NrSW5kZXggc291cmNlQmxvY2tJbmRleCwgTm9kZSogcHJldk5vZGUpCiAgICAgewotICAgICAg
ICBkYXRhTG9nRigiQCV1IGZvciByJWQgaW4gQmxvY2sgIyV1IiwgcHJldk5vZGVJbmRleCwgbG9j
YWwsIHNvdXJjZUJsb2NrSW5kZXgpOworICAgICAgICBkYXRhTG9nRigiQCV1IGZvciByJWQgaW4g
QmxvY2sgIyV1IiwgcHJldk5vZGUtPmluZGV4KCksIGxvY2FsLCBzb3VyY2VCbG9ja0luZGV4KTsK
ICAgICB9CiAgICAgCiAgICAgdm9pZCByZXBvcnRWYWxpZGF0aW9uQ29udGV4dCgKLSAgICAgICAg
Tm9kZUluZGV4IG5vZGVJbmRleCwgQmxvY2tJbmRleCBibG9ja0luZGV4KQorICAgICAgICBOb2Rl
KiBub2RlLCBCbG9ja0luZGV4IGJsb2NrSW5kZXgpCiAgICAgewotICAgICAgICBkYXRhTG9nRigi
QCV1IGluIEJsb2NrICMldSIsIG5vZGVJbmRleCwgYmxvY2tJbmRleCk7CisgICAgICAgIGRhdGFM
b2dGKCJAJXUgaW4gQmxvY2sgIyV1Iiwgbm9kZS0+aW5kZXgoKSwgYmxvY2tJbmRleCk7CiAgICAg
fQogICAgIAogICAgIHZvaWQgcmVwb3J0VmFsaWRhdGlvbkNvbnRleHQoCi0gICAgICAgIE5vZGVJ
bmRleCBub2RlSW5kZXgsIE5vZGVJbmRleCBub2RlSW5kZXgyLCBCbG9ja0luZGV4IGJsb2NrSW5k
ZXgpCisgICAgICAgIE5vZGUqIG5vZGUsIE5vZGUqIG5vZGUyLCBCbG9ja0luZGV4IGJsb2NrSW5k
ZXgpCiAgICAgewotICAgICAgICBkYXRhTG9nRigiQCV1IGFuZCBAJXUgaW4gQmxvY2sgIyV1Iiwg
bm9kZUluZGV4LCBub2RlSW5kZXgyLCBibG9ja0luZGV4KTsKKyAgICAgICAgZGF0YUxvZ0YoIkAl
dSBhbmQgQCV1IGluIEJsb2NrICMldSIsIG5vZGUtPmluZGV4KCksIG5vZGUyLT5pbmRleCgpLCBi
bG9ja0luZGV4KTsKICAgICB9CiAgICAgCiAgICAgdm9pZCByZXBvcnRWYWxpZGF0aW9uQ29udGV4
dCgKLSAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRleCwgQmxvY2tJbmRleCBibG9ja0luZGV4LCBO
b2RlSW5kZXggZXhwZWN0ZWROb2RlSW5kZXgsIEVkZ2UgaW5jb21pbmdFZGdlKQorICAgICAgICBO
b2RlKiBub2RlLCBCbG9ja0luZGV4IGJsb2NrSW5kZXgsIE5vZGUqIGV4cGVjdGVkTm9kZSwgRWRn
ZSBpbmNvbWluZ0VkZ2UpCiAgICAgewotICAgICAgICBkYXRhTG9nRigiQCV1IGluIEJsb2NrICMl
dSwgc2VhcmNoaW5nIGZvciBAJXUgZnJvbSBAJXUiLCBub2RlSW5kZXgsIGJsb2NrSW5kZXgsIGV4
cGVjdGVkTm9kZUluZGV4LCBpbmNvbWluZ0VkZ2UuaW5kZXgoKSk7CisgICAgICAgIGRhdGFMb2dG
KCJAJXUgaW4gQmxvY2sgIyV1LCBzZWFyY2hpbmcgZm9yIEAldSBmcm9tIEAldSIsIG5vZGUtPmlu
ZGV4KCksIGJsb2NrSW5kZXgsIGV4cGVjdGVkTm9kZS0+aW5kZXgoKSwgaW5jb21pbmdFZGdlLmlu
ZGV4KCkpOwogICAgIH0KICAgICAKICAgICB2b2lkIGR1bXBEYXRhKHVuc2lnbmVkIHZhbHVlKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25FeGVjdXRhYmxlRHVt
cC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rp
b25FeGVjdXRhYmxlRHVtcC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9GdW5jdGlvbkV4ZWN1dGFibGVEdW1wLmNwcAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSwzNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRnVuY3Rpb25FeGVjdXRhYmxlRHVtcC5o
IgorCituYW1lc3BhY2UgSlNDIHsKKwordm9pZCBGdW5jdGlvbkV4ZWN1dGFibGVEdW1wOjpkdW1w
KFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KG1fZXhlY3V0YWJsZS0+
aW5mZXJyZWROYW1lKCkuc3RyaW5nKCksICIjIiwgbV9leGVjdXRhYmxlLT5oYXNoRm9yKENvZGVG
b3JDYWxsKSwgIi8iLCBtX2V4ZWN1dGFibGUtPmhhc2hGb3IoQ29kZUZvckNvbnN0cnVjdCksICI6
WyIsIFJhd1BvaW50ZXIobV9leGVjdXRhYmxlKSwgIl0iKTsKK30KKworfSAvLyBuYW1lc3BhY2Ug
SlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uRXhlY3V0
YWJsZUR1bXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9G
dW5jdGlvbkV4ZWN1dGFibGVEdW1wLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9GdW5jdGlvbkV4ZWN1dGFibGVEdW1wLmgJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsNDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2lmbmRlZiBGdW5jdGlvbkV4ZWN1dGFibGVEdW1wX2gKKyNkZWZpbmUgRnVuY3Rpb25FeGVj
dXRhYmxlRHVtcF9oCisKKyNpbmNsdWRlICJFeGVjdXRhYmxlLmgiCisjaW5jbHVkZSA8d3RmL1By
aW50U3RyZWFtLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBGdW5jdGlvbkV4ZWN1dGFi
bGVEdW1wIHsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBGdW5jdGlvbkV4ZWN1dGFibGVEdW1wKEZ1
bmN0aW9uRXhlY3V0YWJsZSogZXhlY3V0YWJsZSkKKyAgICAgICAgOiBtX2V4ZWN1dGFibGUoZXhl
Y3V0YWJsZSkKKyAgICB7CisgICAgfQorICAgIAorICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYp
IGNvbnN0OworcHJpdmF0ZToKKyAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIG1fZXhlY3V0YWJsZTsK
K307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gRnVuY3Rpb25FeGVjdXRhYmxl
RHVtcF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0
YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9i
YWxEYXRhLmNwcAkocmV2aXNpb24gMTQwNTY3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNHbG9iYWxEYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAog
I2luY2x1ZGUgIkFyZ0xpc3QuaCIKICNpbmNsdWRlICJDb2RlQ2FjaGUuaCIKICNpbmNsdWRlICJD
b21tb25JZGVudGlmaWVycy5oIgorI2luY2x1ZGUgIkRGR0xvbmdMaXZlZFN0YXRlLmgiCiAjaW5j
bHVkZSAiRGVidWdnZXJBY3RpdmF0aW9uLmgiCiAjaW5jbHVkZSAiRnVuY3Rpb25Db25zdHJ1Y3Rv
ci5oIgogI2luY2x1ZGUgIkdDQWN0aXZpdHlDYWxsYmFjay5oIgpAQCAtMjUxLDYgKzI1MiwxMSBA
QCBKU0dsb2JhbERhdGE6OkpTR2xvYmFsRGF0YShHbG9iYWxEYXRhVHlwCiAgICAgCiAgICAgaWYg
KE9wdGlvbnM6OmVuYWJsZVByb2ZpbGVyKCkpCiAgICAgICAgIG1fcGVyQnl0ZWNvZGVQcm9maWxl
ciA9IGFkb3B0UHRyKG5ldyBQcm9maWxlcjo6RGF0YWJhc2UoKnRoaXMpKTsKKworI2lmIEVOQUJM
RShERkdfSklUKQorICAgIGlmIChjYW5Vc2VKSVQoKSkKKyAgICAgICAgbV9kZmdTdGF0ZSA9IGFk
b3B0UHRyKG5ldyBERkc6OkxvbmdMaXZlZFN0YXRlKCkpOworI2VuZGlmCiB9CiAKIEpTR2xvYmFs
RGF0YTo6fkpTR2xvYmFsRGF0YSgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0dsb2JhbERhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0dsb2JhbERhdGEuaAkocmV2aXNpb24gMTQwNTY3KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTkxLDYgKzkx
LDEyIEBAIG5hbWVzcGFjZSBKU0MgewogICAgIGNsYXNzIFVubGlua2VkRnVuY3Rpb25FeGVjdXRh
YmxlOwogICAgIGNsYXNzIFVubGlua2VkUHJvZ3JhbUNvZGVCbG9jazsKIAorI2lmIEVOQUJMRShE
RkdfSklUKQorICAgIG5hbWVzcGFjZSBERkcgeworICAgIGNsYXNzIExvbmdMaXZlZFN0YXRlOwor
ICAgIH0KKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwogICAgIHN0cnVjdCBIYXNoVGFibGU7
CiAgICAgc3RydWN0IEluc3RydWN0aW9uOwogCkBAIC0xODksNiArMTk1LDEwIEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICAvLyBUaGUgaGVhcCBzaG91bGQgYmUganVzdCBhZnRlciBleGVjdXRh
YmxlQWxsb2NhdG9yIGFuZCBiZWZvcmUgb3RoZXIgbWVtYmVycyB0byBlbnN1cmUgdGhhdCBpdCdz
CiAgICAgICAgIC8vIGRlc3RydWN0ZWQgYWZ0ZXIgYWxsIHRoZSBvYmplY3RzIHRoYXQgcmVmZXJl
bmNlIGl0LgogICAgICAgICBIZWFwIGhlYXA7CisgICAgICAgIAorI2lmIEVOQUJMRShERkdfSklU
KQorICAgICAgICBPd25QdHI8REZHOjpMb25nTGl2ZWRTdGF0ZT4gbV9kZmdTdGF0ZTsKKyNlbmRp
ZiAvLyBFTkFCTEUoREZHX0pJVCkKIAogICAgICAgICBHbG9iYWxEYXRhVHlwZSBnbG9iYWxEYXRh
VHlwZTsKICAgICAgICAgQ2xpZW50RGF0YSogY2xpZW50RGF0YTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>184559</attachid>
            <date>2013-01-24 12:58:54 -0800</date>
            <delta_ts>2013-01-24 12:59:33 -0800</delta_ts>
            <desc>WRONG PATCH</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>8661</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTQwNDk5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI5IEBA
CisyMDEzLTAxLTIyICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
Q29udmVydCBDU0UgcGhhc2UgdG8gbm90IHJlbHkgdG9vIG11Y2ggb24gTm9kZUluZGV4CisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDc2MTYKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIC0gSW5z
dGVhZCBvZiBsb29waW5nIG92ZXIgdGhlIGdyYXBoICh3aGljaCBhc3N1bWVzIHRoYXQgeW91IGNh
biBzaW1wbHkgbG9vcCBvdmVyIGFsbAorICAgICAgICAgIG5vZGVzIHdpdGhvdXQgY29uc2lkZXJp
bmcgYmxvY2tzIGZpcnN0KSB0byByZXNldCBub2RlLnJlcGxhY2VtZW50LCBkbyB0aGF0IGluIHRo
ZQorICAgICAgICAgIGxvb3AgdGhhdCBzZXRzIHVwIHJlbGV2YW50VG9PU1IsIGp1c3QgYmVmb3Jl
IHJ1bm5pbmcgQ1NFIG9uIHRoZSBibG9jay4KKyAgICAgICAgCisgICAgICAgIC0gSW5zdGVhZCBv
ZiBoYXZpbmcgYSByZWxldmFudFRvT1NSIGJpdHZlY3RvciBpbmRleGVkIGJ5IE5vZGVJbmRleCwg
bWFkZQorICAgICAgICAgIE5vZGVSZWxldmFudFRvT1NSIGJlIGEgTm9kZUZsYWcuIFdlIGhhZCBl
eGFjdGx5IG9uZSBiaXQgbGVmdCBpbiBOb2RlRmxhZ3MsIHNvIEkgZGlkCisgICAgICAgICAgc29t
ZSByZXNodWZmbGluZyB0byBmaXQgaXQgaW4uCisKKyAgICAgICAgKiBkZmcvREZHQ1NFUGhhc2Uu
Y3BwOgorICAgICAgICAoSlNDOjpERkc6OkNTRVBoYXNlOjpDU0VQaGFzZSk6CisgICAgICAgIChK
U0M6OkRGRzo6Q1NFUGhhc2U6OmVsaW1pbmF0ZUlycmVsZXZhbnRQaGFudG9tQ2hpbGRyZW4pOgor
ICAgICAgICAoSlNDOjpERkc6OkNTRVBoYXNlOjpwZXJmb3JtTm9kZUNTRSk6CisgICAgICAgIChK
U0M6OkRGRzo6Q1NFUGhhc2U6OnBlcmZvcm1CbG9ja0NTRSk6CisgICAgICAgIChDU0VQaGFzZSk6
CisgICAgICAgICogZGZnL0RGR05vZGVGbGFncy5oOgorICAgICAgICAoREZHKToKKyAgICAgICAg
KiBkZmcvREZHTm9kZVR5cGUuaDoKKyAgICAgICAgKERGRyk6CisKIDIwMTMtMDEtMjEgIEtlbnRh
cm8gSGFyYSAgPGhhcmFrZW5AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIEltcGxlbWVudCBVSUV2
ZW50IGNvbnN0cnVjdG9yCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NTRVBo
YXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NTRVBo
YXNlLmNwcAkocmV2aXNpb24gMTQwNDkzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdDU0VQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5LDEwICszOSw2IEBAIHB1YmxpYzoK
ICAgICBDU0VQaGFzZShHcmFwaCYgZ3JhcGgpCiAgICAgICAgIDogUGhhc2UoZ3JhcGgsICJjb21t
b24gc3ViZXhwcmVzc2lvbiBlbGltaW5hdGlvbiIpCiAgICAgewotICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgbV9ncmFwaC5zaXplKCk7ICsraSkKLSAgICAgICAgICAgIG1fZ3JhcGhb
aV0ucmVwbGFjZW1lbnQgPSBOb05vZGU7Ci0gICAgICAgIAotICAgICAgICBtX3JlbGV2YW50VG9P
U1IucmVzaXplKG1fZ3JhcGguc2l6ZSgpKTsKICAgICB9CiAgICAgCiAgICAgYm9vbCBydW4oKQpA
QCAtMTAyMyw3ICsxMDE5LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIEVkZ2UgZWRnZSA9IG5v
ZGUuY2hpbGRyZW4uY2hpbGQoaSk7CiAgICAgICAgICAgICBpZiAoIWVkZ2UpCiAgICAgICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBpZiAobV9yZWxldmFudFRvT1NSLmdldChlZGdl
LmluZGV4KCkpKQorICAgICAgICAgICAgaWYgKG1fZ3JhcGhbZWRnZV0uZmxhZ3MoKSAmIE5vZGVS
ZWxldmFudFRvT1NSKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgCiAj
aWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQpAQCAtMTEwOCw3ICsxMTA0
LDcgQEAgcHJpdmF0ZToKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgaWYgKG5vZGUub3Ao
KSA9PSBTZXRMb2NhbCkKLSAgICAgICAgICAgIG1fcmVsZXZhbnRUb09TUi5zZXQobm9kZS5jaGls
ZDEoKS5pbmRleCgpKTsKKyAgICAgICAgICAgIG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ubWVyZ2VG
bGFncyhOb2RlUmVsZXZhbnRUb09TUik7CiAgICAgICAgIAogICAgICAgICBpZiAoIXNob3VsZEdl
bmVyYXRlKQogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMTQyOSwyMCArMTQyNSwyOSBAQCBwcml2
YXRlOgogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgTGFzdE5vZGVUeXBlOyArK2kp
CiAgICAgICAgICAgICBtX2xhc3RTZWVuW2ldID0gVUlOVF9NQVg7CiAgICAgICAgIAotICAgICAg
ICAvLyBNYWtlIGFsbCBvZiBteSBQaGkgbm9kZXMgcmVsZXZhbnQgdG8gT1NSLgotICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYmxvY2stPnBoaXMuc2l6ZSgpOyArK2kpCi0gICAgICAg
ICAgICBtX3JlbGV2YW50VG9PU1Iuc2V0KGJsb2NrLT5waGlzW2ldKTsKKyAgICAgICAgLy8gQWxs
IFBoaXMgbmVlZCB0byBhbHJlYWR5IGJlIG1hcmtlZCBhcyByZWxldmFudCB0byBPU1IsIGFuZCBo
YXZlIHRoZWlyCisgICAgICAgIC8vIHJlcGxhY2VtZW50cyBjbGVhcmVkLCBzbyB3ZSBkb24ndCBn
ZXQgY29uZnVzZWQgd2hpbGUgZG9pbmcgc3Vic3RpdHV0aW9ucyBvbgorICAgICAgICAvLyBHZXRM
b2NhbCdzLgorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYmxvY2stPnBoaXMuc2l6
ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIEFTU0VSVChtX2dyYXBoW2Jsb2NrLT5waGlzW2ldXS5m
bGFncygpICYgTm9kZVJlbGV2YW50VG9PU1IpOworICAgICAgICAgICAgbV9ncmFwaFtibG9jay0+
cGhpc1tpXV0ucmVwbGFjZW1lbnQgPSBOb05vZGU7CisgICAgICAgIH0KICAgICAgICAgCi0gICAg
ICAgIC8vIE1ha2UgYWxsIG9mIG15IFNldExvY2FsIGFuZCBHZXRMb2NhbCBub2RlcyByZWxldmFu
dCB0byBPU1IuCisgICAgICAgIC8vIE1ha2UgYWxsIG9mIG15IFNldExvY2FsIGFuZCBHZXRMb2Nh
bCBub2RlcyByZWxldmFudCB0byBPU1IsIGFuZCBkbyBzb21lIG90aGVyCisgICAgICAgIC8vIG5l
Y2Vzc2FyeSBib29ra2VlcGluZy4KICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGJs
b2NrLT5zaXplKCk7ICsraSkgewogICAgICAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRleCA9IGJs
b2NrLT5hdChpKTsKICAgICAgICAgICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW25vZGVJbmRleF07
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG5vZGUucmVwbGFjZW1lbnQgPSBOb05vZGU7Cisg
ICAgICAgICAgICAKICAgICAgICAgICAgIHN3aXRjaCAobm9kZS5vcCgpKSB7CiAgICAgICAgICAg
ICBjYXNlIFNldExvY2FsOgogICAgICAgICAgICAgY2FzZSBHZXRMb2NhbDogLy8gRklYTUU6IFRo
ZSBHZXRMb2NhbCBjYXNlIGlzIG9ubHkgbmVjZXNzYXJ5IHVudGlsIHdlIGRvIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDY3MDcuCi0gICAgICAgICAgICAgICAgbV9y
ZWxldmFudFRvT1NSLnNldChub2RlSW5kZXgpOworICAgICAgICAgICAgICAgIG5vZGUubWVyZ2VG
bGFncyhOb2RlUmVsZXZhbnRUb09TUik7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIG5vZGUuY2xlYXJGbGFncyhOb2RlUmVsZXZh
bnRUb09TUik7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAg
IH0KQEAgLTE0NTcsNyArMTQ2Miw2IEBAIHByaXZhdGU6CiAgICAgTm9kZUluZGV4IG1fY29tcGls
ZUluZGV4OwogICAgIHVuc2lnbmVkIG1faW5kZXhJbkJsb2NrOwogICAgIEZpeGVkQXJyYXk8dW5z
aWduZWQsIExhc3ROb2RlVHlwZT4gbV9sYXN0U2VlbjsKLSAgICBGYXN0Qml0VmVjdG9yIG1fcmVs
ZXZhbnRUb09TUjsKICAgICBib29sIG1fY2hhbmdlZDsgLy8gT25seSB0cmFja3MgY2hhbmdlcyB0
aGF0IGhhdmUgYSBzdWJzdGFudGl2ZSBlZmZlY3Qgb24gb3RoZXIgb3B0aW1pemF0aW9ucy4KIH07
CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZUZsYWdzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlRmxhZ3MuaAkocmV2aXNp
b24gMTQwNDkzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlRmxhZ3MuaAko
d29ya2luZyBjb3B5KQpAQCAtMzYsMzIgKzM2LDM0IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgREZHIHsKIAogLy8gRW50cmllcyBpbiB0aGUgTm9kZVR5cGUgZW51bSAoYmVsb3cpIGFyZSBj
b21wb3NlZCBvZiBhbiBpZCwgYSByZXN1bHQgdHlwZSAocG9zc2libHkgbm9uZSkKIC8vIGFuZCBz
b21lIGFkZGl0aW9uYWwgaW5mb3JtYXRpdmUgZmxhZ3MgKG11c3QgZ2VuZXJhdGUsIGlzIGNvbnN0
YW50LCBldGMpLgotI2RlZmluZSBOb2RlUmVzdWx0TWFzayAgICAgICAgICAgICAgMHhGCisjZGVm
aW5lIE5vZGVSZXN1bHRNYXNrICAgICAgICAgICAgICAweDcKICNkZWZpbmUgTm9kZVJlc3VsdEpT
ICAgICAgICAgICAgICAgIDB4MQogI2RlZmluZSBOb2RlUmVzdWx0TnVtYmVyICAgICAgICAgICAg
MHgyCiAjZGVmaW5lIE5vZGVSZXN1bHRJbnQzMiAgICAgICAgICAgICAweDMKICNkZWZpbmUgTm9k
ZVJlc3VsdEJvb2xlYW4gICAgICAgICAgIDB4NAogI2RlZmluZSBOb2RlUmVzdWx0U3RvcmFnZSAg
ICAgICAgICAgMHg1CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotI2RlZmluZSBO
b2RlTXVzdEdlbmVyYXRlICAgICAgICAgICAweDEwIC8vIHNldCBvbiBub2RlcyB0aGF0IGhhdmUg
c2lkZSBlZmZlY3RzLCBhbmQgbWF5IG5vdCB0cml2aWFsbHkgYmUgcmVtb3ZlZCBieSBEQ0UuCi0j
ZGVmaW5lIE5vZGVIYXNWYXJBcmdzICAgICAgICAgICAgIDB4MjAKLSNkZWZpbmUgTm9kZUNsb2Ji
ZXJzV29ybGQgICAgICAgICAgMHg0MAotI2RlZmluZSBOb2RlTWlnaHRDbG9iYmVyICAgICAgICAg
ICAweDgwCisjZGVmaW5lIE5vZGVNdXN0R2VuZXJhdGUgICAgICAgICAgIDB4MDggLy8gc2V0IG9u
IG5vZGVzIHRoYXQgaGF2ZSBzaWRlIGVmZmVjdHMsIGFuZCBtYXkgbm90IHRyaXZpYWxseSBiZSBy
ZW1vdmVkIGJ5IERDRS4KKyNkZWZpbmUgTm9kZUhhc1ZhckFyZ3MgICAgICAgICAgICAgMHgxMAor
I2RlZmluZSBOb2RlQ2xvYmJlcnNXb3JsZCAgICAgICAgICAweDIwCisjZGVmaW5lIE5vZGVNaWdo
dENsb2JiZXIgICAgICAgICAgIDB4NDAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ci0jZGVmaW5lIE5vZGVCZWhhdmlvck1hc2sgICAgICAgICAgMHgzMDAKLSNkZWZpbmUgTm9kZU1h
eU92ZXJmbG93ICAgICAgICAgICAweDEwMAotI2RlZmluZSBOb2RlTWF5TmVnWmVybyAgICAgICAg
ICAgIDB4MjAwCisjZGVmaW5lIE5vZGVCZWhhdmlvck1hc2sgICAgICAgICAgMHgxODAKKyNkZWZp
bmUgTm9kZU1heU92ZXJmbG93ICAgICAgICAgICAweDA4MAorI2RlZmluZSBOb2RlTWF5TmVnWmVy
byAgICAgICAgICAgIDB4MTAwCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotI2Rl
ZmluZSBOb2RlQmFja1Byb3BNYXNrICAgICAgICAgMHg3QzAwCisjZGVmaW5lIE5vZGVCYWNrUHJv
cE1hc2sgICAgICAgICAweDNFMDAKICNkZWZpbmUgTm9kZVVzZUJvdHRvbSAgICAgICAgICAgIDB4
MDAwMAotI2RlZmluZSBOb2RlVXNlZEFzTnVtYmVyICAgICAgICAgIDB4NDAwIC8vIFRoZSByZXN1
bHQgb2YgdGhpcyBjb21wdXRhdGlvbiBtYXkgYmUgdXNlZCBpbiBhIGNvbnRleHQgdGhhdCBvYnNl
cnZlcyBmcmFjdGlvbmFsLCBvciBiaWdnZXItdGhhbi1pbnQzMiwgcmVzdWx0cy4KLSNkZWZpbmUg
Tm9kZU5lZWRzTmVnWmVybyAgICAgICAgICAweDgwMCAvLyBUaGUgcmVzdWx0IG9mIHRoaXMgY29t
cHV0YXRpb24gbWF5IGJlIHVzZWQgaW4gYSBjb250ZXh0IHRoYXQgb2JzZXJ2ZXMgLTAuCi0jZGVm
aW5lIE5vZGVVc2VkQXNPdGhlciAgICAgICAgICAweDEwMDAgLy8gVGhlIHJlc3VsdCBvZiB0aGlz
IGNvbXB1dGF0aW9uIG1heSBiZSB1c2VkIGluIGEgY29udGV4dCB0aGF0IGRpc3Rpbmd1aXNoZXMg
YmV0d2VlbiBOYU4gYW5kIG90aGVyIHRoaW5ncyAobGlrZSB1bmRlZmluZWQpLgorI2RlZmluZSBO
b2RlVXNlZEFzTnVtYmVyICAgICAgICAgMHgwMjAwIC8vIFRoZSByZXN1bHQgb2YgdGhpcyBjb21w
dXRhdGlvbiBtYXkgYmUgdXNlZCBpbiBhIGNvbnRleHQgdGhhdCBvYnNlcnZlcyBmcmFjdGlvbmFs
LCBvciBiaWdnZXItdGhhbi1pbnQzMiwgcmVzdWx0cy4KKyNkZWZpbmUgTm9kZU5lZWRzTmVnWmVy
byAgICAgICAgIDB4MDQwMCAvLyBUaGUgcmVzdWx0IG9mIHRoaXMgY29tcHV0YXRpb24gbWF5IGJl
IHVzZWQgaW4gYSBjb250ZXh0IHRoYXQgb2JzZXJ2ZXMgLTAuCisjZGVmaW5lIE5vZGVVc2VkQXNP
dGhlciAgICAgICAgICAweDA4MDAgLy8gVGhlIHJlc3VsdCBvZiB0aGlzIGNvbXB1dGF0aW9uIG1h
eSBiZSB1c2VkIGluIGEgY29udGV4dCB0aGF0IGRpc3Rpbmd1aXNoZXMgYmV0d2VlbiBOYU4gYW5k
IG90aGVyIHRoaW5ncyAobGlrZSB1bmRlZmluZWQpLgogI2RlZmluZSBOb2RlVXNlZEFzVmFsdWUg
ICAgICAgICAgKE5vZGVVc2VkQXNOdW1iZXIgfCBOb2RlTmVlZHNOZWdaZXJvIHwgTm9kZVVzZWRB
c090aGVyKQotI2RlZmluZSBOb2RlVXNlZEFzSW50ICAgICAgICAgICAgMHgyMDAwIC8vIFRoZSBy
ZXN1bHQgb2YgdGhpcyBjb21wdXRhdGlvbiBpcyBrbm93biB0byBiZSB1c2VkIGluIGEgY29udGV4
dCB0aGF0IHByZWZlcnMsIGJ1dCBkb2VzIG5vdCByZXF1aXJlLCBpbnRlZ2VyIHZhbHVlcy4KLSNk
ZWZpbmUgTm9kZVVzZWRBc0ludExvY2FsbHkgICAgIDB4NDAwMCAvLyBTYW1lIGFzIE5vZGVVc2Vk
QXNJbnQsIGJ1dCB3aXRoaW4gdGhlIHNhbWUgYmFzaWMgYmxvY2suCisjZGVmaW5lIE5vZGVVc2Vk
QXNJbnQgICAgICAgICAgICAweDEwMDAgLy8gVGhlIHJlc3VsdCBvZiB0aGlzIGNvbXB1dGF0aW9u
IGlzIGtub3duIHRvIGJlIHVzZWQgaW4gYSBjb250ZXh0IHRoYXQgcHJlZmVycywgYnV0IGRvZXMg
bm90IHJlcXVpcmUsIGludGVnZXIgdmFsdWVzLgorI2RlZmluZSBOb2RlVXNlZEFzSW50TG9jYWxs
eSAgICAgMHgyMDAwIC8vIFNhbWUgYXMgTm9kZVVzZWRBc0ludCwgYnV0IHdpdGhpbiB0aGUgc2Ft
ZSBiYXNpYyBibG9jay4KIAotI2RlZmluZSBOb2RlRG9lc05vdEV4aXQgICAgICAgICAgMHg4MDAw
IC8vIFRoaXMgZmxhZyBpcyBuZWdhdGVkIHRvIG1ha2UgaXQgbmF0dXJhbCBmb3IgdGhlIGRlZmF1
bHQgdG8gYmUgdGhhdCBhIG5vZGUgZG9lcyBleGl0LgorI2RlZmluZSBOb2RlRG9lc05vdEV4aXQg
ICAgICAgICAgMHg0MDAwIC8vIFRoaXMgZmxhZyBpcyBuZWdhdGVkIHRvIG1ha2UgaXQgbmF0dXJh
bCBmb3IgdGhlIGRlZmF1bHQgdG8gYmUgdGhhdCBhIG5vZGUgZG9lcyBleGl0LgorCisjZGVmaW5l
IE5vZGVSZWxldmFudFRvT1NSICAgICAgICAweDgwMDAKIAogdHlwZWRlZiB1aW50MTZfdCBOb2Rl
RmxhZ3M7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgJKHJl
dmlzaW9uIDE0MDQ5MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUu
aAkod29ya2luZyBjb3B5KQpAQCAtNjAsOCArNjAsOCBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIERGRyB7CiAgICAgbWFjcm8oR2V0TG9jYWwsIE5vZGVSZXN1bHRKUykgXAogICAgIG1hY3Jv
KFNldExvY2FsLCAwKSBcCiAgICAgbWFjcm8oUGhhbnRvbSwgTm9kZU11c3RHZW5lcmF0ZSB8IE5v
ZGVEb2VzTm90RXhpdCkgXAotICAgIG1hY3JvKE5vcCwgMCB8IE5vZGVEb2VzTm90RXhpdCkgXAot
ICAgIG1hY3JvKFBoaSwgMCB8IE5vZGVEb2VzTm90RXhpdCkgXAorICAgIG1hY3JvKE5vcCwgTm9k
ZURvZXNOb3RFeGl0KSBcCisgICAgbWFjcm8oUGhpLCBOb2RlRG9lc05vdEV4aXQgfCBOb2RlUmVs
ZXZhbnRUb09TUikgXAogICAgIG1hY3JvKEZsdXNoLCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZURv
ZXNOb3RFeGl0KSBcCiAgICAgXAogICAgIC8qIEdldCB0aGUgdmFsdWUgb2YgYSBsb2NhbCB2YXJp
YWJsZSwgd2l0aG91dCBsaW5raW5nIGludG8gdGhlIFZhcmlhYmxlQWNjZXNzRGF0YSAqL1wK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>184560</attachid>
            <date>2013-01-24 12:59:33 -0800</date>
            <delta_ts>2013-01-24 13:51:38 -0800</delta_ts>
            <desc>work in progress</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>547346</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmNw
cAkocmV2aXNpb24gMTQwNjE2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0
cmFjdFN0YXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTEsIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDExLCAyMDEyLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtODcsMjEgKzg3LDIxIEBA
IHZvaWQgQWJzdHJhY3RTdGF0ZTo6aW5pdGlhbGl6ZShHcmFwaCYgZ3IKICAgICByb290LT5jZmFI
YXNWaXNpdGVkID0gZmFsc2U7CiAgICAgcm9vdC0+Y2ZhRm91bmRDb25zdGFudHMgPSBmYWxzZTsK
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHJvb3QtPnZhbHVlc0F0SGVhZC5udW1iZXJPZkFy
Z3VtZW50cygpOyArK2kpIHsKLSAgICAgICAgTm9kZSYgbm9kZSA9IGdyYXBoW3Jvb3QtPnZhcmlh
Ymxlc0F0SGVhZC5hcmd1bWVudChpKV07Ci0gICAgICAgIEFTU0VSVChub2RlLm9wKCkgPT0gU2V0
QXJndW1lbnQpOwotICAgICAgICBpZiAoIW5vZGUuc2hvdWxkR2VuZXJhdGUoKSkgeworICAgICAg
ICBOb2RlKiBub2RlID0gcm9vdC0+dmFyaWFibGVzQXRIZWFkLmFyZ3VtZW50KGkpOworICAgICAg
ICBBU1NFUlQobm9kZS0+b3AoKSA9PSBTZXRBcmd1bWVudCk7CisgICAgICAgIGlmICghbm9kZS0+
c2hvdWxkR2VuZXJhdGUoKSkgewogICAgICAgICAgICAgLy8gVGhlIGFyZ3VtZW50IGlzIGRlYWQu
IFdlIGRvbid0IGRvIGFueSBjaGVja3MgZm9yIHN1Y2ggYXJndW1lbnRzLCBhbmQgc28KICAgICAg
ICAgICAgIC8vIGZvciB0aGUgcHVycG9zZSBvZiB0aGUgYW5hbHlzaXMsIHRoZXkgY29udGFpbiBu
byB2YWx1ZS4KICAgICAgICAgICAgIHJvb3QtPnZhbHVlc0F0SGVhZC5hcmd1bWVudChpKS5jbGVh
cigpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAg
IGlmIChub2RlLnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5pc0NhcHR1cmVkKCkpIHsKKyAgICAgICAg
aWYgKG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5pc0NhcHR1cmVkKCkpIHsKICAgICAgICAg
ICAgIHJvb3QtPnZhbHVlc0F0SGVhZC5hcmd1bWVudChpKS5tYWtlVG9wKCk7CiAgICAgICAgICAg
ICBjb250aW51ZTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgU3BlY3VsYXRlZFR5cGUg
cHJlZGljdGlvbiA9IG5vZGUudmFyaWFibGVBY2Nlc3NEYXRhKCktPnByZWRpY3Rpb24oKTsKKyAg
ICAgICAgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0
YSgpLT5wcmVkaWN0aW9uKCk7CiAgICAgICAgIGlmIChpc0ludDMyU3BlY3VsYXRpb24ocHJlZGlj
dGlvbikpCiAgICAgICAgICAgICByb290LT52YWx1ZXNBdEhlYWQuYXJndW1lbnQoaSkuc2V0KFNw
ZWNJbnQzMik7CiAgICAgICAgIGVsc2UgaWYgKGlzQm9vbGVhblNwZWN1bGF0aW9uKHByZWRpY3Rp
b24pKQpAQCAtMTE0LDggKzExNCw4IEBAIHZvaWQgQWJzdHJhY3RTdGF0ZTo6aW5pdGlhbGl6ZShH
cmFwaCYgZ3IKICAgICAgICAgcm9vdC0+dmFsdWVzQXRUYWlsLmFyZ3VtZW50KGkpLmNsZWFyKCk7
CiAgICAgfQogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcm9vdC0+dmFsdWVzQXRIZWFkLm51
bWJlck9mTG9jYWxzKCk7ICsraSkgewotICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4ID0gcm9v
dC0+dmFyaWFibGVzQXRIZWFkLmxvY2FsKGkpOwotICAgICAgICBpZiAobm9kZUluZGV4ICE9IE5v
Tm9kZSAmJiBncmFwaFtub2RlSW5kZXhdLnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5pc0NhcHR1cmVk
KCkpCisgICAgICAgIE5vZGUqIG5vZGUgPSByb290LT52YXJpYWJsZXNBdEhlYWQubG9jYWwoaSk7
CisgICAgICAgIGlmIChub2RlICYmIG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5pc0NhcHR1
cmVkKCkpCiAgICAgICAgICAgICByb290LT52YWx1ZXNBdEhlYWQubG9jYWwoaSkubWFrZVRvcCgp
OwogICAgICAgICBlbHNlCiAgICAgICAgICAgICByb290LT52YWx1ZXNBdEhlYWQubG9jYWwoaSku
Y2xlYXIoKTsKQEAgLTIxMywxMSArMjEzLDExIEBAIHZvaWQgQWJzdHJhY3RTdGF0ZTo6cmVzZXQo
KQogICAgIG1fYnJhbmNoRGlyZWN0aW9uID0gSW52YWxpZEJyYW5jaERpcmVjdGlvbjsKIH0KIAot
QWJzdHJhY3RTdGF0ZTo6Qm9vbGVhblJlc3VsdCBBYnN0cmFjdFN0YXRlOjpib29sZWFuUmVzdWx0
KE5vZGUmIG5vZGUsIEFic3RyYWN0VmFsdWUmIHZhbHVlKQorQWJzdHJhY3RTdGF0ZTo6Qm9vbGVh
blJlc3VsdCBBYnN0cmFjdFN0YXRlOjpib29sZWFuUmVzdWx0KE5vZGUqIG5vZGUsIEFic3RyYWN0
VmFsdWUmIHZhbHVlKQogewogICAgIEpTVmFsdWUgY2hpbGRDb25zdCA9IHZhbHVlLnZhbHVlKCk7
CiAgICAgaWYgKGNoaWxkQ29uc3QpIHsKLSAgICAgICAgaWYgKGNoaWxkQ29uc3QudG9Cb29sZWFu
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3RGb3Iobm9kZS5jb2RlT3JpZ2luKS0+Z2xvYmFsRXhl
YygpKSkKKyAgICAgICAgaWYgKGNoaWxkQ29uc3QudG9Cb29sZWFuKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3RGb3Iobm9kZS0+Y29kZU9yaWdpbiktPmdsb2JhbEV4ZWMoKSkpCiAgICAgICAgICAg
ICByZXR1cm4gRGVmaW5pdGVseVRydWU7CiAgICAgICAgIHJldHVybiBEZWZpbml0ZWx5RmFsc2U7
CiAgICAgfQpAQCAtMjI2LDcgKzIyNiw3IEBAIEFic3RyYWN0U3RhdGU6OkJvb2xlYW5SZXN1bHQg
QWJzdHJhY3RTdGEKICAgICBpZiAoaXNDZWxsU3BlY3VsYXRpb24odmFsdWUubV90eXBlKQogICAg
ICAgICAmJiB2YWx1ZS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5oYXNTaW5nbGV0b24oKSkgewog
ICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHZhbHVlLm1fY3VycmVudEtub3duU3RydWN0
dXJlLnNpbmdsZXRvbigpOwotICAgICAgICBpZiAoIXN0cnVjdHVyZS0+bWFzcXVlcmFkZXNBc1Vu
ZGVmaW5lZChtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0Rm9yKG5vZGUuY29kZU9yaWdpbikpCisg
ICAgICAgIGlmICghc3RydWN0dXJlLT5tYXNxdWVyYWRlc0FzVW5kZWZpbmVkKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3RGb3Iobm9kZS0+Y29kZU9yaWdpbikpCiAgICAgICAgICAgICAmJiBzdHJ1
Y3R1cmUtPnR5cGVJbmZvKCkudHlwZSgpICE9IFN0cmluZ1R5cGUpCiAgICAgICAgICAgICByZXR1
cm4gRGVmaW5pdGVseVRydWU7CiAgICAgfQpAQCAtMjQxLDMyICsyNDEsMzEgQEAgYm9vbCBBYnN0
cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgIAogICAgIG1fZGlkQ2xvYmJlciA9
IGZhbHNlOwogICAgIAotICAgIE5vZGVJbmRleCBub2RlSW5kZXggPSBtX2Jsb2NrLT5hdChpbmRl
eEluQmxvY2spOwotICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW25vZGVJbmRleF07CisgICAgTm9k
ZSogbm9kZSA9IG1fYmxvY2stPmF0KGluZGV4SW5CbG9jayk7CiAgICAgICAgIAotICAgIGlmICgh
bm9kZS5zaG91bGRHZW5lcmF0ZSgpKQorICAgIGlmICghbm9kZS0+c2hvdWxkR2VuZXJhdGUoKSkK
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIAotICAgIHN3aXRjaCAobm9kZS5vcCgpKSB7
CisgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CiAgICAgY2FzZSBKU0NvbnN0YW50OgogICAgIGNh
c2UgV2Vha0pTQ29uc3RhbnQ6CiAgICAgY2FzZSBQaGFudG9tQXJndW1lbnRzOiB7Ci0gICAgICAg
IGZvck5vZGUobm9kZUluZGV4KS5zZXQobV9ncmFwaC52YWx1ZU9mSlNDb25zdGFudChub2RlSW5k
ZXgpKTsKLSAgICAgICAgbm9kZS5zZXRDYW5FeGl0KGZhbHNlKTsKKyAgICAgICAgZm9yTm9kZShu
b2RlKS5zZXQobV9ncmFwaC52YWx1ZU9mSlNDb25zdGFudChub2RlKSk7CisgICAgICAgIG5vZGUt
PnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIAogICAg
IGNhc2UgSWRlbnRpdHk6IHsKLSAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpID0gZm9yTm9kZShu
b2RlLmNoaWxkMSgpKTsKLSAgICAgICAgbm9kZS5zZXRDYW5FeGl0KGZhbHNlKTsKKyAgICAgICAg
Zm9yTm9kZShub2RlKSA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBub2RlLT5z
ZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAgICAgCiAg
ICAgY2FzZSBHZXRMb2NhbDogewotICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxl
QWNjZXNzRGF0YSA9IG5vZGUudmFyaWFibGVBY2Nlc3NEYXRhKCk7CisgICAgICAgIFZhcmlhYmxl
QWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRh
KCk7CiAgICAgICAgIGlmICh2YXJpYWJsZUFjY2Vzc0RhdGEtPnByZWRpY3Rpb24oKSA9PSBTcGVj
Tm9uZSkgewogICAgICAgICAgICAgbV9pc1ZhbGlkID0gZmFsc2U7Ci0gICAgICAgICAgICBub2Rl
LnNldENhbkV4aXQodHJ1ZSk7CisgICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgYm9vbCBjYW5FeGl0ID0gZmFs
c2U7CkBAIC0yNzcsNTMgKzI3Niw1MyBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5z
aWduZWQgaW5kCiAgICAgICAgIH0KICAgICAgICAgaWYgKHZhbHVlLnZhbHVlKCkpCiAgICAgICAg
ICAgICBtX2ZvdW5kQ29uc3RhbnRzID0gdHJ1ZTsKLSAgICAgICAgZm9yTm9kZShub2RlSW5kZXgp
ID0gdmFsdWU7Ci0gICAgICAgIG5vZGUuc2V0Q2FuRXhpdChjYW5FeGl0KTsKKyAgICAgICAgZm9y
Tm9kZShub2RlKSA9IHZhbHVlOworICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGNhbkV4aXQpOwog
ICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgR2V0TG9jYWxVbmxpbmtl
ZDogewotICAgICAgICBBYnN0cmFjdFZhbHVlIHZhbHVlID0gbV92YXJpYWJsZXMub3BlcmFuZChu
b2RlLnVubGlua2VkTG9jYWwoKSk7CisgICAgICAgIEFic3RyYWN0VmFsdWUgdmFsdWUgPSBtX3Zh
cmlhYmxlcy5vcGVyYW5kKG5vZGUtPnVubGlua2VkTG9jYWwoKSk7CiAgICAgICAgIGlmICh2YWx1
ZS52YWx1ZSgpKQogICAgICAgICAgICAgbV9mb3VuZENvbnN0YW50cyA9IHRydWU7Ci0gICAgICAg
IGZvck5vZGUobm9kZUluZGV4KSA9IHZhbHVlOwotICAgICAgICBub2RlLnNldENhbkV4aXQoZmFs
c2UpOworICAgICAgICBmb3JOb2RlKG5vZGUpID0gdmFsdWU7CisgICAgICAgIG5vZGUtPnNldENh
bkV4aXQoZmFsc2UpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIAogICAgIGNhc2Ug
U2V0TG9jYWw6IHsKLSAgICAgICAgaWYgKG5vZGUudmFyaWFibGVBY2Nlc3NEYXRhKCktPmlzQ2Fw
dHVyZWQoKQotICAgICAgICAgICAgfHwgbV9ncmFwaC5pc0NyZWF0ZWRUaGlzQXJndW1lbnQobm9k
ZS5sb2NhbCgpKSkgewotICAgICAgICAgICAgbV92YXJpYWJsZXMub3BlcmFuZChub2RlLmxvY2Fs
KCkpID0gZm9yTm9kZShub2RlLmNoaWxkMSgpKTsKLSAgICAgICAgICAgIG5vZGUuc2V0Q2FuRXhp
dChmYWxzZSk7CisgICAgICAgIGlmIChub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+aXNDYXB0
dXJlZCgpCisgICAgICAgICAgICB8fCBtX2dyYXBoLmlzQ3JlYXRlZFRoaXNBcmd1bWVudChub2Rl
LT5sb2NhbCgpKSkgeworICAgICAgICAgICAgbV92YXJpYWJsZXMub3BlcmFuZChub2RlLT5sb2Nh
bCgpKSA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgbm9kZS0+c2V0Q2Fu
RXhpdChmYWxzZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAKLSAg
ICAgICAgaWYgKG5vZGUudmFyaWFibGVBY2Nlc3NEYXRhKCktPnNob3VsZFVzZURvdWJsZUZvcm1h
dCgpKSB7CisgICAgICAgIGlmIChub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+c2hvdWxkVXNl
RG91YmxlRm9ybWF0KCkpIHsKICAgICAgICAgICAgIHNwZWN1bGF0ZU51bWJlclVuYXJ5KG5vZGUp
OwotICAgICAgICAgICAgbV92YXJpYWJsZXMub3BlcmFuZChub2RlLmxvY2FsKCkpLnNldChTcGVj
RG91YmxlKTsKKyAgICAgICAgICAgIG1fdmFyaWFibGVzLm9wZXJhbmQobm9kZS0+bG9jYWwoKSku
c2V0KFNwZWNEb3VibGUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAg
Ci0gICAgICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3RlZFR5cGUgPSBub2RlLnZhcmlhYmxlQWNj
ZXNzRGF0YSgpLT5hcmd1bWVudEF3YXJlUHJlZGljdGlvbigpOworICAgICAgICBTcGVjdWxhdGVk
VHlwZSBwcmVkaWN0ZWRUeXBlID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCktPmFyZ3VtZW50
QXdhcmVQcmVkaWN0aW9uKCk7CiAgICAgICAgIGlmIChpc0ludDMyU3BlY3VsYXRpb24ocHJlZGlj
dGVkVHlwZSkpCiAgICAgICAgICAgICBzcGVjdWxhdGVJbnQzMlVuYXJ5KG5vZGUpOwogICAgICAg
ICBlbHNlIGlmIChpc0NlbGxTcGVjdWxhdGlvbihwcmVkaWN0ZWRUeXBlKSkgewotICAgICAgICAg
ICAgbm9kZS5zZXRDYW5FeGl0KCFpc0NlbGxTcGVjdWxhdGlvbihmb3JOb2RlKG5vZGUuY2hpbGQx
KCkpLm1fdHlwZSkpOwotICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIo
U3BlY0NlbGwpOworICAgICAgICAgICAgbm9kZS5zZXRDYW5FeGl0KCFpc0NlbGxTcGVjdWxhdGlv
bihmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX3R5cGUpKTsKKyAgICAgICAgICAgIGZvck5vZGUo
bm9kZS0+Y2hpbGQxKCkpLmZpbHRlcihTcGVjQ2VsbCk7CiAgICAgICAgIH0gZWxzZSBpZiAoaXNC
b29sZWFuU3BlY3VsYXRpb24ocHJlZGljdGVkVHlwZSkpCiAgICAgICAgICAgICBzcGVjdWxhdGVC
b29sZWFuVW5hcnkobm9kZSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIG5vZGUuc2V0Q2Fu
RXhpdChmYWxzZSk7CisgICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAg
ICAgCi0gICAgICAgIG1fdmFyaWFibGVzLm9wZXJhbmQobm9kZS5sb2NhbCgpKSA9IGZvck5vZGUo
bm9kZS5jaGlsZDEoKSk7CisgICAgICAgIG1fdmFyaWFibGVzLm9wZXJhbmQobm9kZS0+bG9jYWwo
KSkgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAg
ICAgICAgICAgCiAgICAgY2FzZSBTZXRBcmd1bWVudDoKICAgICAgICAgLy8gQXNzZXJ0IHRoYXQg
dGhlIHN0YXRlIG9mIGFyZ3VtZW50cyBoYXMgYmVlbiBzZXQuCi0gICAgICAgIEFTU0VSVCghbV9i
bG9jay0+dmFsdWVzQXRIZWFkLm9wZXJhbmQobm9kZS5sb2NhbCgpKS5pc0NsZWFyKCkpOwotICAg
ICAgICBub2RlLnNldENhbkV4aXQoZmFsc2UpOworICAgICAgICBBU1NFUlQoIW1fYmxvY2stPnZh
bHVlc0F0SGVhZC5vcGVyYW5kKG5vZGUtPmxvY2FsKCkpLmlzQ2xlYXIoKSk7CisgICAgICAgIG5v
ZGUtPnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAg
IGNhc2UgQml0QW5kOgpAQCAtMzMyLDMwICszMzEsMzAgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpl
eGVjdXRlKHVuc2lnbmVkIGluZAogICAgIGNhc2UgQml0UlNoaWZ0OgogICAgIGNhc2UgQml0TFNo
aWZ0OgogICAgIGNhc2UgQml0VVJTaGlmdDogewotICAgICAgICBKU1ZhbHVlIGxlZnQgPSBmb3JO
b2RlKG5vZGUuY2hpbGQxKCkpLnZhbHVlKCk7Ci0gICAgICAgIEpTVmFsdWUgcmlnaHQgPSBmb3JO
b2RlKG5vZGUuY2hpbGQyKCkpLnZhbHVlKCk7CisgICAgICAgIEpTVmFsdWUgbGVmdCA9IGZvck5v
ZGUobm9kZS0+Y2hpbGQxKCkpLnZhbHVlKCk7CisgICAgICAgIEpTVmFsdWUgcmlnaHQgPSBmb3JO
b2RlKG5vZGUtPmNoaWxkMigpKS52YWx1ZSgpOwogICAgICAgICBpZiAobGVmdCAmJiByaWdodCAm
JiBsZWZ0LmlzSW50MzIoKSAmJiByaWdodC5pc0ludDMyKCkpIHsKICAgICAgICAgICAgIGludDMy
X3QgYSA9IGxlZnQuYXNJbnQzMigpOwogICAgICAgICAgICAgaW50MzJfdCBiID0gcmlnaHQuYXNJ
bnQzMigpOwogICAgICAgICAgICAgYm9vbCBjb25zdGFudFdhc1NldDsKICAgICAgICAgICAgIHN3
aXRjaCAobm9kZS5vcCgpKSB7CiAgICAgICAgICAgICBjYXNlIEJpdEFuZDoKLSAgICAgICAgICAg
ICAgICBjb25zdGFudFdhc1NldCA9IHRyeVNldENvbnN0YW50KG5vZGVJbmRleCwgSlNWYWx1ZShh
ICYgYikpOworICAgICAgICAgICAgICAgIGNvbnN0YW50V2FzU2V0ID0gdHJ5U2V0Q29uc3RhbnQo
bm9kZSwgSlNWYWx1ZShhICYgYikpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgY2FzZSBCaXRPcjoKLSAgICAgICAgICAgICAgICBjb25zdGFudFdhc1NldCA9IHRyeVNldENv
bnN0YW50KG5vZGVJbmRleCwgSlNWYWx1ZShhIHwgYikpOworICAgICAgICAgICAgICAgIGNvbnN0
YW50V2FzU2V0ID0gdHJ5U2V0Q29uc3RhbnQobm9kZSwgSlNWYWx1ZShhIHwgYikpOwogICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBCaXRYb3I6Ci0gICAgICAgICAgICAg
ICAgY29uc3RhbnRXYXNTZXQgPSB0cnlTZXRDb25zdGFudChub2RlSW5kZXgsIEpTVmFsdWUoYSBe
IGIpKTsKKyAgICAgICAgICAgICAgICBjb25zdGFudFdhc1NldCA9IHRyeVNldENvbnN0YW50KG5v
ZGUsIEpTVmFsdWUoYSBeIGIpKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
IGNhc2UgQml0UlNoaWZ0OgotICAgICAgICAgICAgICAgIGNvbnN0YW50V2FzU2V0ID0gdHJ5U2V0
Q29uc3RhbnQobm9kZUluZGV4LCBKU1ZhbHVlKGEgPj4gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGIp
KSk7CisgICAgICAgICAgICAgICAgY29uc3RhbnRXYXNTZXQgPSB0cnlTZXRDb25zdGFudChub2Rl
LCBKU1ZhbHVlKGEgPj4gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGIpKSk7CiAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIEJpdExTaGlmdDoKLSAgICAgICAgICAgICAgICBj
b25zdGFudFdhc1NldCA9IHRyeVNldENvbnN0YW50KG5vZGVJbmRleCwgSlNWYWx1ZShhIDw8IHN0
YXRpY19jYXN0PHVpbnQzMl90PihiKSkpOworICAgICAgICAgICAgICAgIGNvbnN0YW50V2FzU2V0
ID0gdHJ5U2V0Q29uc3RhbnQobm9kZSwgSlNWYWx1ZShhIDw8IHN0YXRpY19jYXN0PHVpbnQzMl90
PihiKSkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBCaXRVUlNo
aWZ0OgotICAgICAgICAgICAgICAgIGNvbnN0YW50V2FzU2V0ID0gdHJ5U2V0Q29uc3RhbnQobm9k
ZUluZGV4LCBKU1ZhbHVlKHN0YXRpY19jYXN0PHVpbnQzMl90PihhKSA+PiBzdGF0aWNfY2FzdDx1
aW50MzJfdD4oYikpKTsKKyAgICAgICAgICAgICAgICBjb25zdGFudFdhc1NldCA9IHRyeVNldENv
bnN0YW50KG5vZGUsIEpTVmFsdWUoc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGEpID4+IHN0YXRpY19j
YXN0PHVpbnQzMl90PihiKSkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
ZGVmYXVsdDoKICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwpA
QCAtMzYzLDE5OSArMzYyLDE5OSBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWdu
ZWQgaW5kCiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoY29uc3RhbnRXYXNTZXQpIHsK
ICAgICAgICAgICAgICAgICBtX2ZvdW5kQ29uc3RhbnRzID0gdHJ1ZTsKLSAgICAgICAgICAgICAg
ICBub2RlLnNldENhbkV4aXQoZmFsc2UpOworICAgICAgICAgICAgICAgIG5vZGUtPnNldENhbkV4
aXQoZmFsc2UpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAg
ICB9CiAgICAgICAgIHNwZWN1bGF0ZUludDMyQmluYXJ5KG5vZGUpOwotICAgICAgICBmb3JOb2Rl
KG5vZGVJbmRleCkuc2V0KFNwZWNJbnQzMik7CisgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNw
ZWNJbnQzMik7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBVSW50
MzJUb051bWJlcjogewotICAgICAgICBKU1ZhbHVlIGNoaWxkID0gZm9yTm9kZShub2RlLmNoaWxk
MSgpKS52YWx1ZSgpOworICAgICAgICBKU1ZhbHVlIGNoaWxkID0gZm9yTm9kZShub2RlLT5jaGls
ZDEoKSkudmFsdWUoKTsKICAgICAgICAgaWYgKGNoaWxkICYmIGNoaWxkLmlzTnVtYmVyKCkpIHsK
ICAgICAgICAgICAgIEFTU0VSVChjaGlsZC5pc0ludDMyKCkpOwotICAgICAgICAgICAgaWYgKHRy
eVNldENvbnN0YW50KG5vZGVJbmRleCwgSlNWYWx1ZShjaGlsZC5hc1VJbnQzMigpKSkpIHsKKyAg
ICAgICAgICAgIGlmICh0cnlTZXRDb25zdGFudChub2RlLCBKU1ZhbHVlKGNoaWxkLmFzVUludDMy
KCkpKSkgewogICAgICAgICAgICAgICAgIG1fZm91bmRDb25zdGFudHMgPSB0cnVlOwotICAgICAg
ICAgICAgICAgIG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7CisgICAgICAgICAgICAgICAgbm9kZS0+
c2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9
CiAgICAgICAgIH0KLSAgICAgICAgaWYgKCFub2RlLmNhblNwZWN1bGF0ZUludGVnZXIoKSkgewot
ICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChTcGVjRG91YmxlKTsKLSAgICAgICAg
ICAgIG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7CisgICAgICAgIGlmICghbm9kZS0+Y2FuU3BlY3Vs
YXRlSW50ZWdlcigpKSB7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjRG91Ymxl
KTsKKyAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChTcGVjSW50MzIpOwotICAgICAg
ICAgICAgbm9kZS5zZXRDYW5FeGl0KHRydWUpOworICAgICAgICAgICAgZm9yTm9kZShub2RlKS5z
ZXQoU3BlY0ludDMyKTsKKyAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7CiAgICAg
ICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAgICAgICAKICAgICAgICAgICAg
IAogICAgIGNhc2UgRG91YmxlQXNJbnQzMjogewotICAgICAgICBKU1ZhbHVlIGNoaWxkID0gZm9y
Tm9kZShub2RlLmNoaWxkMSgpKS52YWx1ZSgpOworICAgICAgICBKU1ZhbHVlIGNoaWxkID0gZm9y
Tm9kZShub2RlLT5jaGlsZDEoKSkudmFsdWUoKTsKICAgICAgICAgaWYgKGNoaWxkICYmIGNoaWxk
LmlzTnVtYmVyKCkpIHsKICAgICAgICAgICAgIGRvdWJsZSBhc0RvdWJsZSA9IGNoaWxkLmFzTnVt
YmVyKCk7CiAgICAgICAgICAgICBpbnQzMl90IGFzSW50ID0gSlNDOjp0b0ludDMyKGFzRG91Ymxl
KTsKICAgICAgICAgICAgIGlmIChiaXR3aXNlX2Nhc3Q8aW50NjRfdD4oc3RhdGljX2Nhc3Q8ZG91
YmxlPihhc0ludCkpID09IGJpdHdpc2VfY2FzdDxpbnQ2NF90Pihhc0RvdWJsZSkKLSAgICAgICAg
ICAgICAgICAmJiB0cnlTZXRDb25zdGFudChub2RlSW5kZXgsIEpTVmFsdWUoYXNJbnQpKSkgewor
ICAgICAgICAgICAgICAgICYmIHRyeVNldENvbnN0YW50KG5vZGUsIEpTVmFsdWUoYXNJbnQpKSkg
ewogICAgICAgICAgICAgICAgIG1fZm91bmRDb25zdGFudHMgPSB0cnVlOwogICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIG5vZGUuc2V0Q2Fu
RXhpdCh0cnVlKTsKLSAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY051
bWJlcik7Ci0gICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoU3BlY0ludDMyKTsKKyAgICAg
ICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKKyAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDEo
KSkuZmlsdGVyKFNwZWNOdW1iZXIpOworICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjSW50
MzIpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgICAgICAKICAgICBjYXNlIFZhbHVl
VG9JbnQzMjogewotICAgICAgICBKU1ZhbHVlIGNoaWxkID0gZm9yTm9kZShub2RlLmNoaWxkMSgp
KS52YWx1ZSgpOworICAgICAgICBKU1ZhbHVlIGNoaWxkID0gZm9yTm9kZShub2RlLT5jaGlsZDEo
KSkudmFsdWUoKTsKICAgICAgICAgaWYgKGNoaWxkICYmIGNoaWxkLmlzTnVtYmVyKCkpIHsKICAg
ICAgICAgICAgIGJvb2wgY29uc3RhbnRXYXNTZXQ7CiAgICAgICAgICAgICBpZiAoY2hpbGQuaXNJ
bnQzMigpKQotICAgICAgICAgICAgICAgIGNvbnN0YW50V2FzU2V0ID0gdHJ5U2V0Q29uc3RhbnQo
bm9kZUluZGV4LCBjaGlsZCk7CisgICAgICAgICAgICAgICAgY29uc3RhbnRXYXNTZXQgPSB0cnlT
ZXRDb25zdGFudChub2RlLCBjaGlsZCk7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAg
ICAgY29uc3RhbnRXYXNTZXQgPSB0cnlTZXRDb25zdGFudChub2RlSW5kZXgsIEpTVmFsdWUoSlND
Ojp0b0ludDMyKGNoaWxkLmFzRG91YmxlKCkpKSk7CisgICAgICAgICAgICAgICAgY29uc3RhbnRX
YXNTZXQgPSB0cnlTZXRDb25zdGFudChub2RlLCBKU1ZhbHVlKEpTQzo6dG9JbnQzMihjaGlsZC5h
c0RvdWJsZSgpKSkpOwogICAgICAgICAgICAgaWYgKGNvbnN0YW50V2FzU2V0KSB7CiAgICAgICAg
ICAgICAgICAgbV9mb3VuZENvbnN0YW50cyA9IHRydWU7Ci0gICAgICAgICAgICAgICAgbm9kZS5z
ZXRDYW5FeGl0KGZhbHNlKTsKKyAgICAgICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNl
KTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAg
ICAgICBpZiAobV9ncmFwaFtub2RlLmNoaWxkMSgpXS5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkp
CisgICAgICAgIGlmIChtX2dyYXBoW25vZGUtPmNoaWxkMSgpXS5zaG91bGRTcGVjdWxhdGVJbnRl
Z2VyKCkpCiAgICAgICAgICAgICBzcGVjdWxhdGVJbnQzMlVuYXJ5KG5vZGUpOwotICAgICAgICBl
bHNlIGlmIChtX2dyYXBoW25vZGUuY2hpbGQxKCldLnNob3VsZFNwZWN1bGF0ZU51bWJlcigpKQor
ICAgICAgICBlbHNlIGlmIChtX2dyYXBoW25vZGUtPmNoaWxkMSgpXS5zaG91bGRTcGVjdWxhdGVO
dW1iZXIoKSkKICAgICAgICAgICAgIHNwZWN1bGF0ZU51bWJlclVuYXJ5KG5vZGUpOwotICAgICAg
ICBlbHNlIGlmIChtX2dyYXBoW25vZGUuY2hpbGQxKCldLnNob3VsZFNwZWN1bGF0ZUJvb2xlYW4o
KSkKKyAgICAgICAgZWxzZSBpZiAobV9ncmFwaFtub2RlLT5jaGlsZDEoKV0uc2hvdWxkU3BlY3Vs
YXRlQm9vbGVhbigpKQogICAgICAgICAgICAgc3BlY3VsYXRlQm9vbGVhblVuYXJ5KG5vZGUpOwog
ICAgICAgICBlbHNlCi0gICAgICAgICAgICBub2RlLnNldENhbkV4aXQoZmFsc2UpOworICAgICAg
ICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgIAotICAgICAgICBmb3JOb2Rl
KG5vZGVJbmRleCkuc2V0KFNwZWNJbnQzMik7CisgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNw
ZWNJbnQzMik7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBJbnQz
MlRvRG91YmxlOiB7Ci0gICAgICAgIEpTVmFsdWUgY2hpbGQgPSBmb3JOb2RlKG5vZGUuY2hpbGQx
KCkpLnZhbHVlKCk7CisgICAgICAgIEpTVmFsdWUgY2hpbGQgPSBmb3JOb2RlKG5vZGUtPmNoaWxk
MSgpKS52YWx1ZSgpOwogICAgICAgICBpZiAoY2hpbGQgJiYgY2hpbGQuaXNOdW1iZXIoKQotICAg
ICAgICAgICAgJiYgdHJ5U2V0Q29uc3RhbnQobm9kZUluZGV4LCBKU1ZhbHVlKEpTVmFsdWU6OkVu
Y29kZUFzRG91YmxlLCBjaGlsZC5hc051bWJlcigpKSkpIHsKKyAgICAgICAgICAgICYmIHRyeVNl
dENvbnN0YW50KG5vZGUsIEpTVmFsdWUoSlNWYWx1ZTo6RW5jb2RlQXNEb3VibGUsIGNoaWxkLmFz
TnVtYmVyKCkpKSkgewogICAgICAgICAgICAgbV9mb3VuZENvbnN0YW50cyA9IHRydWU7Ci0gICAg
ICAgICAgICBub2RlLnNldENhbkV4aXQoZmFsc2UpOworICAgICAgICAgICAgbm9kZS0+c2V0Q2Fu
RXhpdChmYWxzZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBzcGVj
dWxhdGVOdW1iZXJVbmFyeShub2RlKTsKLSAgICAgICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbihm
b3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpCi0gICAgICAgICAgICBmb3JOb2RlKG5vZGVJ
bmRleCkuc2V0KFNwZWNEb3VibGVSZWFsKTsKKyAgICAgICAgaWYgKGlzSW50MzJTcGVjdWxhdGlv
bihmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX3R5cGUpKQorICAgICAgICAgICAgZm9yTm9kZShu
b2RlKS5zZXQoU3BlY0RvdWJsZVJlYWwpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBmb3JO
b2RlKG5vZGVJbmRleCkuc2V0KFNwZWNEb3VibGUpOworICAgICAgICAgICAgZm9yTm9kZShub2Rl
KS5zZXQoU3BlY0RvdWJsZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCiAgICAg
Y2FzZSBDaGVja051bWJlcjoKLSAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIo
U3BlY051bWJlcik7CisgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRlcihTcGVj
TnVtYmVyKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICBjYXNlIFZhbHVlQWRk
OgogICAgIGNhc2UgQXJpdGhBZGQ6IHsKLSAgICAgICAgSlNWYWx1ZSBsZWZ0ID0gZm9yTm9kZShu
b2RlLmNoaWxkMSgpKS52YWx1ZSgpOwotICAgICAgICBKU1ZhbHVlIHJpZ2h0ID0gZm9yTm9kZShu
b2RlLmNoaWxkMigpKS52YWx1ZSgpOworICAgICAgICBKU1ZhbHVlIGxlZnQgPSBmb3JOb2RlKG5v
ZGUtPmNoaWxkMSgpKS52YWx1ZSgpOworICAgICAgICBKU1ZhbHVlIHJpZ2h0ID0gZm9yTm9kZShu
b2RlLT5jaGlsZDIoKSkudmFsdWUoKTsKICAgICAgICAgaWYgKGxlZnQgJiYgcmlnaHQgJiYgbGVm
dC5pc051bWJlcigpICYmIHJpZ2h0LmlzTnVtYmVyKCkKLSAgICAgICAgICAgICYmIHRyeVNldENv
bnN0YW50KG5vZGVJbmRleCwgSlNWYWx1ZShsZWZ0LmFzTnVtYmVyKCkgKyByaWdodC5hc051bWJl
cigpKSkpIHsKKyAgICAgICAgICAgICYmIHRyeVNldENvbnN0YW50KG5vZGUsIEpTVmFsdWUobGVm
dC5hc051bWJlcigpICsgcmlnaHQuYXNOdW1iZXIoKSkpKSB7CiAgICAgICAgICAgICBtX2ZvdW5k
Q29uc3RhbnRzID0gdHJ1ZTsKICAgICAgICAgICAgIG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBpZiAobV9ncmFwaC5hZGRTaG91
bGRTcGVjdWxhdGVJbnRlZ2VyKG5vZGUpKSB7CiAgICAgICAgICAgICBzcGVjdWxhdGVJbnQzMkJp
bmFyeSgKLSAgICAgICAgICAgICAgICBub2RlLCAhbm9kZUNhblRydW5jYXRlSW50ZWdlcihub2Rl
LmFyaXRoTm9kZUZsYWdzKCkpKTsKLSAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQo
U3BlY0ludDMyKTsKKyAgICAgICAgICAgICAgICBub2RlLCAhbm9kZUNhblRydW5jYXRlSW50ZWdl
cihub2RlLT5hcml0aE5vZGVGbGFncygpKSk7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNl
dChTcGVjSW50MzIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgaWYg
KE5vZGU6OnNob3VsZFNwZWN1bGF0ZU51bWJlckV4cGVjdGluZ0RlZmluZWQobV9ncmFwaFtub2Rl
LmNoaWxkMSgpXSwgbV9ncmFwaFtub2RlLmNoaWxkMigpXSkpIHsKKyAgICAgICAgaWYgKE5vZGU6
OnNob3VsZFNwZWN1bGF0ZU51bWJlckV4cGVjdGluZ0RlZmluZWQobm9kZS0+Y2hpbGQxKCkubm9k
ZSgpLCBub2RlLT5jaGlsZDIoKS5ub2RlKCkpKSB7CiAgICAgICAgICAgICBzcGVjdWxhdGVOdW1i
ZXJCaW5hcnkobm9kZSk7Ci0gICAgICAgICAgICBpZiAoaXNSZWFsTnVtYmVyU3BlY3VsYXRpb24o
Zm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpCi0gICAgICAgICAgICAgICAgJiYgaXNSZWFs
TnVtYmVyU3BlY3VsYXRpb24oZm9yTm9kZShub2RlLmNoaWxkMigpKS5tX3R5cGUpKQotICAgICAg
ICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoU3BlY0RvdWJsZVJlYWwpOworICAgICAg
ICAgICAgaWYgKGlzUmVhbE51bWJlclNwZWN1bGF0aW9uKGZvck5vZGUobm9kZS0+Y2hpbGQxKCkp
Lm1fdHlwZSkKKyAgICAgICAgICAgICAgICAmJiBpc1JlYWxOdW1iZXJTcGVjdWxhdGlvbihmb3JO
b2RlKG5vZGUtPmNoaWxkMigpKS5tX3R5cGUpKQorICAgICAgICAgICAgICAgIGZvck5vZGUobm9k
ZSkuc2V0KFNwZWNEb3VibGVSZWFsKTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAg
ICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFNwZWNEb3VibGUpOworICAgICAgICAgICAgICAgIGZv
ck5vZGUobm9kZSkuc2V0KFNwZWNEb3VibGUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IH0KLSAgICAgICAgaWYgKG5vZGUub3AoKSA9PSBWYWx1ZUFkZCkgewotICAgICAgICAgICAgY2xv
YmJlcldvcmxkKG5vZGUuY29kZU9yaWdpbiwgaW5kZXhJbkJsb2NrKTsKLSAgICAgICAgICAgIGZv
ck5vZGUobm9kZUluZGV4KS5zZXQoU3BlY1N0cmluZyB8IFNwZWNJbnQzMiB8IFNwZWNOdW1iZXIp
OwotICAgICAgICAgICAgbm9kZS5zZXRDYW5FeGl0KGZhbHNlKTsKKyAgICAgICAgaWYgKG5vZGUt
Pm9wKCkgPT0gVmFsdWVBZGQpIHsKKyAgICAgICAgICAgIGNsb2JiZXJXb3JsZChub2RlLT5jb2Rl
T3JpZ2luLCBpbmRleEluQmxvY2spOworICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3Bl
Y1N0cmluZyB8IFNwZWNJbnQzMiB8IFNwZWNOdW1iZXIpOworICAgICAgICAgICAgbm9kZS0+c2V0
Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAv
LyBXZSBkb24ndCBoYW5kbGUgdGhpcyB5ZXQuIDotKAogICAgICAgICBtX2lzVmFsaWQgPSBmYWxz
ZTsKLSAgICAgICAgbm9kZS5zZXRDYW5FeGl0KHRydWUpOworICAgICAgICBub2RlLT5zZXRDYW5F
eGl0KHRydWUpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgICAgICAKICAgICBjYXNl
IEFyaXRoU3ViOiB7Ci0gICAgICAgIEpTVmFsdWUgbGVmdCA9IGZvck5vZGUobm9kZS5jaGlsZDEo
KSkudmFsdWUoKTsKLSAgICAgICAgSlNWYWx1ZSByaWdodCA9IGZvck5vZGUobm9kZS5jaGlsZDIo
KSkudmFsdWUoKTsKKyAgICAgICAgSlNWYWx1ZSBsZWZ0ID0gZm9yTm9kZShub2RlLT5jaGlsZDEo
KSkudmFsdWUoKTsKKyAgICAgICAgSlNWYWx1ZSByaWdodCA9IGZvck5vZGUobm9kZS0+Y2hpbGQy
KCkpLnZhbHVlKCk7CiAgICAgICAgIGlmIChsZWZ0ICYmIHJpZ2h0ICYmIGxlZnQuaXNOdW1iZXIo
KSAmJiByaWdodC5pc051bWJlcigpCi0gICAgICAgICAgICAmJiB0cnlTZXRDb25zdGFudChub2Rl
SW5kZXgsIEpTVmFsdWUobGVmdC5hc051bWJlcigpIC0gcmlnaHQuYXNOdW1iZXIoKSkpKSB7Cisg
ICAgICAgICAgICAmJiB0cnlTZXRDb25zdGFudChub2RlLCBKU1ZhbHVlKGxlZnQuYXNOdW1iZXIo
KSAtIHJpZ2h0LmFzTnVtYmVyKCkpKSkgewogICAgICAgICAgICAgbV9mb3VuZENvbnN0YW50cyA9
IHRydWU7Ci0gICAgICAgICAgICBub2RlLnNldENhbkV4aXQoZmFsc2UpOworICAgICAgICAgICAg
bm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQog
ICAgICAgICBpZiAobV9ncmFwaC5hZGRTaG91bGRTcGVjdWxhdGVJbnRlZ2VyKG5vZGUpKSB7CiAg
ICAgICAgICAgICBzcGVjdWxhdGVJbnQzMkJpbmFyeSgKLSAgICAgICAgICAgICAgICBub2RlLCAh
bm9kZUNhblRydW5jYXRlSW50ZWdlcihub2RlLmFyaXRoTm9kZUZsYWdzKCkpKTsKLSAgICAgICAg
ICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoU3BlY0ludDMyKTsKKyAgICAgICAgICAgICAgICBu
b2RlLCAhbm9kZUNhblRydW5jYXRlSW50ZWdlcihub2RlLT5hcml0aE5vZGVGbGFncygpKSk7Cisg
ICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjSW50MzIpOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIH0KICAgICAgICAgc3BlY3VsYXRlTnVtYmVyQmluYXJ5KG5vZGUpOwotICAg
ICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFNwZWNEb3VibGUpOworICAgICAgICBmb3JOb2Rl
KG5vZGUpLnNldChTcGVjRG91YmxlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAK
ICAgICBjYXNlIEFyaXRoTmVnYXRlOiB7Ci0gICAgICAgIEpTVmFsdWUgY2hpbGQgPSBmb3JOb2Rl
KG5vZGUuY2hpbGQxKCkpLnZhbHVlKCk7CisgICAgICAgIEpTVmFsdWUgY2hpbGQgPSBmb3JOb2Rl
KG5vZGUtPmNoaWxkMSgpKS52YWx1ZSgpOwogICAgICAgICBpZiAoY2hpbGQgJiYgY2hpbGQuaXNO
dW1iZXIoKQotICAgICAgICAgICAgJiYgdHJ5U2V0Q29uc3RhbnQobm9kZUluZGV4LCBKU1ZhbHVl
KC1jaGlsZC5hc051bWJlcigpKSkpIHsKKyAgICAgICAgICAgICYmIHRyeVNldENvbnN0YW50KG5v
ZGUsIEpTVmFsdWUoLWNoaWxkLmFzTnVtYmVyKCkpKSkgewogICAgICAgICAgICAgbV9mb3VuZENv
bnN0YW50cyA9IHRydWU7Ci0gICAgICAgICAgICBub2RlLnNldENhbkV4aXQoZmFsc2UpOworICAg
ICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgfQogICAgICAgICBpZiAobV9ncmFwaC5uZWdhdGVTaG91bGRTcGVjdWxhdGVJbnRlZ2Vy
KG5vZGUpKSB7CiAgICAgICAgICAgICBzcGVjdWxhdGVJbnQzMlVuYXJ5KAotICAgICAgICAgICAg
ICAgIG5vZGUsICFub2RlQ2FuVHJ1bmNhdGVJbnRlZ2VyKG5vZGUuYXJpdGhOb2RlRmxhZ3MoKSkp
OwotICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChTcGVjSW50MzIpOworICAgICAg
ICAgICAgICAgIG5vZGUsICFub2RlQ2FuVHJ1bmNhdGVJbnRlZ2VyKG5vZGUtPmFyaXRoTm9kZUZs
YWdzKCkpKTsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNJbnQzMik7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBzcGVjdWxhdGVOdW1iZXJVbmFyeShu
b2RlKTsKLSAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChTcGVjRG91YmxlKTsKKyAgICAg
ICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0RvdWJsZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0K
ICAgICAgICAgCiAgICAgY2FzZSBBcml0aE11bDogewotICAgICAgICBKU1ZhbHVlIGxlZnQgPSBm
b3JOb2RlKG5vZGUuY2hpbGQxKCkpLnZhbHVlKCk7Ci0gICAgICAgIEpTVmFsdWUgcmlnaHQgPSBm
b3JOb2RlKG5vZGUuY2hpbGQyKCkpLnZhbHVlKCk7CisgICAgICAgIEpTVmFsdWUgbGVmdCA9IGZv
ck5vZGUobm9kZS0+Y2hpbGQxKCkpLnZhbHVlKCk7CisgICAgICAgIEpTVmFsdWUgcmlnaHQgPSBm
b3JOb2RlKG5vZGUtPmNoaWxkMigpKS52YWx1ZSgpOwogICAgICAgICBpZiAobGVmdCAmJiByaWdo
dCAmJiBsZWZ0LmlzTnVtYmVyKCkgJiYgcmlnaHQuaXNOdW1iZXIoKQotICAgICAgICAgICAgJiYg
dHJ5U2V0Q29uc3RhbnQobm9kZUluZGV4LCBKU1ZhbHVlKGxlZnQuYXNOdW1iZXIoKSAqIHJpZ2h0
LmFzTnVtYmVyKCkpKSkgeworICAgICAgICAgICAgJiYgdHJ5U2V0Q29uc3RhbnQobm9kZSwgSlNW
YWx1ZShsZWZ0LmFzTnVtYmVyKCkgKiByaWdodC5hc051bWJlcigpKSkpIHsKICAgICAgICAgICAg
IG1fZm91bmRDb25zdGFudHMgPSB0cnVlOwotICAgICAgICAgICAgbm9kZS5zZXRDYW5FeGl0KGZh
bHNlKTsKKyAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgaWYgKG1fZ3JhcGgubXVsU2hvdWxkU3BlY3VsYXRl
SW50ZWdlcihub2RlKSkgewogICAgICAgICAgICAgc3BlY3VsYXRlSW50MzJCaW5hcnkoCiAgICAg
ICAgICAgICAgICAgbm9kZSwKLSAgICAgICAgICAgICAgICAhbm9kZUNhblRydW5jYXRlSW50ZWdl
cihub2RlLmFyaXRoTm9kZUZsYWdzKCkpCi0gICAgICAgICAgICAgICAgfHwgIW5vZGVDYW5JZ25v
cmVOZWdhdGl2ZVplcm8obm9kZS5hcml0aE5vZGVGbGFncygpKSk7Ci0gICAgICAgICAgICBmb3JO
b2RlKG5vZGVJbmRleCkuc2V0KFNwZWNJbnQzMik7CisgICAgICAgICAgICAgICAgIW5vZGVDYW5U
cnVuY2F0ZUludGVnZXIobm9kZS0+YXJpdGhOb2RlRmxhZ3MoKSkKKyAgICAgICAgICAgICAgICB8
fCAhbm9kZUNhbklnbm9yZU5lZ2F0aXZlWmVybyhub2RlLT5hcml0aE5vZGVGbGFncygpKSk7Cisg
ICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjSW50MzIpOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIH0KICAgICAgICAgc3BlY3VsYXRlTnVtYmVyQmluYXJ5KG5vZGUpOwotICAg
ICAgICBpZiAoaXNSZWFsTnVtYmVyU3BlY3VsYXRpb24oZm9yTm9kZShub2RlLmNoaWxkMSgpKS5t
X3R5cGUpCi0gICAgICAgICAgICB8fCBpc1JlYWxOdW1iZXJTcGVjdWxhdGlvbihmb3JOb2RlKG5v
ZGUuY2hpbGQyKCkpLm1fdHlwZSkpCi0gICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0
KFNwZWNEb3VibGVSZWFsKTsKKyAgICAgICAgaWYgKGlzUmVhbE51bWJlclNwZWN1bGF0aW9uKGZv
ck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fdHlwZSkKKyAgICAgICAgICAgIHx8IGlzUmVhbE51bWJl
clNwZWN1bGF0aW9uKGZvck5vZGUobm9kZS0+Y2hpbGQyKCkpLm1fdHlwZSkpCisgICAgICAgICAg
ICBmb3JOb2RlKG5vZGUpLnNldChTcGVjRG91YmxlUmVhbCk7CiAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoU3BlY0RvdWJsZSk7CisgICAgICAgICAgICBm
b3JOb2RlKG5vZGUpLnNldChTcGVjRG91YmxlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAg
ICAgICAKQEAgLTU2MywyNCArNTYyLDI0IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1
bnNpZ25lZCBpbmQKICAgICBjYXNlIEFyaXRoTWluOgogICAgIGNhc2UgQXJpdGhNYXg6CiAgICAg
Y2FzZSBBcml0aE1vZDogewotICAgICAgICBKU1ZhbHVlIGxlZnQgPSBmb3JOb2RlKG5vZGUuY2hp
bGQxKCkpLnZhbHVlKCk7Ci0gICAgICAgIEpTVmFsdWUgcmlnaHQgPSBmb3JOb2RlKG5vZGUuY2hp
bGQyKCkpLnZhbHVlKCk7CisgICAgICAgIEpTVmFsdWUgbGVmdCA9IGZvck5vZGUobm9kZS0+Y2hp
bGQxKCkpLnZhbHVlKCk7CisgICAgICAgIEpTVmFsdWUgcmlnaHQgPSBmb3JOb2RlKG5vZGUtPmNo
aWxkMigpKS52YWx1ZSgpOwogICAgICAgICBpZiAobGVmdCAmJiByaWdodCAmJiBsZWZ0LmlzTnVt
YmVyKCkgJiYgcmlnaHQuaXNOdW1iZXIoKSkgewogICAgICAgICAgICAgZG91YmxlIGEgPSBsZWZ0
LmFzTnVtYmVyKCk7CiAgICAgICAgICAgICBkb3VibGUgYiA9IHJpZ2h0LmFzTnVtYmVyKCk7CiAg
ICAgICAgICAgICBib29sIGNvbnN0YW50V2FzU2V0OwogICAgICAgICAgICAgc3dpdGNoIChub2Rl
Lm9wKCkpIHsKICAgICAgICAgICAgIGNhc2UgQXJpdGhEaXY6Ci0gICAgICAgICAgICAgICAgY29u
c3RhbnRXYXNTZXQgPSB0cnlTZXRDb25zdGFudChub2RlSW5kZXgsIEpTVmFsdWUoYSAvIGIpKTsK
KyAgICAgICAgICAgICAgICBjb25zdGFudFdhc1NldCA9IHRyeVNldENvbnN0YW50KG5vZGUsIEpT
VmFsdWUoYSAvIGIpKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2Ug
QXJpdGhNaW46Ci0gICAgICAgICAgICAgICAgY29uc3RhbnRXYXNTZXQgPSB0cnlTZXRDb25zdGFu
dChub2RlSW5kZXgsIEpTVmFsdWUoYSA8IGIgPyBhIDogKGIgPD0gYSA/IGIgOiBhICsgYikpKTsK
KyAgICAgICAgICAgICAgICBjb25zdGFudFdhc1NldCA9IHRyeVNldENvbnN0YW50KG5vZGUsIEpT
VmFsdWUoYSA8IGIgPyBhIDogKGIgPD0gYSA/IGIgOiBhICsgYikpKTsKICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgIGNhc2UgQXJpdGhNYXg6Ci0gICAgICAgICAgICAgICAgY29u
c3RhbnRXYXNTZXQgPSB0cnlTZXRDb25zdGFudChub2RlSW5kZXgsIEpTVmFsdWUoYSA+IGIgPyBh
IDogKGIgPj0gYSA/IGIgOiBhICsgYikpKTsKKyAgICAgICAgICAgICAgICBjb25zdGFudFdhc1Nl
dCA9IHRyeVNldENvbnN0YW50KG5vZGUsIEpTVmFsdWUoYSA+IGIgPyBhIDogKGIgPj0gYSA/IGIg
OiBhICsgYikpKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgQXJp
dGhNb2Q6Ci0gICAgICAgICAgICAgICAgY29uc3RhbnRXYXNTZXQgPSB0cnlTZXRDb25zdGFudChu
b2RlSW5kZXgsIEpTVmFsdWUoZm1vZChhLCBiKSkpOworICAgICAgICAgICAgICAgIGNvbnN0YW50
V2FzU2V0ID0gdHJ5U2V0Q29uc3RhbnQobm9kZSwgSlNWYWx1ZShmbW9kKGEsIGIpKSk7CiAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC01ODksODQgKzU4OCw4NCBAQCBib29s
IEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICBpZiAoY29uc3RhbnRXYXNTZXQpIHsKICAgICAgICAgICAgICAgICBtX2ZvdW5kQ29u
c3RhbnRzID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBub2RlLnNldENhbkV4aXQoZmFsc2UpOwor
ICAgICAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIGlmIChOb2RlOjpzaG91
bGRTcGVjdWxhdGVJbnRlZ2VyRm9yQXJpdGhtZXRpYygKLSAgICAgICAgICAgICAgICBtX2dyYXBo
W25vZGUuY2hpbGQxKCldLCBtX2dyYXBoW25vZGUuY2hpbGQyKCldKQotICAgICAgICAgICAgJiYg
bm9kZS5jYW5TcGVjdWxhdGVJbnRlZ2VyKCkpIHsKKyAgICAgICAgICAgICAgICBub2RlLT5jaGls
ZDEoKS5ub2RlKCksIG5vZGUtPmNoaWxkMigpLm5vZGUoKSkKKyAgICAgICAgICAgICYmIG5vZGUt
PmNhblNwZWN1bGF0ZUludGVnZXIoKSkgewogICAgICAgICAgICAgc3BlY3VsYXRlSW50MzJCaW5h
cnkobm9kZSwgdHJ1ZSk7IC8vIGZvcmNpbmcgY2FuLWV4aXQsIHdoaWNoIGlzIGEgYml0IG9uIHRo
ZSBjb25zZXJ2YXRpdmUgc2lkZS4KLSAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQo
U3BlY0ludDMyKTsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNJbnQzMik7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBzcGVjdWxhdGVOdW1iZXJCaW5h
cnkobm9kZSk7Ci0gICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoU3BlY0RvdWJsZSk7Cisg
ICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNEb3VibGUpOwogICAgICAgICBicmVhazsKICAg
ICB9CiAgICAgICAgICAgICAKICAgICBjYXNlIEFyaXRoQWJzOiB7Ci0gICAgICAgIEpTVmFsdWUg
Y2hpbGQgPSBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLnZhbHVlKCk7CisgICAgICAgIEpTVmFsdWUg
Y2hpbGQgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS52YWx1ZSgpOwogICAgICAgICBpZiAoY2hp
bGQgJiYgY2hpbGQuaXNOdW1iZXIoKQotICAgICAgICAgICAgJiYgdHJ5U2V0Q29uc3RhbnQobm9k
ZUluZGV4LCBKU1ZhbHVlKGZhYnMoY2hpbGQuYXNOdW1iZXIoKSkpKSkgeworICAgICAgICAgICAg
JiYgdHJ5U2V0Q29uc3RhbnQobm9kZSwgSlNWYWx1ZShmYWJzKGNoaWxkLmFzTnVtYmVyKCkpKSkp
IHsKICAgICAgICAgICAgIG1fZm91bmRDb25zdGFudHMgPSB0cnVlOwotICAgICAgICAgICAgbm9k
ZS5zZXRDYW5FeGl0KGZhbHNlKTsKKyAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2Up
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKG1fZ3JhcGhbbm9k
ZS5jaGlsZDEoKV0uc2hvdWxkU3BlY3VsYXRlSW50ZWdlckZvckFyaXRobWV0aWMoKQotICAgICAg
ICAgICAgJiYgbm9kZS5jYW5TcGVjdWxhdGVJbnRlZ2VyKCkpIHsKKyAgICAgICAgaWYgKG5vZGUt
PmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyRm9yQXJpdGhtZXRpYygpCisgICAgICAg
ICAgICAmJiBub2RlLT5jYW5TcGVjdWxhdGVJbnRlZ2VyKCkpIHsKICAgICAgICAgICAgIHNwZWN1
bGF0ZUludDMyVW5hcnkobm9kZSwgdHJ1ZSk7Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRl
eCkuc2V0KFNwZWNJbnQzMik7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjSW50
MzIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgc3BlY3VsYXRlTnVt
YmVyVW5hcnkobm9kZSk7Ci0gICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoU3BlY0RvdWJs
ZSk7CisgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNEb3VibGUpOwogICAgICAgICBicmVh
azsKICAgICB9CiAgICAgICAgICAgICAKICAgICBjYXNlIEFyaXRoU3FydDogewotICAgICAgICBK
U1ZhbHVlIGNoaWxkID0gZm9yTm9kZShub2RlLmNoaWxkMSgpKS52YWx1ZSgpOworICAgICAgICBK
U1ZhbHVlIGNoaWxkID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSkudmFsdWUoKTsKICAgICAgICAg
aWYgKGNoaWxkICYmIGNoaWxkLmlzTnVtYmVyKCkKLSAgICAgICAgICAgICYmIHRyeVNldENvbnN0
YW50KG5vZGVJbmRleCwgSlNWYWx1ZShzcXJ0KGNoaWxkLmFzTnVtYmVyKCkpKSkpIHsKKyAgICAg
ICAgICAgICYmIHRyeVNldENvbnN0YW50KG5vZGUsIEpTVmFsdWUoc3FydChjaGlsZC5hc051bWJl
cigpKSkpKSB7CiAgICAgICAgICAgICBtX2ZvdW5kQ29uc3RhbnRzID0gdHJ1ZTsKLSAgICAgICAg
ICAgIG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7CisgICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0
KGZhbHNlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIHNwZWN1bGF0
ZU51bWJlclVuYXJ5KG5vZGUpOwotICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFNwZWNE
b3VibGUpOworICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjRG91YmxlKTsKICAgICAgICAg
YnJlYWs7CiAgICAgfQogICAgICAgICAgICAgCiAgICAgY2FzZSBMb2dpY2FsTm90OiB7CiAgICAg
ICAgIGJvb2wgZGlkU2V0Q29uc3RhbnQgPSBmYWxzZTsKLSAgICAgICAgc3dpdGNoIChib29sZWFu
UmVzdWx0KG5vZGUsIGZvck5vZGUobm9kZS5jaGlsZDEoKSkpKSB7CisgICAgICAgIHN3aXRjaCAo
Ym9vbGVhblJlc3VsdChub2RlLCBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKSkpIHsKICAgICAgICAg
Y2FzZSBEZWZpbml0ZWx5VHJ1ZToKLSAgICAgICAgICAgIGRpZFNldENvbnN0YW50ID0gdHJ5U2V0
Q29uc3RhbnQobm9kZUluZGV4LCBqc0Jvb2xlYW4oZmFsc2UpKTsKKyAgICAgICAgICAgIGRpZFNl
dENvbnN0YW50ID0gdHJ5U2V0Q29uc3RhbnQobm9kZSwganNCb29sZWFuKGZhbHNlKSk7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBEZWZpbml0ZWx5RmFsc2U6Ci0gICAgICAgICAg
ICBkaWRTZXRDb25zdGFudCA9IHRyeVNldENvbnN0YW50KG5vZGVJbmRleCwganNCb29sZWFuKHRy
dWUpKTsKKyAgICAgICAgICAgIGRpZFNldENvbnN0YW50ID0gdHJ5U2V0Q29uc3RhbnQobm9kZSwg
anNCb29sZWFuKHRydWUpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBkZWZhdWx0Ogog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgaWYgKGRpZFNldENvbnN0YW50
KSB7CiAgICAgICAgICAgICBtX2ZvdW5kQ29uc3RhbnRzID0gdHJ1ZTsKLSAgICAgICAgICAgIG5v
ZGUuc2V0Q2FuRXhpdChmYWxzZSk7CisgICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNl
KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIE5vZGUmIGNoaWxkID0g
bV9ncmFwaFtub2RlLmNoaWxkMSgpXTsKLSAgICAgICAgaWYgKGlzQm9vbGVhblNwZWN1bGF0aW9u
KGNoaWxkLnByZWRpY3Rpb24oKSkpCisgICAgICAgIE5vZGUqIGNoaWxkID0gbm9kZS0+Y2hpbGQx
KCkubm9kZSgpOworICAgICAgICBpZiAoaXNCb29sZWFuU3BlY3VsYXRpb24oY2hpbGQtPnByZWRp
Y3Rpb24oKSkpCiAgICAgICAgICAgICBzcGVjdWxhdGVCb29sZWFuVW5hcnkobm9kZSk7Ci0gICAg
ICAgIGVsc2UgaWYgKGNoaWxkLnNob3VsZFNwZWN1bGF0ZU5vblN0cmluZ0NlbGxPck90aGVyKCkp
IHsKLSAgICAgICAgICAgIG5vZGUuc2V0Q2FuRXhpdCh0cnVlKTsKLSAgICAgICAgICAgIGZvck5v
ZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKChTcGVjQ2VsbCAmIH5TcGVjU3RyaW5nKSB8IFNwZWNP
dGhlcik7Ci0gICAgICAgIH0gZWxzZSBpZiAoY2hpbGQuc2hvdWxkU3BlY3VsYXRlSW50ZWdlcigp
KQorICAgICAgICBlbHNlIGlmIChjaGlsZC0+c2hvdWxkU3BlY3VsYXRlTm9uU3RyaW5nQ2VsbE9y
T3RoZXIoKSkgeworICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKKyAgICAgICAg
ICAgIGZvck5vZGUoY2hpbGQpLmZpbHRlcigoU3BlY0NlbGwgJiB+U3BlY1N0cmluZykgfCBTcGVj
T3RoZXIpOworICAgICAgICB9IGVsc2UgaWYgKGNoaWxkLT5zaG91bGRTcGVjdWxhdGVJbnRlZ2Vy
KCkpCiAgICAgICAgICAgICBzcGVjdWxhdGVJbnQzMlVuYXJ5KG5vZGUpOwotICAgICAgICBlbHNl
IGlmIChjaGlsZC5zaG91bGRTcGVjdWxhdGVOdW1iZXIoKSkKKyAgICAgICAgZWxzZSBpZiAoY2hp
bGQtPnNob3VsZFNwZWN1bGF0ZU51bWJlcigpKQogICAgICAgICAgICAgc3BlY3VsYXRlTnVtYmVy
VW5hcnkobm9kZSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIG5vZGUuc2V0Q2FuRXhpdChm
YWxzZSk7Ci0gICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoU3BlY0Jvb2xlYW4pOworICAg
ICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CisgICAgICAgIGZvck5vZGUobm9kZSku
c2V0KFNwZWNCb29sZWFuKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKQEAgLTY3
NiwzNiArNjc1LDM2IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQK
ICAgICBjYXNlIElzU3RyaW5nOgogICAgIGNhc2UgSXNPYmplY3Q6CiAgICAgY2FzZSBJc0Z1bmN0
aW9uOiB7Ci0gICAgICAgIG5vZGUuc2V0Q2FuRXhpdChub2RlLm9wKCkgPT0gSXNVbmRlZmluZWQg
JiYgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdEZvcihub2RlLmNvZGVPcmlnaW4pLT5tYXNxdWVy
YWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2ludCgpLT5pc1N0aWxsVmFsaWQoKSk7Ci0gICAgICAgIEpT
VmFsdWUgY2hpbGQgPSBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLnZhbHVlKCk7CisgICAgICAgIG5v
ZGUtPnNldENhbkV4aXQobm9kZS0+b3AoKSA9PSBJc1VuZGVmaW5lZCAmJiBtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0Rm9yKG5vZGUtPmNvZGVPcmlnaW4pLT5tYXNxdWVyYWRlc0FzVW5kZWZpbmVk
V2F0Y2hwb2ludCgpLT5pc1N0aWxsVmFsaWQoKSk7CisgICAgICAgIEpTVmFsdWUgY2hpbGQgPSBm
b3JOb2RlKG5vZGUtPmNoaWxkMSgpKS52YWx1ZSgpOwogICAgICAgICBpZiAoY2hpbGQpIHsKICAg
ICAgICAgICAgIGJvb2wgY29uc3RhbnRXYXNTZXQ7Ci0gICAgICAgICAgICBzd2l0Y2ggKG5vZGUu
b3AoKSkgeworICAgICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CiAgICAgICAgICAgICBj
YXNlIElzVW5kZWZpbmVkOgotICAgICAgICAgICAgICAgIGlmIChtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0Rm9yKG5vZGUuY29kZU9yaWdpbiktPm1hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBv
aW50KCktPmlzU3RpbGxWYWxpZCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnN0YW50V2Fz
U2V0ID0gdHJ5U2V0Q29uc3RhbnQobm9kZUluZGV4LCBqc0Jvb2xlYW4oCisgICAgICAgICAgICAg
ICAgaWYgKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3RGb3Iobm9kZS0+Y29kZU9yaWdpbiktPm1h
c3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50KCktPmlzU3RpbGxWYWxpZCgpKSB7CisgICAg
ICAgICAgICAgICAgICAgIGNvbnN0YW50V2FzU2V0ID0gdHJ5U2V0Q29uc3RhbnQobm9kZSwganNC
b29sZWFuKAogICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGQuaXNDZWxsKCkKICAgICAgICAg
ICAgICAgICAgICAgICAgID8gZmFsc2UgCiAgICAgICAgICAgICAgICAgICAgICAgICA6IGNoaWxk
LmlzVW5kZWZpbmVkKCkpKTsKICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
ICAgICAgICBjb25zdGFudFdhc1NldCA9IHRyeVNldENvbnN0YW50KG5vZGVJbmRleCwganNCb29s
ZWFuKAorICAgICAgICAgICAgICAgICAgICBjb25zdGFudFdhc1NldCA9IHRyeVNldENvbnN0YW50
KG5vZGUsIGpzQm9vbGVhbigKICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkLmlzQ2VsbCgp
Ci0gICAgICAgICAgICAgICAgICAgICAgICA/IGNoaWxkLmFzQ2VsbCgpLT5zdHJ1Y3R1cmUoKS0+
bWFzcXVlcmFkZXNBc1VuZGVmaW5lZChtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0Rm9yKG5vZGUu
Y29kZU9yaWdpbikpCisgICAgICAgICAgICAgICAgICAgICAgICA/IGNoaWxkLmFzQ2VsbCgpLT5z
dHJ1Y3R1cmUoKS0+bWFzcXVlcmFkZXNBc1VuZGVmaW5lZChtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0Rm9yKG5vZGUtPmNvZGVPcmlnaW4pKQogICAgICAgICAgICAgICAgICAgICAgICAgOiBjaGls
ZC5pc1VuZGVmaW5lZCgpKSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgY2FzZSBJc0Jvb2xlYW46Ci0gICAgICAgICAgICAgICAgY29uc3Rh
bnRXYXNTZXQgPSB0cnlTZXRDb25zdGFudChub2RlSW5kZXgsIGpzQm9vbGVhbihjaGlsZC5pc0Jv
b2xlYW4oKSkpOworICAgICAgICAgICAgICAgIGNvbnN0YW50V2FzU2V0ID0gdHJ5U2V0Q29uc3Rh
bnQobm9kZSwganNCb29sZWFuKGNoaWxkLmlzQm9vbGVhbigpKSk7CiAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICBjYXNlIElzTnVtYmVyOgotICAgICAgICAgICAgICAgIGNvbnN0
YW50V2FzU2V0ID0gdHJ5U2V0Q29uc3RhbnQobm9kZUluZGV4LCBqc0Jvb2xlYW4oY2hpbGQuaXNO
dW1iZXIoKSkpOworICAgICAgICAgICAgICAgIGNvbnN0YW50V2FzU2V0ID0gdHJ5U2V0Q29uc3Rh
bnQobm9kZSwganNCb29sZWFuKGNoaWxkLmlzTnVtYmVyKCkpKTsKICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgIGNhc2UgSXNTdHJpbmc6Ci0gICAgICAgICAgICAgICAgY29uc3Rh
bnRXYXNTZXQgPSB0cnlTZXRDb25zdGFudChub2RlSW5kZXgsIGpzQm9vbGVhbihpc0pTU3RyaW5n
KGNoaWxkKSkpOworICAgICAgICAgICAgICAgIGNvbnN0YW50V2FzU2V0ID0gdHJ5U2V0Q29uc3Rh
bnQobm9kZSwganNCb29sZWFuKGlzSlNTdHJpbmcoY2hpbGQpKSk7CiAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICBjYXNlIElzT2JqZWN0OgogICAgICAgICAgICAgICAgIGlmIChj
aGlsZC5pc051bGwoKSB8fCAhY2hpbGQuaXNPYmplY3QoKSkgewotICAgICAgICAgICAgICAgICAg
ICBjb25zdGFudFdhc1NldCA9IHRyeVNldENvbnN0YW50KG5vZGVJbmRleCwganNCb29sZWFuKGNo
aWxkLmlzTnVsbCgpKSk7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0YW50V2FzU2V0ID0gdHJ5
U2V0Q29uc3RhbnQobm9kZSwganNCb29sZWFuKGNoaWxkLmlzTnVsbCgpKSk7CiAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGRlZmF1bHQ6
CkBAIC03MTgsNjEgKzcxNyw2MSBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWdu
ZWQgaW5kCiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAotICAgICAgICBmb3JOb2RlKG5vZGVJ
bmRleCkuc2V0KFNwZWNCb29sZWFuKTsKKyAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0Jv
b2xlYW4pOwogICAgICAgICBicmVhazsKICAgICB9CiAKICAgICBjYXNlIFR5cGVPZjogewogICAg
ICAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSBtX2NvZGVCbG9jay0+Z2xvYmFsRGF0YSgp
OwotICAgICAgICBKU1ZhbHVlIGNoaWxkID0gZm9yTm9kZShub2RlLmNoaWxkMSgpKS52YWx1ZSgp
OwotICAgICAgICBBYnN0cmFjdFZhbHVlJiBhYnN0cmFjdENoaWxkID0gZm9yTm9kZShub2RlLmNo
aWxkMSgpKTsKKyAgICAgICAgSlNWYWx1ZSBjaGlsZCA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkp
LnZhbHVlKCk7CisgICAgICAgIEFic3RyYWN0VmFsdWUmIGFic3RyYWN0Q2hpbGQgPSBmb3JOb2Rl
KG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgaWYgKGNoaWxkKSB7Ci0gICAgICAgICAgICBKU1Zh
bHVlIHR5cGVTdHJpbmcgPSBqc1R5cGVTdHJpbmdGb3JWYWx1ZSgqZ2xvYmFsRGF0YSwgbV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdEZvcihub2RlLmNvZGVPcmlnaW4pLCBjaGlsZCk7Ci0gICAgICAg
ICAgICBpZiAodHJ5U2V0Q29uc3RhbnQobm9kZUluZGV4LCB0eXBlU3RyaW5nKSkgeworICAgICAg
ICAgICAgSlNWYWx1ZSB0eXBlU3RyaW5nID0ganNUeXBlU3RyaW5nRm9yVmFsdWUoKmdsb2JhbERh
dGEsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3RGb3Iobm9kZS0+Y29kZU9yaWdpbiksIGNoaWxk
KTsKKyAgICAgICAgICAgIGlmICh0cnlTZXRDb25zdGFudChub2RlLCB0eXBlU3RyaW5nKSkgewog
ICAgICAgICAgICAgICAgIG1fZm91bmRDb25zdGFudHMgPSB0cnVlOwogICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgaWYgKGlzTnVtYmVyU3BlY3Vs
YXRpb24oYWJzdHJhY3RDaGlsZC5tX3R5cGUpKSB7Ci0gICAgICAgICAgICBpZiAodHJ5U2V0Q29u
c3RhbnQobm9kZUluZGV4LCBnbG9iYWxEYXRhLT5zbWFsbFN0cmluZ3MubnVtYmVyU3RyaW5nKCkp
KSB7Ci0gICAgICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY051
bWJlcik7CisgICAgICAgICAgICBpZiAodHJ5U2V0Q29uc3RhbnQobm9kZSwgZ2xvYmFsRGF0YS0+
c21hbGxTdHJpbmdzLm51bWJlclN0cmluZygpKSkgeworICAgICAgICAgICAgICAgIGZvck5vZGUo
bm9kZS0+Y2hpbGQxKCkpLmZpbHRlcihTcGVjTnVtYmVyKTsKICAgICAgICAgICAgICAgICBtX2Zv
dW5kQ29uc3RhbnRzID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
IH0KICAgICAgICAgfSBlbHNlIGlmIChpc1N0cmluZ1NwZWN1bGF0aW9uKGFic3RyYWN0Q2hpbGQu
bV90eXBlKSkgewotICAgICAgICAgICAgaWYgKHRyeVNldENvbnN0YW50KG5vZGVJbmRleCwgZ2xv
YmFsRGF0YS0+c21hbGxTdHJpbmdzLnN0cmluZ1N0cmluZygpKSkgewotICAgICAgICAgICAgICAg
IGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNTdHJpbmcpOworICAgICAgICAgICAg
aWYgKHRyeVNldENvbnN0YW50KG5vZGUsIGdsb2JhbERhdGEtPnNtYWxsU3RyaW5ncy5zdHJpbmdT
dHJpbmcoKSkpIHsKKyAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5maWx0
ZXIoU3BlY1N0cmluZyk7CiAgICAgICAgICAgICAgICAgbV9mb3VuZENvbnN0YW50cyA9IHRydWU7
CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSBp
ZiAoaXNGaW5hbE9iamVjdFNwZWN1bGF0aW9uKGFic3RyYWN0Q2hpbGQubV90eXBlKSB8fCBpc0Fy
cmF5U3BlY3VsYXRpb24oYWJzdHJhY3RDaGlsZC5tX3R5cGUpIHx8IGlzQXJndW1lbnRzU3BlY3Vs
YXRpb24oYWJzdHJhY3RDaGlsZC5tX3R5cGUpKSB7Ci0gICAgICAgICAgICBpZiAodHJ5U2V0Q29u
c3RhbnQobm9kZUluZGV4LCBnbG9iYWxEYXRhLT5zbWFsbFN0cmluZ3Mub2JqZWN0U3RyaW5nKCkp
KSB7Ci0gICAgICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY0Zp
bmFsT2JqZWN0IHwgU3BlY0FycmF5IHwgU3BlY0FyZ3VtZW50cyk7CisgICAgICAgICAgICBpZiAo
dHJ5U2V0Q29uc3RhbnQobm9kZSwgZ2xvYmFsRGF0YS0+c21hbGxTdHJpbmdzLm9iamVjdFN0cmlu
ZygpKSkgeworICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRlcihT
cGVjRmluYWxPYmplY3QgfCBTcGVjQXJyYXkgfCBTcGVjQXJndW1lbnRzKTsKICAgICAgICAgICAg
ICAgICBtX2ZvdW5kQ29uc3RhbnRzID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIGlmIChpc0Z1bmN0aW9uU3BlY3VsYXRpb24oYWJz
dHJhY3RDaGlsZC5tX3R5cGUpKSB7Ci0gICAgICAgICAgICBpZiAodHJ5U2V0Q29uc3RhbnQobm9k
ZUluZGV4LCBnbG9iYWxEYXRhLT5zbWFsbFN0cmluZ3MuZnVuY3Rpb25TdHJpbmcoKSkpIHsKLSAg
ICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjRnVuY3Rpb24p
OworICAgICAgICAgICAgaWYgKHRyeVNldENvbnN0YW50KG5vZGUsIGdsb2JhbERhdGEtPnNtYWxs
U3RyaW5ncy5mdW5jdGlvblN0cmluZygpKSkgeworICAgICAgICAgICAgICAgIGZvck5vZGUobm9k
ZS0+Y2hpbGQxKCkpLmZpbHRlcihTcGVjRnVuY3Rpb24pOwogICAgICAgICAgICAgICAgIG1fZm91
bmRDb25zdGFudHMgPSB0cnVlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
fQogICAgICAgICB9IGVsc2UgaWYgKGlzQm9vbGVhblNwZWN1bGF0aW9uKGFic3RyYWN0Q2hpbGQu
bV90eXBlKSkgewotICAgICAgICAgICAgaWYgKHRyeVNldENvbnN0YW50KG5vZGVJbmRleCwgZ2xv
YmFsRGF0YS0+c21hbGxTdHJpbmdzLmJvb2xlYW5TdHJpbmcoKSkpIHsKLSAgICAgICAgICAgICAg
ICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjQm9vbGVhbik7CisgICAgICAgICAg
ICBpZiAodHJ5U2V0Q29uc3RhbnQobm9kZSwgZ2xvYmFsRGF0YS0+c21hbGxTdHJpbmdzLmJvb2xl
YW5TdHJpbmcoKSkpIHsKKyAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5m
aWx0ZXIoU3BlY0Jvb2xlYW4pOwogICAgICAgICAgICAgICAgIG1fZm91bmRDb25zdGFudHMgPSB0
cnVlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgTm9kZSYgY2hpbGROb2RlID0gbV9ncmFwaFtub2RlLmNoaWxkMSgp
XTsKLSAgICAgICAgICAgIGlmIChpc0NlbGxTcGVjdWxhdGlvbihjaGlsZE5vZGUucHJlZGljdGlv
bigpKSkgewotICAgICAgICAgICAgICAgIGlmIChpc1N0cmluZ1NwZWN1bGF0aW9uKGNoaWxkTm9k
ZS5wcmVkaWN0aW9uKCkpKQotICAgICAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQx
KCkpLmZpbHRlcihTcGVjU3RyaW5nKTsKKyAgICAgICAgICAgIE5vZGUqIGNoaWxkTm9kZSA9IG5v
ZGUtPmNoaWxkMSgpLm5vZGUoKTsKKyAgICAgICAgICAgIGlmIChpc0NlbGxTcGVjdWxhdGlvbihj
aGlsZE5vZGUtPnByZWRpY3Rpb24oKSkpIHsKKyAgICAgICAgICAgICAgICBpZiAoaXNTdHJpbmdT
cGVjdWxhdGlvbihjaGlsZE5vZGUtPnByZWRpY3Rpb24oKSkpCisgICAgICAgICAgICAgICAgICAg
IGZvck5vZGUoY2hpbGROb2RlKS5maWx0ZXIoU3BlY1N0cmluZyk7CiAgICAgICAgICAgICAgICAg
ZWxzZQotICAgICAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihT
cGVjQ2VsbCk7Ci0gICAgICAgICAgICAgICAgbm9kZS5zZXRDYW5FeGl0KHRydWUpOworICAgICAg
ICAgICAgICAgICAgICBmb3JOb2RlKGNoaWxkTm9kZSkuZmlsdGVyKFNwZWNDZWxsKTsKKyAgICAg
ICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOwogICAgICAgICAgICAgfQogICAgICAg
ICB9Ci0gICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoU3BlY1N0cmluZyk7CisgICAgICAg
IGZvck5vZGUobm9kZSkuc2V0KFNwZWNTdHJpbmcpOwogICAgICAgICBicmVhazsKICAgICB9CiAg
ICAgICAgICAgICAKQEAgLTc4MywyNiArNzgyLDI2IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhl
Y3V0ZSh1bnNpZ25lZCBpbmQKICAgICBjYXNlIENvbXBhcmVFcTogewogICAgICAgICBib29sIGNv
bnN0YW50V2FzU2V0ID0gZmFsc2U7CiAKLSAgICAgICAgSlNWYWx1ZSBsZWZ0Q29uc3QgPSBmb3JO
b2RlKG5vZGUuY2hpbGQxKCkpLnZhbHVlKCk7Ci0gICAgICAgIEpTVmFsdWUgcmlnaHRDb25zdCA9
IGZvck5vZGUobm9kZS5jaGlsZDIoKSkudmFsdWUoKTsKKyAgICAgICAgSlNWYWx1ZSBsZWZ0Q29u
c3QgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS52YWx1ZSgpOworICAgICAgICBKU1ZhbHVlIHJp
Z2h0Q29uc3QgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMigpKS52YWx1ZSgpOwogICAgICAgICBpZiAo
bGVmdENvbnN0ICYmIHJpZ2h0Q29uc3QgJiYgbGVmdENvbnN0LmlzTnVtYmVyKCkgJiYgcmlnaHRD
b25zdC5pc051bWJlcigpKSB7CiAgICAgICAgICAgICBkb3VibGUgYSA9IGxlZnRDb25zdC5hc051
bWJlcigpOwogICAgICAgICAgICAgZG91YmxlIGIgPSByaWdodENvbnN0LmFzTnVtYmVyKCk7CiAg
ICAgICAgICAgICBzd2l0Y2ggKG5vZGUub3AoKSkgewogICAgICAgICAgICAgY2FzZSBDb21wYXJl
TGVzczoKLSAgICAgICAgICAgICAgICBjb25zdGFudFdhc1NldCA9IHRyeVNldENvbnN0YW50KG5v
ZGVJbmRleCwganNCb29sZWFuKGEgPCBiKSk7CisgICAgICAgICAgICAgICAgY29uc3RhbnRXYXNT
ZXQgPSB0cnlTZXRDb25zdGFudChub2RlLCBqc0Jvb2xlYW4oYSA8IGIpKTsKICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgQ29tcGFyZUxlc3NFcToKLSAgICAgICAgICAg
ICAgICBjb25zdGFudFdhc1NldCA9IHRyeVNldENvbnN0YW50KG5vZGVJbmRleCwganNCb29sZWFu
KGEgPD0gYikpOworICAgICAgICAgICAgICAgIGNvbnN0YW50V2FzU2V0ID0gdHJ5U2V0Q29uc3Rh
bnQobm9kZSwganNCb29sZWFuKGEgPD0gYikpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgY2FzZSBDb21wYXJlR3JlYXRlcjoKLSAgICAgICAgICAgICAgICBjb25zdGFudFdh
c1NldCA9IHRyeVNldENvbnN0YW50KG5vZGVJbmRleCwganNCb29sZWFuKGEgPiBiKSk7CisgICAg
ICAgICAgICAgICAgY29uc3RhbnRXYXNTZXQgPSB0cnlTZXRDb25zdGFudChub2RlLCBqc0Jvb2xl
YW4oYSA+IGIpKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgQ29t
cGFyZUdyZWF0ZXJFcToKLSAgICAgICAgICAgICAgICBjb25zdGFudFdhc1NldCA9IHRyeVNldENv
bnN0YW50KG5vZGVJbmRleCwganNCb29sZWFuKGEgPj0gYikpOworICAgICAgICAgICAgICAgIGNv
bnN0YW50V2FzU2V0ID0gdHJ5U2V0Q29uc3RhbnQobm9kZSwganNCb29sZWFuKGEgPj0gYikpOwog
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBDb21wYXJlRXE6Ci0gICAg
ICAgICAgICAgICAgY29uc3RhbnRXYXNTZXQgPSB0cnlTZXRDb25zdGFudChub2RlSW5kZXgsIGpz
Qm9vbGVhbihhID09IGIpKTsKKyAgICAgICAgICAgICAgICBjb25zdGFudFdhc1NldCA9IHRyeVNl
dENvbnN0YW50KG5vZGUsIGpzQm9vbGVhbihhID09IGIpKTsKICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKQEAgLTgxMSwyNCArODEwLDI0IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6
ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICAK
LSAgICAgICAgaWYgKCFjb25zdGFudFdhc1NldCAmJiBub2RlLm9wKCkgPT0gQ29tcGFyZUVxKSB7
Ci0gICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSBsZWZ0VHlwZSA9IGZvck5vZGUobm9kZS5jaGls
ZDEoKSkubV90eXBlOwotICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgcmlnaHRUeXBlID0gZm9y
Tm9kZShub2RlLmNoaWxkMigpKS5tX3R5cGU7CisgICAgICAgIGlmICghY29uc3RhbnRXYXNTZXQg
JiYgbm9kZS0+b3AoKSA9PSBDb21wYXJlRXEpIHsKKyAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBl
IGxlZnRUeXBlID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSkubV90eXBlOworICAgICAgICAgICAg
U3BlY3VsYXRlZFR5cGUgcmlnaHRUeXBlID0gZm9yTm9kZShub2RlLT5jaGlsZDIoKSkubV90eXBl
OwogICAgICAgICAgICAgaWYgKChpc0ludDMyU3BlY3VsYXRpb24obGVmdFR5cGUpICYmIGlzT3Ro
ZXJTcGVjdWxhdGlvbihyaWdodFR5cGUpKQogICAgICAgICAgICAgICAgIHx8IChpc090aGVyU3Bl
Y3VsYXRpb24obGVmdFR5cGUpICYmIGlzSW50MzJTcGVjdWxhdGlvbihyaWdodFR5cGUpKSkKLSAg
ICAgICAgICAgICAgICBjb25zdGFudFdhc1NldCA9IHRyeVNldENvbnN0YW50KG5vZGVJbmRleCwg
anNCb29sZWFuKGZhbHNlKSk7CisgICAgICAgICAgICAgICAgY29uc3RhbnRXYXNTZXQgPSB0cnlT
ZXRDb25zdGFudChub2RlLCBqc0Jvb2xlYW4oZmFsc2UpKTsKICAgICAgICAgfQogICAgICAgICAK
ICAgICAgICAgaWYgKGNvbnN0YW50V2FzU2V0KSB7CiAgICAgICAgICAgICBtX2ZvdW5kQ29uc3Rh
bnRzID0gdHJ1ZTsKLSAgICAgICAgICAgIG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7CisgICAgICAg
ICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9CiAgICAgICAgIAotICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFNwZWNCb29sZWFu
KTsKKyAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0Jvb2xlYW4pOwogICAgICAgICAKLSAg
ICAgICAgTm9kZSYgbGVmdCA9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV07Ci0gICAgICAgIE5vZGUm
IHJpZ2h0ID0gbV9ncmFwaFtub2RlLmNoaWxkMigpXTsKKyAgICAgICAgTm9kZSogbGVmdCA9IG5v
ZGUtPmNoaWxkMSgpLm5vZGUoKTsKKyAgICAgICAgTm9kZSogcmlnaHQgPSBub2RlLT5jaGlsZDIo
KS5ub2RlKCk7CiAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIGZpbHRlcjsKICAgICAgICAgU3BlY3Vs
YXRlZFR5cGVDaGVja2VyIGNoZWNrZXI7CiAgICAgICAgIGlmIChOb2RlOjpzaG91bGRTcGVjdWxh
dGVJbnRlZ2VyKGxlZnQsIHJpZ2h0KSkgewpAQCAtODM4LDEyMSArODM3LDExOSBAQCBib29sIEFi
c3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgICAgICBmaWx0ZXIgPSBT
cGVjTnVtYmVyOwogICAgICAgICAgICAgY2hlY2tlciA9IGlzTnVtYmVyU3BlY3VsYXRpb247CiAg
ICAgICAgIH0gZWxzZSBpZiAobm9kZS5vcCgpID09IENvbXBhcmVFcSkgewotICAgICAgICAgICAg
aWYgKChtX2dyYXBoLmlzQ29uc3RhbnQobm9kZS5jaGlsZDEoKS5pbmRleCgpKQotICAgICAgICAg
ICAgICAgICAmJiBtX2dyYXBoLnZhbHVlT2ZKU0NvbnN0YW50KG5vZGUuY2hpbGQxKCkuaW5kZXgo
KSkuaXNOdWxsKCkpCi0gICAgICAgICAgICAgICAgfHwgKG1fZ3JhcGguaXNDb25zdGFudChub2Rl
LmNoaWxkMigpLmluZGV4KCkpCi0gICAgICAgICAgICAgICAgICAgICYmIG1fZ3JhcGgudmFsdWVP
ZkpTQ29uc3RhbnQobm9kZS5jaGlsZDIoKS5pbmRleCgpKS5pc051bGwoKSkpIHsKKyAgICAgICAg
ICAgIGlmICgobV9ncmFwaC5pc0NvbnN0YW50KGxlZnQpCisgICAgICAgICAgICAgICAgICYmIG1f
Z3JhcGgudmFsdWVPZkpTQ29uc3RhbnQobGVmdCkuaXNOdWxsKCkpCisgICAgICAgICAgICAgICAg
fHwgKG1fZ3JhcGguaXNDb25zdGFudChyaWdodCkKKyAgICAgICAgICAgICAgICAgICAgJiYgbV9n
cmFwaC52YWx1ZU9mSlNDb25zdGFudChyaWdodCkuaXNOdWxsKCkpKSB7CiAgICAgICAgICAgICAg
ICAgLy8gV2UgY2FuIGV4aXQgaWYgd2UgaGF2ZW4ndCBmaXJlZCB0aGUgTWFzcXVlcmFkZXNBc1Vu
ZGVmaW5kIHdhdGNocG9pbnQgeWV0LgotICAgICAgICAgICAgICAgIG5vZGUuc2V0Q2FuRXhpdCht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0Rm9yKG5vZGUuY29kZU9yaWdpbiktPm1hc3F1ZXJhZGVz
QXNVbmRlZmluZWRXYXRjaHBvaW50KCktPmlzU3RpbGxWYWxpZCgpKTsKKyAgICAgICAgICAgICAg
ICBub2RlLT5zZXRDYW5FeGl0KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3RGb3Iobm9kZS0+Y29k
ZU9yaWdpbiktPm1hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50KCktPmlzU3RpbGxWYWxp
ZCgpKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IAotICAgICAgICAgICAgaWYgKGxlZnQuc2hvdWxkU3BlY3VsYXRlU3RyaW5nKCkgfHwgcmlnaHQu
c2hvdWxkU3BlY3VsYXRlU3RyaW5nKCkpIHsKLSAgICAgICAgICAgICAgICBub2RlLnNldENhbkV4
aXQoZmFsc2UpOworICAgICAgICAgICAgaWYgKGxlZnQtPnNob3VsZFNwZWN1bGF0ZVN0cmluZygp
IHx8IHJpZ2h0LT5zaG91bGRTcGVjdWxhdGVTdHJpbmcoKSkgeworICAgICAgICAgICAgICAgIG5v
ZGUtPnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgfSAKLSAgICAgICAgICAgIGlmIChsZWZ0LnNob3VsZFNwZWN1bGF0ZU5vblN0cmluZ0NlbGwo
KSAmJiByaWdodC5zaG91bGRTcGVjdWxhdGVOb25TdHJpbmdDZWxsT3JPdGhlcigpKSB7Ci0gICAg
ICAgICAgICAgICAgbm9kZS5zZXRDYW5FeGl0KHRydWUpOwotICAgICAgICAgICAgICAgIGZvck5v
ZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNDZWxsICYgflNwZWNTdHJpbmcpOwotICAgICAg
ICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKChTcGVjQ2VsbCAmIH5TcGVj
U3RyaW5nKSB8IFNwZWNPdGhlcik7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBpZiAobGVmdC5zaG91bGRTcGVjdWxhdGVOb25TdHJpbmdDZWxsT3JP
dGhlcigpICYmIHJpZ2h0LnNob3VsZFNwZWN1bGF0ZU5vblN0cmluZ0NlbGwoKSkgewotICAgICAg
ICAgICAgICAgIG5vZGUuc2V0Q2FuRXhpdCh0cnVlKTsKLSAgICAgICAgICAgICAgICBmb3JOb2Rl
KG5vZGUuY2hpbGQxKCkpLmZpbHRlcigoU3BlY0NlbGwgJiB+U3BlY1N0cmluZykgfCBTcGVjT3Ro
ZXIpOwotICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKFNwZWND
ZWxsICYgflNwZWNTdHJpbmcpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
fQotICAgICAgICAgICAgaWYgKGxlZnQuc2hvdWxkU3BlY3VsYXRlTm9uU3RyaW5nQ2VsbCgpICYm
IHJpZ2h0LnNob3VsZFNwZWN1bGF0ZU5vblN0cmluZ0NlbGwoKSkgewotICAgICAgICAgICAgICAg
IG5vZGUuc2V0Q2FuRXhpdCh0cnVlKTsKLSAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hp
bGQxKCkpLmZpbHRlcihTcGVjQ2VsbCAmIH5TcGVjU3RyaW5nKTsKLSAgICAgICAgICAgICAgICBm
b3JOb2RlKG5vZGUuY2hpbGQyKCkpLmZpbHRlcihTcGVjQ2VsbCAmIH5TcGVjU3RyaW5nKTsKKyAg
ICAgICAgICAgIGlmIChsZWZ0LT5zaG91bGRTcGVjdWxhdGVOb25TdHJpbmdDZWxsKCkgJiYgcmln
aHQtPnNob3VsZFNwZWN1bGF0ZU5vblN0cmluZ0NlbGxPck90aGVyKCkpIHsKKyAgICAgICAgICAg
ICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOworICAgICAgICAgICAgICAgIGZvck5vZGUobGVm
dCkuZmlsdGVyKFNwZWNDZWxsICYgflNwZWNTdHJpbmcpOworICAgICAgICAgICAgICAgIGZvck5v
ZGUocmlnaHQpLmZpbHRlcigoU3BlY0NlbGwgJiB+U3BlY1N0cmluZykgfCBTcGVjT3RoZXIpOwor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGxl
ZnQtPnNob3VsZFNwZWN1bGF0ZU5vblN0cmluZ0NlbGxPck90aGVyKCkgJiYgcmlnaHQtPnNob3Vs
ZFNwZWN1bGF0ZU5vblN0cmluZ0NlbGwoKSkgeworICAgICAgICAgICAgICAgIG5vZGUtPnNldENh
bkV4aXQodHJ1ZSk7CisgICAgICAgICAgICAgICAgZm9yTm9kZShsZWZ0KS5maWx0ZXIoKFNwZWND
ZWxsICYgflNwZWNTdHJpbmcpIHwgU3BlY090aGVyKTsKKyAgICAgICAgICAgICAgICBmb3JOb2Rl
KHJpZ2h0KS5maWx0ZXIoU3BlY0NlbGwgJiB+U3BlY1N0cmluZyk7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAobGVmdC0+c2hvdWxkU3BlY3Vs
YXRlTm9uU3RyaW5nQ2VsbCgpICYmIHJpZ2h0LT5zaG91bGRTcGVjdWxhdGVOb25TdHJpbmdDZWxs
KCkpIHsKKyAgICAgICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOworICAgICAgICAg
ICAgICAgIGZvck5vZGUobGVmdCkuZmlsdGVyKFNwZWNDZWxsICYgflNwZWNTdHJpbmcpOworICAg
ICAgICAgICAgICAgIGZvck5vZGUocmlnaHQpLmZpbHRlcihTcGVjQ2VsbCAmIH5TcGVjU3RyaW5n
KTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAKICAgICAgICAgICAg
IGZpbHRlciA9IFNwZWNUb3A7CiAgICAgICAgICAgICBjaGVja2VyID0gaXNBbnlTcGVjdWxhdGlv
bjsKLSAgICAgICAgICAgIGNsb2JiZXJXb3JsZChub2RlLmNvZGVPcmlnaW4sIGluZGV4SW5CbG9j
ayk7CisgICAgICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+Y29kZU9yaWdpbiwgaW5kZXhJbkJs
b2NrKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGZpbHRlciA9IFNwZWNUb3A7CiAg
ICAgICAgICAgICBjaGVja2VyID0gaXNBbnlTcGVjdWxhdGlvbjsKLSAgICAgICAgICAgIGNsb2Ji
ZXJXb3JsZChub2RlLmNvZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7CisgICAgICAgICAgICBjbG9i
YmVyV29ybGQobm9kZS0+Y29kZU9yaWdpbiwgaW5kZXhJbkJsb2NrKTsKICAgICAgICAgfQogICAg
ICAgICBub2RlLnNldENhbkV4aXQoCi0gICAgICAgICAgICAhY2hlY2tlcihmb3JOb2RlKG5vZGUu
Y2hpbGQxKCkpLm1fdHlwZSkKLSAgICAgICAgICAgIHx8ICFjaGVja2VyKGZvck5vZGUobm9kZS5j
aGlsZDIoKSkubV90eXBlKSk7Ci0gICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVy
KGZpbHRlcik7Ci0gICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKGZpbHRlcik7
CisgICAgICAgICAgICAhY2hlY2tlcihmb3JOb2RlKGxlZnQpLm1fdHlwZSkKKyAgICAgICAgICAg
IHx8ICFjaGVja2VyKGZvck5vZGUocmlnaHQpLm1fdHlwZSkpOworICAgICAgICBmb3JOb2RlKGxl
ZnQpLmZpbHRlcihmaWx0ZXIpOworICAgICAgICBmb3JOb2RlKHJpZ2h0KS5maWx0ZXIoZmlsdGVy
KTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAgICAgCiAgICAgY2FzZSBDb21wYXJl
U3RyaWN0RXE6IHsKLSAgICAgICAgSlNWYWx1ZSBsZWZ0ID0gZm9yTm9kZShub2RlLmNoaWxkMSgp
KS52YWx1ZSgpOwotICAgICAgICBKU1ZhbHVlIHJpZ2h0ID0gZm9yTm9kZShub2RlLmNoaWxkMigp
KS52YWx1ZSgpOworICAgICAgICBOb2RlKiBsZWZ0Tm9kZSA9IG5vZGUtPmNoaWxkMSgpLm5vZGUo
KTsKKyAgICAgICAgTm9kZSogcmlnaHROb2RlID0gbm9kZS0+Y2hpbGQyKCkubm9kZSgpOworICAg
ICAgICBKU1ZhbHVlIGxlZnQgPSBmb3JOb2RlKGxlZnROb2RlKS52YWx1ZSgpOworICAgICAgICBK
U1ZhbHVlIHJpZ2h0ID0gZm9yTm9kZShyaWdodE5vZGUpLnZhbHVlKCk7CiAgICAgICAgIGlmIChs
ZWZ0ICYmIHJpZ2h0ICYmIGxlZnQuaXNOdW1iZXIoKSAmJiByaWdodC5pc051bWJlcigpCi0gICAg
ICAgICAgICAmJiB0cnlTZXRDb25zdGFudChub2RlSW5kZXgsIGpzQm9vbGVhbihsZWZ0LmFzTnVt
YmVyKCkgPT0gcmlnaHQuYXNOdW1iZXIoKSkpKSB7CisgICAgICAgICAgICAmJiB0cnlTZXRDb25z
dGFudChub2RlLCBqc0Jvb2xlYW4obGVmdC5hc051bWJlcigpID09IHJpZ2h0LmFzTnVtYmVyKCkp
KSkgewogICAgICAgICAgICAgbV9mb3VuZENvbnN0YW50cyA9IHRydWU7CiAgICAgICAgICAgICBu
b2RlLnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAg
ICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChTcGVjQm9vbGVhbik7Ci0gICAgICAgIGlmICht
X2dyYXBoLmlzSlNDb25zdGFudChub2RlLmNoaWxkMSgpLmluZGV4KCkpKSB7Ci0gICAgICAgICAg
ICBKU1ZhbHVlIHZhbHVlID0gbV9ncmFwaC52YWx1ZU9mSlNDb25zdGFudChub2RlLmNoaWxkMSgp
LmluZGV4KCkpOworICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjQm9vbGVhbik7CisgICAg
ICAgIGlmIChtX2dyYXBoLmlzSlNDb25zdGFudChsZWZ0Tm9kZSkpIHsKKyAgICAgICAgICAgIEpT
VmFsdWUgdmFsdWUgPSBtX2dyYXBoLnZhbHVlT2ZKU0NvbnN0YW50KGxlZnROb2RlKTsKICAgICAg
ICAgICAgIGlmICghdmFsdWUuaXNOdW1iZXIoKSAmJiAhdmFsdWUuaXNTdHJpbmcoKSkgewotICAg
ICAgICAgICAgICAgIG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7CisgICAgICAgICAgICAgICAgbm9k
ZS0+c2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICB9CiAgICAgICAgIH0KLSAgICAgICAgaWYgKG1fZ3JhcGguaXNKU0NvbnN0YW50KG5vZGUuY2hp
bGQyKCkuaW5kZXgoKSkpIHsKLSAgICAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBtX2dyYXBoLnZh
bHVlT2ZKU0NvbnN0YW50KG5vZGUuY2hpbGQyKCkuaW5kZXgoKSk7CisgICAgICAgIGlmIChtX2dy
YXBoLmlzSlNDb25zdGFudChyaWdodE5vZGUpKSB7CisgICAgICAgICAgICBKU1ZhbHVlIHZhbHVl
ID0gbV9ncmFwaC52YWx1ZU9mSlNDb25zdGFudChyaWdodE5vZGUpOwogICAgICAgICAgICAgaWYg
KCF2YWx1ZS5pc051bWJlcigpICYmICF2YWx1ZS5pc1N0cmluZygpKSB7Ci0gICAgICAgICAgICAg
ICAgbm9kZS5zZXRDYW5FeGl0KGZhbHNlKTsKKyAgICAgICAgICAgICAgICBub2RlLT5zZXRDYW5F
eGl0KGZhbHNlKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAg
ICAgfQotICAgICAgICBpZiAoTm9kZTo6c2hvdWxkU3BlY3VsYXRlSW50ZWdlcigKLSAgICAgICAg
ICAgICAgICBtX2dyYXBoW25vZGUuY2hpbGQxKCldLCBtX2dyYXBoW25vZGUuY2hpbGQyKCldKSkg
eworICAgICAgICBpZiAoTm9kZTo6c2hvdWxkU3BlY3VsYXRlSW50ZWdlcihsZWZ0Tm9kZSwgcmln
aHROb2RlKSkgewogICAgICAgICAgICAgc3BlY3VsYXRlSW50MzJCaW5hcnkobm9kZSk7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICBpZiAoTm9kZTo6c2hvdWxkU3BlY3Vs
YXRlTnVtYmVyKAotICAgICAgICAgICAgICAgIG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0sIG1fZ3Jh
cGhbbm9kZS5jaGlsZDIoKV0pKSB7CisgICAgICAgIGlmIChOb2RlOjpzaG91bGRTcGVjdWxhdGVO
dW1iZXIobGVmdE5vZGUsIHJpZ2h0Tm9kZSkpIHsKICAgICAgICAgICAgIHNwZWN1bGF0ZU51bWJl
ckJpbmFyeShub2RlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIE5v
ZGUmIGxlZnROb2RlID0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXTsKLSAgICAgICAgTm9kZSYgcmln
aHROb2RlID0gbV9ncmFwaFtub2RlLmNoaWxkMigpXTsKLSAgICAgICAgaWYgKGxlZnROb2RlLnNo
b3VsZFNwZWN1bGF0ZVN0cmluZygpIHx8IHJpZ2h0Tm9kZS5zaG91bGRTcGVjdWxhdGVTdHJpbmco
KSkgewotICAgICAgICAgICAgbm9kZS5zZXRDYW5FeGl0KGZhbHNlKTsKKyAgICAgICAgaWYgKGxl
ZnROb2RlLT5zaG91bGRTcGVjdWxhdGVTdHJpbmcoKSB8fCByaWdodE5vZGUtPnNob3VsZFNwZWN1
bGF0ZVN0cmluZygpKSB7CisgICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIGlmIChsZWZ0Tm9kZS5zaG91bGRT
cGVjdWxhdGVOb25TdHJpbmdDZWxsKCkgJiYgcmlnaHROb2RlLnNob3VsZFNwZWN1bGF0ZU5vblN0
cmluZ0NlbGwoKSkgeworICAgICAgICBpZiAobGVmdE5vZGUtPnNob3VsZFNwZWN1bGF0ZU5vblN0
cmluZ0NlbGwoKSAmJiByaWdodE5vZGUtPnNob3VsZFNwZWN1bGF0ZU5vblN0cmluZ0NlbGwoKSkg
ewogICAgICAgICAgICAgbm9kZS5zZXRDYW5FeGl0KHRydWUpOwotICAgICAgICAgICAgZm9yTm9k
ZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoKFNwZWNDZWxsICYgflNwZWNTdHJpbmcpIHwgU3BlY090
aGVyKTsKLSAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKChTcGVjQ2Vs
bCAmIH5TcGVjU3RyaW5nKSB8IFNwZWNPdGhlcik7CisgICAgICAgICAgICBmb3JOb2RlKGxlZnRO
b2RlKS5maWx0ZXIoKFNwZWNDZWxsICYgflNwZWNTdHJpbmcpIHwgU3BlY090aGVyKTsKKyAgICAg
ICAgICAgIGZvck5vZGUocmlnaHROb2RlKS5maWx0ZXIoKFNwZWNDZWxsICYgflNwZWNTdHJpbmcp
IHwgU3BlY090aGVyKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIG5v
ZGUuc2V0Q2FuRXhpdChmYWxzZSk7CisgICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwog
ICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgU3RyaW5nQ2hhckNvZGVB
dDoKLSAgICAgICAgbm9kZS5zZXRDYW5FeGl0KHRydWUpOwotICAgICAgICBmb3JOb2RlKG5vZGUu
Y2hpbGQxKCkpLmZpbHRlcihTcGVjU3RyaW5nKTsKLSAgICAgICAgZm9yTm9kZShub2RlLmNoaWxk
MigpKS5maWx0ZXIoU3BlY0ludDMyKTsKLSAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChT
cGVjSW50MzIpOworICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOworICAgICAgICBmb3JO
b2RlKG5vZGUtPmNoaWxkMSgpKS5maWx0ZXIoU3BlY1N0cmluZyk7CisgICAgICAgIGZvck5vZGUo
bm9kZS0+Y2hpbGQyKCkpLmZpbHRlcihTcGVjSW50MzIpOworICAgICAgICBmb3JOb2RlKG5vZGUp
LnNldChTcGVjSW50MzIpOwogICAgICAgICBicmVhazsKICAgICAgICAgCiAgICAgY2FzZSBTdHJp
bmdDaGFyQXQ6Ci0gICAgICAgIG5vZGUuc2V0Q2FuRXhpdCh0cnVlKTsKLSAgICAgICAgZm9yTm9k
ZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY1N0cmluZyk7Ci0gICAgICAgIGZvck5vZGUobm9k
ZS5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7Ci0gICAgICAgIGZvck5vZGUobm9kZUluZGV4
KS5zZXQoU3BlY1N0cmluZyk7CisgICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7CisgICAg
ICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRlcihTcGVjU3RyaW5nKTsKKyAgICAgICAg
Zm9yTm9kZShub2RlLT5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7CisgICAgICAgIGZvck5v
ZGUobm9kZSkuc2V0KFNwZWNTdHJpbmcpOwogICAgICAgICBicmVhazsKICAgICAgICAgICAgIAog
ICAgIGNhc2UgR2V0QnlWYWw6IHsKLSAgICAgICAgbm9kZS5zZXRDYW5FeGl0KHRydWUpOwotICAg
ICAgICBzd2l0Y2ggKG5vZGUuYXJyYXlNb2RlKCkudHlwZSgpKSB7CisgICAgICAgIG5vZGUtPnNl
dENhbkV4aXQodHJ1ZSk7CisgICAgICAgIHN3aXRjaCAobm9kZS0+YXJyYXlNb2RlKCkudHlwZSgp
KSB7CiAgICAgICAgIGNhc2UgQXJyYXk6OlNlbGVjdFVzaW5nUHJlZGljdGlvbnM6CiAgICAgICAg
IGNhc2UgQXJyYXk6OlVucHJvZmlsZWQ6CiAgICAgICAgIGNhc2UgQXJyYXk6OlVuZGVjaWRlZDoK
QEAgLTk2Miw4MSArOTU5LDgxIEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25l
ZCBpbmQKICAgICAgICAgICAgIG1faXNWYWxpZCA9IGZhbHNlOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIGNhc2UgQXJyYXk6OkdlbmVyaWM6Ci0gICAgICAgICAgICBjbG9iYmVyV29ybGQo
bm9kZS5jb2RlT3JpZ2luLCBpbmRleEluQmxvY2spOwotICAgICAgICAgICAgZm9yTm9kZShub2Rl
SW5kZXgpLm1ha2VUb3AoKTsKKyAgICAgICAgICAgIGNsb2JiZXJXb3JsZChub2RlLT5jb2RlT3Jp
Z2luLCBpbmRleEluQmxvY2spOworICAgICAgICAgICAgZm9yTm9kZShub2RlKS5tYWtlVG9wKCk7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6U3RyaW5nOgotICAgICAg
ICAgICAgZm9yTm9kZShub2RlLmNoaWxkMigpKS5maWx0ZXIoU3BlY0ludDMyKTsKLSAgICAgICAg
ICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoU3BlY1N0cmluZyk7CisgICAgICAgICAgICBmb3JO
b2RlKG5vZGUtPmNoaWxkMigpKS5maWx0ZXIoU3BlY0ludDMyKTsKKyAgICAgICAgICAgIGZvck5v
ZGUobm9kZSkuc2V0KFNwZWNTdHJpbmcpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNh
c2UgQXJyYXk6OkFyZ3VtZW50czoKLSAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDIoKSku
ZmlsdGVyKFNwZWNJbnQzMik7Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkubWFrZVRv
cCgpOworICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQz
Mik7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLm1ha2VUb3AoKTsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICBjYXNlIEFycmF5OjpJbnQzMjoKLSAgICAgICAgICAgIGZvck5vZGUobm9k
ZS5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7Ci0gICAgICAgICAgICBpZiAobm9kZS5hcnJh
eU1vZGUoKS5pc091dE9mQm91bmRzKCkpIHsKLSAgICAgICAgICAgICAgICBjbG9iYmVyV29ybGQo
bm9kZS5jb2RlT3JpZ2luLCBpbmRleEluQmxvY2spOwotICAgICAgICAgICAgICAgIGZvck5vZGUo
bm9kZUluZGV4KS5tYWtlVG9wKCk7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMigp
KS5maWx0ZXIoU3BlY0ludDMyKTsKKyAgICAgICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS5p
c091dE9mQm91bmRzKCkpIHsKKyAgICAgICAgICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+Y29k
ZU9yaWdpbiwgaW5kZXhJbkJsb2NrKTsKKyAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLm1h
a2VUb3AoKTsKICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgIGZvck5vZGUobm9k
ZUluZGV4KS5zZXQoU3BlY0ludDMyKTsKKyAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNl
dChTcGVjSW50MzIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OkRv
dWJsZToKLSAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQz
Mik7Ci0gICAgICAgICAgICBpZiAobm9kZS5hcnJheU1vZGUoKS5pc091dE9mQm91bmRzKCkpIHsK
LSAgICAgICAgICAgICAgICBjbG9iYmVyV29ybGQobm9kZS5jb2RlT3JpZ2luLCBpbmRleEluQmxv
Y2spOwotICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5tYWtlVG9wKCk7Ci0gICAg
ICAgICAgICB9IGVsc2UgaWYgKG5vZGUuYXJyYXlNb2RlKCkuaXNTYW5lQ2hhaW4oKSkKLSAgICAg
ICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFNwZWNEb3VibGUpOworICAgICAgICAg
ICAgZm9yTm9kZShub2RlLT5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7CisgICAgICAgICAg
ICBpZiAobm9kZS0+YXJyYXlNb2RlKCkuaXNPdXRPZkJvdW5kcygpKSB7CisgICAgICAgICAgICAg
ICAgY2xvYmJlcldvcmxkKG5vZGUtPmNvZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7CisgICAgICAg
ICAgICAgICAgZm9yTm9kZShub2RlKS5tYWtlVG9wKCk7CisgICAgICAgICAgICB9IGVsc2UgaWYg
KG5vZGUtPmFycmF5TW9kZSgpLmlzU2FuZUNoYWluKCkpCisgICAgICAgICAgICAgICAgZm9yTm9k
ZShub2RlKS5zZXQoU3BlY0RvdWJsZSk7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAg
ICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChTcGVjRG91YmxlUmVhbCk7CisgICAgICAgICAgICAg
ICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0RvdWJsZVJlYWwpOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3VvdXM6CiAgICAgICAgIGNhc2UgQXJyYXk6OkFy
cmF5U3RvcmFnZToKICAgICAgICAgY2FzZSBBcnJheTo6U2xvd1B1dEFycmF5U3RvcmFnZToKLSAg
ICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7Ci0gICAg
ICAgICAgICBpZiAobm9kZS5hcnJheU1vZGUoKS5pc091dE9mQm91bmRzKCkpCi0gICAgICAgICAg
ICAgICAgY2xvYmJlcldvcmxkKG5vZGUuY29kZU9yaWdpbiwgaW5kZXhJbkJsb2NrKTsKLSAgICAg
ICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5tYWtlVG9wKCk7CisgICAgICAgICAgICBmb3JOb2Rl
KG5vZGUtPmNoaWxkMigpKS5maWx0ZXIoU3BlY0ludDMyKTsKKyAgICAgICAgICAgIGlmIChub2Rl
LT5hcnJheU1vZGUoKS5pc091dE9mQm91bmRzKCkpCisgICAgICAgICAgICAgICAgY2xvYmJlcldv
cmxkKG5vZGUtPmNvZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7CisgICAgICAgICAgICBmb3JOb2Rl
KG5vZGUpLm1ha2VUb3AoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEFycmF5
OjpJbnQ4QXJyYXk6Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQyKCkpLmZpbHRlcihT
cGVjSW50MzIpOwotICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChTcGVjSW50MzIp
OworICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7
CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjSW50MzIpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OkludDE2QXJyYXk6Ci0gICAgICAgICAgICBmb3JO
b2RlKG5vZGUuY2hpbGQyKCkpLmZpbHRlcihTcGVjSW50MzIpOwotICAgICAgICAgICAgZm9yTm9k
ZShub2RlSW5kZXgpLnNldChTcGVjSW50MzIpOworICAgICAgICAgICAgZm9yTm9kZShub2RlLT5j
aGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNl
dChTcGVjSW50MzIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6Oklu
dDMyQXJyYXk6Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQyKCkpLmZpbHRlcihTcGVj
SW50MzIpOwotICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChTcGVjSW50MzIpOwor
ICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7Cisg
ICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjSW50MzIpOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OlVpbnQ4QXJyYXk6Ci0gICAgICAgICAgICBmb3JOb2Rl
KG5vZGUuY2hpbGQyKCkpLmZpbHRlcihTcGVjSW50MzIpOwotICAgICAgICAgICAgZm9yTm9kZShu
b2RlSW5kZXgpLnNldChTcGVjSW50MzIpOworICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGls
ZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChT
cGVjSW50MzIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OlVpbnQ4
Q2xhbXBlZEFycmF5OgotICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMigpKS5maWx0ZXIo
U3BlY0ludDMyKTsKLSAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoU3BlY0ludDMy
KTsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQyKCkpLmZpbHRlcihTcGVjSW50MzIp
OworICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0ludDMyKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICBjYXNlIEFycmF5OjpVaW50MTZBcnJheToKLSAgICAgICAgICAgIGZv
ck5vZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7Ci0gICAgICAgICAgICBmb3JO
b2RlKG5vZGVJbmRleCkuc2V0KFNwZWNJbnQzMik7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUt
PmNoaWxkMigpKS5maWx0ZXIoU3BlY0ludDMyKTsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZSku
c2V0KFNwZWNJbnQzMik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6
VWludDMyQXJyYXk6Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQyKCkpLmZpbHRlcihT
cGVjSW50MzIpOwotICAgICAgICAgICAgaWYgKG5vZGUuc2hvdWxkU3BlY3VsYXRlSW50ZWdlcigp
KQotICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoU3BlY0ludDMyKTsKKyAg
ICAgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQyKCkpLmZpbHRlcihTcGVjSW50MzIpOworICAg
ICAgICAgICAgaWYgKG5vZGUtPnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKSkKKyAgICAgICAgICAg
ICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjSW50MzIpOwogICAgICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoU3BlY0RvdWJsZSk7CisgICAgICAg
ICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0RvdWJsZSk7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgY2FzZSBBcnJheTo6RmxvYXQzMkFycmF5OgotICAgICAgICAgICAgZm9yTm9k
ZShub2RlLmNoaWxkMigpKS5maWx0ZXIoU3BlY0ludDMyKTsKLSAgICAgICAgICAgIGZvck5vZGUo
bm9kZUluZGV4KS5zZXQoU3BlY0RvdWJsZSk7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNo
aWxkMigpKS5maWx0ZXIoU3BlY0ludDMyKTsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0
KFNwZWNEb3VibGUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OkZs
b2F0NjRBcnJheToKLSAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKFNw
ZWNJbnQzMik7Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFNwZWNEb3VibGUp
OworICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7
CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjRG91YmxlKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKQEAgLTEwNDcsNDMgKzEwNDQsNDMgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpl
eGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICAgICAgCiAgICAgY2FzZSBQdXRCeVZhbDoKICAg
ICBjYXNlIFB1dEJ5VmFsQWxpYXM6IHsKLSAgICAgICAgbm9kZS5zZXRDYW5FeGl0KHRydWUpOwor
ICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOwogICAgICAgICBFZGdlIGNoaWxkMSA9IG1f
Z3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCk7CiAgICAgICAgIEVkZ2UgY2hpbGQyID0gbV9ncmFw
aC52YXJBcmdDaGlsZChub2RlLCAxKTsKICAgICAgICAgRWRnZSBjaGlsZDMgPSBtX2dyYXBoLnZh
ckFyZ0NoaWxkKG5vZGUsIDIpOwotICAgICAgICBzd2l0Y2ggKG5vZGUuYXJyYXlNb2RlKCkubW9k
ZUZvclB1dCgpLnR5cGUoKSkgeworICAgICAgICBzd2l0Y2ggKG5vZGUtPmFycmF5TW9kZSgpLm1v
ZGVGb3JQdXQoKS50eXBlKCkpIHsKICAgICAgICAgY2FzZSBBcnJheTo6Rm9yY2VFeGl0OgogICAg
ICAgICAgICAgbV9pc1ZhbGlkID0gZmFsc2U7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
Y2FzZSBBcnJheTo6R2VuZXJpYzoKLSAgICAgICAgICAgIGNsb2JiZXJXb3JsZChub2RlLmNvZGVP
cmlnaW4sIGluZGV4SW5CbG9jayk7CisgICAgICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+Y29k
ZU9yaWdpbiwgaW5kZXhJbkJsb2NrKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNl
IEFycmF5OjpJbnQzMjoKICAgICAgICAgICAgIGZvck5vZGUoY2hpbGQxKS5maWx0ZXIoU3BlY0Nl
bGwpOwogICAgICAgICAgICAgZm9yTm9kZShjaGlsZDIpLmZpbHRlcihTcGVjSW50MzIpOwogICAg
ICAgICAgICAgZm9yTm9kZShjaGlsZDMpLmZpbHRlcihTcGVjSW50MzIpOwotICAgICAgICAgICAg
aWYgKG5vZGUuYXJyYXlNb2RlKCkuaXNPdXRPZkJvdW5kcygpKQotICAgICAgICAgICAgICAgIGNs
b2JiZXJXb3JsZChub2RlLmNvZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7CisgICAgICAgICAgICBp
ZiAobm9kZS0+YXJyYXlNb2RlKCkuaXNPdXRPZkJvdW5kcygpKQorICAgICAgICAgICAgICAgIGNs
b2JiZXJXb3JsZChub2RlLT5jb2RlT3JpZ2luLCBpbmRleEluQmxvY2spOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OkRvdWJsZToKICAgICAgICAgICAgIGZvck5vZGUo
Y2hpbGQxKS5maWx0ZXIoU3BlY0NlbGwpOwogICAgICAgICAgICAgZm9yTm9kZShjaGlsZDIpLmZp
bHRlcihTcGVjSW50MzIpOwogICAgICAgICAgICAgZm9yTm9kZShjaGlsZDMpLmZpbHRlcihTcGVj
UmVhbE51bWJlcik7Ci0gICAgICAgICAgICBpZiAobm9kZS5hcnJheU1vZGUoKS5pc091dE9mQm91
bmRzKCkpCi0gICAgICAgICAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUuY29kZU9yaWdpbiwgaW5k
ZXhJbkJsb2NrKTsKKyAgICAgICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS5pc091dE9mQm91
bmRzKCkpCisgICAgICAgICAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUtPmNvZGVPcmlnaW4sIGlu
ZGV4SW5CbG9jayk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6Q29u
dGlndW91czoKICAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlTdG9yYWdlOgogICAgICAgICAgICAg
Zm9yTm9kZShjaGlsZDEpLmZpbHRlcihTcGVjQ2VsbCk7CiAgICAgICAgICAgICBmb3JOb2RlKGNo
aWxkMikuZmlsdGVyKFNwZWNJbnQzMik7Ci0gICAgICAgICAgICBpZiAobm9kZS5hcnJheU1vZGUo
KS5pc091dE9mQm91bmRzKCkpCi0gICAgICAgICAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUuY29k
ZU9yaWdpbiwgaW5kZXhJbkJsb2NrKTsKKyAgICAgICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUo
KS5pc091dE9mQm91bmRzKCkpCisgICAgICAgICAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUtPmNv
ZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2Fz
ZSBBcnJheTo6U2xvd1B1dEFycmF5U3RvcmFnZToKICAgICAgICAgICAgIGZvck5vZGUoY2hpbGQx
KS5maWx0ZXIoU3BlY0NlbGwpOwogICAgICAgICAgICAgZm9yTm9kZShjaGlsZDIpLmZpbHRlcihT
cGVjSW50MzIpOwotICAgICAgICAgICAgaWYgKG5vZGUuYXJyYXlNb2RlKCkubWF5U3RvcmVUb0hv
bGUoKSkKLSAgICAgICAgICAgICAgICBjbG9iYmVyV29ybGQobm9kZS5jb2RlT3JpZ2luLCBpbmRl
eEluQmxvY2spOworICAgICAgICAgICAgaWYgKG5vZGUtPmFycmF5TW9kZSgpLm1heVN0b3JlVG9I
b2xlKCkpCisgICAgICAgICAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUtPmNvZGVPcmlnaW4sIGlu
ZGV4SW5CbG9jayk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6QXJn
dW1lbnRzOgogICAgICAgICAgICAgZm9yTm9kZShjaGlsZDEpLmZpbHRlcihTcGVjQ2VsbCk7CkBA
IC0xMDkyLDcgKzEwODksNyBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQg
aW5kCiAgICAgICAgIGNhc2UgQXJyYXk6OkludDhBcnJheToKICAgICAgICAgICAgIGZvck5vZGUo
Y2hpbGQxKS5maWx0ZXIoU3BlY0NlbGwpOwogICAgICAgICAgICAgZm9yTm9kZShjaGlsZDIpLmZp
bHRlcihTcGVjSW50MzIpOwotICAgICAgICAgICAgaWYgKG1fZ3JhcGhbY2hpbGQzXS5zaG91bGRT
cGVjdWxhdGVJbnRlZ2VyKCkpCisgICAgICAgICAgICBpZiAoY2hpbGQzLT5zaG91bGRTcGVjdWxh
dGVJbnRlZ2VyKCkpCiAgICAgICAgICAgICAgICAgZm9yTm9kZShjaGlsZDMpLmZpbHRlcihTcGVj
SW50MzIpOwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIGZvck5vZGUoY2hpbGQz
KS5maWx0ZXIoU3BlY051bWJlcik7CkBAIC0xMTAwLDcgKzEwOTcsNyBAQCBib29sIEFic3RyYWN0
U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgIGNhc2UgQXJyYXk6OkludDE2QXJy
YXk6CiAgICAgICAgICAgICBmb3JOb2RlKGNoaWxkMSkuZmlsdGVyKFNwZWNDZWxsKTsKICAgICAg
ICAgICAgIGZvck5vZGUoY2hpbGQyKS5maWx0ZXIoU3BlY0ludDMyKTsKLSAgICAgICAgICAgIGlm
IChtX2dyYXBoW2NoaWxkM10uc2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKQorICAgICAgICAgICAg
aWYgKGNoaWxkMy0+c2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKQogICAgICAgICAgICAgICAgIGZv
ck5vZGUoY2hpbGQzKS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGVsc2UKICAgICAg
ICAgICAgICAgICBmb3JOb2RlKGNoaWxkMykuZmlsdGVyKFNwZWNOdW1iZXIpOwpAQCAtMTEwOCw3
ICsxMTA1LDcgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAg
ICAgICBjYXNlIEFycmF5OjpJbnQzMkFycmF5OgogICAgICAgICAgICAgZm9yTm9kZShjaGlsZDEp
LmZpbHRlcihTcGVjQ2VsbCk7CiAgICAgICAgICAgICBmb3JOb2RlKGNoaWxkMikuZmlsdGVyKFNw
ZWNJbnQzMik7Ci0gICAgICAgICAgICBpZiAobV9ncmFwaFtjaGlsZDNdLnNob3VsZFNwZWN1bGF0
ZUludGVnZXIoKSkKKyAgICAgICAgICAgIGlmIChjaGlsZDMtPnNob3VsZFNwZWN1bGF0ZUludGVn
ZXIoKSkKICAgICAgICAgICAgICAgICBmb3JOb2RlKGNoaWxkMykuZmlsdGVyKFNwZWNJbnQzMik7
CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgZm9yTm9kZShjaGlsZDMpLmZpbHRl
cihTcGVjTnVtYmVyKTsKQEAgLTExMTYsNyArMTExMyw3IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6
ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgY2FzZSBBcnJheTo6VWludDhBcnJheToKICAg
ICAgICAgICAgIGZvck5vZGUoY2hpbGQxKS5maWx0ZXIoU3BlY0NlbGwpOwogICAgICAgICAgICAg
Zm9yTm9kZShjaGlsZDIpLmZpbHRlcihTcGVjSW50MzIpOwotICAgICAgICAgICAgaWYgKG1fZ3Jh
cGhbY2hpbGQzXS5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpCisgICAgICAgICAgICBpZiAoY2hp
bGQzLT5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpCiAgICAgICAgICAgICAgICAgZm9yTm9kZShj
aGlsZDMpLmZpbHRlcihTcGVjSW50MzIpOwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAg
ICAgIGZvck5vZGUoY2hpbGQzKS5maWx0ZXIoU3BlY051bWJlcik7CkBAIC0xMTI0LDcgKzExMjEs
NyBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgIGNh
c2UgQXJyYXk6OlVpbnQ4Q2xhbXBlZEFycmF5OgogICAgICAgICAgICAgZm9yTm9kZShjaGlsZDEp
LmZpbHRlcihTcGVjQ2VsbCk7CiAgICAgICAgICAgICBmb3JOb2RlKGNoaWxkMikuZmlsdGVyKFNw
ZWNJbnQzMik7Ci0gICAgICAgICAgICBpZiAobV9ncmFwaFtjaGlsZDNdLnNob3VsZFNwZWN1bGF0
ZUludGVnZXIoKSkKKyAgICAgICAgICAgIGlmIChjaGlsZDMtPnNob3VsZFNwZWN1bGF0ZUludGVn
ZXIoKSkKICAgICAgICAgICAgICAgICBmb3JOb2RlKGNoaWxkMykuZmlsdGVyKFNwZWNJbnQzMik7
CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgZm9yTm9kZShjaGlsZDMpLmZpbHRl
cihTcGVjTnVtYmVyKTsKQEAgLTExMzIsNyArMTEyOSw3IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6
ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgY2FzZSBBcnJheTo6VWludDE2QXJyYXk6CiAg
ICAgICAgICAgICBmb3JOb2RlKGNoaWxkMSkuZmlsdGVyKFNwZWNDZWxsKTsKICAgICAgICAgICAg
IGZvck5vZGUoY2hpbGQyKS5maWx0ZXIoU3BlY0ludDMyKTsKLSAgICAgICAgICAgIGlmIChtX2dy
YXBoW2NoaWxkM10uc2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKQorICAgICAgICAgICAgaWYgKGNo
aWxkMy0+c2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKQogICAgICAgICAgICAgICAgIGZvck5vZGUo
Y2hpbGQzKS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAg
ICAgICBmb3JOb2RlKGNoaWxkMykuZmlsdGVyKFNwZWNOdW1iZXIpOwpAQCAtMTE0MCw3ICsxMTM3
LDcgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICBj
YXNlIEFycmF5OjpVaW50MzJBcnJheToKICAgICAgICAgICAgIGZvck5vZGUoY2hpbGQxKS5maWx0
ZXIoU3BlY0NlbGwpOwogICAgICAgICAgICAgZm9yTm9kZShjaGlsZDIpLmZpbHRlcihTcGVjSW50
MzIpOwotICAgICAgICAgICAgaWYgKG1fZ3JhcGhbY2hpbGQzXS5zaG91bGRTcGVjdWxhdGVJbnRl
Z2VyKCkpCisgICAgICAgICAgICBpZiAoY2hpbGQzLT5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkp
CiAgICAgICAgICAgICAgICAgZm9yTm9kZShjaGlsZDMpLmZpbHRlcihTcGVjSW50MzIpOwogICAg
ICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIGZvck5vZGUoY2hpbGQzKS5maWx0ZXIoU3Bl
Y051bWJlcik7CkBAIC0xMTYzLDE2NiArMTE2MCwxODggQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpl
eGVjdXRlKHVuc2lnbmVkIGluZAogICAgIH0KICAgICAgICAgICAgIAogICAgIGNhc2UgQXJyYXlQ
dXNoOgotICAgICAgICBub2RlLnNldENhbkV4aXQodHJ1ZSk7Ci0gICAgICAgIHN3aXRjaCAobm9k
ZS5hcnJheU1vZGUoKS50eXBlKCkpIHsKKyAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsK
KyAgICAgICAgc3dpdGNoIChub2RlLT5hcnJheU1vZGUoKS50eXBlKCkpIHsKICAgICAgICAgY2Fz
ZSBBcnJheTo6SW50MzI6Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQyKCkpLmZpbHRl
cihTcGVjSW50MzIpOworICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDIoKSkuZmlsdGVy
KFNwZWNJbnQzMik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6RG91
YmxlOgotICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMigpKS5maWx0ZXIoU3BlY1JlYWxO
dW1iZXIpOworICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDIoKSkuZmlsdGVyKFNwZWNS
ZWFsTnVtYmVyKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBkZWZhdWx0OgogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUuY29kZU9y
aWdpbiwgaW5kZXhJbkJsb2NrKTsKLSAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChTcGVj
TnVtYmVyKTsKKyAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUtPmNvZGVPcmlnaW4sIGluZGV4SW5C
bG9jayk7CisgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNOdW1iZXIpOwogICAgICAgICBi
cmVhazsKICAgICAgICAgICAgIAogICAgIGNhc2UgQXJyYXlQb3A6Ci0gICAgICAgIG5vZGUuc2V0
Q2FuRXhpdCh0cnVlKTsKLSAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUuY29kZU9yaWdpbiwgaW5k
ZXhJbkJsb2NrKTsKLSAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLm1ha2VUb3AoKTsKKyAgICAg
ICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKKyAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUtPmNv
ZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7CisgICAgICAgIGZvck5vZGUobm9kZSkubWFrZVRvcCgp
OwogICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgIGNhc2UgUmVnRXhwRXhlYzoKICAg
ICBjYXNlIFJlZ0V4cFRlc3Q6Ci0gICAgICAgIG5vZGUuc2V0Q2FuRXhpdCgKLSAgICAgICAgICAg
ICFpc0NlbGxTcGVjdWxhdGlvbihmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkKLSAgICAg
ICAgICAgIHx8ICFpc0NlbGxTcGVjdWxhdGlvbihmb3JOb2RlKG5vZGUuY2hpbGQyKCkpLm1fdHlw
ZSkpOwotICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjQ2VsbCk7Ci0g
ICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKFNwZWNDZWxsKTsKLSAgICAgICAg
Zm9yTm9kZShub2RlSW5kZXgpLm1ha2VUb3AoKTsKKyAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCgK
KyAgICAgICAgICAgICFpc0NlbGxTcGVjdWxhdGlvbihmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5t
X3R5cGUpCisgICAgICAgICAgICB8fCAhaXNDZWxsU3BlY3VsYXRpb24oZm9yTm9kZShub2RlLT5j
aGlsZDIoKSkubV90eXBlKSk7CisgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRl
cihTcGVjQ2VsbCk7CisgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQyKCkpLmZpbHRlcihTcGVj
Q2VsbCk7CisgICAgICAgIGZvck5vZGUobm9kZSkubWFrZVRvcCgpOwogICAgICAgICBicmVhazsK
ICAgICAgICAgICAgIAogICAgIGNhc2UgSnVtcDoKLSAgICAgICAgbm9kZS5zZXRDYW5FeGl0KGZh
bHNlKTsKKyAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgCiAgICAgY2FzZSBCcmFuY2g6IHsKLSAgICAgICAgQm9vbGVhblJlc3VsdCBy
ZXN1bHQgPSBib29sZWFuUmVzdWx0KG5vZGUsIGZvck5vZGUobm9kZS5jaGlsZDEoKSkpOworICAg
ICAgICBOb2RlKiBjaGlsZCA9IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKKyAgICAgICAgQm9vbGVh
blJlc3VsdCByZXN1bHQgPSBib29sZWFuUmVzdWx0KG5vZGUsIGZvck5vZGUoY2hpbGQpKTsKICAg
ICAgICAgaWYgKHJlc3VsdCA9PSBEZWZpbml0ZWx5VHJ1ZSkgewogICAgICAgICAgICAgbV9icmFu
Y2hEaXJlY3Rpb24gPSBUYWtlVHJ1ZTsKLSAgICAgICAgICAgIG5vZGUuc2V0Q2FuRXhpdChmYWxz
ZSk7CisgICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICB9CiAgICAgICAgIGlmIChyZXN1bHQgPT0gRGVmaW5pdGVseUZhbHNlKSB7
CiAgICAgICAgICAgICBtX2JyYW5jaERpcmVjdGlvbiA9IFRha2VGYWxzZTsKLSAgICAgICAgICAg
IG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7CisgICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZh
bHNlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIC8vIEZJWE1FOiBU
aGUgYWJvdmUgaGFuZGxlcyB0aGUgdHJpdmlhbCBjYXNlcyBvZiBzcGFyc2UgY29uZGl0aW9uYWwK
ICAgICAgICAgLy8gY29uc3RhbnQgcHJvcGFnYXRpb24sIGJ1dCB3ZSBjYW4gZG8gYmV0dGVyOgog
ICAgICAgICAvLyBXZSBjYW4gc3BlY2lhbGl6ZSB0aGUgc291cmNlIHZhcmlhYmxlJ3MgdmFsdWUg
b24gZWFjaCBkaXJlY3Rpb24gb2YKICAgICAgICAgLy8gdGhlIGJyYW5jaC4KLSAgICAgICAgTm9k
ZSYgY2hpbGQgPSBtX2dyYXBoW25vZGUuY2hpbGQxKCldOwotICAgICAgICBpZiAoY2hpbGQuc2hv
dWxkU3BlY3VsYXRlQm9vbGVhbigpKQorICAgICAgICBpZiAoY2hpbGQtPnNob3VsZFNwZWN1bGF0
ZUJvb2xlYW4oKSkKICAgICAgICAgICAgIHNwZWN1bGF0ZUJvb2xlYW5VbmFyeShub2RlKTsKLSAg
ICAgICAgZWxzZSBpZiAoY2hpbGQuc2hvdWxkU3BlY3VsYXRlTm9uU3RyaW5nQ2VsbE9yT3RoZXIo
KSkgewotICAgICAgICAgICAgbm9kZS5zZXRDYW5FeGl0KHRydWUpOwotICAgICAgICAgICAgZm9y
Tm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoKFNwZWNDZWxsICYgflNwZWNTdHJpbmcpIHwgU3Bl
Y090aGVyKTsKLSAgICAgICAgfSBlbHNlIGlmIChjaGlsZC5zaG91bGRTcGVjdWxhdGVJbnRlZ2Vy
KCkpCisgICAgICAgIGVsc2UgaWYgKGNoaWxkLT5zaG91bGRTcGVjdWxhdGVOb25TdHJpbmdDZWxs
T3JPdGhlcigpKSB7CisgICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOworICAgICAg
ICAgICAgZm9yTm9kZShjaGlsZCkuZmlsdGVyKChTcGVjQ2VsbCAmIH5TcGVjU3RyaW5nKSB8IFNw
ZWNPdGhlcik7CisgICAgICAgIH0gZWxzZSBpZiAoY2hpbGQtPnNob3VsZFNwZWN1bGF0ZUludGVn
ZXIoKSkKICAgICAgICAgICAgIHNwZWN1bGF0ZUludDMyVW5hcnkobm9kZSk7Ci0gICAgICAgIGVs
c2UgaWYgKGNoaWxkLnNob3VsZFNwZWN1bGF0ZU51bWJlcigpKQorICAgICAgICBlbHNlIGlmIChj
aGlsZC0+c2hvdWxkU3BlY3VsYXRlTnVtYmVyKCkpCiAgICAgICAgICAgICBzcGVjdWxhdGVOdW1i
ZXJVbmFyeShub2RlKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgbm9kZS5zZXRDYW5FeGl0
KGZhbHNlKTsKKyAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICBt
X2JyYW5jaERpcmVjdGlvbiA9IFRha2VCb3RoOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAg
ICAgICAgICAKICAgICBjYXNlIFJldHVybjoKICAgICAgICAgbV9pc1ZhbGlkID0gZmFsc2U7Ci0g
ICAgICAgIG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7CisgICAgICAgIG5vZGUtPnNldENhbkV4aXQo
ZmFsc2UpOwogICAgICAgICBicmVhazsKICAgICAgICAgCiAgICAgY2FzZSBUaHJvdzoKICAgICBj
YXNlIFRocm93UmVmZXJlbmNlRXJyb3I6CiAgICAgICAgIG1faXNWYWxpZCA9IGZhbHNlOwotICAg
ICAgICBub2RlLnNldENhbkV4aXQodHJ1ZSk7CisgICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1
ZSk7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAgY2FzZSBUb1ByaW1pdGl2ZTog
ewotICAgICAgICBKU1ZhbHVlIGNoaWxkQ29uc3QgPSBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLnZh
bHVlKCk7Ci0gICAgICAgIGlmIChjaGlsZENvbnN0ICYmIGNoaWxkQ29uc3QuaXNOdW1iZXIoKSAm
JiB0cnlTZXRDb25zdGFudChub2RlSW5kZXgsIGNoaWxkQ29uc3QpKSB7CisgICAgICAgIE5vZGUq
IGNoaWxkID0gbm9kZS0+Y2hpbGQxKCkubm9kZSgpOworICAgICAgICAKKyAgICAgICAgSlNWYWx1
ZSBjaGlsZENvbnN0ID0gZm9yTm9kZShjaGlsZCkudmFsdWUoKTsKKyAgICAgICAgaWYgKGNoaWxk
Q29uc3QgJiYgY2hpbGRDb25zdC5pc051bWJlcigpICYmIHRyeVNldENvbnN0YW50KG5vZGUsIGNo
aWxkQ29uc3QpKSB7CiAgICAgICAgICAgICBtX2ZvdW5kQ29uc3RhbnRzID0gdHJ1ZTsKLSAgICAg
ICAgICAgIG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7CisgICAgICAgICAgICBub2RlLT5zZXRDYW5F
eGl0KGZhbHNlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIAotICAg
ICAgICBOb2RlJiBjaGlsZCA9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV07Ci0gICAgICAgIGlmIChj
aGlsZC5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpIHsKKyAgICAgICAgaWYgKGNoaWxkLT5zaG91
bGRTcGVjdWxhdGVJbnRlZ2VyKCkpIHsKICAgICAgICAgICAgIHNwZWN1bGF0ZUludDMyVW5hcnko
bm9kZSk7Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFNwZWNJbnQzMik7Cisg
ICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjSW50MzIpOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIH0KIAotICAgICAgICBBYnN0cmFjdFZhbHVlJiBzb3VyY2UgPSBmb3JOb2Rl
KG5vZGUuY2hpbGQxKCkpOwotICAgICAgICBBYnN0cmFjdFZhbHVlJiBkZXN0aW5hdGlvbiA9IGZv
ck5vZGUobm9kZUluZGV4KTsKLSAgICAgICAgICAgIAorICAgICAgICBBYnN0cmFjdFZhbHVlJiBz
b3VyY2UgPSBmb3JOb2RlKGNoaWxkKTsKKyAgICAgICAgQWJzdHJhY3RWYWx1ZSYgZGVzdGluYXRp
b24gPSBmb3JOb2RlKG5vZGUpOworICAgICAgICAKKyAgICAgICAgLy8gTkIuIFRoZSBtb3JlIGNh
bm9uaWNhbCB3YXkgb2Ygd3JpdGluZyB0aGlzIHdvdWxkIGhhdmUgYmVlbjoKKyAgICAgICAgLy8K
KyAgICAgICAgLy8gZGVzdGluYXRpb24gPSBzb3VyY2U7CisgICAgICAgIC8vIGlmIChkZXN0aW5h
dGlvbi5tX3R5cGUgJiAhKFNwZWNOdW1iZXIgfCBTcGVjU3RyaW5nIHwgU3BlY0Jvb2xlYW4pKSB7
CisgICAgICAgIC8vICAgICBkZXN0aW5hdGlvbi5maWx0ZXIoU3BlY051bWJlciB8IFNwZWNTdHJp
bmcgfCBTcGVjQm9vbGVhbik7CisgICAgICAgIC8vICAgICBBYnN0cmFjdFZhbHVlIHN0cmluZzsK
KyAgICAgICAgLy8gICAgIHN0cmluZy5zZXQoZ2xvYmFsRGF0YS0+c3RyaW5nU3RydWN0dXJlKTsK
KyAgICAgICAgLy8gICAgIGRlc3RpbmF0aW9uLm1lcmdlKHN0cmluZyk7CisgICAgICAgIC8vIH0K
KyAgICAgICAgLy8KKyAgICAgICAgLy8gVGhlIHJlYXNvbiB3aHkgdGhpcyB3b3VsZCwgaW4gbW9z
dCBvdGhlciBjYXNlcywgaGF2ZSBiZWVuIGJldHRlciBpcyB0aGF0CisgICAgICAgIC8vIHRoZW4g
ZGVzdGluYXRpb24gd291bGQgcHJlc2VydmUgYW55IG5vbi1TcGVjdWxhdGVkVHlwZSBrbm93bGVk
Z2Ugb2Ygc291cmNlLgorICAgICAgICAvLyBBcyBpdCBzdGFuZHMsIHRoZSBjb2RlIGJlbG93IGZv
cmdldHMgYW55IG5vbi1TcGVjdWxhdGVkVHlwZSBrbm93bGVkZ2UgdGhhdAorICAgICAgICAvLyBz
b3VyY2Ugd291bGQgaGF2ZSBoYWQuIEZvcnR1bmF0ZWx5LCB0aG91Z2gsIGZvciB0aGluZ3MgbGlr
ZSBzdHJpbmdzIGFuZAorICAgICAgICAvLyBudW1iZXJzIGFuZCBib29sZWFucywgd2UgZG9uJ3Qg
Y2FyZSBhYm91dCB0aGUgbm9uLVNwZWN1bGF0ZWRUeXBlIGtub3dlZGdlOgorICAgICAgICAvLyB0
aGUgc3RydWN0dXJlIHdvbid0IHRlbGwgdXMgYW55dGhpbmcgd2UgZG9uJ3QgYWxyZWFkeSBrbm93
LCBhbmQgbmVpdGhlcgorICAgICAgICAvLyB3aWxsIEFycmF5TW9kZXMuIEFuZCBpZiB0aGUgc291
cmNlIHdhcyBhIG1lYW5pbmdmdWwgY29uc3RhbnQgdGhlbiB3ZQorICAgICAgICAvLyB3b3VsZCBo
YXZlIGhhbmRsZWQgdGhhdCBhYm92ZS4gVW5mb3J0dW5hdGVseSwgdGhpcyBkb2VzIG1lYW4gdGhh
dAorICAgICAgICAvLyBUb1ByaW1pdGl2ZSB3aWxsIGN1cnJlbnRseSBmb3JnZXQgc3RyaW5nIGNv
bnN0YW50cy4gQnV0IHRoYXQncyBub3QgYSBiaWcKKyAgICAgICAgLy8gZGVhbCBzaW5jZSB3ZSBk
b24ndCBkbyBhbnkgb3B0aW1pemF0aW9uIG9uIHRob3NlIGN1cnJlbnRseS4KKyAgICAgICAgCiAg
ICAgICAgIFNwZWN1bGF0ZWRUeXBlIHR5cGUgPSBzb3VyY2UubV90eXBlOwogICAgICAgICBpZiAo
dHlwZSAmIH4oU3BlY051bWJlciB8IFNwZWNTdHJpbmcgfCBTcGVjQm9vbGVhbikpIHsKICAgICAg
ICAgICAgIHR5cGUgJj0gKFNwZWNOdW1iZXIgfCBTcGVjU3RyaW5nIHwgU3BlY0Jvb2xlYW4pOwog
ICAgICAgICAgICAgdHlwZSB8PSBTcGVjU3RyaW5nOwogICAgICAgICB9CiAgICAgICAgIGRlc3Rp
bmF0aW9uLnNldCh0eXBlKTsKLSAgICAgICAgbm9kZS5zZXRDYW5FeGl0KGZhbHNlKTsKKyAgICAg
ICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAg
ICAgICAgIAogICAgIGNhc2UgU3RyQ2F0OgotICAgICAgICBub2RlLnNldENhbkV4aXQoZmFsc2Up
OwotICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFNwZWNTdHJpbmcpOworICAgICAgICBu
b2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKKyAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY1N0
cmluZyk7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAgY2FzZSBOZXdBcnJheToK
LSAgICAgICAgbm9kZS5zZXRDYW5FeGl0KHRydWUpOwotICAgICAgICBmb3JOb2RlKG5vZGVJbmRl
eCkuc2V0KG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUuY29kZU9yaWdpbiktPmFycmF5U3Ry
dWN0dXJlRm9ySW5kZXhpbmdUeXBlRHVyaW5nQWxsb2NhdGlvbihub2RlLmluZGV4aW5nVHlwZSgp
KSk7CisgICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7CisgICAgICAgIGZvck5vZGUobm9k
ZUluZGV4KS5zZXQobV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+Y29kZU9yaWdpbiktPmFy
cmF5U3RydWN0dXJlRm9ySW5kZXhpbmdUeXBlRHVyaW5nQWxsb2NhdGlvbihub2RlLT5pbmRleGlu
Z1R5cGUoKSkpOwogICAgICAgICBtX2hhdmVTdHJ1Y3R1cmVzID0gdHJ1ZTsKICAgICAgICAgYnJl
YWs7CiAgICAgICAgIAogICAgIGNhc2UgTmV3QXJyYXlCdWZmZXI6Ci0gICAgICAgIG5vZGUuc2V0
Q2FuRXhpdCh0cnVlKTsKLSAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChtX2dyYXBoLmds
b2JhbE9iamVjdEZvcihub2RlLmNvZGVPcmlnaW4pLT5hcnJheVN0cnVjdHVyZUZvckluZGV4aW5n
VHlwZUR1cmluZ0FsbG9jYXRpb24obm9kZS5pbmRleGluZ1R5cGUoKSkpOworICAgICAgICBub2Rl
LT5zZXRDYW5FeGl0KHRydWUpOworICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChtX2dyYXBoLmds
b2JhbE9iamVjdEZvcihub2RlLT5jb2RlT3JpZ2luKS0+YXJyYXlTdHJ1Y3R1cmVGb3JJbmRleGlu
Z1R5cGVEdXJpbmdBbGxvY2F0aW9uKG5vZGUtPmluZGV4aW5nVHlwZSgpKSk7CiAgICAgICAgIG1f
aGF2ZVN0cnVjdHVyZXMgPSB0cnVlOwogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgTmV3QXJy
YXlXaXRoU2l6ZToKLSAgICAgICAgbm9kZS5zZXRDYW5FeGl0KHRydWUpOwotICAgICAgICBmb3JO
b2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjSW50MzIpOwotICAgICAgICBmb3JOb2RlKG5v
ZGVJbmRleCkuc2V0KFNwZWNBcnJheSk7CisgICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7
CisgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRlcihTcGVjSW50MzIpOworICAg
ICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjQXJyYXkpOwogICAgICAgICBtX2hhdmVTdHJ1Y3R1
cmVzID0gdHJ1ZTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICBjYXNlIE5ld1Jl
Z2V4cDoKLSAgICAgICAgbm9kZS5zZXRDYW5FeGl0KGZhbHNlKTsKLSAgICAgICAgZm9yTm9kZShu
b2RlSW5kZXgpLnNldChtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLmNvZGVPcmlnaW4pLT5y
ZWdFeHBTdHJ1Y3R1cmUoKSk7CisgICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOworICAg
ICAgICBmb3JOb2RlKG5vZGUpLnNldChtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5jb2Rl
T3JpZ2luKS0+cmVnRXhwU3RydWN0dXJlKCkpOwogICAgICAgICBtX2hhdmVTdHJ1Y3R1cmVzID0g
dHJ1ZTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICBjYXNlIENvbnZlcnRUaGlz
OiB7Ci0gICAgICAgIE5vZGUmIGNoaWxkID0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXTsKLSAgICAg
ICAgQWJzdHJhY3RWYWx1ZSYgc291cmNlID0gZm9yTm9kZShub2RlLmNoaWxkMSgpKTsKLSAgICAg
ICAgQWJzdHJhY3RWYWx1ZSYgZGVzdGluYXRpb24gPSBmb3JOb2RlKG5vZGVJbmRleCk7CisgICAg
ICAgIE5vZGUqIGNoaWxkID0gbm9kZS0+Y2hpbGQxKCkubm9kZSgpOworICAgICAgICBBYnN0cmFj
dFZhbHVlJiBzb3VyY2UgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgQWJzdHJh
Y3RWYWx1ZSYgZGVzdGluYXRpb24gPSBmb3JOb2RlKG5vZGUpOwogICAgICAgICAgICAgCiAgICAg
ICAgIGlmIChpc09iamVjdFNwZWN1bGF0aW9uKHNvdXJjZS5tX3R5cGUpKSB7CiAgICAgICAgICAg
ICAvLyBUaGlzIGlzIHRoZSBzaW1wbGUgY2FzZS4gV2UgYWxyZWFkeSBrbm93IHRoYXQgdGhlIHNv
dXJjZSBpcyBhbgogICAgICAgICAgICAgLy8gb2JqZWN0LCBzbyB0aGVyZSdzIG5vdGhpbmcgdG8g
ZG8uIEkgZG9uJ3QgdGhpbmsgdGhpcyBjYXNlIHdpbGwKICAgICAgICAgICAgIC8vIGJlIGhpdCwg
YnV0IHRoZW4gYWdhaW4sIHlvdSBuZXZlciBrbm93LgogICAgICAgICAgICAgZGVzdGluYXRpb24g
PSBzb3VyY2U7Ci0gICAgICAgICAgICBub2RlLnNldENhbkV4aXQoZmFsc2UpOworICAgICAgICAg
ICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgICAgICBtX2ZvdW5kQ29uc3RhbnRz
ID0gdHJ1ZTsgLy8gVGVsbCB0aGUgY29uc3RhbnQgZm9sZGVyIHRvIHR1cm4gdGhpcyBpbnRvIElk
ZW50aXR5LgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAg
IG5vZGUuc2V0Q2FuRXhpdCh0cnVlKTsKKyAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsK
ICAgICAgICAgCi0gICAgICAgIGlmIChpc090aGVyU3BlY3VsYXRpb24oY2hpbGQucHJlZGljdGlv
bigpKSkgeworICAgICAgICBpZiAoaXNPdGhlclNwZWN1bGF0aW9uKGNoaWxkLT5wcmVkaWN0aW9u
KCkpKSB7CiAgICAgICAgICAgICBzb3VyY2UuZmlsdGVyKFNwZWNPdGhlcik7CiAgICAgICAgICAg
ICBkZXN0aW5hdGlvbi5zZXQoU3BlY09iamVjdE90aGVyKTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBpZiAoaXNPYmplY3RTcGVjdWxhdGlvbihjaGls
ZC5wcmVkaWN0aW9uKCkpKSB7CisgICAgICAgIGlmIChpc09iamVjdFNwZWN1bGF0aW9uKGNoaWxk
LT5wcmVkaWN0aW9uKCkpKSB7CiAgICAgICAgICAgICBzb3VyY2UuZmlsdGVyKFNwZWNPYmplY3RN
YXNrKTsKICAgICAgICAgICAgIGRlc3RpbmF0aW9uID0gc291cmNlOwogICAgICAgICAgICAgYnJl
YWs7CkBAIC0xMzM0LDEwICsxMzUzLDEwIEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1
bnNpZ25lZCBpbmQKICAgICB9CiAKICAgICBjYXNlIENyZWF0ZVRoaXM6IHsKLSAgICAgICAgQWJz
dHJhY3RWYWx1ZSYgc291cmNlID0gZm9yTm9kZShub2RlLmNoaWxkMSgpKTsKLSAgICAgICAgQWJz
dHJhY3RWYWx1ZSYgZGVzdGluYXRpb24gPSBmb3JOb2RlKG5vZGVJbmRleCk7CisgICAgICAgIEFi
c3RyYWN0VmFsdWUmIHNvdXJjZSA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBB
YnN0cmFjdFZhbHVlJiBkZXN0aW5hdGlvbiA9IGZvck5vZGUobm9kZSk7CiAgICAgICAgIAotICAg
ICAgICBub2RlLnNldENhbkV4aXQoIWlzQ2VsbFNwZWN1bGF0aW9uKHNvdXJjZS5tX3R5cGUpKTsK
KyAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCghaXNDZWxsU3BlY3VsYXRpb24oc291cmNlLm1fdHlw
ZSkpOwogICAgICAgICAgICAgCiAgICAgICAgIHNvdXJjZS5maWx0ZXIoU3BlY0Z1bmN0aW9uKTsK
ICAgICAgICAgZGVzdGluYXRpb24uc2V0KFNwZWNGaW5hbE9iamVjdCk7CkBAIC0xMzQ1LDQxICsx
MzY0LDQxIEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICB9
CiAgICAgICAgIAogICAgIGNhc2UgSW5oZXJpdG9ySURXYXRjaHBvaW50OgotICAgICAgICBub2Rl
LnNldENhbkV4aXQodHJ1ZSk7CisgICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7CiAgICAg
ICAgIGJyZWFrOwogCiAgICAgY2FzZSBOZXdPYmplY3Q6Ci0gICAgICAgIG5vZGUuc2V0Q2FuRXhp
dChmYWxzZSk7Ci0gICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQobm9kZS5zdHJ1Y3R1cmUo
KSk7CisgICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOworICAgICAgICBmb3JOb2RlKG5v
ZGUpLnNldChub2RlLT5zdHJ1Y3R1cmUoKSk7CiAgICAgICAgIG1faGF2ZVN0cnVjdHVyZXMgPSB0
cnVlOwogICAgICAgICBicmVhazsKICAgICAgICAgCiAgICAgY2FzZSBDcmVhdGVBY3RpdmF0aW9u
OgotICAgICAgICBub2RlLnNldENhbkV4aXQoZmFsc2UpOwotICAgICAgICBmb3JOb2RlKG5vZGVJ
bmRleCkuc2V0KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3RGb3Iobm9kZS5jb2RlT3JpZ2luKS0+
YWN0aXZhdGlvblN0cnVjdHVyZSgpKTsKKyAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7
CisgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3RGb3Io
bm9kZS0+Y29kZU9yaWdpbiktPmFjdGl2YXRpb25TdHJ1Y3R1cmUoKSk7CiAgICAgICAgIG1faGF2
ZVN0cnVjdHVyZXMgPSB0cnVlOwogICAgICAgICBicmVhazsKICAgICAgICAgCiAgICAgY2FzZSBD
cmVhdGVBcmd1bWVudHM6Ci0gICAgICAgIG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7Ci0gICAgICAg
IGZvck5vZGUobm9kZUluZGV4KS5zZXQobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdEZvcihub2Rl
LmNvZGVPcmlnaW4pLT5hcmd1bWVudHNTdHJ1Y3R1cmUoKSk7CisgICAgICAgIG5vZGUtPnNldENh
bkV4aXQoZmFsc2UpOworICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0Rm9yKG5vZGUtPmNvZGVPcmlnaW4pLT5hcmd1bWVudHNTdHJ1Y3R1cmUoKSk7CiAg
ICAgICAgIG1faGF2ZVN0cnVjdHVyZXMgPSB0cnVlOwogICAgICAgICBicmVhazsKICAgICAgICAg
CiAgICAgY2FzZSBUZWFyT2ZmQWN0aXZhdGlvbjoKICAgICBjYXNlIFRlYXJPZmZBcmd1bWVudHM6
Ci0gICAgICAgIG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7CisgICAgICAgIG5vZGUtPnNldENhbkV4
aXQoZmFsc2UpOwogICAgICAgICAvLyBEb2VzIG5vdGhpbmcgdGhhdCBpcyB1c2VyLXZpc2libGUu
CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBDaGVja0FyZ3VtZW50c05vdENyZWF0ZWQ6CiAg
ICAgICAgIGlmIChpc0VtcHR5U3BlY3VsYXRpb24oCiAgICAgICAgICAgICAgICAgbV92YXJpYWJs
ZXMub3BlcmFuZCgKLSAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5hcmd1bWVudHNSZWdpc3Rl
ckZvcihub2RlLmNvZGVPcmlnaW4pKS5tX3R5cGUpKSB7Ci0gICAgICAgICAgICBub2RlLnNldENh
bkV4aXQoZmFsc2UpOworICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLmFyZ3VtZW50c1JlZ2lz
dGVyRm9yKG5vZGUtPmNvZGVPcmlnaW4pKS5tX3R5cGUpKSB7CisgICAgICAgICAgICBub2RlLT5z
ZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgICAgIG1fZm91bmRDb25zdGFudHMgPSB0cnVlOwog
ICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIG5vZGUuc2V0Q2FuRXhpdCh0cnVlKTsKKyAgICAg
ICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAK
ICAgICBjYXNlIEdldE15QXJndW1lbnRzTGVuZ3RoOgpAQCAtMTM4NywxMTEgKzE0MDYsMTExIEBA
IGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgLy8gdGhl
IGFyZ3VtZW50cyBhIGJpdC4gTm90ZSB0aGF0IHRoaXMgaXMgbm90IHN1ZmZpY2llbnQgdG8gZm9y
Y2UgY29uc3RhbnQgZm9sZGluZwogICAgICAgICAvLyBvZiBHZXRNeUFyZ3VtZW50c0xlbmd0aCwg
YmVjYXVzZSBHZXRNeUFyZ3VtZW50c0xlbmd0aCBpcyBhIGNsb2JiZXJpbmcgb3BlcmF0aW9uLgog
ICAgICAgICAvLyBXZSBwZXJmb3JtIGZ1cnRoZXIgb3B0aW1pemF0aW9ucyBvbiB0aGlzIGxhdGVy
IG9uLgotICAgICAgICBpZiAobm9kZS5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSkKLSAgICAg
ICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoanNOdW1iZXIobm9kZS5jb2RlT3JpZ2luLmlu
bGluZUNhbGxGcmFtZS0+YXJndW1lbnRzLnNpemUoKSAtIDEpKTsKKyAgICAgICAgaWYgKG5vZGUt
PmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKQorICAgICAgICAgICAgZm9yTm9kZShub2RlKS5z
ZXQoanNOdW1iZXIobm9kZS0+Y29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50cy5z
aXplKCkgLSAxKSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4
KS5zZXQoU3BlY0ludDMyKTsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNJbnQz
Mik7CiAgICAgICAgIG5vZGUuc2V0Q2FuRXhpdCgKICAgICAgICAgICAgICFpc0VtcHR5U3BlY3Vs
YXRpb24oCiAgICAgICAgICAgICAgICAgbV92YXJpYWJsZXMub3BlcmFuZCgKLSAgICAgICAgICAg
ICAgICAgICAgbV9ncmFwaC5hcmd1bWVudHNSZWdpc3RlckZvcihub2RlLmNvZGVPcmlnaW4pKS5t
X3R5cGUpKTsKKyAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5hcmd1bWVudHNSZWdpc3RlckZv
cihub2RlLT5jb2RlT3JpZ2luKSkubV90eXBlKSk7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAK
ICAgICBjYXNlIEdldE15QXJndW1lbnRzTGVuZ3RoU2FmZToKLSAgICAgICAgbm9kZS5zZXRDYW5F
eGl0KGZhbHNlKTsKKyAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgIC8v
IFRoaXMgcG90ZW50aWFsbHkgY2xvYmJlcnMgYWxsIHN0cnVjdHVyZXMgaWYgdGhlIGFyZ3VtZW50
cyBvYmplY3QgaGFkIGEgZ2V0dGVyCiAgICAgICAgIC8vIGluc3RhbGxlZCBvbiB0aGUgbGVuZ3Ro
IHByb3BlcnR5LgotICAgICAgICBjbG9iYmVyV29ybGQobm9kZS5jb2RlT3JpZ2luLCBpbmRleElu
QmxvY2spOworICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+Y29kZU9yaWdpbiwgaW5kZXhJbkJs
b2NrKTsKICAgICAgICAgLy8gV2UgY3VycmVudGx5IG1ha2Ugbm8gZ3VhcmFudGVlIGFib3V0IHdo
YXQgdGhpcyByZXR1cm5zIGJlY2F1c2UgaXQgZG9lcyBub3QKICAgICAgICAgLy8gc3BlY3VsYXRl
IHRoYXQgdGhlIGxlbmd0aCBwcm9wZXJ0eSBpcyBhY3R1YWxseSBhIGxlbmd0aC4KLSAgICAgICAg
Zm9yTm9kZShub2RlSW5kZXgpLm1ha2VUb3AoKTsKKyAgICAgICAgZm9yTm9kZShub2RlKS5tYWtl
VG9wKCk7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAKICAgICBjYXNlIEdldE15QXJndW1lbnRC
eVZhbDoKLSAgICAgICAgbm9kZS5zZXRDYW5FeGl0KHRydWUpOworICAgICAgICBub2RlLT5zZXRD
YW5FeGl0KHRydWUpOwogICAgICAgICAvLyBXZSBrbm93IHRoYXQgdGhpcyBleGVjdXRhYmxlIGRv
ZXMgbm90IGVzY2FwZSBpdHMgYXJndW1lbnRzLCBzbyB3ZSBjYW4gb3B0aW1pemUKICAgICAgICAg
Ly8gdGhlIGFyZ3VtZW50cyBhIGJpdC4gTm90ZSB0aGF0IHRoaXMgZW5kcyB1cCBiZWluZyBmdXJ0
aGVyIG9wdGltaXplZCBieSB0aGUKICAgICAgICAgLy8gQXJndW1lbnRzU2ltcGxpZmljYXRpb25Q
aGFzZS4KLSAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY0ludDMyKTsK
LSAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLm1ha2VUb3AoKTsKKyAgICAgICAgZm9yTm9kZShu
b2RlLT5jaGlsZDEoKSkuZmlsdGVyKFNwZWNJbnQzMik7CisgICAgICAgIGZvck5vZGUobm9kZSku
bWFrZVRvcCgpOwogICAgICAgICBicmVhazsKICAgICAgICAgCiAgICAgY2FzZSBHZXRNeUFyZ3Vt
ZW50QnlWYWxTYWZlOgotICAgICAgICBub2RlLnNldENhbkV4aXQodHJ1ZSk7CisgICAgICAgIG5v
ZGUtPnNldENhbkV4aXQodHJ1ZSk7CiAgICAgICAgIC8vIFRoaXMgcG90ZW50aWFsbHkgY2xvYmJl
cnMgYWxsIHN0cnVjdHVyZXMgaWYgdGhlIHByb3BlcnR5IHdlJ3JlIGFjY2Vzc2luZyBoYXMKICAg
ICAgICAgLy8gYSBnZXR0ZXIuIFdlIGRvbid0IHNwZWN1bGF0ZSBhZ2FpbnN0IHRoaXMuCi0gICAg
ICAgIGNsb2JiZXJXb3JsZChub2RlLmNvZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7CisgICAgICAg
IGNsb2JiZXJXb3JsZChub2RlLT5jb2RlT3JpZ2luLCBpbmRleEluQmxvY2spOwogICAgICAgICAv
LyBCdXQgd2UgZG8gc3BlY3VsYXRlIHRoYXQgdGhlIGluZGV4IGlzIGFuIGludGVnZXIuCi0gICAg
ICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNJbnQzMik7CisgICAgICAgIGZv
ck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRlcihTcGVjSW50MzIpOwogICAgICAgICAvLyBBbmQg
dGhlIHJlc3VsdCBpcyB1bmtub3duLgotICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkubWFrZVRv
cCgpOworICAgICAgICBmb3JOb2RlKG5vZGUpLm1ha2VUb3AoKTsKICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIAogICAgIGNhc2UgTmV3RnVuY3Rpb246CiAgICAgY2FzZSBOZXdGdW5jdGlvbkV4cHJl
c3Npb246CiAgICAgY2FzZSBOZXdGdW5jdGlvbk5vQ2hlY2s6Ci0gICAgICAgIG5vZGUuc2V0Q2Fu
RXhpdChmYWxzZSk7Ci0gICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdEZvcihub2RlLmNvZGVPcmlnaW4pLT5mdW5jdGlvblN0cnVjdHVyZSgpKTsK
KyAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CisgICAgICAgIGZvck5vZGUobm9kZSku
c2V0KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3RGb3Iobm9kZS0+Y29kZU9yaWdpbiktPmZ1bmN0
aW9uU3RydWN0dXJlKCkpOwogICAgICAgICBicmVhazsKICAgICAgICAgCiAgICAgY2FzZSBHZXRD
YWxsZWU6Ci0gICAgICAgIG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7Ci0gICAgICAgIGZvck5vZGUo
bm9kZUluZGV4KS5zZXQoU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChm
YWxzZSk7CisgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNGdW5jdGlvbik7CiAgICAgICAg
IGJyZWFrOwogICAgICAgICAKICAgICBjYXNlIFNldENhbGxlZToKICAgICBjYXNlIFNldE15U2Nv
cGU6Ci0gICAgICAgIG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7CisgICAgICAgIG5vZGUtPnNldENh
bkV4aXQoZmFsc2UpOwogICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgIGNhc2UgR2V0
U2NvcGU6IC8vIEZJWE1FOiBXZSBjb3VsZCBnZXQgcmlkIG9mIHRoZXNlIGlmIHdlIGtub3cgdGhh
dCB0aGUgSlNGdW5jdGlvbiBpcyBhIGNvbnN0YW50LiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTA2MjAyCiAgICAgY2FzZSBHZXRNeVNjb3BlOgogICAgIGNhc2UgU2tp
cFRvcFNjb3BlOgotICAgICAgICBub2RlLnNldENhbkV4aXQoZmFsc2UpOwotICAgICAgICBmb3JO
b2RlKG5vZGVJbmRleCkuc2V0KFNwZWNDZWxsT3RoZXIpOworICAgICAgICBub2RlLT5zZXRDYW5F
eGl0KGZhbHNlKTsKKyAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0NlbGxPdGhlcik7CiAg
ICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBTa2lwU2NvcGU6IHsKLSAgICAgICAgbm9kZS5zZXRD
YW5FeGl0KGZhbHNlKTsKLSAgICAgICAgSlNWYWx1ZSBjaGlsZCA9IGZvck5vZGUobm9kZS5jaGls
ZDEoKSkudmFsdWUoKTsKLSAgICAgICAgaWYgKGNoaWxkICYmIHRyeVNldENvbnN0YW50KG5vZGVJ
bmRleCwgSlNWYWx1ZShqc0Nhc3Q8SlNTY29wZSo+KGNoaWxkLmFzQ2VsbCgpKS0+bmV4dCgpKSkp
IHsKKyAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CisgICAgICAgIEpTVmFsdWUgY2hp
bGQgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS52YWx1ZSgpOworICAgICAgICBpZiAoY2hpbGQg
JiYgdHJ5U2V0Q29uc3RhbnQobm9kZSwgSlNWYWx1ZShqc0Nhc3Q8SlNTY29wZSo+KGNoaWxkLmFz
Q2VsbCgpKS0+bmV4dCgpKSkpIHsKICAgICAgICAgICAgIG1fZm91bmRDb25zdGFudHMgPSB0cnVl
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgZm9yTm9kZShub2RlSW5k
ZXgpLnNldChTcGVjQ2VsbE90aGVyKTsKKyAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0Nl
bGxPdGhlcik7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIAogICAgIGNhc2UgR2V0U2NvcGVSZWdp
c3RlcnM6Ci0gICAgICAgIG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7Ci0gICAgICAgIGZvck5vZGUo
bm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNDZWxsKTsKLSAgICAgICAgZm9yTm9kZShub2RlSW5k
ZXgpLmNsZWFyKCk7IC8vIFRoZSByZXN1bHQgaXMgbm90IGEgSlMgdmFsdWUuCisgICAgICAgIG5v
ZGUtPnNldENhbkV4aXQoZmFsc2UpOworICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5m
aWx0ZXIoU3BlY0NlbGwpOworICAgICAgICBmb3JOb2RlKG5vZGUpLmNsZWFyKCk7IC8vIFRoZSBy
ZXN1bHQgaXMgbm90IGEgSlMgdmFsdWUuCiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBHZXRT
Y29wZWRWYXI6Ci0gICAgICAgIG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7Ci0gICAgICAgIGZvck5v
ZGUobm9kZUluZGV4KS5tYWtlVG9wKCk7CisgICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2Up
OworICAgICAgICBmb3JOb2RlKG5vZGUpLm1ha2VUb3AoKTsKICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICAKICAgICBjYXNlIFB1dFNjb3BlZFZhcjoKLSAgICAgICAgbm9kZS5zZXRDYW5FeGl0
KGZhbHNlKTsKLSAgICAgICAgY2xvYmJlckNhcHR1cmVkVmFycyhub2RlLmNvZGVPcmlnaW4pOwor
ICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKKyAgICAgICAgY2xvYmJlckNhcHR1cmVk
VmFycyhub2RlLT5jb2RlT3JpZ2luKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAg
ICBjYXNlIEdldEJ5SWQ6CiAgICAgY2FzZSBHZXRCeUlkRmx1c2g6Ci0gICAgICAgIG5vZGUuc2V0
Q2FuRXhpdCh0cnVlKTsKLSAgICAgICAgaWYgKCFub2RlLnByZWRpY3Rpb24oKSkgeworICAgICAg
ICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOworICAgICAgICBpZiAoIW5vZGUtPnByZWRpY3Rpb24o
KSkgewogICAgICAgICAgICAgbV9pc1ZhbGlkID0gZmFsc2U7CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgfQotICAgICAgICBpZiAoaXNDZWxsU3BlY3VsYXRpb24obV9ncmFwaFtub2RlLmNo
aWxkMSgpXS5wcmVkaWN0aW9uKCkpKSB7Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQx
KCkpLmZpbHRlcihTcGVjQ2VsbCk7CisgICAgICAgIGlmIChpc0NlbGxTcGVjdWxhdGlvbihub2Rl
LT5jaGlsZDEoKS0+cHJlZGljdGlvbigpKSkgeworICAgICAgICAgICAgZm9yTm9kZShub2RlLT5j
aGlsZDEoKSkuZmlsdGVyKFNwZWNDZWxsKTsKIAotICAgICAgICAgICAgaWYgKFN0cnVjdHVyZSog
c3RydWN0dXJlID0gZm9yTm9kZShub2RlLmNoaWxkMSgpKS5iZXN0UHJvdmVuU3RydWN0dXJlKCkp
IHsKKyAgICAgICAgICAgIGlmIChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGZvck5vZGUobm9kZS0+
Y2hpbGQxKCkpLmJlc3RQcm92ZW5TdHJ1Y3R1cmUoKSkgewogICAgICAgICAgICAgICAgIEdldEJ5
SWRTdGF0dXMgc3RhdHVzID0gR2V0QnlJZFN0YXR1czo6Y29tcHV0ZUZvcigKICAgICAgICAgICAg
ICAgICAgICAgbV9ncmFwaC5tX2dsb2JhbERhdGEsIHN0cnVjdHVyZSwKLSAgICAgICAgICAgICAg
ICAgICAgbV9ncmFwaC5tX2NvZGVCbG9jay0+aWRlbnRpZmllcihub2RlLmlkZW50aWZpZXJOdW1i
ZXIoKSkpOworICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLm1fY29kZUJsb2NrLT5pZGVudGlm
aWVyKG5vZGUtPmlkZW50aWZpZXJOdW1iZXIoKSkpOwogICAgICAgICAgICAgICAgIGlmIChzdGF0
dXMuaXNTaW1wbGUoKSkgewogICAgICAgICAgICAgICAgICAgICAvLyBBc3NlcnQgdGhpbmdzIHRo
YXQgd2UgY2FuJ3QgaGFuZGxlIGFuZCB0aGF0IHRoZSBjb21wdXRlRm9yKCkgbWV0aG9kCiAgICAg
ICAgICAgICAgICAgICAgIC8vIGFib3ZlIHdvbid0IGJlIGFibGUgdG8gcmV0dXJuLgpAQCAtMTQ5
OSwyMyArMTUxOCwyMyBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5k
CiAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChzdGF0dXMuY2hhaW4oKS5pc0VtcHR5KCkpOwog
ICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXR1cy5zcGVj
aWZpY1ZhbHVlKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCku
c2V0KHN0YXR1cy5zcGVjaWZpY1ZhbHVlKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgZm9y
Tm9kZShub2RlKS5zZXQoc3RhdHVzLnNwZWNpZmljVmFsdWUoKSk7CiAgICAgICAgICAgICAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5tYWtl
VG9wKCk7Ci0gICAgICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVy
KHN0YXR1cy5zdHJ1Y3R1cmVTZXQoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBmb3JOb2Rl
KG5vZGUpLm1ha2VUb3AoKTsKKyAgICAgICAgICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGls
ZDEoKSkuZmlsdGVyKHN0YXR1cy5zdHJ1Y3R1cmVTZXQoKSk7CiAgICAgICAgICAgICAgICAgICAg
IAogICAgICAgICAgICAgICAgICAgICBtX2ZvdW5kQ29uc3RhbnRzID0gdHJ1ZTsKICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAg
ICAgICB9Ci0gICAgICAgIGNsb2JiZXJXb3JsZChub2RlLmNvZGVPcmlnaW4sIGluZGV4SW5CbG9j
ayk7Ci0gICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5tYWtlVG9wKCk7CisgICAgICAgIGNsb2Ji
ZXJXb3JsZChub2RlLT5jb2RlT3JpZ2luLCBpbmRleEluQmxvY2spOworICAgICAgICBmb3JOb2Rl
KG5vZGUpLm1ha2VUb3AoKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICBjYXNl
IEdldEFycmF5TGVuZ3RoOgotICAgICAgICBub2RlLnNldENhbkV4aXQodHJ1ZSk7IC8vIExpZXMs
IGJ1dCBpdCdzIHRydWUgZm9yIHRoZSBjb21tb24gY2FzZSBvZiBKU0FycmF5LCBzbyBpdCdzIGdv
b2QgZW5vdWdoLgotICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFNwZWNJbnQzMik7Cisg
ICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7IC8vIExpZXMsIGJ1dCBpdCdzIHRydWUgZm9y
IHRoZSBjb21tb24gY2FzZSBvZiBKU0FycmF5LCBzbyBpdCdzIGdvb2QgZW5vdWdoLgorICAgICAg
ICBmb3JOb2RlKG5vZGUpLnNldChTcGVjSW50MzIpOwogICAgICAgICBicmVhazsKICAgICAgICAg
CiAgICAgY2FzZSBDaGVja0V4ZWN1dGFibGU6IHsKQEAgLTE1MjMsMjMgKzE1NDIsMjMgQEAgYm9v
bCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICAvLyBtb3JlIHRo
b3JvdWdobHkuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDYyMDAK
ICAgICAgICAgLy8gRklYTUU6IFdlIGNvdWxkIGVsaW1pbmF0ZSB0aGVzZSBlbnRpcmVseSBpZiB3
ZSBrbm93IHRoZSBleGFjdCB2YWx1ZSB0aGF0IGZsb3dzIGludG8gdGhpcy4KICAgICAgICAgLy8g
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwNjIwMQotICAgICAgICBm
b3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjQ2VsbCk7Ci0gICAgICAgIG5vZGUuc2V0
Q2FuRXhpdCh0cnVlKTsKKyAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDEoKSkuZmlsdGVyKFNw
ZWNDZWxsKTsKKyAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKICAgICAgICAgYnJlYWs7
CiAgICAgfQogCiAgICAgY2FzZSBDaGVja1N0cnVjdHVyZToKICAgICBjYXNlIEZvcndhcmRDaGVj
a1N0cnVjdHVyZTogewogICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGJlIGFibGUgdG8gcHJv
cGFnYXRlIHRoZSBzdHJ1Y3R1cmUgc2V0cyBvZiBjb25zdGFudHMgKGkuZS4gcHJvdG90eXBlcyku
Ci0gICAgICAgIEFic3RyYWN0VmFsdWUmIHZhbHVlID0gZm9yTm9kZShub2RlLmNoaWxkMSgpKTsK
KyAgICAgICAgQWJzdHJhY3RWYWx1ZSYgdmFsdWUgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKTsK
ICAgICAgICAgLy8gSWYgdGhpcyBzdHJ1Y3R1cmUgY2hlY2sgaXMgYXR0ZW1wdGluZyB0byBwcm92
ZSBrbm93bGVkZ2UgYWxyZWFkeSBoZWxkIGluCiAgICAgICAgIC8vIHRoZSBmdXR1cmVQb3NzaWJs
ZVN0cnVjdHVyZSBzZXQgdGhlbiB0aGUgY29uc3RhbnQgZm9sZGluZyBwaGFzZSBzaG91bGQKICAg
ICAgICAgLy8gdHVybiB0aGlzIGludG8gYSB3YXRjaHBvaW50IGluc3RlYWQuCi0gICAgICAgIFN0
cnVjdHVyZVNldCYgc2V0ID0gbm9kZS5zdHJ1Y3R1cmVTZXQoKTsKKyAgICAgICAgU3RydWN0dXJl
U2V0JiBzZXQgPSBub2RlLT5zdHJ1Y3R1cmVTZXQoKTsKICAgICAgICAgaWYgKHZhbHVlLm1fZnV0
dXJlUG9zc2libGVTdHJ1Y3R1cmUuaXNTdWJzZXRPZihzZXQpCiAgICAgICAgICAgICB8fCB2YWx1
ZS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5pc1N1YnNldE9mKHNldCkpCiAgICAgICAgICAgICBt
X2ZvdW5kQ29uc3RhbnRzID0gdHJ1ZTsKLSAgICAgICAgbm9kZS5zZXRDYW5FeGl0KAorICAgICAg
ICBub2RlLT5zZXRDYW5FeGl0KAogICAgICAgICAgICAgIXZhbHVlLm1fY3VycmVudEtub3duU3Ry
dWN0dXJlLmlzU3Vic2V0T2Yoc2V0KQogICAgICAgICAgICAgfHwgIWlzQ2VsbFNwZWN1bGF0aW9u
KHZhbHVlLm1fdHlwZSkpOwogICAgICAgICB2YWx1ZS5maWx0ZXIoc2V0KTsKQEAgLTE1NDksNyAr
MTU2OCw3IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAg
ICAgCiAgICAgY2FzZSBTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludDoKICAgICBjYXNlIEZv
cndhcmRTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludDogewotICAgICAgICBBYnN0cmFjdFZh
bHVlJiB2YWx1ZSA9IGZvck5vZGUobm9kZS5jaGlsZDEoKSk7CisgICAgICAgIEFic3RyYWN0VmFs
dWUmIHZhbHVlID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSk7CiAKICAgICAgICAgLy8gSXQncyBv
bmx5IHZhbGlkIHRvIGlzc3VlIGEgc3RydWN0dXJlIHRyYW5zaXRpb24gd2F0Y2hwb2ludCBpZiB3
ZSBhbHJlYWR5CiAgICAgICAgIC8vIGtub3cgdGhhdCB0aGUgd2F0Y2hwb2ludCBjb3ZlcnMgYSBz
dXBlcnNldCBvZiB0aGUgc3RydWN0dXJlcyBrbm93biB0bwpAQCAtMTU1NywxNTQgKzE1NzYsMTU0
IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgLy8g
Q3VycmVudGx5LCB3ZSBvbmx5IGlzc3VlIHNpbmdsZXRvbiB3YXRjaHBvaW50cyAodGhhdCBjaGVj
ayBvbmUgc3RydWN0dXJlKQogICAgICAgICAvLyBhbmQgb3VyIGZ1dHVyZVBvc3NpYmxlU3RydWN0
dXJlIHNldCBjYW4gb25seSBjb250YWluIHplcm8sIG9uZSwgb3IgYW4KICAgICAgICAgLy8gaW5m
aW5pdHkgb2Ygc3RydWN0dXJlcy4KLSAgICAgICAgQVNTRVJUKHZhbHVlLm1fZnV0dXJlUG9zc2li
bGVTdHJ1Y3R1cmUuaXNTdWJzZXRPZihTdHJ1Y3R1cmVTZXQobm9kZS5zdHJ1Y3R1cmUoKSkpKTsK
KyAgICAgICAgQVNTRVJUKHZhbHVlLm1fZnV0dXJlUG9zc2libGVTdHJ1Y3R1cmUuaXNTdWJzZXRP
ZihTdHJ1Y3R1cmVTZXQobm9kZS0+c3RydWN0dXJlKCkpKSk7CiAgICAgICAgIAogICAgICAgICBB
U1NFUlQodmFsdWUuaXNDbGVhcigpIHx8IGlzQ2VsbFNwZWN1bGF0aW9uKHZhbHVlLm1fdHlwZSkp
OyAvLyBWYWx1ZSBjb3VsZCBiZSBjbGVhciBpZiB3ZSd2ZSBwcm92ZW4gbXVzdC1leGl0IGR1ZSB0
byBhIHNwZWN1bGF0aW9uIHN0YXRpY2FsbHkga25vd24gdG8gYmUgYmFkLgotICAgICAgICB2YWx1
ZS5maWx0ZXIobm9kZS5zdHJ1Y3R1cmUoKSk7CisgICAgICAgIHZhbHVlLmZpbHRlcihub2RlLT5z
dHJ1Y3R1cmUoKSk7CiAgICAgICAgIG1faGF2ZVN0cnVjdHVyZXMgPSB0cnVlOwotICAgICAgICBu
b2RlLnNldENhbkV4aXQodHJ1ZSk7CisgICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7CiAg
ICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgICAgIAogICAgIGNhc2UgUHV0U3RydWN0dXJl
OgogICAgIGNhc2UgUGhhbnRvbVB1dFN0cnVjdHVyZToKLSAgICAgICAgbm9kZS5zZXRDYW5FeGl0
KGZhbHNlKTsKLSAgICAgICAgaWYgKCFmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fY3VycmVudEtu
b3duU3RydWN0dXJlLmlzQ2xlYXIoKSkgeworICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNl
KTsKKyAgICAgICAgaWYgKCFmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX2N1cnJlbnRLbm93blN0
cnVjdHVyZS5pc0NsZWFyKCkpIHsKICAgICAgICAgICAgIGNsb2JiZXJTdHJ1Y3R1cmVzKGluZGV4
SW5CbG9jayk7Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLnNldChub2RlLnN0
cnVjdHVyZVRyYW5zaXRpb25EYXRhKCkubmV3U3RydWN0dXJlKTsKKyAgICAgICAgICAgIGZvck5v
ZGUobm9kZS0+Y2hpbGQxKCkpLnNldChub2RlLT5zdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSgpLm5l
d1N0cnVjdHVyZSk7CiAgICAgICAgICAgICBtX2hhdmVTdHJ1Y3R1cmVzID0gdHJ1ZTsKICAgICAg
ICAgfQogICAgICAgICBicmVhazsKICAgICBjYXNlIEdldEJ1dHRlcmZseToKICAgICBjYXNlIEFs
bG9jYXRlUHJvcGVydHlTdG9yYWdlOgogICAgIGNhc2UgUmVhbGxvY2F0ZVByb3BlcnR5U3RvcmFn
ZToKLSAgICAgICAgbm9kZS5zZXRDYW5FeGl0KCFpc0NlbGxTcGVjdWxhdGlvbihmb3JOb2RlKG5v
ZGUuY2hpbGQxKCkpLm1fdHlwZSkpOwotICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZp
bHRlcihTcGVjQ2VsbCk7Ci0gICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5jbGVhcigpOyAvLyBU
aGUgcmVzdWx0IGlzIG5vdCBhIEpTIHZhbHVlLgorICAgICAgICBub2RlLT5zZXRDYW5FeGl0KCFp
c0NlbGxTcGVjdWxhdGlvbihmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX3R5cGUpKTsKKyAgICAg
ICAgZm9yTm9kZShub2RlLT5jaGlsZDEoKSkuZmlsdGVyKFNwZWNDZWxsKTsKKyAgICAgICAgZm9y
Tm9kZShub2RlKS5jbGVhcigpOyAvLyBUaGUgcmVzdWx0IGlzIG5vdCBhIEpTIHZhbHVlLgogICAg
ICAgICBicmVhazsKICAgICBjYXNlIENoZWNrQXJyYXk6IHsKLSAgICAgICAgaWYgKG5vZGUuYXJy
YXlNb2RlKCkuYWxyZWFkeUNoZWNrZWQobV9ncmFwaCwgbm9kZSwgZm9yTm9kZShub2RlLmNoaWxk
MSgpKSkpIHsKKyAgICAgICAgaWYgKG5vZGUtPmFycmF5TW9kZSgpLmFscmVhZHlDaGVja2VkKG1f
Z3JhcGgsIG5vZGUsIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpKSkgewogICAgICAgICAgICAgbV9m
b3VuZENvbnN0YW50cyA9IHRydWU7Ci0gICAgICAgICAgICBub2RlLnNldENhbkV4aXQoZmFsc2Up
OworICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgfQotICAgICAgICBub2RlLnNldENhbkV4aXQodHJ1ZSk7IC8vIExpZXMsIGJ1
dCB0aGlzIGlzIGZvbGxvd2VkIGJ5IG9wZXJhdGlvbnMgKGxpa2UgR2V0QnlWYWwpIHRoYXQgYWx3
YXlzIGV4aXQsIHNvIHRoZXJlIGlzIG5vIHBvaW50IGluIHVzIHRyeWluZyB0byBiZSBjbGV2ZXIg
aGVyZS4KLSAgICAgICAgc3dpdGNoIChub2RlLmFycmF5TW9kZSgpLnR5cGUoKSkgeworICAgICAg
ICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOyAvLyBMaWVzLCBidXQgdGhpcyBpcyBmb2xsb3dlZCBi
eSBvcGVyYXRpb25zIChsaWtlIEdldEJ5VmFsKSB0aGF0IGFsd2F5cyBleGl0LCBzbyB0aGVyZSBp
cyBubyBwb2ludCBpbiB1cyB0cnlpbmcgdG8gYmUgY2xldmVyIGhlcmUuCisgICAgICAgIHN3aXRj
aCAobm9kZS0+YXJyYXlNb2RlKCkudHlwZSgpKSB7CiAgICAgICAgIGNhc2UgQXJyYXk6OlN0cmlu
ZzoKLSAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNTdHJpbmcp
OworICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDEoKSkuZmlsdGVyKFNwZWNTdHJpbmcp
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OkludDMyOgogICAgICAg
ICBjYXNlIEFycmF5OjpEb3VibGU6CiAgICAgICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3VvdXM6CiAg
ICAgICAgIGNhc2UgQXJyYXk6OkFycmF5U3RvcmFnZToKICAgICAgICAgY2FzZSBBcnJheTo6U2xv
d1B1dEFycmF5U3RvcmFnZToKLSAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmls
dGVyKFNwZWNDZWxsKTsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRl
cihTcGVjQ2VsbCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6QXJn
dW1lbnRzOgotICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY0Fy
Z3VtZW50cyk7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5maWx0ZXIoU3Bl
Y0FyZ3VtZW50cyk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6SW50
OEFycmF5OgotICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY0lu
dDhBcnJheSk7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5maWx0ZXIoU3Bl
Y0ludDhBcnJheSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6SW50
MTZBcnJheToKLSAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNJ
bnQxNkFycmF5KTsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRlcihT
cGVjSW50MTZBcnJheSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6
SW50MzJBcnJheToKLSAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNw
ZWNJbnQzMkFycmF5KTsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRl
cihTcGVjSW50MzJBcnJheSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBBcnJh
eTo6VWludDhBcnJheToKLSAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVy
KFNwZWNVaW50OEFycmF5KTsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZp
bHRlcihTcGVjVWludDhBcnJheSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBB
cnJheTo6VWludDhDbGFtcGVkQXJyYXk6Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQx
KCkpLmZpbHRlcihTcGVjVWludDhDbGFtcGVkQXJyYXkpOworICAgICAgICAgICAgZm9yTm9kZShu
b2RlLT5jaGlsZDEoKSkuZmlsdGVyKFNwZWNVaW50OENsYW1wZWRBcnJheSk7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6VWludDE2QXJyYXk6Ci0gICAgICAgICAgICBm
b3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjVWludDE2QXJyYXkpOworICAgICAgICAg
ICAgZm9yTm9kZShub2RlLT5jaGlsZDEoKSkuZmlsdGVyKFNwZWNVaW50MTZBcnJheSk7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6VWludDMyQXJyYXk6Ci0gICAgICAg
ICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjVWludDMyQXJyYXkpOworICAg
ICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDEoKSkuZmlsdGVyKFNwZWNVaW50MzJBcnJheSk7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6RmxvYXQzMkFycmF5Ogot
ICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY0Zsb2F0MzJBcnJh
eSk7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5maWx0ZXIoU3BlY0Zsb2F0
MzJBcnJheSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6RmxvYXQ2
NEFycmF5OgotICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY0Zs
b2F0NjRBcnJheSk7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5maWx0ZXIo
U3BlY0Zsb2F0NjRBcnJheSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgZGVmYXVsdDoK
ICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQotICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlckFy
cmF5TW9kZXMobm9kZS5hcnJheU1vZGUoKS5hcnJheU1vZGVzVGhhdFBhc3NGaWx0ZXJpbmcoKSk7
CisgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRlckFycmF5TW9kZXMobm9kZS0+
YXJyYXlNb2RlKCkuYXJyYXlNb2Rlc1RoYXRQYXNzRmlsdGVyaW5nKCkpOwogICAgICAgICBtX2hh
dmVTdHJ1Y3R1cmVzID0gdHJ1ZTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGNhc2UgQXJy
YXlpZnk6IHsKLSAgICAgICAgaWYgKG5vZGUuYXJyYXlNb2RlKCkuYWxyZWFkeUNoZWNrZWQobV9n
cmFwaCwgbm9kZSwgZm9yTm9kZShub2RlLmNoaWxkMSgpKSkpIHsKKyAgICAgICAgaWYgKG5vZGUt
PmFycmF5TW9kZSgpLmFscmVhZHlDaGVja2VkKG1fZ3JhcGgsIG5vZGUsIGZvck5vZGUobm9kZS0+
Y2hpbGQxKCkpKSkgewogICAgICAgICAgICAgbV9mb3VuZENvbnN0YW50cyA9IHRydWU7Ci0gICAg
ICAgICAgICBub2RlLnNldENhbkV4aXQoZmFsc2UpOworICAgICAgICAgICAgbm9kZS0+c2V0Q2Fu
RXhpdChmYWxzZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICBBU1NF
UlQobm9kZS5hcnJheU1vZGUoKS5jb252ZXJzaW9uKCkgPT0gQXJyYXk6OkNvbnZlcnQKLSAgICAg
ICAgICAgIHx8IG5vZGUuYXJyYXlNb2RlKCkuY29udmVyc2lvbigpID09IEFycmF5OjpSYWdlQ29u
dmVydCk7Ci0gICAgICAgIG5vZGUuc2V0Q2FuRXhpdCh0cnVlKTsKLSAgICAgICAgZm9yTm9kZShu
b2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY0NlbGwpOwotICAgICAgICBpZiAobm9kZS5jaGlsZDIo
KSkKLSAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7
CisgICAgICAgIEFTU0VSVChub2RlLT5hcnJheU1vZGUoKS5jb252ZXJzaW9uKCkgPT0gQXJyYXk6
OkNvbnZlcnQKKyAgICAgICAgICAgIHx8IG5vZGUtPmFycmF5TW9kZSgpLmNvbnZlcnNpb24oKSA9
PSBBcnJheTo6UmFnZUNvbnZlcnQpOworICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOwor
ICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5maWx0ZXIoU3BlY0NlbGwpOworICAgICAg
ICBpZiAobm9kZS0+Y2hpbGQyKCkpCisgICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMigp
KS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAgY2xvYmJlclN0cnVjdHVyZXMoaW5kZXhJbkJs
b2NrKTsKLSAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXJBcnJheU1vZGVzKG5v
ZGUuYXJyYXlNb2RlKCkuYXJyYXlNb2Rlc1RoYXRQYXNzRmlsdGVyaW5nKCkpOworICAgICAgICBm
b3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5maWx0ZXJBcnJheU1vZGVzKG5vZGUtPmFycmF5TW9kZSgp
LmFycmF5TW9kZXNUaGF0UGFzc0ZpbHRlcmluZygpKTsKICAgICAgICAgbV9oYXZlU3RydWN0dXJl
cyA9IHRydWU7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBjYXNlIEFycmF5aWZ5VG9TdHJ1
Y3R1cmU6IHsKLSAgICAgICAgQWJzdHJhY3RWYWx1ZSYgdmFsdWUgPSBmb3JOb2RlKG5vZGUuY2hp
bGQxKCkpOwotICAgICAgICBTdHJ1Y3R1cmVTZXQgc2V0ID0gbm9kZS5zdHJ1Y3R1cmUoKTsKKyAg
ICAgICAgQWJzdHJhY3RWYWx1ZSYgdmFsdWUgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKTsKKyAg
ICAgICAgU3RydWN0dXJlU2V0IHNldCA9IG5vZGUtPnN0cnVjdHVyZSgpOwogICAgICAgICBpZiAo
dmFsdWUubV9mdXR1cmVQb3NzaWJsZVN0cnVjdHVyZS5pc1N1YnNldE9mKHNldCkKICAgICAgICAg
ICAgIHx8IHZhbHVlLm1fY3VycmVudEtub3duU3RydWN0dXJlLmlzU3Vic2V0T2Yoc2V0KSkKICAg
ICAgICAgICAgIG1fZm91bmRDb25zdGFudHMgPSB0cnVlOwotICAgICAgICBub2RlLnNldENhbkV4
aXQodHJ1ZSk7Ci0gICAgICAgIGlmIChub2RlLmNoaWxkMigpKQotICAgICAgICAgICAgZm9yTm9k
ZShub2RlLmNoaWxkMigpKS5maWx0ZXIoU3BlY0ludDMyKTsKKyAgICAgICAgbm9kZS0+c2V0Q2Fu
RXhpdCh0cnVlKTsKKyAgICAgICAgaWYgKG5vZGUtPmNoaWxkMigpKQorICAgICAgICAgICAgZm9y
Tm9kZShub2RlLT5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7CiAgICAgICAgIGNsb2JiZXJT
dHJ1Y3R1cmVzKGluZGV4SW5CbG9jayk7CiAgICAgICAgIHZhbHVlLmZpbHRlcihzZXQpOwogICAg
ICAgICBtX2hhdmVTdHJ1Y3R1cmVzID0gdHJ1ZTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAg
IGNhc2UgR2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZTogewotICAgICAgICBub2RlLnNldENhbkV4
aXQoZmFsc2UpOwotICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuY2xlYXIoKTsKKyAgICAgICAg
bm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CisgICAgICAgIGZvck5vZGUobm9kZSkuY2xlYXIoKTsK
ICAgICAgICAgYnJlYWs7IAogICAgIH0KICAgICBjYXNlIEdldEJ5T2Zmc2V0OgotICAgICAgICBp
ZiAoIW1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0uaGFzU3RvcmFnZVJlc3VsdCgpKSB7Ci0gICAgICAg
ICAgICBub2RlLnNldENhbkV4aXQoIWlzQ2VsbFNwZWN1bGF0aW9uKGZvck5vZGUobm9kZS5jaGls
ZDEoKSkubV90eXBlKSk7Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRl
cihTcGVjQ2VsbCk7CisgICAgICAgIGlmICghbm9kZS0+Y2hpbGQxKCktPmhhc1N0b3JhZ2VSZXN1
bHQoKSkgeworICAgICAgICAgICAgbm9kZS5zZXRDYW5FeGl0KCFpc0NlbGxTcGVjdWxhdGlvbihm
b3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX3R5cGUpKTsKKyAgICAgICAgICAgIGZvck5vZGUobm9k
ZS0+Y2hpbGQxKCkpLmZpbHRlcihTcGVjQ2VsbCk7CiAgICAgICAgIH0KLSAgICAgICAgZm9yTm9k
ZShub2RlSW5kZXgpLm1ha2VUb3AoKTsKKyAgICAgICAgZm9yTm9kZShub2RlKS5tYWtlVG9wKCk7
CiAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAgY2FzZSBQdXRCeU9mZnNldDogewog
ICAgICAgICBib29sIGNhbkV4aXQgPSBmYWxzZTsKLSAgICAgICAgaWYgKCFtX2dyYXBoW25vZGUu
Y2hpbGQxKCldLmhhc1N0b3JhZ2VSZXN1bHQoKSkgewotICAgICAgICAgICAgY2FuRXhpdCB8PSAh
aXNDZWxsU3BlY3VsYXRpb24oZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpOwotICAgICAg
ICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY0NlbGwpOwotICAgICAgICB9
Ci0gICAgICAgIGNhbkV4aXQgfD0gIWlzQ2VsbFNwZWN1bGF0aW9uKGZvck5vZGUobm9kZS5jaGls
ZDIoKSkubV90eXBlKTsKLSAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMigpKS5maWx0ZXIoU3Bl
Y0NlbGwpOwotICAgICAgICBub2RlLnNldENhbkV4aXQoY2FuRXhpdCk7CisgICAgICAgIGlmICgh
bm9kZS0+Y2hpbGQxKCktPmhhc1N0b3JhZ2VSZXN1bHQoKSkgeworICAgICAgICAgICAgY2FuRXhp
dCB8PSAhaXNDZWxsU3BlY3VsYXRpb24oZm9yTm9kZShub2RlLT5jaGlsZDEoKSkubV90eXBlKTsK
KyAgICAgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRlcihTcGVjQ2VsbCk7Cisg
ICAgICAgIH0KKyAgICAgICAgY2FuRXhpdCB8PSAhaXNDZWxsU3BlY3VsYXRpb24oZm9yTm9kZShu
b2RlLT5jaGlsZDIoKSkubV90eXBlKTsKKyAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDIoKSku
ZmlsdGVyKFNwZWNDZWxsKTsKKyAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChjYW5FeGl0KTsKICAg
ICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAgICAgCiAgICAgY2FzZSBDaGVja0Z1bmN0aW9u
OiB7Ci0gICAgICAgIEpTVmFsdWUgdmFsdWUgPSBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLnZhbHVl
KCk7Ci0gICAgICAgIGlmICh2YWx1ZSA9PSBub2RlLmZ1bmN0aW9uKCkpIHsKKyAgICAgICAgSlNW
YWx1ZSB2YWx1ZSA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLnZhbHVlKCk7CisgICAgICAgIGlm
ICh2YWx1ZSA9PSBub2RlLT5mdW5jdGlvbigpKSB7CiAgICAgICAgICAgICBtX2ZvdW5kQ29uc3Rh
bnRzID0gdHJ1ZTsKICAgICAgICAgICAgIEFTU0VSVCh2YWx1ZSk7Ci0gICAgICAgICAgICBub2Rl
LnNldENhbkV4aXQoZmFsc2UpOworICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgbm9kZS5z
ZXRDYW5FeGl0KHRydWUpOyAvLyBMaWVzISBXZSBjYW4gZG8gYmV0dGVyLgotICAgICAgICBpZiAo
IWZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyQnlWYWx1ZShub2RlLmZ1bmN0aW9uKCkpKSB7
CisgICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7IC8vIExpZXMhIFdlIGNhbiBkbyBiZXR0
ZXIuCisgICAgICAgIGlmICghZm9yTm9kZShub2RlLT5jaGlsZDEoKSkuZmlsdGVyQnlWYWx1ZShu
b2RlLT5mdW5jdGlvbigpKSkgewogICAgICAgICAgICAgbV9pc1ZhbGlkID0gZmFsc2U7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtMTcxMyw2NyArMTczMiw2OSBAQCBib29sIEFi
c3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgIAogICAgIGNhc2UgUHV0
QnlJZDoKICAgICBjYXNlIFB1dEJ5SWREaXJlY3Q6Ci0gICAgICAgIG5vZGUuc2V0Q2FuRXhpdCh0
cnVlKTsKLSAgICAgICAgaWYgKFN0cnVjdHVyZSogc3RydWN0dXJlID0gZm9yTm9kZShub2RlLmNo
aWxkMSgpKS5iZXN0UHJvdmVuU3RydWN0dXJlKCkpIHsKKyAgICAgICAgbm9kZS0+c2V0Q2FuRXhp
dCh0cnVlKTsKKyAgICAgICAgaWYgKFN0cnVjdHVyZSogc3RydWN0dXJlID0gZm9yTm9kZShub2Rl
LT5jaGlsZDEoKSkuYmVzdFByb3ZlblN0cnVjdHVyZSgpKSB7CiAgICAgICAgICAgICBQdXRCeUlk
U3RhdHVzIHN0YXR1cyA9IFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IoCiAgICAgICAgICAgICAg
ICAgbV9ncmFwaC5tX2dsb2JhbERhdGEsCi0gICAgICAgICAgICAgICAgbV9ncmFwaC5nbG9iYWxP
YmplY3RGb3Iobm9kZS5jb2RlT3JpZ2luKSwKKyAgICAgICAgICAgICAgICBtX2dyYXBoLmdsb2Jh
bE9iamVjdEZvcihub2RlLT5jb2RlT3JpZ2luKSwKICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUs
Ci0gICAgICAgICAgICAgICAgbV9ncmFwaC5tX2NvZGVCbG9jay0+aWRlbnRpZmllcihub2RlLmlk
ZW50aWZpZXJOdW1iZXIoKSksCi0gICAgICAgICAgICAgICAgbm9kZS5vcCgpID09IFB1dEJ5SWRE
aXJlY3QpOworICAgICAgICAgICAgICAgIG1fZ3JhcGgubV9jb2RlQmxvY2stPmlkZW50aWZpZXIo
bm9kZS0+aWRlbnRpZmllck51bWJlcigpKSwKKyAgICAgICAgICAgICAgICBub2RlLT5vcCgpID09
IFB1dEJ5SWREaXJlY3QpOwogICAgICAgICAgICAgaWYgKHN0YXR1cy5pc1NpbXBsZVJlcGxhY2Uo
KSkgewotICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKHN0cnVj
dHVyZSk7CisgICAgICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDEoKSkuZmlsdGVyKHN0
cnVjdHVyZSk7CiAgICAgICAgICAgICAgICAgbV9mb3VuZENvbnN0YW50cyA9IHRydWU7CiAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoc3RhdHVz
LmlzU2ltcGxlVHJhbnNpdGlvbigpKSB7CiAgICAgICAgICAgICAgICAgY2xvYmJlclN0cnVjdHVy
ZXMoaW5kZXhJbkJsb2NrKTsKLSAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkp
LnNldChzdGF0dXMubmV3U3RydWN0dXJlKCkpOworICAgICAgICAgICAgICAgIGZvck5vZGUobm9k
ZS0+Y2hpbGQxKCkpLnNldChzdGF0dXMubmV3U3RydWN0dXJlKCkpOwogICAgICAgICAgICAgICAg
IG1faGF2ZVN0cnVjdHVyZXMgPSB0cnVlOwogICAgICAgICAgICAgICAgIG1fZm91bmRDb25zdGFu
dHMgPSB0cnVlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAg
ICB9Ci0gICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNDZWxsKTsKLSAg
ICAgICAgY2xvYmJlcldvcmxkKG5vZGUuY29kZU9yaWdpbiwgaW5kZXhJbkJsb2NrKTsKKyAgICAg
ICAgZm9yTm9kZShub2RlLT5jaGlsZDEoKSkuZmlsdGVyKFNwZWNDZWxsKTsKKyAgICAgICAgY2xv
YmJlcldvcmxkKG5vZGUtPmNvZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7CiAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgCiAgICAgY2FzZSBHZXRHbG9iYWxWYXI6Ci0gICAgICAgIG5vZGUuc2V0
Q2FuRXhpdChmYWxzZSk7Ci0gICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5tYWtlVG9wKCk7Cisg
ICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOworICAgICAgICBmb3JOb2RlKG5vZGUpLm1h
a2VUb3AoKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgIAogICAgIGNhc2UgR2xvYmFsVmFyV2F0
Y2hwb2ludDoKLSAgICAgICAgbm9kZS5zZXRDYW5FeGl0KHRydWUpOworICAgICAgICBub2RlLT5z
ZXRDYW5FeGl0KHRydWUpOwogICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgIGNhc2Ug
UHV0R2xvYmFsVmFyOgogICAgIGNhc2UgUHV0R2xvYmFsVmFyQ2hlY2s6Ci0gICAgICAgIG5vZGUu
c2V0Q2FuRXhpdChmYWxzZSk7CisgICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwogICAg
ICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgIGNhc2UgQ2hlY2tIYXNJbnN0YW5jZToKLSAg
ICAgICAgbm9kZS5zZXRDYW5FeGl0KHRydWUpOwotICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQx
KCkpLmZpbHRlcihTcGVjQ2VsbCk7CisgICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7Cisg
ICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRlcihTcGVjQ2VsbCk7CiAgICAgICAg
IC8vIFNhZGx5LCB3ZSBkb24ndCBwcm9wYWdhdGUgdGhlIGZhY3QgdGhhdCB3ZSd2ZSBkb25lIENo
ZWNrSGFzSW5zdGFuY2UKICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICBjYXNlIElu
c3RhbmNlT2Y6Ci0gICAgICAgIG5vZGUuc2V0Q2FuRXhpdCh0cnVlKTsKKyAgICAgICAgbm9kZS0+
c2V0Q2FuRXhpdCh0cnVlKTsKICAgICAgICAgLy8gQWdhaW4sIHNhZGx5LCB3ZSBkb24ndCBwcm9w
YWdhdGUgdGhlIGZhY3QgdGhhdCB3ZSd2ZSBkb25lIEluc3RhbmNlT2YKLSAgICAgICAgaWYgKCEo
bV9ncmFwaFtub2RlLmNoaWxkMSgpXS5wcmVkaWN0aW9uKCkgJiB+U3BlY0NlbGwpICYmICEoZm9y
Tm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUgJiB+U3BlY0NlbGwpKQotICAgICAgICAgICAgZm9y
Tm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY0NlbGwpOwotICAgICAgICBmb3JOb2RlKG5v
ZGUuY2hpbGQyKCkpLmZpbHRlcihTcGVjQ2VsbCk7Ci0gICAgICAgIGZvck5vZGUobm9kZUluZGV4
KS5zZXQoU3BlY0Jvb2xlYW4pOworICAgICAgICAvLyBGSVhNRTogVGhpcyBhcHBlYXJzIGJyb2tl
bjogQ2hlY2tIYXNJbnN0YW5jZSBhbHJlYWR5IGRvZXMgYW4gdW5jb25kaXRpb25hbCBjZWxsCisg
ICAgICAgIC8vIGNoZWNrLiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTA3NDc5CisgICAgICAgIGlmICghKG5vZGUtPmNoaWxkMSgpLT5wcmVkaWN0aW9uKCkgJiB+U3Bl
Y0NlbGwpICYmICEoZm9yTm9kZShub2RlLT5jaGlsZDEoKSkubV90eXBlICYgflNwZWNDZWxsKSkK
KyAgICAgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRlcihTcGVjQ2VsbCk7Cisg
ICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQyKCkpLmZpbHRlcihTcGVjQ2VsbCk7CisgICAgICAg
IGZvck5vZGUobm9kZSkuc2V0KFNwZWNCb29sZWFuKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICAKICAgICBjYXNlIFBoaToKICAgICBjYXNlIEZsdXNoOgotICAgICAgICBub2RlLnNldENh
bkV4aXQoZmFsc2UpOworICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICAKICAgICBjYXNlIEJyZWFrcG9pbnQ6Ci0gICAgICAgIG5vZGUu
c2V0Q2FuRXhpdChmYWxzZSk7CisgICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwogICAg
ICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgIGNhc2UgQ2FsbDoKQEAgLTE3ODIsMTggKzE4
MDMsMTggQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgIGNh
c2UgUmVzb2x2ZUJhc2U6CiAgICAgY2FzZSBSZXNvbHZlQmFzZVN0cmljdFB1dDoKICAgICBjYXNl
IFJlc29sdmVHbG9iYWw6Ci0gICAgICAgIG5vZGUuc2V0Q2FuRXhpdCh0cnVlKTsKLSAgICAgICAg
Y2xvYmJlcldvcmxkKG5vZGUuY29kZU9yaWdpbiwgaW5kZXhJbkJsb2NrKTsKLSAgICAgICAgZm9y
Tm9kZShub2RlSW5kZXgpLm1ha2VUb3AoKTsKKyAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVl
KTsKKyAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUtPmNvZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7
CisgICAgICAgIGZvck5vZGUobm9kZSkubWFrZVRvcCgpOwogICAgICAgICBicmVhazsKIAogICAg
IGNhc2UgR2FyYmFnZVZhbHVlOgotICAgICAgICBjbG9iYmVyV29ybGQobm9kZS5jb2RlT3JpZ2lu
LCBpbmRleEluQmxvY2spOwotICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkubWFrZVRvcCgpOwor
ICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+Y29kZU9yaWdpbiwgaW5kZXhJbkJsb2NrKTsKKyAg
ICAgICAgZm9yTm9kZShub2RlKS5tYWtlVG9wKCk7CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2Fz
ZSBGb3JjZU9TUkV4aXQ6Ci0gICAgICAgIG5vZGUuc2V0Q2FuRXhpdCh0cnVlKTsKKyAgICAgICAg
bm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKICAgICAgICAgbV9pc1ZhbGlkID0gZmFsc2U7CiAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgCkBAIC0xODAxLDcgKzE4MjIsNyBAQCBib29sIEFic3Ry
YWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgY2FzZSBJbmxpbmVTdGFydDoKICAg
ICBjYXNlIE5vcDoKICAgICBjYXNlIENvdW50RXhlY3V0aW9uOgotICAgICAgICBub2RlLnNldENh
bkV4aXQoZmFsc2UpOworICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAg
YnJlYWs7CiAgICAgICAgIAogICAgIGNhc2UgTGFzdE5vZGVUeXBlOgpAQCAtMTg1NCwxNSArMTg3
NSwxNCBAQCBpbmxpbmUgdm9pZCBBYnN0cmFjdFN0YXRlOjpjbG9iYmVyU3RydWN0CiAgICAgbV9k
aWRDbG9iYmVyID0gdHJ1ZTsKIH0KIAotaW5saW5lIGJvb2wgQWJzdHJhY3RTdGF0ZTo6bWVyZ2VT
dGF0ZUF0VGFpbChBYnN0cmFjdFZhbHVlJiBkZXN0aW5hdGlvbiwgQWJzdHJhY3RWYWx1ZSYgaW5W
YXJpYWJsZSwgTm9kZUluZGV4IG5vZGVJbmRleCkKK2lubGluZSBib29sIEFic3RyYWN0U3RhdGU6
Om1lcmdlU3RhdGVBdFRhaWwoQWJzdHJhY3RWYWx1ZSYgZGVzdGluYXRpb24sIEFic3RyYWN0VmFs
dWUmIGluVmFyaWFibGUsIE5vZGUqIG5vZGUpCiB7Ci0gICAgaWYgKG5vZGVJbmRleCA9PSBOb05v
ZGUpCisgICAgaWYgKCFub2RlKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIAogICAg
IEFic3RyYWN0VmFsdWUgc291cmNlOwogICAgIAotICAgIE5vZGUmIHRhaWxOb2RlID0gbV9ncmFw
aFtub2RlSW5kZXhdOwotICAgIGlmICh0YWlsTm9kZS52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+aXND
YXB0dXJlZCgpKSB7CisgICAgaWYgKG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5pc0NhcHR1
cmVkKCkpIHsKICAgICAgICAgLy8gSWYgaXQncyBjYXB0dXJlZCB0aGVuIHdlIGtub3cgdGhhdCB3
aGF0ZXZlciB2YWx1ZSB3YXMgc3RvcmVkIGludG8gdGhlIHZhcmlhYmxlIGxhc3QgaXMgdGhlCiAg
ICAgICAgIC8vIG9uZSB3ZSBjYXJlIGFib3V0LiBUaGlzIGlzIHRydWUgZXZlbiBpZiB0aGUgdmFy
aWFibGUgYXQgdGFpbCBpcyBkZWFkLCB3aGljaCBtaWdodCBoYXBwZW4gaWYKICAgICAgICAgLy8g
dGhlIGxhc3QgdGhpbmcgd2UgZGlkIHRvIHRoZSB2YXJpYWJsZSB3YXMgYSBHZXRMb2NhbCBhbmQg
dGhlbiBlbmRlZCB1cCBub3cgdXNpbmcgdGhlCkBAIC0xODc1LDI2ICsxODk1LDI1IEBAIGlubGlu
ZSBib29sIEFic3RyYWN0U3RhdGU6Om1lcmdlU3RhdGVBdFQKICAgICAgICAgZGF0YUxvZ0YoIiBm
cm9tIGxhc3QgYWNjZXNzIGR1ZSB0byBjYXB0dXJlZCB2YXJpYWJsZS5cbiIpOwogI2VuZGlmCiAg
ICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKCF0YWlsTm9kZS5zaG91bGRHZW5lcmF0ZSgpKSB7Cisg
ICAgICAgIGlmICghbm9kZS0+c2hvdWxkR2VuZXJhdGUoKSkgewogICAgICAgICAgICAgLy8gSWYg
dGhlIG5vZGUgYXQgdGFpbCBpcyBhIEdldExvY2FsIHRoYXQgaXMgZGVhZCwgdGhlbiBza2lwIGl0
IHRvIGdldCB0byB0aGUgUGhpLgogICAgICAgICAgICAgLy8gVGhlIFBoaSBtYXkgYmUgbGl2ZS4K
LSAgICAgICAgICAgIGlmICh0YWlsTm9kZS5vcCgpICE9IEdldExvY2FsKQorICAgICAgICAgICAg
aWYgKG5vZGUtPm9wKCkgIT0gR2V0TG9jYWwpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgICAgICAgICAgCi0gICAgICAgICAgICBub2RlSW5kZXggPSB0YWlsTm9kZS5jaGlsZDEo
KS5pbmRleCgpOwotICAgICAgICAgICAgQVNTRVJUKG1fZ3JhcGhbbm9kZUluZGV4XS5vcCgpID09
IFBoaSk7Ci0gICAgICAgICAgICBpZiAoIW1fZ3JhcGhbbm9kZUluZGV4XS5zaG91bGRHZW5lcmF0
ZSgpKQorICAgICAgICAgICAgbm9kZSA9IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKKyAgICAgICAg
ICAgIEFTU0VSVChub2RlLT5vcCgpID09IFBoaSk7CisgICAgICAgICAgICBpZiAoIW5vZGUtPnNo
b3VsZEdlbmVyYXRlKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9
CiAgICAgICAgIAotICAgICAgICBOb2RlJiBub2RlID0gbV9ncmFwaFtub2RlSW5kZXhdOwotICAg
ICAgICBBU1NFUlQobm9kZS5zaG91bGRHZW5lcmF0ZSgpKTsKKyAgICAgICAgQVNTRVJUKG5vZGUt
PnNob3VsZEdlbmVyYXRlKCkpOwogCiAjaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9W
RVJCT1NFKQotICAgICAgICBkYXRhTG9nRigiICAgICAgICAgIEl0J3MgbGl2ZSwgbm9kZSBAJXUu
XG4iLCBub2RlSW5kZXgpOworICAgICAgICBkYXRhTG9nRigiICAgICAgICAgIEl0J3MgbGl2ZSwg
bm9kZSBAJXUuXG4iLCBub2RlLT5pbmRleCgpKTsKICNlbmRpZgogICAgIAotICAgICAgICBzd2l0
Y2ggKG5vZGUub3AoKSkgeworICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKICAgICAgICAg
Y2FzZSBQaGk6CiAgICAgICAgIGNhc2UgU2V0QXJndW1lbnQ6CiAgICAgICAgIGNhc2UgRmx1c2g6
CkBAIC0xOTA5LDcgKzE5MjgsNyBAQCBpbmxpbmUgYm9vbCBBYnN0cmFjdFN0YXRlOjptZXJnZVN0
YXRlQXRUCiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBHZXRMb2NhbDoKICAgICAgICAgICAg
IC8vIFRoZSBibG9jayByZWZpbmVzIHRoZSB2YWx1ZSB3aXRoIGFkZGl0aW9uYWwgc3BlY3VsYXRp
b25zLgotICAgICAgICAgICAgc291cmNlID0gZm9yTm9kZShub2RlSW5kZXgpOworICAgICAgICAg
ICAgc291cmNlID0gZm9yTm9kZShub2RlKTsKICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FU
SU9OX1ZFUkJPU0UpCiAgICAgICAgICAgICBkYXRhTG9nRigiICAgICAgICAgIFJlZmluaW5nIHRv
ICIpOwogICAgICAgICAgICAgc291cmNlLmR1bXAoV1RGOjpkYXRhRmlsZSgpKTsKQEAgLTE5MjAs
MTEgKzE5MzksMTEgQEAgaW5saW5lIGJvb2wgQWJzdHJhY3RTdGF0ZTo6bWVyZ2VTdGF0ZUF0VAog
ICAgICAgICBjYXNlIFNldExvY2FsOgogICAgICAgICAgICAgLy8gVGhlIGJsb2NrIHNldHMgdGhl
IHZhcmlhYmxlLCBhbmQgcG90ZW50aWFsbHkgcmVmaW5lcyBpdCwgYm90aAogICAgICAgICAgICAg
Ly8gYmVmb3JlIGFuZCBhZnRlciBzZXR0aW5nIGl0LgotICAgICAgICAgICAgaWYgKG5vZGUudmFy
aWFibGVBY2Nlc3NEYXRhKCktPnNob3VsZFVzZURvdWJsZUZvcm1hdCgpKSB7CisgICAgICAgICAg
ICBpZiAobm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCktPnNob3VsZFVzZURvdWJsZUZvcm1hdCgp
KSB7CiAgICAgICAgICAgICAgICAgLy8gRklYTUU6IFRoaXMgdW5uZWNlc3NhcmlseSBsb3NlcyBw
cmVjaXNpb24uCiAgICAgICAgICAgICAgICAgc291cmNlLnNldChTcGVjRG91YmxlKTsKICAgICAg
ICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgIHNvdXJjZSA9IGZvck5vZGUobm9kZS5jaGls
ZDEoKSk7CisgICAgICAgICAgICAgICAgc291cmNlID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSk7
CiAjaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQogICAgICAgICAgICAg
ZGF0YUxvZ0YoIiAgICAgICAgICBTZXR0aW5nIHRvICIpOwogICAgICAgICAgICAgc291cmNlLmR1
bXAoV1RGOjpkYXRhRmlsZSgpKTsKQEAgLTE5ODIsMzUgKzIwMDEsMzQgQEAgaW5saW5lIGJvb2wg
QWJzdHJhY3RTdGF0ZTo6bWVyZ2UoQmFzaWNCbAogICAgIHJldHVybiBjaGFuZ2VkOwogfQogCi1p
bmxpbmUgYm9vbCBBYnN0cmFjdFN0YXRlOjptZXJnZVRvU3VjY2Vzc29ycygKLSAgICBHcmFwaCYg
Z3JhcGgsIEJhc2ljQmxvY2sqIGJhc2ljQmxvY2spCitpbmxpbmUgYm9vbCBBYnN0cmFjdFN0YXRl
OjptZXJnZVRvU3VjY2Vzc29ycyhHcmFwaCYgZ3JhcGgsIEJhc2ljQmxvY2sqIGJhc2ljQmxvY2sp
CiB7Ci0gICAgTm9kZSYgdGVybWluYWwgPSBncmFwaFtiYXNpY0Jsb2NrLT5sYXN0KCldOworICAg
IE5vZGUqIHRlcm1pbmFsID0gYmFzaWNCbG9jay0+bGFzdCgpOwogICAgIAotICAgIEFTU0VSVCh0
ZXJtaW5hbC5pc1Rlcm1pbmFsKCkpOworICAgIEFTU0VSVCh0ZXJtaW5hbC0+aXNUZXJtaW5hbCgp
KTsKICAgICAKLSAgICBzd2l0Y2ggKHRlcm1pbmFsLm9wKCkpIHsKKyAgICBzd2l0Y2ggKHRlcm1p
bmFsLT5vcCgpKSB7CiAgICAgY2FzZSBKdW1wOiB7CiAgICAgICAgIEFTU0VSVChiYXNpY0Jsb2Nr
LT5jZmFCcmFuY2hEaXJlY3Rpb24gPT0gSW52YWxpZEJyYW5jaERpcmVjdGlvbik7CiAjaWYgREZH
X0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQogICAgICAgICBkYXRhTG9nRigiICAg
ICAgICBNZXJnaW5nIHRvIGJsb2NrICMldS5cbiIsIHRlcm1pbmFsLnRha2VuQmxvY2tJbmRleCgp
KTsKICNlbmRpZgotICAgICAgICByZXR1cm4gbWVyZ2UoYmFzaWNCbG9jaywgZ3JhcGgubV9ibG9j
a3NbdGVybWluYWwudGFrZW5CbG9ja0luZGV4KCldLmdldCgpKTsKKyAgICAgICAgcmV0dXJuIG1l
cmdlKGJhc2ljQmxvY2ssIGdyYXBoLm1fYmxvY2tzW3Rlcm1pbmFsLT50YWtlbkJsb2NrSW5kZXgo
KV0uZ2V0KCkpOwogICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBCcmFuY2g6IHsKICAgICAgICAg
QVNTRVJUKGJhc2ljQmxvY2stPmNmYUJyYW5jaERpcmVjdGlvbiAhPSBJbnZhbGlkQnJhbmNoRGly
ZWN0aW9uKTsKICAgICAgICAgYm9vbCBjaGFuZ2VkID0gZmFsc2U7CiAjaWYgREZHX0VOQUJMRShE
RUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQotICAgICAgICBkYXRhTG9nRigiICAgICAgICBNZXJn
aW5nIHRvIGJsb2NrICMldS5cbiIsIHRlcm1pbmFsLnRha2VuQmxvY2tJbmRleCgpKTsKKyAgICAg
ICAgZGF0YUxvZ0YoIiAgICAgICAgTWVyZ2luZyB0byBibG9jayAjJXUuXG4iLCB0ZXJtaW5hbC0+
dGFrZW5CbG9ja0luZGV4KCkpOwogI2VuZGlmCiAgICAgICAgIGlmIChiYXNpY0Jsb2NrLT5jZmFC
cmFuY2hEaXJlY3Rpb24gIT0gVGFrZUZhbHNlKQotICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJn
ZShiYXNpY0Jsb2NrLCBncmFwaC5tX2Jsb2Nrc1t0ZXJtaW5hbC50YWtlbkJsb2NrSW5kZXgoKV0u
Z2V0KCkpOworICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZShiYXNpY0Jsb2NrLCBncmFwaC5t
X2Jsb2Nrc1t0ZXJtaW5hbC0+dGFrZW5CbG9ja0luZGV4KCldLmdldCgpKTsKICNpZiBERkdfRU5B
QkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCiAgICAgICAgIGRhdGFMb2dGKCIgICAgICAg
IE1lcmdpbmcgdG8gYmxvY2sgIyV1LlxuIiwgdGVybWluYWwubm90VGFrZW5CbG9ja0luZGV4KCkp
OwogI2VuZGlmCiAgICAgICAgIGlmIChiYXNpY0Jsb2NrLT5jZmFCcmFuY2hEaXJlY3Rpb24gIT0g
VGFrZVRydWUpCi0gICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlKGJhc2ljQmxvY2ssIGdyYXBo
Lm1fYmxvY2tzW3Rlcm1pbmFsLm5vdFRha2VuQmxvY2tJbmRleCgpXS5nZXQoKSk7CisgICAgICAg
ICAgICBjaGFuZ2VkIHw9IG1lcmdlKGJhc2ljQmxvY2ssIGdyYXBoLm1fYmxvY2tzW3Rlcm1pbmFs
LT5ub3RUYWtlbkJsb2NrSW5kZXgoKV0uZ2V0KCkpOwogICAgICAgICByZXR1cm4gY2hhbmdlZDsK
ICAgICB9CiAgICAgICAgIApAQCAtMjAyNiwxMiArMjA0NCwxMiBAQCBpbmxpbmUgYm9vbCBBYnN0
cmFjdFN0YXRlOjptZXJnZVRvU3VjY2VzCiAgICAgfQogfQogCi1pbmxpbmUgYm9vbCBBYnN0cmFj
dFN0YXRlOjptZXJnZVZhcmlhYmxlQmV0d2VlbkJsb2NrcyhBYnN0cmFjdFZhbHVlJiBkZXN0aW5h
dGlvbiwgQWJzdHJhY3RWYWx1ZSYgc291cmNlLCBOb2RlSW5kZXggZGVzdGluYXRpb25Ob2RlSW5k
ZXgsIE5vZGVJbmRleCBzb3VyY2VOb2RlSW5kZXgpCitpbmxpbmUgYm9vbCBBYnN0cmFjdFN0YXRl
OjptZXJnZVZhcmlhYmxlQmV0d2VlbkJsb2NrcyhBYnN0cmFjdFZhbHVlJiBkZXN0aW5hdGlvbiwg
QWJzdHJhY3RWYWx1ZSYgc291cmNlLCBOb2RlKiBkZXN0aW5hdGlvbk5vZGUsIE5vZGUqIHNvdXJj
ZU5vZGUpCiB7Ci0gICAgaWYgKGRlc3RpbmF0aW9uTm9kZUluZGV4ID09IE5vTm9kZSkKKyAgICBp
ZiAoIWRlc3RpbmF0aW9uTm9kZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAotICAgIEFT
U0VSVF9VTlVTRUQoc291cmNlTm9kZUluZGV4LCBzb3VyY2VOb2RlSW5kZXggIT0gTm9Ob2RlKTsK
KyAgICBBU1NFUlRfVU5VU0VEKHNvdXJjZU5vZGUsIHNvdXJjZU5vZGUpOwogICAgIAogICAgIC8v
IEZJWE1FOiBXZSBjb3VsZCBkbyBzb21lIHNwYXJzZSBjb25kaXRpb25hbCBwcm9wYWdhdGlvbiBo
ZXJlIQogICAgIApAQCAtMjA0MiwxNSArMjA2MCwxNSBAQCB2b2lkIEFic3RyYWN0U3RhdGU6OmR1
bXAoUHJpbnRTdHJlYW0mIG91CiB7CiAgICAgYm9vbCBmaXJzdCA9IHRydWU7CiAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBtX2Jsb2NrLT5zaXplKCk7ICsraSkgewotICAgICAgICBOb2RlSW5k
ZXggaW5kZXggPSBtX2Jsb2NrLT5hdChpKTsKLSAgICAgICAgQWJzdHJhY3RWYWx1ZSYgdmFsdWUg
PSBmb3JOb2RlKGluZGV4KTsKKyAgICAgICAgTm9kZSogbm9kZSA9IG1fYmxvY2stPmF0KGkpOwor
ICAgICAgICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSA9IGZvck5vZGUobm9kZSk7CiAgICAgICAgIGlm
ICh2YWx1ZS5pc0NsZWFyKCkpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgaWYgKGZp
cnN0KQogICAgICAgICAgICAgZmlyc3QgPSBmYWxzZTsKICAgICAgICAgZWxzZQogICAgICAgICAg
ICAgb3V0LnByaW50ZigiICIpOwotICAgICAgICBvdXQucHJpbnRmKCJAJWx1OiIsIHN0YXRpY19j
YXN0PHVuc2lnbmVkIGxvbmc+KGluZGV4KSk7CisgICAgICAgIG91dC5wcmludGYoIkAlbHU6Iiwg
c3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4obm9kZS0+aW5kZXgoKSkpOwogICAgICAgICB2YWx1
ZS5kdW1wKG91dCk7CiAgICAgfQogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdBYnN0cmFjdFN0YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdBYnN0cmFjdFN0YXRlLmgJKHJldmlzaW9uIDE0MDYxNikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQWJzdHJhY3RTdGF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTIsIDIwMTMgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC03Miw4ICs3Miw4IEBAIHN0cnVjdCBCYXNpY0Jsb2NrOwogLy8gQWJzdHJhY3RTdGF0ZSBzdGF0
ZShjb2RlQmxvY2ssIGdyYXBoKTsKIC8vIHN0YXRlLmJlZ2luQmFzaWNCbG9jayhiYXNpY0Jsb2Nr
KTsKIC8vIGJvb2wgZW5kUmVhY2hlZCA9IHRydWU7Ci0vLyBmb3IgKE5vZGVJbmRleCBpZHggPSBi
YXNpY0Jsb2NrLmJlZ2luOyBpZHggPCBiYXNpY0Jsb2NrLmVuZDsgKytpZHgpIHsKLS8vICAgICBp
ZiAoIXN0YXRlLmV4ZWN1dGUoaWR4KSkKKy8vIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBiYXNp
Y0Jsb2NrLT5zaXplKCk7ICsraSkgeworLy8gICAgIGlmICghc3RhdGUuZXhlY3V0ZShpKSkKIC8v
ICAgICAgICAgYnJlYWs7CiAvLyB9CiAvLyBib29sIHJlc3VsdCA9IHN0YXRlLmVuZEJhc2ljQmxv
Y2soPGVpdGhlciBNZXJnZSBvciBEb250TWVyZ2U+KTsKQEAgLTk3LDE0ICs5NywxNCBAQCBwdWJs
aWM6CiAgICAgCiAgICAgfkFic3RyYWN0U3RhdGUoKTsKICAgICAKLSAgICBBYnN0cmFjdFZhbHVl
JiBmb3JOb2RlKE5vZGVJbmRleCBub2RlSW5kZXgpCisgICAgQWJzdHJhY3RWYWx1ZSYgZm9yTm9k
ZShOb2RlKiBub2RlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIG1fZ3JhcGhbbm9kZUluZGV4XS52
YWx1ZTsKKyAgICAgICAgcmV0dXJuIG5vZGUtPnZhbHVlOwogICAgIH0KICAgICAKLSAgICBBYnN0
cmFjdFZhbHVlJiBmb3JOb2RlKEVkZ2Ugbm9kZVVzZSkKKyAgICBBYnN0cmFjdFZhbHVlJiBmb3JO
b2RlKEVkZ2UgZWRnZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBmb3JOb2RlKG5vZGVVc2UuaW5k
ZXgoKSk7CisgICAgICAgIHJldHVybiBmb3JOb2RlKGVkZ2Uubm9kZSgpKTsKICAgICB9CiAgICAg
CiAgICAgT3BlcmFuZHM8QWJzdHJhY3RWYWx1ZT4mIHZhcmlhYmxlcygpCkBAIC0xODcsNDggKzE4
Nyw0OCBAQCBwcml2YXRlOgogICAgIHZvaWQgY2xvYmJlckNhcHR1cmVkVmFycyhjb25zdCBDb2Rl
T3JpZ2luJik7CiAgICAgdm9pZCBjbG9iYmVyU3RydWN0dXJlcyh1bnNpZ25lZCBpbmRleEluQmxv
Y2spOwogICAgIAotICAgIGJvb2wgbWVyZ2VTdGF0ZUF0VGFpbChBYnN0cmFjdFZhbHVlJiBkZXN0
aW5hdGlvbiwgQWJzdHJhY3RWYWx1ZSYgaW5WYXJpYWJsZSwgTm9kZUluZGV4KTsKKyAgICBib29s
IG1lcmdlU3RhdGVBdFRhaWwoQWJzdHJhY3RWYWx1ZSYgZGVzdGluYXRpb24sIEFic3RyYWN0VmFs
dWUmIGluVmFyaWFibGUsIE5vZGUqKTsKICAgICAKLSAgICBzdGF0aWMgYm9vbCBtZXJnZVZhcmlh
YmxlQmV0d2VlbkJsb2NrcyhBYnN0cmFjdFZhbHVlJiBkZXN0aW5hdGlvbiwgQWJzdHJhY3RWYWx1
ZSYgc291cmNlLCBOb2RlSW5kZXggZGVzdGluYXRpb25Ob2RlSW5kZXgsIE5vZGVJbmRleCBzb3Vy
Y2VOb2RlSW5kZXgpOworICAgIHN0YXRpYyBib29sIG1lcmdlVmFyaWFibGVCZXR3ZWVuQmxvY2tz
KEFic3RyYWN0VmFsdWUmIGRlc3RpbmF0aW9uLCBBYnN0cmFjdFZhbHVlJiBzb3VyY2UsIE5vZGUq
IGRlc3RpbmF0aW9uTm9kZSwgTm9kZSogc291cmNlTm9kZSk7CiAgICAgCi0gICAgdm9pZCBzcGVj
dWxhdGVJbnQzMlVuYXJ5KE5vZGUmIG5vZGUsIGJvb2wgZm9yY2VDYW5FeGl0ID0gZmFsc2UpCisg
ICAgdm9pZCBzcGVjdWxhdGVJbnQzMlVuYXJ5KE5vZGUqIG5vZGUsIGJvb2wgZm9yY2VDYW5FeGl0
ID0gZmFsc2UpCiAgICAgewotICAgICAgICBBYnN0cmFjdFZhbHVlJiBjaGlsZFZhbHVlID0gZm9y
Tm9kZShub2RlLmNoaWxkMSgpKTsKLSAgICAgICAgbm9kZS5zZXRDYW5FeGl0KGZvcmNlQ2FuRXhp
dCB8fCAhaXNJbnQzMlNwZWN1bGF0aW9uKGNoaWxkVmFsdWUubV90eXBlKSk7CisgICAgICAgIEFi
c3RyYWN0VmFsdWUmIGNoaWxkVmFsdWUgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKTsKKyAgICAg
ICAgbm9kZS0+c2V0Q2FuRXhpdChmb3JjZUNhbkV4aXQgfHwgIWlzSW50MzJTcGVjdWxhdGlvbihj
aGlsZFZhbHVlLm1fdHlwZSkpOwogICAgICAgICBjaGlsZFZhbHVlLmZpbHRlcihTcGVjSW50MzIp
OwogICAgIH0KICAgICAKLSAgICB2b2lkIHNwZWN1bGF0ZU51bWJlclVuYXJ5KE5vZGUmIG5vZGUp
CisgICAgdm9pZCBzcGVjdWxhdGVOdW1iZXJVbmFyeShOb2RlKiBub2RlKQogICAgIHsKLSAgICAg
ICAgQWJzdHJhY3RWYWx1ZSYgY2hpbGRWYWx1ZSA9IGZvck5vZGUobm9kZS5jaGlsZDEoKSk7Ci0g
ICAgICAgIG5vZGUuc2V0Q2FuRXhpdCghaXNOdW1iZXJTcGVjdWxhdGlvbihjaGlsZFZhbHVlLm1f
dHlwZSkpOworICAgICAgICBBYnN0cmFjdFZhbHVlJiBjaGlsZFZhbHVlID0gZm9yTm9kZShub2Rl
LT5jaGlsZDEoKSk7CisgICAgICAgIG5vZGUtPnNldENhbkV4aXQoIWlzTnVtYmVyU3BlY3VsYXRp
b24oY2hpbGRWYWx1ZS5tX3R5cGUpKTsKICAgICAgICAgY2hpbGRWYWx1ZS5maWx0ZXIoU3BlY051
bWJlcik7CiAgICAgfQogICAgIAotICAgIHZvaWQgc3BlY3VsYXRlQm9vbGVhblVuYXJ5KE5vZGUm
IG5vZGUpCisgICAgdm9pZCBzcGVjdWxhdGVCb29sZWFuVW5hcnkoTm9kZSogbm9kZSkKICAgICB7
Ci0gICAgICAgIEFic3RyYWN0VmFsdWUmIGNoaWxkVmFsdWUgPSBmb3JOb2RlKG5vZGUuY2hpbGQx
KCkpOwotICAgICAgICBub2RlLnNldENhbkV4aXQoIWlzQm9vbGVhblNwZWN1bGF0aW9uKGNoaWxk
VmFsdWUubV90eXBlKSk7CisgICAgICAgIEFic3RyYWN0VmFsdWUmIGNoaWxkVmFsdWUgPSBmb3JO
b2RlKG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCghaXNCb29sZWFu
U3BlY3VsYXRpb24oY2hpbGRWYWx1ZS5tX3R5cGUpKTsKICAgICAgICAgY2hpbGRWYWx1ZS5maWx0
ZXIoU3BlY0Jvb2xlYW4pOwogICAgIH0KICAgICAKLSAgICB2b2lkIHNwZWN1bGF0ZUludDMyQmlu
YXJ5KE5vZGUmIG5vZGUsIGJvb2wgZm9yY2VDYW5FeGl0ID0gZmFsc2UpCisgICAgdm9pZCBzcGVj
dWxhdGVJbnQzMkJpbmFyeShOb2RlKiBub2RlLCBib29sIGZvcmNlQ2FuRXhpdCA9IGZhbHNlKQog
ICAgIHsKLSAgICAgICAgQWJzdHJhY3RWYWx1ZSYgY2hpbGRWYWx1ZTEgPSBmb3JOb2RlKG5vZGUu
Y2hpbGQxKCkpOwotICAgICAgICBBYnN0cmFjdFZhbHVlJiBjaGlsZFZhbHVlMiA9IGZvck5vZGUo
bm9kZS5jaGlsZDIoKSk7Ci0gICAgICAgIG5vZGUuc2V0Q2FuRXhpdCgKKyAgICAgICAgQWJzdHJh
Y3RWYWx1ZSYgY2hpbGRWYWx1ZTEgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAg
QWJzdHJhY3RWYWx1ZSYgY2hpbGRWYWx1ZTIgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMigpKTsKKyAg
ICAgICAgbm9kZS0+c2V0Q2FuRXhpdCgKICAgICAgICAgICAgIGZvcmNlQ2FuRXhpdAotICAgICAg
ICAgICAgfHwgIWlzSW50MzJTcGVjdWxhdGlvbihjaGlsZFZhbHVlMS5tX3R5cGUpCi0gICAgICAg
ICAgICB8fCAhaXNJbnQzMlNwZWN1bGF0aW9uKGNoaWxkVmFsdWUyLm1fdHlwZSkpOworICAgICAg
ICAgICAgfHwgIWlzSW50MzJTcGVjdWxhdGlvbihjaGlsZFZhbHVlMS0+bV90eXBlKQorICAgICAg
ICAgICAgfHwgIWlzSW50MzJTcGVjdWxhdGlvbihjaGlsZFZhbHVlMi0+bV90eXBlKSk7CiAgICAg
ICAgIGNoaWxkVmFsdWUxLmZpbHRlcihTcGVjSW50MzIpOwogICAgICAgICBjaGlsZFZhbHVlMi5m
aWx0ZXIoU3BlY0ludDMyKTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBzcGVjdWxhdGVOdW1iZXJC
aW5hcnkoTm9kZSYgbm9kZSkKKyAgICB2b2lkIHNwZWN1bGF0ZU51bWJlckJpbmFyeShOb2RlKiBu
b2RlKQogICAgIHsKLSAgICAgICAgQWJzdHJhY3RWYWx1ZSYgY2hpbGRWYWx1ZTEgPSBmb3JOb2Rl
KG5vZGUuY2hpbGQxKCkpOwotICAgICAgICBBYnN0cmFjdFZhbHVlJiBjaGlsZFZhbHVlMiA9IGZv
ck5vZGUobm9kZS5jaGlsZDIoKSk7Ci0gICAgICAgIG5vZGUuc2V0Q2FuRXhpdCgKKyAgICAgICAg
QWJzdHJhY3RWYWx1ZSYgY2hpbGRWYWx1ZTEgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKTsKKyAg
ICAgICAgQWJzdHJhY3RWYWx1ZSYgY2hpbGRWYWx1ZTIgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMigp
KTsKKyAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCgKICAgICAgICAgICAgICFpc051bWJlclNwZWN1
bGF0aW9uKGNoaWxkVmFsdWUxLm1fdHlwZSkKICAgICAgICAgICAgIHx8ICFpc051bWJlclNwZWN1
bGF0aW9uKGNoaWxkVmFsdWUyLm1fdHlwZSkpOwogICAgICAgICBjaGlsZFZhbHVlMS5maWx0ZXIo
U3BlY051bWJlcik7CkBAIC0yNDAsOSArMjQwLDkgQEAgcHJpdmF0ZToKICAgICAgICAgRGVmaW5p
dGVseUZhbHNlLAogICAgICAgICBEZWZpbml0ZWx5VHJ1ZQogICAgIH07Ci0gICAgQm9vbGVhblJl
c3VsdCBib29sZWFuUmVzdWx0KE5vZGUmLCBBYnN0cmFjdFZhbHVlJik7CisgICAgQm9vbGVhblJl
c3VsdCBib29sZWFuUmVzdWx0KE5vZGUqLCBBYnN0cmFjdFZhbHVlJik7CiAgICAgCi0gICAgYm9v
bCB0cnlTZXRDb25zdGFudChOb2RlSW5kZXggbm9kZUluZGV4LCBKU1ZhbHVlIHZhbHVlKQorICAg
IGJvb2wgdHJ5U2V0Q29uc3RhbnQoTm9kZSogbm9kZSwgSlNWYWx1ZSB2YWx1ZSkKICAgICB7CiAg
ICAgICAgIC8vIE1ha2Ugc3VyZSB3ZSBkb24ndCBjb25zdGFudCBmb2xkIHNvbWV0aGluZyB0aGF0
IHdpbGwgcHJvZHVjZSB2YWx1ZXMgdGhhdCBjb250cmF2ZW5lCiAgICAgICAgIC8vIHByZWRpY3Rp
b25zLiBJZiB0aGF0IGhhcHBlbnMgdGhlbiB3ZSBrbm93IHRoYXQgdGhlIGNvZGUgd2lsbCBPU1Ig
ZXhpdCwgZm9yY2luZwpAQCAtMjUxLDExICsyNTEsMTEgQEAgcHJpdmF0ZToKICAgICAgICAgLy8g
bG90IG9mIHN1YnRsZSBjb2RlIHRoYXQgYXNzdW1lcyB0aGF0CiAgICAgICAgIC8vIHNwZWN1bGF0
aW9uRnJvbVZhbHVlKGpzQ29uc3RhbnQpID09IGpzQ29uc3RhbnQucHJlZGljdGlvbigpLiAiSGFy
ZGVuaW5nIiB0aGF0IGNvZGUKICAgICAgICAgLy8gaXMgcHJvYmFibHkgbGVzcyBzYW5lIHRoYW4g
anVzdCBwdWxsaW5nIGJhY2sgb24gY29uc3RhbnQgZm9sZGluZy4KLSAgICAgICAgU3BlY3VsYXRl
ZFR5cGUgb2xkVHlwZSA9IG1fZ3JhcGhbbm9kZUluZGV4XS5wcmVkaWN0aW9uKCk7CisgICAgICAg
IFNwZWN1bGF0ZWRUeXBlIG9sZFR5cGUgPSBub2RlLT5wcmVkaWN0aW9uKCk7CiAgICAgICAgIGlm
IChtZXJnZVNwZWN1bGF0aW9ucyhzcGVjdWxhdGlvbkZyb21WYWx1ZSh2YWx1ZSksIG9sZFR5cGUp
ICE9IG9sZFR5cGUpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIAotICAgICAg
ICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KHZhbHVlKTsKKyAgICAgICAgZm9yTm9kZShub2RlKS5z
ZXQodmFsdWUpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0VmFsdWUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0VmFsdWUuaAkocmV2aXNpb24gMTQw
NjE2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFZhbHVlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExLCAy
MDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
MSwgMjAxMiwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQxOCw2ICs0MTgsOCBAQCBzdHJ1Y3QgQWJzdHJhY3RW
YWx1ZSB7CiAgICAgLy8gICAgY2hhbmdlIHgncyBzdHJ1Y3R1cmUgYW5kIHdlIGhhdmUgbm8gd2F5
IG9mIHByb3Zpbmcgb3RoZXJ3aXNlLCBidXQKICAgICAvLyAgICB4J3MgbV9mdXR1cmVQb3NzaWJs
ZVN0cnVjdHVyZSB3aWxsIGJlIHdoYXRldmVyIHN0cnVjdHVyZSB3ZSBoYWQgY2hlY2tlZAogICAg
IC8vICAgIHdoZW4gZ2V0dGluZyBwcm9wZXJ0eSAnZicuCisgICAgCisgICAgLy8gTkIuIEFsbCBm
aWVsZHMgaW4gdGhpcyBzdHJ1Y3QgbXVzdCBoYXZlIHRyaXZpYWwgZGVzdHJ1Y3RvcnMuCiAKICAg
ICAvLyBUaGlzIGlzIGEgcHJvdmVuIGNvbnN0cmFpbnQgb24gdGhlIHN0cnVjdHVyZXMgdGhhdCB0
aGlzIHZhbHVlIGNhbiBoYXZlIHJpZ2h0CiAgICAgLy8gbm93LiBUaGUgc3RydWN0dXJlIG9mIHRo
ZSBjdXJyZW50IHZhbHVlIG11c3QgYmVsb25nIHRvIHRoaXMgc2V0LiBUaGUgc2V0IG1heQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBZGphY2VuY3lMaXN0LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBZGphY2VuY3lMaXN0LmgJKHJldmlz
aW9uIDE0MDYxNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWRqYWNlbmN5TGlz
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTEsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC01Nyw3ICs1Nyw3IEBAIHB1YmxpYzoKICAgICAgICAgfQogICAg
IH0KICAgICAKLSAgICBBZGphY2VuY3lMaXN0KEtpbmQga2luZCwgTm9kZUluZGV4IGNoaWxkMSwg
Tm9kZUluZGV4IGNoaWxkMiwgTm9kZUluZGV4IGNoaWxkMykKKyAgICBBZGphY2VuY3lMaXN0KEtp
bmQga2luZCwgTm9kZSogY2hpbGQxLCBOb2RlKiBjaGlsZDIsIE5vZGUqIGNoaWxkMykKICNpZiAh
QVNTRVJUX0RJU0FCTEVECiAgICAgICAgIDogbV9raW5kKEZpeGVkKQogI2VuZGlmCkBAIC0xMTgs
NyArMTE4LDcgQEAgcHVibGljOgogICAgICAgICBjaGlsZCgyKSA9IGNoaWxkMzsKICAgICB9CiAg
ICAgCi0gICAgdm9pZCBpbml0aWFsaXplKE5vZGVJbmRleCBjaGlsZDEgPSBOb05vZGUsIE5vZGVJ
bmRleCBjaGlsZDIgPSBOb05vZGUsIE5vZGVJbmRleCBjaGlsZDMgPSBOb05vZGUpCisgICAgdm9p
ZCBpbml0aWFsaXplKE5vZGUqIGNoaWxkMSA9IDAsIE5vZGUqIGNoaWxkMiA9IDAsIE5vZGUqIGNo
aWxkMyA9IDApCiAgICAgewogICAgICAgICBpbml0aWFsaXplKEVkZ2UoY2hpbGQxKSwgRWRnZShj
aGlsZDIpLCBFZGdlKGNoaWxkMykpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQWxsb2NhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdBbGxvY2F0b3IuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQWxsb2NhdG9yLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjM1IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHQWxs
b2NhdG9yX2gKKyNkZWZpbmUgREZHQWxsb2NhdG9yX2gKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9y
bS5oPgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlIDx3dGYvUGFnZUFsbG9jYXRp
b25BbGlnbmVkLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworLy8gQ3Vz
dG9tIHBvb2wgYWxsb2NhdG9yIGZvciBleGFjdGx5IG9uZSB0eXBlICh0eXBlIFQpLiBJdCBoYXMg
ZmFzdCAoTygxKSwgb25seSBhIGZldworLy8gaW5zdHJ1Y3Rpb25zKSBhbGxvY2F0b3IsIGFuZCBh
IHNpbWlsYXJseSBmYXN0IGZyZWUoKS4gUmVjeWNsaW5nIHdvcmtzIGlmIGVpdGhlciBvZgorLy8g
dGhlIGZvbGxvd2luZyBpcyB0cnVlOgorLy8gLSBUIGhhcyBhIHRyaXZpYWwgZGVzdHJ1Y3Rvci4g
SW4gdGhhdCBjYXNlIHlvdSBkb24ndCBoYXZlIHRvIGV2ZXIgY2FsbCBmcmVlKCkgb24KKy8vICAg
YW55dGhpbmcuIFlvdSBjYW4ganVzdCBjYWxsIGZyZWVBbGwoKSBpbnN0ZWFkLgorLy8gLSBZb3Ug
Y2FsbCBmcmVlKCkgb24gYWxsIFQncyB0aGF0IHlvdSBhbGxvY2F0ZWQsIGFuZCBuZXZlciB1c2Ug
ZnJlZUFsbCgpLgorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorY2xhc3MgQWxsb2NhdG9yIHsKK3B1
YmxpYzoKKyAgICBBbGxvY2F0b3IoKTsKKyAgICB+QWxsb2NhdG9yKCk7CisgICAgCisgICAgdm9p
ZCogYWxsb2NhdGUoKTsgLy8gVXNlIHBsYWNlbWVudCBuZXcgdG8gYWxsb2NhdGUsIGFuZCBhdm9p
ZCB1c2luZyB0aGlzIG1ldGhvZC4KKyAgICB2b2lkIGZyZWUoVCopOyAvLyBDYWxsIHRoaXMgbWV0
aG9kIHRvIGRlbGV0ZTsgbmV2ZXIgdXNlICdkZWxldGUnIGRpcmVjdGx5LgorICAgIAorICAgIHZv
aWQgZnJlZUFsbCgpOyAvLyBPbmx5IGNhbGwgdGhpcyBpZiBUIGhhcyBhIHRyaXZpYWwgZGVzdHJ1
Y3Rvci4KKyAgICB2b2lkIHJlc2V0KCk7IC8vIExpa2UgZnJlZUFsbCgpLCBidXQgYWxzbyByZXR1
cm5zIGFsbCBtZW1vcnkgdG8gdGhlIE9TLgorICAgIAorICAgIHVuc2lnbmVkIGluZGV4T2YoVCop
OworICAgIAorICAgIHN0YXRpYyBBbGxvY2F0b3IqIGFsbG9jYXRvck9mKFQqKTsKKyAgICAKK3By
aXZhdGU6CisgICAgdm9pZCogYnVtcEFsbG9jYXRlKCk7CisgICAgdm9pZCogZnJlZUxpc3RBbGxv
Y2F0ZSgpOworICAgIHZvaWQqIGFsbG9jYXRlU2xvdygpOworICAgIHZvaWQgZnJlZVJlZ2lvbnNT
dGFydGluZ0F0KFJlZ2lvbiopOworICAgIHZvaWQgc3RhcnRpbmdCdW1waW5nSW4oUmVnaW9uKik7
CisgICAgCisgICAgc3RydWN0IFJlZ2lvbiB7CisgICAgICAgIHN0YXRpYyBzaXplX3Qgc2l6ZSgp
IHsgcmV0dXJuIDY0ICogS0I7IH0KKyAgICAgICAgc3RhdGljIHNpemVfdCBoZWFkZXJTaXplKCkg
eyByZXR1cm4gc3RkOjptYXgoc2l6ZW9mKFJlZ2lvbiksIHNpemVvZihUKSk7IH0KKyAgICAgICAg
c3RhdGljIHVuc2lnbmVkIG51bWJlck9mVGhpbmdzUGVyUmVnaW9uKCkgeyByZXR1cm4gKHNpemUo
KSAtIGhlYWRlclNpemUoKSkgLyBzaXplb2YoVCk7IH0KKyAgICAgICAgVCogZGF0YSgpIHsgcmV0
dXJuIGJpdHdpc2VfY2FzdDxUKj4oYml0d2lzZV9jYXN0PGNoYXIqPih0aGlzKSArIGhlYWRlclNp
emUoKSk7IH0KKyAgICAgICAgYm9vbCBpc0luVGhpc1JlZ2lvbihUKiBwb2ludGVyKSB7IHJldHVy
biBzdGF0aWNfY2FzdDx1bnNpZ25lZD4ocG9pbnRlciAtIGRhdGEoKSkgPCBudW1iZXJPZlRoaW5n
c1BlclJlZ2lvbigpOyB9CisgICAgICAgIFJlZ2lvbiogcmVnaW9uRm9yKFQqIHBvaW50ZXIpIHsg
cmV0dXJuIGJpdHdpc2VfY2FzdDxSZWdpb24qPihiaXR3aXNlX2Nhc3Q8dWludHB0cl90Pihwb2lu
dGVyKSAmIH4oc2l6ZSgpIC0gMSkpOyB9CisgICAgICAgIAorICAgICAgICBQYWdlQWxsb2NhdGlv
bkFsaWduZWQgbV9hbGxvY2F0aW9uOworICAgICAgICBBbGxvY2F0b3IqIG1fYWxsb2NhdG9yOwor
ICAgICAgICBSZWdpb24qIG1fbmV4dDsKKyAgICB9OworICAgIAorICAgIFJlZ2lvbiogbV9yZWdp
b25IZWFkOworICAgIHZvaWQqKiBtX2ZyZWVMaXN0SGVhZDsKKyAgICBUKiBtX2J1bXBFbmQ7Cisg
ICAgdW5zaWduZWQgbV9idW1wUmVtYWluaW5nOworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4K
K2lubGluZSBBbGxvY2F0b3I6OkFsbG9jYXRvcigpCisgICAgOiBtX3JlZ2lvbkhlYWQoMCkKKyAg
ICAsIG1fZnJlZUxpc3RIZWFkKDApCisgICAgLCBtX2J1bXBSZW1haW5pbmcoMCkKK3sKK30KKwor
dGVtcGxhdGU8dHlwZW5hbWUgVD4KK2lubGluZSBBbGxvY2F0b3I6On5BbGxvY2F0b3IoKQorewor
ICAgIHJlc2V0KCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitBTFdBWVNfSU5MSU5FIHZv
aWQqIEFsbG9jYXRvcjo6YWxsb2NhdGUoKQoreworICAgIGlmIChMSUtFTFkodm9pZCogcmVzdWx0
ID0gYnVtcEFsbG9jYXRlKCkpKQorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIHJldHVybiBm
cmVlTGlzdEFsbG9jYXRlKCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+Cit2b2lkIEFsbG9j
YXRvcjo6ZnJlZShUKiBvYmplY3QpCit7CisgICAgb2JqZWN0LT5+VCgpOworICAgIAorICAgIHZv
aWQqKiBjZWxsID0gYml0d2lzZV9jYXN0PHZvaWQqKj4ob2JqZWN0KTsKKyAgICAqY2VsbCA9IG1f
ZnJlZUxpc3RIZWFkOworICAgIG1fZnJlZUxpc3RIZWFkID0gY2VsbDsKK30KKwordGVtcGxhdGU8
dHlwZW5hbWUgVD4KK3ZvaWQgQWxsb2NhdG9yOjpmcmVlQWxsKCkKK3sKKyAgICBpZiAoIW1fcmVn
aW9uSGVhZCkgeworICAgICAgICBBU1NFUlQoIW1fYnVtcFJlbWFpbmluZyk7CisgICAgICAgIEFT
U0VSVCghbV9mcmVlTGlzdEhlYWQpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAg
IC8vIFNpbmNlIHRoZSBjYWxsZXIgaXMgb3B0aW5nIG91dCBvZiBjYWxsaW5nIHRoZSBkZXN0cnVj
dG9yIGZvciBhbnkgYWxsb2NhdGVkIHRoaW5nLAorICAgIC8vIHdlIGhhdmUgdHdvIGNob2ljZXMs
IHBsdXMgYSBjb250aW51dW0gYmV0d2Vlbjogd2UgY2FuIGVpdGhlciBqdXN0IGRlbGV0ZSBhbGwg
cmVnaW9ucworICAgIC8vIChpLmUuIGNhbGwgcmVzZXQoKSksIG9yIHdlIGNhbiBtYWtlIGFsbCBy
ZWdpb25zIGF2YWlsYWJsZSBmb3IgcmV1c2UuIFdlIGRvIHNvbWV0aGluZworICAgIC8vIHRoYXQg
b3B0aW1pemVzIGZvciAoYSkgc3BlZWQgb2YgZnJlZUFsbCgpLCAoYikgdGhlIGFzc3VtcHRpb24g
dGhhdCBpZiB0aGUgdXNlciBjYWxscworICAgIC8vIGZyZWVBbGwoKSB0aGVuIHRoZXkgd2lsbCBw
cm9iYWJseSBiZSBjYWxsaW5nIGFsbG9jYXRlKCkgaW4gdGhlIG5lYXIgZnV0dXJlLiBOYW1lbHks
CisgICAgLy8gd2UgZnJlZSBhbGwgYnV0IG9uZSByZWdpb24sIGFuZCBtYWtlIHRoZSByZW1haW5p
bmcgcmVnaW9uIGEgYnVtcCBhbGxvY2F0aW9uIHJlZ2lvbi4KKyAgICAKKyAgICBmb3IgKFJlZ2lv
biogcmVnaW9uID0gbV9yZWdpb25IZWFkLT5tX25leHQ7IHJlZ2lvbjsgcmVnaW9uID0gcmVnaW9u
LT5tX25leHQpCisgICAgICAgIGJ1aWxkRnJlZUxpc3RJbihyZWdpb24pOworICAgIAorICAgIG1f
cmVnaW9uSGVhZC0+bV9uZXh0ID0gMDsKKyAgICBtX2ZyZWVMaXN0SGVhZCA9IDA7CisgICAgc3Rh
cnRCdW1waW5nSW4obV9yZWdpb25IZWFkKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK3Zv
aWQgQWxsb2NhdG9yOjpyZXNldCgpCit7CisgICAgZnJlZVJlZ2lvbnNTdGFydGluZ0F0KG1fcmVn
aW9uSGVhZCk7CisgICAgCisgICAgbV9yZWdpb25IZWFkID0gMDsKKyAgICBtX2ZyZWVMaXN0SGVh
ZCA9IDA7CisgICAgbV9idW1wUmVtYWluaW5nID0gMDsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUg
VD4KK3Vuc2lnbmVkIEFsbG9jYXRvcjo6aW5kZXhPZihUKiBvYmplY3QpCit7CisgICAgdW5zaWdu
ZWQgYmFzZUluZGV4ID0gMDsKKyAgICBmb3IgKFJlZ2lvbiogcmVnaW9uID0gbV9yZWdpb25IZWFk
OyByZWdpb247IHJlZ2lvbiA9IHJlZ2lvbi0+bV9uZXh0KSB7CisgICAgICAgIGlmIChyZWdpb24t
PmlzSW5UaGlzUmVnaW9uKG9iamVjdCkpCisgICAgICAgICAgICByZXR1cm4gYmFzZUluZGV4ICsg
KG9iamVjdCAtIHJlZ2lvbi0+ZGF0YSgpKTsKKyAgICAgICAgYmFzZUluZGV4ICs9IFJlZ2lvbjo6
bnVtYmVyT2ZUaGluZ3NQZXJSZWdpb24oKTsKKyAgICB9CisgICAgQ1JBU0goKTsKKyAgICByZXR1
cm4gMDsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK0FsbG9jYXRvciogQWxsb2NhdG9yOjph
bGxvY2F0b3JPZihUKiBvYmplY3QpCit7CisgICAgcmV0dXJuIFJlZ2lvbjo6cmVnaW9uRm9yKG9i
amVjdCktPm1fYWxsb2NhdG9yOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorQUxXQVlTX0lO
TElORSB2b2lkKiBBbGxvY2F0b3I6OmJ1bXBBbGxvY2F0ZSgpCit7CisgICAgaWYgKHVuc2lnbmVk
IHJlbWFpbmluZyA9IG1fYnVtcFJlbWFpbmluZykgeworICAgICAgICByZW1haW5pbmctLTsKKyAg
ICAgICAgbV9idW1wUmVtYWluaW5nID0gcmVtYWluaW5nOworICAgICAgICByZXR1cm4gbV9idW1w
RW5kIC0gKHJlbWFpbmluZyArIDEpOworICAgIH0KKyAgICByZXR1cm4gMDsKK30KKwordGVtcGxh
dGU8dHlwZW5hbWUgVD4KK3ZvaWQqIEFsbG9jYXRvcjo6ZnJlZUxpc3RBbGxvY2F0ZSgpCit7Cisg
ICAgdm9pZCoqIHJlc3VsdCA9IG1fZnJlZUxpc3RIZWFkOworICAgIGlmIChVTkxJS0VMWSghcmVz
dWx0KSkKKyAgICAgICAgcmV0dXJuIGFsbG9jYXRlU2xvdygpOworICAgIG1fZnJlZUxpc3RIZWFk
ID0gYml0d2lzZV9jYXN0PHZvaWQqKj4oKnJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30K
KwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK3ZvaWQqIEFsbG9jYXRvcjo6YWxsb2NhdGVTbG93KCkK
K3sKKyAgICBBU1NFUlQoIW1fZnJlZUxpc3RIZWFkKTsKKyAgICBBU1NFUlQoIW1fYnVtcFJlbWFp
bmluZyk7CisgICAgCisgICAgUGFnZUFsbG9jYXRpb25BbGlnbmVkIGFsbG9jYXRpb24gPSBQYWdl
QWxsb2NhdGlvbkFsaWduZWQ6OmFsbG9jYXRlKFJlZ2lvbjo6c2l6ZSgpLCBSZWdpb246OnNpemUo
KSwgT1NBbGxvY2F0b3I6OkpTR0NIZWFwUGFnZXMpOworICAgIGlmICghc3RhdGljX2Nhc3Q8Ym9v
bD4oYWxsb2NhdGlvbikpCisgICAgICAgIENSQVNIKCk7CisgICAgUmVnaW9uKiByZWdpb24gPSBz
dGF0aWNfY2FzdDxSZWdpb24qPihhbGxvY2F0aW9uLmJhc2UoKSk7CisgICAgcmVnaW9uLT5tX2Fs
bG9jYXRpb24gPSBtX2FsbG9jYXRpb247CisgICAgcmVnaW9uLT5tX2FsbG9jdG9yID0gdGhpczsK
KyAgICBzdGFydEJ1bXBpbmdJbihyZWdpb24pOworICAgIHJlZ2lvbi0+bV9uZXh0ID0gbV9yZWdp
b25IZWFkOworICAgIG1fcmVnaW9uSGVhZCA9IHJlZ2lvbjsKKyAgICAKKyAgICB2b2lkKiByZXN1
bHQgPSBidW1wQWxsb2NhdGUoKTsKKyAgICBBU1NFUlQocmVzdWx0KTsKKyAgICByZXR1cm4gcmVz
dWx0OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgordm9pZCBBbGxvY2F0b3I6OmZyZWVSZWdp
b25zU3RhcnRpbmdBdChSZWdpb24qIHJlZ2lvbikKK3sKKyAgICB3aGlsZSAocmVnaW9uKSB7Cisg
ICAgICAgIFJlZ2lvbiogbmV4dFJlZ2lvbiA9IHJlZ2lvbi0+bV9uZXh0OworICAgICAgICByZWdp
b24tPm1fYWxsb2NhdGlvbi5kZWFsbG9jYXRlKCk7CisgICAgICAgIHJlZ2lvbiA9IG5leHRSZWdp
b247CisgICAgfQorfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgordm9pZCBBbGxvY2F0b3I6OnN0
YXJ0QnVtcGluZ0luKFJlZ2lvbiogcmVnaW9uKQoreworICAgIG1fYnVtcEVuZCA9IHJlZ2lvbi0+
ZGF0YSgpICsgUmVnaW9uOjpudW1iZXJPZlRoaW5nc1BlclJlZ2lvbigpOworICAgIG1fYnVtcFJl
bWFpbmluZyA9IFJlZ2lvbjo6bnVtYmVyT2ZUaGluZ3NQZXJSZWdpb24oKTsKK30KKworfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRp
ZiAvLyBERkdBbGxvY2F0b3JfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0FyZ3VtZW50c1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRzU2ltcGxpZmljYXRpb25QaGFzZS5jcHAJKHJl
dmlzaW9uIDE0MDYxNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRz
U2ltcGxpZmljYXRpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE0OSwxMSArMTQ5LDEwIEBA
IHB1YmxpYzoKICAgICAgICAgICAgIGlmICghYmxvY2spCiAgICAgICAgICAgICAgICAgY29udGlu
dWU7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGluZGV4SW5CbG9jayA9IDA7IGluZGV4SW5C
bG9jayA8IGJsb2NrLT5zaXplKCk7ICsraW5kZXhJbkJsb2NrKSB7Ci0gICAgICAgICAgICAgICAg
Tm9kZUluZGV4IG5vZGVJbmRleCA9IGJsb2NrLT5hdChpbmRleEluQmxvY2spOwotICAgICAgICAg
ICAgICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW25vZGVJbmRleF07Ci0gICAgICAgICAgICAgICAg
aWYgKCFub2RlLnNob3VsZEdlbmVyYXRlKCkpCisgICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9
IGJsb2NrLT5hdChpbmRleEluQmxvY2spOworICAgICAgICAgICAgICAgIGlmICghbm9kZS0+c2hv
dWxkR2VuZXJhdGUoKSkKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAg
ICAgICAgc3dpdGNoIChub2RlLm9wKCkpIHsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUt
Pm9wKCkpIHsKICAgICAgICAgICAgICAgICBjYXNlIENyZWF0ZUFyZ3VtZW50czogewogICAgICAg
ICAgICAgICAgICAgICAvLyBJZ25vcmUgdGhpcyBvcC4gSWYgd2Ugc2VlIGEgbG9uZSBDcmVhdGVB
cmd1bWVudHMgdGhlbiB3ZSB3YW50IHRvCiAgICAgICAgICAgICAgICAgICAgIC8vIGNvbXBsZXRl
bHkgaWdub3JlIGl0IGJlY2F1c2U6CkBAIC0xNzMsMTYgKzE3MiwxNiBAQCBwdWJsaWM6CiAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBjYXNl
IFNldExvY2FsOiB7Ci0gICAgICAgICAgICAgICAgICAgIE5vZGUmIHNvdXJjZSA9IG1fZ3JhcGhb
bm9kZS5jaGlsZDEoKV07Ci0gICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSog
dmFyaWFibGVBY2Nlc3NEYXRhID0gbm9kZS52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKKyAgICAgICAg
ICAgICAgICAgICAgTm9kZSogc291cmNlID0gbm9kZS0+Y2hpbGQxKCkubm9kZSgpOworICAgICAg
ICAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9IG5v
ZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOwogICAgICAgICAgICAgICAgICAgICBpbnQgYXJndW1l
bnRzUmVnaXN0ZXIgPQotICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC51bmNoZWNrZWRB
cmd1bWVudHNSZWdpc3RlckZvcihub2RlLmNvZGVPcmlnaW4pOwotICAgICAgICAgICAgICAgICAg
ICBpZiAoc291cmNlLm9wKCkgIT0gQ3JlYXRlQXJndW1lbnRzICYmIHNvdXJjZS5vcCgpICE9IFBo
YW50b21Bcmd1bWVudHMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgudW5jaGVj
a2VkQXJndW1lbnRzUmVnaXN0ZXJGb3Iobm9kZS0+Y29kZU9yaWdpbik7CisgICAgICAgICAgICAg
ICAgICAgIGlmIChzb3VyY2UtPm9wKCkgIT0gQ3JlYXRlQXJndW1lbnRzICYmIHNvdXJjZS0+b3Ao
KSAhPSBQaGFudG9tQXJndW1lbnRzKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBNYWtl
IHN1cmUgdGhhdCB0aGUgc291cmNlIG9mIHRoZSBTZXRMb2NhbCBrbm93cyB0aGF0IGlmIGl0J3MK
ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGEgdmFyaWFibGUgdGhhdCB3ZSB0aGluayBpcyBh
bGlhc2VkIHRvIHRoZSBhcmd1bWVudHMsIHRoZW4gaXQKICAgICAgICAgICAgICAgICAgICAgICAg
IC8vIG1heSBlc2NhcGUgYXQgdGhpcyBwb2ludC4gSW4gZnV0dXJlLCB3ZSBjb3VsZCB0cmFjayB0
cmFuc2l0aXZlCiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhbGlhc2luZy4gQnV0IG5vdCB5
ZXQuCi0gICAgICAgICAgICAgICAgICAgICAgICBvYnNlcnZlQmFkQXJndW1lbnRzVXNlKG5vZGUu
Y2hpbGQxKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZUJhZEFyZ3VtZW50c1Vz
ZShzb3VyY2UpOwogICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBJZiB0aGlzIGlzIGFuIGFzc2lnbm1lbnQgdG8gdGhlIGFyZ3VtZW50cyByZWdpc3Rl
ciwgdGhlbgogICAgICAgICAgICAgICAgICAgICAgICAgLy8gcHJldGVuZCBhcyBpZiB0aGUgYXJn
dW1lbnRzIHdlcmUgY3JlYXRlZC4gV2UgZG9uJ3Qgd2FudCB0bwpAQCAtMTk1LDE0ICsxOTQsMTQg
QEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICAgICAgLy8gaW5pdF9sYXp5X3JlZyBzaW5j
ZSBpdCB0cmVhdHMgQ3JlYXRlQXJndW1lbnRzIGFzIHJlYWRpbmcKICAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIGxvY2FsIHZhcmlhYmxlcy4gVGhhdCBjb3VsZCBiZSBmaXhlZCwgYnV0IGl0J3Mg
ZWFzaWVyIHRvCiAgICAgICAgICAgICAgICAgICAgICAgICAvLyB3b3JrIGFyb3VuZCB0aGlzIGhl
cmUuCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc291cmNlLm9wKCkgPT0gSlNDb25zdGFu
dAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmICFzb3VyY2UudmFsdWVPZkpTQ29uc3Rh
bnQoY29kZUJsb2NrKCkpKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNvdXJjZS0+b3Ao
KSA9PSBKU0NvbnN0YW50CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgIXNvdXJjZS0+
dmFsdWVPZkpTQ29uc3RhbnQoY29kZUJsb2NrKCkpKQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoYXJndW1lbnRzUmVnaXN0ZXIgIT0gSW52YWxpZFZpcnR1YWxSZWdpc3RlcgogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICYmICh2YXJpYWJsZUFjY2Vzc0RhdGEtPmxvY2FsKCkg
PT0gYXJndW1lbnRzUmVnaXN0ZXIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwg
dmFyaWFibGVBY2Nlc3NEYXRhLT5sb2NhbCgpID09IHVubW9kaWZpZWRBcmd1bWVudHNSZWdpc3Rl
cihhcmd1bWVudHNSZWdpc3RlcikpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9j
cmVhdGVzQXJndW1lbnRzLmFkZChub2RlLmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBtX2NyZWF0ZXNBcmd1bWVudHMuYWRkKG5vZGUtPmNv
ZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KIApAQCAtMjE0LDE5ICsyMTMsMTkgQEAg
cHVibGljOgogICAgICAgICAgICAgICAgICAgICAgICAgQXJndW1lbnRzQWxpYXNpbmdEYXRhJiBk
YXRhID0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2FyZ3VtZW50c0FsaWFzaW5nLmZp
bmQodmFyaWFibGVBY2Nlc3NEYXRhKS0+dmFsdWU7CiAgICAgICAgICAgICAgICAgICAgICAgICBk
YXRhLm1lcmdlTm9uQXJndW1lbnRzQXNzaWdubWVudCgpOwotICAgICAgICAgICAgICAgICAgICAg
ICAgZGF0YS5tZXJnZUNhbGxDb250ZXh0KG5vZGUuY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUp
OworICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5tZXJnZUNhbGxDb250ZXh0KG5vZGUtPmNv
ZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIGlmIChhcmd1bWVu
dHNSZWdpc3RlciAhPSBJbnZhbGlkVmlydHVhbFJlZ2lzdGVyCiAgICAgICAgICAgICAgICAgICAg
ICAgICAmJiAodmFyaWFibGVBY2Nlc3NEYXRhLT5sb2NhbCgpID09IGFyZ3VtZW50c1JlZ2lzdGVy
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgdmFyaWFibGVBY2Nlc3NEYXRhLT5sb2Nh
bCgpID09IHVubW9kaWZpZWRBcmd1bWVudHNSZWdpc3Rlcihhcmd1bWVudHNSZWdpc3RlcikpKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS5jb2RlT3JpZ2luLmlubGluZUNhbGxG
cmFtZSA9PSBzb3VyY2UuY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpCisgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAobm9kZS0+Y29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUgPT0gc291cmNl
LT5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fY3JlYXRlc0FyZ3VtZW50cy5hZGQo
c291cmNlLmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIG1fY3JlYXRlc0FyZ3VtZW50cy5hZGQoc291cmNlLT5jb2RlT3JpZ2luLmlubGluZUNhbGxG
cmFtZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgICAgICBpZiAodmFyaWFibGVBY2Nlc3NEYXRhLT5pc0NhcHR1
cmVkKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fY3JlYXRlc0FyZ3VtZW50cy5hZGQo
c291cmNlLmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIG1fY3JlYXRlc0FyZ3VtZW50cy5hZGQoc291cmNlLT5jb2RlT3JpZ2luLmlubGluZUNhbGxG
cmFtZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgICAgICBBcmd1bWVudHNBbGlhc2luZ0RhdGEmIGRhdGEgPQpA
QCAtMjM0LDI5ICsyMzMsMjkgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICBkYXRhLm1l
cmdlQXJndW1lbnRzQXNzaWdubWVudCgpOwogICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGVu
c3VyZXMgdGhhdCB0aGUgdmFyaWFibGUncyB1c2VzIGFyZSBpbiB0aGUgc2FtZSBjb250ZXh0IGFz
CiAgICAgICAgICAgICAgICAgICAgIC8vIHRoZSBhcmd1bWVudHMgaXQgaXMgYWxpYXNpbmcuCi0g
ICAgICAgICAgICAgICAgICAgIGRhdGEubWVyZ2VDYWxsQ29udGV4dChub2RlLmNvZGVPcmlnaW4u
aW5saW5lQ2FsbEZyYW1lKTsKLSAgICAgICAgICAgICAgICAgICAgZGF0YS5tZXJnZUNhbGxDb250
ZXh0KHNvdXJjZS5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSk7CisgICAgICAgICAgICAgICAg
ICAgIGRhdGEubWVyZ2VDYWxsQ29udGV4dChub2RlLT5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFt
ZSk7CisgICAgICAgICAgICAgICAgICAgIGRhdGEubWVyZ2VDYWxsQ29udGV4dChzb3VyY2UtPmNv
ZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBj
YXNlIEdldExvY2FsOgogICAgICAgICAgICAgICAgIGNhc2UgUGhpOiB7Ci0gICAgICAgICAgICAg
ICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhID0gbm9kZS52YXJp
YWJsZUFjY2Vzc0RhdGEoKTsKKyAgICAgICAgICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRh
KiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKICAgICAg
ICAgICAgICAgICAgICAgaWYgKHZhcmlhYmxlQWNjZXNzRGF0YS0+aXNDYXB0dXJlZCgpKQogICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIEFyZ3VtZW50
c0FsaWFzaW5nRGF0YSYgZGF0YSA9CiAgICAgICAgICAgICAgICAgICAgICAgICBtX2FyZ3VtZW50
c0FsaWFzaW5nLmZpbmQodmFyaWFibGVBY2Nlc3NEYXRhKS0+dmFsdWU7Ci0gICAgICAgICAgICAg
ICAgICAgIGRhdGEubWVyZ2VDYWxsQ29udGV4dChub2RlLmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZy
YW1lKTsKKyAgICAgICAgICAgICAgICAgICAgZGF0YS5tZXJnZUNhbGxDb250ZXh0KG5vZGUtPmNv
ZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBj
YXNlIEZsdXNoOiB7Ci0gICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFy
aWFibGVBY2Nlc3NEYXRhID0gbm9kZS52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKKyAgICAgICAgICAg
ICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBub2RlLT52
YXJpYWJsZUFjY2Vzc0RhdGEoKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKHZhcmlhYmxlQWNj
ZXNzRGF0YS0+aXNDYXB0dXJlZCgpKQogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICAgICAgICAgIEFyZ3VtZW50c0FsaWFzaW5nRGF0YSYgZGF0YSA9CiAgICAgICAg
ICAgICAgICAgICAgICAgICBtX2FyZ3VtZW50c0FsaWFzaW5nLmZpbmQodmFyaWFibGVBY2Nlc3NE
YXRhKS0+dmFsdWU7Ci0gICAgICAgICAgICAgICAgICAgIGRhdGEubWVyZ2VDYWxsQ29udGV4dChu
b2RlLmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgZGF0
YS5tZXJnZUNhbGxDb250ZXh0KG5vZGUtPmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKTsKICAg
ICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIC8vIElmIGEgdmFyaWFibGUg
aXMgdXNlZCBpbiBhIGZsdXNoIHRoZW4gYnkgZGVmaW5pdGlvbiBpdCBlc2NhcGVzLgogICAgICAg
ICAgICAgICAgICAgICBkYXRhLmVzY2FwZXMgPSB0cnVlOwpAQCAtMjY0LDE4ICsyNjMsMTggQEAg
cHVibGljOgogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAg
ICAgICAgICAgY2FzZSBTZXRBcmd1bWVudDogewotICAgICAgICAgICAgICAgICAgICBWYXJpYWJs
ZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9IG5vZGUudmFyaWFibGVBY2Nlc3NEYXRh
KCk7CisgICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nl
c3NEYXRhID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CiAgICAgICAgICAgICAgICAgICAg
IGlmICh2YXJpYWJsZUFjY2Vzc0RhdGEtPmlzQ2FwdHVyZWQoKSkKICAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICBBcmd1bWVudHNBbGlhc2luZ0RhdGEm
IGRhdGEgPQogICAgICAgICAgICAgICAgICAgICAgICAgbV9hcmd1bWVudHNBbGlhc2luZy5maW5k
KHZhcmlhYmxlQWNjZXNzRGF0YSktPnZhbHVlOwogICAgICAgICAgICAgICAgICAgICBkYXRhLm1l
cmdlTm9uQXJndW1lbnRzQXNzaWdubWVudCgpOwotICAgICAgICAgICAgICAgICAgICBkYXRhLm1l
cmdlQ2FsbENvbnRleHQobm9kZS5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSk7CisgICAgICAg
ICAgICAgICAgICAgIGRhdGEubWVyZ2VDYWxsQ29udGV4dChub2RlLT5jb2RlT3JpZ2luLmlubGlu
ZUNhbGxGcmFtZSk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgY2FzZSBHZXRCeVZhbDog
ewotICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS5hcnJheU1vZGUoKS50eXBlKCkgIT0gQXJy
YXk6OkFyZ3VtZW50cykgeworICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS0+YXJyYXlNb2Rl
KCkudHlwZSgpICE9IEFycmF5OjpBcmd1bWVudHMpIHsKICAgICAgICAgICAgICAgICAgICAgICAg
IG9ic2VydmVCYWRBcmd1bWVudHNVc2VzKG5vZGUpOwogICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIH0KQEAgLTI4MywxOCArMjgyLDE4IEBAIHB1Ymxp
YzoKICAgICAgICAgICAgICAgICAgICAgLy8gVGhhdCdzIHNvIGF3ZnVsIGFuZCBwcmV0dHkgbXVj
aCBpbXBvc3NpYmxlIHNpbmNlIGl0IHdvdWxkCiAgICAgICAgICAgICAgICAgICAgIC8vIGltcGx5
IHRoYXQgdGhlIGFyZ3VtZW50cyB3ZXJlIHByZWRpY3RlZCBpbnRlZ2VyLCBidXQgaXQncwogICAg
ICAgICAgICAgICAgICAgICAvLyBnb29kIHRvIGJlIGRlZmVuc2l2ZSBhbmQgdGhvcm91Z2guCi0g
ICAgICAgICAgICAgICAgICAgIG9ic2VydmVCYWRBcmd1bWVudHNVc2Uobm9kZS5jaGlsZDIoKSk7
Ci0gICAgICAgICAgICAgICAgICAgIG9ic2VydmVQcm9wZXJBcmd1bWVudHNVc2Uobm9kZSwgbm9k
ZS5jaGlsZDEoKSk7CisgICAgICAgICAgICAgICAgICAgIG9ic2VydmVCYWRBcmd1bWVudHNVc2Uo
bm9kZS0+Y2hpbGQyKCkubm9kZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZVByb3Bl
ckFyZ3VtZW50c1VzZShub2RlLCBub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAg
ICAgICAgICAgY2FzZSBHZXRBcnJheUxlbmd0aDogewotICAgICAgICAgICAgICAgICAgICBpZiAo
bm9kZS5hcnJheU1vZGUoKS50eXBlKCkgIT0gQXJyYXk6OkFyZ3VtZW50cykgeworICAgICAgICAg
ICAgICAgICAgICBpZiAobm9kZS0+YXJyYXlNb2RlKCkudHlwZSgpICE9IEFycmF5OjpBcmd1bWVu
dHMpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIG9ic2VydmVCYWRBcmd1bWVudHNVc2VzKG5v
ZGUpOwogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBvYnNlcnZl
UHJvcGVyQXJndW1lbnRzVXNlKG5vZGUsIG5vZGUuY2hpbGQxKCkpOworICAgICAgICAgICAgICAg
ICAgICBvYnNlcnZlUHJvcGVyQXJndW1lbnRzVXNlKG5vZGUsIG5vZGUtPmNoaWxkMSgpKTsKICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgICAgICAKQEAgLTMzNSwxNiArMzM0LDE1IEBAIHB1YmxpYzoKICAgICAgICAgICAgIGlmICgh
YmxvY2spCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGluZGV4SW5CbG9jayA9IDA7IGluZGV4SW5CbG9jayA8IGJsb2NrLT5zaXplKCk7ICsraW5k
ZXhJbkJsb2NrKSB7Ci0gICAgICAgICAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRleCA9IGJsb2Nr
LT5hdChpbmRleEluQmxvY2spOwotICAgICAgICAgICAgICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBo
W25vZGVJbmRleF07Ci0gICAgICAgICAgICAgICAgaWYgKCFub2RlLnNob3VsZEdlbmVyYXRlKCkp
CisgICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5hdChpbmRleEluQmxvY2spOwor
ICAgICAgICAgICAgICAgIGlmICghbm9kZS0+c2hvdWxkR2VuZXJhdGUoKSkKICAgICAgICAgICAg
ICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGUub3AoKSAhPSBTZXRM
b2NhbCkKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSAhPSBTZXRMb2NhbCkKICAgICAg
ICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgTm9kZSYgc291cmNlID0g
bV9ncmFwaFtub2RlLmNoaWxkMSgpXTsKLSAgICAgICAgICAgICAgICBpZiAoc291cmNlLm9wKCkg
IT0gQ3JlYXRlQXJndW1lbnRzKQorICAgICAgICAgICAgICAgIE5vZGUqIHNvdXJjZSA9IG5vZGUt
PmNoaWxkMSgpLm5vZGUoKTsKKyAgICAgICAgICAgICAgICBpZiAoc291cmNlLT5vcCgpICE9IENy
ZWF0ZUFyZ3VtZW50cykKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAg
ICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBub2RlLnZhcmlh
YmxlQWNjZXNzRGF0YSgpOworICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFy
aWFibGVBY2Nlc3NEYXRhID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CiAgICAgICAgICAg
ICAgICAgaWYgKHZhcmlhYmxlQWNjZXNzRGF0YS0+aXNDYXB0dXJlZCgpKSB7CiAgICAgICAgICAg
ICAgICAgICAgIC8vIFRoZSBjYXB0dXJlZCBjYXNlIHdvdWxkIGhhdmUgYWxyZWFkeSBiZWVuIHRh
a2VuIGNhcmUgb2YgaW4gdGhlCiAgICAgICAgICAgICAgICAgICAgIC8vIHByZXZpb3VzIHBhc3Mu
CkBAIC0zNTYsNyArMzU0LDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIGlmIChkYXRhLmlz
VmFsaWQoKSkKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAg
Ci0gICAgICAgICAgICAgICAgbV9jcmVhdGVzQXJndW1lbnRzLmFkZChzb3VyY2UuY29kZU9yaWdp
bi5pbmxpbmVDYWxsRnJhbWUpOworICAgICAgICAgICAgICAgIG1fY3JlYXRlc0FyZ3VtZW50cy5h
ZGQoc291cmNlLT5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSk7CiAgICAgICAgICAgICB9CiAg
ICAgICAgIH0KICAgICAgICAgCkBAIC00MTQsMjQgKzQxMiwyMyBAQCBwdWJsaWM6CiAgICAgICAg
ICAgICBpZiAoIWJsb2NrKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpbmRleEluQmxvY2sgPSAwOyBpbmRleEluQmxvY2sgPCBibG9jay0+c2l6
ZSgpOyArK2luZGV4SW5CbG9jaykgewotICAgICAgICAgICAgICAgIE5vZGVJbmRleCBub2RlSW5k
ZXggPSBibG9jay0+YXQoaW5kZXhJbkJsb2NrKTsKLSAgICAgICAgICAgICAgICBOb2RlJiBub2Rl
ID0gbV9ncmFwaFtub2RlSW5kZXhdOwotICAgICAgICAgICAgICAgIGlmICghbm9kZS5zaG91bGRH
ZW5lcmF0ZSgpKQorICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+YXQoaW5kZXhJ
bkJsb2NrKTsKKyAgICAgICAgICAgICAgICBpZiAoIW5vZGUtPnNob3VsZEdlbmVyYXRlKCkpCiAg
ICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIAotICAgICAgICAg
ICAgICAgIHN3aXRjaCAobm9kZS5vcCgpKSB7CisgICAgICAgICAgICAgICAgc3dpdGNoIChub2Rl
LT5vcCgpKSB7CiAgICAgICAgICAgICAgICAgY2FzZSBTZXRMb2NhbDogewotICAgICAgICAgICAg
ICAgICAgICBOb2RlJiBzb3VyY2UgPSBtX2dyYXBoW25vZGUuY2hpbGQxKCldOwotICAgICAgICAg
ICAgICAgICAgICBpZiAoc291cmNlLm9wKCkgIT0gQ3JlYXRlQXJndW1lbnRzKQorICAgICAgICAg
ICAgICAgICAgICBOb2RlKiBzb3VyY2UgPSBub2RlLT5jaGlsZDEoKS5ub2RlKCk7CisgICAgICAg
ICAgICAgICAgICAgIGlmIChzb3VyY2UtPm9wKCkgIT0gQ3JlYXRlQXJndW1lbnRzKQogICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAg
ICAgICAgICAgICBpZiAobV9jcmVhdGVzQXJndW1lbnRzLmNvbnRhaW5zKHNvdXJjZS5jb2RlT3Jp
Z2luLmlubGluZUNhbGxGcmFtZSkpCisgICAgICAgICAgICAgICAgICAgIGlmIChtX2NyZWF0ZXNB
cmd1bWVudHMuY29udGFpbnMoc291cmNlLT5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSkpCiAg
ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgCi0gICAg
ICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhID0g
bm9kZS52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKKyAgICAgICAgICAgICAgICAgICAgVmFyaWFibGVB
Y2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEo
KTsKICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIGlmIChtX2dyYXBo
LmFyZ3VtZW50c1JlZ2lzdGVyRm9yKG5vZGUuY29kZU9yaWdpbikgPT0gdmFyaWFibGVBY2Nlc3NE
YXRhLT5sb2NhbCgpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICB8fCB1bm1vZGlmaWVkQXJn
dW1lbnRzUmVnaXN0ZXIobV9ncmFwaC5hcmd1bWVudHNSZWdpc3RlckZvcihub2RlLmNvZGVPcmln
aW4pKSA9PSB2YXJpYWJsZUFjY2Vzc0RhdGEtPmxvY2FsKCkpCisgICAgICAgICAgICAgICAgICAg
IGlmIChtX2dyYXBoLmFyZ3VtZW50c1JlZ2lzdGVyRm9yKG5vZGUtPmNvZGVPcmlnaW4pID09IHZh
cmlhYmxlQWNjZXNzRGF0YS0+bG9jYWwoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwg
dW5tb2RpZmllZEFyZ3VtZW50c1JlZ2lzdGVyKG1fZ3JhcGguYXJndW1lbnRzUmVnaXN0ZXJGb3Io
bm9kZS0+Y29kZU9yaWdpbikpID09IHZhcmlhYmxlQWNjZXNzRGF0YS0+bG9jYWwoKSkKICAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgICAgICAgICAgICAgIEFTU0VSVCgh
dmFyaWFibGVBY2Nlc3NEYXRhLT5pc0NhcHR1cmVkKCkpOwpAQCAtNDY5LDE2ICs0NjYsMTYgQEAg
cHVibGljOgogICAgICAgICAgICAgICAgIGNhc2UgRm9yd2FyZFN0cnVjdHVyZVRyYW5zaXRpb25X
YXRjaHBvaW50OgogICAgICAgICAgICAgICAgIGNhc2UgQ2hlY2tBcnJheTogewogICAgICAgICAg
ICAgICAgICAgICAvLyBXZSBjYW4ganVzdCBnZXQgcmlkIG9mIHRoaXMgbm9kZSwgaWYgaXQgcmVm
ZXJlbmNlcyBhIHBoYW50b20gYXJndW1lbnQuCi0gICAgICAgICAgICAgICAgICAgIGlmICghaXNP
S1RvT3B0aW1pemUobV9ncmFwaFtub2RlLmNoaWxkMSgpXSkpCisgICAgICAgICAgICAgICAgICAg
IGlmICghaXNPS1RvT3B0aW1pemUobm9kZS0+Y2hpbGQxKCkubm9kZSgpKSkKICAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLmRlcmVmKG5v
ZGUuY2hpbGQxKCkpOwotICAgICAgICAgICAgICAgICAgICBub2RlLnNldE9wQW5kRGVmYXVsdEZs
YWdzKFBoYW50b20pOwotICAgICAgICAgICAgICAgICAgICBub2RlLmNoaWxkcmVuLnNldENoaWxk
MShFZGdlKCkpOworICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLmRlcmVmKG5vZGUtPmNoaWxk
MSgpKTsKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+c2V0T3BBbmREZWZhdWx0RmxhZ3MoUGhh
bnRvbSk7CisgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkcmVuLnNldENoaWxkMShFZGdl
KCkpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGNhc2UgR2V0QnlWYWw6IHsKLSAgICAg
ICAgICAgICAgICAgICAgaWYgKG5vZGUuYXJyYXlNb2RlKCkudHlwZSgpICE9IEFycmF5OjpBcmd1
bWVudHMpCisgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS50eXBlKCkg
IT0gQXJyYXk6OkFyZ3VtZW50cykKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogCiAg
ICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgY2FuIGJlIHNpbXBsaWZpZWQgdG8gR2V0TXlBcmd1
bWVudEJ5VmFsIGlmIHdlIGtub3cgdGhhdApAQCAtNDg4LDI4ICs0ODUsMjggQEAgcHVibGljOgog
ICAgICAgICAgICAgICAgICAgICAvLyAyKSBJdHMgZmlyc3QgY2hpbGQgaXMgQ3JlYXRlQXJndW1l
bnRzIGFuZCBpdHMgSW5saW5lQ2FsbEZyYW1lKgogICAgICAgICAgICAgICAgICAgICAvLyAgICBp
cyBub3QgbWFya2VkIGFzIGNyZWF0aW5nIGFyZ3VtZW50cy4KICAgICAgICAgICAgICAgICAgICAg
Ci0gICAgICAgICAgICAgICAgICAgIGlmICghaXNPS1RvT3B0aW1pemUobV9ncmFwaFtub2RlLmNo
aWxkMSgpXSkpCisgICAgICAgICAgICAgICAgICAgIGlmICghaXNPS1RvT3B0aW1pemUobm9kZS0+
Y2hpbGQxKCkubm9kZSgpKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5kZXJlZihub2RlLmNo
aWxkMSgpKTsKLSAgICAgICAgICAgICAgICAgICAgbm9kZS5jaGlsZHJlbi5jaGlsZDEoKSA9IG5v
ZGUuY2hpbGRyZW4uY2hpbGQyKCk7Ci0gICAgICAgICAgICAgICAgICAgIG5vZGUuY2hpbGRyZW4u
Y2hpbGQyKCkgPSBFZGdlKCk7Ci0gICAgICAgICAgICAgICAgICAgIG5vZGUuc2V0T3BBbmREZWZh
dWx0RmxhZ3MoR2V0TXlBcmd1bWVudEJ5VmFsKTsKKyAgICAgICAgICAgICAgICAgICAgbV9ncmFw
aC5kZXJlZihub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxk
cmVuLmNoaWxkMSgpID0gbm9kZS0+Y2hpbGRyZW4uY2hpbGQyKCk7CisgICAgICAgICAgICAgICAg
ICAgIG5vZGUtPmNoaWxkcmVuLmNoaWxkMigpID0gRWRnZSgpOworICAgICAgICAgICAgICAgICAg
ICBub2RlLT5zZXRPcEFuZERlZmF1bHRGbGFncyhHZXRNeUFyZ3VtZW50QnlWYWwpOwogICAgICAg
ICAgICAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgLS1pbmRl
eEluQmxvY2s7IC8vIEZvcmNlIHJlY29uc2lkZXJhdGlvbiBvZiB0aGlzIG9wIG5vdyB0aGF0IGl0
J3MgYSBHZXRNeUFyZ3VtZW50QnlWYWwuCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgY2Fz
ZSBHZXRBcnJheUxlbmd0aDogewotICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS5hcnJheU1v
ZGUoKS50eXBlKCkgIT0gQXJyYXk6OkFyZ3VtZW50cykKKyAgICAgICAgICAgICAgICAgICAgaWYg
KG5vZGUtPmFycmF5TW9kZSgpLnR5cGUoKSAhPSBBcnJheTo6QXJndW1lbnRzKQogICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAg
ICAgICAgICBpZiAoIWlzT0tUb09wdGltaXplKG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0pKQorICAg
ICAgICAgICAgICAgICAgICBpZiAoIWlzT0tUb09wdGltaXplKG5vZGUtPmNoaWxkMSgpLm5vZGUo
KSkpCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAg
Ci0gICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguZGVyZWYobm9kZS5jaGlsZDEoKSk7Ci0gICAg
ICAgICAgICAgICAgICAgIG5vZGUuY2hpbGRyZW4uY2hpbGQxKCkgPSBFZGdlKCk7Ci0gICAgICAg
ICAgICAgICAgICAgIG5vZGUuc2V0T3BBbmREZWZhdWx0RmxhZ3MoR2V0TXlBcmd1bWVudHNMZW5n
dGgpOworICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLmRlcmVmKG5vZGUtPmNoaWxkMSgpKTsK
KyAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGRyZW4uY2hpbGQxKCkgPSBFZGdlKCk7Cisg
ICAgICAgICAgICAgICAgICAgIG5vZGUtPnNldE9wQW5kRGVmYXVsdEZsYWdzKEdldE15QXJndW1l
bnRzTGVuZ3RoKTsKICAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCA9IHRydWU7CiAgICAgICAg
ICAgICAgICAgICAgIC0taW5kZXhJbkJsb2NrOyAvLyBGb3JjZSByZWNvbnNpZGVyYXRpb24gb2Yg
dGhpcyBvcCBub2V3IHRoYXQgaXQncyBhIEdldE15QXJndW1lbnRzTGVuZ3RoLgogICAgICAgICAg
ICAgICAgICAgICBicmVhazsKQEAgLTUxNywxNiArNTE0LDE2IEBAIHB1YmxpYzoKICAgICAgICAg
ICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgY2FzZSBHZXRNeUFyZ3VtZW50c0xlbmd0aDoK
ICAgICAgICAgICAgICAgICBjYXNlIEdldE15QXJndW1lbnRzTGVuZ3RoU2FmZTogewotICAgICAg
ICAgICAgICAgICAgICBpZiAobV9jcmVhdGVzQXJndW1lbnRzLmNvbnRhaW5zKG5vZGUuY29kZU9y
aWdpbi5pbmxpbmVDYWxsRnJhbWUpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQo
bm9kZS5vcCgpID09IEdldE15QXJndW1lbnRzTGVuZ3RoU2FmZSk7CisgICAgICAgICAgICAgICAg
ICAgIGlmIChtX2NyZWF0ZXNBcmd1bWVudHMuY29udGFpbnMobm9kZS0+Y29kZU9yaWdpbi5pbmxp
bmVDYWxsRnJhbWUpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQobm9kZS0+b3Ao
KSA9PSBHZXRNeUFyZ3VtZW50c0xlbmd0aFNhZmUpOwogICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgaWYgKG5v
ZGUub3AoKSA9PSBHZXRNeUFyZ3VtZW50c0xlbmd0aFNhZmUpIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIG5vZGUuc2V0T3AoR2V0TXlBcmd1bWVudHNMZW5ndGgpOworICAgICAgICAgICAgICAg
ICAgICBpZiAobm9kZS0+b3AoKSA9PSBHZXRNeUFyZ3VtZW50c0xlbmd0aFNhZmUpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIG5vZGUtPnNldE9wKEdldE15QXJndW1lbnRzTGVuZ3RoKTsKICAg
ICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBDb2RlT3JpZ2lu
IGNvZGVPcmlnaW4gPSBub2RlLmNvZGVPcmlnaW47CisgICAgICAgICAgICAgICAgICAgIENvZGVP
cmlnaW4gY29kZU9yaWdpbiA9IG5vZGUtPmNvZGVPcmlnaW47CiAgICAgICAgICAgICAgICAgICAg
IGlmICghY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpCiAgICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgCkBAIC01MzcsMzIgKzUzNCwzMiBAQCBwdWJs
aWM6CiAgICAgICAgICAgICAgICAgICAgICAgICBDaGVja0FyZ3VtZW50c05vdENyZWF0ZWQsIGNv
ZGVPcmlnaW4pOwogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgbV9n
cmFwaC5jb252ZXJ0VG9Db25zdGFudCgKLSAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVJbmRl
eCwganNOdW1iZXIoY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50cy5zaXplKCkg
LSAxKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBub2RlLCBqc051bWJlcihjb2RlT3JpZ2lu
LmlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzLnNpemUoKSAtIDEpKTsKICAgICAgICAgICAgICAg
ICAgICAgY2hhbmdlZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgY2FzZSBH
ZXRNeUFyZ3VtZW50QnlWYWw6CiAgICAgICAgICAgICAgICAgY2FzZSBHZXRNeUFyZ3VtZW50QnlW
YWxTYWZlOiB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChtX2NyZWF0ZXNBcmd1bWVudHMuY29u
dGFpbnMobm9kZS5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSkpIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIEFTU0VSVChub2RlLm9wKCkgPT0gR2V0TXlBcmd1bWVudEJ5VmFsU2FmZSk7Cisg
ICAgICAgICAgICAgICAgICAgIGlmIChtX2NyZWF0ZXNBcmd1bWVudHMuY29udGFpbnMobm9kZS0+
Y29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBB
U1NFUlQobm9kZS0+b3AoKSA9PSBHZXRNeUFyZ3VtZW50QnlWYWxTYWZlKTsKICAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgICAgIGlmIChub2RlLm9wKCkgPT0gR2V0TXlBcmd1bWVudEJ5VmFsU2FmZSkgewotICAgICAg
ICAgICAgICAgICAgICAgICAgbm9kZS5zZXRPcChHZXRNeUFyZ3VtZW50QnlWYWwpOworICAgICAg
ICAgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBHZXRNeUFyZ3VtZW50QnlWYWxTYWZlKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5zZXRPcChHZXRNeUFyZ3VtZW50QnlWYWwp
OwogICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCA9IHRydWU7CiAgICAgICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgaWYgKCFub2RlLmNvZGVPcmlnaW4uaW5saW5l
Q2FsbEZyYW1lKQorICAgICAgICAgICAgICAgICAgICBpZiAoIW5vZGUtPmNvZGVPcmlnaW4uaW5s
aW5lQ2FsbEZyYW1lKQogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAgICAgICAgIGlmICghbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5oYXNDb25zdGFudCgpKQorICAg
ICAgICAgICAgICAgICAgICBpZiAoIW5vZGUtPmNoaWxkMSgpLT5oYXNDb25zdGFudCgpKQogICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIEpTVmFsdWUg
dmFsdWUgPSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLnZhbHVlT2ZKU0NvbnN0YW50KGNvZGVCbG9j
aygpKTsKKyAgICAgICAgICAgICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IG5vZGUtPmNoaWxkMSgp
LT52YWx1ZU9mSlNDb25zdGFudChjb2RlQmxvY2soKSk7CiAgICAgICAgICAgICAgICAgICAgIGlm
ICghdmFsdWUuaXNJbnQzMigpKQogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICAgICAgICAgIGludDMyX3QgaW5kZXggPSB2YWx1ZS5hc0ludDMyKCk7CiAgICAgICAg
ICAgICAgICAgICAgIGlmIChpbmRleCA8IDAKICAgICAgICAgICAgICAgICAgICAgICAgIHx8IHN0
YXRpY19jYXN0PHNpemVfdD4oaW5kZXggKyAxKSA+PQotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG5vZGUuY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50cy5zaXplKCkpCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y29kZU9yaWdpbi5pbmxpbmVDYWxsRnJh
bWUtPmFyZ3VtZW50cy5zaXplKCkpCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIC8vIFdlIGtub3cgd2hpY2gg
YXJndW1lbnQgdGhpcyBpcyBhY2Nlc3NpbmcuIEJ1dCBvbmx5IGFmdGVyIHdlIGhhdmUgY2hlY2tl
ZApAQCAtNTc0LDEzICs1NzEsMTMgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICAvLyBo
YXMgcnVuIC0gdGhlcmVmb3JlIGl0IG1ha2VzIGxpdHRsZSBzZW5zZSB0byBsaW5rIHRoZSBHZXRM
b2NhbCBvcGVyYXRpb24KICAgICAgICAgICAgICAgICAgICAgLy8gaW50byB0aGUgVmFyaWFibGVB
Y2Nlc3NEYXRhIGFuZCBQaGkgZ3JhcGhzLgogCi0gICAgICAgICAgICAgICAgICAgIENvZGVPcmln
aW4gY29kZU9yaWdpbiA9IG5vZGUuY29kZU9yaWdpbjsKLSAgICAgICAgICAgICAgICAgICAgQWRq
YWNlbmN5TGlzdCBjaGlsZHJlbiA9IG5vZGUuY2hpbGRyZW47CisgICAgICAgICAgICAgICAgICAg
IENvZGVPcmlnaW4gY29kZU9yaWdpbiA9IG5vZGUtPmNvZGVPcmlnaW47CisgICAgICAgICAgICAg
ICAgICAgIEFkamFjZW5jeUxpc3QgY2hpbGRyZW4gPSBub2RlLT5jaGlsZHJlbjsKICAgICAgICAg
ICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIG5vZGUuY29udmVydFRvR2V0TG9jYWxV
bmxpbmtlZCgKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y29udmVydFRvR2V0TG9jYWxVbmxp
bmtlZCgKICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rl
cj4oCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS5jb2RlT3JpZ2luLmlubGluZUNh
bGxGcmFtZS0+c3RhY2tPZmZzZXQgKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3Jh
cGguYmFzZWxpbmVDb2RlQmxvY2tGb3Iobm9kZS5jb2RlT3JpZ2luKS0+YXJndW1lbnRJbmRleEFm
dGVyQ2FwdHVyZShpbmRleCkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5j
b2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG1fZ3JhcGguYmFzZWxpbmVDb2RlQmxvY2tGb3Iobm9kZS0+Y29kZU9yaWdp
biktPmFyZ3VtZW50SW5kZXhBZnRlckNhcHR1cmUoaW5kZXgpKSk7CiAKICAgICAgICAgICAgICAg
ICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCiAgICAgICAgICAgICAgICAgICAgICAgICBp
bmRleEluQmxvY2ssIERvbnRSZWZDaGlsZHJlbiwgRG9udFJlZk5vZGUsIFNwZWNOb25lLCBDaGVj
a0FyZ3VtZW50c05vdENyZWF0ZWQsCkBAIC01OTQsMTMgKzU5MSwxMyBAQCBwdWJsaWM6CiAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBjYXNl
IFRlYXJPZmZBcmd1bWVudHM6IHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG1fY3JlYXRlc0Fy
Z3VtZW50cy5jb250YWlucyhub2RlLmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKSkKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKG1fY3JlYXRlc0FyZ3VtZW50cy5jb250YWlucyhub2RlLT5jb2Rl
T3JpZ2luLmlubGluZUNhbGxGcmFtZSkpCiAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51
ZTsKICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIG5vZGUuc2V0T3BB
bmREZWZhdWx0RmxhZ3MoTm9wKTsKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+c2V0T3BBbmRE
ZWZhdWx0RmxhZ3MoTm9wKTsKICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5jbGVhckFuZERl
cmVmQ2hpbGQxKG5vZGUpOwogICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLmNsZWFyQW5kRGVy
ZWZDaGlsZDIobm9kZSk7Ci0gICAgICAgICAgICAgICAgICAgIG5vZGUuc2V0UmVmQ291bnQoMCk7
CisgICAgICAgICAgICAgICAgICAgIG5vZGUtPnNldFJlZkNvdW50KDApOwogICAgICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIApA
QCAtNjE2LDI1ICs2MTMsMjMgQEAgcHVibGljOgogICAgICAgICAgICAgaWYgKCFibG9jaykKICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW5kZXhJ
bkJsb2NrID0gMDsgaW5kZXhJbkJsb2NrIDwgYmxvY2stPnNpemUoKTsgKytpbmRleEluQmxvY2sp
IHsKLSAgICAgICAgICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4ID0gYmxvY2stPmF0KGluZGV4
SW5CbG9jayk7Ci0gICAgICAgICAgICAgICAgTm9kZSogbm9kZVB0ciA9ICZtX2dyYXBoW25vZGVJ
bmRleF07Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGVQdHItPm9wKCkgIT0gQ3JlYXRlQXJndW1l
bnRzKQorICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+YXQoaW5kZXhJbkJsb2Nr
KTsKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSAhPSBDcmVhdGVBcmd1bWVudHMpCiAg
ICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIC8vIElmIHRoaXMg
aXMgYSBDcmVhdGVBcmd1bWVudHMgZm9yIGFuIElubGluZUNhbGxGcmFtZSogdGhhdCBkb2VzCiAg
ICAgICAgICAgICAgICAgLy8gbm90IGNyZWF0ZSBhcmd1bWVudHMsIHRoZW4gcmVwbGFjZSBpdCB3
aXRoIGEgUGhhbnRvbUFyZ3VtZW50cy4KICAgICAgICAgICAgICAgICAvLyBQaGFudG9tQXJndW1l
bnRzIGlzIGEgbm9uLWV4ZWN1dGluZyBub2RlIHRoYXQganVzdCBpbmRpY2F0ZXMKICAgICAgICAg
ICAgICAgICAvLyB0aGF0IHRoZSBub2RlIHNob3VsZCBiZSByZWlmaWVkIGFzIGFuIGFyZ3VtZW50
cyBvYmplY3Qgb24gT1NSCiAgICAgICAgICAgICAgICAgLy8gZXhpdC4KLSAgICAgICAgICAgICAg
ICBpZiAobV9jcmVhdGVzQXJndW1lbnRzLmNvbnRhaW5zKG5vZGVQdHItPmNvZGVPcmlnaW4uaW5s
aW5lQ2FsbEZyYW1lKSkKKyAgICAgICAgICAgICAgICBpZiAobV9jcmVhdGVzQXJndW1lbnRzLmNv
bnRhaW5zKG5vZGUtPmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKSkKICAgICAgICAgICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGVQdHItPnNob3VsZEdlbmVy
YXRlKCkpIHsKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+c2hvdWxkR2VuZXJhdGUoKSkgewog
ICAgICAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKICAgICAgICAgICAg
ICAgICAgICAgICAgIGluZGV4SW5CbG9jaywgRG9udFJlZkNoaWxkcmVuLCBEb250UmVmTm9kZSwg
U3BlY05vbmUsIFBoYW50b20sCi0gICAgICAgICAgICAgICAgICAgICAgICBub2RlUHRyLT5jb2Rl
T3JpZ2luLCBub2RlUHRyLT5jaGlsZHJlbik7Ci0gICAgICAgICAgICAgICAgICAgIG5vZGVQdHIg
PSAmbV9ncmFwaFtub2RlSW5kZXhdOworICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y29k
ZU9yaWdpbiwgbm9kZS0+Y2hpbGRyZW4pOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICBub2RlUHRyLT5zZXRPcEFuZERlZmF1bHRGbGFncyhQaGFudG9tQXJndW1lbnRzKTsKLSAg
ICAgICAgICAgICAgICBub2RlUHRyLT5jaGlsZHJlbi5yZXNldCgpOworICAgICAgICAgICAgICAg
IG5vZGUtPnNldE9wQW5kRGVmYXVsdEZsYWdzKFBoYW50b21Bcmd1bWVudHMpOworICAgICAgICAg
ICAgICAgIG5vZGUtPmNoaWxkcmVuLnJlc2V0KCk7CiAgICAgICAgICAgICAgICAgY2hhbmdlZCA9
IHRydWU7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpbnNlcnRpb25TZXQuZXhlY3V0ZShi
bG9jayk7CkBAIC02NTQsMjggKzY0OSwyNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgRGVmYXVs
dEhhc2g8VmFyaWFibGVBY2Nlc3NEYXRhKj46Okhhc2gsCiAgICAgICAgICAgICBOdWxsYWJsZUhh
c2hUcmFpdHM8VmFyaWFibGVBY2Nlc3NEYXRhKj4gPiBtX2FyZ3VtZW50c0FsaWFzaW5nOwogCi0g
ICAgdm9pZCBvYnNlcnZlQmFkQXJndW1lbnRzVXNlKEVkZ2UgZWRnZSkKKyAgICB2b2lkIG9ic2Vy
dmVCYWRBcmd1bWVudHNVc2UoTm9kZSogbm9kZSkKICAgICB7Ci0gICAgICAgIGlmICghZWRnZSkK
KyAgICAgICAgaWYgKCFub2RlKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAKLSAgICAg
ICAgTm9kZSYgY2hpbGQgPSBtX2dyYXBoW2VkZ2VdOwotICAgICAgICBzd2l0Y2ggKGNoaWxkLm9w
KCkpIHsKKyAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CiAgICAgICAgIGNhc2UgQ3JlYXRl
QXJndW1lbnRzOiB7Ci0gICAgICAgICAgICBtX2NyZWF0ZXNBcmd1bWVudHMuYWRkKGNoaWxkLmNv
ZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKTsKKyAgICAgICAgICAgIG1fY3JlYXRlc0FyZ3VtZW50
cy5hZGQobm9kZS0+Y29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBjYXNlIEdldExvY2FsOiB7Ci0g
ICAgICAgICAgICBpbnQgYXJndW1lbnRzUmVnaXN0ZXIgPSBtX2dyYXBoLnVuY2hlY2tlZEFyZ3Vt
ZW50c1JlZ2lzdGVyRm9yKGNoaWxkLmNvZGVPcmlnaW4pOworICAgICAgICAgICAgaW50IGFyZ3Vt
ZW50c1JlZ2lzdGVyID0gbV9ncmFwaC51bmNoZWNrZWRBcmd1bWVudHNSZWdpc3RlckZvcihub2Rl
LT5jb2RlT3JpZ2luKTsKICAgICAgICAgICAgIGlmIChhcmd1bWVudHNSZWdpc3RlciAhPSBJbnZh
bGlkVmlydHVhbFJlZ2lzdGVyCi0gICAgICAgICAgICAgICAgJiYgKGNoaWxkLmxvY2FsKCkgPT0g
YXJndW1lbnRzUmVnaXN0ZXIKLSAgICAgICAgICAgICAgICAgICAgfHwgY2hpbGQubG9jYWwoKSA9
PSB1bm1vZGlmaWVkQXJndW1lbnRzUmVnaXN0ZXIoYXJndW1lbnRzUmVnaXN0ZXIpKSkgewotICAg
ICAgICAgICAgICAgIG1fY3JlYXRlc0FyZ3VtZW50cy5hZGQoY2hpbGQuY29kZU9yaWdpbi5pbmxp
bmVDYWxsRnJhbWUpOworICAgICAgICAgICAgICAgICYmIChub2RlLT5sb2NhbCgpID09IGFyZ3Vt
ZW50c1JlZ2lzdGVyCisgICAgICAgICAgICAgICAgICAgIHx8IG5vZGUtPmxvY2FsKCkgPT0gdW5t
b2RpZmllZEFyZ3VtZW50c1JlZ2lzdGVyKGFyZ3VtZW50c1JlZ2lzdGVyKSkpIHsKKyAgICAgICAg
ICAgICAgICBtX2NyZWF0ZXNBcmd1bWVudHMuYWRkKG5vZGUtPmNvZGVPcmlnaW4uaW5saW5lQ2Fs
bEZyYW1lKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIAotICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEg
PSBjaGlsZC52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKKyAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNz
RGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CiAg
ICAgICAgICAgICBpZiAodmFyaWFibGVBY2Nlc3NEYXRhLT5pc0NhcHR1cmVkKCkpCiAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKQEAgLTY4OSwxNiArNjgzLDE1IEBAIHByaXZh
dGU6CiAgICAgICAgIH0KICAgICB9CiAgICAgCi0gICAgdm9pZCBvYnNlcnZlQmFkQXJndW1lbnRz
VXNlcyhOb2RlJiBub2RlKQorICAgIHZvaWQgb2JzZXJ2ZUJhZEFyZ3VtZW50c1VzZXMoTm9kZSog
bm9kZSkKICAgICB7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1fZ3JhcGgubnVtQ2hpbGRy
ZW4obm9kZSk7IGktLTspCi0gICAgICAgICAgICBvYnNlcnZlQmFkQXJndW1lbnRzVXNlKG1fZ3Jh
cGguY2hpbGQobm9kZSwgaSkpOworICAgICAgICAgICAgb2JzZXJ2ZUJhZEFyZ3VtZW50c1VzZSht
X2dyYXBoLmNoaWxkKG5vZGUsIGkpLm5vZGUoKSk7CiAgICAgfQogICAgIAotICAgIHZvaWQgb2Jz
ZXJ2ZVByb3BlckFyZ3VtZW50c1VzZShOb2RlJiBub2RlLCBFZGdlIGVkZ2UpCisgICAgdm9pZCBv
YnNlcnZlUHJvcGVyQXJndW1lbnRzVXNlKE5vZGUqIG5vZGUsIEVkZ2UgZWRnZSkKICAgICB7Ci0g
ICAgICAgIE5vZGUmIGNoaWxkID0gbV9ncmFwaFtlZGdlXTsKLSAgICAgICAgaWYgKGNoaWxkLm9w
KCkgIT0gR2V0TG9jYWwpIHsKKyAgICAgICAgaWYgKGVkZ2UtPm9wKCkgIT0gR2V0TG9jYWwpIHsK
ICAgICAgICAgICAgIC8vIFdoZW4gY2FuIHRoaXMgaGFwcGVuPyBBdCBsZWFzdCB0d28gY2FzZXMg
dGhhdCBJIGNhbiB0aGluawogICAgICAgICAgICAgLy8gb2Y6CiAgICAgICAgICAgICAvLwpAQCAt
NzEwLDE4ICs3MDMsMTggQEAgcHJpdmF0ZToKICAgICAgICAgICAgIC8vCiAgICAgICAgICAgICAv
LyAyKSBJZiB3ZSdyZSBhY2Nlc3NpbmcgYXJndW1lbnRzIHdlIGdvdCBmcm9tIHRoZSBoZWFwIQog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKGNoaWxkLm9wKCkg
PT0gQ3JlYXRlQXJndW1lbnRzCi0gICAgICAgICAgICAgICAgJiYgbm9kZS5jb2RlT3JpZ2luLmlu
bGluZUNhbGxGcmFtZQotICAgICAgICAgICAgICAgICAgICE9IGNoaWxkLmNvZGVPcmlnaW4uaW5s
aW5lQ2FsbEZyYW1lKQotICAgICAgICAgICAgICAgIG1fY3JlYXRlc0FyZ3VtZW50cy5hZGQoY2hp
bGQuY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpOworICAgICAgICAgICAgaWYgKGVkZ2UtPm9w
KCkgPT0gQ3JlYXRlQXJndW1lbnRzCisgICAgICAgICAgICAgICAgJiYgbm9kZS0+Y29kZU9yaWdp
bi5pbmxpbmVDYWxsRnJhbWUKKyAgICAgICAgICAgICAgICAgICAhPSBlZGdlLT5jb2RlT3JpZ2lu
LmlubGluZUNhbGxGcmFtZSkKKyAgICAgICAgICAgICAgICBtX2NyZWF0ZXNBcmd1bWVudHMuYWRk
KGVkZ2UtPmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKTsKICAgICAgICAgICAgIAogICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAg
ICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBjaGlsZC52YXJpYWJs
ZUFjY2Vzc0RhdGEoKTsKLSAgICAgICAgaWYgKGNoaWxkLmxvY2FsKCkgPT0gbV9ncmFwaC51bmNo
ZWNrZWRBcmd1bWVudHNSZWdpc3RlckZvcihjaGlsZC5jb2RlT3JpZ2luKQotICAgICAgICAgICAg
JiYgbm9kZS5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSAhPSBjaGlsZC5jb2RlT3JpZ2luLmlu
bGluZUNhbGxGcmFtZSkgewotICAgICAgICAgICAgbV9jcmVhdGVzQXJndW1lbnRzLmFkZChjaGls
ZC5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSk7CisgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0
YSogdmFyaWFibGVBY2Nlc3NEYXRhID0gZWRnZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CisgICAg
ICAgIGlmIChlZGdlLT5sb2NhbCgpID09IG1fZ3JhcGgudW5jaGVja2VkQXJndW1lbnRzUmVnaXN0
ZXJGb3IoZWRnZS0+Y29kZU9yaWdpbikKKyAgICAgICAgICAgICYmIG5vZGUtPmNvZGVPcmlnaW4u
aW5saW5lQ2FsbEZyYW1lICE9IGVkZ2UtPmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKSB7Cisg
ICAgICAgICAgICBtX2NyZWF0ZXNBcmd1bWVudHMuYWRkKGVkZ2UtPmNvZGVPcmlnaW4uaW5saW5l
Q2FsbEZyYW1lKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCkBAIC03MjksMTgg
KzcyMiwxOCBAQCBwcml2YXRlOgogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAKICAgICAg
ICAgQXJndW1lbnRzQWxpYXNpbmdEYXRhJiBkYXRhID0gbV9hcmd1bWVudHNBbGlhc2luZy5maW5k
KHZhcmlhYmxlQWNjZXNzRGF0YSktPnZhbHVlOwotICAgICAgICBkYXRhLm1lcmdlQ2FsbENvbnRl
eHQobm9kZS5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSk7CisgICAgICAgIGRhdGEubWVyZ2VD
YWxsQ29udGV4dChub2RlLT5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSk7CiAgICAgfQogICAg
IAotICAgIGJvb2wgaXNPS1RvT3B0aW1pemUoTm9kZSYgc291cmNlKQorICAgIGJvb2wgaXNPS1Rv
T3B0aW1pemUoTm9kZSogc291cmNlKQogICAgIHsKLSAgICAgICAgaWYgKG1fY3JlYXRlc0FyZ3Vt
ZW50cy5jb250YWlucyhzb3VyY2UuY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpKQorICAgICAg
ICBpZiAobV9jcmVhdGVzQXJndW1lbnRzLmNvbnRhaW5zKHNvdXJjZS0+Y29kZU9yaWdpbi5pbmxp
bmVDYWxsRnJhbWUpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAKLSAgICAg
ICAgc3dpdGNoIChzb3VyY2Uub3AoKSkgeworICAgICAgICBzd2l0Y2ggKHNvdXJjZS0+b3AoKSkg
ewogICAgICAgICBjYXNlIEdldExvY2FsOiB7Ci0gICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0Rh
dGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9IHNvdXJjZS52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKLSAg
ICAgICAgICAgIGludCBhcmd1bWVudHNSZWdpc3RlciA9IG1fZ3JhcGgudW5jaGVja2VkQXJndW1l
bnRzUmVnaXN0ZXJGb3Ioc291cmNlLmNvZGVPcmlnaW4pOworICAgICAgICAgICAgVmFyaWFibGVB
Y2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBzb3VyY2UtPnZhcmlhYmxlQWNjZXNzRGF0
YSgpOworICAgICAgICAgICAgaW50IGFyZ3VtZW50c1JlZ2lzdGVyID0gbV9ncmFwaC51bmNoZWNr
ZWRBcmd1bWVudHNSZWdpc3RlckZvcihzb3VyY2UtPmNvZGVPcmlnaW4pOwogICAgICAgICAgICAg
aWYgKGFyZ3VtZW50c1JlZ2lzdGVyID09IEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIpCiAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBpZiAoYXJndW1lbnRzUmVnaXN0ZXIgPT0gdmFy
aWFibGVBY2Nlc3NEYXRhLT5sb2NhbCgpKQpAQCAtNzY4LDM4ICs3NjEsMzcgQEAgcHJpdmF0ZToK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICAKLSAgICB2b2lkIHJlbW92ZUFyZ3Vt
ZW50c1JlZmVyZW5jaW5nUGhhbnRvbUNoaWxkKE5vZGUmIG5vZGUsIHVuc2lnbmVkIGVkZ2VJbmRl
eCkKKyAgICB2b2lkIHJlbW92ZUFyZ3VtZW50c1JlZmVyZW5jaW5nUGhhbnRvbUNoaWxkKE5vZGUq
IG5vZGUsIHVuc2lnbmVkIGVkZ2VJbmRleCkKICAgICB7Ci0gICAgICAgIEVkZ2UgZWRnZSA9IG5v
ZGUuY2hpbGRyZW4uY2hpbGQoZWRnZUluZGV4KTsKKyAgICAgICAgRWRnZSBlZGdlID0gbm9kZS0+
Y2hpbGRyZW4uY2hpbGQoZWRnZUluZGV4KTsKICAgICAgICAgaWYgKCFlZGdlKQogICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICAKLSAgICAgICAgTm9kZSYgY2hpbGQgPSBtX2dyYXBoW2VkZ2Vd
OwotICAgICAgICBzd2l0Y2ggKGNoaWxkLm9wKCkpIHsKKyAgICAgICAgc3dpdGNoIChlZGdlLT5v
cCgpKSB7CiAgICAgICAgIGNhc2UgUGhpOiAvLyBBcmlzZXMgaWYgd2UgaGFkIENTRSBvbiBhIEdl
dExvY2FsIG9mIHRoZSBhcmd1bWVudHMgcmVnaXN0ZXIuCiAgICAgICAgIGNhc2UgR2V0TG9jYWw6
IC8vIEFyaXNlcyBpZiB3ZSBoYWQgQ1NFIG9uIGFuIGFyZ3VtZW50cyBhY2Nlc3MgdG8gYSB2YXJp
YWJsZSBhbGlhc2VkIHRvIHRoZSBhcmd1bWVudHMuCiAgICAgICAgIGNhc2UgU2V0TG9jYWw6IHsg
Ly8gQXJpc2VzIGlmIHdlIGhhZCBDU0Ugb24gYSBHZXRMb2NhbCBvZiB0aGUgYXJndW1lbnRzIHJl
Z2lzdGVyLgotICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0Rh
dGEgPSBjaGlsZC52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKKyAgICAgICAgICAgIFZhcmlhYmxlQWNj
ZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhID0gZWRnZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7
CiAgICAgICAgICAgICBib29sIGlzRGVhZEFyZ3VtZW50c1JlZ2lzdGVyID0KICAgICAgICAgICAg
ICAgICB2YXJpYWJsZUFjY2Vzc0RhdGEtPmxvY2FsKCkgPT0KLSAgICAgICAgICAgICAgICAgICAg
bV9ncmFwaC51bmNoZWNrZWRBcmd1bWVudHNSZWdpc3RlckZvcihjaGlsZC5jb2RlT3JpZ2luKQot
ICAgICAgICAgICAgICAgICYmICFtX2NyZWF0ZXNBcmd1bWVudHMuY29udGFpbnMoY2hpbGQuY29k
ZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpOworICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLnVu
Y2hlY2tlZEFyZ3VtZW50c1JlZ2lzdGVyRm9yKGVkZ2UtPmNvZGVPcmlnaW4pCisgICAgICAgICAg
ICAgICAgJiYgIW1fY3JlYXRlc0FyZ3VtZW50cy5jb250YWlucyhlZGdlLT5jb2RlT3JpZ2luLmlu
bGluZUNhbGxGcmFtZSk7CiAgICAgICAgICAgICBib29sIGlzQWxpYXNlZEFyZ3VtZW50c1JlZ2lz
dGVyID0KICAgICAgICAgICAgICAgICAhdmFyaWFibGVBY2Nlc3NEYXRhLT5pc0NhcHR1cmVkKCkK
ICAgICAgICAgICAgICAgICAmJiBtX2FyZ3VtZW50c0FsaWFzaW5nLmZpbmQodmFyaWFibGVBY2Nl
c3NEYXRhKS0+dmFsdWUuaXNWYWxpZCgpCi0gICAgICAgICAgICAgICAgJiYgIW1fY3JlYXRlc0Fy
Z3VtZW50cy5jb250YWlucyhjaGlsZC5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSk7CisgICAg
ICAgICAgICAgICAgJiYgIW1fY3JlYXRlc0FyZ3VtZW50cy5jb250YWlucyhlZGdlLT5jb2RlT3Jp
Z2luLmlubGluZUNhbGxGcmFtZSk7CiAgICAgICAgICAgICBpZiAoIWlzRGVhZEFyZ3VtZW50c1Jl
Z2lzdGVyICYmICFpc0FsaWFzZWRBcmd1bWVudHNSZWdpc3RlcikKICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgIG1fZ3JhcGguZGVyZWYoZWRnZSk7Ci0gICAgICAgICAgICBub2Rl
LmNoaWxkcmVuLnJlbW92ZUVkZ2VGcm9tQmFnKGVkZ2VJbmRleCk7CisgICAgICAgICAgICBub2Rl
LT5jaGlsZHJlbi5yZW1vdmVFZGdlRnJvbUJhZyhlZGdlSW5kZXgpOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBjYXNlIENyZWF0ZUFyZ3VtZW50
czogeyAvLyBBcmlzZXMgaWYgd2UgQ1NFIHR3byBHZXRMb2NhbHMgdG8gdGhlIGFyZ3VtZW50cyBy
ZWdpc3RlciBhbmQgdGhlbiBDU0UgdGhlIHNlY29uZCB1c2Ugb2YgdGhlIEdldExvY2FsIHRvIHRo
ZSBmaXJzdC4KLSAgICAgICAgICAgIGlmIChtX2NyZWF0ZXNBcmd1bWVudHMuY29udGFpbnMoY2hp
bGQuY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpKQorICAgICAgICAgICAgaWYgKG1fY3JlYXRl
c0FyZ3VtZW50cy5jb250YWlucyhlZGdlLT5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSkpCiAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBtX2dyYXBoLmRlcmVmKGVkZ2UpOwot
ICAgICAgICAgICAgbm9kZS5jaGlsZHJlbi5yZW1vdmVFZGdlRnJvbUJhZyhlZGdlSW5kZXgpOwor
ICAgICAgICAgICAgbm9kZS0+Y2hpbGRyZW4ucmVtb3ZlRWRnZUZyb21CYWcoZWRnZUluZGV4KTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlNb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FycmF5TW9kZS5jcHAJKHJldmlzaW9uIDE0MDYxNikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlNb2RlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjQ2LDE0ICsyNDYsMTQgQEAgU3RydWN0dXJlKiBBcnJheU1vZGU6Om9yaWdpbmFs
QXJyYXlTdHJ1YwogICAgIHJldHVybiBvcmlnaW5hbEFycmF5U3RydWN0dXJlKGdyYXBoLCBub2Rl
LmNvZGVPcmlnaW4pOwogfQogCi1ib29sIEFycmF5TW9kZTo6YWxyZWFkeUNoZWNrZWQoR3JhcGgm
IGdyYXBoLCBOb2RlJiBub2RlLCBBYnN0cmFjdFZhbHVlJiB2YWx1ZSwgSW5kZXhpbmdUeXBlIHNo
YXBlKSBjb25zdAorYm9vbCBBcnJheU1vZGU6OmFscmVhZHlDaGVja2VkKEdyYXBoJiBncmFwaCwg
Tm9kZSogbm9kZSwgQWJzdHJhY3RWYWx1ZSYgdmFsdWUsIEluZGV4aW5nVHlwZSBzaGFwZSkgY29u
c3QKIHsKICAgICBzd2l0Y2ggKGFycmF5Q2xhc3MoKSkgewogICAgIGNhc2UgQXJyYXk6Ok9yaWdp
bmFsQXJyYXk6CiAgICAgICAgIHJldHVybiB2YWx1ZS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5o
YXNTaW5nbGV0b24oKQogICAgICAgICAgICAgJiYgKHZhbHVlLm1fY3VycmVudEtub3duU3RydWN0
dXJlLnNpbmdsZXRvbigpLT5pbmRleGluZ1R5cGUoKSAmIEluZGV4aW5nU2hhcGVNYXNrKSA9PSBz
aGFwZQogICAgICAgICAgICAgJiYgKHZhbHVlLm1fY3VycmVudEtub3duU3RydWN0dXJlLnNpbmds
ZXRvbigpLT5pbmRleGluZ1R5cGUoKSAmIElzQXJyYXkpCi0gICAgICAgICAgICAmJiBncmFwaC5n
bG9iYWxPYmplY3RGb3Iobm9kZS5jb2RlT3JpZ2luKS0+aXNPcmlnaW5hbEFycmF5U3RydWN0dXJl
KHZhbHVlLm1fY3VycmVudEtub3duU3RydWN0dXJlLnNpbmdsZXRvbigpKTsKKyAgICAgICAgICAg
ICYmIGdyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5jb2RlT3JpZ2luKS0+aXNPcmlnaW5hbEFy
cmF5U3RydWN0dXJlKHZhbHVlLm1fY3VycmVudEtub3duU3RydWN0dXJlLnNpbmdsZXRvbigpKTsK
ICAgICAgICAgCiAgICAgY2FzZSBBcnJheTo6QXJyYXk6CiAgICAgICAgIGlmIChhcnJheU1vZGVz
QWxyZWFkeUNoZWNrZWQodmFsdWUubV9hcnJheU1vZGVzLCBhc0FycmF5TW9kZXMoc2hhcGUgfCBJ
c0FycmF5KSkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FycmF5TW9kZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlNb2RlLmgJ
KHJldmlzaW9uIDE0MDYxNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlN
b2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTE5Nyw3ICsxOTcsNyBAQCBwdWJsaWM6CiAgICAgCiAg
ICAgQXJyYXlNb2RlIHJlZmluZShTcGVjdWxhdGVkVHlwZSBiYXNlLCBTcGVjdWxhdGVkVHlwZSBp
bmRleCwgU3BlY3VsYXRlZFR5cGUgdmFsdWUgPSBTcGVjTm9uZSwgTm9kZUZsYWdzID0gMCkgY29u
c3Q7CiAgICAgCi0gICAgYm9vbCBhbHJlYWR5Q2hlY2tlZChHcmFwaCYsIE5vZGUmLCBBYnN0cmFj
dFZhbHVlJikgY29uc3Q7CisgICAgYm9vbCBhbHJlYWR5Q2hlY2tlZChHcmFwaCYsIE5vZGUqLCBB
YnN0cmFjdFZhbHVlJikgY29uc3Q7CiAgICAgCiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikg
Y29uc3Q7CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxv
Y2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxv
Y2suaAkocmV2aXNpb24gMTQwNjE2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdC
YXNpY0Jsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTQyLDcgKzQyLDcgQEAgY2xhc3MgR3JhcGg7
CiAKIHR5cGVkZWYgVmVjdG9yIDxCbG9ja0luZGV4LCAyPiBQcmVkZWNlc3Nvckxpc3Q7CiAKLXN0
cnVjdCBCYXNpY0Jsb2NrIDogVmVjdG9yPE5vZGVJbmRleCwgOD4geworc3RydWN0IEJhc2ljQmxv
Y2sgOiBWZWN0b3I8Tm9kZSosIDg+IHsKICAgICBCYXNpY0Jsb2NrKHVuc2lnbmVkIGJ5dGVjb2Rl
QmVnaW4sIHVuc2lnbmVkIG51bUFyZ3VtZW50cywgdW5zaWduZWQgbnVtTG9jYWxzKQogICAgICAg
ICA6IGJ5dGVjb2RlQmVnaW4oYnl0ZWNvZGVCZWdpbikKICAgICAgICAgLCBpc09TUlRhcmdldChm
YWxzZSkKQEAgLTc1LDcgKzc1LDcgQEAgc3RydWN0IEJhc2ljQmxvY2sgOiBWZWN0b3I8Tm9kZUlu
ZGV4LCA4PgogICAgIH0KICAgICAKICAgICBzaXplX3QgbnVtTm9kZXMoKSBjb25zdCB7IHJldHVy
biBwaGlzLnNpemUoKSArIHNpemUoKTsgfQotICAgIE5vZGVJbmRleCBub2RlSW5kZXgoc2l6ZV90
IGkpIGNvbnN0CisgICAgTm9kZSogbm9kZShzaXplX3QgaSkgY29uc3QKICAgICB7CiAgICAgICAg
IGlmIChpIDwgcGhpcy5zaXplKCkpCiAgICAgICAgICAgICByZXR1cm4gcGhpc1tpXTsKQEAgLTgz
LDI2ICs4MywyNiBAQCBzdHJ1Y3QgQmFzaWNCbG9jayA6IFZlY3RvcjxOb2RlSW5kZXgsIDg+CiAg
ICAgfQogICAgIGJvb2wgaXNQaGlJbmRleChzaXplX3QgaSkgY29uc3QgeyByZXR1cm4gaSA8IHBo
aXMuc2l6ZSgpOyB9CiAgICAgCi0gICAgYm9vbCBpc0luUGhpcyhOb2RlSW5kZXggbm9kZUluZGV4
KSBjb25zdAorICAgIGJvb2wgaXNJblBoaXMoTm9kZSogbm9kZSkgY29uc3QKICAgICB7CiAgICAg
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcGhpcy5zaXplKCk7ICsraSkgewotICAgICAgICAg
ICAgaWYgKHBoaXNbaV0gPT0gbm9kZUluZGV4KQorICAgICAgICAgICAgaWYgKHBoaXNbaV0gPT0g
bm9kZSkKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIAotICAgIGJvb2wgaXNJbkJsb2NrKE5vZGVJbmRleCBp
bmRleCkgY29uc3QKKyAgICBib29sIGlzSW5CbG9jayhOb2RlKiBteU5vZGUpIGNvbnN0CiAgICAg
ewogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bU5vZGVzKCk7ICsraSkgewotICAg
ICAgICAgICAgaWYgKG5vZGVJbmRleChpKSA9PSBpbmRleCkKKyAgICAgICAgICAgIGlmIChub2Rl
KGkpID09IG15Tm9kZSkKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIAogI2RlZmluZSBERkdfREVGSU5FX0FQ
UEVORF9OT0RFKHRlbXBsYXRlUHJlLCB0ZW1wbGF0ZVBvc3QsIHR5cGVQYXJhbXMsIHZhbHVlUGFy
YW1zQ29tbWEsIHZhbHVlUGFyYW1zLCB2YWx1ZUFyZ3MpIFwKLSAgICB0ZW1wbGF0ZVByZSB0eXBl
UGFyYW1zIHRlbXBsYXRlUG9zdCBOb2RlSW5kZXggYXBwZW5kTm9kZShHcmFwaCYsIFJlZkNoaWxk
cmVuTW9kZSwgUmVmTm9kZU1vZGUsIFNwZWN1bGF0ZWRUeXBlIHZhbHVlUGFyYW1zQ29tbWEgdmFs
dWVQYXJhbXMpOworICAgIHRlbXBsYXRlUHJlIHR5cGVQYXJhbXMgdGVtcGxhdGVQb3N0IE5vZGUq
IGFwcGVuZE5vZGUoR3JhcGgmLCBSZWZDaGlsZHJlbk1vZGUsIFJlZk5vZGVNb2RlLCBTcGVjdWxh
dGVkVHlwZSB2YWx1ZVBhcmFtc0NvbW1hIHZhbHVlUGFyYW1zKTsKICAgICBERkdfVkFSSUFESUNf
VEVNUExBVEVfRlVOQ1RJT04oREZHX0RFRklORV9BUFBFTkRfTk9ERSkKICN1bmRlZiBERkdfREVG
SU5FX0FQUEVORF9OT0RFCiAgICAgCkBAIC0xMjEsMTEgKzEyMSwxMSBAQCBzdHJ1Y3QgQmFzaWNC
bG9jayA6IFZlY3RvcjxOb2RlSW5kZXgsIDg+CiAjZW5kaWYKICAgICBib29sIGlzUmVhY2hhYmxl
OwogICAgIAotICAgIFZlY3RvcjxOb2RlSW5kZXg+IHBoaXM7CisgICAgVmVjdG9yPE5vZGUqPiBw
aGlzOwogICAgIFByZWRlY2Vzc29yTGlzdCBtX3ByZWRlY2Vzc29yczsKICAgICAKLSAgICBPcGVy
YW5kczxOb2RlSW5kZXgsIE5vZGVJbmRleFRyYWl0cz4gdmFyaWFibGVzQXRIZWFkOwotICAgIE9w
ZXJhbmRzPE5vZGVJbmRleCwgTm9kZUluZGV4VHJhaXRzPiB2YXJpYWJsZXNBdFRhaWw7CisgICAg
T3BlcmFuZHM8Tm9kZSosIE5vZGVQb2ludGVyVHJhaXRzPiB2YXJpYWJsZXNBdEhlYWQ7CisgICAg
T3BlcmFuZHM8Tm9kZSosIE5vZGVQb2ludGVyVHJhaXRzPiB2YXJpYWJsZXNBdFRhaWw7CiAgICAg
CiAgICAgT3BlcmFuZHM8QWJzdHJhY3RWYWx1ZT4gdmFsdWVzQXRIZWFkOwogICAgIE9wZXJhbmRz
PEFic3RyYWN0VmFsdWU+IHZhbHVlc0F0VGFpbDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQmFzaWNCbG9ja0lubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2tJbmxpbmVzLmgJKHJldmlzaW9uIDE0MDYxNikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9ja0lubGluZXMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzQsOSArMzQsOSBAQAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcg
ewogCiAjZGVmaW5lIERGR19ERUZJTkVfQVBQRU5EX05PREUodGVtcGxhdGVQcmUsIHRlbXBsYXRl
UG9zdCwgdHlwZVBhcmFtcywgdmFsdWVQYXJhbXNDb21tYSwgdmFsdWVQYXJhbXMsIHZhbHVlQXJn
cykgXAotICAgIHRlbXBsYXRlUHJlIHR5cGVQYXJhbXMgdGVtcGxhdGVQb3N0IE5vZGVJbmRleCBC
YXNpY0Jsb2NrOjphcHBlbmROb2RlKEdyYXBoJiBncmFwaCwgUmVmQ2hpbGRyZW5Nb2RlIHJlZkNo
aWxkcmVuTW9kZSwgUmVmTm9kZU1vZGUgcmVmTm9kZU1vZGUsIFNwZWN1bGF0ZWRUeXBlIHR5cGUg
dmFsdWVQYXJhbXNDb21tYSB2YWx1ZVBhcmFtcykgXAorICAgIHRlbXBsYXRlUHJlIHR5cGVQYXJh
bXMgdGVtcGxhdGVQb3N0IE5vZGUqIEJhc2ljQmxvY2s6OmFwcGVuZE5vZGUoR3JhcGgmIGdyYXBo
LCBSZWZDaGlsZHJlbk1vZGUgcmVmQ2hpbGRyZW5Nb2RlLCBSZWZOb2RlTW9kZSByZWZOb2RlTW9k
ZSwgU3BlY3VsYXRlZFR5cGUgdHlwZSB2YWx1ZVBhcmFtc0NvbW1hIHZhbHVlUGFyYW1zKSBcCiAg
ICAgeyBcCi0gICAgICAgIE5vZGVJbmRleCByZXN1bHQgPSBncmFwaC5hZGROb2RlKHJlZkNoaWxk
cmVuTW9kZSwgcmVmTm9kZU1vZGUsIHR5cGUgdmFsdWVQYXJhbXNDb21tYSB2YWx1ZUFyZ3MpOyBc
CisgICAgICAgIE5vZGUqIHJlc3VsdCA9IGdyYXBoLmFkZE5vZGUocmVmQ2hpbGRyZW5Nb2RlLCBy
ZWZOb2RlTW9kZSwgdHlwZSB2YWx1ZVBhcmFtc0NvbW1hIHZhbHVlQXJncyk7IFwKICAgICAgICAg
YXBwZW5kKHJlc3VsdCk7IFwKICAgICAgICAgcmV0dXJuIHJlc3VsdDsgXAogICAgIH0KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCShy
ZXZpc2lvbiAxNDA2MTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2Rl
UGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTYxLDI2ICsxNjEsMjYgQEAgcHJpdmF0ZToK
ICAgICAKICAgICAvLyBIYW5kbGUgY2FsbHMuIFRoaXMgcmVzb2x2ZXMgaXNzdWVzIHN1cnJvdW5k
aW5nIGlubGluaW5nIGFuZCBpbnRyaW5zaWNzLgogICAgIHZvaWQgaGFuZGxlQ2FsbChJbnRlcnBy
ZXRlciosIEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIE5vZGVUeXBlIG9wLCBDb2Rl
U3BlY2lhbGl6YXRpb25LaW5kKTsKLSAgICB2b2lkIGVtaXRGdW5jdGlvbkNoZWNrcyhjb25zdCBD
YWxsTGlua1N0YXR1cyYsIE5vZGVJbmRleCBjYWxsVGFyZ2V0LCBpbnQgcmVnaXN0ZXJPZmZzZXQs
IENvZGVTcGVjaWFsaXphdGlvbktpbmQpOworICAgIHZvaWQgZW1pdEZ1bmN0aW9uQ2hlY2tzKGNv
bnN0IENhbGxMaW5rU3RhdHVzJiwgTm9kZSogY2FsbFRhcmdldCwgaW50IHJlZ2lzdGVyT2Zmc2V0
LCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kKTsKICAgICAvLyBIYW5kbGUgaW5saW5pbmcuIFJldHVy
biB0cnVlIGlmIGl0IHN1Y2NlZWRlZCwgZmFsc2UgaWYgd2UgbmVlZCB0byBwbGFudCBhIGNhbGwu
Ci0gICAgYm9vbCBoYW5kbGVJbmxpbmluZyhib29sIHVzZXNSZXN1bHQsIE5vZGVJbmRleCBjYWxs
VGFyZ2V0Tm9kZUluZGV4LCBpbnQgcmVzdWx0T3BlcmFuZCwgY29uc3QgQ2FsbExpbmtTdGF0dXMm
LCBpbnQgcmVnaXN0ZXJPZmZzZXQsIGludCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgdW5z
aWduZWQgbmV4dE9mZnNldCwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCk7CisgICAgYm9vbCBoYW5k
bGVJbmxpbmluZyhib29sIHVzZXNSZXN1bHQsIE5vZGUqIGNhbGxUYXJnZXROb2RlLCBpbnQgcmVz
dWx0T3BlcmFuZCwgY29uc3QgQ2FsbExpbmtTdGF0dXMmLCBpbnQgcmVnaXN0ZXJPZmZzZXQsIGlu
dCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgdW5zaWduZWQgbmV4dE9mZnNldCwgQ29kZVNw
ZWNpYWxpemF0aW9uS2luZCk7CiAgICAgLy8gSGFuZGxlIHNldHRpbmcgdGhlIHJlc3VsdCBvZiBh
biBpbnRyaW5zaWMuCi0gICAgdm9pZCBzZXRJbnRyaW5zaWNSZXN1bHQoYm9vbCB1c2VzUmVzdWx0
LCBpbnQgcmVzdWx0T3BlcmFuZCwgTm9kZUluZGV4KTsKKyAgICB2b2lkIHNldEludHJpbnNpY1Jl
c3VsdChib29sIHVzZXNSZXN1bHQsIGludCByZXN1bHRPcGVyYW5kLCBOb2RlKik7CiAgICAgLy8g
SGFuZGxlIGludHJpbnNpYyBmdW5jdGlvbnMuIFJldHVybiB0cnVlIGlmIGl0IHN1Y2NlZWRlZCwg
ZmFsc2UgaWYgd2UgbmVlZCB0byBwbGFudCBhIGNhbGwuCiAgICAgYm9vbCBoYW5kbGVJbnRyaW5z
aWMoYm9vbCB1c2VzUmVzdWx0LCBpbnQgcmVzdWx0T3BlcmFuZCwgSW50cmluc2ljLCBpbnQgcmVn
aXN0ZXJPZmZzZXQsIGludCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgU3BlY3VsYXRlZFR5
cGUgcHJlZGljdGlvbik7CiAgICAgYm9vbCBoYW5kbGVDb25zdGFudEludGVybmFsRnVuY3Rpb24o
Ym9vbCB1c2VzUmVzdWx0LCBpbnQgcmVzdWx0T3BlcmFuZCwgSW50ZXJuYWxGdW5jdGlvbiosIGlu
dCByZWdpc3Rlck9mZnNldCwgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBTcGVjdWxh
dGVkVHlwZSBwcmVkaWN0aW9uLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kKTsKLSAgICBOb2RlSW5k
ZXggaGFuZGxlR2V0QnlPZmZzZXQoU3BlY3VsYXRlZFR5cGUsIE5vZGVJbmRleCBiYXNlLCB1bnNp
Z25lZCBpZGVudGlmaWVyTnVtYmVyLCBQcm9wZXJ0eU9mZnNldCk7CisgICAgTm9kZSogaGFuZGxl
R2V0QnlPZmZzZXQoU3BlY3VsYXRlZFR5cGUsIE5vZGUqIGJhc2UsIHVuc2lnbmVkIGlkZW50aWZp
ZXJOdW1iZXIsIFByb3BlcnR5T2Zmc2V0KTsKICAgICB2b2lkIGhhbmRsZUdldEJ5T2Zmc2V0KAot
ICAgICAgICBpbnQgZGVzdGluYXRpb25PcGVyYW5kLCBTcGVjdWxhdGVkVHlwZSwgTm9kZUluZGV4
IGJhc2UsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsCisgICAgICAgIGludCBkZXN0aW5hdGlv
bk9wZXJhbmQsIFNwZWN1bGF0ZWRUeXBlLCBOb2RlKiBiYXNlLCB1bnNpZ25lZCBpZGVudGlmaWVy
TnVtYmVyLAogICAgICAgICBQcm9wZXJ0eU9mZnNldCk7CiAgICAgdm9pZCBoYW5kbGVHZXRCeUlk
KAotICAgICAgICBpbnQgZGVzdGluYXRpb25PcGVyYW5kLCBTcGVjdWxhdGVkVHlwZSwgTm9kZUlu
ZGV4IGJhc2UsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsCisgICAgICAgIGludCBkZXN0aW5h
dGlvbk9wZXJhbmQsIFNwZWN1bGF0ZWRUeXBlLCBOb2RlKiBiYXNlLCB1bnNpZ25lZCBpZGVudGlm
aWVyTnVtYmVyLAogICAgICAgICBjb25zdCBHZXRCeUlkU3RhdHVzJik7CiAKLSAgICBOb2RlSW5k
ZXggZ2V0U2NvcGUoYm9vbCBza2lwVG9wLCB1bnNpZ25lZCBza2lwQ291bnQpOworICAgIE5vZGUq
IGdldFNjb3BlKGJvb2wgc2tpcFRvcCwgdW5zaWduZWQgc2tpcENvdW50KTsKICAgICAKICAgICAv
LyBDb252ZXJ0IGEgc2V0IG9mIFJlc29sdmVPcGVyYXRpb25zIGludG8gZ3JhcGggbm9kZXMKLSAg
ICBib29sIHBhcnNlUmVzb2x2ZU9wZXJhdGlvbnMoU3BlY3VsYXRlZFR5cGUsIHVuc2lnbmVkIGlk
ZW50aWZpZXJOdW1iZXIsIHVuc2lnbmVkIG9wZXJhdGlvbnMsIHVuc2lnbmVkIHB1dFRvQmFzZU9w
ZXJhdGlvbiwgTm9kZUluZGV4KiBiYXNlLCBOb2RlSW5kZXgqIHZhbHVlKTsKKyAgICBib29sIHBh
cnNlUmVzb2x2ZU9wZXJhdGlvbnMoU3BlY3VsYXRlZFR5cGUsIHVuc2lnbmVkIGlkZW50aWZpZXJO
dW1iZXIsIHVuc2lnbmVkIG9wZXJhdGlvbnMsIHVuc2lnbmVkIHB1dFRvQmFzZU9wZXJhdGlvbiwg
Tm9kZSoqIGJhc2UsIE5vZGUqKiB2YWx1ZSk7CiAKICAgICAvLyBQcmVwYXJlIHRvIHBhcnNlIGEg
YmxvY2suCiAgICAgdm9pZCBwcmVwYXJlVG9QYXJzZUJsb2NrKCk7CkBAIC0yMTAsNyArMjEwLDcg
QEAgcHJpdmF0ZToKICAgICB9CiAgICAgCiAgICAgLy8gR2V0L1NldCB0aGUgb3BlcmFuZHMvcmVz
dWx0IG9mIGEgYnl0ZWNvZGUgaW5zdHJ1Y3Rpb24uCi0gICAgTm9kZUluZGV4IGdldERpcmVjdChp
bnQgb3BlcmFuZCkKKyAgICBOb2RlKiBnZXREaXJlY3QoaW50IG9wZXJhbmQpCiAgICAgewogICAg
ICAgICAvLyBJcyB0aGlzIGEgY29uc3RhbnQ/CiAgICAgICAgIGlmIChvcGVyYW5kID49IEZpcnN0
Q29uc3RhbnRSZWdpc3RlckluZGV4KSB7CkBAIC0yMjgsNyArMjI4LDcgQEAgcHJpdmF0ZToKICAg
ICAgICAgLy8gTXVzdCBiZSBhIGxvY2FsLgogICAgICAgICByZXR1cm4gZ2V0TG9jYWwoKHVuc2ln
bmVkKW9wZXJhbmQpOwogICAgIH0KLSAgICBOb2RlSW5kZXggZ2V0KGludCBvcGVyYW5kKQorICAg
IE5vZGUqIGdldChpbnQgb3BlcmFuZCkKICAgICB7CiAgICAgICAgIGlmIChvcGVyYW5kID09IEpT
U3RhY2s6OkNhbGxlZSkgewogICAgICAgICAgICAgaWYgKG1faW5saW5lU3RhY2tUb3AtPm1faW5s
aW5lQ2FsbEZyYW1lICYmIG1faW5saW5lU3RhY2tUb3AtPm1faW5saW5lQ2FsbEZyYW1lLT5jYWxs
ZWUpCkBAIC0yNDAsNyArMjQwLDcgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIGdldERpcmVj
dChtX2lubGluZVN0YWNrVG9wLT5yZW1hcE9wZXJhbmQob3BlcmFuZCkpOwogICAgIH0KICAgICBl
bnVtIFNldE1vZGUgeyBOb3JtYWxTZXQsIFNldE9uRW50cnkgfTsKLSAgICB2b2lkIHNldERpcmVj
dChpbnQgb3BlcmFuZCwgTm9kZUluZGV4IHZhbHVlLCBTZXRNb2RlIHNldE1vZGUgPSBOb3JtYWxT
ZXQpCisgICAgdm9pZCBzZXREaXJlY3QoaW50IG9wZXJhbmQsIE5vZGUqIHZhbHVlLCBTZXRNb2Rl
IHNldE1vZGUgPSBOb3JtYWxTZXQpCiAgICAgewogICAgICAgICAvLyBJcyB0aGlzIGFuIGFyZ3Vt
ZW50PwogICAgICAgICBpZiAob3BlcmFuZElzQXJndW1lbnQob3BlcmFuZCkpIHsKQEAgLTI1MSwx
MiArMjUxLDEyIEBAIHByaXZhdGU6CiAgICAgICAgIC8vIE11c3QgYmUgYSBsb2NhbC4KICAgICAg
ICAgc2V0TG9jYWwoKHVuc2lnbmVkKW9wZXJhbmQsIHZhbHVlLCBzZXRNb2RlKTsKICAgICB9Ci0g
ICAgdm9pZCBzZXQoaW50IG9wZXJhbmQsIE5vZGVJbmRleCB2YWx1ZSwgU2V0TW9kZSBzZXRNb2Rl
ID0gTm9ybWFsU2V0KQorICAgIHZvaWQgc2V0KGludCBvcGVyYW5kLCBOb2RlKiB2YWx1ZSwgU2V0
TW9kZSBzZXRNb2RlID0gTm9ybWFsU2V0KQogICAgIHsKICAgICAgICAgc2V0RGlyZWN0KG1faW5s
aW5lU3RhY2tUb3AtPnJlbWFwT3BlcmFuZChvcGVyYW5kKSwgdmFsdWUsIHNldE1vZGUpOwogICAg
IH0KICAgICAKLSAgICB2b2lkIHNldFBhaXIoaW50IG9wZXJhbmQxLCBOb2RlSW5kZXggdmFsdWUx
LCBpbnQgb3BlcmFuZDIsIE5vZGVJbmRleCB2YWx1ZTIpCisgICAgdm9pZCBzZXRQYWlyKGludCBv
cGVyYW5kMSwgTm9kZSogdmFsdWUxLCBpbnQgb3BlcmFuZDIsIE5vZGUqIHZhbHVlMikKICAgICB7
CiAgICAgICAgIC8vIEZpcnN0IGVtaXQgZGVhZCBTZXRMb2NhbHMgZm9yIHRoZSBiZW5lZml0IG9m
IE9TUi4KICAgICAgICAgc2V0KG9wZXJhbmQxLCB2YWx1ZTEpOwpAQCAtMjY3LDQ5ICsyNjcsNDQg
QEAgcHJpdmF0ZToKICAgICAgICAgc2V0KG9wZXJhbmQyLCB2YWx1ZTIpOwogICAgIH0KICAgICAK
LSAgICBOb2RlSW5kZXggaW5qZWN0TGF6eU9wZXJhbmRTcGVjdWxhdGlvbihOb2RlSW5kZXggbm9k
ZUluZGV4KQorICAgIE5vZGUqIGluamVjdExhenlPcGVyYW5kU3BlY3VsYXRpb24oTm9kZSogbm9k
ZSkKICAgICB7Ci0gICAgICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW25vZGVJbmRleF07Ci0gICAg
ICAgIEFTU0VSVChub2RlLm9wKCkgPT0gR2V0TG9jYWwpOwotICAgICAgICBBU1NFUlQobm9kZS5j
b2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXggPT0gbV9jdXJyZW50SW5kZXgpOworICAgICAgICBBU1NF
UlQobm9kZS0+b3AoKSA9PSBHZXRMb2NhbCk7CisgICAgICAgIEFTU0VSVChub2RlLT5jb2RlT3Jp
Z2luLmJ5dGVjb2RlSW5kZXggPT0gbV9jdXJyZW50SW5kZXgpOwogICAgICAgICBTcGVjdWxhdGVk
VHlwZSBwcmVkaWN0aW9uID0gCiAgICAgICAgICAgICBtX2lubGluZVN0YWNrVG9wLT5tX2xhenlP
cGVyYW5kcy5wcmVkaWN0aW9uKAotICAgICAgICAgICAgICAgIExhenlPcGVyYW5kVmFsdWVQcm9m
aWxlS2V5KG1fY3VycmVudEluZGV4LCBub2RlLmxvY2FsKCkpKTsKKyAgICAgICAgICAgICAgICBM
YXp5T3BlcmFuZFZhbHVlUHJvZmlsZUtleShtX2N1cnJlbnRJbmRleCwgbm9kZS0+bG9jYWwoKSkp
OwogI2lmIERGR19FTkFCTEUoREVCVUdfVkVSQk9TRSkKLSAgICAgICAgZGF0YUxvZygiTGF6eSBv
cGVyYW5kIFtAIiwgbm9kZUluZGV4LCAiLCBiYyMiLCBtX2N1cnJlbnRJbmRleCwgIiwgciIsIG5v
ZGUubG9jYWwoKSwgIl0gcHJlZGljdGlvbjogIiwgU3BlY3VsYXRpb25EdW1wKHByZWRpY3Rpb24p
LCAiXG4iKTsKKyAgICAgICAgZGF0YUxvZygiTGF6eSBvcGVyYW5kIFtAIiwgbm9kZS0+aW5kZXgo
KSwgIiwgYmMjIiwgbV9jdXJyZW50SW5kZXgsICIsIHIiLCBub2RlLT5sb2NhbCgpLCAiXSBwcmVk
aWN0aW9uOiAiLCBTcGVjdWxhdGlvbkR1bXAocHJlZGljdGlvbiksICJcbiIpOwogI2VuZGlmCi0g
ICAgICAgIG5vZGUudmFyaWFibGVBY2Nlc3NEYXRhKCktPnByZWRpY3QocHJlZGljdGlvbik7Ci0g
ICAgICAgIHJldHVybiBub2RlSW5kZXg7CisgICAgICAgIG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0
YSgpLT5wcmVkaWN0KHByZWRpY3Rpb24pOworICAgICAgICByZXR1cm4gbm9kZTsKICAgICB9CiAK
ICAgICAvLyBVc2VkIGluIGltcGxlbWVudGluZyBnZXQvc2V0LCBhYm92ZSwgd2hlcmUgdGhlIG9w
ZXJhbmQgaXMgYSBsb2NhbCB2YXJpYWJsZS4KLSAgICBOb2RlSW5kZXggZ2V0TG9jYWwodW5zaWdu
ZWQgb3BlcmFuZCkKKyAgICBOb2RlKiBnZXRMb2NhbCh1bnNpZ25lZCBvcGVyYW5kKQogICAgIHsK
LSAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRleCA9IG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNB
dFRhaWwubG9jYWwob3BlcmFuZCk7CisgICAgICAgIE5vZGUqIG5vZGUgPSBtX2N1cnJlbnRCbG9j
ay0+dmFyaWFibGVzQXRUYWlsLmxvY2FsKG9wZXJhbmQpOwogICAgICAgICBib29sIGlzQ2FwdHVy
ZWQgPSBtX2NvZGVCbG9jay0+aXNDYXB0dXJlZChvcGVyYW5kLCBtX2lubGluZVN0YWNrVG9wLT5t
X2lubGluZUNhbGxGcmFtZSk7CiAgICAgICAgIAotICAgICAgICBpZiAobm9kZUluZGV4ICE9IE5v
Tm9kZSkgewotICAgICAgICAgICAgTm9kZSogbm9kZVB0ciA9ICZtX2dyYXBoW25vZGVJbmRleF07
Ci0gICAgICAgICAgICBpZiAobm9kZVB0ci0+b3AoKSA9PSBGbHVzaCkgeworICAgICAgICBpZiAo
bm9kZSkgeworICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gRmx1c2gpIHsKICAgICAgICAg
ICAgICAgICAvLyBUd28gcG9zc2liaWxpdGllczogZWl0aGVyIHRoZSBibG9jayB3YW50cyB0aGUg
bG9jYWwgdG8gYmUgbGl2ZQogICAgICAgICAgICAgICAgIC8vIGJ1dCBoYXMgbm90IGxvYWRlZCBp
dHMgdmFsdWUsIG9yIGl0IGhhcyBsb2FkZWQgaXRzIHZhbHVlLCBpbgogICAgICAgICAgICAgICAg
IC8vIHdoaWNoIGNhc2Ugd2UncmUgZG9uZS4KLSAgICAgICAgICAgICAgICBub2RlSW5kZXggPSBu
b2RlUHRyLT5jaGlsZDEoKS5pbmRleCgpOwotICAgICAgICAgICAgICAgIE5vZGUmIGZsdXNoQ2hp
bGQgPSBtX2dyYXBoW25vZGVJbmRleF07Ci0gICAgICAgICAgICAgICAgaWYgKGZsdXNoQ2hpbGQu
b3AoKSA9PSBQaGkpIHsKLSAgICAgICAgICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2
YXJpYWJsZUFjY2Vzc0RhdGEgPSBmbHVzaENoaWxkLnZhcmlhYmxlQWNjZXNzRGF0YSgpOworICAg
ICAgICAgICAgICAgIG5vZGUgPSBub2RlLT5jaGlsZDEoKS5ub2RlKCk7CisgICAgICAgICAgICAg
ICAgaWYgKG5vZGUtPm9wKCkgPT0gUGhpKSB7CisgICAgICAgICAgICAgICAgICAgIFZhcmlhYmxl
QWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRh
KCk7CiAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlQWNjZXNzRGF0YS0+bWVyZ2VJc0NhcHR1
cmVkKGlzQ2FwdHVyZWQpOwotICAgICAgICAgICAgICAgICAgICBub2RlSW5kZXggPSBpbmplY3RM
YXp5T3BlcmFuZFNwZWN1bGF0aW9uKGFkZFRvR3JhcGgoR2V0TG9jYWwsIE9wSW5mbyh2YXJpYWJs
ZUFjY2Vzc0RhdGEpLCBub2RlSW5kZXgpKTsKLSAgICAgICAgICAgICAgICAgICAgbV9jdXJyZW50
QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5sb2NhbChvcGVyYW5kKSA9IG5vZGVJbmRleDsKLSAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIG5vZGVJbmRleDsKKyAgICAgICAgICAgICAgICAgICAgbm9k
ZUluZGV4ID0gaW5qZWN0TGF6eU9wZXJhbmRTcGVjdWxhdGlvbihhZGRUb0dyYXBoKEdldExvY2Fs
LCBPcEluZm8odmFyaWFibGVBY2Nlc3NEYXRhKSwgbm9kZSkpOworICAgICAgICAgICAgICAgICAg
ICBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLmxvY2FsKG9wZXJhbmQpID0gbm9kZTsK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGU7CiAgICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIG5vZGVQdHIgPSAmZmx1c2hDaGlsZDsKICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIAotICAgICAgICAgICAgQVNTRVJUKCZtX2dyYXBoW25vZGVJbmRleF0gPT0gbm9kZVB0
cik7Ci0gICAgICAgICAgICBBU1NFUlQobm9kZVB0ci0+b3AoKSAhPSBGbHVzaCk7CisgICAgICAg
ICAgICBBU1NFUlQobm9kZS0+b3AoKSAhPSBGbHVzaCk7CiAKLSAgICAgICAgICAgIG5vZGVQdHIt
PnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5tZXJnZUlzQ2FwdHVyZWQoaXNDYXB0dXJlZCk7CisgICAg
ICAgICAgICBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+bWVyZ2VJc0NhcHR1cmVkKGlzQ2Fw
dHVyZWQpOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKGlzQ2FwdHVyZWQpIHsK
ICAgICAgICAgICAgICAgICAvLyBXZSB3aXNoIHRvIHVzZSB0aGUgc2FtZSB2YXJpYWJsZSBhY2Nl
c3MgZGF0YSBhcyB0aGUgcHJldmlvdXMgYWNjZXNzLApAQCAtMzE3LDE5ICszMTIsMTkgQEAgcHJp
dmF0ZToKICAgICAgICAgICAgICAgICAvLyBrbm93LCBhdCB0aGlzIHN0YWdlIG9mIGNvbXBpbGF0
aW9uLCB0aGUgbG9jYWwgaGFzIGJlZW4gY2xvYmJlcmVkLgogICAgICAgICAgICAgICAgIAogICAg
ICAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSB3ZSBsaW5rIHRvIHRoZSBQaGkgbm9kZSwgbm90IHRv
IHRoZSBHZXRMb2NhbC4KLSAgICAgICAgICAgICAgICBpZiAobm9kZVB0ci0+b3AoKSA9PSBHZXRM
b2NhbCkKLSAgICAgICAgICAgICAgICAgICAgbm9kZUluZGV4ID0gbm9kZVB0ci0+Y2hpbGQxKCku
aW5kZXgoKTsKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBHZXRMb2NhbCkKKyAg
ICAgICAgICAgICAgICAgICAgbm9kZSA9IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKICAgICAgICAg
ICAgICAgICAKLSAgICAgICAgICAgICAgICBOb2RlSW5kZXggbmV3R2V0TG9jYWwgPSBpbmplY3RM
YXp5T3BlcmFuZFNwZWN1bGF0aW9uKAotICAgICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKEdl
dExvY2FsLCBPcEluZm8obm9kZVB0ci0+dmFyaWFibGVBY2Nlc3NEYXRhKCkpLCBub2RlSW5kZXgp
KTsKKyAgICAgICAgICAgICAgICBOb2RlKiBuZXdHZXRMb2NhbCA9IGluamVjdExhenlPcGVyYW5k
U3BlY3VsYXRpb24oCisgICAgICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoR2V0TG9jYWwsIE9w
SW5mbyhub2RlUHRyLT52YXJpYWJsZUFjY2Vzc0RhdGEoKSksIG5vZGUpKTsKICAgICAgICAgICAg
ICAgICBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLmxvY2FsKG9wZXJhbmQpID0gbmV3
R2V0TG9jYWw7CiAgICAgICAgICAgICAgICAgcmV0dXJuIG5ld0dldExvY2FsOwogICAgICAgICAg
ICAgfQogICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAobm9kZVB0ci0+b3AoKSA9PSBHZXRM
b2NhbCkKLSAgICAgICAgICAgICAgICByZXR1cm4gbm9kZUluZGV4OwotICAgICAgICAgICAgQVNT
RVJUKG5vZGVQdHItPm9wKCkgPT0gU2V0TG9jYWwpOwotICAgICAgICAgICAgcmV0dXJuIG5vZGVQ
dHItPmNoaWxkMSgpLmluZGV4KCk7CisgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBHZXRM
b2NhbCkKKyAgICAgICAgICAgICAgICByZXR1cm4gbm9kZTsKKyAgICAgICAgICAgIEFTU0VSVChu
b2RlLT5vcCgpID09IFNldExvY2FsKTsKKyAgICAgICAgICAgIHJldHVybiBub2RlLT5jaGlsZDEo
KS5ub2RlKCk7CiAgICAgICAgIH0KIAogICAgICAgICAvLyBDaGVjayBmb3IgcmVhZHMgb2YgdGVt
cG9yYXJpZXMgZnJvbSBwcmlvciBibG9ja3MsCkBAIC0zMzgsMTYgKzMzMywxNiBAQCBwcml2YXRl
OgogICAgICAgICAKICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0Rh
dGEgPSBuZXdWYXJpYWJsZUFjY2Vzc0RhdGEob3BlcmFuZCwgaXNDYXB0dXJlZCk7CiAgICAgICAg
IAotICAgICAgICBOb2RlSW5kZXggcGhpID0gYWRkVG9HcmFwaChQaGksIE9wSW5mbyh2YXJpYWJs
ZUFjY2Vzc0RhdGEpKTsKKyAgICAgICAgTm9kZSogcGhpID0gYWRkVG9HcmFwaChQaGksIE9wSW5m
byh2YXJpYWJsZUFjY2Vzc0RhdGEpKTsKICAgICAgICAgbV9sb2NhbFBoaVN0YWNrLmFwcGVuZChQ
aGlTdGFja0VudHJ5KG1fY3VycmVudEJsb2NrLCBwaGksIG9wZXJhbmQpKTsKLSAgICAgICAgbm9k
ZUluZGV4ID0gaW5qZWN0TGF6eU9wZXJhbmRTcGVjdWxhdGlvbihhZGRUb0dyYXBoKEdldExvY2Fs
LCBPcEluZm8odmFyaWFibGVBY2Nlc3NEYXRhKSwgcGhpKSk7Ci0gICAgICAgIG1fY3VycmVudEJs
b2NrLT52YXJpYWJsZXNBdFRhaWwubG9jYWwob3BlcmFuZCkgPSBub2RlSW5kZXg7CisgICAgICAg
IG5vZGUgPSBpbmplY3RMYXp5T3BlcmFuZFNwZWN1bGF0aW9uKGFkZFRvR3JhcGgoR2V0TG9jYWws
IE9wSW5mbyh2YXJpYWJsZUFjY2Vzc0RhdGEpLCBwaGkpKTsKKyAgICAgICAgbV9jdXJyZW50Qmxv
Y2stPnZhcmlhYmxlc0F0VGFpbC5sb2NhbChvcGVyYW5kKSA9IG5vZGU7CiAgICAgICAgIAotICAg
ICAgICBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRIZWFkLnNldExvY2FsRmlyc3RUaW1lKG9w
ZXJhbmQsIG5vZGVJbmRleCk7CisgICAgICAgIG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdEhl
YWQuc2V0TG9jYWxGaXJzdFRpbWUob3BlcmFuZCwgbm9kZSk7CiAgICAgICAgIAotICAgICAgICBy
ZXR1cm4gbm9kZUluZGV4OworICAgICAgICByZXR1cm4gbm9kZTsKICAgICB9Ci0gICAgdm9pZCBz
ZXRMb2NhbCh1bnNpZ25lZCBvcGVyYW5kLCBOb2RlSW5kZXggdmFsdWUsIFNldE1vZGUgc2V0TW9k
ZSA9IE5vcm1hbFNldCkKKyAgICB2b2lkIHNldExvY2FsKHVuc2lnbmVkIG9wZXJhbmQsIE5vZGUq
IHZhbHVlLCBTZXRNb2RlIHNldE1vZGUgPSBOb3JtYWxTZXQpCiAgICAgewogICAgICAgICBib29s
IGlzQ2FwdHVyZWQgPSBtX2NvZGVCbG9jay0+aXNDYXB0dXJlZChvcGVyYW5kLCBtX2lubGluZVN0
YWNrVG9wLT5tX2lubGluZUNhbGxGcmFtZSk7CiAgICAgICAgIApAQCAtMzYwLDc3ICszNTUsNzMg
QEAgcHJpdmF0ZToKICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0Rh
dGEgPSBuZXdWYXJpYWJsZUFjY2Vzc0RhdGEob3BlcmFuZCwgaXNDYXB0dXJlZCk7CiAgICAgICAg
IHZhcmlhYmxlQWNjZXNzRGF0YS0+bWVyZ2VTdHJ1Y3R1cmVDaGVja0hvaXN0aW5nRmFpbGVkKAog
ICAgICAgICAgICAgbV9pbmxpbmVTdGFja1RvcC0+bV9leGl0UHJvZmlsZS5oYXNFeGl0U2l0ZSht
X2N1cnJlbnRJbmRleCwgQmFkQ2FjaGUpKTsKLSAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRleCA9
IGFkZFRvR3JhcGgoU2V0TG9jYWwsIE9wSW5mbyh2YXJpYWJsZUFjY2Vzc0RhdGEpLCB2YWx1ZSk7
Ci0gICAgICAgIG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwubG9jYWwob3BlcmFuZCkg
PSBub2RlSW5kZXg7CisgICAgICAgIE5vZGUqIG5vZGUgPSBhZGRUb0dyYXBoKFNldExvY2FsLCBP
cEluZm8odmFyaWFibGVBY2Nlc3NEYXRhKSwgdmFsdWUpOworICAgICAgICBtX2N1cnJlbnRCbG9j
ay0+dmFyaWFibGVzQXRUYWlsLmxvY2FsKG9wZXJhbmQpID0gbm9kZTsKICAgICB9CiAKICAgICAv
LyBVc2VkIGluIGltcGxlbWVudGluZyBnZXQvc2V0LCBhYm92ZSwgd2hlcmUgdGhlIG9wZXJhbmQg
aXMgYW4gYXJndW1lbnQuCi0gICAgTm9kZUluZGV4IGdldEFyZ3VtZW50KHVuc2lnbmVkIG9wZXJh
bmQpCisgICAgTm9kZSogZ2V0QXJndW1lbnQodW5zaWduZWQgb3BlcmFuZCkKICAgICB7CiAgICAg
ICAgIHVuc2lnbmVkIGFyZ3VtZW50ID0gb3BlcmFuZFRvQXJndW1lbnQob3BlcmFuZCk7CiAgICAg
ICAgIEFTU0VSVChhcmd1bWVudCA8IG1fbnVtQXJndW1lbnRzKTsKICAgICAgICAgCi0gICAgICAg
IE5vZGVJbmRleCBub2RlSW5kZXggPSBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLmFy
Z3VtZW50KGFyZ3VtZW50KTsKKyAgICAgICAgTm9kZSogbm9kZSA9IG1fY3VycmVudEJsb2NrLT52
YXJpYWJsZXNBdFRhaWwuYXJndW1lbnQoYXJndW1lbnQpOwogICAgICAgICBib29sIGlzQ2FwdHVy
ZWQgPSBtX2NvZGVCbG9jay0+aXNDYXB0dXJlZChvcGVyYW5kKTsKIAotICAgICAgICBpZiAobm9k
ZUluZGV4ICE9IE5vTm9kZSkgewotICAgICAgICAgICAgTm9kZSogbm9kZVB0ciA9ICZtX2dyYXBo
W25vZGVJbmRleF07Ci0gICAgICAgICAgICBpZiAobm9kZVB0ci0+b3AoKSA9PSBGbHVzaCkgewor
ICAgICAgICBpZiAobm9kZSkgeworICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gRmx1c2gp
IHsKICAgICAgICAgICAgICAgICAvLyBUd28gcG9zc2liaWxpdGllczogZWl0aGVyIHRoZSBibG9j
ayB3YW50cyB0aGUgbG9jYWwgdG8gYmUgbGl2ZQogICAgICAgICAgICAgICAgIC8vIGJ1dCBoYXMg
bm90IGxvYWRlZCBpdHMgdmFsdWUsIG9yIGl0IGhhcyBsb2FkZWQgaXRzIHZhbHVlLCBpbgogICAg
ICAgICAgICAgICAgIC8vIHdoaWNoIGNhc2Ugd2UncmUgZG9uZS4KLSAgICAgICAgICAgICAgICBu
b2RlSW5kZXggPSBub2RlUHRyLT5jaGlsZDEoKS5pbmRleCgpOwotICAgICAgICAgICAgICAgIE5v
ZGUmIGZsdXNoQ2hpbGQgPSBtX2dyYXBoW25vZGVJbmRleF07Ci0gICAgICAgICAgICAgICAgaWYg
KGZsdXNoQ2hpbGQub3AoKSA9PSBQaGkpIHsKLSAgICAgICAgICAgICAgICAgICAgVmFyaWFibGVB
Y2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBmbHVzaENoaWxkLnZhcmlhYmxlQWNjZXNz
RGF0YSgpOworICAgICAgICAgICAgICAgIG5vZGUgPSBub2RlLT5jaGlsZDEoKS5ub2RlKCk7Cisg
ICAgICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gUGhpKSB7CisgICAgICAgICAgICAgICAg
ICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhID0gbm9kZS0+dmFyaWFi
bGVBY2Nlc3NEYXRhKCk7CiAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlQWNjZXNzRGF0YS0+
bWVyZ2VJc0NhcHR1cmVkKGlzQ2FwdHVyZWQpOwotICAgICAgICAgICAgICAgICAgICBub2RlSW5k
ZXggPSBpbmplY3RMYXp5T3BlcmFuZFNwZWN1bGF0aW9uKGFkZFRvR3JhcGgoR2V0TG9jYWwsIE9w
SW5mbyh2YXJpYWJsZUFjY2Vzc0RhdGEpLCBub2RlSW5kZXgpKTsKLSAgICAgICAgICAgICAgICAg
ICAgbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5hcmd1bWVudChhcmd1bWVudCkgPSBu
b2RlSW5kZXg7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBub2RlSW5kZXg7CisgICAgICAg
ICAgICAgICAgICAgIG5vZGUgPSBpbmplY3RMYXp5T3BlcmFuZFNwZWN1bGF0aW9uKGFkZFRvR3Jh
cGgoR2V0TG9jYWwsIE9wSW5mbyh2YXJpYWJsZUFjY2Vzc0RhdGEpLCBub2RlKSk7CisgICAgICAg
ICAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwuYXJndW1lbnQoYXJn
dW1lbnQpID0gbm9kZTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGU7CiAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIG5vZGVQdHIgPSAmZmx1c2hDaGlsZDsKICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAgICAgICAgQVNTRVJUKCZtX2dyYXBoW25vZGVJ
bmRleF0gPT0gbm9kZVB0cik7Ci0gICAgICAgICAgICBBU1NFUlQobm9kZVB0ci0+b3AoKSAhPSBG
bHVzaCk7CisgICAgICAgICAgICBBU1NFUlQobm9kZS0+b3AoKSAhPSBGbHVzaCk7CiAgICAgICAg
ICAgICAKLSAgICAgICAgICAgIG5vZGVQdHItPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5tZXJnZUlz
Q2FwdHVyZWQoaXNDYXB0dXJlZCk7CisgICAgICAgICAgICBub2RlLT52YXJpYWJsZUFjY2Vzc0Rh
dGEoKS0+bWVyZ2VJc0NhcHR1cmVkKGlzQ2FwdHVyZWQpOwogICAgICAgICAgICAgCi0gICAgICAg
ICAgICBpZiAobm9kZVB0ci0+b3AoKSA9PSBTZXRBcmd1bWVudCkgeworICAgICAgICAgICAgaWYg
KG5vZGUtPm9wKCkgPT0gU2V0QXJndW1lbnQpIHsKICAgICAgICAgICAgICAgICAvLyBXZSdyZSBn
ZXR0aW5nIGFuIGFyZ3VtZW50IGluIHRoZSBmaXJzdCBiYXNpYyBibG9jazsgbGluawogICAgICAg
ICAgICAgICAgIC8vIHRoZSBHZXRMb2NhbCB0byB0aGUgU2V0QXJndW1lbnQuCi0gICAgICAgICAg
ICAgICAgQVNTRVJUKG5vZGVQdHItPmxvY2FsKCkgPT0gc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lz
dGVyPihvcGVyYW5kKSk7Ci0gICAgICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJp
YWJsZSA9IG5vZGVQdHItPnZhcmlhYmxlQWNjZXNzRGF0YSgpOwotICAgICAgICAgICAgICAgIG5v
ZGVJbmRleCA9IGluamVjdExhenlPcGVyYW5kU3BlY3VsYXRpb24oYWRkVG9HcmFwaChHZXRMb2Nh
bCwgT3BJbmZvKHZhcmlhYmxlKSwgbm9kZUluZGV4KSk7Ci0gICAgICAgICAgICAgICAgbV9jdXJy
ZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5hcmd1bWVudChhcmd1bWVudCkgPSBub2RlSW5kZXg7
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG5vZGVJbmRleDsKKyAgICAgICAgICAgICAgICBBU1NF
UlQobm9kZS0+bG9jYWwoKSA9PSBzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KG9wZXJhbmQp
KTsKKyAgICAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbm9kZS0+
dmFyaWFibGVBY2Nlc3NEYXRhKCk7CisgICAgICAgICAgICAgICAgbm9kZSA9IGluamVjdExhenlP
cGVyYW5kU3BlY3VsYXRpb24oYWRkVG9HcmFwaChHZXRMb2NhbCwgT3BJbmZvKHZhcmlhYmxlKSwg
bm9kZSkpOworICAgICAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwu
YXJndW1lbnQoYXJndW1lbnQpID0gbm9kZTsKKyAgICAgICAgICAgICAgICByZXR1cm4gbm9kZTsK
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKGlzQ2FwdHVyZWQp
IHsKLSAgICAgICAgICAgICAgICBpZiAobm9kZVB0ci0+b3AoKSA9PSBHZXRMb2NhbCkKLSAgICAg
ICAgICAgICAgICAgICAgbm9kZUluZGV4ID0gbm9kZVB0ci0+Y2hpbGQxKCkuaW5kZXgoKTsKLSAg
ICAgICAgICAgICAgICByZXR1cm4gaW5qZWN0TGF6eU9wZXJhbmRTcGVjdWxhdGlvbihhZGRUb0dy
YXBoKEdldExvY2FsLCBPcEluZm8obm9kZVB0ci0+dmFyaWFibGVBY2Nlc3NEYXRhKCkpLCBub2Rl
SW5kZXgpKTsKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBHZXRMb2NhbCkKKyAg
ICAgICAgICAgICAgICAgICAgbm9kZSA9IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gaW5qZWN0TGF6eU9wZXJhbmRTcGVjdWxhdGlvbihhZGRUb0dyYXBoKEdl
dExvY2FsLCBPcEluZm8obm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCkpLCBub2RlKSk7CiAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChub2RlUHRyLT5vcCgpID09
IEdldExvY2FsKQotICAgICAgICAgICAgICAgIHJldHVybiBub2RlSW5kZXg7CisgICAgICAgICAg
ICBpZiAobm9kZS0+b3AoKSA9PSBHZXRMb2NhbCkKKyAgICAgICAgICAgICAgICByZXR1cm4gbm9k
ZTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgQVNTRVJUKG5vZGVQdHItPm9wKCkgPT0gU2V0
TG9jYWwpOwotICAgICAgICAgICAgcmV0dXJuIG5vZGVQdHItPmNoaWxkMSgpLmluZGV4KCk7Cisg
ICAgICAgICAgICBBU1NFUlQobm9kZS0+b3AoKSA9PSBTZXRMb2NhbCk7CisgICAgICAgICAgICBy
ZXR1cm4gbm9kZS0+Y2hpbGQxKCkubm9kZSgpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAg
ICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9IG5ld1ZhcmlhYmxlQWNj
ZXNzRGF0YShvcGVyYW5kLCBpc0NhcHR1cmVkKTsKIAotICAgICAgICBOb2RlSW5kZXggcGhpID0g
YWRkVG9HcmFwaChQaGksIE9wSW5mbyh2YXJpYWJsZUFjY2Vzc0RhdGEpKTsKKyAgICAgICAgTm9k
ZSogcGhpID0gYWRkVG9HcmFwaChQaGksIE9wSW5mbyh2YXJpYWJsZUFjY2Vzc0RhdGEpKTsKICAg
ICAgICAgbV9hcmd1bWVudFBoaVN0YWNrLmFwcGVuZChQaGlTdGFja0VudHJ5KG1fY3VycmVudEJs
b2NrLCBwaGksIGFyZ3VtZW50KSk7Ci0gICAgICAgIG5vZGVJbmRleCA9IGluamVjdExhenlPcGVy
YW5kU3BlY3VsYXRpb24oYWRkVG9HcmFwaChHZXRMb2NhbCwgT3BJbmZvKHZhcmlhYmxlQWNjZXNz
RGF0YSksIHBoaSkpOwotICAgICAgICBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLmFy
Z3VtZW50KGFyZ3VtZW50KSA9IG5vZGVJbmRleDsKKyAgICAgICAgbm9kZSA9IGluamVjdExhenlP
cGVyYW5kU3BlY3VsYXRpb24oYWRkVG9HcmFwaChHZXRMb2NhbCwgT3BJbmZvKHZhcmlhYmxlQWNj
ZXNzRGF0YSksIHBoaSkpOworICAgICAgICBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWls
LmFyZ3VtZW50KGFyZ3VtZW50KSA9IG5vZGU7CiAgICAgICAgIAotICAgICAgICBtX2N1cnJlbnRC
bG9jay0+dmFyaWFibGVzQXRIZWFkLnNldEFyZ3VtZW50Rmlyc3RUaW1lKGFyZ3VtZW50LCBub2Rl
SW5kZXgpOworICAgICAgICBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRIZWFkLnNldEFyZ3Vt
ZW50Rmlyc3RUaW1lKGFyZ3VtZW50LCBub2RlKTsKICAgICAgICAgCi0gICAgICAgIHJldHVybiBu
b2RlSW5kZXg7CisgICAgICAgIHJldHVybiBub2RlOwogICAgIH0KLSAgICB2b2lkIHNldEFyZ3Vt
ZW50KGludCBvcGVyYW5kLCBOb2RlSW5kZXggdmFsdWUsIFNldE1vZGUgc2V0TW9kZSA9IE5vcm1h
bFNldCkKKyAgICB2b2lkIHNldEFyZ3VtZW50KGludCBvcGVyYW5kLCBOb2RlKiB2YWx1ZSwgU2V0
TW9kZSBzZXRNb2RlID0gTm9ybWFsU2V0KQogICAgIHsKICAgICAgICAgdW5zaWduZWQgYXJndW1l
bnQgPSBvcGVyYW5kVG9Bcmd1bWVudChvcGVyYW5kKTsKICAgICAgICAgQVNTRVJUKGFyZ3VtZW50
IDwgbV9udW1Bcmd1bWVudHMpOwpAQCAtNDQ0LDggKzQzNSw4IEBAIHByaXZhdGU6CiAgICAgICAg
IFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhID0gbmV3VmFyaWFibGVBY2Nl
c3NEYXRhKG9wZXJhbmQsIGlzQ2FwdHVyZWQpOwogICAgICAgICB2YXJpYWJsZUFjY2Vzc0RhdGEt
Pm1lcmdlU3RydWN0dXJlQ2hlY2tIb2lzdGluZ0ZhaWxlZCgKICAgICAgICAgICAgIG1faW5saW5l
U3RhY2tUb3AtPm1fZXhpdFByb2ZpbGUuaGFzRXhpdFNpdGUobV9jdXJyZW50SW5kZXgsIEJhZENh
Y2hlKSk7Ci0gICAgICAgIE5vZGVJbmRleCBub2RlSW5kZXggPSBhZGRUb0dyYXBoKFNldExvY2Fs
LCBPcEluZm8odmFyaWFibGVBY2Nlc3NEYXRhKSwgdmFsdWUpOwotICAgICAgICBtX2N1cnJlbnRC
bG9jay0+dmFyaWFibGVzQXRUYWlsLmFyZ3VtZW50KGFyZ3VtZW50KSA9IG5vZGVJbmRleDsKKyAg
ICAgICAgTm9kZSogbm9kZSA9IGFkZFRvR3JhcGgoU2V0TG9jYWwsIE9wSW5mbyh2YXJpYWJsZUFj
Y2Vzc0RhdGEpLCB2YWx1ZSk7CisgICAgICAgIG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRh
aWwuYXJndW1lbnQoYXJndW1lbnQpID0gbm9kZTsKICAgICB9CiAgICAgCiAgICAgQXJndW1lbnRQ
b3NpdGlvbiogZmluZEFyZ3VtZW50UG9zaXRpb25Gb3JBcmd1bWVudChpbnQgYXJndW1lbnQpCkBA
IC01MDAsNTUgKzQ5MSw1MyBAQCBwcml2YXRlOgogICAgICAgICAKICAgICAgICAgQVNTRVJUKG9w
ZXJhbmQgPCBGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleCk7CiAgICAgICAgIAotICAgICAgICBO
b2RlSW5kZXggbm9kZUluZGV4OworICAgICAgICBOb2RlKiBub2RlOwogICAgICAgICBpbnQgaW5k
ZXg7CiAgICAgICAgIGlmIChvcGVyYW5kSXNBcmd1bWVudChvcGVyYW5kKSkgewogICAgICAgICAg
ICAgaW5kZXggPSBvcGVyYW5kVG9Bcmd1bWVudChvcGVyYW5kKTsKLSAgICAgICAgICAgIG5vZGVJ
bmRleCA9IG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwuYXJndW1lbnQoaW5kZXgpOwor
ICAgICAgICAgICAgbm9kZSA9IG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwuYXJndW1l
bnQoaW5kZXgpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgaW5kZXggPSBvcGVyYW5k
OwotICAgICAgICAgICAgbm9kZUluZGV4ID0gbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFp
bC5sb2NhbChpbmRleCk7CisgICAgICAgICAgICBub2RlID0gbV9jdXJyZW50QmxvY2stPnZhcmlh
Ymxlc0F0VGFpbC5sb2NhbChpbmRleCk7CiAgICAgICAgICAgICBtX3ByZXNlcnZlZFZhcnMuc2V0
KG9wZXJhbmQpOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBpZiAobm9kZUluZGV4ICE9
IE5vTm9kZSkgewotICAgICAgICAgICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhbbm9kZUluZGV4XTsK
LSAgICAgICAgICAgIHN3aXRjaCAobm9kZS5vcCgpKSB7CisgICAgICAgIGlmIChub2RlKSB7Cisg
ICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKICAgICAgICAgICAgIGNhc2UgRmx1c2g6
Ci0gICAgICAgICAgICAgICAgbm9kZUluZGV4ID0gbm9kZS5jaGlsZDEoKS5pbmRleCgpOworICAg
ICAgICAgICAgICAgIG5vZGUgPSBub2RlLT5jaGlsZDEoKS5ub2RlKCk7CiAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIEdldExvY2FsOgotICAgICAgICAgICAgICAgIG5v
ZGVJbmRleCA9IG5vZGUuY2hpbGQxKCkuaW5kZXgoKTsKKyAgICAgICAgICAgICAgICBub2RlID0g
bm9kZS0+Y2hpbGQxKCkubm9kZSgpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIAotICAgICAgICAgICAgQVNTRVJUKG1fZ3JhcGhbbm9kZUluZGV4XS5vcCgpICE9IEZs
dXNoCi0gICAgICAgICAgICAgICAgICAgJiYgbV9ncmFwaFtub2RlSW5kZXhdLm9wKCkgIT0gR2V0
TG9jYWwpOworICAgICAgICAgICAgQVNTRVJUKG5vZGUtPm9wKCkgIT0gRmx1c2ggJiYgbm9kZS0+
b3AoKSAhPSBHZXRMb2NhbCk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIC8vIEVtaXQgYSBG
bHVzaCByZWdhcmRsZXNzIG9mIHdoZXRoZXIgd2UgYWxyZWFkeSBmbHVzaGVkIGl0LgogICAgICAg
ICAgICAgLy8gVGhpcyBnaXZlcyB1cyBndWlkYW5jZSB0byBzZWUgdGhhdCB0aGUgdmFyaWFibGUg
YWxzbyBuZWVkcyB0byBiZSBmbHVzaGVkCiAgICAgICAgICAgICAvLyBmb3IgYXJndW1lbnRzLCBl
dmVuIGlmIGl0IGFscmVhZHkgaGFkIHRvIGJlIGZsdXNoZWQgZm9yIG90aGVyIHJlYXNvbnMuCi0g
ICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9IG5vZGUu
dmFyaWFibGVBY2Nlc3NEYXRhKCk7CisgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZh
cmlhYmxlQWNjZXNzRGF0YSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOwogICAgICAgICAg
ICAgdmFyaWFibGVBY2Nlc3NEYXRhLT5tZXJnZUlzQ2FwdHVyZWQoaXNDYXB0dXJlZCk7Ci0gICAg
ICAgICAgICBhZGRUb0dyYXBoKEZsdXNoLCBPcEluZm8odmFyaWFibGVBY2Nlc3NEYXRhKSwgbm9k
ZUluZGV4KTsKKyAgICAgICAgICAgIGFkZFRvR3JhcGgoRmx1c2gsIE9wSW5mbyh2YXJpYWJsZUFj
Y2Vzc0RhdGEpLCBub2RlKTsKICAgICAgICAgICAgIGlmIChhcmd1bWVudFBvc2l0aW9uKQogICAg
ICAgICAgICAgICAgIGFyZ3VtZW50UG9zaXRpb24tPmFkZFZhcmlhYmxlKHZhcmlhYmxlQWNjZXNz
RGF0YSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAg
IFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhID0gbmV3VmFyaWFibGVBY2Nl
c3NEYXRhKG9wZXJhbmQsIGlzQ2FwdHVyZWQpOwotICAgICAgICBOb2RlSW5kZXggcGhpID0gYWRk
VG9HcmFwaChQaGksIE9wSW5mbyh2YXJpYWJsZUFjY2Vzc0RhdGEpKTsKLSAgICAgICAgbm9kZUlu
ZGV4ID0gYWRkVG9HcmFwaChGbHVzaCwgT3BJbmZvKHZhcmlhYmxlQWNjZXNzRGF0YSksIHBoaSk7
CisgICAgICAgIE5vZGUqIHBoaSA9IGFkZFRvR3JhcGgoUGhpLCBPcEluZm8odmFyaWFibGVBY2Nl
c3NEYXRhKSk7CisgICAgICAgIG5vZGUgPSBhZGRUb0dyYXBoKEZsdXNoLCBPcEluZm8odmFyaWFi
bGVBY2Nlc3NEYXRhKSwgcGhpKTsKICAgICAgICAgaWYgKG9wZXJhbmRJc0FyZ3VtZW50KG9wZXJh
bmQpKSB7CiAgICAgICAgICAgICBtX2FyZ3VtZW50UGhpU3RhY2suYXBwZW5kKFBoaVN0YWNrRW50
cnkobV9jdXJyZW50QmxvY2ssIHBoaSwgaW5kZXgpKTsKLSAgICAgICAgICAgIG1fY3VycmVudEJs
b2NrLT52YXJpYWJsZXNBdFRhaWwuYXJndW1lbnQoaW5kZXgpID0gbm9kZUluZGV4OwotICAgICAg
ICAgICAgbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0SGVhZC5zZXRBcmd1bWVudEZpcnN0VGlt
ZShpbmRleCwgbm9kZUluZGV4KTsKKyAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT52YXJpYWJs
ZXNBdFRhaWwuYXJndW1lbnQoaW5kZXgpID0gbm9kZTsKKyAgICAgICAgICAgIG1fY3VycmVudEJs
b2NrLT52YXJpYWJsZXNBdEhlYWQuc2V0QXJndW1lbnRGaXJzdFRpbWUoaW5kZXgsIG5vZGUpOwog
ICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgbV9sb2NhbFBoaVN0YWNrLmFwcGVuZChQaGlT
dGFja0VudHJ5KG1fY3VycmVudEJsb2NrLCBwaGksIGluZGV4KSk7Ci0gICAgICAgICAgICBtX2N1
cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLmxvY2FsKGluZGV4KSA9IG5vZGVJbmRleDsKLSAg
ICAgICAgICAgIG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdEhlYWQuc2V0TG9jYWxGaXJzdFRp
bWUoaW5kZXgsIG5vZGVJbmRleCk7CisgICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+dmFyaWFi
bGVzQXRUYWlsLmxvY2FsKGluZGV4KSA9IG5vZGU7CisgICAgICAgICAgICBtX2N1cnJlbnRCbG9j
ay0+dmFyaWFibGVzQXRIZWFkLnNldExvY2FsRmlyc3RUaW1lKGluZGV4LCBub2RlKTsKICAgICAg
ICAgfQogICAgICAgICBpZiAoYXJndW1lbnRQb3NpdGlvbikKICAgICAgICAgICAgIGFyZ3VtZW50
UG9zaXRpb24tPmFkZFZhcmlhYmxlKHZhcmlhYmxlQWNjZXNzRGF0YSk7CkBAIC01NzEsMzUgKzU2
MCwzMyBAQCBwcml2YXRlOgogICAgIH0KIAogICAgIC8vIEdldCBhbiBvcGVyYW5kLCBhbmQgcGVy
Zm9ybSBhIFRvSW50MzIvVG9OdW1iZXIgY29udmVyc2lvbiBvbiBpdC4KLSAgICBOb2RlSW5kZXgg
Z2V0VG9JbnQzMihpbnQgb3BlcmFuZCkKKyAgICBOb2RlKiBnZXRUb0ludDMyKGludCBvcGVyYW5k
KQogICAgIHsKICAgICAgICAgcmV0dXJuIHRvSW50MzIoZ2V0KG9wZXJhbmQpKTsKICAgICB9CiAK
ICAgICAvLyBQZXJmb3JtIGFuIEVTNSBUb0ludDMyIG9wZXJhdGlvbiAtIHJldHVybnMgYSBub2Rl
IG9mIHR5cGUgTm9kZVJlc3VsdEludDMyLgotICAgIE5vZGVJbmRleCB0b0ludDMyKE5vZGVJbmRl
eCBpbmRleCkKKyAgICBOb2RlKiB0b0ludDMyKE5vZGUqIG5vZGUpCiAgICAgewotICAgICAgICBO
b2RlJiBub2RlID0gbV9ncmFwaFtpbmRleF07Ci0KLSAgICAgICAgaWYgKG5vZGUuaGFzSW50MzJS
ZXN1bHQoKSkKLSAgICAgICAgICAgIHJldHVybiBpbmRleDsKKyAgICAgICAgaWYgKG5vZGUtPmhh
c0ludDMyUmVzdWx0KCkpCisgICAgICAgICAgICByZXR1cm4gbm9kZTsKIAotICAgICAgICBpZiAo
bm9kZS5vcCgpID09IFVJbnQzMlRvTnVtYmVyKQotICAgICAgICAgICAgcmV0dXJuIG5vZGUuY2hp
bGQxKCkuaW5kZXgoKTsKKyAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gVUludDMyVG9OdW1iZXIp
CisgICAgICAgICAgICByZXR1cm4gbm9kZS0+Y2hpbGQxKCkubm9kZSgpOwogCiAgICAgICAgIC8v
IENoZWNrIGZvciBudW1lcmljIGNvbnN0YW50cyBib3hlZCBhcyBKU1ZhbHVlcy4KLSAgICAgICAg
aWYgKG5vZGUub3AoKSA9PSBKU0NvbnN0YW50KSB7Ci0gICAgICAgICAgICBKU1ZhbHVlIHYgPSB2
YWx1ZU9mSlNDb25zdGFudChpbmRleCk7CisgICAgICAgIGlmIChub2RlLT5vcCgpID09IEpTQ29u
c3RhbnQpIHsKKyAgICAgICAgICAgIEpTVmFsdWUgdiA9IHZhbHVlT2ZKU0NvbnN0YW50KG5vZGUp
OwogICAgICAgICAgICAgaWYgKHYuaXNJbnQzMigpKQotICAgICAgICAgICAgICAgIHJldHVybiBn
ZXRKU0NvbnN0YW50KG5vZGUuY29uc3RhbnROdW1iZXIoKSk7CisgICAgICAgICAgICAgICAgcmV0
dXJuIGdldEpTQ29uc3RhbnQobm9kZS0+Y29uc3RhbnROdW1iZXIoKSk7CiAgICAgICAgICAgICBp
ZiAodi5pc051bWJlcigpKQogICAgICAgICAgICAgICAgIHJldHVybiBnZXRKU0NvbnN0YW50Rm9y
VmFsdWUoSlNWYWx1ZShKU0M6OnRvSW50MzIodi5hc051bWJlcigpKSkpOwogICAgICAgICB9CiAK
LSAgICAgICAgcmV0dXJuIGFkZFRvR3JhcGgoVmFsdWVUb0ludDMyLCBpbmRleCk7CisgICAgICAg
IHJldHVybiBhZGRUb0dyYXBoKFZhbHVlVG9JbnQzMiwgbm9kZSk7CiAgICAgfQogCi0gICAgTm9k
ZUluZGV4IGdldEpTQ29uc3RhbnRGb3JWYWx1ZShKU1ZhbHVlIGNvbnN0YW50VmFsdWUpCisgICAg
Tm9kZSogZ2V0SlNDb25zdGFudEZvclZhbHVlKEpTVmFsdWUgY29uc3RhbnRWYWx1ZSkKICAgICB7
CiAgICAgICAgIHVuc2lnbmVkIGNvbnN0YW50SW5kZXggPSBtX2NvZGVCbG9jay0+YWRkT3JGaW5k
Q29uc3RhbnQoY29uc3RhbnRWYWx1ZSk7CiAgICAgICAgIGlmIChjb25zdGFudEluZGV4ID49IG1f
Y29uc3RhbnRzLnNpemUoKSkKQEAgLTYxMCw1NSArNTk3LDU1IEBAIHByaXZhdGU6CiAgICAgICAg
IHJldHVybiBnZXRKU0NvbnN0YW50KGNvbnN0YW50SW5kZXgpOwogICAgIH0KIAotICAgIE5vZGVJ
bmRleCBnZXRKU0NvbnN0YW50KHVuc2lnbmVkIGNvbnN0YW50KQorICAgIE5vZGUqIGdldEpTQ29u
c3RhbnQodW5zaWduZWQgY29uc3RhbnQpCiAgICAgewotICAgICAgICBOb2RlSW5kZXggaW5kZXgg
PSBtX2NvbnN0YW50c1tjb25zdGFudF0uYXNKU1ZhbHVlOwotICAgICAgICBpZiAoaW5kZXggIT0g
Tm9Ob2RlKQotICAgICAgICAgICAgcmV0dXJuIGluZGV4OworICAgICAgICBOb2RlKiBub2RlID0g
bV9jb25zdGFudHNbY29uc3RhbnRdLmFzSlNWYWx1ZTsKKyAgICAgICAgaWYgKG5vZGUpCisgICAg
ICAgICAgICByZXR1cm4gbm9kZTsKIAotICAgICAgICBOb2RlSW5kZXggcmVzdWx0SW5kZXggPSBh
ZGRUb0dyYXBoKEpTQ29uc3RhbnQsIE9wSW5mbyhjb25zdGFudCkpOwotICAgICAgICBtX2NvbnN0
YW50c1tjb25zdGFudF0uYXNKU1ZhbHVlID0gcmVzdWx0SW5kZXg7Ci0gICAgICAgIHJldHVybiBy
ZXN1bHRJbmRleDsKKyAgICAgICAgTm9kZSogcmVzdWx0ID0gYWRkVG9HcmFwaChKU0NvbnN0YW50
LCBPcEluZm8oY29uc3RhbnQpKTsKKyAgICAgICAgbV9jb25zdGFudHNbY29uc3RhbnRdLmFzSlNW
YWx1ZSA9IHJlc3VsdDsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKLSAgICBOb2Rl
SW5kZXggZ2V0Q2FsbGVlKCkKKyAgICBOb2RlKiBnZXRDYWxsZWUoKQogICAgIHsKICAgICAgICAg
cmV0dXJuIGFkZFRvR3JhcGgoR2V0Q2FsbGVlKTsKICAgICB9CiAKICAgICAvLyBIZWxwZXIgZnVu
Y3Rpb25zIHRvIGdldC9zZXQgdGhlIHRoaXMgdmFsdWUuCi0gICAgTm9kZUluZGV4IGdldFRoaXMo
KQorICAgIE5vZGUqIGdldFRoaXMoKQogICAgIHsKICAgICAgICAgcmV0dXJuIGdldChtX2lubGlu
ZVN0YWNrVG9wLT5tX2NvZGVCbG9jay0+dGhpc1JlZ2lzdGVyKCkpOwogICAgIH0KLSAgICB2b2lk
IHNldFRoaXMoTm9kZUluZGV4IHZhbHVlKQorICAgIHZvaWQgc2V0VGhpcyhOb2RlKiB2YWx1ZSkK
ICAgICB7CiAgICAgICAgIHNldChtX2lubGluZVN0YWNrVG9wLT5tX2NvZGVCbG9jay0+dGhpc1Jl
Z2lzdGVyKCksIHZhbHVlKTsKICAgICB9CiAKICAgICAvLyBDb252ZW5pZW5jZSBtZXRob2RzIGZv
ciBjaGVja2luZyBub2RlcyBmb3IgY29uc3RhbnRzLgotICAgIGJvb2wgaXNKU0NvbnN0YW50KE5v
ZGVJbmRleCBpbmRleCkKKyAgICBib29sIGlzSlNDb25zdGFudChOb2RlKiBub2RlKQogICAgIHsK
LSAgICAgICAgcmV0dXJuIG1fZ3JhcGhbaW5kZXhdLm9wKCkgPT0gSlNDb25zdGFudDsKKyAgICAg
ICAgcmV0dXJuIG5vZGUtPm9wKCkgPT0gSlNDb25zdGFudDsKICAgICB9Ci0gICAgYm9vbCBpc0lu
dDMyQ29uc3RhbnQoTm9kZUluZGV4IG5vZGVJbmRleCkKKyAgICBib29sIGlzSW50MzJDb25zdGFu
dChOb2RlKiBub2RlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGlzSlNDb25zdGFudChub2RlSW5k
ZXgpICYmIHZhbHVlT2ZKU0NvbnN0YW50KG5vZGVJbmRleCkuaXNJbnQzMigpOworICAgICAgICBy
ZXR1cm4gaXNKU0NvbnN0YW50KG5vZGUpICYmIHZhbHVlT2ZKU0NvbnN0YW50KG5vZGUpLmlzSW50
MzIoKTsKICAgICB9CiAgICAgLy8gQ29udmVuaWVuY2UgbWV0aG9kcyBmb3IgZ2V0dGluZyBjb25z
dGFudCB2YWx1ZXMuCi0gICAgSlNWYWx1ZSB2YWx1ZU9mSlNDb25zdGFudChOb2RlSW5kZXggaW5k
ZXgpCisgICAgSlNWYWx1ZSB2YWx1ZU9mSlNDb25zdGFudChOb2RlKiBub2RlKQogICAgIHsKLSAg
ICAgICAgQVNTRVJUKGlzSlNDb25zdGFudChpbmRleCkpOwotICAgICAgICByZXR1cm4gbV9jb2Rl
QmxvY2stPmdldENvbnN0YW50KEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4ICsgbV9ncmFwaFtp
bmRleF0uY29uc3RhbnROdW1iZXIoKSk7CisgICAgICAgIEFTU0VSVChpc0pTQ29uc3RhbnQobm9k
ZSkpOworICAgICAgICByZXR1cm4gbV9jb2RlQmxvY2stPmdldENvbnN0YW50KEZpcnN0Q29uc3Rh
bnRSZWdpc3RlckluZGV4ICsgbm9kZS0+Y29uc3RhbnROdW1iZXIoKSk7CiAgICAgfQotICAgIGlu
dDMyX3QgdmFsdWVPZkludDMyQ29uc3RhbnQoTm9kZUluZGV4IG5vZGVJbmRleCkKKyAgICBpbnQz
Ml90IHZhbHVlT2ZJbnQzMkNvbnN0YW50KE5vZGUqIG5vZGUpCiAgICAgewotICAgICAgICBBU1NF
UlQoaXNJbnQzMkNvbnN0YW50KG5vZGVJbmRleCkpOwotICAgICAgICByZXR1cm4gdmFsdWVPZkpT
Q29uc3RhbnQobm9kZUluZGV4KS5hc0ludDMyKCk7CisgICAgICAgIEFTU0VSVChpc0ludDMyQ29u
c3RhbnQobm9kZSkpOworICAgICAgICByZXR1cm4gdmFsdWVPZkpTQ29uc3RhbnQobm9kZSkuYXNJ
bnQzMigpOwogICAgIH0KICAgICAKICAgICAvLyBUaGlzIG1ldGhvZCByZXR1cm5zIGEgSlNDb25z
dGFudCB3aXRoIHRoZSB2YWx1ZSAndW5kZWZpbmVkJy4KLSAgICBOb2RlSW5kZXggY29uc3RhbnRV
bmRlZmluZWQoKQorICAgIE5vZGUqIGNvbnN0YW50VW5kZWZpbmVkKCkKICAgICB7CiAgICAgICAg
IC8vIEhhcyBtX2NvbnN0YW50VW5kZWZpbmVkIGJlZW4gc2V0IHVwIHlldD8KICAgICAgICAgaWYg
KG1fY29uc3RhbnRVbmRlZmluZWQgPT0gVUlOVF9NQVgpIHsKQEAgLTY4Myw3ICs2NzAsNyBAQCBw
cml2YXRlOgogICAgIH0KIAogICAgIC8vIFRoaXMgbWV0aG9kIHJldHVybnMgYSBKU0NvbnN0YW50
IHdpdGggdGhlIHZhbHVlICdudWxsJy4KLSAgICBOb2RlSW5kZXggY29uc3RhbnROdWxsKCkKKyAg
ICBOb2RlKiBjb25zdGFudE51bGwoKQogICAgIHsKICAgICAgICAgLy8gSGFzIG1fY29uc3RhbnRO
dWxsIGJlZW4gc2V0IHVwIHlldD8KICAgICAgICAgaWYgKG1fY29uc3RhbnROdWxsID09IFVJTlRf
TUFYKSB7CkBAIC03MDgsNyArNjk1LDcgQEAgcHJpdmF0ZToKICAgICB9CiAKICAgICAvLyBUaGlz
IG1ldGhvZCByZXR1cm5zIGEgRG91YmxlQ29uc3RhbnQgd2l0aCB0aGUgdmFsdWUgMS4KLSAgICBO
b2RlSW5kZXggb25lKCkKKyAgICBOb2RlKiBvbmUoKQogICAgIHsKICAgICAgICAgLy8gSGFzIG1f
Y29uc3RhbnQxIGJlZW4gc2V0IHVwIHlldD8KICAgICAgICAgaWYgKG1fY29uc3RhbnQxID09IFVJ
TlRfTUFYKSB7CkBAIC03MzQsNyArNzIxLDcgQEAgcHJpdmF0ZToKICAgICB9CiAgICAgCiAgICAg
Ly8gVGhpcyBtZXRob2QgcmV0dXJucyBhIERvdWJsZUNvbnN0YW50IHdpdGggdGhlIHZhbHVlIE5h
Ti4KLSAgICBOb2RlSW5kZXggY29uc3RhbnROYU4oKQorICAgIE5vZGUqIGNvbnN0YW50TmFOKCkK
ICAgICB7CiAgICAgICAgIEpTVmFsdWUgbmFuID0ganNOYU4oKTsKICAgICAgICAgCkBAIC03NjEs
OSArNzQ4LDkgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIGdldEpTQ29uc3RhbnQobV9jb25z
dGFudE5hTik7CiAgICAgfQogICAgIAotICAgIE5vZGVJbmRleCBjZWxsQ29uc3RhbnQoSlNDZWxs
KiBjZWxsKQorICAgIE5vZGUqIGNlbGxDb25zdGFudChKU0NlbGwqIGNlbGwpCiAgICAgewotICAg
ICAgICBIYXNoTWFwPEpTQ2VsbCosIE5vZGVJbmRleD46OkFkZFJlc3VsdCByZXN1bHQgPSBtX2Nl
bGxDb25zdGFudE5vZGVzLmFkZChjZWxsLCBOb05vZGUpOworICAgICAgICBIYXNoTWFwPEpTQ2Vs
bCosIE5vZGVJbmRleD46OkFkZFJlc3VsdCByZXN1bHQgPSBtX2NlbGxDb25zdGFudE5vZGVzLmFk
ZChjZWxsLCAwKTsKICAgICAgICAgaWYgKHJlc3VsdC5pc05ld0VudHJ5KQogICAgICAgICAgICAg
cmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IGFkZFRvR3JhcGgoV2Vha0pTQ29uc3RhbnQsIE9wSW5m
byhjZWxsKSk7CiAgICAgICAgIApAQCAtNzc3LDYzICs3NjQsNjkgQEAgcHJpdmF0ZToKIAogICAg
IC8vIFRoZXNlIG1ldGhvZHMgY3JlYXRlIGEgbm9kZSBhbmQgYWRkIGl0IHRvIHRoZSBncmFwaC4g
SWYgbm9kZXMgb2YgdGhpcyB0eXBlIGFyZQogICAgIC8vICdtdXN0R2VuZXJhdGUnIHRoZW4gdGhl
IG5vZGUgIHdpbGwgaW1wbGljaXRseSBiZSByZWYnZWQgdG8gZW5zdXJlIGdlbmVyYXRpb24uCi0g
ICAgTm9kZUluZGV4IGFkZFRvR3JhcGgoTm9kZVR5cGUgb3AsIE5vZGVJbmRleCBjaGlsZDEgPSBO
b05vZGUsIE5vZGVJbmRleCBjaGlsZDIgPSBOb05vZGUsIE5vZGVJbmRleCBjaGlsZDMgPSBOb05v
ZGUpCisgICAgTm9kZSogYWRkVG9HcmFwaChOb2RlVHlwZSBvcCwgTm9kZSogY2hpbGQxID0gMCwg
Tm9kZSogY2hpbGQyID0gMCwgTm9kZSogY2hpbGQzID0gMCkKICAgICB7Ci0gICAgICAgIE5vZGVJ
bmRleCByZXN1bHRJbmRleCA9IChOb2RlSW5kZXgpbV9ncmFwaC5zaXplKCk7Ci0gICAgICAgIG1f
Z3JhcGguYXBwZW5kKE5vZGUob3AsIGN1cnJlbnRDb2RlT3JpZ2luKCksIGNoaWxkMSwgY2hpbGQy
LCBjaGlsZDMpKTsKKyAgICAgICAgTm9kZSogcmVzdWx0ID0gbV9ncmFwaC5hZGROb2RlKAorICAg
ICAgICAgICAgRG9udFJlZkNoaWxkcmVuLCBEb250UmVmTm9kZSwgU3BlY05vbmUsCisgICAgICAg
ICAgICBvcCwgY3VycmVudENvZGVPcmlnaW4oKSwgY2hpbGQxLCBjaGlsZDIsIGNoaWxkMyk7CiAg
ICAgICAgIEFTU0VSVChvcCAhPSBQaGkpOwotICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5k
KHJlc3VsdEluZGV4KTsKKyAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZChyZXN1bHQpOwog
CiAgICAgICAgIGlmIChkZWZhdWx0RmxhZ3Mob3ApICYgTm9kZU11c3RHZW5lcmF0ZSkKLSAgICAg
ICAgICAgIG1fZ3JhcGgucmVmKHJlc3VsdEluZGV4KTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdElu
ZGV4OworICAgICAgICAgICAgbV9ncmFwaC5yZWYocmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIHJl
c3VsdDsKICAgICB9Ci0gICAgTm9kZUluZGV4IGFkZFRvR3JhcGgoTm9kZVR5cGUgb3AsIE9wSW5m
byBpbmZvLCBOb2RlSW5kZXggY2hpbGQxID0gTm9Ob2RlLCBOb2RlSW5kZXggY2hpbGQyID0gTm9O
b2RlLCBOb2RlSW5kZXggY2hpbGQzID0gTm9Ob2RlKQorICAgIE5vZGUqIGFkZFRvR3JhcGgoTm9k
ZVR5cGUgb3AsIE9wSW5mbyBpbmZvLCBOb2RlKiBjaGlsZDEgPSAwLCBOb2RlKiBjaGlsZDIgPSAw
LCBOb2RlKiBjaGlsZDMgPSAwKQogICAgIHsKLSAgICAgICAgTm9kZUluZGV4IHJlc3VsdEluZGV4
ID0gKE5vZGVJbmRleCltX2dyYXBoLnNpemUoKTsKLSAgICAgICAgbV9ncmFwaC5hcHBlbmQoTm9k
ZShvcCwgY3VycmVudENvZGVPcmlnaW4oKSwgaW5mbywgY2hpbGQxLCBjaGlsZDIsIGNoaWxkMykp
OworICAgICAgICBOb2RlKiByZXN1bHQgPSBtX2dyYXBoLmFkZE5vZGUoCisgICAgICAgICAgICBE
b250UmVmQ2hpbGRyZW4sIERvbnRSZWZOb2RlLCBTcGVjTm9uZSwKKyAgICAgICAgICAgIG9wLCBj
dXJyZW50Q29kZU9yaWdpbigpLCBpbmZvLCBjaGlsZDEsIGNoaWxkMiwgY2hpbGQzKTsKICAgICAg
ICAgaWYgKG9wID09IFBoaSkKLSAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT5waGlzLmFwcGVu
ZChyZXN1bHRJbmRleCk7CisgICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+cGhpcy5hcHBlbmQo
cmVzdWx0KTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVu
ZChyZXN1bHRJbmRleCk7CisgICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kKHJlc3Vs
dCk7CiAKICAgICAgICAgaWYgKGRlZmF1bHRGbGFncyhvcCkgJiBOb2RlTXVzdEdlbmVyYXRlKQot
ICAgICAgICAgICAgbV9ncmFwaC5yZWYocmVzdWx0SW5kZXgpOwotICAgICAgICByZXR1cm4gcmVz
dWx0SW5kZXg7CisgICAgICAgICAgICBtX2dyYXBoLnJlZihyZXN1bHQpOworICAgICAgICByZXR1
cm4gcmVzdWx0OwogICAgIH0KLSAgICBOb2RlSW5kZXggYWRkVG9HcmFwaChOb2RlVHlwZSBvcCwg
T3BJbmZvIGluZm8xLCBPcEluZm8gaW5mbzIsIE5vZGVJbmRleCBjaGlsZDEgPSBOb05vZGUsIE5v
ZGVJbmRleCBjaGlsZDIgPSBOb05vZGUsIE5vZGVJbmRleCBjaGlsZDMgPSBOb05vZGUpCisgICAg
Tm9kZSogYWRkVG9HcmFwaChOb2RlVHlwZSBvcCwgT3BJbmZvIGluZm8xLCBPcEluZm8gaW5mbzIs
IE5vZGUqIGNoaWxkMSA9IDAsIE5vZGUqIGNoaWxkMiA9IDAsIE5vZGUqIGNoaWxkMyA9IDApCiAg
ICAgewotICAgICAgICBOb2RlSW5kZXggcmVzdWx0SW5kZXggPSAoTm9kZUluZGV4KW1fZ3JhcGgu
c2l6ZSgpOwotICAgICAgICBtX2dyYXBoLmFwcGVuZChOb2RlKG9wLCBjdXJyZW50Q29kZU9yaWdp
bigpLCBpbmZvMSwgaW5mbzIsIGNoaWxkMSwgY2hpbGQyLCBjaGlsZDMpKTsKKyAgICAgICAgTm9k
ZSogcmVzdWx0ID0gbV9ncmFwaC5hZGROb2RlKAorICAgICAgICAgICAgRG9udFJlZkNoaWxkcmVu
LCBEb250UmVmTm9kZSwgU3BlY05vbmUsCisgICAgICAgICAgICBvcCwgY3VycmVudENvZGVPcmln
aW4oKSwgaW5mbzEsIGluZm8yLCBjaGlsZDEsIGNoaWxkMiwgY2hpbGQzKTsKICAgICAgICAgQVNT
RVJUKG9wICE9IFBoaSk7Ci0gICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmQocmVzdWx0SW5k
ZXgpOworICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kKHJlc3VsdCk7CiAKICAgICAgICAg
aWYgKGRlZmF1bHRGbGFncyhvcCkgJiBOb2RlTXVzdEdlbmVyYXRlKQotICAgICAgICAgICAgbV9n
cmFwaC5yZWYocmVzdWx0SW5kZXgpOwotICAgICAgICByZXR1cm4gcmVzdWx0SW5kZXg7CisgICAg
ICAgICAgICBtX2dyYXBoLnJlZihyZXN1bHQpOworICAgICAgICByZXR1cm4gcmVzdWx0OwogICAg
IH0KICAgICAKLSAgICBOb2RlSW5kZXggYWRkVG9HcmFwaChOb2RlOjpWYXJBcmdUYWcsIE5vZGVU
eXBlIG9wLCBPcEluZm8gaW5mbzEsIE9wSW5mbyBpbmZvMikKKyAgICBOb2RlKiBhZGRUb0dyYXBo
KE5vZGU6OlZhckFyZ1RhZywgTm9kZVR5cGUgb3AsIE9wSW5mbyBpbmZvMSwgT3BJbmZvIGluZm8y
KQogICAgIHsKLSAgICAgICAgTm9kZUluZGV4IHJlc3VsdEluZGV4ID0gKE5vZGVJbmRleCltX2dy
YXBoLnNpemUoKTsKLSAgICAgICAgbV9ncmFwaC5hcHBlbmQoTm9kZShOb2RlOjpWYXJBcmcsIG9w
LCBjdXJyZW50Q29kZU9yaWdpbigpLCBpbmZvMSwgaW5mbzIsIG1fZ3JhcGgubV92YXJBcmdDaGls
ZHJlbi5zaXplKCkgLSBtX251bVBhc3NlZFZhckFyZ3MsIG1fbnVtUGFzc2VkVmFyQXJncykpOwor
ICAgICAgICBOb2RlKiByZXN1bHQgPSBtX2dyYXBoLmFkZE5vZGUoCisgICAgICAgICAgICBEb250
UmVmQ2hpbGRyZW4sIERvbnRSZWZOb2RlLCBTcGVjTm9uZSwKKyAgICAgICAgICAgIE5vZGU6OlZh
ckFyZywgb3AsIGN1cnJlbnRDb2RlT3JpZ2luKCksIGluZm8xLCBpbmZvMiwKKyAgICAgICAgICAg
IG1fZ3JhcGgubV92YXJBcmdDaGlsZHJlbi5zaXplKCkgLSBtX251bVBhc3NlZFZhckFyZ3MsIG1f
bnVtUGFzc2VkVmFyQXJncyk7CiAgICAgICAgIEFTU0VSVChvcCAhPSBQaGkpOwotICAgICAgICBt
X2N1cnJlbnRCbG9jay0+YXBwZW5kKHJlc3VsdEluZGV4KTsKKyAgICAgICAgbV9jdXJyZW50Qmxv
Y2stPmFwcGVuZChyZXN1bHQpOwogICAgICAgICAKICAgICAgICAgbV9udW1QYXNzZWRWYXJBcmdz
ID0gMDsKICAgICAgICAgCiAgICAgICAgIGlmIChkZWZhdWx0RmxhZ3Mob3ApICYgTm9kZU11c3RH
ZW5lcmF0ZSkKLSAgICAgICAgICAgIG1fZ3JhcGgucmVmKHJlc3VsdEluZGV4KTsKLSAgICAgICAg
cmV0dXJuIHJlc3VsdEluZGV4OworICAgICAgICAgICAgbV9ncmFwaC5yZWYocmVzdWx0KTsKKyAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKLSAgICBOb2RlSW5kZXggaW5zZXJ0UGhpTm9k
ZShPcEluZm8gaW5mbywgQmFzaWNCbG9jayogYmxvY2spCisgICAgTm9kZSogaW5zZXJ0UGhpTm9k
ZShPcEluZm8gaW5mbywgQmFzaWNCbG9jayogYmxvY2spCiAgICAgewotICAgICAgICBOb2RlSW5k
ZXggcmVzdWx0SW5kZXggPSAoTm9kZUluZGV4KW1fZ3JhcGguc2l6ZSgpOwotICAgICAgICBtX2dy
YXBoLmFwcGVuZChOb2RlKFBoaSwgY3VycmVudENvZGVPcmlnaW4oKSwgaW5mbykpOwotICAgICAg
ICBibG9jay0+cGhpcy5hcHBlbmQocmVzdWx0SW5kZXgpOworICAgICAgICBOb2RlKiByZXN1bHQg
PSBtX2dyYXBoLmFkZE5vZGUoCisgICAgICAgICAgICBEb250UmVmQ2hpbGRyZW4sIERvbnRSZWZO
b2RlLCBTcGVjTm9uZSwKKyAgICAgICAgICAgIFBoaSwgY3VycmVudENvZGVPcmlnaW4oKSwgaW5m
byk7CisgICAgICAgIGJsb2NrLT5waGlzLmFwcGVuZChyZXN1bHQpOwogCi0gICAgICAgIHJldHVy
biByZXN1bHRJbmRleDsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKICAgICB2b2lk
IGFkZFZhckFyZ0NoaWxkKE5vZGVJbmRleCBjaGlsZCkKQEAgLTg0Miw3ICs4MzUsNyBAQCBwcml2
YXRlOgogICAgICAgICBtX251bVBhc3NlZFZhckFyZ3MrKzsKICAgICB9CiAgICAgCi0gICAgTm9k
ZUluZGV4IGFkZENhbGwoSW50ZXJwcmV0ZXIqIGludGVycHJldGVyLCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uLCBOb2RlVHlwZSBvcCkKKyAgICBOb2RlKiBhZGRDYWxsKEludGVycHJl
dGVyKiBpbnRlcnByZXRlciwgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgTm9kZVR5
cGUgb3ApCiAgICAgewogICAgICAgICBJbnN0cnVjdGlvbiogcHV0SW5zdHJ1Y3Rpb24gPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24gKyBPUENPREVfTEVOR1RIKG9wX2NhbGwpOwogCkBAIC04NjIsNDggKzg1
NSw0OCBAQCBwcml2YXRlOgogICAgICAgICBmb3IgKGludCBpID0gMCArIGR1bW15VGhpc0FyZ3Vt
ZW50OyBpIDwgYXJnQ291bnQ7ICsraSkKICAgICAgICAgICAgIGFkZFZhckFyZ0NoaWxkKGdldChy
ZWdpc3Rlck9mZnNldCArIGFyZ3VtZW50VG9PcGVyYW5kKGkpKSk7CiAKLSAgICAgICAgTm9kZUlu
ZGV4IGNhbGwgPSBhZGRUb0dyYXBoKE5vZGU6OlZhckFyZywgb3AsIE9wSW5mbygwKSwgT3BJbmZv
KHByZWRpY3Rpb24pKTsKKyAgICAgICAgTm9kZSogY2FsbCA9IGFkZFRvR3JhcGgoTm9kZTo6VmFy
QXJnLCBvcCwgT3BJbmZvKDApLCBPcEluZm8ocHJlZGljdGlvbikpOwogICAgICAgICBpZiAoaW50
ZXJwcmV0ZXItPmdldE9wY29kZUlEKHB1dEluc3RydWN0aW9uLT51Lm9wY29kZSkgPT0gb3BfY2Fs
bF9wdXRfcmVzdWx0KQogICAgICAgICAgICAgc2V0KHB1dEluc3RydWN0aW9uWzFdLnUub3BlcmFu
ZCwgY2FsbCk7CiAgICAgICAgIHJldHVybiBjYWxsOwogICAgIH0KICAgICAKLSAgICBOb2RlSW5k
ZXggYWRkU3RydWN0dXJlVHJhbnNpdGlvbkNoZWNrKEpTQ2VsbCogb2JqZWN0LCBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSkKKyAgICBOb2RlKiBhZGRTdHJ1Y3R1cmVUcmFuc2l0aW9uQ2hlY2soSlNDZWxs
KiBvYmplY3QsIFN0cnVjdHVyZSogc3RydWN0dXJlKQogICAgIHsKICAgICAgICAgLy8gQWRkIGEg
d2VhayBKUyBjb25zdGFudCBmb3IgdGhlIG9iamVjdCByZWdhcmRsZXNzLCBzaW5jZSB0aGUgY29k
ZSBzaG91bGQKICAgICAgICAgLy8gYmUgamV0dGlzb25lZCBpZiB0aGUgb2JqZWN0IGV2ZXIgZGll
cy4KLSAgICAgICAgTm9kZUluZGV4IG9iamVjdEluZGV4ID0gY2VsbENvbnN0YW50KG9iamVjdCk7
CisgICAgICAgIE5vZGUqIG9iamVjdE5vZGUgPSBjZWxsQ29uc3RhbnQob2JqZWN0KTsKICAgICAg
ICAgCiAgICAgICAgIGlmIChvYmplY3QtPnN0cnVjdHVyZSgpID09IHN0cnVjdHVyZSAmJiBzdHJ1
Y3R1cmUtPnRyYW5zaXRpb25XYXRjaHBvaW50U2V0SXNTdGlsbFZhbGlkKCkpIHsKLSAgICAgICAg
ICAgIGFkZFRvR3JhcGgoU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnQsIE9wSW5mbyhzdHJ1
Y3R1cmUpLCBvYmplY3RJbmRleCk7Ci0gICAgICAgICAgICByZXR1cm4gb2JqZWN0SW5kZXg7Cisg
ICAgICAgICAgICBhZGRUb0dyYXBoKFN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50LCBPcElu
Zm8oc3RydWN0dXJlKSwgb2JqZWN0Tm9kZSk7CisgICAgICAgICAgICByZXR1cm4gb2JqZWN0Tm9k
ZTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgYWRkVG9HcmFwaChDaGVja1N0cnVjdHVy
ZSwgT3BJbmZvKG1fZ3JhcGguYWRkU3RydWN0dXJlU2V0KHN0cnVjdHVyZSkpLCBvYmplY3RJbmRl
eCk7CisgICAgICAgIGFkZFRvR3JhcGgoQ2hlY2tTdHJ1Y3R1cmUsIE9wSW5mbyhtX2dyYXBoLmFk
ZFN0cnVjdHVyZVNldChzdHJ1Y3R1cmUpKSwgb2JqZWN0Tm9kZSk7CiAgICAgICAgIAotICAgICAg
ICByZXR1cm4gb2JqZWN0SW5kZXg7CisgICAgICAgIHJldHVybiBvYmplY3ROb2RlOwogICAgIH0K
ICAgICAKLSAgICBOb2RlSW5kZXggYWRkU3RydWN0dXJlVHJhbnNpdGlvbkNoZWNrKEpTQ2VsbCog
b2JqZWN0KQorICAgIE5vZGUqIGFkZFN0cnVjdHVyZVRyYW5zaXRpb25DaGVjayhKU0NlbGwqIG9i
amVjdCkKICAgICB7CiAgICAgICAgIHJldHVybiBhZGRTdHJ1Y3R1cmVUcmFuc2l0aW9uQ2hlY2so
b2JqZWN0LCBvYmplY3QtPnN0cnVjdHVyZSgpKTsKICAgICB9CiAgICAgCi0gICAgU3BlY3VsYXRl
ZFR5cGUgZ2V0UHJlZGljdGlvbldpdGhvdXRPU1JFeGl0KE5vZGVJbmRleCBub2RlSW5kZXgsIHVu
c2lnbmVkIGJ5dGVjb2RlSW5kZXgpCisgICAgU3BlY3VsYXRlZFR5cGUgZ2V0UHJlZGljdGlvbldp
dGhvdXRPU1JFeGl0KE5vZGUqIG5vZGUsIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpCiAgICAgewot
ICAgICAgICBVTlVTRURfUEFSQU0obm9kZUluZGV4KTsKKyAgICAgICAgVU5VU0VEX1BBUkFNKG5v
ZGUpOwogICAgICAgICAKICAgICAgICAgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiA9IG1faW5s
aW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jay0+dmFsdWVQcm9maWxlUHJlZGljdGlvbkZvckJ5
dGVjb2RlT2Zmc2V0KGJ5dGVjb2RlSW5kZXgpOwogI2lmIERGR19FTkFCTEUoREVCVUdfVkVSQk9T
RSkKLSAgICAgICAgZGF0YUxvZygiRHluYW1pYyBbQCIsIG5vZGVJbmRleCwgIiwgYmMjIiwgYnl0
ZWNvZGVJbmRleCwgIl0gcHJlZGljdGlvbjogIiwgU3BlY3VsYXRpb25EdW1wKHByZWRpY3Rpb24p
LCAiXG4iKTsKKyAgICAgICAgZGF0YUxvZygiRHluYW1pYyBbQCIsIG5vZGUtPmluZGV4KCksICIs
IGJjIyIsIGJ5dGVjb2RlSW5kZXgsICJdIHByZWRpY3Rpb246ICIsIFNwZWN1bGF0aW9uRHVtcChw
cmVkaWN0aW9uKSwgIlxuIik7CiAjZW5kaWYKICAgICAgICAgCiAgICAgICAgIHJldHVybiBwcmVk
aWN0aW9uOwogICAgIH0KIAotICAgIFNwZWN1bGF0ZWRUeXBlIGdldFByZWRpY3Rpb24oTm9kZUlu
ZGV4IG5vZGVJbmRleCwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCkKKyAgICBTcGVjdWxhdGVkVHlw
ZSBnZXRQcmVkaWN0aW9uKE5vZGUqIG5vZGUsIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpCiAgICAg
ewotICAgICAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uID0gZ2V0UHJlZGljdGlvbldpdGhv
dXRPU1JFeGl0KG5vZGVJbmRleCwgYnl0ZWNvZGVJbmRleCk7CisgICAgICAgIFNwZWN1bGF0ZWRU
eXBlIHByZWRpY3Rpb24gPSBnZXRQcmVkaWN0aW9uV2l0aG91dE9TUkV4aXQobm9kZSwgYnl0ZWNv
ZGVJbmRleCk7CiAgICAgICAgIAogICAgICAgICBpZiAocHJlZGljdGlvbiA9PSBTcGVjTm9uZSkg
ewogICAgICAgICAgICAgLy8gV2UgaGF2ZSBubyBpbmZvcm1hdGlvbiBhYm91dCB3aGF0IHZhbHVl
cyB0aGlzIG5vZGUgZ2VuZXJhdGVzLiBHaXZlIHVwCkBAIC05MzUsNyArOTI4LDcgQEAgcHJpdmF0
ZToKICAgICAgICAgcmV0dXJuIGdldEFycmF5TW9kZShwcm9maWxlLCBBcnJheTo6UmVhZCk7CiAg
ICAgfQogICAgIAotICAgIEFycmF5TW9kZSBnZXRBcnJheU1vZGVBbmRFbWl0Q2hlY2tzKEFycmF5
UHJvZmlsZSogcHJvZmlsZSwgQXJyYXk6OkFjdGlvbiBhY3Rpb24sIE5vZGVJbmRleCBiYXNlKQor
ICAgIEFycmF5TW9kZSBnZXRBcnJheU1vZGVBbmRFbWl0Q2hlY2tzKEFycmF5UHJvZmlsZSogcHJv
ZmlsZSwgQXJyYXk6OkFjdGlvbiBhY3Rpb24sIE5vZGUqIGJhc2UpCiAgICAgewogICAgICAgICBw
cm9maWxlLT5jb21wdXRlVXBkYXRlZFByZWRpY3Rpb24obV9pbmxpbmVTdGFja1RvcC0+bV9jb2Rl
QmxvY2spOwogICAgICAgICAKQEAgLTk1OSwxMiArOTUyLDEwIEBAIHByaXZhdGU6CiAgICAgICAg
IHJldHVybiByZXN1bHQ7CiAgICAgfQogICAgIAotICAgIE5vZGVJbmRleCBtYWtlU2FmZShOb2Rl
SW5kZXggbm9kZUluZGV4KQorICAgIE5vZGUqIG1ha2VTYWZlKE5vZGUqIG5vZGUpCiAgICAgewot
ICAgICAgICBOb2RlJiBub2RlID0gbV9ncmFwaFtub2RlSW5kZXhdOwotICAgICAgICAKICAgICAg
ICAgYm9vbCBsaWtlbHlUb1Rha2VTbG93Q2FzZTsKLSAgICAgICAgaWYgKCFpc1g4NigpICYmIG5v
ZGUub3AoKSA9PSBBcml0aE1vZCkKKyAgICAgICAgaWYgKCFpc1g4NigpICYmIG5vZGUtPm9wKCkg
PT0gQXJpdGhNb2QpCiAgICAgICAgICAgICBsaWtlbHlUb1Rha2VTbG93Q2FzZSA9IGZhbHNlOwog
ICAgICAgICBlbHNlCiAgICAgICAgICAgICBsaWtlbHlUb1Rha2VTbG93Q2FzZSA9IG1faW5saW5l
U3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jay0+bGlrZWx5VG9UYWtlU2xvd0Nhc2UobV9jdXJyZW50
SW5kZXgpOwpAQCAtOTcyLDMxICs5NjMsMzEgQEAgcHJpdmF0ZToKICAgICAgICAgaWYgKCFsaWtl
bHlUb1Rha2VTbG93Q2FzZQogICAgICAgICAgICAgJiYgIW1faW5saW5lU3RhY2tUb3AtPm1fZXhp
dFByb2ZpbGUuaGFzRXhpdFNpdGUobV9jdXJyZW50SW5kZXgsIE92ZXJmbG93KQogICAgICAgICAg
ICAgJiYgIW1faW5saW5lU3RhY2tUb3AtPm1fZXhpdFByb2ZpbGUuaGFzRXhpdFNpdGUobV9jdXJy
ZW50SW5kZXgsIE5lZ2F0aXZlWmVybykpCi0gICAgICAgICAgICByZXR1cm4gbm9kZUluZGV4Owor
ICAgICAgICAgICAgcmV0dXJuIG5vZGU7CiAgICAgICAgIAotICAgICAgICBzd2l0Y2ggKG1fZ3Jh
cGhbbm9kZUluZGV4XS5vcCgpKSB7CisgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewogICAg
ICAgICBjYXNlIFVJbnQzMlRvTnVtYmVyOgogICAgICAgICBjYXNlIEFyaXRoQWRkOgogICAgICAg
ICBjYXNlIEFyaXRoU3ViOgogICAgICAgICBjYXNlIEFyaXRoTmVnYXRlOgogICAgICAgICBjYXNl
IFZhbHVlQWRkOgogICAgICAgICBjYXNlIEFyaXRoTW9kOiAvLyBmb3IgQXJpdGhNb2QgIk1heU92
ZXJmbG93IiBtZWFucyB3ZSB0cmllZCB0byBkaXZpZGUgYnkgemVybywgb3Igd2Ugc2F3IGRvdWJs
ZS4KLSAgICAgICAgICAgIG1fZ3JhcGhbbm9kZUluZGV4XS5tZXJnZUZsYWdzKE5vZGVNYXlPdmVy
Zmxvdyk7CisgICAgICAgICAgICBub2RlLT5tZXJnZUZsYWdzKE5vZGVNYXlPdmVyZmxvdyk7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgICAgICBjYXNlIEFyaXRoTXVsOgog
ICAgICAgICAgICAgaWYgKG1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jay0+bGlrZWx5
VG9UYWtlRGVlcGVzdFNsb3dDYXNlKG1fY3VycmVudEluZGV4KQogICAgICAgICAgICAgICAgIHx8
IG1faW5saW5lU3RhY2tUb3AtPm1fZXhpdFByb2ZpbGUuaGFzRXhpdFNpdGUobV9jdXJyZW50SW5k
ZXgsIE92ZXJmbG93KSkgewogI2lmIERGR19FTkFCTEUoREVCVUdfVkVSQk9TRSkKLSAgICAgICAg
ICAgICAgICBkYXRhTG9nRigiTWFraW5nIEFyaXRoTXVsIEAldSB0YWtlIGRlZXBlc3Qgc2xvdyBj
YXNlLlxuIiwgbm9kZUluZGV4KTsKKyAgICAgICAgICAgICAgICBkYXRhTG9nRigiTWFraW5nIEFy
aXRoTXVsIEAldSB0YWtlIGRlZXBlc3Qgc2xvdyBjYXNlLlxuIiwgbm9kZS0+aW5kZXgoKSk7CiAj
ZW5kaWYKLSAgICAgICAgICAgICAgICBtX2dyYXBoW25vZGVJbmRleF0ubWVyZ2VGbGFncyhOb2Rl
TWF5T3ZlcmZsb3cgfCBOb2RlTWF5TmVnWmVybyk7CisgICAgICAgICAgICAgICAgbm9kZS0+bWVy
Z2VGbGFncyhOb2RlTWF5T3ZlcmZsb3cgfCBOb2RlTWF5TmVnWmVybyk7CiAgICAgICAgICAgICB9
IGVsc2UgaWYgKG1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jay0+bGlrZWx5VG9UYWtl
U2xvd0Nhc2UobV9jdXJyZW50SW5kZXgpCiAgICAgICAgICAgICAgICAgICAgICAgIHx8IG1faW5s
aW5lU3RhY2tUb3AtPm1fZXhpdFByb2ZpbGUuaGFzRXhpdFNpdGUobV9jdXJyZW50SW5kZXgsIE5l
Z2F0aXZlWmVybykpIHsKICNpZiBERkdfRU5BQkxFKERFQlVHX1ZFUkJPU0UpCi0gICAgICAgICAg
ICAgICAgZGF0YUxvZ0YoIk1ha2luZyBBcml0aE11bCBAJXUgdGFrZSBmYXN0ZXIgc2xvdyBjYXNl
LlxuIiwgbm9kZUluZGV4KTsKKyAgICAgICAgICAgICAgICBkYXRhTG9nRigiTWFraW5nIEFyaXRo
TXVsIEAldSB0YWtlIGZhc3RlciBzbG93IGNhc2UuXG4iLCBub2RlLT5pbmRleCgpKTsKICNlbmRp
ZgotICAgICAgICAgICAgICAgIG1fZ3JhcGhbbm9kZUluZGV4XS5tZXJnZUZsYWdzKE5vZGVNYXlO
ZWdaZXJvKTsKKyAgICAgICAgICAgICAgICBub2RlLT5tZXJnZUZsYWdzKE5vZGVNYXlOZWdaZXJv
KTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCkBAIC0x
MDA1LDEyICs5OTYsMTIgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9
CiAgICAgICAgIAotICAgICAgICByZXR1cm4gbm9kZUluZGV4OworICAgICAgICByZXR1cm4gbm9k
ZTsKICAgICB9CiAgICAgCi0gICAgTm9kZUluZGV4IG1ha2VEaXZTYWZlKE5vZGVJbmRleCBub2Rl
SW5kZXgpCisgICAgTm9kZSogbWFrZURpdlNhZmUoTm9kZSogbm9kZUluZGV4KQogICAgIHsKLSAg
ICAgICAgQVNTRVJUKG1fZ3JhcGhbbm9kZUluZGV4XS5vcCgpID09IEFyaXRoRGl2KTsKKyAgICAg
ICAgQVNTRVJUKG5vZGUtPm9wKCkgPT0gQXJpdGhEaXYpOwogICAgICAgICAKICAgICAgICAgLy8g
VGhlIG1haW4gc2xvdyBjYXNlIGNvdW50ZXIgZm9yIG9wX2RpdiBpbiB0aGUgb2xkIEpJVCBjb3Vu
dHMgb25seSB3aGVuCiAgICAgICAgIC8vIHRoZSBvcGVyYW5kcyBhcmUgbm90IG51bWJlcnMuIFdl
IGRvbid0IGNhcmUgYWJvdXQgdGhhdCBzaW5jZSB3ZSBhbHJlYWR5CkBAIC0xMDIxLDQwICsxMDEy
LDE3IEBAIHByaXZhdGU6CiAgICAgICAgIGlmICghbV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxl
ZEJsb2NrLT5jb3VsZFRha2VTcGVjaWFsRmFzdENhc2UobV9jdXJyZW50SW5kZXgpCiAgICAgICAg
ICAgICAmJiAhbV9pbmxpbmVTdGFja1RvcC0+bV9leGl0UHJvZmlsZS5oYXNFeGl0U2l0ZShtX2N1
cnJlbnRJbmRleCwgT3ZlcmZsb3cpCiAgICAgICAgICAgICAmJiAhbV9pbmxpbmVTdGFja1RvcC0+
bV9leGl0UHJvZmlsZS5oYXNFeGl0U2l0ZShtX2N1cnJlbnRJbmRleCwgTmVnYXRpdmVaZXJvKSkK
LSAgICAgICAgICAgIHJldHVybiBub2RlSW5kZXg7CisgICAgICAgICAgICByZXR1cm4gbm9kZTsK
ICAgICAgICAgCiAjaWYgREZHX0VOQUJMRShERUJVR19WRVJCT1NFKQotICAgICAgICBkYXRhTG9n
RigiTWFraW5nICVzIEAldSBzYWZlIGF0IGJjIyV1IGJlY2F1c2Ugc3BlY2lhbCBmYXN0LWNhc2Ug
Y291bnRlciBpcyBhdCAldSBhbmQgZXhpdCBwcm9maWxlcyBzYXkgJWQsICVkXG4iLCBHcmFwaDo6
b3BOYW1lKG1fZ3JhcGhbbm9kZUluZGV4XS5vcCgpKSwgbm9kZUluZGV4LCBtX2N1cnJlbnRJbmRl
eCwgbV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLT5zcGVjaWFsRmFzdENhc2VQcm9m
aWxlRm9yQnl0ZWNvZGVPZmZzZXQobV9jdXJyZW50SW5kZXgpLT5tX2NvdW50ZXIsIG1faW5saW5l
U3RhY2tUb3AtPm1fZXhpdFByb2ZpbGUuaGFzRXhpdFNpdGUobV9jdXJyZW50SW5kZXgsIE92ZXJm
bG93KSwgbV9pbmxpbmVTdGFja1RvcC0+bV9leGl0UHJvZmlsZS5oYXNFeGl0U2l0ZShtX2N1cnJl
bnRJbmRleCwgTmVnYXRpdmVaZXJvKSk7CisgICAgICAgIGRhdGFMb2dGKCJNYWtpbmcgJXMgQCV1
IHNhZmUgYXQgYmMjJXUgYmVjYXVzZSBzcGVjaWFsIGZhc3QtY2FzZSBjb3VudGVyIGlzIGF0ICV1
IGFuZCBleGl0IHByb2ZpbGVzIHNheSAlZCwgJWRcbiIsIEdyYXBoOjpvcE5hbWUobm9kZS0+b3Ao
KSksIG5vZGUtPmluZGV4KCksIG1fY3VycmVudEluZGV4LCBtX2lubGluZVN0YWNrVG9wLT5tX3By
b2ZpbGVkQmxvY2stPnNwZWNpYWxGYXN0Q2FzZVByb2ZpbGVGb3JCeXRlY29kZU9mZnNldChtX2N1
cnJlbnRJbmRleCktPm1fY291bnRlciwgbV9pbmxpbmVTdGFja1RvcC0+bV9leGl0UHJvZmlsZS5o
YXNFeGl0U2l0ZShtX2N1cnJlbnRJbmRleCwgT3ZlcmZsb3cpLCBtX2lubGluZVN0YWNrVG9wLT5t
X2V4aXRQcm9maWxlLmhhc0V4aXRTaXRlKG1fY3VycmVudEluZGV4LCBOZWdhdGl2ZVplcm8pKTsK
ICNlbmRpZgogICAgICAgICAKICAgICAgICAgLy8gRklYTUU6IEl0IG1pZ2h0IGJlIHBvc3NpYmxl
IHRvIG1ha2UgdGhpcyBtb3JlIGdyYW51bGFyLiBUaGUgREZHIGNlcnRhaW5seSBjYW4KICAgICAg
ICAgLy8gZGlzdGluZ3Vpc2ggYmV0d2VlbiBuZWdhdGl2ZSB6ZXJvIGFuZCBvdmVyZmxvdyBpbiBp
dHMgZXhpdCBwcm9maWxlcy4KLSAgICAgICAgbV9ncmFwaFtub2RlSW5kZXhdLm1lcmdlRmxhZ3Mo
Tm9kZU1heU92ZXJmbG93IHwgTm9kZU1heU5lZ1plcm8pOworICAgICAgICBub2RlLT5tZXJnZUZs
YWdzKE5vZGVNYXlPdmVyZmxvdyB8IE5vZGVNYXlOZWdaZXJvKTsKICAgICAgICAgCi0gICAgICAg
IHJldHVybiBub2RlSW5kZXg7Ci0gICAgfQotICAgIAotICAgIGJvb2wgd2lsbE5lZWRGbHVzaChT
dHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCi0gICAgewotICAgICAgICBQb2x5bW9ycGhpY0Fj
Y2Vzc1N0cnVjdHVyZUxpc3QqIGxpc3Q7Ci0gICAgICAgIGludCBsaXN0U2l6ZTsKLSAgICAgICAg
c3dpdGNoIChzdHViSW5mby5hY2Nlc3NUeXBlKSB7Ci0gICAgICAgIGNhc2UgYWNjZXNzX2dldF9i
eV9pZF9zZWxmX2xpc3Q6Ci0gICAgICAgICAgICBsaXN0ID0gc3R1YkluZm8udS5nZXRCeUlkU2Vs
Zkxpc3Quc3RydWN0dXJlTGlzdDsKLSAgICAgICAgICAgIGxpc3RTaXplID0gc3R1YkluZm8udS5n
ZXRCeUlkU2VsZkxpc3QubGlzdFNpemU7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2Fz
ZSBhY2Nlc3NfZ2V0X2J5X2lkX3Byb3RvX2xpc3Q6Ci0gICAgICAgICAgICBsaXN0ID0gc3R1Yklu
Zm8udS5nZXRCeUlkUHJvdG9MaXN0LnN0cnVjdHVyZUxpc3Q7Ci0gICAgICAgICAgICBsaXN0U2l6
ZSA9IHN0dWJJbmZvLnUuZ2V0QnlJZFByb3RvTGlzdC5saXN0U2l6ZTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
ICB9Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGlzdFNpemU7ICsraSkgewotICAgICAg
ICAgICAgaWYgKCFsaXN0LT5saXN0W2ldLmlzRGlyZWN0KQotICAgICAgICAgICAgICAgIHJldHVy
biB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJu
IG5vZGU7CiAgICAgfQogICAgIAogICAgIGJvb2wgc3RydWN0dXJlQ2hhaW5Jc1N0aWxsVmFsaWQo
Ym9vbCBkaXJlY3QsIFN0cnVjdHVyZSogcHJldmlvdXNTdHJ1Y3R1cmUsIFN0cnVjdHVyZUNoYWlu
KiBjaGFpbikKQEAgLTEwOTgsMjEgKzEwNjYsMjEgQEAgcHJpdmF0ZToKICAgICB1bnNpZ25lZCBt
X2NvbnN0YW50TmFOOwogICAgIHVuc2lnbmVkIG1fY29uc3RhbnQxOwogICAgIEhhc2hNYXA8SlND
ZWxsKiwgdW5zaWduZWQ+IG1fY2VsbENvbnN0YW50czsKLSAgICBIYXNoTWFwPEpTQ2VsbCosIE5v
ZGVJbmRleD4gbV9jZWxsQ29uc3RhbnROb2RlczsKKyAgICBIYXNoTWFwPEpTQ2VsbCosIE5vZGUq
PiBtX2NlbGxDb25zdGFudE5vZGVzOwogCiAgICAgLy8gQSBjb25zdGFudCBpbiB0aGUgY29uc3Rh
bnQgcG9vbCBtYXkgYmUgcmVwcmVzZW50ZWQgYnkgbW9yZSB0aGFuIG9uZQogICAgIC8vIG5vZGUg
aW4gdGhlIGdyYXBoLCBkZXBlbmRpbmcgb24gdGhlIGNvbnRleHQgaW4gd2hpY2ggaXQgaXMgYmVp
bmcgdXNlZC4KICAgICBzdHJ1Y3QgQ29uc3RhbnRSZWNvcmQgewogICAgICAgICBDb25zdGFudFJl
Y29yZCgpCi0gICAgICAgICAgICA6IGFzSW50MzIoTm9Ob2RlKQotICAgICAgICAgICAgLCBhc051
bWVyaWMoTm9Ob2RlKQotICAgICAgICAgICAgLCBhc0pTVmFsdWUoTm9Ob2RlKQorICAgICAgICAg
ICAgOiBhc0ludDMyKDApCisgICAgICAgICAgICAsIGFzTnVtZXJpYygwKQorICAgICAgICAgICAg
LCBhc0pTVmFsdWUoMCkKICAgICAgICAgewogICAgICAgICB9CiAKLSAgICAgICAgTm9kZUluZGV4
IGFzSW50MzI7Ci0gICAgICAgIE5vZGVJbmRleCBhc051bWVyaWM7Ci0gICAgICAgIE5vZGVJbmRl
eCBhc0pTVmFsdWU7CisgICAgICAgIE5vZGUqIGFzSW50MzI7CisgICAgICAgIE5vZGUqIGFzTnVt
ZXJpYzsKKyAgICAgICAgTm9kZSogYXNKU1ZhbHVlOwogICAgIH07CiAKICAgICAvLyBUcmFjayB0
aGUgaW5kZXggb2YgdGhlIG5vZGUgd2hvc2UgcmVzdWx0IGlzIHRoZSBjdXJyZW50IHZhbHVlIGZv
ciBldmVyeQpAQCAtMTEzOCw3ICsxMTA2LDcgQEAgcHJpdmF0ZToKICAgICB1bnNpZ25lZCBtX2ds
b2JhbFJlc29sdmVOdW1iZXI7CiAKICAgICBzdHJ1Y3QgUGhpU3RhY2tFbnRyeSB7Ci0gICAgICAg
IFBoaVN0YWNrRW50cnkoQmFzaWNCbG9jayogYmxvY2ssIE5vZGVJbmRleCBwaGksIHVuc2lnbmVk
IHZhck5vKQorICAgICAgICBQaGlTdGFja0VudHJ5KEJhc2ljQmxvY2sqIGJsb2NrLCBOb2RlKiBw
aGksIHVuc2lnbmVkIHZhck5vKQogICAgICAgICAgICAgOiBtX2Jsb2NrKGJsb2NrKQogICAgICAg
ICAgICAgLCBtX3BoaShwaGkpCiAgICAgICAgICAgICAsIG1fdmFyTm8odmFyTm8pCkBAIC0xMTQ2
LDcgKzExMTQsNyBAQCBwcml2YXRlOgogICAgICAgICB9CiAKICAgICAgICAgQmFzaWNCbG9jayog
bV9ibG9jazsKLSAgICAgICAgTm9kZUluZGV4IG1fcGhpOworICAgICAgICBOb2RlKiBtX3BoaTsK
ICAgICAgICAgdW5zaWduZWQgbV92YXJObzsKICAgICB9OwogICAgIFZlY3RvcjxQaGlTdGFja0Vu
dHJ5LCAxNj4gbV9hcmd1bWVudFBoaVN0YWNrOwpAQCAtMTI4MCw3ICsxMjQ4LDcgQEAgdm9pZCBC
eXRlQ29kZVBhcnNlcjo6aGFuZGxlQ2FsbChJbnRlcnByZQogewogICAgIEFTU0VSVChPUENPREVf
TEVOR1RIKG9wX2NhbGwpID09IE9QQ09ERV9MRU5HVEgob3BfY29uc3RydWN0KSk7CiAgICAgCi0g
ICAgTm9kZUluZGV4IGNhbGxUYXJnZXQgPSBnZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3Bl
cmFuZCk7CisgICAgTm9kZSogY2FsbFRhcmdldCA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0u
dS5vcGVyYW5kKTsKICAgICAKICAgICBDYWxsTGlua1N0YXR1cyBjYWxsTGlua1N0YXR1czsKIApA
QCAtMTI5NCw3ICsxMjYyLDcgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlQ2FsbChJbnRl
cnByZQogICAgIH0KICAgICAKICNpZiBERkdfRU5BQkxFKERFQlVHX1ZFUkJPU0UpCi0gICAgZGF0
YUxvZygiRm9yIGNhbGwgYXQgQCIsIG1fZ3JhcGguc2l6ZSgpLCAiIGJjIyIsIG1fY3VycmVudElu
ZGV4LCAiOiAiLCBjYWxsTGlua1N0YXR1cywgIlxuIik7CisgICAgZGF0YUxvZygiRm9yIGNhbGwg
YXQgYmMjIiwgbV9jdXJyZW50SW5kZXgsICI6ICIsIGNhbGxMaW5rU3RhdHVzLCAiXG4iKTsKICNl
bmRpZgogICAgIAogICAgIGlmICghY2FsbExpbmtTdGF0dXMuY2FuT3B0aW1pemUoKSkgewpAQCAt
MTM1MiwxOCArMTMyMCwxOCBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVDYWxsKEludGVy
cHJlCiAgICAgYWRkQ2FsbChpbnRlcnByZXRlciwgY3VycmVudEluc3RydWN0aW9uLCBvcCk7CiB9
CiAKLXZvaWQgQnl0ZUNvZGVQYXJzZXI6OmVtaXRGdW5jdGlvbkNoZWNrcyhjb25zdCBDYWxsTGlu
a1N0YXR1cyYgY2FsbExpbmtTdGF0dXMsIE5vZGVJbmRleCBjYWxsVGFyZ2V0LCBpbnQgcmVnaXN0
ZXJPZmZzZXQsIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkKK3ZvaWQgQnl0ZUNvZGVQYXJz
ZXI6OmVtaXRGdW5jdGlvbkNoZWNrcyhjb25zdCBDYWxsTGlua1N0YXR1cyYgY2FsbExpbmtTdGF0
dXMsIE5vZGUqIGNhbGxUYXJnZXQsIGludCByZWdpc3Rlck9mZnNldCwgQ29kZVNwZWNpYWxpemF0
aW9uS2luZCBraW5kKQogewogICAgIGlmIChjYWxsTGlua1N0YXR1cy5pc1Byb3ZlZCgpKQogICAg
ICAgICByZXR1cm47CiAgICAgCiAgICAgQVNTRVJUKGNhbGxMaW5rU3RhdHVzLmNhbk9wdGltaXpl
KCkpOwogICAgIAotICAgIE5vZGVJbmRleCB0aGlzQXJndW1lbnQ7CisgICAgTm9kZSogdGhpc0Fy
Z3VtZW50OwogICAgIGlmIChraW5kID09IENvZGVGb3JDYWxsKQogICAgICAgICB0aGlzQXJndW1l
bnQgPSBnZXQocmVnaXN0ZXJPZmZzZXQgKyBhcmd1bWVudFRvT3BlcmFuZCgwKSk7CiAgICAgZWxz
ZQotICAgICAgICB0aGlzQXJndW1lbnQgPSBOb05vZGU7CisgICAgICAgIHRoaXNBcmd1bWVudCA9
IDA7CiAKICAgICBpZiAoSlNGdW5jdGlvbiogZnVuY3Rpb24gPSBjYWxsTGlua1N0YXR1cy5mdW5j
dGlvbigpKQogICAgICAgICBhZGRUb0dyYXBoKENoZWNrRnVuY3Rpb24sIE9wSW5mbyhmdW5jdGlv
biksIGNhbGxUYXJnZXQsIHRoaXNBcmd1bWVudCk7CkBAIC0xMzc2LDcgKzEzNDQsNyBAQCB2b2lk
IEJ5dGVDb2RlUGFyc2VyOjplbWl0RnVuY3Rpb25DaGVja3MoCiAgICAgfQogfQogCi1ib29sIEJ5
dGVDb2RlUGFyc2VyOjpoYW5kbGVJbmxpbmluZyhib29sIHVzZXNSZXN1bHQsIE5vZGVJbmRleCBj
YWxsVGFyZ2V0Tm9kZUluZGV4LCBpbnQgcmVzdWx0T3BlcmFuZCwgY29uc3QgQ2FsbExpbmtTdGF0
dXMmIGNhbGxMaW5rU3RhdHVzLCBpbnQgcmVnaXN0ZXJPZmZzZXQsIGludCBhcmd1bWVudENvdW50
SW5jbHVkaW5nVGhpcywgdW5zaWduZWQgbmV4dE9mZnNldCwgQ29kZVNwZWNpYWxpemF0aW9uS2lu
ZCBraW5kKQorYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW5saW5pbmcoYm9vbCB1c2VzUmVz
dWx0LCBOb2RlKiBjYWxsVGFyZ2V0Tm9kZSwgaW50IHJlc3VsdE9wZXJhbmQsIGNvbnN0IENhbGxM
aW5rU3RhdHVzJiBjYWxsTGlua1N0YXR1cywgaW50IHJlZ2lzdGVyT2Zmc2V0LCBpbnQgYXJndW1l
bnRDb3VudEluY2x1ZGluZ1RoaXMsIHVuc2lnbmVkIG5leHRPZmZzZXQsIENvZGVTcGVjaWFsaXph
dGlvbktpbmQga2luZCkKIHsKICAgICAvLyBGaXJzdCwgdGhlIHJlYWxseSBzaW1wbGUgY2hlY2tz
OiBkbyB3ZSBoYXZlIGFuIGFjdHVhbCBKUyBmdW5jdGlvbj8KICAgICBpZiAoIWNhbGxMaW5rU3Rh
dHVzLmV4ZWN1dGFibGUoKSkKQEAgLTE0MjMsNyArMTM5MSw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJz
ZXI6OmhhbmRsZUlubGluaW5nKGJvb2wKICAgICAvLyBOb3cgd2Uga25vdyB3aXRob3V0IGEgZG91
YnQgdGhhdCB3ZSBhcmUgY29tbWl0dGVkIHRvIGlubGluaW5nLiBTbyBiZWdpbiB0aGUgcHJvY2Vz
cwogICAgIC8vIGJ5IGNoZWNraW5nIHRoZSBjYWxsZWUgKGlmIG5lY2Vzc2FyeSkgYW5kIG1ha2lu
ZyBzdXJlIHRoYXQgYXJndW1lbnRzIGFuZCB0aGUgY2FsbGVlCiAgICAgLy8gYXJlIGZsdXNoZWQu
Ci0gICAgZW1pdEZ1bmN0aW9uQ2hlY2tzKGNhbGxMaW5rU3RhdHVzLCBjYWxsVGFyZ2V0Tm9kZUlu
ZGV4LCByZWdpc3Rlck9mZnNldCwga2luZCk7CisgICAgZW1pdEZ1bmN0aW9uQ2hlY2tzKGNhbGxM
aW5rU3RhdHVzLCBjYWxsVGFyZ2V0Tm9kZSwgcmVnaXN0ZXJPZmZzZXQsIGtpbmQpOwogICAgIAog
ICAgIC8vIEZJWE1FOiBEb24ndCBmbHVzaCBjb25zdGFudHMhCiAgICAgCkBAIC0xNDU3LDggKzE0
MjUsOCBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbmxpbmluZyhib29sCiAKICAgICBh
ZGRUb0dyYXBoKElubGluZVN0YXJ0LCBPcEluZm8oYXJndW1lbnRQb3NpdGlvblN0YXJ0KSk7CiAg
ICAgaWYgKGNhbGxMaW5rU3RhdHVzLmlzQ2xvc3VyZUNhbGwoKSkgewotICAgICAgICBhZGRUb0dy
YXBoKFNldENhbGxlZSwgY2FsbFRhcmdldE5vZGVJbmRleCk7Ci0gICAgICAgIGFkZFRvR3JhcGgo
U2V0TXlTY29wZSwgYWRkVG9HcmFwaChHZXRTY29wZSwgY2FsbFRhcmdldE5vZGVJbmRleCkpOwor
ICAgICAgICBhZGRUb0dyYXBoKFNldENhbGxlZSwgY2FsbFRhcmdldE5vZGUpOworICAgICAgICBh
ZGRUb0dyYXBoKFNldE15U2NvcGUsIGFkZFRvR3JhcGgoR2V0U2NvcGUsIGNhbGxUYXJnZXROb2Rl
KSk7CiAgICAgfQogICAgIAogICAgIHBhcnNlQ29kZUJsb2NrKCk7CkBAIC0xNTMwLDEwICsxNDk4
LDEwIEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUlubGluaW5nKGJvb2wKICAgICAgICAg
ICAgIGNvbnRpbnVlOwogICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGgubV9ibG9j
a3NbaW5saW5lU3RhY2tFbnRyeS5tX3VubGlua2VkQmxvY2tzW2ldLm1fYmxvY2tJbmRleF0uZ2V0
KCk7CiAgICAgICAgIEFTU0VSVCghYmxvY2stPmlzTGlua2VkKTsKLSAgICAgICAgTm9kZSYgbm9k
ZSA9IG1fZ3JhcGhbYmxvY2stPmxhc3QoKV07Ci0gICAgICAgIEFTU0VSVChub2RlLm9wKCkgPT0g
SnVtcCk7Ci0gICAgICAgIEFTU0VSVChub2RlLnRha2VuQmxvY2tJbmRleCgpID09IE5vQmxvY2sp
OwotICAgICAgICBub2RlLnNldFRha2VuQmxvY2tJbmRleChtX2dyYXBoLm1fYmxvY2tzLnNpemUo
KSk7CisgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+bGFzdCgpOworICAgICAgICBBU1NFUlQo
bm9kZS0+b3AoKSA9PSBKdW1wKTsKKyAgICAgICAgQVNTRVJUKG5vZGUtPnRha2VuQmxvY2tJbmRl
eCgpID09IE5vQmxvY2spOworICAgICAgICBub2RlLT5zZXRUYWtlbkJsb2NrSW5kZXgobV9ncmFw
aC5tX2Jsb2Nrcy5zaXplKCkpOwogICAgICAgICBpbmxpbmVTdGFja0VudHJ5Lm1fdW5saW5rZWRC
bG9ja3NbaV0ubV9uZWVkc0Vhcmx5UmV0dXJuTGlua2luZyA9IGZhbHNlOwogI2lmICFBU1NFUlRf
RElTQUJMRUQKICAgICAgICAgYmxvY2stPmlzTGlua2VkID0gdHJ1ZTsKQEAgLTE1NjAsMTEgKzE1
MjgsMTEgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW5saW5pbmcoYm9vbAogICAgIHJl
dHVybiB0cnVlOwogfQogCi12b2lkIEJ5dGVDb2RlUGFyc2VyOjpzZXRJbnRyaW5zaWNSZXN1bHQo
Ym9vbCB1c2VzUmVzdWx0LCBpbnQgcmVzdWx0T3BlcmFuZCwgTm9kZUluZGV4IG5vZGVJbmRleCkK
K3ZvaWQgQnl0ZUNvZGVQYXJzZXI6OnNldEludHJpbnNpY1Jlc3VsdChib29sIHVzZXNSZXN1bHQs
IGludCByZXN1bHRPcGVyYW5kLCBOb2RlKiBub2RlKQogewogICAgIGlmICghdXNlc1Jlc3VsdCkK
ICAgICAgICAgcmV0dXJuOwotICAgIHNldChyZXN1bHRPcGVyYW5kLCBub2RlSW5kZXgpOworICAg
IHNldChyZXN1bHRPcGVyYW5kLCBub2RlKTsKIH0KIAogYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFu
ZGxlTWluTWF4KGJvb2wgdXNlc1Jlc3VsdCwgaW50IHJlc3VsdE9wZXJhbmQsIE5vZGVUeXBlIG9w
LCBpbnQgcmVnaXN0ZXJPZmZzZXQsIGludCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcykKQEAg
LTE1NzYsNyArMTU0NCw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZU1pbk1heChib29s
IHUKICAgICAgCiAgICAgaWYgKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzID09IDIpIHsgLy8g
TWF0aC5taW4oeCkKICAgICAgICAgLy8gRklYTUU6IHdoYXQgd2UnZCByZWFsbHkgbGlrZSBpcyBh
IFZhbHVlVG9OdW1iZXIsIGV4Y2VwdCB3ZSBkb24ndCBzdXBwb3J0IHRoYXQgcmlnaHQgbm93LiBP
aCB3ZWxsLgotICAgICAgICBOb2RlSW5kZXggcmVzdWx0ID0gZ2V0KHJlZ2lzdGVyT2Zmc2V0ICsg
YXJndW1lbnRUb09wZXJhbmQoMSkpOworICAgICAgICBOb2RlKiByZXN1bHQgPSBnZXQocmVnaXN0
ZXJPZmZzZXQgKyBhcmd1bWVudFRvT3BlcmFuZCgxKSk7CiAgICAgICAgIGFkZFRvR3JhcGgoQ2hl
Y2tOdW1iZXIsIHJlc3VsdCk7CiAgICAgICAgIHNldEludHJpbnNpY1Jlc3VsdCh1c2VzUmVzdWx0
LCByZXN1bHRPcGVyYW5kLCByZXN1bHQpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTE2MDUs
MTAgKzE1NzMsMTAgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW50cmluc2ljKGJvbwog
ICAgICAgICBpZiAoIU1hY3JvQXNzZW1ibGVyOjpzdXBwb3J0c0Zsb2F0aW5nUG9pbnRBYnMoKSkK
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4
ID0gYWRkVG9HcmFwaChBcml0aEFicywgZ2V0KHJlZ2lzdGVyT2Zmc2V0ICsgYXJndW1lbnRUb09w
ZXJhbmQoMSkpKTsKKyAgICAgICAgTm9kZSogbm9kZSA9IGFkZFRvR3JhcGgoQXJpdGhBYnMsIGdl
dChyZWdpc3Rlck9mZnNldCArIGFyZ3VtZW50VG9PcGVyYW5kKDEpKSk7CiAgICAgICAgIGlmICht
X2lubGluZVN0YWNrVG9wLT5tX2V4aXRQcm9maWxlLmhhc0V4aXRTaXRlKG1fY3VycmVudEluZGV4
LCBPdmVyZmxvdykpCiAgICAgICAgICAgICBtX2dyYXBoW25vZGVJbmRleF0ubWVyZ2VGbGFncyhO
b2RlTWF5T3ZlcmZsb3cpOwotICAgICAgICBzZXRJbnRyaW5zaWNSZXN1bHQodXNlc1Jlc3VsdCwg
cmVzdWx0T3BlcmFuZCwgbm9kZUluZGV4KTsKKyAgICAgICAgc2V0SW50cmluc2ljUmVzdWx0KHVz
ZXNSZXN1bHQsIHJlc3VsdE9wZXJhbmQsIG5vZGUpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICB9CiAKQEAgLTE2NDQsNyArMTYxMiw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUlu
dHJpbnNpYyhib28KICAgICAgICAgY2FzZSBBcnJheTo6RG91YmxlOgogICAgICAgICBjYXNlIEFy
cmF5OjpDb250aWd1b3VzOgogICAgICAgICBjYXNlIEFycmF5OjpBcnJheVN0b3JhZ2U6IHsKLSAg
ICAgICAgICAgIE5vZGVJbmRleCBhcnJheVB1c2ggPSBhZGRUb0dyYXBoKEFycmF5UHVzaCwgT3BJ
bmZvKGFycmF5TW9kZS5hc1dvcmQoKSksIE9wSW5mbyhwcmVkaWN0aW9uKSwgZ2V0KHJlZ2lzdGVy
T2Zmc2V0ICsgYXJndW1lbnRUb09wZXJhbmQoMCkpLCBnZXQocmVnaXN0ZXJPZmZzZXQgKyBhcmd1
bWVudFRvT3BlcmFuZCgxKSkpOworICAgICAgICAgICAgTm9kZSogYXJyYXlQdXNoID0gYWRkVG9H
cmFwaChBcnJheVB1c2gsIE9wSW5mbyhhcnJheU1vZGUuYXNXb3JkKCkpLCBPcEluZm8ocHJlZGlj
dGlvbiksIGdldChyZWdpc3Rlck9mZnNldCArIGFyZ3VtZW50VG9PcGVyYW5kKDApKSwgZ2V0KHJl
Z2lzdGVyT2Zmc2V0ICsgYXJndW1lbnRUb09wZXJhbmQoMSkpKTsKICAgICAgICAgICAgIGlmICh1
c2VzUmVzdWx0KQogICAgICAgICAgICAgICAgIHNldChyZXN1bHRPcGVyYW5kLCBhcnJheVB1c2gp
OwogICAgICAgICAgICAgCkBAIC0xNjY4LDcgKzE2MzYsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2Vy
OjpoYW5kbGVJbnRyaW5zaWMoYm9vCiAgICAgICAgIGNhc2UgQXJyYXk6OkRvdWJsZToKICAgICAg
ICAgY2FzZSBBcnJheTo6Q29udGlndW91czoKICAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlTdG9y
YWdlOiB7Ci0gICAgICAgICAgICBOb2RlSW5kZXggYXJyYXlQb3AgPSBhZGRUb0dyYXBoKEFycmF5
UG9wLCBPcEluZm8oYXJyYXlNb2RlLmFzV29yZCgpKSwgT3BJbmZvKHByZWRpY3Rpb24pLCBnZXQo
cmVnaXN0ZXJPZmZzZXQgKyBhcmd1bWVudFRvT3BlcmFuZCgwKSkpOworICAgICAgICAgICAgTm9k
ZSogYXJyYXlQb3AgPSBhZGRUb0dyYXBoKEFycmF5UG9wLCBPcEluZm8oYXJyYXlNb2RlLmFzV29y
ZCgpKSwgT3BJbmZvKHByZWRpY3Rpb24pLCBnZXQocmVnaXN0ZXJPZmZzZXQgKyBhcmd1bWVudFRv
T3BlcmFuZCgwKSkpOwogICAgICAgICAgICAgaWYgKHVzZXNSZXN1bHQpCiAgICAgICAgICAgICAg
ICAgc2V0KHJlc3VsdE9wZXJhbmQsIGFycmF5UG9wKTsKICAgICAgICAgICAgIHJldHVybiB0cnVl
OwpAQCAtMTY4NSw3ICsxNjUzLDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW50cmlu
c2ljKGJvbwogCiAgICAgICAgIGludCB0aGlzT3BlcmFuZCA9IHJlZ2lzdGVyT2Zmc2V0ICsgYXJn
dW1lbnRUb09wZXJhbmQoMCk7CiAgICAgICAgIGludCBpbmRleE9wZXJhbmQgPSByZWdpc3Rlck9m
ZnNldCArIGFyZ3VtZW50VG9PcGVyYW5kKDEpOwotICAgICAgICBOb2RlSW5kZXggY2hhckNvZGUg
PSBhZGRUb0dyYXBoKFN0cmluZ0NoYXJDb2RlQXQsIE9wSW5mbyhBcnJheU1vZGUoQXJyYXk6OlN0
cmluZykuYXNXb3JkKCkpLCBnZXQodGhpc09wZXJhbmQpLCBnZXRUb0ludDMyKGluZGV4T3BlcmFu
ZCkpOworICAgICAgICBOb2RlKiBjaGFyQ29kZSA9IGFkZFRvR3JhcGgoU3RyaW5nQ2hhckNvZGVB
dCwgT3BJbmZvKEFycmF5TW9kZShBcnJheTo6U3RyaW5nKS5hc1dvcmQoKSksIGdldCh0aGlzT3Bl
cmFuZCksIGdldFRvSW50MzIoaW5kZXhPcGVyYW5kKSk7CiAKICAgICAgICAgaWYgKHVzZXNSZXN1
bHQpCiAgICAgICAgICAgICBzZXQocmVzdWx0T3BlcmFuZCwgY2hhckNvZGUpOwpAQCAtMTY5OCw3
ICsxNjY2LDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW50cmluc2ljKGJvbwogCiAg
ICAgICAgIGludCB0aGlzT3BlcmFuZCA9IHJlZ2lzdGVyT2Zmc2V0ICsgYXJndW1lbnRUb09wZXJh
bmQoMCk7CiAgICAgICAgIGludCBpbmRleE9wZXJhbmQgPSByZWdpc3Rlck9mZnNldCArIGFyZ3Vt
ZW50VG9PcGVyYW5kKDEpOwotICAgICAgICBOb2RlSW5kZXggY2hhckNvZGUgPSBhZGRUb0dyYXBo
KFN0cmluZ0NoYXJBdCwgT3BJbmZvKEFycmF5TW9kZShBcnJheTo6U3RyaW5nKS5hc1dvcmQoKSks
IGdldCh0aGlzT3BlcmFuZCksIGdldFRvSW50MzIoaW5kZXhPcGVyYW5kKSk7CisgICAgICAgIE5v
ZGUqIGNoYXJDb2RlID0gYWRkVG9HcmFwaChTdHJpbmdDaGFyQXQsIE9wSW5mbyhBcnJheU1vZGUo
QXJyYXk6OlN0cmluZykuYXNXb3JkKCkpLCBnZXQodGhpc09wZXJhbmQpLCBnZXRUb0ludDMyKGlu
ZGV4T3BlcmFuZCkpOwogCiAgICAgICAgIGlmICh1c2VzUmVzdWx0KQogICAgICAgICAgICAgc2V0
KHJlc3VsdE9wZXJhbmQsIGNoYXJDb2RlKTsKQEAgLTE3MDksNyArMTY3Nyw3IEBAIGJvb2wgQnl0
ZUNvZGVQYXJzZXI6OmhhbmRsZUludHJpbnNpYyhib28KICAgICAgICAgaWYgKGFyZ3VtZW50Q291
bnRJbmNsdWRpbmdUaGlzICE9IDIpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAg
IAotICAgICAgICBOb2RlSW5kZXggcmVnRXhwRXhlYyA9IGFkZFRvR3JhcGgoUmVnRXhwRXhlYywg
T3BJbmZvKDApLCBPcEluZm8ocHJlZGljdGlvbiksIGdldChyZWdpc3Rlck9mZnNldCArIGFyZ3Vt
ZW50VG9PcGVyYW5kKDApKSwgZ2V0KHJlZ2lzdGVyT2Zmc2V0ICsgYXJndW1lbnRUb09wZXJhbmQo
MSkpKTsKKyAgICAgICAgTm9kZSogcmVnRXhwRXhlYyA9IGFkZFRvR3JhcGgoUmVnRXhwRXhlYywg
T3BJbmZvKDApLCBPcEluZm8ocHJlZGljdGlvbiksIGdldChyZWdpc3Rlck9mZnNldCArIGFyZ3Vt
ZW50VG9PcGVyYW5kKDApKSwgZ2V0KHJlZ2lzdGVyT2Zmc2V0ICsgYXJndW1lbnRUb09wZXJhbmQo
MSkpKTsKICAgICAgICAgaWYgKHVzZXNSZXN1bHQpCiAgICAgICAgICAgICBzZXQocmVzdWx0T3Bl
cmFuZCwgcmVnRXhwRXhlYyk7CiAgICAgICAgIApAQCAtMTcyMCw3ICsxNjg4LDcgQEAgYm9vbCBC
eXRlQ29kZVBhcnNlcjo6aGFuZGxlSW50cmluc2ljKGJvbwogICAgICAgICBpZiAoYXJndW1lbnRD
b3VudEluY2x1ZGluZ1RoaXMgIT0gMikKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAg
ICAgCi0gICAgICAgIE5vZGVJbmRleCByZWdFeHBFeGVjID0gYWRkVG9HcmFwaChSZWdFeHBUZXN0
LCBPcEluZm8oMCksIE9wSW5mbyhwcmVkaWN0aW9uKSwgZ2V0KHJlZ2lzdGVyT2Zmc2V0ICsgYXJn
dW1lbnRUb09wZXJhbmQoMCkpLCBnZXQocmVnaXN0ZXJPZmZzZXQgKyBhcmd1bWVudFRvT3BlcmFu
ZCgxKSkpOworICAgICAgICBOb2RlKiByZWdFeHBFeGVjID0gYWRkVG9HcmFwaChSZWdFeHBUZXN0
LCBPcEluZm8oMCksIE9wSW5mbyhwcmVkaWN0aW9uKSwgZ2V0KHJlZ2lzdGVyT2Zmc2V0ICsgYXJn
dW1lbnRUb09wZXJhbmQoMCkpLCBnZXQocmVnaXN0ZXJPZmZzZXQgKyBhcmd1bWVudFRvT3BlcmFu
ZCgxKSkpOwogICAgICAgICBpZiAodXNlc1Jlc3VsdCkKICAgICAgICAgICAgIHNldChyZXN1bHRP
cGVyYW5kLCByZWdFeHBFeGVjKTsKICAgICAgICAgCkBAIC0xNzY1LDkgKzE3MzMsOSBAQCBib29s
IEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVDb25zdGFudEludGVyCiAgICAgcmV0dXJuIGZhbHNlOwog
fQogCi1Ob2RlSW5kZXggQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUdldEJ5T2Zmc2V0KFNwZWN1bGF0
ZWRUeXBlIHByZWRpY3Rpb24sIE5vZGVJbmRleCBiYXNlLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVt
YmVyLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCitOb2RlSW5kZXggQnl0ZUNvZGVQYXJzZXI6Omhh
bmRsZUdldEJ5T2Zmc2V0KFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24sIE5vZGUqIGJhc2UsIHVu
c2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKIHsKLSAgICBO
b2RlSW5kZXggcHJvcGVydHlTdG9yYWdlOworICAgIE5vZGUqIHByb3BlcnR5U3RvcmFnZTsKICAg
ICBpZiAoaXNJbmxpbmVPZmZzZXQob2Zmc2V0KSkKICAgICAgICAgcHJvcGVydHlTdG9yYWdlID0g
YmFzZTsKICAgICBlbHNlCkBAIC0xNzc2LDcgKzE3NDQsNyBAQCBOb2RlSW5kZXggQnl0ZUNvZGVQ
YXJzZXI6OmhhbmRsZUdldEJ5T2ZmCiAgICAgLy8gYW4gT1NSIHN0YW5kcG9pbnQpIGlmIEdldEJ5
T2Zmc2V0IGFsc28gcmVmZXJlbmNlZCB0aGUgb2JqZWN0IHdlIHdlcmUgbG9hZGluZwogICAgIC8v
IGZyb20sIGFuZCBpZiB3ZSBjb3VsZCBsb2FkIGVsaW1pbmF0ZSBhIEdldEJ5T2Zmc2V0IGV2ZW4g
aWYgdGhlIGJ1dHRlcmZseQogICAgIC8vIGhhZCBjaGFuZ2VkLiBUaGF0IHdvdWxkIGJlIGEgZ3Jl
YXQgc3VjY2Vzcy4KLSAgICBOb2RlSW5kZXggZ2V0QnlPZmZzZXQgPSBhZGRUb0dyYXBoKEdldEJ5
T2Zmc2V0LCBPcEluZm8obV9ncmFwaC5tX3N0b3JhZ2VBY2Nlc3NEYXRhLnNpemUoKSksIE9wSW5m
byhwcmVkaWN0aW9uKSwgcHJvcGVydHlTdG9yYWdlKTsKKyAgICBOb2RlKiBnZXRCeU9mZnNldCA9
IGFkZFRvR3JhcGgoR2V0QnlPZmZzZXQsIE9wSW5mbyhtX2dyYXBoLm1fc3RvcmFnZUFjY2Vzc0Rh
dGEuc2l6ZSgpKSwgT3BJbmZvKHByZWRpY3Rpb24pLCBwcm9wZXJ0eVN0b3JhZ2UpOwogCiAgICAg
U3RvcmFnZUFjY2Vzc0RhdGEgc3RvcmFnZUFjY2Vzc0RhdGE7CiAgICAgc3RvcmFnZUFjY2Vzc0Rh
dGEub2Zmc2V0ID0gaW5kZXhSZWxhdGl2ZVRvQmFzZShvZmZzZXQpOwpAQCAtMTc4NywxNCArMTc1
NSwxNCBAQCBOb2RlSW5kZXggQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUdldEJ5T2ZmCiB9CiAKIHZv
aWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUdldEJ5T2Zmc2V0KAotICAgIGludCBkZXN0aW5hdGlv
bk9wZXJhbmQsIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24sIE5vZGVJbmRleCBiYXNlLCB1bnNp
Z25lZCBpZGVudGlmaWVyTnVtYmVyLAorICAgIGludCBkZXN0aW5hdGlvbk9wZXJhbmQsIFNwZWN1
bGF0ZWRUeXBlIHByZWRpY3Rpb24sIE5vZGUqIGJhc2UsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1i
ZXIsCiAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQogewogICAgIHNldChkZXN0aW5hdGlvbk9w
ZXJhbmQsIGhhbmRsZUdldEJ5T2Zmc2V0KHByZWRpY3Rpb24sIGJhc2UsIGlkZW50aWZpZXJOdW1i
ZXIsIG9mZnNldCkpOwogfQogCiB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVHZXRCeUlkKAot
ICAgIGludCBkZXN0aW5hdGlvbk9wZXJhbmQsIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24sIE5v
ZGVJbmRleCBiYXNlLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLAorICAgIGludCBkZXN0aW5h
dGlvbk9wZXJhbmQsIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24sIE5vZGUqIGJhc2UsIHVuc2ln
bmVkIGlkZW50aWZpZXJOdW1iZXIsCiAgICAgY29uc3QgR2V0QnlJZFN0YXR1cyYgZ2V0QnlJZFN0
YXR1cykKIHsKICAgICBpZiAoIWdldEJ5SWRTdGF0dXMuaXNTaW1wbGUoKQpAQCAtMTgxMyw3ICsx
NzgxLDcgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlR2V0QnlJZCgKICAgICBpZiAocHJl
ZGljdGlvbiA9PSBTcGVjTm9uZSkKICAgICAgICAgYWRkVG9HcmFwaChGb3JjZU9TUkV4aXQpOwog
ICAgIAotICAgIE5vZGVJbmRleCBvcmlnaW5hbEJhc2VGb3JCYXNlbGluZUpJVCA9IGJhc2U7Cisg
ICAgTm9kZSogb3JpZ2luYWxCYXNlRm9yQmFzZWxpbmVKSVQgPSBiYXNlOwogICAgICAgICAgICAg
ICAgIAogICAgIGFkZFRvR3JhcGgoQ2hlY2tTdHJ1Y3R1cmUsIE9wSW5mbyhtX2dyYXBoLmFkZFN0
cnVjdHVyZVNldChnZXRCeUlkU3RhdHVzLnN0cnVjdHVyZVNldCgpKSksIGJhc2UpOwogICAgIApA
QCAtMTg1Niw3ICsxODI0LDcgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cHJlcGFyZVRvUGFyc2VC
bG9jawogCiBOb2RlSW5kZXggQnl0ZUNvZGVQYXJzZXI6OmdldFNjb3BlKGJvb2wgc2tpcFRvcCwg
dW5zaWduZWQgc2tpcENvdW50KQogewotICAgIE5vZGVJbmRleCBsb2NhbEJhc2U7CisgICAgTm9k
ZSogbG9jYWxCYXNlOwogICAgIGlmIChtX2lubGluZVN0YWNrVG9wLT5tX2lubGluZUNhbGxGcmFt
ZSAmJiAhbV9pbmxpbmVTdGFja1RvcC0+bV9pbmxpbmVDYWxsRnJhbWUtPmlzQ2xvc3VyZUNhbGwo
KSkgewogICAgICAgICBBU1NFUlQobV9pbmxpbmVTdGFja1RvcC0+bV9pbmxpbmVDYWxsRnJhbWUt
PmNhbGxlZSk7CiAgICAgICAgIGxvY2FsQmFzZSA9IGNlbGxDb25zdGFudChtX2lubGluZVN0YWNr
VG9wLT5tX2lubGluZUNhbGxGcmFtZS0+Y2FsbGVlLT5zY29wZSgpKTsKQEAgLTE4NzEsNyArMTgz
OSw3IEBAIE5vZGVJbmRleCBCeXRlQ29kZVBhcnNlcjo6Z2V0U2NvcGUoYm9vbCAKICAgICByZXR1
cm4gbG9jYWxCYXNlOwogfQogCi1ib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZVJlc29sdmVPcGVy
YXRpb25zKFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24sIHVuc2lnbmVkIGlkZW50aWZpZXIsIHVu
c2lnbmVkIG9wZXJhdGlvbnMsIHVuc2lnbmVkIHB1dFRvQmFzZU9wZXJhdGlvbiwgTm9kZUluZGV4
KiBiYXNlLCBOb2RlSW5kZXgqIHZhbHVlKQorYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VSZXNv
bHZlT3BlcmF0aW9ucyhTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uLCB1bnNpZ25lZCBpZGVudGlm
aWVyLCB1bnNpZ25lZCBvcGVyYXRpb25zLCB1bnNpZ25lZCBwdXRUb0Jhc2VPcGVyYXRpb24sIE5v
ZGUqKiBiYXNlLCBOb2RlKiogdmFsdWUpCiB7CiAgICAgUmVzb2x2ZU9wZXJhdGlvbnMqIHJlc29s
dmVPcGVyYXRpb25zID0gbV9jb2RlQmxvY2stPnJlc29sdmVPcGVyYXRpb25zKG9wZXJhdGlvbnMp
OwogICAgIGlmIChyZXNvbHZlT3BlcmF0aW9ucy0+aXNFbXB0eSgpKSB7CkBAIC0xODg0LDcgKzE4
NTIsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZVJlc29sdmVPcGVyYXRpCiAgICAgYm9v
bCBza2lwcGVkU2NvcGVzID0gZmFsc2U7CiAgICAgYm9vbCBzZXRCYXNlID0gZmFsc2U7CiAgICAg
UmVzb2x2ZU9wZXJhdGlvbiogcGMgPSByZXNvbHZlT3BlcmF0aW9ucy0+ZGF0YSgpOwotICAgIE5v
ZGVJbmRleCBsb2NhbEJhc2UgPSAwOworICAgIE5vZGUqIGxvY2FsQmFzZSA9IDA7CiAgICAgYm9v
bCByZXNvbHZpbmdCYXNlID0gdHJ1ZTsKICAgICB3aGlsZSAocmVzb2x2aW5nQmFzZSkgewogICAg
ICAgICBzd2l0Y2ggKHBjLT5tX29wZXJhdGlvbikgewpAQCAtMTk2MCw3ICsxOTI4LDcgQEAgYm9v
bCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VSZXNvbHZlT3BlcmF0aQogICAgICAgICBpZiAoc3RhdHVz
LmlzU2ltcGxlKCkpIHsKICAgICAgICAgICAgIEFTU0VSVChzdGF0dXMuc3RydWN0dXJlKCkpOwog
Ci0gICAgICAgICAgICBOb2RlSW5kZXggZ2xvYmFsT2JqZWN0Tm9kZSA9IGFkZFN0cnVjdHVyZVRy
YW5zaXRpb25DaGVjayhnbG9iYWxPYmplY3QsIHN0YXR1cy5zdHJ1Y3R1cmUoKSk7CisgICAgICAg
ICAgICBOb2RlKiBnbG9iYWxPYmplY3ROb2RlID0gYWRkU3RydWN0dXJlVHJhbnNpdGlvbkNoZWNr
KGdsb2JhbE9iamVjdCwgc3RhdHVzLnN0cnVjdHVyZSgpKTsKIAogICAgICAgICAgICAgaWYgKHN0
YXR1cy5zcGVjaWZpY1ZhbHVlKCkpIHsKICAgICAgICAgICAgICAgICBBU1NFUlQoc3RhdHVzLnNw
ZWNpZmljVmFsdWUoKS5pc0NlbGwoKSk7CkBAIC0xOTcwLDcgKzE5MzgsNyBAQCBib29sIEJ5dGVD
b2RlUGFyc2VyOjpwYXJzZVJlc29sdmVPcGVyYXRpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICAgICAgfQogCi0gICAgICAgIE5vZGVJbmRleCByZXNvbHZlID0gYWRkVG9HcmFwaChSZXNv
bHZlR2xvYmFsLCBPcEluZm8obV9ncmFwaC5tX3Jlc29sdmVHbG9iYWxEYXRhLnNpemUoKSksIE9w
SW5mbyhwcmVkaWN0aW9uKSk7CisgICAgICAgIE5vZGUqIHJlc29sdmUgPSBhZGRUb0dyYXBoKFJl
c29sdmVHbG9iYWwsIE9wSW5mbyhtX2dyYXBoLm1fcmVzb2x2ZUdsb2JhbERhdGEuc2l6ZSgpKSwg
T3BJbmZvKHByZWRpY3Rpb24pKTsKICAgICAgICAgbV9ncmFwaC5tX3Jlc29sdmVHbG9iYWxEYXRh
LmFwcGVuZChSZXNvbHZlR2xvYmFsRGF0YSgpKTsKICAgICAgICAgUmVzb2x2ZUdsb2JhbERhdGEm
IGRhdGEgPSBtX2dyYXBoLm1fcmVzb2x2ZUdsb2JhbERhdGEubGFzdCgpOwogICAgICAgICBkYXRh
LmlkZW50aWZpZXJOdW1iZXIgPSBpZGVudGlmaWVyOwpAQCAtMTk4MSw5ICsxOTQ5LDEwIEBAIGJv
b2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlUmVzb2x2ZU9wZXJhdGkKICAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgfQogICAgIGNhc2UgUmVzb2x2ZU9wZXJhdGlvbjo6R2V0QW5kUmV0dXJuR2xvYmFs
VmFyOiB7Ci0gICAgICAgICp2YWx1ZSA9IGFkZFRvR3JhcGgoR2V0R2xvYmFsVmFyLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIE9wSW5mbyhnbG9iYWxPYmplY3QtPmFzc2VydFJlZ2lzdGVy
SXNJblRoaXNPYmplY3QocGMtPm1fcmVnaXN0ZXJBZGRyZXNzKSksCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgT3BJbmZvKHByZWRpY3Rpb24pKTsKKyAgICAgICAgKnZhbHVlID0gYWRkVG9H
cmFwaCgKKyAgICAgICAgICAgIEdldEdsb2JhbFZhciwKKyAgICAgICAgICAgIE9wSW5mbyhnbG9i
YWxPYmplY3QtPmFzc2VydFJlZ2lzdGVySXNJblRoaXNPYmplY3QocGMtPm1fcmVnaXN0ZXJBZGRy
ZXNzKSksCisgICAgICAgICAgICBPcEluZm8ocHJlZGljdGlvbikpOwogICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICB9CiAgICAgY2FzZSBSZXNvbHZlT3BlcmF0aW9uOjpHZXRBbmRSZXR1cm5HbG9i
YWxWYXJXYXRjaGFibGU6IHsKQEAgLTIwMjIsNyArMTk5MSw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJz
ZXI6OnBhcnNlUmVzb2x2ZU9wZXJhdGkKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAg
IGNhc2UgUmVzb2x2ZU9wZXJhdGlvbjo6R2V0QW5kUmV0dXJuU2NvcGVkVmFyOiB7Ci0gICAgICAg
IE5vZGVJbmRleCBnZXRTY29wZVJlZ2lzdGVycyA9IGFkZFRvR3JhcGgoR2V0U2NvcGVSZWdpc3Rl
cnMsIGxvY2FsQmFzZSk7CisgICAgICAgIE5vZGUqIGdldFNjb3BlUmVnaXN0ZXJzID0gYWRkVG9H
cmFwaChHZXRTY29wZVJlZ2lzdGVycywgbG9jYWxCYXNlKTsKICAgICAgICAgKnZhbHVlID0gYWRk
VG9HcmFwaChHZXRTY29wZWRWYXIsIE9wSW5mbyhyZXNvbHZlVmFsdWVPcGVyYXRpb24tPm1fb2Zm
c2V0KSwgT3BJbmZvKHByZWRpY3Rpb24pLCBnZXRTY29wZVJlZ2lzdGVycyk7CiAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgIH0KQEAgLTIwNTEsNyArMjAyMCw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJz
ZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAgICAgICBhcmd1bWVudFRvT3BlcmFu
ZChhcmd1bWVudCksIG1fY29kZUJsb2NrLT5pc0NhcHR1cmVkKGFyZ3VtZW50VG9PcGVyYW5kKGFy
Z3VtZW50KSkpOwogICAgICAgICAgICAgdmFyaWFibGUtPm1lcmdlU3RydWN0dXJlQ2hlY2tIb2lz
dGluZ0ZhaWxlZCgKICAgICAgICAgICAgICAgICBtX2lubGluZVN0YWNrVG9wLT5tX2V4aXRQcm9m
aWxlLmhhc0V4aXRTaXRlKG1fY3VycmVudEluZGV4LCBCYWRDYWNoZSkpOwotICAgICAgICAgICAg
Tm9kZUluZGV4IHNldEFyZ3VtZW50ID0gYWRkVG9HcmFwaChTZXRBcmd1bWVudCwgT3BJbmZvKHZh
cmlhYmxlKSk7CisgICAgICAgICAgICBOb2RlKiBzZXRBcmd1bWVudCA9IGFkZFRvR3JhcGgoU2V0
QXJndW1lbnQsIE9wSW5mbyh2YXJpYWJsZSkpOwogICAgICAgICAgICAgbV9ncmFwaC5tX2FyZ3Vt
ZW50c1thcmd1bWVudF0gPSBzZXRBcmd1bWVudDsKICAgICAgICAgICAgIG1fY3VycmVudEJsb2Nr
LT52YXJpYWJsZXNBdEhlYWQuc2V0QXJndW1lbnRGaXJzdFRpbWUoYXJndW1lbnQsIHNldEFyZ3Vt
ZW50KTsKICAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwuc2V0QXJn
dW1lbnRGaXJzdFRpbWUoYXJndW1lbnQsIHNldEFyZ3VtZW50KTsKQEAgLTIxMDEsNyArMjA3MCw3
IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAg
IE5FWFRfT1BDT0RFKG9wX2VudGVyKTsKIAogICAgICAgICBjYXNlIG9wX2NvbnZlcnRfdGhpczog
ewotICAgICAgICAgICAgTm9kZUluZGV4IG9wMSA9IGdldFRoaXMoKTsKKyAgICAgICAgICAgIE5v
ZGUqIG9wMSA9IGdldFRoaXMoKTsKICAgICAgICAgICAgIGlmIChtX2dyYXBoW29wMV0ub3AoKSAh
PSBDb252ZXJ0VGhpcykgewogICAgICAgICAgICAgICAgIFZhbHVlUHJvZmlsZSogcHJvZmlsZSA9
CiAgICAgICAgICAgICAgICAgICAgIG1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jay0+
dmFsdWVQcm9maWxlRm9yQnl0ZWNvZGVPZmZzZXQobV9jdXJyZW50UHJvZmlsaW5nSW5kZXgpOwpA
QCAtMjEyOCwxMCArMjA5NywxMCBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVu
c2lnbmVkCiAKICAgICAgICAgY2FzZSBvcF9jcmVhdGVfdGhpczogewogICAgICAgICAgICAgaW50
IGNhbGxlZU9wZXJhbmQgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwotICAgICAg
ICAgICAgTm9kZUluZGV4IGNhbGxlZSA9IGdldChjYWxsZWVPcGVyYW5kKTsKKyAgICAgICAgICAg
IE5vZGUqIGNhbGxlZSA9IGdldChjYWxsZWVPcGVyYW5kKTsKICAgICAgICAgICAgIGJvb2wgYWxy
ZWFkeUVtaXR0ZWQgPSBmYWxzZTsKLSAgICAgICAgICAgIGlmIChtX2dyYXBoW2NhbGxlZV0ub3Ao
KSA9PSBXZWFrSlNDb25zdGFudCkgewotICAgICAgICAgICAgICAgIEpTQ2VsbCogY2VsbCA9IG1f
Z3JhcGhbY2FsbGVlXS53ZWFrQ29uc3RhbnQoKTsKKyAgICAgICAgICAgIGlmIChjYWxsZWUtPm9w
KCkgPT0gV2Vha0pTQ29uc3RhbnQpIHsKKyAgICAgICAgICAgICAgICBKU0NlbGwqIGNlbGwgPSBj
YWxsZWUtPndlYWtDb25zdGFudCgpOwogICAgICAgICAgICAgICAgIEFTU0VSVChjZWxsLT5pbmhl
cml0cygmSlNGdW5jdGlvbjo6c19pbmZvKSk7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAg
ICAgICAgSlNGdW5jdGlvbiogZnVuY3Rpb24gPSBqc0Nhc3Q8SlNGdW5jdGlvbio+KGNlbGwpOwpA
QCAtMjIwNSw3ICsyMTc0LDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNp
Z25lZAogICAgICAgICAgICAgICAgIHNldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5k
LCBnZXQoSlNTdGFjazo6Q2FsbGVlKSk7CiAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAg
ICAgICBBU1NFUlQocHJvZmlsZS0+bV9zaW5nbGV0b25WYWx1ZS5hc0NlbGwoKS0+aW5oZXJpdHMo
JkpTRnVuY3Rpb246OnNfaW5mbykpOwotICAgICAgICAgICAgICAgIE5vZGVJbmRleCBhY3R1YWxD
YWxsZWUgPSBnZXQoSlNTdGFjazo6Q2FsbGVlKTsKKyAgICAgICAgICAgICAgICBOb2RlKiBhY3R1
YWxDYWxsZWUgPSBnZXQoSlNTdGFjazo6Q2FsbGVlKTsKICAgICAgICAgICAgICAgICBhZGRUb0dy
YXBoKENoZWNrRnVuY3Rpb24sIE9wSW5mbyhwcm9maWxlLT5tX3NpbmdsZXRvblZhbHVlLmFzQ2Vs
bCgpKSwgYWN0dWFsQ2FsbGVlKTsKICAgICAgICAgICAgICAgICBzZXQoY3VycmVudEluc3RydWN0
aW9uWzFdLnUub3BlcmFuZCwgYWRkVG9HcmFwaChXZWFrSlNDb25zdGFudCwgT3BJbmZvKHByb2Zp
bGUtPm1fc2luZ2xldG9uVmFsdWUuYXNDZWxsKCkpKSk7CiAgICAgICAgICAgICB9CkBAIC0yMjE1
LDMwICsyMTg0LDMwIEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQK
ICAgICAgICAgLy8gPT09IEJpdHdpc2Ugb3BlcmF0aW9ucyA9PT0KIAogICAgICAgICBjYXNlIG9w
X2JpdGFuZDogewotICAgICAgICAgICAgTm9kZUluZGV4IG9wMSA9IGdldFRvSW50MzIoY3VycmVu
dEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7Ci0gICAgICAgICAgICBOb2RlSW5kZXggb3AyID0g
Z2V0VG9JbnQzMihjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKTsKKyAgICAgICAgICAg
IE5vZGUqIG9wMSA9IGdldFRvSW50MzIoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7
CisgICAgICAgICAgICBOb2RlKiBvcDIgPSBnZXRUb0ludDMyKGN1cnJlbnRJbnN0cnVjdGlvblsz
XS51Lm9wZXJhbmQpOwogICAgICAgICAgICAgc2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9w
ZXJhbmQsIGFkZFRvR3JhcGgoQml0QW5kLCBvcDEsIG9wMikpOwogICAgICAgICAgICAgTkVYVF9P
UENPREUob3BfYml0YW5kKTsKICAgICAgICAgfQogCiAgICAgICAgIGNhc2Ugb3BfYml0b3I6IHsK
LSAgICAgICAgICAgIE5vZGVJbmRleCBvcDEgPSBnZXRUb0ludDMyKGN1cnJlbnRJbnN0cnVjdGlv
blsyXS51Lm9wZXJhbmQpOwotICAgICAgICAgICAgTm9kZUluZGV4IG9wMiA9IGdldFRvSW50MzIo
Y3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZCk7CisgICAgICAgICAgICBOb2RlKiBvcDEg
PSBnZXRUb0ludDMyKGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOworICAgICAgICAg
ICAgTm9kZSogb3AyID0gZ2V0VG9JbnQzMihjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5k
KTsKICAgICAgICAgICAgIHNldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCBhZGRU
b0dyYXBoKEJpdE9yLCBvcDEsIG9wMikpOwogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfYml0
b3IpOwogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBvcF9iaXR4b3I6IHsKLSAgICAgICAgICAg
IE5vZGVJbmRleCBvcDEgPSBnZXRUb0ludDMyKGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJh
bmQpOwotICAgICAgICAgICAgTm9kZUluZGV4IG9wMiA9IGdldFRvSW50MzIoY3VycmVudEluc3Ry
dWN0aW9uWzNdLnUub3BlcmFuZCk7CisgICAgICAgICAgICBOb2RlKiBvcDEgPSBnZXRUb0ludDMy
KGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOworICAgICAgICAgICAgTm9kZSogb3Ay
ID0gZ2V0VG9JbnQzMihjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKTsKICAgICAgICAg
ICAgIHNldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCBhZGRUb0dyYXBoKEJpdFhv
ciwgb3AxLCBvcDIpKTsKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2JpdHhvcik7CiAgICAg
ICAgIH0KIAogICAgICAgICBjYXNlIG9wX3JzaGlmdDogewotICAgICAgICAgICAgTm9kZUluZGV4
IG9wMSA9IGdldFRvSW50MzIoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7Ci0gICAg
ICAgICAgICBOb2RlSW5kZXggb3AyID0gZ2V0VG9JbnQzMihjdXJyZW50SW5zdHJ1Y3Rpb25bM10u
dS5vcGVyYW5kKTsKLSAgICAgICAgICAgIE5vZGVJbmRleCByZXN1bHQ7CisgICAgICAgICAgICBO
b2RlKiBvcDEgPSBnZXRUb0ludDMyKGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOwor
ICAgICAgICAgICAgTm9kZSogb3AyID0gZ2V0VG9JbnQzMihjdXJyZW50SW5zdHJ1Y3Rpb25bM10u
dS5vcGVyYW5kKTsKKyAgICAgICAgICAgIE5vZGUqIHJlc3VsdDsKICAgICAgICAgICAgIC8vIE9w
dGltaXplIG91dCBzaGlmdHMgYnkgemVyby4KICAgICAgICAgICAgIGlmIChpc0ludDMyQ29uc3Rh
bnQob3AyKSAmJiAhKHZhbHVlT2ZJbnQzMkNvbnN0YW50KG9wMikgJiAweDFmKSkKICAgICAgICAg
ICAgICAgICByZXN1bHQgPSBvcDE7CkBAIC0yMjQ5LDkgKzIyMTgsOSBAQCBib29sIEJ5dGVDb2Rl
UGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIG9w
X2xzaGlmdDogewotICAgICAgICAgICAgTm9kZUluZGV4IG9wMSA9IGdldFRvSW50MzIoY3VycmVu
dEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7Ci0gICAgICAgICAgICBOb2RlSW5kZXggb3AyID0g
Z2V0VG9JbnQzMihjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKTsKLSAgICAgICAgICAg
IE5vZGVJbmRleCByZXN1bHQ7CisgICAgICAgICAgICBOb2RlKiBvcDEgPSBnZXRUb0ludDMyKGN1
cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOworICAgICAgICAgICAgTm9kZSogb3AyID0g
Z2V0VG9JbnQzMihjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKTsKKyAgICAgICAgICAg
IE5vZGUqIHJlc3VsdDsKICAgICAgICAgICAgIC8vIE9wdGltaXplIG91dCBzaGlmdHMgYnkgemVy
by4KICAgICAgICAgICAgIGlmIChpc0ludDMyQ29uc3RhbnQob3AyKSAmJiAhKHZhbHVlT2ZJbnQz
MkNvbnN0YW50KG9wMikgJiAweDFmKSkKICAgICAgICAgICAgICAgICByZXN1bHQgPSBvcDE7CkBA
IC0yMjYyLDkgKzIyMzEsOSBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2ln
bmVkCiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIG9wX3Vyc2hpZnQ6IHsKLSAgICAgICAgICAg
IE5vZGVJbmRleCBvcDEgPSBnZXRUb0ludDMyKGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJh
bmQpOwotICAgICAgICAgICAgTm9kZUluZGV4IG9wMiA9IGdldFRvSW50MzIoY3VycmVudEluc3Ry
dWN0aW9uWzNdLnUub3BlcmFuZCk7Ci0gICAgICAgICAgICBOb2RlSW5kZXggcmVzdWx0OworICAg
ICAgICAgICAgTm9kZSogb3AxID0gZ2V0VG9JbnQzMihjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5v
cGVyYW5kKTsKKyAgICAgICAgICAgIE5vZGUqIG9wMiA9IGdldFRvSW50MzIoY3VycmVudEluc3Ry
dWN0aW9uWzNdLnUub3BlcmFuZCk7CisgICAgICAgICAgICBOb2RlKiByZXN1bHQ7CiAgICAgICAg
ICAgICAvLyBUaGUgcmVzdWx0IG9mIGEgemVyby1leHRlbmRpbmcgcmlnaHQgc2hpZnQgaXMgdHJl
YXRlZCBhcyBhbiB1bnNpZ25lZCB2YWx1ZS4KICAgICAgICAgICAgIC8vIFRoaXMgbWVhbnMgdGhh
dCBpZiB0aGUgdG9wIGJpdCBpcyBzZXQsIHRoZSByZXN1bHQgaXMgbm90IGluIHRoZSBpbnQzMiBy
YW5nZSwKICAgICAgICAgICAgIC8vIGFuZCBhcyBzdWNoIG11c3QgYmUgc3RvcmVkIGFzIGEgZG91
YmxlLiBJZiB0aGUgc2hpZnQgYW1vdW50IGlzIGEgY29uc3RhbnQsCkBAIC0yMjkyLDcgKzIyNjEs
NyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAKICAgICAgICAg
Y2FzZSBvcF9wcmVfaW5jOiB7CiAgICAgICAgICAgICB1bnNpZ25lZCBzcmNEc3QgPSBjdXJyZW50
SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwotICAgICAgICAgICAgTm9kZUluZGV4IG9wID0gZ2V0
KHNyY0RzdCk7CisgICAgICAgICAgICBOb2RlKiBvcCA9IGdldChzcmNEc3QpOwogICAgICAgICAg
ICAgc2V0KHNyY0RzdCwgbWFrZVNhZmUoYWRkVG9HcmFwaChBcml0aEFkZCwgb3AsIG9uZSgpKSkp
OwogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfcHJlX2luYyk7CiAgICAgICAgIH0KQEAgLTIz
MDEsMTQgKzIyNzAsMTQgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25l
ZAogICAgICAgICAgICAgdW5zaWduZWQgcmVzdWx0ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUu
b3BlcmFuZDsKICAgICAgICAgICAgIHVuc2lnbmVkIHNyY0RzdCA9IGN1cnJlbnRJbnN0cnVjdGlv
blsyXS51Lm9wZXJhbmQ7CiAgICAgICAgICAgICBBU1NFUlQocmVzdWx0ICE9IHNyY0RzdCk7IC8v
IFJlcXVpcmVkIGZvciBhc3N1bXB0aW9ucyB3ZSBtYWtlIGR1cmluZyBPU1IuCi0gICAgICAgICAg
ICBOb2RlSW5kZXggb3AgPSBnZXQoc3JjRHN0KTsKKyAgICAgICAgICAgIE5vZGUqIG9wID0gZ2V0
KHNyY0RzdCk7CiAgICAgICAgICAgICBzZXRQYWlyKHJlc3VsdCwgb3AsIHNyY0RzdCwgbWFrZVNh
ZmUoYWRkVG9HcmFwaChBcml0aEFkZCwgb3AsIG9uZSgpKSkpOwogICAgICAgICAgICAgTkVYVF9P
UENPREUob3BfcG9zdF9pbmMpOwogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBvcF9wcmVfZGVj
OiB7CiAgICAgICAgICAgICB1bnNpZ25lZCBzcmNEc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0u
dS5vcGVyYW5kOwotICAgICAgICAgICAgTm9kZUluZGV4IG9wID0gZ2V0KHNyY0RzdCk7CisgICAg
ICAgICAgICBOb2RlKiBvcCA9IGdldChzcmNEc3QpOwogICAgICAgICAgICAgc2V0KHNyY0RzdCwg
bWFrZVNhZmUoYWRkVG9HcmFwaChBcml0aFN1Yiwgb3AsIG9uZSgpKSkpOwogICAgICAgICAgICAg
TkVYVF9PUENPREUob3BfcHJlX2RlYyk7CiAgICAgICAgIH0KQEAgLTIzMTYsNyArMjI4NSw3IEBA
IGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgY2FzZSBv
cF9wb3N0X2RlYzogewogICAgICAgICAgICAgdW5zaWduZWQgcmVzdWx0ID0gY3VycmVudEluc3Ry
dWN0aW9uWzFdLnUub3BlcmFuZDsKICAgICAgICAgICAgIHVuc2lnbmVkIHNyY0RzdCA9IGN1cnJl
bnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBOb2RlSW5kZXggb3AgPSBn
ZXQoc3JjRHN0KTsKKyAgICAgICAgICAgIE5vZGUqIG9wID0gZ2V0KHNyY0RzdCk7CiAgICAgICAg
ICAgICBzZXRQYWlyKHJlc3VsdCwgb3AsIHNyY0RzdCwgbWFrZVNhZmUoYWRkVG9HcmFwaChBcml0
aFN1Yiwgb3AsIG9uZSgpKSkpOwogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfcG9zdF9kZWMp
OwogICAgICAgICB9CkBAIC0yMzI0LDggKzIyOTMsOCBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpw
YXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgIC8vID09PSBBcml0aG1ldGljIG9wZXJhdGlvbnMg
PT09CiAKICAgICAgICAgY2FzZSBvcF9hZGQ6IHsKLSAgICAgICAgICAgIE5vZGVJbmRleCBvcDEg
PSBnZXQoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7Ci0gICAgICAgICAgICBOb2Rl
SW5kZXggb3AyID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpOworICAgICAg
ICAgICAgTm9kZSogb3AxID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOwor
ICAgICAgICAgICAgTm9kZSogb3AyID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJh
bmQpOwogICAgICAgICAgICAgaWYgKG1fZ3JhcGhbb3AxXS5oYXNOdW1iZXJSZXN1bHQoKSAmJiBt
X2dyYXBoW29wMl0uaGFzTnVtYmVyUmVzdWx0KCkpCiAgICAgICAgICAgICAgICAgc2V0KGN1cnJl
bnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsIG1ha2VTYWZlKGFkZFRvR3JhcGgoQXJpdGhBZGQs
IG9wMSwgb3AyKSkpOwogICAgICAgICAgICAgZWxzZQpAQCAtMjMzNCwzNiArMjMwMywzNiBAQCBi
b29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgIH0KIAogICAg
ICAgICBjYXNlIG9wX3N1YjogewotICAgICAgICAgICAgTm9kZUluZGV4IG9wMSA9IGdldChjdXJy
ZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKLSAgICAgICAgICAgIE5vZGVJbmRleCBvcDIg
PSBnZXQoY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZCk7CisgICAgICAgICAgICBOb2Rl
KiBvcDEgPSBnZXQoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7CisgICAgICAgICAg
ICBOb2RlKiBvcDIgPSBnZXQoY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZCk7CiAgICAg
ICAgICAgICBzZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwgbWFrZVNhZmUoYWRk
VG9HcmFwaChBcml0aFN1Yiwgb3AxLCBvcDIpKSk7CiAgICAgICAgICAgICBORVhUX09QQ09ERShv
cF9zdWIpOwogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBvcF9uZWdhdGU6IHsKLSAgICAgICAg
ICAgIE5vZGVJbmRleCBvcDEgPSBnZXQoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7
CisgICAgICAgICAgICBOb2RlKiBvcDEgPSBnZXQoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3Bl
cmFuZCk7CiAgICAgICAgICAgICBzZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwg
bWFrZVNhZmUoYWRkVG9HcmFwaChBcml0aE5lZ2F0ZSwgb3AxKSkpOwogICAgICAgICAgICAgTkVY
VF9PUENPREUob3BfbmVnYXRlKTsKICAgICAgICAgfQogCiAgICAgICAgIGNhc2Ugb3BfbXVsOiB7
CiAgICAgICAgICAgICAvLyBNdWx0aXBseSByZXF1aXJlcyB0aGF0IHRoZSBpbnB1dHMgYXJlIG5v
dCB0cnVuY2F0ZWQsIHVuZm9ydHVuYXRlbHkuCi0gICAgICAgICAgICBOb2RlSW5kZXggb3AxID0g
Z2V0KGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOwotICAgICAgICAgICAgTm9kZUlu
ZGV4IG9wMiA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKTsKKyAgICAgICAg
ICAgIE5vZGUqIG9wMSA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKKyAg
ICAgICAgICAgIE5vZGUqIG9wMiA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5k
KTsKICAgICAgICAgICAgIHNldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCBtYWtl
U2FmZShhZGRUb0dyYXBoKEFyaXRoTXVsLCBvcDEsIG9wMikpKTsKICAgICAgICAgICAgIE5FWFRf
T1BDT0RFKG9wX211bCk7CiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIG9wX21vZDogewotICAg
ICAgICAgICAgTm9kZUluZGV4IG9wMSA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVy
YW5kKTsKLSAgICAgICAgICAgIE5vZGVJbmRleCBvcDIgPSBnZXQoY3VycmVudEluc3RydWN0aW9u
WzNdLnUub3BlcmFuZCk7CisgICAgICAgICAgICBOb2RlKiBvcDEgPSBnZXQoY3VycmVudEluc3Ry
dWN0aW9uWzJdLnUub3BlcmFuZCk7CisgICAgICAgICAgICBOb2RlKiBvcDIgPSBnZXQoY3VycmVu
dEluc3RydWN0aW9uWzNdLnUub3BlcmFuZCk7CiAgICAgICAgICAgICBzZXQoY3VycmVudEluc3Ry
dWN0aW9uWzFdLnUub3BlcmFuZCwgbWFrZVNhZmUoYWRkVG9HcmFwaChBcml0aE1vZCwgb3AxLCBv
cDIpKSk7CiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9tb2QpOwogICAgICAgICB9CiAKICAg
ICAgICAgY2FzZSBvcF9kaXY6IHsKLSAgICAgICAgICAgIE5vZGVJbmRleCBvcDEgPSBnZXQoY3Vy
cmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7Ci0gICAgICAgICAgICBOb2RlSW5kZXggb3Ay
ID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpOworICAgICAgICAgICAgTm9k
ZSogb3AxID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOworICAgICAgICAg
ICAgTm9kZSogb3AyID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpOwogICAg
ICAgICAgICAgc2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsIG1ha2VEaXZTYWZl
KGFkZFRvR3JhcGgoQXJpdGhEaXYsIG9wMSwgb3AyKSkpOwogICAgICAgICAgICAgTkVYVF9PUENP
REUob3BfZGl2KTsKICAgICAgICAgfQpAQCAtMjM3Niw3ICsyMzQ1LDcgQEAgYm9vbCBCeXRlQ29k
ZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgTkVYVF9PUENPREUob3Bf
ZGVidWcpOwogI2VuZGlmCiAgICAgICAgIGNhc2Ugb3BfbW92OiB7Ci0gICAgICAgICAgICBOb2Rl
SW5kZXggb3AgPSBnZXQoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7CisgICAgICAg
ICAgICBOb2RlKiBvcCA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKICAg
ICAgICAgICAgIHNldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCBvcCk7CiAgICAg
ICAgICAgICBORVhUX09QQ09ERShvcF9tb3YpOwogICAgICAgICB9CkBAIC0yMzg2LDU2ICsyMzU1
LDU2IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAg
ICAgIE5FWFRfT1BDT0RFKG9wX2NoZWNrX2hhc19pbnN0YW5jZSk7CiAKICAgICAgICAgY2FzZSBv
cF9pbnN0YW5jZW9mOiB7Ci0gICAgICAgICAgICBOb2RlSW5kZXggdmFsdWUgPSBnZXQoY3VycmVu
dEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7Ci0gICAgICAgICAgICBOb2RlSW5kZXggcHJvdG90
eXBlID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpOworICAgICAgICAgICAg
Tm9kZSogdmFsdWUgPSBnZXQoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7CisgICAg
ICAgICAgICBOb2RlKiBwcm90b3R5cGUgPSBnZXQoY3VycmVudEluc3RydWN0aW9uWzNdLnUub3Bl
cmFuZCk7CiAgICAgICAgICAgICBzZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwg
YWRkVG9HcmFwaChJbnN0YW5jZU9mLCB2YWx1ZSwgcHJvdG90eXBlKSk7CiAgICAgICAgICAgICBO
RVhUX09QQ09ERShvcF9pbnN0YW5jZW9mKTsKICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAg
ICAgIGNhc2Ugb3BfaXNfdW5kZWZpbmVkOiB7Ci0gICAgICAgICAgICBOb2RlSW5kZXggdmFsdWUg
PSBnZXQoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7CisgICAgICAgICAgICBOb2Rl
KiB2YWx1ZSA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKICAgICAgICAg
ICAgIHNldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCBhZGRUb0dyYXBoKElzVW5k
ZWZpbmVkLCB2YWx1ZSkpOwogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfaXNfdW5kZWZpbmVk
KTsKICAgICAgICAgfQogCiAgICAgICAgIGNhc2Ugb3BfaXNfYm9vbGVhbjogewotICAgICAgICAg
ICAgTm9kZUluZGV4IHZhbHVlID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQp
OworICAgICAgICAgICAgTm9kZSogdmFsdWUgPSBnZXQoY3VycmVudEluc3RydWN0aW9uWzJdLnUu
b3BlcmFuZCk7CiAgICAgICAgICAgICBzZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFu
ZCwgYWRkVG9HcmFwaChJc0Jvb2xlYW4sIHZhbHVlKSk7CiAgICAgICAgICAgICBORVhUX09QQ09E
RShvcF9pc19ib29sZWFuKTsKICAgICAgICAgfQogCiAgICAgICAgIGNhc2Ugb3BfaXNfbnVtYmVy
OiB7Ci0gICAgICAgICAgICBOb2RlSW5kZXggdmFsdWUgPSBnZXQoY3VycmVudEluc3RydWN0aW9u
WzJdLnUub3BlcmFuZCk7CisgICAgICAgICAgICBOb2RlKiB2YWx1ZSA9IGdldChjdXJyZW50SW5z
dHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKICAgICAgICAgICAgIHNldChjdXJyZW50SW5zdHJ1Y3Rp
b25bMV0udS5vcGVyYW5kLCBhZGRUb0dyYXBoKElzTnVtYmVyLCB2YWx1ZSkpOwogICAgICAgICAg
ICAgTkVYVF9PUENPREUob3BfaXNfbnVtYmVyKTsKICAgICAgICAgfQogCiAgICAgICAgIGNhc2Ug
b3BfaXNfc3RyaW5nOiB7Ci0gICAgICAgICAgICBOb2RlSW5kZXggdmFsdWUgPSBnZXQoY3VycmVu
dEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7CisgICAgICAgICAgICBOb2RlKiB2YWx1ZSA9IGdl
dChjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKICAgICAgICAgICAgIHNldChjdXJy
ZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCBhZGRUb0dyYXBoKElzU3RyaW5nLCB2YWx1ZSkp
OwogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfaXNfc3RyaW5nKTsKICAgICAgICAgfQogCiAg
ICAgICAgIGNhc2Ugb3BfaXNfb2JqZWN0OiB7Ci0gICAgICAgICAgICBOb2RlSW5kZXggdmFsdWUg
PSBnZXQoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7CisgICAgICAgICAgICBOb2Rl
KiB2YWx1ZSA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKICAgICAgICAg
ICAgIHNldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCBhZGRUb0dyYXBoKElzT2Jq
ZWN0LCB2YWx1ZSkpOwogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfaXNfb2JqZWN0KTsKICAg
ICAgICAgfQogCiAgICAgICAgIGNhc2Ugb3BfaXNfZnVuY3Rpb246IHsKLSAgICAgICAgICAgIE5v
ZGVJbmRleCB2YWx1ZSA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKKyAg
ICAgICAgICAgIE5vZGUqIHZhbHVlID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJh
bmQpOwogICAgICAgICAgICAgc2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsIGFk
ZFRvR3JhcGgoSXNGdW5jdGlvbiwgdmFsdWUpKTsKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9w
X2lzX2Z1bmN0aW9uKTsKICAgICAgICAgfQogCiAgICAgICAgIGNhc2Ugb3Bfbm90OiB7Ci0gICAg
ICAgICAgICBOb2RlSW5kZXggdmFsdWUgPSBnZXQoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3Bl
cmFuZCk7CisgICAgICAgICAgICBOb2RlKiB2YWx1ZSA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25b
Ml0udS5vcGVyYW5kKTsKICAgICAgICAgICAgIHNldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5v
cGVyYW5kLCBhZGRUb0dyYXBoKExvZ2ljYWxOb3QsIHZhbHVlKSk7CiAgICAgICAgICAgICBORVhU
X09QQ09ERShvcF9ub3QpOwogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBv
cF90b19wcmltaXRpdmU6IHsKLSAgICAgICAgICAgIE5vZGVJbmRleCB2YWx1ZSA9IGdldChjdXJy
ZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKKyAgICAgICAgICAgIE5vZGUqIHZhbHVlID0g
Z2V0KGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOwogICAgICAgICAgICAgc2V0KGN1
cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsIGFkZFRvR3JhcGgoVG9QcmltaXRpdmUsIHZh
bHVlKSk7CiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF90b19wcmltaXRpdmUpOwogICAgICAg
ICB9CkBAIC0yNDUwLDY5ICsyNDE5LDY5IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxv
Y2sodW5zaWduZWQKICAgICAgICAgfQogCiAgICAgICAgIGNhc2Ugb3BfbGVzczogewotICAgICAg
ICAgICAgTm9kZUluZGV4IG9wMSA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5k
KTsKLSAgICAgICAgICAgIE5vZGVJbmRleCBvcDIgPSBnZXQoY3VycmVudEluc3RydWN0aW9uWzNd
LnUub3BlcmFuZCk7CisgICAgICAgICAgICBOb2RlKiBvcDEgPSBnZXQoY3VycmVudEluc3RydWN0
aW9uWzJdLnUub3BlcmFuZCk7CisgICAgICAgICAgICBOb2RlKiBvcDIgPSBnZXQoY3VycmVudElu
c3RydWN0aW9uWzNdLnUub3BlcmFuZCk7CiAgICAgICAgICAgICBzZXQoY3VycmVudEluc3RydWN0
aW9uWzFdLnUub3BlcmFuZCwgYWRkVG9HcmFwaChDb21wYXJlTGVzcywgb3AxLCBvcDIpKTsKICAg
ICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2xlc3MpOwogICAgICAgICB9CiAKICAgICAgICAgY2Fz
ZSBvcF9sZXNzZXE6IHsKLSAgICAgICAgICAgIE5vZGVJbmRleCBvcDEgPSBnZXQoY3VycmVudElu
c3RydWN0aW9uWzJdLnUub3BlcmFuZCk7Ci0gICAgICAgICAgICBOb2RlSW5kZXggb3AyID0gZ2V0
KGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpOworICAgICAgICAgICAgTm9kZSogb3Ax
ID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOworICAgICAgICAgICAgTm9k
ZSogb3AyID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpOwogICAgICAgICAg
ICAgc2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsIGFkZFRvR3JhcGgoQ29tcGFy
ZUxlc3NFcSwgb3AxLCBvcDIpKTsKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2xlc3NlcSk7
CiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIG9wX2dyZWF0ZXI6IHsKLSAgICAgICAgICAgIE5v
ZGVJbmRleCBvcDEgPSBnZXQoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7Ci0gICAg
ICAgICAgICBOb2RlSW5kZXggb3AyID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJh
bmQpOworICAgICAgICAgICAgTm9kZSogb3AxID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsyXS51
Lm9wZXJhbmQpOworICAgICAgICAgICAgTm9kZSogb3AyID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlv
blszXS51Lm9wZXJhbmQpOwogICAgICAgICAgICAgc2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51
Lm9wZXJhbmQsIGFkZFRvR3JhcGgoQ29tcGFyZUdyZWF0ZXIsIG9wMSwgb3AyKSk7CiAgICAgICAg
ICAgICBORVhUX09QQ09ERShvcF9ncmVhdGVyKTsKICAgICAgICAgfQogCiAgICAgICAgIGNhc2Ug
b3BfZ3JlYXRlcmVxOiB7Ci0gICAgICAgICAgICBOb2RlSW5kZXggb3AxID0gZ2V0KGN1cnJlbnRJ
bnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOwotICAgICAgICAgICAgTm9kZUluZGV4IG9wMiA9IGdl
dChjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKTsKKyAgICAgICAgICAgIE5vZGUqIG9w
MSA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKKyAgICAgICAgICAgIE5v
ZGUqIG9wMiA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKTsKICAgICAgICAg
ICAgIHNldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCBhZGRUb0dyYXBoKENvbXBh
cmVHcmVhdGVyRXEsIG9wMSwgb3AyKSk7CiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9ncmVh
dGVyZXEpOwogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBvcF9lcTogewotICAgICAgICAgICAg
Tm9kZUluZGV4IG9wMSA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKLSAg
ICAgICAgICAgIE5vZGVJbmRleCBvcDIgPSBnZXQoY3VycmVudEluc3RydWN0aW9uWzNdLnUub3Bl
cmFuZCk7CisgICAgICAgICAgICBOb2RlKiBvcDEgPSBnZXQoY3VycmVudEluc3RydWN0aW9uWzJd
LnUub3BlcmFuZCk7CisgICAgICAgICAgICBOb2RlKiBvcDIgPSBnZXQoY3VycmVudEluc3RydWN0
aW9uWzNdLnUub3BlcmFuZCk7CiAgICAgICAgICAgICBzZXQoY3VycmVudEluc3RydWN0aW9uWzFd
LnUub3BlcmFuZCwgYWRkVG9HcmFwaChDb21wYXJlRXEsIG9wMSwgb3AyKSk7CiAgICAgICAgICAg
ICBORVhUX09QQ09ERShvcF9lcSk7CiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIG9wX2VxX251
bGw6IHsKLSAgICAgICAgICAgIE5vZGVJbmRleCB2YWx1ZSA9IGdldChjdXJyZW50SW5zdHJ1Y3Rp
b25bMl0udS5vcGVyYW5kKTsKKyAgICAgICAgICAgIE5vZGUqIHZhbHVlID0gZ2V0KGN1cnJlbnRJ
bnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOwogICAgICAgICAgICAgc2V0KGN1cnJlbnRJbnN0cnVj
dGlvblsxXS51Lm9wZXJhbmQsIGFkZFRvR3JhcGgoQ29tcGFyZUVxLCB2YWx1ZSwgY29uc3RhbnRO
dWxsKCkpKTsKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2VxX251bGwpOwogICAgICAgICB9
CiAKICAgICAgICAgY2FzZSBvcF9zdHJpY3RlcTogewotICAgICAgICAgICAgTm9kZUluZGV4IG9w
MSA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKLSAgICAgICAgICAgIE5v
ZGVJbmRleCBvcDIgPSBnZXQoY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZCk7CisgICAg
ICAgICAgICBOb2RlKiBvcDEgPSBnZXQoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7
CisgICAgICAgICAgICBOb2RlKiBvcDIgPSBnZXQoY3VycmVudEluc3RydWN0aW9uWzNdLnUub3Bl
cmFuZCk7CiAgICAgICAgICAgICBzZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwg
YWRkVG9HcmFwaChDb21wYXJlU3RyaWN0RXEsIG9wMSwgb3AyKSk7CiAgICAgICAgICAgICBORVhU
X09QQ09ERShvcF9zdHJpY3RlcSk7CiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIG9wX25lcTog
ewotICAgICAgICAgICAgTm9kZUluZGV4IG9wMSA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMl0u
dS5vcGVyYW5kKTsKLSAgICAgICAgICAgIE5vZGVJbmRleCBvcDIgPSBnZXQoY3VycmVudEluc3Ry
dWN0aW9uWzNdLnUub3BlcmFuZCk7CisgICAgICAgICAgICBOb2RlKiBvcDEgPSBnZXQoY3VycmVu
dEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7CisgICAgICAgICAgICBOb2RlKiBvcDIgPSBnZXQo
Y3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZCk7CiAgICAgICAgICAgICBzZXQoY3VycmVu
dEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwgYWRkVG9HcmFwaChMb2dpY2FsTm90LCBhZGRUb0dy
YXBoKENvbXBhcmVFcSwgb3AxLCBvcDIpKSk7CiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9u
ZXEpOwogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBvcF9uZXFfbnVsbDogewotICAgICAgICAg
ICAgTm9kZUluZGV4IHZhbHVlID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQp
OworICAgICAgICAgICAgTm9kZSogdmFsdWUgPSBnZXQoY3VycmVudEluc3RydWN0aW9uWzJdLnUu
b3BlcmFuZCk7CiAgICAgICAgICAgICBzZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFu
ZCwgYWRkVG9HcmFwaChMb2dpY2FsTm90LCBhZGRUb0dyYXBoKENvbXBhcmVFcSwgdmFsdWUsIGNv
bnN0YW50TnVsbCgpKSkpOwogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfbmVxX251bGwpOwog
ICAgICAgICB9CiAKICAgICAgICAgY2FzZSBvcF9uc3RyaWN0ZXE6IHsKLSAgICAgICAgICAgIE5v
ZGVJbmRleCBvcDEgPSBnZXQoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7Ci0gICAg
ICAgICAgICBOb2RlSW5kZXggb3AyID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJh
bmQpOworICAgICAgICAgICAgTm9kZSogb3AxID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsyXS51
Lm9wZXJhbmQpOworICAgICAgICAgICAgTm9kZSogb3AyID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlv
blszXS51Lm9wZXJhbmQpOwogICAgICAgICAgICAgc2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51
Lm9wZXJhbmQsIGFkZFRvR3JhcGgoTG9naWNhbE5vdCwgYWRkVG9HcmFwaChDb21wYXJlU3RyaWN0
RXEsIG9wMSwgb3AyKSkpOwogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfbnN0cmljdGVxKTsK
ICAgICAgICAgfQpAQCAtMjUyMiwyMiArMjQ5MSwyMiBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpw
YXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgIGNhc2Ugb3BfZ2V0X2J5X3ZhbDogewogICAgICAg
ICAgICAgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiA9IGdldFByZWRpY3Rpb24oKTsKICAgICAg
ICAgICAgIAotICAgICAgICAgICAgTm9kZUluZGV4IGJhc2UgPSBnZXQoY3VycmVudEluc3RydWN0
aW9uWzJdLnUub3BlcmFuZCk7CisgICAgICAgICAgICBOb2RlKiBiYXNlID0gZ2V0KGN1cnJlbnRJ
bnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOwogICAgICAgICAgICAgQXJyYXlNb2RlIGFycmF5TW9k
ZSA9IGdldEFycmF5TW9kZUFuZEVtaXRDaGVja3MoY3VycmVudEluc3RydWN0aW9uWzRdLnUuYXJy
YXlQcm9maWxlLCBBcnJheTo6UmVhZCwgYmFzZSk7Ci0gICAgICAgICAgICBOb2RlSW5kZXggcHJv
cGVydHkgPSBnZXQoY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZCk7Ci0gICAgICAgICAg
ICBOb2RlSW5kZXggZ2V0QnlWYWwgPSBhZGRUb0dyYXBoKEdldEJ5VmFsLCBPcEluZm8oYXJyYXlN
b2RlLmFzV29yZCgpKSwgT3BJbmZvKHByZWRpY3Rpb24pLCBiYXNlLCBwcm9wZXJ0eSk7CisgICAg
ICAgICAgICBOb2RlKiBwcm9wZXJ0eSA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVy
YW5kKTsKKyAgICAgICAgICAgIE5vZGUqIGdldEJ5VmFsID0gYWRkVG9HcmFwaChHZXRCeVZhbCwg
T3BJbmZvKGFycmF5TW9kZS5hc1dvcmQoKSksIE9wSW5mbyhwcmVkaWN0aW9uKSwgYmFzZSwgcHJv
cGVydHkpOwogICAgICAgICAgICAgc2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQs
IGdldEJ5VmFsKTsKIAogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfZ2V0X2J5X3ZhbCk7CiAg
ICAgICAgIH0KIAogICAgICAgICBjYXNlIG9wX3B1dF9ieV92YWw6IHsKLSAgICAgICAgICAgIE5v
ZGVJbmRleCBiYXNlID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpOworICAg
ICAgICAgICAgTm9kZSogYmFzZSA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5k
KTsKIAogICAgICAgICAgICAgQXJyYXlNb2RlIGFycmF5TW9kZSA9IGdldEFycmF5TW9kZUFuZEVt
aXRDaGVja3MoY3VycmVudEluc3RydWN0aW9uWzRdLnUuYXJyYXlQcm9maWxlLCBBcnJheTo6V3Jp
dGUsIGJhc2UpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBOb2RlSW5kZXggcHJvcGVydHkg
PSBnZXQoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7Ci0gICAgICAgICAgICBOb2Rl
SW5kZXggdmFsdWUgPSBnZXQoY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZCk7CisgICAg
ICAgICAgICBOb2RlKiBwcm9wZXJ0eSA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVy
YW5kKTsKKyAgICAgICAgICAgIE5vZGUqIHZhbHVlID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsz
XS51Lm9wZXJhbmQpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBhZGRWYXJBcmdDaGlsZChi
YXNlKTsKICAgICAgICAgICAgIGFkZFZhckFyZ0NoaWxkKHByb3BlcnR5KTsKQEAgLTI1NTMsNyAr
MjUyMiw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAg
ICAgY2FzZSBvcF9nZXRfYXJyYXlfbGVuZ3RoOiB7CiAgICAgICAgICAgICBTcGVjdWxhdGVkVHlw
ZSBwcmVkaWN0aW9uID0gZ2V0UHJlZGljdGlvbigpOwogICAgICAgICAgICAgCi0gICAgICAgICAg
ICBOb2RlSW5kZXggYmFzZSA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsK
KyAgICAgICAgICAgIE5vZGUqIGJhc2UgPSBnZXQoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3Bl
cmFuZCk7CiAgICAgICAgICAgICB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyID0gbV9pbmxpbmVT
dGFja1RvcC0+bV9pZGVudGlmaWVyUmVtYXBbY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFu
ZF07CiAgICAgICAgICAgICAKICAgICAgICAgICAgIElkZW50aWZpZXIgaWRlbnRpZmllciA9IG1f
Y29kZUJsb2NrLT5pZGVudGlmaWVyKGlkZW50aWZpZXJOdW1iZXIpOwpAQCAtMjU3MSw4ICsyNTQw
LDggQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICBj
YXNlIG9wX3B1dF9ieV9pZF90cmFuc2l0aW9uX25vcm1hbDoKICAgICAgICAgY2FzZSBvcF9wdXRf
YnlfaWRfdHJhbnNpdGlvbl9kaXJlY3Rfb3V0X29mX2xpbmU6CiAgICAgICAgIGNhc2Ugb3BfcHV0
X2J5X2lkX3RyYW5zaXRpb25fbm9ybWFsX291dF9vZl9saW5lOiB7Ci0gICAgICAgICAgICBOb2Rl
SW5kZXggdmFsdWUgPSBnZXQoY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZCk7Ci0gICAg
ICAgICAgICBOb2RlSW5kZXggYmFzZSA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVy
YW5kKTsKKyAgICAgICAgICAgIE5vZGUqIHZhbHVlID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsz
XS51Lm9wZXJhbmQpOworICAgICAgICAgICAgTm9kZSogYmFzZSA9IGdldChjdXJyZW50SW5zdHJ1
Y3Rpb25bMV0udS5vcGVyYW5kKTsKICAgICAgICAgICAgIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1i
ZXIgPSBtX2lubGluZVN0YWNrVG9wLT5tX2lkZW50aWZpZXJSZW1hcFtjdXJyZW50SW5zdHJ1Y3Rp
b25bMl0udS5vcGVyYW5kXTsKICAgICAgICAgICAgIGJvb2wgZGlyZWN0ID0gY3VycmVudEluc3Ry
dWN0aW9uWzhdLnUub3BlcmFuZDsKIApAQCAtMjU4Nyw3ICsyNTU2LDcgQEAgYm9vbCBCeXRlQ29k
ZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgCiAgICAgICAgICAgICBp
ZiAoIWhhc0V4aXRTaXRlICYmIHB1dEJ5SWRTdGF0dXMuaXNTaW1wbGVSZXBsYWNlKCkpIHsKICAg
ICAgICAgICAgICAgICBhZGRUb0dyYXBoKENoZWNrU3RydWN0dXJlLCBPcEluZm8obV9ncmFwaC5h
ZGRTdHJ1Y3R1cmVTZXQocHV0QnlJZFN0YXR1cy5vbGRTdHJ1Y3R1cmUoKSkpLCBiYXNlKTsKLSAg
ICAgICAgICAgICAgICBOb2RlSW5kZXggcHJvcGVydHlTdG9yYWdlOworICAgICAgICAgICAgICAg
IE5vZGUqIHByb3BlcnR5U3RvcmFnZTsKICAgICAgICAgICAgICAgICBpZiAoaXNJbmxpbmVPZmZz
ZXQocHV0QnlJZFN0YXR1cy5vZmZzZXQoKSkpCiAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5
U3RvcmFnZSA9IGJhc2U7CiAgICAgICAgICAgICAgICAgZWxzZQpAQCAtMjYyMiw3ICsyNTkxLDcg
QEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICBBU1NFUlQocHV0QnlJZFN0YXR1cy5vbGRTdHJ1Y3R1cmUo
KS0+dHJhbnNpdGlvbldhdGNocG9pbnRTZXRIYXNCZWVuSW52YWxpZGF0ZWQoKSk7CiAgICAgICAg
ICAgICAgICAgCi0gICAgICAgICAgICAgICAgTm9kZUluZGV4IHByb3BlcnR5U3RvcmFnZTsKKyAg
ICAgICAgICAgICAgICBOb2RlKiBwcm9wZXJ0eVN0b3JhZ2U7CiAgICAgICAgICAgICAgICAgU3Ry
dWN0dXJlVHJhbnNpdGlvbkRhdGEqIHRyYW5zaXRpb25EYXRhID0KICAgICAgICAgICAgICAgICAg
ICAgbV9ncmFwaC5hZGRTdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSgKICAgICAgICAgICAgICAgICAg
ICAgICAgIFN0cnVjdHVyZVRyYW5zaXRpb25EYXRhKApAQCAtMjY3OSw3ICsyNjQ4LDcgQEAgYm9v
bCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICB9CiAKICAgICAg
ICAgY2FzZSBvcF9pbml0X2dsb2JhbF9jb25zdDogewotICAgICAgICAgICAgTm9kZUluZGV4IHZh
bHVlID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOworICAgICAgICAgICAg
Tm9kZSogdmFsdWUgPSBnZXQoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7CiAgICAg
ICAgICAgICBhZGRUb0dyYXBoKAogICAgICAgICAgICAgICAgIFB1dEdsb2JhbFZhciwKICAgICAg
ICAgICAgICAgICBPcEluZm8obV9pbmxpbmVTdGFja1RvcC0+bV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpLT5hc3NlcnRSZWdpc3RlcklzSW5UaGlzT2JqZWN0KGN1cnJlbnRJbnN0cnVjdGlvblsx
XS51LnJlZ2lzdGVyUG9pbnRlcikpLApAQCAtMjY4OCw3ICsyNjU3LDcgQEAgYm9vbCBCeXRlQ29k
ZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBv
cF9pbml0X2dsb2JhbF9jb25zdF9jaGVjazogewotICAgICAgICAgICAgTm9kZUluZGV4IHZhbHVl
ID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOworICAgICAgICAgICAgTm9k
ZSogdmFsdWUgPSBnZXQoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7CiAgICAgICAg
ICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IG1faW5saW5lU3RhY2tUb3AtPm1fY29kZUJsb2Nr
OwogICAgICAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGNvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCk7CiAgICAgICAgICAgICB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyID0g
bV9pbmxpbmVTdGFja1RvcC0+bV9pZGVudGlmaWVyUmVtYXBbY3VycmVudEluc3RydWN0aW9uWzRd
LnUub3BlcmFuZF07CkBAIC0yNzI2LDE1MiArMjY5NSwxNTIgQEAgYm9vbCBCeXRlQ29kZVBhcnNl
cjo6cGFyc2VCbG9jayh1bnNpZ25lZAogCiAgICAgICAgIGNhc2Ugb3BfanRydWU6IHsKICAgICAg
ICAgICAgIHVuc2lnbmVkIHJlbGF0aXZlT2Zmc2V0ID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUu
b3BlcmFuZDsKLSAgICAgICAgICAgIE5vZGVJbmRleCBjb25kaXRpb24gPSBnZXQoY3VycmVudElu
c3RydWN0aW9uWzFdLnUub3BlcmFuZCk7CisgICAgICAgICAgICBOb2RlKiBjb25kaXRpb24gPSBn
ZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCk7CiAgICAgICAgICAgICBhZGRUb0dy
YXBoKEJyYW5jaCwgT3BJbmZvKG1fY3VycmVudEluZGV4ICsgcmVsYXRpdmVPZmZzZXQpLCBPcElu
Zm8obV9jdXJyZW50SW5kZXggKyBPUENPREVfTEVOR1RIKG9wX2p0cnVlKSksIGNvbmRpdGlvbik7
CiAgICAgICAgICAgICBMQVNUX09QQ09ERShvcF9qdHJ1ZSk7CiAgICAgICAgIH0KIAogICAgICAg
ICBjYXNlIG9wX2pmYWxzZTogewogICAgICAgICAgICAgdW5zaWduZWQgcmVsYXRpdmVPZmZzZXQg
PSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwotICAgICAgICAgICAgTm9kZUluZGV4
IGNvbmRpdGlvbiA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKTsKKyAgICAg
ICAgICAgIE5vZGUqIGNvbmRpdGlvbiA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVy
YW5kKTsKICAgICAgICAgICAgIGFkZFRvR3JhcGgoQnJhbmNoLCBPcEluZm8obV9jdXJyZW50SW5k
ZXggKyBPUENPREVfTEVOR1RIKG9wX2pmYWxzZSkpLCBPcEluZm8obV9jdXJyZW50SW5kZXggKyBy
ZWxhdGl2ZU9mZnNldCksIGNvbmRpdGlvbik7CiAgICAgICAgICAgICBMQVNUX09QQ09ERShvcF9q
ZmFsc2UpOwogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBvcF9sb29wX2lmX3RydWU6IHsKICAg
ICAgICAgICAgIHVuc2lnbmVkIHJlbGF0aXZlT2Zmc2V0ID0gY3VycmVudEluc3RydWN0aW9uWzJd
LnUub3BlcmFuZDsKLSAgICAgICAgICAgIE5vZGVJbmRleCBjb25kaXRpb24gPSBnZXQoY3VycmVu
dEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCk7CisgICAgICAgICAgICBOb2RlKiBjb25kaXRpb24g
PSBnZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCk7CiAgICAgICAgICAgICBhZGRU
b0dyYXBoKEJyYW5jaCwgT3BJbmZvKG1fY3VycmVudEluZGV4ICsgcmVsYXRpdmVPZmZzZXQpLCBP
cEluZm8obV9jdXJyZW50SW5kZXggKyBPUENPREVfTEVOR1RIKG9wX2xvb3BfaWZfdHJ1ZSkpLCBj
b25kaXRpb24pOwogICAgICAgICAgICAgTEFTVF9PUENPREUob3BfbG9vcF9pZl90cnVlKTsKICAg
ICAgICAgfQogCiAgICAgICAgIGNhc2Ugb3BfbG9vcF9pZl9mYWxzZTogewogICAgICAgICAgICAg
dW5zaWduZWQgcmVsYXRpdmVPZmZzZXQgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5k
OwotICAgICAgICAgICAgTm9kZUluZGV4IGNvbmRpdGlvbiA9IGdldChjdXJyZW50SW5zdHJ1Y3Rp
b25bMV0udS5vcGVyYW5kKTsKKyAgICAgICAgICAgIE5vZGUqIGNvbmRpdGlvbiA9IGdldChjdXJy
ZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKTsKICAgICAgICAgICAgIGFkZFRvR3JhcGgoQnJh
bmNoLCBPcEluZm8obV9jdXJyZW50SW5kZXggKyBPUENPREVfTEVOR1RIKG9wX2xvb3BfaWZfZmFs
c2UpKSwgT3BJbmZvKG1fY3VycmVudEluZGV4ICsgcmVsYXRpdmVPZmZzZXQpLCBjb25kaXRpb24p
OwogICAgICAgICAgICAgTEFTVF9PUENPREUob3BfbG9vcF9pZl9mYWxzZSk7CiAgICAgICAgIH0K
IAogICAgICAgICBjYXNlIG9wX2plcV9udWxsOiB7CiAgICAgICAgICAgICB1bnNpZ25lZCByZWxh
dGl2ZU9mZnNldCA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7Ci0gICAgICAgICAg
ICBOb2RlSW5kZXggdmFsdWUgPSBnZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCk7
Ci0gICAgICAgICAgICBOb2RlSW5kZXggY29uZGl0aW9uID0gYWRkVG9HcmFwaChDb21wYXJlRXEs
IHZhbHVlLCBjb25zdGFudE51bGwoKSk7CisgICAgICAgICAgICBOb2RlKiB2YWx1ZSA9IGdldChj
dXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKTsKKyAgICAgICAgICAgIE5vZGUqIGNvbmRp
dGlvbiA9IGFkZFRvR3JhcGgoQ29tcGFyZUVxLCB2YWx1ZSwgY29uc3RhbnROdWxsKCkpOwogICAg
ICAgICAgICAgYWRkVG9HcmFwaChCcmFuY2gsIE9wSW5mbyhtX2N1cnJlbnRJbmRleCArIHJlbGF0
aXZlT2Zmc2V0KSwgT3BJbmZvKG1fY3VycmVudEluZGV4ICsgT1BDT0RFX0xFTkdUSChvcF9qZXFf
bnVsbCkpLCBjb25kaXRpb24pOwogICAgICAgICAgICAgTEFTVF9PUENPREUob3BfamVxX251bGwp
OwogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBvcF9qbmVxX251bGw6IHsKICAgICAgICAgICAg
IHVuc2lnbmVkIHJlbGF0aXZlT2Zmc2V0ID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFu
ZDsKLSAgICAgICAgICAgIE5vZGVJbmRleCB2YWx1ZSA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25b
MV0udS5vcGVyYW5kKTsKLSAgICAgICAgICAgIE5vZGVJbmRleCBjb25kaXRpb24gPSBhZGRUb0dy
YXBoKENvbXBhcmVFcSwgdmFsdWUsIGNvbnN0YW50TnVsbCgpKTsKKyAgICAgICAgICAgIE5vZGUq
IHZhbHVlID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpOworICAgICAgICAg
ICAgTm9kZSogY29uZGl0aW9uID0gYWRkVG9HcmFwaChDb21wYXJlRXEsIHZhbHVlLCBjb25zdGFu
dE51bGwoKSk7CiAgICAgICAgICAgICBhZGRUb0dyYXBoKEJyYW5jaCwgT3BJbmZvKG1fY3VycmVu
dEluZGV4ICsgT1BDT0RFX0xFTkdUSChvcF9qbmVxX251bGwpKSwgT3BJbmZvKG1fY3VycmVudElu
ZGV4ICsgcmVsYXRpdmVPZmZzZXQpLCBjb25kaXRpb24pOwogICAgICAgICAgICAgTEFTVF9PUENP
REUob3Bfam5lcV9udWxsKTsKICAgICAgICAgfQogCiAgICAgICAgIGNhc2Ugb3Bfamxlc3M6IHsK
ICAgICAgICAgICAgIHVuc2lnbmVkIHJlbGF0aXZlT2Zmc2V0ID0gY3VycmVudEluc3RydWN0aW9u
WzNdLnUub3BlcmFuZDsKLSAgICAgICAgICAgIE5vZGVJbmRleCBvcDEgPSBnZXQoY3VycmVudElu
c3RydWN0aW9uWzFdLnUub3BlcmFuZCk7Ci0gICAgICAgICAgICBOb2RlSW5kZXggb3AyID0gZ2V0
KGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOwotICAgICAgICAgICAgTm9kZUluZGV4
IGNvbmRpdGlvbiA9IGFkZFRvR3JhcGgoQ29tcGFyZUxlc3MsIG9wMSwgb3AyKTsKKyAgICAgICAg
ICAgIE5vZGUqIG9wMSA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKTsKKyAg
ICAgICAgICAgIE5vZGUqIG9wMiA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5k
KTsKKyAgICAgICAgICAgIE5vZGUqIGNvbmRpdGlvbiA9IGFkZFRvR3JhcGgoQ29tcGFyZUxlc3Ms
IG9wMSwgb3AyKTsKICAgICAgICAgICAgIGFkZFRvR3JhcGgoQnJhbmNoLCBPcEluZm8obV9jdXJy
ZW50SW5kZXggKyByZWxhdGl2ZU9mZnNldCksIE9wSW5mbyhtX2N1cnJlbnRJbmRleCArIE9QQ09E
RV9MRU5HVEgob3Bfamxlc3MpKSwgY29uZGl0aW9uKTsKICAgICAgICAgICAgIExBU1RfT1BDT0RF
KG9wX2psZXNzKTsKICAgICAgICAgfQogCiAgICAgICAgIGNhc2Ugb3Bfamxlc3NlcTogewogICAg
ICAgICAgICAgdW5zaWduZWQgcmVsYXRpdmVPZmZzZXQgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10u
dS5vcGVyYW5kOwotICAgICAgICAgICAgTm9kZUluZGV4IG9wMSA9IGdldChjdXJyZW50SW5zdHJ1
Y3Rpb25bMV0udS5vcGVyYW5kKTsKLSAgICAgICAgICAgIE5vZGVJbmRleCBvcDIgPSBnZXQoY3Vy
cmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7Ci0gICAgICAgICAgICBOb2RlSW5kZXggY29u
ZGl0aW9uID0gYWRkVG9HcmFwaChDb21wYXJlTGVzc0VxLCBvcDEsIG9wMik7CisgICAgICAgICAg
ICBOb2RlKiBvcDEgPSBnZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCk7CisgICAg
ICAgICAgICBOb2RlKiBvcDIgPSBnZXQoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7
CisgICAgICAgICAgICBOb2RlKiBjb25kaXRpb24gPSBhZGRUb0dyYXBoKENvbXBhcmVMZXNzRXEs
IG9wMSwgb3AyKTsKICAgICAgICAgICAgIGFkZFRvR3JhcGgoQnJhbmNoLCBPcEluZm8obV9jdXJy
ZW50SW5kZXggKyByZWxhdGl2ZU9mZnNldCksIE9wSW5mbyhtX2N1cnJlbnRJbmRleCArIE9QQ09E
RV9MRU5HVEgob3Bfamxlc3NlcSkpLCBjb25kaXRpb24pOwogICAgICAgICAgICAgTEFTVF9PUENP
REUob3Bfamxlc3NlcSk7CiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIG9wX2pncmVhdGVyOiB7
CiAgICAgICAgICAgICB1bnNpZ25lZCByZWxhdGl2ZU9mZnNldCA9IGN1cnJlbnRJbnN0cnVjdGlv
blszXS51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBOb2RlSW5kZXggb3AxID0gZ2V0KGN1cnJlbnRJ
bnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpOwotICAgICAgICAgICAgTm9kZUluZGV4IG9wMiA9IGdl
dChjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKLSAgICAgICAgICAgIE5vZGVJbmRl
eCBjb25kaXRpb24gPSBhZGRUb0dyYXBoKENvbXBhcmVHcmVhdGVyLCBvcDEsIG9wMik7CisgICAg
ICAgICAgICBOb2RlKiBvcDEgPSBnZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCk7
CisgICAgICAgICAgICBOb2RlKiBvcDIgPSBnZXQoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3Bl
cmFuZCk7CisgICAgICAgICAgICBOb2RlKiBjb25kaXRpb24gPSBhZGRUb0dyYXBoKENvbXBhcmVH
cmVhdGVyLCBvcDEsIG9wMik7CiAgICAgICAgICAgICBhZGRUb0dyYXBoKEJyYW5jaCwgT3BJbmZv
KG1fY3VycmVudEluZGV4ICsgcmVsYXRpdmVPZmZzZXQpLCBPcEluZm8obV9jdXJyZW50SW5kZXgg
KyBPUENPREVfTEVOR1RIKG9wX2pncmVhdGVyKSksIGNvbmRpdGlvbik7CiAgICAgICAgICAgICBM
QVNUX09QQ09ERShvcF9qZ3JlYXRlcik7CiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIG9wX2pn
cmVhdGVyZXE6IHsKICAgICAgICAgICAgIHVuc2lnbmVkIHJlbGF0aXZlT2Zmc2V0ID0gY3VycmVu
dEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKLSAgICAgICAgICAgIE5vZGVJbmRleCBvcDEgPSBn
ZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCk7Ci0gICAgICAgICAgICBOb2RlSW5k
ZXggb3AyID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOwotICAgICAgICAg
ICAgTm9kZUluZGV4IGNvbmRpdGlvbiA9IGFkZFRvR3JhcGgoQ29tcGFyZUdyZWF0ZXJFcSwgb3Ax
LCBvcDIpOworICAgICAgICAgICAgTm9kZSogb3AxID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsx
XS51Lm9wZXJhbmQpOworICAgICAgICAgICAgTm9kZSogb3AyID0gZ2V0KGN1cnJlbnRJbnN0cnVj
dGlvblsyXS51Lm9wZXJhbmQpOworICAgICAgICAgICAgTm9kZSogY29uZGl0aW9uID0gYWRkVG9H
cmFwaChDb21wYXJlR3JlYXRlckVxLCBvcDEsIG9wMik7CiAgICAgICAgICAgICBhZGRUb0dyYXBo
KEJyYW5jaCwgT3BJbmZvKG1fY3VycmVudEluZGV4ICsgcmVsYXRpdmVPZmZzZXQpLCBPcEluZm8o
bV9jdXJyZW50SW5kZXggKyBPUENPREVfTEVOR1RIKG9wX2pncmVhdGVyZXEpKSwgY29uZGl0aW9u
KTsKICAgICAgICAgICAgIExBU1RfT1BDT0RFKG9wX2pncmVhdGVyZXEpOwogICAgICAgICB9CiAK
ICAgICAgICAgY2FzZSBvcF9qbmxlc3M6IHsKICAgICAgICAgICAgIHVuc2lnbmVkIHJlbGF0aXZl
T2Zmc2V0ID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKLSAgICAgICAgICAgIE5v
ZGVJbmRleCBvcDEgPSBnZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCk7Ci0gICAg
ICAgICAgICBOb2RlSW5kZXggb3AyID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJh
bmQpOwotICAgICAgICAgICAgTm9kZUluZGV4IGNvbmRpdGlvbiA9IGFkZFRvR3JhcGgoQ29tcGFy
ZUxlc3MsIG9wMSwgb3AyKTsKKyAgICAgICAgICAgIE5vZGUqIG9wMSA9IGdldChjdXJyZW50SW5z
dHJ1Y3Rpb25bMV0udS5vcGVyYW5kKTsKKyAgICAgICAgICAgIE5vZGUqIG9wMiA9IGdldChjdXJy
ZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKKyAgICAgICAgICAgIE5vZGUqIGNvbmRpdGlv
biA9IGFkZFRvR3JhcGgoQ29tcGFyZUxlc3MsIG9wMSwgb3AyKTsKICAgICAgICAgICAgIGFkZFRv
R3JhcGgoQnJhbmNoLCBPcEluZm8obV9jdXJyZW50SW5kZXggKyBPUENPREVfTEVOR1RIKG9wX2pu
bGVzcykpLCBPcEluZm8obV9jdXJyZW50SW5kZXggKyByZWxhdGl2ZU9mZnNldCksIGNvbmRpdGlv
bik7CiAgICAgICAgICAgICBMQVNUX09QQ09ERShvcF9qbmxlc3MpOwogICAgICAgICB9CiAKICAg
ICAgICAgY2FzZSBvcF9qbmxlc3NlcTogewogICAgICAgICAgICAgdW5zaWduZWQgcmVsYXRpdmVP
ZmZzZXQgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOwotICAgICAgICAgICAgTm9k
ZUluZGV4IG9wMSA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKTsKLSAgICAg
ICAgICAgIE5vZGVJbmRleCBvcDIgPSBnZXQoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFu
ZCk7Ci0gICAgICAgICAgICBOb2RlSW5kZXggY29uZGl0aW9uID0gYWRkVG9HcmFwaChDb21wYXJl
TGVzc0VxLCBvcDEsIG9wMik7CisgICAgICAgICAgICBOb2RlKiBvcDEgPSBnZXQoY3VycmVudElu
c3RydWN0aW9uWzFdLnUub3BlcmFuZCk7CisgICAgICAgICAgICBOb2RlKiBvcDIgPSBnZXQoY3Vy
cmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7CisgICAgICAgICAgICBOb2RlKiBjb25kaXRp
b24gPSBhZGRUb0dyYXBoKENvbXBhcmVMZXNzRXEsIG9wMSwgb3AyKTsKICAgICAgICAgICAgIGFk
ZFRvR3JhcGgoQnJhbmNoLCBPcEluZm8obV9jdXJyZW50SW5kZXggKyBPUENPREVfTEVOR1RIKG9w
X2pubGVzc2VxKSksIE9wSW5mbyhtX2N1cnJlbnRJbmRleCArIHJlbGF0aXZlT2Zmc2V0KSwgY29u
ZGl0aW9uKTsKICAgICAgICAgICAgIExBU1RfT1BDT0RFKG9wX2pubGVzc2VxKTsKICAgICAgICAg
fQogCiAgICAgICAgIGNhc2Ugb3Bfam5ncmVhdGVyOiB7CiAgICAgICAgICAgICB1bnNpZ25lZCBy
ZWxhdGl2ZU9mZnNldCA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7Ci0gICAgICAg
ICAgICBOb2RlSW5kZXggb3AxID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQp
OwotICAgICAgICAgICAgTm9kZUluZGV4IG9wMiA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMl0u
dS5vcGVyYW5kKTsKLSAgICAgICAgICAgIE5vZGVJbmRleCBjb25kaXRpb24gPSBhZGRUb0dyYXBo
KENvbXBhcmVHcmVhdGVyLCBvcDEsIG9wMik7CisgICAgICAgICAgICBOb2RlKiBvcDEgPSBnZXQo
Y3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCk7CisgICAgICAgICAgICBOb2RlKiBvcDIg
PSBnZXQoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7CisgICAgICAgICAgICBOb2Rl
KiBjb25kaXRpb24gPSBhZGRUb0dyYXBoKENvbXBhcmVHcmVhdGVyLCBvcDEsIG9wMik7CiAgICAg
ICAgICAgICBhZGRUb0dyYXBoKEJyYW5jaCwgT3BJbmZvKG1fY3VycmVudEluZGV4ICsgT1BDT0RF
X0xFTkdUSChvcF9qbmdyZWF0ZXIpKSwgT3BJbmZvKG1fY3VycmVudEluZGV4ICsgcmVsYXRpdmVP
ZmZzZXQpLCBjb25kaXRpb24pOwogICAgICAgICAgICAgTEFTVF9PUENPREUob3Bfam5ncmVhdGVy
KTsKICAgICAgICAgfQogCiAgICAgICAgIGNhc2Ugb3Bfam5ncmVhdGVyZXE6IHsKICAgICAgICAg
ICAgIHVuc2lnbmVkIHJlbGF0aXZlT2Zmc2V0ID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3Bl
cmFuZDsKLSAgICAgICAgICAgIE5vZGVJbmRleCBvcDEgPSBnZXQoY3VycmVudEluc3RydWN0aW9u
WzFdLnUub3BlcmFuZCk7Ci0gICAgICAgICAgICBOb2RlSW5kZXggb3AyID0gZ2V0KGN1cnJlbnRJ
bnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOwotICAgICAgICAgICAgTm9kZUluZGV4IGNvbmRpdGlv
biA9IGFkZFRvR3JhcGgoQ29tcGFyZUdyZWF0ZXJFcSwgb3AxLCBvcDIpOworICAgICAgICAgICAg
Tm9kZSogb3AxID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpOworICAgICAg
ICAgICAgTm9kZSogb3AyID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOwor
ICAgICAgICAgICAgTm9kZSogY29uZGl0aW9uID0gYWRkVG9HcmFwaChDb21wYXJlR3JlYXRlckVx
LCBvcDEsIG9wMik7CiAgICAgICAgICAgICBhZGRUb0dyYXBoKEJyYW5jaCwgT3BJbmZvKG1fY3Vy
cmVudEluZGV4ICsgT1BDT0RFX0xFTkdUSChvcF9qbmdyZWF0ZXJlcSkpLCBPcEluZm8obV9jdXJy
ZW50SW5kZXggKyByZWxhdGl2ZU9mZnNldCksIGNvbmRpdGlvbik7CiAgICAgICAgICAgICBMQVNU
X09QQ09ERShvcF9qbmdyZWF0ZXJlcSk7CiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIG9wX2xv
b3BfaWZfbGVzczogewogICAgICAgICAgICAgdW5zaWduZWQgcmVsYXRpdmVPZmZzZXQgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOwotICAgICAgICAgICAgTm9kZUluZGV4IG9wMSA9
IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKTsKLSAgICAgICAgICAgIE5vZGVJ
bmRleCBvcDIgPSBnZXQoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7Ci0gICAgICAg
ICAgICBOb2RlSW5kZXggY29uZGl0aW9uID0gYWRkVG9HcmFwaChDb21wYXJlTGVzcywgb3AxLCBv
cDIpOworICAgICAgICAgICAgTm9kZSogb3AxID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51
Lm9wZXJhbmQpOworICAgICAgICAgICAgTm9kZSogb3AyID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlv
blsyXS51Lm9wZXJhbmQpOworICAgICAgICAgICAgTm9kZSogY29uZGl0aW9uID0gYWRkVG9HcmFw
aChDb21wYXJlTGVzcywgb3AxLCBvcDIpOwogICAgICAgICAgICAgYWRkVG9HcmFwaChCcmFuY2gs
IE9wSW5mbyhtX2N1cnJlbnRJbmRleCArIHJlbGF0aXZlT2Zmc2V0KSwgT3BJbmZvKG1fY3VycmVu
dEluZGV4ICsgT1BDT0RFX0xFTkdUSChvcF9sb29wX2lmX2xlc3MpKSwgY29uZGl0aW9uKTsKICAg
ICAgICAgICAgIExBU1RfT1BDT0RFKG9wX2xvb3BfaWZfbGVzcyk7CiAgICAgICAgIH0KIAogICAg
ICAgICBjYXNlIG9wX2xvb3BfaWZfbGVzc2VxOiB7CiAgICAgICAgICAgICB1bnNpZ25lZCByZWxh
dGl2ZU9mZnNldCA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7Ci0gICAgICAgICAg
ICBOb2RlSW5kZXggb3AxID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpOwot
ICAgICAgICAgICAgTm9kZUluZGV4IG9wMiA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5v
cGVyYW5kKTsKLSAgICAgICAgICAgIE5vZGVJbmRleCBjb25kaXRpb24gPSBhZGRUb0dyYXBoKENv
bXBhcmVMZXNzRXEsIG9wMSwgb3AyKTsKKyAgICAgICAgICAgIE5vZGUqIG9wMSA9IGdldChjdXJy
ZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKTsKKyAgICAgICAgICAgIE5vZGUqIG9wMiA9IGdl
dChjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKKyAgICAgICAgICAgIE5vZGUqIGNv
bmRpdGlvbiA9IGFkZFRvR3JhcGgoQ29tcGFyZUxlc3NFcSwgb3AxLCBvcDIpOwogICAgICAgICAg
ICAgYWRkVG9HcmFwaChCcmFuY2gsIE9wSW5mbyhtX2N1cnJlbnRJbmRleCArIHJlbGF0aXZlT2Zm
c2V0KSwgT3BJbmZvKG1fY3VycmVudEluZGV4ICsgT1BDT0RFX0xFTkdUSChvcF9sb29wX2lmX2xl
c3NlcSkpLCBjb25kaXRpb24pOwogICAgICAgICAgICAgTEFTVF9PUENPREUob3BfbG9vcF9pZl9s
ZXNzZXEpOwogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBvcF9sb29wX2lmX2dyZWF0ZXI6IHsK
ICAgICAgICAgICAgIHVuc2lnbmVkIHJlbGF0aXZlT2Zmc2V0ID0gY3VycmVudEluc3RydWN0aW9u
WzNdLnUub3BlcmFuZDsKLSAgICAgICAgICAgIE5vZGVJbmRleCBvcDEgPSBnZXQoY3VycmVudElu
c3RydWN0aW9uWzFdLnUub3BlcmFuZCk7Ci0gICAgICAgICAgICBOb2RlSW5kZXggb3AyID0gZ2V0
KGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOwotICAgICAgICAgICAgTm9kZUluZGV4
IGNvbmRpdGlvbiA9IGFkZFRvR3JhcGgoQ29tcGFyZUdyZWF0ZXIsIG9wMSwgb3AyKTsKKyAgICAg
ICAgICAgIE5vZGUqIG9wMSA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKTsK
KyAgICAgICAgICAgIE5vZGUqIG9wMiA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVy
YW5kKTsKKyAgICAgICAgICAgIE5vZGUqIGNvbmRpdGlvbiA9IGFkZFRvR3JhcGgoQ29tcGFyZUdy
ZWF0ZXIsIG9wMSwgb3AyKTsKICAgICAgICAgICAgIGFkZFRvR3JhcGgoQnJhbmNoLCBPcEluZm8o
bV9jdXJyZW50SW5kZXggKyByZWxhdGl2ZU9mZnNldCksIE9wSW5mbyhtX2N1cnJlbnRJbmRleCAr
IE9QQ09ERV9MRU5HVEgob3BfbG9vcF9pZl9ncmVhdGVyKSksIGNvbmRpdGlvbik7CiAgICAgICAg
ICAgICBMQVNUX09QQ09ERShvcF9sb29wX2lmX2dyZWF0ZXIpOwogICAgICAgICB9CiAKICAgICAg
ICAgY2FzZSBvcF9sb29wX2lmX2dyZWF0ZXJlcTogewogICAgICAgICAgICAgdW5zaWduZWQgcmVs
YXRpdmVPZmZzZXQgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOwotICAgICAgICAg
ICAgTm9kZUluZGV4IG9wMSA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKTsK
LSAgICAgICAgICAgIE5vZGVJbmRleCBvcDIgPSBnZXQoY3VycmVudEluc3RydWN0aW9uWzJdLnUu
b3BlcmFuZCk7Ci0gICAgICAgICAgICBOb2RlSW5kZXggY29uZGl0aW9uID0gYWRkVG9HcmFwaChD
b21wYXJlR3JlYXRlckVxLCBvcDEsIG9wMik7CisgICAgICAgICAgICBOb2RlKiBvcDEgPSBnZXQo
Y3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCk7CisgICAgICAgICAgICBOb2RlKiBvcDIg
PSBnZXQoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7CisgICAgICAgICAgICBOb2Rl
KiBjb25kaXRpb24gPSBhZGRUb0dyYXBoKENvbXBhcmVHcmVhdGVyRXEsIG9wMSwgb3AyKTsKICAg
ICAgICAgICAgIGFkZFRvR3JhcGgoQnJhbmNoLCBPcEluZm8obV9jdXJyZW50SW5kZXggKyByZWxh
dGl2ZU9mZnNldCksIE9wSW5mbyhtX2N1cnJlbnRJbmRleCArIE9QQ09ERV9MRU5HVEgob3BfbG9v
cF9pZl9ncmVhdGVyZXEpKSwgY29uZGl0aW9uKTsKICAgICAgICAgICAgIExBU1RfT1BDT0RFKG9w
X2xvb3BfaWZfZ3JlYXRlcmVxKTsKICAgICAgICAgfQpAQCAtMjk1Niw3ICsyOTI1LDcgQEAgYm9v
bCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBhcmd1bWVudCA9IDE7IGFyZ3VtZW50IDwgYXJnQ291bnQ7ICsrYXJndW1lbnQpCiAg
ICAgICAgICAgICAgICAgYWRkVmFyQXJnQ2hpbGQoZ2V0KGFyZ3VtZW50VG9PcGVyYW5kKGFyZ3Vt
ZW50KSkpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBOb2RlSW5kZXggY2FsbCA9IGFkZFRv
R3JhcGgoTm9kZTo6VmFyQXJnLCBDYWxsLCBPcEluZm8oMCksIE9wSW5mbyhwcmVkaWN0aW9uKSk7
CisgICAgICAgICAgICBOb2RlKiBjYWxsID0gYWRkVG9HcmFwaChOb2RlOjpWYXJBcmcsIENhbGws
IE9wSW5mbygwKSwgT3BJbmZvKHByZWRpY3Rpb24pKTsKICAgICAgICAgICAgIGlmIChpbnRlcnBy
ZXRlci0+Z2V0T3Bjb2RlSUQocHV0SW5zdHJ1Y3Rpb24tPnUub3Bjb2RlKSA9PSBvcF9jYWxsX3B1
dF9yZXN1bHQpCiAgICAgICAgICAgICAgICAgc2V0KHB1dEluc3RydWN0aW9uWzFdLnUub3BlcmFu
ZCwgY2FsbCk7CiAgICAgICAgICAgICAKQEAgLTI5ODgsMTMgKzI5NTcsMTMgQEAgYm9vbCBCeXRl
Q29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgCiAgICAgICAgICAg
ICB1bnNpZ25lZCBpZGVudGlmaWVyID0gbV9pbmxpbmVTdGFja1RvcC0+bV9pZGVudGlmaWVyUmVt
YXBbY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZF07CiAgICAgICAgICAgICB1bnNpZ25l
ZCBvcGVyYXRpb25zID0gbV9pbmxpbmVTdGFja1RvcC0+bV9yZXNvbHZlT3BlcmF0aW9uUmVtYXBb
Y3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZF07Ci0gICAgICAgICAgICBOb2RlSW5kZXgg
dmFsdWUgPSAwOworICAgICAgICAgICAgTm9kZSogdmFsdWUgPSAwOwogICAgICAgICAgICAgaWYg
KHBhcnNlUmVzb2x2ZU9wZXJhdGlvbnMocHJlZGljdGlvbiwgaWRlbnRpZmllciwgb3BlcmF0aW9u
cywgMCwgMCwgJnZhbHVlKSkgewogICAgICAgICAgICAgICAgIHNldChjdXJyZW50SW5zdHJ1Y3Rp
b25bMV0udS5vcGVyYW5kLCB2YWx1ZSk7CiAgICAgICAgICAgICAgICAgTkVYVF9PUENPREUob3Bf
cmVzb2x2ZSk7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIE5vZGVJbmRleCByZXNvbHZl
ID0gYWRkVG9HcmFwaChSZXNvbHZlLCBPcEluZm8obV9ncmFwaC5tX3Jlc29sdmVPcGVyYXRpb25z
RGF0YS5zaXplKCkpLCBPcEluZm8ocHJlZGljdGlvbikpOworICAgICAgICAgICAgTm9kZSogcmVz
b2x2ZSA9IGFkZFRvR3JhcGgoUmVzb2x2ZSwgT3BJbmZvKG1fZ3JhcGgubV9yZXNvbHZlT3BlcmF0
aW9uc0RhdGEuc2l6ZSgpKSwgT3BJbmZvKHByZWRpY3Rpb24pKTsKICAgICAgICAgICAgIG1fZ3Jh
cGgubV9yZXNvbHZlT3BlcmF0aW9uc0RhdGEuYXBwZW5kKFJlc29sdmVPcGVyYXRpb25EYXRhKCkp
OwogICAgICAgICAgICAgUmVzb2x2ZU9wZXJhdGlvbkRhdGEmIGRhdGEgPSBtX2dyYXBoLm1fcmVz
b2x2ZU9wZXJhdGlvbnNEYXRhLmxhc3QoKTsKICAgICAgICAgICAgIGRhdGEuaWRlbnRpZmllck51
bWJlciA9IGlkZW50aWZpZXI7CkBAIC0zMDQyLDggKzMwMTEsOCBAQCBib29sIEJ5dGVDb2RlUGFy
c2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXQo
dmFsdWUpKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgUHV0VG9C
YXNlT3BlcmF0aW9uOjpWYXJpYWJsZVB1dDogewotICAgICAgICAgICAgICAgIE5vZGVJbmRleCBz
Y29wZSA9IGdldChiYXNlKTsKLSAgICAgICAgICAgICAgICBOb2RlSW5kZXggc2NvcGVSZWdpc3Rl
cnMgPSBhZGRUb0dyYXBoKEdldFNjb3BlUmVnaXN0ZXJzLCBzY29wZSk7CisgICAgICAgICAgICAg
ICAgTm9kZSogc2NvcGUgPSBnZXQoYmFzZSk7CisgICAgICAgICAgICAgICAgTm9kZSogc2NvcGVS
ZWdpc3RlcnMgPSBhZGRUb0dyYXBoKEdldFNjb3BlUmVnaXN0ZXJzLCBzY29wZSk7CiAgICAgICAg
ICAgICAgICAgYWRkVG9HcmFwaChQdXRTY29wZWRWYXIsIE9wSW5mbyhwdXRUb0Jhc2UtPm1fb2Zm
c2V0KSwgc2NvcGUsIHNjb3BlUmVnaXN0ZXJzLCBnZXQodmFsdWUpKTsKICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgIH0KQEAgLTMwNTMsOSArMzAyMiw5IEBAIGJvb2wgQnl0ZUNv
ZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAgICAgICAgICAgYWRkVG9H
cmFwaChQaGFudG9tLCBnZXQoYmFzZSkpOwogICAgICAgICAgICAgICAgICAgICBORVhUX09QQ09E
RShvcF9wdXRfdG9fYmFzZSk7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIE5v
ZGVJbmRleCBiYXNlTm9kZSA9IGdldChiYXNlKTsKKyAgICAgICAgICAgICAgICBOb2RlKiBiYXNl
Tm9kZSA9IGdldChiYXNlKTsKICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKENoZWNrU3RydWN0
dXJlLCBPcEluZm8obV9ncmFwaC5hZGRTdHJ1Y3R1cmVTZXQocHV0VG9CYXNlLT5tX3N0cnVjdHVy
ZS5nZXQoKSkpLCBiYXNlTm9kZSk7Ci0gICAgICAgICAgICAgICAgTm9kZUluZGV4IHByb3BlcnR5
U3RvcmFnZTsKKyAgICAgICAgICAgICAgICBOb2RlKiBwcm9wZXJ0eVN0b3JhZ2U7CiAgICAgICAg
ICAgICAgICAgaWYgKGlzSW5saW5lT2Zmc2V0KHB1dFRvQmFzZS0+bV9vZmZzZXQpKQogICAgICAg
ICAgICAgICAgICAgICBwcm9wZXJ0eVN0b3JhZ2UgPSBiYXNlTm9kZTsKICAgICAgICAgICAgICAg
ICBlbHNlCkBAIC0zMDg2LDEzICszMDU1LDEzIEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNl
QmxvY2sodW5zaWduZWQKICAgICAgICAgICAgIHVuc2lnbmVkIG9wZXJhdGlvbnMgPSBtX2lubGlu
ZVN0YWNrVG9wLT5tX3Jlc29sdmVPcGVyYXRpb25SZW1hcFtjdXJyZW50SW5zdHJ1Y3Rpb25bNF0u
dS5vcGVyYW5kXTsKICAgICAgICAgICAgIHVuc2lnbmVkIHB1dFRvQmFzZU9wZXJhdGlvbiA9IG1f
aW5saW5lU3RhY2tUb3AtPm1fcHV0VG9CYXNlT3BlcmF0aW9uUmVtYXBbY3VycmVudEluc3RydWN0
aW9uWzVdLnUub3BlcmFuZF07CiAKLSAgICAgICAgICAgIE5vZGVJbmRleCBiYXNlID0gMDsKKyAg
ICAgICAgICAgIE5vZGUqIGJhc2UgPSAwOwogICAgICAgICAgICAgaWYgKHBhcnNlUmVzb2x2ZU9w
ZXJhdGlvbnMocHJlZGljdGlvbiwgaWRlbnRpZmllciwgb3BlcmF0aW9ucywgMCwgJmJhc2UsIDAp
KSB7CiAgICAgICAgICAgICAgICAgc2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQs
IGJhc2UpOwogICAgICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX3Jlc29sdmVfYmFzZSk7CiAg
ICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIE5vZGVJbmRleCByZXNvbHZlID0gYWRkVG9HcmFw
aChjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kID8gUmVzb2x2ZUJhc2VTdHJpY3RQdXQg
OiBSZXNvbHZlQmFzZSwgT3BJbmZvKG1fZ3JhcGgubV9yZXNvbHZlT3BlcmF0aW9uc0RhdGEuc2l6
ZSgpKSwgT3BJbmZvKHByZWRpY3Rpb24pKTsKKyAgICAgICAgICAgIE5vZGUqIHJlc29sdmUgPSBh
ZGRUb0dyYXBoKGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQgPyBSZXNvbHZlQmFzZVN0
cmljdFB1dCA6IFJlc29sdmVCYXNlLCBPcEluZm8obV9ncmFwaC5tX3Jlc29sdmVPcGVyYXRpb25z
RGF0YS5zaXplKCkpLCBPcEluZm8ocHJlZGljdGlvbikpOwogICAgICAgICAgICAgbV9ncmFwaC5t
X3Jlc29sdmVPcGVyYXRpb25zRGF0YS5hcHBlbmQoUmVzb2x2ZU9wZXJhdGlvbkRhdGEoKSk7CiAg
ICAgICAgICAgICBSZXNvbHZlT3BlcmF0aW9uRGF0YSYgZGF0YSA9IG1fZ3JhcGgubV9yZXNvbHZl
T3BlcmF0aW9uc0RhdGEubGFzdCgpOwogICAgICAgICAgICAgZGF0YS5pZGVudGlmaWVyTnVtYmVy
ID0gaWRlbnRpZmllcjsKQEAgLTMxMTEsOCArMzA4MCw4IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6
OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAgIHVuc2lnbmVkIG9wZXJhdGlvbnMgPSBt
X2lubGluZVN0YWNrVG9wLT5tX3Jlc29sdmVPcGVyYXRpb25SZW1hcFtjdXJyZW50SW5zdHJ1Y3Rp
b25bNF0udS5vcGVyYW5kXTsKICAgICAgICAgICAgIHVuc2lnbmVkIHB1dFRvQmFzZU9wZXJhdGlv
biA9IG1faW5saW5lU3RhY2tUb3AtPm1fcHV0VG9CYXNlT3BlcmF0aW9uUmVtYXBbY3VycmVudElu
c3RydWN0aW9uWzVdLnUub3BlcmFuZF07CiAKLSAgICAgICAgICAgIE5vZGVJbmRleCBiYXNlID0g
MDsKLSAgICAgICAgICAgIE5vZGVJbmRleCB2YWx1ZSA9IDA7CisgICAgICAgICAgICBOb2RlKiBi
YXNlID0gMDsKKyAgICAgICAgICAgIE5vZGUqIHZhbHVlID0gMDsKICAgICAgICAgICAgIGlmIChw
YXJzZVJlc29sdmVPcGVyYXRpb25zKHByZWRpY3Rpb24sIGlkZW50aWZpZXIsIG9wZXJhdGlvbnMs
IHB1dFRvQmFzZU9wZXJhdGlvbiwgJmJhc2UsICZ2YWx1ZSkpCiAgICAgICAgICAgICAgICAgc2V0
UGFpcihiYXNlRHN0LCBiYXNlLCB2YWx1ZURzdCwgdmFsdWUpOwogICAgICAgICAgICAgZWxzZSB7
CkBAIC0zMTI5LDggKzMwOTgsOCBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVu
c2lnbmVkCiAgICAgICAgICAgICB1bnNpZ25lZCBpZGVudGlmaWVyID0gbV9pbmxpbmVTdGFja1Rv
cC0+bV9pZGVudGlmaWVyUmVtYXBbY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZF07CiAg
ICAgICAgICAgICB1bnNpZ25lZCBvcGVyYXRpb25zID0gbV9pbmxpbmVTdGFja1RvcC0+bV9yZXNv
bHZlT3BlcmF0aW9uUmVtYXBbY3VycmVudEluc3RydWN0aW9uWzRdLnUub3BlcmFuZF07CiAKLSAg
ICAgICAgICAgIE5vZGVJbmRleCBiYXNlID0gMDsKLSAgICAgICAgICAgIE5vZGVJbmRleCB2YWx1
ZSA9IDA7CisgICAgICAgICAgICBOb2RlKiBiYXNlID0gMDsKKyAgICAgICAgICAgIE5vZGUqIHZh
bHVlID0gMDsKICAgICAgICAgICAgIGlmIChwYXJzZVJlc29sdmVPcGVyYXRpb25zKHByZWRpY3Rp
b24sIGlkZW50aWZpZXIsIG9wZXJhdGlvbnMsIDAsICZiYXNlLCAmdmFsdWUpKQogICAgICAgICAg
ICAgICAgIHNldFBhaXIoYmFzZURzdCwgYmFzZSwgdmFsdWVEc3QsIHZhbHVlKTsKICAgICAgICAg
ICAgIGVsc2UgewpAQCAtMzE3MSw3ICszMTQwLDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFy
c2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgCiAgICAgICAgIGNhc2Ugb3BfY3JlYXRlX2Fy
Z3VtZW50czogewogICAgICAgICAgICAgbV9ncmFwaC5tX2hhc0FyZ3VtZW50cyA9IHRydWU7Ci0g
ICAgICAgICAgICBOb2RlSW5kZXggY3JlYXRlQXJndW1lbnRzID0gYWRkVG9HcmFwaChDcmVhdGVB
cmd1bWVudHMsIGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKSk7CisgICAgICAg
ICAgICBOb2RlKiBjcmVhdGVBcmd1bWVudHMgPSBhZGRUb0dyYXBoKENyZWF0ZUFyZ3VtZW50cywg
Z2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpKTsKICAgICAgICAgICAgIHNldChj
dXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCBjcmVhdGVBcmd1bWVudHMpOwogICAgICAg
ICAgICAgc2V0KHVubW9kaWZpZWRBcmd1bWVudHNSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25b
MV0udS5vcGVyYW5kKSwgY3JlYXRlQXJndW1lbnRzKTsKICAgICAgICAgICAgIE5FWFRfT1BDT0RF
KG9wX2NyZWF0ZV9hcmd1bWVudHMpOwpAQCAtMzI1MCw5ICszMjE5LDYgQEAgdm9pZCBCeXRlQ29k
ZVBhcnNlcjo6cHJvY2Vzc1BoaVN0YWNrKCkKICAgICAgICAgaWYgKCFlbnRyeS5tX2Jsb2NrLT5p
c1JlYWNoYWJsZSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAKLSAgICAgICAgaWYg
KCFlbnRyeS5tX2Jsb2NrLT5pc1JlYWNoYWJsZSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAg
ICAgICAKICAgICAgICAgUHJlZGVjZXNzb3JMaXN0JiBwcmVkZWNlc3NvcnMgPSBlbnRyeS5tX2Js
b2NrLT5tX3ByZWRlY2Vzc29yczsKICAgICAgICAgdW5zaWduZWQgdmFyTm8gPSBlbnRyeS5tX3Zh
ck5vOwogICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIGRhdGFGb3JQaGkgPSBtX2dyYXBoW2Vu
dHJ5Lm1fcGhpXS52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKQEAgLTMyNjgsMTAgKzMyMzQsMTAgQEAg
dm9pZCBCeXRlQ29kZVBhcnNlcjo6cHJvY2Vzc1BoaVN0YWNrKCkKICAgICAgICAgICAgIAogICAg
ICAgICAgICAgQmFzaWNCbG9jayogcHJlZGVjZXNzb3JCbG9jayA9IG1fZ3JhcGgubV9ibG9ja3Nb
cHJlZGVjZXNzb3JzW2ldXS5nZXQoKTsKIAotICAgICAgICAgICAgTm9kZUluZGV4JiB2YXIgPSAo
c3RhY2tUeXBlID09IEFyZ3VtZW50UGhpU3RhY2spID8gcHJlZGVjZXNzb3JCbG9jay0+dmFyaWFi
bGVzQXRUYWlsLmFyZ3VtZW50KHZhck5vKSA6IHByZWRlY2Vzc29yQmxvY2stPnZhcmlhYmxlc0F0
VGFpbC5sb2NhbCh2YXJObyk7CisgICAgICAgICAgICBOb2RlKiYgdmFyID0gKHN0YWNrVHlwZSA9
PSBBcmd1bWVudFBoaVN0YWNrKSA/IHByZWRlY2Vzc29yQmxvY2stPnZhcmlhYmxlc0F0VGFpbC5h
cmd1bWVudCh2YXJObykgOiBwcmVkZWNlc3NvckJsb2NrLT52YXJpYWJsZXNBdFRhaWwubG9jYWwo
dmFyTm8pOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBOb2RlSW5kZXggdmFsdWVJblByZWRl
Y2Vzc29yID0gdmFyOwotICAgICAgICAgICAgaWYgKHZhbHVlSW5QcmVkZWNlc3NvciA9PSBOb05v
ZGUpIHsKKyAgICAgICAgICAgIE5vZGUqIHZhbHVlSW5QcmVkZWNlc3NvciA9IHZhcjsKKyAgICAg
ICAgICAgIGlmICghdmFsdWVJblByZWRlY2Vzc29yKSB7CiAjaWYgREZHX0VOQUJMRShERUJVR19Q
Uk9QQUdBVElPTl9WRVJCT1NFKQogICAgICAgICAgICAgICAgIGRhdGFMb2dGKCIgICAgICBEaWQg
bm90IGZpbmQgbm9kZSwgYWRkaW5nIHBoaS5cbiIpOwogI2VuZGlmCkBAIC0zMjgzLDM2ICszMjQ5
LDM2IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnByb2Nlc3NQaGlTdGFjaygpCiAgICAgICAgICAg
ICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICBwcmVkZWNlc3NvckJsb2NrLT52YXJpYWJs
ZXNBdEhlYWQuc2V0TG9jYWxGaXJzdFRpbWUodmFyTm8sIHZhbHVlSW5QcmVkZWNlc3Nvcik7CiAg
ICAgICAgICAgICAgICAgcGhpU3RhY2suYXBwZW5kKFBoaVN0YWNrRW50cnkocHJlZGVjZXNzb3JC
bG9jaywgdmFsdWVJblByZWRlY2Vzc29yLCB2YXJObykpOwotICAgICAgICAgICAgfSBlbHNlIGlm
IChtX2dyYXBoW3ZhbHVlSW5QcmVkZWNlc3Nvcl0ub3AoKSA9PSBHZXRMb2NhbCkgeworICAgICAg
ICAgICAgfSBlbHNlIGlmICh2YWx1ZUluUHJlZGVjZXNzb3ItPm9wKCkgPT0gR2V0TG9jYWwpIHsK
ICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCi0gICAgICAgICAgICAg
ICAgZGF0YUxvZ0YoIiAgICAgIEZvdW5kIEdldExvY2FsIEAldS5cbiIsIHZhbHVlSW5QcmVkZWNl
c3Nvcik7CisgICAgICAgICAgICAgICAgZGF0YUxvZ0YoIiAgICAgIEZvdW5kIEdldExvY2FsIEAl
dS5cbiIsIHZhbHVlSW5QcmVkZWNlc3Nvci0+aW5kZXgoKSk7CiAjZW5kaWYKIAogICAgICAgICAg
ICAgICAgIC8vIFdlIHdhbnQgdG8gZW5zdXJlIHRoYXQgdGhlIFZhcmlhYmxlQWNjZXNzRGF0YXMg
YXJlIGlkZW50aWNhbCBiZXR3ZWVuIHRoZQogICAgICAgICAgICAgICAgIC8vIEdldExvY2FsIGFu
ZCBpdHMgYmxvY2stbG9jYWwgUGhpLiBTdHJpY3RseSBzcGVha2luZyB3ZSBvbmx5IG5lZWQgdGhl
IHR3bwogICAgICAgICAgICAgICAgIC8vIHRvIGJlIHVuaWZpZWQuIEJ1dCBmb3IgZWZmaWNpZW5j
eSwgd2Ugd2FudCB0aGUgY29kZSB0aGF0IGNyZWF0ZXMgR2V0TG9jYWxzCiAgICAgICAgICAgICAg
ICAgLy8gYW5kIFBoaXMgdG8gdHJ5IHRvIHJldXNlIFZhcmlhYmxlQWNjZXNzRGF0YXMgYXMgbXVj
aCBhcyBwb3NzaWJsZS4KLSAgICAgICAgICAgICAgICBBU1NFUlQobV9ncmFwaFt2YWx1ZUluUHJl
ZGVjZXNzb3JdLnZhcmlhYmxlQWNjZXNzRGF0YSgpID09IG1fZ3JhcGhbbV9ncmFwaFt2YWx1ZUlu
UHJlZGVjZXNzb3JdLmNoaWxkMSgpLmluZGV4KCldLnZhcmlhYmxlQWNjZXNzRGF0YSgpKTsKKyAg
ICAgICAgICAgICAgICBBU1NFUlQodmFsdWVJblByZWRlY2Vzc29yLT52YXJpYWJsZUFjY2Vzc0Rh
dGEoKSA9PSB2YWx1ZUluUHJlZGVjZXNzb3ItPmNoaWxkMSgpLT52YXJpYWJsZUFjY2Vzc0RhdGEo
KSk7CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgdmFsdWVJblByZWRlY2Vzc29y
ID0gbV9ncmFwaFt2YWx1ZUluUHJlZGVjZXNzb3JdLmNoaWxkMSgpLmluZGV4KCk7CisgICAgICAg
ICAgICAgICAgdmFsdWVJblByZWRlY2Vzc29yID0gdmFsdWVJblByZWRlY2Vzc29yLT5jaGlsZDEo
KS5ub2RlKCk7CiAgICAgICAgICAgICB9IGVsc2UgewogI2lmIERGR19FTkFCTEUoREVCVUdfUFJP
UEFHQVRJT05fVkVSQk9TRSkKLSAgICAgICAgICAgICAgICBkYXRhTG9nRigiICAgICAgRm91bmQg
QCV1LlxuIiwgdmFsdWVJblByZWRlY2Vzc29yKTsKKyAgICAgICAgICAgICAgICBkYXRhTG9nRigi
ICAgICAgRm91bmQgQCV1LlxuIiwgdmFsdWVJblByZWRlY2Vzc29yLT5pbmRleCgpKTsKICNlbmRp
ZgogICAgICAgICAgICAgfQotICAgICAgICAgICAgQVNTRVJUKG1fZ3JhcGhbdmFsdWVJblByZWRl
Y2Vzc29yXS5vcCgpID09IFNldExvY2FsCi0gICAgICAgICAgICAgICAgICAgfHwgbV9ncmFwaFt2
YWx1ZUluUHJlZGVjZXNzb3JdLm9wKCkgPT0gUGhpCi0gICAgICAgICAgICAgICAgICAgfHwgbV9n
cmFwaFt2YWx1ZUluUHJlZGVjZXNzb3JdLm9wKCkgPT0gRmx1c2gKLSAgICAgICAgICAgICAgICAg
ICB8fCAobV9ncmFwaFt2YWx1ZUluUHJlZGVjZXNzb3JdLm9wKCkgPT0gU2V0QXJndW1lbnQKKyAg
ICAgICAgICAgIEFTU0VSVCh2YWx1ZUluUHJlZGVjZXNzb3ItPm9wKCkgPT0gU2V0TG9jYWwKKyAg
ICAgICAgICAgICAgICAgICB8fCB2YWx1ZUluUHJlZGVjZXNzb3ItPm9wKCkgPT0gUGhpCisgICAg
ICAgICAgICAgICAgICAgfHwgdmFsdWVJblByZWRlY2Vzc29yLT5vcCgpID09IEZsdXNoCisgICAg
ICAgICAgICAgICAgICAgfHwgKHZhbHVlSW5QcmVkZWNlc3Nvci0+b3AoKSA9PSBTZXRBcmd1bWVu
dAogICAgICAgICAgICAgICAgICAgICAgICAmJiBzdGFja1R5cGUgPT0gQXJndW1lbnRQaGlTdGFj
aykpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIGRhdGFG
b3JQcmVkZWNlc3NvciA9IG1fZ3JhcGhbdmFsdWVJblByZWRlY2Vzc29yXS52YXJpYWJsZUFjY2Vz
c0RhdGEoKTsKKyAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogZGF0YUZvclByZWRlY2Vz
c29yID0gdmFsdWVJblByZWRlY2Vzc29yLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKICAgICAgICAg
ICAgIAogICAgICAgICAgICAgZGF0YUZvclByZWRlY2Vzc29yLT51bmlmeShkYXRhRm9yUGhpKTsK
IAotICAgICAgICAgICAgTm9kZSogcGhpTm9kZSA9ICZtX2dyYXBoW2VudHJ5Lm1fcGhpXTsKKyAg
ICAgICAgICAgIE5vZGUqIHBoaU5vZGUgPSBlbnRyeS5tX3BoaTsKICNpZiBERkdfRU5BQkxFKERF
QlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCi0gICAgICAgICAgICBkYXRhTG9nRigiICAgICAgUmVm
IGNvdW50IG9mIEAldSA9ICV1LlxuIiwgZW50cnkubV9waGksIHBoaU5vZGUtPnJlZkNvdW50KCkp
OworICAgICAgICAgICAgZGF0YUxvZ0YoIiAgICAgIFJlZiBjb3VudCBvZiBAJXUgPSAldS5cbiIs
IHBoaU5vZGUtPmluZGV4KCksIHBoaU5vZGUtPnJlZkNvdW50KCkpOwogI2VuZGlmCiAgICAgICAg
ICAgICBpZiAocGhpTm9kZS0+cmVmQ291bnQoKSkgewogI2lmIERGR19FTkFCTEUoREVCVUdfUFJP
UEFHQVRJT05fVkVSQk9TRSkKQEAgLTMzMjMsMTEgKzMyODksMTEgQEAgdm9pZCBCeXRlQ29kZVBh
cnNlcjo6cHJvY2Vzc1BoaVN0YWNrKCkKIAogICAgICAgICAgICAgaWYgKCFwaGlOb2RlLT5jaGls
ZDEoKSkgewogI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKLSAgICAg
ICAgICAgICAgICBkYXRhTG9nRigiICAgICAgU2V0dGluZyBAJXUtPmNoaWxkMSA9IEAldS5cbiIs
IGVudHJ5Lm1fcGhpLCB2YWx1ZUluUHJlZGVjZXNzb3IpOworICAgICAgICAgICAgICAgIGRhdGFM
b2dGKCIgICAgICBTZXR0aW5nIEAldS0+Y2hpbGQxID0gQCV1LlxuIiwgcGhpTm9kZS0+aW5kZXgo
KSwgdmFsdWVJblByZWRlY2Vzc29yKTsKICNlbmRpZgogICAgICAgICAgICAgICAgIHBoaU5vZGUt
PmNoaWxkcmVuLnNldENoaWxkMShFZGdlKHZhbHVlSW5QcmVkZWNlc3NvcikpOwogI2lmIERGR19F
TkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKLSAgICAgICAgICAgICAgICBkYXRhTG9n
RigiICAgICAgQ2hpbGRyZW4gb2YgQCV1OiAiLCBlbnRyeS5tX3BoaSk7CisgICAgICAgICAgICAg
ICAgZGF0YUxvZ0YoIiAgICAgIENoaWxkcmVuIG9mIEAldTogIiwgcGhpTm9kZS0+aW5kZXgoKSk7
CiAgICAgICAgICAgICAgICAgcGhpTm9kZS0+ZHVtcENoaWxkcmVuKFdURjo6ZGF0YUZpbGUoKSk7
CiAgICAgICAgICAgICAgICAgZGF0YUxvZ0YoIi5cbiIpOwogI2VuZGlmCkBAIC0zMzM1LDExICsz
MzAxLDExIEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnByb2Nlc3NQaGlTdGFjaygpCiAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICBpZiAoIXBoaU5vZGUtPmNoaWxkMigpKSB7CiAjaWYgREZHX0VO
QUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQotICAgICAgICAgICAgICAgIGRhdGFMb2dG
KCIgICAgICBTZXR0aW5nIEAldS0+Y2hpbGQyID0gQCV1LlxuIiwgZW50cnkubV9waGksIHZhbHVl
SW5QcmVkZWNlc3Nvcik7CisgICAgICAgICAgICAgICAgZGF0YUxvZ0YoIiAgICAgIFNldHRpbmcg
QCV1LT5jaGlsZDIgPSBAJXUuXG4iLCBwaGlOb2RlLT5pbmRleCgpLCB2YWx1ZUluUHJlZGVjZXNz
b3IpOwogI2VuZGlmCiAgICAgICAgICAgICAgICAgcGhpTm9kZS0+Y2hpbGRyZW4uc2V0Q2hpbGQy
KEVkZ2UodmFsdWVJblByZWRlY2Vzc29yKSk7CiAjaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdB
VElPTl9WRVJCT1NFKQotICAgICAgICAgICAgICAgIGRhdGFMb2dGKCIgICAgICBDaGlsZHJlbiBv
ZiBAJXU6ICIsIGVudHJ5Lm1fcGhpKTsKKyAgICAgICAgICAgICAgICBkYXRhTG9nRigiICAgICAg
Q2hpbGRyZW4gb2YgQCV1OiAiLCBwaGlOb2RlLT5pbmRleCgpKTsKICAgICAgICAgICAgICAgICBw
aGlOb2RlLT5kdW1wQ2hpbGRyZW4oV1RGOjpkYXRhRmlsZSgpKTsKICAgICAgICAgICAgICAgICBk
YXRhTG9nRigiLlxuIik7CiAjZW5kaWYKQEAgLTMzNDcsNDAgKzMzMTMsMzggQEAgdm9pZCBCeXRl
Q29kZVBhcnNlcjo6cHJvY2Vzc1BoaVN0YWNrKCkKICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IGlmICghcGhpTm9kZS0+Y2hpbGQzKCkpIHsKICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FU
SU9OX1ZFUkJPU0UpCi0gICAgICAgICAgICAgICAgZGF0YUxvZ0YoIiAgICAgIFNldHRpbmcgQCV1
LT5jaGlsZDMgPSBAJXUuXG4iLCBlbnRyeS5tX3BoaSwgdmFsdWVJblByZWRlY2Vzc29yKTsKKyAg
ICAgICAgICAgICAgICBkYXRhTG9nRigiICAgICAgU2V0dGluZyBAJXUtPmNoaWxkMyA9IEAldS5c
biIsIHBoaU5vZGUtPmluZGV4KCksIHZhbHVlSW5QcmVkZWNlc3Nvcik7CiAjZW5kaWYKICAgICAg
ICAgICAgICAgICBwaGlOb2RlLT5jaGlsZHJlbi5zZXRDaGlsZDMoRWRnZSh2YWx1ZUluUHJlZGVj
ZXNzb3IpKTsKICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCi0gICAg
ICAgICAgICAgICAgZGF0YUxvZ0YoIiAgICAgIENoaWxkcmVuIG9mIEAldTogIiwgZW50cnkubV9w
aGkpOworICAgICAgICAgICAgICAgIGRhdGFMb2dGKCIgICAgICBDaGlsZHJlbiBvZiBAJXU6ICIs
IHBoaU5vZGUtPmluZGV4KCkpOwogICAgICAgICAgICAgICAgIHBoaU5vZGUtPmR1bXBDaGlsZHJl
bihXVEY6OmRhdGFGaWxlKCkpOwogICAgICAgICAgICAgICAgIGRhdGFMb2dGKCIuXG4iKTsKICNl
bmRpZgogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQogICAgICAgICAg
ICAgCi0gICAgICAgICAgICBOb2RlSW5kZXggbmV3UGhpID0gaW5zZXJ0UGhpTm9kZShPcEluZm8o
ZGF0YUZvclBoaSksIGVudHJ5Lm1fYmxvY2spOworICAgICAgICAgICAgTm9kZSogbmV3UGhpID0g
aW5zZXJ0UGhpTm9kZShPcEluZm8oZGF0YUZvclBoaSksIGVudHJ5Lm1fYmxvY2spOwogICAgICAg
ICAgICAgCiAjaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQotICAgICAg
ICAgICAgZGF0YUxvZ0YoIiAgICAgIFNwbGl0dGluZyBAJXUsIGNyZWF0ZWQgQCV1LlxuIiwgZW50
cnkubV9waGksIG5ld1BoaSk7CisgICAgICAgICAgICBkYXRhTG9nRigiICAgICAgU3BsaXR0aW5n
IEAldSwgY3JlYXRlZCBAJXUuXG4iLCBwaGlOb2RlLT5pbmRleCgpLCBuZXdQaGktPmluZGV4KCkp
OwogI2VuZGlmCiAKLSAgICAgICAgICAgIHBoaU5vZGUgPSAmbV9ncmFwaFtlbnRyeS5tX3BoaV07
IC8vIHJlbG9hZCBhZnRlciB2ZWN0b3IgcmVzaXplCi0gICAgICAgICAgICBOb2RlJiBuZXdQaGlO
b2RlID0gbV9ncmFwaFtuZXdQaGldOwogICAgICAgICAgICAgaWYgKHBoaU5vZGUtPnJlZkNvdW50
KCkpCiAgICAgICAgICAgICAgICAgbV9ncmFwaC5yZWYobmV3UGhpKTsKIAotICAgICAgICAgICAg
bmV3UGhpTm9kZS5jaGlsZHJlbiA9IHBoaU5vZGUtPmNoaWxkcmVuOworICAgICAgICAgICAgbmV3
UGhpLT5jaGlsZHJlbiA9IHBoaU5vZGUtPmNoaWxkcmVuOwogCiAjaWYgREZHX0VOQUJMRShERUJV
R19QUk9QQUdBVElPTl9WRVJCT1NFKQotICAgICAgICAgICAgZGF0YUxvZ0YoIiAgICAgIENoaWxk
cmVuIG9mIEAldTogIiwgbmV3UGhpKTsKLSAgICAgICAgICAgIG5ld1BoaU5vZGUuZHVtcENoaWxk
cmVuKFdURjo6ZGF0YUZpbGUoKSk7CisgICAgICAgICAgICBkYXRhTG9nRigiICAgICAgQ2hpbGRy
ZW4gb2YgQCV1OiAiLCBuZXdQaGktPmluZGV4KCkpOworICAgICAgICAgICAgbmV3UGhpLT5kdW1w
Q2hpbGRyZW4oV1RGOjpkYXRhRmlsZSgpKTsKICAgICAgICAgICAgIGRhdGFMb2dGKCIuXG4iKTsK
ICNlbmRpZgogCi0gICAgICAgICAgICBwaGlOb2RlLT5jaGlsZHJlbi5pbml0aWFsaXplKG5ld1Bo
aSwgdmFsdWVJblByZWRlY2Vzc29yLCBOb05vZGUpOworICAgICAgICAgICAgcGhpTm9kZS0+Y2hp
bGRyZW4uaW5pdGlhbGl6ZShuZXdQaGksIHZhbHVlSW5QcmVkZWNlc3NvciwgMCk7CiAKICNpZiBE
RkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCi0gICAgICAgICAgICBkYXRhTG9n
RigiICAgICAgQ2hpbGRyZW4gb2YgQCV1OiAiLCBlbnRyeS5tX3BoaSk7CisgICAgICAgICAgICBk
YXRhTG9nRigiICAgICAgQ2hpbGRyZW4gb2YgQCV1OiAiLCBwaGlOb2RlLT5pbmRleCgpKTsKICAg
ICAgICAgICAgIHBoaU5vZGUtPmR1bXBDaGlsZHJlbihXVEY6OmRhdGFGaWxlKCkpOwogICAgICAg
ICAgICAgZGF0YUxvZ0YoIi5cbiIpOwogI2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0NGQVBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0NGQVBoYXNlLmNwcAkocmV2aXNpb24gMTQwNjE2KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdDRkFQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTg4LDExICs4OCwx
MSBAQCBwcml2YXRlOgogICAgICAgICBkYXRhTG9nRigiXG4iKTsKICNlbmRpZgogICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYmxvY2stPnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAg
ICBOb2RlSW5kZXggbm9kZUluZGV4ID0gYmxvY2stPmF0KGkpOwotICAgICAgICAgICAgaWYgKCFt
X2dyYXBoW25vZGVJbmRleF0uc2hvdWxkR2VuZXJhdGUoKSkKKyAgICAgICAgICAgIE5vZGUqIG5v
ZGUgPSBibG9jay0+YXQoaSk7CisgICAgICAgICAgICBpZiAoIW5vZGUtPnNob3VsZEdlbmVyYXRl
KCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAjaWYgREZHX0VOQUJMRShERUJVR19QUk9Q
QUdBVElPTl9WRVJCT1NFKQotICAgICAgICAgICAgZGF0YUxvZ0YoIiAgICAgICVzIEAldTogIiwg
R3JhcGg6Om9wTmFtZShtX2dyYXBoW25vZGVJbmRleF0ub3AoKSksIG5vZGVJbmRleCk7CisgICAg
ICAgICAgICBkYXRhTG9nRigiICAgICAgJXMgQCV1OiAiLCBHcmFwaDo6b3BOYW1lKG1fZ3JhcGhb
bm9kZUluZGV4XS5vcCgpKSwgbm9kZS0+aW5kZXgoKSk7CiAgICAgICAgICAgICBtX3N0YXRlLmR1
bXAoV1RGOjpkYXRhRmlsZSgpKTsKICAgICAgICAgICAgIGRhdGFMb2dGKCJcbiIpOwogI2VuZGlm
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NGR1NpbXBsaWZpY2F0aW9uUGhh
c2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ0ZHU2lt
cGxpZmljYXRpb25QaGFzZS5jcHAJKHJldmlzaW9uIDE0MDYxNikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQ0ZHU2ltcGxpZmljYXRpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxMyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTYwLDcgKzYwLDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAg
ICAgICAgICAgICAgICBBU1NFUlQoYmxvY2stPmlzUmVhY2hhYmxlKTsKICAgICAgICAgICAgIAot
ICAgICAgICAgICAgICAgIHN3aXRjaCAobV9ncmFwaFtibG9jay0+bGFzdCgpXS5vcCgpKSB7Cisg
ICAgICAgICAgICAgICAgc3dpdGNoIChibG9jay0+bGFzdCgpLT5vcCgpKSB7CiAgICAgICAgICAg
ICAgICAgY2FzZSBKdW1wOiB7CiAgICAgICAgICAgICAgICAgICAgIC8vIFN1Y2Nlc3NvciB3aXRo
IG9uZSBwcmVkZWNlc3NvciAtPiBtZXJnZS4KICAgICAgICAgICAgICAgICAgICAgaWYgKG1fZ3Jh
cGgubV9ibG9ja3NbbV9ncmFwaC5zdWNjZXNzb3IoYmxvY2ssIDApXS0+bV9wcmVkZWNlc3NvcnMu
c2l6ZSgpID09IDEpIHsKQEAgLTEyOSwxMCArMTI5LDEwIEBAIHB1YmxpYzoKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBCbG9ja0luZGV4IHRha2VuQmxvY2tJbmRleCA9IG1fZ3JhcGguc3Vj
Y2Vzc29yRm9yQ29uZGl0aW9uKGJsb2NrLCBjb25kaXRpb24pOwogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEJsb2NrSW5kZXggbm90VGFrZW5CbG9ja0luZGV4ID0gbV9ncmFwaC5zdWNjZXNz
b3JGb3JDb25kaXRpb24oYmxvY2ssICFjb25kaXRpb24pOwogICAgICAgICAgICAgICAgICAgICAg
ICAgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKG1fZ3JhcGhbYmxvY2stPmxh
c3QoKV0uaXNUZXJtaW5hbCgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb2RlT3Jp
Z2luIGJvdW5kYXJ5Q29kZU9yaWdpbiA9IG1fZ3JhcGhbYmxvY2stPmxhc3QoKV0uY29kZU9yaWdp
bjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoW2Jsb2NrLT5sYXN0KCldLnNl
dE9wQW5kRGVmYXVsdEZsYWdzKFBoYW50b20pOwotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEFTU0VSVChtX2dyYXBoW2Jsb2NrLT5sYXN0KCldLnJlZkNvdW50KCkgPT0gMSk7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGJsb2NrLT5sYXN0KCktPmlzVGVybWluYWwoKSk7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29kZU9yaWdpbiBib3VuZGFyeUNvZGVPcmln
aW4gPSBibG9jay0+bGFzdCgpLT5jb2RlT3JpZ2luOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGJsb2NrLT5sYXN0KCktPnNldE9wQW5kRGVmYXVsdEZsYWdzKFBoYW50b20pOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChibG9jay0+bGFzdCgpLT5yZWZDb3VudCgpID09
IDEpOwogICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgamV0dGlzb25CbG9jayhibG9ja0luZGV4LCBub3RUYWtlbkJsb2NrSW5kZXgsIGJvdW5kYXJ5
Q29kZU9yaWdpbik7CiAgICAgICAgICAgICAgICAgICAgICAgICAKQEAgLTE2MCwxMiArMTYwLDEx
IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nRigiQ0ZHU2lt
cGxpZnk6IEJyYW5jaC0+anVtcCBjb252ZXJzaW9uIHRvIHNhbWUgc3VjY2Vzc29yIG9uIEJsb2Nr
ICMldSB0byBCbG9jayAjJXUuXG4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYmxvY2tJbmRleCwgdGFyZ2V0QmxvY2tJbmRleCk7CiAjZW5kaWYKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBBU1NFUlQobV9ncmFwaFtibG9jay0+bGFzdCgpXS5pc1Rlcm1pbmFsKCkp
OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vZGUmIGJyYW5jaCA9IG1fZ3JhcGhbYmxv
Y2stPmxhc3QoKV07Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGJyYW5jaC5p
c1Rlcm1pbmFsKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChicmFuY2gu
b3AoKSA9PSBCcmFuY2gpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyYW5jaC5zZXRP
cEFuZERlZmF1bHRGbGFncyhQaGFudG9tKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBB
U1NFUlQoYnJhbmNoLnJlZkNvdW50KCkgPT0gMSk7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgTm9kZSogYnJhbmNoID0gYmxvY2stPmxhc3QoKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBBU1NFUlQoYnJhbmNoLT5pc1Rlcm1pbmFsKCkpOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEFTU0VSVChicmFuY2gtPm9wKCkgPT0gQnJhbmNoKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBicmFuY2gtPnNldE9wQW5kRGVmYXVsdEZsYWdzKFBoYW50b20pOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChicmFuY2gtPnJlZkNvdW50KCkgPT0gMSk7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
YmxvY2stPmFwcGVuZE5vZGUoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3Jh
cGgsIERvbnRSZWZDaGlsZHJlbiwgRG9udFJlZk5vZGUsIFNwZWNOb25lLCBKdW1wLApAQCAtMjYw
LDQ1ICsyNTksNDMgQEAgcHJpdmF0ZToKICAgICAKICAgICB2b2lkIGtlZXBPcGVyYW5kQWxpdmUo
QmFzaWNCbG9jayogYmxvY2ssIENvZGVPcmlnaW4gY29kZU9yaWdpbiwgaW50IG9wZXJhbmQpCiAg
ICAgewotICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4ID0gYmxvY2stPnZhcmlhYmxlc0F0VGFp
bC5vcGVyYW5kKG9wZXJhbmQpOwotICAgICAgICBpZiAobm9kZUluZGV4ID09IE5vTm9kZSkKKyAg
ICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZChvcGVyYW5k
KTsKKyAgICAgICAgaWYgKCFub2RlKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBpZiAo
bV9ncmFwaFtub2RlSW5kZXhdLnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5pc0NhcHR1cmVkKCkpCisg
ICAgICAgIGlmIChub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+aXNDYXB0dXJlZCgpKQogICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICBpZiAobV9ncmFwaFtub2RlSW5kZXhdLm9wKCkgPT0g
U2V0TG9jYWwpCi0gICAgICAgICAgICBub2RlSW5kZXggPSBtX2dyYXBoW25vZGVJbmRleF0uY2hp
bGQxKCkuaW5kZXgoKTsKLSAgICAgICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhbbm9kZUluZGV4XTsK
LSAgICAgICAgaWYgKCFub2RlLnNob3VsZEdlbmVyYXRlKCkpCisgICAgICAgIGlmIChub2RlLT5v
cCgpID09IFNldExvY2FsKQorICAgICAgICAgICAgbm9kZSA9IG5vZGUtPmNoaWxkMSgpLm5vZGUo
KTsKKyAgICAgICAgaWYgKCFub2RlLT5zaG91bGRHZW5lcmF0ZSgpKQogICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICBBU1NFUlQobV9ncmFwaFtub2RlSW5kZXhdLm9wKCkgIT0gU2V0TG9jYWwp
OworICAgICAgICBBU1NFUlQobm9kZS0+b3AoKSAhPSBTZXRMb2NhbCk7CiAgICAgICAgIGJsb2Nr
LT5hcHBlbmROb2RlKAotICAgICAgICAgICAgbV9ncmFwaCwgUmVmQ2hpbGRyZW4sIERvbnRSZWZO
b2RlLCBTcGVjTm9uZSwgUGhhbnRvbSwgY29kZU9yaWdpbiwgbm9kZUluZGV4KTsKKyAgICAgICAg
ICAgIG1fZ3JhcGgsIFJlZkNoaWxkcmVuLCBEb250UmVmTm9kZSwgU3BlY05vbmUsIFBoYW50b20s
IGNvZGVPcmlnaW4sIG5vZGUpOwogICAgIH0KICAgICAKICAgICB2b2lkIGZpeFBvc3NpYmxlR2V0
TG9jYWwoQmFzaWNCbG9jayogYmxvY2ssIEVkZ2UmIGVkZ2UsIGJvb2wgY2hhbmdlUmVmKQogICAg
IHsKLSAgICAgICAgTm9kZSYgY2hpbGQgPSBtX2dyYXBoW2VkZ2VdOwotICAgICAgICBpZiAoY2hp
bGQub3AoKSAhPSBHZXRMb2NhbCkKKyAgICAgICAgTm9kZSogY2hpbGQgPSBlZGdlLm5vZGUoKTsK
KyAgICAgICAgaWYgKGNoaWxkLT5vcCgpICE9IEdldExvY2FsKQogICAgICAgICAgICAgcmV0dXJu
OwogI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKLSAgICAgICAgZGF0
YUxvZ0YoIiAgICBDb25zaWRlcmluZyBHZXRMb2NhbCBhdCBAJXUsIGxvY2FsIHIlZC5cbiIsIGVk
Z2UuaW5kZXgoKSwgY2hpbGQubG9jYWwoKSk7CisgICAgICAgIGRhdGFMb2dGKCIgICAgQ29uc2lk
ZXJpbmcgR2V0TG9jYWwgYXQgQCV1LCBsb2NhbCByJWQuXG4iLCBub2RlLT5pbmRleCgpLCBjaGls
ZC0+bG9jYWwoKSk7CiAjZW5kaWYKLSAgICAgICAgaWYgKGNoaWxkLnZhcmlhYmxlQWNjZXNzRGF0
YSgpLT5pc0NhcHR1cmVkKCkpIHsKKyAgICAgICAgaWYgKGNoaWxkLT52YXJpYWJsZUFjY2Vzc0Rh
dGEoKS0+aXNDYXB0dXJlZCgpKSB7CiAjaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9W
RVJCT1NFKQogICAgICAgICAgICAgZGF0YUxvZ0YoIiAgICAgICAgSXQncyBjYXB0dXJlZC5cbiIp
OwogI2VuZGlmCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgTm9kZUlu
ZGV4IG9yaWdpbmFsTm9kZUluZGV4ID0gYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKGNo
aWxkLmxvY2FsKCkpOworICAgICAgICBOb2RlKiBvcmlnaW5hbE5vZGUgPSBibG9jay0+dmFyaWFi
bGVzQXRUYWlsLm9wZXJhbmQoY2hpbGQtPmxvY2FsKCkpOwogI2lmIERGR19FTkFCTEUoREVCVUdf
UFJPUEFHQVRJT05fVkVSQk9TRSkKLSAgICAgICAgZGF0YUxvZ0YoIiAgICAgICAgRGVhbGluZyB3
aXRoIG9yaWdpbmFsIEAldS5cbiIsIG9yaWdpbmFsTm9kZUluZGV4KTsKKyAgICAgICAgZGF0YUxv
Z0YoIiAgICAgICAgRGVhbGluZyB3aXRoIG9yaWdpbmFsIEAldS5cbiIsIG9yaWdpbmFsTm9kZS0+
aW5kZXgoKSk7CiAjZW5kaWYKLSAgICAgICAgQVNTRVJUKG9yaWdpbmFsTm9kZUluZGV4ICE9IE5v
Tm9kZSk7Ci0gICAgICAgIE5vZGUqIG9yaWdpbmFsTm9kZSA9ICZtX2dyYXBoW29yaWdpbmFsTm9k
ZUluZGV4XTsKKyAgICAgICAgQVNTRVJUKG9yaWdpbmFsTm9kZUluZGV4KTsKICNpZiBERkdfRU5B
QkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCiAgICAgICAgIGRhdGFMb2dGKCIgICAgICAg
IE9yaWdpbmFsIGhhcyBsb2NhbCByJWQuXG4iLCBvcmlnaW5hbE5vZGUtPmxvY2FsKCkpOwogI2Vu
ZGlmCi0gICAgICAgIEFTU0VSVChjaGlsZC5sb2NhbCgpID09IG9yaWdpbmFsTm9kZS0+bG9jYWwo
KSk7CisgICAgICAgIEFTU0VSVChjaGlsZC0+bG9jYWwoKSA9PSBvcmlnaW5hbE5vZGUtPmxvY2Fs
KCkpOwogICAgICAgICAvLyBQb3NzaWJpbGl0aWVzOgogICAgICAgICAvLyBTZXRMb2NhbCAtPiB0
aGUgc2Vjb25kQmxvY2sgaXMgZ2V0dGluZyB0aGUgdmFsdWUgb2Ygc29tZXRoaW5nIHRoYXQgaXMg
aW1tZWRpYXRlbHkKICAgICAgICAgLy8gICAgIGF2YWlsYWJsZSBpbiB0aGUgZmlyc3QgYmxvY2sg
d2l0aCBhIGtub3duIE5vZGVJbmRleC4KQEAgLTMxMiwxMCArMzA5LDggQEAgcHJpdmF0ZToKICAg
ICAgICAgLy8gRmx1c2ggLT4gdGhlIHNlY29uZEJsb2NrIGlzIGFza2luZyBmb3Iga2VlcC1hbGl2
ZSBvbiBhbiBvcGVyYW5kIHRoYXQgdGhlIGZpcnN0CiAgICAgICAgIC8vICAgICBibG9jayB3YXMg
Zm9yY2luZyB0byBiZSBhbGl2ZSwgc28gdGhlIHNlY29uZCBibG9jayBzaG91bGQgcmVmZXIgY2hp
bGQgb2YKICAgICAgICAgLy8gICAgIHRoZSBmbHVzaC4KLSAgICAgICAgaWYgKG9yaWdpbmFsTm9k
ZS0+b3AoKSA9PSBGbHVzaCkgewotICAgICAgICAgICAgb3JpZ2luYWxOb2RlSW5kZXggPSBvcmln
aW5hbE5vZGUtPmNoaWxkMSgpLmluZGV4KCk7Ci0gICAgICAgICAgICBvcmlnaW5hbE5vZGUgPSAm
bV9ncmFwaFtvcmlnaW5hbE5vZGVJbmRleF07Ci0gICAgICAgIH0KKyAgICAgICAgaWYgKG9yaWdp
bmFsTm9kZS0+b3AoKSA9PSBGbHVzaCkKKyAgICAgICAgICAgIG9yaWdpbmFsTm9kZSA9IG9yaWdp
bmFsTm9kZS0+Y2hpbGQxKCkubm9kZSgpOwogICAgICAgICBzd2l0Y2ggKG9yaWdpbmFsTm9kZS0+
b3AoKSkgewogICAgICAgICBjYXNlIFNldExvY2FsOiB7CiAgICAgICAgICAgICBpZiAoY2hhbmdl
UmVmKQpAQCAtMzIzLDcgKzMxOCw3IEBAIHByaXZhdGU6CiAjaWYgREZHX0VOQUJMRShERUJVR19Q
Uk9QQUdBVElPTl9WRVJCT1NFKQogICAgICAgICAgICAgZGF0YUxvZ0YoIiAgICAgICAgSXQncyBh
IFNldExvY2FsLlxuIik7CiAjZW5kaWYKLSAgICAgICAgICAgIG1fZ3JhcGguY2hhbmdlSW5kZXgo
ZWRnZSwgb3JpZ2luYWxOb2RlLT5jaGlsZDEoKS5pbmRleCgpLCBjaGFuZ2VSZWYpOworICAgICAg
ICAgICAgbV9ncmFwaC5jaGFuZ2VDaGlsZChlZGdlLCBvcmlnaW5hbE5vZGUtPmNoaWxkMSgpLm5v
ZGUoKSwgY2hhbmdlUmVmKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAg
IGNhc2UgR2V0TG9jYWw6IHsKQEAgLTMzMSw3ICszMjYsNyBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgZGF0YUxvZ0YoIiAgICAgICAgSXQncyBhIEdldExvY2FsLlxuIik7CiAjZW5kaWYKICAgICAg
ICAgICAgIGlmIChvcmlnaW5hbE5vZGUtPnNob3VsZEdlbmVyYXRlKCkpCi0gICAgICAgICAgICAg
ICAgbV9ncmFwaC5jaGFuZ2VJbmRleChlZGdlLCBvcmlnaW5hbE5vZGVJbmRleCwgY2hhbmdlUmVm
KTsKKyAgICAgICAgICAgICAgICBtX2dyYXBoLmNoYW5nZUNoaWxkKGVkZ2UsIG9yaWdpbmFsTm9k
ZSwgY2hhbmdlUmVmKTsKICAgICAgICAgICAgIC8vIElmIHdlIGhhdmUgYSBHZXRMb2NhbCB0aGF0
IHBvaW50cyB0byBhIGNoaWxkIEdldExvY2FsIHRoYXQgaXMgZGVhZCwgdGhlbgogICAgICAgICAg
ICAgLy8gd2UgaGF2ZSBubyBuZWVkIHRvIGRvIGFueXRoaW5nOiB0aGlzIG9yaWdpbmFsIEdldExv
Y2FsIGlzIHN0aWxsIHZhbGlkLgogICAgICAgICAgICAgYnJlYWs7CkBAIC0zNzUsMjMgKzM3MCwy
MSBAQCBwcml2YXRlOgogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgZGVzdGluYXRpb25CbG9jay0+cGhpcy5zaXplKCk7ICsraSkg
ewotICAgICAgICAgICAgTm9kZUluZGV4IHBoaU5vZGVJbmRleCA9IGRlc3RpbmF0aW9uQmxvY2st
PnBoaXNbaV07Ci0gICAgICAgICAgICBOb2RlJiBwaGlOb2RlID0gbV9ncmFwaFtwaGlOb2RlSW5k
ZXhdOwotICAgICAgICAgICAgTm9kZUluZGV4IG15Tm9kZUluZGV4ID0gc291cmNlQmxvY2stPnZh
cmlhYmxlc0F0VGFpbC5vcGVyYW5kKHBoaU5vZGUubG9jYWwoKSk7Ci0jaWYgREZHX0VOQUJMRShE
RUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQotICAgICAgICAgICAgZGF0YUxvZ0YoIkNvbnNpZGVy
aW5nIHJlbW92aW5nIHJlZmVyZW5jZSBmcm9tIHBoaSBAJXUgdG8gQCV1IG9uIGxvY2FsIHIlZDoi
LAotICAgICAgICAgICAgICAgICAgICBwaGlOb2RlSW5kZXgsIG15Tm9kZUluZGV4LCBwaGlOb2Rl
LmxvY2FsKCkpOwotI2VuZGlmCi0gICAgICAgICAgICBpZiAobXlOb2RlSW5kZXggPT0gTm9Ob2Rl
KSB7CisgICAgICAgICAgICBOb2RlKiBwaGlOb2RlID0gZGVzdGluYXRpb25CbG9jay0+cGhpc1tp
XTsKKyAgICAgICAgICAgIE5vZGUqIG15Tm9kZSA9IHNvdXJjZUJsb2NrLT52YXJpYWJsZXNBdFRh
aWwub3BlcmFuZChwaGlOb2RlLT5sb2NhbCgpKTsKKyAgICAgICAgICAgIGlmICghbXlOb2RlKSB7
CiAgICAgICAgICAgICAgICAgLy8gVGhpcyB3aWxsIGhhcHBlbiBpZiB0aGVyZSBpcyBhIHBoaSBp
biB0aGUgZGVzdGluYXRpb24gdGhhdCByZWZlcnMgaW50bwogICAgICAgICAgICAgICAgIC8vIHRo
ZSBkZXN0aW5hdGlvbiBpdHNlbGYuCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICBOb2RlJiBteU5vZGUgPSBtX2dyYXBoW215Tm9kZUluZGV4XTsK
LSAgICAgICAgICAgIGlmIChteU5vZGUub3AoKSA9PSBHZXRMb2NhbCkKLSAgICAgICAgICAgICAg
ICBteU5vZGVJbmRleCA9IG15Tm9kZS5jaGlsZDEoKS5pbmRleCgpOworI2lmIERGR19FTkFCTEUo
REVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKKyAgICAgICAgICAgIGRhdGFMb2dGKCJDb25zaWRl
cmluZyByZW1vdmluZyByZWZlcmVuY2UgZnJvbSBwaGkgQCV1IHRvIEAldSBvbiBsb2NhbCByJWQ6
IiwKKyAgICAgICAgICAgICAgICAgICAgIHBoaU5vZGUtPmluZGV4KCksIG15Tm9kZS0+aW5kZXgo
KSwgcGhpTm9kZS0+bG9jYWwoKSk7CisjZW5kaWYKKyAgICAgICAgICAgIGlmIChteU5vZGUtPm9w
KCkgPT0gR2V0TG9jYWwpCisgICAgICAgICAgICAgICAgbXlOb2RlID0gbXlOb2RlLT5jaGlsZDEo
KS5ub2RlKCk7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSAwOyBqIDwgQWRqYWNlbmN5
TGlzdDo6U2l6ZTsgKytqKQotICAgICAgICAgICAgICAgIHJlbW92ZVBvdGVudGlhbGx5RGVhZFBo
aVJlZmVyZW5jZShteU5vZGVJbmRleCwgcGhpTm9kZSwgaiwgc291cmNlQmxvY2stPmlzUmVhY2hh
YmxlKTsKKyAgICAgICAgICAgICAgICByZW1vdmVQb3RlbnRpYWxseURlYWRQaGlSZWZlcmVuY2Uo
bXlOb2RlLCBwaGlOb2RlLCBqLCBzb3VyY2VCbG9jay0+aXNSZWFjaGFibGUpOwogI2lmIERGR19F
TkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKICAgICAgICAgICAgIGRhdGFMb2dGKCJc
biIpOwogI2VuZGlmCkBAIC00MTYsNTggKzQwOSw1NyBAQCBwcml2YXRlOgogICAgICAgICBmaXhQ
aGlzKGJsb2NrSW5kZXgsIGpldHRpc29uZWRCbG9ja0luZGV4KTsKICAgICB9CiAgICAgCi0gICAg
dm9pZCByZW1vdmVQb3RlbnRpYWxseURlYWRQaGlSZWZlcmVuY2UoTm9kZUluZGV4IG15Tm9kZUlu
ZGV4LCBOb2RlJiBwaGlOb2RlLCB1bnNpZ25lZCBlZGdlSW5kZXgsIGJvb2wgY2hhbmdlUmVmKQor
ICAgIHZvaWQgcmVtb3ZlUG90ZW50aWFsbHlEZWFkUGhpUmVmZXJlbmNlKE5vZGUqIG15Tm9kZSwg
Tm9kZSogcGhpTm9kZSwgdW5zaWduZWQgZWRnZUluZGV4LCBib29sIGNoYW5nZVJlZikKICAgICB7
Ci0gICAgICAgIGlmIChwaGlOb2RlLmNoaWxkcmVuLmNoaWxkKGVkZ2VJbmRleCkuaW5kZXhVbmNo
ZWNrZWQoKSAhPSBteU5vZGVJbmRleCkKKyAgICAgICAgaWYgKHBoaU5vZGUtPmNoaWxkcmVuLmNo
aWxkKGVkZ2VJbmRleCkubm9kZSgpICE9IG15Tm9kZSkKICAgICAgICAgICAgIHJldHVybjsKICNp
ZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCiAgICAgICAgIGRhdGFMb2dG
KCIgUmVtb3ZpbmcgcmVmZXJlbmNlIGF0IGNoaWxkICV1LiIsIGVkZ2VJbmRleCk7CiAjZW5kaWYK
LSAgICAgICAgaWYgKGNoYW5nZVJlZiAmJiBwaGlOb2RlLnNob3VsZEdlbmVyYXRlKCkpCi0gICAg
ICAgICAgICBtX2dyYXBoLmRlcmVmKG15Tm9kZUluZGV4KTsKLSAgICAgICAgcGhpTm9kZS5jaGls
ZHJlbi5yZW1vdmVFZGdlRnJvbUJhZyhlZGdlSW5kZXgpOworICAgICAgICBpZiAoY2hhbmdlUmVm
ICYmIHBoaU5vZGUtPnNob3VsZEdlbmVyYXRlKCkpCisgICAgICAgICAgICBtX2dyYXBoLmRlcmVm
KG15Tm9kZSk7CisgICAgICAgIHBoaU5vZGUtPmNoaWxkcmVuLnJlbW92ZUVkZ2VGcm9tQmFnKGVk
Z2VJbmRleCk7CiAgICAgfQogICAgIAogICAgIHN0cnVjdCBPcGVyYW5kU3Vic3RpdHV0aW9uIHsK
ICAgICAgICAgT3BlcmFuZFN1YnN0aXR1dGlvbigpCi0gICAgICAgICAgICA6IG9sZENoaWxkKE5v
Tm9kZSkKLSAgICAgICAgICAgICwgbmV3Q2hpbGQoTm9Ob2RlKQorICAgICAgICAgICAgOiBvbGRD
aGlsZCgwKQorICAgICAgICAgICAgLCBuZXdDaGlsZCgwKQogICAgICAgICB7CiAgICAgICAgIH0K
ICAgICAgICAgCi0gICAgICAgIGV4cGxpY2l0IE9wZXJhbmRTdWJzdGl0dXRpb24oTm9kZUluZGV4
IG9sZENoaWxkKQorICAgICAgICBleHBsaWNpdCBPcGVyYW5kU3Vic3RpdHV0aW9uKE5vZGUqIG9s
ZENoaWxkKQogICAgICAgICAgICAgOiBvbGRDaGlsZChvbGRDaGlsZCkKICAgICAgICAgICAgICwg
bmV3Q2hpbGQob2xkQ2hpbGQpCiAgICAgICAgIHsKICAgICAgICAgfQogICAgICAgICAKLSAgICAg
ICAgT3BlcmFuZFN1YnN0aXR1dGlvbihOb2RlSW5kZXggb2xkQ2hpbGQsIE5vZGVJbmRleCBuZXdD
aGlsZCkKKyAgICAgICAgT3BlcmFuZFN1YnN0aXR1dGlvbihOb2RlKiBvbGRDaGlsZCwgTm9kZSog
bmV3Q2hpbGQpCiAgICAgICAgICAgICA6IG9sZENoaWxkKG9sZENoaWxkKQogICAgICAgICAgICAg
LCBuZXdDaGlsZChuZXdDaGlsZCkKICAgICAgICAgewotICAgICAgICAgICAgQVNTRVJUKChvbGRD
aGlsZCA9PSBOb05vZGUpID09IChuZXdDaGlsZCA9PSBOb05vZGUpKTsKKyAgICAgICAgICAgIEFT
U0VSVCgoIW9sZENoaWxkKSA9PSAoIW5ld0NoaWxkKSk7CiAgICAgICAgIH0KICAgICAgICAgCi0g
ICAgICAgIHZvaWQgZHVtcChGSUxFKiBvdXQpCisgICAgICAgIHZvaWQgZHVtcChQcmludFN0cmVh
bSYgb3V0KSBjb25zdAogICAgICAgICB7Ci0gICAgICAgICAgICBpZiAob2xkQ2hpbGQgPT0gTm9O
b2RlKQotICAgICAgICAgICAgICAgIGZwcmludGYob3V0LCAiLSIpOworICAgICAgICAgICAgaWYg
KCFvbGRDaGlsZCkKKyAgICAgICAgICAgICAgICBvdXQucHJpbnRmKG91dCwgIi0iKTsKICAgICAg
ICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBmcHJpbnRmKG91dCwgIkAldSAtPiBAJXUiLCBv
bGRDaGlsZCwgbmV3Q2hpbGQpOworICAgICAgICAgICAgICAgIG91dC5wcmludGYob3V0LCAiQCV1
IC0+IEAldSIsIG9sZENoaWxkLT5pbmRleCgpLCBuZXdDaGlsZC0+aW5kZXgoKSk7CiAgICAgICAg
IH0KICAgICAgICAgCi0gICAgICAgIE5vZGVJbmRleCBvbGRDaGlsZDsKLSAgICAgICAgTm9kZUlu
ZGV4IG5ld0NoaWxkOworICAgICAgICBOb2RlKiBvbGRDaGlsZDsKKyAgICAgICAgTm9kZSogbmV3
Q2hpbGQ7CiAgICAgfTsKICAgICAKLSAgICBOb2RlSW5kZXggc2tpcEdldExvY2FsKE5vZGVJbmRl
eCBub2RlSW5kZXgpCisgICAgTm9kZSogc2tpcEdldExvY2FsKE5vZGUqIG5vZGUpCiAgICAgewot
ICAgICAgICBpZiAobm9kZUluZGV4ID09IE5vTm9kZSkKLSAgICAgICAgICAgIHJldHVybiBOb05v
ZGU7Ci0gICAgICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW25vZGVJbmRleF07Ci0gICAgICAgIGlm
IChub2RlLm9wKCkgPT0gR2V0TG9jYWwpCi0gICAgICAgICAgICByZXR1cm4gbm9kZS5jaGlsZDEo
KS5pbmRleCgpOwotICAgICAgICByZXR1cm4gbm9kZUluZGV4OworICAgICAgICBpZiAoIW5vZGUp
CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gR2V0TG9j
YWwpCisgICAgICAgICAgICByZXR1cm4gbm9kZS0+Y2hpbGQxKCkubm9kZSgpOworICAgICAgICBy
ZXR1cm4gbm9kZTsKICAgICB9CiAgICAgCiAgICAgdm9pZCByZWNvcmRQb3NzaWJsZUluY29taW5n
UmVmZXJlbmNlKApAQCAtNDc3LDMwICs0NjksMjggQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHNr
aXBHZXRMb2NhbChzZWNvbmRCbG9jay0+dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQob3BlcmFuZCkp
KTsKICAgICB9CiAgICAgCi0gICAgdm9pZCByZWNvcmROZXdUYXJnZXQoT3BlcmFuZHM8T3BlcmFu
ZFN1YnN0aXR1dGlvbj4mIHN1YnN0aXR1dGlvbnMsIGludCBvcGVyYW5kLCBOb2RlSW5kZXggbm9k
ZUluZGV4KQorICAgIHZvaWQgcmVjb3JkTmV3VGFyZ2V0KE9wZXJhbmRzPE9wZXJhbmRTdWJzdGl0
dXRpb24+JiBzdWJzdGl0dXRpb25zLCBpbnQgb3BlcmFuZCwgTm9kZUluZGV4IE5vZGUqIG5vZGUp
CiAgICAgewotICAgICAgICBBU1NFUlQobV9ncmFwaFtub2RlSW5kZXhdLm9wKCkgPT0gU2V0TG9j
YWwKLSAgICAgICAgICAgICAgIHx8IG1fZ3JhcGhbbm9kZUluZGV4XS5vcCgpID09IFNldEFyZ3Vt
ZW50Ci0gICAgICAgICAgICAgICB8fCBtX2dyYXBoW25vZGVJbmRleF0ub3AoKSA9PSBGbHVzaAot
ICAgICAgICAgICAgICAgfHwgbV9ncmFwaFtub2RlSW5kZXhdLm9wKCkgPT0gUGhpKTsKLSAgICAg
ICAgc3Vic3RpdHV0aW9ucy5vcGVyYW5kKG9wZXJhbmQpLm5ld0NoaWxkID0gbm9kZUluZGV4Owor
ICAgICAgICBBU1NFUlQobm9kZS0+b3AoKSA9PSBTZXRMb2NhbAorICAgICAgICAgICAgICAgfHwg
bm9kZS0+b3AoKSA9PSBTZXRBcmd1bWVudAorICAgICAgICAgICAgICAgfHwgbm9kZS0+b3AoKSA9
PSBGbHVzaAorICAgICAgICAgICAgICAgfHwgbm9kZS0+b3AoKSA9PSBQaGkpOworICAgICAgICBz
dWJzdGl0dXRpb25zLm9wZXJhbmQob3BlcmFuZCkubmV3Q2hpbGQgPSBub2RlOwogICAgIH0KICAg
ICAKICAgICB2b2lkIGZpeFRhaWxPcGVyYW5kKAogICAgICAgICBCYXNpY0Jsb2NrKiBmaXJzdEJs
b2NrLCBCYXNpY0Jsb2NrKiBzZWNvbmRCbG9jaywgaW50IG9wZXJhbmQsCiAgICAgICAgIE9wZXJh
bmRzPE9wZXJhbmRTdWJzdGl0dXRpb24+JiBzdWJzdGl0dXRpb25zKQogICAgIHsKLSAgICAgICAg
Tm9kZUluZGV4IGF0U2Vjb25kVGFpbCA9IHNlY29uZEJsb2NrLT52YXJpYWJsZXNBdFRhaWwub3Bl
cmFuZChvcGVyYW5kKTsKKyAgICAgICAgTm9kZSogYXRTZWNvbmRUYWlsID0gc2Vjb25kQmxvY2st
PnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKG9wZXJhbmQpOwogICAgICAgICAKLSAgICAgICAgaWYg
KGF0U2Vjb25kVGFpbCA9PSBOb05vZGUpIHsKKyAgICAgICAgaWYgKCFhdFNlY29uZFRhaWwpIHsK
ICAgICAgICAgICAgIC8vIElmIHRoZSB2YXJpYWJsZSBpcyBkZWFkIGF0IHRoZSBlbmQgb2YgdGhl
IHNlY29uZCBibG9jaywgdGhlbiBkbyBub3RoaW5nOyBlc3NlbnRpYWxseQogICAgICAgICAgICAg
Ly8gdGhpcyBtZWFucyB0aGF0IHdlIHdhbnQgdGhlIHRhaWwgc3RhdGUgdG8gcmVmbGVjdCB3aGF0
ZXZlciB0aGUgZmlyc3QgYmxvY2sgZGlkLgogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9
CiAKLSAgICAgICAgTm9kZSYgc2Vjb25kTm9kZSA9IG1fZ3JhcGhbYXRTZWNvbmRUYWlsXTsKLSAg
ICAgICAgCi0gICAgICAgIHN3aXRjaCAoc2Vjb25kTm9kZS5vcCgpKSB7CisgICAgICAgIHN3aXRj
aCAoYXRTZWNvbmRUYWlsLT5vcCgpKSB7CiAgICAgICAgIGNhc2UgU2V0TG9jYWw6CiAgICAgICAg
IGNhc2UgRmx1c2g6IHsKICAgICAgICAgICAgIC8vIFRoZSBzZWNvbmQgYmxvY2sgZGlkIGludGVy
ZXN0aW5nIHRoaW5ncyB0byB0aGUgdmFyaWFibGVzLCBzbyB1cGRhdGUgdGhlIHRhaWwKQEAgLTUx
MSw3ICs1MDEsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgUGhpOiB7
CiAgICAgICAgICAgICAvLyBLZWVwIHdoYXQgd2FzIGluIHRoZSBmaXJzdCBibG9jay4KLSAgICAg
ICAgICAgIEFTU0VSVChmaXJzdEJsb2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZChvcGVyYW5k
KSAhPSBOb05vZGUpOworICAgICAgICAgICAgQVNTRVJUKGZpcnN0QmxvY2stPnZhcmlhYmxlc0F0
VGFpbC5vcGVyYW5kKG9wZXJhbmQpKTsKICAgICAgICAgICAgIHJlY29yZE5ld1RhcmdldChzdWJz
dGl0dXRpb25zLCBvcGVyYW5kLCBza2lwR2V0TG9jYWwoZmlyc3RCbG9jay0+dmFyaWFibGVzQXRU
YWlsLm9wZXJhbmQob3BlcmFuZCkpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkBA
IC01MjAsMjggKzUxMCwyOCBAQCBwcml2YXRlOgogICAgICAgICAgICAgLy8gSWYgaXQncyBhIEdl
dExvY2FsIG9uIGEgY2FwdHVyZWQgdmFyLCB0aGVuIGRlZmluaXRlbHkga2VlcCB3aGF0IHdhcwog
ICAgICAgICAgICAgLy8gaW4gdGhlIHNlY29uZCBibG9jay4gSW4gcGFydGljdWxhciwgaXQncyBw
b3NzaWJsZSB0aGF0IHRoZSBmaXJzdAogICAgICAgICAgICAgLy8gYmxvY2sgZG9lc24ndCBldmVu
IGtub3cgYWJvdXQgdGhpcyB2YXJpYWJsZS4KLSAgICAgICAgICAgIGlmIChzZWNvbmROb2RlLnZh
cmlhYmxlQWNjZXNzRGF0YSgpLT5pc0NhcHR1cmVkKCkpIHsKKyAgICAgICAgICAgIGlmIChhdFNl
Y29uZFRhaWwtPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5pc0NhcHR1cmVkKCkpIHsKICAgICAgICAg
ICAgICAgICBmaXJzdEJsb2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZChvcGVyYW5kKSA9IGF0
U2Vjb25kVGFpbDsKLSAgICAgICAgICAgICAgICByZWNvcmROZXdUYXJnZXQoc3Vic3RpdHV0aW9u
cywgb3BlcmFuZCwgc2Vjb25kTm9kZS5jaGlsZDEoKS5pbmRleCgpKTsKKyAgICAgICAgICAgICAg
ICByZWNvcmROZXdUYXJnZXQoc3Vic3RpdHV0aW9ucywgb3BlcmFuZCwgYXRTZWNvbmRUYWlsLT5j
aGlsZDEoKS5pbmRleCgpKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIAogICAgICAgICAgICAgLy8gSXQncyBwb3NzaWJsZSB0aGF0IHRoZSBzZWNv
bmQgYmxvY2sgaGFkIGEgR2V0TG9jYWwgYW5kIHRoZSBmaXJzdCBibG9jawogICAgICAgICAgICAg
Ly8gaGFkIGEgU2V0QXJndW1lbnQgb3IgYSBQaGkuIFRoZW4gdXBkYXRlIHRoZSB0YWlsLiBPdGhl
cndpc2Uga2VlcCB3aGF0IHdhcyBpbiB0aGUKICAgICAgICAgICAgIC8vIGZpcnN0IGJsb2NrLgot
ICAgICAgICAgICAgTm9kZUluZGV4IGF0Rmlyc3RUYWlsID0gZmlyc3RCbG9jay0+dmFyaWFibGVz
QXRUYWlsLm9wZXJhbmQob3BlcmFuZCk7Ci0gICAgICAgICAgICBBU1NFUlQoYXRGaXJzdFRhaWwg
IT0gTm9Ob2RlKTsKLSAgICAgICAgICAgIHN3aXRjaCAobV9ncmFwaFthdEZpcnN0VGFpbF0ub3Ao
KSkgeworICAgICAgICAgICAgTm9kZSogYXRGaXJzdFRhaWwgPSBmaXJzdEJsb2NrLT52YXJpYWJs
ZXNBdFRhaWwub3BlcmFuZChvcGVyYW5kKTsKKyAgICAgICAgICAgIEFTU0VSVChhdEZpcnN0VGFp
bCk7CisgICAgICAgICAgICBzd2l0Y2ggKGF0Rmlyc3RUYWlsLT5vcCgpKSB7CiAgICAgICAgICAg
ICBjYXNlIFNldEFyZ3VtZW50OgogICAgICAgICAgICAgY2FzZSBQaGk6CiAgICAgICAgICAgICAg
ICAgZmlyc3RCbG9jay0+dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQob3BlcmFuZCkgPSBhdFNlY29u
ZFRhaWw7Ci0gICAgICAgICAgICAgICAgcmVjb3JkTmV3VGFyZ2V0KHN1YnN0aXR1dGlvbnMsIG9w
ZXJhbmQsIHNlY29uZE5vZGUuY2hpbGQxKCkuaW5kZXgoKSk7CisgICAgICAgICAgICAgICAgcmVj
b3JkTmV3VGFyZ2V0KHN1YnN0aXR1dGlvbnMsIG9wZXJhbmQsIGF0U2Vjb25kVGFpbC0+Y2hpbGQx
KCkuaW5kZXgoKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgICAgIGRlZmF1
bHQ6CiAgICAgICAgICAgICAgICAgLy8gS2VlcCB3aGF0IHdhcyBpbiB0aGUgZmlyc3QgYmxvY2ss
IGFuZCBhZGp1c3QgdGhlIHN1YnN0aXR1dGlvbiB0byBhY2NvdW50IGZvcgogICAgICAgICAgICAg
ICAgIC8vIHRoZSBmYWN0IHRoYXQgc3VjY2Vzc29ycyB3aWxsIHJlZmVyIHRvIHRoZSBjaGlsZCBv
ZiB0aGUgR2V0TG9jYWwuCi0gICAgICAgICAgICAgICAgQVNTRVJUKGZpcnN0QmxvY2stPnZhcmlh
Ymxlc0F0VGFpbC5vcGVyYW5kKG9wZXJhbmQpICE9IE5vTm9kZSk7CisgICAgICAgICAgICAgICAg
QVNTRVJUKGZpcnN0QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKG9wZXJhbmQpKTsKICAg
ICAgICAgICAgICAgICByZWNvcmROZXdUYXJnZXQoc3Vic3RpdHV0aW9ucywgb3BlcmFuZCwgc2tp
cEdldExvY2FsKGZpcnN0QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKG9wZXJhbmQpKSk7
CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CkBAIC01NjcsMTAgKzU1Nywx
MCBAQCBwcml2YXRlOgogICAgICAgICAKICAgICAgICAgLy8gUmVtb3ZlIHRoZSB0ZXJtaW5hbCBv
ZiBmaXJzdEJsb2NrIHNpbmNlIHdlIGRvbid0IG5lZWQgaXQgYW55bW9yZS4gV2VsbCwgd2UgZG9u
J3QKICAgICAgICAgLy8gcmVhbGx5IHJlbW92ZSBpdDsgd2UgYWN0dWFsbHkgdHVybiBpdCBpbnRv
IGEgUGhhbnRvbS4KLSAgICAgICAgQVNTRVJUKG1fZ3JhcGhbZmlyc3RCbG9jay0+bGFzdCgpXS5p
c1Rlcm1pbmFsKCkpOwotICAgICAgICBDb2RlT3JpZ2luIGJvdW5kYXJ5Q29kZU9yaWdpbiA9IG1f
Z3JhcGhbZmlyc3RCbG9jay0+bGFzdCgpXS5jb2RlT3JpZ2luOwotICAgICAgICBtX2dyYXBoW2Zp
cnN0QmxvY2stPmxhc3QoKV0uc2V0T3BBbmREZWZhdWx0RmxhZ3MoUGhhbnRvbSk7Ci0gICAgICAg
IEFTU0VSVChtX2dyYXBoW2ZpcnN0QmxvY2stPmxhc3QoKV0ucmVmQ291bnQoKSA9PSAxKTsKKyAg
ICAgICAgQVNTRVJUKGZpcnN0QmxvY2stPmxhc3QoKS0+aXNUZXJtaW5hbCgpKTsKKyAgICAgICAg
Q29kZU9yaWdpbiBib3VuZGFyeUNvZGVPcmlnaW4gPSBmaXJzdEJsb2NrLT5sYXN0KCktPmNvZGVP
cmlnaW47CisgICAgICAgIGZpcnN0QmxvY2stPmxhc3QoKS0+c2V0T3BBbmREZWZhdWx0RmxhZ3Mo
UGhhbnRvbSk7CisgICAgICAgIEFTU0VSVChmaXJzdEJsb2NrLT5sYXN0KCktPnJlZkNvdW50KCkg
PT0gMSk7CiAgICAgICAgIAogICAgICAgICBpZiAoamV0dGlzb25lZEJsb2NrSW5kZXggIT0gTm9C
bG9jaykgewogICAgICAgICAgICAgQmFzaWNCbG9jayogamV0dGlzb25lZEJsb2NrID0gbV9ncmFw
aC5tX2Jsb2Nrc1tqZXR0aXNvbmVkQmxvY2tJbmRleF0uZ2V0KCk7CkBAIC01OTksMjggKzU4OSwy
NSBAQCBwcml2YXRlOgogICAgICAgICAgICAgcmVjb3JkUG9zc2libGVJbmNvbWluZ1JlZmVyZW5j
ZShzZWNvbmRCbG9jaywgc3Vic3RpdHV0aW9ucywgaSk7CiAKICAgICAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBzZWNvbmRCbG9jay0+c2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIE5vZGVJ
bmRleCBub2RlSW5kZXggPSBzZWNvbmRCbG9jay0+YXQoaSk7Ci0gICAgICAgICAgICBOb2RlJiBu
b2RlID0gbV9ncmFwaFtub2RlSW5kZXhdOworICAgICAgICAgICAgTm9kZSogbm9kZSA9IHNlY29u
ZEJsb2NrLT5hdChpKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgYm9vbCBjaGlsZHJlbkFs
cmVhZHlGaXhlZCA9IGZhbHNlOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBzd2l0Y2ggKG5v
ZGUub3AoKSkgeworICAgICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CiAgICAgICAgICAg
ICBjYXNlIFBoYW50b206IHsKLSAgICAgICAgICAgICAgICBpZiAoIW5vZGUuY2hpbGQxKCkpCisg
ICAgICAgICAgICAgICAgaWYgKCFub2RlLT5jaGlsZDEoKSkKICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgQVNTRVJUKG5vZGUuc2hv
dWxkR2VuZXJhdGUoKSk7Ci0gICAgICAgICAgICAgICAgTm9kZSYgcG9zc2libGVMb2NhbE9wID0g
bV9ncmFwaFtub2RlLmNoaWxkMSgpXTsKLSAgICAgICAgICAgICAgICBpZiAocG9zc2libGVMb2Nh
bE9wLm9wKCkgIT0gR2V0TG9jYWwKLSAgICAgICAgICAgICAgICAgICAgJiYgcG9zc2libGVMb2Nh
bE9wLmhhc0xvY2FsKCkKLSAgICAgICAgICAgICAgICAgICAgJiYgIXBvc3NpYmxlTG9jYWxPcC52
YXJpYWJsZUFjY2Vzc0RhdGEoKS0+aXNDYXB0dXJlZCgpKSB7Ci0gICAgICAgICAgICAgICAgICAg
IE5vZGVJbmRleCBzZXRMb2NhbEluZGV4ID0KLSAgICAgICAgICAgICAgICAgICAgICAgIGZpcnN0
QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKHBvc3NpYmxlTG9jYWxPcC5sb2NhbCgpKTsK
LSAgICAgICAgICAgICAgICAgICAgTm9kZSYgc2V0TG9jYWwgPSBtX2dyYXBoW3NldExvY2FsSW5k
ZXhdOwotICAgICAgICAgICAgICAgICAgICBpZiAoc2V0TG9jYWwub3AoKSA9PSBTZXRMb2NhbCkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5jaGFuZ2VFZGdlKG5vZGUuY2hpbGRy
ZW4uY2hpbGQxKCksIHNldExvY2FsLmNoaWxkMSgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IEFTU0VSVCghbm9kZS5jaGlsZDIoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQo
IW5vZGUuY2hpbGQzKCkpOworICAgICAgICAgICAgICAgIEFTU0VSVChub2RlLT5zaG91bGRHZW5l
cmF0ZSgpKTsKKyAgICAgICAgICAgICAgICBOb2RlKiBwb3NzaWJsZUxvY2FsT3AgPSBub2RlLT5j
aGlsZDEoKS5ub2RlKCk7CisgICAgICAgICAgICAgICAgaWYgKHBvc3NpYmxlTG9jYWxPcC0+b3Ao
KSAhPSBHZXRMb2NhbAorICAgICAgICAgICAgICAgICAgICAmJiBwb3NzaWJsZUxvY2FsT3AtPmhh
c0xvY2FsKCkKKyAgICAgICAgICAgICAgICAgICAgJiYgIXBvc3NpYmxlTG9jYWxPcC0+dmFyaWFi
bGVBY2Nlc3NEYXRhKCktPmlzQ2FwdHVyZWQoKSkgeworICAgICAgICAgICAgICAgICAgICBOb2Rl
KiBzZXRMb2NhbCA9IGZpcnN0QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKHBvc3NpYmxl
TG9jYWxPcC0+bG9jYWwoKSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChzZXRMb2NhbC0+b3Ao
KSA9PSBTZXRMb2NhbCkgeworICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5jaGFuZ2VF
ZGdlKG5vZGUtPmNoaWxkcmVuLmNoaWxkMSgpLCBzZXRMb2NhbC0+Y2hpbGQxKCkpOworICAgICAg
ICAgICAgICAgICAgICAgICAgQVNTRVJUKCFub2RlLT5jaGlsZDIoKSk7CisgICAgICAgICAgICAg
ICAgICAgICAgICBBU1NFUlQoIW5vZGUtPmNoaWxkMygpKTsKICAgICAgICAgICAgICAgICAgICAg
ICAgIGNoaWxkcmVuQWxyZWFkeUZpeGVkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgIH0KQEAgLTYzNywxMSArNjI0LDExIEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICAgICAgLy8gU2ltaWxhcmx5IGZvciBHZXRMb2NhbDsgaXQgY291bGQgdXNlIGFueSBvZiB0
aG9zZSBleGNlcHQgZm9yCiAgICAgICAgICAgICAgICAgLy8gR2V0TG9jYWwuIElmIGl0IHVzZXMg
YSBQaGkgdGhlbiBpdCBzaG91bGQgYmUgcmVkaXJlY3RlZCB0byB1c2UgYQogICAgICAgICAgICAg
ICAgIC8vIFBoaSBmcm9tIHRoZSB0YWlsIG9wZXJhbmQuCi0gICAgICAgICAgICAgICAgaWYgKG1f
Z3JhcGhbbm9kZS5jaGlsZDEoKV0ub3AoKSAhPSBQaGkpCisgICAgICAgICAgICAgICAgaWYgKG5v
ZGUtPmNoaWxkMSgpLT5vcCgpICE9IFBoaSkKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgTm9kZUluZGV4IGF0Rmlyc3RJbmRleCA9
IGZpcnN0QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKG5vZGUubG9jYWwoKSk7Ci0gICAg
ICAgICAgICAgICAgbV9ncmFwaC5jaGFuZ2VFZGdlKG5vZGUuY2hpbGRyZW4uY2hpbGQxKCksIEVk
Z2Uoc2tpcEdldExvY2FsKGF0Rmlyc3RJbmRleCkpLCBub2RlLnNob3VsZEdlbmVyYXRlKCkpOwor
ICAgICAgICAgICAgICAgIE5vZGUqIGF0Rmlyc3QgPSBmaXJzdEJsb2NrLT52YXJpYWJsZXNBdFRh
aWwub3BlcmFuZChub2RlLT5sb2NhbCgpKTsKKyAgICAgICAgICAgICAgICBtX2dyYXBoLmNoYW5n
ZUVkZ2Uobm9kZS0+Y2hpbGRyZW4uY2hpbGQxKCksIEVkZ2Uoc2tpcEdldExvY2FsKGF0Rmlyc3Qp
KSwgbm9kZS0+c2hvdWxkR2VuZXJhdGUoKSk7CiAgICAgICAgICAgICAgICAgY2hpbGRyZW5BbHJl
YWR5Rml4ZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQpA
QCAtNjUxLDMwICs2MzgsMzAgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IAogICAgICAgICAgICAgaWYgKCFjaGlsZHJlbkFscmVhZHlGaXhlZCkgewotICAgICAgICAgICAg
ICAgIGJvb2wgY2hhbmdlUmVmID0gbm9kZS5zaG91bGRHZW5lcmF0ZSgpOworICAgICAgICAgICAg
ICAgIGJvb2wgY2hhbmdlUmVmID0gbm9kZS0+c2hvdWxkR2VuZXJhdGUoKTsKICAgICAgICAgICAg
IAogICAgICAgICAgICAgICAgIC8vIElmIHRoZSBjaGlsZCBpcyBhIEdldExvY2FsLCB0aGVuIHdl
IG1pZ2h0IGxpa2UgdG8gZml4IGl0LgotICAgICAgICAgICAgICAgIGlmIChub2RlLmZsYWdzKCkg
JiBOb2RlSGFzVmFyQXJncykgewotICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGNo
aWxkSWR4ID0gbm9kZS5maXJzdENoaWxkKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgY2hp
bGRJZHggPCBub2RlLmZpcnN0Q2hpbGQoKSArIG5vZGUubnVtQ2hpbGRyZW4oKTsKKyAgICAgICAg
ICAgICAgICBpZiAobm9kZS0+ZmxhZ3MoKSAmIE5vZGVIYXNWYXJBcmdzKSB7CisgICAgICAgICAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgY2hpbGRJZHggPSBub2RlLT5maXJzdENoaWxkKCk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRJZHggPCBub2RlLT5maXJzdENoaWxkKCkgKyBu
b2RlLT5udW1DaGlsZHJlbigpOwogICAgICAgICAgICAgICAgICAgICAgICAgICsrY2hpbGRJZHgp
IHsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghIW1fZ3JhcGgubV92YXJBcmdDaGlsZHJl
bltjaGlsZElkeF0pCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZml4UG9zc2libGVHZXRM
b2NhbChmaXJzdEJsb2NrLCBtX2dyYXBoLm1fdmFyQXJnQ2hpbGRyZW5bY2hpbGRJZHhdLCBjaGFu
Z2VSZWYpOwogICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlm
ICghIW5vZGUuY2hpbGQxKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgZml4UG9zc2libGVHZXRM
b2NhbChmaXJzdEJsb2NrLCBub2RlLmNoaWxkcmVuLmNoaWxkMSgpLCBjaGFuZ2VSZWYpOwotICAg
ICAgICAgICAgICAgICAgICBpZiAoISFub2RlLmNoaWxkMigpKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBmaXhQb3NzaWJsZUdldExvY2FsKGZpcnN0QmxvY2ssIG5vZGUuY2hpbGRyZW4uY2hp
bGQyKCksIGNoYW5nZVJlZik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoISFub2RlLmNo
aWxkMygpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpeFBvc3NpYmxlR2V0TG9jYWwo
Zmlyc3RCbG9jaywgbm9kZS5jaGlsZHJlbi5jaGlsZDMoKSwgY2hhbmdlUmVmKTsKKyAgICAgICAg
ICAgICAgICB9IGVsc2UgaWYgKCEhbm9kZS0+Y2hpbGQxKCkpIHsKKyAgICAgICAgICAgICAgICAg
ICAgZml4UG9zc2libGVHZXRMb2NhbChmaXJzdEJsb2NrLCBub2RlLT5jaGlsZHJlbi5jaGlsZDEo
KSwgY2hhbmdlUmVmKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCEhbm9kZS0+Y2hpbGQyKCkp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpeFBvc3NpYmxlR2V0TG9jYWwoZmlyc3RCbG9j
aywgbm9kZS0+Y2hpbGRyZW4uY2hpbGQyKCksIGNoYW5nZVJlZik7CisgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoISFub2RlLT5jaGlsZDMoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBmaXhQb3NzaWJsZUdldExvY2FsKGZpcnN0QmxvY2ssIG5vZGUtPmNoaWxkcmVuLmNoaWxkMygp
LCBjaGFuZ2VSZWYpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBmaXJzdEJsb2NrLT5hcHBlbmQobm9kZUluZGV4
KTsKKyAgICAgICAgICAgIGZpcnN0QmxvY2stPmFwcGVuZChub2RlKTsKICAgICAgICAgfQogICAg
ICAgICAKLSAgICAgICAgQVNTRVJUKG1fZ3JhcGhbZmlyc3RCbG9jay0+bGFzdCgpXS5pc1Rlcm1p
bmFsKCkpOworICAgICAgICBBU1NFUlQoZmlyc3RCbG9jay0+bGFzdCgpLT5pc1Rlcm1pbmFsKCkp
OwogICAgICAgICAKICAgICAgICAgLy8gRml4IHRoZSBwcmVkZWNlc3NvcnMgb2YgbXkgbmV3IHN1
Y2Nlc3NvcnMuIFRoaXMgaXMgdHJpY2t5LCBzaW5jZSB3ZSBhcmUgZ29pbmcgdG8gcmVzZXQKICAg
ICAgICAgLy8gYWxsIHByZWRlY2Vzc29ycyBhbnl3YXkgZHVlIHRvIHJlYWNoYWJpbGl0eSBhbmFs
eXNpcy4gQnV0IHdlIG5lZWQgdG8gZml4IHRoZQpAQCAtNzA0LDI2ICs2OTEsMjQgQEAgcHJpdmF0
ZToKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9ncmFwaC5udW1TdWNjZXNzb3JzKGZpcnN0
QmxvY2spOyBpLS07KSB7CiAgICAgICAgICAgICBCYXNpY0Jsb2NrKiBzdWNjZXNzb3IgPSBtX2dy
YXBoLm1fYmxvY2tzW21fZ3JhcGguc3VjY2Vzc29yKGZpcnN0QmxvY2ssIGkpXS5nZXQoKTsKICAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IDA7IGogPCBzdWNjZXNzb3ItPnBoaXMuc2l6ZSgp
OyArK2opIHsKLSAgICAgICAgICAgICAgICBOb2RlSW5kZXggcGhpTm9kZUluZGV4ID0gc3VjY2Vz
c29yLT5waGlzW2pdOwotICAgICAgICAgICAgICAgIE5vZGUmIHBoaU5vZGUgPSBtX2dyYXBoW3Bo
aU5vZGVJbmRleF07Ci0gICAgICAgICAgICAgICAgYm9vbCBjaGFuZ2VSZWYgPSBwaGlOb2RlLnNo
b3VsZEdlbmVyYXRlKCk7Ci0gICAgICAgICAgICAgICAgT3BlcmFuZFN1YnN0aXR1dGlvbiBzdWJz
dGl0dXRpb24gPSBzdWJzdGl0dXRpb25zLm9wZXJhbmQocGhpTm9kZS5sb2NhbCgpKTsKKyAgICAg
ICAgICAgICAgICBOb2RlKiBwaGlOb2RlID0gc3VjY2Vzc29yLT5waGlzW2pdOworICAgICAgICAg
ICAgICAgIGJvb2wgY2hhbmdlUmVmID0gcGhpTm9kZS0+c2hvdWxkR2VuZXJhdGUoKTsKKyAgICAg
ICAgICAgICAgICBPcGVyYW5kU3Vic3RpdHV0aW9uIHN1YnN0aXR1dGlvbiA9IHN1YnN0aXR1dGlv
bnMub3BlcmFuZChwaGlOb2RlLT5sb2NhbCgpKTsKICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BB
R0FUSU9OX1ZFUkJPU0UpCi0gICAgICAgICAgICAgICAgZGF0YUxvZ0YoIiAgICBQZXJmb3JtaW5n
IG9wZXJhbmQgc3Vic3RpdHV0aW9uIEAldSAtPiBAJXUuXG4iLAotICAgICAgICAgICAgICAgICAg
ICAgICAgc3Vic3RpdHV0aW9uLm9sZENoaWxkLCBzdWJzdGl0dXRpb24ubmV3Q2hpbGQpOworICAg
ICAgICAgICAgICAgIGRhdGFMb2coIiAgICBQZXJmb3JtaW5nIG9wZXJhbmQgc3Vic3RpdHV0aW9u
ICIsIHN1YnN0aXR1dGlvbiwgIi5cbiIpOwogI2VuZGlmCi0gICAgICAgICAgICAgICAgaWYgKCFw
aGlOb2RlLmNoaWxkMSgpKQorICAgICAgICAgICAgICAgIGlmICghcGhpTm9kZS0+Y2hpbGQxKCkp
CiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIGlmIChwaGlO
b2RlLmNoaWxkMSgpLmluZGV4KCkgPT0gc3Vic3RpdHV0aW9uLm9sZENoaWxkKQotICAgICAgICAg
ICAgICAgICAgICBtX2dyYXBoLmNoYW5nZUluZGV4KHBoaU5vZGUuY2hpbGRyZW4uY2hpbGQxKCks
IHN1YnN0aXR1dGlvbi5uZXdDaGlsZCwgY2hhbmdlUmVmKTsKLSAgICAgICAgICAgICAgICBpZiAo
IXBoaU5vZGUuY2hpbGQyKCkpCisgICAgICAgICAgICAgICAgaWYgKHBoaU5vZGUtPmNoaWxkMSgp
ID09IHN1YnN0aXR1dGlvbi5vbGRDaGlsZCkKKyAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5j
aGFuZ2VJbmRleChwaGlOb2RlLT5jaGlsZHJlbi5jaGlsZDEoKSwgc3Vic3RpdHV0aW9uLm5ld0No
aWxkLCBjaGFuZ2VSZWYpOworICAgICAgICAgICAgICAgIGlmICghcGhpTm9kZS0+Y2hpbGQyKCkp
CiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIGlmIChwaGlO
b2RlLmNoaWxkMigpLmluZGV4KCkgPT0gc3Vic3RpdHV0aW9uLm9sZENoaWxkKQotICAgICAgICAg
ICAgICAgICAgICBtX2dyYXBoLmNoYW5nZUluZGV4KHBoaU5vZGUuY2hpbGRyZW4uY2hpbGQyKCks
IHN1YnN0aXR1dGlvbi5uZXdDaGlsZCwgY2hhbmdlUmVmKTsKLSAgICAgICAgICAgICAgICBpZiAo
IXBoaU5vZGUuY2hpbGQzKCkpCisgICAgICAgICAgICAgICAgaWYgKHBoaU5vZGUtPmNoaWxkMigp
ID09IHN1YnN0aXR1dGlvbi5vbGRDaGlsZCkKKyAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5j
aGFuZ2VJbmRleChwaGlOb2RlLT5jaGlsZHJlbi5jaGlsZDIoKSwgc3Vic3RpdHV0aW9uLm5ld0No
aWxkLCBjaGFuZ2VSZWYpOworICAgICAgICAgICAgICAgIGlmICghcGhpTm9kZS0+Y2hpbGQzKCkp
CiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIGlmIChwaGlO
b2RlLmNoaWxkMygpLmluZGV4KCkgPT0gc3Vic3RpdHV0aW9uLm9sZENoaWxkKQotICAgICAgICAg
ICAgICAgICAgICBtX2dyYXBoLmNoYW5nZUluZGV4KHBoaU5vZGUuY2hpbGRyZW4uY2hpbGQzKCks
IHN1YnN0aXR1dGlvbi5uZXdDaGlsZCwgY2hhbmdlUmVmKTsKKyAgICAgICAgICAgICAgICBpZiAo
cGhpTm9kZS0+Y2hpbGQzKCkgPT0gc3Vic3RpdHV0aW9uLm9sZENoaWxkKQorICAgICAgICAgICAg
ICAgICAgICBtX2dyYXBoLmNoYW5nZUluZGV4KHBoaU5vZGUtPmNoaWxkcmVuLmNoaWxkMygpLCBz
dWJzdGl0dXRpb24ubmV3Q2hpbGQsIGNoYW5nZVJlZik7CiAgICAgICAgICAgICB9CiAgICAgICAg
IH0KICAgICAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NTRVBoYXNl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NTRVBoYXNl
LmNwcAkocmV2aXNpb24gMTQwNjE2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdD
U0VQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUzLDI0ICs1MywyNCBAQCBwdWJsaWM6CiAg
ICAgCiBwcml2YXRlOgogICAgIAotICAgIE5vZGVJbmRleCBjYW5vbmljYWxpemUoTm9kZUluZGV4
IG5vZGVJbmRleCkKKyAgICBOb2RlKiBjYW5vbmljYWxpemUoTm9kZSogbm9kZSkKICAgICB7Ci0g
ICAgICAgIGlmIChub2RlSW5kZXggPT0gTm9Ob2RlKQotICAgICAgICAgICAgcmV0dXJuIE5vTm9k
ZTsKKyAgICAgICAgaWYgKCFub2RlKQorICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIAot
ICAgICAgICBpZiAobV9ncmFwaFtub2RlSW5kZXhdLm9wKCkgPT0gVmFsdWVUb0ludDMyKQotICAg
ICAgICAgICAgbm9kZUluZGV4ID0gbV9ncmFwaFtub2RlSW5kZXhdLmNoaWxkMSgpLmluZGV4KCk7
CisgICAgICAgIGlmIChub2RlLT5vcCgpID09IFZhbHVlVG9JbnQzMikKKyAgICAgICAgICAgIG5v
ZGUgPSBub2RlLT5jaGlsZDEoKS5ub2RlKCk7CiAgICAgICAgIAotICAgICAgICByZXR1cm4gbm9k
ZUluZGV4OworICAgICAgICByZXR1cm4gbm9kZTsKICAgICB9Ci0gICAgTm9kZUluZGV4IGNhbm9u
aWNhbGl6ZShFZGdlIG5vZGVVc2UpCisgICAgTm9kZSogY2Fub25pY2FsaXplKEVkZ2UgZWRnZSkK
ICAgICB7Ci0gICAgICAgIHJldHVybiBjYW5vbmljYWxpemUobm9kZVVzZS5pbmRleFVuY2hlY2tl
ZCgpKTsKKyAgICAgICAgcmV0dXJuIGNhbm9uaWNhbGl6ZShlZGdlLm5vZGUoKSk7CiAgICAgfQog
ICAgIAogICAgIHVuc2lnbmVkIGVuZEluZGV4Rm9yUHVyZUNTRSgpCiAgICAgewotICAgICAgICB1
bnNpZ25lZCByZXN1bHQgPSBtX2xhc3RTZWVuW21fZ3JhcGhbbV9jb21waWxlSW5kZXhdLm9wKCld
OworICAgICAgICB1bnNpZ25lZCByZXN1bHQgPSBtX2xhc3RTZWVuW21fY3VycmVudE5vZGUtPm9w
KCldOwogICAgICAgICBpZiAocmVzdWx0ID09IFVJTlRfTUFYKQogICAgICAgICAgICAgcmVzdWx0
ID0gMDsKICAgICAgICAgZWxzZQpAQCAtODIsMjYxICs4MiwyNTcgQEAgcHJpdmF0ZToKICAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKLSAgICBOb2RlSW5kZXggcHVyZUNTRShOb2RlJiBu
b2RlKQorICAgIE5vZGUqIHB1cmVDU0UoTm9kZSogbm9kZSkKICAgICB7Ci0gICAgICAgIE5vZGVJ
bmRleCBjaGlsZDEgPSBjYW5vbmljYWxpemUobm9kZS5jaGlsZDEoKSk7Ci0gICAgICAgIE5vZGVJ
bmRleCBjaGlsZDIgPSBjYW5vbmljYWxpemUobm9kZS5jaGlsZDIoKSk7Ci0gICAgICAgIE5vZGVJ
bmRleCBjaGlsZDMgPSBjYW5vbmljYWxpemUobm9kZS5jaGlsZDMoKSk7CisgICAgICAgIE5vZGUq
IGNoaWxkMSA9IGNhbm9uaWNhbGl6ZShub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIE5vZGUqIGNo
aWxkMiA9IGNhbm9uaWNhbGl6ZShub2RlLT5jaGlsZDIoKSk7CisgICAgICAgIE5vZGUqIGNoaWxk
MyA9IGNhbm9uaWNhbGl6ZShub2RlLT5jaGlsZDMoKSk7CiAgICAgICAgIAogICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSBlbmRJbmRleEZvclB1cmVDU0UoKTsgaS0tOykgewotICAgICAgICAgICAg
Tm9kZUluZGV4IGluZGV4ID0gbV9jdXJyZW50QmxvY2stPmF0KGkpOwotICAgICAgICAgICAgaWYg
KGluZGV4ID09IGNoaWxkMSB8fCBpbmRleCA9PSBjaGlsZDIgfHwgaW5kZXggPT0gY2hpbGQzKQor
ICAgICAgICAgICAgTm9kZSogb3RoZXJOb2RlID0gbV9jdXJyZW50QmxvY2stPmF0KGkpOworICAg
ICAgICAgICAgaWYgKG90aGVyTm9kZSA9PSBjaGlsZDEgfHwgb3RoZXJOb2RlID09IGNoaWxkMiB8
fCBvdGhlck5vZGUgPT0gY2hpbGQzKQogICAgICAgICAgICAgICAgIGJyZWFrOwogCi0gICAgICAg
ICAgICBOb2RlJiBvdGhlck5vZGUgPSBtX2dyYXBoW2luZGV4XTsKLSAgICAgICAgICAgIGlmICgh
b3RoZXJOb2RlLnNob3VsZEdlbmVyYXRlKCkpCisgICAgICAgICAgICBpZiAoIW90aGVyTm9kZS0+
c2hvdWxkR2VuZXJhdGUoKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAg
IAotICAgICAgICAgICAgaWYgKG5vZGUub3AoKSAhPSBvdGhlck5vZGUub3AoKSkKKyAgICAgICAg
ICAgIGlmIChub2RlLT5vcCgpICE9IG90aGVyTm9kZS0+b3AoKSkKICAgICAgICAgICAgICAgICBj
b250aW51ZTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKG5vZGUuYXJpdGhOb2RlRmxh
Z3MoKSAhPSBvdGhlck5vZGUuYXJpdGhOb2RlRmxhZ3MoKSkKKyAgICAgICAgICAgIGlmIChub2Rl
LT5hcml0aE5vZGVGbGFncygpICE9IG90aGVyTm9kZS0+YXJpdGhOb2RlRmxhZ3MoKSkKICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgTm9kZUluZGV4
IG90aGVyQ2hpbGQgPSBjYW5vbmljYWxpemUob3RoZXJOb2RlLmNoaWxkMSgpKTsKLSAgICAgICAg
ICAgIGlmIChvdGhlckNoaWxkID09IE5vTm9kZSkKLSAgICAgICAgICAgICAgICByZXR1cm4gaW5k
ZXg7CisgICAgICAgICAgICBOb2RlKiBvdGhlckNoaWxkID0gY2Fub25pY2FsaXplKG90aGVyTm9k
ZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgaWYgKCFvdGhlckNoaWxkKQorICAgICAgICAgICAg
ICAgIHJldHVybiBvdGhlck5vZGU7CiAgICAgICAgICAgICBpZiAob3RoZXJDaGlsZCAhPSBjaGls
ZDEpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAKLSAgICAgICAgICAg
IG90aGVyQ2hpbGQgPSBjYW5vbmljYWxpemUob3RoZXJOb2RlLmNoaWxkMigpKTsKLSAgICAgICAg
ICAgIGlmIChvdGhlckNoaWxkID09IE5vTm9kZSkKLSAgICAgICAgICAgICAgICByZXR1cm4gaW5k
ZXg7CisgICAgICAgICAgICBvdGhlckNoaWxkID0gY2Fub25pY2FsaXplKG90aGVyTm9kZS0+Y2hp
bGQyKCkpOworICAgICAgICAgICAgaWYgKCFvdGhlckNoaWxkKQorICAgICAgICAgICAgICAgIHJl
dHVybiBvdGhlck5vZGU7CiAgICAgICAgICAgICBpZiAob3RoZXJDaGlsZCAhPSBjaGlsZDIpCiAg
ICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIG90aGVy
Q2hpbGQgPSBjYW5vbmljYWxpemUob3RoZXJOb2RlLmNoaWxkMygpKTsKLSAgICAgICAgICAgIGlm
IChvdGhlckNoaWxkID09IE5vTm9kZSkKLSAgICAgICAgICAgICAgICByZXR1cm4gaW5kZXg7Cisg
ICAgICAgICAgICBvdGhlckNoaWxkID0gY2Fub25pY2FsaXplKG90aGVyTm9kZS0+Y2hpbGQzKCkp
OworICAgICAgICAgICAgaWYgKCFvdGhlckNoaWxkKQorICAgICAgICAgICAgICAgIHJldHVybiBv
dGhlck5vZGU7CiAgICAgICAgICAgICBpZiAob3RoZXJDaGlsZCAhPSBjaGlsZDMpCiAgICAgICAg
ICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIHJldHVybiBpbmRl
eDsKKyAgICAgICAgICAgIHJldHVybiBvdGhlck5vZGU7CiAgICAgICAgIH0KLSAgICAgICAgcmV0
dXJuIE5vTm9kZTsKKyAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogICAgIAotICAgIE5vZGVJbmRl
eCBjb25zdGFudENTRShOb2RlJiBub2RlKQorICAgIE5vZGUqIGNvbnN0YW50Q1NFKE5vZGUqIG5v
ZGUpCiAgICAgewogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBlbmRJbmRleEZvclB1cmVDU0Uo
KTsgaS0tOykgewotICAgICAgICAgICAgTm9kZUluZGV4IGluZGV4ID0gbV9jdXJyZW50QmxvY2st
PmF0KGkpOwotICAgICAgICAgICAgTm9kZSYgb3RoZXJOb2RlID0gbV9ncmFwaFtpbmRleF07Ci0g
ICAgICAgICAgICBpZiAob3RoZXJOb2RlLm9wKCkgIT0gSlNDb25zdGFudCkKKyAgICAgICAgICAg
IE5vZGUqIG90aGVyTm9kZSA9IG1fY3VycmVudEJsb2NrLT5hdChpKTsKKyAgICAgICAgICAgIGlm
IChvdGhlck5vZGUtPm9wKCkgIT0gSlNDb25zdGFudCkKICAgICAgICAgICAgICAgICBjb250aW51
ZTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKG90aGVyTm9kZS5jb25zdGFudE51bWJl
cigpICE9IG5vZGUuY29uc3RhbnROdW1iZXIoKSkKKyAgICAgICAgICAgIGlmICghb3RoZXJOb2Rl
LT5zaG91bGRHZW5lcmF0ZSgpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAg
ICAgCi0gICAgICAgICAgICByZXR1cm4gaW5kZXg7CisgICAgICAgICAgICBpZiAob3RoZXJOb2Rl
LT5jb25zdGFudE51bWJlcigpICE9IG5vZGUtPmNvbnN0YW50TnVtYmVyKCkpCisgICAgICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHJldHVybiBvdGhlck5v
ZGU7CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIE5vTm9kZTsKKyAgICAgICAgcmV0dXJuIDA7
CiAgICAgfQogICAgIAotICAgIE5vZGVJbmRleCB3ZWFrQ29uc3RhbnRDU0UoTm9kZSYgbm9kZSkK
KyAgICBOb2RlKiB3ZWFrQ29uc3RhbnRDU0UoTm9kZSogbm9kZSkKICAgICB7CiAgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IGVuZEluZGV4Rm9yUHVyZUNTRSgpOyBpLS07KSB7Ci0gICAgICAgICAg
ICBOb2RlSW5kZXggaW5kZXggPSBtX2N1cnJlbnRCbG9jay0+YXQoaSk7Ci0gICAgICAgICAgICBO
b2RlJiBvdGhlck5vZGUgPSBtX2dyYXBoW2luZGV4XTsKLSAgICAgICAgICAgIGlmIChvdGhlck5v
ZGUub3AoKSAhPSBXZWFrSlNDb25zdGFudCkKKyAgICAgICAgICAgIE5vZGUqIG90aGVyTm9kZSA9
IG1fY3VycmVudEJsb2NrLT5hdChpKTsKKyAgICAgICAgICAgIGlmIChvdGhlck5vZGUtPm9wKCkg
IT0gV2Vha0pTQ29uc3RhbnQpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIGlmICghb3RoZXJOb2RlLT5zaG91bGRHZW5lcmF0ZSgpKQogICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAob3RoZXJO
b2RlLndlYWtDb25zdGFudCgpICE9IG5vZGUud2Vha0NvbnN0YW50KCkpCisgICAgICAgICAgICBp
ZiAob3RoZXJOb2RlLT53ZWFrQ29uc3RhbnQoKSAhPSBub2RlLT53ZWFrQ29uc3RhbnQoKSkKICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgcmV0dXJu
IGluZGV4OworICAgICAgICAgICAgcmV0dXJuIG90aGVyTm9kZTsKICAgICAgICAgfQotICAgICAg
ICByZXR1cm4gTm9Ob2RlOworICAgICAgICByZXR1cm4gMDsKICAgICB9CiAgICAgCi0gICAgTm9k
ZUluZGV4IGdldENhbGxlZUxvYWRFbGltaW5hdGlvbihJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNh
bGxGcmFtZSkKKyAgICBOb2RlKiBnZXRDYWxsZWVMb2FkRWxpbWluYXRpb24oSW5saW5lQ2FsbEZy
YW1lKiBpbmxpbmVDYWxsRnJhbWUpCiAgICAgewogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBt
X2luZGV4SW5CbG9jazsgaS0tOykgewotICAgICAgICAgICAgTm9kZUluZGV4IGluZGV4ID0gbV9j
dXJyZW50QmxvY2stPmF0KGkpOwotICAgICAgICAgICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhbaW5k
ZXhdOwotICAgICAgICAgICAgaWYgKCFub2RlLnNob3VsZEdlbmVyYXRlKCkpCisgICAgICAgICAg
ICBOb2RlKiBub2RlID0gbV9jdXJyZW50QmxvY2stPmF0KGkpOworICAgICAgICAgICAgaWYgKCFu
b2RlLT5zaG91bGRHZW5lcmF0ZSgpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAg
ICAgICAgaWYgKG5vZGUuY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUgIT0gaW5saW5lQ2FsbEZy
YW1lKQorICAgICAgICAgICAgaWYgKG5vZGUtPmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lICE9
IGlubGluZUNhbGxGcmFtZSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAg
IHN3aXRjaCAobm9kZS5vcCgpKSB7CisgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsK
ICAgICAgICAgICAgIGNhc2UgR2V0Q2FsbGVlOgotICAgICAgICAgICAgICAgIHJldHVybiBpbmRl
eDsKKyAgICAgICAgICAgICAgICByZXR1cm4gbm9kZTsKICAgICAgICAgICAgIGNhc2UgU2V0Q2Fs
bGVlOgotICAgICAgICAgICAgICAgIHJldHVybiBub2RlLmNoaWxkMSgpLmluZGV4KCk7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKICAgICAgICAgICAgIGRl
ZmF1bHQ6CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0K
LSAgICAgICAgcmV0dXJuIE5vTm9kZTsKKyAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogICAgIAot
ICAgIE5vZGVJbmRleCBnZXRBcnJheUxlbmd0aEVsaW1pbmF0aW9uKE5vZGVJbmRleCBhcnJheSkK
KyAgICBOb2RlKiBnZXRBcnJheUxlbmd0aEVsaW1pbmF0aW9uKE5vZGUqIGFycmF5KQogICAgIHsK
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9pbmRleEluQmxvY2s7IGktLTspIHsKLSAgICAg
ICAgICAgIE5vZGVJbmRleCBpbmRleCA9IG1fY3VycmVudEJsb2NrLT5hdChpKTsKLSAgICAgICAg
ICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW2luZGV4XTsKLSAgICAgICAgICAgIGlmICghbm9kZS5z
aG91bGRHZW5lcmF0ZSgpKQorICAgICAgICAgICAgTm9kZSogbm9kZSA9IG1fY3VycmVudEJsb2Nr
LT5hdChpKTsKKyAgICAgICAgICAgIGlmICghbm9kZS0+c2hvdWxkR2VuZXJhdGUoKSkKICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIHN3aXRjaCAobm9kZS5vcCgpKSB7Cisg
ICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKICAgICAgICAgICAgIGNhc2UgR2V0QXJy
YXlMZW5ndGg6Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGUuY2hpbGQxKCkgPT0gYXJyYXkpCi0g
ICAgICAgICAgICAgICAgICAgIHJldHVybiBpbmRleDsKKyAgICAgICAgICAgICAgICBpZiAobm9k
ZS0+Y2hpbGQxKCkgPT0gYXJyYXkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBub2RlOwog
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgY2Fz
ZSBQdXRCeVZhbDoKICAgICAgICAgICAgICAgICBpZiAoIW1fZ3JhcGguYnlWYWxJc1B1cmUobm9k
ZSkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBOb05vZGU7Ci0gICAgICAgICAgICAgICAg
aWYgKG5vZGUuYXJyYXlNb2RlKCkubWF5U3RvcmVUb0hvbGUoKSkKLSAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIE5vTm9kZTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAg
ICAgICAgICAgaWYgKG5vZGUtPmFycmF5TW9kZSgpLm1heVN0b3JlVG9Ib2xlKCkpCisgICAgICAg
ICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgICAgIAogICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBpZiAobV9ncmFw
aC5jbG9iYmVyc1dvcmxkKGluZGV4KSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5vTm9k
ZTsKKyAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC5jbG9iYmVyc1dvcmxkKG5vZGUpKQorICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAg
ICAgICByZXR1cm4gTm9Ob2RlOworICAgICAgICByZXR1cm4gMDsKICAgICB9CiAgICAgCi0gICAg
Tm9kZUluZGV4IGdsb2JhbFZhckxvYWRFbGltaW5hdGlvbihXcml0ZUJhcnJpZXI8VW5rbm93bj4q
IHJlZ2lzdGVyUG9pbnRlcikKKyAgICBOb2RlKiBnbG9iYWxWYXJMb2FkRWxpbWluYXRpb24oV3Jp
dGVCYXJyaWVyPFVua25vd24+KiByZWdpc3RlclBvaW50ZXIpCiAgICAgewogICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSBtX2luZGV4SW5CbG9jazsgaS0tOykgewotICAgICAgICAgICAgTm9kZUlu
ZGV4IGluZGV4ID0gbV9jdXJyZW50QmxvY2stPmF0KGkpOwotICAgICAgICAgICAgTm9kZSYgbm9k
ZSA9IG1fZ3JhcGhbaW5kZXhdOwotICAgICAgICAgICAgaWYgKCFub2RlLnNob3VsZEdlbmVyYXRl
KCkpCisgICAgICAgICAgICBOb2RlKiBub2RlID0gbV9jdXJyZW50QmxvY2stPmF0KGkpOworICAg
ICAgICAgICAgaWYgKCFub2RlLT5zaG91bGRHZW5lcmF0ZSgpKQogICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwotICAgICAgICAgICAgc3dpdGNoIChub2RlLm9wKCkpIHsKKyAgICAgICAgICAgIHN3
aXRjaCAobm9kZS0+b3AoKSkgewogICAgICAgICAgICAgY2FzZSBHZXRHbG9iYWxWYXI6Ci0gICAg
ICAgICAgICAgICAgaWYgKG5vZGUucmVnaXN0ZXJQb2ludGVyKCkgPT0gcmVnaXN0ZXJQb2ludGVy
KQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW5kZXg7CisgICAgICAgICAgICAgICAgaWYg
KG5vZGUtPnJlZ2lzdGVyUG9pbnRlcigpID09IHJlZ2lzdGVyUG9pbnRlcikKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIG5vZGU7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICBjYXNlIFB1dEdsb2JhbFZhcjoKLSAgICAgICAgICAgICAgICBpZiAobm9kZS5yZWdpc3RlclBv
aW50ZXIoKSA9PSByZWdpc3RlclBvaW50ZXIpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBu
b2RlLmNoaWxkMSgpLmluZGV4KCk7CisgICAgICAgICAgICAgICAgaWYgKG5vZGUtPnJlZ2lzdGVy
UG9pbnRlcigpID09IHJlZ2lzdGVyUG9pbnRlcikKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBpZiAobV9ncmFwaC5jbG9iYmVyc1dvcmxkKGluZGV4KSkKKyAgICAgICAgICAgIGlm
IChtX2dyYXBoLmNsb2JiZXJzV29ybGQobm9kZSkpCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIH0KLSAgICAgICAgcmV0dXJuIE5vTm9kZTsKKyAgICAgICAgcmV0dXJuIDA7CiAgICAg
fQogICAgIAotICAgIE5vZGVJbmRleCBzY29wZWRWYXJMb2FkRWxpbWluYXRpb24oTm9kZUluZGV4
IHJlZ2lzdGVycywgdW5zaWduZWQgdmFyTnVtYmVyKQorICAgIE5vZGUqIHNjb3BlZFZhckxvYWRF
bGltaW5hdGlvbihOb2RlKiByZWdpc3RlcnMsIHVuc2lnbmVkIHZhck51bWJlcikKICAgICB7CiAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1faW5kZXhJbkJsb2NrOyBpLS07KSB7Ci0gICAgICAg
ICAgICBOb2RlSW5kZXggaW5kZXggPSBtX2N1cnJlbnRCbG9jay0+YXQoaSk7Ci0gICAgICAgICAg
ICBOb2RlJiBub2RlID0gbV9ncmFwaFtpbmRleF07Ci0gICAgICAgICAgICBpZiAoIW5vZGUuc2hv
dWxkR2VuZXJhdGUoKSkKKyAgICAgICAgICAgIE5vZGUqID0gbV9jdXJyZW50QmxvY2stPmF0KGkp
OworICAgICAgICAgICAgaWYgKCFub2RlLT5zaG91bGRHZW5lcmF0ZSgpKQogICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgc3dpdGNoIChub2RlLm9wKCkpIHsKKyAgICAgICAg
ICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewogICAgICAgICAgICAgY2FzZSBHZXRTY29wZWRWYXI6
IHsKLSAgICAgICAgICAgICAgICBpZiAobm9kZS5jaGlsZDEoKSA9PSByZWdpc3RlcnMgJiYgbm9k
ZS52YXJOdW1iZXIoKSA9PSB2YXJOdW1iZXIpCisgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmNo
aWxkMSgpID09IHJlZ2lzdGVycyAmJiBub2RlLnZhck51bWJlcigpID09IHZhck51bWJlcikKICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGluZGV4OwogICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgfSAKICAgICAgICAgICAgIGNhc2UgUHV0U2NvcGVkVmFyOiB7Ci0gICAgICAg
ICAgICAgICAgaWYgKG5vZGUuY2hpbGQyKCkgPT0gcmVnaXN0ZXJzICYmIG5vZGUudmFyTnVtYmVy
KCkgPT0gdmFyTnVtYmVyKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gbm9kZS5jaGlsZDMo
KS5pbmRleCgpOworICAgICAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDIoKSA9PSByZWdpc3Rl
cnMgJiYgbm9kZS52YXJOdW1iZXIoKSA9PSB2YXJOdW1iZXIpCisgICAgICAgICAgICAgICAgICAg
IHJldHVybiBub2RlLT5jaGlsZDMoKS5ub2RlKCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICBjYXNlIFNldExvY2FsOiB7Ci0gICAgICAgICAgICAg
ICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBub2RlLnZhcmlhYmxl
QWNjZXNzRGF0YSgpOworICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFi
bGVBY2Nlc3NEYXRhID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CiAgICAgICAgICAgICAg
ICAgaWYgKHZhcmlhYmxlQWNjZXNzRGF0YS0+aXNDYXB0dXJlZCgpCiAgICAgICAgICAgICAgICAg
ICAgICYmIHZhcmlhYmxlQWNjZXNzRGF0YS0+bG9jYWwoKSA9PSBzdGF0aWNfY2FzdDxWaXJ0dWFs
UmVnaXN0ZXI+KHZhck51bWJlcikpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBOb05vZGU7
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgfQogICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChtX2dyYXBoLmNsb2JiZXJzV29ybGQo
aW5kZXgpKQorICAgICAgICAgICAgaWYgKG1fZ3JhcGguY2xvYmJlcnNXb3JsZChub2RlKSkKICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICByZXR1cm4gTm9Ob2RlOwor
ICAgICAgICByZXR1cm4gMDsKICAgICB9CiAgICAgCiAgICAgYm9vbCBnbG9iYWxWYXJXYXRjaHBv
aW50RWxpbWluYXRpb24oV3JpdGVCYXJyaWVyPFVua25vd24+KiByZWdpc3RlclBvaW50ZXIpCiAg
ICAgewogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2luZGV4SW5CbG9jazsgaS0tOykgewot
ICAgICAgICAgICAgTm9kZUluZGV4IGluZGV4ID0gbV9jdXJyZW50QmxvY2stPmF0KGkpOwotICAg
ICAgICAgICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhbaW5kZXhdOwotICAgICAgICAgICAgaWYgKCFu
b2RlLnNob3VsZEdlbmVyYXRlKCkpCisgICAgICAgICAgICBOb2RlKiBub2RlID0gbV9jdXJyZW50
QmxvY2stPmF0KGkpOworICAgICAgICAgICAgaWYgKCFub2RlLT5zaG91bGRHZW5lcmF0ZSgpKQog
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgc3dpdGNoIChub2RlLm9wKCkp
IHsKKyAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewogICAgICAgICAgICAgY2FzZSBH
bG9iYWxWYXJXYXRjaHBvaW50OgotICAgICAgICAgICAgICAgIGlmIChub2RlLnJlZ2lzdGVyUG9p
bnRlcigpID09IHJlZ2lzdGVyUG9pbnRlcikKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+cmVn
aXN0ZXJQb2ludGVyKCkgPT0gcmVnaXN0ZXJQb2ludGVyKQogICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgUHV0
R2xvYmFsVmFyOgotICAgICAgICAgICAgICAgIGlmIChub2RlLnJlZ2lzdGVyUG9pbnRlcigpID09
IHJlZ2lzdGVyUG9pbnRlcikKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+cmVnaXN0ZXJQb2lu
dGVyKCkgPT0gcmVnaXN0ZXJQb2ludGVyKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKG1fZ3JhcGgu
Y2xvYmJlcnNXb3JsZChpbmRleCkpCisgICAgICAgICAgICBpZiAobV9ncmFwaC5jbG9iYmVyc1dv
cmxkKG5vZGUpKQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICB9CiAgICAgCi0gICAgTm9kZUluZGV4IGdsb2JhbFZhclN0b3JlRWxp
bWluYXRpb24oV3JpdGVCYXJyaWVyPFVua25vd24+KiByZWdpc3RlclBvaW50ZXIpCisgICAgTm9k
ZSogZ2xvYmFsVmFyU3RvcmVFbGltaW5hdGlvbihXcml0ZUJhcnJpZXI8VW5rbm93bj4qIHJlZ2lz
dGVyUG9pbnRlcikKICAgICB7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1faW5kZXhJbkJs
b2NrOyBpLS07KSB7Ci0gICAgICAgICAgICBOb2RlSW5kZXggaW5kZXggPSBtX2N1cnJlbnRCbG9j
ay0+YXQoaSk7Ci0gICAgICAgICAgICBOb2RlJiBub2RlID0gbV9ncmFwaFtpbmRleF07Ci0gICAg
ICAgICAgICBpZiAoIW5vZGUuc2hvdWxkR2VuZXJhdGUoKSkKKyAgICAgICAgICAgIE5vZGUqIG5v
ZGUgPSBtX2N1cnJlbnRCbG9jay0+YXQoaSk7CisgICAgICAgICAgICBpZiAoIW5vZGUtPnNob3Vs
ZEdlbmVyYXRlKCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBzd2l0
Y2ggKG5vZGUub3AoKSkgeworICAgICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CiAgICAg
ICAgICAgICBjYXNlIFB1dEdsb2JhbFZhcjoKICAgICAgICAgICAgIGNhc2UgUHV0R2xvYmFsVmFy
Q2hlY2s6Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGUucmVnaXN0ZXJQb2ludGVyKCkgPT0gcmVn
aXN0ZXJQb2ludGVyKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW5kZXg7CisgICAgICAg
ICAgICAgICAgaWYgKG5vZGUtPnJlZ2lzdGVyUG9pbnRlcigpID09IHJlZ2lzdGVyUG9pbnRlcikK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGU7CiAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBjYXNlIEdldEdsb2JhbFZhcjoKLSAgICAg
ICAgICAgICAgICBpZiAobm9kZS5yZWdpc3RlclBvaW50ZXIoKSA9PSByZWdpc3RlclBvaW50ZXIp
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBOb05vZGU7CisgICAgICAgICAgICAgICAgaWYg
KG5vZGUtPnJlZ2lzdGVyUG9pbnRlcigpID09IHJlZ2lzdGVyUG9pbnRlcikKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAg
ICAgCiAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgfQotICAgICAgICAgICAgaWYgKG1fZ3JhcGguY2xvYmJlcnNXb3JsZChpbmRleCkgfHwg
bm9kZS5jYW5FeGl0KCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIE5vTm9kZTsKKyAgICAgICAg
ICAgIGlmIChtX2dyYXBoLmNsb2JiZXJzV29ybGQobm9kZSkgfHwgbm9kZS0+Y2FuRXhpdCgpKQor
ICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICB9Ci0gICAgICAgIHJldHVybiBOb05v
ZGU7CisgICAgICAgIHJldHVybiAwOwogICAgIH0KICAgICAKLSAgICBOb2RlSW5kZXggc2NvcGVk
VmFyU3RvcmVFbGltaW5hdGlvbihOb2RlSW5kZXggc2NvcGUsIE5vZGVJbmRleCByZWdpc3RlcnMs
IHVuc2lnbmVkIHZhck51bWJlcikKKyAgICBOb2RlKiBzY29wZWRWYXJTdG9yZUVsaW1pbmF0aW9u
KE5vZGUqIHNjb3BlLCBOb2RlKiByZWdpc3RlcnMsIHVuc2lnbmVkIHZhck51bWJlcikKICAgICB7
CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1faW5kZXhJbkJsb2NrOyBpLS07KSB7Ci0gICAg
ICAgICAgICBOb2RlSW5kZXggaW5kZXggPSBtX2N1cnJlbnRCbG9jay0+YXQoaSk7Ci0gICAgICAg
ICAgICBOb2RlJiBub2RlID0gbV9ncmFwaFtpbmRleF07Ci0gICAgICAgICAgICBpZiAoIW5vZGUu
c2hvdWxkR2VuZXJhdGUoKSkKKyAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBtX2N1cnJlbnRCbG9j
ay0+YXQoaSk7CisgICAgICAgICAgICBpZiAoIW5vZGUtPnNob3VsZEdlbmVyYXRlKCkpCiAgICAg
ICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBzd2l0Y2ggKG5vZGUub3AoKSkgewor
ICAgICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CiAgICAgICAgICAgICBjYXNlIFB1dFNj
b3BlZFZhcjogewotICAgICAgICAgICAgICAgIGlmIChub2RlLmNoaWxkMSgpID09IHNjb3BlICYm
IG5vZGUuY2hpbGQyKCkgPT0gcmVnaXN0ZXJzICYmIG5vZGUudmFyTnVtYmVyKCkgPT0gdmFyTnVt
YmVyKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW5kZXg7CisgICAgICAgICAgICAgICAg
aWYgKG5vZGUtPmNoaWxkMSgpID09IHNjb3BlICYmIG5vZGUtPmNoaWxkMigpID09IHJlZ2lzdGVy
cyAmJiBub2RlLnZhck51bWJlcigpID09IHZhck51bWJlcikKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIG5vZGU7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICAgCiAgICAgICAgICAgICBjYXNlIEdldFNjb3BlZFZhcjogewogICAgICAgICAg
ICAgICAgIC8vIExldCdzIGJlIGNvbnNlcnZhdGl2ZS4KLSAgICAgICAgICAgICAgICBpZiAobm9k
ZS52YXJOdW1iZXIoKSA9PSB2YXJOdW1iZXIpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBO
b05vZGU7CisgICAgICAgICAgICAgICAgaWYgKG5vZGUtPnZhck51bWJlcigpID09IHZhck51bWJl
cikKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCkBAIC0zNDQsNDYgKzM0MCw0NSBAQCBw
cml2YXRlOgogICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nl
c3NEYXRhID0gbm9kZS52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKICAgICAgICAgICAgICAgICBpZiAo
dmFyaWFibGVBY2Nlc3NEYXRhLT5pc0NhcHR1cmVkKCkKICAgICAgICAgICAgICAgICAgICAgJiYg
dmFyaWFibGVBY2Nlc3NEYXRhLT5sb2NhbCgpID09IHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rl
cj4odmFyTnVtYmVyKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5vTm9kZTsKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICB9CiAKICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAobV9ncmFwaC5jbG9iYmVyc1dvcmxkKGluZGV4
KSB8fCBub2RlLmNhbkV4aXQoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gTm9Ob2RlOworICAg
ICAgICAgICAgaWYgKG1fZ3JhcGguY2xvYmJlcnNXb3JsZChub2RlKSB8fCBub2RlLT5jYW5FeGl0
KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJu
IE5vTm9kZTsKKyAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogICAgIAotICAgIE5vZGVJbmRleCBn
ZXRCeVZhbExvYWRFbGltaW5hdGlvbihOb2RlSW5kZXggY2hpbGQxLCBOb2RlSW5kZXggY2hpbGQy
KQorICAgIE5vZGUqIGdldEJ5VmFsTG9hZEVsaW1pbmF0aW9uKE5vZGUqIGNoaWxkMSwgTm9kZSog
Y2hpbGQyKQogICAgIHsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9pbmRleEluQmxvY2s7
IGktLTspIHsKLSAgICAgICAgICAgIE5vZGVJbmRleCBpbmRleCA9IG1fY3VycmVudEJsb2NrLT5h
dChpKTsKLSAgICAgICAgICAgIGlmIChpbmRleCA9PSBjaGlsZDEgfHwgaW5kZXggPT0gY2Fub25p
Y2FsaXplKGNoaWxkMikpIAorICAgICAgICAgICAgTm9kZSogbm9kZSA9IG1fY3VycmVudEJsb2Nr
LT5hdChpKTsKKyAgICAgICAgICAgIGlmIChub2RlID09IGNoaWxkMSB8fCBub2RlID09IGNhbm9u
aWNhbGl6ZShjaGlsZDIpKSAKICAgICAgICAgICAgICAgICBicmVhazsKIAotICAgICAgICAgICAg
Tm9kZSYgbm9kZSA9IG1fZ3JhcGhbaW5kZXhdOwotICAgICAgICAgICAgaWYgKCFub2RlLnNob3Vs
ZEdlbmVyYXRlKCkpCisgICAgICAgICAgICBpZiAoIW5vZGUtPnNob3VsZEdlbmVyYXRlKCkpCiAg
ICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBzd2l0Y2ggKG5vZGUub3AoKSkg
eworICAgICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CiAgICAgICAgICAgICBjYXNlIEdl
dEJ5VmFsOgogICAgICAgICAgICAgICAgIGlmICghbV9ncmFwaC5ieVZhbElzUHVyZShub2RlKSkK
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5vTm9kZTsKLSAgICAgICAgICAgICAgICBpZiAo
bm9kZS5jaGlsZDEoKSA9PSBjaGlsZDEgJiYgY2Fub25pY2FsaXplKG5vZGUuY2hpbGQyKCkpID09
IGNhbm9uaWNhbGl6ZShjaGlsZDIpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW5kZXg7
CisgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpID09IGNoaWxkMSAmJiBjYW5vbmlj
YWxpemUobm9kZS0+Y2hpbGQyKCkpID09IGNhbm9uaWNhbGl6ZShjaGlsZDIpKQorICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gbm9kZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgIGNhc2UgUHV0QnlWYWw6CiAgICAgICAgICAgICBjYXNlIFB1dEJ5VmFsQWxpYXM6IHsKICAg
ICAgICAgICAgICAgICBpZiAoIW1fZ3JhcGguYnlWYWxJc1B1cmUobm9kZSkpCi0gICAgICAgICAg
ICAgICAgICAgIHJldHVybiBOb05vZGU7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwog
ICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApID09IGNoaWxk
MSAmJiBjYW5vbmljYWxpemUobV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSkgPT0gY2Fub25p
Y2FsaXplKGNoaWxkMikpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBtX2dyYXBoLnZhckFy
Z0NoaWxkKG5vZGUsIDIpLmluZGV4KCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBtX2dy
YXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpLm5vZGUoKTsKICAgICAgICAgICAgICAgICAvLyBXZSBt
dXN0IGFzc3VtZSB0aGF0IHRoZSBQdXRCeVZhbCB3aWxsIGNsb2JiZXIgdGhlIGxvY2F0aW9uIHdl
J3JlIGdldHRpbmcgZnJvbS4KICAgICAgICAgICAgICAgICAvLyBGSVhNRTogV2UgY2FuIGRvIGJl
dHRlcjsgaWYgd2Uga25vdyB0aGF0IHRoZSBQdXRCeVZhbCBpcyBhY2Nlc3NpbmcgYW4gYXJyYXkg
b2YgYQogICAgICAgICAgICAgICAgIC8vIGRpZmZlcmVudCB0eXBlIHRoYW4gdGhlIEdldEJ5VmFs
LCB0aGVuIHdlIGtub3cgdGhhdCB0aGV5IHdvbid0IGNsb2JiZXIgZWFjaCBvdGhlci4KLSAgICAg
ICAgICAgICAgICByZXR1cm4gTm9Ob2RlOworICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAg
ICAgICAgICAgfQogICAgICAgICAgICAgY2FzZSBQdXRTdHJ1Y3R1cmU6CiAgICAgICAgICAgICBj
YXNlIFB1dEJ5T2Zmc2V0OgpAQCAtMzkzLDcyICszODgsNjkgQEAgcHJpdmF0ZToKICAgICAgICAg
ICAgICAgICAvLyB0aGUgR2V0QnlWYWwuCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLmNsb2JiZXJzV29ybGQo
aW5kZXgpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gTm9Ob2RlOworICAgICAgICAgICAg
ICAgIGlmIChtX2dyYXBoLmNsb2JiZXJzV29ybGQobm9kZSkpCisgICAgICAgICAgICAgICAgICAg
IHJldHVybiAwOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAg
ICB9Ci0gICAgICAgIHJldHVybiBOb05vZGU7CisgICAgICAgIHJldHVybiAwOwogICAgIH0KIAot
ICAgIGJvb2wgY2hlY2tGdW5jdGlvbkVsaW1pbmF0aW9uKEpTQ2VsbCogZnVuY3Rpb24sIE5vZGVJ
bmRleCBjaGlsZDEpCisgICAgYm9vbCBjaGVja0Z1bmN0aW9uRWxpbWluYXRpb24oSlNDZWxsKiBm
dW5jdGlvbiwgTm9kZSogY2hpbGQxKQogICAgIHsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
ZW5kSW5kZXhGb3JQdXJlQ1NFKCk7IGktLTspIHsKLSAgICAgICAgICAgIE5vZGVJbmRleCBpbmRl
eCA9IG1fY3VycmVudEJsb2NrLT5hdChpKTsKLSAgICAgICAgICAgIGlmIChpbmRleCA9PSBjaGls
ZDEpIAorICAgICAgICAgICAgTm9kZSogbm9kZSA9IG1fY3VycmVudEJsb2NrLT5hdChpKTsKKyAg
ICAgICAgICAgIGlmIChub2RlID09IGNoaWxkMSkgCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAK
LSAgICAgICAgICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW2luZGV4XTsKLSAgICAgICAgICAgIGlm
IChub2RlLm9wKCkgPT0gQ2hlY2tGdW5jdGlvbiAmJiBub2RlLmNoaWxkMSgpID09IGNoaWxkMSAm
JiBub2RlLmZ1bmN0aW9uKCkgPT0gZnVuY3Rpb24pCisgICAgICAgICAgICBpZiAobm9kZS0+b3Ao
KSA9PSBDaGVja0Z1bmN0aW9uICYmIG5vZGUtPmNoaWxkMSgpID09IGNoaWxkMSAmJiBub2RlLT5m
dW5jdGlvbigpID09IGZ1bmN0aW9uKQogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAg
ICAgICB9CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgCi0gICAgYm9vbCBjaGVj
a0V4ZWN1dGFibGVFbGltaW5hdGlvbihFeGVjdXRhYmxlQmFzZSogZXhlY3V0YWJsZSwgTm9kZUlu
ZGV4IGNoaWxkMSkKKyAgICBib29sIGNoZWNrRXhlY3V0YWJsZUVsaW1pbmF0aW9uKEV4ZWN1dGFi
bGVCYXNlKiBleGVjdXRhYmxlLCBOb2RlKiBjaGlsZDEpCiAgICAgewogICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSBlbmRJbmRleEZvclB1cmVDU0UoKTsgaS0tOykgewotICAgICAgICAgICAgTm9k
ZUluZGV4IGluZGV4ID0gbV9jdXJyZW50QmxvY2stPmF0KGkpOwotICAgICAgICAgICAgaWYgKGlu
ZGV4ID09IGNoaWxkMSkKKyAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBtX2N1cnJlbnRCbG9jay0+
YXQoaSk7CisgICAgICAgICAgICBpZiAobm9kZSA9PSBjaGlsZDEpCiAgICAgICAgICAgICAgICAg
YnJlYWs7CiAKLSAgICAgICAgICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW2luZGV4XTsKLSAgICAg
ICAgICAgIGlmIChub2RlLm9wKCkgPT0gQ2hlY2tFeGVjdXRhYmxlICYmIG5vZGUuY2hpbGQxKCkg
PT0gY2hpbGQxICYmIG5vZGUuZXhlY3V0YWJsZSgpID09IGV4ZWN1dGFibGUpCisgICAgICAgICAg
ICBpZiAobm9kZS0+b3AoKSA9PSBDaGVja0V4ZWN1dGFibGUgJiYgbm9kZS0+Y2hpbGQxKCkgPT0g
Y2hpbGQxICYmIG5vZGUtPmV4ZWN1dGFibGUoKSA9PSBleGVjdXRhYmxlKQogICAgICAgICAgICAg
ICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9
CiAKLSAgICBib29sIGNoZWNrU3RydWN0dXJlRWxpbWluYXRpb24oY29uc3QgU3RydWN0dXJlU2V0
JiBzdHJ1Y3R1cmVTZXQsIE5vZGVJbmRleCBjaGlsZDEpCisgICAgYm9vbCBjaGVja1N0cnVjdHVy
ZUVsaW1pbmF0aW9uKGNvbnN0IFN0cnVjdHVyZVNldCYgc3RydWN0dXJlU2V0LCBOb2RlKiBjaGls
ZDEpCiAgICAgewogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2luZGV4SW5CbG9jazsgaS0t
OykgewotICAgICAgICAgICAgTm9kZUluZGV4IGluZGV4ID0gbV9jdXJyZW50QmxvY2stPmF0KGkp
OwotICAgICAgICAgICAgaWYgKGluZGV4ID09IGNoaWxkMSkgCisgICAgICAgICAgICBOb2RlKiBu
b2RlID0gbV9jdXJyZW50QmxvY2stPmF0KGkpOworICAgICAgICAgICAgaWYgKG5vZGUgPT0gY2hp
bGQxKSAKICAgICAgICAgICAgICAgICBicmVhazsKIAotICAgICAgICAgICAgTm9kZSYgbm9kZSA9
IG1fZ3JhcGhbaW5kZXhdOwotICAgICAgICAgICAgaWYgKCFub2RlLnNob3VsZEdlbmVyYXRlKCkp
CisgICAgICAgICAgICBpZiAoIW5vZGUtPnNob3VsZEdlbmVyYXRlKCkpCiAgICAgICAgICAgICAg
ICAgY29udGludWU7Ci0gICAgICAgICAgICBzd2l0Y2ggKG5vZGUub3AoKSkgeworICAgICAgICAg
ICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CiAgICAgICAgICAgICBjYXNlIENoZWNrU3RydWN0dXJl
OgogICAgICAgICAgICAgY2FzZSBGb3J3YXJkQ2hlY2tTdHJ1Y3R1cmU6Ci0gICAgICAgICAgICAg
ICAgaWYgKG5vZGUuY2hpbGQxKCkgPT0gY2hpbGQxCi0gICAgICAgICAgICAgICAgICAgICYmIHN0
cnVjdHVyZVNldC5pc1N1cGVyc2V0T2Yobm9kZS5zdHJ1Y3R1cmVTZXQoKSkpCisgICAgICAgICAg
ICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpID09IGNoaWxkMQorICAgICAgICAgICAgICAgICAgICAm
JiBzdHJ1Y3R1cmVTZXQuaXNTdXBlcnNldE9mKG5vZGUtPnN0cnVjdHVyZVNldCgpKSkKICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICAgICAgCiAgICAgICAgICAgICBjYXNlIFN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBv
aW50OgogICAgICAgICAgICAgY2FzZSBGb3J3YXJkU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9p
bnQ6Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGUuY2hpbGQxKCkgPT0gY2hpbGQxCi0gICAgICAg
ICAgICAgICAgICAgICYmIHN0cnVjdHVyZVNldC5jb250YWlucyhub2RlLnN0cnVjdHVyZSgpKSkK
KyAgICAgICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCkgPT0gY2hpbGQxCisgICAgICAgICAg
ICAgICAgICAgICYmIHN0cnVjdHVyZVNldC5jb250YWlucyhub2RlLT5zdHJ1Y3R1cmUoKSkpCiAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgY2FzZSBQdXRTdHJ1Y3R1cmU6Ci0gICAgICAg
ICAgICAgICAgaWYgKG5vZGUuY2hpbGQxKCkgPT0gY2hpbGQxCi0gICAgICAgICAgICAgICAgICAg
ICYmIHN0cnVjdHVyZVNldC5jb250YWlucyhub2RlLnN0cnVjdHVyZVRyYW5zaXRpb25EYXRhKCku
bmV3U3RydWN0dXJlKSkKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCkgPT0gY2hp
bGQxCisgICAgICAgICAgICAgICAgICAgICYmIHN0cnVjdHVyZVNldC5jb250YWlucyhub2RlLT5z
dHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSgpLm5ld1N0cnVjdHVyZSkpCiAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgICAgIGlmIChzdHJ1Y3R1cmVTZXQuY29udGFp
bnMobm9kZS5zdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSgpLnByZXZpb3VzU3RydWN0dXJlKSkKKyAg
ICAgICAgICAgICAgICBpZiAoc3RydWN0dXJlU2V0LmNvbnRhaW5zKG5vZGUtPnN0cnVjdHVyZVRy
YW5zaXRpb25EYXRhKCkucHJldmlvdXNTdHJ1Y3R1cmUpKQogICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgCkBA
IC00ODMsNyArNDc1LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAg
IGlmIChtX2dyYXBoLmNsb2JiZXJzV29ybGQoaW5kZXgpKQorICAgICAgICAgICAgICAgIGlmICht
X2dyYXBoLmNsb2JiZXJzV29ybGQobm9kZSkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KQEAgLTQ5MSwyNiAr
NDgzLDI1IEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgCi0g
ICAgYm9vbCBzdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludEVsaW1pbmF0aW9uKFN0cnVjdHVy
ZSogc3RydWN0dXJlLCBOb2RlSW5kZXggY2hpbGQxKQorICAgIGJvb2wgc3RydWN0dXJlVHJhbnNp
dGlvbldhdGNocG9pbnRFbGltaW5hdGlvbihTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgTm9kZSogY2hp
bGQxKQogICAgIHsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9pbmRleEluQmxvY2s7IGkt
LTspIHsKLSAgICAgICAgICAgIE5vZGVJbmRleCBpbmRleCA9IG1fY3VycmVudEJsb2NrLT5hdChp
KTsKLSAgICAgICAgICAgIGlmIChpbmRleCA9PSBjaGlsZDEpIAorICAgICAgICAgICAgTm9kZSog
bm9kZSA9IG1fY3VycmVudEJsb2NrLT5hdChpKTsKKyAgICAgICAgICAgIGlmIChub2RlID09IGNo
aWxkMSkgCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgICAgIE5vZGUmIG5vZGUg
PSBtX2dyYXBoW2luZGV4XTsKLSAgICAgICAgICAgIGlmICghbm9kZS5zaG91bGRHZW5lcmF0ZSgp
KQorICAgICAgICAgICAgaWYgKCFub2RlLT5zaG91bGRHZW5lcmF0ZSgpKQogICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgc3dpdGNoIChub2RlLm9wKCkpIHsKKyAgICAgICAg
ICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewogICAgICAgICAgICAgY2FzZSBDaGVja1N0cnVjdHVy
ZToKICAgICAgICAgICAgIGNhc2UgRm9yd2FyZENoZWNrU3RydWN0dXJlOgotICAgICAgICAgICAg
ICAgIGlmIChub2RlLmNoaWxkMSgpID09IGNoaWxkMQotICAgICAgICAgICAgICAgICAgICAmJiBu
b2RlLnN0cnVjdHVyZVNldCgpLmNvbnRhaW5zT25seShzdHJ1Y3R1cmUpKQorICAgICAgICAgICAg
ICAgIGlmIChub2RlLT5jaGlsZDEoKSA9PSBjaGlsZDEKKyAgICAgICAgICAgICAgICAgICAgJiYg
bm9kZS0+c3RydWN0dXJlU2V0KCkuY29udGFpbnNPbmx5KHN0cnVjdHVyZSkpCiAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgICAgIAogICAgICAgICAgICAgY2FzZSBQdXRTdHJ1Y3R1cmU6Ci0gICAgICAgICAgICAgICAg
QVNTRVJUKG5vZGUuc3RydWN0dXJlVHJhbnNpdGlvbkRhdGEoKS5wcmV2aW91c1N0cnVjdHVyZSAh
PSBzdHJ1Y3R1cmUpOworICAgICAgICAgICAgICAgIEFTU0VSVChub2RlLT5zdHJ1Y3R1cmVUcmFu
c2l0aW9uRGF0YSgpLnByZXZpb3VzU3RydWN0dXJlICE9IHN0cnVjdHVyZSk7CiAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBjYXNlIFB1dEJ5T2Zm
c2V0OgpAQCAtNTI5LDcgKzUyMCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgCiAgICAg
ICAgICAgICBjYXNlIFN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50OgogICAgICAgICAgICAg
Y2FzZSBGb3J3YXJkU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnQ6Ci0gICAgICAgICAgICAg
ICAgaWYgKG5vZGUuc3RydWN0dXJlKCkgPT0gc3RydWN0dXJlICYmIG5vZGUuY2hpbGQxKCkgPT0g
Y2hpbGQxKQorICAgICAgICAgICAgICAgIGlmIChub2RlLT5zdHJ1Y3R1cmUoKSA9PSBzdHJ1Y3R1
cmUgJiYgbm9kZS0+Y2hpbGQxKCkgPT0gY2hpbGQxKQogICAgICAgICAgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAKQEAgLTU0
MCw3ICs1MzEsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICAgICAgICAgICAgICAKICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgaWYg
KG1fZ3JhcGguY2xvYmJlcnNXb3JsZChpbmRleCkpCisgICAgICAgICAgICAgICAgaWYgKG1fZ3Jh
cGguY2xvYmJlcnNXb3JsZChub2RlKSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQpAQCAtNTQ4LDI4ICs1Mzks
MjcgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICAKLSAgICBO
b2RlSW5kZXggcHV0U3RydWN0dXJlU3RvcmVFbGltaW5hdGlvbihOb2RlSW5kZXggY2hpbGQxKQor
ICAgIE5vZGUqIHB1dFN0cnVjdHVyZVN0b3JlRWxpbWluYXRpb24oTm9kZSogY2hpbGQxKQogICAg
IHsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9pbmRleEluQmxvY2s7IGktLTspIHsKLSAg
ICAgICAgICAgIE5vZGVJbmRleCBpbmRleCA9IG1fY3VycmVudEJsb2NrLT5hdChpKTsKLSAgICAg
ICAgICAgIGlmIChpbmRleCA9PSBjaGlsZDEpCisgICAgICAgICAgICBOb2RlKiBub2RlID0gbV9j
dXJyZW50QmxvY2stPmF0KGkpOworICAgICAgICAgICAgaWYgKG5vZGUgPT0gY2hpbGQxKQogICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhbaW5k
ZXhdOwotICAgICAgICAgICAgaWYgKCFub2RlLnNob3VsZEdlbmVyYXRlKCkpCisgICAgICAgICAg
ICBpZiAoIW5vZGUtPnNob3VsZEdlbmVyYXRlKCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7
Ci0gICAgICAgICAgICBzd2l0Y2ggKG5vZGUub3AoKSkgeworICAgICAgICAgICAgc3dpdGNoIChu
b2RlLT5vcCgpKSB7CiAgICAgICAgICAgICBjYXNlIENoZWNrU3RydWN0dXJlOgogICAgICAgICAg
ICAgY2FzZSBGb3J3YXJkQ2hlY2tTdHJ1Y3R1cmU6CiAgICAgICAgICAgICAgICAgcmV0dXJuIE5v
Tm9kZTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGNhc2UgUGhhbnRvbVB1dFN0cnVj
dHVyZToKLSAgICAgICAgICAgICAgICBpZiAobm9kZS5jaGlsZDEoKSA9PSBjaGlsZDEpIC8vIE5v
IG5lZWQgdG8gcmV0cmFjZSBvdXIgc3RlcHMuCisgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmNo
aWxkMSgpID09IGNoaWxkMSkgLy8gTm8gbmVlZCB0byByZXRyYWNlIG91ciBzdGVwcy4KICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIE5vTm9kZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgICAgICAKICAgICAgICAgICAgIGNhc2UgUHV0U3RydWN0dXJlOgotICAgICAgICAg
ICAgICAgIGlmIChub2RlLmNoaWxkMSgpID09IGNoaWxkMSkKLSAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGluZGV4OworICAgICAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKSA9PSBjaGls
ZDEpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBub2RlOwogICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgLy8gUHV0U3RydWN0dXJlIG5lZWRz
IHRvIGV4ZWN1dGUgaWYgd2UgR0MuIEhlbmNlIHRoaXMgbmVlZHMgdG8KQEAgLTU5MSw0NCArNTgx
LDQzIEBAIHByaXZhdGU6CiAgICAgICAgICAgICBjYXNlIEFsbG9jYXRlUHJvcGVydHlTdG9yYWdl
OgogICAgICAgICAgICAgY2FzZSBSZWFsbG9jYXRlUHJvcGVydHlTdG9yYWdlOgogICAgICAgICAg
ICAgY2FzZSBUeXBlT2Y6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIE5vTm9kZTsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGNhc2UgR2V0
SW5kZXhlZFByb3BlcnR5U3RvcmFnZToKLSAgICAgICAgICAgICAgICBpZiAobm9kZS5hcnJheU1v
ZGUoKS5nZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlTWF5VHJpZ2dlckdDKCkpCi0gICAgICAgICAg
ICAgICAgICAgIHJldHVybiBOb05vZGU7CisgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmFycmF5
TW9kZSgpLmdldEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2VNYXlUcmlnZ2VyR0MoKSkKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICAgICAgCiAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgfQotICAgICAgICAgICAgaWYgKG1fZ3JhcGguY2xvYmJlcnNXb3JsZChpbmRleCkg
fHwgbm9kZS5jYW5FeGl0KCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIE5vTm9kZTsKKyAgICAg
ICAgICAgIGlmIChtX2dyYXBoLmNsb2JiZXJzV29ybGQobm9kZSkgfHwgbm9kZS0+Y2FuRXhpdCgp
KQorICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICB9Ci0gICAgICAgIHJldHVybiBO
b05vZGU7CisgICAgICAgIHJldHVybiAwOwogICAgIH0KICAgICAKLSAgICBOb2RlSW5kZXggZ2V0
QnlPZmZzZXRMb2FkRWxpbWluYXRpb24odW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgTm9kZUlu
ZGV4IGNoaWxkMSkKKyAgICBOb2RlKiBnZXRCeU9mZnNldExvYWRFbGltaW5hdGlvbih1bnNpZ25l
ZCBpZGVudGlmaWVyTnVtYmVyLCBOb2RlKiBjaGlsZDEpCiAgICAgewogICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSBtX2luZGV4SW5CbG9jazsgaS0tOykgewotICAgICAgICAgICAgTm9kZUluZGV4
IGluZGV4ID0gbV9jdXJyZW50QmxvY2stPmF0KGkpOwotICAgICAgICAgICAgaWYgKGluZGV4ID09
IGNoaWxkMSkKKyAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBtX2N1cnJlbnRCbG9jay0+YXQoaSk7
CisgICAgICAgICAgICBpZiAobm9kZSA9PSBjaGlsZDEpCiAgICAgICAgICAgICAgICAgYnJlYWs7
CiAKLSAgICAgICAgICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW2luZGV4XTsKLSAgICAgICAgICAg
IGlmICghbm9kZS5zaG91bGRHZW5lcmF0ZSgpKQorICAgICAgICAgICAgaWYgKCFub2RlLT5zaG91
bGRHZW5lcmF0ZSgpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgc3dp
dGNoIChub2RlLm9wKCkpIHsKKyAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewogICAg
ICAgICAgICAgY2FzZSBHZXRCeU9mZnNldDoKLSAgICAgICAgICAgICAgICBpZiAobm9kZS5jaGls
ZDEoKSA9PSBjaGlsZDEKLSAgICAgICAgICAgICAgICAgICAgJiYgbV9ncmFwaC5tX3N0b3JhZ2VB
Y2Nlc3NEYXRhW25vZGUuc3RvcmFnZUFjY2Vzc0RhdGFJbmRleCgpXS5pZGVudGlmaWVyTnVtYmVy
ID09IGlkZW50aWZpZXJOdW1iZXIpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBpbmRleDsK
KyAgICAgICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCkgPT0gY2hpbGQxCisgICAgICAgICAg
ICAgICAgICAgICYmIG1fZ3JhcGgubV9zdG9yYWdlQWNjZXNzRGF0YVtub2RlLT5zdG9yYWdlQWNj
ZXNzRGF0YUluZGV4KCldLmlkZW50aWZpZXJOdW1iZXIgPT0gaWRlbnRpZmllck51bWJlcikKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGU7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBjYXNlIFB1dEJ5T2Zmc2V0OgotICAgICAgICAg
ICAgICAgIGlmIChtX2dyYXBoLm1fc3RvcmFnZUFjY2Vzc0RhdGFbbm9kZS5zdG9yYWdlQWNjZXNz
RGF0YUluZGV4KCldLmlkZW50aWZpZXJOdW1iZXIgPT0gaWRlbnRpZmllck51bWJlcikgewotICAg
ICAgICAgICAgICAgICAgICBpZiAobm9kZS5jaGlsZDEoKSA9PSBjaGlsZDEpIC8vIE11c3QgYmUg
c2FtZSBwcm9wZXJ0eSBzdG9yYWdlLgotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5v
ZGUuY2hpbGQzKCkuaW5kZXgoKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5vTm9kZTsK
KyAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC5tX3N0b3JhZ2VBY2Nlc3NEYXRhW25vZGUtPnN0
b3JhZ2VBY2Nlc3NEYXRhSW5kZXgoKV0uaWRlbnRpZmllck51bWJlciA9PSBpZGVudGlmaWVyTnVt
YmVyKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKSA9PSBjaGlsZDEp
IC8vIE11c3QgYmUgc2FtZSBwcm9wZXJ0eSBzdG9yYWdlLgorICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIG5vZGUtPmNoaWxkMygpLm5vZGUoKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIDA7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgICAgIApAQCAtNjQ0LDM4ICs2MzMsMzcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAg
ICAgICAgLy8gY2hhbmdlLgogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJuIE5vTm9kZTsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gMDsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAg
ICAgICAgICAgaWYgKG1fZ3JhcGguY2xvYmJlcnNXb3JsZChpbmRleCkpCi0gICAgICAgICAgICAg
ICAgICAgIHJldHVybiBOb05vZGU7CisgICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGguY2xvYmJl
cnNXb3JsZChub2RlKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIE5v
Tm9kZTsKKyAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogICAgIAotICAgIE5vZGVJbmRleCBwdXRC
eU9mZnNldFN0b3JlRWxpbWluYXRpb24odW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgTm9kZUlu
ZGV4IGNoaWxkMSkKKyAgICBOb2RlKiBwdXRCeU9mZnNldFN0b3JlRWxpbWluYXRpb24odW5zaWdu
ZWQgaWRlbnRpZmllck51bWJlciwgTm9kZSogY2hpbGQxKQogICAgIHsKICAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gbV9pbmRleEluQmxvY2s7IGktLTspIHsKLSAgICAgICAgICAgIE5vZGVJbmRl
eCBpbmRleCA9IG1fY3VycmVudEJsb2NrLT5hdChpKTsKLSAgICAgICAgICAgIGlmIChpbmRleCA9
PSBjaGlsZDEpCisgICAgICAgICAgICBOb2RlKiBub2RlID0gbV9jdXJyZW50QmxvY2stPmF0KGkp
OworICAgICAgICAgICAgaWYgKG5vZGUgPT0gY2hpbGQxKQogICAgICAgICAgICAgICAgIGJyZWFr
OwogCi0gICAgICAgICAgICBOb2RlJiBub2RlID0gbV9ncmFwaFtpbmRleF07Ci0gICAgICAgICAg
ICBpZiAoIW5vZGUuc2hvdWxkR2VuZXJhdGUoKSkKKyAgICAgICAgICAgIGlmICghbm9kZS0+c2hv
dWxkR2VuZXJhdGUoKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIHN3
aXRjaCAobm9kZS5vcCgpKSB7CisgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKICAg
ICAgICAgICAgIGNhc2UgR2V0QnlPZmZzZXQ6Ci0gICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGgu
bV9zdG9yYWdlQWNjZXNzRGF0YVtub2RlLnN0b3JhZ2VBY2Nlc3NEYXRhSW5kZXgoKV0uaWRlbnRp
Zmllck51bWJlciA9PSBpZGVudGlmaWVyTnVtYmVyKQotICAgICAgICAgICAgICAgICAgICByZXR1
cm4gTm9Ob2RlOworICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLm1fc3RvcmFnZUFjY2Vzc0Rh
dGFbbm9kZS0+c3RvcmFnZUFjY2Vzc0RhdGFJbmRleCgpXS5pZGVudGlmaWVyTnVtYmVyID09IGlk
ZW50aWZpZXJOdW1iZXIpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgY2FzZSBQdXRCeU9m
ZnNldDoKLSAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC5tX3N0b3JhZ2VBY2Nlc3NEYXRhW25v
ZGUuc3RvcmFnZUFjY2Vzc0RhdGFJbmRleCgpXS5pZGVudGlmaWVyTnVtYmVyID09IGlkZW50aWZp
ZXJOdW1iZXIpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUuY2hpbGQxKCkgPT0gY2hp
bGQxKSAvLyBNdXN0IGJlIHNhbWUgcHJvcGVydHkgc3RvcmFnZS4KLSAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBpbmRleDsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5vTm9kZTsK
KyAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC5tX3N0b3JhZ2VBY2Nlc3NEYXRhW25vZGUtPnN0
b3JhZ2VBY2Nlc3NEYXRhSW5kZXgoKV0uaWRlbnRpZmllck51bWJlciA9PSBpZGVudGlmaWVyTnVt
YmVyKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKSA9PSBjaGlsZDEp
IC8vIE11c3QgYmUgc2FtZSBwcm9wZXJ0eSBzdG9yYWdlLgorICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIG5vZGU7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAKQEAgLTY4
OCw0NSArNjc2LDQ0IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgIC8vIGNoYW5nZS4K
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgIHJldHVybiBOb05vZGU7CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAg
ICAgICAgICAgCiAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIGlmIChtX2dy
YXBoLmNsb2JiZXJzV29ybGQoaW5kZXgpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gTm9O
b2RlOworICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLmNsb2JiZXJzV29ybGQobm9kZSkpCisg
ICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgfQotICAgICAgICAgICAgaWYgKG5vZGUuY2FuRXhpdCgpKQotICAgICAgICAgICAg
ICAgIHJldHVybiBOb05vZGU7CisgICAgICAgICAgICBpZiAobm9kZS0+Y2FuRXhpdCgpKQorICAg
ICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICB9Ci0gICAgICAgIHJldHVybiBOb05vZGU7
CisgICAgICAgIHJldHVybiAwOwogICAgIH0KICAgICAKLSAgICBOb2RlSW5kZXggZ2V0UHJvcGVy
dHlTdG9yYWdlTG9hZEVsaW1pbmF0aW9uKE5vZGVJbmRleCBjaGlsZDEpCisgICAgTm9kZSogZ2V0
UHJvcGVydHlTdG9yYWdlTG9hZEVsaW1pbmF0aW9uKE5vZGUqIGNoaWxkMSkKICAgICB7CiAgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IG1faW5kZXhJbkJsb2NrOyBpLS07KSB7Ci0gICAgICAgICAg
ICBOb2RlSW5kZXggaW5kZXggPSBtX2N1cnJlbnRCbG9jay0+YXQoaSk7Ci0gICAgICAgICAgICBp
ZiAoaW5kZXggPT0gY2hpbGQxKSAKKyAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBtX2N1cnJlbnRC
bG9jay0+YXQoaSk7CisgICAgICAgICAgICBpZiAobm9kZSA9PSBjaGlsZDEpIAogICAgICAgICAg
ICAgICAgIGJyZWFrOwogCi0gICAgICAgICAgICBOb2RlJiBub2RlID0gbV9ncmFwaFtpbmRleF07
Ci0gICAgICAgICAgICBpZiAoIW5vZGUuc2hvdWxkR2VuZXJhdGUoKSkKKyAgICAgICAgICAgIGlm
ICghbm9kZS0+c2hvdWxkR2VuZXJhdGUoKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAg
ICAgICAgICAgIHN3aXRjaCAobm9kZS5vcCgpKSB7CisgICAgICAgICAgICBzd2l0Y2ggKG5vZGUt
Pm9wKCkpIHsKICAgICAgICAgICAgIGNhc2UgR2V0QnV0dGVyZmx5OgotICAgICAgICAgICAgICAg
IGlmIChub2RlLmNoaWxkMSgpID09IGNoaWxkMSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGluZGV4OworICAgICAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKSA9PSBjaGlsZDEpCisg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBub2RlOwogICAgICAgICAgICAgICAgIGJyZWFrOwog
CiAgICAgICAgICAgICBjYXNlIEFsbG9jYXRlUHJvcGVydHlTdG9yYWdlOgogICAgICAgICAgICAg
Y2FzZSBSZWFsbG9jYXRlUHJvcGVydHlTdG9yYWdlOgogICAgICAgICAgICAgICAgIC8vIElmIHdl
IGNhbiBjaGVhcGx5IHByb3ZlIHRoaXMgaXMgYSBjaGFuZ2UgdG8gb3VyIG9iamVjdCdzIHN0b3Jh
Z2UsIHdlCiAgICAgICAgICAgICAgICAgLy8gY2FuIG9wdGltaXplIGFuZCB1c2UgaXRzIHJlc3Vs
dC4KLSAgICAgICAgICAgICAgICBpZiAobm9kZS5jaGlsZDEoKSA9PSBjaGlsZDEpCi0gICAgICAg
ICAgICAgICAgICAgIHJldHVybiBpbmRleDsKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+Y2hp
bGQxKCkgPT0gY2hpbGQxKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gbm9kZTsKICAgICAg
ICAgICAgICAgICAvLyBPdGhlcndpc2UsIHdlIGN1cnJlbnRseSBjYW4ndCBwcm92ZSB0aGF0IHRo
aXMgZG9lc24ndCBjaGFuZ2Ugb3VyIG9iamVjdCdzCiAgICAgICAgICAgICAgICAgLy8gc3RvcmFn
ZSwgc28gd2UgY29uc2VydmF0aXZlbHkgYXNzdW1lIHRoYXQgaXQgbWF5IGNoYW5nZSB0aGUgc3Rv
cmFnZQogICAgICAgICAgICAgICAgIC8vIHBvaW50ZXIgb2YgYW55IG9iamVjdCwgaW5jbHVkaW5n
IG91cnMuCi0gICAgICAgICAgICAgICAgcmV0dXJuIE5vTm9kZTsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gMDsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGNhc2UgUHV0QnlPZmZzZXQ6
CiAgICAgICAgICAgICBjYXNlIFB1dFN0cnVjdHVyZToKQEAgLTc0MiwzNCArNzI5LDMzIEBAIHBy
aXZhdGU6CiAgICAgICAgICAgICAgICAgICAgIC8vIGNoYW5nZS4KICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHJldHVybiBOb05v
ZGU7CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgICAgICAgCiAgICAgICAg
ICAgICBjYXNlIEFycmF5aWZ5OgogICAgICAgICAgICAgY2FzZSBBcnJheWlmeVRvU3RydWN0dXJl
OgogICAgICAgICAgICAgICAgIC8vIFdlIGNvdWxkIGNoZWNrIGlmIHRoZSBhcnJheWlmaWNhdGlv
biBjb3VsZCBhZmZlY3Qgb3VyIGJ1dHRlcmZseS4KICAgICAgICAgICAgICAgICAvLyBCdXQgdGhh
dCBzZWVtcyBsaWtlIGl0IHdvdWxkIHRha2UgRWZmb3J0LgotICAgICAgICAgICAgICAgIHJldHVy
biBOb05vZGU7CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgICAgICAgCiAg
ICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLmNsb2JiZXJz
V29ybGQoaW5kZXgpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gTm9Ob2RlOworICAgICAg
ICAgICAgICAgIGlmIChtX2dyYXBoLmNsb2JiZXJzV29ybGQobm9kZSkpCisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQog
ICAgICAgICB9Ci0gICAgICAgIHJldHVybiBOb05vZGU7CisgICAgICAgIHJldHVybiAwOwogICAg
IH0KICAgICAKLSAgICBib29sIGNoZWNrQXJyYXlFbGltaW5hdGlvbihOb2RlSW5kZXggY2hpbGQx
LCBBcnJheU1vZGUgYXJyYXlNb2RlKQorICAgIGJvb2wgY2hlY2tBcnJheUVsaW1pbmF0aW9uKE5v
ZGUqIGNoaWxkMSwgQXJyYXlNb2RlIGFycmF5TW9kZSkKICAgICB7CiAgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IG1faW5kZXhJbkJsb2NrOyBpLS07KSB7Ci0gICAgICAgICAgICBOb2RlSW5kZXgg
aW5kZXggPSBtX2N1cnJlbnRCbG9jay0+YXQoaSk7Ci0gICAgICAgICAgICBpZiAoaW5kZXggPT0g
Y2hpbGQxKSAKKyAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBtX2N1cnJlbnRCbG9jay0+YXQoaSk7
CisgICAgICAgICAgICBpZiAobm9kZSA9PSBjaGlsZDEpIAogICAgICAgICAgICAgICAgIGJyZWFr
OwogCi0gICAgICAgICAgICBOb2RlJiBub2RlID0gbV9ncmFwaFtpbmRleF07Ci0gICAgICAgICAg
ICBpZiAoIW5vZGUuc2hvdWxkR2VuZXJhdGUoKSkKKyAgICAgICAgICAgIGlmICghbm9kZS0+c2hv
dWxkR2VuZXJhdGUoKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIHN3
aXRjaCAobm9kZS5vcCgpKSB7CisgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKICAg
ICAgICAgICAgIGNhc2UgUHV0QnlPZmZzZXQ6CiAgICAgICAgICAgICBjYXNlIFB1dFN0cnVjdHVy
ZToKICAgICAgICAgICAgICAgICAvLyBDaGFuZ2luZyB0aGUgc3RydWN0dXJlIG9yIHB1dHRpbmcg
dG8gdGhlIHN0b3JhZ2UgY2Fubm90CkBAIC03NzcsNyArNzYzLDcgQEAgcHJpdmF0ZToKICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGNhc2UgQ2hl
Y2tBcnJheToKLSAgICAgICAgICAgICAgICBpZiAobm9kZS5jaGlsZDEoKSA9PSBjaGlsZDEgJiYg
bm9kZS5hcnJheU1vZGUoKSA9PSBhcnJheU1vZGUpCisgICAgICAgICAgICAgICAgaWYgKG5vZGUt
PmNoaWxkMSgpID09IGNoaWxkMSAmJiBub2RlLT5hcnJheU1vZGUoKSA9PSBhcnJheU1vZGUpCiAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgICAgIApAQCAtNzg4LDcgKzc3NCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgZGVmYXVs
dDoKLSAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC5jbG9iYmVyc1dvcmxkKGluZGV4KSkKKyAg
ICAgICAgICAgICAgICBpZiAobV9ncmFwaC5jbG9iYmVyc1dvcmxkKG5vZGUpKQogICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICB9CkBAIC03OTYsMjAgKzc4MiwxOSBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgfQogCi0gICAgTm9kZUluZGV4IGdldEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2VMb2Fk
RWxpbWluYXRpb24oTm9kZUluZGV4IGNoaWxkMSwgQXJyYXlNb2RlIGFycmF5TW9kZSkKKyAgICBO
b2RlKiBnZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlTG9hZEVsaW1pbmF0aW9uKE5vZGUqIGNoaWxk
MSwgQXJyYXlNb2RlIGFycmF5TW9kZSkKICAgICB7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IG1faW5kZXhJbkJsb2NrOyBpLS07KSB7Ci0gICAgICAgICAgICBOb2RlSW5kZXggaW5kZXggPSBt
X2N1cnJlbnRCbG9jay0+YXQoaSk7Ci0gICAgICAgICAgICBpZiAoaW5kZXggPT0gY2hpbGQxKSAK
KyAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBtX2N1cnJlbnRCbG9jay0+YXQoaSk7CisgICAgICAg
ICAgICBpZiAobm9kZSA9PSBjaGlsZDEpIAogICAgICAgICAgICAgICAgIGJyZWFrOwogCi0gICAg
ICAgICAgICBOb2RlJiBub2RlID0gbV9ncmFwaFtpbmRleF07Ci0gICAgICAgICAgICBpZiAoIW5v
ZGUuc2hvdWxkR2VuZXJhdGUoKSkKKyAgICAgICAgICAgIGlmICghbm9kZS0+c2hvdWxkR2VuZXJh
dGUoKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIHN3aXRjaCAobm9k
ZS5vcCgpKSB7CisgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKICAgICAgICAgICAg
IGNhc2UgR2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZTogewotICAgICAgICAgICAgICAgIGlmIChu
b2RlLmNoaWxkMSgpID09IGNoaWxkMSAmJiBub2RlLmFycmF5TW9kZSgpID09IGFycmF5TW9kZSkK
LSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGluZGV4OworICAgICAgICAgICAgICAgIGlmIChu
b2RlLT5jaGlsZDEoKSA9PSBjaGlsZDEgJiYgbm9kZS0+YXJyYXlNb2RlKCkgPT0gYXJyYXlNb2Rl
KQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gbm9kZTsKICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgIH0KIApAQCAtODIwLDgxICs4MDUsNzkgQEAgcHJpdmF0ZToKICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGRlZmF1bHQ6
Ci0gICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGguY2xvYmJlcnNXb3JsZChpbmRleCkpCi0gICAg
ICAgICAgICAgICAgICAgIHJldHVybiBOb05vZGU7CisgICAgICAgICAgICAgICAgaWYgKG1fZ3Jh
cGguY2xvYmJlcnNXb3JsZChub2RlKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAg
cmV0dXJuIE5vTm9kZTsKKyAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogICAgIAotICAgIE5vZGVJ
bmRleCBnZXRNeVNjb3BlTG9hZEVsaW1pbmF0aW9uKElubGluZUNhbGxGcmFtZSogaW5saW5lQ2Fs
bEZyYW1lKQorICAgIE5vZGUqIGdldE15U2NvcGVMb2FkRWxpbWluYXRpb24oSW5saW5lQ2FsbEZy
YW1lKiBpbmxpbmVDYWxsRnJhbWUpCiAgICAgewogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBt
X2luZGV4SW5CbG9jazsgaS0tOykgewotICAgICAgICAgICAgTm9kZUluZGV4IGluZGV4ID0gbV9j
dXJyZW50QmxvY2stPmF0KGkpOwotICAgICAgICAgICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhbaW5k
ZXhdOwotICAgICAgICAgICAgaWYgKCFub2RlLnNob3VsZEdlbmVyYXRlKCkpCisgICAgICAgICAg
ICBOb2RlKiBub2RlID0gbV9jdXJyZW50QmxvY2stPmF0KGkpOworICAgICAgICAgICAgaWYgKCFu
b2RlLT5zaG91bGRHZW5lcmF0ZSgpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAg
ICAgICAgaWYgKG5vZGUuY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUgIT0gaW5saW5lQ2FsbEZy
YW1lKQorICAgICAgICAgICAgaWYgKG5vZGUtPmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lICE9
IGlubGluZUNhbGxGcmFtZSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAg
IHN3aXRjaCAobm9kZS5vcCgpKSB7CisgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsK
ICAgICAgICAgICAgIGNhc2UgQ3JlYXRlQWN0aXZhdGlvbjoKICAgICAgICAgICAgICAgICAvLyBU
aGlzIG1heSBjYXVzZSB1cyB0byByZXR1cm4gYSBkaWZmZXJlbnQgc2NvcGUuCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIE5vTm9kZTsKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAg
ICAgIGNhc2UgR2V0TXlTY29wZToKLSAgICAgICAgICAgICAgICByZXR1cm4gaW5kZXg7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIG5vZGU7CiAgICAgICAgICAgICBjYXNlIFNldE15U2NvcGU6Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIG5vZGUuY2hpbGQxKCkuaW5kZXgoKTsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gbm9kZS0+Y2hpbGQxKCkubm9kZSgpOwogICAgICAgICAgICAgZGVmYXVsdDoK
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAg
ICByZXR1cm4gTm9Ob2RlOworICAgICAgICByZXR1cm4gMDsKICAgICB9CiAgICAgCi0gICAgTm9k
ZUluZGV4IGdldExvY2FsTG9hZEVsaW1pbmF0aW9uKFZpcnR1YWxSZWdpc3RlciBsb2NhbCwgTm9k
ZUluZGV4JiByZWxldmFudExvY2FsT3AsIGJvb2wgY2FyZUFib3V0Q2xvYmJlcmluZykKKyAgICBO
b2RlKiBnZXRMb2NhbExvYWRFbGltaW5hdGlvbihWaXJ0dWFsUmVnaXN0ZXIgbG9jYWwsIE5vZGUq
JiByZWxldmFudExvY2FsT3AsIGJvb2wgY2FyZUFib3V0Q2xvYmJlcmluZykKICAgICB7Ci0gICAg
ICAgIHJlbGV2YW50TG9jYWxPcCA9IE5vTm9kZTsKKyAgICAgICAgcmVsZXZhbnRMb2NhbE9wID0g
MDsKICAgICAgICAgCiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1faW5kZXhJbkJsb2NrOyBp
LS07KSB7Ci0gICAgICAgICAgICBOb2RlSW5kZXggaW5kZXggPSBtX2N1cnJlbnRCbG9jay0+YXQo
aSk7Ci0gICAgICAgICAgICBOb2RlJiBub2RlID0gbV9ncmFwaFtpbmRleF07Ci0gICAgICAgICAg
ICBpZiAoIW5vZGUuc2hvdWxkR2VuZXJhdGUoKSkKKyAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBt
X2N1cnJlbnRCbG9jay0+YXQoaSk7CisgICAgICAgICAgICBpZiAoIW5vZGUtPnNob3VsZEdlbmVy
YXRlKCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBzd2l0Y2ggKG5v
ZGUub3AoKSkgeworICAgICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CiAgICAgICAgICAg
ICBjYXNlIEdldExvY2FsOgotICAgICAgICAgICAgICAgIGlmIChub2RlLmxvY2FsKCkgPT0gbG9j
YWwpIHsKLSAgICAgICAgICAgICAgICAgICAgcmVsZXZhbnRMb2NhbE9wID0gaW5kZXg7Ci0gICAg
ICAgICAgICAgICAgICAgIHJldHVybiBpbmRleDsKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+
bG9jYWwoKSA9PSBsb2NhbCkgeworICAgICAgICAgICAgICAgICAgICByZWxldmFudExvY2FsT3Ag
PSBub2RlOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gbm9kZTsKICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAg
ICBjYXNlIEdldExvY2FsVW5saW5rZWQ6Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGUudW5saW5r
ZWRMb2NhbCgpID09IGxvY2FsKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJlbGV2YW50TG9jYWxP
cCA9IGluZGV4OwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW5kZXg7CisgICAgICAgICAg
ICAgICAgaWYgKG5vZGUtPnVubGlua2VkTG9jYWwoKSA9PSBsb2NhbCkgeworICAgICAgICAgICAg
ICAgICAgICByZWxldmFudExvY2FsT3AgPSBub2RlOworICAgICAgICAgICAgICAgICAgICByZXR1
cm4gbm9kZTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICAgICAgCiAgICAgICAgICAgICBjYXNlIFNldExvY2FsOgotICAgICAgICAgICAgICAg
IGlmIChub2RlLmxvY2FsKCkgPT0gbG9jYWwpIHsKLSAgICAgICAgICAgICAgICAgICAgcmVsZXZh
bnRMb2NhbE9wID0gaW5kZXg7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBub2RlLmNoaWxk
MSgpLmluZGV4KCk7CisgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmxvY2FsKCkgPT0gbG9jYWwp
IHsKKyAgICAgICAgICAgICAgICAgICAgcmVsZXZhbnRMb2NhbE9wID0gbm9kZTsKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAg
ICBjYXNlIFB1dFNjb3BlZFZhcjoKLSAgICAgICAgICAgICAgICBpZiAoc3RhdGljX2Nhc3Q8Vmly
dHVhbFJlZ2lzdGVyPihub2RlLnZhck51bWJlcigpKSA9PSBsb2NhbCkKLSAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIE5vTm9kZTsKKyAgICAgICAgICAgICAgICBpZiAoc3RhdGljX2Nhc3Q8Vmly
dHVhbFJlZ2lzdGVyPihub2RlLT52YXJOdW1iZXIoKSkgPT0gbG9jYWwpCisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAg
IAogICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBpZiAoY2FyZUFib3V0Q2xv
YmJlcmluZyAmJiBtX2dyYXBoLmNsb2JiZXJzV29ybGQoaW5kZXgpKQotICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gTm9Ob2RlOworICAgICAgICAgICAgICAgIGlmIChjYXJlQWJvdXRDbG9iYmVy
aW5nICYmIG1fZ3JhcGguY2xvYmJlcnNXb3JsZChub2RlKSkKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIDA7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAg
IH0KLSAgICAgICAgcmV0dXJuIE5vTm9kZTsKKyAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogICAg
IAogICAgIHN0cnVjdCBTZXRMb2NhbFN0b3JlRWxpbWluYXRpb25SZXN1bHQgewpAQCAtOTEwLDUx
ICs4OTMsNTAgQEAgcHJpdmF0ZToKICAgICAgICAgYm9vbCBtYXlDbG9iYmVyV29ybGQ7CiAgICAg
fTsKICAgICBTZXRMb2NhbFN0b3JlRWxpbWluYXRpb25SZXN1bHQgc2V0TG9jYWxTdG9yZUVsaW1p
bmF0aW9uKAotICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgbG9jYWwsIE5vZGVJbmRleCBleHBlY3Rl
ZE5vZGVJbmRleCkKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGxvY2FsLCBOb2RlKiBleHBlY3Rl
ZE5vZGVJbmRleCkKICAgICB7CiAgICAgICAgIFNldExvY2FsU3RvcmVFbGltaW5hdGlvblJlc3Vs
dCByZXN1bHQ7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1faW5kZXhJbkJsb2NrOyBpLS07
KSB7Ci0gICAgICAgICAgICBOb2RlSW5kZXggaW5kZXggPSBtX2N1cnJlbnRCbG9jay0+YXQoaSk7
Ci0gICAgICAgICAgICBOb2RlJiBub2RlID0gbV9ncmFwaFtpbmRleF07Ci0gICAgICAgICAgICBp
ZiAoIW5vZGUuc2hvdWxkR2VuZXJhdGUoKSkKKyAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBtX2N1
cnJlbnRCbG9jay0+YXQoaSk7CisgICAgICAgICAgICBpZiAoIW5vZGUtPnNob3VsZEdlbmVyYXRl
KCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBzd2l0Y2ggKG5vZGUu
b3AoKSkgeworICAgICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CiAgICAgICAgICAgICBj
YXNlIEdldExvY2FsOgogICAgICAgICAgICAgY2FzZSBGbHVzaDoKLSAgICAgICAgICAgICAgICBp
ZiAobm9kZS5sb2NhbCgpID09IGxvY2FsKQorICAgICAgICAgICAgICAgIGlmIChub2RlLT5sb2Nh
bCgpID09IGxvY2FsKQogICAgICAgICAgICAgICAgICAgICByZXN1bHQubWF5QmVBY2Nlc3NlZCA9
IHRydWU7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgCiAgICAgICAg
ICAgICBjYXNlIEdldExvY2FsVW5saW5rZWQ6Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGUudW5s
aW5rZWRMb2NhbCgpID09IGxvY2FsKQorICAgICAgICAgICAgICAgIGlmIChub2RlLT51bmxpbmtl
ZExvY2FsKCkgPT0gbG9jYWwpCiAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5tYXlCZUFjY2Vz
c2VkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAKICAg
ICAgICAgICAgIGNhc2UgU2V0TG9jYWw6IHsKLSAgICAgICAgICAgICAgICBpZiAobm9kZS5sb2Nh
bCgpICE9IGxvY2FsKQorICAgICAgICAgICAgICAgIGlmIChub2RlLT5sb2NhbCgpICE9IGxvY2Fs
KQogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICBpZiAoaW5kZXgg
IT0gZXhwZWN0ZWROb2RlSW5kZXgpCiAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5tYXlCZUFj
Y2Vzc2VkID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBpZiAobV9ncmFwaFtpbmRleF0ucmVmQ291
bnQoKSA+IDEpCisgICAgICAgICAgICAgICAgaWYgKG5vZGUtPnJlZkNvdW50KCkgPiAxKQogICAg
ICAgICAgICAgICAgICAgICByZXN1bHQubWF5QmVBY2Nlc3NlZCA9IHRydWU7CiAgICAgICAgICAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKICAg
ICAgICAgICAgIGNhc2UgR2V0U2NvcGVkVmFyOgotICAgICAgICAgICAgICAgIGlmIChzdGF0aWNf
Y2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KG5vZGUudmFyTnVtYmVyKCkpID09IGxvY2FsKQorICAgICAg
ICAgICAgICAgIGlmIChzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KG5vZGUtPnZhck51bWJl
cigpKSA9PSBsb2NhbCkKICAgICAgICAgICAgICAgICAgICAgcmVzdWx0Lm1heUJlQWNjZXNzZWQg
PSB0cnVlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIAogICAgICAg
ICAgICAgY2FzZSBHZXRNeVNjb3BlOgogICAgICAgICAgICAgY2FzZSBTa2lwVG9wU2NvcGU6Ci0g
ICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGgudW5jaGVja2VkQWN0aXZhdGlvblJlZ2lzdGVyRm9y
KG5vZGUuY29kZU9yaWdpbikgPT0gbG9jYWwpCisgICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGgu
dW5jaGVja2VkQWN0aXZhdGlvblJlZ2lzdGVyRm9yKG5vZGUtPmNvZGVPcmlnaW4pID09IGxvY2Fs
KQogICAgICAgICAgICAgICAgICAgICByZXN1bHQubWF5QmVBY2Nlc3NlZCA9IHRydWU7CiAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBjYXNlIENo
ZWNrQXJndW1lbnRzTm90Q3JlYXRlZDoKICAgICAgICAgICAgIGNhc2UgR2V0TXlBcmd1bWVudHNM
ZW5ndGg6CiAgICAgICAgICAgICBjYXNlIEdldE15QXJndW1lbnRzTGVuZ3RoU2FmZToKLSAgICAg
ICAgICAgICAgICBpZiAobV9ncmFwaC51bmNoZWNrZWRBcmd1bWVudHNSZWdpc3RlckZvcihub2Rl
LmNvZGVPcmlnaW4pID09IGxvY2FsKQorICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLnVuY2hl
Y2tlZEFyZ3VtZW50c1JlZ2lzdGVyRm9yKG5vZGUtPmNvZGVPcmlnaW4pID09IGxvY2FsKQogICAg
ICAgICAgICAgICAgICAgICByZXN1bHQubWF5QmVBY2Nlc3NlZCA9IHRydWU7CiAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgCkBAIC05NjUsNyArOTQ3LDcgQEAgcHJpdmF0
ZToKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGNhc2UgR2V0QnlWYWw6CiAgICAgICAg
ICAgICAgICAgLy8gSWYgdGhpcyBpcyBhY2Nlc3NpbmcgYXJndW1lbnRzIHRoZW4gaXQncyBwb3Rl
bnRpYWxseSBhY2Nlc3NpbmcgbG9jYWxzLgotICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoW25v
ZGUuY2hpbGQxKCldLnNob3VsZFNwZWN1bGF0ZUFyZ3VtZW50cygpKQorICAgICAgICAgICAgICAg
IGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlQXJndW1lbnRzKCkpCiAgICAgICAg
ICAgICAgICAgICAgIHJlc3VsdC5tYXlCZUFjY2Vzc2VkID0gdHJ1ZTsKICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgICAgICAKQEAgLTk4Miw4ICs5NjQsOCBAQCBwcml2YXRlOgog
ICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIHJlc3VsdC5tYXlFeGl0IHw9IG5vZGUuY2FuRXhpdCgpOwotICAgICAg
ICAgICAgcmVzdWx0Lm1heUNsb2JiZXJXb3JsZCB8PSBtX2dyYXBoLmNsb2JiZXJzV29ybGQoaW5k
ZXgpOworICAgICAgICAgICAgcmVzdWx0Lm1heUV4aXQgfD0gbm9kZS0+Y2FuRXhpdCgpOworICAg
ICAgICAgICAgcmVzdWx0Lm1heUNsb2JiZXJXb3JsZCB8PSBtX2dyYXBoLmNsb2JiZXJzV29ybGQo
bm9kZSk7CiAgICAgICAgIH0KICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
ICAgICAgICAgLy8gQmUgc2FmZSBpbiByZWxlYXNlIG1vZGUuCkBAIC05OTgsNjIgKzk4MCw2MSBA
QCBwcml2YXRlOgogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAKICAgICAgICAgLy8gQ2hl
Y2sgaWYgdGhlcmUgaXMgYW55IHJlcGxhY2VtZW50LgotICAgICAgICBOb2RlSW5kZXggcmVwbGFj
ZW1lbnQgPSBtX2dyYXBoW2NoaWxkLmluZGV4KCldLnJlcGxhY2VtZW50OwotICAgICAgICBpZiAo
cmVwbGFjZW1lbnQgPT0gTm9Ob2RlKQorICAgICAgICBOb2RlKiByZXBsYWNlbWVudCA9IGNoaWxk
LT5yZXBsYWNlbWVudDsKKyAgICAgICAgaWYgKCFyZXBsYWNlbWVudCkKICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgCi0gICAgICAgIGNoaWxkLnNldEluZGV4KHJlcGxhY2VtZW50KTsKKyAg
ICAgICAgY2hpbGQuc2V0Tm9kZShyZXBsYWNlbWVudCk7CiAgICAgICAgIAogICAgICAgICAvLyBU
aGVyZSBpcyBkZWZpbml0ZWx5IGEgcmVwbGFjZW1lbnQuIEFzc2VydCB0aGF0IHRoZSByZXBsYWNl
bWVudCBkb2VzIG5vdAogICAgICAgICAvLyBoYXZlIGEgcmVwbGFjZW1lbnQuCi0gICAgICAgIEFT
U0VSVChtX2dyYXBoW2NoaWxkLmluZGV4KCldLnJlcGxhY2VtZW50ID09IE5vTm9kZSk7CisgICAg
ICAgIEFTU0VSVCghY2hpbGQtPnJlcGxhY2VtZW50KTsKICAgICAgICAgCiAgICAgICAgIGlmIChh
ZGRSZWYpCiAgICAgICAgICAgICBtX2dyYXBoLnJlZihjaGlsZCk7CiAgICAgfQogICAgIAotICAg
IHZvaWQgZWxpbWluYXRlSXJyZWxldmFudFBoYW50b21DaGlsZHJlbihOb2RlJiBub2RlKQorICAg
IHZvaWQgZWxpbWluYXRlSXJyZWxldmFudFBoYW50b21DaGlsZHJlbihOb2RlKiBub2RlKQogICAg
IHsKLSAgICAgICAgQVNTRVJUKG5vZGUub3AoKSA9PSBQaGFudG9tKTsKKyAgICAgICAgQVNTRVJU
KG5vZGUtPm9wKCkgPT0gUGhhbnRvbSk7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBBZGphY2VuY3lMaXN0OjpTaXplOyArK2kpIHsKLSAgICAgICAgICAgIEVkZ2UgZWRnZSA9IG5v
ZGUuY2hpbGRyZW4uY2hpbGQoaSk7CisgICAgICAgICAgICBFZGdlIGVkZ2UgPSBub2RlLT5jaGls
ZHJlbi5jaGlsZChpKTsKICAgICAgICAgICAgIGlmICghZWRnZSkKICAgICAgICAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgICAgIGlmIChtX2dyYXBoW2VkZ2VdLmZsYWdzKCkgJiBOb2RlUmVs
ZXZhbnRUb09TUikKKyAgICAgICAgICAgIGlmIChlZGdlLT5mbGFncygpICYgTm9kZVJlbGV2YW50
VG9PU1IpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAKICNpZiBERkdf
RU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCi0gICAgICAgICAgICBkYXRhTG9nKCIg
ICBFbGltaW5hdGluZyBlZGdlIEAiLCBtX2NvbXBpbGVJbmRleCwgIiAtPiBAIiwgZWRnZS5pbmRl
eCgpKTsKKyAgICAgICAgICAgIGRhdGFMb2coIiAgIEVsaW1pbmF0aW5nIGVkZ2UgQCIsIG1fY3Vy
cmVudE5vZGUtPmluZGV4KCksICIgLT4gQCIsIGVkZ2UtPmluZGV4KCkpOwogI2VuZGlmCiAgICAg
ICAgICAgICBtX2dyYXBoLmRlcmVmKGVkZ2UpOwotICAgICAgICAgICAgbm9kZS5jaGlsZHJlbi5y
ZW1vdmVFZGdlRnJvbUJhZyhpLS0pOworICAgICAgICAgICAgbm9kZS0+Y2hpbGRyZW4ucmVtb3Zl
RWRnZUZyb21CYWcoaS0tKTsKICAgICAgICAgICAgIG1fY2hhbmdlZCA9IHRydWU7CiAgICAgICAg
IH0KICAgICB9CiAgICAgCiAgICAgZW51bSBQcmVkaWN0aW9uSGFuZGxpbmdNb2RlIHsgUmVxdWly
ZVNhbWVQcmVkaWN0aW9uLCBBbGxvd1ByZWRpY3Rpb25NaXNtYXRjaCB9OwotICAgIGJvb2wgc2V0
UmVwbGFjZW1lbnQoTm9kZUluZGV4IHJlcGxhY2VtZW50LCBQcmVkaWN0aW9uSGFuZGxpbmdNb2Rl
IHByZWRpY3Rpb25IYW5kbGluZ01vZGUgPSBSZXF1aXJlU2FtZVByZWRpY3Rpb24pCisgICAgYm9v
bCBzZXRSZXBsYWNlbWVudChOb2RlKiByZXBsYWNlbWVudCwgUHJlZGljdGlvbkhhbmRsaW5nTW9k
ZSBwcmVkaWN0aW9uSGFuZGxpbmdNb2RlID0gUmVxdWlyZVNhbWVQcmVkaWN0aW9uKQogICAgIHsK
LSAgICAgICAgaWYgKHJlcGxhY2VtZW50ID09IE5vTm9kZSkKKyAgICAgICAgaWYgKCFyZXBsYWNl
bWVudCkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgCiAgICAgICAgIC8vIEJl
IHNhZmUuIERvbid0IHRyeSB0byBwZXJmb3JtIHJlcGxhY2VtZW50cyBpZiB0aGUgcHJlZGljdGlv
bnMgZG9uJ3QKICAgICAgICAgLy8gYWdyZWUuCiAgICAgICAgIGlmIChwcmVkaWN0aW9uSGFuZGxp
bmdNb2RlID09IFJlcXVpcmVTYW1lUHJlZGljdGlvbgotICAgICAgICAgICAgJiYgbV9ncmFwaFtt
X2NvbXBpbGVJbmRleF0ucHJlZGljdGlvbigpICE9IG1fZ3JhcGhbcmVwbGFjZW1lbnRdLnByZWRp
Y3Rpb24oKSkKKyAgICAgICAgICAgICYmIG1fY3VycmVudE5vZGUtPnByZWRpY3Rpb24oKSAhPSBy
ZXBsYWNlbWVudC0+cHJlZGljdGlvbigpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
ICAgICAKICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCi0gICAgICAg
IGRhdGFMb2dGKCIgICBSZXBsYWNpbmcgQCV1IC0+IEAldSIsIG1fY29tcGlsZUluZGV4LCByZXBs
YWNlbWVudCk7CisgICAgICAgIGRhdGFMb2dGKCIgICBSZXBsYWNpbmcgQCV1IC0+IEAldSIsIG1f
Y29tcGlsZU5vZGUtPmluZGV4KCksIHJlcGxhY2VtZW50LT5pbmRleCgpKTsKICNlbmRpZgogICAg
ICAgICAKLSAgICAgICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhbbV9jb21waWxlSW5kZXhdOwotICAg
ICAgICBub2RlLnNldE9wQW5kRGVmYXVsdEZsYWdzKFBoYW50b20pOwotICAgICAgICBub2RlLnNl
dFJlZkNvdW50KDEpOwotICAgICAgICBlbGltaW5hdGVJcnJlbGV2YW50UGhhbnRvbUNoaWxkcmVu
KG5vZGUpOworICAgICAgICBtX2N1cnJlbnROb2RlLT5zZXRPcEFuZERlZmF1bHRGbGFncyhQaGFu
dG9tKTsKKyAgICAgICAgbV9jdXJyZW50Tm9kZS0+c2V0UmVmQ291bnQoMSk7CisgICAgICAgIGVs
aW1pbmF0ZUlycmVsZXZhbnRQaGFudG9tQ2hpbGRyZW4obV9jdXJyZW50Tm9kZSk7CiAgICAgICAg
IAogICAgICAgICAvLyBBdCB0aGlzIHBvaW50IHdlIHdpbGwgZWxpbWluYXRlIGFsbCByZWZlcmVu
Y2VzIHRvIHRoaXMgbm9kZS4KLSAgICAgICAgbV9ncmFwaFttX2NvbXBpbGVJbmRleF0ucmVwbGFj
ZW1lbnQgPSByZXBsYWNlbWVudDsKKyAgICAgICAgbV9jdXJyZW50Tm9kZS0+cmVwbGFjZW1lbnQg
PSByZXBsYWNlbWVudDsKICAgICAgICAgCiAgICAgICAgIG1fY2hhbmdlZCA9IHRydWU7CiAgICAg
ICAgIApAQCAtMTA2Niw1MSArMTA0Nyw0OSBAQCBwcml2YXRlOgogICAgICAgICBkYXRhTG9nRigi
ICAgRWxpbWluYXRpbmcgQCV1IiwgbV9jb21waWxlSW5kZXgpOwogI2VuZGlmCiAgICAgICAgIAot
ICAgICAgICBOb2RlJiBub2RlID0gbV9ncmFwaFttX2NvbXBpbGVJbmRleF07Ci0gICAgICAgIEFT
U0VSVChub2RlLnJlZkNvdW50KCkgPT0gMSk7Ci0gICAgICAgIEFTU0VSVChub2RlLm11c3RHZW5l
cmF0ZSgpKTsKLSAgICAgICAgbm9kZS5zZXRPcEFuZERlZmF1bHRGbGFncyhQaGFudG9tKTsKLSAg
ICAgICAgZWxpbWluYXRlSXJyZWxldmFudFBoYW50b21DaGlsZHJlbihub2RlKTsKKyAgICAgICAg
QVNTRVJUKG1fY3VycmVudE5vZGUtPnJlZkNvdW50KCkgPT0gMSk7CisgICAgICAgIEFTU0VSVCht
X2N1cnJlbnROb2RlLT5tdXN0R2VuZXJhdGUoKSk7CisgICAgICAgIG1fY3VycmVudE5vZGUtPnNl
dE9wQW5kRGVmYXVsdEZsYWdzKFBoYW50b20pOworICAgICAgICBlbGltaW5hdGVJcnJlbGV2YW50
UGhhbnRvbUNoaWxkcmVuKG1fY3VycmVudE5vZGUpOwogICAgICAgICAKICAgICAgICAgbV9jaGFu
Z2VkID0gdHJ1ZTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBlbGltaW5hdGUoTm9kZUluZGV4IG5v
ZGVJbmRleCwgTm9kZVR5cGUgcGhhbnRvbVR5cGUgPSBQaGFudG9tKQorICAgIHZvaWQgZWxpbWlu
YXRlKE5vZGUqIG5vZGUsIE5vZGVUeXBlIHBoYW50b21UeXBlID0gUGhhbnRvbSkKICAgICB7Ci0g
ICAgICAgIGlmIChub2RlSW5kZXggPT0gTm9Ob2RlKQorICAgICAgICBpZiAoIW5vZGUpCiAgICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW25vZGVJbmRleF07
Ci0gICAgICAgIGlmIChub2RlLnJlZkNvdW50KCkgIT0gMSkKKyAgICAgICAgaWYgKG5vZGUtPnJl
ZkNvdW50KCkgIT0gMSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgQVNTRVJUKG5vZGUu
bXVzdEdlbmVyYXRlKCkpOwotICAgICAgICBub2RlLnNldE9wQW5kRGVmYXVsdEZsYWdzKHBoYW50
b21UeXBlKTsKKyAgICAgICAgQVNTRVJUKG5vZGUtPm11c3RHZW5lcmF0ZSgpKTsKKyAgICAgICAg
bm9kZS0+c2V0T3BBbmREZWZhdWx0RmxhZ3MocGhhbnRvbVR5cGUpOwogICAgICAgICBpZiAocGhh
bnRvbVR5cGUgPT0gUGhhbnRvbSkKICAgICAgICAgICAgIGVsaW1pbmF0ZUlycmVsZXZhbnRQaGFu
dG9tQ2hpbGRyZW4obm9kZSk7CiAgICAgICAgIAogICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOwog
ICAgIH0KICAgICAKLSAgICB2b2lkIHBlcmZvcm1Ob2RlQ1NFKE5vZGUmIG5vZGUpCisgICAgdm9p
ZCBwZXJmb3JtTm9kZUNTRShOb2RlKiBub2RlKQogICAgIHsKLSAgICAgICAgYm9vbCBzaG91bGRH
ZW5lcmF0ZSA9IG5vZGUuc2hvdWxkR2VuZXJhdGUoKTsKKyAgICAgICAgYm9vbCBzaG91bGRHZW5l
cmF0ZSA9IG5vZGUtPnNob3VsZEdlbmVyYXRlKCk7CiAKLSAgICAgICAgaWYgKG5vZGUuZmxhZ3Mo
KSAmIE5vZGVIYXNWYXJBcmdzKSB7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGNoaWxkSWR4
ID0gbm9kZS5maXJzdENoaWxkKCk7IGNoaWxkSWR4IDwgbm9kZS5maXJzdENoaWxkKCkgKyBub2Rl
Lm51bUNoaWxkcmVuKCk7IGNoaWxkSWR4KyspCisgICAgICAgIGlmIChub2RlLT5mbGFncygpICYg
Tm9kZUhhc1ZhckFyZ3MpIHsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgY2hpbGRJZHggPSBu
b2RlLT5maXJzdENoaWxkKCk7IGNoaWxkSWR4IDwgbm9kZS0+Zmlyc3RDaGlsZCgpICsgbm9kZS0+
bnVtQ2hpbGRyZW4oKTsgY2hpbGRJZHgrKykKICAgICAgICAgICAgICAgICBwZXJmb3JtU3Vic3Rp
dHV0aW9uKG1fZ3JhcGgubV92YXJBcmdDaGlsZHJlbltjaGlsZElkeF0sIHNob3VsZEdlbmVyYXRl
KTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHBlcmZvcm1TdWJzdGl0dXRpb24obm9k
ZS5jaGlsZHJlbi5jaGlsZDEoKSwgc2hvdWxkR2VuZXJhdGUpOwotICAgICAgICAgICAgcGVyZm9y
bVN1YnN0aXR1dGlvbihub2RlLmNoaWxkcmVuLmNoaWxkMigpLCBzaG91bGRHZW5lcmF0ZSk7Ci0g
ICAgICAgICAgICBwZXJmb3JtU3Vic3RpdHV0aW9uKG5vZGUuY2hpbGRyZW4uY2hpbGQzKCksIHNo
b3VsZEdlbmVyYXRlKTsKKyAgICAgICAgICAgIHBlcmZvcm1TdWJzdGl0dXRpb24obm9kZS0+Y2hp
bGRyZW4uY2hpbGQxKCksIHNob3VsZEdlbmVyYXRlKTsKKyAgICAgICAgICAgIHBlcmZvcm1TdWJz
dGl0dXRpb24obm9kZS0+Y2hpbGRyZW4uY2hpbGQyKCksIHNob3VsZEdlbmVyYXRlKTsKKyAgICAg
ICAgICAgIHBlcmZvcm1TdWJzdGl0dXRpb24obm9kZS0+Y2hpbGRyZW4uY2hpbGQzKCksIHNob3Vs
ZEdlbmVyYXRlKTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgaWYgKG5vZGUub3AoKSA9
PSBTZXRMb2NhbCkKLSAgICAgICAgICAgIG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ubWVyZ2VGbGFn
cyhOb2RlUmVsZXZhbnRUb09TUik7CisgICAgICAgIGlmIChub2RlLT5vcCgpID09IFNldExvY2Fs
KQorICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCktPm1lcmdlRmxhZ3MoTm9kZVJlbGV2YW50VG9P
U1IpOwogICAgICAgICAKICAgICAgICAgaWYgKCFzaG91bGRHZW5lcmF0ZSkKICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgCiAjaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJC
T1NFKQotICAgICAgICBkYXRhTG9nRigiICAgJXMgQCV1OiAiLCBHcmFwaDo6b3BOYW1lKG1fZ3Jh
cGhbbV9jb21waWxlSW5kZXhdLm9wKCkpLCBtX2NvbXBpbGVJbmRleCk7CisgICAgICAgIGRhdGFM
b2dGKCIgICAlcyBAJXU6ICIsIEdyYXBoOjpvcE5hbWUobm9kZS0+b3AoKSksIG5vZGUtPmluZGV4
KCkpOwogI2VuZGlmCiAgICAgICAgIAogICAgICAgICAvLyBOT1RFOiB0aGVyZSBhcmUgc29tZSBu
b2RlcyB0aGF0IHdlIGRlbGliZXJhdGVseSBkb24ndCBDU0UgZXZlbiB0aG91Z2ggd2UKQEAgLTEx
MjIsMTAgKzExMDEsMTAgQEAgcHJpdmF0ZToKICAgICAgICAgLy8gVG9QcmltaXRpdmUsIGJ1dCB3
ZSBjb3VsZCBjaGFuZ2UgdGhhdCB3aXRoIHNvbWUgc3BlY3VsYXRpb25zIGlmIHdlIHJlYWxseQog
ICAgICAgICAvLyBuZWVkZWQgdG8uCiAgICAgICAgIAotICAgICAgICBzd2l0Y2ggKG5vZGUub3Ao
KSkgeworICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKICAgICAgICAgCiAgICAgICAgIGNh
c2UgSWRlbnRpdHk6Ci0gICAgICAgICAgICBzZXRSZXBsYWNlbWVudChub2RlLmNoaWxkMSgpLmlu
ZGV4KCkpOworICAgICAgICAgICAgc2V0UmVwbGFjZW1lbnQobm9kZS0+Y2hpbGQxKCkubm9kZSgp
KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAgICAgIC8vIEhhbmRsZSB0
aGUgcHVyZSBub2Rlcy4gVGhlc2Ugbm9kZXMgbmV2ZXIgaGF2ZSBhbnkgc2lkZS1lZmZlY3RzLgpA
QCAtMTE2NSw0MSArMTE0NCw0MSBAQCBwcml2YXRlOgogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICAKICAgICAgICAgY2FzZSBHZXRDYWxsZWU6Ci0gICAgICAgICAgICBzZXRSZXBsYWNl
bWVudChnZXRDYWxsZWVMb2FkRWxpbWluYXRpb24obm9kZS5jb2RlT3JpZ2luLmlubGluZUNhbGxG
cmFtZSkpOworICAgICAgICAgICAgc2V0UmVwbGFjZW1lbnQoZ2V0Q2FsbGVlTG9hZEVsaW1pbmF0
aW9uKG5vZGUtPmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKSk7CiAgICAgICAgICAgICBicmVh
azsKIAogICAgICAgICBjYXNlIEdldExvY2FsOiB7Ci0gICAgICAgICAgICBWYXJpYWJsZUFjY2Vz
c0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9IG5vZGUudmFyaWFibGVBY2Nlc3NEYXRhKCk7Cisg
ICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9IG5vZGUt
PnZhcmlhYmxlQWNjZXNzRGF0YSgpOwogICAgICAgICAgICAgaWYgKCF2YXJpYWJsZUFjY2Vzc0Rh
dGEtPmlzQ2FwdHVyZWQoKSkKICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIE5v
ZGVJbmRleCByZWxldmFudExvY2FsT3A7Ci0gICAgICAgICAgICBOb2RlSW5kZXggcG9zc2libGVS
ZXBsYWNlbWVudCA9IGdldExvY2FsTG9hZEVsaW1pbmF0aW9uKHZhcmlhYmxlQWNjZXNzRGF0YS0+
bG9jYWwoKSwgcmVsZXZhbnRMb2NhbE9wLCB2YXJpYWJsZUFjY2Vzc0RhdGEtPmlzQ2FwdHVyZWQo
KSk7Ci0gICAgICAgICAgICBpZiAocmVsZXZhbnRMb2NhbE9wID09IE5vTm9kZSkKKyAgICAgICAg
ICAgIE5vZGUqIHJlbGV2YW50TG9jYWxPcDsKKyAgICAgICAgICAgIE5vZGUqIHBvc3NpYmxlUmVw
bGFjZW1lbnQgPSBnZXRMb2NhbExvYWRFbGltaW5hdGlvbih2YXJpYWJsZUFjY2Vzc0RhdGEtPmxv
Y2FsKCksIHJlbGV2YW50TG9jYWxPcCwgdmFyaWFibGVBY2Nlc3NEYXRhLT5pc0NhcHR1cmVkKCkp
OworICAgICAgICAgICAgaWYgKCFyZWxldmFudExvY2FsT3ApCiAgICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICBpZiAobV9ncmFwaFtyZWxldmFudExvY2FsT3BdLm9wKCkgIT0gR2V0
TG9jYWxVbmxpbmtlZAotICAgICAgICAgICAgICAgICYmIG1fZ3JhcGhbcmVsZXZhbnRMb2NhbE9w
XS52YXJpYWJsZUFjY2Vzc0RhdGEoKSAhPSB2YXJpYWJsZUFjY2Vzc0RhdGEpCisgICAgICAgICAg
ICBpZiAocmVsZXZhbnRMb2NhbE9wLT5vcCgpICE9IEdldExvY2FsVW5saW5rZWQKKyAgICAgICAg
ICAgICAgICAmJiByZWxldmFudExvY2FsT3AtPnZhcmlhYmxlQWNjZXNzRGF0YSgpICE9IHZhcmlh
YmxlQWNjZXNzRGF0YSkKICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIE5vZGVJ
bmRleCBwaGlJbmRleCA9IG5vZGUuY2hpbGQxKCkuaW5kZXgoKTsKKyAgICAgICAgICAgIE5vZGUq
IHBoaSA9IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKICAgICAgICAgICAgIGlmICghc2V0UmVwbGFj
ZW1lbnQocG9zc2libGVSZXBsYWNlbWVudCkpCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICAvLyBJZiB0aGUgR2V0TG9jYWwgd2UgcmVwbGFjZWQgdXNlZCB0byByZWZlciB0byBh
IFNldExvY2FsLCB0aGVuIGl0IG5vdwogICAgICAgICAgICAgLy8gc2hvdWxkIHJlZmVyIHRvIHRo
ZSBjaGlsZCBvZiB0aGUgU2V0TG9jYWwgaW5zdGVhZC4KLSAgICAgICAgICAgIGlmIChtX2dyYXBo
W3BoaUluZGV4XS5vcCgpID09IFNldExvY2FsKSB7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKG5v
ZGUuY2hpbGQxKCkuaW5kZXgoKSA9PSBwaGlJbmRleCk7Ci0gICAgICAgICAgICAgICAgbV9ncmFw
aC5jaGFuZ2VFZGdlKG5vZGUuY2hpbGRyZW4uY2hpbGQxKCksIG1fZ3JhcGhbcGhpSW5kZXhdLmNo
aWxkMSgpKTsKKyAgICAgICAgICAgIGlmIChwaGktPm9wKCkgPT0gU2V0TG9jYWwpIHsKKyAgICAg
ICAgICAgICAgICBBU1NFUlQobm9kZS0+Y2hpbGQxKCkgPT0gcGhpKTsKKyAgICAgICAgICAgICAg
ICBtX2dyYXBoLmNoYW5nZUVkZ2Uobm9kZS0+Y2hpbGRyZW4uY2hpbGQxKCksIHBoaS0+Y2hpbGQx
KCkpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgTm9kZUluZGV4IG9sZFRhaWxJbmRleCA9
IG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZCgKKyAgICAgICAgICAgIE5v
ZGUqIG9sZFRhaWwgPSBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQoCiAg
ICAgICAgICAgICAgICAgdmFyaWFibGVBY2Nlc3NEYXRhLT5sb2NhbCgpKTsKLSAgICAgICAgICAg
IGlmIChvbGRUYWlsSW5kZXggPT0gbV9jb21waWxlSW5kZXgpIHsKKyAgICAgICAgICAgIGlmIChv
bGRUYWlsID09IG5vZGUpIHsKICAgICAgICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+dmFyaWFi
bGVzQXRUYWlsLm9wZXJhbmQodmFyaWFibGVBY2Nlc3NEYXRhLT5sb2NhbCgpKSA9CiAgICAgICAg
ICAgICAgICAgICAgIHJlbGV2YW50TG9jYWxPcDsKICAgICAgICAgICAgICAgICAKICAgICAgICAg
ICAgICAgICAvLyBNYWludGFpbiBncmFwaCBpbnRlZ3JpdHk6IHNpbmNlIHdlJ3JlIHJlcGxhY2lu
ZyBhIEdldExvY2FsIHdpdGggYSBHZXRMb2NhbFVubGlua2VkLAogICAgICAgICAgICAgICAgIC8v
IG1ha2Ugc3VyZSB0aGF0IHRoZSBHZXRMb2NhbFVubGlua2VkIGlzIG5vdyBsaW5rZWQuCi0gICAg
ICAgICAgICAgICAgaWYgKG1fZ3JhcGhbcmVsZXZhbnRMb2NhbE9wXS5vcCgpID09IEdldExvY2Fs
VW5saW5rZWQpIHsKLSAgICAgICAgICAgICAgICAgICAgbV9ncmFwaFtyZWxldmFudExvY2FsT3Bd
LnNldE9wKEdldExvY2FsKTsKLSAgICAgICAgICAgICAgICAgICAgbV9ncmFwaFtyZWxldmFudExv
Y2FsT3BdLmNoaWxkcmVuLmNoaWxkMSgpID0gRWRnZShwaGlJbmRleCk7Ci0gICAgICAgICAgICAg
ICAgICAgIG1fZ3JhcGgucmVmKHBoaUluZGV4KTsKKyAgICAgICAgICAgICAgICBpZiAocmVsZXZh
bnRMb2NhbE9wLT5vcCgpID09IEdldExvY2FsVW5saW5rZWQpIHsKKyAgICAgICAgICAgICAgICAg
ICAgcmVsZXZhbnRMb2NhbE9wLT5zZXRPcChHZXRMb2NhbCk7CisgICAgICAgICAgICAgICAgICAg
IHJlbGV2YW50TG9jYWxPcC0+Y2hpbGRyZW4uY2hpbGQxKCkgPSBFZGdlKHBoaSk7CisgICAgICAg
ICAgICAgICAgICAgIG1fZ3JhcGgucmVmKHBoaSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgfQogICAgICAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKQEAgLTEyMDcsMTkgKzExODYs
MTggQEAgcHJpdmF0ZToKICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgR2V0
TG9jYWxVbmxpbmtlZDogewotICAgICAgICAgICAgTm9kZUluZGV4IHJlbGV2YW50TG9jYWxPcEln
bm9yZWQ7CisgICAgICAgICAgICBOb2RlKiByZWxldmFudExvY2FsT3BJZ25vcmVkOwogICAgICAg
ICAgICAgc2V0UmVwbGFjZW1lbnQoZ2V0TG9jYWxMb2FkRWxpbWluYXRpb24obm9kZS51bmxpbmtl
ZExvY2FsKCksIHJlbGV2YW50TG9jYWxPcElnbm9yZWQsIHRydWUpKTsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBGbHVzaDogewotICAg
ICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBub2RlLnZh
cmlhYmxlQWNjZXNzRGF0YSgpOworICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJp
YWJsZUFjY2Vzc0RhdGEgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKICAgICAgICAgICAg
IFZpcnR1YWxSZWdpc3RlciBsb2NhbCA9IHZhcmlhYmxlQWNjZXNzRGF0YS0+bG9jYWwoKTsKLSAg
ICAgICAgICAgIE5vZGVJbmRleCByZXBsYWNlbWVudEluZGV4ID0gbm9kZS5jaGlsZDEoKS5pbmRl
eCgpOwotICAgICAgICAgICAgTm9kZSYgcmVwbGFjZW1lbnQgPSBtX2dyYXBoW3JlcGxhY2VtZW50
SW5kZXhdOwotICAgICAgICAgICAgaWYgKHJlcGxhY2VtZW50Lm9wKCkgIT0gU2V0TG9jYWwpCisg
ICAgICAgICAgICBOb2RlKiByZXBsYWNlbWVudCA9IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKKyAg
ICAgICAgICAgIGlmIChyZXBsYWNlbWVudC0+b3AoKSAhPSBTZXRMb2NhbCkKICAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgIEFTU0VSVChyZXBsYWNlbWVudC52YXJpYWJsZUFjY2Vz
c0RhdGEoKSA9PSB2YXJpYWJsZUFjY2Vzc0RhdGEpOworICAgICAgICAgICAgQVNTRVJUKHJlcGxh
Y2VtZW50LT52YXJpYWJsZUFjY2Vzc0RhdGEoKSA9PSB2YXJpYWJsZUFjY2Vzc0RhdGEpOwogICAg
ICAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBiZSBhYmxlIHRvIHJlbW92ZSBTZXRMb2NhbHMg
dGhhdCBjYW4gZXhpdDsgd2UganVzdCBuZWVkCiAgICAgICAgICAgICAvLyB0byByZXBsYWNlIHRo
ZW0gd2l0aCBhcHByb3ByaWF0ZSB0eXBlIGNoZWNrcy4KICAgICAgICAgICAgIGlmIChtX2dyYXBo
Lm1fZml4cG9pbnRTdGF0ZSA9PSBGaXhwb2ludE5vdENvbnZlcmdlZCkgewpAQCAtMTIzOSwyNiAr
MTIxNywyNiBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBpZiAo
cmVwbGFjZW1lbnQuY2FuRXhpdCgpKQorICAgICAgICAgICAgICAgIGlmIChyZXBsYWNlbWVudC0+
Y2FuRXhpdCgpKQogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIFNldExvY2FsU3RvcmVFbGltaW5hdGlvblJlc3VsdCByZXN1bHQgPQotICAgICAg
ICAgICAgICAgIHNldExvY2FsU3RvcmVFbGltaW5hdGlvbihsb2NhbCwgcmVwbGFjZW1lbnRJbmRl
eCk7CisgICAgICAgICAgICAgICAgc2V0TG9jYWxTdG9yZUVsaW1pbmF0aW9uKGxvY2FsLCByZXBs
YWNlbWVudCk7CiAgICAgICAgICAgICBpZiAocmVzdWx0Lm1heUJlQWNjZXNzZWQgfHwgcmVzdWx0
Lm1heUNsb2JiZXJXb3JsZCkKICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIEFT
U0VSVChyZXBsYWNlbWVudC5vcCgpID09IFNldExvY2FsKTsKLSAgICAgICAgICAgIEFTU0VSVChy
ZXBsYWNlbWVudC5yZWZDb3VudCgpID09IDEpOwotICAgICAgICAgICAgQVNTRVJUKHJlcGxhY2Vt
ZW50LnNob3VsZEdlbmVyYXRlKCkpOworICAgICAgICAgICAgQVNTRVJUKHJlcGxhY2VtZW50LT5v
cCgpID09IFNldExvY2FsKTsKKyAgICAgICAgICAgIEFTU0VSVChyZXBsYWNlbWVudC0+cmVmQ291
bnQoKSA9PSAxKTsKKyAgICAgICAgICAgIEFTU0VSVChyZXBsYWNlbWVudC0+c2hvdWxkR2VuZXJh
dGUoKSk7CiAgICAgICAgICAgICAvLyBGSVhNRTogSW52ZXN0aWdhdGUgdXNpbmcgbWF5RXhpdCBh
cyBhIGZ1cnRoZXIgb3B0aW1pemF0aW9uLgotICAgICAgICAgICAgbm9kZS5zZXRPcEFuZERlZmF1
bHRGbGFncyhQaGFudG9tKTsKLSAgICAgICAgICAgIE5vZGVJbmRleCBkYXRhTm9kZUluZGV4ID0g
cmVwbGFjZW1lbnQuY2hpbGQxKCkuaW5kZXgoKTsKLSAgICAgICAgICAgIEFTU0VSVChtX2dyYXBo
W2RhdGFOb2RlSW5kZXhdLmhhc1Jlc3VsdCgpKTsKKyAgICAgICAgICAgIG5vZGUtPnNldE9wQW5k
RGVmYXVsdEZsYWdzKFBoYW50b20pOworICAgICAgICAgICAgTm9kZSogZGF0YU5vZGUgPSByZXBs
YWNlbWVudC0+Y2hpbGQxKCkubm9kZSgpOworICAgICAgICAgICAgQVNTRVJUKGRhdGFOb2RlLT5o
YXNSZXN1bHQoKSk7CiAgICAgICAgICAgICBtX2dyYXBoLmNsZWFyQW5kRGVyZWZDaGlsZDEobm9k
ZSk7Ci0gICAgICAgICAgICBub2RlLmNoaWxkcmVuLmNoaWxkMSgpID0gRWRnZShkYXRhTm9kZUlu
ZGV4KTsKLSAgICAgICAgICAgIG1fZ3JhcGgucmVmKGRhdGFOb2RlSW5kZXgpOwotICAgICAgICAg
ICAgTm9kZUluZGV4IG9sZFRhaWxJbmRleCA9IG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRh
aWwub3BlcmFuZChsb2NhbCk7Ci0gICAgICAgICAgICBpZiAob2xkVGFpbEluZGV4ID09IG1fY29t
cGlsZUluZGV4KQotICAgICAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRh
aWwub3BlcmFuZChsb2NhbCkgPSByZXBsYWNlbWVudEluZGV4OworICAgICAgICAgICAgbm9kZS0+
Y2hpbGRyZW4uY2hpbGQxKCkgPSBFZGdlKGRhdGFOb2RlKTsKKyAgICAgICAgICAgIG1fZ3JhcGgu
cmVmKGRhdGFOb2RlKTsKKyAgICAgICAgICAgIE5vZGUqIG9sZFRhaWwgPSBtX2N1cnJlbnRCbG9j
ay0+dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQobG9jYWwpOworICAgICAgICAgICAgaWYgKG9sZFRh
aWwgPT0gbm9kZSkKKyAgICAgICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRU
YWlsLm9wZXJhbmQobG9jYWwpID0gcmVwbGFjZW1lbnQ7CiAgICAgICAgICAgICBtX2NoYW5nZWQg
PSB0cnVlOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTEyNzUsMTEgKzEyNTMs
MTEgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAgICAg
IGNhc2UgR2V0QXJyYXlMZW5ndGg6Ci0gICAgICAgICAgICBzZXRSZXBsYWNlbWVudChnZXRBcnJh
eUxlbmd0aEVsaW1pbmF0aW9uKG5vZGUuY2hpbGQxKCkuaW5kZXgoKSkpOworICAgICAgICAgICAg
c2V0UmVwbGFjZW1lbnQoZ2V0QXJyYXlMZW5ndGhFbGltaW5hdGlvbihub2RlLT5jaGlsZDEoKS5u
b2RlKCkpKTsKICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2UgR2V0TXlTY29wZToK
LSAgICAgICAgICAgIHNldFJlcGxhY2VtZW50KGdldE15U2NvcGVMb2FkRWxpbWluYXRpb24obm9k
ZS5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSkpOworICAgICAgICAgICAgc2V0UmVwbGFjZW1l
bnQoZ2V0TXlTY29wZUxvYWRFbGltaW5hdGlvbihub2RlLT5jb2RlT3JpZ2luLmlubGluZUNhbGxG
cmFtZSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICAgICAgLy8gSGFu
ZGxlIG5vZGVzIHRoYXQgYXJlIGNvbmRpdGlvbmFsbHkgcHVyZTogdGhlc2UgYXJlIHB1cmUsIGFu
ZCBjYW4KQEAgLTEyOTEsOSArMTI2OSw5IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgQ29tcGFy
ZUdyZWF0ZXJFcToKICAgICAgICAgY2FzZSBDb21wYXJlRXE6IHsKICAgICAgICAgICAgIGlmICht
X2dyYXBoLmlzUHJlZGljdGVkTnVtZXJpY2FsKG5vZGUpKSB7Ci0gICAgICAgICAgICAgICAgTm9k
ZUluZGV4IHJlcGxhY2VtZW50SW5kZXggPSBwdXJlQ1NFKG5vZGUpOwotICAgICAgICAgICAgICAg
IGlmIChyZXBsYWNlbWVudEluZGV4ICE9IE5vTm9kZSAmJiBtX2dyYXBoLmlzUHJlZGljdGVkTnVt
ZXJpY2FsKG1fZ3JhcGhbcmVwbGFjZW1lbnRJbmRleF0pKQotICAgICAgICAgICAgICAgICAgICBz
ZXRSZXBsYWNlbWVudChyZXBsYWNlbWVudEluZGV4KTsKKyAgICAgICAgICAgICAgICBOb2RlKiBy
ZXBsYWNlbWVudCA9IHB1cmVDU0Uobm9kZSk7CisgICAgICAgICAgICAgICAgaWYgKHJlcGxhY2Vt
ZW50ICYmIG1fZ3JhcGguaXNQcmVkaWN0ZWROdW1lcmljYWwocmVwbGFjZW1lbnQpKQorICAgICAg
ICAgICAgICAgICAgICBzZXRSZXBsYWNlbWVudChyZXBsYWNlbWVudCk7CiAgICAgICAgICAgICB9
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtMTMwMSwxNiArMTI3OSwxNiBAQCBw
cml2YXRlOgogICAgICAgICAvLyBGaW5hbGx5IGhhbmRsZSBoZWFwIGFjY2Vzc2VzLiBUaGVzZSBh
cmUgbm90IHF1aXRlIHB1cmUsIGJ1dCB3ZSBjYW4gc3RpbGwKICAgICAgICAgLy8gb3B0aW1pemUg
dGhlbSBwcm92aWRlZCB0aGF0IHNvbWUgc3VidGxlIGNvbmRpdGlvbnMgYXJlIG1ldC4KICAgICAg
ICAgY2FzZSBHZXRHbG9iYWxWYXI6Ci0gICAgICAgICAgICBzZXRSZXBsYWNlbWVudChnbG9iYWxW
YXJMb2FkRWxpbWluYXRpb24obm9kZS5yZWdpc3RlclBvaW50ZXIoKSkpOworICAgICAgICAgICAg
c2V0UmVwbGFjZW1lbnQoZ2xvYmFsVmFyTG9hZEVsaW1pbmF0aW9uKG5vZGUtPnJlZ2lzdGVyUG9p
bnRlcigpKSk7CiAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICBjYXNlIEdldFNjb3BlZFZh
cjogewotICAgICAgICAgICAgc2V0UmVwbGFjZW1lbnQoc2NvcGVkVmFyTG9hZEVsaW1pbmF0aW9u
KG5vZGUuY2hpbGQxKCkuaW5kZXgoKSwgbm9kZS52YXJOdW1iZXIoKSkpOworICAgICAgICAgICAg
c2V0UmVwbGFjZW1lbnQoc2NvcGVkVmFyTG9hZEVsaW1pbmF0aW9uKG5vZGUtPmNoaWxkMSgpLm5v
ZGUoKSwgbm9kZS0+dmFyTnVtYmVyKCkpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9
CiAKICAgICAgICAgY2FzZSBHbG9iYWxWYXJXYXRjaHBvaW50OgotICAgICAgICAgICAgaWYgKGds
b2JhbFZhcldhdGNocG9pbnRFbGltaW5hdGlvbihub2RlLnJlZ2lzdGVyUG9pbnRlcigpKSkKKyAg
ICAgICAgICAgIGlmIChnbG9iYWxWYXJXYXRjaHBvaW50RWxpbWluYXRpb24obm9kZS0+cmVnaXN0
ZXJQb2ludGVyKCkpKQogICAgICAgICAgICAgICAgIGVsaW1pbmF0ZSgpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICAKQEAgLTEzMTgsODMgKzEyOTYsODMgQEAgcHJpdmF0ZToKICAg
ICAgICAgY2FzZSBQdXRHbG9iYWxWYXJDaGVjazoKICAgICAgICAgICAgIGlmIChtX2dyYXBoLm1f
Zml4cG9pbnRTdGF0ZSA9PSBGaXhwb2ludE5vdENvbnZlcmdlZCkKICAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgIGVsaW1pbmF0ZShnbG9iYWxWYXJTdG9yZUVsaW1pbmF0aW9uKG5v
ZGUucmVnaXN0ZXJQb2ludGVyKCkpKTsKKyAgICAgICAgICAgIGVsaW1pbmF0ZShnbG9iYWxWYXJT
dG9yZUVsaW1pbmF0aW9uKG5vZGUtPnJlZ2lzdGVyUG9pbnRlcigpKSk7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgIAogICAgICAgICBjYXNlIFB1dFNjb3BlZFZhcjogewogICAgICAg
ICAgICAgaWYgKG1fZ3JhcGgubV9maXhwb2ludFN0YXRlID09IEZpeHBvaW50Tm90Q29udmVyZ2Vk
KQogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgZWxpbWluYXRlKHNjb3BlZFZh
clN0b3JlRWxpbWluYXRpb24obm9kZS5jaGlsZDEoKS5pbmRleCgpLCBub2RlLmNoaWxkMigpLmlu
ZGV4KCksIG5vZGUudmFyTnVtYmVyKCkpKTsKKyAgICAgICAgICAgIGVsaW1pbmF0ZShzY29wZWRW
YXJTdG9yZUVsaW1pbmF0aW9uKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgbm9kZS0+Y2hpbGQyKCku
bm9kZSgpLCBub2RlLT52YXJOdW1iZXIoKSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IH0KIAogICAgICAgICBjYXNlIEdldEJ5VmFsOgogICAgICAgICAgICAgaWYgKG1fZ3JhcGguYnlW
YWxJc1B1cmUobm9kZSkpCi0gICAgICAgICAgICAgICAgc2V0UmVwbGFjZW1lbnQoZ2V0QnlWYWxM
b2FkRWxpbWluYXRpb24obm9kZS5jaGlsZDEoKS5pbmRleCgpLCBub2RlLmNoaWxkMigpLmluZGV4
KCkpKTsKKyAgICAgICAgICAgICAgICBzZXRSZXBsYWNlbWVudChnZXRCeVZhbExvYWRFbGltaW5h
dGlvbihub2RlLT5jaGlsZDEoKS5ub2RlKCksIG5vZGUtPmNoaWxkMigpLm5vZGUoKSkpOwogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBQdXRCeVZhbDogewog
ICAgICAgICAgICAgRWRnZSBjaGlsZDEgPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApOwog
ICAgICAgICAgICAgRWRnZSBjaGlsZDIgPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpOwot
ICAgICAgICAgICAgaWYgKG5vZGUuYXJyYXlNb2RlKCkuY2FuQ1NFU3RvcmFnZSgpKSB7Ci0gICAg
ICAgICAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRleCA9IGdldEJ5VmFsTG9hZEVsaW1pbmF0aW9u
KGNoaWxkMS5pbmRleCgpLCBjaGlsZDIuaW5kZXgoKSk7Ci0gICAgICAgICAgICAgICAgaWYgKG5v
ZGVJbmRleCA9PSBOb05vZGUpCisgICAgICAgICAgICBpZiAobm9kZS0+YXJyYXlNb2RlKCkuY2Fu
Q1NFU3RvcmFnZSgpKSB7CisgICAgICAgICAgICAgICAgTm9kZSogcmVwbGFjZW1lbnQgPSBnZXRC
eVZhbExvYWRFbGltaW5hdGlvbihjaGlsZDEubm9kZSgpLCBjaGlsZDIubm9kZSgpKTsKKyAgICAg
ICAgICAgICAgICBpZiAoIXJlcGxhY2VtZW50KQogICAgICAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgICAgICBub2RlLnNldE9wKFB1dEJ5VmFsQWxpYXMpOworICAgICAgICAgICAg
ICAgIG5vZGUtPnNldE9wKFB1dEJ5VmFsQWxpYXMpOwogICAgICAgICAgICAgfQogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBjYXNlIENoZWNrU3Ry
dWN0dXJlOgogICAgICAgICBjYXNlIEZvcndhcmRDaGVja1N0cnVjdHVyZToKLSAgICAgICAgICAg
IGlmIChjaGVja1N0cnVjdHVyZUVsaW1pbmF0aW9uKG5vZGUuc3RydWN0dXJlU2V0KCksIG5vZGUu
Y2hpbGQxKCkuaW5kZXgoKSkpCisgICAgICAgICAgICBpZiAoY2hlY2tTdHJ1Y3R1cmVFbGltaW5h
dGlvbihub2RlLT5zdHJ1Y3R1cmVTZXQoKSwgbm9kZS0+Y2hpbGQxKCkubm9kZSgpKSkKICAgICAg
ICAgICAgICAgICBlbGltaW5hdGUoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
CiAgICAgICAgIGNhc2UgU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnQ6CiAgICAgICAgIGNh
c2UgRm9yd2FyZFN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50OgotICAgICAgICAgICAgaWYg
KHN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50RWxpbWluYXRpb24obm9kZS5zdHJ1Y3R1cmUo
KSwgbm9kZS5jaGlsZDEoKS5pbmRleCgpKSkKKyAgICAgICAgICAgIGlmIChzdHJ1Y3R1cmVUcmFu
c2l0aW9uV2F0Y2hwb2ludEVsaW1pbmF0aW9uKG5vZGUtPnN0cnVjdHVyZSgpLCBub2RlLT5jaGls
ZDEoKS5ub2RlKCkpKQogICAgICAgICAgICAgICAgIGVsaW1pbmF0ZSgpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBQdXRTdHJ1Y3R1cmU6CiAgICAgICAg
ICAgICBpZiAobV9ncmFwaC5tX2ZpeHBvaW50U3RhdGUgPT0gRml4cG9pbnROb3RDb252ZXJnZWQp
CiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBlbGltaW5hdGUocHV0U3RydWN0
dXJlU3RvcmVFbGltaW5hdGlvbihub2RlLmNoaWxkMSgpLmluZGV4KCkpLCBQaGFudG9tUHV0U3Ry
dWN0dXJlKTsKKyAgICAgICAgICAgIGVsaW1pbmF0ZShwdXRTdHJ1Y3R1cmVTdG9yZUVsaW1pbmF0
aW9uKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSksIFBoYW50b21QdXRTdHJ1Y3R1cmUpOwogICAgICAg
ICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSBDaGVja0Z1bmN0aW9uOgotICAgICAgICAgICAg
aWYgKGNoZWNrRnVuY3Rpb25FbGltaW5hdGlvbihub2RlLmZ1bmN0aW9uKCksIG5vZGUuY2hpbGQx
KCkuaW5kZXgoKSkpCisgICAgICAgICAgICBpZiAoY2hlY2tGdW5jdGlvbkVsaW1pbmF0aW9uKG5v
ZGUtPmZ1bmN0aW9uKCksIG5vZGUtPmNoaWxkMSgpLm5vZGUoKSkpCiAgICAgICAgICAgICAgICAg
ZWxpbWluYXRlKCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAKICAgICAg
ICAgY2FzZSBDaGVja0V4ZWN1dGFibGU6Ci0gICAgICAgICAgICBpZiAoY2hlY2tFeGVjdXRhYmxl
RWxpbWluYXRpb24obm9kZS5leGVjdXRhYmxlKCksIG5vZGUuY2hpbGQxKCkuaW5kZXgoKSkpCisg
ICAgICAgICAgICBpZiAoY2hlY2tFeGVjdXRhYmxlRWxpbWluYXRpb24obm9kZS0+ZXhlY3V0YWJs
ZSgpLCBub2RlLT5jaGlsZDEoKS5ub2RlKCkpKQogICAgICAgICAgICAgICAgIGVsaW1pbmF0ZSgp
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgQ2hl
Y2tBcnJheToKLSAgICAgICAgICAgIGlmIChjaGVja0FycmF5RWxpbWluYXRpb24obm9kZS5jaGls
ZDEoKS5pbmRleCgpLCBub2RlLmFycmF5TW9kZSgpKSkKKyAgICAgICAgICAgIGlmIChjaGVja0Fy
cmF5RWxpbWluYXRpb24obm9kZS0+Y2hpbGQxKCkubm9kZSgpLCBub2RlLT5hcnJheU1vZGUoKSkp
CiAgICAgICAgICAgICAgICAgZWxpbWluYXRlKCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgIAogICAgICAgICBjYXNlIEdldEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2U6IHsKLSAgICAg
ICAgICAgIHNldFJlcGxhY2VtZW50KGdldEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2VMb2FkRWxpbWlu
YXRpb24obm9kZS5jaGlsZDEoKS5pbmRleCgpLCBub2RlLmFycmF5TW9kZSgpKSk7CisgICAgICAg
ICAgICBzZXRSZXBsYWNlbWVudChnZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlTG9hZEVsaW1pbmF0
aW9uKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgbm9kZS0+YXJyYXlNb2RlKCkpKTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBHZXRCdXR0ZXJmbHk6Ci0gICAg
ICAgICAgICBzZXRSZXBsYWNlbWVudChnZXRQcm9wZXJ0eVN0b3JhZ2VMb2FkRWxpbWluYXRpb24o
bm9kZS5jaGlsZDEoKS5pbmRleCgpKSk7CisgICAgICAgICAgICBzZXRSZXBsYWNlbWVudChnZXRQ
cm9wZXJ0eVN0b3JhZ2VMb2FkRWxpbWluYXRpb24obm9kZS0+Y2hpbGQxKCkubm9kZSgpKSk7CiAg
ICAgICAgICAgICBicmVhazsKIAogICAgICAgICBjYXNlIEdldEJ5T2Zmc2V0OgotICAgICAgICAg
ICAgc2V0UmVwbGFjZW1lbnQoZ2V0QnlPZmZzZXRMb2FkRWxpbWluYXRpb24obV9ncmFwaC5tX3N0
b3JhZ2VBY2Nlc3NEYXRhW25vZGUuc3RvcmFnZUFjY2Vzc0RhdGFJbmRleCgpXS5pZGVudGlmaWVy
TnVtYmVyLCBub2RlLmNoaWxkMSgpLmluZGV4KCkpKTsKKyAgICAgICAgICAgIHNldFJlcGxhY2Vt
ZW50KGdldEJ5T2Zmc2V0TG9hZEVsaW1pbmF0aW9uKG1fZ3JhcGgubV9zdG9yYWdlQWNjZXNzRGF0
YVtub2RlLT5zdG9yYWdlQWNjZXNzRGF0YUluZGV4KCldLmlkZW50aWZpZXJOdW1iZXIsIG5vZGUt
PmNoaWxkMSgpLm5vZGUoKSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAg
ICAgICAgY2FzZSBQdXRCeU9mZnNldDoKICAgICAgICAgICAgIGlmIChtX2dyYXBoLm1fZml4cG9p
bnRTdGF0ZSA9PSBGaXhwb2ludE5vdENvbnZlcmdlZCkKICAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgIGVsaW1pbmF0ZShwdXRCeU9mZnNldFN0b3JlRWxpbWluYXRpb24obV9ncmFw
aC5tX3N0b3JhZ2VBY2Nlc3NEYXRhW25vZGUuc3RvcmFnZUFjY2Vzc0RhdGFJbmRleCgpXS5pZGVu
dGlmaWVyTnVtYmVyLCBub2RlLmNoaWxkMSgpLmluZGV4KCkpKTsKKyAgICAgICAgICAgIGVsaW1p
bmF0ZShwdXRCeU9mZnNldFN0b3JlRWxpbWluYXRpb24obV9ncmFwaC5tX3N0b3JhZ2VBY2Nlc3NE
YXRhW25vZGUtPnN0b3JhZ2VBY2Nlc3NEYXRhSW5kZXgoKV0uaWRlbnRpZmllck51bWJlciwgbm9k
ZS0+Y2hpbGQxKCkubm9kZSgpKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIAog
ICAgICAgICBjYXNlIFBoYW50b206CkBAIC0xNDA4LDcgKzEzODYsNyBAQCBwcml2YXRlOgogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIG1fbGFzdFNlZW5b
bm9kZS5vcCgpXSA9IG1faW5kZXhJbkJsb2NrOworICAgICAgICBtX2xhc3RTZWVuW25vZGUtPm9w
KCldID0gbV9pbmRleEluQmxvY2s7CiAjaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9W
RVJCT1NFKQogICAgICAgICBkYXRhTG9nRigiXG4iKTsKICNlbmRpZgpAQCAtMTQyOSwzNyArMTQw
NywzNiBAQCBwcml2YXRlOgogICAgICAgICAvLyByZXBsYWNlbWVudHMgY2xlYXJlZCwgc28gd2Ug
ZG9uJ3QgZ2V0IGNvbmZ1c2VkIHdoaWxlIGRvaW5nIHN1YnN0aXR1dGlvbnMgb24KICAgICAgICAg
Ly8gR2V0TG9jYWwncy4KICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGJsb2NrLT5w
aGlzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICBBU1NFUlQobV9ncmFwaFtibG9jay0+cGhp
c1tpXV0uZmxhZ3MoKSAmIE5vZGVSZWxldmFudFRvT1NSKTsKLSAgICAgICAgICAgIG1fZ3JhcGhb
YmxvY2stPnBoaXNbaV1dLnJlcGxhY2VtZW50ID0gTm9Ob2RlOworICAgICAgICAgICAgQVNTRVJU
KGJsb2NrLT5waGlzW2ldLT5mbGFncygpICYgTm9kZVJlbGV2YW50VG9PU1IpOworICAgICAgICAg
ICAgYmxvY2stPnBoaXNbaV0tPnJlcGxhY2VtZW50ID0gMDsKICAgICAgICAgfQogICAgICAgICAK
ICAgICAgICAgLy8gTWFrZSBhbGwgb2YgbXkgU2V0TG9jYWwgYW5kIEdldExvY2FsIG5vZGVzIHJl
bGV2YW50IHRvIE9TUiwgYW5kIGRvIHNvbWUgb3RoZXIKICAgICAgICAgLy8gbmVjZXNzYXJ5IGJv
b2trZWVwaW5nLgogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYmxvY2stPnNpemUo
KTsgKytpKSB7Ci0gICAgICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4ID0gYmxvY2stPmF0KGkp
OwotICAgICAgICAgICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhbbm9kZUluZGV4XTsKKyAgICAgICAg
ICAgIE5vZGUqIG5vZGUgPSBibG9jay0+YXQoaSk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAg
IG5vZGUucmVwbGFjZW1lbnQgPSBOb05vZGU7CisgICAgICAgICAgICBub2RlLT5yZXBsYWNlbWVu
dCA9IDA7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIHN3aXRjaCAobm9kZS5vcCgpKSB7Cisg
ICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKICAgICAgICAgICAgIGNhc2UgU2V0TG9j
YWw6CiAgICAgICAgICAgICBjYXNlIEdldExvY2FsOiAvLyBGSVhNRTogVGhlIEdldExvY2FsIGNh
c2UgaXMgb25seSBuZWNlc3NhcnkgdW50aWwgd2UgZG8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTEwNjcwNy4KLSAgICAgICAgICAgICAgICBub2RlLm1lcmdlRmxhZ3Mo
Tm9kZVJlbGV2YW50VG9PU1IpOworICAgICAgICAgICAgICAgIG5vZGUtPm1lcmdlRmxhZ3MoTm9k
ZVJlbGV2YW50VG9PU1IpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgZGVm
YXVsdDoKLSAgICAgICAgICAgICAgICBub2RlLmNsZWFyRmxhZ3MoTm9kZVJlbGV2YW50VG9PU1Ip
OworICAgICAgICAgICAgICAgIG5vZGUtPmNsZWFyRmxhZ3MoTm9kZVJlbGV2YW50VG9PU1IpOwog
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAKICAgICAg
ICAgZm9yIChtX2luZGV4SW5CbG9jayA9IDA7IG1faW5kZXhJbkJsb2NrIDwgYmxvY2stPnNpemUo
KTsgKyttX2luZGV4SW5CbG9jaykgewotICAgICAgICAgICAgbV9jb21waWxlSW5kZXggPSBibG9j
ay0+YXQobV9pbmRleEluQmxvY2spOwotICAgICAgICAgICAgcGVyZm9ybU5vZGVDU0UobV9ncmFw
aFttX2NvbXBpbGVJbmRleF0pOworICAgICAgICAgICAgbV9jdXJyZW50Tm9kZSA9IGJsb2NrLT5h
dChtX2luZGV4SW5CbG9jayk7CisgICAgICAgICAgICBwZXJmb3JtTm9kZUNTRShtX2N1cnJlbnRO
b2RlKTsKICAgICAgICAgfQogICAgIH0KICAgICAKICAgICBCYXNpY0Jsb2NrKiBtX2N1cnJlbnRC
bG9jazsKLSAgICBOb2RlSW5kZXggbV9jb21waWxlSW5kZXg7CisgICAgTm9kZSogbV9jdXJyZW50
Tm9kZTsKICAgICB1bnNpZ25lZCBtX2luZGV4SW5CbG9jazsKICAgICBGaXhlZEFycmF5PHVuc2ln
bmVkLCBMYXN0Tm9kZVR5cGU+IG1fbGFzdFNlZW47CiAgICAgYm9vbCBtX2NoYW5nZWQ7IC8vIE9u
bHkgdHJhY2tzIGNoYW5nZXMgdGhhdCBoYXZlIGEgc3Vic3RhbnRpdmUgZWZmZWN0IG9uIG90aGVy
IG9wdGltaXphdGlvbnMuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1v
bi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb24u
Y3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb24u
Y3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJE
RkdDb21tb24uaCIKKworI2lmIEVOQUJMRShERkdfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIERGRyB7CisKK3ZvaWQgTm9kZVBvaW50ZXJUcmFpdHM6OmR1bXAoTm9kZSogdmFsdWUs
IFByaW50U3RyZWFtJiBvdXQpCit7CisgICAgb3V0LnByaW50KHZhbHVlKTsKK30KKworfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb24uaAkocmV2aXNpb24gMTQwNjE2KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb24uaAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTIgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEyLCAyMDEzIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtODEsMjIgKzgxLDE0IEBACiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZH
IHsKIAotLy8gVHlwZSBmb3IgYSByZWZlcmVuY2UgdG8gYW5vdGhlciBub2RlIGluIHRoZSBncmFw
aC4KLXR5cGVkZWYgdWludDMyX3QgTm9kZUluZGV4Owotc3RhdGljIGNvbnN0IE5vZGVJbmRleCBO
b05vZGUgPSBVSU5UX01BWDsKK2NsYXNzIE5vZGU7CiAKIHR5cGVkZWYgdWludDMyX3QgQmxvY2tJ
bmRleDsKIHN0YXRpYyBjb25zdCBCbG9ja0luZGV4IE5vQmxvY2sgPSBVSU5UX01BWDsKIAotc3Ry
dWN0IE5vZGVJbmRleFRyYWl0cyB7Ci0gICAgc3RhdGljIE5vZGVJbmRleCBkZWZhdWx0VmFsdWUo
KSB7IHJldHVybiBOb05vZGU7IH0KLSAgICBzdGF0aWMgdm9pZCBkdW1wKE5vZGVJbmRleCB2YWx1
ZSwgUHJpbnRTdHJlYW0mIG91dCkKLSAgICB7Ci0gICAgICAgIGlmICh2YWx1ZSA9PSBOb05vZGUp
Ci0gICAgICAgICAgICBvdXQucHJpbnRmKCItIik7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAg
IG91dC5wcmludGYoIkAldSIsIHZhbHVlKTsKLSAgICB9CitzdHJ1Y3QgTm9kZVBvaW50ZXJUcmFp
dHMgeworICAgIHN0YXRpYyBOb2RlKiBkZWZhdWx0VmFsdWUoKSB7IHJldHVybiAwOyB9CisgICAg
c3RhdGljIHZvaWQgZHVtcChOb2RlKiB2YWx1ZSwgUHJpbnRTdHJlYW0mIG91dCk7CiB9OwogCiBl
bnVtIFVzZUtpbmQgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFu
dEZvbGRpbmdQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAJKHJldmlzaW9uIDE0MDYxNikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTMgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC03NSwyMiArNzUsMjEgQEAgcHJpdmF0ZToKICAgICAgICAgYm9vbCBjaGFuZ2VkID0g
ZmFsc2U7CiAgICAgICAgIG1fc3RhdGUuYmVnaW5CYXNpY0Jsb2NrKGJsb2NrKTsKICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpbmRleEluQmxvY2sgPSAwOyBpbmRleEluQmxvY2sgPCBibG9jay0+c2l6
ZSgpOyArK2luZGV4SW5CbG9jaykgewotICAgICAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRleCA9
IGJsb2NrLT5hdChpbmRleEluQmxvY2spOwotICAgICAgICAgICAgTm9kZSYgbm9kZSA9IG1fZ3Jh
cGhbbm9kZUluZGV4XTsKLSAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGlmICghbV9zdGF0
ZS5pc1ZhbGlkKCkpCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKKyAgICAg
ICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+YXQoaW5kZXhJbkJsb2NrKTsKKwogICAgICAgICAg
ICAgYm9vbCBlbGltaW5hdGVkID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgIAotICAgICAg
ICAgICAgc3dpdGNoIChub2RlLm9wKCkpIHsKKyAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3Ao
KSkgewogICAgICAgICAgICAgY2FzZSBDaGVja0FyZ3VtZW50c05vdENyZWF0ZWQ6IHsKICAgICAg
ICAgICAgICAgICBpZiAoIWlzRW1wdHlTcGVjdWxhdGlvbigKICAgICAgICAgICAgICAgICAgICAg
ICAgIG1fc3RhdGUudmFyaWFibGVzKCkub3BlcmFuZCgKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBtX2dyYXBoLmFyZ3VtZW50c1JlZ2lzdGVyRm9yKG5vZGUuY29kZU9yaWdpbikpLm1fdHlw
ZSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5hcmd1bWVudHNSZWdpc3Rl
ckZvcihub2RlLT5jb2RlT3JpZ2luKSkubV90eXBlKSkKICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICAgICAgQVNTRVJUKG5vZGUucmVmQ291bnQoKSA9PSAxKTsKLSAgICAg
ICAgICAgICAgICBub2RlLnNldE9wQW5kRGVmYXVsdEZsYWdzKFBoYW50b20pOworICAgICAgICAg
ICAgICAgIG5vZGUtPnNldE9wQW5kRGVmYXVsdEZsYWdzKFBoYW50b20pOwogICAgICAgICAgICAg
ICAgIGVsaW1pbmF0ZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgfQpAQCAtOTgsMjQgKzk3LDI0IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBjYXNlIENoZWNr
U3RydWN0dXJlOgogICAgICAgICAgICAgY2FzZSBGb3J3YXJkQ2hlY2tTdHJ1Y3R1cmU6CiAgICAg
ICAgICAgICBjYXNlIEFycmF5aWZ5VG9TdHJ1Y3R1cmU6IHsKLSAgICAgICAgICAgICAgICBBYnN0
cmFjdFZhbHVlJiB2YWx1ZSA9IG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKTsKKyAgICAg
ICAgICAgICAgICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSA9IG1fc3RhdGUuZm9yTm9kZShub2RlLT5j
aGlsZDEoKSk7CiAgICAgICAgICAgICAgICAgU3RydWN0dXJlU2V0IHNldDsKLSAgICAgICAgICAg
ICAgICBpZiAobm9kZS5vcCgpID09IEFycmF5aWZ5VG9TdHJ1Y3R1cmUpCi0gICAgICAgICAgICAg
ICAgICAgIHNldCA9IG5vZGUuc3RydWN0dXJlKCk7CisgICAgICAgICAgICAgICAgaWYgKG5vZGUt
Pm9wKCkgPT0gQXJyYXlpZnlUb1N0cnVjdHVyZSkKKyAgICAgICAgICAgICAgICAgICAgc2V0ID0g
bm9kZS0+c3RydWN0dXJlKCk7CiAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAg
ICAgICBzZXQgPSBub2RlLnN0cnVjdHVyZVNldCgpOworICAgICAgICAgICAgICAgICAgICBzZXQg
PSBub2RlLT5zdHJ1Y3R1cmVTZXQoKTsKICAgICAgICAgICAgICAgICBpZiAoIWlzQ2VsbFNwZWN1
bGF0aW9uKHZhbHVlLm1fdHlwZSkpCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgICAgIGlmICh2YWx1ZS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5pc1N1YnNldE9mKHNl
dCkpIHsKICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKG5vZGUucmVmQ291bnQoKSA9PSAxKTsK
LSAgICAgICAgICAgICAgICAgICAgbm9kZS5zZXRPcEFuZERlZmF1bHRGbGFncyhQaGFudG9tKTsK
KyAgICAgICAgICAgICAgICAgICAgbm9kZS0+c2V0T3BBbmREZWZhdWx0RmxhZ3MoUGhhbnRvbSk7
CiAgICAgICAgICAgICAgICAgICAgIGVsaW1pbmF0ZWQgPSB0cnVlOwogICAgICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgU3RydWN0dXJl
QWJzdHJhY3RWYWx1ZSYgc3RydWN0dXJlVmFsdWUgPSB2YWx1ZS5tX2Z1dHVyZVBvc3NpYmxlU3Ry
dWN0dXJlOwogICAgICAgICAgICAgICAgIGlmIChzdHJ1Y3R1cmVWYWx1ZS5pc1N1YnNldE9mKHNl
dCkKICAgICAgICAgICAgICAgICAgICAgJiYgc3RydWN0dXJlVmFsdWUuaGFzU2luZ2xldG9uKCkp
IHsKLSAgICAgICAgICAgICAgICAgICAgbm9kZS5jb252ZXJ0VG9TdHJ1Y3R1cmVUcmFuc2l0aW9u
V2F0Y2hwb2ludChzdHJ1Y3R1cmVWYWx1ZS5zaW5nbGV0b24oKSk7CisgICAgICAgICAgICAgICAg
ICAgIG5vZGUtPmNvbnZlcnRUb1N0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50KHN0cnVjdHVy
ZVZhbHVlLnNpbmdsZXRvbigpKTsKICAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCA9IHRydWU7
CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTIzLDM3ICsx
MjIsMzcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGNhc2UgQ2hl
Y2tBcnJheToKICAgICAgICAgICAgIGNhc2UgQXJyYXlpZnk6IHsKLSAgICAgICAgICAgICAgICBp
ZiAoIW5vZGUuYXJyYXlNb2RlKCkuYWxyZWFkeUNoZWNrZWQobV9ncmFwaCwgbm9kZSwgbV9zdGF0
ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpKSkKKyAgICAgICAgICAgICAgICBpZiAoIW5vZGUtPmFy
cmF5TW9kZSgpLmFscmVhZHlDaGVja2VkKG1fZ3JhcGgsIG5vZGUsIG1fc3RhdGUuZm9yTm9kZShu
b2RlLT5jaGlsZDEoKSkpKQogICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
ICAgICBBU1NFUlQobm9kZS5yZWZDb3VudCgpID09IDEpOwotICAgICAgICAgICAgICAgIG5vZGUu
c2V0T3BBbmREZWZhdWx0RmxhZ3MoUGhhbnRvbSk7CisgICAgICAgICAgICAgICAgQVNTRVJUKG5v
ZGUtPnJlZkNvdW50KCkgPT0gMSk7CisgICAgICAgICAgICAgICAgbm9kZS0+c2V0T3BBbmREZWZh
dWx0RmxhZ3MoUGhhbnRvbSk7CiAgICAgICAgICAgICAgICAgZWxpbWluYXRlZCA9IHRydWU7CiAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCiAg
ICAgICAgICAgICBjYXNlIENoZWNrRnVuY3Rpb246IHsKLSAgICAgICAgICAgICAgICBpZiAobV9z
dGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLnZhbHVlKCkgIT0gbm9kZS5mdW5jdGlvbigpKQor
ICAgICAgICAgICAgICAgIGlmIChtX3N0YXRlLmZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLnZhbHVl
KCkgIT0gbm9kZS0+ZnVuY3Rpb24oKSkKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICAgICAgbm9kZS5zZXRPcEFuZERlZmF1bHRGbGFncyhQaGFudG9tKTsKKyAgICAgICAg
ICAgICAgICBub2RlLT5zZXRPcEFuZERlZmF1bHRGbGFncyhQaGFudG9tKTsKICAgICAgICAgICAg
ICAgICBlbGltaW5hdGVkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGNhc2UgQ29udmVydFRoaXM6IHsK
LSAgICAgICAgICAgICAgICBpZiAoIWlzT2JqZWN0U3BlY3VsYXRpb24obV9zdGF0ZS5mb3JOb2Rl
KG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpCisgICAgICAgICAgICAgICAgaWYgKCFpc09iamVjdFNw
ZWN1bGF0aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLT5jaGlsZDEoKSkubV90eXBlKSkKICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgbm9kZS5zZXRPcEFuZERlZmF1
bHRGbGFncyhJZGVudGl0eSk7CisgICAgICAgICAgICAgICAgbm9kZS0+c2V0T3BBbmREZWZhdWx0
RmxhZ3MoSWRlbnRpdHkpOwogICAgICAgICAgICAgICAgIGNoYW5nZWQgPSB0cnVlOwogICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIAogICAgICAg
ICAgICAgY2FzZSBHZXRCeUlkOgogICAgICAgICAgICAgY2FzZSBHZXRCeUlkRmx1c2g6IHsKLSAg
ICAgICAgICAgICAgICBDb2RlT3JpZ2luIGNvZGVPcmlnaW4gPSBub2RlLmNvZGVPcmlnaW47Ci0g
ICAgICAgICAgICAgICAgTm9kZUluZGV4IGNoaWxkID0gbm9kZS5jaGlsZDEoKS5pbmRleCgpOwot
ICAgICAgICAgICAgICAgIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIgPSBub2RlLmlkZW50aWZp
ZXJOdW1iZXIoKTsKKyAgICAgICAgICAgICAgICBDb2RlT3JpZ2luIGNvZGVPcmlnaW4gPSBub2Rl
LT5jb2RlT3JpZ2luOworICAgICAgICAgICAgICAgIE5vZGUqIGNoaWxkID0gbm9kZS0+Y2hpbGQx
KCkubm9kZSgpOworICAgICAgICAgICAgICAgIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIgPSBu
b2RlLT5pZGVudGlmaWVyTnVtYmVyKCk7CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAg
ICAgaWYgKCFpc0NlbGxTcGVjdWxhdGlvbihtX2dyYXBoW2NoaWxkXS5wcmVkaWN0aW9uKCkpKQor
ICAgICAgICAgICAgICAgIGlmICghaXNDZWxsU3BlY3VsYXRpb24oY2hpbGQtPnByZWRpY3Rpb24o
KSkpCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIAogICAgICAg
ICAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gbV9zdGF0ZS5mb3JOb2RlKGNoaWxkKS5i
ZXN0UHJvdmVuU3RydWN0dXJlKCk7CkBAIC0xODcsNyArMTg2LDcgQEAgcHJpdmF0ZToKICAgICAg
ICAgICAgICAgICAKICAgICAgICAgICAgICAgICBOb2RlSW5kZXggcHJvcGVydHlTdG9yYWdlSW5k
ZXg7CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgbV9ncmFwaFtjaGlsZF0ucmVm
KCk7CisgICAgICAgICAgICAgICAgY2hpbGQtPnJlZigpOwogICAgICAgICAgICAgICAgIGlmIChp
c0lubGluZU9mZnNldChzdGF0dXMub2Zmc2V0KCkpKQogICAgICAgICAgICAgICAgICAgICBwcm9w
ZXJ0eVN0b3JhZ2VJbmRleCA9IGNoaWxkOwogICAgICAgICAgICAgICAgIGVsc2UgewpAQCAtMTk2
LDcgKzE5NSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZCk7CiAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIG1fZ3Jh
cGhbbm9kZUluZGV4XS5jb252ZXJ0VG9HZXRCeU9mZnNldChtX2dyYXBoLm1fc3RvcmFnZUFjY2Vz
c0RhdGEuc2l6ZSgpLCBwcm9wZXJ0eVN0b3JhZ2VJbmRleCk7CisgICAgICAgICAgICAgICAgbm9k
ZS0+Y29udmVydFRvR2V0QnlPZmZzZXQobV9ncmFwaC5tX3N0b3JhZ2VBY2Nlc3NEYXRhLnNpemUo
KSwgcHJvcGVydHlTdG9yYWdlSW5kZXgpOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAg
ICAgIFN0b3JhZ2VBY2Nlc3NEYXRhIHN0b3JhZ2VBY2Nlc3NEYXRhOwogICAgICAgICAgICAgICAg
IHN0b3JhZ2VBY2Nlc3NEYXRhLm9mZnNldCA9IGluZGV4UmVsYXRpdmVUb0Jhc2Uoc3RhdHVzLm9m
ZnNldCgpKTsKQEAgLTIwNyw5ICsyMDYsOSBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIAog
ICAgICAgICAgICAgY2FzZSBQdXRCeUlkOgogICAgICAgICAgICAgY2FzZSBQdXRCeUlkRGlyZWN0
OiB7Ci0gICAgICAgICAgICAgICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2luID0gbm9kZS5jb2RlT3Jp
Z2luOwotICAgICAgICAgICAgICAgIE5vZGVJbmRleCBjaGlsZCA9IG5vZGUuY2hpbGQxKCkuaW5k
ZXgoKTsKLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyID0gbm9kZS5p
ZGVudGlmaWVyTnVtYmVyKCk7CisgICAgICAgICAgICAgICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2lu
ID0gbm9kZS0+Y29kZU9yaWdpbjsKKyAgICAgICAgICAgICAgICBOb2RlKiBjaGlsZCA9IG5vZGUt
PmNoaWxkMSgpLm5vZGUoKTsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBpZGVudGlmaWVyTnVt
YmVyID0gbm9kZS0+aWRlbnRpZmllck51bWJlcigpOwogICAgICAgICAgICAgICAgIAogICAgICAg
ICAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gbV9zdGF0ZS5mb3JOb2RlKGNoaWxkKS5i
ZXN0UHJvdmVuU3RydWN0dXJlKCk7CiAgICAgICAgICAgICAgICAgaWYgKCFzdHJ1Y3R1cmUpCkBA
IC0yMjIsNyArMjIxLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5n
bG9iYWxPYmplY3RGb3IoY29kZU9yaWdpbiksCiAgICAgICAgICAgICAgICAgICAgIHN0cnVjdHVy
ZSwKICAgICAgICAgICAgICAgICAgICAgY29kZUJsb2NrKCktPmlkZW50aWZpZXIoaWRlbnRpZmll
ck51bWJlciksCi0gICAgICAgICAgICAgICAgICAgIG5vZGUub3AoKSA9PSBQdXRCeUlkRGlyZWN0
KTsKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+b3AoKSA9PSBQdXRCeUlkRGlyZWN0KTsKICAg
ICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBpZiAoIXN0YXR1cy5pc1NpbXBsZVJlcGxh
Y2UoKSAmJiAhc3RhdHVzLmlzU2ltcGxlVHJhbnNpdGlvbigpKQogICAgICAgICAgICAgICAgICAg
ICBicmVhazsKQEAgLTI0Nyw3ICsyNDYsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAg
ICB0cmFuc2l0aW9uRGF0YSA9IG1fZ3JhcGguYWRkU3RydWN0dXJlVHJhbnNpdGlvbkRhdGEoCiAg
ICAgICAgICAgICAgICAgICAgICAgICBTdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YShzdHJ1Y3R1cmUs
IHN0YXR1cy5uZXdTdHJ1Y3R1cmUoKSkpOwogICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAg
ICAgICAgICAgICAgaWYgKG5vZGUub3AoKSA9PSBQdXRCeUlkKSB7CisgICAgICAgICAgICAgICAg
ICAgIGlmIChub2RlLT5vcCgpID09IFB1dEJ5SWQpIHsKICAgICAgICAgICAgICAgICAgICAgICAg
IGlmICghc3RydWN0dXJlLT5zdG9yZWRQcm90b3R5cGUoKS5pc051bGwoKSkgewogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGFkZFN0cnVjdHVyZVRyYW5zaXRpb25DaGVjaygKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29kZU9yaWdpbiwgaW5kZXhJbkJsb2NrLApAQCAtMjY1
LDE4ICsyNjQsMTggQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgIH0KIAotICAgICAgICAgICAgICAgIE5vZGVJbmRleCBwcm9wZXJ0eVN0b3JhZ2VJbmRl
eDsKKyAgICAgICAgICAgICAgICBOb2RlKiBwcm9wZXJ0eVN0b3JhZ2U7CiAgICAgICAgICAgICAg
ICAgCiAgICAgICAgICAgICAgICAgaWYgKGlzSW5saW5lT2Zmc2V0KHN0YXR1cy5vZmZzZXQoKSkp
IHsKLSAgICAgICAgICAgICAgICAgICAgbV9ncmFwaFtjaGlsZF0ucmVmKCk7IC8vIFRoZSBjaGls
ZCB3aWxsIGJlIHVzZWQgYXMgdGhlIHByb3BlcnR5IGluZGV4LCBzbyByZWYgaXQgdG8gcmVmbGVj
dCB0aGUgZG91YmxlIHVzZS4KLSAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlTdG9yYWdlSW5k
ZXggPSBjaGlsZDsKKyAgICAgICAgICAgICAgICAgICAgY2hpbGQtPnJlZigpOyAvLyBUaGUgY2hp
bGQgd2lsbCBiZSB1c2VkIGFzIHRoZSBwcm9wZXJ0eSBpbmRleCwgc28gcmVmIGl0IHRvIHJlZmxl
Y3QgdGhlIGRvdWJsZSB1c2UuCisgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5U3RvcmFnZSA9
IGNoaWxkOwogICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RhdHVzLmlzU2ltcGxlUmVwbGFj
ZSgpIHx8IHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSA9PSBzdGF0dXMubmV3U3RydWN0
dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgcHJvcGVy
dHlTdG9yYWdlSW5kZXggPSBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAorICAgICAgICAgICAg
ICAgICAgICBwcm9wZXJ0eVN0b3JhZ2UgPSBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAogICAg
ICAgICAgICAgICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBSZWZDaGlsZHJlbiwgUmVmTm9kZSwg
U3BlY05vbmUsIEdldEJ1dHRlcmZseSwgY29kZU9yaWdpbiwgY2hpbGQpOwogICAgICAgICAgICAg
ICAgIH0gZWxzZSBpZiAoIXN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSkgewogICAgICAg
ICAgICAgICAgICAgICBBU1NFUlQoc3RhdHVzLm5ld1N0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBh
Y2l0eSgpKTsKICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKCFpc0lubGluZU9mZnNldChzdGF0
dXMub2Zmc2V0KCkpKTsKLSAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlTdG9yYWdlSW5kZXgg
PSBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAorICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0
eVN0b3JhZ2UgPSBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAogICAgICAgICAgICAgICAgICAg
ICAgICAgaW5kZXhJbkJsb2NrLCBSZWZDaGlsZHJlbiwgUmVmTm9kZSwgU3BlY05vbmUsIEFsbG9j
YXRlUHJvcGVydHlTdG9yYWdlLAogICAgICAgICAgICAgICAgICAgICAgICAgY29kZU9yaWdpbiwg
T3BJbmZvKHRyYW5zaXRpb25EYXRhKSwgY2hpbGQpOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7
CkBAIC0yODQsNyArMjgzLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgQVNTRVJU
KHN0YXR1cy5uZXdTdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSA+IHN0cnVjdHVyZS0+
b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7CiAgICAgICAgICAgICAgICAgICAgIEFTU0VSVCghaXNJbmxp
bmVPZmZzZXQoc3RhdHVzLm9mZnNldCgpKSk7CiAgICAgICAgICAgICAgICAgICAgIAotICAgICAg
ICAgICAgICAgICAgICBwcm9wZXJ0eVN0b3JhZ2VJbmRleCA9IG1faW5zZXJ0aW9uU2V0Lmluc2Vy
dE5vZGUoCisgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5U3RvcmFnZSA9IG1faW5zZXJ0aW9u
U2V0Lmluc2VydE5vZGUoCiAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleEluQmxvY2ssIFJl
ZkNoaWxkcmVuLCBSZWZOb2RlLCBTcGVjTm9uZSwgUmVhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZSwK
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVPcmlnaW4sIE9wSW5mbyh0cmFuc2l0aW9uRGF0
YSksCiAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZCwKQEAgLTI5OSw3ICsyOTgsNyBAQCBw
cml2YXRlOgogICAgICAgICAgICAgICAgICAgICAgICAgT3BJbmZvKHRyYW5zaXRpb25EYXRhKSwg
Y2hpbGQpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAg
ICAgICBtX2dyYXBoW25vZGVJbmRleF0uY29udmVydFRvUHV0QnlPZmZzZXQobV9ncmFwaC5tX3N0
b3JhZ2VBY2Nlc3NEYXRhLnNpemUoKSwgcHJvcGVydHlTdG9yYWdlSW5kZXgpOworICAgICAgICAg
ICAgICAgIG5vZGUtPmNvbnZlcnRUb1B1dEJ5T2Zmc2V0KG1fZ3JhcGgubV9zdG9yYWdlQWNjZXNz
RGF0YS5zaXplKCksIHByb3BlcnR5U3RvcmFnZUluZGV4KTsKICAgICAgICAgICAgICAgICAKICAg
ICAgICAgICAgICAgICBTdG9yYWdlQWNjZXNzRGF0YSBzdG9yYWdlQWNjZXNzRGF0YTsKICAgICAg
ICAgICAgICAgICBzdG9yYWdlQWNjZXNzRGF0YS5vZmZzZXQgPSBpbmRleFJlbGF0aXZlVG9CYXNl
KHN0YXR1cy5vZmZzZXQoKSk7CkBAIC0zMjAsNzMgKzMxOSw3MSBAQCBwcml2YXRlOgogICAgICAg
ICAgICAgbV9zdGF0ZS5leGVjdXRlKGluZGV4SW5CbG9jayk7CiAgICAgICAgICAgICBpZiAoIW5v
ZGUuc2hvdWxkR2VuZXJhdGUoKSB8fCBtX3N0YXRlLmRpZENsb2JiZXIoKSB8fCBub2RlLmhhc0Nv
bnN0YW50KCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBKU1ZhbHVl
IHZhbHVlID0gbV9zdGF0ZS5mb3JOb2RlKG5vZGVJbmRleCkudmFsdWUoKTsKKyAgICAgICAgICAg
IEpTVmFsdWUgdmFsdWUgPSBtX3N0YXRlLmZvck5vZGUobm9kZSkudmFsdWUoKTsKICAgICAgICAg
ICAgIGlmICghdmFsdWUpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAg
ICAgCi0gICAgICAgICAgICBpZiAobm9kZS5vcCgpID09IEdldExvY2FsKSB7Ci0gICAgICAgICAg
ICAgICAgTm9kZUluZGV4IHByZXZpb3VzTG9jYWxBY2Nlc3MgPSBOb05vZGU7Ci0gICAgICAgICAg
ICAgICAgaWYgKGJsb2NrLT52YXJpYWJsZXNBdEhlYWQub3BlcmFuZChub2RlLmxvY2FsKCkpID09
IG5vZGVJbmRleAotICAgICAgICAgICAgICAgICAgICAmJiBtX2dyYXBoW25vZGUuY2hpbGQxKCld
Lm9wKCkgPT0gUGhpKSB7CisgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBHZXRMb2NhbCkg
eworICAgICAgICAgICAgICAgIE5vZGUqIHByZXZpb3VzTG9jYWxBY2Nlc3MgPSAwOworICAgICAg
ICAgICAgICAgIGlmIChibG9jay0+dmFyaWFibGVzQXRIZWFkLm9wZXJhbmQobm9kZS0+bG9jYWwo
KSkgPT0gbm9kZQorICAgICAgICAgICAgICAgICAgICAmJiBub2RlLT5jaGlsZDEoKS0+b3AoKSA9
PSBQaGkpIHsKICAgICAgICAgICAgICAgICAgICAgLy8gV2UgZXhwZWN0IHRoaXMgdG8gYmUgdGhl
IGNvbW1vbiBjYXNlLgotICAgICAgICAgICAgICAgICAgICBBU1NFUlQoYmxvY2stPmlzSW5QaGlz
KG5vZGUuY2hpbGQxKCkuaW5kZXgoKSkpOwotICAgICAgICAgICAgICAgICAgICBwcmV2aW91c0xv
Y2FsQWNjZXNzID0gbm9kZS5jaGlsZDEoKS5pbmRleCgpOwotICAgICAgICAgICAgICAgICAgICBi
bG9jay0+dmFyaWFibGVzQXRIZWFkLm9wZXJhbmQobm9kZS5sb2NhbCgpKSA9IHByZXZpb3VzTG9j
YWxBY2Nlc3M7CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVChibG9jay0+aXNJblBoaXMobm9k
ZS0+Y2hpbGQxKCkubm9kZSgpKSk7CisgICAgICAgICAgICAgICAgICAgIHByZXZpb3VzTG9jYWxB
Y2Nlc3MgPSBub2RlLT5jaGlsZDEoKS5ub2RlKCk7CisgICAgICAgICAgICAgICAgICAgIGJsb2Nr
LT52YXJpYWJsZXNBdEhlYWQub3BlcmFuZChub2RlLT5sb2NhbCgpKSA9IHByZXZpb3VzTG9jYWxB
Y2Nlc3M7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgQVNT
RVJUKGluZGV4SW5CbG9jayA+IDApOwogICAgICAgICAgICAgICAgICAgICAvLyBNdXN0IHNlYXJj
aCBmb3IgdGhlIHByZXZpb3VzIGFjY2VzcyB0byB0aGlzIGxvY2FsLgogICAgICAgICAgICAgICAg
ICAgICBmb3IgKEJsb2NrSW5kZXggc3ViSW5kZXhJbkJsb2NrID0gaW5kZXhJbkJsb2NrOyBzdWJJ
bmRleEluQmxvY2stLTspIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIE5vZGVJbmRleCBzdWJO
b2RlSW5kZXggPSBibG9jay0+YXQoc3ViSW5kZXhJbkJsb2NrKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIE5vZGUmIHN1Yk5vZGUgPSBtX2dyYXBoW3N1Yk5vZGVJbmRleF07Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoIXN1Yk5vZGUuc2hvdWxkR2VuZXJhdGUoKSkKKyAgICAgICAgICAg
ICAgICAgICAgICAgIE5vZGUqIHN1Yk5vZGUgPSBibG9jay0+YXQoc3ViSW5kZXhJbkJsb2NrKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghc3ViTm9kZS0+c2hvdWxkR2VuZXJhdGUoKSkK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICghc3ViTm9kZS5oYXNWYXJpYWJsZUFjY2Vzc0RhdGEoKSkKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICghc3ViTm9kZS0+aGFzVmFyaWFibGVBY2Nlc3NEYXRhKCkpCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoc3ViTm9kZS5sb2NhbCgpICE9IG5vZGUubG9jYWwoKSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChzdWJOb2RlLT5sb2NhbCgpICE9IG5vZGUtPmxvY2FsKCkpCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBU
aGUgdHdvIG11c3QgaGF2ZSBiZWVuIHVuaWZpZWQuCi0gICAgICAgICAgICAgICAgICAgICAgICBB
U1NFUlQoc3ViTm9kZS52YXJpYWJsZUFjY2Vzc0RhdGEoKSA9PSBub2RlLnZhcmlhYmxlQWNjZXNz
RGF0YSgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChzdWJOb2RlLT52YXJpYWJs
ZUFjY2Vzc0RhdGEoKSA9PSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKSk7CiAgICAgICAgICAg
ICAgICAgICAgICAgICBwcmV2aW91c0xvY2FsQWNjZXNzID0gc3ViTm9kZUluZGV4OwogICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICAgICAgaWYgKHByZXZpb3VzTG9jYWxBY2Nlc3MgPT0gTm9Ob2RlKSB7CisgICAgICAg
ICAgICAgICAgICAgIGlmICghcHJldmlvdXNMb2NhbEFjY2VzcykgewogICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gVGhlIHByZXZpb3VzIGFjY2VzcyBtdXN0IGhhdmUgYmVlbiBhIFBoaS4KICAg
ICAgICAgICAgICAgICAgICAgICAgIGZvciAoQmxvY2tJbmRleCBwaGlJbmRleEluQmxvY2sgPSBi
bG9jay0+cGhpcy5zaXplKCk7IHBoaUluZGV4SW5CbG9jay0tOykgewotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIE5vZGVJbmRleCBwaGlOb2RlSW5kZXggPSBibG9jay0+cGhpc1twaGlJbmRl
eEluQmxvY2tdOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vZGUmIHBoaU5vZGUgPSBt
X2dyYXBoW3BoaU5vZGVJbmRleF07Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFw
aGlOb2RlLnNob3VsZEdlbmVyYXRlKCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgTm9k
ZSogcGhpTm9kZSA9IGJsb2NrLT5waGlzW3BoaUluZGV4SW5CbG9ja107CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKCFwaGlOb2RlLT5zaG91bGRHZW5lcmF0ZSgpKQogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAocGhpTm9kZS5sb2NhbCgpICE9IG5vZGUubG9jYWwoKSkKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAocGhpTm9kZS0+bG9jYWwoKSAhPSBub2RlLT5sb2NhbCgpKQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAvLyBUaGUgdHdvIG11c3QgaGF2ZSBiZWVuIHVuaWZpZWQuCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgQVNTRVJUKHBoaU5vZGUudmFyaWFibGVBY2Nlc3NEYXRhKCkgPT0g
bm9kZS52YXJpYWJsZUFjY2Vzc0RhdGEoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
cHJldmlvdXNMb2NhbEFjY2VzcyA9IHBoaU5vZGVJbmRleDsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBBU1NFUlQocGhpTm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCkgPT0gbm9kZS0+dmFy
aWFibGVBY2Nlc3NEYXRhKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXZpb3Vz
TG9jYWxBY2Nlc3MgPSBwaGlOb2RlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgQVNT
RVJUKHByZXZpb3VzTG9jYWxBY2Nlc3MgIT0gTm9Ob2RlKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIEFTU0VSVChwcmV2aW91c0xvY2FsQWNjZXNzKTsKICAgICAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAg
QVNTRVJUKHByZXZpb3VzTG9jYWxBY2Nlc3MgIT0gTm9Ob2RlKTsKKyAgICAgICAgICAgICAgICBB
U1NFUlQocHJldmlvdXNMb2NhbEFjY2Vzcyk7CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAg
ICAgICAgTm9kZUluZGV4IHRhaWxOb2RlSW5kZXggPSBibG9jay0+dmFyaWFibGVzQXRUYWlsLm9w
ZXJhbmQobm9kZS5sb2NhbCgpKTsKLSAgICAgICAgICAgICAgICBpZiAodGFpbE5vZGVJbmRleCA9
PSBub2RlSW5kZXgpCi0gICAgICAgICAgICAgICAgICAgIGJsb2NrLT52YXJpYWJsZXNBdFRhaWwu
b3BlcmFuZChub2RlLmxvY2FsKCkpID0gcHJldmlvdXNMb2NhbEFjY2VzczsKKyAgICAgICAgICAg
ICAgICBOb2RlKiB0YWlsTm9kZSA9IGJsb2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZChub2Rl
LT5sb2NhbCgpKTsKKyAgICAgICAgICAgICAgICBpZiAodGFpbE5vZGUgPT0gbm9kZSkKKyAgICAg
ICAgICAgICAgICAgICAgYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKG5vZGUtPmxvY2Fs
KCkpID0gcHJldmlvdXNMb2NhbEFjY2VzczsKICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAg
ICAgICAgICAgICAgICAgQVNTRVJUKAotICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaFt0
YWlsTm9kZUluZGV4XS5vcCgpID09IEZsdXNoCi0gICAgICAgICAgICAgICAgICAgICAgICB8fCBt
X2dyYXBoW3RhaWxOb2RlSW5kZXhdLm9wKCkgPT0gU2V0TG9jYWwKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHx8IGlzQ2FwdHVyZWRBdE9yQWZ0ZXIoYmxvY2ssIGluZGV4SW5CbG9jaywgbm9kZS5s
b2NhbCgpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICB0YWlsTm9kZS0+b3AoKSA9PSBGbHVz
aAorICAgICAgICAgICAgICAgICAgICAgICAgfHwgdGFpbE5vZGUtPm9wKCkgPT0gU2V0TG9jYWwK
KyAgICAgICAgICAgICAgICAgICAgICAgIHx8IGlzQ2FwdHVyZWRBdE9yQWZ0ZXIoYmxvY2ssIGlu
ZGV4SW5CbG9jaywgbm9kZS0+bG9jYWwoKSkpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIAotICAgICAgICAgICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2luID0g
bm9kZS5jb2RlT3JpZ2luOwotICAgICAgICAgICAgQWRqYWNlbmN5TGlzdCBjaGlsZHJlbiA9IG5v
ZGUuY2hpbGRyZW47CisgICAgICAgICAgICBDb2RlT3JpZ2luIGNvZGVPcmlnaW4gPSBub2RlLT5j
b2RlT3JpZ2luOworICAgICAgICAgICAgQWRqYWNlbmN5TGlzdCBjaGlsZHJlbiA9IG5vZGUtPmNo
aWxkcmVuOwogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgbV9ncmFwaC5jb252ZXJ0VG9D
b25zdGFudChub2RlSW5kZXgsIHZhbHVlKTsKKyAgICAgICAgICAgIG1fZ3JhcGguY29udmVydFRv
Q29uc3RhbnQobm9kZSwgdmFsdWUpOwogICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0
Tm9kZSgKICAgICAgICAgICAgICAgICBpbmRleEluQmxvY2ssIERvbnRSZWZDaGlsZHJlbiwgRG9u
dFJlZk5vZGUsIFNwZWNOb25lLCBQaGFudG9tLCBjb2RlT3JpZ2luLCBjaGlsZHJlbik7Ci0gICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICAKICAgICAgICAgICAgIGNoYW5nZWQgPSB0cnVlOwog
ICAgICAgICB9CiAgICAgICAgIG1fc3RhdGUucmVzZXQoKTsKQEAgLTM5OSwxMiArMzk2LDEyIEBA
IHByaXZhdGU6CiAgICAgYm9vbCBpc0NhcHR1cmVkQXRPckFmdGVyKEJhc2ljQmxvY2sqIGJsb2Nr
LCB1bnNpZ25lZCBpbmRleEluQmxvY2ssIGludCBvcGVyYW5kKQogICAgIHsKICAgICAgICAgZm9y
ICg7IGluZGV4SW5CbG9jayA8IGJsb2NrLT5zaXplKCk7ICsraW5kZXhJbkJsb2NrKSB7Ci0gICAg
ICAgICAgICBOb2RlJiBub2RlID0gbV9ncmFwaFtibG9jay0+YXQoaW5kZXhJbkJsb2NrKV07Ci0g
ICAgICAgICAgICBpZiAoIW5vZGUuaGFzTG9jYWwoKSkKKyAgICAgICAgICAgIE5vZGUqIG5vZGUg
PSBibG9jay0+YXQoaW5kZXhJbkJsb2NrKTsKKyAgICAgICAgICAgIGlmICghbm9kZS0+aGFzTG9j
YWwoKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGlmIChub2RlLmxv
Y2FsKCkgIT0gb3BlcmFuZCkKKyAgICAgICAgICAgIGlmIChub2RlLT5sb2NhbCgpICE9IG9wZXJh
bmQpCiAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBpZiAobm9kZS52YXJp
YWJsZUFjY2Vzc0RhdGEoKS0+aXNDYXB0dXJlZCgpKQorICAgICAgICAgICAgaWYgKG5vZGUtPnZh
cmlhYmxlQWNjZXNzRGF0YSgpLT5pc0NhcHR1cmVkKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNDEzLDIwICs0MTAs
MjAgQEAgcHJpdmF0ZToKICAgICAKICAgICB2b2lkIGFkZFN0cnVjdHVyZVRyYW5zaXRpb25DaGVj
ayhDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIHVuc2lnbmVkIGluZGV4SW5CbG9jaywgSlNDZWxsKiBj
ZWxsKQogICAgIHsKLSAgICAgICAgTm9kZUluZGV4IHdlYWtDb25zdGFudEluZGV4ID0gbV9pbnNl
cnRpb25TZXQuaW5zZXJ0Tm9kZSgKKyAgICAgICAgTm9kZSogd2Vha0NvbnN0YW50ID0gbV9pbnNl
cnRpb25TZXQuaW5zZXJ0Tm9kZSgKICAgICAgICAgICAgIGluZGV4SW5CbG9jaywgRG9udFJlZkNo
aWxkcmVuLCBEb250UmVmTm9kZSwgc3BlY3VsYXRpb25Gcm9tVmFsdWUoY2VsbCksCiAgICAgICAg
ICAgICBXZWFrSlNDb25zdGFudCwgY29kZU9yaWdpbiwgT3BJbmZvKGNlbGwpKTsKICAgICAgICAg
CiAgICAgICAgIGlmIChjZWxsLT5zdHJ1Y3R1cmUoKS0+dHJhbnNpdGlvbldhdGNocG9pbnRTZXRJ
c1N0aWxsVmFsaWQoKSkgewogICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgK
ICAgICAgICAgICAgICAgICBpbmRleEluQmxvY2ssIFJlZkNoaWxkcmVuLCBEb250UmVmTm9kZSwg
U3BlY05vbmUsIFN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50LAotICAgICAgICAgICAgICAg
IGNvZGVPcmlnaW4sIE9wSW5mbyhjZWxsLT5zdHJ1Y3R1cmUoKSksIHdlYWtDb25zdGFudEluZGV4
KTsKKyAgICAgICAgICAgICAgICBjb2RlT3JpZ2luLCBPcEluZm8oY2VsbC0+c3RydWN0dXJlKCkp
LCB3ZWFrQ29uc3RhbnQpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKICAgICAg
ICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKICAgICAgICAgICAgIGluZGV4SW5CbG9jaywg
UmVmQ2hpbGRyZW4sIERvbnRSZWZOb2RlLCBTcGVjTm9uZSwgQ2hlY2tTdHJ1Y3R1cmUsIGNvZGVP
cmlnaW4sCi0gICAgICAgICAgICBPcEluZm8obV9ncmFwaC5hZGRTdHJ1Y3R1cmVTZXQoY2VsbC0+
c3RydWN0dXJlKCkpKSwgd2Vha0NvbnN0YW50SW5kZXgpOworICAgICAgICAgICAgT3BJbmZvKG1f
Z3JhcGguYWRkU3RydWN0dXJlU2V0KGNlbGwtPnN0cnVjdHVyZSgpKSksIHdlYWtDb25zdGFudCk7
CiAgICAgfQogICAgIAogICAgIC8vIFRoaXMgaXMgbmVjZXNzYXJ5IGJlY2F1c2UgdGhlIENGQSBt
YXkgcmVhY2ggY29uY2x1c2lvbnMgYWJvdXQgY29uc3RhbnRzIGJhc2VkIG9uIGl0cwpAQCAtNDUx
LDkgKzQ0OCw4IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBpZiAobV9zdGF0ZS5pc1ZhbGlkKCkp
CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIE5v
ZGVJbmRleCBub2RlSW5kZXggPSBibG9jay0+YXQoaW5kZXhJbkJsb2NrKTsKLSAgICAgICAgICAg
IE5vZGUmIG5vZGUgPSBtX2dyYXBoW25vZGVJbmRleF07Ci0gICAgICAgICAgICBzd2l0Y2ggKG5v
ZGUub3AoKSkgeworICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5hdChpbmRleEluQmxv
Y2spOworICAgICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CiAgICAgICAgICAgICBjYXNl
IFJldHVybjoKICAgICAgICAgICAgIGNhc2UgVGhyb3c6CiAgICAgICAgICAgICBjYXNlIFRocm93
UmVmZXJlbmNlRXJyb3I6CkBAIC00NjQsNyArNDYwLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAg
IGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKICAg
ICAgICAgICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBEb250UmVmQ2hpbGRyZW4sIERvbnRSZWZO
b2RlLCBTcGVjTm9uZSwgRm9yY2VPU1JFeGl0LAotICAgICAgICAgICAgICAgICAgICBub2RlLmNv
ZGVPcmlnaW4pOworICAgICAgICAgICAgICAgICAgICBub2RlLT5jb2RlT3JpZ2luKTsKICAgICAg
ICAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRWRnZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdFZGdlLmNwcAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRWRnZS5jcHAJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsNDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGR0VkZ2UuaCIKKwor
I2lmIEVOQUJMRShERkdfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisK
K3ZvaWQgRWRnZTo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmlu
dCh1c2VLaW5kVG9TdHJpbmcodXNlS2luZCgpKSwgbm9kZSgpKTsKK30KKworfSB9IC8vIG5hbWVz
cGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRWRnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHRWRnZS5oCShyZXZpc2lvbiAxNDA2MTYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0VkZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDMsNDEgKzQzLDM5IEBA
IHB1YmxpYzoKICAgICB7CiAgICAgfQogICAgIAotICAgIGV4cGxpY2l0IEVkZ2UoTm9kZUluZGV4
IG5vZGVJbmRleCkKLSAgICAgICAgOiBtX2VuY29kZWRXb3JkKG1ha2VXb3JkKG5vZGVJbmRleCwg
VW50eXBlZFVzZSkpCisgICAgZXhwbGljaXQgRWRnZShOb2RlKiBub2RlKQorICAgICAgICA6IG1f
ZW5jb2RlZFdvcmQobWFrZVdvcmQobm9kZSwgVW50eXBlZFVzZSkpCiAgICAgewogICAgIH0KICAg
ICAKLSAgICBFZGdlKE5vZGVJbmRleCBub2RlSW5kZXgsIFVzZUtpbmQgdXNlS2luZCkKLSAgICAg
ICAgOiBtX2VuY29kZWRXb3JkKG1ha2VXb3JkKG5vZGVJbmRleCwgdXNlS2luZCkpCisgICAgRWRn
ZShOb2RlKiBub2RlLCBVc2VLaW5kIHVzZUtpbmQpCisgICAgICAgIDogbV9lbmNvZGVkV29yZCht
YWtlV29yZChub2RlLCB1c2VLaW5kKSkKICAgICB7CiAgICAgfQogICAgIAotICAgIE5vZGVJbmRl
eCBpbmRleFVuY2hlY2tlZCgpIGNvbnN0IHsgcmV0dXJuIG1fZW5jb2RlZFdvcmQgPj4gc2hpZnQo
KTsgfQotICAgIE5vZGVJbmRleCBpbmRleCgpIGNvbnN0Ci0gICAgewotICAgICAgICBBU1NFUlQo
aXNTZXQoKSk7Ci0gICAgICAgIHJldHVybiBtX2VuY29kZWRXb3JkID4+IHNoaWZ0KCk7Ci0gICAg
fQotICAgIHZvaWQgc2V0SW5kZXgoTm9kZUluZGV4IG5vZGVJbmRleCkKKyAgICBOb2RlKiBub2Rl
KCkgY29uc3QgeyByZXR1cm4gbV9lbmNvZGVkV29yZCAmIH4oKDEgPDwgc2hpZnQoKSkgLSAxKTsg
fQorICAgIE5vZGUmIG9wZXJhdG9yKigpIGNvbnN0IHsgcmV0dXJuICpnZXQoKTsgfQorICAgIE5v
ZGUqIG9wZXJhdG9yLT4oKSBjb25zdCB7IHJldHVybiBnZXQoKTsgfQorICAgIAorICAgIHZvaWQg
c2V0Tm9kZShOb2RlKiBub2RlKQogICAgIHsKLSAgICAgICAgbV9lbmNvZGVkV29yZCA9IG1ha2VX
b3JkKG5vZGVJbmRleCwgdXNlS2luZCgpKTsKKyAgICAgICAgbV9lbmNvZGVkV29yZCA9IG1ha2VX
b3JkKG5vZGUsIHVzZUtpbmQoKSk7CiAgICAgfQogICAgIAogICAgIFVzZUtpbmQgdXNlS2luZCgp
IGNvbnN0CiAgICAgewotICAgICAgICBBU1NFUlQoaXNTZXQoKSk7CisgICAgICAgIEFTU0VSVChu
b2RlKCkpOwogICAgICAgICB1bnNpZ25lZCBtYXNrZWQgPSBtX2VuY29kZWRXb3JkICYgKCgoMSA8
PCBzaGlmdCgpKSAtIDEpKTsKICAgICAgICAgQVNTRVJUKG1hc2tlZCA8IExhc3RVc2VLaW5kKTsK
ICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFVzZUtpbmQ+KG1hc2tlZCk7CiAgICAgfQogICAg
IHZvaWQgc2V0VXNlS2luZChVc2VLaW5kIHVzZUtpbmQpCiAgICAgewotICAgICAgICBBU1NFUlQo
aXNTZXQoKSk7Ci0gICAgICAgIG1fZW5jb2RlZFdvcmQgPSBtYWtlV29yZChpbmRleCgpLCB1c2VL
aW5kKTsKKyAgICAgICAgQVNTRVJUKG5vZGUoKSk7CisgICAgICAgIG1fZW5jb2RlZFdvcmQgPSBt
YWtlV29yZChub2RlKCksIHVzZUtpbmQpOwogICAgIH0KICAgICAKLSAgICBib29sIGlzU2V0KCkg
Y29uc3QgeyByZXR1cm4gaW5kZXhVbmNoZWNrZWQoKSAhPSBOb05vZGU7IH0KKyAgICBib29sIGlz
U2V0KCkgY29uc3QgeyByZXR1cm4gISFub2RlKCk7IH0KICAgICAKICAgICB0eXBlZGVmIHZvaWQq
IEVkZ2U6OipVbnNwZWNpZmllZEJvb2xUeXBlOwogICAgIG9wZXJhdG9yIFVuc3BlY2lmaWVkQm9v
bFR5cGUqKCkgY29uc3QgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxVbnNwZWNpZmllZEJvb2xU
eXBlKj4oaXNTZXQoKSk7IH0KQEAgLTkyLDM4ICs5MCw0MSBAQCBwdWJsaWM6CiAgICAgewogICAg
ICAgICByZXR1cm4gbV9lbmNvZGVkV29yZCAhPSBvdGhlci5tX2VuY29kZWRXb3JkOwogICAgIH0K
KyAgICAKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKIAogcHJpdmF0ZToKICAg
ICBmcmllbmQgY2xhc3MgQWRqYWNlbmN5TGlzdDsKICAgICAKLSAgICBzdGF0aWMgdWludDMyX3Qg
c2hpZnQoKSB7IHJldHVybiA0OyB9CisgICAgc3RhdGljIHVpbnQzMl90IHNoaWZ0KCkgeyByZXR1
cm4gMjsgfQogICAgIAotICAgIHN0YXRpYyBpbnQzMl90IG1ha2VXb3JkKE5vZGVJbmRleCBub2Rl
SW5kZXgsIFVzZUtpbmQgdXNlS2luZCkKKyAgICBzdGF0aWMgdWludHB0cl90IG1ha2VXb3JkKE5v
ZGUqIG5vZGUsIFVzZUtpbmQgdXNlS2luZCkKICAgICB7Ci0gICAgICAgIEFTU0VSVChzdGF0aWNf
Y2FzdDx1aW50MzJfdD4oKChzdGF0aWNfY2FzdDxpbnQzMl90Pihub2RlSW5kZXgpIDw8IHNoaWZ0
KCkpID4+IHNoaWZ0KCkpKSA9PSBub2RlSW5kZXgpOworICAgICAgICB1aW50cHRyX3QgdmFsdWUg
PSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90Pihub2RlKTsKKyAgICAgICAgQVNTRVJUKCEodmFsdWUg
JiAoKDEgPDwgc2hpZnQoKSkgLSAxKSkpOwogICAgICAgICBBU1NFUlQodXNlS2luZCA+PSAwICYm
IHVzZUtpbmQgPCBMYXN0VXNlS2luZCk7CiAgICAgICAgIEFTU0VSVChMYXN0VXNlS2luZCA8PSAo
MSA8PCBzaGlmdCgpKSk7Ci0gICAgICAgIHJldHVybiAobm9kZUluZGV4IDw8IHNoaWZ0KCkpIHwg
dXNlS2luZDsKKyAgICAgICAgcmV0dXJuIHZhbHVlIHwgc3RhdGljX2Nhc3Q8dWludHB0cl90Pih1
c2VLaW5kKTsKICAgICB9CiAgICAgCi0gICAgaW50MzJfdCBtX2VuY29kZWRXb3JkOworICAgIHVp
bnRwdHJfdCBtX2VuY29kZWRXb3JkOwogfTsKIAotaW5saW5lIGJvb2wgb3BlcmF0b3I9PShFZGdl
IG5vZGVVc2UsIE5vZGVJbmRleCBub2RlSW5kZXgpCitpbmxpbmUgYm9vbCBvcGVyYXRvcj09KEVk
Z2UgZWRnZSwgTm9kZSogbm9kZSkKIHsKLSAgICByZXR1cm4gbm9kZVVzZS5pbmRleFVuY2hlY2tl
ZCgpID09IG5vZGVJbmRleDsKKyAgICByZXR1cm4gZWRnZS5ub2RlKCkgPT0gbm9kZTsKIH0KLWlu
bGluZSBib29sIG9wZXJhdG9yPT0oTm9kZUluZGV4IG5vZGVJbmRleCwgRWRnZSBub2RlVXNlKQor
aW5saW5lIGJvb2wgb3BlcmF0b3I9PShOb2RlKiBub2RlLCBFZGdlIGVkZ2UpCiB7Ci0gICAgcmV0
dXJuIG5vZGVVc2UuaW5kZXhVbmNoZWNrZWQoKSA9PSBub2RlSW5kZXg7CisgICAgcmV0dXJuIGVk
Z2Uubm9kZSgpID09IG5vZGU7CiB9Ci1pbmxpbmUgYm9vbCBvcGVyYXRvciE9KEVkZ2Ugbm9kZVVz
ZSwgTm9kZUluZGV4IG5vZGVJbmRleCkKK2lubGluZSBib29sIG9wZXJhdG9yIT0oRWRnZSBlZGdl
LCBOb2RlKiBub2RlKQogewotICAgIHJldHVybiBub2RlVXNlLmluZGV4VW5jaGVja2VkKCkgIT0g
bm9kZUluZGV4OworICAgIHJldHVybiBlZGdlLm5vZGUoKSAhPSBub2RlOwogfQotaW5saW5lIGJv
b2wgb3BlcmF0b3IhPShOb2RlSW5kZXggbm9kZUluZGV4LCBFZGdlIG5vZGVVc2UpCitpbmxpbmUg
Ym9vbCBvcGVyYXRvciE9KE5vZGUqIG5vZGUsIEVkZ2UgZWRnZSkKIHsKLSAgICByZXR1cm4gbm9k
ZVVzZS5pbmRleFVuY2hlY2tlZCgpICE9IG5vZGVJbmRleDsKKyAgICByZXR1cm4gZWRnZS5ub2Rl
KCkgIT0gbm9kZTsKIH0KIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCShyZXZpc2lvbiAxNDA2MTYp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTMgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC01OCwyMSArNTgsMjEgQEAgcHJpdmF0ZToKICAgICAgICAgQVNTRVJUKGJsb2NrLT5p
c1JlYWNoYWJsZSk7CiAgICAgICAgIG1fYmxvY2sgPSBibG9jazsKICAgICAgICAgZm9yIChtX2lu
ZGV4SW5CbG9jayA9IDA7IG1faW5kZXhJbkJsb2NrIDwgYmxvY2stPnNpemUoKTsgKyttX2luZGV4
SW5CbG9jaykgewotICAgICAgICAgICAgbV9jb21waWxlSW5kZXggPSBibG9jay0+YXQobV9pbmRl
eEluQmxvY2spOwotICAgICAgICAgICAgZml4dXBOb2RlKG1fZ3JhcGhbbV9jb21waWxlSW5kZXhd
KTsKKyAgICAgICAgICAgIG1fY3VycmVudE5vZGUgPSBibG9jay0+YXQobV9pbmRleEluQmxvY2sp
OworICAgICAgICAgICAgZml4dXBOb2RlKG1fY3VycmVudE5vZGUpOwogICAgICAgICB9CiAgICAg
ICAgIG1faW5zZXJ0aW9uU2V0LmV4ZWN1dGUoYmxvY2spOwogICAgIH0KICAgICAKLSAgICB2b2lk
IGZpeHVwTm9kZShOb2RlJiBub2RlKQorICAgIHZvaWQgZml4dXBOb2RlKE5vZGUqIG5vZGUpCiAg
ICAgewotICAgICAgICBpZiAoIW5vZGUuc2hvdWxkR2VuZXJhdGUoKSkKKyAgICAgICAgaWYgKCFu
b2RlLT5zaG91bGRHZW5lcmF0ZSgpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAKLSAg
ICAgICAgTm9kZVR5cGUgb3AgPSBub2RlLm9wKCk7CisgICAgICAgIE5vZGVUeXBlIG9wID0gbm9k
ZS0+b3AoKTsKIAogI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKLSAg
ICAgICAgZGF0YUxvZ0YoIiAgICVzIEAldTogIiwgR3JhcGg6Om9wTmFtZShvcCksIG1fY29tcGls
ZUluZGV4KTsKKyAgICAgICAgZGF0YUxvZ0YoIiAgICVzIEAldTogIiwgR3JhcGg6Om9wTmFtZShv
cCksIG5vZGUtPmluZGV4KCkpOwogI2VuZGlmCiAgICAgICAgIAogICAgICAgICBzd2l0Y2ggKG9w
KSB7CkBAIC04MCw4MCArODAsNzEgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGlmIChtX2dyYXBo
Lm1fZml4cG9pbnRTdGF0ZSA+IEJlZm9yZUZpeHBvaW50KQogICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgCi0gICAgICAgICAgICBOb2RlKiBub2RlUHRyID0gJm5vZGU7Ci0gICAg
ICAgICAgICAKLSAgICAgICAgICAgIGlmICghaXNJbnQzMlNwZWN1bGF0aW9uKG1fZ3JhcGhbbV9j
b21waWxlSW5kZXhdLnByZWRpY3Rpb24oKSkpCisgICAgICAgICAgICBpZiAoIWlzSW50MzJTcGVj
dWxhdGlvbihub2RlLT5wcmVkaWN0aW9uKCkpKQogICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgaWYgKGNvZGVCbG9jaygpLT5pZGVudGlmaWVyKG5vZGVQdHItPmlkZW50aWZpZXJO
dW1iZXIoKSkgIT0gZ2xvYmFsRGF0YSgpLnByb3BlcnR5TmFtZXMtPmxlbmd0aCkKKyAgICAgICAg
ICAgIGlmIChjb2RlQmxvY2soKS0+aWRlbnRpZmllcihub2RlLT5pZGVudGlmaWVyTnVtYmVyKCkp
ICE9IGdsb2JhbERhdGEoKS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgpCiAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICBBcnJheVByb2ZpbGUqIGFycmF5UHJvZmlsZSA9IAotICAgICAg
ICAgICAgICAgIG1fZ3JhcGguYmFzZWxpbmVDb2RlQmxvY2tGb3Iobm9kZVB0ci0+Y29kZU9yaWdp
biktPmdldEFycmF5UHJvZmlsZSgKLSAgICAgICAgICAgICAgICAgICAgbm9kZVB0ci0+Y29kZU9y
aWdpbi5ieXRlY29kZUluZGV4KTsKKyAgICAgICAgICAgICAgICBtX2dyYXBoLmJhc2VsaW5lQ29k
ZUJsb2NrRm9yKG5vZGUtPmNvZGVPcmlnaW4pLT5nZXRBcnJheVByb2ZpbGUoCisgICAgICAgICAg
ICAgICAgICAgIG5vZGUtPmNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCk7CiAgICAgICAgICAgICBB
cnJheU1vZGUgYXJyYXlNb2RlID0gQXJyYXlNb2RlKEFycmF5OjpTZWxlY3RVc2luZ1ByZWRpY3Rp
b25zKTsKICAgICAgICAgICAgIGlmIChhcnJheVByb2ZpbGUpIHsKLSAgICAgICAgICAgICAgICBh
cnJheVByb2ZpbGUtPmNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbihtX2dyYXBoLmJhc2VsaW5lQ29k
ZUJsb2NrRm9yKG5vZGUuY29kZU9yaWdpbikpOworICAgICAgICAgICAgICAgIGFycmF5UHJvZmls
ZS0+Y29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKG1fZ3JhcGguYmFzZWxpbmVDb2RlQmxvY2tGb3Io
bm9kZS0+Y29kZU9yaWdpbikpOwogICAgICAgICAgICAgICAgIGFycmF5TW9kZSA9IEFycmF5TW9k
ZTo6ZnJvbU9ic2VydmVkKGFycmF5UHJvZmlsZSwgQXJyYXk6OlJlYWQsIGZhbHNlKTsKICAgICAg
ICAgICAgICAgICBhcnJheU1vZGUgPSBhcnJheU1vZGUucmVmaW5lKAotICAgICAgICAgICAgICAg
ICAgICBtX2dyYXBoW25vZGUuY2hpbGQxKCldLnByZWRpY3Rpb24oKSwKLSAgICAgICAgICAgICAg
ICAgICAgbV9ncmFwaFttX2NvbXBpbGVJbmRleF0ucHJlZGljdGlvbigpKTsKKyAgICAgICAgICAg
ICAgICAgICAgbm9kZS0+Y2hpbGQxKCktPnByZWRpY3Rpb24oKSwgbm9kZS0+cHJlZGljdGlvbigp
KTsKICAgICAgICAgICAgICAgICBpZiAoYXJyYXlNb2RlLnN1cHBvcnRzTGVuZ3RoKCkgJiYgYXJy
YXlQcm9maWxlLT5oYXNEZWZpbml0ZVN0cnVjdHVyZSgpKSB7CiAgICAgICAgICAgICAgICAgICAg
IG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCiAgICAgICAgICAgICAgICAgICAgICAgICBtX2lu
ZGV4SW5CbG9jaywgUmVmQ2hpbGRyZW4sIERvbnRSZWZOb2RlLCBTcGVjTm9uZSwgQ2hlY2tTdHJ1
Y3R1cmUsCi0gICAgICAgICAgICAgICAgICAgICAgICBub2RlUHRyLT5jb2RlT3JpZ2luLCBPcElu
Zm8obV9ncmFwaC5hZGRTdHJ1Y3R1cmVTZXQoYXJyYXlQcm9maWxlLT5leHBlY3RlZFN0cnVjdHVy
ZSgpKSksCi0gICAgICAgICAgICAgICAgICAgICAgICBub2RlUHRyLT5jaGlsZDEoKS5pbmRleCgp
KTsKLSAgICAgICAgICAgICAgICAgICAgbm9kZVB0ciA9ICZtX2dyYXBoW21fY29tcGlsZUluZGV4
XTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNvZGVPcmlnaW4sIE9wSW5mbyhtX2dy
YXBoLmFkZFN0cnVjdHVyZVNldChhcnJheVByb2ZpbGUtPmV4cGVjdGVkU3RydWN0dXJlKCkpKSwK
KyAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLm5vZGUoKSk7CiAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBhcnJheU1v
ZGUgPSBhcnJheU1vZGUucmVmaW5lKAotICAgICAgICAgICAgICAgICAgICBtX2dyYXBoW25vZGUu
Y2hpbGQxKCldLnByZWRpY3Rpb24oKSwKLSAgICAgICAgICAgICAgICAgICAgbV9ncmFwaFttX2Nv
bXBpbGVJbmRleF0ucHJlZGljdGlvbigpKTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0g
ZWxzZQorICAgICAgICAgICAgICAgIGFycmF5TW9kZSA9IGFycmF5TW9kZS5yZWZpbmUobm9kZS0+
Y2hpbGQxKCktPnByZWRpY3Rpb24oKSwgbm9kZS0+cHJlZGljdGlvbigpKTsKICAgICAgICAgICAg
IGlmICghYXJyYXlNb2RlLnN1cHBvcnRzTGVuZ3RoKCkpCiAgICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICBub2RlUHRyLT5zZXRPcChHZXRBcnJheUxlbmd0aCk7Ci0gICAgICAgICAg
ICBBU1NFUlQobm9kZVB0ci0+ZmxhZ3MoKSAmIE5vZGVNdXN0R2VuZXJhdGUpOwotICAgICAgICAg
ICAgbm9kZVB0ci0+Y2xlYXJGbGFncyhOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZUNsb2JiZXJzV29y
bGQpOwotICAgICAgICAgICAgbV9ncmFwaC5kZXJlZihtX2NvbXBpbGVJbmRleCk7Ci0gICAgICAg
ICAgICBub2RlUHRyLT5zZXRBcnJheU1vZGUoYXJyYXlNb2RlKTsKKyAgICAgICAgICAgIG5vZGUt
PnNldE9wKEdldEFycmF5TGVuZ3RoKTsKKyAgICAgICAgICAgIEFTU0VSVChub2RlLT5mbGFncygp
ICYgTm9kZU11c3RHZW5lcmF0ZSk7CisgICAgICAgICAgICBub2RlLT5jbGVhckZsYWdzKE5vZGVN
dXN0R2VuZXJhdGUgfCBOb2RlQ2xvYmJlcnNXb3JsZCk7CisgICAgICAgICAgICBtX2dyYXBoLmRl
cmVmKG5vZGUpOworICAgICAgICAgICAgbm9kZS0+c2V0QXJyYXlNb2RlKGFycmF5TW9kZSk7CiAg
ICAgICAgICAgICAKLSAgICAgICAgICAgIE5vZGVJbmRleCBzdG9yYWdlID0gY2hlY2tBcnJheShh
cnJheU1vZGUsIG5vZGVQdHItPmNvZGVPcmlnaW4sIG5vZGVQdHItPmNoaWxkMSgpLmluZGV4KCks
IE5vTm9kZSwgbGVuZ3RoTmVlZHNTdG9yYWdlLCBub2RlUHRyLT5zaG91bGRHZW5lcmF0ZSgpKTsK
LSAgICAgICAgICAgIGlmIChzdG9yYWdlID09IE5vTm9kZSkKKyAgICAgICAgICAgIE5vZGUqIHN0
b3JhZ2UgPSBjaGVja0FycmF5KGFycmF5TW9kZSwgbm9kZS0+Y29kZU9yaWdpbiwgbm9kZS0+Y2hp
bGQxKCkubm9kZSgpLCAwLCBsZW5ndGhOZWVkc1N0b3JhZ2UsIG5vZGUtPnNob3VsZEdlbmVyYXRl
KCkpOworICAgICAgICAgICAgaWYgKCFzdG9yYWdlKQogICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgCi0gICAgICAgICAgICBub2RlUHRyID0gJm1fZ3JhcGhbbV9jb21waWxlSW5k
ZXhdOwotICAgICAgICAgICAgbm9kZVB0ci0+Y2hpbGRyZW4uY2hpbGQyKCkgPSBFZGdlKHN0b3Jh
Z2UpOworICAgICAgICAgICAgbm9kZS0+Y2hpbGRyZW4uY2hpbGQyKCkgPSBFZGdlKHN0b3JhZ2Up
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBHZXRJbmRleGVk
UHJvcGVydHlTdG9yYWdlOiB7Ci0gICAgICAgICAgICBBU1NFUlQobm9kZS5hcnJheU1vZGUoKS5j
YW5DU0VTdG9yYWdlKCkpOworICAgICAgICAgICAgQVNTRVJUKG5vZGUtPmFycmF5TW9kZSgpLmNh
bkNTRVN0b3JhZ2UoKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBj
YXNlIEdldEJ5VmFsOiB7Ci0gICAgICAgICAgICBub2RlLnNldEFycmF5TW9kZSgKLSAgICAgICAg
ICAgICAgICBub2RlLmFycmF5TW9kZSgpLnJlZmluZSgKLSAgICAgICAgICAgICAgICAgICAgbV9n
cmFwaFtub2RlLmNoaWxkMSgpXS5wcmVkaWN0aW9uKCksCi0gICAgICAgICAgICAgICAgICAgIG1f
Z3JhcGhbbm9kZS5jaGlsZDIoKV0ucHJlZGljdGlvbigpLAotICAgICAgICAgICAgICAgICAgICBT
cGVjTm9uZSwgbm9kZS5mbGFncygpKSk7CisgICAgICAgICAgICBub2RlLT5zZXRBcnJheU1vZGUo
CisgICAgICAgICAgICAgICAgbm9kZS0+YXJyYXlNb2RlKCkucmVmaW5lKAorICAgICAgICAgICAg
ICAgICAgICBub2RlLT5jaGlsZDEoKS0+cHJlZGljdGlvbigpLAorICAgICAgICAgICAgICAgICAg
ICBub2RlLT5jaGlsZDIoKS0+cHJlZGljdGlvbigpLAorICAgICAgICAgICAgICAgICAgICBTcGVj
Tm9uZSwgbm9kZS0+ZmxhZ3MoKSkpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBibGVzc0Fy
cmF5T3BlcmF0aW9uKG5vZGUuY2hpbGQxKCksIG5vZGUuY2hpbGQyKCksIDIpOworICAgICAgICAg
ICAgYmxlc3NBcnJheU9wZXJhdGlvbihub2RlLT5jaGlsZDEoKSwgbm9kZS0+Y2hpbGQyKCksIDIp
OwogICAgICAgICAgICAgCi0gICAgICAgICAgICBOb2RlKiBub2RlUHRyID0gJm1fZ3JhcGhbbV9j
b21waWxlSW5kZXhdOwotICAgICAgICAgICAgQXJyYXlNb2RlIGFycmF5TW9kZSA9IG5vZGVQdHIt
PmFycmF5TW9kZSgpOworICAgICAgICAgICAgQXJyYXlNb2RlIGFycmF5TW9kZSA9IG5vZGUtPmFy
cmF5TW9kZSgpOwogICAgICAgICAgICAgaWYgKGFycmF5TW9kZS50eXBlKCkgPT0gQXJyYXk6OkRv
dWJsZQogICAgICAgICAgICAgICAgICYmIGFycmF5TW9kZS5hcnJheUNsYXNzKCkgPT0gQXJyYXk6
Ok9yaWdpbmFsQXJyYXkKICAgICAgICAgICAgICAgICAmJiBhcnJheU1vZGUuc3BlY3VsYXRpb24o
KSA9PSBBcnJheTo6SW5Cb3VuZHMKICAgICAgICAgICAgICAgICAmJiBhcnJheU1vZGUuY29udmVy
c2lvbigpID09IEFycmF5OjpBc0lzCi0gICAgICAgICAgICAgICAgJiYgbV9ncmFwaC5nbG9iYWxP
YmplY3RGb3Iobm9kZVB0ci0+Y29kZU9yaWdpbiktPmFycmF5UHJvdG90eXBlQ2hhaW5Jc1NhbmUo
KQotICAgICAgICAgICAgICAgICYmICEobm9kZVB0ci0+ZmxhZ3MoKSAmIE5vZGVVc2VkQXNPdGhl
cikpCi0gICAgICAgICAgICAgICAgbm9kZVB0ci0+c2V0QXJyYXlNb2RlKGFycmF5TW9kZS53aXRo
U3BlY3VsYXRpb24oQXJyYXk6OlNhbmVDaGFpbikpOworICAgICAgICAgICAgICAgICYmIG1fZ3Jh
cGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPmNvZGVPcmlnaW4pLT5hcnJheVByb3RvdHlwZUNoYWlu
SXNTYW5lKCkKKyAgICAgICAgICAgICAgICAmJiAhKG5vZGUtPmZsYWdzKCkgJiBOb2RlVXNlZEFz
T3RoZXIpKQorICAgICAgICAgICAgICAgIG5vZGUtPnNldEFycmF5TW9kZShhcnJheU1vZGUud2l0
aFNwZWN1bGF0aW9uKEFycmF5OjpTYW5lQ2hhaW4pKTsKICAgICAgICAgICAgIAogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBTdHJpbmdDaGFyQXQ6CiAgICAgICAg
IGNhc2UgU3RyaW5nQ2hhckNvZGVBdDogewogICAgICAgICAgICAgLy8gQ3VycmVudGx5IHdlIGhh
dmUgbm8gZ29vZCB3YXkgb2YgcmVmaW5pbmcgdGhlc2UuCi0gICAgICAgICAgICBBU1NFUlQobm9k
ZS5hcnJheU1vZGUoKSA9PSBBcnJheU1vZGUoQXJyYXk6OlN0cmluZykpOwotICAgICAgICAgICAg
Ymxlc3NBcnJheU9wZXJhdGlvbihub2RlLmNoaWxkMSgpLCBub2RlLmNoaWxkMigpLCAyKTsKKyAg
ICAgICAgICAgIEFTU0VSVChub2RlLT5hcnJheU1vZGUoKSA9PSBBcnJheU1vZGUoQXJyYXk6OlN0
cmluZykpOworICAgICAgICAgICAgYmxlc3NBcnJheU9wZXJhdGlvbihub2RlLT5jaGlsZDEoKSwg
bm9kZS0+Y2hpbGQyKCksIDIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAg
ICAgICAgIApAQCAtMTY3LDE1ICsxNTgsMTQgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIC8vIGln
bm9yZWQuIFRoYXQncyBiZWNhdXNlIEFycmF5UHVzaCBjYW4ndCBoYW5kbGUgYW55IGFycmF5IG1v
ZGVzIHRoYXQgYXJlbid0CiAgICAgICAgICAgICAvLyBhcnJheS1yZWxhdGVkIC0gc28gaWYgcmVm
aW5lKCkgdHVybmVkIHRoaXMgaW50byBhICJHZW5lcmljIiBBcnJheVB1c2ggdGhlbgogICAgICAg
ICAgICAgLy8gdGhhdCB3b3VsZCBicmVhayB0aGluZ3MuCi0gICAgICAgICAgICBub2RlLnNldEFy
cmF5TW9kZSgKLSAgICAgICAgICAgICAgICBub2RlLmFycmF5TW9kZSgpLnJlZmluZSgKLSAgICAg
ICAgICAgICAgICAgICAgbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5wcmVkaWN0aW9uKCkgJiBTcGVj
Q2VsbCwKKyAgICAgICAgICAgIG5vZGUtPnNldEFycmF5TW9kZSgKKyAgICAgICAgICAgICAgICBu
b2RlLT5hcnJheU1vZGUoKS5yZWZpbmUoCisgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxk
MSgpLT5wcmVkaWN0aW9uKCkgJiBTcGVjQ2VsbCwKICAgICAgICAgICAgICAgICAgICAgU3BlY0lu
dDMyLAotICAgICAgICAgICAgICAgICAgICBtX2dyYXBoW25vZGUuY2hpbGQyKCldLnByZWRpY3Rp
b24oKSkpOwotICAgICAgICAgICAgYmxlc3NBcnJheU9wZXJhdGlvbihub2RlLmNoaWxkMSgpLCBF
ZGdlKCksIDIpOworICAgICAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDIoKS0+cHJlZGljdGlv
bigpKSk7CisgICAgICAgICAgICBibGVzc0FycmF5T3BlcmF0aW9uKG5vZGUtPmNoaWxkMSgpLCBF
ZGdlKCksIDIpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBOb2RlKiBub2RlUHRyID0gJm1f
Z3JhcGhbbV9jb21waWxlSW5kZXhdOwotICAgICAgICAgICAgc3dpdGNoIChub2RlUHRyLT5hcnJh
eU1vZGUoKS50eXBlKCkpIHsKKyAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+YXJyYXlNb2RlKCku
dHlwZSgpKSB7CiAgICAgICAgICAgICBjYXNlIEFycmF5OjpEb3VibGU6CiAgICAgICAgICAgICAg
ICAgZml4RG91YmxlRWRnZSgxKTsKICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTE4NiwxNSAr
MTc2LDE1IEBAIHByaXZhdGU6CiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBjYXNl
IEFycmF5UG9wOiB7Ci0gICAgICAgICAgICBibGVzc0FycmF5T3BlcmF0aW9uKG5vZGUuY2hpbGQx
KCksIEVkZ2UoKSwgMSk7CisgICAgICAgICAgICBibGVzc0FycmF5T3BlcmF0aW9uKG5vZGUtPmNo
aWxkMSgpLCBFZGdlKCksIDEpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAg
ICAgICAgIAogICAgICAgICBjYXNlIFZhbHVlVG9JbnQzMjogewotICAgICAgICAgICAgaWYgKG1f
Z3JhcGhbbm9kZS5jaGlsZDEoKV0uc2hvdWxkU3BlY3VsYXRlTnVtYmVyKCkKLSAgICAgICAgICAg
ICAgICAmJiBub2RlLm11c3RHZW5lcmF0ZSgpKSB7Ci0gICAgICAgICAgICAgICAgbm9kZS5jbGVh
ckZsYWdzKE5vZGVNdXN0R2VuZXJhdGUpOwotICAgICAgICAgICAgICAgIG1fZ3JhcGguZGVyZWYo
bV9jb21waWxlSW5kZXgpOworICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91bGRT
cGVjdWxhdGVOdW1iZXIoKQorICAgICAgICAgICAgICAgICYmIG5vZGUtPm11c3RHZW5lcmF0ZSgp
KSB7CisgICAgICAgICAgICAgICAgbm9kZS0+Y2xlYXJGbGFncyhOb2RlTXVzdEdlbmVyYXRlKTsK
KyAgICAgICAgICAgICAgICBtX2dyYXBoLmRlcmVmKG5vZGUpOwogICAgICAgICAgICAgfQogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTIwNSw4ICsxOTUsOCBAQCBwcml2YXRlOgog
ICAgICAgICBjYXNlIEJpdFJTaGlmdDoKICAgICAgICAgY2FzZSBCaXRMU2hpZnQ6CiAgICAgICAg
IGNhc2UgQml0VVJTaGlmdDogewotICAgICAgICAgICAgZml4SW50RWRnZShub2RlLmNoaWxkcmVu
LmNoaWxkMSgpKTsKLSAgICAgICAgICAgIGZpeEludEVkZ2Uobm9kZS5jaGlsZHJlbi5jaGlsZDIo
KSk7CisgICAgICAgICAgICBmaXhJbnRFZGdlKG5vZGUtPmNoaWxkcmVuLmNoaWxkMSgpKTsKKyAg
ICAgICAgICAgIGZpeEludEVkZ2Uobm9kZS0+Y2hpbGRyZW4uY2hpbGQyKCkpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIApAQCAtMjE2LDkgKzIwNiw5IEBAIHBy
aXZhdGU6CiAgICAgICAgIGNhc2UgQ29tcGFyZUdyZWF0ZXI6CiAgICAgICAgIGNhc2UgQ29tcGFy
ZUdyZWF0ZXJFcToKICAgICAgICAgY2FzZSBDb21wYXJlU3RyaWN0RXE6IHsKLSAgICAgICAgICAg
IGlmIChOb2RlOjpzaG91bGRTcGVjdWxhdGVJbnRlZ2VyKG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0s
IG1fZ3JhcGhbbm9kZS5jaGlsZDIoKV0pKQorICAgICAgICAgICAgaWYgKE5vZGU6OnNob3VsZFNw
ZWN1bGF0ZUludGVnZXIobm9kZS0+Y2hpbGQxKCkubm9kZSgpLCBub2RlLT5jaGlsZDIoKS5ub2Rl
KCkpKQogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgaWYgKCFOb2RlOjpzaG91
bGRTcGVjdWxhdGVOdW1iZXIobV9ncmFwaFtub2RlLmNoaWxkMSgpXSwgbV9ncmFwaFtub2RlLmNo
aWxkMigpXSkpCisgICAgICAgICAgICBpZiAoIU5vZGU6OnNob3VsZFNwZWN1bGF0ZU51bWJlcihu
b2RlLT5jaGlsZDEoKS5ub2RlKCksIG5vZGUtPmNoaWxkMigpLm5vZGUoKSkpCiAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICBmaXhEb3VibGVFZGdlKDApOwogICAgICAgICAgICAg
Zml4RG91YmxlRWRnZSgxKTsKQEAgLTIyNiw0MyArMjE2LDQxIEBAIHByaXZhdGU6CiAgICAgICAg
IH0KICAgICAgICAgICAgIAogICAgICAgICBjYXNlIExvZ2ljYWxOb3Q6IHsKLSAgICAgICAgICAg
IGlmIChtX2dyYXBoW25vZGUuY2hpbGQxKCldLnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKSkKKyAg
ICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKQog
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgaWYgKCFtX2dyYXBoW25vZGUuY2hp
bGQxKCldLnNob3VsZFNwZWN1bGF0ZU51bWJlcigpKQorICAgICAgICAgICAgaWYgKCFub2RlLT5j
aGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlTnVtYmVyKCkpCiAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICBmaXhEb3VibGVFZGdlKDApOwogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBjYXNlIEJyYW5jaDogewotICAgICAgICAgICAg
aWYgKCFtX2dyYXBoW25vZGUuY2hpbGQxKCldLnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKQotICAg
ICAgICAgICAgICAgICYmIG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0uc2hvdWxkU3BlY3VsYXRlTnVt
YmVyKCkpCisgICAgICAgICAgICBpZiAoIW5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVJ
bnRlZ2VyKCkKKyAgICAgICAgICAgICAgICAmJiBub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3Vs
YXRlTnVtYmVyKCkpCiAgICAgICAgICAgICAgICAgZml4RG91YmxlRWRnZSgwKTsKIAotICAgICAg
ICAgICAgTm9kZSYgbXlOb2RlID0gbV9ncmFwaFttX2NvbXBpbGVJbmRleF07IC8vIHJlbG9hZCBi
ZWNhdXNlIHRoZSBncmFwaCBtYXkgaGF2ZSBjaGFuZ2VkCi0gICAgICAgICAgICBFZGdlIGxvZ2lj
YWxOb3RFZGdlID0gbXlOb2RlLmNoaWxkMSgpOwotICAgICAgICAgICAgTm9kZSYgbG9naWNhbE5v
dCA9IG1fZ3JhcGhbbG9naWNhbE5vdEVkZ2VdOwotICAgICAgICAgICAgaWYgKGxvZ2ljYWxOb3Qu
b3AoKSA9PSBMb2dpY2FsTm90Ci0gICAgICAgICAgICAgICAgJiYgbG9naWNhbE5vdC5hZGp1c3Rl
ZFJlZkNvdW50KCkgPT0gMSkgewotICAgICAgICAgICAgICAgIEVkZ2UgbmV3Q2hpbGRFZGdlID0g
bG9naWNhbE5vdC5jaGlsZDEoKTsKLSAgICAgICAgICAgICAgICBpZiAobV9ncmFwaFtuZXdDaGls
ZEVkZ2VdLmhhc0Jvb2xlYW5SZXN1bHQoKSkgeworICAgICAgICAgICAgTm9kZSogbG9naWNhbE5v
dCA9IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKKyAgICAgICAgICAgIGlmIChsb2dpY2FsTm90LT5v
cCgpID09IExvZ2ljYWxOb3QKKyAgICAgICAgICAgICAgICAmJiBsb2dpY2FsTm90LT5hZGp1c3Rl
ZFJlZkNvdW50KCkgPT0gMSkgeworICAgICAgICAgICAgICAgIEVkZ2UgbmV3Q2hpbGRFZGdlID0g
bG9naWNhbE5vdC0+Y2hpbGQxKCk7CisgICAgICAgICAgICAgICAgaWYgKG5ld0NoaWxkRWRnZS0+
aGFzQm9vbGVhblJlc3VsdCgpKSB7CiAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgucmVmKG5l
d0NoaWxkRWRnZSk7Ci0gICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguZGVyZWYobG9naWNhbE5v
dEVkZ2UpOworICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLmRlcmVmKGxvZ2ljYWxOb3QpOwog
ICAgICAgICAgICAgICAgICAgICBteU5vZGUuY2hpbGRyZW4uc2V0Q2hpbGQxKG5ld0NoaWxkRWRn
ZSk7CiAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBCbG9ja0luZGV4
IHRvQmVUYWtlbiA9IG15Tm9kZS5ub3RUYWtlbkJsb2NrSW5kZXgoKTsKLSAgICAgICAgICAgICAg
ICAgICAgQmxvY2tJbmRleCB0b0JlTm90VGFrZW4gPSBteU5vZGUudGFrZW5CbG9ja0luZGV4KCk7
Ci0gICAgICAgICAgICAgICAgICAgIG15Tm9kZS5zZXRUYWtlbkJsb2NrSW5kZXgodG9CZVRha2Vu
KTsKLSAgICAgICAgICAgICAgICAgICAgbXlOb2RlLnNldE5vdFRha2VuQmxvY2tJbmRleCh0b0Jl
Tm90VGFrZW4pOworICAgICAgICAgICAgICAgICAgICBCbG9ja0luZGV4IHRvQmVUYWtlbiA9IG5v
ZGUtPm5vdFRha2VuQmxvY2tJbmRleCgpOworICAgICAgICAgICAgICAgICAgICBCbG9ja0luZGV4
IHRvQmVOb3RUYWtlbiA9IG5vZGUtPnRha2VuQmxvY2tJbmRleCgpOworICAgICAgICAgICAgICAg
ICAgICBub2RlLT5zZXRUYWtlbkJsb2NrSW5kZXgodG9CZVRha2VuKTsKKyAgICAgICAgICAgICAg
ICAgICAgbm9kZS0+c2V0Tm90VGFrZW5CbG9ja0luZGV4KHRvQmVOb3RUYWtlbik7CiAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0K
ICAgICAgICAgICAgIAogICAgICAgICBjYXNlIFNldExvY2FsOiB7Ci0gICAgICAgICAgICBpZiAo
bm9kZS52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+aXNDYXB0dXJlZCgpKQorICAgICAgICAgICAgaWYg
KG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5pc0NhcHR1cmVkKCkpCiAgICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICBpZiAoIW5vZGUudmFyaWFibGVBY2Nlc3NEYXRhKCktPnNo
b3VsZFVzZURvdWJsZUZvcm1hdCgpKQorICAgICAgICAgICAgaWYgKCFub2RlLT52YXJpYWJsZUFj
Y2Vzc0RhdGEoKS0+c2hvdWxkVXNlRG91YmxlRm9ybWF0KCkpCiAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICBmaXhEb3VibGVFZGdlKDApOwogICAgICAgICAgICAgYnJlYWs7CkBA
IC0yNzIsNyArMjYwLDcgQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBWYWx1ZUFkZDogewogICAg
ICAgICAgICAgaWYgKG1fZ3JhcGguYWRkU2hvdWxkU3BlY3VsYXRlSW50ZWdlcihub2RlKSkKICAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGlmICghTm9kZTo6c2hvdWxkU3BlY3Vs
YXRlTnVtYmVyRXhwZWN0aW5nRGVmaW5lZChtX2dyYXBoW25vZGUuY2hpbGQxKCldLCBtX2dyYXBo
W25vZGUuY2hpbGQyKCldKSkKKyAgICAgICAgICAgIGlmICghTm9kZTo6c2hvdWxkU3BlY3VsYXRl
TnVtYmVyRXhwZWN0aW5nRGVmaW5lZChub2RlLT5jaGlsZDEoKS5ub2RlKCksIG5vZGUtPmNoaWxk
MigpLm5vZGUoKSkpCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBmaXhEb3Vi
bGVFZGdlKDApOwogICAgICAgICAgICAgZml4RG91YmxlRWRnZSgxKTsKQEAgLTI4MSw3ICsyNjks
NyBAQCBwcml2YXRlOgogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgQXJpdGhTdWI6IHsKICAg
ICAgICAgICAgIGlmIChtX2dyYXBoLmFkZFNob3VsZFNwZWN1bGF0ZUludGVnZXIobm9kZSkKLSAg
ICAgICAgICAgICAgICAmJiBub2RlLmNhblNwZWN1bGF0ZUludGVnZXIoKSkKKyAgICAgICAgICAg
ICAgICAmJiBub2RlLT5jYW5TcGVjdWxhdGVJbnRlZ2VyKCkpCiAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICBmaXhEb3VibGVFZGdlKDApOwogICAgICAgICAgICAgZml4RG91Ymxl
RWRnZSgxKTsKQEAgLTI5OCw4ICsyODYsOCBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIEFyaXRo
TWluOgogICAgICAgICBjYXNlIEFyaXRoTWF4OgogICAgICAgICBjYXNlIEFyaXRoTW9kOiB7Ci0g
ICAgICAgICAgICBpZiAoTm9kZTo6c2hvdWxkU3BlY3VsYXRlSW50ZWdlckZvckFyaXRobWV0aWMo
bV9ncmFwaFtub2RlLmNoaWxkMSgpXSwgbV9ncmFwaFtub2RlLmNoaWxkMigpXSkKLSAgICAgICAg
ICAgICAgICAmJiBub2RlLmNhblNwZWN1bGF0ZUludGVnZXIoKSkKKyAgICAgICAgICAgIGlmIChO
b2RlOjpzaG91bGRTcGVjdWxhdGVJbnRlZ2VyRm9yQXJpdGhtZXRpYyhub2RlLT5jaGlsZDEoKS5u
b2RlKCksIG5vZGUtPmNoaWxkMigpLm5vZGUoKSkKKyAgICAgICAgICAgICAgICAmJiBub2RlLT5j
YW5TcGVjdWxhdGVJbnRlZ2VyKCkpCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICBmaXhEb3VibGVFZGdlKDApOwogICAgICAgICAgICAgZml4RG91YmxlRWRnZSgxKTsKQEAgLTMx
NSw4ICszMDMsOCBAQCBwcml2YXRlOgogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBBcml0aERp
djogewotICAgICAgICAgICAgaWYgKE5vZGU6OnNob3VsZFNwZWN1bGF0ZUludGVnZXJGb3JBcml0
aG1ldGljKG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0sIG1fZ3JhcGhbbm9kZS5jaGlsZDIoKV0pCi0g
ICAgICAgICAgICAgICAgJiYgbm9kZS5jYW5TcGVjdWxhdGVJbnRlZ2VyKCkpIHsKKyAgICAgICAg
ICAgIGlmIChOb2RlOjpzaG91bGRTcGVjdWxhdGVJbnRlZ2VyRm9yQXJpdGhtZXRpYyhub2RlLT5j
aGlsZDEoKS5ub2RlKCksIG5vZGUtPmNoaWxkMigpLm5vZGUoKSkKKyAgICAgICAgICAgICAgICAm
JiBub2RlLT5jYW5TcGVjdWxhdGVJbnRlZ2VyKCkpIHsKICAgICAgICAgICAgICAgICBpZiAoaXNY
ODYoKSkKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgaW5qZWN0
SW50MzJUb0RvdWJsZU5vZGUoMCk7CkBAIC0zMjQsMTIgKzMxMiwxMSBAQCBwcml2YXRlOgogCiAg
ICAgICAgICAgICAgICAgLy8gV2UgZG9uJ3QgbmVlZCB0byBkbyByZWYnaW5nIG9uIHRoZSBjaGls
ZHJlbiBiZWNhdXNlIHdlJ3JlIHN0ZWFsaW5nIHRoZW0gZnJvbQogICAgICAgICAgICAgICAgIC8v
IHRoZSBvcmlnaW5hbCBkaXZpc2lvbi4KLSAgICAgICAgICAgICAgICBOb2RlSW5kZXggbmV3RGl2
aXNpb25JbmRleCA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCi0gICAgICAgICAgICAgICAg
ICAgIG1faW5kZXhJbkJsb2NrLCBEb250UmVmQ2hpbGRyZW4sIFJlZk5vZGUsIFNwZWNEb3VibGUs
IG1fZ3JhcGhbbV9jb21waWxlSW5kZXhdKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAg
ICAgICBtX2dyYXBoW21fY29tcGlsZUluZGV4XS5zZXRPcChEb3VibGVBc0ludDMyKTsKLSAgICAg
ICAgICAgICAgICBtX2dyYXBoW21fY29tcGlsZUluZGV4XS5jaGlsZHJlbi5pbml0aWFsaXplKEVk
Z2UobmV3RGl2aXNpb25JbmRleCwgRG91YmxlVXNlKSwgRWRnZSgpLCBFZGdlKCkpOworICAgICAg
ICAgICAgICAgIE5vZGUqIG5ld0RpdmlzaW9uID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgK
KyAgICAgICAgICAgICAgICAgICAgbV9pbmRleEluQmxvY2ssIERvbnRSZWZDaGlsZHJlbiwgUmVm
Tm9kZSwgU3BlY0RvdWJsZSwgbm9kZSk7CiAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAg
ICAgbm9kZS0+c2V0T3AoRG91YmxlQXNJbnQzMik7CisgICAgICAgICAgICAgICAgbm9kZS0+Y2hp
bGRyZW4uaW5pdGlhbGl6ZShFZGdlKG5ld0RpdmlzaW9uLCBEb3VibGVVc2UpLCBFZGdlKCksIEVk
Z2UoKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICBmaXhEb3VibGVFZGdlKDApOwpAQCAtMzM4LDggKzMyNSw4IEBAIHByaXZhdGU6CiAgICAgICAg
IH0KICAgICAgICAgICAgIAogICAgICAgICBjYXNlIEFyaXRoQWJzOiB7Ci0gICAgICAgICAgICBp
ZiAobV9ncmFwaFtub2RlLmNoaWxkMSgpXS5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyRm9yQXJpdGht
ZXRpYygpCi0gICAgICAgICAgICAgICAgJiYgbm9kZS5jYW5TcGVjdWxhdGVJbnRlZ2VyKCkpCisg
ICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZUludGVnZXJGb3JB
cml0aG1ldGljKCkKKyAgICAgICAgICAgICAgICAmJiBub2RlLT5jYW5TcGVjdWxhdGVJbnRlZ2Vy
KCkpCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBmaXhEb3VibGVFZGdlKDAp
OwogICAgICAgICAgICAgYnJlYWs7CkBAIC0zNTgsMTUgKzM0NSwxMyBAQCBwcml2YXRlOgogCiAg
ICAgICAgICAgICBub2RlLnNldEFycmF5TW9kZSgKICAgICAgICAgICAgICAgICBub2RlLmFycmF5
TW9kZSgpLnJlZmluZSgKLSAgICAgICAgICAgICAgICAgICAgbV9ncmFwaFtjaGlsZDFdLnByZWRp
Y3Rpb24oKSwKLSAgICAgICAgICAgICAgICAgICAgbV9ncmFwaFtjaGlsZDJdLnByZWRpY3Rpb24o
KSwKLSAgICAgICAgICAgICAgICAgICAgbV9ncmFwaFtjaGlsZDNdLnByZWRpY3Rpb24oKSkpOwor
ICAgICAgICAgICAgICAgICAgICBjaGlsZDEtPnByZWRpY3Rpb24oKSwKKyAgICAgICAgICAgICAg
ICAgICAgY2hpbGQyLT5wcmVkaWN0aW9uKCksCisgICAgICAgICAgICAgICAgICAgIGNoaWxkMy0+
cHJlZGljdGlvbigpKSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGJsZXNzQXJyYXlPcGVy
YXRpb24oY2hpbGQxLCBjaGlsZDIsIDMpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBOb2Rl
KiBub2RlUHRyID0gJm1fZ3JhcGhbbV9jb21waWxlSW5kZXhdOwotICAgICAgICAgICAgCi0gICAg
ICAgICAgICBzd2l0Y2ggKG5vZGVQdHItPmFycmF5TW9kZSgpLm1vZGVGb3JQdXQoKS50eXBlKCkp
IHsKKyAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+YXJyYXlNb2RlKCkubW9kZUZvclB1dCgpLnR5
cGUoKSkgewogICAgICAgICAgICAgY2FzZSBBcnJheTo6RG91YmxlOgogICAgICAgICAgICAgICAg
IGZpeERvdWJsZUVkZ2UoMik7CiAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0zNzcsNyArMzYy
LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGNhc2UgQXJyYXk6OlVpbnQ4Q2xhbXBlZEFycmF5
OgogICAgICAgICAgICAgY2FzZSBBcnJheTo6VWludDE2QXJyYXk6CiAgICAgICAgICAgICBjYXNl
IEFycmF5OjpVaW50MzJBcnJheToKLSAgICAgICAgICAgICAgICBpZiAoIW1fZ3JhcGhbY2hpbGQz
XS5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpCisgICAgICAgICAgICAgICAgaWYgKCFjaGlsZDMt
PnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKSkKICAgICAgICAgICAgICAgICAgICAgZml4RG91Ymxl
RWRnZSgyKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgQXJyYXk6
OkZsb2F0MzJBcnJheToKQEAgLTM5MiwxMSArMzc3LDExIEBAIHByaXZhdGU6CiAgICAgICAgICAg
ICAKICAgICAgICAgY2FzZSBOZXdBcnJheTogewogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gbV9ncmFwaC52YXJBcmdOdW1DaGlsZHJlbihub2RlKTsgaS0tOykgewotICAgICAgICAgICAg
ICAgIG5vZGUuc2V0SW5kZXhpbmdUeXBlKAorICAgICAgICAgICAgICAgIG5vZGUtPnNldEluZGV4
aW5nVHlwZSgKICAgICAgICAgICAgICAgICAgICAgbGVhc3RVcHBlckJvdW5kT2ZJbmRleGluZ1R5
cGVBbmRUeXBlKAotICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS5pbmRleGluZ1R5cGUoKSwg
bV9ncmFwaFttX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIGkpXS5wcmVkaWN0aW9uKCkpKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIG5vZGUuaW5kZXhpbmdUeXBlKCksIG1fZ3JhcGgudmFyQXJn
Q2hpbGQobm9kZSwgaSktPnByZWRpY3Rpb24oKSkpOwogICAgICAgICAgICAgfQotICAgICAgICAg
ICAgaWYgKG5vZGUuaW5kZXhpbmdUeXBlKCkgPT0gQXJyYXlXaXRoRG91YmxlKSB7CisgICAgICAg
ICAgICBpZiAobm9kZS0+aW5kZXhpbmdUeXBlKCkgPT0gQXJyYXlXaXRoRG91YmxlKSB7CiAgICAg
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9ncmFwaC52YXJBcmdOdW1DaGlsZHJlbihu
b2RlKTsgaS0tOykKICAgICAgICAgICAgICAgICAgICAgZml4RG91YmxlRWRnZShpKTsKICAgICAg
ICAgICAgIH0KQEAgLTQwOCwxNiArMzkzLDE1IEBAIHByaXZhdGU6CiAgICAgICAgIH0KIAogI2lm
IERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKLSAgICAgICAgTm9kZSogbm9k
ZVB0ciA9ICZtX2dyYXBoW21fY29tcGlsZUluZGV4XTsKLSAgICAgICAgaWYgKCEobm9kZVB0ci0+
ZmxhZ3MoKSAmIE5vZGVIYXNWYXJBcmdzKSkgeworICAgICAgICBpZiAoIShub2RlLT5mbGFncygp
ICYgTm9kZUhhc1ZhckFyZ3MpKSB7CiAgICAgICAgICAgICBkYXRhTG9nRigibmV3IGNoaWxkcmVu
OiAiKTsKLSAgICAgICAgICAgIG5vZGVQdHItPmR1bXBDaGlsZHJlbihXVEY6OmRhdGFGaWxlKCkp
OworICAgICAgICAgICAgbm9kZS0+ZHVtcENoaWxkcmVuKFdURjo6ZGF0YUZpbGUoKSk7CiAgICAg
ICAgIH0KICAgICAgICAgZGF0YUxvZ0YoIlxuIik7CiAjZW5kaWYKICAgICB9CiAgICAgCi0gICAg
Tm9kZUluZGV4IGNoZWNrQXJyYXkoQXJyYXlNb2RlIGFycmF5TW9kZSwgQ29kZU9yaWdpbiBjb2Rl
T3JpZ2luLCBOb2RlSW5kZXggYXJyYXksIE5vZGVJbmRleCBpbmRleCwgYm9vbCAoKnN0b3JhZ2VD
aGVjaykoY29uc3QgQXJyYXlNb2RlJikgPSBjYW5DU0VTdG9yYWdlLCBib29sIHNob3VsZEdlbmVy
YXRlID0gdHJ1ZSkKKyAgICBOb2RlKiBjaGVja0FycmF5KEFycmF5TW9kZSBhcnJheU1vZGUsIENv
ZGVPcmlnaW4gY29kZU9yaWdpbiwgTm9kZSogYXJyYXksIE5vZGUqIGluZGV4LCBib29sICgqc3Rv
cmFnZUNoZWNrKShjb25zdCBBcnJheU1vZGUmKSA9IGNhbkNTRVN0b3JhZ2UsIGJvb2wgc2hvdWxk
R2VuZXJhdGUgPSB0cnVlKQogICAgIHsKICAgICAgICAgQVNTRVJUKGFycmF5TW9kZS5pc1NwZWNp
ZmljKCkpOwogICAgICAgICAKQEAgLTQyOCwxMSArNDEyLDExIEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICAgICAgaWYgKG1faW5kZXhJbkJsb2NrID4gMCkgewogICAgICAgICAgICAgICAgICAgICAv
LyBJZiB0aGUgcHJldmlvdXMgbm9kZSB3YXMgYSBDaGVja1N0cnVjdHVyZSBpbnNlcnRlZCBiZWNh
dXNlIG9mIHN0dWZmCiAgICAgICAgICAgICAgICAgICAgIC8vIHRoYXQgdGhlIGFycmF5IHByb2Zp
bGUgdG9sZCB1cywgdGhlbiByZW1vdmUgaXQuCi0gICAgICAgICAgICAgICAgICAgIE5vZGUmIHBy
ZXZpb3VzTm9kZSA9IG1fZ3JhcGhbbV9ibG9jay0+YXQobV9pbmRleEluQmxvY2sgLSAxKV07Ci0g
ICAgICAgICAgICAgICAgICAgIGlmIChwcmV2aW91c05vZGUub3AoKSA9PSBDaGVja1N0cnVjdHVy
ZQotICAgICAgICAgICAgICAgICAgICAgICAgJiYgcHJldmlvdXNOb2RlLmNoaWxkMSgpID09IGFy
cmF5Ci0gICAgICAgICAgICAgICAgICAgICAgICAmJiBwcmV2aW91c05vZGUuY29kZU9yaWdpbiA9
PSBjb2RlT3JpZ2luKQotICAgICAgICAgICAgICAgICAgICAgICAgcHJldmlvdXNOb2RlLnNldE9w
QW5kRGVmYXVsdEZsYWdzKFBoYW50b20pOworICAgICAgICAgICAgICAgICAgICBOb2RlKiBwcmV2
aW91c05vZGUgPSBibG9jay0+YXQobV9pbmRleEluQmxvY2sgLSAxKTsKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKHByZXZpb3VzTm9kZS0+b3AoKSA9PSBDaGVja1N0cnVjdHVyZQorICAgICAgICAg
ICAgICAgICAgICAgICAgJiYgcHJldmlvdXNOb2RlLT5jaGlsZDEoKSA9PSBhcnJheQorICAgICAg
ICAgICAgICAgICAgICAgICAgJiYgcHJldmlvdXNOb2RlLT5jb2RlT3JpZ2luID09IGNvZGVPcmln
aW4pCisgICAgICAgICAgICAgICAgICAgICAgICBwcmV2aW91c05vZGUtPnNldE9wQW5kRGVmYXVs
dEZsYWdzKFBoYW50b20pOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKICAg
ICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKApAQCAtNDU2LDcgKzQ0MCw3
IEBAIHByaXZhdGU6CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIGlmICghc3RvcmFnZUNo
ZWNrKGFycmF5TW9kZSkpCi0gICAgICAgICAgICByZXR1cm4gTm9Ob2RlOworICAgICAgICAgICAg
cmV0dXJuIDA7CiAgICAgICAgIAogICAgICAgICBpZiAoYXJyYXlNb2RlLnVzZXNCdXR0ZXJmbHko
KSkgewogICAgICAgICAgICAgcmV0dXJuIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCkBAIC00
NzcsMTQgKzQ2MSwxNCBAQCBwcml2YXRlOgogICAgIHsKICAgICAgICAgaWYgKG1fZ3JhcGgubV9m
aXhwb2ludFN0YXRlID4gQmVmb3JlRml4cG9pbnQpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgICAgICAKLSAgICAgICAgTm9kZSogbm9kZVB0ciA9ICZtX2dyYXBoW21fY29tcGlsZUluZGV4
XTsKICAgICAgICAgCi0gICAgICAgIHN3aXRjaCAobm9kZVB0ci0+YXJyYXlNb2RlKCkudHlwZSgp
KSB7CisgICAgICAgIE5vZGUqIG5vZGUgPSBtX2N1cnJlbnROb2RlOworICAgICAgICAKKyAgICAg
ICAgc3dpdGNoIChub2RlLT5hcnJheU1vZGUoKS50eXBlKCkpIHsKICAgICAgICAgY2FzZSBBcnJh
eTo6Rm9yY2VFeGl0OiB7CiAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAog
ICAgICAgICAgICAgICAgIG1faW5kZXhJbkJsb2NrLCBEb250UmVmQ2hpbGRyZW4sIERvbnRSZWZO
b2RlLCBTcGVjTm9uZSwgRm9yY2VPU1JFeGl0LAotICAgICAgICAgICAgICAgIG5vZGVQdHItPmNv
ZGVPcmlnaW4pOworICAgICAgICAgICAgICAgIG5vZGUtPmNvZGVPcmlnaW4pOwogICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgICAgICAKQEAgLTQ5NywyNiArNDgxLDI2IEBA
IHByaXZhdGU6CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAKICAgICAgICAgZGVm
YXVsdDogewotICAgICAgICAgICAgTm9kZUluZGV4IHN0b3JhZ2UgPSBjaGVja0FycmF5KG5vZGVQ
dHItPmFycmF5TW9kZSgpLCBub2RlUHRyLT5jb2RlT3JpZ2luLCBiYXNlLmluZGV4KCksIGluZGV4
LmluZGV4VW5jaGVja2VkKCkpOwotICAgICAgICAgICAgaWYgKHN0b3JhZ2UgPT0gTm9Ob2RlKQor
ICAgICAgICAgICAgTm9kZSogc3RvcmFnZSA9IGNoZWNrQXJyYXkobm9kZS0+YXJyYXlNb2RlKCks
IG5vZGUtPmNvZGVPcmlnaW4sIGJhc2Uubm9kZSgpLCBpbmRleC5ub2RlKCkpOworICAgICAgICAg
ICAgaWYgKCFzdG9yYWdlKQogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIAot
ICAgICAgICAgICAgbV9ncmFwaC5jaGlsZChtX2dyYXBoW21fY29tcGlsZUluZGV4XSwgc3RvcmFn
ZUNoaWxkSWR4KSA9IEVkZ2Uoc3RvcmFnZSk7CisgICAgICAgICAgICBtX2dyYXBoLmNoaWxkKG5v
ZGUsIHN0b3JhZ2VDaGlsZElkeCkgPSBFZGdlKHN0b3JhZ2UpOwogICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICB9IH0KICAgICB9CiAgICAgCiAgICAgdm9pZCBmaXhJbnRFZGdlKEVkZ2UmIGVk
Z2UpCiAgICAgewotICAgICAgICBOb2RlJiBub2RlID0gbV9ncmFwaFtlZGdlXTsKLSAgICAgICAg
aWYgKG5vZGUub3AoKSAhPSBWYWx1ZVRvSW50MzIpCisgICAgICAgIE5vZGUqIG5vZGUgPSBlZGdl
Lm5vZGUoKTsKKyAgICAgICAgaWYgKG5vZGUtPm9wKCkgIT0gVmFsdWVUb0ludDMyKQogICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICAKLSAgICAgICAgaWYgKCFtX2dyYXBoW25vZGUuY2hpbGQx
KCldLnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKSkKKyAgICAgICAgaWYgKCFub2RlLT5jaGlsZDEo
KS0+c2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICAKICAgICAgICAgRWRnZSBvbGRFZGdlID0gZWRnZTsKLSAgICAgICAgRWRnZSBuZXdFZGdlID0g
bm9kZS5jaGlsZDEoKTsKKyAgICAgICAgRWRnZSBuZXdFZGdlID0gbm9kZS0+Y2hpbGQxKCk7CiAg
ICAgICAgIAogICAgICAgICBtX2dyYXBoLnJlZihuZXdFZGdlKTsKICAgICAgICAgbV9ncmFwaC5k
ZXJlZihvbGRFZGdlKTsKQEAgLTUyNiwxMSArNTEwLDExIEBAIHByaXZhdGU6CiAgICAgCiAgICAg
dm9pZCBmaXhEb3VibGVFZGdlKHVuc2lnbmVkIGNoaWxkSW5kZXgpCiAgICAgewotICAgICAgICBO
b2RlJiBzb3VyY2UgPSBtX2dyYXBoW21fY29tcGlsZUluZGV4XTsKKyAgICAgICAgTm9kZSogc291
cmNlID0gbV9jdXJyZW50Tm9kZTsKICAgICAgICAgRWRnZSYgZWRnZSA9IG1fZ3JhcGguY2hpbGQo
c291cmNlLCBjaGlsZEluZGV4KTsKICAgICAgICAgCi0gICAgICAgIGlmIChtX2dyYXBoW2VkZ2Vd
LnByZWRpY3Rpb24oKSAmIFNwZWNEb3VibGUpIHsKLSAgICAgICAgICAgIGVkZ2Uuc2V0VXNlS2lu
ZChEb3VibGVVc2UpOworICAgICAgICBpZiAoZWRnZS0+cHJlZGljdGlvbigpICYgU3BlY0RvdWJs
ZSkgeworICAgICAgICAgICAgZWRnZS0+c2V0VXNlS2luZChEb3VibGVVc2UpOwogICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIApAQCAtNTM5LDIzICs1MjMsMjIgQEAgcHJp
dmF0ZToKIAogICAgIHZvaWQgaW5qZWN0SW50MzJUb0RvdWJsZU5vZGUodW5zaWduZWQgY2hpbGRJ
bmRleCkKICAgICB7Ci0gICAgICAgIE5vZGVJbmRleCByZXN1bHRJbmRleCA9IG1faW5zZXJ0aW9u
U2V0Lmluc2VydE5vZGUoCisgICAgICAgIE5vZGUqIHJlc3VsdCA9IG1faW5zZXJ0aW9uU2V0Lmlu
c2VydE5vZGUoCiAgICAgICAgICAgICBtX2luZGV4SW5CbG9jaywgRG9udFJlZkNoaWxkcmVuLCBS
ZWZOb2RlLCBTcGVjRG91YmxlLCBJbnQzMlRvRG91YmxlLAotICAgICAgICAgICAgbV9ncmFwaFtt
X2NvbXBpbGVJbmRleF0uY29kZU9yaWdpbiwKLSAgICAgICAgICAgIG1fZ3JhcGguY2hpbGQobV9n
cmFwaFttX2NvbXBpbGVJbmRleF0sIGNoaWxkSW5kZXgpLmluZGV4KCkpOworICAgICAgICAgICAg
bV9jdXJyZW50Tm9kZS0+Y29kZU9yaWdpbiwgbV9ncmFwaC5jaGlsZChtX2N1cnJlbnROb2RlLCBj
aGlsZEluZGV4KS5ub2RlKCkpOwogICAgICAgICAKICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BB
R0FUSU9OX1ZFUkJPU0UpCiAgICAgICAgIGRhdGFMb2dGKAogICAgICAgICAgICAgIihyZXBsYWNp
bmcgQCV1LT5AJXUgd2l0aCBAJXUtPkAldSkgIiwKLSAgICAgICAgICAgIG1fY29tcGlsZUluZGV4
LCBtX2dyYXBoLmNoaWxkKG1fZ3JhcGhbbV9jb21waWxlSW5kZXhdLCBjaGlsZEluZGV4KS5pbmRl
eCgpLCBtX2NvbXBpbGVJbmRleCwgcmVzdWx0SW5kZXgpOworICAgICAgICAgICAgbV9jdXJyZW50
Tm9kZS0+aW5kZXgoKSwgbV9ncmFwaC5jaGlsZChtX2N1cnJlbnROb2RlLCBjaGlsZEluZGV4KS0+
aW5kZXgoKSwgbV9jdXJyZW50Tm9kZS0+aW5kZXgoKSwgcmVzdWx0LT5pbmRleCgpKTsKICNlbmRp
ZgogCi0gICAgICAgIG1fZ3JhcGguY2hpbGQobV9ncmFwaFttX2NvbXBpbGVJbmRleF0sIGNoaWxk
SW5kZXgpID0gRWRnZShyZXN1bHRJbmRleCwgRG91YmxlVXNlKTsKKyAgICAgICAgbV9ncmFwaC5j
aGlsZChtX2N1cnJlbnROb2RlLCBjaGlsZEluZGV4KSA9IEVkZ2UocmVzdWx0LCBEb3VibGVVc2Up
OwogICAgIH0KIAogICAgIEJhc2ljQmxvY2sqIG1fYmxvY2s7CiAgICAgdW5zaWduZWQgbV9pbmRl
eEluQmxvY2s7Ci0gICAgTm9kZUluZGV4IG1fY29tcGlsZUluZGV4OworICAgIE5vZGUqIG1fY3Vy
cmVudE5vZGU7CiAgICAgSW5zZXJ0aW9uU2V0IG1faW5zZXJ0aW9uU2V0OwogfTsKICAgICAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCShyZXZpc2lvbiAxNDA2MTYp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNDYsNiArNDYsNyBAQCBHcmFwaDo6R3JhcGgoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRh
LCBDCiAgICAgLCBtX2NvZGVCbG9jayhjb2RlQmxvY2spCiAgICAgLCBtX2NvbXBpbGF0aW9uKGds
b2JhbERhdGEubV9wZXJCeXRlY29kZVByb2ZpbGVyID8gZ2xvYmFsRGF0YS5tX3BlckJ5dGVjb2Rl
UHJvZmlsZXItPm5ld0NvbXBpbGF0aW9uKGNvZGVCbG9jaywgUHJvZmlsZXI6OkRGRykgOiAwKQog
ICAgICwgbV9wcm9maWxlZEJsb2NrKGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKSkKKyAgICAsIG1f
YWxsb2NhdG9yKGdsb2JhbERhdGEubV9kZmdTdGF0ZS0+bV9hbGxvY2F0b3IpCiAgICAgLCBtX2hh
c0FyZ3VtZW50cyhmYWxzZSkKICAgICAsIG1fb3NyRW50cnlCeXRlY29kZUluZGV4KG9zckVudHJ5
Qnl0ZWNvZGVJbmRleCkKICAgICAsIG1fbXVzdEhhbmRsZVZhbHVlcyhtdXN0SGFuZGxlVmFsdWVz
KQpAQCAtNTQsNiArNTUsMTEgQEAgR3JhcGg6OkdyYXBoKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0
YSwgQwogICAgIEFTU0VSVChtX3Byb2ZpbGVkQmxvY2spOwogfQogCitHcmFwaDo6fkdyYXBoKCkK
K3sKKyAgICBtX2FsbG9jYXRvci5mcmVlQWxsKCk7Cit9CisKIGNvbnN0IGNoYXIgKkdyYXBoOjpv
cE5hbWUoTm9kZVR5cGUgb3ApCiB7CiAgICAgcmV0dXJuIGRmZ09wTmFtZXNbb3BdOwpAQCAtNjUs
MTggKzcxLDE2IEBAIHN0YXRpYyB2b2lkIHByaW50V2hpdGVTcGFjZShQcmludFN0cmVhbSYKICAg
ICAgICAgb3V0LnByaW50KCIgIik7CiB9CiAKLWJvb2wgR3JhcGg6OmR1bXBDb2RlT3JpZ2luKFBy
aW50U3RyZWFtJiBvdXQsIGNvbnN0IGNoYXIqIHByZWZpeCwgTm9kZUluZGV4IHByZXZOb2RlSW5k
ZXgsIE5vZGVJbmRleCBub2RlSW5kZXgpCitib29sIEdyYXBoOjpkdW1wQ29kZU9yaWdpbihQcmlu
dFN0cmVhbSYgb3V0LCBjb25zdCBjaGFyKiBwcmVmaXgsIE5vZGUqIHByZXZpb3VzTm9kZSwgTm9k
ZSogY3VycmVudE5vZGUpCiB7Ci0gICAgaWYgKHByZXZOb2RlSW5kZXggPT0gTm9Ob2RlKQorICAg
IGlmICghcHJldmlvdXNOb2RlKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCi0gICAgTm9k
ZSYgY3VycmVudE5vZGUgPSBhdChub2RlSW5kZXgpOwotICAgIE5vZGUmIHByZXZpb3VzTm9kZSA9
IGF0KHByZXZOb2RlSW5kZXgpOwotICAgIGlmIChwcmV2aW91c05vZGUuY29kZU9yaWdpbi5pbmxp
bmVDYWxsRnJhbWUgPT0gY3VycmVudE5vZGUuY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpCisg
ICAgaWYgKHByZXZpb3VzTm9kZS0+Y29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUgPT0gY3VycmVu
dE5vZGUtPmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgCi0gICAgVmVjdG9yPENvZGVPcmlnaW4+IHByZXZpb3VzSW5saW5lU3RhY2sgPSBwcmV2
aW91c05vZGUuY29kZU9yaWdpbi5pbmxpbmVTdGFjaygpOwotICAgIFZlY3RvcjxDb2RlT3JpZ2lu
PiBjdXJyZW50SW5saW5lU3RhY2sgPSBjdXJyZW50Tm9kZS5jb2RlT3JpZ2luLmlubGluZVN0YWNr
KCk7CisgICAgVmVjdG9yPENvZGVPcmlnaW4+IHByZXZpb3VzSW5saW5lU3RhY2sgPSBwcmV2aW91
c05vZGUtPmNvZGVPcmlnaW4uaW5saW5lU3RhY2soKTsKKyAgICBWZWN0b3I8Q29kZU9yaWdpbj4g
Y3VycmVudElubGluZVN0YWNrID0gY3VycmVudE5vZGUtPmNvZGVPcmlnaW4uaW5saW5lU3RhY2so
KTsKICAgICB1bnNpZ25lZCBjb21tb25TaXplID0gc3RkOjptaW4ocHJldmlvdXNJbmxpbmVTdGFj
ay5zaXplKCksIGN1cnJlbnRJbmxpbmVTdGFjay5zaXplKCkpOwogICAgIHVuc2lnbmVkIGluZGV4
T2ZEaXZlcmdlbmNlID0gY29tbW9uU2l6ZTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
Y29tbW9uU2l6ZTsgKytpKSB7CkBAIC0xMDcsMzIgKzExMSwyMyBAQCBib29sIEdyYXBoOjpkdW1w
Q29kZU9yaWdpbihQcmludFN0cmVhbSYgCiAgICAgcmV0dXJuIGhhc1ByaW50ZWQ7CiB9CiAKLWlu
dCBHcmFwaDo6YW1vdW50T2ZOb2RlV2hpdGVTcGFjZShOb2RlJiBub2RlKQoraW50IEdyYXBoOjph
bW91bnRPZk5vZGVXaGl0ZVNwYWNlKE5vZGUqIG5vZGUpCiB7Ci0gICAgcmV0dXJuIChub2RlLmNv
ZGVPcmlnaW4uaW5saW5lRGVwdGgoKSAtIDEpICogMjsKKyAgICByZXR1cm4gKG5vZGUtPmNvZGVP
cmlnaW4uaW5saW5lRGVwdGgoKSAtIDEpICogMjsKIH0KIAotdm9pZCBHcmFwaDo6cHJpbnROb2Rl
V2hpdGVTcGFjZShQcmludFN0cmVhbSYgb3V0LCBOb2RlJiBub2RlKQordm9pZCBHcmFwaDo6cHJp
bnROb2RlV2hpdGVTcGFjZShQcmludFN0cmVhbSYgb3V0LCBOb2RlKiBub2RlKQogewogICAgIHBy
aW50V2hpdGVTcGFjZShvdXQsIGFtb3VudE9mTm9kZVdoaXRlU3BhY2Uobm9kZSkpOwogfQogCi12
b2lkIEdyYXBoOjpkdW1wKFByaW50U3RyZWFtJiBvdXQsIEVkZ2UgZWRnZSkKK3ZvaWQgR3JhcGg6
OmR1bXAoUHJpbnRTdHJlYW0mIG91dCwgY29uc3QgY2hhciogcHJlZml4LCBOb2RlKiBub2RlKQog
ewotICAgIG91dC5wcmludCgKLSAgICAgICAgdXNlS2luZFRvU3RyaW5nKGVkZ2UudXNlS2luZCgp
KSwKLSAgICAgICAgIkAiLCBlZGdlLmluZGV4KCksCi0gICAgICAgIEFiYnJldmlhdGVkU3BlY3Vs
YXRpb25EdW1wKGF0KGVkZ2UpLnByZWRpY3Rpb24oKSkpOwotfQorICAgIE5vZGVUeXBlIG9wID0g
bm9kZS0+b3AoKTsKIAotdm9pZCBHcmFwaDo6ZHVtcChQcmludFN0cmVhbSYgb3V0LCBjb25zdCBj
aGFyKiBwcmVmaXgsIE5vZGVJbmRleCBub2RlSW5kZXgpCi17Ci0gICAgTm9kZSYgbm9kZSA9IGF0
KG5vZGVJbmRleCk7Ci0gICAgTm9kZVR5cGUgb3AgPSBub2RlLm9wKCk7Ci0KLSAgICB1bnNpZ25l
ZCByZWZDb3VudCA9IG5vZGUucmVmQ291bnQoKTsKKyAgICB1bnNpZ25lZCByZWZDb3VudCA9IG5v
ZGUtPnJlZkNvdW50KCk7CiAgICAgYm9vbCBza2lwcGVkID0gIXJlZkNvdW50OwotICAgIGJvb2wg
bXVzdEdlbmVyYXRlID0gbm9kZS5tdXN0R2VuZXJhdGUoKTsKKyAgICBib29sIG11c3RHZW5lcmF0
ZSA9IG5vZGUtPm11c3RHZW5lcmF0ZSgpOwogICAgIGlmIChtdXN0R2VuZXJhdGUpCiAgICAgICAg
IC0tcmVmQ291bnQ7CiAKQEAgLTE1NiwxNTAgKzE1MSw5NiBAQCB2b2lkIEdyYXBoOjpkdW1wKFBy
aW50U3RyZWFtJiBvdXQsIGNvbnN0CiAgICAgLy8gICAgICAgICAkIyAgIC0gdGhlIGluZGV4IGlu
IHRoZSBDb2RlQmxvY2sgb2YgYSBjb25zdGFudCB7IGZvciBudW1lcmljIGNvbnN0YW50cyB0aGUg
dmFsdWUgaXMgZGlzcGxheWVkIHwgZm9yIGludGVnZXJzLCBpbiBib3RoIGRlY2ltYWwgYW5kIGhl
eCB9LgogICAgIC8vICAgICAgICAgaWQjICAtIHRoZSBpbmRleCBpbiB0aGUgQ29kZUJsb2NrIG9m
IGFuIGlkZW50aWZpZXIgeyBpZiBjb2RlQmxvY2sgaXMgcGFzc2VkIHRvIGR1bXAoKSwgdGhlIHN0
cmluZyByZXByZXNlbnRhdGlvbiBpcyBkaXNwbGF5ZWQgfS4KICAgICAvLyAgICAgICAgIHZhciMg
LSB0aGUgaW5kZXggb2YgYSB2YXIgb24gdGhlIGdsb2JhbCBvYmplY3QsIHVzZWQgYnkgR2V0R2xv
YmFsVmFyL1B1dEdsb2JhbFZhciBvcGVyYXRpb25zLgotICAgIG91dC5wcmludGYoIiUgNGQ6JXM8
JWMldToiLCAoaW50KW5vZGVJbmRleCwgc2tpcHBlZCA/ICIgIHNraXBwZWQgICIgOiAiICAgICAg
ICAgICAiLCBtdXN0R2VuZXJhdGUgPyAnIScgOiAnICcsIHJlZkNvdW50KTsKLSAgICBpZiAobm9k
ZS5oYXNSZXN1bHQoKSAmJiAhc2tpcHBlZCAmJiBub2RlLmhhc1ZpcnR1YWxSZWdpc3RlcigpKQot
ICAgICAgICBvdXQucHJpbnQobm9kZS52aXJ0dWFsUmVnaXN0ZXIoKSk7CisgICAgb3V0LnByaW50
ZigiJSA0ZDolczwlYyV1OiIsIChpbnQpbm9kZS0+aW5kZXgoKSwgc2tpcHBlZCA/ICIgIHNraXBw
ZWQgICIgOiAiICAgICAgICAgICAiLCBtdXN0R2VuZXJhdGUgPyAnIScgOiAnICcsIHJlZkNvdW50
KTsKKyAgICBpZiAobm9kZS0+aGFzUmVzdWx0KCkgJiYgIXNraXBwZWQgJiYgbm9kZS0+aGFzVmly
dHVhbFJlZ2lzdGVyKCkpCisgICAgICAgIG91dC5wcmludChub2RlLT52aXJ0dWFsUmVnaXN0ZXIo
KSk7CiAgICAgZWxzZQogICAgICAgICBvdXQucHJpbnQoIi0iKTsKICAgICBvdXQucHJpbnQoIj5c
dCIsIG9wTmFtZShvcCksICIoIik7Ci0gICAgYm9vbCBoYXNQcmludGVkID0gZmFsc2U7Ci0gICAg
aWYgKG5vZGUuZmxhZ3MoKSAmIE5vZGVIYXNWYXJBcmdzKSB7Ci0gICAgICAgIGZvciAodW5zaWdu
ZWQgY2hpbGRJZHggPSBub2RlLmZpcnN0Q2hpbGQoKTsgY2hpbGRJZHggPCBub2RlLmZpcnN0Q2hp
bGQoKSArIG5vZGUubnVtQ2hpbGRyZW4oKTsgY2hpbGRJZHgrKykgewotICAgICAgICAgICAgaWYg
KGhhc1ByaW50ZWQpCi0gICAgICAgICAgICAgICAgb3V0LnByaW50KCIsICIpOwotICAgICAgICAg
ICAgZWxzZQotICAgICAgICAgICAgICAgIGhhc1ByaW50ZWQgPSB0cnVlOworICAgIENvbW1hUHJp
bnRlciBjb21tYTsKKyAgICBpZiAobm9kZS0+ZmxhZ3MoKSAmIE5vZGVIYXNWYXJBcmdzKSB7Cisg
ICAgICAgIGZvciAodW5zaWduZWQgY2hpbGRJZHggPSBub2RlLT5maXJzdENoaWxkKCk7IGNoaWxk
SWR4IDwgbm9kZS0+Zmlyc3RDaGlsZCgpICsgbm9kZS0+bnVtQ2hpbGRyZW4oKTsgY2hpbGRJZHgr
KykgewogICAgICAgICAgICAgaWYgKCFtX3ZhckFyZ0NoaWxkcmVuW2NoaWxkSWR4XSkKICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGR1bXAob3V0LCBtX3ZhckFyZ0NoaWxk
cmVuW2NoaWxkSWR4XSk7CisgICAgICAgICAgICBvdXQucHJpbnQoY29tbWEsIG1fdmFyQXJnQ2hp
bGRyZW5bY2hpbGRJZHhdKTsKICAgICAgICAgfQogICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmICgh
IW5vZGUuY2hpbGQxKCkpIHsKLSAgICAgICAgICAgIGR1bXAob3V0LCBub2RlLmNoaWxkMSgpKTsK
LSAgICAgICAgICAgIGhhc1ByaW50ZWQgPSB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIGlmICgh
IW5vZGUuY2hpbGQyKCkpIHsKLSAgICAgICAgICAgIG91dC5wcmludCgiLCAiKTsgLy8gV2hldGhl
ciBvciBub3QgdGhlcmUgaXMgYSBmaXJzdCBjaGlsZCwgd2UgcHJpbnQgYSBjb21tYSB0byBlbnN1
cmUgdGhhdCB3ZSBzZWUgYSBibGFuayBlbnRyeSBpZiB0aGVyZSB3YXNuJ3Qgb25lLgotICAgICAg
ICAgICAgZHVtcChvdXQsIG5vZGUuY2hpbGQyKCkpOwotICAgICAgICAgICAgaGFzUHJpbnRlZCA9
IHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCEhbm9kZS5jaGlsZDMoKSkgewotICAgICAg
ICAgICAgaWYgKCFub2RlLmNoaWxkMSgpICYmICFub2RlLmNoaWxkMigpKQotICAgICAgICAgICAg
ICAgIG91dC5wcmludCgiLCAiKTsgLy8gSWYgdGhlIHRoaXJkIGNoaWxkIGlzIHRoZSBmaXJzdCBu
b24tZW1wdHkgb25lIHRoZW4gbWFrZSBzdXJlIHdlIGhhdmUgdHdvIGJsYW5rcyBwcmVjZWRpbmcg
aXQuCi0gICAgICAgICAgICBvdXQucHJpbnQoIiwgIik7Ci0gICAgICAgICAgICBkdW1wKG91dCwg
bm9kZS5jaGlsZDMoKSk7Ci0gICAgICAgICAgICBoYXNQcmludGVkID0gdHJ1ZTsKLSAgICAgICAg
fQotICAgIH0KLQotICAgIGlmIChzdHJsZW4obm9kZUZsYWdzQXNTdHJpbmcobm9kZS5mbGFncygp
KSkpIHsKLSAgICAgICAgb3V0LnByaW50KGhhc1ByaW50ZWQgPyAiLCAiIDogIiIsIG5vZGVGbGFn
c0FzU3RyaW5nKG5vZGUuZmxhZ3MoKSkpOwotICAgICAgICBoYXNQcmludGVkID0gdHJ1ZTsKLSAg
ICB9Ci0gICAgaWYgKG5vZGUuaGFzQXJyYXlNb2RlKCkpIHsKLSAgICAgICAgb3V0LnByaW50KGhh
c1ByaW50ZWQgPyAiLCAiIDogIiIsIG5vZGUuYXJyYXlNb2RlKCkpOwotICAgICAgICBoYXNQcmlu
dGVkID0gdHJ1ZTsKLSAgICB9Ci0gICAgaWYgKG5vZGUuaGFzVmFyTnVtYmVyKCkpIHsKLSAgICAg
ICAgb3V0LnByaW50KGhhc1ByaW50ZWQgPyAiLCAiIDogIiIsICJ2YXIiLCBub2RlLnZhck51bWJl
cigpKTsKLSAgICAgICAgaGFzUHJpbnRlZCA9IHRydWU7Ci0gICAgfQotICAgIGlmIChub2RlLmhh
c1JlZ2lzdGVyUG9pbnRlcigpKSB7Ci0gICAgICAgIG91dC5wcmludChoYXNQcmludGVkID8gIiwg
IiA6ICIiLCAiZ2xvYmFsIiwgZ2xvYmFsT2JqZWN0Rm9yKG5vZGUuY29kZU9yaWdpbiktPmZpbmRS
ZWdpc3RlckluZGV4KG5vZGUucmVnaXN0ZXJQb2ludGVyKCkpLCAiKCIsIFJhd1BvaW50ZXIobm9k
ZS5yZWdpc3RlclBvaW50ZXIoKSksICIpIik7Ci0gICAgICAgIGhhc1ByaW50ZWQgPSB0cnVlOwot
ICAgIH0KLSAgICBpZiAobm9kZS5oYXNJZGVudGlmaWVyKCkpIHsKLSAgICAgICAgb3V0LnByaW50
KGhhc1ByaW50ZWQgPyAiLCAiIDogIiIsICJpZCIsIG5vZGUuaWRlbnRpZmllck51bWJlcigpLCAi
eyIsIG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKG5vZGUuaWRlbnRpZmllck51bWJlcigpKS5zdHJp
bmcoKSwgIn0iKTsKLSAgICAgICAgaGFzUHJpbnRlZCA9IHRydWU7Ci0gICAgfQotICAgIGlmIChu
b2RlLmhhc1N0cnVjdHVyZVNldCgpKSB7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
bm9kZS5zdHJ1Y3R1cmVTZXQoKS5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgb3V0LnByaW50
KGhhc1ByaW50ZWQgPyAiLCAiIDogIiIsICJzdHJ1Y3QoIiwgUmF3UG9pbnRlcihub2RlLnN0cnVj
dHVyZVNldCgpW2ldKSwgIjogIiwgSW5kZXhpbmdUeXBlRHVtcChub2RlLnN0cnVjdHVyZVNldCgp
W2ldLT5pbmRleGluZ1R5cGUoKSksICIpIik7Ci0gICAgICAgICAgICBoYXNQcmludGVkID0gdHJ1
ZTsKLSAgICAgICAgfQotICAgIH0KLSAgICBpZiAobm9kZS5oYXNTdHJ1Y3R1cmUoKSkgewotICAg
ICAgICBvdXQucHJpbnQoaGFzUHJpbnRlZCA/ICIsICIgOiAiIiwgInN0cnVjdCgiLCBSYXdQb2lu
dGVyKG5vZGUuc3RydWN0dXJlKCkpLCAiOiAiLCBJbmRleGluZ1R5cGVEdW1wKG5vZGUuc3RydWN0
dXJlKCktPmluZGV4aW5nVHlwZSgpKSwgIikiKTsKLSAgICAgICAgaGFzUHJpbnRlZCA9IHRydWU7
Ci0gICAgfQotICAgIGlmIChub2RlLmhhc1N0cnVjdHVyZVRyYW5zaXRpb25EYXRhKCkpIHsKLSAg
ICAgICAgb3V0LnByaW50KGhhc1ByaW50ZWQgPyAiLCAiIDogIiIsICJzdHJ1Y3QoIiwgUmF3UG9p
bnRlcihub2RlLnN0cnVjdHVyZVRyYW5zaXRpb25EYXRhKCkucHJldmlvdXNTdHJ1Y3R1cmUpLCAi
IC0+ICIsIFJhd1BvaW50ZXIobm9kZS5zdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSgpLm5ld1N0cnVj
dHVyZSksICIpIik7Ci0gICAgICAgIGhhc1ByaW50ZWQgPSB0cnVlOwotICAgIH0KLSAgICBpZiAo
bm9kZS5oYXNGdW5jdGlvbigpKSB7Ci0gICAgICAgIG91dC5wcmludChoYXNQcmludGVkID8gIiwg
IiA6ICIiLCBSYXdQb2ludGVyKG5vZGUuZnVuY3Rpb24oKSkpOwotICAgICAgICBoYXNQcmludGVk
ID0gdHJ1ZTsKLSAgICB9Ci0gICAgaWYgKG5vZGUuaGFzU3RvcmFnZUFjY2Vzc0RhdGEoKSkgewot
ICAgICAgICBTdG9yYWdlQWNjZXNzRGF0YSYgc3RvcmFnZUFjY2Vzc0RhdGEgPSBtX3N0b3JhZ2VB
Y2Nlc3NEYXRhW25vZGUuc3RvcmFnZUFjY2Vzc0RhdGFJbmRleCgpXTsKLSAgICAgICAgb3V0LnBy
aW50KGhhc1ByaW50ZWQgPyAiLCAiIDogIiIsICJpZCIsIHN0b3JhZ2VBY2Nlc3NEYXRhLmlkZW50
aWZpZXJOdW1iZXIsICJ7IiwgbV9jb2RlQmxvY2stPmlkZW50aWZpZXIoc3RvcmFnZUFjY2Vzc0Rh
dGEuaWRlbnRpZmllck51bWJlcikuc3RyaW5nKCksICJ9Iik7CisgICAgICAgIGlmICghIW5vZGUu
Y2hpbGQxKCkgfHwgISFub2RlLmNoaWxkMigpIHx8ICEhbm9kZS5jaGlsZDMoKSkKKyAgICAgICAg
ICAgIG91dC5wcmludChjb21tYSwgbm9kZS5jaGlsZDEoKSk7CisgICAgICAgIGlmICghIW5vZGUu
Y2hpbGQyKCkgfHwgISFub2RlLmNoaWxkMygpKQorICAgICAgICAgICAgb3V0LnByaW50KGNvbW1h
LCBub2RlLmNoaWxkMigpKTsKKyAgICAgICAgaWYgKCEhbm9kZS5jaGlsZDMoKSkKKyAgICAgICAg
ICAgIG91dC5wcmludChjb21tYSwgbm9kZS5jaGlsZDMoKSk7CisgICAgfQorCisgICAgaWYgKHN0
cmxlbihub2RlRmxhZ3NBc1N0cmluZyhub2RlLT5mbGFncygpKSkpCisgICAgICAgIG91dC5wcmlu
dChjb21tYSwgbm9kZUZsYWdzQXNTdHJpbmcobm9kZS0+ZmxhZ3MoKSkpOworICAgIGlmIChub2Rl
LT5oYXNBcnJheU1vZGUoKSkgeworICAgICAgICBvdXQucHJpbnQoY29tbWEsIG5vZGUtPmFycmF5
TW9kZSgpKTsKKyAgICBpZiAobm9kZS0+aGFzVmFyTnVtYmVyKCkpIHsKKyAgICAgICAgb3V0LnBy
aW50KGNvbW1hLCBub2RlLT52YXJOdW1iZXIoKSk7CisgICAgaWYgKG5vZGUtPmhhc1JlZ2lzdGVy
UG9pbnRlcigpKQorICAgICAgICBvdXQucHJpbnQoY29tbWEsICJnbG9iYWwiLCBnbG9iYWxPYmpl
Y3RGb3Iobm9kZS0+Y29kZU9yaWdpbiktPmZpbmRSZWdpc3RlckluZGV4KG5vZGUtPnJlZ2lzdGVy
UG9pbnRlcigpKSwgIigiLCBSYXdQb2ludGVyKG5vZGUtPnJlZ2lzdGVyUG9pbnRlcigpKSwgIiki
KTsKKyAgICBpZiAobm9kZS0+aGFzSWRlbnRpZmllcigpKQorICAgICAgICBvdXQucHJpbnQoY29t
bWEsICJpZCIsIG5vZGUtPmlkZW50aWZpZXJOdW1iZXIoKSwgInsiLCBtX2NvZGVCbG9jay0+aWRl
bnRpZmllcihub2RlLT5pZGVudGlmaWVyTnVtYmVyKCkpLnN0cmluZygpLCAifSIpOworICAgIGlm
IChub2RlLT5oYXNTdHJ1Y3R1cmVTZXQoKSkgeworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IG5vZGUuc3RydWN0dXJlU2V0KCkuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICBvdXQucHJp
bnQoY29tbWEsICJzdHJ1Y3QoIiwgUmF3UG9pbnRlcihub2RlLT5zdHJ1Y3R1cmVTZXQoKVtpXSks
ICI6ICIsIEluZGV4aW5nVHlwZUR1bXAobm9kZS0+c3RydWN0dXJlU2V0KClbaV0tPmluZGV4aW5n
VHlwZSgpKSwgIikiKTsKKyAgICB9CisgICAgaWYgKG5vZGUtPmhhc1N0cnVjdHVyZSgpKQorICAg
ICAgICBvdXQucHJpbnQoY29tbWEsICJzdHJ1Y3QoIiwgUmF3UG9pbnRlcihub2RlLT5zdHJ1Y3R1
cmUoKSksICI6ICIsIEluZGV4aW5nVHlwZUR1bXAobm9kZS0+c3RydWN0dXJlKCktPmluZGV4aW5n
VHlwZSgpKSwgIikiKTsKKyAgICBpZiAobm9kZS0+aGFzU3RydWN0dXJlVHJhbnNpdGlvbkRhdGEo
KSkKKyAgICAgICAgb3V0LnByaW50KGNvbW1hLCAic3RydWN0KCIsIFJhd1BvaW50ZXIobm9kZS0+
c3RydWN0dXJlVHJhbnNpdGlvbkRhdGEoKS5wcmV2aW91c1N0cnVjdHVyZSksICIgLT4gIiwgUmF3
UG9pbnRlcihub2RlLT5zdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSgpLm5ld1N0cnVjdHVyZSksICIp
Iik7CisgICAgaWYgKG5vZGUtPmhhc0Z1bmN0aW9uKCkpCisgICAgICAgIG91dC5wcmludChjb21t
YSwgImZ1bmN0aW9uKCIsIFJhd1BvaW50ZXIobm9kZS0+ZnVuY3Rpb24oKSksICIsICIsIEZ1bmN0
aW9uRXhlY3V0YWJsZUR1bXAobm9kZS0+ZnVuY3Rpb24oKS0+anNFeGVjdXRhYmxlKCkpLCAiKSIp
OworICAgIGlmIChub2RlLT5oYXNFeGVjdXRhYmxlKCkpCisgICAgICAgIG91dC5wcmludChjb21t
YSwgImV4ZWN1dGFibGUoIiwgRnVuY3Rpb25FeGVjdXRhYmxlRHVtcChub2RlLT5leGVjdXRhYmxl
KCkpLCAiKSIpOworICAgIGlmIChub2RlLT5oYXNTdG9yYWdlQWNjZXNzRGF0YSgpKSB7CisgICAg
ICAgIFN0b3JhZ2VBY2Nlc3NEYXRhJiBzdG9yYWdlQWNjZXNzRGF0YSA9IG1fc3RvcmFnZUFjY2Vz
c0RhdGFbbm9kZS0+c3RvcmFnZUFjY2Vzc0RhdGFJbmRleCgpXTsKKyAgICAgICAgb3V0LnByaW50
KGNvbW1hLCAiaWQiLCBzdG9yYWdlQWNjZXNzRGF0YS5pZGVudGlmaWVyTnVtYmVyLCAieyIsIG1f
Y29kZUJsb2NrLT5pZGVudGlmaWVyKHN0b3JhZ2VBY2Nlc3NEYXRhLmlkZW50aWZpZXJOdW1iZXIp
LnN0cmluZygpLCAifSIpOwogICAgICAgICBvdXQucHJpbnQoIiwgIiwgc3RhdGljX2Nhc3Q8cHRy
ZGlmZl90PihzdG9yYWdlQWNjZXNzRGF0YS5vZmZzZXQpKTsKLSAgICAgICAgaGFzUHJpbnRlZCA9
IHRydWU7CiAgICAgfQotICAgIEFTU0VSVChub2RlLmhhc1ZhcmlhYmxlQWNjZXNzRGF0YSgpID09
IG5vZGUuaGFzTG9jYWwoKSk7Ci0gICAgaWYgKG5vZGUuaGFzVmFyaWFibGVBY2Nlc3NEYXRhKCkp
IHsKLSAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBub2Rl
LnZhcmlhYmxlQWNjZXNzRGF0YSgpOworICAgIEFTU0VSVChub2RlLT5oYXNWYXJpYWJsZUFjY2Vz
c0RhdGEoKSA9PSBub2RlLT5oYXNMb2NhbCgpKTsKKyAgICBpZiAobm9kZS0+aGFzVmFyaWFibGVB
Y2Nlc3NEYXRhKCkpIHsKKyAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vz
c0RhdGEgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKICAgICAgICAgaW50IG9wZXJhbmQg
PSB2YXJpYWJsZUFjY2Vzc0RhdGEtPm9wZXJhbmQoKTsKICAgICAgICAgaWYgKG9wZXJhbmRJc0Fy
Z3VtZW50KG9wZXJhbmQpKQotICAgICAgICAgICAgb3V0LnByaW50KGhhc1ByaW50ZWQgPyAiLCAi
IDogIiIsICJhcmciLCBvcGVyYW5kVG9Bcmd1bWVudChvcGVyYW5kKSwgIigiLCBWYXJpYWJsZUFj
Y2Vzc0RhdGFEdW1wKCp0aGlzLCB2YXJpYWJsZUFjY2Vzc0RhdGEpLCAiKSIpOworICAgICAgICAg
ICAgb3V0LnByaW50KGNvbW1hLCAiYXJnIiwgb3BlcmFuZFRvQXJndW1lbnQob3BlcmFuZCksICIo
IiwgVmFyaWFibGVBY2Nlc3NEYXRhRHVtcCgqdGhpcywgdmFyaWFibGVBY2Nlc3NEYXRhKSwgIiki
KTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgb3V0LnByaW50KGhhc1ByaW50ZWQgPyAiLCAi
IDogIiIsICJyIiwgb3BlcmFuZCwgIigiLCBWYXJpYWJsZUFjY2Vzc0RhdGFEdW1wKCp0aGlzLCB2
YXJpYWJsZUFjY2Vzc0RhdGEpLCAiKSIpOwotICAgICAgICBoYXNQcmludGVkID0gdHJ1ZTsKKyAg
ICAgICAgICAgIG91dC5wcmludChjb21tYSwgInIiLCBvcGVyYW5kLCAiKCIsIFZhcmlhYmxlQWNj
ZXNzRGF0YUR1bXAoKnRoaXMsIHZhcmlhYmxlQWNjZXNzRGF0YSksICIpIik7CiAgICAgfQotICAg
IGlmIChub2RlLmhhc0NvbnN0YW50QnVmZmVyKCkpIHsKLSAgICAgICAgaWYgKGhhc1ByaW50ZWQp
Ci0gICAgICAgICAgICBvdXQucHJpbnQoIiwgIik7CisgICAgaWYgKG5vZGUtPmhhc0NvbnN0YW50
QnVmZmVyKCkpIHsKKyAgICAgICAgb3V0LnByaW50KGNvbW1hKTsKICAgICAgICAgb3V0LnByaW50
KG5vZGUuc3RhcnRDb25zdGFudCgpLCAiOlsiKTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IG5vZGUubnVtQ29uc3RhbnRzKCk7ICsraSkgewotICAgICAgICAgICAgaWYgKGkpCi0g
ICAgICAgICAgICAgICAgb3V0LnByaW50KCIsICIpOwotICAgICAgICAgICAgb3V0LnByaW50KG1f
Y29kZUJsb2NrLT5jb25zdGFudEJ1ZmZlcihub2RlLnN0YXJ0Q29uc3RhbnQoKSlbaV0pOwotICAg
ICAgICB9CisgICAgICAgIENvbW1hUHJpbnRlciBhbm90aGVyQ29tbWE7CisgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBub2RlLm51bUNvbnN0YW50cygpOyArK2kpCisgICAgICAgICAg
ICBvdXQucHJpbnQoYW5vdGhlckNvbW1hLCBtX2NvZGVCbG9jay0+Y29uc3RhbnRCdWZmZXIobm9k
ZS5zdGFydENvbnN0YW50KCkpW2ldKTsKICAgICAgICAgb3V0LnByaW50KCJdIik7Ci0gICAgICAg
IGhhc1ByaW50ZWQgPSB0cnVlOwotICAgIH0KLSAgICBpZiAobm9kZS5oYXNJbmRleGluZ1R5cGUo
KSkgewotICAgICAgICBpZiAoaGFzUHJpbnRlZCkKLSAgICAgICAgICAgIG91dC5wcmludCgiLCAi
KTsKLSAgICAgICAgb3V0LnByaW50KEluZGV4aW5nVHlwZUR1bXAobm9kZS5pbmRleGluZ1R5cGUo
KSkpOwotICAgICAgICBoYXNQcmludGVkID0gdHJ1ZTsKLSAgICB9Ci0gICAgaWYgKG5vZGUuaGFz
RXhlY3V0aW9uQ291bnRlcigpKSB7Ci0gICAgICAgIGlmIChoYXNQcmludGVkKQotICAgICAgICAg
ICAgb3V0LnByaW50KCIsICIpOwotICAgICAgICBvdXQucHJpbnQoUmF3UG9pbnRlcihub2RlLmV4
ZWN1dGlvbkNvdW50ZXIoKSkpOwotICAgICAgICBoYXNQcmludGVkID0gdHJ1ZTsKICAgICB9Cisg
ICAgaWYgKG5vZGUtPmhhc0luZGV4aW5nVHlwZSgpKQorICAgICAgICBvdXQucHJpbnQoY29tbWEs
IEluZGV4aW5nVHlwZUR1bXAobm9kZS0+aW5kZXhpbmdUeXBlKCkpKTsKKyAgICBpZiAobm9kZS0+
aGFzRXhlY3V0aW9uQ291bnRlcigpKSB7CisgICAgICAgIG91dC5wcmludChjb21tYSwgUmF3UG9p
bnRlcihub2RlLT5leGVjdXRpb25Db3VudGVyKCkpKTsKICAgICBpZiAob3AgPT0gSlNDb25zdGFu
dCkgewotICAgICAgICBvdXQucHJpbnQoaGFzUHJpbnRlZCA/ICIsICIgOiAiIiwgIiQiLCBub2Rl
LmNvbnN0YW50TnVtYmVyKCkpOwotICAgICAgICBKU1ZhbHVlIHZhbHVlID0gdmFsdWVPZkpTQ29u
c3RhbnQobm9kZUluZGV4KTsKKyAgICAgICAgb3V0LnByaW50KGNvbW1hLCAiJCIsIG5vZGUtPmNv
bnN0YW50TnVtYmVyKCkpOworICAgICAgICBKU1ZhbHVlIHZhbHVlID0gdmFsdWVPZkpTQ29uc3Rh
bnQobm9kZSk7CiAgICAgICAgIG91dC5wcmludCgiID0gIiwgdmFsdWUpOwotICAgICAgICBoYXNQ
cmludGVkID0gdHJ1ZTsKLSAgICB9Ci0gICAgaWYgKG9wID09IFdlYWtKU0NvbnN0YW50KSB7Ci0g
ICAgICAgIG91dC5wcmludChoYXNQcmludGVkID8gIiwgIiA6ICIiLCBSYXdQb2ludGVyKG5vZGUu
d2Vha0NvbnN0YW50KCkpKTsKLSAgICAgICAgaGFzUHJpbnRlZCA9IHRydWU7Ci0gICAgfQotICAg
IGlmICAobm9kZS5pc0JyYW5jaCgpIHx8IG5vZGUuaXNKdW1wKCkpIHsKLSAgICAgICAgb3V0LnBy
aW50KGhhc1ByaW50ZWQgPyAiLCAiIDogIiIsICJUOiMiLCBub2RlLnRha2VuQmxvY2tJbmRleCgp
KTsKLSAgICAgICAgaGFzUHJpbnRlZCA9IHRydWU7Ci0gICAgfQotICAgIGlmICAobm9kZS5pc0Jy
YW5jaCgpKSB7Ci0gICAgICAgIG91dC5wcmludChoYXNQcmludGVkID8gIiwgIiA6ICIiLCAiRjoj
Iiwgbm9kZS5ub3RUYWtlbkJsb2NrSW5kZXgoKSk7Ci0gICAgICAgIGhhc1ByaW50ZWQgPSB0cnVl
OwogICAgIH0KLSAgICBvdXQucHJpbnQoaGFzUHJpbnRlZCA/ICIsICIgOiAiIiwgImJjIyIsIG5v
ZGUuY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KTsKLSAgICBoYXNQcmludGVkID0gdHJ1ZTsKLSAg
ICAKLSAgICAodm9pZCloYXNQcmludGVkOworICAgIGlmIChvcCA9PSBXZWFrSlNDb25zdGFudCkK
KyAgICAgICAgb3V0LT5wcmludChjb21tYSwgUmF3UG9pbnRlcihub2RlLT53ZWFrQ29uc3RhbnQo
KSkpOworICAgIGlmIChub2RlLT5pc0JyYW5jaCgpIHx8IG5vZGUtPmlzSnVtcCgpKQorICAgICAg
ICBvdXQucHJpbnQoY29tbWEsICJUOiMiLCBub2RlLT50YWtlbkJsb2NrSW5kZXgoKSk7CisgICAg
aWYgKG5vZGUtPmlzQnJhbmNoKCkpCisgICAgICAgIG91dC5wcmludChjb21tYSwgIkY6IyIsIG5v
ZGUtPm5vdFRha2VuQmxvY2tJbmRleCgpKTsKKyAgICBvdXQucHJpbnQoY29tbWEsICJiYyMiLCBu
b2RlLT5jb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgpOwogICAgIAogICAgIG91dC5wcmludCgiKSIp
OwogCiAgICAgaWYgKCFza2lwcGVkKSB7Ci0gICAgICAgIGlmIChub2RlLmhhc1ZhcmlhYmxlQWNj
ZXNzRGF0YSgpKQotICAgICAgICAgICAgb3V0LnByaW50KCIgIHByZWRpY3RpbmcgIiwgU3BlY3Vs
YXRpb25EdW1wKG5vZGUudmFyaWFibGVBY2Nlc3NEYXRhKCktPnByZWRpY3Rpb24oKSksIG5vZGUu
dmFyaWFibGVBY2Nlc3NEYXRhKCktPnNob3VsZFVzZURvdWJsZUZvcm1hdCgpID8gIiwgZm9yY2lu
ZyBkb3VibGUiIDogIiIpOwotICAgICAgICBlbHNlIGlmIChub2RlLmhhc0hlYXBQcmVkaWN0aW9u
KCkpCi0gICAgICAgICAgICBvdXQucHJpbnQoIiAgcHJlZGljdGluZyAiLCBTcGVjdWxhdGlvbkR1
bXAobm9kZS5nZXRIZWFwUHJlZGljdGlvbigpKSk7CisgICAgICAgIGlmIChub2RlLT5oYXNWYXJp
YWJsZUFjY2Vzc0RhdGEoKSkKKyAgICAgICAgICAgIG91dC5wcmludCgiICBwcmVkaWN0aW5nICIs
IFNwZWN1bGF0aW9uRHVtcChub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+cHJlZGljdGlvbigp
KSwgbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCktPnNob3VsZFVzZURvdWJsZUZvcm1hdCgpID8g
IiwgZm9yY2luZyBkb3VibGUiIDogIiIpOworICAgICAgICBlbHNlIGlmIChub2RlLT5oYXNIZWFw
UHJlZGljdGlvbigpKQorICAgICAgICAgICAgb3V0LnByaW50KCIgIHByZWRpY3RpbmcgIiwgU3Bl
Y3VsYXRpb25EdW1wKG5vZGUtPmdldEhlYXBQcmVkaWN0aW9uKCkpKTsKICAgICB9CiAgICAgCiAg
ICAgb3V0LnByaW50KCJcbiIpOwpAQCAtMzA5LDcgKzI1MCw3IEBAIHZvaWQgR3JhcGg6OmR1bXBC
bG9ja0hlYWRlcihQcmludFN0cmVhbSYKIHsKICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fYmxv
Y2tzW2Jsb2NrSW5kZXhdLmdldCgpOwogCi0gICAgb3V0LnByaW50KHByZWZpeCwgIkJsb2NrICMi
LCBibG9ja0luZGV4LCAiICgiLCBhdChibG9jay0+YXQoMCkpLmNvZGVPcmlnaW4sICIpOiAiLCBi
bG9jay0+aXNSZWFjaGFibGUgPyAiIiA6ICIoc2tpcHBlZCkiLCBibG9jay0+aXNPU1JUYXJnZXQg
PyAiIChPU1IgdGFyZ2V0KSIgOiAiIiwgIlxuIik7CisgICAgb3V0LnByaW50KHByZWZpeCwgIkJs
b2NrICMiLCBibG9ja0luZGV4LCAiICgiLCBibG9jay0+YXQoMCktPmNvZGVPcmlnaW4sICIpOiAi
LCBibG9jay0+aXNSZWFjaGFibGUgPyAiIiA6ICIoc2tpcHBlZCkiLCBibG9jay0+aXNPU1JUYXJn
ZXQgPyAiIChPU1IgdGFyZ2V0KSIgOiAiIiwgIlxuIik7CiAgICAgb3V0LnByaW50KHByZWZpeCwg
IiAgUHJlZGVjZXNzb3JzOiIpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYmxvY2stPm1f
cHJlZGVjZXNzb3JzLnNpemUoKTsgKytpKQogICAgICAgICBvdXQucHJpbnQoIiAjIiwgYmxvY2st
Pm1fcHJlZGVjZXNzb3JzW2ldKTsKQEAgLTMzMiwxNyArMjczLDE2IEBAIHZvaWQgR3JhcGg6OmR1
bXBCbG9ja0hlYWRlcihQcmludFN0cmVhbSYKICAgICB9CiAgICAgb3V0LnByaW50KHByZWZpeCwg
IiAgUGhpIE5vZGVzOiIpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYmxvY2stPnBoaXMu
c2l6ZSgpOyArK2kpIHsKLSAgICAgICAgTm9kZUluZGV4IHBoaU5vZGVJbmRleCA9IGJsb2NrLT5w
aGlzW2ldOwotICAgICAgICBOb2RlJiBwaGlOb2RlID0gYXQocGhpTm9kZUluZGV4KTsKLSAgICAg
ICAgaWYgKCFwaGlOb2RlLnNob3VsZEdlbmVyYXRlKCkgJiYgcGhpTm9kZUR1bXBNb2RlID09IER1
bXBMaXZlUGhpc09ubHkpCisgICAgICAgIE5vZGUqIHBoaU5vZGUgPSBibG9jay0+cGhpc1tpXTsK
KyAgICAgICAgaWYgKCFwaGlOb2RlLT5zaG91bGRHZW5lcmF0ZSgpICYmIHBoaU5vZGVEdW1wTW9k
ZSA9PSBEdW1wTGl2ZVBoaXNPbmx5KQogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIG91
dC5wcmludCgiIEAiLCBwaGlOb2RlSW5kZXgsICI8IiwgcGhpTm9kZS5yZWZDb3VudCgpLCAiPi0+
KCIpOwotICAgICAgICBpZiAocGhpTm9kZS5jaGlsZDEoKSkgewotICAgICAgICAgICAgb3V0LnBy
aW50KCJAIiwgcGhpTm9kZS5jaGlsZDEoKS5pbmRleCgpKTsKLSAgICAgICAgICAgIGlmIChwaGlO
b2RlLmNoaWxkMigpKSB7Ci0gICAgICAgICAgICAgICAgb3V0LnByaW50KCIsIEAiLCBwaGlOb2Rl
LmNoaWxkMigpLmluZGV4KCkpOwotICAgICAgICAgICAgICAgIGlmIChwaGlOb2RlLmNoaWxkMygp
KQotICAgICAgICAgICAgICAgICAgICBvdXQucHJpbnQoIiwgQCIsIHBoaU5vZGUuY2hpbGQzKCku
aW5kZXgoKSk7CisgICAgICAgIG91dC5wcmludCgiIEAiLCBwaGlOb2RlLT5pbmRleCgpLCAiPCIs
IHBoaU5vZGUtPnJlZkNvdW50KCksICI+LT4oIik7CisgICAgICAgIGlmIChwaGlOb2RlLT5jaGls
ZDEoKSkgeworICAgICAgICAgICAgb3V0LnByaW50KCJAIiwgcGhpTm9kZS0+Y2hpbGQxKCktPmlu
ZGV4KCkoKSk7CisgICAgICAgICAgICBpZiAocGhpTm9kZS0+Y2hpbGQyKCkpIHsKKyAgICAgICAg
ICAgICAgICBvdXQucHJpbnQoIiwgQCIsIHBoaU5vZGUtPmNoaWxkMigpLT5pbmRleCgpKTsKKyAg
ICAgICAgICAgICAgICBpZiAocGhpTm9kZS0+Y2hpbGQzKCkpCisgICAgICAgICAgICAgICAgICAg
IG91dC5wcmludCgiLCBAIiwgcGhpTm9kZS0+Y2hpbGQzKCktPmluZGV4KCkpOwogICAgICAgICAg
ICAgfQogICAgICAgICB9CiAgICAgICAgIG91dC5wcmludCgiKSIsIGkgKyAxIDwgYmxvY2stPnBo
aXMuc2l6ZSgpID8gIiwiIDogIiIpOwpAQCAtMzUyLDcgKzI5Miw3IEBAIHZvaWQgR3JhcGg6OmR1
bXBCbG9ja0hlYWRlcihQcmludFN0cmVhbSYKIAogdm9pZCBHcmFwaDo6ZHVtcChQcmludFN0cmVh
bSYgb3V0KQogewotICAgIE5vZGVJbmRleCBsYXN0Tm9kZUluZGV4ID0gTm9Ob2RlOworICAgIE5v
ZGUqIGxhc3ROb2RlID0gMDsKICAgICBmb3IgKHNpemVfdCBiID0gMDsgYiA8IG1fYmxvY2tzLnNp
emUoKTsgKytiKSB7CiAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ibG9ja3NbYl0uZ2V0
KCk7CiAgICAgICAgIGlmICghYmxvY2spCkBAIC0zNjgsOSArMzA4LDkgQEAgdm9pZCBHcmFwaDo6
ZHVtcChQcmludFN0cmVhbSYgb3V0KQogICAgICAgICBkdW1wT3BlcmFuZHMoYmxvY2stPnZhcmlh
Ymxlc0F0SGVhZCwgb3V0KTsKICAgICAgICAgb3V0LnByaW50KCJcbiIpOwogICAgICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IGJsb2NrLT5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgZHVt
cENvZGVPcmlnaW4ob3V0LCAiIiwgbGFzdE5vZGVJbmRleCwgYmxvY2stPmF0KGkpKTsKKyAgICAg
ICAgICAgIGR1bXBDb2RlT3JpZ2luKG91dCwgIiIsIGxhc3ROb2RlLCBibG9jay0+YXQoaSkpOwog
ICAgICAgICAgICAgZHVtcChvdXQsICIiLCBibG9jay0+YXQoaSkpOwotICAgICAgICAgICAgbGFz
dE5vZGVJbmRleCA9IGJsb2NrLT5hdChpKTsKKyAgICAgICAgICAgIGxhc3ROb2RlID0gYmxvY2st
PmF0KGkpOwogICAgICAgICB9CiAgICAgICAgIG91dC5wcmludCgiICB2YXJzIGFmdGVyOiAiKTsK
ICAgICAgICAgaWYgKGJsb2NrLT5jZmFIYXNWaXNpdGVkKQpAQCAtMzg2LDQwICszMjYsNDAgQEAg
dm9pZCBHcmFwaDo6ZHVtcChQcmludFN0cmVhbSYgb3V0KQogCiAvLyBGSVhNRTogQ29udmVydCB0
aGlzIHRvIGJlIGl0ZXJhdGl2ZSwgbm90IHJlY3Vyc2l2ZS4KICNkZWZpbmUgRE9fVE9fQ0hJTERS
RU4obm9kZSwgdGhpbmdUb0RvKSBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAg
ICAgICAgTm9kZSYgX25vZGUgPSAobm9kZSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKLSAgICAgICAgaWYgKF9ub2RlLmZsYWdzKCkgJiBOb2RlSGFzVmFyQXJn
cykgeyAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgX2NoaWxkSWR4ID0gX25vZGUuZmlyc3RDaGlsZCgpOyAgICAgICAgICAgICAgIFwKLSAgICAg
ICAgICAgICAgICAgX2NoaWxkSWR4IDwgX25vZGUuZmlyc3RDaGlsZCgpICsgX25vZGUubnVtQ2hp
bGRyZW4oKTsgIFwKKyAgICAgICAgTm9kZSogX25vZGUgPSAobm9kZSk7ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgaWYgKF9ub2RlLT5mbGFncygp
ICYgTm9kZUhhc1ZhckFyZ3MpIHsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgX2NoaWxkSWR4ID0gX25vZGUtPmZpcnN0Q2hpbGQoKTsgICAgICAg
ICAgICAgIFwKKyAgICAgICAgICAgICAgICAgX2NoaWxkSWR4IDwgX25vZGUtPmZpcnN0Q2hpbGQo
KSArIF9ub2RlLT5udW1DaGlsZHJlbigpOyBcCiAgICAgICAgICAgICAgICAgIF9jaGlsZElkeCsr
KSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgICAg
ICAgICAgaWYgKCEhbV92YXJBcmdDaGlsZHJlbltfY2hpbGRJZHhdKSAgICAgICAgICAgICAgICAg
ICAgICBcCiAgICAgICAgICAgICAgICAgICAgIHRoaW5nVG9EbyhtX3ZhckFyZ0NoaWxkcmVuW19j
aGlsZElkeF0pOyAgICAgICAgICAgICBcCiAgICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgIH0gZWxz
ZSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCi0gICAgICAgICAgICBpZiAoIV9ub2RlLmNoaWxkMSgpKSB7ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgQVNTRVJUKCFfbm9kZS5jaGls
ZDIoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAg
ICAgICAgICYmICFfbm9kZS5jaGlsZDMoKSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
CisgICAgICAgICAgICBpZiAoIV9ub2RlLT5jaGlsZDEoKSkgeyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgQVNTRVJUKCFfbm9kZS0+Y2hpbGQy
KCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAg
ICAgICYmICFfbm9kZS0+Y2hpbGQzKCkpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAg
ICAgICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCiAgICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICB0aGluZ1RvRG8o
X25vZGUuY2hpbGQxKCkpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAg
ICAgICAgICB0aGluZ1RvRG8oX25vZGUtPmNoaWxkMSgpKTsgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBpZiAoIV9ub2RlLmNo
aWxkMigpKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAg
ICAgICAgICAgQVNTRVJUKCFfbm9kZS5jaGlsZDMoKSk7ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCisgICAgICAgICAgICBpZiAoIV9ub2RlLT5jaGlsZDIoKSkgeyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgQVNTRVJUKCFfbm9k
ZS0+Y2hpbGQzKCkpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgICAg
ICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCiAgICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICB0aGluZ1RvRG8oX25vZGUuY2hp
bGQyKCkpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICB0
aGluZ1RvRG8oX25vZGUtPmNoaWxkMigpKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBpZiAoIV9ub2RlLmNoaWxkMygpKSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBpZiAo
IV9ub2RlLT5jaGlsZDMoKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
CiAgICAgICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICB0aGluZ1RvRG8oX25vZGUuY2hpbGQzKCkp
OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICB0aGluZ1Rv
RG8oX25vZGUtPmNoaWxkMygpKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAg
ICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCiAgICAgfSB3aGlsZSAoZmFsc2UpCiAKLXZvaWQgR3JhcGg6OnJlZkNo
aWxkcmVuKE5vZGVJbmRleCBvcCkKK3ZvaWQgR3JhcGg6OnJlZkNoaWxkcmVuKE5vZGUqIG9wKQog
ewogICAgIERPX1RPX0NISUxEUkVOKGF0KG9wKSwgcmVmKTsKIH0KIAotdm9pZCBHcmFwaDo6ZGVy
ZWZDaGlsZHJlbihOb2RlSW5kZXggb3ApCit2b2lkIEdyYXBoOjpkZXJlZkNoaWxkcmVuKE5vZGUq
IG9wKQogewogICAgIERPX1RPX0NISUxEUkVOKGF0KG9wKSwgZGVyZWYpOwogfQpAQCAtNDMyLDEy
ICszNzIsMTIgQEAgdm9pZCBHcmFwaDo6cHJlZGljdEFyZ3VtZW50VHlwZXMoKQogICAgICAgICBp
ZiAoIXByb2ZpbGUpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgCi0gICAgICAgIGF0
KG1fYXJndW1lbnRzW2FyZ10pLnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5wcmVkaWN0KHByb2ZpbGUt
PmNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbigpKTsKKyAgICAgICAgbV9hcmd1bWVudHNbYXJnXS0+
dmFyaWFibGVBY2Nlc3NEYXRhKCktPnByZWRpY3QocHJvZmlsZS0+Y29tcHV0ZVVwZGF0ZWRQcmVk
aWN0aW9uKCkpOwogICAgICAgICAKICNpZiBERkdfRU5BQkxFKERFQlVHX1ZFUkJPU0UpCiAgICAg
ICAgIGRhdGFMb2coCiAgICAgICAgICAgICAiQXJndW1lbnQgWyIsIGFyZywgIl0gcHJlZGljdGlv
bjogIiwKLSAgICAgICAgICAgIFNwZWN1bGF0aW9uRHVtcChhdChtX2FyZ3VtZW50c1thcmddKS52
YXJpYWJsZUFjY2Vzc0RhdGEoKS0+cHJlZGljdGlvbigpKSwgIlxuIik7CisgICAgICAgICAgICBT
cGVjdWxhdGlvbkR1bXAobV9hcmd1bWVudHNbYXJnXS0+dmFyaWFibGVBY2Nlc3NEYXRhKCktPnBy
ZWRpY3Rpb24oKSksICJcbiIpOwogI2VuZGlmCiAgICAgfQogfQpAQCAtNDU2LDUxICszOTYsNTQg
QEAgdm9pZCBHcmFwaDo6aGFuZGxlU3VjY2Vzc29yKFZlY3RvcjxCbG9jawogdm9pZCBHcmFwaDo6
Y29sbGVjdEdhcmJhZ2UoKQogewogICAgIC8vIEZpcnN0IHJlc2V0IHRoZSBjb3VudHMgdG8gMCBm
b3IgYWxsIG5vZGVzLgotICAgIGZvciAodW5zaWduZWQgaSA9IHNpemUoKTsgaS0tOykKLSAgICAg
ICAgYXQoaSkuc2V0UmVmQ291bnQoMCk7CisgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXgg
PSAwOyBibG9ja0luZGV4IDwgbV9ibG9ja3Muc2l6ZSgpOyArK2Jsb2NrSW5kZXgpIHsKKyAgICAg
ICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2Jsb2Nrc1tibG9ja0luZGV4XS5nZXQoKTsKKyAgICAg
ICAgaWYgKCFibG9jaykKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBmb3IgKHVuc2ln
bmVkIGluZGV4SW5CbG9jayA9IGJsb2NrLT5zaXplKCk7IGluZGV4SW5CbG9jay0tOykKKyAgICAg
ICAgICAgIGJsb2NrLT5hdChpbmRleEluQmxvY2spLT5zZXRSZWZDb3VudCgwKTsKKyAgICB9CiAg
ICAgCiAgICAgLy8gTm93IGZpbmQgdGhlIHJvb3RzOiB0aGUgbm9kZXMgdGhhdCBhcmUgbXVzdC1n
ZW5lcmF0ZS4gU2V0IHRoZWlyIHJlZiBjb3VudHMgdG8KICAgICAvLyAxIGFuZCBwdXQgdGhlbSBv
biB0aGUgd29ya2xpc3QuCi0gICAgVmVjdG9yPE5vZGVJbmRleCwgMTI4PiB3b3JrbGlzdDsKKyAg
ICBWZWN0b3I8Tm9kZSosIDEyOD4gd29ya2xpc3Q7CiAgICAgZm9yIChCbG9ja0luZGV4IGJsb2Nr
SW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9ibG9ja3Muc2l6ZSgpOyArK2Jsb2NrSW5kZXgpIHsK
ICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2Jsb2Nrc1tibG9ja0luZGV4XS5nZXQoKTsK
ICAgICAgICAgaWYgKCFibG9jaykKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBmb3Ig
KHVuc2lnbmVkIGluZGV4SW5CbG9jayA9IGJsb2NrLT5zaXplKCk7IGluZGV4SW5CbG9jay0tOykg
ewotICAgICAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRleCA9IGJsb2NrLT5hdChpbmRleEluQmxv
Y2spOwotICAgICAgICAgICAgTm9kZSYgbm9kZSA9IGF0KG5vZGVJbmRleCk7Ci0gICAgICAgICAg
ICBpZiAoIShub2RlLmZsYWdzKCkgJiBOb2RlTXVzdEdlbmVyYXRlKSkKKyAgICAgICAgICAgIE5v
ZGUqIG5vZGUgPSBibG9jay0+YXQoaW5kZXhJbkJsb2NrKTsKKyAgICAgICAgICAgIGlmICghKG5v
ZGUtPmZsYWdzKCkgJiBOb2RlTXVzdEdlbmVyYXRlKSkKICAgICAgICAgICAgICAgICBjb250aW51
ZTsKLSAgICAgICAgICAgIG5vZGUuc2V0UmVmQ291bnQoMSk7Ci0gICAgICAgICAgICB3b3JrbGlz
dC5hcHBlbmQobm9kZUluZGV4KTsKKyAgICAgICAgICAgIG5vZGUtPnNldFJlZkNvdW50KDEpOwor
ICAgICAgICAgICAgd29ya2xpc3QuYXBwZW5kKG5vZGUpOwogICAgICAgICB9CiAgICAgfQogICAg
IAogICAgIHdoaWxlICghd29ya2xpc3QuaXNFbXB0eSgpKSB7Ci0gICAgICAgIE5vZGVJbmRleCBu
b2RlSW5kZXggPSB3b3JrbGlzdC5sYXN0KCk7CisgICAgICAgIE5vZGUqIG5vZGUgPSB3b3JrbGlz
dC5sYXN0KCk7CiAgICAgICAgIHdvcmtsaXN0LnJlbW92ZUxhc3QoKTsKLSAgICAgICAgTm9kZSYg
bm9kZSA9IGF0KG5vZGVJbmRleCk7Ci0gICAgICAgIEFTU0VSVChub2RlLnNob3VsZEdlbmVyYXRl
KCkpOyAvLyBJdCBzaG91bGQgbm90IGJlIG9uIHRoZSB3b3JrbGlzdCB1bmxlc3MgaXQncyByZWYn
ZWQuCi0gICAgICAgIGlmIChub2RlLmZsYWdzKCkgJiBOb2RlSGFzVmFyQXJncykgewotICAgICAg
ICAgICAgZm9yICh1bnNpZ25lZCBjaGlsZElkeCA9IG5vZGUuZmlyc3RDaGlsZCgpOwotICAgICAg
ICAgICAgICAgICBjaGlsZElkeCA8IG5vZGUuZmlyc3RDaGlsZCgpICsgbm9kZS5udW1DaGlsZHJl
bigpOworICAgICAgICBBU1NFUlQobm9kZS0+c2hvdWxkR2VuZXJhdGUoKSk7IC8vIEl0IHNob3Vs
ZCBub3QgYmUgb24gdGhlIHdvcmtsaXN0IHVubGVzcyBpdCdzIHJlZidlZC4KKyAgICAgICAgaWYg
KG5vZGUtPmZsYWdzKCkgJiBOb2RlSGFzVmFyQXJncykgeworICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBjaGlsZElkeCA9IG5vZGUtPmZpcnN0Q2hpbGQoKTsKKyAgICAgICAgICAgICAgICAgY2hp
bGRJZHggPCBub2RlLT5maXJzdENoaWxkKCkgKyBub2RlLT5udW1DaGlsZHJlbigpOwogICAgICAg
ICAgICAgICAgICArK2NoaWxkSWR4KSB7CiAgICAgICAgICAgICAgICAgaWYgKCFtX3ZhckFyZ0No
aWxkcmVuW2NoaWxkSWR4XSkKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAg
ICAgICAgICAgTm9kZUluZGV4IGNoaWxkTm9kZUluZGV4ID0gbV92YXJBcmdDaGlsZHJlbltjaGls
ZElkeF0uaW5kZXgoKTsKLSAgICAgICAgICAgICAgICBpZiAoYXQoY2hpbGROb2RlSW5kZXgpLnBv
c3RmaXhSZWYoKSkKKyAgICAgICAgICAgICAgICBOb2RlKiBjaGlsZE5vZGUgPSBtX3ZhckFyZ0No
aWxkcmVuW2NoaWxkSWR4XS5ub2RlKCk7CisgICAgICAgICAgICAgICAgaWYgKGNoaWxkTm9kZS0+
cG9zdGZpeFJlZigpKQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAg
ICAgICB3b3JrbGlzdC5hcHBlbmQoY2hpbGROb2RlSW5kZXgpOworICAgICAgICAgICAgICAgIHdv
cmtsaXN0LmFwcGVuZChjaGlsZE5vZGUpOwogICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2Ug
aWYgKG5vZGUuY2hpbGQxKCkpIHsKLSAgICAgICAgICAgIGlmICghYXQobm9kZS5jaGlsZDEoKSku
cG9zdGZpeFJlZigpKQotICAgICAgICAgICAgICAgIHdvcmtsaXN0LmFwcGVuZChub2RlLmNoaWxk
MSgpLmluZGV4KCkpOwotICAgICAgICAgICAgaWYgKG5vZGUuY2hpbGQyKCkpIHsKLSAgICAgICAg
ICAgICAgICBpZiAoIWF0KG5vZGUuY2hpbGQyKCkpLnBvc3RmaXhSZWYoKSkKLSAgICAgICAgICAg
ICAgICAgICAgd29ya2xpc3QuYXBwZW5kKG5vZGUuY2hpbGQyKCkuaW5kZXgoKSk7Ci0gICAgICAg
ICAgICAgICAgaWYgKG5vZGUuY2hpbGQzKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFh
dChub2RlLmNoaWxkMygpKS5wb3N0Zml4UmVmKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICB3
b3JrbGlzdC5hcHBlbmQobm9kZS5jaGlsZDMoKS5pbmRleCgpKTsKKyAgICAgICAgfSBlbHNlIGlm
IChub2RlLT5jaGlsZDEoKSkgeworICAgICAgICAgICAgaWYgKCFub2RlLT5jaGlsZDEoKS0+cG9z
dGZpeFJlZigpKQorICAgICAgICAgICAgICAgIHdvcmtsaXN0LmFwcGVuZChub2RlLT5jaGlsZDEo
KS5ub2RlKCkpOworICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMigpKSB7CisgICAgICAgICAg
ICAgICAgaWYgKCFub2RlLT5jaGlsZDIoKS0+cG9zdGZpeFJlZigpKQorICAgICAgICAgICAgICAg
ICAgICB3b3JrbGlzdC5hcHBlbmQobm9kZS0+Y2hpbGQyKCkubm9kZSgpKTsKKyAgICAgICAgICAg
ICAgICBpZiAobm9kZS0+Y2hpbGQzKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFub2Rl
LT5jaGlsZDMoKS0+cG9zdGZpeFJlZigpKQorICAgICAgICAgICAgICAgICAgICAgICAgd29ya2xp
c3QuYXBwZW5kKG5vZGUtPmNoaWxkMygpLm5vZGUoKSk7CiAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgfQogICAgICAgICB9CkBAIC01MTksMTQgKzQ2MiwxNCBAQCB2b2lkIEdyYXBoOjpk
ZXRlcm1pbmVSZWFjaGFiaWxpdHkoKQogICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fYmxv
Y2tzW2luZGV4XS5nZXQoKTsKICAgICAgICAgQVNTRVJUKGJsb2NrLT5pc0xpbmtlZCk7CiAgICAg
ICAgIAotICAgICAgICBOb2RlJiBub2RlID0gYXQoYmxvY2stPmxhc3QoKSk7Ci0gICAgICAgIEFT
U0VSVChub2RlLmlzVGVybWluYWwoKSk7CisgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+bGFz
dCgpOworICAgICAgICBBU1NFUlQobm9kZS0+aXNUZXJtaW5hbCgpKTsKICAgICAgICAgCi0gICAg
ICAgIGlmIChub2RlLmlzSnVtcCgpKQotICAgICAgICAgICAgaGFuZGxlU3VjY2Vzc29yKHdvcmts
aXN0LCBpbmRleCwgbm9kZS50YWtlbkJsb2NrSW5kZXgoKSk7Ci0gICAgICAgIGVsc2UgaWYgKG5v
ZGUuaXNCcmFuY2goKSkgewotICAgICAgICAgICAgaGFuZGxlU3VjY2Vzc29yKHdvcmtsaXN0LCBp
bmRleCwgbm9kZS50YWtlbkJsb2NrSW5kZXgoKSk7Ci0gICAgICAgICAgICBoYW5kbGVTdWNjZXNz
b3Iod29ya2xpc3QsIGluZGV4LCBub2RlLm5vdFRha2VuQmxvY2tJbmRleCgpKTsKKyAgICAgICAg
aWYgKG5vZGUtPmlzSnVtcCgpKQorICAgICAgICAgICAgaGFuZGxlU3VjY2Vzc29yKHdvcmtsaXN0
LCBpbmRleCwgbm9kZS0+dGFrZW5CbG9ja0luZGV4KCkpOworICAgICAgICBlbHNlIGlmIChub2Rl
LT5pc0JyYW5jaCgpKSB7CisgICAgICAgICAgICBoYW5kbGVTdWNjZXNzb3Iod29ya2xpc3QsIGlu
ZGV4LCBub2RlLT50YWtlbkJsb2NrSW5kZXgoKSk7CisgICAgICAgICAgICBoYW5kbGVTdWNjZXNz
b3Iod29ya2xpc3QsIGluZGV4LCBub2RlLT5ub3RUYWtlbkJsb2NrSW5kZXgoKSk7CiAgICAgICAg
IH0KICAgICB9CiB9CkBAIC01NDYsOCArNDg5LDEzIEBAIHZvaWQgR3JhcGg6OnJlc2V0UmVhY2hh
YmlsaXR5KCkKIAogdm9pZCBHcmFwaDo6cmVzZXRFeGl0U3RhdGVzKCkKIHsKLSAgICBmb3IgKHVu
c2lnbmVkIGkgPSBzaXplKCk7IGktLTspCi0gICAgICAgIGF0KGkpLnNldENhbkV4aXQodHJ1ZSk7
CisgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9ibG9j
a3Muc2l6ZSgpOyArK2Jsb2NrSW5kZXgpIHsKKyAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBt
X2Jsb2Nrc1tibG9ja0luZGV4XS5nZXQoKTsKKyAgICAgICAgaWYgKCFibG9jaykKKyAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICBmb3IgKHVuc2lnbmVkIGluZGV4SW5CbG9jayA9IGJsb2Nr
LT5zaXplKCk7IGluZGV4SW5CbG9jay0tOykKKyAgICAgICAgICAgIGJsb2NrLT5hdChpbmRleElu
QmxvY2spLT5zZXRDYW5FeGl0KHRydWUpOworICAgIH0KIH0KIAogfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkRGRwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkocmV2aXNpb24g
MTQwNjE2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTIsIDIw
MTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC0zNSw3ICszNSw5IEBACiAjaW5jbHVkZSAiREZHQXNzZW1ibHlIZWxwZXJz
LmgiCiAjaW5jbHVkZSAiREZHQmFzaWNCbG9jay5oIgogI2luY2x1ZGUgIkRGR0RvbWluYXRvcnMu
aCIKKyNpbmNsdWRlICJERkdMb25nTGl2ZWRTdGF0ZS5oIgogI2luY2x1ZGUgIkRGR05vZGUuaCIK
KyNpbmNsdWRlICJERkdOb2RlQWxsb2NhdG9yLmgiCiAjaW5jbHVkZSAiREZHVmFyaWFkaWNGdW5j
dGlvbi5oIgogI2luY2x1ZGUgIkpTU3RhY2suaCIKICNpbmNsdWRlICJNZXRob2RPZkdldHRpbmdB
VmFsdWVQcm9maWxlLmgiCkBAIC04Myw1NCArODUsNDggQEAgZW51bSBBZGRTcGVjdWxhdGlvbk1v
ZGUgewogLy8KIC8vID09PSBHcmFwaCA9PT0KIC8vCi0vLyBUaGUgZGF0YWZsb3cgZ3JhcGggaXMg
YW4gb3JkZXJlZCB2ZWN0b3Igb2Ygbm9kZXMuCiAvLyBUaGUgb3JkZXIgbWF5IGJlIHNpZ25pZmlj
YW50IGZvciBub2RlcyB3aXRoIHNpZGUtZWZmZWN0cyAocHJvcGVydHkgYWNjZXNzZXMsIHZhbHVl
IGNvbnZlcnNpb25zKS4KIC8vIE5vZGVzIHRoYXQgYXJlICdkZWFkJyByZW1haW4gaW4gdGhlIHZl
Y3RvciB3aXRoIHJlZkNvdW50IDAuCi1jbGFzcyBHcmFwaCA6IHB1YmxpYyBWZWN0b3I8Tm9kZSwg
NjQ+IHsKK2NsYXNzIEdyYXBoIHsKIHB1YmxpYzoKICAgICBHcmFwaChKU0dsb2JhbERhdGEmLCBD
b2RlQmxvY2sqLCB1bnNpZ25lZCBvc3JFbnRyeUJ5dGVjb2RlSW5kZXgsIGNvbnN0IE9wZXJhbmRz
PEpTVmFsdWU+JiBtdXN0SGFuZGxlVmFsdWVzKTsKLSAgICAKLSAgICB1c2luZyBWZWN0b3I8Tm9k
ZSwgNjQ+OjpvcGVyYXRvcltdOwotICAgIHVzaW5nIFZlY3RvcjxOb2RlLCA2ND46OmF0OwotICAg
IAotICAgIE5vZGUmIG9wZXJhdG9yW10oRWRnZSBub2RlVXNlKSB7IHJldHVybiBhdChub2RlVXNl
LmluZGV4KCkpOyB9Ci0gICAgY29uc3QgTm9kZSYgb3BlcmF0b3JbXShFZGdlIG5vZGVVc2UpIGNv
bnN0IHsgcmV0dXJuIGF0KG5vZGVVc2UuaW5kZXgoKSk7IH0KLSAgICAKLSAgICBOb2RlJiBhdChF
ZGdlIG5vZGVVc2UpIHsgcmV0dXJuIGF0KG5vZGVVc2UuaW5kZXgoKSk7IH0KLSAgICBjb25zdCBO
b2RlJiBhdChFZGdlIG5vZGVVc2UpIGNvbnN0IHsgcmV0dXJuIGF0KG5vZGVVc2UuaW5kZXgoKSk7
IH0KKyAgICB+R3JhcGgoKTsKICAgICAKICAgICAvLyBNYXJrIGEgbm9kZSBhcyBiZWluZyByZWZl
cmVuY2VkLgotICAgIE5vZGVJbmRleCByZWYoTm9kZUluZGV4IG5vZGVJbmRleCkKKyAgICBOb2Rl
KiByZWYoTm9kZSogbm9kZSkKICAgICB7Ci0gICAgICAgIE5vZGUmIG5vZGUgPSBhdChub2RlSW5k
ZXgpOwogICAgICAgICAvLyBJZiB0aGUgdmFsdWUgKGJlZm9yZSBpbmNyZW1lbnRpbmcpIHdhcyBh
dCByZWZDb3VudCB6ZXJvIHRoZW4gd2UgbmVlZCB0byByZWYgaXRzIGNoaWxkcmVuLgotICAgICAg
ICBpZiAoIW5vZGUucG9zdGZpeFJlZigpKQotICAgICAgICAgICAgcmVmQ2hpbGRyZW4obm9kZUlu
ZGV4KTsKLSAgICAgICAgcmV0dXJuIG5vZGVJbmRleDsKKyAgICAgICAgaWYgKCFub2RlLT5wb3N0
Zml4UmVmKCkpCisgICAgICAgICAgICByZWZDaGlsZHJlbihub2RlKTsKKyAgICAgICAgcmV0dXJu
IG5vZGU7CiAgICAgfQogICAgIEVkZ2UgcmVmKEVkZ2Ugbm9kZVVzZSkKICAgICB7Ci0gICAgICAg
IHJlZihub2RlVXNlLmluZGV4KCkpOworICAgICAgICByZWYobm9kZVVzZS5ub2RlKCkpOwogICAg
ICAgICByZXR1cm4gbm9kZVVzZTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBkZXJlZihOb2RlSW5k
ZXggbm9kZUluZGV4KQorICAgIHZvaWQgZGVyZWYoTm9kZSogbm9kZSkKICAgICB7Ci0gICAgICAg
IGlmIChhdChub2RlSW5kZXgpLnBvc3RmaXhEZXJlZigpID09IDEpCi0gICAgICAgICAgICBkZXJl
ZkNoaWxkcmVuKG5vZGVJbmRleCk7CisjaWYgIUFTU0VSVF9ESVNBQkxFRAorICAgICAgICBpZiAo
IW5vZGUtPnJlZkNvdW50KCkpCisgICAgICAgICAgICBkdW1wKCk7CisjZW5kaWYKKyAgICAgICAg
aWYgKG5vZGUtPnBvc3RmaXhEZXJlZigpID09IDEpCisgICAgICAgICAgICBkZXJlZkNoaWxkcmVu
KG5vZGUpOwogICAgIH0KICAgICB2b2lkIGRlcmVmKEVkZ2Ugbm9kZVVzZSkKICAgICB7Ci0gICAg
ICAgIGRlcmVmKG5vZGVVc2UuaW5kZXgoKSk7CisgICAgICAgIGRlcmVmKG5vZGVVc2Uubm9kZSgp
KTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBjaGFuZ2VJbmRleChFZGdlJiBlZGdlLCBOb2RlSW5k
ZXggbmV3SW5kZXgsIGJvb2wgY2hhbmdlUmVmID0gdHJ1ZSkKKyAgICB2b2lkIGNoYW5nZUNoaWxk
KEVkZ2UmIGVkZ2UsIE5vZGUqIG5ld05vZGUsIGJvb2wgY2hhbmdlUmVmID0gdHJ1ZSkKICAgICB7
CiAgICAgICAgIGlmIChjaGFuZ2VSZWYpIHsKLSAgICAgICAgICAgIHJlZihuZXdJbmRleCk7Ci0g
ICAgICAgICAgICBkZXJlZihlZGdlLmluZGV4KCkpOworICAgICAgICAgICAgcmVmKG5ld05vZGUp
OworICAgICAgICAgICAgZGVyZWYoZWRnZS5ub2RlKCkpOwogICAgICAgICB9Ci0gICAgICAgIGVk
Z2Uuc2V0SW5kZXgobmV3SW5kZXgpOworICAgICAgICBlZGdlLnNldE5vZGUobmV3Tm9kZSk7CiAg
ICAgfQogICAgIAogICAgIHZvaWQgY2hhbmdlRWRnZShFZGdlJiBlZGdlLCBFZGdlIG5ld0VkZ2Us
IGJvb2wgY2hhbmdlUmVmID0gdHJ1ZSkKQEAgLTE0MiwxMSArMTM4LDExIEBAIHB1YmxpYzoKICAg
ICAgICAgZWRnZSA9IG5ld0VkZ2U7CiAgICAgfQogICAgIAotICAgIHZvaWQgY29tcGFyZUFuZFN3
YXAoRWRnZSYgZWRnZSwgTm9kZUluZGV4IG9sZEluZGV4LCBOb2RlSW5kZXggbmV3SW5kZXgsIGJv
b2wgY2hhbmdlUmVmKQorICAgIHZvaWQgY29tcGFyZUFuZFN3YXAoRWRnZSYgZWRnZSwgTm9kZSog
b2xkTm9kZSwgTm9kZSogbmV3Tm9kZSwgYm9vbCBjaGFuZ2VSZWYpCiAgICAgewotICAgICAgICBp
ZiAoZWRnZS5pbmRleCgpICE9IG9sZEluZGV4KQorICAgICAgICBpZiAoZWRnZS5ub2RlKCkgIT0g
b2xkTm9kZSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgY2hhbmdlSW5kZXgoZWRnZSwg
bmV3SW5kZXgsIGNoYW5nZVJlZik7CisgICAgICAgIGNoYW5nZUNoaWxkKGVkZ2UsIG5ld05vZGUs
IGNoYW5nZVJlZik7CiAgICAgfQogICAgIAogICAgIHZvaWQgY29tcGFyZUFuZFN3YXAoRWRnZSYg
ZWRnZSwgRWRnZSBvbGRFZGdlLCBFZGdlIG5ld0VkZ2UsIGJvb2wgY2hhbmdlUmVmKQpAQCAtMTU2
LDQ0ICsxNTIsMjkgQEAgcHVibGljOgogICAgICAgICBjaGFuZ2VFZGdlKGVkZ2UsIG5ld0VkZ2Us
IGNoYW5nZVJlZik7CiAgICAgfQogICAgIAotICAgIHZvaWQgY2xlYXJBbmREZXJlZkNoaWxkMShO
b2RlJiBub2RlKQorICAgIHZvaWQgY2xlYXJBbmREZXJlZkNoaWxkKE5vZGUqIG5vZGUsIHVuc2ln
bmVkIGluZGV4KQogICAgIHsKLSAgICAgICAgaWYgKCFub2RlLmNoaWxkMSgpKQorICAgICAgICBp
ZiAoIW5vZGUtPmNoaWxkcmVuLmNoaWxkKGluZGV4KSkKICAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgZGVyZWYobm9kZS5jaGlsZDEoKSk7Ci0gICAgICAgIG5vZGUuY2hpbGRyZW4uY2hpbGQx
KCkgPSBFZGdlKCk7Ci0gICAgfQotCi0gICAgdm9pZCBjbGVhckFuZERlcmVmQ2hpbGQyKE5vZGUm
IG5vZGUpCi0gICAgewotICAgICAgICBpZiAoIW5vZGUuY2hpbGQyKCkpCi0gICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgIGRlcmVmKG5vZGUuY2hpbGQyKCkpOwotICAgICAgICBub2RlLmNoaWxk
cmVuLmNoaWxkMigpID0gRWRnZSgpOwotICAgIH0KLQotICAgIHZvaWQgY2xlYXJBbmREZXJlZkNo
aWxkMyhOb2RlJiBub2RlKQotICAgIHsKLSAgICAgICAgaWYgKCFub2RlLmNoaWxkMygpKQotICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICBkZXJlZihub2RlLmNoaWxkMygpKTsKLSAgICAgICAg
bm9kZS5jaGlsZHJlbi5jaGlsZDMoKSA9IEVkZ2UoKTsKKyAgICAgICAgZGVyZWYobm9kZS0+Y2hp
bGRyZW4uY2hpbGQoaW5kZXgpKTsKKyAgICAgICAgbm9kZS5jaGlsZHJlbi5zZXRDaGlsZChpbmRl
eCwgRWRnZSgpKTsKICAgICB9CisgICAgdm9pZCBjbGVhckFuZERlcmVmQ2hpbGQxKE5vZGUqIG5v
ZGUpIHsgY2xlYXJBbmREZXJlZkNoaWxkKG5vZGUsIDApOyB9CisgICAgdm9pZCBjbGVhckFuZERl
cmVmQ2hpbGQyKE5vZGUqIG5vZGUpIHsgY2xlYXJBbmREZXJlZkNoaWxkKG5vZGUsIDEpOyB9Cisg
ICAgdm9pZCBjbGVhckFuZERlcmVmQ2hpbGQzKE5vZGUqIG5vZGUpIHsgY2xlYXJBbmREZXJlZkNo
aWxkKG5vZGUsIDIpOyB9CiAgICAgCiAjZGVmaW5lIERGR19ERUZJTkVfQUREX05PREUodGVtcGxh
dGVQcmUsIHRlbXBsYXRlUG9zdCwgdHlwZVBhcmFtcywgdmFsdWVQYXJhbXNDb21tYSwgdmFsdWVQ
YXJhbXMsIHZhbHVlQXJncykgXAotICAgIHRlbXBsYXRlUHJlIHR5cGVQYXJhbXMgdGVtcGxhdGVQ
b3N0IE5vZGVJbmRleCBhZGROb2RlKFJlZkNoaWxkcmVuTW9kZSByZWZDaGlsZHJlbk1vZGUsIFJl
Zk5vZGVNb2RlIHJlZk5vZGVNb2RlLCBTcGVjdWxhdGVkVHlwZSB0eXBlIHZhbHVlUGFyYW1zQ29t
bWEgdmFsdWVQYXJhbXMpIFwKKyAgICB0ZW1wbGF0ZVByZSB0eXBlUGFyYW1zIHRlbXBsYXRlUG9z
dCBOb2RlKiBhZGROb2RlKFJlZkNoaWxkcmVuTW9kZSByZWZDaGlsZHJlbk1vZGUsIFJlZk5vZGVN
b2RlIHJlZk5vZGVNb2RlLCBTcGVjdWxhdGVkVHlwZSB0eXBlIHZhbHVlUGFyYW1zQ29tbWEgdmFs
dWVQYXJhbXMpIFwKICAgICB7IFwKLSAgICAgICAgTm9kZSBub2RlID0gTm9kZSh2YWx1ZUFyZ3Mp
OyBcCi0gICAgICAgIG5vZGUucHJlZGljdCh0eXBlKTsgXAotICAgICAgICBpZiAobm9kZS5mbGFn
cygpICYgTm9kZU11c3RHZW5lcmF0ZSkgXAotICAgICAgICAgICAgbm9kZS5yZWYoKTsgXAorICAg
ICAgICBOb2RlKiBub2RlID0gbmV3IChtX2FsbG9jYXRvcikgTm9kZSh2YWx1ZUFyZ3MpOyBcCisg
ICAgICAgIG5vZGUtPnByZWRpY3QodHlwZSk7IFwKKyAgICAgICAgaWYgKG5vZGUtPmZsYWdzKCkg
JiBOb2RlTXVzdEdlbmVyYXRlKSBcCisgICAgICAgICAgICBub2RlLT5yZWYoKTsgXAogICAgICAg
ICBpZiAocmVmTm9kZU1vZGUgPT0gUmVmTm9kZSkgXAotICAgICAgICAgICAgbm9kZS5yZWYoKTsg
XAotICAgICAgICBOb2RlSW5kZXggcmVzdWx0ID0gc2l6ZSgpOyBcCi0gICAgICAgIGFwcGVuZChu
b2RlKTsgXAorICAgICAgICAgICAgbm9kZS0+cmVmKCk7IFwKICAgICAgICAgaWYgKHJlZkNoaWxk
cmVuTW9kZSA9PSBSZWZDaGlsZHJlbikgXAotICAgICAgICAgICAgcmVmQ2hpbGRyZW4ocmVzdWx0
KTsgXAotICAgICAgICByZXR1cm4gcmVzdWx0OyBcCisgICAgICAgICAgICByZWZDaGlsZHJlbihu
b2RlKTsgXAorICAgICAgICByZXR1cm4gbm9kZTsgXAogICAgIH0KICAgICBERkdfVkFSSUFESUNf
VEVNUExBVEVfRlVOQ1RJT04oREZHX0RFRklORV9BRERfTk9ERSkKICN1bmRlZiBERkdfREVGSU5F
X0FERF9OT0RFCkBAIC0yMDQsMTQgKzE4NSwxNCBAQCBwdWJsaWM6CiAgICAgLy8gcmVmZXJlbmNl
IGNvdW50cyBhY2NvcmRpbmcgdG8gcmVhY2hhYmlsaXR5LgogICAgIHZvaWQgY29sbGVjdEdhcmJh
Z2UoKTsKICAgICAKLSAgICB2b2lkIGNvbnZlcnRUb0NvbnN0YW50KE5vZGVJbmRleCBub2RlSW5k
ZXgsIHVuc2lnbmVkIGNvbnN0YW50TnVtYmVyKQorICAgIHZvaWQgY29udmVydFRvQ29uc3RhbnQo
Tm9kZSogbm9kZSwgdW5zaWduZWQgY29uc3RhbnROdW1iZXIpCiAgICAgewotICAgICAgICBhdChu
b2RlSW5kZXgpLmNvbnZlcnRUb0NvbnN0YW50KGNvbnN0YW50TnVtYmVyKTsKKyAgICAgICAgbm9k
ZS0+Y29udmVydFRvQ29uc3RhbnQoY29uc3RhbnROdW1iZXIpOwogICAgIH0KICAgICAKLSAgICB2
b2lkIGNvbnZlcnRUb0NvbnN0YW50KE5vZGVJbmRleCBub2RlSW5kZXgsIEpTVmFsdWUgdmFsdWUp
CisgICAgdm9pZCBjb252ZXJ0VG9Db25zdGFudChOb2RlKiBub2RlLCBKU1ZhbHVlIHZhbHVlKQog
ICAgIHsKLSAgICAgICAgY29udmVydFRvQ29uc3RhbnQobm9kZUluZGV4LCBtX2NvZGVCbG9jay0+
YWRkT3JGaW5kQ29uc3RhbnQodmFsdWUpKTsKKyAgICAgICAgY29udmVydFRvQ29uc3RhbnQobm9k
ZSwgbV9jb2RlQmxvY2stPmFkZE9yRmluZENvbnN0YW50KHZhbHVlKSk7CiAgICAgfQogCiAgICAg
Ly8gQ29kZUJsb2NrIGlzIG9wdGlvbmFsLCBidXQgbWF5IGFsbG93IGFkZGl0aW9uYWwgaW5mb3Jt
YXRpb24gdG8gYmUgZHVtcGVkIChlLmcuIElkZW50aWZpZXIgbmFtZXMpLgpAQCAtMjE5LDEyNSAr
MjAwLDEyNSBAQCBwdWJsaWM6CiAgICAgZW51bSBQaGlOb2RlRHVtcE1vZGUgeyBEdW1wTGl2ZVBo
aXNPbmx5LCBEdW1wQWxsUGhpcyB9OwogICAgIHZvaWQgZHVtcEJsb2NrSGVhZGVyKFByaW50U3Ry
ZWFtJiwgY29uc3QgY2hhciogcHJlZml4LCBCbG9ja0luZGV4LCBQaGlOb2RlRHVtcE1vZGUpOwog
ICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYsIEVkZ2UpOwotICAgIHZvaWQgZHVtcChQcmludFN0
cmVhbSYsIGNvbnN0IGNoYXIqIHByZWZpeCwgTm9kZUluZGV4KTsKLSAgICBzdGF0aWMgaW50IGFt
b3VudE9mTm9kZVdoaXRlU3BhY2UoTm9kZSYpOwotICAgIHN0YXRpYyB2b2lkIHByaW50Tm9kZVdo
aXRlU3BhY2UoUHJpbnRTdHJlYW0mLCBOb2RlJik7CisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFt
JiwgY29uc3QgY2hhciogcHJlZml4LCBOb2RlKik7CisgICAgc3RhdGljIGludCBhbW91bnRPZk5v
ZGVXaGl0ZVNwYWNlKE5vZGUqKTsKKyAgICBzdGF0aWMgdm9pZCBwcmludE5vZGVXaGl0ZVNwYWNl
KFByaW50U3RyZWFtJiwgTm9kZSopOwogCiAgICAgLy8gRHVtcCB0aGUgY29kZSBvcmlnaW4gb2Yg
dGhlIGdpdmVuIG5vZGUgYXMgYSBkaWZmIGZyb20gdGhlIGNvZGUgb3JpZ2luIG9mIHRoZQogICAg
IC8vIHByZWNlZGluZyBub2RlLiBSZXR1cm5zIHRydWUgaWYgYW55dGhpbmcgd2FzIHByaW50ZWQu
Ci0gICAgYm9vbCBkdW1wQ29kZU9yaWdpbihQcmludFN0cmVhbSYsIGNvbnN0IGNoYXIqIHByZWZp
eCwgTm9kZUluZGV4LCBOb2RlSW5kZXgpOworICAgIGJvb2wgZHVtcENvZGVPcmlnaW4oUHJpbnRT
dHJlYW0mLCBjb25zdCBjaGFyKiBwcmVmaXgsIE5vZGUqIHByZXZpb3VzTm9kZSwgTm9kZSogY3Vy
cmVudE5vZGUpOwogCiAgICAgQmxvY2tJbmRleCBibG9ja0luZGV4Rm9yQnl0ZWNvZGVPZmZzZXQo
VmVjdG9yPEJsb2NrSW5kZXg+JiBibG9ja3MsIHVuc2lnbmVkIGJ5dGVjb2RlQmVnaW4pOwogCi0g
ICAgU3BlY3VsYXRlZFR5cGUgZ2V0SlNDb25zdGFudFNwZWN1bGF0aW9uKE5vZGUmIG5vZGUpCisg
ICAgU3BlY3VsYXRlZFR5cGUgZ2V0SlNDb25zdGFudFNwZWN1bGF0aW9uKE5vZGUqIG5vZGUpCiAg
ICAgewotICAgICAgICByZXR1cm4gc3BlY3VsYXRpb25Gcm9tVmFsdWUobm9kZS52YWx1ZU9mSlND
b25zdGFudChtX2NvZGVCbG9jaykpOworICAgICAgICByZXR1cm4gc3BlY3VsYXRpb25Gcm9tVmFs
dWUobm9kZS0+dmFsdWVPZkpTQ29uc3RhbnQobV9jb2RlQmxvY2spKTsKICAgICB9CiAgICAgCi0g
ICAgQWRkU3BlY3VsYXRpb25Nb2RlIGFkZFNwZWN1bGF0aW9uTW9kZShOb2RlJiBhZGQsIGJvb2wg
bGVmdFNob3VsZFNwZWN1bGF0ZUludGVnZXIsIGJvb2wgcmlnaHRTaG91bGRTcGVjdWxhdGVJbnRl
Z2VyKQorICAgIEFkZFNwZWN1bGF0aW9uTW9kZSBhZGRTcGVjdWxhdGlvbk1vZGUoTm9kZSogYWRk
LCBib29sIGxlZnRTaG91bGRTcGVjdWxhdGVJbnRlZ2VyLCBib29sIHJpZ2h0U2hvdWxkU3BlY3Vs
YXRlSW50ZWdlcikKICAgICB7Ci0gICAgICAgIEFTU0VSVChhZGQub3AoKSA9PSBWYWx1ZUFkZCB8
fCBhZGQub3AoKSA9PSBBcml0aEFkZCB8fCBhZGQub3AoKSA9PSBBcml0aFN1Yik7CisgICAgICAg
IEFTU0VSVChhZGQtPm9wKCkgPT0gVmFsdWVBZGQgfHwgYWRkLT5vcCgpID09IEFyaXRoQWRkIHx8
IGFkZC0+b3AoKSA9PSBBcml0aFN1Yik7CiAgICAgICAgIAotICAgICAgICBOb2RlJiBsZWZ0ID0g
YXQoYWRkLmNoaWxkMSgpKTsKLSAgICAgICAgTm9kZSYgcmlnaHQgPSBhdChhZGQuY2hpbGQyKCkp
OworICAgICAgICBOb2RlKiBsZWZ0ID0gYWRkLT5jaGlsZDEoKS5ub2RlKCk7CisgICAgICAgIE5v
ZGUqIHJpZ2h0ID0gYWRkLT5jaGlsZDIoKS5ub2RlKCk7CiAgICAgICAgIAotICAgICAgICBpZiAo
bGVmdC5oYXNDb25zdGFudCgpKQorICAgICAgICBpZiAobGVmdC0+aGFzQ29uc3RhbnQoKSkKICAg
ICAgICAgICAgIHJldHVybiBhZGRJbW1lZGlhdGVTaG91bGRTcGVjdWxhdGVJbnRlZ2VyKGFkZCwg
cmlnaHRTaG91bGRTcGVjdWxhdGVJbnRlZ2VyLCBsZWZ0KTsKLSAgICAgICAgaWYgKHJpZ2h0Lmhh
c0NvbnN0YW50KCkpCisgICAgICAgIGlmIChyaWdodC0+aGFzQ29uc3RhbnQoKSkKICAgICAgICAg
ICAgIHJldHVybiBhZGRJbW1lZGlhdGVTaG91bGRTcGVjdWxhdGVJbnRlZ2VyKGFkZCwgbGVmdFNo
b3VsZFNwZWN1bGF0ZUludGVnZXIsIHJpZ2h0KTsKICAgICAgICAgCi0gICAgICAgIHJldHVybiAo
bGVmdFNob3VsZFNwZWN1bGF0ZUludGVnZXIgJiYgcmlnaHRTaG91bGRTcGVjdWxhdGVJbnRlZ2Vy
ICYmIGFkZC5jYW5TcGVjdWxhdGVJbnRlZ2VyKCkpID8gU3BlY3VsYXRlSW50ZWdlciA6IERvbnRT
cGVjdWxhdGVJbnRlZ2VyOworICAgICAgICByZXR1cm4gKGxlZnRTaG91bGRTcGVjdWxhdGVJbnRl
Z2VyICYmIHJpZ2h0U2hvdWxkU3BlY3VsYXRlSW50ZWdlciAmJiBhZGQtPmNhblNwZWN1bGF0ZUlu
dGVnZXIoKSkgPyBTcGVjdWxhdGVJbnRlZ2VyIDogRG9udFNwZWN1bGF0ZUludGVnZXI7CiAgICAg
fQogICAgIAotICAgIEFkZFNwZWN1bGF0aW9uTW9kZSB2YWx1ZUFkZFNwZWN1bGF0aW9uTW9kZShO
b2RlJiBhZGQpCisgICAgQWRkU3BlY3VsYXRpb25Nb2RlIHZhbHVlQWRkU3BlY3VsYXRpb25Nb2Rl
KE5vZGUqIGFkZCkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZGRTcGVjdWxhdGlvbk1vZGUoYWRk
LCBhdChhZGQuY2hpbGQxKCkpLnNob3VsZFNwZWN1bGF0ZUludGVnZXJFeHBlY3RpbmdEZWZpbmVk
KCksIGF0KGFkZC5jaGlsZDIoKSkuc2hvdWxkU3BlY3VsYXRlSW50ZWdlckV4cGVjdGluZ0RlZmlu
ZWQoKSk7CisgICAgICAgIHJldHVybiBhZGRTcGVjdWxhdGlvbk1vZGUoYWRkLCBhZGQtPmNoaWxk
MSgpLT5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyRXhwZWN0aW5nRGVmaW5lZCgpLCBhZGQtPmNoaWxk
MigpLT5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyRXhwZWN0aW5nRGVmaW5lZCgpKTsKICAgICB9CiAg
ICAgCi0gICAgQWRkU3BlY3VsYXRpb25Nb2RlIGFyaXRoQWRkU3BlY3VsYXRpb25Nb2RlKE5vZGUm
IGFkZCkKKyAgICBBZGRTcGVjdWxhdGlvbk1vZGUgYXJpdGhBZGRTcGVjdWxhdGlvbk1vZGUoTm9k
ZSogYWRkKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkZFNwZWN1bGF0aW9uTW9kZShhZGQsIGF0
KGFkZC5jaGlsZDEoKSkuc2hvdWxkU3BlY3VsYXRlSW50ZWdlckZvckFyaXRobWV0aWMoKSwgYXQo
YWRkLmNoaWxkMigpKS5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyRm9yQXJpdGhtZXRpYygpKTsKKyAg
ICAgICAgcmV0dXJuIGFkZFNwZWN1bGF0aW9uTW9kZShhZGQsIGFkZC0+Y2hpbGQxKCktPnNob3Vs
ZFNwZWN1bGF0ZUludGVnZXJGb3JBcml0aG1ldGljKCksIGFkZC0+Y2hpbGQyKCktPnNob3VsZFNw
ZWN1bGF0ZUludGVnZXJGb3JBcml0aG1ldGljKCkpOwogICAgIH0KICAgICAKLSAgICBBZGRTcGVj
dWxhdGlvbk1vZGUgYWRkU3BlY3VsYXRpb25Nb2RlKE5vZGUmIGFkZCkKKyAgICBBZGRTcGVjdWxh
dGlvbk1vZGUgYWRkU3BlY3VsYXRpb25Nb2RlKE5vZGUqIGFkZCkKICAgICB7Ci0gICAgICAgIGlm
IChhZGQub3AoKSA9PSBWYWx1ZUFkZCkKKyAgICAgICAgaWYgKGFkZC0+b3AoKSA9PSBWYWx1ZUFk
ZCkKICAgICAgICAgICAgIHJldHVybiB2YWx1ZUFkZFNwZWN1bGF0aW9uTW9kZShhZGQpOwogICAg
ICAgICAKICAgICAgICAgcmV0dXJuIGFyaXRoQWRkU3BlY3VsYXRpb25Nb2RlKGFkZCk7CiAgICAg
fQogICAgIAotICAgIGJvb2wgYWRkU2hvdWxkU3BlY3VsYXRlSW50ZWdlcihOb2RlJiBhZGQpCisg
ICAgYm9vbCBhZGRTaG91bGRTcGVjdWxhdGVJbnRlZ2VyKE5vZGUqIGFkZCkKICAgICB7CiAgICAg
ICAgIHJldHVybiBhZGRTcGVjdWxhdGlvbk1vZGUoYWRkKSAhPSBEb250U3BlY3VsYXRlSW50ZWdl
cjsKICAgICB9CiAgICAgCi0gICAgYm9vbCBtdWxTaG91bGRTcGVjdWxhdGVJbnRlZ2VyKE5vZGUm
IG11bCkKKyAgICBib29sIG11bFNob3VsZFNwZWN1bGF0ZUludGVnZXIoTm9kZSogbXVsKQogICAg
IHsKLSAgICAgICAgQVNTRVJUKG11bC5vcCgpID09IEFyaXRoTXVsKTsKKyAgICAgICAgQVNTRVJU
KG11bC0+b3AoKSA9PSBBcml0aE11bCk7CiAgICAgICAgIAotICAgICAgICBOb2RlJiBsZWZ0ID0g
YXQobXVsLmNoaWxkMSgpKTsKLSAgICAgICAgTm9kZSYgcmlnaHQgPSBhdChtdWwuY2hpbGQyKCkp
OworICAgICAgICBOb2RlKiBsZWZ0ID0gbXVsLT5jaGlsZDEoKS5ub2RlKCk7CisgICAgICAgIE5v
ZGUqIHJpZ2h0ID0gbXVsLT5jaGlsZDIoKS5ub2RlKCk7CiAgICAgICAgIAogICAgICAgICByZXR1
cm4gTm9kZTo6c2hvdWxkU3BlY3VsYXRlSW50ZWdlckZvckFyaXRobWV0aWMobGVmdCwgcmlnaHQp
ICYmIG11bC5jYW5TcGVjdWxhdGVJbnRlZ2VyKCk7CiAgICAgfQogICAgIAotICAgIGJvb2wgbmVn
YXRlU2hvdWxkU3BlY3VsYXRlSW50ZWdlcihOb2RlJiBuZWdhdGUpCisgICAgYm9vbCBuZWdhdGVT
aG91bGRTcGVjdWxhdGVJbnRlZ2VyKE5vZGUqIG5lZ2F0ZSkKICAgICB7Ci0gICAgICAgIEFTU0VS
VChuZWdhdGUub3AoKSA9PSBBcml0aE5lZ2F0ZSk7Ci0gICAgICAgIHJldHVybiBhdChuZWdhdGUu
Y2hpbGQxKCkpLnNob3VsZFNwZWN1bGF0ZUludGVnZXJGb3JBcml0aG1ldGljKCkgJiYgbmVnYXRl
LmNhblNwZWN1bGF0ZUludGVnZXIoKTsKKyAgICAgICAgQVNTRVJUKG5lZ2F0ZS0+b3AoKSA9PSBB
cml0aE5lZ2F0ZSk7CisgICAgICAgIHJldHVybiBuZWdhdGUtPmNoaWxkMSgpLT5zaG91bGRTcGVj
dWxhdGVJbnRlZ2VyRm9yQXJpdGhtZXRpYygpICYmIG5lZ2F0ZS0+Y2FuU3BlY3VsYXRlSW50ZWdl
cigpOwogICAgIH0KICAgICAKLSAgICBib29sIGFkZFNob3VsZFNwZWN1bGF0ZUludGVnZXIoTm9k
ZUluZGV4IG5vZGVJbmRleCkKKyAgICBib29sIGFkZFNob3VsZFNwZWN1bGF0ZUludGVnZXIoTm9k
ZSogbm9kZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZGRTaG91bGRTcGVjdWxhdGVJbnRlZ2Vy
KGF0KG5vZGVJbmRleCkpOworICAgICAgICByZXR1cm4gYWRkU2hvdWxkU3BlY3VsYXRlSW50ZWdl
cihub2RlKTsKICAgICB9CiAgICAgCiAgICAgLy8gSGVscGVyIG1ldGhvZHMgdG8gY2hlY2sgbm9k
ZXMgZm9yIGNvbnN0YW50cy4KLSAgICBib29sIGlzQ29uc3RhbnQoTm9kZUluZGV4IG5vZGVJbmRl
eCkKKyAgICBib29sIGlzQ29uc3RhbnQoTm9kZSogbm9kZSkKICAgICB7Ci0gICAgICAgIHJldHVy
biBhdChub2RlSW5kZXgpLmhhc0NvbnN0YW50KCk7CisgICAgICAgIHJldHVybiBub2RlLT5oYXND
b25zdGFudCgpOwogICAgIH0KLSAgICBib29sIGlzSlNDb25zdGFudChOb2RlSW5kZXggbm9kZUlu
ZGV4KQorICAgIGJvb2wgaXNKU0NvbnN0YW50KE5vZGUqIG5vZGUpCiAgICAgewotICAgICAgICBy
ZXR1cm4gYXQobm9kZUluZGV4KS5oYXNDb25zdGFudCgpOworICAgICAgICByZXR1cm4gbm9kZS0+
aGFzQ29uc3RhbnQoKTsKICAgICB9Ci0gICAgYm9vbCBpc0ludDMyQ29uc3RhbnQoTm9kZUluZGV4
IG5vZGVJbmRleCkKKyAgICBib29sIGlzSW50MzJDb25zdGFudChOb2RlKiBub2RlKQogICAgIHsK
LSAgICAgICAgcmV0dXJuIGF0KG5vZGVJbmRleCkuaXNJbnQzMkNvbnN0YW50KG1fY29kZUJsb2Nr
KTsKKyAgICAgICAgcmV0dXJuIG5vZGUtPmlzSW50MzJDb25zdGFudChtX2NvZGVCbG9jayk7CiAg
ICAgfQotICAgIGJvb2wgaXNEb3VibGVDb25zdGFudChOb2RlSW5kZXggbm9kZUluZGV4KQorICAg
IGJvb2wgaXNEb3VibGVDb25zdGFudChOb2RlKiBub2RlKQogICAgIHsKLSAgICAgICAgcmV0dXJu
IGF0KG5vZGVJbmRleCkuaXNEb3VibGVDb25zdGFudChtX2NvZGVCbG9jayk7CisgICAgICAgIHJl
dHVybiBub2RlLT5pc0RvdWJsZUNvbnN0YW50KG1fY29kZUJsb2NrKTsKICAgICB9Ci0gICAgYm9v
bCBpc051bWJlckNvbnN0YW50KE5vZGVJbmRleCBub2RlSW5kZXgpCisgICAgYm9vbCBpc051bWJl
ckNvbnN0YW50KE5vZGUqIG5vZGUpCiAgICAgewotICAgICAgICByZXR1cm4gYXQobm9kZUluZGV4
KS5pc051bWJlckNvbnN0YW50KG1fY29kZUJsb2NrKTsKKyAgICAgICAgcmV0dXJuIG5vZGUtPmlz
TnVtYmVyQ29uc3RhbnQobV9jb2RlQmxvY2spOwogICAgIH0KLSAgICBib29sIGlzQm9vbGVhbkNv
bnN0YW50KE5vZGVJbmRleCBub2RlSW5kZXgpCisgICAgYm9vbCBpc0Jvb2xlYW5Db25zdGFudChO
b2RlKiBub2RlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGF0KG5vZGVJbmRleCkuaXNCb29sZWFu
Q29uc3RhbnQobV9jb2RlQmxvY2spOworICAgICAgICByZXR1cm4gbm9kZS0+aXNCb29sZWFuQ29u
c3RhbnQobV9jb2RlQmxvY2spOwogICAgIH0KLSAgICBib29sIGlzQ2VsbENvbnN0YW50KE5vZGVJ
bmRleCBub2RlSW5kZXgpCisgICAgYm9vbCBpc0NlbGxDb25zdGFudChOb2RlKiBub2RlKQogICAg
IHsKLSAgICAgICAgaWYgKCFpc0pTQ29uc3RhbnQobm9kZUluZGV4KSkKKyAgICAgICAgaWYgKCFp
c0pTQ29uc3RhbnQobm9kZSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIEpT
VmFsdWUgdmFsdWUgPSB2YWx1ZU9mSlNDb25zdGFudChub2RlSW5kZXgpOworICAgICAgICBKU1Zh
bHVlIHZhbHVlID0gdmFsdWVPZkpTQ29uc3RhbnQobm9kZSk7CiAgICAgICAgIHJldHVybiB2YWx1
ZS5pc0NlbGwoKSAmJiAhIXZhbHVlOwogICAgIH0KLSAgICBib29sIGlzRnVuY3Rpb25Db25zdGFu
dChOb2RlSW5kZXggbm9kZUluZGV4KQorICAgIGJvb2wgaXNGdW5jdGlvbkNvbnN0YW50KE5vZGUq
IG5vZGUpCiAgICAgewotICAgICAgICBpZiAoIWlzSlNDb25zdGFudChub2RlSW5kZXgpKQorICAg
ICAgICBpZiAoIWlzSlNDb25zdGFudChub2RlKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgICAgaWYgKCFnZXRKU0Z1bmN0aW9uKHZhbHVlT2ZKU0NvbnN0YW50KG5vZGVJbmRleCkp
KQorICAgICAgICBpZiAoIWdldEpTRnVuY3Rpb24odmFsdWVPZkpTQ29uc3RhbnQobm9kZSkpKQog
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9Ci0g
ICAgYm9vbCBpc0ludGVybmFsRnVuY3Rpb25Db25zdGFudChOb2RlSW5kZXggbm9kZUluZGV4KQor
ICAgIGJvb2wgaXNJbnRlcm5hbEZ1bmN0aW9uQ29uc3RhbnQoTm9kZSogbm9kZSkKICAgICB7Ci0g
ICAgICAgIGlmICghaXNKU0NvbnN0YW50KG5vZGVJbmRleCkpCisgICAgICAgIGlmICghaXNKU0Nv
bnN0YW50KG5vZGUpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBKU1ZhbHVl
IHZhbHVlID0gdmFsdWVPZkpTQ29uc3RhbnQobm9kZUluZGV4KTsKKyAgICAgICAgSlNWYWx1ZSB2
YWx1ZSA9IHZhbHVlT2ZKU0NvbnN0YW50KG5vZGUpOwogICAgICAgICBpZiAoIXZhbHVlLmlzQ2Vs
bCgpIHx8ICF2YWx1ZSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgSlNDZWxs
KiBjZWxsID0gdmFsdWUuYXNDZWxsKCk7CkBAIC0zNDYsMjUgKzMyNywyNSBAQCBwdWJsaWM6CiAg
ICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICAvLyBIZWxwZXIgbWV0aG9kcyBnZXQgY29u
c3RhbnQgdmFsdWVzIGZyb20gbm9kZXMuCi0gICAgSlNWYWx1ZSB2YWx1ZU9mSlNDb25zdGFudChO
b2RlSW5kZXggbm9kZUluZGV4KQorICAgIEpTVmFsdWUgdmFsdWVPZkpTQ29uc3RhbnQoTm9kZSog
bm9kZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBhdChub2RlSW5kZXgpLnZhbHVlT2ZKU0NvbnN0
YW50KG1fY29kZUJsb2NrKTsKKyAgICAgICAgcmV0dXJuIG5vZGUtPnZhbHVlT2ZKU0NvbnN0YW50
KG1fY29kZUJsb2NrKTsKICAgICB9Ci0gICAgaW50MzJfdCB2YWx1ZU9mSW50MzJDb25zdGFudChO
b2RlSW5kZXggbm9kZUluZGV4KQorICAgIGludDMyX3QgdmFsdWVPZkludDMyQ29uc3RhbnQoTm9k
ZSogbm9kZSkKICAgICB7Ci0gICAgICAgIHJldHVybiB2YWx1ZU9mSlNDb25zdGFudChub2RlSW5k
ZXgpLmFzSW50MzIoKTsKKyAgICAgICAgcmV0dXJuIHZhbHVlT2ZKU0NvbnN0YW50KG5vZGUpLmFz
SW50MzIoKTsKICAgICB9Ci0gICAgZG91YmxlIHZhbHVlT2ZOdW1iZXJDb25zdGFudChOb2RlSW5k
ZXggbm9kZUluZGV4KQorICAgIGRvdWJsZSB2YWx1ZU9mTnVtYmVyQ29uc3RhbnQoTm9kZSogbm9k
ZSkKICAgICB7Ci0gICAgICAgIHJldHVybiB2YWx1ZU9mSlNDb25zdGFudChub2RlSW5kZXgpLmFz
TnVtYmVyKCk7CisgICAgICAgIHJldHVybiB2YWx1ZU9mSlNDb25zdGFudChub2RlKS5hc051bWJl
cigpOwogICAgIH0KLSAgICBib29sIHZhbHVlT2ZCb29sZWFuQ29uc3RhbnQoTm9kZUluZGV4IG5v
ZGVJbmRleCkKKyAgICBib29sIHZhbHVlT2ZCb29sZWFuQ29uc3RhbnQoTm9kZSogbm9kZSkKICAg
ICB7Ci0gICAgICAgIHJldHVybiB2YWx1ZU9mSlNDb25zdGFudChub2RlSW5kZXgpLmFzQm9vbGVh
bigpOworICAgICAgICByZXR1cm4gdmFsdWVPZkpTQ29uc3RhbnQobm9kZSkuYXNCb29sZWFuKCk7
CiAgICAgfQotICAgIEpTRnVuY3Rpb24qIHZhbHVlT2ZGdW5jdGlvbkNvbnN0YW50KE5vZGVJbmRl
eCBub2RlSW5kZXgpCisgICAgSlNGdW5jdGlvbiogdmFsdWVPZkZ1bmN0aW9uQ29uc3RhbnQoTm9k
ZSogbm9kZSkKICAgICB7Ci0gICAgICAgIEpTQ2VsbCogZnVuY3Rpb24gPSBnZXRKU0Z1bmN0aW9u
KHZhbHVlT2ZKU0NvbnN0YW50KG5vZGVJbmRleCkpOworICAgICAgICBKU0NlbGwqIGZ1bmN0aW9u
ID0gZ2V0SlNGdW5jdGlvbih2YWx1ZU9mSlNDb25zdGFudChub2RlKSk7CiAgICAgICAgIEFTU0VS
VChmdW5jdGlvbik7CiAgICAgICAgIHJldHVybiBqc0Nhc3Q8SlNGdW5jdGlvbio+KGZ1bmN0aW9u
KTsKICAgICB9CkBAIC00MzksNDUgKzQyMCw0MyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBt
X2NvZGVCbG9jay0+dW5jaGVja2VkQWN0aXZhdGlvblJlZ2lzdGVyKCk7CiAgICAgfQogICAgIAot
ICAgIFZhbHVlUHJvZmlsZSogdmFsdWVQcm9maWxlRm9yKE5vZGVJbmRleCBub2RlSW5kZXgpCisg
ICAgVmFsdWVQcm9maWxlKiB2YWx1ZVByb2ZpbGVGb3IoTm9kZSogbm9kZSkKICAgICB7Ci0gICAg
ICAgIGlmIChub2RlSW5kZXggPT0gTm9Ob2RlKQorICAgICAgICBpZiAoIW5vZGUpCiAgICAgICAg
ICAgICByZXR1cm4gMDsKICAgICAgICAgCi0gICAgICAgIE5vZGUmIG5vZGUgPSBhdChub2RlSW5k
ZXgpOwotICAgICAgICBDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2sgPSBiYXNlbGluZUNvZGVCbG9j
a0Zvcihub2RlLmNvZGVPcmlnaW4pOworICAgICAgICBDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2sg
PSBiYXNlbGluZUNvZGVCbG9ja0Zvcihub2RlLT5jb2RlT3JpZ2luKTsKICAgICAgICAgCi0gICAg
ICAgIGlmIChub2RlLmhhc0xvY2FsKCkpIHsKLSAgICAgICAgICAgIGlmICghb3BlcmFuZElzQXJn
dW1lbnQobm9kZS5sb2NhbCgpKSkKKyAgICAgICAgaWYgKG5vZGUtPmhhc0xvY2FsKCkpIHsKKyAg
ICAgICAgICAgIGlmICghb3BlcmFuZElzQXJndW1lbnQobm9kZS0+bG9jYWwoKSkpCiAgICAgICAg
ICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICBpbnQgYXJndW1lbnQgPSBvcGVyYW5kVG9B
cmd1bWVudChub2RlLmxvY2FsKCkpOwotICAgICAgICAgICAgaWYgKG5vZGUudmFyaWFibGVBY2Nl
c3NEYXRhKCkgIT0gYXQobV9hcmd1bWVudHNbYXJndW1lbnRdKS52YXJpYWJsZUFjY2Vzc0RhdGEo
KSkKKyAgICAgICAgICAgIGludCBhcmd1bWVudCA9IG9wZXJhbmRUb0FyZ3VtZW50KG5vZGUtPmxv
Y2FsKCkpOworICAgICAgICAgICAgaWYgKG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpICE9IG1f
YXJndW1lbnRzW2FyZ3VtZW50XS0+dmFyaWFibGVBY2Nlc3NEYXRhKCkpCiAgICAgICAgICAgICAg
ICAgcmV0dXJuIDA7CiAgICAgICAgICAgICByZXR1cm4gcHJvZmlsZWRCbG9jay0+dmFsdWVQcm9m
aWxlRm9yQXJndW1lbnQoYXJndW1lbnQpOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBp
ZiAobm9kZS5oYXNIZWFwUHJlZGljdGlvbigpKQotICAgICAgICAgICAgcmV0dXJuIHByb2ZpbGVk
QmxvY2stPnZhbHVlUHJvZmlsZUZvckJ5dGVjb2RlT2Zmc2V0KG5vZGUuY29kZU9yaWdpbi5ieXRl
Y29kZUluZGV4Rm9yVmFsdWVQcm9maWxlKCkpOworICAgICAgICBpZiAobm9kZS0+aGFzSGVhcFBy
ZWRpY3Rpb24oKSkKKyAgICAgICAgICAgIHJldHVybiBwcm9maWxlZEJsb2NrLT52YWx1ZVByb2Zp
bGVGb3JCeXRlY29kZU9mZnNldChub2RlLT5jb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXhGb3JWYWx1
ZVByb2ZpbGUoKSk7CiAgICAgICAgIAogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAgICAgCi0g
ICAgTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZSBtZXRob2RPZkdldHRpbmdBVmFsdWVQcm9m
aWxlRm9yKE5vZGVJbmRleCBub2RlSW5kZXgpCisgICAgTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJv
ZmlsZSBtZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlRm9yKE5vZGUqIG5vZGUpCiAgICAgewot
ICAgICAgICBpZiAobm9kZUluZGV4ID09IE5vTm9kZSkKKyAgICAgICAgaWYgKCFub2RlKQogICAg
ICAgICAgICAgcmV0dXJuIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUoKTsKICAgICAgICAg
Ci0gICAgICAgIE5vZGUmIG5vZGUgPSBhdChub2RlSW5kZXgpOwotICAgICAgICBDb2RlQmxvY2sq
IHByb2ZpbGVkQmxvY2sgPSBiYXNlbGluZUNvZGVCbG9ja0Zvcihub2RlLmNvZGVPcmlnaW4pOwor
ICAgICAgICBDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2sgPSBiYXNlbGluZUNvZGVCbG9ja0Zvcihu
b2RlLT5jb2RlT3JpZ2luKTsKICAgICAgICAgCi0gICAgICAgIGlmIChub2RlLm9wKCkgPT0gR2V0
TG9jYWwpIHsKKyAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gR2V0TG9jYWwpIHsKICAgICAgICAg
ICAgIHJldHVybiBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlOjpmcm9tTGF6eU9wZXJhbmQo
CiAgICAgICAgICAgICAgICAgcHJvZmlsZWRCbG9jaywKICAgICAgICAgICAgICAgICBMYXp5T3Bl
cmFuZFZhbHVlUHJvZmlsZUtleSgKLSAgICAgICAgICAgICAgICAgICAgbm9kZS5jb2RlT3JpZ2lu
LmJ5dGVjb2RlSW5kZXgsIG5vZGUubG9jYWwoKSkpOworICAgICAgICAgICAgICAgICAgICBub2Rl
LT5jb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgsIG5vZGUtPmxvY2FsKCkpKTsKICAgICAgICAgfQog
ICAgICAgICAKLSAgICAgICAgcmV0dXJuIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUodmFs
dWVQcm9maWxlRm9yKG5vZGVJbmRleCkpOworICAgICAgICByZXR1cm4gTWV0aG9kT2ZHZXR0aW5n
QVZhbHVlUHJvZmlsZSh2YWx1ZVByb2ZpbGVGb3Iobm9kZSkpOwogICAgIH0KICAgICAKICAgICBi
b29sIG5lZWRzQWN0aXZhdGlvbigpIGNvbnN0CkBAIC01MDEsMjEgKzQ4MCwyMSBAQCBwdWJsaWM6
CiAgICAgCiAgICAgdW5zaWduZWQgbnVtU3VjY2Vzc29ycyhCYXNpY0Jsb2NrKiBibG9jaykKICAg
ICB7Ci0gICAgICAgIHJldHVybiBhdChibG9jay0+bGFzdCgpKS5udW1TdWNjZXNzb3JzKCk7Cisg
ICAgICAgIHJldHVybiBibG9jay0+bGFzdCgpLT5udW1TdWNjZXNzb3JzKCk7CiAgICAgfQogICAg
IEJsb2NrSW5kZXggc3VjY2Vzc29yKEJhc2ljQmxvY2sqIGJsb2NrLCB1bnNpZ25lZCBpbmRleCkK
ICAgICB7Ci0gICAgICAgIHJldHVybiBhdChibG9jay0+bGFzdCgpKS5zdWNjZXNzb3IoaW5kZXgp
OworICAgICAgICByZXR1cm4gYmxvY2stPmxhc3QoKS0+c3VjY2Vzc29yKGluZGV4KTsKICAgICB9
CiAgICAgQmxvY2tJbmRleCBzdWNjZXNzb3JGb3JDb25kaXRpb24oQmFzaWNCbG9jayogYmxvY2ss
IGJvb2wgY29uZGl0aW9uKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGF0KGJsb2NrLT5sYXN0KCkp
LnN1Y2Nlc3NvckZvckNvbmRpdGlvbihjb25kaXRpb24pOworICAgICAgICByZXR1cm4gYmxvY2st
Pmxhc3QoKS0+c3VjY2Vzc29yRm9yQ29uZGl0aW9uKGNvbmRpdGlvbik7CiAgICAgfQogICAgIAot
ICAgIGJvb2wgaXNQcmVkaWN0ZWROdW1lcmljYWwoTm9kZSYgbm9kZSkKKyAgICBib29sIGlzUHJl
ZGljdGVkTnVtZXJpY2FsKE5vZGUqIG5vZGUpCiAgICAgewotICAgICAgICBTcGVjdWxhdGVkVHlw
ZSBsZWZ0ID0gYXQobm9kZS5jaGlsZDEoKSkucHJlZGljdGlvbigpOwotICAgICAgICBTcGVjdWxh
dGVkVHlwZSByaWdodCA9IGF0KG5vZGUuY2hpbGQyKCkpLnByZWRpY3Rpb24oKTsKKyAgICAgICAg
U3BlY3VsYXRlZFR5cGUgbGVmdCA9IG5vZGUtPmNoaWxkMSgpLT5wcmVkaWN0aW9uKCk7CisgICAg
ICAgIFNwZWN1bGF0ZWRUeXBlIHJpZ2h0ID0gbm9kZS0+Y2hpbGQyKCktPnByZWRpY3Rpb24oKTsK
ICAgICAgICAgcmV0dXJuIGlzTnVtYmVyU3BlY3VsYXRpb24obGVmdCkgJiYgaXNOdW1iZXJTcGVj
dWxhdGlvbihyaWdodCk7CiAgICAgfQogICAgIApAQCAtNTI1LDIzICs1MDQsMjMgQEAgcHVibGlj
OgogICAgIC8vIC0gUHV0QnlWYWwgZGVmaW5pdGVseSBjaGFuZ2VzIHRoZSBhcnJheSBpdCBzdG9y
ZXMgdG8sIGFuZCBtYXkgZXZlbiBjaGFuZ2UgaXRzIGxlbmd0aC4KICAgICAvLyAtIFB1dEJ5T2Zm
c2V0IGRlZmluaXRlbHkgY2hhbmdlcyB0aGUgb2JqZWN0IGl0IHN0b3JlcyB0by4KICAgICAvLyAt
IGFuZCBzbyBvbi4KLSAgICBib29sIGJ5VmFsSXNQdXJlKE5vZGUmIG5vZGUpCisgICAgYm9vbCBi
eVZhbElzUHVyZShOb2RlKiBub2RlKQogICAgIHsKLSAgICAgICAgc3dpdGNoIChub2RlLmFycmF5
TW9kZSgpLnR5cGUoKSkgeworICAgICAgICBzd2l0Y2ggKG5vZGUtPmFycmF5TW9kZSgpLnR5cGUo
KSkgewogICAgICAgICBjYXNlIEFycmF5OjpHZW5lcmljOgogICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgICAgICBjYXNlIEFycmF5OjpJbnQzMjoKICAgICAgICAgY2FzZSBBcnJheTo6RG91
YmxlOgogICAgICAgICBjYXNlIEFycmF5OjpDb250aWd1b3VzOgogICAgICAgICBjYXNlIEFycmF5
OjpBcnJheVN0b3JhZ2U6Ci0gICAgICAgICAgICByZXR1cm4gIW5vZGUuYXJyYXlNb2RlKCkuaXNP
dXRPZkJvdW5kcygpOworICAgICAgICAgICAgcmV0dXJuICFub2RlLT5hcnJheU1vZGUoKS5pc091
dE9mQm91bmRzKCk7CiAgICAgICAgIGNhc2UgQXJyYXk6OlNsb3dQdXRBcnJheVN0b3JhZ2U6Ci0g
ICAgICAgICAgICByZXR1cm4gIW5vZGUuYXJyYXlNb2RlKCkubWF5U3RvcmVUb0hvbGUoKTsKKyAg
ICAgICAgICAgIHJldHVybiAhbm9kZS0+YXJyYXlNb2RlKCkubWF5U3RvcmVUb0hvbGUoKTsKICAg
ICAgICAgY2FzZSBBcnJheTo6U3RyaW5nOgotICAgICAgICAgICAgcmV0dXJuIG5vZGUub3AoKSA9
PSBHZXRCeVZhbDsKKyAgICAgICAgICAgIHJldHVybiBub2RlLT5vcCgpID09IEdldEJ5VmFsOwog
I2lmIFVTRShKU1ZBTFVFMzJfNjQpCiAgICAgICAgIGNhc2UgQXJyYXk6OkFyZ3VtZW50czoKLSAg
ICAgICAgICAgIGlmIChub2RlLm9wKCkgPT0gR2V0QnlWYWwpCisgICAgICAgICAgICBpZiAobm9k
ZS0+b3AoKSA9PSBHZXRCeVZhbCkKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKICNlbmRpZiAvLyBVU0UoSlNWQUxVRTMyXzY0KQpAQCAtNTUw
LDEzICs1MjksMTMgQEAgcHVibGljOgogICAgICAgICB9CiAgICAgfQogICAgIAotICAgIGJvb2wg
Y2xvYmJlcnNXb3JsZChOb2RlJiBub2RlKQorICAgIGJvb2wgY2xvYmJlcnNXb3JsZChOb2RlKiBu
b2RlKQogICAgIHsKLSAgICAgICAgaWYgKG5vZGUuZmxhZ3MoKSAmIE5vZGVDbG9iYmVyc1dvcmxk
KQorICAgICAgICBpZiAobm9kZS0+ZmxhZ3MoKSAmIE5vZGVDbG9iYmVyc1dvcmxkKQogICAgICAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGlmICghKG5vZGUuZmxhZ3MoKSAmIE5vZGVNaWdo
dENsb2JiZXIpKQorICAgICAgICBpZiAoIShub2RlLT5mbGFncygpICYgTm9kZU1pZ2h0Q2xvYmJl
cikpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIHN3aXRjaCAobm9kZS5vcCgp
KSB7CisgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewogICAgICAgICBjYXNlIFZhbHVlQWRk
OgogICAgICAgICBjYXNlIENvbXBhcmVMZXNzOgogICAgICAgICBjYXNlIENvbXBhcmVMZXNzRXE6
CkBAIC01NzQsOSArNTUzLDkgQEAgcHVibGljOgogICAgICAgICB9CiAgICAgfQogICAgIAotICAg
IGJvb2wgY2xvYmJlcnNXb3JsZChOb2RlSW5kZXggbm9kZUluZGV4KQorICAgIGJvb2wgY2xvYmJl
cnNXb3JsZChOb2RlKiBub2RlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGNsb2JiZXJzV29ybGQo
YXQobm9kZUluZGV4KSk7CisgICAgICAgIHJldHVybiBjbG9iYmVyc1dvcmxkKG5vZGUpOwogICAg
IH0KICAgICAKICAgICB2b2lkIGRldGVybWluZVJlYWNoYWJpbGl0eSgpOwpAQCAtNTg0LDUyICs1
NjMsNTcgQEAgcHVibGljOgogICAgIAogICAgIHZvaWQgcmVzZXRFeGl0U3RhdGVzKCk7CiAgICAg
Ci0gICAgdW5zaWduZWQgdmFyQXJnTnVtQ2hpbGRyZW4oTm9kZSYgbm9kZSkKKyAgICB1bnNpZ25l
ZCB2YXJBcmdOdW1DaGlsZHJlbihOb2RlKiBub2RlKQogICAgIHsKLSAgICAgICAgQVNTRVJUKG5v
ZGUuZmxhZ3MoKSAmIE5vZGVIYXNWYXJBcmdzKTsKLSAgICAgICAgcmV0dXJuIG5vZGUubnVtQ2hp
bGRyZW4oKTsKKyAgICAgICAgQVNTRVJUKG5vZGUtPmZsYWdzKCkgJiBOb2RlSGFzVmFyQXJncyk7
CisgICAgICAgIHJldHVybiBub2RlLT5udW1DaGlsZHJlbigpOwogICAgIH0KICAgICAKLSAgICB1
bnNpZ25lZCBudW1DaGlsZHJlbihOb2RlJiBub2RlKQorICAgIHVuc2lnbmVkIG51bUNoaWxkcmVu
KE5vZGUqIG5vZGUpCiAgICAgewotICAgICAgICBpZiAobm9kZS5mbGFncygpICYgTm9kZUhhc1Zh
ckFyZ3MpCisgICAgICAgIGlmIChub2RlLT5mbGFncygpICYgTm9kZUhhc1ZhckFyZ3MpCiAgICAg
ICAgICAgICByZXR1cm4gdmFyQXJnTnVtQ2hpbGRyZW4obm9kZSk7CiAgICAgICAgIHJldHVybiBB
ZGphY2VuY3lMaXN0OjpTaXplOwogICAgIH0KICAgICAKLSAgICBFZGdlJiB2YXJBcmdDaGlsZChO
b2RlJiBub2RlLCB1bnNpZ25lZCBpbmRleCkKKyAgICBFZGdlJiB2YXJBcmdDaGlsZChOb2RlKiBu
b2RlLCB1bnNpZ25lZCBpbmRleCkKICAgICB7Ci0gICAgICAgIEFTU0VSVChub2RlLmZsYWdzKCkg
JiBOb2RlSGFzVmFyQXJncyk7Ci0gICAgICAgIHJldHVybiBtX3ZhckFyZ0NoaWxkcmVuW25vZGUu
Zmlyc3RDaGlsZCgpICsgaW5kZXhdOworICAgICAgICBBU1NFUlQobm9kZS0+ZmxhZ3MoKSAmIE5v
ZGVIYXNWYXJBcmdzKTsKKyAgICAgICAgcmV0dXJuIG1fdmFyQXJnQ2hpbGRyZW5bbm9kZS0+Zmly
c3RDaGlsZCgpICsgaW5kZXhdOwogICAgIH0KICAgICAKLSAgICBFZGdlJiBjaGlsZChOb2RlJiBu
b2RlLCB1bnNpZ25lZCBpbmRleCkKKyAgICBFZGdlJiBjaGlsZChOb2RlKiBub2RlLCB1bnNpZ25l
ZCBpbmRleCkKICAgICB7Ci0gICAgICAgIGlmIChub2RlLmZsYWdzKCkgJiBOb2RlSGFzVmFyQXJn
cykKKyAgICAgICAgaWYgKG5vZGUtPmZsYWdzKCkgJiBOb2RlSGFzVmFyQXJncykKICAgICAgICAg
ICAgIHJldHVybiB2YXJBcmdDaGlsZChub2RlLCBpbmRleCk7Ci0gICAgICAgIHJldHVybiBub2Rl
LmNoaWxkcmVuLmNoaWxkKGluZGV4KTsKKyAgICAgICAgcmV0dXJuIG5vZGUtPmNoaWxkcmVuLmNo
aWxkKGluZGV4KTsKICAgICB9CiAgICAgCi0gICAgdm9pZCB2b3RlKEVkZ2UgZWRnZSwgdW5zaWdu
ZWQgYmFsbG90KQorICAgIHZvaWQgdm90ZU5vZGUoTm9kZSogbm9kZSwgdW5zaWduZWQgYmFsbG90
KQogICAgIHsKLSAgICAgICAgc3dpdGNoIChhdChlZGdlKS5vcCgpKSB7CisgICAgICAgIHN3aXRj
aCAobm9kZS0+b3AoKSkgewogICAgICAgICBjYXNlIFZhbHVlVG9JbnQzMjoKICAgICAgICAgY2Fz
ZSBVSW50MzJUb051bWJlcjoKLSAgICAgICAgICAgIGVkZ2UgPSBhdChlZGdlKS5jaGlsZDEoKTsK
KyAgICAgICAgICAgIG5vZGUgPSBub2RlLT5jaGlsZDEoKS5ub2RlKCk7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAg
ICAgICAgIAotICAgICAgICBpZiAoYXQoZWRnZSkub3AoKSA9PSBHZXRMb2NhbCkKLSAgICAgICAg
ICAgIGF0KGVkZ2UpLnZhcmlhYmxlQWNjZXNzRGF0YSgpLT52b3RlKGJhbGxvdCk7CisgICAgICAg
IGlmIChub2RlLT5vcCgpID09IEdldExvY2FsKQorICAgICAgICAgICAgbm9kZS0+dmFyaWFibGVB
Y2Nlc3NEYXRhKCktPnZvdGUoYmFsbG90KTsKKyAgICB9CisgICAgCisgICAgdm9pZCB2b3RlTm9k
ZShFZGdlIGVkZ2UsIHVuc2lnbmVkIGJhbGxvdCkKKyAgICB7CisgICAgICAgIHZvdGVOb2RlKGVk
Z2Uubm9kZSgpLCBiYWxsb3QpOwogICAgIH0KICAgICAKLSAgICB2b2lkIHZvdGUoTm9kZSYgbm9k
ZSwgdW5zaWduZWQgYmFsbG90KQorICAgIHZvaWQgdm90ZUNoaWxkcmVuKE5vZGUqIG5vZGUsIHVu
c2lnbmVkIGJhbGxvdCkKICAgICB7Ci0gICAgICAgIGlmIChub2RlLmZsYWdzKCkgJiBOb2RlSGFz
VmFyQXJncykgewotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBjaGlsZElkeCA9IG5vZGUuZmly
c3RDaGlsZCgpOwotICAgICAgICAgICAgICAgICBjaGlsZElkeCA8IG5vZGUuZmlyc3RDaGlsZCgp
ICsgbm9kZS5udW1DaGlsZHJlbigpOworICAgICAgICBpZiAobm9kZS0+ZmxhZ3MoKSAmIE5vZGVI
YXNWYXJBcmdzKSB7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGNoaWxkSWR4ID0gbm9kZS0+
Zmlyc3RDaGlsZCgpOworICAgICAgICAgICAgICAgICBjaGlsZElkeCA8IG5vZGUtPmZpcnN0Q2hp
bGQoKSArIG5vZGUtPm51bUNoaWxkcmVuKCk7CiAgICAgICAgICAgICAgICAgIGNoaWxkSWR4Kysp
IHsKICAgICAgICAgICAgICAgICBpZiAoISFtX3ZhckFyZ0NoaWxkcmVuW2NoaWxkSWR4XSkKICAg
ICAgICAgICAgICAgICAgICAgdm90ZShtX3ZhckFyZ0NoaWxkcmVuW2NoaWxkSWR4XSwgYmFsbG90
KTsKQEAgLTYzNywzOSArNjIxLDM4IEBAIHB1YmxpYzoKICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgfQogICAgICAgICAKLSAgICAgICAgaWYgKCFub2RlLmNoaWxkMSgpKQorICAgICAgICBp
ZiAoIW5vZGUtPmNoaWxkMSgpKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB2b3RlKG5v
ZGUuY2hpbGQxKCksIGJhbGxvdCk7Ci0gICAgICAgIGlmICghbm9kZS5jaGlsZDIoKSkKKyAgICAg
ICAgdm90ZShub2RlLT5jaGlsZDEoKSwgYmFsbG90KTsKKyAgICAgICAgaWYgKCFub2RlLT5jaGls
ZDIoKSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgdm90ZShub2RlLmNoaWxkMigpLCBi
YWxsb3QpOwotICAgICAgICBpZiAoIW5vZGUuY2hpbGQzKCkpCisgICAgICAgIHZvdGUobm9kZS0+
Y2hpbGQyKCksIGJhbGxvdCk7CisgICAgICAgIGlmICghbm9kZS0+Y2hpbGQzKCkpCiAgICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIHZvdGUobm9kZS5jaGlsZDMoKSwgYmFsbG90KTsKKyAgICAg
ICAgdm90ZShub2RlLT5jaGlsZDMoKSwgYmFsbG90KTsKICAgICB9CiAgICAgCi0gICAgdGVtcGxh
dGU8dHlwZW5hbWUgVD4gLy8gVCA9IE5vZGVJbmRleCBvciBFZGdlCisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgVD4gLy8gVCA9IE5vZGUqIG9yIEVkZ2UKICAgICB2b2lkIHN1YnN0aXR1dGUoQmFzaWNC
bG9jayYgYmxvY2ssIHVuc2lnbmVkIHN0YXJ0SW5kZXhJbkJsb2NrLCBUIG9sZFRoaW5nLCBUIG5l
d1RoaW5nKQogICAgIHsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpbmRleEluQmxvY2sgPSBzdGFy
dEluZGV4SW5CbG9jazsgaW5kZXhJbkJsb2NrIDwgYmxvY2suc2l6ZSgpOyArK2luZGV4SW5CbG9j
aykgewotICAgICAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRleCA9IGJsb2NrW2luZGV4SW5CbG9j
a107Ci0gICAgICAgICAgICBOb2RlJiBub2RlID0gYXQobm9kZUluZGV4KTsKLSAgICAgICAgICAg
IGlmIChub2RlLmZsYWdzKCkgJiBOb2RlSGFzVmFyQXJncykgewotICAgICAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgY2hpbGRJZHggPSBub2RlLmZpcnN0Q2hpbGQoKTsgY2hpbGRJZHggPCBub2Rl
LmZpcnN0Q2hpbGQoKSArIG5vZGUubnVtQ2hpbGRyZW4oKTsgKytjaGlsZElkeCkgeworICAgICAg
ICAgICAgTm9kZSogbm9kZSA9IGJsb2NrW2luZGV4SW5CbG9ja107CisgICAgICAgICAgICBpZiAo
bm9kZS0+ZmxhZ3MoKSAmIE5vZGVIYXNWYXJBcmdzKSB7CisgICAgICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBjaGlsZElkeCA9IG5vZGUtPmZpcnN0Q2hpbGQoKTsgY2hpbGRJZHggPCBub2RlLT5m
aXJzdENoaWxkKCkgKyBub2RlLT5udW1DaGlsZHJlbigpOyArK2NoaWxkSWR4KSB7CiAgICAgICAg
ICAgICAgICAgICAgIGlmICghIW1fdmFyQXJnQ2hpbGRyZW5bY2hpbGRJZHhdKQotICAgICAgICAg
ICAgICAgICAgICAgICAgY29tcGFyZUFuZFN3YXAobV92YXJBcmdDaGlsZHJlbltjaGlsZElkeF0s
IG9sZFRoaW5nLCBuZXdUaGluZywgbm9kZS5zaG91bGRHZW5lcmF0ZSgpKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbXBhcmVBbmRTd2FwKG1fdmFyQXJnQ2hpbGRyZW5bY2hpbGRJZHhdLCBv
bGRUaGluZywgbmV3VGhpbmcsIG5vZGUtPnNob3VsZEdlbmVyYXRlKCkpOwogICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIGlmICghbm9kZS5jaGlsZDEoKSkKKyAgICAgICAgICAgIGlmICghbm9kZS0+Y2hpbGQxKCkp
CiAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBjb21wYXJlQW5kU3dhcChu
b2RlLmNoaWxkcmVuLmNoaWxkMSgpLCBvbGRUaGluZywgbmV3VGhpbmcsIG5vZGUuc2hvdWxkR2Vu
ZXJhdGUoKSk7Ci0gICAgICAgICAgICBpZiAoIW5vZGUuY2hpbGQyKCkpCisgICAgICAgICAgICBj
b21wYXJlQW5kU3dhcChub2RlLT5jaGlsZHJlbi5jaGlsZDEoKSwgb2xkVGhpbmcsIG5ld1RoaW5n
LCBub2RlLT5zaG91bGRHZW5lcmF0ZSgpKTsKKyAgICAgICAgICAgIGlmICghbm9kZS0+Y2hpbGQy
KCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBjb21wYXJlQW5kU3dh
cChub2RlLmNoaWxkcmVuLmNoaWxkMigpLCBvbGRUaGluZywgbmV3VGhpbmcsIG5vZGUuc2hvdWxk
R2VuZXJhdGUoKSk7Ci0gICAgICAgICAgICBpZiAoIW5vZGUuY2hpbGQzKCkpCisgICAgICAgICAg
ICBjb21wYXJlQW5kU3dhcChub2RlLT5jaGlsZHJlbi5jaGlsZDIoKSwgb2xkVGhpbmcsIG5ld1Ro
aW5nLCBub2RlLT5zaG91bGRHZW5lcmF0ZSgpKTsKKyAgICAgICAgICAgIGlmICghbm9kZS0+Y2hp
bGQzKCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBjb21wYXJlQW5k
U3dhcChub2RlLmNoaWxkcmVuLmNoaWxkMygpLCBvbGRUaGluZywgbmV3VGhpbmcsIG5vZGUuc2hv
dWxkR2VuZXJhdGUoKSk7CisgICAgICAgICAgICBjb21wYXJlQW5kU3dhcChub2RlLT5jaGlsZHJl
bi5jaGlsZDMoKSwgb2xkVGhpbmcsIG5ld1RoaW5nLCBub2RlLT5zaG91bGRHZW5lcmF0ZSgpKTsK
ICAgICAgICAgfQogICAgIH0KICAgICAKQEAgLTY3NywyOSArNjYwLDI4IEBAIHB1YmxpYzoKICAg
ICAvLyBhbnkgR2V0TG9jYWxzIGluIHRoZSBiYXNpYyBibG9jay4KICAgICAvLyBGSVhNRTogaXQg
bWF5IGJlIGFwcHJvcHJpYXRlLCBpbiB0aGUgZnV0dXJlLCB0byBnZW5lcmFsaXplIHRoaXMgdG8g
aGFuZGxlIEdldExvY2FscwogICAgIC8vIGludHJvZHVjZWQgYW55d2hlcmUgaW4gdGhlIGJhc2lj
IGJsb2NrLgotICAgIHZvaWQgc3Vic3RpdHV0ZUdldExvY2FsKEJhc2ljQmxvY2smIGJsb2NrLCB1
bnNpZ25lZCBzdGFydEluZGV4SW5CbG9jaywgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFj
Y2Vzc0RhdGEsIE5vZGVJbmRleCBuZXdHZXRMb2NhbCkKKyAgICB2b2lkIHN1YnN0aXR1dGVHZXRM
b2NhbChCYXNpY0Jsb2NrJiBibG9jaywgdW5zaWduZWQgc3RhcnRJbmRleEluQmxvY2ssIFZhcmlh
YmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhLCBOb2RlKiBuZXdHZXRMb2NhbCkKICAg
ICB7CiAgICAgICAgIGlmICh2YXJpYWJsZUFjY2Vzc0RhdGEtPmlzQ2FwdHVyZWQoKSkgewogICAg
ICAgICAgICAgLy8gTGV0IENTRSB3b3JyeSBhYm91dCB0aGlzIG9uZS4KICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgfQogICAgICAgICBmb3IgKHVuc2lnbmVkIGluZGV4SW5CbG9jayA9IHN0
YXJ0SW5kZXhJbkJsb2NrOyBpbmRleEluQmxvY2sgPCBibG9jay5zaXplKCk7ICsraW5kZXhJbkJs
b2NrKSB7Ci0gICAgICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4ID0gYmxvY2tbaW5kZXhJbkJs
b2NrXTsKLSAgICAgICAgICAgIE5vZGUmIG5vZGUgPSBhdChub2RlSW5kZXgpOworICAgICAgICAg
ICAgTm9kZSogbm9kZSA9IGJsb2NrW2luZGV4SW5CbG9ja107CiAgICAgICAgICAgICBib29sIHNo
b3VsZENvbnRpbnVlID0gdHJ1ZTsKLSAgICAgICAgICAgIHN3aXRjaCAobm9kZS5vcCgpKSB7Cisg
ICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKICAgICAgICAgICAgIGNhc2UgU2V0TG9j
YWw6IHsKLSAgICAgICAgICAgICAgICBpZiAobm9kZS5sb2NhbCgpID09IHZhcmlhYmxlQWNjZXNz
RGF0YS0+bG9jYWwoKSkKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+bG9jYWwoKSA9PSB2YXJp
YWJsZUFjY2Vzc0RhdGEtPmxvY2FsKCkpCiAgICAgICAgICAgICAgICAgICAgIHNob3VsZENvbnRp
bnVlID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICAgCiAgICAgICAgICAgICBjYXNlIEdldExvY2FsOiB7Ci0gICAgICAgICAgICAg
ICAgaWYgKG5vZGUudmFyaWFibGVBY2Nlc3NEYXRhKCkgIT0gdmFyaWFibGVBY2Nlc3NEYXRhKQor
ICAgICAgICAgICAgICAgIGlmIChub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKSAhPSB2YXJpYWJs
ZUFjY2Vzc0RhdGEpCiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAg
ICAgIHN1YnN0aXR1dGUoYmxvY2ssIGluZGV4SW5CbG9jaywgbm9kZUluZGV4LCBuZXdHZXRMb2Nh
bCk7Ci0gICAgICAgICAgICAgICAgTm9kZUluZGV4IG9sZFRhaWxJbmRleCA9IGJsb2NrLnZhcmlh
Ymxlc0F0VGFpbC5vcGVyYW5kKHZhcmlhYmxlQWNjZXNzRGF0YS0+bG9jYWwoKSk7Ci0gICAgICAg
ICAgICAgICAgaWYgKG9sZFRhaWxJbmRleCA9PSBub2RlSW5kZXgpCisgICAgICAgICAgICAgICAg
c3Vic3RpdHV0ZShibG9jaywgaW5kZXhJbkJsb2NrLCBub2RlLCBuZXdHZXRMb2NhbCk7CisgICAg
ICAgICAgICAgICAgTm9kZSogb2xkVGFpbE5vZGUgPSBibG9jay52YXJpYWJsZXNBdFRhaWwub3Bl
cmFuZCh2YXJpYWJsZUFjY2Vzc0RhdGEtPmxvY2FsKCkpOworICAgICAgICAgICAgICAgIGlmIChv
bGRUYWlsTm9kZSA9PSBub2RlKQogICAgICAgICAgICAgICAgICAgICBibG9jay52YXJpYWJsZXNB
dFRhaWwub3BlcmFuZCh2YXJpYWJsZUFjY2Vzc0RhdGEtPmxvY2FsKCkpID0gbmV3R2V0TG9jYWw7
CiAgICAgICAgICAgICAgICAgc2hvdWxkQ29udGludWUgPSBmYWxzZTsKICAgICAgICAgICAgICAg
ICBicmVhazsKQEAgLTcxNyw2ICs2OTksOCBAQCBwdWJsaWM6CiAgICAgQ29kZUJsb2NrKiBtX2Nv
ZGVCbG9jazsKICAgICBSZWZQdHI8UHJvZmlsZXI6OkNvbXBpbGF0aW9uPiBtX2NvbXBpbGF0aW9u
OwogICAgIENvZGVCbG9jayogbV9wcm9maWxlZEJsb2NrOworICAgIAorICAgIE5vZGVBbGxvY2F0
b3ImIG1fYWxsb2NhdG9yOwogCiAgICAgVmVjdG9yPCBPd25QdHI8QmFzaWNCbG9jaz4gLCA4PiBt
X2Jsb2NrczsKICAgICBWZWN0b3I8RWRnZSwgMTY+IG1fdmFyQXJnQ2hpbGRyZW47CkBAIC03MjQs
NyArNzA4LDcgQEAgcHVibGljOgogICAgIFZlY3RvcjxSZXNvbHZlR2xvYmFsRGF0YT4gbV9yZXNv
bHZlR2xvYmFsRGF0YTsKICAgICBWZWN0b3I8UmVzb2x2ZU9wZXJhdGlvbkRhdGE+IG1fcmVzb2x2
ZU9wZXJhdGlvbnNEYXRhOwogICAgIFZlY3RvcjxQdXRUb0Jhc2VPcGVyYXRpb25EYXRhPiBtX3B1
dFRvQmFzZU9wZXJhdGlvbkRhdGE7Ci0gICAgVmVjdG9yPE5vZGVJbmRleCwgOD4gbV9hcmd1bWVu
dHM7CisgICAgVmVjdG9yPE5vZGUqLCA4PiBtX2FyZ3VtZW50czsKICAgICBTZWdtZW50ZWRWZWN0
b3I8VmFyaWFibGVBY2Nlc3NEYXRhLCAxNj4gbV92YXJpYWJsZUFjY2Vzc0RhdGE7CiAgICAgU2Vn
bWVudGVkVmVjdG9yPEFyZ3VtZW50UG9zaXRpb24sIDg+IG1fYXJndW1lbnRQb3NpdGlvbnM7CiAg
ICAgU2VnbWVudGVkVmVjdG9yPFN0cnVjdHVyZVNldCwgMTY+IG1fc3RydWN0dXJlU2V0OwpAQCAt
NzQ0LDI5ICs3MjgsMjkgQEAgcHJpdmF0ZToKICAgICAKICAgICB2b2lkIGhhbmRsZVN1Y2Nlc3Nv
cihWZWN0b3I8QmxvY2tJbmRleCwgMTY+JiB3b3JrbGlzdCwgQmxvY2tJbmRleCBibG9ja0luZGV4
LCBCbG9ja0luZGV4IHN1Y2Nlc3NvckluZGV4KTsKICAgICAKLSAgICBBZGRTcGVjdWxhdGlvbk1v
ZGUgYWRkSW1tZWRpYXRlU2hvdWxkU3BlY3VsYXRlSW50ZWdlcihOb2RlJiBhZGQsIGJvb2wgdmFy
aWFibGVTaG91bGRTcGVjdWxhdGVJbnRlZ2VyLCBOb2RlJiBpbW1lZGlhdGUpCisgICAgQWRkU3Bl
Y3VsYXRpb25Nb2RlIGFkZEltbWVkaWF0ZVNob3VsZFNwZWN1bGF0ZUludGVnZXIoTm9kZSogYWRk
LCBib29sIHZhcmlhYmxlU2hvdWxkU3BlY3VsYXRlSW50ZWdlciwgTm9kZSogaW1tZWRpYXRlKQog
ICAgIHsKICAgICAgICAgQVNTRVJUKGltbWVkaWF0ZS5oYXNDb25zdGFudCgpKTsKICAgICAgICAg
Ci0gICAgICAgIEpTVmFsdWUgaW1tZWRpYXRlVmFsdWUgPSBpbW1lZGlhdGUudmFsdWVPZkpTQ29u
c3RhbnQobV9jb2RlQmxvY2spOwotICAgICAgICBpZiAoIWltbWVkaWF0ZVZhbHVlLmlzTnVtYmVy
KCkpCisgICAgICAgIEpTVmFsdWUgaW1tZWRpYXRlVmFsdWUgPSBpbW1lZGlhdGUtPnZhbHVlT2ZK
U0NvbnN0YW50KG1fY29kZUJsb2NrKTsKKyAgICAgICAgaWYgKCFpbW1lZGlhdGVWYWx1ZS0+aXNO
dW1iZXIoKSkKICAgICAgICAgICAgIHJldHVybiBEb250U3BlY3VsYXRlSW50ZWdlcjsKICAgICAg
ICAgCiAgICAgICAgIGlmICghdmFyaWFibGVTaG91bGRTcGVjdWxhdGVJbnRlZ2VyKQogICAgICAg
ICAgICAgcmV0dXJuIERvbnRTcGVjdWxhdGVJbnRlZ2VyOwogICAgICAgICAKLSAgICAgICAgaWYg
KGltbWVkaWF0ZVZhbHVlLmlzSW50MzIoKSkKLSAgICAgICAgICAgIHJldHVybiBhZGQuY2FuU3Bl
Y3VsYXRlSW50ZWdlcigpID8gU3BlY3VsYXRlSW50ZWdlciA6IERvbnRTcGVjdWxhdGVJbnRlZ2Vy
OworICAgICAgICBpZiAoaW1tZWRpYXRlVmFsdWUtPmlzSW50MzIoKSkKKyAgICAgICAgICAgIHJl
dHVybiBhZGQtPmNhblNwZWN1bGF0ZUludGVnZXIoKSA/IFNwZWN1bGF0ZUludGVnZXIgOiBEb250
U3BlY3VsYXRlSW50ZWdlcjsKICAgICAgICAgCiAgICAgICAgIGRvdWJsZSBkb3VibGVJbW1lZGlh
dGUgPSBpbW1lZGlhdGVWYWx1ZS5hc0RvdWJsZSgpOwogICAgICAgICBjb25zdCBkb3VibGUgdHdv
VG9UaGU0OCA9IDI4MTQ3NDk3NjcxMDY1Ni4wOwogICAgICAgICBpZiAoZG91YmxlSW1tZWRpYXRl
IDwgLXR3b1RvVGhlNDggfHwgZG91YmxlSW1tZWRpYXRlID4gdHdvVG9UaGU0OCkKICAgICAgICAg
ICAgIHJldHVybiBEb250U3BlY3VsYXRlSW50ZWdlcjsKICAgICAgICAgCi0gICAgICAgIHJldHVy
biBub2RlQ2FuVHJ1bmNhdGVJbnRlZ2VyKGFkZC5hcml0aE5vZGVGbGFncygpKSA/IFNwZWN1bGF0
ZUludGVnZXJCdXRBbHdheXNXYXRjaE92ZXJmbG93IDogRG9udFNwZWN1bGF0ZUludGVnZXI7Cisg
ICAgICAgIHJldHVybiBub2RlQ2FuVHJ1bmNhdGVJbnRlZ2VyKGFkZC0+YXJpdGhOb2RlRmxhZ3Mo
KSkgPyBTcGVjdWxhdGVJbnRlZ2VyQnV0QWx3YXlzV2F0Y2hPdmVyZmxvdyA6IERvbnRTcGVjdWxh
dGVJbnRlZ2VyOwogICAgIH0KICAgICAKLSAgICBib29sIG11bEltbWVkaWF0ZVNob3VsZFNwZWN1
bGF0ZUludGVnZXIoTm9kZSYgbXVsLCBOb2RlJiB2YXJpYWJsZSwgTm9kZSYgaW1tZWRpYXRlKQor
ICAgIGJvb2wgbXVsSW1tZWRpYXRlU2hvdWxkU3BlY3VsYXRlSW50ZWdlcihOb2RlKiBtdWwsIE5v
ZGUqIHZhcmlhYmxlLCBOb2RlKiBpbW1lZGlhdGUpCiAgICAgewogICAgICAgICBBU1NFUlQoaW1t
ZWRpYXRlLmhhc0NvbnN0YW50KCkpOwogICAgICAgICAKQEAgLTc3NCw3ICs3NTgsNyBAQCBwcml2
YXRlOgogICAgICAgICBpZiAoIWltbWVkaWF0ZVZhbHVlLmlzSW50MzIoKSkKICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICAgICAgCi0gICAgICAgIGlmICghdmFyaWFibGUuc2hvdWxkU3Bl
Y3VsYXRlSW50ZWdlckZvckFyaXRobWV0aWMoKSkKKyAgICAgICAgaWYgKCF2YXJpYWJsZS0+c2hv
dWxkU3BlY3VsYXRlSW50ZWdlckZvckFyaXRobWV0aWMoKSkKICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICAgICAgCiAgICAgICAgIGludDMyX3QgaW50SW1tZWRpYXRlID0gaW1tZWRpYXRl
VmFsdWUuYXNJbnQzMigpOwpAQCAtNzg1LDE0ICs3NjksMTQgQEAgcHJpdmF0ZToKICAgICAgICAg
Ly8gY2FuU3BlY3VsYXRlSW50ZWdlcigpIGltcGxpZXMpLgogICAgICAgICBjb25zdCBpbnQzMl90
IHR3b1RvVGhlMjIgPSAxIDw8IDIyOwogICAgICAgICBpZiAoaW50SW1tZWRpYXRlIDw9IC10d29U
b1RoZTIyIHx8IGludEltbWVkaWF0ZSA+PSB0d29Ub1RoZTIyKQotICAgICAgICAgICAgcmV0dXJu
IG11bC5jYW5TcGVjdWxhdGVJbnRlZ2VyKCkgJiYgIW5vZGVNYXlPdmVyZmxvdyhtdWwuYXJpdGhO
b2RlRmxhZ3MoKSk7CisgICAgICAgICAgICByZXR1cm4gbXVsLT5jYW5TcGVjdWxhdGVJbnRlZ2Vy
KCkgJiYgIW5vZGVNYXlPdmVyZmxvdyhtdWwtPmFyaXRoTm9kZUZsYWdzKCkpOwogCi0gICAgICAg
IHJldHVybiBtdWwuY2FuU3BlY3VsYXRlSW50ZWdlcigpOworICAgICAgICByZXR1cm4gbXVsLT5j
YW5TcGVjdWxhdGVJbnRlZ2VyKCk7CiAgICAgfQogICAgIAogICAgIC8vIFdoZW4gYSBub2RlJ3Mg
cmVmQ291bnQgZ29lcyBmcm9tIDAgdG8gMSwgaXQgbXVzdCAobG9naWNhbGx5KSByZWN1cnNpdmVs
eSByZWYgYWxsIG9mIGl0cyBjaGlsZHJlbiwgYW5kIHZpY2UgdmVyc2EuCi0gICAgdm9pZCByZWZD
aGlsZHJlbihOb2RlSW5kZXgpOwotICAgIHZvaWQgZGVyZWZDaGlsZHJlbihOb2RlSW5kZXgpOwor
ICAgIHZvaWQgcmVmQ2hpbGRyZW4oTm9kZSopOworICAgIHZvaWQgZGVyZWZDaGlsZHJlbihOb2Rl
Kik7CiB9OwogCiBjbGFzcyBHZXRCeXRlY29kZUJlZ2luRm9yQmxvY2sgewpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJbnNlcnRpb25TZXQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0luc2VydGlvblNldC5oCShyZXZpc2lvbiAxNDA2MTYp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0luc2VydGlvblNldC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zOSwxNCArMzksMTQgQEAgY2xhc3MgSW5zZXJ0aW9uIHsKIHB1YmxpYzoKICAg
ICBJbnNlcnRpb24oKSB7IH0KICAgICAKLSAgICBJbnNlcnRpb24oc2l6ZV90IGluZGV4LCBOb2Rl
SW5kZXggZWxlbWVudCkKKyAgICBJbnNlcnRpb24oc2l6ZV90IGluZGV4LCBOb2RlKiBlbGVtZW50
KQogICAgICAgICA6IG1faW5kZXgoaW5kZXgpCiAgICAgICAgICwgbV9lbGVtZW50KGVsZW1lbnQp
CiAgICAgewogICAgIH0KICAgICAKICAgICBzaXplX3QgaW5kZXgoKSBjb25zdCB7IHJldHVybiBt
X2luZGV4OyB9Ci0gICAgTm9kZUluZGV4IGVsZW1lbnQoKSBjb25zdCB7IHJldHVybiBtX2VsZW1l
bnQ7IH0KKyAgICBOb2RlKiBlbGVtZW50KCkgY29uc3QgeyByZXR1cm4gbV9lbGVtZW50OyB9CiBw
cml2YXRlOgogICAgIHNpemVfdCBtX2luZGV4OwogICAgIE5vZGVJbmRleCBtX2VsZW1lbnQ7CkBA
IC01OSwyMCArNTksMjAgQEAgcHVibGljOgogICAgIHsKICAgICB9CiAgICAgCi0gICAgTm9kZUlu
ZGV4IGluc2VydChjb25zdCBJbnNlcnRpb24mIGluc2VydGlvbikKKyAgICBOb2RlKiBpbnNlcnQo
Y29uc3QgSW5zZXJ0aW9uJiBpbnNlcnRpb24pCiAgICAgewogICAgICAgICBBU1NFUlQoIW1faW5z
ZXJ0aW9ucy5zaXplKCkgfHwgbV9pbnNlcnRpb25zLmxhc3QoKS5pbmRleCgpIDw9IGluc2VydGlv
bi5pbmRleCgpKTsKICAgICAgICAgbV9pbnNlcnRpb25zLmFwcGVuZChpbnNlcnRpb24pOwogICAg
ICAgICByZXR1cm4gaW5zZXJ0aW9uLmVsZW1lbnQoKTsKICAgICB9CiAgICAgCi0gICAgTm9kZUlu
ZGV4IGluc2VydChzaXplX3QgaW5kZXgsIE5vZGVJbmRleCBlbGVtZW50KQorICAgIE5vZGUqIGlu
c2VydChzaXplX3QgaW5kZXgsIE5vZGVJbmRleCBlbGVtZW50KQogICAgIHsKICAgICAgICAgcmV0
dXJuIGluc2VydChJbnNlcnRpb24oaW5kZXgsIGVsZW1lbnQpKTsKICAgICB9CiAKICNkZWZpbmUg
REZHX0RFRklORV9JTlNFUlRfTk9ERSh0ZW1wbGF0ZVByZSwgdGVtcGxhdGVQb3N0LCB0eXBlUGFy
YW1zLCB2YWx1ZVBhcmFtc0NvbW1hLCB2YWx1ZVBhcmFtcywgdmFsdWVBcmdzKSBcCi0gICAgdGVt
cGxhdGVQcmUgdHlwZVBhcmFtcyB0ZW1wbGF0ZVBvc3QgTm9kZUluZGV4IGluc2VydE5vZGUoc2l6
ZV90IGluZGV4LCBSZWZDaGlsZHJlbk1vZGUgcmVmQ2hpbGRyZW5Nb2RlLCBSZWZOb2RlTW9kZSBy
ZWZOb2RlTW9kZSwgU3BlY3VsYXRlZFR5cGUgdHlwZSB2YWx1ZVBhcmFtc0NvbW1hIHZhbHVlUGFy
YW1zKSBcCisgICAgdGVtcGxhdGVQcmUgdHlwZVBhcmFtcyB0ZW1wbGF0ZVBvc3QgTm9kZSogaW5z
ZXJ0Tm9kZShzaXplX3QgaW5kZXgsIFJlZkNoaWxkcmVuTW9kZSByZWZDaGlsZHJlbk1vZGUsIFJl
Zk5vZGVNb2RlIHJlZk5vZGVNb2RlLCBTcGVjdWxhdGVkVHlwZSB0eXBlIHZhbHVlUGFyYW1zQ29t
bWEgdmFsdWVQYXJhbXMpIFwKICAgICB7IFwKICAgICAgICAgcmV0dXJuIGluc2VydChpbmRleCwg
bV9ncmFwaC5hZGROb2RlKHJlZkNoaWxkcmVuTW9kZSwgcmVmTm9kZU1vZGUsIHR5cGUgdmFsdWVQ
YXJhbXNDb21tYSB2YWx1ZUFyZ3MpKTsgXAogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHTG9uZ0xpdmVkU3RhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHTG9uZ0xpdmVkU3RhdGUuY3BwCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdMb25nTGl2ZWRTdGF0ZS5jcHAJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsNDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGR0xvbmdMaXZlZFN0YXRl
LmgiCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBE
RkcgeworCitMb25nTGl2ZWRTdGF0ZTo6TG9uZ0xpdmVkU3RhdGUoKQoreworfQorCitMb25nTGl2
ZWRTdGF0ZTo6fkxvbmdMaXZlZFN0YXRlKCkKK3sKK30KKwordm9pZCBMb25nTGl2ZWRTdGF0ZTo6
c2hyaW5rVG9GaXQoKQoreworICAgIG1fYWxsb2NhdG9yLnJlc2V0KCk7Cit9CisKK30gfSAvLyBu
YW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0xvbmdMaXZlZFN0YXRlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdMb25nTGl2ZWRTdGF0ZS5oCShyZXZpc2lv
biAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdMb25nTGl2ZWRTdGF0ZS5oCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDU1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHTG9uZ0xpdmVkU3RhdGVfaAorI2RlZmluZSBE
RkdMb25nTGl2ZWRTdGF0ZV9oCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2lmIEVO
QUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZHTm9kZUFsbG9jYXRvci5oIgorI2luY2x1ZGUg
PHd0Zi9GYXN0QWxsb2NCYXNlLmg+CisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisKK25h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3MgTG9uZ0xpdmVkU3RhdGUgewor
ICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOyBXVEZfTUFLRV9OT05DT1BZQUJMRShMb25nTGl2
ZWRTdGF0ZSk7CitwdWJsaWM6CisgICAgTG9uZ0xpdmVkU3RhdGUoKTsKKyAgICB+TG9uZ0xpdmVk
U3RhdGUoKTsKKyAgICAKKyAgICB2b2lkIHNocmlua1RvRml0KCk7CisgICAgCisgICAgTm9kZUFs
bG9jYXRvciBtX2FsbG9jYXRvcjsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKwor
I2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZHTG9uZ0xpdmVkU3RhdGVf
aAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5jcHAJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuY3BwCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDU2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdOb2RlLmgiCisKKyNpZiBF
TkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRGR05vZGVBbGxvY2F0b3IuaCIKKworbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCit1bnNpZ25lZCBOb2RlOjppbmRleCgpIGNvbnN0
Cit7CisgICAgcmV0dXJuIE5vZGVBbGxvY2F0b3I6OmFsbG9jYXRvck9mKHRoaXMpLT5pbmRleE9m
KHRoaXMpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKK25hbWVzcGFjZSBXVEYg
eworCit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgTm9kZSogbm9kZSkKK3sK
KyAgICBpZiAoIW5vZGUpCisgICAgICAgIG91dC5wcmludCgiLSIpOworICAgIGVsc2UKKyAgICAg
ICAgb3V0LnByaW50KCJAIiwgbm9kZS0+aW5kZXgoKSk7CisgICAgb3V0LnByaW50KEFiYnJldmlh
dGVkU3BlY3VsYXRpb25EdW1wKG5vZGUtPnByZWRpY3Rpb24oKSkpOworfQorCit9IC8vIG5hbWVz
cGFjZSBXVEYKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR05vZGUuaAkocmV2aXNpb24gMTQwNjE2KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMiwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTY4LDcgKzY4
LDcgQEAgc3RydWN0IE5ld0FycmF5QnVmZmVyRGF0YSB7CiAKIC8vIFRoaXMgdHlwZSB1c2VkIGlu
IHBhc3NpbmcgYW4gaW1tZWRpYXRlIGFyZ3VtZW50IHRvIE5vZGUgY29uc3RydWN0b3I7CiAvLyBk
aXN0aW5ndWlzaGVzIGFuIGltbWVkaWF0ZSB2YWx1ZSAodHlwaWNhbGx5IGFuIGluZGV4IGludG8g
YSBDb2RlQmxvY2sgZGF0YSBzdHJ1Y3R1cmUgLSAKLS8vIGEgY29uc3RhbnQgaW5kZXgsIGFyZ3Vt
ZW50LCBvciBpZGVudGlmaWVyKSBmcm9tIGEgTm9kZUluZGV4LgorLy8gYSBjb25zdGFudCBpbmRl
eCwgYXJndW1lbnQsIG9yIGlkZW50aWZpZXIpIGZyb20gYSBOb2RlKi4KIHN0cnVjdCBPcEluZm8g
ewogICAgIGV4cGxpY2l0IE9wSW5mbyhpbnQzMl90IHZhbHVlKSA6IG1fdmFsdWUoc3RhdGljX2Nh
c3Q8dWludHB0cl90Pih2YWx1ZSkpIHsgfQogICAgIGV4cGxpY2l0IE9wSW5mbyh1aW50MzJfdCB2
YWx1ZSkgOiBtX3ZhbHVlKHN0YXRpY19jYXN0PHVpbnRwdHJfdD4odmFsdWUpKSB7IH0KQEAgLTk5
LDcgKzk5LDcgQEAgc3RydWN0IE5vZGUgewogICAgIH0KICAgICAKICAgICAvLyBDb25zdHJ1Y3Qg
YSBub2RlIHdpdGggdXAgdG8gMyBjaGlsZHJlbiwgbm8gaW1tZWRpYXRlIHZhbHVlLgotICAgIE5v
ZGUoTm9kZVR5cGUgb3AsIENvZGVPcmlnaW4gY29kZU9yaWdpbiwgTm9kZUluZGV4IGNoaWxkMSA9
IE5vTm9kZSwgTm9kZUluZGV4IGNoaWxkMiA9IE5vTm9kZSwgTm9kZUluZGV4IGNoaWxkMyA9IE5v
Tm9kZSkKKyAgICBOb2RlKE5vZGVUeXBlIG9wLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIE5vZGUq
IGNoaWxkMSA9IDAsIE5vZGUqIGNoaWxkMiA9IDAsIE5vZGUqIGNoaWxkMyA9IDApCiAgICAgICAg
IDogY29kZU9yaWdpbihjb2RlT3JpZ2luKQogICAgICAgICAsIGNoaWxkcmVuKEFkamFjZW5jeUxp
c3Q6OkZpeGVkLCBjaGlsZDEsIGNoaWxkMiwgY2hpbGQzKQogICAgICAgICAsIG1fdmlydHVhbFJl
Z2lzdGVyKEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIpCkBAIC0xMTEsNyArMTExLDcgQEAgc3RydWN0
IE5vZGUgewogICAgIH0KIAogICAgIC8vIENvbnN0cnVjdCBhIG5vZGUgd2l0aCB1cCB0byAzIGNo
aWxkcmVuIGFuZCBhbiBpbW1lZGlhdGUgdmFsdWUuCi0gICAgTm9kZShOb2RlVHlwZSBvcCwgQ29k
ZU9yaWdpbiBjb2RlT3JpZ2luLCBPcEluZm8gaW1tLCBOb2RlSW5kZXggY2hpbGQxID0gTm9Ob2Rl
LCBOb2RlSW5kZXggY2hpbGQyID0gTm9Ob2RlLCBOb2RlSW5kZXggY2hpbGQzID0gTm9Ob2RlKQor
ICAgIE5vZGUoTm9kZVR5cGUgb3AsIENvZGVPcmlnaW4gY29kZU9yaWdpbiwgT3BJbmZvIGltbSwg
Tm9kZSogY2hpbGQxID0gMCwgTm9kZSogY2hpbGQyID0gMCwgTm9kZSogY2hpbGQzID0gMCkKICAg
ICAgICAgOiBjb2RlT3JpZ2luKGNvZGVPcmlnaW4pCiAgICAgICAgICwgY2hpbGRyZW4oQWRqYWNl
bmN5TGlzdDo6Rml4ZWQsIGNoaWxkMSwgY2hpbGQyLCBjaGlsZDMpCiAgICAgICAgICwgbV92aXJ0
dWFsUmVnaXN0ZXIoSW52YWxpZFZpcnR1YWxSZWdpc3RlcikKQEAgLTEyNCw3ICsxMjQsNyBAQCBz
dHJ1Y3QgTm9kZSB7CiAgICAgfQogCiAgICAgLy8gQ29uc3RydWN0IGEgbm9kZSB3aXRoIHVwIHRv
IDMgY2hpbGRyZW4gYW5kIHR3byBpbW1lZGlhdGUgdmFsdWVzLgotICAgIE5vZGUoTm9kZVR5cGUg
b3AsIENvZGVPcmlnaW4gY29kZU9yaWdpbiwgT3BJbmZvIGltbTEsIE9wSW5mbyBpbW0yLCBOb2Rl
SW5kZXggY2hpbGQxID0gTm9Ob2RlLCBOb2RlSW5kZXggY2hpbGQyID0gTm9Ob2RlLCBOb2RlSW5k
ZXggY2hpbGQzID0gTm9Ob2RlKQorICAgIE5vZGUoTm9kZVR5cGUgb3AsIENvZGVPcmlnaW4gY29k
ZU9yaWdpbiwgT3BJbmZvIGltbTEsIE9wSW5mbyBpbW0yLCBOb2RlKiBjaGlsZDEgPSAwLCBOb2Rl
KiBjaGlsZDIgPSAwLCBOb2RlKiBjaGlsZDMgPSAwKQogICAgICAgICA6IGNvZGVPcmlnaW4oY29k
ZU9yaWdpbikKICAgICAgICAgLCBjaGlsZHJlbihBZGphY2VuY3lMaXN0OjpGaXhlZCwgY2hpbGQx
LCBjaGlsZDIsIGNoaWxkMykKICAgICAgICAgLCBtX3ZpcnR1YWxSZWdpc3RlcihJbnZhbGlkVmly
dHVhbFJlZ2lzdGVyKQpAQCAtMTU0LDYgKzE1NCw5IEBAIHN0cnVjdCBOb2RlIHsKICAgICBOb2Rl
VHlwZSBvcCgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PE5vZGVUeXBlPihtX29wKTsgfQog
ICAgIE5vZGVGbGFncyBmbGFncygpIGNvbnN0IHsgcmV0dXJuIG1fZmxhZ3M7IH0KICAgICAKKyAg
ICAvLyBUaGlzIGlzIG5vdCBhIGZhc3QgbWV0aG9kLgorICAgIHVuc2lnbmVkIGluZGV4KCkgY29u
c3Q7CisgICAgCiAgICAgdm9pZCBzZXRPcChOb2RlVHlwZSBvcCkKICAgICB7CiAgICAgICAgIG1f
b3AgPSBvcDsKQEAgLTI4MSw3ICsyODQsNyBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAgIGNvbnZl
cnRUb1N0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50KHN0cnVjdHVyZVNldCgpLnNpbmdsZXRv
blN0cnVjdHVyZSgpKTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBjb252ZXJ0VG9HZXRCeU9mZnNl
dCh1bnNpZ25lZCBzdG9yYWdlQWNjZXNzRGF0YUluZGV4LCBOb2RlSW5kZXggc3RvcmFnZSkKKyAg
ICB2b2lkIGNvbnZlcnRUb0dldEJ5T2Zmc2V0KHVuc2lnbmVkIHN0b3JhZ2VBY2Nlc3NEYXRhSW5k
ZXgsIE5vZGUqIHN0b3JhZ2UpCiAgICAgewogICAgICAgICBBU1NFUlQobV9vcCA9PSBHZXRCeUlk
IHx8IG1fb3AgPT0gR2V0QnlJZEZsdXNoKTsKICAgICAgICAgbV9vcEluZm8gPSBzdG9yYWdlQWNj
ZXNzRGF0YUluZGV4OwpAQCAtMjkwLDcgKzI5Myw3IEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAg
bV9mbGFncyAmPSB+Tm9kZUNsb2JiZXJzV29ybGQ7CiAgICAgfQogICAgIAotICAgIHZvaWQgY29u
dmVydFRvUHV0QnlPZmZzZXQodW5zaWduZWQgc3RvcmFnZUFjY2Vzc0RhdGFJbmRleCwgTm9kZUlu
ZGV4IHN0b3JhZ2UpCisgICAgdm9pZCBjb252ZXJ0VG9QdXRCeU9mZnNldCh1bnNpZ25lZCBzdG9y
YWdlQWNjZXNzRGF0YUluZGV4LCBOb2RlKiBzdG9yYWdlKQogICAgIHsKICAgICAgICAgQVNTRVJU
KG1fb3AgPT0gUHV0QnlJZCB8fCBtX29wID09IFB1dEJ5SWREaXJlY3QpOwogICAgICAgICBtX29w
SW5mbyA9IHN0b3JhZ2VBY2Nlc3NEYXRhSW5kZXg7CkBAIC05MjAsOSArOTIzLDEwIEBAIHN0cnVj
dCBOb2RlIHsKICAgICAgICAgcmV0dXJuIG1fcmVmQ291bnQ7CiAgICAgfQogCi0gICAgdm9pZCBy
ZWYoKQorICAgIE5vZGUqIHJlZigpCiAgICAgewogICAgICAgICBtX3JlZkNvdW50Kys7CisgICAg
ICAgIHJldHVybiB0aGlzOwogICAgIH0KIAogICAgIHVuc2lnbmVkIHBvc3RmaXhSZWYoKQpAQCAt
MTEzNSw0NCArMTEzOSw0NCBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAgIHJldHVybiBpc0NlbGxT
cGVjdWxhdGlvbihwcmVkaWN0aW9uKCkpOwogICAgIH0KICAgICAKLSAgICBzdGF0aWMgYm9vbCBz
aG91bGRTcGVjdWxhdGVJbnRlZ2VyKE5vZGUmIG9wMSwgTm9kZSYgb3AyKQorICAgIHN0YXRpYyBi
b29sIHNob3VsZFNwZWN1bGF0ZUludGVnZXIoTm9kZSogb3AxLCBOb2RlKiBvcDIpCiAgICAgewot
ICAgICAgICByZXR1cm4gb3AxLnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKSAmJiBvcDIuc2hvdWxk
U3BlY3VsYXRlSW50ZWdlcigpOworICAgICAgICByZXR1cm4gb3AxLT5zaG91bGRTcGVjdWxhdGVJ
bnRlZ2VyKCkgJiYgb3AyLT5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCk7CiAgICAgfQogICAgIAot
ICAgIHN0YXRpYyBib29sIHNob3VsZFNwZWN1bGF0ZUludGVnZXJGb3JBcml0aG1ldGljKE5vZGUm
IG9wMSwgTm9kZSYgb3AyKQorICAgIHN0YXRpYyBib29sIHNob3VsZFNwZWN1bGF0ZUludGVnZXJG
b3JBcml0aG1ldGljKE5vZGUqIG9wMSwgTm9kZSogb3AyKQogICAgIHsKLSAgICAgICAgcmV0dXJu
IG9wMS5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyRm9yQXJpdGhtZXRpYygpICYmIG9wMi5zaG91bGRT
cGVjdWxhdGVJbnRlZ2VyRm9yQXJpdGhtZXRpYygpOworICAgICAgICByZXR1cm4gb3AxLT5zaG91
bGRTcGVjdWxhdGVJbnRlZ2VyRm9yQXJpdGhtZXRpYygpICYmIG9wMi0+c2hvdWxkU3BlY3VsYXRl
SW50ZWdlckZvckFyaXRobWV0aWMoKTsKICAgICB9CiAgICAgCi0gICAgc3RhdGljIGJvb2wgc2hv
dWxkU3BlY3VsYXRlSW50ZWdlckV4cGVjdGluZ0RlZmluZWQoTm9kZSYgb3AxLCBOb2RlJiBvcDIp
CisgICAgc3RhdGljIGJvb2wgc2hvdWxkU3BlY3VsYXRlSW50ZWdlckV4cGVjdGluZ0RlZmluZWQo
Tm9kZSogb3AxLCBOb2RlKiBvcDIpCiAgICAgewotICAgICAgICByZXR1cm4gb3AxLnNob3VsZFNw
ZWN1bGF0ZUludGVnZXJFeHBlY3RpbmdEZWZpbmVkKCkgJiYgb3AyLnNob3VsZFNwZWN1bGF0ZUlu
dGVnZXJFeHBlY3RpbmdEZWZpbmVkKCk7CisgICAgICAgIHJldHVybiBvcDEtPnNob3VsZFNwZWN1
bGF0ZUludGVnZXJFeHBlY3RpbmdEZWZpbmVkKCkgJiYgb3AyLT5zaG91bGRTcGVjdWxhdGVJbnRl
Z2VyRXhwZWN0aW5nRGVmaW5lZCgpOwogICAgIH0KICAgICAKLSAgICBzdGF0aWMgYm9vbCBzaG91
bGRTcGVjdWxhdGVEb3VibGVGb3JBcml0aG1ldGljKE5vZGUmIG9wMSwgTm9kZSYgb3AyKQorICAg
IHN0YXRpYyBib29sIHNob3VsZFNwZWN1bGF0ZURvdWJsZUZvckFyaXRobWV0aWMoTm9kZSogb3Ax
LCBOb2RlKiBvcDIpCiAgICAgewotICAgICAgICByZXR1cm4gb3AxLnNob3VsZFNwZWN1bGF0ZURv
dWJsZUZvckFyaXRobWV0aWMoKSAmJiBvcDIuc2hvdWxkU3BlY3VsYXRlRG91YmxlRm9yQXJpdGht
ZXRpYygpOworICAgICAgICByZXR1cm4gb3AxLT5zaG91bGRTcGVjdWxhdGVEb3VibGVGb3JBcml0
aG1ldGljKCkgJiYgb3AyLT5zaG91bGRTcGVjdWxhdGVEb3VibGVGb3JBcml0aG1ldGljKCk7CiAg
ICAgfQogICAgIAotICAgIHN0YXRpYyBib29sIHNob3VsZFNwZWN1bGF0ZU51bWJlcihOb2RlJiBv
cDEsIE5vZGUmIG9wMikKKyAgICBzdGF0aWMgYm9vbCBzaG91bGRTcGVjdWxhdGVOdW1iZXIoTm9k
ZSogb3AxLCBOb2RlKiBvcDIpCiAgICAgewotICAgICAgICByZXR1cm4gb3AxLnNob3VsZFNwZWN1
bGF0ZU51bWJlcigpICYmIG9wMi5zaG91bGRTcGVjdWxhdGVOdW1iZXIoKTsKKyAgICAgICAgcmV0
dXJuIG9wMS0+c2hvdWxkU3BlY3VsYXRlTnVtYmVyKCkgJiYgb3AyLT5zaG91bGRTcGVjdWxhdGVO
dW1iZXIoKTsKICAgICB9CiAgICAgCi0gICAgc3RhdGljIGJvb2wgc2hvdWxkU3BlY3VsYXRlTnVt
YmVyRXhwZWN0aW5nRGVmaW5lZChOb2RlJiBvcDEsIE5vZGUmIG9wMikKKyAgICBzdGF0aWMgYm9v
bCBzaG91bGRTcGVjdWxhdGVOdW1iZXJFeHBlY3RpbmdEZWZpbmVkKE5vZGUqIG9wMSwgTm9kZSog
b3AyKQogICAgIHsKLSAgICAgICAgcmV0dXJuIG9wMS5zaG91bGRTcGVjdWxhdGVOdW1iZXJFeHBl
Y3RpbmdEZWZpbmVkKCkgJiYgb3AyLnNob3VsZFNwZWN1bGF0ZU51bWJlckV4cGVjdGluZ0RlZmlu
ZWQoKTsKKyAgICAgICAgcmV0dXJuIG9wMS0+c2hvdWxkU3BlY3VsYXRlTnVtYmVyRXhwZWN0aW5n
RGVmaW5lZCgpICYmIG9wMi0+c2hvdWxkU3BlY3VsYXRlTnVtYmVyRXhwZWN0aW5nRGVmaW5lZCgp
OwogICAgIH0KICAgICAKLSAgICBzdGF0aWMgYm9vbCBzaG91bGRTcGVjdWxhdGVGaW5hbE9iamVj
dChOb2RlJiBvcDEsIE5vZGUmIG9wMikKKyAgICBzdGF0aWMgYm9vbCBzaG91bGRTcGVjdWxhdGVG
aW5hbE9iamVjdChOb2RlKiBvcDEsIE5vZGUqIG9wMikKICAgICB7Ci0gICAgICAgIHJldHVybiBv
cDEuc2hvdWxkU3BlY3VsYXRlRmluYWxPYmplY3QoKSAmJiBvcDIuc2hvdWxkU3BlY3VsYXRlRmlu
YWxPYmplY3QoKTsKKyAgICAgICAgcmV0dXJuIG9wMS0+c2hvdWxkU3BlY3VsYXRlRmluYWxPYmpl
Y3QoKSAmJiBvcDItPnNob3VsZFNwZWN1bGF0ZUZpbmFsT2JqZWN0KCk7CiAgICAgfQogCi0gICAg
c3RhdGljIGJvb2wgc2hvdWxkU3BlY3VsYXRlQXJyYXkoTm9kZSYgb3AxLCBOb2RlJiBvcDIpCisg
ICAgc3RhdGljIGJvb2wgc2hvdWxkU3BlY3VsYXRlQXJyYXkoTm9kZSogb3AxLCBOb2RlKiBvcDIp
CiAgICAgewotICAgICAgICByZXR1cm4gb3AxLnNob3VsZFNwZWN1bGF0ZUFycmF5KCkgJiYgb3Ay
LnNob3VsZFNwZWN1bGF0ZUFycmF5KCk7CisgICAgICAgIHJldHVybiBvcDEtPnNob3VsZFNwZWN1
bGF0ZUFycmF5KCkgJiYgb3AyLT5zaG91bGRTcGVjdWxhdGVBcnJheSgpOwogICAgIH0KICAgICAK
ICAgICBib29sIGNhblNwZWN1bGF0ZUludGVnZXIoKQpAQCAtMTE4NCwxNSArMTE4OCwxNyBAQCBz
dHJ1Y3QgTm9kZSB7CiAgICAgewogICAgICAgICBpZiAoIWNoaWxkMSgpKQogICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICBvdXQucHJpbnRmKCJAJXUiLCBjaGlsZDEoKS5pbmRleCgpKTsKKyAg
ICAgICAgb3V0LnByaW50ZigiQCV1IiwgY2hpbGQxKCktPmluZGV4KCkpOwogICAgICAgICBpZiAo
IWNoaWxkMigpKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBvdXQucHJpbnRmKCIsIEAl
dSIsIGNoaWxkMigpLmluZGV4KCkpOworICAgICAgICBvdXQucHJpbnRmKCIsIEAldSIsIGNoaWxk
MigpLT5pbmRleCgpKTsKICAgICAgICAgaWYgKCFjaGlsZDMoKSkKICAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgb3V0LnByaW50ZigiLCBAJXUiLCBjaGlsZDMoKS5pbmRleCgpKTsKKyAgICAg
ICAgb3V0LnByaW50ZigiLCBAJXUiLCBjaGlsZDMoKS0+aW5kZXgoKSk7CiAgICAgfQogICAgIAor
ICAgIC8vIE5CLiBUaGlzIGNsYXNzIG11c3QgaGF2ZSBhIHRyaXZpYWwgZGVzdHJ1Y3Rvci4KKyAg
ICAKICAgICAvLyBVc2VkIHRvIGxvb2sgdXAgZXhjZXB0aW9uIGhhbmRsaW5nIGluZm9ybWF0aW9u
IChjdXJyZW50bHkgaW1wbGVtZW50ZWQgYXMgYSBieXRlY29kZSBpbmRleCkuCiAgICAgQ29kZU9y
aWdpbiBjb2RlT3JpZ2luOwogICAgIC8vIFJlZmVyZW5jZXMgdG8gdXAgdG8gMyBjaGlsZHJlbiwg
b3IgbGlua3MgdG8gYSB2YXJpYWJsZSBsZW5ndGggc2V0IG9mIGNoaWxkcmVuLgpAQCAtMTIxNSwx
MCArMTIyMSwxNiBAQCBwcml2YXRlOgogcHVibGljOgogICAgIC8vIEZpZWxkcyB1c2VkIGJ5IHZh
cmlvdXMgYW5hbHlzZXMuCiAgICAgQWJzdHJhY3RWYWx1ZSB2YWx1ZTsKLSAgICBOb2RlSW5kZXgg
cmVwbGFjZW1lbnQ7CisgICAgTm9kZSogcmVwbGFjZW1lbnQ7CiB9OwogCiB9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6REZHCiAKK25hbWVzcGFjZSBXVEYgeworCit2b2lkIHByaW50SW50ZXJuYWwoUHJp
bnRTdHJlYW0mLCBOb2RlKik7CisKK30gLy8gbmFtZXNwYWNlIFdURgorCiAjZW5kaWYKICNlbmRp
ZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlQWxsb2NhdG9yLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlQWxsb2NhdG9yLmgJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVBbGxvY2F0
b3IuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIERGR05vZGVBbGxvY2F0b3JfaAorI2Rl
ZmluZSBERkdOb2RlQWxsb2NhdG9yX2gKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisj
aWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJERkdBbGxvY2F0b3IuaCIKKyNpbmNsdWRl
ICJERkdOb2RlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKwordHlwZWRl
ZiBBbGxvY2F0b3I8Tm9kZSwgNDA5NT4gTm9kZUFsbG9jYXRvcjsKKworaW5saW5lIHZvaWQqIG9w
ZXJhdG9yIG5ldyAoc2l6ZV90IHNpemUsIE5vZGVBbGxvY2F0b3ImIGFsbG9jYXRvcikKK3sKKyAg
ICBBU1NFUlQoc2l6ZSA9PSBzaXplb2YoTm9kZSkpOworICAgIHJldHVybiBhbGxvY2F0b3IuYWxs
b2NhdGUoKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5B
QkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdOb2RlQWxsb2NhdG9yX2gKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJv
cGFnYXRpb25QaGFzZS5jcHAJKHJldmlzaW9uIDE0MDYxNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTIsIDIw
MTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC04NSw3NSArODUsNzMgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBib29s
IHNldFByZWRpY3Rpb24oU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbikKICAgICB7Ci0gICAgICAg
IEFTU0VSVChtX2dyYXBoW21fY29tcGlsZUluZGV4XS5oYXNSZXN1bHQoKSk7CisgICAgICAgIEFT
U0VSVChtX2N1cnJlbnROb2RlLT5oYXNSZXN1bHQoKSk7CiAgICAgICAgIAogICAgICAgICAvLyBz
ZXRQcmVkaWN0aW9uKCkgaXMgdXNlZCB3aGVuIHdlIGtub3cgdGhhdCB0aGVyZSBpcyBubyB3YXkg
dGhhdCB3ZSBjYW4gY2hhbmdlCiAgICAgICAgIC8vIG91ciBtaW5kcyBhYm91dCB3aGF0IHRoZSBw
cmVkaWN0aW9uIGlzIGdvaW5nIHRvIGJlLiBUaGVyZSBpcyBubyBzZW1hbnRpYwogICAgICAgICAv
LyBkaWZmZXJlbmNlIGJldHdlZW4gc2V0UHJlZGljdGlvbigpIGFuZCBtZXJnZVNwZWN1bGF0aW9u
KCkgb3RoZXIgdGhhbiB0aGUKICAgICAgICAgLy8gaW5jcmVhc2VkIGNoZWNraW5nIHRvIHZhbGlk
YXRlIHRoaXMgcHJvcGVydHkuCi0gICAgICAgIEFTU0VSVChtX2dyYXBoW21fY29tcGlsZUluZGV4
XS5wcmVkaWN0aW9uKCkgPT0gU3BlY05vbmUgfHwgbV9ncmFwaFttX2NvbXBpbGVJbmRleF0ucHJl
ZGljdGlvbigpID09IHByZWRpY3Rpb24pOworICAgICAgICBBU1NFUlQobV9jdXJyZW50Tm9kZS0+
cHJlZGljdGlvbigpID09IFNwZWNOb25lIHx8IG1fY3VycmVudE5vZGUtPnByZWRpY3Rpb24oKSA9
PSBwcmVkaWN0aW9uKTsKICAgICAgICAgCi0gICAgICAgIHJldHVybiBtX2dyYXBoW21fY29tcGls
ZUluZGV4XS5wcmVkaWN0KHByZWRpY3Rpb24pOworICAgICAgICByZXR1cm4gbV9jdXJyZW50Tm9k
ZS0+cHJlZGljdChwcmVkaWN0aW9uKTsKICAgICB9CiAgICAgCiAgICAgYm9vbCBtZXJnZVByZWRp
Y3Rpb24oU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbikKICAgICB7Ci0gICAgICAgIEFTU0VSVCht
X2dyYXBoW21fY29tcGlsZUluZGV4XS5oYXNSZXN1bHQoKSk7CisgICAgICAgIEFTU0VSVChtX2N1
cnJlbnROb2RlLT5oYXNSZXN1bHQoKSk7CiAgICAgICAgIAotICAgICAgICByZXR1cm4gbV9ncmFw
aFttX2NvbXBpbGVJbmRleF0ucHJlZGljdChwcmVkaWN0aW9uKTsKKyAgICAgICAgcmV0dXJuIG1f
Y3VycmVudE5vZGUtPnByZWRpY3QocHJlZGljdGlvbik7CiAgICAgfQogICAgIAotICAgIGJvb2wg
aXNOb3ROZWdaZXJvKE5vZGVJbmRleCBub2RlSW5kZXgpCisgICAgYm9vbCBpc05vdE5lZ1plcm8o
Tm9kZSogbm9kZSkKICAgICB7Ci0gICAgICAgIGlmICghbV9ncmFwaC5pc051bWJlckNvbnN0YW50
KG5vZGVJbmRleCkpCisgICAgICAgIGlmICghbV9ncmFwaC5pc051bWJlckNvbnN0YW50KG5vZGUp
KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBkb3VibGUgdmFsdWUgPSBtX2dy
YXBoLnZhbHVlT2ZOdW1iZXJDb25zdGFudChub2RlSW5kZXgpOworICAgICAgICBkb3VibGUgdmFs
dWUgPSBtX2dyYXBoLnZhbHVlT2ZOdW1iZXJDb25zdGFudChub2RlKTsKICAgICAgICAgcmV0dXJu
ICF2YWx1ZSAmJiAxLjAgLyB2YWx1ZSA8IDAuMDsKICAgICB9CiAgICAgCi0gICAgYm9vbCBpc05v
dFplcm8oTm9kZUluZGV4IG5vZGVJbmRleCkKKyAgICBib29sIGlzTm90WmVybyhOb2RlKiBub2Rl
KQogICAgIHsKLSAgICAgICAgaWYgKCFtX2dyYXBoLmlzTnVtYmVyQ29uc3RhbnQobm9kZUluZGV4
KSkKKyAgICAgICAgaWYgKCFtX2dyYXBoLmlzTnVtYmVyQ29uc3RhbnQobm9kZSkpCiAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIHJldHVybiAhIW1fZ3JhcGgudmFsdWVPZk51bWJl
ckNvbnN0YW50KG5vZGVJbmRleCk7CisgICAgICAgIHJldHVybiAhIW1fZ3JhcGgudmFsdWVPZk51
bWJlckNvbnN0YW50KG5vZGUpOwogICAgIH0KICAgICAKLSAgICBib29sIGlzV2l0aGluUG93ZXJP
ZlR3b0ZvckNvbnN0YW50KE5vZGUmIG5vZGUsIGludCBwb3dlcikKKyAgICBib29sIGlzV2l0aGlu
UG93ZXJPZlR3b0ZvckNvbnN0YW50KE5vZGUqIG5vZGUsIGludCBwb3dlcikKICAgICB7Ci0gICAg
ICAgIEpTVmFsdWUgaW1tZWRpYXRlVmFsdWUgPSBub2RlLnZhbHVlT2ZKU0NvbnN0YW50KGNvZGVC
bG9jaygpKTsKKyAgICAgICAgSlNWYWx1ZSBpbW1lZGlhdGVWYWx1ZSA9IG5vZGUtPnZhbHVlT2ZK
U0NvbnN0YW50KGNvZGVCbG9jaygpKTsKICAgICAgICAgaWYgKCFpbW1lZGlhdGVWYWx1ZS5pc0lu
dDMyKCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGludDMyX3QgaW50SW1t
ZWRpYXRlID0gaW1tZWRpYXRlVmFsdWUuYXNJbnQzMigpOwogICAgICAgICByZXR1cm4gaW50SW1t
ZWRpYXRlID4gLSgxIDw8IHBvd2VyKSAmJiBpbnRJbW1lZGlhdGUgPCAoMSA8PCBwb3dlcik7CiAg
ICAgfQogICAgIAotICAgIGJvb2wgaXNXaXRoaW5Qb3dlck9mVHdvTm9uUmVjdXJzaXZlKE5vZGVJ
bmRleCBub2RlSW5kZXgsIGludCBwb3dlcikKKyAgICBib29sIGlzV2l0aGluUG93ZXJPZlR3b05v
blJlY3Vyc2l2ZShOb2RlKiBub2RlLCBpbnQgcG93ZXIpCiAgICAgewotICAgICAgICBOb2RlJiBu
b2RlID0gbV9ncmFwaFtub2RlSW5kZXhdOwotICAgICAgICBpZiAobm9kZS5vcCgpICE9IEpTQ29u
c3RhbnQpCisgICAgICAgIGlmIChub2RlLT5vcCgpICE9IEpTQ29uc3RhbnQpCiAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgICAgIHJldHVybiBpc1dpdGhpblBvd2VyT2ZUd29Gb3JDb25z
dGFudChub2RlLCBwb3dlcik7CiAgICAgfQogICAgIAotICAgIGJvb2wgaXNXaXRoaW5Qb3dlck9m
VHdvKE5vZGVJbmRleCBub2RlSW5kZXgsIGludCBwb3dlcikKKyAgICBib29sIGlzV2l0aGluUG93
ZXJPZlR3byhOb2RlKiBub2RlLCBpbnQgcG93ZXIpCiAgICAgewotICAgICAgICBOb2RlJiBub2Rl
ID0gbV9ncmFwaFtub2RlSW5kZXhdOwotICAgICAgICBzd2l0Y2ggKG5vZGUub3AoKSkgeworICAg
ICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKICAgICAgICAgY2FzZSBKU0NvbnN0YW50OiB7CiAg
ICAgICAgICAgICByZXR1cm4gaXNXaXRoaW5Qb3dlck9mVHdvRm9yQ29uc3RhbnQobm9kZSwgcG93
ZXIpOwogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBCaXRBbmQ6IHsKLSAg
ICAgICAgICAgIHJldHVybiBpc1dpdGhpblBvd2VyT2ZUd29Ob25SZWN1cnNpdmUobm9kZS5jaGls
ZDEoKS5pbmRleCgpLCBwb3dlcikKLSAgICAgICAgICAgICAgICB8fCBpc1dpdGhpblBvd2VyT2ZU
d29Ob25SZWN1cnNpdmUobm9kZS5jaGlsZDIoKS5pbmRleCgpLCBwb3dlcik7CisgICAgICAgICAg
ICByZXR1cm4gaXNXaXRoaW5Qb3dlck9mVHdvTm9uUmVjdXJzaXZlKG5vZGUtPmNoaWxkMSgpLm5v
ZGUoKSwgcG93ZXIpCisgICAgICAgICAgICAgICAgfHwgaXNXaXRoaW5Qb3dlck9mVHdvTm9uUmVj
dXJzaXZlKG5vZGUtPmNoaWxkMigpLm5vZGUoKSwgcG93ZXIpOwogICAgICAgICB9CiAgICAgICAg
ICAgICAKICAgICAgICAgY2FzZSBCaXRSU2hpZnQ6CiAgICAgICAgIGNhc2UgQml0VVJTaGlmdDog
ewotICAgICAgICAgICAgTm9kZSYgc2hpZnRBbW91bnQgPSBtX2dyYXBoW25vZGUuY2hpbGQyKCld
OwotICAgICAgICAgICAgaWYgKHNoaWZ0QW1vdW50Lm9wKCkgIT0gSlNDb25zdGFudCkKKyAgICAg
ICAgICAgIE5vZGUqIHNoaWZ0QW1vdW50ID0gbm9kZS0+Y2hpbGQyKCkubm9kZSgpOworICAgICAg
ICAgICAgaWYgKHNoaWZ0QW1vdW50LT5vcCgpICE9IEpTQ29uc3RhbnQpCiAgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgSlNWYWx1ZSBpbW1lZGlhdGVWYWx1ZSA9IHNo
aWZ0QW1vdW50LnZhbHVlT2ZKU0NvbnN0YW50KGNvZGVCbG9jaygpKTsKKyAgICAgICAgICAgIEpT
VmFsdWUgaW1tZWRpYXRlVmFsdWUgPSBzaGlmdEFtb3VudC0+dmFsdWVPZkpTQ29uc3RhbnQoY29k
ZUJsb2NrKCkpOwogICAgICAgICAgICAgaWYgKCFpbW1lZGlhdGVWYWx1ZS5pc0ludDMyKCkpCiAg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgcmV0dXJuIGltbWVkaWF0
ZVZhbHVlID4gMzIgLSBwb3dlcjsKQEAgLTE3OCwxNiArMTc2LDE2IEBAIHByaXZhdGU6CiAgICAg
ICAgIHJldHVybiBzcGVjdWxhdGVkRG91YmxlVHlwZUZvclByZWRpY3Rpb24obWVyZ2VTcGVjdWxh
dGlvbnMobGVmdCwgcmlnaHQpKTsKICAgICB9CiAKLSAgICB2b2lkIHByb3BhZ2F0ZShOb2RlJiBu
b2RlKQorICAgIHZvaWQgcHJvcGFnYXRlKE5vZGUqIG5vZGUpCiAgICAgewotICAgICAgICBpZiAo
IW5vZGUuc2hvdWxkR2VuZXJhdGUoKSkKKyAgICAgICAgaWYgKCFub2RlLT5zaG91bGRHZW5lcmF0
ZSgpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAKLSAgICAgICAgTm9kZVR5cGUgb3Ag
PSBub2RlLm9wKCk7Ci0gICAgICAgIE5vZGVGbGFncyBmbGFncyA9IG5vZGUuZmxhZ3MoKSAmIE5v
ZGVCYWNrUHJvcE1hc2s7CisgICAgICAgIE5vZGVUeXBlIG9wID0gbm9kZS0+b3AoKTsKKyAgICAg
ICAgTm9kZUZsYWdzIGZsYWdzID0gbm9kZS0+ZmxhZ3MoKSAmIE5vZGVCYWNrUHJvcE1hc2s7CiAK
ICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCi0gICAgICAgIGRhdGFM
b2dGKCIgICAlcyBAJXU6ICVzICIsIEdyYXBoOjpvcE5hbWUob3ApLCBtX2NvbXBpbGVJbmRleCwg
bm9kZUZsYWdzQXNTdHJpbmcoZmxhZ3MpKTsKKyAgICAgICAgZGF0YUxvZygiICAgIiwgR3JhcGg6
Om9wTmFtZShvcCksICIgIiwgbV9jdXJyZW50Tm9kZSwgIjogIiwgbm9kZUZsYWdzQXNTdHJpbmco
ZmxhZ3MpLCAiICIpOwogI2VuZGlmCiAgICAgICAgIAogICAgICAgICBib29sIGNoYW5nZWQgPSBm
YWxzZTsKQEAgLTE5NSwxMiArMTkzLDEyIEBAIHByaXZhdGU6CiAgICAgICAgIHN3aXRjaCAob3Ap
IHsKICAgICAgICAgY2FzZSBKU0NvbnN0YW50OgogICAgICAgICBjYXNlIFdlYWtKU0NvbnN0YW50
OiB7Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IHNldFByZWRpY3Rpb24oc3BlY3VsYXRpb25Gcm9t
VmFsdWUobV9ncmFwaC52YWx1ZU9mSlNDb25zdGFudChtX2NvbXBpbGVJbmRleCkpKTsKKyAgICAg
ICAgICAgIGNoYW5nZWQgfD0gc2V0UHJlZGljdGlvbihzcGVjdWxhdGlvbkZyb21WYWx1ZShtX2dy
YXBoLnZhbHVlT2ZKU0NvbnN0YW50KG5vZGUpKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgfQogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgR2V0TG9jYWw6IHsKLSAgICAgICAgICAg
IFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhID0gbm9kZS52YXJpYWJsZUFj
Y2Vzc0RhdGEoKTsKKyAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nl
c3NEYXRhID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CiAgICAgICAgICAgICBTcGVjdWxh
dGVkVHlwZSBwcmVkaWN0aW9uID0gdmFyaWFibGVBY2Nlc3NEYXRhLT5wcmVkaWN0aW9uKCk7CiAg
ICAgICAgICAgICBpZiAocHJlZGljdGlvbikKICAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1l
cmdlUHJlZGljdGlvbihwcmVkaWN0aW9uKTsKQEAgLTIxMCwyMSArMjA4LDIxIEBAIHByaXZhdGU6
CiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBjYXNlIFNldExvY2FsOiB7Ci0gICAg
ICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9IG5vZGUudmFy
aWFibGVBY2Nlc3NEYXRhKCk7Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IHZhcmlhYmxlQWNjZXNz
RGF0YS0+cHJlZGljdChtX2dyYXBoW25vZGUuY2hpbGQxKCldLnByZWRpY3Rpb24oKSk7CisgICAg
ICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9IG5vZGUtPnZh
cmlhYmxlQWNjZXNzRGF0YSgpOworICAgICAgICAgICAgY2hhbmdlZCB8PSB2YXJpYWJsZUFjY2Vz
c0RhdGEtPnByZWRpY3Qobm9kZS0+Y2hpbGQxKCktPnByZWRpY3Rpb24oKSk7CiAKICAgICAgICAg
ICAgIC8vIEFzc3VtZSBjb25zZXJ2YXRpdmVseSB0aGF0IGEgU2V0TG9jYWwgaW1wbGllcyB0aGF0
IHRoZSB2YWx1ZSBtYXkgZmxvdyB0aHJvdWdoIGEgbG9vcCwKICAgICAgICAgICAgIC8vIGFuZCBz
byB3ZSB3b3VsZCBoYXZlIG92ZXJmbG93IGxlYWRpbmcgdG8gdGhlIHByb2dyYW0gIm9ic2Vydmlu
ZyIgbnVtYmVycyBldmVuIGlmIGFsbAogICAgICAgICAgICAgLy8gdXNlcnMgb2YgdGhlIHZhbHVl
IGFyZSBkb2luZyB0b0ludDMyLiBJdCBtaWdodCBiZSB3b3J0aHdoaWxlIHRvIHJldmlzaXQgdGhp
cyBhdCBzb21lCiAgICAgICAgICAgICAvLyBwb2ludCBhbmQgYWN0dWFsbHkgY2hlY2sgaWYgdGhl
IGRhdGEgZmxvdyBpbnZvbHZlcyBsb29wcywgYnV0IHJpZ2h0IG5vdyBJIGRvbid0IHRoaW5rCiAg
ICAgICAgICAgICAvLyB3ZSBoYXZlIGV2aWRlbmNlIHRoYXQgdGhpcyB3b3VsZCBiZSBiZW5lZmlj
aWFsIGZvciBiZW5jaG1hcmtzLgotICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW25vZGUu
Y2hpbGQxKCldLm1lcmdlRmxhZ3ModmFyaWFibGVBY2Nlc3NEYXRhLT5mbGFncygpIHwgTm9kZVVz
ZWRBc051bWJlcik7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG5vZGUtPmNoaWxkMSgpLT5tZXJn
ZUZsYWdzKHZhcmlhYmxlQWNjZXNzRGF0YS0+ZmxhZ3MoKSB8IE5vZGVVc2VkQXNOdW1iZXIpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBjYXNl
IEZsdXNoOiB7CiAgICAgICAgICAgICAvLyBNYWtlIHN1cmUgdGhhdCB0aGUgYW5hbHlzaXMga25v
d3MgdGhhdCBmbHVzaGVkIGxvY2FscyBlc2NhcGUuCi0gICAgICAgICAgICBWYXJpYWJsZUFjY2Vz
c0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9IG5vZGUudmFyaWFibGVBY2Nlc3NEYXRhKCk7Cisg
ICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9IG5vZGUt
PnZhcmlhYmxlQWNjZXNzRGF0YSgpOwogICAgICAgICAgICAgY2hhbmdlZCB8PSB2YXJpYWJsZUFj
Y2Vzc0RhdGEtPm1lcmdlRmxhZ3MoTm9kZVVzZWRBc1ZhbHVlKTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9CkBAIC0yMzgsOCArMjM2LDggQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGNo
YW5nZWQgfD0gc2V0UHJlZGljdGlvbihTcGVjSW50MzIpOwogICAgICAgICAgICAgZmxhZ3MgfD0g
Tm9kZVVzZWRBc0ludCB8IE5vZGVVc2VkQXNJbnRMb2NhbGx5OwogICAgICAgICAgICAgZmxhZ3Mg
Jj0gfihOb2RlVXNlZEFzTnVtYmVyIHwgTm9kZU5lZWRzTmVnWmVybyB8IE5vZGVVc2VkQXNPdGhl
cik7Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ubWVyZ2VG
bGFncyhmbGFncyk7Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbm9kZS5jaGlsZDIo
KV0ubWVyZ2VGbGFncyhmbGFncyk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG5vZGUtPmNoaWxk
MSgpLT5tZXJnZUZsYWdzKGZsYWdzKTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbm9kZS0+Y2hp
bGQyKCktPm1lcmdlRmxhZ3MoZmxhZ3MpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0K
ICAgICAgICAgICAgIApAQCAtMjQ3LDUwICsyNDUsNTAgQEAgcHJpdmF0ZToKICAgICAgICAgICAg
IGNoYW5nZWQgfD0gc2V0UHJlZGljdGlvbihTcGVjSW50MzIpOwogICAgICAgICAgICAgZmxhZ3Mg
fD0gTm9kZVVzZWRBc0ludCB8IE5vZGVVc2VkQXNJbnRMb2NhbGx5OwogICAgICAgICAgICAgZmxh
Z3MgJj0gfihOb2RlVXNlZEFzTnVtYmVyIHwgTm9kZU5lZWRzTmVnWmVybyB8IE5vZGVVc2VkQXNP
dGhlcik7Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ubWVy
Z2VGbGFncyhmbGFncyk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG5vZGUtPmNoaWxkMSgpLT5t
ZXJnZUZsYWdzKGZsYWdzKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAg
ICAgICAKICAgICAgICAgY2FzZSBBcnJheVBvcDogewotICAgICAgICAgICAgY2hhbmdlZCB8PSBt
ZXJnZVByZWRpY3Rpb24obm9kZS5nZXRIZWFwUHJlZGljdGlvbigpKTsKKyAgICAgICAgICAgIGNo
YW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKG5vZGUtPmdldEhlYXBQcmVkaWN0aW9uKCkpOwogICAg
ICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZURlZmF1bHRGbGFncyhub2RlKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBBcnJheVB1c2g6IHsKLSAgICAgICAg
ICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKG5vZGUuZ2V0SGVhcFByZWRpY3Rpb24oKSk7
Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ubWVyZ2VGbGFn
cyhOb2RlVXNlZEFzVmFsdWUpOwotICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW25vZGUu
Y2hpbGQyKCldLm1lcmdlRmxhZ3MoTm9kZVVzZWRBc1ZhbHVlKTsKKyAgICAgICAgICAgIGNoYW5n
ZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKG5vZGUtPmdldEhlYXBQcmVkaWN0aW9uKCkpOworICAgICAg
ICAgICAgY2hhbmdlZCB8PSBub2RlLT5jaGlsZDEoKS0+bWVyZ2VGbGFncyhOb2RlVXNlZEFzVmFs
dWUpOworICAgICAgICAgICAgY2hhbmdlZCB8PSBub2RlLT5jaGlsZDIoKS0+bWVyZ2VGbGFncyhO
b2RlVXNlZEFzVmFsdWUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIAogICAgICAg
ICBjYXNlIFJlZ0V4cEV4ZWM6CiAgICAgICAgIGNhc2UgUmVnRXhwVGVzdDogewotICAgICAgICAg
ICAgY2hhbmdlZCB8PSBtZXJnZVByZWRpY3Rpb24obm9kZS5nZXRIZWFwUHJlZGljdGlvbigpKTsK
KyAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKG5vZGUtPmdldEhlYXBQcmVk
aWN0aW9uKCkpOwogICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZURlZmF1bHRGbGFncyhub2Rl
KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBTdHJpbmdD
aGFyQ29kZUF0OiB7CiAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbihTcGVj
SW50MzIpOwotICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLm1l
cmdlRmxhZ3MoTm9kZVVzZWRBc1ZhbHVlKTsKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFw
aFtub2RlLmNoaWxkMigpXS5tZXJnZUZsYWdzKE5vZGVVc2VkQXNOdW1iZXIgfCBOb2RlVXNlZEFz
T3RoZXIgfCBOb2RlVXNlZEFzSW50IHwgTm9kZVVzZWRBc0ludExvY2FsbHkpOworICAgICAgICAg
ICAgY2hhbmdlZCB8PSBub2RlLT5jaGlsZDEoKS0+bWVyZ2VGbGFncyhOb2RlVXNlZEFzVmFsdWUp
OworICAgICAgICAgICAgY2hhbmdlZCB8PSBub2RlLT5jaGlsZDIoKS0+bWVyZ2VGbGFncyhOb2Rl
VXNlZEFzTnVtYmVyIHwgTm9kZVVzZWRBc090aGVyIHwgTm9kZVVzZWRBc0ludCB8IE5vZGVVc2Vk
QXNJbnRMb2NhbGx5KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKICAgICAgICAg
Y2FzZSBVSW50MzJUb051bWJlcjogewotICAgICAgICAgICAgaWYgKG5vZGVDYW5TcGVjdWxhdGVJ
bnRlZ2VyKG5vZGUuYXJpdGhOb2RlRmxhZ3MoKSkpCisgICAgICAgICAgICBpZiAobm9kZUNhblNw
ZWN1bGF0ZUludGVnZXIobm9kZS0+YXJpdGhOb2RlRmxhZ3MoKSkpCiAgICAgICAgICAgICAgICAg
Y2hhbmdlZCB8PSBtZXJnZVByZWRpY3Rpb24oU3BlY0ludDMyKTsKICAgICAgICAgICAgIGVsc2UK
ICAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbihTcGVjTnVtYmVyKTsK
ICAgICAgICAgICAgIAotICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQx
KCldLm1lcmdlRmxhZ3MoZmxhZ3MpOworICAgICAgICAgICAgY2hhbmdlZCB8PSBub2RlLT5jaGls
ZDEoKS0+bWVyZ2VGbGFncyhmbGFncyk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQog
CiAgICAgICAgIGNhc2UgVmFsdWVBZGQ6IHsKLSAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIGxl
ZnQgPSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLnByZWRpY3Rpb24oKTsKLSAgICAgICAgICAgIFNw
ZWN1bGF0ZWRUeXBlIHJpZ2h0ID0gbV9ncmFwaFtub2RlLmNoaWxkMigpXS5wcmVkaWN0aW9uKCk7
CisgICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSBsZWZ0ID0gbm9kZS0+Y2hpbGQxKCktPnByZWRp
Y3Rpb24oKTsKKyAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHJpZ2h0ID0gbm9kZS0+Y2hpbGQy
KCktPnByZWRpY3Rpb24oKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgQWRkU3BlY3VsYXRp
b25Nb2RlIG1vZGUgPSBEb250U3BlY3VsYXRlSW50ZWdlcjsKICAgICAgICAgICAgIApAQCAtMzA3
LDIyICszMDUsMjIgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBt
ZXJnZVByZWRpY3Rpb24oU3BlY1N0cmluZyB8IFNwZWNJbnQzMiB8IFNwZWNEb3VibGUpOwogICAg
ICAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoaXNOb3ROZWdaZXJvKG5v
ZGUuY2hpbGQxKCkuaW5kZXgoKSkgfHwgaXNOb3ROZWdaZXJvKG5vZGUuY2hpbGQyKCkuaW5kZXgo
KSkpCisgICAgICAgICAgICBpZiAoaXNOb3ROZWdaZXJvKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSkg
fHwgaXNOb3ROZWdaZXJvKG5vZGUtPmNoaWxkMigpLm5vZGUoKSkpCiAgICAgICAgICAgICAgICAg
ZmxhZ3MgJj0gfk5vZGVOZWVkc05lZ1plcm87Ci0gICAgICAgICAgICBpZiAobV9ncmFwaFtub2Rl
LmNoaWxkMSgpXS5oYXNOdW1iZXJSZXN1bHQoKSB8fCBtX2dyYXBoW25vZGUuY2hpbGQyKCldLmhh
c051bWJlclJlc3VsdCgpKQorICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5oYXNOdW1i
ZXJSZXN1bHQoKSB8fCBub2RlLT5jaGlsZDIoKS0+aGFzTnVtYmVyUmVzdWx0KCkpCiAgICAgICAg
ICAgICAgICAgZmxhZ3MgJj0gfk5vZGVVc2VkQXNPdGhlcjsKICAgICAgICAgICAgIAogICAgICAg
ICAgICAgaWYgKG1vZGUgIT0gU3BlY3VsYXRlSW50ZWdlcikKICAgICAgICAgICAgICAgICBmbGFn
cyB8PSBOb2RlVXNlZEFzTnVtYmVyOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBjaGFuZ2Vk
IHw9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ubWVyZ2VGbGFncyhmbGFncyk7Ci0gICAgICAgICAg
ICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbm9kZS5jaGlsZDIoKV0ubWVyZ2VGbGFncyhmbGFncyk7Cisg
ICAgICAgICAgICBjaGFuZ2VkIHw9IG5vZGUtPmNoaWxkMSgpLT5tZXJnZUZsYWdzKGZsYWdzKTsK
KyAgICAgICAgICAgIGNoYW5nZWQgfD0gbm9kZS0+Y2hpbGQyKCktPm1lcmdlRmxhZ3MoZmxhZ3Mp
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBj
YXNlIEFyaXRoQWRkOiB7Ci0gICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSBsZWZ0ID0gbV9ncmFw
aFtub2RlLmNoaWxkMSgpXS5wcmVkaWN0aW9uKCk7Ci0gICAgICAgICAgICBTcGVjdWxhdGVkVHlw
ZSByaWdodCA9IG1fZ3JhcGhbbm9kZS5jaGlsZDIoKV0ucHJlZGljdGlvbigpOworICAgICAgICAg
ICAgU3BlY3VsYXRlZFR5cGUgbGVmdCA9IG5vZGUtPmNoaWxkMSgpLT5wcmVkaWN0aW9uKCk7Cisg
ICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSByaWdodCA9IG5vZGUtPmNoaWxkMigpLT5wcmVkaWN0
aW9uKCk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIEFkZFNwZWN1bGF0aW9uTW9kZSBtb2Rl
ID0gRG9udFNwZWN1bGF0ZUludGVnZXI7CiAgICAgICAgICAgICAKQEAgLTMzMywyMSArMzMxLDIx
IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0
aW9uKHNwZWN1bGF0ZWREb3VibGVUeXBlRm9yUHJlZGljdGlvbnMobGVmdCwgcmlnaHQpKTsKICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKGlzTm90TmVnWmVybyhu
b2RlLmNoaWxkMSgpLmluZGV4KCkpIHx8IGlzTm90TmVnWmVybyhub2RlLmNoaWxkMigpLmluZGV4
KCkpKQorICAgICAgICAgICAgaWYgKGlzTm90TmVnWmVybyhub2RlLT5jaGlsZDEoKS5ub2RlKCkp
IHx8IGlzTm90TmVnWmVybyhub2RlLT5jaGlsZDIoKS5ub2RlKCkpKQogICAgICAgICAgICAgICAg
IGZsYWdzICY9IH5Ob2RlTmVlZHNOZWdaZXJvOwogICAgICAgICAgICAgZmxhZ3MgJj0gfk5vZGVV
c2VkQXNPdGhlcjsKICAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKG1vZGUgIT0gU3BlY3Vs
YXRlSW50ZWdlcikKICAgICAgICAgICAgICAgICBmbGFncyB8PSBOb2RlVXNlZEFzTnVtYmVyOwog
ICAgICAgICAgICAgCi0gICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbm9kZS5jaGlsZDEo
KV0ubWVyZ2VGbGFncyhmbGFncyk7Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbm9k
ZS5jaGlsZDIoKV0ubWVyZ2VGbGFncyhmbGFncyk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG5v
ZGUtPmNoaWxkMSgpLT5tZXJnZUZsYWdzKGZsYWdzKTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0g
bm9kZS0+Y2hpbGQyKCktPm1lcmdlRmxhZ3MoZmxhZ3MpOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBjYXNlIEFyaXRoU3ViOiB7Ci0gICAgICAg
ICAgICBTcGVjdWxhdGVkVHlwZSBsZWZ0ID0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5wcmVkaWN0
aW9uKCk7Ci0gICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSByaWdodCA9IG1fZ3JhcGhbbm9kZS5j
aGlsZDIoKV0ucHJlZGljdGlvbigpOworICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgbGVmdCA9
IG5vZGUtPmNoaWxkMSgpLT5wcmVkaWN0aW9uKCk7CisgICAgICAgICAgICBTcGVjdWxhdGVkVHlw
ZSByaWdodCA9IG5vZGUtPmNoaWxkMigpLT5wcmVkaWN0aW9uKCk7CiAgICAgICAgICAgICAKICAg
ICAgICAgICAgIEFkZFNwZWN1bGF0aW9uTW9kZSBtb2RlID0gRG9udFNwZWN1bGF0ZUludGVnZXI7
CiAgICAgICAgICAgICAKQEAgLTM1OCwzOSArMzU2LDM5IEBAIHByaXZhdGU6CiAgICAgICAgICAg
ICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKHNwZWN1bGF0ZWREb3VibGVUeXBl
Rm9yUHJlZGljdGlvbnMobGVmdCwgcmlnaHQpKTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAg
ICAgaWYgKGlzTm90WmVybyhub2RlLmNoaWxkMSgpLmluZGV4KCkpIHx8IGlzTm90WmVybyhub2Rl
LmNoaWxkMigpLmluZGV4KCkpKQorICAgICAgICAgICAgaWYgKGlzTm90WmVybyhub2RlLT5jaGls
ZDEoKS5ub2RlKCkpIHx8IGlzTm90WmVybyhub2RlLT5jaGlsZDIoKS5ub2RlKCkpKQogICAgICAg
ICAgICAgICAgIGZsYWdzICY9IH5Ob2RlTmVlZHNOZWdaZXJvOwogICAgICAgICAgICAgZmxhZ3Mg
Jj0gfk5vZGVVc2VkQXNPdGhlcjsKICAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKG1vZGUg
IT0gU3BlY3VsYXRlSW50ZWdlcikKICAgICAgICAgICAgICAgICBmbGFncyB8PSBOb2RlVXNlZEFz
TnVtYmVyOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbm9k
ZS5jaGlsZDEoKV0ubWVyZ2VGbGFncyhmbGFncyk7Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IG1f
Z3JhcGhbbm9kZS5jaGlsZDIoKV0ubWVyZ2VGbGFncyhmbGFncyk7CisgICAgICAgICAgICBjaGFu
Z2VkIHw9IG5vZGUtPmNoaWxkMSgpLT5tZXJnZUZsYWdzKGZsYWdzKTsKKyAgICAgICAgICAgIGNo
YW5nZWQgfD0gbm9kZS0+Y2hpbGQyKCktPm1lcmdlRmxhZ3MoZmxhZ3MpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBjYXNlIEFyaXRoTmVnYXRl
OgotICAgICAgICAgICAgaWYgKG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ucHJlZGljdGlvbigpKSB7
CisgICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnByZWRpY3Rpb24oKSkgewogICAgICAg
ICAgICAgICAgIGlmIChtX2dyYXBoLm5lZ2F0ZVNob3VsZFNwZWN1bGF0ZUludGVnZXIobm9kZSkp
CiAgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKFNwZWNJbnQz
Mik7CiAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9
IG1lcmdlUHJlZGljdGlvbihzcGVjdWxhdGVkRG91YmxlVHlwZUZvclByZWRpY3Rpb24obV9ncmFw
aFtub2RlLmNoaWxkMSgpXS5wcmVkaWN0aW9uKCkpKTsKKyAgICAgICAgICAgICAgICAgICAgY2hh
bmdlZCB8PSBtZXJnZVByZWRpY3Rpb24oc3BlY3VsYXRlZERvdWJsZVR5cGVGb3JQcmVkaWN0aW9u
KG5vZGUtPmNoaWxkMSgpLT5wcmVkaWN0aW9uKCkpKTsKICAgICAgICAgICAgIH0KIAogICAgICAg
ICAgICAgZmxhZ3MgJj0gfk5vZGVVc2VkQXNPdGhlcjsKIAotICAgICAgICAgICAgY2hhbmdlZCB8
PSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLm1lcmdlRmxhZ3MoZmxhZ3MpOworICAgICAgICAgICAg
Y2hhbmdlZCB8PSBub2RlLT5jaGlsZDEoKS0+bWVyZ2VGbGFncyhmbGFncyk7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgIAogICAgICAgICBjYXNlIEFyaXRoTWluOgogICAgICAgICBj
YXNlIEFyaXRoTWF4OiB7Ci0gICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSBsZWZ0ID0gbV9ncmFw
aFtub2RlLmNoaWxkMSgpXS5wcmVkaWN0aW9uKCk7Ci0gICAgICAgICAgICBTcGVjdWxhdGVkVHlw
ZSByaWdodCA9IG1fZ3JhcGhbbm9kZS5jaGlsZDIoKV0ucHJlZGljdGlvbigpOworICAgICAgICAg
ICAgU3BlY3VsYXRlZFR5cGUgbGVmdCA9IG5vZGUtPmNoaWxkMSgpLT5wcmVkaWN0aW9uKCk7Cisg
ICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSByaWdodCA9IG5vZGUtPmNoaWxkMigpLT5wcmVkaWN0
aW9uKCk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlmIChsZWZ0ICYmIHJpZ2h0KSB7Ci0g
ICAgICAgICAgICAgICAgaWYgKE5vZGU6OnNob3VsZFNwZWN1bGF0ZUludGVnZXJGb3JBcml0aG1l
dGljKG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0sIG1fZ3JhcGhbbm9kZS5jaGlsZDIoKV0pCi0gICAg
ICAgICAgICAgICAgICAgICYmIG5vZGVDYW5TcGVjdWxhdGVJbnRlZ2VyKG5vZGUuYXJpdGhOb2Rl
RmxhZ3MoKSkpCisgICAgICAgICAgICAgICAgaWYgKE5vZGU6OnNob3VsZFNwZWN1bGF0ZUludGVn
ZXJGb3JBcml0aG1ldGljKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgbm9kZS0+Y2hpbGQyKCkubm9k
ZSgpKQorICAgICAgICAgICAgICAgICAgICAmJiBub2RlQ2FuU3BlY3VsYXRlSW50ZWdlcihub2Rl
LT5hcml0aE5vZGVGbGFncygpKSkKICAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJn
ZVByZWRpY3Rpb24oU3BlY0ludDMyKTsKICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAg
ICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKHNwZWN1bGF0ZWREb3VibGVUeXBl
Rm9yUHJlZGljdGlvbnMobGVmdCwgcmlnaHQpKTsKQEAgLTM5OSwxNCArMzk3LDE0IEBAIHByaXZh
dGU6CiAgICAgICAgICAgICBmbGFncyB8PSBOb2RlVXNlZEFzTnVtYmVyOwogICAgICAgICAgICAg
ZmxhZ3MgJj0gfk5vZGVVc2VkQXNPdGhlcjsKIAotICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dy
YXBoW25vZGUuY2hpbGQxKCldLm1lcmdlRmxhZ3MoZmxhZ3MpOwotICAgICAgICAgICAgY2hhbmdl
ZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQyKCldLm1lcmdlRmxhZ3MoZmxhZ3MpOworICAgICAgICAg
ICAgY2hhbmdlZCB8PSBub2RlLT5jaGlsZDEoKS0+bWVyZ2VGbGFncyhmbGFncyk7CisgICAgICAg
ICAgICBjaGFuZ2VkIHw9IG5vZGUtPmNoaWxkMigpLT5tZXJnZUZsYWdzKGZsYWdzKTsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBBcml0aE11bDogewotICAg
ICAgICAgICAgU3BlY3VsYXRlZFR5cGUgbGVmdCA9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ucHJl
ZGljdGlvbigpOwotICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgcmlnaHQgPSBtX2dyYXBoW25v
ZGUuY2hpbGQyKCldLnByZWRpY3Rpb24oKTsKKyAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIGxl
ZnQgPSBub2RlLT5jaGlsZDEoKS0+cHJlZGljdGlvbigpOworICAgICAgICAgICAgU3BlY3VsYXRl
ZFR5cGUgcmlnaHQgPSBub2RlLT5jaGlsZDIoKS0+cHJlZGljdGlvbigpOwogICAgICAgICAgICAg
CiAgICAgICAgICAgICBpZiAobGVmdCAmJiByaWdodCkgewogICAgICAgICAgICAgICAgIGlmICht
X2dyYXBoLm11bFNob3VsZFNwZWN1bGF0ZUludGVnZXIobm9kZSkpCkBAIC00MjIsOCArNDIwLDgg
QEAgcHJpdmF0ZToKICAgICAgICAgICAgIC8vIGl0c2VsZiB1bmxlc3Mgd2UgY2FuIHByb3ZlIHRo
YXQgdGhlcmUgaXMgbm8gd2F5IGZvciB0aGUgdmFsdWVzCiAgICAgICAgICAgICAvLyBwcm9kdWNl
ZCB0byBjYXVzZSBkb3VibGUgcm91bmRpbmcuCiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGlm
ICghaXNXaXRoaW5Qb3dlck9mVHdvKG5vZGUuY2hpbGQxKCkuaW5kZXgoKSwgMjIpCi0gICAgICAg
ICAgICAgICAgJiYgIWlzV2l0aGluUG93ZXJPZlR3byhub2RlLmNoaWxkMigpLmluZGV4KCksIDIy
KSkKKyAgICAgICAgICAgIGlmICghaXNXaXRoaW5Qb3dlck9mVHdvKG5vZGUtPmNoaWxkMSgpLm5v
ZGUoKSwgMjIpCisgICAgICAgICAgICAgICAgJiYgIWlzV2l0aGluUG93ZXJPZlR3byhub2RlLT5j
aGlsZDIoKS5ub2RlKCksIDIyKSkKICAgICAgICAgICAgICAgICBmbGFncyB8PSBOb2RlVXNlZEFz
TnVtYmVyOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBjaGFuZ2VkIHw9IG5vZGUubWVyZ2VG
bGFncyhmbGFncyk7CkBAIC00MzEsMTggKzQyOSwxOCBAQCBwcml2YXRlOgogICAgICAgICAgICAg
ZmxhZ3MgfD0gTm9kZVVzZWRBc051bWJlciB8IE5vZGVOZWVkc05lZ1plcm87CiAgICAgICAgICAg
ICBmbGFncyAmPSB+Tm9kZVVzZWRBc090aGVyOwogCi0gICAgICAgICAgICBjaGFuZ2VkIHw9IG1f
Z3JhcGhbbm9kZS5jaGlsZDEoKV0ubWVyZ2VGbGFncyhmbGFncyk7Ci0gICAgICAgICAgICBjaGFu
Z2VkIHw9IG1fZ3JhcGhbbm9kZS5jaGlsZDIoKV0ubWVyZ2VGbGFncyhmbGFncyk7CisgICAgICAg
ICAgICBjaGFuZ2VkIHw9IG5vZGUtPmNoaWxkMSgpLT5tZXJnZUZsYWdzKGZsYWdzKTsKKyAgICAg
ICAgICAgIGNoYW5nZWQgfD0gbm9kZS0+Y2hpbGQyKCktPm1lcmdlRmxhZ3MoZmxhZ3MpOwogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBjYXNlIEFy
aXRoRGl2OiB7Ci0gICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSBsZWZ0ID0gbV9ncmFwaFtub2Rl
LmNoaWxkMSgpXS5wcmVkaWN0aW9uKCk7Ci0gICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSByaWdo
dCA9IG1fZ3JhcGhbbm9kZS5jaGlsZDIoKV0ucHJlZGljdGlvbigpOworICAgICAgICAgICAgU3Bl
Y3VsYXRlZFR5cGUgbGVmdCA9IG5vZGUtPmNoaWxkMSgpLT5wcmVkaWN0aW9uKCk7CisgICAgICAg
ICAgICBTcGVjdWxhdGVkVHlwZSByaWdodCA9IG5vZGUtPmNoaWxkMigpLT5wcmVkaWN0aW9uKCk7
CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlmIChsZWZ0ICYmIHJpZ2h0KSB7Ci0gICAgICAg
ICAgICAgICAgaWYgKE5vZGU6OnNob3VsZFNwZWN1bGF0ZUludGVnZXJGb3JBcml0aG1ldGljKG1f
Z3JhcGhbbm9kZS5jaGlsZDEoKV0sIG1fZ3JhcGhbbm9kZS5jaGlsZDIoKV0pCi0gICAgICAgICAg
ICAgICAgICAgICYmIG5vZGVDYW5TcGVjdWxhdGVJbnRlZ2VyKG5vZGUuYXJpdGhOb2RlRmxhZ3Mo
KSkpCisgICAgICAgICAgICAgICAgaWYgKE5vZGU6OnNob3VsZFNwZWN1bGF0ZUludGVnZXJGb3JB
cml0aG1ldGljKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgbm9kZS0+Y2hpbGQyKCkubm9kZSgpKQor
ICAgICAgICAgICAgICAgICAgICAmJiBub2RlQ2FuU3BlY3VsYXRlSW50ZWdlcihub2RlLT5hcml0
aE5vZGVGbGFncygpKSkKICAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVByZWRp
Y3Rpb24oU3BlY0ludDMyKTsKICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAg
ICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKFNwZWNEb3VibGUpOwpAQCAtNDU2LDE4ICs0
NTQsMTggQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGZsYWdzIHw9IE5vZGVVc2VkQXNOdW1iZXIg
fCBOb2RlTmVlZHNOZWdaZXJvOwogICAgICAgICAgICAgZmxhZ3MgJj0gfk5vZGVVc2VkQXNPdGhl
cjsKIAotICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLm1lcmdl
RmxhZ3MoZmxhZ3MpOwotICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQy
KCldLm1lcmdlRmxhZ3MoZmxhZ3MpOworICAgICAgICAgICAgY2hhbmdlZCB8PSBub2RlLT5jaGls
ZDEoKS0+bWVyZ2VGbGFncyhmbGFncyk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG5vZGUtPmNo
aWxkMigpLT5tZXJnZUZsYWdzKGZsYWdzKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9
CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBBcml0aE1vZDogewotICAgICAgICAgICAgU3Bl
Y3VsYXRlZFR5cGUgbGVmdCA9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ucHJlZGljdGlvbigpOwot
ICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgcmlnaHQgPSBtX2dyYXBoW25vZGUuY2hpbGQyKCld
LnByZWRpY3Rpb24oKTsKKyAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIGxlZnQgPSBub2RlLT5j
aGlsZDEoKS0+cHJlZGljdGlvbigpOworICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgcmlnaHQg
PSBub2RlLT5jaGlsZDIoKS0+cHJlZGljdGlvbigpOwogICAgICAgICAgICAgCiAgICAgICAgICAg
ICBpZiAobGVmdCAmJiByaWdodCkgewotICAgICAgICAgICAgICAgIGlmIChOb2RlOjpzaG91bGRT
cGVjdWxhdGVJbnRlZ2VyRm9yQXJpdGhtZXRpYyhtX2dyYXBoW25vZGUuY2hpbGQxKCldLCBtX2dy
YXBoW25vZGUuY2hpbGQyKCldKQotICAgICAgICAgICAgICAgICAgICAmJiBub2RlQ2FuU3BlY3Vs
YXRlSW50ZWdlcihub2RlLmFyaXRoTm9kZUZsYWdzKCkpKQorICAgICAgICAgICAgICAgIGlmIChO
b2RlOjpzaG91bGRTcGVjdWxhdGVJbnRlZ2VyRm9yQXJpdGhtZXRpYyhub2RlLT5jaGlsZDEoKS5u
b2RlKCksIG5vZGUtPmNoaWxkMigpLm5vZGUoKSkKKyAgICAgICAgICAgICAgICAgICAgJiYgbm9k
ZUNhblNwZWN1bGF0ZUludGVnZXIobm9kZS0+YXJpdGhOb2RlRmxhZ3MoKSkpCiAgICAgICAgICAg
ICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKFNwZWNJbnQzMik7CiAgICAgICAg
ICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGlj
dGlvbihTcGVjRG91YmxlKTsKQEAgLTQ3Niw4ICs0NzQsOCBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgZmxhZ3MgfD0gTm9kZVVzZWRBc051bWJlciB8IE5vZGVOZWVkc05lZ1plcm87CiAgICAgICAg
ICAgICBmbGFncyAmPSB+Tm9kZVVzZWRBc090aGVyOwogCi0gICAgICAgICAgICBjaGFuZ2VkIHw9
IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ubWVyZ2VGbGFncyhmbGFncyk7Ci0gICAgICAgICAgICBj
aGFuZ2VkIHw9IG1fZ3JhcGhbbm9kZS5jaGlsZDIoKV0ubWVyZ2VGbGFncyhmbGFncyk7CisgICAg
ICAgICAgICBjaGFuZ2VkIHw9IG5vZGUtPmNoaWxkMSgpLT5tZXJnZUZsYWdzKGZsYWdzKTsKKyAg
ICAgICAgICAgIGNoYW5nZWQgfD0gbm9kZS0+Y2hpbGQyKCktPm1lcmdlRmxhZ3MoZmxhZ3MpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIApAQCAtNDg1LDE5ICs0
ODMsMTkgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGNoYW5nZWQgfD0gc2V0UHJlZGljdGlvbihT
cGVjRG91YmxlKTsKICAgICAgICAgICAgIGZsYWdzIHw9IE5vZGVVc2VkQXNOdW1iZXIgfCBOb2Rl
TmVlZHNOZWdaZXJvOwogICAgICAgICAgICAgZmxhZ3MgJj0gfk5vZGVVc2VkQXNPdGhlcjsKLSAg
ICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5tZXJnZUZsYWdzKGZs
YWdzKTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbm9kZS0+Y2hpbGQxKCktPm1lcmdlRmxhZ3Mo
ZmxhZ3MpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAg
ICAgICBjYXNlIEFyaXRoQWJzOiB7Ci0gICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSBjaGlsZCA9
IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ucHJlZGljdGlvbigpOworICAgICAgICAgICAgU3BlY3Vs
YXRlZFR5cGUgY2hpbGQgPSBub2RlLT5jaGlsZDEoKS0+cHJlZGljdGlvbigpOwogICAgICAgICAg
ICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbkZvckFyaXRobWV0aWMoY2hpbGQpCi0gICAgICAgICAg
ICAgICAgJiYgbm9kZUNhblNwZWN1bGF0ZUludGVnZXIobm9kZS5hcml0aE5vZGVGbGFncygpKSkK
KyAgICAgICAgICAgICAgICAmJiBub2RlQ2FuU3BlY3VsYXRlSW50ZWdlcihub2RlLT5hcml0aE5v
ZGVGbGFncygpKSkKICAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbihT
cGVjSW50MzIpOwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0g
bWVyZ2VQcmVkaWN0aW9uKHNwZWN1bGF0ZWREb3VibGVUeXBlRm9yUHJlZGljdGlvbihjaGlsZCkp
OwogCi0gICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ubWVyZ2VG
bGFncyhmbGFncyk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG5vZGUtPmNoaWxkMSgpLT5tZXJn
ZUZsYWdzKGZsYWdzKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAg
ICAKQEAgLTUyNywzMSArNTI1LDMxIEBAIHByaXZhdGU6CiAgICAgICAgIH0KIAogICAgICAgICBj
YXNlIEdldEJ5SWQ6IHsKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKG5v
ZGUuZ2V0SGVhcFByZWRpY3Rpb24oKSk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJl
ZGljdGlvbihub2RlLT5nZXRIZWFwUHJlZGljdGlvbigpKTsKICAgICAgICAgICAgIGNoYW5nZWQg
fD0gbWVyZ2VEZWZhdWx0RmxhZ3Mobm9kZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
fQogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgR2V0QnlJZEZsdXNoOgotICAgICAgICAgICAg
Y2hhbmdlZCB8PSBtZXJnZVByZWRpY3Rpb24obm9kZS5nZXRIZWFwUHJlZGljdGlvbigpKTsKKyAg
ICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKG5vZGUtPmdldEhlYXBQcmVkaWN0
aW9uKCkpOwogICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZURlZmF1bHRGbGFncyhub2RlKTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgR2V0QnlWYWw6
IHsKLSAgICAgICAgICAgIGlmIChtX2dyYXBoW25vZGUuY2hpbGQxKCldLnNob3VsZFNwZWN1bGF0
ZUZsb2F0MzJBcnJheSgpCi0gICAgICAgICAgICAgICAgfHwgbV9ncmFwaFtub2RlLmNoaWxkMSgp
XS5zaG91bGRTcGVjdWxhdGVGbG9hdDY0QXJyYXkoKSkKKyAgICAgICAgICAgIGlmIChub2RlLT5j
aGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlRmxvYXQzMkFycmF5KCkKKyAgICAgICAgICAgICAgICB8
fCBub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlRmxvYXQ2NEFycmF5KCkpCiAgICAgICAg
ICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVByZWRpY3Rpb24oU3BlY0RvdWJsZSk7CiAgICAgICAg
ICAgICBlbHNlCiAgICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVByZWRpY3Rpb24obm9k
ZS5nZXRIZWFwUHJlZGljdGlvbigpKTsKIAotICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBo
W25vZGUuY2hpbGQxKCldLm1lcmdlRmxhZ3MoTm9kZVVzZWRBc1ZhbHVlKTsKLSAgICAgICAgICAg
IGNoYW5nZWQgfD0gbV9ncmFwaFtub2RlLmNoaWxkMigpXS5tZXJnZUZsYWdzKE5vZGVVc2VkQXNO
dW1iZXIgfCBOb2RlVXNlZEFzT3RoZXIgfCBOb2RlVXNlZEFzSW50IHwgTm9kZVVzZWRBc0ludExv
Y2FsbHkpOworICAgICAgICAgICAgY2hhbmdlZCB8PSBub2RlLT5jaGlsZDEoKS0+bWVyZ2VGbGFn
cyhOb2RlVXNlZEFzVmFsdWUpOworICAgICAgICAgICAgY2hhbmdlZCB8PSBub2RlLT5jaGlsZDIo
KS0+bWVyZ2VGbGFncyhOb2RlVXNlZEFzTnVtYmVyIHwgTm9kZVVzZWRBc090aGVyIHwgTm9kZVVz
ZWRBc0ludCB8IE5vZGVVc2VkQXNJbnRMb2NhbGx5KTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBHZXRNeUFyZ3VtZW50QnlWYWxTYWZl
OiB7Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbihub2RlLmdldEhlYXBQ
cmVkaWN0aW9uKCkpOwotICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQx
KCldLm1lcmdlRmxhZ3MoTm9kZVVzZWRBc051bWJlciB8IE5vZGVVc2VkQXNPdGhlciB8IE5vZGVV
c2VkQXNJbnQgfCBOb2RlVXNlZEFzSW50TG9jYWxseSk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9
IG1lcmdlUHJlZGljdGlvbihub2RlLT5nZXRIZWFwUHJlZGljdGlvbigpKTsKKyAgICAgICAgICAg
IGNoYW5nZWQgfD0gbm9kZS0+Y2hpbGQxKCktPm1lcmdlRmxhZ3MoTm9kZVVzZWRBc051bWJlciB8
IE5vZGVVc2VkQXNPdGhlciB8IE5vZGVVc2VkQXNJbnQgfCBOb2RlVXNlZEFzSW50TG9jYWxseSk7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCkBAIC01NzEsMjUg
KzU2OSwyMyBAQCBwcml2YXRlOgogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBHZXRCeU9mZnNl
dDogewotICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVByZWRpY3Rpb24obm9kZS5nZXRIZWFw
UHJlZGljdGlvbigpKTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKG5v
ZGUtPmdldEhlYXBQcmVkaWN0aW9uKCkpOwogICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZURl
ZmF1bHRGbGFncyhub2RlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAg
ICAgICAKICAgICAgICAgY2FzZSBDYWxsOgogICAgICAgICBjYXNlIENvbnN0cnVjdDogewotICAg
ICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVByZWRpY3Rpb24obm9kZS5nZXRIZWFwUHJlZGljdGlv
bigpKTsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgY2hpbGRJZHggPSBub2RlLmZpcnN0Q2hp
bGQoKTsKLSAgICAgICAgICAgICAgICAgY2hpbGRJZHggPCBub2RlLmZpcnN0Q2hpbGQoKSArIG5v
ZGUubnVtQ2hpbGRyZW4oKTsKLSAgICAgICAgICAgICAgICAgKytjaGlsZElkeCkgewotICAgICAg
ICAgICAgICAgIEVkZ2UgZWRnZSA9IG1fZ3JhcGgubV92YXJBcmdDaGlsZHJlbltjaGlsZElkeF07
Ci0gICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW2VkZ2VdLm1lcmdlRmxhZ3MoTm9k
ZVVzZWRBc1ZhbHVlKTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVy
Z2VQcmVkaWN0aW9uKG5vZGUtPmdldEhlYXBQcmVkaWN0aW9uKCkpOworICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBjaGlsZElkeCA9IG5vZGUtPmZpcnN0Q2hpbGQoKTsKKyAgICAgICAgICAgICAg
ICAgY2hpbGRJZHggPCBub2RlLT5maXJzdENoaWxkKCkgKyBub2RlLT5udW1DaGlsZHJlbigpOwor
ICAgICAgICAgICAgICAgICArK2NoaWxkSWR4KQorICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0g
bV9ncmFwaC5tX3ZhckFyZ0NoaWxkcmVuW2NoaWxkSWR4XS0+bWVyZ2VGbGFncyhOb2RlVXNlZEFz
VmFsdWUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAg
ICAgICBjYXNlIENvbnZlcnRUaGlzOiB7Ci0gICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSBwcmVk
aWN0aW9uID0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5wcmVkaWN0aW9uKCk7CisgICAgICAgICAg
ICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uID0gbm9kZS0+Y2hpbGQxKCktPnByZWRpY3Rpb24o
KTsKICAgICAgICAgICAgIGlmIChwcmVkaWN0aW9uKSB7CiAgICAgICAgICAgICAgICAgaWYgKHBy
ZWRpY3Rpb24gJiB+U3BlY09iamVjdE1hc2spIHsKICAgICAgICAgICAgICAgICAgICAgcHJlZGlj
dGlvbiAmPSBTcGVjT2JqZWN0TWFzazsKQEAgLTYwMiwxMyArNTk4LDEzIEBAIHByaXZhdGU6CiAg
ICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBjYXNlIEdldEdsb2JhbFZhcjogewotICAg
ICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVByZWRpY3Rpb24obm9kZS5nZXRIZWFwUHJlZGljdGlv
bigpKTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKG5vZGUtPmdldEhl
YXBQcmVkaWN0aW9uKCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAg
ICAgIAogICAgICAgICBjYXNlIFB1dEdsb2JhbFZhcjoKICAgICAgICAgY2FzZSBQdXRHbG9iYWxW
YXJDaGVjazogewotICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQxKCld
Lm1lcmdlRmxhZ3MoTm9kZVVzZWRBc1ZhbHVlKTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbm9k
ZS0+Y2hpbGQxKCktPm1lcmdlRmxhZ3MoTm9kZVVzZWRBc1ZhbHVlKTsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKQEAgLTYxNyw3ICs2MTMsNyBAQCBwcml2YXRl
OgogICAgICAgICBjYXNlIFJlc29sdmVCYXNlOgogICAgICAgICBjYXNlIFJlc29sdmVCYXNlU3Ry
aWN0UHV0OgogICAgICAgICBjYXNlIFJlc29sdmVHbG9iYWw6IHsKLSAgICAgICAgICAgIFNwZWN1
bGF0ZWRUeXBlIHByZWRpY3Rpb24gPSBub2RlLmdldEhlYXBQcmVkaWN0aW9uKCk7CisgICAgICAg
ICAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uID0gbm9kZS0+Z2V0SGVhcFByZWRpY3Rpb24o
KTsKICAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKHByZWRpY3Rpb24pOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTY0MywxOCArNjM5LDE2IEBAIHByaXZh
dGU6CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBOZXdBcnJheTogewogICAgICAgICAgICAg
Y2hhbmdlZCB8PSBzZXRQcmVkaWN0aW9uKFNwZWNBcnJheSk7Ci0gICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIGNoaWxkSWR4ID0gbm9kZS5maXJzdENoaWxkKCk7Ci0gICAgICAgICAgICAgICAgIGNo
aWxkSWR4IDwgbm9kZS5maXJzdENoaWxkKCkgKyBub2RlLm51bUNoaWxkcmVuKCk7Ci0gICAgICAg
ICAgICAgICAgICsrY2hpbGRJZHgpIHsKLSAgICAgICAgICAgICAgICBFZGdlIGVkZ2UgPSBtX2dy
YXBoLm1fdmFyQXJnQ2hpbGRyZW5bY2hpbGRJZHhdOwotICAgICAgICAgICAgICAgIGNoYW5nZWQg
fD0gbV9ncmFwaFtlZGdlXS5tZXJnZUZsYWdzKE5vZGVVc2VkQXNWYWx1ZSk7Ci0gICAgICAgICAg
ICB9CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGNoaWxkSWR4ID0gbm9kZS0+Zmlyc3RDaGls
ZCgpOworICAgICAgICAgICAgICAgICBjaGlsZElkeCA8IG5vZGUtPmZpcnN0Q2hpbGQoKSArIG5v
ZGUtPm51bUNoaWxkcmVuKCk7CisgICAgICAgICAgICAgICAgICsrY2hpbGRJZHgpCisgICAgICAg
ICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoLm1fdmFyQXJnQ2hpbGRyZW5bY2hpbGRJZHhdLT5t
ZXJnZUZsYWdzKE5vZGVVc2VkQXNWYWx1ZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
fQogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgTmV3QXJyYXlXaXRoU2l6ZTogewogICAgICAg
ICAgICAgY2hhbmdlZCB8PSBzZXRQcmVkaWN0aW9uKFNwZWNBcnJheSk7Ci0gICAgICAgICAgICBj
aGFuZ2VkIHw9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ubWVyZ2VGbGFncyhOb2RlVXNlZEFzVmFs
dWUgfCBOb2RlVXNlZEFzSW50IHwgTm9kZVVzZWRBc0ludExvY2FsbHkpOworICAgICAgICAgICAg
Y2hhbmdlZCB8PSBub2RlLT5jaGlsZDEoKS0+bWVyZ2VGbGFncyhOb2RlVXNlZEFzVmFsdWUgfCBO
b2RlVXNlZEFzSW50IHwgTm9kZVVzZWRBc0ludExvY2FsbHkpOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIH0KICAgICAgICAgICAgIApAQCAtNjcwLDIyICs2NjQsMjIgQEAgcHJpdmF0ZToK
ICAgICAgICAgCiAgICAgICAgIGNhc2UgU3RyaW5nQ2hhckF0OiB7CiAgICAgICAgICAgICBjaGFu
Z2VkIHw9IHNldFByZWRpY3Rpb24oU3BlY1N0cmluZyk7Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9
IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ubWVyZ2VGbGFncyhOb2RlVXNlZEFzVmFsdWUpOwotICAg
ICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQyKCldLm1lcmdlRmxhZ3MoTm9k
ZVVzZWRBc051bWJlciB8IE5vZGVVc2VkQXNPdGhlciB8IE5vZGVVc2VkQXNJbnQgfCBOb2RlVXNl
ZEFzSW50TG9jYWxseSk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG5vZGUtPmNoaWxkMSgpLT5t
ZXJnZUZsYWdzKE5vZGVVc2VkQXNWYWx1ZSk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG5vZGUt
PmNoaWxkMigpLT5tZXJnZUZsYWdzKE5vZGVVc2VkQXNOdW1iZXIgfCBOb2RlVXNlZEFzT3RoZXIg
fCBOb2RlVXNlZEFzSW50IHwgTm9kZVVzZWRBc0ludExvY2FsbHkpOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBjYXNlIFN0ckNhdDogewogICAg
ICAgICAgICAgY2hhbmdlZCB8PSBzZXRQcmVkaWN0aW9uKFNwZWNTdHJpbmcpOwotICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBjaGlsZElkeCA9IG5vZGUuZmlyc3RDaGlsZCgpOwotICAgICAgICAg
ICAgICAgICBjaGlsZElkeCA8IG5vZGUuZmlyc3RDaGlsZCgpICsgbm9kZS5udW1DaGlsZHJlbigp
OworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBjaGlsZElkeCA9IG5vZGUtPmZpcnN0Q2hpbGQo
KTsKKyAgICAgICAgICAgICAgICAgY2hpbGRJZHggPCBub2RlLT5maXJzdENoaWxkKCkgKyBub2Rl
LT5udW1DaGlsZHJlbigpOwogICAgICAgICAgICAgICAgICArK2NoaWxkSWR4KQotICAgICAgICAg
ICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaFttX2dyYXBoLm1fdmFyQXJnQ2hpbGRyZW5bY2hpbGRJ
ZHhdXS5tZXJnZUZsYWdzKE5vZGVVc2VkQXNOdW1iZXIgfCBOb2RlVXNlZEFzT3RoZXIpOworICAg
ICAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaC5tX3ZhckFyZ0NoaWxkcmVuW2NoaWxkSWR4
XS0+bWVyZ2VGbGFncyhOb2RlVXNlZEFzTnVtYmVyIHwgTm9kZVVzZWRBc090aGVyKTsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBUb1By
aW1pdGl2ZTogewotICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgY2hpbGQgPSBtX2dyYXBoW25v
ZGUuY2hpbGQxKCldLnByZWRpY3Rpb24oKTsKKyAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIGNo
aWxkID0gbm9kZS0+Y2hpbGQxKCktPnByZWRpY3Rpb24oKTsKICAgICAgICAgICAgIGlmIChjaGls
ZCkgewogICAgICAgICAgICAgICAgIGlmIChpc09iamVjdFNwZWN1bGF0aW9uKGNoaWxkKSkgewog
ICAgICAgICAgICAgICAgICAgICAvLyBJJ2QgbG92ZSB0byBmb2xkIHRoaXMgY2FzZSBpbnRvIHRo
ZSBjYXNlIGJlbG93LCBidXQgSSBjYW4ndCwgYmVjYXVzZQpAQCAtNzAyLDcgKzY5Niw3IEBAIHBy
aXZhdGU6CiAgICAgICAgICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICAgICAgICAgIGNoYW5n
ZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKGNoaWxkKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IGNoYW5nZWQgfD0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5tZXJnZUZsYWdzKGZsYWdzKTsKKyAg
ICAgICAgICAgIGNoYW5nZWQgfD0gbm9kZS0+Y2hpbGQxKCktPm1lcmdlRmxhZ3MoZmxhZ3MpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIApAQCAtNzQ1LDQyICs3
MzksNDUgQEAgcHJpdmF0ZToKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgY2FzZSBQdXRC
eVZhbDoKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaFttX2dyYXBoLnZhckFyZ0NoaWxk
KG5vZGUsIDApXS5tZXJnZUZsYWdzKE5vZGVVc2VkQXNWYWx1ZSk7Ci0gICAgICAgICAgICBjaGFu
Z2VkIHw9IG1fZ3JhcGhbbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKV0ubWVyZ2VGbGFncyhO
b2RlVXNlZEFzTnVtYmVyIHwgTm9kZVVzZWRBc090aGVyIHwgTm9kZVVzZWRBc0ludCB8IE5vZGVV
c2VkQXNJbnRMb2NhbGx5KTsKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaFttX2dyYXBo
LnZhckFyZ0NoaWxkKG5vZGUsIDIpXS5tZXJnZUZsYWdzKE5vZGVVc2VkQXNWYWx1ZSk7CisgICAg
ICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCktPm1lcmdlRmxh
Z3MoTm9kZVVzZWRBc1ZhbHVlKTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaC52YXJB
cmdDaGlsZChub2RlLCAxKS0+bWVyZ2VGbGFncyhOb2RlVXNlZEFzTnVtYmVyIHwgTm9kZVVzZWRB
c090aGVyIHwgTm9kZVVzZWRBc0ludCB8IE5vZGVVc2VkQXNJbnRMb2NhbGx5KTsKKyAgICAgICAg
ICAgIGNoYW5nZWQgfD0gbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAyKS0+bWVyZ2VGbGFncyhO
b2RlVXNlZEFzVmFsdWUpOwogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSBQdXRT
Y29wZWRWYXI6Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0u
bWVyZ2VGbGFncyhOb2RlVXNlZEFzVmFsdWUpOwotICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dy
YXBoW25vZGUuY2hpbGQzKCldLm1lcmdlRmxhZ3MoTm9kZVVzZWRBc1ZhbHVlKTsKKyAgICAgICAg
ICAgIGNoYW5nZWQgfD0gbm9kZS0+Y2hpbGQxKCktPm1lcmdlRmxhZ3MoTm9kZVVzZWRBc1ZhbHVl
KTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbm9kZS0+Y2hpbGQzKCktPm1lcmdlRmxhZ3MoTm9k
ZVVzZWRBc1ZhbHVlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAgICAg
IGNhc2UgUmV0dXJuOgogICAgICAgICBjYXNlIFRocm93OgotICAgICAgICAgICAgY2hhbmdlZCB8
PSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLm1lcmdlRmxhZ3MoTm9kZVVzZWRBc1ZhbHVlKTsKKyAg
ICAgICAgICAgIGNoYW5nZWQgfD0gbm9kZS0+Y2hpbGQxKCktPm1lcmdlRmxhZ3MoTm9kZVVzZWRB
c1ZhbHVlKTsKICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2UgUHV0QnlJZDoKICAg
ICAgICAgY2FzZSBQdXRCeUlkRGlyZWN0OgotICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBo
W25vZGUuY2hpbGQxKCldLm1lcmdlRmxhZ3MoTm9kZVVzZWRBc1ZhbHVlKTsKLSAgICAgICAgICAg
IGNoYW5nZWQgfD0gbV9ncmFwaFtub2RlLmNoaWxkMigpXS5tZXJnZUZsYWdzKE5vZGVVc2VkQXNW
YWx1ZSk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG5vZGUtPmNoaWxkMSgpLT5tZXJnZUZsYWdz
KE5vZGVVc2VkQXNWYWx1ZSk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG5vZGUtPmNoaWxkMigp
LT5tZXJnZUZsYWdzKE5vZGVVc2VkQXNWYWx1ZSk7CiAgICAgICAgICAgICBicmVhazsKIAogICAg
ICAgICBjYXNlIFB1dEJ5T2Zmc2V0OgotICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW25v
ZGUuY2hpbGQxKCldLm1lcmdlRmxhZ3MoTm9kZVVzZWRBc1ZhbHVlKTsKLSAgICAgICAgICAgIGNo
YW5nZWQgfD0gbV9ncmFwaFtub2RlLmNoaWxkMygpXS5tZXJnZUZsYWdzKE5vZGVVc2VkQXNWYWx1
ZSk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG5vZGUtPmNoaWxkMSgpLT5tZXJnZUZsYWdzKE5v
ZGVVc2VkQXNWYWx1ZSk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG5vZGUtPmNoaWxkMygpLT5t
ZXJnZUZsYWdzKE5vZGVVc2VkQXNWYWx1ZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgIAogICAgICAgICBjYXNlIFBoaToKKyAgICAgICAgICAgIC8vIFBoaXMgc2hvdWxkIG5vdCBi
ZSB2aXNpYmxlIGhlcmUgc2luY2Ugd2UncmUgaXRlcmF0aW5nIHRoZSBhbGwtYnV0LVBoaSdzCisg
ICAgICAgICAgICAvLyBwYXJ0IG9mIGJhc2ljIGJsb2Nrcy4KKyAgICAgICAgICAgIENSQVNIKCk7
CiAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICBjYXNlIFNldENhbGxlZToKICAgICAgICAg
Y2FzZSBTZXRNeVNjb3BlOgotICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW25vZGUuY2hp
bGQxKCldLm1lcmdlRmxhZ3MoTm9kZVVzZWRBc1ZhbHVlKTsKKyAgICAgICAgICAgIGNoYW5nZWQg
fD0gbm9kZS0+Y2hpbGQxKCktPm1lcmdlRmxhZ3MoTm9kZVVzZWRBc1ZhbHVlKTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgR2V0U2NvcGU6Ci0gICAgICAg
ICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ubWVyZ2VGbGFncyhOb2RlVXNl
ZEFzVmFsdWUpOworICAgICAgICAgICAgY2hhbmdlZCB8PSBub2RlLT5jaGlsZDEoKS0+bWVyZ2VG
bGFncyhOb2RlVXNlZEFzVmFsdWUpOwogICAgICAgICAgICAgY2hhbmdlZCB8PSBzZXRQcmVkaWN0
aW9uKFNwZWNDZWxsT3RoZXIpOwogICAgICAgICAgICAgYnJlYWs7CiAKQEAgLTgyOCwzMiArODI1
LDMyIEBAIHByaXZhdGU6CiAgICAgICAgIH0KIAogI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFH
QVRJT05fVkVSQk9TRSkKLSAgICAgICAgZGF0YUxvZyhTcGVjdWxhdGlvbkR1bXAobV9ncmFwaFtt
X2NvbXBpbGVJbmRleF0ucHJlZGljdGlvbigpKSwgIlxuIik7CisgICAgICAgIGRhdGFMb2coU3Bl
Y3VsYXRpb25EdW1wKG5vZGUtPnByZWRpY3Rpb24oKSksICJcbiIpOwogI2VuZGlmCiAgICAgICAg
IAogICAgICAgICBtX2NoYW5nZWQgfD0gY2hhbmdlZDsKICAgICB9CiAgICAgICAgIAotICAgIGJv
b2wgbWVyZ2VEZWZhdWx0RmxhZ3MoTm9kZSYgbm9kZSkKKyAgICBib29sIG1lcmdlRGVmYXVsdEZs
YWdzKE5vZGUqIG5vZGUpCiAgICAgewogICAgICAgICBib29sIGNoYW5nZWQgPSBmYWxzZTsKLSAg
ICAgICAgaWYgKG5vZGUuZmxhZ3MoKSAmIE5vZGVIYXNWYXJBcmdzKSB7Ci0gICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIGNoaWxkSWR4ID0gbm9kZS5maXJzdENoaWxkKCk7Ci0gICAgICAgICAgICAg
ICAgIGNoaWxkSWR4IDwgbm9kZS5maXJzdENoaWxkKCkgKyBub2RlLm51bUNoaWxkcmVuKCk7Cisg
ICAgICAgIGlmIChub2RlLT5mbGFncygpICYgTm9kZUhhc1ZhckFyZ3MpIHsKKyAgICAgICAgICAg
IGZvciAodW5zaWduZWQgY2hpbGRJZHggPSBub2RlLT5maXJzdENoaWxkKCk7CisgICAgICAgICAg
ICAgICAgIGNoaWxkSWR4IDwgbm9kZS0+Zmlyc3RDaGlsZCgpICsgbm9kZS0+bnVtQ2hpbGRyZW4o
KTsKICAgICAgICAgICAgICAgICAgY2hpbGRJZHgrKykgewogICAgICAgICAgICAgICAgIGlmICgh
IW1fZ3JhcGgubV92YXJBcmdDaGlsZHJlbltjaGlsZElkeF0pCi0gICAgICAgICAgICAgICAgICAg
IGNoYW5nZWQgfD0gbV9ncmFwaFttX2dyYXBoLm1fdmFyQXJnQ2hpbGRyZW5bY2hpbGRJZHhdXS5t
ZXJnZUZsYWdzKE5vZGVVc2VkQXNWYWx1ZSk7CisgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQg
fD0gbV9ncmFwaC5tX3ZhckFyZ0NoaWxkcmVuW2NoaWxkSWR4XS0+bWVyZ2VGbGFncyhOb2RlVXNl
ZEFzVmFsdWUpOwogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
aWYgKCFub2RlLmNoaWxkMSgpKQorICAgICAgICAgICAgaWYgKCFub2RlLT5jaGlsZDEoKSkKICAg
ICAgICAgICAgICAgICByZXR1cm4gY2hhbmdlZDsKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9n
cmFwaFtub2RlLmNoaWxkMSgpXS5tZXJnZUZsYWdzKE5vZGVVc2VkQXNWYWx1ZSk7Ci0gICAgICAg
ICAgICBpZiAoIW5vZGUuY2hpbGQyKCkpCisgICAgICAgICAgICBjaGFuZ2VkIHw9IG5vZGUtPmNo
aWxkMSgpLT5tZXJnZUZsYWdzKE5vZGVVc2VkQXNWYWx1ZSk7CisgICAgICAgICAgICBpZiAoIW5v
ZGUtPmNoaWxkMigpKQogICAgICAgICAgICAgICAgIHJldHVybiBjaGFuZ2VkOwotICAgICAgICAg
ICAgY2hhbmdlZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQyKCldLm1lcmdlRmxhZ3MoTm9kZVVzZWRB
c1ZhbHVlKTsKLSAgICAgICAgICAgIGlmICghbm9kZS5jaGlsZDMoKSkKKyAgICAgICAgICAgIGNo
YW5nZWQgfD0gbm9kZS0+Y2hpbGQyKCktPm1lcmdlRmxhZ3MoTm9kZVVzZWRBc1ZhbHVlKTsKKyAg
ICAgICAgICAgIGlmICghbm9kZS0+Y2hpbGQzKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGNo
YW5nZWQ7Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbm9kZS5jaGlsZDMoKV0ubWVy
Z2VGbGFncyhOb2RlVXNlZEFzVmFsdWUpOworICAgICAgICAgICAgY2hhbmdlZCB8PSBub2RlLT5j
aGlsZDMoKS0+bWVyZ2VGbGFncyhOb2RlVXNlZEFzVmFsdWUpOwogICAgICAgICB9CiAgICAgICAg
IHJldHVybiBjaGFuZ2VkOwogICAgIH0KQEAgLTg2Myw4ICs4NjAsMTYgQEAgcHJpdmF0ZToKICNp
ZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCiAgICAgICAgIGRhdGFMb2dG
KCJQcm9wYWdhdGluZyBwcmVkaWN0aW9ucyBmb3J3YXJkIFsldV1cbiIsICsrbV9jb3VudCk7CiAj
ZW5kaWYKLSAgICAgICAgZm9yIChtX2NvbXBpbGVJbmRleCA9IDA7IG1fY29tcGlsZUluZGV4IDwg
bV9ncmFwaC5zaXplKCk7ICsrbV9jb21waWxlSW5kZXgpCi0gICAgICAgICAgICBwcm9wYWdhdGUo
bV9ncmFwaFttX2NvbXBpbGVJbmRleF0pOworICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJ
bmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2dyYXBoLm1fYmxvY2tzLnNpemUoKTsgKytibG9ja0lu
ZGV4KSB7CisgICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGgubV9ibG9ja3Nb
YmxvY2tJbmRleF0uZ2V0KCk7CisgICAgICAgICAgICBpZiAoIWJsb2NrKQorICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICAgICAgQVNTRVJUKGJsb2NrLT5pc1JlYWNoYWJsZSk7Cisg
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYmxvY2stPnNpemUoKTsgKytpKSB7
CisgICAgICAgICAgICAgICAgbV9jdXJyZW50Tm9kZSA9IGJsb2NrLT5hdChpKTsKKyAgICAgICAg
ICAgICAgICBwcm9wYWdhdGUobV9jdXJyZW50Tm9kZSk7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KICAgICB9CiAgICAgCiAgICAgdm9pZCBwcm9wYWdhdGVCYWNrd2FyZCgpCkBAIC04NzIsMTIz
ICs4NzcsMTM5IEBAIHByaXZhdGU6CiAjaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9W
RVJCT1NFKQogICAgICAgICBkYXRhTG9nRigiUHJvcGFnYXRpbmcgcHJlZGljdGlvbnMgYmFja3dh
cmQgWyV1XVxuIiwgKyttX2NvdW50KTsKICNlbmRpZgotICAgICAgICBmb3IgKG1fY29tcGlsZUlu
ZGV4ID0gbV9ncmFwaC5zaXplKCk7IG1fY29tcGlsZUluZGV4LS0gPiAwOykKLSAgICAgICAgICAg
IHByb3BhZ2F0ZShtX2dyYXBoW21fY29tcGlsZUluZGV4XSk7CisgICAgICAgIGZvciAoQmxvY2tJ
bmRleCBibG9ja0luZGV4ID0gbV9ncmFwaC5tX2Jsb2Nrcy5zaXplKCk7IGJsb2NrSW5kZXgtLTsp
IHsKKyAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5tX2Jsb2Nrc1tibG9j
a0luZGV4XS5nZXQoKTsKKyAgICAgICAgICAgIGlmICghYmxvY2spCisgICAgICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgICAgICBBU1NFUlQoYmxvY2stPmlzUmVhY2hhYmxlKTsKKyAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IGJsb2NrLT5zaXplKCk7IGktLTspIHsKKyAgICAgICAg
ICAgICAgICBtX2N1cnJlbnROb2RlID0gYmxvY2stPmF0KGkpOworICAgICAgICAgICAgICAgIHBy
b3BhZ2F0ZShtX2N1cnJlbnROb2RlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQogICAgIH0K
ICAgICAKLSAgICB2b2lkIGRvUm91bmRPZkRvdWJsZVZvdGluZygpCisgICAgdm9pZCBkb0RvdWJs
ZVZvdGluZyhOb2RlKiBub2RlKQogICAgIHsKLSNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FU
SU9OX1ZFUkJPU0UpCi0gICAgICAgIGRhdGFMb2dGKCJWb3Rpbmcgb24gZG91YmxlIHVzZXMgb2Yg
bG9jYWxzIFsldV1cbiIsIG1fY291bnQpOwotI2VuZGlmCi0gICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBtX2dyYXBoLm1fdmFyaWFibGVBY2Nlc3NEYXRhLnNpemUoKTsgKytpKQotICAg
ICAgICAgICAgbV9ncmFwaC5tX3ZhcmlhYmxlQWNjZXNzRGF0YVtpXS5maW5kKCktPmNsZWFyVm90
ZXMoKTsKLSAgICAgICAgZm9yIChtX2NvbXBpbGVJbmRleCA9IDA7IG1fY29tcGlsZUluZGV4IDwg
bV9ncmFwaC5zaXplKCk7ICsrbV9jb21waWxlSW5kZXgpIHsKLSAgICAgICAgICAgIE5vZGUmIG5v
ZGUgPSBtX2dyYXBoW21fY29tcGlsZUluZGV4XTsKLSAgICAgICAgICAgIHN3aXRjaCAobm9kZS5v
cCgpKSB7Ci0gICAgICAgICAgICBjYXNlIFZhbHVlQWRkOgotICAgICAgICAgICAgY2FzZSBBcml0
aEFkZDoKLSAgICAgICAgICAgIGNhc2UgQXJpdGhTdWI6IHsKLSAgICAgICAgICAgICAgICBTcGVj
dWxhdGVkVHlwZSBsZWZ0ID0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5wcmVkaWN0aW9uKCk7Ci0g
ICAgICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgcmlnaHQgPSBtX2dyYXBoW25vZGUuY2hpbGQy
KCldLnByZWRpY3Rpb24oKTsKKyAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CisgICAgICAg
IGNhc2UgVmFsdWVBZGQ6CisgICAgICAgIGNhc2UgQXJpdGhBZGQ6CisgICAgICAgIGNhc2UgQXJp
dGhTdWI6IHsKKyAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIGxlZnQgPSBub2RlLT5jaGlsZDEo
KS0+cHJlZGljdGlvbigpOworICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgcmlnaHQgPSBub2Rl
LT5jaGlsZDIoKS0+cHJlZGljdGlvbigpOwogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAg
ICAgIERvdWJsZUJhbGxvdCBiYWxsb3Q7CisgICAgICAgICAgICBEb3VibGVCYWxsb3QgYmFsbG90
OwogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGlmIChpc051bWJlclNwZWN1bGF0
aW9uRXhwZWN0aW5nRGVmaW5lZChsZWZ0KSAmJiBpc051bWJlclNwZWN1bGF0aW9uRXhwZWN0aW5n
RGVmaW5lZChyaWdodCkKLSAgICAgICAgICAgICAgICAgICAgJiYgIW1fZ3JhcGguYWRkU2hvdWxk
U3BlY3VsYXRlSW50ZWdlcihub2RlKSkKLSAgICAgICAgICAgICAgICAgICAgYmFsbG90ID0gVm90
ZURvdWJsZTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIGJhbGxv
dCA9IFZvdGVWYWx1ZTsKKyAgICAgICAgICAgIGlmIChpc051bWJlclNwZWN1bGF0aW9uRXhwZWN0
aW5nRGVmaW5lZChsZWZ0KSAmJiBpc051bWJlclNwZWN1bGF0aW9uRXhwZWN0aW5nRGVmaW5lZChy
aWdodCkKKyAgICAgICAgICAgICAgICAmJiAhbV9ncmFwaC5hZGRTaG91bGRTcGVjdWxhdGVJbnRl
Z2VyKG5vZGUpKQorICAgICAgICAgICAgICAgIGJhbGxvdCA9IFZvdGVEb3VibGU7CisgICAgICAg
ICAgICBlbHNlCisgICAgICAgICAgICAgICAgYmFsbG90ID0gVm90ZVZhbHVlOwogICAgICAgICAg
ICAgICAgIAotICAgICAgICAgICAgICAgIG1fZ3JhcGgudm90ZShub2RlLmNoaWxkMSgpLCBiYWxs
b3QpOwotICAgICAgICAgICAgICAgIG1fZ3JhcGgudm90ZShub2RlLmNoaWxkMigpLCBiYWxsb3Qp
OwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgbV9n
cmFwaC52b3RlTm9kZShub2RlLT5jaGlsZDEoKSwgYmFsbG90KTsKKyAgICAgICAgICAgIG1fZ3Jh
cGgudm90ZU5vZGUobm9kZS0+Y2hpbGQyKCksIGJhbGxvdCk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgY2FzZSBBcml0aE11bDog
ewotICAgICAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIGxlZnQgPSBtX2dyYXBoW25vZGUuY2hp
bGQxKCldLnByZWRpY3Rpb24oKTsKLSAgICAgICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSByaWdo
dCA9IG1fZ3JhcGhbbm9kZS5jaGlsZDIoKV0ucHJlZGljdGlvbigpOworICAgICAgICBjYXNlIEFy
aXRoTXVsOiB7CisgICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSBsZWZ0ID0gbm9kZS0+Y2hpbGQx
KCktPnByZWRpY3Rpb24oKTsKKyAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHJpZ2h0ID0gbm9k
ZS0+Y2hpbGQyKCktPnByZWRpY3Rpb24oKTsKICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAg
ICAgICBEb3VibGVCYWxsb3QgYmFsbG90OworICAgICAgICAgICAgRG91YmxlQmFsbG90IGJhbGxv
dDsKICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBpZiAoaXNOdW1iZXJTcGVjdWxh
dGlvbihsZWZ0KSAmJiBpc051bWJlclNwZWN1bGF0aW9uKHJpZ2h0KQotICAgICAgICAgICAgICAg
ICAgICAmJiAhbV9ncmFwaC5tdWxTaG91bGRTcGVjdWxhdGVJbnRlZ2VyKG5vZGUpKQotICAgICAg
ICAgICAgICAgICAgICBiYWxsb3QgPSBWb3RlRG91YmxlOwotICAgICAgICAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgICAgICAgICAgYmFsbG90ID0gVm90ZVZhbHVlOworICAgICAgICAgICAgaWYg
KGlzTnVtYmVyU3BlY3VsYXRpb24obGVmdCkgJiYgaXNOdW1iZXJTcGVjdWxhdGlvbihyaWdodCkK
KyAgICAgICAgICAgICAgICAmJiAhbV9ncmFwaC5tdWxTaG91bGRTcGVjdWxhdGVJbnRlZ2VyKG5v
ZGUpKQorICAgICAgICAgICAgICAgIGJhbGxvdCA9IFZvdGVEb3VibGU7CisgICAgICAgICAgICBl
bHNlCisgICAgICAgICAgICAgICAgYmFsbG90ID0gVm90ZVZhbHVlOwogICAgICAgICAgICAgICAg
IAotICAgICAgICAgICAgICAgIG1fZ3JhcGgudm90ZShub2RlLmNoaWxkMSgpLCBiYWxsb3QpOwot
ICAgICAgICAgICAgICAgIG1fZ3JhcGgudm90ZShub2RlLmNoaWxkMigpLCBiYWxsb3QpOwotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgbV9ncmFwaC52
b3RlTm9kZShub2RlLT5jaGlsZDEoKSwgYmFsbG90KTsKKyAgICAgICAgICAgIG1fZ3JhcGgudm90
ZU5vZGUobm9kZS0+Y2hpbGQyKCksIGJhbGxvdCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQogCi0gICAgICAgICAgICBjYXNlIEFyaXRoTWluOgotICAgICAgICAgICAgY2FzZSBBcml0
aE1heDoKLSAgICAgICAgICAgIGNhc2UgQXJpdGhNb2Q6Ci0gICAgICAgICAgICBjYXNlIEFyaXRo
RGl2OiB7Ci0gICAgICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgbGVmdCA9IG1fZ3JhcGhbbm9k
ZS5jaGlsZDEoKV0ucHJlZGljdGlvbigpOwotICAgICAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBl
IHJpZ2h0ID0gbV9ncmFwaFtub2RlLmNoaWxkMigpXS5wcmVkaWN0aW9uKCk7CisgICAgICAgIGNh
c2UgQXJpdGhNaW46CisgICAgICAgIGNhc2UgQXJpdGhNYXg6CisgICAgICAgIGNhc2UgQXJpdGhN
b2Q6CisgICAgICAgIGNhc2UgQXJpdGhEaXY6IHsKKyAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBl
IGxlZnQgPSBub2RlLT5jaGlsZDEoKS0+cHJlZGljdGlvbigpOworICAgICAgICAgICAgU3BlY3Vs
YXRlZFR5cGUgcmlnaHQgPSBub2RlLT5jaGlsZDIoKS0+cHJlZGljdGlvbigpOwogICAgICAgICAg
ICAgICAgIAotICAgICAgICAgICAgICAgIERvdWJsZUJhbGxvdCBiYWxsb3Q7CisgICAgICAgICAg
ICBEb3VibGVCYWxsb3QgYmFsbG90OwogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAg
IGlmIChpc051bWJlclNwZWN1bGF0aW9uKGxlZnQpICYmIGlzTnVtYmVyU3BlY3VsYXRpb24ocmln
aHQpCi0gICAgICAgICAgICAgICAgICAgICYmICEoTm9kZTo6c2hvdWxkU3BlY3VsYXRlSW50ZWdl
ckZvckFyaXRobWV0aWMobV9ncmFwaFtub2RlLmNoaWxkMSgpXSwgbV9ncmFwaFtub2RlLmNoaWxk
MSgpXSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAmJiBub2RlLmNhblNwZWN1bGF0ZUludGVn
ZXIoKSkpCi0gICAgICAgICAgICAgICAgICAgIGJhbGxvdCA9IFZvdGVEb3VibGU7Ci0gICAgICAg
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBiYWxsb3QgPSBWb3RlVmFsdWU7Cisg
ICAgICAgICAgICBpZiAoaXNOdW1iZXJTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc051bWJlclNwZWN1
bGF0aW9uKHJpZ2h0KQorICAgICAgICAgICAgICAgICYmICEoTm9kZTo6c2hvdWxkU3BlY3VsYXRl
SW50ZWdlckZvckFyaXRobWV0aWMobm9kZS0+Y2hpbGQxKCkubm9kZSgpLCBub2RlLT5jaGlsZDIo
KS5ub2RlKCkpCisgICAgICAgICAgICAgICAgICAgICAmJiBub2RlLmNhblNwZWN1bGF0ZUludGVn
ZXIoKSkpCisgICAgICAgICAgICAgICAgYmFsbG90ID0gVm90ZURvdWJsZTsKKyAgICAgICAgICAg
IGVsc2UKKyAgICAgICAgICAgICAgICBiYWxsb3QgPSBWb3RlVmFsdWU7CiAgICAgICAgICAgICAg
ICAgCi0gICAgICAgICAgICAgICAgbV9ncmFwaC52b3RlKG5vZGUuY2hpbGQxKCksIGJhbGxvdCk7
Ci0gICAgICAgICAgICAgICAgbV9ncmFwaC52b3RlKG5vZGUuY2hpbGQyKCksIGJhbGxvdCk7Ci0g
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBtX2dyYXBo
LnZvdGVOb2RlKG5vZGUtPmNoaWxkMSgpLCBiYWxsb3QpOworICAgICAgICAgICAgbV9ncmFwaC52
b3RlTm9kZShub2RlLT5jaGlsZDIoKSwgYmFsbG90KTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBjYXNlIEFyaXRoQWJzOgotICAg
ICAgICAgICAgICAgIERvdWJsZUJhbGxvdCBiYWxsb3Q7Ci0gICAgICAgICAgICAgICAgaWYgKCEo
bV9ncmFwaFtub2RlLmNoaWxkMSgpXS5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyRm9yQXJpdGhtZXRp
YygpCi0gICAgICAgICAgICAgICAgICAgICAgJiYgbm9kZS5jYW5TcGVjdWxhdGVJbnRlZ2VyKCkp
KQotICAgICAgICAgICAgICAgICAgICBiYWxsb3QgPSBWb3RlRG91YmxlOwotICAgICAgICAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgYmFsbG90ID0gVm90ZVZhbHVlOworICAgICAg
ICBjYXNlIEFyaXRoQWJzOgorICAgICAgICAgICAgRG91YmxlQmFsbG90IGJhbGxvdDsKKyAgICAg
ICAgICAgIGlmICghKG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyRm9yQXJp
dGhtZXRpYygpCisgICAgICAgICAgICAgICAgICAmJiBub2RlLmNhblNwZWN1bGF0ZUludGVnZXIo
KSkpCisgICAgICAgICAgICAgICAgYmFsbG90ID0gVm90ZURvdWJsZTsKKyAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgICAgICBiYWxsb3QgPSBWb3RlVmFsdWU7CiAgICAgICAgICAgICAgICAg
Ci0gICAgICAgICAgICAgICAgbV9ncmFwaC52b3RlKG5vZGUuY2hpbGQxKCksIGJhbGxvdCk7Ci0g
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBtX2dyYXBoLnZvdGVOb2RlKG5vZGUt
PmNoaWxkMSgpLCBiYWxsb3QpOworICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAg
Ci0gICAgICAgICAgICBjYXNlIEFyaXRoU3FydDoKLSAgICAgICAgICAgICAgICBtX2dyYXBoLnZv
dGUobm9kZS5jaGlsZDEoKSwgVm90ZURvdWJsZSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgQXJpdGhTcXJ0OgorICAgICAgICAgICAgbV9ncmFwaC52b3RlTm9kZShub2Rl
LT5jaGlsZDEoKSwgVm90ZURvdWJsZSk7CisgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
ICAgICAKLSAgICAgICAgICAgIGNhc2UgU2V0TG9jYWw6IHsKLSAgICAgICAgICAgICAgICBTcGVj
dWxhdGVkVHlwZSBwcmVkaWN0aW9uID0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5wcmVkaWN0aW9u
KCk7Ci0gICAgICAgICAgICAgICAgaWYgKGlzRG91YmxlU3BlY3VsYXRpb24ocHJlZGljdGlvbikp
Ci0gICAgICAgICAgICAgICAgICAgIG5vZGUudmFyaWFibGVBY2Nlc3NEYXRhKCktPnZvdGUoVm90
ZURvdWJsZSk7Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAoIWlzTnVtYmVyU3BlY3VsYXRpb24o
cHJlZGljdGlvbikgfHwgaXNJbnQzMlNwZWN1bGF0aW9uKHByZWRpY3Rpb24pKQotICAgICAgICAg
ICAgICAgICAgICBub2RlLnZhcmlhYmxlQWNjZXNzRGF0YSgpLT52b3RlKFZvdGVWYWx1ZSk7Ci0g
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9CisgICAgICAgIGNhc2UgU2V0TG9j
YWw6IHsKKyAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24gPSBub2RlLT5jaGls
ZDEoKS0+cHJlZGljdGlvbigpOworICAgICAgICAgICAgaWYgKGlzRG91YmxlU3BlY3VsYXRpb24o
cHJlZGljdGlvbikpCisgICAgICAgICAgICAgICAgbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCkt
PnZvdGUoVm90ZURvdWJsZSk7CisgICAgICAgICAgICBlbHNlIGlmICghaXNOdW1iZXJTcGVjdWxh
dGlvbihwcmVkaWN0aW9uKSB8fCBpc0ludDMyU3BlY3VsYXRpb24ocHJlZGljdGlvbikpCisgICAg
ICAgICAgICAgICAgbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCktPnZvdGUoVm90ZVZhbHVlKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAgICAgICAgICAgICAgICAgCi0gICAgICAg
ICAgICBjYXNlIFB1dEJ5VmFsOgotICAgICAgICAgICAgY2FzZSBQdXRCeVZhbEFsaWFzOiB7Ci0g
ICAgICAgICAgICAgICAgRWRnZSBjaGlsZDEgPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDAp
OwotICAgICAgICAgICAgICAgIEVkZ2UgY2hpbGQyID0gbV9ncmFwaC52YXJBcmdDaGlsZChub2Rl
LCAxKTsKLSAgICAgICAgICAgICAgICBFZGdlIGNoaWxkMyA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQo
bm9kZSwgMik7Ci0gICAgICAgICAgICAgICAgbV9ncmFwaC52b3RlKGNoaWxkMSwgVm90ZVZhbHVl
KTsKLSAgICAgICAgICAgICAgICBtX2dyYXBoLnZvdGUoY2hpbGQyLCBWb3RlVmFsdWUpOwotICAg
ICAgICAgICAgICAgIHN3aXRjaCAobm9kZS5hcnJheU1vZGUoKS50eXBlKCkpIHsKLSAgICAgICAg
ICAgICAgICBjYXNlIEFycmF5OjpEb3VibGU6Ci0gICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgu
dm90ZShjaGlsZDMsIFZvdGVEb3VibGUpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLnZvdGUo
Y2hpbGQzLCBWb3RlVmFsdWUpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgICAgICB9CisgICAgICAgIGNhc2UgUHV0QnlWYWw6CisgICAgICAgIGNhc2UgUHV0QnlWYWxB
bGlhczogeworICAgICAgICAgICAgRWRnZSBjaGlsZDEgPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG5v
ZGUsIDApOworICAgICAgICAgICAgRWRnZSBjaGlsZDIgPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG5v
ZGUsIDEpOworICAgICAgICAgICAgRWRnZSBjaGlsZDMgPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG5v
ZGUsIDIpOworICAgICAgICAgICAgbV9ncmFwaC52b3RlTm9kZShjaGlsZDEsIFZvdGVWYWx1ZSk7
CisgICAgICAgICAgICBtX2dyYXBoLnZvdGVOb2RlKGNoaWxkMiwgVm90ZVZhbHVlKTsKKyAgICAg
ICAgICAgIHN3aXRjaCAobm9kZS5hcnJheU1vZGUoKS50eXBlKCkpIHsKKyAgICAgICAgICAgIGNh
c2UgQXJyYXk6OkRvdWJsZToKKyAgICAgICAgICAgICAgICBtX2dyYXBoLnZvdGVOb2RlKGNoaWxk
MywgVm90ZURvdWJsZSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIG1f
Z3JhcGgudm90ZShub2RlLCBWb3RlVmFsdWUpOworICAgICAgICAgICAgICAgIG1fZ3JhcGgudm90
ZU5vZGUoY2hpbGQzLCBWb3RlVmFsdWUpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAg
ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgbV9ncmFwaC52b3RlQ2hpbGRyZW4obm9kZSwgVm90
ZVZhbHVlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorICAgIAorICAg
IHZvaWQgZG9Sb3VuZE9mRG91YmxlVm90aW5nKCkKKyAgICB7CisjaWYgREZHX0VOQUJMRShERUJV
R19QUk9QQUdBVElPTl9WRVJCT1NFKQorICAgICAgICBkYXRhTG9nRigiVm90aW5nIG9uIGRvdWJs
ZSB1c2VzIG9mIGxvY2FscyBbJXVdXG4iLCBtX2NvdW50KTsKKyNlbmRpZgorICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9ncmFwaC5tX3ZhcmlhYmxlQWNjZXNzRGF0YS5zaXplKCk7
ICsraSkKKyAgICAgICAgICAgIG1fZ3JhcGgubV92YXJpYWJsZUFjY2Vzc0RhdGFbaV0uZmluZCgp
LT5jbGVhclZvdGVzKCk7CisgICAgICAgIGZvciAoQmFzaWNCbG9jayBibG9ja0luZGV4ID0gMDsg
aSA8IG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgpOyArK2Jsb2NrSW5kZXgpIHsKKyAgICAgICAgICAg
IEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5tX2Jsb2Nrc1tibG9ja0luZGV4XS5nZXQoKTsK
KyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBibG9jay0+c2l6ZSgpOyArK2kp
IHsKKyAgICAgICAgICAgICAgICBtX2N1cnJlbnROb2RlID0gYmxvY2stPmF0KGkpOworICAgICAg
ICAgICAgICAgIGRvRG91YmxlVm90aW5nKG1fY3VycmVudE5vZGUpOworICAgICAgICAgICAgfQog
ICAgICAgICB9CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2dyYXBoLm1fdmFy
aWFibGVBY2Nlc3NEYXRhLnNpemUoKTsgKytpKSB7CiAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vz
c0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9ICZtX2dyYXBoLm1fdmFyaWFibGVBY2Nlc3NEYXRh
W2ldOwpAQCAtMTAxMiw3ICsxMDMzLDcgQEAgcHJpdmF0ZToKICAgICAgICAgfQogICAgIH0KICAg
ICAKLSAgICBOb2RlSW5kZXggbV9jb21waWxlSW5kZXg7CisgICAgTm9kZSogbV9jdXJyZW50Tm9k
ZTsKICAgICBib29sIG1fY2hhbmdlZDsKIAogI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJ
T05fVkVSQk9TRSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RydWN0dXJl
QWJzdHJhY3RWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3RydWN0dXJlQWJzdHJhY3RWYWx1ZS5oCShyZXZpc2lvbiAxNDA2MTYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0cnVjdHVyZUFic3RyYWN0VmFsdWUuaAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTIgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEy
LCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMzE0LDYgKzMxNCw4IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAg
c3RhdGljIFN0cnVjdHVyZSogdG9wVmFsdWUoKSB7IHJldHVybiByZWludGVycHJldF9jYXN0PFN0
cnVjdHVyZSo+KDEpOyB9CiAgICAgCisgICAgLy8gTkIuIFRoaXMgbXVzdCBoYXZlIGEgdHJpdmlh
bCBkZXN0cnVjdG9yLgorICAgIAogICAgIC8vIFRoaXMgY2FuIG9ubHkgcmVtZW1iZXIgb25lIHN0
cnVjdHVyZSBhdCBhIHRpbWUuCiAgICAgU3RydWN0dXJlKiBtX3N0cnVjdHVyZTsKIH07CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0cnVjdHVyZUNoZWNrSG9pc3RpbmdQaGFz
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJ1Y3R1
cmVDaGVja0hvaXN0aW5nUGhhc2UuY3BwCShyZXZpc2lvbiAxNDA2MTYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1N0cnVjdHVyZUNoZWNrSG9pc3RpbmdQaGFzZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTY0LDIzICs2NCwyMiBAQCBwdWJsaWM6CiAgICAgICAgICAgICBpZiAoIWJs
b2NrKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBpbmRleEluQmxvY2sgPSAwOyBpbmRleEluQmxvY2sgPCBibG9jay0+c2l6ZSgpOyArK2luZGV4
SW5CbG9jaykgewotICAgICAgICAgICAgICAgIE5vZGVJbmRleCBub2RlSW5kZXggPSBibG9jay0+
YXQoaW5kZXhJbkJsb2NrKTsKLSAgICAgICAgICAgICAgICBOb2RlJiBub2RlID0gbV9ncmFwaFtu
b2RlSW5kZXhdOwotICAgICAgICAgICAgICAgIGlmICghbm9kZS5zaG91bGRHZW5lcmF0ZSgpKQor
ICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+YXQoaW5kZXhJbkJsb2NrKTsKKyAg
ICAgICAgICAgICAgICBpZiAoIW5vZGUtPnNob3VsZEdlbmVyYXRlKCkpCiAgICAgICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIHN3aXRjaCAobm9kZS5vcCgpKSB7Cisg
ICAgICAgICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CiAgICAgICAgICAgICAgICAgY2Fz
ZSBDaGVja1N0cnVjdHVyZToKICAgICAgICAgICAgICAgICBjYXNlIFN0cnVjdHVyZVRyYW5zaXRp
b25XYXRjaHBvaW50OiB7Ci0gICAgICAgICAgICAgICAgICAgIE5vZGUmIGNoaWxkID0gbV9ncmFw
aFtub2RlLmNoaWxkMSgpXTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkLm9wKCkgIT0g
R2V0TG9jYWwpCisgICAgICAgICAgICAgICAgICAgIE5vZGUqIGNoaWxkID0gbm9kZS0+Y2hpbGQx
KCkubm9kZSgpOworICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGQtPm9wKCkgIT0gR2V0TG9j
YWwpCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAg
VmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IGNoaWxkLnZhcmlhYmxlQWNjZXNzRGF0YSgp
OworICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gY2hp
bGQtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOwogICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS0+
dm90ZShWb3RlU3RydWN0dXJlQ2hlY2spOwogICAgICAgICAgICAgICAgICAgICBpZiAodmFyaWFi
bGUtPmlzQ2FwdHVyZWQoKSB8fCB2YXJpYWJsZS0+c3RydWN0dXJlQ2hlY2tIb2lzdGluZ0ZhaWxl
ZCgpKQogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAg
IGlmICghaXNDZWxsU3BlY3VsYXRpb24odmFyaWFibGUtPnByZWRpY3Rpb24oKSkpCiAgICAgICAg
ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgbm90aWNlU3RydWN0
dXJlQ2hlY2sodmFyaWFibGUsIG5vZGUuc3RydWN0dXJlU2V0KCkpOworICAgICAgICAgICAgICAg
ICAgICBub3RpY2VTdHJ1Y3R1cmVDaGVjayh2YXJpYWJsZSwgbm9kZS0+c3RydWN0dXJlU2V0KCkp
OwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICAgICAgIApAQCAtMTA5LDEzICsxMDgsMTMgQEAgcHVibGljOgogICAgICAgICAgICAg
ICAgICAgICAKICAgICAgICAgICAgICAgICBjYXNlIEFycmF5aWZ5VG9TdHJ1Y3R1cmU6CiAgICAg
ICAgICAgICAgICAgY2FzZSBBcnJheWlmeToKLSAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUu
YXJyYXlNb2RlKCkuY29udmVyc2lvbigpID09IEFycmF5OjpSYWdlQ29udmVydCkgeworICAgICAg
ICAgICAgICAgICAgICBpZiAobm9kZS0+YXJyYXlNb2RlKCkuY29udmVyc2lvbigpID09IEFycmF5
OjpSYWdlQ29udmVydCkgewogICAgICAgICAgICAgICAgICAgICAgICAgLy8gUmFnZSBjb252ZXJz
aW9uIGNoYW5nZXMgc3RydWN0dXJlcy4gV2Ugc2hvdWxkIGF2b2lkIHR5aW5nIHRvIGRvCiAgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBhbnkga2luZCBvZiBob2lzdGluZyB3aGVuIHJhZ2UgY29u
dmVyc2lvbiBpcyBpbiBwbGF5LgotICAgICAgICAgICAgICAgICAgICAgICAgTm9kZSYgY2hpbGQg
PSBtX2dyYXBoW25vZGUuY2hpbGQxKCldOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNo
aWxkLm9wKCkgIT0gR2V0TG9jYWwpCisgICAgICAgICAgICAgICAgICAgICAgICBOb2RlKiBjaGls
ZCA9IG5vZGUtPmNoaWxkMSgpLm5vZGV4KCk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
Y2hpbGQtPm9wKCkgIT0gR2V0TG9jYWwpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxl
ID0gY2hpbGQudmFyaWFibGVBY2Nlc3NEYXRhKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBW
YXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gY2hpbGQtPnZhcmlhYmxlQWNjZXNzRGF0YSgp
OwogICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUtPnZvdGUoVm90ZU90aGVyKTsKICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICh2YXJpYWJsZS0+aXNDYXB0dXJlZCgpIHx8IHZhcmlh
YmxlLT5zdHJ1Y3R1cmVDaGVja0hvaXN0aW5nRmFpbGVkKCkpCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CkBAIC0xMzAsMzAgKzEyOSwyOSBAQCBwdWJsaWM6CiAgICAgICAgICAg
ICAgICAgICAgIC8vIGtpbmQgb2YgQ2hlY2tTdHJ1Y3R1cmUsIHRoZW4gd2Ugc2hvdWxkIG5vdGlj
ZSB0aGVtIHRvIGVuc3VyZSB0aGF0CiAgICAgICAgICAgICAgICAgICAgIC8vIHdlJ3JlIG5vdCBo
b2lzdGluZyBhIGNoZWNrIHRoYXQgd291bGQgY29udHJhdmVuZSBjaGVja3MgdGhhdCBhcmUKICAg
ICAgICAgICAgICAgICAgICAgLy8gYWxyZWFkeSBiZWluZyBwZXJmb3JtZWQuCi0gICAgICAgICAg
ICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBub2RlLnZhcmlhYmxlQWNj
ZXNzRGF0YSgpOworICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlh
YmxlID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CiAgICAgICAgICAgICAgICAgICAgIGlm
ICh2YXJpYWJsZS0+aXNDYXB0dXJlZCgpIHx8IHZhcmlhYmxlLT5zdHJ1Y3R1cmVDaGVja0hvaXN0
aW5nRmFpbGVkKCkpCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
ICAgICAgICAgaWYgKCFpc0NlbGxTcGVjdWxhdGlvbih2YXJpYWJsZS0+cHJlZGljdGlvbigpKSkK
ICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBOb2Rl
SW5kZXggc291cmNlID0gbm9kZS5jaGlsZDEoKS5pbmRleCgpOworICAgICAgICAgICAgICAgICAg
ICBOb2RlKiBzb3VyY2UgPSBub2RlLT5jaGlsZDEoKS5ub2RlKCk7CiAgICAgICAgICAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgc3ViSW5kZXhJbkJsb2NrID0gMDsgc3ViSW5kZXhJbkJsb2NrIDwg
YmxvY2stPnNpemUoKTsgKytzdWJJbmRleEluQmxvY2spIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIE5vZGVJbmRleCBzdWJOb2RlSW5kZXggPSBibG9jay0+YXQoc3ViSW5kZXhJbkJsb2NrKTsK
LSAgICAgICAgICAgICAgICAgICAgICAgIE5vZGUmIHN1Yk5vZGUgPSBtX2dyYXBoW3N1Yk5vZGVJ
bmRleF07Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXN1Yk5vZGUuc2hvdWxkR2VuZXJh
dGUoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIE5vZGUqIHN1Yk5vZGUgPSBibG9jay0+YXQo
c3ViSW5kZXhJbkJsb2NrKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghc3ViTm9kZS0+
c2hvdWxkR2VuZXJhdGUoKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsK
LSAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoc3ViTm9kZS5vcCgpKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBzd2l0Y2ggKHN1Yk5vZGUtPm9wKCkpIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgIGNhc2UgQ2hlY2tTdHJ1Y3R1cmU6IHsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoc3ViTm9kZS5jaGlsZDEoKS5pbmRleCgpICE9IHNvdXJjZSkKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoc3ViTm9kZS0+Y2hpbGQxKCkgIT0gc291cmNlKQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3RpY2VTdHJ1Y3R1cmVDaGVjayh2
YXJpYWJsZSwgc3ViTm9kZS5zdHJ1Y3R1cmVTZXQoKSk7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbm90aWNlU3RydWN0dXJlQ2hlY2sodmFyaWFibGUsIHN1Yk5vZGUtPnN0cnVjdHVyZVNl
dCgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgU3RydWN0dXJlVHJhbnNp
dGlvbldhdGNocG9pbnQ6IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3ViTm9k
ZS5jaGlsZDEoKS5pbmRleCgpICE9IHNvdXJjZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoc3ViTm9kZS0+Y2hpbGQxKCkgIT0gc291cmNlKQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBub3RpY2VTdHJ1Y3R1cmVDaGVjayh2YXJpYWJsZSwgc3ViTm9k
ZS5zdHJ1Y3R1cmUoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm90aWNlU3RydWN0
dXJlQ2hlY2sodmFyaWFibGUsIHN1Yk5vZGUtPnN0cnVjdHVyZSgpKTsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICAgICAgICAgIGRlZmF1bHQ6CkBAIC0xNjEsMTQgKzE1OSwxNCBAQCBwdWJsaWM6CiAg
ICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgudm90ZShub2RlLCBWb3Rl
T3RoZXIpOworICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLnZvdGVDaGlsZHJlbihub2RlLCBW
b3RlT3RoZXIpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgY2FzZSBHYXJiYWdlVmFsdWU6CiAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBkZWZhdWx0Ogot
ICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLnZvdGUobm9kZSwgVm90ZU90aGVyKTsKKyAgICAg
ICAgICAgICAgICAgICAgbV9ncmFwaC52b3RlQ2hpbGRyZW4obm9kZSwgVm90ZU90aGVyKTsKICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
fQpAQCAtMjA5LDEwICsyMDcsMTAgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwogICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2dyYXBoLm1fbXVzdEhhbmRs
ZVZhbHVlcy5zaXplKCk7ICsraSkgewogICAgICAgICAgICAgICAgIGludCBvcGVyYW5kID0gbV9n
cmFwaC5tX211c3RIYW5kbGVWYWx1ZXMub3BlcmFuZEZvckluZGV4KGkpOwotICAgICAgICAgICAg
ICAgIE5vZGVJbmRleCBub2RlSW5kZXggPSBibG9jay0+dmFyaWFibGVzQXRIZWFkLm9wZXJhbmQo
b3BlcmFuZCk7Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGVJbmRleCA9PSBOb05vZGUpCisgICAg
ICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT52YXJpYWJsZXNBdEhlYWQub3BlcmFuZChv
cGVyYW5kKTsKKyAgICAgICAgICAgICAgICBpZiAoIW5vZGUpCiAgICAgICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUg
PSBtX2dyYXBoW25vZGVJbmRleF0udmFyaWFibGVBY2Nlc3NEYXRhKCk7CisgICAgICAgICAgICAg
ICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0
YSgpOwogICAgICAgICAgICAgICAgIEhhc2hNYXA8VmFyaWFibGVBY2Nlc3NEYXRhKiwgQ2hlY2tE
YXRhPjo6aXRlcmF0b3IgaXRlciA9IG1fbWFwLmZpbmQodmFyaWFibGUpOwogICAgICAgICAgICAg
ICAgIGlmIChpdGVyID09IG1fbWFwLmVuZCgpKQogICAgICAgICAgICAgICAgICAgICBjb250aW51
ZTsKQEAgLTI2NSw0OCArMjYzLDQ3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIGlmICghYmxvY2sp
CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGlu
ZGV4SW5CbG9jayA9IDA7IGluZGV4SW5CbG9jayA8IGJsb2NrLT5zaXplKCk7ICsraW5kZXhJbkJs
b2NrKSB7Ci0gICAgICAgICAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRleCA9IGJsb2NrLT5hdChp
bmRleEluQmxvY2spOwotICAgICAgICAgICAgICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW25vZGVJ
bmRleF07CisgICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5hdChpbmRleEluQmxv
Y2spOwogICAgICAgICAgICAgICAgIC8vIEJlIGNhcmVmdWwgbm90IHRvIHVzZSAnbm9kZScgYWZ0
ZXIgYXBwZW5kaW5nIHRvIHRoZSBncmFwaC4gSW4gdGhvc2Ugc3dpdGNoCiAgICAgICAgICAgICAg
ICAgLy8gY2FzZXMgd2hlcmUgd2UgbmVlZCB0byBhcHBlbmQsIHdlIGZpcnN0IGNhcmVmdWxseSBl
eHRyYWN0IGV2ZXJ5dGhpbmcgd2UgbmVlZAogICAgICAgICAgICAgICAgIC8vIGZyb20gdGhlIG5v
ZGUsIGJlZm9yZSBkb2luZyBhbnkgYXBwZW5kaW5nLgotICAgICAgICAgICAgICAgIGlmICghbm9k
ZS5zaG91bGRHZW5lcmF0ZSgpKQorICAgICAgICAgICAgICAgIGlmICghbm9kZS0+c2hvdWxkR2Vu
ZXJhdGUoKSkKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAg
c3dpdGNoIChub2RlLm9wKCkpIHsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkp
IHsKICAgICAgICAgICAgICAgICBjYXNlIFNldEFyZ3VtZW50OiB7CiAgICAgICAgICAgICAgICAg
ICAgIEFTU0VSVCghYmxvY2tJbmRleCk7CiAgICAgICAgICAgICAgICAgICAgIC8vIEluc2VydCBh
IEdldExvY2FsIGFuZCBhIENoZWNrU3RydWN0dXJlIGltbWVkaWF0ZWx5IGZvbGxvd2luZyB0aGlz
CiAgICAgICAgICAgICAgICAgICAgIC8vIFNldEFyZ3VtZW50LCBpZiB0aGUgdmFyaWFibGUgd2Fz
IGEgY2FuZGlkYXRlIGZvciBzdHJ1Y3R1cmUgaG9pc3RpbmcuCiAgICAgICAgICAgICAgICAgICAg
IC8vIElmIHRoZSBiYXNpYyBibG9jayBwcmV2aW91c2x5IG9ubHkgaGFkIHRoZSBTZXRBcmd1bWVu
dCBhcyBpdHMKICAgICAgICAgICAgICAgICAgICAgLy8gdmFyaWFibGUtYXQtdGFpbCwgdGhlbiBy
ZXBsYWNlIGl0IHdpdGggdGhpcyBHZXRMb2NhbC4KLSAgICAgICAgICAgICAgICAgICAgVmFyaWFi
bGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG5vZGUudmFyaWFibGVBY2Nlc3NEYXRhKCk7CisgICAg
ICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBub2RlLT52YXJp
YWJsZUFjY2Vzc0RhdGEoKTsKICAgICAgICAgICAgICAgICAgICAgSGFzaE1hcDxWYXJpYWJsZUFj
Y2Vzc0RhdGEqLCBDaGVja0RhdGE+OjppdGVyYXRvciBpdGVyID0gbV9tYXAuZmluZCh2YXJpYWJs
ZSk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChpdGVyID09IG1fbWFwLmVuZCgpKQogICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIGlmICghaXRlci0+
dmFsdWUubV9zdHJ1Y3R1cmUpCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIENvZGVPcmlnaW4gY29kZU9yaWdp
biA9IG5vZGUuY29kZU9yaWdpbjsKKyAgICAgICAgICAgICAgICAgICAgQ29kZU9yaWdpbiBjb2Rl
T3JpZ2luID0gbm9kZS0+Y29kZU9yaWdpbjsKICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAg
ICAgICAgICAgICAgIE5vZGVJbmRleCBnZXRMb2NhbEluZGV4ID0gaW5zZXJ0aW9uU2V0Lmluc2Vy
dE5vZGUoCisgICAgICAgICAgICAgICAgICAgIE5vZGUqIGdldExvY2FsID0gaW5zZXJ0aW9uU2V0
Lmluc2VydE5vZGUoCiAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleEluQmxvY2sgKyAxLCBE
b250UmVmQ2hpbGRyZW4sIERvbnRSZWZOb2RlLCB2YXJpYWJsZS0+cHJlZGljdGlvbigpLAotICAg
ICAgICAgICAgICAgICAgICAgICAgR2V0TG9jYWwsIGNvZGVPcmlnaW4sIE9wSW5mbyh2YXJpYWJs
ZSksIG5vZGVJbmRleCk7CisgICAgICAgICAgICAgICAgICAgICAgICBHZXRMb2NhbCwgY29kZU9y
aWdpbiwgT3BJbmZvKHZhcmlhYmxlKSwgbm9kZSk7CiAgICAgICAgICAgICAgICAgICAgIGluc2Vy
dGlvblNldC5pbnNlcnROb2RlKAogICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhJbkJsb2Nr
ICsgMSwgUmVmQ2hpbGRyZW4sIERvbnRSZWZOb2RlLCBTcGVjTm9uZSwgQ2hlY2tTdHJ1Y3R1cmUs
CiAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlT3JpZ2luLCBPcEluZm8obV9ncmFwaC5hZGRT
dHJ1Y3R1cmVTZXQoaXRlci0+dmFsdWUubV9zdHJ1Y3R1cmUpKSwKICAgICAgICAgICAgICAgICAg
ICAgICAgIGdldExvY2FsSW5kZXgpOwogCi0gICAgICAgICAgICAgICAgICAgIGlmIChibG9jay0+
dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpID09IG5vZGVJbmRleCkK
LSAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZCh2
YXJpYWJsZS0+bG9jYWwoKSkgPSBnZXRMb2NhbEluZGV4OworICAgICAgICAgICAgICAgICAgICBp
ZiAoYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSA9PSBu
b2RlKQorICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVy
YW5kKHZhcmlhYmxlLT5sb2NhbCgpKSA9IGdldExvY2FsOwogICAgICAgICAgICAgICAgICAgICAK
LSAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5zdWJzdGl0dXRlR2V0TG9jYWwoKmJsb2NrLCBp
bmRleEluQmxvY2ssIHZhcmlhYmxlLCBnZXRMb2NhbEluZGV4KTsKKyAgICAgICAgICAgICAgICAg
ICAgbV9ncmFwaC5zdWJzdGl0dXRlR2V0TG9jYWwoKmJsb2NrLCBpbmRleEluQmxvY2ssIHZhcmlh
YmxlLCBnZXRMb2NhbCk7CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAg
ICBjaGFuZ2VkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBjYXNlIFNldExv
Y2FsOiB7Ci0gICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUg
PSBub2RlLnZhcmlhYmxlQWNjZXNzRGF0YSgpOworICAgICAgICAgICAgICAgICAgICBWYXJpYWJs
ZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CiAgICAg
ICAgICAgICAgICAgICAgIEhhc2hNYXA8VmFyaWFibGVBY2Nlc3NEYXRhKiwgQ2hlY2tEYXRhPjo6
aXRlcmF0b3IgaXRlciA9IG1fbWFwLmZpbmQodmFyaWFibGUpOwogICAgICAgICAgICAgICAgICAg
ICBpZiAoaXRlciA9PSBtX21hcC5lbmQoKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OwpAQCAtMzE3LDggKzMxNCw4IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgLy8gYmUg
ZHJvcHBlZCBpbnRvIHRoaXMgYnl0ZWNvZGUgdmFyaWFibGUgaWYgdGhlIENoZWNrU3RydWN0dXJl
IGRlY2lkZXMKICAgICAgICAgICAgICAgICAgICAgLy8gdG8gZXhpdC4KICAgICAgICAgICAgICAg
ICAgICAgCi0gICAgICAgICAgICAgICAgICAgIENvZGVPcmlnaW4gY29kZU9yaWdpbiA9IG5vZGUu
Y29kZU9yaWdpbjsKLSAgICAgICAgICAgICAgICAgICAgTm9kZUluZGV4IGNoaWxkMSA9IG5vZGUu
Y2hpbGQxKCkuaW5kZXgoKTsKKyAgICAgICAgICAgICAgICAgICAgQ29kZU9yaWdpbiBjb2RlT3Jp
Z2luID0gbm9kZS0+Y29kZU9yaWdpbjsKKyAgICAgICAgICAgICAgICAgICAgTm9kZSogY2hpbGQx
ID0gbm9kZS0+Y2hpbGQxKCkubm9kZSgpOwogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAg
ICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCiAgICAgICAgICAgICAgICAgICAg
ICAgICBpbmRleEluQmxvY2ssIERvbnRSZWZDaGlsZHJlbiwgRG9udFJlZk5vZGUsIFNwZWNOb25l
LCBTZXRMb2NhbCwgY29kZU9yaWdpbiwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHVmFsaWRhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHVmFsaWRhdGUuY3BwCShyZXZpc2lvbiAxNDA2MTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1ZhbGlkYXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODAsNDAgKzgwLDQzIEBA
IHB1YmxpYzoKICAgICAgICAgLy8gVmFsaWRhdGUgdGhhdCBhbGwgbG9jYWwgdmFyaWFibGVzIGF0
IHRoZSBoZWFkIG9mIHRoZSByb290IGJsb2NrIGFyZSBkZWFkLgogICAgICAgICBCYXNpY0Jsb2Nr
KiByb290ID0gbV9ncmFwaC5tX2Jsb2Nrc1swXS5nZXQoKTsKICAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IHJvb3QtPnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkxvY2FscygpOyArK2kp
Ci0gICAgICAgICAgICBWX0VRVUFMKChzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KGkpLCAw
KSwgTm9Ob2RlLCByb290LT52YXJpYWJsZXNBdEhlYWQubG9jYWwoaSkpOworICAgICAgICAgICAg
Vl9FUVVBTCgoc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihpKSwgMCksIDAsIHJvb3QtPnZh
cmlhYmxlc0F0SGVhZC5sb2NhbChpKSk7CiAgICAgICAgIAogICAgICAgICAvLyBWYWxpZGF0ZSBy
ZWYgY291bnRzIGFuZCB1c2VzLgotICAgICAgICBWZWN0b3I8dW5zaWduZWQ+IG15UmVmQ291bnRz
OwotICAgICAgICBteVJlZkNvdW50cy5maWxsKDAsIG1fZ3JhcGguc2l6ZSgpKTsKLSAgICAgICAg
Qml0VmVjdG9yIGFjY2VwdGFibGVOb2RlSW5kaWNlczsKKyAgICAgICAgSGFzaE1hcDxOb2RlKiwg
dW5zaWduZWQ+IG15UmVmQ291bnRzOwogICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRl
eCA9IDA7IGJsb2NrSW5kZXggPCBtX2dyYXBoLm1fYmxvY2tzLnNpemUoKTsgKytibG9ja0luZGV4
KSB7CiAgICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGgubV9ibG9ja3NbYmxv
Y2tJbmRleF0uZ2V0KCk7Ci0gICAgICAgICAgICBpZiAoIWJsb2NrKQorICAgICAgICAgICAgaWYg
KCFibG9jayB8fCAhYmxvY2stPmlzUmVhY2hhYmxlKQogICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwotICAgICAgICAgICAgaWYgKCFibG9jay0+aXNSZWFjaGFibGUpCisgICAgICAgICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IGJsb2NrLT5udW1Ob2RlcygpOyArK2kpCisgICAgICAgICAgICAg
ICAgbXlSZWZDb3VudHMuYWRkKGJsb2NrLT5ub2RlKGkpLCAwKTsKKyAgICAgICAgfQorICAgICAg
ICBIYXNoU2V0PE5vZGUqPiBhY2NlcHRhYmxlTm9kZXM7CisgICAgICAgIGZvciAoQmxvY2tJbmRl
eCBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8IG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgpOyAr
K2Jsb2NrSW5kZXgpIHsKKyAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5t
X2Jsb2Nrc1tibG9ja0luZGV4XS5nZXQoKTsKKyAgICAgICAgICAgIGlmICghYmxvY2sgfHwgIWJs
b2NrLT5pc1JlYWNoYWJsZSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYmxvY2stPm51bU5vZGVzKCk7ICsraSkgewotICAgICAg
ICAgICAgICAgIE5vZGVJbmRleCBub2RlSW5kZXggPSBibG9jay0+bm9kZUluZGV4KGkpOwotICAg
ICAgICAgICAgICAgIGFjY2VwdGFibGVOb2RlSW5kaWNlcy5zZXQobm9kZUluZGV4KTsKLSAgICAg
ICAgICAgICAgICBOb2RlJiBub2RlID0gbV9ncmFwaFtub2RlSW5kZXhdOwotICAgICAgICAgICAg
ICAgIGlmICghbm9kZS5zaG91bGRHZW5lcmF0ZSgpKQorICAgICAgICAgICAgICAgIE5vZGUqIG5v
ZGUgPSBibG9jay0+bm9kZShpKTsKKyAgICAgICAgICAgICAgICBhY2NlcHRhYmxlTm9kZXMuYWRk
KG5vZGUpOworICAgICAgICAgICAgICAgIGlmICghbm9kZS0+c2hvdWxkR2VuZXJhdGUoKSkKICAg
ICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBqID0gMDsgaiA8IG1fZ3JhcGgubnVtQ2hpbGRyZW4obm9kZSk7ICsraikgewogICAgICAgICAg
ICAgICAgICAgICBFZGdlIGVkZ2UgPSBtX2dyYXBoLmNoaWxkKG5vZGUsIGopOwogICAgICAgICAg
ICAgICAgICAgICBpZiAoIWVkZ2UpCiAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsK
ICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIG15UmVmQ291bnRzW2Vk
Z2UuaW5kZXgoKV0rKzsKKyAgICAgICAgICAgICAgICAgICAgbXlSZWZDb3VudHMuZmluZChlZGdl
Lm5vZGUoKSktPnZhbHVlKys7CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAg
ICAgICAvLyBVbmxlc3MgSSdtIGEgRmx1c2gsIFBoYW50b20sIEdldExvY2FsLCBvciBQaGksIG15
IGNoaWxkcmVuIHNob3VsZCBoYXNSZXN1bHQoKS4KLSAgICAgICAgICAgICAgICAgICAgc3dpdGNo
IChub2RlLm9wKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7
CiAgICAgICAgICAgICAgICAgICAgIGNhc2UgRmx1c2g6CiAgICAgICAgICAgICAgICAgICAgIGNh
c2UgUGhhbnRvbToKICAgICAgICAgICAgICAgICAgICAgY2FzZSBHZXRMb2NhbDoKICAgICAgICAg
ICAgICAgICAgICAgY2FzZSBQaGk6CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgICAgIFZBTElE
QVRFKChub2RlSW5kZXgsIGVkZ2UpLCBtX2dyYXBoW2VkZ2VdLmhhc1Jlc3VsdCgpKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChub2RlLCBlZGdlKSwgZWRnZS0+aGFzUmVzdWx0
KCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICAgICB9CkBAIC0xMjEsNTQgKzEyNCw1MCBAQCBwdWJsaWM6CiAgICAg
ICAgIH0KICAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4
IDwgbV9ncmFwaC5tX2Jsb2Nrcy5zaXplKCk7ICsrYmxvY2tJbmRleCkgewogICAgICAgICAgICAg
QmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLm1fYmxvY2tzW2Jsb2NrSW5kZXhdLmdldCgpOwot
ICAgICAgICAgICAgaWYgKCFibG9jaykKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAg
ICAgICAgIGlmICghYmxvY2stPmlzUmVhY2hhYmxlKQorICAgICAgICAgICAgaWYgKCFibG9jayB8
fCAhYmxvY2stPmlzUmVhY2hhYmxlKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAg
ICAgICAgCi0gICAgICAgICAgICBCaXRWZWN0b3IgcGhpc0luVGhpc0Jsb2NrOwotICAgICAgICAg
ICAgQml0VmVjdG9yIG5vZGVzSW5UaGlzQmxvY2s7CisgICAgICAgICAgICBIYXNoU2V0PE5vZGUq
PiBwaGlzSW5UaGlzQmxvY2s7CisgICAgICAgICAgICBIYXNoU2V0PE5vZGUqPiBub2Rlc0luVGhp
c0Jsb2NrOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IGJsb2NrLT5udW1Ob2RlcygpOyArK2kpIHsKLSAgICAgICAgICAgICAgICBOb2RlSW5kZXggbm9k
ZUluZGV4ID0gYmxvY2stPm5vZGVJbmRleChpKTsKLSAgICAgICAgICAgICAgICBOb2RlJiBub2Rl
ID0gbV9ncmFwaFtub2RlSW5kZXhdOwotICAgICAgICAgICAgICAgIG5vZGVzSW5UaGlzQmxvY2su
c2V0KG5vZGVJbmRleCk7CisgICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5ub2Rl
KGkpOworICAgICAgICAgICAgICAgIG5vZGVzSW5UaGlzQmxvY2suYWRkKG5vZGUpOwogICAgICAg
ICAgICAgICAgIGlmIChibG9jay0+aXNQaGlJbmRleChpKSkKLSAgICAgICAgICAgICAgICAgICAg
cGhpc0luVGhpc0Jsb2NrLnNldChub2RlSW5kZXgpOwotICAgICAgICAgICAgICAgIFZfRVFVQUwo
KG5vZGVJbmRleCksIG15UmVmQ291bnRzW25vZGVJbmRleF0sIG5vZGUuYWRqdXN0ZWRSZWZDb3Vu
dCgpKTsKKyAgICAgICAgICAgICAgICAgICAgcGhpc0luVGhpc0Jsb2NrLmFkZChub2RlKTsKKyAg
ICAgICAgICAgICAgICBWX0VRVUFMKChub2RlKSwgbXlSZWZDb3VudHMuZ2V0KG5vZGVJbmRleCks
IG5vZGUuYWRqdXN0ZWRSZWZDb3VudCgpKTsKICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IGogPSAwOyBqIDwgbV9ncmFwaC5udW1DaGlsZHJlbihub2RlKTsgKytqKSB7CiAgICAgICAgICAg
ICAgICAgICAgIEVkZ2UgZWRnZSA9IG1fZ3JhcGguY2hpbGQobm9kZSwgaik7CiAgICAgICAgICAg
ICAgICAgICAgIGlmICghZWRnZSkKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwot
ICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgobm9kZUluZGV4LCBlZGdlKSwgYWNjZXB0YWJs
ZU5vZGVJbmRpY2VzLmdldChlZGdlLmluZGV4KCkpKTsKKyAgICAgICAgICAgICAgICAgICAgVkFM
SURBVEUoKG5vZGUsIGVkZ2UpLCBhY2NlcHRhYmxlTm9kZUluZGljZXMuY29udGFpbnMoZWRnZS5u
b2RlKCkpKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAK
ICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYmxvY2stPnBoaXMuc2l6ZSgpOyAr
K2kpIHsKLSAgICAgICAgICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4ID0gYmxvY2stPnBoaXNb
aV07Ci0gICAgICAgICAgICAgICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhbbm9kZUluZGV4XTsKLSAg
ICAgICAgICAgICAgICBBU1NFUlQocGhpc0luVGhpc0Jsb2NrLmdldChub2RlSW5kZXgpKTsKLSAg
ICAgICAgICAgICAgICBWQUxJREFURSgobm9kZUluZGV4KSwgbm9kZS5vcCgpID09IFBoaSk7Ci0g
ICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGxvY2FsID0gbm9kZS5sb2NhbCgpOworICAg
ICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+cGhpc1tpXTsKKyAgICAgICAgICAgICAg
ICBBU1NFUlQocGhpc0luVGhpc0Jsb2NrLmNvbnRhaW5zKG5vZGUpKTsKKyAgICAgICAgICAgICAg
ICBWQUxJREFURSgobm9kZSksIG5vZGUtPm9wKCkgPT0gUGhpKTsKKyAgICAgICAgICAgICAgICBW
aXJ0dWFsUmVnaXN0ZXIgbG9jYWwgPSBub2RlLT5sb2NhbCgpOwogICAgICAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgaiA9IDA7IGogPCBtX2dyYXBoLm51bUNoaWxkcmVuKG5vZGUpOyArK2opIHsK
ICAgICAgICAgICAgICAgICAgICAgRWRnZSBlZGdlID0gbV9ncmFwaC5jaGlsZChub2RlLCBqKTsK
ICAgICAgICAgICAgICAgICAgICAgaWYgKCFlZGdlKQogICAgICAgICAgICAgICAgICAgICAgICAg
Y29udGludWU7CiAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBWQUxJ
REFURSgobm9kZUluZGV4LCBlZGdlKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9n
cmFwaFtlZGdlXS5vcCgpID09IFNldExvY2FsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHx8IG1fZ3JhcGhbZWRnZV0ub3AoKSA9PSBTZXRBcmd1bWVudAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB8fCBtX2dyYXBoW2VkZ2VdLm9wKCkgPT0gRmx1c2gKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfHwgbV9ncmFwaFtlZGdlXS5vcCgpID09IFBoaSk7CisgICAgICAgICAg
ICAgICAgICAgIFZBTElEQVRFKChub2RlLCBlZGdlKSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZWRnZS0+b3AoKSA9PSBTZXRMb2NhbAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB8fCBlZGdlLT5vcCgpID09IFNldEFyZ3VtZW50CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHx8IGVkZ2UtPm9wKCkgPT0gRmx1c2gKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fHwgZWRnZS0+b3AoKSA9PSBQaGkpOwogICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAg
ICAgICAgICAgaWYgKHBoaXNJblRoaXNCbG9jay5nZXQoZWRnZS5pbmRleCgpKSkKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKHBoaXNJblRoaXNCbG9jay5jb250YWlucyhlZGdlLm5vZGUoKSkpCiAg
ICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICAgCi0g
ICAgICAgICAgICAgICAgICAgIGlmIChub2Rlc0luVGhpc0Jsb2NrLmdldChlZGdlLmluZGV4KCkp
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgobm9kZUluZGV4LCBlZGdlKSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGhbZWRnZV0ub3AoKSA9PSBT
ZXRMb2NhbAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgbV9ncmFwaFtlZGdl
XS5vcCgpID09IFNldEFyZ3VtZW50Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8
fCBtX2dyYXBoW2VkZ2VdLm9wKCkgPT0gRmx1c2gpOworICAgICAgICAgICAgICAgICAgICBpZiAo
bm9kZXNJblRoaXNCbG9jay5jb250YWlucyhlZGdlLm5vZGUoKSkpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIFZBTElEQVRFKChub2RlLCBlZGdlKSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGVkZ2UtPm9wKCkgPT0gU2V0TG9jYWwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHx8IGVkZ2UtPm9wKCkgPT0gU2V0QXJndW1lbnQKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHx8IGVkZ2UtPm9wKCkgPT0gRmx1c2gpOwogICAgICAgICAgICAgICAg
ICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAg
ICAgICAgICAgfQpAQCAtMTgwLDMzICsxNzksMzAgQEAgcHVibGljOgogICAgICAgICAgICAgICAg
ICAgICAgICAgQmFzaWNCbG9jayogcHJldkJsb2NrID0gbV9ncmFwaC5tX2Jsb2Nrc1tibG9jay0+
bV9wcmVkZWNlc3NvcnNba11dLmdldCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgVkFMSURB
VEUoKEJsb2NrLCBibG9jay0+bV9wcmVkZWNlc3NvcnNba10pLCBwcmV2QmxvY2spOwogICAgICAg
ICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKEJsb2NrLCBibG9jay0+bV9wcmVkZWNlc3NvcnNb
a10pLCBwcmV2QmxvY2stPmlzUmVhY2hhYmxlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIE5v
ZGVJbmRleCBwcmV2Tm9kZUluZGV4ID0gcHJldkJsb2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFu
ZChsb2NhbCk7CisgICAgICAgICAgICAgICAgICAgICAgICBOb2RlKiBwcmV2Tm9kZSA9IHByZXZC
bG9jay0+dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQobG9jYWwpOwogICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gSWYgd2UgaGF2ZSBhIFBoaSB0aGF0IGlzIG5vdCByZWZlcnJpbmcgdG8gKnRoaXMq
IGJsb2NrIHRoZW4gYWxsIHByZWRlY2Vzc29ycwogICAgICAgICAgICAgICAgICAgICAgICAgLy8g
bXVzdCBoYXZlIHRoYXQgbG9jYWwgYXZhaWxhYmxlLgotICAgICAgICAgICAgICAgICAgICAgICAg
VkFMSURBVEUoKGxvY2FsLCBibG9ja0luZGV4LCBCbG9jaywgYmxvY2stPm1fcHJlZGVjZXNzb3Jz
W2tdKSwgcHJldk5vZGVJbmRleCAhPSBOb05vZGUpOwotICAgICAgICAgICAgICAgICAgICAgICAg
Tm9kZSogcHJldk5vZGUgPSAmbV9ncmFwaFtwcmV2Tm9kZUluZGV4XTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGlmIChwcmV2Tm9kZS0+b3AoKSA9PSBHZXRMb2NhbCkgewotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHByZXZOb2RlSW5kZXggPSBwcmV2Tm9kZS0+Y2hpbGQxKCkuaW5kZXgo
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2Tm9kZSA9ICZtX2dyYXBoW3ByZXZO
b2RlSW5kZXhdOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKG5vZGUuc2hvdWxkR2VuZXJhdGUoKSkgewotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFZBTElEQVRFKChsb2NhbCwgYmxvY2stPm1fcHJlZGVjZXNzb3JzW2tdLCBwcmV2Tm9k
ZUluZGV4KSwKKyAgICAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChsb2NhbCwgYmxvY2tJ
bmRleCwgQmxvY2ssIGJsb2NrLT5tX3ByZWRlY2Vzc29yc1trXSksIHByZXZOb2RlKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChwcmV2Tm9kZS0+b3AoKSA9PSBHZXRMb2NhbCkKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBwcmV2Tm9kZSA9IHByZXZOb2RlLT5jaGlsZDEoKS5ub2Rl
KCk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS0+c2hvdWxkR2VuZXJhdGUoKSkg
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChsb2NhbCwgYmxvY2stPm1f
cHJlZGVjZXNzb3JzW2tdLCBwcmV2Tm9kZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcHJldk5vZGUtPnNob3VsZEdlbmVyYXRlKCkpOwogICAgICAgICAgICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKGxvY2FsLCBibG9jay0+
bV9wcmVkZWNlc3NvcnNba10sIHByZXZOb2RlSW5kZXgpLAorICAgICAgICAgICAgICAgICAgICAg
ICAgVkFMSURBVEUoKGxvY2FsLCBibG9jay0+bV9wcmVkZWNlc3NvcnNba10sIHByZXZOb2RlKSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXZOb2RlLT5vcCgpID09IFNldExv
Y2FsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBwcmV2Tm9kZS0+b3AoKSA9
PSBTZXRBcmd1bWVudAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgcHJldk5v
ZGUtPm9wKCkgPT0gRmx1c2gKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IHBy
ZXZOb2RlLT5vcCgpID09IFBoaSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJldk5v
ZGVJbmRleCA9PSBlZGdlLmluZGV4KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChw
cmV2Tm9kZSA9PSBlZGdlLm5vZGUoKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZv
dW5kID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEF0IHRoaXMgcG9p
bnQgaXQgY2Fubm90IHJlZmVyIGludG8gdGhpcyBibG9jay4KLSAgICAgICAgICAgICAgICAgICAg
ICAgIFZBTElEQVRFKChsb2NhbCwgYmxvY2stPm1fcHJlZGVjZXNzb3JzW2tdLCBwcmV2Tm9kZUlu
ZGV4KSwgIXByZXZCbG9jay0+aXNJbkJsb2NrKGVkZ2UuaW5kZXgoKSkpOworICAgICAgICAgICAg
ICAgICAgICAgICAgVkFMSURBVEUoKGxvY2FsLCBibG9jay0+bV9wcmVkZWNlc3NvcnNba10sIHBy
ZXZOb2RlKSwgIXByZXZCbG9jay0+aXNJbkJsb2NrKGVkZ2Uubm9kZSgpKSk7CiAgICAgICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIFZB
TElEQVRFKChub2RlSW5kZXgsIGVkZ2UpLCBmb3VuZCk7CisgICAgICAgICAgICAgICAgICAgIFZB
TElEQVRFKChub2RlLCBlZGdlKSwgZm91bmQpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIApAQCAtMjI3LDM0ICsyMjMsMzMgQEAgcHVibGljOgogICAgICAg
ICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IGJsb2NrLT5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgICAgIE5vZGVJbmRleCBub2RlSW5k
ZXggPSBibG9jay0+YXQoaSk7Ci0gICAgICAgICAgICAgICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhb
bm9kZUluZGV4XTsKLSAgICAgICAgICAgICAgICBBU1NFUlQobm9kZXNJblRoaXNCbG9jay5nZXQo
bm9kZUluZGV4KSk7Ci0gICAgICAgICAgICAgICAgVkFMSURBVEUoKG5vZGVJbmRleCksIG5vZGUu
b3AoKSAhPSBQaGkpOworICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+YXQoaSk7
CisgICAgICAgICAgICAgICAgQVNTRVJUKG5vZGVzSW5UaGlzQmxvY2suY29udGFpbnMobm9kZSkp
OworICAgICAgICAgICAgICAgIFZBTElEQVRFKChub2RlKSwgbm9kZS0+b3AoKSAhPSBQaGkpOwog
ICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IDA7IGogPCBtX2dyYXBoLm51bUNoaWxk
cmVuKG5vZGUpOyArK2opIHsKICAgICAgICAgICAgICAgICAgICAgRWRnZSBlZGdlID0gbV9ncmFw
aC5jaGlsZChub2RlLCBqKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKCFlZGdlKQogICAgICAg
ICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgICAgIFZBTElEQVRF
KChub2RlSW5kZXgsIGVkZ2UpLCBub2Rlc0luVGhpc0Jsb2NrLmdldChub2RlSW5kZXgpKTsKKyAg
ICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKG5vZGUsIGVkZ2UpLCBub2Rlc0luVGhpc0Jsb2Nr
LmNvbnRhaW5zKGVkZ2Uubm9kZSgpKSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgIAotICAgICAgICAgICAgICAgIGlmICghbm9kZS5zaG91bGRHZW5lcmF0ZSgpKQorICAgICAg
ICAgICAgICAgIGlmICghbm9kZS0+c2hvdWxkR2VuZXJhdGUoKSkKICAgICAgICAgICAgICAgICAg
ICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgc3dpdGNoIChub2RlLm9wKCkpIHsKKyAgICAg
ICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKICAgICAgICAgICAgICAgICBjYXNlIEdl
dExvY2FsOgotICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS52YXJpYWJsZUFjY2Vzc0RhdGEo
KS0+aXNDYXB0dXJlZCgpKQorICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS0+dmFyaWFibGVB
Y2Nlc3NEYXRhKCktPmlzQ2FwdHVyZWQoKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgobm9kZUluZGV4LCBibG9ja0luZGV4KSwg
Z2V0TG9jYWxQb3NpdGlvbnMub3BlcmFuZChub2RlLmxvY2FsKCkpID09IG5vdFNldCk7Ci0gICAg
ICAgICAgICAgICAgICAgIGdldExvY2FsUG9zaXRpb25zLm9wZXJhbmQobm9kZS5sb2NhbCgpKSA9
IGk7CisgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChub2RlLCBibG9ja0luZGV4KSwgZ2V0
TG9jYWxQb3NpdGlvbnMub3BlcmFuZChub2RlLT5sb2NhbCgpKSA9PSBub3RTZXQpOworICAgICAg
ICAgICAgICAgICAgICBnZXRMb2NhbFBvc2l0aW9ucy5vcGVyYW5kKG5vZGUtPmxvY2FsKCkpID0g
aTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgY2FzZSBTZXRM
b2NhbDoKLSAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUudmFyaWFibGVBY2Nlc3NEYXRhKCkt
PmlzQ2FwdHVyZWQoKSkKKyAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPnZhcmlhYmxlQWNj
ZXNzRGF0YSgpLT5pc0NhcHR1cmVkKCkpCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgICAgICAgICAgLy8gT25seSByZWNvcmQgdGhlIGZpcnN0IFNldExvY2FsLiBU
aGVyZSBtYXkgYmUgbXVsdGlwbGUgU2V0TG9jYWxzCiAgICAgICAgICAgICAgICAgICAgIC8vIGJl
Y2F1c2Ugb2YgZmx1c2hpbmcuCi0gICAgICAgICAgICAgICAgICAgIGlmIChzZXRMb2NhbFBvc2l0
aW9ucy5vcGVyYW5kKG5vZGUubG9jYWwoKSkgIT0gbm90U2V0KQorICAgICAgICAgICAgICAgICAg
ICBpZiAoc2V0TG9jYWxQb3NpdGlvbnMub3BlcmFuZChub2RlLT5sb2NhbCgpKSAhPSBub3RTZXQp
CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgc2V0
TG9jYWxQb3NpdGlvbnMub3BlcmFuZChub2RlLmxvY2FsKCkpID0gaTsKKyAgICAgICAgICAgICAg
ICAgICAgc2V0TG9jYWxQb3NpdGlvbnMub3BlcmFuZChub2RlLT5sb2NhbCgpKSA9IGk7CiAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwpAQCAtMjk0LDkgKzI4OSw5IEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICBnZXRMb2NhbFBvc2l0aW9ucy5vcGVyYW5kKG9wZXJhbmQpIDwgc2V0TG9jYWxQb3NpdGlv
bnMub3BlcmFuZChvcGVyYW5kKSk7CiAgICAgfQogICAgIAotICAgIHZvaWQgcmVwb3J0VmFsaWRh
dGlvbkNvbnRleHQoTm9kZUluZGV4IG5vZGVJbmRleCkKKyAgICB2b2lkIHJlcG9ydFZhbGlkYXRp
b25Db250ZXh0KE5vZGUqIG5vZGUpCiAgICAgewotICAgICAgICBkYXRhTG9nRigiQCV1Iiwgbm9k
ZUluZGV4KTsKKyAgICAgICAgZGF0YUxvZ0YoIkAldSIsIG5vZGUtPmluZGV4KCkpOwogICAgIH0K
ICAgICAKICAgICBlbnVtIEJsb2NrVGFnIHsgQmxvY2sgfTsKQEAgLTMwNSw5ICszMDAsOSBAQCBw
cml2YXRlOgogICAgICAgICBkYXRhTG9nRigiQmxvY2sgIyV1IiwgYmxvY2tJbmRleCk7CiAgICAg
fQogICAgIAotICAgIHZvaWQgcmVwb3J0VmFsaWRhdGlvbkNvbnRleHQoTm9kZUluZGV4IG5vZGVJ
bmRleCwgRWRnZSBlZGdlKQorICAgIHZvaWQgcmVwb3J0VmFsaWRhdGlvbkNvbnRleHQoTm9kZSog
bm9kZSwgRWRnZSBlZGdlKQogICAgIHsKLSAgICAgICAgZGF0YUxvZ0YoIkAldSAtPiAlc0AldSIs
IG5vZGVJbmRleCwgdXNlS2luZFRvU3RyaW5nKGVkZ2UudXNlS2luZCgpKSwgZWRnZS5pbmRleCgp
KTsKKyAgICAgICAgZGF0YUxvZ0YoIkAldSAtPiAlc0AldSIsIG5vZGUtPmluZGV4KCksIHVzZUtp
bmRUb1N0cmluZyhlZGdlLnVzZUtpbmQoKSksIGVkZ2UuaW5kZXgoKSk7CiAgICAgfQogICAgIAog
ICAgIHZvaWQgcmVwb3J0VmFsaWRhdGlvbkNvbnRleHQoVmlydHVhbFJlZ2lzdGVyIGxvY2FsLCBC
bG9ja0luZGV4IGJsb2NrSW5kZXgpCkBAIC0zMjIsMjcgKzMxNywyNyBAQCBwcml2YXRlOgogICAg
IH0KICAgICAKICAgICB2b2lkIHJlcG9ydFZhbGlkYXRpb25Db250ZXh0KAotICAgICAgICBWaXJ0
dWFsUmVnaXN0ZXIgbG9jYWwsIEJsb2NrSW5kZXggc291cmNlQmxvY2tJbmRleCwgTm9kZUluZGV4
IHByZXZOb2RlSW5kZXgpCisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBsb2NhbCwgQmxvY2tJbmRl
eCBzb3VyY2VCbG9ja0luZGV4LCBOb2RlKiBwcmV2Tm9kZSkKICAgICB7Ci0gICAgICAgIGRhdGFM
b2dGKCJAJXUgZm9yIHIlZCBpbiBCbG9jayAjJXUiLCBwcmV2Tm9kZUluZGV4LCBsb2NhbCwgc291
cmNlQmxvY2tJbmRleCk7CisgICAgICAgIGRhdGFMb2dGKCJAJXUgZm9yIHIlZCBpbiBCbG9jayAj
JXUiLCBwcmV2Tm9kZS0+aW5kZXgoKSwgbG9jYWwsIHNvdXJjZUJsb2NrSW5kZXgpOwogICAgIH0K
ICAgICAKICAgICB2b2lkIHJlcG9ydFZhbGlkYXRpb25Db250ZXh0KAotICAgICAgICBOb2RlSW5k
ZXggbm9kZUluZGV4LCBCbG9ja0luZGV4IGJsb2NrSW5kZXgpCisgICAgICAgIE5vZGUqIG5vZGUs
IEJsb2NrSW5kZXggYmxvY2tJbmRleCkKICAgICB7Ci0gICAgICAgIGRhdGFMb2dGKCJAJXUgaW4g
QmxvY2sgIyV1Iiwgbm9kZUluZGV4LCBibG9ja0luZGV4KTsKKyAgICAgICAgZGF0YUxvZ0YoIkAl
dSBpbiBCbG9jayAjJXUiLCBub2RlLT5pbmRleCgpLCBibG9ja0luZGV4KTsKICAgICB9CiAgICAg
CiAgICAgdm9pZCByZXBvcnRWYWxpZGF0aW9uQ29udGV4dCgKLSAgICAgICAgTm9kZUluZGV4IG5v
ZGVJbmRleCwgTm9kZUluZGV4IG5vZGVJbmRleDIsIEJsb2NrSW5kZXggYmxvY2tJbmRleCkKKyAg
ICAgICAgTm9kZSogbm9kZSwgTm9kZSogbm9kZTIsIEJsb2NrSW5kZXggYmxvY2tJbmRleCkKICAg
ICB7Ci0gICAgICAgIGRhdGFMb2dGKCJAJXUgYW5kIEAldSBpbiBCbG9jayAjJXUiLCBub2RlSW5k
ZXgsIG5vZGVJbmRleDIsIGJsb2NrSW5kZXgpOworICAgICAgICBkYXRhTG9nRigiQCV1IGFuZCBA
JXUgaW4gQmxvY2sgIyV1Iiwgbm9kZS0+aW5kZXgoKSwgbm9kZTItPmluZGV4KCksIGJsb2NrSW5k
ZXgpOwogICAgIH0KICAgICAKICAgICB2b2lkIHJlcG9ydFZhbGlkYXRpb25Db250ZXh0KAotICAg
ICAgICBOb2RlSW5kZXggbm9kZUluZGV4LCBCbG9ja0luZGV4IGJsb2NrSW5kZXgsIE5vZGVJbmRl
eCBleHBlY3RlZE5vZGVJbmRleCwgRWRnZSBpbmNvbWluZ0VkZ2UpCisgICAgICAgIE5vZGUqIG5v
ZGUsIEJsb2NrSW5kZXggYmxvY2tJbmRleCwgTm9kZSogZXhwZWN0ZWROb2RlLCBFZGdlIGluY29t
aW5nRWRnZSkKICAgICB7Ci0gICAgICAgIGRhdGFMb2dGKCJAJXUgaW4gQmxvY2sgIyV1LCBzZWFy
Y2hpbmcgZm9yIEAldSBmcm9tIEAldSIsIG5vZGVJbmRleCwgYmxvY2tJbmRleCwgZXhwZWN0ZWRO
b2RlSW5kZXgsIGluY29taW5nRWRnZS5pbmRleCgpKTsKKyAgICAgICAgZGF0YUxvZ0YoIkAldSBp
biBCbG9jayAjJXUsIHNlYXJjaGluZyBmb3IgQCV1IGZyb20gQCV1Iiwgbm9kZS0+aW5kZXgoKSwg
YmxvY2tJbmRleCwgZXhwZWN0ZWROb2RlLT5pbmRleCgpLCBpbmNvbWluZ0VkZ2UuaW5kZXgoKSk7
CiAgICAgfQogICAgIAogICAgIHZvaWQgZHVtcERhdGEodW5zaWduZWQgdmFsdWUpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvbkV4ZWN1dGFibGVEdW1wLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvbkV4ZWN1
dGFibGVEdW1wLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0Z1bmN0aW9uRXhlY3V0YWJsZUR1bXAuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDM3
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGdW5jdGlvbkV4ZWN1dGFibGVEdW1wLmgiCisKK25h
bWVzcGFjZSBKU0MgeworCit2b2lkIEZ1bmN0aW9uRXhlY3V0YWJsZUR1bXA6OmR1bXAoUHJpbnRT
dHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQobV9leGVjdXRhYmxlLT5pbmZlcnJl
ZE5hbWUoKS5zdHJpbmcoKSwgIiMiLCBtX2V4ZWN1dGFibGUtPmhhc2hGb3IoQ29kZUZvckNhbGwp
LCAiLyIsIG1fZXhlY3V0YWJsZS0+aGFzaEZvcihDb2RlRm9yQ29uc3RydWN0KSwgIjpbIiwgUmF3
UG9pbnRlcihtX2V4ZWN1dGFibGUpLCAiXSIpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25FeGVjdXRhYmxlRHVt
cC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9u
RXhlY3V0YWJsZUR1bXAuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0Z1bmN0aW9uRXhlY3V0YWJsZUR1bXAuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0
OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZu
ZGVmIEZ1bmN0aW9uRXhlY3V0YWJsZUR1bXBfaAorI2RlZmluZSBGdW5jdGlvbkV4ZWN1dGFibGVE
dW1wX2gKKworI2luY2x1ZGUgIkV4ZWN1dGFibGUuaCIKKyNpbmNsdWRlIDx3dGYvUHJpbnRTdHJl
YW0uaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIEZ1bmN0aW9uRXhlY3V0YWJsZUR1bXAg
eworcHVibGljOgorICAgIGV4cGxpY2l0IEZ1bmN0aW9uRXhlY3V0YWJsZUR1bXAoRnVuY3Rpb25F
eGVjdXRhYmxlKiBleGVjdXRhYmxlKQorICAgICAgICA6IG1fZXhlY3V0YWJsZShleGVjdXRhYmxl
KQorICAgIHsKKyAgICB9CisgICAgCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7
Citwcml2YXRlOgorICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogbV9leGVjdXRhYmxlOworfTsKKwor
fSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBGdW5jdGlvbkV4ZWN1dGFibGVEdW1wX2gK
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEu
Y3BwCShyZXZpc2lvbiAxNDA2MTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0dsb2JhbERhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVk
ZSAiQXJnTGlzdC5oIgogI2luY2x1ZGUgIkNvZGVDYWNoZS5oIgogI2luY2x1ZGUgIkNvbW1vbklk
ZW50aWZpZXJzLmgiCisjaW5jbHVkZSAiREZHTG9uZ0xpdmVkU3RhdGUuaCIKICNpbmNsdWRlICJE
ZWJ1Z2dlckFjdGl2YXRpb24uaCIKICNpbmNsdWRlICJGdW5jdGlvbkNvbnN0cnVjdG9yLmgiCiAj
aW5jbHVkZSAiR0NBY3Rpdml0eUNhbGxiYWNrLmgiCkBAIC0yNTEsNiArMjUyLDExIEBAIEpTR2xv
YmFsRGF0YTo6SlNHbG9iYWxEYXRhKEdsb2JhbERhdGFUeXAKICAgICAKICAgICBpZiAoT3B0aW9u
czo6ZW5hYmxlUHJvZmlsZXIoKSkKICAgICAgICAgbV9wZXJCeXRlY29kZVByb2ZpbGVyID0gYWRv
cHRQdHIobmV3IFByb2ZpbGVyOjpEYXRhYmFzZSgqdGhpcykpOworCisjaWYgRU5BQkxFKERGR19K
SVQpCisgICAgaWYgKGNhblVzZUpJVCgpKQorICAgICAgICBtX2RmZ1N0YXRlID0gYWRvcHRQdHIo
bmV3IERGRzo6TG9uZ0xpdmVkU3RhdGUoKSk7CisjZW5kaWYKIH0KIAogSlNHbG9iYWxEYXRhOjp+
SlNHbG9iYWxEYXRhKCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xv
YmFsRGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
R2xvYmFsRGF0YS5oCShyZXZpc2lvbiAxNDA2MTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0dsb2JhbERhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtOTEsNiArOTEsMTIgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgY2xhc3MgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU7CiAg
ICAgY2xhc3MgVW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrOwogCisjaWYgRU5BQkxFKERGR19KSVQp
CisgICAgbmFtZXNwYWNlIERGRyB7CisgICAgY2xhc3MgTG9uZ0xpdmVkU3RhdGU7CisgICAgfQor
I2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCiAgICAgc3RydWN0IEhhc2hUYWJsZTsKICAgICBz
dHJ1Y3QgSW5zdHJ1Y3Rpb247CiAKQEAgLTE4OSw2ICsxOTUsMTAgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgIC8vIFRoZSBoZWFwIHNob3VsZCBiZSBqdXN0IGFmdGVyIGV4ZWN1dGFibGVBbGxv
Y2F0b3IgYW5kIGJlZm9yZSBvdGhlciBtZW1iZXJzIHRvIGVuc3VyZSB0aGF0IGl0J3MKICAgICAg
ICAgLy8gZGVzdHJ1Y3RlZCBhZnRlciBhbGwgdGhlIG9iamVjdHMgdGhhdCByZWZlcmVuY2UgaXQu
CiAgICAgICAgIEhlYXAgaGVhcDsKKyAgICAgICAgCisjaWYgRU5BQkxFKERGR19KSVQpCisgICAg
ICAgIE93blB0cjxERkc6OkxvbmdMaXZlZFN0YXRlPiBtX2RmZ1N0YXRlOworI2VuZGlmIC8vIEVO
QUJMRShERkdfSklUKQogCiAgICAgICAgIEdsb2JhbERhdGFUeXBlIGdsb2JhbERhdGFUeXBlOwog
ICAgICAgICBDbGllbnREYXRhKiBjbGllbnREYXRhOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>184572</attachid>
            <date>2013-01-24 13:51:38 -0800</date>
            <delta_ts>2013-01-26 13:43:14 -0800</delta_ts>
            <desc>work in progress</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>560276</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmNw
cAkocmV2aXNpb24gMTQwNjE2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0
cmFjdFN0YXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTEsIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDExLCAyMDEyLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtODcsMjEgKzg3LDIxIEBA
IHZvaWQgQWJzdHJhY3RTdGF0ZTo6aW5pdGlhbGl6ZShHcmFwaCYgZ3IKICAgICByb290LT5jZmFI
YXNWaXNpdGVkID0gZmFsc2U7CiAgICAgcm9vdC0+Y2ZhRm91bmRDb25zdGFudHMgPSBmYWxzZTsK
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHJvb3QtPnZhbHVlc0F0SGVhZC5udW1iZXJPZkFy
Z3VtZW50cygpOyArK2kpIHsKLSAgICAgICAgTm9kZSYgbm9kZSA9IGdyYXBoW3Jvb3QtPnZhcmlh
Ymxlc0F0SGVhZC5hcmd1bWVudChpKV07Ci0gICAgICAgIEFTU0VSVChub2RlLm9wKCkgPT0gU2V0
QXJndW1lbnQpOwotICAgICAgICBpZiAoIW5vZGUuc2hvdWxkR2VuZXJhdGUoKSkgeworICAgICAg
ICBOb2RlKiBub2RlID0gcm9vdC0+dmFyaWFibGVzQXRIZWFkLmFyZ3VtZW50KGkpOworICAgICAg
ICBBU1NFUlQobm9kZS0+b3AoKSA9PSBTZXRBcmd1bWVudCk7CisgICAgICAgIGlmICghbm9kZS0+
c2hvdWxkR2VuZXJhdGUoKSkgewogICAgICAgICAgICAgLy8gVGhlIGFyZ3VtZW50IGlzIGRlYWQu
IFdlIGRvbid0IGRvIGFueSBjaGVja3MgZm9yIHN1Y2ggYXJndW1lbnRzLCBhbmQgc28KICAgICAg
ICAgICAgIC8vIGZvciB0aGUgcHVycG9zZSBvZiB0aGUgYW5hbHlzaXMsIHRoZXkgY29udGFpbiBu
byB2YWx1ZS4KICAgICAgICAgICAgIHJvb3QtPnZhbHVlc0F0SGVhZC5hcmd1bWVudChpKS5jbGVh
cigpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAg
IGlmIChub2RlLnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5pc0NhcHR1cmVkKCkpIHsKKyAgICAgICAg
aWYgKG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5pc0NhcHR1cmVkKCkpIHsKICAgICAgICAg
ICAgIHJvb3QtPnZhbHVlc0F0SGVhZC5hcmd1bWVudChpKS5tYWtlVG9wKCk7CiAgICAgICAgICAg
ICBjb250aW51ZTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgU3BlY3VsYXRlZFR5cGUg
cHJlZGljdGlvbiA9IG5vZGUudmFyaWFibGVBY2Nlc3NEYXRhKCktPnByZWRpY3Rpb24oKTsKKyAg
ICAgICAgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0
YSgpLT5wcmVkaWN0aW9uKCk7CiAgICAgICAgIGlmIChpc0ludDMyU3BlY3VsYXRpb24ocHJlZGlj
dGlvbikpCiAgICAgICAgICAgICByb290LT52YWx1ZXNBdEhlYWQuYXJndW1lbnQoaSkuc2V0KFNw
ZWNJbnQzMik7CiAgICAgICAgIGVsc2UgaWYgKGlzQm9vbGVhblNwZWN1bGF0aW9uKHByZWRpY3Rp
b24pKQpAQCAtMTE0LDggKzExNCw4IEBAIHZvaWQgQWJzdHJhY3RTdGF0ZTo6aW5pdGlhbGl6ZShH
cmFwaCYgZ3IKICAgICAgICAgcm9vdC0+dmFsdWVzQXRUYWlsLmFyZ3VtZW50KGkpLmNsZWFyKCk7
CiAgICAgfQogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcm9vdC0+dmFsdWVzQXRIZWFkLm51
bWJlck9mTG9jYWxzKCk7ICsraSkgewotICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4ID0gcm9v
dC0+dmFyaWFibGVzQXRIZWFkLmxvY2FsKGkpOwotICAgICAgICBpZiAobm9kZUluZGV4ICE9IE5v
Tm9kZSAmJiBncmFwaFtub2RlSW5kZXhdLnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5pc0NhcHR1cmVk
KCkpCisgICAgICAgIE5vZGUqIG5vZGUgPSByb290LT52YXJpYWJsZXNBdEhlYWQubG9jYWwoaSk7
CisgICAgICAgIGlmIChub2RlICYmIG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5pc0NhcHR1
cmVkKCkpCiAgICAgICAgICAgICByb290LT52YWx1ZXNBdEhlYWQubG9jYWwoaSkubWFrZVRvcCgp
OwogICAgICAgICBlbHNlCiAgICAgICAgICAgICByb290LT52YWx1ZXNBdEhlYWQubG9jYWwoaSku
Y2xlYXIoKTsKQEAgLTIxMywxMSArMjEzLDExIEBAIHZvaWQgQWJzdHJhY3RTdGF0ZTo6cmVzZXQo
KQogICAgIG1fYnJhbmNoRGlyZWN0aW9uID0gSW52YWxpZEJyYW5jaERpcmVjdGlvbjsKIH0KIAot
QWJzdHJhY3RTdGF0ZTo6Qm9vbGVhblJlc3VsdCBBYnN0cmFjdFN0YXRlOjpib29sZWFuUmVzdWx0
KE5vZGUmIG5vZGUsIEFic3RyYWN0VmFsdWUmIHZhbHVlKQorQWJzdHJhY3RTdGF0ZTo6Qm9vbGVh
blJlc3VsdCBBYnN0cmFjdFN0YXRlOjpib29sZWFuUmVzdWx0KE5vZGUqIG5vZGUsIEFic3RyYWN0
VmFsdWUmIHZhbHVlKQogewogICAgIEpTVmFsdWUgY2hpbGRDb25zdCA9IHZhbHVlLnZhbHVlKCk7
CiAgICAgaWYgKGNoaWxkQ29uc3QpIHsKLSAgICAgICAgaWYgKGNoaWxkQ29uc3QudG9Cb29sZWFu
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3RGb3Iobm9kZS5jb2RlT3JpZ2luKS0+Z2xvYmFsRXhl
YygpKSkKKyAgICAgICAgaWYgKGNoaWxkQ29uc3QudG9Cb29sZWFuKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3RGb3Iobm9kZS0+Y29kZU9yaWdpbiktPmdsb2JhbEV4ZWMoKSkpCiAgICAgICAgICAg
ICByZXR1cm4gRGVmaW5pdGVseVRydWU7CiAgICAgICAgIHJldHVybiBEZWZpbml0ZWx5RmFsc2U7
CiAgICAgfQpAQCAtMjI2LDcgKzIyNiw3IEBAIEFic3RyYWN0U3RhdGU6OkJvb2xlYW5SZXN1bHQg
QWJzdHJhY3RTdGEKICAgICBpZiAoaXNDZWxsU3BlY3VsYXRpb24odmFsdWUubV90eXBlKQogICAg
ICAgICAmJiB2YWx1ZS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5oYXNTaW5nbGV0b24oKSkgewog
ICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHZhbHVlLm1fY3VycmVudEtub3duU3RydWN0
dXJlLnNpbmdsZXRvbigpOwotICAgICAgICBpZiAoIXN0cnVjdHVyZS0+bWFzcXVlcmFkZXNBc1Vu
ZGVmaW5lZChtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0Rm9yKG5vZGUuY29kZU9yaWdpbikpCisg
ICAgICAgIGlmICghc3RydWN0dXJlLT5tYXNxdWVyYWRlc0FzVW5kZWZpbmVkKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3RGb3Iobm9kZS0+Y29kZU9yaWdpbikpCiAgICAgICAgICAgICAmJiBzdHJ1
Y3R1cmUtPnR5cGVJbmZvKCkudHlwZSgpICE9IFN0cmluZ1R5cGUpCiAgICAgICAgICAgICByZXR1
cm4gRGVmaW5pdGVseVRydWU7CiAgICAgfQpAQCAtMjQxLDMyICsyNDEsMzEgQEAgYm9vbCBBYnN0
cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgIAogICAgIG1fZGlkQ2xvYmJlciA9
IGZhbHNlOwogICAgIAotICAgIE5vZGVJbmRleCBub2RlSW5kZXggPSBtX2Jsb2NrLT5hdChpbmRl
eEluQmxvY2spOwotICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW25vZGVJbmRleF07CisgICAgTm9k
ZSogbm9kZSA9IG1fYmxvY2stPmF0KGluZGV4SW5CbG9jayk7CiAgICAgICAgIAotICAgIGlmICgh
bm9kZS5zaG91bGRHZW5lcmF0ZSgpKQorICAgIGlmICghbm9kZS0+c2hvdWxkR2VuZXJhdGUoKSkK
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIAotICAgIHN3aXRjaCAobm9kZS5vcCgpKSB7
CisgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CiAgICAgY2FzZSBKU0NvbnN0YW50OgogICAgIGNh
c2UgV2Vha0pTQ29uc3RhbnQ6CiAgICAgY2FzZSBQaGFudG9tQXJndW1lbnRzOiB7Ci0gICAgICAg
IGZvck5vZGUobm9kZUluZGV4KS5zZXQobV9ncmFwaC52YWx1ZU9mSlNDb25zdGFudChub2RlSW5k
ZXgpKTsKLSAgICAgICAgbm9kZS5zZXRDYW5FeGl0KGZhbHNlKTsKKyAgICAgICAgZm9yTm9kZShu
b2RlKS5zZXQobV9ncmFwaC52YWx1ZU9mSlNDb25zdGFudChub2RlKSk7CisgICAgICAgIG5vZGUt
PnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIAogICAg
IGNhc2UgSWRlbnRpdHk6IHsKLSAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpID0gZm9yTm9kZShu
b2RlLmNoaWxkMSgpKTsKLSAgICAgICAgbm9kZS5zZXRDYW5FeGl0KGZhbHNlKTsKKyAgICAgICAg
Zm9yTm9kZShub2RlKSA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBub2RlLT5z
ZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAgICAgCiAg
ICAgY2FzZSBHZXRMb2NhbDogewotICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxl
QWNjZXNzRGF0YSA9IG5vZGUudmFyaWFibGVBY2Nlc3NEYXRhKCk7CisgICAgICAgIFZhcmlhYmxl
QWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRh
KCk7CiAgICAgICAgIGlmICh2YXJpYWJsZUFjY2Vzc0RhdGEtPnByZWRpY3Rpb24oKSA9PSBTcGVj
Tm9uZSkgewogICAgICAgICAgICAgbV9pc1ZhbGlkID0gZmFsc2U7Ci0gICAgICAgICAgICBub2Rl
LnNldENhbkV4aXQodHJ1ZSk7CisgICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgYm9vbCBjYW5FeGl0ID0gZmFs
c2U7CkBAIC0yNzcsNTMgKzI3Niw1MyBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5z
aWduZWQgaW5kCiAgICAgICAgIH0KICAgICAgICAgaWYgKHZhbHVlLnZhbHVlKCkpCiAgICAgICAg
ICAgICBtX2ZvdW5kQ29uc3RhbnRzID0gdHJ1ZTsKLSAgICAgICAgZm9yTm9kZShub2RlSW5kZXgp
ID0gdmFsdWU7Ci0gICAgICAgIG5vZGUuc2V0Q2FuRXhpdChjYW5FeGl0KTsKKyAgICAgICAgZm9y
Tm9kZShub2RlKSA9IHZhbHVlOworICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGNhbkV4aXQpOwog
ICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgR2V0TG9jYWxVbmxpbmtl
ZDogewotICAgICAgICBBYnN0cmFjdFZhbHVlIHZhbHVlID0gbV92YXJpYWJsZXMub3BlcmFuZChu
b2RlLnVubGlua2VkTG9jYWwoKSk7CisgICAgICAgIEFic3RyYWN0VmFsdWUgdmFsdWUgPSBtX3Zh
cmlhYmxlcy5vcGVyYW5kKG5vZGUtPnVubGlua2VkTG9jYWwoKSk7CiAgICAgICAgIGlmICh2YWx1
ZS52YWx1ZSgpKQogICAgICAgICAgICAgbV9mb3VuZENvbnN0YW50cyA9IHRydWU7Ci0gICAgICAg
IGZvck5vZGUobm9kZUluZGV4KSA9IHZhbHVlOwotICAgICAgICBub2RlLnNldENhbkV4aXQoZmFs
c2UpOworICAgICAgICBmb3JOb2RlKG5vZGUpID0gdmFsdWU7CisgICAgICAgIG5vZGUtPnNldENh
bkV4aXQoZmFsc2UpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIAogICAgIGNhc2Ug
U2V0TG9jYWw6IHsKLSAgICAgICAgaWYgKG5vZGUudmFyaWFibGVBY2Nlc3NEYXRhKCktPmlzQ2Fw
dHVyZWQoKQotICAgICAgICAgICAgfHwgbV9ncmFwaC5pc0NyZWF0ZWRUaGlzQXJndW1lbnQobm9k
ZS5sb2NhbCgpKSkgewotICAgICAgICAgICAgbV92YXJpYWJsZXMub3BlcmFuZChub2RlLmxvY2Fs
KCkpID0gZm9yTm9kZShub2RlLmNoaWxkMSgpKTsKLSAgICAgICAgICAgIG5vZGUuc2V0Q2FuRXhp
dChmYWxzZSk7CisgICAgICAgIGlmIChub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+aXNDYXB0
dXJlZCgpCisgICAgICAgICAgICB8fCBtX2dyYXBoLmlzQ3JlYXRlZFRoaXNBcmd1bWVudChub2Rl
LT5sb2NhbCgpKSkgeworICAgICAgICAgICAgbV92YXJpYWJsZXMub3BlcmFuZChub2RlLT5sb2Nh
bCgpKSA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgbm9kZS0+c2V0Q2Fu
RXhpdChmYWxzZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAKLSAg
ICAgICAgaWYgKG5vZGUudmFyaWFibGVBY2Nlc3NEYXRhKCktPnNob3VsZFVzZURvdWJsZUZvcm1h
dCgpKSB7CisgICAgICAgIGlmIChub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+c2hvdWxkVXNl
RG91YmxlRm9ybWF0KCkpIHsKICAgICAgICAgICAgIHNwZWN1bGF0ZU51bWJlclVuYXJ5KG5vZGUp
OwotICAgICAgICAgICAgbV92YXJpYWJsZXMub3BlcmFuZChub2RlLmxvY2FsKCkpLnNldChTcGVj
RG91YmxlKTsKKyAgICAgICAgICAgIG1fdmFyaWFibGVzLm9wZXJhbmQobm9kZS0+bG9jYWwoKSku
c2V0KFNwZWNEb3VibGUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAg
Ci0gICAgICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3RlZFR5cGUgPSBub2RlLnZhcmlhYmxlQWNj
ZXNzRGF0YSgpLT5hcmd1bWVudEF3YXJlUHJlZGljdGlvbigpOworICAgICAgICBTcGVjdWxhdGVk
VHlwZSBwcmVkaWN0ZWRUeXBlID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCktPmFyZ3VtZW50
QXdhcmVQcmVkaWN0aW9uKCk7CiAgICAgICAgIGlmIChpc0ludDMyU3BlY3VsYXRpb24ocHJlZGlj
dGVkVHlwZSkpCiAgICAgICAgICAgICBzcGVjdWxhdGVJbnQzMlVuYXJ5KG5vZGUpOwogICAgICAg
ICBlbHNlIGlmIChpc0NlbGxTcGVjdWxhdGlvbihwcmVkaWN0ZWRUeXBlKSkgewotICAgICAgICAg
ICAgbm9kZS5zZXRDYW5FeGl0KCFpc0NlbGxTcGVjdWxhdGlvbihmb3JOb2RlKG5vZGUuY2hpbGQx
KCkpLm1fdHlwZSkpOwotICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIo
U3BlY0NlbGwpOworICAgICAgICAgICAgbm9kZS5zZXRDYW5FeGl0KCFpc0NlbGxTcGVjdWxhdGlv
bihmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX3R5cGUpKTsKKyAgICAgICAgICAgIGZvck5vZGUo
bm9kZS0+Y2hpbGQxKCkpLmZpbHRlcihTcGVjQ2VsbCk7CiAgICAgICAgIH0gZWxzZSBpZiAoaXNC
b29sZWFuU3BlY3VsYXRpb24ocHJlZGljdGVkVHlwZSkpCiAgICAgICAgICAgICBzcGVjdWxhdGVC
b29sZWFuVW5hcnkobm9kZSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIG5vZGUuc2V0Q2Fu
RXhpdChmYWxzZSk7CisgICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAg
ICAgCi0gICAgICAgIG1fdmFyaWFibGVzLm9wZXJhbmQobm9kZS5sb2NhbCgpKSA9IGZvck5vZGUo
bm9kZS5jaGlsZDEoKSk7CisgICAgICAgIG1fdmFyaWFibGVzLm9wZXJhbmQobm9kZS0+bG9jYWwo
KSkgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAg
ICAgICAgICAgCiAgICAgY2FzZSBTZXRBcmd1bWVudDoKICAgICAgICAgLy8gQXNzZXJ0IHRoYXQg
dGhlIHN0YXRlIG9mIGFyZ3VtZW50cyBoYXMgYmVlbiBzZXQuCi0gICAgICAgIEFTU0VSVCghbV9i
bG9jay0+dmFsdWVzQXRIZWFkLm9wZXJhbmQobm9kZS5sb2NhbCgpKS5pc0NsZWFyKCkpOwotICAg
ICAgICBub2RlLnNldENhbkV4aXQoZmFsc2UpOworICAgICAgICBBU1NFUlQoIW1fYmxvY2stPnZh
bHVlc0F0SGVhZC5vcGVyYW5kKG5vZGUtPmxvY2FsKCkpLmlzQ2xlYXIoKSk7CisgICAgICAgIG5v
ZGUtPnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAg
IGNhc2UgQml0QW5kOgpAQCAtMzMyLDMwICszMzEsMzAgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpl
eGVjdXRlKHVuc2lnbmVkIGluZAogICAgIGNhc2UgQml0UlNoaWZ0OgogICAgIGNhc2UgQml0TFNo
aWZ0OgogICAgIGNhc2UgQml0VVJTaGlmdDogewotICAgICAgICBKU1ZhbHVlIGxlZnQgPSBmb3JO
b2RlKG5vZGUuY2hpbGQxKCkpLnZhbHVlKCk7Ci0gICAgICAgIEpTVmFsdWUgcmlnaHQgPSBmb3JO
b2RlKG5vZGUuY2hpbGQyKCkpLnZhbHVlKCk7CisgICAgICAgIEpTVmFsdWUgbGVmdCA9IGZvck5v
ZGUobm9kZS0+Y2hpbGQxKCkpLnZhbHVlKCk7CisgICAgICAgIEpTVmFsdWUgcmlnaHQgPSBmb3JO
b2RlKG5vZGUtPmNoaWxkMigpKS52YWx1ZSgpOwogICAgICAgICBpZiAobGVmdCAmJiByaWdodCAm
JiBsZWZ0LmlzSW50MzIoKSAmJiByaWdodC5pc0ludDMyKCkpIHsKICAgICAgICAgICAgIGludDMy
X3QgYSA9IGxlZnQuYXNJbnQzMigpOwogICAgICAgICAgICAgaW50MzJfdCBiID0gcmlnaHQuYXNJ
bnQzMigpOwogICAgICAgICAgICAgYm9vbCBjb25zdGFudFdhc1NldDsKICAgICAgICAgICAgIHN3
aXRjaCAobm9kZS5vcCgpKSB7CiAgICAgICAgICAgICBjYXNlIEJpdEFuZDoKLSAgICAgICAgICAg
ICAgICBjb25zdGFudFdhc1NldCA9IHRyeVNldENvbnN0YW50KG5vZGVJbmRleCwgSlNWYWx1ZShh
ICYgYikpOworICAgICAgICAgICAgICAgIGNvbnN0YW50V2FzU2V0ID0gdHJ5U2V0Q29uc3RhbnQo
bm9kZSwgSlNWYWx1ZShhICYgYikpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgY2FzZSBCaXRPcjoKLSAgICAgICAgICAgICAgICBjb25zdGFudFdhc1NldCA9IHRyeVNldENv
bnN0YW50KG5vZGVJbmRleCwgSlNWYWx1ZShhIHwgYikpOworICAgICAgICAgICAgICAgIGNvbnN0
YW50V2FzU2V0ID0gdHJ5U2V0Q29uc3RhbnQobm9kZSwgSlNWYWx1ZShhIHwgYikpOwogICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBCaXRYb3I6Ci0gICAgICAgICAgICAg
ICAgY29uc3RhbnRXYXNTZXQgPSB0cnlTZXRDb25zdGFudChub2RlSW5kZXgsIEpTVmFsdWUoYSBe
IGIpKTsKKyAgICAgICAgICAgICAgICBjb25zdGFudFdhc1NldCA9IHRyeVNldENvbnN0YW50KG5v
ZGUsIEpTVmFsdWUoYSBeIGIpKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
IGNhc2UgQml0UlNoaWZ0OgotICAgICAgICAgICAgICAgIGNvbnN0YW50V2FzU2V0ID0gdHJ5U2V0
Q29uc3RhbnQobm9kZUluZGV4LCBKU1ZhbHVlKGEgPj4gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGIp
KSk7CisgICAgICAgICAgICAgICAgY29uc3RhbnRXYXNTZXQgPSB0cnlTZXRDb25zdGFudChub2Rl
LCBKU1ZhbHVlKGEgPj4gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGIpKSk7CiAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIEJpdExTaGlmdDoKLSAgICAgICAgICAgICAgICBj
b25zdGFudFdhc1NldCA9IHRyeVNldENvbnN0YW50KG5vZGVJbmRleCwgSlNWYWx1ZShhIDw8IHN0
YXRpY19jYXN0PHVpbnQzMl90PihiKSkpOworICAgICAgICAgICAgICAgIGNvbnN0YW50V2FzU2V0
ID0gdHJ5U2V0Q29uc3RhbnQobm9kZSwgSlNWYWx1ZShhIDw8IHN0YXRpY19jYXN0PHVpbnQzMl90
PihiKSkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBCaXRVUlNo
aWZ0OgotICAgICAgICAgICAgICAgIGNvbnN0YW50V2FzU2V0ID0gdHJ5U2V0Q29uc3RhbnQobm9k
ZUluZGV4LCBKU1ZhbHVlKHN0YXRpY19jYXN0PHVpbnQzMl90PihhKSA+PiBzdGF0aWNfY2FzdDx1
aW50MzJfdD4oYikpKTsKKyAgICAgICAgICAgICAgICBjb25zdGFudFdhc1NldCA9IHRyeVNldENv
bnN0YW50KG5vZGUsIEpTVmFsdWUoc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGEpID4+IHN0YXRpY19j
YXN0PHVpbnQzMl90PihiKSkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
ZGVmYXVsdDoKICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwpA
QCAtMzYzLDE5OSArMzYyLDE5OSBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWdu
ZWQgaW5kCiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoY29uc3RhbnRXYXNTZXQpIHsK
ICAgICAgICAgICAgICAgICBtX2ZvdW5kQ29uc3RhbnRzID0gdHJ1ZTsKLSAgICAgICAgICAgICAg
ICBub2RlLnNldENhbkV4aXQoZmFsc2UpOworICAgICAgICAgICAgICAgIG5vZGUtPnNldENhbkV4
aXQoZmFsc2UpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAg
ICB9CiAgICAgICAgIHNwZWN1bGF0ZUludDMyQmluYXJ5KG5vZGUpOwotICAgICAgICBmb3JOb2Rl
KG5vZGVJbmRleCkuc2V0KFNwZWNJbnQzMik7CisgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNw
ZWNJbnQzMik7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBVSW50
MzJUb051bWJlcjogewotICAgICAgICBKU1ZhbHVlIGNoaWxkID0gZm9yTm9kZShub2RlLmNoaWxk
MSgpKS52YWx1ZSgpOworICAgICAgICBKU1ZhbHVlIGNoaWxkID0gZm9yTm9kZShub2RlLT5jaGls
ZDEoKSkudmFsdWUoKTsKICAgICAgICAgaWYgKGNoaWxkICYmIGNoaWxkLmlzTnVtYmVyKCkpIHsK
ICAgICAgICAgICAgIEFTU0VSVChjaGlsZC5pc0ludDMyKCkpOwotICAgICAgICAgICAgaWYgKHRy
eVNldENvbnN0YW50KG5vZGVJbmRleCwgSlNWYWx1ZShjaGlsZC5hc1VJbnQzMigpKSkpIHsKKyAg
ICAgICAgICAgIGlmICh0cnlTZXRDb25zdGFudChub2RlLCBKU1ZhbHVlKGNoaWxkLmFzVUludDMy
KCkpKSkgewogICAgICAgICAgICAgICAgIG1fZm91bmRDb25zdGFudHMgPSB0cnVlOwotICAgICAg
ICAgICAgICAgIG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7CisgICAgICAgICAgICAgICAgbm9kZS0+
c2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9
CiAgICAgICAgIH0KLSAgICAgICAgaWYgKCFub2RlLmNhblNwZWN1bGF0ZUludGVnZXIoKSkgewot
ICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChTcGVjRG91YmxlKTsKLSAgICAgICAg
ICAgIG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7CisgICAgICAgIGlmICghbm9kZS0+Y2FuU3BlY3Vs
YXRlSW50ZWdlcigpKSB7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjRG91Ymxl
KTsKKyAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChTcGVjSW50MzIpOwotICAgICAg
ICAgICAgbm9kZS5zZXRDYW5FeGl0KHRydWUpOworICAgICAgICAgICAgZm9yTm9kZShub2RlKS5z
ZXQoU3BlY0ludDMyKTsKKyAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7CiAgICAg
ICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAgICAgICAKICAgICAgICAgICAg
IAogICAgIGNhc2UgRG91YmxlQXNJbnQzMjogewotICAgICAgICBKU1ZhbHVlIGNoaWxkID0gZm9y
Tm9kZShub2RlLmNoaWxkMSgpKS52YWx1ZSgpOworICAgICAgICBKU1ZhbHVlIGNoaWxkID0gZm9y
Tm9kZShub2RlLT5jaGlsZDEoKSkudmFsdWUoKTsKICAgICAgICAgaWYgKGNoaWxkICYmIGNoaWxk
LmlzTnVtYmVyKCkpIHsKICAgICAgICAgICAgIGRvdWJsZSBhc0RvdWJsZSA9IGNoaWxkLmFzTnVt
YmVyKCk7CiAgICAgICAgICAgICBpbnQzMl90IGFzSW50ID0gSlNDOjp0b0ludDMyKGFzRG91Ymxl
KTsKICAgICAgICAgICAgIGlmIChiaXR3aXNlX2Nhc3Q8aW50NjRfdD4oc3RhdGljX2Nhc3Q8ZG91
YmxlPihhc0ludCkpID09IGJpdHdpc2VfY2FzdDxpbnQ2NF90Pihhc0RvdWJsZSkKLSAgICAgICAg
ICAgICAgICAmJiB0cnlTZXRDb25zdGFudChub2RlSW5kZXgsIEpTVmFsdWUoYXNJbnQpKSkgewor
ICAgICAgICAgICAgICAgICYmIHRyeVNldENvbnN0YW50KG5vZGUsIEpTVmFsdWUoYXNJbnQpKSkg
ewogICAgICAgICAgICAgICAgIG1fZm91bmRDb25zdGFudHMgPSB0cnVlOwogICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIG5vZGUuc2V0Q2Fu
RXhpdCh0cnVlKTsKLSAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY051
bWJlcik7Ci0gICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoU3BlY0ludDMyKTsKKyAgICAg
ICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKKyAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDEo
KSkuZmlsdGVyKFNwZWNOdW1iZXIpOworICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjSW50
MzIpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgICAgICAKICAgICBjYXNlIFZhbHVl
VG9JbnQzMjogewotICAgICAgICBKU1ZhbHVlIGNoaWxkID0gZm9yTm9kZShub2RlLmNoaWxkMSgp
KS52YWx1ZSgpOworICAgICAgICBKU1ZhbHVlIGNoaWxkID0gZm9yTm9kZShub2RlLT5jaGlsZDEo
KSkudmFsdWUoKTsKICAgICAgICAgaWYgKGNoaWxkICYmIGNoaWxkLmlzTnVtYmVyKCkpIHsKICAg
ICAgICAgICAgIGJvb2wgY29uc3RhbnRXYXNTZXQ7CiAgICAgICAgICAgICBpZiAoY2hpbGQuaXNJ
bnQzMigpKQotICAgICAgICAgICAgICAgIGNvbnN0YW50V2FzU2V0ID0gdHJ5U2V0Q29uc3RhbnQo
bm9kZUluZGV4LCBjaGlsZCk7CisgICAgICAgICAgICAgICAgY29uc3RhbnRXYXNTZXQgPSB0cnlT
ZXRDb25zdGFudChub2RlLCBjaGlsZCk7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAg
ICAgY29uc3RhbnRXYXNTZXQgPSB0cnlTZXRDb25zdGFudChub2RlSW5kZXgsIEpTVmFsdWUoSlND
Ojp0b0ludDMyKGNoaWxkLmFzRG91YmxlKCkpKSk7CisgICAgICAgICAgICAgICAgY29uc3RhbnRX
YXNTZXQgPSB0cnlTZXRDb25zdGFudChub2RlLCBKU1ZhbHVlKEpTQzo6dG9JbnQzMihjaGlsZC5h
c0RvdWJsZSgpKSkpOwogICAgICAgICAgICAgaWYgKGNvbnN0YW50V2FzU2V0KSB7CiAgICAgICAg
ICAgICAgICAgbV9mb3VuZENvbnN0YW50cyA9IHRydWU7Ci0gICAgICAgICAgICAgICAgbm9kZS5z
ZXRDYW5FeGl0KGZhbHNlKTsKKyAgICAgICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNl
KTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAg
ICAgICBpZiAobV9ncmFwaFtub2RlLmNoaWxkMSgpXS5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkp
CisgICAgICAgIGlmIChtX2dyYXBoW25vZGUtPmNoaWxkMSgpXS5zaG91bGRTcGVjdWxhdGVJbnRl
Z2VyKCkpCiAgICAgICAgICAgICBzcGVjdWxhdGVJbnQzMlVuYXJ5KG5vZGUpOwotICAgICAgICBl
bHNlIGlmIChtX2dyYXBoW25vZGUuY2hpbGQxKCldLnNob3VsZFNwZWN1bGF0ZU51bWJlcigpKQor
ICAgICAgICBlbHNlIGlmIChtX2dyYXBoW25vZGUtPmNoaWxkMSgpXS5zaG91bGRTcGVjdWxhdGVO
dW1iZXIoKSkKICAgICAgICAgICAgIHNwZWN1bGF0ZU51bWJlclVuYXJ5KG5vZGUpOwotICAgICAg
ICBlbHNlIGlmIChtX2dyYXBoW25vZGUuY2hpbGQxKCldLnNob3VsZFNwZWN1bGF0ZUJvb2xlYW4o
KSkKKyAgICAgICAgZWxzZSBpZiAobV9ncmFwaFtub2RlLT5jaGlsZDEoKV0uc2hvdWxkU3BlY3Vs
YXRlQm9vbGVhbigpKQogICAgICAgICAgICAgc3BlY3VsYXRlQm9vbGVhblVuYXJ5KG5vZGUpOwog
ICAgICAgICBlbHNlCi0gICAgICAgICAgICBub2RlLnNldENhbkV4aXQoZmFsc2UpOworICAgICAg
ICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgIAotICAgICAgICBmb3JOb2Rl
KG5vZGVJbmRleCkuc2V0KFNwZWNJbnQzMik7CisgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNw
ZWNJbnQzMik7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBJbnQz
MlRvRG91YmxlOiB7Ci0gICAgICAgIEpTVmFsdWUgY2hpbGQgPSBmb3JOb2RlKG5vZGUuY2hpbGQx
KCkpLnZhbHVlKCk7CisgICAgICAgIEpTVmFsdWUgY2hpbGQgPSBmb3JOb2RlKG5vZGUtPmNoaWxk
MSgpKS52YWx1ZSgpOwogICAgICAgICBpZiAoY2hpbGQgJiYgY2hpbGQuaXNOdW1iZXIoKQotICAg
ICAgICAgICAgJiYgdHJ5U2V0Q29uc3RhbnQobm9kZUluZGV4LCBKU1ZhbHVlKEpTVmFsdWU6OkVu
Y29kZUFzRG91YmxlLCBjaGlsZC5hc051bWJlcigpKSkpIHsKKyAgICAgICAgICAgICYmIHRyeVNl
dENvbnN0YW50KG5vZGUsIEpTVmFsdWUoSlNWYWx1ZTo6RW5jb2RlQXNEb3VibGUsIGNoaWxkLmFz
TnVtYmVyKCkpKSkgewogICAgICAgICAgICAgbV9mb3VuZENvbnN0YW50cyA9IHRydWU7Ci0gICAg
ICAgICAgICBub2RlLnNldENhbkV4aXQoZmFsc2UpOworICAgICAgICAgICAgbm9kZS0+c2V0Q2Fu
RXhpdChmYWxzZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBzcGVj
dWxhdGVOdW1iZXJVbmFyeShub2RlKTsKLSAgICAgICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbihm
b3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpCi0gICAgICAgICAgICBmb3JOb2RlKG5vZGVJ
bmRleCkuc2V0KFNwZWNEb3VibGVSZWFsKTsKKyAgICAgICAgaWYgKGlzSW50MzJTcGVjdWxhdGlv
bihmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX3R5cGUpKQorICAgICAgICAgICAgZm9yTm9kZShu
b2RlKS5zZXQoU3BlY0RvdWJsZVJlYWwpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBmb3JO
b2RlKG5vZGVJbmRleCkuc2V0KFNwZWNEb3VibGUpOworICAgICAgICAgICAgZm9yTm9kZShub2Rl
KS5zZXQoU3BlY0RvdWJsZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCiAgICAg
Y2FzZSBDaGVja051bWJlcjoKLSAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIo
U3BlY051bWJlcik7CisgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRlcihTcGVj
TnVtYmVyKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICBjYXNlIFZhbHVlQWRk
OgogICAgIGNhc2UgQXJpdGhBZGQ6IHsKLSAgICAgICAgSlNWYWx1ZSBsZWZ0ID0gZm9yTm9kZShu
b2RlLmNoaWxkMSgpKS52YWx1ZSgpOwotICAgICAgICBKU1ZhbHVlIHJpZ2h0ID0gZm9yTm9kZShu
b2RlLmNoaWxkMigpKS52YWx1ZSgpOworICAgICAgICBKU1ZhbHVlIGxlZnQgPSBmb3JOb2RlKG5v
ZGUtPmNoaWxkMSgpKS52YWx1ZSgpOworICAgICAgICBKU1ZhbHVlIHJpZ2h0ID0gZm9yTm9kZShu
b2RlLT5jaGlsZDIoKSkudmFsdWUoKTsKICAgICAgICAgaWYgKGxlZnQgJiYgcmlnaHQgJiYgbGVm
dC5pc051bWJlcigpICYmIHJpZ2h0LmlzTnVtYmVyKCkKLSAgICAgICAgICAgICYmIHRyeVNldENv
bnN0YW50KG5vZGVJbmRleCwgSlNWYWx1ZShsZWZ0LmFzTnVtYmVyKCkgKyByaWdodC5hc051bWJl
cigpKSkpIHsKKyAgICAgICAgICAgICYmIHRyeVNldENvbnN0YW50KG5vZGUsIEpTVmFsdWUobGVm
dC5hc051bWJlcigpICsgcmlnaHQuYXNOdW1iZXIoKSkpKSB7CiAgICAgICAgICAgICBtX2ZvdW5k
Q29uc3RhbnRzID0gdHJ1ZTsKICAgICAgICAgICAgIG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBpZiAobV9ncmFwaC5hZGRTaG91
bGRTcGVjdWxhdGVJbnRlZ2VyKG5vZGUpKSB7CiAgICAgICAgICAgICBzcGVjdWxhdGVJbnQzMkJp
bmFyeSgKLSAgICAgICAgICAgICAgICBub2RlLCAhbm9kZUNhblRydW5jYXRlSW50ZWdlcihub2Rl
LmFyaXRoTm9kZUZsYWdzKCkpKTsKLSAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQo
U3BlY0ludDMyKTsKKyAgICAgICAgICAgICAgICBub2RlLCAhbm9kZUNhblRydW5jYXRlSW50ZWdl
cihub2RlLT5hcml0aE5vZGVGbGFncygpKSk7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNl
dChTcGVjSW50MzIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgaWYg
KE5vZGU6OnNob3VsZFNwZWN1bGF0ZU51bWJlckV4cGVjdGluZ0RlZmluZWQobV9ncmFwaFtub2Rl
LmNoaWxkMSgpXSwgbV9ncmFwaFtub2RlLmNoaWxkMigpXSkpIHsKKyAgICAgICAgaWYgKE5vZGU6
OnNob3VsZFNwZWN1bGF0ZU51bWJlckV4cGVjdGluZ0RlZmluZWQobm9kZS0+Y2hpbGQxKCkubm9k
ZSgpLCBub2RlLT5jaGlsZDIoKS5ub2RlKCkpKSB7CiAgICAgICAgICAgICBzcGVjdWxhdGVOdW1i
ZXJCaW5hcnkobm9kZSk7Ci0gICAgICAgICAgICBpZiAoaXNSZWFsTnVtYmVyU3BlY3VsYXRpb24o
Zm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpCi0gICAgICAgICAgICAgICAgJiYgaXNSZWFs
TnVtYmVyU3BlY3VsYXRpb24oZm9yTm9kZShub2RlLmNoaWxkMigpKS5tX3R5cGUpKQotICAgICAg
ICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoU3BlY0RvdWJsZVJlYWwpOworICAgICAg
ICAgICAgaWYgKGlzUmVhbE51bWJlclNwZWN1bGF0aW9uKGZvck5vZGUobm9kZS0+Y2hpbGQxKCkp
Lm1fdHlwZSkKKyAgICAgICAgICAgICAgICAmJiBpc1JlYWxOdW1iZXJTcGVjdWxhdGlvbihmb3JO
b2RlKG5vZGUtPmNoaWxkMigpKS5tX3R5cGUpKQorICAgICAgICAgICAgICAgIGZvck5vZGUobm9k
ZSkuc2V0KFNwZWNEb3VibGVSZWFsKTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAg
ICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFNwZWNEb3VibGUpOworICAgICAgICAgICAgICAgIGZv
ck5vZGUobm9kZSkuc2V0KFNwZWNEb3VibGUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IH0KLSAgICAgICAgaWYgKG5vZGUub3AoKSA9PSBWYWx1ZUFkZCkgewotICAgICAgICAgICAgY2xv
YmJlcldvcmxkKG5vZGUuY29kZU9yaWdpbiwgaW5kZXhJbkJsb2NrKTsKLSAgICAgICAgICAgIGZv
ck5vZGUobm9kZUluZGV4KS5zZXQoU3BlY1N0cmluZyB8IFNwZWNJbnQzMiB8IFNwZWNOdW1iZXIp
OwotICAgICAgICAgICAgbm9kZS5zZXRDYW5FeGl0KGZhbHNlKTsKKyAgICAgICAgaWYgKG5vZGUt
Pm9wKCkgPT0gVmFsdWVBZGQpIHsKKyAgICAgICAgICAgIGNsb2JiZXJXb3JsZChub2RlLT5jb2Rl
T3JpZ2luLCBpbmRleEluQmxvY2spOworICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3Bl
Y1N0cmluZyB8IFNwZWNJbnQzMiB8IFNwZWNOdW1iZXIpOworICAgICAgICAgICAgbm9kZS0+c2V0
Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAv
LyBXZSBkb24ndCBoYW5kbGUgdGhpcyB5ZXQuIDotKAogICAgICAgICBtX2lzVmFsaWQgPSBmYWxz
ZTsKLSAgICAgICAgbm9kZS5zZXRDYW5FeGl0KHRydWUpOworICAgICAgICBub2RlLT5zZXRDYW5F
eGl0KHRydWUpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgICAgICAKICAgICBjYXNl
IEFyaXRoU3ViOiB7Ci0gICAgICAgIEpTVmFsdWUgbGVmdCA9IGZvck5vZGUobm9kZS5jaGlsZDEo
KSkudmFsdWUoKTsKLSAgICAgICAgSlNWYWx1ZSByaWdodCA9IGZvck5vZGUobm9kZS5jaGlsZDIo
KSkudmFsdWUoKTsKKyAgICAgICAgSlNWYWx1ZSBsZWZ0ID0gZm9yTm9kZShub2RlLT5jaGlsZDEo
KSkudmFsdWUoKTsKKyAgICAgICAgSlNWYWx1ZSByaWdodCA9IGZvck5vZGUobm9kZS0+Y2hpbGQy
KCkpLnZhbHVlKCk7CiAgICAgICAgIGlmIChsZWZ0ICYmIHJpZ2h0ICYmIGxlZnQuaXNOdW1iZXIo
KSAmJiByaWdodC5pc051bWJlcigpCi0gICAgICAgICAgICAmJiB0cnlTZXRDb25zdGFudChub2Rl
SW5kZXgsIEpTVmFsdWUobGVmdC5hc051bWJlcigpIC0gcmlnaHQuYXNOdW1iZXIoKSkpKSB7Cisg
ICAgICAgICAgICAmJiB0cnlTZXRDb25zdGFudChub2RlLCBKU1ZhbHVlKGxlZnQuYXNOdW1iZXIo
KSAtIHJpZ2h0LmFzTnVtYmVyKCkpKSkgewogICAgICAgICAgICAgbV9mb3VuZENvbnN0YW50cyA9
IHRydWU7Ci0gICAgICAgICAgICBub2RlLnNldENhbkV4aXQoZmFsc2UpOworICAgICAgICAgICAg
bm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQog
ICAgICAgICBpZiAobV9ncmFwaC5hZGRTaG91bGRTcGVjdWxhdGVJbnRlZ2VyKG5vZGUpKSB7CiAg
ICAgICAgICAgICBzcGVjdWxhdGVJbnQzMkJpbmFyeSgKLSAgICAgICAgICAgICAgICBub2RlLCAh
bm9kZUNhblRydW5jYXRlSW50ZWdlcihub2RlLmFyaXRoTm9kZUZsYWdzKCkpKTsKLSAgICAgICAg
ICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoU3BlY0ludDMyKTsKKyAgICAgICAgICAgICAgICBu
b2RlLCAhbm9kZUNhblRydW5jYXRlSW50ZWdlcihub2RlLT5hcml0aE5vZGVGbGFncygpKSk7Cisg
ICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjSW50MzIpOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIH0KICAgICAgICAgc3BlY3VsYXRlTnVtYmVyQmluYXJ5KG5vZGUpOwotICAg
ICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFNwZWNEb3VibGUpOworICAgICAgICBmb3JOb2Rl
KG5vZGUpLnNldChTcGVjRG91YmxlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAK
ICAgICBjYXNlIEFyaXRoTmVnYXRlOiB7Ci0gICAgICAgIEpTVmFsdWUgY2hpbGQgPSBmb3JOb2Rl
KG5vZGUuY2hpbGQxKCkpLnZhbHVlKCk7CisgICAgICAgIEpTVmFsdWUgY2hpbGQgPSBmb3JOb2Rl
KG5vZGUtPmNoaWxkMSgpKS52YWx1ZSgpOwogICAgICAgICBpZiAoY2hpbGQgJiYgY2hpbGQuaXNO
dW1iZXIoKQotICAgICAgICAgICAgJiYgdHJ5U2V0Q29uc3RhbnQobm9kZUluZGV4LCBKU1ZhbHVl
KC1jaGlsZC5hc051bWJlcigpKSkpIHsKKyAgICAgICAgICAgICYmIHRyeVNldENvbnN0YW50KG5v
ZGUsIEpTVmFsdWUoLWNoaWxkLmFzTnVtYmVyKCkpKSkgewogICAgICAgICAgICAgbV9mb3VuZENv
bnN0YW50cyA9IHRydWU7Ci0gICAgICAgICAgICBub2RlLnNldENhbkV4aXQoZmFsc2UpOworICAg
ICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgfQogICAgICAgICBpZiAobV9ncmFwaC5uZWdhdGVTaG91bGRTcGVjdWxhdGVJbnRlZ2Vy
KG5vZGUpKSB7CiAgICAgICAgICAgICBzcGVjdWxhdGVJbnQzMlVuYXJ5KAotICAgICAgICAgICAg
ICAgIG5vZGUsICFub2RlQ2FuVHJ1bmNhdGVJbnRlZ2VyKG5vZGUuYXJpdGhOb2RlRmxhZ3MoKSkp
OwotICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChTcGVjSW50MzIpOworICAgICAg
ICAgICAgICAgIG5vZGUsICFub2RlQ2FuVHJ1bmNhdGVJbnRlZ2VyKG5vZGUtPmFyaXRoTm9kZUZs
YWdzKCkpKTsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNJbnQzMik7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBzcGVjdWxhdGVOdW1iZXJVbmFyeShu
b2RlKTsKLSAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChTcGVjRG91YmxlKTsKKyAgICAg
ICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0RvdWJsZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0K
ICAgICAgICAgCiAgICAgY2FzZSBBcml0aE11bDogewotICAgICAgICBKU1ZhbHVlIGxlZnQgPSBm
b3JOb2RlKG5vZGUuY2hpbGQxKCkpLnZhbHVlKCk7Ci0gICAgICAgIEpTVmFsdWUgcmlnaHQgPSBm
b3JOb2RlKG5vZGUuY2hpbGQyKCkpLnZhbHVlKCk7CisgICAgICAgIEpTVmFsdWUgbGVmdCA9IGZv
ck5vZGUobm9kZS0+Y2hpbGQxKCkpLnZhbHVlKCk7CisgICAgICAgIEpTVmFsdWUgcmlnaHQgPSBm
b3JOb2RlKG5vZGUtPmNoaWxkMigpKS52YWx1ZSgpOwogICAgICAgICBpZiAobGVmdCAmJiByaWdo
dCAmJiBsZWZ0LmlzTnVtYmVyKCkgJiYgcmlnaHQuaXNOdW1iZXIoKQotICAgICAgICAgICAgJiYg
dHJ5U2V0Q29uc3RhbnQobm9kZUluZGV4LCBKU1ZhbHVlKGxlZnQuYXNOdW1iZXIoKSAqIHJpZ2h0
LmFzTnVtYmVyKCkpKSkgeworICAgICAgICAgICAgJiYgdHJ5U2V0Q29uc3RhbnQobm9kZSwgSlNW
YWx1ZShsZWZ0LmFzTnVtYmVyKCkgKiByaWdodC5hc051bWJlcigpKSkpIHsKICAgICAgICAgICAg
IG1fZm91bmRDb25zdGFudHMgPSB0cnVlOwotICAgICAgICAgICAgbm9kZS5zZXRDYW5FeGl0KGZh
bHNlKTsKKyAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgaWYgKG1fZ3JhcGgubXVsU2hvdWxkU3BlY3VsYXRl
SW50ZWdlcihub2RlKSkgewogICAgICAgICAgICAgc3BlY3VsYXRlSW50MzJCaW5hcnkoCiAgICAg
ICAgICAgICAgICAgbm9kZSwKLSAgICAgICAgICAgICAgICAhbm9kZUNhblRydW5jYXRlSW50ZWdl
cihub2RlLmFyaXRoTm9kZUZsYWdzKCkpCi0gICAgICAgICAgICAgICAgfHwgIW5vZGVDYW5JZ25v
cmVOZWdhdGl2ZVplcm8obm9kZS5hcml0aE5vZGVGbGFncygpKSk7Ci0gICAgICAgICAgICBmb3JO
b2RlKG5vZGVJbmRleCkuc2V0KFNwZWNJbnQzMik7CisgICAgICAgICAgICAgICAgIW5vZGVDYW5U
cnVuY2F0ZUludGVnZXIobm9kZS0+YXJpdGhOb2RlRmxhZ3MoKSkKKyAgICAgICAgICAgICAgICB8
fCAhbm9kZUNhbklnbm9yZU5lZ2F0aXZlWmVybyhub2RlLT5hcml0aE5vZGVGbGFncygpKSk7Cisg
ICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjSW50MzIpOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIH0KICAgICAgICAgc3BlY3VsYXRlTnVtYmVyQmluYXJ5KG5vZGUpOwotICAg
ICAgICBpZiAoaXNSZWFsTnVtYmVyU3BlY3VsYXRpb24oZm9yTm9kZShub2RlLmNoaWxkMSgpKS5t
X3R5cGUpCi0gICAgICAgICAgICB8fCBpc1JlYWxOdW1iZXJTcGVjdWxhdGlvbihmb3JOb2RlKG5v
ZGUuY2hpbGQyKCkpLm1fdHlwZSkpCi0gICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0
KFNwZWNEb3VibGVSZWFsKTsKKyAgICAgICAgaWYgKGlzUmVhbE51bWJlclNwZWN1bGF0aW9uKGZv
ck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fdHlwZSkKKyAgICAgICAgICAgIHx8IGlzUmVhbE51bWJl
clNwZWN1bGF0aW9uKGZvck5vZGUobm9kZS0+Y2hpbGQyKCkpLm1fdHlwZSkpCisgICAgICAgICAg
ICBmb3JOb2RlKG5vZGUpLnNldChTcGVjRG91YmxlUmVhbCk7CiAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoU3BlY0RvdWJsZSk7CisgICAgICAgICAgICBm
b3JOb2RlKG5vZGUpLnNldChTcGVjRG91YmxlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAg
ICAgICAKQEAgLTU2MywyNCArNTYyLDI0IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1
bnNpZ25lZCBpbmQKICAgICBjYXNlIEFyaXRoTWluOgogICAgIGNhc2UgQXJpdGhNYXg6CiAgICAg
Y2FzZSBBcml0aE1vZDogewotICAgICAgICBKU1ZhbHVlIGxlZnQgPSBmb3JOb2RlKG5vZGUuY2hp
bGQxKCkpLnZhbHVlKCk7Ci0gICAgICAgIEpTVmFsdWUgcmlnaHQgPSBmb3JOb2RlKG5vZGUuY2hp
bGQyKCkpLnZhbHVlKCk7CisgICAgICAgIEpTVmFsdWUgbGVmdCA9IGZvck5vZGUobm9kZS0+Y2hp
bGQxKCkpLnZhbHVlKCk7CisgICAgICAgIEpTVmFsdWUgcmlnaHQgPSBmb3JOb2RlKG5vZGUtPmNo
aWxkMigpKS52YWx1ZSgpOwogICAgICAgICBpZiAobGVmdCAmJiByaWdodCAmJiBsZWZ0LmlzTnVt
YmVyKCkgJiYgcmlnaHQuaXNOdW1iZXIoKSkgewogICAgICAgICAgICAgZG91YmxlIGEgPSBsZWZ0
LmFzTnVtYmVyKCk7CiAgICAgICAgICAgICBkb3VibGUgYiA9IHJpZ2h0LmFzTnVtYmVyKCk7CiAg
ICAgICAgICAgICBib29sIGNvbnN0YW50V2FzU2V0OwogICAgICAgICAgICAgc3dpdGNoIChub2Rl
Lm9wKCkpIHsKICAgICAgICAgICAgIGNhc2UgQXJpdGhEaXY6Ci0gICAgICAgICAgICAgICAgY29u
c3RhbnRXYXNTZXQgPSB0cnlTZXRDb25zdGFudChub2RlSW5kZXgsIEpTVmFsdWUoYSAvIGIpKTsK
KyAgICAgICAgICAgICAgICBjb25zdGFudFdhc1NldCA9IHRyeVNldENvbnN0YW50KG5vZGUsIEpT
VmFsdWUoYSAvIGIpKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2Ug
QXJpdGhNaW46Ci0gICAgICAgICAgICAgICAgY29uc3RhbnRXYXNTZXQgPSB0cnlTZXRDb25zdGFu
dChub2RlSW5kZXgsIEpTVmFsdWUoYSA8IGIgPyBhIDogKGIgPD0gYSA/IGIgOiBhICsgYikpKTsK
KyAgICAgICAgICAgICAgICBjb25zdGFudFdhc1NldCA9IHRyeVNldENvbnN0YW50KG5vZGUsIEpT
VmFsdWUoYSA8IGIgPyBhIDogKGIgPD0gYSA/IGIgOiBhICsgYikpKTsKICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgIGNhc2UgQXJpdGhNYXg6Ci0gICAgICAgICAgICAgICAgY29u
c3RhbnRXYXNTZXQgPSB0cnlTZXRDb25zdGFudChub2RlSW5kZXgsIEpTVmFsdWUoYSA+IGIgPyBh
IDogKGIgPj0gYSA/IGIgOiBhICsgYikpKTsKKyAgICAgICAgICAgICAgICBjb25zdGFudFdhc1Nl
dCA9IHRyeVNldENvbnN0YW50KG5vZGUsIEpTVmFsdWUoYSA+IGIgPyBhIDogKGIgPj0gYSA/IGIg
OiBhICsgYikpKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgQXJp
dGhNb2Q6Ci0gICAgICAgICAgICAgICAgY29uc3RhbnRXYXNTZXQgPSB0cnlTZXRDb25zdGFudChu
b2RlSW5kZXgsIEpTVmFsdWUoZm1vZChhLCBiKSkpOworICAgICAgICAgICAgICAgIGNvbnN0YW50
V2FzU2V0ID0gdHJ5U2V0Q29uc3RhbnQobm9kZSwgSlNWYWx1ZShmbW9kKGEsIGIpKSk7CiAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC01ODksODQgKzU4OCw4NCBAQCBib29s
IEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICBpZiAoY29uc3RhbnRXYXNTZXQpIHsKICAgICAgICAgICAgICAgICBtX2ZvdW5kQ29u
c3RhbnRzID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBub2RlLnNldENhbkV4aXQoZmFsc2UpOwor
ICAgICAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIGlmIChOb2RlOjpzaG91
bGRTcGVjdWxhdGVJbnRlZ2VyRm9yQXJpdGhtZXRpYygKLSAgICAgICAgICAgICAgICBtX2dyYXBo
W25vZGUuY2hpbGQxKCldLCBtX2dyYXBoW25vZGUuY2hpbGQyKCldKQotICAgICAgICAgICAgJiYg
bm9kZS5jYW5TcGVjdWxhdGVJbnRlZ2VyKCkpIHsKKyAgICAgICAgICAgICAgICBub2RlLT5jaGls
ZDEoKS5ub2RlKCksIG5vZGUtPmNoaWxkMigpLm5vZGUoKSkKKyAgICAgICAgICAgICYmIG5vZGUt
PmNhblNwZWN1bGF0ZUludGVnZXIoKSkgewogICAgICAgICAgICAgc3BlY3VsYXRlSW50MzJCaW5h
cnkobm9kZSwgdHJ1ZSk7IC8vIGZvcmNpbmcgY2FuLWV4aXQsIHdoaWNoIGlzIGEgYml0IG9uIHRo
ZSBjb25zZXJ2YXRpdmUgc2lkZS4KLSAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQo
U3BlY0ludDMyKTsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNJbnQzMik7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBzcGVjdWxhdGVOdW1iZXJCaW5h
cnkobm9kZSk7Ci0gICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoU3BlY0RvdWJsZSk7Cisg
ICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNEb3VibGUpOwogICAgICAgICBicmVhazsKICAg
ICB9CiAgICAgICAgICAgICAKICAgICBjYXNlIEFyaXRoQWJzOiB7Ci0gICAgICAgIEpTVmFsdWUg
Y2hpbGQgPSBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLnZhbHVlKCk7CisgICAgICAgIEpTVmFsdWUg
Y2hpbGQgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS52YWx1ZSgpOwogICAgICAgICBpZiAoY2hp
bGQgJiYgY2hpbGQuaXNOdW1iZXIoKQotICAgICAgICAgICAgJiYgdHJ5U2V0Q29uc3RhbnQobm9k
ZUluZGV4LCBKU1ZhbHVlKGZhYnMoY2hpbGQuYXNOdW1iZXIoKSkpKSkgeworICAgICAgICAgICAg
JiYgdHJ5U2V0Q29uc3RhbnQobm9kZSwgSlNWYWx1ZShmYWJzKGNoaWxkLmFzTnVtYmVyKCkpKSkp
IHsKICAgICAgICAgICAgIG1fZm91bmRDb25zdGFudHMgPSB0cnVlOwotICAgICAgICAgICAgbm9k
ZS5zZXRDYW5FeGl0KGZhbHNlKTsKKyAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2Up
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKG1fZ3JhcGhbbm9k
ZS5jaGlsZDEoKV0uc2hvdWxkU3BlY3VsYXRlSW50ZWdlckZvckFyaXRobWV0aWMoKQotICAgICAg
ICAgICAgJiYgbm9kZS5jYW5TcGVjdWxhdGVJbnRlZ2VyKCkpIHsKKyAgICAgICAgaWYgKG5vZGUt
PmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyRm9yQXJpdGhtZXRpYygpCisgICAgICAg
ICAgICAmJiBub2RlLT5jYW5TcGVjdWxhdGVJbnRlZ2VyKCkpIHsKICAgICAgICAgICAgIHNwZWN1
bGF0ZUludDMyVW5hcnkobm9kZSwgdHJ1ZSk7Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRl
eCkuc2V0KFNwZWNJbnQzMik7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjSW50
MzIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgc3BlY3VsYXRlTnVt
YmVyVW5hcnkobm9kZSk7Ci0gICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoU3BlY0RvdWJs
ZSk7CisgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNEb3VibGUpOwogICAgICAgICBicmVh
azsKICAgICB9CiAgICAgICAgICAgICAKICAgICBjYXNlIEFyaXRoU3FydDogewotICAgICAgICBK
U1ZhbHVlIGNoaWxkID0gZm9yTm9kZShub2RlLmNoaWxkMSgpKS52YWx1ZSgpOworICAgICAgICBK
U1ZhbHVlIGNoaWxkID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSkudmFsdWUoKTsKICAgICAgICAg
aWYgKGNoaWxkICYmIGNoaWxkLmlzTnVtYmVyKCkKLSAgICAgICAgICAgICYmIHRyeVNldENvbnN0
YW50KG5vZGVJbmRleCwgSlNWYWx1ZShzcXJ0KGNoaWxkLmFzTnVtYmVyKCkpKSkpIHsKKyAgICAg
ICAgICAgICYmIHRyeVNldENvbnN0YW50KG5vZGUsIEpTVmFsdWUoc3FydChjaGlsZC5hc051bWJl
cigpKSkpKSB7CiAgICAgICAgICAgICBtX2ZvdW5kQ29uc3RhbnRzID0gdHJ1ZTsKLSAgICAgICAg
ICAgIG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7CisgICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0
KGZhbHNlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIHNwZWN1bGF0
ZU51bWJlclVuYXJ5KG5vZGUpOwotICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFNwZWNE
b3VibGUpOworICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjRG91YmxlKTsKICAgICAgICAg
YnJlYWs7CiAgICAgfQogICAgICAgICAgICAgCiAgICAgY2FzZSBMb2dpY2FsTm90OiB7CiAgICAg
ICAgIGJvb2wgZGlkU2V0Q29uc3RhbnQgPSBmYWxzZTsKLSAgICAgICAgc3dpdGNoIChib29sZWFu
UmVzdWx0KG5vZGUsIGZvck5vZGUobm9kZS5jaGlsZDEoKSkpKSB7CisgICAgICAgIHN3aXRjaCAo
Ym9vbGVhblJlc3VsdChub2RlLCBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKSkpIHsKICAgICAgICAg
Y2FzZSBEZWZpbml0ZWx5VHJ1ZToKLSAgICAgICAgICAgIGRpZFNldENvbnN0YW50ID0gdHJ5U2V0
Q29uc3RhbnQobm9kZUluZGV4LCBqc0Jvb2xlYW4oZmFsc2UpKTsKKyAgICAgICAgICAgIGRpZFNl
dENvbnN0YW50ID0gdHJ5U2V0Q29uc3RhbnQobm9kZSwganNCb29sZWFuKGZhbHNlKSk7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBEZWZpbml0ZWx5RmFsc2U6Ci0gICAgICAgICAg
ICBkaWRTZXRDb25zdGFudCA9IHRyeVNldENvbnN0YW50KG5vZGVJbmRleCwganNCb29sZWFuKHRy
dWUpKTsKKyAgICAgICAgICAgIGRpZFNldENvbnN0YW50ID0gdHJ5U2V0Q29uc3RhbnQobm9kZSwg
anNCb29sZWFuKHRydWUpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBkZWZhdWx0Ogog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgaWYgKGRpZFNldENvbnN0YW50
KSB7CiAgICAgICAgICAgICBtX2ZvdW5kQ29uc3RhbnRzID0gdHJ1ZTsKLSAgICAgICAgICAgIG5v
ZGUuc2V0Q2FuRXhpdChmYWxzZSk7CisgICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNl
KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIE5vZGUmIGNoaWxkID0g
bV9ncmFwaFtub2RlLmNoaWxkMSgpXTsKLSAgICAgICAgaWYgKGlzQm9vbGVhblNwZWN1bGF0aW9u
KGNoaWxkLnByZWRpY3Rpb24oKSkpCisgICAgICAgIE5vZGUqIGNoaWxkID0gbm9kZS0+Y2hpbGQx
KCkubm9kZSgpOworICAgICAgICBpZiAoaXNCb29sZWFuU3BlY3VsYXRpb24oY2hpbGQtPnByZWRp
Y3Rpb24oKSkpCiAgICAgICAgICAgICBzcGVjdWxhdGVCb29sZWFuVW5hcnkobm9kZSk7Ci0gICAg
ICAgIGVsc2UgaWYgKGNoaWxkLnNob3VsZFNwZWN1bGF0ZU5vblN0cmluZ0NlbGxPck90aGVyKCkp
IHsKLSAgICAgICAgICAgIG5vZGUuc2V0Q2FuRXhpdCh0cnVlKTsKLSAgICAgICAgICAgIGZvck5v
ZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKChTcGVjQ2VsbCAmIH5TcGVjU3RyaW5nKSB8IFNwZWNP
dGhlcik7Ci0gICAgICAgIH0gZWxzZSBpZiAoY2hpbGQuc2hvdWxkU3BlY3VsYXRlSW50ZWdlcigp
KQorICAgICAgICBlbHNlIGlmIChjaGlsZC0+c2hvdWxkU3BlY3VsYXRlTm9uU3RyaW5nQ2VsbE9y
T3RoZXIoKSkgeworICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKKyAgICAgICAg
ICAgIGZvck5vZGUoY2hpbGQpLmZpbHRlcigoU3BlY0NlbGwgJiB+U3BlY1N0cmluZykgfCBTcGVj
T3RoZXIpOworICAgICAgICB9IGVsc2UgaWYgKGNoaWxkLT5zaG91bGRTcGVjdWxhdGVJbnRlZ2Vy
KCkpCiAgICAgICAgICAgICBzcGVjdWxhdGVJbnQzMlVuYXJ5KG5vZGUpOwotICAgICAgICBlbHNl
IGlmIChjaGlsZC5zaG91bGRTcGVjdWxhdGVOdW1iZXIoKSkKKyAgICAgICAgZWxzZSBpZiAoY2hp
bGQtPnNob3VsZFNwZWN1bGF0ZU51bWJlcigpKQogICAgICAgICAgICAgc3BlY3VsYXRlTnVtYmVy
VW5hcnkobm9kZSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIG5vZGUuc2V0Q2FuRXhpdChm
YWxzZSk7Ci0gICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoU3BlY0Jvb2xlYW4pOworICAg
ICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CisgICAgICAgIGZvck5vZGUobm9kZSku
c2V0KFNwZWNCb29sZWFuKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKQEAgLTY3
NiwzNiArNjc1LDM2IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQK
ICAgICBjYXNlIElzU3RyaW5nOgogICAgIGNhc2UgSXNPYmplY3Q6CiAgICAgY2FzZSBJc0Z1bmN0
aW9uOiB7Ci0gICAgICAgIG5vZGUuc2V0Q2FuRXhpdChub2RlLm9wKCkgPT0gSXNVbmRlZmluZWQg
JiYgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdEZvcihub2RlLmNvZGVPcmlnaW4pLT5tYXNxdWVy
YWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2ludCgpLT5pc1N0aWxsVmFsaWQoKSk7Ci0gICAgICAgIEpT
VmFsdWUgY2hpbGQgPSBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLnZhbHVlKCk7CisgICAgICAgIG5v
ZGUtPnNldENhbkV4aXQobm9kZS0+b3AoKSA9PSBJc1VuZGVmaW5lZCAmJiBtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0Rm9yKG5vZGUtPmNvZGVPcmlnaW4pLT5tYXNxdWVyYWRlc0FzVW5kZWZpbmVk
V2F0Y2hwb2ludCgpLT5pc1N0aWxsVmFsaWQoKSk7CisgICAgICAgIEpTVmFsdWUgY2hpbGQgPSBm
b3JOb2RlKG5vZGUtPmNoaWxkMSgpKS52YWx1ZSgpOwogICAgICAgICBpZiAoY2hpbGQpIHsKICAg
ICAgICAgICAgIGJvb2wgY29uc3RhbnRXYXNTZXQ7Ci0gICAgICAgICAgICBzd2l0Y2ggKG5vZGUu
b3AoKSkgeworICAgICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CiAgICAgICAgICAgICBj
YXNlIElzVW5kZWZpbmVkOgotICAgICAgICAgICAgICAgIGlmIChtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0Rm9yKG5vZGUuY29kZU9yaWdpbiktPm1hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBv
aW50KCktPmlzU3RpbGxWYWxpZCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnN0YW50V2Fz
U2V0ID0gdHJ5U2V0Q29uc3RhbnQobm9kZUluZGV4LCBqc0Jvb2xlYW4oCisgICAgICAgICAgICAg
ICAgaWYgKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3RGb3Iobm9kZS0+Y29kZU9yaWdpbiktPm1h
c3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50KCktPmlzU3RpbGxWYWxpZCgpKSB7CisgICAg
ICAgICAgICAgICAgICAgIGNvbnN0YW50V2FzU2V0ID0gdHJ5U2V0Q29uc3RhbnQobm9kZSwganNC
b29sZWFuKAogICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGQuaXNDZWxsKCkKICAgICAgICAg
ICAgICAgICAgICAgICAgID8gZmFsc2UgCiAgICAgICAgICAgICAgICAgICAgICAgICA6IGNoaWxk
LmlzVW5kZWZpbmVkKCkpKTsKICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
ICAgICAgICBjb25zdGFudFdhc1NldCA9IHRyeVNldENvbnN0YW50KG5vZGVJbmRleCwganNCb29s
ZWFuKAorICAgICAgICAgICAgICAgICAgICBjb25zdGFudFdhc1NldCA9IHRyeVNldENvbnN0YW50
KG5vZGUsIGpzQm9vbGVhbigKICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkLmlzQ2VsbCgp
Ci0gICAgICAgICAgICAgICAgICAgICAgICA/IGNoaWxkLmFzQ2VsbCgpLT5zdHJ1Y3R1cmUoKS0+
bWFzcXVlcmFkZXNBc1VuZGVmaW5lZChtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0Rm9yKG5vZGUu
Y29kZU9yaWdpbikpCisgICAgICAgICAgICAgICAgICAgICAgICA/IGNoaWxkLmFzQ2VsbCgpLT5z
dHJ1Y3R1cmUoKS0+bWFzcXVlcmFkZXNBc1VuZGVmaW5lZChtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0Rm9yKG5vZGUtPmNvZGVPcmlnaW4pKQogICAgICAgICAgICAgICAgICAgICAgICAgOiBjaGls
ZC5pc1VuZGVmaW5lZCgpKSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgY2FzZSBJc0Jvb2xlYW46Ci0gICAgICAgICAgICAgICAgY29uc3Rh
bnRXYXNTZXQgPSB0cnlTZXRDb25zdGFudChub2RlSW5kZXgsIGpzQm9vbGVhbihjaGlsZC5pc0Jv
b2xlYW4oKSkpOworICAgICAgICAgICAgICAgIGNvbnN0YW50V2FzU2V0ID0gdHJ5U2V0Q29uc3Rh
bnQobm9kZSwganNCb29sZWFuKGNoaWxkLmlzQm9vbGVhbigpKSk7CiAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICBjYXNlIElzTnVtYmVyOgotICAgICAgICAgICAgICAgIGNvbnN0
YW50V2FzU2V0ID0gdHJ5U2V0Q29uc3RhbnQobm9kZUluZGV4LCBqc0Jvb2xlYW4oY2hpbGQuaXNO
dW1iZXIoKSkpOworICAgICAgICAgICAgICAgIGNvbnN0YW50V2FzU2V0ID0gdHJ5U2V0Q29uc3Rh
bnQobm9kZSwganNCb29sZWFuKGNoaWxkLmlzTnVtYmVyKCkpKTsKICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgIGNhc2UgSXNTdHJpbmc6Ci0gICAgICAgICAgICAgICAgY29uc3Rh
bnRXYXNTZXQgPSB0cnlTZXRDb25zdGFudChub2RlSW5kZXgsIGpzQm9vbGVhbihpc0pTU3RyaW5n
KGNoaWxkKSkpOworICAgICAgICAgICAgICAgIGNvbnN0YW50V2FzU2V0ID0gdHJ5U2V0Q29uc3Rh
bnQobm9kZSwganNCb29sZWFuKGlzSlNTdHJpbmcoY2hpbGQpKSk7CiAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICBjYXNlIElzT2JqZWN0OgogICAgICAgICAgICAgICAgIGlmIChj
aGlsZC5pc051bGwoKSB8fCAhY2hpbGQuaXNPYmplY3QoKSkgewotICAgICAgICAgICAgICAgICAg
ICBjb25zdGFudFdhc1NldCA9IHRyeVNldENvbnN0YW50KG5vZGVJbmRleCwganNCb29sZWFuKGNo
aWxkLmlzTnVsbCgpKSk7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0YW50V2FzU2V0ID0gdHJ5
U2V0Q29uc3RhbnQobm9kZSwganNCb29sZWFuKGNoaWxkLmlzTnVsbCgpKSk7CiAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGRlZmF1bHQ6
CkBAIC03MTgsNjEgKzcxNyw2MSBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWdu
ZWQgaW5kCiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAotICAgICAgICBmb3JOb2RlKG5vZGVJ
bmRleCkuc2V0KFNwZWNCb29sZWFuKTsKKyAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0Jv
b2xlYW4pOwogICAgICAgICBicmVhazsKICAgICB9CiAKICAgICBjYXNlIFR5cGVPZjogewogICAg
ICAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSBtX2NvZGVCbG9jay0+Z2xvYmFsRGF0YSgp
OwotICAgICAgICBKU1ZhbHVlIGNoaWxkID0gZm9yTm9kZShub2RlLmNoaWxkMSgpKS52YWx1ZSgp
OwotICAgICAgICBBYnN0cmFjdFZhbHVlJiBhYnN0cmFjdENoaWxkID0gZm9yTm9kZShub2RlLmNo
aWxkMSgpKTsKKyAgICAgICAgSlNWYWx1ZSBjaGlsZCA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkp
LnZhbHVlKCk7CisgICAgICAgIEFic3RyYWN0VmFsdWUmIGFic3RyYWN0Q2hpbGQgPSBmb3JOb2Rl
KG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgaWYgKGNoaWxkKSB7Ci0gICAgICAgICAgICBKU1Zh
bHVlIHR5cGVTdHJpbmcgPSBqc1R5cGVTdHJpbmdGb3JWYWx1ZSgqZ2xvYmFsRGF0YSwgbV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdEZvcihub2RlLmNvZGVPcmlnaW4pLCBjaGlsZCk7Ci0gICAgICAg
ICAgICBpZiAodHJ5U2V0Q29uc3RhbnQobm9kZUluZGV4LCB0eXBlU3RyaW5nKSkgeworICAgICAg
ICAgICAgSlNWYWx1ZSB0eXBlU3RyaW5nID0ganNUeXBlU3RyaW5nRm9yVmFsdWUoKmdsb2JhbERh
dGEsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3RGb3Iobm9kZS0+Y29kZU9yaWdpbiksIGNoaWxk
KTsKKyAgICAgICAgICAgIGlmICh0cnlTZXRDb25zdGFudChub2RlLCB0eXBlU3RyaW5nKSkgewog
ICAgICAgICAgICAgICAgIG1fZm91bmRDb25zdGFudHMgPSB0cnVlOwogICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgaWYgKGlzTnVtYmVyU3BlY3Vs
YXRpb24oYWJzdHJhY3RDaGlsZC5tX3R5cGUpKSB7Ci0gICAgICAgICAgICBpZiAodHJ5U2V0Q29u
c3RhbnQobm9kZUluZGV4LCBnbG9iYWxEYXRhLT5zbWFsbFN0cmluZ3MubnVtYmVyU3RyaW5nKCkp
KSB7Ci0gICAgICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY051
bWJlcik7CisgICAgICAgICAgICBpZiAodHJ5U2V0Q29uc3RhbnQobm9kZSwgZ2xvYmFsRGF0YS0+
c21hbGxTdHJpbmdzLm51bWJlclN0cmluZygpKSkgeworICAgICAgICAgICAgICAgIGZvck5vZGUo
bm9kZS0+Y2hpbGQxKCkpLmZpbHRlcihTcGVjTnVtYmVyKTsKICAgICAgICAgICAgICAgICBtX2Zv
dW5kQ29uc3RhbnRzID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
IH0KICAgICAgICAgfSBlbHNlIGlmIChpc1N0cmluZ1NwZWN1bGF0aW9uKGFic3RyYWN0Q2hpbGQu
bV90eXBlKSkgewotICAgICAgICAgICAgaWYgKHRyeVNldENvbnN0YW50KG5vZGVJbmRleCwgZ2xv
YmFsRGF0YS0+c21hbGxTdHJpbmdzLnN0cmluZ1N0cmluZygpKSkgewotICAgICAgICAgICAgICAg
IGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNTdHJpbmcpOworICAgICAgICAgICAg
aWYgKHRyeVNldENvbnN0YW50KG5vZGUsIGdsb2JhbERhdGEtPnNtYWxsU3RyaW5ncy5zdHJpbmdT
dHJpbmcoKSkpIHsKKyAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5maWx0
ZXIoU3BlY1N0cmluZyk7CiAgICAgICAgICAgICAgICAgbV9mb3VuZENvbnN0YW50cyA9IHRydWU7
CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSBp
ZiAoaXNGaW5hbE9iamVjdFNwZWN1bGF0aW9uKGFic3RyYWN0Q2hpbGQubV90eXBlKSB8fCBpc0Fy
cmF5U3BlY3VsYXRpb24oYWJzdHJhY3RDaGlsZC5tX3R5cGUpIHx8IGlzQXJndW1lbnRzU3BlY3Vs
YXRpb24oYWJzdHJhY3RDaGlsZC5tX3R5cGUpKSB7Ci0gICAgICAgICAgICBpZiAodHJ5U2V0Q29u
c3RhbnQobm9kZUluZGV4LCBnbG9iYWxEYXRhLT5zbWFsbFN0cmluZ3Mub2JqZWN0U3RyaW5nKCkp
KSB7Ci0gICAgICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY0Zp
bmFsT2JqZWN0IHwgU3BlY0FycmF5IHwgU3BlY0FyZ3VtZW50cyk7CisgICAgICAgICAgICBpZiAo
dHJ5U2V0Q29uc3RhbnQobm9kZSwgZ2xvYmFsRGF0YS0+c21hbGxTdHJpbmdzLm9iamVjdFN0cmlu
ZygpKSkgeworICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRlcihT
cGVjRmluYWxPYmplY3QgfCBTcGVjQXJyYXkgfCBTcGVjQXJndW1lbnRzKTsKICAgICAgICAgICAg
ICAgICBtX2ZvdW5kQ29uc3RhbnRzID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIGlmIChpc0Z1bmN0aW9uU3BlY3VsYXRpb24oYWJz
dHJhY3RDaGlsZC5tX3R5cGUpKSB7Ci0gICAgICAgICAgICBpZiAodHJ5U2V0Q29uc3RhbnQobm9k
ZUluZGV4LCBnbG9iYWxEYXRhLT5zbWFsbFN0cmluZ3MuZnVuY3Rpb25TdHJpbmcoKSkpIHsKLSAg
ICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjRnVuY3Rpb24p
OworICAgICAgICAgICAgaWYgKHRyeVNldENvbnN0YW50KG5vZGUsIGdsb2JhbERhdGEtPnNtYWxs
U3RyaW5ncy5mdW5jdGlvblN0cmluZygpKSkgeworICAgICAgICAgICAgICAgIGZvck5vZGUobm9k
ZS0+Y2hpbGQxKCkpLmZpbHRlcihTcGVjRnVuY3Rpb24pOwogICAgICAgICAgICAgICAgIG1fZm91
bmRDb25zdGFudHMgPSB0cnVlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
fQogICAgICAgICB9IGVsc2UgaWYgKGlzQm9vbGVhblNwZWN1bGF0aW9uKGFic3RyYWN0Q2hpbGQu
bV90eXBlKSkgewotICAgICAgICAgICAgaWYgKHRyeVNldENvbnN0YW50KG5vZGVJbmRleCwgZ2xv
YmFsRGF0YS0+c21hbGxTdHJpbmdzLmJvb2xlYW5TdHJpbmcoKSkpIHsKLSAgICAgICAgICAgICAg
ICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjQm9vbGVhbik7CisgICAgICAgICAg
ICBpZiAodHJ5U2V0Q29uc3RhbnQobm9kZSwgZ2xvYmFsRGF0YS0+c21hbGxTdHJpbmdzLmJvb2xl
YW5TdHJpbmcoKSkpIHsKKyAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5m
aWx0ZXIoU3BlY0Jvb2xlYW4pOwogICAgICAgICAgICAgICAgIG1fZm91bmRDb25zdGFudHMgPSB0
cnVlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgTm9kZSYgY2hpbGROb2RlID0gbV9ncmFwaFtub2RlLmNoaWxkMSgp
XTsKLSAgICAgICAgICAgIGlmIChpc0NlbGxTcGVjdWxhdGlvbihjaGlsZE5vZGUucHJlZGljdGlv
bigpKSkgewotICAgICAgICAgICAgICAgIGlmIChpc1N0cmluZ1NwZWN1bGF0aW9uKGNoaWxkTm9k
ZS5wcmVkaWN0aW9uKCkpKQotICAgICAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQx
KCkpLmZpbHRlcihTcGVjU3RyaW5nKTsKKyAgICAgICAgICAgIE5vZGUqIGNoaWxkTm9kZSA9IG5v
ZGUtPmNoaWxkMSgpLm5vZGUoKTsKKyAgICAgICAgICAgIGlmIChpc0NlbGxTcGVjdWxhdGlvbihj
aGlsZE5vZGUtPnByZWRpY3Rpb24oKSkpIHsKKyAgICAgICAgICAgICAgICBpZiAoaXNTdHJpbmdT
cGVjdWxhdGlvbihjaGlsZE5vZGUtPnByZWRpY3Rpb24oKSkpCisgICAgICAgICAgICAgICAgICAg
IGZvck5vZGUoY2hpbGROb2RlKS5maWx0ZXIoU3BlY1N0cmluZyk7CiAgICAgICAgICAgICAgICAg
ZWxzZQotICAgICAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihT
cGVjQ2VsbCk7Ci0gICAgICAgICAgICAgICAgbm9kZS5zZXRDYW5FeGl0KHRydWUpOworICAgICAg
ICAgICAgICAgICAgICBmb3JOb2RlKGNoaWxkTm9kZSkuZmlsdGVyKFNwZWNDZWxsKTsKKyAgICAg
ICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOwogICAgICAgICAgICAgfQogICAgICAg
ICB9Ci0gICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoU3BlY1N0cmluZyk7CisgICAgICAg
IGZvck5vZGUobm9kZSkuc2V0KFNwZWNTdHJpbmcpOwogICAgICAgICBicmVhazsKICAgICB9CiAg
ICAgICAgICAgICAKQEAgLTc4MywyNiArNzgyLDI2IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhl
Y3V0ZSh1bnNpZ25lZCBpbmQKICAgICBjYXNlIENvbXBhcmVFcTogewogICAgICAgICBib29sIGNv
bnN0YW50V2FzU2V0ID0gZmFsc2U7CiAKLSAgICAgICAgSlNWYWx1ZSBsZWZ0Q29uc3QgPSBmb3JO
b2RlKG5vZGUuY2hpbGQxKCkpLnZhbHVlKCk7Ci0gICAgICAgIEpTVmFsdWUgcmlnaHRDb25zdCA9
IGZvck5vZGUobm9kZS5jaGlsZDIoKSkudmFsdWUoKTsKKyAgICAgICAgSlNWYWx1ZSBsZWZ0Q29u
c3QgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS52YWx1ZSgpOworICAgICAgICBKU1ZhbHVlIHJp
Z2h0Q29uc3QgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMigpKS52YWx1ZSgpOwogICAgICAgICBpZiAo
bGVmdENvbnN0ICYmIHJpZ2h0Q29uc3QgJiYgbGVmdENvbnN0LmlzTnVtYmVyKCkgJiYgcmlnaHRD
b25zdC5pc051bWJlcigpKSB7CiAgICAgICAgICAgICBkb3VibGUgYSA9IGxlZnRDb25zdC5hc051
bWJlcigpOwogICAgICAgICAgICAgZG91YmxlIGIgPSByaWdodENvbnN0LmFzTnVtYmVyKCk7CiAg
ICAgICAgICAgICBzd2l0Y2ggKG5vZGUub3AoKSkgewogICAgICAgICAgICAgY2FzZSBDb21wYXJl
TGVzczoKLSAgICAgICAgICAgICAgICBjb25zdGFudFdhc1NldCA9IHRyeVNldENvbnN0YW50KG5v
ZGVJbmRleCwganNCb29sZWFuKGEgPCBiKSk7CisgICAgICAgICAgICAgICAgY29uc3RhbnRXYXNT
ZXQgPSB0cnlTZXRDb25zdGFudChub2RlLCBqc0Jvb2xlYW4oYSA8IGIpKTsKICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgQ29tcGFyZUxlc3NFcToKLSAgICAgICAgICAg
ICAgICBjb25zdGFudFdhc1NldCA9IHRyeVNldENvbnN0YW50KG5vZGVJbmRleCwganNCb29sZWFu
KGEgPD0gYikpOworICAgICAgICAgICAgICAgIGNvbnN0YW50V2FzU2V0ID0gdHJ5U2V0Q29uc3Rh
bnQobm9kZSwganNCb29sZWFuKGEgPD0gYikpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgY2FzZSBDb21wYXJlR3JlYXRlcjoKLSAgICAgICAgICAgICAgICBjb25zdGFudFdh
c1NldCA9IHRyeVNldENvbnN0YW50KG5vZGVJbmRleCwganNCb29sZWFuKGEgPiBiKSk7CisgICAg
ICAgICAgICAgICAgY29uc3RhbnRXYXNTZXQgPSB0cnlTZXRDb25zdGFudChub2RlLCBqc0Jvb2xl
YW4oYSA+IGIpKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgQ29t
cGFyZUdyZWF0ZXJFcToKLSAgICAgICAgICAgICAgICBjb25zdGFudFdhc1NldCA9IHRyeVNldENv
bnN0YW50KG5vZGVJbmRleCwganNCb29sZWFuKGEgPj0gYikpOworICAgICAgICAgICAgICAgIGNv
bnN0YW50V2FzU2V0ID0gdHJ5U2V0Q29uc3RhbnQobm9kZSwganNCb29sZWFuKGEgPj0gYikpOwog
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBDb21wYXJlRXE6Ci0gICAg
ICAgICAgICAgICAgY29uc3RhbnRXYXNTZXQgPSB0cnlTZXRDb25zdGFudChub2RlSW5kZXgsIGpz
Qm9vbGVhbihhID09IGIpKTsKKyAgICAgICAgICAgICAgICBjb25zdGFudFdhc1NldCA9IHRyeVNl
dENvbnN0YW50KG5vZGUsIGpzQm9vbGVhbihhID09IGIpKTsKICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKQEAgLTgxMSwyNCArODEwLDI0IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6
ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICAK
LSAgICAgICAgaWYgKCFjb25zdGFudFdhc1NldCAmJiBub2RlLm9wKCkgPT0gQ29tcGFyZUVxKSB7
Ci0gICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSBsZWZ0VHlwZSA9IGZvck5vZGUobm9kZS5jaGls
ZDEoKSkubV90eXBlOwotICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgcmlnaHRUeXBlID0gZm9y
Tm9kZShub2RlLmNoaWxkMigpKS5tX3R5cGU7CisgICAgICAgIGlmICghY29uc3RhbnRXYXNTZXQg
JiYgbm9kZS0+b3AoKSA9PSBDb21wYXJlRXEpIHsKKyAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBl
IGxlZnRUeXBlID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSkubV90eXBlOworICAgICAgICAgICAg
U3BlY3VsYXRlZFR5cGUgcmlnaHRUeXBlID0gZm9yTm9kZShub2RlLT5jaGlsZDIoKSkubV90eXBl
OwogICAgICAgICAgICAgaWYgKChpc0ludDMyU3BlY3VsYXRpb24obGVmdFR5cGUpICYmIGlzT3Ro
ZXJTcGVjdWxhdGlvbihyaWdodFR5cGUpKQogICAgICAgICAgICAgICAgIHx8IChpc090aGVyU3Bl
Y3VsYXRpb24obGVmdFR5cGUpICYmIGlzSW50MzJTcGVjdWxhdGlvbihyaWdodFR5cGUpKSkKLSAg
ICAgICAgICAgICAgICBjb25zdGFudFdhc1NldCA9IHRyeVNldENvbnN0YW50KG5vZGVJbmRleCwg
anNCb29sZWFuKGZhbHNlKSk7CisgICAgICAgICAgICAgICAgY29uc3RhbnRXYXNTZXQgPSB0cnlT
ZXRDb25zdGFudChub2RlLCBqc0Jvb2xlYW4oZmFsc2UpKTsKICAgICAgICAgfQogICAgICAgICAK
ICAgICAgICAgaWYgKGNvbnN0YW50V2FzU2V0KSB7CiAgICAgICAgICAgICBtX2ZvdW5kQ29uc3Rh
bnRzID0gdHJ1ZTsKLSAgICAgICAgICAgIG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7CisgICAgICAg
ICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9CiAgICAgICAgIAotICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFNwZWNCb29sZWFu
KTsKKyAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0Jvb2xlYW4pOwogICAgICAgICAKLSAg
ICAgICAgTm9kZSYgbGVmdCA9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV07Ci0gICAgICAgIE5vZGUm
IHJpZ2h0ID0gbV9ncmFwaFtub2RlLmNoaWxkMigpXTsKKyAgICAgICAgTm9kZSogbGVmdCA9IG5v
ZGUtPmNoaWxkMSgpLm5vZGUoKTsKKyAgICAgICAgTm9kZSogcmlnaHQgPSBub2RlLT5jaGlsZDIo
KS5ub2RlKCk7CiAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIGZpbHRlcjsKICAgICAgICAgU3BlY3Vs
YXRlZFR5cGVDaGVja2VyIGNoZWNrZXI7CiAgICAgICAgIGlmIChOb2RlOjpzaG91bGRTcGVjdWxh
dGVJbnRlZ2VyKGxlZnQsIHJpZ2h0KSkgewpAQCAtODM4LDEyMSArODM3LDExOSBAQCBib29sIEFi
c3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgICAgICBmaWx0ZXIgPSBT
cGVjTnVtYmVyOwogICAgICAgICAgICAgY2hlY2tlciA9IGlzTnVtYmVyU3BlY3VsYXRpb247CiAg
ICAgICAgIH0gZWxzZSBpZiAobm9kZS5vcCgpID09IENvbXBhcmVFcSkgewotICAgICAgICAgICAg
aWYgKChtX2dyYXBoLmlzQ29uc3RhbnQobm9kZS5jaGlsZDEoKS5pbmRleCgpKQotICAgICAgICAg
ICAgICAgICAmJiBtX2dyYXBoLnZhbHVlT2ZKU0NvbnN0YW50KG5vZGUuY2hpbGQxKCkuaW5kZXgo
KSkuaXNOdWxsKCkpCi0gICAgICAgICAgICAgICAgfHwgKG1fZ3JhcGguaXNDb25zdGFudChub2Rl
LmNoaWxkMigpLmluZGV4KCkpCi0gICAgICAgICAgICAgICAgICAgICYmIG1fZ3JhcGgudmFsdWVP
ZkpTQ29uc3RhbnQobm9kZS5jaGlsZDIoKS5pbmRleCgpKS5pc051bGwoKSkpIHsKKyAgICAgICAg
ICAgIGlmICgobV9ncmFwaC5pc0NvbnN0YW50KGxlZnQpCisgICAgICAgICAgICAgICAgICYmIG1f
Z3JhcGgudmFsdWVPZkpTQ29uc3RhbnQobGVmdCkuaXNOdWxsKCkpCisgICAgICAgICAgICAgICAg
fHwgKG1fZ3JhcGguaXNDb25zdGFudChyaWdodCkKKyAgICAgICAgICAgICAgICAgICAgJiYgbV9n
cmFwaC52YWx1ZU9mSlNDb25zdGFudChyaWdodCkuaXNOdWxsKCkpKSB7CiAgICAgICAgICAgICAg
ICAgLy8gV2UgY2FuIGV4aXQgaWYgd2UgaGF2ZW4ndCBmaXJlZCB0aGUgTWFzcXVlcmFkZXNBc1Vu
ZGVmaW5kIHdhdGNocG9pbnQgeWV0LgotICAgICAgICAgICAgICAgIG5vZGUuc2V0Q2FuRXhpdCht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0Rm9yKG5vZGUuY29kZU9yaWdpbiktPm1hc3F1ZXJhZGVz
QXNVbmRlZmluZWRXYXRjaHBvaW50KCktPmlzU3RpbGxWYWxpZCgpKTsKKyAgICAgICAgICAgICAg
ICBub2RlLT5zZXRDYW5FeGl0KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3RGb3Iobm9kZS0+Y29k
ZU9yaWdpbiktPm1hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50KCktPmlzU3RpbGxWYWxp
ZCgpKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IAotICAgICAgICAgICAgaWYgKGxlZnQuc2hvdWxkU3BlY3VsYXRlU3RyaW5nKCkgfHwgcmlnaHQu
c2hvdWxkU3BlY3VsYXRlU3RyaW5nKCkpIHsKLSAgICAgICAgICAgICAgICBub2RlLnNldENhbkV4
aXQoZmFsc2UpOworICAgICAgICAgICAgaWYgKGxlZnQtPnNob3VsZFNwZWN1bGF0ZVN0cmluZygp
IHx8IHJpZ2h0LT5zaG91bGRTcGVjdWxhdGVTdHJpbmcoKSkgeworICAgICAgICAgICAgICAgIG5v
ZGUtPnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgfSAKLSAgICAgICAgICAgIGlmIChsZWZ0LnNob3VsZFNwZWN1bGF0ZU5vblN0cmluZ0NlbGwo
KSAmJiByaWdodC5zaG91bGRTcGVjdWxhdGVOb25TdHJpbmdDZWxsT3JPdGhlcigpKSB7Ci0gICAg
ICAgICAgICAgICAgbm9kZS5zZXRDYW5FeGl0KHRydWUpOwotICAgICAgICAgICAgICAgIGZvck5v
ZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNDZWxsICYgflNwZWNTdHJpbmcpOwotICAgICAg
ICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKChTcGVjQ2VsbCAmIH5TcGVj
U3RyaW5nKSB8IFNwZWNPdGhlcik7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBpZiAobGVmdC5zaG91bGRTcGVjdWxhdGVOb25TdHJpbmdDZWxsT3JP
dGhlcigpICYmIHJpZ2h0LnNob3VsZFNwZWN1bGF0ZU5vblN0cmluZ0NlbGwoKSkgewotICAgICAg
ICAgICAgICAgIG5vZGUuc2V0Q2FuRXhpdCh0cnVlKTsKLSAgICAgICAgICAgICAgICBmb3JOb2Rl
KG5vZGUuY2hpbGQxKCkpLmZpbHRlcigoU3BlY0NlbGwgJiB+U3BlY1N0cmluZykgfCBTcGVjT3Ro
ZXIpOwotICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKFNwZWND
ZWxsICYgflNwZWNTdHJpbmcpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
fQotICAgICAgICAgICAgaWYgKGxlZnQuc2hvdWxkU3BlY3VsYXRlTm9uU3RyaW5nQ2VsbCgpICYm
IHJpZ2h0LnNob3VsZFNwZWN1bGF0ZU5vblN0cmluZ0NlbGwoKSkgewotICAgICAgICAgICAgICAg
IG5vZGUuc2V0Q2FuRXhpdCh0cnVlKTsKLSAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hp
bGQxKCkpLmZpbHRlcihTcGVjQ2VsbCAmIH5TcGVjU3RyaW5nKTsKLSAgICAgICAgICAgICAgICBm
b3JOb2RlKG5vZGUuY2hpbGQyKCkpLmZpbHRlcihTcGVjQ2VsbCAmIH5TcGVjU3RyaW5nKTsKKyAg
ICAgICAgICAgIGlmIChsZWZ0LT5zaG91bGRTcGVjdWxhdGVOb25TdHJpbmdDZWxsKCkgJiYgcmln
aHQtPnNob3VsZFNwZWN1bGF0ZU5vblN0cmluZ0NlbGxPck90aGVyKCkpIHsKKyAgICAgICAgICAg
ICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOworICAgICAgICAgICAgICAgIGZvck5vZGUobGVm
dCkuZmlsdGVyKFNwZWNDZWxsICYgflNwZWNTdHJpbmcpOworICAgICAgICAgICAgICAgIGZvck5v
ZGUocmlnaHQpLmZpbHRlcigoU3BlY0NlbGwgJiB+U3BlY1N0cmluZykgfCBTcGVjT3RoZXIpOwor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGxl
ZnQtPnNob3VsZFNwZWN1bGF0ZU5vblN0cmluZ0NlbGxPck90aGVyKCkgJiYgcmlnaHQtPnNob3Vs
ZFNwZWN1bGF0ZU5vblN0cmluZ0NlbGwoKSkgeworICAgICAgICAgICAgICAgIG5vZGUtPnNldENh
bkV4aXQodHJ1ZSk7CisgICAgICAgICAgICAgICAgZm9yTm9kZShsZWZ0KS5maWx0ZXIoKFNwZWND
ZWxsICYgflNwZWNTdHJpbmcpIHwgU3BlY090aGVyKTsKKyAgICAgICAgICAgICAgICBmb3JOb2Rl
KHJpZ2h0KS5maWx0ZXIoU3BlY0NlbGwgJiB+U3BlY1N0cmluZyk7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAobGVmdC0+c2hvdWxkU3BlY3Vs
YXRlTm9uU3RyaW5nQ2VsbCgpICYmIHJpZ2h0LT5zaG91bGRTcGVjdWxhdGVOb25TdHJpbmdDZWxs
KCkpIHsKKyAgICAgICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOworICAgICAgICAg
ICAgICAgIGZvck5vZGUobGVmdCkuZmlsdGVyKFNwZWNDZWxsICYgflNwZWNTdHJpbmcpOworICAg
ICAgICAgICAgICAgIGZvck5vZGUocmlnaHQpLmZpbHRlcihTcGVjQ2VsbCAmIH5TcGVjU3RyaW5n
KTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAKICAgICAgICAgICAg
IGZpbHRlciA9IFNwZWNUb3A7CiAgICAgICAgICAgICBjaGVja2VyID0gaXNBbnlTcGVjdWxhdGlv
bjsKLSAgICAgICAgICAgIGNsb2JiZXJXb3JsZChub2RlLmNvZGVPcmlnaW4sIGluZGV4SW5CbG9j
ayk7CisgICAgICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+Y29kZU9yaWdpbiwgaW5kZXhJbkJs
b2NrKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGZpbHRlciA9IFNwZWNUb3A7CiAg
ICAgICAgICAgICBjaGVja2VyID0gaXNBbnlTcGVjdWxhdGlvbjsKLSAgICAgICAgICAgIGNsb2Ji
ZXJXb3JsZChub2RlLmNvZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7CisgICAgICAgICAgICBjbG9i
YmVyV29ybGQobm9kZS0+Y29kZU9yaWdpbiwgaW5kZXhJbkJsb2NrKTsKICAgICAgICAgfQogICAg
ICAgICBub2RlLnNldENhbkV4aXQoCi0gICAgICAgICAgICAhY2hlY2tlcihmb3JOb2RlKG5vZGUu
Y2hpbGQxKCkpLm1fdHlwZSkKLSAgICAgICAgICAgIHx8ICFjaGVja2VyKGZvck5vZGUobm9kZS5j
aGlsZDIoKSkubV90eXBlKSk7Ci0gICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVy
KGZpbHRlcik7Ci0gICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKGZpbHRlcik7
CisgICAgICAgICAgICAhY2hlY2tlcihmb3JOb2RlKGxlZnQpLm1fdHlwZSkKKyAgICAgICAgICAg
IHx8ICFjaGVja2VyKGZvck5vZGUocmlnaHQpLm1fdHlwZSkpOworICAgICAgICBmb3JOb2RlKGxl
ZnQpLmZpbHRlcihmaWx0ZXIpOworICAgICAgICBmb3JOb2RlKHJpZ2h0KS5maWx0ZXIoZmlsdGVy
KTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAgICAgCiAgICAgY2FzZSBDb21wYXJl
U3RyaWN0RXE6IHsKLSAgICAgICAgSlNWYWx1ZSBsZWZ0ID0gZm9yTm9kZShub2RlLmNoaWxkMSgp
KS52YWx1ZSgpOwotICAgICAgICBKU1ZhbHVlIHJpZ2h0ID0gZm9yTm9kZShub2RlLmNoaWxkMigp
KS52YWx1ZSgpOworICAgICAgICBOb2RlKiBsZWZ0Tm9kZSA9IG5vZGUtPmNoaWxkMSgpLm5vZGUo
KTsKKyAgICAgICAgTm9kZSogcmlnaHROb2RlID0gbm9kZS0+Y2hpbGQyKCkubm9kZSgpOworICAg
ICAgICBKU1ZhbHVlIGxlZnQgPSBmb3JOb2RlKGxlZnROb2RlKS52YWx1ZSgpOworICAgICAgICBK
U1ZhbHVlIHJpZ2h0ID0gZm9yTm9kZShyaWdodE5vZGUpLnZhbHVlKCk7CiAgICAgICAgIGlmIChs
ZWZ0ICYmIHJpZ2h0ICYmIGxlZnQuaXNOdW1iZXIoKSAmJiByaWdodC5pc051bWJlcigpCi0gICAg
ICAgICAgICAmJiB0cnlTZXRDb25zdGFudChub2RlSW5kZXgsIGpzQm9vbGVhbihsZWZ0LmFzTnVt
YmVyKCkgPT0gcmlnaHQuYXNOdW1iZXIoKSkpKSB7CisgICAgICAgICAgICAmJiB0cnlTZXRDb25z
dGFudChub2RlLCBqc0Jvb2xlYW4obGVmdC5hc051bWJlcigpID09IHJpZ2h0LmFzTnVtYmVyKCkp
KSkgewogICAgICAgICAgICAgbV9mb3VuZENvbnN0YW50cyA9IHRydWU7CiAgICAgICAgICAgICBu
b2RlLnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAg
ICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChTcGVjQm9vbGVhbik7Ci0gICAgICAgIGlmICht
X2dyYXBoLmlzSlNDb25zdGFudChub2RlLmNoaWxkMSgpLmluZGV4KCkpKSB7Ci0gICAgICAgICAg
ICBKU1ZhbHVlIHZhbHVlID0gbV9ncmFwaC52YWx1ZU9mSlNDb25zdGFudChub2RlLmNoaWxkMSgp
LmluZGV4KCkpOworICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjQm9vbGVhbik7CisgICAg
ICAgIGlmIChtX2dyYXBoLmlzSlNDb25zdGFudChsZWZ0Tm9kZSkpIHsKKyAgICAgICAgICAgIEpT
VmFsdWUgdmFsdWUgPSBtX2dyYXBoLnZhbHVlT2ZKU0NvbnN0YW50KGxlZnROb2RlKTsKICAgICAg
ICAgICAgIGlmICghdmFsdWUuaXNOdW1iZXIoKSAmJiAhdmFsdWUuaXNTdHJpbmcoKSkgewotICAg
ICAgICAgICAgICAgIG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7CisgICAgICAgICAgICAgICAgbm9k
ZS0+c2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICB9CiAgICAgICAgIH0KLSAgICAgICAgaWYgKG1fZ3JhcGguaXNKU0NvbnN0YW50KG5vZGUuY2hp
bGQyKCkuaW5kZXgoKSkpIHsKLSAgICAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBtX2dyYXBoLnZh
bHVlT2ZKU0NvbnN0YW50KG5vZGUuY2hpbGQyKCkuaW5kZXgoKSk7CisgICAgICAgIGlmIChtX2dy
YXBoLmlzSlNDb25zdGFudChyaWdodE5vZGUpKSB7CisgICAgICAgICAgICBKU1ZhbHVlIHZhbHVl
ID0gbV9ncmFwaC52YWx1ZU9mSlNDb25zdGFudChyaWdodE5vZGUpOwogICAgICAgICAgICAgaWYg
KCF2YWx1ZS5pc051bWJlcigpICYmICF2YWx1ZS5pc1N0cmluZygpKSB7Ci0gICAgICAgICAgICAg
ICAgbm9kZS5zZXRDYW5FeGl0KGZhbHNlKTsKKyAgICAgICAgICAgICAgICBub2RlLT5zZXRDYW5F
eGl0KGZhbHNlKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAg
ICAgfQotICAgICAgICBpZiAoTm9kZTo6c2hvdWxkU3BlY3VsYXRlSW50ZWdlcigKLSAgICAgICAg
ICAgICAgICBtX2dyYXBoW25vZGUuY2hpbGQxKCldLCBtX2dyYXBoW25vZGUuY2hpbGQyKCldKSkg
eworICAgICAgICBpZiAoTm9kZTo6c2hvdWxkU3BlY3VsYXRlSW50ZWdlcihsZWZ0Tm9kZSwgcmln
aHROb2RlKSkgewogICAgICAgICAgICAgc3BlY3VsYXRlSW50MzJCaW5hcnkobm9kZSk7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICBpZiAoTm9kZTo6c2hvdWxkU3BlY3Vs
YXRlTnVtYmVyKAotICAgICAgICAgICAgICAgIG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0sIG1fZ3Jh
cGhbbm9kZS5jaGlsZDIoKV0pKSB7CisgICAgICAgIGlmIChOb2RlOjpzaG91bGRTcGVjdWxhdGVO
dW1iZXIobGVmdE5vZGUsIHJpZ2h0Tm9kZSkpIHsKICAgICAgICAgICAgIHNwZWN1bGF0ZU51bWJl
ckJpbmFyeShub2RlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIE5v
ZGUmIGxlZnROb2RlID0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXTsKLSAgICAgICAgTm9kZSYgcmln
aHROb2RlID0gbV9ncmFwaFtub2RlLmNoaWxkMigpXTsKLSAgICAgICAgaWYgKGxlZnROb2RlLnNo
b3VsZFNwZWN1bGF0ZVN0cmluZygpIHx8IHJpZ2h0Tm9kZS5zaG91bGRTcGVjdWxhdGVTdHJpbmco
KSkgewotICAgICAgICAgICAgbm9kZS5zZXRDYW5FeGl0KGZhbHNlKTsKKyAgICAgICAgaWYgKGxl
ZnROb2RlLT5zaG91bGRTcGVjdWxhdGVTdHJpbmcoKSB8fCByaWdodE5vZGUtPnNob3VsZFNwZWN1
bGF0ZVN0cmluZygpKSB7CisgICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIGlmIChsZWZ0Tm9kZS5zaG91bGRT
cGVjdWxhdGVOb25TdHJpbmdDZWxsKCkgJiYgcmlnaHROb2RlLnNob3VsZFNwZWN1bGF0ZU5vblN0
cmluZ0NlbGwoKSkgeworICAgICAgICBpZiAobGVmdE5vZGUtPnNob3VsZFNwZWN1bGF0ZU5vblN0
cmluZ0NlbGwoKSAmJiByaWdodE5vZGUtPnNob3VsZFNwZWN1bGF0ZU5vblN0cmluZ0NlbGwoKSkg
ewogICAgICAgICAgICAgbm9kZS5zZXRDYW5FeGl0KHRydWUpOwotICAgICAgICAgICAgZm9yTm9k
ZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoKFNwZWNDZWxsICYgflNwZWNTdHJpbmcpIHwgU3BlY090
aGVyKTsKLSAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKChTcGVjQ2Vs
bCAmIH5TcGVjU3RyaW5nKSB8IFNwZWNPdGhlcik7CisgICAgICAgICAgICBmb3JOb2RlKGxlZnRO
b2RlKS5maWx0ZXIoKFNwZWNDZWxsICYgflNwZWNTdHJpbmcpIHwgU3BlY090aGVyKTsKKyAgICAg
ICAgICAgIGZvck5vZGUocmlnaHROb2RlKS5maWx0ZXIoKFNwZWNDZWxsICYgflNwZWNTdHJpbmcp
IHwgU3BlY090aGVyKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIG5v
ZGUuc2V0Q2FuRXhpdChmYWxzZSk7CisgICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwog
ICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgU3RyaW5nQ2hhckNvZGVB
dDoKLSAgICAgICAgbm9kZS5zZXRDYW5FeGl0KHRydWUpOwotICAgICAgICBmb3JOb2RlKG5vZGUu
Y2hpbGQxKCkpLmZpbHRlcihTcGVjU3RyaW5nKTsKLSAgICAgICAgZm9yTm9kZShub2RlLmNoaWxk
MigpKS5maWx0ZXIoU3BlY0ludDMyKTsKLSAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChT
cGVjSW50MzIpOworICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOworICAgICAgICBmb3JO
b2RlKG5vZGUtPmNoaWxkMSgpKS5maWx0ZXIoU3BlY1N0cmluZyk7CisgICAgICAgIGZvck5vZGUo
bm9kZS0+Y2hpbGQyKCkpLmZpbHRlcihTcGVjSW50MzIpOworICAgICAgICBmb3JOb2RlKG5vZGUp
LnNldChTcGVjSW50MzIpOwogICAgICAgICBicmVhazsKICAgICAgICAgCiAgICAgY2FzZSBTdHJp
bmdDaGFyQXQ6Ci0gICAgICAgIG5vZGUuc2V0Q2FuRXhpdCh0cnVlKTsKLSAgICAgICAgZm9yTm9k
ZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY1N0cmluZyk7Ci0gICAgICAgIGZvck5vZGUobm9k
ZS5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7Ci0gICAgICAgIGZvck5vZGUobm9kZUluZGV4
KS5zZXQoU3BlY1N0cmluZyk7CisgICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7CisgICAg
ICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRlcihTcGVjU3RyaW5nKTsKKyAgICAgICAg
Zm9yTm9kZShub2RlLT5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7CisgICAgICAgIGZvck5v
ZGUobm9kZSkuc2V0KFNwZWNTdHJpbmcpOwogICAgICAgICBicmVhazsKICAgICAgICAgICAgIAog
ICAgIGNhc2UgR2V0QnlWYWw6IHsKLSAgICAgICAgbm9kZS5zZXRDYW5FeGl0KHRydWUpOwotICAg
ICAgICBzd2l0Y2ggKG5vZGUuYXJyYXlNb2RlKCkudHlwZSgpKSB7CisgICAgICAgIG5vZGUtPnNl
dENhbkV4aXQodHJ1ZSk7CisgICAgICAgIHN3aXRjaCAobm9kZS0+YXJyYXlNb2RlKCkudHlwZSgp
KSB7CiAgICAgICAgIGNhc2UgQXJyYXk6OlNlbGVjdFVzaW5nUHJlZGljdGlvbnM6CiAgICAgICAg
IGNhc2UgQXJyYXk6OlVucHJvZmlsZWQ6CiAgICAgICAgIGNhc2UgQXJyYXk6OlVuZGVjaWRlZDoK
QEAgLTk2Miw4MSArOTU5LDgxIEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25l
ZCBpbmQKICAgICAgICAgICAgIG1faXNWYWxpZCA9IGZhbHNlOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIGNhc2UgQXJyYXk6OkdlbmVyaWM6Ci0gICAgICAgICAgICBjbG9iYmVyV29ybGQo
bm9kZS5jb2RlT3JpZ2luLCBpbmRleEluQmxvY2spOwotICAgICAgICAgICAgZm9yTm9kZShub2Rl
SW5kZXgpLm1ha2VUb3AoKTsKKyAgICAgICAgICAgIGNsb2JiZXJXb3JsZChub2RlLT5jb2RlT3Jp
Z2luLCBpbmRleEluQmxvY2spOworICAgICAgICAgICAgZm9yTm9kZShub2RlKS5tYWtlVG9wKCk7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6U3RyaW5nOgotICAgICAg
ICAgICAgZm9yTm9kZShub2RlLmNoaWxkMigpKS5maWx0ZXIoU3BlY0ludDMyKTsKLSAgICAgICAg
ICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoU3BlY1N0cmluZyk7CisgICAgICAgICAgICBmb3JO
b2RlKG5vZGUtPmNoaWxkMigpKS5maWx0ZXIoU3BlY0ludDMyKTsKKyAgICAgICAgICAgIGZvck5v
ZGUobm9kZSkuc2V0KFNwZWNTdHJpbmcpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNh
c2UgQXJyYXk6OkFyZ3VtZW50czoKLSAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDIoKSku
ZmlsdGVyKFNwZWNJbnQzMik7Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkubWFrZVRv
cCgpOworICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQz
Mik7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLm1ha2VUb3AoKTsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICBjYXNlIEFycmF5OjpJbnQzMjoKLSAgICAgICAgICAgIGZvck5vZGUobm9k
ZS5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7Ci0gICAgICAgICAgICBpZiAobm9kZS5hcnJh
eU1vZGUoKS5pc091dE9mQm91bmRzKCkpIHsKLSAgICAgICAgICAgICAgICBjbG9iYmVyV29ybGQo
bm9kZS5jb2RlT3JpZ2luLCBpbmRleEluQmxvY2spOwotICAgICAgICAgICAgICAgIGZvck5vZGUo
bm9kZUluZGV4KS5tYWtlVG9wKCk7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMigp
KS5maWx0ZXIoU3BlY0ludDMyKTsKKyAgICAgICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS5p
c091dE9mQm91bmRzKCkpIHsKKyAgICAgICAgICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+Y29k
ZU9yaWdpbiwgaW5kZXhJbkJsb2NrKTsKKyAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLm1h
a2VUb3AoKTsKICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgIGZvck5vZGUobm9k
ZUluZGV4KS5zZXQoU3BlY0ludDMyKTsKKyAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNl
dChTcGVjSW50MzIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OkRv
dWJsZToKLSAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQz
Mik7Ci0gICAgICAgICAgICBpZiAobm9kZS5hcnJheU1vZGUoKS5pc091dE9mQm91bmRzKCkpIHsK
LSAgICAgICAgICAgICAgICBjbG9iYmVyV29ybGQobm9kZS5jb2RlT3JpZ2luLCBpbmRleEluQmxv
Y2spOwotICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5tYWtlVG9wKCk7Ci0gICAg
ICAgICAgICB9IGVsc2UgaWYgKG5vZGUuYXJyYXlNb2RlKCkuaXNTYW5lQ2hhaW4oKSkKLSAgICAg
ICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFNwZWNEb3VibGUpOworICAgICAgICAg
ICAgZm9yTm9kZShub2RlLT5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7CisgICAgICAgICAg
ICBpZiAobm9kZS0+YXJyYXlNb2RlKCkuaXNPdXRPZkJvdW5kcygpKSB7CisgICAgICAgICAgICAg
ICAgY2xvYmJlcldvcmxkKG5vZGUtPmNvZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7CisgICAgICAg
ICAgICAgICAgZm9yTm9kZShub2RlKS5tYWtlVG9wKCk7CisgICAgICAgICAgICB9IGVsc2UgaWYg
KG5vZGUtPmFycmF5TW9kZSgpLmlzU2FuZUNoYWluKCkpCisgICAgICAgICAgICAgICAgZm9yTm9k
ZShub2RlKS5zZXQoU3BlY0RvdWJsZSk7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAg
ICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChTcGVjRG91YmxlUmVhbCk7CisgICAgICAgICAgICAg
ICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0RvdWJsZVJlYWwpOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3VvdXM6CiAgICAgICAgIGNhc2UgQXJyYXk6OkFy
cmF5U3RvcmFnZToKICAgICAgICAgY2FzZSBBcnJheTo6U2xvd1B1dEFycmF5U3RvcmFnZToKLSAg
ICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7Ci0gICAg
ICAgICAgICBpZiAobm9kZS5hcnJheU1vZGUoKS5pc091dE9mQm91bmRzKCkpCi0gICAgICAgICAg
ICAgICAgY2xvYmJlcldvcmxkKG5vZGUuY29kZU9yaWdpbiwgaW5kZXhJbkJsb2NrKTsKLSAgICAg
ICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5tYWtlVG9wKCk7CisgICAgICAgICAgICBmb3JOb2Rl
KG5vZGUtPmNoaWxkMigpKS5maWx0ZXIoU3BlY0ludDMyKTsKKyAgICAgICAgICAgIGlmIChub2Rl
LT5hcnJheU1vZGUoKS5pc091dE9mQm91bmRzKCkpCisgICAgICAgICAgICAgICAgY2xvYmJlcldv
cmxkKG5vZGUtPmNvZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7CisgICAgICAgICAgICBmb3JOb2Rl
KG5vZGUpLm1ha2VUb3AoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEFycmF5
OjpJbnQ4QXJyYXk6Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQyKCkpLmZpbHRlcihT
cGVjSW50MzIpOwotICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChTcGVjSW50MzIp
OworICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7
CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjSW50MzIpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OkludDE2QXJyYXk6Ci0gICAgICAgICAgICBmb3JO
b2RlKG5vZGUuY2hpbGQyKCkpLmZpbHRlcihTcGVjSW50MzIpOwotICAgICAgICAgICAgZm9yTm9k
ZShub2RlSW5kZXgpLnNldChTcGVjSW50MzIpOworICAgICAgICAgICAgZm9yTm9kZShub2RlLT5j
aGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNl
dChTcGVjSW50MzIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6Oklu
dDMyQXJyYXk6Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQyKCkpLmZpbHRlcihTcGVj
SW50MzIpOwotICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChTcGVjSW50MzIpOwor
ICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7Cisg
ICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjSW50MzIpOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OlVpbnQ4QXJyYXk6Ci0gICAgICAgICAgICBmb3JOb2Rl
KG5vZGUuY2hpbGQyKCkpLmZpbHRlcihTcGVjSW50MzIpOwotICAgICAgICAgICAgZm9yTm9kZShu
b2RlSW5kZXgpLnNldChTcGVjSW50MzIpOworICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGls
ZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChT
cGVjSW50MzIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OlVpbnQ4
Q2xhbXBlZEFycmF5OgotICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMigpKS5maWx0ZXIo
U3BlY0ludDMyKTsKLSAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoU3BlY0ludDMy
KTsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQyKCkpLmZpbHRlcihTcGVjSW50MzIp
OworICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0ludDMyKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICBjYXNlIEFycmF5OjpVaW50MTZBcnJheToKLSAgICAgICAgICAgIGZv
ck5vZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7Ci0gICAgICAgICAgICBmb3JO
b2RlKG5vZGVJbmRleCkuc2V0KFNwZWNJbnQzMik7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUt
PmNoaWxkMigpKS5maWx0ZXIoU3BlY0ludDMyKTsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZSku
c2V0KFNwZWNJbnQzMik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6
VWludDMyQXJyYXk6Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQyKCkpLmZpbHRlcihT
cGVjSW50MzIpOwotICAgICAgICAgICAgaWYgKG5vZGUuc2hvdWxkU3BlY3VsYXRlSW50ZWdlcigp
KQotICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoU3BlY0ludDMyKTsKKyAg
ICAgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQyKCkpLmZpbHRlcihTcGVjSW50MzIpOworICAg
ICAgICAgICAgaWYgKG5vZGUtPnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKSkKKyAgICAgICAgICAg
ICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjSW50MzIpOwogICAgICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoU3BlY0RvdWJsZSk7CisgICAgICAg
ICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0RvdWJsZSk7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgY2FzZSBBcnJheTo6RmxvYXQzMkFycmF5OgotICAgICAgICAgICAgZm9yTm9k
ZShub2RlLmNoaWxkMigpKS5maWx0ZXIoU3BlY0ludDMyKTsKLSAgICAgICAgICAgIGZvck5vZGUo
bm9kZUluZGV4KS5zZXQoU3BlY0RvdWJsZSk7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNo
aWxkMigpKS5maWx0ZXIoU3BlY0ludDMyKTsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0
KFNwZWNEb3VibGUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OkZs
b2F0NjRBcnJheToKLSAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKFNw
ZWNJbnQzMik7Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFNwZWNEb3VibGUp
OworICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7
CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjRG91YmxlKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKQEAgLTEwNDcsNDMgKzEwNDQsNDMgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpl
eGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICAgICAgCiAgICAgY2FzZSBQdXRCeVZhbDoKICAg
ICBjYXNlIFB1dEJ5VmFsQWxpYXM6IHsKLSAgICAgICAgbm9kZS5zZXRDYW5FeGl0KHRydWUpOwor
ICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOwogICAgICAgICBFZGdlIGNoaWxkMSA9IG1f
Z3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCk7CiAgICAgICAgIEVkZ2UgY2hpbGQyID0gbV9ncmFw
aC52YXJBcmdDaGlsZChub2RlLCAxKTsKICAgICAgICAgRWRnZSBjaGlsZDMgPSBtX2dyYXBoLnZh
ckFyZ0NoaWxkKG5vZGUsIDIpOwotICAgICAgICBzd2l0Y2ggKG5vZGUuYXJyYXlNb2RlKCkubW9k
ZUZvclB1dCgpLnR5cGUoKSkgeworICAgICAgICBzd2l0Y2ggKG5vZGUtPmFycmF5TW9kZSgpLm1v
ZGVGb3JQdXQoKS50eXBlKCkpIHsKICAgICAgICAgY2FzZSBBcnJheTo6Rm9yY2VFeGl0OgogICAg
ICAgICAgICAgbV9pc1ZhbGlkID0gZmFsc2U7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
Y2FzZSBBcnJheTo6R2VuZXJpYzoKLSAgICAgICAgICAgIGNsb2JiZXJXb3JsZChub2RlLmNvZGVP
cmlnaW4sIGluZGV4SW5CbG9jayk7CisgICAgICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+Y29k
ZU9yaWdpbiwgaW5kZXhJbkJsb2NrKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNl
IEFycmF5OjpJbnQzMjoKICAgICAgICAgICAgIGZvck5vZGUoY2hpbGQxKS5maWx0ZXIoU3BlY0Nl
bGwpOwogICAgICAgICAgICAgZm9yTm9kZShjaGlsZDIpLmZpbHRlcihTcGVjSW50MzIpOwogICAg
ICAgICAgICAgZm9yTm9kZShjaGlsZDMpLmZpbHRlcihTcGVjSW50MzIpOwotICAgICAgICAgICAg
aWYgKG5vZGUuYXJyYXlNb2RlKCkuaXNPdXRPZkJvdW5kcygpKQotICAgICAgICAgICAgICAgIGNs
b2JiZXJXb3JsZChub2RlLmNvZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7CisgICAgICAgICAgICBp
ZiAobm9kZS0+YXJyYXlNb2RlKCkuaXNPdXRPZkJvdW5kcygpKQorICAgICAgICAgICAgICAgIGNs
b2JiZXJXb3JsZChub2RlLT5jb2RlT3JpZ2luLCBpbmRleEluQmxvY2spOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OkRvdWJsZToKICAgICAgICAgICAgIGZvck5vZGUo
Y2hpbGQxKS5maWx0ZXIoU3BlY0NlbGwpOwogICAgICAgICAgICAgZm9yTm9kZShjaGlsZDIpLmZp
bHRlcihTcGVjSW50MzIpOwogICAgICAgICAgICAgZm9yTm9kZShjaGlsZDMpLmZpbHRlcihTcGVj
UmVhbE51bWJlcik7Ci0gICAgICAgICAgICBpZiAobm9kZS5hcnJheU1vZGUoKS5pc091dE9mQm91
bmRzKCkpCi0gICAgICAgICAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUuY29kZU9yaWdpbiwgaW5k
ZXhJbkJsb2NrKTsKKyAgICAgICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS5pc091dE9mQm91
bmRzKCkpCisgICAgICAgICAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUtPmNvZGVPcmlnaW4sIGlu
ZGV4SW5CbG9jayk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6Q29u
dGlndW91czoKICAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlTdG9yYWdlOgogICAgICAgICAgICAg
Zm9yTm9kZShjaGlsZDEpLmZpbHRlcihTcGVjQ2VsbCk7CiAgICAgICAgICAgICBmb3JOb2RlKGNo
aWxkMikuZmlsdGVyKFNwZWNJbnQzMik7Ci0gICAgICAgICAgICBpZiAobm9kZS5hcnJheU1vZGUo
KS5pc091dE9mQm91bmRzKCkpCi0gICAgICAgICAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUuY29k
ZU9yaWdpbiwgaW5kZXhJbkJsb2NrKTsKKyAgICAgICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUo
KS5pc091dE9mQm91bmRzKCkpCisgICAgICAgICAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUtPmNv
ZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2Fz
ZSBBcnJheTo6U2xvd1B1dEFycmF5U3RvcmFnZToKICAgICAgICAgICAgIGZvck5vZGUoY2hpbGQx
KS5maWx0ZXIoU3BlY0NlbGwpOwogICAgICAgICAgICAgZm9yTm9kZShjaGlsZDIpLmZpbHRlcihT
cGVjSW50MzIpOwotICAgICAgICAgICAgaWYgKG5vZGUuYXJyYXlNb2RlKCkubWF5U3RvcmVUb0hv
bGUoKSkKLSAgICAgICAgICAgICAgICBjbG9iYmVyV29ybGQobm9kZS5jb2RlT3JpZ2luLCBpbmRl
eEluQmxvY2spOworICAgICAgICAgICAgaWYgKG5vZGUtPmFycmF5TW9kZSgpLm1heVN0b3JlVG9I
b2xlKCkpCisgICAgICAgICAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUtPmNvZGVPcmlnaW4sIGlu
ZGV4SW5CbG9jayk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6QXJn
dW1lbnRzOgogICAgICAgICAgICAgZm9yTm9kZShjaGlsZDEpLmZpbHRlcihTcGVjQ2VsbCk7CkBA
IC0xMDkyLDcgKzEwODksNyBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQg
aW5kCiAgICAgICAgIGNhc2UgQXJyYXk6OkludDhBcnJheToKICAgICAgICAgICAgIGZvck5vZGUo
Y2hpbGQxKS5maWx0ZXIoU3BlY0NlbGwpOwogICAgICAgICAgICAgZm9yTm9kZShjaGlsZDIpLmZp
bHRlcihTcGVjSW50MzIpOwotICAgICAgICAgICAgaWYgKG1fZ3JhcGhbY2hpbGQzXS5zaG91bGRT
cGVjdWxhdGVJbnRlZ2VyKCkpCisgICAgICAgICAgICBpZiAoY2hpbGQzLT5zaG91bGRTcGVjdWxh
dGVJbnRlZ2VyKCkpCiAgICAgICAgICAgICAgICAgZm9yTm9kZShjaGlsZDMpLmZpbHRlcihTcGVj
SW50MzIpOwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIGZvck5vZGUoY2hpbGQz
KS5maWx0ZXIoU3BlY051bWJlcik7CkBAIC0xMTAwLDcgKzEwOTcsNyBAQCBib29sIEFic3RyYWN0
U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgIGNhc2UgQXJyYXk6OkludDE2QXJy
YXk6CiAgICAgICAgICAgICBmb3JOb2RlKGNoaWxkMSkuZmlsdGVyKFNwZWNDZWxsKTsKICAgICAg
ICAgICAgIGZvck5vZGUoY2hpbGQyKS5maWx0ZXIoU3BlY0ludDMyKTsKLSAgICAgICAgICAgIGlm
IChtX2dyYXBoW2NoaWxkM10uc2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKQorICAgICAgICAgICAg
aWYgKGNoaWxkMy0+c2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKQogICAgICAgICAgICAgICAgIGZv
ck5vZGUoY2hpbGQzKS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGVsc2UKICAgICAg
ICAgICAgICAgICBmb3JOb2RlKGNoaWxkMykuZmlsdGVyKFNwZWNOdW1iZXIpOwpAQCAtMTEwOCw3
ICsxMTA1LDcgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAg
ICAgICBjYXNlIEFycmF5OjpJbnQzMkFycmF5OgogICAgICAgICAgICAgZm9yTm9kZShjaGlsZDEp
LmZpbHRlcihTcGVjQ2VsbCk7CiAgICAgICAgICAgICBmb3JOb2RlKGNoaWxkMikuZmlsdGVyKFNw
ZWNJbnQzMik7Ci0gICAgICAgICAgICBpZiAobV9ncmFwaFtjaGlsZDNdLnNob3VsZFNwZWN1bGF0
ZUludGVnZXIoKSkKKyAgICAgICAgICAgIGlmIChjaGlsZDMtPnNob3VsZFNwZWN1bGF0ZUludGVn
ZXIoKSkKICAgICAgICAgICAgICAgICBmb3JOb2RlKGNoaWxkMykuZmlsdGVyKFNwZWNJbnQzMik7
CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgZm9yTm9kZShjaGlsZDMpLmZpbHRl
cihTcGVjTnVtYmVyKTsKQEAgLTExMTYsNyArMTExMyw3IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6
ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgY2FzZSBBcnJheTo6VWludDhBcnJheToKICAg
ICAgICAgICAgIGZvck5vZGUoY2hpbGQxKS5maWx0ZXIoU3BlY0NlbGwpOwogICAgICAgICAgICAg
Zm9yTm9kZShjaGlsZDIpLmZpbHRlcihTcGVjSW50MzIpOwotICAgICAgICAgICAgaWYgKG1fZ3Jh
cGhbY2hpbGQzXS5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpCisgICAgICAgICAgICBpZiAoY2hp
bGQzLT5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpCiAgICAgICAgICAgICAgICAgZm9yTm9kZShj
aGlsZDMpLmZpbHRlcihTcGVjSW50MzIpOwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAg
ICAgIGZvck5vZGUoY2hpbGQzKS5maWx0ZXIoU3BlY051bWJlcik7CkBAIC0xMTI0LDcgKzExMjEs
NyBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgIGNh
c2UgQXJyYXk6OlVpbnQ4Q2xhbXBlZEFycmF5OgogICAgICAgICAgICAgZm9yTm9kZShjaGlsZDEp
LmZpbHRlcihTcGVjQ2VsbCk7CiAgICAgICAgICAgICBmb3JOb2RlKGNoaWxkMikuZmlsdGVyKFNw
ZWNJbnQzMik7Ci0gICAgICAgICAgICBpZiAobV9ncmFwaFtjaGlsZDNdLnNob3VsZFNwZWN1bGF0
ZUludGVnZXIoKSkKKyAgICAgICAgICAgIGlmIChjaGlsZDMtPnNob3VsZFNwZWN1bGF0ZUludGVn
ZXIoKSkKICAgICAgICAgICAgICAgICBmb3JOb2RlKGNoaWxkMykuZmlsdGVyKFNwZWNJbnQzMik7
CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgZm9yTm9kZShjaGlsZDMpLmZpbHRl
cihTcGVjTnVtYmVyKTsKQEAgLTExMzIsNyArMTEyOSw3IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6
ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgY2FzZSBBcnJheTo6VWludDE2QXJyYXk6CiAg
ICAgICAgICAgICBmb3JOb2RlKGNoaWxkMSkuZmlsdGVyKFNwZWNDZWxsKTsKICAgICAgICAgICAg
IGZvck5vZGUoY2hpbGQyKS5maWx0ZXIoU3BlY0ludDMyKTsKLSAgICAgICAgICAgIGlmIChtX2dy
YXBoW2NoaWxkM10uc2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKQorICAgICAgICAgICAgaWYgKGNo
aWxkMy0+c2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKQogICAgICAgICAgICAgICAgIGZvck5vZGUo
Y2hpbGQzKS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAg
ICAgICBmb3JOb2RlKGNoaWxkMykuZmlsdGVyKFNwZWNOdW1iZXIpOwpAQCAtMTE0MCw3ICsxMTM3
LDcgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICBj
YXNlIEFycmF5OjpVaW50MzJBcnJheToKICAgICAgICAgICAgIGZvck5vZGUoY2hpbGQxKS5maWx0
ZXIoU3BlY0NlbGwpOwogICAgICAgICAgICAgZm9yTm9kZShjaGlsZDIpLmZpbHRlcihTcGVjSW50
MzIpOwotICAgICAgICAgICAgaWYgKG1fZ3JhcGhbY2hpbGQzXS5zaG91bGRTcGVjdWxhdGVJbnRl
Z2VyKCkpCisgICAgICAgICAgICBpZiAoY2hpbGQzLT5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkp
CiAgICAgICAgICAgICAgICAgZm9yTm9kZShjaGlsZDMpLmZpbHRlcihTcGVjSW50MzIpOwogICAg
ICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIGZvck5vZGUoY2hpbGQzKS5maWx0ZXIoU3Bl
Y051bWJlcik7CkBAIC0xMTYzLDE2NiArMTE2MCwxODggQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpl
eGVjdXRlKHVuc2lnbmVkIGluZAogICAgIH0KICAgICAgICAgICAgIAogICAgIGNhc2UgQXJyYXlQ
dXNoOgotICAgICAgICBub2RlLnNldENhbkV4aXQodHJ1ZSk7Ci0gICAgICAgIHN3aXRjaCAobm9k
ZS5hcnJheU1vZGUoKS50eXBlKCkpIHsKKyAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsK
KyAgICAgICAgc3dpdGNoIChub2RlLT5hcnJheU1vZGUoKS50eXBlKCkpIHsKICAgICAgICAgY2Fz
ZSBBcnJheTo6SW50MzI6Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQyKCkpLmZpbHRl
cihTcGVjSW50MzIpOworICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDIoKSkuZmlsdGVy
KFNwZWNJbnQzMik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6RG91
YmxlOgotICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMigpKS5maWx0ZXIoU3BlY1JlYWxO
dW1iZXIpOworICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDIoKSkuZmlsdGVyKFNwZWNS
ZWFsTnVtYmVyKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBkZWZhdWx0OgogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUuY29kZU9y
aWdpbiwgaW5kZXhJbkJsb2NrKTsKLSAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChTcGVj
TnVtYmVyKTsKKyAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUtPmNvZGVPcmlnaW4sIGluZGV4SW5C
bG9jayk7CisgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNOdW1iZXIpOwogICAgICAgICBi
cmVhazsKICAgICAgICAgICAgIAogICAgIGNhc2UgQXJyYXlQb3A6Ci0gICAgICAgIG5vZGUuc2V0
Q2FuRXhpdCh0cnVlKTsKLSAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUuY29kZU9yaWdpbiwgaW5k
ZXhJbkJsb2NrKTsKLSAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLm1ha2VUb3AoKTsKKyAgICAg
ICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKKyAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUtPmNv
ZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7CisgICAgICAgIGZvck5vZGUobm9kZSkubWFrZVRvcCgp
OwogICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgIGNhc2UgUmVnRXhwRXhlYzoKICAg
ICBjYXNlIFJlZ0V4cFRlc3Q6Ci0gICAgICAgIG5vZGUuc2V0Q2FuRXhpdCgKLSAgICAgICAgICAg
ICFpc0NlbGxTcGVjdWxhdGlvbihmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkKLSAgICAg
ICAgICAgIHx8ICFpc0NlbGxTcGVjdWxhdGlvbihmb3JOb2RlKG5vZGUuY2hpbGQyKCkpLm1fdHlw
ZSkpOwotICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjQ2VsbCk7Ci0g
ICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKFNwZWNDZWxsKTsKLSAgICAgICAg
Zm9yTm9kZShub2RlSW5kZXgpLm1ha2VUb3AoKTsKKyAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCgK
KyAgICAgICAgICAgICFpc0NlbGxTcGVjdWxhdGlvbihmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5t
X3R5cGUpCisgICAgICAgICAgICB8fCAhaXNDZWxsU3BlY3VsYXRpb24oZm9yTm9kZShub2RlLT5j
aGlsZDIoKSkubV90eXBlKSk7CisgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRl
cihTcGVjQ2VsbCk7CisgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQyKCkpLmZpbHRlcihTcGVj
Q2VsbCk7CisgICAgICAgIGZvck5vZGUobm9kZSkubWFrZVRvcCgpOwogICAgICAgICBicmVhazsK
ICAgICAgICAgICAgIAogICAgIGNhc2UgSnVtcDoKLSAgICAgICAgbm9kZS5zZXRDYW5FeGl0KGZh
bHNlKTsKKyAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgCiAgICAgY2FzZSBCcmFuY2g6IHsKLSAgICAgICAgQm9vbGVhblJlc3VsdCBy
ZXN1bHQgPSBib29sZWFuUmVzdWx0KG5vZGUsIGZvck5vZGUobm9kZS5jaGlsZDEoKSkpOworICAg
ICAgICBOb2RlKiBjaGlsZCA9IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKKyAgICAgICAgQm9vbGVh
blJlc3VsdCByZXN1bHQgPSBib29sZWFuUmVzdWx0KG5vZGUsIGZvck5vZGUoY2hpbGQpKTsKICAg
ICAgICAgaWYgKHJlc3VsdCA9PSBEZWZpbml0ZWx5VHJ1ZSkgewogICAgICAgICAgICAgbV9icmFu
Y2hEaXJlY3Rpb24gPSBUYWtlVHJ1ZTsKLSAgICAgICAgICAgIG5vZGUuc2V0Q2FuRXhpdChmYWxz
ZSk7CisgICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICB9CiAgICAgICAgIGlmIChyZXN1bHQgPT0gRGVmaW5pdGVseUZhbHNlKSB7
CiAgICAgICAgICAgICBtX2JyYW5jaERpcmVjdGlvbiA9IFRha2VGYWxzZTsKLSAgICAgICAgICAg
IG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7CisgICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZh
bHNlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIC8vIEZJWE1FOiBU
aGUgYWJvdmUgaGFuZGxlcyB0aGUgdHJpdmlhbCBjYXNlcyBvZiBzcGFyc2UgY29uZGl0aW9uYWwK
ICAgICAgICAgLy8gY29uc3RhbnQgcHJvcGFnYXRpb24sIGJ1dCB3ZSBjYW4gZG8gYmV0dGVyOgog
ICAgICAgICAvLyBXZSBjYW4gc3BlY2lhbGl6ZSB0aGUgc291cmNlIHZhcmlhYmxlJ3MgdmFsdWUg
b24gZWFjaCBkaXJlY3Rpb24gb2YKICAgICAgICAgLy8gdGhlIGJyYW5jaC4KLSAgICAgICAgTm9k
ZSYgY2hpbGQgPSBtX2dyYXBoW25vZGUuY2hpbGQxKCldOwotICAgICAgICBpZiAoY2hpbGQuc2hv
dWxkU3BlY3VsYXRlQm9vbGVhbigpKQorICAgICAgICBpZiAoY2hpbGQtPnNob3VsZFNwZWN1bGF0
ZUJvb2xlYW4oKSkKICAgICAgICAgICAgIHNwZWN1bGF0ZUJvb2xlYW5VbmFyeShub2RlKTsKLSAg
ICAgICAgZWxzZSBpZiAoY2hpbGQuc2hvdWxkU3BlY3VsYXRlTm9uU3RyaW5nQ2VsbE9yT3RoZXIo
KSkgewotICAgICAgICAgICAgbm9kZS5zZXRDYW5FeGl0KHRydWUpOwotICAgICAgICAgICAgZm9y
Tm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoKFNwZWNDZWxsICYgflNwZWNTdHJpbmcpIHwgU3Bl
Y090aGVyKTsKLSAgICAgICAgfSBlbHNlIGlmIChjaGlsZC5zaG91bGRTcGVjdWxhdGVJbnRlZ2Vy
KCkpCisgICAgICAgIGVsc2UgaWYgKGNoaWxkLT5zaG91bGRTcGVjdWxhdGVOb25TdHJpbmdDZWxs
T3JPdGhlcigpKSB7CisgICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOworICAgICAg
ICAgICAgZm9yTm9kZShjaGlsZCkuZmlsdGVyKChTcGVjQ2VsbCAmIH5TcGVjU3RyaW5nKSB8IFNw
ZWNPdGhlcik7CisgICAgICAgIH0gZWxzZSBpZiAoY2hpbGQtPnNob3VsZFNwZWN1bGF0ZUludGVn
ZXIoKSkKICAgICAgICAgICAgIHNwZWN1bGF0ZUludDMyVW5hcnkobm9kZSk7Ci0gICAgICAgIGVs
c2UgaWYgKGNoaWxkLnNob3VsZFNwZWN1bGF0ZU51bWJlcigpKQorICAgICAgICBlbHNlIGlmIChj
aGlsZC0+c2hvdWxkU3BlY3VsYXRlTnVtYmVyKCkpCiAgICAgICAgICAgICBzcGVjdWxhdGVOdW1i
ZXJVbmFyeShub2RlKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgbm9kZS5zZXRDYW5FeGl0
KGZhbHNlKTsKKyAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICBt
X2JyYW5jaERpcmVjdGlvbiA9IFRha2VCb3RoOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAg
ICAgICAgICAKICAgICBjYXNlIFJldHVybjoKICAgICAgICAgbV9pc1ZhbGlkID0gZmFsc2U7Ci0g
ICAgICAgIG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7CisgICAgICAgIG5vZGUtPnNldENhbkV4aXQo
ZmFsc2UpOwogICAgICAgICBicmVhazsKICAgICAgICAgCiAgICAgY2FzZSBUaHJvdzoKICAgICBj
YXNlIFRocm93UmVmZXJlbmNlRXJyb3I6CiAgICAgICAgIG1faXNWYWxpZCA9IGZhbHNlOwotICAg
ICAgICBub2RlLnNldENhbkV4aXQodHJ1ZSk7CisgICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1
ZSk7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAgY2FzZSBUb1ByaW1pdGl2ZTog
ewotICAgICAgICBKU1ZhbHVlIGNoaWxkQ29uc3QgPSBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLnZh
bHVlKCk7Ci0gICAgICAgIGlmIChjaGlsZENvbnN0ICYmIGNoaWxkQ29uc3QuaXNOdW1iZXIoKSAm
JiB0cnlTZXRDb25zdGFudChub2RlSW5kZXgsIGNoaWxkQ29uc3QpKSB7CisgICAgICAgIE5vZGUq
IGNoaWxkID0gbm9kZS0+Y2hpbGQxKCkubm9kZSgpOworICAgICAgICAKKyAgICAgICAgSlNWYWx1
ZSBjaGlsZENvbnN0ID0gZm9yTm9kZShjaGlsZCkudmFsdWUoKTsKKyAgICAgICAgaWYgKGNoaWxk
Q29uc3QgJiYgY2hpbGRDb25zdC5pc051bWJlcigpICYmIHRyeVNldENvbnN0YW50KG5vZGUsIGNo
aWxkQ29uc3QpKSB7CiAgICAgICAgICAgICBtX2ZvdW5kQ29uc3RhbnRzID0gdHJ1ZTsKLSAgICAg
ICAgICAgIG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7CisgICAgICAgICAgICBub2RlLT5zZXRDYW5F
eGl0KGZhbHNlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIAotICAg
ICAgICBOb2RlJiBjaGlsZCA9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV07Ci0gICAgICAgIGlmIChj
aGlsZC5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpIHsKKyAgICAgICAgaWYgKGNoaWxkLT5zaG91
bGRTcGVjdWxhdGVJbnRlZ2VyKCkpIHsKICAgICAgICAgICAgIHNwZWN1bGF0ZUludDMyVW5hcnko
bm9kZSk7Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFNwZWNJbnQzMik7Cisg
ICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjSW50MzIpOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIH0KIAotICAgICAgICBBYnN0cmFjdFZhbHVlJiBzb3VyY2UgPSBmb3JOb2Rl
KG5vZGUuY2hpbGQxKCkpOwotICAgICAgICBBYnN0cmFjdFZhbHVlJiBkZXN0aW5hdGlvbiA9IGZv
ck5vZGUobm9kZUluZGV4KTsKLSAgICAgICAgICAgIAorICAgICAgICBBYnN0cmFjdFZhbHVlJiBz
b3VyY2UgPSBmb3JOb2RlKGNoaWxkKTsKKyAgICAgICAgQWJzdHJhY3RWYWx1ZSYgZGVzdGluYXRp
b24gPSBmb3JOb2RlKG5vZGUpOworICAgICAgICAKKyAgICAgICAgLy8gTkIuIFRoZSBtb3JlIGNh
bm9uaWNhbCB3YXkgb2Ygd3JpdGluZyB0aGlzIHdvdWxkIGhhdmUgYmVlbjoKKyAgICAgICAgLy8K
KyAgICAgICAgLy8gZGVzdGluYXRpb24gPSBzb3VyY2U7CisgICAgICAgIC8vIGlmIChkZXN0aW5h
dGlvbi5tX3R5cGUgJiAhKFNwZWNOdW1iZXIgfCBTcGVjU3RyaW5nIHwgU3BlY0Jvb2xlYW4pKSB7
CisgICAgICAgIC8vICAgICBkZXN0aW5hdGlvbi5maWx0ZXIoU3BlY051bWJlciB8IFNwZWNTdHJp
bmcgfCBTcGVjQm9vbGVhbik7CisgICAgICAgIC8vICAgICBBYnN0cmFjdFZhbHVlIHN0cmluZzsK
KyAgICAgICAgLy8gICAgIHN0cmluZy5zZXQoZ2xvYmFsRGF0YS0+c3RyaW5nU3RydWN0dXJlKTsK
KyAgICAgICAgLy8gICAgIGRlc3RpbmF0aW9uLm1lcmdlKHN0cmluZyk7CisgICAgICAgIC8vIH0K
KyAgICAgICAgLy8KKyAgICAgICAgLy8gVGhlIHJlYXNvbiB3aHkgdGhpcyB3b3VsZCwgaW4gbW9z
dCBvdGhlciBjYXNlcywgaGF2ZSBiZWVuIGJldHRlciBpcyB0aGF0CisgICAgICAgIC8vIHRoZW4g
ZGVzdGluYXRpb24gd291bGQgcHJlc2VydmUgYW55IG5vbi1TcGVjdWxhdGVkVHlwZSBrbm93bGVk
Z2Ugb2Ygc291cmNlLgorICAgICAgICAvLyBBcyBpdCBzdGFuZHMsIHRoZSBjb2RlIGJlbG93IGZv
cmdldHMgYW55IG5vbi1TcGVjdWxhdGVkVHlwZSBrbm93bGVkZ2UgdGhhdAorICAgICAgICAvLyBz
b3VyY2Ugd291bGQgaGF2ZSBoYWQuIEZvcnR1bmF0ZWx5LCB0aG91Z2gsIGZvciB0aGluZ3MgbGlr
ZSBzdHJpbmdzIGFuZAorICAgICAgICAvLyBudW1iZXJzIGFuZCBib29sZWFucywgd2UgZG9uJ3Qg
Y2FyZSBhYm91dCB0aGUgbm9uLVNwZWN1bGF0ZWRUeXBlIGtub3dlZGdlOgorICAgICAgICAvLyB0
aGUgc3RydWN0dXJlIHdvbid0IHRlbGwgdXMgYW55dGhpbmcgd2UgZG9uJ3QgYWxyZWFkeSBrbm93
LCBhbmQgbmVpdGhlcgorICAgICAgICAvLyB3aWxsIEFycmF5TW9kZXMuIEFuZCBpZiB0aGUgc291
cmNlIHdhcyBhIG1lYW5pbmdmdWwgY29uc3RhbnQgdGhlbiB3ZQorICAgICAgICAvLyB3b3VsZCBo
YXZlIGhhbmRsZWQgdGhhdCBhYm92ZS4gVW5mb3J0dW5hdGVseSwgdGhpcyBkb2VzIG1lYW4gdGhh
dAorICAgICAgICAvLyBUb1ByaW1pdGl2ZSB3aWxsIGN1cnJlbnRseSBmb3JnZXQgc3RyaW5nIGNv
bnN0YW50cy4gQnV0IHRoYXQncyBub3QgYSBiaWcKKyAgICAgICAgLy8gZGVhbCBzaW5jZSB3ZSBk
b24ndCBkbyBhbnkgb3B0aW1pemF0aW9uIG9uIHRob3NlIGN1cnJlbnRseS4KKyAgICAgICAgCiAg
ICAgICAgIFNwZWN1bGF0ZWRUeXBlIHR5cGUgPSBzb3VyY2UubV90eXBlOwogICAgICAgICBpZiAo
dHlwZSAmIH4oU3BlY051bWJlciB8IFNwZWNTdHJpbmcgfCBTcGVjQm9vbGVhbikpIHsKICAgICAg
ICAgICAgIHR5cGUgJj0gKFNwZWNOdW1iZXIgfCBTcGVjU3RyaW5nIHwgU3BlY0Jvb2xlYW4pOwog
ICAgICAgICAgICAgdHlwZSB8PSBTcGVjU3RyaW5nOwogICAgICAgICB9CiAgICAgICAgIGRlc3Rp
bmF0aW9uLnNldCh0eXBlKTsKLSAgICAgICAgbm9kZS5zZXRDYW5FeGl0KGZhbHNlKTsKKyAgICAg
ICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAg
ICAgICAgIAogICAgIGNhc2UgU3RyQ2F0OgotICAgICAgICBub2RlLnNldENhbkV4aXQoZmFsc2Up
OwotICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFNwZWNTdHJpbmcpOworICAgICAgICBu
b2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKKyAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY1N0
cmluZyk7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAgY2FzZSBOZXdBcnJheToK
LSAgICAgICAgbm9kZS5zZXRDYW5FeGl0KHRydWUpOwotICAgICAgICBmb3JOb2RlKG5vZGVJbmRl
eCkuc2V0KG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUuY29kZU9yaWdpbiktPmFycmF5U3Ry
dWN0dXJlRm9ySW5kZXhpbmdUeXBlRHVyaW5nQWxsb2NhdGlvbihub2RlLmluZGV4aW5nVHlwZSgp
KSk7CisgICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7CisgICAgICAgIGZvck5vZGUobm9k
ZUluZGV4KS5zZXQobV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+Y29kZU9yaWdpbiktPmFy
cmF5U3RydWN0dXJlRm9ySW5kZXhpbmdUeXBlRHVyaW5nQWxsb2NhdGlvbihub2RlLT5pbmRleGlu
Z1R5cGUoKSkpOwogICAgICAgICBtX2hhdmVTdHJ1Y3R1cmVzID0gdHJ1ZTsKICAgICAgICAgYnJl
YWs7CiAgICAgICAgIAogICAgIGNhc2UgTmV3QXJyYXlCdWZmZXI6Ci0gICAgICAgIG5vZGUuc2V0
Q2FuRXhpdCh0cnVlKTsKLSAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChtX2dyYXBoLmds
b2JhbE9iamVjdEZvcihub2RlLmNvZGVPcmlnaW4pLT5hcnJheVN0cnVjdHVyZUZvckluZGV4aW5n
VHlwZUR1cmluZ0FsbG9jYXRpb24obm9kZS5pbmRleGluZ1R5cGUoKSkpOworICAgICAgICBub2Rl
LT5zZXRDYW5FeGl0KHRydWUpOworICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChtX2dyYXBoLmds
b2JhbE9iamVjdEZvcihub2RlLT5jb2RlT3JpZ2luKS0+YXJyYXlTdHJ1Y3R1cmVGb3JJbmRleGlu
Z1R5cGVEdXJpbmdBbGxvY2F0aW9uKG5vZGUtPmluZGV4aW5nVHlwZSgpKSk7CiAgICAgICAgIG1f
aGF2ZVN0cnVjdHVyZXMgPSB0cnVlOwogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgTmV3QXJy
YXlXaXRoU2l6ZToKLSAgICAgICAgbm9kZS5zZXRDYW5FeGl0KHRydWUpOwotICAgICAgICBmb3JO
b2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjSW50MzIpOwotICAgICAgICBmb3JOb2RlKG5v
ZGVJbmRleCkuc2V0KFNwZWNBcnJheSk7CisgICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7
CisgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRlcihTcGVjSW50MzIpOworICAg
ICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjQXJyYXkpOwogICAgICAgICBtX2hhdmVTdHJ1Y3R1
cmVzID0gdHJ1ZTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICBjYXNlIE5ld1Jl
Z2V4cDoKLSAgICAgICAgbm9kZS5zZXRDYW5FeGl0KGZhbHNlKTsKLSAgICAgICAgZm9yTm9kZShu
b2RlSW5kZXgpLnNldChtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLmNvZGVPcmlnaW4pLT5y
ZWdFeHBTdHJ1Y3R1cmUoKSk7CisgICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOworICAg
ICAgICBmb3JOb2RlKG5vZGUpLnNldChtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5jb2Rl
T3JpZ2luKS0+cmVnRXhwU3RydWN0dXJlKCkpOwogICAgICAgICBtX2hhdmVTdHJ1Y3R1cmVzID0g
dHJ1ZTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICBjYXNlIENvbnZlcnRUaGlz
OiB7Ci0gICAgICAgIE5vZGUmIGNoaWxkID0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXTsKLSAgICAg
ICAgQWJzdHJhY3RWYWx1ZSYgc291cmNlID0gZm9yTm9kZShub2RlLmNoaWxkMSgpKTsKLSAgICAg
ICAgQWJzdHJhY3RWYWx1ZSYgZGVzdGluYXRpb24gPSBmb3JOb2RlKG5vZGVJbmRleCk7CisgICAg
ICAgIE5vZGUqIGNoaWxkID0gbm9kZS0+Y2hpbGQxKCkubm9kZSgpOworICAgICAgICBBYnN0cmFj
dFZhbHVlJiBzb3VyY2UgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgQWJzdHJh
Y3RWYWx1ZSYgZGVzdGluYXRpb24gPSBmb3JOb2RlKG5vZGUpOwogICAgICAgICAgICAgCiAgICAg
ICAgIGlmIChpc09iamVjdFNwZWN1bGF0aW9uKHNvdXJjZS5tX3R5cGUpKSB7CiAgICAgICAgICAg
ICAvLyBUaGlzIGlzIHRoZSBzaW1wbGUgY2FzZS4gV2UgYWxyZWFkeSBrbm93IHRoYXQgdGhlIHNv
dXJjZSBpcyBhbgogICAgICAgICAgICAgLy8gb2JqZWN0LCBzbyB0aGVyZSdzIG5vdGhpbmcgdG8g
ZG8uIEkgZG9uJ3QgdGhpbmsgdGhpcyBjYXNlIHdpbGwKICAgICAgICAgICAgIC8vIGJlIGhpdCwg
YnV0IHRoZW4gYWdhaW4sIHlvdSBuZXZlciBrbm93LgogICAgICAgICAgICAgZGVzdGluYXRpb24g
PSBzb3VyY2U7Ci0gICAgICAgICAgICBub2RlLnNldENhbkV4aXQoZmFsc2UpOworICAgICAgICAg
ICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgICAgICBtX2ZvdW5kQ29uc3RhbnRz
ID0gdHJ1ZTsgLy8gVGVsbCB0aGUgY29uc3RhbnQgZm9sZGVyIHRvIHR1cm4gdGhpcyBpbnRvIElk
ZW50aXR5LgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAg
IG5vZGUuc2V0Q2FuRXhpdCh0cnVlKTsKKyAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsK
ICAgICAgICAgCi0gICAgICAgIGlmIChpc090aGVyU3BlY3VsYXRpb24oY2hpbGQucHJlZGljdGlv
bigpKSkgeworICAgICAgICBpZiAoaXNPdGhlclNwZWN1bGF0aW9uKGNoaWxkLT5wcmVkaWN0aW9u
KCkpKSB7CiAgICAgICAgICAgICBzb3VyY2UuZmlsdGVyKFNwZWNPdGhlcik7CiAgICAgICAgICAg
ICBkZXN0aW5hdGlvbi5zZXQoU3BlY09iamVjdE90aGVyKTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBpZiAoaXNPYmplY3RTcGVjdWxhdGlvbihjaGls
ZC5wcmVkaWN0aW9uKCkpKSB7CisgICAgICAgIGlmIChpc09iamVjdFNwZWN1bGF0aW9uKGNoaWxk
LT5wcmVkaWN0aW9uKCkpKSB7CiAgICAgICAgICAgICBzb3VyY2UuZmlsdGVyKFNwZWNPYmplY3RN
YXNrKTsKICAgICAgICAgICAgIGRlc3RpbmF0aW9uID0gc291cmNlOwogICAgICAgICAgICAgYnJl
YWs7CkBAIC0xMzM0LDEwICsxMzUzLDEwIEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1
bnNpZ25lZCBpbmQKICAgICB9CiAKICAgICBjYXNlIENyZWF0ZVRoaXM6IHsKLSAgICAgICAgQWJz
dHJhY3RWYWx1ZSYgc291cmNlID0gZm9yTm9kZShub2RlLmNoaWxkMSgpKTsKLSAgICAgICAgQWJz
dHJhY3RWYWx1ZSYgZGVzdGluYXRpb24gPSBmb3JOb2RlKG5vZGVJbmRleCk7CisgICAgICAgIEFi
c3RyYWN0VmFsdWUmIHNvdXJjZSA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBB
YnN0cmFjdFZhbHVlJiBkZXN0aW5hdGlvbiA9IGZvck5vZGUobm9kZSk7CiAgICAgICAgIAotICAg
ICAgICBub2RlLnNldENhbkV4aXQoIWlzQ2VsbFNwZWN1bGF0aW9uKHNvdXJjZS5tX3R5cGUpKTsK
KyAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCghaXNDZWxsU3BlY3VsYXRpb24oc291cmNlLm1fdHlw
ZSkpOwogICAgICAgICAgICAgCiAgICAgICAgIHNvdXJjZS5maWx0ZXIoU3BlY0Z1bmN0aW9uKTsK
ICAgICAgICAgZGVzdGluYXRpb24uc2V0KFNwZWNGaW5hbE9iamVjdCk7CkBAIC0xMzQ1LDQxICsx
MzY0LDQxIEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICB9
CiAgICAgICAgIAogICAgIGNhc2UgSW5oZXJpdG9ySURXYXRjaHBvaW50OgotICAgICAgICBub2Rl
LnNldENhbkV4aXQodHJ1ZSk7CisgICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7CiAgICAg
ICAgIGJyZWFrOwogCiAgICAgY2FzZSBOZXdPYmplY3Q6Ci0gICAgICAgIG5vZGUuc2V0Q2FuRXhp
dChmYWxzZSk7Ci0gICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQobm9kZS5zdHJ1Y3R1cmUo
KSk7CisgICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOworICAgICAgICBmb3JOb2RlKG5v
ZGUpLnNldChub2RlLT5zdHJ1Y3R1cmUoKSk7CiAgICAgICAgIG1faGF2ZVN0cnVjdHVyZXMgPSB0
cnVlOwogICAgICAgICBicmVhazsKICAgICAgICAgCiAgICAgY2FzZSBDcmVhdGVBY3RpdmF0aW9u
OgotICAgICAgICBub2RlLnNldENhbkV4aXQoZmFsc2UpOwotICAgICAgICBmb3JOb2RlKG5vZGVJ
bmRleCkuc2V0KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3RGb3Iobm9kZS5jb2RlT3JpZ2luKS0+
YWN0aXZhdGlvblN0cnVjdHVyZSgpKTsKKyAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7
CisgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3RGb3Io
bm9kZS0+Y29kZU9yaWdpbiktPmFjdGl2YXRpb25TdHJ1Y3R1cmUoKSk7CiAgICAgICAgIG1faGF2
ZVN0cnVjdHVyZXMgPSB0cnVlOwogICAgICAgICBicmVhazsKICAgICAgICAgCiAgICAgY2FzZSBD
cmVhdGVBcmd1bWVudHM6Ci0gICAgICAgIG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7Ci0gICAgICAg
IGZvck5vZGUobm9kZUluZGV4KS5zZXQobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdEZvcihub2Rl
LmNvZGVPcmlnaW4pLT5hcmd1bWVudHNTdHJ1Y3R1cmUoKSk7CisgICAgICAgIG5vZGUtPnNldENh
bkV4aXQoZmFsc2UpOworICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0Rm9yKG5vZGUtPmNvZGVPcmlnaW4pLT5hcmd1bWVudHNTdHJ1Y3R1cmUoKSk7CiAg
ICAgICAgIG1faGF2ZVN0cnVjdHVyZXMgPSB0cnVlOwogICAgICAgICBicmVhazsKICAgICAgICAg
CiAgICAgY2FzZSBUZWFyT2ZmQWN0aXZhdGlvbjoKICAgICBjYXNlIFRlYXJPZmZBcmd1bWVudHM6
Ci0gICAgICAgIG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7CisgICAgICAgIG5vZGUtPnNldENhbkV4
aXQoZmFsc2UpOwogICAgICAgICAvLyBEb2VzIG5vdGhpbmcgdGhhdCBpcyB1c2VyLXZpc2libGUu
CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBDaGVja0FyZ3VtZW50c05vdENyZWF0ZWQ6CiAg
ICAgICAgIGlmIChpc0VtcHR5U3BlY3VsYXRpb24oCiAgICAgICAgICAgICAgICAgbV92YXJpYWJs
ZXMub3BlcmFuZCgKLSAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5hcmd1bWVudHNSZWdpc3Rl
ckZvcihub2RlLmNvZGVPcmlnaW4pKS5tX3R5cGUpKSB7Ci0gICAgICAgICAgICBub2RlLnNldENh
bkV4aXQoZmFsc2UpOworICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLmFyZ3VtZW50c1JlZ2lz
dGVyRm9yKG5vZGUtPmNvZGVPcmlnaW4pKS5tX3R5cGUpKSB7CisgICAgICAgICAgICBub2RlLT5z
ZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgICAgIG1fZm91bmRDb25zdGFudHMgPSB0cnVlOwog
ICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIG5vZGUuc2V0Q2FuRXhpdCh0cnVlKTsKKyAgICAg
ICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAK
ICAgICBjYXNlIEdldE15QXJndW1lbnRzTGVuZ3RoOgpAQCAtMTM4NywxMTEgKzE0MDYsMTExIEBA
IGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgLy8gdGhl
IGFyZ3VtZW50cyBhIGJpdC4gTm90ZSB0aGF0IHRoaXMgaXMgbm90IHN1ZmZpY2llbnQgdG8gZm9y
Y2UgY29uc3RhbnQgZm9sZGluZwogICAgICAgICAvLyBvZiBHZXRNeUFyZ3VtZW50c0xlbmd0aCwg
YmVjYXVzZSBHZXRNeUFyZ3VtZW50c0xlbmd0aCBpcyBhIGNsb2JiZXJpbmcgb3BlcmF0aW9uLgog
ICAgICAgICAvLyBXZSBwZXJmb3JtIGZ1cnRoZXIgb3B0aW1pemF0aW9ucyBvbiB0aGlzIGxhdGVy
IG9uLgotICAgICAgICBpZiAobm9kZS5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSkKLSAgICAg
ICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoanNOdW1iZXIobm9kZS5jb2RlT3JpZ2luLmlu
bGluZUNhbGxGcmFtZS0+YXJndW1lbnRzLnNpemUoKSAtIDEpKTsKKyAgICAgICAgaWYgKG5vZGUt
PmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKQorICAgICAgICAgICAgZm9yTm9kZShub2RlKS5z
ZXQoanNOdW1iZXIobm9kZS0+Y29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50cy5z
aXplKCkgLSAxKSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4
KS5zZXQoU3BlY0ludDMyKTsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNJbnQz
Mik7CiAgICAgICAgIG5vZGUuc2V0Q2FuRXhpdCgKICAgICAgICAgICAgICFpc0VtcHR5U3BlY3Vs
YXRpb24oCiAgICAgICAgICAgICAgICAgbV92YXJpYWJsZXMub3BlcmFuZCgKLSAgICAgICAgICAg
ICAgICAgICAgbV9ncmFwaC5hcmd1bWVudHNSZWdpc3RlckZvcihub2RlLmNvZGVPcmlnaW4pKS5t
X3R5cGUpKTsKKyAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5hcmd1bWVudHNSZWdpc3RlckZv
cihub2RlLT5jb2RlT3JpZ2luKSkubV90eXBlKSk7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAK
ICAgICBjYXNlIEdldE15QXJndW1lbnRzTGVuZ3RoU2FmZToKLSAgICAgICAgbm9kZS5zZXRDYW5F
eGl0KGZhbHNlKTsKKyAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgIC8v
IFRoaXMgcG90ZW50aWFsbHkgY2xvYmJlcnMgYWxsIHN0cnVjdHVyZXMgaWYgdGhlIGFyZ3VtZW50
cyBvYmplY3QgaGFkIGEgZ2V0dGVyCiAgICAgICAgIC8vIGluc3RhbGxlZCBvbiB0aGUgbGVuZ3Ro
IHByb3BlcnR5LgotICAgICAgICBjbG9iYmVyV29ybGQobm9kZS5jb2RlT3JpZ2luLCBpbmRleElu
QmxvY2spOworICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+Y29kZU9yaWdpbiwgaW5kZXhJbkJs
b2NrKTsKICAgICAgICAgLy8gV2UgY3VycmVudGx5IG1ha2Ugbm8gZ3VhcmFudGVlIGFib3V0IHdo
YXQgdGhpcyByZXR1cm5zIGJlY2F1c2UgaXQgZG9lcyBub3QKICAgICAgICAgLy8gc3BlY3VsYXRl
IHRoYXQgdGhlIGxlbmd0aCBwcm9wZXJ0eSBpcyBhY3R1YWxseSBhIGxlbmd0aC4KLSAgICAgICAg
Zm9yTm9kZShub2RlSW5kZXgpLm1ha2VUb3AoKTsKKyAgICAgICAgZm9yTm9kZShub2RlKS5tYWtl
VG9wKCk7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAKICAgICBjYXNlIEdldE15QXJndW1lbnRC
eVZhbDoKLSAgICAgICAgbm9kZS5zZXRDYW5FeGl0KHRydWUpOworICAgICAgICBub2RlLT5zZXRD
YW5FeGl0KHRydWUpOwogICAgICAgICAvLyBXZSBrbm93IHRoYXQgdGhpcyBleGVjdXRhYmxlIGRv
ZXMgbm90IGVzY2FwZSBpdHMgYXJndW1lbnRzLCBzbyB3ZSBjYW4gb3B0aW1pemUKICAgICAgICAg
Ly8gdGhlIGFyZ3VtZW50cyBhIGJpdC4gTm90ZSB0aGF0IHRoaXMgZW5kcyB1cCBiZWluZyBmdXJ0
aGVyIG9wdGltaXplZCBieSB0aGUKICAgICAgICAgLy8gQXJndW1lbnRzU2ltcGxpZmljYXRpb25Q
aGFzZS4KLSAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY0ludDMyKTsK
LSAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLm1ha2VUb3AoKTsKKyAgICAgICAgZm9yTm9kZShu
b2RlLT5jaGlsZDEoKSkuZmlsdGVyKFNwZWNJbnQzMik7CisgICAgICAgIGZvck5vZGUobm9kZSku
bWFrZVRvcCgpOwogICAgICAgICBicmVhazsKICAgICAgICAgCiAgICAgY2FzZSBHZXRNeUFyZ3Vt
ZW50QnlWYWxTYWZlOgotICAgICAgICBub2RlLnNldENhbkV4aXQodHJ1ZSk7CisgICAgICAgIG5v
ZGUtPnNldENhbkV4aXQodHJ1ZSk7CiAgICAgICAgIC8vIFRoaXMgcG90ZW50aWFsbHkgY2xvYmJl
cnMgYWxsIHN0cnVjdHVyZXMgaWYgdGhlIHByb3BlcnR5IHdlJ3JlIGFjY2Vzc2luZyBoYXMKICAg
ICAgICAgLy8gYSBnZXR0ZXIuIFdlIGRvbid0IHNwZWN1bGF0ZSBhZ2FpbnN0IHRoaXMuCi0gICAg
ICAgIGNsb2JiZXJXb3JsZChub2RlLmNvZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7CisgICAgICAg
IGNsb2JiZXJXb3JsZChub2RlLT5jb2RlT3JpZ2luLCBpbmRleEluQmxvY2spOwogICAgICAgICAv
LyBCdXQgd2UgZG8gc3BlY3VsYXRlIHRoYXQgdGhlIGluZGV4IGlzIGFuIGludGVnZXIuCi0gICAg
ICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNJbnQzMik7CisgICAgICAgIGZv
ck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRlcihTcGVjSW50MzIpOwogICAgICAgICAvLyBBbmQg
dGhlIHJlc3VsdCBpcyB1bmtub3duLgotICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkubWFrZVRv
cCgpOworICAgICAgICBmb3JOb2RlKG5vZGUpLm1ha2VUb3AoKTsKICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIAogICAgIGNhc2UgTmV3RnVuY3Rpb246CiAgICAgY2FzZSBOZXdGdW5jdGlvbkV4cHJl
c3Npb246CiAgICAgY2FzZSBOZXdGdW5jdGlvbk5vQ2hlY2s6Ci0gICAgICAgIG5vZGUuc2V0Q2Fu
RXhpdChmYWxzZSk7Ci0gICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdEZvcihub2RlLmNvZGVPcmlnaW4pLT5mdW5jdGlvblN0cnVjdHVyZSgpKTsK
KyAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CisgICAgICAgIGZvck5vZGUobm9kZSku
c2V0KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3RGb3Iobm9kZS0+Y29kZU9yaWdpbiktPmZ1bmN0
aW9uU3RydWN0dXJlKCkpOwogICAgICAgICBicmVhazsKICAgICAgICAgCiAgICAgY2FzZSBHZXRD
YWxsZWU6Ci0gICAgICAgIG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7Ci0gICAgICAgIGZvck5vZGUo
bm9kZUluZGV4KS5zZXQoU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChm
YWxzZSk7CisgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNGdW5jdGlvbik7CiAgICAgICAg
IGJyZWFrOwogICAgICAgICAKICAgICBjYXNlIFNldENhbGxlZToKICAgICBjYXNlIFNldE15U2Nv
cGU6Ci0gICAgICAgIG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7CisgICAgICAgIG5vZGUtPnNldENh
bkV4aXQoZmFsc2UpOwogICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgIGNhc2UgR2V0
U2NvcGU6IC8vIEZJWE1FOiBXZSBjb3VsZCBnZXQgcmlkIG9mIHRoZXNlIGlmIHdlIGtub3cgdGhh
dCB0aGUgSlNGdW5jdGlvbiBpcyBhIGNvbnN0YW50LiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTA2MjAyCiAgICAgY2FzZSBHZXRNeVNjb3BlOgogICAgIGNhc2UgU2tp
cFRvcFNjb3BlOgotICAgICAgICBub2RlLnNldENhbkV4aXQoZmFsc2UpOwotICAgICAgICBmb3JO
b2RlKG5vZGVJbmRleCkuc2V0KFNwZWNDZWxsT3RoZXIpOworICAgICAgICBub2RlLT5zZXRDYW5F
eGl0KGZhbHNlKTsKKyAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0NlbGxPdGhlcik7CiAg
ICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBTa2lwU2NvcGU6IHsKLSAgICAgICAgbm9kZS5zZXRD
YW5FeGl0KGZhbHNlKTsKLSAgICAgICAgSlNWYWx1ZSBjaGlsZCA9IGZvck5vZGUobm9kZS5jaGls
ZDEoKSkudmFsdWUoKTsKLSAgICAgICAgaWYgKGNoaWxkICYmIHRyeVNldENvbnN0YW50KG5vZGVJ
bmRleCwgSlNWYWx1ZShqc0Nhc3Q8SlNTY29wZSo+KGNoaWxkLmFzQ2VsbCgpKS0+bmV4dCgpKSkp
IHsKKyAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CisgICAgICAgIEpTVmFsdWUgY2hp
bGQgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS52YWx1ZSgpOworICAgICAgICBpZiAoY2hpbGQg
JiYgdHJ5U2V0Q29uc3RhbnQobm9kZSwgSlNWYWx1ZShqc0Nhc3Q8SlNTY29wZSo+KGNoaWxkLmFz
Q2VsbCgpKS0+bmV4dCgpKSkpIHsKICAgICAgICAgICAgIG1fZm91bmRDb25zdGFudHMgPSB0cnVl
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgZm9yTm9kZShub2RlSW5k
ZXgpLnNldChTcGVjQ2VsbE90aGVyKTsKKyAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0Nl
bGxPdGhlcik7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIAogICAgIGNhc2UgR2V0U2NvcGVSZWdp
c3RlcnM6Ci0gICAgICAgIG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7Ci0gICAgICAgIGZvck5vZGUo
bm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNDZWxsKTsKLSAgICAgICAgZm9yTm9kZShub2RlSW5k
ZXgpLmNsZWFyKCk7IC8vIFRoZSByZXN1bHQgaXMgbm90IGEgSlMgdmFsdWUuCisgICAgICAgIG5v
ZGUtPnNldENhbkV4aXQoZmFsc2UpOworICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5m
aWx0ZXIoU3BlY0NlbGwpOworICAgICAgICBmb3JOb2RlKG5vZGUpLmNsZWFyKCk7IC8vIFRoZSBy
ZXN1bHQgaXMgbm90IGEgSlMgdmFsdWUuCiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBHZXRT
Y29wZWRWYXI6Ci0gICAgICAgIG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7Ci0gICAgICAgIGZvck5v
ZGUobm9kZUluZGV4KS5tYWtlVG9wKCk7CisgICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2Up
OworICAgICAgICBmb3JOb2RlKG5vZGUpLm1ha2VUb3AoKTsKICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICAKICAgICBjYXNlIFB1dFNjb3BlZFZhcjoKLSAgICAgICAgbm9kZS5zZXRDYW5FeGl0
KGZhbHNlKTsKLSAgICAgICAgY2xvYmJlckNhcHR1cmVkVmFycyhub2RlLmNvZGVPcmlnaW4pOwor
ICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKKyAgICAgICAgY2xvYmJlckNhcHR1cmVk
VmFycyhub2RlLT5jb2RlT3JpZ2luKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAg
ICBjYXNlIEdldEJ5SWQ6CiAgICAgY2FzZSBHZXRCeUlkRmx1c2g6Ci0gICAgICAgIG5vZGUuc2V0
Q2FuRXhpdCh0cnVlKTsKLSAgICAgICAgaWYgKCFub2RlLnByZWRpY3Rpb24oKSkgeworICAgICAg
ICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOworICAgICAgICBpZiAoIW5vZGUtPnByZWRpY3Rpb24o
KSkgewogICAgICAgICAgICAgbV9pc1ZhbGlkID0gZmFsc2U7CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgfQotICAgICAgICBpZiAoaXNDZWxsU3BlY3VsYXRpb24obV9ncmFwaFtub2RlLmNo
aWxkMSgpXS5wcmVkaWN0aW9uKCkpKSB7Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQx
KCkpLmZpbHRlcihTcGVjQ2VsbCk7CisgICAgICAgIGlmIChpc0NlbGxTcGVjdWxhdGlvbihub2Rl
LT5jaGlsZDEoKS0+cHJlZGljdGlvbigpKSkgeworICAgICAgICAgICAgZm9yTm9kZShub2RlLT5j
aGlsZDEoKSkuZmlsdGVyKFNwZWNDZWxsKTsKIAotICAgICAgICAgICAgaWYgKFN0cnVjdHVyZSog
c3RydWN0dXJlID0gZm9yTm9kZShub2RlLmNoaWxkMSgpKS5iZXN0UHJvdmVuU3RydWN0dXJlKCkp
IHsKKyAgICAgICAgICAgIGlmIChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGZvck5vZGUobm9kZS0+
Y2hpbGQxKCkpLmJlc3RQcm92ZW5TdHJ1Y3R1cmUoKSkgewogICAgICAgICAgICAgICAgIEdldEJ5
SWRTdGF0dXMgc3RhdHVzID0gR2V0QnlJZFN0YXR1czo6Y29tcHV0ZUZvcigKICAgICAgICAgICAg
ICAgICAgICAgbV9ncmFwaC5tX2dsb2JhbERhdGEsIHN0cnVjdHVyZSwKLSAgICAgICAgICAgICAg
ICAgICAgbV9ncmFwaC5tX2NvZGVCbG9jay0+aWRlbnRpZmllcihub2RlLmlkZW50aWZpZXJOdW1i
ZXIoKSkpOworICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLm1fY29kZUJsb2NrLT5pZGVudGlm
aWVyKG5vZGUtPmlkZW50aWZpZXJOdW1iZXIoKSkpOwogICAgICAgICAgICAgICAgIGlmIChzdGF0
dXMuaXNTaW1wbGUoKSkgewogICAgICAgICAgICAgICAgICAgICAvLyBBc3NlcnQgdGhpbmdzIHRo
YXQgd2UgY2FuJ3QgaGFuZGxlIGFuZCB0aGF0IHRoZSBjb21wdXRlRm9yKCkgbWV0aG9kCiAgICAg
ICAgICAgICAgICAgICAgIC8vIGFib3ZlIHdvbid0IGJlIGFibGUgdG8gcmV0dXJuLgpAQCAtMTQ5
OSwyMyArMTUxOCwyMyBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5k
CiAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChzdGF0dXMuY2hhaW4oKS5pc0VtcHR5KCkpOwog
ICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXR1cy5zcGVj
aWZpY1ZhbHVlKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCku
c2V0KHN0YXR1cy5zcGVjaWZpY1ZhbHVlKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgZm9y
Tm9kZShub2RlKS5zZXQoc3RhdHVzLnNwZWNpZmljVmFsdWUoKSk7CiAgICAgICAgICAgICAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5tYWtl
VG9wKCk7Ci0gICAgICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVy
KHN0YXR1cy5zdHJ1Y3R1cmVTZXQoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBmb3JOb2Rl
KG5vZGUpLm1ha2VUb3AoKTsKKyAgICAgICAgICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGls
ZDEoKSkuZmlsdGVyKHN0YXR1cy5zdHJ1Y3R1cmVTZXQoKSk7CiAgICAgICAgICAgICAgICAgICAg
IAogICAgICAgICAgICAgICAgICAgICBtX2ZvdW5kQ29uc3RhbnRzID0gdHJ1ZTsKICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAg
ICAgICB9Ci0gICAgICAgIGNsb2JiZXJXb3JsZChub2RlLmNvZGVPcmlnaW4sIGluZGV4SW5CbG9j
ayk7Ci0gICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5tYWtlVG9wKCk7CisgICAgICAgIGNsb2Ji
ZXJXb3JsZChub2RlLT5jb2RlT3JpZ2luLCBpbmRleEluQmxvY2spOworICAgICAgICBmb3JOb2Rl
KG5vZGUpLm1ha2VUb3AoKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICBjYXNl
IEdldEFycmF5TGVuZ3RoOgotICAgICAgICBub2RlLnNldENhbkV4aXQodHJ1ZSk7IC8vIExpZXMs
IGJ1dCBpdCdzIHRydWUgZm9yIHRoZSBjb21tb24gY2FzZSBvZiBKU0FycmF5LCBzbyBpdCdzIGdv
b2QgZW5vdWdoLgotICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFNwZWNJbnQzMik7Cisg
ICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7IC8vIExpZXMsIGJ1dCBpdCdzIHRydWUgZm9y
IHRoZSBjb21tb24gY2FzZSBvZiBKU0FycmF5LCBzbyBpdCdzIGdvb2QgZW5vdWdoLgorICAgICAg
ICBmb3JOb2RlKG5vZGUpLnNldChTcGVjSW50MzIpOwogICAgICAgICBicmVhazsKICAgICAgICAg
CiAgICAgY2FzZSBDaGVja0V4ZWN1dGFibGU6IHsKQEAgLTE1MjMsMjMgKzE1NDIsMjMgQEAgYm9v
bCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICAvLyBtb3JlIHRo
b3JvdWdobHkuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDYyMDAK
ICAgICAgICAgLy8gRklYTUU6IFdlIGNvdWxkIGVsaW1pbmF0ZSB0aGVzZSBlbnRpcmVseSBpZiB3
ZSBrbm93IHRoZSBleGFjdCB2YWx1ZSB0aGF0IGZsb3dzIGludG8gdGhpcy4KICAgICAgICAgLy8g
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwNjIwMQotICAgICAgICBm
b3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjQ2VsbCk7Ci0gICAgICAgIG5vZGUuc2V0
Q2FuRXhpdCh0cnVlKTsKKyAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDEoKSkuZmlsdGVyKFNw
ZWNDZWxsKTsKKyAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKICAgICAgICAgYnJlYWs7
CiAgICAgfQogCiAgICAgY2FzZSBDaGVja1N0cnVjdHVyZToKICAgICBjYXNlIEZvcndhcmRDaGVj
a1N0cnVjdHVyZTogewogICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGJlIGFibGUgdG8gcHJv
cGFnYXRlIHRoZSBzdHJ1Y3R1cmUgc2V0cyBvZiBjb25zdGFudHMgKGkuZS4gcHJvdG90eXBlcyku
Ci0gICAgICAgIEFic3RyYWN0VmFsdWUmIHZhbHVlID0gZm9yTm9kZShub2RlLmNoaWxkMSgpKTsK
KyAgICAgICAgQWJzdHJhY3RWYWx1ZSYgdmFsdWUgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKTsK
ICAgICAgICAgLy8gSWYgdGhpcyBzdHJ1Y3R1cmUgY2hlY2sgaXMgYXR0ZW1wdGluZyB0byBwcm92
ZSBrbm93bGVkZ2UgYWxyZWFkeSBoZWxkIGluCiAgICAgICAgIC8vIHRoZSBmdXR1cmVQb3NzaWJs
ZVN0cnVjdHVyZSBzZXQgdGhlbiB0aGUgY29uc3RhbnQgZm9sZGluZyBwaGFzZSBzaG91bGQKICAg
ICAgICAgLy8gdHVybiB0aGlzIGludG8gYSB3YXRjaHBvaW50IGluc3RlYWQuCi0gICAgICAgIFN0
cnVjdHVyZVNldCYgc2V0ID0gbm9kZS5zdHJ1Y3R1cmVTZXQoKTsKKyAgICAgICAgU3RydWN0dXJl
U2V0JiBzZXQgPSBub2RlLT5zdHJ1Y3R1cmVTZXQoKTsKICAgICAgICAgaWYgKHZhbHVlLm1fZnV0
dXJlUG9zc2libGVTdHJ1Y3R1cmUuaXNTdWJzZXRPZihzZXQpCiAgICAgICAgICAgICB8fCB2YWx1
ZS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5pc1N1YnNldE9mKHNldCkpCiAgICAgICAgICAgICBt
X2ZvdW5kQ29uc3RhbnRzID0gdHJ1ZTsKLSAgICAgICAgbm9kZS5zZXRDYW5FeGl0KAorICAgICAg
ICBub2RlLT5zZXRDYW5FeGl0KAogICAgICAgICAgICAgIXZhbHVlLm1fY3VycmVudEtub3duU3Ry
dWN0dXJlLmlzU3Vic2V0T2Yoc2V0KQogICAgICAgICAgICAgfHwgIWlzQ2VsbFNwZWN1bGF0aW9u
KHZhbHVlLm1fdHlwZSkpOwogICAgICAgICB2YWx1ZS5maWx0ZXIoc2V0KTsKQEAgLTE1NDksNyAr
MTU2OCw3IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAg
ICAgCiAgICAgY2FzZSBTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludDoKICAgICBjYXNlIEZv
cndhcmRTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludDogewotICAgICAgICBBYnN0cmFjdFZh
bHVlJiB2YWx1ZSA9IGZvck5vZGUobm9kZS5jaGlsZDEoKSk7CisgICAgICAgIEFic3RyYWN0VmFs
dWUmIHZhbHVlID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSk7CiAKICAgICAgICAgLy8gSXQncyBv
bmx5IHZhbGlkIHRvIGlzc3VlIGEgc3RydWN0dXJlIHRyYW5zaXRpb24gd2F0Y2hwb2ludCBpZiB3
ZSBhbHJlYWR5CiAgICAgICAgIC8vIGtub3cgdGhhdCB0aGUgd2F0Y2hwb2ludCBjb3ZlcnMgYSBz
dXBlcnNldCBvZiB0aGUgc3RydWN0dXJlcyBrbm93biB0bwpAQCAtMTU1NywxNTQgKzE1NzYsMTU0
IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgLy8g
Q3VycmVudGx5LCB3ZSBvbmx5IGlzc3VlIHNpbmdsZXRvbiB3YXRjaHBvaW50cyAodGhhdCBjaGVj
ayBvbmUgc3RydWN0dXJlKQogICAgICAgICAvLyBhbmQgb3VyIGZ1dHVyZVBvc3NpYmxlU3RydWN0
dXJlIHNldCBjYW4gb25seSBjb250YWluIHplcm8sIG9uZSwgb3IgYW4KICAgICAgICAgLy8gaW5m
aW5pdHkgb2Ygc3RydWN0dXJlcy4KLSAgICAgICAgQVNTRVJUKHZhbHVlLm1fZnV0dXJlUG9zc2li
bGVTdHJ1Y3R1cmUuaXNTdWJzZXRPZihTdHJ1Y3R1cmVTZXQobm9kZS5zdHJ1Y3R1cmUoKSkpKTsK
KyAgICAgICAgQVNTRVJUKHZhbHVlLm1fZnV0dXJlUG9zc2libGVTdHJ1Y3R1cmUuaXNTdWJzZXRP
ZihTdHJ1Y3R1cmVTZXQobm9kZS0+c3RydWN0dXJlKCkpKSk7CiAgICAgICAgIAogICAgICAgICBB
U1NFUlQodmFsdWUuaXNDbGVhcigpIHx8IGlzQ2VsbFNwZWN1bGF0aW9uKHZhbHVlLm1fdHlwZSkp
OyAvLyBWYWx1ZSBjb3VsZCBiZSBjbGVhciBpZiB3ZSd2ZSBwcm92ZW4gbXVzdC1leGl0IGR1ZSB0
byBhIHNwZWN1bGF0aW9uIHN0YXRpY2FsbHkga25vd24gdG8gYmUgYmFkLgotICAgICAgICB2YWx1
ZS5maWx0ZXIobm9kZS5zdHJ1Y3R1cmUoKSk7CisgICAgICAgIHZhbHVlLmZpbHRlcihub2RlLT5z
dHJ1Y3R1cmUoKSk7CiAgICAgICAgIG1faGF2ZVN0cnVjdHVyZXMgPSB0cnVlOwotICAgICAgICBu
b2RlLnNldENhbkV4aXQodHJ1ZSk7CisgICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7CiAg
ICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgICAgIAogICAgIGNhc2UgUHV0U3RydWN0dXJl
OgogICAgIGNhc2UgUGhhbnRvbVB1dFN0cnVjdHVyZToKLSAgICAgICAgbm9kZS5zZXRDYW5FeGl0
KGZhbHNlKTsKLSAgICAgICAgaWYgKCFmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fY3VycmVudEtu
b3duU3RydWN0dXJlLmlzQ2xlYXIoKSkgeworICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNl
KTsKKyAgICAgICAgaWYgKCFmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX2N1cnJlbnRLbm93blN0
cnVjdHVyZS5pc0NsZWFyKCkpIHsKICAgICAgICAgICAgIGNsb2JiZXJTdHJ1Y3R1cmVzKGluZGV4
SW5CbG9jayk7Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLnNldChub2RlLnN0
cnVjdHVyZVRyYW5zaXRpb25EYXRhKCkubmV3U3RydWN0dXJlKTsKKyAgICAgICAgICAgIGZvck5v
ZGUobm9kZS0+Y2hpbGQxKCkpLnNldChub2RlLT5zdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSgpLm5l
d1N0cnVjdHVyZSk7CiAgICAgICAgICAgICBtX2hhdmVTdHJ1Y3R1cmVzID0gdHJ1ZTsKICAgICAg
ICAgfQogICAgICAgICBicmVhazsKICAgICBjYXNlIEdldEJ1dHRlcmZseToKICAgICBjYXNlIEFs
bG9jYXRlUHJvcGVydHlTdG9yYWdlOgogICAgIGNhc2UgUmVhbGxvY2F0ZVByb3BlcnR5U3RvcmFn
ZToKLSAgICAgICAgbm9kZS5zZXRDYW5FeGl0KCFpc0NlbGxTcGVjdWxhdGlvbihmb3JOb2RlKG5v
ZGUuY2hpbGQxKCkpLm1fdHlwZSkpOwotICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZp
bHRlcihTcGVjQ2VsbCk7Ci0gICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5jbGVhcigpOyAvLyBU
aGUgcmVzdWx0IGlzIG5vdCBhIEpTIHZhbHVlLgorICAgICAgICBub2RlLT5zZXRDYW5FeGl0KCFp
c0NlbGxTcGVjdWxhdGlvbihmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX3R5cGUpKTsKKyAgICAg
ICAgZm9yTm9kZShub2RlLT5jaGlsZDEoKSkuZmlsdGVyKFNwZWNDZWxsKTsKKyAgICAgICAgZm9y
Tm9kZShub2RlKS5jbGVhcigpOyAvLyBUaGUgcmVzdWx0IGlzIG5vdCBhIEpTIHZhbHVlLgogICAg
ICAgICBicmVhazsKICAgICBjYXNlIENoZWNrQXJyYXk6IHsKLSAgICAgICAgaWYgKG5vZGUuYXJy
YXlNb2RlKCkuYWxyZWFkeUNoZWNrZWQobV9ncmFwaCwgbm9kZSwgZm9yTm9kZShub2RlLmNoaWxk
MSgpKSkpIHsKKyAgICAgICAgaWYgKG5vZGUtPmFycmF5TW9kZSgpLmFscmVhZHlDaGVja2VkKG1f
Z3JhcGgsIG5vZGUsIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpKSkgewogICAgICAgICAgICAgbV9m
b3VuZENvbnN0YW50cyA9IHRydWU7Ci0gICAgICAgICAgICBub2RlLnNldENhbkV4aXQoZmFsc2Up
OworICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgfQotICAgICAgICBub2RlLnNldENhbkV4aXQodHJ1ZSk7IC8vIExpZXMsIGJ1
dCB0aGlzIGlzIGZvbGxvd2VkIGJ5IG9wZXJhdGlvbnMgKGxpa2UgR2V0QnlWYWwpIHRoYXQgYWx3
YXlzIGV4aXQsIHNvIHRoZXJlIGlzIG5vIHBvaW50IGluIHVzIHRyeWluZyB0byBiZSBjbGV2ZXIg
aGVyZS4KLSAgICAgICAgc3dpdGNoIChub2RlLmFycmF5TW9kZSgpLnR5cGUoKSkgeworICAgICAg
ICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOyAvLyBMaWVzLCBidXQgdGhpcyBpcyBmb2xsb3dlZCBi
eSBvcGVyYXRpb25zIChsaWtlIEdldEJ5VmFsKSB0aGF0IGFsd2F5cyBleGl0LCBzbyB0aGVyZSBp
cyBubyBwb2ludCBpbiB1cyB0cnlpbmcgdG8gYmUgY2xldmVyIGhlcmUuCisgICAgICAgIHN3aXRj
aCAobm9kZS0+YXJyYXlNb2RlKCkudHlwZSgpKSB7CiAgICAgICAgIGNhc2UgQXJyYXk6OlN0cmlu
ZzoKLSAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNTdHJpbmcp
OworICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDEoKSkuZmlsdGVyKFNwZWNTdHJpbmcp
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OkludDMyOgogICAgICAg
ICBjYXNlIEFycmF5OjpEb3VibGU6CiAgICAgICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3VvdXM6CiAg
ICAgICAgIGNhc2UgQXJyYXk6OkFycmF5U3RvcmFnZToKICAgICAgICAgY2FzZSBBcnJheTo6U2xv
d1B1dEFycmF5U3RvcmFnZToKLSAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmls
dGVyKFNwZWNDZWxsKTsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRl
cihTcGVjQ2VsbCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6QXJn
dW1lbnRzOgotICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY0Fy
Z3VtZW50cyk7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5maWx0ZXIoU3Bl
Y0FyZ3VtZW50cyk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6SW50
OEFycmF5OgotICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY0lu
dDhBcnJheSk7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5maWx0ZXIoU3Bl
Y0ludDhBcnJheSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6SW50
MTZBcnJheToKLSAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNJ
bnQxNkFycmF5KTsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRlcihT
cGVjSW50MTZBcnJheSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6
SW50MzJBcnJheToKLSAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNw
ZWNJbnQzMkFycmF5KTsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRl
cihTcGVjSW50MzJBcnJheSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBBcnJh
eTo6VWludDhBcnJheToKLSAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVy
KFNwZWNVaW50OEFycmF5KTsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZp
bHRlcihTcGVjVWludDhBcnJheSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBB
cnJheTo6VWludDhDbGFtcGVkQXJyYXk6Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQx
KCkpLmZpbHRlcihTcGVjVWludDhDbGFtcGVkQXJyYXkpOworICAgICAgICAgICAgZm9yTm9kZShu
b2RlLT5jaGlsZDEoKSkuZmlsdGVyKFNwZWNVaW50OENsYW1wZWRBcnJheSk7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6VWludDE2QXJyYXk6Ci0gICAgICAgICAgICBm
b3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjVWludDE2QXJyYXkpOworICAgICAgICAg
ICAgZm9yTm9kZShub2RlLT5jaGlsZDEoKSkuZmlsdGVyKFNwZWNVaW50MTZBcnJheSk7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6VWludDMyQXJyYXk6Ci0gICAgICAg
ICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjVWludDMyQXJyYXkpOworICAg
ICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDEoKSkuZmlsdGVyKFNwZWNVaW50MzJBcnJheSk7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6RmxvYXQzMkFycmF5Ogot
ICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY0Zsb2F0MzJBcnJh
eSk7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5maWx0ZXIoU3BlY0Zsb2F0
MzJBcnJheSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6RmxvYXQ2
NEFycmF5OgotICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY0Zs
b2F0NjRBcnJheSk7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5maWx0ZXIo
U3BlY0Zsb2F0NjRBcnJheSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgZGVmYXVsdDoK
ICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQotICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlckFy
cmF5TW9kZXMobm9kZS5hcnJheU1vZGUoKS5hcnJheU1vZGVzVGhhdFBhc3NGaWx0ZXJpbmcoKSk7
CisgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRlckFycmF5TW9kZXMobm9kZS0+
YXJyYXlNb2RlKCkuYXJyYXlNb2Rlc1RoYXRQYXNzRmlsdGVyaW5nKCkpOwogICAgICAgICBtX2hh
dmVTdHJ1Y3R1cmVzID0gdHJ1ZTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGNhc2UgQXJy
YXlpZnk6IHsKLSAgICAgICAgaWYgKG5vZGUuYXJyYXlNb2RlKCkuYWxyZWFkeUNoZWNrZWQobV9n
cmFwaCwgbm9kZSwgZm9yTm9kZShub2RlLmNoaWxkMSgpKSkpIHsKKyAgICAgICAgaWYgKG5vZGUt
PmFycmF5TW9kZSgpLmFscmVhZHlDaGVja2VkKG1fZ3JhcGgsIG5vZGUsIGZvck5vZGUobm9kZS0+
Y2hpbGQxKCkpKSkgewogICAgICAgICAgICAgbV9mb3VuZENvbnN0YW50cyA9IHRydWU7Ci0gICAg
ICAgICAgICBub2RlLnNldENhbkV4aXQoZmFsc2UpOworICAgICAgICAgICAgbm9kZS0+c2V0Q2Fu
RXhpdChmYWxzZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICBBU1NF
UlQobm9kZS5hcnJheU1vZGUoKS5jb252ZXJzaW9uKCkgPT0gQXJyYXk6OkNvbnZlcnQKLSAgICAg
ICAgICAgIHx8IG5vZGUuYXJyYXlNb2RlKCkuY29udmVyc2lvbigpID09IEFycmF5OjpSYWdlQ29u
dmVydCk7Ci0gICAgICAgIG5vZGUuc2V0Q2FuRXhpdCh0cnVlKTsKLSAgICAgICAgZm9yTm9kZShu
b2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY0NlbGwpOwotICAgICAgICBpZiAobm9kZS5jaGlsZDIo
KSkKLSAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7
CisgICAgICAgIEFTU0VSVChub2RlLT5hcnJheU1vZGUoKS5jb252ZXJzaW9uKCkgPT0gQXJyYXk6
OkNvbnZlcnQKKyAgICAgICAgICAgIHx8IG5vZGUtPmFycmF5TW9kZSgpLmNvbnZlcnNpb24oKSA9
PSBBcnJheTo6UmFnZUNvbnZlcnQpOworICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOwor
ICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5maWx0ZXIoU3BlY0NlbGwpOworICAgICAg
ICBpZiAobm9kZS0+Y2hpbGQyKCkpCisgICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMigp
KS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAgY2xvYmJlclN0cnVjdHVyZXMoaW5kZXhJbkJs
b2NrKTsKLSAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXJBcnJheU1vZGVzKG5v
ZGUuYXJyYXlNb2RlKCkuYXJyYXlNb2Rlc1RoYXRQYXNzRmlsdGVyaW5nKCkpOworICAgICAgICBm
b3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5maWx0ZXJBcnJheU1vZGVzKG5vZGUtPmFycmF5TW9kZSgp
LmFycmF5TW9kZXNUaGF0UGFzc0ZpbHRlcmluZygpKTsKICAgICAgICAgbV9oYXZlU3RydWN0dXJl
cyA9IHRydWU7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBjYXNlIEFycmF5aWZ5VG9TdHJ1
Y3R1cmU6IHsKLSAgICAgICAgQWJzdHJhY3RWYWx1ZSYgdmFsdWUgPSBmb3JOb2RlKG5vZGUuY2hp
bGQxKCkpOwotICAgICAgICBTdHJ1Y3R1cmVTZXQgc2V0ID0gbm9kZS5zdHJ1Y3R1cmUoKTsKKyAg
ICAgICAgQWJzdHJhY3RWYWx1ZSYgdmFsdWUgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKTsKKyAg
ICAgICAgU3RydWN0dXJlU2V0IHNldCA9IG5vZGUtPnN0cnVjdHVyZSgpOwogICAgICAgICBpZiAo
dmFsdWUubV9mdXR1cmVQb3NzaWJsZVN0cnVjdHVyZS5pc1N1YnNldE9mKHNldCkKICAgICAgICAg
ICAgIHx8IHZhbHVlLm1fY3VycmVudEtub3duU3RydWN0dXJlLmlzU3Vic2V0T2Yoc2V0KSkKICAg
ICAgICAgICAgIG1fZm91bmRDb25zdGFudHMgPSB0cnVlOwotICAgICAgICBub2RlLnNldENhbkV4
aXQodHJ1ZSk7Ci0gICAgICAgIGlmIChub2RlLmNoaWxkMigpKQotICAgICAgICAgICAgZm9yTm9k
ZShub2RlLmNoaWxkMigpKS5maWx0ZXIoU3BlY0ludDMyKTsKKyAgICAgICAgbm9kZS0+c2V0Q2Fu
RXhpdCh0cnVlKTsKKyAgICAgICAgaWYgKG5vZGUtPmNoaWxkMigpKQorICAgICAgICAgICAgZm9y
Tm9kZShub2RlLT5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7CiAgICAgICAgIGNsb2JiZXJT
dHJ1Y3R1cmVzKGluZGV4SW5CbG9jayk7CiAgICAgICAgIHZhbHVlLmZpbHRlcihzZXQpOwogICAg
ICAgICBtX2hhdmVTdHJ1Y3R1cmVzID0gdHJ1ZTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAg
IGNhc2UgR2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZTogewotICAgICAgICBub2RlLnNldENhbkV4
aXQoZmFsc2UpOwotICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuY2xlYXIoKTsKKyAgICAgICAg
bm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CisgICAgICAgIGZvck5vZGUobm9kZSkuY2xlYXIoKTsK
ICAgICAgICAgYnJlYWs7IAogICAgIH0KICAgICBjYXNlIEdldEJ5T2Zmc2V0OgotICAgICAgICBp
ZiAoIW1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0uaGFzU3RvcmFnZVJlc3VsdCgpKSB7Ci0gICAgICAg
ICAgICBub2RlLnNldENhbkV4aXQoIWlzQ2VsbFNwZWN1bGF0aW9uKGZvck5vZGUobm9kZS5jaGls
ZDEoKSkubV90eXBlKSk7Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRl
cihTcGVjQ2VsbCk7CisgICAgICAgIGlmICghbm9kZS0+Y2hpbGQxKCktPmhhc1N0b3JhZ2VSZXN1
bHQoKSkgeworICAgICAgICAgICAgbm9kZS5zZXRDYW5FeGl0KCFpc0NlbGxTcGVjdWxhdGlvbihm
b3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX3R5cGUpKTsKKyAgICAgICAgICAgIGZvck5vZGUobm9k
ZS0+Y2hpbGQxKCkpLmZpbHRlcihTcGVjQ2VsbCk7CiAgICAgICAgIH0KLSAgICAgICAgZm9yTm9k
ZShub2RlSW5kZXgpLm1ha2VUb3AoKTsKKyAgICAgICAgZm9yTm9kZShub2RlKS5tYWtlVG9wKCk7
CiAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAgY2FzZSBQdXRCeU9mZnNldDogewog
ICAgICAgICBib29sIGNhbkV4aXQgPSBmYWxzZTsKLSAgICAgICAgaWYgKCFtX2dyYXBoW25vZGUu
Y2hpbGQxKCldLmhhc1N0b3JhZ2VSZXN1bHQoKSkgewotICAgICAgICAgICAgY2FuRXhpdCB8PSAh
aXNDZWxsU3BlY3VsYXRpb24oZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpOwotICAgICAg
ICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY0NlbGwpOwotICAgICAgICB9
Ci0gICAgICAgIGNhbkV4aXQgfD0gIWlzQ2VsbFNwZWN1bGF0aW9uKGZvck5vZGUobm9kZS5jaGls
ZDIoKSkubV90eXBlKTsKLSAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMigpKS5maWx0ZXIoU3Bl
Y0NlbGwpOwotICAgICAgICBub2RlLnNldENhbkV4aXQoY2FuRXhpdCk7CisgICAgICAgIGlmICgh
bm9kZS0+Y2hpbGQxKCktPmhhc1N0b3JhZ2VSZXN1bHQoKSkgeworICAgICAgICAgICAgY2FuRXhp
dCB8PSAhaXNDZWxsU3BlY3VsYXRpb24oZm9yTm9kZShub2RlLT5jaGlsZDEoKSkubV90eXBlKTsK
KyAgICAgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRlcihTcGVjQ2VsbCk7Cisg
ICAgICAgIH0KKyAgICAgICAgY2FuRXhpdCB8PSAhaXNDZWxsU3BlY3VsYXRpb24oZm9yTm9kZShu
b2RlLT5jaGlsZDIoKSkubV90eXBlKTsKKyAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDIoKSku
ZmlsdGVyKFNwZWNDZWxsKTsKKyAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChjYW5FeGl0KTsKICAg
ICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAgICAgCiAgICAgY2FzZSBDaGVja0Z1bmN0aW9u
OiB7Ci0gICAgICAgIEpTVmFsdWUgdmFsdWUgPSBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLnZhbHVl
KCk7Ci0gICAgICAgIGlmICh2YWx1ZSA9PSBub2RlLmZ1bmN0aW9uKCkpIHsKKyAgICAgICAgSlNW
YWx1ZSB2YWx1ZSA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLnZhbHVlKCk7CisgICAgICAgIGlm
ICh2YWx1ZSA9PSBub2RlLT5mdW5jdGlvbigpKSB7CiAgICAgICAgICAgICBtX2ZvdW5kQ29uc3Rh
bnRzID0gdHJ1ZTsKICAgICAgICAgICAgIEFTU0VSVCh2YWx1ZSk7Ci0gICAgICAgICAgICBub2Rl
LnNldENhbkV4aXQoZmFsc2UpOworICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgbm9kZS5z
ZXRDYW5FeGl0KHRydWUpOyAvLyBMaWVzISBXZSBjYW4gZG8gYmV0dGVyLgotICAgICAgICBpZiAo
IWZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyQnlWYWx1ZShub2RlLmZ1bmN0aW9uKCkpKSB7
CisgICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7IC8vIExpZXMhIFdlIGNhbiBkbyBiZXR0
ZXIuCisgICAgICAgIGlmICghZm9yTm9kZShub2RlLT5jaGlsZDEoKSkuZmlsdGVyQnlWYWx1ZShu
b2RlLT5mdW5jdGlvbigpKSkgewogICAgICAgICAgICAgbV9pc1ZhbGlkID0gZmFsc2U7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtMTcxMyw2NyArMTczMiw2OSBAQCBib29sIEFi
c3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgIAogICAgIGNhc2UgUHV0
QnlJZDoKICAgICBjYXNlIFB1dEJ5SWREaXJlY3Q6Ci0gICAgICAgIG5vZGUuc2V0Q2FuRXhpdCh0
cnVlKTsKLSAgICAgICAgaWYgKFN0cnVjdHVyZSogc3RydWN0dXJlID0gZm9yTm9kZShub2RlLmNo
aWxkMSgpKS5iZXN0UHJvdmVuU3RydWN0dXJlKCkpIHsKKyAgICAgICAgbm9kZS0+c2V0Q2FuRXhp
dCh0cnVlKTsKKyAgICAgICAgaWYgKFN0cnVjdHVyZSogc3RydWN0dXJlID0gZm9yTm9kZShub2Rl
LT5jaGlsZDEoKSkuYmVzdFByb3ZlblN0cnVjdHVyZSgpKSB7CiAgICAgICAgICAgICBQdXRCeUlk
U3RhdHVzIHN0YXR1cyA9IFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IoCiAgICAgICAgICAgICAg
ICAgbV9ncmFwaC5tX2dsb2JhbERhdGEsCi0gICAgICAgICAgICAgICAgbV9ncmFwaC5nbG9iYWxP
YmplY3RGb3Iobm9kZS5jb2RlT3JpZ2luKSwKKyAgICAgICAgICAgICAgICBtX2dyYXBoLmdsb2Jh
bE9iamVjdEZvcihub2RlLT5jb2RlT3JpZ2luKSwKICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUs
Ci0gICAgICAgICAgICAgICAgbV9ncmFwaC5tX2NvZGVCbG9jay0+aWRlbnRpZmllcihub2RlLmlk
ZW50aWZpZXJOdW1iZXIoKSksCi0gICAgICAgICAgICAgICAgbm9kZS5vcCgpID09IFB1dEJ5SWRE
aXJlY3QpOworICAgICAgICAgICAgICAgIG1fZ3JhcGgubV9jb2RlQmxvY2stPmlkZW50aWZpZXIo
bm9kZS0+aWRlbnRpZmllck51bWJlcigpKSwKKyAgICAgICAgICAgICAgICBub2RlLT5vcCgpID09
IFB1dEJ5SWREaXJlY3QpOwogICAgICAgICAgICAgaWYgKHN0YXR1cy5pc1NpbXBsZVJlcGxhY2Uo
KSkgewotICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKHN0cnVj
dHVyZSk7CisgICAgICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDEoKSkuZmlsdGVyKHN0
cnVjdHVyZSk7CiAgICAgICAgICAgICAgICAgbV9mb3VuZENvbnN0YW50cyA9IHRydWU7CiAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoc3RhdHVz
LmlzU2ltcGxlVHJhbnNpdGlvbigpKSB7CiAgICAgICAgICAgICAgICAgY2xvYmJlclN0cnVjdHVy
ZXMoaW5kZXhJbkJsb2NrKTsKLSAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkp
LnNldChzdGF0dXMubmV3U3RydWN0dXJlKCkpOworICAgICAgICAgICAgICAgIGZvck5vZGUobm9k
ZS0+Y2hpbGQxKCkpLnNldChzdGF0dXMubmV3U3RydWN0dXJlKCkpOwogICAgICAgICAgICAgICAg
IG1faGF2ZVN0cnVjdHVyZXMgPSB0cnVlOwogICAgICAgICAgICAgICAgIG1fZm91bmRDb25zdGFu
dHMgPSB0cnVlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAg
ICB9Ci0gICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNDZWxsKTsKLSAg
ICAgICAgY2xvYmJlcldvcmxkKG5vZGUuY29kZU9yaWdpbiwgaW5kZXhJbkJsb2NrKTsKKyAgICAg
ICAgZm9yTm9kZShub2RlLT5jaGlsZDEoKSkuZmlsdGVyKFNwZWNDZWxsKTsKKyAgICAgICAgY2xv
YmJlcldvcmxkKG5vZGUtPmNvZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7CiAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgCiAgICAgY2FzZSBHZXRHbG9iYWxWYXI6Ci0gICAgICAgIG5vZGUuc2V0
Q2FuRXhpdChmYWxzZSk7Ci0gICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5tYWtlVG9wKCk7Cisg
ICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOworICAgICAgICBmb3JOb2RlKG5vZGUpLm1h
a2VUb3AoKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgIAogICAgIGNhc2UgR2xvYmFsVmFyV2F0
Y2hwb2ludDoKLSAgICAgICAgbm9kZS5zZXRDYW5FeGl0KHRydWUpOworICAgICAgICBub2RlLT5z
ZXRDYW5FeGl0KHRydWUpOwogICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgIGNhc2Ug
UHV0R2xvYmFsVmFyOgogICAgIGNhc2UgUHV0R2xvYmFsVmFyQ2hlY2s6Ci0gICAgICAgIG5vZGUu
c2V0Q2FuRXhpdChmYWxzZSk7CisgICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwogICAg
ICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgIGNhc2UgQ2hlY2tIYXNJbnN0YW5jZToKLSAg
ICAgICAgbm9kZS5zZXRDYW5FeGl0KHRydWUpOwotICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQx
KCkpLmZpbHRlcihTcGVjQ2VsbCk7CisgICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7Cisg
ICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRlcihTcGVjQ2VsbCk7CiAgICAgICAg
IC8vIFNhZGx5LCB3ZSBkb24ndCBwcm9wYWdhdGUgdGhlIGZhY3QgdGhhdCB3ZSd2ZSBkb25lIENo
ZWNrSGFzSW5zdGFuY2UKICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICBjYXNlIElu
c3RhbmNlT2Y6Ci0gICAgICAgIG5vZGUuc2V0Q2FuRXhpdCh0cnVlKTsKKyAgICAgICAgbm9kZS0+
c2V0Q2FuRXhpdCh0cnVlKTsKICAgICAgICAgLy8gQWdhaW4sIHNhZGx5LCB3ZSBkb24ndCBwcm9w
YWdhdGUgdGhlIGZhY3QgdGhhdCB3ZSd2ZSBkb25lIEluc3RhbmNlT2YKLSAgICAgICAgaWYgKCEo
bV9ncmFwaFtub2RlLmNoaWxkMSgpXS5wcmVkaWN0aW9uKCkgJiB+U3BlY0NlbGwpICYmICEoZm9y
Tm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUgJiB+U3BlY0NlbGwpKQotICAgICAgICAgICAgZm9y
Tm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY0NlbGwpOwotICAgICAgICBmb3JOb2RlKG5v
ZGUuY2hpbGQyKCkpLmZpbHRlcihTcGVjQ2VsbCk7Ci0gICAgICAgIGZvck5vZGUobm9kZUluZGV4
KS5zZXQoU3BlY0Jvb2xlYW4pOworICAgICAgICAvLyBGSVhNRTogVGhpcyBhcHBlYXJzIGJyb2tl
bjogQ2hlY2tIYXNJbnN0YW5jZSBhbHJlYWR5IGRvZXMgYW4gdW5jb25kaXRpb25hbCBjZWxsCisg
ICAgICAgIC8vIGNoZWNrLiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTA3NDc5CisgICAgICAgIGlmICghKG5vZGUtPmNoaWxkMSgpLT5wcmVkaWN0aW9uKCkgJiB+U3Bl
Y0NlbGwpICYmICEoZm9yTm9kZShub2RlLT5jaGlsZDEoKSkubV90eXBlICYgflNwZWNDZWxsKSkK
KyAgICAgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRlcihTcGVjQ2VsbCk7Cisg
ICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQyKCkpLmZpbHRlcihTcGVjQ2VsbCk7CisgICAgICAg
IGZvck5vZGUobm9kZSkuc2V0KFNwZWNCb29sZWFuKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICAKICAgICBjYXNlIFBoaToKICAgICBjYXNlIEZsdXNoOgotICAgICAgICBub2RlLnNldENh
bkV4aXQoZmFsc2UpOworICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICAKICAgICBjYXNlIEJyZWFrcG9pbnQ6Ci0gICAgICAgIG5vZGUu
c2V0Q2FuRXhpdChmYWxzZSk7CisgICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwogICAg
ICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgIGNhc2UgQ2FsbDoKQEAgLTE3ODIsMTggKzE4
MDMsMTggQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgIGNh
c2UgUmVzb2x2ZUJhc2U6CiAgICAgY2FzZSBSZXNvbHZlQmFzZVN0cmljdFB1dDoKICAgICBjYXNl
IFJlc29sdmVHbG9iYWw6Ci0gICAgICAgIG5vZGUuc2V0Q2FuRXhpdCh0cnVlKTsKLSAgICAgICAg
Y2xvYmJlcldvcmxkKG5vZGUuY29kZU9yaWdpbiwgaW5kZXhJbkJsb2NrKTsKLSAgICAgICAgZm9y
Tm9kZShub2RlSW5kZXgpLm1ha2VUb3AoKTsKKyAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVl
KTsKKyAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUtPmNvZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7
CisgICAgICAgIGZvck5vZGUobm9kZSkubWFrZVRvcCgpOwogICAgICAgICBicmVhazsKIAogICAg
IGNhc2UgR2FyYmFnZVZhbHVlOgotICAgICAgICBjbG9iYmVyV29ybGQobm9kZS5jb2RlT3JpZ2lu
LCBpbmRleEluQmxvY2spOwotICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkubWFrZVRvcCgpOwor
ICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+Y29kZU9yaWdpbiwgaW5kZXhJbkJsb2NrKTsKKyAg
ICAgICAgZm9yTm9kZShub2RlKS5tYWtlVG9wKCk7CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2Fz
ZSBGb3JjZU9TUkV4aXQ6Ci0gICAgICAgIG5vZGUuc2V0Q2FuRXhpdCh0cnVlKTsKKyAgICAgICAg
bm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKICAgICAgICAgbV9pc1ZhbGlkID0gZmFsc2U7CiAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgCkBAIC0xODAxLDcgKzE4MjIsNyBAQCBib29sIEFic3Ry
YWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgY2FzZSBJbmxpbmVTdGFydDoKICAg
ICBjYXNlIE5vcDoKICAgICBjYXNlIENvdW50RXhlY3V0aW9uOgotICAgICAgICBub2RlLnNldENh
bkV4aXQoZmFsc2UpOworICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAg
YnJlYWs7CiAgICAgICAgIAogICAgIGNhc2UgTGFzdE5vZGVUeXBlOgpAQCAtMTg1NCwxNSArMTg3
NSwxNCBAQCBpbmxpbmUgdm9pZCBBYnN0cmFjdFN0YXRlOjpjbG9iYmVyU3RydWN0CiAgICAgbV9k
aWRDbG9iYmVyID0gdHJ1ZTsKIH0KIAotaW5saW5lIGJvb2wgQWJzdHJhY3RTdGF0ZTo6bWVyZ2VT
dGF0ZUF0VGFpbChBYnN0cmFjdFZhbHVlJiBkZXN0aW5hdGlvbiwgQWJzdHJhY3RWYWx1ZSYgaW5W
YXJpYWJsZSwgTm9kZUluZGV4IG5vZGVJbmRleCkKK2lubGluZSBib29sIEFic3RyYWN0U3RhdGU6
Om1lcmdlU3RhdGVBdFRhaWwoQWJzdHJhY3RWYWx1ZSYgZGVzdGluYXRpb24sIEFic3RyYWN0VmFs
dWUmIGluVmFyaWFibGUsIE5vZGUqIG5vZGUpCiB7Ci0gICAgaWYgKG5vZGVJbmRleCA9PSBOb05v
ZGUpCisgICAgaWYgKCFub2RlKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIAogICAg
IEFic3RyYWN0VmFsdWUgc291cmNlOwogICAgIAotICAgIE5vZGUmIHRhaWxOb2RlID0gbV9ncmFw
aFtub2RlSW5kZXhdOwotICAgIGlmICh0YWlsTm9kZS52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+aXND
YXB0dXJlZCgpKSB7CisgICAgaWYgKG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5pc0NhcHR1
cmVkKCkpIHsKICAgICAgICAgLy8gSWYgaXQncyBjYXB0dXJlZCB0aGVuIHdlIGtub3cgdGhhdCB3
aGF0ZXZlciB2YWx1ZSB3YXMgc3RvcmVkIGludG8gdGhlIHZhcmlhYmxlIGxhc3QgaXMgdGhlCiAg
ICAgICAgIC8vIG9uZSB3ZSBjYXJlIGFib3V0LiBUaGlzIGlzIHRydWUgZXZlbiBpZiB0aGUgdmFy
aWFibGUgYXQgdGFpbCBpcyBkZWFkLCB3aGljaCBtaWdodCBoYXBwZW4gaWYKICAgICAgICAgLy8g
dGhlIGxhc3QgdGhpbmcgd2UgZGlkIHRvIHRoZSB2YXJpYWJsZSB3YXMgYSBHZXRMb2NhbCBhbmQg
dGhlbiBlbmRlZCB1cCBub3cgdXNpbmcgdGhlCkBAIC0xODc1LDI2ICsxODk1LDI1IEBAIGlubGlu
ZSBib29sIEFic3RyYWN0U3RhdGU6Om1lcmdlU3RhdGVBdFQKICAgICAgICAgZGF0YUxvZ0YoIiBm
cm9tIGxhc3QgYWNjZXNzIGR1ZSB0byBjYXB0dXJlZCB2YXJpYWJsZS5cbiIpOwogI2VuZGlmCiAg
ICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKCF0YWlsTm9kZS5zaG91bGRHZW5lcmF0ZSgpKSB7Cisg
ICAgICAgIGlmICghbm9kZS0+c2hvdWxkR2VuZXJhdGUoKSkgewogICAgICAgICAgICAgLy8gSWYg
dGhlIG5vZGUgYXQgdGFpbCBpcyBhIEdldExvY2FsIHRoYXQgaXMgZGVhZCwgdGhlbiBza2lwIGl0
IHRvIGdldCB0byB0aGUgUGhpLgogICAgICAgICAgICAgLy8gVGhlIFBoaSBtYXkgYmUgbGl2ZS4K
LSAgICAgICAgICAgIGlmICh0YWlsTm9kZS5vcCgpICE9IEdldExvY2FsKQorICAgICAgICAgICAg
aWYgKG5vZGUtPm9wKCkgIT0gR2V0TG9jYWwpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgICAgICAgICAgCi0gICAgICAgICAgICBub2RlSW5kZXggPSB0YWlsTm9kZS5jaGlsZDEo
KS5pbmRleCgpOwotICAgICAgICAgICAgQVNTRVJUKG1fZ3JhcGhbbm9kZUluZGV4XS5vcCgpID09
IFBoaSk7Ci0gICAgICAgICAgICBpZiAoIW1fZ3JhcGhbbm9kZUluZGV4XS5zaG91bGRHZW5lcmF0
ZSgpKQorICAgICAgICAgICAgbm9kZSA9IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKKyAgICAgICAg
ICAgIEFTU0VSVChub2RlLT5vcCgpID09IFBoaSk7CisgICAgICAgICAgICBpZiAoIW5vZGUtPnNo
b3VsZEdlbmVyYXRlKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9
CiAgICAgICAgIAotICAgICAgICBOb2RlJiBub2RlID0gbV9ncmFwaFtub2RlSW5kZXhdOwotICAg
ICAgICBBU1NFUlQobm9kZS5zaG91bGRHZW5lcmF0ZSgpKTsKKyAgICAgICAgQVNTRVJUKG5vZGUt
PnNob3VsZEdlbmVyYXRlKCkpOwogCiAjaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9W
RVJCT1NFKQotICAgICAgICBkYXRhTG9nRigiICAgICAgICAgIEl0J3MgbGl2ZSwgbm9kZSBAJXUu
XG4iLCBub2RlSW5kZXgpOworICAgICAgICBkYXRhTG9nRigiICAgICAgICAgIEl0J3MgbGl2ZSwg
bm9kZSBAJXUuXG4iLCBub2RlLT5pbmRleCgpKTsKICNlbmRpZgogICAgIAotICAgICAgICBzd2l0
Y2ggKG5vZGUub3AoKSkgeworICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKICAgICAgICAg
Y2FzZSBQaGk6CiAgICAgICAgIGNhc2UgU2V0QXJndW1lbnQ6CiAgICAgICAgIGNhc2UgRmx1c2g6
CkBAIC0xOTA5LDcgKzE5MjgsNyBAQCBpbmxpbmUgYm9vbCBBYnN0cmFjdFN0YXRlOjptZXJnZVN0
YXRlQXRUCiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBHZXRMb2NhbDoKICAgICAgICAgICAg
IC8vIFRoZSBibG9jayByZWZpbmVzIHRoZSB2YWx1ZSB3aXRoIGFkZGl0aW9uYWwgc3BlY3VsYXRp
b25zLgotICAgICAgICAgICAgc291cmNlID0gZm9yTm9kZShub2RlSW5kZXgpOworICAgICAgICAg
ICAgc291cmNlID0gZm9yTm9kZShub2RlKTsKICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FU
SU9OX1ZFUkJPU0UpCiAgICAgICAgICAgICBkYXRhTG9nRigiICAgICAgICAgIFJlZmluaW5nIHRv
ICIpOwogICAgICAgICAgICAgc291cmNlLmR1bXAoV1RGOjpkYXRhRmlsZSgpKTsKQEAgLTE5MjAs
MTEgKzE5MzksMTEgQEAgaW5saW5lIGJvb2wgQWJzdHJhY3RTdGF0ZTo6bWVyZ2VTdGF0ZUF0VAog
ICAgICAgICBjYXNlIFNldExvY2FsOgogICAgICAgICAgICAgLy8gVGhlIGJsb2NrIHNldHMgdGhl
IHZhcmlhYmxlLCBhbmQgcG90ZW50aWFsbHkgcmVmaW5lcyBpdCwgYm90aAogICAgICAgICAgICAg
Ly8gYmVmb3JlIGFuZCBhZnRlciBzZXR0aW5nIGl0LgotICAgICAgICAgICAgaWYgKG5vZGUudmFy
aWFibGVBY2Nlc3NEYXRhKCktPnNob3VsZFVzZURvdWJsZUZvcm1hdCgpKSB7CisgICAgICAgICAg
ICBpZiAobm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCktPnNob3VsZFVzZURvdWJsZUZvcm1hdCgp
KSB7CiAgICAgICAgICAgICAgICAgLy8gRklYTUU6IFRoaXMgdW5uZWNlc3NhcmlseSBsb3NlcyBw
cmVjaXNpb24uCiAgICAgICAgICAgICAgICAgc291cmNlLnNldChTcGVjRG91YmxlKTsKICAgICAg
ICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgIHNvdXJjZSA9IGZvck5vZGUobm9kZS5jaGls
ZDEoKSk7CisgICAgICAgICAgICAgICAgc291cmNlID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSk7
CiAjaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQogICAgICAgICAgICAg
ZGF0YUxvZ0YoIiAgICAgICAgICBTZXR0aW5nIHRvICIpOwogICAgICAgICAgICAgc291cmNlLmR1
bXAoV1RGOjpkYXRhRmlsZSgpKTsKQEAgLTE5ODIsMzUgKzIwMDEsMzQgQEAgaW5saW5lIGJvb2wg
QWJzdHJhY3RTdGF0ZTo6bWVyZ2UoQmFzaWNCbAogICAgIHJldHVybiBjaGFuZ2VkOwogfQogCi1p
bmxpbmUgYm9vbCBBYnN0cmFjdFN0YXRlOjptZXJnZVRvU3VjY2Vzc29ycygKLSAgICBHcmFwaCYg
Z3JhcGgsIEJhc2ljQmxvY2sqIGJhc2ljQmxvY2spCitpbmxpbmUgYm9vbCBBYnN0cmFjdFN0YXRl
OjptZXJnZVRvU3VjY2Vzc29ycyhHcmFwaCYgZ3JhcGgsIEJhc2ljQmxvY2sqIGJhc2ljQmxvY2sp
CiB7Ci0gICAgTm9kZSYgdGVybWluYWwgPSBncmFwaFtiYXNpY0Jsb2NrLT5sYXN0KCldOworICAg
IE5vZGUqIHRlcm1pbmFsID0gYmFzaWNCbG9jay0+bGFzdCgpOwogICAgIAotICAgIEFTU0VSVCh0
ZXJtaW5hbC5pc1Rlcm1pbmFsKCkpOworICAgIEFTU0VSVCh0ZXJtaW5hbC0+aXNUZXJtaW5hbCgp
KTsKICAgICAKLSAgICBzd2l0Y2ggKHRlcm1pbmFsLm9wKCkpIHsKKyAgICBzd2l0Y2ggKHRlcm1p
bmFsLT5vcCgpKSB7CiAgICAgY2FzZSBKdW1wOiB7CiAgICAgICAgIEFTU0VSVChiYXNpY0Jsb2Nr
LT5jZmFCcmFuY2hEaXJlY3Rpb24gPT0gSW52YWxpZEJyYW5jaERpcmVjdGlvbik7CiAjaWYgREZH
X0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQogICAgICAgICBkYXRhTG9nRigiICAg
ICAgICBNZXJnaW5nIHRvIGJsb2NrICMldS5cbiIsIHRlcm1pbmFsLnRha2VuQmxvY2tJbmRleCgp
KTsKICNlbmRpZgotICAgICAgICByZXR1cm4gbWVyZ2UoYmFzaWNCbG9jaywgZ3JhcGgubV9ibG9j
a3NbdGVybWluYWwudGFrZW5CbG9ja0luZGV4KCldLmdldCgpKTsKKyAgICAgICAgcmV0dXJuIG1l
cmdlKGJhc2ljQmxvY2ssIGdyYXBoLm1fYmxvY2tzW3Rlcm1pbmFsLT50YWtlbkJsb2NrSW5kZXgo
KV0uZ2V0KCkpOwogICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBCcmFuY2g6IHsKICAgICAgICAg
QVNTRVJUKGJhc2ljQmxvY2stPmNmYUJyYW5jaERpcmVjdGlvbiAhPSBJbnZhbGlkQnJhbmNoRGly
ZWN0aW9uKTsKICAgICAgICAgYm9vbCBjaGFuZ2VkID0gZmFsc2U7CiAjaWYgREZHX0VOQUJMRShE
RUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQotICAgICAgICBkYXRhTG9nRigiICAgICAgICBNZXJn
aW5nIHRvIGJsb2NrICMldS5cbiIsIHRlcm1pbmFsLnRha2VuQmxvY2tJbmRleCgpKTsKKyAgICAg
ICAgZGF0YUxvZ0YoIiAgICAgICAgTWVyZ2luZyB0byBibG9jayAjJXUuXG4iLCB0ZXJtaW5hbC0+
dGFrZW5CbG9ja0luZGV4KCkpOwogI2VuZGlmCiAgICAgICAgIGlmIChiYXNpY0Jsb2NrLT5jZmFC
cmFuY2hEaXJlY3Rpb24gIT0gVGFrZUZhbHNlKQotICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJn
ZShiYXNpY0Jsb2NrLCBncmFwaC5tX2Jsb2Nrc1t0ZXJtaW5hbC50YWtlbkJsb2NrSW5kZXgoKV0u
Z2V0KCkpOworICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZShiYXNpY0Jsb2NrLCBncmFwaC5t
X2Jsb2Nrc1t0ZXJtaW5hbC0+dGFrZW5CbG9ja0luZGV4KCldLmdldCgpKTsKICNpZiBERkdfRU5B
QkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCiAgICAgICAgIGRhdGFMb2dGKCIgICAgICAg
IE1lcmdpbmcgdG8gYmxvY2sgIyV1LlxuIiwgdGVybWluYWwubm90VGFrZW5CbG9ja0luZGV4KCkp
OwogI2VuZGlmCiAgICAgICAgIGlmIChiYXNpY0Jsb2NrLT5jZmFCcmFuY2hEaXJlY3Rpb24gIT0g
VGFrZVRydWUpCi0gICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlKGJhc2ljQmxvY2ssIGdyYXBo
Lm1fYmxvY2tzW3Rlcm1pbmFsLm5vdFRha2VuQmxvY2tJbmRleCgpXS5nZXQoKSk7CisgICAgICAg
ICAgICBjaGFuZ2VkIHw9IG1lcmdlKGJhc2ljQmxvY2ssIGdyYXBoLm1fYmxvY2tzW3Rlcm1pbmFs
LT5ub3RUYWtlbkJsb2NrSW5kZXgoKV0uZ2V0KCkpOwogICAgICAgICByZXR1cm4gY2hhbmdlZDsK
ICAgICB9CiAgICAgICAgIApAQCAtMjAyNiwxMiArMjA0NCwxMiBAQCBpbmxpbmUgYm9vbCBBYnN0
cmFjdFN0YXRlOjptZXJnZVRvU3VjY2VzCiAgICAgfQogfQogCi1pbmxpbmUgYm9vbCBBYnN0cmFj
dFN0YXRlOjptZXJnZVZhcmlhYmxlQmV0d2VlbkJsb2NrcyhBYnN0cmFjdFZhbHVlJiBkZXN0aW5h
dGlvbiwgQWJzdHJhY3RWYWx1ZSYgc291cmNlLCBOb2RlSW5kZXggZGVzdGluYXRpb25Ob2RlSW5k
ZXgsIE5vZGVJbmRleCBzb3VyY2VOb2RlSW5kZXgpCitpbmxpbmUgYm9vbCBBYnN0cmFjdFN0YXRl
OjptZXJnZVZhcmlhYmxlQmV0d2VlbkJsb2NrcyhBYnN0cmFjdFZhbHVlJiBkZXN0aW5hdGlvbiwg
QWJzdHJhY3RWYWx1ZSYgc291cmNlLCBOb2RlKiBkZXN0aW5hdGlvbk5vZGUsIE5vZGUqIHNvdXJj
ZU5vZGUpCiB7Ci0gICAgaWYgKGRlc3RpbmF0aW9uTm9kZUluZGV4ID09IE5vTm9kZSkKKyAgICBp
ZiAoIWRlc3RpbmF0aW9uTm9kZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAotICAgIEFT
U0VSVF9VTlVTRUQoc291cmNlTm9kZUluZGV4LCBzb3VyY2VOb2RlSW5kZXggIT0gTm9Ob2RlKTsK
KyAgICBBU1NFUlRfVU5VU0VEKHNvdXJjZU5vZGUsIHNvdXJjZU5vZGUpOwogICAgIAogICAgIC8v
IEZJWE1FOiBXZSBjb3VsZCBkbyBzb21lIHNwYXJzZSBjb25kaXRpb25hbCBwcm9wYWdhdGlvbiBo
ZXJlIQogICAgIApAQCAtMjA0MiwxNSArMjA2MCwxNSBAQCB2b2lkIEFic3RyYWN0U3RhdGU6OmR1
bXAoUHJpbnRTdHJlYW0mIG91CiB7CiAgICAgYm9vbCBmaXJzdCA9IHRydWU7CiAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBtX2Jsb2NrLT5zaXplKCk7ICsraSkgewotICAgICAgICBOb2RlSW5k
ZXggaW5kZXggPSBtX2Jsb2NrLT5hdChpKTsKLSAgICAgICAgQWJzdHJhY3RWYWx1ZSYgdmFsdWUg
PSBmb3JOb2RlKGluZGV4KTsKKyAgICAgICAgTm9kZSogbm9kZSA9IG1fYmxvY2stPmF0KGkpOwor
ICAgICAgICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSA9IGZvck5vZGUobm9kZSk7CiAgICAgICAgIGlm
ICh2YWx1ZS5pc0NsZWFyKCkpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgaWYgKGZp
cnN0KQogICAgICAgICAgICAgZmlyc3QgPSBmYWxzZTsKICAgICAgICAgZWxzZQogICAgICAgICAg
ICAgb3V0LnByaW50ZigiICIpOwotICAgICAgICBvdXQucHJpbnRmKCJAJWx1OiIsIHN0YXRpY19j
YXN0PHVuc2lnbmVkIGxvbmc+KGluZGV4KSk7CisgICAgICAgIG91dC5wcmludGYoIkAlbHU6Iiwg
c3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4obm9kZS0+aW5kZXgoKSkpOwogICAgICAgICB2YWx1
ZS5kdW1wKG91dCk7CiAgICAgfQogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdBYnN0cmFjdFN0YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdBYnN0cmFjdFN0YXRlLmgJKHJldmlzaW9uIDE0MDYxNikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQWJzdHJhY3RTdGF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTIsIDIwMTMgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC03Miw4ICs3Miw4IEBAIHN0cnVjdCBCYXNpY0Jsb2NrOwogLy8gQWJzdHJhY3RTdGF0ZSBzdGF0
ZShjb2RlQmxvY2ssIGdyYXBoKTsKIC8vIHN0YXRlLmJlZ2luQmFzaWNCbG9jayhiYXNpY0Jsb2Nr
KTsKIC8vIGJvb2wgZW5kUmVhY2hlZCA9IHRydWU7Ci0vLyBmb3IgKE5vZGVJbmRleCBpZHggPSBi
YXNpY0Jsb2NrLmJlZ2luOyBpZHggPCBiYXNpY0Jsb2NrLmVuZDsgKytpZHgpIHsKLS8vICAgICBp
ZiAoIXN0YXRlLmV4ZWN1dGUoaWR4KSkKKy8vIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBiYXNp
Y0Jsb2NrLT5zaXplKCk7ICsraSkgeworLy8gICAgIGlmICghc3RhdGUuZXhlY3V0ZShpKSkKIC8v
ICAgICAgICAgYnJlYWs7CiAvLyB9CiAvLyBib29sIHJlc3VsdCA9IHN0YXRlLmVuZEJhc2ljQmxv
Y2soPGVpdGhlciBNZXJnZSBvciBEb250TWVyZ2U+KTsKQEAgLTk3LDE0ICs5NywxNCBAQCBwdWJs
aWM6CiAgICAgCiAgICAgfkFic3RyYWN0U3RhdGUoKTsKICAgICAKLSAgICBBYnN0cmFjdFZhbHVl
JiBmb3JOb2RlKE5vZGVJbmRleCBub2RlSW5kZXgpCisgICAgQWJzdHJhY3RWYWx1ZSYgZm9yTm9k
ZShOb2RlKiBub2RlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIG1fZ3JhcGhbbm9kZUluZGV4XS52
YWx1ZTsKKyAgICAgICAgcmV0dXJuIG5vZGUtPnZhbHVlOwogICAgIH0KICAgICAKLSAgICBBYnN0
cmFjdFZhbHVlJiBmb3JOb2RlKEVkZ2Ugbm9kZVVzZSkKKyAgICBBYnN0cmFjdFZhbHVlJiBmb3JO
b2RlKEVkZ2UgZWRnZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBmb3JOb2RlKG5vZGVVc2UuaW5k
ZXgoKSk7CisgICAgICAgIHJldHVybiBmb3JOb2RlKGVkZ2Uubm9kZSgpKTsKICAgICB9CiAgICAg
CiAgICAgT3BlcmFuZHM8QWJzdHJhY3RWYWx1ZT4mIHZhcmlhYmxlcygpCkBAIC0xODcsNDggKzE4
Nyw0OCBAQCBwcml2YXRlOgogICAgIHZvaWQgY2xvYmJlckNhcHR1cmVkVmFycyhjb25zdCBDb2Rl
T3JpZ2luJik7CiAgICAgdm9pZCBjbG9iYmVyU3RydWN0dXJlcyh1bnNpZ25lZCBpbmRleEluQmxv
Y2spOwogICAgIAotICAgIGJvb2wgbWVyZ2VTdGF0ZUF0VGFpbChBYnN0cmFjdFZhbHVlJiBkZXN0
aW5hdGlvbiwgQWJzdHJhY3RWYWx1ZSYgaW5WYXJpYWJsZSwgTm9kZUluZGV4KTsKKyAgICBib29s
IG1lcmdlU3RhdGVBdFRhaWwoQWJzdHJhY3RWYWx1ZSYgZGVzdGluYXRpb24sIEFic3RyYWN0VmFs
dWUmIGluVmFyaWFibGUsIE5vZGUqKTsKICAgICAKLSAgICBzdGF0aWMgYm9vbCBtZXJnZVZhcmlh
YmxlQmV0d2VlbkJsb2NrcyhBYnN0cmFjdFZhbHVlJiBkZXN0aW5hdGlvbiwgQWJzdHJhY3RWYWx1
ZSYgc291cmNlLCBOb2RlSW5kZXggZGVzdGluYXRpb25Ob2RlSW5kZXgsIE5vZGVJbmRleCBzb3Vy
Y2VOb2RlSW5kZXgpOworICAgIHN0YXRpYyBib29sIG1lcmdlVmFyaWFibGVCZXR3ZWVuQmxvY2tz
KEFic3RyYWN0VmFsdWUmIGRlc3RpbmF0aW9uLCBBYnN0cmFjdFZhbHVlJiBzb3VyY2UsIE5vZGUq
IGRlc3RpbmF0aW9uTm9kZSwgTm9kZSogc291cmNlTm9kZSk7CiAgICAgCi0gICAgdm9pZCBzcGVj
dWxhdGVJbnQzMlVuYXJ5KE5vZGUmIG5vZGUsIGJvb2wgZm9yY2VDYW5FeGl0ID0gZmFsc2UpCisg
ICAgdm9pZCBzcGVjdWxhdGVJbnQzMlVuYXJ5KE5vZGUqIG5vZGUsIGJvb2wgZm9yY2VDYW5FeGl0
ID0gZmFsc2UpCiAgICAgewotICAgICAgICBBYnN0cmFjdFZhbHVlJiBjaGlsZFZhbHVlID0gZm9y
Tm9kZShub2RlLmNoaWxkMSgpKTsKLSAgICAgICAgbm9kZS5zZXRDYW5FeGl0KGZvcmNlQ2FuRXhp
dCB8fCAhaXNJbnQzMlNwZWN1bGF0aW9uKGNoaWxkVmFsdWUubV90eXBlKSk7CisgICAgICAgIEFi
c3RyYWN0VmFsdWUmIGNoaWxkVmFsdWUgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKTsKKyAgICAg
ICAgbm9kZS0+c2V0Q2FuRXhpdChmb3JjZUNhbkV4aXQgfHwgIWlzSW50MzJTcGVjdWxhdGlvbihj
aGlsZFZhbHVlLm1fdHlwZSkpOwogICAgICAgICBjaGlsZFZhbHVlLmZpbHRlcihTcGVjSW50MzIp
OwogICAgIH0KICAgICAKLSAgICB2b2lkIHNwZWN1bGF0ZU51bWJlclVuYXJ5KE5vZGUmIG5vZGUp
CisgICAgdm9pZCBzcGVjdWxhdGVOdW1iZXJVbmFyeShOb2RlKiBub2RlKQogICAgIHsKLSAgICAg
ICAgQWJzdHJhY3RWYWx1ZSYgY2hpbGRWYWx1ZSA9IGZvck5vZGUobm9kZS5jaGlsZDEoKSk7Ci0g
ICAgICAgIG5vZGUuc2V0Q2FuRXhpdCghaXNOdW1iZXJTcGVjdWxhdGlvbihjaGlsZFZhbHVlLm1f
dHlwZSkpOworICAgICAgICBBYnN0cmFjdFZhbHVlJiBjaGlsZFZhbHVlID0gZm9yTm9kZShub2Rl
LT5jaGlsZDEoKSk7CisgICAgICAgIG5vZGUtPnNldENhbkV4aXQoIWlzTnVtYmVyU3BlY3VsYXRp
b24oY2hpbGRWYWx1ZS5tX3R5cGUpKTsKICAgICAgICAgY2hpbGRWYWx1ZS5maWx0ZXIoU3BlY051
bWJlcik7CiAgICAgfQogICAgIAotICAgIHZvaWQgc3BlY3VsYXRlQm9vbGVhblVuYXJ5KE5vZGUm
IG5vZGUpCisgICAgdm9pZCBzcGVjdWxhdGVCb29sZWFuVW5hcnkoTm9kZSogbm9kZSkKICAgICB7
Ci0gICAgICAgIEFic3RyYWN0VmFsdWUmIGNoaWxkVmFsdWUgPSBmb3JOb2RlKG5vZGUuY2hpbGQx
KCkpOwotICAgICAgICBub2RlLnNldENhbkV4aXQoIWlzQm9vbGVhblNwZWN1bGF0aW9uKGNoaWxk
VmFsdWUubV90eXBlKSk7CisgICAgICAgIEFic3RyYWN0VmFsdWUmIGNoaWxkVmFsdWUgPSBmb3JO
b2RlKG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCghaXNCb29sZWFu
U3BlY3VsYXRpb24oY2hpbGRWYWx1ZS5tX3R5cGUpKTsKICAgICAgICAgY2hpbGRWYWx1ZS5maWx0
ZXIoU3BlY0Jvb2xlYW4pOwogICAgIH0KICAgICAKLSAgICB2b2lkIHNwZWN1bGF0ZUludDMyQmlu
YXJ5KE5vZGUmIG5vZGUsIGJvb2wgZm9yY2VDYW5FeGl0ID0gZmFsc2UpCisgICAgdm9pZCBzcGVj
dWxhdGVJbnQzMkJpbmFyeShOb2RlKiBub2RlLCBib29sIGZvcmNlQ2FuRXhpdCA9IGZhbHNlKQog
ICAgIHsKLSAgICAgICAgQWJzdHJhY3RWYWx1ZSYgY2hpbGRWYWx1ZTEgPSBmb3JOb2RlKG5vZGUu
Y2hpbGQxKCkpOwotICAgICAgICBBYnN0cmFjdFZhbHVlJiBjaGlsZFZhbHVlMiA9IGZvck5vZGUo
bm9kZS5jaGlsZDIoKSk7Ci0gICAgICAgIG5vZGUuc2V0Q2FuRXhpdCgKKyAgICAgICAgQWJzdHJh
Y3RWYWx1ZSYgY2hpbGRWYWx1ZTEgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAg
QWJzdHJhY3RWYWx1ZSYgY2hpbGRWYWx1ZTIgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMigpKTsKKyAg
ICAgICAgbm9kZS0+c2V0Q2FuRXhpdCgKICAgICAgICAgICAgIGZvcmNlQ2FuRXhpdAotICAgICAg
ICAgICAgfHwgIWlzSW50MzJTcGVjdWxhdGlvbihjaGlsZFZhbHVlMS5tX3R5cGUpCi0gICAgICAg
ICAgICB8fCAhaXNJbnQzMlNwZWN1bGF0aW9uKGNoaWxkVmFsdWUyLm1fdHlwZSkpOworICAgICAg
ICAgICAgfHwgIWlzSW50MzJTcGVjdWxhdGlvbihjaGlsZFZhbHVlMS0+bV90eXBlKQorICAgICAg
ICAgICAgfHwgIWlzSW50MzJTcGVjdWxhdGlvbihjaGlsZFZhbHVlMi0+bV90eXBlKSk7CiAgICAg
ICAgIGNoaWxkVmFsdWUxLmZpbHRlcihTcGVjSW50MzIpOwogICAgICAgICBjaGlsZFZhbHVlMi5m
aWx0ZXIoU3BlY0ludDMyKTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBzcGVjdWxhdGVOdW1iZXJC
aW5hcnkoTm9kZSYgbm9kZSkKKyAgICB2b2lkIHNwZWN1bGF0ZU51bWJlckJpbmFyeShOb2RlKiBu
b2RlKQogICAgIHsKLSAgICAgICAgQWJzdHJhY3RWYWx1ZSYgY2hpbGRWYWx1ZTEgPSBmb3JOb2Rl
KG5vZGUuY2hpbGQxKCkpOwotICAgICAgICBBYnN0cmFjdFZhbHVlJiBjaGlsZFZhbHVlMiA9IGZv
ck5vZGUobm9kZS5jaGlsZDIoKSk7Ci0gICAgICAgIG5vZGUuc2V0Q2FuRXhpdCgKKyAgICAgICAg
QWJzdHJhY3RWYWx1ZSYgY2hpbGRWYWx1ZTEgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKTsKKyAg
ICAgICAgQWJzdHJhY3RWYWx1ZSYgY2hpbGRWYWx1ZTIgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMigp
KTsKKyAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCgKICAgICAgICAgICAgICFpc051bWJlclNwZWN1
bGF0aW9uKGNoaWxkVmFsdWUxLm1fdHlwZSkKICAgICAgICAgICAgIHx8ICFpc051bWJlclNwZWN1
bGF0aW9uKGNoaWxkVmFsdWUyLm1fdHlwZSkpOwogICAgICAgICBjaGlsZFZhbHVlMS5maWx0ZXIo
U3BlY051bWJlcik7CkBAIC0yNDAsOSArMjQwLDkgQEAgcHJpdmF0ZToKICAgICAgICAgRGVmaW5p
dGVseUZhbHNlLAogICAgICAgICBEZWZpbml0ZWx5VHJ1ZQogICAgIH07Ci0gICAgQm9vbGVhblJl
c3VsdCBib29sZWFuUmVzdWx0KE5vZGUmLCBBYnN0cmFjdFZhbHVlJik7CisgICAgQm9vbGVhblJl
c3VsdCBib29sZWFuUmVzdWx0KE5vZGUqLCBBYnN0cmFjdFZhbHVlJik7CiAgICAgCi0gICAgYm9v
bCB0cnlTZXRDb25zdGFudChOb2RlSW5kZXggbm9kZUluZGV4LCBKU1ZhbHVlIHZhbHVlKQorICAg
IGJvb2wgdHJ5U2V0Q29uc3RhbnQoTm9kZSogbm9kZSwgSlNWYWx1ZSB2YWx1ZSkKICAgICB7CiAg
ICAgICAgIC8vIE1ha2Ugc3VyZSB3ZSBkb24ndCBjb25zdGFudCBmb2xkIHNvbWV0aGluZyB0aGF0
IHdpbGwgcHJvZHVjZSB2YWx1ZXMgdGhhdCBjb250cmF2ZW5lCiAgICAgICAgIC8vIHByZWRpY3Rp
b25zLiBJZiB0aGF0IGhhcHBlbnMgdGhlbiB3ZSBrbm93IHRoYXQgdGhlIGNvZGUgd2lsbCBPU1Ig
ZXhpdCwgZm9yY2luZwpAQCAtMjUxLDExICsyNTEsMTEgQEAgcHJpdmF0ZToKICAgICAgICAgLy8g
bG90IG9mIHN1YnRsZSBjb2RlIHRoYXQgYXNzdW1lcyB0aGF0CiAgICAgICAgIC8vIHNwZWN1bGF0
aW9uRnJvbVZhbHVlKGpzQ29uc3RhbnQpID09IGpzQ29uc3RhbnQucHJlZGljdGlvbigpLiAiSGFy
ZGVuaW5nIiB0aGF0IGNvZGUKICAgICAgICAgLy8gaXMgcHJvYmFibHkgbGVzcyBzYW5lIHRoYW4g
anVzdCBwdWxsaW5nIGJhY2sgb24gY29uc3RhbnQgZm9sZGluZy4KLSAgICAgICAgU3BlY3VsYXRl
ZFR5cGUgb2xkVHlwZSA9IG1fZ3JhcGhbbm9kZUluZGV4XS5wcmVkaWN0aW9uKCk7CisgICAgICAg
IFNwZWN1bGF0ZWRUeXBlIG9sZFR5cGUgPSBub2RlLT5wcmVkaWN0aW9uKCk7CiAgICAgICAgIGlm
IChtZXJnZVNwZWN1bGF0aW9ucyhzcGVjdWxhdGlvbkZyb21WYWx1ZSh2YWx1ZSksIG9sZFR5cGUp
ICE9IG9sZFR5cGUpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIAotICAgICAg
ICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KHZhbHVlKTsKKyAgICAgICAgZm9yTm9kZShub2RlKS5z
ZXQodmFsdWUpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0VmFsdWUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0VmFsdWUuaAkocmV2aXNpb24gMTQw
NjE2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFZhbHVlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExLCAy
MDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
MSwgMjAxMiwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQxOCw2ICs0MTgsOCBAQCBzdHJ1Y3QgQWJzdHJhY3RW
YWx1ZSB7CiAgICAgLy8gICAgY2hhbmdlIHgncyBzdHJ1Y3R1cmUgYW5kIHdlIGhhdmUgbm8gd2F5
IG9mIHByb3Zpbmcgb3RoZXJ3aXNlLCBidXQKICAgICAvLyAgICB4J3MgbV9mdXR1cmVQb3NzaWJs
ZVN0cnVjdHVyZSB3aWxsIGJlIHdoYXRldmVyIHN0cnVjdHVyZSB3ZSBoYWQgY2hlY2tlZAogICAg
IC8vICAgIHdoZW4gZ2V0dGluZyBwcm9wZXJ0eSAnZicuCisgICAgCisgICAgLy8gTkIuIEFsbCBm
aWVsZHMgaW4gdGhpcyBzdHJ1Y3QgbXVzdCBoYXZlIHRyaXZpYWwgZGVzdHJ1Y3RvcnMuCiAKICAg
ICAvLyBUaGlzIGlzIGEgcHJvdmVuIGNvbnN0cmFpbnQgb24gdGhlIHN0cnVjdHVyZXMgdGhhdCB0
aGlzIHZhbHVlIGNhbiBoYXZlIHJpZ2h0CiAgICAgLy8gbm93LiBUaGUgc3RydWN0dXJlIG9mIHRo
ZSBjdXJyZW50IHZhbHVlIG11c3QgYmVsb25nIHRvIHRoaXMgc2V0LiBUaGUgc2V0IG1heQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBZGphY2VuY3lMaXN0LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBZGphY2VuY3lMaXN0LmgJKHJldmlz
aW9uIDE0MDYxNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWRqYWNlbmN5TGlz
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTEsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC01Nyw3ICs1Nyw3IEBAIHB1YmxpYzoKICAgICAgICAgfQogICAg
IH0KICAgICAKLSAgICBBZGphY2VuY3lMaXN0KEtpbmQga2luZCwgTm9kZUluZGV4IGNoaWxkMSwg
Tm9kZUluZGV4IGNoaWxkMiwgTm9kZUluZGV4IGNoaWxkMykKKyAgICBBZGphY2VuY3lMaXN0KEtp
bmQga2luZCwgTm9kZSogY2hpbGQxLCBOb2RlKiBjaGlsZDIsIE5vZGUqIGNoaWxkMykKICNpZiAh
QVNTRVJUX0RJU0FCTEVECiAgICAgICAgIDogbV9raW5kKEZpeGVkKQogI2VuZGlmCkBAIC0xMTgs
NyArMTE4LDcgQEAgcHVibGljOgogICAgICAgICBjaGlsZCgyKSA9IGNoaWxkMzsKICAgICB9CiAg
ICAgCi0gICAgdm9pZCBpbml0aWFsaXplKE5vZGVJbmRleCBjaGlsZDEgPSBOb05vZGUsIE5vZGVJ
bmRleCBjaGlsZDIgPSBOb05vZGUsIE5vZGVJbmRleCBjaGlsZDMgPSBOb05vZGUpCisgICAgdm9p
ZCBpbml0aWFsaXplKE5vZGUqIGNoaWxkMSA9IDAsIE5vZGUqIGNoaWxkMiA9IDAsIE5vZGUqIGNo
aWxkMyA9IDApCiAgICAgewogICAgICAgICBpbml0aWFsaXplKEVkZ2UoY2hpbGQxKSwgRWRnZShj
aGlsZDIpLCBFZGdlKGNoaWxkMykpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQWxsb2NhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdBbGxvY2F0b3IuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQWxsb2NhdG9yLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjM1IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHQWxs
b2NhdG9yX2gKKyNkZWZpbmUgREZHQWxsb2NhdG9yX2gKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9y
bS5oPgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlIDx3dGYvUGFnZUFsbG9jYXRp
b25BbGlnbmVkLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworLy8gQ3Vz
dG9tIHBvb2wgYWxsb2NhdG9yIGZvciBleGFjdGx5IG9uZSB0eXBlICh0eXBlIFQpLiBJdCBoYXMg
ZmFzdCAoTygxKSwgb25seSBhIGZldworLy8gaW5zdHJ1Y3Rpb25zKSBhbGxvY2F0b3IsIGFuZCBh
IHNpbWlsYXJseSBmYXN0IGZyZWUoKS4gUmVjeWNsaW5nIHdvcmtzIGlmIGVpdGhlciBvZgorLy8g
dGhlIGZvbGxvd2luZyBpcyB0cnVlOgorLy8gLSBUIGhhcyBhIHRyaXZpYWwgZGVzdHJ1Y3Rvci4g
SW4gdGhhdCBjYXNlIHlvdSBkb24ndCBoYXZlIHRvIGV2ZXIgY2FsbCBmcmVlKCkgb24KKy8vICAg
YW55dGhpbmcuIFlvdSBjYW4ganVzdCBjYWxsIGZyZWVBbGwoKSBpbnN0ZWFkLgorLy8gLSBZb3Ug
Y2FsbCBmcmVlKCkgb24gYWxsIFQncyB0aGF0IHlvdSBhbGxvY2F0ZWQsIGFuZCBuZXZlciB1c2Ug
ZnJlZUFsbCgpLgorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorY2xhc3MgQWxsb2NhdG9yIHsKK3B1
YmxpYzoKKyAgICBBbGxvY2F0b3IoKTsKKyAgICB+QWxsb2NhdG9yKCk7CisgICAgCisgICAgdm9p
ZCogYWxsb2NhdGUoKTsgLy8gVXNlIHBsYWNlbWVudCBuZXcgdG8gYWxsb2NhdGUsIGFuZCBhdm9p
ZCB1c2luZyB0aGlzIG1ldGhvZC4KKyAgICB2b2lkIGZyZWUoVCopOyAvLyBDYWxsIHRoaXMgbWV0
aG9kIHRvIGRlbGV0ZTsgbmV2ZXIgdXNlICdkZWxldGUnIGRpcmVjdGx5LgorICAgIAorICAgIHZv
aWQgZnJlZUFsbCgpOyAvLyBPbmx5IGNhbGwgdGhpcyBpZiBUIGhhcyBhIHRyaXZpYWwgZGVzdHJ1
Y3Rvci4KKyAgICB2b2lkIHJlc2V0KCk7IC8vIExpa2UgZnJlZUFsbCgpLCBidXQgYWxzbyByZXR1
cm5zIGFsbCBtZW1vcnkgdG8gdGhlIE9TLgorICAgIAorICAgIHVuc2lnbmVkIGluZGV4T2YoVCop
OworICAgIAorICAgIHN0YXRpYyBBbGxvY2F0b3IqIGFsbG9jYXRvck9mKFQqKTsKKyAgICAKK3By
aXZhdGU6CisgICAgdm9pZCogYnVtcEFsbG9jYXRlKCk7CisgICAgdm9pZCogZnJlZUxpc3RBbGxv
Y2F0ZSgpOworICAgIHZvaWQqIGFsbG9jYXRlU2xvdygpOworICAgIHZvaWQgZnJlZVJlZ2lvbnNT
dGFydGluZ0F0KFJlZ2lvbiopOworICAgIHZvaWQgc3RhcnRpbmdCdW1waW5nSW4oUmVnaW9uKik7
CisgICAgCisgICAgc3RydWN0IFJlZ2lvbiB7CisgICAgICAgIHN0YXRpYyBzaXplX3Qgc2l6ZSgp
IHsgcmV0dXJuIDY0ICogS0I7IH0KKyAgICAgICAgc3RhdGljIHNpemVfdCBoZWFkZXJTaXplKCkg
eyByZXR1cm4gc3RkOjptYXgoc2l6ZW9mKFJlZ2lvbiksIHNpemVvZihUKSk7IH0KKyAgICAgICAg
c3RhdGljIHVuc2lnbmVkIG51bWJlck9mVGhpbmdzUGVyUmVnaW9uKCkgeyByZXR1cm4gKHNpemUo
KSAtIGhlYWRlclNpemUoKSkgLyBzaXplb2YoVCk7IH0KKyAgICAgICAgVCogZGF0YSgpIHsgcmV0
dXJuIGJpdHdpc2VfY2FzdDxUKj4oYml0d2lzZV9jYXN0PGNoYXIqPih0aGlzKSArIGhlYWRlclNp
emUoKSk7IH0KKyAgICAgICAgYm9vbCBpc0luVGhpc1JlZ2lvbihUKiBwb2ludGVyKSB7IHJldHVy
biBzdGF0aWNfY2FzdDx1bnNpZ25lZD4ocG9pbnRlciAtIGRhdGEoKSkgPCBudW1iZXJPZlRoaW5n
c1BlclJlZ2lvbigpOyB9CisgICAgICAgIFJlZ2lvbiogcmVnaW9uRm9yKFQqIHBvaW50ZXIpIHsg
cmV0dXJuIGJpdHdpc2VfY2FzdDxSZWdpb24qPihiaXR3aXNlX2Nhc3Q8dWludHB0cl90Pihwb2lu
dGVyKSAmIH4oc2l6ZSgpIC0gMSkpOyB9CisgICAgICAgIAorICAgICAgICBQYWdlQWxsb2NhdGlv
bkFsaWduZWQgbV9hbGxvY2F0aW9uOworICAgICAgICBBbGxvY2F0b3IqIG1fYWxsb2NhdG9yOwor
ICAgICAgICBSZWdpb24qIG1fbmV4dDsKKyAgICB9OworICAgIAorICAgIFJlZ2lvbiogbV9yZWdp
b25IZWFkOworICAgIHZvaWQqKiBtX2ZyZWVMaXN0SGVhZDsKKyAgICBUKiBtX2J1bXBFbmQ7Cisg
ICAgdW5zaWduZWQgbV9idW1wUmVtYWluaW5nOworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4K
K2lubGluZSBBbGxvY2F0b3I6OkFsbG9jYXRvcigpCisgICAgOiBtX3JlZ2lvbkhlYWQoMCkKKyAg
ICAsIG1fZnJlZUxpc3RIZWFkKDApCisgICAgLCBtX2J1bXBSZW1haW5pbmcoMCkKK3sKK30KKwor
dGVtcGxhdGU8dHlwZW5hbWUgVD4KK2lubGluZSBBbGxvY2F0b3I6On5BbGxvY2F0b3IoKQorewor
ICAgIHJlc2V0KCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitBTFdBWVNfSU5MSU5FIHZv
aWQqIEFsbG9jYXRvcjo6YWxsb2NhdGUoKQoreworICAgIGlmIChMSUtFTFkodm9pZCogcmVzdWx0
ID0gYnVtcEFsbG9jYXRlKCkpKQorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIHJldHVybiBm
cmVlTGlzdEFsbG9jYXRlKCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+Cit2b2lkIEFsbG9j
YXRvcjo6ZnJlZShUKiBvYmplY3QpCit7CisgICAgb2JqZWN0LT5+VCgpOworICAgIAorICAgIHZv
aWQqKiBjZWxsID0gYml0d2lzZV9jYXN0PHZvaWQqKj4ob2JqZWN0KTsKKyAgICAqY2VsbCA9IG1f
ZnJlZUxpc3RIZWFkOworICAgIG1fZnJlZUxpc3RIZWFkID0gY2VsbDsKK30KKwordGVtcGxhdGU8
dHlwZW5hbWUgVD4KK3ZvaWQgQWxsb2NhdG9yOjpmcmVlQWxsKCkKK3sKKyAgICBpZiAoIW1fcmVn
aW9uSGVhZCkgeworICAgICAgICBBU1NFUlQoIW1fYnVtcFJlbWFpbmluZyk7CisgICAgICAgIEFT
U0VSVCghbV9mcmVlTGlzdEhlYWQpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAg
IC8vIFNpbmNlIHRoZSBjYWxsZXIgaXMgb3B0aW5nIG91dCBvZiBjYWxsaW5nIHRoZSBkZXN0cnVj
dG9yIGZvciBhbnkgYWxsb2NhdGVkIHRoaW5nLAorICAgIC8vIHdlIGhhdmUgdHdvIGNob2ljZXMs
IHBsdXMgYSBjb250aW51dW0gYmV0d2Vlbjogd2UgY2FuIGVpdGhlciBqdXN0IGRlbGV0ZSBhbGwg
cmVnaW9ucworICAgIC8vIChpLmUuIGNhbGwgcmVzZXQoKSksIG9yIHdlIGNhbiBtYWtlIGFsbCBy
ZWdpb25zIGF2YWlsYWJsZSBmb3IgcmV1c2UuIFdlIGRvIHNvbWV0aGluZworICAgIC8vIHRoYXQg
b3B0aW1pemVzIGZvciAoYSkgc3BlZWQgb2YgZnJlZUFsbCgpLCAoYikgdGhlIGFzc3VtcHRpb24g
dGhhdCBpZiB0aGUgdXNlciBjYWxscworICAgIC8vIGZyZWVBbGwoKSB0aGVuIHRoZXkgd2lsbCBw
cm9iYWJseSBiZSBjYWxsaW5nIGFsbG9jYXRlKCkgaW4gdGhlIG5lYXIgZnV0dXJlLiBOYW1lbHks
CisgICAgLy8gd2UgZnJlZSBhbGwgYnV0IG9uZSByZWdpb24sIGFuZCBtYWtlIHRoZSByZW1haW5p
bmcgcmVnaW9uIGEgYnVtcCBhbGxvY2F0aW9uIHJlZ2lvbi4KKyAgICAKKyAgICBmb3IgKFJlZ2lv
biogcmVnaW9uID0gbV9yZWdpb25IZWFkLT5tX25leHQ7IHJlZ2lvbjsgcmVnaW9uID0gcmVnaW9u
LT5tX25leHQpCisgICAgICAgIGJ1aWxkRnJlZUxpc3RJbihyZWdpb24pOworICAgIAorICAgIG1f
cmVnaW9uSGVhZC0+bV9uZXh0ID0gMDsKKyAgICBtX2ZyZWVMaXN0SGVhZCA9IDA7CisgICAgc3Rh
cnRCdW1waW5nSW4obV9yZWdpb25IZWFkKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK3Zv
aWQgQWxsb2NhdG9yOjpyZXNldCgpCit7CisgICAgZnJlZVJlZ2lvbnNTdGFydGluZ0F0KG1fcmVn
aW9uSGVhZCk7CisgICAgCisgICAgbV9yZWdpb25IZWFkID0gMDsKKyAgICBtX2ZyZWVMaXN0SGVh
ZCA9IDA7CisgICAgbV9idW1wUmVtYWluaW5nID0gMDsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUg
VD4KK3Vuc2lnbmVkIEFsbG9jYXRvcjo6aW5kZXhPZihUKiBvYmplY3QpCit7CisgICAgdW5zaWdu
ZWQgYmFzZUluZGV4ID0gMDsKKyAgICBmb3IgKFJlZ2lvbiogcmVnaW9uID0gbV9yZWdpb25IZWFk
OyByZWdpb247IHJlZ2lvbiA9IHJlZ2lvbi0+bV9uZXh0KSB7CisgICAgICAgIGlmIChyZWdpb24t
PmlzSW5UaGlzUmVnaW9uKG9iamVjdCkpCisgICAgICAgICAgICByZXR1cm4gYmFzZUluZGV4ICsg
KG9iamVjdCAtIHJlZ2lvbi0+ZGF0YSgpKTsKKyAgICAgICAgYmFzZUluZGV4ICs9IFJlZ2lvbjo6
bnVtYmVyT2ZUaGluZ3NQZXJSZWdpb24oKTsKKyAgICB9CisgICAgQ1JBU0goKTsKKyAgICByZXR1
cm4gMDsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK0FsbG9jYXRvciogQWxsb2NhdG9yOjph
bGxvY2F0b3JPZihUKiBvYmplY3QpCit7CisgICAgcmV0dXJuIFJlZ2lvbjo6cmVnaW9uRm9yKG9i
amVjdCktPm1fYWxsb2NhdG9yOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorQUxXQVlTX0lO
TElORSB2b2lkKiBBbGxvY2F0b3I6OmJ1bXBBbGxvY2F0ZSgpCit7CisgICAgaWYgKHVuc2lnbmVk
IHJlbWFpbmluZyA9IG1fYnVtcFJlbWFpbmluZykgeworICAgICAgICByZW1haW5pbmctLTsKKyAg
ICAgICAgbV9idW1wUmVtYWluaW5nID0gcmVtYWluaW5nOworICAgICAgICByZXR1cm4gbV9idW1w
RW5kIC0gKHJlbWFpbmluZyArIDEpOworICAgIH0KKyAgICByZXR1cm4gMDsKK30KKwordGVtcGxh
dGU8dHlwZW5hbWUgVD4KK3ZvaWQqIEFsbG9jYXRvcjo6ZnJlZUxpc3RBbGxvY2F0ZSgpCit7Cisg
ICAgdm9pZCoqIHJlc3VsdCA9IG1fZnJlZUxpc3RIZWFkOworICAgIGlmIChVTkxJS0VMWSghcmVz
dWx0KSkKKyAgICAgICAgcmV0dXJuIGFsbG9jYXRlU2xvdygpOworICAgIG1fZnJlZUxpc3RIZWFk
ID0gYml0d2lzZV9jYXN0PHZvaWQqKj4oKnJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30K
KwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK3ZvaWQqIEFsbG9jYXRvcjo6YWxsb2NhdGVTbG93KCkK
K3sKKyAgICBBU1NFUlQoIW1fZnJlZUxpc3RIZWFkKTsKKyAgICBBU1NFUlQoIW1fYnVtcFJlbWFp
bmluZyk7CisgICAgCisgICAgUGFnZUFsbG9jYXRpb25BbGlnbmVkIGFsbG9jYXRpb24gPSBQYWdl
QWxsb2NhdGlvbkFsaWduZWQ6OmFsbG9jYXRlKFJlZ2lvbjo6c2l6ZSgpLCBSZWdpb246OnNpemUo
KSwgT1NBbGxvY2F0b3I6OkpTR0NIZWFwUGFnZXMpOworICAgIGlmICghc3RhdGljX2Nhc3Q8Ym9v
bD4oYWxsb2NhdGlvbikpCisgICAgICAgIENSQVNIKCk7CisgICAgUmVnaW9uKiByZWdpb24gPSBz
dGF0aWNfY2FzdDxSZWdpb24qPihhbGxvY2F0aW9uLmJhc2UoKSk7CisgICAgcmVnaW9uLT5tX2Fs
bG9jYXRpb24gPSBtX2FsbG9jYXRpb247CisgICAgcmVnaW9uLT5tX2FsbG9jdG9yID0gdGhpczsK
KyAgICBzdGFydEJ1bXBpbmdJbihyZWdpb24pOworICAgIHJlZ2lvbi0+bV9uZXh0ID0gbV9yZWdp
b25IZWFkOworICAgIG1fcmVnaW9uSGVhZCA9IHJlZ2lvbjsKKyAgICAKKyAgICB2b2lkKiByZXN1
bHQgPSBidW1wQWxsb2NhdGUoKTsKKyAgICBBU1NFUlQocmVzdWx0KTsKKyAgICByZXR1cm4gcmVz
dWx0OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgordm9pZCBBbGxvY2F0b3I6OmZyZWVSZWdp
b25zU3RhcnRpbmdBdChSZWdpb24qIHJlZ2lvbikKK3sKKyAgICB3aGlsZSAocmVnaW9uKSB7Cisg
ICAgICAgIFJlZ2lvbiogbmV4dFJlZ2lvbiA9IHJlZ2lvbi0+bV9uZXh0OworICAgICAgICByZWdp
b24tPm1fYWxsb2NhdGlvbi5kZWFsbG9jYXRlKCk7CisgICAgICAgIHJlZ2lvbiA9IG5leHRSZWdp
b247CisgICAgfQorfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgordm9pZCBBbGxvY2F0b3I6OnN0
YXJ0QnVtcGluZ0luKFJlZ2lvbiogcmVnaW9uKQoreworICAgIG1fYnVtcEVuZCA9IHJlZ2lvbi0+
ZGF0YSgpICsgUmVnaW9uOjpudW1iZXJPZlRoaW5nc1BlclJlZ2lvbigpOworICAgIG1fYnVtcFJl
bWFpbmluZyA9IFJlZ2lvbjo6bnVtYmVyT2ZUaGluZ3NQZXJSZWdpb24oKTsKK30KKworfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRp
ZiAvLyBERkdBbGxvY2F0b3JfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0FyZ3VtZW50c1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRzU2ltcGxpZmljYXRpb25QaGFzZS5jcHAJKHJl
dmlzaW9uIDE0MDYxNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRz
U2ltcGxpZmljYXRpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE0OSwxMSArMTQ5LDEwIEBA
IHB1YmxpYzoKICAgICAgICAgICAgIGlmICghYmxvY2spCiAgICAgICAgICAgICAgICAgY29udGlu
dWU7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGluZGV4SW5CbG9jayA9IDA7IGluZGV4SW5C
bG9jayA8IGJsb2NrLT5zaXplKCk7ICsraW5kZXhJbkJsb2NrKSB7Ci0gICAgICAgICAgICAgICAg
Tm9kZUluZGV4IG5vZGVJbmRleCA9IGJsb2NrLT5hdChpbmRleEluQmxvY2spOwotICAgICAgICAg
ICAgICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW25vZGVJbmRleF07Ci0gICAgICAgICAgICAgICAg
aWYgKCFub2RlLnNob3VsZEdlbmVyYXRlKCkpCisgICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9
IGJsb2NrLT5hdChpbmRleEluQmxvY2spOworICAgICAgICAgICAgICAgIGlmICghbm9kZS0+c2hv
dWxkR2VuZXJhdGUoKSkKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAg
ICAgICAgc3dpdGNoIChub2RlLm9wKCkpIHsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUt
Pm9wKCkpIHsKICAgICAgICAgICAgICAgICBjYXNlIENyZWF0ZUFyZ3VtZW50czogewogICAgICAg
ICAgICAgICAgICAgICAvLyBJZ25vcmUgdGhpcyBvcC4gSWYgd2Ugc2VlIGEgbG9uZSBDcmVhdGVB
cmd1bWVudHMgdGhlbiB3ZSB3YW50IHRvCiAgICAgICAgICAgICAgICAgICAgIC8vIGNvbXBsZXRl
bHkgaWdub3JlIGl0IGJlY2F1c2U6CkBAIC0xNzMsMTYgKzE3MiwxNiBAQCBwdWJsaWM6CiAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBjYXNl
IFNldExvY2FsOiB7Ci0gICAgICAgICAgICAgICAgICAgIE5vZGUmIHNvdXJjZSA9IG1fZ3JhcGhb
bm9kZS5jaGlsZDEoKV07Ci0gICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSog
dmFyaWFibGVBY2Nlc3NEYXRhID0gbm9kZS52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKKyAgICAgICAg
ICAgICAgICAgICAgTm9kZSogc291cmNlID0gbm9kZS0+Y2hpbGQxKCkubm9kZSgpOworICAgICAg
ICAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9IG5v
ZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOwogICAgICAgICAgICAgICAgICAgICBpbnQgYXJndW1l
bnRzUmVnaXN0ZXIgPQotICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC51bmNoZWNrZWRB
cmd1bWVudHNSZWdpc3RlckZvcihub2RlLmNvZGVPcmlnaW4pOwotICAgICAgICAgICAgICAgICAg
ICBpZiAoc291cmNlLm9wKCkgIT0gQ3JlYXRlQXJndW1lbnRzICYmIHNvdXJjZS5vcCgpICE9IFBo
YW50b21Bcmd1bWVudHMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgudW5jaGVj
a2VkQXJndW1lbnRzUmVnaXN0ZXJGb3Iobm9kZS0+Y29kZU9yaWdpbik7CisgICAgICAgICAgICAg
ICAgICAgIGlmIChzb3VyY2UtPm9wKCkgIT0gQ3JlYXRlQXJndW1lbnRzICYmIHNvdXJjZS0+b3Ao
KSAhPSBQaGFudG9tQXJndW1lbnRzKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBNYWtl
IHN1cmUgdGhhdCB0aGUgc291cmNlIG9mIHRoZSBTZXRMb2NhbCBrbm93cyB0aGF0IGlmIGl0J3MK
ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGEgdmFyaWFibGUgdGhhdCB3ZSB0aGluayBpcyBh
bGlhc2VkIHRvIHRoZSBhcmd1bWVudHMsIHRoZW4gaXQKICAgICAgICAgICAgICAgICAgICAgICAg
IC8vIG1heSBlc2NhcGUgYXQgdGhpcyBwb2ludC4gSW4gZnV0dXJlLCB3ZSBjb3VsZCB0cmFjayB0
cmFuc2l0aXZlCiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhbGlhc2luZy4gQnV0IG5vdCB5
ZXQuCi0gICAgICAgICAgICAgICAgICAgICAgICBvYnNlcnZlQmFkQXJndW1lbnRzVXNlKG5vZGUu
Y2hpbGQxKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZUJhZEFyZ3VtZW50c1Vz
ZShzb3VyY2UpOwogICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBJZiB0aGlzIGlzIGFuIGFzc2lnbm1lbnQgdG8gdGhlIGFyZ3VtZW50cyByZWdpc3Rl
ciwgdGhlbgogICAgICAgICAgICAgICAgICAgICAgICAgLy8gcHJldGVuZCBhcyBpZiB0aGUgYXJn
dW1lbnRzIHdlcmUgY3JlYXRlZC4gV2UgZG9uJ3Qgd2FudCB0bwpAQCAtMTk1LDE0ICsxOTQsMTQg
QEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICAgICAgLy8gaW5pdF9sYXp5X3JlZyBzaW5j
ZSBpdCB0cmVhdHMgQ3JlYXRlQXJndW1lbnRzIGFzIHJlYWRpbmcKICAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIGxvY2FsIHZhcmlhYmxlcy4gVGhhdCBjb3VsZCBiZSBmaXhlZCwgYnV0IGl0J3Mg
ZWFzaWVyIHRvCiAgICAgICAgICAgICAgICAgICAgICAgICAvLyB3b3JrIGFyb3VuZCB0aGlzIGhl
cmUuCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc291cmNlLm9wKCkgPT0gSlNDb25zdGFu
dAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmICFzb3VyY2UudmFsdWVPZkpTQ29uc3Rh
bnQoY29kZUJsb2NrKCkpKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNvdXJjZS0+b3Ao
KSA9PSBKU0NvbnN0YW50CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgIXNvdXJjZS0+
dmFsdWVPZkpTQ29uc3RhbnQoY29kZUJsb2NrKCkpKQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoYXJndW1lbnRzUmVnaXN0ZXIgIT0gSW52YWxpZFZpcnR1YWxSZWdpc3RlcgogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICYmICh2YXJpYWJsZUFjY2Vzc0RhdGEtPmxvY2FsKCkg
PT0gYXJndW1lbnRzUmVnaXN0ZXIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwg
dmFyaWFibGVBY2Nlc3NEYXRhLT5sb2NhbCgpID09IHVubW9kaWZpZWRBcmd1bWVudHNSZWdpc3Rl
cihhcmd1bWVudHNSZWdpc3RlcikpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9j
cmVhdGVzQXJndW1lbnRzLmFkZChub2RlLmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBtX2NyZWF0ZXNBcmd1bWVudHMuYWRkKG5vZGUtPmNv
ZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KIApAQCAtMjE0LDE5ICsyMTMsMTkgQEAg
cHVibGljOgogICAgICAgICAgICAgICAgICAgICAgICAgQXJndW1lbnRzQWxpYXNpbmdEYXRhJiBk
YXRhID0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2FyZ3VtZW50c0FsaWFzaW5nLmZp
bmQodmFyaWFibGVBY2Nlc3NEYXRhKS0+dmFsdWU7CiAgICAgICAgICAgICAgICAgICAgICAgICBk
YXRhLm1lcmdlTm9uQXJndW1lbnRzQXNzaWdubWVudCgpOwotICAgICAgICAgICAgICAgICAgICAg
ICAgZGF0YS5tZXJnZUNhbGxDb250ZXh0KG5vZGUuY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUp
OworICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5tZXJnZUNhbGxDb250ZXh0KG5vZGUtPmNv
ZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIGlmIChhcmd1bWVu
dHNSZWdpc3RlciAhPSBJbnZhbGlkVmlydHVhbFJlZ2lzdGVyCiAgICAgICAgICAgICAgICAgICAg
ICAgICAmJiAodmFyaWFibGVBY2Nlc3NEYXRhLT5sb2NhbCgpID09IGFyZ3VtZW50c1JlZ2lzdGVy
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgdmFyaWFibGVBY2Nlc3NEYXRhLT5sb2Nh
bCgpID09IHVubW9kaWZpZWRBcmd1bWVudHNSZWdpc3Rlcihhcmd1bWVudHNSZWdpc3RlcikpKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS5jb2RlT3JpZ2luLmlubGluZUNhbGxG
cmFtZSA9PSBzb3VyY2UuY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpCisgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAobm9kZS0+Y29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUgPT0gc291cmNl
LT5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fY3JlYXRlc0FyZ3VtZW50cy5hZGQo
c291cmNlLmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIG1fY3JlYXRlc0FyZ3VtZW50cy5hZGQoc291cmNlLT5jb2RlT3JpZ2luLmlubGluZUNhbGxG
cmFtZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgICAgICBpZiAodmFyaWFibGVBY2Nlc3NEYXRhLT5pc0NhcHR1
cmVkKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fY3JlYXRlc0FyZ3VtZW50cy5hZGQo
c291cmNlLmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIG1fY3JlYXRlc0FyZ3VtZW50cy5hZGQoc291cmNlLT5jb2RlT3JpZ2luLmlubGluZUNhbGxG
cmFtZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgICAgICBBcmd1bWVudHNBbGlhc2luZ0RhdGEmIGRhdGEgPQpA
QCAtMjM0LDI5ICsyMzMsMjkgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICBkYXRhLm1l
cmdlQXJndW1lbnRzQXNzaWdubWVudCgpOwogICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGVu
c3VyZXMgdGhhdCB0aGUgdmFyaWFibGUncyB1c2VzIGFyZSBpbiB0aGUgc2FtZSBjb250ZXh0IGFz
CiAgICAgICAgICAgICAgICAgICAgIC8vIHRoZSBhcmd1bWVudHMgaXQgaXMgYWxpYXNpbmcuCi0g
ICAgICAgICAgICAgICAgICAgIGRhdGEubWVyZ2VDYWxsQ29udGV4dChub2RlLmNvZGVPcmlnaW4u
aW5saW5lQ2FsbEZyYW1lKTsKLSAgICAgICAgICAgICAgICAgICAgZGF0YS5tZXJnZUNhbGxDb250
ZXh0KHNvdXJjZS5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSk7CisgICAgICAgICAgICAgICAg
ICAgIGRhdGEubWVyZ2VDYWxsQ29udGV4dChub2RlLT5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFt
ZSk7CisgICAgICAgICAgICAgICAgICAgIGRhdGEubWVyZ2VDYWxsQ29udGV4dChzb3VyY2UtPmNv
ZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBj
YXNlIEdldExvY2FsOgogICAgICAgICAgICAgICAgIGNhc2UgUGhpOiB7Ci0gICAgICAgICAgICAg
ICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhID0gbm9kZS52YXJp
YWJsZUFjY2Vzc0RhdGEoKTsKKyAgICAgICAgICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRh
KiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKICAgICAg
ICAgICAgICAgICAgICAgaWYgKHZhcmlhYmxlQWNjZXNzRGF0YS0+aXNDYXB0dXJlZCgpKQogICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIEFyZ3VtZW50
c0FsaWFzaW5nRGF0YSYgZGF0YSA9CiAgICAgICAgICAgICAgICAgICAgICAgICBtX2FyZ3VtZW50
c0FsaWFzaW5nLmZpbmQodmFyaWFibGVBY2Nlc3NEYXRhKS0+dmFsdWU7Ci0gICAgICAgICAgICAg
ICAgICAgIGRhdGEubWVyZ2VDYWxsQ29udGV4dChub2RlLmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZy
YW1lKTsKKyAgICAgICAgICAgICAgICAgICAgZGF0YS5tZXJnZUNhbGxDb250ZXh0KG5vZGUtPmNv
ZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBj
YXNlIEZsdXNoOiB7Ci0gICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFy
aWFibGVBY2Nlc3NEYXRhID0gbm9kZS52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKKyAgICAgICAgICAg
ICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBub2RlLT52
YXJpYWJsZUFjY2Vzc0RhdGEoKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKHZhcmlhYmxlQWNj
ZXNzRGF0YS0+aXNDYXB0dXJlZCgpKQogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICAgICAgICAgIEFyZ3VtZW50c0FsaWFzaW5nRGF0YSYgZGF0YSA9CiAgICAgICAg
ICAgICAgICAgICAgICAgICBtX2FyZ3VtZW50c0FsaWFzaW5nLmZpbmQodmFyaWFibGVBY2Nlc3NE
YXRhKS0+dmFsdWU7Ci0gICAgICAgICAgICAgICAgICAgIGRhdGEubWVyZ2VDYWxsQ29udGV4dChu
b2RlLmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgZGF0
YS5tZXJnZUNhbGxDb250ZXh0KG5vZGUtPmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKTsKICAg
ICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIC8vIElmIGEgdmFyaWFibGUg
aXMgdXNlZCBpbiBhIGZsdXNoIHRoZW4gYnkgZGVmaW5pdGlvbiBpdCBlc2NhcGVzLgogICAgICAg
ICAgICAgICAgICAgICBkYXRhLmVzY2FwZXMgPSB0cnVlOwpAQCAtMjY0LDE4ICsyNjMsMTggQEAg
cHVibGljOgogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAg
ICAgICAgICAgY2FzZSBTZXRBcmd1bWVudDogewotICAgICAgICAgICAgICAgICAgICBWYXJpYWJs
ZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9IG5vZGUudmFyaWFibGVBY2Nlc3NEYXRh
KCk7CisgICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nl
c3NEYXRhID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CiAgICAgICAgICAgICAgICAgICAg
IGlmICh2YXJpYWJsZUFjY2Vzc0RhdGEtPmlzQ2FwdHVyZWQoKSkKICAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICBBcmd1bWVudHNBbGlhc2luZ0RhdGEm
IGRhdGEgPQogICAgICAgICAgICAgICAgICAgICAgICAgbV9hcmd1bWVudHNBbGlhc2luZy5maW5k
KHZhcmlhYmxlQWNjZXNzRGF0YSktPnZhbHVlOwogICAgICAgICAgICAgICAgICAgICBkYXRhLm1l
cmdlTm9uQXJndW1lbnRzQXNzaWdubWVudCgpOwotICAgICAgICAgICAgICAgICAgICBkYXRhLm1l
cmdlQ2FsbENvbnRleHQobm9kZS5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSk7CisgICAgICAg
ICAgICAgICAgICAgIGRhdGEubWVyZ2VDYWxsQ29udGV4dChub2RlLT5jb2RlT3JpZ2luLmlubGlu
ZUNhbGxGcmFtZSk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgY2FzZSBHZXRCeVZhbDog
ewotICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS5hcnJheU1vZGUoKS50eXBlKCkgIT0gQXJy
YXk6OkFyZ3VtZW50cykgeworICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS0+YXJyYXlNb2Rl
KCkudHlwZSgpICE9IEFycmF5OjpBcmd1bWVudHMpIHsKICAgICAgICAgICAgICAgICAgICAgICAg
IG9ic2VydmVCYWRBcmd1bWVudHNVc2VzKG5vZGUpOwogICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIH0KQEAgLTI4MywxOCArMjgyLDE4IEBAIHB1Ymxp
YzoKICAgICAgICAgICAgICAgICAgICAgLy8gVGhhdCdzIHNvIGF3ZnVsIGFuZCBwcmV0dHkgbXVj
aCBpbXBvc3NpYmxlIHNpbmNlIGl0IHdvdWxkCiAgICAgICAgICAgICAgICAgICAgIC8vIGltcGx5
IHRoYXQgdGhlIGFyZ3VtZW50cyB3ZXJlIHByZWRpY3RlZCBpbnRlZ2VyLCBidXQgaXQncwogICAg
ICAgICAgICAgICAgICAgICAvLyBnb29kIHRvIGJlIGRlZmVuc2l2ZSBhbmQgdGhvcm91Z2guCi0g
ICAgICAgICAgICAgICAgICAgIG9ic2VydmVCYWRBcmd1bWVudHNVc2Uobm9kZS5jaGlsZDIoKSk7
Ci0gICAgICAgICAgICAgICAgICAgIG9ic2VydmVQcm9wZXJBcmd1bWVudHNVc2Uobm9kZSwgbm9k
ZS5jaGlsZDEoKSk7CisgICAgICAgICAgICAgICAgICAgIG9ic2VydmVCYWRBcmd1bWVudHNVc2Uo
bm9kZS0+Y2hpbGQyKCkubm9kZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZVByb3Bl
ckFyZ3VtZW50c1VzZShub2RlLCBub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAg
ICAgICAgICAgY2FzZSBHZXRBcnJheUxlbmd0aDogewotICAgICAgICAgICAgICAgICAgICBpZiAo
bm9kZS5hcnJheU1vZGUoKS50eXBlKCkgIT0gQXJyYXk6OkFyZ3VtZW50cykgeworICAgICAgICAg
ICAgICAgICAgICBpZiAobm9kZS0+YXJyYXlNb2RlKCkudHlwZSgpICE9IEFycmF5OjpBcmd1bWVu
dHMpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIG9ic2VydmVCYWRBcmd1bWVudHNVc2VzKG5v
ZGUpOwogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBvYnNlcnZl
UHJvcGVyQXJndW1lbnRzVXNlKG5vZGUsIG5vZGUuY2hpbGQxKCkpOworICAgICAgICAgICAgICAg
ICAgICBvYnNlcnZlUHJvcGVyQXJndW1lbnRzVXNlKG5vZGUsIG5vZGUtPmNoaWxkMSgpKTsKICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgICAgICAKQEAgLTMzNSwxNiArMzM0LDE1IEBAIHB1YmxpYzoKICAgICAgICAgICAgIGlmICgh
YmxvY2spCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGluZGV4SW5CbG9jayA9IDA7IGluZGV4SW5CbG9jayA8IGJsb2NrLT5zaXplKCk7ICsraW5k
ZXhJbkJsb2NrKSB7Ci0gICAgICAgICAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRleCA9IGJsb2Nr
LT5hdChpbmRleEluQmxvY2spOwotICAgICAgICAgICAgICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBo
W25vZGVJbmRleF07Ci0gICAgICAgICAgICAgICAgaWYgKCFub2RlLnNob3VsZEdlbmVyYXRlKCkp
CisgICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5hdChpbmRleEluQmxvY2spOwor
ICAgICAgICAgICAgICAgIGlmICghbm9kZS0+c2hvdWxkR2VuZXJhdGUoKSkKICAgICAgICAgICAg
ICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGUub3AoKSAhPSBTZXRM
b2NhbCkKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSAhPSBTZXRMb2NhbCkKICAgICAg
ICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgTm9kZSYgc291cmNlID0g
bV9ncmFwaFtub2RlLmNoaWxkMSgpXTsKLSAgICAgICAgICAgICAgICBpZiAoc291cmNlLm9wKCkg
IT0gQ3JlYXRlQXJndW1lbnRzKQorICAgICAgICAgICAgICAgIE5vZGUqIHNvdXJjZSA9IG5vZGUt
PmNoaWxkMSgpLm5vZGUoKTsKKyAgICAgICAgICAgICAgICBpZiAoc291cmNlLT5vcCgpICE9IENy
ZWF0ZUFyZ3VtZW50cykKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAg
ICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBub2RlLnZhcmlh
YmxlQWNjZXNzRGF0YSgpOworICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFy
aWFibGVBY2Nlc3NEYXRhID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CiAgICAgICAgICAg
ICAgICAgaWYgKHZhcmlhYmxlQWNjZXNzRGF0YS0+aXNDYXB0dXJlZCgpKSB7CiAgICAgICAgICAg
ICAgICAgICAgIC8vIFRoZSBjYXB0dXJlZCBjYXNlIHdvdWxkIGhhdmUgYWxyZWFkeSBiZWVuIHRh
a2VuIGNhcmUgb2YgaW4gdGhlCiAgICAgICAgICAgICAgICAgICAgIC8vIHByZXZpb3VzIHBhc3Mu
CkBAIC0zNTYsNyArMzU0LDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIGlmIChkYXRhLmlz
VmFsaWQoKSkKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAg
Ci0gICAgICAgICAgICAgICAgbV9jcmVhdGVzQXJndW1lbnRzLmFkZChzb3VyY2UuY29kZU9yaWdp
bi5pbmxpbmVDYWxsRnJhbWUpOworICAgICAgICAgICAgICAgIG1fY3JlYXRlc0FyZ3VtZW50cy5h
ZGQoc291cmNlLT5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSk7CiAgICAgICAgICAgICB9CiAg
ICAgICAgIH0KICAgICAgICAgCkBAIC00MTQsMjQgKzQxMiwyMyBAQCBwdWJsaWM6CiAgICAgICAg
ICAgICBpZiAoIWJsb2NrKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpbmRleEluQmxvY2sgPSAwOyBpbmRleEluQmxvY2sgPCBibG9jay0+c2l6
ZSgpOyArK2luZGV4SW5CbG9jaykgewotICAgICAgICAgICAgICAgIE5vZGVJbmRleCBub2RlSW5k
ZXggPSBibG9jay0+YXQoaW5kZXhJbkJsb2NrKTsKLSAgICAgICAgICAgICAgICBOb2RlJiBub2Rl
ID0gbV9ncmFwaFtub2RlSW5kZXhdOwotICAgICAgICAgICAgICAgIGlmICghbm9kZS5zaG91bGRH
ZW5lcmF0ZSgpKQorICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+YXQoaW5kZXhJ
bkJsb2NrKTsKKyAgICAgICAgICAgICAgICBpZiAoIW5vZGUtPnNob3VsZEdlbmVyYXRlKCkpCiAg
ICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIAotICAgICAgICAg
ICAgICAgIHN3aXRjaCAobm9kZS5vcCgpKSB7CisgICAgICAgICAgICAgICAgc3dpdGNoIChub2Rl
LT5vcCgpKSB7CiAgICAgICAgICAgICAgICAgY2FzZSBTZXRMb2NhbDogewotICAgICAgICAgICAg
ICAgICAgICBOb2RlJiBzb3VyY2UgPSBtX2dyYXBoW25vZGUuY2hpbGQxKCldOwotICAgICAgICAg
ICAgICAgICAgICBpZiAoc291cmNlLm9wKCkgIT0gQ3JlYXRlQXJndW1lbnRzKQorICAgICAgICAg
ICAgICAgICAgICBOb2RlKiBzb3VyY2UgPSBub2RlLT5jaGlsZDEoKS5ub2RlKCk7CisgICAgICAg
ICAgICAgICAgICAgIGlmIChzb3VyY2UtPm9wKCkgIT0gQ3JlYXRlQXJndW1lbnRzKQogICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAg
ICAgICAgICAgICBpZiAobV9jcmVhdGVzQXJndW1lbnRzLmNvbnRhaW5zKHNvdXJjZS5jb2RlT3Jp
Z2luLmlubGluZUNhbGxGcmFtZSkpCisgICAgICAgICAgICAgICAgICAgIGlmIChtX2NyZWF0ZXNB
cmd1bWVudHMuY29udGFpbnMoc291cmNlLT5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSkpCiAg
ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgCi0gICAg
ICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhID0g
bm9kZS52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKKyAgICAgICAgICAgICAgICAgICAgVmFyaWFibGVB
Y2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEo
KTsKICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIGlmIChtX2dyYXBo
LmFyZ3VtZW50c1JlZ2lzdGVyRm9yKG5vZGUuY29kZU9yaWdpbikgPT0gdmFyaWFibGVBY2Nlc3NE
YXRhLT5sb2NhbCgpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICB8fCB1bm1vZGlmaWVkQXJn
dW1lbnRzUmVnaXN0ZXIobV9ncmFwaC5hcmd1bWVudHNSZWdpc3RlckZvcihub2RlLmNvZGVPcmln
aW4pKSA9PSB2YXJpYWJsZUFjY2Vzc0RhdGEtPmxvY2FsKCkpCisgICAgICAgICAgICAgICAgICAg
IGlmIChtX2dyYXBoLmFyZ3VtZW50c1JlZ2lzdGVyRm9yKG5vZGUtPmNvZGVPcmlnaW4pID09IHZh
cmlhYmxlQWNjZXNzRGF0YS0+bG9jYWwoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwg
dW5tb2RpZmllZEFyZ3VtZW50c1JlZ2lzdGVyKG1fZ3JhcGguYXJndW1lbnRzUmVnaXN0ZXJGb3Io
bm9kZS0+Y29kZU9yaWdpbikpID09IHZhcmlhYmxlQWNjZXNzRGF0YS0+bG9jYWwoKSkKICAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgICAgICAgICAgICAgIEFTU0VSVCgh
dmFyaWFibGVBY2Nlc3NEYXRhLT5pc0NhcHR1cmVkKCkpOwpAQCAtNDY5LDE2ICs0NjYsMTYgQEAg
cHVibGljOgogICAgICAgICAgICAgICAgIGNhc2UgRm9yd2FyZFN0cnVjdHVyZVRyYW5zaXRpb25X
YXRjaHBvaW50OgogICAgICAgICAgICAgICAgIGNhc2UgQ2hlY2tBcnJheTogewogICAgICAgICAg
ICAgICAgICAgICAvLyBXZSBjYW4ganVzdCBnZXQgcmlkIG9mIHRoaXMgbm9kZSwgaWYgaXQgcmVm
ZXJlbmNlcyBhIHBoYW50b20gYXJndW1lbnQuCi0gICAgICAgICAgICAgICAgICAgIGlmICghaXNP
S1RvT3B0aW1pemUobV9ncmFwaFtub2RlLmNoaWxkMSgpXSkpCisgICAgICAgICAgICAgICAgICAg
IGlmICghaXNPS1RvT3B0aW1pemUobm9kZS0+Y2hpbGQxKCkubm9kZSgpKSkKICAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLmRlcmVmKG5v
ZGUuY2hpbGQxKCkpOwotICAgICAgICAgICAgICAgICAgICBub2RlLnNldE9wQW5kRGVmYXVsdEZs
YWdzKFBoYW50b20pOwotICAgICAgICAgICAgICAgICAgICBub2RlLmNoaWxkcmVuLnNldENoaWxk
MShFZGdlKCkpOworICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLmRlcmVmKG5vZGUtPmNoaWxk
MSgpKTsKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+c2V0T3BBbmREZWZhdWx0RmxhZ3MoUGhh
bnRvbSk7CisgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkcmVuLnNldENoaWxkMShFZGdl
KCkpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGNhc2UgR2V0QnlWYWw6IHsKLSAgICAg
ICAgICAgICAgICAgICAgaWYgKG5vZGUuYXJyYXlNb2RlKCkudHlwZSgpICE9IEFycmF5OjpBcmd1
bWVudHMpCisgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS50eXBlKCkg
IT0gQXJyYXk6OkFyZ3VtZW50cykKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogCiAg
ICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgY2FuIGJlIHNpbXBsaWZpZWQgdG8gR2V0TXlBcmd1
bWVudEJ5VmFsIGlmIHdlIGtub3cgdGhhdApAQCAtNDg4LDI4ICs0ODUsMjggQEAgcHVibGljOgog
ICAgICAgICAgICAgICAgICAgICAvLyAyKSBJdHMgZmlyc3QgY2hpbGQgaXMgQ3JlYXRlQXJndW1l
bnRzIGFuZCBpdHMgSW5saW5lQ2FsbEZyYW1lKgogICAgICAgICAgICAgICAgICAgICAvLyAgICBp
cyBub3QgbWFya2VkIGFzIGNyZWF0aW5nIGFyZ3VtZW50cy4KICAgICAgICAgICAgICAgICAgICAg
Ci0gICAgICAgICAgICAgICAgICAgIGlmICghaXNPS1RvT3B0aW1pemUobV9ncmFwaFtub2RlLmNo
aWxkMSgpXSkpCisgICAgICAgICAgICAgICAgICAgIGlmICghaXNPS1RvT3B0aW1pemUobm9kZS0+
Y2hpbGQxKCkubm9kZSgpKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5kZXJlZihub2RlLmNo
aWxkMSgpKTsKLSAgICAgICAgICAgICAgICAgICAgbm9kZS5jaGlsZHJlbi5jaGlsZDEoKSA9IG5v
ZGUuY2hpbGRyZW4uY2hpbGQyKCk7Ci0gICAgICAgICAgICAgICAgICAgIG5vZGUuY2hpbGRyZW4u
Y2hpbGQyKCkgPSBFZGdlKCk7Ci0gICAgICAgICAgICAgICAgICAgIG5vZGUuc2V0T3BBbmREZWZh
dWx0RmxhZ3MoR2V0TXlBcmd1bWVudEJ5VmFsKTsKKyAgICAgICAgICAgICAgICAgICAgbV9ncmFw
aC5kZXJlZihub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxk
cmVuLmNoaWxkMSgpID0gbm9kZS0+Y2hpbGRyZW4uY2hpbGQyKCk7CisgICAgICAgICAgICAgICAg
ICAgIG5vZGUtPmNoaWxkcmVuLmNoaWxkMigpID0gRWRnZSgpOworICAgICAgICAgICAgICAgICAg
ICBub2RlLT5zZXRPcEFuZERlZmF1bHRGbGFncyhHZXRNeUFyZ3VtZW50QnlWYWwpOwogICAgICAg
ICAgICAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgLS1pbmRl
eEluQmxvY2s7IC8vIEZvcmNlIHJlY29uc2lkZXJhdGlvbiBvZiB0aGlzIG9wIG5vdyB0aGF0IGl0
J3MgYSBHZXRNeUFyZ3VtZW50QnlWYWwuCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgY2Fz
ZSBHZXRBcnJheUxlbmd0aDogewotICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS5hcnJheU1v
ZGUoKS50eXBlKCkgIT0gQXJyYXk6OkFyZ3VtZW50cykKKyAgICAgICAgICAgICAgICAgICAgaWYg
KG5vZGUtPmFycmF5TW9kZSgpLnR5cGUoKSAhPSBBcnJheTo6QXJndW1lbnRzKQogICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAg
ICAgICAgICBpZiAoIWlzT0tUb09wdGltaXplKG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0pKQorICAg
ICAgICAgICAgICAgICAgICBpZiAoIWlzT0tUb09wdGltaXplKG5vZGUtPmNoaWxkMSgpLm5vZGUo
KSkpCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAg
Ci0gICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguZGVyZWYobm9kZS5jaGlsZDEoKSk7Ci0gICAg
ICAgICAgICAgICAgICAgIG5vZGUuY2hpbGRyZW4uY2hpbGQxKCkgPSBFZGdlKCk7Ci0gICAgICAg
ICAgICAgICAgICAgIG5vZGUuc2V0T3BBbmREZWZhdWx0RmxhZ3MoR2V0TXlBcmd1bWVudHNMZW5n
dGgpOworICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLmRlcmVmKG5vZGUtPmNoaWxkMSgpKTsK
KyAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGRyZW4uY2hpbGQxKCkgPSBFZGdlKCk7Cisg
ICAgICAgICAgICAgICAgICAgIG5vZGUtPnNldE9wQW5kRGVmYXVsdEZsYWdzKEdldE15QXJndW1l
bnRzTGVuZ3RoKTsKICAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCA9IHRydWU7CiAgICAgICAg
ICAgICAgICAgICAgIC0taW5kZXhJbkJsb2NrOyAvLyBGb3JjZSByZWNvbnNpZGVyYXRpb24gb2Yg
dGhpcyBvcCBub2V3IHRoYXQgaXQncyBhIEdldE15QXJndW1lbnRzTGVuZ3RoLgogICAgICAgICAg
ICAgICAgICAgICBicmVhazsKQEAgLTUxNywxNiArNTE0LDE2IEBAIHB1YmxpYzoKICAgICAgICAg
ICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgY2FzZSBHZXRNeUFyZ3VtZW50c0xlbmd0aDoK
ICAgICAgICAgICAgICAgICBjYXNlIEdldE15QXJndW1lbnRzTGVuZ3RoU2FmZTogewotICAgICAg
ICAgICAgICAgICAgICBpZiAobV9jcmVhdGVzQXJndW1lbnRzLmNvbnRhaW5zKG5vZGUuY29kZU9y
aWdpbi5pbmxpbmVDYWxsRnJhbWUpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQo
bm9kZS5vcCgpID09IEdldE15QXJndW1lbnRzTGVuZ3RoU2FmZSk7CisgICAgICAgICAgICAgICAg
ICAgIGlmIChtX2NyZWF0ZXNBcmd1bWVudHMuY29udGFpbnMobm9kZS0+Y29kZU9yaWdpbi5pbmxp
bmVDYWxsRnJhbWUpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQobm9kZS0+b3Ao
KSA9PSBHZXRNeUFyZ3VtZW50c0xlbmd0aFNhZmUpOwogICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgaWYgKG5v
ZGUub3AoKSA9PSBHZXRNeUFyZ3VtZW50c0xlbmd0aFNhZmUpIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIG5vZGUuc2V0T3AoR2V0TXlBcmd1bWVudHNMZW5ndGgpOworICAgICAgICAgICAgICAg
ICAgICBpZiAobm9kZS0+b3AoKSA9PSBHZXRNeUFyZ3VtZW50c0xlbmd0aFNhZmUpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIG5vZGUtPnNldE9wKEdldE15QXJndW1lbnRzTGVuZ3RoKTsKICAg
ICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBDb2RlT3JpZ2lu
IGNvZGVPcmlnaW4gPSBub2RlLmNvZGVPcmlnaW47CisgICAgICAgICAgICAgICAgICAgIENvZGVP
cmlnaW4gY29kZU9yaWdpbiA9IG5vZGUtPmNvZGVPcmlnaW47CiAgICAgICAgICAgICAgICAgICAg
IGlmICghY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpCiAgICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgCkBAIC01MzcsMzIgKzUzNCwzMiBAQCBwdWJs
aWM6CiAgICAgICAgICAgICAgICAgICAgICAgICBDaGVja0FyZ3VtZW50c05vdENyZWF0ZWQsIGNv
ZGVPcmlnaW4pOwogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgbV9n
cmFwaC5jb252ZXJ0VG9Db25zdGFudCgKLSAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVJbmRl
eCwganNOdW1iZXIoY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50cy5zaXplKCkg
LSAxKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBub2RlLCBqc051bWJlcihjb2RlT3JpZ2lu
LmlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzLnNpemUoKSAtIDEpKTsKICAgICAgICAgICAgICAg
ICAgICAgY2hhbmdlZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgY2FzZSBH
ZXRNeUFyZ3VtZW50QnlWYWw6CiAgICAgICAgICAgICAgICAgY2FzZSBHZXRNeUFyZ3VtZW50QnlW
YWxTYWZlOiB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChtX2NyZWF0ZXNBcmd1bWVudHMuY29u
dGFpbnMobm9kZS5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSkpIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIEFTU0VSVChub2RlLm9wKCkgPT0gR2V0TXlBcmd1bWVudEJ5VmFsU2FmZSk7Cisg
ICAgICAgICAgICAgICAgICAgIGlmIChtX2NyZWF0ZXNBcmd1bWVudHMuY29udGFpbnMobm9kZS0+
Y29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBB
U1NFUlQobm9kZS0+b3AoKSA9PSBHZXRNeUFyZ3VtZW50QnlWYWxTYWZlKTsKICAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgICAgIGlmIChub2RlLm9wKCkgPT0gR2V0TXlBcmd1bWVudEJ5VmFsU2FmZSkgewotICAgICAg
ICAgICAgICAgICAgICAgICAgbm9kZS5zZXRPcChHZXRNeUFyZ3VtZW50QnlWYWwpOworICAgICAg
ICAgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBHZXRNeUFyZ3VtZW50QnlWYWxTYWZlKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5zZXRPcChHZXRNeUFyZ3VtZW50QnlWYWwp
OwogICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCA9IHRydWU7CiAgICAgICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgaWYgKCFub2RlLmNvZGVPcmlnaW4uaW5saW5l
Q2FsbEZyYW1lKQorICAgICAgICAgICAgICAgICAgICBpZiAoIW5vZGUtPmNvZGVPcmlnaW4uaW5s
aW5lQ2FsbEZyYW1lKQogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAgICAgICAgIGlmICghbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5oYXNDb25zdGFudCgpKQorICAg
ICAgICAgICAgICAgICAgICBpZiAoIW5vZGUtPmNoaWxkMSgpLT5oYXNDb25zdGFudCgpKQogICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIEpTVmFsdWUg
dmFsdWUgPSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLnZhbHVlT2ZKU0NvbnN0YW50KGNvZGVCbG9j
aygpKTsKKyAgICAgICAgICAgICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IG5vZGUtPmNoaWxkMSgp
LT52YWx1ZU9mSlNDb25zdGFudChjb2RlQmxvY2soKSk7CiAgICAgICAgICAgICAgICAgICAgIGlm
ICghdmFsdWUuaXNJbnQzMigpKQogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICAgICAgICAgIGludDMyX3QgaW5kZXggPSB2YWx1ZS5hc0ludDMyKCk7CiAgICAgICAg
ICAgICAgICAgICAgIGlmIChpbmRleCA8IDAKICAgICAgICAgICAgICAgICAgICAgICAgIHx8IHN0
YXRpY19jYXN0PHNpemVfdD4oaW5kZXggKyAxKSA+PQotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG5vZGUuY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50cy5zaXplKCkpCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y29kZU9yaWdpbi5pbmxpbmVDYWxsRnJh
bWUtPmFyZ3VtZW50cy5zaXplKCkpCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIC8vIFdlIGtub3cgd2hpY2gg
YXJndW1lbnQgdGhpcyBpcyBhY2Nlc3NpbmcuIEJ1dCBvbmx5IGFmdGVyIHdlIGhhdmUgY2hlY2tl
ZApAQCAtNTc0LDEzICs1NzEsMTMgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICAvLyBo
YXMgcnVuIC0gdGhlcmVmb3JlIGl0IG1ha2VzIGxpdHRsZSBzZW5zZSB0byBsaW5rIHRoZSBHZXRM
b2NhbCBvcGVyYXRpb24KICAgICAgICAgICAgICAgICAgICAgLy8gaW50byB0aGUgVmFyaWFibGVB
Y2Nlc3NEYXRhIGFuZCBQaGkgZ3JhcGhzLgogCi0gICAgICAgICAgICAgICAgICAgIENvZGVPcmln
aW4gY29kZU9yaWdpbiA9IG5vZGUuY29kZU9yaWdpbjsKLSAgICAgICAgICAgICAgICAgICAgQWRq
YWNlbmN5TGlzdCBjaGlsZHJlbiA9IG5vZGUuY2hpbGRyZW47CisgICAgICAgICAgICAgICAgICAg
IENvZGVPcmlnaW4gY29kZU9yaWdpbiA9IG5vZGUtPmNvZGVPcmlnaW47CisgICAgICAgICAgICAg
ICAgICAgIEFkamFjZW5jeUxpc3QgY2hpbGRyZW4gPSBub2RlLT5jaGlsZHJlbjsKICAgICAgICAg
ICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIG5vZGUuY29udmVydFRvR2V0TG9jYWxV
bmxpbmtlZCgKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y29udmVydFRvR2V0TG9jYWxVbmxp
bmtlZCgKICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rl
cj4oCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS5jb2RlT3JpZ2luLmlubGluZUNh
bGxGcmFtZS0+c3RhY2tPZmZzZXQgKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3Jh
cGguYmFzZWxpbmVDb2RlQmxvY2tGb3Iobm9kZS5jb2RlT3JpZ2luKS0+YXJndW1lbnRJbmRleEFm
dGVyQ2FwdHVyZShpbmRleCkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5j
b2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG1fZ3JhcGguYmFzZWxpbmVDb2RlQmxvY2tGb3Iobm9kZS0+Y29kZU9yaWdp
biktPmFyZ3VtZW50SW5kZXhBZnRlckNhcHR1cmUoaW5kZXgpKSk7CiAKICAgICAgICAgICAgICAg
ICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCiAgICAgICAgICAgICAgICAgICAgICAgICBp
bmRleEluQmxvY2ssIERvbnRSZWZDaGlsZHJlbiwgRG9udFJlZk5vZGUsIFNwZWNOb25lLCBDaGVj
a0FyZ3VtZW50c05vdENyZWF0ZWQsCkBAIC01OTQsMTMgKzU5MSwxMyBAQCBwdWJsaWM6CiAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBjYXNl
IFRlYXJPZmZBcmd1bWVudHM6IHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG1fY3JlYXRlc0Fy
Z3VtZW50cy5jb250YWlucyhub2RlLmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKSkKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKG1fY3JlYXRlc0FyZ3VtZW50cy5jb250YWlucyhub2RlLT5jb2Rl
T3JpZ2luLmlubGluZUNhbGxGcmFtZSkpCiAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51
ZTsKICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIG5vZGUuc2V0T3BB
bmREZWZhdWx0RmxhZ3MoTm9wKTsKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+c2V0T3BBbmRE
ZWZhdWx0RmxhZ3MoTm9wKTsKICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5jbGVhckFuZERl
cmVmQ2hpbGQxKG5vZGUpOwogICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLmNsZWFyQW5kRGVy
ZWZDaGlsZDIobm9kZSk7Ci0gICAgICAgICAgICAgICAgICAgIG5vZGUuc2V0UmVmQ291bnQoMCk7
CisgICAgICAgICAgICAgICAgICAgIG5vZGUtPnNldFJlZkNvdW50KDApOwogICAgICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIApA
QCAtNjE2LDI1ICs2MTMsMjMgQEAgcHVibGljOgogICAgICAgICAgICAgaWYgKCFibG9jaykKICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW5kZXhJ
bkJsb2NrID0gMDsgaW5kZXhJbkJsb2NrIDwgYmxvY2stPnNpemUoKTsgKytpbmRleEluQmxvY2sp
IHsKLSAgICAgICAgICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4ID0gYmxvY2stPmF0KGluZGV4
SW5CbG9jayk7Ci0gICAgICAgICAgICAgICAgTm9kZSogbm9kZVB0ciA9ICZtX2dyYXBoW25vZGVJ
bmRleF07Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGVQdHItPm9wKCkgIT0gQ3JlYXRlQXJndW1l
bnRzKQorICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+YXQoaW5kZXhJbkJsb2Nr
KTsKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSAhPSBDcmVhdGVBcmd1bWVudHMpCiAg
ICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIC8vIElmIHRoaXMg
aXMgYSBDcmVhdGVBcmd1bWVudHMgZm9yIGFuIElubGluZUNhbGxGcmFtZSogdGhhdCBkb2VzCiAg
ICAgICAgICAgICAgICAgLy8gbm90IGNyZWF0ZSBhcmd1bWVudHMsIHRoZW4gcmVwbGFjZSBpdCB3
aXRoIGEgUGhhbnRvbUFyZ3VtZW50cy4KICAgICAgICAgICAgICAgICAvLyBQaGFudG9tQXJndW1l
bnRzIGlzIGEgbm9uLWV4ZWN1dGluZyBub2RlIHRoYXQganVzdCBpbmRpY2F0ZXMKICAgICAgICAg
ICAgICAgICAvLyB0aGF0IHRoZSBub2RlIHNob3VsZCBiZSByZWlmaWVkIGFzIGFuIGFyZ3VtZW50
cyBvYmplY3Qgb24gT1NSCiAgICAgICAgICAgICAgICAgLy8gZXhpdC4KLSAgICAgICAgICAgICAg
ICBpZiAobV9jcmVhdGVzQXJndW1lbnRzLmNvbnRhaW5zKG5vZGVQdHItPmNvZGVPcmlnaW4uaW5s
aW5lQ2FsbEZyYW1lKSkKKyAgICAgICAgICAgICAgICBpZiAobV9jcmVhdGVzQXJndW1lbnRzLmNv
bnRhaW5zKG5vZGUtPmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKSkKICAgICAgICAgICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGVQdHItPnNob3VsZEdlbmVy
YXRlKCkpIHsKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+c2hvdWxkR2VuZXJhdGUoKSkgewog
ICAgICAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKICAgICAgICAgICAg
ICAgICAgICAgICAgIGluZGV4SW5CbG9jaywgRG9udFJlZkNoaWxkcmVuLCBEb250UmVmTm9kZSwg
U3BlY05vbmUsIFBoYW50b20sCi0gICAgICAgICAgICAgICAgICAgICAgICBub2RlUHRyLT5jb2Rl
T3JpZ2luLCBub2RlUHRyLT5jaGlsZHJlbik7Ci0gICAgICAgICAgICAgICAgICAgIG5vZGVQdHIg
PSAmbV9ncmFwaFtub2RlSW5kZXhdOworICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y29k
ZU9yaWdpbiwgbm9kZS0+Y2hpbGRyZW4pOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICBub2RlUHRyLT5zZXRPcEFuZERlZmF1bHRGbGFncyhQaGFudG9tQXJndW1lbnRzKTsKLSAg
ICAgICAgICAgICAgICBub2RlUHRyLT5jaGlsZHJlbi5yZXNldCgpOworICAgICAgICAgICAgICAg
IG5vZGUtPnNldE9wQW5kRGVmYXVsdEZsYWdzKFBoYW50b21Bcmd1bWVudHMpOworICAgICAgICAg
ICAgICAgIG5vZGUtPmNoaWxkcmVuLnJlc2V0KCk7CiAgICAgICAgICAgICAgICAgY2hhbmdlZCA9
IHRydWU7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpbnNlcnRpb25TZXQuZXhlY3V0ZShi
bG9jayk7CkBAIC02NTQsMjggKzY0OSwyNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgRGVmYXVs
dEhhc2g8VmFyaWFibGVBY2Nlc3NEYXRhKj46Okhhc2gsCiAgICAgICAgICAgICBOdWxsYWJsZUhh
c2hUcmFpdHM8VmFyaWFibGVBY2Nlc3NEYXRhKj4gPiBtX2FyZ3VtZW50c0FsaWFzaW5nOwogCi0g
ICAgdm9pZCBvYnNlcnZlQmFkQXJndW1lbnRzVXNlKEVkZ2UgZWRnZSkKKyAgICB2b2lkIG9ic2Vy
dmVCYWRBcmd1bWVudHNVc2UoTm9kZSogbm9kZSkKICAgICB7Ci0gICAgICAgIGlmICghZWRnZSkK
KyAgICAgICAgaWYgKCFub2RlKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAKLSAgICAg
ICAgTm9kZSYgY2hpbGQgPSBtX2dyYXBoW2VkZ2VdOwotICAgICAgICBzd2l0Y2ggKGNoaWxkLm9w
KCkpIHsKKyAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CiAgICAgICAgIGNhc2UgQ3JlYXRl
QXJndW1lbnRzOiB7Ci0gICAgICAgICAgICBtX2NyZWF0ZXNBcmd1bWVudHMuYWRkKGNoaWxkLmNv
ZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKTsKKyAgICAgICAgICAgIG1fY3JlYXRlc0FyZ3VtZW50
cy5hZGQobm9kZS0+Y29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBjYXNlIEdldExvY2FsOiB7Ci0g
ICAgICAgICAgICBpbnQgYXJndW1lbnRzUmVnaXN0ZXIgPSBtX2dyYXBoLnVuY2hlY2tlZEFyZ3Vt
ZW50c1JlZ2lzdGVyRm9yKGNoaWxkLmNvZGVPcmlnaW4pOworICAgICAgICAgICAgaW50IGFyZ3Vt
ZW50c1JlZ2lzdGVyID0gbV9ncmFwaC51bmNoZWNrZWRBcmd1bWVudHNSZWdpc3RlckZvcihub2Rl
LT5jb2RlT3JpZ2luKTsKICAgICAgICAgICAgIGlmIChhcmd1bWVudHNSZWdpc3RlciAhPSBJbnZh
bGlkVmlydHVhbFJlZ2lzdGVyCi0gICAgICAgICAgICAgICAgJiYgKGNoaWxkLmxvY2FsKCkgPT0g
YXJndW1lbnRzUmVnaXN0ZXIKLSAgICAgICAgICAgICAgICAgICAgfHwgY2hpbGQubG9jYWwoKSA9
PSB1bm1vZGlmaWVkQXJndW1lbnRzUmVnaXN0ZXIoYXJndW1lbnRzUmVnaXN0ZXIpKSkgewotICAg
ICAgICAgICAgICAgIG1fY3JlYXRlc0FyZ3VtZW50cy5hZGQoY2hpbGQuY29kZU9yaWdpbi5pbmxp
bmVDYWxsRnJhbWUpOworICAgICAgICAgICAgICAgICYmIChub2RlLT5sb2NhbCgpID09IGFyZ3Vt
ZW50c1JlZ2lzdGVyCisgICAgICAgICAgICAgICAgICAgIHx8IG5vZGUtPmxvY2FsKCkgPT0gdW5t
b2RpZmllZEFyZ3VtZW50c1JlZ2lzdGVyKGFyZ3VtZW50c1JlZ2lzdGVyKSkpIHsKKyAgICAgICAg
ICAgICAgICBtX2NyZWF0ZXNBcmd1bWVudHMuYWRkKG5vZGUtPmNvZGVPcmlnaW4uaW5saW5lQ2Fs
bEZyYW1lKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIAotICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEg
PSBjaGlsZC52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKKyAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNz
RGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CiAg
ICAgICAgICAgICBpZiAodmFyaWFibGVBY2Nlc3NEYXRhLT5pc0NhcHR1cmVkKCkpCiAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKQEAgLTY4OSwxNiArNjgzLDE1IEBAIHByaXZh
dGU6CiAgICAgICAgIH0KICAgICB9CiAgICAgCi0gICAgdm9pZCBvYnNlcnZlQmFkQXJndW1lbnRz
VXNlcyhOb2RlJiBub2RlKQorICAgIHZvaWQgb2JzZXJ2ZUJhZEFyZ3VtZW50c1VzZXMoTm9kZSog
bm9kZSkKICAgICB7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1fZ3JhcGgubnVtQ2hpbGRy
ZW4obm9kZSk7IGktLTspCi0gICAgICAgICAgICBvYnNlcnZlQmFkQXJndW1lbnRzVXNlKG1fZ3Jh
cGguY2hpbGQobm9kZSwgaSkpOworICAgICAgICAgICAgb2JzZXJ2ZUJhZEFyZ3VtZW50c1VzZSht
X2dyYXBoLmNoaWxkKG5vZGUsIGkpLm5vZGUoKSk7CiAgICAgfQogICAgIAotICAgIHZvaWQgb2Jz
ZXJ2ZVByb3BlckFyZ3VtZW50c1VzZShOb2RlJiBub2RlLCBFZGdlIGVkZ2UpCisgICAgdm9pZCBv
YnNlcnZlUHJvcGVyQXJndW1lbnRzVXNlKE5vZGUqIG5vZGUsIEVkZ2UgZWRnZSkKICAgICB7Ci0g
ICAgICAgIE5vZGUmIGNoaWxkID0gbV9ncmFwaFtlZGdlXTsKLSAgICAgICAgaWYgKGNoaWxkLm9w
KCkgIT0gR2V0TG9jYWwpIHsKKyAgICAgICAgaWYgKGVkZ2UtPm9wKCkgIT0gR2V0TG9jYWwpIHsK
ICAgICAgICAgICAgIC8vIFdoZW4gY2FuIHRoaXMgaGFwcGVuPyBBdCBsZWFzdCB0d28gY2FzZXMg
dGhhdCBJIGNhbiB0aGluawogICAgICAgICAgICAgLy8gb2Y6CiAgICAgICAgICAgICAvLwpAQCAt
NzEwLDE4ICs3MDMsMTggQEAgcHJpdmF0ZToKICAgICAgICAgICAgIC8vCiAgICAgICAgICAgICAv
LyAyKSBJZiB3ZSdyZSBhY2Nlc3NpbmcgYXJndW1lbnRzIHdlIGdvdCBmcm9tIHRoZSBoZWFwIQog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKGNoaWxkLm9wKCkg
PT0gQ3JlYXRlQXJndW1lbnRzCi0gICAgICAgICAgICAgICAgJiYgbm9kZS5jb2RlT3JpZ2luLmlu
bGluZUNhbGxGcmFtZQotICAgICAgICAgICAgICAgICAgICE9IGNoaWxkLmNvZGVPcmlnaW4uaW5s
aW5lQ2FsbEZyYW1lKQotICAgICAgICAgICAgICAgIG1fY3JlYXRlc0FyZ3VtZW50cy5hZGQoY2hp
bGQuY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpOworICAgICAgICAgICAgaWYgKGVkZ2UtPm9w
KCkgPT0gQ3JlYXRlQXJndW1lbnRzCisgICAgICAgICAgICAgICAgJiYgbm9kZS0+Y29kZU9yaWdp
bi5pbmxpbmVDYWxsRnJhbWUKKyAgICAgICAgICAgICAgICAgICAhPSBlZGdlLT5jb2RlT3JpZ2lu
LmlubGluZUNhbGxGcmFtZSkKKyAgICAgICAgICAgICAgICBtX2NyZWF0ZXNBcmd1bWVudHMuYWRk
KGVkZ2UtPmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKTsKICAgICAgICAgICAgIAogICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAg
ICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBjaGlsZC52YXJpYWJs
ZUFjY2Vzc0RhdGEoKTsKLSAgICAgICAgaWYgKGNoaWxkLmxvY2FsKCkgPT0gbV9ncmFwaC51bmNo
ZWNrZWRBcmd1bWVudHNSZWdpc3RlckZvcihjaGlsZC5jb2RlT3JpZ2luKQotICAgICAgICAgICAg
JiYgbm9kZS5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSAhPSBjaGlsZC5jb2RlT3JpZ2luLmlu
bGluZUNhbGxGcmFtZSkgewotICAgICAgICAgICAgbV9jcmVhdGVzQXJndW1lbnRzLmFkZChjaGls
ZC5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSk7CisgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0
YSogdmFyaWFibGVBY2Nlc3NEYXRhID0gZWRnZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CisgICAg
ICAgIGlmIChlZGdlLT5sb2NhbCgpID09IG1fZ3JhcGgudW5jaGVja2VkQXJndW1lbnRzUmVnaXN0
ZXJGb3IoZWRnZS0+Y29kZU9yaWdpbikKKyAgICAgICAgICAgICYmIG5vZGUtPmNvZGVPcmlnaW4u
aW5saW5lQ2FsbEZyYW1lICE9IGVkZ2UtPmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKSB7Cisg
ICAgICAgICAgICBtX2NyZWF0ZXNBcmd1bWVudHMuYWRkKGVkZ2UtPmNvZGVPcmlnaW4uaW5saW5l
Q2FsbEZyYW1lKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCkBAIC03MjksMTgg
KzcyMiwxOCBAQCBwcml2YXRlOgogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAKICAgICAg
ICAgQXJndW1lbnRzQWxpYXNpbmdEYXRhJiBkYXRhID0gbV9hcmd1bWVudHNBbGlhc2luZy5maW5k
KHZhcmlhYmxlQWNjZXNzRGF0YSktPnZhbHVlOwotICAgICAgICBkYXRhLm1lcmdlQ2FsbENvbnRl
eHQobm9kZS5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSk7CisgICAgICAgIGRhdGEubWVyZ2VD
YWxsQ29udGV4dChub2RlLT5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSk7CiAgICAgfQogICAg
IAotICAgIGJvb2wgaXNPS1RvT3B0aW1pemUoTm9kZSYgc291cmNlKQorICAgIGJvb2wgaXNPS1Rv
T3B0aW1pemUoTm9kZSogc291cmNlKQogICAgIHsKLSAgICAgICAgaWYgKG1fY3JlYXRlc0FyZ3Vt
ZW50cy5jb250YWlucyhzb3VyY2UuY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpKQorICAgICAg
ICBpZiAobV9jcmVhdGVzQXJndW1lbnRzLmNvbnRhaW5zKHNvdXJjZS0+Y29kZU9yaWdpbi5pbmxp
bmVDYWxsRnJhbWUpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAKLSAgICAg
ICAgc3dpdGNoIChzb3VyY2Uub3AoKSkgeworICAgICAgICBzd2l0Y2ggKHNvdXJjZS0+b3AoKSkg
ewogICAgICAgICBjYXNlIEdldExvY2FsOiB7Ci0gICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0Rh
dGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9IHNvdXJjZS52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKLSAg
ICAgICAgICAgIGludCBhcmd1bWVudHNSZWdpc3RlciA9IG1fZ3JhcGgudW5jaGVja2VkQXJndW1l
bnRzUmVnaXN0ZXJGb3Ioc291cmNlLmNvZGVPcmlnaW4pOworICAgICAgICAgICAgVmFyaWFibGVB
Y2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBzb3VyY2UtPnZhcmlhYmxlQWNjZXNzRGF0
YSgpOworICAgICAgICAgICAgaW50IGFyZ3VtZW50c1JlZ2lzdGVyID0gbV9ncmFwaC51bmNoZWNr
ZWRBcmd1bWVudHNSZWdpc3RlckZvcihzb3VyY2UtPmNvZGVPcmlnaW4pOwogICAgICAgICAgICAg
aWYgKGFyZ3VtZW50c1JlZ2lzdGVyID09IEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIpCiAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBpZiAoYXJndW1lbnRzUmVnaXN0ZXIgPT0gdmFy
aWFibGVBY2Nlc3NEYXRhLT5sb2NhbCgpKQpAQCAtNzY4LDM4ICs3NjEsMzcgQEAgcHJpdmF0ZToK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICAKLSAgICB2b2lkIHJlbW92ZUFyZ3Vt
ZW50c1JlZmVyZW5jaW5nUGhhbnRvbUNoaWxkKE5vZGUmIG5vZGUsIHVuc2lnbmVkIGVkZ2VJbmRl
eCkKKyAgICB2b2lkIHJlbW92ZUFyZ3VtZW50c1JlZmVyZW5jaW5nUGhhbnRvbUNoaWxkKE5vZGUq
IG5vZGUsIHVuc2lnbmVkIGVkZ2VJbmRleCkKICAgICB7Ci0gICAgICAgIEVkZ2UgZWRnZSA9IG5v
ZGUuY2hpbGRyZW4uY2hpbGQoZWRnZUluZGV4KTsKKyAgICAgICAgRWRnZSBlZGdlID0gbm9kZS0+
Y2hpbGRyZW4uY2hpbGQoZWRnZUluZGV4KTsKICAgICAgICAgaWYgKCFlZGdlKQogICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICAKLSAgICAgICAgTm9kZSYgY2hpbGQgPSBtX2dyYXBoW2VkZ2Vd
OwotICAgICAgICBzd2l0Y2ggKGNoaWxkLm9wKCkpIHsKKyAgICAgICAgc3dpdGNoIChlZGdlLT5v
cCgpKSB7CiAgICAgICAgIGNhc2UgUGhpOiAvLyBBcmlzZXMgaWYgd2UgaGFkIENTRSBvbiBhIEdl
dExvY2FsIG9mIHRoZSBhcmd1bWVudHMgcmVnaXN0ZXIuCiAgICAgICAgIGNhc2UgR2V0TG9jYWw6
IC8vIEFyaXNlcyBpZiB3ZSBoYWQgQ1NFIG9uIGFuIGFyZ3VtZW50cyBhY2Nlc3MgdG8gYSB2YXJp
YWJsZSBhbGlhc2VkIHRvIHRoZSBhcmd1bWVudHMuCiAgICAgICAgIGNhc2UgU2V0TG9jYWw6IHsg
Ly8gQXJpc2VzIGlmIHdlIGhhZCBDU0Ugb24gYSBHZXRMb2NhbCBvZiB0aGUgYXJndW1lbnRzIHJl
Z2lzdGVyLgotICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0Rh
dGEgPSBjaGlsZC52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKKyAgICAgICAgICAgIFZhcmlhYmxlQWNj
ZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhID0gZWRnZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7
CiAgICAgICAgICAgICBib29sIGlzRGVhZEFyZ3VtZW50c1JlZ2lzdGVyID0KICAgICAgICAgICAg
ICAgICB2YXJpYWJsZUFjY2Vzc0RhdGEtPmxvY2FsKCkgPT0KLSAgICAgICAgICAgICAgICAgICAg
bV9ncmFwaC51bmNoZWNrZWRBcmd1bWVudHNSZWdpc3RlckZvcihjaGlsZC5jb2RlT3JpZ2luKQot
ICAgICAgICAgICAgICAgICYmICFtX2NyZWF0ZXNBcmd1bWVudHMuY29udGFpbnMoY2hpbGQuY29k
ZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpOworICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLnVu
Y2hlY2tlZEFyZ3VtZW50c1JlZ2lzdGVyRm9yKGVkZ2UtPmNvZGVPcmlnaW4pCisgICAgICAgICAg
ICAgICAgJiYgIW1fY3JlYXRlc0FyZ3VtZW50cy5jb250YWlucyhlZGdlLT5jb2RlT3JpZ2luLmlu
bGluZUNhbGxGcmFtZSk7CiAgICAgICAgICAgICBib29sIGlzQWxpYXNlZEFyZ3VtZW50c1JlZ2lz
dGVyID0KICAgICAgICAgICAgICAgICAhdmFyaWFibGVBY2Nlc3NEYXRhLT5pc0NhcHR1cmVkKCkK
ICAgICAgICAgICAgICAgICAmJiBtX2FyZ3VtZW50c0FsaWFzaW5nLmZpbmQodmFyaWFibGVBY2Nl
c3NEYXRhKS0+dmFsdWUuaXNWYWxpZCgpCi0gICAgICAgICAgICAgICAgJiYgIW1fY3JlYXRlc0Fy
Z3VtZW50cy5jb250YWlucyhjaGlsZC5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSk7CisgICAg
ICAgICAgICAgICAgJiYgIW1fY3JlYXRlc0FyZ3VtZW50cy5jb250YWlucyhlZGdlLT5jb2RlT3Jp
Z2luLmlubGluZUNhbGxGcmFtZSk7CiAgICAgICAgICAgICBpZiAoIWlzRGVhZEFyZ3VtZW50c1Jl
Z2lzdGVyICYmICFpc0FsaWFzZWRBcmd1bWVudHNSZWdpc3RlcikKICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgIG1fZ3JhcGguZGVyZWYoZWRnZSk7Ci0gICAgICAgICAgICBub2Rl
LmNoaWxkcmVuLnJlbW92ZUVkZ2VGcm9tQmFnKGVkZ2VJbmRleCk7CisgICAgICAgICAgICBub2Rl
LT5jaGlsZHJlbi5yZW1vdmVFZGdlRnJvbUJhZyhlZGdlSW5kZXgpOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBjYXNlIENyZWF0ZUFyZ3VtZW50
czogeyAvLyBBcmlzZXMgaWYgd2UgQ1NFIHR3byBHZXRMb2NhbHMgdG8gdGhlIGFyZ3VtZW50cyBy
ZWdpc3RlciBhbmQgdGhlbiBDU0UgdGhlIHNlY29uZCB1c2Ugb2YgdGhlIEdldExvY2FsIHRvIHRo
ZSBmaXJzdC4KLSAgICAgICAgICAgIGlmIChtX2NyZWF0ZXNBcmd1bWVudHMuY29udGFpbnMoY2hp
bGQuY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpKQorICAgICAgICAgICAgaWYgKG1fY3JlYXRl
c0FyZ3VtZW50cy5jb250YWlucyhlZGdlLT5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSkpCiAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBtX2dyYXBoLmRlcmVmKGVkZ2UpOwot
ICAgICAgICAgICAgbm9kZS5jaGlsZHJlbi5yZW1vdmVFZGdlRnJvbUJhZyhlZGdlSW5kZXgpOwor
ICAgICAgICAgICAgbm9kZS0+Y2hpbGRyZW4ucmVtb3ZlRWRnZUZyb21CYWcoZWRnZUluZGV4KTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlNb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FycmF5TW9kZS5jcHAJKHJldmlzaW9uIDE0MDYxNikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlNb2RlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjQ2LDE0ICsyNDYsMTQgQEAgU3RydWN0dXJlKiBBcnJheU1vZGU6Om9yaWdpbmFs
QXJyYXlTdHJ1YwogICAgIHJldHVybiBvcmlnaW5hbEFycmF5U3RydWN0dXJlKGdyYXBoLCBub2Rl
LmNvZGVPcmlnaW4pOwogfQogCi1ib29sIEFycmF5TW9kZTo6YWxyZWFkeUNoZWNrZWQoR3JhcGgm
IGdyYXBoLCBOb2RlJiBub2RlLCBBYnN0cmFjdFZhbHVlJiB2YWx1ZSwgSW5kZXhpbmdUeXBlIHNo
YXBlKSBjb25zdAorYm9vbCBBcnJheU1vZGU6OmFscmVhZHlDaGVja2VkKEdyYXBoJiBncmFwaCwg
Tm9kZSogbm9kZSwgQWJzdHJhY3RWYWx1ZSYgdmFsdWUsIEluZGV4aW5nVHlwZSBzaGFwZSkgY29u
c3QKIHsKICAgICBzd2l0Y2ggKGFycmF5Q2xhc3MoKSkgewogICAgIGNhc2UgQXJyYXk6Ok9yaWdp
bmFsQXJyYXk6CiAgICAgICAgIHJldHVybiB2YWx1ZS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5o
YXNTaW5nbGV0b24oKQogICAgICAgICAgICAgJiYgKHZhbHVlLm1fY3VycmVudEtub3duU3RydWN0
dXJlLnNpbmdsZXRvbigpLT5pbmRleGluZ1R5cGUoKSAmIEluZGV4aW5nU2hhcGVNYXNrKSA9PSBz
aGFwZQogICAgICAgICAgICAgJiYgKHZhbHVlLm1fY3VycmVudEtub3duU3RydWN0dXJlLnNpbmds
ZXRvbigpLT5pbmRleGluZ1R5cGUoKSAmIElzQXJyYXkpCi0gICAgICAgICAgICAmJiBncmFwaC5n
bG9iYWxPYmplY3RGb3Iobm9kZS5jb2RlT3JpZ2luKS0+aXNPcmlnaW5hbEFycmF5U3RydWN0dXJl
KHZhbHVlLm1fY3VycmVudEtub3duU3RydWN0dXJlLnNpbmdsZXRvbigpKTsKKyAgICAgICAgICAg
ICYmIGdyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5jb2RlT3JpZ2luKS0+aXNPcmlnaW5hbEFy
cmF5U3RydWN0dXJlKHZhbHVlLm1fY3VycmVudEtub3duU3RydWN0dXJlLnNpbmdsZXRvbigpKTsK
ICAgICAgICAgCiAgICAgY2FzZSBBcnJheTo6QXJyYXk6CiAgICAgICAgIGlmIChhcnJheU1vZGVz
QWxyZWFkeUNoZWNrZWQodmFsdWUubV9hcnJheU1vZGVzLCBhc0FycmF5TW9kZXMoc2hhcGUgfCBJ
c0FycmF5KSkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FycmF5TW9kZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlNb2RlLmgJ
KHJldmlzaW9uIDE0MDYxNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlN
b2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTE5Nyw3ICsxOTcsNyBAQCBwdWJsaWM6CiAgICAgCiAg
ICAgQXJyYXlNb2RlIHJlZmluZShTcGVjdWxhdGVkVHlwZSBiYXNlLCBTcGVjdWxhdGVkVHlwZSBp
bmRleCwgU3BlY3VsYXRlZFR5cGUgdmFsdWUgPSBTcGVjTm9uZSwgTm9kZUZsYWdzID0gMCkgY29u
c3Q7CiAgICAgCi0gICAgYm9vbCBhbHJlYWR5Q2hlY2tlZChHcmFwaCYsIE5vZGUmLCBBYnN0cmFj
dFZhbHVlJikgY29uc3Q7CisgICAgYm9vbCBhbHJlYWR5Q2hlY2tlZChHcmFwaCYsIE5vZGUqLCBB
YnN0cmFjdFZhbHVlJikgY29uc3Q7CiAgICAgCiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikg
Y29uc3Q7CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxv
Y2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxv
Y2suaAkocmV2aXNpb24gMTQwNjE2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdC
YXNpY0Jsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTQyLDcgKzQyLDcgQEAgY2xhc3MgR3JhcGg7
CiAKIHR5cGVkZWYgVmVjdG9yIDxCbG9ja0luZGV4LCAyPiBQcmVkZWNlc3Nvckxpc3Q7CiAKLXN0
cnVjdCBCYXNpY0Jsb2NrIDogVmVjdG9yPE5vZGVJbmRleCwgOD4geworc3RydWN0IEJhc2ljQmxv
Y2sgOiBWZWN0b3I8Tm9kZSosIDg+IHsKICAgICBCYXNpY0Jsb2NrKHVuc2lnbmVkIGJ5dGVjb2Rl
QmVnaW4sIHVuc2lnbmVkIG51bUFyZ3VtZW50cywgdW5zaWduZWQgbnVtTG9jYWxzKQogICAgICAg
ICA6IGJ5dGVjb2RlQmVnaW4oYnl0ZWNvZGVCZWdpbikKICAgICAgICAgLCBpc09TUlRhcmdldChm
YWxzZSkKQEAgLTc1LDcgKzc1LDcgQEAgc3RydWN0IEJhc2ljQmxvY2sgOiBWZWN0b3I8Tm9kZUlu
ZGV4LCA4PgogICAgIH0KICAgICAKICAgICBzaXplX3QgbnVtTm9kZXMoKSBjb25zdCB7IHJldHVy
biBwaGlzLnNpemUoKSArIHNpemUoKTsgfQotICAgIE5vZGVJbmRleCBub2RlSW5kZXgoc2l6ZV90
IGkpIGNvbnN0CisgICAgTm9kZSogbm9kZShzaXplX3QgaSkgY29uc3QKICAgICB7CiAgICAgICAg
IGlmIChpIDwgcGhpcy5zaXplKCkpCiAgICAgICAgICAgICByZXR1cm4gcGhpc1tpXTsKQEAgLTgz
LDI2ICs4MywyNiBAQCBzdHJ1Y3QgQmFzaWNCbG9jayA6IFZlY3RvcjxOb2RlSW5kZXgsIDg+CiAg
ICAgfQogICAgIGJvb2wgaXNQaGlJbmRleChzaXplX3QgaSkgY29uc3QgeyByZXR1cm4gaSA8IHBo
aXMuc2l6ZSgpOyB9CiAgICAgCi0gICAgYm9vbCBpc0luUGhpcyhOb2RlSW5kZXggbm9kZUluZGV4
KSBjb25zdAorICAgIGJvb2wgaXNJblBoaXMoTm9kZSogbm9kZSkgY29uc3QKICAgICB7CiAgICAg
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcGhpcy5zaXplKCk7ICsraSkgewotICAgICAgICAg
ICAgaWYgKHBoaXNbaV0gPT0gbm9kZUluZGV4KQorICAgICAgICAgICAgaWYgKHBoaXNbaV0gPT0g
bm9kZSkKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIAotICAgIGJvb2wgaXNJbkJsb2NrKE5vZGVJbmRleCBp
bmRleCkgY29uc3QKKyAgICBib29sIGlzSW5CbG9jayhOb2RlKiBteU5vZGUpIGNvbnN0CiAgICAg
ewogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bU5vZGVzKCk7ICsraSkgewotICAg
ICAgICAgICAgaWYgKG5vZGVJbmRleChpKSA9PSBpbmRleCkKKyAgICAgICAgICAgIGlmIChub2Rl
KGkpID09IG15Tm9kZSkKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIAogI2RlZmluZSBERkdfREVGSU5FX0FQ
UEVORF9OT0RFKHRlbXBsYXRlUHJlLCB0ZW1wbGF0ZVBvc3QsIHR5cGVQYXJhbXMsIHZhbHVlUGFy
YW1zQ29tbWEsIHZhbHVlUGFyYW1zLCB2YWx1ZUFyZ3MpIFwKLSAgICB0ZW1wbGF0ZVByZSB0eXBl
UGFyYW1zIHRlbXBsYXRlUG9zdCBOb2RlSW5kZXggYXBwZW5kTm9kZShHcmFwaCYsIFJlZkNoaWxk
cmVuTW9kZSwgUmVmTm9kZU1vZGUsIFNwZWN1bGF0ZWRUeXBlIHZhbHVlUGFyYW1zQ29tbWEgdmFs
dWVQYXJhbXMpOworICAgIHRlbXBsYXRlUHJlIHR5cGVQYXJhbXMgdGVtcGxhdGVQb3N0IE5vZGUq
IGFwcGVuZE5vZGUoR3JhcGgmLCBSZWZDaGlsZHJlbk1vZGUsIFJlZk5vZGVNb2RlLCBTcGVjdWxh
dGVkVHlwZSB2YWx1ZVBhcmFtc0NvbW1hIHZhbHVlUGFyYW1zKTsKICAgICBERkdfVkFSSUFESUNf
VEVNUExBVEVfRlVOQ1RJT04oREZHX0RFRklORV9BUFBFTkRfTk9ERSkKICN1bmRlZiBERkdfREVG
SU5FX0FQUEVORF9OT0RFCiAgICAgCkBAIC0xMjEsMTEgKzEyMSwxMSBAQCBzdHJ1Y3QgQmFzaWNC
bG9jayA6IFZlY3RvcjxOb2RlSW5kZXgsIDg+CiAjZW5kaWYKICAgICBib29sIGlzUmVhY2hhYmxl
OwogICAgIAotICAgIFZlY3RvcjxOb2RlSW5kZXg+IHBoaXM7CisgICAgVmVjdG9yPE5vZGUqPiBw
aGlzOwogICAgIFByZWRlY2Vzc29yTGlzdCBtX3ByZWRlY2Vzc29yczsKICAgICAKLSAgICBPcGVy
YW5kczxOb2RlSW5kZXgsIE5vZGVJbmRleFRyYWl0cz4gdmFyaWFibGVzQXRIZWFkOwotICAgIE9w
ZXJhbmRzPE5vZGVJbmRleCwgTm9kZUluZGV4VHJhaXRzPiB2YXJpYWJsZXNBdFRhaWw7CisgICAg
T3BlcmFuZHM8Tm9kZSosIE5vZGVQb2ludGVyVHJhaXRzPiB2YXJpYWJsZXNBdEhlYWQ7CisgICAg
T3BlcmFuZHM8Tm9kZSosIE5vZGVQb2ludGVyVHJhaXRzPiB2YXJpYWJsZXNBdFRhaWw7CiAgICAg
CiAgICAgT3BlcmFuZHM8QWJzdHJhY3RWYWx1ZT4gdmFsdWVzQXRIZWFkOwogICAgIE9wZXJhbmRz
PEFic3RyYWN0VmFsdWU+IHZhbHVlc0F0VGFpbDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQmFzaWNCbG9ja0lubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2tJbmxpbmVzLmgJKHJldmlzaW9uIDE0MDYxNikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9ja0lubGluZXMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzQsOSArMzQsOSBAQAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcg
ewogCiAjZGVmaW5lIERGR19ERUZJTkVfQVBQRU5EX05PREUodGVtcGxhdGVQcmUsIHRlbXBsYXRl
UG9zdCwgdHlwZVBhcmFtcywgdmFsdWVQYXJhbXNDb21tYSwgdmFsdWVQYXJhbXMsIHZhbHVlQXJn
cykgXAotICAgIHRlbXBsYXRlUHJlIHR5cGVQYXJhbXMgdGVtcGxhdGVQb3N0IE5vZGVJbmRleCBC
YXNpY0Jsb2NrOjphcHBlbmROb2RlKEdyYXBoJiBncmFwaCwgUmVmQ2hpbGRyZW5Nb2RlIHJlZkNo
aWxkcmVuTW9kZSwgUmVmTm9kZU1vZGUgcmVmTm9kZU1vZGUsIFNwZWN1bGF0ZWRUeXBlIHR5cGUg
dmFsdWVQYXJhbXNDb21tYSB2YWx1ZVBhcmFtcykgXAorICAgIHRlbXBsYXRlUHJlIHR5cGVQYXJh
bXMgdGVtcGxhdGVQb3N0IE5vZGUqIEJhc2ljQmxvY2s6OmFwcGVuZE5vZGUoR3JhcGgmIGdyYXBo
LCBSZWZDaGlsZHJlbk1vZGUgcmVmQ2hpbGRyZW5Nb2RlLCBSZWZOb2RlTW9kZSByZWZOb2RlTW9k
ZSwgU3BlY3VsYXRlZFR5cGUgdHlwZSB2YWx1ZVBhcmFtc0NvbW1hIHZhbHVlUGFyYW1zKSBcCiAg
ICAgeyBcCi0gICAgICAgIE5vZGVJbmRleCByZXN1bHQgPSBncmFwaC5hZGROb2RlKHJlZkNoaWxk
cmVuTW9kZSwgcmVmTm9kZU1vZGUsIHR5cGUgdmFsdWVQYXJhbXNDb21tYSB2YWx1ZUFyZ3MpOyBc
CisgICAgICAgIE5vZGUqIHJlc3VsdCA9IGdyYXBoLmFkZE5vZGUocmVmQ2hpbGRyZW5Nb2RlLCBy
ZWZOb2RlTW9kZSwgdHlwZSB2YWx1ZVBhcmFtc0NvbW1hIHZhbHVlQXJncyk7IFwKICAgICAgICAg
YXBwZW5kKHJlc3VsdCk7IFwKICAgICAgICAgcmV0dXJuIHJlc3VsdDsgXAogICAgIH0KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCShy
ZXZpc2lvbiAxNDA2MTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2Rl
UGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTYxLDI2ICsxNjEsMjYgQEAgcHJpdmF0ZToK
ICAgICAKICAgICAvLyBIYW5kbGUgY2FsbHMuIFRoaXMgcmVzb2x2ZXMgaXNzdWVzIHN1cnJvdW5k
aW5nIGlubGluaW5nIGFuZCBpbnRyaW5zaWNzLgogICAgIHZvaWQgaGFuZGxlQ2FsbChJbnRlcnBy
ZXRlciosIEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIE5vZGVUeXBlIG9wLCBDb2Rl
U3BlY2lhbGl6YXRpb25LaW5kKTsKLSAgICB2b2lkIGVtaXRGdW5jdGlvbkNoZWNrcyhjb25zdCBD
YWxsTGlua1N0YXR1cyYsIE5vZGVJbmRleCBjYWxsVGFyZ2V0LCBpbnQgcmVnaXN0ZXJPZmZzZXQs
IENvZGVTcGVjaWFsaXphdGlvbktpbmQpOworICAgIHZvaWQgZW1pdEZ1bmN0aW9uQ2hlY2tzKGNv
bnN0IENhbGxMaW5rU3RhdHVzJiwgTm9kZSogY2FsbFRhcmdldCwgaW50IHJlZ2lzdGVyT2Zmc2V0
LCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kKTsKICAgICAvLyBIYW5kbGUgaW5saW5pbmcuIFJldHVy
biB0cnVlIGlmIGl0IHN1Y2NlZWRlZCwgZmFsc2UgaWYgd2UgbmVlZCB0byBwbGFudCBhIGNhbGwu
Ci0gICAgYm9vbCBoYW5kbGVJbmxpbmluZyhib29sIHVzZXNSZXN1bHQsIE5vZGVJbmRleCBjYWxs
VGFyZ2V0Tm9kZUluZGV4LCBpbnQgcmVzdWx0T3BlcmFuZCwgY29uc3QgQ2FsbExpbmtTdGF0dXMm
LCBpbnQgcmVnaXN0ZXJPZmZzZXQsIGludCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgdW5z
aWduZWQgbmV4dE9mZnNldCwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCk7CisgICAgYm9vbCBoYW5k
bGVJbmxpbmluZyhib29sIHVzZXNSZXN1bHQsIE5vZGUqIGNhbGxUYXJnZXROb2RlLCBpbnQgcmVz
dWx0T3BlcmFuZCwgY29uc3QgQ2FsbExpbmtTdGF0dXMmLCBpbnQgcmVnaXN0ZXJPZmZzZXQsIGlu
dCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgdW5zaWduZWQgbmV4dE9mZnNldCwgQ29kZVNw
ZWNpYWxpemF0aW9uS2luZCk7CiAgICAgLy8gSGFuZGxlIHNldHRpbmcgdGhlIHJlc3VsdCBvZiBh
biBpbnRyaW5zaWMuCi0gICAgdm9pZCBzZXRJbnRyaW5zaWNSZXN1bHQoYm9vbCB1c2VzUmVzdWx0
LCBpbnQgcmVzdWx0T3BlcmFuZCwgTm9kZUluZGV4KTsKKyAgICB2b2lkIHNldEludHJpbnNpY1Jl
c3VsdChib29sIHVzZXNSZXN1bHQsIGludCByZXN1bHRPcGVyYW5kLCBOb2RlKik7CiAgICAgLy8g
SGFuZGxlIGludHJpbnNpYyBmdW5jdGlvbnMuIFJldHVybiB0cnVlIGlmIGl0IHN1Y2NlZWRlZCwg
ZmFsc2UgaWYgd2UgbmVlZCB0byBwbGFudCBhIGNhbGwuCiAgICAgYm9vbCBoYW5kbGVJbnRyaW5z
aWMoYm9vbCB1c2VzUmVzdWx0LCBpbnQgcmVzdWx0T3BlcmFuZCwgSW50cmluc2ljLCBpbnQgcmVn
aXN0ZXJPZmZzZXQsIGludCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgU3BlY3VsYXRlZFR5
cGUgcHJlZGljdGlvbik7CiAgICAgYm9vbCBoYW5kbGVDb25zdGFudEludGVybmFsRnVuY3Rpb24o
Ym9vbCB1c2VzUmVzdWx0LCBpbnQgcmVzdWx0T3BlcmFuZCwgSW50ZXJuYWxGdW5jdGlvbiosIGlu
dCByZWdpc3Rlck9mZnNldCwgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBTcGVjdWxh
dGVkVHlwZSBwcmVkaWN0aW9uLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kKTsKLSAgICBOb2RlSW5k
ZXggaGFuZGxlR2V0QnlPZmZzZXQoU3BlY3VsYXRlZFR5cGUsIE5vZGVJbmRleCBiYXNlLCB1bnNp
Z25lZCBpZGVudGlmaWVyTnVtYmVyLCBQcm9wZXJ0eU9mZnNldCk7CisgICAgTm9kZSogaGFuZGxl
R2V0QnlPZmZzZXQoU3BlY3VsYXRlZFR5cGUsIE5vZGUqIGJhc2UsIHVuc2lnbmVkIGlkZW50aWZp
ZXJOdW1iZXIsIFByb3BlcnR5T2Zmc2V0KTsKICAgICB2b2lkIGhhbmRsZUdldEJ5T2Zmc2V0KAot
ICAgICAgICBpbnQgZGVzdGluYXRpb25PcGVyYW5kLCBTcGVjdWxhdGVkVHlwZSwgTm9kZUluZGV4
IGJhc2UsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsCisgICAgICAgIGludCBkZXN0aW5hdGlv
bk9wZXJhbmQsIFNwZWN1bGF0ZWRUeXBlLCBOb2RlKiBiYXNlLCB1bnNpZ25lZCBpZGVudGlmaWVy
TnVtYmVyLAogICAgICAgICBQcm9wZXJ0eU9mZnNldCk7CiAgICAgdm9pZCBoYW5kbGVHZXRCeUlk
KAotICAgICAgICBpbnQgZGVzdGluYXRpb25PcGVyYW5kLCBTcGVjdWxhdGVkVHlwZSwgTm9kZUlu
ZGV4IGJhc2UsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsCisgICAgICAgIGludCBkZXN0aW5h
dGlvbk9wZXJhbmQsIFNwZWN1bGF0ZWRUeXBlLCBOb2RlKiBiYXNlLCB1bnNpZ25lZCBpZGVudGlm
aWVyTnVtYmVyLAogICAgICAgICBjb25zdCBHZXRCeUlkU3RhdHVzJik7CiAKLSAgICBOb2RlSW5k
ZXggZ2V0U2NvcGUoYm9vbCBza2lwVG9wLCB1bnNpZ25lZCBza2lwQ291bnQpOworICAgIE5vZGUq
IGdldFNjb3BlKGJvb2wgc2tpcFRvcCwgdW5zaWduZWQgc2tpcENvdW50KTsKICAgICAKICAgICAv
LyBDb252ZXJ0IGEgc2V0IG9mIFJlc29sdmVPcGVyYXRpb25zIGludG8gZ3JhcGggbm9kZXMKLSAg
ICBib29sIHBhcnNlUmVzb2x2ZU9wZXJhdGlvbnMoU3BlY3VsYXRlZFR5cGUsIHVuc2lnbmVkIGlk
ZW50aWZpZXJOdW1iZXIsIHVuc2lnbmVkIG9wZXJhdGlvbnMsIHVuc2lnbmVkIHB1dFRvQmFzZU9w
ZXJhdGlvbiwgTm9kZUluZGV4KiBiYXNlLCBOb2RlSW5kZXgqIHZhbHVlKTsKKyAgICBib29sIHBh
cnNlUmVzb2x2ZU9wZXJhdGlvbnMoU3BlY3VsYXRlZFR5cGUsIHVuc2lnbmVkIGlkZW50aWZpZXJO
dW1iZXIsIHVuc2lnbmVkIG9wZXJhdGlvbnMsIHVuc2lnbmVkIHB1dFRvQmFzZU9wZXJhdGlvbiwg
Tm9kZSoqIGJhc2UsIE5vZGUqKiB2YWx1ZSk7CiAKICAgICAvLyBQcmVwYXJlIHRvIHBhcnNlIGEg
YmxvY2suCiAgICAgdm9pZCBwcmVwYXJlVG9QYXJzZUJsb2NrKCk7CkBAIC0yMTAsNyArMjEwLDcg
QEAgcHJpdmF0ZToKICAgICB9CiAgICAgCiAgICAgLy8gR2V0L1NldCB0aGUgb3BlcmFuZHMvcmVz
dWx0IG9mIGEgYnl0ZWNvZGUgaW5zdHJ1Y3Rpb24uCi0gICAgTm9kZUluZGV4IGdldERpcmVjdChp
bnQgb3BlcmFuZCkKKyAgICBOb2RlKiBnZXREaXJlY3QoaW50IG9wZXJhbmQpCiAgICAgewogICAg
ICAgICAvLyBJcyB0aGlzIGEgY29uc3RhbnQ/CiAgICAgICAgIGlmIChvcGVyYW5kID49IEZpcnN0
Q29uc3RhbnRSZWdpc3RlckluZGV4KSB7CkBAIC0yMjgsNyArMjI4LDcgQEAgcHJpdmF0ZToKICAg
ICAgICAgLy8gTXVzdCBiZSBhIGxvY2FsLgogICAgICAgICByZXR1cm4gZ2V0TG9jYWwoKHVuc2ln
bmVkKW9wZXJhbmQpOwogICAgIH0KLSAgICBOb2RlSW5kZXggZ2V0KGludCBvcGVyYW5kKQorICAg
IE5vZGUqIGdldChpbnQgb3BlcmFuZCkKICAgICB7CiAgICAgICAgIGlmIChvcGVyYW5kID09IEpT
U3RhY2s6OkNhbGxlZSkgewogICAgICAgICAgICAgaWYgKG1faW5saW5lU3RhY2tUb3AtPm1faW5s
aW5lQ2FsbEZyYW1lICYmIG1faW5saW5lU3RhY2tUb3AtPm1faW5saW5lQ2FsbEZyYW1lLT5jYWxs
ZWUpCkBAIC0yNDAsNyArMjQwLDcgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIGdldERpcmVj
dChtX2lubGluZVN0YWNrVG9wLT5yZW1hcE9wZXJhbmQob3BlcmFuZCkpOwogICAgIH0KICAgICBl
bnVtIFNldE1vZGUgeyBOb3JtYWxTZXQsIFNldE9uRW50cnkgfTsKLSAgICB2b2lkIHNldERpcmVj
dChpbnQgb3BlcmFuZCwgTm9kZUluZGV4IHZhbHVlLCBTZXRNb2RlIHNldE1vZGUgPSBOb3JtYWxT
ZXQpCisgICAgdm9pZCBzZXREaXJlY3QoaW50IG9wZXJhbmQsIE5vZGUqIHZhbHVlLCBTZXRNb2Rl
IHNldE1vZGUgPSBOb3JtYWxTZXQpCiAgICAgewogICAgICAgICAvLyBJcyB0aGlzIGFuIGFyZ3Vt
ZW50PwogICAgICAgICBpZiAob3BlcmFuZElzQXJndW1lbnQob3BlcmFuZCkpIHsKQEAgLTI1MSwx
MiArMjUxLDEyIEBAIHByaXZhdGU6CiAgICAgICAgIC8vIE11c3QgYmUgYSBsb2NhbC4KICAgICAg
ICAgc2V0TG9jYWwoKHVuc2lnbmVkKW9wZXJhbmQsIHZhbHVlLCBzZXRNb2RlKTsKICAgICB9Ci0g
ICAgdm9pZCBzZXQoaW50IG9wZXJhbmQsIE5vZGVJbmRleCB2YWx1ZSwgU2V0TW9kZSBzZXRNb2Rl
ID0gTm9ybWFsU2V0KQorICAgIHZvaWQgc2V0KGludCBvcGVyYW5kLCBOb2RlKiB2YWx1ZSwgU2V0
TW9kZSBzZXRNb2RlID0gTm9ybWFsU2V0KQogICAgIHsKICAgICAgICAgc2V0RGlyZWN0KG1faW5s
aW5lU3RhY2tUb3AtPnJlbWFwT3BlcmFuZChvcGVyYW5kKSwgdmFsdWUsIHNldE1vZGUpOwogICAg
IH0KICAgICAKLSAgICB2b2lkIHNldFBhaXIoaW50IG9wZXJhbmQxLCBOb2RlSW5kZXggdmFsdWUx
LCBpbnQgb3BlcmFuZDIsIE5vZGVJbmRleCB2YWx1ZTIpCisgICAgdm9pZCBzZXRQYWlyKGludCBv
cGVyYW5kMSwgTm9kZSogdmFsdWUxLCBpbnQgb3BlcmFuZDIsIE5vZGUqIHZhbHVlMikKICAgICB7
CiAgICAgICAgIC8vIEZpcnN0IGVtaXQgZGVhZCBTZXRMb2NhbHMgZm9yIHRoZSBiZW5lZml0IG9m
IE9TUi4KICAgICAgICAgc2V0KG9wZXJhbmQxLCB2YWx1ZTEpOwpAQCAtMjY3LDQ5ICsyNjcsNDQg
QEAgcHJpdmF0ZToKICAgICAgICAgc2V0KG9wZXJhbmQyLCB2YWx1ZTIpOwogICAgIH0KICAgICAK
LSAgICBOb2RlSW5kZXggaW5qZWN0TGF6eU9wZXJhbmRTcGVjdWxhdGlvbihOb2RlSW5kZXggbm9k
ZUluZGV4KQorICAgIE5vZGUqIGluamVjdExhenlPcGVyYW5kU3BlY3VsYXRpb24oTm9kZSogbm9k
ZSkKICAgICB7Ci0gICAgICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW25vZGVJbmRleF07Ci0gICAg
ICAgIEFTU0VSVChub2RlLm9wKCkgPT0gR2V0TG9jYWwpOwotICAgICAgICBBU1NFUlQobm9kZS5j
b2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXggPT0gbV9jdXJyZW50SW5kZXgpOworICAgICAgICBBU1NF
UlQobm9kZS0+b3AoKSA9PSBHZXRMb2NhbCk7CisgICAgICAgIEFTU0VSVChub2RlLT5jb2RlT3Jp
Z2luLmJ5dGVjb2RlSW5kZXggPT0gbV9jdXJyZW50SW5kZXgpOwogICAgICAgICBTcGVjdWxhdGVk
VHlwZSBwcmVkaWN0aW9uID0gCiAgICAgICAgICAgICBtX2lubGluZVN0YWNrVG9wLT5tX2xhenlP
cGVyYW5kcy5wcmVkaWN0aW9uKAotICAgICAgICAgICAgICAgIExhenlPcGVyYW5kVmFsdWVQcm9m
aWxlS2V5KG1fY3VycmVudEluZGV4LCBub2RlLmxvY2FsKCkpKTsKKyAgICAgICAgICAgICAgICBM
YXp5T3BlcmFuZFZhbHVlUHJvZmlsZUtleShtX2N1cnJlbnRJbmRleCwgbm9kZS0+bG9jYWwoKSkp
OwogI2lmIERGR19FTkFCTEUoREVCVUdfVkVSQk9TRSkKLSAgICAgICAgZGF0YUxvZygiTGF6eSBv
cGVyYW5kIFtAIiwgbm9kZUluZGV4LCAiLCBiYyMiLCBtX2N1cnJlbnRJbmRleCwgIiwgciIsIG5v
ZGUubG9jYWwoKSwgIl0gcHJlZGljdGlvbjogIiwgU3BlY3VsYXRpb25EdW1wKHByZWRpY3Rpb24p
LCAiXG4iKTsKKyAgICAgICAgZGF0YUxvZygiTGF6eSBvcGVyYW5kIFtAIiwgbm9kZS0+aW5kZXgo
KSwgIiwgYmMjIiwgbV9jdXJyZW50SW5kZXgsICIsIHIiLCBub2RlLT5sb2NhbCgpLCAiXSBwcmVk
aWN0aW9uOiAiLCBTcGVjdWxhdGlvbkR1bXAocHJlZGljdGlvbiksICJcbiIpOwogI2VuZGlmCi0g
ICAgICAgIG5vZGUudmFyaWFibGVBY2Nlc3NEYXRhKCktPnByZWRpY3QocHJlZGljdGlvbik7Ci0g
ICAgICAgIHJldHVybiBub2RlSW5kZXg7CisgICAgICAgIG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0
YSgpLT5wcmVkaWN0KHByZWRpY3Rpb24pOworICAgICAgICByZXR1cm4gbm9kZTsKICAgICB9CiAK
ICAgICAvLyBVc2VkIGluIGltcGxlbWVudGluZyBnZXQvc2V0LCBhYm92ZSwgd2hlcmUgdGhlIG9w
ZXJhbmQgaXMgYSBsb2NhbCB2YXJpYWJsZS4KLSAgICBOb2RlSW5kZXggZ2V0TG9jYWwodW5zaWdu
ZWQgb3BlcmFuZCkKKyAgICBOb2RlKiBnZXRMb2NhbCh1bnNpZ25lZCBvcGVyYW5kKQogICAgIHsK
LSAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRleCA9IG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNB
dFRhaWwubG9jYWwob3BlcmFuZCk7CisgICAgICAgIE5vZGUqIG5vZGUgPSBtX2N1cnJlbnRCbG9j
ay0+dmFyaWFibGVzQXRUYWlsLmxvY2FsKG9wZXJhbmQpOwogICAgICAgICBib29sIGlzQ2FwdHVy
ZWQgPSBtX2NvZGVCbG9jay0+aXNDYXB0dXJlZChvcGVyYW5kLCBtX2lubGluZVN0YWNrVG9wLT5t
X2lubGluZUNhbGxGcmFtZSk7CiAgICAgICAgIAotICAgICAgICBpZiAobm9kZUluZGV4ICE9IE5v
Tm9kZSkgewotICAgICAgICAgICAgTm9kZSogbm9kZVB0ciA9ICZtX2dyYXBoW25vZGVJbmRleF07
Ci0gICAgICAgICAgICBpZiAobm9kZVB0ci0+b3AoKSA9PSBGbHVzaCkgeworICAgICAgICBpZiAo
bm9kZSkgeworICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gRmx1c2gpIHsKICAgICAgICAg
ICAgICAgICAvLyBUd28gcG9zc2liaWxpdGllczogZWl0aGVyIHRoZSBibG9jayB3YW50cyB0aGUg
bG9jYWwgdG8gYmUgbGl2ZQogICAgICAgICAgICAgICAgIC8vIGJ1dCBoYXMgbm90IGxvYWRlZCBp
dHMgdmFsdWUsIG9yIGl0IGhhcyBsb2FkZWQgaXRzIHZhbHVlLCBpbgogICAgICAgICAgICAgICAg
IC8vIHdoaWNoIGNhc2Ugd2UncmUgZG9uZS4KLSAgICAgICAgICAgICAgICBub2RlSW5kZXggPSBu
b2RlUHRyLT5jaGlsZDEoKS5pbmRleCgpOwotICAgICAgICAgICAgICAgIE5vZGUmIGZsdXNoQ2hp
bGQgPSBtX2dyYXBoW25vZGVJbmRleF07Ci0gICAgICAgICAgICAgICAgaWYgKGZsdXNoQ2hpbGQu
b3AoKSA9PSBQaGkpIHsKLSAgICAgICAgICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2
YXJpYWJsZUFjY2Vzc0RhdGEgPSBmbHVzaENoaWxkLnZhcmlhYmxlQWNjZXNzRGF0YSgpOworICAg
ICAgICAgICAgICAgIG5vZGUgPSBub2RlLT5jaGlsZDEoKS5ub2RlKCk7CisgICAgICAgICAgICAg
ICAgaWYgKG5vZGUtPm9wKCkgPT0gUGhpKSB7CisgICAgICAgICAgICAgICAgICAgIFZhcmlhYmxl
QWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRh
KCk7CiAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlQWNjZXNzRGF0YS0+bWVyZ2VJc0NhcHR1
cmVkKGlzQ2FwdHVyZWQpOwotICAgICAgICAgICAgICAgICAgICBub2RlSW5kZXggPSBpbmplY3RM
YXp5T3BlcmFuZFNwZWN1bGF0aW9uKGFkZFRvR3JhcGgoR2V0TG9jYWwsIE9wSW5mbyh2YXJpYWJs
ZUFjY2Vzc0RhdGEpLCBub2RlSW5kZXgpKTsKLSAgICAgICAgICAgICAgICAgICAgbV9jdXJyZW50
QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5sb2NhbChvcGVyYW5kKSA9IG5vZGVJbmRleDsKLSAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIG5vZGVJbmRleDsKKyAgICAgICAgICAgICAgICAgICAgbm9k
ZUluZGV4ID0gaW5qZWN0TGF6eU9wZXJhbmRTcGVjdWxhdGlvbihhZGRUb0dyYXBoKEdldExvY2Fs
LCBPcEluZm8odmFyaWFibGVBY2Nlc3NEYXRhKSwgbm9kZSkpOworICAgICAgICAgICAgICAgICAg
ICBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLmxvY2FsKG9wZXJhbmQpID0gbm9kZTsK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGU7CiAgICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIG5vZGVQdHIgPSAmZmx1c2hDaGlsZDsKICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIAotICAgICAgICAgICAgQVNTRVJUKCZtX2dyYXBoW25vZGVJbmRleF0gPT0gbm9kZVB0
cik7Ci0gICAgICAgICAgICBBU1NFUlQobm9kZVB0ci0+b3AoKSAhPSBGbHVzaCk7CisgICAgICAg
ICAgICBBU1NFUlQobm9kZS0+b3AoKSAhPSBGbHVzaCk7CiAKLSAgICAgICAgICAgIG5vZGVQdHIt
PnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5tZXJnZUlzQ2FwdHVyZWQoaXNDYXB0dXJlZCk7CisgICAg
ICAgICAgICBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+bWVyZ2VJc0NhcHR1cmVkKGlzQ2Fw
dHVyZWQpOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKGlzQ2FwdHVyZWQpIHsK
ICAgICAgICAgICAgICAgICAvLyBXZSB3aXNoIHRvIHVzZSB0aGUgc2FtZSB2YXJpYWJsZSBhY2Nl
c3MgZGF0YSBhcyB0aGUgcHJldmlvdXMgYWNjZXNzLApAQCAtMzE3LDE5ICszMTIsMTkgQEAgcHJp
dmF0ZToKICAgICAgICAgICAgICAgICAvLyBrbm93LCBhdCB0aGlzIHN0YWdlIG9mIGNvbXBpbGF0
aW9uLCB0aGUgbG9jYWwgaGFzIGJlZW4gY2xvYmJlcmVkLgogICAgICAgICAgICAgICAgIAogICAg
ICAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSB3ZSBsaW5rIHRvIHRoZSBQaGkgbm9kZSwgbm90IHRv
IHRoZSBHZXRMb2NhbC4KLSAgICAgICAgICAgICAgICBpZiAobm9kZVB0ci0+b3AoKSA9PSBHZXRM
b2NhbCkKLSAgICAgICAgICAgICAgICAgICAgbm9kZUluZGV4ID0gbm9kZVB0ci0+Y2hpbGQxKCku
aW5kZXgoKTsKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBHZXRMb2NhbCkKKyAg
ICAgICAgICAgICAgICAgICAgbm9kZSA9IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKICAgICAgICAg
ICAgICAgICAKLSAgICAgICAgICAgICAgICBOb2RlSW5kZXggbmV3R2V0TG9jYWwgPSBpbmplY3RM
YXp5T3BlcmFuZFNwZWN1bGF0aW9uKAotICAgICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKEdl
dExvY2FsLCBPcEluZm8obm9kZVB0ci0+dmFyaWFibGVBY2Nlc3NEYXRhKCkpLCBub2RlSW5kZXgp
KTsKKyAgICAgICAgICAgICAgICBOb2RlKiBuZXdHZXRMb2NhbCA9IGluamVjdExhenlPcGVyYW5k
U3BlY3VsYXRpb24oCisgICAgICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoR2V0TG9jYWwsIE9w
SW5mbyhub2RlUHRyLT52YXJpYWJsZUFjY2Vzc0RhdGEoKSksIG5vZGUpKTsKICAgICAgICAgICAg
ICAgICBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLmxvY2FsKG9wZXJhbmQpID0gbmV3
R2V0TG9jYWw7CiAgICAgICAgICAgICAgICAgcmV0dXJuIG5ld0dldExvY2FsOwogICAgICAgICAg
ICAgfQogICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAobm9kZVB0ci0+b3AoKSA9PSBHZXRM
b2NhbCkKLSAgICAgICAgICAgICAgICByZXR1cm4gbm9kZUluZGV4OwotICAgICAgICAgICAgQVNT
RVJUKG5vZGVQdHItPm9wKCkgPT0gU2V0TG9jYWwpOwotICAgICAgICAgICAgcmV0dXJuIG5vZGVQ
dHItPmNoaWxkMSgpLmluZGV4KCk7CisgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBHZXRM
b2NhbCkKKyAgICAgICAgICAgICAgICByZXR1cm4gbm9kZTsKKyAgICAgICAgICAgIEFTU0VSVChu
b2RlLT5vcCgpID09IFNldExvY2FsKTsKKyAgICAgICAgICAgIHJldHVybiBub2RlLT5jaGlsZDEo
KS5ub2RlKCk7CiAgICAgICAgIH0KIAogICAgICAgICAvLyBDaGVjayBmb3IgcmVhZHMgb2YgdGVt
cG9yYXJpZXMgZnJvbSBwcmlvciBibG9ja3MsCkBAIC0zMzgsMTYgKzMzMywxNiBAQCBwcml2YXRl
OgogICAgICAgICAKICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0Rh
dGEgPSBuZXdWYXJpYWJsZUFjY2Vzc0RhdGEob3BlcmFuZCwgaXNDYXB0dXJlZCk7CiAgICAgICAg
IAotICAgICAgICBOb2RlSW5kZXggcGhpID0gYWRkVG9HcmFwaChQaGksIE9wSW5mbyh2YXJpYWJs
ZUFjY2Vzc0RhdGEpKTsKKyAgICAgICAgTm9kZSogcGhpID0gYWRkVG9HcmFwaChQaGksIE9wSW5m
byh2YXJpYWJsZUFjY2Vzc0RhdGEpKTsKICAgICAgICAgbV9sb2NhbFBoaVN0YWNrLmFwcGVuZChQ
aGlTdGFja0VudHJ5KG1fY3VycmVudEJsb2NrLCBwaGksIG9wZXJhbmQpKTsKLSAgICAgICAgbm9k
ZUluZGV4ID0gaW5qZWN0TGF6eU9wZXJhbmRTcGVjdWxhdGlvbihhZGRUb0dyYXBoKEdldExvY2Fs
LCBPcEluZm8odmFyaWFibGVBY2Nlc3NEYXRhKSwgcGhpKSk7Ci0gICAgICAgIG1fY3VycmVudEJs
b2NrLT52YXJpYWJsZXNBdFRhaWwubG9jYWwob3BlcmFuZCkgPSBub2RlSW5kZXg7CisgICAgICAg
IG5vZGUgPSBpbmplY3RMYXp5T3BlcmFuZFNwZWN1bGF0aW9uKGFkZFRvR3JhcGgoR2V0TG9jYWws
IE9wSW5mbyh2YXJpYWJsZUFjY2Vzc0RhdGEpLCBwaGkpKTsKKyAgICAgICAgbV9jdXJyZW50Qmxv
Y2stPnZhcmlhYmxlc0F0VGFpbC5sb2NhbChvcGVyYW5kKSA9IG5vZGU7CiAgICAgICAgIAotICAg
ICAgICBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRIZWFkLnNldExvY2FsRmlyc3RUaW1lKG9w
ZXJhbmQsIG5vZGVJbmRleCk7CisgICAgICAgIG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdEhl
YWQuc2V0TG9jYWxGaXJzdFRpbWUob3BlcmFuZCwgbm9kZSk7CiAgICAgICAgIAotICAgICAgICBy
ZXR1cm4gbm9kZUluZGV4OworICAgICAgICByZXR1cm4gbm9kZTsKICAgICB9Ci0gICAgdm9pZCBz
ZXRMb2NhbCh1bnNpZ25lZCBvcGVyYW5kLCBOb2RlSW5kZXggdmFsdWUsIFNldE1vZGUgc2V0TW9k
ZSA9IE5vcm1hbFNldCkKKyAgICB2b2lkIHNldExvY2FsKHVuc2lnbmVkIG9wZXJhbmQsIE5vZGUq
IHZhbHVlLCBTZXRNb2RlIHNldE1vZGUgPSBOb3JtYWxTZXQpCiAgICAgewogICAgICAgICBib29s
IGlzQ2FwdHVyZWQgPSBtX2NvZGVCbG9jay0+aXNDYXB0dXJlZChvcGVyYW5kLCBtX2lubGluZVN0
YWNrVG9wLT5tX2lubGluZUNhbGxGcmFtZSk7CiAgICAgICAgIApAQCAtMzYwLDc3ICszNTUsNzMg
QEAgcHJpdmF0ZToKICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0Rh
dGEgPSBuZXdWYXJpYWJsZUFjY2Vzc0RhdGEob3BlcmFuZCwgaXNDYXB0dXJlZCk7CiAgICAgICAg
IHZhcmlhYmxlQWNjZXNzRGF0YS0+bWVyZ2VTdHJ1Y3R1cmVDaGVja0hvaXN0aW5nRmFpbGVkKAog
ICAgICAgICAgICAgbV9pbmxpbmVTdGFja1RvcC0+bV9leGl0UHJvZmlsZS5oYXNFeGl0U2l0ZSht
X2N1cnJlbnRJbmRleCwgQmFkQ2FjaGUpKTsKLSAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRleCA9
IGFkZFRvR3JhcGgoU2V0TG9jYWwsIE9wSW5mbyh2YXJpYWJsZUFjY2Vzc0RhdGEpLCB2YWx1ZSk7
Ci0gICAgICAgIG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwubG9jYWwob3BlcmFuZCkg
PSBub2RlSW5kZXg7CisgICAgICAgIE5vZGUqIG5vZGUgPSBhZGRUb0dyYXBoKFNldExvY2FsLCBP
cEluZm8odmFyaWFibGVBY2Nlc3NEYXRhKSwgdmFsdWUpOworICAgICAgICBtX2N1cnJlbnRCbG9j
ay0+dmFyaWFibGVzQXRUYWlsLmxvY2FsKG9wZXJhbmQpID0gbm9kZTsKICAgICB9CiAKICAgICAv
LyBVc2VkIGluIGltcGxlbWVudGluZyBnZXQvc2V0LCBhYm92ZSwgd2hlcmUgdGhlIG9wZXJhbmQg
aXMgYW4gYXJndW1lbnQuCi0gICAgTm9kZUluZGV4IGdldEFyZ3VtZW50KHVuc2lnbmVkIG9wZXJh
bmQpCisgICAgTm9kZSogZ2V0QXJndW1lbnQodW5zaWduZWQgb3BlcmFuZCkKICAgICB7CiAgICAg
ICAgIHVuc2lnbmVkIGFyZ3VtZW50ID0gb3BlcmFuZFRvQXJndW1lbnQob3BlcmFuZCk7CiAgICAg
ICAgIEFTU0VSVChhcmd1bWVudCA8IG1fbnVtQXJndW1lbnRzKTsKICAgICAgICAgCi0gICAgICAg
IE5vZGVJbmRleCBub2RlSW5kZXggPSBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLmFy
Z3VtZW50KGFyZ3VtZW50KTsKKyAgICAgICAgTm9kZSogbm9kZSA9IG1fY3VycmVudEJsb2NrLT52
YXJpYWJsZXNBdFRhaWwuYXJndW1lbnQoYXJndW1lbnQpOwogICAgICAgICBib29sIGlzQ2FwdHVy
ZWQgPSBtX2NvZGVCbG9jay0+aXNDYXB0dXJlZChvcGVyYW5kKTsKIAotICAgICAgICBpZiAobm9k
ZUluZGV4ICE9IE5vTm9kZSkgewotICAgICAgICAgICAgTm9kZSogbm9kZVB0ciA9ICZtX2dyYXBo
W25vZGVJbmRleF07Ci0gICAgICAgICAgICBpZiAobm9kZVB0ci0+b3AoKSA9PSBGbHVzaCkgewor
ICAgICAgICBpZiAobm9kZSkgeworICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gRmx1c2gp
IHsKICAgICAgICAgICAgICAgICAvLyBUd28gcG9zc2liaWxpdGllczogZWl0aGVyIHRoZSBibG9j
ayB3YW50cyB0aGUgbG9jYWwgdG8gYmUgbGl2ZQogICAgICAgICAgICAgICAgIC8vIGJ1dCBoYXMg
bm90IGxvYWRlZCBpdHMgdmFsdWUsIG9yIGl0IGhhcyBsb2FkZWQgaXRzIHZhbHVlLCBpbgogICAg
ICAgICAgICAgICAgIC8vIHdoaWNoIGNhc2Ugd2UncmUgZG9uZS4KLSAgICAgICAgICAgICAgICBu
b2RlSW5kZXggPSBub2RlUHRyLT5jaGlsZDEoKS5pbmRleCgpOwotICAgICAgICAgICAgICAgIE5v
ZGUmIGZsdXNoQ2hpbGQgPSBtX2dyYXBoW25vZGVJbmRleF07Ci0gICAgICAgICAgICAgICAgaWYg
KGZsdXNoQ2hpbGQub3AoKSA9PSBQaGkpIHsKLSAgICAgICAgICAgICAgICAgICAgVmFyaWFibGVB
Y2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBmbHVzaENoaWxkLnZhcmlhYmxlQWNjZXNz
RGF0YSgpOworICAgICAgICAgICAgICAgIG5vZGUgPSBub2RlLT5jaGlsZDEoKS5ub2RlKCk7Cisg
ICAgICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gUGhpKSB7CisgICAgICAgICAgICAgICAg
ICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhID0gbm9kZS0+dmFyaWFi
bGVBY2Nlc3NEYXRhKCk7CiAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlQWNjZXNzRGF0YS0+
bWVyZ2VJc0NhcHR1cmVkKGlzQ2FwdHVyZWQpOwotICAgICAgICAgICAgICAgICAgICBub2RlSW5k
ZXggPSBpbmplY3RMYXp5T3BlcmFuZFNwZWN1bGF0aW9uKGFkZFRvR3JhcGgoR2V0TG9jYWwsIE9w
SW5mbyh2YXJpYWJsZUFjY2Vzc0RhdGEpLCBub2RlSW5kZXgpKTsKLSAgICAgICAgICAgICAgICAg
ICAgbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5hcmd1bWVudChhcmd1bWVudCkgPSBu
b2RlSW5kZXg7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBub2RlSW5kZXg7CisgICAgICAg
ICAgICAgICAgICAgIG5vZGUgPSBpbmplY3RMYXp5T3BlcmFuZFNwZWN1bGF0aW9uKGFkZFRvR3Jh
cGgoR2V0TG9jYWwsIE9wSW5mbyh2YXJpYWJsZUFjY2Vzc0RhdGEpLCBub2RlKSk7CisgICAgICAg
ICAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwuYXJndW1lbnQoYXJn
dW1lbnQpID0gbm9kZTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGU7CiAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIG5vZGVQdHIgPSAmZmx1c2hDaGlsZDsKICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAgICAgICAgQVNTRVJUKCZtX2dyYXBoW25vZGVJ
bmRleF0gPT0gbm9kZVB0cik7Ci0gICAgICAgICAgICBBU1NFUlQobm9kZVB0ci0+b3AoKSAhPSBG
bHVzaCk7CisgICAgICAgICAgICBBU1NFUlQobm9kZS0+b3AoKSAhPSBGbHVzaCk7CiAgICAgICAg
ICAgICAKLSAgICAgICAgICAgIG5vZGVQdHItPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5tZXJnZUlz
Q2FwdHVyZWQoaXNDYXB0dXJlZCk7CisgICAgICAgICAgICBub2RlLT52YXJpYWJsZUFjY2Vzc0Rh
dGEoKS0+bWVyZ2VJc0NhcHR1cmVkKGlzQ2FwdHVyZWQpOwogICAgICAgICAgICAgCi0gICAgICAg
ICAgICBpZiAobm9kZVB0ci0+b3AoKSA9PSBTZXRBcmd1bWVudCkgeworICAgICAgICAgICAgaWYg
KG5vZGUtPm9wKCkgPT0gU2V0QXJndW1lbnQpIHsKICAgICAgICAgICAgICAgICAvLyBXZSdyZSBn
ZXR0aW5nIGFuIGFyZ3VtZW50IGluIHRoZSBmaXJzdCBiYXNpYyBibG9jazsgbGluawogICAgICAg
ICAgICAgICAgIC8vIHRoZSBHZXRMb2NhbCB0byB0aGUgU2V0QXJndW1lbnQuCi0gICAgICAgICAg
ICAgICAgQVNTRVJUKG5vZGVQdHItPmxvY2FsKCkgPT0gc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lz
dGVyPihvcGVyYW5kKSk7Ci0gICAgICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJp
YWJsZSA9IG5vZGVQdHItPnZhcmlhYmxlQWNjZXNzRGF0YSgpOwotICAgICAgICAgICAgICAgIG5v
ZGVJbmRleCA9IGluamVjdExhenlPcGVyYW5kU3BlY3VsYXRpb24oYWRkVG9HcmFwaChHZXRMb2Nh
bCwgT3BJbmZvKHZhcmlhYmxlKSwgbm9kZUluZGV4KSk7Ci0gICAgICAgICAgICAgICAgbV9jdXJy
ZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5hcmd1bWVudChhcmd1bWVudCkgPSBub2RlSW5kZXg7
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG5vZGVJbmRleDsKKyAgICAgICAgICAgICAgICBBU1NF
UlQobm9kZS0+bG9jYWwoKSA9PSBzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KG9wZXJhbmQp
KTsKKyAgICAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbm9kZS0+
dmFyaWFibGVBY2Nlc3NEYXRhKCk7CisgICAgICAgICAgICAgICAgbm9kZSA9IGluamVjdExhenlP
cGVyYW5kU3BlY3VsYXRpb24oYWRkVG9HcmFwaChHZXRMb2NhbCwgT3BJbmZvKHZhcmlhYmxlKSwg
bm9kZSkpOworICAgICAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwu
YXJndW1lbnQoYXJndW1lbnQpID0gbm9kZTsKKyAgICAgICAgICAgICAgICByZXR1cm4gbm9kZTsK
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKGlzQ2FwdHVyZWQp
IHsKLSAgICAgICAgICAgICAgICBpZiAobm9kZVB0ci0+b3AoKSA9PSBHZXRMb2NhbCkKLSAgICAg
ICAgICAgICAgICAgICAgbm9kZUluZGV4ID0gbm9kZVB0ci0+Y2hpbGQxKCkuaW5kZXgoKTsKLSAg
ICAgICAgICAgICAgICByZXR1cm4gaW5qZWN0TGF6eU9wZXJhbmRTcGVjdWxhdGlvbihhZGRUb0dy
YXBoKEdldExvY2FsLCBPcEluZm8obm9kZVB0ci0+dmFyaWFibGVBY2Nlc3NEYXRhKCkpLCBub2Rl
SW5kZXgpKTsKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBHZXRMb2NhbCkKKyAg
ICAgICAgICAgICAgICAgICAgbm9kZSA9IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gaW5qZWN0TGF6eU9wZXJhbmRTcGVjdWxhdGlvbihhZGRUb0dyYXBoKEdl
dExvY2FsLCBPcEluZm8obm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCkpLCBub2RlKSk7CiAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChub2RlUHRyLT5vcCgpID09
IEdldExvY2FsKQotICAgICAgICAgICAgICAgIHJldHVybiBub2RlSW5kZXg7CisgICAgICAgICAg
ICBpZiAobm9kZS0+b3AoKSA9PSBHZXRMb2NhbCkKKyAgICAgICAgICAgICAgICByZXR1cm4gbm9k
ZTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgQVNTRVJUKG5vZGVQdHItPm9wKCkgPT0gU2V0
TG9jYWwpOwotICAgICAgICAgICAgcmV0dXJuIG5vZGVQdHItPmNoaWxkMSgpLmluZGV4KCk7Cisg
ICAgICAgICAgICBBU1NFUlQobm9kZS0+b3AoKSA9PSBTZXRMb2NhbCk7CisgICAgICAgICAgICBy
ZXR1cm4gbm9kZS0+Y2hpbGQxKCkubm9kZSgpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAg
ICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9IG5ld1ZhcmlhYmxlQWNj
ZXNzRGF0YShvcGVyYW5kLCBpc0NhcHR1cmVkKTsKIAotICAgICAgICBOb2RlSW5kZXggcGhpID0g
YWRkVG9HcmFwaChQaGksIE9wSW5mbyh2YXJpYWJsZUFjY2Vzc0RhdGEpKTsKKyAgICAgICAgTm9k
ZSogcGhpID0gYWRkVG9HcmFwaChQaGksIE9wSW5mbyh2YXJpYWJsZUFjY2Vzc0RhdGEpKTsKICAg
ICAgICAgbV9hcmd1bWVudFBoaVN0YWNrLmFwcGVuZChQaGlTdGFja0VudHJ5KG1fY3VycmVudEJs
b2NrLCBwaGksIGFyZ3VtZW50KSk7Ci0gICAgICAgIG5vZGVJbmRleCA9IGluamVjdExhenlPcGVy
YW5kU3BlY3VsYXRpb24oYWRkVG9HcmFwaChHZXRMb2NhbCwgT3BJbmZvKHZhcmlhYmxlQWNjZXNz
RGF0YSksIHBoaSkpOwotICAgICAgICBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLmFy
Z3VtZW50KGFyZ3VtZW50KSA9IG5vZGVJbmRleDsKKyAgICAgICAgbm9kZSA9IGluamVjdExhenlP
cGVyYW5kU3BlY3VsYXRpb24oYWRkVG9HcmFwaChHZXRMb2NhbCwgT3BJbmZvKHZhcmlhYmxlQWNj
ZXNzRGF0YSksIHBoaSkpOworICAgICAgICBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWls
LmFyZ3VtZW50KGFyZ3VtZW50KSA9IG5vZGU7CiAgICAgICAgIAotICAgICAgICBtX2N1cnJlbnRC
bG9jay0+dmFyaWFibGVzQXRIZWFkLnNldEFyZ3VtZW50Rmlyc3RUaW1lKGFyZ3VtZW50LCBub2Rl
SW5kZXgpOworICAgICAgICBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRIZWFkLnNldEFyZ3Vt
ZW50Rmlyc3RUaW1lKGFyZ3VtZW50LCBub2RlKTsKICAgICAgICAgCi0gICAgICAgIHJldHVybiBu
b2RlSW5kZXg7CisgICAgICAgIHJldHVybiBub2RlOwogICAgIH0KLSAgICB2b2lkIHNldEFyZ3Vt
ZW50KGludCBvcGVyYW5kLCBOb2RlSW5kZXggdmFsdWUsIFNldE1vZGUgc2V0TW9kZSA9IE5vcm1h
bFNldCkKKyAgICB2b2lkIHNldEFyZ3VtZW50KGludCBvcGVyYW5kLCBOb2RlKiB2YWx1ZSwgU2V0
TW9kZSBzZXRNb2RlID0gTm9ybWFsU2V0KQogICAgIHsKICAgICAgICAgdW5zaWduZWQgYXJndW1l
bnQgPSBvcGVyYW5kVG9Bcmd1bWVudChvcGVyYW5kKTsKICAgICAgICAgQVNTRVJUKGFyZ3VtZW50
IDwgbV9udW1Bcmd1bWVudHMpOwpAQCAtNDQ0LDggKzQzNSw4IEBAIHByaXZhdGU6CiAgICAgICAg
IFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhID0gbmV3VmFyaWFibGVBY2Nl
c3NEYXRhKG9wZXJhbmQsIGlzQ2FwdHVyZWQpOwogICAgICAgICB2YXJpYWJsZUFjY2Vzc0RhdGEt
Pm1lcmdlU3RydWN0dXJlQ2hlY2tIb2lzdGluZ0ZhaWxlZCgKICAgICAgICAgICAgIG1faW5saW5l
U3RhY2tUb3AtPm1fZXhpdFByb2ZpbGUuaGFzRXhpdFNpdGUobV9jdXJyZW50SW5kZXgsIEJhZENh
Y2hlKSk7Ci0gICAgICAgIE5vZGVJbmRleCBub2RlSW5kZXggPSBhZGRUb0dyYXBoKFNldExvY2Fs
LCBPcEluZm8odmFyaWFibGVBY2Nlc3NEYXRhKSwgdmFsdWUpOwotICAgICAgICBtX2N1cnJlbnRC
bG9jay0+dmFyaWFibGVzQXRUYWlsLmFyZ3VtZW50KGFyZ3VtZW50KSA9IG5vZGVJbmRleDsKKyAg
ICAgICAgTm9kZSogbm9kZSA9IGFkZFRvR3JhcGgoU2V0TG9jYWwsIE9wSW5mbyh2YXJpYWJsZUFj
Y2Vzc0RhdGEpLCB2YWx1ZSk7CisgICAgICAgIG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRh
aWwuYXJndW1lbnQoYXJndW1lbnQpID0gbm9kZTsKICAgICB9CiAgICAgCiAgICAgQXJndW1lbnRQ
b3NpdGlvbiogZmluZEFyZ3VtZW50UG9zaXRpb25Gb3JBcmd1bWVudChpbnQgYXJndW1lbnQpCkBA
IC01MDAsNTUgKzQ5MSw1MyBAQCBwcml2YXRlOgogICAgICAgICAKICAgICAgICAgQVNTRVJUKG9w
ZXJhbmQgPCBGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleCk7CiAgICAgICAgIAotICAgICAgICBO
b2RlSW5kZXggbm9kZUluZGV4OworICAgICAgICBOb2RlKiBub2RlOwogICAgICAgICBpbnQgaW5k
ZXg7CiAgICAgICAgIGlmIChvcGVyYW5kSXNBcmd1bWVudChvcGVyYW5kKSkgewogICAgICAgICAg
ICAgaW5kZXggPSBvcGVyYW5kVG9Bcmd1bWVudChvcGVyYW5kKTsKLSAgICAgICAgICAgIG5vZGVJ
bmRleCA9IG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwuYXJndW1lbnQoaW5kZXgpOwor
ICAgICAgICAgICAgbm9kZSA9IG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwuYXJndW1l
bnQoaW5kZXgpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgaW5kZXggPSBvcGVyYW5k
OwotICAgICAgICAgICAgbm9kZUluZGV4ID0gbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFp
bC5sb2NhbChpbmRleCk7CisgICAgICAgICAgICBub2RlID0gbV9jdXJyZW50QmxvY2stPnZhcmlh
Ymxlc0F0VGFpbC5sb2NhbChpbmRleCk7CiAgICAgICAgICAgICBtX3ByZXNlcnZlZFZhcnMuc2V0
KG9wZXJhbmQpOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBpZiAobm9kZUluZGV4ICE9
IE5vTm9kZSkgewotICAgICAgICAgICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhbbm9kZUluZGV4XTsK
LSAgICAgICAgICAgIHN3aXRjaCAobm9kZS5vcCgpKSB7CisgICAgICAgIGlmIChub2RlKSB7Cisg
ICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKICAgICAgICAgICAgIGNhc2UgRmx1c2g6
Ci0gICAgICAgICAgICAgICAgbm9kZUluZGV4ID0gbm9kZS5jaGlsZDEoKS5pbmRleCgpOworICAg
ICAgICAgICAgICAgIG5vZGUgPSBub2RlLT5jaGlsZDEoKS5ub2RlKCk7CiAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIEdldExvY2FsOgotICAgICAgICAgICAgICAgIG5v
ZGVJbmRleCA9IG5vZGUuY2hpbGQxKCkuaW5kZXgoKTsKKyAgICAgICAgICAgICAgICBub2RlID0g
bm9kZS0+Y2hpbGQxKCkubm9kZSgpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIAotICAgICAgICAgICAgQVNTRVJUKG1fZ3JhcGhbbm9kZUluZGV4XS5vcCgpICE9IEZs
dXNoCi0gICAgICAgICAgICAgICAgICAgJiYgbV9ncmFwaFtub2RlSW5kZXhdLm9wKCkgIT0gR2V0
TG9jYWwpOworICAgICAgICAgICAgQVNTRVJUKG5vZGUtPm9wKCkgIT0gRmx1c2ggJiYgbm9kZS0+
b3AoKSAhPSBHZXRMb2NhbCk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIC8vIEVtaXQgYSBG
bHVzaCByZWdhcmRsZXNzIG9mIHdoZXRoZXIgd2UgYWxyZWFkeSBmbHVzaGVkIGl0LgogICAgICAg
ICAgICAgLy8gVGhpcyBnaXZlcyB1cyBndWlkYW5jZSB0byBzZWUgdGhhdCB0aGUgdmFyaWFibGUg
YWxzbyBuZWVkcyB0byBiZSBmbHVzaGVkCiAgICAgICAgICAgICAvLyBmb3IgYXJndW1lbnRzLCBl
dmVuIGlmIGl0IGFscmVhZHkgaGFkIHRvIGJlIGZsdXNoZWQgZm9yIG90aGVyIHJlYXNvbnMuCi0g
ICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9IG5vZGUu
dmFyaWFibGVBY2Nlc3NEYXRhKCk7CisgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZh
cmlhYmxlQWNjZXNzRGF0YSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOwogICAgICAgICAg
ICAgdmFyaWFibGVBY2Nlc3NEYXRhLT5tZXJnZUlzQ2FwdHVyZWQoaXNDYXB0dXJlZCk7Ci0gICAg
ICAgICAgICBhZGRUb0dyYXBoKEZsdXNoLCBPcEluZm8odmFyaWFibGVBY2Nlc3NEYXRhKSwgbm9k
ZUluZGV4KTsKKyAgICAgICAgICAgIGFkZFRvR3JhcGgoRmx1c2gsIE9wSW5mbyh2YXJpYWJsZUFj
Y2Vzc0RhdGEpLCBub2RlKTsKICAgICAgICAgICAgIGlmIChhcmd1bWVudFBvc2l0aW9uKQogICAg
ICAgICAgICAgICAgIGFyZ3VtZW50UG9zaXRpb24tPmFkZFZhcmlhYmxlKHZhcmlhYmxlQWNjZXNz
RGF0YSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAg
IFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhID0gbmV3VmFyaWFibGVBY2Nl
c3NEYXRhKG9wZXJhbmQsIGlzQ2FwdHVyZWQpOwotICAgICAgICBOb2RlSW5kZXggcGhpID0gYWRk
VG9HcmFwaChQaGksIE9wSW5mbyh2YXJpYWJsZUFjY2Vzc0RhdGEpKTsKLSAgICAgICAgbm9kZUlu
ZGV4ID0gYWRkVG9HcmFwaChGbHVzaCwgT3BJbmZvKHZhcmlhYmxlQWNjZXNzRGF0YSksIHBoaSk7
CisgICAgICAgIE5vZGUqIHBoaSA9IGFkZFRvR3JhcGgoUGhpLCBPcEluZm8odmFyaWFibGVBY2Nl
c3NEYXRhKSk7CisgICAgICAgIG5vZGUgPSBhZGRUb0dyYXBoKEZsdXNoLCBPcEluZm8odmFyaWFi
bGVBY2Nlc3NEYXRhKSwgcGhpKTsKICAgICAgICAgaWYgKG9wZXJhbmRJc0FyZ3VtZW50KG9wZXJh
bmQpKSB7CiAgICAgICAgICAgICBtX2FyZ3VtZW50UGhpU3RhY2suYXBwZW5kKFBoaVN0YWNrRW50
cnkobV9jdXJyZW50QmxvY2ssIHBoaSwgaW5kZXgpKTsKLSAgICAgICAgICAgIG1fY3VycmVudEJs
b2NrLT52YXJpYWJsZXNBdFRhaWwuYXJndW1lbnQoaW5kZXgpID0gbm9kZUluZGV4OwotICAgICAg
ICAgICAgbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0SGVhZC5zZXRBcmd1bWVudEZpcnN0VGlt
ZShpbmRleCwgbm9kZUluZGV4KTsKKyAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT52YXJpYWJs
ZXNBdFRhaWwuYXJndW1lbnQoaW5kZXgpID0gbm9kZTsKKyAgICAgICAgICAgIG1fY3VycmVudEJs
b2NrLT52YXJpYWJsZXNBdEhlYWQuc2V0QXJndW1lbnRGaXJzdFRpbWUoaW5kZXgsIG5vZGUpOwog
ICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgbV9sb2NhbFBoaVN0YWNrLmFwcGVuZChQaGlT
dGFja0VudHJ5KG1fY3VycmVudEJsb2NrLCBwaGksIGluZGV4KSk7Ci0gICAgICAgICAgICBtX2N1
cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLmxvY2FsKGluZGV4KSA9IG5vZGVJbmRleDsKLSAg
ICAgICAgICAgIG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdEhlYWQuc2V0TG9jYWxGaXJzdFRp
bWUoaW5kZXgsIG5vZGVJbmRleCk7CisgICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+dmFyaWFi
bGVzQXRUYWlsLmxvY2FsKGluZGV4KSA9IG5vZGU7CisgICAgICAgICAgICBtX2N1cnJlbnRCbG9j
ay0+dmFyaWFibGVzQXRIZWFkLnNldExvY2FsRmlyc3RUaW1lKGluZGV4LCBub2RlKTsKICAgICAg
ICAgfQogICAgICAgICBpZiAoYXJndW1lbnRQb3NpdGlvbikKICAgICAgICAgICAgIGFyZ3VtZW50
UG9zaXRpb24tPmFkZFZhcmlhYmxlKHZhcmlhYmxlQWNjZXNzRGF0YSk7CkBAIC01NzEsMzUgKzU2
MCwzMyBAQCBwcml2YXRlOgogICAgIH0KIAogICAgIC8vIEdldCBhbiBvcGVyYW5kLCBhbmQgcGVy
Zm9ybSBhIFRvSW50MzIvVG9OdW1iZXIgY29udmVyc2lvbiBvbiBpdC4KLSAgICBOb2RlSW5kZXgg
Z2V0VG9JbnQzMihpbnQgb3BlcmFuZCkKKyAgICBOb2RlKiBnZXRUb0ludDMyKGludCBvcGVyYW5k
KQogICAgIHsKICAgICAgICAgcmV0dXJuIHRvSW50MzIoZ2V0KG9wZXJhbmQpKTsKICAgICB9CiAK
ICAgICAvLyBQZXJmb3JtIGFuIEVTNSBUb0ludDMyIG9wZXJhdGlvbiAtIHJldHVybnMgYSBub2Rl
IG9mIHR5cGUgTm9kZVJlc3VsdEludDMyLgotICAgIE5vZGVJbmRleCB0b0ludDMyKE5vZGVJbmRl
eCBpbmRleCkKKyAgICBOb2RlKiB0b0ludDMyKE5vZGUqIG5vZGUpCiAgICAgewotICAgICAgICBO
b2RlJiBub2RlID0gbV9ncmFwaFtpbmRleF07CisgICAgICAgIGlmIChub2RlLT5oYXNJbnQzMlJl
c3VsdCgpKQorICAgICAgICAgICAgcmV0dXJuIG5vZGU7CiAKLSAgICAgICAgaWYgKG5vZGUuaGFz
SW50MzJSZXN1bHQoKSkKLSAgICAgICAgICAgIHJldHVybiBpbmRleDsKLQotICAgICAgICBpZiAo
bm9kZS5vcCgpID09IFVJbnQzMlRvTnVtYmVyKQotICAgICAgICAgICAgcmV0dXJuIG5vZGUuY2hp
bGQxKCkuaW5kZXgoKTsKKyAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gVUludDMyVG9OdW1iZXIp
CisgICAgICAgICAgICByZXR1cm4gbm9kZS0+Y2hpbGQxKCkubm9kZSgpOwogCiAgICAgICAgIC8v
IENoZWNrIGZvciBudW1lcmljIGNvbnN0YW50cyBib3hlZCBhcyBKU1ZhbHVlcy4KLSAgICAgICAg
aWYgKG5vZGUub3AoKSA9PSBKU0NvbnN0YW50KSB7Ci0gICAgICAgICAgICBKU1ZhbHVlIHYgPSB2
YWx1ZU9mSlNDb25zdGFudChpbmRleCk7CisgICAgICAgIGlmIChub2RlLT5vcCgpID09IEpTQ29u
c3RhbnQpIHsKKyAgICAgICAgICAgIEpTVmFsdWUgdiA9IHZhbHVlT2ZKU0NvbnN0YW50KG5vZGUp
OwogICAgICAgICAgICAgaWYgKHYuaXNJbnQzMigpKQotICAgICAgICAgICAgICAgIHJldHVybiBn
ZXRKU0NvbnN0YW50KG5vZGUuY29uc3RhbnROdW1iZXIoKSk7CisgICAgICAgICAgICAgICAgcmV0
dXJuIGdldEpTQ29uc3RhbnQobm9kZS0+Y29uc3RhbnROdW1iZXIoKSk7CiAgICAgICAgICAgICBp
ZiAodi5pc051bWJlcigpKQogICAgICAgICAgICAgICAgIHJldHVybiBnZXRKU0NvbnN0YW50Rm9y
VmFsdWUoSlNWYWx1ZShKU0M6OnRvSW50MzIodi5hc051bWJlcigpKSkpOwogICAgICAgICB9CiAK
LSAgICAgICAgcmV0dXJuIGFkZFRvR3JhcGgoVmFsdWVUb0ludDMyLCBpbmRleCk7CisgICAgICAg
IHJldHVybiBhZGRUb0dyYXBoKFZhbHVlVG9JbnQzMiwgbm9kZSk7CiAgICAgfQogCi0gICAgTm9k
ZUluZGV4IGdldEpTQ29uc3RhbnRGb3JWYWx1ZShKU1ZhbHVlIGNvbnN0YW50VmFsdWUpCisgICAg
Tm9kZSogZ2V0SlNDb25zdGFudEZvclZhbHVlKEpTVmFsdWUgY29uc3RhbnRWYWx1ZSkKICAgICB7
CiAgICAgICAgIHVuc2lnbmVkIGNvbnN0YW50SW5kZXggPSBtX2NvZGVCbG9jay0+YWRkT3JGaW5k
Q29uc3RhbnQoY29uc3RhbnRWYWx1ZSk7CiAgICAgICAgIGlmIChjb25zdGFudEluZGV4ID49IG1f
Y29uc3RhbnRzLnNpemUoKSkKQEAgLTYxMCw1NSArNTk3LDU1IEBAIHByaXZhdGU6CiAgICAgICAg
IHJldHVybiBnZXRKU0NvbnN0YW50KGNvbnN0YW50SW5kZXgpOwogICAgIH0KIAotICAgIE5vZGVJ
bmRleCBnZXRKU0NvbnN0YW50KHVuc2lnbmVkIGNvbnN0YW50KQorICAgIE5vZGUqIGdldEpTQ29u
c3RhbnQodW5zaWduZWQgY29uc3RhbnQpCiAgICAgewotICAgICAgICBOb2RlSW5kZXggaW5kZXgg
PSBtX2NvbnN0YW50c1tjb25zdGFudF0uYXNKU1ZhbHVlOwotICAgICAgICBpZiAoaW5kZXggIT0g
Tm9Ob2RlKQotICAgICAgICAgICAgcmV0dXJuIGluZGV4OworICAgICAgICBOb2RlKiBub2RlID0g
bV9jb25zdGFudHNbY29uc3RhbnRdLmFzSlNWYWx1ZTsKKyAgICAgICAgaWYgKG5vZGUpCisgICAg
ICAgICAgICByZXR1cm4gbm9kZTsKIAotICAgICAgICBOb2RlSW5kZXggcmVzdWx0SW5kZXggPSBh
ZGRUb0dyYXBoKEpTQ29uc3RhbnQsIE9wSW5mbyhjb25zdGFudCkpOwotICAgICAgICBtX2NvbnN0
YW50c1tjb25zdGFudF0uYXNKU1ZhbHVlID0gcmVzdWx0SW5kZXg7Ci0gICAgICAgIHJldHVybiBy
ZXN1bHRJbmRleDsKKyAgICAgICAgTm9kZSogcmVzdWx0ID0gYWRkVG9HcmFwaChKU0NvbnN0YW50
LCBPcEluZm8oY29uc3RhbnQpKTsKKyAgICAgICAgbV9jb25zdGFudHNbY29uc3RhbnRdLmFzSlNW
YWx1ZSA9IHJlc3VsdDsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKLSAgICBOb2Rl
SW5kZXggZ2V0Q2FsbGVlKCkKKyAgICBOb2RlKiBnZXRDYWxsZWUoKQogICAgIHsKICAgICAgICAg
cmV0dXJuIGFkZFRvR3JhcGgoR2V0Q2FsbGVlKTsKICAgICB9CiAKICAgICAvLyBIZWxwZXIgZnVu
Y3Rpb25zIHRvIGdldC9zZXQgdGhlIHRoaXMgdmFsdWUuCi0gICAgTm9kZUluZGV4IGdldFRoaXMo
KQorICAgIE5vZGUqIGdldFRoaXMoKQogICAgIHsKICAgICAgICAgcmV0dXJuIGdldChtX2lubGlu
ZVN0YWNrVG9wLT5tX2NvZGVCbG9jay0+dGhpc1JlZ2lzdGVyKCkpOwogICAgIH0KLSAgICB2b2lk
IHNldFRoaXMoTm9kZUluZGV4IHZhbHVlKQorICAgIHZvaWQgc2V0VGhpcyhOb2RlKiB2YWx1ZSkK
ICAgICB7CiAgICAgICAgIHNldChtX2lubGluZVN0YWNrVG9wLT5tX2NvZGVCbG9jay0+dGhpc1Jl
Z2lzdGVyKCksIHZhbHVlKTsKICAgICB9CiAKICAgICAvLyBDb252ZW5pZW5jZSBtZXRob2RzIGZv
ciBjaGVja2luZyBub2RlcyBmb3IgY29uc3RhbnRzLgotICAgIGJvb2wgaXNKU0NvbnN0YW50KE5v
ZGVJbmRleCBpbmRleCkKKyAgICBib29sIGlzSlNDb25zdGFudChOb2RlKiBub2RlKQogICAgIHsK
LSAgICAgICAgcmV0dXJuIG1fZ3JhcGhbaW5kZXhdLm9wKCkgPT0gSlNDb25zdGFudDsKKyAgICAg
ICAgcmV0dXJuIG5vZGUtPm9wKCkgPT0gSlNDb25zdGFudDsKICAgICB9Ci0gICAgYm9vbCBpc0lu
dDMyQ29uc3RhbnQoTm9kZUluZGV4IG5vZGVJbmRleCkKKyAgICBib29sIGlzSW50MzJDb25zdGFu
dChOb2RlKiBub2RlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGlzSlNDb25zdGFudChub2RlSW5k
ZXgpICYmIHZhbHVlT2ZKU0NvbnN0YW50KG5vZGVJbmRleCkuaXNJbnQzMigpOworICAgICAgICBy
ZXR1cm4gaXNKU0NvbnN0YW50KG5vZGUpICYmIHZhbHVlT2ZKU0NvbnN0YW50KG5vZGUpLmlzSW50
MzIoKTsKICAgICB9CiAgICAgLy8gQ29udmVuaWVuY2UgbWV0aG9kcyBmb3IgZ2V0dGluZyBjb25z
dGFudCB2YWx1ZXMuCi0gICAgSlNWYWx1ZSB2YWx1ZU9mSlNDb25zdGFudChOb2RlSW5kZXggaW5k
ZXgpCisgICAgSlNWYWx1ZSB2YWx1ZU9mSlNDb25zdGFudChOb2RlKiBub2RlKQogICAgIHsKLSAg
ICAgICAgQVNTRVJUKGlzSlNDb25zdGFudChpbmRleCkpOwotICAgICAgICByZXR1cm4gbV9jb2Rl
QmxvY2stPmdldENvbnN0YW50KEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4ICsgbV9ncmFwaFtp
bmRleF0uY29uc3RhbnROdW1iZXIoKSk7CisgICAgICAgIEFTU0VSVChpc0pTQ29uc3RhbnQobm9k
ZSkpOworICAgICAgICByZXR1cm4gbV9jb2RlQmxvY2stPmdldENvbnN0YW50KEZpcnN0Q29uc3Rh
bnRSZWdpc3RlckluZGV4ICsgbm9kZS0+Y29uc3RhbnROdW1iZXIoKSk7CiAgICAgfQotICAgIGlu
dDMyX3QgdmFsdWVPZkludDMyQ29uc3RhbnQoTm9kZUluZGV4IG5vZGVJbmRleCkKKyAgICBpbnQz
Ml90IHZhbHVlT2ZJbnQzMkNvbnN0YW50KE5vZGUqIG5vZGUpCiAgICAgewotICAgICAgICBBU1NF
UlQoaXNJbnQzMkNvbnN0YW50KG5vZGVJbmRleCkpOwotICAgICAgICByZXR1cm4gdmFsdWVPZkpT
Q29uc3RhbnQobm9kZUluZGV4KS5hc0ludDMyKCk7CisgICAgICAgIEFTU0VSVChpc0ludDMyQ29u
c3RhbnQobm9kZSkpOworICAgICAgICByZXR1cm4gdmFsdWVPZkpTQ29uc3RhbnQobm9kZSkuYXNJ
bnQzMigpOwogICAgIH0KICAgICAKICAgICAvLyBUaGlzIG1ldGhvZCByZXR1cm5zIGEgSlNDb25z
dGFudCB3aXRoIHRoZSB2YWx1ZSAndW5kZWZpbmVkJy4KLSAgICBOb2RlSW5kZXggY29uc3RhbnRV
bmRlZmluZWQoKQorICAgIE5vZGUqIGNvbnN0YW50VW5kZWZpbmVkKCkKICAgICB7CiAgICAgICAg
IC8vIEhhcyBtX2NvbnN0YW50VW5kZWZpbmVkIGJlZW4gc2V0IHVwIHlldD8KICAgICAgICAgaWYg
KG1fY29uc3RhbnRVbmRlZmluZWQgPT0gVUlOVF9NQVgpIHsKQEAgLTY4Myw3ICs2NzAsNyBAQCBw
cml2YXRlOgogICAgIH0KIAogICAgIC8vIFRoaXMgbWV0aG9kIHJldHVybnMgYSBKU0NvbnN0YW50
IHdpdGggdGhlIHZhbHVlICdudWxsJy4KLSAgICBOb2RlSW5kZXggY29uc3RhbnROdWxsKCkKKyAg
ICBOb2RlKiBjb25zdGFudE51bGwoKQogICAgIHsKICAgICAgICAgLy8gSGFzIG1fY29uc3RhbnRO
dWxsIGJlZW4gc2V0IHVwIHlldD8KICAgICAgICAgaWYgKG1fY29uc3RhbnROdWxsID09IFVJTlRf
TUFYKSB7CkBAIC03MDgsNyArNjk1LDcgQEAgcHJpdmF0ZToKICAgICB9CiAKICAgICAvLyBUaGlz
IG1ldGhvZCByZXR1cm5zIGEgRG91YmxlQ29uc3RhbnQgd2l0aCB0aGUgdmFsdWUgMS4KLSAgICBO
b2RlSW5kZXggb25lKCkKKyAgICBOb2RlKiBvbmUoKQogICAgIHsKICAgICAgICAgLy8gSGFzIG1f
Y29uc3RhbnQxIGJlZW4gc2V0IHVwIHlldD8KICAgICAgICAgaWYgKG1fY29uc3RhbnQxID09IFVJ
TlRfTUFYKSB7CkBAIC03MzQsNyArNzIxLDcgQEAgcHJpdmF0ZToKICAgICB9CiAgICAgCiAgICAg
Ly8gVGhpcyBtZXRob2QgcmV0dXJucyBhIERvdWJsZUNvbnN0YW50IHdpdGggdGhlIHZhbHVlIE5h
Ti4KLSAgICBOb2RlSW5kZXggY29uc3RhbnROYU4oKQorICAgIE5vZGUqIGNvbnN0YW50TmFOKCkK
ICAgICB7CiAgICAgICAgIEpTVmFsdWUgbmFuID0ganNOYU4oKTsKICAgICAgICAgCkBAIC03NjEs
OSArNzQ4LDkgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIGdldEpTQ29uc3RhbnQobV9jb25z
dGFudE5hTik7CiAgICAgfQogICAgIAotICAgIE5vZGVJbmRleCBjZWxsQ29uc3RhbnQoSlNDZWxs
KiBjZWxsKQorICAgIE5vZGUqIGNlbGxDb25zdGFudChKU0NlbGwqIGNlbGwpCiAgICAgewotICAg
ICAgICBIYXNoTWFwPEpTQ2VsbCosIE5vZGVJbmRleD46OkFkZFJlc3VsdCByZXN1bHQgPSBtX2Nl
bGxDb25zdGFudE5vZGVzLmFkZChjZWxsLCBOb05vZGUpOworICAgICAgICBIYXNoTWFwPEpTQ2Vs
bCosIE5vZGVJbmRleD46OkFkZFJlc3VsdCByZXN1bHQgPSBtX2NlbGxDb25zdGFudE5vZGVzLmFk
ZChjZWxsLCAwKTsKICAgICAgICAgaWYgKHJlc3VsdC5pc05ld0VudHJ5KQogICAgICAgICAgICAg
cmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IGFkZFRvR3JhcGgoV2Vha0pTQ29uc3RhbnQsIE9wSW5m
byhjZWxsKSk7CiAgICAgICAgIApAQCAtNzc3LDYzICs3NjQsNjkgQEAgcHJpdmF0ZToKIAogICAg
IC8vIFRoZXNlIG1ldGhvZHMgY3JlYXRlIGEgbm9kZSBhbmQgYWRkIGl0IHRvIHRoZSBncmFwaC4g
SWYgbm9kZXMgb2YgdGhpcyB0eXBlIGFyZQogICAgIC8vICdtdXN0R2VuZXJhdGUnIHRoZW4gdGhl
IG5vZGUgIHdpbGwgaW1wbGljaXRseSBiZSByZWYnZWQgdG8gZW5zdXJlIGdlbmVyYXRpb24uCi0g
ICAgTm9kZUluZGV4IGFkZFRvR3JhcGgoTm9kZVR5cGUgb3AsIE5vZGVJbmRleCBjaGlsZDEgPSBO
b05vZGUsIE5vZGVJbmRleCBjaGlsZDIgPSBOb05vZGUsIE5vZGVJbmRleCBjaGlsZDMgPSBOb05v
ZGUpCisgICAgTm9kZSogYWRkVG9HcmFwaChOb2RlVHlwZSBvcCwgTm9kZSogY2hpbGQxID0gMCwg
Tm9kZSogY2hpbGQyID0gMCwgTm9kZSogY2hpbGQzID0gMCkKICAgICB7Ci0gICAgICAgIE5vZGVJ
bmRleCByZXN1bHRJbmRleCA9IChOb2RlSW5kZXgpbV9ncmFwaC5zaXplKCk7Ci0gICAgICAgIG1f
Z3JhcGguYXBwZW5kKE5vZGUob3AsIGN1cnJlbnRDb2RlT3JpZ2luKCksIGNoaWxkMSwgY2hpbGQy
LCBjaGlsZDMpKTsKKyAgICAgICAgTm9kZSogcmVzdWx0ID0gbV9ncmFwaC5hZGROb2RlKAorICAg
ICAgICAgICAgRG9udFJlZkNoaWxkcmVuLCBEb250UmVmTm9kZSwgU3BlY05vbmUsCisgICAgICAg
ICAgICBvcCwgY3VycmVudENvZGVPcmlnaW4oKSwgY2hpbGQxLCBjaGlsZDIsIGNoaWxkMyk7CiAg
ICAgICAgIEFTU0VSVChvcCAhPSBQaGkpOwotICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5k
KHJlc3VsdEluZGV4KTsKKyAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZChyZXN1bHQpOwog
CiAgICAgICAgIGlmIChkZWZhdWx0RmxhZ3Mob3ApICYgTm9kZU11c3RHZW5lcmF0ZSkKLSAgICAg
ICAgICAgIG1fZ3JhcGgucmVmKHJlc3VsdEluZGV4KTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdElu
ZGV4OworICAgICAgICAgICAgbV9ncmFwaC5yZWYocmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIHJl
c3VsdDsKICAgICB9Ci0gICAgTm9kZUluZGV4IGFkZFRvR3JhcGgoTm9kZVR5cGUgb3AsIE9wSW5m
byBpbmZvLCBOb2RlSW5kZXggY2hpbGQxID0gTm9Ob2RlLCBOb2RlSW5kZXggY2hpbGQyID0gTm9O
b2RlLCBOb2RlSW5kZXggY2hpbGQzID0gTm9Ob2RlKQorICAgIE5vZGUqIGFkZFRvR3JhcGgoTm9k
ZVR5cGUgb3AsIE9wSW5mbyBpbmZvLCBOb2RlKiBjaGlsZDEgPSAwLCBOb2RlKiBjaGlsZDIgPSAw
LCBOb2RlKiBjaGlsZDMgPSAwKQogICAgIHsKLSAgICAgICAgTm9kZUluZGV4IHJlc3VsdEluZGV4
ID0gKE5vZGVJbmRleCltX2dyYXBoLnNpemUoKTsKLSAgICAgICAgbV9ncmFwaC5hcHBlbmQoTm9k
ZShvcCwgY3VycmVudENvZGVPcmlnaW4oKSwgaW5mbywgY2hpbGQxLCBjaGlsZDIsIGNoaWxkMykp
OworICAgICAgICBOb2RlKiByZXN1bHQgPSBtX2dyYXBoLmFkZE5vZGUoCisgICAgICAgICAgICBE
b250UmVmQ2hpbGRyZW4sIERvbnRSZWZOb2RlLCBTcGVjTm9uZSwKKyAgICAgICAgICAgIG9wLCBj
dXJyZW50Q29kZU9yaWdpbigpLCBpbmZvLCBjaGlsZDEsIGNoaWxkMiwgY2hpbGQzKTsKICAgICAg
ICAgaWYgKG9wID09IFBoaSkKLSAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT5waGlzLmFwcGVu
ZChyZXN1bHRJbmRleCk7CisgICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+cGhpcy5hcHBlbmQo
cmVzdWx0KTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVu
ZChyZXN1bHRJbmRleCk7CisgICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kKHJlc3Vs
dCk7CiAKICAgICAgICAgaWYgKGRlZmF1bHRGbGFncyhvcCkgJiBOb2RlTXVzdEdlbmVyYXRlKQot
ICAgICAgICAgICAgbV9ncmFwaC5yZWYocmVzdWx0SW5kZXgpOwotICAgICAgICByZXR1cm4gcmVz
dWx0SW5kZXg7CisgICAgICAgICAgICBtX2dyYXBoLnJlZihyZXN1bHQpOworICAgICAgICByZXR1
cm4gcmVzdWx0OwogICAgIH0KLSAgICBOb2RlSW5kZXggYWRkVG9HcmFwaChOb2RlVHlwZSBvcCwg
T3BJbmZvIGluZm8xLCBPcEluZm8gaW5mbzIsIE5vZGVJbmRleCBjaGlsZDEgPSBOb05vZGUsIE5v
ZGVJbmRleCBjaGlsZDIgPSBOb05vZGUsIE5vZGVJbmRleCBjaGlsZDMgPSBOb05vZGUpCisgICAg
Tm9kZSogYWRkVG9HcmFwaChOb2RlVHlwZSBvcCwgT3BJbmZvIGluZm8xLCBPcEluZm8gaW5mbzIs
IE5vZGUqIGNoaWxkMSA9IDAsIE5vZGUqIGNoaWxkMiA9IDAsIE5vZGUqIGNoaWxkMyA9IDApCiAg
ICAgewotICAgICAgICBOb2RlSW5kZXggcmVzdWx0SW5kZXggPSAoTm9kZUluZGV4KW1fZ3JhcGgu
c2l6ZSgpOwotICAgICAgICBtX2dyYXBoLmFwcGVuZChOb2RlKG9wLCBjdXJyZW50Q29kZU9yaWdp
bigpLCBpbmZvMSwgaW5mbzIsIGNoaWxkMSwgY2hpbGQyLCBjaGlsZDMpKTsKKyAgICAgICAgTm9k
ZSogcmVzdWx0ID0gbV9ncmFwaC5hZGROb2RlKAorICAgICAgICAgICAgRG9udFJlZkNoaWxkcmVu
LCBEb250UmVmTm9kZSwgU3BlY05vbmUsCisgICAgICAgICAgICBvcCwgY3VycmVudENvZGVPcmln
aW4oKSwgaW5mbzEsIGluZm8yLCBjaGlsZDEsIGNoaWxkMiwgY2hpbGQzKTsKICAgICAgICAgQVNT
RVJUKG9wICE9IFBoaSk7Ci0gICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmQocmVzdWx0SW5k
ZXgpOworICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kKHJlc3VsdCk7CiAKICAgICAgICAg
aWYgKGRlZmF1bHRGbGFncyhvcCkgJiBOb2RlTXVzdEdlbmVyYXRlKQotICAgICAgICAgICAgbV9n
cmFwaC5yZWYocmVzdWx0SW5kZXgpOwotICAgICAgICByZXR1cm4gcmVzdWx0SW5kZXg7CisgICAg
ICAgICAgICBtX2dyYXBoLnJlZihyZXN1bHQpOworICAgICAgICByZXR1cm4gcmVzdWx0OwogICAg
IH0KICAgICAKLSAgICBOb2RlSW5kZXggYWRkVG9HcmFwaChOb2RlOjpWYXJBcmdUYWcsIE5vZGVU
eXBlIG9wLCBPcEluZm8gaW5mbzEsIE9wSW5mbyBpbmZvMikKKyAgICBOb2RlKiBhZGRUb0dyYXBo
KE5vZGU6OlZhckFyZ1RhZywgTm9kZVR5cGUgb3AsIE9wSW5mbyBpbmZvMSwgT3BJbmZvIGluZm8y
KQogICAgIHsKLSAgICAgICAgTm9kZUluZGV4IHJlc3VsdEluZGV4ID0gKE5vZGVJbmRleCltX2dy
YXBoLnNpemUoKTsKLSAgICAgICAgbV9ncmFwaC5hcHBlbmQoTm9kZShOb2RlOjpWYXJBcmcsIG9w
LCBjdXJyZW50Q29kZU9yaWdpbigpLCBpbmZvMSwgaW5mbzIsIG1fZ3JhcGgubV92YXJBcmdDaGls
ZHJlbi5zaXplKCkgLSBtX251bVBhc3NlZFZhckFyZ3MsIG1fbnVtUGFzc2VkVmFyQXJncykpOwor
ICAgICAgICBOb2RlKiByZXN1bHQgPSBtX2dyYXBoLmFkZE5vZGUoCisgICAgICAgICAgICBEb250
UmVmQ2hpbGRyZW4sIERvbnRSZWZOb2RlLCBTcGVjTm9uZSwKKyAgICAgICAgICAgIE5vZGU6OlZh
ckFyZywgb3AsIGN1cnJlbnRDb2RlT3JpZ2luKCksIGluZm8xLCBpbmZvMiwKKyAgICAgICAgICAg
IG1fZ3JhcGgubV92YXJBcmdDaGlsZHJlbi5zaXplKCkgLSBtX251bVBhc3NlZFZhckFyZ3MsIG1f
bnVtUGFzc2VkVmFyQXJncyk7CiAgICAgICAgIEFTU0VSVChvcCAhPSBQaGkpOwotICAgICAgICBt
X2N1cnJlbnRCbG9jay0+YXBwZW5kKHJlc3VsdEluZGV4KTsKKyAgICAgICAgbV9jdXJyZW50Qmxv
Y2stPmFwcGVuZChyZXN1bHQpOwogICAgICAgICAKICAgICAgICAgbV9udW1QYXNzZWRWYXJBcmdz
ID0gMDsKICAgICAgICAgCiAgICAgICAgIGlmIChkZWZhdWx0RmxhZ3Mob3ApICYgTm9kZU11c3RH
ZW5lcmF0ZSkKLSAgICAgICAgICAgIG1fZ3JhcGgucmVmKHJlc3VsdEluZGV4KTsKLSAgICAgICAg
cmV0dXJuIHJlc3VsdEluZGV4OworICAgICAgICAgICAgbV9ncmFwaC5yZWYocmVzdWx0KTsKKyAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKLSAgICBOb2RlSW5kZXggaW5zZXJ0UGhpTm9k
ZShPcEluZm8gaW5mbywgQmFzaWNCbG9jayogYmxvY2spCisgICAgTm9kZSogaW5zZXJ0UGhpTm9k
ZShPcEluZm8gaW5mbywgQmFzaWNCbG9jayogYmxvY2spCiAgICAgewotICAgICAgICBOb2RlSW5k
ZXggcmVzdWx0SW5kZXggPSAoTm9kZUluZGV4KW1fZ3JhcGguc2l6ZSgpOwotICAgICAgICBtX2dy
YXBoLmFwcGVuZChOb2RlKFBoaSwgY3VycmVudENvZGVPcmlnaW4oKSwgaW5mbykpOwotICAgICAg
ICBibG9jay0+cGhpcy5hcHBlbmQocmVzdWx0SW5kZXgpOworICAgICAgICBOb2RlKiByZXN1bHQg
PSBtX2dyYXBoLmFkZE5vZGUoCisgICAgICAgICAgICBEb250UmVmQ2hpbGRyZW4sIERvbnRSZWZO
b2RlLCBTcGVjTm9uZSwKKyAgICAgICAgICAgIFBoaSwgY3VycmVudENvZGVPcmlnaW4oKSwgaW5m
byk7CisgICAgICAgIGJsb2NrLT5waGlzLmFwcGVuZChyZXN1bHQpOwogCi0gICAgICAgIHJldHVy
biByZXN1bHRJbmRleDsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKICAgICB2b2lk
IGFkZFZhckFyZ0NoaWxkKE5vZGVJbmRleCBjaGlsZCkKQEAgLTg0Miw3ICs4MzUsNyBAQCBwcml2
YXRlOgogICAgICAgICBtX251bVBhc3NlZFZhckFyZ3MrKzsKICAgICB9CiAgICAgCi0gICAgTm9k
ZUluZGV4IGFkZENhbGwoSW50ZXJwcmV0ZXIqIGludGVycHJldGVyLCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uLCBOb2RlVHlwZSBvcCkKKyAgICBOb2RlKiBhZGRDYWxsKEludGVycHJl
dGVyKiBpbnRlcnByZXRlciwgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgTm9kZVR5
cGUgb3ApCiAgICAgewogICAgICAgICBJbnN0cnVjdGlvbiogcHV0SW5zdHJ1Y3Rpb24gPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24gKyBPUENPREVfTEVOR1RIKG9wX2NhbGwpOwogCkBAIC04NjIsNDggKzg1
NSw0MSBAQCBwcml2YXRlOgogICAgICAgICBmb3IgKGludCBpID0gMCArIGR1bW15VGhpc0FyZ3Vt
ZW50OyBpIDwgYXJnQ291bnQ7ICsraSkKICAgICAgICAgICAgIGFkZFZhckFyZ0NoaWxkKGdldChy
ZWdpc3Rlck9mZnNldCArIGFyZ3VtZW50VG9PcGVyYW5kKGkpKSk7CiAKLSAgICAgICAgTm9kZUlu
ZGV4IGNhbGwgPSBhZGRUb0dyYXBoKE5vZGU6OlZhckFyZywgb3AsIE9wSW5mbygwKSwgT3BJbmZv
KHByZWRpY3Rpb24pKTsKKyAgICAgICAgTm9kZSogY2FsbCA9IGFkZFRvR3JhcGgoTm9kZTo6VmFy
QXJnLCBvcCwgT3BJbmZvKDApLCBPcEluZm8ocHJlZGljdGlvbikpOwogICAgICAgICBpZiAoaW50
ZXJwcmV0ZXItPmdldE9wY29kZUlEKHB1dEluc3RydWN0aW9uLT51Lm9wY29kZSkgPT0gb3BfY2Fs
bF9wdXRfcmVzdWx0KQogICAgICAgICAgICAgc2V0KHB1dEluc3RydWN0aW9uWzFdLnUub3BlcmFu
ZCwgY2FsbCk7CiAgICAgICAgIHJldHVybiBjYWxsOwogICAgIH0KICAgICAKLSAgICBOb2RlSW5k
ZXggYWRkU3RydWN0dXJlVHJhbnNpdGlvbkNoZWNrKEpTQ2VsbCogb2JqZWN0LCBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSkKKyAgICBOb2RlKiBhZGRTdHJ1Y3R1cmVUcmFuc2l0aW9uQ2hlY2soSlNDZWxs
KiBvYmplY3QsIFN0cnVjdHVyZSogc3RydWN0dXJlKQogICAgIHsKICAgICAgICAgLy8gQWRkIGEg
d2VhayBKUyBjb25zdGFudCBmb3IgdGhlIG9iamVjdCByZWdhcmRsZXNzLCBzaW5jZSB0aGUgY29k
ZSBzaG91bGQKICAgICAgICAgLy8gYmUgamV0dGlzb25lZCBpZiB0aGUgb2JqZWN0IGV2ZXIgZGll
cy4KLSAgICAgICAgTm9kZUluZGV4IG9iamVjdEluZGV4ID0gY2VsbENvbnN0YW50KG9iamVjdCk7
CisgICAgICAgIE5vZGUqIG9iamVjdE5vZGUgPSBjZWxsQ29uc3RhbnQob2JqZWN0KTsKICAgICAg
ICAgCiAgICAgICAgIGlmIChvYmplY3QtPnN0cnVjdHVyZSgpID09IHN0cnVjdHVyZSAmJiBzdHJ1
Y3R1cmUtPnRyYW5zaXRpb25XYXRjaHBvaW50U2V0SXNTdGlsbFZhbGlkKCkpIHsKLSAgICAgICAg
ICAgIGFkZFRvR3JhcGgoU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnQsIE9wSW5mbyhzdHJ1
Y3R1cmUpLCBvYmplY3RJbmRleCk7Ci0gICAgICAgICAgICByZXR1cm4gb2JqZWN0SW5kZXg7Cisg
ICAgICAgICAgICBhZGRUb0dyYXBoKFN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50LCBPcElu
Zm8oc3RydWN0dXJlKSwgb2JqZWN0Tm9kZSk7CisgICAgICAgICAgICByZXR1cm4gb2JqZWN0Tm9k
ZTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgYWRkVG9HcmFwaChDaGVja1N0cnVjdHVy
ZSwgT3BJbmZvKG1fZ3JhcGguYWRkU3RydWN0dXJlU2V0KHN0cnVjdHVyZSkpLCBvYmplY3RJbmRl
eCk7CisgICAgICAgIGFkZFRvR3JhcGgoQ2hlY2tTdHJ1Y3R1cmUsIE9wSW5mbyhtX2dyYXBoLmFk
ZFN0cnVjdHVyZVNldChzdHJ1Y3R1cmUpKSwgb2JqZWN0Tm9kZSk7CiAgICAgICAgIAotICAgICAg
ICByZXR1cm4gb2JqZWN0SW5kZXg7CisgICAgICAgIHJldHVybiBvYmplY3ROb2RlOwogICAgIH0K
ICAgICAKLSAgICBOb2RlSW5kZXggYWRkU3RydWN0dXJlVHJhbnNpdGlvbkNoZWNrKEpTQ2VsbCog
b2JqZWN0KQorICAgIE5vZGUqIGFkZFN0cnVjdHVyZVRyYW5zaXRpb25DaGVjayhKU0NlbGwqIG9i
amVjdCkKICAgICB7CiAgICAgICAgIHJldHVybiBhZGRTdHJ1Y3R1cmVUcmFuc2l0aW9uQ2hlY2so
b2JqZWN0LCBvYmplY3QtPnN0cnVjdHVyZSgpKTsKICAgICB9CiAgICAgCi0gICAgU3BlY3VsYXRl
ZFR5cGUgZ2V0UHJlZGljdGlvbldpdGhvdXRPU1JFeGl0KE5vZGVJbmRleCBub2RlSW5kZXgsIHVu
c2lnbmVkIGJ5dGVjb2RlSW5kZXgpCisgICAgU3BlY3VsYXRlZFR5cGUgZ2V0UHJlZGljdGlvbldp
dGhvdXRPU1JFeGl0KHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpCiAgICAgewotICAgICAgICBVTlVT
RURfUEFSQU0obm9kZUluZGV4KTsKLSAgICAgICAgCi0gICAgICAgIFNwZWN1bGF0ZWRUeXBlIHBy
ZWRpY3Rpb24gPSBtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2stPnZhbHVlUHJvZmls
ZVByZWRpY3Rpb25Gb3JCeXRlY29kZU9mZnNldChieXRlY29kZUluZGV4KTsKLSNpZiBERkdfRU5B
QkxFKERFQlVHX1ZFUkJPU0UpCi0gICAgICAgIGRhdGFMb2coIkR5bmFtaWMgW0AiLCBub2RlSW5k
ZXgsICIsIGJjIyIsIGJ5dGVjb2RlSW5kZXgsICJdIHByZWRpY3Rpb246ICIsIFNwZWN1bGF0aW9u
RHVtcChwcmVkaWN0aW9uKSwgIlxuIik7Ci0jZW5kaWYKLSAgICAgICAgCi0gICAgICAgIHJldHVy
biBwcmVkaWN0aW9uOworICAgICAgICByZXR1cm4gbV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxl
ZEJsb2NrLT52YWx1ZVByb2ZpbGVQcmVkaWN0aW9uRm9yQnl0ZWNvZGVPZmZzZXQoYnl0ZWNvZGVJ
bmRleCk7CiAgICAgfQogCi0gICAgU3BlY3VsYXRlZFR5cGUgZ2V0UHJlZGljdGlvbihOb2RlSW5k
ZXggbm9kZUluZGV4LCB1bnNpZ25lZCBieXRlY29kZUluZGV4KQorICAgIFNwZWN1bGF0ZWRUeXBl
IGdldFByZWRpY3Rpb24odW5zaWduZWQgYnl0ZWNvZGVJbmRleCkKICAgICB7Ci0gICAgICAgIFNw
ZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24gPSBnZXRQcmVkaWN0aW9uV2l0aG91dE9TUkV4aXQobm9k
ZUluZGV4LCBieXRlY29kZUluZGV4KTsKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlv
biA9IGdldFByZWRpY3Rpb25XaXRob3V0T1NSRXhpdChieXRlY29kZUluZGV4KTsKICAgICAgICAg
CiAgICAgICAgIGlmIChwcmVkaWN0aW9uID09IFNwZWNOb25lKSB7CiAgICAgICAgICAgICAvLyBX
ZSBoYXZlIG5vIGluZm9ybWF0aW9uIGFib3V0IHdoYXQgdmFsdWVzIHRoaXMgbm9kZSBnZW5lcmF0
ZXMuIEdpdmUgdXAKQEAgLTkxNiwxMiArOTAyLDEyIEBAIHByaXZhdGU6CiAgICAgCiAgICAgU3Bl
Y3VsYXRlZFR5cGUgZ2V0UHJlZGljdGlvbldpdGhvdXRPU1JFeGl0KCkKICAgICB7Ci0gICAgICAg
IHJldHVybiBnZXRQcmVkaWN0aW9uV2l0aG91dE9TUkV4aXQobV9ncmFwaC5zaXplKCksIG1fY3Vy
cmVudFByb2ZpbGluZ0luZGV4KTsKKyAgICAgICAgcmV0dXJuIGdldFByZWRpY3Rpb25XaXRob3V0
T1NSRXhpdChtX2N1cnJlbnRQcm9maWxpbmdJbmRleCk7CiAgICAgfQogICAgIAogICAgIFNwZWN1
bGF0ZWRUeXBlIGdldFByZWRpY3Rpb24oKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGdldFByZWRp
Y3Rpb24obV9ncmFwaC5zaXplKCksIG1fY3VycmVudFByb2ZpbGluZ0luZGV4KTsKKyAgICAgICAg
cmV0dXJuIGdldFByZWRpY3Rpb24obV9jdXJyZW50UHJvZmlsaW5nSW5kZXgpOwogICAgIH0KICAg
ICAKICAgICBBcnJheU1vZGUgZ2V0QXJyYXlNb2RlKEFycmF5UHJvZmlsZSogcHJvZmlsZSwgQXJy
YXk6OkFjdGlvbiBhY3Rpb24pCkBAIC05MzUsNyArOTIxLDcgQEAgcHJpdmF0ZToKICAgICAgICAg
cmV0dXJuIGdldEFycmF5TW9kZShwcm9maWxlLCBBcnJheTo6UmVhZCk7CiAgICAgfQogICAgIAot
ICAgIEFycmF5TW9kZSBnZXRBcnJheU1vZGVBbmRFbWl0Q2hlY2tzKEFycmF5UHJvZmlsZSogcHJv
ZmlsZSwgQXJyYXk6OkFjdGlvbiBhY3Rpb24sIE5vZGVJbmRleCBiYXNlKQorICAgIEFycmF5TW9k
ZSBnZXRBcnJheU1vZGVBbmRFbWl0Q2hlY2tzKEFycmF5UHJvZmlsZSogcHJvZmlsZSwgQXJyYXk6
OkFjdGlvbiBhY3Rpb24sIE5vZGUqIGJhc2UpCiAgICAgewogICAgICAgICBwcm9maWxlLT5jb21w
dXRlVXBkYXRlZFByZWRpY3Rpb24obV9pbmxpbmVTdGFja1RvcC0+bV9jb2RlQmxvY2spOwogICAg
ICAgICAKQEAgLTk1OSwxMiArOTQ1LDEwIEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiByZXN1
bHQ7CiAgICAgfQogICAgIAotICAgIE5vZGVJbmRleCBtYWtlU2FmZShOb2RlSW5kZXggbm9kZUlu
ZGV4KQorICAgIE5vZGUqIG1ha2VTYWZlKE5vZGUqIG5vZGUpCiAgICAgewotICAgICAgICBOb2Rl
JiBub2RlID0gbV9ncmFwaFtub2RlSW5kZXhdOwotICAgICAgICAKICAgICAgICAgYm9vbCBsaWtl
bHlUb1Rha2VTbG93Q2FzZTsKLSAgICAgICAgaWYgKCFpc1g4NigpICYmIG5vZGUub3AoKSA9PSBB
cml0aE1vZCkKKyAgICAgICAgaWYgKCFpc1g4NigpICYmIG5vZGUtPm9wKCkgPT0gQXJpdGhNb2Qp
CiAgICAgICAgICAgICBsaWtlbHlUb1Rha2VTbG93Q2FzZSA9IGZhbHNlOwogICAgICAgICBlbHNl
CiAgICAgICAgICAgICBsaWtlbHlUb1Rha2VTbG93Q2FzZSA9IG1faW5saW5lU3RhY2tUb3AtPm1f
cHJvZmlsZWRCbG9jay0+bGlrZWx5VG9UYWtlU2xvd0Nhc2UobV9jdXJyZW50SW5kZXgpOwpAQCAt
OTcyLDMxICs5NTYsMzEgQEAgcHJpdmF0ZToKICAgICAgICAgaWYgKCFsaWtlbHlUb1Rha2VTbG93
Q2FzZQogICAgICAgICAgICAgJiYgIW1faW5saW5lU3RhY2tUb3AtPm1fZXhpdFByb2ZpbGUuaGFz
RXhpdFNpdGUobV9jdXJyZW50SW5kZXgsIE92ZXJmbG93KQogICAgICAgICAgICAgJiYgIW1faW5s
aW5lU3RhY2tUb3AtPm1fZXhpdFByb2ZpbGUuaGFzRXhpdFNpdGUobV9jdXJyZW50SW5kZXgsIE5l
Z2F0aXZlWmVybykpCi0gICAgICAgICAgICByZXR1cm4gbm9kZUluZGV4OworICAgICAgICAgICAg
cmV0dXJuIG5vZGU7CiAgICAgICAgIAotICAgICAgICBzd2l0Y2ggKG1fZ3JhcGhbbm9kZUluZGV4
XS5vcCgpKSB7CisgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewogICAgICAgICBjYXNlIFVJ
bnQzMlRvTnVtYmVyOgogICAgICAgICBjYXNlIEFyaXRoQWRkOgogICAgICAgICBjYXNlIEFyaXRo
U3ViOgogICAgICAgICBjYXNlIEFyaXRoTmVnYXRlOgogICAgICAgICBjYXNlIFZhbHVlQWRkOgog
ICAgICAgICBjYXNlIEFyaXRoTW9kOiAvLyBmb3IgQXJpdGhNb2QgIk1heU92ZXJmbG93IiBtZWFu
cyB3ZSB0cmllZCB0byBkaXZpZGUgYnkgemVybywgb3Igd2Ugc2F3IGRvdWJsZS4KLSAgICAgICAg
ICAgIG1fZ3JhcGhbbm9kZUluZGV4XS5tZXJnZUZsYWdzKE5vZGVNYXlPdmVyZmxvdyk7CisgICAg
ICAgICAgICBub2RlLT5tZXJnZUZsYWdzKE5vZGVNYXlPdmVyZmxvdyk7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgIAogICAgICAgICBjYXNlIEFyaXRoTXVsOgogICAgICAgICAgICAg
aWYgKG1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jay0+bGlrZWx5VG9UYWtlRGVlcGVz
dFNsb3dDYXNlKG1fY3VycmVudEluZGV4KQogICAgICAgICAgICAgICAgIHx8IG1faW5saW5lU3Rh
Y2tUb3AtPm1fZXhpdFByb2ZpbGUuaGFzRXhpdFNpdGUobV9jdXJyZW50SW5kZXgsIE92ZXJmbG93
KSkgewogI2lmIERGR19FTkFCTEUoREVCVUdfVkVSQk9TRSkKLSAgICAgICAgICAgICAgICBkYXRh
TG9nRigiTWFraW5nIEFyaXRoTXVsIEAldSB0YWtlIGRlZXBlc3Qgc2xvdyBjYXNlLlxuIiwgbm9k
ZUluZGV4KTsKKyAgICAgICAgICAgICAgICBkYXRhTG9nRigiTWFraW5nIEFyaXRoTXVsIEAldSB0
YWtlIGRlZXBlc3Qgc2xvdyBjYXNlLlxuIiwgbm9kZS0+aW5kZXgoKSk7CiAjZW5kaWYKLSAgICAg
ICAgICAgICAgICBtX2dyYXBoW25vZGVJbmRleF0ubWVyZ2VGbGFncyhOb2RlTWF5T3ZlcmZsb3cg
fCBOb2RlTWF5TmVnWmVybyk7CisgICAgICAgICAgICAgICAgbm9kZS0+bWVyZ2VGbGFncyhOb2Rl
TWF5T3ZlcmZsb3cgfCBOb2RlTWF5TmVnWmVybyk7CiAgICAgICAgICAgICB9IGVsc2UgaWYgKG1f
aW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jay0+bGlrZWx5VG9UYWtlU2xvd0Nhc2UobV9j
dXJyZW50SW5kZXgpCiAgICAgICAgICAgICAgICAgICAgICAgIHx8IG1faW5saW5lU3RhY2tUb3At
Pm1fZXhpdFByb2ZpbGUuaGFzRXhpdFNpdGUobV9jdXJyZW50SW5kZXgsIE5lZ2F0aXZlWmVybykp
IHsKICNpZiBERkdfRU5BQkxFKERFQlVHX1ZFUkJPU0UpCi0gICAgICAgICAgICAgICAgZGF0YUxv
Z0YoIk1ha2luZyBBcml0aE11bCBAJXUgdGFrZSBmYXN0ZXIgc2xvdyBjYXNlLlxuIiwgbm9kZUlu
ZGV4KTsKKyAgICAgICAgICAgICAgICBkYXRhTG9nRigiTWFraW5nIEFyaXRoTXVsIEAldSB0YWtl
IGZhc3RlciBzbG93IGNhc2UuXG4iLCBub2RlLT5pbmRleCgpKTsKICNlbmRpZgotICAgICAgICAg
ICAgICAgIG1fZ3JhcGhbbm9kZUluZGV4XS5tZXJnZUZsYWdzKE5vZGVNYXlOZWdaZXJvKTsKKyAg
ICAgICAgICAgICAgICBub2RlLT5tZXJnZUZsYWdzKE5vZGVNYXlOZWdaZXJvKTsKICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCkBAIC0xMDA1LDEyICs5ODks
MTIgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIAot
ICAgICAgICByZXR1cm4gbm9kZUluZGV4OworICAgICAgICByZXR1cm4gbm9kZTsKICAgICB9CiAg
ICAgCi0gICAgTm9kZUluZGV4IG1ha2VEaXZTYWZlKE5vZGVJbmRleCBub2RlSW5kZXgpCisgICAg
Tm9kZSogbWFrZURpdlNhZmUoTm9kZSogbm9kZUluZGV4KQogICAgIHsKLSAgICAgICAgQVNTRVJU
KG1fZ3JhcGhbbm9kZUluZGV4XS5vcCgpID09IEFyaXRoRGl2KTsKKyAgICAgICAgQVNTRVJUKG5v
ZGUtPm9wKCkgPT0gQXJpdGhEaXYpOwogICAgICAgICAKICAgICAgICAgLy8gVGhlIG1haW4gc2xv
dyBjYXNlIGNvdW50ZXIgZm9yIG9wX2RpdiBpbiB0aGUgb2xkIEpJVCBjb3VudHMgb25seSB3aGVu
CiAgICAgICAgIC8vIHRoZSBvcGVyYW5kcyBhcmUgbm90IG51bWJlcnMuIFdlIGRvbid0IGNhcmUg
YWJvdXQgdGhhdCBzaW5jZSB3ZSBhbHJlYWR5CkBAIC0xMDIxLDQwICsxMDA1LDE3IEBAIHByaXZh
dGU6CiAgICAgICAgIGlmICghbV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLT5jb3Vs
ZFRha2VTcGVjaWFsRmFzdENhc2UobV9jdXJyZW50SW5kZXgpCiAgICAgICAgICAgICAmJiAhbV9p
bmxpbmVTdGFja1RvcC0+bV9leGl0UHJvZmlsZS5oYXNFeGl0U2l0ZShtX2N1cnJlbnRJbmRleCwg
T3ZlcmZsb3cpCiAgICAgICAgICAgICAmJiAhbV9pbmxpbmVTdGFja1RvcC0+bV9leGl0UHJvZmls
ZS5oYXNFeGl0U2l0ZShtX2N1cnJlbnRJbmRleCwgTmVnYXRpdmVaZXJvKSkKLSAgICAgICAgICAg
IHJldHVybiBub2RlSW5kZXg7CisgICAgICAgICAgICByZXR1cm4gbm9kZTsKICAgICAgICAgCiAj
aWYgREZHX0VOQUJMRShERUJVR19WRVJCT1NFKQotICAgICAgICBkYXRhTG9nRigiTWFraW5nICVz
IEAldSBzYWZlIGF0IGJjIyV1IGJlY2F1c2Ugc3BlY2lhbCBmYXN0LWNhc2UgY291bnRlciBpcyBh
dCAldSBhbmQgZXhpdCBwcm9maWxlcyBzYXkgJWQsICVkXG4iLCBHcmFwaDo6b3BOYW1lKG1fZ3Jh
cGhbbm9kZUluZGV4XS5vcCgpKSwgbm9kZUluZGV4LCBtX2N1cnJlbnRJbmRleCwgbV9pbmxpbmVT
dGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLT5zcGVjaWFsRmFzdENhc2VQcm9maWxlRm9yQnl0ZWNv
ZGVPZmZzZXQobV9jdXJyZW50SW5kZXgpLT5tX2NvdW50ZXIsIG1faW5saW5lU3RhY2tUb3AtPm1f
ZXhpdFByb2ZpbGUuaGFzRXhpdFNpdGUobV9jdXJyZW50SW5kZXgsIE92ZXJmbG93KSwgbV9pbmxp
bmVTdGFja1RvcC0+bV9leGl0UHJvZmlsZS5oYXNFeGl0U2l0ZShtX2N1cnJlbnRJbmRleCwgTmVn
YXRpdmVaZXJvKSk7CisgICAgICAgIGRhdGFMb2dGKCJNYWtpbmcgJXMgQCV1IHNhZmUgYXQgYmMj
JXUgYmVjYXVzZSBzcGVjaWFsIGZhc3QtY2FzZSBjb3VudGVyIGlzIGF0ICV1IGFuZCBleGl0IHBy
b2ZpbGVzIHNheSAlZCwgJWRcbiIsIEdyYXBoOjpvcE5hbWUobm9kZS0+b3AoKSksIG5vZGUtPmlu
ZGV4KCksIG1fY3VycmVudEluZGV4LCBtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2st
PnNwZWNpYWxGYXN0Q2FzZVByb2ZpbGVGb3JCeXRlY29kZU9mZnNldChtX2N1cnJlbnRJbmRleCkt
Pm1fY291bnRlciwgbV9pbmxpbmVTdGFja1RvcC0+bV9leGl0UHJvZmlsZS5oYXNFeGl0U2l0ZSht
X2N1cnJlbnRJbmRleCwgT3ZlcmZsb3cpLCBtX2lubGluZVN0YWNrVG9wLT5tX2V4aXRQcm9maWxl
Lmhhc0V4aXRTaXRlKG1fY3VycmVudEluZGV4LCBOZWdhdGl2ZVplcm8pKTsKICNlbmRpZgogICAg
ICAgICAKICAgICAgICAgLy8gRklYTUU6IEl0IG1pZ2h0IGJlIHBvc3NpYmxlIHRvIG1ha2UgdGhp
cyBtb3JlIGdyYW51bGFyLiBUaGUgREZHIGNlcnRhaW5seSBjYW4KICAgICAgICAgLy8gZGlzdGlu
Z3Vpc2ggYmV0d2VlbiBuZWdhdGl2ZSB6ZXJvIGFuZCBvdmVyZmxvdyBpbiBpdHMgZXhpdCBwcm9m
aWxlcy4KLSAgICAgICAgbV9ncmFwaFtub2RlSW5kZXhdLm1lcmdlRmxhZ3MoTm9kZU1heU92ZXJm
bG93IHwgTm9kZU1heU5lZ1plcm8pOworICAgICAgICBub2RlLT5tZXJnZUZsYWdzKE5vZGVNYXlP
dmVyZmxvdyB8IE5vZGVNYXlOZWdaZXJvKTsKICAgICAgICAgCi0gICAgICAgIHJldHVybiBub2Rl
SW5kZXg7Ci0gICAgfQotICAgIAotICAgIGJvb2wgd2lsbE5lZWRGbHVzaChTdHJ1Y3R1cmVTdHVi
SW5mbyYgc3R1YkluZm8pCi0gICAgewotICAgICAgICBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVy
ZUxpc3QqIGxpc3Q7Ci0gICAgICAgIGludCBsaXN0U2l6ZTsKLSAgICAgICAgc3dpdGNoIChzdHVi
SW5mby5hY2Nlc3NUeXBlKSB7Ci0gICAgICAgIGNhc2UgYWNjZXNzX2dldF9ieV9pZF9zZWxmX2xp
c3Q6Ci0gICAgICAgICAgICBsaXN0ID0gc3R1YkluZm8udS5nZXRCeUlkU2VsZkxpc3Quc3RydWN0
dXJlTGlzdDsKLSAgICAgICAgICAgIGxpc3RTaXplID0gc3R1YkluZm8udS5nZXRCeUlkU2VsZkxp
c3QubGlzdFNpemU7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBhY2Nlc3NfZ2V0
X2J5X2lkX3Byb3RvX2xpc3Q6Ci0gICAgICAgICAgICBsaXN0ID0gc3R1YkluZm8udS5nZXRCeUlk
UHJvdG9MaXN0LnN0cnVjdHVyZUxpc3Q7Ci0gICAgICAgICAgICBsaXN0U2l6ZSA9IHN0dWJJbmZv
LnUuZ2V0QnlJZFByb3RvTGlzdC5saXN0U2l6ZTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgbGlzdFNpemU7ICsraSkgewotICAgICAgICAgICAgaWYgKCFs
aXN0LT5saXN0W2ldLmlzRGlyZWN0KQotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAg
ICAgICB9Ci0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIG5vZGU7CiAgICAg
fQogICAgIAogICAgIGJvb2wgc3RydWN0dXJlQ2hhaW5Jc1N0aWxsVmFsaWQoYm9vbCBkaXJlY3Qs
IFN0cnVjdHVyZSogcHJldmlvdXNTdHJ1Y3R1cmUsIFN0cnVjdHVyZUNoYWluKiBjaGFpbikKQEAg
LTEwOTgsMjEgKzEwNTksMjEgQEAgcHJpdmF0ZToKICAgICB1bnNpZ25lZCBtX2NvbnN0YW50TmFO
OwogICAgIHVuc2lnbmVkIG1fY29uc3RhbnQxOwogICAgIEhhc2hNYXA8SlNDZWxsKiwgdW5zaWdu
ZWQ+IG1fY2VsbENvbnN0YW50czsKLSAgICBIYXNoTWFwPEpTQ2VsbCosIE5vZGVJbmRleD4gbV9j
ZWxsQ29uc3RhbnROb2RlczsKKyAgICBIYXNoTWFwPEpTQ2VsbCosIE5vZGUqPiBtX2NlbGxDb25z
dGFudE5vZGVzOwogCiAgICAgLy8gQSBjb25zdGFudCBpbiB0aGUgY29uc3RhbnQgcG9vbCBtYXkg
YmUgcmVwcmVzZW50ZWQgYnkgbW9yZSB0aGFuIG9uZQogICAgIC8vIG5vZGUgaW4gdGhlIGdyYXBo
LCBkZXBlbmRpbmcgb24gdGhlIGNvbnRleHQgaW4gd2hpY2ggaXQgaXMgYmVpbmcgdXNlZC4KICAg
ICBzdHJ1Y3QgQ29uc3RhbnRSZWNvcmQgewogICAgICAgICBDb25zdGFudFJlY29yZCgpCi0gICAg
ICAgICAgICA6IGFzSW50MzIoTm9Ob2RlKQotICAgICAgICAgICAgLCBhc051bWVyaWMoTm9Ob2Rl
KQotICAgICAgICAgICAgLCBhc0pTVmFsdWUoTm9Ob2RlKQorICAgICAgICAgICAgOiBhc0ludDMy
KDApCisgICAgICAgICAgICAsIGFzTnVtZXJpYygwKQorICAgICAgICAgICAgLCBhc0pTVmFsdWUo
MCkKICAgICAgICAgewogICAgICAgICB9CiAKLSAgICAgICAgTm9kZUluZGV4IGFzSW50MzI7Ci0g
ICAgICAgIE5vZGVJbmRleCBhc051bWVyaWM7Ci0gICAgICAgIE5vZGVJbmRleCBhc0pTVmFsdWU7
CisgICAgICAgIE5vZGUqIGFzSW50MzI7CisgICAgICAgIE5vZGUqIGFzTnVtZXJpYzsKKyAgICAg
ICAgTm9kZSogYXNKU1ZhbHVlOwogICAgIH07CiAKICAgICAvLyBUcmFjayB0aGUgaW5kZXggb2Yg
dGhlIG5vZGUgd2hvc2UgcmVzdWx0IGlzIHRoZSBjdXJyZW50IHZhbHVlIGZvciBldmVyeQpAQCAt
MTEzOCw3ICsxMDk5LDcgQEAgcHJpdmF0ZToKICAgICB1bnNpZ25lZCBtX2dsb2JhbFJlc29sdmVO
dW1iZXI7CiAKICAgICBzdHJ1Y3QgUGhpU3RhY2tFbnRyeSB7Ci0gICAgICAgIFBoaVN0YWNrRW50
cnkoQmFzaWNCbG9jayogYmxvY2ssIE5vZGVJbmRleCBwaGksIHVuc2lnbmVkIHZhck5vKQorICAg
ICAgICBQaGlTdGFja0VudHJ5KEJhc2ljQmxvY2sqIGJsb2NrLCBOb2RlKiBwaGksIHVuc2lnbmVk
IHZhck5vKQogICAgICAgICAgICAgOiBtX2Jsb2NrKGJsb2NrKQogICAgICAgICAgICAgLCBtX3Bo
aShwaGkpCiAgICAgICAgICAgICAsIG1fdmFyTm8odmFyTm8pCkBAIC0xMTQ2LDcgKzExMDcsNyBA
QCBwcml2YXRlOgogICAgICAgICB9CiAKICAgICAgICAgQmFzaWNCbG9jayogbV9ibG9jazsKLSAg
ICAgICAgTm9kZUluZGV4IG1fcGhpOworICAgICAgICBOb2RlKiBtX3BoaTsKICAgICAgICAgdW5z
aWduZWQgbV92YXJObzsKICAgICB9OwogICAgIFZlY3RvcjxQaGlTdGFja0VudHJ5LCAxNj4gbV9h
cmd1bWVudFBoaVN0YWNrOwpAQCAtMTI4MCw3ICsxMjQxLDcgQEAgdm9pZCBCeXRlQ29kZVBhcnNl
cjo6aGFuZGxlQ2FsbChJbnRlcnByZQogewogICAgIEFTU0VSVChPUENPREVfTEVOR1RIKG9wX2Nh
bGwpID09IE9QQ09ERV9MRU5HVEgob3BfY29uc3RydWN0KSk7CiAgICAgCi0gICAgTm9kZUluZGV4
IGNhbGxUYXJnZXQgPSBnZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCk7CisgICAg
Tm9kZSogY2FsbFRhcmdldCA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKTsK
ICAgICAKICAgICBDYWxsTGlua1N0YXR1cyBjYWxsTGlua1N0YXR1czsKIApAQCAtMTI5NCw3ICsx
MjU1LDcgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlQ2FsbChJbnRlcnByZQogICAgIH0K
ICAgICAKICNpZiBERkdfRU5BQkxFKERFQlVHX1ZFUkJPU0UpCi0gICAgZGF0YUxvZygiRm9yIGNh
bGwgYXQgQCIsIG1fZ3JhcGguc2l6ZSgpLCAiIGJjIyIsIG1fY3VycmVudEluZGV4LCAiOiAiLCBj
YWxsTGlua1N0YXR1cywgIlxuIik7CisgICAgZGF0YUxvZygiRm9yIGNhbGwgYXQgYmMjIiwgbV9j
dXJyZW50SW5kZXgsICI6ICIsIGNhbGxMaW5rU3RhdHVzLCAiXG4iKTsKICNlbmRpZgogICAgIAog
ICAgIGlmICghY2FsbExpbmtTdGF0dXMuY2FuT3B0aW1pemUoKSkgewpAQCAtMTM1MiwxOCArMTMx
MywxOCBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVDYWxsKEludGVycHJlCiAgICAgYWRk
Q2FsbChpbnRlcnByZXRlciwgY3VycmVudEluc3RydWN0aW9uLCBvcCk7CiB9CiAKLXZvaWQgQnl0
ZUNvZGVQYXJzZXI6OmVtaXRGdW5jdGlvbkNoZWNrcyhjb25zdCBDYWxsTGlua1N0YXR1cyYgY2Fs
bExpbmtTdGF0dXMsIE5vZGVJbmRleCBjYWxsVGFyZ2V0LCBpbnQgcmVnaXN0ZXJPZmZzZXQsIENv
ZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkKK3ZvaWQgQnl0ZUNvZGVQYXJzZXI6OmVtaXRGdW5j
dGlvbkNoZWNrcyhjb25zdCBDYWxsTGlua1N0YXR1cyYgY2FsbExpbmtTdGF0dXMsIE5vZGUqIGNh
bGxUYXJnZXQsIGludCByZWdpc3Rlck9mZnNldCwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5k
KQogewogICAgIGlmIChjYWxsTGlua1N0YXR1cy5pc1Byb3ZlZCgpKQogICAgICAgICByZXR1cm47
CiAgICAgCiAgICAgQVNTRVJUKGNhbGxMaW5rU3RhdHVzLmNhbk9wdGltaXplKCkpOwogICAgIAot
ICAgIE5vZGVJbmRleCB0aGlzQXJndW1lbnQ7CisgICAgTm9kZSogdGhpc0FyZ3VtZW50OwogICAg
IGlmIChraW5kID09IENvZGVGb3JDYWxsKQogICAgICAgICB0aGlzQXJndW1lbnQgPSBnZXQocmVn
aXN0ZXJPZmZzZXQgKyBhcmd1bWVudFRvT3BlcmFuZCgwKSk7CiAgICAgZWxzZQotICAgICAgICB0
aGlzQXJndW1lbnQgPSBOb05vZGU7CisgICAgICAgIHRoaXNBcmd1bWVudCA9IDA7CiAKICAgICBp
ZiAoSlNGdW5jdGlvbiogZnVuY3Rpb24gPSBjYWxsTGlua1N0YXR1cy5mdW5jdGlvbigpKQogICAg
ICAgICBhZGRUb0dyYXBoKENoZWNrRnVuY3Rpb24sIE9wSW5mbyhmdW5jdGlvbiksIGNhbGxUYXJn
ZXQsIHRoaXNBcmd1bWVudCk7CkBAIC0xMzc2LDcgKzEzMzcsNyBAQCB2b2lkIEJ5dGVDb2RlUGFy
c2VyOjplbWl0RnVuY3Rpb25DaGVja3MoCiAgICAgfQogfQogCi1ib29sIEJ5dGVDb2RlUGFyc2Vy
OjpoYW5kbGVJbmxpbmluZyhib29sIHVzZXNSZXN1bHQsIE5vZGVJbmRleCBjYWxsVGFyZ2V0Tm9k
ZUluZGV4LCBpbnQgcmVzdWx0T3BlcmFuZCwgY29uc3QgQ2FsbExpbmtTdGF0dXMmIGNhbGxMaW5r
U3RhdHVzLCBpbnQgcmVnaXN0ZXJPZmZzZXQsIGludCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhp
cywgdW5zaWduZWQgbmV4dE9mZnNldCwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQorYm9v
bCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW5saW5pbmcoYm9vbCB1c2VzUmVzdWx0LCBOb2RlKiBj
YWxsVGFyZ2V0Tm9kZSwgaW50IHJlc3VsdE9wZXJhbmQsIGNvbnN0IENhbGxMaW5rU3RhdHVzJiBj
YWxsTGlua1N0YXR1cywgaW50IHJlZ2lzdGVyT2Zmc2V0LCBpbnQgYXJndW1lbnRDb3VudEluY2x1
ZGluZ1RoaXMsIHVuc2lnbmVkIG5leHRPZmZzZXQsIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2lu
ZCkKIHsKICAgICAvLyBGaXJzdCwgdGhlIHJlYWxseSBzaW1wbGUgY2hlY2tzOiBkbyB3ZSBoYXZl
IGFuIGFjdHVhbCBKUyBmdW5jdGlvbj8KICAgICBpZiAoIWNhbGxMaW5rU3RhdHVzLmV4ZWN1dGFi
bGUoKSkKQEAgLTE0MjMsNyArMTM4NCw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUlu
bGluaW5nKGJvb2wKICAgICAvLyBOb3cgd2Uga25vdyB3aXRob3V0IGEgZG91YnQgdGhhdCB3ZSBh
cmUgY29tbWl0dGVkIHRvIGlubGluaW5nLiBTbyBiZWdpbiB0aGUgcHJvY2VzcwogICAgIC8vIGJ5
IGNoZWNraW5nIHRoZSBjYWxsZWUgKGlmIG5lY2Vzc2FyeSkgYW5kIG1ha2luZyBzdXJlIHRoYXQg
YXJndW1lbnRzIGFuZCB0aGUgY2FsbGVlCiAgICAgLy8gYXJlIGZsdXNoZWQuCi0gICAgZW1pdEZ1
bmN0aW9uQ2hlY2tzKGNhbGxMaW5rU3RhdHVzLCBjYWxsVGFyZ2V0Tm9kZUluZGV4LCByZWdpc3Rl
ck9mZnNldCwga2luZCk7CisgICAgZW1pdEZ1bmN0aW9uQ2hlY2tzKGNhbGxMaW5rU3RhdHVzLCBj
YWxsVGFyZ2V0Tm9kZSwgcmVnaXN0ZXJPZmZzZXQsIGtpbmQpOwogICAgIAogICAgIC8vIEZJWE1F
OiBEb24ndCBmbHVzaCBjb25zdGFudHMhCiAgICAgCkBAIC0xNDU3LDggKzE0MTgsOCBAQCBib29s
IEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbmxpbmluZyhib29sCiAKICAgICBhZGRUb0dyYXBoKElu
bGluZVN0YXJ0LCBPcEluZm8oYXJndW1lbnRQb3NpdGlvblN0YXJ0KSk7CiAgICAgaWYgKGNhbGxM
aW5rU3RhdHVzLmlzQ2xvc3VyZUNhbGwoKSkgewotICAgICAgICBhZGRUb0dyYXBoKFNldENhbGxl
ZSwgY2FsbFRhcmdldE5vZGVJbmRleCk7Ci0gICAgICAgIGFkZFRvR3JhcGgoU2V0TXlTY29wZSwg
YWRkVG9HcmFwaChHZXRTY29wZSwgY2FsbFRhcmdldE5vZGVJbmRleCkpOworICAgICAgICBhZGRU
b0dyYXBoKFNldENhbGxlZSwgY2FsbFRhcmdldE5vZGUpOworICAgICAgICBhZGRUb0dyYXBoKFNl
dE15U2NvcGUsIGFkZFRvR3JhcGgoR2V0U2NvcGUsIGNhbGxUYXJnZXROb2RlKSk7CiAgICAgfQog
ICAgIAogICAgIHBhcnNlQ29kZUJsb2NrKCk7CkBAIC0xNDk0LDExICsxNDU1LDExIEBAIGJvb2wg
Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUlubGluaW5nKGJvb2wKICAgICB9IGVsc2UKICAgICAgICAg
QVNTRVJUKGlubGluZVN0YWNrRW50cnkubV91bmxpbmtlZEJsb2Nrcy5pc0VtcHR5KCkpOwogICAg
IAorICAgIEJhc2ljQmxvY2sqIGxhc3RCbG9jayA9IG1fZ3JhcGgubV9ibG9ja3MubGFzdCgpLmdl
dCgpOwogICAgIC8vIElmIHRoZXJlIHdhcyBhIHJldHVybiwgYnV0IG5vIGVhcmx5IHJldHVybnMs
IHRoZW4gd2UncmUgZG9uZS4gV2UgYWxsb3cgcGFyc2luZyBvZgogICAgIC8vIHRoZSBjYWxsZXIg
dG8gY29udGludWUgaW4gd2hhdGV2ZXIgYmFzaWMgYmxvY2sgd2UncmUgaW4gcmlnaHQgbm93Lgog
ICAgIGlmICghaW5saW5lU3RhY2tFbnRyeS5tX2RpZEVhcmx5UmV0dXJuICYmIGlubGluZVN0YWNr
RW50cnkubV9kaWRSZXR1cm4pIHsKLSAgICAgICAgQmFzaWNCbG9jayogbGFzdEJsb2NrID0gbV9n
cmFwaC5tX2Jsb2Nrcy5sYXN0KCkuZ2V0KCk7Ci0gICAgICAgIEFTU0VSVChsYXN0QmxvY2stPmlz
RW1wdHkoKSB8fCAhbV9ncmFwaC5sYXN0KCkuaXNUZXJtaW5hbCgpKTsKKyAgICAgICAgQVNTRVJU
KGxhc3RCbG9jay0+aXNFbXB0eSgpIHx8ICFsYXN0QmxvY2stPmxhc3QoKS0+aXNUZXJtaW5hbCgp
KTsKICAgICAgICAgCiAgICAgICAgIC8vIElmIHdlIGNyZWF0ZWQgbmV3IGJsb2NrcyB0aGVuIHRo
ZSBsYXN0IGJsb2NrIG5lZWRzIGxpbmtpbmcsIGJ1dCBpbiB0aGUKICAgICAgICAgLy8gY2FsbGVy
LiBJdCBkb2Vzbid0IG5lZWQgdG8gYmUgbGlua2VkIHRvLCBidXQgaXQgbmVlZHMgb3V0Z29pbmcg
bGlua3MuCkBAIC0xNTIyLDcgKzE0ODMsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJ
bmxpbmluZyhib29sCiAgICAgfQogICAgIAogICAgIC8vIElmIHdlIGdldCB0byB0aGlzIHBvaW50
IHRoZW4gYWxsIGJsb2NrcyBtdXN0IGVuZCBpbiBzb21lIHNvcnQgb2YgdGVybWluYWxzLgotICAg
IEFTU0VSVChtX2dyYXBoLmxhc3QoKS5pc1Rlcm1pbmFsKCkpOworICAgIEFTU0VSVChsYXN0Qmxv
Y2stPmxhc3QoKS0+aXNUZXJtaW5hbCgpKTsKICAgICAKICAgICAvLyBMaW5rIHRoZSBlYXJseSBy
ZXR1cm5zIHRvIHRoZSBiYXNpYyBibG9jayB3ZSdyZSBhYm91dCB0byBjcmVhdGUuCiAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBpbmxpbmVTdGFja0VudHJ5Lm1fdW5saW5rZWRCbG9ja3Muc2l6
ZSgpOyArK2kpIHsKQEAgLTE1MzAsMTAgKzE0OTEsMTAgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6
aGFuZGxlSW5saW5pbmcoYm9vbAogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIEJhc2lj
QmxvY2sqIGJsb2NrID0gbV9ncmFwaC5tX2Jsb2Nrc1tpbmxpbmVTdGFja0VudHJ5Lm1fdW5saW5r
ZWRCbG9ja3NbaV0ubV9ibG9ja0luZGV4XS5nZXQoKTsKICAgICAgICAgQVNTRVJUKCFibG9jay0+
aXNMaW5rZWQpOwotICAgICAgICBOb2RlJiBub2RlID0gbV9ncmFwaFtibG9jay0+bGFzdCgpXTsK
LSAgICAgICAgQVNTRVJUKG5vZGUub3AoKSA9PSBKdW1wKTsKLSAgICAgICAgQVNTRVJUKG5vZGUu
dGFrZW5CbG9ja0luZGV4KCkgPT0gTm9CbG9jayk7Ci0gICAgICAgIG5vZGUuc2V0VGFrZW5CbG9j
a0luZGV4KG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgpKTsKKyAgICAgICAgTm9kZSogbm9kZSA9IGJs
b2NrLT5sYXN0KCk7CisgICAgICAgIEFTU0VSVChub2RlLT5vcCgpID09IEp1bXApOworICAgICAg
ICBBU1NFUlQobm9kZS0+dGFrZW5CbG9ja0luZGV4KCkgPT0gTm9CbG9jayk7CisgICAgICAgIG5v
ZGUtPnNldFRha2VuQmxvY2tJbmRleChtX2dyYXBoLm1fYmxvY2tzLnNpemUoKSk7CiAgICAgICAg
IGlubGluZVN0YWNrRW50cnkubV91bmxpbmtlZEJsb2Nrc1tpXS5tX25lZWRzRWFybHlSZXR1cm5M
aW5raW5nID0gZmFsc2U7CiAjaWYgIUFTU0VSVF9ESVNBQkxFRAogICAgICAgICBibG9jay0+aXNM
aW5rZWQgPSB0cnVlOwpAQCAtMTU2MCwxMSArMTUyMSwxMSBAQCBib29sIEJ5dGVDb2RlUGFyc2Vy
OjpoYW5kbGVJbmxpbmluZyhib29sCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgQnl0ZUNv
ZGVQYXJzZXI6OnNldEludHJpbnNpY1Jlc3VsdChib29sIHVzZXNSZXN1bHQsIGludCByZXN1bHRP
cGVyYW5kLCBOb2RlSW5kZXggbm9kZUluZGV4KQordm9pZCBCeXRlQ29kZVBhcnNlcjo6c2V0SW50
cmluc2ljUmVzdWx0KGJvb2wgdXNlc1Jlc3VsdCwgaW50IHJlc3VsdE9wZXJhbmQsIE5vZGUqIG5v
ZGUpCiB7CiAgICAgaWYgKCF1c2VzUmVzdWx0KQogICAgICAgICByZXR1cm47Ci0gICAgc2V0KHJl
c3VsdE9wZXJhbmQsIG5vZGVJbmRleCk7CisgICAgc2V0KHJlc3VsdE9wZXJhbmQsIG5vZGUpOwog
fQogCiBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVNaW5NYXgoYm9vbCB1c2VzUmVzdWx0LCBp
bnQgcmVzdWx0T3BlcmFuZCwgTm9kZVR5cGUgb3AsIGludCByZWdpc3Rlck9mZnNldCwgaW50IGFy
Z3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKQpAQCAtMTU3Niw3ICsxNTM3LDcgQEAgYm9vbCBCeXRl
Q29kZVBhcnNlcjo6aGFuZGxlTWluTWF4KGJvb2wgdQogICAgICAKICAgICBpZiAoYXJndW1lbnRD
b3VudEluY2x1ZGluZ1RoaXMgPT0gMikgeyAvLyBNYXRoLm1pbih4KQogICAgICAgICAvLyBGSVhN
RTogd2hhdCB3ZSdkIHJlYWxseSBsaWtlIGlzIGEgVmFsdWVUb051bWJlciwgZXhjZXB0IHdlIGRv
bid0IHN1cHBvcnQgdGhhdCByaWdodCBub3cuIE9oIHdlbGwuCi0gICAgICAgIE5vZGVJbmRleCBy
ZXN1bHQgPSBnZXQocmVnaXN0ZXJPZmZzZXQgKyBhcmd1bWVudFRvT3BlcmFuZCgxKSk7CisgICAg
ICAgIE5vZGUqIHJlc3VsdCA9IGdldChyZWdpc3Rlck9mZnNldCArIGFyZ3VtZW50VG9PcGVyYW5k
KDEpKTsKICAgICAgICAgYWRkVG9HcmFwaChDaGVja051bWJlciwgcmVzdWx0KTsKICAgICAgICAg
c2V0SW50cmluc2ljUmVzdWx0KHVzZXNSZXN1bHQsIHJlc3VsdE9wZXJhbmQsIHJlc3VsdCk7CiAg
ICAgICAgIHJldHVybiB0cnVlOwpAQCAtMTYwNSwxMCArMTU2NiwxMCBAQCBib29sIEJ5dGVDb2Rl
UGFyc2VyOjpoYW5kbGVJbnRyaW5zaWMoYm9vCiAgICAgICAgIGlmICghTWFjcm9Bc3NlbWJsZXI6
OnN1cHBvcnRzRmxvYXRpbmdQb2ludEFicygpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwog
Ci0gICAgICAgIE5vZGVJbmRleCBub2RlSW5kZXggPSBhZGRUb0dyYXBoKEFyaXRoQWJzLCBnZXQo
cmVnaXN0ZXJPZmZzZXQgKyBhcmd1bWVudFRvT3BlcmFuZCgxKSkpOworICAgICAgICBOb2RlKiBu
b2RlID0gYWRkVG9HcmFwaChBcml0aEFicywgZ2V0KHJlZ2lzdGVyT2Zmc2V0ICsgYXJndW1lbnRU
b09wZXJhbmQoMSkpKTsKICAgICAgICAgaWYgKG1faW5saW5lU3RhY2tUb3AtPm1fZXhpdFByb2Zp
bGUuaGFzRXhpdFNpdGUobV9jdXJyZW50SW5kZXgsIE92ZXJmbG93KSkKLSAgICAgICAgICAgIG1f
Z3JhcGhbbm9kZUluZGV4XS5tZXJnZUZsYWdzKE5vZGVNYXlPdmVyZmxvdyk7Ci0gICAgICAgIHNl
dEludHJpbnNpY1Jlc3VsdCh1c2VzUmVzdWx0LCByZXN1bHRPcGVyYW5kLCBub2RlSW5kZXgpOwor
ICAgICAgICAgICAgbm9kZS0+bWVyZ2VGbGFncyhOb2RlTWF5T3ZlcmZsb3cpOworICAgICAgICBz
ZXRJbnRyaW5zaWNSZXN1bHQodXNlc1Jlc3VsdCwgcmVzdWx0T3BlcmFuZCwgbm9kZSk7CiAgICAg
ICAgIHJldHVybiB0cnVlOwogICAgIH0KIApAQCAtMTY0NCw3ICsxNjA1LDcgQEAgYm9vbCBCeXRl
Q29kZVBhcnNlcjo6aGFuZGxlSW50cmluc2ljKGJvbwogICAgICAgICBjYXNlIEFycmF5OjpEb3Vi
bGU6CiAgICAgICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3VvdXM6CiAgICAgICAgIGNhc2UgQXJyYXk6
OkFycmF5U3RvcmFnZTogewotICAgICAgICAgICAgTm9kZUluZGV4IGFycmF5UHVzaCA9IGFkZFRv
R3JhcGgoQXJyYXlQdXNoLCBPcEluZm8oYXJyYXlNb2RlLmFzV29yZCgpKSwgT3BJbmZvKHByZWRp
Y3Rpb24pLCBnZXQocmVnaXN0ZXJPZmZzZXQgKyBhcmd1bWVudFRvT3BlcmFuZCgwKSksIGdldChy
ZWdpc3Rlck9mZnNldCArIGFyZ3VtZW50VG9PcGVyYW5kKDEpKSk7CisgICAgICAgICAgICBOb2Rl
KiBhcnJheVB1c2ggPSBhZGRUb0dyYXBoKEFycmF5UHVzaCwgT3BJbmZvKGFycmF5TW9kZS5hc1dv
cmQoKSksIE9wSW5mbyhwcmVkaWN0aW9uKSwgZ2V0KHJlZ2lzdGVyT2Zmc2V0ICsgYXJndW1lbnRU
b09wZXJhbmQoMCkpLCBnZXQocmVnaXN0ZXJPZmZzZXQgKyBhcmd1bWVudFRvT3BlcmFuZCgxKSkp
OwogICAgICAgICAgICAgaWYgKHVzZXNSZXN1bHQpCiAgICAgICAgICAgICAgICAgc2V0KHJlc3Vs
dE9wZXJhbmQsIGFycmF5UHVzaCk7CiAgICAgICAgICAgICAKQEAgLTE2NjgsNyArMTYyOSw3IEBA
IGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUludHJpbnNpYyhib28KICAgICAgICAgY2FzZSBB
cnJheTo6RG91YmxlOgogICAgICAgICBjYXNlIEFycmF5OjpDb250aWd1b3VzOgogICAgICAgICBj
YXNlIEFycmF5OjpBcnJheVN0b3JhZ2U6IHsKLSAgICAgICAgICAgIE5vZGVJbmRleCBhcnJheVBv
cCA9IGFkZFRvR3JhcGgoQXJyYXlQb3AsIE9wSW5mbyhhcnJheU1vZGUuYXNXb3JkKCkpLCBPcElu
Zm8ocHJlZGljdGlvbiksIGdldChyZWdpc3Rlck9mZnNldCArIGFyZ3VtZW50VG9PcGVyYW5kKDAp
KSk7CisgICAgICAgICAgICBOb2RlKiBhcnJheVBvcCA9IGFkZFRvR3JhcGgoQXJyYXlQb3AsIE9w
SW5mbyhhcnJheU1vZGUuYXNXb3JkKCkpLCBPcEluZm8ocHJlZGljdGlvbiksIGdldChyZWdpc3Rl
ck9mZnNldCArIGFyZ3VtZW50VG9PcGVyYW5kKDApKSk7CiAgICAgICAgICAgICBpZiAodXNlc1Jl
c3VsdCkKICAgICAgICAgICAgICAgICBzZXQocmVzdWx0T3BlcmFuZCwgYXJyYXlQb3ApOwogICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0xNjg1LDcgKzE2NDYsNyBAQCBib29sIEJ5dGVDb2Rl
UGFyc2VyOjpoYW5kbGVJbnRyaW5zaWMoYm9vCiAKICAgICAgICAgaW50IHRoaXNPcGVyYW5kID0g
cmVnaXN0ZXJPZmZzZXQgKyBhcmd1bWVudFRvT3BlcmFuZCgwKTsKICAgICAgICAgaW50IGluZGV4
T3BlcmFuZCA9IHJlZ2lzdGVyT2Zmc2V0ICsgYXJndW1lbnRUb09wZXJhbmQoMSk7Ci0gICAgICAg
IE5vZGVJbmRleCBjaGFyQ29kZSA9IGFkZFRvR3JhcGgoU3RyaW5nQ2hhckNvZGVBdCwgT3BJbmZv
KEFycmF5TW9kZShBcnJheTo6U3RyaW5nKS5hc1dvcmQoKSksIGdldCh0aGlzT3BlcmFuZCksIGdl
dFRvSW50MzIoaW5kZXhPcGVyYW5kKSk7CisgICAgICAgIE5vZGUqIGNoYXJDb2RlID0gYWRkVG9H
cmFwaChTdHJpbmdDaGFyQ29kZUF0LCBPcEluZm8oQXJyYXlNb2RlKEFycmF5OjpTdHJpbmcpLmFz
V29yZCgpKSwgZ2V0KHRoaXNPcGVyYW5kKSwgZ2V0VG9JbnQzMihpbmRleE9wZXJhbmQpKTsKIAog
ICAgICAgICBpZiAodXNlc1Jlc3VsdCkKICAgICAgICAgICAgIHNldChyZXN1bHRPcGVyYW5kLCBj
aGFyQ29kZSk7CkBAIC0xNjk4LDcgKzE2NTksNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5k
bGVJbnRyaW5zaWMoYm9vCiAKICAgICAgICAgaW50IHRoaXNPcGVyYW5kID0gcmVnaXN0ZXJPZmZz
ZXQgKyBhcmd1bWVudFRvT3BlcmFuZCgwKTsKICAgICAgICAgaW50IGluZGV4T3BlcmFuZCA9IHJl
Z2lzdGVyT2Zmc2V0ICsgYXJndW1lbnRUb09wZXJhbmQoMSk7Ci0gICAgICAgIE5vZGVJbmRleCBj
aGFyQ29kZSA9IGFkZFRvR3JhcGgoU3RyaW5nQ2hhckF0LCBPcEluZm8oQXJyYXlNb2RlKEFycmF5
OjpTdHJpbmcpLmFzV29yZCgpKSwgZ2V0KHRoaXNPcGVyYW5kKSwgZ2V0VG9JbnQzMihpbmRleE9w
ZXJhbmQpKTsKKyAgICAgICAgTm9kZSogY2hhckNvZGUgPSBhZGRUb0dyYXBoKFN0cmluZ0NoYXJB
dCwgT3BJbmZvKEFycmF5TW9kZShBcnJheTo6U3RyaW5nKS5hc1dvcmQoKSksIGdldCh0aGlzT3Bl
cmFuZCksIGdldFRvSW50MzIoaW5kZXhPcGVyYW5kKSk7CiAKICAgICAgICAgaWYgKHVzZXNSZXN1
bHQpCiAgICAgICAgICAgICBzZXQocmVzdWx0T3BlcmFuZCwgY2hhckNvZGUpOwpAQCAtMTcwOSw3
ICsxNjcwLDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW50cmluc2ljKGJvbwogICAg
ICAgICBpZiAoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgIT0gMikKICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICAgICAgCi0gICAgICAgIE5vZGVJbmRleCByZWdFeHBFeGVjID0gYWRk
VG9HcmFwaChSZWdFeHBFeGVjLCBPcEluZm8oMCksIE9wSW5mbyhwcmVkaWN0aW9uKSwgZ2V0KHJl
Z2lzdGVyT2Zmc2V0ICsgYXJndW1lbnRUb09wZXJhbmQoMCkpLCBnZXQocmVnaXN0ZXJPZmZzZXQg
KyBhcmd1bWVudFRvT3BlcmFuZCgxKSkpOworICAgICAgICBOb2RlKiByZWdFeHBFeGVjID0gYWRk
VG9HcmFwaChSZWdFeHBFeGVjLCBPcEluZm8oMCksIE9wSW5mbyhwcmVkaWN0aW9uKSwgZ2V0KHJl
Z2lzdGVyT2Zmc2V0ICsgYXJndW1lbnRUb09wZXJhbmQoMCkpLCBnZXQocmVnaXN0ZXJPZmZzZXQg
KyBhcmd1bWVudFRvT3BlcmFuZCgxKSkpOwogICAgICAgICBpZiAodXNlc1Jlc3VsdCkKICAgICAg
ICAgICAgIHNldChyZXN1bHRPcGVyYW5kLCByZWdFeHBFeGVjKTsKICAgICAgICAgCkBAIC0xNzIw
LDcgKzE2ODEsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbnRyaW5zaWMoYm9vCiAg
ICAgICAgIGlmIChhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAhPSAyKQogICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgICAgICAKLSAgICAgICAgTm9kZUluZGV4IHJlZ0V4cEV4ZWMgPSBh
ZGRUb0dyYXBoKFJlZ0V4cFRlc3QsIE9wSW5mbygwKSwgT3BJbmZvKHByZWRpY3Rpb24pLCBnZXQo
cmVnaXN0ZXJPZmZzZXQgKyBhcmd1bWVudFRvT3BlcmFuZCgwKSksIGdldChyZWdpc3Rlck9mZnNl
dCArIGFyZ3VtZW50VG9PcGVyYW5kKDEpKSk7CisgICAgICAgIE5vZGUqIHJlZ0V4cEV4ZWMgPSBh
ZGRUb0dyYXBoKFJlZ0V4cFRlc3QsIE9wSW5mbygwKSwgT3BJbmZvKHByZWRpY3Rpb24pLCBnZXQo
cmVnaXN0ZXJPZmZzZXQgKyBhcmd1bWVudFRvT3BlcmFuZCgwKSksIGdldChyZWdpc3Rlck9mZnNl
dCArIGFyZ3VtZW50VG9PcGVyYW5kKDEpKSk7CiAgICAgICAgIGlmICh1c2VzUmVzdWx0KQogICAg
ICAgICAgICAgc2V0KHJlc3VsdE9wZXJhbmQsIHJlZ0V4cEV4ZWMpOwogICAgICAgICAKQEAgLTE3
NjUsOSArMTcyNiw5IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUNvbnN0YW50SW50ZXIK
ICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLU5vZGVJbmRleCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxl
R2V0QnlPZmZzZXQoU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiwgTm9kZUluZGV4IGJhc2UsIHVu
c2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKK05vZGVJbmRl
eCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlR2V0QnlPZmZzZXQoU3BlY3VsYXRlZFR5cGUgcHJlZGlj
dGlvbiwgTm9kZSogYmFzZSwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgUHJvcGVydHlPZmZz
ZXQgb2Zmc2V0KQogewotICAgIE5vZGVJbmRleCBwcm9wZXJ0eVN0b3JhZ2U7CisgICAgTm9kZSog
cHJvcGVydHlTdG9yYWdlOwogICAgIGlmIChpc0lubGluZU9mZnNldChvZmZzZXQpKQogICAgICAg
ICBwcm9wZXJ0eVN0b3JhZ2UgPSBiYXNlOwogICAgIGVsc2UKQEAgLTE3NzYsNyArMTczNyw3IEBA
IE5vZGVJbmRleCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlR2V0QnlPZmYKICAgICAvLyBhbiBPU1Ig
c3RhbmRwb2ludCkgaWYgR2V0QnlPZmZzZXQgYWxzbyByZWZlcmVuY2VkIHRoZSBvYmplY3Qgd2Ug
d2VyZSBsb2FkaW5nCiAgICAgLy8gZnJvbSwgYW5kIGlmIHdlIGNvdWxkIGxvYWQgZWxpbWluYXRl
IGEgR2V0QnlPZmZzZXQgZXZlbiBpZiB0aGUgYnV0dGVyZmx5CiAgICAgLy8gaGFkIGNoYW5nZWQu
IFRoYXQgd291bGQgYmUgYSBncmVhdCBzdWNjZXNzLgotICAgIE5vZGVJbmRleCBnZXRCeU9mZnNl
dCA9IGFkZFRvR3JhcGgoR2V0QnlPZmZzZXQsIE9wSW5mbyhtX2dyYXBoLm1fc3RvcmFnZUFjY2Vz
c0RhdGEuc2l6ZSgpKSwgT3BJbmZvKHByZWRpY3Rpb24pLCBwcm9wZXJ0eVN0b3JhZ2UpOworICAg
IE5vZGUqIGdldEJ5T2Zmc2V0ID0gYWRkVG9HcmFwaChHZXRCeU9mZnNldCwgT3BJbmZvKG1fZ3Jh
cGgubV9zdG9yYWdlQWNjZXNzRGF0YS5zaXplKCkpLCBPcEluZm8ocHJlZGljdGlvbiksIHByb3Bl
cnR5U3RvcmFnZSk7CiAKICAgICBTdG9yYWdlQWNjZXNzRGF0YSBzdG9yYWdlQWNjZXNzRGF0YTsK
ICAgICBzdG9yYWdlQWNjZXNzRGF0YS5vZmZzZXQgPSBpbmRleFJlbGF0aXZlVG9CYXNlKG9mZnNl
dCk7CkBAIC0xNzg3LDE0ICsxNzQ4LDE0IEBAIE5vZGVJbmRleCBCeXRlQ29kZVBhcnNlcjo6aGFu
ZGxlR2V0QnlPZmYKIH0KIAogdm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlR2V0QnlPZmZzZXQo
Ci0gICAgaW50IGRlc3RpbmF0aW9uT3BlcmFuZCwgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiwg
Tm9kZUluZGV4IGJhc2UsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsCisgICAgaW50IGRlc3Rp
bmF0aW9uT3BlcmFuZCwgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiwgTm9kZSogYmFzZSwgdW5z
aWduZWQgaWRlbnRpZmllck51bWJlciwKICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCiB7CiAg
ICAgc2V0KGRlc3RpbmF0aW9uT3BlcmFuZCwgaGFuZGxlR2V0QnlPZmZzZXQocHJlZGljdGlvbiwg
YmFzZSwgaWRlbnRpZmllck51bWJlciwgb2Zmc2V0KSk7CiB9CiAKIHZvaWQgQnl0ZUNvZGVQYXJz
ZXI6OmhhbmRsZUdldEJ5SWQoCi0gICAgaW50IGRlc3RpbmF0aW9uT3BlcmFuZCwgU3BlY3VsYXRl
ZFR5cGUgcHJlZGljdGlvbiwgTm9kZUluZGV4IGJhc2UsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1i
ZXIsCisgICAgaW50IGRlc3RpbmF0aW9uT3BlcmFuZCwgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlv
biwgTm9kZSogYmFzZSwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwKICAgICBjb25zdCBHZXRC
eUlkU3RhdHVzJiBnZXRCeUlkU3RhdHVzKQogewogICAgIGlmICghZ2V0QnlJZFN0YXR1cy5pc1Np
bXBsZSgpCkBAIC0xODEzLDcgKzE3NzQsNyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVH
ZXRCeUlkKAogICAgIGlmIChwcmVkaWN0aW9uID09IFNwZWNOb25lKQogICAgICAgICBhZGRUb0dy
YXBoKEZvcmNlT1NSRXhpdCk7CiAgICAgCi0gICAgTm9kZUluZGV4IG9yaWdpbmFsQmFzZUZvckJh
c2VsaW5lSklUID0gYmFzZTsKKyAgICBOb2RlKiBvcmlnaW5hbEJhc2VGb3JCYXNlbGluZUpJVCA9
IGJhc2U7CiAgICAgICAgICAgICAgICAgCiAgICAgYWRkVG9HcmFwaChDaGVja1N0cnVjdHVyZSwg
T3BJbmZvKG1fZ3JhcGguYWRkU3RydWN0dXJlU2V0KGdldEJ5SWRTdGF0dXMuc3RydWN0dXJlU2V0
KCkpKSwgYmFzZSk7CiAgICAgCkBAIC0xODU2LDcgKzE4MTcsNyBAQCB2b2lkIEJ5dGVDb2RlUGFy
c2VyOjpwcmVwYXJlVG9QYXJzZUJsb2NrCiAKIE5vZGVJbmRleCBCeXRlQ29kZVBhcnNlcjo6Z2V0
U2NvcGUoYm9vbCBza2lwVG9wLCB1bnNpZ25lZCBza2lwQ291bnQpCiB7Ci0gICAgTm9kZUluZGV4
IGxvY2FsQmFzZTsKKyAgICBOb2RlKiBsb2NhbEJhc2U7CiAgICAgaWYgKG1faW5saW5lU3RhY2tU
b3AtPm1faW5saW5lQ2FsbEZyYW1lICYmICFtX2lubGluZVN0YWNrVG9wLT5tX2lubGluZUNhbGxG
cmFtZS0+aXNDbG9zdXJlQ2FsbCgpKSB7CiAgICAgICAgIEFTU0VSVChtX2lubGluZVN0YWNrVG9w
LT5tX2lubGluZUNhbGxGcmFtZS0+Y2FsbGVlKTsKICAgICAgICAgbG9jYWxCYXNlID0gY2VsbENv
bnN0YW50KG1faW5saW5lU3RhY2tUb3AtPm1faW5saW5lQ2FsbEZyYW1lLT5jYWxsZWUtPnNjb3Bl
KCkpOwpAQCAtMTg3MSw3ICsxODMyLDcgQEAgTm9kZUluZGV4IEJ5dGVDb2RlUGFyc2VyOjpnZXRT
Y29wZShib29sIAogICAgIHJldHVybiBsb2NhbEJhc2U7CiB9CiAKLWJvb2wgQnl0ZUNvZGVQYXJz
ZXI6OnBhcnNlUmVzb2x2ZU9wZXJhdGlvbnMoU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiwgdW5z
aWduZWQgaWRlbnRpZmllciwgdW5zaWduZWQgb3BlcmF0aW9ucywgdW5zaWduZWQgcHV0VG9CYXNl
T3BlcmF0aW9uLCBOb2RlSW5kZXgqIGJhc2UsIE5vZGVJbmRleCogdmFsdWUpCitib29sIEJ5dGVD
b2RlUGFyc2VyOjpwYXJzZVJlc29sdmVPcGVyYXRpb25zKFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rp
b24sIHVuc2lnbmVkIGlkZW50aWZpZXIsIHVuc2lnbmVkIG9wZXJhdGlvbnMsIHVuc2lnbmVkIHB1
dFRvQmFzZU9wZXJhdGlvbiwgTm9kZSoqIGJhc2UsIE5vZGUqKiB2YWx1ZSkKIHsKICAgICBSZXNv
bHZlT3BlcmF0aW9ucyogcmVzb2x2ZU9wZXJhdGlvbnMgPSBtX2NvZGVCbG9jay0+cmVzb2x2ZU9w
ZXJhdGlvbnMob3BlcmF0aW9ucyk7CiAgICAgaWYgKHJlc29sdmVPcGVyYXRpb25zLT5pc0VtcHR5
KCkpIHsKQEAgLTE4ODQsNyArMTg0NSw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlUmVz
b2x2ZU9wZXJhdGkKICAgICBib29sIHNraXBwZWRTY29wZXMgPSBmYWxzZTsKICAgICBib29sIHNl
dEJhc2UgPSBmYWxzZTsKICAgICBSZXNvbHZlT3BlcmF0aW9uKiBwYyA9IHJlc29sdmVPcGVyYXRp
b25zLT5kYXRhKCk7Ci0gICAgTm9kZUluZGV4IGxvY2FsQmFzZSA9IDA7CisgICAgTm9kZSogbG9j
YWxCYXNlID0gMDsKICAgICBib29sIHJlc29sdmluZ0Jhc2UgPSB0cnVlOwogICAgIHdoaWxlIChy
ZXNvbHZpbmdCYXNlKSB7CiAgICAgICAgIHN3aXRjaCAocGMtPm1fb3BlcmF0aW9uKSB7CkBAIC0x
OTYwLDcgKzE5MjEsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZVJlc29sdmVPcGVyYXRp
CiAgICAgICAgIGlmIChzdGF0dXMuaXNTaW1wbGUoKSkgewogICAgICAgICAgICAgQVNTRVJUKHN0
YXR1cy5zdHJ1Y3R1cmUoKSk7CiAKLSAgICAgICAgICAgIE5vZGVJbmRleCBnbG9iYWxPYmplY3RO
b2RlID0gYWRkU3RydWN0dXJlVHJhbnNpdGlvbkNoZWNrKGdsb2JhbE9iamVjdCwgc3RhdHVzLnN0
cnVjdHVyZSgpKTsKKyAgICAgICAgICAgIE5vZGUqIGdsb2JhbE9iamVjdE5vZGUgPSBhZGRTdHJ1
Y3R1cmVUcmFuc2l0aW9uQ2hlY2soZ2xvYmFsT2JqZWN0LCBzdGF0dXMuc3RydWN0dXJlKCkpOwog
CiAgICAgICAgICAgICBpZiAoc3RhdHVzLnNwZWNpZmljVmFsdWUoKSkgewogICAgICAgICAgICAg
ICAgIEFTU0VSVChzdGF0dXMuc3BlY2lmaWNWYWx1ZSgpLmlzQ2VsbCgpKTsKQEAgLTE5NzAsNyAr
MTkzMSw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlUmVzb2x2ZU9wZXJhdGkKICAgICAg
ICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAKLSAgICAgICAgTm9kZUluZGV4IHJlc29s
dmUgPSBhZGRUb0dyYXBoKFJlc29sdmVHbG9iYWwsIE9wSW5mbyhtX2dyYXBoLm1fcmVzb2x2ZUds
b2JhbERhdGEuc2l6ZSgpKSwgT3BJbmZvKHByZWRpY3Rpb24pKTsKKyAgICAgICAgTm9kZSogcmVz
b2x2ZSA9IGFkZFRvR3JhcGgoUmVzb2x2ZUdsb2JhbCwgT3BJbmZvKG1fZ3JhcGgubV9yZXNvbHZl
R2xvYmFsRGF0YS5zaXplKCkpLCBPcEluZm8ocHJlZGljdGlvbikpOwogICAgICAgICBtX2dyYXBo
Lm1fcmVzb2x2ZUdsb2JhbERhdGEuYXBwZW5kKFJlc29sdmVHbG9iYWxEYXRhKCkpOwogICAgICAg
ICBSZXNvbHZlR2xvYmFsRGF0YSYgZGF0YSA9IG1fZ3JhcGgubV9yZXNvbHZlR2xvYmFsRGF0YS5s
YXN0KCk7CiAgICAgICAgIGRhdGEuaWRlbnRpZmllck51bWJlciA9IGlkZW50aWZpZXI7CkBAIC0x
OTgxLDkgKzE5NDIsMTAgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VSZXNvbHZlT3BlcmF0
aQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgY2FzZSBSZXNvbHZlT3BlcmF0aW9u
OjpHZXRBbmRSZXR1cm5HbG9iYWxWYXI6IHsKLSAgICAgICAgKnZhbHVlID0gYWRkVG9HcmFwaChH
ZXRHbG9iYWxWYXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgT3BJbmZvKGdsb2JhbE9i
amVjdC0+YXNzZXJ0UmVnaXN0ZXJJc0luVGhpc09iamVjdChwYy0+bV9yZWdpc3RlckFkZHJlc3Mp
KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcEluZm8ocHJlZGljdGlvbikpOworICAg
ICAgICAqdmFsdWUgPSBhZGRUb0dyYXBoKAorICAgICAgICAgICAgR2V0R2xvYmFsVmFyLAorICAg
ICAgICAgICAgT3BJbmZvKGdsb2JhbE9iamVjdC0+YXNzZXJ0UmVnaXN0ZXJJc0luVGhpc09iamVj
dChwYy0+bV9yZWdpc3RlckFkZHJlc3MpKSwKKyAgICAgICAgICAgIE9wSW5mbyhwcmVkaWN0aW9u
KSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICBjYXNlIFJlc29sdmVPcGVyYXRp
b246OkdldEFuZFJldHVybkdsb2JhbFZhcldhdGNoYWJsZTogewpAQCAtMjAyMiw3ICsxOTg0LDcg
QEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VSZXNvbHZlT3BlcmF0aQogICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICB9CiAgICAgY2FzZSBSZXNvbHZlT3BlcmF0aW9uOjpHZXRBbmRSZXR1cm5T
Y29wZWRWYXI6IHsKLSAgICAgICAgTm9kZUluZGV4IGdldFNjb3BlUmVnaXN0ZXJzID0gYWRkVG9H
cmFwaChHZXRTY29wZVJlZ2lzdGVycywgbG9jYWxCYXNlKTsKKyAgICAgICAgTm9kZSogZ2V0U2Nv
cGVSZWdpc3RlcnMgPSBhZGRUb0dyYXBoKEdldFNjb3BlUmVnaXN0ZXJzLCBsb2NhbEJhc2UpOwog
ICAgICAgICAqdmFsdWUgPSBhZGRUb0dyYXBoKEdldFNjb3BlZFZhciwgT3BJbmZvKHJlc29sdmVW
YWx1ZU9wZXJhdGlvbi0+bV9vZmZzZXQpLCBPcEluZm8ocHJlZGljdGlvbiksIGdldFNjb3BlUmVn
aXN0ZXJzKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpAQCAtMjA1MSw3ICsyMDEzLDcg
QEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAg
ICAgIGFyZ3VtZW50VG9PcGVyYW5kKGFyZ3VtZW50KSwgbV9jb2RlQmxvY2stPmlzQ2FwdHVyZWQo
YXJndW1lbnRUb09wZXJhbmQoYXJndW1lbnQpKSk7CiAgICAgICAgICAgICB2YXJpYWJsZS0+bWVy
Z2VTdHJ1Y3R1cmVDaGVja0hvaXN0aW5nRmFpbGVkKAogICAgICAgICAgICAgICAgIG1faW5saW5l
U3RhY2tUb3AtPm1fZXhpdFByb2ZpbGUuaGFzRXhpdFNpdGUobV9jdXJyZW50SW5kZXgsIEJhZENh
Y2hlKSk7Ci0gICAgICAgICAgICBOb2RlSW5kZXggc2V0QXJndW1lbnQgPSBhZGRUb0dyYXBoKFNl
dEFyZ3VtZW50LCBPcEluZm8odmFyaWFibGUpKTsKKyAgICAgICAgICAgIE5vZGUqIHNldEFyZ3Vt
ZW50ID0gYWRkVG9HcmFwaChTZXRBcmd1bWVudCwgT3BJbmZvKHZhcmlhYmxlKSk7CiAgICAgICAg
ICAgICBtX2dyYXBoLm1fYXJndW1lbnRzW2FyZ3VtZW50XSA9IHNldEFyZ3VtZW50OwogICAgICAg
ICAgICAgbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0SGVhZC5zZXRBcmd1bWVudEZpcnN0VGlt
ZShhcmd1bWVudCwgc2V0QXJndW1lbnQpOwogICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPnZh
cmlhYmxlc0F0VGFpbC5zZXRBcmd1bWVudEZpcnN0VGltZShhcmd1bWVudCwgc2V0QXJndW1lbnQp
OwpAQCAtMjEwMSwxMyArMjA2MywxMyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2Nr
KHVuc2lnbmVkCiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9lbnRlcik7CiAKICAgICAgICAg
Y2FzZSBvcF9jb252ZXJ0X3RoaXM6IHsKLSAgICAgICAgICAgIE5vZGVJbmRleCBvcDEgPSBnZXRU
aGlzKCk7Ci0gICAgICAgICAgICBpZiAobV9ncmFwaFtvcDFdLm9wKCkgIT0gQ29udmVydFRoaXMp
IHsKKyAgICAgICAgICAgIE5vZGUqIG9wMSA9IGdldFRoaXMoKTsKKyAgICAgICAgICAgIGlmIChv
cDEtPm9wKCkgIT0gQ29udmVydFRoaXMpIHsKICAgICAgICAgICAgICAgICBWYWx1ZVByb2ZpbGUq
IHByb2ZpbGUgPQogICAgICAgICAgICAgICAgICAgICBtX2lubGluZVN0YWNrVG9wLT5tX3Byb2Zp
bGVkQmxvY2stPnZhbHVlUHJvZmlsZUZvckJ5dGVjb2RlT2Zmc2V0KG1fY3VycmVudFByb2ZpbGlu
Z0luZGV4KTsKICAgICAgICAgICAgICAgICBwcm9maWxlLT5jb21wdXRlVXBkYXRlZFByZWRpY3Rp
b24oKTsKICNpZiBERkdfRU5BQkxFKERFQlVHX1ZFUkJPU0UpCi0gICAgICAgICAgICAgICAgZGF0
YUxvZ0YoIltAJWx1IGJjIyV1XTogcHJvZmlsZSAlcDogIiwgbV9ncmFwaC5zaXplKCksIG1fY3Vy
cmVudFByb2ZpbGluZ0luZGV4LCBwcm9maWxlKTsKKyAgICAgICAgICAgICAgICBkYXRhTG9nRigi
W2JjIyV1XTogcHJvZmlsZSAlcDogIiwgbV9jdXJyZW50UHJvZmlsaW5nSW5kZXgsIHByb2ZpbGUp
OwogICAgICAgICAgICAgICAgIHByb2ZpbGUtPmR1bXAoV1RGOjpkYXRhRmlsZSgpKTsKICAgICAg
ICAgICAgICAgICBkYXRhTG9nRigiXG4iKTsKICNlbmRpZgpAQCAtMjEyOCwxMCArMjA5MCwxMCBA
QCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAKICAgICAgICAgY2Fz
ZSBvcF9jcmVhdGVfdGhpczogewogICAgICAgICAgICAgaW50IGNhbGxlZU9wZXJhbmQgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwotICAgICAgICAgICAgTm9kZUluZGV4IGNhbGxl
ZSA9IGdldChjYWxsZWVPcGVyYW5kKTsKKyAgICAgICAgICAgIE5vZGUqIGNhbGxlZSA9IGdldChj
YWxsZWVPcGVyYW5kKTsKICAgICAgICAgICAgIGJvb2wgYWxyZWFkeUVtaXR0ZWQgPSBmYWxzZTsK
LSAgICAgICAgICAgIGlmIChtX2dyYXBoW2NhbGxlZV0ub3AoKSA9PSBXZWFrSlNDb25zdGFudCkg
ewotICAgICAgICAgICAgICAgIEpTQ2VsbCogY2VsbCA9IG1fZ3JhcGhbY2FsbGVlXS53ZWFrQ29u
c3RhbnQoKTsKKyAgICAgICAgICAgIGlmIChjYWxsZWUtPm9wKCkgPT0gV2Vha0pTQ29uc3RhbnQp
IHsKKyAgICAgICAgICAgICAgICBKU0NlbGwqIGNlbGwgPSBjYWxsZWUtPndlYWtDb25zdGFudCgp
OwogICAgICAgICAgICAgICAgIEFTU0VSVChjZWxsLT5pbmhlcml0cygmSlNGdW5jdGlvbjo6c19p
bmZvKSk7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgSlNGdW5jdGlvbiogZnVu
Y3Rpb24gPSBqc0Nhc3Q8SlNGdW5jdGlvbio+KGNlbGwpOwpAQCAtMjIwNSw3ICsyMTY3LDcgQEAg
Ym9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgICAg
IHNldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCBnZXQoSlNTdGFjazo6Q2FsbGVl
KSk7CiAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICBBU1NFUlQocHJvZmlsZS0+
bV9zaW5nbGV0b25WYWx1ZS5hc0NlbGwoKS0+aW5oZXJpdHMoJkpTRnVuY3Rpb246OnNfaW5mbykp
OwotICAgICAgICAgICAgICAgIE5vZGVJbmRleCBhY3R1YWxDYWxsZWUgPSBnZXQoSlNTdGFjazo6
Q2FsbGVlKTsKKyAgICAgICAgICAgICAgICBOb2RlKiBhY3R1YWxDYWxsZWUgPSBnZXQoSlNTdGFj
azo6Q2FsbGVlKTsKICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKENoZWNrRnVuY3Rpb24sIE9w
SW5mbyhwcm9maWxlLT5tX3NpbmdsZXRvblZhbHVlLmFzQ2VsbCgpKSwgYWN0dWFsQ2FsbGVlKTsK
ICAgICAgICAgICAgICAgICBzZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwgYWRk
VG9HcmFwaChXZWFrSlNDb25zdGFudCwgT3BJbmZvKHByb2ZpbGUtPm1fc2luZ2xldG9uVmFsdWUu
YXNDZWxsKCkpKSk7CiAgICAgICAgICAgICB9CkBAIC0yMjE1LDMwICsyMTc3LDMwIEBAIGJvb2wg
Qnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgLy8gPT09IEJpdHdp
c2Ugb3BlcmF0aW9ucyA9PT0KIAogICAgICAgICBjYXNlIG9wX2JpdGFuZDogewotICAgICAgICAg
ICAgTm9kZUluZGV4IG9wMSA9IGdldFRvSW50MzIoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3Bl
cmFuZCk7Ci0gICAgICAgICAgICBOb2RlSW5kZXggb3AyID0gZ2V0VG9JbnQzMihjdXJyZW50SW5z
dHJ1Y3Rpb25bM10udS5vcGVyYW5kKTsKKyAgICAgICAgICAgIE5vZGUqIG9wMSA9IGdldFRvSW50
MzIoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7CisgICAgICAgICAgICBOb2RlKiBv
cDIgPSBnZXRUb0ludDMyKGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpOwogICAgICAg
ICAgICAgc2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsIGFkZFRvR3JhcGgoQml0
QW5kLCBvcDEsIG9wMikpOwogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfYml0YW5kKTsKICAg
ICAgICAgfQogCiAgICAgICAgIGNhc2Ugb3BfYml0b3I6IHsKLSAgICAgICAgICAgIE5vZGVJbmRl
eCBvcDEgPSBnZXRUb0ludDMyKGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOwotICAg
ICAgICAgICAgTm9kZUluZGV4IG9wMiA9IGdldFRvSW50MzIoY3VycmVudEluc3RydWN0aW9uWzNd
LnUub3BlcmFuZCk7CisgICAgICAgICAgICBOb2RlKiBvcDEgPSBnZXRUb0ludDMyKGN1cnJlbnRJ
bnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOworICAgICAgICAgICAgTm9kZSogb3AyID0gZ2V0VG9J
bnQzMihjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKTsKICAgICAgICAgICAgIHNldChj
dXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCBhZGRUb0dyYXBoKEJpdE9yLCBvcDEsIG9w
MikpOwogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfYml0b3IpOwogICAgICAgICB9CiAKICAg
ICAgICAgY2FzZSBvcF9iaXR4b3I6IHsKLSAgICAgICAgICAgIE5vZGVJbmRleCBvcDEgPSBnZXRU
b0ludDMyKGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOwotICAgICAgICAgICAgTm9k
ZUluZGV4IG9wMiA9IGdldFRvSW50MzIoY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZCk7
CisgICAgICAgICAgICBOb2RlKiBvcDEgPSBnZXRUb0ludDMyKGN1cnJlbnRJbnN0cnVjdGlvblsy
XS51Lm9wZXJhbmQpOworICAgICAgICAgICAgTm9kZSogb3AyID0gZ2V0VG9JbnQzMihjdXJyZW50
SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKTsKICAgICAgICAgICAgIHNldChjdXJyZW50SW5zdHJ1
Y3Rpb25bMV0udS5vcGVyYW5kLCBhZGRUb0dyYXBoKEJpdFhvciwgb3AxLCBvcDIpKTsKICAgICAg
ICAgICAgIE5FWFRfT1BDT0RFKG9wX2JpdHhvcik7CiAgICAgICAgIH0KIAogICAgICAgICBjYXNl
IG9wX3JzaGlmdDogewotICAgICAgICAgICAgTm9kZUluZGV4IG9wMSA9IGdldFRvSW50MzIoY3Vy
cmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7Ci0gICAgICAgICAgICBOb2RlSW5kZXggb3Ay
ID0gZ2V0VG9JbnQzMihjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKTsKLSAgICAgICAg
ICAgIE5vZGVJbmRleCByZXN1bHQ7CisgICAgICAgICAgICBOb2RlKiBvcDEgPSBnZXRUb0ludDMy
KGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOworICAgICAgICAgICAgTm9kZSogb3Ay
ID0gZ2V0VG9JbnQzMihjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKTsKKyAgICAgICAg
ICAgIE5vZGUqIHJlc3VsdDsKICAgICAgICAgICAgIC8vIE9wdGltaXplIG91dCBzaGlmdHMgYnkg
emVyby4KICAgICAgICAgICAgIGlmIChpc0ludDMyQ29uc3RhbnQob3AyKSAmJiAhKHZhbHVlT2ZJ
bnQzMkNvbnN0YW50KG9wMikgJiAweDFmKSkKICAgICAgICAgICAgICAgICByZXN1bHQgPSBvcDE7
CkBAIC0yMjQ5LDkgKzIyMTEsOSBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVu
c2lnbmVkCiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIG9wX2xzaGlmdDogewotICAgICAgICAg
ICAgTm9kZUluZGV4IG9wMSA9IGdldFRvSW50MzIoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3Bl
cmFuZCk7Ci0gICAgICAgICAgICBOb2RlSW5kZXggb3AyID0gZ2V0VG9JbnQzMihjdXJyZW50SW5z
dHJ1Y3Rpb25bM10udS5vcGVyYW5kKTsKLSAgICAgICAgICAgIE5vZGVJbmRleCByZXN1bHQ7Cisg
ICAgICAgICAgICBOb2RlKiBvcDEgPSBnZXRUb0ludDMyKGN1cnJlbnRJbnN0cnVjdGlvblsyXS51
Lm9wZXJhbmQpOworICAgICAgICAgICAgTm9kZSogb3AyID0gZ2V0VG9JbnQzMihjdXJyZW50SW5z
dHJ1Y3Rpb25bM10udS5vcGVyYW5kKTsKKyAgICAgICAgICAgIE5vZGUqIHJlc3VsdDsKICAgICAg
ICAgICAgIC8vIE9wdGltaXplIG91dCBzaGlmdHMgYnkgemVyby4KICAgICAgICAgICAgIGlmIChp
c0ludDMyQ29uc3RhbnQob3AyKSAmJiAhKHZhbHVlT2ZJbnQzMkNvbnN0YW50KG9wMikgJiAweDFm
KSkKICAgICAgICAgICAgICAgICByZXN1bHQgPSBvcDE7CkBAIC0yMjYyLDkgKzIyMjQsOSBAQCBi
b29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgIH0KIAogICAg
ICAgICBjYXNlIG9wX3Vyc2hpZnQ6IHsKLSAgICAgICAgICAgIE5vZGVJbmRleCBvcDEgPSBnZXRU
b0ludDMyKGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOwotICAgICAgICAgICAgTm9k
ZUluZGV4IG9wMiA9IGdldFRvSW50MzIoY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZCk7
Ci0gICAgICAgICAgICBOb2RlSW5kZXggcmVzdWx0OworICAgICAgICAgICAgTm9kZSogb3AxID0g
Z2V0VG9JbnQzMihjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKKyAgICAgICAgICAg
IE5vZGUqIG9wMiA9IGdldFRvSW50MzIoY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZCk7
CisgICAgICAgICAgICBOb2RlKiByZXN1bHQ7CiAgICAgICAgICAgICAvLyBUaGUgcmVzdWx0IG9m
IGEgemVyby1leHRlbmRpbmcgcmlnaHQgc2hpZnQgaXMgdHJlYXRlZCBhcyBhbiB1bnNpZ25lZCB2
YWx1ZS4KICAgICAgICAgICAgIC8vIFRoaXMgbWVhbnMgdGhhdCBpZiB0aGUgdG9wIGJpdCBpcyBz
ZXQsIHRoZSByZXN1bHQgaXMgbm90IGluIHRoZSBpbnQzMiByYW5nZSwKICAgICAgICAgICAgIC8v
IGFuZCBhcyBzdWNoIG11c3QgYmUgc3RvcmVkIGFzIGEgZG91YmxlLiBJZiB0aGUgc2hpZnQgYW1v
dW50IGlzIGEgY29uc3RhbnQsCkBAIC0yMjkyLDcgKzIyNTQsNyBAQCBib29sIEJ5dGVDb2RlUGFy
c2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAKICAgICAgICAgY2FzZSBvcF9wcmVfaW5jOiB7CiAg
ICAgICAgICAgICB1bnNpZ25lZCBzcmNEc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVy
YW5kOwotICAgICAgICAgICAgTm9kZUluZGV4IG9wID0gZ2V0KHNyY0RzdCk7CisgICAgICAgICAg
ICBOb2RlKiBvcCA9IGdldChzcmNEc3QpOwogICAgICAgICAgICAgc2V0KHNyY0RzdCwgbWFrZVNh
ZmUoYWRkVG9HcmFwaChBcml0aEFkZCwgb3AsIG9uZSgpKSkpOwogICAgICAgICAgICAgTkVYVF9P
UENPREUob3BfcHJlX2luYyk7CiAgICAgICAgIH0KQEAgLTIzMDEsMTQgKzIyNjMsMTQgQEAgYm9v
bCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgdW5zaWdu
ZWQgcmVzdWx0ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKICAgICAgICAgICAg
IHVuc2lnbmVkIHNyY0RzdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7CiAgICAg
ICAgICAgICBBU1NFUlQocmVzdWx0ICE9IHNyY0RzdCk7IC8vIFJlcXVpcmVkIGZvciBhc3N1bXB0
aW9ucyB3ZSBtYWtlIGR1cmluZyBPU1IuCi0gICAgICAgICAgICBOb2RlSW5kZXggb3AgPSBnZXQo
c3JjRHN0KTsKKyAgICAgICAgICAgIE5vZGUqIG9wID0gZ2V0KHNyY0RzdCk7CiAgICAgICAgICAg
ICBzZXRQYWlyKHJlc3VsdCwgb3AsIHNyY0RzdCwgbWFrZVNhZmUoYWRkVG9HcmFwaChBcml0aEFk
ZCwgb3AsIG9uZSgpKSkpOwogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfcG9zdF9pbmMpOwog
ICAgICAgICB9CiAKICAgICAgICAgY2FzZSBvcF9wcmVfZGVjOiB7CiAgICAgICAgICAgICB1bnNp
Z25lZCBzcmNEc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwotICAgICAgICAg
ICAgTm9kZUluZGV4IG9wID0gZ2V0KHNyY0RzdCk7CisgICAgICAgICAgICBOb2RlKiBvcCA9IGdl
dChzcmNEc3QpOwogICAgICAgICAgICAgc2V0KHNyY0RzdCwgbWFrZVNhZmUoYWRkVG9HcmFwaChB
cml0aFN1Yiwgb3AsIG9uZSgpKSkpOwogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfcHJlX2Rl
Yyk7CiAgICAgICAgIH0KQEAgLTIzMTYsNyArMjI3OCw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6
OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgY2FzZSBvcF9wb3N0X2RlYzogewogICAgICAg
ICAgICAgdW5zaWduZWQgcmVzdWx0ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsK
ICAgICAgICAgICAgIHVuc2lnbmVkIHNyY0RzdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9w
ZXJhbmQ7Ci0gICAgICAgICAgICBOb2RlSW5kZXggb3AgPSBnZXQoc3JjRHN0KTsKKyAgICAgICAg
ICAgIE5vZGUqIG9wID0gZ2V0KHNyY0RzdCk7CiAgICAgICAgICAgICBzZXRQYWlyKHJlc3VsdCwg
b3AsIHNyY0RzdCwgbWFrZVNhZmUoYWRkVG9HcmFwaChBcml0aFN1Yiwgb3AsIG9uZSgpKSkpOwog
ICAgICAgICAgICAgTkVYVF9PUENPREUob3BfcG9zdF9kZWMpOwogICAgICAgICB9CkBAIC0yMzI0
LDkgKzIyODYsOSBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAg
ICAgICAgIC8vID09PSBBcml0aG1ldGljIG9wZXJhdGlvbnMgPT09CiAKICAgICAgICAgY2FzZSBv
cF9hZGQ6IHsKLSAgICAgICAgICAgIE5vZGVJbmRleCBvcDEgPSBnZXQoY3VycmVudEluc3RydWN0
aW9uWzJdLnUub3BlcmFuZCk7Ci0gICAgICAgICAgICBOb2RlSW5kZXggb3AyID0gZ2V0KGN1cnJl
bnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpOwotICAgICAgICAgICAgaWYgKG1fZ3JhcGhbb3Ax
XS5oYXNOdW1iZXJSZXN1bHQoKSAmJiBtX2dyYXBoW29wMl0uaGFzTnVtYmVyUmVzdWx0KCkpCisg
ICAgICAgICAgICBOb2RlKiBvcDEgPSBnZXQoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFu
ZCk7CisgICAgICAgICAgICBOb2RlKiBvcDIgPSBnZXQoY3VycmVudEluc3RydWN0aW9uWzNdLnUu
b3BlcmFuZCk7CisgICAgICAgICAgICBpZiAob3AxLT5oYXNOdW1iZXJSZXN1bHQoKSAmJiBvcDIt
Pmhhc051bWJlclJlc3VsdCgpKQogICAgICAgICAgICAgICAgIHNldChjdXJyZW50SW5zdHJ1Y3Rp
b25bMV0udS5vcGVyYW5kLCBtYWtlU2FmZShhZGRUb0dyYXBoKEFyaXRoQWRkLCBvcDEsIG9wMikp
KTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBzZXQoY3VycmVudEluc3RydWN0
aW9uWzFdLnUub3BlcmFuZCwgbWFrZVNhZmUoYWRkVG9HcmFwaChWYWx1ZUFkZCwgb3AxLCBvcDIp
KSk7CkBAIC0yMzM0LDM2ICsyMjk2LDM2IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxv
Y2sodW5zaWduZWQKICAgICAgICAgfQogCiAgICAgICAgIGNhc2Ugb3Bfc3ViOiB7Ci0gICAgICAg
ICAgICBOb2RlSW5kZXggb3AxID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQp
OwotICAgICAgICAgICAgTm9kZUluZGV4IG9wMiA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bM10u
dS5vcGVyYW5kKTsKKyAgICAgICAgICAgIE5vZGUqIG9wMSA9IGdldChjdXJyZW50SW5zdHJ1Y3Rp
b25bMl0udS5vcGVyYW5kKTsKKyAgICAgICAgICAgIE5vZGUqIG9wMiA9IGdldChjdXJyZW50SW5z
dHJ1Y3Rpb25bM10udS5vcGVyYW5kKTsKICAgICAgICAgICAgIHNldChjdXJyZW50SW5zdHJ1Y3Rp
b25bMV0udS5vcGVyYW5kLCBtYWtlU2FmZShhZGRUb0dyYXBoKEFyaXRoU3ViLCBvcDEsIG9wMikp
KTsKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX3N1Yik7CiAgICAgICAgIH0KIAogICAgICAg
ICBjYXNlIG9wX25lZ2F0ZTogewotICAgICAgICAgICAgTm9kZUluZGV4IG9wMSA9IGdldChjdXJy
ZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKKyAgICAgICAgICAgIE5vZGUqIG9wMSA9IGdl
dChjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKICAgICAgICAgICAgIHNldChjdXJy
ZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCBtYWtlU2FmZShhZGRUb0dyYXBoKEFyaXRoTmVn
YXRlLCBvcDEpKSk7CiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9uZWdhdGUpOwogICAgICAg
ICB9CiAKICAgICAgICAgY2FzZSBvcF9tdWw6IHsKICAgICAgICAgICAgIC8vIE11bHRpcGx5IHJl
cXVpcmVzIHRoYXQgdGhlIGlucHV0cyBhcmUgbm90IHRydW5jYXRlZCwgdW5mb3J0dW5hdGVseS4K
LSAgICAgICAgICAgIE5vZGVJbmRleCBvcDEgPSBnZXQoY3VycmVudEluc3RydWN0aW9uWzJdLnUu
b3BlcmFuZCk7Ci0gICAgICAgICAgICBOb2RlSW5kZXggb3AyID0gZ2V0KGN1cnJlbnRJbnN0cnVj
dGlvblszXS51Lm9wZXJhbmQpOworICAgICAgICAgICAgTm9kZSogb3AxID0gZ2V0KGN1cnJlbnRJ
bnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOworICAgICAgICAgICAgTm9kZSogb3AyID0gZ2V0KGN1
cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpOwogICAgICAgICAgICAgc2V0KGN1cnJlbnRJ
bnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsIG1ha2VTYWZlKGFkZFRvR3JhcGgoQXJpdGhNdWwsIG9w
MSwgb3AyKSkpOwogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfbXVsKTsKICAgICAgICAgfQog
CiAgICAgICAgIGNhc2Ugb3BfbW9kOiB7Ci0gICAgICAgICAgICBOb2RlSW5kZXggb3AxID0gZ2V0
KGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOwotICAgICAgICAgICAgTm9kZUluZGV4
IG9wMiA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKTsKKyAgICAgICAgICAg
IE5vZGUqIG9wMSA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKKyAgICAg
ICAgICAgIE5vZGUqIG9wMiA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKTsK
ICAgICAgICAgICAgIHNldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCBtYWtlU2Fm
ZShhZGRUb0dyYXBoKEFyaXRoTW9kLCBvcDEsIG9wMikpKTsKICAgICAgICAgICAgIE5FWFRfT1BD
T0RFKG9wX21vZCk7CiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIG9wX2RpdjogewotICAgICAg
ICAgICAgTm9kZUluZGV4IG9wMSA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5k
KTsKLSAgICAgICAgICAgIE5vZGVJbmRleCBvcDIgPSBnZXQoY3VycmVudEluc3RydWN0aW9uWzNd
LnUub3BlcmFuZCk7CisgICAgICAgICAgICBOb2RlKiBvcDEgPSBnZXQoY3VycmVudEluc3RydWN0
aW9uWzJdLnUub3BlcmFuZCk7CisgICAgICAgICAgICBOb2RlKiBvcDIgPSBnZXQoY3VycmVudElu
c3RydWN0aW9uWzNdLnUub3BlcmFuZCk7CiAgICAgICAgICAgICBzZXQoY3VycmVudEluc3RydWN0
aW9uWzFdLnUub3BlcmFuZCwgbWFrZURpdlNhZmUoYWRkVG9HcmFwaChBcml0aERpdiwgb3AxLCBv
cDIpKSk7CiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9kaXYpOwogICAgICAgICB9CkBAIC0y
Mzc2LDcgKzIzMzgsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVk
CiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9kZWJ1Zyk7CiAjZW5kaWYKICAgICAgICAgY2Fz
ZSBvcF9tb3Y6IHsKLSAgICAgICAgICAgIE5vZGVJbmRleCBvcCA9IGdldChjdXJyZW50SW5zdHJ1
Y3Rpb25bMl0udS5vcGVyYW5kKTsKKyAgICAgICAgICAgIE5vZGUqIG9wID0gZ2V0KGN1cnJlbnRJ
bnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOwogICAgICAgICAgICAgc2V0KGN1cnJlbnRJbnN0cnVj
dGlvblsxXS51Lm9wZXJhbmQsIG9wKTsKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX21vdik7
CiAgICAgICAgIH0KQEAgLTIzODYsNTYgKzIzNDgsNTYgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6
cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfY2hlY2tfaGFz
X2luc3RhbmNlKTsKIAogICAgICAgICBjYXNlIG9wX2luc3RhbmNlb2Y6IHsKLSAgICAgICAgICAg
IE5vZGVJbmRleCB2YWx1ZSA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsK
LSAgICAgICAgICAgIE5vZGVJbmRleCBwcm90b3R5cGUgPSBnZXQoY3VycmVudEluc3RydWN0aW9u
WzNdLnUub3BlcmFuZCk7CisgICAgICAgICAgICBOb2RlKiB2YWx1ZSA9IGdldChjdXJyZW50SW5z
dHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKKyAgICAgICAgICAgIE5vZGUqIHByb3RvdHlwZSA9IGdl
dChjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKTsKICAgICAgICAgICAgIHNldChjdXJy
ZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCBhZGRUb0dyYXBoKEluc3RhbmNlT2YsIHZhbHVl
LCBwcm90b3R5cGUpKTsKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2luc3RhbmNlb2YpOwog
ICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBvcF9pc191bmRlZmluZWQ6IHsK
LSAgICAgICAgICAgIE5vZGVJbmRleCB2YWx1ZSA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMl0u
dS5vcGVyYW5kKTsKKyAgICAgICAgICAgIE5vZGUqIHZhbHVlID0gZ2V0KGN1cnJlbnRJbnN0cnVj
dGlvblsyXS51Lm9wZXJhbmQpOwogICAgICAgICAgICAgc2V0KGN1cnJlbnRJbnN0cnVjdGlvblsx
XS51Lm9wZXJhbmQsIGFkZFRvR3JhcGgoSXNVbmRlZmluZWQsIHZhbHVlKSk7CiAgICAgICAgICAg
ICBORVhUX09QQ09ERShvcF9pc191bmRlZmluZWQpOwogICAgICAgICB9CiAKICAgICAgICAgY2Fz
ZSBvcF9pc19ib29sZWFuOiB7Ci0gICAgICAgICAgICBOb2RlSW5kZXggdmFsdWUgPSBnZXQoY3Vy
cmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7CisgICAgICAgICAgICBOb2RlKiB2YWx1ZSA9
IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKICAgICAgICAgICAgIHNldChj
dXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCBhZGRUb0dyYXBoKElzQm9vbGVhbiwgdmFs
dWUpKTsKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2lzX2Jvb2xlYW4pOwogICAgICAgICB9
CiAKICAgICAgICAgY2FzZSBvcF9pc19udW1iZXI6IHsKLSAgICAgICAgICAgIE5vZGVJbmRleCB2
YWx1ZSA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKKyAgICAgICAgICAg
IE5vZGUqIHZhbHVlID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOwogICAg
ICAgICAgICAgc2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsIGFkZFRvR3JhcGgo
SXNOdW1iZXIsIHZhbHVlKSk7CiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9pc19udW1iZXIp
OwogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBvcF9pc19zdHJpbmc6IHsKLSAgICAgICAgICAg
IE5vZGVJbmRleCB2YWx1ZSA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsK
KyAgICAgICAgICAgIE5vZGUqIHZhbHVlID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9w
ZXJhbmQpOwogICAgICAgICAgICAgc2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQs
IGFkZFRvR3JhcGgoSXNTdHJpbmcsIHZhbHVlKSk7CiAgICAgICAgICAgICBORVhUX09QQ09ERShv
cF9pc19zdHJpbmcpOwogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBvcF9pc19vYmplY3Q6IHsK
LSAgICAgICAgICAgIE5vZGVJbmRleCB2YWx1ZSA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMl0u
dS5vcGVyYW5kKTsKKyAgICAgICAgICAgIE5vZGUqIHZhbHVlID0gZ2V0KGN1cnJlbnRJbnN0cnVj
dGlvblsyXS51Lm9wZXJhbmQpOwogICAgICAgICAgICAgc2V0KGN1cnJlbnRJbnN0cnVjdGlvblsx
XS51Lm9wZXJhbmQsIGFkZFRvR3JhcGgoSXNPYmplY3QsIHZhbHVlKSk7CiAgICAgICAgICAgICBO
RVhUX09QQ09ERShvcF9pc19vYmplY3QpOwogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBvcF9p
c19mdW5jdGlvbjogewotICAgICAgICAgICAgTm9kZUluZGV4IHZhbHVlID0gZ2V0KGN1cnJlbnRJ
bnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOworICAgICAgICAgICAgTm9kZSogdmFsdWUgPSBnZXQo
Y3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7CiAgICAgICAgICAgICBzZXQoY3VycmVu
dEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwgYWRkVG9HcmFwaChJc0Z1bmN0aW9uLCB2YWx1ZSkp
OwogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfaXNfZnVuY3Rpb24pOwogICAgICAgICB9CiAK
ICAgICAgICAgY2FzZSBvcF9ub3Q6IHsKLSAgICAgICAgICAgIE5vZGVJbmRleCB2YWx1ZSA9IGdl
dChjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKKyAgICAgICAgICAgIE5vZGUqIHZh
bHVlID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOwogICAgICAgICAgICAg
c2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsIGFkZFRvR3JhcGgoTG9naWNhbE5v
dCwgdmFsdWUpKTsKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX25vdCk7CiAgICAgICAgIH0K
ICAgICAgICAgICAgIAogICAgICAgICBjYXNlIG9wX3RvX3ByaW1pdGl2ZTogewotICAgICAgICAg
ICAgTm9kZUluZGV4IHZhbHVlID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQp
OworICAgICAgICAgICAgTm9kZSogdmFsdWUgPSBnZXQoY3VycmVudEluc3RydWN0aW9uWzJdLnUu
b3BlcmFuZCk7CiAgICAgICAgICAgICBzZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFu
ZCwgYWRkVG9HcmFwaChUb1ByaW1pdGl2ZSwgdmFsdWUpKTsKICAgICAgICAgICAgIE5FWFRfT1BD
T0RFKG9wX3RvX3ByaW1pdGl2ZSk7CiAgICAgICAgIH0KQEAgLTI0NTAsNjkgKzI0MTIsNjkgQEAg
Ym9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICB9CiAKICAg
ICAgICAgY2FzZSBvcF9sZXNzOiB7Ci0gICAgICAgICAgICBOb2RlSW5kZXggb3AxID0gZ2V0KGN1
cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOwotICAgICAgICAgICAgTm9kZUluZGV4IG9w
MiA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKTsKKyAgICAgICAgICAgIE5v
ZGUqIG9wMSA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKKyAgICAgICAg
ICAgIE5vZGUqIG9wMiA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKTsKICAg
ICAgICAgICAgIHNldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCBhZGRUb0dyYXBo
KENvbXBhcmVMZXNzLCBvcDEsIG9wMikpOwogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfbGVz
cyk7CiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIG9wX2xlc3NlcTogewotICAgICAgICAgICAg
Tm9kZUluZGV4IG9wMSA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKLSAg
ICAgICAgICAgIE5vZGVJbmRleCBvcDIgPSBnZXQoY3VycmVudEluc3RydWN0aW9uWzNdLnUub3Bl
cmFuZCk7CisgICAgICAgICAgICBOb2RlKiBvcDEgPSBnZXQoY3VycmVudEluc3RydWN0aW9uWzJd
LnUub3BlcmFuZCk7CisgICAgICAgICAgICBOb2RlKiBvcDIgPSBnZXQoY3VycmVudEluc3RydWN0
aW9uWzNdLnUub3BlcmFuZCk7CiAgICAgICAgICAgICBzZXQoY3VycmVudEluc3RydWN0aW9uWzFd
LnUub3BlcmFuZCwgYWRkVG9HcmFwaChDb21wYXJlTGVzc0VxLCBvcDEsIG9wMikpOwogICAgICAg
ICAgICAgTkVYVF9PUENPREUob3BfbGVzc2VxKTsKICAgICAgICAgfQogCiAgICAgICAgIGNhc2Ug
b3BfZ3JlYXRlcjogewotICAgICAgICAgICAgTm9kZUluZGV4IG9wMSA9IGdldChjdXJyZW50SW5z
dHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKLSAgICAgICAgICAgIE5vZGVJbmRleCBvcDIgPSBnZXQo
Y3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZCk7CisgICAgICAgICAgICBOb2RlKiBvcDEg
PSBnZXQoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7CisgICAgICAgICAgICBOb2Rl
KiBvcDIgPSBnZXQoY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZCk7CiAgICAgICAgICAg
ICBzZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwgYWRkVG9HcmFwaChDb21wYXJl
R3JlYXRlciwgb3AxLCBvcDIpKTsKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2dyZWF0ZXIp
OwogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBvcF9ncmVhdGVyZXE6IHsKLSAgICAgICAgICAg
IE5vZGVJbmRleCBvcDEgPSBnZXQoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7Ci0g
ICAgICAgICAgICBOb2RlSW5kZXggb3AyID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9w
ZXJhbmQpOworICAgICAgICAgICAgTm9kZSogb3AxID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsy
XS51Lm9wZXJhbmQpOworICAgICAgICAgICAgTm9kZSogb3AyID0gZ2V0KGN1cnJlbnRJbnN0cnVj
dGlvblszXS51Lm9wZXJhbmQpOwogICAgICAgICAgICAgc2V0KGN1cnJlbnRJbnN0cnVjdGlvblsx
XS51Lm9wZXJhbmQsIGFkZFRvR3JhcGgoQ29tcGFyZUdyZWF0ZXJFcSwgb3AxLCBvcDIpKTsKICAg
ICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2dyZWF0ZXJlcSk7CiAgICAgICAgIH0KIAogICAgICAg
ICBjYXNlIG9wX2VxOiB7Ci0gICAgICAgICAgICBOb2RlSW5kZXggb3AxID0gZ2V0KGN1cnJlbnRJ
bnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOwotICAgICAgICAgICAgTm9kZUluZGV4IG9wMiA9IGdl
dChjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKTsKKyAgICAgICAgICAgIE5vZGUqIG9w
MSA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKKyAgICAgICAgICAgIE5v
ZGUqIG9wMiA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKTsKICAgICAgICAg
ICAgIHNldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCBhZGRUb0dyYXBoKENvbXBh
cmVFcSwgb3AxLCBvcDIpKTsKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2VxKTsKICAgICAg
ICAgfQogCiAgICAgICAgIGNhc2Ugb3BfZXFfbnVsbDogewotICAgICAgICAgICAgTm9kZUluZGV4
IHZhbHVlID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOworICAgICAgICAg
ICAgTm9kZSogdmFsdWUgPSBnZXQoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7CiAg
ICAgICAgICAgICBzZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwgYWRkVG9HcmFw
aChDb21wYXJlRXEsIHZhbHVlLCBjb25zdGFudE51bGwoKSkpOwogICAgICAgICAgICAgTkVYVF9P
UENPREUob3BfZXFfbnVsbCk7CiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIG9wX3N0cmljdGVx
OiB7Ci0gICAgICAgICAgICBOb2RlSW5kZXggb3AxID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsy
XS51Lm9wZXJhbmQpOwotICAgICAgICAgICAgTm9kZUluZGV4IG9wMiA9IGdldChjdXJyZW50SW5z
dHJ1Y3Rpb25bM10udS5vcGVyYW5kKTsKKyAgICAgICAgICAgIE5vZGUqIG9wMSA9IGdldChjdXJy
ZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKKyAgICAgICAgICAgIE5vZGUqIG9wMiA9IGdl
dChjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKTsKICAgICAgICAgICAgIHNldChjdXJy
ZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCBhZGRUb0dyYXBoKENvbXBhcmVTdHJpY3RFcSwg
b3AxLCBvcDIpKTsKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX3N0cmljdGVxKTsKICAgICAg
ICAgfQogCiAgICAgICAgIGNhc2Ugb3BfbmVxOiB7Ci0gICAgICAgICAgICBOb2RlSW5kZXggb3Ax
ID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOwotICAgICAgICAgICAgTm9k
ZUluZGV4IG9wMiA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKTsKKyAgICAg
ICAgICAgIE5vZGUqIG9wMSA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsK
KyAgICAgICAgICAgIE5vZGUqIG9wMiA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVy
YW5kKTsKICAgICAgICAgICAgIHNldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCBh
ZGRUb0dyYXBoKExvZ2ljYWxOb3QsIGFkZFRvR3JhcGgoQ29tcGFyZUVxLCBvcDEsIG9wMikpKTsK
ICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX25lcSk7CiAgICAgICAgIH0KIAogICAgICAgICBj
YXNlIG9wX25lcV9udWxsOiB7Ci0gICAgICAgICAgICBOb2RlSW5kZXggdmFsdWUgPSBnZXQoY3Vy
cmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7CisgICAgICAgICAgICBOb2RlKiB2YWx1ZSA9
IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKICAgICAgICAgICAgIHNldChj
dXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCBhZGRUb0dyYXBoKExvZ2ljYWxOb3QsIGFk
ZFRvR3JhcGgoQ29tcGFyZUVxLCB2YWx1ZSwgY29uc3RhbnROdWxsKCkpKSk7CiAgICAgICAgICAg
ICBORVhUX09QQ09ERShvcF9uZXFfbnVsbCk7CiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIG9w
X25zdHJpY3RlcTogewotICAgICAgICAgICAgTm9kZUluZGV4IG9wMSA9IGdldChjdXJyZW50SW5z
dHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKLSAgICAgICAgICAgIE5vZGVJbmRleCBvcDIgPSBnZXQo
Y3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZCk7CisgICAgICAgICAgICBOb2RlKiBvcDEg
PSBnZXQoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7CisgICAgICAgICAgICBOb2Rl
KiBvcDIgPSBnZXQoY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZCk7CiAgICAgICAgICAg
ICBzZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwgYWRkVG9HcmFwaChMb2dpY2Fs
Tm90LCBhZGRUb0dyYXBoKENvbXBhcmVTdHJpY3RFcSwgb3AxLCBvcDIpKSk7CiAgICAgICAgICAg
ICBORVhUX09QQ09ERShvcF9uc3RyaWN0ZXEpOwogICAgICAgICB9CkBAIC0yNTIyLDIyICsyNDg0
LDIyIEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAg
Y2FzZSBvcF9nZXRfYnlfdmFsOiB7CiAgICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0
aW9uID0gZ2V0UHJlZGljdGlvbigpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBOb2RlSW5k
ZXggYmFzZSA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKKyAgICAgICAg
ICAgIE5vZGUqIGJhc2UgPSBnZXQoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7CiAg
ICAgICAgICAgICBBcnJheU1vZGUgYXJyYXlNb2RlID0gZ2V0QXJyYXlNb2RlQW5kRW1pdENoZWNr
cyhjdXJyZW50SW5zdHJ1Y3Rpb25bNF0udS5hcnJheVByb2ZpbGUsIEFycmF5OjpSZWFkLCBiYXNl
KTsKLSAgICAgICAgICAgIE5vZGVJbmRleCBwcm9wZXJ0eSA9IGdldChjdXJyZW50SW5zdHJ1Y3Rp
b25bM10udS5vcGVyYW5kKTsKLSAgICAgICAgICAgIE5vZGVJbmRleCBnZXRCeVZhbCA9IGFkZFRv
R3JhcGgoR2V0QnlWYWwsIE9wSW5mbyhhcnJheU1vZGUuYXNXb3JkKCkpLCBPcEluZm8ocHJlZGlj
dGlvbiksIGJhc2UsIHByb3BlcnR5KTsKKyAgICAgICAgICAgIE5vZGUqIHByb3BlcnR5ID0gZ2V0
KGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpOworICAgICAgICAgICAgTm9kZSogZ2V0
QnlWYWwgPSBhZGRUb0dyYXBoKEdldEJ5VmFsLCBPcEluZm8oYXJyYXlNb2RlLmFzV29yZCgpKSwg
T3BJbmZvKHByZWRpY3Rpb24pLCBiYXNlLCBwcm9wZXJ0eSk7CiAgICAgICAgICAgICBzZXQoY3Vy
cmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwgZ2V0QnlWYWwpOwogCiAgICAgICAgICAgICBO
RVhUX09QQ09ERShvcF9nZXRfYnlfdmFsKTsKICAgICAgICAgfQogCiAgICAgICAgIGNhc2Ugb3Bf
cHV0X2J5X3ZhbDogewotICAgICAgICAgICAgTm9kZUluZGV4IGJhc2UgPSBnZXQoY3VycmVudElu
c3RydWN0aW9uWzFdLnUub3BlcmFuZCk7CisgICAgICAgICAgICBOb2RlKiBiYXNlID0gZ2V0KGN1
cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpOwogCiAgICAgICAgICAgICBBcnJheU1vZGUg
YXJyYXlNb2RlID0gZ2V0QXJyYXlNb2RlQW5kRW1pdENoZWNrcyhjdXJyZW50SW5zdHJ1Y3Rpb25b
NF0udS5hcnJheVByb2ZpbGUsIEFycmF5OjpXcml0ZSwgYmFzZSk7CiAgICAgICAgICAgICAKLSAg
ICAgICAgICAgIE5vZGVJbmRleCBwcm9wZXJ0eSA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMl0u
dS5vcGVyYW5kKTsKLSAgICAgICAgICAgIE5vZGVJbmRleCB2YWx1ZSA9IGdldChjdXJyZW50SW5z
dHJ1Y3Rpb25bM10udS5vcGVyYW5kKTsKKyAgICAgICAgICAgIE5vZGUqIHByb3BlcnR5ID0gZ2V0
KGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOworICAgICAgICAgICAgTm9kZSogdmFs
dWUgPSBnZXQoY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZCk7CiAgICAgICAgICAgICAK
ICAgICAgICAgICAgIGFkZFZhckFyZ0NoaWxkKGJhc2UpOwogICAgICAgICAgICAgYWRkVmFyQXJn
Q2hpbGQocHJvcGVydHkpOwpAQCAtMjU1Myw3ICsyNTE1LDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNl
cjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICBjYXNlIG9wX2dldF9hcnJheV9sZW5ndGg6
IHsKICAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24gPSBnZXRQcmVkaWN0aW9u
KCk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIE5vZGVJbmRleCBiYXNlID0gZ2V0KGN1cnJl
bnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOworICAgICAgICAgICAgTm9kZSogYmFzZSA9IGdl
dChjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKICAgICAgICAgICAgIHVuc2lnbmVk
IGlkZW50aWZpZXJOdW1iZXIgPSBtX2lubGluZVN0YWNrVG9wLT5tX2lkZW50aWZpZXJSZW1hcFtj
dXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kXTsKICAgICAgICAgICAgIAogICAgICAgICAg
ICAgSWRlbnRpZmllciBpZGVudGlmaWVyID0gbV9jb2RlQmxvY2stPmlkZW50aWZpZXIoaWRlbnRp
Zmllck51bWJlcik7CkBAIC0yNTcxLDggKzI1MzMsOCBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpw
YXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgIGNhc2Ugb3BfcHV0X2J5X2lkX3RyYW5zaXRpb25f
bm9ybWFsOgogICAgICAgICBjYXNlIG9wX3B1dF9ieV9pZF90cmFuc2l0aW9uX2RpcmVjdF9vdXRf
b2ZfbGluZToKICAgICAgICAgY2FzZSBvcF9wdXRfYnlfaWRfdHJhbnNpdGlvbl9ub3JtYWxfb3V0
X29mX2xpbmU6IHsKLSAgICAgICAgICAgIE5vZGVJbmRleCB2YWx1ZSA9IGdldChjdXJyZW50SW5z
dHJ1Y3Rpb25bM10udS5vcGVyYW5kKTsKLSAgICAgICAgICAgIE5vZGVJbmRleCBiYXNlID0gZ2V0
KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpOworICAgICAgICAgICAgTm9kZSogdmFs
dWUgPSBnZXQoY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZCk7CisgICAgICAgICAgICBO
b2RlKiBiYXNlID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpOwogICAgICAg
ICAgICAgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciA9IG1faW5saW5lU3RhY2tUb3AtPm1faWRl
bnRpZmllclJlbWFwW2N1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmRdOwogICAgICAgICAg
ICAgYm9vbCBkaXJlY3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bOF0udS5vcGVyYW5kOwogCkBAIC0y
NTg3LDcgKzI1NDksNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVk
CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlmICghaGFzRXhpdFNpdGUgJiYgcHV0QnlJZFN0
YXR1cy5pc1NpbXBsZVJlcGxhY2UoKSkgewogICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoQ2hl
Y2tTdHJ1Y3R1cmUsIE9wSW5mbyhtX2dyYXBoLmFkZFN0cnVjdHVyZVNldChwdXRCeUlkU3RhdHVz
Lm9sZFN0cnVjdHVyZSgpKSksIGJhc2UpOwotICAgICAgICAgICAgICAgIE5vZGVJbmRleCBwcm9w
ZXJ0eVN0b3JhZ2U7CisgICAgICAgICAgICAgICAgTm9kZSogcHJvcGVydHlTdG9yYWdlOwogICAg
ICAgICAgICAgICAgIGlmIChpc0lubGluZU9mZnNldChwdXRCeUlkU3RhdHVzLm9mZnNldCgpKSkK
ICAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlTdG9yYWdlID0gYmFzZTsKICAgICAgICAgICAg
ICAgICBlbHNlCkBAIC0yNjIyLDcgKzI1ODQsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJz
ZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIEFTU0VS
VChwdXRCeUlkU3RhdHVzLm9sZFN0cnVjdHVyZSgpLT50cmFuc2l0aW9uV2F0Y2hwb2ludFNldEhh
c0JlZW5JbnZhbGlkYXRlZCgpKTsKICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBO
b2RlSW5kZXggcHJvcGVydHlTdG9yYWdlOworICAgICAgICAgICAgICAgIE5vZGUqIHByb3BlcnR5
U3RvcmFnZTsKICAgICAgICAgICAgICAgICBTdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSogdHJhbnNp
dGlvbkRhdGEgPQogICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLmFkZFN0cnVjdHVyZVRyYW5z
aXRpb25EYXRhKAogICAgICAgICAgICAgICAgICAgICAgICAgU3RydWN0dXJlVHJhbnNpdGlvbkRh
dGEoCkBAIC0yNjc5LDcgKzI2NDEsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2Nr
KHVuc2lnbmVkCiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIG9wX2luaXRfZ2xvYmFsX2NvbnN0
OiB7Ci0gICAgICAgICAgICBOb2RlSW5kZXggdmFsdWUgPSBnZXQoY3VycmVudEluc3RydWN0aW9u
WzJdLnUub3BlcmFuZCk7CisgICAgICAgICAgICBOb2RlKiB2YWx1ZSA9IGdldChjdXJyZW50SW5z
dHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKICAgICAgICAgICAgIGFkZFRvR3JhcGgoCiAgICAgICAg
ICAgICAgICAgUHV0R2xvYmFsVmFyLAogICAgICAgICAgICAgICAgIE9wSW5mbyhtX2lubGluZVN0
YWNrVG9wLT5tX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPmFzc2VydFJlZ2lzdGVySXNJblRo
aXNPYmplY3QoY3VycmVudEluc3RydWN0aW9uWzFdLnUucmVnaXN0ZXJQb2ludGVyKSksCkBAIC0y
Njg4LDcgKzI2NTAsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVk
CiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIG9wX2luaXRfZ2xvYmFsX2NvbnN0X2NoZWNrOiB7
Ci0gICAgICAgICAgICBOb2RlSW5kZXggdmFsdWUgPSBnZXQoY3VycmVudEluc3RydWN0aW9uWzJd
LnUub3BlcmFuZCk7CisgICAgICAgICAgICBOb2RlKiB2YWx1ZSA9IGdldChjdXJyZW50SW5zdHJ1
Y3Rpb25bMl0udS5vcGVyYW5kKTsKICAgICAgICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrID0g
bV9pbmxpbmVTdGFja1RvcC0+bV9jb2RlQmxvY2s7CiAgICAgICAgICAgICBKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0ID0gY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKTsKICAgICAgICAgICAg
IHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIgPSBtX2lubGluZVN0YWNrVG9wLT5tX2lkZW50aWZp
ZXJSZW1hcFtjdXJyZW50SW5zdHJ1Y3Rpb25bNF0udS5vcGVyYW5kXTsKQEAgLTI3MjYsMTUyICsy
Njg4LDE1MiBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAKICAg
ICAgICAgY2FzZSBvcF9qdHJ1ZTogewogICAgICAgICAgICAgdW5zaWduZWQgcmVsYXRpdmVPZmZz
ZXQgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwotICAgICAgICAgICAgTm9kZUlu
ZGV4IGNvbmRpdGlvbiA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKTsKKyAg
ICAgICAgICAgIE5vZGUqIGNvbmRpdGlvbiA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5v
cGVyYW5kKTsKICAgICAgICAgICAgIGFkZFRvR3JhcGgoQnJhbmNoLCBPcEluZm8obV9jdXJyZW50
SW5kZXggKyByZWxhdGl2ZU9mZnNldCksIE9wSW5mbyhtX2N1cnJlbnRJbmRleCArIE9QQ09ERV9M
RU5HVEgob3BfanRydWUpKSwgY29uZGl0aW9uKTsKICAgICAgICAgICAgIExBU1RfT1BDT0RFKG9w
X2p0cnVlKTsKICAgICAgICAgfQogCiAgICAgICAgIGNhc2Ugb3BfamZhbHNlOiB7CiAgICAgICAg
ICAgICB1bnNpZ25lZCByZWxhdGl2ZU9mZnNldCA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9w
ZXJhbmQ7Ci0gICAgICAgICAgICBOb2RlSW5kZXggY29uZGl0aW9uID0gZ2V0KGN1cnJlbnRJbnN0
cnVjdGlvblsxXS51Lm9wZXJhbmQpOworICAgICAgICAgICAgTm9kZSogY29uZGl0aW9uID0gZ2V0
KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpOwogICAgICAgICAgICAgYWRkVG9HcmFw
aChCcmFuY2gsIE9wSW5mbyhtX2N1cnJlbnRJbmRleCArIE9QQ09ERV9MRU5HVEgob3BfamZhbHNl
KSksIE9wSW5mbyhtX2N1cnJlbnRJbmRleCArIHJlbGF0aXZlT2Zmc2V0KSwgY29uZGl0aW9uKTsK
ICAgICAgICAgICAgIExBU1RfT1BDT0RFKG9wX2pmYWxzZSk7CiAgICAgICAgIH0KIAogICAgICAg
ICBjYXNlIG9wX2xvb3BfaWZfdHJ1ZTogewogICAgICAgICAgICAgdW5zaWduZWQgcmVsYXRpdmVP
ZmZzZXQgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwotICAgICAgICAgICAgTm9k
ZUluZGV4IGNvbmRpdGlvbiA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKTsK
KyAgICAgICAgICAgIE5vZGUqIGNvbmRpdGlvbiA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0u
dS5vcGVyYW5kKTsKICAgICAgICAgICAgIGFkZFRvR3JhcGgoQnJhbmNoLCBPcEluZm8obV9jdXJy
ZW50SW5kZXggKyByZWxhdGl2ZU9mZnNldCksIE9wSW5mbyhtX2N1cnJlbnRJbmRleCArIE9QQ09E
RV9MRU5HVEgob3BfbG9vcF9pZl90cnVlKSksIGNvbmRpdGlvbik7CiAgICAgICAgICAgICBMQVNU
X09QQ09ERShvcF9sb29wX2lmX3RydWUpOwogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBvcF9s
b29wX2lmX2ZhbHNlOiB7CiAgICAgICAgICAgICB1bnNpZ25lZCByZWxhdGl2ZU9mZnNldCA9IGN1
cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBOb2RlSW5kZXggY29u
ZGl0aW9uID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpOworICAgICAgICAg
ICAgTm9kZSogY29uZGl0aW9uID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQp
OwogICAgICAgICAgICAgYWRkVG9HcmFwaChCcmFuY2gsIE9wSW5mbyhtX2N1cnJlbnRJbmRleCAr
IE9QQ09ERV9MRU5HVEgob3BfbG9vcF9pZl9mYWxzZSkpLCBPcEluZm8obV9jdXJyZW50SW5kZXgg
KyByZWxhdGl2ZU9mZnNldCksIGNvbmRpdGlvbik7CiAgICAgICAgICAgICBMQVNUX09QQ09ERShv
cF9sb29wX2lmX2ZhbHNlKTsKICAgICAgICAgfQogCiAgICAgICAgIGNhc2Ugb3BfamVxX251bGw6
IHsKICAgICAgICAgICAgIHVuc2lnbmVkIHJlbGF0aXZlT2Zmc2V0ID0gY3VycmVudEluc3RydWN0
aW9uWzJdLnUub3BlcmFuZDsKLSAgICAgICAgICAgIE5vZGVJbmRleCB2YWx1ZSA9IGdldChjdXJy
ZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKTsKLSAgICAgICAgICAgIE5vZGVJbmRleCBjb25k
aXRpb24gPSBhZGRUb0dyYXBoKENvbXBhcmVFcSwgdmFsdWUsIGNvbnN0YW50TnVsbCgpKTsKKyAg
ICAgICAgICAgIE5vZGUqIHZhbHVlID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJh
bmQpOworICAgICAgICAgICAgTm9kZSogY29uZGl0aW9uID0gYWRkVG9HcmFwaChDb21wYXJlRXEs
IHZhbHVlLCBjb25zdGFudE51bGwoKSk7CiAgICAgICAgICAgICBhZGRUb0dyYXBoKEJyYW5jaCwg
T3BJbmZvKG1fY3VycmVudEluZGV4ICsgcmVsYXRpdmVPZmZzZXQpLCBPcEluZm8obV9jdXJyZW50
SW5kZXggKyBPUENPREVfTEVOR1RIKG9wX2plcV9udWxsKSksIGNvbmRpdGlvbik7CiAgICAgICAg
ICAgICBMQVNUX09QQ09ERShvcF9qZXFfbnVsbCk7CiAgICAgICAgIH0KIAogICAgICAgICBjYXNl
IG9wX2puZXFfbnVsbDogewogICAgICAgICAgICAgdW5zaWduZWQgcmVsYXRpdmVPZmZzZXQgPSBj
dXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwotICAgICAgICAgICAgTm9kZUluZGV4IHZh
bHVlID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpOwotICAgICAgICAgICAg
Tm9kZUluZGV4IGNvbmRpdGlvbiA9IGFkZFRvR3JhcGgoQ29tcGFyZUVxLCB2YWx1ZSwgY29uc3Rh
bnROdWxsKCkpOworICAgICAgICAgICAgTm9kZSogdmFsdWUgPSBnZXQoY3VycmVudEluc3RydWN0
aW9uWzFdLnUub3BlcmFuZCk7CisgICAgICAgICAgICBOb2RlKiBjb25kaXRpb24gPSBhZGRUb0dy
YXBoKENvbXBhcmVFcSwgdmFsdWUsIGNvbnN0YW50TnVsbCgpKTsKICAgICAgICAgICAgIGFkZFRv
R3JhcGgoQnJhbmNoLCBPcEluZm8obV9jdXJyZW50SW5kZXggKyBPUENPREVfTEVOR1RIKG9wX2pu
ZXFfbnVsbCkpLCBPcEluZm8obV9jdXJyZW50SW5kZXggKyByZWxhdGl2ZU9mZnNldCksIGNvbmRp
dGlvbik7CiAgICAgICAgICAgICBMQVNUX09QQ09ERShvcF9qbmVxX251bGwpOwogICAgICAgICB9
CiAKICAgICAgICAgY2FzZSBvcF9qbGVzczogewogICAgICAgICAgICAgdW5zaWduZWQgcmVsYXRp
dmVPZmZzZXQgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOwotICAgICAgICAgICAg
Tm9kZUluZGV4IG9wMSA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKTsKLSAg
ICAgICAgICAgIE5vZGVJbmRleCBvcDIgPSBnZXQoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3Bl
cmFuZCk7Ci0gICAgICAgICAgICBOb2RlSW5kZXggY29uZGl0aW9uID0gYWRkVG9HcmFwaChDb21w
YXJlTGVzcywgb3AxLCBvcDIpOworICAgICAgICAgICAgTm9kZSogb3AxID0gZ2V0KGN1cnJlbnRJ
bnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpOworICAgICAgICAgICAgTm9kZSogb3AyID0gZ2V0KGN1
cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOworICAgICAgICAgICAgTm9kZSogY29uZGl0
aW9uID0gYWRkVG9HcmFwaChDb21wYXJlTGVzcywgb3AxLCBvcDIpOwogICAgICAgICAgICAgYWRk
VG9HcmFwaChCcmFuY2gsIE9wSW5mbyhtX2N1cnJlbnRJbmRleCArIHJlbGF0aXZlT2Zmc2V0KSwg
T3BJbmZvKG1fY3VycmVudEluZGV4ICsgT1BDT0RFX0xFTkdUSChvcF9qbGVzcykpLCBjb25kaXRp
b24pOwogICAgICAgICAgICAgTEFTVF9PUENPREUob3Bfamxlc3MpOwogICAgICAgICB9CiAKICAg
ICAgICAgY2FzZSBvcF9qbGVzc2VxOiB7CiAgICAgICAgICAgICB1bnNpZ25lZCByZWxhdGl2ZU9m
ZnNldCA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBOb2Rl
SW5kZXggb3AxID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpOwotICAgICAg
ICAgICAgTm9kZUluZGV4IG9wMiA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5k
KTsKLSAgICAgICAgICAgIE5vZGVJbmRleCBjb25kaXRpb24gPSBhZGRUb0dyYXBoKENvbXBhcmVM
ZXNzRXEsIG9wMSwgb3AyKTsKKyAgICAgICAgICAgIE5vZGUqIG9wMSA9IGdldChjdXJyZW50SW5z
dHJ1Y3Rpb25bMV0udS5vcGVyYW5kKTsKKyAgICAgICAgICAgIE5vZGUqIG9wMiA9IGdldChjdXJy
ZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKKyAgICAgICAgICAgIE5vZGUqIGNvbmRpdGlv
biA9IGFkZFRvR3JhcGgoQ29tcGFyZUxlc3NFcSwgb3AxLCBvcDIpOwogICAgICAgICAgICAgYWRk
VG9HcmFwaChCcmFuY2gsIE9wSW5mbyhtX2N1cnJlbnRJbmRleCArIHJlbGF0aXZlT2Zmc2V0KSwg
T3BJbmZvKG1fY3VycmVudEluZGV4ICsgT1BDT0RFX0xFTkdUSChvcF9qbGVzc2VxKSksIGNvbmRp
dGlvbik7CiAgICAgICAgICAgICBMQVNUX09QQ09ERShvcF9qbGVzc2VxKTsKICAgICAgICAgfQog
CiAgICAgICAgIGNhc2Ugb3BfamdyZWF0ZXI6IHsKICAgICAgICAgICAgIHVuc2lnbmVkIHJlbGF0
aXZlT2Zmc2V0ID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKLSAgICAgICAgICAg
IE5vZGVJbmRleCBvcDEgPSBnZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCk7Ci0g
ICAgICAgICAgICBOb2RlSW5kZXggb3AyID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9w
ZXJhbmQpOwotICAgICAgICAgICAgTm9kZUluZGV4IGNvbmRpdGlvbiA9IGFkZFRvR3JhcGgoQ29t
cGFyZUdyZWF0ZXIsIG9wMSwgb3AyKTsKKyAgICAgICAgICAgIE5vZGUqIG9wMSA9IGdldChjdXJy
ZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKTsKKyAgICAgICAgICAgIE5vZGUqIG9wMiA9IGdl
dChjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKKyAgICAgICAgICAgIE5vZGUqIGNv
bmRpdGlvbiA9IGFkZFRvR3JhcGgoQ29tcGFyZUdyZWF0ZXIsIG9wMSwgb3AyKTsKICAgICAgICAg
ICAgIGFkZFRvR3JhcGgoQnJhbmNoLCBPcEluZm8obV9jdXJyZW50SW5kZXggKyByZWxhdGl2ZU9m
ZnNldCksIE9wSW5mbyhtX2N1cnJlbnRJbmRleCArIE9QQ09ERV9MRU5HVEgob3BfamdyZWF0ZXIp
KSwgY29uZGl0aW9uKTsKICAgICAgICAgICAgIExBU1RfT1BDT0RFKG9wX2pncmVhdGVyKTsKICAg
ICAgICAgfQogCiAgICAgICAgIGNhc2Ugb3BfamdyZWF0ZXJlcTogewogICAgICAgICAgICAgdW5z
aWduZWQgcmVsYXRpdmVPZmZzZXQgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOwot
ICAgICAgICAgICAgTm9kZUluZGV4IG9wMSA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5v
cGVyYW5kKTsKLSAgICAgICAgICAgIE5vZGVJbmRleCBvcDIgPSBnZXQoY3VycmVudEluc3RydWN0
aW9uWzJdLnUub3BlcmFuZCk7Ci0gICAgICAgICAgICBOb2RlSW5kZXggY29uZGl0aW9uID0gYWRk
VG9HcmFwaChDb21wYXJlR3JlYXRlckVxLCBvcDEsIG9wMik7CisgICAgICAgICAgICBOb2RlKiBv
cDEgPSBnZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCk7CisgICAgICAgICAgICBO
b2RlKiBvcDIgPSBnZXQoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7CisgICAgICAg
ICAgICBOb2RlKiBjb25kaXRpb24gPSBhZGRUb0dyYXBoKENvbXBhcmVHcmVhdGVyRXEsIG9wMSwg
b3AyKTsKICAgICAgICAgICAgIGFkZFRvR3JhcGgoQnJhbmNoLCBPcEluZm8obV9jdXJyZW50SW5k
ZXggKyByZWxhdGl2ZU9mZnNldCksIE9wSW5mbyhtX2N1cnJlbnRJbmRleCArIE9QQ09ERV9MRU5H
VEgob3BfamdyZWF0ZXJlcSkpLCBjb25kaXRpb24pOwogICAgICAgICAgICAgTEFTVF9PUENPREUo
b3BfamdyZWF0ZXJlcSk7CiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIG9wX2pubGVzczogewog
ICAgICAgICAgICAgdW5zaWduZWQgcmVsYXRpdmVPZmZzZXQgPSBjdXJyZW50SW5zdHJ1Y3Rpb25b
M10udS5vcGVyYW5kOwotICAgICAgICAgICAgTm9kZUluZGV4IG9wMSA9IGdldChjdXJyZW50SW5z
dHJ1Y3Rpb25bMV0udS5vcGVyYW5kKTsKLSAgICAgICAgICAgIE5vZGVJbmRleCBvcDIgPSBnZXQo
Y3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7Ci0gICAgICAgICAgICBOb2RlSW5kZXgg
Y29uZGl0aW9uID0gYWRkVG9HcmFwaChDb21wYXJlTGVzcywgb3AxLCBvcDIpOworICAgICAgICAg
ICAgTm9kZSogb3AxID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpOworICAg
ICAgICAgICAgTm9kZSogb3AyID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQp
OworICAgICAgICAgICAgTm9kZSogY29uZGl0aW9uID0gYWRkVG9HcmFwaChDb21wYXJlTGVzcywg
b3AxLCBvcDIpOwogICAgICAgICAgICAgYWRkVG9HcmFwaChCcmFuY2gsIE9wSW5mbyhtX2N1cnJl
bnRJbmRleCArIE9QQ09ERV9MRU5HVEgob3Bfam5sZXNzKSksIE9wSW5mbyhtX2N1cnJlbnRJbmRl
eCArIHJlbGF0aXZlT2Zmc2V0KSwgY29uZGl0aW9uKTsKICAgICAgICAgICAgIExBU1RfT1BDT0RF
KG9wX2pubGVzcyk7CiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIG9wX2pubGVzc2VxOiB7CiAg
ICAgICAgICAgICB1bnNpZ25lZCByZWxhdGl2ZU9mZnNldCA9IGN1cnJlbnRJbnN0cnVjdGlvblsz
XS51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBOb2RlSW5kZXggb3AxID0gZ2V0KGN1cnJlbnRJbnN0
cnVjdGlvblsxXS51Lm9wZXJhbmQpOwotICAgICAgICAgICAgTm9kZUluZGV4IG9wMiA9IGdldChj
dXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKLSAgICAgICAgICAgIE5vZGVJbmRleCBj
b25kaXRpb24gPSBhZGRUb0dyYXBoKENvbXBhcmVMZXNzRXEsIG9wMSwgb3AyKTsKKyAgICAgICAg
ICAgIE5vZGUqIG9wMSA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKTsKKyAg
ICAgICAgICAgIE5vZGUqIG9wMiA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5k
KTsKKyAgICAgICAgICAgIE5vZGUqIGNvbmRpdGlvbiA9IGFkZFRvR3JhcGgoQ29tcGFyZUxlc3NF
cSwgb3AxLCBvcDIpOwogICAgICAgICAgICAgYWRkVG9HcmFwaChCcmFuY2gsIE9wSW5mbyhtX2N1
cnJlbnRJbmRleCArIE9QQ09ERV9MRU5HVEgob3Bfam5sZXNzZXEpKSwgT3BJbmZvKG1fY3VycmVu
dEluZGV4ICsgcmVsYXRpdmVPZmZzZXQpLCBjb25kaXRpb24pOwogICAgICAgICAgICAgTEFTVF9P
UENPREUob3Bfam5sZXNzZXEpOwogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBvcF9qbmdyZWF0
ZXI6IHsKICAgICAgICAgICAgIHVuc2lnbmVkIHJlbGF0aXZlT2Zmc2V0ID0gY3VycmVudEluc3Ry
dWN0aW9uWzNdLnUub3BlcmFuZDsKLSAgICAgICAgICAgIE5vZGVJbmRleCBvcDEgPSBnZXQoY3Vy
cmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCk7Ci0gICAgICAgICAgICBOb2RlSW5kZXggb3Ay
ID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOwotICAgICAgICAgICAgTm9k
ZUluZGV4IGNvbmRpdGlvbiA9IGFkZFRvR3JhcGgoQ29tcGFyZUdyZWF0ZXIsIG9wMSwgb3AyKTsK
KyAgICAgICAgICAgIE5vZGUqIG9wMSA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVy
YW5kKTsKKyAgICAgICAgICAgIE5vZGUqIG9wMiA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMl0u
dS5vcGVyYW5kKTsKKyAgICAgICAgICAgIE5vZGUqIGNvbmRpdGlvbiA9IGFkZFRvR3JhcGgoQ29t
cGFyZUdyZWF0ZXIsIG9wMSwgb3AyKTsKICAgICAgICAgICAgIGFkZFRvR3JhcGgoQnJhbmNoLCBP
cEluZm8obV9jdXJyZW50SW5kZXggKyBPUENPREVfTEVOR1RIKG9wX2puZ3JlYXRlcikpLCBPcElu
Zm8obV9jdXJyZW50SW5kZXggKyByZWxhdGl2ZU9mZnNldCksIGNvbmRpdGlvbik7CiAgICAgICAg
ICAgICBMQVNUX09QQ09ERShvcF9qbmdyZWF0ZXIpOwogICAgICAgICB9CiAKICAgICAgICAgY2Fz
ZSBvcF9qbmdyZWF0ZXJlcTogewogICAgICAgICAgICAgdW5zaWduZWQgcmVsYXRpdmVPZmZzZXQg
PSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOwotICAgICAgICAgICAgTm9kZUluZGV4
IG9wMSA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKTsKLSAgICAgICAgICAg
IE5vZGVJbmRleCBvcDIgPSBnZXQoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7Ci0g
ICAgICAgICAgICBOb2RlSW5kZXggY29uZGl0aW9uID0gYWRkVG9HcmFwaChDb21wYXJlR3JlYXRl
ckVxLCBvcDEsIG9wMik7CisgICAgICAgICAgICBOb2RlKiBvcDEgPSBnZXQoY3VycmVudEluc3Ry
dWN0aW9uWzFdLnUub3BlcmFuZCk7CisgICAgICAgICAgICBOb2RlKiBvcDIgPSBnZXQoY3VycmVu
dEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7CisgICAgICAgICAgICBOb2RlKiBjb25kaXRpb24g
PSBhZGRUb0dyYXBoKENvbXBhcmVHcmVhdGVyRXEsIG9wMSwgb3AyKTsKICAgICAgICAgICAgIGFk
ZFRvR3JhcGgoQnJhbmNoLCBPcEluZm8obV9jdXJyZW50SW5kZXggKyBPUENPREVfTEVOR1RIKG9w
X2puZ3JlYXRlcmVxKSksIE9wSW5mbyhtX2N1cnJlbnRJbmRleCArIHJlbGF0aXZlT2Zmc2V0KSwg
Y29uZGl0aW9uKTsKICAgICAgICAgICAgIExBU1RfT1BDT0RFKG9wX2puZ3JlYXRlcmVxKTsKICAg
ICAgICAgfQogCiAgICAgICAgIGNhc2Ugb3BfbG9vcF9pZl9sZXNzOiB7CiAgICAgICAgICAgICB1
bnNpZ25lZCByZWxhdGl2ZU9mZnNldCA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7
Ci0gICAgICAgICAgICBOb2RlSW5kZXggb3AxID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51
Lm9wZXJhbmQpOwotICAgICAgICAgICAgTm9kZUluZGV4IG9wMiA9IGdldChjdXJyZW50SW5zdHJ1
Y3Rpb25bMl0udS5vcGVyYW5kKTsKLSAgICAgICAgICAgIE5vZGVJbmRleCBjb25kaXRpb24gPSBh
ZGRUb0dyYXBoKENvbXBhcmVMZXNzLCBvcDEsIG9wMik7CisgICAgICAgICAgICBOb2RlKiBvcDEg
PSBnZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCk7CisgICAgICAgICAgICBOb2Rl
KiBvcDIgPSBnZXQoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7CisgICAgICAgICAg
ICBOb2RlKiBjb25kaXRpb24gPSBhZGRUb0dyYXBoKENvbXBhcmVMZXNzLCBvcDEsIG9wMik7CiAg
ICAgICAgICAgICBhZGRUb0dyYXBoKEJyYW5jaCwgT3BJbmZvKG1fY3VycmVudEluZGV4ICsgcmVs
YXRpdmVPZmZzZXQpLCBPcEluZm8obV9jdXJyZW50SW5kZXggKyBPUENPREVfTEVOR1RIKG9wX2xv
b3BfaWZfbGVzcykpLCBjb25kaXRpb24pOwogICAgICAgICAgICAgTEFTVF9PUENPREUob3BfbG9v
cF9pZl9sZXNzKTsKICAgICAgICAgfQogCiAgICAgICAgIGNhc2Ugb3BfbG9vcF9pZl9sZXNzZXE6
IHsKICAgICAgICAgICAgIHVuc2lnbmVkIHJlbGF0aXZlT2Zmc2V0ID0gY3VycmVudEluc3RydWN0
aW9uWzNdLnUub3BlcmFuZDsKLSAgICAgICAgICAgIE5vZGVJbmRleCBvcDEgPSBnZXQoY3VycmVu
dEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCk7Ci0gICAgICAgICAgICBOb2RlSW5kZXggb3AyID0g
Z2V0KGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOwotICAgICAgICAgICAgTm9kZUlu
ZGV4IGNvbmRpdGlvbiA9IGFkZFRvR3JhcGgoQ29tcGFyZUxlc3NFcSwgb3AxLCBvcDIpOworICAg
ICAgICAgICAgTm9kZSogb3AxID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQp
OworICAgICAgICAgICAgTm9kZSogb3AyID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9w
ZXJhbmQpOworICAgICAgICAgICAgTm9kZSogY29uZGl0aW9uID0gYWRkVG9HcmFwaChDb21wYXJl
TGVzc0VxLCBvcDEsIG9wMik7CiAgICAgICAgICAgICBhZGRUb0dyYXBoKEJyYW5jaCwgT3BJbmZv
KG1fY3VycmVudEluZGV4ICsgcmVsYXRpdmVPZmZzZXQpLCBPcEluZm8obV9jdXJyZW50SW5kZXgg
KyBPUENPREVfTEVOR1RIKG9wX2xvb3BfaWZfbGVzc2VxKSksIGNvbmRpdGlvbik7CiAgICAgICAg
ICAgICBMQVNUX09QQ09ERShvcF9sb29wX2lmX2xlc3NlcSk7CiAgICAgICAgIH0KIAogICAgICAg
ICBjYXNlIG9wX2xvb3BfaWZfZ3JlYXRlcjogewogICAgICAgICAgICAgdW5zaWduZWQgcmVsYXRp
dmVPZmZzZXQgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOwotICAgICAgICAgICAg
Tm9kZUluZGV4IG9wMSA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKTsKLSAg
ICAgICAgICAgIE5vZGVJbmRleCBvcDIgPSBnZXQoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3Bl
cmFuZCk7Ci0gICAgICAgICAgICBOb2RlSW5kZXggY29uZGl0aW9uID0gYWRkVG9HcmFwaChDb21w
YXJlR3JlYXRlciwgb3AxLCBvcDIpOworICAgICAgICAgICAgTm9kZSogb3AxID0gZ2V0KGN1cnJl
bnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpOworICAgICAgICAgICAgTm9kZSogb3AyID0gZ2V0
KGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOworICAgICAgICAgICAgTm9kZSogY29u
ZGl0aW9uID0gYWRkVG9HcmFwaChDb21wYXJlR3JlYXRlciwgb3AxLCBvcDIpOwogICAgICAgICAg
ICAgYWRkVG9HcmFwaChCcmFuY2gsIE9wSW5mbyhtX2N1cnJlbnRJbmRleCArIHJlbGF0aXZlT2Zm
c2V0KSwgT3BJbmZvKG1fY3VycmVudEluZGV4ICsgT1BDT0RFX0xFTkdUSChvcF9sb29wX2lmX2dy
ZWF0ZXIpKSwgY29uZGl0aW9uKTsKICAgICAgICAgICAgIExBU1RfT1BDT0RFKG9wX2xvb3BfaWZf
Z3JlYXRlcik7CiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIG9wX2xvb3BfaWZfZ3JlYXRlcmVx
OiB7CiAgICAgICAgICAgICB1bnNpZ25lZCByZWxhdGl2ZU9mZnNldCA9IGN1cnJlbnRJbnN0cnVj
dGlvblszXS51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBOb2RlSW5kZXggb3AxID0gZ2V0KGN1cnJl
bnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpOwotICAgICAgICAgICAgTm9kZUluZGV4IG9wMiA9
IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKLSAgICAgICAgICAgIE5vZGVJ
bmRleCBjb25kaXRpb24gPSBhZGRUb0dyYXBoKENvbXBhcmVHcmVhdGVyRXEsIG9wMSwgb3AyKTsK
KyAgICAgICAgICAgIE5vZGUqIG9wMSA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVy
YW5kKTsKKyAgICAgICAgICAgIE5vZGUqIG9wMiA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMl0u
dS5vcGVyYW5kKTsKKyAgICAgICAgICAgIE5vZGUqIGNvbmRpdGlvbiA9IGFkZFRvR3JhcGgoQ29t
cGFyZUdyZWF0ZXJFcSwgb3AxLCBvcDIpOwogICAgICAgICAgICAgYWRkVG9HcmFwaChCcmFuY2gs
IE9wSW5mbyhtX2N1cnJlbnRJbmRleCArIHJlbGF0aXZlT2Zmc2V0KSwgT3BJbmZvKG1fY3VycmVu
dEluZGV4ICsgT1BDT0RFX0xFTkdUSChvcF9sb29wX2lmX2dyZWF0ZXJlcSkpLCBjb25kaXRpb24p
OwogICAgICAgICAgICAgTEFTVF9PUENPREUob3BfbG9vcF9pZl9ncmVhdGVyZXEpOwogICAgICAg
ICB9CkBAIC0yOTU2LDcgKzI5MTgsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2Nr
KHVuc2lnbmVkCiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGFyZ3VtZW50ID0gMTsgYXJndW1l
bnQgPCBhcmdDb3VudDsgKythcmd1bWVudCkKICAgICAgICAgICAgICAgICBhZGRWYXJBcmdDaGls
ZChnZXQoYXJndW1lbnRUb09wZXJhbmQoYXJndW1lbnQpKSk7CiAgICAgICAgICAgICAKLSAgICAg
ICAgICAgIE5vZGVJbmRleCBjYWxsID0gYWRkVG9HcmFwaChOb2RlOjpWYXJBcmcsIENhbGwsIE9w
SW5mbygwKSwgT3BJbmZvKHByZWRpY3Rpb24pKTsKKyAgICAgICAgICAgIE5vZGUqIGNhbGwgPSBh
ZGRUb0dyYXBoKE5vZGU6OlZhckFyZywgQ2FsbCwgT3BJbmZvKDApLCBPcEluZm8ocHJlZGljdGlv
bikpOwogICAgICAgICAgICAgaWYgKGludGVycHJldGVyLT5nZXRPcGNvZGVJRChwdXRJbnN0cnVj
dGlvbi0+dS5vcGNvZGUpID09IG9wX2NhbGxfcHV0X3Jlc3VsdCkKICAgICAgICAgICAgICAgICBz
ZXQocHV0SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCBjYWxsKTsKICAgICAgICAgICAgIApAQCAt
Mjk4OCwxMyArMjk1MCwxMyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2ln
bmVkCiAgICAgICAgICAgICAKICAgICAgICAgICAgIHVuc2lnbmVkIGlkZW50aWZpZXIgPSBtX2lu
bGluZVN0YWNrVG9wLT5tX2lkZW50aWZpZXJSZW1hcFtjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5v
cGVyYW5kXTsKICAgICAgICAgICAgIHVuc2lnbmVkIG9wZXJhdGlvbnMgPSBtX2lubGluZVN0YWNr
VG9wLT5tX3Jlc29sdmVPcGVyYXRpb25SZW1hcFtjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVy
YW5kXTsKLSAgICAgICAgICAgIE5vZGVJbmRleCB2YWx1ZSA9IDA7CisgICAgICAgICAgICBOb2Rl
KiB2YWx1ZSA9IDA7CiAgICAgICAgICAgICBpZiAocGFyc2VSZXNvbHZlT3BlcmF0aW9ucyhwcmVk
aWN0aW9uLCBpZGVudGlmaWVyLCBvcGVyYXRpb25zLCAwLCAwLCAmdmFsdWUpKSB7CiAgICAgICAg
ICAgICAgICAgc2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsIHZhbHVlKTsKICAg
ICAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9yZXNvbHZlKTsKICAgICAgICAgICAgIH0KIAot
ICAgICAgICAgICAgTm9kZUluZGV4IHJlc29sdmUgPSBhZGRUb0dyYXBoKFJlc29sdmUsIE9wSW5m
byhtX2dyYXBoLm1fcmVzb2x2ZU9wZXJhdGlvbnNEYXRhLnNpemUoKSksIE9wSW5mbyhwcmVkaWN0
aW9uKSk7CisgICAgICAgICAgICBOb2RlKiByZXNvbHZlID0gYWRkVG9HcmFwaChSZXNvbHZlLCBP
cEluZm8obV9ncmFwaC5tX3Jlc29sdmVPcGVyYXRpb25zRGF0YS5zaXplKCkpLCBPcEluZm8ocHJl
ZGljdGlvbikpOwogICAgICAgICAgICAgbV9ncmFwaC5tX3Jlc29sdmVPcGVyYXRpb25zRGF0YS5h
cHBlbmQoUmVzb2x2ZU9wZXJhdGlvbkRhdGEoKSk7CiAgICAgICAgICAgICBSZXNvbHZlT3BlcmF0
aW9uRGF0YSYgZGF0YSA9IG1fZ3JhcGgubV9yZXNvbHZlT3BlcmF0aW9uc0RhdGEubGFzdCgpOwog
ICAgICAgICAgICAgZGF0YS5pZGVudGlmaWVyTnVtYmVyID0gaWRlbnRpZmllcjsKQEAgLTMwNDIs
OCArMzAwNCw4IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGdldCh2YWx1ZSkpOwogICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgY2FzZSBQdXRUb0Jhc2VPcGVyYXRpb246OlZhcmlhYmxlUHV0OiB7
Ci0gICAgICAgICAgICAgICAgTm9kZUluZGV4IHNjb3BlID0gZ2V0KGJhc2UpOwotICAgICAgICAg
ICAgICAgIE5vZGVJbmRleCBzY29wZVJlZ2lzdGVycyA9IGFkZFRvR3JhcGgoR2V0U2NvcGVSZWdp
c3RlcnMsIHNjb3BlKTsKKyAgICAgICAgICAgICAgICBOb2RlKiBzY29wZSA9IGdldChiYXNlKTsK
KyAgICAgICAgICAgICAgICBOb2RlKiBzY29wZVJlZ2lzdGVycyA9IGFkZFRvR3JhcGgoR2V0U2Nv
cGVSZWdpc3RlcnMsIHNjb3BlKTsKICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKFB1dFNjb3Bl
ZFZhciwgT3BJbmZvKHB1dFRvQmFzZS0+bV9vZmZzZXQpLCBzY29wZSwgc2NvcGVSZWdpc3RlcnMs
IGdldCh2YWx1ZSkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQpAQCAt
MzA1Myw5ICszMDE1LDkgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25l
ZAogICAgICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKFBoYW50b20sIGdldChiYXNlKSk7CiAg
ICAgICAgICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX3B1dF90b19iYXNlKTsKICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgTm9kZUluZGV4IGJhc2VOb2RlID0gZ2V0KGJhc2Up
OworICAgICAgICAgICAgICAgIE5vZGUqIGJhc2VOb2RlID0gZ2V0KGJhc2UpOwogICAgICAgICAg
ICAgICAgIGFkZFRvR3JhcGgoQ2hlY2tTdHJ1Y3R1cmUsIE9wSW5mbyhtX2dyYXBoLmFkZFN0cnVj
dHVyZVNldChwdXRUb0Jhc2UtPm1fc3RydWN0dXJlLmdldCgpKSksIGJhc2VOb2RlKTsKLSAgICAg
ICAgICAgICAgICBOb2RlSW5kZXggcHJvcGVydHlTdG9yYWdlOworICAgICAgICAgICAgICAgIE5v
ZGUqIHByb3BlcnR5U3RvcmFnZTsKICAgICAgICAgICAgICAgICBpZiAoaXNJbmxpbmVPZmZzZXQo
cHV0VG9CYXNlLT5tX29mZnNldCkpCiAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5U3RvcmFn
ZSA9IGJhc2VOb2RlOwogICAgICAgICAgICAgICAgIGVsc2UKQEAgLTMwODYsMTMgKzMwNDgsMTMg
QEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAg
dW5zaWduZWQgb3BlcmF0aW9ucyA9IG1faW5saW5lU3RhY2tUb3AtPm1fcmVzb2x2ZU9wZXJhdGlv
blJlbWFwW2N1cnJlbnRJbnN0cnVjdGlvbls0XS51Lm9wZXJhbmRdOwogICAgICAgICAgICAgdW5z
aWduZWQgcHV0VG9CYXNlT3BlcmF0aW9uID0gbV9pbmxpbmVTdGFja1RvcC0+bV9wdXRUb0Jhc2VP
cGVyYXRpb25SZW1hcFtjdXJyZW50SW5zdHJ1Y3Rpb25bNV0udS5vcGVyYW5kXTsKIAotICAgICAg
ICAgICAgTm9kZUluZGV4IGJhc2UgPSAwOworICAgICAgICAgICAgTm9kZSogYmFzZSA9IDA7CiAg
ICAgICAgICAgICBpZiAocGFyc2VSZXNvbHZlT3BlcmF0aW9ucyhwcmVkaWN0aW9uLCBpZGVudGlm
aWVyLCBvcGVyYXRpb25zLCAwLCAmYmFzZSwgMCkpIHsKICAgICAgICAgICAgICAgICBzZXQoY3Vy
cmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwgYmFzZSk7CiAgICAgICAgICAgICAgICAgTkVY
VF9PUENPREUob3BfcmVzb2x2ZV9iYXNlKTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAg
Tm9kZUluZGV4IHJlc29sdmUgPSBhZGRUb0dyYXBoKGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9w
ZXJhbmQgPyBSZXNvbHZlQmFzZVN0cmljdFB1dCA6IFJlc29sdmVCYXNlLCBPcEluZm8obV9ncmFw
aC5tX3Jlc29sdmVPcGVyYXRpb25zRGF0YS5zaXplKCkpLCBPcEluZm8ocHJlZGljdGlvbikpOwor
ICAgICAgICAgICAgTm9kZSogcmVzb2x2ZSA9IGFkZFRvR3JhcGgoY3VycmVudEluc3RydWN0aW9u
WzNdLnUub3BlcmFuZCA/IFJlc29sdmVCYXNlU3RyaWN0UHV0IDogUmVzb2x2ZUJhc2UsIE9wSW5m
byhtX2dyYXBoLm1fcmVzb2x2ZU9wZXJhdGlvbnNEYXRhLnNpemUoKSksIE9wSW5mbyhwcmVkaWN0
aW9uKSk7CiAgICAgICAgICAgICBtX2dyYXBoLm1fcmVzb2x2ZU9wZXJhdGlvbnNEYXRhLmFwcGVu
ZChSZXNvbHZlT3BlcmF0aW9uRGF0YSgpKTsKICAgICAgICAgICAgIFJlc29sdmVPcGVyYXRpb25E
YXRhJiBkYXRhID0gbV9ncmFwaC5tX3Jlc29sdmVPcGVyYXRpb25zRGF0YS5sYXN0KCk7CiAgICAg
ICAgICAgICBkYXRhLmlkZW50aWZpZXJOdW1iZXIgPSBpZGVudGlmaWVyOwpAQCAtMzExMSw4ICsz
MDczLDggQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAg
ICAgICAgdW5zaWduZWQgb3BlcmF0aW9ucyA9IG1faW5saW5lU3RhY2tUb3AtPm1fcmVzb2x2ZU9w
ZXJhdGlvblJlbWFwW2N1cnJlbnRJbnN0cnVjdGlvbls0XS51Lm9wZXJhbmRdOwogICAgICAgICAg
ICAgdW5zaWduZWQgcHV0VG9CYXNlT3BlcmF0aW9uID0gbV9pbmxpbmVTdGFja1RvcC0+bV9wdXRU
b0Jhc2VPcGVyYXRpb25SZW1hcFtjdXJyZW50SW5zdHJ1Y3Rpb25bNV0udS5vcGVyYW5kXTsKIAot
ICAgICAgICAgICAgTm9kZUluZGV4IGJhc2UgPSAwOwotICAgICAgICAgICAgTm9kZUluZGV4IHZh
bHVlID0gMDsKKyAgICAgICAgICAgIE5vZGUqIGJhc2UgPSAwOworICAgICAgICAgICAgTm9kZSog
dmFsdWUgPSAwOwogICAgICAgICAgICAgaWYgKHBhcnNlUmVzb2x2ZU9wZXJhdGlvbnMocHJlZGlj
dGlvbiwgaWRlbnRpZmllciwgb3BlcmF0aW9ucywgcHV0VG9CYXNlT3BlcmF0aW9uLCAmYmFzZSwg
JnZhbHVlKSkKICAgICAgICAgICAgICAgICBzZXRQYWlyKGJhc2VEc3QsIGJhc2UsIHZhbHVlRHN0
LCB2YWx1ZSk7CiAgICAgICAgICAgICBlbHNlIHsKQEAgLTMxMjksOCArMzA5MSw4IEBAIGJvb2wg
Qnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAgIHVuc2lnbmVk
IGlkZW50aWZpZXIgPSBtX2lubGluZVN0YWNrVG9wLT5tX2lkZW50aWZpZXJSZW1hcFtjdXJyZW50
SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kXTsKICAgICAgICAgICAgIHVuc2lnbmVkIG9wZXJhdGlv
bnMgPSBtX2lubGluZVN0YWNrVG9wLT5tX3Jlc29sdmVPcGVyYXRpb25SZW1hcFtjdXJyZW50SW5z
dHJ1Y3Rpb25bNF0udS5vcGVyYW5kXTsKIAotICAgICAgICAgICAgTm9kZUluZGV4IGJhc2UgPSAw
OwotICAgICAgICAgICAgTm9kZUluZGV4IHZhbHVlID0gMDsKKyAgICAgICAgICAgIE5vZGUqIGJh
c2UgPSAwOworICAgICAgICAgICAgTm9kZSogdmFsdWUgPSAwOwogICAgICAgICAgICAgaWYgKHBh
cnNlUmVzb2x2ZU9wZXJhdGlvbnMocHJlZGljdGlvbiwgaWRlbnRpZmllciwgb3BlcmF0aW9ucywg
MCwgJmJhc2UsICZ2YWx1ZSkpCiAgICAgICAgICAgICAgICAgc2V0UGFpcihiYXNlRHN0LCBiYXNl
LCB2YWx1ZURzdCwgdmFsdWUpOwogICAgICAgICAgICAgZWxzZSB7CkBAIC0zMTcxLDcgKzMxMzMs
NyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAg
ICAKICAgICAgICAgY2FzZSBvcF9jcmVhdGVfYXJndW1lbnRzOiB7CiAgICAgICAgICAgICBtX2dy
YXBoLm1faGFzQXJndW1lbnRzID0gdHJ1ZTsKLSAgICAgICAgICAgIE5vZGVJbmRleCBjcmVhdGVB
cmd1bWVudHMgPSBhZGRUb0dyYXBoKENyZWF0ZUFyZ3VtZW50cywgZ2V0KGN1cnJlbnRJbnN0cnVj
dGlvblsxXS51Lm9wZXJhbmQpKTsKKyAgICAgICAgICAgIE5vZGUqIGNyZWF0ZUFyZ3VtZW50cyA9
IGFkZFRvR3JhcGgoQ3JlYXRlQXJndW1lbnRzLCBnZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUu
b3BlcmFuZCkpOwogICAgICAgICAgICAgc2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJh
bmQsIGNyZWF0ZUFyZ3VtZW50cyk7CiAgICAgICAgICAgICBzZXQodW5tb2RpZmllZEFyZ3VtZW50
c1JlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpLCBjcmVhdGVBcmd1bWVu
dHMpOwogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfY3JlYXRlX2FyZ3VtZW50cyk7CkBAIC0z
MjUwLDEyICszMjEyLDkgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cHJvY2Vzc1BoaVN0YWNrKCkK
ICAgICAgICAgaWYgKCFlbnRyeS5tX2Jsb2NrLT5pc1JlYWNoYWJsZSkKICAgICAgICAgICAgIGNv
bnRpbnVlOwogICAgICAgICAKLSAgICAgICAgaWYgKCFlbnRyeS5tX2Jsb2NrLT5pc1JlYWNoYWJs
ZSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAKICAgICAgICAgUHJlZGVjZXNzb3JM
aXN0JiBwcmVkZWNlc3NvcnMgPSBlbnRyeS5tX2Jsb2NrLT5tX3ByZWRlY2Vzc29yczsKICAgICAg
ICAgdW5zaWduZWQgdmFyTm8gPSBlbnRyeS5tX3Zhck5vOwotICAgICAgICBWYXJpYWJsZUFjY2Vz
c0RhdGEqIGRhdGFGb3JQaGkgPSBtX2dyYXBoW2VudHJ5Lm1fcGhpXS52YXJpYWJsZUFjY2Vzc0Rh
dGEoKTsKKyAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiBkYXRhRm9yUGhpID0gZW50cnkubV9w
aGktPnZhcmlhYmxlQWNjZXNzRGF0YSgpOwogCiAjaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdB
VElPTl9WRVJCT1NFKQogICAgICAgICBkYXRhTG9nRigiICAgSGFuZGxpbmcgcGhpIGVudHJ5IGZv
ciB2YXIgJXUsIHBoaSBAJXUuXG4iLCBlbnRyeS5tX3Zhck5vLCBlbnRyeS5tX3BoaSk7CkBAIC0z
MjY4LDEwICszMjI3LDEwIEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnByb2Nlc3NQaGlTdGFjaygp
CiAgICAgICAgICAgICAKICAgICAgICAgICAgIEJhc2ljQmxvY2sqIHByZWRlY2Vzc29yQmxvY2sg
PSBtX2dyYXBoLm1fYmxvY2tzW3ByZWRlY2Vzc29yc1tpXV0uZ2V0KCk7CiAKLSAgICAgICAgICAg
IE5vZGVJbmRleCYgdmFyID0gKHN0YWNrVHlwZSA9PSBBcmd1bWVudFBoaVN0YWNrKSA/IHByZWRl
Y2Vzc29yQmxvY2stPnZhcmlhYmxlc0F0VGFpbC5hcmd1bWVudCh2YXJObykgOiBwcmVkZWNlc3Nv
ckJsb2NrLT52YXJpYWJsZXNBdFRhaWwubG9jYWwodmFyTm8pOworICAgICAgICAgICAgTm9kZSom
IHZhciA9IChzdGFja1R5cGUgPT0gQXJndW1lbnRQaGlTdGFjaykgPyBwcmVkZWNlc3NvckJsb2Nr
LT52YXJpYWJsZXNBdFRhaWwuYXJndW1lbnQodmFyTm8pIDogcHJlZGVjZXNzb3JCbG9jay0+dmFy
aWFibGVzQXRUYWlsLmxvY2FsKHZhck5vKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgTm9k
ZUluZGV4IHZhbHVlSW5QcmVkZWNlc3NvciA9IHZhcjsKLSAgICAgICAgICAgIGlmICh2YWx1ZUlu
UHJlZGVjZXNzb3IgPT0gTm9Ob2RlKSB7CisgICAgICAgICAgICBOb2RlKiB2YWx1ZUluUHJlZGVj
ZXNzb3IgPSB2YXI7CisgICAgICAgICAgICBpZiAoIXZhbHVlSW5QcmVkZWNlc3NvcikgewogI2lm
IERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKICAgICAgICAgICAgICAgICBk
YXRhTG9nRigiICAgICAgRGlkIG5vdCBmaW5kIG5vZGUsIGFkZGluZyBwaGkuXG4iKTsKICNlbmRp
ZgpAQCAtMzI4MywzNiArMzI0MiwzNiBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwcm9jZXNzUGhp
U3RhY2soKQogICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgcHJlZGVj
ZXNzb3JCbG9jay0+dmFyaWFibGVzQXRIZWFkLnNldExvY2FsRmlyc3RUaW1lKHZhck5vLCB2YWx1
ZUluUHJlZGVjZXNzb3IpOwogICAgICAgICAgICAgICAgIHBoaVN0YWNrLmFwcGVuZChQaGlTdGFj
a0VudHJ5KHByZWRlY2Vzc29yQmxvY2ssIHZhbHVlSW5QcmVkZWNlc3NvciwgdmFyTm8pKTsKLSAg
ICAgICAgICAgIH0gZWxzZSBpZiAobV9ncmFwaFt2YWx1ZUluUHJlZGVjZXNzb3JdLm9wKCkgPT0g
R2V0TG9jYWwpIHsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWVJblByZWRlY2Vzc29yLT5v
cCgpID09IEdldExvY2FsKSB7CiAjaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJC
T1NFKQotICAgICAgICAgICAgICAgIGRhdGFMb2dGKCIgICAgICBGb3VuZCBHZXRMb2NhbCBAJXUu
XG4iLCB2YWx1ZUluUHJlZGVjZXNzb3IpOworICAgICAgICAgICAgICAgIGRhdGFMb2dGKCIgICAg
ICBGb3VuZCBHZXRMb2NhbCBAJXUuXG4iLCB2YWx1ZUluUHJlZGVjZXNzb3ItPmluZGV4KCkpOwog
I2VuZGlmCiAKICAgICAgICAgICAgICAgICAvLyBXZSB3YW50IHRvIGVuc3VyZSB0aGF0IHRoZSBW
YXJpYWJsZUFjY2Vzc0RhdGFzIGFyZSBpZGVudGljYWwgYmV0d2VlbiB0aGUKICAgICAgICAgICAg
ICAgICAvLyBHZXRMb2NhbCBhbmQgaXRzIGJsb2NrLWxvY2FsIFBoaS4gU3RyaWN0bHkgc3BlYWtp
bmcgd2Ugb25seSBuZWVkIHRoZSB0d28KICAgICAgICAgICAgICAgICAvLyB0byBiZSB1bmlmaWVk
LiBCdXQgZm9yIGVmZmljaWVuY3ksIHdlIHdhbnQgdGhlIGNvZGUgdGhhdCBjcmVhdGVzIEdldExv
Y2FscwogICAgICAgICAgICAgICAgIC8vIGFuZCBQaGlzIHRvIHRyeSB0byByZXVzZSBWYXJpYWJs
ZUFjY2Vzc0RhdGFzIGFzIG11Y2ggYXMgcG9zc2libGUuCi0gICAgICAgICAgICAgICAgQVNTRVJU
KG1fZ3JhcGhbdmFsdWVJblByZWRlY2Vzc29yXS52YXJpYWJsZUFjY2Vzc0RhdGEoKSA9PSBtX2dy
YXBoW21fZ3JhcGhbdmFsdWVJblByZWRlY2Vzc29yXS5jaGlsZDEoKS5pbmRleCgpXS52YXJpYWJs
ZUFjY2Vzc0RhdGEoKSk7CisgICAgICAgICAgICAgICAgQVNTRVJUKHZhbHVlSW5QcmVkZWNlc3Nv
ci0+dmFyaWFibGVBY2Nlc3NEYXRhKCkgPT0gdmFsdWVJblByZWRlY2Vzc29yLT5jaGlsZDEoKS0+
dmFyaWFibGVBY2Nlc3NEYXRhKCkpOwogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAg
IHZhbHVlSW5QcmVkZWNlc3NvciA9IG1fZ3JhcGhbdmFsdWVJblByZWRlY2Vzc29yXS5jaGlsZDEo
KS5pbmRleCgpOworICAgICAgICAgICAgICAgIHZhbHVlSW5QcmVkZWNlc3NvciA9IHZhbHVlSW5Q
cmVkZWNlc3Nvci0+Y2hpbGQxKCkubm9kZSgpOwogICAgICAgICAgICAgfSBlbHNlIHsKICNpZiBE
RkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCi0gICAgICAgICAgICAgICAgZGF0
YUxvZ0YoIiAgICAgIEZvdW5kIEAldS5cbiIsIHZhbHVlSW5QcmVkZWNlc3Nvcik7CisgICAgICAg
ICAgICAgICAgZGF0YUxvZ0YoIiAgICAgIEZvdW5kIEAldS5cbiIsIHZhbHVlSW5QcmVkZWNlc3Nv
ci0+aW5kZXgoKSk7CiAjZW5kaWYKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIEFTU0VSVCht
X2dyYXBoW3ZhbHVlSW5QcmVkZWNlc3Nvcl0ub3AoKSA9PSBTZXRMb2NhbAotICAgICAgICAgICAg
ICAgICAgIHx8IG1fZ3JhcGhbdmFsdWVJblByZWRlY2Vzc29yXS5vcCgpID09IFBoaQotICAgICAg
ICAgICAgICAgICAgIHx8IG1fZ3JhcGhbdmFsdWVJblByZWRlY2Vzc29yXS5vcCgpID09IEZsdXNo
Ci0gICAgICAgICAgICAgICAgICAgfHwgKG1fZ3JhcGhbdmFsdWVJblByZWRlY2Vzc29yXS5vcCgp
ID09IFNldEFyZ3VtZW50CisgICAgICAgICAgICBBU1NFUlQodmFsdWVJblByZWRlY2Vzc29yLT5v
cCgpID09IFNldExvY2FsCisgICAgICAgICAgICAgICAgICAgfHwgdmFsdWVJblByZWRlY2Vzc29y
LT5vcCgpID09IFBoaQorICAgICAgICAgICAgICAgICAgIHx8IHZhbHVlSW5QcmVkZWNlc3Nvci0+
b3AoKSA9PSBGbHVzaAorICAgICAgICAgICAgICAgICAgIHx8ICh2YWx1ZUluUHJlZGVjZXNzb3It
Pm9wKCkgPT0gU2V0QXJndW1lbnQKICAgICAgICAgICAgICAgICAgICAgICAgJiYgc3RhY2tUeXBl
ID09IEFyZ3VtZW50UGhpU3RhY2spKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgVmFyaWFi
bGVBY2Nlc3NEYXRhKiBkYXRhRm9yUHJlZGVjZXNzb3IgPSBtX2dyYXBoW3ZhbHVlSW5QcmVkZWNl
c3Nvcl0udmFyaWFibGVBY2Nlc3NEYXRhKCk7CisgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0Rh
dGEqIGRhdGFGb3JQcmVkZWNlc3NvciA9IHZhbHVlSW5QcmVkZWNlc3Nvci0+dmFyaWFibGVBY2Nl
c3NEYXRhKCk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGRhdGFGb3JQcmVkZWNlc3Nvci0+
dW5pZnkoZGF0YUZvclBoaSk7CiAKLSAgICAgICAgICAgIE5vZGUqIHBoaU5vZGUgPSAmbV9ncmFw
aFtlbnRyeS5tX3BoaV07CisgICAgICAgICAgICBOb2RlKiBwaGlOb2RlID0gZW50cnkubV9waGk7
CiAjaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQotICAgICAgICAgICAg
ZGF0YUxvZ0YoIiAgICAgIFJlZiBjb3VudCBvZiBAJXUgPSAldS5cbiIsIGVudHJ5Lm1fcGhpLCBw
aGlOb2RlLT5yZWZDb3VudCgpKTsKKyAgICAgICAgICAgIGRhdGFMb2dGKCIgICAgICBSZWYgY291
bnQgb2YgQCV1ID0gJXUuXG4iLCBwaGlOb2RlLT5pbmRleCgpLCBwaGlOb2RlLT5yZWZDb3VudCgp
KTsKICNlbmRpZgogICAgICAgICAgICAgaWYgKHBoaU5vZGUtPnJlZkNvdW50KCkpIHsKICNpZiBE
RkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCkBAIC0zMzIzLDExICszMjgyLDEx
IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnByb2Nlc3NQaGlTdGFjaygpCiAKICAgICAgICAgICAg
IGlmICghcGhpTm9kZS0+Y2hpbGQxKCkpIHsKICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FU
SU9OX1ZFUkJPU0UpCi0gICAgICAgICAgICAgICAgZGF0YUxvZ0YoIiAgICAgIFNldHRpbmcgQCV1
LT5jaGlsZDEgPSBAJXUuXG4iLCBlbnRyeS5tX3BoaSwgdmFsdWVJblByZWRlY2Vzc29yKTsKKyAg
ICAgICAgICAgICAgICBkYXRhTG9nRigiICAgICAgU2V0dGluZyBAJXUtPmNoaWxkMSA9IEAldS5c
biIsIHBoaU5vZGUtPmluZGV4KCksIHZhbHVlSW5QcmVkZWNlc3Nvcik7CiAjZW5kaWYKICAgICAg
ICAgICAgICAgICBwaGlOb2RlLT5jaGlsZHJlbi5zZXRDaGlsZDEoRWRnZSh2YWx1ZUluUHJlZGVj
ZXNzb3IpKTsKICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCi0gICAg
ICAgICAgICAgICAgZGF0YUxvZ0YoIiAgICAgIENoaWxkcmVuIG9mIEAldTogIiwgZW50cnkubV9w
aGkpOworICAgICAgICAgICAgICAgIGRhdGFMb2dGKCIgICAgICBDaGlsZHJlbiBvZiBAJXU6ICIs
IHBoaU5vZGUtPmluZGV4KCkpOwogICAgICAgICAgICAgICAgIHBoaU5vZGUtPmR1bXBDaGlsZHJl
bihXVEY6OmRhdGFGaWxlKCkpOwogICAgICAgICAgICAgICAgIGRhdGFMb2dGKCIuXG4iKTsKICNl
bmRpZgpAQCAtMzMzNSwxMSArMzI5NCwxMSBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwcm9jZXNz
UGhpU3RhY2soKQogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKCFwaGlOb2RlLT5jaGls
ZDIoKSkgewogI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKLSAgICAg
ICAgICAgICAgICBkYXRhTG9nRigiICAgICAgU2V0dGluZyBAJXUtPmNoaWxkMiA9IEAldS5cbiIs
IGVudHJ5Lm1fcGhpLCB2YWx1ZUluUHJlZGVjZXNzb3IpOworICAgICAgICAgICAgICAgIGRhdGFM
b2dGKCIgICAgICBTZXR0aW5nIEAldS0+Y2hpbGQyID0gQCV1LlxuIiwgcGhpTm9kZS0+aW5kZXgo
KSwgdmFsdWVJblByZWRlY2Vzc29yKTsKICNlbmRpZgogICAgICAgICAgICAgICAgIHBoaU5vZGUt
PmNoaWxkcmVuLnNldENoaWxkMihFZGdlKHZhbHVlSW5QcmVkZWNlc3NvcikpOwogI2lmIERGR19F
TkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKLSAgICAgICAgICAgICAgICBkYXRhTG9n
RigiICAgICAgQ2hpbGRyZW4gb2YgQCV1OiAiLCBlbnRyeS5tX3BoaSk7CisgICAgICAgICAgICAg
ICAgZGF0YUxvZ0YoIiAgICAgIENoaWxkcmVuIG9mIEAldTogIiwgcGhpTm9kZS0+aW5kZXgoKSk7
CiAgICAgICAgICAgICAgICAgcGhpTm9kZS0+ZHVtcENoaWxkcmVuKFdURjo6ZGF0YUZpbGUoKSk7
CiAgICAgICAgICAgICAgICAgZGF0YUxvZ0YoIi5cbiIpOwogI2VuZGlmCkBAIC0zMzQ3LDQwICsz
MzA2LDM4IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnByb2Nlc3NQaGlTdGFjaygpCiAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICBpZiAoIXBoaU5vZGUtPmNoaWxkMygpKSB7CiAjaWYgREZHX0VO
QUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQotICAgICAgICAgICAgICAgIGRhdGFMb2dG
KCIgICAgICBTZXR0aW5nIEAldS0+Y2hpbGQzID0gQCV1LlxuIiwgZW50cnkubV9waGksIHZhbHVl
SW5QcmVkZWNlc3Nvcik7CisgICAgICAgICAgICAgICAgZGF0YUxvZ0YoIiAgICAgIFNldHRpbmcg
QCV1LT5jaGlsZDMgPSBAJXUuXG4iLCBwaGlOb2RlLT5pbmRleCgpLCB2YWx1ZUluUHJlZGVjZXNz
b3IpOwogI2VuZGlmCiAgICAgICAgICAgICAgICAgcGhpTm9kZS0+Y2hpbGRyZW4uc2V0Q2hpbGQz
KEVkZ2UodmFsdWVJblByZWRlY2Vzc29yKSk7CiAjaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdB
VElPTl9WRVJCT1NFKQotICAgICAgICAgICAgICAgIGRhdGFMb2dGKCIgICAgICBDaGlsZHJlbiBv
ZiBAJXU6ICIsIGVudHJ5Lm1fcGhpKTsKKyAgICAgICAgICAgICAgICBkYXRhTG9nRigiICAgICAg
Q2hpbGRyZW4gb2YgQCV1OiAiLCBwaGlOb2RlLT5pbmRleCgpKTsKICAgICAgICAgICAgICAgICBw
aGlOb2RlLT5kdW1wQ2hpbGRyZW4oV1RGOjpkYXRhRmlsZSgpKTsKICAgICAgICAgICAgICAgICBk
YXRhTG9nRigiLlxuIik7CiAjZW5kaWYKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAgICAgICAgTm9kZUluZGV4IG5ld1BoaSA9IGlu
c2VydFBoaU5vZGUoT3BJbmZvKGRhdGFGb3JQaGkpLCBlbnRyeS5tX2Jsb2NrKTsKKyAgICAgICAg
ICAgIE5vZGUqIG5ld1BoaSA9IGluc2VydFBoaU5vZGUoT3BJbmZvKGRhdGFGb3JQaGkpLCBlbnRy
eS5tX2Jsb2NrKTsKICAgICAgICAgICAgIAogI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJ
T05fVkVSQk9TRSkKLSAgICAgICAgICAgIGRhdGFMb2dGKCIgICAgICBTcGxpdHRpbmcgQCV1LCBj
cmVhdGVkIEAldS5cbiIsIGVudHJ5Lm1fcGhpLCBuZXdQaGkpOworICAgICAgICAgICAgZGF0YUxv
Z0YoIiAgICAgIFNwbGl0dGluZyBAJXUsIGNyZWF0ZWQgQCV1LlxuIiwgcGhpTm9kZS0+aW5kZXgo
KSwgbmV3UGhpLT5pbmRleCgpKTsKICNlbmRpZgogCi0gICAgICAgICAgICBwaGlOb2RlID0gJm1f
Z3JhcGhbZW50cnkubV9waGldOyAvLyByZWxvYWQgYWZ0ZXIgdmVjdG9yIHJlc2l6ZQotICAgICAg
ICAgICAgTm9kZSYgbmV3UGhpTm9kZSA9IG1fZ3JhcGhbbmV3UGhpXTsKICAgICAgICAgICAgIGlm
IChwaGlOb2RlLT5yZWZDb3VudCgpKQogICAgICAgICAgICAgICAgIG1fZ3JhcGgucmVmKG5ld1Bo
aSk7CiAKLSAgICAgICAgICAgIG5ld1BoaU5vZGUuY2hpbGRyZW4gPSBwaGlOb2RlLT5jaGlsZHJl
bjsKKyAgICAgICAgICAgIG5ld1BoaS0+Y2hpbGRyZW4gPSBwaGlOb2RlLT5jaGlsZHJlbjsKIAog
I2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKLSAgICAgICAgICAgIGRh
dGFMb2dGKCIgICAgICBDaGlsZHJlbiBvZiBAJXU6ICIsIG5ld1BoaSk7Ci0gICAgICAgICAgICBu
ZXdQaGlOb2RlLmR1bXBDaGlsZHJlbihXVEY6OmRhdGFGaWxlKCkpOworICAgICAgICAgICAgZGF0
YUxvZ0YoIiAgICAgIENoaWxkcmVuIG9mIEAldTogIiwgbmV3UGhpLT5pbmRleCgpKTsKKyAgICAg
ICAgICAgIG5ld1BoaS0+ZHVtcENoaWxkcmVuKFdURjo6ZGF0YUZpbGUoKSk7CiAgICAgICAgICAg
ICBkYXRhTG9nRigiLlxuIik7CiAjZW5kaWYKIAotICAgICAgICAgICAgcGhpTm9kZS0+Y2hpbGRy
ZW4uaW5pdGlhbGl6ZShuZXdQaGksIHZhbHVlSW5QcmVkZWNlc3NvciwgTm9Ob2RlKTsKKyAgICAg
ICAgICAgIHBoaU5vZGUtPmNoaWxkcmVuLmluaXRpYWxpemUobmV3UGhpLCB2YWx1ZUluUHJlZGVj
ZXNzb3IsIDApOwogCiAjaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQot
ICAgICAgICAgICAgZGF0YUxvZ0YoIiAgICAgIENoaWxkcmVuIG9mIEAldTogIiwgZW50cnkubV9w
aGkpOworICAgICAgICAgICAgZGF0YUxvZ0YoIiAgICAgIENoaWxkcmVuIG9mIEAldTogIiwgcGhp
Tm9kZS0+aW5kZXgoKSk7CiAgICAgICAgICAgICBwaGlOb2RlLT5kdW1wQ2hpbGRyZW4oV1RGOjpk
YXRhRmlsZSgpKTsKICAgICAgICAgICAgIGRhdGFMb2dGKCIuXG4iKTsKICNlbmRpZgpAQCAtMzQw
MiwyMiArMzM1OSwyMiBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpsaW5rQmxvY2soQmFzaWNCbG9j
CiB7CiAgICAgQVNTRVJUKCFibG9jay0+aXNMaW5rZWQpOwogICAgIEFTU0VSVCghYmxvY2stPmlz
RW1wdHkoKSk7Ci0gICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhbYmxvY2stPmxhc3QoKV07Ci0gICAg
QVNTRVJUKG5vZGUuaXNUZXJtaW5hbCgpKTsKKyAgICBOb2RlKiBub2RlID0gYmxvY2stPmxhc3Qo
KTsKKyAgICBBU1NFUlQobm9kZS0+aXNUZXJtaW5hbCgpKTsKICAgICAKLSAgICBzd2l0Y2ggKG5v
ZGUub3AoKSkgeworICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewogICAgIGNhc2UgSnVtcDoKLSAg
ICAgICAgbm9kZS5zZXRUYWtlbkJsb2NrSW5kZXgobV9ncmFwaC5ibG9ja0luZGV4Rm9yQnl0ZWNv
ZGVPZmZzZXQocG9zc2libGVUYXJnZXRzLCBub2RlLnRha2VuQnl0ZWNvZGVPZmZzZXREdXJpbmdQ
YXJzaW5nKCkpKTsKKyAgICAgICAgbm9kZS0+c2V0VGFrZW5CbG9ja0luZGV4KG1fZ3JhcGguYmxv
Y2tJbmRleEZvckJ5dGVjb2RlT2Zmc2V0KHBvc3NpYmxlVGFyZ2V0cywgbm9kZS0+dGFrZW5CeXRl
Y29kZU9mZnNldER1cmluZ1BhcnNpbmcoKSkpOwogI2lmIERGR19FTkFCTEUoREVCVUdfVkVSQk9T
RSkKLSAgICAgICAgZGF0YUxvZ0YoIkxpbmtlZCBiYXNpYyBibG9jayAlcCB0byAlcCwgIyV1Llxu
IiwgYmxvY2ssIG1fZ3JhcGgubV9ibG9ja3Nbbm9kZS50YWtlbkJsb2NrSW5kZXgoKV0uZ2V0KCks
IG5vZGUudGFrZW5CbG9ja0luZGV4KCkpOworICAgICAgICBkYXRhTG9nRigiTGlua2VkIGJhc2lj
IGJsb2NrICVwIHRvICVwLCAjJXUuXG4iLCBibG9jaywgbV9ncmFwaC5tX2Jsb2Nrc1tub2RlLT50
YWtlbkJsb2NrSW5kZXgoKV0uZ2V0KCksIG5vZGUtPnRha2VuQmxvY2tJbmRleCgpKTsKICNlbmRp
ZgogICAgICAgICBicmVhazsKICAgICAgICAgCiAgICAgY2FzZSBCcmFuY2g6Ci0gICAgICAgIG5v
ZGUuc2V0VGFrZW5CbG9ja0luZGV4KG1fZ3JhcGguYmxvY2tJbmRleEZvckJ5dGVjb2RlT2Zmc2V0
KHBvc3NpYmxlVGFyZ2V0cywgbm9kZS50YWtlbkJ5dGVjb2RlT2Zmc2V0RHVyaW5nUGFyc2luZygp
KSk7Ci0gICAgICAgIG5vZGUuc2V0Tm90VGFrZW5CbG9ja0luZGV4KG1fZ3JhcGguYmxvY2tJbmRl
eEZvckJ5dGVjb2RlT2Zmc2V0KHBvc3NpYmxlVGFyZ2V0cywgbm9kZS5ub3RUYWtlbkJ5dGVjb2Rl
T2Zmc2V0RHVyaW5nUGFyc2luZygpKSk7CisgICAgICAgIG5vZGUtPnNldFRha2VuQmxvY2tJbmRl
eChtX2dyYXBoLmJsb2NrSW5kZXhGb3JCeXRlY29kZU9mZnNldChwb3NzaWJsZVRhcmdldHMsIG5v
ZGUtPnRha2VuQnl0ZWNvZGVPZmZzZXREdXJpbmdQYXJzaW5nKCkpKTsKKyAgICAgICAgbm9kZS0+
c2V0Tm90VGFrZW5CbG9ja0luZGV4KG1fZ3JhcGguYmxvY2tJbmRleEZvckJ5dGVjb2RlT2Zmc2V0
KHBvc3NpYmxlVGFyZ2V0cywgbm9kZS0+bm90VGFrZW5CeXRlY29kZU9mZnNldER1cmluZ1BhcnNp
bmcoKSkpOwogI2lmIERGR19FTkFCTEUoREVCVUdfVkVSQk9TRSkKLSAgICAgICAgZGF0YUxvZ0Yo
IkxpbmtlZCBiYXNpYyBibG9jayAlcCB0byAlcCwgIyV1IGFuZCAlcCwgIyV1LlxuIiwgYmxvY2ss
IG1fZ3JhcGgubV9ibG9ja3Nbbm9kZS50YWtlbkJsb2NrSW5kZXgoKV0uZ2V0KCksIG5vZGUudGFr
ZW5CbG9ja0luZGV4KCksIG1fZ3JhcGgubV9ibG9ja3Nbbm9kZS5ub3RUYWtlbkJsb2NrSW5kZXgo
KV0uZ2V0KCksIG5vZGUubm90VGFrZW5CbG9ja0luZGV4KCkpOworICAgICAgICBkYXRhTG9nRigi
TGlua2VkIGJhc2ljIGJsb2NrICVwIHRvICVwLCAjJXUgYW5kICVwLCAjJXUuXG4iLCBibG9jaywg
bV9ncmFwaC5tX2Jsb2Nrc1tub2RlLT50YWtlbkJsb2NrSW5kZXgoKV0uZ2V0KCksIG5vZGUtPnRh
a2VuQmxvY2tJbmRleCgpLCBtX2dyYXBoLm1fYmxvY2tzW25vZGUtPm5vdFRha2VuQmxvY2tJbmRl
eCgpXS5nZXQoKSwgbm9kZS0+bm90VGFrZW5CbG9ja0luZGV4KCkpOwogI2VuZGlmCiAgICAgICAg
IGJyZWFrOwogICAgICAgICAKQEAgLTM3MjUsNyArMzY4Miw3IEBAIHZvaWQgQnl0ZUNvZGVQYXJz
ZXI6OnBhcnNlQ29kZUJsb2NrKCkKICAgICAgICAgICAgIC8vIGFyZSBhdCB0aGUgZW5kIG9mIGFu
IGlubGluZSBmdW5jdGlvbiwgb3Igd2UgcmVhbGl6ZWQgdGhhdCB3ZQogICAgICAgICAgICAgLy8g
c2hvdWxkIHN0b3AgcGFyc2luZyBiZWNhdXNlIHRoZXJlIHdhcyBhIHJldHVybiBpbiB0aGUgZmly
c3QKICAgICAgICAgICAgIC8vIGJhc2ljIGJsb2NrLgotICAgICAgICAgICAgQVNTRVJUKG1fY3Vy
cmVudEJsb2NrLT5pc0VtcHR5KCkgfHwgbV9ncmFwaC5sYXN0KCkuaXNUZXJtaW5hbCgpIHx8ICht
X2N1cnJlbnRJbmRleCA9PSBjb2RlQmxvY2stPmluc3RydWN0aW9ucygpLnNpemUoKSAmJiBtX2lu
bGluZVN0YWNrVG9wLT5tX2lubGluZUNhbGxGcmFtZSkgfHwgIXNob3VsZENvbnRpbnVlUGFyc2lu
Zyk7CisgICAgICAgICAgICBBU1NFUlQobV9jdXJyZW50QmxvY2stPmlzRW1wdHkoKSB8fCBtX2N1
cnJlbnRCbG9jay0+bGFzdCgpLT5pc1Rlcm1pbmFsKCkgfHwgKG1fY3VycmVudEluZGV4ID09IGNv
ZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpICYmIG1faW5saW5lU3RhY2tUb3AtPm1faW5s
aW5lQ2FsbEZyYW1lKSB8fCAhc2hvdWxkQ29udGludWVQYXJzaW5nKTsKIAogICAgICAgICAgICAg
aWYgKCFzaG91bGRDb250aW51ZVBhcnNpbmcpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwpAQCAt
Mzc4NiwxMyArMzc0MywxMiBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZSgpCiAgICAgICAg
IGlmIChibG9jay0+Ynl0ZWNvZGVCZWdpbiAhPSBtX2dyYXBoLm1fb3NyRW50cnlCeXRlY29kZUlu
ZGV4KQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgbV9ncmFwaC5tX211c3RIYW5kbGVWYWx1ZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAg
IE5vZGVJbmRleCBub2RlSW5kZXggPSBibG9jay0+dmFyaWFibGVzQXRIZWFkLm9wZXJhbmQoCisg
ICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5vcGVyYW5kKAog
ICAgICAgICAgICAgICAgIG1fZ3JhcGgubV9tdXN0SGFuZGxlVmFsdWVzLm9wZXJhbmRGb3JJbmRl
eChpKSk7Ci0gICAgICAgICAgICBpZiAobm9kZUluZGV4ID09IE5vTm9kZSkKKyAgICAgICAgICAg
IGlmICghbm9kZSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIE5vZGUm
IG5vZGUgPSBtX2dyYXBoW25vZGVJbmRleF07Ci0gICAgICAgICAgICBBU1NFUlQobm9kZS5oYXNM
b2NhbCgpKTsKLSAgICAgICAgICAgIG5vZGUudmFyaWFibGVBY2Nlc3NEYXRhKCktPnByZWRpY3Qo
CisgICAgICAgICAgICBBU1NFUlQobm9kZS0+aGFzTG9jYWwoKSk7CisgICAgICAgICAgICBub2Rl
LT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+cHJlZGljdCgKICAgICAgICAgICAgICAgICBzcGVjdWxh
dGlvbkZyb21WYWx1ZShtX2dyYXBoLm1fbXVzdEhhbmRsZVZhbHVlc1tpXSkpOwogICAgICAgICB9
CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDRkFQaGFzZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDRkFQaGFzZS5jcHAJ
KHJldmlzaW9uIDE0MDYxNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ0ZBUGhh
c2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTEsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC04OCwxMSArODgsMTEgQEAgcHJpdmF0ZToKICAgICAgICAg
ZGF0YUxvZ0YoIlxuIik7CiAjZW5kaWYKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IGJsb2NrLT5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRleCA9
IGJsb2NrLT5hdChpKTsKLSAgICAgICAgICAgIGlmICghbV9ncmFwaFtub2RlSW5kZXhdLnNob3Vs
ZEdlbmVyYXRlKCkpCisgICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPmF0KGkpOworICAg
ICAgICAgICAgaWYgKCFub2RlLT5zaG91bGRHZW5lcmF0ZSgpKQogICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwogI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKLSAgICAg
ICAgICAgIGRhdGFMb2dGKCIgICAgICAlcyBAJXU6ICIsIEdyYXBoOjpvcE5hbWUobV9ncmFwaFtu
b2RlSW5kZXhdLm9wKCkpLCBub2RlSW5kZXgpOworICAgICAgICAgICAgZGF0YUxvZ0YoIiAgICAg
ICVzIEAldTogIiwgR3JhcGg6Om9wTmFtZShtX2dyYXBoW25vZGVJbmRleF0ub3AoKSksIG5vZGUt
PmluZGV4KCkpOwogICAgICAgICAgICAgbV9zdGF0ZS5kdW1wKFdURjo6ZGF0YUZpbGUoKSk7CiAg
ICAgICAgICAgICBkYXRhTG9nRigiXG4iKTsKICNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdDRkdTaW1wbGlmaWNhdGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NGR1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwCShy
ZXZpc2lvbiAxNDA2MTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NGR1NpbXBs
aWZpY2F0aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTIsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02MCw3ICs2MCw3IEBAIHB1YmxpYzoK
ICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgQVNTRVJUKGJs
b2NrLT5pc1JlYWNoYWJsZSk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBzd2l0Y2gg
KG1fZ3JhcGhbYmxvY2stPmxhc3QoKV0ub3AoKSkgeworICAgICAgICAgICAgICAgIHN3aXRjaCAo
YmxvY2stPmxhc3QoKS0+b3AoKSkgewogICAgICAgICAgICAgICAgIGNhc2UgSnVtcDogewogICAg
ICAgICAgICAgICAgICAgICAvLyBTdWNjZXNzb3Igd2l0aCBvbmUgcHJlZGVjZXNzb3IgLT4gbWVy
Z2UuCiAgICAgICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLm1fYmxvY2tzW21fZ3JhcGguc3Vj
Y2Vzc29yKGJsb2NrLCAwKV0tPm1fcHJlZGVjZXNzb3JzLnNpemUoKSA9PSAxKSB7CkBAIC0xMjks
MTAgKzEyOSwxMCBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQmxvY2tJ
bmRleCB0YWtlbkJsb2NrSW5kZXggPSBtX2dyYXBoLnN1Y2Nlc3NvckZvckNvbmRpdGlvbihibG9j
aywgY29uZGl0aW9uKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCbG9ja0luZGV4IG5v
dFRha2VuQmxvY2tJbmRleCA9IG1fZ3JhcGguc3VjY2Vzc29yRm9yQ29uZGl0aW9uKGJsb2NrLCAh
Y29uZGl0aW9uKTsKICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEFTU0VSVChtX2dyYXBoW2Jsb2NrLT5sYXN0KCldLmlzVGVybWluYWwoKSk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29kZU9yaWdpbiBib3VuZGFyeUNvZGVPcmlnaW4g
PSBtX2dyYXBoW2Jsb2NrLT5sYXN0KCldLmNvZGVPcmlnaW47Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbV9ncmFwaFtibG9jay0+bGFzdCgpXS5zZXRPcEFuZERlZmF1bHRGbGFncyhQaGFu
dG9tKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQobV9ncmFwaFtibG9jay0+
bGFzdCgpXS5yZWZDb3VudCgpID09IDEpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFT
U0VSVChibG9jay0+bGFzdCgpLT5pc1Rlcm1pbmFsKCkpOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIENvZGVPcmlnaW4gYm91bmRhcnlDb2RlT3JpZ2luID0gYmxvY2stPmxhc3QoKS0+Y29k
ZU9yaWdpbjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBibG9jay0+bGFzdCgpLT5zZXRP
cEFuZERlZmF1bHRGbGFncyhQaGFudG9tKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBB
U1NFUlQoYmxvY2stPmxhc3QoKS0+cmVmQ291bnQoKSA9PSAxKTsKICAgICAgICAgICAgICAgICAg
ICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpldHRpc29uQmxvY2soYmxvY2tJ
bmRleCwgbm90VGFrZW5CbG9ja0luZGV4LCBib3VuZGFyeUNvZGVPcmlnaW4pOwogICAgICAgICAg
ICAgICAgICAgICAgICAgCkBAIC0xNjAsMTIgKzE2MCwxMSBAQCBwdWJsaWM6CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZGF0YUxvZ0YoIkNGR1NpbXBsaWZ5OiBCcmFuY2gtPmp1bXAgY29u
dmVyc2lvbiB0byBzYW1lIHN1Y2Nlc3NvciBvbiBCbG9jayAjJXUgdG8gQmxvY2sgIyV1LlxuIiwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrSW5kZXgsIHRhcmdldEJs
b2NrSW5kZXgpOwogI2VuZGlmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKG1f
Z3JhcGhbYmxvY2stPmxhc3QoKV0uaXNUZXJtaW5hbCgpKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBOb2RlJiBicmFuY2ggPSBtX2dyYXBoW2Jsb2NrLT5sYXN0KCldOwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEFTU0VSVChicmFuY2guaXNUZXJtaW5hbCgpKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBBU1NFUlQoYnJhbmNoLm9wKCkgPT0gQnJhbmNoKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBicmFuY2guc2V0T3BBbmREZWZhdWx0RmxhZ3MoUGhhbnRv
bSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGJyYW5jaC5yZWZDb3VudCgp
ID09IDEpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vZGUqIGJyYW5jaCA9IGJsb2Nr
LT5sYXN0KCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGJyYW5jaC0+aXNU
ZXJtaW5hbCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQoYnJhbmNoLT5v
cCgpID09IEJyYW5jaCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJhbmNoLT5zZXRP
cEFuZERlZmF1bHRGbGFncyhQaGFudG9tKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBB
U1NFUlQoYnJhbmNoLT5yZWZDb3VudCgpID09IDEpOwogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrLT5hcHBlbmROb2RlKAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLCBEb250UmVmQ2hpbGRyZW4sIERv
bnRSZWZOb2RlLCBTcGVjTm9uZSwgSnVtcCwKQEAgLTI2MCw0NSArMjU5LDQzIEBAIHByaXZhdGU6
CiAgICAgCiAgICAgdm9pZCBrZWVwT3BlcmFuZEFsaXZlKEJhc2ljQmxvY2sqIGJsb2NrLCBDb2Rl
T3JpZ2luIGNvZGVPcmlnaW4sIGludCBvcGVyYW5kKQogICAgIHsKLSAgICAgICAgTm9kZUluZGV4
IG5vZGVJbmRleCA9IGJsb2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZChvcGVyYW5kKTsKLSAg
ICAgICAgaWYgKG5vZGVJbmRleCA9PSBOb05vZGUpCisgICAgICAgIE5vZGUqIG5vZGUgPSBibG9j
ay0+dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQob3BlcmFuZCk7CisgICAgICAgIGlmICghbm9kZSkK
ICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgaWYgKG1fZ3JhcGhbbm9kZUluZGV4XS52YXJp
YWJsZUFjY2Vzc0RhdGEoKS0+aXNDYXB0dXJlZCgpKQorICAgICAgICBpZiAobm9kZS0+dmFyaWFi
bGVBY2Nlc3NEYXRhKCktPmlzQ2FwdHVyZWQoKSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgaWYgKG1fZ3JhcGhbbm9kZUluZGV4XS5vcCgpID09IFNldExvY2FsKQotICAgICAgICAgICAg
bm9kZUluZGV4ID0gbV9ncmFwaFtub2RlSW5kZXhdLmNoaWxkMSgpLmluZGV4KCk7Ci0gICAgICAg
IE5vZGUmIG5vZGUgPSBtX2dyYXBoW25vZGVJbmRleF07Ci0gICAgICAgIGlmICghbm9kZS5zaG91
bGRHZW5lcmF0ZSgpKQorICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBTZXRMb2NhbCkKKyAgICAg
ICAgICAgIG5vZGUgPSBub2RlLT5jaGlsZDEoKS5ub2RlKCk7CisgICAgICAgIGlmICghbm9kZS0+
c2hvdWxkR2VuZXJhdGUoKSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgQVNTRVJUKG1f
Z3JhcGhbbm9kZUluZGV4XS5vcCgpICE9IFNldExvY2FsKTsKKyAgICAgICAgQVNTRVJUKG5vZGUt
Pm9wKCkgIT0gU2V0TG9jYWwpOwogICAgICAgICBibG9jay0+YXBwZW5kTm9kZSgKLSAgICAgICAg
ICAgIG1fZ3JhcGgsIFJlZkNoaWxkcmVuLCBEb250UmVmTm9kZSwgU3BlY05vbmUsIFBoYW50b20s
IGNvZGVPcmlnaW4sIG5vZGVJbmRleCk7CisgICAgICAgICAgICBtX2dyYXBoLCBSZWZDaGlsZHJl
biwgRG9udFJlZk5vZGUsIFNwZWNOb25lLCBQaGFudG9tLCBjb2RlT3JpZ2luLCBub2RlKTsKICAg
ICB9CiAgICAgCiAgICAgdm9pZCBmaXhQb3NzaWJsZUdldExvY2FsKEJhc2ljQmxvY2sqIGJsb2Nr
LCBFZGdlJiBlZGdlLCBib29sIGNoYW5nZVJlZikKICAgICB7Ci0gICAgICAgIE5vZGUmIGNoaWxk
ID0gbV9ncmFwaFtlZGdlXTsKLSAgICAgICAgaWYgKGNoaWxkLm9wKCkgIT0gR2V0TG9jYWwpCisg
ICAgICAgIE5vZGUqIGNoaWxkID0gZWRnZS5ub2RlKCk7CisgICAgICAgIGlmIChjaGlsZC0+b3Ao
KSAhPSBHZXRMb2NhbCkKICAgICAgICAgICAgIHJldHVybjsKICNpZiBERkdfRU5BQkxFKERFQlVH
X1BST1BBR0FUSU9OX1ZFUkJPU0UpCi0gICAgICAgIGRhdGFMb2dGKCIgICAgQ29uc2lkZXJpbmcg
R2V0TG9jYWwgYXQgQCV1LCBsb2NhbCByJWQuXG4iLCBlZGdlLmluZGV4KCksIGNoaWxkLmxvY2Fs
KCkpOworICAgICAgICBkYXRhTG9nRigiICAgIENvbnNpZGVyaW5nIEdldExvY2FsIGF0IEAldSwg
bG9jYWwgciVkLlxuIiwgbm9kZS0+aW5kZXgoKSwgY2hpbGQtPmxvY2FsKCkpOwogI2VuZGlmCi0g
ICAgICAgIGlmIChjaGlsZC52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+aXNDYXB0dXJlZCgpKSB7Cisg
ICAgICAgIGlmIChjaGlsZC0+dmFyaWFibGVBY2Nlc3NEYXRhKCktPmlzQ2FwdHVyZWQoKSkgewog
I2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKICAgICAgICAgICAgIGRh
dGFMb2dGKCIgICAgICAgIEl0J3MgY2FwdHVyZWQuXG4iKTsKICNlbmRpZgogICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIE5vZGVJbmRleCBvcmlnaW5hbE5vZGVJbmRleCA9
IGJsb2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZChjaGlsZC5sb2NhbCgpKTsKKyAgICAgICAg
Tm9kZSogb3JpZ2luYWxOb2RlID0gYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKGNoaWxk
LT5sb2NhbCgpKTsKICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCi0g
ICAgICAgIGRhdGFMb2dGKCIgICAgICAgIERlYWxpbmcgd2l0aCBvcmlnaW5hbCBAJXUuXG4iLCBv
cmlnaW5hbE5vZGVJbmRleCk7CisgICAgICAgIGRhdGFMb2dGKCIgICAgICAgIERlYWxpbmcgd2l0
aCBvcmlnaW5hbCBAJXUuXG4iLCBvcmlnaW5hbE5vZGUtPmluZGV4KCkpOwogI2VuZGlmCi0gICAg
ICAgIEFTU0VSVChvcmlnaW5hbE5vZGVJbmRleCAhPSBOb05vZGUpOwotICAgICAgICBOb2RlKiBv
cmlnaW5hbE5vZGUgPSAmbV9ncmFwaFtvcmlnaW5hbE5vZGVJbmRleF07CisgICAgICAgIEFTU0VS
VChvcmlnaW5hbE5vZGVJbmRleCk7CiAjaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9W
RVJCT1NFKQogICAgICAgICBkYXRhTG9nRigiICAgICAgICBPcmlnaW5hbCBoYXMgbG9jYWwgciVk
LlxuIiwgb3JpZ2luYWxOb2RlLT5sb2NhbCgpKTsKICNlbmRpZgotICAgICAgICBBU1NFUlQoY2hp
bGQubG9jYWwoKSA9PSBvcmlnaW5hbE5vZGUtPmxvY2FsKCkpOworICAgICAgICBBU1NFUlQoY2hp
bGQtPmxvY2FsKCkgPT0gb3JpZ2luYWxOb2RlLT5sb2NhbCgpKTsKICAgICAgICAgLy8gUG9zc2li
aWxpdGllczoKICAgICAgICAgLy8gU2V0TG9jYWwgLT4gdGhlIHNlY29uZEJsb2NrIGlzIGdldHRp
bmcgdGhlIHZhbHVlIG9mIHNvbWV0aGluZyB0aGF0IGlzIGltbWVkaWF0ZWx5CiAgICAgICAgIC8v
ICAgICBhdmFpbGFibGUgaW4gdGhlIGZpcnN0IGJsb2NrIHdpdGggYSBrbm93biBOb2RlSW5kZXgu
CkBAIC0zMTIsMTAgKzMwOSw4IEBAIHByaXZhdGU6CiAgICAgICAgIC8vIEZsdXNoIC0+IHRoZSBz
ZWNvbmRCbG9jayBpcyBhc2tpbmcgZm9yIGtlZXAtYWxpdmUgb24gYW4gb3BlcmFuZCB0aGF0IHRo
ZSBmaXJzdAogICAgICAgICAvLyAgICAgYmxvY2sgd2FzIGZvcmNpbmcgdG8gYmUgYWxpdmUsIHNv
IHRoZSBzZWNvbmQgYmxvY2sgc2hvdWxkIHJlZmVyIGNoaWxkIG9mCiAgICAgICAgIC8vICAgICB0
aGUgZmx1c2guCi0gICAgICAgIGlmIChvcmlnaW5hbE5vZGUtPm9wKCkgPT0gRmx1c2gpIHsKLSAg
ICAgICAgICAgIG9yaWdpbmFsTm9kZUluZGV4ID0gb3JpZ2luYWxOb2RlLT5jaGlsZDEoKS5pbmRl
eCgpOwotICAgICAgICAgICAgb3JpZ2luYWxOb2RlID0gJm1fZ3JhcGhbb3JpZ2luYWxOb2RlSW5k
ZXhdOwotICAgICAgICB9CisgICAgICAgIGlmIChvcmlnaW5hbE5vZGUtPm9wKCkgPT0gRmx1c2gp
CisgICAgICAgICAgICBvcmlnaW5hbE5vZGUgPSBvcmlnaW5hbE5vZGUtPmNoaWxkMSgpLm5vZGUo
KTsKICAgICAgICAgc3dpdGNoIChvcmlnaW5hbE5vZGUtPm9wKCkpIHsKICAgICAgICAgY2FzZSBT
ZXRMb2NhbDogewogICAgICAgICAgICAgaWYgKGNoYW5nZVJlZikKQEAgLTMyMyw3ICszMTgsNyBA
QCBwcml2YXRlOgogI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKICAg
ICAgICAgICAgIGRhdGFMb2dGKCIgICAgICAgIEl0J3MgYSBTZXRMb2NhbC5cbiIpOwogI2VuZGlm
Ci0gICAgICAgICAgICBtX2dyYXBoLmNoYW5nZUluZGV4KGVkZ2UsIG9yaWdpbmFsTm9kZS0+Y2hp
bGQxKCkuaW5kZXgoKSwgY2hhbmdlUmVmKTsKKyAgICAgICAgICAgIG1fZ3JhcGguY2hhbmdlQ2hp
bGQoZWRnZSwgb3JpZ2luYWxOb2RlLT5jaGlsZDEoKS5ub2RlKCksIGNoYW5nZVJlZik7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIEdldExvY2FsOiB7CkBAIC0z
MzEsNyArMzI2LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGRhdGFMb2dGKCIgICAgICAgIEl0
J3MgYSBHZXRMb2NhbC5cbiIpOwogI2VuZGlmCiAgICAgICAgICAgICBpZiAob3JpZ2luYWxOb2Rl
LT5zaG91bGRHZW5lcmF0ZSgpKQotICAgICAgICAgICAgICAgIG1fZ3JhcGguY2hhbmdlSW5kZXgo
ZWRnZSwgb3JpZ2luYWxOb2RlSW5kZXgsIGNoYW5nZVJlZik7CisgICAgICAgICAgICAgICAgbV9n
cmFwaC5jaGFuZ2VDaGlsZChlZGdlLCBvcmlnaW5hbE5vZGUsIGNoYW5nZVJlZik7CiAgICAgICAg
ICAgICAvLyBJZiB3ZSBoYXZlIGEgR2V0TG9jYWwgdGhhdCBwb2ludHMgdG8gYSBjaGlsZCBHZXRM
b2NhbCB0aGF0IGlzIGRlYWQsIHRoZW4KICAgICAgICAgICAgIC8vIHdlIGhhdmUgbm8gbmVlZCB0
byBkbyBhbnl0aGluZzogdGhpcyBvcmlnaW5hbCBHZXRMb2NhbCBpcyBzdGlsbCB2YWxpZC4KICAg
ICAgICAgICAgIGJyZWFrOwpAQCAtMzc1LDIzICszNzAsMjEgQEAgcHJpdmF0ZToKICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGRl
c3RpbmF0aW9uQmxvY2stPnBoaXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIE5vZGVJbmRl
eCBwaGlOb2RlSW5kZXggPSBkZXN0aW5hdGlvbkJsb2NrLT5waGlzW2ldOwotICAgICAgICAgICAg
Tm9kZSYgcGhpTm9kZSA9IG1fZ3JhcGhbcGhpTm9kZUluZGV4XTsKLSAgICAgICAgICAgIE5vZGVJ
bmRleCBteU5vZGVJbmRleCA9IHNvdXJjZUJsb2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZChw
aGlOb2RlLmxvY2FsKCkpOwotI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9T
RSkKLSAgICAgICAgICAgIGRhdGFMb2dGKCJDb25zaWRlcmluZyByZW1vdmluZyByZWZlcmVuY2Ug
ZnJvbSBwaGkgQCV1IHRvIEAldSBvbiBsb2NhbCByJWQ6IiwKLSAgICAgICAgICAgICAgICAgICAg
cGhpTm9kZUluZGV4LCBteU5vZGVJbmRleCwgcGhpTm9kZS5sb2NhbCgpKTsKLSNlbmRpZgotICAg
ICAgICAgICAgaWYgKG15Tm9kZUluZGV4ID09IE5vTm9kZSkgeworICAgICAgICAgICAgTm9kZSog
cGhpTm9kZSA9IGRlc3RpbmF0aW9uQmxvY2stPnBoaXNbaV07CisgICAgICAgICAgICBOb2RlKiBt
eU5vZGUgPSBzb3VyY2VCbG9jay0+dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQocGhpTm9kZS0+bG9j
YWwoKSk7CisgICAgICAgICAgICBpZiAoIW15Tm9kZSkgewogICAgICAgICAgICAgICAgIC8vIFRo
aXMgd2lsbCBoYXBwZW4gaWYgdGhlcmUgaXMgYSBwaGkgaW4gdGhlIGRlc3RpbmF0aW9uIHRoYXQg
cmVmZXJzIGludG8KICAgICAgICAgICAgICAgICAvLyB0aGUgZGVzdGluYXRpb24gaXRzZWxmLgog
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgTm9k
ZSYgbXlOb2RlID0gbV9ncmFwaFtteU5vZGVJbmRleF07Ci0gICAgICAgICAgICBpZiAobXlOb2Rl
Lm9wKCkgPT0gR2V0TG9jYWwpCi0gICAgICAgICAgICAgICAgbXlOb2RlSW5kZXggPSBteU5vZGUu
Y2hpbGQxKCkuaW5kZXgoKTsKKyNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJP
U0UpCisgICAgICAgICAgICBkYXRhTG9nRigiQ29uc2lkZXJpbmcgcmVtb3ZpbmcgcmVmZXJlbmNl
IGZyb20gcGhpIEAldSB0byBAJXUgb24gbG9jYWwgciVkOiIsCisgICAgICAgICAgICAgICAgICAg
ICBwaGlOb2RlLT5pbmRleCgpLCBteU5vZGUtPmluZGV4KCksIHBoaU5vZGUtPmxvY2FsKCkpOwor
I2VuZGlmCisgICAgICAgICAgICBpZiAobXlOb2RlLT5vcCgpID09IEdldExvY2FsKQorICAgICAg
ICAgICAgICAgIG15Tm9kZSA9IG15Tm9kZS0+Y2hpbGQxKCkubm9kZSgpOwogICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBqID0gMDsgaiA8IEFkamFjZW5jeUxpc3Q6OlNpemU7ICsraikKLSAgICAg
ICAgICAgICAgICByZW1vdmVQb3RlbnRpYWxseURlYWRQaGlSZWZlcmVuY2UobXlOb2RlSW5kZXgs
IHBoaU5vZGUsIGosIHNvdXJjZUJsb2NrLT5pc1JlYWNoYWJsZSk7CisgICAgICAgICAgICAgICAg
cmVtb3ZlUG90ZW50aWFsbHlEZWFkUGhpUmVmZXJlbmNlKG15Tm9kZSwgcGhpTm9kZSwgaiwgc291
cmNlQmxvY2stPmlzUmVhY2hhYmxlKTsKICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9O
X1ZFUkJPU0UpCiAgICAgICAgICAgICBkYXRhTG9nRigiXG4iKTsKICNlbmRpZgpAQCAtNDE2LDU4
ICs0MDksNTcgQEAgcHJpdmF0ZToKICAgICAgICAgZml4UGhpcyhibG9ja0luZGV4LCBqZXR0aXNv
bmVkQmxvY2tJbmRleCk7CiAgICAgfQogICAgIAotICAgIHZvaWQgcmVtb3ZlUG90ZW50aWFsbHlE
ZWFkUGhpUmVmZXJlbmNlKE5vZGVJbmRleCBteU5vZGVJbmRleCwgTm9kZSYgcGhpTm9kZSwgdW5z
aWduZWQgZWRnZUluZGV4LCBib29sIGNoYW5nZVJlZikKKyAgICB2b2lkIHJlbW92ZVBvdGVudGlh
bGx5RGVhZFBoaVJlZmVyZW5jZShOb2RlKiBteU5vZGUsIE5vZGUqIHBoaU5vZGUsIHVuc2lnbmVk
IGVkZ2VJbmRleCwgYm9vbCBjaGFuZ2VSZWYpCiAgICAgewotICAgICAgICBpZiAocGhpTm9kZS5j
aGlsZHJlbi5jaGlsZChlZGdlSW5kZXgpLmluZGV4VW5jaGVja2VkKCkgIT0gbXlOb2RlSW5kZXgp
CisgICAgICAgIGlmIChwaGlOb2RlLT5jaGlsZHJlbi5jaGlsZChlZGdlSW5kZXgpLm5vZGUoKSAh
PSBteU5vZGUpCiAgICAgICAgICAgICByZXR1cm47CiAjaWYgREZHX0VOQUJMRShERUJVR19QUk9Q
QUdBVElPTl9WRVJCT1NFKQogICAgICAgICBkYXRhTG9nRigiIFJlbW92aW5nIHJlZmVyZW5jZSBh
dCBjaGlsZCAldS4iLCBlZGdlSW5kZXgpOwogI2VuZGlmCi0gICAgICAgIGlmIChjaGFuZ2VSZWYg
JiYgcGhpTm9kZS5zaG91bGRHZW5lcmF0ZSgpKQotICAgICAgICAgICAgbV9ncmFwaC5kZXJlZiht
eU5vZGVJbmRleCk7Ci0gICAgICAgIHBoaU5vZGUuY2hpbGRyZW4ucmVtb3ZlRWRnZUZyb21CYWco
ZWRnZUluZGV4KTsKKyAgICAgICAgaWYgKGNoYW5nZVJlZiAmJiBwaGlOb2RlLT5zaG91bGRHZW5l
cmF0ZSgpKQorICAgICAgICAgICAgbV9ncmFwaC5kZXJlZihteU5vZGUpOworICAgICAgICBwaGlO
b2RlLT5jaGlsZHJlbi5yZW1vdmVFZGdlRnJvbUJhZyhlZGdlSW5kZXgpOwogICAgIH0KICAgICAK
ICAgICBzdHJ1Y3QgT3BlcmFuZFN1YnN0aXR1dGlvbiB7CiAgICAgICAgIE9wZXJhbmRTdWJzdGl0
dXRpb24oKQotICAgICAgICAgICAgOiBvbGRDaGlsZChOb05vZGUpCi0gICAgICAgICAgICAsIG5l
d0NoaWxkKE5vTm9kZSkKKyAgICAgICAgICAgIDogb2xkQ2hpbGQoMCkKKyAgICAgICAgICAgICwg
bmV3Q2hpbGQoMCkKICAgICAgICAgewogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBleHBs
aWNpdCBPcGVyYW5kU3Vic3RpdHV0aW9uKE5vZGVJbmRleCBvbGRDaGlsZCkKKyAgICAgICAgZXhw
bGljaXQgT3BlcmFuZFN1YnN0aXR1dGlvbihOb2RlKiBvbGRDaGlsZCkKICAgICAgICAgICAgIDog
b2xkQ2hpbGQob2xkQ2hpbGQpCiAgICAgICAgICAgICAsIG5ld0NoaWxkKG9sZENoaWxkKQogICAg
ICAgICB7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIE9wZXJhbmRTdWJzdGl0dXRpb24o
Tm9kZUluZGV4IG9sZENoaWxkLCBOb2RlSW5kZXggbmV3Q2hpbGQpCisgICAgICAgIE9wZXJhbmRT
dWJzdGl0dXRpb24oTm9kZSogb2xkQ2hpbGQsIE5vZGUqIG5ld0NoaWxkKQogICAgICAgICAgICAg
OiBvbGRDaGlsZChvbGRDaGlsZCkKICAgICAgICAgICAgICwgbmV3Q2hpbGQobmV3Q2hpbGQpCiAg
ICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVCgob2xkQ2hpbGQgPT0gTm9Ob2RlKSA9PSAobmV3
Q2hpbGQgPT0gTm9Ob2RlKSk7CisgICAgICAgICAgICBBU1NFUlQoKCFvbGRDaGlsZCkgPT0gKCFu
ZXdDaGlsZCkpOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICB2b2lkIGR1bXAoRklMRSog
b3V0KQorICAgICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKICAgICAgICAg
ewotICAgICAgICAgICAgaWYgKG9sZENoaWxkID09IE5vTm9kZSkKLSAgICAgICAgICAgICAgICBm
cHJpbnRmKG91dCwgIi0iKTsKKyAgICAgICAgICAgIGlmICghb2xkQ2hpbGQpCisgICAgICAgICAg
ICAgICAgb3V0LnByaW50ZihvdXQsICItIik7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAg
ICAgICAgZnByaW50ZihvdXQsICJAJXUgLT4gQCV1Iiwgb2xkQ2hpbGQsIG5ld0NoaWxkKTsKKyAg
ICAgICAgICAgICAgICBvdXQucHJpbnRmKG91dCwgIkAldSAtPiBAJXUiLCBvbGRDaGlsZC0+aW5k
ZXgoKSwgbmV3Q2hpbGQtPmluZGV4KCkpOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBO
b2RlSW5kZXggb2xkQ2hpbGQ7Ci0gICAgICAgIE5vZGVJbmRleCBuZXdDaGlsZDsKKyAgICAgICAg
Tm9kZSogb2xkQ2hpbGQ7CisgICAgICAgIE5vZGUqIG5ld0NoaWxkOwogICAgIH07CiAgICAgCi0g
ICAgTm9kZUluZGV4IHNraXBHZXRMb2NhbChOb2RlSW5kZXggbm9kZUluZGV4KQorICAgIE5vZGUq
IHNraXBHZXRMb2NhbChOb2RlKiBub2RlKQogICAgIHsKLSAgICAgICAgaWYgKG5vZGVJbmRleCA9
PSBOb05vZGUpCi0gICAgICAgICAgICByZXR1cm4gTm9Ob2RlOwotICAgICAgICBOb2RlJiBub2Rl
ID0gbV9ncmFwaFtub2RlSW5kZXhdOwotICAgICAgICBpZiAobm9kZS5vcCgpID09IEdldExvY2Fs
KQotICAgICAgICAgICAgcmV0dXJuIG5vZGUuY2hpbGQxKCkuaW5kZXgoKTsKLSAgICAgICAgcmV0
dXJuIG5vZGVJbmRleDsKKyAgICAgICAgaWYgKCFub2RlKQorICAgICAgICAgICAgcmV0dXJuIDA7
CisgICAgICAgIGlmIChub2RlLT5vcCgpID09IEdldExvY2FsKQorICAgICAgICAgICAgcmV0dXJu
IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKKyAgICAgICAgcmV0dXJuIG5vZGU7CiAgICAgfQogICAg
IAogICAgIHZvaWQgcmVjb3JkUG9zc2libGVJbmNvbWluZ1JlZmVyZW5jZSgKQEAgLTQ3NywzMCAr
NDY5LDI4IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBza2lwR2V0TG9jYWwoc2Vjb25kQmxvY2st
PnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKG9wZXJhbmQpKSk7CiAgICAgfQogICAgIAotICAgIHZv
aWQgcmVjb3JkTmV3VGFyZ2V0KE9wZXJhbmRzPE9wZXJhbmRTdWJzdGl0dXRpb24+JiBzdWJzdGl0
dXRpb25zLCBpbnQgb3BlcmFuZCwgTm9kZUluZGV4IG5vZGVJbmRleCkKKyAgICB2b2lkIHJlY29y
ZE5ld1RhcmdldChPcGVyYW5kczxPcGVyYW5kU3Vic3RpdHV0aW9uPiYgc3Vic3RpdHV0aW9ucywg
aW50IG9wZXJhbmQsIE5vZGVJbmRleCBOb2RlKiBub2RlKQogICAgIHsKLSAgICAgICAgQVNTRVJU
KG1fZ3JhcGhbbm9kZUluZGV4XS5vcCgpID09IFNldExvY2FsCi0gICAgICAgICAgICAgICB8fCBt
X2dyYXBoW25vZGVJbmRleF0ub3AoKSA9PSBTZXRBcmd1bWVudAotICAgICAgICAgICAgICAgfHwg
bV9ncmFwaFtub2RlSW5kZXhdLm9wKCkgPT0gRmx1c2gKLSAgICAgICAgICAgICAgIHx8IG1fZ3Jh
cGhbbm9kZUluZGV4XS5vcCgpID09IFBoaSk7Ci0gICAgICAgIHN1YnN0aXR1dGlvbnMub3BlcmFu
ZChvcGVyYW5kKS5uZXdDaGlsZCA9IG5vZGVJbmRleDsKKyAgICAgICAgQVNTRVJUKG5vZGUtPm9w
KCkgPT0gU2V0TG9jYWwKKyAgICAgICAgICAgICAgIHx8IG5vZGUtPm9wKCkgPT0gU2V0QXJndW1l
bnQKKyAgICAgICAgICAgICAgIHx8IG5vZGUtPm9wKCkgPT0gRmx1c2gKKyAgICAgICAgICAgICAg
IHx8IG5vZGUtPm9wKCkgPT0gUGhpKTsKKyAgICAgICAgc3Vic3RpdHV0aW9ucy5vcGVyYW5kKG9w
ZXJhbmQpLm5ld0NoaWxkID0gbm9kZTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBmaXhUYWlsT3Bl
cmFuZCgKICAgICAgICAgQmFzaWNCbG9jayogZmlyc3RCbG9jaywgQmFzaWNCbG9jayogc2Vjb25k
QmxvY2ssIGludCBvcGVyYW5kLAogICAgICAgICBPcGVyYW5kczxPcGVyYW5kU3Vic3RpdHV0aW9u
PiYgc3Vic3RpdHV0aW9ucykKICAgICB7Ci0gICAgICAgIE5vZGVJbmRleCBhdFNlY29uZFRhaWwg
PSBzZWNvbmRCbG9jay0+dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQob3BlcmFuZCk7CisgICAgICAg
IE5vZGUqIGF0U2Vjb25kVGFpbCA9IHNlY29uZEJsb2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFu
ZChvcGVyYW5kKTsKICAgICAgICAgCi0gICAgICAgIGlmIChhdFNlY29uZFRhaWwgPT0gTm9Ob2Rl
KSB7CisgICAgICAgIGlmICghYXRTZWNvbmRUYWlsKSB7CiAgICAgICAgICAgICAvLyBJZiB0aGUg
dmFyaWFibGUgaXMgZGVhZCBhdCB0aGUgZW5kIG9mIHRoZSBzZWNvbmQgYmxvY2ssIHRoZW4gZG8g
bm90aGluZzsgZXNzZW50aWFsbHkKICAgICAgICAgICAgIC8vIHRoaXMgbWVhbnMgdGhhdCB3ZSB3
YW50IHRoZSB0YWlsIHN0YXRlIHRvIHJlZmxlY3Qgd2hhdGV2ZXIgdGhlIGZpcnN0IGJsb2NrIGRp
ZC4KICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0gICAgICAgIE5vZGUmIHNlY29u
ZE5vZGUgPSBtX2dyYXBoW2F0U2Vjb25kVGFpbF07Ci0gICAgICAgIAotICAgICAgICBzd2l0Y2gg
KHNlY29uZE5vZGUub3AoKSkgeworICAgICAgICBzd2l0Y2ggKGF0U2Vjb25kVGFpbC0+b3AoKSkg
ewogICAgICAgICBjYXNlIFNldExvY2FsOgogICAgICAgICBjYXNlIEZsdXNoOiB7CiAgICAgICAg
ICAgICAvLyBUaGUgc2Vjb25kIGJsb2NrIGRpZCBpbnRlcmVzdGluZyB0aGluZ3MgdG8gdGhlIHZh
cmlhYmxlcywgc28gdXBkYXRlIHRoZSB0YWlsCkBAIC01MTEsNyArNTAxLDcgQEAgcHJpdmF0ZToK
ICAgICAgICAgICAgIAogICAgICAgICBjYXNlIFBoaTogewogICAgICAgICAgICAgLy8gS2VlcCB3
aGF0IHdhcyBpbiB0aGUgZmlyc3QgYmxvY2suCi0gICAgICAgICAgICBBU1NFUlQoZmlyc3RCbG9j
ay0+dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQob3BlcmFuZCkgIT0gTm9Ob2RlKTsKKyAgICAgICAg
ICAgIEFTU0VSVChmaXJzdEJsb2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZChvcGVyYW5kKSk7
CiAgICAgICAgICAgICByZWNvcmROZXdUYXJnZXQoc3Vic3RpdHV0aW9ucywgb3BlcmFuZCwgc2tp
cEdldExvY2FsKGZpcnN0QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKG9wZXJhbmQpKSk7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtNTIwLDI4ICs1MTAsMjggQEAgcHJp
dmF0ZToKICAgICAgICAgICAgIC8vIElmIGl0J3MgYSBHZXRMb2NhbCBvbiBhIGNhcHR1cmVkIHZh
ciwgdGhlbiBkZWZpbml0ZWx5IGtlZXAgd2hhdCB3YXMKICAgICAgICAgICAgIC8vIGluIHRoZSBz
ZWNvbmQgYmxvY2suIEluIHBhcnRpY3VsYXIsIGl0J3MgcG9zc2libGUgdGhhdCB0aGUgZmlyc3QK
ICAgICAgICAgICAgIC8vIGJsb2NrIGRvZXNuJ3QgZXZlbiBrbm93IGFib3V0IHRoaXMgdmFyaWFi
bGUuCi0gICAgICAgICAgICBpZiAoc2Vjb25kTm9kZS52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+aXND
YXB0dXJlZCgpKSB7CisgICAgICAgICAgICBpZiAoYXRTZWNvbmRUYWlsLT52YXJpYWJsZUFjY2Vz
c0RhdGEoKS0+aXNDYXB0dXJlZCgpKSB7CiAgICAgICAgICAgICAgICAgZmlyc3RCbG9jay0+dmFy
aWFibGVzQXRUYWlsLm9wZXJhbmQob3BlcmFuZCkgPSBhdFNlY29uZFRhaWw7Ci0gICAgICAgICAg
ICAgICAgcmVjb3JkTmV3VGFyZ2V0KHN1YnN0aXR1dGlvbnMsIG9wZXJhbmQsIHNlY29uZE5vZGUu
Y2hpbGQxKCkuaW5kZXgoKSk7CisgICAgICAgICAgICAgICAgcmVjb3JkTmV3VGFyZ2V0KHN1YnN0
aXR1dGlvbnMsIG9wZXJhbmQsIGF0U2Vjb25kVGFpbC0+Y2hpbGQxKCkuaW5kZXgoKSk7CiAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAg
ICAgIC8vIEl0J3MgcG9zc2libGUgdGhhdCB0aGUgc2Vjb25kIGJsb2NrIGhhZCBhIEdldExvY2Fs
IGFuZCB0aGUgZmlyc3QgYmxvY2sKICAgICAgICAgICAgIC8vIGhhZCBhIFNldEFyZ3VtZW50IG9y
IGEgUGhpLiBUaGVuIHVwZGF0ZSB0aGUgdGFpbC4gT3RoZXJ3aXNlIGtlZXAgd2hhdCB3YXMgaW4g
dGhlCiAgICAgICAgICAgICAvLyBmaXJzdCBibG9jay4KLSAgICAgICAgICAgIE5vZGVJbmRleCBh
dEZpcnN0VGFpbCA9IGZpcnN0QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKG9wZXJhbmQp
OwotICAgICAgICAgICAgQVNTRVJUKGF0Rmlyc3RUYWlsICE9IE5vTm9kZSk7Ci0gICAgICAgICAg
ICBzd2l0Y2ggKG1fZ3JhcGhbYXRGaXJzdFRhaWxdLm9wKCkpIHsKKyAgICAgICAgICAgIE5vZGUq
IGF0Rmlyc3RUYWlsID0gZmlyc3RCbG9jay0+dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQob3BlcmFu
ZCk7CisgICAgICAgICAgICBBU1NFUlQoYXRGaXJzdFRhaWwpOworICAgICAgICAgICAgc3dpdGNo
IChhdEZpcnN0VGFpbC0+b3AoKSkgewogICAgICAgICAgICAgY2FzZSBTZXRBcmd1bWVudDoKICAg
ICAgICAgICAgIGNhc2UgUGhpOgogICAgICAgICAgICAgICAgIGZpcnN0QmxvY2stPnZhcmlhYmxl
c0F0VGFpbC5vcGVyYW5kKG9wZXJhbmQpID0gYXRTZWNvbmRUYWlsOwotICAgICAgICAgICAgICAg
IHJlY29yZE5ld1RhcmdldChzdWJzdGl0dXRpb25zLCBvcGVyYW5kLCBzZWNvbmROb2RlLmNoaWxk
MSgpLmluZGV4KCkpOworICAgICAgICAgICAgICAgIHJlY29yZE5ld1RhcmdldChzdWJzdGl0dXRp
b25zLCBvcGVyYW5kLCBhdFNlY29uZFRhaWwtPmNoaWxkMSgpLmluZGV4KCkpOwogICAgICAgICAg
ICAgICAgIGJyZWFrOwogCiAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgIC8v
IEtlZXAgd2hhdCB3YXMgaW4gdGhlIGZpcnN0IGJsb2NrLCBhbmQgYWRqdXN0IHRoZSBzdWJzdGl0
dXRpb24gdG8gYWNjb3VudCBmb3IKICAgICAgICAgICAgICAgICAvLyB0aGUgZmFjdCB0aGF0IHN1
Y2Nlc3NvcnMgd2lsbCByZWZlciB0byB0aGUgY2hpbGQgb2YgdGhlIEdldExvY2FsLgotICAgICAg
ICAgICAgICAgIEFTU0VSVChmaXJzdEJsb2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZChvcGVy
YW5kKSAhPSBOb05vZGUpOworICAgICAgICAgICAgICAgIEFTU0VSVChmaXJzdEJsb2NrLT52YXJp
YWJsZXNBdFRhaWwub3BlcmFuZChvcGVyYW5kKSk7CiAgICAgICAgICAgICAgICAgcmVjb3JkTmV3
VGFyZ2V0KHN1YnN0aXR1dGlvbnMsIG9wZXJhbmQsIHNraXBHZXRMb2NhbChmaXJzdEJsb2NrLT52
YXJpYWJsZXNBdFRhaWwub3BlcmFuZChvcGVyYW5kKSkpOwogICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgfQpAQCAtNTY3LDEwICs1NTcsMTAgQEAgcHJpdmF0ZToKICAgICAgICAg
CiAgICAgICAgIC8vIFJlbW92ZSB0aGUgdGVybWluYWwgb2YgZmlyc3RCbG9jayBzaW5jZSB3ZSBk
b24ndCBuZWVkIGl0IGFueW1vcmUuIFdlbGwsIHdlIGRvbid0CiAgICAgICAgIC8vIHJlYWxseSBy
ZW1vdmUgaXQ7IHdlIGFjdHVhbGx5IHR1cm4gaXQgaW50byBhIFBoYW50b20uCi0gICAgICAgIEFT
U0VSVChtX2dyYXBoW2ZpcnN0QmxvY2stPmxhc3QoKV0uaXNUZXJtaW5hbCgpKTsKLSAgICAgICAg
Q29kZU9yaWdpbiBib3VuZGFyeUNvZGVPcmlnaW4gPSBtX2dyYXBoW2ZpcnN0QmxvY2stPmxhc3Qo
KV0uY29kZU9yaWdpbjsKLSAgICAgICAgbV9ncmFwaFtmaXJzdEJsb2NrLT5sYXN0KCldLnNldE9w
QW5kRGVmYXVsdEZsYWdzKFBoYW50b20pOwotICAgICAgICBBU1NFUlQobV9ncmFwaFtmaXJzdEJs
b2NrLT5sYXN0KCldLnJlZkNvdW50KCkgPT0gMSk7CisgICAgICAgIEFTU0VSVChmaXJzdEJsb2Nr
LT5sYXN0KCktPmlzVGVybWluYWwoKSk7CisgICAgICAgIENvZGVPcmlnaW4gYm91bmRhcnlDb2Rl
T3JpZ2luID0gZmlyc3RCbG9jay0+bGFzdCgpLT5jb2RlT3JpZ2luOworICAgICAgICBmaXJzdEJs
b2NrLT5sYXN0KCktPnNldE9wQW5kRGVmYXVsdEZsYWdzKFBoYW50b20pOworICAgICAgICBBU1NF
UlQoZmlyc3RCbG9jay0+bGFzdCgpLT5yZWZDb3VudCgpID09IDEpOwogICAgICAgICAKICAgICAg
ICAgaWYgKGpldHRpc29uZWRCbG9ja0luZGV4ICE9IE5vQmxvY2spIHsKICAgICAgICAgICAgIEJh
c2ljQmxvY2sqIGpldHRpc29uZWRCbG9jayA9IG1fZ3JhcGgubV9ibG9ja3NbamV0dGlzb25lZEJs
b2NrSW5kZXhdLmdldCgpOwpAQCAtNTk5LDI4ICs1ODksMjUgQEAgcHJpdmF0ZToKICAgICAgICAg
ICAgIHJlY29yZFBvc3NpYmxlSW5jb21pbmdSZWZlcmVuY2Uoc2Vjb25kQmxvY2ssIHN1YnN0aXR1
dGlvbnMsIGkpOwogCiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2Vjb25kQmxvY2st
PnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4ID0gc2Vjb25k
QmxvY2stPmF0KGkpOwotICAgICAgICAgICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhbbm9kZUluZGV4
XTsKKyAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBzZWNvbmRCbG9jay0+YXQoaSk7CiAgICAgICAg
ICAgICAKICAgICAgICAgICAgIGJvb2wgY2hpbGRyZW5BbHJlYWR5Rml4ZWQgPSBmYWxzZTsKICAg
ICAgICAgICAgIAotICAgICAgICAgICAgc3dpdGNoIChub2RlLm9wKCkpIHsKKyAgICAgICAgICAg
IHN3aXRjaCAobm9kZS0+b3AoKSkgewogICAgICAgICAgICAgY2FzZSBQaGFudG9tOiB7Ci0gICAg
ICAgICAgICAgICAgaWYgKCFub2RlLmNoaWxkMSgpKQorICAgICAgICAgICAgICAgIGlmICghbm9k
ZS0+Y2hpbGQxKCkpCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAg
IAotICAgICAgICAgICAgICAgIEFTU0VSVChub2RlLnNob3VsZEdlbmVyYXRlKCkpOwotICAgICAg
ICAgICAgICAgIE5vZGUmIHBvc3NpYmxlTG9jYWxPcCA9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV07
Ci0gICAgICAgICAgICAgICAgaWYgKHBvc3NpYmxlTG9jYWxPcC5vcCgpICE9IEdldExvY2FsCi0g
ICAgICAgICAgICAgICAgICAgICYmIHBvc3NpYmxlTG9jYWxPcC5oYXNMb2NhbCgpCi0gICAgICAg
ICAgICAgICAgICAgICYmICFwb3NzaWJsZUxvY2FsT3AudmFyaWFibGVBY2Nlc3NEYXRhKCktPmlz
Q2FwdHVyZWQoKSkgewotICAgICAgICAgICAgICAgICAgICBOb2RlSW5kZXggc2V0TG9jYWxJbmRl
eCA9Ci0gICAgICAgICAgICAgICAgICAgICAgICBmaXJzdEJsb2NrLT52YXJpYWJsZXNBdFRhaWwu
b3BlcmFuZChwb3NzaWJsZUxvY2FsT3AubG9jYWwoKSk7Ci0gICAgICAgICAgICAgICAgICAgIE5v
ZGUmIHNldExvY2FsID0gbV9ncmFwaFtzZXRMb2NhbEluZGV4XTsKLSAgICAgICAgICAgICAgICAg
ICAgaWYgKHNldExvY2FsLm9wKCkgPT0gU2V0TG9jYWwpIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIG1fZ3JhcGguY2hhbmdlRWRnZShub2RlLmNoaWxkcmVuLmNoaWxkMSgpLCBzZXRMb2NhbC5j
aGlsZDEoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQoIW5vZGUuY2hpbGQyKCkp
OwotICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKCFub2RlLmNoaWxkMygpKTsKKyAgICAg
ICAgICAgICAgICBBU1NFUlQobm9kZS0+c2hvdWxkR2VuZXJhdGUoKSk7CisgICAgICAgICAgICAg
ICAgTm9kZSogcG9zc2libGVMb2NhbE9wID0gbm9kZS0+Y2hpbGQxKCkubm9kZSgpOworICAgICAg
ICAgICAgICAgIGlmIChwb3NzaWJsZUxvY2FsT3AtPm9wKCkgIT0gR2V0TG9jYWwKKyAgICAgICAg
ICAgICAgICAgICAgJiYgcG9zc2libGVMb2NhbE9wLT5oYXNMb2NhbCgpCisgICAgICAgICAgICAg
ICAgICAgICYmICFwb3NzaWJsZUxvY2FsT3AtPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5pc0NhcHR1
cmVkKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgTm9kZSogc2V0TG9jYWwgPSBmaXJzdEJsb2Nr
LT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZChwb3NzaWJsZUxvY2FsT3AtPmxvY2FsKCkpOworICAg
ICAgICAgICAgICAgICAgICBpZiAoc2V0TG9jYWwtPm9wKCkgPT0gU2V0TG9jYWwpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguY2hhbmdlRWRnZShub2RlLT5jaGlsZHJlbi5jaGls
ZDEoKSwgc2V0TG9jYWwtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VS
VCghbm9kZS0+Y2hpbGQyKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKCFub2Rl
LT5jaGlsZDMoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbkFscmVhZHlGaXhl
ZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CkBAIC02
MzcsMTEgKzYyNCwxMSBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIC8vIFNpbWlsYXJseSBm
b3IgR2V0TG9jYWw7IGl0IGNvdWxkIHVzZSBhbnkgb2YgdGhvc2UgZXhjZXB0IGZvcgogICAgICAg
ICAgICAgICAgIC8vIEdldExvY2FsLiBJZiBpdCB1c2VzIGEgUGhpIHRoZW4gaXQgc2hvdWxkIGJl
IHJlZGlyZWN0ZWQgdG8gdXNlIGEKICAgICAgICAgICAgICAgICAvLyBQaGkgZnJvbSB0aGUgdGFp
bCBvcGVyYW5kLgotICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoW25vZGUuY2hpbGQxKCldLm9w
KCkgIT0gUGhpKQorICAgICAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS0+b3AoKSAhPSBQ
aGkpCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIAotICAgICAg
ICAgICAgICAgIE5vZGVJbmRleCBhdEZpcnN0SW5kZXggPSBmaXJzdEJsb2NrLT52YXJpYWJsZXNB
dFRhaWwub3BlcmFuZChub2RlLmxvY2FsKCkpOwotICAgICAgICAgICAgICAgIG1fZ3JhcGguY2hh
bmdlRWRnZShub2RlLmNoaWxkcmVuLmNoaWxkMSgpLCBFZGdlKHNraXBHZXRMb2NhbChhdEZpcnN0
SW5kZXgpKSwgbm9kZS5zaG91bGRHZW5lcmF0ZSgpKTsKKyAgICAgICAgICAgICAgICBOb2RlKiBh
dEZpcnN0ID0gZmlyc3RCbG9jay0+dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQobm9kZS0+bG9jYWwo
KSk7CisgICAgICAgICAgICAgICAgbV9ncmFwaC5jaGFuZ2VFZGdlKG5vZGUtPmNoaWxkcmVuLmNo
aWxkMSgpLCBFZGdlKHNraXBHZXRMb2NhbChhdEZpcnN0KSksIG5vZGUtPnNob3VsZEdlbmVyYXRl
KCkpOwogICAgICAgICAgICAgICAgIGNoaWxkcmVuQWxyZWFkeUZpeGVkID0gdHJ1ZTsKICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KQEAgLTY1MSwzMCArNjM4LDMwIEBAIHBy
aXZhdGU6CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlmICghY2hp
bGRyZW5BbHJlYWR5Rml4ZWQpIHsKLSAgICAgICAgICAgICAgICBib29sIGNoYW5nZVJlZiA9IG5v
ZGUuc2hvdWxkR2VuZXJhdGUoKTsKKyAgICAgICAgICAgICAgICBib29sIGNoYW5nZVJlZiA9IG5v
ZGUtPnNob3VsZEdlbmVyYXRlKCk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAvLyBJ
ZiB0aGUgY2hpbGQgaXMgYSBHZXRMb2NhbCwgdGhlbiB3ZSBtaWdodCBsaWtlIHRvIGZpeCBpdC4K
LSAgICAgICAgICAgICAgICBpZiAobm9kZS5mbGFncygpICYgTm9kZUhhc1ZhckFyZ3MpIHsKLSAg
ICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBjaGlsZElkeCA9IG5vZGUuZmlyc3RDaGls
ZCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkSWR4IDwgbm9kZS5maXJzdENoaWxk
KCkgKyBub2RlLm51bUNoaWxkcmVuKCk7CisgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmZsYWdz
KCkgJiBOb2RlSGFzVmFyQXJncykgeworICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IGNoaWxkSWR4ID0gbm9kZS0+Zmlyc3RDaGlsZCgpOworICAgICAgICAgICAgICAgICAgICAgICAg
IGNoaWxkSWR4IDwgbm9kZS0+Zmlyc3RDaGlsZCgpICsgbm9kZS0+bnVtQ2hpbGRyZW4oKTsKICAg
ICAgICAgICAgICAgICAgICAgICAgICArK2NoaWxkSWR4KSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoISFtX2dyYXBoLm1fdmFyQXJnQ2hpbGRyZW5bY2hpbGRJZHhdKQogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGZpeFBvc3NpYmxlR2V0TG9jYWwoZmlyc3RCbG9jaywgbV9ncmFw
aC5tX3ZhckFyZ0NoaWxkcmVuW2NoaWxkSWR4XSwgY2hhbmdlUmVmKTsKICAgICAgICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoISFub2RlLmNoaWxkMSgpKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIGZpeFBvc3NpYmxlR2V0TG9jYWwoZmlyc3RCbG9jaywgbm9kZS5j
aGlsZHJlbi5jaGlsZDEoKSwgY2hhbmdlUmVmKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCEh
bm9kZS5jaGlsZDIoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgZml4UG9zc2libGVHZXRM
b2NhbChmaXJzdEJsb2NrLCBub2RlLmNoaWxkcmVuLmNoaWxkMigpLCBjaGFuZ2VSZWYpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKCEhbm9kZS5jaGlsZDMoKSkKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBmaXhQb3NzaWJsZUdldExvY2FsKGZpcnN0QmxvY2ssIG5vZGUuY2hpbGRy
ZW4uY2hpbGQzKCksIGNoYW5nZVJlZik7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmICghIW5v
ZGUtPmNoaWxkMSgpKSB7CisgICAgICAgICAgICAgICAgICAgIGZpeFBvc3NpYmxlR2V0TG9jYWwo
Zmlyc3RCbG9jaywgbm9kZS0+Y2hpbGRyZW4uY2hpbGQxKCksIGNoYW5nZVJlZik7CisgICAgICAg
ICAgICAgICAgICAgIGlmICghIW5vZGUtPmNoaWxkMigpKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBmaXhQb3NzaWJsZUdldExvY2FsKGZpcnN0QmxvY2ssIG5vZGUtPmNoaWxkcmVuLmNoaWxk
MigpLCBjaGFuZ2VSZWYpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEhbm9kZS0+Y2hp
bGQzKCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZml4UG9zc2libGVHZXRMb2NhbChm
aXJzdEJsb2NrLCBub2RlLT5jaGlsZHJlbi5jaGlsZDMoKSwgY2hhbmdlUmVmKTsKICAgICAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KIAotICAgICAg
ICAgICAgZmlyc3RCbG9jay0+YXBwZW5kKG5vZGVJbmRleCk7CisgICAgICAgICAgICBmaXJzdEJs
b2NrLT5hcHBlbmQobm9kZSk7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIEFTU0VSVCht
X2dyYXBoW2ZpcnN0QmxvY2stPmxhc3QoKV0uaXNUZXJtaW5hbCgpKTsKKyAgICAgICAgQVNTRVJU
KGZpcnN0QmxvY2stPmxhc3QoKS0+aXNUZXJtaW5hbCgpKTsKICAgICAgICAgCiAgICAgICAgIC8v
IEZpeCB0aGUgcHJlZGVjZXNzb3JzIG9mIG15IG5ldyBzdWNjZXNzb3JzLiBUaGlzIGlzIHRyaWNr
eSwgc2luY2Ugd2UgYXJlIGdvaW5nIHRvIHJlc2V0CiAgICAgICAgIC8vIGFsbCBwcmVkZWNlc3Nv
cnMgYW55d2F5IGR1ZSB0byByZWFjaGFiaWxpdHkgYW5hbHlzaXMuIEJ1dCB3ZSBuZWVkIHRvIGZp
eCB0aGUKQEAgLTcwNCwyNiArNjkxLDI0IEBAIHByaXZhdGU6CiAgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IG1fZ3JhcGgubnVtU3VjY2Vzc29ycyhmaXJzdEJsb2NrKTsgaS0tOykgewogICAgICAg
ICAgICAgQmFzaWNCbG9jayogc3VjY2Vzc29yID0gbV9ncmFwaC5tX2Jsb2Nrc1ttX2dyYXBoLnN1
Y2Nlc3NvcihmaXJzdEJsb2NrLCBpKV0uZ2V0KCk7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IGogPSAwOyBqIDwgc3VjY2Vzc29yLT5waGlzLnNpemUoKTsgKytqKSB7Ci0gICAgICAgICAgICAg
ICAgTm9kZUluZGV4IHBoaU5vZGVJbmRleCA9IHN1Y2Nlc3Nvci0+cGhpc1tqXTsKLSAgICAgICAg
ICAgICAgICBOb2RlJiBwaGlOb2RlID0gbV9ncmFwaFtwaGlOb2RlSW5kZXhdOwotICAgICAgICAg
ICAgICAgIGJvb2wgY2hhbmdlUmVmID0gcGhpTm9kZS5zaG91bGRHZW5lcmF0ZSgpOwotICAgICAg
ICAgICAgICAgIE9wZXJhbmRTdWJzdGl0dXRpb24gc3Vic3RpdHV0aW9uID0gc3Vic3RpdHV0aW9u
cy5vcGVyYW5kKHBoaU5vZGUubG9jYWwoKSk7CisgICAgICAgICAgICAgICAgTm9kZSogcGhpTm9k
ZSA9IHN1Y2Nlc3Nvci0+cGhpc1tqXTsKKyAgICAgICAgICAgICAgICBib29sIGNoYW5nZVJlZiA9
IHBoaU5vZGUtPnNob3VsZEdlbmVyYXRlKCk7CisgICAgICAgICAgICAgICAgT3BlcmFuZFN1YnN0
aXR1dGlvbiBzdWJzdGl0dXRpb24gPSBzdWJzdGl0dXRpb25zLm9wZXJhbmQocGhpTm9kZS0+bG9j
YWwoKSk7CiAjaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQotICAgICAg
ICAgICAgICAgIGRhdGFMb2dGKCIgICAgUGVyZm9ybWluZyBvcGVyYW5kIHN1YnN0aXR1dGlvbiBA
JXUgLT4gQCV1LlxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgIHN1YnN0aXR1dGlvbi5vbGRD
aGlsZCwgc3Vic3RpdHV0aW9uLm5ld0NoaWxkKTsKKyAgICAgICAgICAgICAgICBkYXRhTG9nKCIg
ICAgUGVyZm9ybWluZyBvcGVyYW5kIHN1YnN0aXR1dGlvbiAiLCBzdWJzdGl0dXRpb24sICIuXG4i
KTsKICNlbmRpZgotICAgICAgICAgICAgICAgIGlmICghcGhpTm9kZS5jaGlsZDEoKSkKKyAgICAg
ICAgICAgICAgICBpZiAoIXBoaU5vZGUtPmNoaWxkMSgpKQogICAgICAgICAgICAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgICAgICAgICBpZiAocGhpTm9kZS5jaGlsZDEoKS5pbmRleCgpID09
IHN1YnN0aXR1dGlvbi5vbGRDaGlsZCkKLSAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5jaGFu
Z2VJbmRleChwaGlOb2RlLmNoaWxkcmVuLmNoaWxkMSgpLCBzdWJzdGl0dXRpb24ubmV3Q2hpbGQs
IGNoYW5nZVJlZik7Ci0gICAgICAgICAgICAgICAgaWYgKCFwaGlOb2RlLmNoaWxkMigpKQorICAg
ICAgICAgICAgICAgIGlmIChwaGlOb2RlLT5jaGlsZDEoKSA9PSBzdWJzdGl0dXRpb24ub2xkQ2hp
bGQpCisgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguY2hhbmdlSW5kZXgocGhpTm9kZS0+Y2hp
bGRyZW4uY2hpbGQxKCksIHN1YnN0aXR1dGlvbi5uZXdDaGlsZCwgY2hhbmdlUmVmKTsKKyAgICAg
ICAgICAgICAgICBpZiAoIXBoaU5vZGUtPmNoaWxkMigpKQogICAgICAgICAgICAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgICAgICAgICBpZiAocGhpTm9kZS5jaGlsZDIoKS5pbmRleCgpID09
IHN1YnN0aXR1dGlvbi5vbGRDaGlsZCkKLSAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5jaGFu
Z2VJbmRleChwaGlOb2RlLmNoaWxkcmVuLmNoaWxkMigpLCBzdWJzdGl0dXRpb24ubmV3Q2hpbGQs
IGNoYW5nZVJlZik7Ci0gICAgICAgICAgICAgICAgaWYgKCFwaGlOb2RlLmNoaWxkMygpKQorICAg
ICAgICAgICAgICAgIGlmIChwaGlOb2RlLT5jaGlsZDIoKSA9PSBzdWJzdGl0dXRpb24ub2xkQ2hp
bGQpCisgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguY2hhbmdlSW5kZXgocGhpTm9kZS0+Y2hp
bGRyZW4uY2hpbGQyKCksIHN1YnN0aXR1dGlvbi5uZXdDaGlsZCwgY2hhbmdlUmVmKTsKKyAgICAg
ICAgICAgICAgICBpZiAoIXBoaU5vZGUtPmNoaWxkMygpKQogICAgICAgICAgICAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgICAgICAgICBpZiAocGhpTm9kZS5jaGlsZDMoKS5pbmRleCgpID09
IHN1YnN0aXR1dGlvbi5vbGRDaGlsZCkKLSAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5jaGFu
Z2VJbmRleChwaGlOb2RlLmNoaWxkcmVuLmNoaWxkMygpLCBzdWJzdGl0dXRpb24ubmV3Q2hpbGQs
IGNoYW5nZVJlZik7CisgICAgICAgICAgICAgICAgaWYgKHBoaU5vZGUtPmNoaWxkMygpID09IHN1
YnN0aXR1dGlvbi5vbGRDaGlsZCkKKyAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5jaGFuZ2VJ
bmRleChwaGlOb2RlLT5jaGlsZHJlbi5jaGlsZDMoKSwgc3Vic3RpdHV0aW9uLm5ld0NoaWxkLCBj
aGFuZ2VSZWYpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDU0VQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDU0VQaGFzZS5jcHAJKHJldmlzaW9uIDE0MDYxNikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1NFUGhhc2UuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC01MywyNCArNTMsMjQgQEAgcHVibGljOgogICAgIAogcHJpdmF0ZToKICAgICAKLSAg
ICBOb2RlSW5kZXggY2Fub25pY2FsaXplKE5vZGVJbmRleCBub2RlSW5kZXgpCisgICAgTm9kZSog
Y2Fub25pY2FsaXplKE5vZGUqIG5vZGUpCiAgICAgewotICAgICAgICBpZiAobm9kZUluZGV4ID09
IE5vTm9kZSkKLSAgICAgICAgICAgIHJldHVybiBOb05vZGU7CisgICAgICAgIGlmICghbm9kZSkK
KyAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAKLSAgICAgICAgaWYgKG1fZ3JhcGhbbm9k
ZUluZGV4XS5vcCgpID09IFZhbHVlVG9JbnQzMikKLSAgICAgICAgICAgIG5vZGVJbmRleCA9IG1f
Z3JhcGhbbm9kZUluZGV4XS5jaGlsZDEoKS5pbmRleCgpOworICAgICAgICBpZiAobm9kZS0+b3Ao
KSA9PSBWYWx1ZVRvSW50MzIpCisgICAgICAgICAgICBub2RlID0gbm9kZS0+Y2hpbGQxKCkubm9k
ZSgpOwogICAgICAgICAKLSAgICAgICAgcmV0dXJuIG5vZGVJbmRleDsKKyAgICAgICAgcmV0dXJu
IG5vZGU7CiAgICAgfQotICAgIE5vZGVJbmRleCBjYW5vbmljYWxpemUoRWRnZSBub2RlVXNlKQor
ICAgIE5vZGUqIGNhbm9uaWNhbGl6ZShFZGdlIGVkZ2UpCiAgICAgewotICAgICAgICByZXR1cm4g
Y2Fub25pY2FsaXplKG5vZGVVc2UuaW5kZXhVbmNoZWNrZWQoKSk7CisgICAgICAgIHJldHVybiBj
YW5vbmljYWxpemUoZWRnZS5ub2RlKCkpOwogICAgIH0KICAgICAKICAgICB1bnNpZ25lZCBlbmRJ
bmRleEZvclB1cmVDU0UoKQogICAgIHsKLSAgICAgICAgdW5zaWduZWQgcmVzdWx0ID0gbV9sYXN0
U2VlblttX2dyYXBoW21fY29tcGlsZUluZGV4XS5vcCgpXTsKKyAgICAgICAgdW5zaWduZWQgcmVz
dWx0ID0gbV9sYXN0U2VlblttX2N1cnJlbnROb2RlLT5vcCgpXTsKICAgICAgICAgaWYgKHJlc3Vs
dCA9PSBVSU5UX01BWCkKICAgICAgICAgICAgIHJlc3VsdCA9IDA7CiAgICAgICAgIGVsc2UKQEAg
LTgyLDI2MSArODIsMjU3IEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAg
fQogCi0gICAgTm9kZUluZGV4IHB1cmVDU0UoTm9kZSYgbm9kZSkKKyAgICBOb2RlKiBwdXJlQ1NF
KE5vZGUqIG5vZGUpCiAgICAgewotICAgICAgICBOb2RlSW5kZXggY2hpbGQxID0gY2Fub25pY2Fs
aXplKG5vZGUuY2hpbGQxKCkpOwotICAgICAgICBOb2RlSW5kZXggY2hpbGQyID0gY2Fub25pY2Fs
aXplKG5vZGUuY2hpbGQyKCkpOwotICAgICAgICBOb2RlSW5kZXggY2hpbGQzID0gY2Fub25pY2Fs
aXplKG5vZGUuY2hpbGQzKCkpOworICAgICAgICBOb2RlKiBjaGlsZDEgPSBjYW5vbmljYWxpemUo
bm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBOb2RlKiBjaGlsZDIgPSBjYW5vbmljYWxpemUobm9k
ZS0+Y2hpbGQyKCkpOworICAgICAgICBOb2RlKiBjaGlsZDMgPSBjYW5vbmljYWxpemUobm9kZS0+
Y2hpbGQzKCkpOwogICAgICAgICAKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gZW5kSW5kZXhG
b3JQdXJlQ1NFKCk7IGktLTspIHsKLSAgICAgICAgICAgIE5vZGVJbmRleCBpbmRleCA9IG1fY3Vy
cmVudEJsb2NrLT5hdChpKTsKLSAgICAgICAgICAgIGlmIChpbmRleCA9PSBjaGlsZDEgfHwgaW5k
ZXggPT0gY2hpbGQyIHx8IGluZGV4ID09IGNoaWxkMykKKyAgICAgICAgICAgIE5vZGUqIG90aGVy
Tm9kZSA9IG1fY3VycmVudEJsb2NrLT5hdChpKTsKKyAgICAgICAgICAgIGlmIChvdGhlck5vZGUg
PT0gY2hpbGQxIHx8IG90aGVyTm9kZSA9PSBjaGlsZDIgfHwgb3RoZXJOb2RlID09IGNoaWxkMykK
ICAgICAgICAgICAgICAgICBicmVhazsKIAotICAgICAgICAgICAgTm9kZSYgb3RoZXJOb2RlID0g
bV9ncmFwaFtpbmRleF07Ci0gICAgICAgICAgICBpZiAoIW90aGVyTm9kZS5zaG91bGRHZW5lcmF0
ZSgpKQorICAgICAgICAgICAgaWYgKCFvdGhlck5vZGUtPnNob3VsZEdlbmVyYXRlKCkpCiAgICAg
ICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChub2Rl
Lm9wKCkgIT0gb3RoZXJOb2RlLm9wKCkpCisgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSAhPSBv
dGhlck5vZGUtPm9wKCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAK
LSAgICAgICAgICAgIGlmIChub2RlLmFyaXRoTm9kZUZsYWdzKCkgIT0gb3RoZXJOb2RlLmFyaXRo
Tm9kZUZsYWdzKCkpCisgICAgICAgICAgICBpZiAobm9kZS0+YXJpdGhOb2RlRmxhZ3MoKSAhPSBv
dGhlck5vZGUtPmFyaXRoTm9kZUZsYWdzKCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAg
ICAgICAgICAgICAKLSAgICAgICAgICAgIE5vZGVJbmRleCBvdGhlckNoaWxkID0gY2Fub25pY2Fs
aXplKG90aGVyTm9kZS5jaGlsZDEoKSk7Ci0gICAgICAgICAgICBpZiAob3RoZXJDaGlsZCA9PSBO
b05vZGUpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGluZGV4OworICAgICAgICAgICAgTm9kZSog
b3RoZXJDaGlsZCA9IGNhbm9uaWNhbGl6ZShvdGhlck5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAg
ICAgIGlmICghb3RoZXJDaGlsZCkKKyAgICAgICAgICAgICAgICByZXR1cm4gb3RoZXJOb2RlOwog
ICAgICAgICAgICAgaWYgKG90aGVyQ2hpbGQgIT0gY2hpbGQxKQogICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBvdGhlckNoaWxkID0gY2Fub25pY2Fs
aXplKG90aGVyTm9kZS5jaGlsZDIoKSk7Ci0gICAgICAgICAgICBpZiAob3RoZXJDaGlsZCA9PSBO
b05vZGUpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGluZGV4OworICAgICAgICAgICAgb3RoZXJD
aGlsZCA9IGNhbm9uaWNhbGl6ZShvdGhlck5vZGUtPmNoaWxkMigpKTsKKyAgICAgICAgICAgIGlm
ICghb3RoZXJDaGlsZCkKKyAgICAgICAgICAgICAgICByZXR1cm4gb3RoZXJOb2RlOwogICAgICAg
ICAgICAgaWYgKG90aGVyQ2hpbGQgIT0gY2hpbGQyKQogICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwogICAgICAgICAgICAgCi0gICAgICAgICAgICBvdGhlckNoaWxkID0gY2Fub25pY2FsaXplKG90
aGVyTm9kZS5jaGlsZDMoKSk7Ci0gICAgICAgICAgICBpZiAob3RoZXJDaGlsZCA9PSBOb05vZGUp
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGluZGV4OworICAgICAgICAgICAgb3RoZXJDaGlsZCA9
IGNhbm9uaWNhbGl6ZShvdGhlck5vZGUtPmNoaWxkMygpKTsKKyAgICAgICAgICAgIGlmICghb3Ro
ZXJDaGlsZCkKKyAgICAgICAgICAgICAgICByZXR1cm4gb3RoZXJOb2RlOwogICAgICAgICAgICAg
aWYgKG90aGVyQ2hpbGQgIT0gY2hpbGQzKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAg
ICAgICAgICAgCi0gICAgICAgICAgICByZXR1cm4gaW5kZXg7CisgICAgICAgICAgICByZXR1cm4g
b3RoZXJOb2RlOwogICAgICAgICB9Ci0gICAgICAgIHJldHVybiBOb05vZGU7CisgICAgICAgIHJl
dHVybiAwOwogICAgIH0KICAgICAKLSAgICBOb2RlSW5kZXggY29uc3RhbnRDU0UoTm9kZSYgbm9k
ZSkKKyAgICBOb2RlKiBjb25zdGFudENTRShOb2RlKiBub2RlKQogICAgIHsKICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gZW5kSW5kZXhGb3JQdXJlQ1NFKCk7IGktLTspIHsKLSAgICAgICAgICAg
IE5vZGVJbmRleCBpbmRleCA9IG1fY3VycmVudEJsb2NrLT5hdChpKTsKLSAgICAgICAgICAgIE5v
ZGUmIG90aGVyTm9kZSA9IG1fZ3JhcGhbaW5kZXhdOwotICAgICAgICAgICAgaWYgKG90aGVyTm9k
ZS5vcCgpICE9IEpTQ29uc3RhbnQpCisgICAgICAgICAgICBOb2RlKiBvdGhlck5vZGUgPSBtX2N1
cnJlbnRCbG9jay0+YXQoaSk7CisgICAgICAgICAgICBpZiAob3RoZXJOb2RlLT5vcCgpICE9IEpT
Q29uc3RhbnQpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAKLSAgICAg
ICAgICAgIGlmIChvdGhlck5vZGUuY29uc3RhbnROdW1iZXIoKSAhPSBub2RlLmNvbnN0YW50TnVt
YmVyKCkpCisgICAgICAgICAgICBpZiAoIW90aGVyTm9kZS0+c2hvdWxkR2VuZXJhdGUoKSkKICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgcmV0dXJu
IGluZGV4OworICAgICAgICAgICAgaWYgKG90aGVyTm9kZS0+Y29uc3RhbnROdW1iZXIoKSAhPSBu
b2RlLT5jb25zdGFudE51bWJlcigpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICAgICAgCisgICAgICAgICAgICByZXR1cm4gb3RoZXJOb2RlOwogICAgICAgICB9Ci0gICAgICAg
IHJldHVybiBOb05vZGU7CisgICAgICAgIHJldHVybiAwOwogICAgIH0KICAgICAKLSAgICBOb2Rl
SW5kZXggd2Vha0NvbnN0YW50Q1NFKE5vZGUmIG5vZGUpCisgICAgTm9kZSogd2Vha0NvbnN0YW50
Q1NFKE5vZGUqIG5vZGUpCiAgICAgewogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBlbmRJbmRl
eEZvclB1cmVDU0UoKTsgaS0tOykgewotICAgICAgICAgICAgTm9kZUluZGV4IGluZGV4ID0gbV9j
dXJyZW50QmxvY2stPmF0KGkpOwotICAgICAgICAgICAgTm9kZSYgb3RoZXJOb2RlID0gbV9ncmFw
aFtpbmRleF07Ci0gICAgICAgICAgICBpZiAob3RoZXJOb2RlLm9wKCkgIT0gV2Vha0pTQ29uc3Rh
bnQpCisgICAgICAgICAgICBOb2RlKiBvdGhlck5vZGUgPSBtX2N1cnJlbnRCbG9jay0+YXQoaSk7
CisgICAgICAgICAgICBpZiAob3RoZXJOb2RlLT5vcCgpICE9IFdlYWtKU0NvbnN0YW50KQorICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoIW90
aGVyTm9kZS0+c2hvdWxkR2VuZXJhdGUoKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAg
ICAgICAgICAgIAotICAgICAgICAgICAgaWYgKG90aGVyTm9kZS53ZWFrQ29uc3RhbnQoKSAhPSBu
b2RlLndlYWtDb25zdGFudCgpKQorICAgICAgICAgICAgaWYgKG90aGVyTm9kZS0+d2Vha0NvbnN0
YW50KCkgIT0gbm9kZS0+d2Vha0NvbnN0YW50KCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7
CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIHJldHVybiBpbmRleDsKKyAgICAgICAgICAgIHJl
dHVybiBvdGhlck5vZGU7CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIE5vTm9kZTsKKyAgICAg
ICAgcmV0dXJuIDA7CiAgICAgfQogICAgIAotICAgIE5vZGVJbmRleCBnZXRDYWxsZWVMb2FkRWxp
bWluYXRpb24oSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUpCisgICAgTm9kZSogZ2V0
Q2FsbGVlTG9hZEVsaW1pbmF0aW9uKElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lKQog
ICAgIHsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9pbmRleEluQmxvY2s7IGktLTspIHsK
LSAgICAgICAgICAgIE5vZGVJbmRleCBpbmRleCA9IG1fY3VycmVudEJsb2NrLT5hdChpKTsKLSAg
ICAgICAgICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW2luZGV4XTsKLSAgICAgICAgICAgIGlmICgh
bm9kZS5zaG91bGRHZW5lcmF0ZSgpKQorICAgICAgICAgICAgTm9kZSogbm9kZSA9IG1fY3VycmVu
dEJsb2NrLT5hdChpKTsKKyAgICAgICAgICAgIGlmICghbm9kZS0+c2hvdWxkR2VuZXJhdGUoKSkK
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGlmIChub2RlLmNvZGVPcmln
aW4uaW5saW5lQ2FsbEZyYW1lICE9IGlubGluZUNhbGxGcmFtZSkKKyAgICAgICAgICAgIGlmIChu
b2RlLT5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSAhPSBpbmxpbmVDYWxsRnJhbWUpCiAgICAg
ICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBzd2l0Y2ggKG5vZGUub3AoKSkgewor
ICAgICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CiAgICAgICAgICAgICBjYXNlIEdldENh
bGxlZToKLSAgICAgICAgICAgICAgICByZXR1cm4gaW5kZXg7CisgICAgICAgICAgICAgICAgcmV0
dXJuIG5vZGU7CiAgICAgICAgICAgICBjYXNlIFNldENhbGxlZToKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gbm9kZS5jaGlsZDEoKS5pbmRleCgpOworICAgICAgICAgICAgICAgIHJldHVybiBub2Rl
LT5jaGlsZDEoKS5ub2RlKCk7CiAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIHJldHVybiBOb05vZGU7
CisgICAgICAgIHJldHVybiAwOwogICAgIH0KICAgICAKLSAgICBOb2RlSW5kZXggZ2V0QXJyYXlM
ZW5ndGhFbGltaW5hdGlvbihOb2RlSW5kZXggYXJyYXkpCisgICAgTm9kZSogZ2V0QXJyYXlMZW5n
dGhFbGltaW5hdGlvbihOb2RlKiBhcnJheSkKICAgICB7CiAgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IG1faW5kZXhJbkJsb2NrOyBpLS07KSB7Ci0gICAgICAgICAgICBOb2RlSW5kZXggaW5kZXgg
PSBtX2N1cnJlbnRCbG9jay0+YXQoaSk7Ci0gICAgICAgICAgICBOb2RlJiBub2RlID0gbV9ncmFw
aFtpbmRleF07Ci0gICAgICAgICAgICBpZiAoIW5vZGUuc2hvdWxkR2VuZXJhdGUoKSkKKyAgICAg
ICAgICAgIE5vZGUqIG5vZGUgPSBtX2N1cnJlbnRCbG9jay0+YXQoaSk7CisgICAgICAgICAgICBp
ZiAoIW5vZGUtPnNob3VsZEdlbmVyYXRlKCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7Ci0g
ICAgICAgICAgICBzd2l0Y2ggKG5vZGUub3AoKSkgeworICAgICAgICAgICAgc3dpdGNoIChub2Rl
LT5vcCgpKSB7CiAgICAgICAgICAgICBjYXNlIEdldEFycmF5TGVuZ3RoOgotICAgICAgICAgICAg
ICAgIGlmIChub2RlLmNoaWxkMSgpID09IGFycmF5KQotICAgICAgICAgICAgICAgICAgICByZXR1
cm4gaW5kZXg7CisgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpID09IGFycmF5KQor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gbm9kZTsKICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGNhc2UgUHV0QnlWYWw6CiAgICAgICAgICAg
ICAgICAgaWYgKCFtX2dyYXBoLmJ5VmFsSXNQdXJlKG5vZGUpKQotICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gTm9Ob2RlOwotICAgICAgICAgICAgICAgIGlmIChub2RlLmFycmF5TW9kZSgpLm1h
eVN0b3JlVG9Ib2xlKCkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBOb05vZGU7CisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgICAgIGlmIChub2RlLT5hcnJh
eU1vZGUoKS5tYXlTdG9yZVRvSG9sZSgpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsK
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGRl
ZmF1bHQ6Ci0gICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGguY2xvYmJlcnNXb3JsZChpbmRleCkp
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBOb05vZGU7CisgICAgICAgICAgICAgICAgaWYg
KG1fZ3JhcGguY2xvYmJlcnNXb3JsZChub2RlKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IDA7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIE5vTm9kZTsKKyAg
ICAgICAgcmV0dXJuIDA7CiAgICAgfQogICAgIAotICAgIE5vZGVJbmRleCBnbG9iYWxWYXJMb2Fk
RWxpbWluYXRpb24oV3JpdGVCYXJyaWVyPFVua25vd24+KiByZWdpc3RlclBvaW50ZXIpCisgICAg
Tm9kZSogZ2xvYmFsVmFyTG9hZEVsaW1pbmF0aW9uKFdyaXRlQmFycmllcjxVbmtub3duPiogcmVn
aXN0ZXJQb2ludGVyKQogICAgIHsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9pbmRleElu
QmxvY2s7IGktLTspIHsKLSAgICAgICAgICAgIE5vZGVJbmRleCBpbmRleCA9IG1fY3VycmVudEJs
b2NrLT5hdChpKTsKLSAgICAgICAgICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW2luZGV4XTsKLSAg
ICAgICAgICAgIGlmICghbm9kZS5zaG91bGRHZW5lcmF0ZSgpKQorICAgICAgICAgICAgTm9kZSog
bm9kZSA9IG1fY3VycmVudEJsb2NrLT5hdChpKTsKKyAgICAgICAgICAgIGlmICghbm9kZS0+c2hv
dWxkR2VuZXJhdGUoKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIHN3
aXRjaCAobm9kZS5vcCgpKSB7CisgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKICAg
ICAgICAgICAgIGNhc2UgR2V0R2xvYmFsVmFyOgotICAgICAgICAgICAgICAgIGlmIChub2RlLnJl
Z2lzdGVyUG9pbnRlcigpID09IHJlZ2lzdGVyUG9pbnRlcikKLSAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGluZGV4OworICAgICAgICAgICAgICAgIGlmIChub2RlLT5yZWdpc3RlclBvaW50ZXIo
KSA9PSByZWdpc3RlclBvaW50ZXIpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBub2RlOwog
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBQdXRHbG9iYWxWYXI6Ci0g
ICAgICAgICAgICAgICAgaWYgKG5vZGUucmVnaXN0ZXJQb2ludGVyKCkgPT0gcmVnaXN0ZXJQb2lu
dGVyKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gbm9kZS5jaGlsZDEoKS5pbmRleCgpOwor
ICAgICAgICAgICAgICAgIGlmIChub2RlLT5yZWdpc3RlclBvaW50ZXIoKSA9PSByZWdpc3RlclBv
aW50ZXIpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBub2RlLT5jaGlsZDEoKS5ub2RlKCk7
CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKG1fZ3JhcGguY2xv
YmJlcnNXb3JsZChpbmRleCkpCisgICAgICAgICAgICBpZiAobV9ncmFwaC5jbG9iYmVyc1dvcmxk
KG5vZGUpKQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIHJldHVy
biBOb05vZGU7CisgICAgICAgIHJldHVybiAwOwogICAgIH0KICAgICAKLSAgICBOb2RlSW5kZXgg
c2NvcGVkVmFyTG9hZEVsaW1pbmF0aW9uKE5vZGVJbmRleCByZWdpc3RlcnMsIHVuc2lnbmVkIHZh
ck51bWJlcikKKyAgICBOb2RlKiBzY29wZWRWYXJMb2FkRWxpbWluYXRpb24oTm9kZSogcmVnaXN0
ZXJzLCB1bnNpZ25lZCB2YXJOdW1iZXIpCiAgICAgewogICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSBtX2luZGV4SW5CbG9jazsgaS0tOykgewotICAgICAgICAgICAgTm9kZUluZGV4IGluZGV4ID0g
bV9jdXJyZW50QmxvY2stPmF0KGkpOwotICAgICAgICAgICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhb
aW5kZXhdOwotICAgICAgICAgICAgaWYgKCFub2RlLnNob3VsZEdlbmVyYXRlKCkpCisgICAgICAg
ICAgICBOb2RlKiA9IG1fY3VycmVudEJsb2NrLT5hdChpKTsKKyAgICAgICAgICAgIGlmICghbm9k
ZS0+c2hvdWxkR2VuZXJhdGUoKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAg
ICAgIHN3aXRjaCAobm9kZS5vcCgpKSB7CisgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkp
IHsKICAgICAgICAgICAgIGNhc2UgR2V0U2NvcGVkVmFyOiB7Ci0gICAgICAgICAgICAgICAgaWYg
KG5vZGUuY2hpbGQxKCkgPT0gcmVnaXN0ZXJzICYmIG5vZGUudmFyTnVtYmVyKCkgPT0gdmFyTnVt
YmVyKQorICAgICAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKSA9PSByZWdpc3RlcnMgJiYg
bm9kZS52YXJOdW1iZXIoKSA9PSB2YXJOdW1iZXIpCiAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBpbmRleDsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0gCiAgICAgICAg
ICAgICBjYXNlIFB1dFNjb3BlZFZhcjogewotICAgICAgICAgICAgICAgIGlmIChub2RlLmNoaWxk
MigpID09IHJlZ2lzdGVycyAmJiBub2RlLnZhck51bWJlcigpID09IHZhck51bWJlcikKLSAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIG5vZGUuY2hpbGQzKCkuaW5kZXgoKTsKKyAgICAgICAgICAg
ICAgICBpZiAobm9kZS0+Y2hpbGQyKCkgPT0gcmVnaXN0ZXJzICYmIG5vZGUudmFyTnVtYmVyKCkg
PT0gdmFyTnVtYmVyKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gbm9kZS0+Y2hpbGQzKCku
bm9kZSgpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAg
ICAgY2FzZSBTZXRMb2NhbDogewotICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSog
dmFyaWFibGVBY2Nlc3NEYXRhID0gbm9kZS52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKKyAgICAgICAg
ICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9IG5vZGUtPnZh
cmlhYmxlQWNjZXNzRGF0YSgpOwogICAgICAgICAgICAgICAgIGlmICh2YXJpYWJsZUFjY2Vzc0Rh
dGEtPmlzQ2FwdHVyZWQoKQogICAgICAgICAgICAgICAgICAgICAmJiB2YXJpYWJsZUFjY2Vzc0Rh
dGEtPmxvY2FsKCkgPT0gc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPih2YXJOdW1iZXIpKQot
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gTm9Ob2RlOworICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gMDsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBpZiAobV9ncmFwaC5jbG9iYmVyc1dvcmxkKGluZGV4KSkKKyAgICAgICAgICAgIGlm
IChtX2dyYXBoLmNsb2JiZXJzV29ybGQobm9kZSkpCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIH0KLSAgICAgICAgcmV0dXJuIE5vTm9kZTsKKyAgICAgICAgcmV0dXJuIDA7CiAgICAg
fQogICAgIAogICAgIGJvb2wgZ2xvYmFsVmFyV2F0Y2hwb2ludEVsaW1pbmF0aW9uKFdyaXRlQmFy
cmllcjxVbmtub3duPiogcmVnaXN0ZXJQb2ludGVyKQogICAgIHsKICAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gbV9pbmRleEluQmxvY2s7IGktLTspIHsKLSAgICAgICAgICAgIE5vZGVJbmRleCBp
bmRleCA9IG1fY3VycmVudEJsb2NrLT5hdChpKTsKLSAgICAgICAgICAgIE5vZGUmIG5vZGUgPSBt
X2dyYXBoW2luZGV4XTsKLSAgICAgICAgICAgIGlmICghbm9kZS5zaG91bGRHZW5lcmF0ZSgpKQor
ICAgICAgICAgICAgTm9kZSogbm9kZSA9IG1fY3VycmVudEJsb2NrLT5hdChpKTsKKyAgICAgICAg
ICAgIGlmICghbm9kZS0+c2hvdWxkR2VuZXJhdGUoKSkKICAgICAgICAgICAgICAgICBjb250aW51
ZTsKLSAgICAgICAgICAgIHN3aXRjaCAobm9kZS5vcCgpKSB7CisgICAgICAgICAgICBzd2l0Y2gg
KG5vZGUtPm9wKCkpIHsKICAgICAgICAgICAgIGNhc2UgR2xvYmFsVmFyV2F0Y2hwb2ludDoKLSAg
ICAgICAgICAgICAgICBpZiAobm9kZS5yZWdpc3RlclBvaW50ZXIoKSA9PSByZWdpc3RlclBvaW50
ZXIpCisgICAgICAgICAgICAgICAgaWYgKG5vZGUtPnJlZ2lzdGVyUG9pbnRlcigpID09IHJlZ2lz
dGVyUG9pbnRlcikKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIFB1dEdsb2JhbFZhcjoKLSAgICAgICAgICAg
ICAgICBpZiAobm9kZS5yZWdpc3RlclBvaW50ZXIoKSA9PSByZWdpc3RlclBvaW50ZXIpCisgICAg
ICAgICAgICAgICAgaWYgKG5vZGUtPnJlZ2lzdGVyUG9pbnRlcigpID09IHJlZ2lzdGVyUG9pbnRl
cikKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIGlmIChtX2dyYXBoLmNsb2JiZXJzV29ybGQoaW5kZXgpKQor
ICAgICAgICAgICAgaWYgKG1fZ3JhcGguY2xvYmJlcnNXb3JsZChub2RlKSkKICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAg
IAotICAgIE5vZGVJbmRleCBnbG9iYWxWYXJTdG9yZUVsaW1pbmF0aW9uKFdyaXRlQmFycmllcjxV
bmtub3duPiogcmVnaXN0ZXJQb2ludGVyKQorICAgIE5vZGUqIGdsb2JhbFZhclN0b3JlRWxpbWlu
YXRpb24oV3JpdGVCYXJyaWVyPFVua25vd24+KiByZWdpc3RlclBvaW50ZXIpCiAgICAgewogICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2luZGV4SW5CbG9jazsgaS0tOykgewotICAgICAgICAg
ICAgTm9kZUluZGV4IGluZGV4ID0gbV9jdXJyZW50QmxvY2stPmF0KGkpOwotICAgICAgICAgICAg
Tm9kZSYgbm9kZSA9IG1fZ3JhcGhbaW5kZXhdOwotICAgICAgICAgICAgaWYgKCFub2RlLnNob3Vs
ZEdlbmVyYXRlKCkpCisgICAgICAgICAgICBOb2RlKiBub2RlID0gbV9jdXJyZW50QmxvY2stPmF0
KGkpOworICAgICAgICAgICAgaWYgKCFub2RlLT5zaG91bGRHZW5lcmF0ZSgpKQogICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgc3dpdGNoIChub2RlLm9wKCkpIHsKKyAgICAg
ICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewogICAgICAgICAgICAgY2FzZSBQdXRHbG9iYWxW
YXI6CiAgICAgICAgICAgICBjYXNlIFB1dEdsb2JhbFZhckNoZWNrOgotICAgICAgICAgICAgICAg
IGlmIChub2RlLnJlZ2lzdGVyUG9pbnRlcigpID09IHJlZ2lzdGVyUG9pbnRlcikKLSAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGluZGV4OworICAgICAgICAgICAgICAgIGlmIChub2RlLT5yZWdp
c3RlclBvaW50ZXIoKSA9PSByZWdpc3RlclBvaW50ZXIpCisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBub2RlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIAogICAg
ICAgICAgICAgY2FzZSBHZXRHbG9iYWxWYXI6Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGUucmVn
aXN0ZXJQb2ludGVyKCkgPT0gcmVnaXN0ZXJQb2ludGVyKQotICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gTm9Ob2RlOworICAgICAgICAgICAgICAgIGlmIChub2RlLT5yZWdpc3RlclBvaW50ZXIo
KSA9PSByZWdpc3RlclBvaW50ZXIpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgZGVmYXVs
dDoKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlm
IChtX2dyYXBoLmNsb2JiZXJzV29ybGQoaW5kZXgpIHx8IG5vZGUuY2FuRXhpdCgpKQotICAgICAg
ICAgICAgICAgIHJldHVybiBOb05vZGU7CisgICAgICAgICAgICBpZiAobV9ncmFwaC5jbG9iYmVy
c1dvcmxkKG5vZGUpIHx8IG5vZGUtPmNhbkV4aXQoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4g
MDsKICAgICAgICAgfQotICAgICAgICByZXR1cm4gTm9Ob2RlOworICAgICAgICByZXR1cm4gMDsK
ICAgICB9CiAgICAgCi0gICAgTm9kZUluZGV4IHNjb3BlZFZhclN0b3JlRWxpbWluYXRpb24oTm9k
ZUluZGV4IHNjb3BlLCBOb2RlSW5kZXggcmVnaXN0ZXJzLCB1bnNpZ25lZCB2YXJOdW1iZXIpCisg
ICAgTm9kZSogc2NvcGVkVmFyU3RvcmVFbGltaW5hdGlvbihOb2RlKiBzY29wZSwgTm9kZSogcmVn
aXN0ZXJzLCB1bnNpZ25lZCB2YXJOdW1iZXIpCiAgICAgewogICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSBtX2luZGV4SW5CbG9jazsgaS0tOykgewotICAgICAgICAgICAgTm9kZUluZGV4IGluZGV4
ID0gbV9jdXJyZW50QmxvY2stPmF0KGkpOwotICAgICAgICAgICAgTm9kZSYgbm9kZSA9IG1fZ3Jh
cGhbaW5kZXhdOwotICAgICAgICAgICAgaWYgKCFub2RlLnNob3VsZEdlbmVyYXRlKCkpCisgICAg
ICAgICAgICBOb2RlKiBub2RlID0gbV9jdXJyZW50QmxvY2stPmF0KGkpOworICAgICAgICAgICAg
aWYgKCFub2RlLT5zaG91bGRHZW5lcmF0ZSgpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwot
ICAgICAgICAgICAgc3dpdGNoIChub2RlLm9wKCkpIHsKKyAgICAgICAgICAgIHN3aXRjaCAobm9k
ZS0+b3AoKSkgewogICAgICAgICAgICAgY2FzZSBQdXRTY29wZWRWYXI6IHsKLSAgICAgICAgICAg
ICAgICBpZiAobm9kZS5jaGlsZDEoKSA9PSBzY29wZSAmJiBub2RlLmNoaWxkMigpID09IHJlZ2lz
dGVycyAmJiBub2RlLnZhck51bWJlcigpID09IHZhck51bWJlcikKLSAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGluZGV4OworICAgICAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKSA9PSBz
Y29wZSAmJiBub2RlLT5jaGlsZDIoKSA9PSByZWdpc3RlcnMgJiYgbm9kZS52YXJOdW1iZXIoKSA9
PSB2YXJOdW1iZXIpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBub2RlOwogICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIAogICAgICAgICAg
ICAgY2FzZSBHZXRTY29wZWRWYXI6IHsKICAgICAgICAgICAgICAgICAvLyBMZXQncyBiZSBjb25z
ZXJ2YXRpdmUuCi0gICAgICAgICAgICAgICAgaWYgKG5vZGUudmFyTnVtYmVyKCkgPT0gdmFyTnVt
YmVyKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gTm9Ob2RlOworICAgICAgICAgICAgICAg
IGlmIChub2RlLT52YXJOdW1iZXIoKSA9PSB2YXJOdW1iZXIpCisgICAgICAgICAgICAgICAgICAg
IHJldHVybiAwOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgIApAQCAtMzQ0LDQ2ICszNDAsNDUgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAg
ICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9IG5vZGUudmFyaWFibGVB
Y2Nlc3NEYXRhKCk7CiAgICAgICAgICAgICAgICAgaWYgKHZhcmlhYmxlQWNjZXNzRGF0YS0+aXND
YXB0dXJlZCgpCiAgICAgICAgICAgICAgICAgICAgICYmIHZhcmlhYmxlQWNjZXNzRGF0YS0+bG9j
YWwoKSA9PSBzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KHZhck51bWJlcikpCi0gICAgICAg
ICAgICAgICAgICAgIHJldHVybiBOb05vZGU7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAw
OwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBk
ZWZhdWx0OgogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQotICAgICAgICAg
ICAgaWYgKG1fZ3JhcGguY2xvYmJlcnNXb3JsZChpbmRleCkgfHwgbm9kZS5jYW5FeGl0KCkpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIE5vTm9kZTsKKyAgICAgICAgICAgIGlmIChtX2dyYXBoLmNs
b2JiZXJzV29ybGQobm9kZSkgfHwgbm9kZS0+Y2FuRXhpdCgpKQorICAgICAgICAgICAgICAgIHJl
dHVybiAwOwogICAgICAgICB9Ci0gICAgICAgIHJldHVybiBOb05vZGU7CisgICAgICAgIHJldHVy
biAwOwogICAgIH0KICAgICAKLSAgICBOb2RlSW5kZXggZ2V0QnlWYWxMb2FkRWxpbWluYXRpb24o
Tm9kZUluZGV4IGNoaWxkMSwgTm9kZUluZGV4IGNoaWxkMikKKyAgICBOb2RlKiBnZXRCeVZhbExv
YWRFbGltaW5hdGlvbihOb2RlKiBjaGlsZDEsIE5vZGUqIGNoaWxkMikKICAgICB7CiAgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IG1faW5kZXhJbkJsb2NrOyBpLS07KSB7Ci0gICAgICAgICAgICBO
b2RlSW5kZXggaW5kZXggPSBtX2N1cnJlbnRCbG9jay0+YXQoaSk7Ci0gICAgICAgICAgICBpZiAo
aW5kZXggPT0gY2hpbGQxIHx8IGluZGV4ID09IGNhbm9uaWNhbGl6ZShjaGlsZDIpKSAKKyAgICAg
ICAgICAgIE5vZGUqIG5vZGUgPSBtX2N1cnJlbnRCbG9jay0+YXQoaSk7CisgICAgICAgICAgICBp
ZiAobm9kZSA9PSBjaGlsZDEgfHwgbm9kZSA9PSBjYW5vbmljYWxpemUoY2hpbGQyKSkgCiAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW2lu
ZGV4XTsKLSAgICAgICAgICAgIGlmICghbm9kZS5zaG91bGRHZW5lcmF0ZSgpKQorICAgICAgICAg
ICAgaWYgKCFub2RlLT5zaG91bGRHZW5lcmF0ZSgpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwotICAgICAgICAgICAgc3dpdGNoIChub2RlLm9wKCkpIHsKKyAgICAgICAgICAgIHN3aXRjaCAo
bm9kZS0+b3AoKSkgewogICAgICAgICAgICAgY2FzZSBHZXRCeVZhbDoKICAgICAgICAgICAgICAg
ICBpZiAoIW1fZ3JhcGguYnlWYWxJc1B1cmUobm9kZSkpCiAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBOb05vZGU7Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGUuY2hpbGQxKCkgPT0gY2hpbGQx
ICYmIGNhbm9uaWNhbGl6ZShub2RlLmNoaWxkMigpKSA9PSBjYW5vbmljYWxpemUoY2hpbGQyKSkK
LSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGluZGV4OworICAgICAgICAgICAgICAgIGlmIChu
b2RlLT5jaGlsZDEoKSA9PSBjaGlsZDEgJiYgY2Fub25pY2FsaXplKG5vZGUtPmNoaWxkMigpKSA9
PSBjYW5vbmljYWxpemUoY2hpbGQyKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGU7
CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIFB1dEJ5VmFsOgogICAg
ICAgICAgICAgY2FzZSBQdXRCeVZhbEFsaWFzOiB7CiAgICAgICAgICAgICAgICAgaWYgKCFtX2dy
YXBoLmJ5VmFsSXNQdXJlKG5vZGUpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gTm9Ob2Rl
OworICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgICAgICBpZiAobV9n
cmFwaC52YXJBcmdDaGlsZChub2RlLCAwKSA9PSBjaGlsZDEgJiYgY2Fub25pY2FsaXplKG1fZ3Jh
cGgudmFyQXJnQ2hpbGQobm9kZSwgMSkpID09IGNhbm9uaWNhbGl6ZShjaGlsZDIpKQotICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAyKS5pbmRleCgp
OworICAgICAgICAgICAgICAgICAgICByZXR1cm4gbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAy
KS5ub2RlKCk7CiAgICAgICAgICAgICAgICAgLy8gV2UgbXVzdCBhc3N1bWUgdGhhdCB0aGUgUHV0
QnlWYWwgd2lsbCBjbG9iYmVyIHRoZSBsb2NhdGlvbiB3ZSdyZSBnZXR0aW5nIGZyb20uCiAgICAg
ICAgICAgICAgICAgLy8gRklYTUU6IFdlIGNhbiBkbyBiZXR0ZXI7IGlmIHdlIGtub3cgdGhhdCB0
aGUgUHV0QnlWYWwgaXMgYWNjZXNzaW5nIGFuIGFycmF5IG9mIGEKICAgICAgICAgICAgICAgICAv
LyBkaWZmZXJlbnQgdHlwZSB0aGFuIHRoZSBHZXRCeVZhbCwgdGhlbiB3ZSBrbm93IHRoYXQgdGhl
eSB3b24ndCBjbG9iYmVyIGVhY2ggb3RoZXIuCi0gICAgICAgICAgICAgICAgcmV0dXJuIE5vTm9k
ZTsKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IGNhc2UgUHV0U3RydWN0dXJlOgogICAgICAgICAgICAgY2FzZSBQdXRCeU9mZnNldDoKQEAgLTM5
Myw3MiArMzg4LDY5IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgLy8gdGhlIEdldEJ5VmFs
LgogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAg
ICAgICAgICBpZiAobV9ncmFwaC5jbG9iYmVyc1dvcmxkKGluZGV4KSkKLSAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIE5vTm9kZTsKKyAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC5jbG9iYmVy
c1dvcmxkKG5vZGUpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICByZXR1cm4gTm9O
b2RlOworICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKLSAgICBib29sIGNoZWNrRnVuY3Rpb25F
bGltaW5hdGlvbihKU0NlbGwqIGZ1bmN0aW9uLCBOb2RlSW5kZXggY2hpbGQxKQorICAgIGJvb2wg
Y2hlY2tGdW5jdGlvbkVsaW1pbmF0aW9uKEpTQ2VsbCogZnVuY3Rpb24sIE5vZGUqIGNoaWxkMSkK
ICAgICB7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGVuZEluZGV4Rm9yUHVyZUNTRSgpOyBp
LS07KSB7Ci0gICAgICAgICAgICBOb2RlSW5kZXggaW5kZXggPSBtX2N1cnJlbnRCbG9jay0+YXQo
aSk7Ci0gICAgICAgICAgICBpZiAoaW5kZXggPT0gY2hpbGQxKSAKKyAgICAgICAgICAgIE5vZGUq
IG5vZGUgPSBtX2N1cnJlbnRCbG9jay0+YXQoaSk7CisgICAgICAgICAgICBpZiAobm9kZSA9PSBj
aGlsZDEpIAogICAgICAgICAgICAgICAgIGJyZWFrOwogCi0gICAgICAgICAgICBOb2RlJiBub2Rl
ID0gbV9ncmFwaFtpbmRleF07Ci0gICAgICAgICAgICBpZiAobm9kZS5vcCgpID09IENoZWNrRnVu
Y3Rpb24gJiYgbm9kZS5jaGlsZDEoKSA9PSBjaGlsZDEgJiYgbm9kZS5mdW5jdGlvbigpID09IGZ1
bmN0aW9uKQorICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gQ2hlY2tGdW5jdGlvbiAmJiBu
b2RlLT5jaGlsZDEoKSA9PSBjaGlsZDEgJiYgbm9kZS0+ZnVuY3Rpb24oKSA9PSBmdW5jdGlvbikK
ICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgfQogICAgIAotICAgIGJvb2wgY2hlY2tFeGVjdXRhYmxlRWxpbWluYXRpb24o
RXhlY3V0YWJsZUJhc2UqIGV4ZWN1dGFibGUsIE5vZGVJbmRleCBjaGlsZDEpCisgICAgYm9vbCBj
aGVja0V4ZWN1dGFibGVFbGltaW5hdGlvbihFeGVjdXRhYmxlQmFzZSogZXhlY3V0YWJsZSwgTm9k
ZSogY2hpbGQxKQogICAgIHsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gZW5kSW5kZXhGb3JQ
dXJlQ1NFKCk7IGktLTspIHsKLSAgICAgICAgICAgIE5vZGVJbmRleCBpbmRleCA9IG1fY3VycmVu
dEJsb2NrLT5hdChpKTsKLSAgICAgICAgICAgIGlmIChpbmRleCA9PSBjaGlsZDEpCisgICAgICAg
ICAgICBOb2RlKiBub2RlID0gbV9jdXJyZW50QmxvY2stPmF0KGkpOworICAgICAgICAgICAgaWYg
KG5vZGUgPT0gY2hpbGQxKQogICAgICAgICAgICAgICAgIGJyZWFrOwogCi0gICAgICAgICAgICBO
b2RlJiBub2RlID0gbV9ncmFwaFtpbmRleF07Ci0gICAgICAgICAgICBpZiAobm9kZS5vcCgpID09
IENoZWNrRXhlY3V0YWJsZSAmJiBub2RlLmNoaWxkMSgpID09IGNoaWxkMSAmJiBub2RlLmV4ZWN1
dGFibGUoKSA9PSBleGVjdXRhYmxlKQorICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gQ2hl
Y2tFeGVjdXRhYmxlICYmIG5vZGUtPmNoaWxkMSgpID09IGNoaWxkMSAmJiBub2RlLT5leGVjdXRh
YmxlKCkgPT0gZXhlY3V0YWJsZSkKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAg
ICAgfQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgYm9vbCBjaGVja1N0cnVj
dHVyZUVsaW1pbmF0aW9uKGNvbnN0IFN0cnVjdHVyZVNldCYgc3RydWN0dXJlU2V0LCBOb2RlSW5k
ZXggY2hpbGQxKQorICAgIGJvb2wgY2hlY2tTdHJ1Y3R1cmVFbGltaW5hdGlvbihjb25zdCBTdHJ1
Y3R1cmVTZXQmIHN0cnVjdHVyZVNldCwgTm9kZSogY2hpbGQxKQogICAgIHsKICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gbV9pbmRleEluQmxvY2s7IGktLTspIHsKLSAgICAgICAgICAgIE5vZGVJ
bmRleCBpbmRleCA9IG1fY3VycmVudEJsb2NrLT5hdChpKTsKLSAgICAgICAgICAgIGlmIChpbmRl
eCA9PSBjaGlsZDEpIAorICAgICAgICAgICAgTm9kZSogbm9kZSA9IG1fY3VycmVudEJsb2NrLT5h
dChpKTsKKyAgICAgICAgICAgIGlmIChub2RlID09IGNoaWxkMSkgCiAgICAgICAgICAgICAgICAg
YnJlYWs7CiAKLSAgICAgICAgICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW2luZGV4XTsKLSAgICAg
ICAgICAgIGlmICghbm9kZS5zaG91bGRHZW5lcmF0ZSgpKQorICAgICAgICAgICAgaWYgKCFub2Rl
LT5zaG91bGRHZW5lcmF0ZSgpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAg
ICAgc3dpdGNoIChub2RlLm9wKCkpIHsKKyAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkg
ewogICAgICAgICAgICAgY2FzZSBDaGVja1N0cnVjdHVyZToKICAgICAgICAgICAgIGNhc2UgRm9y
d2FyZENoZWNrU3RydWN0dXJlOgotICAgICAgICAgICAgICAgIGlmIChub2RlLmNoaWxkMSgpID09
IGNoaWxkMQotICAgICAgICAgICAgICAgICAgICAmJiBzdHJ1Y3R1cmVTZXQuaXNTdXBlcnNldE9m
KG5vZGUuc3RydWN0dXJlU2V0KCkpKQorICAgICAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEo
KSA9PSBjaGlsZDEKKyAgICAgICAgICAgICAgICAgICAgJiYgc3RydWN0dXJlU2V0LmlzU3VwZXJz
ZXRPZihub2RlLT5zdHJ1Y3R1cmVTZXQoKSkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0
cnVlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIAogICAgICAgICAg
ICAgY2FzZSBTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludDoKICAgICAgICAgICAgIGNhc2Ug
Rm9yd2FyZFN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50OgotICAgICAgICAgICAgICAgIGlm
IChub2RlLmNoaWxkMSgpID09IGNoaWxkMQotICAgICAgICAgICAgICAgICAgICAmJiBzdHJ1Y3R1
cmVTZXQuY29udGFpbnMobm9kZS5zdHJ1Y3R1cmUoKSkpCisgICAgICAgICAgICAgICAgaWYgKG5v
ZGUtPmNoaWxkMSgpID09IGNoaWxkMQorICAgICAgICAgICAgICAgICAgICAmJiBzdHJ1Y3R1cmVT
ZXQuY29udGFpbnMobm9kZS0+c3RydWN0dXJlKCkpKQogICAgICAgICAgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAKICAgICAg
ICAgICAgIGNhc2UgUHV0U3RydWN0dXJlOgotICAgICAgICAgICAgICAgIGlmIChub2RlLmNoaWxk
MSgpID09IGNoaWxkMQotICAgICAgICAgICAgICAgICAgICAmJiBzdHJ1Y3R1cmVTZXQuY29udGFp
bnMobm9kZS5zdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSgpLm5ld1N0cnVjdHVyZSkpCisgICAgICAg
ICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpID09IGNoaWxkMQorICAgICAgICAgICAgICAgICAg
ICAmJiBzdHJ1Y3R1cmVTZXQuY29udGFpbnMobm9kZS0+c3RydWN0dXJlVHJhbnNpdGlvbkRhdGEo
KS5uZXdTdHJ1Y3R1cmUpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAg
ICAgICAgICAgICBpZiAoc3RydWN0dXJlU2V0LmNvbnRhaW5zKG5vZGUuc3RydWN0dXJlVHJhbnNp
dGlvbkRhdGEoKS5wcmV2aW91c1N0cnVjdHVyZSkpCisgICAgICAgICAgICAgICAgaWYgKHN0cnVj
dHVyZVNldC5jb250YWlucyhub2RlLT5zdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSgpLnByZXZpb3Vz
U3RydWN0dXJlKSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIApAQCAtNDgzLDcgKzQ3NSw3IEBAIHByaXZh
dGU6CiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgIAogICAg
ICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC5jbG9iYmVyc1dv
cmxkKGluZGV4KSkKKyAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC5jbG9iYmVyc1dvcmxkKG5v
ZGUpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICB9CkBAIC00OTEsMjYgKzQ4MywyNSBAQCBwcml2YXRlOgogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIAotICAgIGJvb2wgc3RydWN0dXJlVHJhbnNp
dGlvbldhdGNocG9pbnRFbGltaW5hdGlvbihTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgTm9kZUluZGV4
IGNoaWxkMSkKKyAgICBib29sIHN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50RWxpbWluYXRp
b24oU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIE5vZGUqIGNoaWxkMSkKICAgICB7CiAgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IG1faW5kZXhJbkJsb2NrOyBpLS07KSB7Ci0gICAgICAgICAgICBOb2Rl
SW5kZXggaW5kZXggPSBtX2N1cnJlbnRCbG9jay0+YXQoaSk7Ci0gICAgICAgICAgICBpZiAoaW5k
ZXggPT0gY2hpbGQxKSAKKyAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBtX2N1cnJlbnRCbG9jay0+
YXQoaSk7CisgICAgICAgICAgICBpZiAobm9kZSA9PSBjaGlsZDEpIAogICAgICAgICAgICAgICAg
IGJyZWFrOwogCi0gICAgICAgICAgICBOb2RlJiBub2RlID0gbV9ncmFwaFtpbmRleF07Ci0gICAg
ICAgICAgICBpZiAoIW5vZGUuc2hvdWxkR2VuZXJhdGUoKSkKKyAgICAgICAgICAgIGlmICghbm9k
ZS0+c2hvdWxkR2VuZXJhdGUoKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAg
ICAgIHN3aXRjaCAobm9kZS5vcCgpKSB7CisgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkp
IHsKICAgICAgICAgICAgIGNhc2UgQ2hlY2tTdHJ1Y3R1cmU6CiAgICAgICAgICAgICBjYXNlIEZv
cndhcmRDaGVja1N0cnVjdHVyZToKLSAgICAgICAgICAgICAgICBpZiAobm9kZS5jaGlsZDEoKSA9
PSBjaGlsZDEKLSAgICAgICAgICAgICAgICAgICAgJiYgbm9kZS5zdHJ1Y3R1cmVTZXQoKS5jb250
YWluc09ubHkoc3RydWN0dXJlKSkKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCkg
PT0gY2hpbGQxCisgICAgICAgICAgICAgICAgICAgICYmIG5vZGUtPnN0cnVjdHVyZVNldCgpLmNv
bnRhaW5zT25seShzdHJ1Y3R1cmUpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGNh
c2UgUHV0U3RydWN0dXJlOgotICAgICAgICAgICAgICAgIEFTU0VSVChub2RlLnN0cnVjdHVyZVRy
YW5zaXRpb25EYXRhKCkucHJldmlvdXNTdHJ1Y3R1cmUgIT0gc3RydWN0dXJlKTsKKyAgICAgICAg
ICAgICAgICBBU1NFUlQobm9kZS0+c3RydWN0dXJlVHJhbnNpdGlvbkRhdGEoKS5wcmV2aW91c1N0
cnVjdHVyZSAhPSBzdHJ1Y3R1cmUpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgICAgIAogICAgICAgICAgICAgY2FzZSBQdXRCeU9mZnNldDoKQEAgLTUyOSw3ICs1MjAsNyBA
QCBwcml2YXRlOgogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgY2FzZSBTdHJ1Y3R1cmVU
cmFuc2l0aW9uV2F0Y2hwb2ludDoKICAgICAgICAgICAgIGNhc2UgRm9yd2FyZFN0cnVjdHVyZVRy
YW5zaXRpb25XYXRjaHBvaW50OgotICAgICAgICAgICAgICAgIGlmIChub2RlLnN0cnVjdHVyZSgp
ID09IHN0cnVjdHVyZSAmJiBub2RlLmNoaWxkMSgpID09IGNoaWxkMSkKKyAgICAgICAgICAgICAg
ICBpZiAobm9kZS0+c3RydWN0dXJlKCkgPT0gc3RydWN0dXJlICYmIG5vZGUtPmNoaWxkMSgpID09
IGNoaWxkMSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgCkBAIC01NDAsNyArNTMxLDcgQEAgcHJpdmF0ZToK
ICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAgICAgCiAgICAgICAg
ICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLmNsb2JiZXJzV29ybGQo
aW5kZXgpKQorICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLmNsb2JiZXJzV29ybGQobm9kZSkp
CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgIH0KQEAgLTU0OCwyOCArNTM5LDI3IEBAIHByaXZhdGU6CiAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgCi0gICAgTm9kZUluZGV4IHB1dFN0cnVjdHVyZVN0
b3JlRWxpbWluYXRpb24oTm9kZUluZGV4IGNoaWxkMSkKKyAgICBOb2RlKiBwdXRTdHJ1Y3R1cmVT
dG9yZUVsaW1pbmF0aW9uKE5vZGUqIGNoaWxkMSkKICAgICB7CiAgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IG1faW5kZXhJbkJsb2NrOyBpLS07KSB7Ci0gICAgICAgICAgICBOb2RlSW5kZXggaW5k
ZXggPSBtX2N1cnJlbnRCbG9jay0+YXQoaSk7Ci0gICAgICAgICAgICBpZiAoaW5kZXggPT0gY2hp
bGQxKQorICAgICAgICAgICAgTm9kZSogbm9kZSA9IG1fY3VycmVudEJsb2NrLT5hdChpKTsKKyAg
ICAgICAgICAgIGlmIChub2RlID09IGNoaWxkMSkKICAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW2luZGV4XTsKLSAgICAgICAgICAgIGlmICgh
bm9kZS5zaG91bGRHZW5lcmF0ZSgpKQorICAgICAgICAgICAgaWYgKCFub2RlLT5zaG91bGRHZW5l
cmF0ZSgpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgc3dpdGNoIChu
b2RlLm9wKCkpIHsKKyAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewogICAgICAgICAg
ICAgY2FzZSBDaGVja1N0cnVjdHVyZToKICAgICAgICAgICAgIGNhc2UgRm9yd2FyZENoZWNrU3Ry
dWN0dXJlOgogICAgICAgICAgICAgICAgIHJldHVybiBOb05vZGU7CiAgICAgICAgICAgICAgICAg
CiAgICAgICAgICAgICBjYXNlIFBoYW50b21QdXRTdHJ1Y3R1cmU6Ci0gICAgICAgICAgICAgICAg
aWYgKG5vZGUuY2hpbGQxKCkgPT0gY2hpbGQxKSAvLyBObyBuZWVkIHRvIHJldHJhY2Ugb3VyIHN0
ZXBzLgorICAgICAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKSA9PSBjaGlsZDEpIC8vIE5v
IG5lZWQgdG8gcmV0cmFjZSBvdXIgc3RlcHMuCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBO
b05vZGU7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgCiAgICAgICAg
ICAgICBjYXNlIFB1dFN0cnVjdHVyZToKLSAgICAgICAgICAgICAgICBpZiAobm9kZS5jaGlsZDEo
KSA9PSBjaGlsZDEpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBpbmRleDsKKyAgICAgICAg
ICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCkgPT0gY2hpbGQxKQorICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gbm9kZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAK
ICAgICAgICAgICAgIC8vIFB1dFN0cnVjdHVyZSBuZWVkcyB0byBleGVjdXRlIGlmIHdlIEdDLiBI
ZW5jZSB0aGlzIG5lZWRzIHRvCkBAIC01OTEsNDQgKzU4MSw0MyBAQCBwcml2YXRlOgogICAgICAg
ICAgICAgY2FzZSBBbGxvY2F0ZVByb3BlcnR5U3RvcmFnZToKICAgICAgICAgICAgIGNhc2UgUmVh
bGxvY2F0ZVByb3BlcnR5U3RvcmFnZToKICAgICAgICAgICAgIGNhc2UgVHlwZU9mOgotICAgICAg
ICAgICAgICAgIHJldHVybiBOb05vZGU7CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAg
ICAgICAgICAgICAgCiAgICAgICAgICAgICBjYXNlIEdldEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2U6
Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGUuYXJyYXlNb2RlKCkuZ2V0SW5kZXhlZFByb3BlcnR5
U3RvcmFnZU1heVRyaWdnZXJHQygpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gTm9Ob2Rl
OworICAgICAgICAgICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS5nZXRJbmRleGVkUHJvcGVy
dHlTdG9yYWdlTWF5VHJpZ2dlckdDKCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwog
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgZGVm
YXVsdDoKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IGlmIChtX2dyYXBoLmNsb2JiZXJzV29ybGQoaW5kZXgpIHx8IG5vZGUuY2FuRXhpdCgpKQotICAg
ICAgICAgICAgICAgIHJldHVybiBOb05vZGU7CisgICAgICAgICAgICBpZiAobV9ncmFwaC5jbG9i
YmVyc1dvcmxkKG5vZGUpIHx8IG5vZGUtPmNhbkV4aXQoKSkKKyAgICAgICAgICAgICAgICByZXR1
cm4gMDsKICAgICAgICAgfQotICAgICAgICByZXR1cm4gTm9Ob2RlOworICAgICAgICByZXR1cm4g
MDsKICAgICB9CiAgICAgCi0gICAgTm9kZUluZGV4IGdldEJ5T2Zmc2V0TG9hZEVsaW1pbmF0aW9u
KHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIE5vZGVJbmRleCBjaGlsZDEpCisgICAgTm9kZSog
Z2V0QnlPZmZzZXRMb2FkRWxpbWluYXRpb24odW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgTm9k
ZSogY2hpbGQxKQogICAgIHsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9pbmRleEluQmxv
Y2s7IGktLTspIHsKLSAgICAgICAgICAgIE5vZGVJbmRleCBpbmRleCA9IG1fY3VycmVudEJsb2Nr
LT5hdChpKTsKLSAgICAgICAgICAgIGlmIChpbmRleCA9PSBjaGlsZDEpCisgICAgICAgICAgICBO
b2RlKiBub2RlID0gbV9jdXJyZW50QmxvY2stPmF0KGkpOworICAgICAgICAgICAgaWYgKG5vZGUg
PT0gY2hpbGQxKQogICAgICAgICAgICAgICAgIGJyZWFrOwogCi0gICAgICAgICAgICBOb2RlJiBu
b2RlID0gbV9ncmFwaFtpbmRleF07Ci0gICAgICAgICAgICBpZiAoIW5vZGUuc2hvdWxkR2VuZXJh
dGUoKSkKKyAgICAgICAgICAgIGlmICghbm9kZS0+c2hvdWxkR2VuZXJhdGUoKSkKICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIHN3aXRjaCAobm9kZS5vcCgpKSB7CisgICAg
ICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKICAgICAgICAgICAgIGNhc2UgR2V0QnlPZmZz
ZXQ6Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGUuY2hpbGQxKCkgPT0gY2hpbGQxCi0gICAgICAg
ICAgICAgICAgICAgICYmIG1fZ3JhcGgubV9zdG9yYWdlQWNjZXNzRGF0YVtub2RlLnN0b3JhZ2VB
Y2Nlc3NEYXRhSW5kZXgoKV0uaWRlbnRpZmllck51bWJlciA9PSBpZGVudGlmaWVyTnVtYmVyKQot
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW5kZXg7CisgICAgICAgICAgICAgICAgaWYgKG5v
ZGUtPmNoaWxkMSgpID09IGNoaWxkMQorICAgICAgICAgICAgICAgICAgICAmJiBtX2dyYXBoLm1f
c3RvcmFnZUFjY2Vzc0RhdGFbbm9kZS0+c3RvcmFnZUFjY2Vzc0RhdGFJbmRleCgpXS5pZGVudGlm
aWVyTnVtYmVyID09IGlkZW50aWZpZXJOdW1iZXIpCisgICAgICAgICAgICAgICAgICAgIHJldHVy
biBub2RlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIAogICAgICAg
ICAgICAgY2FzZSBQdXRCeU9mZnNldDoKLSAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC5tX3N0
b3JhZ2VBY2Nlc3NEYXRhW25vZGUuc3RvcmFnZUFjY2Vzc0RhdGFJbmRleCgpXS5pZGVudGlmaWVy
TnVtYmVyID09IGlkZW50aWZpZXJOdW1iZXIpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG5v
ZGUuY2hpbGQxKCkgPT0gY2hpbGQxKSAvLyBNdXN0IGJlIHNhbWUgcHJvcGVydHkgc3RvcmFnZS4K
LSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBub2RlLmNoaWxkMygpLmluZGV4KCk7Ci0g
ICAgICAgICAgICAgICAgICAgIHJldHVybiBOb05vZGU7CisgICAgICAgICAgICAgICAgaWYgKG1f
Z3JhcGgubV9zdG9yYWdlQWNjZXNzRGF0YVtub2RlLT5zdG9yYWdlQWNjZXNzRGF0YUluZGV4KCld
LmlkZW50aWZpZXJOdW1iZXIgPT0gaWRlbnRpZmllck51bWJlcikgeworICAgICAgICAgICAgICAg
ICAgICBpZiAobm9kZS0+Y2hpbGQxKCkgPT0gY2hpbGQxKSAvLyBNdXN0IGJlIHNhbWUgcHJvcGVy
dHkgc3RvcmFnZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBub2RlLT5jaGlsZDMo
KS5ub2RlKCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAKQEAgLTY0NCwzOCAr
NjMzLDM3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgIC8vIGNoYW5nZS4KICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IHJldHVybiBOb05vZGU7CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgICAg
ICAgCiAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLmNs
b2JiZXJzV29ybGQoaW5kZXgpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gTm9Ob2RlOwor
ICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLmNsb2JiZXJzV29ybGQobm9kZSkpCisgICAgICAg
ICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgfQogICAgICAgICB9Ci0gICAgICAgIHJldHVybiBOb05vZGU7CisgICAgICAgIHJldHVybiAw
OwogICAgIH0KICAgICAKLSAgICBOb2RlSW5kZXggcHV0QnlPZmZzZXRTdG9yZUVsaW1pbmF0aW9u
KHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIE5vZGVJbmRleCBjaGlsZDEpCisgICAgTm9kZSog
cHV0QnlPZmZzZXRTdG9yZUVsaW1pbmF0aW9uKHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIE5v
ZGUqIGNoaWxkMSkKICAgICB7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1faW5kZXhJbkJs
b2NrOyBpLS07KSB7Ci0gICAgICAgICAgICBOb2RlSW5kZXggaW5kZXggPSBtX2N1cnJlbnRCbG9j
ay0+YXQoaSk7Ci0gICAgICAgICAgICBpZiAoaW5kZXggPT0gY2hpbGQxKQorICAgICAgICAgICAg
Tm9kZSogbm9kZSA9IG1fY3VycmVudEJsb2NrLT5hdChpKTsKKyAgICAgICAgICAgIGlmIChub2Rl
ID09IGNoaWxkMSkKICAgICAgICAgICAgICAgICBicmVhazsKIAotICAgICAgICAgICAgTm9kZSYg
bm9kZSA9IG1fZ3JhcGhbaW5kZXhdOwotICAgICAgICAgICAgaWYgKCFub2RlLnNob3VsZEdlbmVy
YXRlKCkpCisgICAgICAgICAgICBpZiAoIW5vZGUtPnNob3VsZEdlbmVyYXRlKCkpCiAgICAgICAg
ICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBzd2l0Y2ggKG5vZGUub3AoKSkgeworICAg
ICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CiAgICAgICAgICAgICBjYXNlIEdldEJ5T2Zm
c2V0OgotICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLm1fc3RvcmFnZUFjY2Vzc0RhdGFbbm9k
ZS5zdG9yYWdlQWNjZXNzRGF0YUluZGV4KCldLmlkZW50aWZpZXJOdW1iZXIgPT0gaWRlbnRpZmll
ck51bWJlcikKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5vTm9kZTsKKyAgICAgICAgICAg
ICAgICBpZiAobV9ncmFwaC5tX3N0b3JhZ2VBY2Nlc3NEYXRhW25vZGUtPnN0b3JhZ2VBY2Nlc3NE
YXRhSW5kZXgoKV0uaWRlbnRpZmllck51bWJlciA9PSBpZGVudGlmaWVyTnVtYmVyKQorICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgICAgICAKICAgICAgICAgICAgIGNhc2UgUHV0QnlPZmZzZXQ6Ci0gICAgICAgICAgICAgICAg
aWYgKG1fZ3JhcGgubV9zdG9yYWdlQWNjZXNzRGF0YVtub2RlLnN0b3JhZ2VBY2Nlc3NEYXRhSW5k
ZXgoKV0uaWRlbnRpZmllck51bWJlciA9PSBpZGVudGlmaWVyTnVtYmVyKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIGlmIChub2RlLmNoaWxkMSgpID09IGNoaWxkMSkgLy8gTXVzdCBiZSBzYW1lIHBy
b3BlcnR5IHN0b3JhZ2UuCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW5kZXg7Ci0g
ICAgICAgICAgICAgICAgICAgIHJldHVybiBOb05vZGU7CisgICAgICAgICAgICAgICAgaWYgKG1f
Z3JhcGgubV9zdG9yYWdlQWNjZXNzRGF0YVtub2RlLT5zdG9yYWdlQWNjZXNzRGF0YUluZGV4KCld
LmlkZW50aWZpZXJOdW1iZXIgPT0gaWRlbnRpZmllck51bWJlcikgeworICAgICAgICAgICAgICAg
ICAgICBpZiAobm9kZS0+Y2hpbGQxKCkgPT0gY2hpbGQxKSAvLyBNdXN0IGJlIHNhbWUgcHJvcGVy
dHkgc3RvcmFnZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBub2RlOworICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgCkBAIC02ODgsNDUgKzY3Niw0NCBAQCBwcml2YXRl
OgogICAgICAgICAgICAgICAgICAgICAvLyBjaGFuZ2UuCiAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICByZXR1cm4gTm9Ob2RlOwor
ICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAg
ZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC5jbG9iYmVyc1dvcmxkKGluZGV4
KSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5vTm9kZTsKKyAgICAgICAgICAgICAgICBp
ZiAobV9ncmFwaC5jbG9iYmVyc1dvcmxkKG5vZGUpKQorICAgICAgICAgICAgICAgICAgICByZXR1
cm4gMDsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IGlmIChub2RlLmNhbkV4aXQoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gTm9Ob2RlOworICAg
ICAgICAgICAgaWYgKG5vZGUtPmNhbkV4aXQoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsK
ICAgICAgICAgfQotICAgICAgICByZXR1cm4gTm9Ob2RlOworICAgICAgICByZXR1cm4gMDsKICAg
ICB9CiAgICAgCi0gICAgTm9kZUluZGV4IGdldFByb3BlcnR5U3RvcmFnZUxvYWRFbGltaW5hdGlv
bihOb2RlSW5kZXggY2hpbGQxKQorICAgIE5vZGUqIGdldFByb3BlcnR5U3RvcmFnZUxvYWRFbGlt
aW5hdGlvbihOb2RlKiBjaGlsZDEpCiAgICAgewogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBt
X2luZGV4SW5CbG9jazsgaS0tOykgewotICAgICAgICAgICAgTm9kZUluZGV4IGluZGV4ID0gbV9j
dXJyZW50QmxvY2stPmF0KGkpOwotICAgICAgICAgICAgaWYgKGluZGV4ID09IGNoaWxkMSkgCisg
ICAgICAgICAgICBOb2RlKiBub2RlID0gbV9jdXJyZW50QmxvY2stPmF0KGkpOworICAgICAgICAg
ICAgaWYgKG5vZGUgPT0gY2hpbGQxKSAKICAgICAgICAgICAgICAgICBicmVhazsKIAotICAgICAg
ICAgICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhbaW5kZXhdOwotICAgICAgICAgICAgaWYgKCFub2Rl
LnNob3VsZEdlbmVyYXRlKCkpCisgICAgICAgICAgICBpZiAoIW5vZGUtPnNob3VsZEdlbmVyYXRl
KCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBzd2l0Y2ggKG5vZGUu
b3AoKSkgeworICAgICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CiAgICAgICAgICAgICBj
YXNlIEdldEJ1dHRlcmZseToKLSAgICAgICAgICAgICAgICBpZiAobm9kZS5jaGlsZDEoKSA9PSBj
aGlsZDEpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBpbmRleDsKKyAgICAgICAgICAgICAg
ICBpZiAobm9kZS0+Y2hpbGQxKCkgPT0gY2hpbGQxKQorICAgICAgICAgICAgICAgICAgICByZXR1
cm4gbm9kZTsKICAgICAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICAgICAgY2FzZSBBbGxv
Y2F0ZVByb3BlcnR5U3RvcmFnZToKICAgICAgICAgICAgIGNhc2UgUmVhbGxvY2F0ZVByb3BlcnR5
U3RvcmFnZToKICAgICAgICAgICAgICAgICAvLyBJZiB3ZSBjYW4gY2hlYXBseSBwcm92ZSB0aGlz
IGlzIGEgY2hhbmdlIHRvIG91ciBvYmplY3QncyBzdG9yYWdlLCB3ZQogICAgICAgICAgICAgICAg
IC8vIGNhbiBvcHRpbWl6ZSBhbmQgdXNlIGl0cyByZXN1bHQuCi0gICAgICAgICAgICAgICAgaWYg
KG5vZGUuY2hpbGQxKCkgPT0gY2hpbGQxKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW5k
ZXg7CisgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpID09IGNoaWxkMSkKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIG5vZGU7CiAgICAgICAgICAgICAgICAgLy8gT3RoZXJ3aXNl
LCB3ZSBjdXJyZW50bHkgY2FuJ3QgcHJvdmUgdGhhdCB0aGlzIGRvZXNuJ3QgY2hhbmdlIG91ciBv
YmplY3QncwogICAgICAgICAgICAgICAgIC8vIHN0b3JhZ2UsIHNvIHdlIGNvbnNlcnZhdGl2ZWx5
IGFzc3VtZSB0aGF0IGl0IG1heSBjaGFuZ2UgdGhlIHN0b3JhZ2UKICAgICAgICAgICAgICAgICAv
LyBwb2ludGVyIG9mIGFueSBvYmplY3QsIGluY2x1ZGluZyBvdXJzLgotICAgICAgICAgICAgICAg
IHJldHVybiBOb05vZGU7CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgICAg
ICAgCiAgICAgICAgICAgICBjYXNlIFB1dEJ5T2Zmc2V0OgogICAgICAgICAgICAgY2FzZSBQdXRT
dHJ1Y3R1cmU6CkBAIC03NDIsMzQgKzcyOSwzMyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAg
ICAgICAvLyBjaGFuZ2UuCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICByZXR1cm4gTm9Ob2RlOworICAgICAgICAgICAgICAgIHJl
dHVybiAwOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgY2FzZSBBcnJheWlmeToKICAg
ICAgICAgICAgIGNhc2UgQXJyYXlpZnlUb1N0cnVjdHVyZToKICAgICAgICAgICAgICAgICAvLyBX
ZSBjb3VsZCBjaGVjayBpZiB0aGUgYXJyYXlpZmljYXRpb24gY291bGQgYWZmZWN0IG91ciBidXR0
ZXJmbHkuCiAgICAgICAgICAgICAgICAgLy8gQnV0IHRoYXQgc2VlbXMgbGlrZSBpdCB3b3VsZCB0
YWtlIEVmZm9ydC4KLSAgICAgICAgICAgICAgICByZXR1cm4gTm9Ob2RlOworICAgICAgICAgICAg
ICAgIHJldHVybiAwOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgZGVmYXVsdDoKLSAg
ICAgICAgICAgICAgICBpZiAobV9ncmFwaC5jbG9iYmVyc1dvcmxkKGluZGV4KSkKLSAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIE5vTm9kZTsKKyAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC5j
bG9iYmVyc1dvcmxkKG5vZGUpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICByZXR1
cm4gTm9Ob2RlOworICAgICAgICByZXR1cm4gMDsKICAgICB9CiAgICAgCi0gICAgYm9vbCBjaGVj
a0FycmF5RWxpbWluYXRpb24oTm9kZUluZGV4IGNoaWxkMSwgQXJyYXlNb2RlIGFycmF5TW9kZSkK
KyAgICBib29sIGNoZWNrQXJyYXlFbGltaW5hdGlvbihOb2RlKiBjaGlsZDEsIEFycmF5TW9kZSBh
cnJheU1vZGUpCiAgICAgewogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2luZGV4SW5CbG9j
azsgaS0tOykgewotICAgICAgICAgICAgTm9kZUluZGV4IGluZGV4ID0gbV9jdXJyZW50QmxvY2st
PmF0KGkpOwotICAgICAgICAgICAgaWYgKGluZGV4ID09IGNoaWxkMSkgCisgICAgICAgICAgICBO
b2RlKiBub2RlID0gbV9jdXJyZW50QmxvY2stPmF0KGkpOworICAgICAgICAgICAgaWYgKG5vZGUg
PT0gY2hpbGQxKSAKICAgICAgICAgICAgICAgICBicmVhazsKIAotICAgICAgICAgICAgTm9kZSYg
bm9kZSA9IG1fZ3JhcGhbaW5kZXhdOwotICAgICAgICAgICAgaWYgKCFub2RlLnNob3VsZEdlbmVy
YXRlKCkpCisgICAgICAgICAgICBpZiAoIW5vZGUtPnNob3VsZEdlbmVyYXRlKCkpCiAgICAgICAg
ICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBzd2l0Y2ggKG5vZGUub3AoKSkgeworICAg
ICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CiAgICAgICAgICAgICBjYXNlIFB1dEJ5T2Zm
c2V0OgogICAgICAgICAgICAgY2FzZSBQdXRTdHJ1Y3R1cmU6CiAgICAgICAgICAgICAgICAgLy8g
Q2hhbmdpbmcgdGhlIHN0cnVjdHVyZSBvciBwdXR0aW5nIHRvIHRoZSBzdG9yYWdlIGNhbm5vdApA
QCAtNzc3LDcgKzc2Myw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICAgICAgCiAgICAgICAgICAgICBjYXNlIENoZWNrQXJyYXk6Ci0gICAgICAgICAgICAg
ICAgaWYgKG5vZGUuY2hpbGQxKCkgPT0gY2hpbGQxICYmIG5vZGUuYXJyYXlNb2RlKCkgPT0gYXJy
YXlNb2RlKQorICAgICAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKSA9PSBjaGlsZDEgJiYg
bm9kZS0+YXJyYXlNb2RlKCkgPT0gYXJyYXlNb2RlKQogICAgICAgICAgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAKQEAgLTc4
OCw3ICs3NzQsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICAgICAgICAgICAgICAKICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgaWYg
KG1fZ3JhcGguY2xvYmJlcnNXb3JsZChpbmRleCkpCisgICAgICAgICAgICAgICAgaWYgKG1fZ3Jh
cGguY2xvYmJlcnNXb3JsZChub2RlKSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQpAQCAtNzk2LDIwICs3ODIs
MTkgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIE5vZGVJ
bmRleCBnZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlTG9hZEVsaW1pbmF0aW9uKE5vZGVJbmRleCBj
aGlsZDEsIEFycmF5TW9kZSBhcnJheU1vZGUpCisgICAgTm9kZSogZ2V0SW5kZXhlZFByb3BlcnR5
U3RvcmFnZUxvYWRFbGltaW5hdGlvbihOb2RlKiBjaGlsZDEsIEFycmF5TW9kZSBhcnJheU1vZGUp
CiAgICAgewogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2luZGV4SW5CbG9jazsgaS0tOykg
ewotICAgICAgICAgICAgTm9kZUluZGV4IGluZGV4ID0gbV9jdXJyZW50QmxvY2stPmF0KGkpOwot
ICAgICAgICAgICAgaWYgKGluZGV4ID09IGNoaWxkMSkgCisgICAgICAgICAgICBOb2RlKiBub2Rl
ID0gbV9jdXJyZW50QmxvY2stPmF0KGkpOworICAgICAgICAgICAgaWYgKG5vZGUgPT0gY2hpbGQx
KSAKICAgICAgICAgICAgICAgICBicmVhazsKIAotICAgICAgICAgICAgTm9kZSYgbm9kZSA9IG1f
Z3JhcGhbaW5kZXhdOwotICAgICAgICAgICAgaWYgKCFub2RlLnNob3VsZEdlbmVyYXRlKCkpCisg
ICAgICAgICAgICBpZiAoIW5vZGUtPnNob3VsZEdlbmVyYXRlKCkpCiAgICAgICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgICAgICBzd2l0Y2ggKG5vZGUub3AoKSkgeworICAgICAgICAgICAg
c3dpdGNoIChub2RlLT5vcCgpKSB7CiAgICAgICAgICAgICBjYXNlIEdldEluZGV4ZWRQcm9wZXJ0
eVN0b3JhZ2U6IHsKLSAgICAgICAgICAgICAgICBpZiAobm9kZS5jaGlsZDEoKSA9PSBjaGlsZDEg
JiYgbm9kZS5hcnJheU1vZGUoKSA9PSBhcnJheU1vZGUpCi0gICAgICAgICAgICAgICAgICAgIHJl
dHVybiBpbmRleDsKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCkgPT0gY2hpbGQx
ICYmIG5vZGUtPmFycmF5TW9kZSgpID09IGFycmF5TW9kZSkKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIG5vZGU7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAKQEAg
LTgyMCw4MSArODA1LDc5IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICAgICAgCiAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIGlmICht
X2dyYXBoLmNsb2JiZXJzV29ybGQoaW5kZXgpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4g
Tm9Ob2RlOworICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLmNsb2JiZXJzV29ybGQobm9kZSkp
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIHJldHVybiBOb05vZGU7CisgICAgICAg
IHJldHVybiAwOwogICAgIH0KICAgICAKLSAgICBOb2RlSW5kZXggZ2V0TXlTY29wZUxvYWRFbGlt
aW5hdGlvbihJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSkKKyAgICBOb2RlKiBnZXRN
eVNjb3BlTG9hZEVsaW1pbmF0aW9uKElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lKQog
ICAgIHsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9pbmRleEluQmxvY2s7IGktLTspIHsK
LSAgICAgICAgICAgIE5vZGVJbmRleCBpbmRleCA9IG1fY3VycmVudEJsb2NrLT5hdChpKTsKLSAg
ICAgICAgICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW2luZGV4XTsKLSAgICAgICAgICAgIGlmICgh
bm9kZS5zaG91bGRHZW5lcmF0ZSgpKQorICAgICAgICAgICAgTm9kZSogbm9kZSA9IG1fY3VycmVu
dEJsb2NrLT5hdChpKTsKKyAgICAgICAgICAgIGlmICghbm9kZS0+c2hvdWxkR2VuZXJhdGUoKSkK
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGlmIChub2RlLmNvZGVPcmln
aW4uaW5saW5lQ2FsbEZyYW1lICE9IGlubGluZUNhbGxGcmFtZSkKKyAgICAgICAgICAgIGlmIChu
b2RlLT5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSAhPSBpbmxpbmVDYWxsRnJhbWUpCiAgICAg
ICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBzd2l0Y2ggKG5vZGUub3AoKSkgewor
ICAgICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CiAgICAgICAgICAgICBjYXNlIENyZWF0
ZUFjdGl2YXRpb246CiAgICAgICAgICAgICAgICAgLy8gVGhpcyBtYXkgY2F1c2UgdXMgdG8gcmV0
dXJuIGEgZGlmZmVyZW50IHNjb3BlLgotICAgICAgICAgICAgICAgIHJldHVybiBOb05vZGU7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgICBjYXNlIEdldE15U2NvcGU6Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIGluZGV4OworICAgICAgICAgICAgICAgIHJldHVybiBub2Rl
OwogICAgICAgICAgICAgY2FzZSBTZXRNeVNjb3BlOgotICAgICAgICAgICAgICAgIHJldHVybiBu
b2RlLmNoaWxkMSgpLmluZGV4KCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGUtPmNoaWxk
MSgpLm5vZGUoKTsKICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIE5vTm9kZTsKKyAgICAg
ICAgcmV0dXJuIDA7CiAgICAgfQogICAgIAotICAgIE5vZGVJbmRleCBnZXRMb2NhbExvYWRFbGlt
aW5hdGlvbihWaXJ0dWFsUmVnaXN0ZXIgbG9jYWwsIE5vZGVJbmRleCYgcmVsZXZhbnRMb2NhbE9w
LCBib29sIGNhcmVBYm91dENsb2JiZXJpbmcpCisgICAgTm9kZSogZ2V0TG9jYWxMb2FkRWxpbWlu
YXRpb24oVmlydHVhbFJlZ2lzdGVyIGxvY2FsLCBOb2RlKiYgcmVsZXZhbnRMb2NhbE9wLCBib29s
IGNhcmVBYm91dENsb2JiZXJpbmcpCiAgICAgewotICAgICAgICByZWxldmFudExvY2FsT3AgPSBO
b05vZGU7CisgICAgICAgIHJlbGV2YW50TG9jYWxPcCA9IDA7CiAgICAgICAgIAogICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSBtX2luZGV4SW5CbG9jazsgaS0tOykgewotICAgICAgICAgICAgTm9k
ZUluZGV4IGluZGV4ID0gbV9jdXJyZW50QmxvY2stPmF0KGkpOwotICAgICAgICAgICAgTm9kZSYg
bm9kZSA9IG1fZ3JhcGhbaW5kZXhdOwotICAgICAgICAgICAgaWYgKCFub2RlLnNob3VsZEdlbmVy
YXRlKCkpCisgICAgICAgICAgICBOb2RlKiBub2RlID0gbV9jdXJyZW50QmxvY2stPmF0KGkpOwor
ICAgICAgICAgICAgaWYgKCFub2RlLT5zaG91bGRHZW5lcmF0ZSgpKQogICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwotICAgICAgICAgICAgc3dpdGNoIChub2RlLm9wKCkpIHsKKyAgICAgICAgICAg
IHN3aXRjaCAobm9kZS0+b3AoKSkgewogICAgICAgICAgICAgY2FzZSBHZXRMb2NhbDoKLSAgICAg
ICAgICAgICAgICBpZiAobm9kZS5sb2NhbCgpID09IGxvY2FsKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIHJlbGV2YW50TG9jYWxPcCA9IGluZGV4OwotICAgICAgICAgICAgICAgICAgICByZXR1cm4g
aW5kZXg7CisgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmxvY2FsKCkgPT0gbG9jYWwpIHsKKyAg
ICAgICAgICAgICAgICAgICAgcmVsZXZhbnRMb2NhbE9wID0gbm9kZTsKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIG5vZGU7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgY2FzZSBHZXRMb2NhbFVubGlua2Vk
OgotICAgICAgICAgICAgICAgIGlmIChub2RlLnVubGlua2VkTG9jYWwoKSA9PSBsb2NhbCkgewot
ICAgICAgICAgICAgICAgICAgICByZWxldmFudExvY2FsT3AgPSBpbmRleDsKLSAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGluZGV4OworICAgICAgICAgICAgICAgIGlmIChub2RlLT51bmxpbmtl
ZExvY2FsKCkgPT0gbG9jYWwpIHsKKyAgICAgICAgICAgICAgICAgICAgcmVsZXZhbnRMb2NhbE9w
ID0gbm9kZTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGU7CiAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIAogICAgICAgICAg
ICAgY2FzZSBTZXRMb2NhbDoKLSAgICAgICAgICAgICAgICBpZiAobm9kZS5sb2NhbCgpID09IGxv
Y2FsKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJlbGV2YW50TG9jYWxPcCA9IGluZGV4OwotICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gbm9kZS5jaGlsZDEoKS5pbmRleCgpOworICAgICAgICAg
ICAgICAgIGlmIChub2RlLT5sb2NhbCgpID09IGxvY2FsKSB7CisgICAgICAgICAgICAgICAgICAg
IHJlbGV2YW50TG9jYWxPcCA9IG5vZGU7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBub2Rl
LT5jaGlsZDEoKS5ub2RlKCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgY2FzZSBQdXRTY29wZWRWYXI6Ci0g
ICAgICAgICAgICAgICAgaWYgKHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4obm9kZS52YXJO
dW1iZXIoKSkgPT0gbG9jYWwpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBOb05vZGU7Cisg
ICAgICAgICAgICAgICAgaWYgKHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4obm9kZS0+dmFy
TnVtYmVyKCkpID09IGxvY2FsKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGRlZmF1bHQ6
Ci0gICAgICAgICAgICAgICAgaWYgKGNhcmVBYm91dENsb2JiZXJpbmcgJiYgbV9ncmFwaC5jbG9i
YmVyc1dvcmxkKGluZGV4KSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5vTm9kZTsKKyAg
ICAgICAgICAgICAgICBpZiAoY2FyZUFib3V0Q2xvYmJlcmluZyAmJiBtX2dyYXBoLmNsb2JiZXJz
V29ybGQobm9kZSkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIHJldHVybiBOb05v
ZGU7CisgICAgICAgIHJldHVybiAwOwogICAgIH0KICAgICAKICAgICBzdHJ1Y3QgU2V0TG9jYWxT
dG9yZUVsaW1pbmF0aW9uUmVzdWx0IHsKQEAgLTkxMCw1MSArODkzLDUwIEBAIHByaXZhdGU6CiAg
ICAgICAgIGJvb2wgbWF5Q2xvYmJlcldvcmxkOwogICAgIH07CiAgICAgU2V0TG9jYWxTdG9yZUVs
aW1pbmF0aW9uUmVzdWx0IHNldExvY2FsU3RvcmVFbGltaW5hdGlvbigKLSAgICAgICAgVmlydHVh
bFJlZ2lzdGVyIGxvY2FsLCBOb2RlSW5kZXggZXhwZWN0ZWROb2RlSW5kZXgpCisgICAgICAgIFZp
cnR1YWxSZWdpc3RlciBsb2NhbCwgTm9kZSogZXhwZWN0ZWROb2RlSW5kZXgpCiAgICAgewogICAg
ICAgICBTZXRMb2NhbFN0b3JlRWxpbWluYXRpb25SZXN1bHQgcmVzdWx0OwogICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSBtX2luZGV4SW5CbG9jazsgaS0tOykgewotICAgICAgICAgICAgTm9kZUlu
ZGV4IGluZGV4ID0gbV9jdXJyZW50QmxvY2stPmF0KGkpOwotICAgICAgICAgICAgTm9kZSYgbm9k
ZSA9IG1fZ3JhcGhbaW5kZXhdOwotICAgICAgICAgICAgaWYgKCFub2RlLnNob3VsZEdlbmVyYXRl
KCkpCisgICAgICAgICAgICBOb2RlKiBub2RlID0gbV9jdXJyZW50QmxvY2stPmF0KGkpOworICAg
ICAgICAgICAgaWYgKCFub2RlLT5zaG91bGRHZW5lcmF0ZSgpKQogICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwotICAgICAgICAgICAgc3dpdGNoIChub2RlLm9wKCkpIHsKKyAgICAgICAgICAgIHN3
aXRjaCAobm9kZS0+b3AoKSkgewogICAgICAgICAgICAgY2FzZSBHZXRMb2NhbDoKICAgICAgICAg
ICAgIGNhc2UgRmx1c2g6Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGUubG9jYWwoKSA9PSBsb2Nh
bCkKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+bG9jYWwoKSA9PSBsb2NhbCkKICAgICAgICAg
ICAgICAgICAgICAgcmVzdWx0Lm1heUJlQWNjZXNzZWQgPSB0cnVlOwogICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgY2FzZSBHZXRMb2NhbFVubGlu
a2VkOgotICAgICAgICAgICAgICAgIGlmIChub2RlLnVubGlua2VkTG9jYWwoKSA9PSBsb2NhbCkK
KyAgICAgICAgICAgICAgICBpZiAobm9kZS0+dW5saW5rZWRMb2NhbCgpID09IGxvY2FsKQogICAg
ICAgICAgICAgICAgICAgICByZXN1bHQubWF5QmVBY2Nlc3NlZCA9IHRydWU7CiAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBjYXNlIFNldExvY2Fs
OiB7Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGUubG9jYWwoKSAhPSBsb2NhbCkKKyAgICAgICAg
ICAgICAgICBpZiAobm9kZS0+bG9jYWwoKSAhPSBsb2NhbCkKICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICAgICAgaWYgKGluZGV4ICE9IGV4cGVjdGVkTm9kZUluZGV4KQog
ICAgICAgICAgICAgICAgICAgICByZXN1bHQubWF5QmVBY2Nlc3NlZCA9IHRydWU7Ci0gICAgICAg
ICAgICAgICAgaWYgKG1fZ3JhcGhbaW5kZXhdLnJlZkNvdW50KCkgPiAxKQorICAgICAgICAgICAg
ICAgIGlmIChub2RlLT5yZWZDb3VudCgpID4gMSkKICAgICAgICAgICAgICAgICAgICAgcmVzdWx0
Lm1heUJlQWNjZXNzZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBjYXNlIEdldFNjb3Bl
ZFZhcjoKLSAgICAgICAgICAgICAgICBpZiAoc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihu
b2RlLnZhck51bWJlcigpKSA9PSBsb2NhbCkKKyAgICAgICAgICAgICAgICBpZiAoc3RhdGljX2Nh
c3Q8VmlydHVhbFJlZ2lzdGVyPihub2RlLT52YXJOdW1iZXIoKSkgPT0gbG9jYWwpCiAgICAgICAg
ICAgICAgICAgICAgIHJlc3VsdC5tYXlCZUFjY2Vzc2VkID0gdHJ1ZTsKICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGNhc2UgR2V0TXlTY29wZToK
ICAgICAgICAgICAgIGNhc2UgU2tpcFRvcFNjb3BlOgotICAgICAgICAgICAgICAgIGlmIChtX2dy
YXBoLnVuY2hlY2tlZEFjdGl2YXRpb25SZWdpc3RlckZvcihub2RlLmNvZGVPcmlnaW4pID09IGxv
Y2FsKQorICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLnVuY2hlY2tlZEFjdGl2YXRpb25SZWdp
c3RlckZvcihub2RlLT5jb2RlT3JpZ2luKSA9PSBsb2NhbCkKICAgICAgICAgICAgICAgICAgICAg
cmVzdWx0Lm1heUJlQWNjZXNzZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgICAgIAogICAgICAgICAgICAgY2FzZSBDaGVja0FyZ3VtZW50c05vdENyZWF0ZWQ6
CiAgICAgICAgICAgICBjYXNlIEdldE15QXJndW1lbnRzTGVuZ3RoOgogICAgICAgICAgICAgY2Fz
ZSBHZXRNeUFyZ3VtZW50c0xlbmd0aFNhZmU6Ci0gICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGgu
dW5jaGVja2VkQXJndW1lbnRzUmVnaXN0ZXJGb3Iobm9kZS5jb2RlT3JpZ2luKSA9PSBsb2NhbCkK
KyAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC51bmNoZWNrZWRBcmd1bWVudHNSZWdpc3RlckZv
cihub2RlLT5jb2RlT3JpZ2luKSA9PSBsb2NhbCkKICAgICAgICAgICAgICAgICAgICAgcmVzdWx0
Lm1heUJlQWNjZXNzZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgICAgIApAQCAtOTY1LDcgKzk0Nyw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgCiAg
ICAgICAgICAgICBjYXNlIEdldEJ5VmFsOgogICAgICAgICAgICAgICAgIC8vIElmIHRoaXMgaXMg
YWNjZXNzaW5nIGFyZ3VtZW50cyB0aGVuIGl0J3MgcG90ZW50aWFsbHkgYWNjZXNzaW5nIGxvY2Fs
cy4KLSAgICAgICAgICAgICAgICBpZiAobV9ncmFwaFtub2RlLmNoaWxkMSgpXS5zaG91bGRTcGVj
dWxhdGVBcmd1bWVudHMoKSkKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnNo
b3VsZFNwZWN1bGF0ZUFyZ3VtZW50cygpKQogICAgICAgICAgICAgICAgICAgICByZXN1bHQubWF5
QmVBY2Nlc3NlZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAg
ICAgCkBAIC05ODIsOCArOTY0LDggQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGRlZmF1bHQ6CiAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXN1bHQu
bWF5RXhpdCB8PSBub2RlLmNhbkV4aXQoKTsKLSAgICAgICAgICAgIHJlc3VsdC5tYXlDbG9iYmVy
V29ybGQgfD0gbV9ncmFwaC5jbG9iYmVyc1dvcmxkKGluZGV4KTsKKyAgICAgICAgICAgIHJlc3Vs
dC5tYXlFeGl0IHw9IG5vZGUtPmNhbkV4aXQoKTsKKyAgICAgICAgICAgIHJlc3VsdC5tYXlDbG9i
YmVyV29ybGQgfD0gbV9ncmFwaC5jbG9iYmVyc1dvcmxkKG5vZGUpOwogICAgICAgICB9CiAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIC8vIEJlIHNhZmUgaW4g
cmVsZWFzZSBtb2RlLgpAQCAtOTk4LDYyICs5ODAsNjEgQEAgcHJpdmF0ZToKICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgCiAgICAgICAgIC8vIENoZWNrIGlmIHRoZXJlIGlzIGFueSByZXBs
YWNlbWVudC4KLSAgICAgICAgTm9kZUluZGV4IHJlcGxhY2VtZW50ID0gbV9ncmFwaFtjaGlsZC5p
bmRleCgpXS5yZXBsYWNlbWVudDsKLSAgICAgICAgaWYgKHJlcGxhY2VtZW50ID09IE5vTm9kZSkK
KyAgICAgICAgTm9kZSogcmVwbGFjZW1lbnQgPSBjaGlsZC0+cmVwbGFjZW1lbnQ7CisgICAgICAg
IGlmICghcmVwbGFjZW1lbnQpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIAotICAgICAg
ICBjaGlsZC5zZXRJbmRleChyZXBsYWNlbWVudCk7CisgICAgICAgIGNoaWxkLnNldE5vZGUocmVw
bGFjZW1lbnQpOwogICAgICAgICAKICAgICAgICAgLy8gVGhlcmUgaXMgZGVmaW5pdGVseSBhIHJl
cGxhY2VtZW50LiBBc3NlcnQgdGhhdCB0aGUgcmVwbGFjZW1lbnQgZG9lcyBub3QKICAgICAgICAg
Ly8gaGF2ZSBhIHJlcGxhY2VtZW50LgotICAgICAgICBBU1NFUlQobV9ncmFwaFtjaGlsZC5pbmRl
eCgpXS5yZXBsYWNlbWVudCA9PSBOb05vZGUpOworICAgICAgICBBU1NFUlQoIWNoaWxkLT5yZXBs
YWNlbWVudCk7CiAgICAgICAgIAogICAgICAgICBpZiAoYWRkUmVmKQogICAgICAgICAgICAgbV9n
cmFwaC5yZWYoY2hpbGQpOwogICAgIH0KICAgICAKLSAgICB2b2lkIGVsaW1pbmF0ZUlycmVsZXZh
bnRQaGFudG9tQ2hpbGRyZW4oTm9kZSYgbm9kZSkKKyAgICB2b2lkIGVsaW1pbmF0ZUlycmVsZXZh
bnRQaGFudG9tQ2hpbGRyZW4oTm9kZSogbm9kZSkKICAgICB7Ci0gICAgICAgIEFTU0VSVChub2Rl
Lm9wKCkgPT0gUGhhbnRvbSk7CisgICAgICAgIEFTU0VSVChub2RlLT5vcCgpID09IFBoYW50b20p
OwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgQWRqYWNlbmN5TGlzdDo6U2l6ZTsg
KytpKSB7Ci0gICAgICAgICAgICBFZGdlIGVkZ2UgPSBub2RlLmNoaWxkcmVuLmNoaWxkKGkpOwor
ICAgICAgICAgICAgRWRnZSBlZGdlID0gbm9kZS0+Y2hpbGRyZW4uY2hpbGQoaSk7CiAgICAgICAg
ICAgICBpZiAoIWVkZ2UpCiAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBp
ZiAobV9ncmFwaFtlZGdlXS5mbGFncygpICYgTm9kZVJlbGV2YW50VG9PU1IpCisgICAgICAgICAg
ICBpZiAoZWRnZS0+ZmxhZ3MoKSAmIE5vZGVSZWxldmFudFRvT1NSKQogICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwogICAgICAgICAgICAgCiAjaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElP
Tl9WRVJCT1NFKQotICAgICAgICAgICAgZGF0YUxvZygiICAgRWxpbWluYXRpbmcgZWRnZSBAIiwg
bV9jb21waWxlSW5kZXgsICIgLT4gQCIsIGVkZ2UuaW5kZXgoKSk7CisgICAgICAgICAgICBkYXRh
TG9nKCIgICBFbGltaW5hdGluZyBlZGdlIEAiLCBtX2N1cnJlbnROb2RlLT5pbmRleCgpLCAiIC0+
IEAiLCBlZGdlLT5pbmRleCgpKTsKICNlbmRpZgogICAgICAgICAgICAgbV9ncmFwaC5kZXJlZihl
ZGdlKTsKLSAgICAgICAgICAgIG5vZGUuY2hpbGRyZW4ucmVtb3ZlRWRnZUZyb21CYWcoaS0tKTsK
KyAgICAgICAgICAgIG5vZGUtPmNoaWxkcmVuLnJlbW92ZUVkZ2VGcm9tQmFnKGktLSk7CiAgICAg
ICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOwogICAgICAgICB9CiAgICAgfQogICAgIAogICAgIGVu
dW0gUHJlZGljdGlvbkhhbmRsaW5nTW9kZSB7IFJlcXVpcmVTYW1lUHJlZGljdGlvbiwgQWxsb3dQ
cmVkaWN0aW9uTWlzbWF0Y2ggfTsKLSAgICBib29sIHNldFJlcGxhY2VtZW50KE5vZGVJbmRleCBy
ZXBsYWNlbWVudCwgUHJlZGljdGlvbkhhbmRsaW5nTW9kZSBwcmVkaWN0aW9uSGFuZGxpbmdNb2Rl
ID0gUmVxdWlyZVNhbWVQcmVkaWN0aW9uKQorICAgIGJvb2wgc2V0UmVwbGFjZW1lbnQoTm9kZSog
cmVwbGFjZW1lbnQsIFByZWRpY3Rpb25IYW5kbGluZ01vZGUgcHJlZGljdGlvbkhhbmRsaW5nTW9k
ZSA9IFJlcXVpcmVTYW1lUHJlZGljdGlvbikKICAgICB7Ci0gICAgICAgIGlmIChyZXBsYWNlbWVu
dCA9PSBOb05vZGUpCisgICAgICAgIGlmICghcmVwbGFjZW1lbnQpCiAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgICAgIAogICAgICAgICAvLyBCZSBzYWZlLiBEb24ndCB0cnkgdG8gcGVy
Zm9ybSByZXBsYWNlbWVudHMgaWYgdGhlIHByZWRpY3Rpb25zIGRvbid0CiAgICAgICAgIC8vIGFn
cmVlLgogICAgICAgICBpZiAocHJlZGljdGlvbkhhbmRsaW5nTW9kZSA9PSBSZXF1aXJlU2FtZVBy
ZWRpY3Rpb24KLSAgICAgICAgICAgICYmIG1fZ3JhcGhbbV9jb21waWxlSW5kZXhdLnByZWRpY3Rp
b24oKSAhPSBtX2dyYXBoW3JlcGxhY2VtZW50XS5wcmVkaWN0aW9uKCkpCisgICAgICAgICAgICAm
JiBtX2N1cnJlbnROb2RlLT5wcmVkaWN0aW9uKCkgIT0gcmVwbGFjZW1lbnQtPnByZWRpY3Rpb24o
KSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgCiAjaWYgREZHX0VOQUJMRShE
RUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQotICAgICAgICBkYXRhTG9nRigiICAgUmVwbGFjaW5n
IEAldSAtPiBAJXUiLCBtX2NvbXBpbGVJbmRleCwgcmVwbGFjZW1lbnQpOworICAgICAgICBkYXRh
TG9nRigiICAgUmVwbGFjaW5nIEAldSAtPiBAJXUiLCBtX2NvbXBpbGVOb2RlLT5pbmRleCgpLCBy
ZXBsYWNlbWVudC0+aW5kZXgoKSk7CiAjZW5kaWYKICAgICAgICAgCi0gICAgICAgIE5vZGUmIG5v
ZGUgPSBtX2dyYXBoW21fY29tcGlsZUluZGV4XTsKLSAgICAgICAgbm9kZS5zZXRPcEFuZERlZmF1
bHRGbGFncyhQaGFudG9tKTsKLSAgICAgICAgbm9kZS5zZXRSZWZDb3VudCgxKTsKLSAgICAgICAg
ZWxpbWluYXRlSXJyZWxldmFudFBoYW50b21DaGlsZHJlbihub2RlKTsKKyAgICAgICAgbV9jdXJy
ZW50Tm9kZS0+c2V0T3BBbmREZWZhdWx0RmxhZ3MoUGhhbnRvbSk7CisgICAgICAgIG1fY3VycmVu
dE5vZGUtPnNldFJlZkNvdW50KDEpOworICAgICAgICBlbGltaW5hdGVJcnJlbGV2YW50UGhhbnRv
bUNoaWxkcmVuKG1fY3VycmVudE5vZGUpOwogICAgICAgICAKICAgICAgICAgLy8gQXQgdGhpcyBw
b2ludCB3ZSB3aWxsIGVsaW1pbmF0ZSBhbGwgcmVmZXJlbmNlcyB0byB0aGlzIG5vZGUuCi0gICAg
ICAgIG1fZ3JhcGhbbV9jb21waWxlSW5kZXhdLnJlcGxhY2VtZW50ID0gcmVwbGFjZW1lbnQ7Cisg
ICAgICAgIG1fY3VycmVudE5vZGUtPnJlcGxhY2VtZW50ID0gcmVwbGFjZW1lbnQ7CiAgICAgICAg
IAogICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOwogICAgICAgICAKQEAgLTEwNjYsNTEgKzEwNDcs
NDkgQEAgcHJpdmF0ZToKICAgICAgICAgZGF0YUxvZ0YoIiAgIEVsaW1pbmF0aW5nIEAldSIsIG1f
Y29tcGlsZUluZGV4KTsKICNlbmRpZgogICAgICAgICAKLSAgICAgICAgTm9kZSYgbm9kZSA9IG1f
Z3JhcGhbbV9jb21waWxlSW5kZXhdOwotICAgICAgICBBU1NFUlQobm9kZS5yZWZDb3VudCgpID09
IDEpOwotICAgICAgICBBU1NFUlQobm9kZS5tdXN0R2VuZXJhdGUoKSk7Ci0gICAgICAgIG5vZGUu
c2V0T3BBbmREZWZhdWx0RmxhZ3MoUGhhbnRvbSk7Ci0gICAgICAgIGVsaW1pbmF0ZUlycmVsZXZh
bnRQaGFudG9tQ2hpbGRyZW4obm9kZSk7CisgICAgICAgIEFTU0VSVChtX2N1cnJlbnROb2RlLT5y
ZWZDb3VudCgpID09IDEpOworICAgICAgICBBU1NFUlQobV9jdXJyZW50Tm9kZS0+bXVzdEdlbmVy
YXRlKCkpOworICAgICAgICBtX2N1cnJlbnROb2RlLT5zZXRPcEFuZERlZmF1bHRGbGFncyhQaGFu
dG9tKTsKKyAgICAgICAgZWxpbWluYXRlSXJyZWxldmFudFBoYW50b21DaGlsZHJlbihtX2N1cnJl
bnROb2RlKTsKICAgICAgICAgCiAgICAgICAgIG1fY2hhbmdlZCA9IHRydWU7CiAgICAgfQogICAg
IAotICAgIHZvaWQgZWxpbWluYXRlKE5vZGVJbmRleCBub2RlSW5kZXgsIE5vZGVUeXBlIHBoYW50
b21UeXBlID0gUGhhbnRvbSkKKyAgICB2b2lkIGVsaW1pbmF0ZShOb2RlKiBub2RlLCBOb2RlVHlw
ZSBwaGFudG9tVHlwZSA9IFBoYW50b20pCiAgICAgewotICAgICAgICBpZiAobm9kZUluZGV4ID09
IE5vTm9kZSkKKyAgICAgICAgaWYgKCFub2RlKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICBOb2RlJiBub2RlID0gbV9ncmFwaFtub2RlSW5kZXhdOwotICAgICAgICBpZiAobm9kZS5yZWZD
b3VudCgpICE9IDEpCisgICAgICAgIGlmIChub2RlLT5yZWZDb3VudCgpICE9IDEpCiAgICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIEFTU0VSVChub2RlLm11c3RHZW5lcmF0ZSgpKTsKLSAgICAg
ICAgbm9kZS5zZXRPcEFuZERlZmF1bHRGbGFncyhwaGFudG9tVHlwZSk7CisgICAgICAgIEFTU0VS
VChub2RlLT5tdXN0R2VuZXJhdGUoKSk7CisgICAgICAgIG5vZGUtPnNldE9wQW5kRGVmYXVsdEZs
YWdzKHBoYW50b21UeXBlKTsKICAgICAgICAgaWYgKHBoYW50b21UeXBlID09IFBoYW50b20pCiAg
ICAgICAgICAgICBlbGltaW5hdGVJcnJlbGV2YW50UGhhbnRvbUNoaWxkcmVuKG5vZGUpOwogICAg
ICAgICAKICAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBw
ZXJmb3JtTm9kZUNTRShOb2RlJiBub2RlKQorICAgIHZvaWQgcGVyZm9ybU5vZGVDU0UoTm9kZSog
bm9kZSkKICAgICB7Ci0gICAgICAgIGJvb2wgc2hvdWxkR2VuZXJhdGUgPSBub2RlLnNob3VsZEdl
bmVyYXRlKCk7CisgICAgICAgIGJvb2wgc2hvdWxkR2VuZXJhdGUgPSBub2RlLT5zaG91bGRHZW5l
cmF0ZSgpOwogCi0gICAgICAgIGlmIChub2RlLmZsYWdzKCkgJiBOb2RlSGFzVmFyQXJncykgewot
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBjaGlsZElkeCA9IG5vZGUuZmlyc3RDaGlsZCgpOyBj
aGlsZElkeCA8IG5vZGUuZmlyc3RDaGlsZCgpICsgbm9kZS5udW1DaGlsZHJlbigpOyBjaGlsZElk
eCsrKQorICAgICAgICBpZiAobm9kZS0+ZmxhZ3MoKSAmIE5vZGVIYXNWYXJBcmdzKSB7CisgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGNoaWxkSWR4ID0gbm9kZS0+Zmlyc3RDaGlsZCgpOyBjaGls
ZElkeCA8IG5vZGUtPmZpcnN0Q2hpbGQoKSArIG5vZGUtPm51bUNoaWxkcmVuKCk7IGNoaWxkSWR4
KyspCiAgICAgICAgICAgICAgICAgcGVyZm9ybVN1YnN0aXR1dGlvbihtX2dyYXBoLm1fdmFyQXJn
Q2hpbGRyZW5bY2hpbGRJZHhdLCBzaG91bGRHZW5lcmF0ZSk7CiAgICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICBwZXJmb3JtU3Vic3RpdHV0aW9uKG5vZGUuY2hpbGRyZW4uY2hpbGQxKCksIHNo
b3VsZEdlbmVyYXRlKTsKLSAgICAgICAgICAgIHBlcmZvcm1TdWJzdGl0dXRpb24obm9kZS5jaGls
ZHJlbi5jaGlsZDIoKSwgc2hvdWxkR2VuZXJhdGUpOwotICAgICAgICAgICAgcGVyZm9ybVN1YnN0
aXR1dGlvbihub2RlLmNoaWxkcmVuLmNoaWxkMygpLCBzaG91bGRHZW5lcmF0ZSk7CisgICAgICAg
ICAgICBwZXJmb3JtU3Vic3RpdHV0aW9uKG5vZGUtPmNoaWxkcmVuLmNoaWxkMSgpLCBzaG91bGRH
ZW5lcmF0ZSk7CisgICAgICAgICAgICBwZXJmb3JtU3Vic3RpdHV0aW9uKG5vZGUtPmNoaWxkcmVu
LmNoaWxkMigpLCBzaG91bGRHZW5lcmF0ZSk7CisgICAgICAgICAgICBwZXJmb3JtU3Vic3RpdHV0
aW9uKG5vZGUtPmNoaWxkcmVuLmNoaWxkMygpLCBzaG91bGRHZW5lcmF0ZSk7CiAgICAgICAgIH0K
ICAgICAgICAgCi0gICAgICAgIGlmIChub2RlLm9wKCkgPT0gU2V0TG9jYWwpCi0gICAgICAgICAg
ICBtX2dyYXBoW25vZGUuY2hpbGQxKCldLm1lcmdlRmxhZ3MoTm9kZVJlbGV2YW50VG9PU1IpOwor
ICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBTZXRMb2NhbCkKKyAgICAgICAgICAgIG5vZGUtPmNo
aWxkMSgpLT5tZXJnZUZsYWdzKE5vZGVSZWxldmFudFRvT1NSKTsKICAgICAgICAgCiAgICAgICAg
IGlmICghc2hvdWxkR2VuZXJhdGUpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIAogI2lm
IERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKLSAgICAgICAgZGF0YUxvZ0Yo
IiAgICVzIEAldTogIiwgR3JhcGg6Om9wTmFtZShtX2dyYXBoW21fY29tcGlsZUluZGV4XS5vcCgp
KSwgbV9jb21waWxlSW5kZXgpOworICAgICAgICBkYXRhTG9nRigiICAgJXMgQCV1OiAiLCBHcmFw
aDo6b3BOYW1lKG5vZGUtPm9wKCkpLCBub2RlLT5pbmRleCgpKTsKICNlbmRpZgogICAgICAgICAK
ICAgICAgICAgLy8gTk9URTogdGhlcmUgYXJlIHNvbWUgbm9kZXMgdGhhdCB3ZSBkZWxpYmVyYXRl
bHkgZG9uJ3QgQ1NFIGV2ZW4gdGhvdWdoIHdlCkBAIC0xMTIyLDEwICsxMTAxLDEwIEBAIHByaXZh
dGU6CiAgICAgICAgIC8vIFRvUHJpbWl0aXZlLCBidXQgd2UgY291bGQgY2hhbmdlIHRoYXQgd2l0
aCBzb21lIHNwZWN1bGF0aW9ucyBpZiB3ZSByZWFsbHkKICAgICAgICAgLy8gbmVlZGVkIHRvLgog
ICAgICAgICAKLSAgICAgICAgc3dpdGNoIChub2RlLm9wKCkpIHsKKyAgICAgICAgc3dpdGNoIChu
b2RlLT5vcCgpKSB7CiAgICAgICAgIAogICAgICAgICBjYXNlIElkZW50aXR5OgotICAgICAgICAg
ICAgc2V0UmVwbGFjZW1lbnQobm9kZS5jaGlsZDEoKS5pbmRleCgpKTsKKyAgICAgICAgICAgIHNl
dFJlcGxhY2VtZW50KG5vZGUtPmNoaWxkMSgpLm5vZGUoKSk7CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgIAogICAgICAgICAvLyBIYW5kbGUgdGhlIHB1cmUgbm9kZXMuIFRoZXNlIG5v
ZGVzIG5ldmVyIGhhdmUgYW55IHNpZGUtZWZmZWN0cy4KQEAgLTExNjUsNDEgKzExNDQsNDEgQEAg
cHJpdmF0ZToKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAgICAgIGNhc2Ug
R2V0Q2FsbGVlOgotICAgICAgICAgICAgc2V0UmVwbGFjZW1lbnQoZ2V0Q2FsbGVlTG9hZEVsaW1p
bmF0aW9uKG5vZGUuY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpKTsKKyAgICAgICAgICAgIHNl
dFJlcGxhY2VtZW50KGdldENhbGxlZUxvYWRFbGltaW5hdGlvbihub2RlLT5jb2RlT3JpZ2luLmlu
bGluZUNhbGxGcmFtZSkpOwogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSBHZXRM
b2NhbDogewotICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0Rh
dGEgPSBub2RlLnZhcmlhYmxlQWNjZXNzRGF0YSgpOworICAgICAgICAgICAgVmFyaWFibGVBY2Nl
c3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsK
ICAgICAgICAgICAgIGlmICghdmFyaWFibGVBY2Nlc3NEYXRhLT5pc0NhcHR1cmVkKCkpCiAgICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBOb2RlSW5kZXggcmVsZXZhbnRMb2NhbE9w
OwotICAgICAgICAgICAgTm9kZUluZGV4IHBvc3NpYmxlUmVwbGFjZW1lbnQgPSBnZXRMb2NhbExv
YWRFbGltaW5hdGlvbih2YXJpYWJsZUFjY2Vzc0RhdGEtPmxvY2FsKCksIHJlbGV2YW50TG9jYWxP
cCwgdmFyaWFibGVBY2Nlc3NEYXRhLT5pc0NhcHR1cmVkKCkpOwotICAgICAgICAgICAgaWYgKHJl
bGV2YW50TG9jYWxPcCA9PSBOb05vZGUpCisgICAgICAgICAgICBOb2RlKiByZWxldmFudExvY2Fs
T3A7CisgICAgICAgICAgICBOb2RlKiBwb3NzaWJsZVJlcGxhY2VtZW50ID0gZ2V0TG9jYWxMb2Fk
RWxpbWluYXRpb24odmFyaWFibGVBY2Nlc3NEYXRhLT5sb2NhbCgpLCByZWxldmFudExvY2FsT3As
IHZhcmlhYmxlQWNjZXNzRGF0YS0+aXNDYXB0dXJlZCgpKTsKKyAgICAgICAgICAgIGlmICghcmVs
ZXZhbnRMb2NhbE9wKQogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgaWYgKG1f
Z3JhcGhbcmVsZXZhbnRMb2NhbE9wXS5vcCgpICE9IEdldExvY2FsVW5saW5rZWQKLSAgICAgICAg
ICAgICAgICAmJiBtX2dyYXBoW3JlbGV2YW50TG9jYWxPcF0udmFyaWFibGVBY2Nlc3NEYXRhKCkg
IT0gdmFyaWFibGVBY2Nlc3NEYXRhKQorICAgICAgICAgICAgaWYgKHJlbGV2YW50TG9jYWxPcC0+
b3AoKSAhPSBHZXRMb2NhbFVubGlua2VkCisgICAgICAgICAgICAgICAgJiYgcmVsZXZhbnRMb2Nh
bE9wLT52YXJpYWJsZUFjY2Vzc0RhdGEoKSAhPSB2YXJpYWJsZUFjY2Vzc0RhdGEpCiAgICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBOb2RlSW5kZXggcGhpSW5kZXggPSBub2RlLmNo
aWxkMSgpLmluZGV4KCk7CisgICAgICAgICAgICBOb2RlKiBwaGkgPSBub2RlLT5jaGlsZDEoKS5u
b2RlKCk7CiAgICAgICAgICAgICBpZiAoIXNldFJlcGxhY2VtZW50KHBvc3NpYmxlUmVwbGFjZW1l
bnQpKQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgLy8gSWYgdGhlIEdldExv
Y2FsIHdlIHJlcGxhY2VkIHVzZWQgdG8gcmVmZXIgdG8gYSBTZXRMb2NhbCwgdGhlbiBpdCBub3cK
ICAgICAgICAgICAgIC8vIHNob3VsZCByZWZlciB0byB0aGUgY2hpbGQgb2YgdGhlIFNldExvY2Fs
IGluc3RlYWQuCi0gICAgICAgICAgICBpZiAobV9ncmFwaFtwaGlJbmRleF0ub3AoKSA9PSBTZXRM
b2NhbCkgewotICAgICAgICAgICAgICAgIEFTU0VSVChub2RlLmNoaWxkMSgpLmluZGV4KCkgPT0g
cGhpSW5kZXgpOwotICAgICAgICAgICAgICAgIG1fZ3JhcGguY2hhbmdlRWRnZShub2RlLmNoaWxk
cmVuLmNoaWxkMSgpLCBtX2dyYXBoW3BoaUluZGV4XS5jaGlsZDEoKSk7CisgICAgICAgICAgICBp
ZiAocGhpLT5vcCgpID09IFNldExvY2FsKSB7CisgICAgICAgICAgICAgICAgQVNTRVJUKG5vZGUt
PmNoaWxkMSgpID09IHBoaSk7CisgICAgICAgICAgICAgICAgbV9ncmFwaC5jaGFuZ2VFZGdlKG5v
ZGUtPmNoaWxkcmVuLmNoaWxkMSgpLCBwaGktPmNoaWxkMSgpKTsKICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIE5vZGVJbmRleCBvbGRUYWlsSW5kZXggPSBtX2N1cnJlbnRCbG9jay0+dmFyaWFi
bGVzQXRUYWlsLm9wZXJhbmQoCisgICAgICAgICAgICBOb2RlKiBvbGRUYWlsID0gbV9jdXJyZW50
QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKAogICAgICAgICAgICAgICAgIHZhcmlhYmxl
QWNjZXNzRGF0YS0+bG9jYWwoKSk7Ci0gICAgICAgICAgICBpZiAob2xkVGFpbEluZGV4ID09IG1f
Y29tcGlsZUluZGV4KSB7CisgICAgICAgICAgICBpZiAob2xkVGFpbCA9PSBub2RlKSB7CiAgICAg
ICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKHZhcmlh
YmxlQWNjZXNzRGF0YS0+bG9jYWwoKSkgPQogICAgICAgICAgICAgICAgICAgICByZWxldmFudExv
Y2FsT3A7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgLy8gTWFpbnRhaW4gZ3Jh
cGggaW50ZWdyaXR5OiBzaW5jZSB3ZSdyZSByZXBsYWNpbmcgYSBHZXRMb2NhbCB3aXRoIGEgR2V0
TG9jYWxVbmxpbmtlZCwKICAgICAgICAgICAgICAgICAvLyBtYWtlIHN1cmUgdGhhdCB0aGUgR2V0
TG9jYWxVbmxpbmtlZCBpcyBub3cgbGlua2VkLgotICAgICAgICAgICAgICAgIGlmIChtX2dyYXBo
W3JlbGV2YW50TG9jYWxPcF0ub3AoKSA9PSBHZXRMb2NhbFVubGlua2VkKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIG1fZ3JhcGhbcmVsZXZhbnRMb2NhbE9wXS5zZXRPcChHZXRMb2NhbCk7Ci0gICAg
ICAgICAgICAgICAgICAgIG1fZ3JhcGhbcmVsZXZhbnRMb2NhbE9wXS5jaGlsZHJlbi5jaGlsZDEo
KSA9IEVkZ2UocGhpSW5kZXgpOwotICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLnJlZihwaGlJ
bmRleCk7CisgICAgICAgICAgICAgICAgaWYgKHJlbGV2YW50TG9jYWxPcC0+b3AoKSA9PSBHZXRM
b2NhbFVubGlua2VkKSB7CisgICAgICAgICAgICAgICAgICAgIHJlbGV2YW50TG9jYWxPcC0+c2V0
T3AoR2V0TG9jYWwpOworICAgICAgICAgICAgICAgICAgICByZWxldmFudExvY2FsT3AtPmNoaWxk
cmVuLmNoaWxkMSgpID0gRWRnZShwaGkpOworICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLnJl
ZihwaGkpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIG1f
Y2hhbmdlZCA9IHRydWU7CkBAIC0xMjA3LDE5ICsxMTg2LDE4IEBAIHByaXZhdGU6CiAgICAgICAg
IH0KICAgICAgICAgICAgIAogICAgICAgICBjYXNlIEdldExvY2FsVW5saW5rZWQ6IHsKLSAgICAg
ICAgICAgIE5vZGVJbmRleCByZWxldmFudExvY2FsT3BJZ25vcmVkOworICAgICAgICAgICAgTm9k
ZSogcmVsZXZhbnRMb2NhbE9wSWdub3JlZDsKICAgICAgICAgICAgIHNldFJlcGxhY2VtZW50KGdl
dExvY2FsTG9hZEVsaW1pbmF0aW9uKG5vZGUudW5saW5rZWRMb2NhbCgpLCByZWxldmFudExvY2Fs
T3BJZ25vcmVkLCB0cnVlKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAg
ICAgICAgCiAgICAgICAgIGNhc2UgRmx1c2g6IHsKLSAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNz
RGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhID0gbm9kZS52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKKyAg
ICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhID0gbm9kZS0+
dmFyaWFibGVBY2Nlc3NEYXRhKCk7CiAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgbG9jYWwg
PSB2YXJpYWJsZUFjY2Vzc0RhdGEtPmxvY2FsKCk7Ci0gICAgICAgICAgICBOb2RlSW5kZXggcmVw
bGFjZW1lbnRJbmRleCA9IG5vZGUuY2hpbGQxKCkuaW5kZXgoKTsKLSAgICAgICAgICAgIE5vZGUm
IHJlcGxhY2VtZW50ID0gbV9ncmFwaFtyZXBsYWNlbWVudEluZGV4XTsKLSAgICAgICAgICAgIGlm
IChyZXBsYWNlbWVudC5vcCgpICE9IFNldExvY2FsKQorICAgICAgICAgICAgTm9kZSogcmVwbGFj
ZW1lbnQgPSBub2RlLT5jaGlsZDEoKS5ub2RlKCk7CisgICAgICAgICAgICBpZiAocmVwbGFjZW1l
bnQtPm9wKCkgIT0gU2V0TG9jYWwpCiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICBBU1NFUlQocmVwbGFjZW1lbnQudmFyaWFibGVBY2Nlc3NEYXRhKCkgPT0gdmFyaWFibGVBY2Nl
c3NEYXRhKTsKKyAgICAgICAgICAgIEFTU0VSVChyZXBsYWNlbWVudC0+dmFyaWFibGVBY2Nlc3NE
YXRhKCkgPT0gdmFyaWFibGVBY2Nlc3NEYXRhKTsKICAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBz
aG91bGQgYmUgYWJsZSB0byByZW1vdmUgU2V0TG9jYWxzIHRoYXQgY2FuIGV4aXQ7IHdlIGp1c3Qg
bmVlZAogICAgICAgICAgICAgLy8gdG8gcmVwbGFjZSB0aGVtIHdpdGggYXBwcm9wcmlhdGUgdHlw
ZSBjaGVja3MuCiAgICAgICAgICAgICBpZiAobV9ncmFwaC5tX2ZpeHBvaW50U3RhdGUgPT0gRml4
cG9pbnROb3RDb252ZXJnZWQpIHsKQEAgLTEyMzksMjYgKzEyMTcsMjYgQEAgcHJpdmF0ZToKICAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgaWYgKHJlcGxhY2VtZW50LmNhbkV4aXQoKSkK
KyAgICAgICAgICAgICAgICBpZiAocmVwbGFjZW1lbnQtPmNhbkV4aXQoKSkKICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBTZXRMb2NhbFN0b3Jl
RWxpbWluYXRpb25SZXN1bHQgcmVzdWx0ID0KLSAgICAgICAgICAgICAgICBzZXRMb2NhbFN0b3Jl
RWxpbWluYXRpb24obG9jYWwsIHJlcGxhY2VtZW50SW5kZXgpOworICAgICAgICAgICAgICAgIHNl
dExvY2FsU3RvcmVFbGltaW5hdGlvbihsb2NhbCwgcmVwbGFjZW1lbnQpOwogICAgICAgICAgICAg
aWYgKHJlc3VsdC5tYXlCZUFjY2Vzc2VkIHx8IHJlc3VsdC5tYXlDbG9iYmVyV29ybGQpCiAgICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBBU1NFUlQocmVwbGFjZW1lbnQub3AoKSA9
PSBTZXRMb2NhbCk7Ci0gICAgICAgICAgICBBU1NFUlQocmVwbGFjZW1lbnQucmVmQ291bnQoKSA9
PSAxKTsKLSAgICAgICAgICAgIEFTU0VSVChyZXBsYWNlbWVudC5zaG91bGRHZW5lcmF0ZSgpKTsK
KyAgICAgICAgICAgIEFTU0VSVChyZXBsYWNlbWVudC0+b3AoKSA9PSBTZXRMb2NhbCk7CisgICAg
ICAgICAgICBBU1NFUlQocmVwbGFjZW1lbnQtPnJlZkNvdW50KCkgPT0gMSk7CisgICAgICAgICAg
ICBBU1NFUlQocmVwbGFjZW1lbnQtPnNob3VsZEdlbmVyYXRlKCkpOwogICAgICAgICAgICAgLy8g
RklYTUU6IEludmVzdGlnYXRlIHVzaW5nIG1heUV4aXQgYXMgYSBmdXJ0aGVyIG9wdGltaXphdGlv
bi4KLSAgICAgICAgICAgIG5vZGUuc2V0T3BBbmREZWZhdWx0RmxhZ3MoUGhhbnRvbSk7Ci0gICAg
ICAgICAgICBOb2RlSW5kZXggZGF0YU5vZGVJbmRleCA9IHJlcGxhY2VtZW50LmNoaWxkMSgpLmlu
ZGV4KCk7Ci0gICAgICAgICAgICBBU1NFUlQobV9ncmFwaFtkYXRhTm9kZUluZGV4XS5oYXNSZXN1
bHQoKSk7CisgICAgICAgICAgICBub2RlLT5zZXRPcEFuZERlZmF1bHRGbGFncyhQaGFudG9tKTsK
KyAgICAgICAgICAgIE5vZGUqIGRhdGFOb2RlID0gcmVwbGFjZW1lbnQtPmNoaWxkMSgpLm5vZGUo
KTsKKyAgICAgICAgICAgIEFTU0VSVChkYXRhTm9kZS0+aGFzUmVzdWx0KCkpOwogICAgICAgICAg
ICAgbV9ncmFwaC5jbGVhckFuZERlcmVmQ2hpbGQxKG5vZGUpOwotICAgICAgICAgICAgbm9kZS5j
aGlsZHJlbi5jaGlsZDEoKSA9IEVkZ2UoZGF0YU5vZGVJbmRleCk7Ci0gICAgICAgICAgICBtX2dy
YXBoLnJlZihkYXRhTm9kZUluZGV4KTsKLSAgICAgICAgICAgIE5vZGVJbmRleCBvbGRUYWlsSW5k
ZXggPSBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQobG9jYWwpOwotICAg
ICAgICAgICAgaWYgKG9sZFRhaWxJbmRleCA9PSBtX2NvbXBpbGVJbmRleCkKLSAgICAgICAgICAg
ICAgICBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQobG9jYWwpID0gcmVw
bGFjZW1lbnRJbmRleDsKKyAgICAgICAgICAgIG5vZGUtPmNoaWxkcmVuLmNoaWxkMSgpID0gRWRn
ZShkYXRhTm9kZSk7CisgICAgICAgICAgICBtX2dyYXBoLnJlZihkYXRhTm9kZSk7CisgICAgICAg
ICAgICBOb2RlKiBvbGRUYWlsID0gbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVy
YW5kKGxvY2FsKTsKKyAgICAgICAgICAgIGlmIChvbGRUYWlsID09IG5vZGUpCisgICAgICAgICAg
ICAgICAgbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKGxvY2FsKSA9IHJl
cGxhY2VtZW50OwogICAgICAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICB9CkBAIC0xMjc1LDExICsxMjUzLDExIEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgICAgICBjYXNlIEdldEFycmF5TGVuZ3RoOgot
ICAgICAgICAgICAgc2V0UmVwbGFjZW1lbnQoZ2V0QXJyYXlMZW5ndGhFbGltaW5hdGlvbihub2Rl
LmNoaWxkMSgpLmluZGV4KCkpKTsKKyAgICAgICAgICAgIHNldFJlcGxhY2VtZW50KGdldEFycmF5
TGVuZ3RoRWxpbWluYXRpb24obm9kZS0+Y2hpbGQxKCkubm9kZSgpKSk7CiAgICAgICAgICAgICBi
cmVhazsKIAogICAgICAgICBjYXNlIEdldE15U2NvcGU6Ci0gICAgICAgICAgICBzZXRSZXBsYWNl
bWVudChnZXRNeVNjb3BlTG9hZEVsaW1pbmF0aW9uKG5vZGUuY29kZU9yaWdpbi5pbmxpbmVDYWxs
RnJhbWUpKTsKKyAgICAgICAgICAgIHNldFJlcGxhY2VtZW50KGdldE15U2NvcGVMb2FkRWxpbWlu
YXRpb24obm9kZS0+Y29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpKTsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgCiAgICAgICAgIC8vIEhhbmRsZSBub2RlcyB0aGF0IGFyZSBjb25k
aXRpb25hbGx5IHB1cmU6IHRoZXNlIGFyZSBwdXJlLCBhbmQgY2FuCkBAIC0xMjkxLDkgKzEyNjks
OSBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIENvbXBhcmVHcmVhdGVyRXE6CiAgICAgICAgIGNh
c2UgQ29tcGFyZUVxOiB7CiAgICAgICAgICAgICBpZiAobV9ncmFwaC5pc1ByZWRpY3RlZE51bWVy
aWNhbChub2RlKSkgewotICAgICAgICAgICAgICAgIE5vZGVJbmRleCByZXBsYWNlbWVudEluZGV4
ID0gcHVyZUNTRShub2RlKTsKLSAgICAgICAgICAgICAgICBpZiAocmVwbGFjZW1lbnRJbmRleCAh
PSBOb05vZGUgJiYgbV9ncmFwaC5pc1ByZWRpY3RlZE51bWVyaWNhbChtX2dyYXBoW3JlcGxhY2Vt
ZW50SW5kZXhdKSkKLSAgICAgICAgICAgICAgICAgICAgc2V0UmVwbGFjZW1lbnQocmVwbGFjZW1l
bnRJbmRleCk7CisgICAgICAgICAgICAgICAgTm9kZSogcmVwbGFjZW1lbnQgPSBwdXJlQ1NFKG5v
ZGUpOworICAgICAgICAgICAgICAgIGlmIChyZXBsYWNlbWVudCAmJiBtX2dyYXBoLmlzUHJlZGlj
dGVkTnVtZXJpY2FsKHJlcGxhY2VtZW50KSkKKyAgICAgICAgICAgICAgICAgICAgc2V0UmVwbGFj
ZW1lbnQocmVwbGFjZW1lbnQpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIH0KQEAgLTEzMDEsMTYgKzEyNzksMTYgQEAgcHJpdmF0ZToKICAgICAgICAgLy8gRmlu
YWxseSBoYW5kbGUgaGVhcCBhY2Nlc3Nlcy4gVGhlc2UgYXJlIG5vdCBxdWl0ZSBwdXJlLCBidXQg
d2UgY2FuIHN0aWxsCiAgICAgICAgIC8vIG9wdGltaXplIHRoZW0gcHJvdmlkZWQgdGhhdCBzb21l
IHN1YnRsZSBjb25kaXRpb25zIGFyZSBtZXQuCiAgICAgICAgIGNhc2UgR2V0R2xvYmFsVmFyOgot
ICAgICAgICAgICAgc2V0UmVwbGFjZW1lbnQoZ2xvYmFsVmFyTG9hZEVsaW1pbmF0aW9uKG5vZGUu
cmVnaXN0ZXJQb2ludGVyKCkpKTsKKyAgICAgICAgICAgIHNldFJlcGxhY2VtZW50KGdsb2JhbFZh
ckxvYWRFbGltaW5hdGlvbihub2RlLT5yZWdpc3RlclBvaW50ZXIoKSkpOwogICAgICAgICAgICAg
YnJlYWs7CiAKICAgICAgICAgY2FzZSBHZXRTY29wZWRWYXI6IHsKLSAgICAgICAgICAgIHNldFJl
cGxhY2VtZW50KHNjb3BlZFZhckxvYWRFbGltaW5hdGlvbihub2RlLmNoaWxkMSgpLmluZGV4KCks
IG5vZGUudmFyTnVtYmVyKCkpKTsKKyAgICAgICAgICAgIHNldFJlcGxhY2VtZW50KHNjb3BlZFZh
ckxvYWRFbGltaW5hdGlvbihub2RlLT5jaGlsZDEoKS5ub2RlKCksIG5vZGUtPnZhck51bWJlcigp
KSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCiAgICAgICAgIGNhc2UgR2xvYmFs
VmFyV2F0Y2hwb2ludDoKLSAgICAgICAgICAgIGlmIChnbG9iYWxWYXJXYXRjaHBvaW50RWxpbWlu
YXRpb24obm9kZS5yZWdpc3RlclBvaW50ZXIoKSkpCisgICAgICAgICAgICBpZiAoZ2xvYmFsVmFy
V2F0Y2hwb2ludEVsaW1pbmF0aW9uKG5vZGUtPnJlZ2lzdGVyUG9pbnRlcigpKSkKICAgICAgICAg
ICAgICAgICBlbGltaW5hdGUoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCkBA
IC0xMzE4LDgzICsxMjk2LDgzIEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgUHV0R2xvYmFsVmFy
Q2hlY2s6CiAgICAgICAgICAgICBpZiAobV9ncmFwaC5tX2ZpeHBvaW50U3RhdGUgPT0gRml4cG9p
bnROb3RDb252ZXJnZWQpCiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBlbGlt
aW5hdGUoZ2xvYmFsVmFyU3RvcmVFbGltaW5hdGlvbihub2RlLnJlZ2lzdGVyUG9pbnRlcigpKSk7
CisgICAgICAgICAgICBlbGltaW5hdGUoZ2xvYmFsVmFyU3RvcmVFbGltaW5hdGlvbihub2RlLT5y
ZWdpc3RlclBvaW50ZXIoKSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAg
ICAgICAgY2FzZSBQdXRTY29wZWRWYXI6IHsKICAgICAgICAgICAgIGlmIChtX2dyYXBoLm1fZml4
cG9pbnRTdGF0ZSA9PSBGaXhwb2ludE5vdENvbnZlcmdlZCkKICAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgIGVsaW1pbmF0ZShzY29wZWRWYXJTdG9yZUVsaW1pbmF0aW9uKG5vZGUu
Y2hpbGQxKCkuaW5kZXgoKSwgbm9kZS5jaGlsZDIoKS5pbmRleCgpLCBub2RlLnZhck51bWJlcigp
KSk7CisgICAgICAgICAgICBlbGltaW5hdGUoc2NvcGVkVmFyU3RvcmVFbGltaW5hdGlvbihub2Rl
LT5jaGlsZDEoKS5ub2RlKCksIG5vZGUtPmNoaWxkMigpLm5vZGUoKSwgbm9kZS0+dmFyTnVtYmVy
KCkpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBHZXRC
eVZhbDoKICAgICAgICAgICAgIGlmIChtX2dyYXBoLmJ5VmFsSXNQdXJlKG5vZGUpKQotICAgICAg
ICAgICAgICAgIHNldFJlcGxhY2VtZW50KGdldEJ5VmFsTG9hZEVsaW1pbmF0aW9uKG5vZGUuY2hp
bGQxKCkuaW5kZXgoKSwgbm9kZS5jaGlsZDIoKS5pbmRleCgpKSk7CisgICAgICAgICAgICAgICAg
c2V0UmVwbGFjZW1lbnQoZ2V0QnlWYWxMb2FkRWxpbWluYXRpb24obm9kZS0+Y2hpbGQxKCkubm9k
ZSgpLCBub2RlLT5jaGlsZDIoKS5ub2RlKCkpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgCiAgICAgICAgIGNhc2UgUHV0QnlWYWw6IHsKICAgICAgICAgICAgIEVkZ2UgY2hpbGQx
ID0gbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKTsKICAgICAgICAgICAgIEVkZ2UgY2hpbGQy
ID0gbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKTsKLSAgICAgICAgICAgIGlmIChub2RlLmFy
cmF5TW9kZSgpLmNhbkNTRVN0b3JhZ2UoKSkgewotICAgICAgICAgICAgICAgIE5vZGVJbmRleCBu
b2RlSW5kZXggPSBnZXRCeVZhbExvYWRFbGltaW5hdGlvbihjaGlsZDEuaW5kZXgoKSwgY2hpbGQy
LmluZGV4KCkpOwotICAgICAgICAgICAgICAgIGlmIChub2RlSW5kZXggPT0gTm9Ob2RlKQorICAg
ICAgICAgICAgaWYgKG5vZGUtPmFycmF5TW9kZSgpLmNhbkNTRVN0b3JhZ2UoKSkgeworICAgICAg
ICAgICAgICAgIE5vZGUqIHJlcGxhY2VtZW50ID0gZ2V0QnlWYWxMb2FkRWxpbWluYXRpb24oY2hp
bGQxLm5vZGUoKSwgY2hpbGQyLm5vZGUoKSk7CisgICAgICAgICAgICAgICAgaWYgKCFyZXBsYWNl
bWVudCkKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgbm9kZS5z
ZXRPcChQdXRCeVZhbEFsaWFzKTsKKyAgICAgICAgICAgICAgICBub2RlLT5zZXRPcChQdXRCeVZh
bEFsaWFzKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAg
ICAgICAgICAgICAKICAgICAgICAgY2FzZSBDaGVja1N0cnVjdHVyZToKICAgICAgICAgY2FzZSBG
b3J3YXJkQ2hlY2tTdHJ1Y3R1cmU6Ci0gICAgICAgICAgICBpZiAoY2hlY2tTdHJ1Y3R1cmVFbGlt
aW5hdGlvbihub2RlLnN0cnVjdHVyZVNldCgpLCBub2RlLmNoaWxkMSgpLmluZGV4KCkpKQorICAg
ICAgICAgICAgaWYgKGNoZWNrU3RydWN0dXJlRWxpbWluYXRpb24obm9kZS0+c3RydWN0dXJlU2V0
KCksIG5vZGUtPmNoaWxkMSgpLm5vZGUoKSkpCiAgICAgICAgICAgICAgICAgZWxpbWluYXRlKCk7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgICAgICBjYXNlIFN0cnVjdHVy
ZVRyYW5zaXRpb25XYXRjaHBvaW50OgogICAgICAgICBjYXNlIEZvcndhcmRTdHJ1Y3R1cmVUcmFu
c2l0aW9uV2F0Y2hwb2ludDoKLSAgICAgICAgICAgIGlmIChzdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0
Y2hwb2ludEVsaW1pbmF0aW9uKG5vZGUuc3RydWN0dXJlKCksIG5vZGUuY2hpbGQxKCkuaW5kZXgo
KSkpCisgICAgICAgICAgICBpZiAoc3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnRFbGltaW5h
dGlvbihub2RlLT5zdHJ1Y3R1cmUoKSwgbm9kZS0+Y2hpbGQxKCkubm9kZSgpKSkKICAgICAgICAg
ICAgICAgICBlbGltaW5hdGUoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAg
ICAgICAgIGNhc2UgUHV0U3RydWN0dXJlOgogICAgICAgICAgICAgaWYgKG1fZ3JhcGgubV9maXhw
b2ludFN0YXRlID09IEZpeHBvaW50Tm90Q29udmVyZ2VkKQogICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgZWxpbWluYXRlKHB1dFN0cnVjdHVyZVN0b3JlRWxpbWluYXRpb24obm9k
ZS5jaGlsZDEoKS5pbmRleCgpKSwgUGhhbnRvbVB1dFN0cnVjdHVyZSk7CisgICAgICAgICAgICBl
bGltaW5hdGUocHV0U3RydWN0dXJlU3RvcmVFbGltaW5hdGlvbihub2RlLT5jaGlsZDEoKS5ub2Rl
KCkpLCBQaGFudG9tUHV0U3RydWN0dXJlKTsKICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAg
IGNhc2UgQ2hlY2tGdW5jdGlvbjoKLSAgICAgICAgICAgIGlmIChjaGVja0Z1bmN0aW9uRWxpbWlu
YXRpb24obm9kZS5mdW5jdGlvbigpLCBub2RlLmNoaWxkMSgpLmluZGV4KCkpKQorICAgICAgICAg
ICAgaWYgKGNoZWNrRnVuY3Rpb25FbGltaW5hdGlvbihub2RlLT5mdW5jdGlvbigpLCBub2RlLT5j
aGlsZDEoKS5ub2RlKCkpKQogICAgICAgICAgICAgICAgIGVsaW1pbmF0ZSgpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgQ2hlY2tFeGVjdXRhYmxl
OgotICAgICAgICAgICAgaWYgKGNoZWNrRXhlY3V0YWJsZUVsaW1pbmF0aW9uKG5vZGUuZXhlY3V0
YWJsZSgpLCBub2RlLmNoaWxkMSgpLmluZGV4KCkpKQorICAgICAgICAgICAgaWYgKGNoZWNrRXhl
Y3V0YWJsZUVsaW1pbmF0aW9uKG5vZGUtPmV4ZWN1dGFibGUoKSwgbm9kZS0+Y2hpbGQxKCkubm9k
ZSgpKSkKICAgICAgICAgICAgICAgICBlbGltaW5hdGUoKTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgICAgIAogICAgICAgICBjYXNlIENoZWNrQXJyYXk6Ci0gICAgICAgICAgICBp
ZiAoY2hlY2tBcnJheUVsaW1pbmF0aW9uKG5vZGUuY2hpbGQxKCkuaW5kZXgoKSwgbm9kZS5hcnJh
eU1vZGUoKSkpCisgICAgICAgICAgICBpZiAoY2hlY2tBcnJheUVsaW1pbmF0aW9uKG5vZGUtPmNo
aWxkMSgpLm5vZGUoKSwgbm9kZS0+YXJyYXlNb2RlKCkpKQogICAgICAgICAgICAgICAgIGVsaW1p
bmF0ZSgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBH
ZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlOiB7Ci0gICAgICAgICAgICBzZXRSZXBsYWNlbWVudChn
ZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlTG9hZEVsaW1pbmF0aW9uKG5vZGUuY2hpbGQxKCkuaW5k
ZXgoKSwgbm9kZS5hcnJheU1vZGUoKSkpOworICAgICAgICAgICAgc2V0UmVwbGFjZW1lbnQoZ2V0
SW5kZXhlZFByb3BlcnR5U3RvcmFnZUxvYWRFbGltaW5hdGlvbihub2RlLT5jaGlsZDEoKS5ub2Rl
KCksIG5vZGUtPmFycmF5TW9kZSgpKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQog
CiAgICAgICAgIGNhc2UgR2V0QnV0dGVyZmx5OgotICAgICAgICAgICAgc2V0UmVwbGFjZW1lbnQo
Z2V0UHJvcGVydHlTdG9yYWdlTG9hZEVsaW1pbmF0aW9uKG5vZGUuY2hpbGQxKCkuaW5kZXgoKSkp
OworICAgICAgICAgICAgc2V0UmVwbGFjZW1lbnQoZ2V0UHJvcGVydHlTdG9yYWdlTG9hZEVsaW1p
bmF0aW9uKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSkpOwogICAgICAgICAgICAgYnJlYWs7CiAKICAg
ICAgICAgY2FzZSBHZXRCeU9mZnNldDoKLSAgICAgICAgICAgIHNldFJlcGxhY2VtZW50KGdldEJ5
T2Zmc2V0TG9hZEVsaW1pbmF0aW9uKG1fZ3JhcGgubV9zdG9yYWdlQWNjZXNzRGF0YVtub2RlLnN0
b3JhZ2VBY2Nlc3NEYXRhSW5kZXgoKV0uaWRlbnRpZmllck51bWJlciwgbm9kZS5jaGlsZDEoKS5p
bmRleCgpKSk7CisgICAgICAgICAgICBzZXRSZXBsYWNlbWVudChnZXRCeU9mZnNldExvYWRFbGlt
aW5hdGlvbihtX2dyYXBoLm1fc3RvcmFnZUFjY2Vzc0RhdGFbbm9kZS0+c3RvcmFnZUFjY2Vzc0Rh
dGFJbmRleCgpXS5pZGVudGlmaWVyTnVtYmVyLCBub2RlLT5jaGlsZDEoKS5ub2RlKCkpKTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgUHV0QnlPZmZzZXQ6
CiAgICAgICAgICAgICBpZiAobV9ncmFwaC5tX2ZpeHBvaW50U3RhdGUgPT0gRml4cG9pbnROb3RD
b252ZXJnZWQpCiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBlbGltaW5hdGUo
cHV0QnlPZmZzZXRTdG9yZUVsaW1pbmF0aW9uKG1fZ3JhcGgubV9zdG9yYWdlQWNjZXNzRGF0YVtu
b2RlLnN0b3JhZ2VBY2Nlc3NEYXRhSW5kZXgoKV0uaWRlbnRpZmllck51bWJlciwgbm9kZS5jaGls
ZDEoKS5pbmRleCgpKSk7CisgICAgICAgICAgICBlbGltaW5hdGUocHV0QnlPZmZzZXRTdG9yZUVs
aW1pbmF0aW9uKG1fZ3JhcGgubV9zdG9yYWdlQWNjZXNzRGF0YVtub2RlLT5zdG9yYWdlQWNjZXNz
RGF0YUluZGV4KCldLmlkZW50aWZpZXJOdW1iZXIsIG5vZGUtPmNoaWxkMSgpLm5vZGUoKSkpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBQaGFudG9tOgpA
QCAtMTQwOCw3ICsxMzg2LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9CiAgICAgICAgIAotICAgICAgICBtX2xhc3RTZWVuW25vZGUub3AoKV0gPSBtX2luZGV4SW5C
bG9jazsKKyAgICAgICAgbV9sYXN0U2Vlbltub2RlLT5vcCgpXSA9IG1faW5kZXhJbkJsb2NrOwog
I2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKICAgICAgICAgZGF0YUxv
Z0YoIlxuIik7CiAjZW5kaWYKQEAgLTE0MjksMzcgKzE0MDcsMzYgQEAgcHJpdmF0ZToKICAgICAg
ICAgLy8gcmVwbGFjZW1lbnRzIGNsZWFyZWQsIHNvIHdlIGRvbid0IGdldCBjb25mdXNlZCB3aGls
ZSBkb2luZyBzdWJzdGl0dXRpb25zIG9uCiAgICAgICAgIC8vIEdldExvY2FsJ3MuCiAgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBibG9jay0+cGhpcy5zaXplKCk7ICsraSkgewotICAg
ICAgICAgICAgQVNTRVJUKG1fZ3JhcGhbYmxvY2stPnBoaXNbaV1dLmZsYWdzKCkgJiBOb2RlUmVs
ZXZhbnRUb09TUik7Ci0gICAgICAgICAgICBtX2dyYXBoW2Jsb2NrLT5waGlzW2ldXS5yZXBsYWNl
bWVudCA9IE5vTm9kZTsKKyAgICAgICAgICAgIEFTU0VSVChibG9jay0+cGhpc1tpXS0+ZmxhZ3Mo
KSAmIE5vZGVSZWxldmFudFRvT1NSKTsKKyAgICAgICAgICAgIGJsb2NrLT5waGlzW2ldLT5yZXBs
YWNlbWVudCA9IDA7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIC8vIE1ha2UgYWxsIG9m
IG15IFNldExvY2FsIGFuZCBHZXRMb2NhbCBub2RlcyByZWxldmFudCB0byBPU1IsIGFuZCBkbyBz
b21lIG90aGVyCiAgICAgICAgIC8vIG5lY2Vzc2FyeSBib29ra2VlcGluZy4KICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IGJsb2NrLT5zaXplKCk7ICsraSkgewotICAgICAgICAgICAg
Tm9kZUluZGV4IG5vZGVJbmRleCA9IGJsb2NrLT5hdChpKTsKLSAgICAgICAgICAgIE5vZGUmIG5v
ZGUgPSBtX2dyYXBoW25vZGVJbmRleF07CisgICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2st
PmF0KGkpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBub2RlLnJlcGxhY2VtZW50ID0gTm9O
b2RlOworICAgICAgICAgICAgbm9kZS0+cmVwbGFjZW1lbnQgPSAwOwogICAgICAgICAgICAgCi0g
ICAgICAgICAgICBzd2l0Y2ggKG5vZGUub3AoKSkgeworICAgICAgICAgICAgc3dpdGNoIChub2Rl
LT5vcCgpKSB7CiAgICAgICAgICAgICBjYXNlIFNldExvY2FsOgogICAgICAgICAgICAgY2FzZSBH
ZXRMb2NhbDogLy8gRklYTUU6IFRoZSBHZXRMb2NhbCBjYXNlIGlzIG9ubHkgbmVjZXNzYXJ5IHVu
dGlsIHdlIGRvIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDY3MDcu
Ci0gICAgICAgICAgICAgICAgbm9kZS5tZXJnZUZsYWdzKE5vZGVSZWxldmFudFRvT1NSKTsKKyAg
ICAgICAgICAgICAgICBub2RlLT5tZXJnZUZsYWdzKE5vZGVSZWxldmFudFRvT1NSKTsKICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAg
bm9kZS5jbGVhckZsYWdzKE5vZGVSZWxldmFudFRvT1NSKTsKKyAgICAgICAgICAgICAgICBub2Rl
LT5jbGVhckZsYWdzKE5vZGVSZWxldmFudFRvT1NSKTsKICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgIH0KICAgICAgICAgfQogCiAgICAgICAgIGZvciAobV9pbmRleEluQmxvY2sg
PSAwOyBtX2luZGV4SW5CbG9jayA8IGJsb2NrLT5zaXplKCk7ICsrbV9pbmRleEluQmxvY2spIHsK
LSAgICAgICAgICAgIG1fY29tcGlsZUluZGV4ID0gYmxvY2stPmF0KG1faW5kZXhJbkJsb2NrKTsK
LSAgICAgICAgICAgIHBlcmZvcm1Ob2RlQ1NFKG1fZ3JhcGhbbV9jb21waWxlSW5kZXhdKTsKKyAg
ICAgICAgICAgIG1fY3VycmVudE5vZGUgPSBibG9jay0+YXQobV9pbmRleEluQmxvY2spOworICAg
ICAgICAgICAgcGVyZm9ybU5vZGVDU0UobV9jdXJyZW50Tm9kZSk7CiAgICAgICAgIH0KICAgICB9
CiAgICAgCiAgICAgQmFzaWNCbG9jayogbV9jdXJyZW50QmxvY2s7Ci0gICAgTm9kZUluZGV4IG1f
Y29tcGlsZUluZGV4OworICAgIE5vZGUqIG1fY3VycmVudE5vZGU7CiAgICAgdW5zaWduZWQgbV9p
bmRleEluQmxvY2s7CiAgICAgRml4ZWRBcnJheTx1bnNpZ25lZCwgTGFzdE5vZGVUeXBlPiBtX2xh
c3RTZWVuOwogICAgIGJvb2wgbV9jaGFuZ2VkOyAvLyBPbmx5IHRyYWNrcyBjaGFuZ2VzIHRoYXQg
aGF2ZSBhIHN1YnN0YW50aXZlIGVmZmVjdCBvbiBvdGhlciBvcHRpbWl6YXRpb25zLgpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb24uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uLmNwcAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uLmNwcAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSw0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZHQ29tbW9uLmgiCisKKyNpZiBFTkFC
TEUoREZHX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCit2b2lkIE5v
ZGVQb2ludGVyVHJhaXRzOjpkdW1wKE5vZGUqIHZhbHVlLCBQcmludFN0cmVhbSYgb3V0KQorewor
ICAgIG91dC5wcmludCh2YWx1ZSk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKwor
I2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0NvbW1vbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQ29tbW9uLmgJKHJldmlzaW9uIDE0MDYxNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQ29tbW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDExLCAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMSwgMjAxMiwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTgxLDIyICs4MSwxNCBA
QAogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKLS8vIFR5cGUgZm9yIGEgcmVm
ZXJlbmNlIHRvIGFub3RoZXIgbm9kZSBpbiB0aGUgZ3JhcGguCi10eXBlZGVmIHVpbnQzMl90IE5v
ZGVJbmRleDsKLXN0YXRpYyBjb25zdCBOb2RlSW5kZXggTm9Ob2RlID0gVUlOVF9NQVg7CitjbGFz
cyBOb2RlOwogCiB0eXBlZGVmIHVpbnQzMl90IEJsb2NrSW5kZXg7CiBzdGF0aWMgY29uc3QgQmxv
Y2tJbmRleCBOb0Jsb2NrID0gVUlOVF9NQVg7CiAKLXN0cnVjdCBOb2RlSW5kZXhUcmFpdHMgewot
ICAgIHN0YXRpYyBOb2RlSW5kZXggZGVmYXVsdFZhbHVlKCkgeyByZXR1cm4gTm9Ob2RlOyB9Ci0g
ICAgc3RhdGljIHZvaWQgZHVtcChOb2RlSW5kZXggdmFsdWUsIFByaW50U3RyZWFtJiBvdXQpCi0g
ICAgewotICAgICAgICBpZiAodmFsdWUgPT0gTm9Ob2RlKQotICAgICAgICAgICAgb3V0LnByaW50
ZigiLSIpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBvdXQucHJpbnRmKCJAJXUiLCB2YWx1
ZSk7Ci0gICAgfQorc3RydWN0IE5vZGVQb2ludGVyVHJhaXRzIHsKKyAgICBzdGF0aWMgTm9kZSog
ZGVmYXVsdFZhbHVlKCkgeyByZXR1cm4gMDsgfQorICAgIHN0YXRpYyB2b2lkIGR1bXAoTm9kZSog
dmFsdWUsIFByaW50U3RyZWFtJiBvdXQpOwogfTsKIAogZW51bSBVc2VLaW5kIHsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhh
c2UuY3BwCShyZXZpc2lvbiAxNDA2MTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNzUsMjIgKzc1LDIxIEBA
IHByaXZhdGU6CiAgICAgICAgIGJvb2wgY2hhbmdlZCA9IGZhbHNlOwogICAgICAgICBtX3N0YXRl
LmJlZ2luQmFzaWNCbG9jayhibG9jayk7CiAgICAgICAgIGZvciAodW5zaWduZWQgaW5kZXhJbkJs
b2NrID0gMDsgaW5kZXhJbkJsb2NrIDwgYmxvY2stPnNpemUoKTsgKytpbmRleEluQmxvY2spIHsK
LSAgICAgICAgICAgIE5vZGVJbmRleCBub2RlSW5kZXggPSBibG9jay0+YXQoaW5kZXhJbkJsb2Nr
KTsKLSAgICAgICAgICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW25vZGVJbmRleF07Ci0gICAgICAg
ICAgICAgICAgCiAgICAgICAgICAgICBpZiAoIW1fc3RhdGUuaXNWYWxpZCgpKQogICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCisgICAgICAgICAgICBOb2RlKiBub2RlID0gYmxv
Y2stPmF0KGluZGV4SW5CbG9jayk7CisKICAgICAgICAgICAgIGJvb2wgZWxpbWluYXRlZCA9IGZh
bHNlOwogICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIHN3aXRjaCAobm9kZS5vcCgp
KSB7CisgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKICAgICAgICAgICAgIGNhc2Ug
Q2hlY2tBcmd1bWVudHNOb3RDcmVhdGVkOiB7CiAgICAgICAgICAgICAgICAgaWYgKCFpc0VtcHR5
U3BlY3VsYXRpb24oCiAgICAgICAgICAgICAgICAgICAgICAgICBtX3N0YXRlLnZhcmlhYmxlcygp
Lm9wZXJhbmQoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5hcmd1bWVudHNS
ZWdpc3RlckZvcihub2RlLmNvZGVPcmlnaW4pKS5tX3R5cGUpKQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG1fZ3JhcGguYXJndW1lbnRzUmVnaXN0ZXJGb3Iobm9kZS0+Y29kZU9yaWdpbikp
Lm1fdHlwZSkpCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIEFT
U0VSVChub2RlLnJlZkNvdW50KCkgPT0gMSk7Ci0gICAgICAgICAgICAgICAgbm9kZS5zZXRPcEFu
ZERlZmF1bHRGbGFncyhQaGFudG9tKTsKKyAgICAgICAgICAgICAgICBub2RlLT5zZXRPcEFuZERl
ZmF1bHRGbGFncyhQaGFudG9tKTsKICAgICAgICAgICAgICAgICBlbGltaW5hdGVkID0gdHJ1ZTsK
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KQEAgLTk4LDI0ICs5NywyNCBA
QCBwcml2YXRlOgogICAgICAgICAgICAgY2FzZSBDaGVja1N0cnVjdHVyZToKICAgICAgICAgICAg
IGNhc2UgRm9yd2FyZENoZWNrU3RydWN0dXJlOgogICAgICAgICAgICAgY2FzZSBBcnJheWlmeVRv
U3RydWN0dXJlOiB7Ci0gICAgICAgICAgICAgICAgQWJzdHJhY3RWYWx1ZSYgdmFsdWUgPSBtX3N0
YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSk7CisgICAgICAgICAgICAgICAgQWJzdHJhY3RWYWx1
ZSYgdmFsdWUgPSBtX3N0YXRlLmZvck5vZGUobm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICAgICAg
ICAgIFN0cnVjdHVyZVNldCBzZXQ7Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGUub3AoKSA9PSBB
cnJheWlmeVRvU3RydWN0dXJlKQotICAgICAgICAgICAgICAgICAgICBzZXQgPSBub2RlLnN0cnVj
dHVyZSgpOworICAgICAgICAgICAgICAgIGlmIChub2RlLT5vcCgpID09IEFycmF5aWZ5VG9TdHJ1
Y3R1cmUpCisgICAgICAgICAgICAgICAgICAgIHNldCA9IG5vZGUtPnN0cnVjdHVyZSgpOwogICAg
ICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgc2V0ID0gbm9kZS5zdHJ1Y3R1
cmVTZXQoKTsKKyAgICAgICAgICAgICAgICAgICAgc2V0ID0gbm9kZS0+c3RydWN0dXJlU2V0KCk7
CiAgICAgICAgICAgICAgICAgaWYgKCFpc0NlbGxTcGVjdWxhdGlvbih2YWx1ZS5tX3R5cGUpKQog
ICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICBpZiAodmFsdWUubV9j
dXJyZW50S25vd25TdHJ1Y3R1cmUuaXNTdWJzZXRPZihzZXQpKSB7CiAgICAgICAgICAgICAgICAg
ICAgIEFTU0VSVChub2RlLnJlZkNvdW50KCkgPT0gMSk7Ci0gICAgICAgICAgICAgICAgICAgIG5v
ZGUuc2V0T3BBbmREZWZhdWx0RmxhZ3MoUGhhbnRvbSk7CisgICAgICAgICAgICAgICAgICAgIG5v
ZGUtPnNldE9wQW5kRGVmYXVsdEZsYWdzKFBoYW50b20pOwogICAgICAgICAgICAgICAgICAgICBl
bGltaW5hdGVkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgIFN0cnVjdHVyZUFic3RyYWN0VmFsdWUmIHN0cnVjdHVy
ZVZhbHVlID0gdmFsdWUubV9mdXR1cmVQb3NzaWJsZVN0cnVjdHVyZTsKICAgICAgICAgICAgICAg
ICBpZiAoc3RydWN0dXJlVmFsdWUuaXNTdWJzZXRPZihzZXQpCiAgICAgICAgICAgICAgICAgICAg
ICYmIHN0cnVjdHVyZVZhbHVlLmhhc1NpbmdsZXRvbigpKSB7Ci0gICAgICAgICAgICAgICAgICAg
IG5vZGUuY29udmVydFRvU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnQoc3RydWN0dXJlVmFs
dWUuc2luZ2xldG9uKCkpOworICAgICAgICAgICAgICAgICAgICBub2RlLT5jb252ZXJ0VG9TdHJ1
Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludChzdHJ1Y3R1cmVWYWx1ZS5zaW5nbGV0b24oKSk7CiAg
ICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgICBicmVhazsKQEAgLTEyMywzNyArMTIyLDM3IEBAIHByaXZhdGU6CiAgICAg
ICAgICAgICAgICAgCiAgICAgICAgICAgICBjYXNlIENoZWNrQXJyYXk6CiAgICAgICAgICAgICBj
YXNlIEFycmF5aWZ5OiB7Ci0gICAgICAgICAgICAgICAgaWYgKCFub2RlLmFycmF5TW9kZSgpLmFs
cmVhZHlDaGVja2VkKG1fZ3JhcGgsIG5vZGUsIG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgp
KSkpCisgICAgICAgICAgICAgICAgaWYgKCFub2RlLT5hcnJheU1vZGUoKS5hbHJlYWR5Q2hlY2tl
ZChtX2dyYXBoLCBub2RlLCBtX3N0YXRlLmZvck5vZGUobm9kZS0+Y2hpbGQxKCkpKSkKICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKG5vZGUucmVmQ291
bnQoKSA9PSAxKTsKLSAgICAgICAgICAgICAgICBub2RlLnNldE9wQW5kRGVmYXVsdEZsYWdzKFBo
YW50b20pOworICAgICAgICAgICAgICAgIEFTU0VSVChub2RlLT5yZWZDb3VudCgpID09IDEpOwor
ICAgICAgICAgICAgICAgIG5vZGUtPnNldE9wQW5kRGVmYXVsdEZsYWdzKFBoYW50b20pOwogICAg
ICAgICAgICAgICAgIGVsaW1pbmF0ZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgY2FzZSBDaGVja0Z1
bmN0aW9uOiB7Ci0gICAgICAgICAgICAgICAgaWYgKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxk
MSgpKS52YWx1ZSgpICE9IG5vZGUuZnVuY3Rpb24oKSkKKyAgICAgICAgICAgICAgICBpZiAobV9z
dGF0ZS5mb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS52YWx1ZSgpICE9IG5vZGUtPmZ1bmN0aW9uKCkp
CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIG5vZGUuc2V0T3BB
bmREZWZhdWx0RmxhZ3MoUGhhbnRvbSk7CisgICAgICAgICAgICAgICAgbm9kZS0+c2V0T3BBbmRE
ZWZhdWx0RmxhZ3MoUGhhbnRvbSk7CiAgICAgICAgICAgICAgICAgZWxpbWluYXRlZCA9IHRydWU7
CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
CiAgICAgICAgICAgICBjYXNlIENvbnZlcnRUaGlzOiB7Ci0gICAgICAgICAgICAgICAgaWYgKCFp
c09iamVjdFNwZWN1bGF0aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUp
KQorICAgICAgICAgICAgICAgIGlmICghaXNPYmplY3RTcGVjdWxhdGlvbihtX3N0YXRlLmZvck5v
ZGUobm9kZS0+Y2hpbGQxKCkpLm1fdHlwZSkpCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgICAgIG5vZGUuc2V0T3BBbmREZWZhdWx0RmxhZ3MoSWRlbnRpdHkpOworICAg
ICAgICAgICAgICAgIG5vZGUtPnNldE9wQW5kRGVmYXVsdEZsYWdzKElkZW50aXR5KTsKICAgICAg
ICAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGNhc2UgR2V0QnlJZDoKICAg
ICAgICAgICAgIGNhc2UgR2V0QnlJZEZsdXNoOiB7Ci0gICAgICAgICAgICAgICAgQ29kZU9yaWdp
biBjb2RlT3JpZ2luID0gbm9kZS5jb2RlT3JpZ2luOwotICAgICAgICAgICAgICAgIE5vZGVJbmRl
eCBjaGlsZCA9IG5vZGUuY2hpbGQxKCkuaW5kZXgoKTsKLSAgICAgICAgICAgICAgICB1bnNpZ25l
ZCBpZGVudGlmaWVyTnVtYmVyID0gbm9kZS5pZGVudGlmaWVyTnVtYmVyKCk7CisgICAgICAgICAg
ICAgICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2luID0gbm9kZS0+Y29kZU9yaWdpbjsKKyAgICAgICAg
ICAgICAgICBOb2RlKiBjaGlsZCA9IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKKyAgICAgICAgICAg
ICAgICB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyID0gbm9kZS0+aWRlbnRpZmllck51bWJlcigp
OwogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGlmICghaXNDZWxsU3BlY3VsYXRp
b24obV9ncmFwaFtjaGlsZF0ucHJlZGljdGlvbigpKSkKKyAgICAgICAgICAgICAgICBpZiAoIWlz
Q2VsbFNwZWN1bGF0aW9uKGNoaWxkLT5wcmVkaWN0aW9uKCkpKQogICAgICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSA9IG1fc3RhdGUuZm9yTm9kZShjaGlsZCkuYmVzdFByb3ZlblN0cnVjdHVyZSgpOwpA
QCAtMTg3LDcgKzE4Niw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAg
ICAgICAgTm9kZUluZGV4IHByb3BlcnR5U3RvcmFnZUluZGV4OwogICAgICAgICAgICAgICAgIAot
ICAgICAgICAgICAgICAgIG1fZ3JhcGhbY2hpbGRdLnJlZigpOworICAgICAgICAgICAgICAgIGNo
aWxkLT5yZWYoKTsKICAgICAgICAgICAgICAgICBpZiAoaXNJbmxpbmVPZmZzZXQoc3RhdHVzLm9m
ZnNldCgpKSkKICAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlTdG9yYWdlSW5kZXggPSBjaGls
ZDsKICAgICAgICAgICAgICAgICBlbHNlIHsKQEAgLTE5Niw3ICsxOTUsNyBAQCBwcml2YXRlOgog
ICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGQpOwogICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBtX2dyYXBoW25vZGVJbmRleF0uY29udmVydFRv
R2V0QnlPZmZzZXQobV9ncmFwaC5tX3N0b3JhZ2VBY2Nlc3NEYXRhLnNpemUoKSwgcHJvcGVydHlT
dG9yYWdlSW5kZXgpOworICAgICAgICAgICAgICAgIG5vZGUtPmNvbnZlcnRUb0dldEJ5T2Zmc2V0
KG1fZ3JhcGgubV9zdG9yYWdlQWNjZXNzRGF0YS5zaXplKCksIHByb3BlcnR5U3RvcmFnZUluZGV4
KTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBTdG9yYWdlQWNjZXNzRGF0YSBz
dG9yYWdlQWNjZXNzRGF0YTsKICAgICAgICAgICAgICAgICBzdG9yYWdlQWNjZXNzRGF0YS5vZmZz
ZXQgPSBpbmRleFJlbGF0aXZlVG9CYXNlKHN0YXR1cy5vZmZzZXQoKSk7CkBAIC0yMDcsOSArMjA2
LDkgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGNhc2UgUHV0QnlJ
ZDoKICAgICAgICAgICAgIGNhc2UgUHV0QnlJZERpcmVjdDogewotICAgICAgICAgICAgICAgIENv
ZGVPcmlnaW4gY29kZU9yaWdpbiA9IG5vZGUuY29kZU9yaWdpbjsKLSAgICAgICAgICAgICAgICBO
b2RlSW5kZXggY2hpbGQgPSBub2RlLmNoaWxkMSgpLmluZGV4KCk7Ci0gICAgICAgICAgICAgICAg
dW5zaWduZWQgaWRlbnRpZmllck51bWJlciA9IG5vZGUuaWRlbnRpZmllck51bWJlcigpOworICAg
ICAgICAgICAgICAgIENvZGVPcmlnaW4gY29kZU9yaWdpbiA9IG5vZGUtPmNvZGVPcmlnaW47Cisg
ICAgICAgICAgICAgICAgTm9kZSogY2hpbGQgPSBub2RlLT5jaGlsZDEoKS5ub2RlKCk7CisgICAg
ICAgICAgICAgICAgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciA9IG5vZGUtPmlkZW50aWZpZXJO
dW1iZXIoKTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSA9IG1fc3RhdGUuZm9yTm9kZShjaGlsZCkuYmVzdFByb3ZlblN0cnVjdHVyZSgpOwog
ICAgICAgICAgICAgICAgIGlmICghc3RydWN0dXJlKQpAQCAtMjIyLDcgKzIyMSw3IEBAIHByaXZh
dGU6CiAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKGNvZGVPcmln
aW4pLAogICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUsCiAgICAgICAgICAgICAgICAgICAg
IGNvZGVCbG9jaygpLT5pZGVudGlmaWVyKGlkZW50aWZpZXJOdW1iZXIpLAotICAgICAgICAgICAg
ICAgICAgICBub2RlLm9wKCkgPT0gUHV0QnlJZERpcmVjdCk7CisgICAgICAgICAgICAgICAgICAg
IG5vZGUtPm9wKCkgPT0gUHV0QnlJZERpcmVjdCk7CiAgICAgICAgICAgICAgICAgCiAgICAgICAg
ICAgICAgICAgaWYgKCFzdGF0dXMuaXNTaW1wbGVSZXBsYWNlKCkgJiYgIXN0YXR1cy5pc1NpbXBs
ZVRyYW5zaXRpb24oKSkKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0yNDcsNyArMjQ2
LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvbkRhdGEgPSBtX2dy
YXBoLmFkZFN0cnVjdHVyZVRyYW5zaXRpb25EYXRhKAogICAgICAgICAgICAgICAgICAgICAgICAg
U3RydWN0dXJlVHJhbnNpdGlvbkRhdGEoc3RydWN0dXJlLCBzdGF0dXMubmV3U3RydWN0dXJlKCkp
KTsKICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIGlmIChub2RlLm9w
KCkgPT0gUHV0QnlJZCkgeworICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBQ
dXRCeUlkKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXN0cnVjdHVyZS0+c3RvcmVk
UHJvdG90eXBlKCkuaXNOdWxsKCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRT
dHJ1Y3R1cmVUcmFuc2l0aW9uQ2hlY2soCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvZGVPcmlnaW4sIGluZGV4SW5CbG9jaywKQEAgLTI2NSwxOCArMjY0LDE4IEBAIHByaXZhdGU6
CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAg
ICAgICBOb2RlSW5kZXggcHJvcGVydHlTdG9yYWdlSW5kZXg7CisgICAgICAgICAgICAgICAgTm9k
ZSogcHJvcGVydHlTdG9yYWdlOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGlm
IChpc0lubGluZU9mZnNldChzdGF0dXMub2Zmc2V0KCkpKSB7Ci0gICAgICAgICAgICAgICAgICAg
IG1fZ3JhcGhbY2hpbGRdLnJlZigpOyAvLyBUaGUgY2hpbGQgd2lsbCBiZSB1c2VkIGFzIHRoZSBw
cm9wZXJ0eSBpbmRleCwgc28gcmVmIGl0IHRvIHJlZmxlY3QgdGhlIGRvdWJsZSB1c2UuCi0gICAg
ICAgICAgICAgICAgICAgIHByb3BlcnR5U3RvcmFnZUluZGV4ID0gY2hpbGQ7CisgICAgICAgICAg
ICAgICAgICAgIGNoaWxkLT5yZWYoKTsgLy8gVGhlIGNoaWxkIHdpbGwgYmUgdXNlZCBhcyB0aGUg
cHJvcGVydHkgaW5kZXgsIHNvIHJlZiBpdCB0byByZWZsZWN0IHRoZSBkb3VibGUgdXNlLgorICAg
ICAgICAgICAgICAgICAgICBwcm9wZXJ0eVN0b3JhZ2UgPSBjaGlsZDsKICAgICAgICAgICAgICAg
ICB9IGVsc2UgaWYgKHN0YXR1cy5pc1NpbXBsZVJlcGxhY2UoKSB8fCBzdHJ1Y3R1cmUtPm91dE9m
TGluZUNhcGFjaXR5KCkgPT0gc3RhdHVzLm5ld1N0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0
eSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHByb3BlcnR5U3RvcmFnZUluZGV4ID0gbV9pbnNl
cnRpb25TZXQuaW5zZXJ0Tm9kZSgKKyAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlTdG9yYWdl
ID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKICAgICAgICAgICAgICAgICAgICAgICAgIGlu
ZGV4SW5CbG9jaywgUmVmQ2hpbGRyZW4sIFJlZk5vZGUsIFNwZWNOb25lLCBHZXRCdXR0ZXJmbHks
IGNvZGVPcmlnaW4sIGNoaWxkKTsKICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFzdHJ1Y3R1
cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpIHsKICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKHN0
YXR1cy5uZXdTdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7CiAgICAgICAgICAgICAg
ICAgICAgIEFTU0VSVCghaXNJbmxpbmVPZmZzZXQoc3RhdHVzLm9mZnNldCgpKSk7Ci0gICAgICAg
ICAgICAgICAgICAgIHByb3BlcnR5U3RvcmFnZUluZGV4ID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0
Tm9kZSgKKyAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlTdG9yYWdlID0gbV9pbnNlcnRpb25T
ZXQuaW5zZXJ0Tm9kZSgKICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4SW5CbG9jaywgUmVm
Q2hpbGRyZW4sIFJlZk5vZGUsIFNwZWNOb25lLCBBbGxvY2F0ZVByb3BlcnR5U3RvcmFnZSwKICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvZGVPcmlnaW4sIE9wSW5mbyh0cmFuc2l0aW9uRGF0YSks
IGNoaWxkKTsKICAgICAgICAgICAgICAgICB9IGVsc2UgewpAQCAtMjg0LDcgKzI4Myw3IEBAIHBy
aXZhdGU6CiAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChzdGF0dXMubmV3U3RydWN0dXJlKCkt
Pm91dE9mTGluZUNhcGFjaXR5KCkgPiBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpOwog
ICAgICAgICAgICAgICAgICAgICBBU1NFUlQoIWlzSW5saW5lT2Zmc2V0KHN0YXR1cy5vZmZzZXQo
KSkpOwogICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlT
dG9yYWdlSW5kZXggPSBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAorICAgICAgICAgICAgICAg
ICAgICBwcm9wZXJ0eVN0b3JhZ2UgPSBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAogICAgICAg
ICAgICAgICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBSZWZDaGlsZHJlbiwgUmVmTm9kZSwgU3Bl
Y05vbmUsIFJlYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UsCiAgICAgICAgICAgICAgICAgICAgICAg
ICBjb2RlT3JpZ2luLCBPcEluZm8odHJhbnNpdGlvbkRhdGEpLAogICAgICAgICAgICAgICAgICAg
ICAgICAgY2hpbGQsCkBAIC0yOTksNyArMjk4LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAg
ICAgICAgICAgIE9wSW5mbyh0cmFuc2l0aW9uRGF0YSksIGNoaWxkKTsKICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgbV9ncmFwaFtub2RlSW5kZXhd
LmNvbnZlcnRUb1B1dEJ5T2Zmc2V0KG1fZ3JhcGgubV9zdG9yYWdlQWNjZXNzRGF0YS5zaXplKCks
IHByb3BlcnR5U3RvcmFnZUluZGV4KTsKKyAgICAgICAgICAgICAgICBub2RlLT5jb252ZXJ0VG9Q
dXRCeU9mZnNldChtX2dyYXBoLm1fc3RvcmFnZUFjY2Vzc0RhdGEuc2l6ZSgpLCBwcm9wZXJ0eVN0
b3JhZ2VJbmRleCk7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgU3RvcmFnZUFj
Y2Vzc0RhdGEgc3RvcmFnZUFjY2Vzc0RhdGE7CiAgICAgICAgICAgICAgICAgc3RvcmFnZUFjY2Vz
c0RhdGEub2Zmc2V0ID0gaW5kZXhSZWxhdGl2ZVRvQmFzZShzdGF0dXMub2Zmc2V0KCkpOwpAQCAt
MzIwLDczICszMTksNzEgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIG1fc3RhdGUuZXhlY3V0ZShp
bmRleEluQmxvY2spOwogICAgICAgICAgICAgaWYgKCFub2RlLnNob3VsZEdlbmVyYXRlKCkgfHwg
bV9zdGF0ZS5kaWRDbG9iYmVyKCkgfHwgbm9kZS5oYXNDb25zdGFudCgpKQogICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IG1fc3RhdGUuZm9yTm9k
ZShub2RlSW5kZXgpLnZhbHVlKCk7CisgICAgICAgICAgICBKU1ZhbHVlIHZhbHVlID0gbV9zdGF0
ZS5mb3JOb2RlKG5vZGUpLnZhbHVlKCk7CiAgICAgICAgICAgICBpZiAoIXZhbHVlKQogICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKG5v
ZGUub3AoKSA9PSBHZXRMb2NhbCkgewotICAgICAgICAgICAgICAgIE5vZGVJbmRleCBwcmV2aW91
c0xvY2FsQWNjZXNzID0gTm9Ob2RlOwotICAgICAgICAgICAgICAgIGlmIChibG9jay0+dmFyaWFi
bGVzQXRIZWFkLm9wZXJhbmQobm9kZS5sb2NhbCgpKSA9PSBub2RlSW5kZXgKLSAgICAgICAgICAg
ICAgICAgICAgJiYgbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5vcCgpID09IFBoaSkgeworICAgICAg
ICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gR2V0TG9jYWwpIHsKKyAgICAgICAgICAgICAgICBOb2Rl
KiBwcmV2aW91c0xvY2FsQWNjZXNzID0gMDsKKyAgICAgICAgICAgICAgICBpZiAoYmxvY2stPnZh
cmlhYmxlc0F0SGVhZC5vcGVyYW5kKG5vZGUtPmxvY2FsKCkpID09IG5vZGUKKyAgICAgICAgICAg
ICAgICAgICAgJiYgbm9kZS0+Y2hpbGQxKCktPm9wKCkgPT0gUGhpKSB7CiAgICAgICAgICAgICAg
ICAgICAgIC8vIFdlIGV4cGVjdCB0aGlzIHRvIGJlIHRoZSBjb21tb24gY2FzZS4KLSAgICAgICAg
ICAgICAgICAgICAgQVNTRVJUKGJsb2NrLT5pc0luUGhpcyhub2RlLmNoaWxkMSgpLmluZGV4KCkp
KTsKLSAgICAgICAgICAgICAgICAgICAgcHJldmlvdXNMb2NhbEFjY2VzcyA9IG5vZGUuY2hpbGQx
KCkuaW5kZXgoKTsKLSAgICAgICAgICAgICAgICAgICAgYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5v
cGVyYW5kKG5vZGUubG9jYWwoKSkgPSBwcmV2aW91c0xvY2FsQWNjZXNzOworICAgICAgICAgICAg
ICAgICAgICBBU1NFUlQoYmxvY2stPmlzSW5QaGlzKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSkpOwor
ICAgICAgICAgICAgICAgICAgICBwcmV2aW91c0xvY2FsQWNjZXNzID0gbm9kZS0+Y2hpbGQxKCku
bm9kZSgpOworICAgICAgICAgICAgICAgICAgICBibG9jay0+dmFyaWFibGVzQXRIZWFkLm9wZXJh
bmQobm9kZS0+bG9jYWwoKSkgPSBwcmV2aW91c0xvY2FsQWNjZXNzOwogICAgICAgICAgICAgICAg
IH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChpbmRleEluQmxvY2sgPiAwKTsK
ICAgICAgICAgICAgICAgICAgICAgLy8gTXVzdCBzZWFyY2ggZm9yIHRoZSBwcmV2aW91cyBhY2Nl
c3MgdG8gdGhpcyBsb2NhbC4KICAgICAgICAgICAgICAgICAgICAgZm9yIChCbG9ja0luZGV4IHN1
YkluZGV4SW5CbG9jayA9IGluZGV4SW5CbG9jazsgc3ViSW5kZXhJbkJsb2NrLS07KSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBOb2RlSW5kZXggc3ViTm9kZUluZGV4ID0gYmxvY2stPmF0KHN1
YkluZGV4SW5CbG9jayk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBOb2RlJiBzdWJOb2RlID0g
bV9ncmFwaFtzdWJOb2RlSW5kZXhdOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFzdWJO
b2RlLnNob3VsZEdlbmVyYXRlKCkpCisgICAgICAgICAgICAgICAgICAgICAgICBOb2RlKiBzdWJO
b2RlID0gYmxvY2stPmF0KHN1YkluZGV4SW5CbG9jayk7CisgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoIXN1Yk5vZGUtPnNob3VsZEdlbmVyYXRlKCkpCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXN1Yk5vZGUuaGFz
VmFyaWFibGVBY2Nlc3NEYXRhKCkpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXN1Yk5v
ZGUtPmhhc1ZhcmlhYmxlQWNjZXNzRGF0YSgpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN1Yk5vZGUubG9jYWwoKSAh
PSBub2RlLmxvY2FsKCkpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3ViTm9kZS0+bG9j
YWwoKSAhPSBub2RlLT5sb2NhbCgpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhlIHR3byBtdXN0IGhhdmUgYmVlbiB1
bmlmaWVkLgotICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKHN1Yk5vZGUudmFyaWFibGVB
Y2Nlc3NEYXRhKCkgPT0gbm9kZS52YXJpYWJsZUFjY2Vzc0RhdGEoKSk7CisgICAgICAgICAgICAg
ICAgICAgICAgICBBU1NFUlQoc3ViTm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCkgPT0gbm9kZS0+
dmFyaWFibGVBY2Nlc3NEYXRhKCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgcHJldmlvdXNM
b2NhbEFjY2VzcyA9IHN1Yk5vZGVJbmRleDsKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGlmIChwcmV2aW91
c0xvY2FsQWNjZXNzID09IE5vTm9kZSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoIXByZXZp
b3VzTG9jYWxBY2Nlc3MpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoZSBwcmV2aW91
cyBhY2Nlc3MgbXVzdCBoYXZlIGJlZW4gYSBQaGkuCiAgICAgICAgICAgICAgICAgICAgICAgICBm
b3IgKEJsb2NrSW5kZXggcGhpSW5kZXhJbkJsb2NrID0gYmxvY2stPnBoaXMuc2l6ZSgpOyBwaGlJ
bmRleEluQmxvY2stLTspIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb2RlSW5kZXgg
cGhpTm9kZUluZGV4ID0gYmxvY2stPnBoaXNbcGhpSW5kZXhJbkJsb2NrXTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBOb2RlJiBwaGlOb2RlID0gbV9ncmFwaFtwaGlOb2RlSW5kZXhdOwot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcGhpTm9kZS5zaG91bGRHZW5lcmF0ZSgp
KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vZGUqIHBoaU5vZGUgPSBibG9jay0+cGhp
c1twaGlJbmRleEluQmxvY2tdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcGhp
Tm9kZS0+c2hvdWxkR2VuZXJhdGUoKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBoaU5vZGUubG9jYWwo
KSAhPSBub2RlLmxvY2FsKCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBoaU5v
ZGUtPmxvY2FsKCkgIT0gbm9kZS0+bG9jYWwoKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhlIHR3byBt
dXN0IGhhdmUgYmVlbiB1bmlmaWVkLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VS
VChwaGlOb2RlLnZhcmlhYmxlQWNjZXNzRGF0YSgpID09IG5vZGUudmFyaWFibGVBY2Nlc3NEYXRh
KCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXZpb3VzTG9jYWxBY2Nlc3MgPSBw
aGlOb2RlSW5kZXg7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKHBoaU5vZGUt
PnZhcmlhYmxlQWNjZXNzRGF0YSgpID09IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2aW91c0xvY2FsQWNjZXNzID0gcGhpTm9kZTsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChwcmV2aW91c0xvY2FsQWNjZXNz
ICE9IE5vTm9kZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQocHJldmlvdXNMb2Nh
bEFjY2Vzcyk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIEFTU0VSVChwcmV2aW91c0xvY2FsQWNj
ZXNzICE9IE5vTm9kZSk7CisgICAgICAgICAgICAgICAgQVNTRVJUKHByZXZpb3VzTG9jYWxBY2Nl
c3MpOwogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIE5vZGVJbmRleCB0YWlsTm9k
ZUluZGV4ID0gYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKG5vZGUubG9jYWwoKSk7Ci0g
ICAgICAgICAgICAgICAgaWYgKHRhaWxOb2RlSW5kZXggPT0gbm9kZUluZGV4KQotICAgICAgICAg
ICAgICAgICAgICBibG9jay0+dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQobm9kZS5sb2NhbCgpKSA9
IHByZXZpb3VzTG9jYWxBY2Nlc3M7CisgICAgICAgICAgICAgICAgTm9kZSogdGFpbE5vZGUgPSBi
bG9jay0+dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQobm9kZS0+bG9jYWwoKSk7CisgICAgICAgICAg
ICAgICAgaWYgKHRhaWxOb2RlID09IG5vZGUpCisgICAgICAgICAgICAgICAgICAgIGJsb2NrLT52
YXJpYWJsZXNBdFRhaWwub3BlcmFuZChub2RlLT5sb2NhbCgpKSA9IHByZXZpb3VzTG9jYWxBY2Nl
c3M7CiAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIEFTU0VSVCgK
LSAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGhbdGFpbE5vZGVJbmRleF0ub3AoKSA9PSBG
bHVzaAotICAgICAgICAgICAgICAgICAgICAgICAgfHwgbV9ncmFwaFt0YWlsTm9kZUluZGV4XS5v
cCgpID09IFNldExvY2FsCi0gICAgICAgICAgICAgICAgICAgICAgICB8fCBpc0NhcHR1cmVkQXRP
ckFmdGVyKGJsb2NrLCBpbmRleEluQmxvY2ssIG5vZGUubG9jYWwoKSkpOworICAgICAgICAgICAg
ICAgICAgICAgICAgdGFpbE5vZGUtPm9wKCkgPT0gRmx1c2gKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHx8IHRhaWxOb2RlLT5vcCgpID09IFNldExvY2FsCisgICAgICAgICAgICAgICAgICAgICAg
ICB8fCBpc0NhcHR1cmVkQXRPckFmdGVyKGJsb2NrLCBpbmRleEluQmxvY2ssIG5vZGUtPmxvY2Fs
KCkpKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKLSAg
ICAgICAgICAgIENvZGVPcmlnaW4gY29kZU9yaWdpbiA9IG5vZGUuY29kZU9yaWdpbjsKLSAgICAg
ICAgICAgIEFkamFjZW5jeUxpc3QgY2hpbGRyZW4gPSBub2RlLmNoaWxkcmVuOworICAgICAgICAg
ICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2luID0gbm9kZS0+Y29kZU9yaWdpbjsKKyAgICAgICAgICAg
IEFkamFjZW5jeUxpc3QgY2hpbGRyZW4gPSBub2RlLT5jaGlsZHJlbjsKICAgICAgICAgICAgICAg
ICAKLSAgICAgICAgICAgIG1fZ3JhcGguY29udmVydFRvQ29uc3RhbnQobm9kZUluZGV4LCB2YWx1
ZSk7CisgICAgICAgICAgICBtX2dyYXBoLmNvbnZlcnRUb0NvbnN0YW50KG5vZGUsIHZhbHVlKTsK
ICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCiAgICAgICAgICAgICAgICAg
aW5kZXhJbkJsb2NrLCBEb250UmVmQ2hpbGRyZW4sIERvbnRSZWZOb2RlLCBTcGVjTm9uZSwgUGhh
bnRvbSwgY29kZU9yaWdpbiwgY2hpbGRyZW4pOwotICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgCiAgICAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKICAgICAgICAgfQogICAgICAgICBtX3N0
YXRlLnJlc2V0KCk7CkBAIC0zOTksMTIgKzM5NiwxMiBAQCBwcml2YXRlOgogICAgIGJvb2wgaXND
YXB0dXJlZEF0T3JBZnRlcihCYXNpY0Jsb2NrKiBibG9jaywgdW5zaWduZWQgaW5kZXhJbkJsb2Nr
LCBpbnQgb3BlcmFuZCkKICAgICB7CiAgICAgICAgIGZvciAoOyBpbmRleEluQmxvY2sgPCBibG9j
ay0+c2l6ZSgpOyArK2luZGV4SW5CbG9jaykgewotICAgICAgICAgICAgTm9kZSYgbm9kZSA9IG1f
Z3JhcGhbYmxvY2stPmF0KGluZGV4SW5CbG9jayldOwotICAgICAgICAgICAgaWYgKCFub2RlLmhh
c0xvY2FsKCkpCisgICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPmF0KGluZGV4SW5CbG9j
ayk7CisgICAgICAgICAgICBpZiAoIW5vZGUtPmhhc0xvY2FsKCkpCiAgICAgICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgICAgICBpZiAobm9kZS5sb2NhbCgpICE9IG9wZXJhbmQpCisgICAg
ICAgICAgICBpZiAobm9kZS0+bG9jYWwoKSAhPSBvcGVyYW5kKQogICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwotICAgICAgICAgICAgaWYgKG5vZGUudmFyaWFibGVBY2Nlc3NEYXRhKCktPmlzQ2Fw
dHVyZWQoKSkKKyAgICAgICAgICAgIGlmIChub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+aXND
YXB0dXJlZCgpKQogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAg
ICAgIHJldHVybiBmYWxzZTsKQEAgLTQxMywyMCArNDEwLDIwIEBAIHByaXZhdGU6CiAgICAgCiAg
ICAgdm9pZCBhZGRTdHJ1Y3R1cmVUcmFuc2l0aW9uQ2hlY2soQ29kZU9yaWdpbiBjb2RlT3JpZ2lu
LCB1bnNpZ25lZCBpbmRleEluQmxvY2ssIEpTQ2VsbCogY2VsbCkKICAgICB7Ci0gICAgICAgIE5v
ZGVJbmRleCB3ZWFrQ29uc3RhbnRJbmRleCA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCisg
ICAgICAgIE5vZGUqIHdlYWtDb25zdGFudCA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCiAg
ICAgICAgICAgICBpbmRleEluQmxvY2ssIERvbnRSZWZDaGlsZHJlbiwgRG9udFJlZk5vZGUsIHNw
ZWN1bGF0aW9uRnJvbVZhbHVlKGNlbGwpLAogICAgICAgICAgICAgV2Vha0pTQ29uc3RhbnQsIGNv
ZGVPcmlnaW4sIE9wSW5mbyhjZWxsKSk7CiAgICAgICAgIAogICAgICAgICBpZiAoY2VsbC0+c3Ry
dWN0dXJlKCktPnRyYW5zaXRpb25XYXRjaHBvaW50U2V0SXNTdGlsbFZhbGlkKCkpIHsKICAgICAg
ICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCiAgICAgICAgICAgICAgICAgaW5kZXhJ
bkJsb2NrLCBSZWZDaGlsZHJlbiwgRG9udFJlZk5vZGUsIFNwZWNOb25lLCBTdHJ1Y3R1cmVUcmFu
c2l0aW9uV2F0Y2hwb2ludCwKLSAgICAgICAgICAgICAgICBjb2RlT3JpZ2luLCBPcEluZm8oY2Vs
bC0+c3RydWN0dXJlKCkpLCB3ZWFrQ29uc3RhbnRJbmRleCk7CisgICAgICAgICAgICAgICAgY29k
ZU9yaWdpbiwgT3BJbmZvKGNlbGwtPnN0cnVjdHVyZSgpKSwgd2Vha0NvbnN0YW50KTsKICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgfQogCiAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2Vy
dE5vZGUoCiAgICAgICAgICAgICBpbmRleEluQmxvY2ssIFJlZkNoaWxkcmVuLCBEb250UmVmTm9k
ZSwgU3BlY05vbmUsIENoZWNrU3RydWN0dXJlLCBjb2RlT3JpZ2luLAotICAgICAgICAgICAgT3BJ
bmZvKG1fZ3JhcGguYWRkU3RydWN0dXJlU2V0KGNlbGwtPnN0cnVjdHVyZSgpKSksIHdlYWtDb25z
dGFudEluZGV4KTsKKyAgICAgICAgICAgIE9wSW5mbyhtX2dyYXBoLmFkZFN0cnVjdHVyZVNldChj
ZWxsLT5zdHJ1Y3R1cmUoKSkpLCB3ZWFrQ29uc3RhbnQpOwogICAgIH0KICAgICAKICAgICAvLyBU
aGlzIGlzIG5lY2Vzc2FyeSBiZWNhdXNlIHRoZSBDRkEgbWF5IHJlYWNoIGNvbmNsdXNpb25zIGFi
b3V0IGNvbnN0YW50cyBiYXNlZCBvbiBpdHMKQEAgLTQ1MSw5ICs0NDgsOCBAQCBwcml2YXRlOgog
ICAgICAgICAgICAgaWYgKG1fc3RhdGUuaXNWYWxpZCgpKQogICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4ID0gYmxv
Y2stPmF0KGluZGV4SW5CbG9jayk7Ci0gICAgICAgICAgICBOb2RlJiBub2RlID0gbV9ncmFwaFtu
b2RlSW5kZXhdOwotICAgICAgICAgICAgc3dpdGNoIChub2RlLm9wKCkpIHsKKyAgICAgICAgICAg
IE5vZGUqIG5vZGUgPSBibG9jay0+YXQoaW5kZXhJbkJsb2NrKTsKKyAgICAgICAgICAgIHN3aXRj
aCAobm9kZS0+b3AoKSkgewogICAgICAgICAgICAgY2FzZSBSZXR1cm46CiAgICAgICAgICAgICBj
YXNlIFRocm93OgogICAgICAgICAgICAgY2FzZSBUaHJvd1JlZmVyZW5jZUVycm9yOgpAQCAtNDY0
LDcgKzQ2MCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAg
ICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCiAgICAgICAgICAgICAgICAgICAgIGluZGV4
SW5CbG9jaywgRG9udFJlZkNoaWxkcmVuLCBEb250UmVmTm9kZSwgU3BlY05vbmUsIEZvcmNlT1NS
RXhpdCwKLSAgICAgICAgICAgICAgICAgICAgbm9kZS5jb2RlT3JpZ2luKTsKKyAgICAgICAgICAg
ICAgICAgICAgbm9kZS0+Y29kZU9yaWdpbik7CiAgICAgICAgICAgICAgICAgY2hhbmdlZCA9IHRy
dWU7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0VkZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHRWRnZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0VkZ2UuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQxIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJERkdFZGdlLmgiCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKwor
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCit2b2lkIEVkZ2U6OmR1bXAoUHJpbnRT
dHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQodXNlS2luZFRvU3RyaW5nKHVzZUtp
bmQoKSksIG5vZGUoKSk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlm
IC8vIEVOQUJMRShERkdfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0VkZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0VkZ2Uu
aAkocmV2aXNpb24gMTQwNjE2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdFZGdl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
MSwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTQzLDQxICs0MywzOSBAQCBwdWJsaWM6CiAgICAgewogICAgIH0K
ICAgICAKLSAgICBleHBsaWNpdCBFZGdlKE5vZGVJbmRleCBub2RlSW5kZXgpCi0gICAgICAgIDog
bV9lbmNvZGVkV29yZChtYWtlV29yZChub2RlSW5kZXgsIFVudHlwZWRVc2UpKQorICAgIGV4cGxp
Y2l0IEVkZ2UoTm9kZSogbm9kZSkKKyAgICAgICAgOiBtX2VuY29kZWRXb3JkKG1ha2VXb3JkKG5v
ZGUsIFVudHlwZWRVc2UpKQogICAgIHsKICAgICB9CiAgICAgCi0gICAgRWRnZShOb2RlSW5kZXgg
bm9kZUluZGV4LCBVc2VLaW5kIHVzZUtpbmQpCi0gICAgICAgIDogbV9lbmNvZGVkV29yZChtYWtl
V29yZChub2RlSW5kZXgsIHVzZUtpbmQpKQorICAgIEVkZ2UoTm9kZSogbm9kZSwgVXNlS2luZCB1
c2VLaW5kKQorICAgICAgICA6IG1fZW5jb2RlZFdvcmQobWFrZVdvcmQobm9kZSwgdXNlS2luZCkp
CiAgICAgewogICAgIH0KICAgICAKLSAgICBOb2RlSW5kZXggaW5kZXhVbmNoZWNrZWQoKSBjb25z
dCB7IHJldHVybiBtX2VuY29kZWRXb3JkID4+IHNoaWZ0KCk7IH0KLSAgICBOb2RlSW5kZXggaW5k
ZXgoKSBjb25zdAotICAgIHsKLSAgICAgICAgQVNTRVJUKGlzU2V0KCkpOwotICAgICAgICByZXR1
cm4gbV9lbmNvZGVkV29yZCA+PiBzaGlmdCgpOwotICAgIH0KLSAgICB2b2lkIHNldEluZGV4KE5v
ZGVJbmRleCBub2RlSW5kZXgpCisgICAgTm9kZSogbm9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fZW5j
b2RlZFdvcmQgJiB+KCgxIDw8IHNoaWZ0KCkpIC0gMSk7IH0KKyAgICBOb2RlJiBvcGVyYXRvcioo
KSBjb25zdCB7IHJldHVybiAqZ2V0KCk7IH0KKyAgICBOb2RlKiBvcGVyYXRvci0+KCkgY29uc3Qg
eyByZXR1cm4gZ2V0KCk7IH0KKyAgICAKKyAgICB2b2lkIHNldE5vZGUoTm9kZSogbm9kZSkKICAg
ICB7Ci0gICAgICAgIG1fZW5jb2RlZFdvcmQgPSBtYWtlV29yZChub2RlSW5kZXgsIHVzZUtpbmQo
KSk7CisgICAgICAgIG1fZW5jb2RlZFdvcmQgPSBtYWtlV29yZChub2RlLCB1c2VLaW5kKCkpOwog
ICAgIH0KICAgICAKICAgICBVc2VLaW5kIHVzZUtpbmQoKSBjb25zdAogICAgIHsKLSAgICAgICAg
QVNTRVJUKGlzU2V0KCkpOworICAgICAgICBBU1NFUlQobm9kZSgpKTsKICAgICAgICAgdW5zaWdu
ZWQgbWFza2VkID0gbV9lbmNvZGVkV29yZCAmICgoKDEgPDwgc2hpZnQoKSkgLSAxKSk7CiAgICAg
ICAgIEFTU0VSVChtYXNrZWQgPCBMYXN0VXNlS2luZCk7CiAgICAgICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxVc2VLaW5kPihtYXNrZWQpOwogICAgIH0KICAgICB2b2lkIHNldFVzZUtpbmQoVXNlS2lu
ZCB1c2VLaW5kKQogICAgIHsKLSAgICAgICAgQVNTRVJUKGlzU2V0KCkpOwotICAgICAgICBtX2Vu
Y29kZWRXb3JkID0gbWFrZVdvcmQoaW5kZXgoKSwgdXNlS2luZCk7CisgICAgICAgIEFTU0VSVChu
b2RlKCkpOworICAgICAgICBtX2VuY29kZWRXb3JkID0gbWFrZVdvcmQobm9kZSgpLCB1c2VLaW5k
KTsKICAgICB9CiAgICAgCi0gICAgYm9vbCBpc1NldCgpIGNvbnN0IHsgcmV0dXJuIGluZGV4VW5j
aGVja2VkKCkgIT0gTm9Ob2RlOyB9CisgICAgYm9vbCBpc1NldCgpIGNvbnN0IHsgcmV0dXJuICEh
bm9kZSgpOyB9CiAgICAgCiAgICAgdHlwZWRlZiB2b2lkKiBFZGdlOjoqVW5zcGVjaWZpZWRCb29s
VHlwZTsKICAgICBvcGVyYXRvciBVbnNwZWNpZmllZEJvb2xUeXBlKigpIGNvbnN0IHsgcmV0dXJu
IHJlaW50ZXJwcmV0X2Nhc3Q8VW5zcGVjaWZpZWRCb29sVHlwZSo+KGlzU2V0KCkpOyB9CkBAIC05
MiwzOCArOTAsNDEgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgcmV0dXJuIG1fZW5jb2RlZFdv
cmQgIT0gb3RoZXIubV9lbmNvZGVkV29yZDsKICAgICB9CisgICAgCisgICAgdm9pZCBkdW1wKFBy
aW50U3RyZWFtJikgY29uc3Q7CiAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIEFkamFjZW5j
eUxpc3Q7CiAgICAgCi0gICAgc3RhdGljIHVpbnQzMl90IHNoaWZ0KCkgeyByZXR1cm4gNDsgfQor
ICAgIHN0YXRpYyB1aW50MzJfdCBzaGlmdCgpIHsgcmV0dXJuIDI7IH0KICAgICAKLSAgICBzdGF0
aWMgaW50MzJfdCBtYWtlV29yZChOb2RlSW5kZXggbm9kZUluZGV4LCBVc2VLaW5kIHVzZUtpbmQp
CisgICAgc3RhdGljIHVpbnRwdHJfdCBtYWtlV29yZChOb2RlKiBub2RlLCBVc2VLaW5kIHVzZUtp
bmQpCiAgICAgewotICAgICAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8dWludDMyX3Q+KCgoc3RhdGlj
X2Nhc3Q8aW50MzJfdD4obm9kZUluZGV4KSA8PCBzaGlmdCgpKSA+PiBzaGlmdCgpKSkgPT0gbm9k
ZUluZGV4KTsKKyAgICAgICAgdWludHB0cl90IHZhbHVlID0gYml0d2lzZV9jYXN0PHVpbnRwdHJf
dD4obm9kZSk7CisgICAgICAgIEFTU0VSVCghKHZhbHVlICYgKCgxIDw8IHNoaWZ0KCkpIC0gMSkp
KTsKICAgICAgICAgQVNTRVJUKHVzZUtpbmQgPj0gMCAmJiB1c2VLaW5kIDwgTGFzdFVzZUtpbmQp
OwogICAgICAgICBBU1NFUlQoTGFzdFVzZUtpbmQgPD0gKDEgPDwgc2hpZnQoKSkpOwotICAgICAg
ICByZXR1cm4gKG5vZGVJbmRleCA8PCBzaGlmdCgpKSB8IHVzZUtpbmQ7CisgICAgICAgIHJldHVy
biB2YWx1ZSB8IHN0YXRpY19jYXN0PHVpbnRwdHJfdD4odXNlS2luZCk7CiAgICAgfQogICAgIAot
ICAgIGludDMyX3QgbV9lbmNvZGVkV29yZDsKKyAgICB1aW50cHRyX3QgbV9lbmNvZGVkV29yZDsK
IH07CiAKLWlubGluZSBib29sIG9wZXJhdG9yPT0oRWRnZSBub2RlVXNlLCBOb2RlSW5kZXggbm9k
ZUluZGV4KQoraW5saW5lIGJvb2wgb3BlcmF0b3I9PShFZGdlIGVkZ2UsIE5vZGUqIG5vZGUpCiB7
Ci0gICAgcmV0dXJuIG5vZGVVc2UuaW5kZXhVbmNoZWNrZWQoKSA9PSBub2RlSW5kZXg7CisgICAg
cmV0dXJuIGVkZ2Uubm9kZSgpID09IG5vZGU7CiB9Ci1pbmxpbmUgYm9vbCBvcGVyYXRvcj09KE5v
ZGVJbmRleCBub2RlSW5kZXgsIEVkZ2Ugbm9kZVVzZSkKK2lubGluZSBib29sIG9wZXJhdG9yPT0o
Tm9kZSogbm9kZSwgRWRnZSBlZGdlKQogewotICAgIHJldHVybiBub2RlVXNlLmluZGV4VW5jaGVj
a2VkKCkgPT0gbm9kZUluZGV4OworICAgIHJldHVybiBlZGdlLm5vZGUoKSA9PSBub2RlOwogfQot
aW5saW5lIGJvb2wgb3BlcmF0b3IhPShFZGdlIG5vZGVVc2UsIE5vZGVJbmRleCBub2RlSW5kZXgp
CitpbmxpbmUgYm9vbCBvcGVyYXRvciE9KEVkZ2UgZWRnZSwgTm9kZSogbm9kZSkKIHsKLSAgICBy
ZXR1cm4gbm9kZVVzZS5pbmRleFVuY2hlY2tlZCgpICE9IG5vZGVJbmRleDsKKyAgICByZXR1cm4g
ZWRnZS5ub2RlKCkgIT0gbm9kZTsKIH0KLWlubGluZSBib29sIG9wZXJhdG9yIT0oTm9kZUluZGV4
IG5vZGVJbmRleCwgRWRnZSBub2RlVXNlKQoraW5saW5lIGJvb2wgb3BlcmF0b3IhPShOb2RlKiBu
b2RlLCBFZGdlIGVkZ2UpCiB7Ci0gICAgcmV0dXJuIG5vZGVVc2UuaW5kZXhVbmNoZWNrZWQoKSAh
PSBub2RlSW5kZXg7CisgICAgcmV0dXJuIGVkZ2Uubm9kZSgpICE9IG5vZGU7CiB9CiAKIH0gfSAv
LyBuYW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Rml4dXBQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdGaXh1cFBoYXNlLmNwcAkocmV2aXNpb24gMTQwNjE2KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTgsMjEgKzU4LDIxIEBA
IHByaXZhdGU6CiAgICAgICAgIEFTU0VSVChibG9jay0+aXNSZWFjaGFibGUpOwogICAgICAgICBt
X2Jsb2NrID0gYmxvY2s7CiAgICAgICAgIGZvciAobV9pbmRleEluQmxvY2sgPSAwOyBtX2luZGV4
SW5CbG9jayA8IGJsb2NrLT5zaXplKCk7ICsrbV9pbmRleEluQmxvY2spIHsKLSAgICAgICAgICAg
IG1fY29tcGlsZUluZGV4ID0gYmxvY2stPmF0KG1faW5kZXhJbkJsb2NrKTsKLSAgICAgICAgICAg
IGZpeHVwTm9kZShtX2dyYXBoW21fY29tcGlsZUluZGV4XSk7CisgICAgICAgICAgICBtX2N1cnJl
bnROb2RlID0gYmxvY2stPmF0KG1faW5kZXhJbkJsb2NrKTsKKyAgICAgICAgICAgIGZpeHVwTm9k
ZShtX2N1cnJlbnROb2RlKTsKICAgICAgICAgfQogICAgICAgICBtX2luc2VydGlvblNldC5leGVj
dXRlKGJsb2NrKTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBmaXh1cE5vZGUoTm9kZSYgbm9kZSkK
KyAgICB2b2lkIGZpeHVwTm9kZShOb2RlKiBub2RlKQogICAgIHsKLSAgICAgICAgaWYgKCFub2Rl
LnNob3VsZEdlbmVyYXRlKCkpCisgICAgICAgIGlmICghbm9kZS0+c2hvdWxkR2VuZXJhdGUoKSkK
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgCi0gICAgICAgIE5vZGVUeXBlIG9wID0gbm9k
ZS5vcCgpOworICAgICAgICBOb2RlVHlwZSBvcCA9IG5vZGUtPm9wKCk7CiAKICNpZiBERkdfRU5B
QkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCi0gICAgICAgIGRhdGFMb2dGKCIgICAlcyBA
JXU6ICIsIEdyYXBoOjpvcE5hbWUob3ApLCBtX2NvbXBpbGVJbmRleCk7CisgICAgICAgIGRhdGFM
b2dGKCIgICAlcyBAJXU6ICIsIEdyYXBoOjpvcE5hbWUob3ApLCBub2RlLT5pbmRleCgpKTsKICNl
bmRpZgogICAgICAgICAKICAgICAgICAgc3dpdGNoIChvcCkgewpAQCAtODAsODAgKzgwLDcxIEBA
IHByaXZhdGU6CiAgICAgICAgICAgICBpZiAobV9ncmFwaC5tX2ZpeHBvaW50U3RhdGUgPiBCZWZv
cmVGaXhwb2ludCkKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIAotICAgICAg
ICAgICAgTm9kZSogbm9kZVB0ciA9ICZub2RlOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBp
ZiAoIWlzSW50MzJTcGVjdWxhdGlvbihtX2dyYXBoW21fY29tcGlsZUluZGV4XS5wcmVkaWN0aW9u
KCkpKQorICAgICAgICAgICAgaWYgKCFpc0ludDMyU3BlY3VsYXRpb24obm9kZS0+cHJlZGljdGlv
bigpKSkKICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGlmIChjb2RlQmxvY2so
KS0+aWRlbnRpZmllcihub2RlUHRyLT5pZGVudGlmaWVyTnVtYmVyKCkpICE9IGdsb2JhbERhdGEo
KS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgpCisgICAgICAgICAgICBpZiAoY29kZUJsb2NrKCktPmlk
ZW50aWZpZXIobm9kZS0+aWRlbnRpZmllck51bWJlcigpKSAhPSBnbG9iYWxEYXRhKCkucHJvcGVy
dHlOYW1lcy0+bGVuZ3RoKQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgQXJy
YXlQcm9maWxlKiBhcnJheVByb2ZpbGUgPSAKLSAgICAgICAgICAgICAgICBtX2dyYXBoLmJhc2Vs
aW5lQ29kZUJsb2NrRm9yKG5vZGVQdHItPmNvZGVPcmlnaW4pLT5nZXRBcnJheVByb2ZpbGUoCi0g
ICAgICAgICAgICAgICAgICAgIG5vZGVQdHItPmNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCk7Cisg
ICAgICAgICAgICAgICAgbV9ncmFwaC5iYXNlbGluZUNvZGVCbG9ja0Zvcihub2RlLT5jb2RlT3Jp
Z2luKS0+Z2V0QXJyYXlQcm9maWxlKAorICAgICAgICAgICAgICAgICAgICBub2RlLT5jb2RlT3Jp
Z2luLmJ5dGVjb2RlSW5kZXgpOwogICAgICAgICAgICAgQXJyYXlNb2RlIGFycmF5TW9kZSA9IEFy
cmF5TW9kZShBcnJheTo6U2VsZWN0VXNpbmdQcmVkaWN0aW9ucyk7CiAgICAgICAgICAgICBpZiAo
YXJyYXlQcm9maWxlKSB7Ci0gICAgICAgICAgICAgICAgYXJyYXlQcm9maWxlLT5jb21wdXRlVXBk
YXRlZFByZWRpY3Rpb24obV9ncmFwaC5iYXNlbGluZUNvZGVCbG9ja0Zvcihub2RlLmNvZGVPcmln
aW4pKTsKKyAgICAgICAgICAgICAgICBhcnJheVByb2ZpbGUtPmNvbXB1dGVVcGRhdGVkUHJlZGlj
dGlvbihtX2dyYXBoLmJhc2VsaW5lQ29kZUJsb2NrRm9yKG5vZGUtPmNvZGVPcmlnaW4pKTsKICAg
ICAgICAgICAgICAgICBhcnJheU1vZGUgPSBBcnJheU1vZGU6OmZyb21PYnNlcnZlZChhcnJheVBy
b2ZpbGUsIEFycmF5OjpSZWFkLCBmYWxzZSk7CiAgICAgICAgICAgICAgICAgYXJyYXlNb2RlID0g
YXJyYXlNb2RlLnJlZmluZSgKLSAgICAgICAgICAgICAgICAgICAgbV9ncmFwaFtub2RlLmNoaWxk
MSgpXS5wcmVkaWN0aW9uKCksCi0gICAgICAgICAgICAgICAgICAgIG1fZ3JhcGhbbV9jb21waWxl
SW5kZXhdLnByZWRpY3Rpb24oKSk7CisgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgp
LT5wcmVkaWN0aW9uKCksIG5vZGUtPnByZWRpY3Rpb24oKSk7CiAgICAgICAgICAgICAgICAgaWYg
KGFycmF5TW9kZS5zdXBwb3J0c0xlbmd0aCgpICYmIGFycmF5UHJvZmlsZS0+aGFzRGVmaW5pdGVT
dHJ1Y3R1cmUoKSkgewogICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnRO
b2RlKAogICAgICAgICAgICAgICAgICAgICAgICAgbV9pbmRleEluQmxvY2ssIFJlZkNoaWxkcmVu
LCBEb250UmVmTm9kZSwgU3BlY05vbmUsIENoZWNrU3RydWN0dXJlLAotICAgICAgICAgICAgICAg
ICAgICAgICAgbm9kZVB0ci0+Y29kZU9yaWdpbiwgT3BJbmZvKG1fZ3JhcGguYWRkU3RydWN0dXJl
U2V0KGFycmF5UHJvZmlsZS0+ZXhwZWN0ZWRTdHJ1Y3R1cmUoKSkpLAotICAgICAgICAgICAgICAg
ICAgICAgICAgbm9kZVB0ci0+Y2hpbGQxKCkuaW5kZXgoKSk7Ci0gICAgICAgICAgICAgICAgICAg
IG5vZGVQdHIgPSAmbV9ncmFwaFttX2NvbXBpbGVJbmRleF07CisgICAgICAgICAgICAgICAgICAg
ICAgICBub2RlLT5jb2RlT3JpZ2luLCBPcEluZm8obV9ncmFwaC5hZGRTdHJ1Y3R1cmVTZXQoYXJy
YXlQcm9maWxlLT5leHBlY3RlZFN0cnVjdHVyZSgpKSksCisgICAgICAgICAgICAgICAgICAgICAg
ICBub2RlLT5jaGlsZDEoKS5ub2RlKCkpOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgYXJyYXlNb2RlID0gYXJyYXlNb2RlLnJlZmluZSgK
LSAgICAgICAgICAgICAgICAgICAgbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5wcmVkaWN0aW9uKCks
Ci0gICAgICAgICAgICAgICAgICAgIG1fZ3JhcGhbbV9jb21waWxlSW5kZXhdLnByZWRpY3Rpb24o
KSk7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICBh
cnJheU1vZGUgPSBhcnJheU1vZGUucmVmaW5lKG5vZGUtPmNoaWxkMSgpLT5wcmVkaWN0aW9uKCks
IG5vZGUtPnByZWRpY3Rpb24oKSk7CiAgICAgICAgICAgICBpZiAoIWFycmF5TW9kZS5zdXBwb3J0
c0xlbmd0aCgpKQogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgbm9kZVB0ci0+
c2V0T3AoR2V0QXJyYXlMZW5ndGgpOwotICAgICAgICAgICAgQVNTRVJUKG5vZGVQdHItPmZsYWdz
KCkgJiBOb2RlTXVzdEdlbmVyYXRlKTsKLSAgICAgICAgICAgIG5vZGVQdHItPmNsZWFyRmxhZ3Mo
Tm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVDbG9iYmVyc1dvcmxkKTsKLSAgICAgICAgICAgIG1fZ3Jh
cGguZGVyZWYobV9jb21waWxlSW5kZXgpOwotICAgICAgICAgICAgbm9kZVB0ci0+c2V0QXJyYXlN
b2RlKGFycmF5TW9kZSk7CisgICAgICAgICAgICBub2RlLT5zZXRPcChHZXRBcnJheUxlbmd0aCk7
CisgICAgICAgICAgICBBU1NFUlQobm9kZS0+ZmxhZ3MoKSAmIE5vZGVNdXN0R2VuZXJhdGUpOwor
ICAgICAgICAgICAgbm9kZS0+Y2xlYXJGbGFncyhOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZUNsb2Ji
ZXJzV29ybGQpOworICAgICAgICAgICAgbV9ncmFwaC5kZXJlZihub2RlKTsKKyAgICAgICAgICAg
IG5vZGUtPnNldEFycmF5TW9kZShhcnJheU1vZGUpOwogICAgICAgICAgICAgCi0gICAgICAgICAg
ICBOb2RlSW5kZXggc3RvcmFnZSA9IGNoZWNrQXJyYXkoYXJyYXlNb2RlLCBub2RlUHRyLT5jb2Rl
T3JpZ2luLCBub2RlUHRyLT5jaGlsZDEoKS5pbmRleCgpLCBOb05vZGUsIGxlbmd0aE5lZWRzU3Rv
cmFnZSwgbm9kZVB0ci0+c2hvdWxkR2VuZXJhdGUoKSk7Ci0gICAgICAgICAgICBpZiAoc3RvcmFn
ZSA9PSBOb05vZGUpCisgICAgICAgICAgICBOb2RlKiBzdG9yYWdlID0gY2hlY2tBcnJheShhcnJh
eU1vZGUsIG5vZGUtPmNvZGVPcmlnaW4sIG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgMCwgbGVuZ3Ro
TmVlZHNTdG9yYWdlLCBub2RlLT5zaG91bGRHZW5lcmF0ZSgpKTsKKyAgICAgICAgICAgIGlmICgh
c3RvcmFnZSkKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIAotICAgICAgICAg
ICAgbm9kZVB0ciA9ICZtX2dyYXBoW21fY29tcGlsZUluZGV4XTsKLSAgICAgICAgICAgIG5vZGVQ
dHItPmNoaWxkcmVuLmNoaWxkMigpID0gRWRnZShzdG9yYWdlKTsKKyAgICAgICAgICAgIG5vZGUt
PmNoaWxkcmVuLmNoaWxkMigpID0gRWRnZShzdG9yYWdlKTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICB9CiAgICAgICAgIGNhc2UgR2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZTogewotICAg
ICAgICAgICAgQVNTRVJUKG5vZGUuYXJyYXlNb2RlKCkuY2FuQ1NFU3RvcmFnZSgpKTsKKyAgICAg
ICAgICAgIEFTU0VSVChub2RlLT5hcnJheU1vZGUoKS5jYW5DU0VTdG9yYWdlKCkpOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBHZXRCeVZhbDogewotICAgICAg
ICAgICAgbm9kZS5zZXRBcnJheU1vZGUoCi0gICAgICAgICAgICAgICAgbm9kZS5hcnJheU1vZGUo
KS5yZWZpbmUoCi0gICAgICAgICAgICAgICAgICAgIG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ucHJl
ZGljdGlvbigpLAotICAgICAgICAgICAgICAgICAgICBtX2dyYXBoW25vZGUuY2hpbGQyKCldLnBy
ZWRpY3Rpb24oKSwKLSAgICAgICAgICAgICAgICAgICAgU3BlY05vbmUsIG5vZGUuZmxhZ3MoKSkp
OworICAgICAgICAgICAgbm9kZS0+c2V0QXJyYXlNb2RlKAorICAgICAgICAgICAgICAgIG5vZGUt
PmFycmF5TW9kZSgpLnJlZmluZSgKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkt
PnByZWRpY3Rpb24oKSwKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQyKCktPnByZWRp
Y3Rpb24oKSwKKyAgICAgICAgICAgICAgICAgICAgU3BlY05vbmUsIG5vZGUtPmZsYWdzKCkpKTsK
ICAgICAgICAgICAgIAotICAgICAgICAgICAgYmxlc3NBcnJheU9wZXJhdGlvbihub2RlLmNoaWxk
MSgpLCBub2RlLmNoaWxkMigpLCAyKTsKKyAgICAgICAgICAgIGJsZXNzQXJyYXlPcGVyYXRpb24o
bm9kZS0+Y2hpbGQxKCksIG5vZGUtPmNoaWxkMigpLCAyKTsKICAgICAgICAgICAgIAotICAgICAg
ICAgICAgTm9kZSogbm9kZVB0ciA9ICZtX2dyYXBoW21fY29tcGlsZUluZGV4XTsKLSAgICAgICAg
ICAgIEFycmF5TW9kZSBhcnJheU1vZGUgPSBub2RlUHRyLT5hcnJheU1vZGUoKTsKKyAgICAgICAg
ICAgIEFycmF5TW9kZSBhcnJheU1vZGUgPSBub2RlLT5hcnJheU1vZGUoKTsKICAgICAgICAgICAg
IGlmIChhcnJheU1vZGUudHlwZSgpID09IEFycmF5OjpEb3VibGUKICAgICAgICAgICAgICAgICAm
JiBhcnJheU1vZGUuYXJyYXlDbGFzcygpID09IEFycmF5OjpPcmlnaW5hbEFycmF5CiAgICAgICAg
ICAgICAgICAgJiYgYXJyYXlNb2RlLnNwZWN1bGF0aW9uKCkgPT0gQXJyYXk6OkluQm91bmRzCiAg
ICAgICAgICAgICAgICAgJiYgYXJyYXlNb2RlLmNvbnZlcnNpb24oKSA9PSBBcnJheTo6QXNJcwot
ICAgICAgICAgICAgICAgICYmIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGVQdHItPmNvZGVP
cmlnaW4pLT5hcnJheVByb3RvdHlwZUNoYWluSXNTYW5lKCkKLSAgICAgICAgICAgICAgICAmJiAh
KG5vZGVQdHItPmZsYWdzKCkgJiBOb2RlVXNlZEFzT3RoZXIpKQotICAgICAgICAgICAgICAgIG5v
ZGVQdHItPnNldEFycmF5TW9kZShhcnJheU1vZGUud2l0aFNwZWN1bGF0aW9uKEFycmF5OjpTYW5l
Q2hhaW4pKTsKKyAgICAgICAgICAgICAgICAmJiBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2Rl
LT5jb2RlT3JpZ2luKS0+YXJyYXlQcm90b3R5cGVDaGFpbklzU2FuZSgpCisgICAgICAgICAgICAg
ICAgJiYgIShub2RlLT5mbGFncygpICYgTm9kZVVzZWRBc090aGVyKSkKKyAgICAgICAgICAgICAg
ICBub2RlLT5zZXRBcnJheU1vZGUoYXJyYXlNb2RlLndpdGhTcGVjdWxhdGlvbihBcnJheTo6U2Fu
ZUNoYWluKSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAg
ICAgICAgIGNhc2UgU3RyaW5nQ2hhckF0OgogICAgICAgICBjYXNlIFN0cmluZ0NoYXJDb2RlQXQ6
IHsKICAgICAgICAgICAgIC8vIEN1cnJlbnRseSB3ZSBoYXZlIG5vIGdvb2Qgd2F5IG9mIHJlZmlu
aW5nIHRoZXNlLgotICAgICAgICAgICAgQVNTRVJUKG5vZGUuYXJyYXlNb2RlKCkgPT0gQXJyYXlN
b2RlKEFycmF5OjpTdHJpbmcpKTsKLSAgICAgICAgICAgIGJsZXNzQXJyYXlPcGVyYXRpb24obm9k
ZS5jaGlsZDEoKSwgbm9kZS5jaGlsZDIoKSwgMik7CisgICAgICAgICAgICBBU1NFUlQobm9kZS0+
YXJyYXlNb2RlKCkgPT0gQXJyYXlNb2RlKEFycmF5OjpTdHJpbmcpKTsKKyAgICAgICAgICAgIGJs
ZXNzQXJyYXlPcGVyYXRpb24obm9kZS0+Y2hpbGQxKCksIG5vZGUtPmNoaWxkMigpLCAyKTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKQEAgLTE2NywxNSArMTU4
LDE0IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAvLyBpZ25vcmVkLiBUaGF0J3MgYmVjYXVzZSBB
cnJheVB1c2ggY2FuJ3QgaGFuZGxlIGFueSBhcnJheSBtb2RlcyB0aGF0IGFyZW4ndAogICAgICAg
ICAgICAgLy8gYXJyYXktcmVsYXRlZCAtIHNvIGlmIHJlZmluZSgpIHR1cm5lZCB0aGlzIGludG8g
YSAiR2VuZXJpYyIgQXJyYXlQdXNoIHRoZW4KICAgICAgICAgICAgIC8vIHRoYXQgd291bGQgYnJl
YWsgdGhpbmdzLgotICAgICAgICAgICAgbm9kZS5zZXRBcnJheU1vZGUoCi0gICAgICAgICAgICAg
ICAgbm9kZS5hcnJheU1vZGUoKS5yZWZpbmUoCi0gICAgICAgICAgICAgICAgICAgIG1fZ3JhcGhb
bm9kZS5jaGlsZDEoKV0ucHJlZGljdGlvbigpICYgU3BlY0NlbGwsCisgICAgICAgICAgICBub2Rl
LT5zZXRBcnJheU1vZGUoCisgICAgICAgICAgICAgICAgbm9kZS0+YXJyYXlNb2RlKCkucmVmaW5l
KAorICAgICAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDEoKS0+cHJlZGljdGlvbigpICYgU3Bl
Y0NlbGwsCiAgICAgICAgICAgICAgICAgICAgIFNwZWNJbnQzMiwKLSAgICAgICAgICAgICAgICAg
ICAgbV9ncmFwaFtub2RlLmNoaWxkMigpXS5wcmVkaWN0aW9uKCkpKTsKLSAgICAgICAgICAgIGJs
ZXNzQXJyYXlPcGVyYXRpb24obm9kZS5jaGlsZDEoKSwgRWRnZSgpLCAyKTsKKyAgICAgICAgICAg
ICAgICAgICAgbm9kZS0+Y2hpbGQyKCktPnByZWRpY3Rpb24oKSkpOworICAgICAgICAgICAgYmxl
c3NBcnJheU9wZXJhdGlvbihub2RlLT5jaGlsZDEoKSwgRWRnZSgpLCAyKTsKICAgICAgICAgICAg
IAotICAgICAgICAgICAgTm9kZSogbm9kZVB0ciA9ICZtX2dyYXBoW21fY29tcGlsZUluZGV4XTsK
LSAgICAgICAgICAgIHN3aXRjaCAobm9kZVB0ci0+YXJyYXlNb2RlKCkudHlwZSgpKSB7CisgICAg
ICAgICAgICBzd2l0Y2ggKG5vZGUtPmFycmF5TW9kZSgpLnR5cGUoKSkgewogICAgICAgICAgICAg
Y2FzZSBBcnJheTo6RG91YmxlOgogICAgICAgICAgICAgICAgIGZpeERvdWJsZUVkZ2UoMSk7CiAg
ICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0xODYsMTUgKzE3NiwxNSBAQCBwcml2YXRlOgogICAg
ICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBBcnJheVBvcDogewotICAgICAgICAg
ICAgYmxlc3NBcnJheU9wZXJhdGlvbihub2RlLmNoaWxkMSgpLCBFZGdlKCksIDEpOworICAgICAg
ICAgICAgYmxlc3NBcnJheU9wZXJhdGlvbihub2RlLT5jaGlsZDEoKSwgRWRnZSgpLCAxKTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBW
YWx1ZVRvSW50MzI6IHsKLSAgICAgICAgICAgIGlmIChtX2dyYXBoW25vZGUuY2hpbGQxKCldLnNo
b3VsZFNwZWN1bGF0ZU51bWJlcigpCi0gICAgICAgICAgICAgICAgJiYgbm9kZS5tdXN0R2VuZXJh
dGUoKSkgewotICAgICAgICAgICAgICAgIG5vZGUuY2xlYXJGbGFncyhOb2RlTXVzdEdlbmVyYXRl
KTsKLSAgICAgICAgICAgICAgICBtX2dyYXBoLmRlcmVmKG1fY29tcGlsZUluZGV4KTsKKyAgICAg
ICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlTnVtYmVyKCkKKyAgICAg
ICAgICAgICAgICAmJiBub2RlLT5tdXN0R2VuZXJhdGUoKSkgeworICAgICAgICAgICAgICAgIG5v
ZGUtPmNsZWFyRmxhZ3MoTm9kZU11c3RHZW5lcmF0ZSk7CisgICAgICAgICAgICAgICAgbV9ncmFw
aC5kZXJlZihub2RlKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9CkBAIC0yMDUsOCArMTk1LDggQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBCaXRSU2hpZnQ6
CiAgICAgICAgIGNhc2UgQml0TFNoaWZ0OgogICAgICAgICBjYXNlIEJpdFVSU2hpZnQ6IHsKLSAg
ICAgICAgICAgIGZpeEludEVkZ2Uobm9kZS5jaGlsZHJlbi5jaGlsZDEoKSk7Ci0gICAgICAgICAg
ICBmaXhJbnRFZGdlKG5vZGUuY2hpbGRyZW4uY2hpbGQyKCkpOworICAgICAgICAgICAgZml4SW50
RWRnZShub2RlLT5jaGlsZHJlbi5jaGlsZDEoKSk7CisgICAgICAgICAgICBmaXhJbnRFZGdlKG5v
ZGUtPmNoaWxkcmVuLmNoaWxkMigpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAg
ICAgICAgICAgICAKQEAgLTIxNiw5ICsyMDYsOSBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIENv
bXBhcmVHcmVhdGVyOgogICAgICAgICBjYXNlIENvbXBhcmVHcmVhdGVyRXE6CiAgICAgICAgIGNh
c2UgQ29tcGFyZVN0cmljdEVxOiB7Ci0gICAgICAgICAgICBpZiAoTm9kZTo6c2hvdWxkU3BlY3Vs
YXRlSW50ZWdlcihtX2dyYXBoW25vZGUuY2hpbGQxKCldLCBtX2dyYXBoW25vZGUuY2hpbGQyKCld
KSkKKyAgICAgICAgICAgIGlmIChOb2RlOjpzaG91bGRTcGVjdWxhdGVJbnRlZ2VyKG5vZGUtPmNo
aWxkMSgpLm5vZGUoKSwgbm9kZS0+Y2hpbGQyKCkubm9kZSgpKSkKICAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgIGlmICghTm9kZTo6c2hvdWxkU3BlY3VsYXRlTnVtYmVyKG1fZ3Jh
cGhbbm9kZS5jaGlsZDEoKV0sIG1fZ3JhcGhbbm9kZS5jaGlsZDIoKV0pKQorICAgICAgICAgICAg
aWYgKCFOb2RlOjpzaG91bGRTcGVjdWxhdGVOdW1iZXIobm9kZS0+Y2hpbGQxKCkubm9kZSgpLCBu
b2RlLT5jaGlsZDIoKS5ub2RlKCkpKQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgZml4RG91YmxlRWRnZSgwKTsKICAgICAgICAgICAgIGZpeERvdWJsZUVkZ2UoMSk7CkBAIC0y
MjYsNDMgKzIxNiw0MSBAQCBwcml2YXRlOgogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAg
ICAgY2FzZSBMb2dpY2FsTm90OiB7Ci0gICAgICAgICAgICBpZiAobV9ncmFwaFtub2RlLmNoaWxk
MSgpXS5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpCisgICAgICAgICAgICBpZiAobm9kZS0+Y2hp
bGQxKCktPnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKSkKICAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgIGlmICghbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5zaG91bGRTcGVjdWxhdGVO
dW1iZXIoKSkKKyAgICAgICAgICAgIGlmICghbm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0
ZU51bWJlcigpKQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgZml4RG91Ymxl
RWRnZSgwKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKICAg
ICAgICAgY2FzZSBCcmFuY2g6IHsKLSAgICAgICAgICAgIGlmICghbV9ncmFwaFtub2RlLmNoaWxk
MSgpXS5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkKLSAgICAgICAgICAgICAgICAmJiBtX2dyYXBo
W25vZGUuY2hpbGQxKCldLnNob3VsZFNwZWN1bGF0ZU51bWJlcigpKQorICAgICAgICAgICAgaWYg
KCFub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpCisgICAgICAgICAgICAg
ICAgJiYgbm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZU51bWJlcigpKQogICAgICAgICAg
ICAgICAgIGZpeERvdWJsZUVkZ2UoMCk7CiAKLSAgICAgICAgICAgIE5vZGUmIG15Tm9kZSA9IG1f
Z3JhcGhbbV9jb21waWxlSW5kZXhdOyAvLyByZWxvYWQgYmVjYXVzZSB0aGUgZ3JhcGggbWF5IGhh
dmUgY2hhbmdlZAotICAgICAgICAgICAgRWRnZSBsb2dpY2FsTm90RWRnZSA9IG15Tm9kZS5jaGls
ZDEoKTsKLSAgICAgICAgICAgIE5vZGUmIGxvZ2ljYWxOb3QgPSBtX2dyYXBoW2xvZ2ljYWxOb3RF
ZGdlXTsKLSAgICAgICAgICAgIGlmIChsb2dpY2FsTm90Lm9wKCkgPT0gTG9naWNhbE5vdAotICAg
ICAgICAgICAgICAgICYmIGxvZ2ljYWxOb3QuYWRqdXN0ZWRSZWZDb3VudCgpID09IDEpIHsKLSAg
ICAgICAgICAgICAgICBFZGdlIG5ld0NoaWxkRWRnZSA9IGxvZ2ljYWxOb3QuY2hpbGQxKCk7Ci0g
ICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGhbbmV3Q2hpbGRFZGdlXS5oYXNCb29sZWFuUmVzdWx0
KCkpIHsKKyAgICAgICAgICAgIE5vZGUqIGxvZ2ljYWxOb3QgPSBub2RlLT5jaGlsZDEoKS5ub2Rl
KCk7CisgICAgICAgICAgICBpZiAobG9naWNhbE5vdC0+b3AoKSA9PSBMb2dpY2FsTm90CisgICAg
ICAgICAgICAgICAgJiYgbG9naWNhbE5vdC0+YWRqdXN0ZWRSZWZDb3VudCgpID09IDEpIHsKKyAg
ICAgICAgICAgICAgICBFZGdlIG5ld0NoaWxkRWRnZSA9IGxvZ2ljYWxOb3QtPmNoaWxkMSgpOwor
ICAgICAgICAgICAgICAgIGlmIChuZXdDaGlsZEVkZ2UtPmhhc0Jvb2xlYW5SZXN1bHQoKSkgewog
ICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLnJlZihuZXdDaGlsZEVkZ2UpOwotICAgICAgICAg
ICAgICAgICAgICBtX2dyYXBoLmRlcmVmKGxvZ2ljYWxOb3RFZGdlKTsKKyAgICAgICAgICAgICAg
ICAgICAgbV9ncmFwaC5kZXJlZihsb2dpY2FsTm90KTsKICAgICAgICAgICAgICAgICAgICAgbXlO
b2RlLmNoaWxkcmVuLnNldENoaWxkMShuZXdDaGlsZEVkZ2UpOwogICAgICAgICAgICAgICAgICAg
ICAKLSAgICAgICAgICAgICAgICAgICAgQmxvY2tJbmRleCB0b0JlVGFrZW4gPSBteU5vZGUubm90
VGFrZW5CbG9ja0luZGV4KCk7Ci0gICAgICAgICAgICAgICAgICAgIEJsb2NrSW5kZXggdG9CZU5v
dFRha2VuID0gbXlOb2RlLnRha2VuQmxvY2tJbmRleCgpOwotICAgICAgICAgICAgICAgICAgICBt
eU5vZGUuc2V0VGFrZW5CbG9ja0luZGV4KHRvQmVUYWtlbik7Ci0gICAgICAgICAgICAgICAgICAg
IG15Tm9kZS5zZXROb3RUYWtlbkJsb2NrSW5kZXgodG9CZU5vdFRha2VuKTsKKyAgICAgICAgICAg
ICAgICAgICAgQmxvY2tJbmRleCB0b0JlVGFrZW4gPSBub2RlLT5ub3RUYWtlbkJsb2NrSW5kZXgo
KTsKKyAgICAgICAgICAgICAgICAgICAgQmxvY2tJbmRleCB0b0JlTm90VGFrZW4gPSBub2RlLT50
YWtlbkJsb2NrSW5kZXgoKTsKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+c2V0VGFrZW5CbG9j
a0luZGV4KHRvQmVUYWtlbik7CisgICAgICAgICAgICAgICAgICAgIG5vZGUtPnNldE5vdFRha2Vu
QmxvY2tJbmRleCh0b0JlTm90VGFrZW4pOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAg
Y2FzZSBTZXRMb2NhbDogewotICAgICAgICAgICAgaWYgKG5vZGUudmFyaWFibGVBY2Nlc3NEYXRh
KCktPmlzQ2FwdHVyZWQoKSkKKyAgICAgICAgICAgIGlmIChub2RlLT52YXJpYWJsZUFjY2Vzc0Rh
dGEoKS0+aXNDYXB0dXJlZCgpKQogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
aWYgKCFub2RlLnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5zaG91bGRVc2VEb3VibGVGb3JtYXQoKSkK
KyAgICAgICAgICAgIGlmICghbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCktPnNob3VsZFVzZURv
dWJsZUZvcm1hdCgpKQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgZml4RG91
YmxlRWRnZSgwKTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMjcyLDcgKzI2MCw3IEBAIHByaXZh
dGU6CiAgICAgICAgIGNhc2UgVmFsdWVBZGQ6IHsKICAgICAgICAgICAgIGlmIChtX2dyYXBoLmFk
ZFNob3VsZFNwZWN1bGF0ZUludGVnZXIobm9kZSkpCiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICBpZiAoIU5vZGU6OnNob3VsZFNwZWN1bGF0ZU51bWJlckV4cGVjdGluZ0RlZmlu
ZWQobV9ncmFwaFtub2RlLmNoaWxkMSgpXSwgbV9ncmFwaFtub2RlLmNoaWxkMigpXSkpCisgICAg
ICAgICAgICBpZiAoIU5vZGU6OnNob3VsZFNwZWN1bGF0ZU51bWJlckV4cGVjdGluZ0RlZmluZWQo
bm9kZS0+Y2hpbGQxKCkubm9kZSgpLCBub2RlLT5jaGlsZDIoKS5ub2RlKCkpKQogICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgZml4RG91YmxlRWRnZSgwKTsKICAgICAgICAgICAg
IGZpeERvdWJsZUVkZ2UoMSk7CkBAIC0yODEsNyArMjY5LDcgQEAgcHJpdmF0ZToKICAgICAgICAg
ICAgIAogICAgICAgICBjYXNlIEFyaXRoU3ViOiB7CiAgICAgICAgICAgICBpZiAobV9ncmFwaC5h
ZGRTaG91bGRTcGVjdWxhdGVJbnRlZ2VyKG5vZGUpCi0gICAgICAgICAgICAgICAgJiYgbm9kZS5j
YW5TcGVjdWxhdGVJbnRlZ2VyKCkpCisgICAgICAgICAgICAgICAgJiYgbm9kZS0+Y2FuU3BlY3Vs
YXRlSW50ZWdlcigpKQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgZml4RG91
YmxlRWRnZSgwKTsKICAgICAgICAgICAgIGZpeERvdWJsZUVkZ2UoMSk7CkBAIC0yOTgsOCArMjg2
LDggQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBBcml0aE1pbjoKICAgICAgICAgY2FzZSBBcml0
aE1heDoKICAgICAgICAgY2FzZSBBcml0aE1vZDogewotICAgICAgICAgICAgaWYgKE5vZGU6OnNo
b3VsZFNwZWN1bGF0ZUludGVnZXJGb3JBcml0aG1ldGljKG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0s
IG1fZ3JhcGhbbm9kZS5jaGlsZDIoKV0pCi0gICAgICAgICAgICAgICAgJiYgbm9kZS5jYW5TcGVj
dWxhdGVJbnRlZ2VyKCkpCisgICAgICAgICAgICBpZiAoTm9kZTo6c2hvdWxkU3BlY3VsYXRlSW50
ZWdlckZvckFyaXRobWV0aWMobm9kZS0+Y2hpbGQxKCkubm9kZSgpLCBub2RlLT5jaGlsZDIoKS5u
b2RlKCkpCisgICAgICAgICAgICAgICAgJiYgbm9kZS0+Y2FuU3BlY3VsYXRlSW50ZWdlcigpKQog
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgZml4RG91YmxlRWRnZSgwKTsKICAg
ICAgICAgICAgIGZpeERvdWJsZUVkZ2UoMSk7CkBAIC0zMTUsOCArMzAzLDggQEAgcHJpdmF0ZToK
ICAgICAgICAgfQogCiAgICAgICAgIGNhc2UgQXJpdGhEaXY6IHsKLSAgICAgICAgICAgIGlmIChO
b2RlOjpzaG91bGRTcGVjdWxhdGVJbnRlZ2VyRm9yQXJpdGhtZXRpYyhtX2dyYXBoW25vZGUuY2hp
bGQxKCldLCBtX2dyYXBoW25vZGUuY2hpbGQyKCldKQotICAgICAgICAgICAgICAgICYmIG5vZGUu
Y2FuU3BlY3VsYXRlSW50ZWdlcigpKSB7CisgICAgICAgICAgICBpZiAoTm9kZTo6c2hvdWxkU3Bl
Y3VsYXRlSW50ZWdlckZvckFyaXRobWV0aWMobm9kZS0+Y2hpbGQxKCkubm9kZSgpLCBub2RlLT5j
aGlsZDIoKS5ub2RlKCkpCisgICAgICAgICAgICAgICAgJiYgbm9kZS0+Y2FuU3BlY3VsYXRlSW50
ZWdlcigpKSB7CiAgICAgICAgICAgICAgICAgaWYgKGlzWDg2KCkpCiAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIGluamVjdEludDMyVG9Eb3VibGVOb2RlKDApOwpA
QCAtMzI0LDEyICszMTIsMTEgQEAgcHJpdmF0ZToKIAogICAgICAgICAgICAgICAgIC8vIFdlIGRv
bid0IG5lZWQgdG8gZG8gcmVmJ2luZyBvbiB0aGUgY2hpbGRyZW4gYmVjYXVzZSB3ZSdyZSBzdGVh
bGluZyB0aGVtIGZyb20KICAgICAgICAgICAgICAgICAvLyB0aGUgb3JpZ2luYWwgZGl2aXNpb24u
Ci0gICAgICAgICAgICAgICAgTm9kZUluZGV4IG5ld0RpdmlzaW9uSW5kZXggPSBtX2luc2VydGlv
blNldC5pbnNlcnROb2RlKAotICAgICAgICAgICAgICAgICAgICBtX2luZGV4SW5CbG9jaywgRG9u
dFJlZkNoaWxkcmVuLCBSZWZOb2RlLCBTcGVjRG91YmxlLCBtX2dyYXBoW21fY29tcGlsZUluZGV4
XSk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgbV9ncmFwaFttX2NvbXBpbGVJ
bmRleF0uc2V0T3AoRG91YmxlQXNJbnQzMik7Ci0gICAgICAgICAgICAgICAgbV9ncmFwaFttX2Nv
bXBpbGVJbmRleF0uY2hpbGRyZW4uaW5pdGlhbGl6ZShFZGdlKG5ld0RpdmlzaW9uSW5kZXgsIERv
dWJsZVVzZSksIEVkZ2UoKSwgRWRnZSgpKTsKKyAgICAgICAgICAgICAgICBOb2RlKiBuZXdEaXZp
c2lvbiA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCisgICAgICAgICAgICAgICAgICAgIG1f
aW5kZXhJbkJsb2NrLCBEb250UmVmQ2hpbGRyZW4sIFJlZk5vZGUsIFNwZWNEb3VibGUsIG5vZGUp
OwogICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIG5vZGUtPnNldE9wKERvdWJsZUFz
SW50MzIpOworICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkcmVuLmluaXRpYWxpemUoRWRnZShu
ZXdEaXZpc2lvbiwgRG91YmxlVXNlKSwgRWRnZSgpLCBFZGdlKCkpOwogICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZml4RG91YmxlRWRnZSgwKTsKQEAg
LTMzOCw4ICszMjUsOCBAQCBwcml2YXRlOgogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAg
ICAgY2FzZSBBcml0aEFiczogewotICAgICAgICAgICAgaWYgKG1fZ3JhcGhbbm9kZS5jaGlsZDEo
KV0uc2hvdWxkU3BlY3VsYXRlSW50ZWdlckZvckFyaXRobWV0aWMoKQotICAgICAgICAgICAgICAg
ICYmIG5vZGUuY2FuU3BlY3VsYXRlSW50ZWdlcigpKQorICAgICAgICAgICAgaWYgKG5vZGUtPmNo
aWxkMSgpLT5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyRm9yQXJpdGhtZXRpYygpCisgICAgICAgICAg
ICAgICAgJiYgbm9kZS0+Y2FuU3BlY3VsYXRlSW50ZWdlcigpKQogICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgZml4RG91YmxlRWRnZSgwKTsKICAgICAgICAgICAgIGJyZWFrOwpA
QCAtMzU4LDE1ICszNDUsMTMgQEAgcHJpdmF0ZToKIAogICAgICAgICAgICAgbm9kZS5zZXRBcnJh
eU1vZGUoCiAgICAgICAgICAgICAgICAgbm9kZS5hcnJheU1vZGUoKS5yZWZpbmUoCi0gICAgICAg
ICAgICAgICAgICAgIG1fZ3JhcGhbY2hpbGQxXS5wcmVkaWN0aW9uKCksCi0gICAgICAgICAgICAg
ICAgICAgIG1fZ3JhcGhbY2hpbGQyXS5wcmVkaWN0aW9uKCksCi0gICAgICAgICAgICAgICAgICAg
IG1fZ3JhcGhbY2hpbGQzXS5wcmVkaWN0aW9uKCkpKTsKKyAgICAgICAgICAgICAgICAgICAgY2hp
bGQxLT5wcmVkaWN0aW9uKCksCisgICAgICAgICAgICAgICAgICAgIGNoaWxkMi0+cHJlZGljdGlv
bigpLAorICAgICAgICAgICAgICAgICAgICBjaGlsZDMtPnByZWRpY3Rpb24oKSkpOwogICAgICAg
ICAgICAgCiAgICAgICAgICAgICBibGVzc0FycmF5T3BlcmF0aW9uKGNoaWxkMSwgY2hpbGQyLCAz
KTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgTm9kZSogbm9kZVB0ciA9ICZtX2dyYXBoW21f
Y29tcGlsZUluZGV4XTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgc3dpdGNoIChub2RlUHRy
LT5hcnJheU1vZGUoKS5tb2RlRm9yUHV0KCkudHlwZSgpKSB7CisgICAgICAgICAgICBzd2l0Y2gg
KG5vZGUtPmFycmF5TW9kZSgpLm1vZGVGb3JQdXQoKS50eXBlKCkpIHsKICAgICAgICAgICAgIGNh
c2UgQXJyYXk6OkRvdWJsZToKICAgICAgICAgICAgICAgICBmaXhEb3VibGVFZGdlKDIpOwogICAg
ICAgICAgICAgICAgIGJyZWFrOwpAQCAtMzc3LDcgKzM2Miw3IEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICBjYXNlIEFycmF5OjpVaW50OENsYW1wZWRBcnJheToKICAgICAgICAgICAgIGNhc2UgQXJy
YXk6OlVpbnQxNkFycmF5OgogICAgICAgICAgICAgY2FzZSBBcnJheTo6VWludDMyQXJyYXk6Ci0g
ICAgICAgICAgICAgICAgaWYgKCFtX2dyYXBoW2NoaWxkM10uc2hvdWxkU3BlY3VsYXRlSW50ZWdl
cigpKQorICAgICAgICAgICAgICAgIGlmICghY2hpbGQzLT5zaG91bGRTcGVjdWxhdGVJbnRlZ2Vy
KCkpCiAgICAgICAgICAgICAgICAgICAgIGZpeERvdWJsZUVkZ2UoMik7CiAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIEFycmF5OjpGbG9hdDMyQXJyYXk6CkBAIC0zOTIs
MTEgKzM3NywxMSBAQCBwcml2YXRlOgogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgTmV3QXJy
YXk6IHsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1fZ3JhcGgudmFyQXJnTnVtQ2hp
bGRyZW4obm9kZSk7IGktLTspIHsKLSAgICAgICAgICAgICAgICBub2RlLnNldEluZGV4aW5nVHlw
ZSgKKyAgICAgICAgICAgICAgICBub2RlLT5zZXRJbmRleGluZ1R5cGUoCiAgICAgICAgICAgICAg
ICAgICAgIGxlYXN0VXBwZXJCb3VuZE9mSW5kZXhpbmdUeXBlQW5kVHlwZSgKLSAgICAgICAgICAg
ICAgICAgICAgICAgIG5vZGUuaW5kZXhpbmdUeXBlKCksIG1fZ3JhcGhbbV9ncmFwaC52YXJBcmdD
aGlsZChub2RlLCBpKV0ucHJlZGljdGlvbigpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBu
b2RlLmluZGV4aW5nVHlwZSgpLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIGkpLT5wcmVkaWN0
aW9uKCkpKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChub2RlLmluZGV4aW5nVHlw
ZSgpID09IEFycmF5V2l0aERvdWJsZSkgeworICAgICAgICAgICAgaWYgKG5vZGUtPmluZGV4aW5n
VHlwZSgpID09IEFycmF5V2l0aERvdWJsZSkgewogICAgICAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IG1fZ3JhcGgudmFyQXJnTnVtQ2hpbGRyZW4obm9kZSk7IGktLTspCiAgICAgICAgICAg
ICAgICAgICAgIGZpeERvdWJsZUVkZ2UoaSk7CiAgICAgICAgICAgICB9CkBAIC00MDgsMTYgKzM5
MywxNSBAQCBwcml2YXRlOgogICAgICAgICB9CiAKICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BB
R0FUSU9OX1ZFUkJPU0UpCi0gICAgICAgIE5vZGUqIG5vZGVQdHIgPSAmbV9ncmFwaFttX2NvbXBp
bGVJbmRleF07Ci0gICAgICAgIGlmICghKG5vZGVQdHItPmZsYWdzKCkgJiBOb2RlSGFzVmFyQXJn
cykpIHsKKyAgICAgICAgaWYgKCEobm9kZS0+ZmxhZ3MoKSAmIE5vZGVIYXNWYXJBcmdzKSkgewog
ICAgICAgICAgICAgZGF0YUxvZ0YoIm5ldyBjaGlsZHJlbjogIik7Ci0gICAgICAgICAgICBub2Rl
UHRyLT5kdW1wQ2hpbGRyZW4oV1RGOjpkYXRhRmlsZSgpKTsKKyAgICAgICAgICAgIG5vZGUtPmR1
bXBDaGlsZHJlbihXVEY6OmRhdGFGaWxlKCkpOwogICAgICAgICB9CiAgICAgICAgIGRhdGFMb2dG
KCJcbiIpOwogI2VuZGlmCiAgICAgfQogICAgIAotICAgIE5vZGVJbmRleCBjaGVja0FycmF5KEFy
cmF5TW9kZSBhcnJheU1vZGUsIENvZGVPcmlnaW4gY29kZU9yaWdpbiwgTm9kZUluZGV4IGFycmF5
LCBOb2RlSW5kZXggaW5kZXgsIGJvb2wgKCpzdG9yYWdlQ2hlY2spKGNvbnN0IEFycmF5TW9kZSYp
ID0gY2FuQ1NFU3RvcmFnZSwgYm9vbCBzaG91bGRHZW5lcmF0ZSA9IHRydWUpCisgICAgTm9kZSog
Y2hlY2tBcnJheShBcnJheU1vZGUgYXJyYXlNb2RlLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIE5v
ZGUqIGFycmF5LCBOb2RlKiBpbmRleCwgYm9vbCAoKnN0b3JhZ2VDaGVjaykoY29uc3QgQXJyYXlN
b2RlJikgPSBjYW5DU0VTdG9yYWdlLCBib29sIHNob3VsZEdlbmVyYXRlID0gdHJ1ZSkKICAgICB7
CiAgICAgICAgIEFTU0VSVChhcnJheU1vZGUuaXNTcGVjaWZpYygpKTsKICAgICAgICAgCkBAIC00
MjgsMTEgKzQxMiwxMSBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIGlmIChtX2luZGV4SW5C
bG9jayA+IDApIHsKICAgICAgICAgICAgICAgICAgICAgLy8gSWYgdGhlIHByZXZpb3VzIG5vZGUg
d2FzIGEgQ2hlY2tTdHJ1Y3R1cmUgaW5zZXJ0ZWQgYmVjYXVzZSBvZiBzdHVmZgogICAgICAgICAg
ICAgICAgICAgICAvLyB0aGF0IHRoZSBhcnJheSBwcm9maWxlIHRvbGQgdXMsIHRoZW4gcmVtb3Zl
IGl0LgotICAgICAgICAgICAgICAgICAgICBOb2RlJiBwcmV2aW91c05vZGUgPSBtX2dyYXBoW21f
YmxvY2stPmF0KG1faW5kZXhJbkJsb2NrIC0gMSldOwotICAgICAgICAgICAgICAgICAgICBpZiAo
cHJldmlvdXNOb2RlLm9wKCkgPT0gQ2hlY2tTdHJ1Y3R1cmUKLSAgICAgICAgICAgICAgICAgICAg
ICAgICYmIHByZXZpb3VzTm9kZS5jaGlsZDEoKSA9PSBhcnJheQotICAgICAgICAgICAgICAgICAg
ICAgICAgJiYgcHJldmlvdXNOb2RlLmNvZGVPcmlnaW4gPT0gY29kZU9yaWdpbikKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHByZXZpb3VzTm9kZS5zZXRPcEFuZERlZmF1bHRGbGFncyhQaGFudG9t
KTsKKyAgICAgICAgICAgICAgICAgICAgTm9kZSogcHJldmlvdXNOb2RlID0gYmxvY2stPmF0KG1f
aW5kZXhJbkJsb2NrIC0gMSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChwcmV2aW91c05vZGUt
Pm9wKCkgPT0gQ2hlY2tTdHJ1Y3R1cmUKKyAgICAgICAgICAgICAgICAgICAgICAgICYmIHByZXZp
b3VzTm9kZS0+Y2hpbGQxKCkgPT0gYXJyYXkKKyAgICAgICAgICAgICAgICAgICAgICAgICYmIHBy
ZXZpb3VzTm9kZS0+Y29kZU9yaWdpbiA9PSBjb2RlT3JpZ2luKQorICAgICAgICAgICAgICAgICAg
ICAgICAgcHJldmlvdXNOb2RlLT5zZXRPcEFuZERlZmF1bHRGbGFncyhQaGFudG9tKTsKICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgbV9pbnNlcnRp
b25TZXQuaW5zZXJ0Tm9kZSgKQEAgLTQ1Niw3ICs0NDAsNyBAQCBwcml2YXRlOgogICAgICAgICB9
CiAgICAgICAgIAogICAgICAgICBpZiAoIXN0b3JhZ2VDaGVjayhhcnJheU1vZGUpKQotICAgICAg
ICAgICAgcmV0dXJuIE5vTm9kZTsKKyAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAKICAg
ICAgICAgaWYgKGFycmF5TW9kZS51c2VzQnV0dGVyZmx5KCkpIHsKICAgICAgICAgICAgIHJldHVy
biBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKApAQCAtNDc3LDE0ICs0NjEsMTQgQEAgcHJpdmF0
ZToKICAgICB7CiAgICAgICAgIGlmIChtX2dyYXBoLm1fZml4cG9pbnRTdGF0ZSA+IEJlZm9yZUZp
eHBvaW50KQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgCi0gICAgICAgIE5vZGUq
IG5vZGVQdHIgPSAmbV9ncmFwaFttX2NvbXBpbGVJbmRleF07CiAgICAgICAgIAotICAgICAgICBz
d2l0Y2ggKG5vZGVQdHItPmFycmF5TW9kZSgpLnR5cGUoKSkgeworICAgICAgICBOb2RlKiBub2Rl
ID0gbV9jdXJyZW50Tm9kZTsKKyAgICAgICAgCisgICAgICAgIHN3aXRjaCAobm9kZS0+YXJyYXlN
b2RlKCkudHlwZSgpKSB7CiAgICAgICAgIGNhc2UgQXJyYXk6OkZvcmNlRXhpdDogewogICAgICAg
ICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKICAgICAgICAgICAgICAgICBtX2luZGV4
SW5CbG9jaywgRG9udFJlZkNoaWxkcmVuLCBEb250UmVmTm9kZSwgU3BlY05vbmUsIEZvcmNlT1NS
RXhpdCwKLSAgICAgICAgICAgICAgICBub2RlUHRyLT5jb2RlT3JpZ2luKTsKKyAgICAgICAgICAg
ICAgICBub2RlLT5jb2RlT3JpZ2luKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQog
ICAgICAgICAgICAgCkBAIC00OTcsMjYgKzQ4MSwyNiBAQCBwcml2YXRlOgogICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICAgICAgCiAgICAgICAgIGRlZmF1bHQ6IHsKLSAgICAgICAgICAgIE5v
ZGVJbmRleCBzdG9yYWdlID0gY2hlY2tBcnJheShub2RlUHRyLT5hcnJheU1vZGUoKSwgbm9kZVB0
ci0+Y29kZU9yaWdpbiwgYmFzZS5pbmRleCgpLCBpbmRleC5pbmRleFVuY2hlY2tlZCgpKTsKLSAg
ICAgICAgICAgIGlmIChzdG9yYWdlID09IE5vTm9kZSkKKyAgICAgICAgICAgIE5vZGUqIHN0b3Jh
Z2UgPSBjaGVja0FycmF5KG5vZGUtPmFycmF5TW9kZSgpLCBub2RlLT5jb2RlT3JpZ2luLCBiYXNl
Lm5vZGUoKSwgaW5kZXgubm9kZSgpKTsKKyAgICAgICAgICAgIGlmICghc3RvcmFnZSkKICAgICAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIG1fZ3JhcGguY2hp
bGQobV9ncmFwaFttX2NvbXBpbGVJbmRleF0sIHN0b3JhZ2VDaGlsZElkeCkgPSBFZGdlKHN0b3Jh
Z2UpOworICAgICAgICAgICAgbV9ncmFwaC5jaGlsZChub2RlLCBzdG9yYWdlQ2hpbGRJZHgpID0g
RWRnZShzdG9yYWdlKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfSB9CiAgICAgfQog
ICAgIAogICAgIHZvaWQgZml4SW50RWRnZShFZGdlJiBlZGdlKQogICAgIHsKLSAgICAgICAgTm9k
ZSYgbm9kZSA9IG1fZ3JhcGhbZWRnZV07Ci0gICAgICAgIGlmIChub2RlLm9wKCkgIT0gVmFsdWVU
b0ludDMyKQorICAgICAgICBOb2RlKiBub2RlID0gZWRnZS5ub2RlKCk7CisgICAgICAgIGlmIChu
b2RlLT5vcCgpICE9IFZhbHVlVG9JbnQzMikKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
Ci0gICAgICAgIGlmICghbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5zaG91bGRTcGVjdWxhdGVJbnRl
Z2VyKCkpCisgICAgICAgIGlmICghbm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZUludGVn
ZXIoKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAgICAgIEVkZ2Ugb2xkRWRn
ZSA9IGVkZ2U7Ci0gICAgICAgIEVkZ2UgbmV3RWRnZSA9IG5vZGUuY2hpbGQxKCk7CisgICAgICAg
IEVkZ2UgbmV3RWRnZSA9IG5vZGUtPmNoaWxkMSgpOwogICAgICAgICAKICAgICAgICAgbV9ncmFw
aC5yZWYobmV3RWRnZSk7CiAgICAgICAgIG1fZ3JhcGguZGVyZWYob2xkRWRnZSk7CkBAIC01MjYs
MTEgKzUxMCwxMSBAQCBwcml2YXRlOgogICAgIAogICAgIHZvaWQgZml4RG91YmxlRWRnZSh1bnNp
Z25lZCBjaGlsZEluZGV4KQogICAgIHsKLSAgICAgICAgTm9kZSYgc291cmNlID0gbV9ncmFwaFtt
X2NvbXBpbGVJbmRleF07CisgICAgICAgIE5vZGUqIHNvdXJjZSA9IG1fY3VycmVudE5vZGU7CiAg
ICAgICAgIEVkZ2UmIGVkZ2UgPSBtX2dyYXBoLmNoaWxkKHNvdXJjZSwgY2hpbGRJbmRleCk7CiAg
ICAgICAgIAotICAgICAgICBpZiAobV9ncmFwaFtlZGdlXS5wcmVkaWN0aW9uKCkgJiBTcGVjRG91
YmxlKSB7Ci0gICAgICAgICAgICBlZGdlLnNldFVzZUtpbmQoRG91YmxlVXNlKTsKKyAgICAgICAg
aWYgKGVkZ2UtPnByZWRpY3Rpb24oKSAmIFNwZWNEb3VibGUpIHsKKyAgICAgICAgICAgIGVkZ2Ut
PnNldFVzZUtpbmQoRG91YmxlVXNlKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQog
ICAgICAgICAKQEAgLTUzOSwyMyArNTIzLDIyIEBAIHByaXZhdGU6CiAKICAgICB2b2lkIGluamVj
dEludDMyVG9Eb3VibGVOb2RlKHVuc2lnbmVkIGNoaWxkSW5kZXgpCiAgICAgewotICAgICAgICBO
b2RlSW5kZXggcmVzdWx0SW5kZXggPSBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAorICAgICAg
ICBOb2RlKiByZXN1bHQgPSBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAogICAgICAgICAgICAg
bV9pbmRleEluQmxvY2ssIERvbnRSZWZDaGlsZHJlbiwgUmVmTm9kZSwgU3BlY0RvdWJsZSwgSW50
MzJUb0RvdWJsZSwKLSAgICAgICAgICAgIG1fZ3JhcGhbbV9jb21waWxlSW5kZXhdLmNvZGVPcmln
aW4sCi0gICAgICAgICAgICBtX2dyYXBoLmNoaWxkKG1fZ3JhcGhbbV9jb21waWxlSW5kZXhdLCBj
aGlsZEluZGV4KS5pbmRleCgpKTsKKyAgICAgICAgICAgIG1fY3VycmVudE5vZGUtPmNvZGVPcmln
aW4sIG1fZ3JhcGguY2hpbGQobV9jdXJyZW50Tm9kZSwgY2hpbGRJbmRleCkubm9kZSgpKTsKICAg
ICAgICAgCiAjaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQogICAgICAg
ICBkYXRhTG9nRigKICAgICAgICAgICAgICIocmVwbGFjaW5nIEAldS0+QCV1IHdpdGggQCV1LT5A
JXUpICIsCi0gICAgICAgICAgICBtX2NvbXBpbGVJbmRleCwgbV9ncmFwaC5jaGlsZChtX2dyYXBo
W21fY29tcGlsZUluZGV4XSwgY2hpbGRJbmRleCkuaW5kZXgoKSwgbV9jb21waWxlSW5kZXgsIHJl
c3VsdEluZGV4KTsKKyAgICAgICAgICAgIG1fY3VycmVudE5vZGUtPmluZGV4KCksIG1fZ3JhcGgu
Y2hpbGQobV9jdXJyZW50Tm9kZSwgY2hpbGRJbmRleCktPmluZGV4KCksIG1fY3VycmVudE5vZGUt
PmluZGV4KCksIHJlc3VsdC0+aW5kZXgoKSk7CiAjZW5kaWYKIAotICAgICAgICBtX2dyYXBoLmNo
aWxkKG1fZ3JhcGhbbV9jb21waWxlSW5kZXhdLCBjaGlsZEluZGV4KSA9IEVkZ2UocmVzdWx0SW5k
ZXgsIERvdWJsZVVzZSk7CisgICAgICAgIG1fZ3JhcGguY2hpbGQobV9jdXJyZW50Tm9kZSwgY2hp
bGRJbmRleCkgPSBFZGdlKHJlc3VsdCwgRG91YmxlVXNlKTsKICAgICB9CiAKICAgICBCYXNpY0Js
b2NrKiBtX2Jsb2NrOwogICAgIHVuc2lnbmVkIG1faW5kZXhJbkJsb2NrOwotICAgIE5vZGVJbmRl
eCBtX2NvbXBpbGVJbmRleDsKKyAgICBOb2RlKiBtX2N1cnJlbnROb2RlOwogICAgIEluc2VydGlv
blNldCBtX2luc2VydGlvblNldDsKIH07CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0dyYXBoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0dyYXBoLmNwcAkocmV2aXNpb24gMTQwNjE2KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdHcmFwaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDYgKzQ2LDcgQEAgR3Jh
cGg6OkdyYXBoKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgQwogICAgICwgbV9jb2RlQmxvY2so
Y29kZUJsb2NrKQogICAgICwgbV9jb21waWxhdGlvbihnbG9iYWxEYXRhLm1fcGVyQnl0ZWNvZGVQ
cm9maWxlciA/IGdsb2JhbERhdGEubV9wZXJCeXRlY29kZVByb2ZpbGVyLT5uZXdDb21waWxhdGlv
bihjb2RlQmxvY2ssIFByb2ZpbGVyOjpERkcpIDogMCkKICAgICAsIG1fcHJvZmlsZWRCbG9jayhj
b2RlQmxvY2stPmFsdGVybmF0aXZlKCkpCisgICAgLCBtX2FsbG9jYXRvcihnbG9iYWxEYXRhLm1f
ZGZnU3RhdGUtPm1fYWxsb2NhdG9yKQogICAgICwgbV9oYXNBcmd1bWVudHMoZmFsc2UpCiAgICAg
LCBtX29zckVudHJ5Qnl0ZWNvZGVJbmRleChvc3JFbnRyeUJ5dGVjb2RlSW5kZXgpCiAgICAgLCBt
X211c3RIYW5kbGVWYWx1ZXMobXVzdEhhbmRsZVZhbHVlcykKQEAgLTU0LDYgKzU1LDExIEBAIEdy
YXBoOjpHcmFwaChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEMKICAgICBBU1NFUlQobV9wcm9m
aWxlZEJsb2NrKTsKIH0KIAorR3JhcGg6On5HcmFwaCgpCit7CisgICAgbV9hbGxvY2F0b3IuZnJl
ZUFsbCgpOworfQorCiBjb25zdCBjaGFyICpHcmFwaDo6b3BOYW1lKE5vZGVUeXBlIG9wKQogewog
ICAgIHJldHVybiBkZmdPcE5hbWVzW29wXTsKQEAgLTY1LDE4ICs3MSwxNiBAQCBzdGF0aWMgdm9p
ZCBwcmludFdoaXRlU3BhY2UoUHJpbnRTdHJlYW0mCiAgICAgICAgIG91dC5wcmludCgiICIpOwog
fQogCi1ib29sIEdyYXBoOjpkdW1wQ29kZU9yaWdpbihQcmludFN0cmVhbSYgb3V0LCBjb25zdCBj
aGFyKiBwcmVmaXgsIE5vZGVJbmRleCBwcmV2Tm9kZUluZGV4LCBOb2RlSW5kZXggbm9kZUluZGV4
KQorYm9vbCBHcmFwaDo6ZHVtcENvZGVPcmlnaW4oUHJpbnRTdHJlYW0mIG91dCwgY29uc3QgY2hh
ciogcHJlZml4LCBOb2RlKiBwcmV2aW91c05vZGUsIE5vZGUqIGN1cnJlbnROb2RlKQogewotICAg
IGlmIChwcmV2Tm9kZUluZGV4ID09IE5vTm9kZSkKKyAgICBpZiAoIXByZXZpb3VzTm9kZSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAotICAgIE5vZGUmIGN1cnJlbnROb2RlID0gYXQobm9k
ZUluZGV4KTsKLSAgICBOb2RlJiBwcmV2aW91c05vZGUgPSBhdChwcmV2Tm9kZUluZGV4KTsKLSAg
ICBpZiAocHJldmlvdXNOb2RlLmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lID09IGN1cnJlbnRO
b2RlLmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKQorICAgIGlmIChwcmV2aW91c05vZGUtPmNv
ZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lID09IGN1cnJlbnROb2RlLT5jb2RlT3JpZ2luLmlubGlu
ZUNhbGxGcmFtZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAotICAgIFZlY3RvcjxDb2Rl
T3JpZ2luPiBwcmV2aW91c0lubGluZVN0YWNrID0gcHJldmlvdXNOb2RlLmNvZGVPcmlnaW4uaW5s
aW5lU3RhY2soKTsKLSAgICBWZWN0b3I8Q29kZU9yaWdpbj4gY3VycmVudElubGluZVN0YWNrID0g
Y3VycmVudE5vZGUuY29kZU9yaWdpbi5pbmxpbmVTdGFjaygpOworICAgIFZlY3RvcjxDb2RlT3Jp
Z2luPiBwcmV2aW91c0lubGluZVN0YWNrID0gcHJldmlvdXNOb2RlLT5jb2RlT3JpZ2luLmlubGlu
ZVN0YWNrKCk7CisgICAgVmVjdG9yPENvZGVPcmlnaW4+IGN1cnJlbnRJbmxpbmVTdGFjayA9IGN1
cnJlbnROb2RlLT5jb2RlT3JpZ2luLmlubGluZVN0YWNrKCk7CiAgICAgdW5zaWduZWQgY29tbW9u
U2l6ZSA9IHN0ZDo6bWluKHByZXZpb3VzSW5saW5lU3RhY2suc2l6ZSgpLCBjdXJyZW50SW5saW5l
U3RhY2suc2l6ZSgpKTsKICAgICB1bnNpZ25lZCBpbmRleE9mRGl2ZXJnZW5jZSA9IGNvbW1vblNp
emU7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNvbW1vblNpemU7ICsraSkgewpAQCAt
MTA3LDMyICsxMTEsMjMgQEAgYm9vbCBHcmFwaDo6ZHVtcENvZGVPcmlnaW4oUHJpbnRTdHJlYW0m
IAogICAgIHJldHVybiBoYXNQcmludGVkOwogfQogCi1pbnQgR3JhcGg6OmFtb3VudE9mTm9kZVdo
aXRlU3BhY2UoTm9kZSYgbm9kZSkKK2ludCBHcmFwaDo6YW1vdW50T2ZOb2RlV2hpdGVTcGFjZShO
b2RlKiBub2RlKQogewotICAgIHJldHVybiAobm9kZS5jb2RlT3JpZ2luLmlubGluZURlcHRoKCkg
LSAxKSAqIDI7CisgICAgcmV0dXJuIChub2RlLT5jb2RlT3JpZ2luLmlubGluZURlcHRoKCkgLSAx
KSAqIDI7CiB9CiAKLXZvaWQgR3JhcGg6OnByaW50Tm9kZVdoaXRlU3BhY2UoUHJpbnRTdHJlYW0m
IG91dCwgTm9kZSYgbm9kZSkKK3ZvaWQgR3JhcGg6OnByaW50Tm9kZVdoaXRlU3BhY2UoUHJpbnRT
dHJlYW0mIG91dCwgTm9kZSogbm9kZSkKIHsKICAgICBwcmludFdoaXRlU3BhY2Uob3V0LCBhbW91
bnRPZk5vZGVXaGl0ZVNwYWNlKG5vZGUpKTsKIH0KIAotdm9pZCBHcmFwaDo6ZHVtcChQcmludFN0
cmVhbSYgb3V0LCBFZGdlIGVkZ2UpCit2b2lkIEdyYXBoOjpkdW1wKFByaW50U3RyZWFtJiBvdXQs
IGNvbnN0IGNoYXIqIHByZWZpeCwgTm9kZSogbm9kZSkKIHsKLSAgICBvdXQucHJpbnQoCi0gICAg
ICAgIHVzZUtpbmRUb1N0cmluZyhlZGdlLnVzZUtpbmQoKSksCi0gICAgICAgICJAIiwgZWRnZS5p
bmRleCgpLAotICAgICAgICBBYmJyZXZpYXRlZFNwZWN1bGF0aW9uRHVtcChhdChlZGdlKS5wcmVk
aWN0aW9uKCkpKTsKLX0KKyAgICBOb2RlVHlwZSBvcCA9IG5vZGUtPm9wKCk7CiAKLXZvaWQgR3Jh
cGg6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCwgY29uc3QgY2hhciogcHJlZml4LCBOb2RlSW5kZXgg
bm9kZUluZGV4KQotewotICAgIE5vZGUmIG5vZGUgPSBhdChub2RlSW5kZXgpOwotICAgIE5vZGVU
eXBlIG9wID0gbm9kZS5vcCgpOwotCi0gICAgdW5zaWduZWQgcmVmQ291bnQgPSBub2RlLnJlZkNv
dW50KCk7CisgICAgdW5zaWduZWQgcmVmQ291bnQgPSBub2RlLT5yZWZDb3VudCgpOwogICAgIGJv
b2wgc2tpcHBlZCA9ICFyZWZDb3VudDsKLSAgICBib29sIG11c3RHZW5lcmF0ZSA9IG5vZGUubXVz
dEdlbmVyYXRlKCk7CisgICAgYm9vbCBtdXN0R2VuZXJhdGUgPSBub2RlLT5tdXN0R2VuZXJhdGUo
KTsKICAgICBpZiAobXVzdEdlbmVyYXRlKQogICAgICAgICAtLXJlZkNvdW50OwogCkBAIC0xNTYs
MTUwICsxNTEsOTYgQEAgdm9pZCBHcmFwaDo6ZHVtcChQcmludFN0cmVhbSYgb3V0LCBjb25zdAog
ICAgIC8vICAgICAgICAgJCMgICAtIHRoZSBpbmRleCBpbiB0aGUgQ29kZUJsb2NrIG9mIGEgY29u
c3RhbnQgeyBmb3IgbnVtZXJpYyBjb25zdGFudHMgdGhlIHZhbHVlIGlzIGRpc3BsYXllZCB8IGZv
ciBpbnRlZ2VycywgaW4gYm90aCBkZWNpbWFsIGFuZCBoZXggfS4KICAgICAvLyAgICAgICAgIGlk
IyAgLSB0aGUgaW5kZXggaW4gdGhlIENvZGVCbG9jayBvZiBhbiBpZGVudGlmaWVyIHsgaWYgY29k
ZUJsb2NrIGlzIHBhc3NlZCB0byBkdW1wKCksIHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gaXMg
ZGlzcGxheWVkIH0uCiAgICAgLy8gICAgICAgICB2YXIjIC0gdGhlIGluZGV4IG9mIGEgdmFyIG9u
IHRoZSBnbG9iYWwgb2JqZWN0LCB1c2VkIGJ5IEdldEdsb2JhbFZhci9QdXRHbG9iYWxWYXIgb3Bl
cmF0aW9ucy4KLSAgICBvdXQucHJpbnRmKCIlIDRkOiVzPCVjJXU6IiwgKGludClub2RlSW5kZXgs
IHNraXBwZWQgPyAiICBza2lwcGVkICAiIDogIiAgICAgICAgICAgIiwgbXVzdEdlbmVyYXRlID8g
JyEnIDogJyAnLCByZWZDb3VudCk7Ci0gICAgaWYgKG5vZGUuaGFzUmVzdWx0KCkgJiYgIXNraXBw
ZWQgJiYgbm9kZS5oYXNWaXJ0dWFsUmVnaXN0ZXIoKSkKLSAgICAgICAgb3V0LnByaW50KG5vZGUu
dmlydHVhbFJlZ2lzdGVyKCkpOworICAgIG91dC5wcmludGYoIiUgNGQ6JXM8JWMldToiLCAoaW50
KW5vZGUtPmluZGV4KCksIHNraXBwZWQgPyAiICBza2lwcGVkICAiIDogIiAgICAgICAgICAgIiwg
bXVzdEdlbmVyYXRlID8gJyEnIDogJyAnLCByZWZDb3VudCk7CisgICAgaWYgKG5vZGUtPmhhc1Jl
c3VsdCgpICYmICFza2lwcGVkICYmIG5vZGUtPmhhc1ZpcnR1YWxSZWdpc3RlcigpKQorICAgICAg
ICBvdXQucHJpbnQobm9kZS0+dmlydHVhbFJlZ2lzdGVyKCkpOwogICAgIGVsc2UKICAgICAgICAg
b3V0LnByaW50KCItIik7CiAgICAgb3V0LnByaW50KCI+XHQiLCBvcE5hbWUob3ApLCAiKCIpOwot
ICAgIGJvb2wgaGFzUHJpbnRlZCA9IGZhbHNlOwotICAgIGlmIChub2RlLmZsYWdzKCkgJiBOb2Rl
SGFzVmFyQXJncykgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGNoaWxkSWR4ID0gbm9kZS5maXJz
dENoaWxkKCk7IGNoaWxkSWR4IDwgbm9kZS5maXJzdENoaWxkKCkgKyBub2RlLm51bUNoaWxkcmVu
KCk7IGNoaWxkSWR4KyspIHsKLSAgICAgICAgICAgIGlmIChoYXNQcmludGVkKQotICAgICAgICAg
ICAgICAgIG91dC5wcmludCgiLCAiKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAg
ICBoYXNQcmludGVkID0gdHJ1ZTsKKyAgICBDb21tYVByaW50ZXIgY29tbWE7CisgICAgaWYgKG5v
ZGUtPmZsYWdzKCkgJiBOb2RlSGFzVmFyQXJncykgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGNo
aWxkSWR4ID0gbm9kZS0+Zmlyc3RDaGlsZCgpOyBjaGlsZElkeCA8IG5vZGUtPmZpcnN0Q2hpbGQo
KSArIG5vZGUtPm51bUNoaWxkcmVuKCk7IGNoaWxkSWR4KyspIHsKICAgICAgICAgICAgIGlmICgh
bV92YXJBcmdDaGlsZHJlbltjaGlsZElkeF0pCiAgICAgICAgICAgICAgICAgY29udGludWU7Ci0g
ICAgICAgICAgICBkdW1wKG91dCwgbV92YXJBcmdDaGlsZHJlbltjaGlsZElkeF0pOworICAgICAg
ICAgICAgb3V0LnByaW50KGNvbW1hLCBtX3ZhckFyZ0NoaWxkcmVuW2NoaWxkSWR4XSk7CiAgICAg
ICAgIH0KICAgICB9IGVsc2UgewotICAgICAgICBpZiAoISFub2RlLmNoaWxkMSgpKSB7Ci0gICAg
ICAgICAgICBkdW1wKG91dCwgbm9kZS5jaGlsZDEoKSk7Ci0gICAgICAgICAgICBoYXNQcmludGVk
ID0gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICBpZiAoISFub2RlLmNoaWxkMigpKSB7Ci0gICAg
ICAgICAgICBvdXQucHJpbnQoIiwgIik7IC8vIFdoZXRoZXIgb3Igbm90IHRoZXJlIGlzIGEgZmly
c3QgY2hpbGQsIHdlIHByaW50IGEgY29tbWEgdG8gZW5zdXJlIHRoYXQgd2Ugc2VlIGEgYmxhbmsg
ZW50cnkgaWYgdGhlcmUgd2Fzbid0IG9uZS4KLSAgICAgICAgICAgIGR1bXAob3V0LCBub2RlLmNo
aWxkMigpKTsKLSAgICAgICAgICAgIGhhc1ByaW50ZWQgPSB0cnVlOwotICAgICAgICB9Ci0gICAg
ICAgIGlmICghIW5vZGUuY2hpbGQzKCkpIHsKLSAgICAgICAgICAgIGlmICghbm9kZS5jaGlsZDEo
KSAmJiAhbm9kZS5jaGlsZDIoKSkKLSAgICAgICAgICAgICAgICBvdXQucHJpbnQoIiwgIik7IC8v
IElmIHRoZSB0aGlyZCBjaGlsZCBpcyB0aGUgZmlyc3Qgbm9uLWVtcHR5IG9uZSB0aGVuIG1ha2Ug
c3VyZSB3ZSBoYXZlIHR3byBibGFua3MgcHJlY2VkaW5nIGl0LgotICAgICAgICAgICAgb3V0LnBy
aW50KCIsICIpOwotICAgICAgICAgICAgZHVtcChvdXQsIG5vZGUuY2hpbGQzKCkpOwotICAgICAg
ICAgICAgaGFzUHJpbnRlZCA9IHRydWU7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoc3Ry
bGVuKG5vZGVGbGFnc0FzU3RyaW5nKG5vZGUuZmxhZ3MoKSkpKSB7Ci0gICAgICAgIG91dC5wcmlu
dChoYXNQcmludGVkID8gIiwgIiA6ICIiLCBub2RlRmxhZ3NBc1N0cmluZyhub2RlLmZsYWdzKCkp
KTsKLSAgICAgICAgaGFzUHJpbnRlZCA9IHRydWU7Ci0gICAgfQotICAgIGlmIChub2RlLmhhc0Fy
cmF5TW9kZSgpKSB7Ci0gICAgICAgIG91dC5wcmludChoYXNQcmludGVkID8gIiwgIiA6ICIiLCBu
b2RlLmFycmF5TW9kZSgpKTsKLSAgICAgICAgaGFzUHJpbnRlZCA9IHRydWU7Ci0gICAgfQotICAg
IGlmIChub2RlLmhhc1Zhck51bWJlcigpKSB7Ci0gICAgICAgIG91dC5wcmludChoYXNQcmludGVk
ID8gIiwgIiA6ICIiLCAidmFyIiwgbm9kZS52YXJOdW1iZXIoKSk7Ci0gICAgICAgIGhhc1ByaW50
ZWQgPSB0cnVlOwotICAgIH0KLSAgICBpZiAobm9kZS5oYXNSZWdpc3RlclBvaW50ZXIoKSkgewot
ICAgICAgICBvdXQucHJpbnQoaGFzUHJpbnRlZCA/ICIsICIgOiAiIiwgImdsb2JhbCIsIGdsb2Jh
bE9iamVjdEZvcihub2RlLmNvZGVPcmlnaW4pLT5maW5kUmVnaXN0ZXJJbmRleChub2RlLnJlZ2lz
dGVyUG9pbnRlcigpKSwgIigiLCBSYXdQb2ludGVyKG5vZGUucmVnaXN0ZXJQb2ludGVyKCkpLCAi
KSIpOwotICAgICAgICBoYXNQcmludGVkID0gdHJ1ZTsKLSAgICB9Ci0gICAgaWYgKG5vZGUuaGFz
SWRlbnRpZmllcigpKSB7Ci0gICAgICAgIG91dC5wcmludChoYXNQcmludGVkID8gIiwgIiA6ICIi
LCAiaWQiLCBub2RlLmlkZW50aWZpZXJOdW1iZXIoKSwgInsiLCBtX2NvZGVCbG9jay0+aWRlbnRp
Zmllcihub2RlLmlkZW50aWZpZXJOdW1iZXIoKSkuc3RyaW5nKCksICJ9Iik7Ci0gICAgICAgIGhh
c1ByaW50ZWQgPSB0cnVlOwotICAgIH0KLSAgICBpZiAobm9kZS5oYXNTdHJ1Y3R1cmVTZXQoKSkg
ewotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG5vZGUuc3RydWN0dXJlU2V0KCkuc2l6
ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIG91dC5wcmludChoYXNQcmludGVkID8gIiwgIiA6ICIi
LCAic3RydWN0KCIsIFJhd1BvaW50ZXIobm9kZS5zdHJ1Y3R1cmVTZXQoKVtpXSksICI6ICIsIElu
ZGV4aW5nVHlwZUR1bXAobm9kZS5zdHJ1Y3R1cmVTZXQoKVtpXS0+aW5kZXhpbmdUeXBlKCkpLCAi
KSIpOwotICAgICAgICAgICAgaGFzUHJpbnRlZCA9IHRydWU7Ci0gICAgICAgIH0KLSAgICB9Ci0g
ICAgaWYgKG5vZGUuaGFzU3RydWN0dXJlKCkpIHsKLSAgICAgICAgb3V0LnByaW50KGhhc1ByaW50
ZWQgPyAiLCAiIDogIiIsICJzdHJ1Y3QoIiwgUmF3UG9pbnRlcihub2RlLnN0cnVjdHVyZSgpKSwg
IjogIiwgSW5kZXhpbmdUeXBlRHVtcChub2RlLnN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSks
ICIpIik7Ci0gICAgICAgIGhhc1ByaW50ZWQgPSB0cnVlOwotICAgIH0KLSAgICBpZiAobm9kZS5o
YXNTdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSgpKSB7Ci0gICAgICAgIG91dC5wcmludChoYXNQcmlu
dGVkID8gIiwgIiA6ICIiLCAic3RydWN0KCIsIFJhd1BvaW50ZXIobm9kZS5zdHJ1Y3R1cmVUcmFu
c2l0aW9uRGF0YSgpLnByZXZpb3VzU3RydWN0dXJlKSwgIiAtPiAiLCBSYXdQb2ludGVyKG5vZGUu
c3RydWN0dXJlVHJhbnNpdGlvbkRhdGEoKS5uZXdTdHJ1Y3R1cmUpLCAiKSIpOwotICAgICAgICBo
YXNQcmludGVkID0gdHJ1ZTsKLSAgICB9Ci0gICAgaWYgKG5vZGUuaGFzRnVuY3Rpb24oKSkgewot
ICAgICAgICBvdXQucHJpbnQoaGFzUHJpbnRlZCA/ICIsICIgOiAiIiwgUmF3UG9pbnRlcihub2Rl
LmZ1bmN0aW9uKCkpKTsKLSAgICAgICAgaGFzUHJpbnRlZCA9IHRydWU7Ci0gICAgfQotICAgIGlm
IChub2RlLmhhc1N0b3JhZ2VBY2Nlc3NEYXRhKCkpIHsKLSAgICAgICAgU3RvcmFnZUFjY2Vzc0Rh
dGEmIHN0b3JhZ2VBY2Nlc3NEYXRhID0gbV9zdG9yYWdlQWNjZXNzRGF0YVtub2RlLnN0b3JhZ2VB
Y2Nlc3NEYXRhSW5kZXgoKV07Ci0gICAgICAgIG91dC5wcmludChoYXNQcmludGVkID8gIiwgIiA6
ICIiLCAiaWQiLCBzdG9yYWdlQWNjZXNzRGF0YS5pZGVudGlmaWVyTnVtYmVyLCAieyIsIG1fY29k
ZUJsb2NrLT5pZGVudGlmaWVyKHN0b3JhZ2VBY2Nlc3NEYXRhLmlkZW50aWZpZXJOdW1iZXIpLnN0
cmluZygpLCAifSIpOworICAgICAgICBpZiAoISFub2RlLmNoaWxkMSgpIHx8ICEhbm9kZS5jaGls
ZDIoKSB8fCAhIW5vZGUuY2hpbGQzKCkpCisgICAgICAgICAgICBvdXQucHJpbnQoY29tbWEsIG5v
ZGUuY2hpbGQxKCkpOworICAgICAgICBpZiAoISFub2RlLmNoaWxkMigpIHx8ICEhbm9kZS5jaGls
ZDMoKSkKKyAgICAgICAgICAgIG91dC5wcmludChjb21tYSwgbm9kZS5jaGlsZDIoKSk7CisgICAg
ICAgIGlmICghIW5vZGUuY2hpbGQzKCkpCisgICAgICAgICAgICBvdXQucHJpbnQoY29tbWEsIG5v
ZGUuY2hpbGQzKCkpOworICAgIH0KKworICAgIGlmIChzdHJsZW4obm9kZUZsYWdzQXNTdHJpbmco
bm9kZS0+ZmxhZ3MoKSkpKQorICAgICAgICBvdXQucHJpbnQoY29tbWEsIG5vZGVGbGFnc0FzU3Ry
aW5nKG5vZGUtPmZsYWdzKCkpKTsKKyAgICBpZiAobm9kZS0+aGFzQXJyYXlNb2RlKCkpIHsKKyAg
ICAgICAgb3V0LnByaW50KGNvbW1hLCBub2RlLT5hcnJheU1vZGUoKSk7CisgICAgaWYgKG5vZGUt
Pmhhc1Zhck51bWJlcigpKSB7CisgICAgICAgIG91dC5wcmludChjb21tYSwgbm9kZS0+dmFyTnVt
YmVyKCkpOworICAgIGlmIChub2RlLT5oYXNSZWdpc3RlclBvaW50ZXIoKSkKKyAgICAgICAgb3V0
LnByaW50KGNvbW1hLCAiZ2xvYmFsIiwgZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPmNvZGVPcmlnaW4p
LT5maW5kUmVnaXN0ZXJJbmRleChub2RlLT5yZWdpc3RlclBvaW50ZXIoKSksICIoIiwgUmF3UG9p
bnRlcihub2RlLT5yZWdpc3RlclBvaW50ZXIoKSksICIpIik7CisgICAgaWYgKG5vZGUtPmhhc0lk
ZW50aWZpZXIoKSkKKyAgICAgICAgb3V0LnByaW50KGNvbW1hLCAiaWQiLCBub2RlLT5pZGVudGlm
aWVyTnVtYmVyKCksICJ7IiwgbV9jb2RlQmxvY2stPmlkZW50aWZpZXIobm9kZS0+aWRlbnRpZmll
ck51bWJlcigpKS5zdHJpbmcoKSwgIn0iKTsKKyAgICBpZiAobm9kZS0+aGFzU3RydWN0dXJlU2V0
KCkpIHsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBub2RlLnN0cnVjdHVyZVNldCgp
LnNpemUoKTsgKytpKQorICAgICAgICAgICAgb3V0LnByaW50KGNvbW1hLCAic3RydWN0KCIsIFJh
d1BvaW50ZXIobm9kZS0+c3RydWN0dXJlU2V0KClbaV0pLCAiOiAiLCBJbmRleGluZ1R5cGVEdW1w
KG5vZGUtPnN0cnVjdHVyZVNldCgpW2ldLT5pbmRleGluZ1R5cGUoKSksICIpIik7CisgICAgfQor
ICAgIGlmIChub2RlLT5oYXNTdHJ1Y3R1cmUoKSkKKyAgICAgICAgb3V0LnByaW50KGNvbW1hLCAi
c3RydWN0KCIsIFJhd1BvaW50ZXIobm9kZS0+c3RydWN0dXJlKCkpLCAiOiAiLCBJbmRleGluZ1R5
cGVEdW1wKG5vZGUtPnN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSksICIpIik7CisgICAgaWYg
KG5vZGUtPmhhc1N0cnVjdHVyZVRyYW5zaXRpb25EYXRhKCkpCisgICAgICAgIG91dC5wcmludChj
b21tYSwgInN0cnVjdCgiLCBSYXdQb2ludGVyKG5vZGUtPnN0cnVjdHVyZVRyYW5zaXRpb25EYXRh
KCkucHJldmlvdXNTdHJ1Y3R1cmUpLCAiIC0+ICIsIFJhd1BvaW50ZXIobm9kZS0+c3RydWN0dXJl
VHJhbnNpdGlvbkRhdGEoKS5uZXdTdHJ1Y3R1cmUpLCAiKSIpOworICAgIGlmIChub2RlLT5oYXNG
dW5jdGlvbigpKQorICAgICAgICBvdXQucHJpbnQoY29tbWEsICJmdW5jdGlvbigiLCBSYXdQb2lu
dGVyKG5vZGUtPmZ1bmN0aW9uKCkpLCAiLCAiLCBGdW5jdGlvbkV4ZWN1dGFibGVEdW1wKG5vZGUt
PmZ1bmN0aW9uKCktPmpzRXhlY3V0YWJsZSgpKSwgIikiKTsKKyAgICBpZiAobm9kZS0+aGFzRXhl
Y3V0YWJsZSgpKQorICAgICAgICBvdXQucHJpbnQoY29tbWEsICJleGVjdXRhYmxlKCIsIEZ1bmN0
aW9uRXhlY3V0YWJsZUR1bXAobm9kZS0+ZXhlY3V0YWJsZSgpKSwgIikiKTsKKyAgICBpZiAobm9k
ZS0+aGFzU3RvcmFnZUFjY2Vzc0RhdGEoKSkgeworICAgICAgICBTdG9yYWdlQWNjZXNzRGF0YSYg
c3RvcmFnZUFjY2Vzc0RhdGEgPSBtX3N0b3JhZ2VBY2Nlc3NEYXRhW25vZGUtPnN0b3JhZ2VBY2Nl
c3NEYXRhSW5kZXgoKV07CisgICAgICAgIG91dC5wcmludChjb21tYSwgImlkIiwgc3RvcmFnZUFj
Y2Vzc0RhdGEuaWRlbnRpZmllck51bWJlciwgInsiLCBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihz
dG9yYWdlQWNjZXNzRGF0YS5pZGVudGlmaWVyTnVtYmVyKS5zdHJpbmcoKSwgIn0iKTsKICAgICAg
ICAgb3V0LnByaW50KCIsICIsIHN0YXRpY19jYXN0PHB0cmRpZmZfdD4oc3RvcmFnZUFjY2Vzc0Rh
dGEub2Zmc2V0KSk7Ci0gICAgICAgIGhhc1ByaW50ZWQgPSB0cnVlOwogICAgIH0KLSAgICBBU1NF
UlQobm9kZS5oYXNWYXJpYWJsZUFjY2Vzc0RhdGEoKSA9PSBub2RlLmhhc0xvY2FsKCkpOwotICAg
IGlmIChub2RlLmhhc1ZhcmlhYmxlQWNjZXNzRGF0YSgpKSB7Ci0gICAgICAgIFZhcmlhYmxlQWNj
ZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhID0gbm9kZS52YXJpYWJsZUFjY2Vzc0RhdGEoKTsK
KyAgICBBU1NFUlQobm9kZS0+aGFzVmFyaWFibGVBY2Nlc3NEYXRhKCkgPT0gbm9kZS0+aGFzTG9j
YWwoKSk7CisgICAgaWYgKG5vZGUtPmhhc1ZhcmlhYmxlQWNjZXNzRGF0YSgpKSB7CisgICAgICAg
IFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhID0gbm9kZS0+dmFyaWFibGVB
Y2Nlc3NEYXRhKCk7CiAgICAgICAgIGludCBvcGVyYW5kID0gdmFyaWFibGVBY2Nlc3NEYXRhLT5v
cGVyYW5kKCk7CiAgICAgICAgIGlmIChvcGVyYW5kSXNBcmd1bWVudChvcGVyYW5kKSkKLSAgICAg
ICAgICAgIG91dC5wcmludChoYXNQcmludGVkID8gIiwgIiA6ICIiLCAiYXJnIiwgb3BlcmFuZFRv
QXJndW1lbnQob3BlcmFuZCksICIoIiwgVmFyaWFibGVBY2Nlc3NEYXRhRHVtcCgqdGhpcywgdmFy
aWFibGVBY2Nlc3NEYXRhKSwgIikiKTsKKyAgICAgICAgICAgIG91dC5wcmludChjb21tYSwgImFy
ZyIsIG9wZXJhbmRUb0FyZ3VtZW50KG9wZXJhbmQpLCAiKCIsIFZhcmlhYmxlQWNjZXNzRGF0YUR1
bXAoKnRoaXMsIHZhcmlhYmxlQWNjZXNzRGF0YSksICIpIik7CiAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgIG91dC5wcmludChoYXNQcmludGVkID8gIiwgIiA6ICIiLCAiciIsIG9wZXJhbmQsICIo
IiwgVmFyaWFibGVBY2Nlc3NEYXRhRHVtcCgqdGhpcywgdmFyaWFibGVBY2Nlc3NEYXRhKSwgIiki
KTsKLSAgICAgICAgaGFzUHJpbnRlZCA9IHRydWU7CisgICAgICAgICAgICBvdXQucHJpbnQoY29t
bWEsICJyIiwgb3BlcmFuZCwgIigiLCBWYXJpYWJsZUFjY2Vzc0RhdGFEdW1wKCp0aGlzLCB2YXJp
YWJsZUFjY2Vzc0RhdGEpLCAiKSIpOwogICAgIH0KLSAgICBpZiAobm9kZS5oYXNDb25zdGFudEJ1
ZmZlcigpKSB7Ci0gICAgICAgIGlmIChoYXNQcmludGVkKQotICAgICAgICAgICAgb3V0LnByaW50
KCIsICIpOworICAgIGlmIChub2RlLT5oYXNDb25zdGFudEJ1ZmZlcigpKSB7CisgICAgICAgIG91
dC5wcmludChjb21tYSk7CiAgICAgICAgIG91dC5wcmludChub2RlLnN0YXJ0Q29uc3RhbnQoKSwg
IjpbIik7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBub2RlLm51bUNvbnN0YW50
cygpOyArK2kpIHsKLSAgICAgICAgICAgIGlmIChpKQotICAgICAgICAgICAgICAgIG91dC5wcmlu
dCgiLCAiKTsKLSAgICAgICAgICAgIG91dC5wcmludChtX2NvZGVCbG9jay0+Y29uc3RhbnRCdWZm
ZXIobm9kZS5zdGFydENvbnN0YW50KCkpW2ldKTsKLSAgICAgICAgfQorICAgICAgICBDb21tYVBy
aW50ZXIgYW5vdGhlckNvbW1hOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbm9k
ZS5udW1Db25zdGFudHMoKTsgKytpKQorICAgICAgICAgICAgb3V0LnByaW50KGFub3RoZXJDb21t
YSwgbV9jb2RlQmxvY2stPmNvbnN0YW50QnVmZmVyKG5vZGUuc3RhcnRDb25zdGFudCgpKVtpXSk7
CiAgICAgICAgIG91dC5wcmludCgiXSIpOwotICAgICAgICBoYXNQcmludGVkID0gdHJ1ZTsKLSAg
ICB9Ci0gICAgaWYgKG5vZGUuaGFzSW5kZXhpbmdUeXBlKCkpIHsKLSAgICAgICAgaWYgKGhhc1By
aW50ZWQpCi0gICAgICAgICAgICBvdXQucHJpbnQoIiwgIik7Ci0gICAgICAgIG91dC5wcmludChJ
bmRleGluZ1R5cGVEdW1wKG5vZGUuaW5kZXhpbmdUeXBlKCkpKTsKLSAgICAgICAgaGFzUHJpbnRl
ZCA9IHRydWU7Ci0gICAgfQotICAgIGlmIChub2RlLmhhc0V4ZWN1dGlvbkNvdW50ZXIoKSkgewot
ICAgICAgICBpZiAoaGFzUHJpbnRlZCkKLSAgICAgICAgICAgIG91dC5wcmludCgiLCAiKTsKLSAg
ICAgICAgb3V0LnByaW50KFJhd1BvaW50ZXIobm9kZS5leGVjdXRpb25Db3VudGVyKCkpKTsKLSAg
ICAgICAgaGFzUHJpbnRlZCA9IHRydWU7CiAgICAgfQorICAgIGlmIChub2RlLT5oYXNJbmRleGlu
Z1R5cGUoKSkKKyAgICAgICAgb3V0LnByaW50KGNvbW1hLCBJbmRleGluZ1R5cGVEdW1wKG5vZGUt
PmluZGV4aW5nVHlwZSgpKSk7CisgICAgaWYgKG5vZGUtPmhhc0V4ZWN1dGlvbkNvdW50ZXIoKSkg
eworICAgICAgICBvdXQucHJpbnQoY29tbWEsIFJhd1BvaW50ZXIobm9kZS0+ZXhlY3V0aW9uQ291
bnRlcigpKSk7CiAgICAgaWYgKG9wID09IEpTQ29uc3RhbnQpIHsKLSAgICAgICAgb3V0LnByaW50
KGhhc1ByaW50ZWQgPyAiLCAiIDogIiIsICIkIiwgbm9kZS5jb25zdGFudE51bWJlcigpKTsKLSAg
ICAgICAgSlNWYWx1ZSB2YWx1ZSA9IHZhbHVlT2ZKU0NvbnN0YW50KG5vZGVJbmRleCk7CisgICAg
ICAgIG91dC5wcmludChjb21tYSwgIiQiLCBub2RlLT5jb25zdGFudE51bWJlcigpKTsKKyAgICAg
ICAgSlNWYWx1ZSB2YWx1ZSA9IHZhbHVlT2ZKU0NvbnN0YW50KG5vZGUpOwogICAgICAgICBvdXQu
cHJpbnQoIiA9ICIsIHZhbHVlKTsKLSAgICAgICAgaGFzUHJpbnRlZCA9IHRydWU7Ci0gICAgfQot
ICAgIGlmIChvcCA9PSBXZWFrSlNDb25zdGFudCkgewotICAgICAgICBvdXQucHJpbnQoaGFzUHJp
bnRlZCA/ICIsICIgOiAiIiwgUmF3UG9pbnRlcihub2RlLndlYWtDb25zdGFudCgpKSk7Ci0gICAg
ICAgIGhhc1ByaW50ZWQgPSB0cnVlOwotICAgIH0KLSAgICBpZiAgKG5vZGUuaXNCcmFuY2goKSB8
fCBub2RlLmlzSnVtcCgpKSB7Ci0gICAgICAgIG91dC5wcmludChoYXNQcmludGVkID8gIiwgIiA6
ICIiLCAiVDojIiwgbm9kZS50YWtlbkJsb2NrSW5kZXgoKSk7Ci0gICAgICAgIGhhc1ByaW50ZWQg
PSB0cnVlOwotICAgIH0KLSAgICBpZiAgKG5vZGUuaXNCcmFuY2goKSkgewotICAgICAgICBvdXQu
cHJpbnQoaGFzUHJpbnRlZCA/ICIsICIgOiAiIiwgIkY6IyIsIG5vZGUubm90VGFrZW5CbG9ja0lu
ZGV4KCkpOwotICAgICAgICBoYXNQcmludGVkID0gdHJ1ZTsKICAgICB9Ci0gICAgb3V0LnByaW50
KGhhc1ByaW50ZWQgPyAiLCAiIDogIiIsICJiYyMiLCBub2RlLmNvZGVPcmlnaW4uYnl0ZWNvZGVJ
bmRleCk7Ci0gICAgaGFzUHJpbnRlZCA9IHRydWU7Ci0gICAgCi0gICAgKHZvaWQpaGFzUHJpbnRl
ZDsKKyAgICBpZiAob3AgPT0gV2Vha0pTQ29uc3RhbnQpCisgICAgICAgIG91dC0+cHJpbnQoY29t
bWEsIFJhd1BvaW50ZXIobm9kZS0+d2Vha0NvbnN0YW50KCkpKTsKKyAgICBpZiAobm9kZS0+aXNC
cmFuY2goKSB8fCBub2RlLT5pc0p1bXAoKSkKKyAgICAgICAgb3V0LnByaW50KGNvbW1hLCAiVDoj
Iiwgbm9kZS0+dGFrZW5CbG9ja0luZGV4KCkpOworICAgIGlmIChub2RlLT5pc0JyYW5jaCgpKQor
ICAgICAgICBvdXQucHJpbnQoY29tbWEsICJGOiMiLCBub2RlLT5ub3RUYWtlbkJsb2NrSW5kZXgo
KSk7CisgICAgb3V0LnByaW50KGNvbW1hLCAiYmMjIiwgbm9kZS0+Y29kZU9yaWdpbi5ieXRlY29k
ZUluZGV4KTsKICAgICAKICAgICBvdXQucHJpbnQoIikiKTsKIAogICAgIGlmICghc2tpcHBlZCkg
ewotICAgICAgICBpZiAobm9kZS5oYXNWYXJpYWJsZUFjY2Vzc0RhdGEoKSkKLSAgICAgICAgICAg
IG91dC5wcmludCgiICBwcmVkaWN0aW5nICIsIFNwZWN1bGF0aW9uRHVtcChub2RlLnZhcmlhYmxl
QWNjZXNzRGF0YSgpLT5wcmVkaWN0aW9uKCkpLCBub2RlLnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5z
aG91bGRVc2VEb3VibGVGb3JtYXQoKSA/ICIsIGZvcmNpbmcgZG91YmxlIiA6ICIiKTsKLSAgICAg
ICAgZWxzZSBpZiAobm9kZS5oYXNIZWFwUHJlZGljdGlvbigpKQotICAgICAgICAgICAgb3V0LnBy
aW50KCIgIHByZWRpY3RpbmcgIiwgU3BlY3VsYXRpb25EdW1wKG5vZGUuZ2V0SGVhcFByZWRpY3Rp
b24oKSkpOworICAgICAgICBpZiAobm9kZS0+aGFzVmFyaWFibGVBY2Nlc3NEYXRhKCkpCisgICAg
ICAgICAgICBvdXQucHJpbnQoIiAgcHJlZGljdGluZyAiLCBTcGVjdWxhdGlvbkR1bXAobm9kZS0+
dmFyaWFibGVBY2Nlc3NEYXRhKCktPnByZWRpY3Rpb24oKSksIG5vZGUtPnZhcmlhYmxlQWNjZXNz
RGF0YSgpLT5zaG91bGRVc2VEb3VibGVGb3JtYXQoKSA/ICIsIGZvcmNpbmcgZG91YmxlIiA6ICIi
KTsKKyAgICAgICAgZWxzZSBpZiAobm9kZS0+aGFzSGVhcFByZWRpY3Rpb24oKSkKKyAgICAgICAg
ICAgIG91dC5wcmludCgiICBwcmVkaWN0aW5nICIsIFNwZWN1bGF0aW9uRHVtcChub2RlLT5nZXRI
ZWFwUHJlZGljdGlvbigpKSk7CiAgICAgfQogICAgIAogICAgIG91dC5wcmludCgiXG4iKTsKQEAg
LTMwOSw3ICsyNTAsNyBAQCB2b2lkIEdyYXBoOjpkdW1wQmxvY2tIZWFkZXIoUHJpbnRTdHJlYW0m
CiB7CiAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2Jsb2Nrc1tibG9ja0luZGV4XS5nZXQoKTsK
IAotICAgIG91dC5wcmludChwcmVmaXgsICJCbG9jayAjIiwgYmxvY2tJbmRleCwgIiAoIiwgYXQo
YmxvY2stPmF0KDApKS5jb2RlT3JpZ2luLCAiKTogIiwgYmxvY2stPmlzUmVhY2hhYmxlID8gIiIg
OiAiKHNraXBwZWQpIiwgYmxvY2stPmlzT1NSVGFyZ2V0ID8gIiAoT1NSIHRhcmdldCkiIDogIiIs
ICJcbiIpOworICAgIG91dC5wcmludChwcmVmaXgsICJCbG9jayAjIiwgYmxvY2tJbmRleCwgIiAo
IiwgYmxvY2stPmF0KDApLT5jb2RlT3JpZ2luLCAiKTogIiwgYmxvY2stPmlzUmVhY2hhYmxlID8g
IiIgOiAiKHNraXBwZWQpIiwgYmxvY2stPmlzT1NSVGFyZ2V0ID8gIiAoT1NSIHRhcmdldCkiIDog
IiIsICJcbiIpOwogICAgIG91dC5wcmludChwcmVmaXgsICIgIFByZWRlY2Vzc29yczoiKTsKICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGJsb2NrLT5tX3ByZWRlY2Vzc29ycy5zaXplKCk7ICsr
aSkKICAgICAgICAgb3V0LnByaW50KCIgIyIsIGJsb2NrLT5tX3ByZWRlY2Vzc29yc1tpXSk7CkBA
IC0zMzIsMTcgKzI3MywxNiBAQCB2b2lkIEdyYXBoOjpkdW1wQmxvY2tIZWFkZXIoUHJpbnRTdHJl
YW0mCiAgICAgfQogICAgIG91dC5wcmludChwcmVmaXgsICIgIFBoaSBOb2RlczoiKTsKICAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IGJsb2NrLT5waGlzLnNpemUoKTsgKytpKSB7Ci0gICAgICAg
IE5vZGVJbmRleCBwaGlOb2RlSW5kZXggPSBibG9jay0+cGhpc1tpXTsKLSAgICAgICAgTm9kZSYg
cGhpTm9kZSA9IGF0KHBoaU5vZGVJbmRleCk7Ci0gICAgICAgIGlmICghcGhpTm9kZS5zaG91bGRH
ZW5lcmF0ZSgpICYmIHBoaU5vZGVEdW1wTW9kZSA9PSBEdW1wTGl2ZVBoaXNPbmx5KQorICAgICAg
ICBOb2RlKiBwaGlOb2RlID0gYmxvY2stPnBoaXNbaV07CisgICAgICAgIGlmICghcGhpTm9kZS0+
c2hvdWxkR2VuZXJhdGUoKSAmJiBwaGlOb2RlRHVtcE1vZGUgPT0gRHVtcExpdmVQaGlzT25seSkK
ICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBvdXQucHJpbnQoIiBAIiwgcGhpTm9kZUlu
ZGV4LCAiPCIsIHBoaU5vZGUucmVmQ291bnQoKSwgIj4tPigiKTsKLSAgICAgICAgaWYgKHBoaU5v
ZGUuY2hpbGQxKCkpIHsKLSAgICAgICAgICAgIG91dC5wcmludCgiQCIsIHBoaU5vZGUuY2hpbGQx
KCkuaW5kZXgoKSk7Ci0gICAgICAgICAgICBpZiAocGhpTm9kZS5jaGlsZDIoKSkgewotICAgICAg
ICAgICAgICAgIG91dC5wcmludCgiLCBAIiwgcGhpTm9kZS5jaGlsZDIoKS5pbmRleCgpKTsKLSAg
ICAgICAgICAgICAgICBpZiAocGhpTm9kZS5jaGlsZDMoKSkKLSAgICAgICAgICAgICAgICAgICAg
b3V0LnByaW50KCIsIEAiLCBwaGlOb2RlLmNoaWxkMygpLmluZGV4KCkpOworICAgICAgICBvdXQu
cHJpbnQoIiBAIiwgcGhpTm9kZS0+aW5kZXgoKSwgIjwiLCBwaGlOb2RlLT5yZWZDb3VudCgpLCAi
Pi0+KCIpOworICAgICAgICBpZiAocGhpTm9kZS0+Y2hpbGQxKCkpIHsKKyAgICAgICAgICAgIG91
dC5wcmludCgiQCIsIHBoaU5vZGUtPmNoaWxkMSgpLT5pbmRleCgpKCkpOworICAgICAgICAgICAg
aWYgKHBoaU5vZGUtPmNoaWxkMigpKSB7CisgICAgICAgICAgICAgICAgb3V0LnByaW50KCIsIEAi
LCBwaGlOb2RlLT5jaGlsZDIoKS0+aW5kZXgoKSk7CisgICAgICAgICAgICAgICAgaWYgKHBoaU5v
ZGUtPmNoaWxkMygpKQorICAgICAgICAgICAgICAgICAgICBvdXQucHJpbnQoIiwgQCIsIHBoaU5v
ZGUtPmNoaWxkMygpLT5pbmRleCgpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAg
ICBvdXQucHJpbnQoIikiLCBpICsgMSA8IGJsb2NrLT5waGlzLnNpemUoKSA/ICIsIiA6ICIiKTsK
QEAgLTM1Miw3ICsyOTIsNyBAQCB2b2lkIEdyYXBoOjpkdW1wQmxvY2tIZWFkZXIoUHJpbnRTdHJl
YW0mCiAKIHZvaWQgR3JhcGg6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkKIHsKLSAgICBOb2RlSW5k
ZXggbGFzdE5vZGVJbmRleCA9IE5vTm9kZTsKKyAgICBOb2RlKiBsYXN0Tm9kZSA9IDA7CiAgICAg
Zm9yIChzaXplX3QgYiA9IDA7IGIgPCBtX2Jsb2Nrcy5zaXplKCk7ICsrYikgewogICAgICAgICBC
YXNpY0Jsb2NrKiBibG9jayA9IG1fYmxvY2tzW2JdLmdldCgpOwogICAgICAgICBpZiAoIWJsb2Nr
KQpAQCAtMzY4LDkgKzMwOCw5IEBAIHZvaWQgR3JhcGg6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkK
ICAgICAgICAgZHVtcE9wZXJhbmRzKGJsb2NrLT52YXJpYWJsZXNBdEhlYWQsIG91dCk7CiAgICAg
ICAgIG91dC5wcmludCgiXG4iKTsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBibG9j
ay0+c2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIGR1bXBDb2RlT3JpZ2luKG91dCwgIiIsIGxh
c3ROb2RlSW5kZXgsIGJsb2NrLT5hdChpKSk7CisgICAgICAgICAgICBkdW1wQ29kZU9yaWdpbihv
dXQsICIiLCBsYXN0Tm9kZSwgYmxvY2stPmF0KGkpKTsKICAgICAgICAgICAgIGR1bXAob3V0LCAi
IiwgYmxvY2stPmF0KGkpKTsKLSAgICAgICAgICAgIGxhc3ROb2RlSW5kZXggPSBibG9jay0+YXQo
aSk7CisgICAgICAgICAgICBsYXN0Tm9kZSA9IGJsb2NrLT5hdChpKTsKICAgICAgICAgfQogICAg
ICAgICBvdXQucHJpbnQoIiAgdmFycyBhZnRlcjogIik7CiAgICAgICAgIGlmIChibG9jay0+Y2Zh
SGFzVmlzaXRlZCkKQEAgLTM4Niw0MCArMzI2LDQwIEBAIHZvaWQgR3JhcGg6OmR1bXAoUHJpbnRT
dHJlYW0mIG91dCkKIAogLy8gRklYTUU6IENvbnZlcnQgdGhpcyB0byBiZSBpdGVyYXRpdmUsIG5v
dCByZWN1cnNpdmUuCiAjZGVmaW5lIERPX1RPX0NISUxEUkVOKG5vZGUsIHRoaW5nVG9EbykgZG8g
eyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIE5vZGUmIF9ub2RlID0gKG5v
ZGUpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAg
IGlmIChfbm9kZS5mbGFncygpICYgTm9kZUhhc1ZhckFyZ3MpIHsgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCi0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIF9jaGlsZElkeCA9IF9ub2RlLmZp
cnN0Q2hpbGQoKTsgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgIF9jaGlsZElkeCA8
IF9ub2RlLmZpcnN0Q2hpbGQoKSArIF9ub2RlLm51bUNoaWxkcmVuKCk7ICBcCisgICAgICAgIE5v
ZGUqIF9ub2RlID0gKG5vZGUpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCisgICAgICAgIGlmIChfbm9kZS0+ZmxhZ3MoKSAmIE5vZGVIYXNWYXJBcmdzKSB7ICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIF9jaGls
ZElkeCA9IF9ub2RlLT5maXJzdENoaWxkKCk7ICAgICAgICAgICAgICBcCisgICAgICAgICAgICAg
ICAgIF9jaGlsZElkeCA8IF9ub2RlLT5maXJzdENoaWxkKCkgKyBfbm9kZS0+bnVtQ2hpbGRyZW4o
KTsgXAogICAgICAgICAgICAgICAgICBfY2hpbGRJZHgrKykgeyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICAgICAgIGlmICghIW1fdmFyQXJnQ2hp
bGRyZW5bX2NoaWxkSWR4XSkgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICAgICAg
ICAgICB0aGluZ1RvRG8obV92YXJBcmdDaGlsZHJlbltfY2hpbGRJZHhdKTsgICAgICAgICAgICAg
XAogICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAogICAgICAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgaWYgKCFf
bm9kZS5jaGlsZDEoKSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAot
ICAgICAgICAgICAgICAgIEFTU0VSVCghX25vZGUuY2hpbGQyKCkgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAmJiAhX25vZGUuY2hpbGQz
KCkpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgaWYgKCFfbm9k
ZS0+Y2hpbGQxKCkpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAg
ICAgICAgICAgICAgIEFTU0VSVCghX25vZGUtPmNoaWxkMigpICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAmJiAhX25vZGUtPmNoaWxkMygp
KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICAgICAgIGJyZWFrOyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAg
ICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAotICAgICAgICAgICAgdGhpbmdUb0RvKF9ub2RlLmNoaWxkMSgpKTsgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgdGhpbmdUb0RvKF9ub2Rl
LT5jaGlsZDEoKSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAotICAgICAgICAgICAgaWYgKCFfbm9kZS5jaGlsZDIoKSkgeyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgIEFTU0VSVCghX25vZGUu
Y2hpbGQzKCkpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAg
aWYgKCFfbm9kZS0+Y2hpbGQyKCkpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAorICAgICAgICAgICAgICAgIEFTU0VSVCghX25vZGUtPmNoaWxkMygpKTsgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICAgfSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAotICAgICAgICAgICAgdGhpbmdUb0RvKF9ub2RlLmNoaWxkMigpKTsgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgdGhpbmdUb0RvKF9ub2RlLT5jaGlsZDIo
KSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAot
ICAgICAgICAgICAgaWYgKCFfbm9kZS5jaGlsZDMoKSkgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgaWYgKCFfbm9kZS0+Y2hpbGQzKCkpICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICAgICAgIGJyZWFr
OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAg
ICAgICAgICAgdGhpbmdUb0RvKF9ub2RlLmNoaWxkMygpKTsgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAorICAgICAgICAgICAgdGhpbmdUb0RvKF9ub2RlLT5jaGlsZDMoKSk7ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICB9ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIH0g
d2hpbGUgKGZhbHNlKQogCi12b2lkIEdyYXBoOjpyZWZDaGlsZHJlbihOb2RlSW5kZXggb3ApCit2
b2lkIEdyYXBoOjpyZWZDaGlsZHJlbihOb2RlKiBvcCkKIHsKICAgICBET19UT19DSElMRFJFTihh
dChvcCksIHJlZik7CiB9CiAKLXZvaWQgR3JhcGg6OmRlcmVmQ2hpbGRyZW4oTm9kZUluZGV4IG9w
KQordm9pZCBHcmFwaDo6ZGVyZWZDaGlsZHJlbihOb2RlKiBvcCkKIHsKICAgICBET19UT19DSElM
RFJFTihhdChvcCksIGRlcmVmKTsKIH0KQEAgLTQzMiwxMiArMzcyLDEyIEBAIHZvaWQgR3JhcGg6
OnByZWRpY3RBcmd1bWVudFR5cGVzKCkKICAgICAgICAgaWYgKCFwcm9maWxlKQogICAgICAgICAg
ICAgY29udGludWU7CiAgICAgICAgIAotICAgICAgICBhdChtX2FyZ3VtZW50c1thcmddKS52YXJp
YWJsZUFjY2Vzc0RhdGEoKS0+cHJlZGljdChwcm9maWxlLT5jb21wdXRlVXBkYXRlZFByZWRpY3Rp
b24oKSk7CisgICAgICAgIG1fYXJndW1lbnRzW2FyZ10tPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5w
cmVkaWN0KHByb2ZpbGUtPmNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbigpKTsKICAgICAgICAgCiAj
aWYgREZHX0VOQUJMRShERUJVR19WRVJCT1NFKQogICAgICAgICBkYXRhTG9nKAogICAgICAgICAg
ICAgIkFyZ3VtZW50IFsiLCBhcmcsICJdIHByZWRpY3Rpb246ICIsCi0gICAgICAgICAgICBTcGVj
dWxhdGlvbkR1bXAoYXQobV9hcmd1bWVudHNbYXJnXSkudmFyaWFibGVBY2Nlc3NEYXRhKCktPnBy
ZWRpY3Rpb24oKSksICJcbiIpOworICAgICAgICAgICAgU3BlY3VsYXRpb25EdW1wKG1fYXJndW1l
bnRzW2FyZ10tPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5wcmVkaWN0aW9uKCkpLCAiXG4iKTsKICNl
bmRpZgogICAgIH0KIH0KQEAgLTQ1Niw1MSArMzk2LDU0IEBAIHZvaWQgR3JhcGg6OmhhbmRsZVN1
Y2Nlc3NvcihWZWN0b3I8QmxvY2sKIHZvaWQgR3JhcGg6OmNvbGxlY3RHYXJiYWdlKCkKIHsKICAg
ICAvLyBGaXJzdCByZXNldCB0aGUgY291bnRzIHRvIDAgZm9yIGFsbCBub2Rlcy4KLSAgICBmb3Ig
KHVuc2lnbmVkIGkgPSBzaXplKCk7IGktLTspCi0gICAgICAgIGF0KGkpLnNldFJlZkNvdW50KDAp
OworICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8IG1fYmxv
Y2tzLnNpemUoKTsgKytibG9ja0luZGV4KSB7CisgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0g
bV9ibG9ja3NbYmxvY2tJbmRleF0uZ2V0KCk7CisgICAgICAgIGlmICghYmxvY2spCisgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbmRleEluQmxvY2sgPSBibG9j
ay0+c2l6ZSgpOyBpbmRleEluQmxvY2stLTspCisgICAgICAgICAgICBibG9jay0+YXQoaW5kZXhJ
bkJsb2NrKS0+c2V0UmVmQ291bnQoMCk7CisgICAgfQogICAgIAogICAgIC8vIE5vdyBmaW5kIHRo
ZSByb290czogdGhlIG5vZGVzIHRoYXQgYXJlIG11c3QtZ2VuZXJhdGUuIFNldCB0aGVpciByZWYg
Y291bnRzIHRvCiAgICAgLy8gMSBhbmQgcHV0IHRoZW0gb24gdGhlIHdvcmtsaXN0LgotICAgIFZl
Y3RvcjxOb2RlSW5kZXgsIDEyOD4gd29ya2xpc3Q7CisgICAgVmVjdG9yPE5vZGUqLCAxMjg+IHdv
cmtsaXN0OwogICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8
IG1fYmxvY2tzLnNpemUoKTsgKytibG9ja0luZGV4KSB7CiAgICAgICAgIEJhc2ljQmxvY2sqIGJs
b2NrID0gbV9ibG9ja3NbYmxvY2tJbmRleF0uZ2V0KCk7CiAgICAgICAgIGlmICghYmxvY2spCiAg
ICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpbmRleEluQmxvY2sg
PSBibG9jay0+c2l6ZSgpOyBpbmRleEluQmxvY2stLTspIHsKLSAgICAgICAgICAgIE5vZGVJbmRl
eCBub2RlSW5kZXggPSBibG9jay0+YXQoaW5kZXhJbkJsb2NrKTsKLSAgICAgICAgICAgIE5vZGUm
IG5vZGUgPSBhdChub2RlSW5kZXgpOwotICAgICAgICAgICAgaWYgKCEobm9kZS5mbGFncygpICYg
Tm9kZU11c3RHZW5lcmF0ZSkpCisgICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPmF0KGlu
ZGV4SW5CbG9jayk7CisgICAgICAgICAgICBpZiAoIShub2RlLT5mbGFncygpICYgTm9kZU11c3RH
ZW5lcmF0ZSkpCiAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBub2RlLnNl
dFJlZkNvdW50KDEpOwotICAgICAgICAgICAgd29ya2xpc3QuYXBwZW5kKG5vZGVJbmRleCk7Cisg
ICAgICAgICAgICBub2RlLT5zZXRSZWZDb3VudCgxKTsKKyAgICAgICAgICAgIHdvcmtsaXN0LmFw
cGVuZChub2RlKTsKICAgICAgICAgfQogICAgIH0KICAgICAKICAgICB3aGlsZSAoIXdvcmtsaXN0
LmlzRW1wdHkoKSkgewotICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4ID0gd29ya2xpc3QubGFz
dCgpOworICAgICAgICBOb2RlKiBub2RlID0gd29ya2xpc3QubGFzdCgpOwogICAgICAgICB3b3Jr
bGlzdC5yZW1vdmVMYXN0KCk7Ci0gICAgICAgIE5vZGUmIG5vZGUgPSBhdChub2RlSW5kZXgpOwot
ICAgICAgICBBU1NFUlQobm9kZS5zaG91bGRHZW5lcmF0ZSgpKTsgLy8gSXQgc2hvdWxkIG5vdCBi
ZSBvbiB0aGUgd29ya2xpc3QgdW5sZXNzIGl0J3MgcmVmJ2VkLgotICAgICAgICBpZiAobm9kZS5m
bGFncygpICYgTm9kZUhhc1ZhckFyZ3MpIHsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgY2hp
bGRJZHggPSBub2RlLmZpcnN0Q2hpbGQoKTsKLSAgICAgICAgICAgICAgICAgY2hpbGRJZHggPCBu
b2RlLmZpcnN0Q2hpbGQoKSArIG5vZGUubnVtQ2hpbGRyZW4oKTsKKyAgICAgICAgQVNTRVJUKG5v
ZGUtPnNob3VsZEdlbmVyYXRlKCkpOyAvLyBJdCBzaG91bGQgbm90IGJlIG9uIHRoZSB3b3JrbGlz
dCB1bmxlc3MgaXQncyByZWYnZWQuCisgICAgICAgIGlmIChub2RlLT5mbGFncygpICYgTm9kZUhh
c1ZhckFyZ3MpIHsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgY2hpbGRJZHggPSBub2RlLT5m
aXJzdENoaWxkKCk7CisgICAgICAgICAgICAgICAgIGNoaWxkSWR4IDwgbm9kZS0+Zmlyc3RDaGls
ZCgpICsgbm9kZS0+bnVtQ2hpbGRyZW4oKTsKICAgICAgICAgICAgICAgICAgKytjaGlsZElkeCkg
ewogICAgICAgICAgICAgICAgIGlmICghbV92YXJBcmdDaGlsZHJlbltjaGlsZElkeF0pCiAgICAg
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIE5vZGVJbmRleCBjaGls
ZE5vZGVJbmRleCA9IG1fdmFyQXJnQ2hpbGRyZW5bY2hpbGRJZHhdLmluZGV4KCk7Ci0gICAgICAg
ICAgICAgICAgaWYgKGF0KGNoaWxkTm9kZUluZGV4KS5wb3N0Zml4UmVmKCkpCisgICAgICAgICAg
ICAgICAgTm9kZSogY2hpbGROb2RlID0gbV92YXJBcmdDaGlsZHJlbltjaGlsZElkeF0ubm9kZSgp
OworICAgICAgICAgICAgICAgIGlmIChjaGlsZE5vZGUtPnBvc3RmaXhSZWYoKSkKICAgICAgICAg
ICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgd29ya2xpc3QuYXBwZW5kKGNo
aWxkTm9kZUluZGV4KTsKKyAgICAgICAgICAgICAgICB3b3JrbGlzdC5hcHBlbmQoY2hpbGROb2Rl
KTsKICAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlmIChub2RlLmNoaWxkMSgpKSB7Ci0g
ICAgICAgICAgICBpZiAoIWF0KG5vZGUuY2hpbGQxKCkpLnBvc3RmaXhSZWYoKSkKLSAgICAgICAg
ICAgICAgICB3b3JrbGlzdC5hcHBlbmQobm9kZS5jaGlsZDEoKS5pbmRleCgpKTsKLSAgICAgICAg
ICAgIGlmIChub2RlLmNoaWxkMigpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFhdChub2RlLmNo
aWxkMigpKS5wb3N0Zml4UmVmKCkpCi0gICAgICAgICAgICAgICAgICAgIHdvcmtsaXN0LmFwcGVu
ZChub2RlLmNoaWxkMigpLmluZGV4KCkpOwotICAgICAgICAgICAgICAgIGlmIChub2RlLmNoaWxk
MygpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghYXQobm9kZS5jaGlsZDMoKSkucG9zdGZp
eFJlZigpKQotICAgICAgICAgICAgICAgICAgICAgICAgd29ya2xpc3QuYXBwZW5kKG5vZGUuY2hp
bGQzKCkuaW5kZXgoKSk7CisgICAgICAgIH0gZWxzZSBpZiAobm9kZS0+Y2hpbGQxKCkpIHsKKyAg
ICAgICAgICAgIGlmICghbm9kZS0+Y2hpbGQxKCktPnBvc3RmaXhSZWYoKSkKKyAgICAgICAgICAg
ICAgICB3b3JrbGlzdC5hcHBlbmQobm9kZS0+Y2hpbGQxKCkubm9kZSgpKTsKKyAgICAgICAgICAg
IGlmIChub2RlLT5jaGlsZDIoKSkgeworICAgICAgICAgICAgICAgIGlmICghbm9kZS0+Y2hpbGQy
KCktPnBvc3RmaXhSZWYoKSkKKyAgICAgICAgICAgICAgICAgICAgd29ya2xpc3QuYXBwZW5kKG5v
ZGUtPmNoaWxkMigpLm5vZGUoKSk7CisgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMygp
KSB7CisgICAgICAgICAgICAgICAgICAgIGlmICghbm9kZS0+Y2hpbGQzKCktPnBvc3RmaXhSZWYo
KSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtsaXN0LmFwcGVuZChub2RlLT5jaGlsZDMo
KS5ub2RlKCkpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfQpA
QCAtNTE5LDE0ICs0NjIsMTQgQEAgdm9pZCBHcmFwaDo6ZGV0ZXJtaW5lUmVhY2hhYmlsaXR5KCkK
ICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2Jsb2Nrc1tpbmRleF0uZ2V0KCk7CiAgICAg
ICAgIEFTU0VSVChibG9jay0+aXNMaW5rZWQpOwogICAgICAgICAKLSAgICAgICAgTm9kZSYgbm9k
ZSA9IGF0KGJsb2NrLT5sYXN0KCkpOwotICAgICAgICBBU1NFUlQobm9kZS5pc1Rlcm1pbmFsKCkp
OworICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPmxhc3QoKTsKKyAgICAgICAgQVNTRVJUKG5v
ZGUtPmlzVGVybWluYWwoKSk7CiAgICAgICAgIAotICAgICAgICBpZiAobm9kZS5pc0p1bXAoKSkK
LSAgICAgICAgICAgIGhhbmRsZVN1Y2Nlc3Nvcih3b3JrbGlzdCwgaW5kZXgsIG5vZGUudGFrZW5C
bG9ja0luZGV4KCkpOwotICAgICAgICBlbHNlIGlmIChub2RlLmlzQnJhbmNoKCkpIHsKLSAgICAg
ICAgICAgIGhhbmRsZVN1Y2Nlc3Nvcih3b3JrbGlzdCwgaW5kZXgsIG5vZGUudGFrZW5CbG9ja0lu
ZGV4KCkpOwotICAgICAgICAgICAgaGFuZGxlU3VjY2Vzc29yKHdvcmtsaXN0LCBpbmRleCwgbm9k
ZS5ub3RUYWtlbkJsb2NrSW5kZXgoKSk7CisgICAgICAgIGlmIChub2RlLT5pc0p1bXAoKSkKKyAg
ICAgICAgICAgIGhhbmRsZVN1Y2Nlc3Nvcih3b3JrbGlzdCwgaW5kZXgsIG5vZGUtPnRha2VuQmxv
Y2tJbmRleCgpKTsKKyAgICAgICAgZWxzZSBpZiAobm9kZS0+aXNCcmFuY2goKSkgeworICAgICAg
ICAgICAgaGFuZGxlU3VjY2Vzc29yKHdvcmtsaXN0LCBpbmRleCwgbm9kZS0+dGFrZW5CbG9ja0lu
ZGV4KCkpOworICAgICAgICAgICAgaGFuZGxlU3VjY2Vzc29yKHdvcmtsaXN0LCBpbmRleCwgbm9k
ZS0+bm90VGFrZW5CbG9ja0luZGV4KCkpOwogICAgICAgICB9CiAgICAgfQogfQpAQCAtNTQ2LDgg
KzQ4OSwxMyBAQCB2b2lkIEdyYXBoOjpyZXNldFJlYWNoYWJpbGl0eSgpCiAKIHZvaWQgR3JhcGg6
OnJlc2V0RXhpdFN0YXRlcygpCiB7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gc2l6ZSgpOyBpLS07
KQotICAgICAgICBhdChpKS5zZXRDYW5FeGl0KHRydWUpOworICAgIGZvciAoQmxvY2tJbmRleCBi
bG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8IG1fYmxvY2tzLnNpemUoKTsgKytibG9ja0luZGV4
KSB7CisgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ibG9ja3NbYmxvY2tJbmRleF0uZ2V0
KCk7CisgICAgICAgIGlmICghYmxvY2spCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg
Zm9yICh1bnNpZ25lZCBpbmRleEluQmxvY2sgPSBibG9jay0+c2l6ZSgpOyBpbmRleEluQmxvY2st
LTspCisgICAgICAgICAgICBibG9jay0+YXQoaW5kZXhJbkJsb2NrKS0+c2V0Q2FuRXhpdCh0cnVl
KTsKKyAgICB9CiB9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHJldmlzaW9uIDE0MDYxNikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEyLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzUsNyArMzUs
OSBAQAogI2luY2x1ZGUgIkRGR0Fzc2VtYmx5SGVscGVycy5oIgogI2luY2x1ZGUgIkRGR0Jhc2lj
QmxvY2suaCIKICNpbmNsdWRlICJERkdEb21pbmF0b3JzLmgiCisjaW5jbHVkZSAiREZHTG9uZ0xp
dmVkU3RhdGUuaCIKICNpbmNsdWRlICJERkdOb2RlLmgiCisjaW5jbHVkZSAiREZHTm9kZUFsbG9j
YXRvci5oIgogI2luY2x1ZGUgIkRGR1ZhcmlhZGljRnVuY3Rpb24uaCIKICNpbmNsdWRlICJKU1N0
YWNrLmgiCiAjaW5jbHVkZSAiTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5oIgpAQCAtODMs
NTQgKzg1LDQ4IEBAIGVudW0gQWRkU3BlY3VsYXRpb25Nb2RlIHsKIC8vCiAvLyA9PT0gR3JhcGgg
PT09CiAvLwotLy8gVGhlIGRhdGFmbG93IGdyYXBoIGlzIGFuIG9yZGVyZWQgdmVjdG9yIG9mIG5v
ZGVzLgogLy8gVGhlIG9yZGVyIG1heSBiZSBzaWduaWZpY2FudCBmb3Igbm9kZXMgd2l0aCBzaWRl
LWVmZmVjdHMgKHByb3BlcnR5IGFjY2Vzc2VzLCB2YWx1ZSBjb252ZXJzaW9ucykuCiAvLyBOb2Rl
cyB0aGF0IGFyZSAnZGVhZCcgcmVtYWluIGluIHRoZSB2ZWN0b3Igd2l0aCByZWZDb3VudCAwLgot
Y2xhc3MgR3JhcGggOiBwdWJsaWMgVmVjdG9yPE5vZGUsIDY0PiB7CitjbGFzcyBHcmFwaCB7CiBw
dWJsaWM6CiAgICAgR3JhcGgoSlNHbG9iYWxEYXRhJiwgQ29kZUJsb2NrKiwgdW5zaWduZWQgb3Ny
RW50cnlCeXRlY29kZUluZGV4LCBjb25zdCBPcGVyYW5kczxKU1ZhbHVlPiYgbXVzdEhhbmRsZVZh
bHVlcyk7Ci0gICAgCi0gICAgdXNpbmcgVmVjdG9yPE5vZGUsIDY0Pjo6b3BlcmF0b3JbXTsKLSAg
ICB1c2luZyBWZWN0b3I8Tm9kZSwgNjQ+OjphdDsKLSAgICAKLSAgICBOb2RlJiBvcGVyYXRvcltd
KEVkZ2Ugbm9kZVVzZSkgeyByZXR1cm4gYXQobm9kZVVzZS5pbmRleCgpKTsgfQotICAgIGNvbnN0
IE5vZGUmIG9wZXJhdG9yW10oRWRnZSBub2RlVXNlKSBjb25zdCB7IHJldHVybiBhdChub2RlVXNl
LmluZGV4KCkpOyB9Ci0gICAgCi0gICAgTm9kZSYgYXQoRWRnZSBub2RlVXNlKSB7IHJldHVybiBh
dChub2RlVXNlLmluZGV4KCkpOyB9Ci0gICAgY29uc3QgTm9kZSYgYXQoRWRnZSBub2RlVXNlKSBj
b25zdCB7IHJldHVybiBhdChub2RlVXNlLmluZGV4KCkpOyB9CisgICAgfkdyYXBoKCk7CiAgICAg
CiAgICAgLy8gTWFyayBhIG5vZGUgYXMgYmVpbmcgcmVmZXJlbmNlZC4KLSAgICBOb2RlSW5kZXgg
cmVmKE5vZGVJbmRleCBub2RlSW5kZXgpCisgICAgTm9kZSogcmVmKE5vZGUqIG5vZGUpCiAgICAg
ewotICAgICAgICBOb2RlJiBub2RlID0gYXQobm9kZUluZGV4KTsKICAgICAgICAgLy8gSWYgdGhl
IHZhbHVlIChiZWZvcmUgaW5jcmVtZW50aW5nKSB3YXMgYXQgcmVmQ291bnQgemVybyB0aGVuIHdl
IG5lZWQgdG8gcmVmIGl0cyBjaGlsZHJlbi4KLSAgICAgICAgaWYgKCFub2RlLnBvc3RmaXhSZWYo
KSkKLSAgICAgICAgICAgIHJlZkNoaWxkcmVuKG5vZGVJbmRleCk7Ci0gICAgICAgIHJldHVybiBu
b2RlSW5kZXg7CisgICAgICAgIGlmICghbm9kZS0+cG9zdGZpeFJlZigpKQorICAgICAgICAgICAg
cmVmQ2hpbGRyZW4obm9kZSk7CisgICAgICAgIHJldHVybiBub2RlOwogICAgIH0KICAgICBFZGdl
IHJlZihFZGdlIG5vZGVVc2UpCiAgICAgewotICAgICAgICByZWYobm9kZVVzZS5pbmRleCgpKTsK
KyAgICAgICAgcmVmKG5vZGVVc2Uubm9kZSgpKTsKICAgICAgICAgcmV0dXJuIG5vZGVVc2U7CiAg
ICAgfQogICAgIAotICAgIHZvaWQgZGVyZWYoTm9kZUluZGV4IG5vZGVJbmRleCkKKyAgICB2b2lk
IGRlcmVmKE5vZGUqIG5vZGUpCiAgICAgewotICAgICAgICBpZiAoYXQobm9kZUluZGV4KS5wb3N0
Zml4RGVyZWYoKSA9PSAxKQotICAgICAgICAgICAgZGVyZWZDaGlsZHJlbihub2RlSW5kZXgpOwor
I2lmICFBU1NFUlRfRElTQUJMRUQKKyAgICAgICAgaWYgKCFub2RlLT5yZWZDb3VudCgpKQorICAg
ICAgICAgICAgZHVtcCgpOworI2VuZGlmCisgICAgICAgIGlmIChub2RlLT5wb3N0Zml4RGVyZWYo
KSA9PSAxKQorICAgICAgICAgICAgZGVyZWZDaGlsZHJlbihub2RlKTsKICAgICB9CiAgICAgdm9p
ZCBkZXJlZihFZGdlIG5vZGVVc2UpCiAgICAgewotICAgICAgICBkZXJlZihub2RlVXNlLmluZGV4
KCkpOworICAgICAgICBkZXJlZihub2RlVXNlLm5vZGUoKSk7CiAgICAgfQogICAgIAotICAgIHZv
aWQgY2hhbmdlSW5kZXgoRWRnZSYgZWRnZSwgTm9kZUluZGV4IG5ld0luZGV4LCBib29sIGNoYW5n
ZVJlZiA9IHRydWUpCisgICAgdm9pZCBjaGFuZ2VDaGlsZChFZGdlJiBlZGdlLCBOb2RlKiBuZXdO
b2RlLCBib29sIGNoYW5nZVJlZiA9IHRydWUpCiAgICAgewogICAgICAgICBpZiAoY2hhbmdlUmVm
KSB7Ci0gICAgICAgICAgICByZWYobmV3SW5kZXgpOwotICAgICAgICAgICAgZGVyZWYoZWRnZS5p
bmRleCgpKTsKKyAgICAgICAgICAgIHJlZihuZXdOb2RlKTsKKyAgICAgICAgICAgIGRlcmVmKGVk
Z2Uubm9kZSgpKTsKICAgICAgICAgfQotICAgICAgICBlZGdlLnNldEluZGV4KG5ld0luZGV4KTsK
KyAgICAgICAgZWRnZS5zZXROb2RlKG5ld05vZGUpOwogICAgIH0KICAgICAKICAgICB2b2lkIGNo
YW5nZUVkZ2UoRWRnZSYgZWRnZSwgRWRnZSBuZXdFZGdlLCBib29sIGNoYW5nZVJlZiA9IHRydWUp
CkBAIC0xNDIsMTEgKzEzOCwxMSBAQCBwdWJsaWM6CiAgICAgICAgIGVkZ2UgPSBuZXdFZGdlOwog
ICAgIH0KICAgICAKLSAgICB2b2lkIGNvbXBhcmVBbmRTd2FwKEVkZ2UmIGVkZ2UsIE5vZGVJbmRl
eCBvbGRJbmRleCwgTm9kZUluZGV4IG5ld0luZGV4LCBib29sIGNoYW5nZVJlZikKKyAgICB2b2lk
IGNvbXBhcmVBbmRTd2FwKEVkZ2UmIGVkZ2UsIE5vZGUqIG9sZE5vZGUsIE5vZGUqIG5ld05vZGUs
IGJvb2wgY2hhbmdlUmVmKQogICAgIHsKLSAgICAgICAgaWYgKGVkZ2UuaW5kZXgoKSAhPSBvbGRJ
bmRleCkKKyAgICAgICAgaWYgKGVkZ2Uubm9kZSgpICE9IG9sZE5vZGUpCiAgICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgIGNoYW5nZUluZGV4KGVkZ2UsIG5ld0luZGV4LCBjaGFuZ2VSZWYpOwor
ICAgICAgICBjaGFuZ2VDaGlsZChlZGdlLCBuZXdOb2RlLCBjaGFuZ2VSZWYpOwogICAgIH0KICAg
ICAKICAgICB2b2lkIGNvbXBhcmVBbmRTd2FwKEVkZ2UmIGVkZ2UsIEVkZ2Ugb2xkRWRnZSwgRWRn
ZSBuZXdFZGdlLCBib29sIGNoYW5nZVJlZikKQEAgLTE1Niw0NCArMTUyLDI5IEBAIHB1YmxpYzoK
ICAgICAgICAgY2hhbmdlRWRnZShlZGdlLCBuZXdFZGdlLCBjaGFuZ2VSZWYpOwogICAgIH0KICAg
ICAKLSAgICB2b2lkIGNsZWFyQW5kRGVyZWZDaGlsZDEoTm9kZSYgbm9kZSkKKyAgICB2b2lkIGNs
ZWFyQW5kRGVyZWZDaGlsZChOb2RlKiBub2RlLCB1bnNpZ25lZCBpbmRleCkKICAgICB7Ci0gICAg
ICAgIGlmICghbm9kZS5jaGlsZDEoKSkKKyAgICAgICAgaWYgKCFub2RlLT5jaGlsZHJlbi5jaGls
ZChpbmRleCkpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGRlcmVmKG5vZGUuY2hpbGQx
KCkpOwotICAgICAgICBub2RlLmNoaWxkcmVuLmNoaWxkMSgpID0gRWRnZSgpOwotICAgIH0KLQot
ICAgIHZvaWQgY2xlYXJBbmREZXJlZkNoaWxkMihOb2RlJiBub2RlKQotICAgIHsKLSAgICAgICAg
aWYgKCFub2RlLmNoaWxkMigpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBkZXJlZihu
b2RlLmNoaWxkMigpKTsKLSAgICAgICAgbm9kZS5jaGlsZHJlbi5jaGlsZDIoKSA9IEVkZ2UoKTsK
LSAgICB9Ci0KLSAgICB2b2lkIGNsZWFyQW5kRGVyZWZDaGlsZDMoTm9kZSYgbm9kZSkKLSAgICB7
Ci0gICAgICAgIGlmICghbm9kZS5jaGlsZDMoKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgZGVyZWYobm9kZS5jaGlsZDMoKSk7Ci0gICAgICAgIG5vZGUuY2hpbGRyZW4uY2hpbGQzKCkg
PSBFZGdlKCk7CisgICAgICAgIGRlcmVmKG5vZGUtPmNoaWxkcmVuLmNoaWxkKGluZGV4KSk7Cisg
ICAgICAgIG5vZGUuY2hpbGRyZW4uc2V0Q2hpbGQoaW5kZXgsIEVkZ2UoKSk7CiAgICAgfQorICAg
IHZvaWQgY2xlYXJBbmREZXJlZkNoaWxkMShOb2RlKiBub2RlKSB7IGNsZWFyQW5kRGVyZWZDaGls
ZChub2RlLCAwKTsgfQorICAgIHZvaWQgY2xlYXJBbmREZXJlZkNoaWxkMihOb2RlKiBub2RlKSB7
IGNsZWFyQW5kRGVyZWZDaGlsZChub2RlLCAxKTsgfQorICAgIHZvaWQgY2xlYXJBbmREZXJlZkNo
aWxkMyhOb2RlKiBub2RlKSB7IGNsZWFyQW5kRGVyZWZDaGlsZChub2RlLCAyKTsgfQogICAgIAog
I2RlZmluZSBERkdfREVGSU5FX0FERF9OT0RFKHRlbXBsYXRlUHJlLCB0ZW1wbGF0ZVBvc3QsIHR5
cGVQYXJhbXMsIHZhbHVlUGFyYW1zQ29tbWEsIHZhbHVlUGFyYW1zLCB2YWx1ZUFyZ3MpIFwKLSAg
ICB0ZW1wbGF0ZVByZSB0eXBlUGFyYW1zIHRlbXBsYXRlUG9zdCBOb2RlSW5kZXggYWRkTm9kZShS
ZWZDaGlsZHJlbk1vZGUgcmVmQ2hpbGRyZW5Nb2RlLCBSZWZOb2RlTW9kZSByZWZOb2RlTW9kZSwg
U3BlY3VsYXRlZFR5cGUgdHlwZSB2YWx1ZVBhcmFtc0NvbW1hIHZhbHVlUGFyYW1zKSBcCisgICAg
dGVtcGxhdGVQcmUgdHlwZVBhcmFtcyB0ZW1wbGF0ZVBvc3QgTm9kZSogYWRkTm9kZShSZWZDaGls
ZHJlbk1vZGUgcmVmQ2hpbGRyZW5Nb2RlLCBSZWZOb2RlTW9kZSByZWZOb2RlTW9kZSwgU3BlY3Vs
YXRlZFR5cGUgdHlwZSB2YWx1ZVBhcmFtc0NvbW1hIHZhbHVlUGFyYW1zKSBcCiAgICAgeyBcCi0g
ICAgICAgIE5vZGUgbm9kZSA9IE5vZGUodmFsdWVBcmdzKTsgXAotICAgICAgICBub2RlLnByZWRp
Y3QodHlwZSk7IFwKLSAgICAgICAgaWYgKG5vZGUuZmxhZ3MoKSAmIE5vZGVNdXN0R2VuZXJhdGUp
IFwKLSAgICAgICAgICAgIG5vZGUucmVmKCk7IFwKKyAgICAgICAgTm9kZSogbm9kZSA9IG5ldyAo
bV9hbGxvY2F0b3IpIE5vZGUodmFsdWVBcmdzKTsgXAorICAgICAgICBub2RlLT5wcmVkaWN0KHR5
cGUpOyBcCisgICAgICAgIGlmIChub2RlLT5mbGFncygpICYgTm9kZU11c3RHZW5lcmF0ZSkgXAor
ICAgICAgICAgICAgbm9kZS0+cmVmKCk7IFwKICAgICAgICAgaWYgKHJlZk5vZGVNb2RlID09IFJl
Zk5vZGUpIFwKLSAgICAgICAgICAgIG5vZGUucmVmKCk7IFwKLSAgICAgICAgTm9kZUluZGV4IHJl
c3VsdCA9IHNpemUoKTsgXAotICAgICAgICBhcHBlbmQobm9kZSk7IFwKKyAgICAgICAgICAgIG5v
ZGUtPnJlZigpOyBcCiAgICAgICAgIGlmIChyZWZDaGlsZHJlbk1vZGUgPT0gUmVmQ2hpbGRyZW4p
IFwKLSAgICAgICAgICAgIHJlZkNoaWxkcmVuKHJlc3VsdCk7IFwKLSAgICAgICAgcmV0dXJuIHJl
c3VsdDsgXAorICAgICAgICAgICAgcmVmQ2hpbGRyZW4obm9kZSk7IFwKKyAgICAgICAgcmV0dXJu
IG5vZGU7IFwKICAgICB9CiAgICAgREZHX1ZBUklBRElDX1RFTVBMQVRFX0ZVTkNUSU9OKERGR19E
RUZJTkVfQUREX05PREUpCiAjdW5kZWYgREZHX0RFRklORV9BRERfTk9ERQpAQCAtMjA0LDE0ICsx
ODUsMTQgQEAgcHVibGljOgogICAgIC8vIHJlZmVyZW5jZSBjb3VudHMgYWNjb3JkaW5nIHRvIHJl
YWNoYWJpbGl0eS4KICAgICB2b2lkIGNvbGxlY3RHYXJiYWdlKCk7CiAgICAgCi0gICAgdm9pZCBj
b252ZXJ0VG9Db25zdGFudChOb2RlSW5kZXggbm9kZUluZGV4LCB1bnNpZ25lZCBjb25zdGFudE51
bWJlcikKKyAgICB2b2lkIGNvbnZlcnRUb0NvbnN0YW50KE5vZGUqIG5vZGUsIHVuc2lnbmVkIGNv
bnN0YW50TnVtYmVyKQogICAgIHsKLSAgICAgICAgYXQobm9kZUluZGV4KS5jb252ZXJ0VG9Db25z
dGFudChjb25zdGFudE51bWJlcik7CisgICAgICAgIG5vZGUtPmNvbnZlcnRUb0NvbnN0YW50KGNv
bnN0YW50TnVtYmVyKTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBjb252ZXJ0VG9Db25zdGFudChO
b2RlSW5kZXggbm9kZUluZGV4LCBKU1ZhbHVlIHZhbHVlKQorICAgIHZvaWQgY29udmVydFRvQ29u
c3RhbnQoTm9kZSogbm9kZSwgSlNWYWx1ZSB2YWx1ZSkKICAgICB7Ci0gICAgICAgIGNvbnZlcnRU
b0NvbnN0YW50KG5vZGVJbmRleCwgbV9jb2RlQmxvY2stPmFkZE9yRmluZENvbnN0YW50KHZhbHVl
KSk7CisgICAgICAgIGNvbnZlcnRUb0NvbnN0YW50KG5vZGUsIG1fY29kZUJsb2NrLT5hZGRPckZp
bmRDb25zdGFudCh2YWx1ZSkpOwogICAgIH0KIAogICAgIC8vIENvZGVCbG9jayBpcyBvcHRpb25h
bCwgYnV0IG1heSBhbGxvdyBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHRvIGJlIGR1bXBlZCAoZS5n
LiBJZGVudGlmaWVyIG5hbWVzKS4KQEAgLTIxOSwxMjUgKzIwMCwxMjUgQEAgcHVibGljOgogICAg
IGVudW0gUGhpTm9kZUR1bXBNb2RlIHsgRHVtcExpdmVQaGlzT25seSwgRHVtcEFsbFBoaXMgfTsK
ICAgICB2b2lkIGR1bXBCbG9ja0hlYWRlcihQcmludFN0cmVhbSYsIGNvbnN0IGNoYXIqIHByZWZp
eCwgQmxvY2tJbmRleCwgUGhpTm9kZUR1bXBNb2RlKTsKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJl
YW0mLCBFZGdlKTsKLSAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mLCBjb25zdCBjaGFyKiBwcmVm
aXgsIE5vZGVJbmRleCk7Ci0gICAgc3RhdGljIGludCBhbW91bnRPZk5vZGVXaGl0ZVNwYWNlKE5v
ZGUmKTsKLSAgICBzdGF0aWMgdm9pZCBwcmludE5vZGVXaGl0ZVNwYWNlKFByaW50U3RyZWFtJiwg
Tm9kZSYpOworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYsIGNvbnN0IGNoYXIqIHByZWZpeCwg
Tm9kZSopOworICAgIHN0YXRpYyBpbnQgYW1vdW50T2ZOb2RlV2hpdGVTcGFjZShOb2RlKik7Cisg
ICAgc3RhdGljIHZvaWQgcHJpbnROb2RlV2hpdGVTcGFjZShQcmludFN0cmVhbSYsIE5vZGUqKTsK
IAogICAgIC8vIER1bXAgdGhlIGNvZGUgb3JpZ2luIG9mIHRoZSBnaXZlbiBub2RlIGFzIGEgZGlm
ZiBmcm9tIHRoZSBjb2RlIG9yaWdpbiBvZiB0aGUKICAgICAvLyBwcmVjZWRpbmcgbm9kZS4gUmV0
dXJucyB0cnVlIGlmIGFueXRoaW5nIHdhcyBwcmludGVkLgotICAgIGJvb2wgZHVtcENvZGVPcmln
aW4oUHJpbnRTdHJlYW0mLCBjb25zdCBjaGFyKiBwcmVmaXgsIE5vZGVJbmRleCwgTm9kZUluZGV4
KTsKKyAgICBib29sIGR1bXBDb2RlT3JpZ2luKFByaW50U3RyZWFtJiwgY29uc3QgY2hhciogcHJl
Zml4LCBOb2RlKiBwcmV2aW91c05vZGUsIE5vZGUqIGN1cnJlbnROb2RlKTsKIAogICAgIEJsb2Nr
SW5kZXggYmxvY2tJbmRleEZvckJ5dGVjb2RlT2Zmc2V0KFZlY3RvcjxCbG9ja0luZGV4PiYgYmxv
Y2tzLCB1bnNpZ25lZCBieXRlY29kZUJlZ2luKTsKIAotICAgIFNwZWN1bGF0ZWRUeXBlIGdldEpT
Q29uc3RhbnRTcGVjdWxhdGlvbihOb2RlJiBub2RlKQorICAgIFNwZWN1bGF0ZWRUeXBlIGdldEpT
Q29uc3RhbnRTcGVjdWxhdGlvbihOb2RlKiBub2RlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIHNw
ZWN1bGF0aW9uRnJvbVZhbHVlKG5vZGUudmFsdWVPZkpTQ29uc3RhbnQobV9jb2RlQmxvY2spKTsK
KyAgICAgICAgcmV0dXJuIHNwZWN1bGF0aW9uRnJvbVZhbHVlKG5vZGUtPnZhbHVlT2ZKU0NvbnN0
YW50KG1fY29kZUJsb2NrKSk7CiAgICAgfQogICAgIAotICAgIEFkZFNwZWN1bGF0aW9uTW9kZSBh
ZGRTcGVjdWxhdGlvbk1vZGUoTm9kZSYgYWRkLCBib29sIGxlZnRTaG91bGRTcGVjdWxhdGVJbnRl
Z2VyLCBib29sIHJpZ2h0U2hvdWxkU3BlY3VsYXRlSW50ZWdlcikKKyAgICBBZGRTcGVjdWxhdGlv
bk1vZGUgYWRkU3BlY3VsYXRpb25Nb2RlKE5vZGUqIGFkZCwgYm9vbCBsZWZ0U2hvdWxkU3BlY3Vs
YXRlSW50ZWdlciwgYm9vbCByaWdodFNob3VsZFNwZWN1bGF0ZUludGVnZXIpCiAgICAgewotICAg
ICAgICBBU1NFUlQoYWRkLm9wKCkgPT0gVmFsdWVBZGQgfHwgYWRkLm9wKCkgPT0gQXJpdGhBZGQg
fHwgYWRkLm9wKCkgPT0gQXJpdGhTdWIpOworICAgICAgICBBU1NFUlQoYWRkLT5vcCgpID09IFZh
bHVlQWRkIHx8IGFkZC0+b3AoKSA9PSBBcml0aEFkZCB8fCBhZGQtPm9wKCkgPT0gQXJpdGhTdWIp
OwogICAgICAgICAKLSAgICAgICAgTm9kZSYgbGVmdCA9IGF0KGFkZC5jaGlsZDEoKSk7Ci0gICAg
ICAgIE5vZGUmIHJpZ2h0ID0gYXQoYWRkLmNoaWxkMigpKTsKKyAgICAgICAgTm9kZSogbGVmdCA9
IGFkZC0+Y2hpbGQxKCkubm9kZSgpOworICAgICAgICBOb2RlKiByaWdodCA9IGFkZC0+Y2hpbGQy
KCkubm9kZSgpOwogICAgICAgICAKLSAgICAgICAgaWYgKGxlZnQuaGFzQ29uc3RhbnQoKSkKKyAg
ICAgICAgaWYgKGxlZnQtPmhhc0NvbnN0YW50KCkpCiAgICAgICAgICAgICByZXR1cm4gYWRkSW1t
ZWRpYXRlU2hvdWxkU3BlY3VsYXRlSW50ZWdlcihhZGQsIHJpZ2h0U2hvdWxkU3BlY3VsYXRlSW50
ZWdlciwgbGVmdCk7Ci0gICAgICAgIGlmIChyaWdodC5oYXNDb25zdGFudCgpKQorICAgICAgICBp
ZiAocmlnaHQtPmhhc0NvbnN0YW50KCkpCiAgICAgICAgICAgICByZXR1cm4gYWRkSW1tZWRpYXRl
U2hvdWxkU3BlY3VsYXRlSW50ZWdlcihhZGQsIGxlZnRTaG91bGRTcGVjdWxhdGVJbnRlZ2VyLCBy
aWdodCk7CiAgICAgICAgIAotICAgICAgICByZXR1cm4gKGxlZnRTaG91bGRTcGVjdWxhdGVJbnRl
Z2VyICYmIHJpZ2h0U2hvdWxkU3BlY3VsYXRlSW50ZWdlciAmJiBhZGQuY2FuU3BlY3VsYXRlSW50
ZWdlcigpKSA/IFNwZWN1bGF0ZUludGVnZXIgOiBEb250U3BlY3VsYXRlSW50ZWdlcjsKKyAgICAg
ICAgcmV0dXJuIChsZWZ0U2hvdWxkU3BlY3VsYXRlSW50ZWdlciAmJiByaWdodFNob3VsZFNwZWN1
bGF0ZUludGVnZXIgJiYgYWRkLT5jYW5TcGVjdWxhdGVJbnRlZ2VyKCkpID8gU3BlY3VsYXRlSW50
ZWdlciA6IERvbnRTcGVjdWxhdGVJbnRlZ2VyOwogICAgIH0KICAgICAKLSAgICBBZGRTcGVjdWxh
dGlvbk1vZGUgdmFsdWVBZGRTcGVjdWxhdGlvbk1vZGUoTm9kZSYgYWRkKQorICAgIEFkZFNwZWN1
bGF0aW9uTW9kZSB2YWx1ZUFkZFNwZWN1bGF0aW9uTW9kZShOb2RlKiBhZGQpCiAgICAgewotICAg
ICAgICByZXR1cm4gYWRkU3BlY3VsYXRpb25Nb2RlKGFkZCwgYXQoYWRkLmNoaWxkMSgpKS5zaG91
bGRTcGVjdWxhdGVJbnRlZ2VyRXhwZWN0aW5nRGVmaW5lZCgpLCBhdChhZGQuY2hpbGQyKCkpLnNo
b3VsZFNwZWN1bGF0ZUludGVnZXJFeHBlY3RpbmdEZWZpbmVkKCkpOworICAgICAgICByZXR1cm4g
YWRkU3BlY3VsYXRpb25Nb2RlKGFkZCwgYWRkLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlSW50
ZWdlckV4cGVjdGluZ0RlZmluZWQoKSwgYWRkLT5jaGlsZDIoKS0+c2hvdWxkU3BlY3VsYXRlSW50
ZWdlckV4cGVjdGluZ0RlZmluZWQoKSk7CiAgICAgfQogICAgIAotICAgIEFkZFNwZWN1bGF0aW9u
TW9kZSBhcml0aEFkZFNwZWN1bGF0aW9uTW9kZShOb2RlJiBhZGQpCisgICAgQWRkU3BlY3VsYXRp
b25Nb2RlIGFyaXRoQWRkU3BlY3VsYXRpb25Nb2RlKE5vZGUqIGFkZCkKICAgICB7Ci0gICAgICAg
IHJldHVybiBhZGRTcGVjdWxhdGlvbk1vZGUoYWRkLCBhdChhZGQuY2hpbGQxKCkpLnNob3VsZFNw
ZWN1bGF0ZUludGVnZXJGb3JBcml0aG1ldGljKCksIGF0KGFkZC5jaGlsZDIoKSkuc2hvdWxkU3Bl
Y3VsYXRlSW50ZWdlckZvckFyaXRobWV0aWMoKSk7CisgICAgICAgIHJldHVybiBhZGRTcGVjdWxh
dGlvbk1vZGUoYWRkLCBhZGQtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyRm9yQXJp
dGhtZXRpYygpLCBhZGQtPmNoaWxkMigpLT5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyRm9yQXJpdGht
ZXRpYygpKTsKICAgICB9CiAgICAgCi0gICAgQWRkU3BlY3VsYXRpb25Nb2RlIGFkZFNwZWN1bGF0
aW9uTW9kZShOb2RlJiBhZGQpCisgICAgQWRkU3BlY3VsYXRpb25Nb2RlIGFkZFNwZWN1bGF0aW9u
TW9kZShOb2RlKiBhZGQpCiAgICAgewotICAgICAgICBpZiAoYWRkLm9wKCkgPT0gVmFsdWVBZGQp
CisgICAgICAgIGlmIChhZGQtPm9wKCkgPT0gVmFsdWVBZGQpCiAgICAgICAgICAgICByZXR1cm4g
dmFsdWVBZGRTcGVjdWxhdGlvbk1vZGUoYWRkKTsKICAgICAgICAgCiAgICAgICAgIHJldHVybiBh
cml0aEFkZFNwZWN1bGF0aW9uTW9kZShhZGQpOwogICAgIH0KICAgICAKLSAgICBib29sIGFkZFNo
b3VsZFNwZWN1bGF0ZUludGVnZXIoTm9kZSYgYWRkKQorICAgIGJvb2wgYWRkU2hvdWxkU3BlY3Vs
YXRlSW50ZWdlcihOb2RlKiBhZGQpCiAgICAgewogICAgICAgICByZXR1cm4gYWRkU3BlY3VsYXRp
b25Nb2RlKGFkZCkgIT0gRG9udFNwZWN1bGF0ZUludGVnZXI7CiAgICAgfQogICAgIAotICAgIGJv
b2wgbXVsU2hvdWxkU3BlY3VsYXRlSW50ZWdlcihOb2RlJiBtdWwpCisgICAgYm9vbCBtdWxTaG91
bGRTcGVjdWxhdGVJbnRlZ2VyKE5vZGUqIG11bCkKICAgICB7Ci0gICAgICAgIEFTU0VSVChtdWwu
b3AoKSA9PSBBcml0aE11bCk7CisgICAgICAgIEFTU0VSVChtdWwtPm9wKCkgPT0gQXJpdGhNdWwp
OwogICAgICAgICAKLSAgICAgICAgTm9kZSYgbGVmdCA9IGF0KG11bC5jaGlsZDEoKSk7Ci0gICAg
ICAgIE5vZGUmIHJpZ2h0ID0gYXQobXVsLmNoaWxkMigpKTsKKyAgICAgICAgTm9kZSogbGVmdCA9
IG11bC0+Y2hpbGQxKCkubm9kZSgpOworICAgICAgICBOb2RlKiByaWdodCA9IG11bC0+Y2hpbGQy
KCkubm9kZSgpOwogICAgICAgICAKICAgICAgICAgcmV0dXJuIE5vZGU6OnNob3VsZFNwZWN1bGF0
ZUludGVnZXJGb3JBcml0aG1ldGljKGxlZnQsIHJpZ2h0KSAmJiBtdWwuY2FuU3BlY3VsYXRlSW50
ZWdlcigpOwogICAgIH0KICAgICAKLSAgICBib29sIG5lZ2F0ZVNob3VsZFNwZWN1bGF0ZUludGVn
ZXIoTm9kZSYgbmVnYXRlKQorICAgIGJvb2wgbmVnYXRlU2hvdWxkU3BlY3VsYXRlSW50ZWdlcihO
b2RlKiBuZWdhdGUpCiAgICAgewotICAgICAgICBBU1NFUlQobmVnYXRlLm9wKCkgPT0gQXJpdGhO
ZWdhdGUpOwotICAgICAgICByZXR1cm4gYXQobmVnYXRlLmNoaWxkMSgpKS5zaG91bGRTcGVjdWxh
dGVJbnRlZ2VyRm9yQXJpdGhtZXRpYygpICYmIG5lZ2F0ZS5jYW5TcGVjdWxhdGVJbnRlZ2VyKCk7
CisgICAgICAgIEFTU0VSVChuZWdhdGUtPm9wKCkgPT0gQXJpdGhOZWdhdGUpOworICAgICAgICBy
ZXR1cm4gbmVnYXRlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlSW50ZWdlckZvckFyaXRobWV0
aWMoKSAmJiBuZWdhdGUtPmNhblNwZWN1bGF0ZUludGVnZXIoKTsKICAgICB9CiAgICAgCi0gICAg
Ym9vbCBhZGRTaG91bGRTcGVjdWxhdGVJbnRlZ2VyKE5vZGVJbmRleCBub2RlSW5kZXgpCisgICAg
Ym9vbCBhZGRTaG91bGRTcGVjdWxhdGVJbnRlZ2VyKE5vZGUqIG5vZGUpCiAgICAgewotICAgICAg
ICByZXR1cm4gYWRkU2hvdWxkU3BlY3VsYXRlSW50ZWdlcihhdChub2RlSW5kZXgpKTsKKyAgICAg
ICAgcmV0dXJuIGFkZFNob3VsZFNwZWN1bGF0ZUludGVnZXIobm9kZSk7CiAgICAgfQogICAgIAog
ICAgIC8vIEhlbHBlciBtZXRob2RzIHRvIGNoZWNrIG5vZGVzIGZvciBjb25zdGFudHMuCi0gICAg
Ym9vbCBpc0NvbnN0YW50KE5vZGVJbmRleCBub2RlSW5kZXgpCisgICAgYm9vbCBpc0NvbnN0YW50
KE5vZGUqIG5vZGUpCiAgICAgewotICAgICAgICByZXR1cm4gYXQobm9kZUluZGV4KS5oYXNDb25z
dGFudCgpOworICAgICAgICByZXR1cm4gbm9kZS0+aGFzQ29uc3RhbnQoKTsKICAgICB9Ci0gICAg
Ym9vbCBpc0pTQ29uc3RhbnQoTm9kZUluZGV4IG5vZGVJbmRleCkKKyAgICBib29sIGlzSlNDb25z
dGFudChOb2RlKiBub2RlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGF0KG5vZGVJbmRleCkuaGFz
Q29uc3RhbnQoKTsKKyAgICAgICAgcmV0dXJuIG5vZGUtPmhhc0NvbnN0YW50KCk7CiAgICAgfQot
ICAgIGJvb2wgaXNJbnQzMkNvbnN0YW50KE5vZGVJbmRleCBub2RlSW5kZXgpCisgICAgYm9vbCBp
c0ludDMyQ29uc3RhbnQoTm9kZSogbm9kZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBhdChub2Rl
SW5kZXgpLmlzSW50MzJDb25zdGFudChtX2NvZGVCbG9jayk7CisgICAgICAgIHJldHVybiBub2Rl
LT5pc0ludDMyQ29uc3RhbnQobV9jb2RlQmxvY2spOwogICAgIH0KLSAgICBib29sIGlzRG91Ymxl
Q29uc3RhbnQoTm9kZUluZGV4IG5vZGVJbmRleCkKKyAgICBib29sIGlzRG91YmxlQ29uc3RhbnQo
Tm9kZSogbm9kZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBhdChub2RlSW5kZXgpLmlzRG91Ymxl
Q29uc3RhbnQobV9jb2RlQmxvY2spOworICAgICAgICByZXR1cm4gbm9kZS0+aXNEb3VibGVDb25z
dGFudChtX2NvZGVCbG9jayk7CiAgICAgfQotICAgIGJvb2wgaXNOdW1iZXJDb25zdGFudChOb2Rl
SW5kZXggbm9kZUluZGV4KQorICAgIGJvb2wgaXNOdW1iZXJDb25zdGFudChOb2RlKiBub2RlKQog
ICAgIHsKLSAgICAgICAgcmV0dXJuIGF0KG5vZGVJbmRleCkuaXNOdW1iZXJDb25zdGFudChtX2Nv
ZGVCbG9jayk7CisgICAgICAgIHJldHVybiBub2RlLT5pc051bWJlckNvbnN0YW50KG1fY29kZUJs
b2NrKTsKICAgICB9Ci0gICAgYm9vbCBpc0Jvb2xlYW5Db25zdGFudChOb2RlSW5kZXggbm9kZUlu
ZGV4KQorICAgIGJvb2wgaXNCb29sZWFuQ29uc3RhbnQoTm9kZSogbm9kZSkKICAgICB7Ci0gICAg
ICAgIHJldHVybiBhdChub2RlSW5kZXgpLmlzQm9vbGVhbkNvbnN0YW50KG1fY29kZUJsb2NrKTsK
KyAgICAgICAgcmV0dXJuIG5vZGUtPmlzQm9vbGVhbkNvbnN0YW50KG1fY29kZUJsb2NrKTsKICAg
ICB9Ci0gICAgYm9vbCBpc0NlbGxDb25zdGFudChOb2RlSW5kZXggbm9kZUluZGV4KQorICAgIGJv
b2wgaXNDZWxsQ29uc3RhbnQoTm9kZSogbm9kZSkKICAgICB7Ci0gICAgICAgIGlmICghaXNKU0Nv
bnN0YW50KG5vZGVJbmRleCkpCisgICAgICAgIGlmICghaXNKU0NvbnN0YW50KG5vZGUpKQogICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBKU1ZhbHVlIHZhbHVlID0gdmFsdWVPZkpT
Q29uc3RhbnQobm9kZUluZGV4KTsKKyAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IHZhbHVlT2ZKU0Nv
bnN0YW50KG5vZGUpOwogICAgICAgICByZXR1cm4gdmFsdWUuaXNDZWxsKCkgJiYgISF2YWx1ZTsK
ICAgICB9Ci0gICAgYm9vbCBpc0Z1bmN0aW9uQ29uc3RhbnQoTm9kZUluZGV4IG5vZGVJbmRleCkK
KyAgICBib29sIGlzRnVuY3Rpb25Db25zdGFudChOb2RlKiBub2RlKQogICAgIHsKLSAgICAgICAg
aWYgKCFpc0pTQ29uc3RhbnQobm9kZUluZGV4KSkKKyAgICAgICAgaWYgKCFpc0pTQ29uc3RhbnQo
bm9kZSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmICghZ2V0SlNGdW5j
dGlvbih2YWx1ZU9mSlNDb25zdGFudChub2RlSW5kZXgpKSkKKyAgICAgICAgaWYgKCFnZXRKU0Z1
bmN0aW9uKHZhbHVlT2ZKU0NvbnN0YW50KG5vZGUpKSkKICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQotICAgIGJvb2wgaXNJbnRlcm5hbEZ1bmN0
aW9uQ29uc3RhbnQoTm9kZUluZGV4IG5vZGVJbmRleCkKKyAgICBib29sIGlzSW50ZXJuYWxGdW5j
dGlvbkNvbnN0YW50KE5vZGUqIG5vZGUpCiAgICAgewotICAgICAgICBpZiAoIWlzSlNDb25zdGFu
dChub2RlSW5kZXgpKQorICAgICAgICBpZiAoIWlzSlNDb25zdGFudChub2RlKSkKICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IHZhbHVlT2ZKU0NvbnN0
YW50KG5vZGVJbmRleCk7CisgICAgICAgIEpTVmFsdWUgdmFsdWUgPSB2YWx1ZU9mSlNDb25zdGFu
dChub2RlKTsKICAgICAgICAgaWYgKCF2YWx1ZS5pc0NlbGwoKSB8fCAhdmFsdWUpCiAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIEpTQ2VsbCogY2VsbCA9IHZhbHVlLmFzQ2VsbCgp
OwpAQCAtMzQ2LDI1ICszMjcsMjUgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICB9CiAgICAgLy8gSGVscGVyIG1ldGhvZHMgZ2V0IGNvbnN0YW50IHZhbHVlcyBmcm9tIG5vZGVz
LgotICAgIEpTVmFsdWUgdmFsdWVPZkpTQ29uc3RhbnQoTm9kZUluZGV4IG5vZGVJbmRleCkKKyAg
ICBKU1ZhbHVlIHZhbHVlT2ZKU0NvbnN0YW50KE5vZGUqIG5vZGUpCiAgICAgewotICAgICAgICBy
ZXR1cm4gYXQobm9kZUluZGV4KS52YWx1ZU9mSlNDb25zdGFudChtX2NvZGVCbG9jayk7CisgICAg
ICAgIHJldHVybiBub2RlLT52YWx1ZU9mSlNDb25zdGFudChtX2NvZGVCbG9jayk7CiAgICAgfQot
ICAgIGludDMyX3QgdmFsdWVPZkludDMyQ29uc3RhbnQoTm9kZUluZGV4IG5vZGVJbmRleCkKKyAg
ICBpbnQzMl90IHZhbHVlT2ZJbnQzMkNvbnN0YW50KE5vZGUqIG5vZGUpCiAgICAgewotICAgICAg
ICByZXR1cm4gdmFsdWVPZkpTQ29uc3RhbnQobm9kZUluZGV4KS5hc0ludDMyKCk7CisgICAgICAg
IHJldHVybiB2YWx1ZU9mSlNDb25zdGFudChub2RlKS5hc0ludDMyKCk7CiAgICAgfQotICAgIGRv
dWJsZSB2YWx1ZU9mTnVtYmVyQ29uc3RhbnQoTm9kZUluZGV4IG5vZGVJbmRleCkKKyAgICBkb3Vi
bGUgdmFsdWVPZk51bWJlckNvbnN0YW50KE5vZGUqIG5vZGUpCiAgICAgewotICAgICAgICByZXR1
cm4gdmFsdWVPZkpTQ29uc3RhbnQobm9kZUluZGV4KS5hc051bWJlcigpOworICAgICAgICByZXR1
cm4gdmFsdWVPZkpTQ29uc3RhbnQobm9kZSkuYXNOdW1iZXIoKTsKICAgICB9Ci0gICAgYm9vbCB2
YWx1ZU9mQm9vbGVhbkNvbnN0YW50KE5vZGVJbmRleCBub2RlSW5kZXgpCisgICAgYm9vbCB2YWx1
ZU9mQm9vbGVhbkNvbnN0YW50KE5vZGUqIG5vZGUpCiAgICAgewotICAgICAgICByZXR1cm4gdmFs
dWVPZkpTQ29uc3RhbnQobm9kZUluZGV4KS5hc0Jvb2xlYW4oKTsKKyAgICAgICAgcmV0dXJuIHZh
bHVlT2ZKU0NvbnN0YW50KG5vZGUpLmFzQm9vbGVhbigpOwogICAgIH0KLSAgICBKU0Z1bmN0aW9u
KiB2YWx1ZU9mRnVuY3Rpb25Db25zdGFudChOb2RlSW5kZXggbm9kZUluZGV4KQorICAgIEpTRnVu
Y3Rpb24qIHZhbHVlT2ZGdW5jdGlvbkNvbnN0YW50KE5vZGUqIG5vZGUpCiAgICAgewotICAgICAg
ICBKU0NlbGwqIGZ1bmN0aW9uID0gZ2V0SlNGdW5jdGlvbih2YWx1ZU9mSlNDb25zdGFudChub2Rl
SW5kZXgpKTsKKyAgICAgICAgSlNDZWxsKiBmdW5jdGlvbiA9IGdldEpTRnVuY3Rpb24odmFsdWVP
ZkpTQ29uc3RhbnQobm9kZSkpOwogICAgICAgICBBU1NFUlQoZnVuY3Rpb24pOwogICAgICAgICBy
ZXR1cm4ganNDYXN0PEpTRnVuY3Rpb24qPihmdW5jdGlvbik7CiAgICAgfQpAQCAtNDM5LDQ1ICs0
MjAsNDMgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9jb2RlQmxvY2stPnVuY2hlY2tlZEFj
dGl2YXRpb25SZWdpc3RlcigpOwogICAgIH0KICAgICAKLSAgICBWYWx1ZVByb2ZpbGUqIHZhbHVl
UHJvZmlsZUZvcihOb2RlSW5kZXggbm9kZUluZGV4KQorICAgIFZhbHVlUHJvZmlsZSogdmFsdWVQ
cm9maWxlRm9yKE5vZGUqIG5vZGUpCiAgICAgewotICAgICAgICBpZiAobm9kZUluZGV4ID09IE5v
Tm9kZSkKKyAgICAgICAgaWYgKCFub2RlKQogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAg
IAotICAgICAgICBOb2RlJiBub2RlID0gYXQobm9kZUluZGV4KTsKLSAgICAgICAgQ29kZUJsb2Nr
KiBwcm9maWxlZEJsb2NrID0gYmFzZWxpbmVDb2RlQmxvY2tGb3Iobm9kZS5jb2RlT3JpZ2luKTsK
KyAgICAgICAgQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrID0gYmFzZWxpbmVDb2RlQmxvY2tGb3Io
bm9kZS0+Y29kZU9yaWdpbik7CiAgICAgICAgIAotICAgICAgICBpZiAobm9kZS5oYXNMb2NhbCgp
KSB7Ci0gICAgICAgICAgICBpZiAoIW9wZXJhbmRJc0FyZ3VtZW50KG5vZGUubG9jYWwoKSkpCisg
ICAgICAgIGlmIChub2RlLT5oYXNMb2NhbCgpKSB7CisgICAgICAgICAgICBpZiAoIW9wZXJhbmRJ
c0FyZ3VtZW50KG5vZGUtPmxvY2FsKCkpKQogICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAg
ICAgICAgICAgaW50IGFyZ3VtZW50ID0gb3BlcmFuZFRvQXJndW1lbnQobm9kZS5sb2NhbCgpKTsK
LSAgICAgICAgICAgIGlmIChub2RlLnZhcmlhYmxlQWNjZXNzRGF0YSgpICE9IGF0KG1fYXJndW1l
bnRzW2FyZ3VtZW50XSkudmFyaWFibGVBY2Nlc3NEYXRhKCkpCisgICAgICAgICAgICBpbnQgYXJn
dW1lbnQgPSBvcGVyYW5kVG9Bcmd1bWVudChub2RlLT5sb2NhbCgpKTsKKyAgICAgICAgICAgIGlm
IChub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKSAhPSBtX2FyZ3VtZW50c1thcmd1bWVudF0tPnZh
cmlhYmxlQWNjZXNzRGF0YSgpKQogICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAg
ICAgcmV0dXJuIHByb2ZpbGVkQmxvY2stPnZhbHVlUHJvZmlsZUZvckFyZ3VtZW50KGFyZ3VtZW50
KTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgaWYgKG5vZGUuaGFzSGVhcFByZWRpY3Rp
b24oKSkKLSAgICAgICAgICAgIHJldHVybiBwcm9maWxlZEJsb2NrLT52YWx1ZVByb2ZpbGVGb3JC
eXRlY29kZU9mZnNldChub2RlLmNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleEZvclZhbHVlUHJvZmls
ZSgpKTsKKyAgICAgICAgaWYgKG5vZGUtPmhhc0hlYXBQcmVkaWN0aW9uKCkpCisgICAgICAgICAg
ICByZXR1cm4gcHJvZmlsZWRCbG9jay0+dmFsdWVQcm9maWxlRm9yQnl0ZWNvZGVPZmZzZXQobm9k
ZS0+Y29kZU9yaWdpbi5ieXRlY29kZUluZGV4Rm9yVmFsdWVQcm9maWxlKCkpOwogICAgICAgICAK
ICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogICAgIAotICAgIE1ldGhvZE9mR2V0dGluZ0FWYWx1
ZVByb2ZpbGUgbWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZUZvcihOb2RlSW5kZXggbm9kZUlu
ZGV4KQorICAgIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUgbWV0aG9kT2ZHZXR0aW5nQVZh
bHVlUHJvZmlsZUZvcihOb2RlKiBub2RlKQogICAgIHsKLSAgICAgICAgaWYgKG5vZGVJbmRleCA9
PSBOb05vZGUpCisgICAgICAgIGlmICghbm9kZSkKICAgICAgICAgICAgIHJldHVybiBNZXRob2RP
ZkdldHRpbmdBVmFsdWVQcm9maWxlKCk7CiAgICAgICAgIAotICAgICAgICBOb2RlJiBub2RlID0g
YXQobm9kZUluZGV4KTsKLSAgICAgICAgQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrID0gYmFzZWxp
bmVDb2RlQmxvY2tGb3Iobm9kZS5jb2RlT3JpZ2luKTsKKyAgICAgICAgQ29kZUJsb2NrKiBwcm9m
aWxlZEJsb2NrID0gYmFzZWxpbmVDb2RlQmxvY2tGb3Iobm9kZS0+Y29kZU9yaWdpbik7CiAgICAg
ICAgIAotICAgICAgICBpZiAobm9kZS5vcCgpID09IEdldExvY2FsKSB7CisgICAgICAgIGlmIChu
b2RlLT5vcCgpID09IEdldExvY2FsKSB7CiAgICAgICAgICAgICByZXR1cm4gTWV0aG9kT2ZHZXR0
aW5nQVZhbHVlUHJvZmlsZTo6ZnJvbUxhenlPcGVyYW5kKAogICAgICAgICAgICAgICAgIHByb2Zp
bGVkQmxvY2ssCiAgICAgICAgICAgICAgICAgTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVLZXkoCi0g
ICAgICAgICAgICAgICAgICAgIG5vZGUuY29kZU9yaWdpbi5ieXRlY29kZUluZGV4LCBub2RlLmxv
Y2FsKCkpKTsKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y29kZU9yaWdpbi5ieXRlY29kZUlu
ZGV4LCBub2RlLT5sb2NhbCgpKSk7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIHJldHVy
biBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlKHZhbHVlUHJvZmlsZUZvcihub2RlSW5kZXgp
KTsKKyAgICAgICAgcmV0dXJuIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUodmFsdWVQcm9m
aWxlRm9yKG5vZGUpKTsKICAgICB9CiAgICAgCiAgICAgYm9vbCBuZWVkc0FjdGl2YXRpb24oKSBj
b25zdApAQCAtNTAxLDIxICs0ODAsMjEgQEAgcHVibGljOgogICAgIAogICAgIHVuc2lnbmVkIG51
bVN1Y2Nlc3NvcnMoQmFzaWNCbG9jayogYmxvY2spCiAgICAgewotICAgICAgICByZXR1cm4gYXQo
YmxvY2stPmxhc3QoKSkubnVtU3VjY2Vzc29ycygpOworICAgICAgICByZXR1cm4gYmxvY2stPmxh
c3QoKS0+bnVtU3VjY2Vzc29ycygpOwogICAgIH0KICAgICBCbG9ja0luZGV4IHN1Y2Nlc3NvcihC
YXNpY0Jsb2NrKiBibG9jaywgdW5zaWduZWQgaW5kZXgpCiAgICAgewotICAgICAgICByZXR1cm4g
YXQoYmxvY2stPmxhc3QoKSkuc3VjY2Vzc29yKGluZGV4KTsKKyAgICAgICAgcmV0dXJuIGJsb2Nr
LT5sYXN0KCktPnN1Y2Nlc3NvcihpbmRleCk7CiAgICAgfQogICAgIEJsb2NrSW5kZXggc3VjY2Vz
c29yRm9yQ29uZGl0aW9uKEJhc2ljQmxvY2sqIGJsb2NrLCBib29sIGNvbmRpdGlvbikKICAgICB7
Ci0gICAgICAgIHJldHVybiBhdChibG9jay0+bGFzdCgpKS5zdWNjZXNzb3JGb3JDb25kaXRpb24o
Y29uZGl0aW9uKTsKKyAgICAgICAgcmV0dXJuIGJsb2NrLT5sYXN0KCktPnN1Y2Nlc3NvckZvckNv
bmRpdGlvbihjb25kaXRpb24pOwogICAgIH0KICAgICAKLSAgICBib29sIGlzUHJlZGljdGVkTnVt
ZXJpY2FsKE5vZGUmIG5vZGUpCisgICAgYm9vbCBpc1ByZWRpY3RlZE51bWVyaWNhbChOb2RlKiBu
b2RlKQogICAgIHsKLSAgICAgICAgU3BlY3VsYXRlZFR5cGUgbGVmdCA9IGF0KG5vZGUuY2hpbGQx
KCkpLnByZWRpY3Rpb24oKTsKLSAgICAgICAgU3BlY3VsYXRlZFR5cGUgcmlnaHQgPSBhdChub2Rl
LmNoaWxkMigpKS5wcmVkaWN0aW9uKCk7CisgICAgICAgIFNwZWN1bGF0ZWRUeXBlIGxlZnQgPSBu
b2RlLT5jaGlsZDEoKS0+cHJlZGljdGlvbigpOworICAgICAgICBTcGVjdWxhdGVkVHlwZSByaWdo
dCA9IG5vZGUtPmNoaWxkMigpLT5wcmVkaWN0aW9uKCk7CiAgICAgICAgIHJldHVybiBpc051bWJl
clNwZWN1bGF0aW9uKGxlZnQpICYmIGlzTnVtYmVyU3BlY3VsYXRpb24ocmlnaHQpOwogICAgIH0K
ICAgICAKQEAgLTUyNSwyMyArNTA0LDIzIEBAIHB1YmxpYzoKICAgICAvLyAtIFB1dEJ5VmFsIGRl
ZmluaXRlbHkgY2hhbmdlcyB0aGUgYXJyYXkgaXQgc3RvcmVzIHRvLCBhbmQgbWF5IGV2ZW4gY2hh
bmdlIGl0cyBsZW5ndGguCiAgICAgLy8gLSBQdXRCeU9mZnNldCBkZWZpbml0ZWx5IGNoYW5nZXMg
dGhlIG9iamVjdCBpdCBzdG9yZXMgdG8uCiAgICAgLy8gLSBhbmQgc28gb24uCi0gICAgYm9vbCBi
eVZhbElzUHVyZShOb2RlJiBub2RlKQorICAgIGJvb2wgYnlWYWxJc1B1cmUoTm9kZSogbm9kZSkK
ICAgICB7Ci0gICAgICAgIHN3aXRjaCAobm9kZS5hcnJheU1vZGUoKS50eXBlKCkpIHsKKyAgICAg
ICAgc3dpdGNoIChub2RlLT5hcnJheU1vZGUoKS50eXBlKCkpIHsKICAgICAgICAgY2FzZSBBcnJh
eTo6R2VuZXJpYzoKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgY2FzZSBBcnJh
eTo6SW50MzI6CiAgICAgICAgIGNhc2UgQXJyYXk6OkRvdWJsZToKICAgICAgICAgY2FzZSBBcnJh
eTo6Q29udGlndW91czoKICAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlTdG9yYWdlOgotICAgICAg
ICAgICAgcmV0dXJuICFub2RlLmFycmF5TW9kZSgpLmlzT3V0T2ZCb3VuZHMoKTsKKyAgICAgICAg
ICAgIHJldHVybiAhbm9kZS0+YXJyYXlNb2RlKCkuaXNPdXRPZkJvdW5kcygpOwogICAgICAgICBj
YXNlIEFycmF5OjpTbG93UHV0QXJyYXlTdG9yYWdlOgotICAgICAgICAgICAgcmV0dXJuICFub2Rl
LmFycmF5TW9kZSgpLm1heVN0b3JlVG9Ib2xlKCk7CisgICAgICAgICAgICByZXR1cm4gIW5vZGUt
PmFycmF5TW9kZSgpLm1heVN0b3JlVG9Ib2xlKCk7CiAgICAgICAgIGNhc2UgQXJyYXk6OlN0cmlu
ZzoKLSAgICAgICAgICAgIHJldHVybiBub2RlLm9wKCkgPT0gR2V0QnlWYWw7CisgICAgICAgICAg
ICByZXR1cm4gbm9kZS0+b3AoKSA9PSBHZXRCeVZhbDsKICNpZiBVU0UoSlNWQUxVRTMyXzY0KQog
ICAgICAgICBjYXNlIEFycmF5OjpBcmd1bWVudHM6Ci0gICAgICAgICAgICBpZiAobm9kZS5vcCgp
ID09IEdldEJ5VmFsKQorICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gR2V0QnlWYWwpCiAg
ICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAj
ZW5kaWYgLy8gVVNFKEpTVkFMVUUzMl82NCkKQEAgLTU1MCwxMyArNTI5LDEzIEBAIHB1YmxpYzoK
ICAgICAgICAgfQogICAgIH0KICAgICAKLSAgICBib29sIGNsb2JiZXJzV29ybGQoTm9kZSYgbm9k
ZSkKKyAgICBib29sIGNsb2JiZXJzV29ybGQoTm9kZSogbm9kZSkKICAgICB7Ci0gICAgICAgIGlm
IChub2RlLmZsYWdzKCkgJiBOb2RlQ2xvYmJlcnNXb3JsZCkKKyAgICAgICAgaWYgKG5vZGUtPmZs
YWdzKCkgJiBOb2RlQ2xvYmJlcnNXb3JsZCkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAg
ICAgICBpZiAoIShub2RlLmZsYWdzKCkgJiBOb2RlTWlnaHRDbG9iYmVyKSkKKyAgICAgICAgaWYg
KCEobm9kZS0+ZmxhZ3MoKSAmIE5vZGVNaWdodENsb2JiZXIpKQogICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgICBzd2l0Y2ggKG5vZGUub3AoKSkgeworICAgICAgICBzd2l0Y2ggKG5v
ZGUtPm9wKCkpIHsKICAgICAgICAgY2FzZSBWYWx1ZUFkZDoKICAgICAgICAgY2FzZSBDb21wYXJl
TGVzczoKICAgICAgICAgY2FzZSBDb21wYXJlTGVzc0VxOgpAQCAtNTc0LDkgKzU1Myw5IEBAIHB1
YmxpYzoKICAgICAgICAgfQogICAgIH0KICAgICAKLSAgICBib29sIGNsb2JiZXJzV29ybGQoTm9k
ZUluZGV4IG5vZGVJbmRleCkKKyAgICBib29sIGNsb2JiZXJzV29ybGQoTm9kZSogbm9kZSkKICAg
ICB7Ci0gICAgICAgIHJldHVybiBjbG9iYmVyc1dvcmxkKGF0KG5vZGVJbmRleCkpOworICAgICAg
ICByZXR1cm4gY2xvYmJlcnNXb3JsZChub2RlKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBkZXRl
cm1pbmVSZWFjaGFiaWxpdHkoKTsKQEAgLTU4NCw1MiArNTYzLDU3IEBAIHB1YmxpYzoKICAgICAK
ICAgICB2b2lkIHJlc2V0RXhpdFN0YXRlcygpOwogICAgIAotICAgIHVuc2lnbmVkIHZhckFyZ051
bUNoaWxkcmVuKE5vZGUmIG5vZGUpCisgICAgdW5zaWduZWQgdmFyQXJnTnVtQ2hpbGRyZW4oTm9k
ZSogbm9kZSkKICAgICB7Ci0gICAgICAgIEFTU0VSVChub2RlLmZsYWdzKCkgJiBOb2RlSGFzVmFy
QXJncyk7Ci0gICAgICAgIHJldHVybiBub2RlLm51bUNoaWxkcmVuKCk7CisgICAgICAgIEFTU0VS
VChub2RlLT5mbGFncygpICYgTm9kZUhhc1ZhckFyZ3MpOworICAgICAgICByZXR1cm4gbm9kZS0+
bnVtQ2hpbGRyZW4oKTsKICAgICB9CiAgICAgCi0gICAgdW5zaWduZWQgbnVtQ2hpbGRyZW4oTm9k
ZSYgbm9kZSkKKyAgICB1bnNpZ25lZCBudW1DaGlsZHJlbihOb2RlKiBub2RlKQogICAgIHsKLSAg
ICAgICAgaWYgKG5vZGUuZmxhZ3MoKSAmIE5vZGVIYXNWYXJBcmdzKQorICAgICAgICBpZiAobm9k
ZS0+ZmxhZ3MoKSAmIE5vZGVIYXNWYXJBcmdzKQogICAgICAgICAgICAgcmV0dXJuIHZhckFyZ051
bUNoaWxkcmVuKG5vZGUpOwogICAgICAgICByZXR1cm4gQWRqYWNlbmN5TGlzdDo6U2l6ZTsKICAg
ICB9CiAgICAgCi0gICAgRWRnZSYgdmFyQXJnQ2hpbGQoTm9kZSYgbm9kZSwgdW5zaWduZWQgaW5k
ZXgpCisgICAgRWRnZSYgdmFyQXJnQ2hpbGQoTm9kZSogbm9kZSwgdW5zaWduZWQgaW5kZXgpCiAg
ICAgewotICAgICAgICBBU1NFUlQobm9kZS5mbGFncygpICYgTm9kZUhhc1ZhckFyZ3MpOwotICAg
ICAgICByZXR1cm4gbV92YXJBcmdDaGlsZHJlbltub2RlLmZpcnN0Q2hpbGQoKSArIGluZGV4XTsK
KyAgICAgICAgQVNTRVJUKG5vZGUtPmZsYWdzKCkgJiBOb2RlSGFzVmFyQXJncyk7CisgICAgICAg
IHJldHVybiBtX3ZhckFyZ0NoaWxkcmVuW25vZGUtPmZpcnN0Q2hpbGQoKSArIGluZGV4XTsKICAg
ICB9CiAgICAgCi0gICAgRWRnZSYgY2hpbGQoTm9kZSYgbm9kZSwgdW5zaWduZWQgaW5kZXgpCisg
ICAgRWRnZSYgY2hpbGQoTm9kZSogbm9kZSwgdW5zaWduZWQgaW5kZXgpCiAgICAgewotICAgICAg
ICBpZiAobm9kZS5mbGFncygpICYgTm9kZUhhc1ZhckFyZ3MpCisgICAgICAgIGlmIChub2RlLT5m
bGFncygpICYgTm9kZUhhc1ZhckFyZ3MpCiAgICAgICAgICAgICByZXR1cm4gdmFyQXJnQ2hpbGQo
bm9kZSwgaW5kZXgpOwotICAgICAgICByZXR1cm4gbm9kZS5jaGlsZHJlbi5jaGlsZChpbmRleCk7
CisgICAgICAgIHJldHVybiBub2RlLT5jaGlsZHJlbi5jaGlsZChpbmRleCk7CiAgICAgfQogICAg
IAotICAgIHZvaWQgdm90ZShFZGdlIGVkZ2UsIHVuc2lnbmVkIGJhbGxvdCkKKyAgICB2b2lkIHZv
dGVOb2RlKE5vZGUqIG5vZGUsIHVuc2lnbmVkIGJhbGxvdCkKICAgICB7Ci0gICAgICAgIHN3aXRj
aCAoYXQoZWRnZSkub3AoKSkgeworICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKICAgICAg
ICAgY2FzZSBWYWx1ZVRvSW50MzI6CiAgICAgICAgIGNhc2UgVUludDMyVG9OdW1iZXI6Ci0gICAg
ICAgICAgICBlZGdlID0gYXQoZWRnZSkuY2hpbGQxKCk7CisgICAgICAgICAgICBub2RlID0gbm9k
ZS0+Y2hpbGQxKCkubm9kZSgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgaWYgKGF0
KGVkZ2UpLm9wKCkgPT0gR2V0TG9jYWwpCi0gICAgICAgICAgICBhdChlZGdlKS52YXJpYWJsZUFj
Y2Vzc0RhdGEoKS0+dm90ZShiYWxsb3QpOworICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBHZXRM
b2NhbCkKKyAgICAgICAgICAgIG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT52b3RlKGJhbGxv
dCk7CisgICAgfQorICAgIAorICAgIHZvaWQgdm90ZU5vZGUoRWRnZSBlZGdlLCB1bnNpZ25lZCBi
YWxsb3QpCisgICAgeworICAgICAgICB2b3RlTm9kZShlZGdlLm5vZGUoKSwgYmFsbG90KTsKICAg
ICB9CiAgICAgCi0gICAgdm9pZCB2b3RlKE5vZGUmIG5vZGUsIHVuc2lnbmVkIGJhbGxvdCkKKyAg
ICB2b2lkIHZvdGVDaGlsZHJlbihOb2RlKiBub2RlLCB1bnNpZ25lZCBiYWxsb3QpCiAgICAgewot
ICAgICAgICBpZiAobm9kZS5mbGFncygpICYgTm9kZUhhc1ZhckFyZ3MpIHsKLSAgICAgICAgICAg
IGZvciAodW5zaWduZWQgY2hpbGRJZHggPSBub2RlLmZpcnN0Q2hpbGQoKTsKLSAgICAgICAgICAg
ICAgICAgY2hpbGRJZHggPCBub2RlLmZpcnN0Q2hpbGQoKSArIG5vZGUubnVtQ2hpbGRyZW4oKTsK
KyAgICAgICAgaWYgKG5vZGUtPmZsYWdzKCkgJiBOb2RlSGFzVmFyQXJncykgeworICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBjaGlsZElkeCA9IG5vZGUtPmZpcnN0Q2hpbGQoKTsKKyAgICAgICAg
ICAgICAgICAgY2hpbGRJZHggPCBub2RlLT5maXJzdENoaWxkKCkgKyBub2RlLT5udW1DaGlsZHJl
bigpOwogICAgICAgICAgICAgICAgICBjaGlsZElkeCsrKSB7CiAgICAgICAgICAgICAgICAgaWYg
KCEhbV92YXJBcmdDaGlsZHJlbltjaGlsZElkeF0pCiAgICAgICAgICAgICAgICAgICAgIHZvdGUo
bV92YXJBcmdDaGlsZHJlbltjaGlsZElkeF0sIGJhbGxvdCk7CkBAIC02MzcsMzkgKzYyMSwzOCBA
QCBwdWJsaWM6CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgCi0gICAg
ICAgIGlmICghbm9kZS5jaGlsZDEoKSkKKyAgICAgICAgaWYgKCFub2RlLT5jaGlsZDEoKSkKICAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgdm90ZShub2RlLmNoaWxkMSgpLCBiYWxsb3QpOwot
ICAgICAgICBpZiAoIW5vZGUuY2hpbGQyKCkpCisgICAgICAgIHZvdGUobm9kZS0+Y2hpbGQxKCks
IGJhbGxvdCk7CisgICAgICAgIGlmICghbm9kZS0+Y2hpbGQyKCkpCiAgICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIHZvdGUobm9kZS5jaGlsZDIoKSwgYmFsbG90KTsKLSAgICAgICAgaWYgKCFu
b2RlLmNoaWxkMygpKQorICAgICAgICB2b3RlKG5vZGUtPmNoaWxkMigpLCBiYWxsb3QpOworICAg
ICAgICBpZiAoIW5vZGUtPmNoaWxkMygpKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB2
b3RlKG5vZGUuY2hpbGQzKCksIGJhbGxvdCk7CisgICAgICAgIHZvdGUobm9kZS0+Y2hpbGQzKCks
IGJhbGxvdCk7CiAgICAgfQogICAgIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IC8vIFQgPSBO
b2RlSW5kZXggb3IgRWRnZQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IC8vIFQgPSBOb2RlKiBv
ciBFZGdlCiAgICAgdm9pZCBzdWJzdGl0dXRlKEJhc2ljQmxvY2smIGJsb2NrLCB1bnNpZ25lZCBz
dGFydEluZGV4SW5CbG9jaywgVCBvbGRUaGluZywgVCBuZXdUaGluZykKICAgICB7CiAgICAgICAg
IGZvciAodW5zaWduZWQgaW5kZXhJbkJsb2NrID0gc3RhcnRJbmRleEluQmxvY2s7IGluZGV4SW5C
bG9jayA8IGJsb2NrLnNpemUoKTsgKytpbmRleEluQmxvY2spIHsKLSAgICAgICAgICAgIE5vZGVJ
bmRleCBub2RlSW5kZXggPSBibG9ja1tpbmRleEluQmxvY2tdOwotICAgICAgICAgICAgTm9kZSYg
bm9kZSA9IGF0KG5vZGVJbmRleCk7Ci0gICAgICAgICAgICBpZiAobm9kZS5mbGFncygpICYgTm9k
ZUhhc1ZhckFyZ3MpIHsKLSAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGNoaWxkSWR4ID0g
bm9kZS5maXJzdENoaWxkKCk7IGNoaWxkSWR4IDwgbm9kZS5maXJzdENoaWxkKCkgKyBub2RlLm51
bUNoaWxkcmVuKCk7ICsrY2hpbGRJZHgpIHsKKyAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9j
a1tpbmRleEluQmxvY2tdOworICAgICAgICAgICAgaWYgKG5vZGUtPmZsYWdzKCkgJiBOb2RlSGFz
VmFyQXJncykgeworICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgY2hpbGRJZHggPSBub2Rl
LT5maXJzdENoaWxkKCk7IGNoaWxkSWR4IDwgbm9kZS0+Zmlyc3RDaGlsZCgpICsgbm9kZS0+bnVt
Q2hpbGRyZW4oKTsgKytjaGlsZElkeCkgewogICAgICAgICAgICAgICAgICAgICBpZiAoISFtX3Zh
ckFyZ0NoaWxkcmVuW2NoaWxkSWR4XSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBhcmVB
bmRTd2FwKG1fdmFyQXJnQ2hpbGRyZW5bY2hpbGRJZHhdLCBvbGRUaGluZywgbmV3VGhpbmcsIG5v
ZGUuc2hvdWxkR2VuZXJhdGUoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBjb21wYXJlQW5k
U3dhcChtX3ZhckFyZ0NoaWxkcmVuW2NoaWxkSWR4XSwgb2xkVGhpbmcsIG5ld1RoaW5nLCBub2Rl
LT5zaG91bGRHZW5lcmF0ZSgpKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
Y29udGludWU7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoIW5vZGUuY2hpbGQxKCkp
CisgICAgICAgICAgICBpZiAoIW5vZGUtPmNoaWxkMSgpKQogICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwotICAgICAgICAgICAgY29tcGFyZUFuZFN3YXAobm9kZS5jaGlsZHJlbi5jaGlsZDEoKSwg
b2xkVGhpbmcsIG5ld1RoaW5nLCBub2RlLnNob3VsZEdlbmVyYXRlKCkpOwotICAgICAgICAgICAg
aWYgKCFub2RlLmNoaWxkMigpKQorICAgICAgICAgICAgY29tcGFyZUFuZFN3YXAobm9kZS0+Y2hp
bGRyZW4uY2hpbGQxKCksIG9sZFRoaW5nLCBuZXdUaGluZywgbm9kZS0+c2hvdWxkR2VuZXJhdGUo
KSk7CisgICAgICAgICAgICBpZiAoIW5vZGUtPmNoaWxkMigpKQogICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwotICAgICAgICAgICAgY29tcGFyZUFuZFN3YXAobm9kZS5jaGlsZHJlbi5jaGlsZDIo
KSwgb2xkVGhpbmcsIG5ld1RoaW5nLCBub2RlLnNob3VsZEdlbmVyYXRlKCkpOwotICAgICAgICAg
ICAgaWYgKCFub2RlLmNoaWxkMygpKQorICAgICAgICAgICAgY29tcGFyZUFuZFN3YXAobm9kZS0+
Y2hpbGRyZW4uY2hpbGQyKCksIG9sZFRoaW5nLCBuZXdUaGluZywgbm9kZS0+c2hvdWxkR2VuZXJh
dGUoKSk7CisgICAgICAgICAgICBpZiAoIW5vZGUtPmNoaWxkMygpKQogICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwotICAgICAgICAgICAgY29tcGFyZUFuZFN3YXAobm9kZS5jaGlsZHJlbi5jaGls
ZDMoKSwgb2xkVGhpbmcsIG5ld1RoaW5nLCBub2RlLnNob3VsZEdlbmVyYXRlKCkpOworICAgICAg
ICAgICAgY29tcGFyZUFuZFN3YXAobm9kZS0+Y2hpbGRyZW4uY2hpbGQzKCksIG9sZFRoaW5nLCBu
ZXdUaGluZywgbm9kZS0+c2hvdWxkR2VuZXJhdGUoKSk7CiAgICAgICAgIH0KICAgICB9CiAgICAg
CkBAIC02NzcsMjkgKzY2MCwyOCBAQCBwdWJsaWM6CiAgICAgLy8gYW55IEdldExvY2FscyBpbiB0
aGUgYmFzaWMgYmxvY2suCiAgICAgLy8gRklYTUU6IGl0IG1heSBiZSBhcHByb3ByaWF0ZSwgaW4g
dGhlIGZ1dHVyZSwgdG8gZ2VuZXJhbGl6ZSB0aGlzIHRvIGhhbmRsZSBHZXRMb2NhbHMKICAgICAv
LyBpbnRyb2R1Y2VkIGFueXdoZXJlIGluIHRoZSBiYXNpYyBibG9jay4KLSAgICB2b2lkIHN1YnN0
aXR1dGVHZXRMb2NhbChCYXNpY0Jsb2NrJiBibG9jaywgdW5zaWduZWQgc3RhcnRJbmRleEluQmxv
Y2ssIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhLCBOb2RlSW5kZXggbmV3
R2V0TG9jYWwpCisgICAgdm9pZCBzdWJzdGl0dXRlR2V0TG9jYWwoQmFzaWNCbG9jayYgYmxvY2ss
IHVuc2lnbmVkIHN0YXJ0SW5kZXhJbkJsb2NrLCBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxl
QWNjZXNzRGF0YSwgTm9kZSogbmV3R2V0TG9jYWwpCiAgICAgewogICAgICAgICBpZiAodmFyaWFi
bGVBY2Nlc3NEYXRhLT5pc0NhcHR1cmVkKCkpIHsKICAgICAgICAgICAgIC8vIExldCBDU0Ugd29y
cnkgYWJvdXQgdGhpcyBvbmUuCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpbmRleEluQmxvY2sgPSBzdGFydEluZGV4SW5CbG9jazsgaW5kZXhJ
bkJsb2NrIDwgYmxvY2suc2l6ZSgpOyArK2luZGV4SW5CbG9jaykgewotICAgICAgICAgICAgTm9k
ZUluZGV4IG5vZGVJbmRleCA9IGJsb2NrW2luZGV4SW5CbG9ja107Ci0gICAgICAgICAgICBOb2Rl
JiBub2RlID0gYXQobm9kZUluZGV4KTsKKyAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9ja1tp
bmRleEluQmxvY2tdOwogICAgICAgICAgICAgYm9vbCBzaG91bGRDb250aW51ZSA9IHRydWU7Ci0g
ICAgICAgICAgICBzd2l0Y2ggKG5vZGUub3AoKSkgeworICAgICAgICAgICAgc3dpdGNoIChub2Rl
LT5vcCgpKSB7CiAgICAgICAgICAgICBjYXNlIFNldExvY2FsOiB7Ci0gICAgICAgICAgICAgICAg
aWYgKG5vZGUubG9jYWwoKSA9PSB2YXJpYWJsZUFjY2Vzc0RhdGEtPmxvY2FsKCkpCisgICAgICAg
ICAgICAgICAgaWYgKG5vZGUtPmxvY2FsKCkgPT0gdmFyaWFibGVBY2Nlc3NEYXRhLT5sb2NhbCgp
KQogICAgICAgICAgICAgICAgICAgICBzaG91bGRDb250aW51ZSA9IGZhbHNlOwogICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIAogICAgICAgICAg
ICAgY2FzZSBHZXRMb2NhbDogewotICAgICAgICAgICAgICAgIGlmIChub2RlLnZhcmlhYmxlQWNj
ZXNzRGF0YSgpICE9IHZhcmlhYmxlQWNjZXNzRGF0YSkKKyAgICAgICAgICAgICAgICBpZiAobm9k
ZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCkgIT0gdmFyaWFibGVBY2Nlc3NEYXRhKQogICAgICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICBzdWJzdGl0dXRlKGJsb2NrLCBp
bmRleEluQmxvY2ssIG5vZGVJbmRleCwgbmV3R2V0TG9jYWwpOwotICAgICAgICAgICAgICAgIE5v
ZGVJbmRleCBvbGRUYWlsSW5kZXggPSBibG9jay52YXJpYWJsZXNBdFRhaWwub3BlcmFuZCh2YXJp
YWJsZUFjY2Vzc0RhdGEtPmxvY2FsKCkpOwotICAgICAgICAgICAgICAgIGlmIChvbGRUYWlsSW5k
ZXggPT0gbm9kZUluZGV4KQorICAgICAgICAgICAgICAgIHN1YnN0aXR1dGUoYmxvY2ssIGluZGV4
SW5CbG9jaywgbm9kZSwgbmV3R2V0TG9jYWwpOworICAgICAgICAgICAgICAgIE5vZGUqIG9sZFRh
aWxOb2RlID0gYmxvY2sudmFyaWFibGVzQXRUYWlsLm9wZXJhbmQodmFyaWFibGVBY2Nlc3NEYXRh
LT5sb2NhbCgpKTsKKyAgICAgICAgICAgICAgICBpZiAob2xkVGFpbE5vZGUgPT0gbm9kZSkKICAg
ICAgICAgICAgICAgICAgICAgYmxvY2sudmFyaWFibGVzQXRUYWlsLm9wZXJhbmQodmFyaWFibGVB
Y2Nlc3NEYXRhLT5sb2NhbCgpKSA9IG5ld0dldExvY2FsOwogICAgICAgICAgICAgICAgIHNob3Vs
ZENvbnRpbnVlID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC03MTcsNiArNjk5
LDggQEAgcHVibGljOgogICAgIENvZGVCbG9jayogbV9jb2RlQmxvY2s7CiAgICAgUmVmUHRyPFBy
b2ZpbGVyOjpDb21waWxhdGlvbj4gbV9jb21waWxhdGlvbjsKICAgICBDb2RlQmxvY2sqIG1fcHJv
ZmlsZWRCbG9jazsKKyAgICAKKyAgICBOb2RlQWxsb2NhdG9yJiBtX2FsbG9jYXRvcjsKIAogICAg
IFZlY3RvcjwgT3duUHRyPEJhc2ljQmxvY2s+ICwgOD4gbV9ibG9ja3M7CiAgICAgVmVjdG9yPEVk
Z2UsIDE2PiBtX3ZhckFyZ0NoaWxkcmVuOwpAQCAtNzI0LDcgKzcwOCw3IEBAIHB1YmxpYzoKICAg
ICBWZWN0b3I8UmVzb2x2ZUdsb2JhbERhdGE+IG1fcmVzb2x2ZUdsb2JhbERhdGE7CiAgICAgVmVj
dG9yPFJlc29sdmVPcGVyYXRpb25EYXRhPiBtX3Jlc29sdmVPcGVyYXRpb25zRGF0YTsKICAgICBW
ZWN0b3I8UHV0VG9CYXNlT3BlcmF0aW9uRGF0YT4gbV9wdXRUb0Jhc2VPcGVyYXRpb25EYXRhOwot
ICAgIFZlY3RvcjxOb2RlSW5kZXgsIDg+IG1fYXJndW1lbnRzOworICAgIFZlY3RvcjxOb2RlKiwg
OD4gbV9hcmd1bWVudHM7CiAgICAgU2VnbWVudGVkVmVjdG9yPFZhcmlhYmxlQWNjZXNzRGF0YSwg
MTY+IG1fdmFyaWFibGVBY2Nlc3NEYXRhOwogICAgIFNlZ21lbnRlZFZlY3RvcjxBcmd1bWVudFBv
c2l0aW9uLCA4PiBtX2FyZ3VtZW50UG9zaXRpb25zOwogICAgIFNlZ21lbnRlZFZlY3RvcjxTdHJ1
Y3R1cmVTZXQsIDE2PiBtX3N0cnVjdHVyZVNldDsKQEAgLTc0NCwyOSArNzI4LDI5IEBAIHByaXZh
dGU6CiAgICAgCiAgICAgdm9pZCBoYW5kbGVTdWNjZXNzb3IoVmVjdG9yPEJsb2NrSW5kZXgsIDE2
PiYgd29ya2xpc3QsIEJsb2NrSW5kZXggYmxvY2tJbmRleCwgQmxvY2tJbmRleCBzdWNjZXNzb3JJ
bmRleCk7CiAgICAgCi0gICAgQWRkU3BlY3VsYXRpb25Nb2RlIGFkZEltbWVkaWF0ZVNob3VsZFNw
ZWN1bGF0ZUludGVnZXIoTm9kZSYgYWRkLCBib29sIHZhcmlhYmxlU2hvdWxkU3BlY3VsYXRlSW50
ZWdlciwgTm9kZSYgaW1tZWRpYXRlKQorICAgIEFkZFNwZWN1bGF0aW9uTW9kZSBhZGRJbW1lZGlh
dGVTaG91bGRTcGVjdWxhdGVJbnRlZ2VyKE5vZGUqIGFkZCwgYm9vbCB2YXJpYWJsZVNob3VsZFNw
ZWN1bGF0ZUludGVnZXIsIE5vZGUqIGltbWVkaWF0ZSkKICAgICB7CiAgICAgICAgIEFTU0VSVChp
bW1lZGlhdGUuaGFzQ29uc3RhbnQoKSk7CiAgICAgICAgIAotICAgICAgICBKU1ZhbHVlIGltbWVk
aWF0ZVZhbHVlID0gaW1tZWRpYXRlLnZhbHVlT2ZKU0NvbnN0YW50KG1fY29kZUJsb2NrKTsKLSAg
ICAgICAgaWYgKCFpbW1lZGlhdGVWYWx1ZS5pc051bWJlcigpKQorICAgICAgICBKU1ZhbHVlIGlt
bWVkaWF0ZVZhbHVlID0gaW1tZWRpYXRlLT52YWx1ZU9mSlNDb25zdGFudChtX2NvZGVCbG9jayk7
CisgICAgICAgIGlmICghaW1tZWRpYXRlVmFsdWUtPmlzTnVtYmVyKCkpCiAgICAgICAgICAgICBy
ZXR1cm4gRG9udFNwZWN1bGF0ZUludGVnZXI7CiAgICAgICAgIAogICAgICAgICBpZiAoIXZhcmlh
YmxlU2hvdWxkU3BlY3VsYXRlSW50ZWdlcikKICAgICAgICAgICAgIHJldHVybiBEb250U3BlY3Vs
YXRlSW50ZWdlcjsKICAgICAgICAgCi0gICAgICAgIGlmIChpbW1lZGlhdGVWYWx1ZS5pc0ludDMy
KCkpCi0gICAgICAgICAgICByZXR1cm4gYWRkLmNhblNwZWN1bGF0ZUludGVnZXIoKSA/IFNwZWN1
bGF0ZUludGVnZXIgOiBEb250U3BlY3VsYXRlSW50ZWdlcjsKKyAgICAgICAgaWYgKGltbWVkaWF0
ZVZhbHVlLT5pc0ludDMyKCkpCisgICAgICAgICAgICByZXR1cm4gYWRkLT5jYW5TcGVjdWxhdGVJ
bnRlZ2VyKCkgPyBTcGVjdWxhdGVJbnRlZ2VyIDogRG9udFNwZWN1bGF0ZUludGVnZXI7CiAgICAg
ICAgIAogICAgICAgICBkb3VibGUgZG91YmxlSW1tZWRpYXRlID0gaW1tZWRpYXRlVmFsdWUuYXNE
b3VibGUoKTsKICAgICAgICAgY29uc3QgZG91YmxlIHR3b1RvVGhlNDggPSAyODE0NzQ5NzY3MTA2
NTYuMDsKICAgICAgICAgaWYgKGRvdWJsZUltbWVkaWF0ZSA8IC10d29Ub1RoZTQ4IHx8IGRvdWJs
ZUltbWVkaWF0ZSA+IHR3b1RvVGhlNDgpCiAgICAgICAgICAgICByZXR1cm4gRG9udFNwZWN1bGF0
ZUludGVnZXI7CiAgICAgICAgIAotICAgICAgICByZXR1cm4gbm9kZUNhblRydW5jYXRlSW50ZWdl
cihhZGQuYXJpdGhOb2RlRmxhZ3MoKSkgPyBTcGVjdWxhdGVJbnRlZ2VyQnV0QWx3YXlzV2F0Y2hP
dmVyZmxvdyA6IERvbnRTcGVjdWxhdGVJbnRlZ2VyOworICAgICAgICByZXR1cm4gbm9kZUNhblRy
dW5jYXRlSW50ZWdlcihhZGQtPmFyaXRoTm9kZUZsYWdzKCkpID8gU3BlY3VsYXRlSW50ZWdlckJ1
dEFsd2F5c1dhdGNoT3ZlcmZsb3cgOiBEb250U3BlY3VsYXRlSW50ZWdlcjsKICAgICB9CiAgICAg
Ci0gICAgYm9vbCBtdWxJbW1lZGlhdGVTaG91bGRTcGVjdWxhdGVJbnRlZ2VyKE5vZGUmIG11bCwg
Tm9kZSYgdmFyaWFibGUsIE5vZGUmIGltbWVkaWF0ZSkKKyAgICBib29sIG11bEltbWVkaWF0ZVNo
b3VsZFNwZWN1bGF0ZUludGVnZXIoTm9kZSogbXVsLCBOb2RlKiB2YXJpYWJsZSwgTm9kZSogaW1t
ZWRpYXRlKQogICAgIHsKICAgICAgICAgQVNTRVJUKGltbWVkaWF0ZS5oYXNDb25zdGFudCgpKTsK
ICAgICAgICAgCkBAIC03NzQsNyArNzU4LDcgQEAgcHJpdmF0ZToKICAgICAgICAgaWYgKCFpbW1l
ZGlhdGVWYWx1ZS5pc0ludDMyKCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAg
IAotICAgICAgICBpZiAoIXZhcmlhYmxlLnNob3VsZFNwZWN1bGF0ZUludGVnZXJGb3JBcml0aG1l
dGljKCkpCisgICAgICAgIGlmICghdmFyaWFibGUtPnNob3VsZFNwZWN1bGF0ZUludGVnZXJGb3JB
cml0aG1ldGljKCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIAogICAgICAg
ICBpbnQzMl90IGludEltbWVkaWF0ZSA9IGltbWVkaWF0ZVZhbHVlLmFzSW50MzIoKTsKQEAgLTc4
NSwxNCArNzY5LDE0IEBAIHByaXZhdGU6CiAgICAgICAgIC8vIGNhblNwZWN1bGF0ZUludGVnZXIo
KSBpbXBsaWVzKS4KICAgICAgICAgY29uc3QgaW50MzJfdCB0d29Ub1RoZTIyID0gMSA8PCAyMjsK
ICAgICAgICAgaWYgKGludEltbWVkaWF0ZSA8PSAtdHdvVG9UaGUyMiB8fCBpbnRJbW1lZGlhdGUg
Pj0gdHdvVG9UaGUyMikKLSAgICAgICAgICAgIHJldHVybiBtdWwuY2FuU3BlY3VsYXRlSW50ZWdl
cigpICYmICFub2RlTWF5T3ZlcmZsb3cobXVsLmFyaXRoTm9kZUZsYWdzKCkpOworICAgICAgICAg
ICAgcmV0dXJuIG11bC0+Y2FuU3BlY3VsYXRlSW50ZWdlcigpICYmICFub2RlTWF5T3ZlcmZsb3co
bXVsLT5hcml0aE5vZGVGbGFncygpKTsKIAotICAgICAgICByZXR1cm4gbXVsLmNhblNwZWN1bGF0
ZUludGVnZXIoKTsKKyAgICAgICAgcmV0dXJuIG11bC0+Y2FuU3BlY3VsYXRlSW50ZWdlcigpOwog
ICAgIH0KICAgICAKICAgICAvLyBXaGVuIGEgbm9kZSdzIHJlZkNvdW50IGdvZXMgZnJvbSAwIHRv
IDEsIGl0IG11c3QgKGxvZ2ljYWxseSkgcmVjdXJzaXZlbHkgcmVmIGFsbCBvZiBpdHMgY2hpbGRy
ZW4sIGFuZCB2aWNlIHZlcnNhLgotICAgIHZvaWQgcmVmQ2hpbGRyZW4oTm9kZUluZGV4KTsKLSAg
ICB2b2lkIGRlcmVmQ2hpbGRyZW4oTm9kZUluZGV4KTsKKyAgICB2b2lkIHJlZkNoaWxkcmVuKE5v
ZGUqKTsKKyAgICB2b2lkIGRlcmVmQ2hpbGRyZW4oTm9kZSopOwogfTsKIAogY2xhc3MgR2V0Qnl0
ZWNvZGVCZWdpbkZvckJsb2NrIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
SW5zZXJ0aW9uU2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdJbnNlcnRpb25TZXQuaAkocmV2aXNpb24gMTQwNjE2KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdJbnNlcnRpb25TZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMzksMTQgKzM5LDE0
IEBAIGNsYXNzIEluc2VydGlvbiB7CiBwdWJsaWM6CiAgICAgSW5zZXJ0aW9uKCkgeyB9CiAgICAg
Ci0gICAgSW5zZXJ0aW9uKHNpemVfdCBpbmRleCwgTm9kZUluZGV4IGVsZW1lbnQpCisgICAgSW5z
ZXJ0aW9uKHNpemVfdCBpbmRleCwgTm9kZSogZWxlbWVudCkKICAgICAgICAgOiBtX2luZGV4KGlu
ZGV4KQogICAgICAgICAsIG1fZWxlbWVudChlbGVtZW50KQogICAgIHsKICAgICB9CiAgICAgCiAg
ICAgc2l6ZV90IGluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9pbmRleDsgfQotICAgIE5vZGVJbmRl
eCBlbGVtZW50KCkgY29uc3QgeyByZXR1cm4gbV9lbGVtZW50OyB9CisgICAgTm9kZSogZWxlbWVu
dCgpIGNvbnN0IHsgcmV0dXJuIG1fZWxlbWVudDsgfQogcHJpdmF0ZToKICAgICBzaXplX3QgbV9p
bmRleDsKICAgICBOb2RlSW5kZXggbV9lbGVtZW50OwpAQCAtNTksMjAgKzU5LDIwIEBAIHB1Ymxp
YzoKICAgICB7CiAgICAgfQogICAgIAotICAgIE5vZGVJbmRleCBpbnNlcnQoY29uc3QgSW5zZXJ0
aW9uJiBpbnNlcnRpb24pCisgICAgTm9kZSogaW5zZXJ0KGNvbnN0IEluc2VydGlvbiYgaW5zZXJ0
aW9uKQogICAgIHsKICAgICAgICAgQVNTRVJUKCFtX2luc2VydGlvbnMuc2l6ZSgpIHx8IG1faW5z
ZXJ0aW9ucy5sYXN0KCkuaW5kZXgoKSA8PSBpbnNlcnRpb24uaW5kZXgoKSk7CiAgICAgICAgIG1f
aW5zZXJ0aW9ucy5hcHBlbmQoaW5zZXJ0aW9uKTsKICAgICAgICAgcmV0dXJuIGluc2VydGlvbi5l
bGVtZW50KCk7CiAgICAgfQogICAgIAotICAgIE5vZGVJbmRleCBpbnNlcnQoc2l6ZV90IGluZGV4
LCBOb2RlSW5kZXggZWxlbWVudCkKKyAgICBOb2RlKiBpbnNlcnQoc2l6ZV90IGluZGV4LCBOb2Rl
SW5kZXggZWxlbWVudCkKICAgICB7CiAgICAgICAgIHJldHVybiBpbnNlcnQoSW5zZXJ0aW9uKGlu
ZGV4LCBlbGVtZW50KSk7CiAgICAgfQogCiAjZGVmaW5lIERGR19ERUZJTkVfSU5TRVJUX05PREUo
dGVtcGxhdGVQcmUsIHRlbXBsYXRlUG9zdCwgdHlwZVBhcmFtcywgdmFsdWVQYXJhbXNDb21tYSwg
dmFsdWVQYXJhbXMsIHZhbHVlQXJncykgXAotICAgIHRlbXBsYXRlUHJlIHR5cGVQYXJhbXMgdGVt
cGxhdGVQb3N0IE5vZGVJbmRleCBpbnNlcnROb2RlKHNpemVfdCBpbmRleCwgUmVmQ2hpbGRyZW5N
b2RlIHJlZkNoaWxkcmVuTW9kZSwgUmVmTm9kZU1vZGUgcmVmTm9kZU1vZGUsIFNwZWN1bGF0ZWRU
eXBlIHR5cGUgdmFsdWVQYXJhbXNDb21tYSB2YWx1ZVBhcmFtcykgXAorICAgIHRlbXBsYXRlUHJl
IHR5cGVQYXJhbXMgdGVtcGxhdGVQb3N0IE5vZGUqIGluc2VydE5vZGUoc2l6ZV90IGluZGV4LCBS
ZWZDaGlsZHJlbk1vZGUgcmVmQ2hpbGRyZW5Nb2RlLCBSZWZOb2RlTW9kZSByZWZOb2RlTW9kZSwg
U3BlY3VsYXRlZFR5cGUgdHlwZSB2YWx1ZVBhcmFtc0NvbW1hIHZhbHVlUGFyYW1zKSBcCiAgICAg
eyBcCiAgICAgICAgIHJldHVybiBpbnNlcnQoaW5kZXgsIG1fZ3JhcGguYWRkTm9kZShyZWZDaGls
ZHJlbk1vZGUsIHJlZk5vZGVNb2RlLCB0eXBlIHZhbHVlUGFyYW1zQ29tbWEgdmFsdWVBcmdzKSk7
IFwKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVy
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxl
ci5oCShyZXZpc2lvbiAxNDA2MTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJ
VENvbXBpbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2NiwxMSArMjY2LDExIEBAIHB1YmxpYzoK
ICAgICAgICAgbV9kaXNhc3NlbWJsZXItPnNldEZvckJsb2NrKGJsb2NrSW5kZXgsIGxhYmVsSWdu
b3JpbmdXYXRjaHBvaW50cygpKTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBzZXRGb3JOb2RlKE5v
ZGVJbmRleCBub2RlSW5kZXgpCisgICAgdm9pZCBzZXRGb3JOb2RlKE5vZGUqIG5vZGUpCiAgICAg
ewogICAgICAgICBpZiAoTElLRUxZKCFtX2Rpc2Fzc2VtYmxlcikpCiAgICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIG1fZGlzYXNzZW1ibGVyLT5zZXRGb3JOb2RlKG5vZGVJbmRleCwgbGFiZWxJ
Z25vcmluZ1dhdGNocG9pbnRzKCkpOworICAgICAgICBtX2Rpc2Fzc2VtYmxlci0+c2V0Rm9yTm9k
ZShub2RlLCBsYWJlbElnbm9yaW5nV2F0Y2hwb2ludHMoKSk7CiAgICAgfQogICAgIAogICAgIHZv
aWQgc2V0RW5kT2ZNYWluUGF0aCgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0xvbmdMaXZlZFN0YXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0xvbmdMaXZlZFN0YXRlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHTG9uZ0xpdmVkU3RhdGUuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDQ5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdMb25nTGl2ZWRTdGF0ZS5oIgorCisjaWYg
RU5BQkxFKERGR19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworTG9u
Z0xpdmVkU3RhdGU6OkxvbmdMaXZlZFN0YXRlKCkKK3sKK30KKworTG9uZ0xpdmVkU3RhdGU6On5M
b25nTGl2ZWRTdGF0ZSgpCit7Cit9CisKK3ZvaWQgTG9uZ0xpdmVkU3RhdGU6OnNocmlua1RvRml0
KCkKK3sKKyAgICBtX2FsbG9jYXRvci5yZXNldCgpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdMb25nTGl2ZWRTdGF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHTG9uZ0xpdmVkU3RhdGUuaAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTG9uZ0xpdmVkU3RhdGUuaAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSw1NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaWZuZGVmIERGR0xvbmdMaXZlZFN0YXRlX2gKKyNkZWZpbmUgREZHTG9uZ0xpdmVk
U3RhdGVfaAorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNpZiBFTkFCTEUoREZHX0pJ
VCkKKworI2luY2x1ZGUgIkRGR05vZGVBbGxvY2F0b3IuaCIKKyNpbmNsdWRlIDx3dGYvRmFzdEFs
bG9jQmFzZS5oPgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorCituYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIERGRyB7CisKK2NsYXNzIExvbmdMaXZlZFN0YXRlIHsKKyAgICBXVEZfTUFL
RV9GQVNUX0FMTE9DQVRFRDsgV1RGX01BS0VfTk9OQ09QWUFCTEUoTG9uZ0xpdmVkU3RhdGUpOwor
cHVibGljOgorICAgIExvbmdMaXZlZFN0YXRlKCk7CisgICAgfkxvbmdMaXZlZFN0YXRlKCk7Cisg
ICAgCisgICAgdm9pZCBzaHJpbmtUb0ZpdCgpOworICAgIAorICAgIE5vZGVBbGxvY2F0b3IgbV9h
bGxvY2F0b3I7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBF
TkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR0xvbmdMaXZlZFN0YXRlX2gKKwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1
NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZHTm9kZS5oIgorCisjaWYgRU5BQkxFKERGR19K
SVQpCisKKyNpbmNsdWRlICJERkdOb2RlQWxsb2NhdG9yLmgiCisKK25hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgREZHIHsKKwordW5zaWduZWQgTm9kZTo6aW5kZXgoKSBjb25zdAoreworICAgIHJl
dHVybiBOb2RlQWxsb2NhdG9yOjphbGxvY2F0b3JPZih0aGlzKS0+aW5kZXhPZih0aGlzKTsKK30K
KworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCituYW1lc3BhY2UgV1RGIHsKKwordm9pZCBw
cmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIE5vZGUqIG5vZGUpCit7CisgICAgaWYgKCFu
b2RlKQorICAgICAgICBvdXQucHJpbnQoIi0iKTsKKyAgICBlbHNlCisgICAgICAgIG91dC5wcmlu
dCgiQCIsIG5vZGUtPmluZGV4KCkpOworICAgIG91dC5wcmludChBYmJyZXZpYXRlZFNwZWN1bGF0
aW9uRHVtcChub2RlLT5wcmVkaWN0aW9uKCkpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisK
KyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdOb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdOb2RlLmgJKHJldmlzaW9uIDE0MDYxNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMSwgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTEsIDIwMTIsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02OCw3ICs2OCw3IEBAIHN0cnVj
dCBOZXdBcnJheUJ1ZmZlckRhdGEgewogCiAvLyBUaGlzIHR5cGUgdXNlZCBpbiBwYXNzaW5nIGFu
IGltbWVkaWF0ZSBhcmd1bWVudCB0byBOb2RlIGNvbnN0cnVjdG9yOwogLy8gZGlzdGluZ3Vpc2hl
cyBhbiBpbW1lZGlhdGUgdmFsdWUgKHR5cGljYWxseSBhbiBpbmRleCBpbnRvIGEgQ29kZUJsb2Nr
IGRhdGEgc3RydWN0dXJlIC0gCi0vLyBhIGNvbnN0YW50IGluZGV4LCBhcmd1bWVudCwgb3IgaWRl
bnRpZmllcikgZnJvbSBhIE5vZGVJbmRleC4KKy8vIGEgY29uc3RhbnQgaW5kZXgsIGFyZ3VtZW50
LCBvciBpZGVudGlmaWVyKSBmcm9tIGEgTm9kZSouCiBzdHJ1Y3QgT3BJbmZvIHsKICAgICBleHBs
aWNpdCBPcEluZm8oaW50MzJfdCB2YWx1ZSkgOiBtX3ZhbHVlKHN0YXRpY19jYXN0PHVpbnRwdHJf
dD4odmFsdWUpKSB7IH0KICAgICBleHBsaWNpdCBPcEluZm8odWludDMyX3QgdmFsdWUpIDogbV92
YWx1ZShzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KHZhbHVlKSkgeyB9CkBAIC05OSw3ICs5OSw3IEBA
IHN0cnVjdCBOb2RlIHsKICAgICB9CiAgICAgCiAgICAgLy8gQ29uc3RydWN0IGEgbm9kZSB3aXRo
IHVwIHRvIDMgY2hpbGRyZW4sIG5vIGltbWVkaWF0ZSB2YWx1ZS4KLSAgICBOb2RlKE5vZGVUeXBl
IG9wLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIE5vZGVJbmRleCBjaGlsZDEgPSBOb05vZGUsIE5v
ZGVJbmRleCBjaGlsZDIgPSBOb05vZGUsIE5vZGVJbmRleCBjaGlsZDMgPSBOb05vZGUpCisgICAg
Tm9kZShOb2RlVHlwZSBvcCwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBOb2RlKiBjaGlsZDEgPSAw
LCBOb2RlKiBjaGlsZDIgPSAwLCBOb2RlKiBjaGlsZDMgPSAwKQogICAgICAgICA6IGNvZGVPcmln
aW4oY29kZU9yaWdpbikKICAgICAgICAgLCBjaGlsZHJlbihBZGphY2VuY3lMaXN0OjpGaXhlZCwg
Y2hpbGQxLCBjaGlsZDIsIGNoaWxkMykKICAgICAgICAgLCBtX3ZpcnR1YWxSZWdpc3RlcihJbnZh
bGlkVmlydHVhbFJlZ2lzdGVyKQpAQCAtMTExLDcgKzExMSw3IEBAIHN0cnVjdCBOb2RlIHsKICAg
ICB9CiAKICAgICAvLyBDb25zdHJ1Y3QgYSBub2RlIHdpdGggdXAgdG8gMyBjaGlsZHJlbiBhbmQg
YW4gaW1tZWRpYXRlIHZhbHVlLgotICAgIE5vZGUoTm9kZVR5cGUgb3AsIENvZGVPcmlnaW4gY29k
ZU9yaWdpbiwgT3BJbmZvIGltbSwgTm9kZUluZGV4IGNoaWxkMSA9IE5vTm9kZSwgTm9kZUluZGV4
IGNoaWxkMiA9IE5vTm9kZSwgTm9kZUluZGV4IGNoaWxkMyA9IE5vTm9kZSkKKyAgICBOb2RlKE5v
ZGVUeXBlIG9wLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIE9wSW5mbyBpbW0sIE5vZGUqIGNoaWxk
MSA9IDAsIE5vZGUqIGNoaWxkMiA9IDAsIE5vZGUqIGNoaWxkMyA9IDApCiAgICAgICAgIDogY29k
ZU9yaWdpbihjb2RlT3JpZ2luKQogICAgICAgICAsIGNoaWxkcmVuKEFkamFjZW5jeUxpc3Q6OkZp
eGVkLCBjaGlsZDEsIGNoaWxkMiwgY2hpbGQzKQogICAgICAgICAsIG1fdmlydHVhbFJlZ2lzdGVy
KEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIpCkBAIC0xMjQsNyArMTI0LDcgQEAgc3RydWN0IE5vZGUg
ewogICAgIH0KIAogICAgIC8vIENvbnN0cnVjdCBhIG5vZGUgd2l0aCB1cCB0byAzIGNoaWxkcmVu
IGFuZCB0d28gaW1tZWRpYXRlIHZhbHVlcy4KLSAgICBOb2RlKE5vZGVUeXBlIG9wLCBDb2RlT3Jp
Z2luIGNvZGVPcmlnaW4sIE9wSW5mbyBpbW0xLCBPcEluZm8gaW1tMiwgTm9kZUluZGV4IGNoaWxk
MSA9IE5vTm9kZSwgTm9kZUluZGV4IGNoaWxkMiA9IE5vTm9kZSwgTm9kZUluZGV4IGNoaWxkMyA9
IE5vTm9kZSkKKyAgICBOb2RlKE5vZGVUeXBlIG9wLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIE9w
SW5mbyBpbW0xLCBPcEluZm8gaW1tMiwgTm9kZSogY2hpbGQxID0gMCwgTm9kZSogY2hpbGQyID0g
MCwgTm9kZSogY2hpbGQzID0gMCkKICAgICAgICAgOiBjb2RlT3JpZ2luKGNvZGVPcmlnaW4pCiAg
ICAgICAgICwgY2hpbGRyZW4oQWRqYWNlbmN5TGlzdDo6Rml4ZWQsIGNoaWxkMSwgY2hpbGQyLCBj
aGlsZDMpCiAgICAgICAgICwgbV92aXJ0dWFsUmVnaXN0ZXIoSW52YWxpZFZpcnR1YWxSZWdpc3Rl
cikKQEAgLTE1NCw2ICsxNTQsOSBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgTm9kZVR5cGUgb3AoKSBj
b25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxOb2RlVHlwZT4obV9vcCk7IH0KICAgICBOb2RlRmxh
Z3MgZmxhZ3MoKSBjb25zdCB7IHJldHVybiBtX2ZsYWdzOyB9CiAgICAgCisgICAgLy8gVGhpcyBp
cyBub3QgYSBmYXN0IG1ldGhvZC4KKyAgICB1bnNpZ25lZCBpbmRleCgpIGNvbnN0OworICAgIAog
ICAgIHZvaWQgc2V0T3AoTm9kZVR5cGUgb3ApCiAgICAgewogICAgICAgICBtX29wID0gb3A7CkBA
IC0yODEsNyArMjg0LDcgQEAgc3RydWN0IE5vZGUgewogICAgICAgICBjb252ZXJ0VG9TdHJ1Y3R1
cmVUcmFuc2l0aW9uV2F0Y2hwb2ludChzdHJ1Y3R1cmVTZXQoKS5zaW5nbGV0b25TdHJ1Y3R1cmUo
KSk7CiAgICAgfQogICAgIAotICAgIHZvaWQgY29udmVydFRvR2V0QnlPZmZzZXQodW5zaWduZWQg
c3RvcmFnZUFjY2Vzc0RhdGFJbmRleCwgTm9kZUluZGV4IHN0b3JhZ2UpCisgICAgdm9pZCBjb252
ZXJ0VG9HZXRCeU9mZnNldCh1bnNpZ25lZCBzdG9yYWdlQWNjZXNzRGF0YUluZGV4LCBOb2RlKiBz
dG9yYWdlKQogICAgIHsKICAgICAgICAgQVNTRVJUKG1fb3AgPT0gR2V0QnlJZCB8fCBtX29wID09
IEdldEJ5SWRGbHVzaCk7CiAgICAgICAgIG1fb3BJbmZvID0gc3RvcmFnZUFjY2Vzc0RhdGFJbmRl
eDsKQEAgLTI5MCw3ICsyOTMsNyBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAgIG1fZmxhZ3MgJj0g
fk5vZGVDbG9iYmVyc1dvcmxkOwogICAgIH0KICAgICAKLSAgICB2b2lkIGNvbnZlcnRUb1B1dEJ5
T2Zmc2V0KHVuc2lnbmVkIHN0b3JhZ2VBY2Nlc3NEYXRhSW5kZXgsIE5vZGVJbmRleCBzdG9yYWdl
KQorICAgIHZvaWQgY29udmVydFRvUHV0QnlPZmZzZXQodW5zaWduZWQgc3RvcmFnZUFjY2Vzc0Rh
dGFJbmRleCwgTm9kZSogc3RvcmFnZSkKICAgICB7CiAgICAgICAgIEFTU0VSVChtX29wID09IFB1
dEJ5SWQgfHwgbV9vcCA9PSBQdXRCeUlkRGlyZWN0KTsKICAgICAgICAgbV9vcEluZm8gPSBzdG9y
YWdlQWNjZXNzRGF0YUluZGV4OwpAQCAtOTIwLDkgKzkyMywxMCBAQCBzdHJ1Y3QgTm9kZSB7CiAg
ICAgICAgIHJldHVybiBtX3JlZkNvdW50OwogICAgIH0KIAotICAgIHZvaWQgcmVmKCkKKyAgICBO
b2RlKiByZWYoKQogICAgIHsKICAgICAgICAgbV9yZWZDb3VudCsrOworICAgICAgICByZXR1cm4g
dGhpczsKICAgICB9CiAKICAgICB1bnNpZ25lZCBwb3N0Zml4UmVmKCkKQEAgLTExMzUsNDQgKzEx
MzksNDQgQEAgc3RydWN0IE5vZGUgewogICAgICAgICByZXR1cm4gaXNDZWxsU3BlY3VsYXRpb24o
cHJlZGljdGlvbigpKTsKICAgICB9CiAgICAgCi0gICAgc3RhdGljIGJvb2wgc2hvdWxkU3BlY3Vs
YXRlSW50ZWdlcihOb2RlJiBvcDEsIE5vZGUmIG9wMikKKyAgICBzdGF0aWMgYm9vbCBzaG91bGRT
cGVjdWxhdGVJbnRlZ2VyKE5vZGUqIG9wMSwgTm9kZSogb3AyKQogICAgIHsKLSAgICAgICAgcmV0
dXJuIG9wMS5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkgJiYgb3AyLnNob3VsZFNwZWN1bGF0ZUlu
dGVnZXIoKTsKKyAgICAgICAgcmV0dXJuIG9wMS0+c2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpICYm
IG9wMi0+c2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpOwogICAgIH0KICAgICAKLSAgICBzdGF0aWMg
Ym9vbCBzaG91bGRTcGVjdWxhdGVJbnRlZ2VyRm9yQXJpdGhtZXRpYyhOb2RlJiBvcDEsIE5vZGUm
IG9wMikKKyAgICBzdGF0aWMgYm9vbCBzaG91bGRTcGVjdWxhdGVJbnRlZ2VyRm9yQXJpdGhtZXRp
YyhOb2RlKiBvcDEsIE5vZGUqIG9wMikKICAgICB7Ci0gICAgICAgIHJldHVybiBvcDEuc2hvdWxk
U3BlY3VsYXRlSW50ZWdlckZvckFyaXRobWV0aWMoKSAmJiBvcDIuc2hvdWxkU3BlY3VsYXRlSW50
ZWdlckZvckFyaXRobWV0aWMoKTsKKyAgICAgICAgcmV0dXJuIG9wMS0+c2hvdWxkU3BlY3VsYXRl
SW50ZWdlckZvckFyaXRobWV0aWMoKSAmJiBvcDItPnNob3VsZFNwZWN1bGF0ZUludGVnZXJGb3JB
cml0aG1ldGljKCk7CiAgICAgfQogICAgIAotICAgIHN0YXRpYyBib29sIHNob3VsZFNwZWN1bGF0
ZUludGVnZXJFeHBlY3RpbmdEZWZpbmVkKE5vZGUmIG9wMSwgTm9kZSYgb3AyKQorICAgIHN0YXRp
YyBib29sIHNob3VsZFNwZWN1bGF0ZUludGVnZXJFeHBlY3RpbmdEZWZpbmVkKE5vZGUqIG9wMSwg
Tm9kZSogb3AyKQogICAgIHsKLSAgICAgICAgcmV0dXJuIG9wMS5zaG91bGRTcGVjdWxhdGVJbnRl
Z2VyRXhwZWN0aW5nRGVmaW5lZCgpICYmIG9wMi5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyRXhwZWN0
aW5nRGVmaW5lZCgpOworICAgICAgICByZXR1cm4gb3AxLT5zaG91bGRTcGVjdWxhdGVJbnRlZ2Vy
RXhwZWN0aW5nRGVmaW5lZCgpICYmIG9wMi0+c2hvdWxkU3BlY3VsYXRlSW50ZWdlckV4cGVjdGlu
Z0RlZmluZWQoKTsKICAgICB9CiAgICAgCi0gICAgc3RhdGljIGJvb2wgc2hvdWxkU3BlY3VsYXRl
RG91YmxlRm9yQXJpdGhtZXRpYyhOb2RlJiBvcDEsIE5vZGUmIG9wMikKKyAgICBzdGF0aWMgYm9v
bCBzaG91bGRTcGVjdWxhdGVEb3VibGVGb3JBcml0aG1ldGljKE5vZGUqIG9wMSwgTm9kZSogb3Ay
KQogICAgIHsKLSAgICAgICAgcmV0dXJuIG9wMS5zaG91bGRTcGVjdWxhdGVEb3VibGVGb3JBcml0
aG1ldGljKCkgJiYgb3AyLnNob3VsZFNwZWN1bGF0ZURvdWJsZUZvckFyaXRobWV0aWMoKTsKKyAg
ICAgICAgcmV0dXJuIG9wMS0+c2hvdWxkU3BlY3VsYXRlRG91YmxlRm9yQXJpdGhtZXRpYygpICYm
IG9wMi0+c2hvdWxkU3BlY3VsYXRlRG91YmxlRm9yQXJpdGhtZXRpYygpOwogICAgIH0KICAgICAK
LSAgICBzdGF0aWMgYm9vbCBzaG91bGRTcGVjdWxhdGVOdW1iZXIoTm9kZSYgb3AxLCBOb2RlJiBv
cDIpCisgICAgc3RhdGljIGJvb2wgc2hvdWxkU3BlY3VsYXRlTnVtYmVyKE5vZGUqIG9wMSwgTm9k
ZSogb3AyKQogICAgIHsKLSAgICAgICAgcmV0dXJuIG9wMS5zaG91bGRTcGVjdWxhdGVOdW1iZXIo
KSAmJiBvcDIuc2hvdWxkU3BlY3VsYXRlTnVtYmVyKCk7CisgICAgICAgIHJldHVybiBvcDEtPnNo
b3VsZFNwZWN1bGF0ZU51bWJlcigpICYmIG9wMi0+c2hvdWxkU3BlY3VsYXRlTnVtYmVyKCk7CiAg
ICAgfQogICAgIAotICAgIHN0YXRpYyBib29sIHNob3VsZFNwZWN1bGF0ZU51bWJlckV4cGVjdGlu
Z0RlZmluZWQoTm9kZSYgb3AxLCBOb2RlJiBvcDIpCisgICAgc3RhdGljIGJvb2wgc2hvdWxkU3Bl
Y3VsYXRlTnVtYmVyRXhwZWN0aW5nRGVmaW5lZChOb2RlKiBvcDEsIE5vZGUqIG9wMikKICAgICB7
Ci0gICAgICAgIHJldHVybiBvcDEuc2hvdWxkU3BlY3VsYXRlTnVtYmVyRXhwZWN0aW5nRGVmaW5l
ZCgpICYmIG9wMi5zaG91bGRTcGVjdWxhdGVOdW1iZXJFeHBlY3RpbmdEZWZpbmVkKCk7CisgICAg
ICAgIHJldHVybiBvcDEtPnNob3VsZFNwZWN1bGF0ZU51bWJlckV4cGVjdGluZ0RlZmluZWQoKSAm
JiBvcDItPnNob3VsZFNwZWN1bGF0ZU51bWJlckV4cGVjdGluZ0RlZmluZWQoKTsKICAgICB9CiAg
ICAgCi0gICAgc3RhdGljIGJvb2wgc2hvdWxkU3BlY3VsYXRlRmluYWxPYmplY3QoTm9kZSYgb3Ax
LCBOb2RlJiBvcDIpCisgICAgc3RhdGljIGJvb2wgc2hvdWxkU3BlY3VsYXRlRmluYWxPYmplY3Qo
Tm9kZSogb3AxLCBOb2RlKiBvcDIpCiAgICAgewotICAgICAgICByZXR1cm4gb3AxLnNob3VsZFNw
ZWN1bGF0ZUZpbmFsT2JqZWN0KCkgJiYgb3AyLnNob3VsZFNwZWN1bGF0ZUZpbmFsT2JqZWN0KCk7
CisgICAgICAgIHJldHVybiBvcDEtPnNob3VsZFNwZWN1bGF0ZUZpbmFsT2JqZWN0KCkgJiYgb3Ay
LT5zaG91bGRTcGVjdWxhdGVGaW5hbE9iamVjdCgpOwogICAgIH0KIAotICAgIHN0YXRpYyBib29s
IHNob3VsZFNwZWN1bGF0ZUFycmF5KE5vZGUmIG9wMSwgTm9kZSYgb3AyKQorICAgIHN0YXRpYyBi
b29sIHNob3VsZFNwZWN1bGF0ZUFycmF5KE5vZGUqIG9wMSwgTm9kZSogb3AyKQogICAgIHsKLSAg
ICAgICAgcmV0dXJuIG9wMS5zaG91bGRTcGVjdWxhdGVBcnJheSgpICYmIG9wMi5zaG91bGRTcGVj
dWxhdGVBcnJheSgpOworICAgICAgICByZXR1cm4gb3AxLT5zaG91bGRTcGVjdWxhdGVBcnJheSgp
ICYmIG9wMi0+c2hvdWxkU3BlY3VsYXRlQXJyYXkoKTsKICAgICB9CiAgICAgCiAgICAgYm9vbCBj
YW5TcGVjdWxhdGVJbnRlZ2VyKCkKQEAgLTExODQsMTUgKzExODgsMTcgQEAgc3RydWN0IE5vZGUg
ewogICAgIHsKICAgICAgICAgaWYgKCFjaGlsZDEoKSkKICAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgb3V0LnByaW50ZigiQCV1IiwgY2hpbGQxKCkuaW5kZXgoKSk7CisgICAgICAgIG91dC5w
cmludGYoIkAldSIsIGNoaWxkMSgpLT5pbmRleCgpKTsKICAgICAgICAgaWYgKCFjaGlsZDIoKSkK
ICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgb3V0LnByaW50ZigiLCBAJXUiLCBjaGlsZDIo
KS5pbmRleCgpKTsKKyAgICAgICAgb3V0LnByaW50ZigiLCBAJXUiLCBjaGlsZDIoKS0+aW5kZXgo
KSk7CiAgICAgICAgIGlmICghY2hpbGQzKCkpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IG91dC5wcmludGYoIiwgQCV1IiwgY2hpbGQzKCkuaW5kZXgoKSk7CisgICAgICAgIG91dC5wcmlu
dGYoIiwgQCV1IiwgY2hpbGQzKCktPmluZGV4KCkpOwogICAgIH0KICAgICAKKyAgICAvLyBOQi4g
VGhpcyBjbGFzcyBtdXN0IGhhdmUgYSB0cml2aWFsIGRlc3RydWN0b3IuCisgICAgCiAgICAgLy8g
VXNlZCB0byBsb29rIHVwIGV4Y2VwdGlvbiBoYW5kbGluZyBpbmZvcm1hdGlvbiAoY3VycmVudGx5
IGltcGxlbWVudGVkIGFzIGEgYnl0ZWNvZGUgaW5kZXgpLgogICAgIENvZGVPcmlnaW4gY29kZU9y
aWdpbjsKICAgICAvLyBSZWZlcmVuY2VzIHRvIHVwIHRvIDMgY2hpbGRyZW4sIG9yIGxpbmtzIHRv
IGEgdmFyaWFibGUgbGVuZ3RoIHNldCBvZiBjaGlsZHJlbi4KQEAgLTEyMTUsMTAgKzEyMjEsMTYg
QEAgcHJpdmF0ZToKIHB1YmxpYzoKICAgICAvLyBGaWVsZHMgdXNlZCBieSB2YXJpb3VzIGFuYWx5
c2VzLgogICAgIEFic3RyYWN0VmFsdWUgdmFsdWU7Ci0gICAgTm9kZUluZGV4IHJlcGxhY2VtZW50
OworICAgIE5vZGUqIHJlcGxhY2VtZW50OwogfTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRG
RwogCituYW1lc3BhY2UgV1RGIHsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiwg
Tm9kZSopOworCit9IC8vIG5hbWVzcGFjZSBXVEYKKwogI2VuZGlmCiAjZW5kaWYKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZUFsbG9jYXRvci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZUFsbG9jYXRvci5oCShyZXZpc2lvbiAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlQWxsb2NhdG9yLmgJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsNTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdOb2RlQWxsb2NhdG9yX2gKKyNkZWZpbmUgREZHTm9k
ZUFsbG9jYXRvcl9oCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2lmIEVOQUJMRShE
RkdfSklUKQorCisjaW5jbHVkZSAiREZHQWxsb2NhdG9yLmgiCisjaW5jbHVkZSAiREZHTm9kZS5o
IgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK3R5cGVkZWYgQWxsb2NhdG9y
PE5vZGUsIDQwOTU+IE5vZGVBbGxvY2F0b3I7CisKK2lubGluZSB2b2lkKiBvcGVyYXRvciBuZXcg
KHNpemVfdCBzaXplLCBOb2RlQWxsb2NhdG9yJiBhbGxvY2F0b3IpCit7CisgICAgQVNTRVJUKHNp
emUgPT0gc2l6ZW9mKE5vZGUpKTsKKyAgICByZXR1cm4gYWxsb2NhdG9yLmFsbG9jYXRlKCk7Cit9
CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklU
KQorCisjZW5kaWYgLy8gREZHTm9kZUFsbG9jYXRvcl9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhh
c2UuY3BwCShyZXZpc2lvbiAxNDA2MTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEyLCAyMDEzIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtODUsNzUgKzg1LDczIEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgYm9vbCBzZXRQcmVkaWN0
aW9uKFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24pCiAgICAgewotICAgICAgICBBU1NFUlQobV9n
cmFwaFttX2NvbXBpbGVJbmRleF0uaGFzUmVzdWx0KCkpOworICAgICAgICBBU1NFUlQobV9jdXJy
ZW50Tm9kZS0+aGFzUmVzdWx0KCkpOwogICAgICAgICAKICAgICAgICAgLy8gc2V0UHJlZGljdGlv
bigpIGlzIHVzZWQgd2hlbiB3ZSBrbm93IHRoYXQgdGhlcmUgaXMgbm8gd2F5IHRoYXQgd2UgY2Fu
IGNoYW5nZQogICAgICAgICAvLyBvdXIgbWluZHMgYWJvdXQgd2hhdCB0aGUgcHJlZGljdGlvbiBp
cyBnb2luZyB0byBiZS4gVGhlcmUgaXMgbm8gc2VtYW50aWMKICAgICAgICAgLy8gZGlmZmVyZW5j
ZSBiZXR3ZWVuIHNldFByZWRpY3Rpb24oKSBhbmQgbWVyZ2VTcGVjdWxhdGlvbigpIG90aGVyIHRo
YW4gdGhlCiAgICAgICAgIC8vIGluY3JlYXNlZCBjaGVja2luZyB0byB2YWxpZGF0ZSB0aGlzIHBy
b3BlcnR5LgotICAgICAgICBBU1NFUlQobV9ncmFwaFttX2NvbXBpbGVJbmRleF0ucHJlZGljdGlv
bigpID09IFNwZWNOb25lIHx8IG1fZ3JhcGhbbV9jb21waWxlSW5kZXhdLnByZWRpY3Rpb24oKSA9
PSBwcmVkaWN0aW9uKTsKKyAgICAgICAgQVNTRVJUKG1fY3VycmVudE5vZGUtPnByZWRpY3Rpb24o
KSA9PSBTcGVjTm9uZSB8fCBtX2N1cnJlbnROb2RlLT5wcmVkaWN0aW9uKCkgPT0gcHJlZGljdGlv
bik7CiAgICAgICAgIAotICAgICAgICByZXR1cm4gbV9ncmFwaFttX2NvbXBpbGVJbmRleF0ucHJl
ZGljdChwcmVkaWN0aW9uKTsKKyAgICAgICAgcmV0dXJuIG1fY3VycmVudE5vZGUtPnByZWRpY3Qo
cHJlZGljdGlvbik7CiAgICAgfQogICAgIAogICAgIGJvb2wgbWVyZ2VQcmVkaWN0aW9uKFNwZWN1
bGF0ZWRUeXBlIHByZWRpY3Rpb24pCiAgICAgewotICAgICAgICBBU1NFUlQobV9ncmFwaFttX2Nv
bXBpbGVJbmRleF0uaGFzUmVzdWx0KCkpOworICAgICAgICBBU1NFUlQobV9jdXJyZW50Tm9kZS0+
aGFzUmVzdWx0KCkpOwogICAgICAgICAKLSAgICAgICAgcmV0dXJuIG1fZ3JhcGhbbV9jb21waWxl
SW5kZXhdLnByZWRpY3QocHJlZGljdGlvbik7CisgICAgICAgIHJldHVybiBtX2N1cnJlbnROb2Rl
LT5wcmVkaWN0KHByZWRpY3Rpb24pOwogICAgIH0KICAgICAKLSAgICBib29sIGlzTm90TmVnWmVy
byhOb2RlSW5kZXggbm9kZUluZGV4KQorICAgIGJvb2wgaXNOb3ROZWdaZXJvKE5vZGUqIG5vZGUp
CiAgICAgewotICAgICAgICBpZiAoIW1fZ3JhcGguaXNOdW1iZXJDb25zdGFudChub2RlSW5kZXgp
KQorICAgICAgICBpZiAoIW1fZ3JhcGguaXNOdW1iZXJDb25zdGFudChub2RlKSkKICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgZG91YmxlIHZhbHVlID0gbV9ncmFwaC52YWx1ZU9m
TnVtYmVyQ29uc3RhbnQobm9kZUluZGV4KTsKKyAgICAgICAgZG91YmxlIHZhbHVlID0gbV9ncmFw
aC52YWx1ZU9mTnVtYmVyQ29uc3RhbnQobm9kZSk7CiAgICAgICAgIHJldHVybiAhdmFsdWUgJiYg
MS4wIC8gdmFsdWUgPCAwLjA7CiAgICAgfQogICAgIAotICAgIGJvb2wgaXNOb3RaZXJvKE5vZGVJ
bmRleCBub2RlSW5kZXgpCisgICAgYm9vbCBpc05vdFplcm8oTm9kZSogbm9kZSkKICAgICB7Ci0g
ICAgICAgIGlmICghbV9ncmFwaC5pc051bWJlckNvbnN0YW50KG5vZGVJbmRleCkpCisgICAgICAg
IGlmICghbV9ncmFwaC5pc051bWJlckNvbnN0YW50KG5vZGUpKQogICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgICByZXR1cm4gISFtX2dyYXBoLnZhbHVlT2ZOdW1iZXJDb25zdGFudChu
b2RlSW5kZXgpOworICAgICAgICByZXR1cm4gISFtX2dyYXBoLnZhbHVlT2ZOdW1iZXJDb25zdGFu
dChub2RlKTsKICAgICB9CiAgICAgCi0gICAgYm9vbCBpc1dpdGhpblBvd2VyT2ZUd29Gb3JDb25z
dGFudChOb2RlJiBub2RlLCBpbnQgcG93ZXIpCisgICAgYm9vbCBpc1dpdGhpblBvd2VyT2ZUd29G
b3JDb25zdGFudChOb2RlKiBub2RlLCBpbnQgcG93ZXIpCiAgICAgewotICAgICAgICBKU1ZhbHVl
IGltbWVkaWF0ZVZhbHVlID0gbm9kZS52YWx1ZU9mSlNDb25zdGFudChjb2RlQmxvY2soKSk7Cisg
ICAgICAgIEpTVmFsdWUgaW1tZWRpYXRlVmFsdWUgPSBub2RlLT52YWx1ZU9mSlNDb25zdGFudChj
b2RlQmxvY2soKSk7CiAgICAgICAgIGlmICghaW1tZWRpYXRlVmFsdWUuaXNJbnQzMigpKQogICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBpbnQzMl90IGludEltbWVkaWF0ZSA9IGlt
bWVkaWF0ZVZhbHVlLmFzSW50MzIoKTsKICAgICAgICAgcmV0dXJuIGludEltbWVkaWF0ZSA+IC0o
MSA8PCBwb3dlcikgJiYgaW50SW1tZWRpYXRlIDwgKDEgPDwgcG93ZXIpOwogICAgIH0KICAgICAK
LSAgICBib29sIGlzV2l0aGluUG93ZXJPZlR3b05vblJlY3Vyc2l2ZShOb2RlSW5kZXggbm9kZUlu
ZGV4LCBpbnQgcG93ZXIpCisgICAgYm9vbCBpc1dpdGhpblBvd2VyT2ZUd29Ob25SZWN1cnNpdmUo
Tm9kZSogbm9kZSwgaW50IHBvd2VyKQogICAgIHsKLSAgICAgICAgTm9kZSYgbm9kZSA9IG1fZ3Jh
cGhbbm9kZUluZGV4XTsKLSAgICAgICAgaWYgKG5vZGUub3AoKSAhPSBKU0NvbnN0YW50KQorICAg
ICAgICBpZiAobm9kZS0+b3AoKSAhPSBKU0NvbnN0YW50KQogICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgICAgICByZXR1cm4gaXNXaXRoaW5Qb3dlck9mVHdvRm9yQ29uc3RhbnQobm9kZSwg
cG93ZXIpOwogICAgIH0KICAgICAKLSAgICBib29sIGlzV2l0aGluUG93ZXJPZlR3byhOb2RlSW5k
ZXggbm9kZUluZGV4LCBpbnQgcG93ZXIpCisgICAgYm9vbCBpc1dpdGhpblBvd2VyT2ZUd28oTm9k
ZSogbm9kZSwgaW50IHBvd2VyKQogICAgIHsKLSAgICAgICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhb
bm9kZUluZGV4XTsKLSAgICAgICAgc3dpdGNoIChub2RlLm9wKCkpIHsKKyAgICAgICAgc3dpdGNo
IChub2RlLT5vcCgpKSB7CiAgICAgICAgIGNhc2UgSlNDb25zdGFudDogewogICAgICAgICAgICAg
cmV0dXJuIGlzV2l0aGluUG93ZXJPZlR3b0ZvckNvbnN0YW50KG5vZGUsIHBvd2VyKTsKICAgICAg
ICAgfQogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgQml0QW5kOiB7Ci0gICAgICAgICAgICBy
ZXR1cm4gaXNXaXRoaW5Qb3dlck9mVHdvTm9uUmVjdXJzaXZlKG5vZGUuY2hpbGQxKCkuaW5kZXgo
KSwgcG93ZXIpCi0gICAgICAgICAgICAgICAgfHwgaXNXaXRoaW5Qb3dlck9mVHdvTm9uUmVjdXJz
aXZlKG5vZGUuY2hpbGQyKCkuaW5kZXgoKSwgcG93ZXIpOworICAgICAgICAgICAgcmV0dXJuIGlz
V2l0aGluUG93ZXJPZlR3b05vblJlY3Vyc2l2ZShub2RlLT5jaGlsZDEoKS5ub2RlKCksIHBvd2Vy
KQorICAgICAgICAgICAgICAgIHx8IGlzV2l0aGluUG93ZXJPZlR3b05vblJlY3Vyc2l2ZShub2Rl
LT5jaGlsZDIoKS5ub2RlKCksIHBvd2VyKTsKICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAg
ICAgIGNhc2UgQml0UlNoaWZ0OgogICAgICAgICBjYXNlIEJpdFVSU2hpZnQ6IHsKLSAgICAgICAg
ICAgIE5vZGUmIHNoaWZ0QW1vdW50ID0gbV9ncmFwaFtub2RlLmNoaWxkMigpXTsKLSAgICAgICAg
ICAgIGlmIChzaGlmdEFtb3VudC5vcCgpICE9IEpTQ29uc3RhbnQpCisgICAgICAgICAgICBOb2Rl
KiBzaGlmdEFtb3VudCA9IG5vZGUtPmNoaWxkMigpLm5vZGUoKTsKKyAgICAgICAgICAgIGlmIChz
aGlmdEFtb3VudC0+b3AoKSAhPSBKU0NvbnN0YW50KQogICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgICAgIEpTVmFsdWUgaW1tZWRpYXRlVmFsdWUgPSBzaGlmdEFtb3VudC52
YWx1ZU9mSlNDb25zdGFudChjb2RlQmxvY2soKSk7CisgICAgICAgICAgICBKU1ZhbHVlIGltbWVk
aWF0ZVZhbHVlID0gc2hpZnRBbW91bnQtPnZhbHVlT2ZKU0NvbnN0YW50KGNvZGVCbG9jaygpKTsK
ICAgICAgICAgICAgIGlmICghaW1tZWRpYXRlVmFsdWUuaXNJbnQzMigpKQogICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgIHJldHVybiBpbW1lZGlhdGVWYWx1ZSA+IDMy
IC0gcG93ZXI7CkBAIC0xNzgsMTYgKzE3NiwxNiBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4g
c3BlY3VsYXRlZERvdWJsZVR5cGVGb3JQcmVkaWN0aW9uKG1lcmdlU3BlY3VsYXRpb25zKGxlZnQs
IHJpZ2h0KSk7CiAgICAgfQogCi0gICAgdm9pZCBwcm9wYWdhdGUoTm9kZSYgbm9kZSkKKyAgICB2
b2lkIHByb3BhZ2F0ZShOb2RlKiBub2RlKQogICAgIHsKLSAgICAgICAgaWYgKCFub2RlLnNob3Vs
ZEdlbmVyYXRlKCkpCisgICAgICAgIGlmICghbm9kZS0+c2hvdWxkR2VuZXJhdGUoKSkKICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgCi0gICAgICAgIE5vZGVUeXBlIG9wID0gbm9kZS5vcCgp
OwotICAgICAgICBOb2RlRmxhZ3MgZmxhZ3MgPSBub2RlLmZsYWdzKCkgJiBOb2RlQmFja1Byb3BN
YXNrOworICAgICAgICBOb2RlVHlwZSBvcCA9IG5vZGUtPm9wKCk7CisgICAgICAgIE5vZGVGbGFn
cyBmbGFncyA9IG5vZGUtPmZsYWdzKCkgJiBOb2RlQmFja1Byb3BNYXNrOwogCiAjaWYgREZHX0VO
QUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQotICAgICAgICBkYXRhTG9nRigiICAgJXMg
QCV1OiAlcyAiLCBHcmFwaDo6b3BOYW1lKG9wKSwgbV9jb21waWxlSW5kZXgsIG5vZGVGbGFnc0Fz
U3RyaW5nKGZsYWdzKSk7CisgICAgICAgIGRhdGFMb2coIiAgICIsIEdyYXBoOjpvcE5hbWUob3Ap
LCAiICIsIG1fY3VycmVudE5vZGUsICI6ICIsIG5vZGVGbGFnc0FzU3RyaW5nKGZsYWdzKSwgIiAi
KTsKICNlbmRpZgogICAgICAgICAKICAgICAgICAgYm9vbCBjaGFuZ2VkID0gZmFsc2U7CkBAIC0x
OTUsMTIgKzE5MywxMiBAQCBwcml2YXRlOgogICAgICAgICBzd2l0Y2ggKG9wKSB7CiAgICAgICAg
IGNhc2UgSlNDb25zdGFudDoKICAgICAgICAgY2FzZSBXZWFrSlNDb25zdGFudDogewotICAgICAg
ICAgICAgY2hhbmdlZCB8PSBzZXRQcmVkaWN0aW9uKHNwZWN1bGF0aW9uRnJvbVZhbHVlKG1fZ3Jh
cGgudmFsdWVPZkpTQ29uc3RhbnQobV9jb21waWxlSW5kZXgpKSk7CisgICAgICAgICAgICBjaGFu
Z2VkIHw9IHNldFByZWRpY3Rpb24oc3BlY3VsYXRpb25Gcm9tVmFsdWUobV9ncmFwaC52YWx1ZU9m
SlNDb25zdGFudChub2RlKSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAg
ICAgICAgIAogICAgICAgICBjYXNlIEdldExvY2FsOiB7Ci0gICAgICAgICAgICBWYXJpYWJsZUFj
Y2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9IG5vZGUudmFyaWFibGVBY2Nlc3NEYXRhKCk7
CisgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9IG5v
ZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOwogICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgcHJl
ZGljdGlvbiA9IHZhcmlhYmxlQWNjZXNzRGF0YS0+cHJlZGljdGlvbigpOwogICAgICAgICAgICAg
aWYgKHByZWRpY3Rpb24pCiAgICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVByZWRpY3Rp
b24ocHJlZGljdGlvbik7CkBAIC0yMTAsMjEgKzIwOCwyMSBAQCBwcml2YXRlOgogICAgICAgICB9
CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBTZXRMb2NhbDogewotICAgICAgICAgICAgVmFy
aWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBub2RlLnZhcmlhYmxlQWNjZXNz
RGF0YSgpOwotICAgICAgICAgICAgY2hhbmdlZCB8PSB2YXJpYWJsZUFjY2Vzc0RhdGEtPnByZWRp
Y3QobV9ncmFwaFtub2RlLmNoaWxkMSgpXS5wcmVkaWN0aW9uKCkpOworICAgICAgICAgICAgVmFy
aWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBub2RlLT52YXJpYWJsZUFjY2Vz
c0RhdGEoKTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gdmFyaWFibGVBY2Nlc3NEYXRhLT5wcmVk
aWN0KG5vZGUtPmNoaWxkMSgpLT5wcmVkaWN0aW9uKCkpOwogCiAgICAgICAgICAgICAvLyBBc3N1
bWUgY29uc2VydmF0aXZlbHkgdGhhdCBhIFNldExvY2FsIGltcGxpZXMgdGhhdCB0aGUgdmFsdWUg
bWF5IGZsb3cgdGhyb3VnaCBhIGxvb3AsCiAgICAgICAgICAgICAvLyBhbmQgc28gd2Ugd291bGQg
aGF2ZSBvdmVyZmxvdyBsZWFkaW5nIHRvIHRoZSBwcm9ncmFtICJvYnNlcnZpbmciIG51bWJlcnMg
ZXZlbiBpZiBhbGwKICAgICAgICAgICAgIC8vIHVzZXJzIG9mIHRoZSB2YWx1ZSBhcmUgZG9pbmcg
dG9JbnQzMi4gSXQgbWlnaHQgYmUgd29ydGh3aGlsZSB0byByZXZpc2l0IHRoaXMgYXQgc29tZQog
ICAgICAgICAgICAgLy8gcG9pbnQgYW5kIGFjdHVhbGx5IGNoZWNrIGlmIHRoZSBkYXRhIGZsb3cg
aW52b2x2ZXMgbG9vcHMsIGJ1dCByaWdodCBub3cgSSBkb24ndCB0aGluawogICAgICAgICAgICAg
Ly8gd2UgaGF2ZSBldmlkZW5jZSB0aGF0IHRoaXMgd291bGQgYmUgYmVuZWZpY2lhbCBmb3IgYmVu
Y2htYXJrcy4KLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5t
ZXJnZUZsYWdzKHZhcmlhYmxlQWNjZXNzRGF0YS0+ZmxhZ3MoKSB8IE5vZGVVc2VkQXNOdW1iZXIp
OworICAgICAgICAgICAgY2hhbmdlZCB8PSBub2RlLT5jaGlsZDEoKS0+bWVyZ2VGbGFncyh2YXJp
YWJsZUFjY2Vzc0RhdGEtPmZsYWdzKCkgfCBOb2RlVXNlZEFzTnVtYmVyKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBGbHVzaDogewog
ICAgICAgICAgICAgLy8gTWFrZSBzdXJlIHRoYXQgdGhlIGFuYWx5c2lzIGtub3dzIHRoYXQgZmx1
c2hlZCBsb2NhbHMgZXNjYXBlLgotICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJp
YWJsZUFjY2Vzc0RhdGEgPSBub2RlLnZhcmlhYmxlQWNjZXNzRGF0YSgpOworICAgICAgICAgICAg
VmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBub2RlLT52YXJpYWJsZUFj
Y2Vzc0RhdGEoKTsKICAgICAgICAgICAgIGNoYW5nZWQgfD0gdmFyaWFibGVBY2Nlc3NEYXRhLT5t
ZXJnZUZsYWdzKE5vZGVVc2VkQXNWYWx1ZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
fQpAQCAtMjM4LDggKzIzNiw4IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBjaGFuZ2VkIHw9IHNl
dFByZWRpY3Rpb24oU3BlY0ludDMyKTsKICAgICAgICAgICAgIGZsYWdzIHw9IE5vZGVVc2VkQXNJ
bnQgfCBOb2RlVXNlZEFzSW50TG9jYWxseTsKICAgICAgICAgICAgIGZsYWdzICY9IH4oTm9kZVVz
ZWRBc051bWJlciB8IE5vZGVOZWVkc05lZ1plcm8gfCBOb2RlVXNlZEFzT3RoZXIpOwotICAgICAg
ICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLm1lcmdlRmxhZ3MoZmxhZ3Mp
OwotICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQyKCldLm1lcmdlRmxh
Z3MoZmxhZ3MpOworICAgICAgICAgICAgY2hhbmdlZCB8PSBub2RlLT5jaGlsZDEoKS0+bWVyZ2VG
bGFncyhmbGFncyk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG5vZGUtPmNoaWxkMigpLT5tZXJn
ZUZsYWdzKGZsYWdzKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAg
ICAKQEAgLTI0Nyw1MCArMjQ1LDUwIEBAIHByaXZhdGU6CiAgICAgICAgICAgICBjaGFuZ2VkIHw9
IHNldFByZWRpY3Rpb24oU3BlY0ludDMyKTsKICAgICAgICAgICAgIGZsYWdzIHw9IE5vZGVVc2Vk
QXNJbnQgfCBOb2RlVXNlZEFzSW50TG9jYWxseTsKICAgICAgICAgICAgIGZsYWdzICY9IH4oTm9k
ZVVzZWRBc051bWJlciB8IE5vZGVOZWVkc05lZ1plcm8gfCBOb2RlVXNlZEFzT3RoZXIpOwotICAg
ICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLm1lcmdlRmxhZ3MoZmxh
Z3MpOworICAgICAgICAgICAgY2hhbmdlZCB8PSBub2RlLT5jaGlsZDEoKS0+bWVyZ2VGbGFncyhm
bGFncyk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAg
ICAgIGNhc2UgQXJyYXlQb3A6IHsKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0
aW9uKG5vZGUuZ2V0SGVhcFByZWRpY3Rpb24oKSk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG1l
cmdlUHJlZGljdGlvbihub2RlLT5nZXRIZWFwUHJlZGljdGlvbigpKTsKICAgICAgICAgICAgIGNo
YW5nZWQgfD0gbWVyZ2VEZWZhdWx0RmxhZ3Mobm9kZSk7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgfQogCiAgICAgICAgIGNhc2UgQXJyYXlQdXNoOiB7Ci0gICAgICAgICAgICBjaGFuZ2Vk
IHw9IG1lcmdlUHJlZGljdGlvbihub2RlLmdldEhlYXBQcmVkaWN0aW9uKCkpOwotICAgICAgICAg
ICAgY2hhbmdlZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLm1lcmdlRmxhZ3MoTm9kZVVzZWRB
c1ZhbHVlKTsKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaFtub2RlLmNoaWxkMigpXS5t
ZXJnZUZsYWdzKE5vZGVVc2VkQXNWYWx1ZSk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdl
UHJlZGljdGlvbihub2RlLT5nZXRIZWFwUHJlZGljdGlvbigpKTsKKyAgICAgICAgICAgIGNoYW5n
ZWQgfD0gbm9kZS0+Y2hpbGQxKCktPm1lcmdlRmxhZ3MoTm9kZVVzZWRBc1ZhbHVlKTsKKyAgICAg
ICAgICAgIGNoYW5nZWQgfD0gbm9kZS0+Y2hpbGQyKCktPm1lcmdlRmxhZ3MoTm9kZVVzZWRBc1Zh
bHVlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBSZWdF
eHBFeGVjOgogICAgICAgICBjYXNlIFJlZ0V4cFRlc3Q6IHsKLSAgICAgICAgICAgIGNoYW5nZWQg
fD0gbWVyZ2VQcmVkaWN0aW9uKG5vZGUuZ2V0SGVhcFByZWRpY3Rpb24oKSk7CisgICAgICAgICAg
ICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbihub2RlLT5nZXRIZWFwUHJlZGljdGlvbigpKTsK
ICAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VEZWZhdWx0RmxhZ3Mobm9kZSk7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQogCiAgICAgICAgIGNhc2UgU3RyaW5nQ2hhckNvZGVBdDog
ewogICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVByZWRpY3Rpb24oU3BlY0ludDMyKTsKLSAg
ICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5tZXJnZUZsYWdzKE5v
ZGVVc2VkQXNWYWx1ZSk7Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbm9kZS5jaGls
ZDIoKV0ubWVyZ2VGbGFncyhOb2RlVXNlZEFzTnVtYmVyIHwgTm9kZVVzZWRBc090aGVyIHwgTm9k
ZVVzZWRBc0ludCB8IE5vZGVVc2VkQXNJbnRMb2NhbGx5KTsKKyAgICAgICAgICAgIGNoYW5nZWQg
fD0gbm9kZS0+Y2hpbGQxKCktPm1lcmdlRmxhZ3MoTm9kZVVzZWRBc1ZhbHVlKTsKKyAgICAgICAg
ICAgIGNoYW5nZWQgfD0gbm9kZS0+Y2hpbGQyKCktPm1lcmdlRmxhZ3MoTm9kZVVzZWRBc051bWJl
ciB8IE5vZGVVc2VkQXNPdGhlciB8IE5vZGVVc2VkQXNJbnQgfCBOb2RlVXNlZEFzSW50TG9jYWxs
eSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCiAgICAgICAgIGNhc2UgVUludDMy
VG9OdW1iZXI6IHsKLSAgICAgICAgICAgIGlmIChub2RlQ2FuU3BlY3VsYXRlSW50ZWdlcihub2Rl
LmFyaXRoTm9kZUZsYWdzKCkpKQorICAgICAgICAgICAgaWYgKG5vZGVDYW5TcGVjdWxhdGVJbnRl
Z2VyKG5vZGUtPmFyaXRoTm9kZUZsYWdzKCkpKQogICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0g
bWVyZ2VQcmVkaWN0aW9uKFNwZWNJbnQzMik7CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAg
ICAgICAgY2hhbmdlZCB8PSBtZXJnZVByZWRpY3Rpb24oU3BlY051bWJlcik7CiAgICAgICAgICAg
ICAKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5tZXJnZUZs
YWdzKGZsYWdzKTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbm9kZS0+Y2hpbGQxKCktPm1lcmdl
RmxhZ3MoZmxhZ3MpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIAogICAgICAgICBj
YXNlIFZhbHVlQWRkOiB7Ci0gICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSBsZWZ0ID0gbV9ncmFw
aFtub2RlLmNoaWxkMSgpXS5wcmVkaWN0aW9uKCk7Ci0gICAgICAgICAgICBTcGVjdWxhdGVkVHlw
ZSByaWdodCA9IG1fZ3JhcGhbbm9kZS5jaGlsZDIoKV0ucHJlZGljdGlvbigpOworICAgICAgICAg
ICAgU3BlY3VsYXRlZFR5cGUgbGVmdCA9IG5vZGUtPmNoaWxkMSgpLT5wcmVkaWN0aW9uKCk7Cisg
ICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSByaWdodCA9IG5vZGUtPmNoaWxkMigpLT5wcmVkaWN0
aW9uKCk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIEFkZFNwZWN1bGF0aW9uTW9kZSBtb2Rl
ID0gRG9udFNwZWN1bGF0ZUludGVnZXI7CiAgICAgICAgICAgICAKQEAgLTMwNywyMiArMzA1LDIy
IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0
aW9uKFNwZWNTdHJpbmcgfCBTcGVjSW50MzIgfCBTcGVjRG91YmxlKTsKICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKGlzTm90TmVnWmVybyhub2RlLmNoaWxkMSgp
LmluZGV4KCkpIHx8IGlzTm90TmVnWmVybyhub2RlLmNoaWxkMigpLmluZGV4KCkpKQorICAgICAg
ICAgICAgaWYgKGlzTm90TmVnWmVybyhub2RlLT5jaGlsZDEoKS5ub2RlKCkpIHx8IGlzTm90TmVn
WmVybyhub2RlLT5jaGlsZDIoKS5ub2RlKCkpKQogICAgICAgICAgICAgICAgIGZsYWdzICY9IH5O
b2RlTmVlZHNOZWdaZXJvOwotICAgICAgICAgICAgaWYgKG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0u
aGFzTnVtYmVyUmVzdWx0KCkgfHwgbV9ncmFwaFtub2RlLmNoaWxkMigpXS5oYXNOdW1iZXJSZXN1
bHQoKSkKKyAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS0+aGFzTnVtYmVyUmVzdWx0KCkg
fHwgbm9kZS0+Y2hpbGQyKCktPmhhc051bWJlclJlc3VsdCgpKQogICAgICAgICAgICAgICAgIGZs
YWdzICY9IH5Ob2RlVXNlZEFzT3RoZXI7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlmICht
b2RlICE9IFNwZWN1bGF0ZUludGVnZXIpCiAgICAgICAgICAgICAgICAgZmxhZ3MgfD0gTm9kZVVz
ZWRBc051bWJlcjsKICAgICAgICAgICAgIAotICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBo
W25vZGUuY2hpbGQxKCldLm1lcmdlRmxhZ3MoZmxhZ3MpOwotICAgICAgICAgICAgY2hhbmdlZCB8
PSBtX2dyYXBoW25vZGUuY2hpbGQyKCldLm1lcmdlRmxhZ3MoZmxhZ3MpOworICAgICAgICAgICAg
Y2hhbmdlZCB8PSBub2RlLT5jaGlsZDEoKS0+bWVyZ2VGbGFncyhmbGFncyk7CisgICAgICAgICAg
ICBjaGFuZ2VkIHw9IG5vZGUtPmNoaWxkMigpLT5tZXJnZUZsYWdzKGZsYWdzKTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBBcml0aEFk
ZDogewotICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgbGVmdCA9IG1fZ3JhcGhbbm9kZS5jaGls
ZDEoKV0ucHJlZGljdGlvbigpOwotICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgcmlnaHQgPSBt
X2dyYXBoW25vZGUuY2hpbGQyKCldLnByZWRpY3Rpb24oKTsKKyAgICAgICAgICAgIFNwZWN1bGF0
ZWRUeXBlIGxlZnQgPSBub2RlLT5jaGlsZDEoKS0+cHJlZGljdGlvbigpOworICAgICAgICAgICAg
U3BlY3VsYXRlZFR5cGUgcmlnaHQgPSBub2RlLT5jaGlsZDIoKS0+cHJlZGljdGlvbigpOwogICAg
ICAgICAgICAgCiAgICAgICAgICAgICBBZGRTcGVjdWxhdGlvbk1vZGUgbW9kZSA9IERvbnRTcGVj
dWxhdGVJbnRlZ2VyOwogICAgICAgICAgICAgCkBAIC0zMzMsMjEgKzMzMSwyMSBAQCBwcml2YXRl
OgogICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbihzcGVjdWxh
dGVkRG91YmxlVHlwZUZvclByZWRpY3Rpb25zKGxlZnQsIHJpZ2h0KSk7CiAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChpc05vdE5lZ1plcm8obm9kZS5jaGlsZDEo
KS5pbmRleCgpKSB8fCBpc05vdE5lZ1plcm8obm9kZS5jaGlsZDIoKS5pbmRleCgpKSkKKyAgICAg
ICAgICAgIGlmIChpc05vdE5lZ1plcm8obm9kZS0+Y2hpbGQxKCkubm9kZSgpKSB8fCBpc05vdE5l
Z1plcm8obm9kZS0+Y2hpbGQyKCkubm9kZSgpKSkKICAgICAgICAgICAgICAgICBmbGFncyAmPSB+
Tm9kZU5lZWRzTmVnWmVybzsKICAgICAgICAgICAgIGZsYWdzICY9IH5Ob2RlVXNlZEFzT3RoZXI7
CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlmIChtb2RlICE9IFNwZWN1bGF0ZUludGVnZXIp
CiAgICAgICAgICAgICAgICAgZmxhZ3MgfD0gTm9kZVVzZWRBc051bWJlcjsKICAgICAgICAgICAg
IAotICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLm1lcmdlRmxh
Z3MoZmxhZ3MpOwotICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQyKCld
Lm1lcmdlRmxhZ3MoZmxhZ3MpOworICAgICAgICAgICAgY2hhbmdlZCB8PSBub2RlLT5jaGlsZDEo
KS0+bWVyZ2VGbGFncyhmbGFncyk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG5vZGUtPmNoaWxk
MigpLT5tZXJnZUZsYWdzKGZsYWdzKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAg
ICAgICAgICAgICAKICAgICAgICAgY2FzZSBBcml0aFN1YjogewotICAgICAgICAgICAgU3BlY3Vs
YXRlZFR5cGUgbGVmdCA9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ucHJlZGljdGlvbigpOwotICAg
ICAgICAgICAgU3BlY3VsYXRlZFR5cGUgcmlnaHQgPSBtX2dyYXBoW25vZGUuY2hpbGQyKCldLnBy
ZWRpY3Rpb24oKTsKKyAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIGxlZnQgPSBub2RlLT5jaGls
ZDEoKS0+cHJlZGljdGlvbigpOworICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgcmlnaHQgPSBu
b2RlLT5jaGlsZDIoKS0+cHJlZGljdGlvbigpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBB
ZGRTcGVjdWxhdGlvbk1vZGUgbW9kZSA9IERvbnRTcGVjdWxhdGVJbnRlZ2VyOwogICAgICAgICAg
ICAgCkBAIC0zNTgsMzkgKzM1NiwzOSBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICBj
aGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbihzcGVjdWxhdGVkRG91YmxlVHlwZUZvclByZWRpY3Rp
b25zKGxlZnQsIHJpZ2h0KSk7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmIChpc05v
dFplcm8obm9kZS5jaGlsZDEoKS5pbmRleCgpKSB8fCBpc05vdFplcm8obm9kZS5jaGlsZDIoKS5p
bmRleCgpKSkKKyAgICAgICAgICAgIGlmIChpc05vdFplcm8obm9kZS0+Y2hpbGQxKCkubm9kZSgp
KSB8fCBpc05vdFplcm8obm9kZS0+Y2hpbGQyKCkubm9kZSgpKSkKICAgICAgICAgICAgICAgICBm
bGFncyAmPSB+Tm9kZU5lZWRzTmVnWmVybzsKICAgICAgICAgICAgIGZsYWdzICY9IH5Ob2RlVXNl
ZEFzT3RoZXI7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlmIChtb2RlICE9IFNwZWN1bGF0
ZUludGVnZXIpCiAgICAgICAgICAgICAgICAgZmxhZ3MgfD0gTm9kZVVzZWRBc051bWJlcjsKICAg
ICAgICAgICAgIAotICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQxKCld
Lm1lcmdlRmxhZ3MoZmxhZ3MpOwotICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW25vZGUu
Y2hpbGQyKCldLm1lcmdlRmxhZ3MoZmxhZ3MpOworICAgICAgICAgICAgY2hhbmdlZCB8PSBub2Rl
LT5jaGlsZDEoKS0+bWVyZ2VGbGFncyhmbGFncyk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG5v
ZGUtPmNoaWxkMigpLT5tZXJnZUZsYWdzKGZsYWdzKTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBBcml0aE5lZ2F0ZToKLSAgICAgICAg
ICAgIGlmIChtX2dyYXBoW25vZGUuY2hpbGQxKCldLnByZWRpY3Rpb24oKSkgeworICAgICAgICAg
ICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5wcmVkaWN0aW9uKCkpIHsKICAgICAgICAgICAgICAgICBp
ZiAobV9ncmFwaC5uZWdhdGVTaG91bGRTcGVjdWxhdGVJbnRlZ2VyKG5vZGUpKQogICAgICAgICAg
ICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbihTcGVjSW50MzIpOwogICAgICAg
ICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVByZWRp
Y3Rpb24oc3BlY3VsYXRlZERvdWJsZVR5cGVGb3JQcmVkaWN0aW9uKG1fZ3JhcGhbbm9kZS5jaGls
ZDEoKV0ucHJlZGljdGlvbigpKSk7CisgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVy
Z2VQcmVkaWN0aW9uKHNwZWN1bGF0ZWREb3VibGVUeXBlRm9yUHJlZGljdGlvbihub2RlLT5jaGls
ZDEoKS0+cHJlZGljdGlvbigpKSk7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGZsYWdz
ICY9IH5Ob2RlVXNlZEFzT3RoZXI7CiAKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaFtu
b2RlLmNoaWxkMSgpXS5tZXJnZUZsYWdzKGZsYWdzKTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0g
bm9kZS0+Y2hpbGQxKCktPm1lcmdlRmxhZ3MoZmxhZ3MpOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICAKICAgICAgICAgY2FzZSBBcml0aE1pbjoKICAgICAgICAgY2FzZSBBcml0aE1h
eDogewotICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgbGVmdCA9IG1fZ3JhcGhbbm9kZS5jaGls
ZDEoKV0ucHJlZGljdGlvbigpOwotICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgcmlnaHQgPSBt
X2dyYXBoW25vZGUuY2hpbGQyKCldLnByZWRpY3Rpb24oKTsKKyAgICAgICAgICAgIFNwZWN1bGF0
ZWRUeXBlIGxlZnQgPSBub2RlLT5jaGlsZDEoKS0+cHJlZGljdGlvbigpOworICAgICAgICAgICAg
U3BlY3VsYXRlZFR5cGUgcmlnaHQgPSBub2RlLT5jaGlsZDIoKS0+cHJlZGljdGlvbigpOwogICAg
ICAgICAgICAgCiAgICAgICAgICAgICBpZiAobGVmdCAmJiByaWdodCkgewotICAgICAgICAgICAg
ICAgIGlmIChOb2RlOjpzaG91bGRTcGVjdWxhdGVJbnRlZ2VyRm9yQXJpdGhtZXRpYyhtX2dyYXBo
W25vZGUuY2hpbGQxKCldLCBtX2dyYXBoW25vZGUuY2hpbGQyKCldKQotICAgICAgICAgICAgICAg
ICAgICAmJiBub2RlQ2FuU3BlY3VsYXRlSW50ZWdlcihub2RlLmFyaXRoTm9kZUZsYWdzKCkpKQor
ICAgICAgICAgICAgICAgIGlmIChOb2RlOjpzaG91bGRTcGVjdWxhdGVJbnRlZ2VyRm9yQXJpdGht
ZXRpYyhub2RlLT5jaGlsZDEoKS5ub2RlKCksIG5vZGUtPmNoaWxkMigpLm5vZGUoKSkKKyAgICAg
ICAgICAgICAgICAgICAgJiYgbm9kZUNhblNwZWN1bGF0ZUludGVnZXIobm9kZS0+YXJpdGhOb2Rl
RmxhZ3MoKSkpCiAgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9u
KFNwZWNJbnQzMik7CiAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICBj
aGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbihzcGVjdWxhdGVkRG91YmxlVHlwZUZvclByZWRpY3Rp
b25zKGxlZnQsIHJpZ2h0KSk7CkBAIC0zOTksMTQgKzM5NywxNCBAQCBwcml2YXRlOgogICAgICAg
ICAgICAgZmxhZ3MgfD0gTm9kZVVzZWRBc051bWJlcjsKICAgICAgICAgICAgIGZsYWdzICY9IH5O
b2RlVXNlZEFzT3RoZXI7CiAKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaFtub2RlLmNo
aWxkMSgpXS5tZXJnZUZsYWdzKGZsYWdzKTsKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFw
aFtub2RlLmNoaWxkMigpXS5tZXJnZUZsYWdzKGZsYWdzKTsKKyAgICAgICAgICAgIGNoYW5nZWQg
fD0gbm9kZS0+Y2hpbGQxKCktPm1lcmdlRmxhZ3MoZmxhZ3MpOworICAgICAgICAgICAgY2hhbmdl
ZCB8PSBub2RlLT5jaGlsZDIoKS0+bWVyZ2VGbGFncyhmbGFncyk7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgfQogCiAgICAgICAgIGNhc2UgQXJpdGhNdWw6IHsKLSAgICAgICAgICAgIFNw
ZWN1bGF0ZWRUeXBlIGxlZnQgPSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLnByZWRpY3Rpb24oKTsK
LSAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHJpZ2h0ID0gbV9ncmFwaFtub2RlLmNoaWxkMigp
XS5wcmVkaWN0aW9uKCk7CisgICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSBsZWZ0ID0gbm9kZS0+
Y2hpbGQxKCktPnByZWRpY3Rpb24oKTsKKyAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHJpZ2h0
ID0gbm9kZS0+Y2hpbGQyKCktPnByZWRpY3Rpb24oKTsKICAgICAgICAgICAgIAogICAgICAgICAg
ICAgaWYgKGxlZnQgJiYgcmlnaHQpIHsKICAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC5tdWxT
aG91bGRTcGVjdWxhdGVJbnRlZ2VyKG5vZGUpKQpAQCAtNDIyLDggKzQyMCw4IEBAIHByaXZhdGU6
CiAgICAgICAgICAgICAvLyBpdHNlbGYgdW5sZXNzIHdlIGNhbiBwcm92ZSB0aGF0IHRoZXJlIGlz
IG5vIHdheSBmb3IgdGhlIHZhbHVlcwogICAgICAgICAgICAgLy8gcHJvZHVjZWQgdG8gY2F1c2Ug
ZG91YmxlIHJvdW5kaW5nLgogICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoIWlzV2l0aGlu
UG93ZXJPZlR3byhub2RlLmNoaWxkMSgpLmluZGV4KCksIDIyKQotICAgICAgICAgICAgICAgICYm
ICFpc1dpdGhpblBvd2VyT2ZUd28obm9kZS5jaGlsZDIoKS5pbmRleCgpLCAyMikpCisgICAgICAg
ICAgICBpZiAoIWlzV2l0aGluUG93ZXJPZlR3byhub2RlLT5jaGlsZDEoKS5ub2RlKCksIDIyKQor
ICAgICAgICAgICAgICAgICYmICFpc1dpdGhpblBvd2VyT2ZUd28obm9kZS0+Y2hpbGQyKCkubm9k
ZSgpLCAyMikpCiAgICAgICAgICAgICAgICAgZmxhZ3MgfD0gTm9kZVVzZWRBc051bWJlcjsKICAg
ICAgICAgICAgIAogICAgICAgICAgICAgY2hhbmdlZCB8PSBub2RlLm1lcmdlRmxhZ3MoZmxhZ3Mp
OwpAQCAtNDMxLDE4ICs0MjksMTggQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGZsYWdzIHw9IE5v
ZGVVc2VkQXNOdW1iZXIgfCBOb2RlTmVlZHNOZWdaZXJvOwogICAgICAgICAgICAgZmxhZ3MgJj0g
fk5vZGVVc2VkQXNPdGhlcjsKIAotICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW25vZGUu
Y2hpbGQxKCldLm1lcmdlRmxhZ3MoZmxhZ3MpOwotICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dy
YXBoW25vZGUuY2hpbGQyKCldLm1lcmdlRmxhZ3MoZmxhZ3MpOworICAgICAgICAgICAgY2hhbmdl
ZCB8PSBub2RlLT5jaGlsZDEoKS0+bWVyZ2VGbGFncyhmbGFncyk7CisgICAgICAgICAgICBjaGFu
Z2VkIHw9IG5vZGUtPmNoaWxkMigpLT5tZXJnZUZsYWdzKGZsYWdzKTsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBBcml0aERpdjogewot
ICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgbGVmdCA9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0u
cHJlZGljdGlvbigpOwotICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgcmlnaHQgPSBtX2dyYXBo
W25vZGUuY2hpbGQyKCldLnByZWRpY3Rpb24oKTsKKyAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBl
IGxlZnQgPSBub2RlLT5jaGlsZDEoKS0+cHJlZGljdGlvbigpOworICAgICAgICAgICAgU3BlY3Vs
YXRlZFR5cGUgcmlnaHQgPSBub2RlLT5jaGlsZDIoKS0+cHJlZGljdGlvbigpOwogICAgICAgICAg
ICAgCiAgICAgICAgICAgICBpZiAobGVmdCAmJiByaWdodCkgewotICAgICAgICAgICAgICAgIGlm
IChOb2RlOjpzaG91bGRTcGVjdWxhdGVJbnRlZ2VyRm9yQXJpdGhtZXRpYyhtX2dyYXBoW25vZGUu
Y2hpbGQxKCldLCBtX2dyYXBoW25vZGUuY2hpbGQyKCldKQotICAgICAgICAgICAgICAgICAgICAm
JiBub2RlQ2FuU3BlY3VsYXRlSW50ZWdlcihub2RlLmFyaXRoTm9kZUZsYWdzKCkpKQorICAgICAg
ICAgICAgICAgIGlmIChOb2RlOjpzaG91bGRTcGVjdWxhdGVJbnRlZ2VyRm9yQXJpdGhtZXRpYyhu
b2RlLT5jaGlsZDEoKS5ub2RlKCksIG5vZGUtPmNoaWxkMigpLm5vZGUoKSkKKyAgICAgICAgICAg
ICAgICAgICAgJiYgbm9kZUNhblNwZWN1bGF0ZUludGVnZXIobm9kZS0+YXJpdGhOb2RlRmxhZ3Mo
KSkpCiAgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKFNwZWNJ
bnQzMik7CiAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICBjaGFuZ2Vk
IHw9IG1lcmdlUHJlZGljdGlvbihTcGVjRG91YmxlKTsKQEAgLTQ1NiwxOCArNDU0LDE4IEBAIHBy
aXZhdGU6CiAgICAgICAgICAgICBmbGFncyB8PSBOb2RlVXNlZEFzTnVtYmVyIHwgTm9kZU5lZWRz
TmVnWmVybzsKICAgICAgICAgICAgIGZsYWdzICY9IH5Ob2RlVXNlZEFzT3RoZXI7CiAKLSAgICAg
ICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5tZXJnZUZsYWdzKGZsYWdz
KTsKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaFtub2RlLmNoaWxkMigpXS5tZXJnZUZs
YWdzKGZsYWdzKTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbm9kZS0+Y2hpbGQxKCktPm1lcmdl
RmxhZ3MoZmxhZ3MpOworICAgICAgICAgICAgY2hhbmdlZCB8PSBub2RlLT5jaGlsZDIoKS0+bWVy
Z2VGbGFncyhmbGFncyk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAg
ICAgCiAgICAgICAgIGNhc2UgQXJpdGhNb2Q6IHsKLSAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBl
IGxlZnQgPSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLnByZWRpY3Rpb24oKTsKLSAgICAgICAgICAg
IFNwZWN1bGF0ZWRUeXBlIHJpZ2h0ID0gbV9ncmFwaFtub2RlLmNoaWxkMigpXS5wcmVkaWN0aW9u
KCk7CisgICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSBsZWZ0ID0gbm9kZS0+Y2hpbGQxKCktPnBy
ZWRpY3Rpb24oKTsKKyAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHJpZ2h0ID0gbm9kZS0+Y2hp
bGQyKCktPnByZWRpY3Rpb24oKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKGxlZnQg
JiYgcmlnaHQpIHsKLSAgICAgICAgICAgICAgICBpZiAoTm9kZTo6c2hvdWxkU3BlY3VsYXRlSW50
ZWdlckZvckFyaXRobWV0aWMobV9ncmFwaFtub2RlLmNoaWxkMSgpXSwgbV9ncmFwaFtub2RlLmNo
aWxkMigpXSkKLSAgICAgICAgICAgICAgICAgICAgJiYgbm9kZUNhblNwZWN1bGF0ZUludGVnZXIo
bm9kZS5hcml0aE5vZGVGbGFncygpKSkKKyAgICAgICAgICAgICAgICBpZiAoTm9kZTo6c2hvdWxk
U3BlY3VsYXRlSW50ZWdlckZvckFyaXRobWV0aWMobm9kZS0+Y2hpbGQxKCkubm9kZSgpLCBub2Rl
LT5jaGlsZDIoKS5ub2RlKCkpCisgICAgICAgICAgICAgICAgICAgICYmIG5vZGVDYW5TcGVjdWxh
dGVJbnRlZ2VyKG5vZGUtPmFyaXRoTm9kZUZsYWdzKCkpKQogICAgICAgICAgICAgICAgICAgICBj
aGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbihTcGVjSW50MzIpOwogICAgICAgICAgICAgICAgIGVs
c2UKICAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVByZWRpY3Rpb24oU3BlY0Rv
dWJsZSk7CkBAIC00NzYsOCArNDc0LDggQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGZsYWdzIHw9
IE5vZGVVc2VkQXNOdW1iZXIgfCBOb2RlTmVlZHNOZWdaZXJvOwogICAgICAgICAgICAgZmxhZ3Mg
Jj0gfk5vZGVVc2VkQXNPdGhlcjsKIAotICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW25v
ZGUuY2hpbGQxKCldLm1lcmdlRmxhZ3MoZmxhZ3MpOwotICAgICAgICAgICAgY2hhbmdlZCB8PSBt
X2dyYXBoW25vZGUuY2hpbGQyKCldLm1lcmdlRmxhZ3MoZmxhZ3MpOworICAgICAgICAgICAgY2hh
bmdlZCB8PSBub2RlLT5jaGlsZDEoKS0+bWVyZ2VGbGFncyhmbGFncyk7CisgICAgICAgICAgICBj
aGFuZ2VkIHw9IG5vZGUtPmNoaWxkMigpLT5tZXJnZUZsYWdzKGZsYWdzKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKQEAgLTQ4NSwxOSArNDgzLDE5IEBAIHBy
aXZhdGU6CiAgICAgICAgICAgICBjaGFuZ2VkIHw9IHNldFByZWRpY3Rpb24oU3BlY0RvdWJsZSk7
CiAgICAgICAgICAgICBmbGFncyB8PSBOb2RlVXNlZEFzTnVtYmVyIHwgTm9kZU5lZWRzTmVnWmVy
bzsKICAgICAgICAgICAgIGZsYWdzICY9IH5Ob2RlVXNlZEFzT3RoZXI7Ci0gICAgICAgICAgICBj
aGFuZ2VkIHw9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ubWVyZ2VGbGFncyhmbGFncyk7CisgICAg
ICAgICAgICBjaGFuZ2VkIHw9IG5vZGUtPmNoaWxkMSgpLT5tZXJnZUZsYWdzKGZsYWdzKTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBB
cml0aEFiczogewotICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgY2hpbGQgPSBtX2dyYXBoW25v
ZGUuY2hpbGQxKCldLnByZWRpY3Rpb24oKTsKKyAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIGNo
aWxkID0gbm9kZS0+Y2hpbGQxKCktPnByZWRpY3Rpb24oKTsKICAgICAgICAgICAgIGlmIChpc0lu
dDMyU3BlY3VsYXRpb25Gb3JBcml0aG1ldGljKGNoaWxkKQotICAgICAgICAgICAgICAgICYmIG5v
ZGVDYW5TcGVjdWxhdGVJbnRlZ2VyKG5vZGUuYXJpdGhOb2RlRmxhZ3MoKSkpCisgICAgICAgICAg
ICAgICAgJiYgbm9kZUNhblNwZWN1bGF0ZUludGVnZXIobm9kZS0+YXJpdGhOb2RlRmxhZ3MoKSkp
CiAgICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVByZWRpY3Rpb24oU3BlY0ludDMyKTsK
ICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGlj
dGlvbihzcGVjdWxhdGVkRG91YmxlVHlwZUZvclByZWRpY3Rpb24oY2hpbGQpKTsKIAotICAgICAg
ICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLm1lcmdlRmxhZ3MoZmxhZ3Mp
OworICAgICAgICAgICAgY2hhbmdlZCB8PSBub2RlLT5jaGlsZDEoKS0+bWVyZ2VGbGFncyhmbGFn
cyk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCkBAIC01Mjcs
MzEgKzUyNSwzMSBAQCBwcml2YXRlOgogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBHZXRCeUlk
OiB7Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbihub2RlLmdldEhlYXBQ
cmVkaWN0aW9uKCkpOworICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVByZWRpY3Rpb24obm9k
ZS0+Z2V0SGVhcFByZWRpY3Rpb24oKSk7CiAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlRGVm
YXVsdEZsYWdzKG5vZGUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAg
ICAgIAogICAgICAgICBjYXNlIEdldEJ5SWRGbHVzaDoKLSAgICAgICAgICAgIGNoYW5nZWQgfD0g
bWVyZ2VQcmVkaWN0aW9uKG5vZGUuZ2V0SGVhcFByZWRpY3Rpb24oKSk7CisgICAgICAgICAgICBj
aGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbihub2RlLT5nZXRIZWFwUHJlZGljdGlvbigpKTsKICAg
ICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VEZWZhdWx0RmxhZ3Mobm9kZSk7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgIAogICAgICAgICBjYXNlIEdldEJ5VmFsOiB7Ci0gICAgICAg
ICAgICBpZiAobV9ncmFwaFtub2RlLmNoaWxkMSgpXS5zaG91bGRTcGVjdWxhdGVGbG9hdDMyQXJy
YXkoKQotICAgICAgICAgICAgICAgIHx8IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0uc2hvdWxkU3Bl
Y3VsYXRlRmxvYXQ2NEFycmF5KCkpCisgICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnNo
b3VsZFNwZWN1bGF0ZUZsb2F0MzJBcnJheSgpCisgICAgICAgICAgICAgICAgfHwgbm9kZS0+Y2hp
bGQxKCktPnNob3VsZFNwZWN1bGF0ZUZsb2F0NjRBcnJheSgpKQogICAgICAgICAgICAgICAgIGNo
YW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKFNwZWNEb3VibGUpOwogICAgICAgICAgICAgZWxzZQog
ICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKG5vZGUuZ2V0SGVhcFBy
ZWRpY3Rpb24oKSk7CiAKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaFtub2RlLmNoaWxk
MSgpXS5tZXJnZUZsYWdzKE5vZGVVc2VkQXNWYWx1ZSk7Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9
IG1fZ3JhcGhbbm9kZS5jaGlsZDIoKV0ubWVyZ2VGbGFncyhOb2RlVXNlZEFzTnVtYmVyIHwgTm9k
ZVVzZWRBc090aGVyIHwgTm9kZVVzZWRBc0ludCB8IE5vZGVVc2VkQXNJbnRMb2NhbGx5KTsKKyAg
ICAgICAgICAgIGNoYW5nZWQgfD0gbm9kZS0+Y2hpbGQxKCktPm1lcmdlRmxhZ3MoTm9kZVVzZWRB
c1ZhbHVlKTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbm9kZS0+Y2hpbGQyKCktPm1lcmdlRmxh
Z3MoTm9kZVVzZWRBc051bWJlciB8IE5vZGVVc2VkQXNPdGhlciB8IE5vZGVVc2VkQXNJbnQgfCBO
b2RlVXNlZEFzSW50TG9jYWxseSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAg
ICAgICAgICAgCiAgICAgICAgIGNhc2UgR2V0TXlBcmd1bWVudEJ5VmFsU2FmZTogewotICAgICAg
ICAgICAgY2hhbmdlZCB8PSBtZXJnZVByZWRpY3Rpb24obm9kZS5nZXRIZWFwUHJlZGljdGlvbigp
KTsKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5tZXJnZUZs
YWdzKE5vZGVVc2VkQXNOdW1iZXIgfCBOb2RlVXNlZEFzT3RoZXIgfCBOb2RlVXNlZEFzSW50IHwg
Tm9kZVVzZWRBc0ludExvY2FsbHkpOworICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVByZWRp
Y3Rpb24obm9kZS0+Z2V0SGVhcFByZWRpY3Rpb24oKSk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9
IG5vZGUtPmNoaWxkMSgpLT5tZXJnZUZsYWdzKE5vZGVVc2VkQXNOdW1iZXIgfCBOb2RlVXNlZEFz
T3RoZXIgfCBOb2RlVXNlZEFzSW50IHwgTm9kZVVzZWRBc0ludExvY2FsbHkpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIApAQCAtNTcxLDI1ICs1NjksMjMgQEAg
cHJpdmF0ZToKICAgICAgICAgfQogCiAgICAgICAgIGNhc2UgR2V0QnlPZmZzZXQ6IHsKLSAgICAg
ICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKG5vZGUuZ2V0SGVhcFByZWRpY3Rpb24o
KSk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbihub2RlLT5nZXRIZWFw
UHJlZGljdGlvbigpKTsKICAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VEZWZhdWx0RmxhZ3Mo
bm9kZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAg
ICAgIGNhc2UgQ2FsbDoKICAgICAgICAgY2FzZSBDb25zdHJ1Y3Q6IHsKLSAgICAgICAgICAgIGNo
YW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKG5vZGUuZ2V0SGVhcFByZWRpY3Rpb24oKSk7Ci0gICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGNoaWxkSWR4ID0gbm9kZS5maXJzdENoaWxkKCk7Ci0gICAg
ICAgICAgICAgICAgIGNoaWxkSWR4IDwgbm9kZS5maXJzdENoaWxkKCkgKyBub2RlLm51bUNoaWxk
cmVuKCk7Ci0gICAgICAgICAgICAgICAgICsrY2hpbGRJZHgpIHsKLSAgICAgICAgICAgICAgICBF
ZGdlIGVkZ2UgPSBtX2dyYXBoLm1fdmFyQXJnQ2hpbGRyZW5bY2hpbGRJZHhdOwotICAgICAgICAg
ICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaFtlZGdlXS5tZXJnZUZsYWdzKE5vZGVVc2VkQXNWYWx1
ZSk7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlv
bihub2RlLT5nZXRIZWFwUHJlZGljdGlvbigpKTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQg
Y2hpbGRJZHggPSBub2RlLT5maXJzdENoaWxkKCk7CisgICAgICAgICAgICAgICAgIGNoaWxkSWR4
IDwgbm9kZS0+Zmlyc3RDaGlsZCgpICsgbm9kZS0+bnVtQ2hpbGRyZW4oKTsKKyAgICAgICAgICAg
ICAgICAgKytjaGlsZElkeCkKKyAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGgubV92
YXJBcmdDaGlsZHJlbltjaGlsZElkeF0tPm1lcmdlRmxhZ3MoTm9kZVVzZWRBc1ZhbHVlKTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBD
b252ZXJ0VGhpczogewotICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiA9IG1f
Z3JhcGhbbm9kZS5jaGlsZDEoKV0ucHJlZGljdGlvbigpOworICAgICAgICAgICAgU3BlY3VsYXRl
ZFR5cGUgcHJlZGljdGlvbiA9IG5vZGUtPmNoaWxkMSgpLT5wcmVkaWN0aW9uKCk7CiAgICAgICAg
ICAgICBpZiAocHJlZGljdGlvbikgewogICAgICAgICAgICAgICAgIGlmIChwcmVkaWN0aW9uICYg
flNwZWNPYmplY3RNYXNrKSB7CiAgICAgICAgICAgICAgICAgICAgIHByZWRpY3Rpb24gJj0gU3Bl
Y09iamVjdE1hc2s7CkBAIC02MDIsMTMgKzU5OCwxMyBAQCBwcml2YXRlOgogICAgICAgICB9CiAg
ICAgICAgICAgICAKICAgICAgICAgY2FzZSBHZXRHbG9iYWxWYXI6IHsKLSAgICAgICAgICAgIGNo
YW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKG5vZGUuZ2V0SGVhcFByZWRpY3Rpb24oKSk7CisgICAg
ICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbihub2RlLT5nZXRIZWFwUHJlZGljdGlv
bigpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAg
ICAgY2FzZSBQdXRHbG9iYWxWYXI6CiAgICAgICAgIGNhc2UgUHV0R2xvYmFsVmFyQ2hlY2s6IHsK
LSAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5tZXJnZUZsYWdz
KE5vZGVVc2VkQXNWYWx1ZSk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG5vZGUtPmNoaWxkMSgp
LT5tZXJnZUZsYWdzKE5vZGVVc2VkQXNWYWx1ZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgfQogICAgICAgICAgICAgCkBAIC02MTcsNyArNjEzLDcgQEAgcHJpdmF0ZToKICAgICAgICAg
Y2FzZSBSZXNvbHZlQmFzZToKICAgICAgICAgY2FzZSBSZXNvbHZlQmFzZVN0cmljdFB1dDoKICAg
ICAgICAgY2FzZSBSZXNvbHZlR2xvYmFsOiB7Ci0gICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSBw
cmVkaWN0aW9uID0gbm9kZS5nZXRIZWFwUHJlZGljdGlvbigpOworICAgICAgICAgICAgU3BlY3Vs
YXRlZFR5cGUgcHJlZGljdGlvbiA9IG5vZGUtPmdldEhlYXBQcmVkaWN0aW9uKCk7CiAgICAgICAg
ICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbihwcmVkaWN0aW9uKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9CkBAIC02NDMsMTggKzYzOSwxNiBAQCBwcml2YXRlOgogICAgICAg
ICAgICAgCiAgICAgICAgIGNhc2UgTmV3QXJyYXk6IHsKICAgICAgICAgICAgIGNoYW5nZWQgfD0g
c2V0UHJlZGljdGlvbihTcGVjQXJyYXkpOwotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBjaGls
ZElkeCA9IG5vZGUuZmlyc3RDaGlsZCgpOwotICAgICAgICAgICAgICAgICBjaGlsZElkeCA8IG5v
ZGUuZmlyc3RDaGlsZCgpICsgbm9kZS5udW1DaGlsZHJlbigpOwotICAgICAgICAgICAgICAgICAr
K2NoaWxkSWR4KSB7Ci0gICAgICAgICAgICAgICAgRWRnZSBlZGdlID0gbV9ncmFwaC5tX3ZhckFy
Z0NoaWxkcmVuW2NoaWxkSWR4XTsKLSAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhb
ZWRnZV0ubWVyZ2VGbGFncyhOb2RlVXNlZEFzVmFsdWUpOwotICAgICAgICAgICAgfQorICAgICAg
ICAgICAgZm9yICh1bnNpZ25lZCBjaGlsZElkeCA9IG5vZGUtPmZpcnN0Q2hpbGQoKTsKKyAgICAg
ICAgICAgICAgICAgY2hpbGRJZHggPCBub2RlLT5maXJzdENoaWxkKCkgKyBub2RlLT5udW1DaGls
ZHJlbigpOworICAgICAgICAgICAgICAgICArK2NoaWxkSWR4KQorICAgICAgICAgICAgICAgIGNo
YW5nZWQgfD0gbV9ncmFwaC5tX3ZhckFyZ0NoaWxkcmVuW2NoaWxkSWR4XS0+bWVyZ2VGbGFncyhO
b2RlVXNlZEFzVmFsdWUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAg
ICAgIAogICAgICAgICBjYXNlIE5ld0FycmF5V2l0aFNpemU6IHsKICAgICAgICAgICAgIGNoYW5n
ZWQgfD0gc2V0UHJlZGljdGlvbihTcGVjQXJyYXkpOwotICAgICAgICAgICAgY2hhbmdlZCB8PSBt
X2dyYXBoW25vZGUuY2hpbGQxKCldLm1lcmdlRmxhZ3MoTm9kZVVzZWRBc1ZhbHVlIHwgTm9kZVVz
ZWRBc0ludCB8IE5vZGVVc2VkQXNJbnRMb2NhbGx5KTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0g
bm9kZS0+Y2hpbGQxKCktPm1lcmdlRmxhZ3MoTm9kZVVzZWRBc1ZhbHVlIHwgTm9kZVVzZWRBc0lu
dCB8IE5vZGVVc2VkQXNJbnRMb2NhbGx5KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9
CiAgICAgICAgICAgICAKQEAgLTY3MCwyMiArNjY0LDIyIEBAIHByaXZhdGU6CiAgICAgICAgIAog
ICAgICAgICBjYXNlIFN0cmluZ0NoYXJBdDogewogICAgICAgICAgICAgY2hhbmdlZCB8PSBzZXRQ
cmVkaWN0aW9uKFNwZWNTdHJpbmcpOwotICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW25v
ZGUuY2hpbGQxKCldLm1lcmdlRmxhZ3MoTm9kZVVzZWRBc1ZhbHVlKTsKLSAgICAgICAgICAgIGNo
YW5nZWQgfD0gbV9ncmFwaFtub2RlLmNoaWxkMigpXS5tZXJnZUZsYWdzKE5vZGVVc2VkQXNOdW1i
ZXIgfCBOb2RlVXNlZEFzT3RoZXIgfCBOb2RlVXNlZEFzSW50IHwgTm9kZVVzZWRBc0ludExvY2Fs
bHkpOworICAgICAgICAgICAgY2hhbmdlZCB8PSBub2RlLT5jaGlsZDEoKS0+bWVyZ2VGbGFncyhO
b2RlVXNlZEFzVmFsdWUpOworICAgICAgICAgICAgY2hhbmdlZCB8PSBub2RlLT5jaGlsZDIoKS0+
bWVyZ2VGbGFncyhOb2RlVXNlZEFzTnVtYmVyIHwgTm9kZVVzZWRBc090aGVyIHwgTm9kZVVzZWRB
c0ludCB8IE5vZGVVc2VkQXNJbnRMb2NhbGx5KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBTdHJDYXQ6IHsKICAgICAgICAgICAgIGNo
YW5nZWQgfD0gc2V0UHJlZGljdGlvbihTcGVjU3RyaW5nKTsKLSAgICAgICAgICAgIGZvciAodW5z
aWduZWQgY2hpbGRJZHggPSBub2RlLmZpcnN0Q2hpbGQoKTsKLSAgICAgICAgICAgICAgICAgY2hp
bGRJZHggPCBub2RlLmZpcnN0Q2hpbGQoKSArIG5vZGUubnVtQ2hpbGRyZW4oKTsKKyAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgY2hpbGRJZHggPSBub2RlLT5maXJzdENoaWxkKCk7CisgICAgICAg
ICAgICAgICAgIGNoaWxkSWR4IDwgbm9kZS0+Zmlyc3RDaGlsZCgpICsgbm9kZS0+bnVtQ2hpbGRy
ZW4oKTsKICAgICAgICAgICAgICAgICAgKytjaGlsZElkeCkKLSAgICAgICAgICAgICAgICBjaGFu
Z2VkIHw9IG1fZ3JhcGhbbV9ncmFwaC5tX3ZhckFyZ0NoaWxkcmVuW2NoaWxkSWR4XV0ubWVyZ2VG
bGFncyhOb2RlVXNlZEFzTnVtYmVyIHwgTm9kZVVzZWRBc090aGVyKTsKKyAgICAgICAgICAgICAg
ICBjaGFuZ2VkIHw9IG1fZ3JhcGgubV92YXJBcmdDaGlsZHJlbltjaGlsZElkeF0tPm1lcmdlRmxh
Z3MoTm9kZVVzZWRBc051bWJlciB8IE5vZGVVc2VkQXNPdGhlcik7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgVG9QcmltaXRpdmU6IHsK
LSAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIGNoaWxkID0gbV9ncmFwaFtub2RlLmNoaWxkMSgp
XS5wcmVkaWN0aW9uKCk7CisgICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSBjaGlsZCA9IG5vZGUt
PmNoaWxkMSgpLT5wcmVkaWN0aW9uKCk7CiAgICAgICAgICAgICBpZiAoY2hpbGQpIHsKICAgICAg
ICAgICAgICAgICBpZiAoaXNPYmplY3RTcGVjdWxhdGlvbihjaGlsZCkpIHsKICAgICAgICAgICAg
ICAgICAgICAgLy8gSSdkIGxvdmUgdG8gZm9sZCB0aGlzIGNhc2UgaW50byB0aGUgY2FzZSBiZWxv
dywgYnV0IEkgY2FuJ3QsIGJlY2F1c2UKQEAgLTcwMiw3ICs2OTYsNyBAQCBwcml2YXRlOgogICAg
ICAgICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdl
UHJlZGljdGlvbihjaGlsZCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9
IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ubWVyZ2VGbGFncyhmbGFncyk7CisgICAgICAgICAgICBj
aGFuZ2VkIHw9IG5vZGUtPmNoaWxkMSgpLT5tZXJnZUZsYWdzKGZsYWdzKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKQEAgLTc0NSw0MiArNzM5LDQ1IEBAIHBy
aXZhdGU6CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIGNhc2UgUHV0QnlWYWw6Ci0gICAg
ICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKV0u
bWVyZ2VGbGFncyhOb2RlVXNlZEFzVmFsdWUpOwotICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dy
YXBoW21fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSldLm1lcmdlRmxhZ3MoTm9kZVVzZWRBc051
bWJlciB8IE5vZGVVc2VkQXNPdGhlciB8IE5vZGVVc2VkQXNJbnQgfCBOb2RlVXNlZEFzSW50TG9j
YWxseSk7Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbV9ncmFwaC52YXJBcmdDaGls
ZChub2RlLCAyKV0ubWVyZ2VGbGFncyhOb2RlVXNlZEFzVmFsdWUpOworICAgICAgICAgICAgY2hh
bmdlZCB8PSBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApLT5tZXJnZUZsYWdzKE5vZGVVc2Vk
QXNWYWx1ZSk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9k
ZSwgMSktPm1lcmdlRmxhZ3MoTm9kZVVzZWRBc051bWJlciB8IE5vZGVVc2VkQXNPdGhlciB8IE5v
ZGVVc2VkQXNJbnQgfCBOb2RlVXNlZEFzSW50TG9jYWxseSk7CisgICAgICAgICAgICBjaGFuZ2Vk
IHw9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMiktPm1lcmdlRmxhZ3MoTm9kZVVzZWRBc1Zh
bHVlKTsKICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2UgUHV0U2NvcGVkVmFyOgot
ICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLm1lcmdlRmxhZ3Mo
Tm9kZVVzZWRBc1ZhbHVlKTsKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaFtub2RlLmNo
aWxkMygpXS5tZXJnZUZsYWdzKE5vZGVVc2VkQXNWYWx1ZSk7CisgICAgICAgICAgICBjaGFuZ2Vk
IHw9IG5vZGUtPmNoaWxkMSgpLT5tZXJnZUZsYWdzKE5vZGVVc2VkQXNWYWx1ZSk7CisgICAgICAg
ICAgICBjaGFuZ2VkIHw9IG5vZGUtPmNoaWxkMygpLT5tZXJnZUZsYWdzKE5vZGVVc2VkQXNWYWx1
ZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgICAgICBjYXNlIFJldHVy
bjoKICAgICAgICAgY2FzZSBUaHJvdzoKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaFtu
b2RlLmNoaWxkMSgpXS5tZXJnZUZsYWdzKE5vZGVVc2VkQXNWYWx1ZSk7CisgICAgICAgICAgICBj
aGFuZ2VkIHw9IG5vZGUtPmNoaWxkMSgpLT5tZXJnZUZsYWdzKE5vZGVVc2VkQXNWYWx1ZSk7CiAg
ICAgICAgICAgICBicmVhazsKIAogICAgICAgICBjYXNlIFB1dEJ5SWQ6CiAgICAgICAgIGNhc2Ug
UHV0QnlJZERpcmVjdDoKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaFtub2RlLmNoaWxk
MSgpXS5tZXJnZUZsYWdzKE5vZGVVc2VkQXNWYWx1ZSk7Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9
IG1fZ3JhcGhbbm9kZS5jaGlsZDIoKV0ubWVyZ2VGbGFncyhOb2RlVXNlZEFzVmFsdWUpOworICAg
ICAgICAgICAgY2hhbmdlZCB8PSBub2RlLT5jaGlsZDEoKS0+bWVyZ2VGbGFncyhOb2RlVXNlZEFz
VmFsdWUpOworICAgICAgICAgICAgY2hhbmdlZCB8PSBub2RlLT5jaGlsZDIoKS0+bWVyZ2VGbGFn
cyhOb2RlVXNlZEFzVmFsdWUpOwogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSBQ
dXRCeU9mZnNldDoKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaFtub2RlLmNoaWxkMSgp
XS5tZXJnZUZsYWdzKE5vZGVVc2VkQXNWYWx1ZSk7Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IG1f
Z3JhcGhbbm9kZS5jaGlsZDMoKV0ubWVyZ2VGbGFncyhOb2RlVXNlZEFzVmFsdWUpOworICAgICAg
ICAgICAgY2hhbmdlZCB8PSBub2RlLT5jaGlsZDEoKS0+bWVyZ2VGbGFncyhOb2RlVXNlZEFzVmFs
dWUpOworICAgICAgICAgICAgY2hhbmdlZCB8PSBub2RlLT5jaGlsZDMoKS0+bWVyZ2VGbGFncyhO
b2RlVXNlZEFzVmFsdWUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICAg
ICAgY2FzZSBQaGk6CisgICAgICAgICAgICAvLyBQaGlzIHNob3VsZCBub3QgYmUgdmlzaWJsZSBo
ZXJlIHNpbmNlIHdlJ3JlIGl0ZXJhdGluZyB0aGUgYWxsLWJ1dC1QaGkncworICAgICAgICAgICAg
Ly8gcGFydCBvZiBiYXNpYyBibG9ja3MuCisgICAgICAgICAgICBDUkFTSCgpOwogICAgICAgICAg
ICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSBTZXRDYWxsZWU6CiAgICAgICAgIGNhc2UgU2V0TXlT
Y29wZToKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5tZXJn
ZUZsYWdzKE5vZGVVc2VkQXNWYWx1ZSk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG5vZGUtPmNo
aWxkMSgpLT5tZXJnZUZsYWdzKE5vZGVVc2VkQXNWYWx1ZSk7CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgIAogICAgICAgICBjYXNlIEdldFNjb3BlOgotICAgICAgICAgICAgY2hhbmdl
ZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLm1lcmdlRmxhZ3MoTm9kZVVzZWRBc1ZhbHVlKTsK
KyAgICAgICAgICAgIGNoYW5nZWQgfD0gbm9kZS0+Y2hpbGQxKCktPm1lcmdlRmxhZ3MoTm9kZVVz
ZWRBc1ZhbHVlKTsKICAgICAgICAgICAgIGNoYW5nZWQgfD0gc2V0UHJlZGljdGlvbihTcGVjQ2Vs
bE90aGVyKTsKICAgICAgICAgICAgIGJyZWFrOwogCkBAIC04MjgsMzIgKzgyNSwzMiBAQCBwcml2
YXRlOgogICAgICAgICB9CiAKICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJP
U0UpCi0gICAgICAgIGRhdGFMb2coU3BlY3VsYXRpb25EdW1wKG1fZ3JhcGhbbV9jb21waWxlSW5k
ZXhdLnByZWRpY3Rpb24oKSksICJcbiIpOworICAgICAgICBkYXRhTG9nKFNwZWN1bGF0aW9uRHVt
cChub2RlLT5wcmVkaWN0aW9uKCkpLCAiXG4iKTsKICNlbmRpZgogICAgICAgICAKICAgICAgICAg
bV9jaGFuZ2VkIHw9IGNoYW5nZWQ7CiAgICAgfQogICAgICAgICAKLSAgICBib29sIG1lcmdlRGVm
YXVsdEZsYWdzKE5vZGUmIG5vZGUpCisgICAgYm9vbCBtZXJnZURlZmF1bHRGbGFncyhOb2RlKiBu
b2RlKQogICAgIHsKICAgICAgICAgYm9vbCBjaGFuZ2VkID0gZmFsc2U7Ci0gICAgICAgIGlmIChu
b2RlLmZsYWdzKCkgJiBOb2RlSGFzVmFyQXJncykgewotICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBjaGlsZElkeCA9IG5vZGUuZmlyc3RDaGlsZCgpOwotICAgICAgICAgICAgICAgICBjaGlsZElk
eCA8IG5vZGUuZmlyc3RDaGlsZCgpICsgbm9kZS5udW1DaGlsZHJlbigpOworICAgICAgICBpZiAo
bm9kZS0+ZmxhZ3MoKSAmIE5vZGVIYXNWYXJBcmdzKSB7CisgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGNoaWxkSWR4ID0gbm9kZS0+Zmlyc3RDaGlsZCgpOworICAgICAgICAgICAgICAgICBjaGls
ZElkeCA8IG5vZGUtPmZpcnN0Q2hpbGQoKSArIG5vZGUtPm51bUNoaWxkcmVuKCk7CiAgICAgICAg
ICAgICAgICAgIGNoaWxkSWR4KyspIHsKICAgICAgICAgICAgICAgICBpZiAoISFtX2dyYXBoLm1f
dmFyQXJnQ2hpbGRyZW5bY2hpbGRJZHhdKQotICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9
IG1fZ3JhcGhbbV9ncmFwaC5tX3ZhckFyZ0NoaWxkcmVuW2NoaWxkSWR4XV0ubWVyZ2VGbGFncyhO
b2RlVXNlZEFzVmFsdWUpOworICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGgu
bV92YXJBcmdDaGlsZHJlbltjaGlsZElkeF0tPm1lcmdlRmxhZ3MoTm9kZVVzZWRBc1ZhbHVlKTsK
ICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlmICghbm9kZS5j
aGlsZDEoKSkKKyAgICAgICAgICAgIGlmICghbm9kZS0+Y2hpbGQxKCkpCiAgICAgICAgICAgICAg
ICAgcmV0dXJuIGNoYW5nZWQ7Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbm9kZS5j
aGlsZDEoKV0ubWVyZ2VGbGFncyhOb2RlVXNlZEFzVmFsdWUpOwotICAgICAgICAgICAgaWYgKCFu
b2RlLmNoaWxkMigpKQorICAgICAgICAgICAgY2hhbmdlZCB8PSBub2RlLT5jaGlsZDEoKS0+bWVy
Z2VGbGFncyhOb2RlVXNlZEFzVmFsdWUpOworICAgICAgICAgICAgaWYgKCFub2RlLT5jaGlsZDIo
KSkKICAgICAgICAgICAgICAgICByZXR1cm4gY2hhbmdlZDsKLSAgICAgICAgICAgIGNoYW5nZWQg
fD0gbV9ncmFwaFtub2RlLmNoaWxkMigpXS5tZXJnZUZsYWdzKE5vZGVVc2VkQXNWYWx1ZSk7Ci0g
ICAgICAgICAgICBpZiAoIW5vZGUuY2hpbGQzKCkpCisgICAgICAgICAgICBjaGFuZ2VkIHw9IG5v
ZGUtPmNoaWxkMigpLT5tZXJnZUZsYWdzKE5vZGVVc2VkQXNWYWx1ZSk7CisgICAgICAgICAgICBp
ZiAoIW5vZGUtPmNoaWxkMygpKQogICAgICAgICAgICAgICAgIHJldHVybiBjaGFuZ2VkOwotICAg
ICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQzKCldLm1lcmdlRmxhZ3MoTm9k
ZVVzZWRBc1ZhbHVlKTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbm9kZS0+Y2hpbGQzKCktPm1l
cmdlRmxhZ3MoTm9kZVVzZWRBc1ZhbHVlKTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gY2hh
bmdlZDsKICAgICB9CkBAIC04NjMsOCArODYwLDE2IEBAIHByaXZhdGU6CiAjaWYgREZHX0VOQUJM
RShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQogICAgICAgICBkYXRhTG9nRigiUHJvcGFnYXRp
bmcgcHJlZGljdGlvbnMgZm9yd2FyZCBbJXVdXG4iLCArK21fY291bnQpOwogI2VuZGlmCi0gICAg
ICAgIGZvciAobV9jb21waWxlSW5kZXggPSAwOyBtX2NvbXBpbGVJbmRleCA8IG1fZ3JhcGguc2l6
ZSgpOyArK21fY29tcGlsZUluZGV4KQotICAgICAgICAgICAgcHJvcGFnYXRlKG1fZ3JhcGhbbV9j
b21waWxlSW5kZXhdKTsKKyAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSAwOyBi
bG9ja0luZGV4IDwgbV9ncmFwaC5tX2Jsb2Nrcy5zaXplKCk7ICsrYmxvY2tJbmRleCkgeworICAg
ICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLm1fYmxvY2tzW2Jsb2NrSW5kZXhd
LmdldCgpOworICAgICAgICAgICAgaWYgKCFibG9jaykKKyAgICAgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgICAgIEFTU0VSVChibG9jay0+aXNSZWFjaGFibGUpOworICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGJsb2NrLT5zaXplKCk7ICsraSkgeworICAgICAgICAg
ICAgICAgIG1fY3VycmVudE5vZGUgPSBibG9jay0+YXQoaSk7CisgICAgICAgICAgICAgICAgcHJv
cGFnYXRlKG1fY3VycmVudE5vZGUpOworICAgICAgICAgICAgfQorICAgICAgICB9CiAgICAgfQog
ICAgIAogICAgIHZvaWQgcHJvcGFnYXRlQmFja3dhcmQoKQpAQCAtODcyLDEyMyArODc3LDEzOSBA
QCBwcml2YXRlOgogI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKICAg
ICAgICAgZGF0YUxvZ0YoIlByb3BhZ2F0aW5nIHByZWRpY3Rpb25zIGJhY2t3YXJkIFsldV1cbiIs
ICsrbV9jb3VudCk7CiAjZW5kaWYKLSAgICAgICAgZm9yIChtX2NvbXBpbGVJbmRleCA9IG1fZ3Jh
cGguc2l6ZSgpOyBtX2NvbXBpbGVJbmRleC0tID4gMDspCi0gICAgICAgICAgICBwcm9wYWdhdGUo
bV9ncmFwaFttX2NvbXBpbGVJbmRleF0pOworICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJ
bmRleCA9IG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgpOyBibG9ja0luZGV4LS07KSB7CisgICAgICAg
ICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGgubV9ibG9ja3NbYmxvY2tJbmRleF0uZ2V0
KCk7CisgICAgICAgICAgICBpZiAoIWJsb2NrKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICAgICAgQVNTRVJUKGJsb2NrLT5pc1JlYWNoYWJsZSk7CisgICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSBibG9jay0+c2l6ZSgpOyBpLS07KSB7CisgICAgICAgICAgICAgICAgbV9j
dXJyZW50Tm9kZSA9IGJsb2NrLT5hdChpKTsKKyAgICAgICAgICAgICAgICBwcm9wYWdhdGUobV9j
dXJyZW50Tm9kZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KICAgICB9CiAgICAgCi0gICAg
dm9pZCBkb1JvdW5kT2ZEb3VibGVWb3RpbmcoKQorICAgIHZvaWQgZG9Eb3VibGVWb3RpbmcoTm9k
ZSogbm9kZSkKICAgICB7Ci0jaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NF
KQotICAgICAgICBkYXRhTG9nRigiVm90aW5nIG9uIGRvdWJsZSB1c2VzIG9mIGxvY2FscyBbJXVd
XG4iLCBtX2NvdW50KTsKLSNlbmRpZgotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
bV9ncmFwaC5tX3ZhcmlhYmxlQWNjZXNzRGF0YS5zaXplKCk7ICsraSkKLSAgICAgICAgICAgIG1f
Z3JhcGgubV92YXJpYWJsZUFjY2Vzc0RhdGFbaV0uZmluZCgpLT5jbGVhclZvdGVzKCk7Ci0gICAg
ICAgIGZvciAobV9jb21waWxlSW5kZXggPSAwOyBtX2NvbXBpbGVJbmRleCA8IG1fZ3JhcGguc2l6
ZSgpOyArK21fY29tcGlsZUluZGV4KSB7Ci0gICAgICAgICAgICBOb2RlJiBub2RlID0gbV9ncmFw
aFttX2NvbXBpbGVJbmRleF07Ci0gICAgICAgICAgICBzd2l0Y2ggKG5vZGUub3AoKSkgewotICAg
ICAgICAgICAgY2FzZSBWYWx1ZUFkZDoKLSAgICAgICAgICAgIGNhc2UgQXJpdGhBZGQ6Ci0gICAg
ICAgICAgICBjYXNlIEFyaXRoU3ViOiB7Ci0gICAgICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUg
bGVmdCA9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ucHJlZGljdGlvbigpOwotICAgICAgICAgICAg
ICAgIFNwZWN1bGF0ZWRUeXBlIHJpZ2h0ID0gbV9ncmFwaFtub2RlLmNoaWxkMigpXS5wcmVkaWN0
aW9uKCk7CisgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgeworICAgICAgICBjYXNlIFZhbHVl
QWRkOgorICAgICAgICBjYXNlIEFyaXRoQWRkOgorICAgICAgICBjYXNlIEFyaXRoU3ViOiB7Cisg
ICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSBsZWZ0ID0gbm9kZS0+Y2hpbGQxKCktPnByZWRpY3Rp
b24oKTsKKyAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHJpZ2h0ID0gbm9kZS0+Y2hpbGQyKCkt
PnByZWRpY3Rpb24oKTsKICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBEb3VibGVC
YWxsb3QgYmFsbG90OworICAgICAgICAgICAgRG91YmxlQmFsbG90IGJhbGxvdDsKICAgICAgICAg
ICAgICAgICAKLSAgICAgICAgICAgICAgICBpZiAoaXNOdW1iZXJTcGVjdWxhdGlvbkV4cGVjdGlu
Z0RlZmluZWQobGVmdCkgJiYgaXNOdW1iZXJTcGVjdWxhdGlvbkV4cGVjdGluZ0RlZmluZWQocmln
aHQpCi0gICAgICAgICAgICAgICAgICAgICYmICFtX2dyYXBoLmFkZFNob3VsZFNwZWN1bGF0ZUlu
dGVnZXIobm9kZSkpCi0gICAgICAgICAgICAgICAgICAgIGJhbGxvdCA9IFZvdGVEb3VibGU7Ci0g
ICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBiYWxsb3QgPSBWb3RlVmFs
dWU7CisgICAgICAgICAgICBpZiAoaXNOdW1iZXJTcGVjdWxhdGlvbkV4cGVjdGluZ0RlZmluZWQo
bGVmdCkgJiYgaXNOdW1iZXJTcGVjdWxhdGlvbkV4cGVjdGluZ0RlZmluZWQocmlnaHQpCisgICAg
ICAgICAgICAgICAgJiYgIW1fZ3JhcGguYWRkU2hvdWxkU3BlY3VsYXRlSW50ZWdlcihub2RlKSkK
KyAgICAgICAgICAgICAgICBiYWxsb3QgPSBWb3RlRG91YmxlOworICAgICAgICAgICAgZWxzZQor
ICAgICAgICAgICAgICAgIGJhbGxvdCA9IFZvdGVWYWx1ZTsKICAgICAgICAgICAgICAgICAKLSAg
ICAgICAgICAgICAgICBtX2dyYXBoLnZvdGUobm9kZS5jaGlsZDEoKSwgYmFsbG90KTsKLSAgICAg
ICAgICAgICAgICBtX2dyYXBoLnZvdGUobm9kZS5jaGlsZDIoKSwgYmFsbG90KTsKLSAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1fZ3JhcGgudm90ZU5v
ZGUobm9kZS0+Y2hpbGQxKCksIGJhbGxvdCk7CisgICAgICAgICAgICBtX2dyYXBoLnZvdGVOb2Rl
KG5vZGUtPmNoaWxkMigpLCBiYWxsb3QpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
ICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGNhc2UgQXJpdGhNdWw6IHsKLSAgICAgICAg
ICAgICAgICBTcGVjdWxhdGVkVHlwZSBsZWZ0ID0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5wcmVk
aWN0aW9uKCk7Ci0gICAgICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgcmlnaHQgPSBtX2dyYXBo
W25vZGUuY2hpbGQyKCldLnByZWRpY3Rpb24oKTsKKyAgICAgICAgY2FzZSBBcml0aE11bDogewor
ICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgbGVmdCA9IG5vZGUtPmNoaWxkMSgpLT5wcmVkaWN0
aW9uKCk7CisgICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSByaWdodCA9IG5vZGUtPmNoaWxkMigp
LT5wcmVkaWN0aW9uKCk7CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgRG91Ymxl
QmFsbG90IGJhbGxvdDsKKyAgICAgICAgICAgIERvdWJsZUJhbGxvdCBiYWxsb3Q7CiAgICAgICAg
ICAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYgKGlzTnVtYmVyU3BlY3VsYXRpb24obGVmdCkg
JiYgaXNOdW1iZXJTcGVjdWxhdGlvbihyaWdodCkKLSAgICAgICAgICAgICAgICAgICAgJiYgIW1f
Z3JhcGgubXVsU2hvdWxkU3BlY3VsYXRlSW50ZWdlcihub2RlKSkKLSAgICAgICAgICAgICAgICAg
ICAgYmFsbG90ID0gVm90ZURvdWJsZTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAg
ICAgICAgICAgIGJhbGxvdCA9IFZvdGVWYWx1ZTsKKyAgICAgICAgICAgIGlmIChpc051bWJlclNw
ZWN1bGF0aW9uKGxlZnQpICYmIGlzTnVtYmVyU3BlY3VsYXRpb24ocmlnaHQpCisgICAgICAgICAg
ICAgICAgJiYgIW1fZ3JhcGgubXVsU2hvdWxkU3BlY3VsYXRlSW50ZWdlcihub2RlKSkKKyAgICAg
ICAgICAgICAgICBiYWxsb3QgPSBWb3RlRG91YmxlOworICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgICAgIGJhbGxvdCA9IFZvdGVWYWx1ZTsKICAgICAgICAgICAgICAgICAKLSAgICAgICAg
ICAgICAgICBtX2dyYXBoLnZvdGUobm9kZS5jaGlsZDEoKSwgYmFsbG90KTsKLSAgICAgICAgICAg
ICAgICBtX2dyYXBoLnZvdGUobm9kZS5jaGlsZDIoKSwgYmFsbG90KTsKLSAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1fZ3JhcGgudm90ZU5vZGUobm9k
ZS0+Y2hpbGQxKCksIGJhbGxvdCk7CisgICAgICAgICAgICBtX2dyYXBoLnZvdGVOb2RlKG5vZGUt
PmNoaWxkMigpLCBiYWxsb3QpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KIAotICAg
ICAgICAgICAgY2FzZSBBcml0aE1pbjoKLSAgICAgICAgICAgIGNhc2UgQXJpdGhNYXg6Ci0gICAg
ICAgICAgICBjYXNlIEFyaXRoTW9kOgotICAgICAgICAgICAgY2FzZSBBcml0aERpdjogewotICAg
ICAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIGxlZnQgPSBtX2dyYXBoW25vZGUuY2hpbGQxKCld
LnByZWRpY3Rpb24oKTsKLSAgICAgICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSByaWdodCA9IG1f
Z3JhcGhbbm9kZS5jaGlsZDIoKV0ucHJlZGljdGlvbigpOworICAgICAgICBjYXNlIEFyaXRoTWlu
OgorICAgICAgICBjYXNlIEFyaXRoTWF4OgorICAgICAgICBjYXNlIEFyaXRoTW9kOgorICAgICAg
ICBjYXNlIEFyaXRoRGl2OiB7CisgICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSBsZWZ0ID0gbm9k
ZS0+Y2hpbGQxKCktPnByZWRpY3Rpb24oKTsKKyAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHJp
Z2h0ID0gbm9kZS0+Y2hpbGQyKCktPnByZWRpY3Rpb24oKTsKICAgICAgICAgICAgICAgICAKLSAg
ICAgICAgICAgICAgICBEb3VibGVCYWxsb3QgYmFsbG90OworICAgICAgICAgICAgRG91YmxlQmFs
bG90IGJhbGxvdDsKICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBpZiAoaXNOdW1i
ZXJTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc051bWJlclNwZWN1bGF0aW9uKHJpZ2h0KQotICAgICAg
ICAgICAgICAgICAgICAmJiAhKE5vZGU6OnNob3VsZFNwZWN1bGF0ZUludGVnZXJGb3JBcml0aG1l
dGljKG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0sIG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0pCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgJiYgbm9kZS5jYW5TcGVjdWxhdGVJbnRlZ2VyKCkpKQotICAg
ICAgICAgICAgICAgICAgICBiYWxsb3QgPSBWb3RlRG91YmxlOwotICAgICAgICAgICAgICAgIGVs
c2UKLSAgICAgICAgICAgICAgICAgICAgYmFsbG90ID0gVm90ZVZhbHVlOworICAgICAgICAgICAg
aWYgKGlzTnVtYmVyU3BlY3VsYXRpb24obGVmdCkgJiYgaXNOdW1iZXJTcGVjdWxhdGlvbihyaWdo
dCkKKyAgICAgICAgICAgICAgICAmJiAhKE5vZGU6OnNob3VsZFNwZWN1bGF0ZUludGVnZXJGb3JB
cml0aG1ldGljKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgbm9kZS0+Y2hpbGQyKCkubm9kZSgpKQor
ICAgICAgICAgICAgICAgICAgICAgJiYgbm9kZS5jYW5TcGVjdWxhdGVJbnRlZ2VyKCkpKQorICAg
ICAgICAgICAgICAgIGJhbGxvdCA9IFZvdGVEb3VibGU7CisgICAgICAgICAgICBlbHNlCisgICAg
ICAgICAgICAgICAgYmFsbG90ID0gVm90ZVZhbHVlOwogICAgICAgICAgICAgICAgIAotICAgICAg
ICAgICAgICAgIG1fZ3JhcGgudm90ZShub2RlLmNoaWxkMSgpLCBiYWxsb3QpOwotICAgICAgICAg
ICAgICAgIG1fZ3JhcGgudm90ZShub2RlLmNoaWxkMigpLCBiYWxsb3QpOwotICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgbV9ncmFwaC52b3RlTm9kZShu
b2RlLT5jaGlsZDEoKSwgYmFsbG90KTsKKyAgICAgICAgICAgIG1fZ3JhcGgudm90ZU5vZGUobm9k
ZS0+Y2hpbGQyKCksIGJhbGxvdCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQogICAg
ICAgICAgICAgICAgIAotICAgICAgICAgICAgY2FzZSBBcml0aEFiczoKLSAgICAgICAgICAgICAg
ICBEb3VibGVCYWxsb3QgYmFsbG90OwotICAgICAgICAgICAgICAgIGlmICghKG1fZ3JhcGhbbm9k
ZS5jaGlsZDEoKV0uc2hvdWxkU3BlY3VsYXRlSW50ZWdlckZvckFyaXRobWV0aWMoKQotICAgICAg
ICAgICAgICAgICAgICAgICYmIG5vZGUuY2FuU3BlY3VsYXRlSW50ZWdlcigpKSkKLSAgICAgICAg
ICAgICAgICAgICAgYmFsbG90ID0gVm90ZURvdWJsZTsKLSAgICAgICAgICAgICAgICBlbHNlCi0g
ICAgICAgICAgICAgICAgICAgIGJhbGxvdCA9IFZvdGVWYWx1ZTsKKyAgICAgICAgY2FzZSBBcml0
aEFiczoKKyAgICAgICAgICAgIERvdWJsZUJhbGxvdCBiYWxsb3Q7CisgICAgICAgICAgICBpZiAo
IShub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlSW50ZWdlckZvckFyaXRobWV0aWMoKQor
ICAgICAgICAgICAgICAgICAgJiYgbm9kZS5jYW5TcGVjdWxhdGVJbnRlZ2VyKCkpKQorICAgICAg
ICAgICAgICAgIGJhbGxvdCA9IFZvdGVEb3VibGU7CisgICAgICAgICAgICBlbHNlCisgICAgICAg
ICAgICAgICAgYmFsbG90ID0gVm90ZVZhbHVlOwogICAgICAgICAgICAgICAgIAotICAgICAgICAg
ICAgICAgIG1fZ3JhcGgudm90ZShub2RlLmNoaWxkMSgpLCBiYWxsb3QpOwotICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgbV9ncmFwaC52b3RlTm9kZShub2RlLT5jaGlsZDEoKSwg
YmFsbG90KTsKKyAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIAotICAgICAgICAg
ICAgY2FzZSBBcml0aFNxcnQ6Ci0gICAgICAgICAgICAgICAgbV9ncmFwaC52b3RlKG5vZGUuY2hp
bGQxKCksIFZvdGVEb3VibGUpOwotICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IEFyaXRoU3FydDoKKyAgICAgICAgICAgIG1fZ3JhcGgudm90ZU5vZGUobm9kZS0+Y2hpbGQxKCks
IFZvdGVEb3VibGUpOworICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgCi0gICAg
ICAgICAgICBjYXNlIFNldExvY2FsOiB7Ci0gICAgICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUg
cHJlZGljdGlvbiA9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ucHJlZGljdGlvbigpOwotICAgICAg
ICAgICAgICAgIGlmIChpc0RvdWJsZVNwZWN1bGF0aW9uKHByZWRpY3Rpb24pKQotICAgICAgICAg
ICAgICAgICAgICBub2RlLnZhcmlhYmxlQWNjZXNzRGF0YSgpLT52b3RlKFZvdGVEb3VibGUpOwot
ICAgICAgICAgICAgICAgIGVsc2UgaWYgKCFpc051bWJlclNwZWN1bGF0aW9uKHByZWRpY3Rpb24p
IHx8IGlzSW50MzJTcGVjdWxhdGlvbihwcmVkaWN0aW9uKSkKLSAgICAgICAgICAgICAgICAgICAg
bm9kZS52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+dm90ZShWb3RlVmFsdWUpOwotICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgfQorICAgICAgICBjYXNlIFNldExvY2FsOiB7CisgICAg
ICAgICAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uID0gbm9kZS0+Y2hpbGQxKCktPnByZWRp
Y3Rpb24oKTsKKyAgICAgICAgICAgIGlmIChpc0RvdWJsZVNwZWN1bGF0aW9uKHByZWRpY3Rpb24p
KQorICAgICAgICAgICAgICAgIG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT52b3RlKFZvdGVE
b3VibGUpOworICAgICAgICAgICAgZWxzZSBpZiAoIWlzTnVtYmVyU3BlY3VsYXRpb24ocHJlZGlj
dGlvbikgfHwgaXNJbnQzMlNwZWN1bGF0aW9uKHByZWRpY3Rpb24pKQorICAgICAgICAgICAgICAg
IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT52b3RlKFZvdGVWYWx1ZSk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgY2FzZSBQ
dXRCeVZhbDoKLSAgICAgICAgICAgIGNhc2UgUHV0QnlWYWxBbGlhczogewotICAgICAgICAgICAg
ICAgIEVkZ2UgY2hpbGQxID0gbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKTsKLSAgICAgICAg
ICAgICAgICBFZGdlIGNoaWxkMiA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSk7Ci0gICAg
ICAgICAgICAgICAgRWRnZSBjaGlsZDMgPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpOwot
ICAgICAgICAgICAgICAgIG1fZ3JhcGgudm90ZShjaGlsZDEsIFZvdGVWYWx1ZSk7Ci0gICAgICAg
ICAgICAgICAgbV9ncmFwaC52b3RlKGNoaWxkMiwgVm90ZVZhbHVlKTsKLSAgICAgICAgICAgICAg
ICBzd2l0Y2ggKG5vZGUuYXJyYXlNb2RlKCkudHlwZSgpKSB7Ci0gICAgICAgICAgICAgICAgY2Fz
ZSBBcnJheTo6RG91YmxlOgotICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLnZvdGUoY2hpbGQz
LCBWb3RlRG91YmxlKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAg
ICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC52b3RlKGNoaWxkMywgVm90
ZVZhbHVlKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQor
ICAgICAgICBjYXNlIFB1dEJ5VmFsOgorICAgICAgICBjYXNlIFB1dEJ5VmFsQWxpYXM6IHsKKyAg
ICAgICAgICAgIEVkZ2UgY2hpbGQxID0gbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKTsKKyAg
ICAgICAgICAgIEVkZ2UgY2hpbGQyID0gbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKTsKKyAg
ICAgICAgICAgIEVkZ2UgY2hpbGQzID0gbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAyKTsKKyAg
ICAgICAgICAgIG1fZ3JhcGgudm90ZU5vZGUoY2hpbGQxLCBWb3RlVmFsdWUpOworICAgICAgICAg
ICAgbV9ncmFwaC52b3RlTm9kZShjaGlsZDIsIFZvdGVWYWx1ZSk7CisgICAgICAgICAgICBzd2l0
Y2ggKG5vZGUuYXJyYXlNb2RlKCkudHlwZSgpKSB7CisgICAgICAgICAgICBjYXNlIEFycmF5OjpE
b3VibGU6CisgICAgICAgICAgICAgICAgbV9ncmFwaC52b3RlTm9kZShjaGlsZDMsIFZvdGVEb3Vi
bGUpOwogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIAogICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBtX2dyYXBoLnZvdGUo
bm9kZSwgVm90ZVZhbHVlKTsKKyAgICAgICAgICAgICAgICBtX2dyYXBoLnZvdGVOb2RlKGNoaWxk
MywgVm90ZVZhbHVlKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgIG1fZ3JhcGgudm90ZUNoaWxkcmVuKG5vZGUsIFZvdGVWYWx1ZSk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICB2b2lkIGRvUm91
bmRPZkRvdWJsZVZvdGluZygpCisgICAgeworI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJ
T05fVkVSQk9TRSkKKyAgICAgICAgZGF0YUxvZ0YoIlZvdGluZyBvbiBkb3VibGUgdXNlcyBvZiBs
b2NhbHMgWyV1XVxuIiwgbV9jb3VudCk7CisjZW5kaWYKKyAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IG1fZ3JhcGgubV92YXJpYWJsZUFjY2Vzc0RhdGEuc2l6ZSgpOyArK2kpCisgICAg
ICAgICAgICBtX2dyYXBoLm1fdmFyaWFibGVBY2Nlc3NEYXRhW2ldLmZpbmQoKS0+Y2xlYXJWb3Rl
cygpOworICAgICAgICBmb3IgKEJhc2ljQmxvY2sgYmxvY2tJbmRleCA9IDA7IGkgPCBtX2dyYXBo
Lm1fYmxvY2tzLnNpemUoKTsgKytibG9ja0luZGV4KSB7CisgICAgICAgICAgICBCYXNpY0Jsb2Nr
KiBibG9jayA9IG1fZ3JhcGgubV9ibG9ja3NbYmxvY2tJbmRleF0uZ2V0KCk7CisgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYmxvY2stPnNpemUoKTsgKytpKSB7CisgICAgICAg
ICAgICAgICAgbV9jdXJyZW50Tm9kZSA9IGJsb2NrLT5hdChpKTsKKyAgICAgICAgICAgICAgICBk
b0RvdWJsZVZvdGluZyhtX2N1cnJlbnROb2RlKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQog
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9ncmFwaC5tX3ZhcmlhYmxlQWNjZXNz
RGF0YS5zaXplKCk7ICsraSkgewogICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJp
YWJsZUFjY2Vzc0RhdGEgPSAmbV9ncmFwaC5tX3ZhcmlhYmxlQWNjZXNzRGF0YVtpXTsKQEAgLTEw
MTIsNyArMTAzMyw3IEBAIHByaXZhdGU6CiAgICAgICAgIH0KICAgICB9CiAgICAgCi0gICAgTm9k
ZUluZGV4IG1fY29tcGlsZUluZGV4OworICAgIE5vZGUqIG1fY3VycmVudE5vZGU7CiAgICAgYm9v
bCBtX2NoYW5nZWQ7CiAKICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0Up
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Njb3JlQm9hcmQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Njb3JlQm9hcmQuaAkocmV2aXNp
b24gMTQwNjE2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTY29yZUJvYXJkLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQzLDkgKzQzLDggQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBERkcgewogLy8gYW5vdGhlciBub2RlLgogY2xhc3MgU2NvcmVCb2FyZCB7CiBwdWJsaWM6Ci0g
ICAgU2NvcmVCb2FyZChHcmFwaCYgZ3JhcGgsIGNvbnN0IEJpdFZlY3RvciYgdXNlZFZhcnMpCi0g
ICAgICAgIDogbV9ncmFwaChncmFwaCkKLSAgICAgICAgLCBtX2hpZ2hXYXRlcm1hcmsoMCkKKyAg
ICBTY29yZUJvYXJkKGNvbnN0IEJpdFZlY3RvciYgdXNlZFZhcnMpCisgICAgICAgIDogbV9oaWdo
V2F0ZXJtYXJrKDApCiAgICAgewogICAgICAgICBtX3VzZWQuZmlsbCgwLCB1c2VkVmFycy5zaXpl
KCkpOwogICAgICAgICBtX2ZyZWUucmVzZXJ2ZUNhcGFjaXR5KHVzZWRWYXJzLnNpemUoKSk7CkBA
IC0xMDIsMTQgKzEwMSwxMyBAQCBwdWJsaWM6CiAKICAgICAvLyBJbmNyZW1lbnQgdGhlIHVzZWNv
dW50IGZvciB0aGUgVmlydHVhbFJlZ3NpdGVyIGFzc29jaWF0ZWQgd2l0aCAnY2hpbGQnLAogICAg
IC8vIGlmIGl0IHJlYWNoZXMgdGhlIG5vZGUncyByZWZjb3VudCwgZnJlZSB0aGUgVmlydHVhbFJl
Z3NpdGVyLgotICAgIHZvaWQgdXNlKE5vZGVJbmRleCBjaGlsZCkKKyAgICB2b2lkIHVzZShOb2Rl
KiBjaGlsZCkKICAgICB7Ci0gICAgICAgIGlmIChjaGlsZCA9PSBOb05vZGUpCisgICAgICAgIGlm
ICghY2hpbGQpCiAgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgLy8gRmluZCB0aGUgdmly
dHVhbCByZWdpc3RlciBudW1iZXIgZm9yIHRoaXMgY2hpbGQsIGluY3JlbWVudCBpdHMgdXNlIGNv
dW50LgotICAgICAgICBOb2RlJiBub2RlID0gbV9ncmFwaFtjaGlsZF07Ci0gICAgICAgIHVpbnQz
Ml90IGluZGV4ID0gbm9kZS52aXJ0dWFsUmVnaXN0ZXIoKTsKKyAgICAgICAgdWludDMyX3QgaW5k
ZXggPSBub2RlLT52aXJ0dWFsUmVnaXN0ZXIoKTsKICAgICAgICAgQVNTRVJUKG1fdXNlZFtpbmRl
eF0gIT0gbWF4KCkpOwogICAgICAgICBpZiAobm9kZS5yZWZDb3VudCgpID09ICsrbV91c2VkW2lu
ZGV4XSkgewogI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKQEAgLTEy
MiwyMCArMTIwLDIwIEBAIHB1YmxpYzoKICAgICAgICAgICAgIG1fZnJlZS5hcHBlbmQoaW5kZXgp
OwogICAgICAgICB9IGVsc2UgewogI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVS
Qk9TRSkKLSAgICAgICAgICAgIGRhdGFMb2dGKCIgVmlydHVhbCByZWdpc3RlciAldSBpcyBhdCAl
dS8ldSB1c2VzLiIsIGluZGV4LCBtX3VzZWRbaW5kZXhdLCBub2RlLnJlZkNvdW50KCkpOworICAg
ICAgICAgICAgZGF0YUxvZ0YoIiBWaXJ0dWFsIHJlZ2lzdGVyICV1IGlzIGF0ICV1LyV1IHVzZXMu
IiwgaW5kZXgsIG1fdXNlZFtpbmRleF0sIG5vZGUtPnJlZkNvdW50KCkpOwogI2VuZGlmCiAgICAg
ICAgIH0KICAgICB9CiAgICAgdm9pZCB1c2UoRWRnZSBjaGlsZCkKICAgICB7Ci0gICAgICAgIHVz
ZShjaGlsZC5pbmRleFVuY2hlY2tlZCgpKTsKKyAgICAgICAgdXNlKGNoaWxkLm5vZGUoKSk7CiAg
ICAgfQogICAgIAogICAgIHZvaWQgdXNlSWZIYXNSZXN1bHQoRWRnZSBjaGlsZCkKICAgICB7CiAg
ICAgICAgIGlmICghY2hpbGQpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGlmICghbV9n
cmFwaFtjaGlsZF0uaGFzUmVzdWx0KCkpCisgICAgICAgIGlmICghY2hpbGQtPmhhc1Jlc3VsdCgp
KQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB1c2UoY2hpbGQpOwogICAgIH0KQEAgLTE3
NSw5ICsxNzMsNiBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIHN0YXRpYyB1aW50MzJfdCBtYXgo
KSB7IHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCk7IH0KICAgICAK
LSAgICAvLyBUaGUgZ3JhcGgsIHNvIHdlIGNhbiBnZXQgcmVmQ291bnRzIGZvciBub2RlcywgdG8g
ZGV0ZXJtaW5lIHdoZW4gdmFsdWVzIGFyZSBkZWFkLgotICAgIEdyYXBoJiBtX2dyYXBoOwotICAg
IAogICAgIC8vIFRoZSBzaXplIG9mIHRoZSBzcGFuIG9mIHZpcnR1YWwgcmVnaXN0ZXJzIHRoYXQg
dGhpcyBjb2RlIGJsb2NrIHdpbGwgdXNlLgogICAgIHVuc2lnbmVkIG1faGlnaFdhdGVybWFyazsK
ICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RydWN0dXJlQWJzdHJh
Y3RWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Ry
dWN0dXJlQWJzdHJhY3RWYWx1ZS5oCShyZXZpc2lvbiAxNDA2MTYpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1N0cnVjdHVyZUFic3RyYWN0VmFsdWUuaAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTIgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEyLCAyMDEz
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtMzE0LDYgKzMxNCw4IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgc3RhdGlj
IFN0cnVjdHVyZSogdG9wVmFsdWUoKSB7IHJldHVybiByZWludGVycHJldF9jYXN0PFN0cnVjdHVy
ZSo+KDEpOyB9CiAgICAgCisgICAgLy8gTkIuIFRoaXMgbXVzdCBoYXZlIGEgdHJpdmlhbCBkZXN0
cnVjdG9yLgorICAgIAogICAgIC8vIFRoaXMgY2FuIG9ubHkgcmVtZW1iZXIgb25lIHN0cnVjdHVy
ZSBhdCBhIHRpbWUuCiAgICAgU3RydWN0dXJlKiBtX3N0cnVjdHVyZTsKIH07CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0cnVjdHVyZUNoZWNrSG9pc3RpbmdQaGFzZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJ1Y3R1cmVDaGVj
a0hvaXN0aW5nUGhhc2UuY3BwCShyZXZpc2lvbiAxNDA2MTYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1N0cnVjdHVyZUNoZWNrSG9pc3RpbmdQaGFzZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTY0LDIzICs2NCwyMiBAQCBwdWJsaWM6CiAgICAgICAgICAgICBpZiAoIWJsb2NrKQog
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbmRl
eEluQmxvY2sgPSAwOyBpbmRleEluQmxvY2sgPCBibG9jay0+c2l6ZSgpOyArK2luZGV4SW5CbG9j
aykgewotICAgICAgICAgICAgICAgIE5vZGVJbmRleCBub2RlSW5kZXggPSBibG9jay0+YXQoaW5k
ZXhJbkJsb2NrKTsKLSAgICAgICAgICAgICAgICBOb2RlJiBub2RlID0gbV9ncmFwaFtub2RlSW5k
ZXhdOwotICAgICAgICAgICAgICAgIGlmICghbm9kZS5zaG91bGRHZW5lcmF0ZSgpKQorICAgICAg
ICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+YXQoaW5kZXhJbkJsb2NrKTsKKyAgICAgICAg
ICAgICAgICBpZiAoIW5vZGUtPnNob3VsZEdlbmVyYXRlKCkpCiAgICAgICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIHN3aXRjaCAobm9kZS5vcCgpKSB7CisgICAgICAg
ICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CiAgICAgICAgICAgICAgICAgY2FzZSBDaGVj
a1N0cnVjdHVyZToKICAgICAgICAgICAgICAgICBjYXNlIFN0cnVjdHVyZVRyYW5zaXRpb25XYXRj
aHBvaW50OiB7Ci0gICAgICAgICAgICAgICAgICAgIE5vZGUmIGNoaWxkID0gbV9ncmFwaFtub2Rl
LmNoaWxkMSgpXTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkLm9wKCkgIT0gR2V0TG9j
YWwpCisgICAgICAgICAgICAgICAgICAgIE5vZGUqIGNoaWxkID0gbm9kZS0+Y2hpbGQxKCkubm9k
ZSgpOworICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGQtPm9wKCkgIT0gR2V0TG9jYWwpCiAg
ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgVmFyaWFi
bGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IGNoaWxkLnZhcmlhYmxlQWNjZXNzRGF0YSgpOworICAg
ICAgICAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gY2hpbGQtPnZh
cmlhYmxlQWNjZXNzRGF0YSgpOwogICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS0+dm90ZShW
b3RlU3RydWN0dXJlQ2hlY2spOwogICAgICAgICAgICAgICAgICAgICBpZiAodmFyaWFibGUtPmlz
Q2FwdHVyZWQoKSB8fCB2YXJpYWJsZS0+c3RydWN0dXJlQ2hlY2tIb2lzdGluZ0ZhaWxlZCgpKQog
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIGlmICgh
aXNDZWxsU3BlY3VsYXRpb24odmFyaWFibGUtPnByZWRpY3Rpb24oKSkpCiAgICAgICAgICAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgbm90aWNlU3RydWN0dXJlQ2hl
Y2sodmFyaWFibGUsIG5vZGUuc3RydWN0dXJlU2V0KCkpOworICAgICAgICAgICAgICAgICAgICBu
b3RpY2VTdHJ1Y3R1cmVDaGVjayh2YXJpYWJsZSwgbm9kZS0+c3RydWN0dXJlU2V0KCkpOwogICAg
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICAgICAgIApAQCAtMTA5LDEzICsxMDgsMTMgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAg
ICAKICAgICAgICAgICAgICAgICBjYXNlIEFycmF5aWZ5VG9TdHJ1Y3R1cmU6CiAgICAgICAgICAg
ICAgICAgY2FzZSBBcnJheWlmeToKLSAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUuYXJyYXlN
b2RlKCkuY29udmVyc2lvbigpID09IEFycmF5OjpSYWdlQ29udmVydCkgeworICAgICAgICAgICAg
ICAgICAgICBpZiAobm9kZS0+YXJyYXlNb2RlKCkuY29udmVyc2lvbigpID09IEFycmF5OjpSYWdl
Q29udmVydCkgewogICAgICAgICAgICAgICAgICAgICAgICAgLy8gUmFnZSBjb252ZXJzaW9uIGNo
YW5nZXMgc3RydWN0dXJlcy4gV2Ugc2hvdWxkIGF2b2lkIHR5aW5nIHRvIGRvCiAgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBhbnkga2luZCBvZiBob2lzdGluZyB3aGVuIHJhZ2UgY29udmVyc2lv
biBpcyBpbiBwbGF5LgotICAgICAgICAgICAgICAgICAgICAgICAgTm9kZSYgY2hpbGQgPSBtX2dy
YXBoW25vZGUuY2hpbGQxKCldOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkLm9w
KCkgIT0gR2V0TG9jYWwpCisgICAgICAgICAgICAgICAgICAgICAgICBOb2RlKiBjaGlsZCA9IG5v
ZGUtPmNoaWxkMSgpLm5vZGV4KCk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGQt
Pm9wKCkgIT0gR2V0TG9jYWwpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gY2hp
bGQudmFyaWFibGVBY2Nlc3NEYXRhKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBWYXJpYWJs
ZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gY2hpbGQtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOwogICAg
ICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUtPnZvdGUoVm90ZU90aGVyKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICh2YXJpYWJsZS0+aXNDYXB0dXJlZCgpIHx8IHZhcmlhYmxlLT5z
dHJ1Y3R1cmVDaGVja0hvaXN0aW5nRmFpbGVkKCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CkBAIC0xMzAsMzAgKzEyOSwyOSBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAg
ICAgIC8vIGtpbmQgb2YgQ2hlY2tTdHJ1Y3R1cmUsIHRoZW4gd2Ugc2hvdWxkIG5vdGljZSB0aGVt
IHRvIGVuc3VyZSB0aGF0CiAgICAgICAgICAgICAgICAgICAgIC8vIHdlJ3JlIG5vdCBob2lzdGlu
ZyBhIGNoZWNrIHRoYXQgd291bGQgY29udHJhdmVuZSBjaGVja3MgdGhhdCBhcmUKICAgICAgICAg
ICAgICAgICAgICAgLy8gYWxyZWFkeSBiZWluZyBwZXJmb3JtZWQuCi0gICAgICAgICAgICAgICAg
ICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBub2RlLnZhcmlhYmxlQWNjZXNzRGF0
YSgpOworICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0g
bm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CiAgICAgICAgICAgICAgICAgICAgIGlmICh2YXJp
YWJsZS0+aXNDYXB0dXJlZCgpIHx8IHZhcmlhYmxlLT5zdHJ1Y3R1cmVDaGVja0hvaXN0aW5nRmFp
bGVkKCkpCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAg
ICAgaWYgKCFpc0NlbGxTcGVjdWxhdGlvbih2YXJpYWJsZS0+cHJlZGljdGlvbigpKSkKICAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBOb2RlSW5kZXgg
c291cmNlID0gbm9kZS5jaGlsZDEoKS5pbmRleCgpOworICAgICAgICAgICAgICAgICAgICBOb2Rl
KiBzb3VyY2UgPSBub2RlLT5jaGlsZDEoKS5ub2RlKCk7CiAgICAgICAgICAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgc3ViSW5kZXhJbkJsb2NrID0gMDsgc3ViSW5kZXhJbkJsb2NrIDwgYmxvY2st
PnNpemUoKTsgKytzdWJJbmRleEluQmxvY2spIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIE5v
ZGVJbmRleCBzdWJOb2RlSW5kZXggPSBibG9jay0+YXQoc3ViSW5kZXhJbkJsb2NrKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIE5vZGUmIHN1Yk5vZGUgPSBtX2dyYXBoW3N1Yk5vZGVJbmRleF07
Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXN1Yk5vZGUuc2hvdWxkR2VuZXJhdGUoKSkK
KyAgICAgICAgICAgICAgICAgICAgICAgIE5vZGUqIHN1Yk5vZGUgPSBibG9jay0+YXQoc3ViSW5k
ZXhJbkJsb2NrKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghc3ViTm9kZS0+c2hvdWxk
R2VuZXJhdGUoKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoc3ViTm9kZS5vcCgpKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICBzd2l0Y2ggKHN1Yk5vZGUtPm9wKCkpIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgIGNhc2UgQ2hlY2tTdHJ1Y3R1cmU6IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoc3ViTm9kZS5jaGlsZDEoKS5pbmRleCgpICE9IHNvdXJjZSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoc3ViTm9kZS0+Y2hpbGQxKCkgIT0gc291cmNlKQogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3RpY2VTdHJ1Y3R1cmVDaGVjayh2YXJpYWJs
ZSwgc3ViTm9kZS5zdHJ1Y3R1cmVTZXQoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bm90aWNlU3RydWN0dXJlQ2hlY2sodmFyaWFibGUsIHN1Yk5vZGUtPnN0cnVjdHVyZVNldCgpKTsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgU3RydWN0dXJlVHJhbnNpdGlvbldh
dGNocG9pbnQ6IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3ViTm9kZS5jaGls
ZDEoKS5pbmRleCgpICE9IHNvdXJjZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
c3ViTm9kZS0+Y2hpbGQxKCkgIT0gc291cmNlKQogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBub3RpY2VTdHJ1Y3R1cmVDaGVjayh2YXJpYWJsZSwgc3ViTm9kZS5zdHJ1
Y3R1cmUoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm90aWNlU3RydWN0dXJlQ2hl
Y2sodmFyaWFibGUsIHN1Yk5vZGUtPnN0cnVjdHVyZSgpKTsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICAgICAgICAgIGRlZmF1bHQ6CkBAIC0xNjEsMTQgKzE1OSwxNCBAQCBwdWJsaWM6CiAgICAgICAg
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICAgICAgCi0gICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgudm90ZShub2RlLCBWb3RlT3RoZXIp
OworICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLnZvdGVDaGlsZHJlbihub2RlLCBWb3RlT3Ro
ZXIpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICAgY2FzZSBHYXJiYWdlVmFsdWU6CiAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAg
ICAgICAgICAgICAgICBtX2dyYXBoLnZvdGUobm9kZSwgVm90ZU90aGVyKTsKKyAgICAgICAgICAg
ICAgICAgICAgbV9ncmFwaC52b3RlQ2hpbGRyZW4obm9kZSwgVm90ZU90aGVyKTsKICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQpAQCAt
MjA5LDEwICsyMDcsMTAgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAg
ICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2dyYXBoLm1fbXVzdEhhbmRsZVZhbHVl
cy5zaXplKCk7ICsraSkgewogICAgICAgICAgICAgICAgIGludCBvcGVyYW5kID0gbV9ncmFwaC5t
X211c3RIYW5kbGVWYWx1ZXMub3BlcmFuZEZvckluZGV4KGkpOwotICAgICAgICAgICAgICAgIE5v
ZGVJbmRleCBub2RlSW5kZXggPSBibG9jay0+dmFyaWFibGVzQXRIZWFkLm9wZXJhbmQob3BlcmFu
ZCk7Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGVJbmRleCA9PSBOb05vZGUpCisgICAgICAgICAg
ICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT52YXJpYWJsZXNBdEhlYWQub3BlcmFuZChvcGVyYW5k
KTsKKyAgICAgICAgICAgICAgICBpZiAoIW5vZGUpCiAgICAgICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwotICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBtX2dy
YXBoW25vZGVJbmRleF0udmFyaWFibGVBY2Nlc3NEYXRhKCk7CisgICAgICAgICAgICAgICAgVmFy
aWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOwog
ICAgICAgICAgICAgICAgIEhhc2hNYXA8VmFyaWFibGVBY2Nlc3NEYXRhKiwgQ2hlY2tEYXRhPjo6
aXRlcmF0b3IgaXRlciA9IG1fbWFwLmZpbmQodmFyaWFibGUpOwogICAgICAgICAgICAgICAgIGlm
IChpdGVyID09IG1fbWFwLmVuZCgpKQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKQEAg
LTI2NSw0OCArMjYzLDQ3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIGlmICghYmxvY2spCiAgICAg
ICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGluZGV4SW5C
bG9jayA9IDA7IGluZGV4SW5CbG9jayA8IGJsb2NrLT5zaXplKCk7ICsraW5kZXhJbkJsb2NrKSB7
Ci0gICAgICAgICAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRleCA9IGJsb2NrLT5hdChpbmRleElu
QmxvY2spOwotICAgICAgICAgICAgICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW25vZGVJbmRleF07
CisgICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5hdChpbmRleEluQmxvY2spOwog
ICAgICAgICAgICAgICAgIC8vIEJlIGNhcmVmdWwgbm90IHRvIHVzZSAnbm9kZScgYWZ0ZXIgYXBw
ZW5kaW5nIHRvIHRoZSBncmFwaC4gSW4gdGhvc2Ugc3dpdGNoCiAgICAgICAgICAgICAgICAgLy8g
Y2FzZXMgd2hlcmUgd2UgbmVlZCB0byBhcHBlbmQsIHdlIGZpcnN0IGNhcmVmdWxseSBleHRyYWN0
IGV2ZXJ5dGhpbmcgd2UgbmVlZAogICAgICAgICAgICAgICAgIC8vIGZyb20gdGhlIG5vZGUsIGJl
Zm9yZSBkb2luZyBhbnkgYXBwZW5kaW5nLgotICAgICAgICAgICAgICAgIGlmICghbm9kZS5zaG91
bGRHZW5lcmF0ZSgpKQorICAgICAgICAgICAgICAgIGlmICghbm9kZS0+c2hvdWxkR2VuZXJhdGUo
KSkKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgc3dpdGNo
IChub2RlLm9wKCkpIHsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKICAg
ICAgICAgICAgICAgICBjYXNlIFNldEFyZ3VtZW50OiB7CiAgICAgICAgICAgICAgICAgICAgIEFT
U0VSVCghYmxvY2tJbmRleCk7CiAgICAgICAgICAgICAgICAgICAgIC8vIEluc2VydCBhIEdldExv
Y2FsIGFuZCBhIENoZWNrU3RydWN0dXJlIGltbWVkaWF0ZWx5IGZvbGxvd2luZyB0aGlzCiAgICAg
ICAgICAgICAgICAgICAgIC8vIFNldEFyZ3VtZW50LCBpZiB0aGUgdmFyaWFibGUgd2FzIGEgY2Fu
ZGlkYXRlIGZvciBzdHJ1Y3R1cmUgaG9pc3RpbmcuCiAgICAgICAgICAgICAgICAgICAgIC8vIElm
IHRoZSBiYXNpYyBibG9jayBwcmV2aW91c2x5IG9ubHkgaGFkIHRoZSBTZXRBcmd1bWVudCBhcyBp
dHMKICAgICAgICAgICAgICAgICAgICAgLy8gdmFyaWFibGUtYXQtdGFpbCwgdGhlbiByZXBsYWNl
IGl0IHdpdGggdGhpcyBHZXRMb2NhbC4KLSAgICAgICAgICAgICAgICAgICAgVmFyaWFibGVBY2Nl
c3NEYXRhKiB2YXJpYWJsZSA9IG5vZGUudmFyaWFibGVBY2Nlc3NEYXRhKCk7CisgICAgICAgICAg
ICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBub2RlLT52YXJpYWJsZUFj
Y2Vzc0RhdGEoKTsKICAgICAgICAgICAgICAgICAgICAgSGFzaE1hcDxWYXJpYWJsZUFjY2Vzc0Rh
dGEqLCBDaGVja0RhdGE+OjppdGVyYXRvciBpdGVyID0gbV9tYXAuZmluZCh2YXJpYWJsZSk7CiAg
ICAgICAgICAgICAgICAgICAgIGlmIChpdGVyID09IG1fbWFwLmVuZCgpKQogICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIGlmICghaXRlci0+dmFsdWUu
bV9zdHJ1Y3R1cmUpCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
ICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIENvZGVPcmlnaW4gY29kZU9yaWdpbiA9IG5v
ZGUuY29kZU9yaWdpbjsKKyAgICAgICAgICAgICAgICAgICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2lu
ID0gbm9kZS0+Y29kZU9yaWdpbjsKICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAg
ICAgICAgIE5vZGVJbmRleCBnZXRMb2NhbEluZGV4ID0gaW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUo
CisgICAgICAgICAgICAgICAgICAgIE5vZGUqIGdldExvY2FsID0gaW5zZXJ0aW9uU2V0Lmluc2Vy
dE5vZGUoCiAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleEluQmxvY2sgKyAxLCBEb250UmVm
Q2hpbGRyZW4sIERvbnRSZWZOb2RlLCB2YXJpYWJsZS0+cHJlZGljdGlvbigpLAotICAgICAgICAg
ICAgICAgICAgICAgICAgR2V0TG9jYWwsIGNvZGVPcmlnaW4sIE9wSW5mbyh2YXJpYWJsZSksIG5v
ZGVJbmRleCk7CisgICAgICAgICAgICAgICAgICAgICAgICBHZXRMb2NhbCwgY29kZU9yaWdpbiwg
T3BJbmZvKHZhcmlhYmxlKSwgbm9kZSk7CiAgICAgICAgICAgICAgICAgICAgIGluc2VydGlvblNl
dC5pbnNlcnROb2RlKAogICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhJbkJsb2NrICsgMSwg
UmVmQ2hpbGRyZW4sIERvbnRSZWZOb2RlLCBTcGVjTm9uZSwgQ2hlY2tTdHJ1Y3R1cmUsCiAgICAg
ICAgICAgICAgICAgICAgICAgICBjb2RlT3JpZ2luLCBPcEluZm8obV9ncmFwaC5hZGRTdHJ1Y3R1
cmVTZXQoaXRlci0+dmFsdWUubV9zdHJ1Y3R1cmUpKSwKICAgICAgICAgICAgICAgICAgICAgICAg
IGdldExvY2FsSW5kZXgpOwogCi0gICAgICAgICAgICAgICAgICAgIGlmIChibG9jay0+dmFyaWFi
bGVzQXRUYWlsLm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpID09IG5vZGVJbmRleCkKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGJsb2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZCh2YXJpYWJs
ZS0+bG9jYWwoKSkgPSBnZXRMb2NhbEluZGV4OworICAgICAgICAgICAgICAgICAgICBpZiAoYmxv
Y2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSA9PSBub2RlKQor
ICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKHZh
cmlhYmxlLT5sb2NhbCgpKSA9IGdldExvY2FsOwogICAgICAgICAgICAgICAgICAgICAKLSAgICAg
ICAgICAgICAgICAgICAgbV9ncmFwaC5zdWJzdGl0dXRlR2V0TG9jYWwoKmJsb2NrLCBpbmRleElu
QmxvY2ssIHZhcmlhYmxlLCBnZXRMb2NhbEluZGV4KTsKKyAgICAgICAgICAgICAgICAgICAgbV9n
cmFwaC5zdWJzdGl0dXRlR2V0TG9jYWwoKmJsb2NrLCBpbmRleEluQmxvY2ssIHZhcmlhYmxlLCBn
ZXRMb2NhbCk7CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICBjaGFu
Z2VkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBjYXNlIFNldExvY2FsOiB7
Ci0gICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBub2Rl
LnZhcmlhYmxlQWNjZXNzRGF0YSgpOworICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vz
c0RhdGEqIHZhcmlhYmxlID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CiAgICAgICAgICAg
ICAgICAgICAgIEhhc2hNYXA8VmFyaWFibGVBY2Nlc3NEYXRhKiwgQ2hlY2tEYXRhPjo6aXRlcmF0
b3IgaXRlciA9IG1fbWFwLmZpbmQodmFyaWFibGUpOwogICAgICAgICAgICAgICAgICAgICBpZiAo
aXRlciA9PSBtX21hcC5lbmQoKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAt
MzE3LDggKzMxNCw4IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgLy8gYmUgZHJvcHBl
ZCBpbnRvIHRoaXMgYnl0ZWNvZGUgdmFyaWFibGUgaWYgdGhlIENoZWNrU3RydWN0dXJlIGRlY2lk
ZXMKICAgICAgICAgICAgICAgICAgICAgLy8gdG8gZXhpdC4KICAgICAgICAgICAgICAgICAgICAg
Ci0gICAgICAgICAgICAgICAgICAgIENvZGVPcmlnaW4gY29kZU9yaWdpbiA9IG5vZGUuY29kZU9y
aWdpbjsKLSAgICAgICAgICAgICAgICAgICAgTm9kZUluZGV4IGNoaWxkMSA9IG5vZGUuY2hpbGQx
KCkuaW5kZXgoKTsKKyAgICAgICAgICAgICAgICAgICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2luID0g
bm9kZS0+Y29kZU9yaWdpbjsKKyAgICAgICAgICAgICAgICAgICAgTm9kZSogY2hpbGQxID0gbm9k
ZS0+Y2hpbGQxKCkubm9kZSgpOwogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAg
ICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCiAgICAgICAgICAgICAgICAgICAgICAgICBp
bmRleEluQmxvY2ssIERvbnRSZWZDaGlsZHJlbiwgRG9udFJlZk5vZGUsIFNwZWNOb25lLCBTZXRM
b2NhbCwgY29kZU9yaWdpbiwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFs
aWRhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFs
aWRhdGUuY3BwCShyZXZpc2lvbiAxNDA2MTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1ZhbGlkYXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODAsNDAgKzgwLDQzIEBAIHB1Ymxp
YzoKICAgICAgICAgLy8gVmFsaWRhdGUgdGhhdCBhbGwgbG9jYWwgdmFyaWFibGVzIGF0IHRoZSBo
ZWFkIG9mIHRoZSByb290IGJsb2NrIGFyZSBkZWFkLgogICAgICAgICBCYXNpY0Jsb2NrKiByb290
ID0gbV9ncmFwaC5tX2Jsb2Nrc1swXS5nZXQoKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IHJvb3QtPnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkxvY2FscygpOyArK2kpCi0gICAg
ICAgICAgICBWX0VRVUFMKChzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KGkpLCAwKSwgTm9O
b2RlLCByb290LT52YXJpYWJsZXNBdEhlYWQubG9jYWwoaSkpOworICAgICAgICAgICAgVl9FUVVB
TCgoc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihpKSwgMCksIDAsIHJvb3QtPnZhcmlhYmxl
c0F0SGVhZC5sb2NhbChpKSk7CiAgICAgICAgIAogICAgICAgICAvLyBWYWxpZGF0ZSByZWYgY291
bnRzIGFuZCB1c2VzLgotICAgICAgICBWZWN0b3I8dW5zaWduZWQ+IG15UmVmQ291bnRzOwotICAg
ICAgICBteVJlZkNvdW50cy5maWxsKDAsIG1fZ3JhcGguc2l6ZSgpKTsKLSAgICAgICAgQml0VmVj
dG9yIGFjY2VwdGFibGVOb2RlSW5kaWNlczsKKyAgICAgICAgSGFzaE1hcDxOb2RlKiwgdW5zaWdu
ZWQ+IG15UmVmQ291bnRzOwogICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7
IGJsb2NrSW5kZXggPCBtX2dyYXBoLm1fYmxvY2tzLnNpemUoKTsgKytibG9ja0luZGV4KSB7CiAg
ICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGgubV9ibG9ja3NbYmxvY2tJbmRl
eF0uZ2V0KCk7Ci0gICAgICAgICAgICBpZiAoIWJsb2NrKQorICAgICAgICAgICAgaWYgKCFibG9j
ayB8fCAhYmxvY2stPmlzUmVhY2hhYmxlKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAg
ICAgICAgICAgaWYgKCFibG9jay0+aXNSZWFjaGFibGUpCisgICAgICAgICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IGJsb2NrLT5udW1Ob2RlcygpOyArK2kpCisgICAgICAgICAgICAgICAgbXlS
ZWZDb3VudHMuYWRkKGJsb2NrLT5ub2RlKGkpLCAwKTsKKyAgICAgICAgfQorICAgICAgICBIYXNo
U2V0PE5vZGUqPiBhY2NlcHRhYmxlTm9kZXM7CisgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9j
a0luZGV4ID0gMDsgYmxvY2tJbmRleCA8IG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgpOyArK2Jsb2Nr
SW5kZXgpIHsKKyAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5tX2Jsb2Nr
c1tibG9ja0luZGV4XS5nZXQoKTsKKyAgICAgICAgICAgIGlmICghYmxvY2sgfHwgIWJsb2NrLT5p
c1JlYWNoYWJsZSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgYmxvY2stPm51bU5vZGVzKCk7ICsraSkgewotICAgICAgICAgICAg
ICAgIE5vZGVJbmRleCBub2RlSW5kZXggPSBibG9jay0+bm9kZUluZGV4KGkpOwotICAgICAgICAg
ICAgICAgIGFjY2VwdGFibGVOb2RlSW5kaWNlcy5zZXQobm9kZUluZGV4KTsKLSAgICAgICAgICAg
ICAgICBOb2RlJiBub2RlID0gbV9ncmFwaFtub2RlSW5kZXhdOwotICAgICAgICAgICAgICAgIGlm
ICghbm9kZS5zaG91bGRHZW5lcmF0ZSgpKQorICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBi
bG9jay0+bm9kZShpKTsKKyAgICAgICAgICAgICAgICBhY2NlcHRhYmxlTm9kZXMuYWRkKG5vZGUp
OworICAgICAgICAgICAgICAgIGlmICghbm9kZS0+c2hvdWxkR2VuZXJhdGUoKSkKICAgICAgICAg
ICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0g
MDsgaiA8IG1fZ3JhcGgubnVtQ2hpbGRyZW4obm9kZSk7ICsraikgewogICAgICAgICAgICAgICAg
ICAgICBFZGdlIGVkZ2UgPSBtX2dyYXBoLmNoaWxkKG5vZGUsIGopOwogICAgICAgICAgICAgICAg
ICAgICBpZiAoIWVkZ2UpCiAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAg
ICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIG15UmVmQ291bnRzW2VkZ2UuaW5k
ZXgoKV0rKzsKKyAgICAgICAgICAgICAgICAgICAgbXlSZWZDb3VudHMuZmluZChlZGdlLm5vZGUo
KSktPnZhbHVlKys7CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAv
LyBVbmxlc3MgSSdtIGEgRmx1c2gsIFBoYW50b20sIEdldExvY2FsLCBvciBQaGksIG15IGNoaWxk
cmVuIHNob3VsZCBoYXNSZXN1bHQoKS4KLSAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChub2Rl
Lm9wKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CiAgICAg
ICAgICAgICAgICAgICAgIGNhc2UgRmx1c2g6CiAgICAgICAgICAgICAgICAgICAgIGNhc2UgUGhh
bnRvbToKICAgICAgICAgICAgICAgICAgICAgY2FzZSBHZXRMb2NhbDoKICAgICAgICAgICAgICAg
ICAgICAgY2FzZSBQaGk6CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChu
b2RlSW5kZXgsIGVkZ2UpLCBtX2dyYXBoW2VkZ2VdLmhhc1Jlc3VsdCgpKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIFZBTElEQVRFKChub2RlLCBlZGdlKSwgZWRnZS0+aGFzUmVzdWx0KCkpOwog
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgICB9CkBAIC0xMjEsNTQgKzEyNCw1MCBAQCBwdWJsaWM6CiAgICAgICAgIH0K
ICAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9n
cmFwaC5tX2Jsb2Nrcy5zaXplKCk7ICsrYmxvY2tJbmRleCkgewogICAgICAgICAgICAgQmFzaWNC
bG9jayogYmxvY2sgPSBtX2dyYXBoLm1fYmxvY2tzW2Jsb2NrSW5kZXhdLmdldCgpOwotICAgICAg
ICAgICAgaWYgKCFibG9jaykKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAg
IGlmICghYmxvY2stPmlzUmVhY2hhYmxlKQorICAgICAgICAgICAgaWYgKCFibG9jayB8fCAhYmxv
Y2stPmlzUmVhY2hhYmxlKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAg
Ci0gICAgICAgICAgICBCaXRWZWN0b3IgcGhpc0luVGhpc0Jsb2NrOwotICAgICAgICAgICAgQml0
VmVjdG9yIG5vZGVzSW5UaGlzQmxvY2s7CisgICAgICAgICAgICBIYXNoU2V0PE5vZGUqPiBwaGlz
SW5UaGlzQmxvY2s7CisgICAgICAgICAgICBIYXNoU2V0PE5vZGUqPiBub2Rlc0luVGhpc0Jsb2Nr
OwogICAgICAgICAgICAgCiAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGJsb2Nr
LT5udW1Ob2RlcygpOyArK2kpIHsKLSAgICAgICAgICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4
ID0gYmxvY2stPm5vZGVJbmRleChpKTsKLSAgICAgICAgICAgICAgICBOb2RlJiBub2RlID0gbV9n
cmFwaFtub2RlSW5kZXhdOwotICAgICAgICAgICAgICAgIG5vZGVzSW5UaGlzQmxvY2suc2V0KG5v
ZGVJbmRleCk7CisgICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5ub2RlKGkpOwor
ICAgICAgICAgICAgICAgIG5vZGVzSW5UaGlzQmxvY2suYWRkKG5vZGUpOwogICAgICAgICAgICAg
ICAgIGlmIChibG9jay0+aXNQaGlJbmRleChpKSkKLSAgICAgICAgICAgICAgICAgICAgcGhpc0lu
VGhpc0Jsb2NrLnNldChub2RlSW5kZXgpOwotICAgICAgICAgICAgICAgIFZfRVFVQUwoKG5vZGVJ
bmRleCksIG15UmVmQ291bnRzW25vZGVJbmRleF0sIG5vZGUuYWRqdXN0ZWRSZWZDb3VudCgpKTsK
KyAgICAgICAgICAgICAgICAgICAgcGhpc0luVGhpc0Jsb2NrLmFkZChub2RlKTsKKyAgICAgICAg
ICAgICAgICBWX0VRVUFMKChub2RlKSwgbXlSZWZDb3VudHMuZ2V0KG5vZGVJbmRleCksIG5vZGUu
YWRqdXN0ZWRSZWZDb3VudCgpKTsKICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSAw
OyBqIDwgbV9ncmFwaC5udW1DaGlsZHJlbihub2RlKTsgKytqKSB7CiAgICAgICAgICAgICAgICAg
ICAgIEVkZ2UgZWRnZSA9IG1fZ3JhcGguY2hpbGQobm9kZSwgaik7CiAgICAgICAgICAgICAgICAg
ICAgIGlmICghZWRnZSkKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAg
ICAgICAgICAgICAgICBWQUxJREFURSgobm9kZUluZGV4LCBlZGdlKSwgYWNjZXB0YWJsZU5vZGVJ
bmRpY2VzLmdldChlZGdlLmluZGV4KCkpKTsKKyAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUo
KG5vZGUsIGVkZ2UpLCBhY2NlcHRhYmxlTm9kZUluZGljZXMuY29udGFpbnMoZWRnZS5ub2RlKCkp
KTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAg
ICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYmxvY2stPnBoaXMuc2l6ZSgpOyArK2kpIHsK
LSAgICAgICAgICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4ID0gYmxvY2stPnBoaXNbaV07Ci0g
ICAgICAgICAgICAgICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhbbm9kZUluZGV4XTsKLSAgICAgICAg
ICAgICAgICBBU1NFUlQocGhpc0luVGhpc0Jsb2NrLmdldChub2RlSW5kZXgpKTsKLSAgICAgICAg
ICAgICAgICBWQUxJREFURSgobm9kZUluZGV4KSwgbm9kZS5vcCgpID09IFBoaSk7Ci0gICAgICAg
ICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGxvY2FsID0gbm9kZS5sb2NhbCgpOworICAgICAgICAg
ICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+cGhpc1tpXTsKKyAgICAgICAgICAgICAgICBBU1NF
UlQocGhpc0luVGhpc0Jsb2NrLmNvbnRhaW5zKG5vZGUpKTsKKyAgICAgICAgICAgICAgICBWQUxJ
REFURSgobm9kZSksIG5vZGUtPm9wKCkgPT0gUGhpKTsKKyAgICAgICAgICAgICAgICBWaXJ0dWFs
UmVnaXN0ZXIgbG9jYWwgPSBub2RlLT5sb2NhbCgpOwogICAgICAgICAgICAgICAgIGZvciAodW5z
aWduZWQgaiA9IDA7IGogPCBtX2dyYXBoLm51bUNoaWxkcmVuKG5vZGUpOyArK2opIHsKICAgICAg
ICAgICAgICAgICAgICAgRWRnZSBlZGdlID0gbV9ncmFwaC5jaGlsZChub2RlLCBqKTsKICAgICAg
ICAgICAgICAgICAgICAgaWYgKCFlZGdlKQogICAgICAgICAgICAgICAgICAgICAgICAgY29udGlu
dWU7CiAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgo
bm9kZUluZGV4LCBlZGdlKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaFtl
ZGdlXS5vcCgpID09IFNldExvY2FsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IG1f
Z3JhcGhbZWRnZV0ub3AoKSA9PSBTZXRBcmd1bWVudAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB8fCBtX2dyYXBoW2VkZ2VdLm9wKCkgPT0gRmx1c2gKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfHwgbV9ncmFwaFtlZGdlXS5vcCgpID09IFBoaSk7CisgICAgICAgICAgICAgICAg
ICAgIFZBTElEQVRFKChub2RlLCBlZGdlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZWRnZS0+b3AoKSA9PSBTZXRMb2NhbAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBl
ZGdlLT5vcCgpID09IFNldEFyZ3VtZW50CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8
IGVkZ2UtPm9wKCkgPT0gRmx1c2gKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgZWRn
ZS0+b3AoKSA9PSBQaGkpOwogICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAg
ICAgaWYgKHBoaXNJblRoaXNCbG9jay5nZXQoZWRnZS5pbmRleCgpKSkKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKHBoaXNJblRoaXNCbG9jay5jb250YWlucyhlZGdlLm5vZGUoKSkpCiAgICAgICAg
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAg
ICAgICAgICAgICAgIGlmIChub2Rlc0luVGhpc0Jsb2NrLmdldChlZGdlLmluZGV4KCkpKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgobm9kZUluZGV4LCBlZGdlKSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGhbZWRnZV0ub3AoKSA9PSBTZXRMb2Nh
bAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgbV9ncmFwaFtlZGdlXS5vcCgp
ID09IFNldEFyZ3VtZW50Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBtX2dy
YXBoW2VkZ2VdLm9wKCkgPT0gRmx1c2gpOworICAgICAgICAgICAgICAgICAgICBpZiAobm9kZXNJ
blRoaXNCbG9jay5jb250YWlucyhlZGdlLm5vZGUoKSkpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIFZBTElEQVRFKChub2RlLCBlZGdlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGVkZ2UtPm9wKCkgPT0gU2V0TG9jYWwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHx8IGVkZ2UtPm9wKCkgPT0gU2V0QXJndW1lbnQKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHx8IGVkZ2UtPm9wKCkgPT0gRmx1c2gpOwogICAgICAgICAgICAgICAgICAgICAg
ICAgCiAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAg
ICAgfQpAQCAtMTgwLDMzICsxNzksMzAgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICAg
ICAgQmFzaWNCbG9jayogcHJldkJsb2NrID0gbV9ncmFwaC5tX2Jsb2Nrc1tibG9jay0+bV9wcmVk
ZWNlc3NvcnNba11dLmdldCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKEJs
b2NrLCBibG9jay0+bV9wcmVkZWNlc3NvcnNba10pLCBwcmV2QmxvY2spOwogICAgICAgICAgICAg
ICAgICAgICAgICAgVkFMSURBVEUoKEJsb2NrLCBibG9jay0+bV9wcmVkZWNlc3NvcnNba10pLCBw
cmV2QmxvY2stPmlzUmVhY2hhYmxlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIE5vZGVJbmRl
eCBwcmV2Tm9kZUluZGV4ID0gcHJldkJsb2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZChsb2Nh
bCk7CisgICAgICAgICAgICAgICAgICAgICAgICBOb2RlKiBwcmV2Tm9kZSA9IHByZXZCbG9jay0+
dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQobG9jYWwpOwogICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gSWYgd2UgaGF2ZSBhIFBoaSB0aGF0IGlzIG5vdCByZWZlcnJpbmcgdG8gKnRoaXMqIGJsb2Nr
IHRoZW4gYWxsIHByZWRlY2Vzc29ycwogICAgICAgICAgICAgICAgICAgICAgICAgLy8gbXVzdCBo
YXZlIHRoYXQgbG9jYWwgYXZhaWxhYmxlLgotICAgICAgICAgICAgICAgICAgICAgICAgVkFMSURB
VEUoKGxvY2FsLCBibG9ja0luZGV4LCBCbG9jaywgYmxvY2stPm1fcHJlZGVjZXNzb3JzW2tdKSwg
cHJldk5vZGVJbmRleCAhPSBOb05vZGUpOwotICAgICAgICAgICAgICAgICAgICAgICAgTm9kZSog
cHJldk5vZGUgPSAmbV9ncmFwaFtwcmV2Tm9kZUluZGV4XTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChwcmV2Tm9kZS0+b3AoKSA9PSBHZXRMb2NhbCkgewotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHByZXZOb2RlSW5kZXggPSBwcmV2Tm9kZS0+Y2hpbGQxKCkuaW5kZXgoKTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2Tm9kZSA9ICZtX2dyYXBoW3ByZXZOb2RlSW5k
ZXhdOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKG5vZGUuc2hvdWxkR2VuZXJhdGUoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFZBTElEQVRFKChsb2NhbCwgYmxvY2stPm1fcHJlZGVjZXNzb3JzW2tdLCBwcmV2Tm9kZUluZGV4
KSwKKyAgICAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChsb2NhbCwgYmxvY2tJbmRleCwg
QmxvY2ssIGJsb2NrLT5tX3ByZWRlY2Vzc29yc1trXSksIHByZXZOb2RlKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIChwcmV2Tm9kZS0+b3AoKSA9PSBHZXRMb2NhbCkKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBwcmV2Tm9kZSA9IHByZXZOb2RlLT5jaGlsZDEoKS5ub2RlKCk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS0+c2hvdWxkR2VuZXJhdGUoKSkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChsb2NhbCwgYmxvY2stPm1fcHJlZGVj
ZXNzb3JzW2tdLCBwcmV2Tm9kZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcHJldk5vZGUtPnNob3VsZEdlbmVyYXRlKCkpOwogICAgICAgICAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKGxvY2FsLCBibG9jay0+bV9wcmVk
ZWNlc3NvcnNba10sIHByZXZOb2RlSW5kZXgpLAorICAgICAgICAgICAgICAgICAgICAgICAgVkFM
SURBVEUoKGxvY2FsLCBibG9jay0+bV9wcmVkZWNlc3NvcnNba10sIHByZXZOb2RlKSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXZOb2RlLT5vcCgpID09IFNldExvY2FsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBwcmV2Tm9kZS0+b3AoKSA9PSBTZXRB
cmd1bWVudAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgcHJldk5vZGUtPm9w
KCkgPT0gRmx1c2gKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IHByZXZOb2Rl
LT5vcCgpID09IFBoaSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJldk5vZGVJbmRl
eCA9PSBlZGdlLmluZGV4KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcmV2Tm9k
ZSA9PSBlZGdlLm5vZGUoKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kID0g
dHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEF0IHRoaXMgcG9pbnQgaXQg
Y2Fubm90IHJlZmVyIGludG8gdGhpcyBibG9jay4KLSAgICAgICAgICAgICAgICAgICAgICAgIFZB
TElEQVRFKChsb2NhbCwgYmxvY2stPm1fcHJlZGVjZXNzb3JzW2tdLCBwcmV2Tm9kZUluZGV4KSwg
IXByZXZCbG9jay0+aXNJbkJsb2NrKGVkZ2UuaW5kZXgoKSkpOworICAgICAgICAgICAgICAgICAg
ICAgICAgVkFMSURBVEUoKGxvY2FsLCBibG9jay0+bV9wcmVkZWNlc3NvcnNba10sIHByZXZOb2Rl
KSwgIXByZXZCbG9jay0+aXNJbkJsb2NrKGVkZ2Uubm9kZSgpKSk7CiAgICAgICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIFZBTElEQVRF
KChub2RlSW5kZXgsIGVkZ2UpLCBmb3VuZCk7CisgICAgICAgICAgICAgICAgICAgIFZBTElEQVRF
KChub2RlLCBlZGdlKSwgZm91bmQpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIApAQCAtMjI3LDM0ICsyMjMsMzMgQEAgcHVibGljOgogICAgICAgICAgICAg
fQogICAgICAgICAgICAgCiAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGJsb2Nr
LT5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgICAgIE5vZGVJbmRleCBub2RlSW5kZXggPSBi
bG9jay0+YXQoaSk7Ci0gICAgICAgICAgICAgICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhbbm9kZUlu
ZGV4XTsKLSAgICAgICAgICAgICAgICBBU1NFUlQobm9kZXNJblRoaXNCbG9jay5nZXQobm9kZUlu
ZGV4KSk7Ci0gICAgICAgICAgICAgICAgVkFMSURBVEUoKG5vZGVJbmRleCksIG5vZGUub3AoKSAh
PSBQaGkpOworICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+YXQoaSk7CisgICAg
ICAgICAgICAgICAgQVNTRVJUKG5vZGVzSW5UaGlzQmxvY2suY29udGFpbnMobm9kZSkpOworICAg
ICAgICAgICAgICAgIFZBTElEQVRFKChub2RlKSwgbm9kZS0+b3AoKSAhPSBQaGkpOwogICAgICAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IDA7IGogPCBtX2dyYXBoLm51bUNoaWxkcmVuKG5v
ZGUpOyArK2opIHsKICAgICAgICAgICAgICAgICAgICAgRWRnZSBlZGdlID0gbV9ncmFwaC5jaGls
ZChub2RlLCBqKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKCFlZGdlKQogICAgICAgICAgICAg
ICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChub2Rl
SW5kZXgsIGVkZ2UpLCBub2Rlc0luVGhpc0Jsb2NrLmdldChub2RlSW5kZXgpKTsKKyAgICAgICAg
ICAgICAgICAgICAgVkFMSURBVEUoKG5vZGUsIGVkZ2UpLCBub2Rlc0luVGhpc0Jsb2NrLmNvbnRh
aW5zKGVkZ2Uubm9kZSgpKSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIAot
ICAgICAgICAgICAgICAgIGlmICghbm9kZS5zaG91bGRHZW5lcmF0ZSgpKQorICAgICAgICAgICAg
ICAgIGlmICghbm9kZS0+c2hvdWxkR2VuZXJhdGUoKSkKICAgICAgICAgICAgICAgICAgICAgY29u
dGludWU7Ci0gICAgICAgICAgICAgICAgc3dpdGNoIChub2RlLm9wKCkpIHsKKyAgICAgICAgICAg
ICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKICAgICAgICAgICAgICAgICBjYXNlIEdldExvY2Fs
OgotICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+aXND
YXB0dXJlZCgpKQorICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS0+dmFyaWFibGVBY2Nlc3NE
YXRhKCktPmlzQ2FwdHVyZWQoKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICAgICAgICBWQUxJREFURSgobm9kZUluZGV4LCBibG9ja0luZGV4KSwgZ2V0TG9j
YWxQb3NpdGlvbnMub3BlcmFuZChub2RlLmxvY2FsKCkpID09IG5vdFNldCk7Ci0gICAgICAgICAg
ICAgICAgICAgIGdldExvY2FsUG9zaXRpb25zLm9wZXJhbmQobm9kZS5sb2NhbCgpKSA9IGk7Cisg
ICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChub2RlLCBibG9ja0luZGV4KSwgZ2V0TG9jYWxQ
b3NpdGlvbnMub3BlcmFuZChub2RlLT5sb2NhbCgpKSA9PSBub3RTZXQpOworICAgICAgICAgICAg
ICAgICAgICBnZXRMb2NhbFBvc2l0aW9ucy5vcGVyYW5kKG5vZGUtPmxvY2FsKCkpID0gaTsKICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgY2FzZSBTZXRMb2NhbDoK
LSAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUudmFyaWFibGVBY2Nlc3NEYXRhKCktPmlzQ2Fw
dHVyZWQoKSkKKyAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0
YSgpLT5pc0NhcHR1cmVkKCkpCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgICAgICAgICAgLy8gT25seSByZWNvcmQgdGhlIGZpcnN0IFNldExvY2FsLiBUaGVyZSBt
YXkgYmUgbXVsdGlwbGUgU2V0TG9jYWxzCiAgICAgICAgICAgICAgICAgICAgIC8vIGJlY2F1c2Ug
b2YgZmx1c2hpbmcuCi0gICAgICAgICAgICAgICAgICAgIGlmIChzZXRMb2NhbFBvc2l0aW9ucy5v
cGVyYW5kKG5vZGUubG9jYWwoKSkgIT0gbm90U2V0KQorICAgICAgICAgICAgICAgICAgICBpZiAo
c2V0TG9jYWxQb3NpdGlvbnMub3BlcmFuZChub2RlLT5sb2NhbCgpKSAhPSBub3RTZXQpCiAgICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgc2V0TG9jYWxQ
b3NpdGlvbnMub3BlcmFuZChub2RlLmxvY2FsKCkpID0gaTsKKyAgICAgICAgICAgICAgICAgICAg
c2V0TG9jYWxQb3NpdGlvbnMub3BlcmFuZChub2RlLT5sb2NhbCgpKSA9IGk7CiAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwpAQCAtMjk0LDkgKzI4OSw5IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBn
ZXRMb2NhbFBvc2l0aW9ucy5vcGVyYW5kKG9wZXJhbmQpIDwgc2V0TG9jYWxQb3NpdGlvbnMub3Bl
cmFuZChvcGVyYW5kKSk7CiAgICAgfQogICAgIAotICAgIHZvaWQgcmVwb3J0VmFsaWRhdGlvbkNv
bnRleHQoTm9kZUluZGV4IG5vZGVJbmRleCkKKyAgICB2b2lkIHJlcG9ydFZhbGlkYXRpb25Db250
ZXh0KE5vZGUqIG5vZGUpCiAgICAgewotICAgICAgICBkYXRhTG9nRigiQCV1Iiwgbm9kZUluZGV4
KTsKKyAgICAgICAgZGF0YUxvZ0YoIkAldSIsIG5vZGUtPmluZGV4KCkpOwogICAgIH0KICAgICAK
ICAgICBlbnVtIEJsb2NrVGFnIHsgQmxvY2sgfTsKQEAgLTMwNSw5ICszMDAsOSBAQCBwcml2YXRl
OgogICAgICAgICBkYXRhTG9nRigiQmxvY2sgIyV1IiwgYmxvY2tJbmRleCk7CiAgICAgfQogICAg
IAotICAgIHZvaWQgcmVwb3J0VmFsaWRhdGlvbkNvbnRleHQoTm9kZUluZGV4IG5vZGVJbmRleCwg
RWRnZSBlZGdlKQorICAgIHZvaWQgcmVwb3J0VmFsaWRhdGlvbkNvbnRleHQoTm9kZSogbm9kZSwg
RWRnZSBlZGdlKQogICAgIHsKLSAgICAgICAgZGF0YUxvZ0YoIkAldSAtPiAlc0AldSIsIG5vZGVJ
bmRleCwgdXNlS2luZFRvU3RyaW5nKGVkZ2UudXNlS2luZCgpKSwgZWRnZS5pbmRleCgpKTsKKyAg
ICAgICAgZGF0YUxvZ0YoIkAldSAtPiAlc0AldSIsIG5vZGUtPmluZGV4KCksIHVzZUtpbmRUb1N0
cmluZyhlZGdlLnVzZUtpbmQoKSksIGVkZ2UuaW5kZXgoKSk7CiAgICAgfQogICAgIAogICAgIHZv
aWQgcmVwb3J0VmFsaWRhdGlvbkNvbnRleHQoVmlydHVhbFJlZ2lzdGVyIGxvY2FsLCBCbG9ja0lu
ZGV4IGJsb2NrSW5kZXgpCkBAIC0zMjIsMjcgKzMxNywyNyBAQCBwcml2YXRlOgogICAgIH0KICAg
ICAKICAgICB2b2lkIHJlcG9ydFZhbGlkYXRpb25Db250ZXh0KAotICAgICAgICBWaXJ0dWFsUmVn
aXN0ZXIgbG9jYWwsIEJsb2NrSW5kZXggc291cmNlQmxvY2tJbmRleCwgTm9kZUluZGV4IHByZXZO
b2RlSW5kZXgpCisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBsb2NhbCwgQmxvY2tJbmRleCBzb3Vy
Y2VCbG9ja0luZGV4LCBOb2RlKiBwcmV2Tm9kZSkKICAgICB7Ci0gICAgICAgIGRhdGFMb2dGKCJA
JXUgZm9yIHIlZCBpbiBCbG9jayAjJXUiLCBwcmV2Tm9kZUluZGV4LCBsb2NhbCwgc291cmNlQmxv
Y2tJbmRleCk7CisgICAgICAgIGRhdGFMb2dGKCJAJXUgZm9yIHIlZCBpbiBCbG9jayAjJXUiLCBw
cmV2Tm9kZS0+aW5kZXgoKSwgbG9jYWwsIHNvdXJjZUJsb2NrSW5kZXgpOwogICAgIH0KICAgICAK
ICAgICB2b2lkIHJlcG9ydFZhbGlkYXRpb25Db250ZXh0KAotICAgICAgICBOb2RlSW5kZXggbm9k
ZUluZGV4LCBCbG9ja0luZGV4IGJsb2NrSW5kZXgpCisgICAgICAgIE5vZGUqIG5vZGUsIEJsb2Nr
SW5kZXggYmxvY2tJbmRleCkKICAgICB7Ci0gICAgICAgIGRhdGFMb2dGKCJAJXUgaW4gQmxvY2sg
IyV1Iiwgbm9kZUluZGV4LCBibG9ja0luZGV4KTsKKyAgICAgICAgZGF0YUxvZ0YoIkAldSBpbiBC
bG9jayAjJXUiLCBub2RlLT5pbmRleCgpLCBibG9ja0luZGV4KTsKICAgICB9CiAgICAgCiAgICAg
dm9pZCByZXBvcnRWYWxpZGF0aW9uQ29udGV4dCgKLSAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRl
eCwgTm9kZUluZGV4IG5vZGVJbmRleDIsIEJsb2NrSW5kZXggYmxvY2tJbmRleCkKKyAgICAgICAg
Tm9kZSogbm9kZSwgTm9kZSogbm9kZTIsIEJsb2NrSW5kZXggYmxvY2tJbmRleCkKICAgICB7Ci0g
ICAgICAgIGRhdGFMb2dGKCJAJXUgYW5kIEAldSBpbiBCbG9jayAjJXUiLCBub2RlSW5kZXgsIG5v
ZGVJbmRleDIsIGJsb2NrSW5kZXgpOworICAgICAgICBkYXRhTG9nRigiQCV1IGFuZCBAJXUgaW4g
QmxvY2sgIyV1Iiwgbm9kZS0+aW5kZXgoKSwgbm9kZTItPmluZGV4KCksIGJsb2NrSW5kZXgpOwog
ICAgIH0KICAgICAKICAgICB2b2lkIHJlcG9ydFZhbGlkYXRpb25Db250ZXh0KAotICAgICAgICBO
b2RlSW5kZXggbm9kZUluZGV4LCBCbG9ja0luZGV4IGJsb2NrSW5kZXgsIE5vZGVJbmRleCBleHBl
Y3RlZE5vZGVJbmRleCwgRWRnZSBpbmNvbWluZ0VkZ2UpCisgICAgICAgIE5vZGUqIG5vZGUsIEJs
b2NrSW5kZXggYmxvY2tJbmRleCwgTm9kZSogZXhwZWN0ZWROb2RlLCBFZGdlIGluY29taW5nRWRn
ZSkKICAgICB7Ci0gICAgICAgIGRhdGFMb2dGKCJAJXUgaW4gQmxvY2sgIyV1LCBzZWFyY2hpbmcg
Zm9yIEAldSBmcm9tIEAldSIsIG5vZGVJbmRleCwgYmxvY2tJbmRleCwgZXhwZWN0ZWROb2RlSW5k
ZXgsIGluY29taW5nRWRnZS5pbmRleCgpKTsKKyAgICAgICAgZGF0YUxvZ0YoIkAldSBpbiBCbG9j
ayAjJXUsIHNlYXJjaGluZyBmb3IgQCV1IGZyb20gQCV1Iiwgbm9kZS0+aW5kZXgoKSwgYmxvY2tJ
bmRleCwgZXhwZWN0ZWROb2RlLT5pbmRleCgpLCBpbmNvbWluZ0VkZ2UuaW5kZXgoKSk7CiAgICAg
fQogICAgIAogICAgIHZvaWQgZHVtcERhdGEodW5zaWduZWQgdmFsdWUpCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZpcnR1YWxSZWdpc3RlckFsbG9jYXRpb25QaGFzZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWaXJ0dWFsUmVnaXN0
ZXJBbGxvY2F0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAxNDA2MTYpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1ZpcnR1YWxSZWdpc3RlckFsbG9jYXRpb25QaGFzZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQ3LDcgKzQ3LDcgQEAgcHVibGljOgogICAgICAgICBtX2dyYXBoLm1fcHJl
c2VydmVkVmFycy5kdW1wKFdURjo6ZGF0YUZpbGUoKSk7CiAgICAgICAgIGRhdGFMb2dGKCJcbiIp
OwogI2VuZGlmCi0gICAgICAgIFNjb3JlQm9hcmQgc2NvcmVCb2FyZChtX2dyYXBoLCBtX2dyYXBo
Lm1fcHJlc2VydmVkVmFycyk7CisgICAgICAgIFNjb3JlQm9hcmQgc2NvcmVCb2FyZChtX2dyYXBo
Lm1fcHJlc2VydmVkVmFycyk7CiAgICAgICAgIHNjb3JlQm9hcmQuYXNzZXJ0Q2xlYXIoKTsKICNp
ZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCiAgICAgICAgIGJvb2wgbmVl
ZHNOZXdMaW5lID0gZmFsc2U7CkBAIC01OSw0NyArNTksNDcgQEAgcHVibGljOgogICAgICAgICAg
ICAgaWYgKCFibG9jay0+aXNSZWFjaGFibGUpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAg
ICAgICAgICAgICBmb3IgKHNpemVfdCBpbmRleEluQmxvY2sgPSAwOyBpbmRleEluQmxvY2sgPCBi
bG9jay0+c2l6ZSgpOyArK2luZGV4SW5CbG9jaykgewotICAgICAgICAgICAgICAgIE5vZGVJbmRl
eCBub2RlSW5kZXggPSBibG9jay0+YXQoaW5kZXhJbkJsb2NrKTsKKyAgICAgICAgICAgICAgICBO
b2RlKiBub2RlID0gYmxvY2stPmF0KGluZGV4SW5CbG9jayk7CiAjaWYgREZHX0VOQUJMRShERUJV
R19QUk9QQUdBVElPTl9WRVJCT1NFKQogICAgICAgICAgICAgICAgIGlmIChuZWVkc05ld0xpbmUp
CiAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2dGKCJcbiIpOwotICAgICAgICAgICAgICAgIGRh
dGFMb2dGKCIgICBAJXU6Iiwgbm9kZUluZGV4KTsKKyAgICAgICAgICAgICAgICBkYXRhTG9nRigi
ICAgQCV1OiIsIG5vZGUtPmluZGV4KCkpOwogICAgICAgICAgICAgICAgIG5lZWRzTmV3TGluZSA9
IHRydWU7CiAjZW5kaWYKLSAgICAgICAgICAgICAgICBOb2RlJiBub2RlID0gbV9ncmFwaFtub2Rl
SW5kZXhdOwogICAgICAgICAKLSAgICAgICAgICAgICAgICBpZiAoIW5vZGUuc2hvdWxkR2VuZXJh
dGUoKSB8fCBub2RlLm9wKCkgPT0gUGhpIHx8IG5vZGUub3AoKSA9PSBGbHVzaCkKKyAgICAgICAg
ICAgICAgICBpZiAoIW5vZGUtPnNob3VsZEdlbmVyYXRlKCkgfHwgbm9kZS0+b3AoKSA9PSBQaGkg
fHwgbm9kZS0+b3AoKSA9PSBGbHVzaCkKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAg
ICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYgKG5vZGUub3AoKSA9PSBHZXRMb2Nh
bCkKLSAgICAgICAgICAgICAgICAgICAgQVNTRVJUKCFtX2dyYXBoW25vZGUuY2hpbGQxKCldLmhh
c1Jlc3VsdCgpKTsKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBHZXRMb2NhbCkK
KyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKCFub2RlLT5jaGlsZDEoKS0+aGFzUmVzdWx0KCkp
OwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIC8vIEZpcnN0LCBjYWxsIHVzZSBv
biBhbGwgb2YgdGhlIGN1cnJlbnQgbm9kZSdzIGNoaWxkcmVuLCB0aGVuCiAgICAgICAgICAgICAg
ICAgLy8gYWxsb2NhdGUgYSBWaXJ0dWFsUmVnaXN0ZXIgZm9yIHRoaXMgbm9kZS4gV2UgZG8gc28g
aW4gdGhpcwogICAgICAgICAgICAgICAgIC8vIG9yZGVyIHNvIHRoYXQgaWYgYSBjaGlsZCBpcyBv
biBpdHMgbGFzdCB1c2UsIGFuZCBhCiAgICAgICAgICAgICAgICAgLy8gVmlydHVhbFJlZ2lzdGVy
IGlzIGZyZWVkLCB0aGVuIGl0IG1heSBiZSByZXVzZWQgZm9yIG5vZGUuCi0gICAgICAgICAgICAg
ICAgaWYgKG5vZGUuZmxhZ3MoKSAmIE5vZGVIYXNWYXJBcmdzKSB7CisgICAgICAgICAgICAgICAg
aWYgKG5vZGUtPmZsYWdzKCkgJiBOb2RlSGFzVmFyQXJncykgewogICAgICAgICAgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGNoaWxkSWR4ID0gbm9kZS5maXJzdENoaWxkKCk7IGNoaWxkSWR4IDwg
bm9kZS5maXJzdENoaWxkKCkgKyBub2RlLm51bUNoaWxkcmVuKCk7IGNoaWxkSWR4KyspCiAgICAg
ICAgICAgICAgICAgICAgICAgICBzY29yZUJvYXJkLnVzZUlmSGFzUmVzdWx0KG1fZ3JhcGgubV92
YXJBcmdDaGlsZHJlbltjaGlsZElkeF0pOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICAgICAgICAgIHNjb3JlQm9hcmQudXNlSWZIYXNSZXN1bHQobm9kZS5jaGlsZDEoKSk7
Ci0gICAgICAgICAgICAgICAgICAgIHNjb3JlQm9hcmQudXNlSWZIYXNSZXN1bHQobm9kZS5jaGls
ZDIoKSk7Ci0gICAgICAgICAgICAgICAgICAgIHNjb3JlQm9hcmQudXNlSWZIYXNSZXN1bHQobm9k
ZS5jaGlsZDMoKSk7CisgICAgICAgICAgICAgICAgICAgIHNjb3JlQm9hcmQudXNlSWZIYXNSZXN1
bHQobm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgICAgICAgICBzY29yZUJvYXJkLnVzZUlm
SGFzUmVzdWx0KG5vZGUtPmNoaWxkMigpKTsKKyAgICAgICAgICAgICAgICAgICAgc2NvcmVCb2Fy
ZC51c2VJZkhhc1Jlc3VsdChub2RlLT5jaGlsZDMoKSk7CiAgICAgICAgICAgICAgICAgfQogCi0g
ICAgICAgICAgICAgICAgaWYgKCFub2RlLmhhc1Jlc3VsdCgpKQorICAgICAgICAgICAgICAgIGlm
ICghbm9kZS0+aGFzUmVzdWx0KCkpCiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAg
ICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciA9IHNjb3JlQm9h
cmQuYWxsb2NhdGUoKTsKICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0Up
Ci0gICAgICAgICAgICAgICAgZGF0YUxvZ0YoIiBBc3NpZ25pbmcgdmlydHVhbCByZWdpc3RlciAl
dSB0byBub2RlICV1LiIsCi0gICAgICAgICAgICAgICAgICAgICAgICB2aXJ0dWFsUmVnaXN0ZXIs
IG5vZGVJbmRleCk7CisgICAgICAgICAgICAgICAgZGF0YUxvZ0YoCisgICAgICAgICAgICAgICAg
ICAgICIgQXNzaWduaW5nIHZpcnR1YWwgcmVnaXN0ZXIgJXUgdG8gbm9kZSAldS4iLAorICAgICAg
ICAgICAgICAgICAgICB2aXJ0dWFsUmVnaXN0ZXIsIG5vZGUtPmluZGV4KCkpOwogI2VuZGlmCi0g
ICAgICAgICAgICAgICAgbm9kZS5zZXRWaXJ0dWFsUmVnaXN0ZXIodmlydHVhbFJlZ2lzdGVyKTsK
KyAgICAgICAgICAgICAgICBub2RlLT5zZXRWaXJ0dWFsUmVnaXN0ZXIodmlydHVhbFJlZ2lzdGVy
KTsKICAgICAgICAgICAgICAgICAvLyAnbXVzdEdlbmVyYXRlJyBub2RlcyBoYXZlIHRoZWlyIHVz
ZUNvdW50IGFydGlmaWNpYWxseSBlbGV2YXRlZCwKICAgICAgICAgICAgICAgICAvLyBjYWxsIHVz
ZSBub3cgdG8gYWNjb3VudCBmb3IgdGhpcy4KLSAgICAgICAgICAgICAgICBpZiAobm9kZS5tdXN0
R2VuZXJhdGUoKSkKLSAgICAgICAgICAgICAgICAgICAgc2NvcmVCb2FyZC51c2Uobm9kZUluZGV4
KTsKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+bXVzdEdlbmVyYXRlKCkpCisgICAgICAgICAg
ICAgICAgICAgIHNjb3JlQm9hcmQudXNlKG5vZGUpOwogICAgICAgICAgICAgfQogICAgICAgICAg
ICAgc2NvcmVCb2FyZC5hc3NlcnRDbGVhcigpOwogICAgICAgICB9CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvbkV4ZWN1dGFibGVEdW1wLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvbkV4ZWN1dGFibGVEdW1w
LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0
aW9uRXhlY3V0YWJsZUR1bXAuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDM3IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJGdW5jdGlvbkV4ZWN1dGFibGVEdW1wLmgiCisKK25hbWVzcGFjZSBK
U0MgeworCit2b2lkIEZ1bmN0aW9uRXhlY3V0YWJsZUR1bXA6OmR1bXAoUHJpbnRTdHJlYW0mIG91
dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQobV9leGVjdXRhYmxlLT5pbmZlcnJlZE5hbWUoKS5z
dHJpbmcoKSwgIiMiLCBtX2V4ZWN1dGFibGUtPmhhc2hGb3IoQ29kZUZvckNhbGwpLCAiLyIsIG1f
ZXhlY3V0YWJsZS0+aGFzaEZvcihDb2RlRm9yQ29uc3RydWN0KSwgIjpbIiwgUmF3UG9pbnRlciht
X2V4ZWN1dGFibGUpLCAiXSIpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25FeGVjdXRhYmxlRHVtcC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uRXhlY3V0YWJs
ZUR1bXAuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1
bmN0aW9uRXhlY3V0YWJsZUR1bXAuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0OSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEZ1bmN0
aW9uRXhlY3V0YWJsZUR1bXBfaAorI2RlZmluZSBGdW5jdGlvbkV4ZWN1dGFibGVEdW1wX2gKKwor
I2luY2x1ZGUgIkV4ZWN1dGFibGUuaCIKKyNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KKwor
bmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIEZ1bmN0aW9uRXhlY3V0YWJsZUR1bXAgeworcHVibGlj
OgorICAgIGV4cGxpY2l0IEZ1bmN0aW9uRXhlY3V0YWJsZUR1bXAoRnVuY3Rpb25FeGVjdXRhYmxl
KiBleGVjdXRhYmxlKQorICAgICAgICA6IG1fZXhlY3V0YWJsZShleGVjdXRhYmxlKQorICAgIHsK
KyAgICB9CisgICAgCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7Citwcml2YXRl
OgorICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogbV9leGVjdXRhYmxlOworfTsKKworfSAvLyBuYW1l
c3BhY2UgSlNDCisKKyNlbmRpZiAvLyBGdW5jdGlvbkV4ZWN1dGFibGVEdW1wX2gKKwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuY3BwCShyZXZp
c2lvbiAxNDA2MTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERh
dGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAiQXJnTGlz
dC5oIgogI2luY2x1ZGUgIkNvZGVDYWNoZS5oIgogI2luY2x1ZGUgIkNvbW1vbklkZW50aWZpZXJz
LmgiCisjaW5jbHVkZSAiREZHTG9uZ0xpdmVkU3RhdGUuaCIKICNpbmNsdWRlICJEZWJ1Z2dlckFj
dGl2YXRpb24uaCIKICNpbmNsdWRlICJGdW5jdGlvbkNvbnN0cnVjdG9yLmgiCiAjaW5jbHVkZSAi
R0NBY3Rpdml0eUNhbGxiYWNrLmgiCkBAIC0yNTEsNiArMjUyLDExIEBAIEpTR2xvYmFsRGF0YTo6
SlNHbG9iYWxEYXRhKEdsb2JhbERhdGFUeXAKICAgICAKICAgICBpZiAoT3B0aW9uczo6ZW5hYmxl
UHJvZmlsZXIoKSkKICAgICAgICAgbV9wZXJCeXRlY29kZVByb2ZpbGVyID0gYWRvcHRQdHIobmV3
IFByb2ZpbGVyOjpEYXRhYmFzZSgqdGhpcykpOworCisjaWYgRU5BQkxFKERGR19KSVQpCisgICAg
aWYgKGNhblVzZUpJVCgpKQorICAgICAgICBtX2RmZ1N0YXRlID0gYWRvcHRQdHIobmV3IERGRzo6
TG9uZ0xpdmVkU3RhdGUoKSk7CisjZW5kaWYKIH0KIAogSlNHbG9iYWxEYXRhOjp+SlNHbG9iYWxE
YXRhKCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0
YS5oCShyZXZpc2lvbiAxNDA2MTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0dsb2JhbERhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtOTEsNiArOTEsMTIgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgY2xhc3MgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU7CiAgICAgY2xhc3Mg
VW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrOwogCisjaWYgRU5BQkxFKERGR19KSVQpCisgICAgbmFt
ZXNwYWNlIERGRyB7CisgICAgY2xhc3MgTG9uZ0xpdmVkU3RhdGU7CisgICAgfQorI2VuZGlmIC8v
IEVOQUJMRShERkdfSklUKQorCiAgICAgc3RydWN0IEhhc2hUYWJsZTsKICAgICBzdHJ1Y3QgSW5z
dHJ1Y3Rpb247CiAKQEAgLTE4OSw2ICsxOTUsMTAgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
IC8vIFRoZSBoZWFwIHNob3VsZCBiZSBqdXN0IGFmdGVyIGV4ZWN1dGFibGVBbGxvY2F0b3IgYW5k
IGJlZm9yZSBvdGhlciBtZW1iZXJzIHRvIGVuc3VyZSB0aGF0IGl0J3MKICAgICAgICAgLy8gZGVz
dHJ1Y3RlZCBhZnRlciBhbGwgdGhlIG9iamVjdHMgdGhhdCByZWZlcmVuY2UgaXQuCiAgICAgICAg
IEhlYXAgaGVhcDsKKyAgICAgICAgCisjaWYgRU5BQkxFKERGR19KSVQpCisgICAgICAgIE93blB0
cjxERkc6OkxvbmdMaXZlZFN0YXRlPiBtX2RmZ1N0YXRlOworI2VuZGlmIC8vIEVOQUJMRShERkdf
SklUKQogCiAgICAgICAgIEdsb2JhbERhdGFUeXBlIGdsb2JhbERhdGFUeXBlOwogICAgICAgICBD
bGllbnREYXRhKiBjbGllbnREYXRhOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>184883</attachid>
            <date>2013-01-26 13:43:14 -0800</date>
            <delta_ts>2013-01-26 16:29:02 -0800</delta_ts>
            <desc>work in progress</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>616503</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmNw
cAkocmV2aXNpb24gMTQwOTA0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0
cmFjdFN0YXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTEsIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDExLCAyMDEyLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtODcsMjEgKzg3LDIxIEBA
IHZvaWQgQWJzdHJhY3RTdGF0ZTo6aW5pdGlhbGl6ZShHcmFwaCYgZ3IKICAgICByb290LT5jZmFI
YXNWaXNpdGVkID0gZmFsc2U7CiAgICAgcm9vdC0+Y2ZhRm91bmRDb25zdGFudHMgPSBmYWxzZTsK
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHJvb3QtPnZhbHVlc0F0SGVhZC5udW1iZXJPZkFy
Z3VtZW50cygpOyArK2kpIHsKLSAgICAgICAgTm9kZSYgbm9kZSA9IGdyYXBoW3Jvb3QtPnZhcmlh
Ymxlc0F0SGVhZC5hcmd1bWVudChpKV07Ci0gICAgICAgIEFTU0VSVChub2RlLm9wKCkgPT0gU2V0
QXJndW1lbnQpOwotICAgICAgICBpZiAoIW5vZGUuc2hvdWxkR2VuZXJhdGUoKSkgeworICAgICAg
ICBOb2RlKiBub2RlID0gcm9vdC0+dmFyaWFibGVzQXRIZWFkLmFyZ3VtZW50KGkpOworICAgICAg
ICBBU1NFUlQobm9kZS0+b3AoKSA9PSBTZXRBcmd1bWVudCk7CisgICAgICAgIGlmICghbm9kZS0+
c2hvdWxkR2VuZXJhdGUoKSkgewogICAgICAgICAgICAgLy8gVGhlIGFyZ3VtZW50IGlzIGRlYWQu
IFdlIGRvbid0IGRvIGFueSBjaGVja3MgZm9yIHN1Y2ggYXJndW1lbnRzLCBhbmQgc28KICAgICAg
ICAgICAgIC8vIGZvciB0aGUgcHVycG9zZSBvZiB0aGUgYW5hbHlzaXMsIHRoZXkgY29udGFpbiBu
byB2YWx1ZS4KICAgICAgICAgICAgIHJvb3QtPnZhbHVlc0F0SGVhZC5hcmd1bWVudChpKS5jbGVh
cigpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAg
IGlmIChub2RlLnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5pc0NhcHR1cmVkKCkpIHsKKyAgICAgICAg
aWYgKG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5pc0NhcHR1cmVkKCkpIHsKICAgICAgICAg
ICAgIHJvb3QtPnZhbHVlc0F0SGVhZC5hcmd1bWVudChpKS5tYWtlVG9wKCk7CiAgICAgICAgICAg
ICBjb250aW51ZTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgU3BlY3VsYXRlZFR5cGUg
cHJlZGljdGlvbiA9IG5vZGUudmFyaWFibGVBY2Nlc3NEYXRhKCktPnByZWRpY3Rpb24oKTsKKyAg
ICAgICAgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0
YSgpLT5wcmVkaWN0aW9uKCk7CiAgICAgICAgIGlmIChpc0ludDMyU3BlY3VsYXRpb24ocHJlZGlj
dGlvbikpCiAgICAgICAgICAgICByb290LT52YWx1ZXNBdEhlYWQuYXJndW1lbnQoaSkuc2V0KFNw
ZWNJbnQzMik7CiAgICAgICAgIGVsc2UgaWYgKGlzQm9vbGVhblNwZWN1bGF0aW9uKHByZWRpY3Rp
b24pKQpAQCAtMTE0LDggKzExNCw4IEBAIHZvaWQgQWJzdHJhY3RTdGF0ZTo6aW5pdGlhbGl6ZShH
cmFwaCYgZ3IKICAgICAgICAgcm9vdC0+dmFsdWVzQXRUYWlsLmFyZ3VtZW50KGkpLmNsZWFyKCk7
CiAgICAgfQogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcm9vdC0+dmFsdWVzQXRIZWFkLm51
bWJlck9mTG9jYWxzKCk7ICsraSkgewotICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4ID0gcm9v
dC0+dmFyaWFibGVzQXRIZWFkLmxvY2FsKGkpOwotICAgICAgICBpZiAobm9kZUluZGV4ICE9IE5v
Tm9kZSAmJiBncmFwaFtub2RlSW5kZXhdLnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5pc0NhcHR1cmVk
KCkpCisgICAgICAgIE5vZGUqIG5vZGUgPSByb290LT52YXJpYWJsZXNBdEhlYWQubG9jYWwoaSk7
CisgICAgICAgIGlmIChub2RlICYmIG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5pc0NhcHR1
cmVkKCkpCiAgICAgICAgICAgICByb290LT52YWx1ZXNBdEhlYWQubG9jYWwoaSkubWFrZVRvcCgp
OwogICAgICAgICBlbHNlCiAgICAgICAgICAgICByb290LT52YWx1ZXNBdEhlYWQubG9jYWwoaSku
Y2xlYXIoKTsKQEAgLTIxMywxMSArMjEzLDExIEBAIHZvaWQgQWJzdHJhY3RTdGF0ZTo6cmVzZXQo
KQogICAgIG1fYnJhbmNoRGlyZWN0aW9uID0gSW52YWxpZEJyYW5jaERpcmVjdGlvbjsKIH0KIAot
QWJzdHJhY3RTdGF0ZTo6Qm9vbGVhblJlc3VsdCBBYnN0cmFjdFN0YXRlOjpib29sZWFuUmVzdWx0
KE5vZGUmIG5vZGUsIEFic3RyYWN0VmFsdWUmIHZhbHVlKQorQWJzdHJhY3RTdGF0ZTo6Qm9vbGVh
blJlc3VsdCBBYnN0cmFjdFN0YXRlOjpib29sZWFuUmVzdWx0KE5vZGUqIG5vZGUsIEFic3RyYWN0
VmFsdWUmIHZhbHVlKQogewogICAgIEpTVmFsdWUgY2hpbGRDb25zdCA9IHZhbHVlLnZhbHVlKCk7
CiAgICAgaWYgKGNoaWxkQ29uc3QpIHsKLSAgICAgICAgaWYgKGNoaWxkQ29uc3QudG9Cb29sZWFu
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3RGb3Iobm9kZS5jb2RlT3JpZ2luKS0+Z2xvYmFsRXhl
YygpKSkKKyAgICAgICAgaWYgKGNoaWxkQ29uc3QudG9Cb29sZWFuKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3RGb3Iobm9kZS0+Y29kZU9yaWdpbiktPmdsb2JhbEV4ZWMoKSkpCiAgICAgICAgICAg
ICByZXR1cm4gRGVmaW5pdGVseVRydWU7CiAgICAgICAgIHJldHVybiBEZWZpbml0ZWx5RmFsc2U7
CiAgICAgfQpAQCAtMjI2LDcgKzIyNiw3IEBAIEFic3RyYWN0U3RhdGU6OkJvb2xlYW5SZXN1bHQg
QWJzdHJhY3RTdGEKICAgICBpZiAoaXNDZWxsU3BlY3VsYXRpb24odmFsdWUubV90eXBlKQogICAg
ICAgICAmJiB2YWx1ZS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5oYXNTaW5nbGV0b24oKSkgewog
ICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHZhbHVlLm1fY3VycmVudEtub3duU3RydWN0
dXJlLnNpbmdsZXRvbigpOwotICAgICAgICBpZiAoIXN0cnVjdHVyZS0+bWFzcXVlcmFkZXNBc1Vu
ZGVmaW5lZChtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0Rm9yKG5vZGUuY29kZU9yaWdpbikpCisg
ICAgICAgIGlmICghc3RydWN0dXJlLT5tYXNxdWVyYWRlc0FzVW5kZWZpbmVkKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3RGb3Iobm9kZS0+Y29kZU9yaWdpbikpCiAgICAgICAgICAgICAmJiBzdHJ1
Y3R1cmUtPnR5cGVJbmZvKCkudHlwZSgpICE9IFN0cmluZ1R5cGUpCiAgICAgICAgICAgICByZXR1
cm4gRGVmaW5pdGVseVRydWU7CiAgICAgfQpAQCAtMjQxLDMyICsyNDEsMzEgQEAgYm9vbCBBYnN0
cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgIAogICAgIG1fZGlkQ2xvYmJlciA9
IGZhbHNlOwogICAgIAotICAgIE5vZGVJbmRleCBub2RlSW5kZXggPSBtX2Jsb2NrLT5hdChpbmRl
eEluQmxvY2spOwotICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW25vZGVJbmRleF07CisgICAgTm9k
ZSogbm9kZSA9IG1fYmxvY2stPmF0KGluZGV4SW5CbG9jayk7CiAgICAgICAgIAotICAgIGlmICgh
bm9kZS5zaG91bGRHZW5lcmF0ZSgpKQorICAgIGlmICghbm9kZS0+c2hvdWxkR2VuZXJhdGUoKSkK
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIAotICAgIHN3aXRjaCAobm9kZS5vcCgpKSB7
CisgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CiAgICAgY2FzZSBKU0NvbnN0YW50OgogICAgIGNh
c2UgV2Vha0pTQ29uc3RhbnQ6CiAgICAgY2FzZSBQaGFudG9tQXJndW1lbnRzOiB7Ci0gICAgICAg
IGZvck5vZGUobm9kZUluZGV4KS5zZXQobV9ncmFwaC52YWx1ZU9mSlNDb25zdGFudChub2RlSW5k
ZXgpKTsKLSAgICAgICAgbm9kZS5zZXRDYW5FeGl0KGZhbHNlKTsKKyAgICAgICAgZm9yTm9kZShu
b2RlKS5zZXQobV9ncmFwaC52YWx1ZU9mSlNDb25zdGFudChub2RlKSk7CisgICAgICAgIG5vZGUt
PnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIAogICAg
IGNhc2UgSWRlbnRpdHk6IHsKLSAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpID0gZm9yTm9kZShu
b2RlLmNoaWxkMSgpKTsKLSAgICAgICAgbm9kZS5zZXRDYW5FeGl0KGZhbHNlKTsKKyAgICAgICAg
Zm9yTm9kZShub2RlKSA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBub2RlLT5z
ZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAgICAgCiAg
ICAgY2FzZSBHZXRMb2NhbDogewotICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxl
QWNjZXNzRGF0YSA9IG5vZGUudmFyaWFibGVBY2Nlc3NEYXRhKCk7CisgICAgICAgIFZhcmlhYmxl
QWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRh
KCk7CiAgICAgICAgIGlmICh2YXJpYWJsZUFjY2Vzc0RhdGEtPnByZWRpY3Rpb24oKSA9PSBTcGVj
Tm9uZSkgewogICAgICAgICAgICAgbV9pc1ZhbGlkID0gZmFsc2U7Ci0gICAgICAgICAgICBub2Rl
LnNldENhbkV4aXQodHJ1ZSk7CisgICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgYm9vbCBjYW5FeGl0ID0gZmFs
c2U7CkBAIC0yNzcsNTMgKzI3Niw1MyBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5z
aWduZWQgaW5kCiAgICAgICAgIH0KICAgICAgICAgaWYgKHZhbHVlLnZhbHVlKCkpCiAgICAgICAg
ICAgICBtX2ZvdW5kQ29uc3RhbnRzID0gdHJ1ZTsKLSAgICAgICAgZm9yTm9kZShub2RlSW5kZXgp
ID0gdmFsdWU7Ci0gICAgICAgIG5vZGUuc2V0Q2FuRXhpdChjYW5FeGl0KTsKKyAgICAgICAgZm9y
Tm9kZShub2RlKSA9IHZhbHVlOworICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGNhbkV4aXQpOwog
ICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgR2V0TG9jYWxVbmxpbmtl
ZDogewotICAgICAgICBBYnN0cmFjdFZhbHVlIHZhbHVlID0gbV92YXJpYWJsZXMub3BlcmFuZChu
b2RlLnVubGlua2VkTG9jYWwoKSk7CisgICAgICAgIEFic3RyYWN0VmFsdWUgdmFsdWUgPSBtX3Zh
cmlhYmxlcy5vcGVyYW5kKG5vZGUtPnVubGlua2VkTG9jYWwoKSk7CiAgICAgICAgIGlmICh2YWx1
ZS52YWx1ZSgpKQogICAgICAgICAgICAgbV9mb3VuZENvbnN0YW50cyA9IHRydWU7Ci0gICAgICAg
IGZvck5vZGUobm9kZUluZGV4KSA9IHZhbHVlOwotICAgICAgICBub2RlLnNldENhbkV4aXQoZmFs
c2UpOworICAgICAgICBmb3JOb2RlKG5vZGUpID0gdmFsdWU7CisgICAgICAgIG5vZGUtPnNldENh
bkV4aXQoZmFsc2UpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIAogICAgIGNhc2Ug
U2V0TG9jYWw6IHsKLSAgICAgICAgaWYgKG5vZGUudmFyaWFibGVBY2Nlc3NEYXRhKCktPmlzQ2Fw
dHVyZWQoKQotICAgICAgICAgICAgfHwgbV9ncmFwaC5pc0NyZWF0ZWRUaGlzQXJndW1lbnQobm9k
ZS5sb2NhbCgpKSkgewotICAgICAgICAgICAgbV92YXJpYWJsZXMub3BlcmFuZChub2RlLmxvY2Fs
KCkpID0gZm9yTm9kZShub2RlLmNoaWxkMSgpKTsKLSAgICAgICAgICAgIG5vZGUuc2V0Q2FuRXhp
dChmYWxzZSk7CisgICAgICAgIGlmIChub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+aXNDYXB0
dXJlZCgpCisgICAgICAgICAgICB8fCBtX2dyYXBoLmlzQ3JlYXRlZFRoaXNBcmd1bWVudChub2Rl
LT5sb2NhbCgpKSkgeworICAgICAgICAgICAgbV92YXJpYWJsZXMub3BlcmFuZChub2RlLT5sb2Nh
bCgpKSA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgbm9kZS0+c2V0Q2Fu
RXhpdChmYWxzZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAKLSAg
ICAgICAgaWYgKG5vZGUudmFyaWFibGVBY2Nlc3NEYXRhKCktPnNob3VsZFVzZURvdWJsZUZvcm1h
dCgpKSB7CisgICAgICAgIGlmIChub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+c2hvdWxkVXNl
RG91YmxlRm9ybWF0KCkpIHsKICAgICAgICAgICAgIHNwZWN1bGF0ZU51bWJlclVuYXJ5KG5vZGUp
OwotICAgICAgICAgICAgbV92YXJpYWJsZXMub3BlcmFuZChub2RlLmxvY2FsKCkpLnNldChTcGVj
RG91YmxlKTsKKyAgICAgICAgICAgIG1fdmFyaWFibGVzLm9wZXJhbmQobm9kZS0+bG9jYWwoKSku
c2V0KFNwZWNEb3VibGUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAg
Ci0gICAgICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3RlZFR5cGUgPSBub2RlLnZhcmlhYmxlQWNj
ZXNzRGF0YSgpLT5hcmd1bWVudEF3YXJlUHJlZGljdGlvbigpOworICAgICAgICBTcGVjdWxhdGVk
VHlwZSBwcmVkaWN0ZWRUeXBlID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCktPmFyZ3VtZW50
QXdhcmVQcmVkaWN0aW9uKCk7CiAgICAgICAgIGlmIChpc0ludDMyU3BlY3VsYXRpb24ocHJlZGlj
dGVkVHlwZSkpCiAgICAgICAgICAgICBzcGVjdWxhdGVJbnQzMlVuYXJ5KG5vZGUpOwogICAgICAg
ICBlbHNlIGlmIChpc0NlbGxTcGVjdWxhdGlvbihwcmVkaWN0ZWRUeXBlKSkgewotICAgICAgICAg
ICAgbm9kZS5zZXRDYW5FeGl0KCFpc0NlbGxTcGVjdWxhdGlvbihmb3JOb2RlKG5vZGUuY2hpbGQx
KCkpLm1fdHlwZSkpOwotICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIo
U3BlY0NlbGwpOworICAgICAgICAgICAgbm9kZS5zZXRDYW5FeGl0KCFpc0NlbGxTcGVjdWxhdGlv
bihmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX3R5cGUpKTsKKyAgICAgICAgICAgIGZvck5vZGUo
bm9kZS0+Y2hpbGQxKCkpLmZpbHRlcihTcGVjQ2VsbCk7CiAgICAgICAgIH0gZWxzZSBpZiAoaXNC
b29sZWFuU3BlY3VsYXRpb24ocHJlZGljdGVkVHlwZSkpCiAgICAgICAgICAgICBzcGVjdWxhdGVC
b29sZWFuVW5hcnkobm9kZSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIG5vZGUuc2V0Q2Fu
RXhpdChmYWxzZSk7CisgICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAg
ICAgCi0gICAgICAgIG1fdmFyaWFibGVzLm9wZXJhbmQobm9kZS5sb2NhbCgpKSA9IGZvck5vZGUo
bm9kZS5jaGlsZDEoKSk7CisgICAgICAgIG1fdmFyaWFibGVzLm9wZXJhbmQobm9kZS0+bG9jYWwo
KSkgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAg
ICAgICAgICAgCiAgICAgY2FzZSBTZXRBcmd1bWVudDoKICAgICAgICAgLy8gQXNzZXJ0IHRoYXQg
dGhlIHN0YXRlIG9mIGFyZ3VtZW50cyBoYXMgYmVlbiBzZXQuCi0gICAgICAgIEFTU0VSVCghbV9i
bG9jay0+dmFsdWVzQXRIZWFkLm9wZXJhbmQobm9kZS5sb2NhbCgpKS5pc0NsZWFyKCkpOwotICAg
ICAgICBub2RlLnNldENhbkV4aXQoZmFsc2UpOworICAgICAgICBBU1NFUlQoIW1fYmxvY2stPnZh
bHVlc0F0SGVhZC5vcGVyYW5kKG5vZGUtPmxvY2FsKCkpLmlzQ2xlYXIoKSk7CisgICAgICAgIG5v
ZGUtPnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAg
IGNhc2UgQml0QW5kOgpAQCAtMzMyLDMwICszMzEsMzAgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpl
eGVjdXRlKHVuc2lnbmVkIGluZAogICAgIGNhc2UgQml0UlNoaWZ0OgogICAgIGNhc2UgQml0TFNo
aWZ0OgogICAgIGNhc2UgQml0VVJTaGlmdDogewotICAgICAgICBKU1ZhbHVlIGxlZnQgPSBmb3JO
b2RlKG5vZGUuY2hpbGQxKCkpLnZhbHVlKCk7Ci0gICAgICAgIEpTVmFsdWUgcmlnaHQgPSBmb3JO
b2RlKG5vZGUuY2hpbGQyKCkpLnZhbHVlKCk7CisgICAgICAgIEpTVmFsdWUgbGVmdCA9IGZvck5v
ZGUobm9kZS0+Y2hpbGQxKCkpLnZhbHVlKCk7CisgICAgICAgIEpTVmFsdWUgcmlnaHQgPSBmb3JO
b2RlKG5vZGUtPmNoaWxkMigpKS52YWx1ZSgpOwogICAgICAgICBpZiAobGVmdCAmJiByaWdodCAm
JiBsZWZ0LmlzSW50MzIoKSAmJiByaWdodC5pc0ludDMyKCkpIHsKICAgICAgICAgICAgIGludDMy
X3QgYSA9IGxlZnQuYXNJbnQzMigpOwogICAgICAgICAgICAgaW50MzJfdCBiID0gcmlnaHQuYXNJ
bnQzMigpOwogICAgICAgICAgICAgYm9vbCBjb25zdGFudFdhc1NldDsKICAgICAgICAgICAgIHN3
aXRjaCAobm9kZS5vcCgpKSB7CiAgICAgICAgICAgICBjYXNlIEJpdEFuZDoKLSAgICAgICAgICAg
ICAgICBjb25zdGFudFdhc1NldCA9IHRyeVNldENvbnN0YW50KG5vZGVJbmRleCwgSlNWYWx1ZShh
ICYgYikpOworICAgICAgICAgICAgICAgIGNvbnN0YW50V2FzU2V0ID0gdHJ5U2V0Q29uc3RhbnQo
bm9kZSwgSlNWYWx1ZShhICYgYikpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgY2FzZSBCaXRPcjoKLSAgICAgICAgICAgICAgICBjb25zdGFudFdhc1NldCA9IHRyeVNldENv
bnN0YW50KG5vZGVJbmRleCwgSlNWYWx1ZShhIHwgYikpOworICAgICAgICAgICAgICAgIGNvbnN0
YW50V2FzU2V0ID0gdHJ5U2V0Q29uc3RhbnQobm9kZSwgSlNWYWx1ZShhIHwgYikpOwogICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBCaXRYb3I6Ci0gICAgICAgICAgICAg
ICAgY29uc3RhbnRXYXNTZXQgPSB0cnlTZXRDb25zdGFudChub2RlSW5kZXgsIEpTVmFsdWUoYSBe
IGIpKTsKKyAgICAgICAgICAgICAgICBjb25zdGFudFdhc1NldCA9IHRyeVNldENvbnN0YW50KG5v
ZGUsIEpTVmFsdWUoYSBeIGIpKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
IGNhc2UgQml0UlNoaWZ0OgotICAgICAgICAgICAgICAgIGNvbnN0YW50V2FzU2V0ID0gdHJ5U2V0
Q29uc3RhbnQobm9kZUluZGV4LCBKU1ZhbHVlKGEgPj4gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGIp
KSk7CisgICAgICAgICAgICAgICAgY29uc3RhbnRXYXNTZXQgPSB0cnlTZXRDb25zdGFudChub2Rl
LCBKU1ZhbHVlKGEgPj4gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGIpKSk7CiAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIEJpdExTaGlmdDoKLSAgICAgICAgICAgICAgICBj
b25zdGFudFdhc1NldCA9IHRyeVNldENvbnN0YW50KG5vZGVJbmRleCwgSlNWYWx1ZShhIDw8IHN0
YXRpY19jYXN0PHVpbnQzMl90PihiKSkpOworICAgICAgICAgICAgICAgIGNvbnN0YW50V2FzU2V0
ID0gdHJ5U2V0Q29uc3RhbnQobm9kZSwgSlNWYWx1ZShhIDw8IHN0YXRpY19jYXN0PHVpbnQzMl90
PihiKSkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBCaXRVUlNo
aWZ0OgotICAgICAgICAgICAgICAgIGNvbnN0YW50V2FzU2V0ID0gdHJ5U2V0Q29uc3RhbnQobm9k
ZUluZGV4LCBKU1ZhbHVlKHN0YXRpY19jYXN0PHVpbnQzMl90PihhKSA+PiBzdGF0aWNfY2FzdDx1
aW50MzJfdD4oYikpKTsKKyAgICAgICAgICAgICAgICBjb25zdGFudFdhc1NldCA9IHRyeVNldENv
bnN0YW50KG5vZGUsIEpTVmFsdWUoc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGEpID4+IHN0YXRpY19j
YXN0PHVpbnQzMl90PihiKSkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
ZGVmYXVsdDoKICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwpA
QCAtMzYzLDE5OSArMzYyLDE5OSBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWdu
ZWQgaW5kCiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoY29uc3RhbnRXYXNTZXQpIHsK
ICAgICAgICAgICAgICAgICBtX2ZvdW5kQ29uc3RhbnRzID0gdHJ1ZTsKLSAgICAgICAgICAgICAg
ICBub2RlLnNldENhbkV4aXQoZmFsc2UpOworICAgICAgICAgICAgICAgIG5vZGUtPnNldENhbkV4
aXQoZmFsc2UpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAg
ICB9CiAgICAgICAgIHNwZWN1bGF0ZUludDMyQmluYXJ5KG5vZGUpOwotICAgICAgICBmb3JOb2Rl
KG5vZGVJbmRleCkuc2V0KFNwZWNJbnQzMik7CisgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNw
ZWNJbnQzMik7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBVSW50
MzJUb051bWJlcjogewotICAgICAgICBKU1ZhbHVlIGNoaWxkID0gZm9yTm9kZShub2RlLmNoaWxk
MSgpKS52YWx1ZSgpOworICAgICAgICBKU1ZhbHVlIGNoaWxkID0gZm9yTm9kZShub2RlLT5jaGls
ZDEoKSkudmFsdWUoKTsKICAgICAgICAgaWYgKGNoaWxkICYmIGNoaWxkLmlzTnVtYmVyKCkpIHsK
ICAgICAgICAgICAgIEFTU0VSVChjaGlsZC5pc0ludDMyKCkpOwotICAgICAgICAgICAgaWYgKHRy
eVNldENvbnN0YW50KG5vZGVJbmRleCwgSlNWYWx1ZShjaGlsZC5hc1VJbnQzMigpKSkpIHsKKyAg
ICAgICAgICAgIGlmICh0cnlTZXRDb25zdGFudChub2RlLCBKU1ZhbHVlKGNoaWxkLmFzVUludDMy
KCkpKSkgewogICAgICAgICAgICAgICAgIG1fZm91bmRDb25zdGFudHMgPSB0cnVlOwotICAgICAg
ICAgICAgICAgIG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7CisgICAgICAgICAgICAgICAgbm9kZS0+
c2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9
CiAgICAgICAgIH0KLSAgICAgICAgaWYgKCFub2RlLmNhblNwZWN1bGF0ZUludGVnZXIoKSkgewot
ICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChTcGVjRG91YmxlKTsKLSAgICAgICAg
ICAgIG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7CisgICAgICAgIGlmICghbm9kZS0+Y2FuU3BlY3Vs
YXRlSW50ZWdlcigpKSB7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjRG91Ymxl
KTsKKyAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChTcGVjSW50MzIpOwotICAgICAg
ICAgICAgbm9kZS5zZXRDYW5FeGl0KHRydWUpOworICAgICAgICAgICAgZm9yTm9kZShub2RlKS5z
ZXQoU3BlY0ludDMyKTsKKyAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7CiAgICAg
ICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAgICAgICAKICAgICAgICAgICAg
IAogICAgIGNhc2UgRG91YmxlQXNJbnQzMjogewotICAgICAgICBKU1ZhbHVlIGNoaWxkID0gZm9y
Tm9kZShub2RlLmNoaWxkMSgpKS52YWx1ZSgpOworICAgICAgICBKU1ZhbHVlIGNoaWxkID0gZm9y
Tm9kZShub2RlLT5jaGlsZDEoKSkudmFsdWUoKTsKICAgICAgICAgaWYgKGNoaWxkICYmIGNoaWxk
LmlzTnVtYmVyKCkpIHsKICAgICAgICAgICAgIGRvdWJsZSBhc0RvdWJsZSA9IGNoaWxkLmFzTnVt
YmVyKCk7CiAgICAgICAgICAgICBpbnQzMl90IGFzSW50ID0gSlNDOjp0b0ludDMyKGFzRG91Ymxl
KTsKICAgICAgICAgICAgIGlmIChiaXR3aXNlX2Nhc3Q8aW50NjRfdD4oc3RhdGljX2Nhc3Q8ZG91
YmxlPihhc0ludCkpID09IGJpdHdpc2VfY2FzdDxpbnQ2NF90Pihhc0RvdWJsZSkKLSAgICAgICAg
ICAgICAgICAmJiB0cnlTZXRDb25zdGFudChub2RlSW5kZXgsIEpTVmFsdWUoYXNJbnQpKSkgewor
ICAgICAgICAgICAgICAgICYmIHRyeVNldENvbnN0YW50KG5vZGUsIEpTVmFsdWUoYXNJbnQpKSkg
ewogICAgICAgICAgICAgICAgIG1fZm91bmRDb25zdGFudHMgPSB0cnVlOwogICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIG5vZGUuc2V0Q2Fu
RXhpdCh0cnVlKTsKLSAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY051
bWJlcik7Ci0gICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoU3BlY0ludDMyKTsKKyAgICAg
ICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKKyAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDEo
KSkuZmlsdGVyKFNwZWNOdW1iZXIpOworICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjSW50
MzIpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgICAgICAKICAgICBjYXNlIFZhbHVl
VG9JbnQzMjogewotICAgICAgICBKU1ZhbHVlIGNoaWxkID0gZm9yTm9kZShub2RlLmNoaWxkMSgp
KS52YWx1ZSgpOworICAgICAgICBKU1ZhbHVlIGNoaWxkID0gZm9yTm9kZShub2RlLT5jaGlsZDEo
KSkudmFsdWUoKTsKICAgICAgICAgaWYgKGNoaWxkICYmIGNoaWxkLmlzTnVtYmVyKCkpIHsKICAg
ICAgICAgICAgIGJvb2wgY29uc3RhbnRXYXNTZXQ7CiAgICAgICAgICAgICBpZiAoY2hpbGQuaXNJ
bnQzMigpKQotICAgICAgICAgICAgICAgIGNvbnN0YW50V2FzU2V0ID0gdHJ5U2V0Q29uc3RhbnQo
bm9kZUluZGV4LCBjaGlsZCk7CisgICAgICAgICAgICAgICAgY29uc3RhbnRXYXNTZXQgPSB0cnlT
ZXRDb25zdGFudChub2RlLCBjaGlsZCk7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAg
ICAgY29uc3RhbnRXYXNTZXQgPSB0cnlTZXRDb25zdGFudChub2RlSW5kZXgsIEpTVmFsdWUoSlND
Ojp0b0ludDMyKGNoaWxkLmFzRG91YmxlKCkpKSk7CisgICAgICAgICAgICAgICAgY29uc3RhbnRX
YXNTZXQgPSB0cnlTZXRDb25zdGFudChub2RlLCBKU1ZhbHVlKEpTQzo6dG9JbnQzMihjaGlsZC5h
c0RvdWJsZSgpKSkpOwogICAgICAgICAgICAgaWYgKGNvbnN0YW50V2FzU2V0KSB7CiAgICAgICAg
ICAgICAgICAgbV9mb3VuZENvbnN0YW50cyA9IHRydWU7Ci0gICAgICAgICAgICAgICAgbm9kZS5z
ZXRDYW5FeGl0KGZhbHNlKTsKKyAgICAgICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNl
KTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAg
ICAgICBpZiAobV9ncmFwaFtub2RlLmNoaWxkMSgpXS5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkp
CisgICAgICAgIGlmIChtX2dyYXBoW25vZGUtPmNoaWxkMSgpXS5zaG91bGRTcGVjdWxhdGVJbnRl
Z2VyKCkpCiAgICAgICAgICAgICBzcGVjdWxhdGVJbnQzMlVuYXJ5KG5vZGUpOwotICAgICAgICBl
bHNlIGlmIChtX2dyYXBoW25vZGUuY2hpbGQxKCldLnNob3VsZFNwZWN1bGF0ZU51bWJlcigpKQor
ICAgICAgICBlbHNlIGlmIChtX2dyYXBoW25vZGUtPmNoaWxkMSgpXS5zaG91bGRTcGVjdWxhdGVO
dW1iZXIoKSkKICAgICAgICAgICAgIHNwZWN1bGF0ZU51bWJlclVuYXJ5KG5vZGUpOwotICAgICAg
ICBlbHNlIGlmIChtX2dyYXBoW25vZGUuY2hpbGQxKCldLnNob3VsZFNwZWN1bGF0ZUJvb2xlYW4o
KSkKKyAgICAgICAgZWxzZSBpZiAobV9ncmFwaFtub2RlLT5jaGlsZDEoKV0uc2hvdWxkU3BlY3Vs
YXRlQm9vbGVhbigpKQogICAgICAgICAgICAgc3BlY3VsYXRlQm9vbGVhblVuYXJ5KG5vZGUpOwog
ICAgICAgICBlbHNlCi0gICAgICAgICAgICBub2RlLnNldENhbkV4aXQoZmFsc2UpOworICAgICAg
ICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgIAotICAgICAgICBmb3JOb2Rl
KG5vZGVJbmRleCkuc2V0KFNwZWNJbnQzMik7CisgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNw
ZWNJbnQzMik7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBJbnQz
MlRvRG91YmxlOiB7Ci0gICAgICAgIEpTVmFsdWUgY2hpbGQgPSBmb3JOb2RlKG5vZGUuY2hpbGQx
KCkpLnZhbHVlKCk7CisgICAgICAgIEpTVmFsdWUgY2hpbGQgPSBmb3JOb2RlKG5vZGUtPmNoaWxk
MSgpKS52YWx1ZSgpOwogICAgICAgICBpZiAoY2hpbGQgJiYgY2hpbGQuaXNOdW1iZXIoKQotICAg
ICAgICAgICAgJiYgdHJ5U2V0Q29uc3RhbnQobm9kZUluZGV4LCBKU1ZhbHVlKEpTVmFsdWU6OkVu
Y29kZUFzRG91YmxlLCBjaGlsZC5hc051bWJlcigpKSkpIHsKKyAgICAgICAgICAgICYmIHRyeVNl
dENvbnN0YW50KG5vZGUsIEpTVmFsdWUoSlNWYWx1ZTo6RW5jb2RlQXNEb3VibGUsIGNoaWxkLmFz
TnVtYmVyKCkpKSkgewogICAgICAgICAgICAgbV9mb3VuZENvbnN0YW50cyA9IHRydWU7Ci0gICAg
ICAgICAgICBub2RlLnNldENhbkV4aXQoZmFsc2UpOworICAgICAgICAgICAgbm9kZS0+c2V0Q2Fu
RXhpdChmYWxzZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBzcGVj
dWxhdGVOdW1iZXJVbmFyeShub2RlKTsKLSAgICAgICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbihm
b3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpCi0gICAgICAgICAgICBmb3JOb2RlKG5vZGVJ
bmRleCkuc2V0KFNwZWNEb3VibGVSZWFsKTsKKyAgICAgICAgaWYgKGlzSW50MzJTcGVjdWxhdGlv
bihmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX3R5cGUpKQorICAgICAgICAgICAgZm9yTm9kZShu
b2RlKS5zZXQoU3BlY0RvdWJsZVJlYWwpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBmb3JO
b2RlKG5vZGVJbmRleCkuc2V0KFNwZWNEb3VibGUpOworICAgICAgICAgICAgZm9yTm9kZShub2Rl
KS5zZXQoU3BlY0RvdWJsZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCiAgICAg
Y2FzZSBDaGVja051bWJlcjoKLSAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIo
U3BlY051bWJlcik7CisgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRlcihTcGVj
TnVtYmVyKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICBjYXNlIFZhbHVlQWRk
OgogICAgIGNhc2UgQXJpdGhBZGQ6IHsKLSAgICAgICAgSlNWYWx1ZSBsZWZ0ID0gZm9yTm9kZShu
b2RlLmNoaWxkMSgpKS52YWx1ZSgpOwotICAgICAgICBKU1ZhbHVlIHJpZ2h0ID0gZm9yTm9kZShu
b2RlLmNoaWxkMigpKS52YWx1ZSgpOworICAgICAgICBKU1ZhbHVlIGxlZnQgPSBmb3JOb2RlKG5v
ZGUtPmNoaWxkMSgpKS52YWx1ZSgpOworICAgICAgICBKU1ZhbHVlIHJpZ2h0ID0gZm9yTm9kZShu
b2RlLT5jaGlsZDIoKSkudmFsdWUoKTsKICAgICAgICAgaWYgKGxlZnQgJiYgcmlnaHQgJiYgbGVm
dC5pc051bWJlcigpICYmIHJpZ2h0LmlzTnVtYmVyKCkKLSAgICAgICAgICAgICYmIHRyeVNldENv
bnN0YW50KG5vZGVJbmRleCwgSlNWYWx1ZShsZWZ0LmFzTnVtYmVyKCkgKyByaWdodC5hc051bWJl
cigpKSkpIHsKKyAgICAgICAgICAgICYmIHRyeVNldENvbnN0YW50KG5vZGUsIEpTVmFsdWUobGVm
dC5hc051bWJlcigpICsgcmlnaHQuYXNOdW1iZXIoKSkpKSB7CiAgICAgICAgICAgICBtX2ZvdW5k
Q29uc3RhbnRzID0gdHJ1ZTsKICAgICAgICAgICAgIG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBpZiAobV9ncmFwaC5hZGRTaG91
bGRTcGVjdWxhdGVJbnRlZ2VyKG5vZGUpKSB7CiAgICAgICAgICAgICBzcGVjdWxhdGVJbnQzMkJp
bmFyeSgKLSAgICAgICAgICAgICAgICBub2RlLCAhbm9kZUNhblRydW5jYXRlSW50ZWdlcihub2Rl
LmFyaXRoTm9kZUZsYWdzKCkpKTsKLSAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQo
U3BlY0ludDMyKTsKKyAgICAgICAgICAgICAgICBub2RlLCAhbm9kZUNhblRydW5jYXRlSW50ZWdl
cihub2RlLT5hcml0aE5vZGVGbGFncygpKSk7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNl
dChTcGVjSW50MzIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgaWYg
KE5vZGU6OnNob3VsZFNwZWN1bGF0ZU51bWJlckV4cGVjdGluZ0RlZmluZWQobV9ncmFwaFtub2Rl
LmNoaWxkMSgpXSwgbV9ncmFwaFtub2RlLmNoaWxkMigpXSkpIHsKKyAgICAgICAgaWYgKE5vZGU6
OnNob3VsZFNwZWN1bGF0ZU51bWJlckV4cGVjdGluZ0RlZmluZWQobm9kZS0+Y2hpbGQxKCkubm9k
ZSgpLCBub2RlLT5jaGlsZDIoKS5ub2RlKCkpKSB7CiAgICAgICAgICAgICBzcGVjdWxhdGVOdW1i
ZXJCaW5hcnkobm9kZSk7Ci0gICAgICAgICAgICBpZiAoaXNSZWFsTnVtYmVyU3BlY3VsYXRpb24o
Zm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpCi0gICAgICAgICAgICAgICAgJiYgaXNSZWFs
TnVtYmVyU3BlY3VsYXRpb24oZm9yTm9kZShub2RlLmNoaWxkMigpKS5tX3R5cGUpKQotICAgICAg
ICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoU3BlY0RvdWJsZVJlYWwpOworICAgICAg
ICAgICAgaWYgKGlzUmVhbE51bWJlclNwZWN1bGF0aW9uKGZvck5vZGUobm9kZS0+Y2hpbGQxKCkp
Lm1fdHlwZSkKKyAgICAgICAgICAgICAgICAmJiBpc1JlYWxOdW1iZXJTcGVjdWxhdGlvbihmb3JO
b2RlKG5vZGUtPmNoaWxkMigpKS5tX3R5cGUpKQorICAgICAgICAgICAgICAgIGZvck5vZGUobm9k
ZSkuc2V0KFNwZWNEb3VibGVSZWFsKTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAg
ICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFNwZWNEb3VibGUpOworICAgICAgICAgICAgICAgIGZv
ck5vZGUobm9kZSkuc2V0KFNwZWNEb3VibGUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IH0KLSAgICAgICAgaWYgKG5vZGUub3AoKSA9PSBWYWx1ZUFkZCkgewotICAgICAgICAgICAgY2xv
YmJlcldvcmxkKG5vZGUuY29kZU9yaWdpbiwgaW5kZXhJbkJsb2NrKTsKLSAgICAgICAgICAgIGZv
ck5vZGUobm9kZUluZGV4KS5zZXQoU3BlY1N0cmluZyB8IFNwZWNJbnQzMiB8IFNwZWNOdW1iZXIp
OwotICAgICAgICAgICAgbm9kZS5zZXRDYW5FeGl0KGZhbHNlKTsKKyAgICAgICAgaWYgKG5vZGUt
Pm9wKCkgPT0gVmFsdWVBZGQpIHsKKyAgICAgICAgICAgIGNsb2JiZXJXb3JsZChub2RlLT5jb2Rl
T3JpZ2luLCBpbmRleEluQmxvY2spOworICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3Bl
Y1N0cmluZyB8IFNwZWNJbnQzMiB8IFNwZWNOdW1iZXIpOworICAgICAgICAgICAgbm9kZS0+c2V0
Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAv
LyBXZSBkb24ndCBoYW5kbGUgdGhpcyB5ZXQuIDotKAogICAgICAgICBtX2lzVmFsaWQgPSBmYWxz
ZTsKLSAgICAgICAgbm9kZS5zZXRDYW5FeGl0KHRydWUpOworICAgICAgICBub2RlLT5zZXRDYW5F
eGl0KHRydWUpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgICAgICAKICAgICBjYXNl
IEFyaXRoU3ViOiB7Ci0gICAgICAgIEpTVmFsdWUgbGVmdCA9IGZvck5vZGUobm9kZS5jaGlsZDEo
KSkudmFsdWUoKTsKLSAgICAgICAgSlNWYWx1ZSByaWdodCA9IGZvck5vZGUobm9kZS5jaGlsZDIo
KSkudmFsdWUoKTsKKyAgICAgICAgSlNWYWx1ZSBsZWZ0ID0gZm9yTm9kZShub2RlLT5jaGlsZDEo
KSkudmFsdWUoKTsKKyAgICAgICAgSlNWYWx1ZSByaWdodCA9IGZvck5vZGUobm9kZS0+Y2hpbGQy
KCkpLnZhbHVlKCk7CiAgICAgICAgIGlmIChsZWZ0ICYmIHJpZ2h0ICYmIGxlZnQuaXNOdW1iZXIo
KSAmJiByaWdodC5pc051bWJlcigpCi0gICAgICAgICAgICAmJiB0cnlTZXRDb25zdGFudChub2Rl
SW5kZXgsIEpTVmFsdWUobGVmdC5hc051bWJlcigpIC0gcmlnaHQuYXNOdW1iZXIoKSkpKSB7Cisg
ICAgICAgICAgICAmJiB0cnlTZXRDb25zdGFudChub2RlLCBKU1ZhbHVlKGxlZnQuYXNOdW1iZXIo
KSAtIHJpZ2h0LmFzTnVtYmVyKCkpKSkgewogICAgICAgICAgICAgbV9mb3VuZENvbnN0YW50cyA9
IHRydWU7Ci0gICAgICAgICAgICBub2RlLnNldENhbkV4aXQoZmFsc2UpOworICAgICAgICAgICAg
bm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQog
ICAgICAgICBpZiAobV9ncmFwaC5hZGRTaG91bGRTcGVjdWxhdGVJbnRlZ2VyKG5vZGUpKSB7CiAg
ICAgICAgICAgICBzcGVjdWxhdGVJbnQzMkJpbmFyeSgKLSAgICAgICAgICAgICAgICBub2RlLCAh
bm9kZUNhblRydW5jYXRlSW50ZWdlcihub2RlLmFyaXRoTm9kZUZsYWdzKCkpKTsKLSAgICAgICAg
ICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoU3BlY0ludDMyKTsKKyAgICAgICAgICAgICAgICBu
b2RlLCAhbm9kZUNhblRydW5jYXRlSW50ZWdlcihub2RlLT5hcml0aE5vZGVGbGFncygpKSk7Cisg
ICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjSW50MzIpOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIH0KICAgICAgICAgc3BlY3VsYXRlTnVtYmVyQmluYXJ5KG5vZGUpOwotICAg
ICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFNwZWNEb3VibGUpOworICAgICAgICBmb3JOb2Rl
KG5vZGUpLnNldChTcGVjRG91YmxlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAK
ICAgICBjYXNlIEFyaXRoTmVnYXRlOiB7Ci0gICAgICAgIEpTVmFsdWUgY2hpbGQgPSBmb3JOb2Rl
KG5vZGUuY2hpbGQxKCkpLnZhbHVlKCk7CisgICAgICAgIEpTVmFsdWUgY2hpbGQgPSBmb3JOb2Rl
KG5vZGUtPmNoaWxkMSgpKS52YWx1ZSgpOwogICAgICAgICBpZiAoY2hpbGQgJiYgY2hpbGQuaXNO
dW1iZXIoKQotICAgICAgICAgICAgJiYgdHJ5U2V0Q29uc3RhbnQobm9kZUluZGV4LCBKU1ZhbHVl
KC1jaGlsZC5hc051bWJlcigpKSkpIHsKKyAgICAgICAgICAgICYmIHRyeVNldENvbnN0YW50KG5v
ZGUsIEpTVmFsdWUoLWNoaWxkLmFzTnVtYmVyKCkpKSkgewogICAgICAgICAgICAgbV9mb3VuZENv
bnN0YW50cyA9IHRydWU7Ci0gICAgICAgICAgICBub2RlLnNldENhbkV4aXQoZmFsc2UpOworICAg
ICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgfQogICAgICAgICBpZiAobV9ncmFwaC5uZWdhdGVTaG91bGRTcGVjdWxhdGVJbnRlZ2Vy
KG5vZGUpKSB7CiAgICAgICAgICAgICBzcGVjdWxhdGVJbnQzMlVuYXJ5KAotICAgICAgICAgICAg
ICAgIG5vZGUsICFub2RlQ2FuVHJ1bmNhdGVJbnRlZ2VyKG5vZGUuYXJpdGhOb2RlRmxhZ3MoKSkp
OwotICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChTcGVjSW50MzIpOworICAgICAg
ICAgICAgICAgIG5vZGUsICFub2RlQ2FuVHJ1bmNhdGVJbnRlZ2VyKG5vZGUtPmFyaXRoTm9kZUZs
YWdzKCkpKTsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNJbnQzMik7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBzcGVjdWxhdGVOdW1iZXJVbmFyeShu
b2RlKTsKLSAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChTcGVjRG91YmxlKTsKKyAgICAg
ICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0RvdWJsZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0K
ICAgICAgICAgCiAgICAgY2FzZSBBcml0aE11bDogewotICAgICAgICBKU1ZhbHVlIGxlZnQgPSBm
b3JOb2RlKG5vZGUuY2hpbGQxKCkpLnZhbHVlKCk7Ci0gICAgICAgIEpTVmFsdWUgcmlnaHQgPSBm
b3JOb2RlKG5vZGUuY2hpbGQyKCkpLnZhbHVlKCk7CisgICAgICAgIEpTVmFsdWUgbGVmdCA9IGZv
ck5vZGUobm9kZS0+Y2hpbGQxKCkpLnZhbHVlKCk7CisgICAgICAgIEpTVmFsdWUgcmlnaHQgPSBm
b3JOb2RlKG5vZGUtPmNoaWxkMigpKS52YWx1ZSgpOwogICAgICAgICBpZiAobGVmdCAmJiByaWdo
dCAmJiBsZWZ0LmlzTnVtYmVyKCkgJiYgcmlnaHQuaXNOdW1iZXIoKQotICAgICAgICAgICAgJiYg
dHJ5U2V0Q29uc3RhbnQobm9kZUluZGV4LCBKU1ZhbHVlKGxlZnQuYXNOdW1iZXIoKSAqIHJpZ2h0
LmFzTnVtYmVyKCkpKSkgeworICAgICAgICAgICAgJiYgdHJ5U2V0Q29uc3RhbnQobm9kZSwgSlNW
YWx1ZShsZWZ0LmFzTnVtYmVyKCkgKiByaWdodC5hc051bWJlcigpKSkpIHsKICAgICAgICAgICAg
IG1fZm91bmRDb25zdGFudHMgPSB0cnVlOwotICAgICAgICAgICAgbm9kZS5zZXRDYW5FeGl0KGZh
bHNlKTsKKyAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgaWYgKG1fZ3JhcGgubXVsU2hvdWxkU3BlY3VsYXRl
SW50ZWdlcihub2RlKSkgewogICAgICAgICAgICAgc3BlY3VsYXRlSW50MzJCaW5hcnkoCiAgICAg
ICAgICAgICAgICAgbm9kZSwKLSAgICAgICAgICAgICAgICAhbm9kZUNhblRydW5jYXRlSW50ZWdl
cihub2RlLmFyaXRoTm9kZUZsYWdzKCkpCi0gICAgICAgICAgICAgICAgfHwgIW5vZGVDYW5JZ25v
cmVOZWdhdGl2ZVplcm8obm9kZS5hcml0aE5vZGVGbGFncygpKSk7Ci0gICAgICAgICAgICBmb3JO
b2RlKG5vZGVJbmRleCkuc2V0KFNwZWNJbnQzMik7CisgICAgICAgICAgICAgICAgIW5vZGVDYW5U
cnVuY2F0ZUludGVnZXIobm9kZS0+YXJpdGhOb2RlRmxhZ3MoKSkKKyAgICAgICAgICAgICAgICB8
fCAhbm9kZUNhbklnbm9yZU5lZ2F0aXZlWmVybyhub2RlLT5hcml0aE5vZGVGbGFncygpKSk7Cisg
ICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjSW50MzIpOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIH0KICAgICAgICAgc3BlY3VsYXRlTnVtYmVyQmluYXJ5KG5vZGUpOwotICAg
ICAgICBpZiAoaXNSZWFsTnVtYmVyU3BlY3VsYXRpb24oZm9yTm9kZShub2RlLmNoaWxkMSgpKS5t
X3R5cGUpCi0gICAgICAgICAgICB8fCBpc1JlYWxOdW1iZXJTcGVjdWxhdGlvbihmb3JOb2RlKG5v
ZGUuY2hpbGQyKCkpLm1fdHlwZSkpCi0gICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0
KFNwZWNEb3VibGVSZWFsKTsKKyAgICAgICAgaWYgKGlzUmVhbE51bWJlclNwZWN1bGF0aW9uKGZv
ck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fdHlwZSkKKyAgICAgICAgICAgIHx8IGlzUmVhbE51bWJl
clNwZWN1bGF0aW9uKGZvck5vZGUobm9kZS0+Y2hpbGQyKCkpLm1fdHlwZSkpCisgICAgICAgICAg
ICBmb3JOb2RlKG5vZGUpLnNldChTcGVjRG91YmxlUmVhbCk7CiAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoU3BlY0RvdWJsZSk7CisgICAgICAgICAgICBm
b3JOb2RlKG5vZGUpLnNldChTcGVjRG91YmxlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAg
ICAgICAKQEAgLTU2MywyNCArNTYyLDI0IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1
bnNpZ25lZCBpbmQKICAgICBjYXNlIEFyaXRoTWluOgogICAgIGNhc2UgQXJpdGhNYXg6CiAgICAg
Y2FzZSBBcml0aE1vZDogewotICAgICAgICBKU1ZhbHVlIGxlZnQgPSBmb3JOb2RlKG5vZGUuY2hp
bGQxKCkpLnZhbHVlKCk7Ci0gICAgICAgIEpTVmFsdWUgcmlnaHQgPSBmb3JOb2RlKG5vZGUuY2hp
bGQyKCkpLnZhbHVlKCk7CisgICAgICAgIEpTVmFsdWUgbGVmdCA9IGZvck5vZGUobm9kZS0+Y2hp
bGQxKCkpLnZhbHVlKCk7CisgICAgICAgIEpTVmFsdWUgcmlnaHQgPSBmb3JOb2RlKG5vZGUtPmNo
aWxkMigpKS52YWx1ZSgpOwogICAgICAgICBpZiAobGVmdCAmJiByaWdodCAmJiBsZWZ0LmlzTnVt
YmVyKCkgJiYgcmlnaHQuaXNOdW1iZXIoKSkgewogICAgICAgICAgICAgZG91YmxlIGEgPSBsZWZ0
LmFzTnVtYmVyKCk7CiAgICAgICAgICAgICBkb3VibGUgYiA9IHJpZ2h0LmFzTnVtYmVyKCk7CiAg
ICAgICAgICAgICBib29sIGNvbnN0YW50V2FzU2V0OwogICAgICAgICAgICAgc3dpdGNoIChub2Rl
Lm9wKCkpIHsKICAgICAgICAgICAgIGNhc2UgQXJpdGhEaXY6Ci0gICAgICAgICAgICAgICAgY29u
c3RhbnRXYXNTZXQgPSB0cnlTZXRDb25zdGFudChub2RlSW5kZXgsIEpTVmFsdWUoYSAvIGIpKTsK
KyAgICAgICAgICAgICAgICBjb25zdGFudFdhc1NldCA9IHRyeVNldENvbnN0YW50KG5vZGUsIEpT
VmFsdWUoYSAvIGIpKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2Ug
QXJpdGhNaW46Ci0gICAgICAgICAgICAgICAgY29uc3RhbnRXYXNTZXQgPSB0cnlTZXRDb25zdGFu
dChub2RlSW5kZXgsIEpTVmFsdWUoYSA8IGIgPyBhIDogKGIgPD0gYSA/IGIgOiBhICsgYikpKTsK
KyAgICAgICAgICAgICAgICBjb25zdGFudFdhc1NldCA9IHRyeVNldENvbnN0YW50KG5vZGUsIEpT
VmFsdWUoYSA8IGIgPyBhIDogKGIgPD0gYSA/IGIgOiBhICsgYikpKTsKICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgIGNhc2UgQXJpdGhNYXg6Ci0gICAgICAgICAgICAgICAgY29u
c3RhbnRXYXNTZXQgPSB0cnlTZXRDb25zdGFudChub2RlSW5kZXgsIEpTVmFsdWUoYSA+IGIgPyBh
IDogKGIgPj0gYSA/IGIgOiBhICsgYikpKTsKKyAgICAgICAgICAgICAgICBjb25zdGFudFdhc1Nl
dCA9IHRyeVNldENvbnN0YW50KG5vZGUsIEpTVmFsdWUoYSA+IGIgPyBhIDogKGIgPj0gYSA/IGIg
OiBhICsgYikpKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgQXJp
dGhNb2Q6Ci0gICAgICAgICAgICAgICAgY29uc3RhbnRXYXNTZXQgPSB0cnlTZXRDb25zdGFudChu
b2RlSW5kZXgsIEpTVmFsdWUoZm1vZChhLCBiKSkpOworICAgICAgICAgICAgICAgIGNvbnN0YW50
V2FzU2V0ID0gdHJ5U2V0Q29uc3RhbnQobm9kZSwgSlNWYWx1ZShmbW9kKGEsIGIpKSk7CiAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC01ODksODQgKzU4OCw4NCBAQCBib29s
IEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICBpZiAoY29uc3RhbnRXYXNTZXQpIHsKICAgICAgICAgICAgICAgICBtX2ZvdW5kQ29u
c3RhbnRzID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBub2RlLnNldENhbkV4aXQoZmFsc2UpOwor
ICAgICAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIGlmIChOb2RlOjpzaG91
bGRTcGVjdWxhdGVJbnRlZ2VyRm9yQXJpdGhtZXRpYygKLSAgICAgICAgICAgICAgICBtX2dyYXBo
W25vZGUuY2hpbGQxKCldLCBtX2dyYXBoW25vZGUuY2hpbGQyKCldKQotICAgICAgICAgICAgJiYg
bm9kZS5jYW5TcGVjdWxhdGVJbnRlZ2VyKCkpIHsKKyAgICAgICAgICAgICAgICBub2RlLT5jaGls
ZDEoKS5ub2RlKCksIG5vZGUtPmNoaWxkMigpLm5vZGUoKSkKKyAgICAgICAgICAgICYmIG5vZGUt
PmNhblNwZWN1bGF0ZUludGVnZXIoKSkgewogICAgICAgICAgICAgc3BlY3VsYXRlSW50MzJCaW5h
cnkobm9kZSwgdHJ1ZSk7IC8vIGZvcmNpbmcgY2FuLWV4aXQsIHdoaWNoIGlzIGEgYml0IG9uIHRo
ZSBjb25zZXJ2YXRpdmUgc2lkZS4KLSAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQo
U3BlY0ludDMyKTsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNJbnQzMik7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBzcGVjdWxhdGVOdW1iZXJCaW5h
cnkobm9kZSk7Ci0gICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoU3BlY0RvdWJsZSk7Cisg
ICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNEb3VibGUpOwogICAgICAgICBicmVhazsKICAg
ICB9CiAgICAgICAgICAgICAKICAgICBjYXNlIEFyaXRoQWJzOiB7Ci0gICAgICAgIEpTVmFsdWUg
Y2hpbGQgPSBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLnZhbHVlKCk7CisgICAgICAgIEpTVmFsdWUg
Y2hpbGQgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS52YWx1ZSgpOwogICAgICAgICBpZiAoY2hp
bGQgJiYgY2hpbGQuaXNOdW1iZXIoKQotICAgICAgICAgICAgJiYgdHJ5U2V0Q29uc3RhbnQobm9k
ZUluZGV4LCBKU1ZhbHVlKGZhYnMoY2hpbGQuYXNOdW1iZXIoKSkpKSkgeworICAgICAgICAgICAg
JiYgdHJ5U2V0Q29uc3RhbnQobm9kZSwgSlNWYWx1ZShmYWJzKGNoaWxkLmFzTnVtYmVyKCkpKSkp
IHsKICAgICAgICAgICAgIG1fZm91bmRDb25zdGFudHMgPSB0cnVlOwotICAgICAgICAgICAgbm9k
ZS5zZXRDYW5FeGl0KGZhbHNlKTsKKyAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2Up
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKG1fZ3JhcGhbbm9k
ZS5jaGlsZDEoKV0uc2hvdWxkU3BlY3VsYXRlSW50ZWdlckZvckFyaXRobWV0aWMoKQotICAgICAg
ICAgICAgJiYgbm9kZS5jYW5TcGVjdWxhdGVJbnRlZ2VyKCkpIHsKKyAgICAgICAgaWYgKG5vZGUt
PmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyRm9yQXJpdGhtZXRpYygpCisgICAgICAg
ICAgICAmJiBub2RlLT5jYW5TcGVjdWxhdGVJbnRlZ2VyKCkpIHsKICAgICAgICAgICAgIHNwZWN1
bGF0ZUludDMyVW5hcnkobm9kZSwgdHJ1ZSk7Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRl
eCkuc2V0KFNwZWNJbnQzMik7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjSW50
MzIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgc3BlY3VsYXRlTnVt
YmVyVW5hcnkobm9kZSk7Ci0gICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoU3BlY0RvdWJs
ZSk7CisgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNEb3VibGUpOwogICAgICAgICBicmVh
azsKICAgICB9CiAgICAgICAgICAgICAKICAgICBjYXNlIEFyaXRoU3FydDogewotICAgICAgICBK
U1ZhbHVlIGNoaWxkID0gZm9yTm9kZShub2RlLmNoaWxkMSgpKS52YWx1ZSgpOworICAgICAgICBK
U1ZhbHVlIGNoaWxkID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSkudmFsdWUoKTsKICAgICAgICAg
aWYgKGNoaWxkICYmIGNoaWxkLmlzTnVtYmVyKCkKLSAgICAgICAgICAgICYmIHRyeVNldENvbnN0
YW50KG5vZGVJbmRleCwgSlNWYWx1ZShzcXJ0KGNoaWxkLmFzTnVtYmVyKCkpKSkpIHsKKyAgICAg
ICAgICAgICYmIHRyeVNldENvbnN0YW50KG5vZGUsIEpTVmFsdWUoc3FydChjaGlsZC5hc051bWJl
cigpKSkpKSB7CiAgICAgICAgICAgICBtX2ZvdW5kQ29uc3RhbnRzID0gdHJ1ZTsKLSAgICAgICAg
ICAgIG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7CisgICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0
KGZhbHNlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIHNwZWN1bGF0
ZU51bWJlclVuYXJ5KG5vZGUpOwotICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFNwZWNE
b3VibGUpOworICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjRG91YmxlKTsKICAgICAgICAg
YnJlYWs7CiAgICAgfQogICAgICAgICAgICAgCiAgICAgY2FzZSBMb2dpY2FsTm90OiB7CiAgICAg
ICAgIGJvb2wgZGlkU2V0Q29uc3RhbnQgPSBmYWxzZTsKLSAgICAgICAgc3dpdGNoIChib29sZWFu
UmVzdWx0KG5vZGUsIGZvck5vZGUobm9kZS5jaGlsZDEoKSkpKSB7CisgICAgICAgIHN3aXRjaCAo
Ym9vbGVhblJlc3VsdChub2RlLCBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKSkpIHsKICAgICAgICAg
Y2FzZSBEZWZpbml0ZWx5VHJ1ZToKLSAgICAgICAgICAgIGRpZFNldENvbnN0YW50ID0gdHJ5U2V0
Q29uc3RhbnQobm9kZUluZGV4LCBqc0Jvb2xlYW4oZmFsc2UpKTsKKyAgICAgICAgICAgIGRpZFNl
dENvbnN0YW50ID0gdHJ5U2V0Q29uc3RhbnQobm9kZSwganNCb29sZWFuKGZhbHNlKSk7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBEZWZpbml0ZWx5RmFsc2U6Ci0gICAgICAgICAg
ICBkaWRTZXRDb25zdGFudCA9IHRyeVNldENvbnN0YW50KG5vZGVJbmRleCwganNCb29sZWFuKHRy
dWUpKTsKKyAgICAgICAgICAgIGRpZFNldENvbnN0YW50ID0gdHJ5U2V0Q29uc3RhbnQobm9kZSwg
anNCb29sZWFuKHRydWUpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBkZWZhdWx0Ogog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgaWYgKGRpZFNldENvbnN0YW50
KSB7CiAgICAgICAgICAgICBtX2ZvdW5kQ29uc3RhbnRzID0gdHJ1ZTsKLSAgICAgICAgICAgIG5v
ZGUuc2V0Q2FuRXhpdChmYWxzZSk7CisgICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNl
KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIE5vZGUmIGNoaWxkID0g
bV9ncmFwaFtub2RlLmNoaWxkMSgpXTsKLSAgICAgICAgaWYgKGlzQm9vbGVhblNwZWN1bGF0aW9u
KGNoaWxkLnByZWRpY3Rpb24oKSkpCisgICAgICAgIE5vZGUqIGNoaWxkID0gbm9kZS0+Y2hpbGQx
KCkubm9kZSgpOworICAgICAgICBpZiAoaXNCb29sZWFuU3BlY3VsYXRpb24oY2hpbGQtPnByZWRp
Y3Rpb24oKSkpCiAgICAgICAgICAgICBzcGVjdWxhdGVCb29sZWFuVW5hcnkobm9kZSk7Ci0gICAg
ICAgIGVsc2UgaWYgKGNoaWxkLnNob3VsZFNwZWN1bGF0ZU5vblN0cmluZ0NlbGxPck90aGVyKCkp
IHsKLSAgICAgICAgICAgIG5vZGUuc2V0Q2FuRXhpdCh0cnVlKTsKLSAgICAgICAgICAgIGZvck5v
ZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKChTcGVjQ2VsbCAmIH5TcGVjU3RyaW5nKSB8IFNwZWNP
dGhlcik7Ci0gICAgICAgIH0gZWxzZSBpZiAoY2hpbGQuc2hvdWxkU3BlY3VsYXRlSW50ZWdlcigp
KQorICAgICAgICBlbHNlIGlmIChjaGlsZC0+c2hvdWxkU3BlY3VsYXRlTm9uU3RyaW5nQ2VsbE9y
T3RoZXIoKSkgeworICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKKyAgICAgICAg
ICAgIGZvck5vZGUoY2hpbGQpLmZpbHRlcigoU3BlY0NlbGwgJiB+U3BlY1N0cmluZykgfCBTcGVj
T3RoZXIpOworICAgICAgICB9IGVsc2UgaWYgKGNoaWxkLT5zaG91bGRTcGVjdWxhdGVJbnRlZ2Vy
KCkpCiAgICAgICAgICAgICBzcGVjdWxhdGVJbnQzMlVuYXJ5KG5vZGUpOwotICAgICAgICBlbHNl
IGlmIChjaGlsZC5zaG91bGRTcGVjdWxhdGVOdW1iZXIoKSkKKyAgICAgICAgZWxzZSBpZiAoY2hp
bGQtPnNob3VsZFNwZWN1bGF0ZU51bWJlcigpKQogICAgICAgICAgICAgc3BlY3VsYXRlTnVtYmVy
VW5hcnkobm9kZSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIG5vZGUuc2V0Q2FuRXhpdChm
YWxzZSk7Ci0gICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoU3BlY0Jvb2xlYW4pOworICAg
ICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CisgICAgICAgIGZvck5vZGUobm9kZSku
c2V0KFNwZWNCb29sZWFuKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKQEAgLTY3
NiwzNiArNjc1LDM2IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQK
ICAgICBjYXNlIElzU3RyaW5nOgogICAgIGNhc2UgSXNPYmplY3Q6CiAgICAgY2FzZSBJc0Z1bmN0
aW9uOiB7Ci0gICAgICAgIG5vZGUuc2V0Q2FuRXhpdChub2RlLm9wKCkgPT0gSXNVbmRlZmluZWQg
JiYgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdEZvcihub2RlLmNvZGVPcmlnaW4pLT5tYXNxdWVy
YWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2ludCgpLT5pc1N0aWxsVmFsaWQoKSk7Ci0gICAgICAgIEpT
VmFsdWUgY2hpbGQgPSBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLnZhbHVlKCk7CisgICAgICAgIG5v
ZGUtPnNldENhbkV4aXQobm9kZS0+b3AoKSA9PSBJc1VuZGVmaW5lZCAmJiBtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0Rm9yKG5vZGUtPmNvZGVPcmlnaW4pLT5tYXNxdWVyYWRlc0FzVW5kZWZpbmVk
V2F0Y2hwb2ludCgpLT5pc1N0aWxsVmFsaWQoKSk7CisgICAgICAgIEpTVmFsdWUgY2hpbGQgPSBm
b3JOb2RlKG5vZGUtPmNoaWxkMSgpKS52YWx1ZSgpOwogICAgICAgICBpZiAoY2hpbGQpIHsKICAg
ICAgICAgICAgIGJvb2wgY29uc3RhbnRXYXNTZXQ7Ci0gICAgICAgICAgICBzd2l0Y2ggKG5vZGUu
b3AoKSkgeworICAgICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CiAgICAgICAgICAgICBj
YXNlIElzVW5kZWZpbmVkOgotICAgICAgICAgICAgICAgIGlmIChtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0Rm9yKG5vZGUuY29kZU9yaWdpbiktPm1hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBv
aW50KCktPmlzU3RpbGxWYWxpZCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnN0YW50V2Fz
U2V0ID0gdHJ5U2V0Q29uc3RhbnQobm9kZUluZGV4LCBqc0Jvb2xlYW4oCisgICAgICAgICAgICAg
ICAgaWYgKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3RGb3Iobm9kZS0+Y29kZU9yaWdpbiktPm1h
c3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50KCktPmlzU3RpbGxWYWxpZCgpKSB7CisgICAg
ICAgICAgICAgICAgICAgIGNvbnN0YW50V2FzU2V0ID0gdHJ5U2V0Q29uc3RhbnQobm9kZSwganNC
b29sZWFuKAogICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGQuaXNDZWxsKCkKICAgICAgICAg
ICAgICAgICAgICAgICAgID8gZmFsc2UgCiAgICAgICAgICAgICAgICAgICAgICAgICA6IGNoaWxk
LmlzVW5kZWZpbmVkKCkpKTsKICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
ICAgICAgICBjb25zdGFudFdhc1NldCA9IHRyeVNldENvbnN0YW50KG5vZGVJbmRleCwganNCb29s
ZWFuKAorICAgICAgICAgICAgICAgICAgICBjb25zdGFudFdhc1NldCA9IHRyeVNldENvbnN0YW50
KG5vZGUsIGpzQm9vbGVhbigKICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkLmlzQ2VsbCgp
Ci0gICAgICAgICAgICAgICAgICAgICAgICA/IGNoaWxkLmFzQ2VsbCgpLT5zdHJ1Y3R1cmUoKS0+
bWFzcXVlcmFkZXNBc1VuZGVmaW5lZChtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0Rm9yKG5vZGUu
Y29kZU9yaWdpbikpCisgICAgICAgICAgICAgICAgICAgICAgICA/IGNoaWxkLmFzQ2VsbCgpLT5z
dHJ1Y3R1cmUoKS0+bWFzcXVlcmFkZXNBc1VuZGVmaW5lZChtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0Rm9yKG5vZGUtPmNvZGVPcmlnaW4pKQogICAgICAgICAgICAgICAgICAgICAgICAgOiBjaGls
ZC5pc1VuZGVmaW5lZCgpKSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgY2FzZSBJc0Jvb2xlYW46Ci0gICAgICAgICAgICAgICAgY29uc3Rh
bnRXYXNTZXQgPSB0cnlTZXRDb25zdGFudChub2RlSW5kZXgsIGpzQm9vbGVhbihjaGlsZC5pc0Jv
b2xlYW4oKSkpOworICAgICAgICAgICAgICAgIGNvbnN0YW50V2FzU2V0ID0gdHJ5U2V0Q29uc3Rh
bnQobm9kZSwganNCb29sZWFuKGNoaWxkLmlzQm9vbGVhbigpKSk7CiAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICBjYXNlIElzTnVtYmVyOgotICAgICAgICAgICAgICAgIGNvbnN0
YW50V2FzU2V0ID0gdHJ5U2V0Q29uc3RhbnQobm9kZUluZGV4LCBqc0Jvb2xlYW4oY2hpbGQuaXNO
dW1iZXIoKSkpOworICAgICAgICAgICAgICAgIGNvbnN0YW50V2FzU2V0ID0gdHJ5U2V0Q29uc3Rh
bnQobm9kZSwganNCb29sZWFuKGNoaWxkLmlzTnVtYmVyKCkpKTsKICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgIGNhc2UgSXNTdHJpbmc6Ci0gICAgICAgICAgICAgICAgY29uc3Rh
bnRXYXNTZXQgPSB0cnlTZXRDb25zdGFudChub2RlSW5kZXgsIGpzQm9vbGVhbihpc0pTU3RyaW5n
KGNoaWxkKSkpOworICAgICAgICAgICAgICAgIGNvbnN0YW50V2FzU2V0ID0gdHJ5U2V0Q29uc3Rh
bnQobm9kZSwganNCb29sZWFuKGlzSlNTdHJpbmcoY2hpbGQpKSk7CiAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICBjYXNlIElzT2JqZWN0OgogICAgICAgICAgICAgICAgIGlmIChj
aGlsZC5pc051bGwoKSB8fCAhY2hpbGQuaXNPYmplY3QoKSkgewotICAgICAgICAgICAgICAgICAg
ICBjb25zdGFudFdhc1NldCA9IHRyeVNldENvbnN0YW50KG5vZGVJbmRleCwganNCb29sZWFuKGNo
aWxkLmlzTnVsbCgpKSk7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0YW50V2FzU2V0ID0gdHJ5
U2V0Q29uc3RhbnQobm9kZSwganNCb29sZWFuKGNoaWxkLmlzTnVsbCgpKSk7CiAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGRlZmF1bHQ6
CkBAIC03MTgsNjEgKzcxNyw2MSBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWdu
ZWQgaW5kCiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAotICAgICAgICBmb3JOb2RlKG5vZGVJ
bmRleCkuc2V0KFNwZWNCb29sZWFuKTsKKyAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0Jv
b2xlYW4pOwogICAgICAgICBicmVhazsKICAgICB9CiAKICAgICBjYXNlIFR5cGVPZjogewogICAg
ICAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSBtX2NvZGVCbG9jay0+Z2xvYmFsRGF0YSgp
OwotICAgICAgICBKU1ZhbHVlIGNoaWxkID0gZm9yTm9kZShub2RlLmNoaWxkMSgpKS52YWx1ZSgp
OwotICAgICAgICBBYnN0cmFjdFZhbHVlJiBhYnN0cmFjdENoaWxkID0gZm9yTm9kZShub2RlLmNo
aWxkMSgpKTsKKyAgICAgICAgSlNWYWx1ZSBjaGlsZCA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkp
LnZhbHVlKCk7CisgICAgICAgIEFic3RyYWN0VmFsdWUmIGFic3RyYWN0Q2hpbGQgPSBmb3JOb2Rl
KG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgaWYgKGNoaWxkKSB7Ci0gICAgICAgICAgICBKU1Zh
bHVlIHR5cGVTdHJpbmcgPSBqc1R5cGVTdHJpbmdGb3JWYWx1ZSgqZ2xvYmFsRGF0YSwgbV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdEZvcihub2RlLmNvZGVPcmlnaW4pLCBjaGlsZCk7Ci0gICAgICAg
ICAgICBpZiAodHJ5U2V0Q29uc3RhbnQobm9kZUluZGV4LCB0eXBlU3RyaW5nKSkgeworICAgICAg
ICAgICAgSlNWYWx1ZSB0eXBlU3RyaW5nID0ganNUeXBlU3RyaW5nRm9yVmFsdWUoKmdsb2JhbERh
dGEsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3RGb3Iobm9kZS0+Y29kZU9yaWdpbiksIGNoaWxk
KTsKKyAgICAgICAgICAgIGlmICh0cnlTZXRDb25zdGFudChub2RlLCB0eXBlU3RyaW5nKSkgewog
ICAgICAgICAgICAgICAgIG1fZm91bmRDb25zdGFudHMgPSB0cnVlOwogICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgaWYgKGlzTnVtYmVyU3BlY3Vs
YXRpb24oYWJzdHJhY3RDaGlsZC5tX3R5cGUpKSB7Ci0gICAgICAgICAgICBpZiAodHJ5U2V0Q29u
c3RhbnQobm9kZUluZGV4LCBnbG9iYWxEYXRhLT5zbWFsbFN0cmluZ3MubnVtYmVyU3RyaW5nKCkp
KSB7Ci0gICAgICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY051
bWJlcik7CisgICAgICAgICAgICBpZiAodHJ5U2V0Q29uc3RhbnQobm9kZSwgZ2xvYmFsRGF0YS0+
c21hbGxTdHJpbmdzLm51bWJlclN0cmluZygpKSkgeworICAgICAgICAgICAgICAgIGZvck5vZGUo
bm9kZS0+Y2hpbGQxKCkpLmZpbHRlcihTcGVjTnVtYmVyKTsKICAgICAgICAgICAgICAgICBtX2Zv
dW5kQ29uc3RhbnRzID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
IH0KICAgICAgICAgfSBlbHNlIGlmIChpc1N0cmluZ1NwZWN1bGF0aW9uKGFic3RyYWN0Q2hpbGQu
bV90eXBlKSkgewotICAgICAgICAgICAgaWYgKHRyeVNldENvbnN0YW50KG5vZGVJbmRleCwgZ2xv
YmFsRGF0YS0+c21hbGxTdHJpbmdzLnN0cmluZ1N0cmluZygpKSkgewotICAgICAgICAgICAgICAg
IGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNTdHJpbmcpOworICAgICAgICAgICAg
aWYgKHRyeVNldENvbnN0YW50KG5vZGUsIGdsb2JhbERhdGEtPnNtYWxsU3RyaW5ncy5zdHJpbmdT
dHJpbmcoKSkpIHsKKyAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5maWx0
ZXIoU3BlY1N0cmluZyk7CiAgICAgICAgICAgICAgICAgbV9mb3VuZENvbnN0YW50cyA9IHRydWU7
CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSBp
ZiAoaXNGaW5hbE9iamVjdFNwZWN1bGF0aW9uKGFic3RyYWN0Q2hpbGQubV90eXBlKSB8fCBpc0Fy
cmF5U3BlY3VsYXRpb24oYWJzdHJhY3RDaGlsZC5tX3R5cGUpIHx8IGlzQXJndW1lbnRzU3BlY3Vs
YXRpb24oYWJzdHJhY3RDaGlsZC5tX3R5cGUpKSB7Ci0gICAgICAgICAgICBpZiAodHJ5U2V0Q29u
c3RhbnQobm9kZUluZGV4LCBnbG9iYWxEYXRhLT5zbWFsbFN0cmluZ3Mub2JqZWN0U3RyaW5nKCkp
KSB7Ci0gICAgICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY0Zp
bmFsT2JqZWN0IHwgU3BlY0FycmF5IHwgU3BlY0FyZ3VtZW50cyk7CisgICAgICAgICAgICBpZiAo
dHJ5U2V0Q29uc3RhbnQobm9kZSwgZ2xvYmFsRGF0YS0+c21hbGxTdHJpbmdzLm9iamVjdFN0cmlu
ZygpKSkgeworICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRlcihT
cGVjRmluYWxPYmplY3QgfCBTcGVjQXJyYXkgfCBTcGVjQXJndW1lbnRzKTsKICAgICAgICAgICAg
ICAgICBtX2ZvdW5kQ29uc3RhbnRzID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIGlmIChpc0Z1bmN0aW9uU3BlY3VsYXRpb24oYWJz
dHJhY3RDaGlsZC5tX3R5cGUpKSB7Ci0gICAgICAgICAgICBpZiAodHJ5U2V0Q29uc3RhbnQobm9k
ZUluZGV4LCBnbG9iYWxEYXRhLT5zbWFsbFN0cmluZ3MuZnVuY3Rpb25TdHJpbmcoKSkpIHsKLSAg
ICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjRnVuY3Rpb24p
OworICAgICAgICAgICAgaWYgKHRyeVNldENvbnN0YW50KG5vZGUsIGdsb2JhbERhdGEtPnNtYWxs
U3RyaW5ncy5mdW5jdGlvblN0cmluZygpKSkgeworICAgICAgICAgICAgICAgIGZvck5vZGUobm9k
ZS0+Y2hpbGQxKCkpLmZpbHRlcihTcGVjRnVuY3Rpb24pOwogICAgICAgICAgICAgICAgIG1fZm91
bmRDb25zdGFudHMgPSB0cnVlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
fQogICAgICAgICB9IGVsc2UgaWYgKGlzQm9vbGVhblNwZWN1bGF0aW9uKGFic3RyYWN0Q2hpbGQu
bV90eXBlKSkgewotICAgICAgICAgICAgaWYgKHRyeVNldENvbnN0YW50KG5vZGVJbmRleCwgZ2xv
YmFsRGF0YS0+c21hbGxTdHJpbmdzLmJvb2xlYW5TdHJpbmcoKSkpIHsKLSAgICAgICAgICAgICAg
ICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjQm9vbGVhbik7CisgICAgICAgICAg
ICBpZiAodHJ5U2V0Q29uc3RhbnQobm9kZSwgZ2xvYmFsRGF0YS0+c21hbGxTdHJpbmdzLmJvb2xl
YW5TdHJpbmcoKSkpIHsKKyAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5m
aWx0ZXIoU3BlY0Jvb2xlYW4pOwogICAgICAgICAgICAgICAgIG1fZm91bmRDb25zdGFudHMgPSB0
cnVlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgTm9kZSYgY2hpbGROb2RlID0gbV9ncmFwaFtub2RlLmNoaWxkMSgp
XTsKLSAgICAgICAgICAgIGlmIChpc0NlbGxTcGVjdWxhdGlvbihjaGlsZE5vZGUucHJlZGljdGlv
bigpKSkgewotICAgICAgICAgICAgICAgIGlmIChpc1N0cmluZ1NwZWN1bGF0aW9uKGNoaWxkTm9k
ZS5wcmVkaWN0aW9uKCkpKQotICAgICAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQx
KCkpLmZpbHRlcihTcGVjU3RyaW5nKTsKKyAgICAgICAgICAgIE5vZGUqIGNoaWxkTm9kZSA9IG5v
ZGUtPmNoaWxkMSgpLm5vZGUoKTsKKyAgICAgICAgICAgIGlmIChpc0NlbGxTcGVjdWxhdGlvbihj
aGlsZE5vZGUtPnByZWRpY3Rpb24oKSkpIHsKKyAgICAgICAgICAgICAgICBpZiAoaXNTdHJpbmdT
cGVjdWxhdGlvbihjaGlsZE5vZGUtPnByZWRpY3Rpb24oKSkpCisgICAgICAgICAgICAgICAgICAg
IGZvck5vZGUoY2hpbGROb2RlKS5maWx0ZXIoU3BlY1N0cmluZyk7CiAgICAgICAgICAgICAgICAg
ZWxzZQotICAgICAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihT
cGVjQ2VsbCk7Ci0gICAgICAgICAgICAgICAgbm9kZS5zZXRDYW5FeGl0KHRydWUpOworICAgICAg
ICAgICAgICAgICAgICBmb3JOb2RlKGNoaWxkTm9kZSkuZmlsdGVyKFNwZWNDZWxsKTsKKyAgICAg
ICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOwogICAgICAgICAgICAgfQogICAgICAg
ICB9Ci0gICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoU3BlY1N0cmluZyk7CisgICAgICAg
IGZvck5vZGUobm9kZSkuc2V0KFNwZWNTdHJpbmcpOwogICAgICAgICBicmVhazsKICAgICB9CiAg
ICAgICAgICAgICAKQEAgLTc4MywyNiArNzgyLDI2IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhl
Y3V0ZSh1bnNpZ25lZCBpbmQKICAgICBjYXNlIENvbXBhcmVFcTogewogICAgICAgICBib29sIGNv
bnN0YW50V2FzU2V0ID0gZmFsc2U7CiAKLSAgICAgICAgSlNWYWx1ZSBsZWZ0Q29uc3QgPSBmb3JO
b2RlKG5vZGUuY2hpbGQxKCkpLnZhbHVlKCk7Ci0gICAgICAgIEpTVmFsdWUgcmlnaHRDb25zdCA9
IGZvck5vZGUobm9kZS5jaGlsZDIoKSkudmFsdWUoKTsKKyAgICAgICAgSlNWYWx1ZSBsZWZ0Q29u
c3QgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS52YWx1ZSgpOworICAgICAgICBKU1ZhbHVlIHJp
Z2h0Q29uc3QgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMigpKS52YWx1ZSgpOwogICAgICAgICBpZiAo
bGVmdENvbnN0ICYmIHJpZ2h0Q29uc3QgJiYgbGVmdENvbnN0LmlzTnVtYmVyKCkgJiYgcmlnaHRD
b25zdC5pc051bWJlcigpKSB7CiAgICAgICAgICAgICBkb3VibGUgYSA9IGxlZnRDb25zdC5hc051
bWJlcigpOwogICAgICAgICAgICAgZG91YmxlIGIgPSByaWdodENvbnN0LmFzTnVtYmVyKCk7CiAg
ICAgICAgICAgICBzd2l0Y2ggKG5vZGUub3AoKSkgewogICAgICAgICAgICAgY2FzZSBDb21wYXJl
TGVzczoKLSAgICAgICAgICAgICAgICBjb25zdGFudFdhc1NldCA9IHRyeVNldENvbnN0YW50KG5v
ZGVJbmRleCwganNCb29sZWFuKGEgPCBiKSk7CisgICAgICAgICAgICAgICAgY29uc3RhbnRXYXNT
ZXQgPSB0cnlTZXRDb25zdGFudChub2RlLCBqc0Jvb2xlYW4oYSA8IGIpKTsKICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgQ29tcGFyZUxlc3NFcToKLSAgICAgICAgICAg
ICAgICBjb25zdGFudFdhc1NldCA9IHRyeVNldENvbnN0YW50KG5vZGVJbmRleCwganNCb29sZWFu
KGEgPD0gYikpOworICAgICAgICAgICAgICAgIGNvbnN0YW50V2FzU2V0ID0gdHJ5U2V0Q29uc3Rh
bnQobm9kZSwganNCb29sZWFuKGEgPD0gYikpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgY2FzZSBDb21wYXJlR3JlYXRlcjoKLSAgICAgICAgICAgICAgICBjb25zdGFudFdh
c1NldCA9IHRyeVNldENvbnN0YW50KG5vZGVJbmRleCwganNCb29sZWFuKGEgPiBiKSk7CisgICAg
ICAgICAgICAgICAgY29uc3RhbnRXYXNTZXQgPSB0cnlTZXRDb25zdGFudChub2RlLCBqc0Jvb2xl
YW4oYSA+IGIpKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgQ29t
cGFyZUdyZWF0ZXJFcToKLSAgICAgICAgICAgICAgICBjb25zdGFudFdhc1NldCA9IHRyeVNldENv
bnN0YW50KG5vZGVJbmRleCwganNCb29sZWFuKGEgPj0gYikpOworICAgICAgICAgICAgICAgIGNv
bnN0YW50V2FzU2V0ID0gdHJ5U2V0Q29uc3RhbnQobm9kZSwganNCb29sZWFuKGEgPj0gYikpOwog
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBDb21wYXJlRXE6Ci0gICAg
ICAgICAgICAgICAgY29uc3RhbnRXYXNTZXQgPSB0cnlTZXRDb25zdGFudChub2RlSW5kZXgsIGpz
Qm9vbGVhbihhID09IGIpKTsKKyAgICAgICAgICAgICAgICBjb25zdGFudFdhc1NldCA9IHRyeVNl
dENvbnN0YW50KG5vZGUsIGpzQm9vbGVhbihhID09IGIpKTsKICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKQEAgLTgxMSwyNCArODEwLDI0IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6
ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICAK
LSAgICAgICAgaWYgKCFjb25zdGFudFdhc1NldCAmJiBub2RlLm9wKCkgPT0gQ29tcGFyZUVxKSB7
Ci0gICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSBsZWZ0VHlwZSA9IGZvck5vZGUobm9kZS5jaGls
ZDEoKSkubV90eXBlOwotICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgcmlnaHRUeXBlID0gZm9y
Tm9kZShub2RlLmNoaWxkMigpKS5tX3R5cGU7CisgICAgICAgIGlmICghY29uc3RhbnRXYXNTZXQg
JiYgbm9kZS0+b3AoKSA9PSBDb21wYXJlRXEpIHsKKyAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBl
IGxlZnRUeXBlID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSkubV90eXBlOworICAgICAgICAgICAg
U3BlY3VsYXRlZFR5cGUgcmlnaHRUeXBlID0gZm9yTm9kZShub2RlLT5jaGlsZDIoKSkubV90eXBl
OwogICAgICAgICAgICAgaWYgKChpc0ludDMyU3BlY3VsYXRpb24obGVmdFR5cGUpICYmIGlzT3Ro
ZXJTcGVjdWxhdGlvbihyaWdodFR5cGUpKQogICAgICAgICAgICAgICAgIHx8IChpc090aGVyU3Bl
Y3VsYXRpb24obGVmdFR5cGUpICYmIGlzSW50MzJTcGVjdWxhdGlvbihyaWdodFR5cGUpKSkKLSAg
ICAgICAgICAgICAgICBjb25zdGFudFdhc1NldCA9IHRyeVNldENvbnN0YW50KG5vZGVJbmRleCwg
anNCb29sZWFuKGZhbHNlKSk7CisgICAgICAgICAgICAgICAgY29uc3RhbnRXYXNTZXQgPSB0cnlT
ZXRDb25zdGFudChub2RlLCBqc0Jvb2xlYW4oZmFsc2UpKTsKICAgICAgICAgfQogICAgICAgICAK
ICAgICAgICAgaWYgKGNvbnN0YW50V2FzU2V0KSB7CiAgICAgICAgICAgICBtX2ZvdW5kQ29uc3Rh
bnRzID0gdHJ1ZTsKLSAgICAgICAgICAgIG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7CisgICAgICAg
ICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9CiAgICAgICAgIAotICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFNwZWNCb29sZWFu
KTsKKyAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0Jvb2xlYW4pOwogICAgICAgICAKLSAg
ICAgICAgTm9kZSYgbGVmdCA9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV07Ci0gICAgICAgIE5vZGUm
IHJpZ2h0ID0gbV9ncmFwaFtub2RlLmNoaWxkMigpXTsKKyAgICAgICAgTm9kZSogbGVmdCA9IG5v
ZGUtPmNoaWxkMSgpLm5vZGUoKTsKKyAgICAgICAgTm9kZSogcmlnaHQgPSBub2RlLT5jaGlsZDIo
KS5ub2RlKCk7CiAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIGZpbHRlcjsKICAgICAgICAgU3BlY3Vs
YXRlZFR5cGVDaGVja2VyIGNoZWNrZXI7CiAgICAgICAgIGlmIChOb2RlOjpzaG91bGRTcGVjdWxh
dGVJbnRlZ2VyKGxlZnQsIHJpZ2h0KSkgewpAQCAtODM4LDEyMSArODM3LDExOSBAQCBib29sIEFi
c3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgICAgICBmaWx0ZXIgPSBT
cGVjTnVtYmVyOwogICAgICAgICAgICAgY2hlY2tlciA9IGlzTnVtYmVyU3BlY3VsYXRpb247CiAg
ICAgICAgIH0gZWxzZSBpZiAobm9kZS5vcCgpID09IENvbXBhcmVFcSkgewotICAgICAgICAgICAg
aWYgKChtX2dyYXBoLmlzQ29uc3RhbnQobm9kZS5jaGlsZDEoKS5pbmRleCgpKQotICAgICAgICAg
ICAgICAgICAmJiBtX2dyYXBoLnZhbHVlT2ZKU0NvbnN0YW50KG5vZGUuY2hpbGQxKCkuaW5kZXgo
KSkuaXNOdWxsKCkpCi0gICAgICAgICAgICAgICAgfHwgKG1fZ3JhcGguaXNDb25zdGFudChub2Rl
LmNoaWxkMigpLmluZGV4KCkpCi0gICAgICAgICAgICAgICAgICAgICYmIG1fZ3JhcGgudmFsdWVP
ZkpTQ29uc3RhbnQobm9kZS5jaGlsZDIoKS5pbmRleCgpKS5pc051bGwoKSkpIHsKKyAgICAgICAg
ICAgIGlmICgobV9ncmFwaC5pc0NvbnN0YW50KGxlZnQpCisgICAgICAgICAgICAgICAgICYmIG1f
Z3JhcGgudmFsdWVPZkpTQ29uc3RhbnQobGVmdCkuaXNOdWxsKCkpCisgICAgICAgICAgICAgICAg
fHwgKG1fZ3JhcGguaXNDb25zdGFudChyaWdodCkKKyAgICAgICAgICAgICAgICAgICAgJiYgbV9n
cmFwaC52YWx1ZU9mSlNDb25zdGFudChyaWdodCkuaXNOdWxsKCkpKSB7CiAgICAgICAgICAgICAg
ICAgLy8gV2UgY2FuIGV4aXQgaWYgd2UgaGF2ZW4ndCBmaXJlZCB0aGUgTWFzcXVlcmFkZXNBc1Vu
ZGVmaW5kIHdhdGNocG9pbnQgeWV0LgotICAgICAgICAgICAgICAgIG5vZGUuc2V0Q2FuRXhpdCht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0Rm9yKG5vZGUuY29kZU9yaWdpbiktPm1hc3F1ZXJhZGVz
QXNVbmRlZmluZWRXYXRjaHBvaW50KCktPmlzU3RpbGxWYWxpZCgpKTsKKyAgICAgICAgICAgICAg
ICBub2RlLT5zZXRDYW5FeGl0KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3RGb3Iobm9kZS0+Y29k
ZU9yaWdpbiktPm1hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50KCktPmlzU3RpbGxWYWxp
ZCgpKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IAotICAgICAgICAgICAgaWYgKGxlZnQuc2hvdWxkU3BlY3VsYXRlU3RyaW5nKCkgfHwgcmlnaHQu
c2hvdWxkU3BlY3VsYXRlU3RyaW5nKCkpIHsKLSAgICAgICAgICAgICAgICBub2RlLnNldENhbkV4
aXQoZmFsc2UpOworICAgICAgICAgICAgaWYgKGxlZnQtPnNob3VsZFNwZWN1bGF0ZVN0cmluZygp
IHx8IHJpZ2h0LT5zaG91bGRTcGVjdWxhdGVTdHJpbmcoKSkgeworICAgICAgICAgICAgICAgIG5v
ZGUtPnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgfSAKLSAgICAgICAgICAgIGlmIChsZWZ0LnNob3VsZFNwZWN1bGF0ZU5vblN0cmluZ0NlbGwo
KSAmJiByaWdodC5zaG91bGRTcGVjdWxhdGVOb25TdHJpbmdDZWxsT3JPdGhlcigpKSB7Ci0gICAg
ICAgICAgICAgICAgbm9kZS5zZXRDYW5FeGl0KHRydWUpOwotICAgICAgICAgICAgICAgIGZvck5v
ZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNDZWxsICYgflNwZWNTdHJpbmcpOwotICAgICAg
ICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKChTcGVjQ2VsbCAmIH5TcGVj
U3RyaW5nKSB8IFNwZWNPdGhlcik7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBpZiAobGVmdC5zaG91bGRTcGVjdWxhdGVOb25TdHJpbmdDZWxsT3JP
dGhlcigpICYmIHJpZ2h0LnNob3VsZFNwZWN1bGF0ZU5vblN0cmluZ0NlbGwoKSkgewotICAgICAg
ICAgICAgICAgIG5vZGUuc2V0Q2FuRXhpdCh0cnVlKTsKLSAgICAgICAgICAgICAgICBmb3JOb2Rl
KG5vZGUuY2hpbGQxKCkpLmZpbHRlcigoU3BlY0NlbGwgJiB+U3BlY1N0cmluZykgfCBTcGVjT3Ro
ZXIpOwotICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKFNwZWND
ZWxsICYgflNwZWNTdHJpbmcpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
fQotICAgICAgICAgICAgaWYgKGxlZnQuc2hvdWxkU3BlY3VsYXRlTm9uU3RyaW5nQ2VsbCgpICYm
IHJpZ2h0LnNob3VsZFNwZWN1bGF0ZU5vblN0cmluZ0NlbGwoKSkgewotICAgICAgICAgICAgICAg
IG5vZGUuc2V0Q2FuRXhpdCh0cnVlKTsKLSAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hp
bGQxKCkpLmZpbHRlcihTcGVjQ2VsbCAmIH5TcGVjU3RyaW5nKTsKLSAgICAgICAgICAgICAgICBm
b3JOb2RlKG5vZGUuY2hpbGQyKCkpLmZpbHRlcihTcGVjQ2VsbCAmIH5TcGVjU3RyaW5nKTsKKyAg
ICAgICAgICAgIGlmIChsZWZ0LT5zaG91bGRTcGVjdWxhdGVOb25TdHJpbmdDZWxsKCkgJiYgcmln
aHQtPnNob3VsZFNwZWN1bGF0ZU5vblN0cmluZ0NlbGxPck90aGVyKCkpIHsKKyAgICAgICAgICAg
ICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOworICAgICAgICAgICAgICAgIGZvck5vZGUobGVm
dCkuZmlsdGVyKFNwZWNDZWxsICYgflNwZWNTdHJpbmcpOworICAgICAgICAgICAgICAgIGZvck5v
ZGUocmlnaHQpLmZpbHRlcigoU3BlY0NlbGwgJiB+U3BlY1N0cmluZykgfCBTcGVjT3RoZXIpOwor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGxl
ZnQtPnNob3VsZFNwZWN1bGF0ZU5vblN0cmluZ0NlbGxPck90aGVyKCkgJiYgcmlnaHQtPnNob3Vs
ZFNwZWN1bGF0ZU5vblN0cmluZ0NlbGwoKSkgeworICAgICAgICAgICAgICAgIG5vZGUtPnNldENh
bkV4aXQodHJ1ZSk7CisgICAgICAgICAgICAgICAgZm9yTm9kZShsZWZ0KS5maWx0ZXIoKFNwZWND
ZWxsICYgflNwZWNTdHJpbmcpIHwgU3BlY090aGVyKTsKKyAgICAgICAgICAgICAgICBmb3JOb2Rl
KHJpZ2h0KS5maWx0ZXIoU3BlY0NlbGwgJiB+U3BlY1N0cmluZyk7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAobGVmdC0+c2hvdWxkU3BlY3Vs
YXRlTm9uU3RyaW5nQ2VsbCgpICYmIHJpZ2h0LT5zaG91bGRTcGVjdWxhdGVOb25TdHJpbmdDZWxs
KCkpIHsKKyAgICAgICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOworICAgICAgICAg
ICAgICAgIGZvck5vZGUobGVmdCkuZmlsdGVyKFNwZWNDZWxsICYgflNwZWNTdHJpbmcpOworICAg
ICAgICAgICAgICAgIGZvck5vZGUocmlnaHQpLmZpbHRlcihTcGVjQ2VsbCAmIH5TcGVjU3RyaW5n
KTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAKICAgICAgICAgICAg
IGZpbHRlciA9IFNwZWNUb3A7CiAgICAgICAgICAgICBjaGVja2VyID0gaXNBbnlTcGVjdWxhdGlv
bjsKLSAgICAgICAgICAgIGNsb2JiZXJXb3JsZChub2RlLmNvZGVPcmlnaW4sIGluZGV4SW5CbG9j
ayk7CisgICAgICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+Y29kZU9yaWdpbiwgaW5kZXhJbkJs
b2NrKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGZpbHRlciA9IFNwZWNUb3A7CiAg
ICAgICAgICAgICBjaGVja2VyID0gaXNBbnlTcGVjdWxhdGlvbjsKLSAgICAgICAgICAgIGNsb2Ji
ZXJXb3JsZChub2RlLmNvZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7CisgICAgICAgICAgICBjbG9i
YmVyV29ybGQobm9kZS0+Y29kZU9yaWdpbiwgaW5kZXhJbkJsb2NrKTsKICAgICAgICAgfQogICAg
ICAgICBub2RlLnNldENhbkV4aXQoCi0gICAgICAgICAgICAhY2hlY2tlcihmb3JOb2RlKG5vZGUu
Y2hpbGQxKCkpLm1fdHlwZSkKLSAgICAgICAgICAgIHx8ICFjaGVja2VyKGZvck5vZGUobm9kZS5j
aGlsZDIoKSkubV90eXBlKSk7Ci0gICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVy
KGZpbHRlcik7Ci0gICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKGZpbHRlcik7
CisgICAgICAgICAgICAhY2hlY2tlcihmb3JOb2RlKGxlZnQpLm1fdHlwZSkKKyAgICAgICAgICAg
IHx8ICFjaGVja2VyKGZvck5vZGUocmlnaHQpLm1fdHlwZSkpOworICAgICAgICBmb3JOb2RlKGxl
ZnQpLmZpbHRlcihmaWx0ZXIpOworICAgICAgICBmb3JOb2RlKHJpZ2h0KS5maWx0ZXIoZmlsdGVy
KTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAgICAgCiAgICAgY2FzZSBDb21wYXJl
U3RyaWN0RXE6IHsKLSAgICAgICAgSlNWYWx1ZSBsZWZ0ID0gZm9yTm9kZShub2RlLmNoaWxkMSgp
KS52YWx1ZSgpOwotICAgICAgICBKU1ZhbHVlIHJpZ2h0ID0gZm9yTm9kZShub2RlLmNoaWxkMigp
KS52YWx1ZSgpOworICAgICAgICBOb2RlKiBsZWZ0Tm9kZSA9IG5vZGUtPmNoaWxkMSgpLm5vZGUo
KTsKKyAgICAgICAgTm9kZSogcmlnaHROb2RlID0gbm9kZS0+Y2hpbGQyKCkubm9kZSgpOworICAg
ICAgICBKU1ZhbHVlIGxlZnQgPSBmb3JOb2RlKGxlZnROb2RlKS52YWx1ZSgpOworICAgICAgICBK
U1ZhbHVlIHJpZ2h0ID0gZm9yTm9kZShyaWdodE5vZGUpLnZhbHVlKCk7CiAgICAgICAgIGlmIChs
ZWZ0ICYmIHJpZ2h0ICYmIGxlZnQuaXNOdW1iZXIoKSAmJiByaWdodC5pc051bWJlcigpCi0gICAg
ICAgICAgICAmJiB0cnlTZXRDb25zdGFudChub2RlSW5kZXgsIGpzQm9vbGVhbihsZWZ0LmFzTnVt
YmVyKCkgPT0gcmlnaHQuYXNOdW1iZXIoKSkpKSB7CisgICAgICAgICAgICAmJiB0cnlTZXRDb25z
dGFudChub2RlLCBqc0Jvb2xlYW4obGVmdC5hc051bWJlcigpID09IHJpZ2h0LmFzTnVtYmVyKCkp
KSkgewogICAgICAgICAgICAgbV9mb3VuZENvbnN0YW50cyA9IHRydWU7CiAgICAgICAgICAgICBu
b2RlLnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAg
ICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChTcGVjQm9vbGVhbik7Ci0gICAgICAgIGlmICht
X2dyYXBoLmlzSlNDb25zdGFudChub2RlLmNoaWxkMSgpLmluZGV4KCkpKSB7Ci0gICAgICAgICAg
ICBKU1ZhbHVlIHZhbHVlID0gbV9ncmFwaC52YWx1ZU9mSlNDb25zdGFudChub2RlLmNoaWxkMSgp
LmluZGV4KCkpOworICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjQm9vbGVhbik7CisgICAg
ICAgIGlmIChtX2dyYXBoLmlzSlNDb25zdGFudChsZWZ0Tm9kZSkpIHsKKyAgICAgICAgICAgIEpT
VmFsdWUgdmFsdWUgPSBtX2dyYXBoLnZhbHVlT2ZKU0NvbnN0YW50KGxlZnROb2RlKTsKICAgICAg
ICAgICAgIGlmICghdmFsdWUuaXNOdW1iZXIoKSAmJiAhdmFsdWUuaXNTdHJpbmcoKSkgewotICAg
ICAgICAgICAgICAgIG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7CisgICAgICAgICAgICAgICAgbm9k
ZS0+c2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICB9CiAgICAgICAgIH0KLSAgICAgICAgaWYgKG1fZ3JhcGguaXNKU0NvbnN0YW50KG5vZGUuY2hp
bGQyKCkuaW5kZXgoKSkpIHsKLSAgICAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBtX2dyYXBoLnZh
bHVlT2ZKU0NvbnN0YW50KG5vZGUuY2hpbGQyKCkuaW5kZXgoKSk7CisgICAgICAgIGlmIChtX2dy
YXBoLmlzSlNDb25zdGFudChyaWdodE5vZGUpKSB7CisgICAgICAgICAgICBKU1ZhbHVlIHZhbHVl
ID0gbV9ncmFwaC52YWx1ZU9mSlNDb25zdGFudChyaWdodE5vZGUpOwogICAgICAgICAgICAgaWYg
KCF2YWx1ZS5pc051bWJlcigpICYmICF2YWx1ZS5pc1N0cmluZygpKSB7Ci0gICAgICAgICAgICAg
ICAgbm9kZS5zZXRDYW5FeGl0KGZhbHNlKTsKKyAgICAgICAgICAgICAgICBub2RlLT5zZXRDYW5F
eGl0KGZhbHNlKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAg
ICAgfQotICAgICAgICBpZiAoTm9kZTo6c2hvdWxkU3BlY3VsYXRlSW50ZWdlcigKLSAgICAgICAg
ICAgICAgICBtX2dyYXBoW25vZGUuY2hpbGQxKCldLCBtX2dyYXBoW25vZGUuY2hpbGQyKCldKSkg
eworICAgICAgICBpZiAoTm9kZTo6c2hvdWxkU3BlY3VsYXRlSW50ZWdlcihsZWZ0Tm9kZSwgcmln
aHROb2RlKSkgewogICAgICAgICAgICAgc3BlY3VsYXRlSW50MzJCaW5hcnkobm9kZSk7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICBpZiAoTm9kZTo6c2hvdWxkU3BlY3Vs
YXRlTnVtYmVyKAotICAgICAgICAgICAgICAgIG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0sIG1fZ3Jh
cGhbbm9kZS5jaGlsZDIoKV0pKSB7CisgICAgICAgIGlmIChOb2RlOjpzaG91bGRTcGVjdWxhdGVO
dW1iZXIobGVmdE5vZGUsIHJpZ2h0Tm9kZSkpIHsKICAgICAgICAgICAgIHNwZWN1bGF0ZU51bWJl
ckJpbmFyeShub2RlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIE5v
ZGUmIGxlZnROb2RlID0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXTsKLSAgICAgICAgTm9kZSYgcmln
aHROb2RlID0gbV9ncmFwaFtub2RlLmNoaWxkMigpXTsKLSAgICAgICAgaWYgKGxlZnROb2RlLnNo
b3VsZFNwZWN1bGF0ZVN0cmluZygpIHx8IHJpZ2h0Tm9kZS5zaG91bGRTcGVjdWxhdGVTdHJpbmco
KSkgewotICAgICAgICAgICAgbm9kZS5zZXRDYW5FeGl0KGZhbHNlKTsKKyAgICAgICAgaWYgKGxl
ZnROb2RlLT5zaG91bGRTcGVjdWxhdGVTdHJpbmcoKSB8fCByaWdodE5vZGUtPnNob3VsZFNwZWN1
bGF0ZVN0cmluZygpKSB7CisgICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIGlmIChsZWZ0Tm9kZS5zaG91bGRT
cGVjdWxhdGVOb25TdHJpbmdDZWxsKCkgJiYgcmlnaHROb2RlLnNob3VsZFNwZWN1bGF0ZU5vblN0
cmluZ0NlbGwoKSkgeworICAgICAgICBpZiAobGVmdE5vZGUtPnNob3VsZFNwZWN1bGF0ZU5vblN0
cmluZ0NlbGwoKSAmJiByaWdodE5vZGUtPnNob3VsZFNwZWN1bGF0ZU5vblN0cmluZ0NlbGwoKSkg
ewogICAgICAgICAgICAgbm9kZS5zZXRDYW5FeGl0KHRydWUpOwotICAgICAgICAgICAgZm9yTm9k
ZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoKFNwZWNDZWxsICYgflNwZWNTdHJpbmcpIHwgU3BlY090
aGVyKTsKLSAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKChTcGVjQ2Vs
bCAmIH5TcGVjU3RyaW5nKSB8IFNwZWNPdGhlcik7CisgICAgICAgICAgICBmb3JOb2RlKGxlZnRO
b2RlKS5maWx0ZXIoKFNwZWNDZWxsICYgflNwZWNTdHJpbmcpIHwgU3BlY090aGVyKTsKKyAgICAg
ICAgICAgIGZvck5vZGUocmlnaHROb2RlKS5maWx0ZXIoKFNwZWNDZWxsICYgflNwZWNTdHJpbmcp
IHwgU3BlY090aGVyKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIG5v
ZGUuc2V0Q2FuRXhpdChmYWxzZSk7CisgICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwog
ICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgU3RyaW5nQ2hhckNvZGVB
dDoKLSAgICAgICAgbm9kZS5zZXRDYW5FeGl0KHRydWUpOwotICAgICAgICBmb3JOb2RlKG5vZGUu
Y2hpbGQxKCkpLmZpbHRlcihTcGVjU3RyaW5nKTsKLSAgICAgICAgZm9yTm9kZShub2RlLmNoaWxk
MigpKS5maWx0ZXIoU3BlY0ludDMyKTsKLSAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChT
cGVjSW50MzIpOworICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOworICAgICAgICBmb3JO
b2RlKG5vZGUtPmNoaWxkMSgpKS5maWx0ZXIoU3BlY1N0cmluZyk7CisgICAgICAgIGZvck5vZGUo
bm9kZS0+Y2hpbGQyKCkpLmZpbHRlcihTcGVjSW50MzIpOworICAgICAgICBmb3JOb2RlKG5vZGUp
LnNldChTcGVjSW50MzIpOwogICAgICAgICBicmVhazsKICAgICAgICAgCiAgICAgY2FzZSBTdHJp
bmdDaGFyQXQ6Ci0gICAgICAgIG5vZGUuc2V0Q2FuRXhpdCh0cnVlKTsKLSAgICAgICAgZm9yTm9k
ZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY1N0cmluZyk7Ci0gICAgICAgIGZvck5vZGUobm9k
ZS5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7Ci0gICAgICAgIGZvck5vZGUobm9kZUluZGV4
KS5zZXQoU3BlY1N0cmluZyk7CisgICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7CisgICAg
ICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRlcihTcGVjU3RyaW5nKTsKKyAgICAgICAg
Zm9yTm9kZShub2RlLT5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7CisgICAgICAgIGZvck5v
ZGUobm9kZSkuc2V0KFNwZWNTdHJpbmcpOwogICAgICAgICBicmVhazsKICAgICAgICAgICAgIAog
ICAgIGNhc2UgR2V0QnlWYWw6IHsKLSAgICAgICAgbm9kZS5zZXRDYW5FeGl0KHRydWUpOwotICAg
ICAgICBzd2l0Y2ggKG5vZGUuYXJyYXlNb2RlKCkudHlwZSgpKSB7CisgICAgICAgIG5vZGUtPnNl
dENhbkV4aXQodHJ1ZSk7CisgICAgICAgIHN3aXRjaCAobm9kZS0+YXJyYXlNb2RlKCkudHlwZSgp
KSB7CiAgICAgICAgIGNhc2UgQXJyYXk6OlNlbGVjdFVzaW5nUHJlZGljdGlvbnM6CiAgICAgICAg
IGNhc2UgQXJyYXk6OlVucHJvZmlsZWQ6CiAgICAgICAgIGNhc2UgQXJyYXk6OlVuZGVjaWRlZDoK
QEAgLTk2Miw4MSArOTU5LDgxIEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25l
ZCBpbmQKICAgICAgICAgICAgIG1faXNWYWxpZCA9IGZhbHNlOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIGNhc2UgQXJyYXk6OkdlbmVyaWM6Ci0gICAgICAgICAgICBjbG9iYmVyV29ybGQo
bm9kZS5jb2RlT3JpZ2luLCBpbmRleEluQmxvY2spOwotICAgICAgICAgICAgZm9yTm9kZShub2Rl
SW5kZXgpLm1ha2VUb3AoKTsKKyAgICAgICAgICAgIGNsb2JiZXJXb3JsZChub2RlLT5jb2RlT3Jp
Z2luLCBpbmRleEluQmxvY2spOworICAgICAgICAgICAgZm9yTm9kZShub2RlKS5tYWtlVG9wKCk7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6U3RyaW5nOgotICAgICAg
ICAgICAgZm9yTm9kZShub2RlLmNoaWxkMigpKS5maWx0ZXIoU3BlY0ludDMyKTsKLSAgICAgICAg
ICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoU3BlY1N0cmluZyk7CisgICAgICAgICAgICBmb3JO
b2RlKG5vZGUtPmNoaWxkMigpKS5maWx0ZXIoU3BlY0ludDMyKTsKKyAgICAgICAgICAgIGZvck5v
ZGUobm9kZSkuc2V0KFNwZWNTdHJpbmcpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNh
c2UgQXJyYXk6OkFyZ3VtZW50czoKLSAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDIoKSku
ZmlsdGVyKFNwZWNJbnQzMik7Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkubWFrZVRv
cCgpOworICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQz
Mik7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLm1ha2VUb3AoKTsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICBjYXNlIEFycmF5OjpJbnQzMjoKLSAgICAgICAgICAgIGZvck5vZGUobm9k
ZS5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7Ci0gICAgICAgICAgICBpZiAobm9kZS5hcnJh
eU1vZGUoKS5pc091dE9mQm91bmRzKCkpIHsKLSAgICAgICAgICAgICAgICBjbG9iYmVyV29ybGQo
bm9kZS5jb2RlT3JpZ2luLCBpbmRleEluQmxvY2spOwotICAgICAgICAgICAgICAgIGZvck5vZGUo
bm9kZUluZGV4KS5tYWtlVG9wKCk7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMigp
KS5maWx0ZXIoU3BlY0ludDMyKTsKKyAgICAgICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS5p
c091dE9mQm91bmRzKCkpIHsKKyAgICAgICAgICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+Y29k
ZU9yaWdpbiwgaW5kZXhJbkJsb2NrKTsKKyAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLm1h
a2VUb3AoKTsKICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgIGZvck5vZGUobm9k
ZUluZGV4KS5zZXQoU3BlY0ludDMyKTsKKyAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNl
dChTcGVjSW50MzIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OkRv
dWJsZToKLSAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQz
Mik7Ci0gICAgICAgICAgICBpZiAobm9kZS5hcnJheU1vZGUoKS5pc091dE9mQm91bmRzKCkpIHsK
LSAgICAgICAgICAgICAgICBjbG9iYmVyV29ybGQobm9kZS5jb2RlT3JpZ2luLCBpbmRleEluQmxv
Y2spOwotICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5tYWtlVG9wKCk7Ci0gICAg
ICAgICAgICB9IGVsc2UgaWYgKG5vZGUuYXJyYXlNb2RlKCkuaXNTYW5lQ2hhaW4oKSkKLSAgICAg
ICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFNwZWNEb3VibGUpOworICAgICAgICAg
ICAgZm9yTm9kZShub2RlLT5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7CisgICAgICAgICAg
ICBpZiAobm9kZS0+YXJyYXlNb2RlKCkuaXNPdXRPZkJvdW5kcygpKSB7CisgICAgICAgICAgICAg
ICAgY2xvYmJlcldvcmxkKG5vZGUtPmNvZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7CisgICAgICAg
ICAgICAgICAgZm9yTm9kZShub2RlKS5tYWtlVG9wKCk7CisgICAgICAgICAgICB9IGVsc2UgaWYg
KG5vZGUtPmFycmF5TW9kZSgpLmlzU2FuZUNoYWluKCkpCisgICAgICAgICAgICAgICAgZm9yTm9k
ZShub2RlKS5zZXQoU3BlY0RvdWJsZSk7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAg
ICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChTcGVjRG91YmxlUmVhbCk7CisgICAgICAgICAgICAg
ICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0RvdWJsZVJlYWwpOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3VvdXM6CiAgICAgICAgIGNhc2UgQXJyYXk6OkFy
cmF5U3RvcmFnZToKICAgICAgICAgY2FzZSBBcnJheTo6U2xvd1B1dEFycmF5U3RvcmFnZToKLSAg
ICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7Ci0gICAg
ICAgICAgICBpZiAobm9kZS5hcnJheU1vZGUoKS5pc091dE9mQm91bmRzKCkpCi0gICAgICAgICAg
ICAgICAgY2xvYmJlcldvcmxkKG5vZGUuY29kZU9yaWdpbiwgaW5kZXhJbkJsb2NrKTsKLSAgICAg
ICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5tYWtlVG9wKCk7CisgICAgICAgICAgICBmb3JOb2Rl
KG5vZGUtPmNoaWxkMigpKS5maWx0ZXIoU3BlY0ludDMyKTsKKyAgICAgICAgICAgIGlmIChub2Rl
LT5hcnJheU1vZGUoKS5pc091dE9mQm91bmRzKCkpCisgICAgICAgICAgICAgICAgY2xvYmJlcldv
cmxkKG5vZGUtPmNvZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7CisgICAgICAgICAgICBmb3JOb2Rl
KG5vZGUpLm1ha2VUb3AoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEFycmF5
OjpJbnQ4QXJyYXk6Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQyKCkpLmZpbHRlcihT
cGVjSW50MzIpOwotICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChTcGVjSW50MzIp
OworICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7
CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjSW50MzIpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OkludDE2QXJyYXk6Ci0gICAgICAgICAgICBmb3JO
b2RlKG5vZGUuY2hpbGQyKCkpLmZpbHRlcihTcGVjSW50MzIpOwotICAgICAgICAgICAgZm9yTm9k
ZShub2RlSW5kZXgpLnNldChTcGVjSW50MzIpOworICAgICAgICAgICAgZm9yTm9kZShub2RlLT5j
aGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNl
dChTcGVjSW50MzIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6Oklu
dDMyQXJyYXk6Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQyKCkpLmZpbHRlcihTcGVj
SW50MzIpOwotICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChTcGVjSW50MzIpOwor
ICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7Cisg
ICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjSW50MzIpOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OlVpbnQ4QXJyYXk6Ci0gICAgICAgICAgICBmb3JOb2Rl
KG5vZGUuY2hpbGQyKCkpLmZpbHRlcihTcGVjSW50MzIpOwotICAgICAgICAgICAgZm9yTm9kZShu
b2RlSW5kZXgpLnNldChTcGVjSW50MzIpOworICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGls
ZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChT
cGVjSW50MzIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OlVpbnQ4
Q2xhbXBlZEFycmF5OgotICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMigpKS5maWx0ZXIo
U3BlY0ludDMyKTsKLSAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoU3BlY0ludDMy
KTsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQyKCkpLmZpbHRlcihTcGVjSW50MzIp
OworICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0ludDMyKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICBjYXNlIEFycmF5OjpVaW50MTZBcnJheToKLSAgICAgICAgICAgIGZv
ck5vZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7Ci0gICAgICAgICAgICBmb3JO
b2RlKG5vZGVJbmRleCkuc2V0KFNwZWNJbnQzMik7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUt
PmNoaWxkMigpKS5maWx0ZXIoU3BlY0ludDMyKTsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZSku
c2V0KFNwZWNJbnQzMik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6
VWludDMyQXJyYXk6Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQyKCkpLmZpbHRlcihT
cGVjSW50MzIpOwotICAgICAgICAgICAgaWYgKG5vZGUuc2hvdWxkU3BlY3VsYXRlSW50ZWdlcigp
KQotICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoU3BlY0ludDMyKTsKKyAg
ICAgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQyKCkpLmZpbHRlcihTcGVjSW50MzIpOworICAg
ICAgICAgICAgaWYgKG5vZGUtPnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKSkKKyAgICAgICAgICAg
ICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjSW50MzIpOwogICAgICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoU3BlY0RvdWJsZSk7CisgICAgICAg
ICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0RvdWJsZSk7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgY2FzZSBBcnJheTo6RmxvYXQzMkFycmF5OgotICAgICAgICAgICAgZm9yTm9k
ZShub2RlLmNoaWxkMigpKS5maWx0ZXIoU3BlY0ludDMyKTsKLSAgICAgICAgICAgIGZvck5vZGUo
bm9kZUluZGV4KS5zZXQoU3BlY0RvdWJsZSk7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNo
aWxkMigpKS5maWx0ZXIoU3BlY0ludDMyKTsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0
KFNwZWNEb3VibGUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OkZs
b2F0NjRBcnJheToKLSAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKFNw
ZWNJbnQzMik7Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFNwZWNEb3VibGUp
OworICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7
CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjRG91YmxlKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKQEAgLTEwNDcsNDMgKzEwNDQsNDMgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpl
eGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICAgICAgCiAgICAgY2FzZSBQdXRCeVZhbDoKICAg
ICBjYXNlIFB1dEJ5VmFsQWxpYXM6IHsKLSAgICAgICAgbm9kZS5zZXRDYW5FeGl0KHRydWUpOwor
ICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOwogICAgICAgICBFZGdlIGNoaWxkMSA9IG1f
Z3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCk7CiAgICAgICAgIEVkZ2UgY2hpbGQyID0gbV9ncmFw
aC52YXJBcmdDaGlsZChub2RlLCAxKTsKICAgICAgICAgRWRnZSBjaGlsZDMgPSBtX2dyYXBoLnZh
ckFyZ0NoaWxkKG5vZGUsIDIpOwotICAgICAgICBzd2l0Y2ggKG5vZGUuYXJyYXlNb2RlKCkubW9k
ZUZvclB1dCgpLnR5cGUoKSkgeworICAgICAgICBzd2l0Y2ggKG5vZGUtPmFycmF5TW9kZSgpLm1v
ZGVGb3JQdXQoKS50eXBlKCkpIHsKICAgICAgICAgY2FzZSBBcnJheTo6Rm9yY2VFeGl0OgogICAg
ICAgICAgICAgbV9pc1ZhbGlkID0gZmFsc2U7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
Y2FzZSBBcnJheTo6R2VuZXJpYzoKLSAgICAgICAgICAgIGNsb2JiZXJXb3JsZChub2RlLmNvZGVP
cmlnaW4sIGluZGV4SW5CbG9jayk7CisgICAgICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+Y29k
ZU9yaWdpbiwgaW5kZXhJbkJsb2NrKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNl
IEFycmF5OjpJbnQzMjoKICAgICAgICAgICAgIGZvck5vZGUoY2hpbGQxKS5maWx0ZXIoU3BlY0Nl
bGwpOwogICAgICAgICAgICAgZm9yTm9kZShjaGlsZDIpLmZpbHRlcihTcGVjSW50MzIpOwogICAg
ICAgICAgICAgZm9yTm9kZShjaGlsZDMpLmZpbHRlcihTcGVjSW50MzIpOwotICAgICAgICAgICAg
aWYgKG5vZGUuYXJyYXlNb2RlKCkuaXNPdXRPZkJvdW5kcygpKQotICAgICAgICAgICAgICAgIGNs
b2JiZXJXb3JsZChub2RlLmNvZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7CisgICAgICAgICAgICBp
ZiAobm9kZS0+YXJyYXlNb2RlKCkuaXNPdXRPZkJvdW5kcygpKQorICAgICAgICAgICAgICAgIGNs
b2JiZXJXb3JsZChub2RlLT5jb2RlT3JpZ2luLCBpbmRleEluQmxvY2spOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OkRvdWJsZToKICAgICAgICAgICAgIGZvck5vZGUo
Y2hpbGQxKS5maWx0ZXIoU3BlY0NlbGwpOwogICAgICAgICAgICAgZm9yTm9kZShjaGlsZDIpLmZp
bHRlcihTcGVjSW50MzIpOwogICAgICAgICAgICAgZm9yTm9kZShjaGlsZDMpLmZpbHRlcihTcGVj
UmVhbE51bWJlcik7Ci0gICAgICAgICAgICBpZiAobm9kZS5hcnJheU1vZGUoKS5pc091dE9mQm91
bmRzKCkpCi0gICAgICAgICAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUuY29kZU9yaWdpbiwgaW5k
ZXhJbkJsb2NrKTsKKyAgICAgICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS5pc091dE9mQm91
bmRzKCkpCisgICAgICAgICAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUtPmNvZGVPcmlnaW4sIGlu
ZGV4SW5CbG9jayk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6Q29u
dGlndW91czoKICAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlTdG9yYWdlOgogICAgICAgICAgICAg
Zm9yTm9kZShjaGlsZDEpLmZpbHRlcihTcGVjQ2VsbCk7CiAgICAgICAgICAgICBmb3JOb2RlKGNo
aWxkMikuZmlsdGVyKFNwZWNJbnQzMik7Ci0gICAgICAgICAgICBpZiAobm9kZS5hcnJheU1vZGUo
KS5pc091dE9mQm91bmRzKCkpCi0gICAgICAgICAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUuY29k
ZU9yaWdpbiwgaW5kZXhJbkJsb2NrKTsKKyAgICAgICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUo
KS5pc091dE9mQm91bmRzKCkpCisgICAgICAgICAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUtPmNv
ZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2Fz
ZSBBcnJheTo6U2xvd1B1dEFycmF5U3RvcmFnZToKICAgICAgICAgICAgIGZvck5vZGUoY2hpbGQx
KS5maWx0ZXIoU3BlY0NlbGwpOwogICAgICAgICAgICAgZm9yTm9kZShjaGlsZDIpLmZpbHRlcihT
cGVjSW50MzIpOwotICAgICAgICAgICAgaWYgKG5vZGUuYXJyYXlNb2RlKCkubWF5U3RvcmVUb0hv
bGUoKSkKLSAgICAgICAgICAgICAgICBjbG9iYmVyV29ybGQobm9kZS5jb2RlT3JpZ2luLCBpbmRl
eEluQmxvY2spOworICAgICAgICAgICAgaWYgKG5vZGUtPmFycmF5TW9kZSgpLm1heVN0b3JlVG9I
b2xlKCkpCisgICAgICAgICAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUtPmNvZGVPcmlnaW4sIGlu
ZGV4SW5CbG9jayk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6QXJn
dW1lbnRzOgogICAgICAgICAgICAgZm9yTm9kZShjaGlsZDEpLmZpbHRlcihTcGVjQ2VsbCk7CkBA
IC0xMDkyLDcgKzEwODksNyBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQg
aW5kCiAgICAgICAgIGNhc2UgQXJyYXk6OkludDhBcnJheToKICAgICAgICAgICAgIGZvck5vZGUo
Y2hpbGQxKS5maWx0ZXIoU3BlY0NlbGwpOwogICAgICAgICAgICAgZm9yTm9kZShjaGlsZDIpLmZp
bHRlcihTcGVjSW50MzIpOwotICAgICAgICAgICAgaWYgKG1fZ3JhcGhbY2hpbGQzXS5zaG91bGRT
cGVjdWxhdGVJbnRlZ2VyKCkpCisgICAgICAgICAgICBpZiAoY2hpbGQzLT5zaG91bGRTcGVjdWxh
dGVJbnRlZ2VyKCkpCiAgICAgICAgICAgICAgICAgZm9yTm9kZShjaGlsZDMpLmZpbHRlcihTcGVj
SW50MzIpOwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIGZvck5vZGUoY2hpbGQz
KS5maWx0ZXIoU3BlY051bWJlcik7CkBAIC0xMTAwLDcgKzEwOTcsNyBAQCBib29sIEFic3RyYWN0
U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgIGNhc2UgQXJyYXk6OkludDE2QXJy
YXk6CiAgICAgICAgICAgICBmb3JOb2RlKGNoaWxkMSkuZmlsdGVyKFNwZWNDZWxsKTsKICAgICAg
ICAgICAgIGZvck5vZGUoY2hpbGQyKS5maWx0ZXIoU3BlY0ludDMyKTsKLSAgICAgICAgICAgIGlm
IChtX2dyYXBoW2NoaWxkM10uc2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKQorICAgICAgICAgICAg
aWYgKGNoaWxkMy0+c2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKQogICAgICAgICAgICAgICAgIGZv
ck5vZGUoY2hpbGQzKS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGVsc2UKICAgICAg
ICAgICAgICAgICBmb3JOb2RlKGNoaWxkMykuZmlsdGVyKFNwZWNOdW1iZXIpOwpAQCAtMTEwOCw3
ICsxMTA1LDcgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAg
ICAgICBjYXNlIEFycmF5OjpJbnQzMkFycmF5OgogICAgICAgICAgICAgZm9yTm9kZShjaGlsZDEp
LmZpbHRlcihTcGVjQ2VsbCk7CiAgICAgICAgICAgICBmb3JOb2RlKGNoaWxkMikuZmlsdGVyKFNw
ZWNJbnQzMik7Ci0gICAgICAgICAgICBpZiAobV9ncmFwaFtjaGlsZDNdLnNob3VsZFNwZWN1bGF0
ZUludGVnZXIoKSkKKyAgICAgICAgICAgIGlmIChjaGlsZDMtPnNob3VsZFNwZWN1bGF0ZUludGVn
ZXIoKSkKICAgICAgICAgICAgICAgICBmb3JOb2RlKGNoaWxkMykuZmlsdGVyKFNwZWNJbnQzMik7
CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgZm9yTm9kZShjaGlsZDMpLmZpbHRl
cihTcGVjTnVtYmVyKTsKQEAgLTExMTYsNyArMTExMyw3IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6
ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgY2FzZSBBcnJheTo6VWludDhBcnJheToKICAg
ICAgICAgICAgIGZvck5vZGUoY2hpbGQxKS5maWx0ZXIoU3BlY0NlbGwpOwogICAgICAgICAgICAg
Zm9yTm9kZShjaGlsZDIpLmZpbHRlcihTcGVjSW50MzIpOwotICAgICAgICAgICAgaWYgKG1fZ3Jh
cGhbY2hpbGQzXS5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpCisgICAgICAgICAgICBpZiAoY2hp
bGQzLT5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpCiAgICAgICAgICAgICAgICAgZm9yTm9kZShj
aGlsZDMpLmZpbHRlcihTcGVjSW50MzIpOwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAg
ICAgIGZvck5vZGUoY2hpbGQzKS5maWx0ZXIoU3BlY051bWJlcik7CkBAIC0xMTI0LDcgKzExMjEs
NyBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgIGNh
c2UgQXJyYXk6OlVpbnQ4Q2xhbXBlZEFycmF5OgogICAgICAgICAgICAgZm9yTm9kZShjaGlsZDEp
LmZpbHRlcihTcGVjQ2VsbCk7CiAgICAgICAgICAgICBmb3JOb2RlKGNoaWxkMikuZmlsdGVyKFNw
ZWNJbnQzMik7Ci0gICAgICAgICAgICBpZiAobV9ncmFwaFtjaGlsZDNdLnNob3VsZFNwZWN1bGF0
ZUludGVnZXIoKSkKKyAgICAgICAgICAgIGlmIChjaGlsZDMtPnNob3VsZFNwZWN1bGF0ZUludGVn
ZXIoKSkKICAgICAgICAgICAgICAgICBmb3JOb2RlKGNoaWxkMykuZmlsdGVyKFNwZWNJbnQzMik7
CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgZm9yTm9kZShjaGlsZDMpLmZpbHRl
cihTcGVjTnVtYmVyKTsKQEAgLTExMzIsNyArMTEyOSw3IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6
ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgY2FzZSBBcnJheTo6VWludDE2QXJyYXk6CiAg
ICAgICAgICAgICBmb3JOb2RlKGNoaWxkMSkuZmlsdGVyKFNwZWNDZWxsKTsKICAgICAgICAgICAg
IGZvck5vZGUoY2hpbGQyKS5maWx0ZXIoU3BlY0ludDMyKTsKLSAgICAgICAgICAgIGlmIChtX2dy
YXBoW2NoaWxkM10uc2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKQorICAgICAgICAgICAgaWYgKGNo
aWxkMy0+c2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKQogICAgICAgICAgICAgICAgIGZvck5vZGUo
Y2hpbGQzKS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAg
ICAgICBmb3JOb2RlKGNoaWxkMykuZmlsdGVyKFNwZWNOdW1iZXIpOwpAQCAtMTE0MCw3ICsxMTM3
LDcgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICBj
YXNlIEFycmF5OjpVaW50MzJBcnJheToKICAgICAgICAgICAgIGZvck5vZGUoY2hpbGQxKS5maWx0
ZXIoU3BlY0NlbGwpOwogICAgICAgICAgICAgZm9yTm9kZShjaGlsZDIpLmZpbHRlcihTcGVjSW50
MzIpOwotICAgICAgICAgICAgaWYgKG1fZ3JhcGhbY2hpbGQzXS5zaG91bGRTcGVjdWxhdGVJbnRl
Z2VyKCkpCisgICAgICAgICAgICBpZiAoY2hpbGQzLT5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkp
CiAgICAgICAgICAgICAgICAgZm9yTm9kZShjaGlsZDMpLmZpbHRlcihTcGVjSW50MzIpOwogICAg
ICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIGZvck5vZGUoY2hpbGQzKS5maWx0ZXIoU3Bl
Y051bWJlcik7CkBAIC0xMTYzLDE2NiArMTE2MCwxODggQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpl
eGVjdXRlKHVuc2lnbmVkIGluZAogICAgIH0KICAgICAgICAgICAgIAogICAgIGNhc2UgQXJyYXlQ
dXNoOgotICAgICAgICBub2RlLnNldENhbkV4aXQodHJ1ZSk7Ci0gICAgICAgIHN3aXRjaCAobm9k
ZS5hcnJheU1vZGUoKS50eXBlKCkpIHsKKyAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsK
KyAgICAgICAgc3dpdGNoIChub2RlLT5hcnJheU1vZGUoKS50eXBlKCkpIHsKICAgICAgICAgY2Fz
ZSBBcnJheTo6SW50MzI6Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQyKCkpLmZpbHRl
cihTcGVjSW50MzIpOworICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDIoKSkuZmlsdGVy
KFNwZWNJbnQzMik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6RG91
YmxlOgotICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMigpKS5maWx0ZXIoU3BlY1JlYWxO
dW1iZXIpOworICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDIoKSkuZmlsdGVyKFNwZWNS
ZWFsTnVtYmVyKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBkZWZhdWx0OgogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUuY29kZU9y
aWdpbiwgaW5kZXhJbkJsb2NrKTsKLSAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChTcGVj
TnVtYmVyKTsKKyAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUtPmNvZGVPcmlnaW4sIGluZGV4SW5C
bG9jayk7CisgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNOdW1iZXIpOwogICAgICAgICBi
cmVhazsKICAgICAgICAgICAgIAogICAgIGNhc2UgQXJyYXlQb3A6Ci0gICAgICAgIG5vZGUuc2V0
Q2FuRXhpdCh0cnVlKTsKLSAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUuY29kZU9yaWdpbiwgaW5k
ZXhJbkJsb2NrKTsKLSAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLm1ha2VUb3AoKTsKKyAgICAg
ICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKKyAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUtPmNv
ZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7CisgICAgICAgIGZvck5vZGUobm9kZSkubWFrZVRvcCgp
OwogICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgIGNhc2UgUmVnRXhwRXhlYzoKICAg
ICBjYXNlIFJlZ0V4cFRlc3Q6Ci0gICAgICAgIG5vZGUuc2V0Q2FuRXhpdCgKLSAgICAgICAgICAg
ICFpc0NlbGxTcGVjdWxhdGlvbihmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkKLSAgICAg
ICAgICAgIHx8ICFpc0NlbGxTcGVjdWxhdGlvbihmb3JOb2RlKG5vZGUuY2hpbGQyKCkpLm1fdHlw
ZSkpOwotICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjQ2VsbCk7Ci0g
ICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKFNwZWNDZWxsKTsKLSAgICAgICAg
Zm9yTm9kZShub2RlSW5kZXgpLm1ha2VUb3AoKTsKKyAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCgK
KyAgICAgICAgICAgICFpc0NlbGxTcGVjdWxhdGlvbihmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5t
X3R5cGUpCisgICAgICAgICAgICB8fCAhaXNDZWxsU3BlY3VsYXRpb24oZm9yTm9kZShub2RlLT5j
aGlsZDIoKSkubV90eXBlKSk7CisgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRl
cihTcGVjQ2VsbCk7CisgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQyKCkpLmZpbHRlcihTcGVj
Q2VsbCk7CisgICAgICAgIGZvck5vZGUobm9kZSkubWFrZVRvcCgpOwogICAgICAgICBicmVhazsK
ICAgICAgICAgICAgIAogICAgIGNhc2UgSnVtcDoKLSAgICAgICAgbm9kZS5zZXRDYW5FeGl0KGZh
bHNlKTsKKyAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgCiAgICAgY2FzZSBCcmFuY2g6IHsKLSAgICAgICAgQm9vbGVhblJlc3VsdCBy
ZXN1bHQgPSBib29sZWFuUmVzdWx0KG5vZGUsIGZvck5vZGUobm9kZS5jaGlsZDEoKSkpOworICAg
ICAgICBOb2RlKiBjaGlsZCA9IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKKyAgICAgICAgQm9vbGVh
blJlc3VsdCByZXN1bHQgPSBib29sZWFuUmVzdWx0KG5vZGUsIGZvck5vZGUoY2hpbGQpKTsKICAg
ICAgICAgaWYgKHJlc3VsdCA9PSBEZWZpbml0ZWx5VHJ1ZSkgewogICAgICAgICAgICAgbV9icmFu
Y2hEaXJlY3Rpb24gPSBUYWtlVHJ1ZTsKLSAgICAgICAgICAgIG5vZGUuc2V0Q2FuRXhpdChmYWxz
ZSk7CisgICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICB9CiAgICAgICAgIGlmIChyZXN1bHQgPT0gRGVmaW5pdGVseUZhbHNlKSB7
CiAgICAgICAgICAgICBtX2JyYW5jaERpcmVjdGlvbiA9IFRha2VGYWxzZTsKLSAgICAgICAgICAg
IG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7CisgICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZh
bHNlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIC8vIEZJWE1FOiBU
aGUgYWJvdmUgaGFuZGxlcyB0aGUgdHJpdmlhbCBjYXNlcyBvZiBzcGFyc2UgY29uZGl0aW9uYWwK
ICAgICAgICAgLy8gY29uc3RhbnQgcHJvcGFnYXRpb24sIGJ1dCB3ZSBjYW4gZG8gYmV0dGVyOgog
ICAgICAgICAvLyBXZSBjYW4gc3BlY2lhbGl6ZSB0aGUgc291cmNlIHZhcmlhYmxlJ3MgdmFsdWUg
b24gZWFjaCBkaXJlY3Rpb24gb2YKICAgICAgICAgLy8gdGhlIGJyYW5jaC4KLSAgICAgICAgTm9k
ZSYgY2hpbGQgPSBtX2dyYXBoW25vZGUuY2hpbGQxKCldOwotICAgICAgICBpZiAoY2hpbGQuc2hv
dWxkU3BlY3VsYXRlQm9vbGVhbigpKQorICAgICAgICBpZiAoY2hpbGQtPnNob3VsZFNwZWN1bGF0
ZUJvb2xlYW4oKSkKICAgICAgICAgICAgIHNwZWN1bGF0ZUJvb2xlYW5VbmFyeShub2RlKTsKLSAg
ICAgICAgZWxzZSBpZiAoY2hpbGQuc2hvdWxkU3BlY3VsYXRlTm9uU3RyaW5nQ2VsbE9yT3RoZXIo
KSkgewotICAgICAgICAgICAgbm9kZS5zZXRDYW5FeGl0KHRydWUpOwotICAgICAgICAgICAgZm9y
Tm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoKFNwZWNDZWxsICYgflNwZWNTdHJpbmcpIHwgU3Bl
Y090aGVyKTsKLSAgICAgICAgfSBlbHNlIGlmIChjaGlsZC5zaG91bGRTcGVjdWxhdGVJbnRlZ2Vy
KCkpCisgICAgICAgIGVsc2UgaWYgKGNoaWxkLT5zaG91bGRTcGVjdWxhdGVOb25TdHJpbmdDZWxs
T3JPdGhlcigpKSB7CisgICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOworICAgICAg
ICAgICAgZm9yTm9kZShjaGlsZCkuZmlsdGVyKChTcGVjQ2VsbCAmIH5TcGVjU3RyaW5nKSB8IFNw
ZWNPdGhlcik7CisgICAgICAgIH0gZWxzZSBpZiAoY2hpbGQtPnNob3VsZFNwZWN1bGF0ZUludGVn
ZXIoKSkKICAgICAgICAgICAgIHNwZWN1bGF0ZUludDMyVW5hcnkobm9kZSk7Ci0gICAgICAgIGVs
c2UgaWYgKGNoaWxkLnNob3VsZFNwZWN1bGF0ZU51bWJlcigpKQorICAgICAgICBlbHNlIGlmIChj
aGlsZC0+c2hvdWxkU3BlY3VsYXRlTnVtYmVyKCkpCiAgICAgICAgICAgICBzcGVjdWxhdGVOdW1i
ZXJVbmFyeShub2RlKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgbm9kZS5zZXRDYW5FeGl0
KGZhbHNlKTsKKyAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICBt
X2JyYW5jaERpcmVjdGlvbiA9IFRha2VCb3RoOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAg
ICAgICAgICAKICAgICBjYXNlIFJldHVybjoKICAgICAgICAgbV9pc1ZhbGlkID0gZmFsc2U7Ci0g
ICAgICAgIG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7CisgICAgICAgIG5vZGUtPnNldENhbkV4aXQo
ZmFsc2UpOwogICAgICAgICBicmVhazsKICAgICAgICAgCiAgICAgY2FzZSBUaHJvdzoKICAgICBj
YXNlIFRocm93UmVmZXJlbmNlRXJyb3I6CiAgICAgICAgIG1faXNWYWxpZCA9IGZhbHNlOwotICAg
ICAgICBub2RlLnNldENhbkV4aXQodHJ1ZSk7CisgICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1
ZSk7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAgY2FzZSBUb1ByaW1pdGl2ZTog
ewotICAgICAgICBKU1ZhbHVlIGNoaWxkQ29uc3QgPSBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLnZh
bHVlKCk7Ci0gICAgICAgIGlmIChjaGlsZENvbnN0ICYmIGNoaWxkQ29uc3QuaXNOdW1iZXIoKSAm
JiB0cnlTZXRDb25zdGFudChub2RlSW5kZXgsIGNoaWxkQ29uc3QpKSB7CisgICAgICAgIE5vZGUq
IGNoaWxkID0gbm9kZS0+Y2hpbGQxKCkubm9kZSgpOworICAgICAgICAKKyAgICAgICAgSlNWYWx1
ZSBjaGlsZENvbnN0ID0gZm9yTm9kZShjaGlsZCkudmFsdWUoKTsKKyAgICAgICAgaWYgKGNoaWxk
Q29uc3QgJiYgY2hpbGRDb25zdC5pc051bWJlcigpICYmIHRyeVNldENvbnN0YW50KG5vZGUsIGNo
aWxkQ29uc3QpKSB7CiAgICAgICAgICAgICBtX2ZvdW5kQ29uc3RhbnRzID0gdHJ1ZTsKLSAgICAg
ICAgICAgIG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7CisgICAgICAgICAgICBub2RlLT5zZXRDYW5F
eGl0KGZhbHNlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIAotICAg
ICAgICBOb2RlJiBjaGlsZCA9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV07Ci0gICAgICAgIGlmIChj
aGlsZC5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpIHsKKyAgICAgICAgaWYgKGNoaWxkLT5zaG91
bGRTcGVjdWxhdGVJbnRlZ2VyKCkpIHsKICAgICAgICAgICAgIHNwZWN1bGF0ZUludDMyVW5hcnko
bm9kZSk7Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFNwZWNJbnQzMik7Cisg
ICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjSW50MzIpOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIH0KIAotICAgICAgICBBYnN0cmFjdFZhbHVlJiBzb3VyY2UgPSBmb3JOb2Rl
KG5vZGUuY2hpbGQxKCkpOwotICAgICAgICBBYnN0cmFjdFZhbHVlJiBkZXN0aW5hdGlvbiA9IGZv
ck5vZGUobm9kZUluZGV4KTsKLSAgICAgICAgICAgIAorICAgICAgICBBYnN0cmFjdFZhbHVlJiBz
b3VyY2UgPSBmb3JOb2RlKGNoaWxkKTsKKyAgICAgICAgQWJzdHJhY3RWYWx1ZSYgZGVzdGluYXRp
b24gPSBmb3JOb2RlKG5vZGUpOworICAgICAgICAKKyAgICAgICAgLy8gTkIuIFRoZSBtb3JlIGNh
bm9uaWNhbCB3YXkgb2Ygd3JpdGluZyB0aGlzIHdvdWxkIGhhdmUgYmVlbjoKKyAgICAgICAgLy8K
KyAgICAgICAgLy8gZGVzdGluYXRpb24gPSBzb3VyY2U7CisgICAgICAgIC8vIGlmIChkZXN0aW5h
dGlvbi5tX3R5cGUgJiAhKFNwZWNOdW1iZXIgfCBTcGVjU3RyaW5nIHwgU3BlY0Jvb2xlYW4pKSB7
CisgICAgICAgIC8vICAgICBkZXN0aW5hdGlvbi5maWx0ZXIoU3BlY051bWJlciB8IFNwZWNTdHJp
bmcgfCBTcGVjQm9vbGVhbik7CisgICAgICAgIC8vICAgICBBYnN0cmFjdFZhbHVlIHN0cmluZzsK
KyAgICAgICAgLy8gICAgIHN0cmluZy5zZXQoZ2xvYmFsRGF0YS0+c3RyaW5nU3RydWN0dXJlKTsK
KyAgICAgICAgLy8gICAgIGRlc3RpbmF0aW9uLm1lcmdlKHN0cmluZyk7CisgICAgICAgIC8vIH0K
KyAgICAgICAgLy8KKyAgICAgICAgLy8gVGhlIHJlYXNvbiB3aHkgdGhpcyB3b3VsZCwgaW4gbW9z
dCBvdGhlciBjYXNlcywgaGF2ZSBiZWVuIGJldHRlciBpcyB0aGF0CisgICAgICAgIC8vIHRoZW4g
ZGVzdGluYXRpb24gd291bGQgcHJlc2VydmUgYW55IG5vbi1TcGVjdWxhdGVkVHlwZSBrbm93bGVk
Z2Ugb2Ygc291cmNlLgorICAgICAgICAvLyBBcyBpdCBzdGFuZHMsIHRoZSBjb2RlIGJlbG93IGZv
cmdldHMgYW55IG5vbi1TcGVjdWxhdGVkVHlwZSBrbm93bGVkZ2UgdGhhdAorICAgICAgICAvLyBz
b3VyY2Ugd291bGQgaGF2ZSBoYWQuIEZvcnR1bmF0ZWx5LCB0aG91Z2gsIGZvciB0aGluZ3MgbGlr
ZSBzdHJpbmdzIGFuZAorICAgICAgICAvLyBudW1iZXJzIGFuZCBib29sZWFucywgd2UgZG9uJ3Qg
Y2FyZSBhYm91dCB0aGUgbm9uLVNwZWN1bGF0ZWRUeXBlIGtub3dlZGdlOgorICAgICAgICAvLyB0
aGUgc3RydWN0dXJlIHdvbid0IHRlbGwgdXMgYW55dGhpbmcgd2UgZG9uJ3QgYWxyZWFkeSBrbm93
LCBhbmQgbmVpdGhlcgorICAgICAgICAvLyB3aWxsIEFycmF5TW9kZXMuIEFuZCBpZiB0aGUgc291
cmNlIHdhcyBhIG1lYW5pbmdmdWwgY29uc3RhbnQgdGhlbiB3ZQorICAgICAgICAvLyB3b3VsZCBo
YXZlIGhhbmRsZWQgdGhhdCBhYm92ZS4gVW5mb3J0dW5hdGVseSwgdGhpcyBkb2VzIG1lYW4gdGhh
dAorICAgICAgICAvLyBUb1ByaW1pdGl2ZSB3aWxsIGN1cnJlbnRseSBmb3JnZXQgc3RyaW5nIGNv
bnN0YW50cy4gQnV0IHRoYXQncyBub3QgYSBiaWcKKyAgICAgICAgLy8gZGVhbCBzaW5jZSB3ZSBk
b24ndCBkbyBhbnkgb3B0aW1pemF0aW9uIG9uIHRob3NlIGN1cnJlbnRseS4KKyAgICAgICAgCiAg
ICAgICAgIFNwZWN1bGF0ZWRUeXBlIHR5cGUgPSBzb3VyY2UubV90eXBlOwogICAgICAgICBpZiAo
dHlwZSAmIH4oU3BlY051bWJlciB8IFNwZWNTdHJpbmcgfCBTcGVjQm9vbGVhbikpIHsKICAgICAg
ICAgICAgIHR5cGUgJj0gKFNwZWNOdW1iZXIgfCBTcGVjU3RyaW5nIHwgU3BlY0Jvb2xlYW4pOwog
ICAgICAgICAgICAgdHlwZSB8PSBTcGVjU3RyaW5nOwogICAgICAgICB9CiAgICAgICAgIGRlc3Rp
bmF0aW9uLnNldCh0eXBlKTsKLSAgICAgICAgbm9kZS5zZXRDYW5FeGl0KGZhbHNlKTsKKyAgICAg
ICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAg
ICAgICAgIAogICAgIGNhc2UgU3RyQ2F0OgotICAgICAgICBub2RlLnNldENhbkV4aXQoZmFsc2Up
OwotICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFNwZWNTdHJpbmcpOworICAgICAgICBu
b2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKKyAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY1N0
cmluZyk7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAgY2FzZSBOZXdBcnJheToK
LSAgICAgICAgbm9kZS5zZXRDYW5FeGl0KHRydWUpOwotICAgICAgICBmb3JOb2RlKG5vZGVJbmRl
eCkuc2V0KG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUuY29kZU9yaWdpbiktPmFycmF5U3Ry
dWN0dXJlRm9ySW5kZXhpbmdUeXBlRHVyaW5nQWxsb2NhdGlvbihub2RlLmluZGV4aW5nVHlwZSgp
KSk7CisgICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7CisgICAgICAgIGZvck5vZGUobm9k
ZUluZGV4KS5zZXQobV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+Y29kZU9yaWdpbiktPmFy
cmF5U3RydWN0dXJlRm9ySW5kZXhpbmdUeXBlRHVyaW5nQWxsb2NhdGlvbihub2RlLT5pbmRleGlu
Z1R5cGUoKSkpOwogICAgICAgICBtX2hhdmVTdHJ1Y3R1cmVzID0gdHJ1ZTsKICAgICAgICAgYnJl
YWs7CiAgICAgICAgIAogICAgIGNhc2UgTmV3QXJyYXlCdWZmZXI6Ci0gICAgICAgIG5vZGUuc2V0
Q2FuRXhpdCh0cnVlKTsKLSAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChtX2dyYXBoLmds
b2JhbE9iamVjdEZvcihub2RlLmNvZGVPcmlnaW4pLT5hcnJheVN0cnVjdHVyZUZvckluZGV4aW5n
VHlwZUR1cmluZ0FsbG9jYXRpb24obm9kZS5pbmRleGluZ1R5cGUoKSkpOworICAgICAgICBub2Rl
LT5zZXRDYW5FeGl0KHRydWUpOworICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChtX2dyYXBoLmds
b2JhbE9iamVjdEZvcihub2RlLT5jb2RlT3JpZ2luKS0+YXJyYXlTdHJ1Y3R1cmVGb3JJbmRleGlu
Z1R5cGVEdXJpbmdBbGxvY2F0aW9uKG5vZGUtPmluZGV4aW5nVHlwZSgpKSk7CiAgICAgICAgIG1f
aGF2ZVN0cnVjdHVyZXMgPSB0cnVlOwogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgTmV3QXJy
YXlXaXRoU2l6ZToKLSAgICAgICAgbm9kZS5zZXRDYW5FeGl0KHRydWUpOwotICAgICAgICBmb3JO
b2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjSW50MzIpOwotICAgICAgICBmb3JOb2RlKG5v
ZGVJbmRleCkuc2V0KFNwZWNBcnJheSk7CisgICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7
CisgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRlcihTcGVjSW50MzIpOworICAg
ICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjQXJyYXkpOwogICAgICAgICBtX2hhdmVTdHJ1Y3R1
cmVzID0gdHJ1ZTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICBjYXNlIE5ld1Jl
Z2V4cDoKLSAgICAgICAgbm9kZS5zZXRDYW5FeGl0KGZhbHNlKTsKLSAgICAgICAgZm9yTm9kZShu
b2RlSW5kZXgpLnNldChtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLmNvZGVPcmlnaW4pLT5y
ZWdFeHBTdHJ1Y3R1cmUoKSk7CisgICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOworICAg
ICAgICBmb3JOb2RlKG5vZGUpLnNldChtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5jb2Rl
T3JpZ2luKS0+cmVnRXhwU3RydWN0dXJlKCkpOwogICAgICAgICBtX2hhdmVTdHJ1Y3R1cmVzID0g
dHJ1ZTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICBjYXNlIENvbnZlcnRUaGlz
OiB7Ci0gICAgICAgIE5vZGUmIGNoaWxkID0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXTsKLSAgICAg
ICAgQWJzdHJhY3RWYWx1ZSYgc291cmNlID0gZm9yTm9kZShub2RlLmNoaWxkMSgpKTsKLSAgICAg
ICAgQWJzdHJhY3RWYWx1ZSYgZGVzdGluYXRpb24gPSBmb3JOb2RlKG5vZGVJbmRleCk7CisgICAg
ICAgIE5vZGUqIGNoaWxkID0gbm9kZS0+Y2hpbGQxKCkubm9kZSgpOworICAgICAgICBBYnN0cmFj
dFZhbHVlJiBzb3VyY2UgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgQWJzdHJh
Y3RWYWx1ZSYgZGVzdGluYXRpb24gPSBmb3JOb2RlKG5vZGUpOwogICAgICAgICAgICAgCiAgICAg
ICAgIGlmIChpc09iamVjdFNwZWN1bGF0aW9uKHNvdXJjZS5tX3R5cGUpKSB7CiAgICAgICAgICAg
ICAvLyBUaGlzIGlzIHRoZSBzaW1wbGUgY2FzZS4gV2UgYWxyZWFkeSBrbm93IHRoYXQgdGhlIHNv
dXJjZSBpcyBhbgogICAgICAgICAgICAgLy8gb2JqZWN0LCBzbyB0aGVyZSdzIG5vdGhpbmcgdG8g
ZG8uIEkgZG9uJ3QgdGhpbmsgdGhpcyBjYXNlIHdpbGwKICAgICAgICAgICAgIC8vIGJlIGhpdCwg
YnV0IHRoZW4gYWdhaW4sIHlvdSBuZXZlciBrbm93LgogICAgICAgICAgICAgZGVzdGluYXRpb24g
PSBzb3VyY2U7Ci0gICAgICAgICAgICBub2RlLnNldENhbkV4aXQoZmFsc2UpOworICAgICAgICAg
ICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgICAgICBtX2ZvdW5kQ29uc3RhbnRz
ID0gdHJ1ZTsgLy8gVGVsbCB0aGUgY29uc3RhbnQgZm9sZGVyIHRvIHR1cm4gdGhpcyBpbnRvIElk
ZW50aXR5LgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAg
IG5vZGUuc2V0Q2FuRXhpdCh0cnVlKTsKKyAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsK
ICAgICAgICAgCi0gICAgICAgIGlmIChpc090aGVyU3BlY3VsYXRpb24oY2hpbGQucHJlZGljdGlv
bigpKSkgeworICAgICAgICBpZiAoaXNPdGhlclNwZWN1bGF0aW9uKGNoaWxkLT5wcmVkaWN0aW9u
KCkpKSB7CiAgICAgICAgICAgICBzb3VyY2UuZmlsdGVyKFNwZWNPdGhlcik7CiAgICAgICAgICAg
ICBkZXN0aW5hdGlvbi5zZXQoU3BlY09iamVjdE90aGVyKTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBpZiAoaXNPYmplY3RTcGVjdWxhdGlvbihjaGls
ZC5wcmVkaWN0aW9uKCkpKSB7CisgICAgICAgIGlmIChpc09iamVjdFNwZWN1bGF0aW9uKGNoaWxk
LT5wcmVkaWN0aW9uKCkpKSB7CiAgICAgICAgICAgICBzb3VyY2UuZmlsdGVyKFNwZWNPYmplY3RN
YXNrKTsKICAgICAgICAgICAgIGRlc3RpbmF0aW9uID0gc291cmNlOwogICAgICAgICAgICAgYnJl
YWs7CkBAIC0xMzM0LDEwICsxMzUzLDEwIEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1
bnNpZ25lZCBpbmQKICAgICB9CiAKICAgICBjYXNlIENyZWF0ZVRoaXM6IHsKLSAgICAgICAgQWJz
dHJhY3RWYWx1ZSYgc291cmNlID0gZm9yTm9kZShub2RlLmNoaWxkMSgpKTsKLSAgICAgICAgQWJz
dHJhY3RWYWx1ZSYgZGVzdGluYXRpb24gPSBmb3JOb2RlKG5vZGVJbmRleCk7CisgICAgICAgIEFi
c3RyYWN0VmFsdWUmIHNvdXJjZSA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBB
YnN0cmFjdFZhbHVlJiBkZXN0aW5hdGlvbiA9IGZvck5vZGUobm9kZSk7CiAgICAgICAgIAotICAg
ICAgICBub2RlLnNldENhbkV4aXQoIWlzQ2VsbFNwZWN1bGF0aW9uKHNvdXJjZS5tX3R5cGUpKTsK
KyAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCghaXNDZWxsU3BlY3VsYXRpb24oc291cmNlLm1fdHlw
ZSkpOwogICAgICAgICAgICAgCiAgICAgICAgIHNvdXJjZS5maWx0ZXIoU3BlY0Z1bmN0aW9uKTsK
ICAgICAgICAgZGVzdGluYXRpb24uc2V0KFNwZWNGaW5hbE9iamVjdCk7CkBAIC0xMzQ1LDQxICsx
MzY0LDQxIEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICB9
CiAgICAgICAgIAogICAgIGNhc2UgSW5oZXJpdG9ySURXYXRjaHBvaW50OgotICAgICAgICBub2Rl
LnNldENhbkV4aXQodHJ1ZSk7CisgICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7CiAgICAg
ICAgIGJyZWFrOwogCiAgICAgY2FzZSBOZXdPYmplY3Q6Ci0gICAgICAgIG5vZGUuc2V0Q2FuRXhp
dChmYWxzZSk7Ci0gICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQobm9kZS5zdHJ1Y3R1cmUo
KSk7CisgICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOworICAgICAgICBmb3JOb2RlKG5v
ZGUpLnNldChub2RlLT5zdHJ1Y3R1cmUoKSk7CiAgICAgICAgIG1faGF2ZVN0cnVjdHVyZXMgPSB0
cnVlOwogICAgICAgICBicmVhazsKICAgICAgICAgCiAgICAgY2FzZSBDcmVhdGVBY3RpdmF0aW9u
OgotICAgICAgICBub2RlLnNldENhbkV4aXQoZmFsc2UpOwotICAgICAgICBmb3JOb2RlKG5vZGVJ
bmRleCkuc2V0KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3RGb3Iobm9kZS5jb2RlT3JpZ2luKS0+
YWN0aXZhdGlvblN0cnVjdHVyZSgpKTsKKyAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7
CisgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3RGb3Io
bm9kZS0+Y29kZU9yaWdpbiktPmFjdGl2YXRpb25TdHJ1Y3R1cmUoKSk7CiAgICAgICAgIG1faGF2
ZVN0cnVjdHVyZXMgPSB0cnVlOwogICAgICAgICBicmVhazsKICAgICAgICAgCiAgICAgY2FzZSBD
cmVhdGVBcmd1bWVudHM6Ci0gICAgICAgIG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7Ci0gICAgICAg
IGZvck5vZGUobm9kZUluZGV4KS5zZXQobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdEZvcihub2Rl
LmNvZGVPcmlnaW4pLT5hcmd1bWVudHNTdHJ1Y3R1cmUoKSk7CisgICAgICAgIG5vZGUtPnNldENh
bkV4aXQoZmFsc2UpOworICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0Rm9yKG5vZGUtPmNvZGVPcmlnaW4pLT5hcmd1bWVudHNTdHJ1Y3R1cmUoKSk7CiAg
ICAgICAgIG1faGF2ZVN0cnVjdHVyZXMgPSB0cnVlOwogICAgICAgICBicmVhazsKICAgICAgICAg
CiAgICAgY2FzZSBUZWFyT2ZmQWN0aXZhdGlvbjoKICAgICBjYXNlIFRlYXJPZmZBcmd1bWVudHM6
Ci0gICAgICAgIG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7CisgICAgICAgIG5vZGUtPnNldENhbkV4
aXQoZmFsc2UpOwogICAgICAgICAvLyBEb2VzIG5vdGhpbmcgdGhhdCBpcyB1c2VyLXZpc2libGUu
CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBDaGVja0FyZ3VtZW50c05vdENyZWF0ZWQ6CiAg
ICAgICAgIGlmIChpc0VtcHR5U3BlY3VsYXRpb24oCiAgICAgICAgICAgICAgICAgbV92YXJpYWJs
ZXMub3BlcmFuZCgKLSAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5hcmd1bWVudHNSZWdpc3Rl
ckZvcihub2RlLmNvZGVPcmlnaW4pKS5tX3R5cGUpKSB7Ci0gICAgICAgICAgICBub2RlLnNldENh
bkV4aXQoZmFsc2UpOworICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLmFyZ3VtZW50c1JlZ2lz
dGVyRm9yKG5vZGUtPmNvZGVPcmlnaW4pKS5tX3R5cGUpKSB7CisgICAgICAgICAgICBub2RlLT5z
ZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgICAgIG1fZm91bmRDb25zdGFudHMgPSB0cnVlOwog
ICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIG5vZGUuc2V0Q2FuRXhpdCh0cnVlKTsKKyAgICAg
ICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAK
ICAgICBjYXNlIEdldE15QXJndW1lbnRzTGVuZ3RoOgpAQCAtMTM4NywxMTEgKzE0MDYsMTExIEBA
IGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgLy8gdGhl
IGFyZ3VtZW50cyBhIGJpdC4gTm90ZSB0aGF0IHRoaXMgaXMgbm90IHN1ZmZpY2llbnQgdG8gZm9y
Y2UgY29uc3RhbnQgZm9sZGluZwogICAgICAgICAvLyBvZiBHZXRNeUFyZ3VtZW50c0xlbmd0aCwg
YmVjYXVzZSBHZXRNeUFyZ3VtZW50c0xlbmd0aCBpcyBhIGNsb2JiZXJpbmcgb3BlcmF0aW9uLgog
ICAgICAgICAvLyBXZSBwZXJmb3JtIGZ1cnRoZXIgb3B0aW1pemF0aW9ucyBvbiB0aGlzIGxhdGVy
IG9uLgotICAgICAgICBpZiAobm9kZS5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSkKLSAgICAg
ICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoanNOdW1iZXIobm9kZS5jb2RlT3JpZ2luLmlu
bGluZUNhbGxGcmFtZS0+YXJndW1lbnRzLnNpemUoKSAtIDEpKTsKKyAgICAgICAgaWYgKG5vZGUt
PmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKQorICAgICAgICAgICAgZm9yTm9kZShub2RlKS5z
ZXQoanNOdW1iZXIobm9kZS0+Y29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50cy5z
aXplKCkgLSAxKSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4
KS5zZXQoU3BlY0ludDMyKTsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNJbnQz
Mik7CiAgICAgICAgIG5vZGUuc2V0Q2FuRXhpdCgKICAgICAgICAgICAgICFpc0VtcHR5U3BlY3Vs
YXRpb24oCiAgICAgICAgICAgICAgICAgbV92YXJpYWJsZXMub3BlcmFuZCgKLSAgICAgICAgICAg
ICAgICAgICAgbV9ncmFwaC5hcmd1bWVudHNSZWdpc3RlckZvcihub2RlLmNvZGVPcmlnaW4pKS5t
X3R5cGUpKTsKKyAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5hcmd1bWVudHNSZWdpc3RlckZv
cihub2RlLT5jb2RlT3JpZ2luKSkubV90eXBlKSk7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAK
ICAgICBjYXNlIEdldE15QXJndW1lbnRzTGVuZ3RoU2FmZToKLSAgICAgICAgbm9kZS5zZXRDYW5F
eGl0KGZhbHNlKTsKKyAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgIC8v
IFRoaXMgcG90ZW50aWFsbHkgY2xvYmJlcnMgYWxsIHN0cnVjdHVyZXMgaWYgdGhlIGFyZ3VtZW50
cyBvYmplY3QgaGFkIGEgZ2V0dGVyCiAgICAgICAgIC8vIGluc3RhbGxlZCBvbiB0aGUgbGVuZ3Ro
IHByb3BlcnR5LgotICAgICAgICBjbG9iYmVyV29ybGQobm9kZS5jb2RlT3JpZ2luLCBpbmRleElu
QmxvY2spOworICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+Y29kZU9yaWdpbiwgaW5kZXhJbkJs
b2NrKTsKICAgICAgICAgLy8gV2UgY3VycmVudGx5IG1ha2Ugbm8gZ3VhcmFudGVlIGFib3V0IHdo
YXQgdGhpcyByZXR1cm5zIGJlY2F1c2UgaXQgZG9lcyBub3QKICAgICAgICAgLy8gc3BlY3VsYXRl
IHRoYXQgdGhlIGxlbmd0aCBwcm9wZXJ0eSBpcyBhY3R1YWxseSBhIGxlbmd0aC4KLSAgICAgICAg
Zm9yTm9kZShub2RlSW5kZXgpLm1ha2VUb3AoKTsKKyAgICAgICAgZm9yTm9kZShub2RlKS5tYWtl
VG9wKCk7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAKICAgICBjYXNlIEdldE15QXJndW1lbnRC
eVZhbDoKLSAgICAgICAgbm9kZS5zZXRDYW5FeGl0KHRydWUpOworICAgICAgICBub2RlLT5zZXRD
YW5FeGl0KHRydWUpOwogICAgICAgICAvLyBXZSBrbm93IHRoYXQgdGhpcyBleGVjdXRhYmxlIGRv
ZXMgbm90IGVzY2FwZSBpdHMgYXJndW1lbnRzLCBzbyB3ZSBjYW4gb3B0aW1pemUKICAgICAgICAg
Ly8gdGhlIGFyZ3VtZW50cyBhIGJpdC4gTm90ZSB0aGF0IHRoaXMgZW5kcyB1cCBiZWluZyBmdXJ0
aGVyIG9wdGltaXplZCBieSB0aGUKICAgICAgICAgLy8gQXJndW1lbnRzU2ltcGxpZmljYXRpb25Q
aGFzZS4KLSAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY0ludDMyKTsK
LSAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLm1ha2VUb3AoKTsKKyAgICAgICAgZm9yTm9kZShu
b2RlLT5jaGlsZDEoKSkuZmlsdGVyKFNwZWNJbnQzMik7CisgICAgICAgIGZvck5vZGUobm9kZSku
bWFrZVRvcCgpOwogICAgICAgICBicmVhazsKICAgICAgICAgCiAgICAgY2FzZSBHZXRNeUFyZ3Vt
ZW50QnlWYWxTYWZlOgotICAgICAgICBub2RlLnNldENhbkV4aXQodHJ1ZSk7CisgICAgICAgIG5v
ZGUtPnNldENhbkV4aXQodHJ1ZSk7CiAgICAgICAgIC8vIFRoaXMgcG90ZW50aWFsbHkgY2xvYmJl
cnMgYWxsIHN0cnVjdHVyZXMgaWYgdGhlIHByb3BlcnR5IHdlJ3JlIGFjY2Vzc2luZyBoYXMKICAg
ICAgICAgLy8gYSBnZXR0ZXIuIFdlIGRvbid0IHNwZWN1bGF0ZSBhZ2FpbnN0IHRoaXMuCi0gICAg
ICAgIGNsb2JiZXJXb3JsZChub2RlLmNvZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7CisgICAgICAg
IGNsb2JiZXJXb3JsZChub2RlLT5jb2RlT3JpZ2luLCBpbmRleEluQmxvY2spOwogICAgICAgICAv
LyBCdXQgd2UgZG8gc3BlY3VsYXRlIHRoYXQgdGhlIGluZGV4IGlzIGFuIGludGVnZXIuCi0gICAg
ICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNJbnQzMik7CisgICAgICAgIGZv
ck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRlcihTcGVjSW50MzIpOwogICAgICAgICAvLyBBbmQg
dGhlIHJlc3VsdCBpcyB1bmtub3duLgotICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkubWFrZVRv
cCgpOworICAgICAgICBmb3JOb2RlKG5vZGUpLm1ha2VUb3AoKTsKICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIAogICAgIGNhc2UgTmV3RnVuY3Rpb246CiAgICAgY2FzZSBOZXdGdW5jdGlvbkV4cHJl
c3Npb246CiAgICAgY2FzZSBOZXdGdW5jdGlvbk5vQ2hlY2s6Ci0gICAgICAgIG5vZGUuc2V0Q2Fu
RXhpdChmYWxzZSk7Ci0gICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdEZvcihub2RlLmNvZGVPcmlnaW4pLT5mdW5jdGlvblN0cnVjdHVyZSgpKTsK
KyAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CisgICAgICAgIGZvck5vZGUobm9kZSku
c2V0KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3RGb3Iobm9kZS0+Y29kZU9yaWdpbiktPmZ1bmN0
aW9uU3RydWN0dXJlKCkpOwogICAgICAgICBicmVhazsKICAgICAgICAgCiAgICAgY2FzZSBHZXRD
YWxsZWU6Ci0gICAgICAgIG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7Ci0gICAgICAgIGZvck5vZGUo
bm9kZUluZGV4KS5zZXQoU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChm
YWxzZSk7CisgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNGdW5jdGlvbik7CiAgICAgICAg
IGJyZWFrOwogICAgICAgICAKICAgICBjYXNlIFNldENhbGxlZToKICAgICBjYXNlIFNldE15U2Nv
cGU6Ci0gICAgICAgIG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7CisgICAgICAgIG5vZGUtPnNldENh
bkV4aXQoZmFsc2UpOwogICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgIGNhc2UgR2V0
U2NvcGU6IC8vIEZJWE1FOiBXZSBjb3VsZCBnZXQgcmlkIG9mIHRoZXNlIGlmIHdlIGtub3cgdGhh
dCB0aGUgSlNGdW5jdGlvbiBpcyBhIGNvbnN0YW50LiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTA2MjAyCiAgICAgY2FzZSBHZXRNeVNjb3BlOgogICAgIGNhc2UgU2tp
cFRvcFNjb3BlOgotICAgICAgICBub2RlLnNldENhbkV4aXQoZmFsc2UpOwotICAgICAgICBmb3JO
b2RlKG5vZGVJbmRleCkuc2V0KFNwZWNDZWxsT3RoZXIpOworICAgICAgICBub2RlLT5zZXRDYW5F
eGl0KGZhbHNlKTsKKyAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0NlbGxPdGhlcik7CiAg
ICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBTa2lwU2NvcGU6IHsKLSAgICAgICAgbm9kZS5zZXRD
YW5FeGl0KGZhbHNlKTsKLSAgICAgICAgSlNWYWx1ZSBjaGlsZCA9IGZvck5vZGUobm9kZS5jaGls
ZDEoKSkudmFsdWUoKTsKLSAgICAgICAgaWYgKGNoaWxkICYmIHRyeVNldENvbnN0YW50KG5vZGVJ
bmRleCwgSlNWYWx1ZShqc0Nhc3Q8SlNTY29wZSo+KGNoaWxkLmFzQ2VsbCgpKS0+bmV4dCgpKSkp
IHsKKyAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CisgICAgICAgIEpTVmFsdWUgY2hp
bGQgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS52YWx1ZSgpOworICAgICAgICBpZiAoY2hpbGQg
JiYgdHJ5U2V0Q29uc3RhbnQobm9kZSwgSlNWYWx1ZShqc0Nhc3Q8SlNTY29wZSo+KGNoaWxkLmFz
Q2VsbCgpKS0+bmV4dCgpKSkpIHsKICAgICAgICAgICAgIG1fZm91bmRDb25zdGFudHMgPSB0cnVl
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgZm9yTm9kZShub2RlSW5k
ZXgpLnNldChTcGVjQ2VsbE90aGVyKTsKKyAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0Nl
bGxPdGhlcik7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIAogICAgIGNhc2UgR2V0U2NvcGVSZWdp
c3RlcnM6Ci0gICAgICAgIG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7Ci0gICAgICAgIGZvck5vZGUo
bm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNDZWxsKTsKLSAgICAgICAgZm9yTm9kZShub2RlSW5k
ZXgpLmNsZWFyKCk7IC8vIFRoZSByZXN1bHQgaXMgbm90IGEgSlMgdmFsdWUuCisgICAgICAgIG5v
ZGUtPnNldENhbkV4aXQoZmFsc2UpOworICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5m
aWx0ZXIoU3BlY0NlbGwpOworICAgICAgICBmb3JOb2RlKG5vZGUpLmNsZWFyKCk7IC8vIFRoZSBy
ZXN1bHQgaXMgbm90IGEgSlMgdmFsdWUuCiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBHZXRT
Y29wZWRWYXI6Ci0gICAgICAgIG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7Ci0gICAgICAgIGZvck5v
ZGUobm9kZUluZGV4KS5tYWtlVG9wKCk7CisgICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2Up
OworICAgICAgICBmb3JOb2RlKG5vZGUpLm1ha2VUb3AoKTsKICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICAKICAgICBjYXNlIFB1dFNjb3BlZFZhcjoKLSAgICAgICAgbm9kZS5zZXRDYW5FeGl0
KGZhbHNlKTsKLSAgICAgICAgY2xvYmJlckNhcHR1cmVkVmFycyhub2RlLmNvZGVPcmlnaW4pOwor
ICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKKyAgICAgICAgY2xvYmJlckNhcHR1cmVk
VmFycyhub2RlLT5jb2RlT3JpZ2luKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAg
ICBjYXNlIEdldEJ5SWQ6CiAgICAgY2FzZSBHZXRCeUlkRmx1c2g6Ci0gICAgICAgIG5vZGUuc2V0
Q2FuRXhpdCh0cnVlKTsKLSAgICAgICAgaWYgKCFub2RlLnByZWRpY3Rpb24oKSkgeworICAgICAg
ICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOworICAgICAgICBpZiAoIW5vZGUtPnByZWRpY3Rpb24o
KSkgewogICAgICAgICAgICAgbV9pc1ZhbGlkID0gZmFsc2U7CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgfQotICAgICAgICBpZiAoaXNDZWxsU3BlY3VsYXRpb24obV9ncmFwaFtub2RlLmNo
aWxkMSgpXS5wcmVkaWN0aW9uKCkpKSB7Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQx
KCkpLmZpbHRlcihTcGVjQ2VsbCk7CisgICAgICAgIGlmIChpc0NlbGxTcGVjdWxhdGlvbihub2Rl
LT5jaGlsZDEoKS0+cHJlZGljdGlvbigpKSkgeworICAgICAgICAgICAgZm9yTm9kZShub2RlLT5j
aGlsZDEoKSkuZmlsdGVyKFNwZWNDZWxsKTsKIAotICAgICAgICAgICAgaWYgKFN0cnVjdHVyZSog
c3RydWN0dXJlID0gZm9yTm9kZShub2RlLmNoaWxkMSgpKS5iZXN0UHJvdmVuU3RydWN0dXJlKCkp
IHsKKyAgICAgICAgICAgIGlmIChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGZvck5vZGUobm9kZS0+
Y2hpbGQxKCkpLmJlc3RQcm92ZW5TdHJ1Y3R1cmUoKSkgewogICAgICAgICAgICAgICAgIEdldEJ5
SWRTdGF0dXMgc3RhdHVzID0gR2V0QnlJZFN0YXR1czo6Y29tcHV0ZUZvcigKICAgICAgICAgICAg
ICAgICAgICAgbV9ncmFwaC5tX2dsb2JhbERhdGEsIHN0cnVjdHVyZSwKLSAgICAgICAgICAgICAg
ICAgICAgbV9ncmFwaC5tX2NvZGVCbG9jay0+aWRlbnRpZmllcihub2RlLmlkZW50aWZpZXJOdW1i
ZXIoKSkpOworICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLm1fY29kZUJsb2NrLT5pZGVudGlm
aWVyKG5vZGUtPmlkZW50aWZpZXJOdW1iZXIoKSkpOwogICAgICAgICAgICAgICAgIGlmIChzdGF0
dXMuaXNTaW1wbGUoKSkgewogICAgICAgICAgICAgICAgICAgICAvLyBBc3NlcnQgdGhpbmdzIHRo
YXQgd2UgY2FuJ3QgaGFuZGxlIGFuZCB0aGF0IHRoZSBjb21wdXRlRm9yKCkgbWV0aG9kCiAgICAg
ICAgICAgICAgICAgICAgIC8vIGFib3ZlIHdvbid0IGJlIGFibGUgdG8gcmV0dXJuLgpAQCAtMTQ5
OSwyMyArMTUxOCwyMyBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5k
CiAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChzdGF0dXMuY2hhaW4oKS5pc0VtcHR5KCkpOwog
ICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXR1cy5zcGVj
aWZpY1ZhbHVlKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCku
c2V0KHN0YXR1cy5zcGVjaWZpY1ZhbHVlKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgZm9y
Tm9kZShub2RlKS5zZXQoc3RhdHVzLnNwZWNpZmljVmFsdWUoKSk7CiAgICAgICAgICAgICAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5tYWtl
VG9wKCk7Ci0gICAgICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVy
KHN0YXR1cy5zdHJ1Y3R1cmVTZXQoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBmb3JOb2Rl
KG5vZGUpLm1ha2VUb3AoKTsKKyAgICAgICAgICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGls
ZDEoKSkuZmlsdGVyKHN0YXR1cy5zdHJ1Y3R1cmVTZXQoKSk7CiAgICAgICAgICAgICAgICAgICAg
IAogICAgICAgICAgICAgICAgICAgICBtX2ZvdW5kQ29uc3RhbnRzID0gdHJ1ZTsKICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAg
ICAgICB9Ci0gICAgICAgIGNsb2JiZXJXb3JsZChub2RlLmNvZGVPcmlnaW4sIGluZGV4SW5CbG9j
ayk7Ci0gICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5tYWtlVG9wKCk7CisgICAgICAgIGNsb2Ji
ZXJXb3JsZChub2RlLT5jb2RlT3JpZ2luLCBpbmRleEluQmxvY2spOworICAgICAgICBmb3JOb2Rl
KG5vZGUpLm1ha2VUb3AoKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICBjYXNl
IEdldEFycmF5TGVuZ3RoOgotICAgICAgICBub2RlLnNldENhbkV4aXQodHJ1ZSk7IC8vIExpZXMs
IGJ1dCBpdCdzIHRydWUgZm9yIHRoZSBjb21tb24gY2FzZSBvZiBKU0FycmF5LCBzbyBpdCdzIGdv
b2QgZW5vdWdoLgotICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFNwZWNJbnQzMik7Cisg
ICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7IC8vIExpZXMsIGJ1dCBpdCdzIHRydWUgZm9y
IHRoZSBjb21tb24gY2FzZSBvZiBKU0FycmF5LCBzbyBpdCdzIGdvb2QgZW5vdWdoLgorICAgICAg
ICBmb3JOb2RlKG5vZGUpLnNldChTcGVjSW50MzIpOwogICAgICAgICBicmVhazsKICAgICAgICAg
CiAgICAgY2FzZSBDaGVja0V4ZWN1dGFibGU6IHsKQEAgLTE1MjMsMjMgKzE1NDIsMjMgQEAgYm9v
bCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICAvLyBtb3JlIHRo
b3JvdWdobHkuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDYyMDAK
ICAgICAgICAgLy8gRklYTUU6IFdlIGNvdWxkIGVsaW1pbmF0ZSB0aGVzZSBlbnRpcmVseSBpZiB3
ZSBrbm93IHRoZSBleGFjdCB2YWx1ZSB0aGF0IGZsb3dzIGludG8gdGhpcy4KICAgICAgICAgLy8g
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwNjIwMQotICAgICAgICBm
b3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjQ2VsbCk7Ci0gICAgICAgIG5vZGUuc2V0
Q2FuRXhpdCh0cnVlKTsKKyAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDEoKSkuZmlsdGVyKFNw
ZWNDZWxsKTsKKyAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKICAgICAgICAgYnJlYWs7
CiAgICAgfQogCiAgICAgY2FzZSBDaGVja1N0cnVjdHVyZToKICAgICBjYXNlIEZvcndhcmRDaGVj
a1N0cnVjdHVyZTogewogICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGJlIGFibGUgdG8gcHJv
cGFnYXRlIHRoZSBzdHJ1Y3R1cmUgc2V0cyBvZiBjb25zdGFudHMgKGkuZS4gcHJvdG90eXBlcyku
Ci0gICAgICAgIEFic3RyYWN0VmFsdWUmIHZhbHVlID0gZm9yTm9kZShub2RlLmNoaWxkMSgpKTsK
KyAgICAgICAgQWJzdHJhY3RWYWx1ZSYgdmFsdWUgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKTsK
ICAgICAgICAgLy8gSWYgdGhpcyBzdHJ1Y3R1cmUgY2hlY2sgaXMgYXR0ZW1wdGluZyB0byBwcm92
ZSBrbm93bGVkZ2UgYWxyZWFkeSBoZWxkIGluCiAgICAgICAgIC8vIHRoZSBmdXR1cmVQb3NzaWJs
ZVN0cnVjdHVyZSBzZXQgdGhlbiB0aGUgY29uc3RhbnQgZm9sZGluZyBwaGFzZSBzaG91bGQKICAg
ICAgICAgLy8gdHVybiB0aGlzIGludG8gYSB3YXRjaHBvaW50IGluc3RlYWQuCi0gICAgICAgIFN0
cnVjdHVyZVNldCYgc2V0ID0gbm9kZS5zdHJ1Y3R1cmVTZXQoKTsKKyAgICAgICAgU3RydWN0dXJl
U2V0JiBzZXQgPSBub2RlLT5zdHJ1Y3R1cmVTZXQoKTsKICAgICAgICAgaWYgKHZhbHVlLm1fZnV0
dXJlUG9zc2libGVTdHJ1Y3R1cmUuaXNTdWJzZXRPZihzZXQpCiAgICAgICAgICAgICB8fCB2YWx1
ZS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5pc1N1YnNldE9mKHNldCkpCiAgICAgICAgICAgICBt
X2ZvdW5kQ29uc3RhbnRzID0gdHJ1ZTsKLSAgICAgICAgbm9kZS5zZXRDYW5FeGl0KAorICAgICAg
ICBub2RlLT5zZXRDYW5FeGl0KAogICAgICAgICAgICAgIXZhbHVlLm1fY3VycmVudEtub3duU3Ry
dWN0dXJlLmlzU3Vic2V0T2Yoc2V0KQogICAgICAgICAgICAgfHwgIWlzQ2VsbFNwZWN1bGF0aW9u
KHZhbHVlLm1fdHlwZSkpOwogICAgICAgICB2YWx1ZS5maWx0ZXIoc2V0KTsKQEAgLTE1NDksNyAr
MTU2OCw3IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAg
ICAgCiAgICAgY2FzZSBTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludDoKICAgICBjYXNlIEZv
cndhcmRTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludDogewotICAgICAgICBBYnN0cmFjdFZh
bHVlJiB2YWx1ZSA9IGZvck5vZGUobm9kZS5jaGlsZDEoKSk7CisgICAgICAgIEFic3RyYWN0VmFs
dWUmIHZhbHVlID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSk7CiAKICAgICAgICAgLy8gSXQncyBv
bmx5IHZhbGlkIHRvIGlzc3VlIGEgc3RydWN0dXJlIHRyYW5zaXRpb24gd2F0Y2hwb2ludCBpZiB3
ZSBhbHJlYWR5CiAgICAgICAgIC8vIGtub3cgdGhhdCB0aGUgd2F0Y2hwb2ludCBjb3ZlcnMgYSBz
dXBlcnNldCBvZiB0aGUgc3RydWN0dXJlcyBrbm93biB0bwpAQCAtMTU1NywxNTQgKzE1NzYsMTU0
IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgLy8g
Q3VycmVudGx5LCB3ZSBvbmx5IGlzc3VlIHNpbmdsZXRvbiB3YXRjaHBvaW50cyAodGhhdCBjaGVj
ayBvbmUgc3RydWN0dXJlKQogICAgICAgICAvLyBhbmQgb3VyIGZ1dHVyZVBvc3NpYmxlU3RydWN0
dXJlIHNldCBjYW4gb25seSBjb250YWluIHplcm8sIG9uZSwgb3IgYW4KICAgICAgICAgLy8gaW5m
aW5pdHkgb2Ygc3RydWN0dXJlcy4KLSAgICAgICAgQVNTRVJUKHZhbHVlLm1fZnV0dXJlUG9zc2li
bGVTdHJ1Y3R1cmUuaXNTdWJzZXRPZihTdHJ1Y3R1cmVTZXQobm9kZS5zdHJ1Y3R1cmUoKSkpKTsK
KyAgICAgICAgQVNTRVJUKHZhbHVlLm1fZnV0dXJlUG9zc2libGVTdHJ1Y3R1cmUuaXNTdWJzZXRP
ZihTdHJ1Y3R1cmVTZXQobm9kZS0+c3RydWN0dXJlKCkpKSk7CiAgICAgICAgIAogICAgICAgICBB
U1NFUlQodmFsdWUuaXNDbGVhcigpIHx8IGlzQ2VsbFNwZWN1bGF0aW9uKHZhbHVlLm1fdHlwZSkp
OyAvLyBWYWx1ZSBjb3VsZCBiZSBjbGVhciBpZiB3ZSd2ZSBwcm92ZW4gbXVzdC1leGl0IGR1ZSB0
byBhIHNwZWN1bGF0aW9uIHN0YXRpY2FsbHkga25vd24gdG8gYmUgYmFkLgotICAgICAgICB2YWx1
ZS5maWx0ZXIobm9kZS5zdHJ1Y3R1cmUoKSk7CisgICAgICAgIHZhbHVlLmZpbHRlcihub2RlLT5z
dHJ1Y3R1cmUoKSk7CiAgICAgICAgIG1faGF2ZVN0cnVjdHVyZXMgPSB0cnVlOwotICAgICAgICBu
b2RlLnNldENhbkV4aXQodHJ1ZSk7CisgICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7CiAg
ICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgICAgIAogICAgIGNhc2UgUHV0U3RydWN0dXJl
OgogICAgIGNhc2UgUGhhbnRvbVB1dFN0cnVjdHVyZToKLSAgICAgICAgbm9kZS5zZXRDYW5FeGl0
KGZhbHNlKTsKLSAgICAgICAgaWYgKCFmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fY3VycmVudEtu
b3duU3RydWN0dXJlLmlzQ2xlYXIoKSkgeworICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNl
KTsKKyAgICAgICAgaWYgKCFmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX2N1cnJlbnRLbm93blN0
cnVjdHVyZS5pc0NsZWFyKCkpIHsKICAgICAgICAgICAgIGNsb2JiZXJTdHJ1Y3R1cmVzKGluZGV4
SW5CbG9jayk7Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLnNldChub2RlLnN0
cnVjdHVyZVRyYW5zaXRpb25EYXRhKCkubmV3U3RydWN0dXJlKTsKKyAgICAgICAgICAgIGZvck5v
ZGUobm9kZS0+Y2hpbGQxKCkpLnNldChub2RlLT5zdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSgpLm5l
d1N0cnVjdHVyZSk7CiAgICAgICAgICAgICBtX2hhdmVTdHJ1Y3R1cmVzID0gdHJ1ZTsKICAgICAg
ICAgfQogICAgICAgICBicmVhazsKICAgICBjYXNlIEdldEJ1dHRlcmZseToKICAgICBjYXNlIEFs
bG9jYXRlUHJvcGVydHlTdG9yYWdlOgogICAgIGNhc2UgUmVhbGxvY2F0ZVByb3BlcnR5U3RvcmFn
ZToKLSAgICAgICAgbm9kZS5zZXRDYW5FeGl0KCFpc0NlbGxTcGVjdWxhdGlvbihmb3JOb2RlKG5v
ZGUuY2hpbGQxKCkpLm1fdHlwZSkpOwotICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZp
bHRlcihTcGVjQ2VsbCk7Ci0gICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5jbGVhcigpOyAvLyBU
aGUgcmVzdWx0IGlzIG5vdCBhIEpTIHZhbHVlLgorICAgICAgICBub2RlLT5zZXRDYW5FeGl0KCFp
c0NlbGxTcGVjdWxhdGlvbihmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX3R5cGUpKTsKKyAgICAg
ICAgZm9yTm9kZShub2RlLT5jaGlsZDEoKSkuZmlsdGVyKFNwZWNDZWxsKTsKKyAgICAgICAgZm9y
Tm9kZShub2RlKS5jbGVhcigpOyAvLyBUaGUgcmVzdWx0IGlzIG5vdCBhIEpTIHZhbHVlLgogICAg
ICAgICBicmVhazsKICAgICBjYXNlIENoZWNrQXJyYXk6IHsKLSAgICAgICAgaWYgKG5vZGUuYXJy
YXlNb2RlKCkuYWxyZWFkeUNoZWNrZWQobV9ncmFwaCwgbm9kZSwgZm9yTm9kZShub2RlLmNoaWxk
MSgpKSkpIHsKKyAgICAgICAgaWYgKG5vZGUtPmFycmF5TW9kZSgpLmFscmVhZHlDaGVja2VkKG1f
Z3JhcGgsIG5vZGUsIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpKSkgewogICAgICAgICAgICAgbV9m
b3VuZENvbnN0YW50cyA9IHRydWU7Ci0gICAgICAgICAgICBub2RlLnNldENhbkV4aXQoZmFsc2Up
OworICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgfQotICAgICAgICBub2RlLnNldENhbkV4aXQodHJ1ZSk7IC8vIExpZXMsIGJ1
dCB0aGlzIGlzIGZvbGxvd2VkIGJ5IG9wZXJhdGlvbnMgKGxpa2UgR2V0QnlWYWwpIHRoYXQgYWx3
YXlzIGV4aXQsIHNvIHRoZXJlIGlzIG5vIHBvaW50IGluIHVzIHRyeWluZyB0byBiZSBjbGV2ZXIg
aGVyZS4KLSAgICAgICAgc3dpdGNoIChub2RlLmFycmF5TW9kZSgpLnR5cGUoKSkgeworICAgICAg
ICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOyAvLyBMaWVzLCBidXQgdGhpcyBpcyBmb2xsb3dlZCBi
eSBvcGVyYXRpb25zIChsaWtlIEdldEJ5VmFsKSB0aGF0IGFsd2F5cyBleGl0LCBzbyB0aGVyZSBp
cyBubyBwb2ludCBpbiB1cyB0cnlpbmcgdG8gYmUgY2xldmVyIGhlcmUuCisgICAgICAgIHN3aXRj
aCAobm9kZS0+YXJyYXlNb2RlKCkudHlwZSgpKSB7CiAgICAgICAgIGNhc2UgQXJyYXk6OlN0cmlu
ZzoKLSAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNTdHJpbmcp
OworICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDEoKSkuZmlsdGVyKFNwZWNTdHJpbmcp
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OkludDMyOgogICAgICAg
ICBjYXNlIEFycmF5OjpEb3VibGU6CiAgICAgICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3VvdXM6CiAg
ICAgICAgIGNhc2UgQXJyYXk6OkFycmF5U3RvcmFnZToKICAgICAgICAgY2FzZSBBcnJheTo6U2xv
d1B1dEFycmF5U3RvcmFnZToKLSAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmls
dGVyKFNwZWNDZWxsKTsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRl
cihTcGVjQ2VsbCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6QXJn
dW1lbnRzOgotICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY0Fy
Z3VtZW50cyk7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5maWx0ZXIoU3Bl
Y0FyZ3VtZW50cyk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6SW50
OEFycmF5OgotICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY0lu
dDhBcnJheSk7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5maWx0ZXIoU3Bl
Y0ludDhBcnJheSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6SW50
MTZBcnJheToKLSAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNJ
bnQxNkFycmF5KTsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRlcihT
cGVjSW50MTZBcnJheSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6
SW50MzJBcnJheToKLSAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNw
ZWNJbnQzMkFycmF5KTsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRl
cihTcGVjSW50MzJBcnJheSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBBcnJh
eTo6VWludDhBcnJheToKLSAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVy
KFNwZWNVaW50OEFycmF5KTsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZp
bHRlcihTcGVjVWludDhBcnJheSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBB
cnJheTo6VWludDhDbGFtcGVkQXJyYXk6Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQx
KCkpLmZpbHRlcihTcGVjVWludDhDbGFtcGVkQXJyYXkpOworICAgICAgICAgICAgZm9yTm9kZShu
b2RlLT5jaGlsZDEoKSkuZmlsdGVyKFNwZWNVaW50OENsYW1wZWRBcnJheSk7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6VWludDE2QXJyYXk6Ci0gICAgICAgICAgICBm
b3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjVWludDE2QXJyYXkpOworICAgICAgICAg
ICAgZm9yTm9kZShub2RlLT5jaGlsZDEoKSkuZmlsdGVyKFNwZWNVaW50MTZBcnJheSk7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6VWludDMyQXJyYXk6Ci0gICAgICAg
ICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjVWludDMyQXJyYXkpOworICAg
ICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDEoKSkuZmlsdGVyKFNwZWNVaW50MzJBcnJheSk7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6RmxvYXQzMkFycmF5Ogot
ICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY0Zsb2F0MzJBcnJh
eSk7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5maWx0ZXIoU3BlY0Zsb2F0
MzJBcnJheSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6RmxvYXQ2
NEFycmF5OgotICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY0Zs
b2F0NjRBcnJheSk7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5maWx0ZXIo
U3BlY0Zsb2F0NjRBcnJheSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgZGVmYXVsdDoK
ICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQotICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlckFy
cmF5TW9kZXMobm9kZS5hcnJheU1vZGUoKS5hcnJheU1vZGVzVGhhdFBhc3NGaWx0ZXJpbmcoKSk7
CisgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRlckFycmF5TW9kZXMobm9kZS0+
YXJyYXlNb2RlKCkuYXJyYXlNb2Rlc1RoYXRQYXNzRmlsdGVyaW5nKCkpOwogICAgICAgICBtX2hh
dmVTdHJ1Y3R1cmVzID0gdHJ1ZTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGNhc2UgQXJy
YXlpZnk6IHsKLSAgICAgICAgaWYgKG5vZGUuYXJyYXlNb2RlKCkuYWxyZWFkeUNoZWNrZWQobV9n
cmFwaCwgbm9kZSwgZm9yTm9kZShub2RlLmNoaWxkMSgpKSkpIHsKKyAgICAgICAgaWYgKG5vZGUt
PmFycmF5TW9kZSgpLmFscmVhZHlDaGVja2VkKG1fZ3JhcGgsIG5vZGUsIGZvck5vZGUobm9kZS0+
Y2hpbGQxKCkpKSkgewogICAgICAgICAgICAgbV9mb3VuZENvbnN0YW50cyA9IHRydWU7Ci0gICAg
ICAgICAgICBub2RlLnNldENhbkV4aXQoZmFsc2UpOworICAgICAgICAgICAgbm9kZS0+c2V0Q2Fu
RXhpdChmYWxzZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICBBU1NF
UlQobm9kZS5hcnJheU1vZGUoKS5jb252ZXJzaW9uKCkgPT0gQXJyYXk6OkNvbnZlcnQKLSAgICAg
ICAgICAgIHx8IG5vZGUuYXJyYXlNb2RlKCkuY29udmVyc2lvbigpID09IEFycmF5OjpSYWdlQ29u
dmVydCk7Ci0gICAgICAgIG5vZGUuc2V0Q2FuRXhpdCh0cnVlKTsKLSAgICAgICAgZm9yTm9kZShu
b2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY0NlbGwpOwotICAgICAgICBpZiAobm9kZS5jaGlsZDIo
KSkKLSAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7
CisgICAgICAgIEFTU0VSVChub2RlLT5hcnJheU1vZGUoKS5jb252ZXJzaW9uKCkgPT0gQXJyYXk6
OkNvbnZlcnQKKyAgICAgICAgICAgIHx8IG5vZGUtPmFycmF5TW9kZSgpLmNvbnZlcnNpb24oKSA9
PSBBcnJheTo6UmFnZUNvbnZlcnQpOworICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOwor
ICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5maWx0ZXIoU3BlY0NlbGwpOworICAgICAg
ICBpZiAobm9kZS0+Y2hpbGQyKCkpCisgICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMigp
KS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAgY2xvYmJlclN0cnVjdHVyZXMoaW5kZXhJbkJs
b2NrKTsKLSAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXJBcnJheU1vZGVzKG5v
ZGUuYXJyYXlNb2RlKCkuYXJyYXlNb2Rlc1RoYXRQYXNzRmlsdGVyaW5nKCkpOworICAgICAgICBm
b3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5maWx0ZXJBcnJheU1vZGVzKG5vZGUtPmFycmF5TW9kZSgp
LmFycmF5TW9kZXNUaGF0UGFzc0ZpbHRlcmluZygpKTsKICAgICAgICAgbV9oYXZlU3RydWN0dXJl
cyA9IHRydWU7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBjYXNlIEFycmF5aWZ5VG9TdHJ1
Y3R1cmU6IHsKLSAgICAgICAgQWJzdHJhY3RWYWx1ZSYgdmFsdWUgPSBmb3JOb2RlKG5vZGUuY2hp
bGQxKCkpOwotICAgICAgICBTdHJ1Y3R1cmVTZXQgc2V0ID0gbm9kZS5zdHJ1Y3R1cmUoKTsKKyAg
ICAgICAgQWJzdHJhY3RWYWx1ZSYgdmFsdWUgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKTsKKyAg
ICAgICAgU3RydWN0dXJlU2V0IHNldCA9IG5vZGUtPnN0cnVjdHVyZSgpOwogICAgICAgICBpZiAo
dmFsdWUubV9mdXR1cmVQb3NzaWJsZVN0cnVjdHVyZS5pc1N1YnNldE9mKHNldCkKICAgICAgICAg
ICAgIHx8IHZhbHVlLm1fY3VycmVudEtub3duU3RydWN0dXJlLmlzU3Vic2V0T2Yoc2V0KSkKICAg
ICAgICAgICAgIG1fZm91bmRDb25zdGFudHMgPSB0cnVlOwotICAgICAgICBub2RlLnNldENhbkV4
aXQodHJ1ZSk7Ci0gICAgICAgIGlmIChub2RlLmNoaWxkMigpKQotICAgICAgICAgICAgZm9yTm9k
ZShub2RlLmNoaWxkMigpKS5maWx0ZXIoU3BlY0ludDMyKTsKKyAgICAgICAgbm9kZS0+c2V0Q2Fu
RXhpdCh0cnVlKTsKKyAgICAgICAgaWYgKG5vZGUtPmNoaWxkMigpKQorICAgICAgICAgICAgZm9y
Tm9kZShub2RlLT5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7CiAgICAgICAgIGNsb2JiZXJT
dHJ1Y3R1cmVzKGluZGV4SW5CbG9jayk7CiAgICAgICAgIHZhbHVlLmZpbHRlcihzZXQpOwogICAg
ICAgICBtX2hhdmVTdHJ1Y3R1cmVzID0gdHJ1ZTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAg
IGNhc2UgR2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZTogewotICAgICAgICBub2RlLnNldENhbkV4
aXQoZmFsc2UpOwotICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuY2xlYXIoKTsKKyAgICAgICAg
bm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CisgICAgICAgIGZvck5vZGUobm9kZSkuY2xlYXIoKTsK
ICAgICAgICAgYnJlYWs7IAogICAgIH0KICAgICBjYXNlIEdldEJ5T2Zmc2V0OgotICAgICAgICBp
ZiAoIW1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0uaGFzU3RvcmFnZVJlc3VsdCgpKSB7Ci0gICAgICAg
ICAgICBub2RlLnNldENhbkV4aXQoIWlzQ2VsbFNwZWN1bGF0aW9uKGZvck5vZGUobm9kZS5jaGls
ZDEoKSkubV90eXBlKSk7Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRl
cihTcGVjQ2VsbCk7CisgICAgICAgIGlmICghbm9kZS0+Y2hpbGQxKCktPmhhc1N0b3JhZ2VSZXN1
bHQoKSkgeworICAgICAgICAgICAgbm9kZS5zZXRDYW5FeGl0KCFpc0NlbGxTcGVjdWxhdGlvbihm
b3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX3R5cGUpKTsKKyAgICAgICAgICAgIGZvck5vZGUobm9k
ZS0+Y2hpbGQxKCkpLmZpbHRlcihTcGVjQ2VsbCk7CiAgICAgICAgIH0KLSAgICAgICAgZm9yTm9k
ZShub2RlSW5kZXgpLm1ha2VUb3AoKTsKKyAgICAgICAgZm9yTm9kZShub2RlKS5tYWtlVG9wKCk7
CiAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAgY2FzZSBQdXRCeU9mZnNldDogewog
ICAgICAgICBib29sIGNhbkV4aXQgPSBmYWxzZTsKLSAgICAgICAgaWYgKCFtX2dyYXBoW25vZGUu
Y2hpbGQxKCldLmhhc1N0b3JhZ2VSZXN1bHQoKSkgewotICAgICAgICAgICAgY2FuRXhpdCB8PSAh
aXNDZWxsU3BlY3VsYXRpb24oZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpOwotICAgICAg
ICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY0NlbGwpOwotICAgICAgICB9
Ci0gICAgICAgIGNhbkV4aXQgfD0gIWlzQ2VsbFNwZWN1bGF0aW9uKGZvck5vZGUobm9kZS5jaGls
ZDIoKSkubV90eXBlKTsKLSAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMigpKS5maWx0ZXIoU3Bl
Y0NlbGwpOwotICAgICAgICBub2RlLnNldENhbkV4aXQoY2FuRXhpdCk7CisgICAgICAgIGlmICgh
bm9kZS0+Y2hpbGQxKCktPmhhc1N0b3JhZ2VSZXN1bHQoKSkgeworICAgICAgICAgICAgY2FuRXhp
dCB8PSAhaXNDZWxsU3BlY3VsYXRpb24oZm9yTm9kZShub2RlLT5jaGlsZDEoKSkubV90eXBlKTsK
KyAgICAgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRlcihTcGVjQ2VsbCk7Cisg
ICAgICAgIH0KKyAgICAgICAgY2FuRXhpdCB8PSAhaXNDZWxsU3BlY3VsYXRpb24oZm9yTm9kZShu
b2RlLT5jaGlsZDIoKSkubV90eXBlKTsKKyAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDIoKSku
ZmlsdGVyKFNwZWNDZWxsKTsKKyAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChjYW5FeGl0KTsKICAg
ICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAgICAgCiAgICAgY2FzZSBDaGVja0Z1bmN0aW9u
OiB7Ci0gICAgICAgIEpTVmFsdWUgdmFsdWUgPSBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLnZhbHVl
KCk7Ci0gICAgICAgIGlmICh2YWx1ZSA9PSBub2RlLmZ1bmN0aW9uKCkpIHsKKyAgICAgICAgSlNW
YWx1ZSB2YWx1ZSA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLnZhbHVlKCk7CisgICAgICAgIGlm
ICh2YWx1ZSA9PSBub2RlLT5mdW5jdGlvbigpKSB7CiAgICAgICAgICAgICBtX2ZvdW5kQ29uc3Rh
bnRzID0gdHJ1ZTsKICAgICAgICAgICAgIEFTU0VSVCh2YWx1ZSk7Ci0gICAgICAgICAgICBub2Rl
LnNldENhbkV4aXQoZmFsc2UpOworICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgbm9kZS5z
ZXRDYW5FeGl0KHRydWUpOyAvLyBMaWVzISBXZSBjYW4gZG8gYmV0dGVyLgotICAgICAgICBpZiAo
IWZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyQnlWYWx1ZShub2RlLmZ1bmN0aW9uKCkpKSB7
CisgICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7IC8vIExpZXMhIFdlIGNhbiBkbyBiZXR0
ZXIuCisgICAgICAgIGlmICghZm9yTm9kZShub2RlLT5jaGlsZDEoKSkuZmlsdGVyQnlWYWx1ZShu
b2RlLT5mdW5jdGlvbigpKSkgewogICAgICAgICAgICAgbV9pc1ZhbGlkID0gZmFsc2U7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtMTcxMyw2NyArMTczMiw2OSBAQCBib29sIEFi
c3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgIAogICAgIGNhc2UgUHV0
QnlJZDoKICAgICBjYXNlIFB1dEJ5SWREaXJlY3Q6Ci0gICAgICAgIG5vZGUuc2V0Q2FuRXhpdCh0
cnVlKTsKLSAgICAgICAgaWYgKFN0cnVjdHVyZSogc3RydWN0dXJlID0gZm9yTm9kZShub2RlLmNo
aWxkMSgpKS5iZXN0UHJvdmVuU3RydWN0dXJlKCkpIHsKKyAgICAgICAgbm9kZS0+c2V0Q2FuRXhp
dCh0cnVlKTsKKyAgICAgICAgaWYgKFN0cnVjdHVyZSogc3RydWN0dXJlID0gZm9yTm9kZShub2Rl
LT5jaGlsZDEoKSkuYmVzdFByb3ZlblN0cnVjdHVyZSgpKSB7CiAgICAgICAgICAgICBQdXRCeUlk
U3RhdHVzIHN0YXR1cyA9IFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IoCiAgICAgICAgICAgICAg
ICAgbV9ncmFwaC5tX2dsb2JhbERhdGEsCi0gICAgICAgICAgICAgICAgbV9ncmFwaC5nbG9iYWxP
YmplY3RGb3Iobm9kZS5jb2RlT3JpZ2luKSwKKyAgICAgICAgICAgICAgICBtX2dyYXBoLmdsb2Jh
bE9iamVjdEZvcihub2RlLT5jb2RlT3JpZ2luKSwKICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUs
Ci0gICAgICAgICAgICAgICAgbV9ncmFwaC5tX2NvZGVCbG9jay0+aWRlbnRpZmllcihub2RlLmlk
ZW50aWZpZXJOdW1iZXIoKSksCi0gICAgICAgICAgICAgICAgbm9kZS5vcCgpID09IFB1dEJ5SWRE
aXJlY3QpOworICAgICAgICAgICAgICAgIG1fZ3JhcGgubV9jb2RlQmxvY2stPmlkZW50aWZpZXIo
bm9kZS0+aWRlbnRpZmllck51bWJlcigpKSwKKyAgICAgICAgICAgICAgICBub2RlLT5vcCgpID09
IFB1dEJ5SWREaXJlY3QpOwogICAgICAgICAgICAgaWYgKHN0YXR1cy5pc1NpbXBsZVJlcGxhY2Uo
KSkgewotICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKHN0cnVj
dHVyZSk7CisgICAgICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDEoKSkuZmlsdGVyKHN0
cnVjdHVyZSk7CiAgICAgICAgICAgICAgICAgbV9mb3VuZENvbnN0YW50cyA9IHRydWU7CiAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoc3RhdHVz
LmlzU2ltcGxlVHJhbnNpdGlvbigpKSB7CiAgICAgICAgICAgICAgICAgY2xvYmJlclN0cnVjdHVy
ZXMoaW5kZXhJbkJsb2NrKTsKLSAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkp
LnNldChzdGF0dXMubmV3U3RydWN0dXJlKCkpOworICAgICAgICAgICAgICAgIGZvck5vZGUobm9k
ZS0+Y2hpbGQxKCkpLnNldChzdGF0dXMubmV3U3RydWN0dXJlKCkpOwogICAgICAgICAgICAgICAg
IG1faGF2ZVN0cnVjdHVyZXMgPSB0cnVlOwogICAgICAgICAgICAgICAgIG1fZm91bmRDb25zdGFu
dHMgPSB0cnVlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAg
ICB9Ci0gICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNDZWxsKTsKLSAg
ICAgICAgY2xvYmJlcldvcmxkKG5vZGUuY29kZU9yaWdpbiwgaW5kZXhJbkJsb2NrKTsKKyAgICAg
ICAgZm9yTm9kZShub2RlLT5jaGlsZDEoKSkuZmlsdGVyKFNwZWNDZWxsKTsKKyAgICAgICAgY2xv
YmJlcldvcmxkKG5vZGUtPmNvZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7CiAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgCiAgICAgY2FzZSBHZXRHbG9iYWxWYXI6Ci0gICAgICAgIG5vZGUuc2V0
Q2FuRXhpdChmYWxzZSk7Ci0gICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5tYWtlVG9wKCk7Cisg
ICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOworICAgICAgICBmb3JOb2RlKG5vZGUpLm1h
a2VUb3AoKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgIAogICAgIGNhc2UgR2xvYmFsVmFyV2F0
Y2hwb2ludDoKLSAgICAgICAgbm9kZS5zZXRDYW5FeGl0KHRydWUpOworICAgICAgICBub2RlLT5z
ZXRDYW5FeGl0KHRydWUpOwogICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgIGNhc2Ug
UHV0R2xvYmFsVmFyOgogICAgIGNhc2UgUHV0R2xvYmFsVmFyQ2hlY2s6Ci0gICAgICAgIG5vZGUu
c2V0Q2FuRXhpdChmYWxzZSk7CisgICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwogICAg
ICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgIGNhc2UgQ2hlY2tIYXNJbnN0YW5jZToKLSAg
ICAgICAgbm9kZS5zZXRDYW5FeGl0KHRydWUpOwotICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQx
KCkpLmZpbHRlcihTcGVjQ2VsbCk7CisgICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7Cisg
ICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRlcihTcGVjQ2VsbCk7CiAgICAgICAg
IC8vIFNhZGx5LCB3ZSBkb24ndCBwcm9wYWdhdGUgdGhlIGZhY3QgdGhhdCB3ZSd2ZSBkb25lIENo
ZWNrSGFzSW5zdGFuY2UKICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICBjYXNlIElu
c3RhbmNlT2Y6Ci0gICAgICAgIG5vZGUuc2V0Q2FuRXhpdCh0cnVlKTsKKyAgICAgICAgbm9kZS0+
c2V0Q2FuRXhpdCh0cnVlKTsKICAgICAgICAgLy8gQWdhaW4sIHNhZGx5LCB3ZSBkb24ndCBwcm9w
YWdhdGUgdGhlIGZhY3QgdGhhdCB3ZSd2ZSBkb25lIEluc3RhbmNlT2YKLSAgICAgICAgaWYgKCEo
bV9ncmFwaFtub2RlLmNoaWxkMSgpXS5wcmVkaWN0aW9uKCkgJiB+U3BlY0NlbGwpICYmICEoZm9y
Tm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUgJiB+U3BlY0NlbGwpKQotICAgICAgICAgICAgZm9y
Tm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY0NlbGwpOwotICAgICAgICBmb3JOb2RlKG5v
ZGUuY2hpbGQyKCkpLmZpbHRlcihTcGVjQ2VsbCk7Ci0gICAgICAgIGZvck5vZGUobm9kZUluZGV4
KS5zZXQoU3BlY0Jvb2xlYW4pOworICAgICAgICAvLyBGSVhNRTogVGhpcyBhcHBlYXJzIGJyb2tl
bjogQ2hlY2tIYXNJbnN0YW5jZSBhbHJlYWR5IGRvZXMgYW4gdW5jb25kaXRpb25hbCBjZWxsCisg
ICAgICAgIC8vIGNoZWNrLiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTA3NDc5CisgICAgICAgIGlmICghKG5vZGUtPmNoaWxkMSgpLT5wcmVkaWN0aW9uKCkgJiB+U3Bl
Y0NlbGwpICYmICEoZm9yTm9kZShub2RlLT5jaGlsZDEoKSkubV90eXBlICYgflNwZWNDZWxsKSkK
KyAgICAgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRlcihTcGVjQ2VsbCk7Cisg
ICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQyKCkpLmZpbHRlcihTcGVjQ2VsbCk7CisgICAgICAg
IGZvck5vZGUobm9kZSkuc2V0KFNwZWNCb29sZWFuKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICAKICAgICBjYXNlIFBoaToKICAgICBjYXNlIEZsdXNoOgotICAgICAgICBub2RlLnNldENh
bkV4aXQoZmFsc2UpOworICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICAKICAgICBjYXNlIEJyZWFrcG9pbnQ6Ci0gICAgICAgIG5vZGUu
c2V0Q2FuRXhpdChmYWxzZSk7CisgICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwogICAg
ICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgIGNhc2UgQ2FsbDoKQEAgLTE3ODIsMTggKzE4
MDMsMTggQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgIGNh
c2UgUmVzb2x2ZUJhc2U6CiAgICAgY2FzZSBSZXNvbHZlQmFzZVN0cmljdFB1dDoKICAgICBjYXNl
IFJlc29sdmVHbG9iYWw6Ci0gICAgICAgIG5vZGUuc2V0Q2FuRXhpdCh0cnVlKTsKLSAgICAgICAg
Y2xvYmJlcldvcmxkKG5vZGUuY29kZU9yaWdpbiwgaW5kZXhJbkJsb2NrKTsKLSAgICAgICAgZm9y
Tm9kZShub2RlSW5kZXgpLm1ha2VUb3AoKTsKKyAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVl
KTsKKyAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUtPmNvZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7
CisgICAgICAgIGZvck5vZGUobm9kZSkubWFrZVRvcCgpOwogICAgICAgICBicmVhazsKIAogICAg
IGNhc2UgR2FyYmFnZVZhbHVlOgotICAgICAgICBjbG9iYmVyV29ybGQobm9kZS5jb2RlT3JpZ2lu
LCBpbmRleEluQmxvY2spOwotICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkubWFrZVRvcCgpOwor
ICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+Y29kZU9yaWdpbiwgaW5kZXhJbkJsb2NrKTsKKyAg
ICAgICAgZm9yTm9kZShub2RlKS5tYWtlVG9wKCk7CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2Fz
ZSBGb3JjZU9TUkV4aXQ6Ci0gICAgICAgIG5vZGUuc2V0Q2FuRXhpdCh0cnVlKTsKKyAgICAgICAg
bm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKICAgICAgICAgbV9pc1ZhbGlkID0gZmFsc2U7CiAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgCkBAIC0xODAxLDcgKzE4MjIsNyBAQCBib29sIEFic3Ry
YWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgY2FzZSBJbmxpbmVTdGFydDoKICAg
ICBjYXNlIE5vcDoKICAgICBjYXNlIENvdW50RXhlY3V0aW9uOgotICAgICAgICBub2RlLnNldENh
bkV4aXQoZmFsc2UpOworICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAg
YnJlYWs7CiAgICAgICAgIAogICAgIGNhc2UgTGFzdE5vZGVUeXBlOgpAQCAtMTg1NCwxNSArMTg3
NSwxNCBAQCBpbmxpbmUgdm9pZCBBYnN0cmFjdFN0YXRlOjpjbG9iYmVyU3RydWN0CiAgICAgbV9k
aWRDbG9iYmVyID0gdHJ1ZTsKIH0KIAotaW5saW5lIGJvb2wgQWJzdHJhY3RTdGF0ZTo6bWVyZ2VT
dGF0ZUF0VGFpbChBYnN0cmFjdFZhbHVlJiBkZXN0aW5hdGlvbiwgQWJzdHJhY3RWYWx1ZSYgaW5W
YXJpYWJsZSwgTm9kZUluZGV4IG5vZGVJbmRleCkKK2lubGluZSBib29sIEFic3RyYWN0U3RhdGU6
Om1lcmdlU3RhdGVBdFRhaWwoQWJzdHJhY3RWYWx1ZSYgZGVzdGluYXRpb24sIEFic3RyYWN0VmFs
dWUmIGluVmFyaWFibGUsIE5vZGUqIG5vZGUpCiB7Ci0gICAgaWYgKG5vZGVJbmRleCA9PSBOb05v
ZGUpCisgICAgaWYgKCFub2RlKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIAogICAg
IEFic3RyYWN0VmFsdWUgc291cmNlOwogICAgIAotICAgIE5vZGUmIHRhaWxOb2RlID0gbV9ncmFw
aFtub2RlSW5kZXhdOwotICAgIGlmICh0YWlsTm9kZS52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+aXND
YXB0dXJlZCgpKSB7CisgICAgaWYgKG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5pc0NhcHR1
cmVkKCkpIHsKICAgICAgICAgLy8gSWYgaXQncyBjYXB0dXJlZCB0aGVuIHdlIGtub3cgdGhhdCB3
aGF0ZXZlciB2YWx1ZSB3YXMgc3RvcmVkIGludG8gdGhlIHZhcmlhYmxlIGxhc3QgaXMgdGhlCiAg
ICAgICAgIC8vIG9uZSB3ZSBjYXJlIGFib3V0LiBUaGlzIGlzIHRydWUgZXZlbiBpZiB0aGUgdmFy
aWFibGUgYXQgdGFpbCBpcyBkZWFkLCB3aGljaCBtaWdodCBoYXBwZW4gaWYKICAgICAgICAgLy8g
dGhlIGxhc3QgdGhpbmcgd2UgZGlkIHRvIHRoZSB2YXJpYWJsZSB3YXMgYSBHZXRMb2NhbCBhbmQg
dGhlbiBlbmRlZCB1cCBub3cgdXNpbmcgdGhlCkBAIC0xODc1LDI2ICsxODk1LDI1IEBAIGlubGlu
ZSBib29sIEFic3RyYWN0U3RhdGU6Om1lcmdlU3RhdGVBdFQKICAgICAgICAgZGF0YUxvZ0YoIiBm
cm9tIGxhc3QgYWNjZXNzIGR1ZSB0byBjYXB0dXJlZCB2YXJpYWJsZS5cbiIpOwogI2VuZGlmCiAg
ICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKCF0YWlsTm9kZS5zaG91bGRHZW5lcmF0ZSgpKSB7Cisg
ICAgICAgIGlmICghbm9kZS0+c2hvdWxkR2VuZXJhdGUoKSkgewogICAgICAgICAgICAgLy8gSWYg
dGhlIG5vZGUgYXQgdGFpbCBpcyBhIEdldExvY2FsIHRoYXQgaXMgZGVhZCwgdGhlbiBza2lwIGl0
IHRvIGdldCB0byB0aGUgUGhpLgogICAgICAgICAgICAgLy8gVGhlIFBoaSBtYXkgYmUgbGl2ZS4K
LSAgICAgICAgICAgIGlmICh0YWlsTm9kZS5vcCgpICE9IEdldExvY2FsKQorICAgICAgICAgICAg
aWYgKG5vZGUtPm9wKCkgIT0gR2V0TG9jYWwpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgICAgICAgICAgCi0gICAgICAgICAgICBub2RlSW5kZXggPSB0YWlsTm9kZS5jaGlsZDEo
KS5pbmRleCgpOwotICAgICAgICAgICAgQVNTRVJUKG1fZ3JhcGhbbm9kZUluZGV4XS5vcCgpID09
IFBoaSk7Ci0gICAgICAgICAgICBpZiAoIW1fZ3JhcGhbbm9kZUluZGV4XS5zaG91bGRHZW5lcmF0
ZSgpKQorICAgICAgICAgICAgbm9kZSA9IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKKyAgICAgICAg
ICAgIEFTU0VSVChub2RlLT5vcCgpID09IFBoaSk7CisgICAgICAgICAgICBpZiAoIW5vZGUtPnNo
b3VsZEdlbmVyYXRlKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9
CiAgICAgICAgIAotICAgICAgICBOb2RlJiBub2RlID0gbV9ncmFwaFtub2RlSW5kZXhdOwotICAg
ICAgICBBU1NFUlQobm9kZS5zaG91bGRHZW5lcmF0ZSgpKTsKKyAgICAgICAgQVNTRVJUKG5vZGUt
PnNob3VsZEdlbmVyYXRlKCkpOwogCiAjaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9W
RVJCT1NFKQotICAgICAgICBkYXRhTG9nRigiICAgICAgICAgIEl0J3MgbGl2ZSwgbm9kZSBAJXUu
XG4iLCBub2RlSW5kZXgpOworICAgICAgICBkYXRhTG9nRigiICAgICAgICAgIEl0J3MgbGl2ZSwg
bm9kZSBAJXUuXG4iLCBub2RlLT5pbmRleCgpKTsKICNlbmRpZgogICAgIAotICAgICAgICBzd2l0
Y2ggKG5vZGUub3AoKSkgeworICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKICAgICAgICAg
Y2FzZSBQaGk6CiAgICAgICAgIGNhc2UgU2V0QXJndW1lbnQ6CiAgICAgICAgIGNhc2UgRmx1c2g6
CkBAIC0xOTA5LDcgKzE5MjgsNyBAQCBpbmxpbmUgYm9vbCBBYnN0cmFjdFN0YXRlOjptZXJnZVN0
YXRlQXRUCiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBHZXRMb2NhbDoKICAgICAgICAgICAg
IC8vIFRoZSBibG9jayByZWZpbmVzIHRoZSB2YWx1ZSB3aXRoIGFkZGl0aW9uYWwgc3BlY3VsYXRp
b25zLgotICAgICAgICAgICAgc291cmNlID0gZm9yTm9kZShub2RlSW5kZXgpOworICAgICAgICAg
ICAgc291cmNlID0gZm9yTm9kZShub2RlKTsKICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FU
SU9OX1ZFUkJPU0UpCiAgICAgICAgICAgICBkYXRhTG9nRigiICAgICAgICAgIFJlZmluaW5nIHRv
ICIpOwogICAgICAgICAgICAgc291cmNlLmR1bXAoV1RGOjpkYXRhRmlsZSgpKTsKQEAgLTE5MjAs
MTEgKzE5MzksMTEgQEAgaW5saW5lIGJvb2wgQWJzdHJhY3RTdGF0ZTo6bWVyZ2VTdGF0ZUF0VAog
ICAgICAgICBjYXNlIFNldExvY2FsOgogICAgICAgICAgICAgLy8gVGhlIGJsb2NrIHNldHMgdGhl
IHZhcmlhYmxlLCBhbmQgcG90ZW50aWFsbHkgcmVmaW5lcyBpdCwgYm90aAogICAgICAgICAgICAg
Ly8gYmVmb3JlIGFuZCBhZnRlciBzZXR0aW5nIGl0LgotICAgICAgICAgICAgaWYgKG5vZGUudmFy
aWFibGVBY2Nlc3NEYXRhKCktPnNob3VsZFVzZURvdWJsZUZvcm1hdCgpKSB7CisgICAgICAgICAg
ICBpZiAobm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCktPnNob3VsZFVzZURvdWJsZUZvcm1hdCgp
KSB7CiAgICAgICAgICAgICAgICAgLy8gRklYTUU6IFRoaXMgdW5uZWNlc3NhcmlseSBsb3NlcyBw
cmVjaXNpb24uCiAgICAgICAgICAgICAgICAgc291cmNlLnNldChTcGVjRG91YmxlKTsKICAgICAg
ICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgIHNvdXJjZSA9IGZvck5vZGUobm9kZS5jaGls
ZDEoKSk7CisgICAgICAgICAgICAgICAgc291cmNlID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSk7
CiAjaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQogICAgICAgICAgICAg
ZGF0YUxvZ0YoIiAgICAgICAgICBTZXR0aW5nIHRvICIpOwogICAgICAgICAgICAgc291cmNlLmR1
bXAoV1RGOjpkYXRhRmlsZSgpKTsKQEAgLTE5ODIsMzUgKzIwMDEsMzQgQEAgaW5saW5lIGJvb2wg
QWJzdHJhY3RTdGF0ZTo6bWVyZ2UoQmFzaWNCbAogICAgIHJldHVybiBjaGFuZ2VkOwogfQogCi1p
bmxpbmUgYm9vbCBBYnN0cmFjdFN0YXRlOjptZXJnZVRvU3VjY2Vzc29ycygKLSAgICBHcmFwaCYg
Z3JhcGgsIEJhc2ljQmxvY2sqIGJhc2ljQmxvY2spCitpbmxpbmUgYm9vbCBBYnN0cmFjdFN0YXRl
OjptZXJnZVRvU3VjY2Vzc29ycyhHcmFwaCYgZ3JhcGgsIEJhc2ljQmxvY2sqIGJhc2ljQmxvY2sp
CiB7Ci0gICAgTm9kZSYgdGVybWluYWwgPSBncmFwaFtiYXNpY0Jsb2NrLT5sYXN0KCldOworICAg
IE5vZGUqIHRlcm1pbmFsID0gYmFzaWNCbG9jay0+bGFzdCgpOwogICAgIAotICAgIEFTU0VSVCh0
ZXJtaW5hbC5pc1Rlcm1pbmFsKCkpOworICAgIEFTU0VSVCh0ZXJtaW5hbC0+aXNUZXJtaW5hbCgp
KTsKICAgICAKLSAgICBzd2l0Y2ggKHRlcm1pbmFsLm9wKCkpIHsKKyAgICBzd2l0Y2ggKHRlcm1p
bmFsLT5vcCgpKSB7CiAgICAgY2FzZSBKdW1wOiB7CiAgICAgICAgIEFTU0VSVChiYXNpY0Jsb2Nr
LT5jZmFCcmFuY2hEaXJlY3Rpb24gPT0gSW52YWxpZEJyYW5jaERpcmVjdGlvbik7CiAjaWYgREZH
X0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQogICAgICAgICBkYXRhTG9nRigiICAg
ICAgICBNZXJnaW5nIHRvIGJsb2NrICMldS5cbiIsIHRlcm1pbmFsLnRha2VuQmxvY2tJbmRleCgp
KTsKICNlbmRpZgotICAgICAgICByZXR1cm4gbWVyZ2UoYmFzaWNCbG9jaywgZ3JhcGgubV9ibG9j
a3NbdGVybWluYWwudGFrZW5CbG9ja0luZGV4KCldLmdldCgpKTsKKyAgICAgICAgcmV0dXJuIG1l
cmdlKGJhc2ljQmxvY2ssIGdyYXBoLm1fYmxvY2tzW3Rlcm1pbmFsLT50YWtlbkJsb2NrSW5kZXgo
KV0uZ2V0KCkpOwogICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBCcmFuY2g6IHsKICAgICAgICAg
QVNTRVJUKGJhc2ljQmxvY2stPmNmYUJyYW5jaERpcmVjdGlvbiAhPSBJbnZhbGlkQnJhbmNoRGly
ZWN0aW9uKTsKICAgICAgICAgYm9vbCBjaGFuZ2VkID0gZmFsc2U7CiAjaWYgREZHX0VOQUJMRShE
RUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQotICAgICAgICBkYXRhTG9nRigiICAgICAgICBNZXJn
aW5nIHRvIGJsb2NrICMldS5cbiIsIHRlcm1pbmFsLnRha2VuQmxvY2tJbmRleCgpKTsKKyAgICAg
ICAgZGF0YUxvZ0YoIiAgICAgICAgTWVyZ2luZyB0byBibG9jayAjJXUuXG4iLCB0ZXJtaW5hbC0+
dGFrZW5CbG9ja0luZGV4KCkpOwogI2VuZGlmCiAgICAgICAgIGlmIChiYXNpY0Jsb2NrLT5jZmFC
cmFuY2hEaXJlY3Rpb24gIT0gVGFrZUZhbHNlKQotICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJn
ZShiYXNpY0Jsb2NrLCBncmFwaC5tX2Jsb2Nrc1t0ZXJtaW5hbC50YWtlbkJsb2NrSW5kZXgoKV0u
Z2V0KCkpOworICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZShiYXNpY0Jsb2NrLCBncmFwaC5t
X2Jsb2Nrc1t0ZXJtaW5hbC0+dGFrZW5CbG9ja0luZGV4KCldLmdldCgpKTsKICNpZiBERkdfRU5B
QkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCiAgICAgICAgIGRhdGFMb2dGKCIgICAgICAg
IE1lcmdpbmcgdG8gYmxvY2sgIyV1LlxuIiwgdGVybWluYWwubm90VGFrZW5CbG9ja0luZGV4KCkp
OwogI2VuZGlmCiAgICAgICAgIGlmIChiYXNpY0Jsb2NrLT5jZmFCcmFuY2hEaXJlY3Rpb24gIT0g
VGFrZVRydWUpCi0gICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlKGJhc2ljQmxvY2ssIGdyYXBo
Lm1fYmxvY2tzW3Rlcm1pbmFsLm5vdFRha2VuQmxvY2tJbmRleCgpXS5nZXQoKSk7CisgICAgICAg
ICAgICBjaGFuZ2VkIHw9IG1lcmdlKGJhc2ljQmxvY2ssIGdyYXBoLm1fYmxvY2tzW3Rlcm1pbmFs
LT5ub3RUYWtlbkJsb2NrSW5kZXgoKV0uZ2V0KCkpOwogICAgICAgICByZXR1cm4gY2hhbmdlZDsK
ICAgICB9CiAgICAgICAgIApAQCAtMjAyNiwxMiArMjA0NCwxMiBAQCBpbmxpbmUgYm9vbCBBYnN0
cmFjdFN0YXRlOjptZXJnZVRvU3VjY2VzCiAgICAgfQogfQogCi1pbmxpbmUgYm9vbCBBYnN0cmFj
dFN0YXRlOjptZXJnZVZhcmlhYmxlQmV0d2VlbkJsb2NrcyhBYnN0cmFjdFZhbHVlJiBkZXN0aW5h
dGlvbiwgQWJzdHJhY3RWYWx1ZSYgc291cmNlLCBOb2RlSW5kZXggZGVzdGluYXRpb25Ob2RlSW5k
ZXgsIE5vZGVJbmRleCBzb3VyY2VOb2RlSW5kZXgpCitpbmxpbmUgYm9vbCBBYnN0cmFjdFN0YXRl
OjptZXJnZVZhcmlhYmxlQmV0d2VlbkJsb2NrcyhBYnN0cmFjdFZhbHVlJiBkZXN0aW5hdGlvbiwg
QWJzdHJhY3RWYWx1ZSYgc291cmNlLCBOb2RlKiBkZXN0aW5hdGlvbk5vZGUsIE5vZGUqIHNvdXJj
ZU5vZGUpCiB7Ci0gICAgaWYgKGRlc3RpbmF0aW9uTm9kZUluZGV4ID09IE5vTm9kZSkKKyAgICBp
ZiAoIWRlc3RpbmF0aW9uTm9kZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAotICAgIEFT
U0VSVF9VTlVTRUQoc291cmNlTm9kZUluZGV4LCBzb3VyY2VOb2RlSW5kZXggIT0gTm9Ob2RlKTsK
KyAgICBBU1NFUlRfVU5VU0VEKHNvdXJjZU5vZGUsIHNvdXJjZU5vZGUpOwogICAgIAogICAgIC8v
IEZJWE1FOiBXZSBjb3VsZCBkbyBzb21lIHNwYXJzZSBjb25kaXRpb25hbCBwcm9wYWdhdGlvbiBo
ZXJlIQogICAgIApAQCAtMjA0MiwxNSArMjA2MCwxNSBAQCB2b2lkIEFic3RyYWN0U3RhdGU6OmR1
bXAoUHJpbnRTdHJlYW0mIG91CiB7CiAgICAgYm9vbCBmaXJzdCA9IHRydWU7CiAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBtX2Jsb2NrLT5zaXplKCk7ICsraSkgewotICAgICAgICBOb2RlSW5k
ZXggaW5kZXggPSBtX2Jsb2NrLT5hdChpKTsKLSAgICAgICAgQWJzdHJhY3RWYWx1ZSYgdmFsdWUg
PSBmb3JOb2RlKGluZGV4KTsKKyAgICAgICAgTm9kZSogbm9kZSA9IG1fYmxvY2stPmF0KGkpOwor
ICAgICAgICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSA9IGZvck5vZGUobm9kZSk7CiAgICAgICAgIGlm
ICh2YWx1ZS5pc0NsZWFyKCkpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgaWYgKGZp
cnN0KQogICAgICAgICAgICAgZmlyc3QgPSBmYWxzZTsKICAgICAgICAgZWxzZQogICAgICAgICAg
ICAgb3V0LnByaW50ZigiICIpOwotICAgICAgICBvdXQucHJpbnRmKCJAJWx1OiIsIHN0YXRpY19j
YXN0PHVuc2lnbmVkIGxvbmc+KGluZGV4KSk7CisgICAgICAgIG91dC5wcmludGYoIkAlbHU6Iiwg
c3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4obm9kZS0+aW5kZXgoKSkpOwogICAgICAgICB2YWx1
ZS5kdW1wKG91dCk7CiAgICAgfQogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdBYnN0cmFjdFN0YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdBYnN0cmFjdFN0YXRlLmgJKHJldmlzaW9uIDE0MDkwNCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQWJzdHJhY3RTdGF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTIsIDIwMTMgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC03Miw4ICs3Miw4IEBAIHN0cnVjdCBCYXNpY0Jsb2NrOwogLy8gQWJzdHJhY3RTdGF0ZSBzdGF0
ZShjb2RlQmxvY2ssIGdyYXBoKTsKIC8vIHN0YXRlLmJlZ2luQmFzaWNCbG9jayhiYXNpY0Jsb2Nr
KTsKIC8vIGJvb2wgZW5kUmVhY2hlZCA9IHRydWU7Ci0vLyBmb3IgKE5vZGVJbmRleCBpZHggPSBi
YXNpY0Jsb2NrLmJlZ2luOyBpZHggPCBiYXNpY0Jsb2NrLmVuZDsgKytpZHgpIHsKLS8vICAgICBp
ZiAoIXN0YXRlLmV4ZWN1dGUoaWR4KSkKKy8vIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBiYXNp
Y0Jsb2NrLT5zaXplKCk7ICsraSkgeworLy8gICAgIGlmICghc3RhdGUuZXhlY3V0ZShpKSkKIC8v
ICAgICAgICAgYnJlYWs7CiAvLyB9CiAvLyBib29sIHJlc3VsdCA9IHN0YXRlLmVuZEJhc2ljQmxv
Y2soPGVpdGhlciBNZXJnZSBvciBEb250TWVyZ2U+KTsKQEAgLTk3LDE0ICs5NywxNCBAQCBwdWJs
aWM6CiAgICAgCiAgICAgfkFic3RyYWN0U3RhdGUoKTsKICAgICAKLSAgICBBYnN0cmFjdFZhbHVl
JiBmb3JOb2RlKE5vZGVJbmRleCBub2RlSW5kZXgpCisgICAgQWJzdHJhY3RWYWx1ZSYgZm9yTm9k
ZShOb2RlKiBub2RlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIG1fZ3JhcGhbbm9kZUluZGV4XS52
YWx1ZTsKKyAgICAgICAgcmV0dXJuIG5vZGUtPnZhbHVlOwogICAgIH0KICAgICAKLSAgICBBYnN0
cmFjdFZhbHVlJiBmb3JOb2RlKEVkZ2Ugbm9kZVVzZSkKKyAgICBBYnN0cmFjdFZhbHVlJiBmb3JO
b2RlKEVkZ2UgZWRnZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBmb3JOb2RlKG5vZGVVc2UuaW5k
ZXgoKSk7CisgICAgICAgIHJldHVybiBmb3JOb2RlKGVkZ2Uubm9kZSgpKTsKICAgICB9CiAgICAg
CiAgICAgT3BlcmFuZHM8QWJzdHJhY3RWYWx1ZT4mIHZhcmlhYmxlcygpCkBAIC0xODcsNDggKzE4
Nyw0OCBAQCBwcml2YXRlOgogICAgIHZvaWQgY2xvYmJlckNhcHR1cmVkVmFycyhjb25zdCBDb2Rl
T3JpZ2luJik7CiAgICAgdm9pZCBjbG9iYmVyU3RydWN0dXJlcyh1bnNpZ25lZCBpbmRleEluQmxv
Y2spOwogICAgIAotICAgIGJvb2wgbWVyZ2VTdGF0ZUF0VGFpbChBYnN0cmFjdFZhbHVlJiBkZXN0
aW5hdGlvbiwgQWJzdHJhY3RWYWx1ZSYgaW5WYXJpYWJsZSwgTm9kZUluZGV4KTsKKyAgICBib29s
IG1lcmdlU3RhdGVBdFRhaWwoQWJzdHJhY3RWYWx1ZSYgZGVzdGluYXRpb24sIEFic3RyYWN0VmFs
dWUmIGluVmFyaWFibGUsIE5vZGUqKTsKICAgICAKLSAgICBzdGF0aWMgYm9vbCBtZXJnZVZhcmlh
YmxlQmV0d2VlbkJsb2NrcyhBYnN0cmFjdFZhbHVlJiBkZXN0aW5hdGlvbiwgQWJzdHJhY3RWYWx1
ZSYgc291cmNlLCBOb2RlSW5kZXggZGVzdGluYXRpb25Ob2RlSW5kZXgsIE5vZGVJbmRleCBzb3Vy
Y2VOb2RlSW5kZXgpOworICAgIHN0YXRpYyBib29sIG1lcmdlVmFyaWFibGVCZXR3ZWVuQmxvY2tz
KEFic3RyYWN0VmFsdWUmIGRlc3RpbmF0aW9uLCBBYnN0cmFjdFZhbHVlJiBzb3VyY2UsIE5vZGUq
IGRlc3RpbmF0aW9uTm9kZSwgTm9kZSogc291cmNlTm9kZSk7CiAgICAgCi0gICAgdm9pZCBzcGVj
dWxhdGVJbnQzMlVuYXJ5KE5vZGUmIG5vZGUsIGJvb2wgZm9yY2VDYW5FeGl0ID0gZmFsc2UpCisg
ICAgdm9pZCBzcGVjdWxhdGVJbnQzMlVuYXJ5KE5vZGUqIG5vZGUsIGJvb2wgZm9yY2VDYW5FeGl0
ID0gZmFsc2UpCiAgICAgewotICAgICAgICBBYnN0cmFjdFZhbHVlJiBjaGlsZFZhbHVlID0gZm9y
Tm9kZShub2RlLmNoaWxkMSgpKTsKLSAgICAgICAgbm9kZS5zZXRDYW5FeGl0KGZvcmNlQ2FuRXhp
dCB8fCAhaXNJbnQzMlNwZWN1bGF0aW9uKGNoaWxkVmFsdWUubV90eXBlKSk7CisgICAgICAgIEFi
c3RyYWN0VmFsdWUmIGNoaWxkVmFsdWUgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKTsKKyAgICAg
ICAgbm9kZS0+c2V0Q2FuRXhpdChmb3JjZUNhbkV4aXQgfHwgIWlzSW50MzJTcGVjdWxhdGlvbihj
aGlsZFZhbHVlLm1fdHlwZSkpOwogICAgICAgICBjaGlsZFZhbHVlLmZpbHRlcihTcGVjSW50MzIp
OwogICAgIH0KICAgICAKLSAgICB2b2lkIHNwZWN1bGF0ZU51bWJlclVuYXJ5KE5vZGUmIG5vZGUp
CisgICAgdm9pZCBzcGVjdWxhdGVOdW1iZXJVbmFyeShOb2RlKiBub2RlKQogICAgIHsKLSAgICAg
ICAgQWJzdHJhY3RWYWx1ZSYgY2hpbGRWYWx1ZSA9IGZvck5vZGUobm9kZS5jaGlsZDEoKSk7Ci0g
ICAgICAgIG5vZGUuc2V0Q2FuRXhpdCghaXNOdW1iZXJTcGVjdWxhdGlvbihjaGlsZFZhbHVlLm1f
dHlwZSkpOworICAgICAgICBBYnN0cmFjdFZhbHVlJiBjaGlsZFZhbHVlID0gZm9yTm9kZShub2Rl
LT5jaGlsZDEoKSk7CisgICAgICAgIG5vZGUtPnNldENhbkV4aXQoIWlzTnVtYmVyU3BlY3VsYXRp
b24oY2hpbGRWYWx1ZS5tX3R5cGUpKTsKICAgICAgICAgY2hpbGRWYWx1ZS5maWx0ZXIoU3BlY051
bWJlcik7CiAgICAgfQogICAgIAotICAgIHZvaWQgc3BlY3VsYXRlQm9vbGVhblVuYXJ5KE5vZGUm
IG5vZGUpCisgICAgdm9pZCBzcGVjdWxhdGVCb29sZWFuVW5hcnkoTm9kZSogbm9kZSkKICAgICB7
Ci0gICAgICAgIEFic3RyYWN0VmFsdWUmIGNoaWxkVmFsdWUgPSBmb3JOb2RlKG5vZGUuY2hpbGQx
KCkpOwotICAgICAgICBub2RlLnNldENhbkV4aXQoIWlzQm9vbGVhblNwZWN1bGF0aW9uKGNoaWxk
VmFsdWUubV90eXBlKSk7CisgICAgICAgIEFic3RyYWN0VmFsdWUmIGNoaWxkVmFsdWUgPSBmb3JO
b2RlKG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCghaXNCb29sZWFu
U3BlY3VsYXRpb24oY2hpbGRWYWx1ZS5tX3R5cGUpKTsKICAgICAgICAgY2hpbGRWYWx1ZS5maWx0
ZXIoU3BlY0Jvb2xlYW4pOwogICAgIH0KICAgICAKLSAgICB2b2lkIHNwZWN1bGF0ZUludDMyQmlu
YXJ5KE5vZGUmIG5vZGUsIGJvb2wgZm9yY2VDYW5FeGl0ID0gZmFsc2UpCisgICAgdm9pZCBzcGVj
dWxhdGVJbnQzMkJpbmFyeShOb2RlKiBub2RlLCBib29sIGZvcmNlQ2FuRXhpdCA9IGZhbHNlKQog
ICAgIHsKLSAgICAgICAgQWJzdHJhY3RWYWx1ZSYgY2hpbGRWYWx1ZTEgPSBmb3JOb2RlKG5vZGUu
Y2hpbGQxKCkpOwotICAgICAgICBBYnN0cmFjdFZhbHVlJiBjaGlsZFZhbHVlMiA9IGZvck5vZGUo
bm9kZS5jaGlsZDIoKSk7Ci0gICAgICAgIG5vZGUuc2V0Q2FuRXhpdCgKKyAgICAgICAgQWJzdHJh
Y3RWYWx1ZSYgY2hpbGRWYWx1ZTEgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAg
QWJzdHJhY3RWYWx1ZSYgY2hpbGRWYWx1ZTIgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMigpKTsKKyAg
ICAgICAgbm9kZS0+c2V0Q2FuRXhpdCgKICAgICAgICAgICAgIGZvcmNlQ2FuRXhpdAotICAgICAg
ICAgICAgfHwgIWlzSW50MzJTcGVjdWxhdGlvbihjaGlsZFZhbHVlMS5tX3R5cGUpCi0gICAgICAg
ICAgICB8fCAhaXNJbnQzMlNwZWN1bGF0aW9uKGNoaWxkVmFsdWUyLm1fdHlwZSkpOworICAgICAg
ICAgICAgfHwgIWlzSW50MzJTcGVjdWxhdGlvbihjaGlsZFZhbHVlMS0+bV90eXBlKQorICAgICAg
ICAgICAgfHwgIWlzSW50MzJTcGVjdWxhdGlvbihjaGlsZFZhbHVlMi0+bV90eXBlKSk7CiAgICAg
ICAgIGNoaWxkVmFsdWUxLmZpbHRlcihTcGVjSW50MzIpOwogICAgICAgICBjaGlsZFZhbHVlMi5m
aWx0ZXIoU3BlY0ludDMyKTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBzcGVjdWxhdGVOdW1iZXJC
aW5hcnkoTm9kZSYgbm9kZSkKKyAgICB2b2lkIHNwZWN1bGF0ZU51bWJlckJpbmFyeShOb2RlKiBu
b2RlKQogICAgIHsKLSAgICAgICAgQWJzdHJhY3RWYWx1ZSYgY2hpbGRWYWx1ZTEgPSBmb3JOb2Rl
KG5vZGUuY2hpbGQxKCkpOwotICAgICAgICBBYnN0cmFjdFZhbHVlJiBjaGlsZFZhbHVlMiA9IGZv
ck5vZGUobm9kZS5jaGlsZDIoKSk7Ci0gICAgICAgIG5vZGUuc2V0Q2FuRXhpdCgKKyAgICAgICAg
QWJzdHJhY3RWYWx1ZSYgY2hpbGRWYWx1ZTEgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKTsKKyAg
ICAgICAgQWJzdHJhY3RWYWx1ZSYgY2hpbGRWYWx1ZTIgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMigp
KTsKKyAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCgKICAgICAgICAgICAgICFpc051bWJlclNwZWN1
bGF0aW9uKGNoaWxkVmFsdWUxLm1fdHlwZSkKICAgICAgICAgICAgIHx8ICFpc051bWJlclNwZWN1
bGF0aW9uKGNoaWxkVmFsdWUyLm1fdHlwZSkpOwogICAgICAgICBjaGlsZFZhbHVlMS5maWx0ZXIo
U3BlY051bWJlcik7CkBAIC0yNDAsOSArMjQwLDkgQEAgcHJpdmF0ZToKICAgICAgICAgRGVmaW5p
dGVseUZhbHNlLAogICAgICAgICBEZWZpbml0ZWx5VHJ1ZQogICAgIH07Ci0gICAgQm9vbGVhblJl
c3VsdCBib29sZWFuUmVzdWx0KE5vZGUmLCBBYnN0cmFjdFZhbHVlJik7CisgICAgQm9vbGVhblJl
c3VsdCBib29sZWFuUmVzdWx0KE5vZGUqLCBBYnN0cmFjdFZhbHVlJik7CiAgICAgCi0gICAgYm9v
bCB0cnlTZXRDb25zdGFudChOb2RlSW5kZXggbm9kZUluZGV4LCBKU1ZhbHVlIHZhbHVlKQorICAg
IGJvb2wgdHJ5U2V0Q29uc3RhbnQoTm9kZSogbm9kZSwgSlNWYWx1ZSB2YWx1ZSkKICAgICB7CiAg
ICAgICAgIC8vIE1ha2Ugc3VyZSB3ZSBkb24ndCBjb25zdGFudCBmb2xkIHNvbWV0aGluZyB0aGF0
IHdpbGwgcHJvZHVjZSB2YWx1ZXMgdGhhdCBjb250cmF2ZW5lCiAgICAgICAgIC8vIHByZWRpY3Rp
b25zLiBJZiB0aGF0IGhhcHBlbnMgdGhlbiB3ZSBrbm93IHRoYXQgdGhlIGNvZGUgd2lsbCBPU1Ig
ZXhpdCwgZm9yY2luZwpAQCAtMjUxLDExICsyNTEsMTEgQEAgcHJpdmF0ZToKICAgICAgICAgLy8g
bG90IG9mIHN1YnRsZSBjb2RlIHRoYXQgYXNzdW1lcyB0aGF0CiAgICAgICAgIC8vIHNwZWN1bGF0
aW9uRnJvbVZhbHVlKGpzQ29uc3RhbnQpID09IGpzQ29uc3RhbnQucHJlZGljdGlvbigpLiAiSGFy
ZGVuaW5nIiB0aGF0IGNvZGUKICAgICAgICAgLy8gaXMgcHJvYmFibHkgbGVzcyBzYW5lIHRoYW4g
anVzdCBwdWxsaW5nIGJhY2sgb24gY29uc3RhbnQgZm9sZGluZy4KLSAgICAgICAgU3BlY3VsYXRl
ZFR5cGUgb2xkVHlwZSA9IG1fZ3JhcGhbbm9kZUluZGV4XS5wcmVkaWN0aW9uKCk7CisgICAgICAg
IFNwZWN1bGF0ZWRUeXBlIG9sZFR5cGUgPSBub2RlLT5wcmVkaWN0aW9uKCk7CiAgICAgICAgIGlm
IChtZXJnZVNwZWN1bGF0aW9ucyhzcGVjdWxhdGlvbkZyb21WYWx1ZSh2YWx1ZSksIG9sZFR5cGUp
ICE9IG9sZFR5cGUpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIAotICAgICAg
ICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KHZhbHVlKTsKKyAgICAgICAgZm9yTm9kZShub2RlKS5z
ZXQodmFsdWUpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0VmFsdWUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0VmFsdWUuaAkocmV2aXNpb24gMTQw
OTA0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFZhbHVlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExLCAy
MDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
MSwgMjAxMiwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQxOCw2ICs0MTgsOCBAQCBzdHJ1Y3QgQWJzdHJhY3RW
YWx1ZSB7CiAgICAgLy8gICAgY2hhbmdlIHgncyBzdHJ1Y3R1cmUgYW5kIHdlIGhhdmUgbm8gd2F5
IG9mIHByb3Zpbmcgb3RoZXJ3aXNlLCBidXQKICAgICAvLyAgICB4J3MgbV9mdXR1cmVQb3NzaWJs
ZVN0cnVjdHVyZSB3aWxsIGJlIHdoYXRldmVyIHN0cnVjdHVyZSB3ZSBoYWQgY2hlY2tlZAogICAg
IC8vICAgIHdoZW4gZ2V0dGluZyBwcm9wZXJ0eSAnZicuCisgICAgCisgICAgLy8gTkIuIEFsbCBm
aWVsZHMgaW4gdGhpcyBzdHJ1Y3QgbXVzdCBoYXZlIHRyaXZpYWwgZGVzdHJ1Y3RvcnMuCiAKICAg
ICAvLyBUaGlzIGlzIGEgcHJvdmVuIGNvbnN0cmFpbnQgb24gdGhlIHN0cnVjdHVyZXMgdGhhdCB0
aGlzIHZhbHVlIGNhbiBoYXZlIHJpZ2h0CiAgICAgLy8gbm93LiBUaGUgc3RydWN0dXJlIG9mIHRo
ZSBjdXJyZW50IHZhbHVlIG11c3QgYmVsb25nIHRvIHRoaXMgc2V0LiBUaGUgc2V0IG1heQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBZGphY2VuY3lMaXN0LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBZGphY2VuY3lMaXN0LmgJKHJldmlz
aW9uIDE0MDkwNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWRqYWNlbmN5TGlz
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTEsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC01Nyw3ICs1Nyw3IEBAIHB1YmxpYzoKICAgICAgICAgfQogICAg
IH0KICAgICAKLSAgICBBZGphY2VuY3lMaXN0KEtpbmQga2luZCwgTm9kZUluZGV4IGNoaWxkMSwg
Tm9kZUluZGV4IGNoaWxkMiwgTm9kZUluZGV4IGNoaWxkMykKKyAgICBBZGphY2VuY3lMaXN0KEtp
bmQga2luZCwgTm9kZSogY2hpbGQxLCBOb2RlKiBjaGlsZDIsIE5vZGUqIGNoaWxkMykKICNpZiAh
QVNTRVJUX0RJU0FCTEVECiAgICAgICAgIDogbV9raW5kKEZpeGVkKQogI2VuZGlmCkBAIC0xMTgs
NyArMTE4LDcgQEAgcHVibGljOgogICAgICAgICBjaGlsZCgyKSA9IGNoaWxkMzsKICAgICB9CiAg
ICAgCi0gICAgdm9pZCBpbml0aWFsaXplKE5vZGVJbmRleCBjaGlsZDEgPSBOb05vZGUsIE5vZGVJ
bmRleCBjaGlsZDIgPSBOb05vZGUsIE5vZGVJbmRleCBjaGlsZDMgPSBOb05vZGUpCisgICAgdm9p
ZCBpbml0aWFsaXplKE5vZGUqIGNoaWxkMSA9IDAsIE5vZGUqIGNoaWxkMiA9IDAsIE5vZGUqIGNo
aWxkMyA9IDApCiAgICAgewogICAgICAgICBpbml0aWFsaXplKEVkZ2UoY2hpbGQxKSwgRWRnZShj
aGlsZDIpLCBFZGdlKGNoaWxkMykpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQWxsb2NhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdBbGxvY2F0b3IuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQWxsb2NhdG9yLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjM1IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHQWxs
b2NhdG9yX2gKKyNkZWZpbmUgREZHQWxsb2NhdG9yX2gKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9y
bS5oPgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlIDx3dGYvUGFnZUFsbG9jYXRp
b25BbGlnbmVkLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworLy8gQ3Vz
dG9tIHBvb2wgYWxsb2NhdG9yIGZvciBleGFjdGx5IG9uZSB0eXBlICh0eXBlIFQpLiBJdCBoYXMg
ZmFzdCAoTygxKSwgb25seSBhIGZldworLy8gaW5zdHJ1Y3Rpb25zKSBhbGxvY2F0b3IsIGFuZCBh
IHNpbWlsYXJseSBmYXN0IGZyZWUoKS4gUmVjeWNsaW5nIHdvcmtzIGlmIGVpdGhlciBvZgorLy8g
dGhlIGZvbGxvd2luZyBpcyB0cnVlOgorLy8gLSBUIGhhcyBhIHRyaXZpYWwgZGVzdHJ1Y3Rvci4g
SW4gdGhhdCBjYXNlIHlvdSBkb24ndCBoYXZlIHRvIGV2ZXIgY2FsbCBmcmVlKCkgb24KKy8vICAg
YW55dGhpbmcuIFlvdSBjYW4ganVzdCBjYWxsIGZyZWVBbGwoKSBpbnN0ZWFkLgorLy8gLSBZb3Ug
Y2FsbCBmcmVlKCkgb24gYWxsIFQncyB0aGF0IHlvdSBhbGxvY2F0ZWQsIGFuZCBuZXZlciB1c2Ug
ZnJlZUFsbCgpLgorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorY2xhc3MgQWxsb2NhdG9yIHsKK3B1
YmxpYzoKKyAgICBBbGxvY2F0b3IoKTsKKyAgICB+QWxsb2NhdG9yKCk7CisgICAgCisgICAgdm9p
ZCogYWxsb2NhdGUoKTsgLy8gVXNlIHBsYWNlbWVudCBuZXcgdG8gYWxsb2NhdGUsIGFuZCBhdm9p
ZCB1c2luZyB0aGlzIG1ldGhvZC4KKyAgICB2b2lkIGZyZWUoVCopOyAvLyBDYWxsIHRoaXMgbWV0
aG9kIHRvIGRlbGV0ZTsgbmV2ZXIgdXNlICdkZWxldGUnIGRpcmVjdGx5LgorICAgIAorICAgIHZv
aWQgZnJlZUFsbCgpOyAvLyBPbmx5IGNhbGwgdGhpcyBpZiBUIGhhcyBhIHRyaXZpYWwgZGVzdHJ1
Y3Rvci4KKyAgICB2b2lkIHJlc2V0KCk7IC8vIExpa2UgZnJlZUFsbCgpLCBidXQgYWxzbyByZXR1
cm5zIGFsbCBtZW1vcnkgdG8gdGhlIE9TLgorICAgIAorICAgIHVuc2lnbmVkIGluZGV4T2YoVCop
OworICAgIAorICAgIHN0YXRpYyBBbGxvY2F0b3IqIGFsbG9jYXRvck9mKFQqKTsKKyAgICAKK3By
aXZhdGU6CisgICAgdm9pZCogYnVtcEFsbG9jYXRlKCk7CisgICAgdm9pZCogZnJlZUxpc3RBbGxv
Y2F0ZSgpOworICAgIHZvaWQqIGFsbG9jYXRlU2xvdygpOworICAgIHZvaWQgZnJlZVJlZ2lvbnNT
dGFydGluZ0F0KFJlZ2lvbiopOworICAgIHZvaWQgc3RhcnRpbmdCdW1waW5nSW4oUmVnaW9uKik7
CisgICAgCisgICAgc3RydWN0IFJlZ2lvbiB7CisgICAgICAgIHN0YXRpYyBzaXplX3Qgc2l6ZSgp
IHsgcmV0dXJuIDY0ICogS0I7IH0KKyAgICAgICAgc3RhdGljIHNpemVfdCBoZWFkZXJTaXplKCkg
eyByZXR1cm4gc3RkOjptYXgoc2l6ZW9mKFJlZ2lvbiksIHNpemVvZihUKSk7IH0KKyAgICAgICAg
c3RhdGljIHVuc2lnbmVkIG51bWJlck9mVGhpbmdzUGVyUmVnaW9uKCkgeyByZXR1cm4gKHNpemUo
KSAtIGhlYWRlclNpemUoKSkgLyBzaXplb2YoVCk7IH0KKyAgICAgICAgVCogZGF0YSgpIHsgcmV0
dXJuIGJpdHdpc2VfY2FzdDxUKj4oYml0d2lzZV9jYXN0PGNoYXIqPih0aGlzKSArIGhlYWRlclNp
emUoKSk7IH0KKyAgICAgICAgYm9vbCBpc0luVGhpc1JlZ2lvbihUKiBwb2ludGVyKSB7IHJldHVy
biBzdGF0aWNfY2FzdDx1bnNpZ25lZD4ocG9pbnRlciAtIGRhdGEoKSkgPCBudW1iZXJPZlRoaW5n
c1BlclJlZ2lvbigpOyB9CisgICAgICAgIFJlZ2lvbiogcmVnaW9uRm9yKFQqIHBvaW50ZXIpIHsg
cmV0dXJuIGJpdHdpc2VfY2FzdDxSZWdpb24qPihiaXR3aXNlX2Nhc3Q8dWludHB0cl90Pihwb2lu
dGVyKSAmIH4oc2l6ZSgpIC0gMSkpOyB9CisgICAgICAgIAorICAgICAgICBQYWdlQWxsb2NhdGlv
bkFsaWduZWQgbV9hbGxvY2F0aW9uOworICAgICAgICBBbGxvY2F0b3IqIG1fYWxsb2NhdG9yOwor
ICAgICAgICBSZWdpb24qIG1fbmV4dDsKKyAgICB9OworICAgIAorICAgIFJlZ2lvbiogbV9yZWdp
b25IZWFkOworICAgIHZvaWQqKiBtX2ZyZWVMaXN0SGVhZDsKKyAgICBUKiBtX2J1bXBFbmQ7Cisg
ICAgdW5zaWduZWQgbV9idW1wUmVtYWluaW5nOworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4K
K2lubGluZSBBbGxvY2F0b3I6OkFsbG9jYXRvcigpCisgICAgOiBtX3JlZ2lvbkhlYWQoMCkKKyAg
ICAsIG1fZnJlZUxpc3RIZWFkKDApCisgICAgLCBtX2J1bXBSZW1haW5pbmcoMCkKK3sKK30KKwor
dGVtcGxhdGU8dHlwZW5hbWUgVD4KK2lubGluZSBBbGxvY2F0b3I6On5BbGxvY2F0b3IoKQorewor
ICAgIHJlc2V0KCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitBTFdBWVNfSU5MSU5FIHZv
aWQqIEFsbG9jYXRvcjo6YWxsb2NhdGUoKQoreworICAgIGlmIChMSUtFTFkodm9pZCogcmVzdWx0
ID0gYnVtcEFsbG9jYXRlKCkpKQorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIHJldHVybiBm
cmVlTGlzdEFsbG9jYXRlKCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+Cit2b2lkIEFsbG9j
YXRvcjo6ZnJlZShUKiBvYmplY3QpCit7CisgICAgb2JqZWN0LT5+VCgpOworICAgIAorICAgIHZv
aWQqKiBjZWxsID0gYml0d2lzZV9jYXN0PHZvaWQqKj4ob2JqZWN0KTsKKyAgICAqY2VsbCA9IG1f
ZnJlZUxpc3RIZWFkOworICAgIG1fZnJlZUxpc3RIZWFkID0gY2VsbDsKK30KKwordGVtcGxhdGU8
dHlwZW5hbWUgVD4KK3ZvaWQgQWxsb2NhdG9yOjpmcmVlQWxsKCkKK3sKKyAgICBpZiAoIW1fcmVn
aW9uSGVhZCkgeworICAgICAgICBBU1NFUlQoIW1fYnVtcFJlbWFpbmluZyk7CisgICAgICAgIEFT
U0VSVCghbV9mcmVlTGlzdEhlYWQpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAg
IC8vIFNpbmNlIHRoZSBjYWxsZXIgaXMgb3B0aW5nIG91dCBvZiBjYWxsaW5nIHRoZSBkZXN0cnVj
dG9yIGZvciBhbnkgYWxsb2NhdGVkIHRoaW5nLAorICAgIC8vIHdlIGhhdmUgdHdvIGNob2ljZXMs
IHBsdXMgYSBjb250aW51dW0gYmV0d2Vlbjogd2UgY2FuIGVpdGhlciBqdXN0IGRlbGV0ZSBhbGwg
cmVnaW9ucworICAgIC8vIChpLmUuIGNhbGwgcmVzZXQoKSksIG9yIHdlIGNhbiBtYWtlIGFsbCBy
ZWdpb25zIGF2YWlsYWJsZSBmb3IgcmV1c2UuIFdlIGRvIHNvbWV0aGluZworICAgIC8vIHRoYXQg
b3B0aW1pemVzIGZvciAoYSkgc3BlZWQgb2YgZnJlZUFsbCgpLCAoYikgdGhlIGFzc3VtcHRpb24g
dGhhdCBpZiB0aGUgdXNlciBjYWxscworICAgIC8vIGZyZWVBbGwoKSB0aGVuIHRoZXkgd2lsbCBw
cm9iYWJseSBiZSBjYWxsaW5nIGFsbG9jYXRlKCkgaW4gdGhlIG5lYXIgZnV0dXJlLiBOYW1lbHks
CisgICAgLy8gd2UgZnJlZSBhbGwgYnV0IG9uZSByZWdpb24sIGFuZCBtYWtlIHRoZSByZW1haW5p
bmcgcmVnaW9uIGEgYnVtcCBhbGxvY2F0aW9uIHJlZ2lvbi4KKyAgICAKKyAgICBmb3IgKFJlZ2lv
biogcmVnaW9uID0gbV9yZWdpb25IZWFkLT5tX25leHQ7IHJlZ2lvbjsgcmVnaW9uID0gcmVnaW9u
LT5tX25leHQpCisgICAgICAgIGJ1aWxkRnJlZUxpc3RJbihyZWdpb24pOworICAgIAorICAgIG1f
cmVnaW9uSGVhZC0+bV9uZXh0ID0gMDsKKyAgICBtX2ZyZWVMaXN0SGVhZCA9IDA7CisgICAgc3Rh
cnRCdW1waW5nSW4obV9yZWdpb25IZWFkKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK3Zv
aWQgQWxsb2NhdG9yOjpyZXNldCgpCit7CisgICAgZnJlZVJlZ2lvbnNTdGFydGluZ0F0KG1fcmVn
aW9uSGVhZCk7CisgICAgCisgICAgbV9yZWdpb25IZWFkID0gMDsKKyAgICBtX2ZyZWVMaXN0SGVh
ZCA9IDA7CisgICAgbV9idW1wUmVtYWluaW5nID0gMDsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUg
VD4KK3Vuc2lnbmVkIEFsbG9jYXRvcjo6aW5kZXhPZihUKiBvYmplY3QpCit7CisgICAgdW5zaWdu
ZWQgYmFzZUluZGV4ID0gMDsKKyAgICBmb3IgKFJlZ2lvbiogcmVnaW9uID0gbV9yZWdpb25IZWFk
OyByZWdpb247IHJlZ2lvbiA9IHJlZ2lvbi0+bV9uZXh0KSB7CisgICAgICAgIGlmIChyZWdpb24t
PmlzSW5UaGlzUmVnaW9uKG9iamVjdCkpCisgICAgICAgICAgICByZXR1cm4gYmFzZUluZGV4ICsg
KG9iamVjdCAtIHJlZ2lvbi0+ZGF0YSgpKTsKKyAgICAgICAgYmFzZUluZGV4ICs9IFJlZ2lvbjo6
bnVtYmVyT2ZUaGluZ3NQZXJSZWdpb24oKTsKKyAgICB9CisgICAgQ1JBU0goKTsKKyAgICByZXR1
cm4gMDsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK0FsbG9jYXRvciogQWxsb2NhdG9yOjph
bGxvY2F0b3JPZihUKiBvYmplY3QpCit7CisgICAgcmV0dXJuIFJlZ2lvbjo6cmVnaW9uRm9yKG9i
amVjdCktPm1fYWxsb2NhdG9yOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorQUxXQVlTX0lO
TElORSB2b2lkKiBBbGxvY2F0b3I6OmJ1bXBBbGxvY2F0ZSgpCit7CisgICAgaWYgKHVuc2lnbmVk
IHJlbWFpbmluZyA9IG1fYnVtcFJlbWFpbmluZykgeworICAgICAgICByZW1haW5pbmctLTsKKyAg
ICAgICAgbV9idW1wUmVtYWluaW5nID0gcmVtYWluaW5nOworICAgICAgICByZXR1cm4gbV9idW1w
RW5kIC0gKHJlbWFpbmluZyArIDEpOworICAgIH0KKyAgICByZXR1cm4gMDsKK30KKwordGVtcGxh
dGU8dHlwZW5hbWUgVD4KK3ZvaWQqIEFsbG9jYXRvcjo6ZnJlZUxpc3RBbGxvY2F0ZSgpCit7Cisg
ICAgdm9pZCoqIHJlc3VsdCA9IG1fZnJlZUxpc3RIZWFkOworICAgIGlmIChVTkxJS0VMWSghcmVz
dWx0KSkKKyAgICAgICAgcmV0dXJuIGFsbG9jYXRlU2xvdygpOworICAgIG1fZnJlZUxpc3RIZWFk
ID0gYml0d2lzZV9jYXN0PHZvaWQqKj4oKnJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30K
KwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK3ZvaWQqIEFsbG9jYXRvcjo6YWxsb2NhdGVTbG93KCkK
K3sKKyAgICBBU1NFUlQoIW1fZnJlZUxpc3RIZWFkKTsKKyAgICBBU1NFUlQoIW1fYnVtcFJlbWFp
bmluZyk7CisgICAgCisgICAgUGFnZUFsbG9jYXRpb25BbGlnbmVkIGFsbG9jYXRpb24gPSBQYWdl
QWxsb2NhdGlvbkFsaWduZWQ6OmFsbG9jYXRlKFJlZ2lvbjo6c2l6ZSgpLCBSZWdpb246OnNpemUo
KSwgT1NBbGxvY2F0b3I6OkpTR0NIZWFwUGFnZXMpOworICAgIGlmICghc3RhdGljX2Nhc3Q8Ym9v
bD4oYWxsb2NhdGlvbikpCisgICAgICAgIENSQVNIKCk7CisgICAgUmVnaW9uKiByZWdpb24gPSBz
dGF0aWNfY2FzdDxSZWdpb24qPihhbGxvY2F0aW9uLmJhc2UoKSk7CisgICAgcmVnaW9uLT5tX2Fs
bG9jYXRpb24gPSBtX2FsbG9jYXRpb247CisgICAgcmVnaW9uLT5tX2FsbG9jdG9yID0gdGhpczsK
KyAgICBzdGFydEJ1bXBpbmdJbihyZWdpb24pOworICAgIHJlZ2lvbi0+bV9uZXh0ID0gbV9yZWdp
b25IZWFkOworICAgIG1fcmVnaW9uSGVhZCA9IHJlZ2lvbjsKKyAgICAKKyAgICB2b2lkKiByZXN1
bHQgPSBidW1wQWxsb2NhdGUoKTsKKyAgICBBU1NFUlQocmVzdWx0KTsKKyAgICByZXR1cm4gcmVz
dWx0OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgordm9pZCBBbGxvY2F0b3I6OmZyZWVSZWdp
b25zU3RhcnRpbmdBdChSZWdpb24qIHJlZ2lvbikKK3sKKyAgICB3aGlsZSAocmVnaW9uKSB7Cisg
ICAgICAgIFJlZ2lvbiogbmV4dFJlZ2lvbiA9IHJlZ2lvbi0+bV9uZXh0OworICAgICAgICByZWdp
b24tPm1fYWxsb2NhdGlvbi5kZWFsbG9jYXRlKCk7CisgICAgICAgIHJlZ2lvbiA9IG5leHRSZWdp
b247CisgICAgfQorfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgordm9pZCBBbGxvY2F0b3I6OnN0
YXJ0QnVtcGluZ0luKFJlZ2lvbiogcmVnaW9uKQoreworICAgIG1fYnVtcEVuZCA9IHJlZ2lvbi0+
ZGF0YSgpICsgUmVnaW9uOjpudW1iZXJPZlRoaW5nc1BlclJlZ2lvbigpOworICAgIG1fYnVtcFJl
bWFpbmluZyA9IFJlZ2lvbjo6bnVtYmVyT2ZUaGluZ3NQZXJSZWdpb24oKTsKK30KKworfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRp
ZiAvLyBERkdBbGxvY2F0b3JfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0FyZ3VtZW50c1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRzU2ltcGxpZmljYXRpb25QaGFzZS5jcHAJKHJl
dmlzaW9uIDE0MDkwNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRz
U2ltcGxpZmljYXRpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE0OSwxMSArMTQ5LDEwIEBA
IHB1YmxpYzoKICAgICAgICAgICAgIGlmICghYmxvY2spCiAgICAgICAgICAgICAgICAgY29udGlu
dWU7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGluZGV4SW5CbG9jayA9IDA7IGluZGV4SW5C
bG9jayA8IGJsb2NrLT5zaXplKCk7ICsraW5kZXhJbkJsb2NrKSB7Ci0gICAgICAgICAgICAgICAg
Tm9kZUluZGV4IG5vZGVJbmRleCA9IGJsb2NrLT5hdChpbmRleEluQmxvY2spOwotICAgICAgICAg
ICAgICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW25vZGVJbmRleF07Ci0gICAgICAgICAgICAgICAg
aWYgKCFub2RlLnNob3VsZEdlbmVyYXRlKCkpCisgICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9
IGJsb2NrLT5hdChpbmRleEluQmxvY2spOworICAgICAgICAgICAgICAgIGlmICghbm9kZS0+c2hv
dWxkR2VuZXJhdGUoKSkKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAg
ICAgICAgc3dpdGNoIChub2RlLm9wKCkpIHsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUt
Pm9wKCkpIHsKICAgICAgICAgICAgICAgICBjYXNlIENyZWF0ZUFyZ3VtZW50czogewogICAgICAg
ICAgICAgICAgICAgICAvLyBJZ25vcmUgdGhpcyBvcC4gSWYgd2Ugc2VlIGEgbG9uZSBDcmVhdGVB
cmd1bWVudHMgdGhlbiB3ZSB3YW50IHRvCiAgICAgICAgICAgICAgICAgICAgIC8vIGNvbXBsZXRl
bHkgaWdub3JlIGl0IGJlY2F1c2U6CkBAIC0xNzMsMTYgKzE3MiwxNiBAQCBwdWJsaWM6CiAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBjYXNl
IFNldExvY2FsOiB7Ci0gICAgICAgICAgICAgICAgICAgIE5vZGUmIHNvdXJjZSA9IG1fZ3JhcGhb
bm9kZS5jaGlsZDEoKV07Ci0gICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSog
dmFyaWFibGVBY2Nlc3NEYXRhID0gbm9kZS52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKKyAgICAgICAg
ICAgICAgICAgICAgTm9kZSogc291cmNlID0gbm9kZS0+Y2hpbGQxKCkubm9kZSgpOworICAgICAg
ICAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9IG5v
ZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOwogICAgICAgICAgICAgICAgICAgICBpbnQgYXJndW1l
bnRzUmVnaXN0ZXIgPQotICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC51bmNoZWNrZWRB
cmd1bWVudHNSZWdpc3RlckZvcihub2RlLmNvZGVPcmlnaW4pOwotICAgICAgICAgICAgICAgICAg
ICBpZiAoc291cmNlLm9wKCkgIT0gQ3JlYXRlQXJndW1lbnRzICYmIHNvdXJjZS5vcCgpICE9IFBo
YW50b21Bcmd1bWVudHMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgudW5jaGVj
a2VkQXJndW1lbnRzUmVnaXN0ZXJGb3Iobm9kZS0+Y29kZU9yaWdpbik7CisgICAgICAgICAgICAg
ICAgICAgIGlmIChzb3VyY2UtPm9wKCkgIT0gQ3JlYXRlQXJndW1lbnRzICYmIHNvdXJjZS0+b3Ao
KSAhPSBQaGFudG9tQXJndW1lbnRzKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBNYWtl
IHN1cmUgdGhhdCB0aGUgc291cmNlIG9mIHRoZSBTZXRMb2NhbCBrbm93cyB0aGF0IGlmIGl0J3MK
ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGEgdmFyaWFibGUgdGhhdCB3ZSB0aGluayBpcyBh
bGlhc2VkIHRvIHRoZSBhcmd1bWVudHMsIHRoZW4gaXQKICAgICAgICAgICAgICAgICAgICAgICAg
IC8vIG1heSBlc2NhcGUgYXQgdGhpcyBwb2ludC4gSW4gZnV0dXJlLCB3ZSBjb3VsZCB0cmFjayB0
cmFuc2l0aXZlCiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhbGlhc2luZy4gQnV0IG5vdCB5
ZXQuCi0gICAgICAgICAgICAgICAgICAgICAgICBvYnNlcnZlQmFkQXJndW1lbnRzVXNlKG5vZGUu
Y2hpbGQxKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZUJhZEFyZ3VtZW50c1Vz
ZShzb3VyY2UpOwogICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBJZiB0aGlzIGlzIGFuIGFzc2lnbm1lbnQgdG8gdGhlIGFyZ3VtZW50cyByZWdpc3Rl
ciwgdGhlbgogICAgICAgICAgICAgICAgICAgICAgICAgLy8gcHJldGVuZCBhcyBpZiB0aGUgYXJn
dW1lbnRzIHdlcmUgY3JlYXRlZC4gV2UgZG9uJ3Qgd2FudCB0bwpAQCAtMTk1LDE0ICsxOTQsMTQg
QEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICAgICAgLy8gaW5pdF9sYXp5X3JlZyBzaW5j
ZSBpdCB0cmVhdHMgQ3JlYXRlQXJndW1lbnRzIGFzIHJlYWRpbmcKICAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIGxvY2FsIHZhcmlhYmxlcy4gVGhhdCBjb3VsZCBiZSBmaXhlZCwgYnV0IGl0J3Mg
ZWFzaWVyIHRvCiAgICAgICAgICAgICAgICAgICAgICAgICAvLyB3b3JrIGFyb3VuZCB0aGlzIGhl
cmUuCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc291cmNlLm9wKCkgPT0gSlNDb25zdGFu
dAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmICFzb3VyY2UudmFsdWVPZkpTQ29uc3Rh
bnQoY29kZUJsb2NrKCkpKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNvdXJjZS0+b3Ao
KSA9PSBKU0NvbnN0YW50CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgIXNvdXJjZS0+
dmFsdWVPZkpTQ29uc3RhbnQoY29kZUJsb2NrKCkpKQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoYXJndW1lbnRzUmVnaXN0ZXIgIT0gSW52YWxpZFZpcnR1YWxSZWdpc3RlcgogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICYmICh2YXJpYWJsZUFjY2Vzc0RhdGEtPmxvY2FsKCkg
PT0gYXJndW1lbnRzUmVnaXN0ZXIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwg
dmFyaWFibGVBY2Nlc3NEYXRhLT5sb2NhbCgpID09IHVubW9kaWZpZWRBcmd1bWVudHNSZWdpc3Rl
cihhcmd1bWVudHNSZWdpc3RlcikpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9j
cmVhdGVzQXJndW1lbnRzLmFkZChub2RlLmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBtX2NyZWF0ZXNBcmd1bWVudHMuYWRkKG5vZGUtPmNv
ZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KIApAQCAtMjE0LDE5ICsyMTMsMTkgQEAg
cHVibGljOgogICAgICAgICAgICAgICAgICAgICAgICAgQXJndW1lbnRzQWxpYXNpbmdEYXRhJiBk
YXRhID0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2FyZ3VtZW50c0FsaWFzaW5nLmZp
bmQodmFyaWFibGVBY2Nlc3NEYXRhKS0+dmFsdWU7CiAgICAgICAgICAgICAgICAgICAgICAgICBk
YXRhLm1lcmdlTm9uQXJndW1lbnRzQXNzaWdubWVudCgpOwotICAgICAgICAgICAgICAgICAgICAg
ICAgZGF0YS5tZXJnZUNhbGxDb250ZXh0KG5vZGUuY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUp
OworICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5tZXJnZUNhbGxDb250ZXh0KG5vZGUtPmNv
ZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIGlmIChhcmd1bWVu
dHNSZWdpc3RlciAhPSBJbnZhbGlkVmlydHVhbFJlZ2lzdGVyCiAgICAgICAgICAgICAgICAgICAg
ICAgICAmJiAodmFyaWFibGVBY2Nlc3NEYXRhLT5sb2NhbCgpID09IGFyZ3VtZW50c1JlZ2lzdGVy
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgdmFyaWFibGVBY2Nlc3NEYXRhLT5sb2Nh
bCgpID09IHVubW9kaWZpZWRBcmd1bWVudHNSZWdpc3Rlcihhcmd1bWVudHNSZWdpc3RlcikpKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS5jb2RlT3JpZ2luLmlubGluZUNhbGxG
cmFtZSA9PSBzb3VyY2UuY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpCisgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAobm9kZS0+Y29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUgPT0gc291cmNl
LT5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fY3JlYXRlc0FyZ3VtZW50cy5hZGQo
c291cmNlLmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIG1fY3JlYXRlc0FyZ3VtZW50cy5hZGQoc291cmNlLT5jb2RlT3JpZ2luLmlubGluZUNhbGxG
cmFtZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgICAgICBpZiAodmFyaWFibGVBY2Nlc3NEYXRhLT5pc0NhcHR1
cmVkKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fY3JlYXRlc0FyZ3VtZW50cy5hZGQo
c291cmNlLmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIG1fY3JlYXRlc0FyZ3VtZW50cy5hZGQoc291cmNlLT5jb2RlT3JpZ2luLmlubGluZUNhbGxG
cmFtZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgICAgICBBcmd1bWVudHNBbGlhc2luZ0RhdGEmIGRhdGEgPQpA
QCAtMjM0LDI5ICsyMzMsMjkgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICBkYXRhLm1l
cmdlQXJndW1lbnRzQXNzaWdubWVudCgpOwogICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGVu
c3VyZXMgdGhhdCB0aGUgdmFyaWFibGUncyB1c2VzIGFyZSBpbiB0aGUgc2FtZSBjb250ZXh0IGFz
CiAgICAgICAgICAgICAgICAgICAgIC8vIHRoZSBhcmd1bWVudHMgaXQgaXMgYWxpYXNpbmcuCi0g
ICAgICAgICAgICAgICAgICAgIGRhdGEubWVyZ2VDYWxsQ29udGV4dChub2RlLmNvZGVPcmlnaW4u
aW5saW5lQ2FsbEZyYW1lKTsKLSAgICAgICAgICAgICAgICAgICAgZGF0YS5tZXJnZUNhbGxDb250
ZXh0KHNvdXJjZS5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSk7CisgICAgICAgICAgICAgICAg
ICAgIGRhdGEubWVyZ2VDYWxsQ29udGV4dChub2RlLT5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFt
ZSk7CisgICAgICAgICAgICAgICAgICAgIGRhdGEubWVyZ2VDYWxsQ29udGV4dChzb3VyY2UtPmNv
ZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBj
YXNlIEdldExvY2FsOgogICAgICAgICAgICAgICAgIGNhc2UgUGhpOiB7Ci0gICAgICAgICAgICAg
ICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhID0gbm9kZS52YXJp
YWJsZUFjY2Vzc0RhdGEoKTsKKyAgICAgICAgICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRh
KiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKICAgICAg
ICAgICAgICAgICAgICAgaWYgKHZhcmlhYmxlQWNjZXNzRGF0YS0+aXNDYXB0dXJlZCgpKQogICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIEFyZ3VtZW50
c0FsaWFzaW5nRGF0YSYgZGF0YSA9CiAgICAgICAgICAgICAgICAgICAgICAgICBtX2FyZ3VtZW50
c0FsaWFzaW5nLmZpbmQodmFyaWFibGVBY2Nlc3NEYXRhKS0+dmFsdWU7Ci0gICAgICAgICAgICAg
ICAgICAgIGRhdGEubWVyZ2VDYWxsQ29udGV4dChub2RlLmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZy
YW1lKTsKKyAgICAgICAgICAgICAgICAgICAgZGF0YS5tZXJnZUNhbGxDb250ZXh0KG5vZGUtPmNv
ZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBj
YXNlIEZsdXNoOiB7Ci0gICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFy
aWFibGVBY2Nlc3NEYXRhID0gbm9kZS52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKKyAgICAgICAgICAg
ICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBub2RlLT52
YXJpYWJsZUFjY2Vzc0RhdGEoKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKHZhcmlhYmxlQWNj
ZXNzRGF0YS0+aXNDYXB0dXJlZCgpKQogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICAgICAgICAgIEFyZ3VtZW50c0FsaWFzaW5nRGF0YSYgZGF0YSA9CiAgICAgICAg
ICAgICAgICAgICAgICAgICBtX2FyZ3VtZW50c0FsaWFzaW5nLmZpbmQodmFyaWFibGVBY2Nlc3NE
YXRhKS0+dmFsdWU7Ci0gICAgICAgICAgICAgICAgICAgIGRhdGEubWVyZ2VDYWxsQ29udGV4dChu
b2RlLmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgZGF0
YS5tZXJnZUNhbGxDb250ZXh0KG5vZGUtPmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKTsKICAg
ICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIC8vIElmIGEgdmFyaWFibGUg
aXMgdXNlZCBpbiBhIGZsdXNoIHRoZW4gYnkgZGVmaW5pdGlvbiBpdCBlc2NhcGVzLgogICAgICAg
ICAgICAgICAgICAgICBkYXRhLmVzY2FwZXMgPSB0cnVlOwpAQCAtMjY0LDE4ICsyNjMsMTggQEAg
cHVibGljOgogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAg
ICAgICAgICAgY2FzZSBTZXRBcmd1bWVudDogewotICAgICAgICAgICAgICAgICAgICBWYXJpYWJs
ZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9IG5vZGUudmFyaWFibGVBY2Nlc3NEYXRh
KCk7CisgICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nl
c3NEYXRhID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CiAgICAgICAgICAgICAgICAgICAg
IGlmICh2YXJpYWJsZUFjY2Vzc0RhdGEtPmlzQ2FwdHVyZWQoKSkKICAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICBBcmd1bWVudHNBbGlhc2luZ0RhdGEm
IGRhdGEgPQogICAgICAgICAgICAgICAgICAgICAgICAgbV9hcmd1bWVudHNBbGlhc2luZy5maW5k
KHZhcmlhYmxlQWNjZXNzRGF0YSktPnZhbHVlOwogICAgICAgICAgICAgICAgICAgICBkYXRhLm1l
cmdlTm9uQXJndW1lbnRzQXNzaWdubWVudCgpOwotICAgICAgICAgICAgICAgICAgICBkYXRhLm1l
cmdlQ2FsbENvbnRleHQobm9kZS5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSk7CisgICAgICAg
ICAgICAgICAgICAgIGRhdGEubWVyZ2VDYWxsQ29udGV4dChub2RlLT5jb2RlT3JpZ2luLmlubGlu
ZUNhbGxGcmFtZSk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgY2FzZSBHZXRCeVZhbDog
ewotICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS5hcnJheU1vZGUoKS50eXBlKCkgIT0gQXJy
YXk6OkFyZ3VtZW50cykgeworICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS0+YXJyYXlNb2Rl
KCkudHlwZSgpICE9IEFycmF5OjpBcmd1bWVudHMpIHsKICAgICAgICAgICAgICAgICAgICAgICAg
IG9ic2VydmVCYWRBcmd1bWVudHNVc2VzKG5vZGUpOwogICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIH0KQEAgLTI4MywxOCArMjgyLDE4IEBAIHB1Ymxp
YzoKICAgICAgICAgICAgICAgICAgICAgLy8gVGhhdCdzIHNvIGF3ZnVsIGFuZCBwcmV0dHkgbXVj
aCBpbXBvc3NpYmxlIHNpbmNlIGl0IHdvdWxkCiAgICAgICAgICAgICAgICAgICAgIC8vIGltcGx5
IHRoYXQgdGhlIGFyZ3VtZW50cyB3ZXJlIHByZWRpY3RlZCBpbnRlZ2VyLCBidXQgaXQncwogICAg
ICAgICAgICAgICAgICAgICAvLyBnb29kIHRvIGJlIGRlZmVuc2l2ZSBhbmQgdGhvcm91Z2guCi0g
ICAgICAgICAgICAgICAgICAgIG9ic2VydmVCYWRBcmd1bWVudHNVc2Uobm9kZS5jaGlsZDIoKSk7
Ci0gICAgICAgICAgICAgICAgICAgIG9ic2VydmVQcm9wZXJBcmd1bWVudHNVc2Uobm9kZSwgbm9k
ZS5jaGlsZDEoKSk7CisgICAgICAgICAgICAgICAgICAgIG9ic2VydmVCYWRBcmd1bWVudHNVc2Uo
bm9kZS0+Y2hpbGQyKCkubm9kZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZVByb3Bl
ckFyZ3VtZW50c1VzZShub2RlLCBub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAg
ICAgICAgICAgY2FzZSBHZXRBcnJheUxlbmd0aDogewotICAgICAgICAgICAgICAgICAgICBpZiAo
bm9kZS5hcnJheU1vZGUoKS50eXBlKCkgIT0gQXJyYXk6OkFyZ3VtZW50cykgeworICAgICAgICAg
ICAgICAgICAgICBpZiAobm9kZS0+YXJyYXlNb2RlKCkudHlwZSgpICE9IEFycmF5OjpBcmd1bWVu
dHMpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIG9ic2VydmVCYWRBcmd1bWVudHNVc2VzKG5v
ZGUpOwogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBvYnNlcnZl
UHJvcGVyQXJndW1lbnRzVXNlKG5vZGUsIG5vZGUuY2hpbGQxKCkpOworICAgICAgICAgICAgICAg
ICAgICBvYnNlcnZlUHJvcGVyQXJndW1lbnRzVXNlKG5vZGUsIG5vZGUtPmNoaWxkMSgpKTsKICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgICAgICAKQEAgLTMzNSwxNiArMzM0LDE1IEBAIHB1YmxpYzoKICAgICAgICAgICAgIGlmICgh
YmxvY2spCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGluZGV4SW5CbG9jayA9IDA7IGluZGV4SW5CbG9jayA8IGJsb2NrLT5zaXplKCk7ICsraW5k
ZXhJbkJsb2NrKSB7Ci0gICAgICAgICAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRleCA9IGJsb2Nr
LT5hdChpbmRleEluQmxvY2spOwotICAgICAgICAgICAgICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBo
W25vZGVJbmRleF07Ci0gICAgICAgICAgICAgICAgaWYgKCFub2RlLnNob3VsZEdlbmVyYXRlKCkp
CisgICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5hdChpbmRleEluQmxvY2spOwor
ICAgICAgICAgICAgICAgIGlmICghbm9kZS0+c2hvdWxkR2VuZXJhdGUoKSkKICAgICAgICAgICAg
ICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGUub3AoKSAhPSBTZXRM
b2NhbCkKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSAhPSBTZXRMb2NhbCkKICAgICAg
ICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgTm9kZSYgc291cmNlID0g
bV9ncmFwaFtub2RlLmNoaWxkMSgpXTsKLSAgICAgICAgICAgICAgICBpZiAoc291cmNlLm9wKCkg
IT0gQ3JlYXRlQXJndW1lbnRzKQorICAgICAgICAgICAgICAgIE5vZGUqIHNvdXJjZSA9IG5vZGUt
PmNoaWxkMSgpLm5vZGUoKTsKKyAgICAgICAgICAgICAgICBpZiAoc291cmNlLT5vcCgpICE9IENy
ZWF0ZUFyZ3VtZW50cykKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAg
ICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBub2RlLnZhcmlh
YmxlQWNjZXNzRGF0YSgpOworICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFy
aWFibGVBY2Nlc3NEYXRhID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CiAgICAgICAgICAg
ICAgICAgaWYgKHZhcmlhYmxlQWNjZXNzRGF0YS0+aXNDYXB0dXJlZCgpKSB7CiAgICAgICAgICAg
ICAgICAgICAgIC8vIFRoZSBjYXB0dXJlZCBjYXNlIHdvdWxkIGhhdmUgYWxyZWFkeSBiZWVuIHRh
a2VuIGNhcmUgb2YgaW4gdGhlCiAgICAgICAgICAgICAgICAgICAgIC8vIHByZXZpb3VzIHBhc3Mu
CkBAIC0zNTYsNyArMzU0LDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIGlmIChkYXRhLmlz
VmFsaWQoKSkKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAg
Ci0gICAgICAgICAgICAgICAgbV9jcmVhdGVzQXJndW1lbnRzLmFkZChzb3VyY2UuY29kZU9yaWdp
bi5pbmxpbmVDYWxsRnJhbWUpOworICAgICAgICAgICAgICAgIG1fY3JlYXRlc0FyZ3VtZW50cy5h
ZGQoc291cmNlLT5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSk7CiAgICAgICAgICAgICB9CiAg
ICAgICAgIH0KICAgICAgICAgCkBAIC00MTQsMjQgKzQxMiwyMyBAQCBwdWJsaWM6CiAgICAgICAg
ICAgICBpZiAoIWJsb2NrKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpbmRleEluQmxvY2sgPSAwOyBpbmRleEluQmxvY2sgPCBibG9jay0+c2l6
ZSgpOyArK2luZGV4SW5CbG9jaykgewotICAgICAgICAgICAgICAgIE5vZGVJbmRleCBub2RlSW5k
ZXggPSBibG9jay0+YXQoaW5kZXhJbkJsb2NrKTsKLSAgICAgICAgICAgICAgICBOb2RlJiBub2Rl
ID0gbV9ncmFwaFtub2RlSW5kZXhdOwotICAgICAgICAgICAgICAgIGlmICghbm9kZS5zaG91bGRH
ZW5lcmF0ZSgpKQorICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+YXQoaW5kZXhJ
bkJsb2NrKTsKKyAgICAgICAgICAgICAgICBpZiAoIW5vZGUtPnNob3VsZEdlbmVyYXRlKCkpCiAg
ICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIAotICAgICAgICAg
ICAgICAgIHN3aXRjaCAobm9kZS5vcCgpKSB7CisgICAgICAgICAgICAgICAgc3dpdGNoIChub2Rl
LT5vcCgpKSB7CiAgICAgICAgICAgICAgICAgY2FzZSBTZXRMb2NhbDogewotICAgICAgICAgICAg
ICAgICAgICBOb2RlJiBzb3VyY2UgPSBtX2dyYXBoW25vZGUuY2hpbGQxKCldOwotICAgICAgICAg
ICAgICAgICAgICBpZiAoc291cmNlLm9wKCkgIT0gQ3JlYXRlQXJndW1lbnRzKQorICAgICAgICAg
ICAgICAgICAgICBOb2RlKiBzb3VyY2UgPSBub2RlLT5jaGlsZDEoKS5ub2RlKCk7CisgICAgICAg
ICAgICAgICAgICAgIGlmIChzb3VyY2UtPm9wKCkgIT0gQ3JlYXRlQXJndW1lbnRzKQogICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAg
ICAgICAgICAgICBpZiAobV9jcmVhdGVzQXJndW1lbnRzLmNvbnRhaW5zKHNvdXJjZS5jb2RlT3Jp
Z2luLmlubGluZUNhbGxGcmFtZSkpCisgICAgICAgICAgICAgICAgICAgIGlmIChtX2NyZWF0ZXNB
cmd1bWVudHMuY29udGFpbnMoc291cmNlLT5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSkpCiAg
ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgCi0gICAg
ICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhID0g
bm9kZS52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKKyAgICAgICAgICAgICAgICAgICAgVmFyaWFibGVB
Y2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEo
KTsKICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIGlmIChtX2dyYXBo
LmFyZ3VtZW50c1JlZ2lzdGVyRm9yKG5vZGUuY29kZU9yaWdpbikgPT0gdmFyaWFibGVBY2Nlc3NE
YXRhLT5sb2NhbCgpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICB8fCB1bm1vZGlmaWVkQXJn
dW1lbnRzUmVnaXN0ZXIobV9ncmFwaC5hcmd1bWVudHNSZWdpc3RlckZvcihub2RlLmNvZGVPcmln
aW4pKSA9PSB2YXJpYWJsZUFjY2Vzc0RhdGEtPmxvY2FsKCkpCisgICAgICAgICAgICAgICAgICAg
IGlmIChtX2dyYXBoLmFyZ3VtZW50c1JlZ2lzdGVyRm9yKG5vZGUtPmNvZGVPcmlnaW4pID09IHZh
cmlhYmxlQWNjZXNzRGF0YS0+bG9jYWwoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwg
dW5tb2RpZmllZEFyZ3VtZW50c1JlZ2lzdGVyKG1fZ3JhcGguYXJndW1lbnRzUmVnaXN0ZXJGb3Io
bm9kZS0+Y29kZU9yaWdpbikpID09IHZhcmlhYmxlQWNjZXNzRGF0YS0+bG9jYWwoKSkKICAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgICAgICAgICAgICAgIEFTU0VSVCgh
dmFyaWFibGVBY2Nlc3NEYXRhLT5pc0NhcHR1cmVkKCkpOwpAQCAtNDY5LDE2ICs0NjYsMTYgQEAg
cHVibGljOgogICAgICAgICAgICAgICAgIGNhc2UgRm9yd2FyZFN0cnVjdHVyZVRyYW5zaXRpb25X
YXRjaHBvaW50OgogICAgICAgICAgICAgICAgIGNhc2UgQ2hlY2tBcnJheTogewogICAgICAgICAg
ICAgICAgICAgICAvLyBXZSBjYW4ganVzdCBnZXQgcmlkIG9mIHRoaXMgbm9kZSwgaWYgaXQgcmVm
ZXJlbmNlcyBhIHBoYW50b20gYXJndW1lbnQuCi0gICAgICAgICAgICAgICAgICAgIGlmICghaXNP
S1RvT3B0aW1pemUobV9ncmFwaFtub2RlLmNoaWxkMSgpXSkpCisgICAgICAgICAgICAgICAgICAg
IGlmICghaXNPS1RvT3B0aW1pemUobm9kZS0+Y2hpbGQxKCkubm9kZSgpKSkKICAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLmRlcmVmKG5v
ZGUuY2hpbGQxKCkpOwotICAgICAgICAgICAgICAgICAgICBub2RlLnNldE9wQW5kRGVmYXVsdEZs
YWdzKFBoYW50b20pOwotICAgICAgICAgICAgICAgICAgICBub2RlLmNoaWxkcmVuLnNldENoaWxk
MShFZGdlKCkpOworICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLmRlcmVmKG5vZGUtPmNoaWxk
MSgpKTsKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+c2V0T3BBbmREZWZhdWx0RmxhZ3MoUGhh
bnRvbSk7CisgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkcmVuLnNldENoaWxkMShFZGdl
KCkpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGNhc2UgR2V0QnlWYWw6IHsKLSAgICAg
ICAgICAgICAgICAgICAgaWYgKG5vZGUuYXJyYXlNb2RlKCkudHlwZSgpICE9IEFycmF5OjpBcmd1
bWVudHMpCisgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS50eXBlKCkg
IT0gQXJyYXk6OkFyZ3VtZW50cykKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogCiAg
ICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgY2FuIGJlIHNpbXBsaWZpZWQgdG8gR2V0TXlBcmd1
bWVudEJ5VmFsIGlmIHdlIGtub3cgdGhhdApAQCAtNDg4LDI4ICs0ODUsMjggQEAgcHVibGljOgog
ICAgICAgICAgICAgICAgICAgICAvLyAyKSBJdHMgZmlyc3QgY2hpbGQgaXMgQ3JlYXRlQXJndW1l
bnRzIGFuZCBpdHMgSW5saW5lQ2FsbEZyYW1lKgogICAgICAgICAgICAgICAgICAgICAvLyAgICBp
cyBub3QgbWFya2VkIGFzIGNyZWF0aW5nIGFyZ3VtZW50cy4KICAgICAgICAgICAgICAgICAgICAg
Ci0gICAgICAgICAgICAgICAgICAgIGlmICghaXNPS1RvT3B0aW1pemUobV9ncmFwaFtub2RlLmNo
aWxkMSgpXSkpCisgICAgICAgICAgICAgICAgICAgIGlmICghaXNPS1RvT3B0aW1pemUobm9kZS0+
Y2hpbGQxKCkubm9kZSgpKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5kZXJlZihub2RlLmNo
aWxkMSgpKTsKLSAgICAgICAgICAgICAgICAgICAgbm9kZS5jaGlsZHJlbi5jaGlsZDEoKSA9IG5v
ZGUuY2hpbGRyZW4uY2hpbGQyKCk7Ci0gICAgICAgICAgICAgICAgICAgIG5vZGUuY2hpbGRyZW4u
Y2hpbGQyKCkgPSBFZGdlKCk7Ci0gICAgICAgICAgICAgICAgICAgIG5vZGUuc2V0T3BBbmREZWZh
dWx0RmxhZ3MoR2V0TXlBcmd1bWVudEJ5VmFsKTsKKyAgICAgICAgICAgICAgICAgICAgbV9ncmFw
aC5kZXJlZihub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxk
cmVuLmNoaWxkMSgpID0gbm9kZS0+Y2hpbGRyZW4uY2hpbGQyKCk7CisgICAgICAgICAgICAgICAg
ICAgIG5vZGUtPmNoaWxkcmVuLmNoaWxkMigpID0gRWRnZSgpOworICAgICAgICAgICAgICAgICAg
ICBub2RlLT5zZXRPcEFuZERlZmF1bHRGbGFncyhHZXRNeUFyZ3VtZW50QnlWYWwpOwogICAgICAg
ICAgICAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgLS1pbmRl
eEluQmxvY2s7IC8vIEZvcmNlIHJlY29uc2lkZXJhdGlvbiBvZiB0aGlzIG9wIG5vdyB0aGF0IGl0
J3MgYSBHZXRNeUFyZ3VtZW50QnlWYWwuCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgY2Fz
ZSBHZXRBcnJheUxlbmd0aDogewotICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS5hcnJheU1v
ZGUoKS50eXBlKCkgIT0gQXJyYXk6OkFyZ3VtZW50cykKKyAgICAgICAgICAgICAgICAgICAgaWYg
KG5vZGUtPmFycmF5TW9kZSgpLnR5cGUoKSAhPSBBcnJheTo6QXJndW1lbnRzKQogICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAg
ICAgICAgICBpZiAoIWlzT0tUb09wdGltaXplKG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0pKQorICAg
ICAgICAgICAgICAgICAgICBpZiAoIWlzT0tUb09wdGltaXplKG5vZGUtPmNoaWxkMSgpLm5vZGUo
KSkpCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAg
Ci0gICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguZGVyZWYobm9kZS5jaGlsZDEoKSk7Ci0gICAg
ICAgICAgICAgICAgICAgIG5vZGUuY2hpbGRyZW4uY2hpbGQxKCkgPSBFZGdlKCk7Ci0gICAgICAg
ICAgICAgICAgICAgIG5vZGUuc2V0T3BBbmREZWZhdWx0RmxhZ3MoR2V0TXlBcmd1bWVudHNMZW5n
dGgpOworICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLmRlcmVmKG5vZGUtPmNoaWxkMSgpKTsK
KyAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGRyZW4uY2hpbGQxKCkgPSBFZGdlKCk7Cisg
ICAgICAgICAgICAgICAgICAgIG5vZGUtPnNldE9wQW5kRGVmYXVsdEZsYWdzKEdldE15QXJndW1l
bnRzTGVuZ3RoKTsKICAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCA9IHRydWU7CiAgICAgICAg
ICAgICAgICAgICAgIC0taW5kZXhJbkJsb2NrOyAvLyBGb3JjZSByZWNvbnNpZGVyYXRpb24gb2Yg
dGhpcyBvcCBub2V3IHRoYXQgaXQncyBhIEdldE15QXJndW1lbnRzTGVuZ3RoLgogICAgICAgICAg
ICAgICAgICAgICBicmVhazsKQEAgLTUxNywxNiArNTE0LDE2IEBAIHB1YmxpYzoKICAgICAgICAg
ICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgY2FzZSBHZXRNeUFyZ3VtZW50c0xlbmd0aDoK
ICAgICAgICAgICAgICAgICBjYXNlIEdldE15QXJndW1lbnRzTGVuZ3RoU2FmZTogewotICAgICAg
ICAgICAgICAgICAgICBpZiAobV9jcmVhdGVzQXJndW1lbnRzLmNvbnRhaW5zKG5vZGUuY29kZU9y
aWdpbi5pbmxpbmVDYWxsRnJhbWUpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQo
bm9kZS5vcCgpID09IEdldE15QXJndW1lbnRzTGVuZ3RoU2FmZSk7CisgICAgICAgICAgICAgICAg
ICAgIGlmIChtX2NyZWF0ZXNBcmd1bWVudHMuY29udGFpbnMobm9kZS0+Y29kZU9yaWdpbi5pbmxp
bmVDYWxsRnJhbWUpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQobm9kZS0+b3Ao
KSA9PSBHZXRNeUFyZ3VtZW50c0xlbmd0aFNhZmUpOwogICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgaWYgKG5v
ZGUub3AoKSA9PSBHZXRNeUFyZ3VtZW50c0xlbmd0aFNhZmUpIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIG5vZGUuc2V0T3AoR2V0TXlBcmd1bWVudHNMZW5ndGgpOworICAgICAgICAgICAgICAg
ICAgICBpZiAobm9kZS0+b3AoKSA9PSBHZXRNeUFyZ3VtZW50c0xlbmd0aFNhZmUpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIG5vZGUtPnNldE9wKEdldE15QXJndW1lbnRzTGVuZ3RoKTsKICAg
ICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBDb2RlT3JpZ2lu
IGNvZGVPcmlnaW4gPSBub2RlLmNvZGVPcmlnaW47CisgICAgICAgICAgICAgICAgICAgIENvZGVP
cmlnaW4gY29kZU9yaWdpbiA9IG5vZGUtPmNvZGVPcmlnaW47CiAgICAgICAgICAgICAgICAgICAg
IGlmICghY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpCiAgICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgCkBAIC01MzcsMzIgKzUzNCwzMiBAQCBwdWJs
aWM6CiAgICAgICAgICAgICAgICAgICAgICAgICBDaGVja0FyZ3VtZW50c05vdENyZWF0ZWQsIGNv
ZGVPcmlnaW4pOwogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgbV9n
cmFwaC5jb252ZXJ0VG9Db25zdGFudCgKLSAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVJbmRl
eCwganNOdW1iZXIoY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50cy5zaXplKCkg
LSAxKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBub2RlLCBqc051bWJlcihjb2RlT3JpZ2lu
LmlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzLnNpemUoKSAtIDEpKTsKICAgICAgICAgICAgICAg
ICAgICAgY2hhbmdlZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgY2FzZSBH
ZXRNeUFyZ3VtZW50QnlWYWw6CiAgICAgICAgICAgICAgICAgY2FzZSBHZXRNeUFyZ3VtZW50QnlW
YWxTYWZlOiB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChtX2NyZWF0ZXNBcmd1bWVudHMuY29u
dGFpbnMobm9kZS5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSkpIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIEFTU0VSVChub2RlLm9wKCkgPT0gR2V0TXlBcmd1bWVudEJ5VmFsU2FmZSk7Cisg
ICAgICAgICAgICAgICAgICAgIGlmIChtX2NyZWF0ZXNBcmd1bWVudHMuY29udGFpbnMobm9kZS0+
Y29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBB
U1NFUlQobm9kZS0+b3AoKSA9PSBHZXRNeUFyZ3VtZW50QnlWYWxTYWZlKTsKICAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgICAgIGlmIChub2RlLm9wKCkgPT0gR2V0TXlBcmd1bWVudEJ5VmFsU2FmZSkgewotICAgICAg
ICAgICAgICAgICAgICAgICAgbm9kZS5zZXRPcChHZXRNeUFyZ3VtZW50QnlWYWwpOworICAgICAg
ICAgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBHZXRNeUFyZ3VtZW50QnlWYWxTYWZlKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5zZXRPcChHZXRNeUFyZ3VtZW50QnlWYWwp
OwogICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCA9IHRydWU7CiAgICAgICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgaWYgKCFub2RlLmNvZGVPcmlnaW4uaW5saW5l
Q2FsbEZyYW1lKQorICAgICAgICAgICAgICAgICAgICBpZiAoIW5vZGUtPmNvZGVPcmlnaW4uaW5s
aW5lQ2FsbEZyYW1lKQogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAgICAgICAgIGlmICghbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5oYXNDb25zdGFudCgpKQorICAg
ICAgICAgICAgICAgICAgICBpZiAoIW5vZGUtPmNoaWxkMSgpLT5oYXNDb25zdGFudCgpKQogICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIEpTVmFsdWUg
dmFsdWUgPSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLnZhbHVlT2ZKU0NvbnN0YW50KGNvZGVCbG9j
aygpKTsKKyAgICAgICAgICAgICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IG5vZGUtPmNoaWxkMSgp
LT52YWx1ZU9mSlNDb25zdGFudChjb2RlQmxvY2soKSk7CiAgICAgICAgICAgICAgICAgICAgIGlm
ICghdmFsdWUuaXNJbnQzMigpKQogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICAgICAgICAgIGludDMyX3QgaW5kZXggPSB2YWx1ZS5hc0ludDMyKCk7CiAgICAgICAg
ICAgICAgICAgICAgIGlmIChpbmRleCA8IDAKICAgICAgICAgICAgICAgICAgICAgICAgIHx8IHN0
YXRpY19jYXN0PHNpemVfdD4oaW5kZXggKyAxKSA+PQotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG5vZGUuY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50cy5zaXplKCkpCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y29kZU9yaWdpbi5pbmxpbmVDYWxsRnJh
bWUtPmFyZ3VtZW50cy5zaXplKCkpCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIC8vIFdlIGtub3cgd2hpY2gg
YXJndW1lbnQgdGhpcyBpcyBhY2Nlc3NpbmcuIEJ1dCBvbmx5IGFmdGVyIHdlIGhhdmUgY2hlY2tl
ZApAQCAtNTc0LDEzICs1NzEsMTMgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICAvLyBo
YXMgcnVuIC0gdGhlcmVmb3JlIGl0IG1ha2VzIGxpdHRsZSBzZW5zZSB0byBsaW5rIHRoZSBHZXRM
b2NhbCBvcGVyYXRpb24KICAgICAgICAgICAgICAgICAgICAgLy8gaW50byB0aGUgVmFyaWFibGVB
Y2Nlc3NEYXRhIGFuZCBQaGkgZ3JhcGhzLgogCi0gICAgICAgICAgICAgICAgICAgIENvZGVPcmln
aW4gY29kZU9yaWdpbiA9IG5vZGUuY29kZU9yaWdpbjsKLSAgICAgICAgICAgICAgICAgICAgQWRq
YWNlbmN5TGlzdCBjaGlsZHJlbiA9IG5vZGUuY2hpbGRyZW47CisgICAgICAgICAgICAgICAgICAg
IENvZGVPcmlnaW4gY29kZU9yaWdpbiA9IG5vZGUtPmNvZGVPcmlnaW47CisgICAgICAgICAgICAg
ICAgICAgIEFkamFjZW5jeUxpc3QgY2hpbGRyZW4gPSBub2RlLT5jaGlsZHJlbjsKICAgICAgICAg
ICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIG5vZGUuY29udmVydFRvR2V0TG9jYWxV
bmxpbmtlZCgKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y29udmVydFRvR2V0TG9jYWxVbmxp
bmtlZCgKICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rl
cj4oCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS5jb2RlT3JpZ2luLmlubGluZUNh
bGxGcmFtZS0+c3RhY2tPZmZzZXQgKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3Jh
cGguYmFzZWxpbmVDb2RlQmxvY2tGb3Iobm9kZS5jb2RlT3JpZ2luKS0+YXJndW1lbnRJbmRleEFm
dGVyQ2FwdHVyZShpbmRleCkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5j
b2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG1fZ3JhcGguYmFzZWxpbmVDb2RlQmxvY2tGb3Iobm9kZS0+Y29kZU9yaWdp
biktPmFyZ3VtZW50SW5kZXhBZnRlckNhcHR1cmUoaW5kZXgpKSk7CiAKICAgICAgICAgICAgICAg
ICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCiAgICAgICAgICAgICAgICAgICAgICAgICBp
bmRleEluQmxvY2ssIERvbnRSZWZDaGlsZHJlbiwgRG9udFJlZk5vZGUsIFNwZWNOb25lLCBDaGVj
a0FyZ3VtZW50c05vdENyZWF0ZWQsCkBAIC01OTQsMTMgKzU5MSwxMyBAQCBwdWJsaWM6CiAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBjYXNl
IFRlYXJPZmZBcmd1bWVudHM6IHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG1fY3JlYXRlc0Fy
Z3VtZW50cy5jb250YWlucyhub2RlLmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKSkKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKG1fY3JlYXRlc0FyZ3VtZW50cy5jb250YWlucyhub2RlLT5jb2Rl
T3JpZ2luLmlubGluZUNhbGxGcmFtZSkpCiAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51
ZTsKICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIG5vZGUuc2V0T3BB
bmREZWZhdWx0RmxhZ3MoTm9wKTsKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+c2V0T3BBbmRE
ZWZhdWx0RmxhZ3MoTm9wKTsKICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5jbGVhckFuZERl
cmVmQ2hpbGQxKG5vZGUpOwogICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLmNsZWFyQW5kRGVy
ZWZDaGlsZDIobm9kZSk7Ci0gICAgICAgICAgICAgICAgICAgIG5vZGUuc2V0UmVmQ291bnQoMCk7
CisgICAgICAgICAgICAgICAgICAgIG5vZGUtPnNldFJlZkNvdW50KDApOwogICAgICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIApA
QCAtNjE2LDI1ICs2MTMsMjMgQEAgcHVibGljOgogICAgICAgICAgICAgaWYgKCFibG9jaykKICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW5kZXhJ
bkJsb2NrID0gMDsgaW5kZXhJbkJsb2NrIDwgYmxvY2stPnNpemUoKTsgKytpbmRleEluQmxvY2sp
IHsKLSAgICAgICAgICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4ID0gYmxvY2stPmF0KGluZGV4
SW5CbG9jayk7Ci0gICAgICAgICAgICAgICAgTm9kZSogbm9kZVB0ciA9ICZtX2dyYXBoW25vZGVJ
bmRleF07Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGVQdHItPm9wKCkgIT0gQ3JlYXRlQXJndW1l
bnRzKQorICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+YXQoaW5kZXhJbkJsb2Nr
KTsKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSAhPSBDcmVhdGVBcmd1bWVudHMpCiAg
ICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIC8vIElmIHRoaXMg
aXMgYSBDcmVhdGVBcmd1bWVudHMgZm9yIGFuIElubGluZUNhbGxGcmFtZSogdGhhdCBkb2VzCiAg
ICAgICAgICAgICAgICAgLy8gbm90IGNyZWF0ZSBhcmd1bWVudHMsIHRoZW4gcmVwbGFjZSBpdCB3
aXRoIGEgUGhhbnRvbUFyZ3VtZW50cy4KICAgICAgICAgICAgICAgICAvLyBQaGFudG9tQXJndW1l
bnRzIGlzIGEgbm9uLWV4ZWN1dGluZyBub2RlIHRoYXQganVzdCBpbmRpY2F0ZXMKICAgICAgICAg
ICAgICAgICAvLyB0aGF0IHRoZSBub2RlIHNob3VsZCBiZSByZWlmaWVkIGFzIGFuIGFyZ3VtZW50
cyBvYmplY3Qgb24gT1NSCiAgICAgICAgICAgICAgICAgLy8gZXhpdC4KLSAgICAgICAgICAgICAg
ICBpZiAobV9jcmVhdGVzQXJndW1lbnRzLmNvbnRhaW5zKG5vZGVQdHItPmNvZGVPcmlnaW4uaW5s
aW5lQ2FsbEZyYW1lKSkKKyAgICAgICAgICAgICAgICBpZiAobV9jcmVhdGVzQXJndW1lbnRzLmNv
bnRhaW5zKG5vZGUtPmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKSkKICAgICAgICAgICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGVQdHItPnNob3VsZEdlbmVy
YXRlKCkpIHsKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+c2hvdWxkR2VuZXJhdGUoKSkgewog
ICAgICAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKICAgICAgICAgICAg
ICAgICAgICAgICAgIGluZGV4SW5CbG9jaywgRG9udFJlZkNoaWxkcmVuLCBEb250UmVmTm9kZSwg
U3BlY05vbmUsIFBoYW50b20sCi0gICAgICAgICAgICAgICAgICAgICAgICBub2RlUHRyLT5jb2Rl
T3JpZ2luLCBub2RlUHRyLT5jaGlsZHJlbik7Ci0gICAgICAgICAgICAgICAgICAgIG5vZGVQdHIg
PSAmbV9ncmFwaFtub2RlSW5kZXhdOworICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y29k
ZU9yaWdpbiwgbm9kZS0+Y2hpbGRyZW4pOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICBub2RlUHRyLT5zZXRPcEFuZERlZmF1bHRGbGFncyhQaGFudG9tQXJndW1lbnRzKTsKLSAg
ICAgICAgICAgICAgICBub2RlUHRyLT5jaGlsZHJlbi5yZXNldCgpOworICAgICAgICAgICAgICAg
IG5vZGUtPnNldE9wQW5kRGVmYXVsdEZsYWdzKFBoYW50b21Bcmd1bWVudHMpOworICAgICAgICAg
ICAgICAgIG5vZGUtPmNoaWxkcmVuLnJlc2V0KCk7CiAgICAgICAgICAgICAgICAgY2hhbmdlZCA9
IHRydWU7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpbnNlcnRpb25TZXQuZXhlY3V0ZShi
bG9jayk7CkBAIC02NTQsMjggKzY0OSwyNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgRGVmYXVs
dEhhc2g8VmFyaWFibGVBY2Nlc3NEYXRhKj46Okhhc2gsCiAgICAgICAgICAgICBOdWxsYWJsZUhh
c2hUcmFpdHM8VmFyaWFibGVBY2Nlc3NEYXRhKj4gPiBtX2FyZ3VtZW50c0FsaWFzaW5nOwogCi0g
ICAgdm9pZCBvYnNlcnZlQmFkQXJndW1lbnRzVXNlKEVkZ2UgZWRnZSkKKyAgICB2b2lkIG9ic2Vy
dmVCYWRBcmd1bWVudHNVc2UoTm9kZSogbm9kZSkKICAgICB7Ci0gICAgICAgIGlmICghZWRnZSkK
KyAgICAgICAgaWYgKCFub2RlKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAKLSAgICAg
ICAgTm9kZSYgY2hpbGQgPSBtX2dyYXBoW2VkZ2VdOwotICAgICAgICBzd2l0Y2ggKGNoaWxkLm9w
KCkpIHsKKyAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CiAgICAgICAgIGNhc2UgQ3JlYXRl
QXJndW1lbnRzOiB7Ci0gICAgICAgICAgICBtX2NyZWF0ZXNBcmd1bWVudHMuYWRkKGNoaWxkLmNv
ZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKTsKKyAgICAgICAgICAgIG1fY3JlYXRlc0FyZ3VtZW50
cy5hZGQobm9kZS0+Y29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBjYXNlIEdldExvY2FsOiB7Ci0g
ICAgICAgICAgICBpbnQgYXJndW1lbnRzUmVnaXN0ZXIgPSBtX2dyYXBoLnVuY2hlY2tlZEFyZ3Vt
ZW50c1JlZ2lzdGVyRm9yKGNoaWxkLmNvZGVPcmlnaW4pOworICAgICAgICAgICAgaW50IGFyZ3Vt
ZW50c1JlZ2lzdGVyID0gbV9ncmFwaC51bmNoZWNrZWRBcmd1bWVudHNSZWdpc3RlckZvcihub2Rl
LT5jb2RlT3JpZ2luKTsKICAgICAgICAgICAgIGlmIChhcmd1bWVudHNSZWdpc3RlciAhPSBJbnZh
bGlkVmlydHVhbFJlZ2lzdGVyCi0gICAgICAgICAgICAgICAgJiYgKGNoaWxkLmxvY2FsKCkgPT0g
YXJndW1lbnRzUmVnaXN0ZXIKLSAgICAgICAgICAgICAgICAgICAgfHwgY2hpbGQubG9jYWwoKSA9
PSB1bm1vZGlmaWVkQXJndW1lbnRzUmVnaXN0ZXIoYXJndW1lbnRzUmVnaXN0ZXIpKSkgewotICAg
ICAgICAgICAgICAgIG1fY3JlYXRlc0FyZ3VtZW50cy5hZGQoY2hpbGQuY29kZU9yaWdpbi5pbmxp
bmVDYWxsRnJhbWUpOworICAgICAgICAgICAgICAgICYmIChub2RlLT5sb2NhbCgpID09IGFyZ3Vt
ZW50c1JlZ2lzdGVyCisgICAgICAgICAgICAgICAgICAgIHx8IG5vZGUtPmxvY2FsKCkgPT0gdW5t
b2RpZmllZEFyZ3VtZW50c1JlZ2lzdGVyKGFyZ3VtZW50c1JlZ2lzdGVyKSkpIHsKKyAgICAgICAg
ICAgICAgICBtX2NyZWF0ZXNBcmd1bWVudHMuYWRkKG5vZGUtPmNvZGVPcmlnaW4uaW5saW5lQ2Fs
bEZyYW1lKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIAotICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEg
PSBjaGlsZC52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKKyAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNz
RGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CiAg
ICAgICAgICAgICBpZiAodmFyaWFibGVBY2Nlc3NEYXRhLT5pc0NhcHR1cmVkKCkpCiAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKQEAgLTY4OSwxNiArNjgzLDE1IEBAIHByaXZh
dGU6CiAgICAgICAgIH0KICAgICB9CiAgICAgCi0gICAgdm9pZCBvYnNlcnZlQmFkQXJndW1lbnRz
VXNlcyhOb2RlJiBub2RlKQorICAgIHZvaWQgb2JzZXJ2ZUJhZEFyZ3VtZW50c1VzZXMoTm9kZSog
bm9kZSkKICAgICB7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1fZ3JhcGgubnVtQ2hpbGRy
ZW4obm9kZSk7IGktLTspCi0gICAgICAgICAgICBvYnNlcnZlQmFkQXJndW1lbnRzVXNlKG1fZ3Jh
cGguY2hpbGQobm9kZSwgaSkpOworICAgICAgICAgICAgb2JzZXJ2ZUJhZEFyZ3VtZW50c1VzZSht
X2dyYXBoLmNoaWxkKG5vZGUsIGkpLm5vZGUoKSk7CiAgICAgfQogICAgIAotICAgIHZvaWQgb2Jz
ZXJ2ZVByb3BlckFyZ3VtZW50c1VzZShOb2RlJiBub2RlLCBFZGdlIGVkZ2UpCisgICAgdm9pZCBv
YnNlcnZlUHJvcGVyQXJndW1lbnRzVXNlKE5vZGUqIG5vZGUsIEVkZ2UgZWRnZSkKICAgICB7Ci0g
ICAgICAgIE5vZGUmIGNoaWxkID0gbV9ncmFwaFtlZGdlXTsKLSAgICAgICAgaWYgKGNoaWxkLm9w
KCkgIT0gR2V0TG9jYWwpIHsKKyAgICAgICAgaWYgKGVkZ2UtPm9wKCkgIT0gR2V0TG9jYWwpIHsK
ICAgICAgICAgICAgIC8vIFdoZW4gY2FuIHRoaXMgaGFwcGVuPyBBdCBsZWFzdCB0d28gY2FzZXMg
dGhhdCBJIGNhbiB0aGluawogICAgICAgICAgICAgLy8gb2Y6CiAgICAgICAgICAgICAvLwpAQCAt
NzEwLDE4ICs3MDMsMTggQEAgcHJpdmF0ZToKICAgICAgICAgICAgIC8vCiAgICAgICAgICAgICAv
LyAyKSBJZiB3ZSdyZSBhY2Nlc3NpbmcgYXJndW1lbnRzIHdlIGdvdCBmcm9tIHRoZSBoZWFwIQog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKGNoaWxkLm9wKCkg
PT0gQ3JlYXRlQXJndW1lbnRzCi0gICAgICAgICAgICAgICAgJiYgbm9kZS5jb2RlT3JpZ2luLmlu
bGluZUNhbGxGcmFtZQotICAgICAgICAgICAgICAgICAgICE9IGNoaWxkLmNvZGVPcmlnaW4uaW5s
aW5lQ2FsbEZyYW1lKQotICAgICAgICAgICAgICAgIG1fY3JlYXRlc0FyZ3VtZW50cy5hZGQoY2hp
bGQuY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpOworICAgICAgICAgICAgaWYgKGVkZ2UtPm9w
KCkgPT0gQ3JlYXRlQXJndW1lbnRzCisgICAgICAgICAgICAgICAgJiYgbm9kZS0+Y29kZU9yaWdp
bi5pbmxpbmVDYWxsRnJhbWUKKyAgICAgICAgICAgICAgICAgICAhPSBlZGdlLT5jb2RlT3JpZ2lu
LmlubGluZUNhbGxGcmFtZSkKKyAgICAgICAgICAgICAgICBtX2NyZWF0ZXNBcmd1bWVudHMuYWRk
KGVkZ2UtPmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKTsKICAgICAgICAgICAgIAogICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAg
ICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBjaGlsZC52YXJpYWJs
ZUFjY2Vzc0RhdGEoKTsKLSAgICAgICAgaWYgKGNoaWxkLmxvY2FsKCkgPT0gbV9ncmFwaC51bmNo
ZWNrZWRBcmd1bWVudHNSZWdpc3RlckZvcihjaGlsZC5jb2RlT3JpZ2luKQotICAgICAgICAgICAg
JiYgbm9kZS5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSAhPSBjaGlsZC5jb2RlT3JpZ2luLmlu
bGluZUNhbGxGcmFtZSkgewotICAgICAgICAgICAgbV9jcmVhdGVzQXJndW1lbnRzLmFkZChjaGls
ZC5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSk7CisgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0
YSogdmFyaWFibGVBY2Nlc3NEYXRhID0gZWRnZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CisgICAg
ICAgIGlmIChlZGdlLT5sb2NhbCgpID09IG1fZ3JhcGgudW5jaGVja2VkQXJndW1lbnRzUmVnaXN0
ZXJGb3IoZWRnZS0+Y29kZU9yaWdpbikKKyAgICAgICAgICAgICYmIG5vZGUtPmNvZGVPcmlnaW4u
aW5saW5lQ2FsbEZyYW1lICE9IGVkZ2UtPmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKSB7Cisg
ICAgICAgICAgICBtX2NyZWF0ZXNBcmd1bWVudHMuYWRkKGVkZ2UtPmNvZGVPcmlnaW4uaW5saW5l
Q2FsbEZyYW1lKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCkBAIC03MjksMTgg
KzcyMiwxOCBAQCBwcml2YXRlOgogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAKICAgICAg
ICAgQXJndW1lbnRzQWxpYXNpbmdEYXRhJiBkYXRhID0gbV9hcmd1bWVudHNBbGlhc2luZy5maW5k
KHZhcmlhYmxlQWNjZXNzRGF0YSktPnZhbHVlOwotICAgICAgICBkYXRhLm1lcmdlQ2FsbENvbnRl
eHQobm9kZS5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSk7CisgICAgICAgIGRhdGEubWVyZ2VD
YWxsQ29udGV4dChub2RlLT5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSk7CiAgICAgfQogICAg
IAotICAgIGJvb2wgaXNPS1RvT3B0aW1pemUoTm9kZSYgc291cmNlKQorICAgIGJvb2wgaXNPS1Rv
T3B0aW1pemUoTm9kZSogc291cmNlKQogICAgIHsKLSAgICAgICAgaWYgKG1fY3JlYXRlc0FyZ3Vt
ZW50cy5jb250YWlucyhzb3VyY2UuY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpKQorICAgICAg
ICBpZiAobV9jcmVhdGVzQXJndW1lbnRzLmNvbnRhaW5zKHNvdXJjZS0+Y29kZU9yaWdpbi5pbmxp
bmVDYWxsRnJhbWUpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAKLSAgICAg
ICAgc3dpdGNoIChzb3VyY2Uub3AoKSkgeworICAgICAgICBzd2l0Y2ggKHNvdXJjZS0+b3AoKSkg
ewogICAgICAgICBjYXNlIEdldExvY2FsOiB7Ci0gICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0Rh
dGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9IHNvdXJjZS52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKLSAg
ICAgICAgICAgIGludCBhcmd1bWVudHNSZWdpc3RlciA9IG1fZ3JhcGgudW5jaGVja2VkQXJndW1l
bnRzUmVnaXN0ZXJGb3Ioc291cmNlLmNvZGVPcmlnaW4pOworICAgICAgICAgICAgVmFyaWFibGVB
Y2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBzb3VyY2UtPnZhcmlhYmxlQWNjZXNzRGF0
YSgpOworICAgICAgICAgICAgaW50IGFyZ3VtZW50c1JlZ2lzdGVyID0gbV9ncmFwaC51bmNoZWNr
ZWRBcmd1bWVudHNSZWdpc3RlckZvcihzb3VyY2UtPmNvZGVPcmlnaW4pOwogICAgICAgICAgICAg
aWYgKGFyZ3VtZW50c1JlZ2lzdGVyID09IEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIpCiAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBpZiAoYXJndW1lbnRzUmVnaXN0ZXIgPT0gdmFy
aWFibGVBY2Nlc3NEYXRhLT5sb2NhbCgpKQpAQCAtNzY4LDM4ICs3NjEsMzcgQEAgcHJpdmF0ZToK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICAKLSAgICB2b2lkIHJlbW92ZUFyZ3Vt
ZW50c1JlZmVyZW5jaW5nUGhhbnRvbUNoaWxkKE5vZGUmIG5vZGUsIHVuc2lnbmVkIGVkZ2VJbmRl
eCkKKyAgICB2b2lkIHJlbW92ZUFyZ3VtZW50c1JlZmVyZW5jaW5nUGhhbnRvbUNoaWxkKE5vZGUq
IG5vZGUsIHVuc2lnbmVkIGVkZ2VJbmRleCkKICAgICB7Ci0gICAgICAgIEVkZ2UgZWRnZSA9IG5v
ZGUuY2hpbGRyZW4uY2hpbGQoZWRnZUluZGV4KTsKKyAgICAgICAgRWRnZSBlZGdlID0gbm9kZS0+
Y2hpbGRyZW4uY2hpbGQoZWRnZUluZGV4KTsKICAgICAgICAgaWYgKCFlZGdlKQogICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICAKLSAgICAgICAgTm9kZSYgY2hpbGQgPSBtX2dyYXBoW2VkZ2Vd
OwotICAgICAgICBzd2l0Y2ggKGNoaWxkLm9wKCkpIHsKKyAgICAgICAgc3dpdGNoIChlZGdlLT5v
cCgpKSB7CiAgICAgICAgIGNhc2UgUGhpOiAvLyBBcmlzZXMgaWYgd2UgaGFkIENTRSBvbiBhIEdl
dExvY2FsIG9mIHRoZSBhcmd1bWVudHMgcmVnaXN0ZXIuCiAgICAgICAgIGNhc2UgR2V0TG9jYWw6
IC8vIEFyaXNlcyBpZiB3ZSBoYWQgQ1NFIG9uIGFuIGFyZ3VtZW50cyBhY2Nlc3MgdG8gYSB2YXJp
YWJsZSBhbGlhc2VkIHRvIHRoZSBhcmd1bWVudHMuCiAgICAgICAgIGNhc2UgU2V0TG9jYWw6IHsg
Ly8gQXJpc2VzIGlmIHdlIGhhZCBDU0Ugb24gYSBHZXRMb2NhbCBvZiB0aGUgYXJndW1lbnRzIHJl
Z2lzdGVyLgotICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0Rh
dGEgPSBjaGlsZC52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKKyAgICAgICAgICAgIFZhcmlhYmxlQWNj
ZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhID0gZWRnZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7
CiAgICAgICAgICAgICBib29sIGlzRGVhZEFyZ3VtZW50c1JlZ2lzdGVyID0KICAgICAgICAgICAg
ICAgICB2YXJpYWJsZUFjY2Vzc0RhdGEtPmxvY2FsKCkgPT0KLSAgICAgICAgICAgICAgICAgICAg
bV9ncmFwaC51bmNoZWNrZWRBcmd1bWVudHNSZWdpc3RlckZvcihjaGlsZC5jb2RlT3JpZ2luKQot
ICAgICAgICAgICAgICAgICYmICFtX2NyZWF0ZXNBcmd1bWVudHMuY29udGFpbnMoY2hpbGQuY29k
ZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpOworICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLnVu
Y2hlY2tlZEFyZ3VtZW50c1JlZ2lzdGVyRm9yKGVkZ2UtPmNvZGVPcmlnaW4pCisgICAgICAgICAg
ICAgICAgJiYgIW1fY3JlYXRlc0FyZ3VtZW50cy5jb250YWlucyhlZGdlLT5jb2RlT3JpZ2luLmlu
bGluZUNhbGxGcmFtZSk7CiAgICAgICAgICAgICBib29sIGlzQWxpYXNlZEFyZ3VtZW50c1JlZ2lz
dGVyID0KICAgICAgICAgICAgICAgICAhdmFyaWFibGVBY2Nlc3NEYXRhLT5pc0NhcHR1cmVkKCkK
ICAgICAgICAgICAgICAgICAmJiBtX2FyZ3VtZW50c0FsaWFzaW5nLmZpbmQodmFyaWFibGVBY2Nl
c3NEYXRhKS0+dmFsdWUuaXNWYWxpZCgpCi0gICAgICAgICAgICAgICAgJiYgIW1fY3JlYXRlc0Fy
Z3VtZW50cy5jb250YWlucyhjaGlsZC5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSk7CisgICAg
ICAgICAgICAgICAgJiYgIW1fY3JlYXRlc0FyZ3VtZW50cy5jb250YWlucyhlZGdlLT5jb2RlT3Jp
Z2luLmlubGluZUNhbGxGcmFtZSk7CiAgICAgICAgICAgICBpZiAoIWlzRGVhZEFyZ3VtZW50c1Jl
Z2lzdGVyICYmICFpc0FsaWFzZWRBcmd1bWVudHNSZWdpc3RlcikKICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgIG1fZ3JhcGguZGVyZWYoZWRnZSk7Ci0gICAgICAgICAgICBub2Rl
LmNoaWxkcmVuLnJlbW92ZUVkZ2VGcm9tQmFnKGVkZ2VJbmRleCk7CisgICAgICAgICAgICBub2Rl
LT5jaGlsZHJlbi5yZW1vdmVFZGdlRnJvbUJhZyhlZGdlSW5kZXgpOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBjYXNlIENyZWF0ZUFyZ3VtZW50
czogeyAvLyBBcmlzZXMgaWYgd2UgQ1NFIHR3byBHZXRMb2NhbHMgdG8gdGhlIGFyZ3VtZW50cyBy
ZWdpc3RlciBhbmQgdGhlbiBDU0UgdGhlIHNlY29uZCB1c2Ugb2YgdGhlIEdldExvY2FsIHRvIHRo
ZSBmaXJzdC4KLSAgICAgICAgICAgIGlmIChtX2NyZWF0ZXNBcmd1bWVudHMuY29udGFpbnMoY2hp
bGQuY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpKQorICAgICAgICAgICAgaWYgKG1fY3JlYXRl
c0FyZ3VtZW50cy5jb250YWlucyhlZGdlLT5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSkpCiAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBtX2dyYXBoLmRlcmVmKGVkZ2UpOwot
ICAgICAgICAgICAgbm9kZS5jaGlsZHJlbi5yZW1vdmVFZGdlRnJvbUJhZyhlZGdlSW5kZXgpOwor
ICAgICAgICAgICAgbm9kZS0+Y2hpbGRyZW4ucmVtb3ZlRWRnZUZyb21CYWcoZWRnZUluZGV4KTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlNb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FycmF5TW9kZS5jcHAJKHJldmlzaW9uIDE0MDkwNCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlNb2RlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjQ2LDE0ICsyNDYsMTQgQEAgU3RydWN0dXJlKiBBcnJheU1vZGU6Om9yaWdpbmFs
QXJyYXlTdHJ1YwogICAgIHJldHVybiBvcmlnaW5hbEFycmF5U3RydWN0dXJlKGdyYXBoLCBub2Rl
LmNvZGVPcmlnaW4pOwogfQogCi1ib29sIEFycmF5TW9kZTo6YWxyZWFkeUNoZWNrZWQoR3JhcGgm
IGdyYXBoLCBOb2RlJiBub2RlLCBBYnN0cmFjdFZhbHVlJiB2YWx1ZSwgSW5kZXhpbmdUeXBlIHNo
YXBlKSBjb25zdAorYm9vbCBBcnJheU1vZGU6OmFscmVhZHlDaGVja2VkKEdyYXBoJiBncmFwaCwg
Tm9kZSogbm9kZSwgQWJzdHJhY3RWYWx1ZSYgdmFsdWUsIEluZGV4aW5nVHlwZSBzaGFwZSkgY29u
c3QKIHsKICAgICBzd2l0Y2ggKGFycmF5Q2xhc3MoKSkgewogICAgIGNhc2UgQXJyYXk6Ok9yaWdp
bmFsQXJyYXk6CiAgICAgICAgIHJldHVybiB2YWx1ZS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5o
YXNTaW5nbGV0b24oKQogICAgICAgICAgICAgJiYgKHZhbHVlLm1fY3VycmVudEtub3duU3RydWN0
dXJlLnNpbmdsZXRvbigpLT5pbmRleGluZ1R5cGUoKSAmIEluZGV4aW5nU2hhcGVNYXNrKSA9PSBz
aGFwZQogICAgICAgICAgICAgJiYgKHZhbHVlLm1fY3VycmVudEtub3duU3RydWN0dXJlLnNpbmds
ZXRvbigpLT5pbmRleGluZ1R5cGUoKSAmIElzQXJyYXkpCi0gICAgICAgICAgICAmJiBncmFwaC5n
bG9iYWxPYmplY3RGb3Iobm9kZS5jb2RlT3JpZ2luKS0+aXNPcmlnaW5hbEFycmF5U3RydWN0dXJl
KHZhbHVlLm1fY3VycmVudEtub3duU3RydWN0dXJlLnNpbmdsZXRvbigpKTsKKyAgICAgICAgICAg
ICYmIGdyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5jb2RlT3JpZ2luKS0+aXNPcmlnaW5hbEFy
cmF5U3RydWN0dXJlKHZhbHVlLm1fY3VycmVudEtub3duU3RydWN0dXJlLnNpbmdsZXRvbigpKTsK
ICAgICAgICAgCiAgICAgY2FzZSBBcnJheTo6QXJyYXk6CiAgICAgICAgIGlmIChhcnJheU1vZGVz
QWxyZWFkeUNoZWNrZWQodmFsdWUubV9hcnJheU1vZGVzLCBhc0FycmF5TW9kZXMoc2hhcGUgfCBJ
c0FycmF5KSkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FycmF5TW9kZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlNb2RlLmgJ
KHJldmlzaW9uIDE0MDkwNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlN
b2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTE5Nyw3ICsxOTcsNyBAQCBwdWJsaWM6CiAgICAgCiAg
ICAgQXJyYXlNb2RlIHJlZmluZShTcGVjdWxhdGVkVHlwZSBiYXNlLCBTcGVjdWxhdGVkVHlwZSBp
bmRleCwgU3BlY3VsYXRlZFR5cGUgdmFsdWUgPSBTcGVjTm9uZSwgTm9kZUZsYWdzID0gMCkgY29u
c3Q7CiAgICAgCi0gICAgYm9vbCBhbHJlYWR5Q2hlY2tlZChHcmFwaCYsIE5vZGUmLCBBYnN0cmFj
dFZhbHVlJikgY29uc3Q7CisgICAgYm9vbCBhbHJlYWR5Q2hlY2tlZChHcmFwaCYsIE5vZGUqLCBB
YnN0cmFjdFZhbHVlJikgY29uc3Q7CiAgICAgCiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikg
Y29uc3Q7CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxv
Y2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxv
Y2suaAkocmV2aXNpb24gMTQwOTA0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdC
YXNpY0Jsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTQyLDcgKzQyLDcgQEAgY2xhc3MgR3JhcGg7
CiAKIHR5cGVkZWYgVmVjdG9yIDxCbG9ja0luZGV4LCAyPiBQcmVkZWNlc3Nvckxpc3Q7CiAKLXN0
cnVjdCBCYXNpY0Jsb2NrIDogVmVjdG9yPE5vZGVJbmRleCwgOD4geworc3RydWN0IEJhc2ljQmxv
Y2sgOiBWZWN0b3I8Tm9kZSosIDg+IHsKICAgICBCYXNpY0Jsb2NrKHVuc2lnbmVkIGJ5dGVjb2Rl
QmVnaW4sIHVuc2lnbmVkIG51bUFyZ3VtZW50cywgdW5zaWduZWQgbnVtTG9jYWxzKQogICAgICAg
ICA6IGJ5dGVjb2RlQmVnaW4oYnl0ZWNvZGVCZWdpbikKICAgICAgICAgLCBpc09TUlRhcmdldChm
YWxzZSkKQEAgLTc1LDcgKzc1LDcgQEAgc3RydWN0IEJhc2ljQmxvY2sgOiBWZWN0b3I8Tm9kZUlu
ZGV4LCA4PgogICAgIH0KICAgICAKICAgICBzaXplX3QgbnVtTm9kZXMoKSBjb25zdCB7IHJldHVy
biBwaGlzLnNpemUoKSArIHNpemUoKTsgfQotICAgIE5vZGVJbmRleCBub2RlSW5kZXgoc2l6ZV90
IGkpIGNvbnN0CisgICAgTm9kZSogbm9kZShzaXplX3QgaSkgY29uc3QKICAgICB7CiAgICAgICAg
IGlmIChpIDwgcGhpcy5zaXplKCkpCiAgICAgICAgICAgICByZXR1cm4gcGhpc1tpXTsKQEAgLTgz
LDI2ICs4MywyNiBAQCBzdHJ1Y3QgQmFzaWNCbG9jayA6IFZlY3RvcjxOb2RlSW5kZXgsIDg+CiAg
ICAgfQogICAgIGJvb2wgaXNQaGlJbmRleChzaXplX3QgaSkgY29uc3QgeyByZXR1cm4gaSA8IHBo
aXMuc2l6ZSgpOyB9CiAgICAgCi0gICAgYm9vbCBpc0luUGhpcyhOb2RlSW5kZXggbm9kZUluZGV4
KSBjb25zdAorICAgIGJvb2wgaXNJblBoaXMoTm9kZSogbm9kZSkgY29uc3QKICAgICB7CiAgICAg
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcGhpcy5zaXplKCk7ICsraSkgewotICAgICAgICAg
ICAgaWYgKHBoaXNbaV0gPT0gbm9kZUluZGV4KQorICAgICAgICAgICAgaWYgKHBoaXNbaV0gPT0g
bm9kZSkKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIAotICAgIGJvb2wgaXNJbkJsb2NrKE5vZGVJbmRleCBp
bmRleCkgY29uc3QKKyAgICBib29sIGlzSW5CbG9jayhOb2RlKiBteU5vZGUpIGNvbnN0CiAgICAg
ewogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bU5vZGVzKCk7ICsraSkgewotICAg
ICAgICAgICAgaWYgKG5vZGVJbmRleChpKSA9PSBpbmRleCkKKyAgICAgICAgICAgIGlmIChub2Rl
KGkpID09IG15Tm9kZSkKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIAogI2RlZmluZSBERkdfREVGSU5FX0FQ
UEVORF9OT0RFKHRlbXBsYXRlUHJlLCB0ZW1wbGF0ZVBvc3QsIHR5cGVQYXJhbXMsIHZhbHVlUGFy
YW1zQ29tbWEsIHZhbHVlUGFyYW1zLCB2YWx1ZUFyZ3MpIFwKLSAgICB0ZW1wbGF0ZVByZSB0eXBl
UGFyYW1zIHRlbXBsYXRlUG9zdCBOb2RlSW5kZXggYXBwZW5kTm9kZShHcmFwaCYsIFJlZkNoaWxk
cmVuTW9kZSwgUmVmTm9kZU1vZGUsIFNwZWN1bGF0ZWRUeXBlIHZhbHVlUGFyYW1zQ29tbWEgdmFs
dWVQYXJhbXMpOworICAgIHRlbXBsYXRlUHJlIHR5cGVQYXJhbXMgdGVtcGxhdGVQb3N0IE5vZGUq
IGFwcGVuZE5vZGUoR3JhcGgmLCBSZWZDaGlsZHJlbk1vZGUsIFJlZk5vZGVNb2RlLCBTcGVjdWxh
dGVkVHlwZSB2YWx1ZVBhcmFtc0NvbW1hIHZhbHVlUGFyYW1zKTsKICAgICBERkdfVkFSSUFESUNf
VEVNUExBVEVfRlVOQ1RJT04oREZHX0RFRklORV9BUFBFTkRfTk9ERSkKICN1bmRlZiBERkdfREVG
SU5FX0FQUEVORF9OT0RFCiAgICAgCkBAIC0xMjEsMTEgKzEyMSwxMSBAQCBzdHJ1Y3QgQmFzaWNC
bG9jayA6IFZlY3RvcjxOb2RlSW5kZXgsIDg+CiAjZW5kaWYKICAgICBib29sIGlzUmVhY2hhYmxl
OwogICAgIAotICAgIFZlY3RvcjxOb2RlSW5kZXg+IHBoaXM7CisgICAgVmVjdG9yPE5vZGUqPiBw
aGlzOwogICAgIFByZWRlY2Vzc29yTGlzdCBtX3ByZWRlY2Vzc29yczsKICAgICAKLSAgICBPcGVy
YW5kczxOb2RlSW5kZXgsIE5vZGVJbmRleFRyYWl0cz4gdmFyaWFibGVzQXRIZWFkOwotICAgIE9w
ZXJhbmRzPE5vZGVJbmRleCwgTm9kZUluZGV4VHJhaXRzPiB2YXJpYWJsZXNBdFRhaWw7CisgICAg
T3BlcmFuZHM8Tm9kZSosIE5vZGVQb2ludGVyVHJhaXRzPiB2YXJpYWJsZXNBdEhlYWQ7CisgICAg
T3BlcmFuZHM8Tm9kZSosIE5vZGVQb2ludGVyVHJhaXRzPiB2YXJpYWJsZXNBdFRhaWw7CiAgICAg
CiAgICAgT3BlcmFuZHM8QWJzdHJhY3RWYWx1ZT4gdmFsdWVzQXRIZWFkOwogICAgIE9wZXJhbmRz
PEFic3RyYWN0VmFsdWU+IHZhbHVlc0F0VGFpbDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQmFzaWNCbG9ja0lubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2tJbmxpbmVzLmgJKHJldmlzaW9uIDE0MDkwNCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9ja0lubGluZXMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzQsOSArMzQsOSBAQAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcg
ewogCiAjZGVmaW5lIERGR19ERUZJTkVfQVBQRU5EX05PREUodGVtcGxhdGVQcmUsIHRlbXBsYXRl
UG9zdCwgdHlwZVBhcmFtcywgdmFsdWVQYXJhbXNDb21tYSwgdmFsdWVQYXJhbXMsIHZhbHVlQXJn
cykgXAotICAgIHRlbXBsYXRlUHJlIHR5cGVQYXJhbXMgdGVtcGxhdGVQb3N0IE5vZGVJbmRleCBC
YXNpY0Jsb2NrOjphcHBlbmROb2RlKEdyYXBoJiBncmFwaCwgUmVmQ2hpbGRyZW5Nb2RlIHJlZkNo
aWxkcmVuTW9kZSwgUmVmTm9kZU1vZGUgcmVmTm9kZU1vZGUsIFNwZWN1bGF0ZWRUeXBlIHR5cGUg
dmFsdWVQYXJhbXNDb21tYSB2YWx1ZVBhcmFtcykgXAorICAgIHRlbXBsYXRlUHJlIHR5cGVQYXJh
bXMgdGVtcGxhdGVQb3N0IE5vZGUqIEJhc2ljQmxvY2s6OmFwcGVuZE5vZGUoR3JhcGgmIGdyYXBo
LCBSZWZDaGlsZHJlbk1vZGUgcmVmQ2hpbGRyZW5Nb2RlLCBSZWZOb2RlTW9kZSByZWZOb2RlTW9k
ZSwgU3BlY3VsYXRlZFR5cGUgdHlwZSB2YWx1ZVBhcmFtc0NvbW1hIHZhbHVlUGFyYW1zKSBcCiAg
ICAgeyBcCi0gICAgICAgIE5vZGVJbmRleCByZXN1bHQgPSBncmFwaC5hZGROb2RlKHJlZkNoaWxk
cmVuTW9kZSwgcmVmTm9kZU1vZGUsIHR5cGUgdmFsdWVQYXJhbXNDb21tYSB2YWx1ZUFyZ3MpOyBc
CisgICAgICAgIE5vZGUqIHJlc3VsdCA9IGdyYXBoLmFkZE5vZGUocmVmQ2hpbGRyZW5Nb2RlLCBy
ZWZOb2RlTW9kZSwgdHlwZSB2YWx1ZVBhcmFtc0NvbW1hIHZhbHVlQXJncyk7IFwKICAgICAgICAg
YXBwZW5kKHJlc3VsdCk7IFwKICAgICAgICAgcmV0dXJuIHJlc3VsdDsgXAogICAgIH0KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCShy
ZXZpc2lvbiAxNDA5MDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2Rl
UGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTYxLDI2ICsxNjEsMjYgQEAgcHJpdmF0ZToK
ICAgICAKICAgICAvLyBIYW5kbGUgY2FsbHMuIFRoaXMgcmVzb2x2ZXMgaXNzdWVzIHN1cnJvdW5k
aW5nIGlubGluaW5nIGFuZCBpbnRyaW5zaWNzLgogICAgIHZvaWQgaGFuZGxlQ2FsbChJbnRlcnBy
ZXRlciosIEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIE5vZGVUeXBlIG9wLCBDb2Rl
U3BlY2lhbGl6YXRpb25LaW5kKTsKLSAgICB2b2lkIGVtaXRGdW5jdGlvbkNoZWNrcyhjb25zdCBD
YWxsTGlua1N0YXR1cyYsIE5vZGVJbmRleCBjYWxsVGFyZ2V0LCBpbnQgcmVnaXN0ZXJPZmZzZXQs
IENvZGVTcGVjaWFsaXphdGlvbktpbmQpOworICAgIHZvaWQgZW1pdEZ1bmN0aW9uQ2hlY2tzKGNv
bnN0IENhbGxMaW5rU3RhdHVzJiwgTm9kZSogY2FsbFRhcmdldCwgaW50IHJlZ2lzdGVyT2Zmc2V0
LCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kKTsKICAgICAvLyBIYW5kbGUgaW5saW5pbmcuIFJldHVy
biB0cnVlIGlmIGl0IHN1Y2NlZWRlZCwgZmFsc2UgaWYgd2UgbmVlZCB0byBwbGFudCBhIGNhbGwu
Ci0gICAgYm9vbCBoYW5kbGVJbmxpbmluZyhib29sIHVzZXNSZXN1bHQsIE5vZGVJbmRleCBjYWxs
VGFyZ2V0Tm9kZUluZGV4LCBpbnQgcmVzdWx0T3BlcmFuZCwgY29uc3QgQ2FsbExpbmtTdGF0dXMm
LCBpbnQgcmVnaXN0ZXJPZmZzZXQsIGludCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgdW5z
aWduZWQgbmV4dE9mZnNldCwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCk7CisgICAgYm9vbCBoYW5k
bGVJbmxpbmluZyhib29sIHVzZXNSZXN1bHQsIE5vZGUqIGNhbGxUYXJnZXROb2RlLCBpbnQgcmVz
dWx0T3BlcmFuZCwgY29uc3QgQ2FsbExpbmtTdGF0dXMmLCBpbnQgcmVnaXN0ZXJPZmZzZXQsIGlu
dCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgdW5zaWduZWQgbmV4dE9mZnNldCwgQ29kZVNw
ZWNpYWxpemF0aW9uS2luZCk7CiAgICAgLy8gSGFuZGxlIHNldHRpbmcgdGhlIHJlc3VsdCBvZiBh
biBpbnRyaW5zaWMuCi0gICAgdm9pZCBzZXRJbnRyaW5zaWNSZXN1bHQoYm9vbCB1c2VzUmVzdWx0
LCBpbnQgcmVzdWx0T3BlcmFuZCwgTm9kZUluZGV4KTsKKyAgICB2b2lkIHNldEludHJpbnNpY1Jl
c3VsdChib29sIHVzZXNSZXN1bHQsIGludCByZXN1bHRPcGVyYW5kLCBOb2RlKik7CiAgICAgLy8g
SGFuZGxlIGludHJpbnNpYyBmdW5jdGlvbnMuIFJldHVybiB0cnVlIGlmIGl0IHN1Y2NlZWRlZCwg
ZmFsc2UgaWYgd2UgbmVlZCB0byBwbGFudCBhIGNhbGwuCiAgICAgYm9vbCBoYW5kbGVJbnRyaW5z
aWMoYm9vbCB1c2VzUmVzdWx0LCBpbnQgcmVzdWx0T3BlcmFuZCwgSW50cmluc2ljLCBpbnQgcmVn
aXN0ZXJPZmZzZXQsIGludCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgU3BlY3VsYXRlZFR5
cGUgcHJlZGljdGlvbik7CiAgICAgYm9vbCBoYW5kbGVDb25zdGFudEludGVybmFsRnVuY3Rpb24o
Ym9vbCB1c2VzUmVzdWx0LCBpbnQgcmVzdWx0T3BlcmFuZCwgSW50ZXJuYWxGdW5jdGlvbiosIGlu
dCByZWdpc3Rlck9mZnNldCwgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBTcGVjdWxh
dGVkVHlwZSBwcmVkaWN0aW9uLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kKTsKLSAgICBOb2RlSW5k
ZXggaGFuZGxlR2V0QnlPZmZzZXQoU3BlY3VsYXRlZFR5cGUsIE5vZGVJbmRleCBiYXNlLCB1bnNp
Z25lZCBpZGVudGlmaWVyTnVtYmVyLCBQcm9wZXJ0eU9mZnNldCk7CisgICAgTm9kZSogaGFuZGxl
R2V0QnlPZmZzZXQoU3BlY3VsYXRlZFR5cGUsIE5vZGUqIGJhc2UsIHVuc2lnbmVkIGlkZW50aWZp
ZXJOdW1iZXIsIFByb3BlcnR5T2Zmc2V0KTsKICAgICB2b2lkIGhhbmRsZUdldEJ5T2Zmc2V0KAot
ICAgICAgICBpbnQgZGVzdGluYXRpb25PcGVyYW5kLCBTcGVjdWxhdGVkVHlwZSwgTm9kZUluZGV4
IGJhc2UsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsCisgICAgICAgIGludCBkZXN0aW5hdGlv
bk9wZXJhbmQsIFNwZWN1bGF0ZWRUeXBlLCBOb2RlKiBiYXNlLCB1bnNpZ25lZCBpZGVudGlmaWVy
TnVtYmVyLAogICAgICAgICBQcm9wZXJ0eU9mZnNldCk7CiAgICAgdm9pZCBoYW5kbGVHZXRCeUlk
KAotICAgICAgICBpbnQgZGVzdGluYXRpb25PcGVyYW5kLCBTcGVjdWxhdGVkVHlwZSwgTm9kZUlu
ZGV4IGJhc2UsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsCisgICAgICAgIGludCBkZXN0aW5h
dGlvbk9wZXJhbmQsIFNwZWN1bGF0ZWRUeXBlLCBOb2RlKiBiYXNlLCB1bnNpZ25lZCBpZGVudGlm
aWVyTnVtYmVyLAogICAgICAgICBjb25zdCBHZXRCeUlkU3RhdHVzJik7CiAKLSAgICBOb2RlSW5k
ZXggZ2V0U2NvcGUoYm9vbCBza2lwVG9wLCB1bnNpZ25lZCBza2lwQ291bnQpOworICAgIE5vZGUq
IGdldFNjb3BlKGJvb2wgc2tpcFRvcCwgdW5zaWduZWQgc2tpcENvdW50KTsKICAgICAKICAgICAv
LyBDb252ZXJ0IGEgc2V0IG9mIFJlc29sdmVPcGVyYXRpb25zIGludG8gZ3JhcGggbm9kZXMKLSAg
ICBib29sIHBhcnNlUmVzb2x2ZU9wZXJhdGlvbnMoU3BlY3VsYXRlZFR5cGUsIHVuc2lnbmVkIGlk
ZW50aWZpZXJOdW1iZXIsIHVuc2lnbmVkIG9wZXJhdGlvbnMsIHVuc2lnbmVkIHB1dFRvQmFzZU9w
ZXJhdGlvbiwgTm9kZUluZGV4KiBiYXNlLCBOb2RlSW5kZXgqIHZhbHVlKTsKKyAgICBib29sIHBh
cnNlUmVzb2x2ZU9wZXJhdGlvbnMoU3BlY3VsYXRlZFR5cGUsIHVuc2lnbmVkIGlkZW50aWZpZXJO
dW1iZXIsIHVuc2lnbmVkIG9wZXJhdGlvbnMsIHVuc2lnbmVkIHB1dFRvQmFzZU9wZXJhdGlvbiwg
Tm9kZSoqIGJhc2UsIE5vZGUqKiB2YWx1ZSk7CiAKICAgICAvLyBQcmVwYXJlIHRvIHBhcnNlIGEg
YmxvY2suCiAgICAgdm9pZCBwcmVwYXJlVG9QYXJzZUJsb2NrKCk7CkBAIC0yMTAsNyArMjEwLDcg
QEAgcHJpdmF0ZToKICAgICB9CiAgICAgCiAgICAgLy8gR2V0L1NldCB0aGUgb3BlcmFuZHMvcmVz
dWx0IG9mIGEgYnl0ZWNvZGUgaW5zdHJ1Y3Rpb24uCi0gICAgTm9kZUluZGV4IGdldERpcmVjdChp
bnQgb3BlcmFuZCkKKyAgICBOb2RlKiBnZXREaXJlY3QoaW50IG9wZXJhbmQpCiAgICAgewogICAg
ICAgICAvLyBJcyB0aGlzIGEgY29uc3RhbnQ/CiAgICAgICAgIGlmIChvcGVyYW5kID49IEZpcnN0
Q29uc3RhbnRSZWdpc3RlckluZGV4KSB7CkBAIC0yMjgsNyArMjI4LDcgQEAgcHJpdmF0ZToKICAg
ICAgICAgLy8gTXVzdCBiZSBhIGxvY2FsLgogICAgICAgICByZXR1cm4gZ2V0TG9jYWwoKHVuc2ln
bmVkKW9wZXJhbmQpOwogICAgIH0KLSAgICBOb2RlSW5kZXggZ2V0KGludCBvcGVyYW5kKQorICAg
IE5vZGUqIGdldChpbnQgb3BlcmFuZCkKICAgICB7CiAgICAgICAgIGlmIChvcGVyYW5kID09IEpT
U3RhY2s6OkNhbGxlZSkgewogICAgICAgICAgICAgaWYgKG1faW5saW5lU3RhY2tUb3AtPm1faW5s
aW5lQ2FsbEZyYW1lICYmIG1faW5saW5lU3RhY2tUb3AtPm1faW5saW5lQ2FsbEZyYW1lLT5jYWxs
ZWUpCkBAIC0yNDAsNyArMjQwLDcgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIGdldERpcmVj
dChtX2lubGluZVN0YWNrVG9wLT5yZW1hcE9wZXJhbmQob3BlcmFuZCkpOwogICAgIH0KICAgICBl
bnVtIFNldE1vZGUgeyBOb3JtYWxTZXQsIFNldE9uRW50cnkgfTsKLSAgICB2b2lkIHNldERpcmVj
dChpbnQgb3BlcmFuZCwgTm9kZUluZGV4IHZhbHVlLCBTZXRNb2RlIHNldE1vZGUgPSBOb3JtYWxT
ZXQpCisgICAgdm9pZCBzZXREaXJlY3QoaW50IG9wZXJhbmQsIE5vZGUqIHZhbHVlLCBTZXRNb2Rl
IHNldE1vZGUgPSBOb3JtYWxTZXQpCiAgICAgewogICAgICAgICAvLyBJcyB0aGlzIGFuIGFyZ3Vt
ZW50PwogICAgICAgICBpZiAob3BlcmFuZElzQXJndW1lbnQob3BlcmFuZCkpIHsKQEAgLTI1MSwx
MiArMjUxLDEyIEBAIHByaXZhdGU6CiAgICAgICAgIC8vIE11c3QgYmUgYSBsb2NhbC4KICAgICAg
ICAgc2V0TG9jYWwoKHVuc2lnbmVkKW9wZXJhbmQsIHZhbHVlLCBzZXRNb2RlKTsKICAgICB9Ci0g
ICAgdm9pZCBzZXQoaW50IG9wZXJhbmQsIE5vZGVJbmRleCB2YWx1ZSwgU2V0TW9kZSBzZXRNb2Rl
ID0gTm9ybWFsU2V0KQorICAgIHZvaWQgc2V0KGludCBvcGVyYW5kLCBOb2RlKiB2YWx1ZSwgU2V0
TW9kZSBzZXRNb2RlID0gTm9ybWFsU2V0KQogICAgIHsKICAgICAgICAgc2V0RGlyZWN0KG1faW5s
aW5lU3RhY2tUb3AtPnJlbWFwT3BlcmFuZChvcGVyYW5kKSwgdmFsdWUsIHNldE1vZGUpOwogICAg
IH0KICAgICAKLSAgICB2b2lkIHNldFBhaXIoaW50IG9wZXJhbmQxLCBOb2RlSW5kZXggdmFsdWUx
LCBpbnQgb3BlcmFuZDIsIE5vZGVJbmRleCB2YWx1ZTIpCisgICAgdm9pZCBzZXRQYWlyKGludCBv
cGVyYW5kMSwgTm9kZSogdmFsdWUxLCBpbnQgb3BlcmFuZDIsIE5vZGUqIHZhbHVlMikKICAgICB7
CiAgICAgICAgIC8vIEZpcnN0IGVtaXQgZGVhZCBTZXRMb2NhbHMgZm9yIHRoZSBiZW5lZml0IG9m
IE9TUi4KICAgICAgICAgc2V0KG9wZXJhbmQxLCB2YWx1ZTEpOwpAQCAtMjY3LDQ5ICsyNjcsNDQg
QEAgcHJpdmF0ZToKICAgICAgICAgc2V0KG9wZXJhbmQyLCB2YWx1ZTIpOwogICAgIH0KICAgICAK
LSAgICBOb2RlSW5kZXggaW5qZWN0TGF6eU9wZXJhbmRTcGVjdWxhdGlvbihOb2RlSW5kZXggbm9k
ZUluZGV4KQorICAgIE5vZGUqIGluamVjdExhenlPcGVyYW5kU3BlY3VsYXRpb24oTm9kZSogbm9k
ZSkKICAgICB7Ci0gICAgICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW25vZGVJbmRleF07Ci0gICAg
ICAgIEFTU0VSVChub2RlLm9wKCkgPT0gR2V0TG9jYWwpOwotICAgICAgICBBU1NFUlQobm9kZS5j
b2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXggPT0gbV9jdXJyZW50SW5kZXgpOworICAgICAgICBBU1NF
UlQobm9kZS0+b3AoKSA9PSBHZXRMb2NhbCk7CisgICAgICAgIEFTU0VSVChub2RlLT5jb2RlT3Jp
Z2luLmJ5dGVjb2RlSW5kZXggPT0gbV9jdXJyZW50SW5kZXgpOwogICAgICAgICBTcGVjdWxhdGVk
VHlwZSBwcmVkaWN0aW9uID0gCiAgICAgICAgICAgICBtX2lubGluZVN0YWNrVG9wLT5tX2xhenlP
cGVyYW5kcy5wcmVkaWN0aW9uKAotICAgICAgICAgICAgICAgIExhenlPcGVyYW5kVmFsdWVQcm9m
aWxlS2V5KG1fY3VycmVudEluZGV4LCBub2RlLmxvY2FsKCkpKTsKKyAgICAgICAgICAgICAgICBM
YXp5T3BlcmFuZFZhbHVlUHJvZmlsZUtleShtX2N1cnJlbnRJbmRleCwgbm9kZS0+bG9jYWwoKSkp
OwogI2lmIERGR19FTkFCTEUoREVCVUdfVkVSQk9TRSkKLSAgICAgICAgZGF0YUxvZygiTGF6eSBv
cGVyYW5kIFtAIiwgbm9kZUluZGV4LCAiLCBiYyMiLCBtX2N1cnJlbnRJbmRleCwgIiwgciIsIG5v
ZGUubG9jYWwoKSwgIl0gcHJlZGljdGlvbjogIiwgU3BlY3VsYXRpb25EdW1wKHByZWRpY3Rpb24p
LCAiXG4iKTsKKyAgICAgICAgZGF0YUxvZygiTGF6eSBvcGVyYW5kIFtAIiwgbm9kZS0+aW5kZXgo
KSwgIiwgYmMjIiwgbV9jdXJyZW50SW5kZXgsICIsIHIiLCBub2RlLT5sb2NhbCgpLCAiXSBwcmVk
aWN0aW9uOiAiLCBTcGVjdWxhdGlvbkR1bXAocHJlZGljdGlvbiksICJcbiIpOwogI2VuZGlmCi0g
ICAgICAgIG5vZGUudmFyaWFibGVBY2Nlc3NEYXRhKCktPnByZWRpY3QocHJlZGljdGlvbik7Ci0g
ICAgICAgIHJldHVybiBub2RlSW5kZXg7CisgICAgICAgIG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0
YSgpLT5wcmVkaWN0KHByZWRpY3Rpb24pOworICAgICAgICByZXR1cm4gbm9kZTsKICAgICB9CiAK
ICAgICAvLyBVc2VkIGluIGltcGxlbWVudGluZyBnZXQvc2V0LCBhYm92ZSwgd2hlcmUgdGhlIG9w
ZXJhbmQgaXMgYSBsb2NhbCB2YXJpYWJsZS4KLSAgICBOb2RlSW5kZXggZ2V0TG9jYWwodW5zaWdu
ZWQgb3BlcmFuZCkKKyAgICBOb2RlKiBnZXRMb2NhbCh1bnNpZ25lZCBvcGVyYW5kKQogICAgIHsK
LSAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRleCA9IG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNB
dFRhaWwubG9jYWwob3BlcmFuZCk7CisgICAgICAgIE5vZGUqIG5vZGUgPSBtX2N1cnJlbnRCbG9j
ay0+dmFyaWFibGVzQXRUYWlsLmxvY2FsKG9wZXJhbmQpOwogICAgICAgICBib29sIGlzQ2FwdHVy
ZWQgPSBtX2NvZGVCbG9jay0+aXNDYXB0dXJlZChvcGVyYW5kLCBtX2lubGluZVN0YWNrVG9wLT5t
X2lubGluZUNhbGxGcmFtZSk7CiAgICAgICAgIAotICAgICAgICBpZiAobm9kZUluZGV4ICE9IE5v
Tm9kZSkgewotICAgICAgICAgICAgTm9kZSogbm9kZVB0ciA9ICZtX2dyYXBoW25vZGVJbmRleF07
Ci0gICAgICAgICAgICBpZiAobm9kZVB0ci0+b3AoKSA9PSBGbHVzaCkgeworICAgICAgICBpZiAo
bm9kZSkgeworICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gRmx1c2gpIHsKICAgICAgICAg
ICAgICAgICAvLyBUd28gcG9zc2liaWxpdGllczogZWl0aGVyIHRoZSBibG9jayB3YW50cyB0aGUg
bG9jYWwgdG8gYmUgbGl2ZQogICAgICAgICAgICAgICAgIC8vIGJ1dCBoYXMgbm90IGxvYWRlZCBp
dHMgdmFsdWUsIG9yIGl0IGhhcyBsb2FkZWQgaXRzIHZhbHVlLCBpbgogICAgICAgICAgICAgICAg
IC8vIHdoaWNoIGNhc2Ugd2UncmUgZG9uZS4KLSAgICAgICAgICAgICAgICBub2RlSW5kZXggPSBu
b2RlUHRyLT5jaGlsZDEoKS5pbmRleCgpOwotICAgICAgICAgICAgICAgIE5vZGUmIGZsdXNoQ2hp
bGQgPSBtX2dyYXBoW25vZGVJbmRleF07Ci0gICAgICAgICAgICAgICAgaWYgKGZsdXNoQ2hpbGQu
b3AoKSA9PSBQaGkpIHsKLSAgICAgICAgICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2
YXJpYWJsZUFjY2Vzc0RhdGEgPSBmbHVzaENoaWxkLnZhcmlhYmxlQWNjZXNzRGF0YSgpOworICAg
ICAgICAgICAgICAgIG5vZGUgPSBub2RlLT5jaGlsZDEoKS5ub2RlKCk7CisgICAgICAgICAgICAg
ICAgaWYgKG5vZGUtPm9wKCkgPT0gUGhpKSB7CisgICAgICAgICAgICAgICAgICAgIFZhcmlhYmxl
QWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRh
KCk7CiAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlQWNjZXNzRGF0YS0+bWVyZ2VJc0NhcHR1
cmVkKGlzQ2FwdHVyZWQpOwotICAgICAgICAgICAgICAgICAgICBub2RlSW5kZXggPSBpbmplY3RM
YXp5T3BlcmFuZFNwZWN1bGF0aW9uKGFkZFRvR3JhcGgoR2V0TG9jYWwsIE9wSW5mbyh2YXJpYWJs
ZUFjY2Vzc0RhdGEpLCBub2RlSW5kZXgpKTsKLSAgICAgICAgICAgICAgICAgICAgbV9jdXJyZW50
QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5sb2NhbChvcGVyYW5kKSA9IG5vZGVJbmRleDsKLSAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIG5vZGVJbmRleDsKKyAgICAgICAgICAgICAgICAgICAgbm9k
ZUluZGV4ID0gaW5qZWN0TGF6eU9wZXJhbmRTcGVjdWxhdGlvbihhZGRUb0dyYXBoKEdldExvY2Fs
LCBPcEluZm8odmFyaWFibGVBY2Nlc3NEYXRhKSwgbm9kZSkpOworICAgICAgICAgICAgICAgICAg
ICBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLmxvY2FsKG9wZXJhbmQpID0gbm9kZTsK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGU7CiAgICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIG5vZGVQdHIgPSAmZmx1c2hDaGlsZDsKICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIAotICAgICAgICAgICAgQVNTRVJUKCZtX2dyYXBoW25vZGVJbmRleF0gPT0gbm9kZVB0
cik7Ci0gICAgICAgICAgICBBU1NFUlQobm9kZVB0ci0+b3AoKSAhPSBGbHVzaCk7CisgICAgICAg
ICAgICBBU1NFUlQobm9kZS0+b3AoKSAhPSBGbHVzaCk7CiAKLSAgICAgICAgICAgIG5vZGVQdHIt
PnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5tZXJnZUlzQ2FwdHVyZWQoaXNDYXB0dXJlZCk7CisgICAg
ICAgICAgICBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+bWVyZ2VJc0NhcHR1cmVkKGlzQ2Fw
dHVyZWQpOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKGlzQ2FwdHVyZWQpIHsK
ICAgICAgICAgICAgICAgICAvLyBXZSB3aXNoIHRvIHVzZSB0aGUgc2FtZSB2YXJpYWJsZSBhY2Nl
c3MgZGF0YSBhcyB0aGUgcHJldmlvdXMgYWNjZXNzLApAQCAtMzE3LDE5ICszMTIsMTkgQEAgcHJp
dmF0ZToKICAgICAgICAgICAgICAgICAvLyBrbm93LCBhdCB0aGlzIHN0YWdlIG9mIGNvbXBpbGF0
aW9uLCB0aGUgbG9jYWwgaGFzIGJlZW4gY2xvYmJlcmVkLgogICAgICAgICAgICAgICAgIAogICAg
ICAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSB3ZSBsaW5rIHRvIHRoZSBQaGkgbm9kZSwgbm90IHRv
IHRoZSBHZXRMb2NhbC4KLSAgICAgICAgICAgICAgICBpZiAobm9kZVB0ci0+b3AoKSA9PSBHZXRM
b2NhbCkKLSAgICAgICAgICAgICAgICAgICAgbm9kZUluZGV4ID0gbm9kZVB0ci0+Y2hpbGQxKCku
aW5kZXgoKTsKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBHZXRMb2NhbCkKKyAg
ICAgICAgICAgICAgICAgICAgbm9kZSA9IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKICAgICAgICAg
ICAgICAgICAKLSAgICAgICAgICAgICAgICBOb2RlSW5kZXggbmV3R2V0TG9jYWwgPSBpbmplY3RM
YXp5T3BlcmFuZFNwZWN1bGF0aW9uKAotICAgICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKEdl
dExvY2FsLCBPcEluZm8obm9kZVB0ci0+dmFyaWFibGVBY2Nlc3NEYXRhKCkpLCBub2RlSW5kZXgp
KTsKKyAgICAgICAgICAgICAgICBOb2RlKiBuZXdHZXRMb2NhbCA9IGluamVjdExhenlPcGVyYW5k
U3BlY3VsYXRpb24oCisgICAgICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoR2V0TG9jYWwsIE9w
SW5mbyhub2RlUHRyLT52YXJpYWJsZUFjY2Vzc0RhdGEoKSksIG5vZGUpKTsKICAgICAgICAgICAg
ICAgICBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLmxvY2FsKG9wZXJhbmQpID0gbmV3
R2V0TG9jYWw7CiAgICAgICAgICAgICAgICAgcmV0dXJuIG5ld0dldExvY2FsOwogICAgICAgICAg
ICAgfQogICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAobm9kZVB0ci0+b3AoKSA9PSBHZXRM
b2NhbCkKLSAgICAgICAgICAgICAgICByZXR1cm4gbm9kZUluZGV4OwotICAgICAgICAgICAgQVNT
RVJUKG5vZGVQdHItPm9wKCkgPT0gU2V0TG9jYWwpOwotICAgICAgICAgICAgcmV0dXJuIG5vZGVQ
dHItPmNoaWxkMSgpLmluZGV4KCk7CisgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBHZXRM
b2NhbCkKKyAgICAgICAgICAgICAgICByZXR1cm4gbm9kZTsKKyAgICAgICAgICAgIEFTU0VSVChu
b2RlLT5vcCgpID09IFNldExvY2FsKTsKKyAgICAgICAgICAgIHJldHVybiBub2RlLT5jaGlsZDEo
KS5ub2RlKCk7CiAgICAgICAgIH0KIAogICAgICAgICAvLyBDaGVjayBmb3IgcmVhZHMgb2YgdGVt
cG9yYXJpZXMgZnJvbSBwcmlvciBibG9ja3MsCkBAIC0zMzgsMTYgKzMzMywxNiBAQCBwcml2YXRl
OgogICAgICAgICAKICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0Rh
dGEgPSBuZXdWYXJpYWJsZUFjY2Vzc0RhdGEob3BlcmFuZCwgaXNDYXB0dXJlZCk7CiAgICAgICAg
IAotICAgICAgICBOb2RlSW5kZXggcGhpID0gYWRkVG9HcmFwaChQaGksIE9wSW5mbyh2YXJpYWJs
ZUFjY2Vzc0RhdGEpKTsKKyAgICAgICAgTm9kZSogcGhpID0gYWRkVG9HcmFwaChQaGksIE9wSW5m
byh2YXJpYWJsZUFjY2Vzc0RhdGEpKTsKICAgICAgICAgbV9sb2NhbFBoaVN0YWNrLmFwcGVuZChQ
aGlTdGFja0VudHJ5KG1fY3VycmVudEJsb2NrLCBwaGksIG9wZXJhbmQpKTsKLSAgICAgICAgbm9k
ZUluZGV4ID0gaW5qZWN0TGF6eU9wZXJhbmRTcGVjdWxhdGlvbihhZGRUb0dyYXBoKEdldExvY2Fs
LCBPcEluZm8odmFyaWFibGVBY2Nlc3NEYXRhKSwgcGhpKSk7Ci0gICAgICAgIG1fY3VycmVudEJs
b2NrLT52YXJpYWJsZXNBdFRhaWwubG9jYWwob3BlcmFuZCkgPSBub2RlSW5kZXg7CisgICAgICAg
IG5vZGUgPSBpbmplY3RMYXp5T3BlcmFuZFNwZWN1bGF0aW9uKGFkZFRvR3JhcGgoR2V0TG9jYWws
IE9wSW5mbyh2YXJpYWJsZUFjY2Vzc0RhdGEpLCBwaGkpKTsKKyAgICAgICAgbV9jdXJyZW50Qmxv
Y2stPnZhcmlhYmxlc0F0VGFpbC5sb2NhbChvcGVyYW5kKSA9IG5vZGU7CiAgICAgICAgIAotICAg
ICAgICBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRIZWFkLnNldExvY2FsRmlyc3RUaW1lKG9w
ZXJhbmQsIG5vZGVJbmRleCk7CisgICAgICAgIG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdEhl
YWQuc2V0TG9jYWxGaXJzdFRpbWUob3BlcmFuZCwgbm9kZSk7CiAgICAgICAgIAotICAgICAgICBy
ZXR1cm4gbm9kZUluZGV4OworICAgICAgICByZXR1cm4gbm9kZTsKICAgICB9Ci0gICAgdm9pZCBz
ZXRMb2NhbCh1bnNpZ25lZCBvcGVyYW5kLCBOb2RlSW5kZXggdmFsdWUsIFNldE1vZGUgc2V0TW9k
ZSA9IE5vcm1hbFNldCkKKyAgICB2b2lkIHNldExvY2FsKHVuc2lnbmVkIG9wZXJhbmQsIE5vZGUq
IHZhbHVlLCBTZXRNb2RlIHNldE1vZGUgPSBOb3JtYWxTZXQpCiAgICAgewogICAgICAgICBib29s
IGlzQ2FwdHVyZWQgPSBtX2NvZGVCbG9jay0+aXNDYXB0dXJlZChvcGVyYW5kLCBtX2lubGluZVN0
YWNrVG9wLT5tX2lubGluZUNhbGxGcmFtZSk7CiAgICAgICAgIApAQCAtMzYwLDc3ICszNTUsNzMg
QEAgcHJpdmF0ZToKICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0Rh
dGEgPSBuZXdWYXJpYWJsZUFjY2Vzc0RhdGEob3BlcmFuZCwgaXNDYXB0dXJlZCk7CiAgICAgICAg
IHZhcmlhYmxlQWNjZXNzRGF0YS0+bWVyZ2VTdHJ1Y3R1cmVDaGVja0hvaXN0aW5nRmFpbGVkKAog
ICAgICAgICAgICAgbV9pbmxpbmVTdGFja1RvcC0+bV9leGl0UHJvZmlsZS5oYXNFeGl0U2l0ZSht
X2N1cnJlbnRJbmRleCwgQmFkQ2FjaGUpKTsKLSAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRleCA9
IGFkZFRvR3JhcGgoU2V0TG9jYWwsIE9wSW5mbyh2YXJpYWJsZUFjY2Vzc0RhdGEpLCB2YWx1ZSk7
Ci0gICAgICAgIG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwubG9jYWwob3BlcmFuZCkg
PSBub2RlSW5kZXg7CisgICAgICAgIE5vZGUqIG5vZGUgPSBhZGRUb0dyYXBoKFNldExvY2FsLCBP
cEluZm8odmFyaWFibGVBY2Nlc3NEYXRhKSwgdmFsdWUpOworICAgICAgICBtX2N1cnJlbnRCbG9j
ay0+dmFyaWFibGVzQXRUYWlsLmxvY2FsKG9wZXJhbmQpID0gbm9kZTsKICAgICB9CiAKICAgICAv
LyBVc2VkIGluIGltcGxlbWVudGluZyBnZXQvc2V0LCBhYm92ZSwgd2hlcmUgdGhlIG9wZXJhbmQg
aXMgYW4gYXJndW1lbnQuCi0gICAgTm9kZUluZGV4IGdldEFyZ3VtZW50KHVuc2lnbmVkIG9wZXJh
bmQpCisgICAgTm9kZSogZ2V0QXJndW1lbnQodW5zaWduZWQgb3BlcmFuZCkKICAgICB7CiAgICAg
ICAgIHVuc2lnbmVkIGFyZ3VtZW50ID0gb3BlcmFuZFRvQXJndW1lbnQob3BlcmFuZCk7CiAgICAg
ICAgIEFTU0VSVChhcmd1bWVudCA8IG1fbnVtQXJndW1lbnRzKTsKICAgICAgICAgCi0gICAgICAg
IE5vZGVJbmRleCBub2RlSW5kZXggPSBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLmFy
Z3VtZW50KGFyZ3VtZW50KTsKKyAgICAgICAgTm9kZSogbm9kZSA9IG1fY3VycmVudEJsb2NrLT52
YXJpYWJsZXNBdFRhaWwuYXJndW1lbnQoYXJndW1lbnQpOwogICAgICAgICBib29sIGlzQ2FwdHVy
ZWQgPSBtX2NvZGVCbG9jay0+aXNDYXB0dXJlZChvcGVyYW5kKTsKIAotICAgICAgICBpZiAobm9k
ZUluZGV4ICE9IE5vTm9kZSkgewotICAgICAgICAgICAgTm9kZSogbm9kZVB0ciA9ICZtX2dyYXBo
W25vZGVJbmRleF07Ci0gICAgICAgICAgICBpZiAobm9kZVB0ci0+b3AoKSA9PSBGbHVzaCkgewor
ICAgICAgICBpZiAobm9kZSkgeworICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gRmx1c2gp
IHsKICAgICAgICAgICAgICAgICAvLyBUd28gcG9zc2liaWxpdGllczogZWl0aGVyIHRoZSBibG9j
ayB3YW50cyB0aGUgbG9jYWwgdG8gYmUgbGl2ZQogICAgICAgICAgICAgICAgIC8vIGJ1dCBoYXMg
bm90IGxvYWRlZCBpdHMgdmFsdWUsIG9yIGl0IGhhcyBsb2FkZWQgaXRzIHZhbHVlLCBpbgogICAg
ICAgICAgICAgICAgIC8vIHdoaWNoIGNhc2Ugd2UncmUgZG9uZS4KLSAgICAgICAgICAgICAgICBu
b2RlSW5kZXggPSBub2RlUHRyLT5jaGlsZDEoKS5pbmRleCgpOwotICAgICAgICAgICAgICAgIE5v
ZGUmIGZsdXNoQ2hpbGQgPSBtX2dyYXBoW25vZGVJbmRleF07Ci0gICAgICAgICAgICAgICAgaWYg
KGZsdXNoQ2hpbGQub3AoKSA9PSBQaGkpIHsKLSAgICAgICAgICAgICAgICAgICAgVmFyaWFibGVB
Y2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBmbHVzaENoaWxkLnZhcmlhYmxlQWNjZXNz
RGF0YSgpOworICAgICAgICAgICAgICAgIG5vZGUgPSBub2RlLT5jaGlsZDEoKS5ub2RlKCk7Cisg
ICAgICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gUGhpKSB7CisgICAgICAgICAgICAgICAg
ICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhID0gbm9kZS0+dmFyaWFi
bGVBY2Nlc3NEYXRhKCk7CiAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlQWNjZXNzRGF0YS0+
bWVyZ2VJc0NhcHR1cmVkKGlzQ2FwdHVyZWQpOwotICAgICAgICAgICAgICAgICAgICBub2RlSW5k
ZXggPSBpbmplY3RMYXp5T3BlcmFuZFNwZWN1bGF0aW9uKGFkZFRvR3JhcGgoR2V0TG9jYWwsIE9w
SW5mbyh2YXJpYWJsZUFjY2Vzc0RhdGEpLCBub2RlSW5kZXgpKTsKLSAgICAgICAgICAgICAgICAg
ICAgbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5hcmd1bWVudChhcmd1bWVudCkgPSBu
b2RlSW5kZXg7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBub2RlSW5kZXg7CisgICAgICAg
ICAgICAgICAgICAgIG5vZGUgPSBpbmplY3RMYXp5T3BlcmFuZFNwZWN1bGF0aW9uKGFkZFRvR3Jh
cGgoR2V0TG9jYWwsIE9wSW5mbyh2YXJpYWJsZUFjY2Vzc0RhdGEpLCBub2RlKSk7CisgICAgICAg
ICAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwuYXJndW1lbnQoYXJn
dW1lbnQpID0gbm9kZTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGU7CiAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIG5vZGVQdHIgPSAmZmx1c2hDaGlsZDsKICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAgICAgICAgQVNTRVJUKCZtX2dyYXBoW25vZGVJ
bmRleF0gPT0gbm9kZVB0cik7Ci0gICAgICAgICAgICBBU1NFUlQobm9kZVB0ci0+b3AoKSAhPSBG
bHVzaCk7CisgICAgICAgICAgICBBU1NFUlQobm9kZS0+b3AoKSAhPSBGbHVzaCk7CiAgICAgICAg
ICAgICAKLSAgICAgICAgICAgIG5vZGVQdHItPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5tZXJnZUlz
Q2FwdHVyZWQoaXNDYXB0dXJlZCk7CisgICAgICAgICAgICBub2RlLT52YXJpYWJsZUFjY2Vzc0Rh
dGEoKS0+bWVyZ2VJc0NhcHR1cmVkKGlzQ2FwdHVyZWQpOwogICAgICAgICAgICAgCi0gICAgICAg
ICAgICBpZiAobm9kZVB0ci0+b3AoKSA9PSBTZXRBcmd1bWVudCkgeworICAgICAgICAgICAgaWYg
KG5vZGUtPm9wKCkgPT0gU2V0QXJndW1lbnQpIHsKICAgICAgICAgICAgICAgICAvLyBXZSdyZSBn
ZXR0aW5nIGFuIGFyZ3VtZW50IGluIHRoZSBmaXJzdCBiYXNpYyBibG9jazsgbGluawogICAgICAg
ICAgICAgICAgIC8vIHRoZSBHZXRMb2NhbCB0byB0aGUgU2V0QXJndW1lbnQuCi0gICAgICAgICAg
ICAgICAgQVNTRVJUKG5vZGVQdHItPmxvY2FsKCkgPT0gc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lz
dGVyPihvcGVyYW5kKSk7Ci0gICAgICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJp
YWJsZSA9IG5vZGVQdHItPnZhcmlhYmxlQWNjZXNzRGF0YSgpOwotICAgICAgICAgICAgICAgIG5v
ZGVJbmRleCA9IGluamVjdExhenlPcGVyYW5kU3BlY3VsYXRpb24oYWRkVG9HcmFwaChHZXRMb2Nh
bCwgT3BJbmZvKHZhcmlhYmxlKSwgbm9kZUluZGV4KSk7Ci0gICAgICAgICAgICAgICAgbV9jdXJy
ZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5hcmd1bWVudChhcmd1bWVudCkgPSBub2RlSW5kZXg7
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG5vZGVJbmRleDsKKyAgICAgICAgICAgICAgICBBU1NF
UlQobm9kZS0+bG9jYWwoKSA9PSBzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KG9wZXJhbmQp
KTsKKyAgICAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbm9kZS0+
dmFyaWFibGVBY2Nlc3NEYXRhKCk7CisgICAgICAgICAgICAgICAgbm9kZSA9IGluamVjdExhenlP
cGVyYW5kU3BlY3VsYXRpb24oYWRkVG9HcmFwaChHZXRMb2NhbCwgT3BJbmZvKHZhcmlhYmxlKSwg
bm9kZSkpOworICAgICAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwu
YXJndW1lbnQoYXJndW1lbnQpID0gbm9kZTsKKyAgICAgICAgICAgICAgICByZXR1cm4gbm9kZTsK
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKGlzQ2FwdHVyZWQp
IHsKLSAgICAgICAgICAgICAgICBpZiAobm9kZVB0ci0+b3AoKSA9PSBHZXRMb2NhbCkKLSAgICAg
ICAgICAgICAgICAgICAgbm9kZUluZGV4ID0gbm9kZVB0ci0+Y2hpbGQxKCkuaW5kZXgoKTsKLSAg
ICAgICAgICAgICAgICByZXR1cm4gaW5qZWN0TGF6eU9wZXJhbmRTcGVjdWxhdGlvbihhZGRUb0dy
YXBoKEdldExvY2FsLCBPcEluZm8obm9kZVB0ci0+dmFyaWFibGVBY2Nlc3NEYXRhKCkpLCBub2Rl
SW5kZXgpKTsKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBHZXRMb2NhbCkKKyAg
ICAgICAgICAgICAgICAgICAgbm9kZSA9IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gaW5qZWN0TGF6eU9wZXJhbmRTcGVjdWxhdGlvbihhZGRUb0dyYXBoKEdl
dExvY2FsLCBPcEluZm8obm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCkpLCBub2RlKSk7CiAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChub2RlUHRyLT5vcCgpID09
IEdldExvY2FsKQotICAgICAgICAgICAgICAgIHJldHVybiBub2RlSW5kZXg7CisgICAgICAgICAg
ICBpZiAobm9kZS0+b3AoKSA9PSBHZXRMb2NhbCkKKyAgICAgICAgICAgICAgICByZXR1cm4gbm9k
ZTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgQVNTRVJUKG5vZGVQdHItPm9wKCkgPT0gU2V0
TG9jYWwpOwotICAgICAgICAgICAgcmV0dXJuIG5vZGVQdHItPmNoaWxkMSgpLmluZGV4KCk7Cisg
ICAgICAgICAgICBBU1NFUlQobm9kZS0+b3AoKSA9PSBTZXRMb2NhbCk7CisgICAgICAgICAgICBy
ZXR1cm4gbm9kZS0+Y2hpbGQxKCkubm9kZSgpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAg
ICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9IG5ld1ZhcmlhYmxlQWNj
ZXNzRGF0YShvcGVyYW5kLCBpc0NhcHR1cmVkKTsKIAotICAgICAgICBOb2RlSW5kZXggcGhpID0g
YWRkVG9HcmFwaChQaGksIE9wSW5mbyh2YXJpYWJsZUFjY2Vzc0RhdGEpKTsKKyAgICAgICAgTm9k
ZSogcGhpID0gYWRkVG9HcmFwaChQaGksIE9wSW5mbyh2YXJpYWJsZUFjY2Vzc0RhdGEpKTsKICAg
ICAgICAgbV9hcmd1bWVudFBoaVN0YWNrLmFwcGVuZChQaGlTdGFja0VudHJ5KG1fY3VycmVudEJs
b2NrLCBwaGksIGFyZ3VtZW50KSk7Ci0gICAgICAgIG5vZGVJbmRleCA9IGluamVjdExhenlPcGVy
YW5kU3BlY3VsYXRpb24oYWRkVG9HcmFwaChHZXRMb2NhbCwgT3BJbmZvKHZhcmlhYmxlQWNjZXNz
RGF0YSksIHBoaSkpOwotICAgICAgICBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLmFy
Z3VtZW50KGFyZ3VtZW50KSA9IG5vZGVJbmRleDsKKyAgICAgICAgbm9kZSA9IGluamVjdExhenlP
cGVyYW5kU3BlY3VsYXRpb24oYWRkVG9HcmFwaChHZXRMb2NhbCwgT3BJbmZvKHZhcmlhYmxlQWNj
ZXNzRGF0YSksIHBoaSkpOworICAgICAgICBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWls
LmFyZ3VtZW50KGFyZ3VtZW50KSA9IG5vZGU7CiAgICAgICAgIAotICAgICAgICBtX2N1cnJlbnRC
bG9jay0+dmFyaWFibGVzQXRIZWFkLnNldEFyZ3VtZW50Rmlyc3RUaW1lKGFyZ3VtZW50LCBub2Rl
SW5kZXgpOworICAgICAgICBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRIZWFkLnNldEFyZ3Vt
ZW50Rmlyc3RUaW1lKGFyZ3VtZW50LCBub2RlKTsKICAgICAgICAgCi0gICAgICAgIHJldHVybiBu
b2RlSW5kZXg7CisgICAgICAgIHJldHVybiBub2RlOwogICAgIH0KLSAgICB2b2lkIHNldEFyZ3Vt
ZW50KGludCBvcGVyYW5kLCBOb2RlSW5kZXggdmFsdWUsIFNldE1vZGUgc2V0TW9kZSA9IE5vcm1h
bFNldCkKKyAgICB2b2lkIHNldEFyZ3VtZW50KGludCBvcGVyYW5kLCBOb2RlKiB2YWx1ZSwgU2V0
TW9kZSBzZXRNb2RlID0gTm9ybWFsU2V0KQogICAgIHsKICAgICAgICAgdW5zaWduZWQgYXJndW1l
bnQgPSBvcGVyYW5kVG9Bcmd1bWVudChvcGVyYW5kKTsKICAgICAgICAgQVNTRVJUKGFyZ3VtZW50
IDwgbV9udW1Bcmd1bWVudHMpOwpAQCAtNDQ0LDggKzQzNSw4IEBAIHByaXZhdGU6CiAgICAgICAg
IFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhID0gbmV3VmFyaWFibGVBY2Nl
c3NEYXRhKG9wZXJhbmQsIGlzQ2FwdHVyZWQpOwogICAgICAgICB2YXJpYWJsZUFjY2Vzc0RhdGEt
Pm1lcmdlU3RydWN0dXJlQ2hlY2tIb2lzdGluZ0ZhaWxlZCgKICAgICAgICAgICAgIG1faW5saW5l
U3RhY2tUb3AtPm1fZXhpdFByb2ZpbGUuaGFzRXhpdFNpdGUobV9jdXJyZW50SW5kZXgsIEJhZENh
Y2hlKSk7Ci0gICAgICAgIE5vZGVJbmRleCBub2RlSW5kZXggPSBhZGRUb0dyYXBoKFNldExvY2Fs
LCBPcEluZm8odmFyaWFibGVBY2Nlc3NEYXRhKSwgdmFsdWUpOwotICAgICAgICBtX2N1cnJlbnRC
bG9jay0+dmFyaWFibGVzQXRUYWlsLmFyZ3VtZW50KGFyZ3VtZW50KSA9IG5vZGVJbmRleDsKKyAg
ICAgICAgTm9kZSogbm9kZSA9IGFkZFRvR3JhcGgoU2V0TG9jYWwsIE9wSW5mbyh2YXJpYWJsZUFj
Y2Vzc0RhdGEpLCB2YWx1ZSk7CisgICAgICAgIG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRh
aWwuYXJndW1lbnQoYXJndW1lbnQpID0gbm9kZTsKICAgICB9CiAgICAgCiAgICAgQXJndW1lbnRQ
b3NpdGlvbiogZmluZEFyZ3VtZW50UG9zaXRpb25Gb3JBcmd1bWVudChpbnQgYXJndW1lbnQpCkBA
IC01MDAsNTUgKzQ5MSw1MyBAQCBwcml2YXRlOgogICAgICAgICAKICAgICAgICAgQVNTRVJUKG9w
ZXJhbmQgPCBGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleCk7CiAgICAgICAgIAotICAgICAgICBO
b2RlSW5kZXggbm9kZUluZGV4OworICAgICAgICBOb2RlKiBub2RlOwogICAgICAgICBpbnQgaW5k
ZXg7CiAgICAgICAgIGlmIChvcGVyYW5kSXNBcmd1bWVudChvcGVyYW5kKSkgewogICAgICAgICAg
ICAgaW5kZXggPSBvcGVyYW5kVG9Bcmd1bWVudChvcGVyYW5kKTsKLSAgICAgICAgICAgIG5vZGVJ
bmRleCA9IG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwuYXJndW1lbnQoaW5kZXgpOwor
ICAgICAgICAgICAgbm9kZSA9IG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwuYXJndW1l
bnQoaW5kZXgpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgaW5kZXggPSBvcGVyYW5k
OwotICAgICAgICAgICAgbm9kZUluZGV4ID0gbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFp
bC5sb2NhbChpbmRleCk7CisgICAgICAgICAgICBub2RlID0gbV9jdXJyZW50QmxvY2stPnZhcmlh
Ymxlc0F0VGFpbC5sb2NhbChpbmRleCk7CiAgICAgICAgICAgICBtX3ByZXNlcnZlZFZhcnMuc2V0
KG9wZXJhbmQpOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBpZiAobm9kZUluZGV4ICE9
IE5vTm9kZSkgewotICAgICAgICAgICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhbbm9kZUluZGV4XTsK
LSAgICAgICAgICAgIHN3aXRjaCAobm9kZS5vcCgpKSB7CisgICAgICAgIGlmIChub2RlKSB7Cisg
ICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKICAgICAgICAgICAgIGNhc2UgRmx1c2g6
Ci0gICAgICAgICAgICAgICAgbm9kZUluZGV4ID0gbm9kZS5jaGlsZDEoKS5pbmRleCgpOworICAg
ICAgICAgICAgICAgIG5vZGUgPSBub2RlLT5jaGlsZDEoKS5ub2RlKCk7CiAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIEdldExvY2FsOgotICAgICAgICAgICAgICAgIG5v
ZGVJbmRleCA9IG5vZGUuY2hpbGQxKCkuaW5kZXgoKTsKKyAgICAgICAgICAgICAgICBub2RlID0g
bm9kZS0+Y2hpbGQxKCkubm9kZSgpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIAotICAgICAgICAgICAgQVNTRVJUKG1fZ3JhcGhbbm9kZUluZGV4XS5vcCgpICE9IEZs
dXNoCi0gICAgICAgICAgICAgICAgICAgJiYgbV9ncmFwaFtub2RlSW5kZXhdLm9wKCkgIT0gR2V0
TG9jYWwpOworICAgICAgICAgICAgQVNTRVJUKG5vZGUtPm9wKCkgIT0gRmx1c2ggJiYgbm9kZS0+
b3AoKSAhPSBHZXRMb2NhbCk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIC8vIEVtaXQgYSBG
bHVzaCByZWdhcmRsZXNzIG9mIHdoZXRoZXIgd2UgYWxyZWFkeSBmbHVzaGVkIGl0LgogICAgICAg
ICAgICAgLy8gVGhpcyBnaXZlcyB1cyBndWlkYW5jZSB0byBzZWUgdGhhdCB0aGUgdmFyaWFibGUg
YWxzbyBuZWVkcyB0byBiZSBmbHVzaGVkCiAgICAgICAgICAgICAvLyBmb3IgYXJndW1lbnRzLCBl
dmVuIGlmIGl0IGFscmVhZHkgaGFkIHRvIGJlIGZsdXNoZWQgZm9yIG90aGVyIHJlYXNvbnMuCi0g
ICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9IG5vZGUu
dmFyaWFibGVBY2Nlc3NEYXRhKCk7CisgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZh
cmlhYmxlQWNjZXNzRGF0YSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOwogICAgICAgICAg
ICAgdmFyaWFibGVBY2Nlc3NEYXRhLT5tZXJnZUlzQ2FwdHVyZWQoaXNDYXB0dXJlZCk7Ci0gICAg
ICAgICAgICBhZGRUb0dyYXBoKEZsdXNoLCBPcEluZm8odmFyaWFibGVBY2Nlc3NEYXRhKSwgbm9k
ZUluZGV4KTsKKyAgICAgICAgICAgIGFkZFRvR3JhcGgoRmx1c2gsIE9wSW5mbyh2YXJpYWJsZUFj
Y2Vzc0RhdGEpLCBub2RlKTsKICAgICAgICAgICAgIGlmIChhcmd1bWVudFBvc2l0aW9uKQogICAg
ICAgICAgICAgICAgIGFyZ3VtZW50UG9zaXRpb24tPmFkZFZhcmlhYmxlKHZhcmlhYmxlQWNjZXNz
RGF0YSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAg
IFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhID0gbmV3VmFyaWFibGVBY2Nl
c3NEYXRhKG9wZXJhbmQsIGlzQ2FwdHVyZWQpOwotICAgICAgICBOb2RlSW5kZXggcGhpID0gYWRk
VG9HcmFwaChQaGksIE9wSW5mbyh2YXJpYWJsZUFjY2Vzc0RhdGEpKTsKLSAgICAgICAgbm9kZUlu
ZGV4ID0gYWRkVG9HcmFwaChGbHVzaCwgT3BJbmZvKHZhcmlhYmxlQWNjZXNzRGF0YSksIHBoaSk7
CisgICAgICAgIE5vZGUqIHBoaSA9IGFkZFRvR3JhcGgoUGhpLCBPcEluZm8odmFyaWFibGVBY2Nl
c3NEYXRhKSk7CisgICAgICAgIG5vZGUgPSBhZGRUb0dyYXBoKEZsdXNoLCBPcEluZm8odmFyaWFi
bGVBY2Nlc3NEYXRhKSwgcGhpKTsKICAgICAgICAgaWYgKG9wZXJhbmRJc0FyZ3VtZW50KG9wZXJh
bmQpKSB7CiAgICAgICAgICAgICBtX2FyZ3VtZW50UGhpU3RhY2suYXBwZW5kKFBoaVN0YWNrRW50
cnkobV9jdXJyZW50QmxvY2ssIHBoaSwgaW5kZXgpKTsKLSAgICAgICAgICAgIG1fY3VycmVudEJs
b2NrLT52YXJpYWJsZXNBdFRhaWwuYXJndW1lbnQoaW5kZXgpID0gbm9kZUluZGV4OwotICAgICAg
ICAgICAgbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0SGVhZC5zZXRBcmd1bWVudEZpcnN0VGlt
ZShpbmRleCwgbm9kZUluZGV4KTsKKyAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT52YXJpYWJs
ZXNBdFRhaWwuYXJndW1lbnQoaW5kZXgpID0gbm9kZTsKKyAgICAgICAgICAgIG1fY3VycmVudEJs
b2NrLT52YXJpYWJsZXNBdEhlYWQuc2V0QXJndW1lbnRGaXJzdFRpbWUoaW5kZXgsIG5vZGUpOwog
ICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgbV9sb2NhbFBoaVN0YWNrLmFwcGVuZChQaGlT
dGFja0VudHJ5KG1fY3VycmVudEJsb2NrLCBwaGksIGluZGV4KSk7Ci0gICAgICAgICAgICBtX2N1
cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLmxvY2FsKGluZGV4KSA9IG5vZGVJbmRleDsKLSAg
ICAgICAgICAgIG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdEhlYWQuc2V0TG9jYWxGaXJzdFRp
bWUoaW5kZXgsIG5vZGVJbmRleCk7CisgICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+dmFyaWFi
bGVzQXRUYWlsLmxvY2FsKGluZGV4KSA9IG5vZGU7CisgICAgICAgICAgICBtX2N1cnJlbnRCbG9j
ay0+dmFyaWFibGVzQXRIZWFkLnNldExvY2FsRmlyc3RUaW1lKGluZGV4LCBub2RlKTsKICAgICAg
ICAgfQogICAgICAgICBpZiAoYXJndW1lbnRQb3NpdGlvbikKICAgICAgICAgICAgIGFyZ3VtZW50
UG9zaXRpb24tPmFkZFZhcmlhYmxlKHZhcmlhYmxlQWNjZXNzRGF0YSk7CkBAIC01NzEsMzUgKzU2
MCwzMyBAQCBwcml2YXRlOgogICAgIH0KIAogICAgIC8vIEdldCBhbiBvcGVyYW5kLCBhbmQgcGVy
Zm9ybSBhIFRvSW50MzIvVG9OdW1iZXIgY29udmVyc2lvbiBvbiBpdC4KLSAgICBOb2RlSW5kZXgg
Z2V0VG9JbnQzMihpbnQgb3BlcmFuZCkKKyAgICBOb2RlKiBnZXRUb0ludDMyKGludCBvcGVyYW5k
KQogICAgIHsKICAgICAgICAgcmV0dXJuIHRvSW50MzIoZ2V0KG9wZXJhbmQpKTsKICAgICB9CiAK
ICAgICAvLyBQZXJmb3JtIGFuIEVTNSBUb0ludDMyIG9wZXJhdGlvbiAtIHJldHVybnMgYSBub2Rl
IG9mIHR5cGUgTm9kZVJlc3VsdEludDMyLgotICAgIE5vZGVJbmRleCB0b0ludDMyKE5vZGVJbmRl
eCBpbmRleCkKKyAgICBOb2RlKiB0b0ludDMyKE5vZGUqIG5vZGUpCiAgICAgewotICAgICAgICBO
b2RlJiBub2RlID0gbV9ncmFwaFtpbmRleF07CisgICAgICAgIGlmIChub2RlLT5oYXNJbnQzMlJl
c3VsdCgpKQorICAgICAgICAgICAgcmV0dXJuIG5vZGU7CiAKLSAgICAgICAgaWYgKG5vZGUuaGFz
SW50MzJSZXN1bHQoKSkKLSAgICAgICAgICAgIHJldHVybiBpbmRleDsKLQotICAgICAgICBpZiAo
bm9kZS5vcCgpID09IFVJbnQzMlRvTnVtYmVyKQotICAgICAgICAgICAgcmV0dXJuIG5vZGUuY2hp
bGQxKCkuaW5kZXgoKTsKKyAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gVUludDMyVG9OdW1iZXIp
CisgICAgICAgICAgICByZXR1cm4gbm9kZS0+Y2hpbGQxKCkubm9kZSgpOwogCiAgICAgICAgIC8v
IENoZWNrIGZvciBudW1lcmljIGNvbnN0YW50cyBib3hlZCBhcyBKU1ZhbHVlcy4KLSAgICAgICAg
aWYgKG5vZGUub3AoKSA9PSBKU0NvbnN0YW50KSB7Ci0gICAgICAgICAgICBKU1ZhbHVlIHYgPSB2
YWx1ZU9mSlNDb25zdGFudChpbmRleCk7CisgICAgICAgIGlmIChub2RlLT5vcCgpID09IEpTQ29u
c3RhbnQpIHsKKyAgICAgICAgICAgIEpTVmFsdWUgdiA9IHZhbHVlT2ZKU0NvbnN0YW50KG5vZGUp
OwogICAgICAgICAgICAgaWYgKHYuaXNJbnQzMigpKQotICAgICAgICAgICAgICAgIHJldHVybiBn
ZXRKU0NvbnN0YW50KG5vZGUuY29uc3RhbnROdW1iZXIoKSk7CisgICAgICAgICAgICAgICAgcmV0
dXJuIGdldEpTQ29uc3RhbnQobm9kZS0+Y29uc3RhbnROdW1iZXIoKSk7CiAgICAgICAgICAgICBp
ZiAodi5pc051bWJlcigpKQogICAgICAgICAgICAgICAgIHJldHVybiBnZXRKU0NvbnN0YW50Rm9y
VmFsdWUoSlNWYWx1ZShKU0M6OnRvSW50MzIodi5hc051bWJlcigpKSkpOwogICAgICAgICB9CiAK
LSAgICAgICAgcmV0dXJuIGFkZFRvR3JhcGgoVmFsdWVUb0ludDMyLCBpbmRleCk7CisgICAgICAg
IHJldHVybiBhZGRUb0dyYXBoKFZhbHVlVG9JbnQzMiwgbm9kZSk7CiAgICAgfQogCi0gICAgTm9k
ZUluZGV4IGdldEpTQ29uc3RhbnRGb3JWYWx1ZShKU1ZhbHVlIGNvbnN0YW50VmFsdWUpCisgICAg
Tm9kZSogZ2V0SlNDb25zdGFudEZvclZhbHVlKEpTVmFsdWUgY29uc3RhbnRWYWx1ZSkKICAgICB7
CiAgICAgICAgIHVuc2lnbmVkIGNvbnN0YW50SW5kZXggPSBtX2NvZGVCbG9jay0+YWRkT3JGaW5k
Q29uc3RhbnQoY29uc3RhbnRWYWx1ZSk7CiAgICAgICAgIGlmIChjb25zdGFudEluZGV4ID49IG1f
Y29uc3RhbnRzLnNpemUoKSkKQEAgLTYxMCw1NSArNTk3LDU1IEBAIHByaXZhdGU6CiAgICAgICAg
IHJldHVybiBnZXRKU0NvbnN0YW50KGNvbnN0YW50SW5kZXgpOwogICAgIH0KIAotICAgIE5vZGVJ
bmRleCBnZXRKU0NvbnN0YW50KHVuc2lnbmVkIGNvbnN0YW50KQorICAgIE5vZGUqIGdldEpTQ29u
c3RhbnQodW5zaWduZWQgY29uc3RhbnQpCiAgICAgewotICAgICAgICBOb2RlSW5kZXggaW5kZXgg
PSBtX2NvbnN0YW50c1tjb25zdGFudF0uYXNKU1ZhbHVlOwotICAgICAgICBpZiAoaW5kZXggIT0g
Tm9Ob2RlKQotICAgICAgICAgICAgcmV0dXJuIGluZGV4OworICAgICAgICBOb2RlKiBub2RlID0g
bV9jb25zdGFudHNbY29uc3RhbnRdLmFzSlNWYWx1ZTsKKyAgICAgICAgaWYgKG5vZGUpCisgICAg
ICAgICAgICByZXR1cm4gbm9kZTsKIAotICAgICAgICBOb2RlSW5kZXggcmVzdWx0SW5kZXggPSBh
ZGRUb0dyYXBoKEpTQ29uc3RhbnQsIE9wSW5mbyhjb25zdGFudCkpOwotICAgICAgICBtX2NvbnN0
YW50c1tjb25zdGFudF0uYXNKU1ZhbHVlID0gcmVzdWx0SW5kZXg7Ci0gICAgICAgIHJldHVybiBy
ZXN1bHRJbmRleDsKKyAgICAgICAgTm9kZSogcmVzdWx0ID0gYWRkVG9HcmFwaChKU0NvbnN0YW50
LCBPcEluZm8oY29uc3RhbnQpKTsKKyAgICAgICAgbV9jb25zdGFudHNbY29uc3RhbnRdLmFzSlNW
YWx1ZSA9IHJlc3VsdDsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKLSAgICBOb2Rl
SW5kZXggZ2V0Q2FsbGVlKCkKKyAgICBOb2RlKiBnZXRDYWxsZWUoKQogICAgIHsKICAgICAgICAg
cmV0dXJuIGFkZFRvR3JhcGgoR2V0Q2FsbGVlKTsKICAgICB9CiAKICAgICAvLyBIZWxwZXIgZnVu
Y3Rpb25zIHRvIGdldC9zZXQgdGhlIHRoaXMgdmFsdWUuCi0gICAgTm9kZUluZGV4IGdldFRoaXMo
KQorICAgIE5vZGUqIGdldFRoaXMoKQogICAgIHsKICAgICAgICAgcmV0dXJuIGdldChtX2lubGlu
ZVN0YWNrVG9wLT5tX2NvZGVCbG9jay0+dGhpc1JlZ2lzdGVyKCkpOwogICAgIH0KLSAgICB2b2lk
IHNldFRoaXMoTm9kZUluZGV4IHZhbHVlKQorICAgIHZvaWQgc2V0VGhpcyhOb2RlKiB2YWx1ZSkK
ICAgICB7CiAgICAgICAgIHNldChtX2lubGluZVN0YWNrVG9wLT5tX2NvZGVCbG9jay0+dGhpc1Jl
Z2lzdGVyKCksIHZhbHVlKTsKICAgICB9CiAKICAgICAvLyBDb252ZW5pZW5jZSBtZXRob2RzIGZv
ciBjaGVja2luZyBub2RlcyBmb3IgY29uc3RhbnRzLgotICAgIGJvb2wgaXNKU0NvbnN0YW50KE5v
ZGVJbmRleCBpbmRleCkKKyAgICBib29sIGlzSlNDb25zdGFudChOb2RlKiBub2RlKQogICAgIHsK
LSAgICAgICAgcmV0dXJuIG1fZ3JhcGhbaW5kZXhdLm9wKCkgPT0gSlNDb25zdGFudDsKKyAgICAg
ICAgcmV0dXJuIG5vZGUtPm9wKCkgPT0gSlNDb25zdGFudDsKICAgICB9Ci0gICAgYm9vbCBpc0lu
dDMyQ29uc3RhbnQoTm9kZUluZGV4IG5vZGVJbmRleCkKKyAgICBib29sIGlzSW50MzJDb25zdGFu
dChOb2RlKiBub2RlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGlzSlNDb25zdGFudChub2RlSW5k
ZXgpICYmIHZhbHVlT2ZKU0NvbnN0YW50KG5vZGVJbmRleCkuaXNJbnQzMigpOworICAgICAgICBy
ZXR1cm4gaXNKU0NvbnN0YW50KG5vZGUpICYmIHZhbHVlT2ZKU0NvbnN0YW50KG5vZGUpLmlzSW50
MzIoKTsKICAgICB9CiAgICAgLy8gQ29udmVuaWVuY2UgbWV0aG9kcyBmb3IgZ2V0dGluZyBjb25z
dGFudCB2YWx1ZXMuCi0gICAgSlNWYWx1ZSB2YWx1ZU9mSlNDb25zdGFudChOb2RlSW5kZXggaW5k
ZXgpCisgICAgSlNWYWx1ZSB2YWx1ZU9mSlNDb25zdGFudChOb2RlKiBub2RlKQogICAgIHsKLSAg
ICAgICAgQVNTRVJUKGlzSlNDb25zdGFudChpbmRleCkpOwotICAgICAgICByZXR1cm4gbV9jb2Rl
QmxvY2stPmdldENvbnN0YW50KEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4ICsgbV9ncmFwaFtp
bmRleF0uY29uc3RhbnROdW1iZXIoKSk7CisgICAgICAgIEFTU0VSVChpc0pTQ29uc3RhbnQobm9k
ZSkpOworICAgICAgICByZXR1cm4gbV9jb2RlQmxvY2stPmdldENvbnN0YW50KEZpcnN0Q29uc3Rh
bnRSZWdpc3RlckluZGV4ICsgbm9kZS0+Y29uc3RhbnROdW1iZXIoKSk7CiAgICAgfQotICAgIGlu
dDMyX3QgdmFsdWVPZkludDMyQ29uc3RhbnQoTm9kZUluZGV4IG5vZGVJbmRleCkKKyAgICBpbnQz
Ml90IHZhbHVlT2ZJbnQzMkNvbnN0YW50KE5vZGUqIG5vZGUpCiAgICAgewotICAgICAgICBBU1NF
UlQoaXNJbnQzMkNvbnN0YW50KG5vZGVJbmRleCkpOwotICAgICAgICByZXR1cm4gdmFsdWVPZkpT
Q29uc3RhbnQobm9kZUluZGV4KS5hc0ludDMyKCk7CisgICAgICAgIEFTU0VSVChpc0ludDMyQ29u
c3RhbnQobm9kZSkpOworICAgICAgICByZXR1cm4gdmFsdWVPZkpTQ29uc3RhbnQobm9kZSkuYXNJ
bnQzMigpOwogICAgIH0KICAgICAKICAgICAvLyBUaGlzIG1ldGhvZCByZXR1cm5zIGEgSlNDb25z
dGFudCB3aXRoIHRoZSB2YWx1ZSAndW5kZWZpbmVkJy4KLSAgICBOb2RlSW5kZXggY29uc3RhbnRV
bmRlZmluZWQoKQorICAgIE5vZGUqIGNvbnN0YW50VW5kZWZpbmVkKCkKICAgICB7CiAgICAgICAg
IC8vIEhhcyBtX2NvbnN0YW50VW5kZWZpbmVkIGJlZW4gc2V0IHVwIHlldD8KICAgICAgICAgaWYg
KG1fY29uc3RhbnRVbmRlZmluZWQgPT0gVUlOVF9NQVgpIHsKQEAgLTY4Myw3ICs2NzAsNyBAQCBw
cml2YXRlOgogICAgIH0KIAogICAgIC8vIFRoaXMgbWV0aG9kIHJldHVybnMgYSBKU0NvbnN0YW50
IHdpdGggdGhlIHZhbHVlICdudWxsJy4KLSAgICBOb2RlSW5kZXggY29uc3RhbnROdWxsKCkKKyAg
ICBOb2RlKiBjb25zdGFudE51bGwoKQogICAgIHsKICAgICAgICAgLy8gSGFzIG1fY29uc3RhbnRO
dWxsIGJlZW4gc2V0IHVwIHlldD8KICAgICAgICAgaWYgKG1fY29uc3RhbnROdWxsID09IFVJTlRf
TUFYKSB7CkBAIC03MDgsNyArNjk1LDcgQEAgcHJpdmF0ZToKICAgICB9CiAKICAgICAvLyBUaGlz
IG1ldGhvZCByZXR1cm5zIGEgRG91YmxlQ29uc3RhbnQgd2l0aCB0aGUgdmFsdWUgMS4KLSAgICBO
b2RlSW5kZXggb25lKCkKKyAgICBOb2RlKiBvbmUoKQogICAgIHsKICAgICAgICAgLy8gSGFzIG1f
Y29uc3RhbnQxIGJlZW4gc2V0IHVwIHlldD8KICAgICAgICAgaWYgKG1fY29uc3RhbnQxID09IFVJ
TlRfTUFYKSB7CkBAIC03MzQsNyArNzIxLDcgQEAgcHJpdmF0ZToKICAgICB9CiAgICAgCiAgICAg
Ly8gVGhpcyBtZXRob2QgcmV0dXJucyBhIERvdWJsZUNvbnN0YW50IHdpdGggdGhlIHZhbHVlIE5h
Ti4KLSAgICBOb2RlSW5kZXggY29uc3RhbnROYU4oKQorICAgIE5vZGUqIGNvbnN0YW50TmFOKCkK
ICAgICB7CiAgICAgICAgIEpTVmFsdWUgbmFuID0ganNOYU4oKTsKICAgICAgICAgCkBAIC03NjEs
OSArNzQ4LDkgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIGdldEpTQ29uc3RhbnQobV9jb25z
dGFudE5hTik7CiAgICAgfQogICAgIAotICAgIE5vZGVJbmRleCBjZWxsQ29uc3RhbnQoSlNDZWxs
KiBjZWxsKQorICAgIE5vZGUqIGNlbGxDb25zdGFudChKU0NlbGwqIGNlbGwpCiAgICAgewotICAg
ICAgICBIYXNoTWFwPEpTQ2VsbCosIE5vZGVJbmRleD46OkFkZFJlc3VsdCByZXN1bHQgPSBtX2Nl
bGxDb25zdGFudE5vZGVzLmFkZChjZWxsLCBOb05vZGUpOworICAgICAgICBIYXNoTWFwPEpTQ2Vs
bCosIE5vZGVJbmRleD46OkFkZFJlc3VsdCByZXN1bHQgPSBtX2NlbGxDb25zdGFudE5vZGVzLmFk
ZChjZWxsLCAwKTsKICAgICAgICAgaWYgKHJlc3VsdC5pc05ld0VudHJ5KQogICAgICAgICAgICAg
cmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IGFkZFRvR3JhcGgoV2Vha0pTQ29uc3RhbnQsIE9wSW5m
byhjZWxsKSk7CiAgICAgICAgIApAQCAtNzc3LDYzICs3NjQsNjkgQEAgcHJpdmF0ZToKIAogICAg
IC8vIFRoZXNlIG1ldGhvZHMgY3JlYXRlIGEgbm9kZSBhbmQgYWRkIGl0IHRvIHRoZSBncmFwaC4g
SWYgbm9kZXMgb2YgdGhpcyB0eXBlIGFyZQogICAgIC8vICdtdXN0R2VuZXJhdGUnIHRoZW4gdGhl
IG5vZGUgIHdpbGwgaW1wbGljaXRseSBiZSByZWYnZWQgdG8gZW5zdXJlIGdlbmVyYXRpb24uCi0g
ICAgTm9kZUluZGV4IGFkZFRvR3JhcGgoTm9kZVR5cGUgb3AsIE5vZGVJbmRleCBjaGlsZDEgPSBO
b05vZGUsIE5vZGVJbmRleCBjaGlsZDIgPSBOb05vZGUsIE5vZGVJbmRleCBjaGlsZDMgPSBOb05v
ZGUpCisgICAgTm9kZSogYWRkVG9HcmFwaChOb2RlVHlwZSBvcCwgTm9kZSogY2hpbGQxID0gMCwg
Tm9kZSogY2hpbGQyID0gMCwgTm9kZSogY2hpbGQzID0gMCkKICAgICB7Ci0gICAgICAgIE5vZGVJ
bmRleCByZXN1bHRJbmRleCA9IChOb2RlSW5kZXgpbV9ncmFwaC5zaXplKCk7Ci0gICAgICAgIG1f
Z3JhcGguYXBwZW5kKE5vZGUob3AsIGN1cnJlbnRDb2RlT3JpZ2luKCksIGNoaWxkMSwgY2hpbGQy
LCBjaGlsZDMpKTsKKyAgICAgICAgTm9kZSogcmVzdWx0ID0gbV9ncmFwaC5hZGROb2RlKAorICAg
ICAgICAgICAgRG9udFJlZkNoaWxkcmVuLCBEb250UmVmTm9kZSwgU3BlY05vbmUsCisgICAgICAg
ICAgICBvcCwgY3VycmVudENvZGVPcmlnaW4oKSwgY2hpbGQxLCBjaGlsZDIsIGNoaWxkMyk7CiAg
ICAgICAgIEFTU0VSVChvcCAhPSBQaGkpOwotICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5k
KHJlc3VsdEluZGV4KTsKKyAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZChyZXN1bHQpOwog
CiAgICAgICAgIGlmIChkZWZhdWx0RmxhZ3Mob3ApICYgTm9kZU11c3RHZW5lcmF0ZSkKLSAgICAg
ICAgICAgIG1fZ3JhcGgucmVmKHJlc3VsdEluZGV4KTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdElu
ZGV4OworICAgICAgICAgICAgbV9ncmFwaC5yZWYocmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIHJl
c3VsdDsKICAgICB9Ci0gICAgTm9kZUluZGV4IGFkZFRvR3JhcGgoTm9kZVR5cGUgb3AsIE9wSW5m
byBpbmZvLCBOb2RlSW5kZXggY2hpbGQxID0gTm9Ob2RlLCBOb2RlSW5kZXggY2hpbGQyID0gTm9O
b2RlLCBOb2RlSW5kZXggY2hpbGQzID0gTm9Ob2RlKQorICAgIE5vZGUqIGFkZFRvR3JhcGgoTm9k
ZVR5cGUgb3AsIE9wSW5mbyBpbmZvLCBOb2RlKiBjaGlsZDEgPSAwLCBOb2RlKiBjaGlsZDIgPSAw
LCBOb2RlKiBjaGlsZDMgPSAwKQogICAgIHsKLSAgICAgICAgTm9kZUluZGV4IHJlc3VsdEluZGV4
ID0gKE5vZGVJbmRleCltX2dyYXBoLnNpemUoKTsKLSAgICAgICAgbV9ncmFwaC5hcHBlbmQoTm9k
ZShvcCwgY3VycmVudENvZGVPcmlnaW4oKSwgaW5mbywgY2hpbGQxLCBjaGlsZDIsIGNoaWxkMykp
OworICAgICAgICBOb2RlKiByZXN1bHQgPSBtX2dyYXBoLmFkZE5vZGUoCisgICAgICAgICAgICBE
b250UmVmQ2hpbGRyZW4sIERvbnRSZWZOb2RlLCBTcGVjTm9uZSwKKyAgICAgICAgICAgIG9wLCBj
dXJyZW50Q29kZU9yaWdpbigpLCBpbmZvLCBjaGlsZDEsIGNoaWxkMiwgY2hpbGQzKTsKICAgICAg
ICAgaWYgKG9wID09IFBoaSkKLSAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT5waGlzLmFwcGVu
ZChyZXN1bHRJbmRleCk7CisgICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+cGhpcy5hcHBlbmQo
cmVzdWx0KTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVu
ZChyZXN1bHRJbmRleCk7CisgICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kKHJlc3Vs
dCk7CiAKICAgICAgICAgaWYgKGRlZmF1bHRGbGFncyhvcCkgJiBOb2RlTXVzdEdlbmVyYXRlKQot
ICAgICAgICAgICAgbV9ncmFwaC5yZWYocmVzdWx0SW5kZXgpOwotICAgICAgICByZXR1cm4gcmVz
dWx0SW5kZXg7CisgICAgICAgICAgICBtX2dyYXBoLnJlZihyZXN1bHQpOworICAgICAgICByZXR1
cm4gcmVzdWx0OwogICAgIH0KLSAgICBOb2RlSW5kZXggYWRkVG9HcmFwaChOb2RlVHlwZSBvcCwg
T3BJbmZvIGluZm8xLCBPcEluZm8gaW5mbzIsIE5vZGVJbmRleCBjaGlsZDEgPSBOb05vZGUsIE5v
ZGVJbmRleCBjaGlsZDIgPSBOb05vZGUsIE5vZGVJbmRleCBjaGlsZDMgPSBOb05vZGUpCisgICAg
Tm9kZSogYWRkVG9HcmFwaChOb2RlVHlwZSBvcCwgT3BJbmZvIGluZm8xLCBPcEluZm8gaW5mbzIs
IE5vZGUqIGNoaWxkMSA9IDAsIE5vZGUqIGNoaWxkMiA9IDAsIE5vZGUqIGNoaWxkMyA9IDApCiAg
ICAgewotICAgICAgICBOb2RlSW5kZXggcmVzdWx0SW5kZXggPSAoTm9kZUluZGV4KW1fZ3JhcGgu
c2l6ZSgpOwotICAgICAgICBtX2dyYXBoLmFwcGVuZChOb2RlKG9wLCBjdXJyZW50Q29kZU9yaWdp
bigpLCBpbmZvMSwgaW5mbzIsIGNoaWxkMSwgY2hpbGQyLCBjaGlsZDMpKTsKKyAgICAgICAgTm9k
ZSogcmVzdWx0ID0gbV9ncmFwaC5hZGROb2RlKAorICAgICAgICAgICAgRG9udFJlZkNoaWxkcmVu
LCBEb250UmVmTm9kZSwgU3BlY05vbmUsCisgICAgICAgICAgICBvcCwgY3VycmVudENvZGVPcmln
aW4oKSwgaW5mbzEsIGluZm8yLCBjaGlsZDEsIGNoaWxkMiwgY2hpbGQzKTsKICAgICAgICAgQVNT
RVJUKG9wICE9IFBoaSk7Ci0gICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmQocmVzdWx0SW5k
ZXgpOworICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kKHJlc3VsdCk7CiAKICAgICAgICAg
aWYgKGRlZmF1bHRGbGFncyhvcCkgJiBOb2RlTXVzdEdlbmVyYXRlKQotICAgICAgICAgICAgbV9n
cmFwaC5yZWYocmVzdWx0SW5kZXgpOwotICAgICAgICByZXR1cm4gcmVzdWx0SW5kZXg7CisgICAg
ICAgICAgICBtX2dyYXBoLnJlZihyZXN1bHQpOworICAgICAgICByZXR1cm4gcmVzdWx0OwogICAg
IH0KICAgICAKLSAgICBOb2RlSW5kZXggYWRkVG9HcmFwaChOb2RlOjpWYXJBcmdUYWcsIE5vZGVU
eXBlIG9wLCBPcEluZm8gaW5mbzEsIE9wSW5mbyBpbmZvMikKKyAgICBOb2RlKiBhZGRUb0dyYXBo
KE5vZGU6OlZhckFyZ1RhZywgTm9kZVR5cGUgb3AsIE9wSW5mbyBpbmZvMSwgT3BJbmZvIGluZm8y
KQogICAgIHsKLSAgICAgICAgTm9kZUluZGV4IHJlc3VsdEluZGV4ID0gKE5vZGVJbmRleCltX2dy
YXBoLnNpemUoKTsKLSAgICAgICAgbV9ncmFwaC5hcHBlbmQoTm9kZShOb2RlOjpWYXJBcmcsIG9w
LCBjdXJyZW50Q29kZU9yaWdpbigpLCBpbmZvMSwgaW5mbzIsIG1fZ3JhcGgubV92YXJBcmdDaGls
ZHJlbi5zaXplKCkgLSBtX251bVBhc3NlZFZhckFyZ3MsIG1fbnVtUGFzc2VkVmFyQXJncykpOwor
ICAgICAgICBOb2RlKiByZXN1bHQgPSBtX2dyYXBoLmFkZE5vZGUoCisgICAgICAgICAgICBEb250
UmVmQ2hpbGRyZW4sIERvbnRSZWZOb2RlLCBTcGVjTm9uZSwKKyAgICAgICAgICAgIE5vZGU6OlZh
ckFyZywgb3AsIGN1cnJlbnRDb2RlT3JpZ2luKCksIGluZm8xLCBpbmZvMiwKKyAgICAgICAgICAg
IG1fZ3JhcGgubV92YXJBcmdDaGlsZHJlbi5zaXplKCkgLSBtX251bVBhc3NlZFZhckFyZ3MsIG1f
bnVtUGFzc2VkVmFyQXJncyk7CiAgICAgICAgIEFTU0VSVChvcCAhPSBQaGkpOwotICAgICAgICBt
X2N1cnJlbnRCbG9jay0+YXBwZW5kKHJlc3VsdEluZGV4KTsKKyAgICAgICAgbV9jdXJyZW50Qmxv
Y2stPmFwcGVuZChyZXN1bHQpOwogICAgICAgICAKICAgICAgICAgbV9udW1QYXNzZWRWYXJBcmdz
ID0gMDsKICAgICAgICAgCiAgICAgICAgIGlmIChkZWZhdWx0RmxhZ3Mob3ApICYgTm9kZU11c3RH
ZW5lcmF0ZSkKLSAgICAgICAgICAgIG1fZ3JhcGgucmVmKHJlc3VsdEluZGV4KTsKLSAgICAgICAg
cmV0dXJuIHJlc3VsdEluZGV4OworICAgICAgICAgICAgbV9ncmFwaC5yZWYocmVzdWx0KTsKKyAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKLSAgICBOb2RlSW5kZXggaW5zZXJ0UGhpTm9k
ZShPcEluZm8gaW5mbywgQmFzaWNCbG9jayogYmxvY2spCisgICAgTm9kZSogaW5zZXJ0UGhpTm9k
ZShPcEluZm8gaW5mbywgQmFzaWNCbG9jayogYmxvY2spCiAgICAgewotICAgICAgICBOb2RlSW5k
ZXggcmVzdWx0SW5kZXggPSAoTm9kZUluZGV4KW1fZ3JhcGguc2l6ZSgpOwotICAgICAgICBtX2dy
YXBoLmFwcGVuZChOb2RlKFBoaSwgY3VycmVudENvZGVPcmlnaW4oKSwgaW5mbykpOwotICAgICAg
ICBibG9jay0+cGhpcy5hcHBlbmQocmVzdWx0SW5kZXgpOworICAgICAgICBOb2RlKiByZXN1bHQg
PSBtX2dyYXBoLmFkZE5vZGUoCisgICAgICAgICAgICBEb250UmVmQ2hpbGRyZW4sIERvbnRSZWZO
b2RlLCBTcGVjTm9uZSwKKyAgICAgICAgICAgIFBoaSwgY3VycmVudENvZGVPcmlnaW4oKSwgaW5m
byk7CisgICAgICAgIGJsb2NrLT5waGlzLmFwcGVuZChyZXN1bHQpOwogCi0gICAgICAgIHJldHVy
biByZXN1bHRJbmRleDsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKICAgICB2b2lk
IGFkZFZhckFyZ0NoaWxkKE5vZGVJbmRleCBjaGlsZCkKQEAgLTg0Miw3ICs4MzUsNyBAQCBwcml2
YXRlOgogICAgICAgICBtX251bVBhc3NlZFZhckFyZ3MrKzsKICAgICB9CiAgICAgCi0gICAgTm9k
ZUluZGV4IGFkZENhbGwoSW50ZXJwcmV0ZXIqIGludGVycHJldGVyLCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uLCBOb2RlVHlwZSBvcCkKKyAgICBOb2RlKiBhZGRDYWxsKEludGVycHJl
dGVyKiBpbnRlcnByZXRlciwgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgTm9kZVR5
cGUgb3ApCiAgICAgewogICAgICAgICBJbnN0cnVjdGlvbiogcHV0SW5zdHJ1Y3Rpb24gPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24gKyBPUENPREVfTEVOR1RIKG9wX2NhbGwpOwogCkBAIC04NjIsNDggKzg1
NSw0MSBAQCBwcml2YXRlOgogICAgICAgICBmb3IgKGludCBpID0gMCArIGR1bW15VGhpc0FyZ3Vt
ZW50OyBpIDwgYXJnQ291bnQ7ICsraSkKICAgICAgICAgICAgIGFkZFZhckFyZ0NoaWxkKGdldChy
ZWdpc3Rlck9mZnNldCArIGFyZ3VtZW50VG9PcGVyYW5kKGkpKSk7CiAKLSAgICAgICAgTm9kZUlu
ZGV4IGNhbGwgPSBhZGRUb0dyYXBoKE5vZGU6OlZhckFyZywgb3AsIE9wSW5mbygwKSwgT3BJbmZv
KHByZWRpY3Rpb24pKTsKKyAgICAgICAgTm9kZSogY2FsbCA9IGFkZFRvR3JhcGgoTm9kZTo6VmFy
QXJnLCBvcCwgT3BJbmZvKDApLCBPcEluZm8ocHJlZGljdGlvbikpOwogICAgICAgICBpZiAoaW50
ZXJwcmV0ZXItPmdldE9wY29kZUlEKHB1dEluc3RydWN0aW9uLT51Lm9wY29kZSkgPT0gb3BfY2Fs
bF9wdXRfcmVzdWx0KQogICAgICAgICAgICAgc2V0KHB1dEluc3RydWN0aW9uWzFdLnUub3BlcmFu
ZCwgY2FsbCk7CiAgICAgICAgIHJldHVybiBjYWxsOwogICAgIH0KICAgICAKLSAgICBOb2RlSW5k
ZXggYWRkU3RydWN0dXJlVHJhbnNpdGlvbkNoZWNrKEpTQ2VsbCogb2JqZWN0LCBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSkKKyAgICBOb2RlKiBhZGRTdHJ1Y3R1cmVUcmFuc2l0aW9uQ2hlY2soSlNDZWxs
KiBvYmplY3QsIFN0cnVjdHVyZSogc3RydWN0dXJlKQogICAgIHsKICAgICAgICAgLy8gQWRkIGEg
d2VhayBKUyBjb25zdGFudCBmb3IgdGhlIG9iamVjdCByZWdhcmRsZXNzLCBzaW5jZSB0aGUgY29k
ZSBzaG91bGQKICAgICAgICAgLy8gYmUgamV0dGlzb25lZCBpZiB0aGUgb2JqZWN0IGV2ZXIgZGll
cy4KLSAgICAgICAgTm9kZUluZGV4IG9iamVjdEluZGV4ID0gY2VsbENvbnN0YW50KG9iamVjdCk7
CisgICAgICAgIE5vZGUqIG9iamVjdE5vZGUgPSBjZWxsQ29uc3RhbnQob2JqZWN0KTsKICAgICAg
ICAgCiAgICAgICAgIGlmIChvYmplY3QtPnN0cnVjdHVyZSgpID09IHN0cnVjdHVyZSAmJiBzdHJ1
Y3R1cmUtPnRyYW5zaXRpb25XYXRjaHBvaW50U2V0SXNTdGlsbFZhbGlkKCkpIHsKLSAgICAgICAg
ICAgIGFkZFRvR3JhcGgoU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnQsIE9wSW5mbyhzdHJ1
Y3R1cmUpLCBvYmplY3RJbmRleCk7Ci0gICAgICAgICAgICByZXR1cm4gb2JqZWN0SW5kZXg7Cisg
ICAgICAgICAgICBhZGRUb0dyYXBoKFN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50LCBPcElu
Zm8oc3RydWN0dXJlKSwgb2JqZWN0Tm9kZSk7CisgICAgICAgICAgICByZXR1cm4gb2JqZWN0Tm9k
ZTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgYWRkVG9HcmFwaChDaGVja1N0cnVjdHVy
ZSwgT3BJbmZvKG1fZ3JhcGguYWRkU3RydWN0dXJlU2V0KHN0cnVjdHVyZSkpLCBvYmplY3RJbmRl
eCk7CisgICAgICAgIGFkZFRvR3JhcGgoQ2hlY2tTdHJ1Y3R1cmUsIE9wSW5mbyhtX2dyYXBoLmFk
ZFN0cnVjdHVyZVNldChzdHJ1Y3R1cmUpKSwgb2JqZWN0Tm9kZSk7CiAgICAgICAgIAotICAgICAg
ICByZXR1cm4gb2JqZWN0SW5kZXg7CisgICAgICAgIHJldHVybiBvYmplY3ROb2RlOwogICAgIH0K
ICAgICAKLSAgICBOb2RlSW5kZXggYWRkU3RydWN0dXJlVHJhbnNpdGlvbkNoZWNrKEpTQ2VsbCog
b2JqZWN0KQorICAgIE5vZGUqIGFkZFN0cnVjdHVyZVRyYW5zaXRpb25DaGVjayhKU0NlbGwqIG9i
amVjdCkKICAgICB7CiAgICAgICAgIHJldHVybiBhZGRTdHJ1Y3R1cmVUcmFuc2l0aW9uQ2hlY2so
b2JqZWN0LCBvYmplY3QtPnN0cnVjdHVyZSgpKTsKICAgICB9CiAgICAgCi0gICAgU3BlY3VsYXRl
ZFR5cGUgZ2V0UHJlZGljdGlvbldpdGhvdXRPU1JFeGl0KE5vZGVJbmRleCBub2RlSW5kZXgsIHVu
c2lnbmVkIGJ5dGVjb2RlSW5kZXgpCisgICAgU3BlY3VsYXRlZFR5cGUgZ2V0UHJlZGljdGlvbldp
dGhvdXRPU1JFeGl0KHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpCiAgICAgewotICAgICAgICBVTlVT
RURfUEFSQU0obm9kZUluZGV4KTsKLSAgICAgICAgCi0gICAgICAgIFNwZWN1bGF0ZWRUeXBlIHBy
ZWRpY3Rpb24gPSBtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2stPnZhbHVlUHJvZmls
ZVByZWRpY3Rpb25Gb3JCeXRlY29kZU9mZnNldChieXRlY29kZUluZGV4KTsKLSNpZiBERkdfRU5B
QkxFKERFQlVHX1ZFUkJPU0UpCi0gICAgICAgIGRhdGFMb2coIkR5bmFtaWMgW0AiLCBub2RlSW5k
ZXgsICIsIGJjIyIsIGJ5dGVjb2RlSW5kZXgsICJdIHByZWRpY3Rpb246ICIsIFNwZWN1bGF0aW9u
RHVtcChwcmVkaWN0aW9uKSwgIlxuIik7Ci0jZW5kaWYKLSAgICAgICAgCi0gICAgICAgIHJldHVy
biBwcmVkaWN0aW9uOworICAgICAgICByZXR1cm4gbV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxl
ZEJsb2NrLT52YWx1ZVByb2ZpbGVQcmVkaWN0aW9uRm9yQnl0ZWNvZGVPZmZzZXQoYnl0ZWNvZGVJ
bmRleCk7CiAgICAgfQogCi0gICAgU3BlY3VsYXRlZFR5cGUgZ2V0UHJlZGljdGlvbihOb2RlSW5k
ZXggbm9kZUluZGV4LCB1bnNpZ25lZCBieXRlY29kZUluZGV4KQorICAgIFNwZWN1bGF0ZWRUeXBl
IGdldFByZWRpY3Rpb24odW5zaWduZWQgYnl0ZWNvZGVJbmRleCkKICAgICB7Ci0gICAgICAgIFNw
ZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24gPSBnZXRQcmVkaWN0aW9uV2l0aG91dE9TUkV4aXQobm9k
ZUluZGV4LCBieXRlY29kZUluZGV4KTsKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlv
biA9IGdldFByZWRpY3Rpb25XaXRob3V0T1NSRXhpdChieXRlY29kZUluZGV4KTsKICAgICAgICAg
CiAgICAgICAgIGlmIChwcmVkaWN0aW9uID09IFNwZWNOb25lKSB7CiAgICAgICAgICAgICAvLyBX
ZSBoYXZlIG5vIGluZm9ybWF0aW9uIGFib3V0IHdoYXQgdmFsdWVzIHRoaXMgbm9kZSBnZW5lcmF0
ZXMuIEdpdmUgdXAKQEAgLTkxNiwxMiArOTAyLDEyIEBAIHByaXZhdGU6CiAgICAgCiAgICAgU3Bl
Y3VsYXRlZFR5cGUgZ2V0UHJlZGljdGlvbldpdGhvdXRPU1JFeGl0KCkKICAgICB7Ci0gICAgICAg
IHJldHVybiBnZXRQcmVkaWN0aW9uV2l0aG91dE9TUkV4aXQobV9ncmFwaC5zaXplKCksIG1fY3Vy
cmVudFByb2ZpbGluZ0luZGV4KTsKKyAgICAgICAgcmV0dXJuIGdldFByZWRpY3Rpb25XaXRob3V0
T1NSRXhpdChtX2N1cnJlbnRQcm9maWxpbmdJbmRleCk7CiAgICAgfQogICAgIAogICAgIFNwZWN1
bGF0ZWRUeXBlIGdldFByZWRpY3Rpb24oKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGdldFByZWRp
Y3Rpb24obV9ncmFwaC5zaXplKCksIG1fY3VycmVudFByb2ZpbGluZ0luZGV4KTsKKyAgICAgICAg
cmV0dXJuIGdldFByZWRpY3Rpb24obV9jdXJyZW50UHJvZmlsaW5nSW5kZXgpOwogICAgIH0KICAg
ICAKICAgICBBcnJheU1vZGUgZ2V0QXJyYXlNb2RlKEFycmF5UHJvZmlsZSogcHJvZmlsZSwgQXJy
YXk6OkFjdGlvbiBhY3Rpb24pCkBAIC05MzUsNyArOTIxLDcgQEAgcHJpdmF0ZToKICAgICAgICAg
cmV0dXJuIGdldEFycmF5TW9kZShwcm9maWxlLCBBcnJheTo6UmVhZCk7CiAgICAgfQogICAgIAot
ICAgIEFycmF5TW9kZSBnZXRBcnJheU1vZGVBbmRFbWl0Q2hlY2tzKEFycmF5UHJvZmlsZSogcHJv
ZmlsZSwgQXJyYXk6OkFjdGlvbiBhY3Rpb24sIE5vZGVJbmRleCBiYXNlKQorICAgIEFycmF5TW9k
ZSBnZXRBcnJheU1vZGVBbmRFbWl0Q2hlY2tzKEFycmF5UHJvZmlsZSogcHJvZmlsZSwgQXJyYXk6
OkFjdGlvbiBhY3Rpb24sIE5vZGUqIGJhc2UpCiAgICAgewogICAgICAgICBwcm9maWxlLT5jb21w
dXRlVXBkYXRlZFByZWRpY3Rpb24obV9pbmxpbmVTdGFja1RvcC0+bV9jb2RlQmxvY2spOwogICAg
ICAgICAKQEAgLTk1OSwxMiArOTQ1LDEwIEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiByZXN1
bHQ7CiAgICAgfQogICAgIAotICAgIE5vZGVJbmRleCBtYWtlU2FmZShOb2RlSW5kZXggbm9kZUlu
ZGV4KQorICAgIE5vZGUqIG1ha2VTYWZlKE5vZGUqIG5vZGUpCiAgICAgewotICAgICAgICBOb2Rl
JiBub2RlID0gbV9ncmFwaFtub2RlSW5kZXhdOwotICAgICAgICAKICAgICAgICAgYm9vbCBsaWtl
bHlUb1Rha2VTbG93Q2FzZTsKLSAgICAgICAgaWYgKCFpc1g4NigpICYmIG5vZGUub3AoKSA9PSBB
cml0aE1vZCkKKyAgICAgICAgaWYgKCFpc1g4NigpICYmIG5vZGUtPm9wKCkgPT0gQXJpdGhNb2Qp
CiAgICAgICAgICAgICBsaWtlbHlUb1Rha2VTbG93Q2FzZSA9IGZhbHNlOwogICAgICAgICBlbHNl
CiAgICAgICAgICAgICBsaWtlbHlUb1Rha2VTbG93Q2FzZSA9IG1faW5saW5lU3RhY2tUb3AtPm1f
cHJvZmlsZWRCbG9jay0+bGlrZWx5VG9UYWtlU2xvd0Nhc2UobV9jdXJyZW50SW5kZXgpOwpAQCAt
OTcyLDMxICs5NTYsMzEgQEAgcHJpdmF0ZToKICAgICAgICAgaWYgKCFsaWtlbHlUb1Rha2VTbG93
Q2FzZQogICAgICAgICAgICAgJiYgIW1faW5saW5lU3RhY2tUb3AtPm1fZXhpdFByb2ZpbGUuaGFz
RXhpdFNpdGUobV9jdXJyZW50SW5kZXgsIE92ZXJmbG93KQogICAgICAgICAgICAgJiYgIW1faW5s
aW5lU3RhY2tUb3AtPm1fZXhpdFByb2ZpbGUuaGFzRXhpdFNpdGUobV9jdXJyZW50SW5kZXgsIE5l
Z2F0aXZlWmVybykpCi0gICAgICAgICAgICByZXR1cm4gbm9kZUluZGV4OworICAgICAgICAgICAg
cmV0dXJuIG5vZGU7CiAgICAgICAgIAotICAgICAgICBzd2l0Y2ggKG1fZ3JhcGhbbm9kZUluZGV4
XS5vcCgpKSB7CisgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewogICAgICAgICBjYXNlIFVJ
bnQzMlRvTnVtYmVyOgogICAgICAgICBjYXNlIEFyaXRoQWRkOgogICAgICAgICBjYXNlIEFyaXRo
U3ViOgogICAgICAgICBjYXNlIEFyaXRoTmVnYXRlOgogICAgICAgICBjYXNlIFZhbHVlQWRkOgog
ICAgICAgICBjYXNlIEFyaXRoTW9kOiAvLyBmb3IgQXJpdGhNb2QgIk1heU92ZXJmbG93IiBtZWFu
cyB3ZSB0cmllZCB0byBkaXZpZGUgYnkgemVybywgb3Igd2Ugc2F3IGRvdWJsZS4KLSAgICAgICAg
ICAgIG1fZ3JhcGhbbm9kZUluZGV4XS5tZXJnZUZsYWdzKE5vZGVNYXlPdmVyZmxvdyk7CisgICAg
ICAgICAgICBub2RlLT5tZXJnZUZsYWdzKE5vZGVNYXlPdmVyZmxvdyk7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgIAogICAgICAgICBjYXNlIEFyaXRoTXVsOgogICAgICAgICAgICAg
aWYgKG1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jay0+bGlrZWx5VG9UYWtlRGVlcGVz
dFNsb3dDYXNlKG1fY3VycmVudEluZGV4KQogICAgICAgICAgICAgICAgIHx8IG1faW5saW5lU3Rh
Y2tUb3AtPm1fZXhpdFByb2ZpbGUuaGFzRXhpdFNpdGUobV9jdXJyZW50SW5kZXgsIE92ZXJmbG93
KSkgewogI2lmIERGR19FTkFCTEUoREVCVUdfVkVSQk9TRSkKLSAgICAgICAgICAgICAgICBkYXRh
TG9nRigiTWFraW5nIEFyaXRoTXVsIEAldSB0YWtlIGRlZXBlc3Qgc2xvdyBjYXNlLlxuIiwgbm9k
ZUluZGV4KTsKKyAgICAgICAgICAgICAgICBkYXRhTG9nRigiTWFraW5nIEFyaXRoTXVsIEAldSB0
YWtlIGRlZXBlc3Qgc2xvdyBjYXNlLlxuIiwgbm9kZS0+aW5kZXgoKSk7CiAjZW5kaWYKLSAgICAg
ICAgICAgICAgICBtX2dyYXBoW25vZGVJbmRleF0ubWVyZ2VGbGFncyhOb2RlTWF5T3ZlcmZsb3cg
fCBOb2RlTWF5TmVnWmVybyk7CisgICAgICAgICAgICAgICAgbm9kZS0+bWVyZ2VGbGFncyhOb2Rl
TWF5T3ZlcmZsb3cgfCBOb2RlTWF5TmVnWmVybyk7CiAgICAgICAgICAgICB9IGVsc2UgaWYgKG1f
aW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jay0+bGlrZWx5VG9UYWtlU2xvd0Nhc2UobV9j
dXJyZW50SW5kZXgpCiAgICAgICAgICAgICAgICAgICAgICAgIHx8IG1faW5saW5lU3RhY2tUb3At
Pm1fZXhpdFByb2ZpbGUuaGFzRXhpdFNpdGUobV9jdXJyZW50SW5kZXgsIE5lZ2F0aXZlWmVybykp
IHsKICNpZiBERkdfRU5BQkxFKERFQlVHX1ZFUkJPU0UpCi0gICAgICAgICAgICAgICAgZGF0YUxv
Z0YoIk1ha2luZyBBcml0aE11bCBAJXUgdGFrZSBmYXN0ZXIgc2xvdyBjYXNlLlxuIiwgbm9kZUlu
ZGV4KTsKKyAgICAgICAgICAgICAgICBkYXRhTG9nRigiTWFraW5nIEFyaXRoTXVsIEAldSB0YWtl
IGZhc3RlciBzbG93IGNhc2UuXG4iLCBub2RlLT5pbmRleCgpKTsKICNlbmRpZgotICAgICAgICAg
ICAgICAgIG1fZ3JhcGhbbm9kZUluZGV4XS5tZXJnZUZsYWdzKE5vZGVNYXlOZWdaZXJvKTsKKyAg
ICAgICAgICAgICAgICBub2RlLT5tZXJnZUZsYWdzKE5vZGVNYXlOZWdaZXJvKTsKICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCkBAIC0xMDA1LDEyICs5ODks
MTIgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIAot
ICAgICAgICByZXR1cm4gbm9kZUluZGV4OworICAgICAgICByZXR1cm4gbm9kZTsKICAgICB9CiAg
ICAgCi0gICAgTm9kZUluZGV4IG1ha2VEaXZTYWZlKE5vZGVJbmRleCBub2RlSW5kZXgpCisgICAg
Tm9kZSogbWFrZURpdlNhZmUoTm9kZSogbm9kZUluZGV4KQogICAgIHsKLSAgICAgICAgQVNTRVJU
KG1fZ3JhcGhbbm9kZUluZGV4XS5vcCgpID09IEFyaXRoRGl2KTsKKyAgICAgICAgQVNTRVJUKG5v
ZGUtPm9wKCkgPT0gQXJpdGhEaXYpOwogICAgICAgICAKICAgICAgICAgLy8gVGhlIG1haW4gc2xv
dyBjYXNlIGNvdW50ZXIgZm9yIG9wX2RpdiBpbiB0aGUgb2xkIEpJVCBjb3VudHMgb25seSB3aGVu
CiAgICAgICAgIC8vIHRoZSBvcGVyYW5kcyBhcmUgbm90IG51bWJlcnMuIFdlIGRvbid0IGNhcmUg
YWJvdXQgdGhhdCBzaW5jZSB3ZSBhbHJlYWR5CkBAIC0xMDIxLDQwICsxMDA1LDE3IEBAIHByaXZh
dGU6CiAgICAgICAgIGlmICghbV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLT5jb3Vs
ZFRha2VTcGVjaWFsRmFzdENhc2UobV9jdXJyZW50SW5kZXgpCiAgICAgICAgICAgICAmJiAhbV9p
bmxpbmVTdGFja1RvcC0+bV9leGl0UHJvZmlsZS5oYXNFeGl0U2l0ZShtX2N1cnJlbnRJbmRleCwg
T3ZlcmZsb3cpCiAgICAgICAgICAgICAmJiAhbV9pbmxpbmVTdGFja1RvcC0+bV9leGl0UHJvZmls
ZS5oYXNFeGl0U2l0ZShtX2N1cnJlbnRJbmRleCwgTmVnYXRpdmVaZXJvKSkKLSAgICAgICAgICAg
IHJldHVybiBub2RlSW5kZXg7CisgICAgICAgICAgICByZXR1cm4gbm9kZTsKICAgICAgICAgCiAj
aWYgREZHX0VOQUJMRShERUJVR19WRVJCT1NFKQotICAgICAgICBkYXRhTG9nRigiTWFraW5nICVz
IEAldSBzYWZlIGF0IGJjIyV1IGJlY2F1c2Ugc3BlY2lhbCBmYXN0LWNhc2UgY291bnRlciBpcyBh
dCAldSBhbmQgZXhpdCBwcm9maWxlcyBzYXkgJWQsICVkXG4iLCBHcmFwaDo6b3BOYW1lKG1fZ3Jh
cGhbbm9kZUluZGV4XS5vcCgpKSwgbm9kZUluZGV4LCBtX2N1cnJlbnRJbmRleCwgbV9pbmxpbmVT
dGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLT5zcGVjaWFsRmFzdENhc2VQcm9maWxlRm9yQnl0ZWNv
ZGVPZmZzZXQobV9jdXJyZW50SW5kZXgpLT5tX2NvdW50ZXIsIG1faW5saW5lU3RhY2tUb3AtPm1f
ZXhpdFByb2ZpbGUuaGFzRXhpdFNpdGUobV9jdXJyZW50SW5kZXgsIE92ZXJmbG93KSwgbV9pbmxp
bmVTdGFja1RvcC0+bV9leGl0UHJvZmlsZS5oYXNFeGl0U2l0ZShtX2N1cnJlbnRJbmRleCwgTmVn
YXRpdmVaZXJvKSk7CisgICAgICAgIGRhdGFMb2dGKCJNYWtpbmcgJXMgQCV1IHNhZmUgYXQgYmMj
JXUgYmVjYXVzZSBzcGVjaWFsIGZhc3QtY2FzZSBjb3VudGVyIGlzIGF0ICV1IGFuZCBleGl0IHBy
b2ZpbGVzIHNheSAlZCwgJWRcbiIsIEdyYXBoOjpvcE5hbWUobm9kZS0+b3AoKSksIG5vZGUtPmlu
ZGV4KCksIG1fY3VycmVudEluZGV4LCBtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2st
PnNwZWNpYWxGYXN0Q2FzZVByb2ZpbGVGb3JCeXRlY29kZU9mZnNldChtX2N1cnJlbnRJbmRleCkt
Pm1fY291bnRlciwgbV9pbmxpbmVTdGFja1RvcC0+bV9leGl0UHJvZmlsZS5oYXNFeGl0U2l0ZSht
X2N1cnJlbnRJbmRleCwgT3ZlcmZsb3cpLCBtX2lubGluZVN0YWNrVG9wLT5tX2V4aXRQcm9maWxl
Lmhhc0V4aXRTaXRlKG1fY3VycmVudEluZGV4LCBOZWdhdGl2ZVplcm8pKTsKICNlbmRpZgogICAg
ICAgICAKICAgICAgICAgLy8gRklYTUU6IEl0IG1pZ2h0IGJlIHBvc3NpYmxlIHRvIG1ha2UgdGhp
cyBtb3JlIGdyYW51bGFyLiBUaGUgREZHIGNlcnRhaW5seSBjYW4KICAgICAgICAgLy8gZGlzdGlu
Z3Vpc2ggYmV0d2VlbiBuZWdhdGl2ZSB6ZXJvIGFuZCBvdmVyZmxvdyBpbiBpdHMgZXhpdCBwcm9m
aWxlcy4KLSAgICAgICAgbV9ncmFwaFtub2RlSW5kZXhdLm1lcmdlRmxhZ3MoTm9kZU1heU92ZXJm
bG93IHwgTm9kZU1heU5lZ1plcm8pOworICAgICAgICBub2RlLT5tZXJnZUZsYWdzKE5vZGVNYXlP
dmVyZmxvdyB8IE5vZGVNYXlOZWdaZXJvKTsKICAgICAgICAgCi0gICAgICAgIHJldHVybiBub2Rl
SW5kZXg7Ci0gICAgfQotICAgIAotICAgIGJvb2wgd2lsbE5lZWRGbHVzaChTdHJ1Y3R1cmVTdHVi
SW5mbyYgc3R1YkluZm8pCi0gICAgewotICAgICAgICBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVy
ZUxpc3QqIGxpc3Q7Ci0gICAgICAgIGludCBsaXN0U2l6ZTsKLSAgICAgICAgc3dpdGNoIChzdHVi
SW5mby5hY2Nlc3NUeXBlKSB7Ci0gICAgICAgIGNhc2UgYWNjZXNzX2dldF9ieV9pZF9zZWxmX2xp
c3Q6Ci0gICAgICAgICAgICBsaXN0ID0gc3R1YkluZm8udS5nZXRCeUlkU2VsZkxpc3Quc3RydWN0
dXJlTGlzdDsKLSAgICAgICAgICAgIGxpc3RTaXplID0gc3R1YkluZm8udS5nZXRCeUlkU2VsZkxp
c3QubGlzdFNpemU7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBhY2Nlc3NfZ2V0
X2J5X2lkX3Byb3RvX2xpc3Q6Ci0gICAgICAgICAgICBsaXN0ID0gc3R1YkluZm8udS5nZXRCeUlk
UHJvdG9MaXN0LnN0cnVjdHVyZUxpc3Q7Ci0gICAgICAgICAgICBsaXN0U2l6ZSA9IHN0dWJJbmZv
LnUuZ2V0QnlJZFByb3RvTGlzdC5saXN0U2l6ZTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgbGlzdFNpemU7ICsraSkgewotICAgICAgICAgICAgaWYgKCFs
aXN0LT5saXN0W2ldLmlzRGlyZWN0KQotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAg
ICAgICB9Ci0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIG5vZGU7CiAgICAg
fQogICAgIAogICAgIGJvb2wgc3RydWN0dXJlQ2hhaW5Jc1N0aWxsVmFsaWQoYm9vbCBkaXJlY3Qs
IFN0cnVjdHVyZSogcHJldmlvdXNTdHJ1Y3R1cmUsIFN0cnVjdHVyZUNoYWluKiBjaGFpbikKQEAg
LTEwOTgsMjEgKzEwNTksMjEgQEAgcHJpdmF0ZToKICAgICB1bnNpZ25lZCBtX2NvbnN0YW50TmFO
OwogICAgIHVuc2lnbmVkIG1fY29uc3RhbnQxOwogICAgIEhhc2hNYXA8SlNDZWxsKiwgdW5zaWdu
ZWQ+IG1fY2VsbENvbnN0YW50czsKLSAgICBIYXNoTWFwPEpTQ2VsbCosIE5vZGVJbmRleD4gbV9j
ZWxsQ29uc3RhbnROb2RlczsKKyAgICBIYXNoTWFwPEpTQ2VsbCosIE5vZGUqPiBtX2NlbGxDb25z
dGFudE5vZGVzOwogCiAgICAgLy8gQSBjb25zdGFudCBpbiB0aGUgY29uc3RhbnQgcG9vbCBtYXkg
YmUgcmVwcmVzZW50ZWQgYnkgbW9yZSB0aGFuIG9uZQogICAgIC8vIG5vZGUgaW4gdGhlIGdyYXBo
LCBkZXBlbmRpbmcgb24gdGhlIGNvbnRleHQgaW4gd2hpY2ggaXQgaXMgYmVpbmcgdXNlZC4KICAg
ICBzdHJ1Y3QgQ29uc3RhbnRSZWNvcmQgewogICAgICAgICBDb25zdGFudFJlY29yZCgpCi0gICAg
ICAgICAgICA6IGFzSW50MzIoTm9Ob2RlKQotICAgICAgICAgICAgLCBhc051bWVyaWMoTm9Ob2Rl
KQotICAgICAgICAgICAgLCBhc0pTVmFsdWUoTm9Ob2RlKQorICAgICAgICAgICAgOiBhc0ludDMy
KDApCisgICAgICAgICAgICAsIGFzTnVtZXJpYygwKQorICAgICAgICAgICAgLCBhc0pTVmFsdWUo
MCkKICAgICAgICAgewogICAgICAgICB9CiAKLSAgICAgICAgTm9kZUluZGV4IGFzSW50MzI7Ci0g
ICAgICAgIE5vZGVJbmRleCBhc051bWVyaWM7Ci0gICAgICAgIE5vZGVJbmRleCBhc0pTVmFsdWU7
CisgICAgICAgIE5vZGUqIGFzSW50MzI7CisgICAgICAgIE5vZGUqIGFzTnVtZXJpYzsKKyAgICAg
ICAgTm9kZSogYXNKU1ZhbHVlOwogICAgIH07CiAKICAgICAvLyBUcmFjayB0aGUgaW5kZXggb2Yg
dGhlIG5vZGUgd2hvc2UgcmVzdWx0IGlzIHRoZSBjdXJyZW50IHZhbHVlIGZvciBldmVyeQpAQCAt
MTEzOCw3ICsxMDk5LDcgQEAgcHJpdmF0ZToKICAgICB1bnNpZ25lZCBtX2dsb2JhbFJlc29sdmVO
dW1iZXI7CiAKICAgICBzdHJ1Y3QgUGhpU3RhY2tFbnRyeSB7Ci0gICAgICAgIFBoaVN0YWNrRW50
cnkoQmFzaWNCbG9jayogYmxvY2ssIE5vZGVJbmRleCBwaGksIHVuc2lnbmVkIHZhck5vKQorICAg
ICAgICBQaGlTdGFja0VudHJ5KEJhc2ljQmxvY2sqIGJsb2NrLCBOb2RlKiBwaGksIHVuc2lnbmVk
IHZhck5vKQogICAgICAgICAgICAgOiBtX2Jsb2NrKGJsb2NrKQogICAgICAgICAgICAgLCBtX3Bo
aShwaGkpCiAgICAgICAgICAgICAsIG1fdmFyTm8odmFyTm8pCkBAIC0xMTQ2LDcgKzExMDcsNyBA
QCBwcml2YXRlOgogICAgICAgICB9CiAKICAgICAgICAgQmFzaWNCbG9jayogbV9ibG9jazsKLSAg
ICAgICAgTm9kZUluZGV4IG1fcGhpOworICAgICAgICBOb2RlKiBtX3BoaTsKICAgICAgICAgdW5z
aWduZWQgbV92YXJObzsKICAgICB9OwogICAgIFZlY3RvcjxQaGlTdGFja0VudHJ5LCAxNj4gbV9h
cmd1bWVudFBoaVN0YWNrOwpAQCAtMTI4MCw3ICsxMjQxLDcgQEAgdm9pZCBCeXRlQ29kZVBhcnNl
cjo6aGFuZGxlQ2FsbChJbnRlcnByZQogewogICAgIEFTU0VSVChPUENPREVfTEVOR1RIKG9wX2Nh
bGwpID09IE9QQ09ERV9MRU5HVEgob3BfY29uc3RydWN0KSk7CiAgICAgCi0gICAgTm9kZUluZGV4
IGNhbGxUYXJnZXQgPSBnZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCk7CisgICAg
Tm9kZSogY2FsbFRhcmdldCA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKTsK
ICAgICAKICAgICBDYWxsTGlua1N0YXR1cyBjYWxsTGlua1N0YXR1czsKIApAQCAtMTI5NCw3ICsx
MjU1LDcgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlQ2FsbChJbnRlcnByZQogICAgIH0K
ICAgICAKICNpZiBERkdfRU5BQkxFKERFQlVHX1ZFUkJPU0UpCi0gICAgZGF0YUxvZygiRm9yIGNh
bGwgYXQgQCIsIG1fZ3JhcGguc2l6ZSgpLCAiIGJjIyIsIG1fY3VycmVudEluZGV4LCAiOiAiLCBj
YWxsTGlua1N0YXR1cywgIlxuIik7CisgICAgZGF0YUxvZygiRm9yIGNhbGwgYXQgYmMjIiwgbV9j
dXJyZW50SW5kZXgsICI6ICIsIGNhbGxMaW5rU3RhdHVzLCAiXG4iKTsKICNlbmRpZgogICAgIAog
ICAgIGlmICghY2FsbExpbmtTdGF0dXMuY2FuT3B0aW1pemUoKSkgewpAQCAtMTM1MiwxOCArMTMx
MywxOCBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVDYWxsKEludGVycHJlCiAgICAgYWRk
Q2FsbChpbnRlcnByZXRlciwgY3VycmVudEluc3RydWN0aW9uLCBvcCk7CiB9CiAKLXZvaWQgQnl0
ZUNvZGVQYXJzZXI6OmVtaXRGdW5jdGlvbkNoZWNrcyhjb25zdCBDYWxsTGlua1N0YXR1cyYgY2Fs
bExpbmtTdGF0dXMsIE5vZGVJbmRleCBjYWxsVGFyZ2V0LCBpbnQgcmVnaXN0ZXJPZmZzZXQsIENv
ZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkKK3ZvaWQgQnl0ZUNvZGVQYXJzZXI6OmVtaXRGdW5j
dGlvbkNoZWNrcyhjb25zdCBDYWxsTGlua1N0YXR1cyYgY2FsbExpbmtTdGF0dXMsIE5vZGUqIGNh
bGxUYXJnZXQsIGludCByZWdpc3Rlck9mZnNldCwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5k
KQogewogICAgIGlmIChjYWxsTGlua1N0YXR1cy5pc1Byb3ZlZCgpKQogICAgICAgICByZXR1cm47
CiAgICAgCiAgICAgQVNTRVJUKGNhbGxMaW5rU3RhdHVzLmNhbk9wdGltaXplKCkpOwogICAgIAot
ICAgIE5vZGVJbmRleCB0aGlzQXJndW1lbnQ7CisgICAgTm9kZSogdGhpc0FyZ3VtZW50OwogICAg
IGlmIChraW5kID09IENvZGVGb3JDYWxsKQogICAgICAgICB0aGlzQXJndW1lbnQgPSBnZXQocmVn
aXN0ZXJPZmZzZXQgKyBhcmd1bWVudFRvT3BlcmFuZCgwKSk7CiAgICAgZWxzZQotICAgICAgICB0
aGlzQXJndW1lbnQgPSBOb05vZGU7CisgICAgICAgIHRoaXNBcmd1bWVudCA9IDA7CiAKICAgICBp
ZiAoSlNGdW5jdGlvbiogZnVuY3Rpb24gPSBjYWxsTGlua1N0YXR1cy5mdW5jdGlvbigpKQogICAg
ICAgICBhZGRUb0dyYXBoKENoZWNrRnVuY3Rpb24sIE9wSW5mbyhmdW5jdGlvbiksIGNhbGxUYXJn
ZXQsIHRoaXNBcmd1bWVudCk7CkBAIC0xMzc2LDcgKzEzMzcsNyBAQCB2b2lkIEJ5dGVDb2RlUGFy
c2VyOjplbWl0RnVuY3Rpb25DaGVja3MoCiAgICAgfQogfQogCi1ib29sIEJ5dGVDb2RlUGFyc2Vy
OjpoYW5kbGVJbmxpbmluZyhib29sIHVzZXNSZXN1bHQsIE5vZGVJbmRleCBjYWxsVGFyZ2V0Tm9k
ZUluZGV4LCBpbnQgcmVzdWx0T3BlcmFuZCwgY29uc3QgQ2FsbExpbmtTdGF0dXMmIGNhbGxMaW5r
U3RhdHVzLCBpbnQgcmVnaXN0ZXJPZmZzZXQsIGludCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhp
cywgdW5zaWduZWQgbmV4dE9mZnNldCwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQorYm9v
bCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW5saW5pbmcoYm9vbCB1c2VzUmVzdWx0LCBOb2RlKiBj
YWxsVGFyZ2V0Tm9kZSwgaW50IHJlc3VsdE9wZXJhbmQsIGNvbnN0IENhbGxMaW5rU3RhdHVzJiBj
YWxsTGlua1N0YXR1cywgaW50IHJlZ2lzdGVyT2Zmc2V0LCBpbnQgYXJndW1lbnRDb3VudEluY2x1
ZGluZ1RoaXMsIHVuc2lnbmVkIG5leHRPZmZzZXQsIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2lu
ZCkKIHsKICAgICAvLyBGaXJzdCwgdGhlIHJlYWxseSBzaW1wbGUgY2hlY2tzOiBkbyB3ZSBoYXZl
IGFuIGFjdHVhbCBKUyBmdW5jdGlvbj8KICAgICBpZiAoIWNhbGxMaW5rU3RhdHVzLmV4ZWN1dGFi
bGUoKSkKQEAgLTE0MjMsNyArMTM4NCw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUlu
bGluaW5nKGJvb2wKICAgICAvLyBOb3cgd2Uga25vdyB3aXRob3V0IGEgZG91YnQgdGhhdCB3ZSBh
cmUgY29tbWl0dGVkIHRvIGlubGluaW5nLiBTbyBiZWdpbiB0aGUgcHJvY2VzcwogICAgIC8vIGJ5
IGNoZWNraW5nIHRoZSBjYWxsZWUgKGlmIG5lY2Vzc2FyeSkgYW5kIG1ha2luZyBzdXJlIHRoYXQg
YXJndW1lbnRzIGFuZCB0aGUgY2FsbGVlCiAgICAgLy8gYXJlIGZsdXNoZWQuCi0gICAgZW1pdEZ1
bmN0aW9uQ2hlY2tzKGNhbGxMaW5rU3RhdHVzLCBjYWxsVGFyZ2V0Tm9kZUluZGV4LCByZWdpc3Rl
ck9mZnNldCwga2luZCk7CisgICAgZW1pdEZ1bmN0aW9uQ2hlY2tzKGNhbGxMaW5rU3RhdHVzLCBj
YWxsVGFyZ2V0Tm9kZSwgcmVnaXN0ZXJPZmZzZXQsIGtpbmQpOwogICAgIAogICAgIC8vIEZJWE1F
OiBEb24ndCBmbHVzaCBjb25zdGFudHMhCiAgICAgCkBAIC0xNDU3LDggKzE0MTgsOCBAQCBib29s
IEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbmxpbmluZyhib29sCiAKICAgICBhZGRUb0dyYXBoKElu
bGluZVN0YXJ0LCBPcEluZm8oYXJndW1lbnRQb3NpdGlvblN0YXJ0KSk7CiAgICAgaWYgKGNhbGxM
aW5rU3RhdHVzLmlzQ2xvc3VyZUNhbGwoKSkgewotICAgICAgICBhZGRUb0dyYXBoKFNldENhbGxl
ZSwgY2FsbFRhcmdldE5vZGVJbmRleCk7Ci0gICAgICAgIGFkZFRvR3JhcGgoU2V0TXlTY29wZSwg
YWRkVG9HcmFwaChHZXRTY29wZSwgY2FsbFRhcmdldE5vZGVJbmRleCkpOworICAgICAgICBhZGRU
b0dyYXBoKFNldENhbGxlZSwgY2FsbFRhcmdldE5vZGUpOworICAgICAgICBhZGRUb0dyYXBoKFNl
dE15U2NvcGUsIGFkZFRvR3JhcGgoR2V0U2NvcGUsIGNhbGxUYXJnZXROb2RlKSk7CiAgICAgfQog
ICAgIAogICAgIHBhcnNlQ29kZUJsb2NrKCk7CkBAIC0xNDk0LDExICsxNDU1LDExIEBAIGJvb2wg
Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUlubGluaW5nKGJvb2wKICAgICB9IGVsc2UKICAgICAgICAg
QVNTRVJUKGlubGluZVN0YWNrRW50cnkubV91bmxpbmtlZEJsb2Nrcy5pc0VtcHR5KCkpOwogICAg
IAorICAgIEJhc2ljQmxvY2sqIGxhc3RCbG9jayA9IG1fZ3JhcGgubV9ibG9ja3MubGFzdCgpLmdl
dCgpOwogICAgIC8vIElmIHRoZXJlIHdhcyBhIHJldHVybiwgYnV0IG5vIGVhcmx5IHJldHVybnMs
IHRoZW4gd2UncmUgZG9uZS4gV2UgYWxsb3cgcGFyc2luZyBvZgogICAgIC8vIHRoZSBjYWxsZXIg
dG8gY29udGludWUgaW4gd2hhdGV2ZXIgYmFzaWMgYmxvY2sgd2UncmUgaW4gcmlnaHQgbm93Lgog
ICAgIGlmICghaW5saW5lU3RhY2tFbnRyeS5tX2RpZEVhcmx5UmV0dXJuICYmIGlubGluZVN0YWNr
RW50cnkubV9kaWRSZXR1cm4pIHsKLSAgICAgICAgQmFzaWNCbG9jayogbGFzdEJsb2NrID0gbV9n
cmFwaC5tX2Jsb2Nrcy5sYXN0KCkuZ2V0KCk7Ci0gICAgICAgIEFTU0VSVChsYXN0QmxvY2stPmlz
RW1wdHkoKSB8fCAhbV9ncmFwaC5sYXN0KCkuaXNUZXJtaW5hbCgpKTsKKyAgICAgICAgQVNTRVJU
KGxhc3RCbG9jay0+aXNFbXB0eSgpIHx8ICFsYXN0QmxvY2stPmxhc3QoKS0+aXNUZXJtaW5hbCgp
KTsKICAgICAgICAgCiAgICAgICAgIC8vIElmIHdlIGNyZWF0ZWQgbmV3IGJsb2NrcyB0aGVuIHRo
ZSBsYXN0IGJsb2NrIG5lZWRzIGxpbmtpbmcsIGJ1dCBpbiB0aGUKICAgICAgICAgLy8gY2FsbGVy
LiBJdCBkb2Vzbid0IG5lZWQgdG8gYmUgbGlua2VkIHRvLCBidXQgaXQgbmVlZHMgb3V0Z29pbmcg
bGlua3MuCkBAIC0xNTIyLDcgKzE0ODMsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJ
bmxpbmluZyhib29sCiAgICAgfQogICAgIAogICAgIC8vIElmIHdlIGdldCB0byB0aGlzIHBvaW50
IHRoZW4gYWxsIGJsb2NrcyBtdXN0IGVuZCBpbiBzb21lIHNvcnQgb2YgdGVybWluYWxzLgotICAg
IEFTU0VSVChtX2dyYXBoLmxhc3QoKS5pc1Rlcm1pbmFsKCkpOworICAgIEFTU0VSVChsYXN0Qmxv
Y2stPmxhc3QoKS0+aXNUZXJtaW5hbCgpKTsKICAgICAKICAgICAvLyBMaW5rIHRoZSBlYXJseSBy
ZXR1cm5zIHRvIHRoZSBiYXNpYyBibG9jayB3ZSdyZSBhYm91dCB0byBjcmVhdGUuCiAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBpbmxpbmVTdGFja0VudHJ5Lm1fdW5saW5rZWRCbG9ja3Muc2l6
ZSgpOyArK2kpIHsKQEAgLTE1MzAsMTAgKzE0OTEsMTAgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6
aGFuZGxlSW5saW5pbmcoYm9vbAogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIEJhc2lj
QmxvY2sqIGJsb2NrID0gbV9ncmFwaC5tX2Jsb2Nrc1tpbmxpbmVTdGFja0VudHJ5Lm1fdW5saW5r
ZWRCbG9ja3NbaV0ubV9ibG9ja0luZGV4XS5nZXQoKTsKICAgICAgICAgQVNTRVJUKCFibG9jay0+
aXNMaW5rZWQpOwotICAgICAgICBOb2RlJiBub2RlID0gbV9ncmFwaFtibG9jay0+bGFzdCgpXTsK
LSAgICAgICAgQVNTRVJUKG5vZGUub3AoKSA9PSBKdW1wKTsKLSAgICAgICAgQVNTRVJUKG5vZGUu
dGFrZW5CbG9ja0luZGV4KCkgPT0gTm9CbG9jayk7Ci0gICAgICAgIG5vZGUuc2V0VGFrZW5CbG9j
a0luZGV4KG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgpKTsKKyAgICAgICAgTm9kZSogbm9kZSA9IGJs
b2NrLT5sYXN0KCk7CisgICAgICAgIEFTU0VSVChub2RlLT5vcCgpID09IEp1bXApOworICAgICAg
ICBBU1NFUlQobm9kZS0+dGFrZW5CbG9ja0luZGV4KCkgPT0gTm9CbG9jayk7CisgICAgICAgIG5v
ZGUtPnNldFRha2VuQmxvY2tJbmRleChtX2dyYXBoLm1fYmxvY2tzLnNpemUoKSk7CiAgICAgICAg
IGlubGluZVN0YWNrRW50cnkubV91bmxpbmtlZEJsb2Nrc1tpXS5tX25lZWRzRWFybHlSZXR1cm5M
aW5raW5nID0gZmFsc2U7CiAjaWYgIUFTU0VSVF9ESVNBQkxFRAogICAgICAgICBibG9jay0+aXNM
aW5rZWQgPSB0cnVlOwpAQCAtMTU2MCwxMSArMTUyMSwxMSBAQCBib29sIEJ5dGVDb2RlUGFyc2Vy
OjpoYW5kbGVJbmxpbmluZyhib29sCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgQnl0ZUNv
ZGVQYXJzZXI6OnNldEludHJpbnNpY1Jlc3VsdChib29sIHVzZXNSZXN1bHQsIGludCByZXN1bHRP
cGVyYW5kLCBOb2RlSW5kZXggbm9kZUluZGV4KQordm9pZCBCeXRlQ29kZVBhcnNlcjo6c2V0SW50
cmluc2ljUmVzdWx0KGJvb2wgdXNlc1Jlc3VsdCwgaW50IHJlc3VsdE9wZXJhbmQsIE5vZGUqIG5v
ZGUpCiB7CiAgICAgaWYgKCF1c2VzUmVzdWx0KQogICAgICAgICByZXR1cm47Ci0gICAgc2V0KHJl
c3VsdE9wZXJhbmQsIG5vZGVJbmRleCk7CisgICAgc2V0KHJlc3VsdE9wZXJhbmQsIG5vZGUpOwog
fQogCiBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVNaW5NYXgoYm9vbCB1c2VzUmVzdWx0LCBp
bnQgcmVzdWx0T3BlcmFuZCwgTm9kZVR5cGUgb3AsIGludCByZWdpc3Rlck9mZnNldCwgaW50IGFy
Z3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKQpAQCAtMTU3Niw3ICsxNTM3LDcgQEAgYm9vbCBCeXRl
Q29kZVBhcnNlcjo6aGFuZGxlTWluTWF4KGJvb2wgdQogICAgICAKICAgICBpZiAoYXJndW1lbnRD
b3VudEluY2x1ZGluZ1RoaXMgPT0gMikgeyAvLyBNYXRoLm1pbih4KQogICAgICAgICAvLyBGSVhN
RTogd2hhdCB3ZSdkIHJlYWxseSBsaWtlIGlzIGEgVmFsdWVUb051bWJlciwgZXhjZXB0IHdlIGRv
bid0IHN1cHBvcnQgdGhhdCByaWdodCBub3cuIE9oIHdlbGwuCi0gICAgICAgIE5vZGVJbmRleCBy
ZXN1bHQgPSBnZXQocmVnaXN0ZXJPZmZzZXQgKyBhcmd1bWVudFRvT3BlcmFuZCgxKSk7CisgICAg
ICAgIE5vZGUqIHJlc3VsdCA9IGdldChyZWdpc3Rlck9mZnNldCArIGFyZ3VtZW50VG9PcGVyYW5k
KDEpKTsKICAgICAgICAgYWRkVG9HcmFwaChDaGVja051bWJlciwgcmVzdWx0KTsKICAgICAgICAg
c2V0SW50cmluc2ljUmVzdWx0KHVzZXNSZXN1bHQsIHJlc3VsdE9wZXJhbmQsIHJlc3VsdCk7CiAg
ICAgICAgIHJldHVybiB0cnVlOwpAQCAtMTYwNSwxMCArMTU2NiwxMCBAQCBib29sIEJ5dGVDb2Rl
UGFyc2VyOjpoYW5kbGVJbnRyaW5zaWMoYm9vCiAgICAgICAgIGlmICghTWFjcm9Bc3NlbWJsZXI6
OnN1cHBvcnRzRmxvYXRpbmdQb2ludEFicygpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwog
Ci0gICAgICAgIE5vZGVJbmRleCBub2RlSW5kZXggPSBhZGRUb0dyYXBoKEFyaXRoQWJzLCBnZXQo
cmVnaXN0ZXJPZmZzZXQgKyBhcmd1bWVudFRvT3BlcmFuZCgxKSkpOworICAgICAgICBOb2RlKiBu
b2RlID0gYWRkVG9HcmFwaChBcml0aEFicywgZ2V0KHJlZ2lzdGVyT2Zmc2V0ICsgYXJndW1lbnRU
b09wZXJhbmQoMSkpKTsKICAgICAgICAgaWYgKG1faW5saW5lU3RhY2tUb3AtPm1fZXhpdFByb2Zp
bGUuaGFzRXhpdFNpdGUobV9jdXJyZW50SW5kZXgsIE92ZXJmbG93KSkKLSAgICAgICAgICAgIG1f
Z3JhcGhbbm9kZUluZGV4XS5tZXJnZUZsYWdzKE5vZGVNYXlPdmVyZmxvdyk7Ci0gICAgICAgIHNl
dEludHJpbnNpY1Jlc3VsdCh1c2VzUmVzdWx0LCByZXN1bHRPcGVyYW5kLCBub2RlSW5kZXgpOwor
ICAgICAgICAgICAgbm9kZS0+bWVyZ2VGbGFncyhOb2RlTWF5T3ZlcmZsb3cpOworICAgICAgICBz
ZXRJbnRyaW5zaWNSZXN1bHQodXNlc1Jlc3VsdCwgcmVzdWx0T3BlcmFuZCwgbm9kZSk7CiAgICAg
ICAgIHJldHVybiB0cnVlOwogICAgIH0KIApAQCAtMTY0NCw3ICsxNjA1LDcgQEAgYm9vbCBCeXRl
Q29kZVBhcnNlcjo6aGFuZGxlSW50cmluc2ljKGJvbwogICAgICAgICBjYXNlIEFycmF5OjpEb3Vi
bGU6CiAgICAgICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3VvdXM6CiAgICAgICAgIGNhc2UgQXJyYXk6
OkFycmF5U3RvcmFnZTogewotICAgICAgICAgICAgTm9kZUluZGV4IGFycmF5UHVzaCA9IGFkZFRv
R3JhcGgoQXJyYXlQdXNoLCBPcEluZm8oYXJyYXlNb2RlLmFzV29yZCgpKSwgT3BJbmZvKHByZWRp
Y3Rpb24pLCBnZXQocmVnaXN0ZXJPZmZzZXQgKyBhcmd1bWVudFRvT3BlcmFuZCgwKSksIGdldChy
ZWdpc3Rlck9mZnNldCArIGFyZ3VtZW50VG9PcGVyYW5kKDEpKSk7CisgICAgICAgICAgICBOb2Rl
KiBhcnJheVB1c2ggPSBhZGRUb0dyYXBoKEFycmF5UHVzaCwgT3BJbmZvKGFycmF5TW9kZS5hc1dv
cmQoKSksIE9wSW5mbyhwcmVkaWN0aW9uKSwgZ2V0KHJlZ2lzdGVyT2Zmc2V0ICsgYXJndW1lbnRU
b09wZXJhbmQoMCkpLCBnZXQocmVnaXN0ZXJPZmZzZXQgKyBhcmd1bWVudFRvT3BlcmFuZCgxKSkp
OwogICAgICAgICAgICAgaWYgKHVzZXNSZXN1bHQpCiAgICAgICAgICAgICAgICAgc2V0KHJlc3Vs
dE9wZXJhbmQsIGFycmF5UHVzaCk7CiAgICAgICAgICAgICAKQEAgLTE2NjgsNyArMTYyOSw3IEBA
IGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUludHJpbnNpYyhib28KICAgICAgICAgY2FzZSBB
cnJheTo6RG91YmxlOgogICAgICAgICBjYXNlIEFycmF5OjpDb250aWd1b3VzOgogICAgICAgICBj
YXNlIEFycmF5OjpBcnJheVN0b3JhZ2U6IHsKLSAgICAgICAgICAgIE5vZGVJbmRleCBhcnJheVBv
cCA9IGFkZFRvR3JhcGgoQXJyYXlQb3AsIE9wSW5mbyhhcnJheU1vZGUuYXNXb3JkKCkpLCBPcElu
Zm8ocHJlZGljdGlvbiksIGdldChyZWdpc3Rlck9mZnNldCArIGFyZ3VtZW50VG9PcGVyYW5kKDAp
KSk7CisgICAgICAgICAgICBOb2RlKiBhcnJheVBvcCA9IGFkZFRvR3JhcGgoQXJyYXlQb3AsIE9w
SW5mbyhhcnJheU1vZGUuYXNXb3JkKCkpLCBPcEluZm8ocHJlZGljdGlvbiksIGdldChyZWdpc3Rl
ck9mZnNldCArIGFyZ3VtZW50VG9PcGVyYW5kKDApKSk7CiAgICAgICAgICAgICBpZiAodXNlc1Jl
c3VsdCkKICAgICAgICAgICAgICAgICBzZXQocmVzdWx0T3BlcmFuZCwgYXJyYXlQb3ApOwogICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0xNjg1LDcgKzE2NDYsNyBAQCBib29sIEJ5dGVDb2Rl
UGFyc2VyOjpoYW5kbGVJbnRyaW5zaWMoYm9vCiAKICAgICAgICAgaW50IHRoaXNPcGVyYW5kID0g
cmVnaXN0ZXJPZmZzZXQgKyBhcmd1bWVudFRvT3BlcmFuZCgwKTsKICAgICAgICAgaW50IGluZGV4
T3BlcmFuZCA9IHJlZ2lzdGVyT2Zmc2V0ICsgYXJndW1lbnRUb09wZXJhbmQoMSk7Ci0gICAgICAg
IE5vZGVJbmRleCBjaGFyQ29kZSA9IGFkZFRvR3JhcGgoU3RyaW5nQ2hhckNvZGVBdCwgT3BJbmZv
KEFycmF5TW9kZShBcnJheTo6U3RyaW5nKS5hc1dvcmQoKSksIGdldCh0aGlzT3BlcmFuZCksIGdl
dFRvSW50MzIoaW5kZXhPcGVyYW5kKSk7CisgICAgICAgIE5vZGUqIGNoYXJDb2RlID0gYWRkVG9H
cmFwaChTdHJpbmdDaGFyQ29kZUF0LCBPcEluZm8oQXJyYXlNb2RlKEFycmF5OjpTdHJpbmcpLmFz
V29yZCgpKSwgZ2V0KHRoaXNPcGVyYW5kKSwgZ2V0VG9JbnQzMihpbmRleE9wZXJhbmQpKTsKIAog
ICAgICAgICBpZiAodXNlc1Jlc3VsdCkKICAgICAgICAgICAgIHNldChyZXN1bHRPcGVyYW5kLCBj
aGFyQ29kZSk7CkBAIC0xNjk4LDcgKzE2NTksNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5k
bGVJbnRyaW5zaWMoYm9vCiAKICAgICAgICAgaW50IHRoaXNPcGVyYW5kID0gcmVnaXN0ZXJPZmZz
ZXQgKyBhcmd1bWVudFRvT3BlcmFuZCgwKTsKICAgICAgICAgaW50IGluZGV4T3BlcmFuZCA9IHJl
Z2lzdGVyT2Zmc2V0ICsgYXJndW1lbnRUb09wZXJhbmQoMSk7Ci0gICAgICAgIE5vZGVJbmRleCBj
aGFyQ29kZSA9IGFkZFRvR3JhcGgoU3RyaW5nQ2hhckF0LCBPcEluZm8oQXJyYXlNb2RlKEFycmF5
OjpTdHJpbmcpLmFzV29yZCgpKSwgZ2V0KHRoaXNPcGVyYW5kKSwgZ2V0VG9JbnQzMihpbmRleE9w
ZXJhbmQpKTsKKyAgICAgICAgTm9kZSogY2hhckNvZGUgPSBhZGRUb0dyYXBoKFN0cmluZ0NoYXJB
dCwgT3BJbmZvKEFycmF5TW9kZShBcnJheTo6U3RyaW5nKS5hc1dvcmQoKSksIGdldCh0aGlzT3Bl
cmFuZCksIGdldFRvSW50MzIoaW5kZXhPcGVyYW5kKSk7CiAKICAgICAgICAgaWYgKHVzZXNSZXN1
bHQpCiAgICAgICAgICAgICBzZXQocmVzdWx0T3BlcmFuZCwgY2hhckNvZGUpOwpAQCAtMTcwOSw3
ICsxNjcwLDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW50cmluc2ljKGJvbwogICAg
ICAgICBpZiAoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgIT0gMikKICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICAgICAgCi0gICAgICAgIE5vZGVJbmRleCByZWdFeHBFeGVjID0gYWRk
VG9HcmFwaChSZWdFeHBFeGVjLCBPcEluZm8oMCksIE9wSW5mbyhwcmVkaWN0aW9uKSwgZ2V0KHJl
Z2lzdGVyT2Zmc2V0ICsgYXJndW1lbnRUb09wZXJhbmQoMCkpLCBnZXQocmVnaXN0ZXJPZmZzZXQg
KyBhcmd1bWVudFRvT3BlcmFuZCgxKSkpOworICAgICAgICBOb2RlKiByZWdFeHBFeGVjID0gYWRk
VG9HcmFwaChSZWdFeHBFeGVjLCBPcEluZm8oMCksIE9wSW5mbyhwcmVkaWN0aW9uKSwgZ2V0KHJl
Z2lzdGVyT2Zmc2V0ICsgYXJndW1lbnRUb09wZXJhbmQoMCkpLCBnZXQocmVnaXN0ZXJPZmZzZXQg
KyBhcmd1bWVudFRvT3BlcmFuZCgxKSkpOwogICAgICAgICBpZiAodXNlc1Jlc3VsdCkKICAgICAg
ICAgICAgIHNldChyZXN1bHRPcGVyYW5kLCByZWdFeHBFeGVjKTsKICAgICAgICAgCkBAIC0xNzIw
LDcgKzE2ODEsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbnRyaW5zaWMoYm9vCiAg
ICAgICAgIGlmIChhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAhPSAyKQogICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgICAgICAKLSAgICAgICAgTm9kZUluZGV4IHJlZ0V4cEV4ZWMgPSBh
ZGRUb0dyYXBoKFJlZ0V4cFRlc3QsIE9wSW5mbygwKSwgT3BJbmZvKHByZWRpY3Rpb24pLCBnZXQo
cmVnaXN0ZXJPZmZzZXQgKyBhcmd1bWVudFRvT3BlcmFuZCgwKSksIGdldChyZWdpc3Rlck9mZnNl
dCArIGFyZ3VtZW50VG9PcGVyYW5kKDEpKSk7CisgICAgICAgIE5vZGUqIHJlZ0V4cEV4ZWMgPSBh
ZGRUb0dyYXBoKFJlZ0V4cFRlc3QsIE9wSW5mbygwKSwgT3BJbmZvKHByZWRpY3Rpb24pLCBnZXQo
cmVnaXN0ZXJPZmZzZXQgKyBhcmd1bWVudFRvT3BlcmFuZCgwKSksIGdldChyZWdpc3Rlck9mZnNl
dCArIGFyZ3VtZW50VG9PcGVyYW5kKDEpKSk7CiAgICAgICAgIGlmICh1c2VzUmVzdWx0KQogICAg
ICAgICAgICAgc2V0KHJlc3VsdE9wZXJhbmQsIHJlZ0V4cEV4ZWMpOwogICAgICAgICAKQEAgLTE3
NjUsOSArMTcyNiw5IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUNvbnN0YW50SW50ZXIK
ICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLU5vZGVJbmRleCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxl
R2V0QnlPZmZzZXQoU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiwgTm9kZUluZGV4IGJhc2UsIHVu
c2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKK05vZGVJbmRl
eCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlR2V0QnlPZmZzZXQoU3BlY3VsYXRlZFR5cGUgcHJlZGlj
dGlvbiwgTm9kZSogYmFzZSwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgUHJvcGVydHlPZmZz
ZXQgb2Zmc2V0KQogewotICAgIE5vZGVJbmRleCBwcm9wZXJ0eVN0b3JhZ2U7CisgICAgTm9kZSog
cHJvcGVydHlTdG9yYWdlOwogICAgIGlmIChpc0lubGluZU9mZnNldChvZmZzZXQpKQogICAgICAg
ICBwcm9wZXJ0eVN0b3JhZ2UgPSBiYXNlOwogICAgIGVsc2UKQEAgLTE3NzYsNyArMTczNyw3IEBA
IE5vZGVJbmRleCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlR2V0QnlPZmYKICAgICAvLyBhbiBPU1Ig
c3RhbmRwb2ludCkgaWYgR2V0QnlPZmZzZXQgYWxzbyByZWZlcmVuY2VkIHRoZSBvYmplY3Qgd2Ug
d2VyZSBsb2FkaW5nCiAgICAgLy8gZnJvbSwgYW5kIGlmIHdlIGNvdWxkIGxvYWQgZWxpbWluYXRl
IGEgR2V0QnlPZmZzZXQgZXZlbiBpZiB0aGUgYnV0dGVyZmx5CiAgICAgLy8gaGFkIGNoYW5nZWQu
IFRoYXQgd291bGQgYmUgYSBncmVhdCBzdWNjZXNzLgotICAgIE5vZGVJbmRleCBnZXRCeU9mZnNl
dCA9IGFkZFRvR3JhcGgoR2V0QnlPZmZzZXQsIE9wSW5mbyhtX2dyYXBoLm1fc3RvcmFnZUFjY2Vz
c0RhdGEuc2l6ZSgpKSwgT3BJbmZvKHByZWRpY3Rpb24pLCBwcm9wZXJ0eVN0b3JhZ2UpOworICAg
IE5vZGUqIGdldEJ5T2Zmc2V0ID0gYWRkVG9HcmFwaChHZXRCeU9mZnNldCwgT3BJbmZvKG1fZ3Jh
cGgubV9zdG9yYWdlQWNjZXNzRGF0YS5zaXplKCkpLCBPcEluZm8ocHJlZGljdGlvbiksIHByb3Bl
cnR5U3RvcmFnZSk7CiAKICAgICBTdG9yYWdlQWNjZXNzRGF0YSBzdG9yYWdlQWNjZXNzRGF0YTsK
ICAgICBzdG9yYWdlQWNjZXNzRGF0YS5vZmZzZXQgPSBpbmRleFJlbGF0aXZlVG9CYXNlKG9mZnNl
dCk7CkBAIC0xNzg3LDE0ICsxNzQ4LDE0IEBAIE5vZGVJbmRleCBCeXRlQ29kZVBhcnNlcjo6aGFu
ZGxlR2V0QnlPZmYKIH0KIAogdm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlR2V0QnlPZmZzZXQo
Ci0gICAgaW50IGRlc3RpbmF0aW9uT3BlcmFuZCwgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiwg
Tm9kZUluZGV4IGJhc2UsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsCisgICAgaW50IGRlc3Rp
bmF0aW9uT3BlcmFuZCwgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiwgTm9kZSogYmFzZSwgdW5z
aWduZWQgaWRlbnRpZmllck51bWJlciwKICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCiB7CiAg
ICAgc2V0KGRlc3RpbmF0aW9uT3BlcmFuZCwgaGFuZGxlR2V0QnlPZmZzZXQocHJlZGljdGlvbiwg
YmFzZSwgaWRlbnRpZmllck51bWJlciwgb2Zmc2V0KSk7CiB9CiAKIHZvaWQgQnl0ZUNvZGVQYXJz
ZXI6OmhhbmRsZUdldEJ5SWQoCi0gICAgaW50IGRlc3RpbmF0aW9uT3BlcmFuZCwgU3BlY3VsYXRl
ZFR5cGUgcHJlZGljdGlvbiwgTm9kZUluZGV4IGJhc2UsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1i
ZXIsCisgICAgaW50IGRlc3RpbmF0aW9uT3BlcmFuZCwgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlv
biwgTm9kZSogYmFzZSwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwKICAgICBjb25zdCBHZXRC
eUlkU3RhdHVzJiBnZXRCeUlkU3RhdHVzKQogewogICAgIGlmICghZ2V0QnlJZFN0YXR1cy5pc1Np
bXBsZSgpCkBAIC0xODEzLDcgKzE3NzQsNyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVH
ZXRCeUlkKAogICAgIGlmIChwcmVkaWN0aW9uID09IFNwZWNOb25lKQogICAgICAgICBhZGRUb0dy
YXBoKEZvcmNlT1NSRXhpdCk7CiAgICAgCi0gICAgTm9kZUluZGV4IG9yaWdpbmFsQmFzZUZvckJh
c2VsaW5lSklUID0gYmFzZTsKKyAgICBOb2RlKiBvcmlnaW5hbEJhc2VGb3JCYXNlbGluZUpJVCA9
IGJhc2U7CiAgICAgICAgICAgICAgICAgCiAgICAgYWRkVG9HcmFwaChDaGVja1N0cnVjdHVyZSwg
T3BJbmZvKG1fZ3JhcGguYWRkU3RydWN0dXJlU2V0KGdldEJ5SWRTdGF0dXMuc3RydWN0dXJlU2V0
KCkpKSwgYmFzZSk7CiAgICAgCkBAIC0xODU2LDcgKzE4MTcsNyBAQCB2b2lkIEJ5dGVDb2RlUGFy
c2VyOjpwcmVwYXJlVG9QYXJzZUJsb2NrCiAKIE5vZGVJbmRleCBCeXRlQ29kZVBhcnNlcjo6Z2V0
U2NvcGUoYm9vbCBza2lwVG9wLCB1bnNpZ25lZCBza2lwQ291bnQpCiB7Ci0gICAgTm9kZUluZGV4
IGxvY2FsQmFzZTsKKyAgICBOb2RlKiBsb2NhbEJhc2U7CiAgICAgaWYgKG1faW5saW5lU3RhY2tU
b3AtPm1faW5saW5lQ2FsbEZyYW1lICYmICFtX2lubGluZVN0YWNrVG9wLT5tX2lubGluZUNhbGxG
cmFtZS0+aXNDbG9zdXJlQ2FsbCgpKSB7CiAgICAgICAgIEFTU0VSVChtX2lubGluZVN0YWNrVG9w
LT5tX2lubGluZUNhbGxGcmFtZS0+Y2FsbGVlKTsKICAgICAgICAgbG9jYWxCYXNlID0gY2VsbENv
bnN0YW50KG1faW5saW5lU3RhY2tUb3AtPm1faW5saW5lQ2FsbEZyYW1lLT5jYWxsZWUtPnNjb3Bl
KCkpOwpAQCAtMTg3MSw3ICsxODMyLDcgQEAgTm9kZUluZGV4IEJ5dGVDb2RlUGFyc2VyOjpnZXRT
Y29wZShib29sIAogICAgIHJldHVybiBsb2NhbEJhc2U7CiB9CiAKLWJvb2wgQnl0ZUNvZGVQYXJz
ZXI6OnBhcnNlUmVzb2x2ZU9wZXJhdGlvbnMoU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiwgdW5z
aWduZWQgaWRlbnRpZmllciwgdW5zaWduZWQgb3BlcmF0aW9ucywgdW5zaWduZWQgcHV0VG9CYXNl
T3BlcmF0aW9uLCBOb2RlSW5kZXgqIGJhc2UsIE5vZGVJbmRleCogdmFsdWUpCitib29sIEJ5dGVD
b2RlUGFyc2VyOjpwYXJzZVJlc29sdmVPcGVyYXRpb25zKFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rp
b24sIHVuc2lnbmVkIGlkZW50aWZpZXIsIHVuc2lnbmVkIG9wZXJhdGlvbnMsIHVuc2lnbmVkIHB1
dFRvQmFzZU9wZXJhdGlvbiwgTm9kZSoqIGJhc2UsIE5vZGUqKiB2YWx1ZSkKIHsKICAgICBSZXNv
bHZlT3BlcmF0aW9ucyogcmVzb2x2ZU9wZXJhdGlvbnMgPSBtX2NvZGVCbG9jay0+cmVzb2x2ZU9w
ZXJhdGlvbnMob3BlcmF0aW9ucyk7CiAgICAgaWYgKHJlc29sdmVPcGVyYXRpb25zLT5pc0VtcHR5
KCkpIHsKQEAgLTE4ODQsNyArMTg0NSw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlUmVz
b2x2ZU9wZXJhdGkKICAgICBib29sIHNraXBwZWRTY29wZXMgPSBmYWxzZTsKICAgICBib29sIHNl
dEJhc2UgPSBmYWxzZTsKICAgICBSZXNvbHZlT3BlcmF0aW9uKiBwYyA9IHJlc29sdmVPcGVyYXRp
b25zLT5kYXRhKCk7Ci0gICAgTm9kZUluZGV4IGxvY2FsQmFzZSA9IDA7CisgICAgTm9kZSogbG9j
YWxCYXNlID0gMDsKICAgICBib29sIHJlc29sdmluZ0Jhc2UgPSB0cnVlOwogICAgIHdoaWxlIChy
ZXNvbHZpbmdCYXNlKSB7CiAgICAgICAgIHN3aXRjaCAocGMtPm1fb3BlcmF0aW9uKSB7CkBAIC0x
OTYwLDcgKzE5MjEsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZVJlc29sdmVPcGVyYXRp
CiAgICAgICAgIGlmIChzdGF0dXMuaXNTaW1wbGUoKSkgewogICAgICAgICAgICAgQVNTRVJUKHN0
YXR1cy5zdHJ1Y3R1cmUoKSk7CiAKLSAgICAgICAgICAgIE5vZGVJbmRleCBnbG9iYWxPYmplY3RO
b2RlID0gYWRkU3RydWN0dXJlVHJhbnNpdGlvbkNoZWNrKGdsb2JhbE9iamVjdCwgc3RhdHVzLnN0
cnVjdHVyZSgpKTsKKyAgICAgICAgICAgIE5vZGUqIGdsb2JhbE9iamVjdE5vZGUgPSBhZGRTdHJ1
Y3R1cmVUcmFuc2l0aW9uQ2hlY2soZ2xvYmFsT2JqZWN0LCBzdGF0dXMuc3RydWN0dXJlKCkpOwog
CiAgICAgICAgICAgICBpZiAoc3RhdHVzLnNwZWNpZmljVmFsdWUoKSkgewogICAgICAgICAgICAg
ICAgIEFTU0VSVChzdGF0dXMuc3BlY2lmaWNWYWx1ZSgpLmlzQ2VsbCgpKTsKQEAgLTE5NzAsNyAr
MTkzMSw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlUmVzb2x2ZU9wZXJhdGkKICAgICAg
ICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAKLSAgICAgICAgTm9kZUluZGV4IHJlc29s
dmUgPSBhZGRUb0dyYXBoKFJlc29sdmVHbG9iYWwsIE9wSW5mbyhtX2dyYXBoLm1fcmVzb2x2ZUds
b2JhbERhdGEuc2l6ZSgpKSwgT3BJbmZvKHByZWRpY3Rpb24pKTsKKyAgICAgICAgTm9kZSogcmVz
b2x2ZSA9IGFkZFRvR3JhcGgoUmVzb2x2ZUdsb2JhbCwgT3BJbmZvKG1fZ3JhcGgubV9yZXNvbHZl
R2xvYmFsRGF0YS5zaXplKCkpLCBPcEluZm8ocHJlZGljdGlvbikpOwogICAgICAgICBtX2dyYXBo
Lm1fcmVzb2x2ZUdsb2JhbERhdGEuYXBwZW5kKFJlc29sdmVHbG9iYWxEYXRhKCkpOwogICAgICAg
ICBSZXNvbHZlR2xvYmFsRGF0YSYgZGF0YSA9IG1fZ3JhcGgubV9yZXNvbHZlR2xvYmFsRGF0YS5s
YXN0KCk7CiAgICAgICAgIGRhdGEuaWRlbnRpZmllck51bWJlciA9IGlkZW50aWZpZXI7CkBAIC0x
OTgxLDkgKzE5NDIsMTAgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VSZXNvbHZlT3BlcmF0
aQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgY2FzZSBSZXNvbHZlT3BlcmF0aW9u
OjpHZXRBbmRSZXR1cm5HbG9iYWxWYXI6IHsKLSAgICAgICAgKnZhbHVlID0gYWRkVG9HcmFwaChH
ZXRHbG9iYWxWYXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgT3BJbmZvKGdsb2JhbE9i
amVjdC0+YXNzZXJ0UmVnaXN0ZXJJc0luVGhpc09iamVjdChwYy0+bV9yZWdpc3RlckFkZHJlc3Mp
KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcEluZm8ocHJlZGljdGlvbikpOworICAg
ICAgICAqdmFsdWUgPSBhZGRUb0dyYXBoKAorICAgICAgICAgICAgR2V0R2xvYmFsVmFyLAorICAg
ICAgICAgICAgT3BJbmZvKGdsb2JhbE9iamVjdC0+YXNzZXJ0UmVnaXN0ZXJJc0luVGhpc09iamVj
dChwYy0+bV9yZWdpc3RlckFkZHJlc3MpKSwKKyAgICAgICAgICAgIE9wSW5mbyhwcmVkaWN0aW9u
KSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICBjYXNlIFJlc29sdmVPcGVyYXRp
b246OkdldEFuZFJldHVybkdsb2JhbFZhcldhdGNoYWJsZTogewpAQCAtMjAyMiw3ICsxOTg0LDcg
QEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VSZXNvbHZlT3BlcmF0aQogICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICB9CiAgICAgY2FzZSBSZXNvbHZlT3BlcmF0aW9uOjpHZXRBbmRSZXR1cm5T
Y29wZWRWYXI6IHsKLSAgICAgICAgTm9kZUluZGV4IGdldFNjb3BlUmVnaXN0ZXJzID0gYWRkVG9H
cmFwaChHZXRTY29wZVJlZ2lzdGVycywgbG9jYWxCYXNlKTsKKyAgICAgICAgTm9kZSogZ2V0U2Nv
cGVSZWdpc3RlcnMgPSBhZGRUb0dyYXBoKEdldFNjb3BlUmVnaXN0ZXJzLCBsb2NhbEJhc2UpOwog
ICAgICAgICAqdmFsdWUgPSBhZGRUb0dyYXBoKEdldFNjb3BlZFZhciwgT3BJbmZvKHJlc29sdmVW
YWx1ZU9wZXJhdGlvbi0+bV9vZmZzZXQpLCBPcEluZm8ocHJlZGljdGlvbiksIGdldFNjb3BlUmVn
aXN0ZXJzKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpAQCAtMjA1MSw3ICsyMDEzLDcg
QEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAg
ICAgIGFyZ3VtZW50VG9PcGVyYW5kKGFyZ3VtZW50KSwgbV9jb2RlQmxvY2stPmlzQ2FwdHVyZWQo
YXJndW1lbnRUb09wZXJhbmQoYXJndW1lbnQpKSk7CiAgICAgICAgICAgICB2YXJpYWJsZS0+bWVy
Z2VTdHJ1Y3R1cmVDaGVja0hvaXN0aW5nRmFpbGVkKAogICAgICAgICAgICAgICAgIG1faW5saW5l
U3RhY2tUb3AtPm1fZXhpdFByb2ZpbGUuaGFzRXhpdFNpdGUobV9jdXJyZW50SW5kZXgsIEJhZENh
Y2hlKSk7Ci0gICAgICAgICAgICBOb2RlSW5kZXggc2V0QXJndW1lbnQgPSBhZGRUb0dyYXBoKFNl
dEFyZ3VtZW50LCBPcEluZm8odmFyaWFibGUpKTsKKyAgICAgICAgICAgIE5vZGUqIHNldEFyZ3Vt
ZW50ID0gYWRkVG9HcmFwaChTZXRBcmd1bWVudCwgT3BJbmZvKHZhcmlhYmxlKSk7CiAgICAgICAg
ICAgICBtX2dyYXBoLm1fYXJndW1lbnRzW2FyZ3VtZW50XSA9IHNldEFyZ3VtZW50OwogICAgICAg
ICAgICAgbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0SGVhZC5zZXRBcmd1bWVudEZpcnN0VGlt
ZShhcmd1bWVudCwgc2V0QXJndW1lbnQpOwogICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPnZh
cmlhYmxlc0F0VGFpbC5zZXRBcmd1bWVudEZpcnN0VGltZShhcmd1bWVudCwgc2V0QXJndW1lbnQp
OwpAQCAtMjEwMSwxMyArMjA2MywxMyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2Nr
KHVuc2lnbmVkCiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9lbnRlcik7CiAKICAgICAgICAg
Y2FzZSBvcF9jb252ZXJ0X3RoaXM6IHsKLSAgICAgICAgICAgIE5vZGVJbmRleCBvcDEgPSBnZXRU
aGlzKCk7Ci0gICAgICAgICAgICBpZiAobV9ncmFwaFtvcDFdLm9wKCkgIT0gQ29udmVydFRoaXMp
IHsKKyAgICAgICAgICAgIE5vZGUqIG9wMSA9IGdldFRoaXMoKTsKKyAgICAgICAgICAgIGlmIChv
cDEtPm9wKCkgIT0gQ29udmVydFRoaXMpIHsKICAgICAgICAgICAgICAgICBWYWx1ZVByb2ZpbGUq
IHByb2ZpbGUgPQogICAgICAgICAgICAgICAgICAgICBtX2lubGluZVN0YWNrVG9wLT5tX3Byb2Zp
bGVkQmxvY2stPnZhbHVlUHJvZmlsZUZvckJ5dGVjb2RlT2Zmc2V0KG1fY3VycmVudFByb2ZpbGlu
Z0luZGV4KTsKICAgICAgICAgICAgICAgICBwcm9maWxlLT5jb21wdXRlVXBkYXRlZFByZWRpY3Rp
b24oKTsKICNpZiBERkdfRU5BQkxFKERFQlVHX1ZFUkJPU0UpCi0gICAgICAgICAgICAgICAgZGF0
YUxvZ0YoIltAJWx1IGJjIyV1XTogcHJvZmlsZSAlcDogIiwgbV9ncmFwaC5zaXplKCksIG1fY3Vy
cmVudFByb2ZpbGluZ0luZGV4LCBwcm9maWxlKTsKKyAgICAgICAgICAgICAgICBkYXRhTG9nRigi
W2JjIyV1XTogcHJvZmlsZSAlcDogIiwgbV9jdXJyZW50UHJvZmlsaW5nSW5kZXgsIHByb2ZpbGUp
OwogICAgICAgICAgICAgICAgIHByb2ZpbGUtPmR1bXAoV1RGOjpkYXRhRmlsZSgpKTsKICAgICAg
ICAgICAgICAgICBkYXRhTG9nRigiXG4iKTsKICNlbmRpZgpAQCAtMjEyOCwxMCArMjA5MCwxMCBA
QCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAKICAgICAgICAgY2Fz
ZSBvcF9jcmVhdGVfdGhpczogewogICAgICAgICAgICAgaW50IGNhbGxlZU9wZXJhbmQgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwotICAgICAgICAgICAgTm9kZUluZGV4IGNhbGxl
ZSA9IGdldChjYWxsZWVPcGVyYW5kKTsKKyAgICAgICAgICAgIE5vZGUqIGNhbGxlZSA9IGdldChj
YWxsZWVPcGVyYW5kKTsKICAgICAgICAgICAgIGJvb2wgYWxyZWFkeUVtaXR0ZWQgPSBmYWxzZTsK
LSAgICAgICAgICAgIGlmIChtX2dyYXBoW2NhbGxlZV0ub3AoKSA9PSBXZWFrSlNDb25zdGFudCkg
ewotICAgICAgICAgICAgICAgIEpTQ2VsbCogY2VsbCA9IG1fZ3JhcGhbY2FsbGVlXS53ZWFrQ29u
c3RhbnQoKTsKKyAgICAgICAgICAgIGlmIChjYWxsZWUtPm9wKCkgPT0gV2Vha0pTQ29uc3RhbnQp
IHsKKyAgICAgICAgICAgICAgICBKU0NlbGwqIGNlbGwgPSBjYWxsZWUtPndlYWtDb25zdGFudCgp
OwogICAgICAgICAgICAgICAgIEFTU0VSVChjZWxsLT5pbmhlcml0cygmSlNGdW5jdGlvbjo6c19p
bmZvKSk7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgSlNGdW5jdGlvbiogZnVu
Y3Rpb24gPSBqc0Nhc3Q8SlNGdW5jdGlvbio+KGNlbGwpOwpAQCAtMjIwNSw3ICsyMTY3LDcgQEAg
Ym9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgICAg
IHNldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCBnZXQoSlNTdGFjazo6Q2FsbGVl
KSk7CiAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICBBU1NFUlQocHJvZmlsZS0+
bV9zaW5nbGV0b25WYWx1ZS5hc0NlbGwoKS0+aW5oZXJpdHMoJkpTRnVuY3Rpb246OnNfaW5mbykp
OwotICAgICAgICAgICAgICAgIE5vZGVJbmRleCBhY3R1YWxDYWxsZWUgPSBnZXQoSlNTdGFjazo6
Q2FsbGVlKTsKKyAgICAgICAgICAgICAgICBOb2RlKiBhY3R1YWxDYWxsZWUgPSBnZXQoSlNTdGFj
azo6Q2FsbGVlKTsKICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKENoZWNrRnVuY3Rpb24sIE9w
SW5mbyhwcm9maWxlLT5tX3NpbmdsZXRvblZhbHVlLmFzQ2VsbCgpKSwgYWN0dWFsQ2FsbGVlKTsK
ICAgICAgICAgICAgICAgICBzZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwgYWRk
VG9HcmFwaChXZWFrSlNDb25zdGFudCwgT3BJbmZvKHByb2ZpbGUtPm1fc2luZ2xldG9uVmFsdWUu
YXNDZWxsKCkpKSk7CiAgICAgICAgICAgICB9CkBAIC0yMjE1LDMwICsyMTc3LDMwIEBAIGJvb2wg
Qnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgLy8gPT09IEJpdHdp
c2Ugb3BlcmF0aW9ucyA9PT0KIAogICAgICAgICBjYXNlIG9wX2JpdGFuZDogewotICAgICAgICAg
ICAgTm9kZUluZGV4IG9wMSA9IGdldFRvSW50MzIoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3Bl
cmFuZCk7Ci0gICAgICAgICAgICBOb2RlSW5kZXggb3AyID0gZ2V0VG9JbnQzMihjdXJyZW50SW5z
dHJ1Y3Rpb25bM10udS5vcGVyYW5kKTsKKyAgICAgICAgICAgIE5vZGUqIG9wMSA9IGdldFRvSW50
MzIoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7CisgICAgICAgICAgICBOb2RlKiBv
cDIgPSBnZXRUb0ludDMyKGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpOwogICAgICAg
ICAgICAgc2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsIGFkZFRvR3JhcGgoQml0
QW5kLCBvcDEsIG9wMikpOwogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfYml0YW5kKTsKICAg
ICAgICAgfQogCiAgICAgICAgIGNhc2Ugb3BfYml0b3I6IHsKLSAgICAgICAgICAgIE5vZGVJbmRl
eCBvcDEgPSBnZXRUb0ludDMyKGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOwotICAg
ICAgICAgICAgTm9kZUluZGV4IG9wMiA9IGdldFRvSW50MzIoY3VycmVudEluc3RydWN0aW9uWzNd
LnUub3BlcmFuZCk7CisgICAgICAgICAgICBOb2RlKiBvcDEgPSBnZXRUb0ludDMyKGN1cnJlbnRJ
bnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOworICAgICAgICAgICAgTm9kZSogb3AyID0gZ2V0VG9J
bnQzMihjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKTsKICAgICAgICAgICAgIHNldChj
dXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCBhZGRUb0dyYXBoKEJpdE9yLCBvcDEsIG9w
MikpOwogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfYml0b3IpOwogICAgICAgICB9CiAKICAg
ICAgICAgY2FzZSBvcF9iaXR4b3I6IHsKLSAgICAgICAgICAgIE5vZGVJbmRleCBvcDEgPSBnZXRU
b0ludDMyKGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOwotICAgICAgICAgICAgTm9k
ZUluZGV4IG9wMiA9IGdldFRvSW50MzIoY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZCk7
CisgICAgICAgICAgICBOb2RlKiBvcDEgPSBnZXRUb0ludDMyKGN1cnJlbnRJbnN0cnVjdGlvblsy
XS51Lm9wZXJhbmQpOworICAgICAgICAgICAgTm9kZSogb3AyID0gZ2V0VG9JbnQzMihjdXJyZW50
SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKTsKICAgICAgICAgICAgIHNldChjdXJyZW50SW5zdHJ1
Y3Rpb25bMV0udS5vcGVyYW5kLCBhZGRUb0dyYXBoKEJpdFhvciwgb3AxLCBvcDIpKTsKICAgICAg
ICAgICAgIE5FWFRfT1BDT0RFKG9wX2JpdHhvcik7CiAgICAgICAgIH0KIAogICAgICAgICBjYXNl
IG9wX3JzaGlmdDogewotICAgICAgICAgICAgTm9kZUluZGV4IG9wMSA9IGdldFRvSW50MzIoY3Vy
cmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7Ci0gICAgICAgICAgICBOb2RlSW5kZXggb3Ay
ID0gZ2V0VG9JbnQzMihjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKTsKLSAgICAgICAg
ICAgIE5vZGVJbmRleCByZXN1bHQ7CisgICAgICAgICAgICBOb2RlKiBvcDEgPSBnZXRUb0ludDMy
KGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOworICAgICAgICAgICAgTm9kZSogb3Ay
ID0gZ2V0VG9JbnQzMihjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKTsKKyAgICAgICAg
ICAgIE5vZGUqIHJlc3VsdDsKICAgICAgICAgICAgIC8vIE9wdGltaXplIG91dCBzaGlmdHMgYnkg
emVyby4KICAgICAgICAgICAgIGlmIChpc0ludDMyQ29uc3RhbnQob3AyKSAmJiAhKHZhbHVlT2ZJ
bnQzMkNvbnN0YW50KG9wMikgJiAweDFmKSkKICAgICAgICAgICAgICAgICByZXN1bHQgPSBvcDE7
CkBAIC0yMjQ5LDkgKzIyMTEsOSBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVu
c2lnbmVkCiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIG9wX2xzaGlmdDogewotICAgICAgICAg
ICAgTm9kZUluZGV4IG9wMSA9IGdldFRvSW50MzIoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3Bl
cmFuZCk7Ci0gICAgICAgICAgICBOb2RlSW5kZXggb3AyID0gZ2V0VG9JbnQzMihjdXJyZW50SW5z
dHJ1Y3Rpb25bM10udS5vcGVyYW5kKTsKLSAgICAgICAgICAgIE5vZGVJbmRleCByZXN1bHQ7Cisg
ICAgICAgICAgICBOb2RlKiBvcDEgPSBnZXRUb0ludDMyKGN1cnJlbnRJbnN0cnVjdGlvblsyXS51
Lm9wZXJhbmQpOworICAgICAgICAgICAgTm9kZSogb3AyID0gZ2V0VG9JbnQzMihjdXJyZW50SW5z
dHJ1Y3Rpb25bM10udS5vcGVyYW5kKTsKKyAgICAgICAgICAgIE5vZGUqIHJlc3VsdDsKICAgICAg
ICAgICAgIC8vIE9wdGltaXplIG91dCBzaGlmdHMgYnkgemVyby4KICAgICAgICAgICAgIGlmIChp
c0ludDMyQ29uc3RhbnQob3AyKSAmJiAhKHZhbHVlT2ZJbnQzMkNvbnN0YW50KG9wMikgJiAweDFm
KSkKICAgICAgICAgICAgICAgICByZXN1bHQgPSBvcDE7CkBAIC0yMjYyLDkgKzIyMjQsOSBAQCBi
b29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgIH0KIAogICAg
ICAgICBjYXNlIG9wX3Vyc2hpZnQ6IHsKLSAgICAgICAgICAgIE5vZGVJbmRleCBvcDEgPSBnZXRU
b0ludDMyKGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOwotICAgICAgICAgICAgTm9k
ZUluZGV4IG9wMiA9IGdldFRvSW50MzIoY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZCk7
Ci0gICAgICAgICAgICBOb2RlSW5kZXggcmVzdWx0OworICAgICAgICAgICAgTm9kZSogb3AxID0g
Z2V0VG9JbnQzMihjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKKyAgICAgICAgICAg
IE5vZGUqIG9wMiA9IGdldFRvSW50MzIoY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZCk7
CisgICAgICAgICAgICBOb2RlKiByZXN1bHQ7CiAgICAgICAgICAgICAvLyBUaGUgcmVzdWx0IG9m
IGEgemVyby1leHRlbmRpbmcgcmlnaHQgc2hpZnQgaXMgdHJlYXRlZCBhcyBhbiB1bnNpZ25lZCB2
YWx1ZS4KICAgICAgICAgICAgIC8vIFRoaXMgbWVhbnMgdGhhdCBpZiB0aGUgdG9wIGJpdCBpcyBz
ZXQsIHRoZSByZXN1bHQgaXMgbm90IGluIHRoZSBpbnQzMiByYW5nZSwKICAgICAgICAgICAgIC8v
IGFuZCBhcyBzdWNoIG11c3QgYmUgc3RvcmVkIGFzIGEgZG91YmxlLiBJZiB0aGUgc2hpZnQgYW1v
dW50IGlzIGEgY29uc3RhbnQsCkBAIC0yMjkyLDcgKzIyNTQsNyBAQCBib29sIEJ5dGVDb2RlUGFy
c2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAKICAgICAgICAgY2FzZSBvcF9wcmVfaW5jOiB7CiAg
ICAgICAgICAgICB1bnNpZ25lZCBzcmNEc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVy
YW5kOwotICAgICAgICAgICAgTm9kZUluZGV4IG9wID0gZ2V0KHNyY0RzdCk7CisgICAgICAgICAg
ICBOb2RlKiBvcCA9IGdldChzcmNEc3QpOwogICAgICAgICAgICAgc2V0KHNyY0RzdCwgbWFrZVNh
ZmUoYWRkVG9HcmFwaChBcml0aEFkZCwgb3AsIG9uZSgpKSkpOwogICAgICAgICAgICAgTkVYVF9P
UENPREUob3BfcHJlX2luYyk7CiAgICAgICAgIH0KQEAgLTIzMDEsMTQgKzIyNjMsMTQgQEAgYm9v
bCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgdW5zaWdu
ZWQgcmVzdWx0ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKICAgICAgICAgICAg
IHVuc2lnbmVkIHNyY0RzdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7CiAgICAg
ICAgICAgICBBU1NFUlQocmVzdWx0ICE9IHNyY0RzdCk7IC8vIFJlcXVpcmVkIGZvciBhc3N1bXB0
aW9ucyB3ZSBtYWtlIGR1cmluZyBPU1IuCi0gICAgICAgICAgICBOb2RlSW5kZXggb3AgPSBnZXQo
c3JjRHN0KTsKKyAgICAgICAgICAgIE5vZGUqIG9wID0gZ2V0KHNyY0RzdCk7CiAgICAgICAgICAg
ICBzZXRQYWlyKHJlc3VsdCwgb3AsIHNyY0RzdCwgbWFrZVNhZmUoYWRkVG9HcmFwaChBcml0aEFk
ZCwgb3AsIG9uZSgpKSkpOwogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfcG9zdF9pbmMpOwog
ICAgICAgICB9CiAKICAgICAgICAgY2FzZSBvcF9wcmVfZGVjOiB7CiAgICAgICAgICAgICB1bnNp
Z25lZCBzcmNEc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwotICAgICAgICAg
ICAgTm9kZUluZGV4IG9wID0gZ2V0KHNyY0RzdCk7CisgICAgICAgICAgICBOb2RlKiBvcCA9IGdl
dChzcmNEc3QpOwogICAgICAgICAgICAgc2V0KHNyY0RzdCwgbWFrZVNhZmUoYWRkVG9HcmFwaChB
cml0aFN1Yiwgb3AsIG9uZSgpKSkpOwogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfcHJlX2Rl
Yyk7CiAgICAgICAgIH0KQEAgLTIzMTYsNyArMjI3OCw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6
OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgY2FzZSBvcF9wb3N0X2RlYzogewogICAgICAg
ICAgICAgdW5zaWduZWQgcmVzdWx0ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsK
ICAgICAgICAgICAgIHVuc2lnbmVkIHNyY0RzdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9w
ZXJhbmQ7Ci0gICAgICAgICAgICBOb2RlSW5kZXggb3AgPSBnZXQoc3JjRHN0KTsKKyAgICAgICAg
ICAgIE5vZGUqIG9wID0gZ2V0KHNyY0RzdCk7CiAgICAgICAgICAgICBzZXRQYWlyKHJlc3VsdCwg
b3AsIHNyY0RzdCwgbWFrZVNhZmUoYWRkVG9HcmFwaChBcml0aFN1Yiwgb3AsIG9uZSgpKSkpOwog
ICAgICAgICAgICAgTkVYVF9PUENPREUob3BfcG9zdF9kZWMpOwogICAgICAgICB9CkBAIC0yMzI0
LDkgKzIyODYsOSBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAg
ICAgICAgIC8vID09PSBBcml0aG1ldGljIG9wZXJhdGlvbnMgPT09CiAKICAgICAgICAgY2FzZSBv
cF9hZGQ6IHsKLSAgICAgICAgICAgIE5vZGVJbmRleCBvcDEgPSBnZXQoY3VycmVudEluc3RydWN0
aW9uWzJdLnUub3BlcmFuZCk7Ci0gICAgICAgICAgICBOb2RlSW5kZXggb3AyID0gZ2V0KGN1cnJl
bnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpOwotICAgICAgICAgICAgaWYgKG1fZ3JhcGhbb3Ax
XS5oYXNOdW1iZXJSZXN1bHQoKSAmJiBtX2dyYXBoW29wMl0uaGFzTnVtYmVyUmVzdWx0KCkpCisg
ICAgICAgICAgICBOb2RlKiBvcDEgPSBnZXQoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFu
ZCk7CisgICAgICAgICAgICBOb2RlKiBvcDIgPSBnZXQoY3VycmVudEluc3RydWN0aW9uWzNdLnUu
b3BlcmFuZCk7CisgICAgICAgICAgICBpZiAob3AxLT5oYXNOdW1iZXJSZXN1bHQoKSAmJiBvcDIt
Pmhhc051bWJlclJlc3VsdCgpKQogICAgICAgICAgICAgICAgIHNldChjdXJyZW50SW5zdHJ1Y3Rp
b25bMV0udS5vcGVyYW5kLCBtYWtlU2FmZShhZGRUb0dyYXBoKEFyaXRoQWRkLCBvcDEsIG9wMikp
KTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBzZXQoY3VycmVudEluc3RydWN0
aW9uWzFdLnUub3BlcmFuZCwgbWFrZVNhZmUoYWRkVG9HcmFwaChWYWx1ZUFkZCwgb3AxLCBvcDIp
KSk7CkBAIC0yMzM0LDM2ICsyMjk2LDM2IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxv
Y2sodW5zaWduZWQKICAgICAgICAgfQogCiAgICAgICAgIGNhc2Ugb3Bfc3ViOiB7Ci0gICAgICAg
ICAgICBOb2RlSW5kZXggb3AxID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQp
OwotICAgICAgICAgICAgTm9kZUluZGV4IG9wMiA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bM10u
dS5vcGVyYW5kKTsKKyAgICAgICAgICAgIE5vZGUqIG9wMSA9IGdldChjdXJyZW50SW5zdHJ1Y3Rp
b25bMl0udS5vcGVyYW5kKTsKKyAgICAgICAgICAgIE5vZGUqIG9wMiA9IGdldChjdXJyZW50SW5z
dHJ1Y3Rpb25bM10udS5vcGVyYW5kKTsKICAgICAgICAgICAgIHNldChjdXJyZW50SW5zdHJ1Y3Rp
b25bMV0udS5vcGVyYW5kLCBtYWtlU2FmZShhZGRUb0dyYXBoKEFyaXRoU3ViLCBvcDEsIG9wMikp
KTsKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX3N1Yik7CiAgICAgICAgIH0KIAogICAgICAg
ICBjYXNlIG9wX25lZ2F0ZTogewotICAgICAgICAgICAgTm9kZUluZGV4IG9wMSA9IGdldChjdXJy
ZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKKyAgICAgICAgICAgIE5vZGUqIG9wMSA9IGdl
dChjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKICAgICAgICAgICAgIHNldChjdXJy
ZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCBtYWtlU2FmZShhZGRUb0dyYXBoKEFyaXRoTmVn
YXRlLCBvcDEpKSk7CiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9uZWdhdGUpOwogICAgICAg
ICB9CiAKICAgICAgICAgY2FzZSBvcF9tdWw6IHsKICAgICAgICAgICAgIC8vIE11bHRpcGx5IHJl
cXVpcmVzIHRoYXQgdGhlIGlucHV0cyBhcmUgbm90IHRydW5jYXRlZCwgdW5mb3J0dW5hdGVseS4K
LSAgICAgICAgICAgIE5vZGVJbmRleCBvcDEgPSBnZXQoY3VycmVudEluc3RydWN0aW9uWzJdLnUu
b3BlcmFuZCk7Ci0gICAgICAgICAgICBOb2RlSW5kZXggb3AyID0gZ2V0KGN1cnJlbnRJbnN0cnVj
dGlvblszXS51Lm9wZXJhbmQpOworICAgICAgICAgICAgTm9kZSogb3AxID0gZ2V0KGN1cnJlbnRJ
bnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOworICAgICAgICAgICAgTm9kZSogb3AyID0gZ2V0KGN1
cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpOwogICAgICAgICAgICAgc2V0KGN1cnJlbnRJ
bnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsIG1ha2VTYWZlKGFkZFRvR3JhcGgoQXJpdGhNdWwsIG9w
MSwgb3AyKSkpOwogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfbXVsKTsKICAgICAgICAgfQog
CiAgICAgICAgIGNhc2Ugb3BfbW9kOiB7Ci0gICAgICAgICAgICBOb2RlSW5kZXggb3AxID0gZ2V0
KGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOwotICAgICAgICAgICAgTm9kZUluZGV4
IG9wMiA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKTsKKyAgICAgICAgICAg
IE5vZGUqIG9wMSA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKKyAgICAg
ICAgICAgIE5vZGUqIG9wMiA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKTsK
ICAgICAgICAgICAgIHNldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCBtYWtlU2Fm
ZShhZGRUb0dyYXBoKEFyaXRoTW9kLCBvcDEsIG9wMikpKTsKICAgICAgICAgICAgIE5FWFRfT1BD
T0RFKG9wX21vZCk7CiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIG9wX2RpdjogewotICAgICAg
ICAgICAgTm9kZUluZGV4IG9wMSA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5k
KTsKLSAgICAgICAgICAgIE5vZGVJbmRleCBvcDIgPSBnZXQoY3VycmVudEluc3RydWN0aW9uWzNd
LnUub3BlcmFuZCk7CisgICAgICAgICAgICBOb2RlKiBvcDEgPSBnZXQoY3VycmVudEluc3RydWN0
aW9uWzJdLnUub3BlcmFuZCk7CisgICAgICAgICAgICBOb2RlKiBvcDIgPSBnZXQoY3VycmVudElu
c3RydWN0aW9uWzNdLnUub3BlcmFuZCk7CiAgICAgICAgICAgICBzZXQoY3VycmVudEluc3RydWN0
aW9uWzFdLnUub3BlcmFuZCwgbWFrZURpdlNhZmUoYWRkVG9HcmFwaChBcml0aERpdiwgb3AxLCBv
cDIpKSk7CiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9kaXYpOwogICAgICAgICB9CkBAIC0y
Mzc2LDcgKzIzMzgsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVk
CiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9kZWJ1Zyk7CiAjZW5kaWYKICAgICAgICAgY2Fz
ZSBvcF9tb3Y6IHsKLSAgICAgICAgICAgIE5vZGVJbmRleCBvcCA9IGdldChjdXJyZW50SW5zdHJ1
Y3Rpb25bMl0udS5vcGVyYW5kKTsKKyAgICAgICAgICAgIE5vZGUqIG9wID0gZ2V0KGN1cnJlbnRJ
bnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOwogICAgICAgICAgICAgc2V0KGN1cnJlbnRJbnN0cnVj
dGlvblsxXS51Lm9wZXJhbmQsIG9wKTsKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX21vdik7
CiAgICAgICAgIH0KQEAgLTIzODYsNTYgKzIzNDgsNTYgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6
cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfY2hlY2tfaGFz
X2luc3RhbmNlKTsKIAogICAgICAgICBjYXNlIG9wX2luc3RhbmNlb2Y6IHsKLSAgICAgICAgICAg
IE5vZGVJbmRleCB2YWx1ZSA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsK
LSAgICAgICAgICAgIE5vZGVJbmRleCBwcm90b3R5cGUgPSBnZXQoY3VycmVudEluc3RydWN0aW9u
WzNdLnUub3BlcmFuZCk7CisgICAgICAgICAgICBOb2RlKiB2YWx1ZSA9IGdldChjdXJyZW50SW5z
dHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKKyAgICAgICAgICAgIE5vZGUqIHByb3RvdHlwZSA9IGdl
dChjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKTsKICAgICAgICAgICAgIHNldChjdXJy
ZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCBhZGRUb0dyYXBoKEluc3RhbmNlT2YsIHZhbHVl
LCBwcm90b3R5cGUpKTsKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2luc3RhbmNlb2YpOwog
ICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBvcF9pc191bmRlZmluZWQ6IHsK
LSAgICAgICAgICAgIE5vZGVJbmRleCB2YWx1ZSA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMl0u
dS5vcGVyYW5kKTsKKyAgICAgICAgICAgIE5vZGUqIHZhbHVlID0gZ2V0KGN1cnJlbnRJbnN0cnVj
dGlvblsyXS51Lm9wZXJhbmQpOwogICAgICAgICAgICAgc2V0KGN1cnJlbnRJbnN0cnVjdGlvblsx
XS51Lm9wZXJhbmQsIGFkZFRvR3JhcGgoSXNVbmRlZmluZWQsIHZhbHVlKSk7CiAgICAgICAgICAg
ICBORVhUX09QQ09ERShvcF9pc191bmRlZmluZWQpOwogICAgICAgICB9CiAKICAgICAgICAgY2Fz
ZSBvcF9pc19ib29sZWFuOiB7Ci0gICAgICAgICAgICBOb2RlSW5kZXggdmFsdWUgPSBnZXQoY3Vy
cmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7CisgICAgICAgICAgICBOb2RlKiB2YWx1ZSA9
IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKICAgICAgICAgICAgIHNldChj
dXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCBhZGRUb0dyYXBoKElzQm9vbGVhbiwgdmFs
dWUpKTsKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2lzX2Jvb2xlYW4pOwogICAgICAgICB9
CiAKICAgICAgICAgY2FzZSBvcF9pc19udW1iZXI6IHsKLSAgICAgICAgICAgIE5vZGVJbmRleCB2
YWx1ZSA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKKyAgICAgICAgICAg
IE5vZGUqIHZhbHVlID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOwogICAg
ICAgICAgICAgc2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsIGFkZFRvR3JhcGgo
SXNOdW1iZXIsIHZhbHVlKSk7CiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9pc19udW1iZXIp
OwogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBvcF9pc19zdHJpbmc6IHsKLSAgICAgICAgICAg
IE5vZGVJbmRleCB2YWx1ZSA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsK
KyAgICAgICAgICAgIE5vZGUqIHZhbHVlID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9w
ZXJhbmQpOwogICAgICAgICAgICAgc2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQs
IGFkZFRvR3JhcGgoSXNTdHJpbmcsIHZhbHVlKSk7CiAgICAgICAgICAgICBORVhUX09QQ09ERShv
cF9pc19zdHJpbmcpOwogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBvcF9pc19vYmplY3Q6IHsK
LSAgICAgICAgICAgIE5vZGVJbmRleCB2YWx1ZSA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMl0u
dS5vcGVyYW5kKTsKKyAgICAgICAgICAgIE5vZGUqIHZhbHVlID0gZ2V0KGN1cnJlbnRJbnN0cnVj
dGlvblsyXS51Lm9wZXJhbmQpOwogICAgICAgICAgICAgc2V0KGN1cnJlbnRJbnN0cnVjdGlvblsx
XS51Lm9wZXJhbmQsIGFkZFRvR3JhcGgoSXNPYmplY3QsIHZhbHVlKSk7CiAgICAgICAgICAgICBO
RVhUX09QQ09ERShvcF9pc19vYmplY3QpOwogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBvcF9p
c19mdW5jdGlvbjogewotICAgICAgICAgICAgTm9kZUluZGV4IHZhbHVlID0gZ2V0KGN1cnJlbnRJ
bnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOworICAgICAgICAgICAgTm9kZSogdmFsdWUgPSBnZXQo
Y3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7CiAgICAgICAgICAgICBzZXQoY3VycmVu
dEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwgYWRkVG9HcmFwaChJc0Z1bmN0aW9uLCB2YWx1ZSkp
OwogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfaXNfZnVuY3Rpb24pOwogICAgICAgICB9CiAK
ICAgICAgICAgY2FzZSBvcF9ub3Q6IHsKLSAgICAgICAgICAgIE5vZGVJbmRleCB2YWx1ZSA9IGdl
dChjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKKyAgICAgICAgICAgIE5vZGUqIHZh
bHVlID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOwogICAgICAgICAgICAg
c2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsIGFkZFRvR3JhcGgoTG9naWNhbE5v
dCwgdmFsdWUpKTsKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX25vdCk7CiAgICAgICAgIH0K
ICAgICAgICAgICAgIAogICAgICAgICBjYXNlIG9wX3RvX3ByaW1pdGl2ZTogewotICAgICAgICAg
ICAgTm9kZUluZGV4IHZhbHVlID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQp
OworICAgICAgICAgICAgTm9kZSogdmFsdWUgPSBnZXQoY3VycmVudEluc3RydWN0aW9uWzJdLnUu
b3BlcmFuZCk7CiAgICAgICAgICAgICBzZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFu
ZCwgYWRkVG9HcmFwaChUb1ByaW1pdGl2ZSwgdmFsdWUpKTsKICAgICAgICAgICAgIE5FWFRfT1BD
T0RFKG9wX3RvX3ByaW1pdGl2ZSk7CiAgICAgICAgIH0KQEAgLTI0NTAsNjkgKzI0MTIsNjkgQEAg
Ym9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICB9CiAKICAg
ICAgICAgY2FzZSBvcF9sZXNzOiB7Ci0gICAgICAgICAgICBOb2RlSW5kZXggb3AxID0gZ2V0KGN1
cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOwotICAgICAgICAgICAgTm9kZUluZGV4IG9w
MiA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKTsKKyAgICAgICAgICAgIE5v
ZGUqIG9wMSA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKKyAgICAgICAg
ICAgIE5vZGUqIG9wMiA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKTsKICAg
ICAgICAgICAgIHNldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCBhZGRUb0dyYXBo
KENvbXBhcmVMZXNzLCBvcDEsIG9wMikpOwogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfbGVz
cyk7CiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIG9wX2xlc3NlcTogewotICAgICAgICAgICAg
Tm9kZUluZGV4IG9wMSA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKLSAg
ICAgICAgICAgIE5vZGVJbmRleCBvcDIgPSBnZXQoY3VycmVudEluc3RydWN0aW9uWzNdLnUub3Bl
cmFuZCk7CisgICAgICAgICAgICBOb2RlKiBvcDEgPSBnZXQoY3VycmVudEluc3RydWN0aW9uWzJd
LnUub3BlcmFuZCk7CisgICAgICAgICAgICBOb2RlKiBvcDIgPSBnZXQoY3VycmVudEluc3RydWN0
aW9uWzNdLnUub3BlcmFuZCk7CiAgICAgICAgICAgICBzZXQoY3VycmVudEluc3RydWN0aW9uWzFd
LnUub3BlcmFuZCwgYWRkVG9HcmFwaChDb21wYXJlTGVzc0VxLCBvcDEsIG9wMikpOwogICAgICAg
ICAgICAgTkVYVF9PUENPREUob3BfbGVzc2VxKTsKICAgICAgICAgfQogCiAgICAgICAgIGNhc2Ug
b3BfZ3JlYXRlcjogewotICAgICAgICAgICAgTm9kZUluZGV4IG9wMSA9IGdldChjdXJyZW50SW5z
dHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKLSAgICAgICAgICAgIE5vZGVJbmRleCBvcDIgPSBnZXQo
Y3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZCk7CisgICAgICAgICAgICBOb2RlKiBvcDEg
PSBnZXQoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7CisgICAgICAgICAgICBOb2Rl
KiBvcDIgPSBnZXQoY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZCk7CiAgICAgICAgICAg
ICBzZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwgYWRkVG9HcmFwaChDb21wYXJl
R3JlYXRlciwgb3AxLCBvcDIpKTsKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2dyZWF0ZXIp
OwogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBvcF9ncmVhdGVyZXE6IHsKLSAgICAgICAgICAg
IE5vZGVJbmRleCBvcDEgPSBnZXQoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7Ci0g
ICAgICAgICAgICBOb2RlSW5kZXggb3AyID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9w
ZXJhbmQpOworICAgICAgICAgICAgTm9kZSogb3AxID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsy
XS51Lm9wZXJhbmQpOworICAgICAgICAgICAgTm9kZSogb3AyID0gZ2V0KGN1cnJlbnRJbnN0cnVj
dGlvblszXS51Lm9wZXJhbmQpOwogICAgICAgICAgICAgc2V0KGN1cnJlbnRJbnN0cnVjdGlvblsx
XS51Lm9wZXJhbmQsIGFkZFRvR3JhcGgoQ29tcGFyZUdyZWF0ZXJFcSwgb3AxLCBvcDIpKTsKICAg
ICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2dyZWF0ZXJlcSk7CiAgICAgICAgIH0KIAogICAgICAg
ICBjYXNlIG9wX2VxOiB7Ci0gICAgICAgICAgICBOb2RlSW5kZXggb3AxID0gZ2V0KGN1cnJlbnRJ
bnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOwotICAgICAgICAgICAgTm9kZUluZGV4IG9wMiA9IGdl
dChjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKTsKKyAgICAgICAgICAgIE5vZGUqIG9w
MSA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKKyAgICAgICAgICAgIE5v
ZGUqIG9wMiA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKTsKICAgICAgICAg
ICAgIHNldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCBhZGRUb0dyYXBoKENvbXBh
cmVFcSwgb3AxLCBvcDIpKTsKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2VxKTsKICAgICAg
ICAgfQogCiAgICAgICAgIGNhc2Ugb3BfZXFfbnVsbDogewotICAgICAgICAgICAgTm9kZUluZGV4
IHZhbHVlID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOworICAgICAgICAg
ICAgTm9kZSogdmFsdWUgPSBnZXQoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7CiAg
ICAgICAgICAgICBzZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwgYWRkVG9HcmFw
aChDb21wYXJlRXEsIHZhbHVlLCBjb25zdGFudE51bGwoKSkpOwogICAgICAgICAgICAgTkVYVF9P
UENPREUob3BfZXFfbnVsbCk7CiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIG9wX3N0cmljdGVx
OiB7Ci0gICAgICAgICAgICBOb2RlSW5kZXggb3AxID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsy
XS51Lm9wZXJhbmQpOwotICAgICAgICAgICAgTm9kZUluZGV4IG9wMiA9IGdldChjdXJyZW50SW5z
dHJ1Y3Rpb25bM10udS5vcGVyYW5kKTsKKyAgICAgICAgICAgIE5vZGUqIG9wMSA9IGdldChjdXJy
ZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKKyAgICAgICAgICAgIE5vZGUqIG9wMiA9IGdl
dChjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKTsKICAgICAgICAgICAgIHNldChjdXJy
ZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCBhZGRUb0dyYXBoKENvbXBhcmVTdHJpY3RFcSwg
b3AxLCBvcDIpKTsKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX3N0cmljdGVxKTsKICAgICAg
ICAgfQogCiAgICAgICAgIGNhc2Ugb3BfbmVxOiB7Ci0gICAgICAgICAgICBOb2RlSW5kZXggb3Ax
ID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOwotICAgICAgICAgICAgTm9k
ZUluZGV4IG9wMiA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKTsKKyAgICAg
ICAgICAgIE5vZGUqIG9wMSA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsK
KyAgICAgICAgICAgIE5vZGUqIG9wMiA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVy
YW5kKTsKICAgICAgICAgICAgIHNldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCBh
ZGRUb0dyYXBoKExvZ2ljYWxOb3QsIGFkZFRvR3JhcGgoQ29tcGFyZUVxLCBvcDEsIG9wMikpKTsK
ICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX25lcSk7CiAgICAgICAgIH0KIAogICAgICAgICBj
YXNlIG9wX25lcV9udWxsOiB7Ci0gICAgICAgICAgICBOb2RlSW5kZXggdmFsdWUgPSBnZXQoY3Vy
cmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7CisgICAgICAgICAgICBOb2RlKiB2YWx1ZSA9
IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKICAgICAgICAgICAgIHNldChj
dXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCBhZGRUb0dyYXBoKExvZ2ljYWxOb3QsIGFk
ZFRvR3JhcGgoQ29tcGFyZUVxLCB2YWx1ZSwgY29uc3RhbnROdWxsKCkpKSk7CiAgICAgICAgICAg
ICBORVhUX09QQ09ERShvcF9uZXFfbnVsbCk7CiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIG9w
X25zdHJpY3RlcTogewotICAgICAgICAgICAgTm9kZUluZGV4IG9wMSA9IGdldChjdXJyZW50SW5z
dHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKLSAgICAgICAgICAgIE5vZGVJbmRleCBvcDIgPSBnZXQo
Y3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZCk7CisgICAgICAgICAgICBOb2RlKiBvcDEg
PSBnZXQoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7CisgICAgICAgICAgICBOb2Rl
KiBvcDIgPSBnZXQoY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZCk7CiAgICAgICAgICAg
ICBzZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwgYWRkVG9HcmFwaChMb2dpY2Fs
Tm90LCBhZGRUb0dyYXBoKENvbXBhcmVTdHJpY3RFcSwgb3AxLCBvcDIpKSk7CiAgICAgICAgICAg
ICBORVhUX09QQ09ERShvcF9uc3RyaWN0ZXEpOwogICAgICAgICB9CkBAIC0yNTIyLDIyICsyNDg0
LDIyIEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAg
Y2FzZSBvcF9nZXRfYnlfdmFsOiB7CiAgICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0
aW9uID0gZ2V0UHJlZGljdGlvbigpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBOb2RlSW5k
ZXggYmFzZSA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKKyAgICAgICAg
ICAgIE5vZGUqIGJhc2UgPSBnZXQoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7CiAg
ICAgICAgICAgICBBcnJheU1vZGUgYXJyYXlNb2RlID0gZ2V0QXJyYXlNb2RlQW5kRW1pdENoZWNr
cyhjdXJyZW50SW5zdHJ1Y3Rpb25bNF0udS5hcnJheVByb2ZpbGUsIEFycmF5OjpSZWFkLCBiYXNl
KTsKLSAgICAgICAgICAgIE5vZGVJbmRleCBwcm9wZXJ0eSA9IGdldChjdXJyZW50SW5zdHJ1Y3Rp
b25bM10udS5vcGVyYW5kKTsKLSAgICAgICAgICAgIE5vZGVJbmRleCBnZXRCeVZhbCA9IGFkZFRv
R3JhcGgoR2V0QnlWYWwsIE9wSW5mbyhhcnJheU1vZGUuYXNXb3JkKCkpLCBPcEluZm8ocHJlZGlj
dGlvbiksIGJhc2UsIHByb3BlcnR5KTsKKyAgICAgICAgICAgIE5vZGUqIHByb3BlcnR5ID0gZ2V0
KGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpOworICAgICAgICAgICAgTm9kZSogZ2V0
QnlWYWwgPSBhZGRUb0dyYXBoKEdldEJ5VmFsLCBPcEluZm8oYXJyYXlNb2RlLmFzV29yZCgpKSwg
T3BJbmZvKHByZWRpY3Rpb24pLCBiYXNlLCBwcm9wZXJ0eSk7CiAgICAgICAgICAgICBzZXQoY3Vy
cmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwgZ2V0QnlWYWwpOwogCiAgICAgICAgICAgICBO
RVhUX09QQ09ERShvcF9nZXRfYnlfdmFsKTsKICAgICAgICAgfQogCiAgICAgICAgIGNhc2Ugb3Bf
cHV0X2J5X3ZhbDogewotICAgICAgICAgICAgTm9kZUluZGV4IGJhc2UgPSBnZXQoY3VycmVudElu
c3RydWN0aW9uWzFdLnUub3BlcmFuZCk7CisgICAgICAgICAgICBOb2RlKiBiYXNlID0gZ2V0KGN1
cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpOwogCiAgICAgICAgICAgICBBcnJheU1vZGUg
YXJyYXlNb2RlID0gZ2V0QXJyYXlNb2RlQW5kRW1pdENoZWNrcyhjdXJyZW50SW5zdHJ1Y3Rpb25b
NF0udS5hcnJheVByb2ZpbGUsIEFycmF5OjpXcml0ZSwgYmFzZSk7CiAgICAgICAgICAgICAKLSAg
ICAgICAgICAgIE5vZGVJbmRleCBwcm9wZXJ0eSA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMl0u
dS5vcGVyYW5kKTsKLSAgICAgICAgICAgIE5vZGVJbmRleCB2YWx1ZSA9IGdldChjdXJyZW50SW5z
dHJ1Y3Rpb25bM10udS5vcGVyYW5kKTsKKyAgICAgICAgICAgIE5vZGUqIHByb3BlcnR5ID0gZ2V0
KGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOworICAgICAgICAgICAgTm9kZSogdmFs
dWUgPSBnZXQoY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZCk7CiAgICAgICAgICAgICAK
ICAgICAgICAgICAgIGFkZFZhckFyZ0NoaWxkKGJhc2UpOwogICAgICAgICAgICAgYWRkVmFyQXJn
Q2hpbGQocHJvcGVydHkpOwpAQCAtMjU1Myw3ICsyNTE1LDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNl
cjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICBjYXNlIG9wX2dldF9hcnJheV9sZW5ndGg6
IHsKICAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24gPSBnZXRQcmVkaWN0aW9u
KCk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIE5vZGVJbmRleCBiYXNlID0gZ2V0KGN1cnJl
bnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOworICAgICAgICAgICAgTm9kZSogYmFzZSA9IGdl
dChjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKICAgICAgICAgICAgIHVuc2lnbmVk
IGlkZW50aWZpZXJOdW1iZXIgPSBtX2lubGluZVN0YWNrVG9wLT5tX2lkZW50aWZpZXJSZW1hcFtj
dXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kXTsKICAgICAgICAgICAgIAogICAgICAgICAg
ICAgSWRlbnRpZmllciBpZGVudGlmaWVyID0gbV9jb2RlQmxvY2stPmlkZW50aWZpZXIoaWRlbnRp
Zmllck51bWJlcik7CkBAIC0yNTcxLDggKzI1MzMsOCBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpw
YXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgIGNhc2Ugb3BfcHV0X2J5X2lkX3RyYW5zaXRpb25f
bm9ybWFsOgogICAgICAgICBjYXNlIG9wX3B1dF9ieV9pZF90cmFuc2l0aW9uX2RpcmVjdF9vdXRf
b2ZfbGluZToKICAgICAgICAgY2FzZSBvcF9wdXRfYnlfaWRfdHJhbnNpdGlvbl9ub3JtYWxfb3V0
X29mX2xpbmU6IHsKLSAgICAgICAgICAgIE5vZGVJbmRleCB2YWx1ZSA9IGdldChjdXJyZW50SW5z
dHJ1Y3Rpb25bM10udS5vcGVyYW5kKTsKLSAgICAgICAgICAgIE5vZGVJbmRleCBiYXNlID0gZ2V0
KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpOworICAgICAgICAgICAgTm9kZSogdmFs
dWUgPSBnZXQoY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZCk7CisgICAgICAgICAgICBO
b2RlKiBiYXNlID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpOwogICAgICAg
ICAgICAgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciA9IG1faW5saW5lU3RhY2tUb3AtPm1faWRl
bnRpZmllclJlbWFwW2N1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmRdOwogICAgICAgICAg
ICAgYm9vbCBkaXJlY3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bOF0udS5vcGVyYW5kOwogCkBAIC0y
NTg3LDcgKzI1NDksNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVk
CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlmICghaGFzRXhpdFNpdGUgJiYgcHV0QnlJZFN0
YXR1cy5pc1NpbXBsZVJlcGxhY2UoKSkgewogICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoQ2hl
Y2tTdHJ1Y3R1cmUsIE9wSW5mbyhtX2dyYXBoLmFkZFN0cnVjdHVyZVNldChwdXRCeUlkU3RhdHVz
Lm9sZFN0cnVjdHVyZSgpKSksIGJhc2UpOwotICAgICAgICAgICAgICAgIE5vZGVJbmRleCBwcm9w
ZXJ0eVN0b3JhZ2U7CisgICAgICAgICAgICAgICAgTm9kZSogcHJvcGVydHlTdG9yYWdlOwogICAg
ICAgICAgICAgICAgIGlmIChpc0lubGluZU9mZnNldChwdXRCeUlkU3RhdHVzLm9mZnNldCgpKSkK
ICAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlTdG9yYWdlID0gYmFzZTsKICAgICAgICAgICAg
ICAgICBlbHNlCkBAIC0yNjIyLDcgKzI1ODQsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJz
ZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIEFTU0VS
VChwdXRCeUlkU3RhdHVzLm9sZFN0cnVjdHVyZSgpLT50cmFuc2l0aW9uV2F0Y2hwb2ludFNldEhh
c0JlZW5JbnZhbGlkYXRlZCgpKTsKICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBO
b2RlSW5kZXggcHJvcGVydHlTdG9yYWdlOworICAgICAgICAgICAgICAgIE5vZGUqIHByb3BlcnR5
U3RvcmFnZTsKICAgICAgICAgICAgICAgICBTdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSogdHJhbnNp
dGlvbkRhdGEgPQogICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLmFkZFN0cnVjdHVyZVRyYW5z
aXRpb25EYXRhKAogICAgICAgICAgICAgICAgICAgICAgICAgU3RydWN0dXJlVHJhbnNpdGlvbkRh
dGEoCkBAIC0yNjc5LDcgKzI2NDEsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2Nr
KHVuc2lnbmVkCiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIG9wX2luaXRfZ2xvYmFsX2NvbnN0
OiB7Ci0gICAgICAgICAgICBOb2RlSW5kZXggdmFsdWUgPSBnZXQoY3VycmVudEluc3RydWN0aW9u
WzJdLnUub3BlcmFuZCk7CisgICAgICAgICAgICBOb2RlKiB2YWx1ZSA9IGdldChjdXJyZW50SW5z
dHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKICAgICAgICAgICAgIGFkZFRvR3JhcGgoCiAgICAgICAg
ICAgICAgICAgUHV0R2xvYmFsVmFyLAogICAgICAgICAgICAgICAgIE9wSW5mbyhtX2lubGluZVN0
YWNrVG9wLT5tX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPmFzc2VydFJlZ2lzdGVySXNJblRo
aXNPYmplY3QoY3VycmVudEluc3RydWN0aW9uWzFdLnUucmVnaXN0ZXJQb2ludGVyKSksCkBAIC0y
Njg4LDcgKzI2NTAsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVk
CiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIG9wX2luaXRfZ2xvYmFsX2NvbnN0X2NoZWNrOiB7
Ci0gICAgICAgICAgICBOb2RlSW5kZXggdmFsdWUgPSBnZXQoY3VycmVudEluc3RydWN0aW9uWzJd
LnUub3BlcmFuZCk7CisgICAgICAgICAgICBOb2RlKiB2YWx1ZSA9IGdldChjdXJyZW50SW5zdHJ1
Y3Rpb25bMl0udS5vcGVyYW5kKTsKICAgICAgICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrID0g
bV9pbmxpbmVTdGFja1RvcC0+bV9jb2RlQmxvY2s7CiAgICAgICAgICAgICBKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0ID0gY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKTsKICAgICAgICAgICAg
IHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIgPSBtX2lubGluZVN0YWNrVG9wLT5tX2lkZW50aWZp
ZXJSZW1hcFtjdXJyZW50SW5zdHJ1Y3Rpb25bNF0udS5vcGVyYW5kXTsKQEAgLTI3MjYsMTUyICsy
Njg4LDE1MiBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAKICAg
ICAgICAgY2FzZSBvcF9qdHJ1ZTogewogICAgICAgICAgICAgdW5zaWduZWQgcmVsYXRpdmVPZmZz
ZXQgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwotICAgICAgICAgICAgTm9kZUlu
ZGV4IGNvbmRpdGlvbiA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKTsKKyAg
ICAgICAgICAgIE5vZGUqIGNvbmRpdGlvbiA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5v
cGVyYW5kKTsKICAgICAgICAgICAgIGFkZFRvR3JhcGgoQnJhbmNoLCBPcEluZm8obV9jdXJyZW50
SW5kZXggKyByZWxhdGl2ZU9mZnNldCksIE9wSW5mbyhtX2N1cnJlbnRJbmRleCArIE9QQ09ERV9M
RU5HVEgob3BfanRydWUpKSwgY29uZGl0aW9uKTsKICAgICAgICAgICAgIExBU1RfT1BDT0RFKG9w
X2p0cnVlKTsKICAgICAgICAgfQogCiAgICAgICAgIGNhc2Ugb3BfamZhbHNlOiB7CiAgICAgICAg
ICAgICB1bnNpZ25lZCByZWxhdGl2ZU9mZnNldCA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9w
ZXJhbmQ7Ci0gICAgICAgICAgICBOb2RlSW5kZXggY29uZGl0aW9uID0gZ2V0KGN1cnJlbnRJbnN0
cnVjdGlvblsxXS51Lm9wZXJhbmQpOworICAgICAgICAgICAgTm9kZSogY29uZGl0aW9uID0gZ2V0
KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpOwogICAgICAgICAgICAgYWRkVG9HcmFw
aChCcmFuY2gsIE9wSW5mbyhtX2N1cnJlbnRJbmRleCArIE9QQ09ERV9MRU5HVEgob3BfamZhbHNl
KSksIE9wSW5mbyhtX2N1cnJlbnRJbmRleCArIHJlbGF0aXZlT2Zmc2V0KSwgY29uZGl0aW9uKTsK
ICAgICAgICAgICAgIExBU1RfT1BDT0RFKG9wX2pmYWxzZSk7CiAgICAgICAgIH0KIAogICAgICAg
ICBjYXNlIG9wX2xvb3BfaWZfdHJ1ZTogewogICAgICAgICAgICAgdW5zaWduZWQgcmVsYXRpdmVP
ZmZzZXQgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwotICAgICAgICAgICAgTm9k
ZUluZGV4IGNvbmRpdGlvbiA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKTsK
KyAgICAgICAgICAgIE5vZGUqIGNvbmRpdGlvbiA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0u
dS5vcGVyYW5kKTsKICAgICAgICAgICAgIGFkZFRvR3JhcGgoQnJhbmNoLCBPcEluZm8obV9jdXJy
ZW50SW5kZXggKyByZWxhdGl2ZU9mZnNldCksIE9wSW5mbyhtX2N1cnJlbnRJbmRleCArIE9QQ09E
RV9MRU5HVEgob3BfbG9vcF9pZl90cnVlKSksIGNvbmRpdGlvbik7CiAgICAgICAgICAgICBMQVNU
X09QQ09ERShvcF9sb29wX2lmX3RydWUpOwogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBvcF9s
b29wX2lmX2ZhbHNlOiB7CiAgICAgICAgICAgICB1bnNpZ25lZCByZWxhdGl2ZU9mZnNldCA9IGN1
cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBOb2RlSW5kZXggY29u
ZGl0aW9uID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpOworICAgICAgICAg
ICAgTm9kZSogY29uZGl0aW9uID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQp
OwogICAgICAgICAgICAgYWRkVG9HcmFwaChCcmFuY2gsIE9wSW5mbyhtX2N1cnJlbnRJbmRleCAr
IE9QQ09ERV9MRU5HVEgob3BfbG9vcF9pZl9mYWxzZSkpLCBPcEluZm8obV9jdXJyZW50SW5kZXgg
KyByZWxhdGl2ZU9mZnNldCksIGNvbmRpdGlvbik7CiAgICAgICAgICAgICBMQVNUX09QQ09ERShv
cF9sb29wX2lmX2ZhbHNlKTsKICAgICAgICAgfQogCiAgICAgICAgIGNhc2Ugb3BfamVxX251bGw6
IHsKICAgICAgICAgICAgIHVuc2lnbmVkIHJlbGF0aXZlT2Zmc2V0ID0gY3VycmVudEluc3RydWN0
aW9uWzJdLnUub3BlcmFuZDsKLSAgICAgICAgICAgIE5vZGVJbmRleCB2YWx1ZSA9IGdldChjdXJy
ZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKTsKLSAgICAgICAgICAgIE5vZGVJbmRleCBjb25k
aXRpb24gPSBhZGRUb0dyYXBoKENvbXBhcmVFcSwgdmFsdWUsIGNvbnN0YW50TnVsbCgpKTsKKyAg
ICAgICAgICAgIE5vZGUqIHZhbHVlID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJh
bmQpOworICAgICAgICAgICAgTm9kZSogY29uZGl0aW9uID0gYWRkVG9HcmFwaChDb21wYXJlRXEs
IHZhbHVlLCBjb25zdGFudE51bGwoKSk7CiAgICAgICAgICAgICBhZGRUb0dyYXBoKEJyYW5jaCwg
T3BJbmZvKG1fY3VycmVudEluZGV4ICsgcmVsYXRpdmVPZmZzZXQpLCBPcEluZm8obV9jdXJyZW50
SW5kZXggKyBPUENPREVfTEVOR1RIKG9wX2plcV9udWxsKSksIGNvbmRpdGlvbik7CiAgICAgICAg
ICAgICBMQVNUX09QQ09ERShvcF9qZXFfbnVsbCk7CiAgICAgICAgIH0KIAogICAgICAgICBjYXNl
IG9wX2puZXFfbnVsbDogewogICAgICAgICAgICAgdW5zaWduZWQgcmVsYXRpdmVPZmZzZXQgPSBj
dXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwotICAgICAgICAgICAgTm9kZUluZGV4IHZh
bHVlID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpOwotICAgICAgICAgICAg
Tm9kZUluZGV4IGNvbmRpdGlvbiA9IGFkZFRvR3JhcGgoQ29tcGFyZUVxLCB2YWx1ZSwgY29uc3Rh
bnROdWxsKCkpOworICAgICAgICAgICAgTm9kZSogdmFsdWUgPSBnZXQoY3VycmVudEluc3RydWN0
aW9uWzFdLnUub3BlcmFuZCk7CisgICAgICAgICAgICBOb2RlKiBjb25kaXRpb24gPSBhZGRUb0dy
YXBoKENvbXBhcmVFcSwgdmFsdWUsIGNvbnN0YW50TnVsbCgpKTsKICAgICAgICAgICAgIGFkZFRv
R3JhcGgoQnJhbmNoLCBPcEluZm8obV9jdXJyZW50SW5kZXggKyBPUENPREVfTEVOR1RIKG9wX2pu
ZXFfbnVsbCkpLCBPcEluZm8obV9jdXJyZW50SW5kZXggKyByZWxhdGl2ZU9mZnNldCksIGNvbmRp
dGlvbik7CiAgICAgICAgICAgICBMQVNUX09QQ09ERShvcF9qbmVxX251bGwpOwogICAgICAgICB9
CiAKICAgICAgICAgY2FzZSBvcF9qbGVzczogewogICAgICAgICAgICAgdW5zaWduZWQgcmVsYXRp
dmVPZmZzZXQgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOwotICAgICAgICAgICAg
Tm9kZUluZGV4IG9wMSA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKTsKLSAg
ICAgICAgICAgIE5vZGVJbmRleCBvcDIgPSBnZXQoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3Bl
cmFuZCk7Ci0gICAgICAgICAgICBOb2RlSW5kZXggY29uZGl0aW9uID0gYWRkVG9HcmFwaChDb21w
YXJlTGVzcywgb3AxLCBvcDIpOworICAgICAgICAgICAgTm9kZSogb3AxID0gZ2V0KGN1cnJlbnRJ
bnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpOworICAgICAgICAgICAgTm9kZSogb3AyID0gZ2V0KGN1
cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOworICAgICAgICAgICAgTm9kZSogY29uZGl0
aW9uID0gYWRkVG9HcmFwaChDb21wYXJlTGVzcywgb3AxLCBvcDIpOwogICAgICAgICAgICAgYWRk
VG9HcmFwaChCcmFuY2gsIE9wSW5mbyhtX2N1cnJlbnRJbmRleCArIHJlbGF0aXZlT2Zmc2V0KSwg
T3BJbmZvKG1fY3VycmVudEluZGV4ICsgT1BDT0RFX0xFTkdUSChvcF9qbGVzcykpLCBjb25kaXRp
b24pOwogICAgICAgICAgICAgTEFTVF9PUENPREUob3Bfamxlc3MpOwogICAgICAgICB9CiAKICAg
ICAgICAgY2FzZSBvcF9qbGVzc2VxOiB7CiAgICAgICAgICAgICB1bnNpZ25lZCByZWxhdGl2ZU9m
ZnNldCA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBOb2Rl
SW5kZXggb3AxID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpOwotICAgICAg
ICAgICAgTm9kZUluZGV4IG9wMiA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5k
KTsKLSAgICAgICAgICAgIE5vZGVJbmRleCBjb25kaXRpb24gPSBhZGRUb0dyYXBoKENvbXBhcmVM
ZXNzRXEsIG9wMSwgb3AyKTsKKyAgICAgICAgICAgIE5vZGUqIG9wMSA9IGdldChjdXJyZW50SW5z
dHJ1Y3Rpb25bMV0udS5vcGVyYW5kKTsKKyAgICAgICAgICAgIE5vZGUqIG9wMiA9IGdldChjdXJy
ZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKKyAgICAgICAgICAgIE5vZGUqIGNvbmRpdGlv
biA9IGFkZFRvR3JhcGgoQ29tcGFyZUxlc3NFcSwgb3AxLCBvcDIpOwogICAgICAgICAgICAgYWRk
VG9HcmFwaChCcmFuY2gsIE9wSW5mbyhtX2N1cnJlbnRJbmRleCArIHJlbGF0aXZlT2Zmc2V0KSwg
T3BJbmZvKG1fY3VycmVudEluZGV4ICsgT1BDT0RFX0xFTkdUSChvcF9qbGVzc2VxKSksIGNvbmRp
dGlvbik7CiAgICAgICAgICAgICBMQVNUX09QQ09ERShvcF9qbGVzc2VxKTsKICAgICAgICAgfQog
CiAgICAgICAgIGNhc2Ugb3BfamdyZWF0ZXI6IHsKICAgICAgICAgICAgIHVuc2lnbmVkIHJlbGF0
aXZlT2Zmc2V0ID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKLSAgICAgICAgICAg
IE5vZGVJbmRleCBvcDEgPSBnZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCk7Ci0g
ICAgICAgICAgICBOb2RlSW5kZXggb3AyID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9w
ZXJhbmQpOwotICAgICAgICAgICAgTm9kZUluZGV4IGNvbmRpdGlvbiA9IGFkZFRvR3JhcGgoQ29t
cGFyZUdyZWF0ZXIsIG9wMSwgb3AyKTsKKyAgICAgICAgICAgIE5vZGUqIG9wMSA9IGdldChjdXJy
ZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKTsKKyAgICAgICAgICAgIE5vZGUqIG9wMiA9IGdl
dChjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKKyAgICAgICAgICAgIE5vZGUqIGNv
bmRpdGlvbiA9IGFkZFRvR3JhcGgoQ29tcGFyZUdyZWF0ZXIsIG9wMSwgb3AyKTsKICAgICAgICAg
ICAgIGFkZFRvR3JhcGgoQnJhbmNoLCBPcEluZm8obV9jdXJyZW50SW5kZXggKyByZWxhdGl2ZU9m
ZnNldCksIE9wSW5mbyhtX2N1cnJlbnRJbmRleCArIE9QQ09ERV9MRU5HVEgob3BfamdyZWF0ZXIp
KSwgY29uZGl0aW9uKTsKICAgICAgICAgICAgIExBU1RfT1BDT0RFKG9wX2pncmVhdGVyKTsKICAg
ICAgICAgfQogCiAgICAgICAgIGNhc2Ugb3BfamdyZWF0ZXJlcTogewogICAgICAgICAgICAgdW5z
aWduZWQgcmVsYXRpdmVPZmZzZXQgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOwot
ICAgICAgICAgICAgTm9kZUluZGV4IG9wMSA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5v
cGVyYW5kKTsKLSAgICAgICAgICAgIE5vZGVJbmRleCBvcDIgPSBnZXQoY3VycmVudEluc3RydWN0
aW9uWzJdLnUub3BlcmFuZCk7Ci0gICAgICAgICAgICBOb2RlSW5kZXggY29uZGl0aW9uID0gYWRk
VG9HcmFwaChDb21wYXJlR3JlYXRlckVxLCBvcDEsIG9wMik7CisgICAgICAgICAgICBOb2RlKiBv
cDEgPSBnZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCk7CisgICAgICAgICAgICBO
b2RlKiBvcDIgPSBnZXQoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7CisgICAgICAg
ICAgICBOb2RlKiBjb25kaXRpb24gPSBhZGRUb0dyYXBoKENvbXBhcmVHcmVhdGVyRXEsIG9wMSwg
b3AyKTsKICAgICAgICAgICAgIGFkZFRvR3JhcGgoQnJhbmNoLCBPcEluZm8obV9jdXJyZW50SW5k
ZXggKyByZWxhdGl2ZU9mZnNldCksIE9wSW5mbyhtX2N1cnJlbnRJbmRleCArIE9QQ09ERV9MRU5H
VEgob3BfamdyZWF0ZXJlcSkpLCBjb25kaXRpb24pOwogICAgICAgICAgICAgTEFTVF9PUENPREUo
b3BfamdyZWF0ZXJlcSk7CiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIG9wX2pubGVzczogewog
ICAgICAgICAgICAgdW5zaWduZWQgcmVsYXRpdmVPZmZzZXQgPSBjdXJyZW50SW5zdHJ1Y3Rpb25b
M10udS5vcGVyYW5kOwotICAgICAgICAgICAgTm9kZUluZGV4IG9wMSA9IGdldChjdXJyZW50SW5z
dHJ1Y3Rpb25bMV0udS5vcGVyYW5kKTsKLSAgICAgICAgICAgIE5vZGVJbmRleCBvcDIgPSBnZXQo
Y3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7Ci0gICAgICAgICAgICBOb2RlSW5kZXgg
Y29uZGl0aW9uID0gYWRkVG9HcmFwaChDb21wYXJlTGVzcywgb3AxLCBvcDIpOworICAgICAgICAg
ICAgTm9kZSogb3AxID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpOworICAg
ICAgICAgICAgTm9kZSogb3AyID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQp
OworICAgICAgICAgICAgTm9kZSogY29uZGl0aW9uID0gYWRkVG9HcmFwaChDb21wYXJlTGVzcywg
b3AxLCBvcDIpOwogICAgICAgICAgICAgYWRkVG9HcmFwaChCcmFuY2gsIE9wSW5mbyhtX2N1cnJl
bnRJbmRleCArIE9QQ09ERV9MRU5HVEgob3Bfam5sZXNzKSksIE9wSW5mbyhtX2N1cnJlbnRJbmRl
eCArIHJlbGF0aXZlT2Zmc2V0KSwgY29uZGl0aW9uKTsKICAgICAgICAgICAgIExBU1RfT1BDT0RF
KG9wX2pubGVzcyk7CiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIG9wX2pubGVzc2VxOiB7CiAg
ICAgICAgICAgICB1bnNpZ25lZCByZWxhdGl2ZU9mZnNldCA9IGN1cnJlbnRJbnN0cnVjdGlvblsz
XS51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBOb2RlSW5kZXggb3AxID0gZ2V0KGN1cnJlbnRJbnN0
cnVjdGlvblsxXS51Lm9wZXJhbmQpOwotICAgICAgICAgICAgTm9kZUluZGV4IG9wMiA9IGdldChj
dXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKLSAgICAgICAgICAgIE5vZGVJbmRleCBj
b25kaXRpb24gPSBhZGRUb0dyYXBoKENvbXBhcmVMZXNzRXEsIG9wMSwgb3AyKTsKKyAgICAgICAg
ICAgIE5vZGUqIG9wMSA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKTsKKyAg
ICAgICAgICAgIE5vZGUqIG9wMiA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5k
KTsKKyAgICAgICAgICAgIE5vZGUqIGNvbmRpdGlvbiA9IGFkZFRvR3JhcGgoQ29tcGFyZUxlc3NF
cSwgb3AxLCBvcDIpOwogICAgICAgICAgICAgYWRkVG9HcmFwaChCcmFuY2gsIE9wSW5mbyhtX2N1
cnJlbnRJbmRleCArIE9QQ09ERV9MRU5HVEgob3Bfam5sZXNzZXEpKSwgT3BJbmZvKG1fY3VycmVu
dEluZGV4ICsgcmVsYXRpdmVPZmZzZXQpLCBjb25kaXRpb24pOwogICAgICAgICAgICAgTEFTVF9P
UENPREUob3Bfam5sZXNzZXEpOwogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBvcF9qbmdyZWF0
ZXI6IHsKICAgICAgICAgICAgIHVuc2lnbmVkIHJlbGF0aXZlT2Zmc2V0ID0gY3VycmVudEluc3Ry
dWN0aW9uWzNdLnUub3BlcmFuZDsKLSAgICAgICAgICAgIE5vZGVJbmRleCBvcDEgPSBnZXQoY3Vy
cmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCk7Ci0gICAgICAgICAgICBOb2RlSW5kZXggb3Ay
ID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOwotICAgICAgICAgICAgTm9k
ZUluZGV4IGNvbmRpdGlvbiA9IGFkZFRvR3JhcGgoQ29tcGFyZUdyZWF0ZXIsIG9wMSwgb3AyKTsK
KyAgICAgICAgICAgIE5vZGUqIG9wMSA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVy
YW5kKTsKKyAgICAgICAgICAgIE5vZGUqIG9wMiA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMl0u
dS5vcGVyYW5kKTsKKyAgICAgICAgICAgIE5vZGUqIGNvbmRpdGlvbiA9IGFkZFRvR3JhcGgoQ29t
cGFyZUdyZWF0ZXIsIG9wMSwgb3AyKTsKICAgICAgICAgICAgIGFkZFRvR3JhcGgoQnJhbmNoLCBP
cEluZm8obV9jdXJyZW50SW5kZXggKyBPUENPREVfTEVOR1RIKG9wX2puZ3JlYXRlcikpLCBPcElu
Zm8obV9jdXJyZW50SW5kZXggKyByZWxhdGl2ZU9mZnNldCksIGNvbmRpdGlvbik7CiAgICAgICAg
ICAgICBMQVNUX09QQ09ERShvcF9qbmdyZWF0ZXIpOwogICAgICAgICB9CiAKICAgICAgICAgY2Fz
ZSBvcF9qbmdyZWF0ZXJlcTogewogICAgICAgICAgICAgdW5zaWduZWQgcmVsYXRpdmVPZmZzZXQg
PSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOwotICAgICAgICAgICAgTm9kZUluZGV4
IG9wMSA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKTsKLSAgICAgICAgICAg
IE5vZGVJbmRleCBvcDIgPSBnZXQoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7Ci0g
ICAgICAgICAgICBOb2RlSW5kZXggY29uZGl0aW9uID0gYWRkVG9HcmFwaChDb21wYXJlR3JlYXRl
ckVxLCBvcDEsIG9wMik7CisgICAgICAgICAgICBOb2RlKiBvcDEgPSBnZXQoY3VycmVudEluc3Ry
dWN0aW9uWzFdLnUub3BlcmFuZCk7CisgICAgICAgICAgICBOb2RlKiBvcDIgPSBnZXQoY3VycmVu
dEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7CisgICAgICAgICAgICBOb2RlKiBjb25kaXRpb24g
PSBhZGRUb0dyYXBoKENvbXBhcmVHcmVhdGVyRXEsIG9wMSwgb3AyKTsKICAgICAgICAgICAgIGFk
ZFRvR3JhcGgoQnJhbmNoLCBPcEluZm8obV9jdXJyZW50SW5kZXggKyBPUENPREVfTEVOR1RIKG9w
X2puZ3JlYXRlcmVxKSksIE9wSW5mbyhtX2N1cnJlbnRJbmRleCArIHJlbGF0aXZlT2Zmc2V0KSwg
Y29uZGl0aW9uKTsKICAgICAgICAgICAgIExBU1RfT1BDT0RFKG9wX2puZ3JlYXRlcmVxKTsKICAg
ICAgICAgfQogCiAgICAgICAgIGNhc2Ugb3BfbG9vcF9pZl9sZXNzOiB7CiAgICAgICAgICAgICB1
bnNpZ25lZCByZWxhdGl2ZU9mZnNldCA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7
Ci0gICAgICAgICAgICBOb2RlSW5kZXggb3AxID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51
Lm9wZXJhbmQpOwotICAgICAgICAgICAgTm9kZUluZGV4IG9wMiA9IGdldChjdXJyZW50SW5zdHJ1
Y3Rpb25bMl0udS5vcGVyYW5kKTsKLSAgICAgICAgICAgIE5vZGVJbmRleCBjb25kaXRpb24gPSBh
ZGRUb0dyYXBoKENvbXBhcmVMZXNzLCBvcDEsIG9wMik7CisgICAgICAgICAgICBOb2RlKiBvcDEg
PSBnZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCk7CisgICAgICAgICAgICBOb2Rl
KiBvcDIgPSBnZXQoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7CisgICAgICAgICAg
ICBOb2RlKiBjb25kaXRpb24gPSBhZGRUb0dyYXBoKENvbXBhcmVMZXNzLCBvcDEsIG9wMik7CiAg
ICAgICAgICAgICBhZGRUb0dyYXBoKEJyYW5jaCwgT3BJbmZvKG1fY3VycmVudEluZGV4ICsgcmVs
YXRpdmVPZmZzZXQpLCBPcEluZm8obV9jdXJyZW50SW5kZXggKyBPUENPREVfTEVOR1RIKG9wX2xv
b3BfaWZfbGVzcykpLCBjb25kaXRpb24pOwogICAgICAgICAgICAgTEFTVF9PUENPREUob3BfbG9v
cF9pZl9sZXNzKTsKICAgICAgICAgfQogCiAgICAgICAgIGNhc2Ugb3BfbG9vcF9pZl9sZXNzZXE6
IHsKICAgICAgICAgICAgIHVuc2lnbmVkIHJlbGF0aXZlT2Zmc2V0ID0gY3VycmVudEluc3RydWN0
aW9uWzNdLnUub3BlcmFuZDsKLSAgICAgICAgICAgIE5vZGVJbmRleCBvcDEgPSBnZXQoY3VycmVu
dEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCk7Ci0gICAgICAgICAgICBOb2RlSW5kZXggb3AyID0g
Z2V0KGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOwotICAgICAgICAgICAgTm9kZUlu
ZGV4IGNvbmRpdGlvbiA9IGFkZFRvR3JhcGgoQ29tcGFyZUxlc3NFcSwgb3AxLCBvcDIpOworICAg
ICAgICAgICAgTm9kZSogb3AxID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQp
OworICAgICAgICAgICAgTm9kZSogb3AyID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9w
ZXJhbmQpOworICAgICAgICAgICAgTm9kZSogY29uZGl0aW9uID0gYWRkVG9HcmFwaChDb21wYXJl
TGVzc0VxLCBvcDEsIG9wMik7CiAgICAgICAgICAgICBhZGRUb0dyYXBoKEJyYW5jaCwgT3BJbmZv
KG1fY3VycmVudEluZGV4ICsgcmVsYXRpdmVPZmZzZXQpLCBPcEluZm8obV9jdXJyZW50SW5kZXgg
KyBPUENPREVfTEVOR1RIKG9wX2xvb3BfaWZfbGVzc2VxKSksIGNvbmRpdGlvbik7CiAgICAgICAg
ICAgICBMQVNUX09QQ09ERShvcF9sb29wX2lmX2xlc3NlcSk7CiAgICAgICAgIH0KIAogICAgICAg
ICBjYXNlIG9wX2xvb3BfaWZfZ3JlYXRlcjogewogICAgICAgICAgICAgdW5zaWduZWQgcmVsYXRp
dmVPZmZzZXQgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOwotICAgICAgICAgICAg
Tm9kZUluZGV4IG9wMSA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKTsKLSAg
ICAgICAgICAgIE5vZGVJbmRleCBvcDIgPSBnZXQoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3Bl
cmFuZCk7Ci0gICAgICAgICAgICBOb2RlSW5kZXggY29uZGl0aW9uID0gYWRkVG9HcmFwaChDb21w
YXJlR3JlYXRlciwgb3AxLCBvcDIpOworICAgICAgICAgICAgTm9kZSogb3AxID0gZ2V0KGN1cnJl
bnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpOworICAgICAgICAgICAgTm9kZSogb3AyID0gZ2V0
KGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOworICAgICAgICAgICAgTm9kZSogY29u
ZGl0aW9uID0gYWRkVG9HcmFwaChDb21wYXJlR3JlYXRlciwgb3AxLCBvcDIpOwogICAgICAgICAg
ICAgYWRkVG9HcmFwaChCcmFuY2gsIE9wSW5mbyhtX2N1cnJlbnRJbmRleCArIHJlbGF0aXZlT2Zm
c2V0KSwgT3BJbmZvKG1fY3VycmVudEluZGV4ICsgT1BDT0RFX0xFTkdUSChvcF9sb29wX2lmX2dy
ZWF0ZXIpKSwgY29uZGl0aW9uKTsKICAgICAgICAgICAgIExBU1RfT1BDT0RFKG9wX2xvb3BfaWZf
Z3JlYXRlcik7CiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIG9wX2xvb3BfaWZfZ3JlYXRlcmVx
OiB7CiAgICAgICAgICAgICB1bnNpZ25lZCByZWxhdGl2ZU9mZnNldCA9IGN1cnJlbnRJbnN0cnVj
dGlvblszXS51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBOb2RlSW5kZXggb3AxID0gZ2V0KGN1cnJl
bnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpOwotICAgICAgICAgICAgTm9kZUluZGV4IG9wMiA9
IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKLSAgICAgICAgICAgIE5vZGVJ
bmRleCBjb25kaXRpb24gPSBhZGRUb0dyYXBoKENvbXBhcmVHcmVhdGVyRXEsIG9wMSwgb3AyKTsK
KyAgICAgICAgICAgIE5vZGUqIG9wMSA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVy
YW5kKTsKKyAgICAgICAgICAgIE5vZGUqIG9wMiA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMl0u
dS5vcGVyYW5kKTsKKyAgICAgICAgICAgIE5vZGUqIGNvbmRpdGlvbiA9IGFkZFRvR3JhcGgoQ29t
cGFyZUdyZWF0ZXJFcSwgb3AxLCBvcDIpOwogICAgICAgICAgICAgYWRkVG9HcmFwaChCcmFuY2gs
IE9wSW5mbyhtX2N1cnJlbnRJbmRleCArIHJlbGF0aXZlT2Zmc2V0KSwgT3BJbmZvKG1fY3VycmVu
dEluZGV4ICsgT1BDT0RFX0xFTkdUSChvcF9sb29wX2lmX2dyZWF0ZXJlcSkpLCBjb25kaXRpb24p
OwogICAgICAgICAgICAgTEFTVF9PUENPREUob3BfbG9vcF9pZl9ncmVhdGVyZXEpOwogICAgICAg
ICB9CkBAIC0yOTU2LDcgKzI5MTgsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2Nr
KHVuc2lnbmVkCiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGFyZ3VtZW50ID0gMTsgYXJndW1l
bnQgPCBhcmdDb3VudDsgKythcmd1bWVudCkKICAgICAgICAgICAgICAgICBhZGRWYXJBcmdDaGls
ZChnZXQoYXJndW1lbnRUb09wZXJhbmQoYXJndW1lbnQpKSk7CiAgICAgICAgICAgICAKLSAgICAg
ICAgICAgIE5vZGVJbmRleCBjYWxsID0gYWRkVG9HcmFwaChOb2RlOjpWYXJBcmcsIENhbGwsIE9w
SW5mbygwKSwgT3BJbmZvKHByZWRpY3Rpb24pKTsKKyAgICAgICAgICAgIE5vZGUqIGNhbGwgPSBh
ZGRUb0dyYXBoKE5vZGU6OlZhckFyZywgQ2FsbCwgT3BJbmZvKDApLCBPcEluZm8ocHJlZGljdGlv
bikpOwogICAgICAgICAgICAgaWYgKGludGVycHJldGVyLT5nZXRPcGNvZGVJRChwdXRJbnN0cnVj
dGlvbi0+dS5vcGNvZGUpID09IG9wX2NhbGxfcHV0X3Jlc3VsdCkKICAgICAgICAgICAgICAgICBz
ZXQocHV0SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCBjYWxsKTsKICAgICAgICAgICAgIApAQCAt
Mjk4OCwxMyArMjk1MCwxMyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2ln
bmVkCiAgICAgICAgICAgICAKICAgICAgICAgICAgIHVuc2lnbmVkIGlkZW50aWZpZXIgPSBtX2lu
bGluZVN0YWNrVG9wLT5tX2lkZW50aWZpZXJSZW1hcFtjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5v
cGVyYW5kXTsKICAgICAgICAgICAgIHVuc2lnbmVkIG9wZXJhdGlvbnMgPSBtX2lubGluZVN0YWNr
VG9wLT5tX3Jlc29sdmVPcGVyYXRpb25SZW1hcFtjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVy
YW5kXTsKLSAgICAgICAgICAgIE5vZGVJbmRleCB2YWx1ZSA9IDA7CisgICAgICAgICAgICBOb2Rl
KiB2YWx1ZSA9IDA7CiAgICAgICAgICAgICBpZiAocGFyc2VSZXNvbHZlT3BlcmF0aW9ucyhwcmVk
aWN0aW9uLCBpZGVudGlmaWVyLCBvcGVyYXRpb25zLCAwLCAwLCAmdmFsdWUpKSB7CiAgICAgICAg
ICAgICAgICAgc2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsIHZhbHVlKTsKICAg
ICAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9yZXNvbHZlKTsKICAgICAgICAgICAgIH0KIAot
ICAgICAgICAgICAgTm9kZUluZGV4IHJlc29sdmUgPSBhZGRUb0dyYXBoKFJlc29sdmUsIE9wSW5m
byhtX2dyYXBoLm1fcmVzb2x2ZU9wZXJhdGlvbnNEYXRhLnNpemUoKSksIE9wSW5mbyhwcmVkaWN0
aW9uKSk7CisgICAgICAgICAgICBOb2RlKiByZXNvbHZlID0gYWRkVG9HcmFwaChSZXNvbHZlLCBP
cEluZm8obV9ncmFwaC5tX3Jlc29sdmVPcGVyYXRpb25zRGF0YS5zaXplKCkpLCBPcEluZm8ocHJl
ZGljdGlvbikpOwogICAgICAgICAgICAgbV9ncmFwaC5tX3Jlc29sdmVPcGVyYXRpb25zRGF0YS5h
cHBlbmQoUmVzb2x2ZU9wZXJhdGlvbkRhdGEoKSk7CiAgICAgICAgICAgICBSZXNvbHZlT3BlcmF0
aW9uRGF0YSYgZGF0YSA9IG1fZ3JhcGgubV9yZXNvbHZlT3BlcmF0aW9uc0RhdGEubGFzdCgpOwog
ICAgICAgICAgICAgZGF0YS5pZGVudGlmaWVyTnVtYmVyID0gaWRlbnRpZmllcjsKQEAgLTMwNDIs
OCArMzAwNCw4IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGdldCh2YWx1ZSkpOwogICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgY2FzZSBQdXRUb0Jhc2VPcGVyYXRpb246OlZhcmlhYmxlUHV0OiB7
Ci0gICAgICAgICAgICAgICAgTm9kZUluZGV4IHNjb3BlID0gZ2V0KGJhc2UpOwotICAgICAgICAg
ICAgICAgIE5vZGVJbmRleCBzY29wZVJlZ2lzdGVycyA9IGFkZFRvR3JhcGgoR2V0U2NvcGVSZWdp
c3RlcnMsIHNjb3BlKTsKKyAgICAgICAgICAgICAgICBOb2RlKiBzY29wZSA9IGdldChiYXNlKTsK
KyAgICAgICAgICAgICAgICBOb2RlKiBzY29wZVJlZ2lzdGVycyA9IGFkZFRvR3JhcGgoR2V0U2Nv
cGVSZWdpc3RlcnMsIHNjb3BlKTsKICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKFB1dFNjb3Bl
ZFZhciwgT3BJbmZvKHB1dFRvQmFzZS0+bV9vZmZzZXQpLCBzY29wZSwgc2NvcGVSZWdpc3RlcnMs
IGdldCh2YWx1ZSkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQpAQCAt
MzA1Myw5ICszMDE1LDkgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25l
ZAogICAgICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKFBoYW50b20sIGdldChiYXNlKSk7CiAg
ICAgICAgICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX3B1dF90b19iYXNlKTsKICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgTm9kZUluZGV4IGJhc2VOb2RlID0gZ2V0KGJhc2Up
OworICAgICAgICAgICAgICAgIE5vZGUqIGJhc2VOb2RlID0gZ2V0KGJhc2UpOwogICAgICAgICAg
ICAgICAgIGFkZFRvR3JhcGgoQ2hlY2tTdHJ1Y3R1cmUsIE9wSW5mbyhtX2dyYXBoLmFkZFN0cnVj
dHVyZVNldChwdXRUb0Jhc2UtPm1fc3RydWN0dXJlLmdldCgpKSksIGJhc2VOb2RlKTsKLSAgICAg
ICAgICAgICAgICBOb2RlSW5kZXggcHJvcGVydHlTdG9yYWdlOworICAgICAgICAgICAgICAgIE5v
ZGUqIHByb3BlcnR5U3RvcmFnZTsKICAgICAgICAgICAgICAgICBpZiAoaXNJbmxpbmVPZmZzZXQo
cHV0VG9CYXNlLT5tX29mZnNldCkpCiAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5U3RvcmFn
ZSA9IGJhc2VOb2RlOwogICAgICAgICAgICAgICAgIGVsc2UKQEAgLTMwODYsMTMgKzMwNDgsMTMg
QEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAg
dW5zaWduZWQgb3BlcmF0aW9ucyA9IG1faW5saW5lU3RhY2tUb3AtPm1fcmVzb2x2ZU9wZXJhdGlv
blJlbWFwW2N1cnJlbnRJbnN0cnVjdGlvbls0XS51Lm9wZXJhbmRdOwogICAgICAgICAgICAgdW5z
aWduZWQgcHV0VG9CYXNlT3BlcmF0aW9uID0gbV9pbmxpbmVTdGFja1RvcC0+bV9wdXRUb0Jhc2VP
cGVyYXRpb25SZW1hcFtjdXJyZW50SW5zdHJ1Y3Rpb25bNV0udS5vcGVyYW5kXTsKIAotICAgICAg
ICAgICAgTm9kZUluZGV4IGJhc2UgPSAwOworICAgICAgICAgICAgTm9kZSogYmFzZSA9IDA7CiAg
ICAgICAgICAgICBpZiAocGFyc2VSZXNvbHZlT3BlcmF0aW9ucyhwcmVkaWN0aW9uLCBpZGVudGlm
aWVyLCBvcGVyYXRpb25zLCAwLCAmYmFzZSwgMCkpIHsKICAgICAgICAgICAgICAgICBzZXQoY3Vy
cmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwgYmFzZSk7CiAgICAgICAgICAgICAgICAgTkVY
VF9PUENPREUob3BfcmVzb2x2ZV9iYXNlKTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAg
Tm9kZUluZGV4IHJlc29sdmUgPSBhZGRUb0dyYXBoKGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9w
ZXJhbmQgPyBSZXNvbHZlQmFzZVN0cmljdFB1dCA6IFJlc29sdmVCYXNlLCBPcEluZm8obV9ncmFw
aC5tX3Jlc29sdmVPcGVyYXRpb25zRGF0YS5zaXplKCkpLCBPcEluZm8ocHJlZGljdGlvbikpOwor
ICAgICAgICAgICAgTm9kZSogcmVzb2x2ZSA9IGFkZFRvR3JhcGgoY3VycmVudEluc3RydWN0aW9u
WzNdLnUub3BlcmFuZCA/IFJlc29sdmVCYXNlU3RyaWN0UHV0IDogUmVzb2x2ZUJhc2UsIE9wSW5m
byhtX2dyYXBoLm1fcmVzb2x2ZU9wZXJhdGlvbnNEYXRhLnNpemUoKSksIE9wSW5mbyhwcmVkaWN0
aW9uKSk7CiAgICAgICAgICAgICBtX2dyYXBoLm1fcmVzb2x2ZU9wZXJhdGlvbnNEYXRhLmFwcGVu
ZChSZXNvbHZlT3BlcmF0aW9uRGF0YSgpKTsKICAgICAgICAgICAgIFJlc29sdmVPcGVyYXRpb25E
YXRhJiBkYXRhID0gbV9ncmFwaC5tX3Jlc29sdmVPcGVyYXRpb25zRGF0YS5sYXN0KCk7CiAgICAg
ICAgICAgICBkYXRhLmlkZW50aWZpZXJOdW1iZXIgPSBpZGVudGlmaWVyOwpAQCAtMzExMSw4ICsz
MDczLDggQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAg
ICAgICAgdW5zaWduZWQgb3BlcmF0aW9ucyA9IG1faW5saW5lU3RhY2tUb3AtPm1fcmVzb2x2ZU9w
ZXJhdGlvblJlbWFwW2N1cnJlbnRJbnN0cnVjdGlvbls0XS51Lm9wZXJhbmRdOwogICAgICAgICAg
ICAgdW5zaWduZWQgcHV0VG9CYXNlT3BlcmF0aW9uID0gbV9pbmxpbmVTdGFja1RvcC0+bV9wdXRU
b0Jhc2VPcGVyYXRpb25SZW1hcFtjdXJyZW50SW5zdHJ1Y3Rpb25bNV0udS5vcGVyYW5kXTsKIAot
ICAgICAgICAgICAgTm9kZUluZGV4IGJhc2UgPSAwOwotICAgICAgICAgICAgTm9kZUluZGV4IHZh
bHVlID0gMDsKKyAgICAgICAgICAgIE5vZGUqIGJhc2UgPSAwOworICAgICAgICAgICAgTm9kZSog
dmFsdWUgPSAwOwogICAgICAgICAgICAgaWYgKHBhcnNlUmVzb2x2ZU9wZXJhdGlvbnMocHJlZGlj
dGlvbiwgaWRlbnRpZmllciwgb3BlcmF0aW9ucywgcHV0VG9CYXNlT3BlcmF0aW9uLCAmYmFzZSwg
JnZhbHVlKSkKICAgICAgICAgICAgICAgICBzZXRQYWlyKGJhc2VEc3QsIGJhc2UsIHZhbHVlRHN0
LCB2YWx1ZSk7CiAgICAgICAgICAgICBlbHNlIHsKQEAgLTMxMjksOCArMzA5MSw4IEBAIGJvb2wg
Qnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAgIHVuc2lnbmVk
IGlkZW50aWZpZXIgPSBtX2lubGluZVN0YWNrVG9wLT5tX2lkZW50aWZpZXJSZW1hcFtjdXJyZW50
SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kXTsKICAgICAgICAgICAgIHVuc2lnbmVkIG9wZXJhdGlv
bnMgPSBtX2lubGluZVN0YWNrVG9wLT5tX3Jlc29sdmVPcGVyYXRpb25SZW1hcFtjdXJyZW50SW5z
dHJ1Y3Rpb25bNF0udS5vcGVyYW5kXTsKIAotICAgICAgICAgICAgTm9kZUluZGV4IGJhc2UgPSAw
OwotICAgICAgICAgICAgTm9kZUluZGV4IHZhbHVlID0gMDsKKyAgICAgICAgICAgIE5vZGUqIGJh
c2UgPSAwOworICAgICAgICAgICAgTm9kZSogdmFsdWUgPSAwOwogICAgICAgICAgICAgaWYgKHBh
cnNlUmVzb2x2ZU9wZXJhdGlvbnMocHJlZGljdGlvbiwgaWRlbnRpZmllciwgb3BlcmF0aW9ucywg
MCwgJmJhc2UsICZ2YWx1ZSkpCiAgICAgICAgICAgICAgICAgc2V0UGFpcihiYXNlRHN0LCBiYXNl
LCB2YWx1ZURzdCwgdmFsdWUpOwogICAgICAgICAgICAgZWxzZSB7CkBAIC0zMTcxLDcgKzMxMzMs
NyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAg
ICAKICAgICAgICAgY2FzZSBvcF9jcmVhdGVfYXJndW1lbnRzOiB7CiAgICAgICAgICAgICBtX2dy
YXBoLm1faGFzQXJndW1lbnRzID0gdHJ1ZTsKLSAgICAgICAgICAgIE5vZGVJbmRleCBjcmVhdGVB
cmd1bWVudHMgPSBhZGRUb0dyYXBoKENyZWF0ZUFyZ3VtZW50cywgZ2V0KGN1cnJlbnRJbnN0cnVj
dGlvblsxXS51Lm9wZXJhbmQpKTsKKyAgICAgICAgICAgIE5vZGUqIGNyZWF0ZUFyZ3VtZW50cyA9
IGFkZFRvR3JhcGgoQ3JlYXRlQXJndW1lbnRzLCBnZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUu
b3BlcmFuZCkpOwogICAgICAgICAgICAgc2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJh
bmQsIGNyZWF0ZUFyZ3VtZW50cyk7CiAgICAgICAgICAgICBzZXQodW5tb2RpZmllZEFyZ3VtZW50
c1JlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpLCBjcmVhdGVBcmd1bWVu
dHMpOwogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfY3JlYXRlX2FyZ3VtZW50cyk7CkBAIC0z
MjUwLDEyICszMjEyLDkgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cHJvY2Vzc1BoaVN0YWNrKCkK
ICAgICAgICAgaWYgKCFlbnRyeS5tX2Jsb2NrLT5pc1JlYWNoYWJsZSkKICAgICAgICAgICAgIGNv
bnRpbnVlOwogICAgICAgICAKLSAgICAgICAgaWYgKCFlbnRyeS5tX2Jsb2NrLT5pc1JlYWNoYWJs
ZSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAKICAgICAgICAgUHJlZGVjZXNzb3JM
aXN0JiBwcmVkZWNlc3NvcnMgPSBlbnRyeS5tX2Jsb2NrLT5tX3ByZWRlY2Vzc29yczsKICAgICAg
ICAgdW5zaWduZWQgdmFyTm8gPSBlbnRyeS5tX3Zhck5vOwotICAgICAgICBWYXJpYWJsZUFjY2Vz
c0RhdGEqIGRhdGFGb3JQaGkgPSBtX2dyYXBoW2VudHJ5Lm1fcGhpXS52YXJpYWJsZUFjY2Vzc0Rh
dGEoKTsKKyAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiBkYXRhRm9yUGhpID0gZW50cnkubV9w
aGktPnZhcmlhYmxlQWNjZXNzRGF0YSgpOwogCiAjaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdB
VElPTl9WRVJCT1NFKQogICAgICAgICBkYXRhTG9nRigiICAgSGFuZGxpbmcgcGhpIGVudHJ5IGZv
ciB2YXIgJXUsIHBoaSBAJXUuXG4iLCBlbnRyeS5tX3Zhck5vLCBlbnRyeS5tX3BoaSk7CkBAIC0z
MjY4LDEwICszMjI3LDEwIEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnByb2Nlc3NQaGlTdGFjaygp
CiAgICAgICAgICAgICAKICAgICAgICAgICAgIEJhc2ljQmxvY2sqIHByZWRlY2Vzc29yQmxvY2sg
PSBtX2dyYXBoLm1fYmxvY2tzW3ByZWRlY2Vzc29yc1tpXV0uZ2V0KCk7CiAKLSAgICAgICAgICAg
IE5vZGVJbmRleCYgdmFyID0gKHN0YWNrVHlwZSA9PSBBcmd1bWVudFBoaVN0YWNrKSA/IHByZWRl
Y2Vzc29yQmxvY2stPnZhcmlhYmxlc0F0VGFpbC5hcmd1bWVudCh2YXJObykgOiBwcmVkZWNlc3Nv
ckJsb2NrLT52YXJpYWJsZXNBdFRhaWwubG9jYWwodmFyTm8pOworICAgICAgICAgICAgTm9kZSom
IHZhciA9IChzdGFja1R5cGUgPT0gQXJndW1lbnRQaGlTdGFjaykgPyBwcmVkZWNlc3NvckJsb2Nr
LT52YXJpYWJsZXNBdFRhaWwuYXJndW1lbnQodmFyTm8pIDogcHJlZGVjZXNzb3JCbG9jay0+dmFy
aWFibGVzQXRUYWlsLmxvY2FsKHZhck5vKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgTm9k
ZUluZGV4IHZhbHVlSW5QcmVkZWNlc3NvciA9IHZhcjsKLSAgICAgICAgICAgIGlmICh2YWx1ZUlu
UHJlZGVjZXNzb3IgPT0gTm9Ob2RlKSB7CisgICAgICAgICAgICBOb2RlKiB2YWx1ZUluUHJlZGVj
ZXNzb3IgPSB2YXI7CisgICAgICAgICAgICBpZiAoIXZhbHVlSW5QcmVkZWNlc3NvcikgewogI2lm
IERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKICAgICAgICAgICAgICAgICBk
YXRhTG9nRigiICAgICAgRGlkIG5vdCBmaW5kIG5vZGUsIGFkZGluZyBwaGkuXG4iKTsKICNlbmRp
ZgpAQCAtMzI4MywzNiArMzI0MiwzNiBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwcm9jZXNzUGhp
U3RhY2soKQogICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgcHJlZGVj
ZXNzb3JCbG9jay0+dmFyaWFibGVzQXRIZWFkLnNldExvY2FsRmlyc3RUaW1lKHZhck5vLCB2YWx1
ZUluUHJlZGVjZXNzb3IpOwogICAgICAgICAgICAgICAgIHBoaVN0YWNrLmFwcGVuZChQaGlTdGFj
a0VudHJ5KHByZWRlY2Vzc29yQmxvY2ssIHZhbHVlSW5QcmVkZWNlc3NvciwgdmFyTm8pKTsKLSAg
ICAgICAgICAgIH0gZWxzZSBpZiAobV9ncmFwaFt2YWx1ZUluUHJlZGVjZXNzb3JdLm9wKCkgPT0g
R2V0TG9jYWwpIHsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWVJblByZWRlY2Vzc29yLT5v
cCgpID09IEdldExvY2FsKSB7CiAjaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJC
T1NFKQotICAgICAgICAgICAgICAgIGRhdGFMb2dGKCIgICAgICBGb3VuZCBHZXRMb2NhbCBAJXUu
XG4iLCB2YWx1ZUluUHJlZGVjZXNzb3IpOworICAgICAgICAgICAgICAgIGRhdGFMb2dGKCIgICAg
ICBGb3VuZCBHZXRMb2NhbCBAJXUuXG4iLCB2YWx1ZUluUHJlZGVjZXNzb3ItPmluZGV4KCkpOwog
I2VuZGlmCiAKICAgICAgICAgICAgICAgICAvLyBXZSB3YW50IHRvIGVuc3VyZSB0aGF0IHRoZSBW
YXJpYWJsZUFjY2Vzc0RhdGFzIGFyZSBpZGVudGljYWwgYmV0d2VlbiB0aGUKICAgICAgICAgICAg
ICAgICAvLyBHZXRMb2NhbCBhbmQgaXRzIGJsb2NrLWxvY2FsIFBoaS4gU3RyaWN0bHkgc3BlYWtp
bmcgd2Ugb25seSBuZWVkIHRoZSB0d28KICAgICAgICAgICAgICAgICAvLyB0byBiZSB1bmlmaWVk
LiBCdXQgZm9yIGVmZmljaWVuY3ksIHdlIHdhbnQgdGhlIGNvZGUgdGhhdCBjcmVhdGVzIEdldExv
Y2FscwogICAgICAgICAgICAgICAgIC8vIGFuZCBQaGlzIHRvIHRyeSB0byByZXVzZSBWYXJpYWJs
ZUFjY2Vzc0RhdGFzIGFzIG11Y2ggYXMgcG9zc2libGUuCi0gICAgICAgICAgICAgICAgQVNTRVJU
KG1fZ3JhcGhbdmFsdWVJblByZWRlY2Vzc29yXS52YXJpYWJsZUFjY2Vzc0RhdGEoKSA9PSBtX2dy
YXBoW21fZ3JhcGhbdmFsdWVJblByZWRlY2Vzc29yXS5jaGlsZDEoKS5pbmRleCgpXS52YXJpYWJs
ZUFjY2Vzc0RhdGEoKSk7CisgICAgICAgICAgICAgICAgQVNTRVJUKHZhbHVlSW5QcmVkZWNlc3Nv
ci0+dmFyaWFibGVBY2Nlc3NEYXRhKCkgPT0gdmFsdWVJblByZWRlY2Vzc29yLT5jaGlsZDEoKS0+
dmFyaWFibGVBY2Nlc3NEYXRhKCkpOwogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAg
IHZhbHVlSW5QcmVkZWNlc3NvciA9IG1fZ3JhcGhbdmFsdWVJblByZWRlY2Vzc29yXS5jaGlsZDEo
KS5pbmRleCgpOworICAgICAgICAgICAgICAgIHZhbHVlSW5QcmVkZWNlc3NvciA9IHZhbHVlSW5Q
cmVkZWNlc3Nvci0+Y2hpbGQxKCkubm9kZSgpOwogICAgICAgICAgICAgfSBlbHNlIHsKICNpZiBE
RkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCi0gICAgICAgICAgICAgICAgZGF0
YUxvZ0YoIiAgICAgIEZvdW5kIEAldS5cbiIsIHZhbHVlSW5QcmVkZWNlc3Nvcik7CisgICAgICAg
ICAgICAgICAgZGF0YUxvZ0YoIiAgICAgIEZvdW5kIEAldS5cbiIsIHZhbHVlSW5QcmVkZWNlc3Nv
ci0+aW5kZXgoKSk7CiAjZW5kaWYKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIEFTU0VSVCht
X2dyYXBoW3ZhbHVlSW5QcmVkZWNlc3Nvcl0ub3AoKSA9PSBTZXRMb2NhbAotICAgICAgICAgICAg
ICAgICAgIHx8IG1fZ3JhcGhbdmFsdWVJblByZWRlY2Vzc29yXS5vcCgpID09IFBoaQotICAgICAg
ICAgICAgICAgICAgIHx8IG1fZ3JhcGhbdmFsdWVJblByZWRlY2Vzc29yXS5vcCgpID09IEZsdXNo
Ci0gICAgICAgICAgICAgICAgICAgfHwgKG1fZ3JhcGhbdmFsdWVJblByZWRlY2Vzc29yXS5vcCgp
ID09IFNldEFyZ3VtZW50CisgICAgICAgICAgICBBU1NFUlQodmFsdWVJblByZWRlY2Vzc29yLT5v
cCgpID09IFNldExvY2FsCisgICAgICAgICAgICAgICAgICAgfHwgdmFsdWVJblByZWRlY2Vzc29y
LT5vcCgpID09IFBoaQorICAgICAgICAgICAgICAgICAgIHx8IHZhbHVlSW5QcmVkZWNlc3Nvci0+
b3AoKSA9PSBGbHVzaAorICAgICAgICAgICAgICAgICAgIHx8ICh2YWx1ZUluUHJlZGVjZXNzb3It
Pm9wKCkgPT0gU2V0QXJndW1lbnQKICAgICAgICAgICAgICAgICAgICAgICAgJiYgc3RhY2tUeXBl
ID09IEFyZ3VtZW50UGhpU3RhY2spKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgVmFyaWFi
bGVBY2Nlc3NEYXRhKiBkYXRhRm9yUHJlZGVjZXNzb3IgPSBtX2dyYXBoW3ZhbHVlSW5QcmVkZWNl
c3Nvcl0udmFyaWFibGVBY2Nlc3NEYXRhKCk7CisgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0Rh
dGEqIGRhdGFGb3JQcmVkZWNlc3NvciA9IHZhbHVlSW5QcmVkZWNlc3Nvci0+dmFyaWFibGVBY2Nl
c3NEYXRhKCk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGRhdGFGb3JQcmVkZWNlc3Nvci0+
dW5pZnkoZGF0YUZvclBoaSk7CiAKLSAgICAgICAgICAgIE5vZGUqIHBoaU5vZGUgPSAmbV9ncmFw
aFtlbnRyeS5tX3BoaV07CisgICAgICAgICAgICBOb2RlKiBwaGlOb2RlID0gZW50cnkubV9waGk7
CiAjaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQotICAgICAgICAgICAg
ZGF0YUxvZ0YoIiAgICAgIFJlZiBjb3VudCBvZiBAJXUgPSAldS5cbiIsIGVudHJ5Lm1fcGhpLCBw
aGlOb2RlLT5yZWZDb3VudCgpKTsKKyAgICAgICAgICAgIGRhdGFMb2dGKCIgICAgICBSZWYgY291
bnQgb2YgQCV1ID0gJXUuXG4iLCBwaGlOb2RlLT5pbmRleCgpLCBwaGlOb2RlLT5yZWZDb3VudCgp
KTsKICNlbmRpZgogICAgICAgICAgICAgaWYgKHBoaU5vZGUtPnJlZkNvdW50KCkpIHsKICNpZiBE
RkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCkBAIC0zMzIzLDExICszMjgyLDEx
IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnByb2Nlc3NQaGlTdGFjaygpCiAKICAgICAgICAgICAg
IGlmICghcGhpTm9kZS0+Y2hpbGQxKCkpIHsKICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FU
SU9OX1ZFUkJPU0UpCi0gICAgICAgICAgICAgICAgZGF0YUxvZ0YoIiAgICAgIFNldHRpbmcgQCV1
LT5jaGlsZDEgPSBAJXUuXG4iLCBlbnRyeS5tX3BoaSwgdmFsdWVJblByZWRlY2Vzc29yKTsKKyAg
ICAgICAgICAgICAgICBkYXRhTG9nRigiICAgICAgU2V0dGluZyBAJXUtPmNoaWxkMSA9IEAldS5c
biIsIHBoaU5vZGUtPmluZGV4KCksIHZhbHVlSW5QcmVkZWNlc3Nvcik7CiAjZW5kaWYKICAgICAg
ICAgICAgICAgICBwaGlOb2RlLT5jaGlsZHJlbi5zZXRDaGlsZDEoRWRnZSh2YWx1ZUluUHJlZGVj
ZXNzb3IpKTsKICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCi0gICAg
ICAgICAgICAgICAgZGF0YUxvZ0YoIiAgICAgIENoaWxkcmVuIG9mIEAldTogIiwgZW50cnkubV9w
aGkpOworICAgICAgICAgICAgICAgIGRhdGFMb2dGKCIgICAgICBDaGlsZHJlbiBvZiBAJXU6ICIs
IHBoaU5vZGUtPmluZGV4KCkpOwogICAgICAgICAgICAgICAgIHBoaU5vZGUtPmR1bXBDaGlsZHJl
bihXVEY6OmRhdGFGaWxlKCkpOwogICAgICAgICAgICAgICAgIGRhdGFMb2dGKCIuXG4iKTsKICNl
bmRpZgpAQCAtMzMzNSwxMSArMzI5NCwxMSBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwcm9jZXNz
UGhpU3RhY2soKQogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKCFwaGlOb2RlLT5jaGls
ZDIoKSkgewogI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKLSAgICAg
ICAgICAgICAgICBkYXRhTG9nRigiICAgICAgU2V0dGluZyBAJXUtPmNoaWxkMiA9IEAldS5cbiIs
IGVudHJ5Lm1fcGhpLCB2YWx1ZUluUHJlZGVjZXNzb3IpOworICAgICAgICAgICAgICAgIGRhdGFM
b2dGKCIgICAgICBTZXR0aW5nIEAldS0+Y2hpbGQyID0gQCV1LlxuIiwgcGhpTm9kZS0+aW5kZXgo
KSwgdmFsdWVJblByZWRlY2Vzc29yKTsKICNlbmRpZgogICAgICAgICAgICAgICAgIHBoaU5vZGUt
PmNoaWxkcmVuLnNldENoaWxkMihFZGdlKHZhbHVlSW5QcmVkZWNlc3NvcikpOwogI2lmIERGR19F
TkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKLSAgICAgICAgICAgICAgICBkYXRhTG9n
RigiICAgICAgQ2hpbGRyZW4gb2YgQCV1OiAiLCBlbnRyeS5tX3BoaSk7CisgICAgICAgICAgICAg
ICAgZGF0YUxvZ0YoIiAgICAgIENoaWxkcmVuIG9mIEAldTogIiwgcGhpTm9kZS0+aW5kZXgoKSk7
CiAgICAgICAgICAgICAgICAgcGhpTm9kZS0+ZHVtcENoaWxkcmVuKFdURjo6ZGF0YUZpbGUoKSk7
CiAgICAgICAgICAgICAgICAgZGF0YUxvZ0YoIi5cbiIpOwogI2VuZGlmCkBAIC0zMzQ3LDQwICsz
MzA2LDM4IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnByb2Nlc3NQaGlTdGFjaygpCiAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICBpZiAoIXBoaU5vZGUtPmNoaWxkMygpKSB7CiAjaWYgREZHX0VO
QUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQotICAgICAgICAgICAgICAgIGRhdGFMb2dG
KCIgICAgICBTZXR0aW5nIEAldS0+Y2hpbGQzID0gQCV1LlxuIiwgZW50cnkubV9waGksIHZhbHVl
SW5QcmVkZWNlc3Nvcik7CisgICAgICAgICAgICAgICAgZGF0YUxvZ0YoIiAgICAgIFNldHRpbmcg
QCV1LT5jaGlsZDMgPSBAJXUuXG4iLCBwaGlOb2RlLT5pbmRleCgpLCB2YWx1ZUluUHJlZGVjZXNz
b3IpOwogI2VuZGlmCiAgICAgICAgICAgICAgICAgcGhpTm9kZS0+Y2hpbGRyZW4uc2V0Q2hpbGQz
KEVkZ2UodmFsdWVJblByZWRlY2Vzc29yKSk7CiAjaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdB
VElPTl9WRVJCT1NFKQotICAgICAgICAgICAgICAgIGRhdGFMb2dGKCIgICAgICBDaGlsZHJlbiBv
ZiBAJXU6ICIsIGVudHJ5Lm1fcGhpKTsKKyAgICAgICAgICAgICAgICBkYXRhTG9nRigiICAgICAg
Q2hpbGRyZW4gb2YgQCV1OiAiLCBwaGlOb2RlLT5pbmRleCgpKTsKICAgICAgICAgICAgICAgICBw
aGlOb2RlLT5kdW1wQ2hpbGRyZW4oV1RGOjpkYXRhRmlsZSgpKTsKICAgICAgICAgICAgICAgICBk
YXRhTG9nRigiLlxuIik7CiAjZW5kaWYKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAgICAgICAgTm9kZUluZGV4IG5ld1BoaSA9IGlu
c2VydFBoaU5vZGUoT3BJbmZvKGRhdGFGb3JQaGkpLCBlbnRyeS5tX2Jsb2NrKTsKKyAgICAgICAg
ICAgIE5vZGUqIG5ld1BoaSA9IGluc2VydFBoaU5vZGUoT3BJbmZvKGRhdGFGb3JQaGkpLCBlbnRy
eS5tX2Jsb2NrKTsKICAgICAgICAgICAgIAogI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJ
T05fVkVSQk9TRSkKLSAgICAgICAgICAgIGRhdGFMb2dGKCIgICAgICBTcGxpdHRpbmcgQCV1LCBj
cmVhdGVkIEAldS5cbiIsIGVudHJ5Lm1fcGhpLCBuZXdQaGkpOworICAgICAgICAgICAgZGF0YUxv
Z0YoIiAgICAgIFNwbGl0dGluZyBAJXUsIGNyZWF0ZWQgQCV1LlxuIiwgcGhpTm9kZS0+aW5kZXgo
KSwgbmV3UGhpLT5pbmRleCgpKTsKICNlbmRpZgogCi0gICAgICAgICAgICBwaGlOb2RlID0gJm1f
Z3JhcGhbZW50cnkubV9waGldOyAvLyByZWxvYWQgYWZ0ZXIgdmVjdG9yIHJlc2l6ZQotICAgICAg
ICAgICAgTm9kZSYgbmV3UGhpTm9kZSA9IG1fZ3JhcGhbbmV3UGhpXTsKICAgICAgICAgICAgIGlm
IChwaGlOb2RlLT5yZWZDb3VudCgpKQogICAgICAgICAgICAgICAgIG1fZ3JhcGgucmVmKG5ld1Bo
aSk7CiAKLSAgICAgICAgICAgIG5ld1BoaU5vZGUuY2hpbGRyZW4gPSBwaGlOb2RlLT5jaGlsZHJl
bjsKKyAgICAgICAgICAgIG5ld1BoaS0+Y2hpbGRyZW4gPSBwaGlOb2RlLT5jaGlsZHJlbjsKIAog
I2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKLSAgICAgICAgICAgIGRh
dGFMb2dGKCIgICAgICBDaGlsZHJlbiBvZiBAJXU6ICIsIG5ld1BoaSk7Ci0gICAgICAgICAgICBu
ZXdQaGlOb2RlLmR1bXBDaGlsZHJlbihXVEY6OmRhdGFGaWxlKCkpOworICAgICAgICAgICAgZGF0
YUxvZ0YoIiAgICAgIENoaWxkcmVuIG9mIEAldTogIiwgbmV3UGhpLT5pbmRleCgpKTsKKyAgICAg
ICAgICAgIG5ld1BoaS0+ZHVtcENoaWxkcmVuKFdURjo6ZGF0YUZpbGUoKSk7CiAgICAgICAgICAg
ICBkYXRhTG9nRigiLlxuIik7CiAjZW5kaWYKIAotICAgICAgICAgICAgcGhpTm9kZS0+Y2hpbGRy
ZW4uaW5pdGlhbGl6ZShuZXdQaGksIHZhbHVlSW5QcmVkZWNlc3NvciwgTm9Ob2RlKTsKKyAgICAg
ICAgICAgIHBoaU5vZGUtPmNoaWxkcmVuLmluaXRpYWxpemUobmV3UGhpLCB2YWx1ZUluUHJlZGVj
ZXNzb3IsIDApOwogCiAjaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQot
ICAgICAgICAgICAgZGF0YUxvZ0YoIiAgICAgIENoaWxkcmVuIG9mIEAldTogIiwgZW50cnkubV9w
aGkpOworICAgICAgICAgICAgZGF0YUxvZ0YoIiAgICAgIENoaWxkcmVuIG9mIEAldTogIiwgcGhp
Tm9kZS0+aW5kZXgoKSk7CiAgICAgICAgICAgICBwaGlOb2RlLT5kdW1wQ2hpbGRyZW4oV1RGOjpk
YXRhRmlsZSgpKTsKICAgICAgICAgICAgIGRhdGFMb2dGKCIuXG4iKTsKICNlbmRpZgpAQCAtMzQw
MiwyMiArMzM1OSwyMiBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpsaW5rQmxvY2soQmFzaWNCbG9j
CiB7CiAgICAgQVNTRVJUKCFibG9jay0+aXNMaW5rZWQpOwogICAgIEFTU0VSVCghYmxvY2stPmlz
RW1wdHkoKSk7Ci0gICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhbYmxvY2stPmxhc3QoKV07Ci0gICAg
QVNTRVJUKG5vZGUuaXNUZXJtaW5hbCgpKTsKKyAgICBOb2RlKiBub2RlID0gYmxvY2stPmxhc3Qo
KTsKKyAgICBBU1NFUlQobm9kZS0+aXNUZXJtaW5hbCgpKTsKICAgICAKLSAgICBzd2l0Y2ggKG5v
ZGUub3AoKSkgeworICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewogICAgIGNhc2UgSnVtcDoKLSAg
ICAgICAgbm9kZS5zZXRUYWtlbkJsb2NrSW5kZXgobV9ncmFwaC5ibG9ja0luZGV4Rm9yQnl0ZWNv
ZGVPZmZzZXQocG9zc2libGVUYXJnZXRzLCBub2RlLnRha2VuQnl0ZWNvZGVPZmZzZXREdXJpbmdQ
YXJzaW5nKCkpKTsKKyAgICAgICAgbm9kZS0+c2V0VGFrZW5CbG9ja0luZGV4KG1fZ3JhcGguYmxv
Y2tJbmRleEZvckJ5dGVjb2RlT2Zmc2V0KHBvc3NpYmxlVGFyZ2V0cywgbm9kZS0+dGFrZW5CeXRl
Y29kZU9mZnNldER1cmluZ1BhcnNpbmcoKSkpOwogI2lmIERGR19FTkFCTEUoREVCVUdfVkVSQk9T
RSkKLSAgICAgICAgZGF0YUxvZ0YoIkxpbmtlZCBiYXNpYyBibG9jayAlcCB0byAlcCwgIyV1Llxu
IiwgYmxvY2ssIG1fZ3JhcGgubV9ibG9ja3Nbbm9kZS50YWtlbkJsb2NrSW5kZXgoKV0uZ2V0KCks
IG5vZGUudGFrZW5CbG9ja0luZGV4KCkpOworICAgICAgICBkYXRhTG9nRigiTGlua2VkIGJhc2lj
IGJsb2NrICVwIHRvICVwLCAjJXUuXG4iLCBibG9jaywgbV9ncmFwaC5tX2Jsb2Nrc1tub2RlLT50
YWtlbkJsb2NrSW5kZXgoKV0uZ2V0KCksIG5vZGUtPnRha2VuQmxvY2tJbmRleCgpKTsKICNlbmRp
ZgogICAgICAgICBicmVhazsKICAgICAgICAgCiAgICAgY2FzZSBCcmFuY2g6Ci0gICAgICAgIG5v
ZGUuc2V0VGFrZW5CbG9ja0luZGV4KG1fZ3JhcGguYmxvY2tJbmRleEZvckJ5dGVjb2RlT2Zmc2V0
KHBvc3NpYmxlVGFyZ2V0cywgbm9kZS50YWtlbkJ5dGVjb2RlT2Zmc2V0RHVyaW5nUGFyc2luZygp
KSk7Ci0gICAgICAgIG5vZGUuc2V0Tm90VGFrZW5CbG9ja0luZGV4KG1fZ3JhcGguYmxvY2tJbmRl
eEZvckJ5dGVjb2RlT2Zmc2V0KHBvc3NpYmxlVGFyZ2V0cywgbm9kZS5ub3RUYWtlbkJ5dGVjb2Rl
T2Zmc2V0RHVyaW5nUGFyc2luZygpKSk7CisgICAgICAgIG5vZGUtPnNldFRha2VuQmxvY2tJbmRl
eChtX2dyYXBoLmJsb2NrSW5kZXhGb3JCeXRlY29kZU9mZnNldChwb3NzaWJsZVRhcmdldHMsIG5v
ZGUtPnRha2VuQnl0ZWNvZGVPZmZzZXREdXJpbmdQYXJzaW5nKCkpKTsKKyAgICAgICAgbm9kZS0+
c2V0Tm90VGFrZW5CbG9ja0luZGV4KG1fZ3JhcGguYmxvY2tJbmRleEZvckJ5dGVjb2RlT2Zmc2V0
KHBvc3NpYmxlVGFyZ2V0cywgbm9kZS0+bm90VGFrZW5CeXRlY29kZU9mZnNldER1cmluZ1BhcnNp
bmcoKSkpOwogI2lmIERGR19FTkFCTEUoREVCVUdfVkVSQk9TRSkKLSAgICAgICAgZGF0YUxvZ0Yo
IkxpbmtlZCBiYXNpYyBibG9jayAlcCB0byAlcCwgIyV1IGFuZCAlcCwgIyV1LlxuIiwgYmxvY2ss
IG1fZ3JhcGgubV9ibG9ja3Nbbm9kZS50YWtlbkJsb2NrSW5kZXgoKV0uZ2V0KCksIG5vZGUudGFr
ZW5CbG9ja0luZGV4KCksIG1fZ3JhcGgubV9ibG9ja3Nbbm9kZS5ub3RUYWtlbkJsb2NrSW5kZXgo
KV0uZ2V0KCksIG5vZGUubm90VGFrZW5CbG9ja0luZGV4KCkpOworICAgICAgICBkYXRhTG9nRigi
TGlua2VkIGJhc2ljIGJsb2NrICVwIHRvICVwLCAjJXUgYW5kICVwLCAjJXUuXG4iLCBibG9jaywg
bV9ncmFwaC5tX2Jsb2Nrc1tub2RlLT50YWtlbkJsb2NrSW5kZXgoKV0uZ2V0KCksIG5vZGUtPnRh
a2VuQmxvY2tJbmRleCgpLCBtX2dyYXBoLm1fYmxvY2tzW25vZGUtPm5vdFRha2VuQmxvY2tJbmRl
eCgpXS5nZXQoKSwgbm9kZS0+bm90VGFrZW5CbG9ja0luZGV4KCkpOwogI2VuZGlmCiAgICAgICAg
IGJyZWFrOwogICAgICAgICAKQEAgLTM3MjUsNyArMzY4Miw3IEBAIHZvaWQgQnl0ZUNvZGVQYXJz
ZXI6OnBhcnNlQ29kZUJsb2NrKCkKICAgICAgICAgICAgIC8vIGFyZSBhdCB0aGUgZW5kIG9mIGFu
IGlubGluZSBmdW5jdGlvbiwgb3Igd2UgcmVhbGl6ZWQgdGhhdCB3ZQogICAgICAgICAgICAgLy8g
c2hvdWxkIHN0b3AgcGFyc2luZyBiZWNhdXNlIHRoZXJlIHdhcyBhIHJldHVybiBpbiB0aGUgZmly
c3QKICAgICAgICAgICAgIC8vIGJhc2ljIGJsb2NrLgotICAgICAgICAgICAgQVNTRVJUKG1fY3Vy
cmVudEJsb2NrLT5pc0VtcHR5KCkgfHwgbV9ncmFwaC5sYXN0KCkuaXNUZXJtaW5hbCgpIHx8ICht
X2N1cnJlbnRJbmRleCA9PSBjb2RlQmxvY2stPmluc3RydWN0aW9ucygpLnNpemUoKSAmJiBtX2lu
bGluZVN0YWNrVG9wLT5tX2lubGluZUNhbGxGcmFtZSkgfHwgIXNob3VsZENvbnRpbnVlUGFyc2lu
Zyk7CisgICAgICAgICAgICBBU1NFUlQobV9jdXJyZW50QmxvY2stPmlzRW1wdHkoKSB8fCBtX2N1
cnJlbnRCbG9jay0+bGFzdCgpLT5pc1Rlcm1pbmFsKCkgfHwgKG1fY3VycmVudEluZGV4ID09IGNv
ZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpICYmIG1faW5saW5lU3RhY2tUb3AtPm1faW5s
aW5lQ2FsbEZyYW1lKSB8fCAhc2hvdWxkQ29udGludWVQYXJzaW5nKTsKIAogICAgICAgICAgICAg
aWYgKCFzaG91bGRDb250aW51ZVBhcnNpbmcpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwpAQCAt
Mzc4NiwxMyArMzc0MywxMiBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZSgpCiAgICAgICAg
IGlmIChibG9jay0+Ynl0ZWNvZGVCZWdpbiAhPSBtX2dyYXBoLm1fb3NyRW50cnlCeXRlY29kZUlu
ZGV4KQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgbV9ncmFwaC5tX211c3RIYW5kbGVWYWx1ZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAg
IE5vZGVJbmRleCBub2RlSW5kZXggPSBibG9jay0+dmFyaWFibGVzQXRIZWFkLm9wZXJhbmQoCisg
ICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5vcGVyYW5kKAog
ICAgICAgICAgICAgICAgIG1fZ3JhcGgubV9tdXN0SGFuZGxlVmFsdWVzLm9wZXJhbmRGb3JJbmRl
eChpKSk7Ci0gICAgICAgICAgICBpZiAobm9kZUluZGV4ID09IE5vTm9kZSkKKyAgICAgICAgICAg
IGlmICghbm9kZSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIE5vZGUm
IG5vZGUgPSBtX2dyYXBoW25vZGVJbmRleF07Ci0gICAgICAgICAgICBBU1NFUlQobm9kZS5oYXNM
b2NhbCgpKTsKLSAgICAgICAgICAgIG5vZGUudmFyaWFibGVBY2Nlc3NEYXRhKCktPnByZWRpY3Qo
CisgICAgICAgICAgICBBU1NFUlQobm9kZS0+aGFzTG9jYWwoKSk7CisgICAgICAgICAgICBub2Rl
LT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+cHJlZGljdCgKICAgICAgICAgICAgICAgICBzcGVjdWxh
dGlvbkZyb21WYWx1ZShtX2dyYXBoLm1fbXVzdEhhbmRsZVZhbHVlc1tpXSkpOwogICAgICAgICB9
CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDRkFQaGFzZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDRkFQaGFzZS5jcHAJ
KHJldmlzaW9uIDE0MDkwNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ0ZBUGhh
c2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTEsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC04OCwxMSArODgsMTEgQEAgcHJpdmF0ZToKICAgICAgICAg
ZGF0YUxvZ0YoIlxuIik7CiAjZW5kaWYKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IGJsb2NrLT5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRleCA9
IGJsb2NrLT5hdChpKTsKLSAgICAgICAgICAgIGlmICghbV9ncmFwaFtub2RlSW5kZXhdLnNob3Vs
ZEdlbmVyYXRlKCkpCisgICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPmF0KGkpOworICAg
ICAgICAgICAgaWYgKCFub2RlLT5zaG91bGRHZW5lcmF0ZSgpKQogICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwogI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKLSAgICAg
ICAgICAgIGRhdGFMb2dGKCIgICAgICAlcyBAJXU6ICIsIEdyYXBoOjpvcE5hbWUobV9ncmFwaFtu
b2RlSW5kZXhdLm9wKCkpLCBub2RlSW5kZXgpOworICAgICAgICAgICAgZGF0YUxvZ0YoIiAgICAg
ICVzIEAldTogIiwgR3JhcGg6Om9wTmFtZShtX2dyYXBoW25vZGVJbmRleF0ub3AoKSksIG5vZGUt
PmluZGV4KCkpOwogICAgICAgICAgICAgbV9zdGF0ZS5kdW1wKFdURjo6ZGF0YUZpbGUoKSk7CiAg
ICAgICAgICAgICBkYXRhTG9nRigiXG4iKTsKICNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdDRkdTaW1wbGlmaWNhdGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NGR1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwCShy
ZXZpc2lvbiAxNDA5MDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NGR1NpbXBs
aWZpY2F0aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTIsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02MCw3ICs2MCw3IEBAIHB1YmxpYzoK
ICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgQVNTRVJUKGJs
b2NrLT5pc1JlYWNoYWJsZSk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBzd2l0Y2gg
KG1fZ3JhcGhbYmxvY2stPmxhc3QoKV0ub3AoKSkgeworICAgICAgICAgICAgICAgIHN3aXRjaCAo
YmxvY2stPmxhc3QoKS0+b3AoKSkgewogICAgICAgICAgICAgICAgIGNhc2UgSnVtcDogewogICAg
ICAgICAgICAgICAgICAgICAvLyBTdWNjZXNzb3Igd2l0aCBvbmUgcHJlZGVjZXNzb3IgLT4gbWVy
Z2UuCiAgICAgICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLm1fYmxvY2tzW21fZ3JhcGguc3Vj
Y2Vzc29yKGJsb2NrLCAwKV0tPm1fcHJlZGVjZXNzb3JzLnNpemUoKSA9PSAxKSB7CkBAIC0xMjks
MTAgKzEyOSwxMCBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQmxvY2tJ
bmRleCB0YWtlbkJsb2NrSW5kZXggPSBtX2dyYXBoLnN1Y2Nlc3NvckZvckNvbmRpdGlvbihibG9j
aywgY29uZGl0aW9uKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCbG9ja0luZGV4IG5v
dFRha2VuQmxvY2tJbmRleCA9IG1fZ3JhcGguc3VjY2Vzc29yRm9yQ29uZGl0aW9uKGJsb2NrLCAh
Y29uZGl0aW9uKTsKICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEFTU0VSVChtX2dyYXBoW2Jsb2NrLT5sYXN0KCldLmlzVGVybWluYWwoKSk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29kZU9yaWdpbiBib3VuZGFyeUNvZGVPcmlnaW4g
PSBtX2dyYXBoW2Jsb2NrLT5sYXN0KCldLmNvZGVPcmlnaW47Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbV9ncmFwaFtibG9jay0+bGFzdCgpXS5zZXRPcEFuZERlZmF1bHRGbGFncyhQaGFu
dG9tKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQobV9ncmFwaFtibG9jay0+
bGFzdCgpXS5yZWZDb3VudCgpID09IDEpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFT
U0VSVChibG9jay0+bGFzdCgpLT5pc1Rlcm1pbmFsKCkpOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIENvZGVPcmlnaW4gYm91bmRhcnlDb2RlT3JpZ2luID0gYmxvY2stPmxhc3QoKS0+Y29k
ZU9yaWdpbjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBibG9jay0+bGFzdCgpLT5zZXRP
cEFuZERlZmF1bHRGbGFncyhQaGFudG9tKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBB
U1NFUlQoYmxvY2stPmxhc3QoKS0+cmVmQ291bnQoKSA9PSAxKTsKICAgICAgICAgICAgICAgICAg
ICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpldHRpc29uQmxvY2soYmxvY2tJ
bmRleCwgbm90VGFrZW5CbG9ja0luZGV4LCBib3VuZGFyeUNvZGVPcmlnaW4pOwogICAgICAgICAg
ICAgICAgICAgICAgICAgCkBAIC0xNjAsMTIgKzE2MCwxMSBAQCBwdWJsaWM6CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZGF0YUxvZ0YoIkNGR1NpbXBsaWZ5OiBCcmFuY2gtPmp1bXAgY29u
dmVyc2lvbiB0byBzYW1lIHN1Y2Nlc3NvciBvbiBCbG9jayAjJXUgdG8gQmxvY2sgIyV1LlxuIiwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrSW5kZXgsIHRhcmdldEJs
b2NrSW5kZXgpOwogI2VuZGlmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKG1f
Z3JhcGhbYmxvY2stPmxhc3QoKV0uaXNUZXJtaW5hbCgpKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBOb2RlJiBicmFuY2ggPSBtX2dyYXBoW2Jsb2NrLT5sYXN0KCldOwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEFTU0VSVChicmFuY2guaXNUZXJtaW5hbCgpKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBBU1NFUlQoYnJhbmNoLm9wKCkgPT0gQnJhbmNoKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBicmFuY2guc2V0T3BBbmREZWZhdWx0RmxhZ3MoUGhhbnRv
bSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGJyYW5jaC5yZWZDb3VudCgp
ID09IDEpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vZGUqIGJyYW5jaCA9IGJsb2Nr
LT5sYXN0KCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGJyYW5jaC0+aXNU
ZXJtaW5hbCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQoYnJhbmNoLT5v
cCgpID09IEJyYW5jaCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJhbmNoLT5zZXRP
cEFuZERlZmF1bHRGbGFncyhQaGFudG9tKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBB
U1NFUlQoYnJhbmNoLT5yZWZDb3VudCgpID09IDEpOwogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrLT5hcHBlbmROb2RlKAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLCBEb250UmVmQ2hpbGRyZW4sIERv
bnRSZWZOb2RlLCBTcGVjTm9uZSwgSnVtcCwKQEAgLTI2MCw0NSArMjU5LDQzIEBAIHByaXZhdGU6
CiAgICAgCiAgICAgdm9pZCBrZWVwT3BlcmFuZEFsaXZlKEJhc2ljQmxvY2sqIGJsb2NrLCBDb2Rl
T3JpZ2luIGNvZGVPcmlnaW4sIGludCBvcGVyYW5kKQogICAgIHsKLSAgICAgICAgTm9kZUluZGV4
IG5vZGVJbmRleCA9IGJsb2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZChvcGVyYW5kKTsKLSAg
ICAgICAgaWYgKG5vZGVJbmRleCA9PSBOb05vZGUpCisgICAgICAgIE5vZGUqIG5vZGUgPSBibG9j
ay0+dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQob3BlcmFuZCk7CisgICAgICAgIGlmICghbm9kZSkK
ICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgaWYgKG1fZ3JhcGhbbm9kZUluZGV4XS52YXJp
YWJsZUFjY2Vzc0RhdGEoKS0+aXNDYXB0dXJlZCgpKQorICAgICAgICBpZiAobm9kZS0+dmFyaWFi
bGVBY2Nlc3NEYXRhKCktPmlzQ2FwdHVyZWQoKSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgaWYgKG1fZ3JhcGhbbm9kZUluZGV4XS5vcCgpID09IFNldExvY2FsKQotICAgICAgICAgICAg
bm9kZUluZGV4ID0gbV9ncmFwaFtub2RlSW5kZXhdLmNoaWxkMSgpLmluZGV4KCk7Ci0gICAgICAg
IE5vZGUmIG5vZGUgPSBtX2dyYXBoW25vZGVJbmRleF07Ci0gICAgICAgIGlmICghbm9kZS5zaG91
bGRHZW5lcmF0ZSgpKQorICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBTZXRMb2NhbCkKKyAgICAg
ICAgICAgIG5vZGUgPSBub2RlLT5jaGlsZDEoKS5ub2RlKCk7CisgICAgICAgIGlmICghbm9kZS0+
c2hvdWxkR2VuZXJhdGUoKSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgQVNTRVJUKG1f
Z3JhcGhbbm9kZUluZGV4XS5vcCgpICE9IFNldExvY2FsKTsKKyAgICAgICAgQVNTRVJUKG5vZGUt
Pm9wKCkgIT0gU2V0TG9jYWwpOwogICAgICAgICBibG9jay0+YXBwZW5kTm9kZSgKLSAgICAgICAg
ICAgIG1fZ3JhcGgsIFJlZkNoaWxkcmVuLCBEb250UmVmTm9kZSwgU3BlY05vbmUsIFBoYW50b20s
IGNvZGVPcmlnaW4sIG5vZGVJbmRleCk7CisgICAgICAgICAgICBtX2dyYXBoLCBSZWZDaGlsZHJl
biwgRG9udFJlZk5vZGUsIFNwZWNOb25lLCBQaGFudG9tLCBjb2RlT3JpZ2luLCBub2RlKTsKICAg
ICB9CiAgICAgCiAgICAgdm9pZCBmaXhQb3NzaWJsZUdldExvY2FsKEJhc2ljQmxvY2sqIGJsb2Nr
LCBFZGdlJiBlZGdlLCBib29sIGNoYW5nZVJlZikKICAgICB7Ci0gICAgICAgIE5vZGUmIGNoaWxk
ID0gbV9ncmFwaFtlZGdlXTsKLSAgICAgICAgaWYgKGNoaWxkLm9wKCkgIT0gR2V0TG9jYWwpCisg
ICAgICAgIE5vZGUqIGNoaWxkID0gZWRnZS5ub2RlKCk7CisgICAgICAgIGlmIChjaGlsZC0+b3Ao
KSAhPSBHZXRMb2NhbCkKICAgICAgICAgICAgIHJldHVybjsKICNpZiBERkdfRU5BQkxFKERFQlVH
X1BST1BBR0FUSU9OX1ZFUkJPU0UpCi0gICAgICAgIGRhdGFMb2dGKCIgICAgQ29uc2lkZXJpbmcg
R2V0TG9jYWwgYXQgQCV1LCBsb2NhbCByJWQuXG4iLCBlZGdlLmluZGV4KCksIGNoaWxkLmxvY2Fs
KCkpOworICAgICAgICBkYXRhTG9nRigiICAgIENvbnNpZGVyaW5nIEdldExvY2FsIGF0IEAldSwg
bG9jYWwgciVkLlxuIiwgbm9kZS0+aW5kZXgoKSwgY2hpbGQtPmxvY2FsKCkpOwogI2VuZGlmCi0g
ICAgICAgIGlmIChjaGlsZC52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+aXNDYXB0dXJlZCgpKSB7Cisg
ICAgICAgIGlmIChjaGlsZC0+dmFyaWFibGVBY2Nlc3NEYXRhKCktPmlzQ2FwdHVyZWQoKSkgewog
I2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKICAgICAgICAgICAgIGRh
dGFMb2dGKCIgICAgICAgIEl0J3MgY2FwdHVyZWQuXG4iKTsKICNlbmRpZgogICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIE5vZGVJbmRleCBvcmlnaW5hbE5vZGVJbmRleCA9
IGJsb2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZChjaGlsZC5sb2NhbCgpKTsKKyAgICAgICAg
Tm9kZSogb3JpZ2luYWxOb2RlID0gYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKGNoaWxk
LT5sb2NhbCgpKTsKICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCi0g
ICAgICAgIGRhdGFMb2dGKCIgICAgICAgIERlYWxpbmcgd2l0aCBvcmlnaW5hbCBAJXUuXG4iLCBv
cmlnaW5hbE5vZGVJbmRleCk7CisgICAgICAgIGRhdGFMb2dGKCIgICAgICAgIERlYWxpbmcgd2l0
aCBvcmlnaW5hbCBAJXUuXG4iLCBvcmlnaW5hbE5vZGUtPmluZGV4KCkpOwogI2VuZGlmCi0gICAg
ICAgIEFTU0VSVChvcmlnaW5hbE5vZGVJbmRleCAhPSBOb05vZGUpOwotICAgICAgICBOb2RlKiBv
cmlnaW5hbE5vZGUgPSAmbV9ncmFwaFtvcmlnaW5hbE5vZGVJbmRleF07CisgICAgICAgIEFTU0VS
VChvcmlnaW5hbE5vZGVJbmRleCk7CiAjaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9W
RVJCT1NFKQogICAgICAgICBkYXRhTG9nRigiICAgICAgICBPcmlnaW5hbCBoYXMgbG9jYWwgciVk
LlxuIiwgb3JpZ2luYWxOb2RlLT5sb2NhbCgpKTsKICNlbmRpZgotICAgICAgICBBU1NFUlQoY2hp
bGQubG9jYWwoKSA9PSBvcmlnaW5hbE5vZGUtPmxvY2FsKCkpOworICAgICAgICBBU1NFUlQoY2hp
bGQtPmxvY2FsKCkgPT0gb3JpZ2luYWxOb2RlLT5sb2NhbCgpKTsKICAgICAgICAgLy8gUG9zc2li
aWxpdGllczoKICAgICAgICAgLy8gU2V0TG9jYWwgLT4gdGhlIHNlY29uZEJsb2NrIGlzIGdldHRp
bmcgdGhlIHZhbHVlIG9mIHNvbWV0aGluZyB0aGF0IGlzIGltbWVkaWF0ZWx5CiAgICAgICAgIC8v
ICAgICBhdmFpbGFibGUgaW4gdGhlIGZpcnN0IGJsb2NrIHdpdGggYSBrbm93biBOb2RlSW5kZXgu
CkBAIC0zMTIsMTAgKzMwOSw4IEBAIHByaXZhdGU6CiAgICAgICAgIC8vIEZsdXNoIC0+IHRoZSBz
ZWNvbmRCbG9jayBpcyBhc2tpbmcgZm9yIGtlZXAtYWxpdmUgb24gYW4gb3BlcmFuZCB0aGF0IHRo
ZSBmaXJzdAogICAgICAgICAvLyAgICAgYmxvY2sgd2FzIGZvcmNpbmcgdG8gYmUgYWxpdmUsIHNv
IHRoZSBzZWNvbmQgYmxvY2sgc2hvdWxkIHJlZmVyIGNoaWxkIG9mCiAgICAgICAgIC8vICAgICB0
aGUgZmx1c2guCi0gICAgICAgIGlmIChvcmlnaW5hbE5vZGUtPm9wKCkgPT0gRmx1c2gpIHsKLSAg
ICAgICAgICAgIG9yaWdpbmFsTm9kZUluZGV4ID0gb3JpZ2luYWxOb2RlLT5jaGlsZDEoKS5pbmRl
eCgpOwotICAgICAgICAgICAgb3JpZ2luYWxOb2RlID0gJm1fZ3JhcGhbb3JpZ2luYWxOb2RlSW5k
ZXhdOwotICAgICAgICB9CisgICAgICAgIGlmIChvcmlnaW5hbE5vZGUtPm9wKCkgPT0gRmx1c2gp
CisgICAgICAgICAgICBvcmlnaW5hbE5vZGUgPSBvcmlnaW5hbE5vZGUtPmNoaWxkMSgpLm5vZGUo
KTsKICAgICAgICAgc3dpdGNoIChvcmlnaW5hbE5vZGUtPm9wKCkpIHsKICAgICAgICAgY2FzZSBT
ZXRMb2NhbDogewogICAgICAgICAgICAgaWYgKGNoYW5nZVJlZikKQEAgLTMyMyw3ICszMTgsNyBA
QCBwcml2YXRlOgogI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKICAg
ICAgICAgICAgIGRhdGFMb2dGKCIgICAgICAgIEl0J3MgYSBTZXRMb2NhbC5cbiIpOwogI2VuZGlm
Ci0gICAgICAgICAgICBtX2dyYXBoLmNoYW5nZUluZGV4KGVkZ2UsIG9yaWdpbmFsTm9kZS0+Y2hp
bGQxKCkuaW5kZXgoKSwgY2hhbmdlUmVmKTsKKyAgICAgICAgICAgIG1fZ3JhcGguY2hhbmdlQ2hp
bGQoZWRnZSwgb3JpZ2luYWxOb2RlLT5jaGlsZDEoKS5ub2RlKCksIGNoYW5nZVJlZik7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIEdldExvY2FsOiB7CkBAIC0z
MzEsNyArMzI2LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGRhdGFMb2dGKCIgICAgICAgIEl0
J3MgYSBHZXRMb2NhbC5cbiIpOwogI2VuZGlmCiAgICAgICAgICAgICBpZiAob3JpZ2luYWxOb2Rl
LT5zaG91bGRHZW5lcmF0ZSgpKQotICAgICAgICAgICAgICAgIG1fZ3JhcGguY2hhbmdlSW5kZXgo
ZWRnZSwgb3JpZ2luYWxOb2RlSW5kZXgsIGNoYW5nZVJlZik7CisgICAgICAgICAgICAgICAgbV9n
cmFwaC5jaGFuZ2VDaGlsZChlZGdlLCBvcmlnaW5hbE5vZGUsIGNoYW5nZVJlZik7CiAgICAgICAg
ICAgICAvLyBJZiB3ZSBoYXZlIGEgR2V0TG9jYWwgdGhhdCBwb2ludHMgdG8gYSBjaGlsZCBHZXRM
b2NhbCB0aGF0IGlzIGRlYWQsIHRoZW4KICAgICAgICAgICAgIC8vIHdlIGhhdmUgbm8gbmVlZCB0
byBkbyBhbnl0aGluZzogdGhpcyBvcmlnaW5hbCBHZXRMb2NhbCBpcyBzdGlsbCB2YWxpZC4KICAg
ICAgICAgICAgIGJyZWFrOwpAQCAtMzc1LDIzICszNzAsMjEgQEAgcHJpdmF0ZToKICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGRl
c3RpbmF0aW9uQmxvY2stPnBoaXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIE5vZGVJbmRl
eCBwaGlOb2RlSW5kZXggPSBkZXN0aW5hdGlvbkJsb2NrLT5waGlzW2ldOwotICAgICAgICAgICAg
Tm9kZSYgcGhpTm9kZSA9IG1fZ3JhcGhbcGhpTm9kZUluZGV4XTsKLSAgICAgICAgICAgIE5vZGVJ
bmRleCBteU5vZGVJbmRleCA9IHNvdXJjZUJsb2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZChw
aGlOb2RlLmxvY2FsKCkpOwotI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9T
RSkKLSAgICAgICAgICAgIGRhdGFMb2dGKCJDb25zaWRlcmluZyByZW1vdmluZyByZWZlcmVuY2Ug
ZnJvbSBwaGkgQCV1IHRvIEAldSBvbiBsb2NhbCByJWQ6IiwKLSAgICAgICAgICAgICAgICAgICAg
cGhpTm9kZUluZGV4LCBteU5vZGVJbmRleCwgcGhpTm9kZS5sb2NhbCgpKTsKLSNlbmRpZgotICAg
ICAgICAgICAgaWYgKG15Tm9kZUluZGV4ID09IE5vTm9kZSkgeworICAgICAgICAgICAgTm9kZSog
cGhpTm9kZSA9IGRlc3RpbmF0aW9uQmxvY2stPnBoaXNbaV07CisgICAgICAgICAgICBOb2RlKiBt
eU5vZGUgPSBzb3VyY2VCbG9jay0+dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQocGhpTm9kZS0+bG9j
YWwoKSk7CisgICAgICAgICAgICBpZiAoIW15Tm9kZSkgewogICAgICAgICAgICAgICAgIC8vIFRo
aXMgd2lsbCBoYXBwZW4gaWYgdGhlcmUgaXMgYSBwaGkgaW4gdGhlIGRlc3RpbmF0aW9uIHRoYXQg
cmVmZXJzIGludG8KICAgICAgICAgICAgICAgICAvLyB0aGUgZGVzdGluYXRpb24gaXRzZWxmLgog
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgTm9k
ZSYgbXlOb2RlID0gbV9ncmFwaFtteU5vZGVJbmRleF07Ci0gICAgICAgICAgICBpZiAobXlOb2Rl
Lm9wKCkgPT0gR2V0TG9jYWwpCi0gICAgICAgICAgICAgICAgbXlOb2RlSW5kZXggPSBteU5vZGUu
Y2hpbGQxKCkuaW5kZXgoKTsKKyNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJP
U0UpCisgICAgICAgICAgICBkYXRhTG9nRigiQ29uc2lkZXJpbmcgcmVtb3ZpbmcgcmVmZXJlbmNl
IGZyb20gcGhpIEAldSB0byBAJXUgb24gbG9jYWwgciVkOiIsCisgICAgICAgICAgICAgICAgICAg
ICBwaGlOb2RlLT5pbmRleCgpLCBteU5vZGUtPmluZGV4KCksIHBoaU5vZGUtPmxvY2FsKCkpOwor
I2VuZGlmCisgICAgICAgICAgICBpZiAobXlOb2RlLT5vcCgpID09IEdldExvY2FsKQorICAgICAg
ICAgICAgICAgIG15Tm9kZSA9IG15Tm9kZS0+Y2hpbGQxKCkubm9kZSgpOwogICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBqID0gMDsgaiA8IEFkamFjZW5jeUxpc3Q6OlNpemU7ICsraikKLSAgICAg
ICAgICAgICAgICByZW1vdmVQb3RlbnRpYWxseURlYWRQaGlSZWZlcmVuY2UobXlOb2RlSW5kZXgs
IHBoaU5vZGUsIGosIHNvdXJjZUJsb2NrLT5pc1JlYWNoYWJsZSk7CisgICAgICAgICAgICAgICAg
cmVtb3ZlUG90ZW50aWFsbHlEZWFkUGhpUmVmZXJlbmNlKG15Tm9kZSwgcGhpTm9kZSwgaiwgc291
cmNlQmxvY2stPmlzUmVhY2hhYmxlKTsKICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9O
X1ZFUkJPU0UpCiAgICAgICAgICAgICBkYXRhTG9nRigiXG4iKTsKICNlbmRpZgpAQCAtNDE2LDU4
ICs0MDksNTcgQEAgcHJpdmF0ZToKICAgICAgICAgZml4UGhpcyhibG9ja0luZGV4LCBqZXR0aXNv
bmVkQmxvY2tJbmRleCk7CiAgICAgfQogICAgIAotICAgIHZvaWQgcmVtb3ZlUG90ZW50aWFsbHlE
ZWFkUGhpUmVmZXJlbmNlKE5vZGVJbmRleCBteU5vZGVJbmRleCwgTm9kZSYgcGhpTm9kZSwgdW5z
aWduZWQgZWRnZUluZGV4LCBib29sIGNoYW5nZVJlZikKKyAgICB2b2lkIHJlbW92ZVBvdGVudGlh
bGx5RGVhZFBoaVJlZmVyZW5jZShOb2RlKiBteU5vZGUsIE5vZGUqIHBoaU5vZGUsIHVuc2lnbmVk
IGVkZ2VJbmRleCwgYm9vbCBjaGFuZ2VSZWYpCiAgICAgewotICAgICAgICBpZiAocGhpTm9kZS5j
aGlsZHJlbi5jaGlsZChlZGdlSW5kZXgpLmluZGV4VW5jaGVja2VkKCkgIT0gbXlOb2RlSW5kZXgp
CisgICAgICAgIGlmIChwaGlOb2RlLT5jaGlsZHJlbi5jaGlsZChlZGdlSW5kZXgpLm5vZGUoKSAh
PSBteU5vZGUpCiAgICAgICAgICAgICByZXR1cm47CiAjaWYgREZHX0VOQUJMRShERUJVR19QUk9Q
QUdBVElPTl9WRVJCT1NFKQogICAgICAgICBkYXRhTG9nRigiIFJlbW92aW5nIHJlZmVyZW5jZSBh
dCBjaGlsZCAldS4iLCBlZGdlSW5kZXgpOwogI2VuZGlmCi0gICAgICAgIGlmIChjaGFuZ2VSZWYg
JiYgcGhpTm9kZS5zaG91bGRHZW5lcmF0ZSgpKQotICAgICAgICAgICAgbV9ncmFwaC5kZXJlZiht
eU5vZGVJbmRleCk7Ci0gICAgICAgIHBoaU5vZGUuY2hpbGRyZW4ucmVtb3ZlRWRnZUZyb21CYWco
ZWRnZUluZGV4KTsKKyAgICAgICAgaWYgKGNoYW5nZVJlZiAmJiBwaGlOb2RlLT5zaG91bGRHZW5l
cmF0ZSgpKQorICAgICAgICAgICAgbV9ncmFwaC5kZXJlZihteU5vZGUpOworICAgICAgICBwaGlO
b2RlLT5jaGlsZHJlbi5yZW1vdmVFZGdlRnJvbUJhZyhlZGdlSW5kZXgpOwogICAgIH0KICAgICAK
ICAgICBzdHJ1Y3QgT3BlcmFuZFN1YnN0aXR1dGlvbiB7CiAgICAgICAgIE9wZXJhbmRTdWJzdGl0
dXRpb24oKQotICAgICAgICAgICAgOiBvbGRDaGlsZChOb05vZGUpCi0gICAgICAgICAgICAsIG5l
d0NoaWxkKE5vTm9kZSkKKyAgICAgICAgICAgIDogb2xkQ2hpbGQoMCkKKyAgICAgICAgICAgICwg
bmV3Q2hpbGQoMCkKICAgICAgICAgewogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBleHBs
aWNpdCBPcGVyYW5kU3Vic3RpdHV0aW9uKE5vZGVJbmRleCBvbGRDaGlsZCkKKyAgICAgICAgZXhw
bGljaXQgT3BlcmFuZFN1YnN0aXR1dGlvbihOb2RlKiBvbGRDaGlsZCkKICAgICAgICAgICAgIDog
b2xkQ2hpbGQob2xkQ2hpbGQpCiAgICAgICAgICAgICAsIG5ld0NoaWxkKG9sZENoaWxkKQogICAg
ICAgICB7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIE9wZXJhbmRTdWJzdGl0dXRpb24o
Tm9kZUluZGV4IG9sZENoaWxkLCBOb2RlSW5kZXggbmV3Q2hpbGQpCisgICAgICAgIE9wZXJhbmRT
dWJzdGl0dXRpb24oTm9kZSogb2xkQ2hpbGQsIE5vZGUqIG5ld0NoaWxkKQogICAgICAgICAgICAg
OiBvbGRDaGlsZChvbGRDaGlsZCkKICAgICAgICAgICAgICwgbmV3Q2hpbGQobmV3Q2hpbGQpCiAg
ICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVCgob2xkQ2hpbGQgPT0gTm9Ob2RlKSA9PSAobmV3
Q2hpbGQgPT0gTm9Ob2RlKSk7CisgICAgICAgICAgICBBU1NFUlQoKCFvbGRDaGlsZCkgPT0gKCFu
ZXdDaGlsZCkpOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICB2b2lkIGR1bXAoRklMRSog
b3V0KQorICAgICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKICAgICAgICAg
ewotICAgICAgICAgICAgaWYgKG9sZENoaWxkID09IE5vTm9kZSkKLSAgICAgICAgICAgICAgICBm
cHJpbnRmKG91dCwgIi0iKTsKKyAgICAgICAgICAgIGlmICghb2xkQ2hpbGQpCisgICAgICAgICAg
ICAgICAgb3V0LnByaW50ZihvdXQsICItIik7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAg
ICAgICAgZnByaW50ZihvdXQsICJAJXUgLT4gQCV1Iiwgb2xkQ2hpbGQsIG5ld0NoaWxkKTsKKyAg
ICAgICAgICAgICAgICBvdXQucHJpbnRmKG91dCwgIkAldSAtPiBAJXUiLCBvbGRDaGlsZC0+aW5k
ZXgoKSwgbmV3Q2hpbGQtPmluZGV4KCkpOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBO
b2RlSW5kZXggb2xkQ2hpbGQ7Ci0gICAgICAgIE5vZGVJbmRleCBuZXdDaGlsZDsKKyAgICAgICAg
Tm9kZSogb2xkQ2hpbGQ7CisgICAgICAgIE5vZGUqIG5ld0NoaWxkOwogICAgIH07CiAgICAgCi0g
ICAgTm9kZUluZGV4IHNraXBHZXRMb2NhbChOb2RlSW5kZXggbm9kZUluZGV4KQorICAgIE5vZGUq
IHNraXBHZXRMb2NhbChOb2RlKiBub2RlKQogICAgIHsKLSAgICAgICAgaWYgKG5vZGVJbmRleCA9
PSBOb05vZGUpCi0gICAgICAgICAgICByZXR1cm4gTm9Ob2RlOwotICAgICAgICBOb2RlJiBub2Rl
ID0gbV9ncmFwaFtub2RlSW5kZXhdOwotICAgICAgICBpZiAobm9kZS5vcCgpID09IEdldExvY2Fs
KQotICAgICAgICAgICAgcmV0dXJuIG5vZGUuY2hpbGQxKCkuaW5kZXgoKTsKLSAgICAgICAgcmV0
dXJuIG5vZGVJbmRleDsKKyAgICAgICAgaWYgKCFub2RlKQorICAgICAgICAgICAgcmV0dXJuIDA7
CisgICAgICAgIGlmIChub2RlLT5vcCgpID09IEdldExvY2FsKQorICAgICAgICAgICAgcmV0dXJu
IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKKyAgICAgICAgcmV0dXJuIG5vZGU7CiAgICAgfQogICAg
IAogICAgIHZvaWQgcmVjb3JkUG9zc2libGVJbmNvbWluZ1JlZmVyZW5jZSgKQEAgLTQ3NywzMCAr
NDY5LDI4IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBza2lwR2V0TG9jYWwoc2Vjb25kQmxvY2st
PnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKG9wZXJhbmQpKSk7CiAgICAgfQogICAgIAotICAgIHZv
aWQgcmVjb3JkTmV3VGFyZ2V0KE9wZXJhbmRzPE9wZXJhbmRTdWJzdGl0dXRpb24+JiBzdWJzdGl0
dXRpb25zLCBpbnQgb3BlcmFuZCwgTm9kZUluZGV4IG5vZGVJbmRleCkKKyAgICB2b2lkIHJlY29y
ZE5ld1RhcmdldChPcGVyYW5kczxPcGVyYW5kU3Vic3RpdHV0aW9uPiYgc3Vic3RpdHV0aW9ucywg
aW50IG9wZXJhbmQsIE5vZGVJbmRleCBOb2RlKiBub2RlKQogICAgIHsKLSAgICAgICAgQVNTRVJU
KG1fZ3JhcGhbbm9kZUluZGV4XS5vcCgpID09IFNldExvY2FsCi0gICAgICAgICAgICAgICB8fCBt
X2dyYXBoW25vZGVJbmRleF0ub3AoKSA9PSBTZXRBcmd1bWVudAotICAgICAgICAgICAgICAgfHwg
bV9ncmFwaFtub2RlSW5kZXhdLm9wKCkgPT0gRmx1c2gKLSAgICAgICAgICAgICAgIHx8IG1fZ3Jh
cGhbbm9kZUluZGV4XS5vcCgpID09IFBoaSk7Ci0gICAgICAgIHN1YnN0aXR1dGlvbnMub3BlcmFu
ZChvcGVyYW5kKS5uZXdDaGlsZCA9IG5vZGVJbmRleDsKKyAgICAgICAgQVNTRVJUKG5vZGUtPm9w
KCkgPT0gU2V0TG9jYWwKKyAgICAgICAgICAgICAgIHx8IG5vZGUtPm9wKCkgPT0gU2V0QXJndW1l
bnQKKyAgICAgICAgICAgICAgIHx8IG5vZGUtPm9wKCkgPT0gRmx1c2gKKyAgICAgICAgICAgICAg
IHx8IG5vZGUtPm9wKCkgPT0gUGhpKTsKKyAgICAgICAgc3Vic3RpdHV0aW9ucy5vcGVyYW5kKG9w
ZXJhbmQpLm5ld0NoaWxkID0gbm9kZTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBmaXhUYWlsT3Bl
cmFuZCgKICAgICAgICAgQmFzaWNCbG9jayogZmlyc3RCbG9jaywgQmFzaWNCbG9jayogc2Vjb25k
QmxvY2ssIGludCBvcGVyYW5kLAogICAgICAgICBPcGVyYW5kczxPcGVyYW5kU3Vic3RpdHV0aW9u
PiYgc3Vic3RpdHV0aW9ucykKICAgICB7Ci0gICAgICAgIE5vZGVJbmRleCBhdFNlY29uZFRhaWwg
PSBzZWNvbmRCbG9jay0+dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQob3BlcmFuZCk7CisgICAgICAg
IE5vZGUqIGF0U2Vjb25kVGFpbCA9IHNlY29uZEJsb2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFu
ZChvcGVyYW5kKTsKICAgICAgICAgCi0gICAgICAgIGlmIChhdFNlY29uZFRhaWwgPT0gTm9Ob2Rl
KSB7CisgICAgICAgIGlmICghYXRTZWNvbmRUYWlsKSB7CiAgICAgICAgICAgICAvLyBJZiB0aGUg
dmFyaWFibGUgaXMgZGVhZCBhdCB0aGUgZW5kIG9mIHRoZSBzZWNvbmQgYmxvY2ssIHRoZW4gZG8g
bm90aGluZzsgZXNzZW50aWFsbHkKICAgICAgICAgICAgIC8vIHRoaXMgbWVhbnMgdGhhdCB3ZSB3
YW50IHRoZSB0YWlsIHN0YXRlIHRvIHJlZmxlY3Qgd2hhdGV2ZXIgdGhlIGZpcnN0IGJsb2NrIGRp
ZC4KICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0gICAgICAgIE5vZGUmIHNlY29u
ZE5vZGUgPSBtX2dyYXBoW2F0U2Vjb25kVGFpbF07Ci0gICAgICAgIAotICAgICAgICBzd2l0Y2gg
KHNlY29uZE5vZGUub3AoKSkgeworICAgICAgICBzd2l0Y2ggKGF0U2Vjb25kVGFpbC0+b3AoKSkg
ewogICAgICAgICBjYXNlIFNldExvY2FsOgogICAgICAgICBjYXNlIEZsdXNoOiB7CiAgICAgICAg
ICAgICAvLyBUaGUgc2Vjb25kIGJsb2NrIGRpZCBpbnRlcmVzdGluZyB0aGluZ3MgdG8gdGhlIHZh
cmlhYmxlcywgc28gdXBkYXRlIHRoZSB0YWlsCkBAIC01MTEsNyArNTAxLDcgQEAgcHJpdmF0ZToK
ICAgICAgICAgICAgIAogICAgICAgICBjYXNlIFBoaTogewogICAgICAgICAgICAgLy8gS2VlcCB3
aGF0IHdhcyBpbiB0aGUgZmlyc3QgYmxvY2suCi0gICAgICAgICAgICBBU1NFUlQoZmlyc3RCbG9j
ay0+dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQob3BlcmFuZCkgIT0gTm9Ob2RlKTsKKyAgICAgICAg
ICAgIEFTU0VSVChmaXJzdEJsb2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZChvcGVyYW5kKSk7
CiAgICAgICAgICAgICByZWNvcmROZXdUYXJnZXQoc3Vic3RpdHV0aW9ucywgb3BlcmFuZCwgc2tp
cEdldExvY2FsKGZpcnN0QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKG9wZXJhbmQpKSk7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtNTIwLDI4ICs1MTAsMjggQEAgcHJp
dmF0ZToKICAgICAgICAgICAgIC8vIElmIGl0J3MgYSBHZXRMb2NhbCBvbiBhIGNhcHR1cmVkIHZh
ciwgdGhlbiBkZWZpbml0ZWx5IGtlZXAgd2hhdCB3YXMKICAgICAgICAgICAgIC8vIGluIHRoZSBz
ZWNvbmQgYmxvY2suIEluIHBhcnRpY3VsYXIsIGl0J3MgcG9zc2libGUgdGhhdCB0aGUgZmlyc3QK
ICAgICAgICAgICAgIC8vIGJsb2NrIGRvZXNuJ3QgZXZlbiBrbm93IGFib3V0IHRoaXMgdmFyaWFi
bGUuCi0gICAgICAgICAgICBpZiAoc2Vjb25kTm9kZS52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+aXND
YXB0dXJlZCgpKSB7CisgICAgICAgICAgICBpZiAoYXRTZWNvbmRUYWlsLT52YXJpYWJsZUFjY2Vz
c0RhdGEoKS0+aXNDYXB0dXJlZCgpKSB7CiAgICAgICAgICAgICAgICAgZmlyc3RCbG9jay0+dmFy
aWFibGVzQXRUYWlsLm9wZXJhbmQob3BlcmFuZCkgPSBhdFNlY29uZFRhaWw7Ci0gICAgICAgICAg
ICAgICAgcmVjb3JkTmV3VGFyZ2V0KHN1YnN0aXR1dGlvbnMsIG9wZXJhbmQsIHNlY29uZE5vZGUu
Y2hpbGQxKCkuaW5kZXgoKSk7CisgICAgICAgICAgICAgICAgcmVjb3JkTmV3VGFyZ2V0KHN1YnN0
aXR1dGlvbnMsIG9wZXJhbmQsIGF0U2Vjb25kVGFpbC0+Y2hpbGQxKCkuaW5kZXgoKSk7CiAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAg
ICAgIC8vIEl0J3MgcG9zc2libGUgdGhhdCB0aGUgc2Vjb25kIGJsb2NrIGhhZCBhIEdldExvY2Fs
IGFuZCB0aGUgZmlyc3QgYmxvY2sKICAgICAgICAgICAgIC8vIGhhZCBhIFNldEFyZ3VtZW50IG9y
IGEgUGhpLiBUaGVuIHVwZGF0ZSB0aGUgdGFpbC4gT3RoZXJ3aXNlIGtlZXAgd2hhdCB3YXMgaW4g
dGhlCiAgICAgICAgICAgICAvLyBmaXJzdCBibG9jay4KLSAgICAgICAgICAgIE5vZGVJbmRleCBh
dEZpcnN0VGFpbCA9IGZpcnN0QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKG9wZXJhbmQp
OwotICAgICAgICAgICAgQVNTRVJUKGF0Rmlyc3RUYWlsICE9IE5vTm9kZSk7Ci0gICAgICAgICAg
ICBzd2l0Y2ggKG1fZ3JhcGhbYXRGaXJzdFRhaWxdLm9wKCkpIHsKKyAgICAgICAgICAgIE5vZGUq
IGF0Rmlyc3RUYWlsID0gZmlyc3RCbG9jay0+dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQob3BlcmFu
ZCk7CisgICAgICAgICAgICBBU1NFUlQoYXRGaXJzdFRhaWwpOworICAgICAgICAgICAgc3dpdGNo
IChhdEZpcnN0VGFpbC0+b3AoKSkgewogICAgICAgICAgICAgY2FzZSBTZXRBcmd1bWVudDoKICAg
ICAgICAgICAgIGNhc2UgUGhpOgogICAgICAgICAgICAgICAgIGZpcnN0QmxvY2stPnZhcmlhYmxl
c0F0VGFpbC5vcGVyYW5kKG9wZXJhbmQpID0gYXRTZWNvbmRUYWlsOwotICAgICAgICAgICAgICAg
IHJlY29yZE5ld1RhcmdldChzdWJzdGl0dXRpb25zLCBvcGVyYW5kLCBzZWNvbmROb2RlLmNoaWxk
MSgpLmluZGV4KCkpOworICAgICAgICAgICAgICAgIHJlY29yZE5ld1RhcmdldChzdWJzdGl0dXRp
b25zLCBvcGVyYW5kLCBhdFNlY29uZFRhaWwtPmNoaWxkMSgpLmluZGV4KCkpOwogICAgICAgICAg
ICAgICAgIGJyZWFrOwogCiAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgIC8v
IEtlZXAgd2hhdCB3YXMgaW4gdGhlIGZpcnN0IGJsb2NrLCBhbmQgYWRqdXN0IHRoZSBzdWJzdGl0
dXRpb24gdG8gYWNjb3VudCBmb3IKICAgICAgICAgICAgICAgICAvLyB0aGUgZmFjdCB0aGF0IHN1
Y2Nlc3NvcnMgd2lsbCByZWZlciB0byB0aGUgY2hpbGQgb2YgdGhlIEdldExvY2FsLgotICAgICAg
ICAgICAgICAgIEFTU0VSVChmaXJzdEJsb2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZChvcGVy
YW5kKSAhPSBOb05vZGUpOworICAgICAgICAgICAgICAgIEFTU0VSVChmaXJzdEJsb2NrLT52YXJp
YWJsZXNBdFRhaWwub3BlcmFuZChvcGVyYW5kKSk7CiAgICAgICAgICAgICAgICAgcmVjb3JkTmV3
VGFyZ2V0KHN1YnN0aXR1dGlvbnMsIG9wZXJhbmQsIHNraXBHZXRMb2NhbChmaXJzdEJsb2NrLT52
YXJpYWJsZXNBdFRhaWwub3BlcmFuZChvcGVyYW5kKSkpOwogICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgfQpAQCAtNTY3LDEwICs1NTcsMTAgQEAgcHJpdmF0ZToKICAgICAgICAg
CiAgICAgICAgIC8vIFJlbW92ZSB0aGUgdGVybWluYWwgb2YgZmlyc3RCbG9jayBzaW5jZSB3ZSBk
b24ndCBuZWVkIGl0IGFueW1vcmUuIFdlbGwsIHdlIGRvbid0CiAgICAgICAgIC8vIHJlYWxseSBy
ZW1vdmUgaXQ7IHdlIGFjdHVhbGx5IHR1cm4gaXQgaW50byBhIFBoYW50b20uCi0gICAgICAgIEFT
U0VSVChtX2dyYXBoW2ZpcnN0QmxvY2stPmxhc3QoKV0uaXNUZXJtaW5hbCgpKTsKLSAgICAgICAg
Q29kZU9yaWdpbiBib3VuZGFyeUNvZGVPcmlnaW4gPSBtX2dyYXBoW2ZpcnN0QmxvY2stPmxhc3Qo
KV0uY29kZU9yaWdpbjsKLSAgICAgICAgbV9ncmFwaFtmaXJzdEJsb2NrLT5sYXN0KCldLnNldE9w
QW5kRGVmYXVsdEZsYWdzKFBoYW50b20pOwotICAgICAgICBBU1NFUlQobV9ncmFwaFtmaXJzdEJs
b2NrLT5sYXN0KCldLnJlZkNvdW50KCkgPT0gMSk7CisgICAgICAgIEFTU0VSVChmaXJzdEJsb2Nr
LT5sYXN0KCktPmlzVGVybWluYWwoKSk7CisgICAgICAgIENvZGVPcmlnaW4gYm91bmRhcnlDb2Rl
T3JpZ2luID0gZmlyc3RCbG9jay0+bGFzdCgpLT5jb2RlT3JpZ2luOworICAgICAgICBmaXJzdEJs
b2NrLT5sYXN0KCktPnNldE9wQW5kRGVmYXVsdEZsYWdzKFBoYW50b20pOworICAgICAgICBBU1NF
UlQoZmlyc3RCbG9jay0+bGFzdCgpLT5yZWZDb3VudCgpID09IDEpOwogICAgICAgICAKICAgICAg
ICAgaWYgKGpldHRpc29uZWRCbG9ja0luZGV4ICE9IE5vQmxvY2spIHsKICAgICAgICAgICAgIEJh
c2ljQmxvY2sqIGpldHRpc29uZWRCbG9jayA9IG1fZ3JhcGgubV9ibG9ja3NbamV0dGlzb25lZEJs
b2NrSW5kZXhdLmdldCgpOwpAQCAtNTk5LDI4ICs1ODksMjUgQEAgcHJpdmF0ZToKICAgICAgICAg
ICAgIHJlY29yZFBvc3NpYmxlSW5jb21pbmdSZWZlcmVuY2Uoc2Vjb25kQmxvY2ssIHN1YnN0aXR1
dGlvbnMsIGkpOwogCiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2Vjb25kQmxvY2st
PnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4ID0gc2Vjb25k
QmxvY2stPmF0KGkpOwotICAgICAgICAgICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhbbm9kZUluZGV4
XTsKKyAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBzZWNvbmRCbG9jay0+YXQoaSk7CiAgICAgICAg
ICAgICAKICAgICAgICAgICAgIGJvb2wgY2hpbGRyZW5BbHJlYWR5Rml4ZWQgPSBmYWxzZTsKICAg
ICAgICAgICAgIAotICAgICAgICAgICAgc3dpdGNoIChub2RlLm9wKCkpIHsKKyAgICAgICAgICAg
IHN3aXRjaCAobm9kZS0+b3AoKSkgewogICAgICAgICAgICAgY2FzZSBQaGFudG9tOiB7Ci0gICAg
ICAgICAgICAgICAgaWYgKCFub2RlLmNoaWxkMSgpKQorICAgICAgICAgICAgICAgIGlmICghbm9k
ZS0+Y2hpbGQxKCkpCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAg
IAotICAgICAgICAgICAgICAgIEFTU0VSVChub2RlLnNob3VsZEdlbmVyYXRlKCkpOwotICAgICAg
ICAgICAgICAgIE5vZGUmIHBvc3NpYmxlTG9jYWxPcCA9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV07
Ci0gICAgICAgICAgICAgICAgaWYgKHBvc3NpYmxlTG9jYWxPcC5vcCgpICE9IEdldExvY2FsCi0g
ICAgICAgICAgICAgICAgICAgICYmIHBvc3NpYmxlTG9jYWxPcC5oYXNMb2NhbCgpCi0gICAgICAg
ICAgICAgICAgICAgICYmICFwb3NzaWJsZUxvY2FsT3AudmFyaWFibGVBY2Nlc3NEYXRhKCktPmlz
Q2FwdHVyZWQoKSkgewotICAgICAgICAgICAgICAgICAgICBOb2RlSW5kZXggc2V0TG9jYWxJbmRl
eCA9Ci0gICAgICAgICAgICAgICAgICAgICAgICBmaXJzdEJsb2NrLT52YXJpYWJsZXNBdFRhaWwu
b3BlcmFuZChwb3NzaWJsZUxvY2FsT3AubG9jYWwoKSk7Ci0gICAgICAgICAgICAgICAgICAgIE5v
ZGUmIHNldExvY2FsID0gbV9ncmFwaFtzZXRMb2NhbEluZGV4XTsKLSAgICAgICAgICAgICAgICAg
ICAgaWYgKHNldExvY2FsLm9wKCkgPT0gU2V0TG9jYWwpIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIG1fZ3JhcGguY2hhbmdlRWRnZShub2RlLmNoaWxkcmVuLmNoaWxkMSgpLCBzZXRMb2NhbC5j
aGlsZDEoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQoIW5vZGUuY2hpbGQyKCkp
OwotICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKCFub2RlLmNoaWxkMygpKTsKKyAgICAg
ICAgICAgICAgICBBU1NFUlQobm9kZS0+c2hvdWxkR2VuZXJhdGUoKSk7CisgICAgICAgICAgICAg
ICAgTm9kZSogcG9zc2libGVMb2NhbE9wID0gbm9kZS0+Y2hpbGQxKCkubm9kZSgpOworICAgICAg
ICAgICAgICAgIGlmIChwb3NzaWJsZUxvY2FsT3AtPm9wKCkgIT0gR2V0TG9jYWwKKyAgICAgICAg
ICAgICAgICAgICAgJiYgcG9zc2libGVMb2NhbE9wLT5oYXNMb2NhbCgpCisgICAgICAgICAgICAg
ICAgICAgICYmICFwb3NzaWJsZUxvY2FsT3AtPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5pc0NhcHR1
cmVkKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgTm9kZSogc2V0TG9jYWwgPSBmaXJzdEJsb2Nr
LT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZChwb3NzaWJsZUxvY2FsT3AtPmxvY2FsKCkpOworICAg
ICAgICAgICAgICAgICAgICBpZiAoc2V0TG9jYWwtPm9wKCkgPT0gU2V0TG9jYWwpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguY2hhbmdlRWRnZShub2RlLT5jaGlsZHJlbi5jaGls
ZDEoKSwgc2V0TG9jYWwtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VS
VCghbm9kZS0+Y2hpbGQyKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKCFub2Rl
LT5jaGlsZDMoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbkFscmVhZHlGaXhl
ZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CkBAIC02
MzcsMTEgKzYyNCwxMSBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIC8vIFNpbWlsYXJseSBm
b3IgR2V0TG9jYWw7IGl0IGNvdWxkIHVzZSBhbnkgb2YgdGhvc2UgZXhjZXB0IGZvcgogICAgICAg
ICAgICAgICAgIC8vIEdldExvY2FsLiBJZiBpdCB1c2VzIGEgUGhpIHRoZW4gaXQgc2hvdWxkIGJl
IHJlZGlyZWN0ZWQgdG8gdXNlIGEKICAgICAgICAgICAgICAgICAvLyBQaGkgZnJvbSB0aGUgdGFp
bCBvcGVyYW5kLgotICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoW25vZGUuY2hpbGQxKCldLm9w
KCkgIT0gUGhpKQorICAgICAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS0+b3AoKSAhPSBQ
aGkpCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIAotICAgICAg
ICAgICAgICAgIE5vZGVJbmRleCBhdEZpcnN0SW5kZXggPSBmaXJzdEJsb2NrLT52YXJpYWJsZXNB
dFRhaWwub3BlcmFuZChub2RlLmxvY2FsKCkpOwotICAgICAgICAgICAgICAgIG1fZ3JhcGguY2hh
bmdlRWRnZShub2RlLmNoaWxkcmVuLmNoaWxkMSgpLCBFZGdlKHNraXBHZXRMb2NhbChhdEZpcnN0
SW5kZXgpKSwgbm9kZS5zaG91bGRHZW5lcmF0ZSgpKTsKKyAgICAgICAgICAgICAgICBOb2RlKiBh
dEZpcnN0ID0gZmlyc3RCbG9jay0+dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQobm9kZS0+bG9jYWwo
KSk7CisgICAgICAgICAgICAgICAgbV9ncmFwaC5jaGFuZ2VFZGdlKG5vZGUtPmNoaWxkcmVuLmNo
aWxkMSgpLCBFZGdlKHNraXBHZXRMb2NhbChhdEZpcnN0KSksIG5vZGUtPnNob3VsZEdlbmVyYXRl
KCkpOwogICAgICAgICAgICAgICAgIGNoaWxkcmVuQWxyZWFkeUZpeGVkID0gdHJ1ZTsKICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KQEAgLTY1MSwzMCArNjM4LDMwIEBAIHBy
aXZhdGU6CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlmICghY2hp
bGRyZW5BbHJlYWR5Rml4ZWQpIHsKLSAgICAgICAgICAgICAgICBib29sIGNoYW5nZVJlZiA9IG5v
ZGUuc2hvdWxkR2VuZXJhdGUoKTsKKyAgICAgICAgICAgICAgICBib29sIGNoYW5nZVJlZiA9IG5v
ZGUtPnNob3VsZEdlbmVyYXRlKCk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAvLyBJ
ZiB0aGUgY2hpbGQgaXMgYSBHZXRMb2NhbCwgdGhlbiB3ZSBtaWdodCBsaWtlIHRvIGZpeCBpdC4K
LSAgICAgICAgICAgICAgICBpZiAobm9kZS5mbGFncygpICYgTm9kZUhhc1ZhckFyZ3MpIHsKLSAg
ICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBjaGlsZElkeCA9IG5vZGUuZmlyc3RDaGls
ZCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkSWR4IDwgbm9kZS5maXJzdENoaWxk
KCkgKyBub2RlLm51bUNoaWxkcmVuKCk7CisgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmZsYWdz
KCkgJiBOb2RlSGFzVmFyQXJncykgeworICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IGNoaWxkSWR4ID0gbm9kZS0+Zmlyc3RDaGlsZCgpOworICAgICAgICAgICAgICAgICAgICAgICAg
IGNoaWxkSWR4IDwgbm9kZS0+Zmlyc3RDaGlsZCgpICsgbm9kZS0+bnVtQ2hpbGRyZW4oKTsKICAg
ICAgICAgICAgICAgICAgICAgICAgICArK2NoaWxkSWR4KSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoISFtX2dyYXBoLm1fdmFyQXJnQ2hpbGRyZW5bY2hpbGRJZHhdKQogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGZpeFBvc3NpYmxlR2V0TG9jYWwoZmlyc3RCbG9jaywgbV9ncmFw
aC5tX3ZhckFyZ0NoaWxkcmVuW2NoaWxkSWR4XSwgY2hhbmdlUmVmKTsKICAgICAgICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoISFub2RlLmNoaWxkMSgpKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIGZpeFBvc3NpYmxlR2V0TG9jYWwoZmlyc3RCbG9jaywgbm9kZS5j
aGlsZHJlbi5jaGlsZDEoKSwgY2hhbmdlUmVmKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCEh
bm9kZS5jaGlsZDIoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgZml4UG9zc2libGVHZXRM
b2NhbChmaXJzdEJsb2NrLCBub2RlLmNoaWxkcmVuLmNoaWxkMigpLCBjaGFuZ2VSZWYpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKCEhbm9kZS5jaGlsZDMoKSkKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBmaXhQb3NzaWJsZUdldExvY2FsKGZpcnN0QmxvY2ssIG5vZGUuY2hpbGRy
ZW4uY2hpbGQzKCksIGNoYW5nZVJlZik7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmICghIW5v
ZGUtPmNoaWxkMSgpKSB7CisgICAgICAgICAgICAgICAgICAgIGZpeFBvc3NpYmxlR2V0TG9jYWwo
Zmlyc3RCbG9jaywgbm9kZS0+Y2hpbGRyZW4uY2hpbGQxKCksIGNoYW5nZVJlZik7CisgICAgICAg
ICAgICAgICAgICAgIGlmICghIW5vZGUtPmNoaWxkMigpKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBmaXhQb3NzaWJsZUdldExvY2FsKGZpcnN0QmxvY2ssIG5vZGUtPmNoaWxkcmVuLmNoaWxk
MigpLCBjaGFuZ2VSZWYpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEhbm9kZS0+Y2hp
bGQzKCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZml4UG9zc2libGVHZXRMb2NhbChm
aXJzdEJsb2NrLCBub2RlLT5jaGlsZHJlbi5jaGlsZDMoKSwgY2hhbmdlUmVmKTsKICAgICAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KIAotICAgICAg
ICAgICAgZmlyc3RCbG9jay0+YXBwZW5kKG5vZGVJbmRleCk7CisgICAgICAgICAgICBmaXJzdEJs
b2NrLT5hcHBlbmQobm9kZSk7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIEFTU0VSVCht
X2dyYXBoW2ZpcnN0QmxvY2stPmxhc3QoKV0uaXNUZXJtaW5hbCgpKTsKKyAgICAgICAgQVNTRVJU
KGZpcnN0QmxvY2stPmxhc3QoKS0+aXNUZXJtaW5hbCgpKTsKICAgICAgICAgCiAgICAgICAgIC8v
IEZpeCB0aGUgcHJlZGVjZXNzb3JzIG9mIG15IG5ldyBzdWNjZXNzb3JzLiBUaGlzIGlzIHRyaWNr
eSwgc2luY2Ugd2UgYXJlIGdvaW5nIHRvIHJlc2V0CiAgICAgICAgIC8vIGFsbCBwcmVkZWNlc3Nv
cnMgYW55d2F5IGR1ZSB0byByZWFjaGFiaWxpdHkgYW5hbHlzaXMuIEJ1dCB3ZSBuZWVkIHRvIGZp
eCB0aGUKQEAgLTcwNCwyNiArNjkxLDI0IEBAIHByaXZhdGU6CiAgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IG1fZ3JhcGgubnVtU3VjY2Vzc29ycyhmaXJzdEJsb2NrKTsgaS0tOykgewogICAgICAg
ICAgICAgQmFzaWNCbG9jayogc3VjY2Vzc29yID0gbV9ncmFwaC5tX2Jsb2Nrc1ttX2dyYXBoLnN1
Y2Nlc3NvcihmaXJzdEJsb2NrLCBpKV0uZ2V0KCk7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IGogPSAwOyBqIDwgc3VjY2Vzc29yLT5waGlzLnNpemUoKTsgKytqKSB7Ci0gICAgICAgICAgICAg
ICAgTm9kZUluZGV4IHBoaU5vZGVJbmRleCA9IHN1Y2Nlc3Nvci0+cGhpc1tqXTsKLSAgICAgICAg
ICAgICAgICBOb2RlJiBwaGlOb2RlID0gbV9ncmFwaFtwaGlOb2RlSW5kZXhdOwotICAgICAgICAg
ICAgICAgIGJvb2wgY2hhbmdlUmVmID0gcGhpTm9kZS5zaG91bGRHZW5lcmF0ZSgpOwotICAgICAg
ICAgICAgICAgIE9wZXJhbmRTdWJzdGl0dXRpb24gc3Vic3RpdHV0aW9uID0gc3Vic3RpdHV0aW9u
cy5vcGVyYW5kKHBoaU5vZGUubG9jYWwoKSk7CisgICAgICAgICAgICAgICAgTm9kZSogcGhpTm9k
ZSA9IHN1Y2Nlc3Nvci0+cGhpc1tqXTsKKyAgICAgICAgICAgICAgICBib29sIGNoYW5nZVJlZiA9
IHBoaU5vZGUtPnNob3VsZEdlbmVyYXRlKCk7CisgICAgICAgICAgICAgICAgT3BlcmFuZFN1YnN0
aXR1dGlvbiBzdWJzdGl0dXRpb24gPSBzdWJzdGl0dXRpb25zLm9wZXJhbmQocGhpTm9kZS0+bG9j
YWwoKSk7CiAjaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQotICAgICAg
ICAgICAgICAgIGRhdGFMb2dGKCIgICAgUGVyZm9ybWluZyBvcGVyYW5kIHN1YnN0aXR1dGlvbiBA
JXUgLT4gQCV1LlxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgIHN1YnN0aXR1dGlvbi5vbGRD
aGlsZCwgc3Vic3RpdHV0aW9uLm5ld0NoaWxkKTsKKyAgICAgICAgICAgICAgICBkYXRhTG9nKCIg
ICAgUGVyZm9ybWluZyBvcGVyYW5kIHN1YnN0aXR1dGlvbiAiLCBzdWJzdGl0dXRpb24sICIuXG4i
KTsKICNlbmRpZgotICAgICAgICAgICAgICAgIGlmICghcGhpTm9kZS5jaGlsZDEoKSkKKyAgICAg
ICAgICAgICAgICBpZiAoIXBoaU5vZGUtPmNoaWxkMSgpKQogICAgICAgICAgICAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgICAgICAgICBpZiAocGhpTm9kZS5jaGlsZDEoKS5pbmRleCgpID09
IHN1YnN0aXR1dGlvbi5vbGRDaGlsZCkKLSAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5jaGFu
Z2VJbmRleChwaGlOb2RlLmNoaWxkcmVuLmNoaWxkMSgpLCBzdWJzdGl0dXRpb24ubmV3Q2hpbGQs
IGNoYW5nZVJlZik7Ci0gICAgICAgICAgICAgICAgaWYgKCFwaGlOb2RlLmNoaWxkMigpKQorICAg
ICAgICAgICAgICAgIGlmIChwaGlOb2RlLT5jaGlsZDEoKSA9PSBzdWJzdGl0dXRpb24ub2xkQ2hp
bGQpCisgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguY2hhbmdlSW5kZXgocGhpTm9kZS0+Y2hp
bGRyZW4uY2hpbGQxKCksIHN1YnN0aXR1dGlvbi5uZXdDaGlsZCwgY2hhbmdlUmVmKTsKKyAgICAg
ICAgICAgICAgICBpZiAoIXBoaU5vZGUtPmNoaWxkMigpKQogICAgICAgICAgICAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgICAgICAgICBpZiAocGhpTm9kZS5jaGlsZDIoKS5pbmRleCgpID09
IHN1YnN0aXR1dGlvbi5vbGRDaGlsZCkKLSAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5jaGFu
Z2VJbmRleChwaGlOb2RlLmNoaWxkcmVuLmNoaWxkMigpLCBzdWJzdGl0dXRpb24ubmV3Q2hpbGQs
IGNoYW5nZVJlZik7Ci0gICAgICAgICAgICAgICAgaWYgKCFwaGlOb2RlLmNoaWxkMygpKQorICAg
ICAgICAgICAgICAgIGlmIChwaGlOb2RlLT5jaGlsZDIoKSA9PSBzdWJzdGl0dXRpb24ub2xkQ2hp
bGQpCisgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguY2hhbmdlSW5kZXgocGhpTm9kZS0+Y2hp
bGRyZW4uY2hpbGQyKCksIHN1YnN0aXR1dGlvbi5uZXdDaGlsZCwgY2hhbmdlUmVmKTsKKyAgICAg
ICAgICAgICAgICBpZiAoIXBoaU5vZGUtPmNoaWxkMygpKQogICAgICAgICAgICAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgICAgICAgICBpZiAocGhpTm9kZS5jaGlsZDMoKS5pbmRleCgpID09
IHN1YnN0aXR1dGlvbi5vbGRDaGlsZCkKLSAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5jaGFu
Z2VJbmRleChwaGlOb2RlLmNoaWxkcmVuLmNoaWxkMygpLCBzdWJzdGl0dXRpb24ubmV3Q2hpbGQs
IGNoYW5nZVJlZik7CisgICAgICAgICAgICAgICAgaWYgKHBoaU5vZGUtPmNoaWxkMygpID09IHN1
YnN0aXR1dGlvbi5vbGRDaGlsZCkKKyAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5jaGFuZ2VJ
bmRleChwaGlOb2RlLT5jaGlsZHJlbi5jaGlsZDMoKSwgc3Vic3RpdHV0aW9uLm5ld0NoaWxkLCBj
aGFuZ2VSZWYpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDU0VQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDU0VQaGFzZS5jcHAJKHJldmlzaW9uIDE0MDkwNCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1NFUGhhc2UuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC01NCwyNCArNTQsMjQgQEAgcHVibGljOgogICAgIAogcHJpdmF0ZToKICAgICAKLSAg
ICBOb2RlSW5kZXggY2Fub25pY2FsaXplKE5vZGVJbmRleCBub2RlSW5kZXgpCisgICAgTm9kZSog
Y2Fub25pY2FsaXplKE5vZGUqIG5vZGUpCiAgICAgewotICAgICAgICBpZiAobm9kZUluZGV4ID09
IE5vTm9kZSkKLSAgICAgICAgICAgIHJldHVybiBOb05vZGU7CisgICAgICAgIGlmICghbm9kZSkK
KyAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAKLSAgICAgICAgaWYgKG1fZ3JhcGhbbm9k
ZUluZGV4XS5vcCgpID09IFZhbHVlVG9JbnQzMikKLSAgICAgICAgICAgIG5vZGVJbmRleCA9IG1f
Z3JhcGhbbm9kZUluZGV4XS5jaGlsZDEoKS5pbmRleCgpOworICAgICAgICBpZiAobm9kZS0+b3Ao
KSA9PSBWYWx1ZVRvSW50MzIpCisgICAgICAgICAgICBub2RlID0gbm9kZS0+Y2hpbGQxKCkubm9k
ZSgpOwogICAgICAgICAKLSAgICAgICAgcmV0dXJuIG5vZGVJbmRleDsKKyAgICAgICAgcmV0dXJu
IG5vZGU7CiAgICAgfQotICAgIE5vZGVJbmRleCBjYW5vbmljYWxpemUoRWRnZSBub2RlVXNlKQor
ICAgIE5vZGUqIGNhbm9uaWNhbGl6ZShFZGdlIGVkZ2UpCiAgICAgewotICAgICAgICByZXR1cm4g
Y2Fub25pY2FsaXplKG5vZGVVc2UuaW5kZXhVbmNoZWNrZWQoKSk7CisgICAgICAgIHJldHVybiBj
YW5vbmljYWxpemUoZWRnZS5ub2RlKCkpOwogICAgIH0KICAgICAKICAgICB1bnNpZ25lZCBlbmRJ
bmRleEZvclB1cmVDU0UoKQogICAgIHsKLSAgICAgICAgdW5zaWduZWQgcmVzdWx0ID0gbV9sYXN0
U2VlblttX2dyYXBoW21fY29tcGlsZUluZGV4XS5vcCgpXTsKKyAgICAgICAgdW5zaWduZWQgcmVz
dWx0ID0gbV9sYXN0U2VlblttX2N1cnJlbnROb2RlLT5vcCgpXTsKICAgICAgICAgaWYgKHJlc3Vs
dCA9PSBVSU5UX01BWCkKICAgICAgICAgICAgIHJlc3VsdCA9IDA7CiAgICAgICAgIGVsc2UKQEAg
LTgzLDI2MSArODMsMjU3IEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAg
fQogCi0gICAgTm9kZUluZGV4IHB1cmVDU0UoTm9kZSYgbm9kZSkKKyAgICBOb2RlKiBwdXJlQ1NF
KE5vZGUqIG5vZGUpCiAgICAgewotICAgICAgICBOb2RlSW5kZXggY2hpbGQxID0gY2Fub25pY2Fs
aXplKG5vZGUuY2hpbGQxKCkpOwotICAgICAgICBOb2RlSW5kZXggY2hpbGQyID0gY2Fub25pY2Fs
aXplKG5vZGUuY2hpbGQyKCkpOwotICAgICAgICBOb2RlSW5kZXggY2hpbGQzID0gY2Fub25pY2Fs
aXplKG5vZGUuY2hpbGQzKCkpOworICAgICAgICBOb2RlKiBjaGlsZDEgPSBjYW5vbmljYWxpemUo
bm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBOb2RlKiBjaGlsZDIgPSBjYW5vbmljYWxpemUobm9k
ZS0+Y2hpbGQyKCkpOworICAgICAgICBOb2RlKiBjaGlsZDMgPSBjYW5vbmljYWxpemUobm9kZS0+
Y2hpbGQzKCkpOwogICAgICAgICAKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gZW5kSW5kZXhG
b3JQdXJlQ1NFKCk7IGktLTspIHsKLSAgICAgICAgICAgIE5vZGVJbmRleCBpbmRleCA9IG1fY3Vy
cmVudEJsb2NrLT5hdChpKTsKLSAgICAgICAgICAgIGlmIChpbmRleCA9PSBjaGlsZDEgfHwgaW5k
ZXggPT0gY2hpbGQyIHx8IGluZGV4ID09IGNoaWxkMykKKyAgICAgICAgICAgIE5vZGUqIG90aGVy
Tm9kZSA9IG1fY3VycmVudEJsb2NrLT5hdChpKTsKKyAgICAgICAgICAgIGlmIChvdGhlck5vZGUg
PT0gY2hpbGQxIHx8IG90aGVyTm9kZSA9PSBjaGlsZDIgfHwgb3RoZXJOb2RlID09IGNoaWxkMykK
ICAgICAgICAgICAgICAgICBicmVhazsKIAotICAgICAgICAgICAgTm9kZSYgb3RoZXJOb2RlID0g
bV9ncmFwaFtpbmRleF07Ci0gICAgICAgICAgICBpZiAoIW90aGVyTm9kZS5zaG91bGRHZW5lcmF0
ZSgpKQorICAgICAgICAgICAgaWYgKCFvdGhlck5vZGUtPnNob3VsZEdlbmVyYXRlKCkpCiAgICAg
ICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChub2Rl
Lm9wKCkgIT0gb3RoZXJOb2RlLm9wKCkpCisgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSAhPSBv
dGhlck5vZGUtPm9wKCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAK
LSAgICAgICAgICAgIGlmIChub2RlLmFyaXRoTm9kZUZsYWdzKCkgIT0gb3RoZXJOb2RlLmFyaXRo
Tm9kZUZsYWdzKCkpCisgICAgICAgICAgICBpZiAobm9kZS0+YXJpdGhOb2RlRmxhZ3MoKSAhPSBv
dGhlck5vZGUtPmFyaXRoTm9kZUZsYWdzKCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAg
ICAgICAgICAgICAKLSAgICAgICAgICAgIE5vZGVJbmRleCBvdGhlckNoaWxkID0gY2Fub25pY2Fs
aXplKG90aGVyTm9kZS5jaGlsZDEoKSk7Ci0gICAgICAgICAgICBpZiAob3RoZXJDaGlsZCA9PSBO
b05vZGUpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGluZGV4OworICAgICAgICAgICAgTm9kZSog
b3RoZXJDaGlsZCA9IGNhbm9uaWNhbGl6ZShvdGhlck5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAg
ICAgIGlmICghb3RoZXJDaGlsZCkKKyAgICAgICAgICAgICAgICByZXR1cm4gb3RoZXJOb2RlOwog
ICAgICAgICAgICAgaWYgKG90aGVyQ2hpbGQgIT0gY2hpbGQxKQogICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBvdGhlckNoaWxkID0gY2Fub25pY2Fs
aXplKG90aGVyTm9kZS5jaGlsZDIoKSk7Ci0gICAgICAgICAgICBpZiAob3RoZXJDaGlsZCA9PSBO
b05vZGUpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGluZGV4OworICAgICAgICAgICAgb3RoZXJD
aGlsZCA9IGNhbm9uaWNhbGl6ZShvdGhlck5vZGUtPmNoaWxkMigpKTsKKyAgICAgICAgICAgIGlm
ICghb3RoZXJDaGlsZCkKKyAgICAgICAgICAgICAgICByZXR1cm4gb3RoZXJOb2RlOwogICAgICAg
ICAgICAgaWYgKG90aGVyQ2hpbGQgIT0gY2hpbGQyKQogICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwogICAgICAgICAgICAgCi0gICAgICAgICAgICBvdGhlckNoaWxkID0gY2Fub25pY2FsaXplKG90
aGVyTm9kZS5jaGlsZDMoKSk7Ci0gICAgICAgICAgICBpZiAob3RoZXJDaGlsZCA9PSBOb05vZGUp
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGluZGV4OworICAgICAgICAgICAgb3RoZXJDaGlsZCA9
IGNhbm9uaWNhbGl6ZShvdGhlck5vZGUtPmNoaWxkMygpKTsKKyAgICAgICAgICAgIGlmICghb3Ro
ZXJDaGlsZCkKKyAgICAgICAgICAgICAgICByZXR1cm4gb3RoZXJOb2RlOwogICAgICAgICAgICAg
aWYgKG90aGVyQ2hpbGQgIT0gY2hpbGQzKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAg
ICAgICAgICAgCi0gICAgICAgICAgICByZXR1cm4gaW5kZXg7CisgICAgICAgICAgICByZXR1cm4g
b3RoZXJOb2RlOwogICAgICAgICB9Ci0gICAgICAgIHJldHVybiBOb05vZGU7CisgICAgICAgIHJl
dHVybiAwOwogICAgIH0KICAgICAKLSAgICBOb2RlSW5kZXggY29uc3RhbnRDU0UoTm9kZSYgbm9k
ZSkKKyAgICBOb2RlKiBjb25zdGFudENTRShOb2RlKiBub2RlKQogICAgIHsKICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gZW5kSW5kZXhGb3JQdXJlQ1NFKCk7IGktLTspIHsKLSAgICAgICAgICAg
IE5vZGVJbmRleCBpbmRleCA9IG1fY3VycmVudEJsb2NrLT5hdChpKTsKLSAgICAgICAgICAgIE5v
ZGUmIG90aGVyTm9kZSA9IG1fZ3JhcGhbaW5kZXhdOwotICAgICAgICAgICAgaWYgKG90aGVyTm9k
ZS5vcCgpICE9IEpTQ29uc3RhbnQpCisgICAgICAgICAgICBOb2RlKiBvdGhlck5vZGUgPSBtX2N1
cnJlbnRCbG9jay0+YXQoaSk7CisgICAgICAgICAgICBpZiAob3RoZXJOb2RlLT5vcCgpICE9IEpT
Q29uc3RhbnQpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAKLSAgICAg
ICAgICAgIGlmIChvdGhlck5vZGUuY29uc3RhbnROdW1iZXIoKSAhPSBub2RlLmNvbnN0YW50TnVt
YmVyKCkpCisgICAgICAgICAgICBpZiAoIW90aGVyTm9kZS0+c2hvdWxkR2VuZXJhdGUoKSkKICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgcmV0dXJu
IGluZGV4OworICAgICAgICAgICAgaWYgKG90aGVyTm9kZS0+Y29uc3RhbnROdW1iZXIoKSAhPSBu
b2RlLT5jb25zdGFudE51bWJlcigpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICAgICAgCisgICAgICAgICAgICByZXR1cm4gb3RoZXJOb2RlOwogICAgICAgICB9Ci0gICAgICAg
IHJldHVybiBOb05vZGU7CisgICAgICAgIHJldHVybiAwOwogICAgIH0KICAgICAKLSAgICBOb2Rl
SW5kZXggd2Vha0NvbnN0YW50Q1NFKE5vZGUmIG5vZGUpCisgICAgTm9kZSogd2Vha0NvbnN0YW50
Q1NFKE5vZGUqIG5vZGUpCiAgICAgewogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBlbmRJbmRl
eEZvclB1cmVDU0UoKTsgaS0tOykgewotICAgICAgICAgICAgTm9kZUluZGV4IGluZGV4ID0gbV9j
dXJyZW50QmxvY2stPmF0KGkpOwotICAgICAgICAgICAgTm9kZSYgb3RoZXJOb2RlID0gbV9ncmFw
aFtpbmRleF07Ci0gICAgICAgICAgICBpZiAob3RoZXJOb2RlLm9wKCkgIT0gV2Vha0pTQ29uc3Rh
bnQpCisgICAgICAgICAgICBOb2RlKiBvdGhlck5vZGUgPSBtX2N1cnJlbnRCbG9jay0+YXQoaSk7
CisgICAgICAgICAgICBpZiAob3RoZXJOb2RlLT5vcCgpICE9IFdlYWtKU0NvbnN0YW50KQorICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoIW90
aGVyTm9kZS0+c2hvdWxkR2VuZXJhdGUoKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAg
ICAgICAgICAgIAotICAgICAgICAgICAgaWYgKG90aGVyTm9kZS53ZWFrQ29uc3RhbnQoKSAhPSBu
b2RlLndlYWtDb25zdGFudCgpKQorICAgICAgICAgICAgaWYgKG90aGVyTm9kZS0+d2Vha0NvbnN0
YW50KCkgIT0gbm9kZS0+d2Vha0NvbnN0YW50KCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7
CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIHJldHVybiBpbmRleDsKKyAgICAgICAgICAgIHJl
dHVybiBvdGhlck5vZGU7CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIE5vTm9kZTsKKyAgICAg
ICAgcmV0dXJuIDA7CiAgICAgfQogICAgIAotICAgIE5vZGVJbmRleCBnZXRDYWxsZWVMb2FkRWxp
bWluYXRpb24oSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUpCisgICAgTm9kZSogZ2V0
Q2FsbGVlTG9hZEVsaW1pbmF0aW9uKElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lKQog
ICAgIHsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9pbmRleEluQmxvY2s7IGktLTspIHsK
LSAgICAgICAgICAgIE5vZGVJbmRleCBpbmRleCA9IG1fY3VycmVudEJsb2NrLT5hdChpKTsKLSAg
ICAgICAgICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW2luZGV4XTsKLSAgICAgICAgICAgIGlmICgh
bm9kZS5zaG91bGRHZW5lcmF0ZSgpKQorICAgICAgICAgICAgTm9kZSogbm9kZSA9IG1fY3VycmVu
dEJsb2NrLT5hdChpKTsKKyAgICAgICAgICAgIGlmICghbm9kZS0+c2hvdWxkR2VuZXJhdGUoKSkK
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGlmIChub2RlLmNvZGVPcmln
aW4uaW5saW5lQ2FsbEZyYW1lICE9IGlubGluZUNhbGxGcmFtZSkKKyAgICAgICAgICAgIGlmIChu
b2RlLT5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSAhPSBpbmxpbmVDYWxsRnJhbWUpCiAgICAg
ICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBzd2l0Y2ggKG5vZGUub3AoKSkgewor
ICAgICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CiAgICAgICAgICAgICBjYXNlIEdldENh
bGxlZToKLSAgICAgICAgICAgICAgICByZXR1cm4gaW5kZXg7CisgICAgICAgICAgICAgICAgcmV0
dXJuIG5vZGU7CiAgICAgICAgICAgICBjYXNlIFNldENhbGxlZToKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gbm9kZS5jaGlsZDEoKS5pbmRleCgpOworICAgICAgICAgICAgICAgIHJldHVybiBub2Rl
LT5jaGlsZDEoKS5ub2RlKCk7CiAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIHJldHVybiBOb05vZGU7
CisgICAgICAgIHJldHVybiAwOwogICAgIH0KICAgICAKLSAgICBOb2RlSW5kZXggZ2V0QXJyYXlM
ZW5ndGhFbGltaW5hdGlvbihOb2RlSW5kZXggYXJyYXkpCisgICAgTm9kZSogZ2V0QXJyYXlMZW5n
dGhFbGltaW5hdGlvbihOb2RlKiBhcnJheSkKICAgICB7CiAgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IG1faW5kZXhJbkJsb2NrOyBpLS07KSB7Ci0gICAgICAgICAgICBOb2RlSW5kZXggaW5kZXgg
PSBtX2N1cnJlbnRCbG9jay0+YXQoaSk7Ci0gICAgICAgICAgICBOb2RlJiBub2RlID0gbV9ncmFw
aFtpbmRleF07Ci0gICAgICAgICAgICBpZiAoIW5vZGUuc2hvdWxkR2VuZXJhdGUoKSkKKyAgICAg
ICAgICAgIE5vZGUqIG5vZGUgPSBtX2N1cnJlbnRCbG9jay0+YXQoaSk7CisgICAgICAgICAgICBp
ZiAoIW5vZGUtPnNob3VsZEdlbmVyYXRlKCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7Ci0g
ICAgICAgICAgICBzd2l0Y2ggKG5vZGUub3AoKSkgeworICAgICAgICAgICAgc3dpdGNoIChub2Rl
LT5vcCgpKSB7CiAgICAgICAgICAgICBjYXNlIEdldEFycmF5TGVuZ3RoOgotICAgICAgICAgICAg
ICAgIGlmIChub2RlLmNoaWxkMSgpID09IGFycmF5KQotICAgICAgICAgICAgICAgICAgICByZXR1
cm4gaW5kZXg7CisgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpID09IGFycmF5KQor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gbm9kZTsKICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGNhc2UgUHV0QnlWYWw6CiAgICAgICAgICAg
ICAgICAgaWYgKCFtX2dyYXBoLmJ5VmFsSXNQdXJlKG5vZGUpKQotICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gTm9Ob2RlOwotICAgICAgICAgICAgICAgIGlmIChub2RlLmFycmF5TW9kZSgpLm1h
eVN0b3JlVG9Ib2xlKCkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBOb05vZGU7CisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgICAgIGlmIChub2RlLT5hcnJh
eU1vZGUoKS5tYXlTdG9yZVRvSG9sZSgpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsK
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGRl
ZmF1bHQ6Ci0gICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGguY2xvYmJlcnNXb3JsZChpbmRleCkp
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBOb05vZGU7CisgICAgICAgICAgICAgICAgaWYg
KG1fZ3JhcGguY2xvYmJlcnNXb3JsZChub2RlKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IDA7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIE5vTm9kZTsKKyAg
ICAgICAgcmV0dXJuIDA7CiAgICAgfQogICAgIAotICAgIE5vZGVJbmRleCBnbG9iYWxWYXJMb2Fk
RWxpbWluYXRpb24oV3JpdGVCYXJyaWVyPFVua25vd24+KiByZWdpc3RlclBvaW50ZXIpCisgICAg
Tm9kZSogZ2xvYmFsVmFyTG9hZEVsaW1pbmF0aW9uKFdyaXRlQmFycmllcjxVbmtub3duPiogcmVn
aXN0ZXJQb2ludGVyKQogICAgIHsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9pbmRleElu
QmxvY2s7IGktLTspIHsKLSAgICAgICAgICAgIE5vZGVJbmRleCBpbmRleCA9IG1fY3VycmVudEJs
b2NrLT5hdChpKTsKLSAgICAgICAgICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW2luZGV4XTsKLSAg
ICAgICAgICAgIGlmICghbm9kZS5zaG91bGRHZW5lcmF0ZSgpKQorICAgICAgICAgICAgTm9kZSog
bm9kZSA9IG1fY3VycmVudEJsb2NrLT5hdChpKTsKKyAgICAgICAgICAgIGlmICghbm9kZS0+c2hv
dWxkR2VuZXJhdGUoKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIHN3
aXRjaCAobm9kZS5vcCgpKSB7CisgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKICAg
ICAgICAgICAgIGNhc2UgR2V0R2xvYmFsVmFyOgotICAgICAgICAgICAgICAgIGlmIChub2RlLnJl
Z2lzdGVyUG9pbnRlcigpID09IHJlZ2lzdGVyUG9pbnRlcikKLSAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGluZGV4OworICAgICAgICAgICAgICAgIGlmIChub2RlLT5yZWdpc3RlclBvaW50ZXIo
KSA9PSByZWdpc3RlclBvaW50ZXIpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBub2RlOwog
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBQdXRHbG9iYWxWYXI6Ci0g
ICAgICAgICAgICAgICAgaWYgKG5vZGUucmVnaXN0ZXJQb2ludGVyKCkgPT0gcmVnaXN0ZXJQb2lu
dGVyKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gbm9kZS5jaGlsZDEoKS5pbmRleCgpOwor
ICAgICAgICAgICAgICAgIGlmIChub2RlLT5yZWdpc3RlclBvaW50ZXIoKSA9PSByZWdpc3RlclBv
aW50ZXIpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBub2RlLT5jaGlsZDEoKS5ub2RlKCk7
CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKG1fZ3JhcGguY2xv
YmJlcnNXb3JsZChpbmRleCkpCisgICAgICAgICAgICBpZiAobV9ncmFwaC5jbG9iYmVyc1dvcmxk
KG5vZGUpKQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIHJldHVy
biBOb05vZGU7CisgICAgICAgIHJldHVybiAwOwogICAgIH0KICAgICAKLSAgICBOb2RlSW5kZXgg
c2NvcGVkVmFyTG9hZEVsaW1pbmF0aW9uKE5vZGVJbmRleCByZWdpc3RlcnMsIHVuc2lnbmVkIHZh
ck51bWJlcikKKyAgICBOb2RlKiBzY29wZWRWYXJMb2FkRWxpbWluYXRpb24oTm9kZSogcmVnaXN0
ZXJzLCB1bnNpZ25lZCB2YXJOdW1iZXIpCiAgICAgewogICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSBtX2luZGV4SW5CbG9jazsgaS0tOykgewotICAgICAgICAgICAgTm9kZUluZGV4IGluZGV4ID0g
bV9jdXJyZW50QmxvY2stPmF0KGkpOwotICAgICAgICAgICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhb
aW5kZXhdOwotICAgICAgICAgICAgaWYgKCFub2RlLnNob3VsZEdlbmVyYXRlKCkpCisgICAgICAg
ICAgICBOb2RlKiA9IG1fY3VycmVudEJsb2NrLT5hdChpKTsKKyAgICAgICAgICAgIGlmICghbm9k
ZS0+c2hvdWxkR2VuZXJhdGUoKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAg
ICAgIHN3aXRjaCAobm9kZS5vcCgpKSB7CisgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkp
IHsKICAgICAgICAgICAgIGNhc2UgR2V0U2NvcGVkVmFyOiB7Ci0gICAgICAgICAgICAgICAgaWYg
KG5vZGUuY2hpbGQxKCkgPT0gcmVnaXN0ZXJzICYmIG5vZGUudmFyTnVtYmVyKCkgPT0gdmFyTnVt
YmVyKQorICAgICAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKSA9PSByZWdpc3RlcnMgJiYg
bm9kZS52YXJOdW1iZXIoKSA9PSB2YXJOdW1iZXIpCiAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBpbmRleDsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0gCiAgICAgICAg
ICAgICBjYXNlIFB1dFNjb3BlZFZhcjogewotICAgICAgICAgICAgICAgIGlmIChub2RlLmNoaWxk
MigpID09IHJlZ2lzdGVycyAmJiBub2RlLnZhck51bWJlcigpID09IHZhck51bWJlcikKLSAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIG5vZGUuY2hpbGQzKCkuaW5kZXgoKTsKKyAgICAgICAgICAg
ICAgICBpZiAobm9kZS0+Y2hpbGQyKCkgPT0gcmVnaXN0ZXJzICYmIG5vZGUudmFyTnVtYmVyKCkg
PT0gdmFyTnVtYmVyKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gbm9kZS0+Y2hpbGQzKCku
bm9kZSgpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAg
ICAgY2FzZSBTZXRMb2NhbDogewotICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSog
dmFyaWFibGVBY2Nlc3NEYXRhID0gbm9kZS52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKKyAgICAgICAg
ICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9IG5vZGUtPnZh
cmlhYmxlQWNjZXNzRGF0YSgpOwogICAgICAgICAgICAgICAgIGlmICh2YXJpYWJsZUFjY2Vzc0Rh
dGEtPmlzQ2FwdHVyZWQoKQogICAgICAgICAgICAgICAgICAgICAmJiB2YXJpYWJsZUFjY2Vzc0Rh
dGEtPmxvY2FsKCkgPT0gc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPih2YXJOdW1iZXIpKQot
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gTm9Ob2RlOworICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gMDsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBpZiAobV9ncmFwaC5jbG9iYmVyc1dvcmxkKGluZGV4KSkKKyAgICAgICAgICAgIGlm
IChtX2dyYXBoLmNsb2JiZXJzV29ybGQobm9kZSkpCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIH0KLSAgICAgICAgcmV0dXJuIE5vTm9kZTsKKyAgICAgICAgcmV0dXJuIDA7CiAgICAg
fQogICAgIAogICAgIGJvb2wgZ2xvYmFsVmFyV2F0Y2hwb2ludEVsaW1pbmF0aW9uKFdyaXRlQmFy
cmllcjxVbmtub3duPiogcmVnaXN0ZXJQb2ludGVyKQogICAgIHsKICAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gbV9pbmRleEluQmxvY2s7IGktLTspIHsKLSAgICAgICAgICAgIE5vZGVJbmRleCBp
bmRleCA9IG1fY3VycmVudEJsb2NrLT5hdChpKTsKLSAgICAgICAgICAgIE5vZGUmIG5vZGUgPSBt
X2dyYXBoW2luZGV4XTsKLSAgICAgICAgICAgIGlmICghbm9kZS5zaG91bGRHZW5lcmF0ZSgpKQor
ICAgICAgICAgICAgTm9kZSogbm9kZSA9IG1fY3VycmVudEJsb2NrLT5hdChpKTsKKyAgICAgICAg
ICAgIGlmICghbm9kZS0+c2hvdWxkR2VuZXJhdGUoKSkKICAgICAgICAgICAgICAgICBjb250aW51
ZTsKLSAgICAgICAgICAgIHN3aXRjaCAobm9kZS5vcCgpKSB7CisgICAgICAgICAgICBzd2l0Y2gg
KG5vZGUtPm9wKCkpIHsKICAgICAgICAgICAgIGNhc2UgR2xvYmFsVmFyV2F0Y2hwb2ludDoKLSAg
ICAgICAgICAgICAgICBpZiAobm9kZS5yZWdpc3RlclBvaW50ZXIoKSA9PSByZWdpc3RlclBvaW50
ZXIpCisgICAgICAgICAgICAgICAgaWYgKG5vZGUtPnJlZ2lzdGVyUG9pbnRlcigpID09IHJlZ2lz
dGVyUG9pbnRlcikKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIFB1dEdsb2JhbFZhcjoKLSAgICAgICAgICAg
ICAgICBpZiAobm9kZS5yZWdpc3RlclBvaW50ZXIoKSA9PSByZWdpc3RlclBvaW50ZXIpCisgICAg
ICAgICAgICAgICAgaWYgKG5vZGUtPnJlZ2lzdGVyUG9pbnRlcigpID09IHJlZ2lzdGVyUG9pbnRl
cikKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIGlmIChtX2dyYXBoLmNsb2JiZXJzV29ybGQoaW5kZXgpKQor
ICAgICAgICAgICAgaWYgKG1fZ3JhcGguY2xvYmJlcnNXb3JsZChub2RlKSkKICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAg
IAotICAgIE5vZGVJbmRleCBnbG9iYWxWYXJTdG9yZUVsaW1pbmF0aW9uKFdyaXRlQmFycmllcjxV
bmtub3duPiogcmVnaXN0ZXJQb2ludGVyKQorICAgIE5vZGUqIGdsb2JhbFZhclN0b3JlRWxpbWlu
YXRpb24oV3JpdGVCYXJyaWVyPFVua25vd24+KiByZWdpc3RlclBvaW50ZXIpCiAgICAgewogICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2luZGV4SW5CbG9jazsgaS0tOykgewotICAgICAgICAg
ICAgTm9kZUluZGV4IGluZGV4ID0gbV9jdXJyZW50QmxvY2stPmF0KGkpOwotICAgICAgICAgICAg
Tm9kZSYgbm9kZSA9IG1fZ3JhcGhbaW5kZXhdOwotICAgICAgICAgICAgaWYgKCFub2RlLnNob3Vs
ZEdlbmVyYXRlKCkpCisgICAgICAgICAgICBOb2RlKiBub2RlID0gbV9jdXJyZW50QmxvY2stPmF0
KGkpOworICAgICAgICAgICAgaWYgKCFub2RlLT5zaG91bGRHZW5lcmF0ZSgpKQogICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgc3dpdGNoIChub2RlLm9wKCkpIHsKKyAgICAg
ICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewogICAgICAgICAgICAgY2FzZSBQdXRHbG9iYWxW
YXI6CiAgICAgICAgICAgICBjYXNlIFB1dEdsb2JhbFZhckNoZWNrOgotICAgICAgICAgICAgICAg
IGlmIChub2RlLnJlZ2lzdGVyUG9pbnRlcigpID09IHJlZ2lzdGVyUG9pbnRlcikKLSAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGluZGV4OworICAgICAgICAgICAgICAgIGlmIChub2RlLT5yZWdp
c3RlclBvaW50ZXIoKSA9PSByZWdpc3RlclBvaW50ZXIpCisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBub2RlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIAogICAg
ICAgICAgICAgY2FzZSBHZXRHbG9iYWxWYXI6Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGUucmVn
aXN0ZXJQb2ludGVyKCkgPT0gcmVnaXN0ZXJQb2ludGVyKQotICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gTm9Ob2RlOworICAgICAgICAgICAgICAgIGlmIChub2RlLT5yZWdpc3RlclBvaW50ZXIo
KSA9PSByZWdpc3RlclBvaW50ZXIpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgZGVmYXVs
dDoKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlm
IChtX2dyYXBoLmNsb2JiZXJzV29ybGQoaW5kZXgpIHx8IG5vZGUuY2FuRXhpdCgpKQotICAgICAg
ICAgICAgICAgIHJldHVybiBOb05vZGU7CisgICAgICAgICAgICBpZiAobV9ncmFwaC5jbG9iYmVy
c1dvcmxkKG5vZGUpIHx8IG5vZGUtPmNhbkV4aXQoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4g
MDsKICAgICAgICAgfQotICAgICAgICByZXR1cm4gTm9Ob2RlOworICAgICAgICByZXR1cm4gMDsK
ICAgICB9CiAgICAgCi0gICAgTm9kZUluZGV4IHNjb3BlZFZhclN0b3JlRWxpbWluYXRpb24oTm9k
ZUluZGV4IHNjb3BlLCBOb2RlSW5kZXggcmVnaXN0ZXJzLCB1bnNpZ25lZCB2YXJOdW1iZXIpCisg
ICAgTm9kZSogc2NvcGVkVmFyU3RvcmVFbGltaW5hdGlvbihOb2RlKiBzY29wZSwgTm9kZSogcmVn
aXN0ZXJzLCB1bnNpZ25lZCB2YXJOdW1iZXIpCiAgICAgewogICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSBtX2luZGV4SW5CbG9jazsgaS0tOykgewotICAgICAgICAgICAgTm9kZUluZGV4IGluZGV4
ID0gbV9jdXJyZW50QmxvY2stPmF0KGkpOwotICAgICAgICAgICAgTm9kZSYgbm9kZSA9IG1fZ3Jh
cGhbaW5kZXhdOwotICAgICAgICAgICAgaWYgKCFub2RlLnNob3VsZEdlbmVyYXRlKCkpCisgICAg
ICAgICAgICBOb2RlKiBub2RlID0gbV9jdXJyZW50QmxvY2stPmF0KGkpOworICAgICAgICAgICAg
aWYgKCFub2RlLT5zaG91bGRHZW5lcmF0ZSgpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwot
ICAgICAgICAgICAgc3dpdGNoIChub2RlLm9wKCkpIHsKKyAgICAgICAgICAgIHN3aXRjaCAobm9k
ZS0+b3AoKSkgewogICAgICAgICAgICAgY2FzZSBQdXRTY29wZWRWYXI6IHsKLSAgICAgICAgICAg
ICAgICBpZiAobm9kZS5jaGlsZDEoKSA9PSBzY29wZSAmJiBub2RlLmNoaWxkMigpID09IHJlZ2lz
dGVycyAmJiBub2RlLnZhck51bWJlcigpID09IHZhck51bWJlcikKLSAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGluZGV4OworICAgICAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKSA9PSBz
Y29wZSAmJiBub2RlLT5jaGlsZDIoKSA9PSByZWdpc3RlcnMgJiYgbm9kZS52YXJOdW1iZXIoKSA9
PSB2YXJOdW1iZXIpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBub2RlOwogICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIAogICAgICAgICAg
ICAgY2FzZSBHZXRTY29wZWRWYXI6IHsKICAgICAgICAgICAgICAgICAvLyBMZXQncyBiZSBjb25z
ZXJ2YXRpdmUuCi0gICAgICAgICAgICAgICAgaWYgKG5vZGUudmFyTnVtYmVyKCkgPT0gdmFyTnVt
YmVyKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gTm9Ob2RlOworICAgICAgICAgICAgICAg
IGlmIChub2RlLT52YXJOdW1iZXIoKSA9PSB2YXJOdW1iZXIpCisgICAgICAgICAgICAgICAgICAg
IHJldHVybiAwOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgIApAQCAtMzQ1LDQ2ICszNDEsNDUgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAg
ICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9IG5vZGUudmFyaWFibGVB
Y2Nlc3NEYXRhKCk7CiAgICAgICAgICAgICAgICAgaWYgKHZhcmlhYmxlQWNjZXNzRGF0YS0+aXND
YXB0dXJlZCgpCiAgICAgICAgICAgICAgICAgICAgICYmIHZhcmlhYmxlQWNjZXNzRGF0YS0+bG9j
YWwoKSA9PSBzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KHZhck51bWJlcikpCi0gICAgICAg
ICAgICAgICAgICAgIHJldHVybiBOb05vZGU7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAw
OwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBk
ZWZhdWx0OgogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQotICAgICAgICAg
ICAgaWYgKG1fZ3JhcGguY2xvYmJlcnNXb3JsZChpbmRleCkgfHwgbm9kZS5jYW5FeGl0KCkpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIE5vTm9kZTsKKyAgICAgICAgICAgIGlmIChtX2dyYXBoLmNs
b2JiZXJzV29ybGQobm9kZSkgfHwgbm9kZS0+Y2FuRXhpdCgpKQorICAgICAgICAgICAgICAgIHJl
dHVybiAwOwogICAgICAgICB9Ci0gICAgICAgIHJldHVybiBOb05vZGU7CisgICAgICAgIHJldHVy
biAwOwogICAgIH0KICAgICAKLSAgICBOb2RlSW5kZXggZ2V0QnlWYWxMb2FkRWxpbWluYXRpb24o
Tm9kZUluZGV4IGNoaWxkMSwgTm9kZUluZGV4IGNoaWxkMikKKyAgICBOb2RlKiBnZXRCeVZhbExv
YWRFbGltaW5hdGlvbihOb2RlKiBjaGlsZDEsIE5vZGUqIGNoaWxkMikKICAgICB7CiAgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IG1faW5kZXhJbkJsb2NrOyBpLS07KSB7Ci0gICAgICAgICAgICBO
b2RlSW5kZXggaW5kZXggPSBtX2N1cnJlbnRCbG9jay0+YXQoaSk7Ci0gICAgICAgICAgICBpZiAo
aW5kZXggPT0gY2hpbGQxIHx8IGluZGV4ID09IGNhbm9uaWNhbGl6ZShjaGlsZDIpKSAKKyAgICAg
ICAgICAgIE5vZGUqIG5vZGUgPSBtX2N1cnJlbnRCbG9jay0+YXQoaSk7CisgICAgICAgICAgICBp
ZiAobm9kZSA9PSBjaGlsZDEgfHwgbm9kZSA9PSBjYW5vbmljYWxpemUoY2hpbGQyKSkgCiAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW2lu
ZGV4XTsKLSAgICAgICAgICAgIGlmICghbm9kZS5zaG91bGRHZW5lcmF0ZSgpKQorICAgICAgICAg
ICAgaWYgKCFub2RlLT5zaG91bGRHZW5lcmF0ZSgpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwotICAgICAgICAgICAgc3dpdGNoIChub2RlLm9wKCkpIHsKKyAgICAgICAgICAgIHN3aXRjaCAo
bm9kZS0+b3AoKSkgewogICAgICAgICAgICAgY2FzZSBHZXRCeVZhbDoKICAgICAgICAgICAgICAg
ICBpZiAoIW1fZ3JhcGguYnlWYWxJc1B1cmUobm9kZSkpCiAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBOb05vZGU7Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGUuY2hpbGQxKCkgPT0gY2hpbGQx
ICYmIGNhbm9uaWNhbGl6ZShub2RlLmNoaWxkMigpKSA9PSBjYW5vbmljYWxpemUoY2hpbGQyKSkK
LSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGluZGV4OworICAgICAgICAgICAgICAgIGlmIChu
b2RlLT5jaGlsZDEoKSA9PSBjaGlsZDEgJiYgY2Fub25pY2FsaXplKG5vZGUtPmNoaWxkMigpKSA9
PSBjYW5vbmljYWxpemUoY2hpbGQyKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGU7
CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIFB1dEJ5VmFsOgogICAg
ICAgICAgICAgY2FzZSBQdXRCeVZhbEFsaWFzOiB7CiAgICAgICAgICAgICAgICAgaWYgKCFtX2dy
YXBoLmJ5VmFsSXNQdXJlKG5vZGUpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gTm9Ob2Rl
OworICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgICAgICBpZiAobV9n
cmFwaC52YXJBcmdDaGlsZChub2RlLCAwKSA9PSBjaGlsZDEgJiYgY2Fub25pY2FsaXplKG1fZ3Jh
cGgudmFyQXJnQ2hpbGQobm9kZSwgMSkpID09IGNhbm9uaWNhbGl6ZShjaGlsZDIpKQotICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAyKS5pbmRleCgp
OworICAgICAgICAgICAgICAgICAgICByZXR1cm4gbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAy
KS5ub2RlKCk7CiAgICAgICAgICAgICAgICAgLy8gV2UgbXVzdCBhc3N1bWUgdGhhdCB0aGUgUHV0
QnlWYWwgd2lsbCBjbG9iYmVyIHRoZSBsb2NhdGlvbiB3ZSdyZSBnZXR0aW5nIGZyb20uCiAgICAg
ICAgICAgICAgICAgLy8gRklYTUU6IFdlIGNhbiBkbyBiZXR0ZXI7IGlmIHdlIGtub3cgdGhhdCB0
aGUgUHV0QnlWYWwgaXMgYWNjZXNzaW5nIGFuIGFycmF5IG9mIGEKICAgICAgICAgICAgICAgICAv
LyBkaWZmZXJlbnQgdHlwZSB0aGFuIHRoZSBHZXRCeVZhbCwgdGhlbiB3ZSBrbm93IHRoYXQgdGhl
eSB3b24ndCBjbG9iYmVyIGVhY2ggb3RoZXIuCi0gICAgICAgICAgICAgICAgcmV0dXJuIE5vTm9k
ZTsKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IGNhc2UgUHV0U3RydWN0dXJlOgogICAgICAgICAgICAgY2FzZSBQdXRCeU9mZnNldDoKQEAgLTM5
NCw3MiArMzg5LDY5IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgLy8gdGhlIEdldEJ5VmFs
LgogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAg
ICAgICAgICBpZiAobV9ncmFwaC5jbG9iYmVyc1dvcmxkKGluZGV4KSkKLSAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIE5vTm9kZTsKKyAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC5jbG9iYmVy
c1dvcmxkKG5vZGUpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICByZXR1cm4gTm9O
b2RlOworICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKLSAgICBib29sIGNoZWNrRnVuY3Rpb25F
bGltaW5hdGlvbihKU0NlbGwqIGZ1bmN0aW9uLCBOb2RlSW5kZXggY2hpbGQxKQorICAgIGJvb2wg
Y2hlY2tGdW5jdGlvbkVsaW1pbmF0aW9uKEpTQ2VsbCogZnVuY3Rpb24sIE5vZGUqIGNoaWxkMSkK
ICAgICB7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGVuZEluZGV4Rm9yUHVyZUNTRSgpOyBp
LS07KSB7Ci0gICAgICAgICAgICBOb2RlSW5kZXggaW5kZXggPSBtX2N1cnJlbnRCbG9jay0+YXQo
aSk7Ci0gICAgICAgICAgICBpZiAoaW5kZXggPT0gY2hpbGQxKSAKKyAgICAgICAgICAgIE5vZGUq
IG5vZGUgPSBtX2N1cnJlbnRCbG9jay0+YXQoaSk7CisgICAgICAgICAgICBpZiAobm9kZSA9PSBj
aGlsZDEpIAogICAgICAgICAgICAgICAgIGJyZWFrOwogCi0gICAgICAgICAgICBOb2RlJiBub2Rl
ID0gbV9ncmFwaFtpbmRleF07Ci0gICAgICAgICAgICBpZiAobm9kZS5vcCgpID09IENoZWNrRnVu
Y3Rpb24gJiYgbm9kZS5jaGlsZDEoKSA9PSBjaGlsZDEgJiYgbm9kZS5mdW5jdGlvbigpID09IGZ1
bmN0aW9uKQorICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gQ2hlY2tGdW5jdGlvbiAmJiBu
b2RlLT5jaGlsZDEoKSA9PSBjaGlsZDEgJiYgbm9kZS0+ZnVuY3Rpb24oKSA9PSBmdW5jdGlvbikK
ICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgfQogICAgIAotICAgIGJvb2wgY2hlY2tFeGVjdXRhYmxlRWxpbWluYXRpb24o
RXhlY3V0YWJsZUJhc2UqIGV4ZWN1dGFibGUsIE5vZGVJbmRleCBjaGlsZDEpCisgICAgYm9vbCBj
aGVja0V4ZWN1dGFibGVFbGltaW5hdGlvbihFeGVjdXRhYmxlQmFzZSogZXhlY3V0YWJsZSwgTm9k
ZSogY2hpbGQxKQogICAgIHsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gZW5kSW5kZXhGb3JQ
dXJlQ1NFKCk7IGktLTspIHsKLSAgICAgICAgICAgIE5vZGVJbmRleCBpbmRleCA9IG1fY3VycmVu
dEJsb2NrLT5hdChpKTsKLSAgICAgICAgICAgIGlmIChpbmRleCA9PSBjaGlsZDEpCisgICAgICAg
ICAgICBOb2RlKiBub2RlID0gbV9jdXJyZW50QmxvY2stPmF0KGkpOworICAgICAgICAgICAgaWYg
KG5vZGUgPT0gY2hpbGQxKQogICAgICAgICAgICAgICAgIGJyZWFrOwogCi0gICAgICAgICAgICBO
b2RlJiBub2RlID0gbV9ncmFwaFtpbmRleF07Ci0gICAgICAgICAgICBpZiAobm9kZS5vcCgpID09
IENoZWNrRXhlY3V0YWJsZSAmJiBub2RlLmNoaWxkMSgpID09IGNoaWxkMSAmJiBub2RlLmV4ZWN1
dGFibGUoKSA9PSBleGVjdXRhYmxlKQorICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gQ2hl
Y2tFeGVjdXRhYmxlICYmIG5vZGUtPmNoaWxkMSgpID09IGNoaWxkMSAmJiBub2RlLT5leGVjdXRh
YmxlKCkgPT0gZXhlY3V0YWJsZSkKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAg
ICAgfQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgYm9vbCBjaGVja1N0cnVj
dHVyZUVsaW1pbmF0aW9uKGNvbnN0IFN0cnVjdHVyZVNldCYgc3RydWN0dXJlU2V0LCBOb2RlSW5k
ZXggY2hpbGQxKQorICAgIGJvb2wgY2hlY2tTdHJ1Y3R1cmVFbGltaW5hdGlvbihjb25zdCBTdHJ1
Y3R1cmVTZXQmIHN0cnVjdHVyZVNldCwgTm9kZSogY2hpbGQxKQogICAgIHsKICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gbV9pbmRleEluQmxvY2s7IGktLTspIHsKLSAgICAgICAgICAgIE5vZGVJ
bmRleCBpbmRleCA9IG1fY3VycmVudEJsb2NrLT5hdChpKTsKLSAgICAgICAgICAgIGlmIChpbmRl
eCA9PSBjaGlsZDEpIAorICAgICAgICAgICAgTm9kZSogbm9kZSA9IG1fY3VycmVudEJsb2NrLT5h
dChpKTsKKyAgICAgICAgICAgIGlmIChub2RlID09IGNoaWxkMSkgCiAgICAgICAgICAgICAgICAg
YnJlYWs7CiAKLSAgICAgICAgICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW2luZGV4XTsKLSAgICAg
ICAgICAgIGlmICghbm9kZS5zaG91bGRHZW5lcmF0ZSgpKQorICAgICAgICAgICAgaWYgKCFub2Rl
LT5zaG91bGRHZW5lcmF0ZSgpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAg
ICAgc3dpdGNoIChub2RlLm9wKCkpIHsKKyAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkg
ewogICAgICAgICAgICAgY2FzZSBDaGVja1N0cnVjdHVyZToKICAgICAgICAgICAgIGNhc2UgRm9y
d2FyZENoZWNrU3RydWN0dXJlOgotICAgICAgICAgICAgICAgIGlmIChub2RlLmNoaWxkMSgpID09
IGNoaWxkMQotICAgICAgICAgICAgICAgICAgICAmJiBzdHJ1Y3R1cmVTZXQuaXNTdXBlcnNldE9m
KG5vZGUuc3RydWN0dXJlU2V0KCkpKQorICAgICAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEo
KSA9PSBjaGlsZDEKKyAgICAgICAgICAgICAgICAgICAgJiYgc3RydWN0dXJlU2V0LmlzU3VwZXJz
ZXRPZihub2RlLT5zdHJ1Y3R1cmVTZXQoKSkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0
cnVlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIAogICAgICAgICAg
ICAgY2FzZSBTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludDoKICAgICAgICAgICAgIGNhc2Ug
Rm9yd2FyZFN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50OgotICAgICAgICAgICAgICAgIGlm
IChub2RlLmNoaWxkMSgpID09IGNoaWxkMQotICAgICAgICAgICAgICAgICAgICAmJiBzdHJ1Y3R1
cmVTZXQuY29udGFpbnMobm9kZS5zdHJ1Y3R1cmUoKSkpCisgICAgICAgICAgICAgICAgaWYgKG5v
ZGUtPmNoaWxkMSgpID09IGNoaWxkMQorICAgICAgICAgICAgICAgICAgICAmJiBzdHJ1Y3R1cmVT
ZXQuY29udGFpbnMobm9kZS0+c3RydWN0dXJlKCkpKQogICAgICAgICAgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAKICAgICAg
ICAgICAgIGNhc2UgUHV0U3RydWN0dXJlOgotICAgICAgICAgICAgICAgIGlmIChub2RlLmNoaWxk
MSgpID09IGNoaWxkMQotICAgICAgICAgICAgICAgICAgICAmJiBzdHJ1Y3R1cmVTZXQuY29udGFp
bnMobm9kZS5zdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSgpLm5ld1N0cnVjdHVyZSkpCisgICAgICAg
ICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpID09IGNoaWxkMQorICAgICAgICAgICAgICAgICAg
ICAmJiBzdHJ1Y3R1cmVTZXQuY29udGFpbnMobm9kZS0+c3RydWN0dXJlVHJhbnNpdGlvbkRhdGEo
KS5uZXdTdHJ1Y3R1cmUpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAg
ICAgICAgICAgICBpZiAoc3RydWN0dXJlU2V0LmNvbnRhaW5zKG5vZGUuc3RydWN0dXJlVHJhbnNp
dGlvbkRhdGEoKS5wcmV2aW91c1N0cnVjdHVyZSkpCisgICAgICAgICAgICAgICAgaWYgKHN0cnVj
dHVyZVNldC5jb250YWlucyhub2RlLT5zdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSgpLnByZXZpb3Vz
U3RydWN0dXJlKSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIApAQCAtNDg0LDcgKzQ3Niw3IEBAIHByaXZh
dGU6CiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgIAogICAg
ICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC5jbG9iYmVyc1dv
cmxkKGluZGV4KSkKKyAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC5jbG9iYmVyc1dvcmxkKG5v
ZGUpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICB9CkBAIC00OTIsMjYgKzQ4NCwyNSBAQCBwcml2YXRlOgogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIAotICAgIGJvb2wgc3RydWN0dXJlVHJhbnNp
dGlvbldhdGNocG9pbnRFbGltaW5hdGlvbihTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgTm9kZUluZGV4
IGNoaWxkMSkKKyAgICBib29sIHN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50RWxpbWluYXRp
b24oU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIE5vZGUqIGNoaWxkMSkKICAgICB7CiAgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IG1faW5kZXhJbkJsb2NrOyBpLS07KSB7Ci0gICAgICAgICAgICBOb2Rl
SW5kZXggaW5kZXggPSBtX2N1cnJlbnRCbG9jay0+YXQoaSk7Ci0gICAgICAgICAgICBpZiAoaW5k
ZXggPT0gY2hpbGQxKSAKKyAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBtX2N1cnJlbnRCbG9jay0+
YXQoaSk7CisgICAgICAgICAgICBpZiAobm9kZSA9PSBjaGlsZDEpIAogICAgICAgICAgICAgICAg
IGJyZWFrOwogCi0gICAgICAgICAgICBOb2RlJiBub2RlID0gbV9ncmFwaFtpbmRleF07Ci0gICAg
ICAgICAgICBpZiAoIW5vZGUuc2hvdWxkR2VuZXJhdGUoKSkKKyAgICAgICAgICAgIGlmICghbm9k
ZS0+c2hvdWxkR2VuZXJhdGUoKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAg
ICAgIHN3aXRjaCAobm9kZS5vcCgpKSB7CisgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkp
IHsKICAgICAgICAgICAgIGNhc2UgQ2hlY2tTdHJ1Y3R1cmU6CiAgICAgICAgICAgICBjYXNlIEZv
cndhcmRDaGVja1N0cnVjdHVyZToKLSAgICAgICAgICAgICAgICBpZiAobm9kZS5jaGlsZDEoKSA9
PSBjaGlsZDEKLSAgICAgICAgICAgICAgICAgICAgJiYgbm9kZS5zdHJ1Y3R1cmVTZXQoKS5jb250
YWluc09ubHkoc3RydWN0dXJlKSkKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCkg
PT0gY2hpbGQxCisgICAgICAgICAgICAgICAgICAgICYmIG5vZGUtPnN0cnVjdHVyZVNldCgpLmNv
bnRhaW5zT25seShzdHJ1Y3R1cmUpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGNh
c2UgUHV0U3RydWN0dXJlOgotICAgICAgICAgICAgICAgIEFTU0VSVChub2RlLnN0cnVjdHVyZVRy
YW5zaXRpb25EYXRhKCkucHJldmlvdXNTdHJ1Y3R1cmUgIT0gc3RydWN0dXJlKTsKKyAgICAgICAg
ICAgICAgICBBU1NFUlQobm9kZS0+c3RydWN0dXJlVHJhbnNpdGlvbkRhdGEoKS5wcmV2aW91c1N0
cnVjdHVyZSAhPSBzdHJ1Y3R1cmUpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgICAgIAogICAgICAgICAgICAgY2FzZSBQdXRCeU9mZnNldDoKQEAgLTUzMCw3ICs1MjEsNyBA
QCBwcml2YXRlOgogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgY2FzZSBTdHJ1Y3R1cmVU
cmFuc2l0aW9uV2F0Y2hwb2ludDoKICAgICAgICAgICAgIGNhc2UgRm9yd2FyZFN0cnVjdHVyZVRy
YW5zaXRpb25XYXRjaHBvaW50OgotICAgICAgICAgICAgICAgIGlmIChub2RlLnN0cnVjdHVyZSgp
ID09IHN0cnVjdHVyZSAmJiBub2RlLmNoaWxkMSgpID09IGNoaWxkMSkKKyAgICAgICAgICAgICAg
ICBpZiAobm9kZS0+c3RydWN0dXJlKCkgPT0gc3RydWN0dXJlICYmIG5vZGUtPmNoaWxkMSgpID09
IGNoaWxkMSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgCkBAIC01NDEsNyArNTMyLDcgQEAgcHJpdmF0ZToK
ICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAgICAgCiAgICAgICAg
ICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLmNsb2JiZXJzV29ybGQo
aW5kZXgpKQorICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLmNsb2JiZXJzV29ybGQobm9kZSkp
CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgIH0KQEAgLTU0OSwyOCArNTQwLDI3IEBAIHByaXZhdGU6CiAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgCi0gICAgTm9kZUluZGV4IHB1dFN0cnVjdHVyZVN0
b3JlRWxpbWluYXRpb24oTm9kZUluZGV4IGNoaWxkMSkKKyAgICBOb2RlKiBwdXRTdHJ1Y3R1cmVT
dG9yZUVsaW1pbmF0aW9uKE5vZGUqIGNoaWxkMSkKICAgICB7CiAgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IG1faW5kZXhJbkJsb2NrOyBpLS07KSB7Ci0gICAgICAgICAgICBOb2RlSW5kZXggaW5k
ZXggPSBtX2N1cnJlbnRCbG9jay0+YXQoaSk7Ci0gICAgICAgICAgICBpZiAoaW5kZXggPT0gY2hp
bGQxKQorICAgICAgICAgICAgTm9kZSogbm9kZSA9IG1fY3VycmVudEJsb2NrLT5hdChpKTsKKyAg
ICAgICAgICAgIGlmIChub2RlID09IGNoaWxkMSkKICAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW2luZGV4XTsKLSAgICAgICAgICAgIGlmICgh
bm9kZS5zaG91bGRHZW5lcmF0ZSgpKQorICAgICAgICAgICAgaWYgKCFub2RlLT5zaG91bGRHZW5l
cmF0ZSgpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgc3dpdGNoIChu
b2RlLm9wKCkpIHsKKyAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewogICAgICAgICAg
ICAgY2FzZSBDaGVja1N0cnVjdHVyZToKICAgICAgICAgICAgIGNhc2UgRm9yd2FyZENoZWNrU3Ry
dWN0dXJlOgogICAgICAgICAgICAgICAgIHJldHVybiBOb05vZGU7CiAgICAgICAgICAgICAgICAg
CiAgICAgICAgICAgICBjYXNlIFBoYW50b21QdXRTdHJ1Y3R1cmU6Ci0gICAgICAgICAgICAgICAg
aWYgKG5vZGUuY2hpbGQxKCkgPT0gY2hpbGQxKSAvLyBObyBuZWVkIHRvIHJldHJhY2Ugb3VyIHN0
ZXBzLgorICAgICAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKSA9PSBjaGlsZDEpIC8vIE5v
IG5lZWQgdG8gcmV0cmFjZSBvdXIgc3RlcHMuCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBO
b05vZGU7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgCiAgICAgICAg
ICAgICBjYXNlIFB1dFN0cnVjdHVyZToKLSAgICAgICAgICAgICAgICBpZiAobm9kZS5jaGlsZDEo
KSA9PSBjaGlsZDEpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBpbmRleDsKKyAgICAgICAg
ICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCkgPT0gY2hpbGQxKQorICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gbm9kZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAK
ICAgICAgICAgICAgIC8vIFB1dFN0cnVjdHVyZSBuZWVkcyB0byBleGVjdXRlIGlmIHdlIEdDLiBI
ZW5jZSB0aGlzIG5lZWRzIHRvCkBAIC01OTIsNDQgKzU4Miw0MyBAQCBwcml2YXRlOgogICAgICAg
ICAgICAgY2FzZSBBbGxvY2F0ZVByb3BlcnR5U3RvcmFnZToKICAgICAgICAgICAgIGNhc2UgUmVh
bGxvY2F0ZVByb3BlcnR5U3RvcmFnZToKICAgICAgICAgICAgIGNhc2UgVHlwZU9mOgotICAgICAg
ICAgICAgICAgIHJldHVybiBOb05vZGU7CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAg
ICAgICAgICAgICAgCiAgICAgICAgICAgICBjYXNlIEdldEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2U6
Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGUuYXJyYXlNb2RlKCkuZ2V0SW5kZXhlZFByb3BlcnR5
U3RvcmFnZU1heVRyaWdnZXJHQygpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gTm9Ob2Rl
OworICAgICAgICAgICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS5nZXRJbmRleGVkUHJvcGVy
dHlTdG9yYWdlTWF5VHJpZ2dlckdDKCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwog
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgZGVm
YXVsdDoKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IGlmIChtX2dyYXBoLmNsb2JiZXJzV29ybGQoaW5kZXgpIHx8IG5vZGUuY2FuRXhpdCgpKQotICAg
ICAgICAgICAgICAgIHJldHVybiBOb05vZGU7CisgICAgICAgICAgICBpZiAobV9ncmFwaC5jbG9i
YmVyc1dvcmxkKG5vZGUpIHx8IG5vZGUtPmNhbkV4aXQoKSkKKyAgICAgICAgICAgICAgICByZXR1
cm4gMDsKICAgICAgICAgfQotICAgICAgICByZXR1cm4gTm9Ob2RlOworICAgICAgICByZXR1cm4g
MDsKICAgICB9CiAgICAgCi0gICAgTm9kZUluZGV4IGdldEJ5T2Zmc2V0TG9hZEVsaW1pbmF0aW9u
KHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIE5vZGVJbmRleCBjaGlsZDEpCisgICAgTm9kZSog
Z2V0QnlPZmZzZXRMb2FkRWxpbWluYXRpb24odW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgTm9k
ZSogY2hpbGQxKQogICAgIHsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9pbmRleEluQmxv
Y2s7IGktLTspIHsKLSAgICAgICAgICAgIE5vZGVJbmRleCBpbmRleCA9IG1fY3VycmVudEJsb2Nr
LT5hdChpKTsKLSAgICAgICAgICAgIGlmIChpbmRleCA9PSBjaGlsZDEpCisgICAgICAgICAgICBO
b2RlKiBub2RlID0gbV9jdXJyZW50QmxvY2stPmF0KGkpOworICAgICAgICAgICAgaWYgKG5vZGUg
PT0gY2hpbGQxKQogICAgICAgICAgICAgICAgIGJyZWFrOwogCi0gICAgICAgICAgICBOb2RlJiBu
b2RlID0gbV9ncmFwaFtpbmRleF07Ci0gICAgICAgICAgICBpZiAoIW5vZGUuc2hvdWxkR2VuZXJh
dGUoKSkKKyAgICAgICAgICAgIGlmICghbm9kZS0+c2hvdWxkR2VuZXJhdGUoKSkKICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIHN3aXRjaCAobm9kZS5vcCgpKSB7CisgICAg
ICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKICAgICAgICAgICAgIGNhc2UgR2V0QnlPZmZz
ZXQ6Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGUuY2hpbGQxKCkgPT0gY2hpbGQxCi0gICAgICAg
ICAgICAgICAgICAgICYmIG1fZ3JhcGgubV9zdG9yYWdlQWNjZXNzRGF0YVtub2RlLnN0b3JhZ2VB
Y2Nlc3NEYXRhSW5kZXgoKV0uaWRlbnRpZmllck51bWJlciA9PSBpZGVudGlmaWVyTnVtYmVyKQot
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW5kZXg7CisgICAgICAgICAgICAgICAgaWYgKG5v
ZGUtPmNoaWxkMSgpID09IGNoaWxkMQorICAgICAgICAgICAgICAgICAgICAmJiBtX2dyYXBoLm1f
c3RvcmFnZUFjY2Vzc0RhdGFbbm9kZS0+c3RvcmFnZUFjY2Vzc0RhdGFJbmRleCgpXS5pZGVudGlm
aWVyTnVtYmVyID09IGlkZW50aWZpZXJOdW1iZXIpCisgICAgICAgICAgICAgICAgICAgIHJldHVy
biBub2RlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIAogICAgICAg
ICAgICAgY2FzZSBQdXRCeU9mZnNldDoKLSAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC5tX3N0
b3JhZ2VBY2Nlc3NEYXRhW25vZGUuc3RvcmFnZUFjY2Vzc0RhdGFJbmRleCgpXS5pZGVudGlmaWVy
TnVtYmVyID09IGlkZW50aWZpZXJOdW1iZXIpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG5v
ZGUuY2hpbGQxKCkgPT0gY2hpbGQxKSAvLyBNdXN0IGJlIHNhbWUgcHJvcGVydHkgc3RvcmFnZS4K
LSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBub2RlLmNoaWxkMygpLmluZGV4KCk7Ci0g
ICAgICAgICAgICAgICAgICAgIHJldHVybiBOb05vZGU7CisgICAgICAgICAgICAgICAgaWYgKG1f
Z3JhcGgubV9zdG9yYWdlQWNjZXNzRGF0YVtub2RlLT5zdG9yYWdlQWNjZXNzRGF0YUluZGV4KCld
LmlkZW50aWZpZXJOdW1iZXIgPT0gaWRlbnRpZmllck51bWJlcikgeworICAgICAgICAgICAgICAg
ICAgICBpZiAobm9kZS0+Y2hpbGQxKCkgPT0gY2hpbGQxKSAvLyBNdXN0IGJlIHNhbWUgcHJvcGVy
dHkgc3RvcmFnZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBub2RlLT5jaGlsZDMo
KS5ub2RlKCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAKQEAgLTY0NSwzOCAr
NjM0LDM3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgIC8vIGNoYW5nZS4KICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IHJldHVybiBOb05vZGU7CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgICAg
ICAgCiAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLmNs
b2JiZXJzV29ybGQoaW5kZXgpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gTm9Ob2RlOwor
ICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLmNsb2JiZXJzV29ybGQobm9kZSkpCisgICAgICAg
ICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgfQogICAgICAgICB9Ci0gICAgICAgIHJldHVybiBOb05vZGU7CisgICAgICAgIHJldHVybiAw
OwogICAgIH0KICAgICAKLSAgICBOb2RlSW5kZXggcHV0QnlPZmZzZXRTdG9yZUVsaW1pbmF0aW9u
KHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIE5vZGVJbmRleCBjaGlsZDEpCisgICAgTm9kZSog
cHV0QnlPZmZzZXRTdG9yZUVsaW1pbmF0aW9uKHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIE5v
ZGUqIGNoaWxkMSkKICAgICB7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1faW5kZXhJbkJs
b2NrOyBpLS07KSB7Ci0gICAgICAgICAgICBOb2RlSW5kZXggaW5kZXggPSBtX2N1cnJlbnRCbG9j
ay0+YXQoaSk7Ci0gICAgICAgICAgICBpZiAoaW5kZXggPT0gY2hpbGQxKQorICAgICAgICAgICAg
Tm9kZSogbm9kZSA9IG1fY3VycmVudEJsb2NrLT5hdChpKTsKKyAgICAgICAgICAgIGlmIChub2Rl
ID09IGNoaWxkMSkKICAgICAgICAgICAgICAgICBicmVhazsKIAotICAgICAgICAgICAgTm9kZSYg
bm9kZSA9IG1fZ3JhcGhbaW5kZXhdOwotICAgICAgICAgICAgaWYgKCFub2RlLnNob3VsZEdlbmVy
YXRlKCkpCisgICAgICAgICAgICBpZiAoIW5vZGUtPnNob3VsZEdlbmVyYXRlKCkpCiAgICAgICAg
ICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBzd2l0Y2ggKG5vZGUub3AoKSkgeworICAg
ICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CiAgICAgICAgICAgICBjYXNlIEdldEJ5T2Zm
c2V0OgotICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLm1fc3RvcmFnZUFjY2Vzc0RhdGFbbm9k
ZS5zdG9yYWdlQWNjZXNzRGF0YUluZGV4KCldLmlkZW50aWZpZXJOdW1iZXIgPT0gaWRlbnRpZmll
ck51bWJlcikKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5vTm9kZTsKKyAgICAgICAgICAg
ICAgICBpZiAobV9ncmFwaC5tX3N0b3JhZ2VBY2Nlc3NEYXRhW25vZGUtPnN0b3JhZ2VBY2Nlc3NE
YXRhSW5kZXgoKV0uaWRlbnRpZmllck51bWJlciA9PSBpZGVudGlmaWVyTnVtYmVyKQorICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgICAgICAKICAgICAgICAgICAgIGNhc2UgUHV0QnlPZmZzZXQ6Ci0gICAgICAgICAgICAgICAg
aWYgKG1fZ3JhcGgubV9zdG9yYWdlQWNjZXNzRGF0YVtub2RlLnN0b3JhZ2VBY2Nlc3NEYXRhSW5k
ZXgoKV0uaWRlbnRpZmllck51bWJlciA9PSBpZGVudGlmaWVyTnVtYmVyKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIGlmIChub2RlLmNoaWxkMSgpID09IGNoaWxkMSkgLy8gTXVzdCBiZSBzYW1lIHBy
b3BlcnR5IHN0b3JhZ2UuCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW5kZXg7Ci0g
ICAgICAgICAgICAgICAgICAgIHJldHVybiBOb05vZGU7CisgICAgICAgICAgICAgICAgaWYgKG1f
Z3JhcGgubV9zdG9yYWdlQWNjZXNzRGF0YVtub2RlLT5zdG9yYWdlQWNjZXNzRGF0YUluZGV4KCld
LmlkZW50aWZpZXJOdW1iZXIgPT0gaWRlbnRpZmllck51bWJlcikgeworICAgICAgICAgICAgICAg
ICAgICBpZiAobm9kZS0+Y2hpbGQxKCkgPT0gY2hpbGQxKSAvLyBNdXN0IGJlIHNhbWUgcHJvcGVy
dHkgc3RvcmFnZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBub2RlOworICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgCkBAIC02ODksNDUgKzY3Nyw0NCBAQCBwcml2YXRl
OgogICAgICAgICAgICAgICAgICAgICAvLyBjaGFuZ2UuCiAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICByZXR1cm4gTm9Ob2RlOwor
ICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAg
ZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC5jbG9iYmVyc1dvcmxkKGluZGV4
KSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5vTm9kZTsKKyAgICAgICAgICAgICAgICBp
ZiAobV9ncmFwaC5jbG9iYmVyc1dvcmxkKG5vZGUpKQorICAgICAgICAgICAgICAgICAgICByZXR1
cm4gMDsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IGlmIChub2RlLmNhbkV4aXQoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gTm9Ob2RlOworICAg
ICAgICAgICAgaWYgKG5vZGUtPmNhbkV4aXQoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsK
ICAgICAgICAgfQotICAgICAgICByZXR1cm4gTm9Ob2RlOworICAgICAgICByZXR1cm4gMDsKICAg
ICB9CiAgICAgCi0gICAgTm9kZUluZGV4IGdldFByb3BlcnR5U3RvcmFnZUxvYWRFbGltaW5hdGlv
bihOb2RlSW5kZXggY2hpbGQxKQorICAgIE5vZGUqIGdldFByb3BlcnR5U3RvcmFnZUxvYWRFbGlt
aW5hdGlvbihOb2RlKiBjaGlsZDEpCiAgICAgewogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBt
X2luZGV4SW5CbG9jazsgaS0tOykgewotICAgICAgICAgICAgTm9kZUluZGV4IGluZGV4ID0gbV9j
dXJyZW50QmxvY2stPmF0KGkpOwotICAgICAgICAgICAgaWYgKGluZGV4ID09IGNoaWxkMSkgCisg
ICAgICAgICAgICBOb2RlKiBub2RlID0gbV9jdXJyZW50QmxvY2stPmF0KGkpOworICAgICAgICAg
ICAgaWYgKG5vZGUgPT0gY2hpbGQxKSAKICAgICAgICAgICAgICAgICBicmVhazsKIAotICAgICAg
ICAgICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhbaW5kZXhdOwotICAgICAgICAgICAgaWYgKCFub2Rl
LnNob3VsZEdlbmVyYXRlKCkpCisgICAgICAgICAgICBpZiAoIW5vZGUtPnNob3VsZEdlbmVyYXRl
KCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBzd2l0Y2ggKG5vZGUu
b3AoKSkgeworICAgICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CiAgICAgICAgICAgICBj
YXNlIEdldEJ1dHRlcmZseToKLSAgICAgICAgICAgICAgICBpZiAobm9kZS5jaGlsZDEoKSA9PSBj
aGlsZDEpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBpbmRleDsKKyAgICAgICAgICAgICAg
ICBpZiAobm9kZS0+Y2hpbGQxKCkgPT0gY2hpbGQxKQorICAgICAgICAgICAgICAgICAgICByZXR1
cm4gbm9kZTsKICAgICAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICAgICAgY2FzZSBBbGxv
Y2F0ZVByb3BlcnR5U3RvcmFnZToKICAgICAgICAgICAgIGNhc2UgUmVhbGxvY2F0ZVByb3BlcnR5
U3RvcmFnZToKICAgICAgICAgICAgICAgICAvLyBJZiB3ZSBjYW4gY2hlYXBseSBwcm92ZSB0aGlz
IGlzIGEgY2hhbmdlIHRvIG91ciBvYmplY3QncyBzdG9yYWdlLCB3ZQogICAgICAgICAgICAgICAg
IC8vIGNhbiBvcHRpbWl6ZSBhbmQgdXNlIGl0cyByZXN1bHQuCi0gICAgICAgICAgICAgICAgaWYg
KG5vZGUuY2hpbGQxKCkgPT0gY2hpbGQxKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW5k
ZXg7CisgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpID09IGNoaWxkMSkKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIG5vZGU7CiAgICAgICAgICAgICAgICAgLy8gT3RoZXJ3aXNl
LCB3ZSBjdXJyZW50bHkgY2FuJ3QgcHJvdmUgdGhhdCB0aGlzIGRvZXNuJ3QgY2hhbmdlIG91ciBv
YmplY3QncwogICAgICAgICAgICAgICAgIC8vIHN0b3JhZ2UsIHNvIHdlIGNvbnNlcnZhdGl2ZWx5
IGFzc3VtZSB0aGF0IGl0IG1heSBjaGFuZ2UgdGhlIHN0b3JhZ2UKICAgICAgICAgICAgICAgICAv
LyBwb2ludGVyIG9mIGFueSBvYmplY3QsIGluY2x1ZGluZyBvdXJzLgotICAgICAgICAgICAgICAg
IHJldHVybiBOb05vZGU7CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgICAg
ICAgCiAgICAgICAgICAgICBjYXNlIFB1dEJ5T2Zmc2V0OgogICAgICAgICAgICAgY2FzZSBQdXRT
dHJ1Y3R1cmU6CkBAIC03NDMsMzQgKzczMCwzMyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAg
ICAgICAvLyBjaGFuZ2UuCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICByZXR1cm4gTm9Ob2RlOworICAgICAgICAgICAgICAgIHJl
dHVybiAwOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgY2FzZSBBcnJheWlmeToKICAg
ICAgICAgICAgIGNhc2UgQXJyYXlpZnlUb1N0cnVjdHVyZToKICAgICAgICAgICAgICAgICAvLyBX
ZSBjb3VsZCBjaGVjayBpZiB0aGUgYXJyYXlpZmljYXRpb24gY291bGQgYWZmZWN0IG91ciBidXR0
ZXJmbHkuCiAgICAgICAgICAgICAgICAgLy8gQnV0IHRoYXQgc2VlbXMgbGlrZSBpdCB3b3VsZCB0
YWtlIEVmZm9ydC4KLSAgICAgICAgICAgICAgICByZXR1cm4gTm9Ob2RlOworICAgICAgICAgICAg
ICAgIHJldHVybiAwOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgZGVmYXVsdDoKLSAg
ICAgICAgICAgICAgICBpZiAobV9ncmFwaC5jbG9iYmVyc1dvcmxkKGluZGV4KSkKLSAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIE5vTm9kZTsKKyAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC5j
bG9iYmVyc1dvcmxkKG5vZGUpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICByZXR1
cm4gTm9Ob2RlOworICAgICAgICByZXR1cm4gMDsKICAgICB9CiAgICAgCi0gICAgYm9vbCBjaGVj
a0FycmF5RWxpbWluYXRpb24oTm9kZUluZGV4IGNoaWxkMSwgQXJyYXlNb2RlIGFycmF5TW9kZSkK
KyAgICBib29sIGNoZWNrQXJyYXlFbGltaW5hdGlvbihOb2RlKiBjaGlsZDEsIEFycmF5TW9kZSBh
cnJheU1vZGUpCiAgICAgewogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2luZGV4SW5CbG9j
azsgaS0tOykgewotICAgICAgICAgICAgTm9kZUluZGV4IGluZGV4ID0gbV9jdXJyZW50QmxvY2st
PmF0KGkpOwotICAgICAgICAgICAgaWYgKGluZGV4ID09IGNoaWxkMSkgCisgICAgICAgICAgICBO
b2RlKiBub2RlID0gbV9jdXJyZW50QmxvY2stPmF0KGkpOworICAgICAgICAgICAgaWYgKG5vZGUg
PT0gY2hpbGQxKSAKICAgICAgICAgICAgICAgICBicmVhazsKIAotICAgICAgICAgICAgTm9kZSYg
bm9kZSA9IG1fZ3JhcGhbaW5kZXhdOwotICAgICAgICAgICAgaWYgKCFub2RlLnNob3VsZEdlbmVy
YXRlKCkpCisgICAgICAgICAgICBpZiAoIW5vZGUtPnNob3VsZEdlbmVyYXRlKCkpCiAgICAgICAg
ICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBzd2l0Y2ggKG5vZGUub3AoKSkgeworICAg
ICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CiAgICAgICAgICAgICBjYXNlIFB1dEJ5T2Zm
c2V0OgogICAgICAgICAgICAgY2FzZSBQdXRTdHJ1Y3R1cmU6CiAgICAgICAgICAgICAgICAgLy8g
Q2hhbmdpbmcgdGhlIHN0cnVjdHVyZSBvciBwdXR0aW5nIHRvIHRoZSBzdG9yYWdlIGNhbm5vdApA
QCAtNzc4LDcgKzc2NCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICAgICAgCiAgICAgICAgICAgICBjYXNlIENoZWNrQXJyYXk6Ci0gICAgICAgICAgICAg
ICAgaWYgKG5vZGUuY2hpbGQxKCkgPT0gY2hpbGQxICYmIG5vZGUuYXJyYXlNb2RlKCkgPT0gYXJy
YXlNb2RlKQorICAgICAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKSA9PSBjaGlsZDEgJiYg
bm9kZS0+YXJyYXlNb2RlKCkgPT0gYXJyYXlNb2RlKQogICAgICAgICAgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAKQEAgLTc4
OSw3ICs3NzUsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICAgICAgICAgICAgICAKICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgaWYg
KG1fZ3JhcGguY2xvYmJlcnNXb3JsZChpbmRleCkpCisgICAgICAgICAgICAgICAgaWYgKG1fZ3Jh
cGguY2xvYmJlcnNXb3JsZChub2RlKSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQpAQCAtNzk3LDIwICs3ODMs
MTkgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIE5vZGVJ
bmRleCBnZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlTG9hZEVsaW1pbmF0aW9uKE5vZGVJbmRleCBj
aGlsZDEsIEFycmF5TW9kZSBhcnJheU1vZGUpCisgICAgTm9kZSogZ2V0SW5kZXhlZFByb3BlcnR5
U3RvcmFnZUxvYWRFbGltaW5hdGlvbihOb2RlKiBjaGlsZDEsIEFycmF5TW9kZSBhcnJheU1vZGUp
CiAgICAgewogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2luZGV4SW5CbG9jazsgaS0tOykg
ewotICAgICAgICAgICAgTm9kZUluZGV4IGluZGV4ID0gbV9jdXJyZW50QmxvY2stPmF0KGkpOwot
ICAgICAgICAgICAgaWYgKGluZGV4ID09IGNoaWxkMSkgCisgICAgICAgICAgICBOb2RlKiBub2Rl
ID0gbV9jdXJyZW50QmxvY2stPmF0KGkpOworICAgICAgICAgICAgaWYgKG5vZGUgPT0gY2hpbGQx
KSAKICAgICAgICAgICAgICAgICBicmVhazsKIAotICAgICAgICAgICAgTm9kZSYgbm9kZSA9IG1f
Z3JhcGhbaW5kZXhdOwotICAgICAgICAgICAgaWYgKCFub2RlLnNob3VsZEdlbmVyYXRlKCkpCisg
ICAgICAgICAgICBpZiAoIW5vZGUtPnNob3VsZEdlbmVyYXRlKCkpCiAgICAgICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgICAgICBzd2l0Y2ggKG5vZGUub3AoKSkgeworICAgICAgICAgICAg
c3dpdGNoIChub2RlLT5vcCgpKSB7CiAgICAgICAgICAgICBjYXNlIEdldEluZGV4ZWRQcm9wZXJ0
eVN0b3JhZ2U6IHsKLSAgICAgICAgICAgICAgICBpZiAobm9kZS5jaGlsZDEoKSA9PSBjaGlsZDEg
JiYgbm9kZS5hcnJheU1vZGUoKSA9PSBhcnJheU1vZGUpCi0gICAgICAgICAgICAgICAgICAgIHJl
dHVybiBpbmRleDsKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCkgPT0gY2hpbGQx
ICYmIG5vZGUtPmFycmF5TW9kZSgpID09IGFycmF5TW9kZSkKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIG5vZGU7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAKQEAg
LTgyMSw4MSArODA2LDc5IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICAgICAgCiAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIGlmICht
X2dyYXBoLmNsb2JiZXJzV29ybGQoaW5kZXgpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4g
Tm9Ob2RlOworICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLmNsb2JiZXJzV29ybGQobm9kZSkp
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIHJldHVybiBOb05vZGU7CisgICAgICAg
IHJldHVybiAwOwogICAgIH0KICAgICAKLSAgICBOb2RlSW5kZXggZ2V0TXlTY29wZUxvYWRFbGlt
aW5hdGlvbihJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSkKKyAgICBOb2RlKiBnZXRN
eVNjb3BlTG9hZEVsaW1pbmF0aW9uKElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lKQog
ICAgIHsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9pbmRleEluQmxvY2s7IGktLTspIHsK
LSAgICAgICAgICAgIE5vZGVJbmRleCBpbmRleCA9IG1fY3VycmVudEJsb2NrLT5hdChpKTsKLSAg
ICAgICAgICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW2luZGV4XTsKLSAgICAgICAgICAgIGlmICgh
bm9kZS5zaG91bGRHZW5lcmF0ZSgpKQorICAgICAgICAgICAgTm9kZSogbm9kZSA9IG1fY3VycmVu
dEJsb2NrLT5hdChpKTsKKyAgICAgICAgICAgIGlmICghbm9kZS0+c2hvdWxkR2VuZXJhdGUoKSkK
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGlmIChub2RlLmNvZGVPcmln
aW4uaW5saW5lQ2FsbEZyYW1lICE9IGlubGluZUNhbGxGcmFtZSkKKyAgICAgICAgICAgIGlmIChu
b2RlLT5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSAhPSBpbmxpbmVDYWxsRnJhbWUpCiAgICAg
ICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBzd2l0Y2ggKG5vZGUub3AoKSkgewor
ICAgICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CiAgICAgICAgICAgICBjYXNlIENyZWF0
ZUFjdGl2YXRpb246CiAgICAgICAgICAgICAgICAgLy8gVGhpcyBtYXkgY2F1c2UgdXMgdG8gcmV0
dXJuIGEgZGlmZmVyZW50IHNjb3BlLgotICAgICAgICAgICAgICAgIHJldHVybiBOb05vZGU7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgICBjYXNlIEdldE15U2NvcGU6Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIGluZGV4OworICAgICAgICAgICAgICAgIHJldHVybiBub2Rl
OwogICAgICAgICAgICAgY2FzZSBTZXRNeVNjb3BlOgotICAgICAgICAgICAgICAgIHJldHVybiBu
b2RlLmNoaWxkMSgpLmluZGV4KCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGUtPmNoaWxk
MSgpLm5vZGUoKTsKICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIE5vTm9kZTsKKyAgICAg
ICAgcmV0dXJuIDA7CiAgICAgfQogICAgIAotICAgIE5vZGVJbmRleCBnZXRMb2NhbExvYWRFbGlt
aW5hdGlvbihWaXJ0dWFsUmVnaXN0ZXIgbG9jYWwsIE5vZGVJbmRleCYgcmVsZXZhbnRMb2NhbE9w
LCBib29sIGNhcmVBYm91dENsb2JiZXJpbmcpCisgICAgTm9kZSogZ2V0TG9jYWxMb2FkRWxpbWlu
YXRpb24oVmlydHVhbFJlZ2lzdGVyIGxvY2FsLCBOb2RlKiYgcmVsZXZhbnRMb2NhbE9wLCBib29s
IGNhcmVBYm91dENsb2JiZXJpbmcpCiAgICAgewotICAgICAgICByZWxldmFudExvY2FsT3AgPSBO
b05vZGU7CisgICAgICAgIHJlbGV2YW50TG9jYWxPcCA9IDA7CiAgICAgICAgIAogICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSBtX2luZGV4SW5CbG9jazsgaS0tOykgewotICAgICAgICAgICAgTm9k
ZUluZGV4IGluZGV4ID0gbV9jdXJyZW50QmxvY2stPmF0KGkpOwotICAgICAgICAgICAgTm9kZSYg
bm9kZSA9IG1fZ3JhcGhbaW5kZXhdOwotICAgICAgICAgICAgaWYgKCFub2RlLnNob3VsZEdlbmVy
YXRlKCkpCisgICAgICAgICAgICBOb2RlKiBub2RlID0gbV9jdXJyZW50QmxvY2stPmF0KGkpOwor
ICAgICAgICAgICAgaWYgKCFub2RlLT5zaG91bGRHZW5lcmF0ZSgpKQogICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwotICAgICAgICAgICAgc3dpdGNoIChub2RlLm9wKCkpIHsKKyAgICAgICAgICAg
IHN3aXRjaCAobm9kZS0+b3AoKSkgewogICAgICAgICAgICAgY2FzZSBHZXRMb2NhbDoKLSAgICAg
ICAgICAgICAgICBpZiAobm9kZS5sb2NhbCgpID09IGxvY2FsKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIHJlbGV2YW50TG9jYWxPcCA9IGluZGV4OwotICAgICAgICAgICAgICAgICAgICByZXR1cm4g
aW5kZXg7CisgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmxvY2FsKCkgPT0gbG9jYWwpIHsKKyAg
ICAgICAgICAgICAgICAgICAgcmVsZXZhbnRMb2NhbE9wID0gbm9kZTsKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIG5vZGU7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgY2FzZSBHZXRMb2NhbFVubGlua2Vk
OgotICAgICAgICAgICAgICAgIGlmIChub2RlLnVubGlua2VkTG9jYWwoKSA9PSBsb2NhbCkgewot
ICAgICAgICAgICAgICAgICAgICByZWxldmFudExvY2FsT3AgPSBpbmRleDsKLSAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGluZGV4OworICAgICAgICAgICAgICAgIGlmIChub2RlLT51bmxpbmtl
ZExvY2FsKCkgPT0gbG9jYWwpIHsKKyAgICAgICAgICAgICAgICAgICAgcmVsZXZhbnRMb2NhbE9w
ID0gbm9kZTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGU7CiAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIAogICAgICAgICAg
ICAgY2FzZSBTZXRMb2NhbDoKLSAgICAgICAgICAgICAgICBpZiAobm9kZS5sb2NhbCgpID09IGxv
Y2FsKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJlbGV2YW50TG9jYWxPcCA9IGluZGV4OwotICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gbm9kZS5jaGlsZDEoKS5pbmRleCgpOworICAgICAgICAg
ICAgICAgIGlmIChub2RlLT5sb2NhbCgpID09IGxvY2FsKSB7CisgICAgICAgICAgICAgICAgICAg
IHJlbGV2YW50TG9jYWxPcCA9IG5vZGU7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBub2Rl
LT5jaGlsZDEoKS5ub2RlKCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgY2FzZSBQdXRTY29wZWRWYXI6Ci0g
ICAgICAgICAgICAgICAgaWYgKHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4obm9kZS52YXJO
dW1iZXIoKSkgPT0gbG9jYWwpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBOb05vZGU7Cisg
ICAgICAgICAgICAgICAgaWYgKHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4obm9kZS0+dmFy
TnVtYmVyKCkpID09IGxvY2FsKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGRlZmF1bHQ6
Ci0gICAgICAgICAgICAgICAgaWYgKGNhcmVBYm91dENsb2JiZXJpbmcgJiYgbV9ncmFwaC5jbG9i
YmVyc1dvcmxkKGluZGV4KSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5vTm9kZTsKKyAg
ICAgICAgICAgICAgICBpZiAoY2FyZUFib3V0Q2xvYmJlcmluZyAmJiBtX2dyYXBoLmNsb2JiZXJz
V29ybGQobm9kZSkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIHJldHVybiBOb05v
ZGU7CisgICAgICAgIHJldHVybiAwOwogICAgIH0KICAgICAKICAgICBzdHJ1Y3QgU2V0TG9jYWxT
dG9yZUVsaW1pbmF0aW9uUmVzdWx0IHsKQEAgLTkxMSw1MSArODk0LDUwIEBAIHByaXZhdGU6CiAg
ICAgICAgIGJvb2wgbWF5Q2xvYmJlcldvcmxkOwogICAgIH07CiAgICAgU2V0TG9jYWxTdG9yZUVs
aW1pbmF0aW9uUmVzdWx0IHNldExvY2FsU3RvcmVFbGltaW5hdGlvbigKLSAgICAgICAgVmlydHVh
bFJlZ2lzdGVyIGxvY2FsLCBOb2RlSW5kZXggZXhwZWN0ZWROb2RlSW5kZXgpCisgICAgICAgIFZp
cnR1YWxSZWdpc3RlciBsb2NhbCwgTm9kZSogZXhwZWN0ZWROb2RlSW5kZXgpCiAgICAgewogICAg
ICAgICBTZXRMb2NhbFN0b3JlRWxpbWluYXRpb25SZXN1bHQgcmVzdWx0OwogICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSBtX2luZGV4SW5CbG9jazsgaS0tOykgewotICAgICAgICAgICAgTm9kZUlu
ZGV4IGluZGV4ID0gbV9jdXJyZW50QmxvY2stPmF0KGkpOwotICAgICAgICAgICAgTm9kZSYgbm9k
ZSA9IG1fZ3JhcGhbaW5kZXhdOwotICAgICAgICAgICAgaWYgKCFub2RlLnNob3VsZEdlbmVyYXRl
KCkpCisgICAgICAgICAgICBOb2RlKiBub2RlID0gbV9jdXJyZW50QmxvY2stPmF0KGkpOworICAg
ICAgICAgICAgaWYgKCFub2RlLT5zaG91bGRHZW5lcmF0ZSgpKQogICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwotICAgICAgICAgICAgc3dpdGNoIChub2RlLm9wKCkpIHsKKyAgICAgICAgICAgIHN3
aXRjaCAobm9kZS0+b3AoKSkgewogICAgICAgICAgICAgY2FzZSBHZXRMb2NhbDoKICAgICAgICAg
ICAgIGNhc2UgRmx1c2g6Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGUubG9jYWwoKSA9PSBsb2Nh
bCkKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+bG9jYWwoKSA9PSBsb2NhbCkKICAgICAgICAg
ICAgICAgICAgICAgcmVzdWx0Lm1heUJlQWNjZXNzZWQgPSB0cnVlOwogICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgY2FzZSBHZXRMb2NhbFVubGlu
a2VkOgotICAgICAgICAgICAgICAgIGlmIChub2RlLnVubGlua2VkTG9jYWwoKSA9PSBsb2NhbCkK
KyAgICAgICAgICAgICAgICBpZiAobm9kZS0+dW5saW5rZWRMb2NhbCgpID09IGxvY2FsKQogICAg
ICAgICAgICAgICAgICAgICByZXN1bHQubWF5QmVBY2Nlc3NlZCA9IHRydWU7CiAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBjYXNlIFNldExvY2Fs
OiB7Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGUubG9jYWwoKSAhPSBsb2NhbCkKKyAgICAgICAg
ICAgICAgICBpZiAobm9kZS0+bG9jYWwoKSAhPSBsb2NhbCkKICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICAgICAgaWYgKGluZGV4ICE9IGV4cGVjdGVkTm9kZUluZGV4KQog
ICAgICAgICAgICAgICAgICAgICByZXN1bHQubWF5QmVBY2Nlc3NlZCA9IHRydWU7Ci0gICAgICAg
ICAgICAgICAgaWYgKG1fZ3JhcGhbaW5kZXhdLnJlZkNvdW50KCkgPiAxKQorICAgICAgICAgICAg
ICAgIGlmIChub2RlLT5yZWZDb3VudCgpID4gMSkKICAgICAgICAgICAgICAgICAgICAgcmVzdWx0
Lm1heUJlQWNjZXNzZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBjYXNlIEdldFNjb3Bl
ZFZhcjoKLSAgICAgICAgICAgICAgICBpZiAoc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihu
b2RlLnZhck51bWJlcigpKSA9PSBsb2NhbCkKKyAgICAgICAgICAgICAgICBpZiAoc3RhdGljX2Nh
c3Q8VmlydHVhbFJlZ2lzdGVyPihub2RlLT52YXJOdW1iZXIoKSkgPT0gbG9jYWwpCiAgICAgICAg
ICAgICAgICAgICAgIHJlc3VsdC5tYXlCZUFjY2Vzc2VkID0gdHJ1ZTsKICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGNhc2UgR2V0TXlTY29wZToK
ICAgICAgICAgICAgIGNhc2UgU2tpcFRvcFNjb3BlOgotICAgICAgICAgICAgICAgIGlmIChtX2dy
YXBoLnVuY2hlY2tlZEFjdGl2YXRpb25SZWdpc3RlckZvcihub2RlLmNvZGVPcmlnaW4pID09IGxv
Y2FsKQorICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLnVuY2hlY2tlZEFjdGl2YXRpb25SZWdp
c3RlckZvcihub2RlLT5jb2RlT3JpZ2luKSA9PSBsb2NhbCkKICAgICAgICAgICAgICAgICAgICAg
cmVzdWx0Lm1heUJlQWNjZXNzZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgICAgIAogICAgICAgICAgICAgY2FzZSBDaGVja0FyZ3VtZW50c05vdENyZWF0ZWQ6
CiAgICAgICAgICAgICBjYXNlIEdldE15QXJndW1lbnRzTGVuZ3RoOgogICAgICAgICAgICAgY2Fz
ZSBHZXRNeUFyZ3VtZW50c0xlbmd0aFNhZmU6Ci0gICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGgu
dW5jaGVja2VkQXJndW1lbnRzUmVnaXN0ZXJGb3Iobm9kZS5jb2RlT3JpZ2luKSA9PSBsb2NhbCkK
KyAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC51bmNoZWNrZWRBcmd1bWVudHNSZWdpc3RlckZv
cihub2RlLT5jb2RlT3JpZ2luKSA9PSBsb2NhbCkKICAgICAgICAgICAgICAgICAgICAgcmVzdWx0
Lm1heUJlQWNjZXNzZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgICAgIApAQCAtOTY2LDcgKzk0OCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgCiAg
ICAgICAgICAgICBjYXNlIEdldEJ5VmFsOgogICAgICAgICAgICAgICAgIC8vIElmIHRoaXMgaXMg
YWNjZXNzaW5nIGFyZ3VtZW50cyB0aGVuIGl0J3MgcG90ZW50aWFsbHkgYWNjZXNzaW5nIGxvY2Fs
cy4KLSAgICAgICAgICAgICAgICBpZiAobV9ncmFwaFtub2RlLmNoaWxkMSgpXS5zaG91bGRTcGVj
dWxhdGVBcmd1bWVudHMoKSkKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnNo
b3VsZFNwZWN1bGF0ZUFyZ3VtZW50cygpKQogICAgICAgICAgICAgICAgICAgICByZXN1bHQubWF5
QmVBY2Nlc3NlZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAg
ICAgCkBAIC05ODMsOCArOTY1LDggQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGRlZmF1bHQ6CiAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXN1bHQu
bWF5RXhpdCB8PSBub2RlLmNhbkV4aXQoKTsKLSAgICAgICAgICAgIHJlc3VsdC5tYXlDbG9iYmVy
V29ybGQgfD0gbV9ncmFwaC5jbG9iYmVyc1dvcmxkKGluZGV4KTsKKyAgICAgICAgICAgIHJlc3Vs
dC5tYXlFeGl0IHw9IG5vZGUtPmNhbkV4aXQoKTsKKyAgICAgICAgICAgIHJlc3VsdC5tYXlDbG9i
YmVyV29ybGQgfD0gbV9ncmFwaC5jbG9iYmVyc1dvcmxkKG5vZGUpOwogICAgICAgICB9CiAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIC8vIEJlIHNhZmUgaW4g
cmVsZWFzZSBtb2RlLgpAQCAtOTk5LDYyICs5ODEsNjEgQEAgcHJpdmF0ZToKICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgCiAgICAgICAgIC8vIENoZWNrIGlmIHRoZXJlIGlzIGFueSByZXBs
YWNlbWVudC4KLSAgICAgICAgTm9kZUluZGV4IHJlcGxhY2VtZW50ID0gbV9ncmFwaFtjaGlsZC5p
bmRleCgpXS5yZXBsYWNlbWVudDsKLSAgICAgICAgaWYgKHJlcGxhY2VtZW50ID09IE5vTm9kZSkK
KyAgICAgICAgTm9kZSogcmVwbGFjZW1lbnQgPSBjaGlsZC0+cmVwbGFjZW1lbnQ7CisgICAgICAg
IGlmICghcmVwbGFjZW1lbnQpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIAotICAgICAg
ICBjaGlsZC5zZXRJbmRleChyZXBsYWNlbWVudCk7CisgICAgICAgIGNoaWxkLnNldE5vZGUocmVw
bGFjZW1lbnQpOwogICAgICAgICAKICAgICAgICAgLy8gVGhlcmUgaXMgZGVmaW5pdGVseSBhIHJl
cGxhY2VtZW50LiBBc3NlcnQgdGhhdCB0aGUgcmVwbGFjZW1lbnQgZG9lcyBub3QKICAgICAgICAg
Ly8gaGF2ZSBhIHJlcGxhY2VtZW50LgotICAgICAgICBBU1NFUlQobV9ncmFwaFtjaGlsZC5pbmRl
eCgpXS5yZXBsYWNlbWVudCA9PSBOb05vZGUpOworICAgICAgICBBU1NFUlQoIWNoaWxkLT5yZXBs
YWNlbWVudCk7CiAgICAgICAgIAogICAgICAgICBpZiAoYWRkUmVmKQogICAgICAgICAgICAgbV9n
cmFwaC5yZWYoY2hpbGQpOwogICAgIH0KICAgICAKLSAgICB2b2lkIGVsaW1pbmF0ZUlycmVsZXZh
bnRQaGFudG9tQ2hpbGRyZW4oTm9kZSYgbm9kZSkKKyAgICB2b2lkIGVsaW1pbmF0ZUlycmVsZXZh
bnRQaGFudG9tQ2hpbGRyZW4oTm9kZSogbm9kZSkKICAgICB7Ci0gICAgICAgIEFTU0VSVChub2Rl
Lm9wKCkgPT0gUGhhbnRvbSk7CisgICAgICAgIEFTU0VSVChub2RlLT5vcCgpID09IFBoYW50b20p
OwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgQWRqYWNlbmN5TGlzdDo6U2l6ZTsg
KytpKSB7Ci0gICAgICAgICAgICBFZGdlIGVkZ2UgPSBub2RlLmNoaWxkcmVuLmNoaWxkKGkpOwor
ICAgICAgICAgICAgRWRnZSBlZGdlID0gbm9kZS0+Y2hpbGRyZW4uY2hpbGQoaSk7CiAgICAgICAg
ICAgICBpZiAoIWVkZ2UpCiAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBp
ZiAobV9ncmFwaFtlZGdlXS5mbGFncygpICYgTm9kZVJlbGV2YW50VG9PU1IpCisgICAgICAgICAg
ICBpZiAoZWRnZS0+ZmxhZ3MoKSAmIE5vZGVSZWxldmFudFRvT1NSKQogICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwogICAgICAgICAgICAgCiAjaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElP
Tl9WRVJCT1NFKQotICAgICAgICAgICAgZGF0YUxvZygiICAgRWxpbWluYXRpbmcgZWRnZSBAIiwg
bV9jb21waWxlSW5kZXgsICIgLT4gQCIsIGVkZ2UuaW5kZXgoKSk7CisgICAgICAgICAgICBkYXRh
TG9nKCIgICBFbGltaW5hdGluZyBlZGdlIEAiLCBtX2N1cnJlbnROb2RlLT5pbmRleCgpLCAiIC0+
IEAiLCBlZGdlLT5pbmRleCgpKTsKICNlbmRpZgogICAgICAgICAgICAgbV9ncmFwaC5kZXJlZihl
ZGdlKTsKLSAgICAgICAgICAgIG5vZGUuY2hpbGRyZW4ucmVtb3ZlRWRnZUZyb21CYWcoaS0tKTsK
KyAgICAgICAgICAgIG5vZGUtPmNoaWxkcmVuLnJlbW92ZUVkZ2VGcm9tQmFnKGktLSk7CiAgICAg
ICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOwogICAgICAgICB9CiAgICAgfQogICAgIAogICAgIGVu
dW0gUHJlZGljdGlvbkhhbmRsaW5nTW9kZSB7IFJlcXVpcmVTYW1lUHJlZGljdGlvbiwgQWxsb3dQ
cmVkaWN0aW9uTWlzbWF0Y2ggfTsKLSAgICBib29sIHNldFJlcGxhY2VtZW50KE5vZGVJbmRleCBy
ZXBsYWNlbWVudCwgUHJlZGljdGlvbkhhbmRsaW5nTW9kZSBwcmVkaWN0aW9uSGFuZGxpbmdNb2Rl
ID0gUmVxdWlyZVNhbWVQcmVkaWN0aW9uKQorICAgIGJvb2wgc2V0UmVwbGFjZW1lbnQoTm9kZSog
cmVwbGFjZW1lbnQsIFByZWRpY3Rpb25IYW5kbGluZ01vZGUgcHJlZGljdGlvbkhhbmRsaW5nTW9k
ZSA9IFJlcXVpcmVTYW1lUHJlZGljdGlvbikKICAgICB7Ci0gICAgICAgIGlmIChyZXBsYWNlbWVu
dCA9PSBOb05vZGUpCisgICAgICAgIGlmICghcmVwbGFjZW1lbnQpCiAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgICAgIAogICAgICAgICAvLyBCZSBzYWZlLiBEb24ndCB0cnkgdG8gcGVy
Zm9ybSByZXBsYWNlbWVudHMgaWYgdGhlIHByZWRpY3Rpb25zIGRvbid0CiAgICAgICAgIC8vIGFn
cmVlLgogICAgICAgICBpZiAocHJlZGljdGlvbkhhbmRsaW5nTW9kZSA9PSBSZXF1aXJlU2FtZVBy
ZWRpY3Rpb24KLSAgICAgICAgICAgICYmIG1fZ3JhcGhbbV9jb21waWxlSW5kZXhdLnByZWRpY3Rp
b24oKSAhPSBtX2dyYXBoW3JlcGxhY2VtZW50XS5wcmVkaWN0aW9uKCkpCisgICAgICAgICAgICAm
JiBtX2N1cnJlbnROb2RlLT5wcmVkaWN0aW9uKCkgIT0gcmVwbGFjZW1lbnQtPnByZWRpY3Rpb24o
KSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgCiAjaWYgREZHX0VOQUJMRShE
RUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQotICAgICAgICBkYXRhTG9nRigiICAgUmVwbGFjaW5n
IEAldSAtPiBAJXUiLCBtX2NvbXBpbGVJbmRleCwgcmVwbGFjZW1lbnQpOworICAgICAgICBkYXRh
TG9nRigiICAgUmVwbGFjaW5nIEAldSAtPiBAJXUiLCBtX2NvbXBpbGVOb2RlLT5pbmRleCgpLCBy
ZXBsYWNlbWVudC0+aW5kZXgoKSk7CiAjZW5kaWYKICAgICAgICAgCi0gICAgICAgIE5vZGUmIG5v
ZGUgPSBtX2dyYXBoW21fY29tcGlsZUluZGV4XTsKLSAgICAgICAgbm9kZS5zZXRPcEFuZERlZmF1
bHRGbGFncyhQaGFudG9tKTsKLSAgICAgICAgbm9kZS5zZXRSZWZDb3VudCgxKTsKLSAgICAgICAg
ZWxpbWluYXRlSXJyZWxldmFudFBoYW50b21DaGlsZHJlbihub2RlKTsKKyAgICAgICAgbV9jdXJy
ZW50Tm9kZS0+c2V0T3BBbmREZWZhdWx0RmxhZ3MoUGhhbnRvbSk7CisgICAgICAgIG1fY3VycmVu
dE5vZGUtPnNldFJlZkNvdW50KDEpOworICAgICAgICBlbGltaW5hdGVJcnJlbGV2YW50UGhhbnRv
bUNoaWxkcmVuKG1fY3VycmVudE5vZGUpOwogICAgICAgICAKICAgICAgICAgLy8gQXQgdGhpcyBw
b2ludCB3ZSB3aWxsIGVsaW1pbmF0ZSBhbGwgcmVmZXJlbmNlcyB0byB0aGlzIG5vZGUuCi0gICAg
ICAgIG1fZ3JhcGhbbV9jb21waWxlSW5kZXhdLnJlcGxhY2VtZW50ID0gcmVwbGFjZW1lbnQ7Cisg
ICAgICAgIG1fY3VycmVudE5vZGUtPnJlcGxhY2VtZW50ID0gcmVwbGFjZW1lbnQ7CiAgICAgICAg
IAogICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOwogICAgICAgICAKQEAgLTEwNjcsNTEgKzEwNDgs
NDkgQEAgcHJpdmF0ZToKICAgICAgICAgZGF0YUxvZ0YoIiAgIEVsaW1pbmF0aW5nIEAldSIsIG1f
Y29tcGlsZUluZGV4KTsKICNlbmRpZgogICAgICAgICAKLSAgICAgICAgTm9kZSYgbm9kZSA9IG1f
Z3JhcGhbbV9jb21waWxlSW5kZXhdOwotICAgICAgICBBU1NFUlQobm9kZS5yZWZDb3VudCgpID09
IDEpOwotICAgICAgICBBU1NFUlQobm9kZS5tdXN0R2VuZXJhdGUoKSk7Ci0gICAgICAgIG5vZGUu
c2V0T3BBbmREZWZhdWx0RmxhZ3MoUGhhbnRvbSk7Ci0gICAgICAgIGVsaW1pbmF0ZUlycmVsZXZh
bnRQaGFudG9tQ2hpbGRyZW4obm9kZSk7CisgICAgICAgIEFTU0VSVChtX2N1cnJlbnROb2RlLT5y
ZWZDb3VudCgpID09IDEpOworICAgICAgICBBU1NFUlQobV9jdXJyZW50Tm9kZS0+bXVzdEdlbmVy
YXRlKCkpOworICAgICAgICBtX2N1cnJlbnROb2RlLT5zZXRPcEFuZERlZmF1bHRGbGFncyhQaGFu
dG9tKTsKKyAgICAgICAgZWxpbWluYXRlSXJyZWxldmFudFBoYW50b21DaGlsZHJlbihtX2N1cnJl
bnROb2RlKTsKICAgICAgICAgCiAgICAgICAgIG1fY2hhbmdlZCA9IHRydWU7CiAgICAgfQogICAg
IAotICAgIHZvaWQgZWxpbWluYXRlKE5vZGVJbmRleCBub2RlSW5kZXgsIE5vZGVUeXBlIHBoYW50
b21UeXBlID0gUGhhbnRvbSkKKyAgICB2b2lkIGVsaW1pbmF0ZShOb2RlKiBub2RlLCBOb2RlVHlw
ZSBwaGFudG9tVHlwZSA9IFBoYW50b20pCiAgICAgewotICAgICAgICBpZiAobm9kZUluZGV4ID09
IE5vTm9kZSkKKyAgICAgICAgaWYgKCFub2RlKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICBOb2RlJiBub2RlID0gbV9ncmFwaFtub2RlSW5kZXhdOwotICAgICAgICBpZiAobm9kZS5yZWZD
b3VudCgpICE9IDEpCisgICAgICAgIGlmIChub2RlLT5yZWZDb3VudCgpICE9IDEpCiAgICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIEFTU0VSVChub2RlLm11c3RHZW5lcmF0ZSgpKTsKLSAgICAg
ICAgbm9kZS5zZXRPcEFuZERlZmF1bHRGbGFncyhwaGFudG9tVHlwZSk7CisgICAgICAgIEFTU0VS
VChub2RlLT5tdXN0R2VuZXJhdGUoKSk7CisgICAgICAgIG5vZGUtPnNldE9wQW5kRGVmYXVsdEZs
YWdzKHBoYW50b21UeXBlKTsKICAgICAgICAgaWYgKHBoYW50b21UeXBlID09IFBoYW50b20pCiAg
ICAgICAgICAgICBlbGltaW5hdGVJcnJlbGV2YW50UGhhbnRvbUNoaWxkcmVuKG5vZGUpOwogICAg
ICAgICAKICAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBw
ZXJmb3JtTm9kZUNTRShOb2RlJiBub2RlKQorICAgIHZvaWQgcGVyZm9ybU5vZGVDU0UoTm9kZSog
bm9kZSkKICAgICB7Ci0gICAgICAgIGJvb2wgc2hvdWxkR2VuZXJhdGUgPSBub2RlLnNob3VsZEdl
bmVyYXRlKCk7CisgICAgICAgIGJvb2wgc2hvdWxkR2VuZXJhdGUgPSBub2RlLT5zaG91bGRHZW5l
cmF0ZSgpOwogCi0gICAgICAgIGlmIChub2RlLmZsYWdzKCkgJiBOb2RlSGFzVmFyQXJncykgewot
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBjaGlsZElkeCA9IG5vZGUuZmlyc3RDaGlsZCgpOyBj
aGlsZElkeCA8IG5vZGUuZmlyc3RDaGlsZCgpICsgbm9kZS5udW1DaGlsZHJlbigpOyBjaGlsZElk
eCsrKQorICAgICAgICBpZiAobm9kZS0+ZmxhZ3MoKSAmIE5vZGVIYXNWYXJBcmdzKSB7CisgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGNoaWxkSWR4ID0gbm9kZS0+Zmlyc3RDaGlsZCgpOyBjaGls
ZElkeCA8IG5vZGUtPmZpcnN0Q2hpbGQoKSArIG5vZGUtPm51bUNoaWxkcmVuKCk7IGNoaWxkSWR4
KyspCiAgICAgICAgICAgICAgICAgcGVyZm9ybVN1YnN0aXR1dGlvbihtX2dyYXBoLm1fdmFyQXJn
Q2hpbGRyZW5bY2hpbGRJZHhdLCBzaG91bGRHZW5lcmF0ZSk7CiAgICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICBwZXJmb3JtU3Vic3RpdHV0aW9uKG5vZGUuY2hpbGRyZW4uY2hpbGQxKCksIHNo
b3VsZEdlbmVyYXRlKTsKLSAgICAgICAgICAgIHBlcmZvcm1TdWJzdGl0dXRpb24obm9kZS5jaGls
ZHJlbi5jaGlsZDIoKSwgc2hvdWxkR2VuZXJhdGUpOwotICAgICAgICAgICAgcGVyZm9ybVN1YnN0
aXR1dGlvbihub2RlLmNoaWxkcmVuLmNoaWxkMygpLCBzaG91bGRHZW5lcmF0ZSk7CisgICAgICAg
ICAgICBwZXJmb3JtU3Vic3RpdHV0aW9uKG5vZGUtPmNoaWxkcmVuLmNoaWxkMSgpLCBzaG91bGRH
ZW5lcmF0ZSk7CisgICAgICAgICAgICBwZXJmb3JtU3Vic3RpdHV0aW9uKG5vZGUtPmNoaWxkcmVu
LmNoaWxkMigpLCBzaG91bGRHZW5lcmF0ZSk7CisgICAgICAgICAgICBwZXJmb3JtU3Vic3RpdHV0
aW9uKG5vZGUtPmNoaWxkcmVuLmNoaWxkMygpLCBzaG91bGRHZW5lcmF0ZSk7CiAgICAgICAgIH0K
ICAgICAgICAgCi0gICAgICAgIGlmIChub2RlLm9wKCkgPT0gU2V0TG9jYWwpCi0gICAgICAgICAg
ICBtX2dyYXBoW25vZGUuY2hpbGQxKCldLm1lcmdlRmxhZ3MoTm9kZVJlbGV2YW50VG9PU1IpOwor
ICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBTZXRMb2NhbCkKKyAgICAgICAgICAgIG5vZGUtPmNo
aWxkMSgpLT5tZXJnZUZsYWdzKE5vZGVSZWxldmFudFRvT1NSKTsKICAgICAgICAgCiAgICAgICAg
IGlmICghc2hvdWxkR2VuZXJhdGUpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIAogI2lm
IERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKLSAgICAgICAgZGF0YUxvZ0Yo
IiAgICVzIEAldTogIiwgR3JhcGg6Om9wTmFtZShtX2dyYXBoW21fY29tcGlsZUluZGV4XS5vcCgp
KSwgbV9jb21waWxlSW5kZXgpOworICAgICAgICBkYXRhTG9nRigiICAgJXMgQCV1OiAiLCBHcmFw
aDo6b3BOYW1lKG5vZGUtPm9wKCkpLCBub2RlLT5pbmRleCgpKTsKICNlbmRpZgogICAgICAgICAK
ICAgICAgICAgLy8gTk9URTogdGhlcmUgYXJlIHNvbWUgbm9kZXMgdGhhdCB3ZSBkZWxpYmVyYXRl
bHkgZG9uJ3QgQ1NFIGV2ZW4gdGhvdWdoIHdlCkBAIC0xMTIzLDEwICsxMTAyLDEwIEBAIHByaXZh
dGU6CiAgICAgICAgIC8vIFRvUHJpbWl0aXZlLCBidXQgd2UgY291bGQgY2hhbmdlIHRoYXQgd2l0
aCBzb21lIHNwZWN1bGF0aW9ucyBpZiB3ZSByZWFsbHkKICAgICAgICAgLy8gbmVlZGVkIHRvLgog
ICAgICAgICAKLSAgICAgICAgc3dpdGNoIChub2RlLm9wKCkpIHsKKyAgICAgICAgc3dpdGNoIChu
b2RlLT5vcCgpKSB7CiAgICAgICAgIAogICAgICAgICBjYXNlIElkZW50aXR5OgotICAgICAgICAg
ICAgc2V0UmVwbGFjZW1lbnQobm9kZS5jaGlsZDEoKS5pbmRleCgpKTsKKyAgICAgICAgICAgIHNl
dFJlcGxhY2VtZW50KG5vZGUtPmNoaWxkMSgpLm5vZGUoKSk7CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgIAogICAgICAgICAvLyBIYW5kbGUgdGhlIHB1cmUgbm9kZXMuIFRoZXNlIG5v
ZGVzIG5ldmVyIGhhdmUgYW55IHNpZGUtZWZmZWN0cy4KQEAgLTExNjYsNDEgKzExNDUsNDEgQEAg
cHJpdmF0ZToKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAgICAgIGNhc2Ug
R2V0Q2FsbGVlOgotICAgICAgICAgICAgc2V0UmVwbGFjZW1lbnQoZ2V0Q2FsbGVlTG9hZEVsaW1p
bmF0aW9uKG5vZGUuY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpKTsKKyAgICAgICAgICAgIHNl
dFJlcGxhY2VtZW50KGdldENhbGxlZUxvYWRFbGltaW5hdGlvbihub2RlLT5jb2RlT3JpZ2luLmlu
bGluZUNhbGxGcmFtZSkpOwogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSBHZXRM
b2NhbDogewotICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0Rh
dGEgPSBub2RlLnZhcmlhYmxlQWNjZXNzRGF0YSgpOworICAgICAgICAgICAgVmFyaWFibGVBY2Nl
c3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsK
ICAgICAgICAgICAgIGlmICghdmFyaWFibGVBY2Nlc3NEYXRhLT5pc0NhcHR1cmVkKCkpCiAgICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBOb2RlSW5kZXggcmVsZXZhbnRMb2NhbE9w
OwotICAgICAgICAgICAgTm9kZUluZGV4IHBvc3NpYmxlUmVwbGFjZW1lbnQgPSBnZXRMb2NhbExv
YWRFbGltaW5hdGlvbih2YXJpYWJsZUFjY2Vzc0RhdGEtPmxvY2FsKCksIHJlbGV2YW50TG9jYWxP
cCwgdmFyaWFibGVBY2Nlc3NEYXRhLT5pc0NhcHR1cmVkKCkpOwotICAgICAgICAgICAgaWYgKHJl
bGV2YW50TG9jYWxPcCA9PSBOb05vZGUpCisgICAgICAgICAgICBOb2RlKiByZWxldmFudExvY2Fs
T3A7CisgICAgICAgICAgICBOb2RlKiBwb3NzaWJsZVJlcGxhY2VtZW50ID0gZ2V0TG9jYWxMb2Fk
RWxpbWluYXRpb24odmFyaWFibGVBY2Nlc3NEYXRhLT5sb2NhbCgpLCByZWxldmFudExvY2FsT3As
IHZhcmlhYmxlQWNjZXNzRGF0YS0+aXNDYXB0dXJlZCgpKTsKKyAgICAgICAgICAgIGlmICghcmVs
ZXZhbnRMb2NhbE9wKQogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgaWYgKG1f
Z3JhcGhbcmVsZXZhbnRMb2NhbE9wXS5vcCgpICE9IEdldExvY2FsVW5saW5rZWQKLSAgICAgICAg
ICAgICAgICAmJiBtX2dyYXBoW3JlbGV2YW50TG9jYWxPcF0udmFyaWFibGVBY2Nlc3NEYXRhKCkg
IT0gdmFyaWFibGVBY2Nlc3NEYXRhKQorICAgICAgICAgICAgaWYgKHJlbGV2YW50TG9jYWxPcC0+
b3AoKSAhPSBHZXRMb2NhbFVubGlua2VkCisgICAgICAgICAgICAgICAgJiYgcmVsZXZhbnRMb2Nh
bE9wLT52YXJpYWJsZUFjY2Vzc0RhdGEoKSAhPSB2YXJpYWJsZUFjY2Vzc0RhdGEpCiAgICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBOb2RlSW5kZXggcGhpSW5kZXggPSBub2RlLmNo
aWxkMSgpLmluZGV4KCk7CisgICAgICAgICAgICBOb2RlKiBwaGkgPSBub2RlLT5jaGlsZDEoKS5u
b2RlKCk7CiAgICAgICAgICAgICBpZiAoIXNldFJlcGxhY2VtZW50KHBvc3NpYmxlUmVwbGFjZW1l
bnQpKQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgLy8gSWYgdGhlIEdldExv
Y2FsIHdlIHJlcGxhY2VkIHVzZWQgdG8gcmVmZXIgdG8gYSBTZXRMb2NhbCwgdGhlbiBpdCBub3cK
ICAgICAgICAgICAgIC8vIHNob3VsZCByZWZlciB0byB0aGUgY2hpbGQgb2YgdGhlIFNldExvY2Fs
IGluc3RlYWQuCi0gICAgICAgICAgICBpZiAobV9ncmFwaFtwaGlJbmRleF0ub3AoKSA9PSBTZXRM
b2NhbCkgewotICAgICAgICAgICAgICAgIEFTU0VSVChub2RlLmNoaWxkMSgpLmluZGV4KCkgPT0g
cGhpSW5kZXgpOwotICAgICAgICAgICAgICAgIG1fZ3JhcGguY2hhbmdlRWRnZShub2RlLmNoaWxk
cmVuLmNoaWxkMSgpLCBtX2dyYXBoW3BoaUluZGV4XS5jaGlsZDEoKSk7CisgICAgICAgICAgICBp
ZiAocGhpLT5vcCgpID09IFNldExvY2FsKSB7CisgICAgICAgICAgICAgICAgQVNTRVJUKG5vZGUt
PmNoaWxkMSgpID09IHBoaSk7CisgICAgICAgICAgICAgICAgbV9ncmFwaC5jaGFuZ2VFZGdlKG5v
ZGUtPmNoaWxkcmVuLmNoaWxkMSgpLCBwaGktPmNoaWxkMSgpKTsKICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIE5vZGVJbmRleCBvbGRUYWlsSW5kZXggPSBtX2N1cnJlbnRCbG9jay0+dmFyaWFi
bGVzQXRUYWlsLm9wZXJhbmQoCisgICAgICAgICAgICBOb2RlKiBvbGRUYWlsID0gbV9jdXJyZW50
QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKAogICAgICAgICAgICAgICAgIHZhcmlhYmxl
QWNjZXNzRGF0YS0+bG9jYWwoKSk7Ci0gICAgICAgICAgICBpZiAob2xkVGFpbEluZGV4ID09IG1f
Y29tcGlsZUluZGV4KSB7CisgICAgICAgICAgICBpZiAob2xkVGFpbCA9PSBub2RlKSB7CiAgICAg
ICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKHZhcmlh
YmxlQWNjZXNzRGF0YS0+bG9jYWwoKSkgPQogICAgICAgICAgICAgICAgICAgICByZWxldmFudExv
Y2FsT3A7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgLy8gTWFpbnRhaW4gZ3Jh
cGggaW50ZWdyaXR5OiBzaW5jZSB3ZSdyZSByZXBsYWNpbmcgYSBHZXRMb2NhbCB3aXRoIGEgR2V0
TG9jYWxVbmxpbmtlZCwKICAgICAgICAgICAgICAgICAvLyBtYWtlIHN1cmUgdGhhdCB0aGUgR2V0
TG9jYWxVbmxpbmtlZCBpcyBub3cgbGlua2VkLgotICAgICAgICAgICAgICAgIGlmIChtX2dyYXBo
W3JlbGV2YW50TG9jYWxPcF0ub3AoKSA9PSBHZXRMb2NhbFVubGlua2VkKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIG1fZ3JhcGhbcmVsZXZhbnRMb2NhbE9wXS5zZXRPcChHZXRMb2NhbCk7Ci0gICAg
ICAgICAgICAgICAgICAgIG1fZ3JhcGhbcmVsZXZhbnRMb2NhbE9wXS5jaGlsZHJlbi5jaGlsZDEo
KSA9IEVkZ2UocGhpSW5kZXgpOwotICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLnJlZihwaGlJ
bmRleCk7CisgICAgICAgICAgICAgICAgaWYgKHJlbGV2YW50TG9jYWxPcC0+b3AoKSA9PSBHZXRM
b2NhbFVubGlua2VkKSB7CisgICAgICAgICAgICAgICAgICAgIHJlbGV2YW50TG9jYWxPcC0+c2V0
T3AoR2V0TG9jYWwpOworICAgICAgICAgICAgICAgICAgICByZWxldmFudExvY2FsT3AtPmNoaWxk
cmVuLmNoaWxkMSgpID0gRWRnZShwaGkpOworICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLnJl
ZihwaGkpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIG1f
Y2hhbmdlZCA9IHRydWU7CkBAIC0xMjA4LDE5ICsxMTg3LDE4IEBAIHByaXZhdGU6CiAgICAgICAg
IH0KICAgICAgICAgICAgIAogICAgICAgICBjYXNlIEdldExvY2FsVW5saW5rZWQ6IHsKLSAgICAg
ICAgICAgIE5vZGVJbmRleCByZWxldmFudExvY2FsT3BJZ25vcmVkOworICAgICAgICAgICAgTm9k
ZSogcmVsZXZhbnRMb2NhbE9wSWdub3JlZDsKICAgICAgICAgICAgIHNldFJlcGxhY2VtZW50KGdl
dExvY2FsTG9hZEVsaW1pbmF0aW9uKG5vZGUudW5saW5rZWRMb2NhbCgpLCByZWxldmFudExvY2Fs
T3BJZ25vcmVkLCB0cnVlKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAg
ICAgICAgCiAgICAgICAgIGNhc2UgRmx1c2g6IHsKLSAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNz
RGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhID0gbm9kZS52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKKyAg
ICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhID0gbm9kZS0+
dmFyaWFibGVBY2Nlc3NEYXRhKCk7CiAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgbG9jYWwg
PSB2YXJpYWJsZUFjY2Vzc0RhdGEtPmxvY2FsKCk7Ci0gICAgICAgICAgICBOb2RlSW5kZXggcmVw
bGFjZW1lbnRJbmRleCA9IG5vZGUuY2hpbGQxKCkuaW5kZXgoKTsKLSAgICAgICAgICAgIE5vZGUm
IHJlcGxhY2VtZW50ID0gbV9ncmFwaFtyZXBsYWNlbWVudEluZGV4XTsKLSAgICAgICAgICAgIGlm
IChyZXBsYWNlbWVudC5vcCgpICE9IFNldExvY2FsKQorICAgICAgICAgICAgTm9kZSogcmVwbGFj
ZW1lbnQgPSBub2RlLT5jaGlsZDEoKS5ub2RlKCk7CisgICAgICAgICAgICBpZiAocmVwbGFjZW1l
bnQtPm9wKCkgIT0gU2V0TG9jYWwpCiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICBBU1NFUlQocmVwbGFjZW1lbnQudmFyaWFibGVBY2Nlc3NEYXRhKCkgPT0gdmFyaWFibGVBY2Nl
c3NEYXRhKTsKKyAgICAgICAgICAgIEFTU0VSVChyZXBsYWNlbWVudC0+dmFyaWFibGVBY2Nlc3NE
YXRhKCkgPT0gdmFyaWFibGVBY2Nlc3NEYXRhKTsKICAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBz
aG91bGQgYmUgYWJsZSB0byByZW1vdmUgU2V0TG9jYWxzIHRoYXQgY2FuIGV4aXQ7IHdlIGp1c3Qg
bmVlZAogICAgICAgICAgICAgLy8gdG8gcmVwbGFjZSB0aGVtIHdpdGggYXBwcm9wcmlhdGUgdHlw
ZSBjaGVja3MuCiAgICAgICAgICAgICBpZiAobV9ncmFwaC5tX2ZpeHBvaW50U3RhdGUgPT0gRml4
cG9pbnROb3RDb252ZXJnZWQpIHsKQEAgLTEyNDAsMjYgKzEyMTgsMjYgQEAgcHJpdmF0ZToKICAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgaWYgKHJlcGxhY2VtZW50LmNhbkV4aXQoKSkK
KyAgICAgICAgICAgICAgICBpZiAocmVwbGFjZW1lbnQtPmNhbkV4aXQoKSkKICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBTZXRMb2NhbFN0b3Jl
RWxpbWluYXRpb25SZXN1bHQgcmVzdWx0ID0KLSAgICAgICAgICAgICAgICBzZXRMb2NhbFN0b3Jl
RWxpbWluYXRpb24obG9jYWwsIHJlcGxhY2VtZW50SW5kZXgpOworICAgICAgICAgICAgICAgIHNl
dExvY2FsU3RvcmVFbGltaW5hdGlvbihsb2NhbCwgcmVwbGFjZW1lbnQpOwogICAgICAgICAgICAg
aWYgKHJlc3VsdC5tYXlCZUFjY2Vzc2VkIHx8IHJlc3VsdC5tYXlDbG9iYmVyV29ybGQpCiAgICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBBU1NFUlQocmVwbGFjZW1lbnQub3AoKSA9
PSBTZXRMb2NhbCk7Ci0gICAgICAgICAgICBBU1NFUlQocmVwbGFjZW1lbnQucmVmQ291bnQoKSA9
PSAxKTsKLSAgICAgICAgICAgIEFTU0VSVChyZXBsYWNlbWVudC5zaG91bGRHZW5lcmF0ZSgpKTsK
KyAgICAgICAgICAgIEFTU0VSVChyZXBsYWNlbWVudC0+b3AoKSA9PSBTZXRMb2NhbCk7CisgICAg
ICAgICAgICBBU1NFUlQocmVwbGFjZW1lbnQtPnJlZkNvdW50KCkgPT0gMSk7CisgICAgICAgICAg
ICBBU1NFUlQocmVwbGFjZW1lbnQtPnNob3VsZEdlbmVyYXRlKCkpOwogICAgICAgICAgICAgLy8g
RklYTUU6IEludmVzdGlnYXRlIHVzaW5nIG1heUV4aXQgYXMgYSBmdXJ0aGVyIG9wdGltaXphdGlv
bi4KLSAgICAgICAgICAgIG5vZGUuc2V0T3BBbmREZWZhdWx0RmxhZ3MoUGhhbnRvbSk7Ci0gICAg
ICAgICAgICBOb2RlSW5kZXggZGF0YU5vZGVJbmRleCA9IHJlcGxhY2VtZW50LmNoaWxkMSgpLmlu
ZGV4KCk7Ci0gICAgICAgICAgICBBU1NFUlQobV9ncmFwaFtkYXRhTm9kZUluZGV4XS5oYXNSZXN1
bHQoKSk7CisgICAgICAgICAgICBub2RlLT5zZXRPcEFuZERlZmF1bHRGbGFncyhQaGFudG9tKTsK
KyAgICAgICAgICAgIE5vZGUqIGRhdGFOb2RlID0gcmVwbGFjZW1lbnQtPmNoaWxkMSgpLm5vZGUo
KTsKKyAgICAgICAgICAgIEFTU0VSVChkYXRhTm9kZS0+aGFzUmVzdWx0KCkpOwogICAgICAgICAg
ICAgbV9ncmFwaC5jbGVhckFuZERlcmVmQ2hpbGQxKG5vZGUpOwotICAgICAgICAgICAgbm9kZS5j
aGlsZHJlbi5jaGlsZDEoKSA9IEVkZ2UoZGF0YU5vZGVJbmRleCk7Ci0gICAgICAgICAgICBtX2dy
YXBoLnJlZihkYXRhTm9kZUluZGV4KTsKLSAgICAgICAgICAgIE5vZGVJbmRleCBvbGRUYWlsSW5k
ZXggPSBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQobG9jYWwpOwotICAg
ICAgICAgICAgaWYgKG9sZFRhaWxJbmRleCA9PSBtX2NvbXBpbGVJbmRleCkKLSAgICAgICAgICAg
ICAgICBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQobG9jYWwpID0gcmVw
bGFjZW1lbnRJbmRleDsKKyAgICAgICAgICAgIG5vZGUtPmNoaWxkcmVuLmNoaWxkMSgpID0gRWRn
ZShkYXRhTm9kZSk7CisgICAgICAgICAgICBtX2dyYXBoLnJlZihkYXRhTm9kZSk7CisgICAgICAg
ICAgICBOb2RlKiBvbGRUYWlsID0gbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVy
YW5kKGxvY2FsKTsKKyAgICAgICAgICAgIGlmIChvbGRUYWlsID09IG5vZGUpCisgICAgICAgICAg
ICAgICAgbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKGxvY2FsKSA9IHJl
cGxhY2VtZW50OwogICAgICAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICB9CkBAIC0xMjc2LDExICsxMjU0LDExIEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgICAgICBjYXNlIEdldEFycmF5TGVuZ3RoOgot
ICAgICAgICAgICAgc2V0UmVwbGFjZW1lbnQoZ2V0QXJyYXlMZW5ndGhFbGltaW5hdGlvbihub2Rl
LmNoaWxkMSgpLmluZGV4KCkpKTsKKyAgICAgICAgICAgIHNldFJlcGxhY2VtZW50KGdldEFycmF5
TGVuZ3RoRWxpbWluYXRpb24obm9kZS0+Y2hpbGQxKCkubm9kZSgpKSk7CiAgICAgICAgICAgICBi
cmVhazsKIAogICAgICAgICBjYXNlIEdldE15U2NvcGU6Ci0gICAgICAgICAgICBzZXRSZXBsYWNl
bWVudChnZXRNeVNjb3BlTG9hZEVsaW1pbmF0aW9uKG5vZGUuY29kZU9yaWdpbi5pbmxpbmVDYWxs
RnJhbWUpKTsKKyAgICAgICAgICAgIHNldFJlcGxhY2VtZW50KGdldE15U2NvcGVMb2FkRWxpbWlu
YXRpb24obm9kZS0+Y29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpKTsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgCiAgICAgICAgIC8vIEhhbmRsZSBub2RlcyB0aGF0IGFyZSBjb25k
aXRpb25hbGx5IHB1cmU6IHRoZXNlIGFyZSBwdXJlLCBhbmQgY2FuCkBAIC0xMjkyLDkgKzEyNzAs
OSBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIENvbXBhcmVHcmVhdGVyRXE6CiAgICAgICAgIGNh
c2UgQ29tcGFyZUVxOiB7CiAgICAgICAgICAgICBpZiAobV9ncmFwaC5pc1ByZWRpY3RlZE51bWVy
aWNhbChub2RlKSkgewotICAgICAgICAgICAgICAgIE5vZGVJbmRleCByZXBsYWNlbWVudEluZGV4
ID0gcHVyZUNTRShub2RlKTsKLSAgICAgICAgICAgICAgICBpZiAocmVwbGFjZW1lbnRJbmRleCAh
PSBOb05vZGUgJiYgbV9ncmFwaC5pc1ByZWRpY3RlZE51bWVyaWNhbChtX2dyYXBoW3JlcGxhY2Vt
ZW50SW5kZXhdKSkKLSAgICAgICAgICAgICAgICAgICAgc2V0UmVwbGFjZW1lbnQocmVwbGFjZW1l
bnRJbmRleCk7CisgICAgICAgICAgICAgICAgTm9kZSogcmVwbGFjZW1lbnQgPSBwdXJlQ1NFKG5v
ZGUpOworICAgICAgICAgICAgICAgIGlmIChyZXBsYWNlbWVudCAmJiBtX2dyYXBoLmlzUHJlZGlj
dGVkTnVtZXJpY2FsKHJlcGxhY2VtZW50KSkKKyAgICAgICAgICAgICAgICAgICAgc2V0UmVwbGFj
ZW1lbnQocmVwbGFjZW1lbnQpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIH0KQEAgLTEzMDIsMTYgKzEyODAsMTYgQEAgcHJpdmF0ZToKICAgICAgICAgLy8gRmlu
YWxseSBoYW5kbGUgaGVhcCBhY2Nlc3Nlcy4gVGhlc2UgYXJlIG5vdCBxdWl0ZSBwdXJlLCBidXQg
d2UgY2FuIHN0aWxsCiAgICAgICAgIC8vIG9wdGltaXplIHRoZW0gcHJvdmlkZWQgdGhhdCBzb21l
IHN1YnRsZSBjb25kaXRpb25zIGFyZSBtZXQuCiAgICAgICAgIGNhc2UgR2V0R2xvYmFsVmFyOgot
ICAgICAgICAgICAgc2V0UmVwbGFjZW1lbnQoZ2xvYmFsVmFyTG9hZEVsaW1pbmF0aW9uKG5vZGUu
cmVnaXN0ZXJQb2ludGVyKCkpKTsKKyAgICAgICAgICAgIHNldFJlcGxhY2VtZW50KGdsb2JhbFZh
ckxvYWRFbGltaW5hdGlvbihub2RlLT5yZWdpc3RlclBvaW50ZXIoKSkpOwogICAgICAgICAgICAg
YnJlYWs7CiAKICAgICAgICAgY2FzZSBHZXRTY29wZWRWYXI6IHsKLSAgICAgICAgICAgIHNldFJl
cGxhY2VtZW50KHNjb3BlZFZhckxvYWRFbGltaW5hdGlvbihub2RlLmNoaWxkMSgpLmluZGV4KCks
IG5vZGUudmFyTnVtYmVyKCkpKTsKKyAgICAgICAgICAgIHNldFJlcGxhY2VtZW50KHNjb3BlZFZh
ckxvYWRFbGltaW5hdGlvbihub2RlLT5jaGlsZDEoKS5ub2RlKCksIG5vZGUtPnZhck51bWJlcigp
KSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCiAgICAgICAgIGNhc2UgR2xvYmFs
VmFyV2F0Y2hwb2ludDoKLSAgICAgICAgICAgIGlmIChnbG9iYWxWYXJXYXRjaHBvaW50RWxpbWlu
YXRpb24obm9kZS5yZWdpc3RlclBvaW50ZXIoKSkpCisgICAgICAgICAgICBpZiAoZ2xvYmFsVmFy
V2F0Y2hwb2ludEVsaW1pbmF0aW9uKG5vZGUtPnJlZ2lzdGVyUG9pbnRlcigpKSkKICAgICAgICAg
ICAgICAgICBlbGltaW5hdGUoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCkBA
IC0xMzE5LDgzICsxMjk3LDgzIEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgUHV0R2xvYmFsVmFy
Q2hlY2s6CiAgICAgICAgICAgICBpZiAobV9ncmFwaC5tX2ZpeHBvaW50U3RhdGUgPT0gRml4cG9p
bnROb3RDb252ZXJnZWQpCiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBlbGlt
aW5hdGUoZ2xvYmFsVmFyU3RvcmVFbGltaW5hdGlvbihub2RlLnJlZ2lzdGVyUG9pbnRlcigpKSk7
CisgICAgICAgICAgICBlbGltaW5hdGUoZ2xvYmFsVmFyU3RvcmVFbGltaW5hdGlvbihub2RlLT5y
ZWdpc3RlclBvaW50ZXIoKSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAg
ICAgICAgY2FzZSBQdXRTY29wZWRWYXI6IHsKICAgICAgICAgICAgIGlmIChtX2dyYXBoLm1fZml4
cG9pbnRTdGF0ZSA9PSBGaXhwb2ludE5vdENvbnZlcmdlZCkKICAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgIGVsaW1pbmF0ZShzY29wZWRWYXJTdG9yZUVsaW1pbmF0aW9uKG5vZGUu
Y2hpbGQxKCkuaW5kZXgoKSwgbm9kZS5jaGlsZDIoKS5pbmRleCgpLCBub2RlLnZhck51bWJlcigp
KSk7CisgICAgICAgICAgICBlbGltaW5hdGUoc2NvcGVkVmFyU3RvcmVFbGltaW5hdGlvbihub2Rl
LT5jaGlsZDEoKS5ub2RlKCksIG5vZGUtPmNoaWxkMigpLm5vZGUoKSwgbm9kZS0+dmFyTnVtYmVy
KCkpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBHZXRC
eVZhbDoKICAgICAgICAgICAgIGlmIChtX2dyYXBoLmJ5VmFsSXNQdXJlKG5vZGUpKQotICAgICAg
ICAgICAgICAgIHNldFJlcGxhY2VtZW50KGdldEJ5VmFsTG9hZEVsaW1pbmF0aW9uKG5vZGUuY2hp
bGQxKCkuaW5kZXgoKSwgbm9kZS5jaGlsZDIoKS5pbmRleCgpKSk7CisgICAgICAgICAgICAgICAg
c2V0UmVwbGFjZW1lbnQoZ2V0QnlWYWxMb2FkRWxpbWluYXRpb24obm9kZS0+Y2hpbGQxKCkubm9k
ZSgpLCBub2RlLT5jaGlsZDIoKS5ub2RlKCkpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgCiAgICAgICAgIGNhc2UgUHV0QnlWYWw6IHsKICAgICAgICAgICAgIEVkZ2UgY2hpbGQx
ID0gbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKTsKICAgICAgICAgICAgIEVkZ2UgY2hpbGQy
ID0gbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKTsKLSAgICAgICAgICAgIGlmIChub2RlLmFy
cmF5TW9kZSgpLmNhbkNTRVN0b3JhZ2UoKSkgewotICAgICAgICAgICAgICAgIE5vZGVJbmRleCBu
b2RlSW5kZXggPSBnZXRCeVZhbExvYWRFbGltaW5hdGlvbihjaGlsZDEuaW5kZXgoKSwgY2hpbGQy
LmluZGV4KCkpOwotICAgICAgICAgICAgICAgIGlmIChub2RlSW5kZXggPT0gTm9Ob2RlKQorICAg
ICAgICAgICAgaWYgKG5vZGUtPmFycmF5TW9kZSgpLmNhbkNTRVN0b3JhZ2UoKSkgeworICAgICAg
ICAgICAgICAgIE5vZGUqIHJlcGxhY2VtZW50ID0gZ2V0QnlWYWxMb2FkRWxpbWluYXRpb24oY2hp
bGQxLm5vZGUoKSwgY2hpbGQyLm5vZGUoKSk7CisgICAgICAgICAgICAgICAgaWYgKCFyZXBsYWNl
bWVudCkKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgbm9kZS5z
ZXRPcChQdXRCeVZhbEFsaWFzKTsKKyAgICAgICAgICAgICAgICBub2RlLT5zZXRPcChQdXRCeVZh
bEFsaWFzKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAg
ICAgICAgICAgICAKICAgICAgICAgY2FzZSBDaGVja1N0cnVjdHVyZToKICAgICAgICAgY2FzZSBG
b3J3YXJkQ2hlY2tTdHJ1Y3R1cmU6Ci0gICAgICAgICAgICBpZiAoY2hlY2tTdHJ1Y3R1cmVFbGlt
aW5hdGlvbihub2RlLnN0cnVjdHVyZVNldCgpLCBub2RlLmNoaWxkMSgpLmluZGV4KCkpKQorICAg
ICAgICAgICAgaWYgKGNoZWNrU3RydWN0dXJlRWxpbWluYXRpb24obm9kZS0+c3RydWN0dXJlU2V0
KCksIG5vZGUtPmNoaWxkMSgpLm5vZGUoKSkpCiAgICAgICAgICAgICAgICAgZWxpbWluYXRlKCk7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgICAgICBjYXNlIFN0cnVjdHVy
ZVRyYW5zaXRpb25XYXRjaHBvaW50OgogICAgICAgICBjYXNlIEZvcndhcmRTdHJ1Y3R1cmVUcmFu
c2l0aW9uV2F0Y2hwb2ludDoKLSAgICAgICAgICAgIGlmIChzdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0
Y2hwb2ludEVsaW1pbmF0aW9uKG5vZGUuc3RydWN0dXJlKCksIG5vZGUuY2hpbGQxKCkuaW5kZXgo
KSkpCisgICAgICAgICAgICBpZiAoc3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnRFbGltaW5h
dGlvbihub2RlLT5zdHJ1Y3R1cmUoKSwgbm9kZS0+Y2hpbGQxKCkubm9kZSgpKSkKICAgICAgICAg
ICAgICAgICBlbGltaW5hdGUoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAg
ICAgICAgIGNhc2UgUHV0U3RydWN0dXJlOgogICAgICAgICAgICAgaWYgKG1fZ3JhcGgubV9maXhw
b2ludFN0YXRlID09IEZpeHBvaW50Tm90Q29udmVyZ2VkKQogICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgZWxpbWluYXRlKHB1dFN0cnVjdHVyZVN0b3JlRWxpbWluYXRpb24obm9k
ZS5jaGlsZDEoKS5pbmRleCgpKSwgUGhhbnRvbVB1dFN0cnVjdHVyZSk7CisgICAgICAgICAgICBl
bGltaW5hdGUocHV0U3RydWN0dXJlU3RvcmVFbGltaW5hdGlvbihub2RlLT5jaGlsZDEoKS5ub2Rl
KCkpLCBQaGFudG9tUHV0U3RydWN0dXJlKTsKICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAg
IGNhc2UgQ2hlY2tGdW5jdGlvbjoKLSAgICAgICAgICAgIGlmIChjaGVja0Z1bmN0aW9uRWxpbWlu
YXRpb24obm9kZS5mdW5jdGlvbigpLCBub2RlLmNoaWxkMSgpLmluZGV4KCkpKQorICAgICAgICAg
ICAgaWYgKGNoZWNrRnVuY3Rpb25FbGltaW5hdGlvbihub2RlLT5mdW5jdGlvbigpLCBub2RlLT5j
aGlsZDEoKS5ub2RlKCkpKQogICAgICAgICAgICAgICAgIGVsaW1pbmF0ZSgpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgQ2hlY2tFeGVjdXRhYmxl
OgotICAgICAgICAgICAgaWYgKGNoZWNrRXhlY3V0YWJsZUVsaW1pbmF0aW9uKG5vZGUuZXhlY3V0
YWJsZSgpLCBub2RlLmNoaWxkMSgpLmluZGV4KCkpKQorICAgICAgICAgICAgaWYgKGNoZWNrRXhl
Y3V0YWJsZUVsaW1pbmF0aW9uKG5vZGUtPmV4ZWN1dGFibGUoKSwgbm9kZS0+Y2hpbGQxKCkubm9k
ZSgpKSkKICAgICAgICAgICAgICAgICBlbGltaW5hdGUoKTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgICAgIAogICAgICAgICBjYXNlIENoZWNrQXJyYXk6Ci0gICAgICAgICAgICBp
ZiAoY2hlY2tBcnJheUVsaW1pbmF0aW9uKG5vZGUuY2hpbGQxKCkuaW5kZXgoKSwgbm9kZS5hcnJh
eU1vZGUoKSkpCisgICAgICAgICAgICBpZiAoY2hlY2tBcnJheUVsaW1pbmF0aW9uKG5vZGUtPmNo
aWxkMSgpLm5vZGUoKSwgbm9kZS0+YXJyYXlNb2RlKCkpKQogICAgICAgICAgICAgICAgIGVsaW1p
bmF0ZSgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBH
ZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlOiB7Ci0gICAgICAgICAgICBzZXRSZXBsYWNlbWVudChn
ZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlTG9hZEVsaW1pbmF0aW9uKG5vZGUuY2hpbGQxKCkuaW5k
ZXgoKSwgbm9kZS5hcnJheU1vZGUoKSkpOworICAgICAgICAgICAgc2V0UmVwbGFjZW1lbnQoZ2V0
SW5kZXhlZFByb3BlcnR5U3RvcmFnZUxvYWRFbGltaW5hdGlvbihub2RlLT5jaGlsZDEoKS5ub2Rl
KCksIG5vZGUtPmFycmF5TW9kZSgpKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQog
CiAgICAgICAgIGNhc2UgR2V0QnV0dGVyZmx5OgotICAgICAgICAgICAgc2V0UmVwbGFjZW1lbnQo
Z2V0UHJvcGVydHlTdG9yYWdlTG9hZEVsaW1pbmF0aW9uKG5vZGUuY2hpbGQxKCkuaW5kZXgoKSkp
OworICAgICAgICAgICAgc2V0UmVwbGFjZW1lbnQoZ2V0UHJvcGVydHlTdG9yYWdlTG9hZEVsaW1p
bmF0aW9uKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSkpOwogICAgICAgICAgICAgYnJlYWs7CiAKICAg
ICAgICAgY2FzZSBHZXRCeU9mZnNldDoKLSAgICAgICAgICAgIHNldFJlcGxhY2VtZW50KGdldEJ5
T2Zmc2V0TG9hZEVsaW1pbmF0aW9uKG1fZ3JhcGgubV9zdG9yYWdlQWNjZXNzRGF0YVtub2RlLnN0
b3JhZ2VBY2Nlc3NEYXRhSW5kZXgoKV0uaWRlbnRpZmllck51bWJlciwgbm9kZS5jaGlsZDEoKS5p
bmRleCgpKSk7CisgICAgICAgICAgICBzZXRSZXBsYWNlbWVudChnZXRCeU9mZnNldExvYWRFbGlt
aW5hdGlvbihtX2dyYXBoLm1fc3RvcmFnZUFjY2Vzc0RhdGFbbm9kZS0+c3RvcmFnZUFjY2Vzc0Rh
dGFJbmRleCgpXS5pZGVudGlmaWVyTnVtYmVyLCBub2RlLT5jaGlsZDEoKS5ub2RlKCkpKTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgUHV0QnlPZmZzZXQ6
CiAgICAgICAgICAgICBpZiAobV9ncmFwaC5tX2ZpeHBvaW50U3RhdGUgPT0gRml4cG9pbnROb3RD
b252ZXJnZWQpCiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBlbGltaW5hdGUo
cHV0QnlPZmZzZXRTdG9yZUVsaW1pbmF0aW9uKG1fZ3JhcGgubV9zdG9yYWdlQWNjZXNzRGF0YVtu
b2RlLnN0b3JhZ2VBY2Nlc3NEYXRhSW5kZXgoKV0uaWRlbnRpZmllck51bWJlciwgbm9kZS5jaGls
ZDEoKS5pbmRleCgpKSk7CisgICAgICAgICAgICBlbGltaW5hdGUocHV0QnlPZmZzZXRTdG9yZUVs
aW1pbmF0aW9uKG1fZ3JhcGgubV9zdG9yYWdlQWNjZXNzRGF0YVtub2RlLT5zdG9yYWdlQWNjZXNz
RGF0YUluZGV4KCldLmlkZW50aWZpZXJOdW1iZXIsIG5vZGUtPmNoaWxkMSgpLm5vZGUoKSkpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBQaGFudG9tOgpA
QCAtMTQwOSw3ICsxMzg3LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9CiAgICAgICAgIAotICAgICAgICBtX2xhc3RTZWVuW25vZGUub3AoKV0gPSBtX2luZGV4SW5C
bG9jazsKKyAgICAgICAgbV9sYXN0U2Vlbltub2RlLT5vcCgpXSA9IG1faW5kZXhJbkJsb2NrOwog
I2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKICAgICAgICAgZGF0YUxv
Z0YoIlxuIik7CiAjZW5kaWYKQEAgLTE0MzAsMzcgKzE0MDgsMzYgQEAgcHJpdmF0ZToKICAgICAg
ICAgLy8gcmVwbGFjZW1lbnRzIGNsZWFyZWQsIHNvIHdlIGRvbid0IGdldCBjb25mdXNlZCB3aGls
ZSBkb2luZyBzdWJzdGl0dXRpb25zIG9uCiAgICAgICAgIC8vIEdldExvY2FsJ3MuCiAgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBibG9jay0+cGhpcy5zaXplKCk7ICsraSkgewotICAg
ICAgICAgICAgQVNTRVJUKG1fZ3JhcGhbYmxvY2stPnBoaXNbaV1dLmZsYWdzKCkgJiBOb2RlUmVs
ZXZhbnRUb09TUik7Ci0gICAgICAgICAgICBtX2dyYXBoW2Jsb2NrLT5waGlzW2ldXS5yZXBsYWNl
bWVudCA9IE5vTm9kZTsKKyAgICAgICAgICAgIEFTU0VSVChibG9jay0+cGhpc1tpXS0+ZmxhZ3Mo
KSAmIE5vZGVSZWxldmFudFRvT1NSKTsKKyAgICAgICAgICAgIGJsb2NrLT5waGlzW2ldLT5yZXBs
YWNlbWVudCA9IDA7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIC8vIE1ha2UgYWxsIG9m
IG15IFNldExvY2FsIGFuZCBHZXRMb2NhbCBub2RlcyByZWxldmFudCB0byBPU1IsIGFuZCBkbyBz
b21lIG90aGVyCiAgICAgICAgIC8vIG5lY2Vzc2FyeSBib29ra2VlcGluZy4KICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IGJsb2NrLT5zaXplKCk7ICsraSkgewotICAgICAgICAgICAg
Tm9kZUluZGV4IG5vZGVJbmRleCA9IGJsb2NrLT5hdChpKTsKLSAgICAgICAgICAgIE5vZGUmIG5v
ZGUgPSBtX2dyYXBoW25vZGVJbmRleF07CisgICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2st
PmF0KGkpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBub2RlLnJlcGxhY2VtZW50ID0gTm9O
b2RlOworICAgICAgICAgICAgbm9kZS0+cmVwbGFjZW1lbnQgPSAwOwogICAgICAgICAgICAgCi0g
ICAgICAgICAgICBzd2l0Y2ggKG5vZGUub3AoKSkgeworICAgICAgICAgICAgc3dpdGNoIChub2Rl
LT5vcCgpKSB7CiAgICAgICAgICAgICBjYXNlIFNldExvY2FsOgogICAgICAgICAgICAgY2FzZSBH
ZXRMb2NhbDogLy8gRklYTUU6IFRoZSBHZXRMb2NhbCBjYXNlIGlzIG9ubHkgbmVjZXNzYXJ5IHVu
dGlsIHdlIGRvIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDY3MDcu
Ci0gICAgICAgICAgICAgICAgbm9kZS5tZXJnZUZsYWdzKE5vZGVSZWxldmFudFRvT1NSKTsKKyAg
ICAgICAgICAgICAgICBub2RlLT5tZXJnZUZsYWdzKE5vZGVSZWxldmFudFRvT1NSKTsKICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAg
bm9kZS5jbGVhckZsYWdzKE5vZGVSZWxldmFudFRvT1NSKTsKKyAgICAgICAgICAgICAgICBub2Rl
LT5jbGVhckZsYWdzKE5vZGVSZWxldmFudFRvT1NSKTsKICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgIH0KICAgICAgICAgfQogCiAgICAgICAgIGZvciAobV9pbmRleEluQmxvY2sg
PSAwOyBtX2luZGV4SW5CbG9jayA8IGJsb2NrLT5zaXplKCk7ICsrbV9pbmRleEluQmxvY2spIHsK
LSAgICAgICAgICAgIG1fY29tcGlsZUluZGV4ID0gYmxvY2stPmF0KG1faW5kZXhJbkJsb2NrKTsK
LSAgICAgICAgICAgIHBlcmZvcm1Ob2RlQ1NFKG1fZ3JhcGhbbV9jb21waWxlSW5kZXhdKTsKKyAg
ICAgICAgICAgIG1fY3VycmVudE5vZGUgPSBibG9jay0+YXQobV9pbmRleEluQmxvY2spOworICAg
ICAgICAgICAgcGVyZm9ybU5vZGVDU0UobV9jdXJyZW50Tm9kZSk7CiAgICAgICAgIH0KICAgICB9
CiAgICAgCiAgICAgQmFzaWNCbG9jayogbV9jdXJyZW50QmxvY2s7Ci0gICAgTm9kZUluZGV4IG1f
Y29tcGlsZUluZGV4OworICAgIE5vZGUqIG1fY3VycmVudE5vZGU7CiAgICAgdW5zaWduZWQgbV9p
bmRleEluQmxvY2s7CiAgICAgRml4ZWRBcnJheTx1bnNpZ25lZCwgTGFzdE5vZGVUeXBlPiBtX2xh
c3RTZWVuOwogICAgIGJvb2wgbV9jaGFuZ2VkOyAvLyBPbmx5IHRyYWNrcyBjaGFuZ2VzIHRoYXQg
aGF2ZSBhIHN1YnN0YW50aXZlIGVmZmVjdCBvbiBvdGhlciBvcHRpbWl6YXRpb25zLgpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb24uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uLmNwcAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uLmNwcAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSw0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZHQ29tbW9uLmgiCisKKyNpZiBFTkFC
TEUoREZHX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCit2b2lkIE5v
ZGVQb2ludGVyVHJhaXRzOjpkdW1wKE5vZGUqIHZhbHVlLCBQcmludFN0cmVhbSYgb3V0KQorewor
ICAgIG91dC5wcmludCh2YWx1ZSk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKwor
I2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0NvbW1vbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQ29tbW9uLmgJKHJldmlzaW9uIDE0MDkwNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQ29tbW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDExLCAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMSwgMjAxMiwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTgxLDIyICs4MSwxNCBA
QAogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKLS8vIFR5cGUgZm9yIGEgcmVm
ZXJlbmNlIHRvIGFub3RoZXIgbm9kZSBpbiB0aGUgZ3JhcGguCi10eXBlZGVmIHVpbnQzMl90IE5v
ZGVJbmRleDsKLXN0YXRpYyBjb25zdCBOb2RlSW5kZXggTm9Ob2RlID0gVUlOVF9NQVg7CitjbGFz
cyBOb2RlOwogCiB0eXBlZGVmIHVpbnQzMl90IEJsb2NrSW5kZXg7CiBzdGF0aWMgY29uc3QgQmxv
Y2tJbmRleCBOb0Jsb2NrID0gVUlOVF9NQVg7CiAKLXN0cnVjdCBOb2RlSW5kZXhUcmFpdHMgewot
ICAgIHN0YXRpYyBOb2RlSW5kZXggZGVmYXVsdFZhbHVlKCkgeyByZXR1cm4gTm9Ob2RlOyB9Ci0g
ICAgc3RhdGljIHZvaWQgZHVtcChOb2RlSW5kZXggdmFsdWUsIFByaW50U3RyZWFtJiBvdXQpCi0g
ICAgewotICAgICAgICBpZiAodmFsdWUgPT0gTm9Ob2RlKQotICAgICAgICAgICAgb3V0LnByaW50
ZigiLSIpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBvdXQucHJpbnRmKCJAJXUiLCB2YWx1
ZSk7Ci0gICAgfQorc3RydWN0IE5vZGVQb2ludGVyVHJhaXRzIHsKKyAgICBzdGF0aWMgTm9kZSog
ZGVmYXVsdFZhbHVlKCkgeyByZXR1cm4gMDsgfQorICAgIHN0YXRpYyB2b2lkIGR1bXAoTm9kZSog
dmFsdWUsIFByaW50U3RyZWFtJiBvdXQpOwogfTsKIAogZW51bSBVc2VLaW5kIHsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhh
c2UuY3BwCShyZXZpc2lvbiAxNDA5MDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNzUsMjIgKzc1LDIxIEBA
IHByaXZhdGU6CiAgICAgICAgIGJvb2wgY2hhbmdlZCA9IGZhbHNlOwogICAgICAgICBtX3N0YXRl
LmJlZ2luQmFzaWNCbG9jayhibG9jayk7CiAgICAgICAgIGZvciAodW5zaWduZWQgaW5kZXhJbkJs
b2NrID0gMDsgaW5kZXhJbkJsb2NrIDwgYmxvY2stPnNpemUoKTsgKytpbmRleEluQmxvY2spIHsK
LSAgICAgICAgICAgIE5vZGVJbmRleCBub2RlSW5kZXggPSBibG9jay0+YXQoaW5kZXhJbkJsb2Nr
KTsKLSAgICAgICAgICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW25vZGVJbmRleF07Ci0gICAgICAg
ICAgICAgICAgCiAgICAgICAgICAgICBpZiAoIW1fc3RhdGUuaXNWYWxpZCgpKQogICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCisgICAgICAgICAgICBOb2RlKiBub2RlID0gYmxv
Y2stPmF0KGluZGV4SW5CbG9jayk7CisKICAgICAgICAgICAgIGJvb2wgZWxpbWluYXRlZCA9IGZh
bHNlOwogICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIHN3aXRjaCAobm9kZS5vcCgp
KSB7CisgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKICAgICAgICAgICAgIGNhc2Ug
Q2hlY2tBcmd1bWVudHNOb3RDcmVhdGVkOiB7CiAgICAgICAgICAgICAgICAgaWYgKCFpc0VtcHR5
U3BlY3VsYXRpb24oCiAgICAgICAgICAgICAgICAgICAgICAgICBtX3N0YXRlLnZhcmlhYmxlcygp
Lm9wZXJhbmQoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5hcmd1bWVudHNS
ZWdpc3RlckZvcihub2RlLmNvZGVPcmlnaW4pKS5tX3R5cGUpKQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG1fZ3JhcGguYXJndW1lbnRzUmVnaXN0ZXJGb3Iobm9kZS0+Y29kZU9yaWdpbikp
Lm1fdHlwZSkpCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIEFT
U0VSVChub2RlLnJlZkNvdW50KCkgPT0gMSk7Ci0gICAgICAgICAgICAgICAgbm9kZS5zZXRPcEFu
ZERlZmF1bHRGbGFncyhQaGFudG9tKTsKKyAgICAgICAgICAgICAgICBub2RlLT5zZXRPcEFuZERl
ZmF1bHRGbGFncyhQaGFudG9tKTsKICAgICAgICAgICAgICAgICBlbGltaW5hdGVkID0gdHJ1ZTsK
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KQEAgLTk4LDI0ICs5NywyNCBA
QCBwcml2YXRlOgogICAgICAgICAgICAgY2FzZSBDaGVja1N0cnVjdHVyZToKICAgICAgICAgICAg
IGNhc2UgRm9yd2FyZENoZWNrU3RydWN0dXJlOgogICAgICAgICAgICAgY2FzZSBBcnJheWlmeVRv
U3RydWN0dXJlOiB7Ci0gICAgICAgICAgICAgICAgQWJzdHJhY3RWYWx1ZSYgdmFsdWUgPSBtX3N0
YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSk7CisgICAgICAgICAgICAgICAgQWJzdHJhY3RWYWx1
ZSYgdmFsdWUgPSBtX3N0YXRlLmZvck5vZGUobm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICAgICAg
ICAgIFN0cnVjdHVyZVNldCBzZXQ7Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGUub3AoKSA9PSBB
cnJheWlmeVRvU3RydWN0dXJlKQotICAgICAgICAgICAgICAgICAgICBzZXQgPSBub2RlLnN0cnVj
dHVyZSgpOworICAgICAgICAgICAgICAgIGlmIChub2RlLT5vcCgpID09IEFycmF5aWZ5VG9TdHJ1
Y3R1cmUpCisgICAgICAgICAgICAgICAgICAgIHNldCA9IG5vZGUtPnN0cnVjdHVyZSgpOwogICAg
ICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgc2V0ID0gbm9kZS5zdHJ1Y3R1
cmVTZXQoKTsKKyAgICAgICAgICAgICAgICAgICAgc2V0ID0gbm9kZS0+c3RydWN0dXJlU2V0KCk7
CiAgICAgICAgICAgICAgICAgaWYgKCFpc0NlbGxTcGVjdWxhdGlvbih2YWx1ZS5tX3R5cGUpKQog
ICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICBpZiAodmFsdWUubV9j
dXJyZW50S25vd25TdHJ1Y3R1cmUuaXNTdWJzZXRPZihzZXQpKSB7CiAgICAgICAgICAgICAgICAg
ICAgIEFTU0VSVChub2RlLnJlZkNvdW50KCkgPT0gMSk7Ci0gICAgICAgICAgICAgICAgICAgIG5v
ZGUuc2V0T3BBbmREZWZhdWx0RmxhZ3MoUGhhbnRvbSk7CisgICAgICAgICAgICAgICAgICAgIG5v
ZGUtPnNldE9wQW5kRGVmYXVsdEZsYWdzKFBoYW50b20pOwogICAgICAgICAgICAgICAgICAgICBl
bGltaW5hdGVkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgIFN0cnVjdHVyZUFic3RyYWN0VmFsdWUmIHN0cnVjdHVy
ZVZhbHVlID0gdmFsdWUubV9mdXR1cmVQb3NzaWJsZVN0cnVjdHVyZTsKICAgICAgICAgICAgICAg
ICBpZiAoc3RydWN0dXJlVmFsdWUuaXNTdWJzZXRPZihzZXQpCiAgICAgICAgICAgICAgICAgICAg
ICYmIHN0cnVjdHVyZVZhbHVlLmhhc1NpbmdsZXRvbigpKSB7Ci0gICAgICAgICAgICAgICAgICAg
IG5vZGUuY29udmVydFRvU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnQoc3RydWN0dXJlVmFs
dWUuc2luZ2xldG9uKCkpOworICAgICAgICAgICAgICAgICAgICBub2RlLT5jb252ZXJ0VG9TdHJ1
Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludChzdHJ1Y3R1cmVWYWx1ZS5zaW5nbGV0b24oKSk7CiAg
ICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgICBicmVhazsKQEAgLTEyMywzNyArMTIyLDM3IEBAIHByaXZhdGU6CiAgICAg
ICAgICAgICAgICAgCiAgICAgICAgICAgICBjYXNlIENoZWNrQXJyYXk6CiAgICAgICAgICAgICBj
YXNlIEFycmF5aWZ5OiB7Ci0gICAgICAgICAgICAgICAgaWYgKCFub2RlLmFycmF5TW9kZSgpLmFs
cmVhZHlDaGVja2VkKG1fZ3JhcGgsIG5vZGUsIG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgp
KSkpCisgICAgICAgICAgICAgICAgaWYgKCFub2RlLT5hcnJheU1vZGUoKS5hbHJlYWR5Q2hlY2tl
ZChtX2dyYXBoLCBub2RlLCBtX3N0YXRlLmZvck5vZGUobm9kZS0+Y2hpbGQxKCkpKSkKICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKG5vZGUucmVmQ291
bnQoKSA9PSAxKTsKLSAgICAgICAgICAgICAgICBub2RlLnNldE9wQW5kRGVmYXVsdEZsYWdzKFBo
YW50b20pOworICAgICAgICAgICAgICAgIEFTU0VSVChub2RlLT5yZWZDb3VudCgpID09IDEpOwor
ICAgICAgICAgICAgICAgIG5vZGUtPnNldE9wQW5kRGVmYXVsdEZsYWdzKFBoYW50b20pOwogICAg
ICAgICAgICAgICAgIGVsaW1pbmF0ZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgY2FzZSBDaGVja0Z1
bmN0aW9uOiB7Ci0gICAgICAgICAgICAgICAgaWYgKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxk
MSgpKS52YWx1ZSgpICE9IG5vZGUuZnVuY3Rpb24oKSkKKyAgICAgICAgICAgICAgICBpZiAobV9z
dGF0ZS5mb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS52YWx1ZSgpICE9IG5vZGUtPmZ1bmN0aW9uKCkp
CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIG5vZGUuc2V0T3BB
bmREZWZhdWx0RmxhZ3MoUGhhbnRvbSk7CisgICAgICAgICAgICAgICAgbm9kZS0+c2V0T3BBbmRE
ZWZhdWx0RmxhZ3MoUGhhbnRvbSk7CiAgICAgICAgICAgICAgICAgZWxpbWluYXRlZCA9IHRydWU7
CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
CiAgICAgICAgICAgICBjYXNlIENvbnZlcnRUaGlzOiB7Ci0gICAgICAgICAgICAgICAgaWYgKCFp
c09iamVjdFNwZWN1bGF0aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUp
KQorICAgICAgICAgICAgICAgIGlmICghaXNPYmplY3RTcGVjdWxhdGlvbihtX3N0YXRlLmZvck5v
ZGUobm9kZS0+Y2hpbGQxKCkpLm1fdHlwZSkpCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgICAgIG5vZGUuc2V0T3BBbmREZWZhdWx0RmxhZ3MoSWRlbnRpdHkpOworICAg
ICAgICAgICAgICAgIG5vZGUtPnNldE9wQW5kRGVmYXVsdEZsYWdzKElkZW50aXR5KTsKICAgICAg
ICAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGNhc2UgR2V0QnlJZDoKICAg
ICAgICAgICAgIGNhc2UgR2V0QnlJZEZsdXNoOiB7Ci0gICAgICAgICAgICAgICAgQ29kZU9yaWdp
biBjb2RlT3JpZ2luID0gbm9kZS5jb2RlT3JpZ2luOwotICAgICAgICAgICAgICAgIE5vZGVJbmRl
eCBjaGlsZCA9IG5vZGUuY2hpbGQxKCkuaW5kZXgoKTsKLSAgICAgICAgICAgICAgICB1bnNpZ25l
ZCBpZGVudGlmaWVyTnVtYmVyID0gbm9kZS5pZGVudGlmaWVyTnVtYmVyKCk7CisgICAgICAgICAg
ICAgICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2luID0gbm9kZS0+Y29kZU9yaWdpbjsKKyAgICAgICAg
ICAgICAgICBOb2RlKiBjaGlsZCA9IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKKyAgICAgICAgICAg
ICAgICB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyID0gbm9kZS0+aWRlbnRpZmllck51bWJlcigp
OwogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGlmICghaXNDZWxsU3BlY3VsYXRp
b24obV9ncmFwaFtjaGlsZF0ucHJlZGljdGlvbigpKSkKKyAgICAgICAgICAgICAgICBpZiAoIWlz
Q2VsbFNwZWN1bGF0aW9uKGNoaWxkLT5wcmVkaWN0aW9uKCkpKQogICAgICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSA9IG1fc3RhdGUuZm9yTm9kZShjaGlsZCkuYmVzdFByb3ZlblN0cnVjdHVyZSgpOwpA
QCAtMTg3LDcgKzE4Niw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAg
ICAgICAgTm9kZUluZGV4IHByb3BlcnR5U3RvcmFnZUluZGV4OwogICAgICAgICAgICAgICAgIAot
ICAgICAgICAgICAgICAgIG1fZ3JhcGhbY2hpbGRdLnJlZigpOworICAgICAgICAgICAgICAgIGNo
aWxkLT5yZWYoKTsKICAgICAgICAgICAgICAgICBpZiAoaXNJbmxpbmVPZmZzZXQoc3RhdHVzLm9m
ZnNldCgpKSkKICAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlTdG9yYWdlSW5kZXggPSBjaGls
ZDsKICAgICAgICAgICAgICAgICBlbHNlIHsKQEAgLTE5Niw3ICsxOTUsNyBAQCBwcml2YXRlOgog
ICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGQpOwogICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBtX2dyYXBoW25vZGVJbmRleF0uY29udmVydFRv
R2V0QnlPZmZzZXQobV9ncmFwaC5tX3N0b3JhZ2VBY2Nlc3NEYXRhLnNpemUoKSwgcHJvcGVydHlT
dG9yYWdlSW5kZXgpOworICAgICAgICAgICAgICAgIG5vZGUtPmNvbnZlcnRUb0dldEJ5T2Zmc2V0
KG1fZ3JhcGgubV9zdG9yYWdlQWNjZXNzRGF0YS5zaXplKCksIHByb3BlcnR5U3RvcmFnZUluZGV4
KTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBTdG9yYWdlQWNjZXNzRGF0YSBz
dG9yYWdlQWNjZXNzRGF0YTsKICAgICAgICAgICAgICAgICBzdG9yYWdlQWNjZXNzRGF0YS5vZmZz
ZXQgPSBpbmRleFJlbGF0aXZlVG9CYXNlKHN0YXR1cy5vZmZzZXQoKSk7CkBAIC0yMDcsOSArMjA2
LDkgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGNhc2UgUHV0QnlJ
ZDoKICAgICAgICAgICAgIGNhc2UgUHV0QnlJZERpcmVjdDogewotICAgICAgICAgICAgICAgIENv
ZGVPcmlnaW4gY29kZU9yaWdpbiA9IG5vZGUuY29kZU9yaWdpbjsKLSAgICAgICAgICAgICAgICBO
b2RlSW5kZXggY2hpbGQgPSBub2RlLmNoaWxkMSgpLmluZGV4KCk7Ci0gICAgICAgICAgICAgICAg
dW5zaWduZWQgaWRlbnRpZmllck51bWJlciA9IG5vZGUuaWRlbnRpZmllck51bWJlcigpOworICAg
ICAgICAgICAgICAgIENvZGVPcmlnaW4gY29kZU9yaWdpbiA9IG5vZGUtPmNvZGVPcmlnaW47Cisg
ICAgICAgICAgICAgICAgTm9kZSogY2hpbGQgPSBub2RlLT5jaGlsZDEoKS5ub2RlKCk7CisgICAg
ICAgICAgICAgICAgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciA9IG5vZGUtPmlkZW50aWZpZXJO
dW1iZXIoKTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSA9IG1fc3RhdGUuZm9yTm9kZShjaGlsZCkuYmVzdFByb3ZlblN0cnVjdHVyZSgpOwog
ICAgICAgICAgICAgICAgIGlmICghc3RydWN0dXJlKQpAQCAtMjIyLDcgKzIyMSw3IEBAIHByaXZh
dGU6CiAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKGNvZGVPcmln
aW4pLAogICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUsCiAgICAgICAgICAgICAgICAgICAg
IGNvZGVCbG9jaygpLT5pZGVudGlmaWVyKGlkZW50aWZpZXJOdW1iZXIpLAotICAgICAgICAgICAg
ICAgICAgICBub2RlLm9wKCkgPT0gUHV0QnlJZERpcmVjdCk7CisgICAgICAgICAgICAgICAgICAg
IG5vZGUtPm9wKCkgPT0gUHV0QnlJZERpcmVjdCk7CiAgICAgICAgICAgICAgICAgCiAgICAgICAg
ICAgICAgICAgaWYgKCFzdGF0dXMuaXNTaW1wbGVSZXBsYWNlKCkgJiYgIXN0YXR1cy5pc1NpbXBs
ZVRyYW5zaXRpb24oKSkKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0yNDcsNyArMjQ2
LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvbkRhdGEgPSBtX2dy
YXBoLmFkZFN0cnVjdHVyZVRyYW5zaXRpb25EYXRhKAogICAgICAgICAgICAgICAgICAgICAgICAg
U3RydWN0dXJlVHJhbnNpdGlvbkRhdGEoc3RydWN0dXJlLCBzdGF0dXMubmV3U3RydWN0dXJlKCkp
KTsKICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIGlmIChub2RlLm9w
KCkgPT0gUHV0QnlJZCkgeworICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBQ
dXRCeUlkKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXN0cnVjdHVyZS0+c3RvcmVk
UHJvdG90eXBlKCkuaXNOdWxsKCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRT
dHJ1Y3R1cmVUcmFuc2l0aW9uQ2hlY2soCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvZGVPcmlnaW4sIGluZGV4SW5CbG9jaywKQEAgLTI2NSwxOCArMjY0LDE4IEBAIHByaXZhdGU6
CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAg
ICAgICBOb2RlSW5kZXggcHJvcGVydHlTdG9yYWdlSW5kZXg7CisgICAgICAgICAgICAgICAgTm9k
ZSogcHJvcGVydHlTdG9yYWdlOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGlm
IChpc0lubGluZU9mZnNldChzdGF0dXMub2Zmc2V0KCkpKSB7Ci0gICAgICAgICAgICAgICAgICAg
IG1fZ3JhcGhbY2hpbGRdLnJlZigpOyAvLyBUaGUgY2hpbGQgd2lsbCBiZSB1c2VkIGFzIHRoZSBw
cm9wZXJ0eSBpbmRleCwgc28gcmVmIGl0IHRvIHJlZmxlY3QgdGhlIGRvdWJsZSB1c2UuCi0gICAg
ICAgICAgICAgICAgICAgIHByb3BlcnR5U3RvcmFnZUluZGV4ID0gY2hpbGQ7CisgICAgICAgICAg
ICAgICAgICAgIGNoaWxkLT5yZWYoKTsgLy8gVGhlIGNoaWxkIHdpbGwgYmUgdXNlZCBhcyB0aGUg
cHJvcGVydHkgaW5kZXgsIHNvIHJlZiBpdCB0byByZWZsZWN0IHRoZSBkb3VibGUgdXNlLgorICAg
ICAgICAgICAgICAgICAgICBwcm9wZXJ0eVN0b3JhZ2UgPSBjaGlsZDsKICAgICAgICAgICAgICAg
ICB9IGVsc2UgaWYgKHN0YXR1cy5pc1NpbXBsZVJlcGxhY2UoKSB8fCBzdHJ1Y3R1cmUtPm91dE9m
TGluZUNhcGFjaXR5KCkgPT0gc3RhdHVzLm5ld1N0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0
eSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHByb3BlcnR5U3RvcmFnZUluZGV4ID0gbV9pbnNl
cnRpb25TZXQuaW5zZXJ0Tm9kZSgKKyAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlTdG9yYWdl
ID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKICAgICAgICAgICAgICAgICAgICAgICAgIGlu
ZGV4SW5CbG9jaywgUmVmQ2hpbGRyZW4sIFJlZk5vZGUsIFNwZWNOb25lLCBHZXRCdXR0ZXJmbHks
IGNvZGVPcmlnaW4sIGNoaWxkKTsKICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFzdHJ1Y3R1
cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpIHsKICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKHN0
YXR1cy5uZXdTdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7CiAgICAgICAgICAgICAg
ICAgICAgIEFTU0VSVCghaXNJbmxpbmVPZmZzZXQoc3RhdHVzLm9mZnNldCgpKSk7Ci0gICAgICAg
ICAgICAgICAgICAgIHByb3BlcnR5U3RvcmFnZUluZGV4ID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0
Tm9kZSgKKyAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlTdG9yYWdlID0gbV9pbnNlcnRpb25T
ZXQuaW5zZXJ0Tm9kZSgKICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4SW5CbG9jaywgUmVm
Q2hpbGRyZW4sIFJlZk5vZGUsIFNwZWNOb25lLCBBbGxvY2F0ZVByb3BlcnR5U3RvcmFnZSwKICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvZGVPcmlnaW4sIE9wSW5mbyh0cmFuc2l0aW9uRGF0YSks
IGNoaWxkKTsKICAgICAgICAgICAgICAgICB9IGVsc2UgewpAQCAtMjg0LDcgKzI4Myw3IEBAIHBy
aXZhdGU6CiAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChzdGF0dXMubmV3U3RydWN0dXJlKCkt
Pm91dE9mTGluZUNhcGFjaXR5KCkgPiBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpOwog
ICAgICAgICAgICAgICAgICAgICBBU1NFUlQoIWlzSW5saW5lT2Zmc2V0KHN0YXR1cy5vZmZzZXQo
KSkpOwogICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlT
dG9yYWdlSW5kZXggPSBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAorICAgICAgICAgICAgICAg
ICAgICBwcm9wZXJ0eVN0b3JhZ2UgPSBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAogICAgICAg
ICAgICAgICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBSZWZDaGlsZHJlbiwgUmVmTm9kZSwgU3Bl
Y05vbmUsIFJlYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UsCiAgICAgICAgICAgICAgICAgICAgICAg
ICBjb2RlT3JpZ2luLCBPcEluZm8odHJhbnNpdGlvbkRhdGEpLAogICAgICAgICAgICAgICAgICAg
ICAgICAgY2hpbGQsCkBAIC0yOTksNyArMjk4LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAg
ICAgICAgICAgIE9wSW5mbyh0cmFuc2l0aW9uRGF0YSksIGNoaWxkKTsKICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgbV9ncmFwaFtub2RlSW5kZXhd
LmNvbnZlcnRUb1B1dEJ5T2Zmc2V0KG1fZ3JhcGgubV9zdG9yYWdlQWNjZXNzRGF0YS5zaXplKCks
IHByb3BlcnR5U3RvcmFnZUluZGV4KTsKKyAgICAgICAgICAgICAgICBub2RlLT5jb252ZXJ0VG9Q
dXRCeU9mZnNldChtX2dyYXBoLm1fc3RvcmFnZUFjY2Vzc0RhdGEuc2l6ZSgpLCBwcm9wZXJ0eVN0
b3JhZ2VJbmRleCk7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgU3RvcmFnZUFj
Y2Vzc0RhdGEgc3RvcmFnZUFjY2Vzc0RhdGE7CiAgICAgICAgICAgICAgICAgc3RvcmFnZUFjY2Vz
c0RhdGEub2Zmc2V0ID0gaW5kZXhSZWxhdGl2ZVRvQmFzZShzdGF0dXMub2Zmc2V0KCkpOwpAQCAt
MzIwLDczICszMTksNzEgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIG1fc3RhdGUuZXhlY3V0ZShp
bmRleEluQmxvY2spOwogICAgICAgICAgICAgaWYgKCFub2RlLnNob3VsZEdlbmVyYXRlKCkgfHwg
bV9zdGF0ZS5kaWRDbG9iYmVyKCkgfHwgbm9kZS5oYXNDb25zdGFudCgpKQogICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IG1fc3RhdGUuZm9yTm9k
ZShub2RlSW5kZXgpLnZhbHVlKCk7CisgICAgICAgICAgICBKU1ZhbHVlIHZhbHVlID0gbV9zdGF0
ZS5mb3JOb2RlKG5vZGUpLnZhbHVlKCk7CiAgICAgICAgICAgICBpZiAoIXZhbHVlKQogICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKG5v
ZGUub3AoKSA9PSBHZXRMb2NhbCkgewotICAgICAgICAgICAgICAgIE5vZGVJbmRleCBwcmV2aW91
c0xvY2FsQWNjZXNzID0gTm9Ob2RlOwotICAgICAgICAgICAgICAgIGlmIChibG9jay0+dmFyaWFi
bGVzQXRIZWFkLm9wZXJhbmQobm9kZS5sb2NhbCgpKSA9PSBub2RlSW5kZXgKLSAgICAgICAgICAg
ICAgICAgICAgJiYgbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5vcCgpID09IFBoaSkgeworICAgICAg
ICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gR2V0TG9jYWwpIHsKKyAgICAgICAgICAgICAgICBOb2Rl
KiBwcmV2aW91c0xvY2FsQWNjZXNzID0gMDsKKyAgICAgICAgICAgICAgICBpZiAoYmxvY2stPnZh
cmlhYmxlc0F0SGVhZC5vcGVyYW5kKG5vZGUtPmxvY2FsKCkpID09IG5vZGUKKyAgICAgICAgICAg
ICAgICAgICAgJiYgbm9kZS0+Y2hpbGQxKCktPm9wKCkgPT0gUGhpKSB7CiAgICAgICAgICAgICAg
ICAgICAgIC8vIFdlIGV4cGVjdCB0aGlzIHRvIGJlIHRoZSBjb21tb24gY2FzZS4KLSAgICAgICAg
ICAgICAgICAgICAgQVNTRVJUKGJsb2NrLT5pc0luUGhpcyhub2RlLmNoaWxkMSgpLmluZGV4KCkp
KTsKLSAgICAgICAgICAgICAgICAgICAgcHJldmlvdXNMb2NhbEFjY2VzcyA9IG5vZGUuY2hpbGQx
KCkuaW5kZXgoKTsKLSAgICAgICAgICAgICAgICAgICAgYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5v
cGVyYW5kKG5vZGUubG9jYWwoKSkgPSBwcmV2aW91c0xvY2FsQWNjZXNzOworICAgICAgICAgICAg
ICAgICAgICBBU1NFUlQoYmxvY2stPmlzSW5QaGlzKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSkpOwor
ICAgICAgICAgICAgICAgICAgICBwcmV2aW91c0xvY2FsQWNjZXNzID0gbm9kZS0+Y2hpbGQxKCku
bm9kZSgpOworICAgICAgICAgICAgICAgICAgICBibG9jay0+dmFyaWFibGVzQXRIZWFkLm9wZXJh
bmQobm9kZS0+bG9jYWwoKSkgPSBwcmV2aW91c0xvY2FsQWNjZXNzOwogICAgICAgICAgICAgICAg
IH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChpbmRleEluQmxvY2sgPiAwKTsK
ICAgICAgICAgICAgICAgICAgICAgLy8gTXVzdCBzZWFyY2ggZm9yIHRoZSBwcmV2aW91cyBhY2Nl
c3MgdG8gdGhpcyBsb2NhbC4KICAgICAgICAgICAgICAgICAgICAgZm9yIChCbG9ja0luZGV4IHN1
YkluZGV4SW5CbG9jayA9IGluZGV4SW5CbG9jazsgc3ViSW5kZXhJbkJsb2NrLS07KSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBOb2RlSW5kZXggc3ViTm9kZUluZGV4ID0gYmxvY2stPmF0KHN1
YkluZGV4SW5CbG9jayk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBOb2RlJiBzdWJOb2RlID0g
bV9ncmFwaFtzdWJOb2RlSW5kZXhdOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFzdWJO
b2RlLnNob3VsZEdlbmVyYXRlKCkpCisgICAgICAgICAgICAgICAgICAgICAgICBOb2RlKiBzdWJO
b2RlID0gYmxvY2stPmF0KHN1YkluZGV4SW5CbG9jayk7CisgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoIXN1Yk5vZGUtPnNob3VsZEdlbmVyYXRlKCkpCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXN1Yk5vZGUuaGFz
VmFyaWFibGVBY2Nlc3NEYXRhKCkpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXN1Yk5v
ZGUtPmhhc1ZhcmlhYmxlQWNjZXNzRGF0YSgpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN1Yk5vZGUubG9jYWwoKSAh
PSBub2RlLmxvY2FsKCkpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3ViTm9kZS0+bG9j
YWwoKSAhPSBub2RlLT5sb2NhbCgpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhlIHR3byBtdXN0IGhhdmUgYmVlbiB1
bmlmaWVkLgotICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKHN1Yk5vZGUudmFyaWFibGVB
Y2Nlc3NEYXRhKCkgPT0gbm9kZS52YXJpYWJsZUFjY2Vzc0RhdGEoKSk7CisgICAgICAgICAgICAg
ICAgICAgICAgICBBU1NFUlQoc3ViTm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCkgPT0gbm9kZS0+
dmFyaWFibGVBY2Nlc3NEYXRhKCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgcHJldmlvdXNM
b2NhbEFjY2VzcyA9IHN1Yk5vZGVJbmRleDsKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGlmIChwcmV2aW91
c0xvY2FsQWNjZXNzID09IE5vTm9kZSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoIXByZXZp
b3VzTG9jYWxBY2Nlc3MpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoZSBwcmV2aW91
cyBhY2Nlc3MgbXVzdCBoYXZlIGJlZW4gYSBQaGkuCiAgICAgICAgICAgICAgICAgICAgICAgICBm
b3IgKEJsb2NrSW5kZXggcGhpSW5kZXhJbkJsb2NrID0gYmxvY2stPnBoaXMuc2l6ZSgpOyBwaGlJ
bmRleEluQmxvY2stLTspIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb2RlSW5kZXgg
cGhpTm9kZUluZGV4ID0gYmxvY2stPnBoaXNbcGhpSW5kZXhJbkJsb2NrXTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBOb2RlJiBwaGlOb2RlID0gbV9ncmFwaFtwaGlOb2RlSW5kZXhdOwot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcGhpTm9kZS5zaG91bGRHZW5lcmF0ZSgp
KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vZGUqIHBoaU5vZGUgPSBibG9jay0+cGhp
c1twaGlJbmRleEluQmxvY2tdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcGhp
Tm9kZS0+c2hvdWxkR2VuZXJhdGUoKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBoaU5vZGUubG9jYWwo
KSAhPSBub2RlLmxvY2FsKCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBoaU5v
ZGUtPmxvY2FsKCkgIT0gbm9kZS0+bG9jYWwoKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhlIHR3byBt
dXN0IGhhdmUgYmVlbiB1bmlmaWVkLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VS
VChwaGlOb2RlLnZhcmlhYmxlQWNjZXNzRGF0YSgpID09IG5vZGUudmFyaWFibGVBY2Nlc3NEYXRh
KCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXZpb3VzTG9jYWxBY2Nlc3MgPSBw
aGlOb2RlSW5kZXg7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKHBoaU5vZGUt
PnZhcmlhYmxlQWNjZXNzRGF0YSgpID09IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2aW91c0xvY2FsQWNjZXNzID0gcGhpTm9kZTsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChwcmV2aW91c0xvY2FsQWNjZXNz
ICE9IE5vTm9kZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQocHJldmlvdXNMb2Nh
bEFjY2Vzcyk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIEFTU0VSVChwcmV2aW91c0xvY2FsQWNj
ZXNzICE9IE5vTm9kZSk7CisgICAgICAgICAgICAgICAgQVNTRVJUKHByZXZpb3VzTG9jYWxBY2Nl
c3MpOwogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIE5vZGVJbmRleCB0YWlsTm9k
ZUluZGV4ID0gYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKG5vZGUubG9jYWwoKSk7Ci0g
ICAgICAgICAgICAgICAgaWYgKHRhaWxOb2RlSW5kZXggPT0gbm9kZUluZGV4KQotICAgICAgICAg
ICAgICAgICAgICBibG9jay0+dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQobm9kZS5sb2NhbCgpKSA9
IHByZXZpb3VzTG9jYWxBY2Nlc3M7CisgICAgICAgICAgICAgICAgTm9kZSogdGFpbE5vZGUgPSBi
bG9jay0+dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQobm9kZS0+bG9jYWwoKSk7CisgICAgICAgICAg
ICAgICAgaWYgKHRhaWxOb2RlID09IG5vZGUpCisgICAgICAgICAgICAgICAgICAgIGJsb2NrLT52
YXJpYWJsZXNBdFRhaWwub3BlcmFuZChub2RlLT5sb2NhbCgpKSA9IHByZXZpb3VzTG9jYWxBY2Nl
c3M7CiAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIEFTU0VSVCgK
LSAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGhbdGFpbE5vZGVJbmRleF0ub3AoKSA9PSBG
bHVzaAotICAgICAgICAgICAgICAgICAgICAgICAgfHwgbV9ncmFwaFt0YWlsTm9kZUluZGV4XS5v
cCgpID09IFNldExvY2FsCi0gICAgICAgICAgICAgICAgICAgICAgICB8fCBpc0NhcHR1cmVkQXRP
ckFmdGVyKGJsb2NrLCBpbmRleEluQmxvY2ssIG5vZGUubG9jYWwoKSkpOworICAgICAgICAgICAg
ICAgICAgICAgICAgdGFpbE5vZGUtPm9wKCkgPT0gRmx1c2gKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHx8IHRhaWxOb2RlLT5vcCgpID09IFNldExvY2FsCisgICAgICAgICAgICAgICAgICAgICAg
ICB8fCBpc0NhcHR1cmVkQXRPckFmdGVyKGJsb2NrLCBpbmRleEluQmxvY2ssIG5vZGUtPmxvY2Fs
KCkpKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKLSAg
ICAgICAgICAgIENvZGVPcmlnaW4gY29kZU9yaWdpbiA9IG5vZGUuY29kZU9yaWdpbjsKLSAgICAg
ICAgICAgIEFkamFjZW5jeUxpc3QgY2hpbGRyZW4gPSBub2RlLmNoaWxkcmVuOworICAgICAgICAg
ICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2luID0gbm9kZS0+Y29kZU9yaWdpbjsKKyAgICAgICAgICAg
IEFkamFjZW5jeUxpc3QgY2hpbGRyZW4gPSBub2RlLT5jaGlsZHJlbjsKICAgICAgICAgICAgICAg
ICAKLSAgICAgICAgICAgIG1fZ3JhcGguY29udmVydFRvQ29uc3RhbnQobm9kZUluZGV4LCB2YWx1
ZSk7CisgICAgICAgICAgICBtX2dyYXBoLmNvbnZlcnRUb0NvbnN0YW50KG5vZGUsIHZhbHVlKTsK
ICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCiAgICAgICAgICAgICAgICAg
aW5kZXhJbkJsb2NrLCBEb250UmVmQ2hpbGRyZW4sIERvbnRSZWZOb2RlLCBTcGVjTm9uZSwgUGhh
bnRvbSwgY29kZU9yaWdpbiwgY2hpbGRyZW4pOwotICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgCiAgICAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKICAgICAgICAgfQogICAgICAgICBtX3N0
YXRlLnJlc2V0KCk7CkBAIC0zOTksMTIgKzM5NiwxMiBAQCBwcml2YXRlOgogICAgIGJvb2wgaXND
YXB0dXJlZEF0T3JBZnRlcihCYXNpY0Jsb2NrKiBibG9jaywgdW5zaWduZWQgaW5kZXhJbkJsb2Nr
LCBpbnQgb3BlcmFuZCkKICAgICB7CiAgICAgICAgIGZvciAoOyBpbmRleEluQmxvY2sgPCBibG9j
ay0+c2l6ZSgpOyArK2luZGV4SW5CbG9jaykgewotICAgICAgICAgICAgTm9kZSYgbm9kZSA9IG1f
Z3JhcGhbYmxvY2stPmF0KGluZGV4SW5CbG9jayldOwotICAgICAgICAgICAgaWYgKCFub2RlLmhh
c0xvY2FsKCkpCisgICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPmF0KGluZGV4SW5CbG9j
ayk7CisgICAgICAgICAgICBpZiAoIW5vZGUtPmhhc0xvY2FsKCkpCiAgICAgICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgICAgICBpZiAobm9kZS5sb2NhbCgpICE9IG9wZXJhbmQpCisgICAg
ICAgICAgICBpZiAobm9kZS0+bG9jYWwoKSAhPSBvcGVyYW5kKQogICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwotICAgICAgICAgICAgaWYgKG5vZGUudmFyaWFibGVBY2Nlc3NEYXRhKCktPmlzQ2Fw
dHVyZWQoKSkKKyAgICAgICAgICAgIGlmIChub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+aXND
YXB0dXJlZCgpKQogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAg
ICAgIHJldHVybiBmYWxzZTsKQEAgLTQxMywyMCArNDEwLDIwIEBAIHByaXZhdGU6CiAgICAgCiAg
ICAgdm9pZCBhZGRTdHJ1Y3R1cmVUcmFuc2l0aW9uQ2hlY2soQ29kZU9yaWdpbiBjb2RlT3JpZ2lu
LCB1bnNpZ25lZCBpbmRleEluQmxvY2ssIEpTQ2VsbCogY2VsbCkKICAgICB7Ci0gICAgICAgIE5v
ZGVJbmRleCB3ZWFrQ29uc3RhbnRJbmRleCA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCisg
ICAgICAgIE5vZGUqIHdlYWtDb25zdGFudCA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCiAg
ICAgICAgICAgICBpbmRleEluQmxvY2ssIERvbnRSZWZDaGlsZHJlbiwgRG9udFJlZk5vZGUsIHNw
ZWN1bGF0aW9uRnJvbVZhbHVlKGNlbGwpLAogICAgICAgICAgICAgV2Vha0pTQ29uc3RhbnQsIGNv
ZGVPcmlnaW4sIE9wSW5mbyhjZWxsKSk7CiAgICAgICAgIAogICAgICAgICBpZiAoY2VsbC0+c3Ry
dWN0dXJlKCktPnRyYW5zaXRpb25XYXRjaHBvaW50U2V0SXNTdGlsbFZhbGlkKCkpIHsKICAgICAg
ICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCiAgICAgICAgICAgICAgICAgaW5kZXhJ
bkJsb2NrLCBSZWZDaGlsZHJlbiwgRG9udFJlZk5vZGUsIFNwZWNOb25lLCBTdHJ1Y3R1cmVUcmFu
c2l0aW9uV2F0Y2hwb2ludCwKLSAgICAgICAgICAgICAgICBjb2RlT3JpZ2luLCBPcEluZm8oY2Vs
bC0+c3RydWN0dXJlKCkpLCB3ZWFrQ29uc3RhbnRJbmRleCk7CisgICAgICAgICAgICAgICAgY29k
ZU9yaWdpbiwgT3BJbmZvKGNlbGwtPnN0cnVjdHVyZSgpKSwgd2Vha0NvbnN0YW50KTsKICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgfQogCiAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2Vy
dE5vZGUoCiAgICAgICAgICAgICBpbmRleEluQmxvY2ssIFJlZkNoaWxkcmVuLCBEb250UmVmTm9k
ZSwgU3BlY05vbmUsIENoZWNrU3RydWN0dXJlLCBjb2RlT3JpZ2luLAotICAgICAgICAgICAgT3BJ
bmZvKG1fZ3JhcGguYWRkU3RydWN0dXJlU2V0KGNlbGwtPnN0cnVjdHVyZSgpKSksIHdlYWtDb25z
dGFudEluZGV4KTsKKyAgICAgICAgICAgIE9wSW5mbyhtX2dyYXBoLmFkZFN0cnVjdHVyZVNldChj
ZWxsLT5zdHJ1Y3R1cmUoKSkpLCB3ZWFrQ29uc3RhbnQpOwogICAgIH0KICAgICAKICAgICAvLyBU
aGlzIGlzIG5lY2Vzc2FyeSBiZWNhdXNlIHRoZSBDRkEgbWF5IHJlYWNoIGNvbmNsdXNpb25zIGFi
b3V0IGNvbnN0YW50cyBiYXNlZCBvbiBpdHMKQEAgLTQ1MSw5ICs0NDgsOCBAQCBwcml2YXRlOgog
ICAgICAgICAgICAgaWYgKG1fc3RhdGUuaXNWYWxpZCgpKQogICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4ID0gYmxv
Y2stPmF0KGluZGV4SW5CbG9jayk7Ci0gICAgICAgICAgICBOb2RlJiBub2RlID0gbV9ncmFwaFtu
b2RlSW5kZXhdOwotICAgICAgICAgICAgc3dpdGNoIChub2RlLm9wKCkpIHsKKyAgICAgICAgICAg
IE5vZGUqIG5vZGUgPSBibG9jay0+YXQoaW5kZXhJbkJsb2NrKTsKKyAgICAgICAgICAgIHN3aXRj
aCAobm9kZS0+b3AoKSkgewogICAgICAgICAgICAgY2FzZSBSZXR1cm46CiAgICAgICAgICAgICBj
YXNlIFRocm93OgogICAgICAgICAgICAgY2FzZSBUaHJvd1JlZmVyZW5jZUVycm9yOgpAQCAtNDY0
LDcgKzQ2MCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAg
ICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCiAgICAgICAgICAgICAgICAgICAgIGluZGV4
SW5CbG9jaywgRG9udFJlZkNoaWxkcmVuLCBEb250UmVmTm9kZSwgU3BlY05vbmUsIEZvcmNlT1NS
RXhpdCwKLSAgICAgICAgICAgICAgICAgICAgbm9kZS5jb2RlT3JpZ2luKTsKKyAgICAgICAgICAg
ICAgICAgICAgbm9kZS0+Y29kZU9yaWdpbik7CiAgICAgICAgICAgICAgICAgY2hhbmdlZCA9IHRy
dWU7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0VkZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHRWRnZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0VkZ2UuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQxIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJERkdFZGdlLmgiCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKwor
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCit2b2lkIEVkZ2U6OmR1bXAoUHJpbnRT
dHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQodXNlS2luZFRvU3RyaW5nKHVzZUtp
bmQoKSksIG5vZGUoKSk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlm
IC8vIEVOQUJMRShERkdfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0VkZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0VkZ2Uu
aAkocmV2aXNpb24gMTQwOTA0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdFZGdl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
MSwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTQzLDQxICs0MywzOSBAQCBwdWJsaWM6CiAgICAgewogICAgIH0K
ICAgICAKLSAgICBleHBsaWNpdCBFZGdlKE5vZGVJbmRleCBub2RlSW5kZXgpCi0gICAgICAgIDog
bV9lbmNvZGVkV29yZChtYWtlV29yZChub2RlSW5kZXgsIFVudHlwZWRVc2UpKQorICAgIGV4cGxp
Y2l0IEVkZ2UoTm9kZSogbm9kZSkKKyAgICAgICAgOiBtX2VuY29kZWRXb3JkKG1ha2VXb3JkKG5v
ZGUsIFVudHlwZWRVc2UpKQogICAgIHsKICAgICB9CiAgICAgCi0gICAgRWRnZShOb2RlSW5kZXgg
bm9kZUluZGV4LCBVc2VLaW5kIHVzZUtpbmQpCi0gICAgICAgIDogbV9lbmNvZGVkV29yZChtYWtl
V29yZChub2RlSW5kZXgsIHVzZUtpbmQpKQorICAgIEVkZ2UoTm9kZSogbm9kZSwgVXNlS2luZCB1
c2VLaW5kKQorICAgICAgICA6IG1fZW5jb2RlZFdvcmQobWFrZVdvcmQobm9kZSwgdXNlS2luZCkp
CiAgICAgewogICAgIH0KICAgICAKLSAgICBOb2RlSW5kZXggaW5kZXhVbmNoZWNrZWQoKSBjb25z
dCB7IHJldHVybiBtX2VuY29kZWRXb3JkID4+IHNoaWZ0KCk7IH0KLSAgICBOb2RlSW5kZXggaW5k
ZXgoKSBjb25zdAotICAgIHsKLSAgICAgICAgQVNTRVJUKGlzU2V0KCkpOwotICAgICAgICByZXR1
cm4gbV9lbmNvZGVkV29yZCA+PiBzaGlmdCgpOwotICAgIH0KLSAgICB2b2lkIHNldEluZGV4KE5v
ZGVJbmRleCBub2RlSW5kZXgpCisgICAgTm9kZSogbm9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fZW5j
b2RlZFdvcmQgJiB+KCgxIDw8IHNoaWZ0KCkpIC0gMSk7IH0KKyAgICBOb2RlJiBvcGVyYXRvcioo
KSBjb25zdCB7IHJldHVybiAqZ2V0KCk7IH0KKyAgICBOb2RlKiBvcGVyYXRvci0+KCkgY29uc3Qg
eyByZXR1cm4gZ2V0KCk7IH0KKyAgICAKKyAgICB2b2lkIHNldE5vZGUoTm9kZSogbm9kZSkKICAg
ICB7Ci0gICAgICAgIG1fZW5jb2RlZFdvcmQgPSBtYWtlV29yZChub2RlSW5kZXgsIHVzZUtpbmQo
KSk7CisgICAgICAgIG1fZW5jb2RlZFdvcmQgPSBtYWtlV29yZChub2RlLCB1c2VLaW5kKCkpOwog
ICAgIH0KICAgICAKICAgICBVc2VLaW5kIHVzZUtpbmQoKSBjb25zdAogICAgIHsKLSAgICAgICAg
QVNTRVJUKGlzU2V0KCkpOworICAgICAgICBBU1NFUlQobm9kZSgpKTsKICAgICAgICAgdW5zaWdu
ZWQgbWFza2VkID0gbV9lbmNvZGVkV29yZCAmICgoKDEgPDwgc2hpZnQoKSkgLSAxKSk7CiAgICAg
ICAgIEFTU0VSVChtYXNrZWQgPCBMYXN0VXNlS2luZCk7CiAgICAgICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxVc2VLaW5kPihtYXNrZWQpOwogICAgIH0KICAgICB2b2lkIHNldFVzZUtpbmQoVXNlS2lu
ZCB1c2VLaW5kKQogICAgIHsKLSAgICAgICAgQVNTRVJUKGlzU2V0KCkpOwotICAgICAgICBtX2Vu
Y29kZWRXb3JkID0gbWFrZVdvcmQoaW5kZXgoKSwgdXNlS2luZCk7CisgICAgICAgIEFTU0VSVChu
b2RlKCkpOworICAgICAgICBtX2VuY29kZWRXb3JkID0gbWFrZVdvcmQobm9kZSgpLCB1c2VLaW5k
KTsKICAgICB9CiAgICAgCi0gICAgYm9vbCBpc1NldCgpIGNvbnN0IHsgcmV0dXJuIGluZGV4VW5j
aGVja2VkKCkgIT0gTm9Ob2RlOyB9CisgICAgYm9vbCBpc1NldCgpIGNvbnN0IHsgcmV0dXJuICEh
bm9kZSgpOyB9CiAgICAgCiAgICAgdHlwZWRlZiB2b2lkKiBFZGdlOjoqVW5zcGVjaWZpZWRCb29s
VHlwZTsKICAgICBvcGVyYXRvciBVbnNwZWNpZmllZEJvb2xUeXBlKigpIGNvbnN0IHsgcmV0dXJu
IHJlaW50ZXJwcmV0X2Nhc3Q8VW5zcGVjaWZpZWRCb29sVHlwZSo+KGlzU2V0KCkpOyB9CkBAIC05
MiwzOCArOTAsNDEgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgcmV0dXJuIG1fZW5jb2RlZFdv
cmQgIT0gb3RoZXIubV9lbmNvZGVkV29yZDsKICAgICB9CisgICAgCisgICAgdm9pZCBkdW1wKFBy
aW50U3RyZWFtJikgY29uc3Q7CiAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIEFkamFjZW5j
eUxpc3Q7CiAgICAgCi0gICAgc3RhdGljIHVpbnQzMl90IHNoaWZ0KCkgeyByZXR1cm4gNDsgfQor
ICAgIHN0YXRpYyB1aW50MzJfdCBzaGlmdCgpIHsgcmV0dXJuIDI7IH0KICAgICAKLSAgICBzdGF0
aWMgaW50MzJfdCBtYWtlV29yZChOb2RlSW5kZXggbm9kZUluZGV4LCBVc2VLaW5kIHVzZUtpbmQp
CisgICAgc3RhdGljIHVpbnRwdHJfdCBtYWtlV29yZChOb2RlKiBub2RlLCBVc2VLaW5kIHVzZUtp
bmQpCiAgICAgewotICAgICAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8dWludDMyX3Q+KCgoc3RhdGlj
X2Nhc3Q8aW50MzJfdD4obm9kZUluZGV4KSA8PCBzaGlmdCgpKSA+PiBzaGlmdCgpKSkgPT0gbm9k
ZUluZGV4KTsKKyAgICAgICAgdWludHB0cl90IHZhbHVlID0gYml0d2lzZV9jYXN0PHVpbnRwdHJf
dD4obm9kZSk7CisgICAgICAgIEFTU0VSVCghKHZhbHVlICYgKCgxIDw8IHNoaWZ0KCkpIC0gMSkp
KTsKICAgICAgICAgQVNTRVJUKHVzZUtpbmQgPj0gMCAmJiB1c2VLaW5kIDwgTGFzdFVzZUtpbmQp
OwogICAgICAgICBBU1NFUlQoTGFzdFVzZUtpbmQgPD0gKDEgPDwgc2hpZnQoKSkpOwotICAgICAg
ICByZXR1cm4gKG5vZGVJbmRleCA8PCBzaGlmdCgpKSB8IHVzZUtpbmQ7CisgICAgICAgIHJldHVy
biB2YWx1ZSB8IHN0YXRpY19jYXN0PHVpbnRwdHJfdD4odXNlS2luZCk7CiAgICAgfQogICAgIAot
ICAgIGludDMyX3QgbV9lbmNvZGVkV29yZDsKKyAgICB1aW50cHRyX3QgbV9lbmNvZGVkV29yZDsK
IH07CiAKLWlubGluZSBib29sIG9wZXJhdG9yPT0oRWRnZSBub2RlVXNlLCBOb2RlSW5kZXggbm9k
ZUluZGV4KQoraW5saW5lIGJvb2wgb3BlcmF0b3I9PShFZGdlIGVkZ2UsIE5vZGUqIG5vZGUpCiB7
Ci0gICAgcmV0dXJuIG5vZGVVc2UuaW5kZXhVbmNoZWNrZWQoKSA9PSBub2RlSW5kZXg7CisgICAg
cmV0dXJuIGVkZ2Uubm9kZSgpID09IG5vZGU7CiB9Ci1pbmxpbmUgYm9vbCBvcGVyYXRvcj09KE5v
ZGVJbmRleCBub2RlSW5kZXgsIEVkZ2Ugbm9kZVVzZSkKK2lubGluZSBib29sIG9wZXJhdG9yPT0o
Tm9kZSogbm9kZSwgRWRnZSBlZGdlKQogewotICAgIHJldHVybiBub2RlVXNlLmluZGV4VW5jaGVj
a2VkKCkgPT0gbm9kZUluZGV4OworICAgIHJldHVybiBlZGdlLm5vZGUoKSA9PSBub2RlOwogfQot
aW5saW5lIGJvb2wgb3BlcmF0b3IhPShFZGdlIG5vZGVVc2UsIE5vZGVJbmRleCBub2RlSW5kZXgp
CitpbmxpbmUgYm9vbCBvcGVyYXRvciE9KEVkZ2UgZWRnZSwgTm9kZSogbm9kZSkKIHsKLSAgICBy
ZXR1cm4gbm9kZVVzZS5pbmRleFVuY2hlY2tlZCgpICE9IG5vZGVJbmRleDsKKyAgICByZXR1cm4g
ZWRnZS5ub2RlKCkgIT0gbm9kZTsKIH0KLWlubGluZSBib29sIG9wZXJhdG9yIT0oTm9kZUluZGV4
IG5vZGVJbmRleCwgRWRnZSBub2RlVXNlKQoraW5saW5lIGJvb2wgb3BlcmF0b3IhPShOb2RlKiBu
b2RlLCBFZGdlIGVkZ2UpCiB7Ci0gICAgcmV0dXJuIG5vZGVVc2UuaW5kZXhVbmNoZWNrZWQoKSAh
PSBub2RlSW5kZXg7CisgICAgcmV0dXJuIGVkZ2Uubm9kZSgpICE9IG5vZGU7CiB9CiAKIH0gfSAv
LyBuYW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Rml4dXBQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdGaXh1cFBoYXNlLmNwcAkocmV2aXNpb24gMTQwOTA0KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTgsMjEgKzU4LDIxIEBA
IHByaXZhdGU6CiAgICAgICAgIEFTU0VSVChibG9jay0+aXNSZWFjaGFibGUpOwogICAgICAgICBt
X2Jsb2NrID0gYmxvY2s7CiAgICAgICAgIGZvciAobV9pbmRleEluQmxvY2sgPSAwOyBtX2luZGV4
SW5CbG9jayA8IGJsb2NrLT5zaXplKCk7ICsrbV9pbmRleEluQmxvY2spIHsKLSAgICAgICAgICAg
IG1fY29tcGlsZUluZGV4ID0gYmxvY2stPmF0KG1faW5kZXhJbkJsb2NrKTsKLSAgICAgICAgICAg
IGZpeHVwTm9kZShtX2dyYXBoW21fY29tcGlsZUluZGV4XSk7CisgICAgICAgICAgICBtX2N1cnJl
bnROb2RlID0gYmxvY2stPmF0KG1faW5kZXhJbkJsb2NrKTsKKyAgICAgICAgICAgIGZpeHVwTm9k
ZShtX2N1cnJlbnROb2RlKTsKICAgICAgICAgfQogICAgICAgICBtX2luc2VydGlvblNldC5leGVj
dXRlKGJsb2NrKTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBmaXh1cE5vZGUoTm9kZSYgbm9kZSkK
KyAgICB2b2lkIGZpeHVwTm9kZShOb2RlKiBub2RlKQogICAgIHsKLSAgICAgICAgaWYgKCFub2Rl
LnNob3VsZEdlbmVyYXRlKCkpCisgICAgICAgIGlmICghbm9kZS0+c2hvdWxkR2VuZXJhdGUoKSkK
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgCi0gICAgICAgIE5vZGVUeXBlIG9wID0gbm9k
ZS5vcCgpOworICAgICAgICBOb2RlVHlwZSBvcCA9IG5vZGUtPm9wKCk7CiAKICNpZiBERkdfRU5B
QkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCi0gICAgICAgIGRhdGFMb2dGKCIgICAlcyBA
JXU6ICIsIEdyYXBoOjpvcE5hbWUob3ApLCBtX2NvbXBpbGVJbmRleCk7CisgICAgICAgIGRhdGFM
b2dGKCIgICAlcyBAJXU6ICIsIEdyYXBoOjpvcE5hbWUob3ApLCBub2RlLT5pbmRleCgpKTsKICNl
bmRpZgogICAgICAgICAKICAgICAgICAgc3dpdGNoIChvcCkgewpAQCAtODAsODAgKzgwLDcxIEBA
IHByaXZhdGU6CiAgICAgICAgICAgICBpZiAobV9ncmFwaC5tX2ZpeHBvaW50U3RhdGUgPiBCZWZv
cmVGaXhwb2ludCkKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIAotICAgICAg
ICAgICAgTm9kZSogbm9kZVB0ciA9ICZub2RlOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBp
ZiAoIWlzSW50MzJTcGVjdWxhdGlvbihtX2dyYXBoW21fY29tcGlsZUluZGV4XS5wcmVkaWN0aW9u
KCkpKQorICAgICAgICAgICAgaWYgKCFpc0ludDMyU3BlY3VsYXRpb24obm9kZS0+cHJlZGljdGlv
bigpKSkKICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGlmIChjb2RlQmxvY2so
KS0+aWRlbnRpZmllcihub2RlUHRyLT5pZGVudGlmaWVyTnVtYmVyKCkpICE9IGdsb2JhbERhdGEo
KS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgpCisgICAgICAgICAgICBpZiAoY29kZUJsb2NrKCktPmlk
ZW50aWZpZXIobm9kZS0+aWRlbnRpZmllck51bWJlcigpKSAhPSBnbG9iYWxEYXRhKCkucHJvcGVy
dHlOYW1lcy0+bGVuZ3RoKQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgQXJy
YXlQcm9maWxlKiBhcnJheVByb2ZpbGUgPSAKLSAgICAgICAgICAgICAgICBtX2dyYXBoLmJhc2Vs
aW5lQ29kZUJsb2NrRm9yKG5vZGVQdHItPmNvZGVPcmlnaW4pLT5nZXRBcnJheVByb2ZpbGUoCi0g
ICAgICAgICAgICAgICAgICAgIG5vZGVQdHItPmNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCk7Cisg
ICAgICAgICAgICAgICAgbV9ncmFwaC5iYXNlbGluZUNvZGVCbG9ja0Zvcihub2RlLT5jb2RlT3Jp
Z2luKS0+Z2V0QXJyYXlQcm9maWxlKAorICAgICAgICAgICAgICAgICAgICBub2RlLT5jb2RlT3Jp
Z2luLmJ5dGVjb2RlSW5kZXgpOwogICAgICAgICAgICAgQXJyYXlNb2RlIGFycmF5TW9kZSA9IEFy
cmF5TW9kZShBcnJheTo6U2VsZWN0VXNpbmdQcmVkaWN0aW9ucyk7CiAgICAgICAgICAgICBpZiAo
YXJyYXlQcm9maWxlKSB7Ci0gICAgICAgICAgICAgICAgYXJyYXlQcm9maWxlLT5jb21wdXRlVXBk
YXRlZFByZWRpY3Rpb24obV9ncmFwaC5iYXNlbGluZUNvZGVCbG9ja0Zvcihub2RlLmNvZGVPcmln
aW4pKTsKKyAgICAgICAgICAgICAgICBhcnJheVByb2ZpbGUtPmNvbXB1dGVVcGRhdGVkUHJlZGlj
dGlvbihtX2dyYXBoLmJhc2VsaW5lQ29kZUJsb2NrRm9yKG5vZGUtPmNvZGVPcmlnaW4pKTsKICAg
ICAgICAgICAgICAgICBhcnJheU1vZGUgPSBBcnJheU1vZGU6OmZyb21PYnNlcnZlZChhcnJheVBy
b2ZpbGUsIEFycmF5OjpSZWFkLCBmYWxzZSk7CiAgICAgICAgICAgICAgICAgYXJyYXlNb2RlID0g
YXJyYXlNb2RlLnJlZmluZSgKLSAgICAgICAgICAgICAgICAgICAgbV9ncmFwaFtub2RlLmNoaWxk
MSgpXS5wcmVkaWN0aW9uKCksCi0gICAgICAgICAgICAgICAgICAgIG1fZ3JhcGhbbV9jb21waWxl
SW5kZXhdLnByZWRpY3Rpb24oKSk7CisgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgp
LT5wcmVkaWN0aW9uKCksIG5vZGUtPnByZWRpY3Rpb24oKSk7CiAgICAgICAgICAgICAgICAgaWYg
KGFycmF5TW9kZS5zdXBwb3J0c0xlbmd0aCgpICYmIGFycmF5UHJvZmlsZS0+aGFzRGVmaW5pdGVT
dHJ1Y3R1cmUoKSkgewogICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnRO
b2RlKAogICAgICAgICAgICAgICAgICAgICAgICAgbV9pbmRleEluQmxvY2ssIFJlZkNoaWxkcmVu
LCBEb250UmVmTm9kZSwgU3BlY05vbmUsIENoZWNrU3RydWN0dXJlLAotICAgICAgICAgICAgICAg
ICAgICAgICAgbm9kZVB0ci0+Y29kZU9yaWdpbiwgT3BJbmZvKG1fZ3JhcGguYWRkU3RydWN0dXJl
U2V0KGFycmF5UHJvZmlsZS0+ZXhwZWN0ZWRTdHJ1Y3R1cmUoKSkpLAotICAgICAgICAgICAgICAg
ICAgICAgICAgbm9kZVB0ci0+Y2hpbGQxKCkuaW5kZXgoKSk7Ci0gICAgICAgICAgICAgICAgICAg
IG5vZGVQdHIgPSAmbV9ncmFwaFttX2NvbXBpbGVJbmRleF07CisgICAgICAgICAgICAgICAgICAg
ICAgICBub2RlLT5jb2RlT3JpZ2luLCBPcEluZm8obV9ncmFwaC5hZGRTdHJ1Y3R1cmVTZXQoYXJy
YXlQcm9maWxlLT5leHBlY3RlZFN0cnVjdHVyZSgpKSksCisgICAgICAgICAgICAgICAgICAgICAg
ICBub2RlLT5jaGlsZDEoKS5ub2RlKCkpOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgYXJyYXlNb2RlID0gYXJyYXlNb2RlLnJlZmluZSgK
LSAgICAgICAgICAgICAgICAgICAgbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5wcmVkaWN0aW9uKCks
Ci0gICAgICAgICAgICAgICAgICAgIG1fZ3JhcGhbbV9jb21waWxlSW5kZXhdLnByZWRpY3Rpb24o
KSk7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICBh
cnJheU1vZGUgPSBhcnJheU1vZGUucmVmaW5lKG5vZGUtPmNoaWxkMSgpLT5wcmVkaWN0aW9uKCks
IG5vZGUtPnByZWRpY3Rpb24oKSk7CiAgICAgICAgICAgICBpZiAoIWFycmF5TW9kZS5zdXBwb3J0
c0xlbmd0aCgpKQogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgbm9kZVB0ci0+
c2V0T3AoR2V0QXJyYXlMZW5ndGgpOwotICAgICAgICAgICAgQVNTRVJUKG5vZGVQdHItPmZsYWdz
KCkgJiBOb2RlTXVzdEdlbmVyYXRlKTsKLSAgICAgICAgICAgIG5vZGVQdHItPmNsZWFyRmxhZ3Mo
Tm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVDbG9iYmVyc1dvcmxkKTsKLSAgICAgICAgICAgIG1fZ3Jh
cGguZGVyZWYobV9jb21waWxlSW5kZXgpOwotICAgICAgICAgICAgbm9kZVB0ci0+c2V0QXJyYXlN
b2RlKGFycmF5TW9kZSk7CisgICAgICAgICAgICBub2RlLT5zZXRPcChHZXRBcnJheUxlbmd0aCk7
CisgICAgICAgICAgICBBU1NFUlQobm9kZS0+ZmxhZ3MoKSAmIE5vZGVNdXN0R2VuZXJhdGUpOwor
ICAgICAgICAgICAgbm9kZS0+Y2xlYXJGbGFncyhOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZUNsb2Ji
ZXJzV29ybGQpOworICAgICAgICAgICAgbV9ncmFwaC5kZXJlZihub2RlKTsKKyAgICAgICAgICAg
IG5vZGUtPnNldEFycmF5TW9kZShhcnJheU1vZGUpOwogICAgICAgICAgICAgCi0gICAgICAgICAg
ICBOb2RlSW5kZXggc3RvcmFnZSA9IGNoZWNrQXJyYXkoYXJyYXlNb2RlLCBub2RlUHRyLT5jb2Rl
T3JpZ2luLCBub2RlUHRyLT5jaGlsZDEoKS5pbmRleCgpLCBOb05vZGUsIGxlbmd0aE5lZWRzU3Rv
cmFnZSwgbm9kZVB0ci0+c2hvdWxkR2VuZXJhdGUoKSk7Ci0gICAgICAgICAgICBpZiAoc3RvcmFn
ZSA9PSBOb05vZGUpCisgICAgICAgICAgICBOb2RlKiBzdG9yYWdlID0gY2hlY2tBcnJheShhcnJh
eU1vZGUsIG5vZGUtPmNvZGVPcmlnaW4sIG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgMCwgbGVuZ3Ro
TmVlZHNTdG9yYWdlLCBub2RlLT5zaG91bGRHZW5lcmF0ZSgpKTsKKyAgICAgICAgICAgIGlmICgh
c3RvcmFnZSkKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIAotICAgICAgICAg
ICAgbm9kZVB0ciA9ICZtX2dyYXBoW21fY29tcGlsZUluZGV4XTsKLSAgICAgICAgICAgIG5vZGVQ
dHItPmNoaWxkcmVuLmNoaWxkMigpID0gRWRnZShzdG9yYWdlKTsKKyAgICAgICAgICAgIG5vZGUt
PmNoaWxkcmVuLmNoaWxkMigpID0gRWRnZShzdG9yYWdlKTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICB9CiAgICAgICAgIGNhc2UgR2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZTogewotICAg
ICAgICAgICAgQVNTRVJUKG5vZGUuYXJyYXlNb2RlKCkuY2FuQ1NFU3RvcmFnZSgpKTsKKyAgICAg
ICAgICAgIEFTU0VSVChub2RlLT5hcnJheU1vZGUoKS5jYW5DU0VTdG9yYWdlKCkpOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBHZXRCeVZhbDogewotICAgICAg
ICAgICAgbm9kZS5zZXRBcnJheU1vZGUoCi0gICAgICAgICAgICAgICAgbm9kZS5hcnJheU1vZGUo
KS5yZWZpbmUoCi0gICAgICAgICAgICAgICAgICAgIG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ucHJl
ZGljdGlvbigpLAotICAgICAgICAgICAgICAgICAgICBtX2dyYXBoW25vZGUuY2hpbGQyKCldLnBy
ZWRpY3Rpb24oKSwKLSAgICAgICAgICAgICAgICAgICAgU3BlY05vbmUsIG5vZGUuZmxhZ3MoKSkp
OworICAgICAgICAgICAgbm9kZS0+c2V0QXJyYXlNb2RlKAorICAgICAgICAgICAgICAgIG5vZGUt
PmFycmF5TW9kZSgpLnJlZmluZSgKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkt
PnByZWRpY3Rpb24oKSwKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQyKCktPnByZWRp
Y3Rpb24oKSwKKyAgICAgICAgICAgICAgICAgICAgU3BlY05vbmUsIG5vZGUtPmZsYWdzKCkpKTsK
ICAgICAgICAgICAgIAotICAgICAgICAgICAgYmxlc3NBcnJheU9wZXJhdGlvbihub2RlLmNoaWxk
MSgpLCBub2RlLmNoaWxkMigpLCAyKTsKKyAgICAgICAgICAgIGJsZXNzQXJyYXlPcGVyYXRpb24o
bm9kZS0+Y2hpbGQxKCksIG5vZGUtPmNoaWxkMigpLCAyKTsKICAgICAgICAgICAgIAotICAgICAg
ICAgICAgTm9kZSogbm9kZVB0ciA9ICZtX2dyYXBoW21fY29tcGlsZUluZGV4XTsKLSAgICAgICAg
ICAgIEFycmF5TW9kZSBhcnJheU1vZGUgPSBub2RlUHRyLT5hcnJheU1vZGUoKTsKKyAgICAgICAg
ICAgIEFycmF5TW9kZSBhcnJheU1vZGUgPSBub2RlLT5hcnJheU1vZGUoKTsKICAgICAgICAgICAg
IGlmIChhcnJheU1vZGUudHlwZSgpID09IEFycmF5OjpEb3VibGUKICAgICAgICAgICAgICAgICAm
JiBhcnJheU1vZGUuYXJyYXlDbGFzcygpID09IEFycmF5OjpPcmlnaW5hbEFycmF5CiAgICAgICAg
ICAgICAgICAgJiYgYXJyYXlNb2RlLnNwZWN1bGF0aW9uKCkgPT0gQXJyYXk6OkluQm91bmRzCiAg
ICAgICAgICAgICAgICAgJiYgYXJyYXlNb2RlLmNvbnZlcnNpb24oKSA9PSBBcnJheTo6QXNJcwot
ICAgICAgICAgICAgICAgICYmIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGVQdHItPmNvZGVP
cmlnaW4pLT5hcnJheVByb3RvdHlwZUNoYWluSXNTYW5lKCkKLSAgICAgICAgICAgICAgICAmJiAh
KG5vZGVQdHItPmZsYWdzKCkgJiBOb2RlVXNlZEFzT3RoZXIpKQotICAgICAgICAgICAgICAgIG5v
ZGVQdHItPnNldEFycmF5TW9kZShhcnJheU1vZGUud2l0aFNwZWN1bGF0aW9uKEFycmF5OjpTYW5l
Q2hhaW4pKTsKKyAgICAgICAgICAgICAgICAmJiBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2Rl
LT5jb2RlT3JpZ2luKS0+YXJyYXlQcm90b3R5cGVDaGFpbklzU2FuZSgpCisgICAgICAgICAgICAg
ICAgJiYgIShub2RlLT5mbGFncygpICYgTm9kZVVzZWRBc090aGVyKSkKKyAgICAgICAgICAgICAg
ICBub2RlLT5zZXRBcnJheU1vZGUoYXJyYXlNb2RlLndpdGhTcGVjdWxhdGlvbihBcnJheTo6U2Fu
ZUNoYWluKSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAg
ICAgICAgIGNhc2UgU3RyaW5nQ2hhckF0OgogICAgICAgICBjYXNlIFN0cmluZ0NoYXJDb2RlQXQ6
IHsKICAgICAgICAgICAgIC8vIEN1cnJlbnRseSB3ZSBoYXZlIG5vIGdvb2Qgd2F5IG9mIHJlZmlu
aW5nIHRoZXNlLgotICAgICAgICAgICAgQVNTRVJUKG5vZGUuYXJyYXlNb2RlKCkgPT0gQXJyYXlN
b2RlKEFycmF5OjpTdHJpbmcpKTsKLSAgICAgICAgICAgIGJsZXNzQXJyYXlPcGVyYXRpb24obm9k
ZS5jaGlsZDEoKSwgbm9kZS5jaGlsZDIoKSwgMik7CisgICAgICAgICAgICBBU1NFUlQobm9kZS0+
YXJyYXlNb2RlKCkgPT0gQXJyYXlNb2RlKEFycmF5OjpTdHJpbmcpKTsKKyAgICAgICAgICAgIGJs
ZXNzQXJyYXlPcGVyYXRpb24obm9kZS0+Y2hpbGQxKCksIG5vZGUtPmNoaWxkMigpLCAyKTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKQEAgLTE2NywxNSArMTU4
LDE0IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAvLyBpZ25vcmVkLiBUaGF0J3MgYmVjYXVzZSBB
cnJheVB1c2ggY2FuJ3QgaGFuZGxlIGFueSBhcnJheSBtb2RlcyB0aGF0IGFyZW4ndAogICAgICAg
ICAgICAgLy8gYXJyYXktcmVsYXRlZCAtIHNvIGlmIHJlZmluZSgpIHR1cm5lZCB0aGlzIGludG8g
YSAiR2VuZXJpYyIgQXJyYXlQdXNoIHRoZW4KICAgICAgICAgICAgIC8vIHRoYXQgd291bGQgYnJl
YWsgdGhpbmdzLgotICAgICAgICAgICAgbm9kZS5zZXRBcnJheU1vZGUoCi0gICAgICAgICAgICAg
ICAgbm9kZS5hcnJheU1vZGUoKS5yZWZpbmUoCi0gICAgICAgICAgICAgICAgICAgIG1fZ3JhcGhb
bm9kZS5jaGlsZDEoKV0ucHJlZGljdGlvbigpICYgU3BlY0NlbGwsCisgICAgICAgICAgICBub2Rl
LT5zZXRBcnJheU1vZGUoCisgICAgICAgICAgICAgICAgbm9kZS0+YXJyYXlNb2RlKCkucmVmaW5l
KAorICAgICAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDEoKS0+cHJlZGljdGlvbigpICYgU3Bl
Y0NlbGwsCiAgICAgICAgICAgICAgICAgICAgIFNwZWNJbnQzMiwKLSAgICAgICAgICAgICAgICAg
ICAgbV9ncmFwaFtub2RlLmNoaWxkMigpXS5wcmVkaWN0aW9uKCkpKTsKLSAgICAgICAgICAgIGJs
ZXNzQXJyYXlPcGVyYXRpb24obm9kZS5jaGlsZDEoKSwgRWRnZSgpLCAyKTsKKyAgICAgICAgICAg
ICAgICAgICAgbm9kZS0+Y2hpbGQyKCktPnByZWRpY3Rpb24oKSkpOworICAgICAgICAgICAgYmxl
c3NBcnJheU9wZXJhdGlvbihub2RlLT5jaGlsZDEoKSwgRWRnZSgpLCAyKTsKICAgICAgICAgICAg
IAotICAgICAgICAgICAgTm9kZSogbm9kZVB0ciA9ICZtX2dyYXBoW21fY29tcGlsZUluZGV4XTsK
LSAgICAgICAgICAgIHN3aXRjaCAobm9kZVB0ci0+YXJyYXlNb2RlKCkudHlwZSgpKSB7CisgICAg
ICAgICAgICBzd2l0Y2ggKG5vZGUtPmFycmF5TW9kZSgpLnR5cGUoKSkgewogICAgICAgICAgICAg
Y2FzZSBBcnJheTo6RG91YmxlOgogICAgICAgICAgICAgICAgIGZpeERvdWJsZUVkZ2UoMSk7CiAg
ICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0xODYsMTUgKzE3NiwxNSBAQCBwcml2YXRlOgogICAg
ICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBBcnJheVBvcDogewotICAgICAgICAg
ICAgYmxlc3NBcnJheU9wZXJhdGlvbihub2RlLmNoaWxkMSgpLCBFZGdlKCksIDEpOworICAgICAg
ICAgICAgYmxlc3NBcnJheU9wZXJhdGlvbihub2RlLT5jaGlsZDEoKSwgRWRnZSgpLCAxKTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBW
YWx1ZVRvSW50MzI6IHsKLSAgICAgICAgICAgIGlmIChtX2dyYXBoW25vZGUuY2hpbGQxKCldLnNo
b3VsZFNwZWN1bGF0ZU51bWJlcigpCi0gICAgICAgICAgICAgICAgJiYgbm9kZS5tdXN0R2VuZXJh
dGUoKSkgewotICAgICAgICAgICAgICAgIG5vZGUuY2xlYXJGbGFncyhOb2RlTXVzdEdlbmVyYXRl
KTsKLSAgICAgICAgICAgICAgICBtX2dyYXBoLmRlcmVmKG1fY29tcGlsZUluZGV4KTsKKyAgICAg
ICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlTnVtYmVyKCkKKyAgICAg
ICAgICAgICAgICAmJiBub2RlLT5tdXN0R2VuZXJhdGUoKSkgeworICAgICAgICAgICAgICAgIG5v
ZGUtPmNsZWFyRmxhZ3MoTm9kZU11c3RHZW5lcmF0ZSk7CisgICAgICAgICAgICAgICAgbV9ncmFw
aC5kZXJlZihub2RlKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9CkBAIC0yMDUsOCArMTk1LDggQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBCaXRSU2hpZnQ6
CiAgICAgICAgIGNhc2UgQml0TFNoaWZ0OgogICAgICAgICBjYXNlIEJpdFVSU2hpZnQ6IHsKLSAg
ICAgICAgICAgIGZpeEludEVkZ2Uobm9kZS5jaGlsZHJlbi5jaGlsZDEoKSk7Ci0gICAgICAgICAg
ICBmaXhJbnRFZGdlKG5vZGUuY2hpbGRyZW4uY2hpbGQyKCkpOworICAgICAgICAgICAgZml4SW50
RWRnZShub2RlLT5jaGlsZHJlbi5jaGlsZDEoKSk7CisgICAgICAgICAgICBmaXhJbnRFZGdlKG5v
ZGUtPmNoaWxkcmVuLmNoaWxkMigpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAg
ICAgICAgICAgICAKQEAgLTIxNiw5ICsyMDYsOSBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIENv
bXBhcmVHcmVhdGVyOgogICAgICAgICBjYXNlIENvbXBhcmVHcmVhdGVyRXE6CiAgICAgICAgIGNh
c2UgQ29tcGFyZVN0cmljdEVxOiB7Ci0gICAgICAgICAgICBpZiAoTm9kZTo6c2hvdWxkU3BlY3Vs
YXRlSW50ZWdlcihtX2dyYXBoW25vZGUuY2hpbGQxKCldLCBtX2dyYXBoW25vZGUuY2hpbGQyKCld
KSkKKyAgICAgICAgICAgIGlmIChOb2RlOjpzaG91bGRTcGVjdWxhdGVJbnRlZ2VyKG5vZGUtPmNo
aWxkMSgpLm5vZGUoKSwgbm9kZS0+Y2hpbGQyKCkubm9kZSgpKSkKICAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgIGlmICghTm9kZTo6c2hvdWxkU3BlY3VsYXRlTnVtYmVyKG1fZ3Jh
cGhbbm9kZS5jaGlsZDEoKV0sIG1fZ3JhcGhbbm9kZS5jaGlsZDIoKV0pKQorICAgICAgICAgICAg
aWYgKCFOb2RlOjpzaG91bGRTcGVjdWxhdGVOdW1iZXIobm9kZS0+Y2hpbGQxKCkubm9kZSgpLCBu
b2RlLT5jaGlsZDIoKS5ub2RlKCkpKQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgZml4RG91YmxlRWRnZSgwKTsKICAgICAgICAgICAgIGZpeERvdWJsZUVkZ2UoMSk7CkBAIC0y
MjYsNDMgKzIxNiw0MSBAQCBwcml2YXRlOgogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAg
ICAgY2FzZSBMb2dpY2FsTm90OiB7Ci0gICAgICAgICAgICBpZiAobV9ncmFwaFtub2RlLmNoaWxk
MSgpXS5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpCisgICAgICAgICAgICBpZiAobm9kZS0+Y2hp
bGQxKCktPnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKSkKICAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgIGlmICghbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5zaG91bGRTcGVjdWxhdGVO
dW1iZXIoKSkKKyAgICAgICAgICAgIGlmICghbm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0
ZU51bWJlcigpKQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgZml4RG91Ymxl
RWRnZSgwKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKICAg
ICAgICAgY2FzZSBCcmFuY2g6IHsKLSAgICAgICAgICAgIGlmICghbV9ncmFwaFtub2RlLmNoaWxk
MSgpXS5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkKLSAgICAgICAgICAgICAgICAmJiBtX2dyYXBo
W25vZGUuY2hpbGQxKCldLnNob3VsZFNwZWN1bGF0ZU51bWJlcigpKQorICAgICAgICAgICAgaWYg
KCFub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpCisgICAgICAgICAgICAg
ICAgJiYgbm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZU51bWJlcigpKQogICAgICAgICAg
ICAgICAgIGZpeERvdWJsZUVkZ2UoMCk7CiAKLSAgICAgICAgICAgIE5vZGUmIG15Tm9kZSA9IG1f
Z3JhcGhbbV9jb21waWxlSW5kZXhdOyAvLyByZWxvYWQgYmVjYXVzZSB0aGUgZ3JhcGggbWF5IGhh
dmUgY2hhbmdlZAotICAgICAgICAgICAgRWRnZSBsb2dpY2FsTm90RWRnZSA9IG15Tm9kZS5jaGls
ZDEoKTsKLSAgICAgICAgICAgIE5vZGUmIGxvZ2ljYWxOb3QgPSBtX2dyYXBoW2xvZ2ljYWxOb3RF
ZGdlXTsKLSAgICAgICAgICAgIGlmIChsb2dpY2FsTm90Lm9wKCkgPT0gTG9naWNhbE5vdAotICAg
ICAgICAgICAgICAgICYmIGxvZ2ljYWxOb3QuYWRqdXN0ZWRSZWZDb3VudCgpID09IDEpIHsKLSAg
ICAgICAgICAgICAgICBFZGdlIG5ld0NoaWxkRWRnZSA9IGxvZ2ljYWxOb3QuY2hpbGQxKCk7Ci0g
ICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGhbbmV3Q2hpbGRFZGdlXS5oYXNCb29sZWFuUmVzdWx0
KCkpIHsKKyAgICAgICAgICAgIE5vZGUqIGxvZ2ljYWxOb3QgPSBub2RlLT5jaGlsZDEoKS5ub2Rl
KCk7CisgICAgICAgICAgICBpZiAobG9naWNhbE5vdC0+b3AoKSA9PSBMb2dpY2FsTm90CisgICAg
ICAgICAgICAgICAgJiYgbG9naWNhbE5vdC0+YWRqdXN0ZWRSZWZDb3VudCgpID09IDEpIHsKKyAg
ICAgICAgICAgICAgICBFZGdlIG5ld0NoaWxkRWRnZSA9IGxvZ2ljYWxOb3QtPmNoaWxkMSgpOwor
ICAgICAgICAgICAgICAgIGlmIChuZXdDaGlsZEVkZ2UtPmhhc0Jvb2xlYW5SZXN1bHQoKSkgewog
ICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLnJlZihuZXdDaGlsZEVkZ2UpOwotICAgICAgICAg
ICAgICAgICAgICBtX2dyYXBoLmRlcmVmKGxvZ2ljYWxOb3RFZGdlKTsKKyAgICAgICAgICAgICAg
ICAgICAgbV9ncmFwaC5kZXJlZihsb2dpY2FsTm90KTsKICAgICAgICAgICAgICAgICAgICAgbXlO
b2RlLmNoaWxkcmVuLnNldENoaWxkMShuZXdDaGlsZEVkZ2UpOwogICAgICAgICAgICAgICAgICAg
ICAKLSAgICAgICAgICAgICAgICAgICAgQmxvY2tJbmRleCB0b0JlVGFrZW4gPSBteU5vZGUubm90
VGFrZW5CbG9ja0luZGV4KCk7Ci0gICAgICAgICAgICAgICAgICAgIEJsb2NrSW5kZXggdG9CZU5v
dFRha2VuID0gbXlOb2RlLnRha2VuQmxvY2tJbmRleCgpOwotICAgICAgICAgICAgICAgICAgICBt
eU5vZGUuc2V0VGFrZW5CbG9ja0luZGV4KHRvQmVUYWtlbik7Ci0gICAgICAgICAgICAgICAgICAg
IG15Tm9kZS5zZXROb3RUYWtlbkJsb2NrSW5kZXgodG9CZU5vdFRha2VuKTsKKyAgICAgICAgICAg
ICAgICAgICAgQmxvY2tJbmRleCB0b0JlVGFrZW4gPSBub2RlLT5ub3RUYWtlbkJsb2NrSW5kZXgo
KTsKKyAgICAgICAgICAgICAgICAgICAgQmxvY2tJbmRleCB0b0JlTm90VGFrZW4gPSBub2RlLT50
YWtlbkJsb2NrSW5kZXgoKTsKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+c2V0VGFrZW5CbG9j
a0luZGV4KHRvQmVUYWtlbik7CisgICAgICAgICAgICAgICAgICAgIG5vZGUtPnNldE5vdFRha2Vu
QmxvY2tJbmRleCh0b0JlTm90VGFrZW4pOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAg
Y2FzZSBTZXRMb2NhbDogewotICAgICAgICAgICAgaWYgKG5vZGUudmFyaWFibGVBY2Nlc3NEYXRh
KCktPmlzQ2FwdHVyZWQoKSkKKyAgICAgICAgICAgIGlmIChub2RlLT52YXJpYWJsZUFjY2Vzc0Rh
dGEoKS0+aXNDYXB0dXJlZCgpKQogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
aWYgKCFub2RlLnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5zaG91bGRVc2VEb3VibGVGb3JtYXQoKSkK
KyAgICAgICAgICAgIGlmICghbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCktPnNob3VsZFVzZURv
dWJsZUZvcm1hdCgpKQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgZml4RG91
YmxlRWRnZSgwKTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMjcyLDcgKzI2MCw3IEBAIHByaXZh
dGU6CiAgICAgICAgIGNhc2UgVmFsdWVBZGQ6IHsKICAgICAgICAgICAgIGlmIChtX2dyYXBoLmFk
ZFNob3VsZFNwZWN1bGF0ZUludGVnZXIobm9kZSkpCiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICBpZiAoIU5vZGU6OnNob3VsZFNwZWN1bGF0ZU51bWJlckV4cGVjdGluZ0RlZmlu
ZWQobV9ncmFwaFtub2RlLmNoaWxkMSgpXSwgbV9ncmFwaFtub2RlLmNoaWxkMigpXSkpCisgICAg
ICAgICAgICBpZiAoIU5vZGU6OnNob3VsZFNwZWN1bGF0ZU51bWJlckV4cGVjdGluZ0RlZmluZWQo
bm9kZS0+Y2hpbGQxKCkubm9kZSgpLCBub2RlLT5jaGlsZDIoKS5ub2RlKCkpKQogICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgZml4RG91YmxlRWRnZSgwKTsKICAgICAgICAgICAg
IGZpeERvdWJsZUVkZ2UoMSk7CkBAIC0yODEsNyArMjY5LDcgQEAgcHJpdmF0ZToKICAgICAgICAg
ICAgIAogICAgICAgICBjYXNlIEFyaXRoU3ViOiB7CiAgICAgICAgICAgICBpZiAobV9ncmFwaC5h
ZGRTaG91bGRTcGVjdWxhdGVJbnRlZ2VyKG5vZGUpCi0gICAgICAgICAgICAgICAgJiYgbm9kZS5j
YW5TcGVjdWxhdGVJbnRlZ2VyKCkpCisgICAgICAgICAgICAgICAgJiYgbm9kZS0+Y2FuU3BlY3Vs
YXRlSW50ZWdlcigpKQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgZml4RG91
YmxlRWRnZSgwKTsKICAgICAgICAgICAgIGZpeERvdWJsZUVkZ2UoMSk7CkBAIC0yOTgsOCArMjg2
LDggQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBBcml0aE1pbjoKICAgICAgICAgY2FzZSBBcml0
aE1heDoKICAgICAgICAgY2FzZSBBcml0aE1vZDogewotICAgICAgICAgICAgaWYgKE5vZGU6OnNo
b3VsZFNwZWN1bGF0ZUludGVnZXJGb3JBcml0aG1ldGljKG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0s
IG1fZ3JhcGhbbm9kZS5jaGlsZDIoKV0pCi0gICAgICAgICAgICAgICAgJiYgbm9kZS5jYW5TcGVj
dWxhdGVJbnRlZ2VyKCkpCisgICAgICAgICAgICBpZiAoTm9kZTo6c2hvdWxkU3BlY3VsYXRlSW50
ZWdlckZvckFyaXRobWV0aWMobm9kZS0+Y2hpbGQxKCkubm9kZSgpLCBub2RlLT5jaGlsZDIoKS5u
b2RlKCkpCisgICAgICAgICAgICAgICAgJiYgbm9kZS0+Y2FuU3BlY3VsYXRlSW50ZWdlcigpKQog
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgZml4RG91YmxlRWRnZSgwKTsKICAg
ICAgICAgICAgIGZpeERvdWJsZUVkZ2UoMSk7CkBAIC0zMTUsOCArMzAzLDggQEAgcHJpdmF0ZToK
ICAgICAgICAgfQogCiAgICAgICAgIGNhc2UgQXJpdGhEaXY6IHsKLSAgICAgICAgICAgIGlmIChO
b2RlOjpzaG91bGRTcGVjdWxhdGVJbnRlZ2VyRm9yQXJpdGhtZXRpYyhtX2dyYXBoW25vZGUuY2hp
bGQxKCldLCBtX2dyYXBoW25vZGUuY2hpbGQyKCldKQotICAgICAgICAgICAgICAgICYmIG5vZGUu
Y2FuU3BlY3VsYXRlSW50ZWdlcigpKSB7CisgICAgICAgICAgICBpZiAoTm9kZTo6c2hvdWxkU3Bl
Y3VsYXRlSW50ZWdlckZvckFyaXRobWV0aWMobm9kZS0+Y2hpbGQxKCkubm9kZSgpLCBub2RlLT5j
aGlsZDIoKS5ub2RlKCkpCisgICAgICAgICAgICAgICAgJiYgbm9kZS0+Y2FuU3BlY3VsYXRlSW50
ZWdlcigpKSB7CiAgICAgICAgICAgICAgICAgaWYgKGlzWDg2KCkpCiAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIGluamVjdEludDMyVG9Eb3VibGVOb2RlKDApOwpA
QCAtMzI0LDEyICszMTIsMTEgQEAgcHJpdmF0ZToKIAogICAgICAgICAgICAgICAgIC8vIFdlIGRv
bid0IG5lZWQgdG8gZG8gcmVmJ2luZyBvbiB0aGUgY2hpbGRyZW4gYmVjYXVzZSB3ZSdyZSBzdGVh
bGluZyB0aGVtIGZyb20KICAgICAgICAgICAgICAgICAvLyB0aGUgb3JpZ2luYWwgZGl2aXNpb24u
Ci0gICAgICAgICAgICAgICAgTm9kZUluZGV4IG5ld0RpdmlzaW9uSW5kZXggPSBtX2luc2VydGlv
blNldC5pbnNlcnROb2RlKAotICAgICAgICAgICAgICAgICAgICBtX2luZGV4SW5CbG9jaywgRG9u
dFJlZkNoaWxkcmVuLCBSZWZOb2RlLCBTcGVjRG91YmxlLCBtX2dyYXBoW21fY29tcGlsZUluZGV4
XSk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgbV9ncmFwaFttX2NvbXBpbGVJ
bmRleF0uc2V0T3AoRG91YmxlQXNJbnQzMik7Ci0gICAgICAgICAgICAgICAgbV9ncmFwaFttX2Nv
bXBpbGVJbmRleF0uY2hpbGRyZW4uaW5pdGlhbGl6ZShFZGdlKG5ld0RpdmlzaW9uSW5kZXgsIERv
dWJsZVVzZSksIEVkZ2UoKSwgRWRnZSgpKTsKKyAgICAgICAgICAgICAgICBOb2RlKiBuZXdEaXZp
c2lvbiA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCisgICAgICAgICAgICAgICAgICAgIG1f
aW5kZXhJbkJsb2NrLCBEb250UmVmQ2hpbGRyZW4sIFJlZk5vZGUsIFNwZWNEb3VibGUsIG5vZGUp
OwogICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIG5vZGUtPnNldE9wKERvdWJsZUFz
SW50MzIpOworICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkcmVuLmluaXRpYWxpemUoRWRnZShu
ZXdEaXZpc2lvbiwgRG91YmxlVXNlKSwgRWRnZSgpLCBFZGdlKCkpOwogICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZml4RG91YmxlRWRnZSgwKTsKQEAg
LTMzOCw4ICszMjUsOCBAQCBwcml2YXRlOgogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAg
ICAgY2FzZSBBcml0aEFiczogewotICAgICAgICAgICAgaWYgKG1fZ3JhcGhbbm9kZS5jaGlsZDEo
KV0uc2hvdWxkU3BlY3VsYXRlSW50ZWdlckZvckFyaXRobWV0aWMoKQotICAgICAgICAgICAgICAg
ICYmIG5vZGUuY2FuU3BlY3VsYXRlSW50ZWdlcigpKQorICAgICAgICAgICAgaWYgKG5vZGUtPmNo
aWxkMSgpLT5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyRm9yQXJpdGhtZXRpYygpCisgICAgICAgICAg
ICAgICAgJiYgbm9kZS0+Y2FuU3BlY3VsYXRlSW50ZWdlcigpKQogICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgZml4RG91YmxlRWRnZSgwKTsKICAgICAgICAgICAgIGJyZWFrOwpA
QCAtMzU4LDE1ICszNDUsMTMgQEAgcHJpdmF0ZToKIAogICAgICAgICAgICAgbm9kZS5zZXRBcnJh
eU1vZGUoCiAgICAgICAgICAgICAgICAgbm9kZS5hcnJheU1vZGUoKS5yZWZpbmUoCi0gICAgICAg
ICAgICAgICAgICAgIG1fZ3JhcGhbY2hpbGQxXS5wcmVkaWN0aW9uKCksCi0gICAgICAgICAgICAg
ICAgICAgIG1fZ3JhcGhbY2hpbGQyXS5wcmVkaWN0aW9uKCksCi0gICAgICAgICAgICAgICAgICAg
IG1fZ3JhcGhbY2hpbGQzXS5wcmVkaWN0aW9uKCkpKTsKKyAgICAgICAgICAgICAgICAgICAgY2hp
bGQxLT5wcmVkaWN0aW9uKCksCisgICAgICAgICAgICAgICAgICAgIGNoaWxkMi0+cHJlZGljdGlv
bigpLAorICAgICAgICAgICAgICAgICAgICBjaGlsZDMtPnByZWRpY3Rpb24oKSkpOwogICAgICAg
ICAgICAgCiAgICAgICAgICAgICBibGVzc0FycmF5T3BlcmF0aW9uKGNoaWxkMSwgY2hpbGQyLCAz
KTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgTm9kZSogbm9kZVB0ciA9ICZtX2dyYXBoW21f
Y29tcGlsZUluZGV4XTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgc3dpdGNoIChub2RlUHRy
LT5hcnJheU1vZGUoKS5tb2RlRm9yUHV0KCkudHlwZSgpKSB7CisgICAgICAgICAgICBzd2l0Y2gg
KG5vZGUtPmFycmF5TW9kZSgpLm1vZGVGb3JQdXQoKS50eXBlKCkpIHsKICAgICAgICAgICAgIGNh
c2UgQXJyYXk6OkRvdWJsZToKICAgICAgICAgICAgICAgICBmaXhEb3VibGVFZGdlKDIpOwogICAg
ICAgICAgICAgICAgIGJyZWFrOwpAQCAtMzc3LDcgKzM2Miw3IEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICBjYXNlIEFycmF5OjpVaW50OENsYW1wZWRBcnJheToKICAgICAgICAgICAgIGNhc2UgQXJy
YXk6OlVpbnQxNkFycmF5OgogICAgICAgICAgICAgY2FzZSBBcnJheTo6VWludDMyQXJyYXk6Ci0g
ICAgICAgICAgICAgICAgaWYgKCFtX2dyYXBoW2NoaWxkM10uc2hvdWxkU3BlY3VsYXRlSW50ZWdl
cigpKQorICAgICAgICAgICAgICAgIGlmICghY2hpbGQzLT5zaG91bGRTcGVjdWxhdGVJbnRlZ2Vy
KCkpCiAgICAgICAgICAgICAgICAgICAgIGZpeERvdWJsZUVkZ2UoMik7CiAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIEFycmF5OjpGbG9hdDMyQXJyYXk6CkBAIC0zOTIs
MTEgKzM3NywxMSBAQCBwcml2YXRlOgogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgTmV3QXJy
YXk6IHsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1fZ3JhcGgudmFyQXJnTnVtQ2hp
bGRyZW4obm9kZSk7IGktLTspIHsKLSAgICAgICAgICAgICAgICBub2RlLnNldEluZGV4aW5nVHlw
ZSgKKyAgICAgICAgICAgICAgICBub2RlLT5zZXRJbmRleGluZ1R5cGUoCiAgICAgICAgICAgICAg
ICAgICAgIGxlYXN0VXBwZXJCb3VuZE9mSW5kZXhpbmdUeXBlQW5kVHlwZSgKLSAgICAgICAgICAg
ICAgICAgICAgICAgIG5vZGUuaW5kZXhpbmdUeXBlKCksIG1fZ3JhcGhbbV9ncmFwaC52YXJBcmdD
aGlsZChub2RlLCBpKV0ucHJlZGljdGlvbigpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBu
b2RlLmluZGV4aW5nVHlwZSgpLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIGkpLT5wcmVkaWN0
aW9uKCkpKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChub2RlLmluZGV4aW5nVHlw
ZSgpID09IEFycmF5V2l0aERvdWJsZSkgeworICAgICAgICAgICAgaWYgKG5vZGUtPmluZGV4aW5n
VHlwZSgpID09IEFycmF5V2l0aERvdWJsZSkgewogICAgICAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IG1fZ3JhcGgudmFyQXJnTnVtQ2hpbGRyZW4obm9kZSk7IGktLTspCiAgICAgICAgICAg
ICAgICAgICAgIGZpeERvdWJsZUVkZ2UoaSk7CiAgICAgICAgICAgICB9CkBAIC00MDgsMTYgKzM5
MywxNSBAQCBwcml2YXRlOgogICAgICAgICB9CiAKICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BB
R0FUSU9OX1ZFUkJPU0UpCi0gICAgICAgIE5vZGUqIG5vZGVQdHIgPSAmbV9ncmFwaFttX2NvbXBp
bGVJbmRleF07Ci0gICAgICAgIGlmICghKG5vZGVQdHItPmZsYWdzKCkgJiBOb2RlSGFzVmFyQXJn
cykpIHsKKyAgICAgICAgaWYgKCEobm9kZS0+ZmxhZ3MoKSAmIE5vZGVIYXNWYXJBcmdzKSkgewog
ICAgICAgICAgICAgZGF0YUxvZ0YoIm5ldyBjaGlsZHJlbjogIik7Ci0gICAgICAgICAgICBub2Rl
UHRyLT5kdW1wQ2hpbGRyZW4oV1RGOjpkYXRhRmlsZSgpKTsKKyAgICAgICAgICAgIG5vZGUtPmR1
bXBDaGlsZHJlbihXVEY6OmRhdGFGaWxlKCkpOwogICAgICAgICB9CiAgICAgICAgIGRhdGFMb2dG
KCJcbiIpOwogI2VuZGlmCiAgICAgfQogICAgIAotICAgIE5vZGVJbmRleCBjaGVja0FycmF5KEFy
cmF5TW9kZSBhcnJheU1vZGUsIENvZGVPcmlnaW4gY29kZU9yaWdpbiwgTm9kZUluZGV4IGFycmF5
LCBOb2RlSW5kZXggaW5kZXgsIGJvb2wgKCpzdG9yYWdlQ2hlY2spKGNvbnN0IEFycmF5TW9kZSYp
ID0gY2FuQ1NFU3RvcmFnZSwgYm9vbCBzaG91bGRHZW5lcmF0ZSA9IHRydWUpCisgICAgTm9kZSog
Y2hlY2tBcnJheShBcnJheU1vZGUgYXJyYXlNb2RlLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIE5v
ZGUqIGFycmF5LCBOb2RlKiBpbmRleCwgYm9vbCAoKnN0b3JhZ2VDaGVjaykoY29uc3QgQXJyYXlN
b2RlJikgPSBjYW5DU0VTdG9yYWdlLCBib29sIHNob3VsZEdlbmVyYXRlID0gdHJ1ZSkKICAgICB7
CiAgICAgICAgIEFTU0VSVChhcnJheU1vZGUuaXNTcGVjaWZpYygpKTsKICAgICAgICAgCkBAIC00
MjgsMTEgKzQxMiwxMSBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIGlmIChtX2luZGV4SW5C
bG9jayA+IDApIHsKICAgICAgICAgICAgICAgICAgICAgLy8gSWYgdGhlIHByZXZpb3VzIG5vZGUg
d2FzIGEgQ2hlY2tTdHJ1Y3R1cmUgaW5zZXJ0ZWQgYmVjYXVzZSBvZiBzdHVmZgogICAgICAgICAg
ICAgICAgICAgICAvLyB0aGF0IHRoZSBhcnJheSBwcm9maWxlIHRvbGQgdXMsIHRoZW4gcmVtb3Zl
IGl0LgotICAgICAgICAgICAgICAgICAgICBOb2RlJiBwcmV2aW91c05vZGUgPSBtX2dyYXBoW21f
YmxvY2stPmF0KG1faW5kZXhJbkJsb2NrIC0gMSldOwotICAgICAgICAgICAgICAgICAgICBpZiAo
cHJldmlvdXNOb2RlLm9wKCkgPT0gQ2hlY2tTdHJ1Y3R1cmUKLSAgICAgICAgICAgICAgICAgICAg
ICAgICYmIHByZXZpb3VzTm9kZS5jaGlsZDEoKSA9PSBhcnJheQotICAgICAgICAgICAgICAgICAg
ICAgICAgJiYgcHJldmlvdXNOb2RlLmNvZGVPcmlnaW4gPT0gY29kZU9yaWdpbikKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHByZXZpb3VzTm9kZS5zZXRPcEFuZERlZmF1bHRGbGFncyhQaGFudG9t
KTsKKyAgICAgICAgICAgICAgICAgICAgTm9kZSogcHJldmlvdXNOb2RlID0gYmxvY2stPmF0KG1f
aW5kZXhJbkJsb2NrIC0gMSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChwcmV2aW91c05vZGUt
Pm9wKCkgPT0gQ2hlY2tTdHJ1Y3R1cmUKKyAgICAgICAgICAgICAgICAgICAgICAgICYmIHByZXZp
b3VzTm9kZS0+Y2hpbGQxKCkgPT0gYXJyYXkKKyAgICAgICAgICAgICAgICAgICAgICAgICYmIHBy
ZXZpb3VzTm9kZS0+Y29kZU9yaWdpbiA9PSBjb2RlT3JpZ2luKQorICAgICAgICAgICAgICAgICAg
ICAgICAgcHJldmlvdXNOb2RlLT5zZXRPcEFuZERlZmF1bHRGbGFncyhQaGFudG9tKTsKICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgbV9pbnNlcnRp
b25TZXQuaW5zZXJ0Tm9kZSgKQEAgLTQ1Niw3ICs0NDAsNyBAQCBwcml2YXRlOgogICAgICAgICB9
CiAgICAgICAgIAogICAgICAgICBpZiAoIXN0b3JhZ2VDaGVjayhhcnJheU1vZGUpKQotICAgICAg
ICAgICAgcmV0dXJuIE5vTm9kZTsKKyAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAKICAg
ICAgICAgaWYgKGFycmF5TW9kZS51c2VzQnV0dGVyZmx5KCkpIHsKICAgICAgICAgICAgIHJldHVy
biBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKApAQCAtNDc3LDE0ICs0NjEsMTQgQEAgcHJpdmF0
ZToKICAgICB7CiAgICAgICAgIGlmIChtX2dyYXBoLm1fZml4cG9pbnRTdGF0ZSA+IEJlZm9yZUZp
eHBvaW50KQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgCi0gICAgICAgIE5vZGUq
IG5vZGVQdHIgPSAmbV9ncmFwaFttX2NvbXBpbGVJbmRleF07CiAgICAgICAgIAotICAgICAgICBz
d2l0Y2ggKG5vZGVQdHItPmFycmF5TW9kZSgpLnR5cGUoKSkgeworICAgICAgICBOb2RlKiBub2Rl
ID0gbV9jdXJyZW50Tm9kZTsKKyAgICAgICAgCisgICAgICAgIHN3aXRjaCAobm9kZS0+YXJyYXlN
b2RlKCkudHlwZSgpKSB7CiAgICAgICAgIGNhc2UgQXJyYXk6OkZvcmNlRXhpdDogewogICAgICAg
ICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKICAgICAgICAgICAgICAgICBtX2luZGV4
SW5CbG9jaywgRG9udFJlZkNoaWxkcmVuLCBEb250UmVmTm9kZSwgU3BlY05vbmUsIEZvcmNlT1NS
RXhpdCwKLSAgICAgICAgICAgICAgICBub2RlUHRyLT5jb2RlT3JpZ2luKTsKKyAgICAgICAgICAg
ICAgICBub2RlLT5jb2RlT3JpZ2luKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQog
ICAgICAgICAgICAgCkBAIC00OTcsMjYgKzQ4MSwyNiBAQCBwcml2YXRlOgogICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICAgICAgCiAgICAgICAgIGRlZmF1bHQ6IHsKLSAgICAgICAgICAgIE5v
ZGVJbmRleCBzdG9yYWdlID0gY2hlY2tBcnJheShub2RlUHRyLT5hcnJheU1vZGUoKSwgbm9kZVB0
ci0+Y29kZU9yaWdpbiwgYmFzZS5pbmRleCgpLCBpbmRleC5pbmRleFVuY2hlY2tlZCgpKTsKLSAg
ICAgICAgICAgIGlmIChzdG9yYWdlID09IE5vTm9kZSkKKyAgICAgICAgICAgIE5vZGUqIHN0b3Jh
Z2UgPSBjaGVja0FycmF5KG5vZGUtPmFycmF5TW9kZSgpLCBub2RlLT5jb2RlT3JpZ2luLCBiYXNl
Lm5vZGUoKSwgaW5kZXgubm9kZSgpKTsKKyAgICAgICAgICAgIGlmICghc3RvcmFnZSkKICAgICAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIG1fZ3JhcGguY2hp
bGQobV9ncmFwaFttX2NvbXBpbGVJbmRleF0sIHN0b3JhZ2VDaGlsZElkeCkgPSBFZGdlKHN0b3Jh
Z2UpOworICAgICAgICAgICAgbV9ncmFwaC5jaGlsZChub2RlLCBzdG9yYWdlQ2hpbGRJZHgpID0g
RWRnZShzdG9yYWdlKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfSB9CiAgICAgfQog
ICAgIAogICAgIHZvaWQgZml4SW50RWRnZShFZGdlJiBlZGdlKQogICAgIHsKLSAgICAgICAgTm9k
ZSYgbm9kZSA9IG1fZ3JhcGhbZWRnZV07Ci0gICAgICAgIGlmIChub2RlLm9wKCkgIT0gVmFsdWVU
b0ludDMyKQorICAgICAgICBOb2RlKiBub2RlID0gZWRnZS5ub2RlKCk7CisgICAgICAgIGlmIChu
b2RlLT5vcCgpICE9IFZhbHVlVG9JbnQzMikKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
Ci0gICAgICAgIGlmICghbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5zaG91bGRTcGVjdWxhdGVJbnRl
Z2VyKCkpCisgICAgICAgIGlmICghbm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZUludGVn
ZXIoKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAgICAgIEVkZ2Ugb2xkRWRn
ZSA9IGVkZ2U7Ci0gICAgICAgIEVkZ2UgbmV3RWRnZSA9IG5vZGUuY2hpbGQxKCk7CisgICAgICAg
IEVkZ2UgbmV3RWRnZSA9IG5vZGUtPmNoaWxkMSgpOwogICAgICAgICAKICAgICAgICAgbV9ncmFw
aC5yZWYobmV3RWRnZSk7CiAgICAgICAgIG1fZ3JhcGguZGVyZWYob2xkRWRnZSk7CkBAIC01MjYs
MTEgKzUxMCwxMSBAQCBwcml2YXRlOgogICAgIAogICAgIHZvaWQgZml4RG91YmxlRWRnZSh1bnNp
Z25lZCBjaGlsZEluZGV4KQogICAgIHsKLSAgICAgICAgTm9kZSYgc291cmNlID0gbV9ncmFwaFtt
X2NvbXBpbGVJbmRleF07CisgICAgICAgIE5vZGUqIHNvdXJjZSA9IG1fY3VycmVudE5vZGU7CiAg
ICAgICAgIEVkZ2UmIGVkZ2UgPSBtX2dyYXBoLmNoaWxkKHNvdXJjZSwgY2hpbGRJbmRleCk7CiAg
ICAgICAgIAotICAgICAgICBpZiAobV9ncmFwaFtlZGdlXS5wcmVkaWN0aW9uKCkgJiBTcGVjRG91
YmxlKSB7Ci0gICAgICAgICAgICBlZGdlLnNldFVzZUtpbmQoRG91YmxlVXNlKTsKKyAgICAgICAg
aWYgKGVkZ2UtPnByZWRpY3Rpb24oKSAmIFNwZWNEb3VibGUpIHsKKyAgICAgICAgICAgIGVkZ2Ut
PnNldFVzZUtpbmQoRG91YmxlVXNlKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQog
ICAgICAgICAKQEAgLTUzOSwyMyArNTIzLDIyIEBAIHByaXZhdGU6CiAKICAgICB2b2lkIGluamVj
dEludDMyVG9Eb3VibGVOb2RlKHVuc2lnbmVkIGNoaWxkSW5kZXgpCiAgICAgewotICAgICAgICBO
b2RlSW5kZXggcmVzdWx0SW5kZXggPSBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAorICAgICAg
ICBOb2RlKiByZXN1bHQgPSBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAogICAgICAgICAgICAg
bV9pbmRleEluQmxvY2ssIERvbnRSZWZDaGlsZHJlbiwgUmVmTm9kZSwgU3BlY0RvdWJsZSwgSW50
MzJUb0RvdWJsZSwKLSAgICAgICAgICAgIG1fZ3JhcGhbbV9jb21waWxlSW5kZXhdLmNvZGVPcmln
aW4sCi0gICAgICAgICAgICBtX2dyYXBoLmNoaWxkKG1fZ3JhcGhbbV9jb21waWxlSW5kZXhdLCBj
aGlsZEluZGV4KS5pbmRleCgpKTsKKyAgICAgICAgICAgIG1fY3VycmVudE5vZGUtPmNvZGVPcmln
aW4sIG1fZ3JhcGguY2hpbGQobV9jdXJyZW50Tm9kZSwgY2hpbGRJbmRleCkubm9kZSgpKTsKICAg
ICAgICAgCiAjaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQogICAgICAg
ICBkYXRhTG9nRigKICAgICAgICAgICAgICIocmVwbGFjaW5nIEAldS0+QCV1IHdpdGggQCV1LT5A
JXUpICIsCi0gICAgICAgICAgICBtX2NvbXBpbGVJbmRleCwgbV9ncmFwaC5jaGlsZChtX2dyYXBo
W21fY29tcGlsZUluZGV4XSwgY2hpbGRJbmRleCkuaW5kZXgoKSwgbV9jb21waWxlSW5kZXgsIHJl
c3VsdEluZGV4KTsKKyAgICAgICAgICAgIG1fY3VycmVudE5vZGUtPmluZGV4KCksIG1fZ3JhcGgu
Y2hpbGQobV9jdXJyZW50Tm9kZSwgY2hpbGRJbmRleCktPmluZGV4KCksIG1fY3VycmVudE5vZGUt
PmluZGV4KCksIHJlc3VsdC0+aW5kZXgoKSk7CiAjZW5kaWYKIAotICAgICAgICBtX2dyYXBoLmNo
aWxkKG1fZ3JhcGhbbV9jb21waWxlSW5kZXhdLCBjaGlsZEluZGV4KSA9IEVkZ2UocmVzdWx0SW5k
ZXgsIERvdWJsZVVzZSk7CisgICAgICAgIG1fZ3JhcGguY2hpbGQobV9jdXJyZW50Tm9kZSwgY2hp
bGRJbmRleCkgPSBFZGdlKHJlc3VsdCwgRG91YmxlVXNlKTsKICAgICB9CiAKICAgICBCYXNpY0Js
b2NrKiBtX2Jsb2NrOwogICAgIHVuc2lnbmVkIG1faW5kZXhJbkJsb2NrOwotICAgIE5vZGVJbmRl
eCBtX2NvbXBpbGVJbmRleDsKKyAgICBOb2RlKiBtX2N1cnJlbnROb2RlOwogICAgIEluc2VydGlv
blNldCBtX2luc2VydGlvblNldDsKIH07CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0dlbmVyYXRpb25JbmZvLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdHZW5lcmF0aW9uSW5mby5oCShyZXZpc2lvbiAxNDA5MDQpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dlbmVyYXRpb25JbmZvLmgJKHdvcmtpbmcgY29weSkK
QEAgLTQ4LDcgKzQ4LDcgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogY2xhc3Mg
R2VuZXJhdGlvbkluZm8gewogcHVibGljOgogICAgIEdlbmVyYXRpb25JbmZvKCkKLSAgICAgICAg
OiBtX25vZGVJbmRleChOb05vZGUpCisgICAgICAgIDogbV9ub2RlKDApCiAgICAgICAgICwgbV91
c2VDb3VudCgwKQogICAgICAgICAsIG1fcmVnaXN0ZXJGb3JtYXQoRGF0YUZvcm1hdE5vbmUpCiAg
ICAgICAgICwgbV9zcGlsbEZvcm1hdChEYXRhRm9ybWF0Tm9uZSkKQEAgLTU4LDkgKzU4LDkgQEAg
cHVibGljOgogICAgIHsKICAgICB9CiAKLSAgICB2b2lkIGluaXRDb25zdGFudChOb2RlSW5kZXgg
bm9kZUluZGV4LCB1aW50MzJfdCB1c2VDb3VudCkKKyAgICB2b2lkIGluaXRDb25zdGFudChOb2Rl
KiBub2RlLCB1aW50MzJfdCB1c2VDb3VudCkKICAgICB7Ci0gICAgICAgIG1fbm9kZUluZGV4ID0g
bm9kZUluZGV4OworICAgICAgICBtX25vZGUgPSBub2RlOwogICAgICAgICBtX3VzZUNvdW50ID0g
dXNlQ291bnQ7CiAgICAgICAgIG1fcmVnaXN0ZXJGb3JtYXQgPSBEYXRhRm9ybWF0Tm9uZTsKICAg
ICAgICAgbV9zcGlsbEZvcm1hdCA9IERhdGFGb3JtYXROb25lOwpAQCAtNjksOSArNjksOSBAQCBw
dWJsaWM6CiAgICAgICAgIG1faXNDb25zdGFudCA9IHRydWU7CiAgICAgICAgIEFTU0VSVChtX3Vz
ZUNvdW50KTsKICAgICB9Ci0gICAgdm9pZCBpbml0SW50ZWdlcihOb2RlSW5kZXggbm9kZUluZGV4
LCB1aW50MzJfdCB1c2VDb3VudCwgR1BSUmVnIGdwcikKKyAgICB2b2lkIGluaXRJbnRlZ2VyKE5v
ZGUqIG5vZGUsIHVpbnQzMl90IHVzZUNvdW50LCBHUFJSZWcgZ3ByKQogICAgIHsKLSAgICAgICAg
bV9ub2RlSW5kZXggPSBub2RlSW5kZXg7CisgICAgICAgIG1fbm9kZSA9IG5vZGU7CiAgICAgICAg
IG1fdXNlQ291bnQgPSB1c2VDb3VudDsKICAgICAgICAgbV9yZWdpc3RlckZvcm1hdCA9IERhdGFG
b3JtYXRJbnRlZ2VyOwogICAgICAgICBtX3NwaWxsRm9ybWF0ID0gRGF0YUZvcm1hdE5vbmU7CkBA
IC04MiwxMSArODIsMTEgQEAgcHVibGljOgogICAgICAgICBBU1NFUlQobV91c2VDb3VudCk7CiAg
ICAgfQogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgdm9pZCBpbml0SlNWYWx1ZShOb2RlSW5kZXgg
bm9kZUluZGV4LCB1aW50MzJfdCB1c2VDb3VudCwgR1BSUmVnIGdwciwgRGF0YUZvcm1hdCBmb3Jt
YXQgPSBEYXRhRm9ybWF0SlMpCisgICAgdm9pZCBpbml0SlNWYWx1ZShOb2RlKiBub2RlLCB1aW50
MzJfdCB1c2VDb3VudCwgR1BSUmVnIGdwciwgRGF0YUZvcm1hdCBmb3JtYXQgPSBEYXRhRm9ybWF0
SlMpCiAgICAgewogICAgICAgICBBU1NFUlQoZm9ybWF0ICYgRGF0YUZvcm1hdEpTKTsKIAotICAg
ICAgICBtX25vZGVJbmRleCA9IG5vZGVJbmRleDsKKyAgICAgICAgbV9ub2RlID0gbm9kZTsKICAg
ICAgICAgbV91c2VDb3VudCA9IHVzZUNvdW50OwogICAgICAgICBtX3JlZ2lzdGVyRm9ybWF0ID0g
Zm9ybWF0OwogICAgICAgICBtX3NwaWxsRm9ybWF0ID0gRGF0YUZvcm1hdE5vbmU7CkBAIC05Nywx
MSArOTcsMTEgQEAgcHVibGljOgogICAgICAgICBBU1NFUlQobV91c2VDb3VudCk7CiAgICAgfQog
I2VsaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICB2b2lkIGluaXRKU1ZhbHVlKE5vZGVJbmRleCBu
b2RlSW5kZXgsIHVpbnQzMl90IHVzZUNvdW50LCBHUFJSZWcgdGFnR1BSLCBHUFJSZWcgcGF5bG9h
ZEdQUiwgRGF0YUZvcm1hdCBmb3JtYXQgPSBEYXRhRm9ybWF0SlMpCisgICAgdm9pZCBpbml0SlNW
YWx1ZShOb2RlKiBub2RlLCB1aW50MzJfdCB1c2VDb3VudCwgR1BSUmVnIHRhZ0dQUiwgR1BSUmVn
IHBheWxvYWRHUFIsIERhdGFGb3JtYXQgZm9ybWF0ID0gRGF0YUZvcm1hdEpTKQogICAgIHsKICAg
ICAgICAgQVNTRVJUKGZvcm1hdCAmIERhdGFGb3JtYXRKUyk7CiAKLSAgICAgICAgbV9ub2RlSW5k
ZXggPSBub2RlSW5kZXg7CisgICAgICAgIG1fbm9kZSA9IG5vZGU7CiAgICAgICAgIG1fdXNlQ291
bnQgPSB1c2VDb3VudDsKICAgICAgICAgbV9yZWdpc3RlckZvcm1hdCA9IGZvcm1hdDsKICAgICAg
ICAgbV9zcGlsbEZvcm1hdCA9IERhdGFGb3JtYXROb25lOwpAQCAtMTEzLDkgKzExMyw5IEBAIHB1
YmxpYzoKICAgICAgICAgQVNTRVJUKG1fdXNlQ291bnQpOwogICAgIH0KICNlbmRpZgotICAgIHZv
aWQgaW5pdENlbGwoTm9kZUluZGV4IG5vZGVJbmRleCwgdWludDMyX3QgdXNlQ291bnQsIEdQUlJl
ZyBncHIpCisgICAgdm9pZCBpbml0Q2VsbChOb2RlKiBub2RlLCB1aW50MzJfdCB1c2VDb3VudCwg
R1BSUmVnIGdwcikKICAgICB7Ci0gICAgICAgIG1fbm9kZUluZGV4ID0gbm9kZUluZGV4OworICAg
ICAgICBtX25vZGUgPSBub2RlOwogICAgICAgICBtX3VzZUNvdW50ID0gdXNlQ291bnQ7CiAgICAg
ICAgIG1fcmVnaXN0ZXJGb3JtYXQgPSBEYXRhRm9ybWF0Q2VsbDsKICAgICAgICAgbV9zcGlsbEZv
cm1hdCA9IERhdGFGb3JtYXROb25lOwpAQCAtMTI1LDkgKzEyNSw5IEBAIHB1YmxpYzoKICAgICAg
ICAgbV9pc0NvbnN0YW50ID0gZmFsc2U7CiAgICAgICAgIEFTU0VSVChtX3VzZUNvdW50KTsKICAg
ICB9Ci0gICAgdm9pZCBpbml0Qm9vbGVhbihOb2RlSW5kZXggbm9kZUluZGV4LCB1aW50MzJfdCB1
c2VDb3VudCwgR1BSUmVnIGdwcikKKyAgICB2b2lkIGluaXRCb29sZWFuKE5vZGUqIG5vZGUsIHVp
bnQzMl90IHVzZUNvdW50LCBHUFJSZWcgZ3ByKQogICAgIHsKLSAgICAgICAgbV9ub2RlSW5kZXgg
PSBub2RlSW5kZXg7CisgICAgICAgIG1fbm9kZSA9IG5vZGU7CiAgICAgICAgIG1fdXNlQ291bnQg
PSB1c2VDb3VudDsKICAgICAgICAgbV9yZWdpc3RlckZvcm1hdCA9IERhdGFGb3JtYXRCb29sZWFu
OwogICAgICAgICBtX3NwaWxsRm9ybWF0ID0gRGF0YUZvcm1hdE5vbmU7CkBAIC0xMzcsMTAgKzEz
NywxMCBAQCBwdWJsaWM6CiAgICAgICAgIG1faXNDb25zdGFudCA9IGZhbHNlOwogICAgICAgICBB
U1NFUlQobV91c2VDb3VudCk7CiAgICAgfQotICAgIHZvaWQgaW5pdERvdWJsZShOb2RlSW5kZXgg
bm9kZUluZGV4LCB1aW50MzJfdCB1c2VDb3VudCwgRlBSUmVnIGZwcikKKyAgICB2b2lkIGluaXRE
b3VibGUoTm9kZSogbm9kZSwgdWludDMyX3QgdXNlQ291bnQsIEZQUlJlZyBmcHIpCiAgICAgewog
ICAgICAgICBBU1NFUlQoZnByICE9IEludmFsaWRGUFJSZWcpOwotICAgICAgICBtX25vZGVJbmRl
eCA9IG5vZGVJbmRleDsKKyAgICAgICAgbV9ub2RlID0gbm9kZTsKICAgICAgICAgbV91c2VDb3Vu
dCA9IHVzZUNvdW50OwogICAgICAgICBtX3JlZ2lzdGVyRm9ybWF0ID0gRGF0YUZvcm1hdERvdWJs
ZTsKICAgICAgICAgbV9zcGlsbEZvcm1hdCA9IERhdGFGb3JtYXROb25lOwpAQCAtMTUwLDkgKzE1
MCw5IEBAIHB1YmxpYzoKICAgICAgICAgbV9pc0NvbnN0YW50ID0gZmFsc2U7CiAgICAgICAgIEFT
U0VSVChtX3VzZUNvdW50KTsKICAgICB9Ci0gICAgdm9pZCBpbml0U3RvcmFnZShOb2RlSW5kZXgg
bm9kZUluZGV4LCB1aW50MzJfdCB1c2VDb3VudCwgR1BSUmVnIGdwcikKKyAgICB2b2lkIGluaXRT
dG9yYWdlKE5vZGUqIG5vZGUsIHVpbnQzMl90IHVzZUNvdW50LCBHUFJSZWcgZ3ByKQogICAgIHsK
LSAgICAgICAgbV9ub2RlSW5kZXggPSBub2RlSW5kZXg7CisgICAgICAgIG1fbm9kZSA9IG5vZGU7
CiAgICAgICAgIG1fdXNlQ291bnQgPSB1c2VDb3VudDsKICAgICAgICAgbV9yZWdpc3RlckZvcm1h
dCA9IERhdGFGb3JtYXRTdG9yYWdlOwogICAgICAgICBtX3NwaWxsRm9ybWF0ID0gRGF0YUZvcm1h
dE5vbmU7CkBAIC0xNjMsMTQgKzE2MywxNCBAQCBwdWJsaWM6CiAgICAgICAgIEFTU0VSVChtX3Vz
ZUNvdW50KTsKICAgICB9CiAKLSAgICAvLyBHZXQgdGhlIGluZGV4IG9mIHRoZSBub2RlIHRoYXQg
cHJvZHVjZWQgdGhpcyB2YWx1ZS4KLSAgICBOb2RlSW5kZXggbm9kZUluZGV4KCkgeyByZXR1cm4g
bV9ub2RlSW5kZXg7IH0KKyAgICAvLyBHZXQgdGhlIG5vZGUgdGhhdCBwcm9kdWNlZCB0aGlzIHZh
bHVlLgorICAgIE5vZGUqIG5vZGUoKSB7IHJldHVybiBtX25vZGU7IH0KICAgICAKLSAgICB2b2lk
IG5vdGljZU9TUkJpcnRoKFZhcmlhYmxlRXZlbnRTdHJlYW0mIHN0cmVhbSwgTm9kZUluZGV4IG5v
ZGVJbmRleCwgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlcikKKyAgICB2b2lkIG5vdGlj
ZU9TUkJpcnRoKFZhcmlhYmxlRXZlbnRTdHJlYW0mIHN0cmVhbSwgTm9kZSogbm9kZSwgVmlydHVh
bFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlcikKICAgICB7CiAgICAgICAgIGlmIChtX2lzQ29uc3Rh
bnQpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGlmIChtX25vZGVJbmRleCAhPSBub2Rl
SW5kZXgpCisgICAgICAgIGlmIChtX25vZGUgIT0gbm9kZSkKICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgaWYgKCFhbGl2ZSgpKQogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMTk0LDggKzE5
NCw4IEBAIHB1YmxpYzoKICAgICAgICAgYm9vbCByZXN1bHQgPSAhLS1tX3VzZUNvdW50OwogICAg
ICAgICAKICAgICAgICAgaWYgKHJlc3VsdCAmJiBtX2Jvcm5Gb3JPU1IpIHsKLSAgICAgICAgICAg
IEFTU0VSVChtX25vZGVJbmRleCAhPSBOb05vZGUpOwotICAgICAgICAgICAgc3RyZWFtLmFwcGVu
ZEFuZExvZyhWYXJpYWJsZUV2ZW50OjpkZWF0aChNaW5pZmllZElEKG1fbm9kZUluZGV4KSkpOwor
ICAgICAgICAgICAgQVNTRVJUKG1fbm9kZSk7CisgICAgICAgICAgICBzdHJlYW0uYXBwZW5kQW5k
TG9nKFZhcmlhYmxlRXZlbnQ6OmRlYXRoKE1pbmlmaWVkSUQobV9ub2RlKSkpOwogICAgICAgICB9
CiAgICAgICAgIAogICAgICAgICByZXR1cm4gcmVzdWx0OwpAQCAtMzgyLDI1ICszODIsMjUgQEAg
cHJpdmF0ZToKICAgICAgICAgQVNTRVJUKG1fYm9ybkZvck9TUik7CiAgICAgICAgIAogICAgICAg
ICBpZiAobV9yZWdpc3RlckZvcm1hdCA9PSBEYXRhRm9ybWF0RG91YmxlKSB7Ci0gICAgICAgICAg
ICBzdHJlYW0uYXBwZW5kQW5kTG9nKFZhcmlhYmxlRXZlbnQ6OmZpbGxGUFIoa2luZCwgTWluaWZp
ZWRJRChtX25vZGVJbmRleCksIHUuZnByKSk7CisgICAgICAgICAgICBzdHJlYW0uYXBwZW5kQW5k
TG9nKFZhcmlhYmxlRXZlbnQ6OmZpbGxGUFIoa2luZCwgTWluaWZpZWRJRChtX25vZGUpLCB1LmZw
cikpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAjaWYgVVNFKEpTVkFMVUUzMl82
NCkKICAgICAgICAgaWYgKG1fcmVnaXN0ZXJGb3JtYXQgJiBEYXRhRm9ybWF0SlMpIHsKLSAgICAg
ICAgICAgIHN0cmVhbS5hcHBlbmRBbmRMb2coVmFyaWFibGVFdmVudDo6ZmlsbFBhaXIoa2luZCwg
TWluaWZpZWRJRChtX25vZGVJbmRleCksIHUudi50YWdHUFIsIHUudi5wYXlsb2FkR1BSKSk7Cisg
ICAgICAgICAgICBzdHJlYW0uYXBwZW5kQW5kTG9nKFZhcmlhYmxlRXZlbnQ6OmZpbGxQYWlyKGtp
bmQsIE1pbmlmaWVkSUQobV9ub2RlKSwgdS52LnRhZ0dQUiwgdS52LnBheWxvYWRHUFIpKTsKICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogI2VuZGlmCi0gICAgICAgIHN0cmVhbS5hcHBl
bmRBbmRMb2coVmFyaWFibGVFdmVudDo6ZmlsbEdQUihraW5kLCBNaW5pZmllZElEKG1fbm9kZUlu
ZGV4KSwgdS5ncHIsIG1fcmVnaXN0ZXJGb3JtYXQpKTsKKyAgICAgICAgc3RyZWFtLmFwcGVuZEFu
ZExvZyhWYXJpYWJsZUV2ZW50OjpmaWxsR1BSKGtpbmQsIE1pbmlmaWVkSUQobV9ub2RlKSwgdS5n
cHIsIG1fcmVnaXN0ZXJGb3JtYXQpKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBhcHBlbmRTcGls
bChWYXJpYWJsZUV2ZW50S2luZCBraW5kLCBWYXJpYWJsZUV2ZW50U3RyZWFtJiBzdHJlYW0sIFZp
cnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIpCiAgICAgewotICAgICAgICBzdHJlYW0uYXBw
ZW5kQW5kTG9nKFZhcmlhYmxlRXZlbnQ6OnNwaWxsKGtpbmQsIE1pbmlmaWVkSUQobV9ub2RlSW5k
ZXgpLCB2aXJ0dWFsUmVnaXN0ZXIsIG1fc3BpbGxGb3JtYXQpKTsKKyAgICAgICAgc3RyZWFtLmFw
cGVuZEFuZExvZyhWYXJpYWJsZUV2ZW50OjpzcGlsbChraW5kLCBNaW5pZmllZElEKG1fbm9kZSks
IHZpcnR1YWxSZWdpc3RlciwgbV9zcGlsbEZvcm1hdCkpOwogICAgIH0KICAgICAKLSAgICAvLyBU
aGUgaW5kZXggb2YgdGhlIG5vZGUgd2hvc2UgcmVzdWx0IGlzIHN0b3JlZCBpbiB0aGlzIHZpcnR1
YWwgcmVnaXN0ZXIuCi0gICAgTm9kZUluZGV4IG1fbm9kZUluZGV4OworICAgIC8vIFRoZSBub2Rl
IHdob3NlIHJlc3VsdCBpcyBzdG9yZWQgaW4gdGhpcyB2aXJ0dWFsIHJlZ2lzdGVyLgorICAgIE5v
ZGUqIG1fbm9kZTsKICAgICB1aW50MzJfdCBtX3VzZUNvdW50OwogICAgIERhdGFGb3JtYXQgbV9y
ZWdpc3RlckZvcm1hdDsKICAgICBEYXRhRm9ybWF0IG1fc3BpbGxGb3JtYXQ7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkocmV2aXNpb24gMTQwOTA0KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2
LDYgKzQ2LDcgQEAgR3JhcGg6OkdyYXBoKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgQwogICAg
ICwgbV9jb2RlQmxvY2soY29kZUJsb2NrKQogICAgICwgbV9jb21waWxhdGlvbihnbG9iYWxEYXRh
Lm1fcGVyQnl0ZWNvZGVQcm9maWxlciA/IGdsb2JhbERhdGEubV9wZXJCeXRlY29kZVByb2ZpbGVy
LT5uZXdDb21waWxhdGlvbihjb2RlQmxvY2ssIFByb2ZpbGVyOjpERkcpIDogMCkKICAgICAsIG1f
cHJvZmlsZWRCbG9jayhjb2RlQmxvY2stPmFsdGVybmF0aXZlKCkpCisgICAgLCBtX2FsbG9jYXRv
cihnbG9iYWxEYXRhLm1fZGZnU3RhdGUtPm1fYWxsb2NhdG9yKQogICAgICwgbV9oYXNBcmd1bWVu
dHMoZmFsc2UpCiAgICAgLCBtX29zckVudHJ5Qnl0ZWNvZGVJbmRleChvc3JFbnRyeUJ5dGVjb2Rl
SW5kZXgpCiAgICAgLCBtX211c3RIYW5kbGVWYWx1ZXMobXVzdEhhbmRsZVZhbHVlcykKQEAgLTU0
LDYgKzU1LDExIEBAIEdyYXBoOjpHcmFwaChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEMKICAg
ICBBU1NFUlQobV9wcm9maWxlZEJsb2NrKTsKIH0KIAorR3JhcGg6On5HcmFwaCgpCit7CisgICAg
bV9hbGxvY2F0b3IuZnJlZUFsbCgpOworfQorCiBjb25zdCBjaGFyICpHcmFwaDo6b3BOYW1lKE5v
ZGVUeXBlIG9wKQogewogICAgIHJldHVybiBkZmdPcE5hbWVzW29wXTsKQEAgLTY1LDE4ICs3MSwx
NiBAQCBzdGF0aWMgdm9pZCBwcmludFdoaXRlU3BhY2UoUHJpbnRTdHJlYW0mCiAgICAgICAgIG91
dC5wcmludCgiICIpOwogfQogCi1ib29sIEdyYXBoOjpkdW1wQ29kZU9yaWdpbihQcmludFN0cmVh
bSYgb3V0LCBjb25zdCBjaGFyKiBwcmVmaXgsIE5vZGVJbmRleCBwcmV2Tm9kZUluZGV4LCBOb2Rl
SW5kZXggbm9kZUluZGV4KQorYm9vbCBHcmFwaDo6ZHVtcENvZGVPcmlnaW4oUHJpbnRTdHJlYW0m
IG91dCwgY29uc3QgY2hhciogcHJlZml4LCBOb2RlKiBwcmV2aW91c05vZGUsIE5vZGUqIGN1cnJl
bnROb2RlKQogewotICAgIGlmIChwcmV2Tm9kZUluZGV4ID09IE5vTm9kZSkKKyAgICBpZiAoIXBy
ZXZpb3VzTm9kZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAotICAgIE5vZGUmIGN1cnJl
bnROb2RlID0gYXQobm9kZUluZGV4KTsKLSAgICBOb2RlJiBwcmV2aW91c05vZGUgPSBhdChwcmV2
Tm9kZUluZGV4KTsKLSAgICBpZiAocHJldmlvdXNOb2RlLmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZy
YW1lID09IGN1cnJlbnROb2RlLmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKQorICAgIGlmIChw
cmV2aW91c05vZGUtPmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lID09IGN1cnJlbnROb2RlLT5j
b2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAot
ICAgIFZlY3RvcjxDb2RlT3JpZ2luPiBwcmV2aW91c0lubGluZVN0YWNrID0gcHJldmlvdXNOb2Rl
LmNvZGVPcmlnaW4uaW5saW5lU3RhY2soKTsKLSAgICBWZWN0b3I8Q29kZU9yaWdpbj4gY3VycmVu
dElubGluZVN0YWNrID0gY3VycmVudE5vZGUuY29kZU9yaWdpbi5pbmxpbmVTdGFjaygpOworICAg
IFZlY3RvcjxDb2RlT3JpZ2luPiBwcmV2aW91c0lubGluZVN0YWNrID0gcHJldmlvdXNOb2RlLT5j
b2RlT3JpZ2luLmlubGluZVN0YWNrKCk7CisgICAgVmVjdG9yPENvZGVPcmlnaW4+IGN1cnJlbnRJ
bmxpbmVTdGFjayA9IGN1cnJlbnROb2RlLT5jb2RlT3JpZ2luLmlubGluZVN0YWNrKCk7CiAgICAg
dW5zaWduZWQgY29tbW9uU2l6ZSA9IHN0ZDo6bWluKHByZXZpb3VzSW5saW5lU3RhY2suc2l6ZSgp
LCBjdXJyZW50SW5saW5lU3RhY2suc2l6ZSgpKTsKICAgICB1bnNpZ25lZCBpbmRleE9mRGl2ZXJn
ZW5jZSA9IGNvbW1vblNpemU7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNvbW1vblNp
emU7ICsraSkgewpAQCAtMTA3LDMyICsxMTEsMjMgQEAgYm9vbCBHcmFwaDo6ZHVtcENvZGVPcmln
aW4oUHJpbnRTdHJlYW0mIAogICAgIHJldHVybiBoYXNQcmludGVkOwogfQogCi1pbnQgR3JhcGg6
OmFtb3VudE9mTm9kZVdoaXRlU3BhY2UoTm9kZSYgbm9kZSkKK2ludCBHcmFwaDo6YW1vdW50T2ZO
b2RlV2hpdGVTcGFjZShOb2RlKiBub2RlKQogewotICAgIHJldHVybiAobm9kZS5jb2RlT3JpZ2lu
LmlubGluZURlcHRoKCkgLSAxKSAqIDI7CisgICAgcmV0dXJuIChub2RlLT5jb2RlT3JpZ2luLmlu
bGluZURlcHRoKCkgLSAxKSAqIDI7CiB9CiAKLXZvaWQgR3JhcGg6OnByaW50Tm9kZVdoaXRlU3Bh
Y2UoUHJpbnRTdHJlYW0mIG91dCwgTm9kZSYgbm9kZSkKK3ZvaWQgR3JhcGg6OnByaW50Tm9kZVdo
aXRlU3BhY2UoUHJpbnRTdHJlYW0mIG91dCwgTm9kZSogbm9kZSkKIHsKICAgICBwcmludFdoaXRl
U3BhY2Uob3V0LCBhbW91bnRPZk5vZGVXaGl0ZVNwYWNlKG5vZGUpKTsKIH0KIAotdm9pZCBHcmFw
aDo6ZHVtcChQcmludFN0cmVhbSYgb3V0LCBFZGdlIGVkZ2UpCit2b2lkIEdyYXBoOjpkdW1wKFBy
aW50U3RyZWFtJiBvdXQsIGNvbnN0IGNoYXIqIHByZWZpeCwgTm9kZSogbm9kZSkKIHsKLSAgICBv
dXQucHJpbnQoCi0gICAgICAgIHVzZUtpbmRUb1N0cmluZyhlZGdlLnVzZUtpbmQoKSksCi0gICAg
ICAgICJAIiwgZWRnZS5pbmRleCgpLAotICAgICAgICBBYmJyZXZpYXRlZFNwZWN1bGF0aW9uRHVt
cChhdChlZGdlKS5wcmVkaWN0aW9uKCkpKTsKLX0KKyAgICBOb2RlVHlwZSBvcCA9IG5vZGUtPm9w
KCk7CiAKLXZvaWQgR3JhcGg6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCwgY29uc3QgY2hhciogcHJl
Zml4LCBOb2RlSW5kZXggbm9kZUluZGV4KQotewotICAgIE5vZGUmIG5vZGUgPSBhdChub2RlSW5k
ZXgpOwotICAgIE5vZGVUeXBlIG9wID0gbm9kZS5vcCgpOwotCi0gICAgdW5zaWduZWQgcmVmQ291
bnQgPSBub2RlLnJlZkNvdW50KCk7CisgICAgdW5zaWduZWQgcmVmQ291bnQgPSBub2RlLT5yZWZD
b3VudCgpOwogICAgIGJvb2wgc2tpcHBlZCA9ICFyZWZDb3VudDsKLSAgICBib29sIG11c3RHZW5l
cmF0ZSA9IG5vZGUubXVzdEdlbmVyYXRlKCk7CisgICAgYm9vbCBtdXN0R2VuZXJhdGUgPSBub2Rl
LT5tdXN0R2VuZXJhdGUoKTsKICAgICBpZiAobXVzdEdlbmVyYXRlKQogICAgICAgICAtLXJlZkNv
dW50OwogCkBAIC0xNTYsMTUwICsxNTEsOTYgQEAgdm9pZCBHcmFwaDo6ZHVtcChQcmludFN0cmVh
bSYgb3V0LCBjb25zdAogICAgIC8vICAgICAgICAgJCMgICAtIHRoZSBpbmRleCBpbiB0aGUgQ29k
ZUJsb2NrIG9mIGEgY29uc3RhbnQgeyBmb3IgbnVtZXJpYyBjb25zdGFudHMgdGhlIHZhbHVlIGlz
IGRpc3BsYXllZCB8IGZvciBpbnRlZ2VycywgaW4gYm90aCBkZWNpbWFsIGFuZCBoZXggfS4KICAg
ICAvLyAgICAgICAgIGlkIyAgLSB0aGUgaW5kZXggaW4gdGhlIENvZGVCbG9jayBvZiBhbiBpZGVu
dGlmaWVyIHsgaWYgY29kZUJsb2NrIGlzIHBhc3NlZCB0byBkdW1wKCksIHRoZSBzdHJpbmcgcmVw
cmVzZW50YXRpb24gaXMgZGlzcGxheWVkIH0uCiAgICAgLy8gICAgICAgICB2YXIjIC0gdGhlIGlu
ZGV4IG9mIGEgdmFyIG9uIHRoZSBnbG9iYWwgb2JqZWN0LCB1c2VkIGJ5IEdldEdsb2JhbFZhci9Q
dXRHbG9iYWxWYXIgb3BlcmF0aW9ucy4KLSAgICBvdXQucHJpbnRmKCIlIDRkOiVzPCVjJXU6Iiwg
KGludClub2RlSW5kZXgsIHNraXBwZWQgPyAiICBza2lwcGVkICAiIDogIiAgICAgICAgICAgIiwg
bXVzdEdlbmVyYXRlID8gJyEnIDogJyAnLCByZWZDb3VudCk7Ci0gICAgaWYgKG5vZGUuaGFzUmVz
dWx0KCkgJiYgIXNraXBwZWQgJiYgbm9kZS5oYXNWaXJ0dWFsUmVnaXN0ZXIoKSkKLSAgICAgICAg
b3V0LnByaW50KG5vZGUudmlydHVhbFJlZ2lzdGVyKCkpOworICAgIG91dC5wcmludGYoIiUgNGQ6
JXM8JWMldToiLCAoaW50KW5vZGUtPmluZGV4KCksIHNraXBwZWQgPyAiICBza2lwcGVkICAiIDog
IiAgICAgICAgICAgIiwgbXVzdEdlbmVyYXRlID8gJyEnIDogJyAnLCByZWZDb3VudCk7CisgICAg
aWYgKG5vZGUtPmhhc1Jlc3VsdCgpICYmICFza2lwcGVkICYmIG5vZGUtPmhhc1ZpcnR1YWxSZWdp
c3RlcigpKQorICAgICAgICBvdXQucHJpbnQobm9kZS0+dmlydHVhbFJlZ2lzdGVyKCkpOwogICAg
IGVsc2UKICAgICAgICAgb3V0LnByaW50KCItIik7CiAgICAgb3V0LnByaW50KCI+XHQiLCBvcE5h
bWUob3ApLCAiKCIpOwotICAgIGJvb2wgaGFzUHJpbnRlZCA9IGZhbHNlOwotICAgIGlmIChub2Rl
LmZsYWdzKCkgJiBOb2RlSGFzVmFyQXJncykgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGNoaWxk
SWR4ID0gbm9kZS5maXJzdENoaWxkKCk7IGNoaWxkSWR4IDwgbm9kZS5maXJzdENoaWxkKCkgKyBu
b2RlLm51bUNoaWxkcmVuKCk7IGNoaWxkSWR4KyspIHsKLSAgICAgICAgICAgIGlmIChoYXNQcmlu
dGVkKQotICAgICAgICAgICAgICAgIG91dC5wcmludCgiLCAiKTsKLSAgICAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgICAgICBoYXNQcmludGVkID0gdHJ1ZTsKKyAgICBDb21tYVByaW50ZXIgY29t
bWE7CisgICAgaWYgKG5vZGUtPmZsYWdzKCkgJiBOb2RlSGFzVmFyQXJncykgeworICAgICAgICBm
b3IgKHVuc2lnbmVkIGNoaWxkSWR4ID0gbm9kZS0+Zmlyc3RDaGlsZCgpOyBjaGlsZElkeCA8IG5v
ZGUtPmZpcnN0Q2hpbGQoKSArIG5vZGUtPm51bUNoaWxkcmVuKCk7IGNoaWxkSWR4KyspIHsKICAg
ICAgICAgICAgIGlmICghbV92YXJBcmdDaGlsZHJlbltjaGlsZElkeF0pCiAgICAgICAgICAgICAg
ICAgY29udGludWU7Ci0gICAgICAgICAgICBkdW1wKG91dCwgbV92YXJBcmdDaGlsZHJlbltjaGls
ZElkeF0pOworICAgICAgICAgICAgb3V0LnByaW50KGNvbW1hLCBtX3ZhckFyZ0NoaWxkcmVuW2No
aWxkSWR4XSk7CiAgICAgICAgIH0KICAgICB9IGVsc2UgewotICAgICAgICBpZiAoISFub2RlLmNo
aWxkMSgpKSB7Ci0gICAgICAgICAgICBkdW1wKG91dCwgbm9kZS5jaGlsZDEoKSk7Ci0gICAgICAg
ICAgICBoYXNQcmludGVkID0gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICBpZiAoISFub2RlLmNo
aWxkMigpKSB7Ci0gICAgICAgICAgICBvdXQucHJpbnQoIiwgIik7IC8vIFdoZXRoZXIgb3Igbm90
IHRoZXJlIGlzIGEgZmlyc3QgY2hpbGQsIHdlIHByaW50IGEgY29tbWEgdG8gZW5zdXJlIHRoYXQg
d2Ugc2VlIGEgYmxhbmsgZW50cnkgaWYgdGhlcmUgd2Fzbid0IG9uZS4KLSAgICAgICAgICAgIGR1
bXAob3V0LCBub2RlLmNoaWxkMigpKTsKLSAgICAgICAgICAgIGhhc1ByaW50ZWQgPSB0cnVlOwot
ICAgICAgICB9Ci0gICAgICAgIGlmICghIW5vZGUuY2hpbGQzKCkpIHsKLSAgICAgICAgICAgIGlm
ICghbm9kZS5jaGlsZDEoKSAmJiAhbm9kZS5jaGlsZDIoKSkKLSAgICAgICAgICAgICAgICBvdXQu
cHJpbnQoIiwgIik7IC8vIElmIHRoZSB0aGlyZCBjaGlsZCBpcyB0aGUgZmlyc3Qgbm9uLWVtcHR5
IG9uZSB0aGVuIG1ha2Ugc3VyZSB3ZSBoYXZlIHR3byBibGFua3MgcHJlY2VkaW5nIGl0LgotICAg
ICAgICAgICAgb3V0LnByaW50KCIsICIpOwotICAgICAgICAgICAgZHVtcChvdXQsIG5vZGUuY2hp
bGQzKCkpOwotICAgICAgICAgICAgaGFzUHJpbnRlZCA9IHRydWU7Ci0gICAgICAgIH0KLSAgICB9
Ci0KLSAgICBpZiAoc3RybGVuKG5vZGVGbGFnc0FzU3RyaW5nKG5vZGUuZmxhZ3MoKSkpKSB7Ci0g
ICAgICAgIG91dC5wcmludChoYXNQcmludGVkID8gIiwgIiA6ICIiLCBub2RlRmxhZ3NBc1N0cmlu
Zyhub2RlLmZsYWdzKCkpKTsKLSAgICAgICAgaGFzUHJpbnRlZCA9IHRydWU7Ci0gICAgfQotICAg
IGlmIChub2RlLmhhc0FycmF5TW9kZSgpKSB7Ci0gICAgICAgIG91dC5wcmludChoYXNQcmludGVk
ID8gIiwgIiA6ICIiLCBub2RlLmFycmF5TW9kZSgpKTsKLSAgICAgICAgaGFzUHJpbnRlZCA9IHRy
dWU7Ci0gICAgfQotICAgIGlmIChub2RlLmhhc1Zhck51bWJlcigpKSB7Ci0gICAgICAgIG91dC5w
cmludChoYXNQcmludGVkID8gIiwgIiA6ICIiLCAidmFyIiwgbm9kZS52YXJOdW1iZXIoKSk7Ci0g
ICAgICAgIGhhc1ByaW50ZWQgPSB0cnVlOwotICAgIH0KLSAgICBpZiAobm9kZS5oYXNSZWdpc3Rl
clBvaW50ZXIoKSkgewotICAgICAgICBvdXQucHJpbnQoaGFzUHJpbnRlZCA/ICIsICIgOiAiIiwg
Imdsb2JhbCIsIGdsb2JhbE9iamVjdEZvcihub2RlLmNvZGVPcmlnaW4pLT5maW5kUmVnaXN0ZXJJ
bmRleChub2RlLnJlZ2lzdGVyUG9pbnRlcigpKSwgIigiLCBSYXdQb2ludGVyKG5vZGUucmVnaXN0
ZXJQb2ludGVyKCkpLCAiKSIpOwotICAgICAgICBoYXNQcmludGVkID0gdHJ1ZTsKLSAgICB9Ci0g
ICAgaWYgKG5vZGUuaGFzSWRlbnRpZmllcigpKSB7Ci0gICAgICAgIG91dC5wcmludChoYXNQcmlu
dGVkID8gIiwgIiA6ICIiLCAiaWQiLCBub2RlLmlkZW50aWZpZXJOdW1iZXIoKSwgInsiLCBtX2Nv
ZGVCbG9jay0+aWRlbnRpZmllcihub2RlLmlkZW50aWZpZXJOdW1iZXIoKSkuc3RyaW5nKCksICJ9
Iik7Ci0gICAgICAgIGhhc1ByaW50ZWQgPSB0cnVlOwotICAgIH0KLSAgICBpZiAobm9kZS5oYXNT
dHJ1Y3R1cmVTZXQoKSkgewotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG5vZGUuc3Ry
dWN0dXJlU2V0KCkuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIG91dC5wcmludChoYXNQcmlu
dGVkID8gIiwgIiA6ICIiLCAic3RydWN0KCIsIFJhd1BvaW50ZXIobm9kZS5zdHJ1Y3R1cmVTZXQo
KVtpXSksICI6ICIsIEluZGV4aW5nVHlwZUR1bXAobm9kZS5zdHJ1Y3R1cmVTZXQoKVtpXS0+aW5k
ZXhpbmdUeXBlKCkpLCAiKSIpOwotICAgICAgICAgICAgaGFzUHJpbnRlZCA9IHRydWU7Ci0gICAg
ICAgIH0KLSAgICB9Ci0gICAgaWYgKG5vZGUuaGFzU3RydWN0dXJlKCkpIHsKLSAgICAgICAgb3V0
LnByaW50KGhhc1ByaW50ZWQgPyAiLCAiIDogIiIsICJzdHJ1Y3QoIiwgUmF3UG9pbnRlcihub2Rl
LnN0cnVjdHVyZSgpKSwgIjogIiwgSW5kZXhpbmdUeXBlRHVtcChub2RlLnN0cnVjdHVyZSgpLT5p
bmRleGluZ1R5cGUoKSksICIpIik7Ci0gICAgICAgIGhhc1ByaW50ZWQgPSB0cnVlOwotICAgIH0K
LSAgICBpZiAobm9kZS5oYXNTdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSgpKSB7Ci0gICAgICAgIG91
dC5wcmludChoYXNQcmludGVkID8gIiwgIiA6ICIiLCAic3RydWN0KCIsIFJhd1BvaW50ZXIobm9k
ZS5zdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSgpLnByZXZpb3VzU3RydWN0dXJlKSwgIiAtPiAiLCBS
YXdQb2ludGVyKG5vZGUuc3RydWN0dXJlVHJhbnNpdGlvbkRhdGEoKS5uZXdTdHJ1Y3R1cmUpLCAi
KSIpOwotICAgICAgICBoYXNQcmludGVkID0gdHJ1ZTsKLSAgICB9Ci0gICAgaWYgKG5vZGUuaGFz
RnVuY3Rpb24oKSkgewotICAgICAgICBvdXQucHJpbnQoaGFzUHJpbnRlZCA/ICIsICIgOiAiIiwg
UmF3UG9pbnRlcihub2RlLmZ1bmN0aW9uKCkpKTsKLSAgICAgICAgaGFzUHJpbnRlZCA9IHRydWU7
Ci0gICAgfQotICAgIGlmIChub2RlLmhhc1N0b3JhZ2VBY2Nlc3NEYXRhKCkpIHsKLSAgICAgICAg
U3RvcmFnZUFjY2Vzc0RhdGEmIHN0b3JhZ2VBY2Nlc3NEYXRhID0gbV9zdG9yYWdlQWNjZXNzRGF0
YVtub2RlLnN0b3JhZ2VBY2Nlc3NEYXRhSW5kZXgoKV07Ci0gICAgICAgIG91dC5wcmludChoYXNQ
cmludGVkID8gIiwgIiA6ICIiLCAiaWQiLCBzdG9yYWdlQWNjZXNzRGF0YS5pZGVudGlmaWVyTnVt
YmVyLCAieyIsIG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKHN0b3JhZ2VBY2Nlc3NEYXRhLmlkZW50
aWZpZXJOdW1iZXIpLnN0cmluZygpLCAifSIpOworICAgICAgICBpZiAoISFub2RlLmNoaWxkMSgp
IHx8ICEhbm9kZS5jaGlsZDIoKSB8fCAhIW5vZGUuY2hpbGQzKCkpCisgICAgICAgICAgICBvdXQu
cHJpbnQoY29tbWEsIG5vZGUuY2hpbGQxKCkpOworICAgICAgICBpZiAoISFub2RlLmNoaWxkMigp
IHx8ICEhbm9kZS5jaGlsZDMoKSkKKyAgICAgICAgICAgIG91dC5wcmludChjb21tYSwgbm9kZS5j
aGlsZDIoKSk7CisgICAgICAgIGlmICghIW5vZGUuY2hpbGQzKCkpCisgICAgICAgICAgICBvdXQu
cHJpbnQoY29tbWEsIG5vZGUuY2hpbGQzKCkpOworICAgIH0KKworICAgIGlmIChzdHJsZW4obm9k
ZUZsYWdzQXNTdHJpbmcobm9kZS0+ZmxhZ3MoKSkpKQorICAgICAgICBvdXQucHJpbnQoY29tbWEs
IG5vZGVGbGFnc0FzU3RyaW5nKG5vZGUtPmZsYWdzKCkpKTsKKyAgICBpZiAobm9kZS0+aGFzQXJy
YXlNb2RlKCkpIHsKKyAgICAgICAgb3V0LnByaW50KGNvbW1hLCBub2RlLT5hcnJheU1vZGUoKSk7
CisgICAgaWYgKG5vZGUtPmhhc1Zhck51bWJlcigpKSB7CisgICAgICAgIG91dC5wcmludChjb21t
YSwgbm9kZS0+dmFyTnVtYmVyKCkpOworICAgIGlmIChub2RlLT5oYXNSZWdpc3RlclBvaW50ZXIo
KSkKKyAgICAgICAgb3V0LnByaW50KGNvbW1hLCAiZ2xvYmFsIiwgZ2xvYmFsT2JqZWN0Rm9yKG5v
ZGUtPmNvZGVPcmlnaW4pLT5maW5kUmVnaXN0ZXJJbmRleChub2RlLT5yZWdpc3RlclBvaW50ZXIo
KSksICIoIiwgUmF3UG9pbnRlcihub2RlLT5yZWdpc3RlclBvaW50ZXIoKSksICIpIik7CisgICAg
aWYgKG5vZGUtPmhhc0lkZW50aWZpZXIoKSkKKyAgICAgICAgb3V0LnByaW50KGNvbW1hLCAiaWQi
LCBub2RlLT5pZGVudGlmaWVyTnVtYmVyKCksICJ7IiwgbV9jb2RlQmxvY2stPmlkZW50aWZpZXIo
bm9kZS0+aWRlbnRpZmllck51bWJlcigpKS5zdHJpbmcoKSwgIn0iKTsKKyAgICBpZiAobm9kZS0+
aGFzU3RydWN0dXJlU2V0KCkpIHsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBub2Rl
LnN0cnVjdHVyZVNldCgpLnNpemUoKTsgKytpKQorICAgICAgICAgICAgb3V0LnByaW50KGNvbW1h
LCAic3RydWN0KCIsIFJhd1BvaW50ZXIobm9kZS0+c3RydWN0dXJlU2V0KClbaV0pLCAiOiAiLCBJ
bmRleGluZ1R5cGVEdW1wKG5vZGUtPnN0cnVjdHVyZVNldCgpW2ldLT5pbmRleGluZ1R5cGUoKSks
ICIpIik7CisgICAgfQorICAgIGlmIChub2RlLT5oYXNTdHJ1Y3R1cmUoKSkKKyAgICAgICAgb3V0
LnByaW50KGNvbW1hLCAic3RydWN0KCIsIFJhd1BvaW50ZXIobm9kZS0+c3RydWN0dXJlKCkpLCAi
OiAiLCBJbmRleGluZ1R5cGVEdW1wKG5vZGUtPnN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSks
ICIpIik7CisgICAgaWYgKG5vZGUtPmhhc1N0cnVjdHVyZVRyYW5zaXRpb25EYXRhKCkpCisgICAg
ICAgIG91dC5wcmludChjb21tYSwgInN0cnVjdCgiLCBSYXdQb2ludGVyKG5vZGUtPnN0cnVjdHVy
ZVRyYW5zaXRpb25EYXRhKCkucHJldmlvdXNTdHJ1Y3R1cmUpLCAiIC0+ICIsIFJhd1BvaW50ZXIo
bm9kZS0+c3RydWN0dXJlVHJhbnNpdGlvbkRhdGEoKS5uZXdTdHJ1Y3R1cmUpLCAiKSIpOworICAg
IGlmIChub2RlLT5oYXNGdW5jdGlvbigpKQorICAgICAgICBvdXQucHJpbnQoY29tbWEsICJmdW5j
dGlvbigiLCBSYXdQb2ludGVyKG5vZGUtPmZ1bmN0aW9uKCkpLCAiLCAiLCBGdW5jdGlvbkV4ZWN1
dGFibGVEdW1wKG5vZGUtPmZ1bmN0aW9uKCktPmpzRXhlY3V0YWJsZSgpKSwgIikiKTsKKyAgICBp
ZiAobm9kZS0+aGFzRXhlY3V0YWJsZSgpKQorICAgICAgICBvdXQucHJpbnQoY29tbWEsICJleGVj
dXRhYmxlKCIsIEZ1bmN0aW9uRXhlY3V0YWJsZUR1bXAobm9kZS0+ZXhlY3V0YWJsZSgpKSwgIiki
KTsKKyAgICBpZiAobm9kZS0+aGFzU3RvcmFnZUFjY2Vzc0RhdGEoKSkgeworICAgICAgICBTdG9y
YWdlQWNjZXNzRGF0YSYgc3RvcmFnZUFjY2Vzc0RhdGEgPSBtX3N0b3JhZ2VBY2Nlc3NEYXRhW25v
ZGUtPnN0b3JhZ2VBY2Nlc3NEYXRhSW5kZXgoKV07CisgICAgICAgIG91dC5wcmludChjb21tYSwg
ImlkIiwgc3RvcmFnZUFjY2Vzc0RhdGEuaWRlbnRpZmllck51bWJlciwgInsiLCBtX2NvZGVCbG9j
ay0+aWRlbnRpZmllcihzdG9yYWdlQWNjZXNzRGF0YS5pZGVudGlmaWVyTnVtYmVyKS5zdHJpbmco
KSwgIn0iKTsKICAgICAgICAgb3V0LnByaW50KCIsICIsIHN0YXRpY19jYXN0PHB0cmRpZmZfdD4o
c3RvcmFnZUFjY2Vzc0RhdGEub2Zmc2V0KSk7Ci0gICAgICAgIGhhc1ByaW50ZWQgPSB0cnVlOwog
ICAgIH0KLSAgICBBU1NFUlQobm9kZS5oYXNWYXJpYWJsZUFjY2Vzc0RhdGEoKSA9PSBub2RlLmhh
c0xvY2FsKCkpOwotICAgIGlmIChub2RlLmhhc1ZhcmlhYmxlQWNjZXNzRGF0YSgpKSB7Ci0gICAg
ICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhID0gbm9kZS52YXJpYWJs
ZUFjY2Vzc0RhdGEoKTsKKyAgICBBU1NFUlQobm9kZS0+aGFzVmFyaWFibGVBY2Nlc3NEYXRhKCkg
PT0gbm9kZS0+aGFzTG9jYWwoKSk7CisgICAgaWYgKG5vZGUtPmhhc1ZhcmlhYmxlQWNjZXNzRGF0
YSgpKSB7CisgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhID0g
bm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CiAgICAgICAgIGludCBvcGVyYW5kID0gdmFyaWFi
bGVBY2Nlc3NEYXRhLT5vcGVyYW5kKCk7CiAgICAgICAgIGlmIChvcGVyYW5kSXNBcmd1bWVudChv
cGVyYW5kKSkKLSAgICAgICAgICAgIG91dC5wcmludChoYXNQcmludGVkID8gIiwgIiA6ICIiLCAi
YXJnIiwgb3BlcmFuZFRvQXJndW1lbnQob3BlcmFuZCksICIoIiwgVmFyaWFibGVBY2Nlc3NEYXRh
RHVtcCgqdGhpcywgdmFyaWFibGVBY2Nlc3NEYXRhKSwgIikiKTsKKyAgICAgICAgICAgIG91dC5w
cmludChjb21tYSwgImFyZyIsIG9wZXJhbmRUb0FyZ3VtZW50KG9wZXJhbmQpLCAiKCIsIFZhcmlh
YmxlQWNjZXNzRGF0YUR1bXAoKnRoaXMsIHZhcmlhYmxlQWNjZXNzRGF0YSksICIpIik7CiAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgIG91dC5wcmludChoYXNQcmludGVkID8gIiwgIiA6ICIiLCAi
ciIsIG9wZXJhbmQsICIoIiwgVmFyaWFibGVBY2Nlc3NEYXRhRHVtcCgqdGhpcywgdmFyaWFibGVB
Y2Nlc3NEYXRhKSwgIikiKTsKLSAgICAgICAgaGFzUHJpbnRlZCA9IHRydWU7CisgICAgICAgICAg
ICBvdXQucHJpbnQoY29tbWEsICJyIiwgb3BlcmFuZCwgIigiLCBWYXJpYWJsZUFjY2Vzc0RhdGFE
dW1wKCp0aGlzLCB2YXJpYWJsZUFjY2Vzc0RhdGEpLCAiKSIpOwogICAgIH0KLSAgICBpZiAobm9k
ZS5oYXNDb25zdGFudEJ1ZmZlcigpKSB7Ci0gICAgICAgIGlmIChoYXNQcmludGVkKQotICAgICAg
ICAgICAgb3V0LnByaW50KCIsICIpOworICAgIGlmIChub2RlLT5oYXNDb25zdGFudEJ1ZmZlcigp
KSB7CisgICAgICAgIG91dC5wcmludChjb21tYSk7CiAgICAgICAgIG91dC5wcmludChub2RlLnN0
YXJ0Q29uc3RhbnQoKSwgIjpbIik7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBu
b2RlLm51bUNvbnN0YW50cygpOyArK2kpIHsKLSAgICAgICAgICAgIGlmIChpKQotICAgICAgICAg
ICAgICAgIG91dC5wcmludCgiLCAiKTsKLSAgICAgICAgICAgIG91dC5wcmludChtX2NvZGVCbG9j
ay0+Y29uc3RhbnRCdWZmZXIobm9kZS5zdGFydENvbnN0YW50KCkpW2ldKTsKLSAgICAgICAgfQor
ICAgICAgICBDb21tYVByaW50ZXIgYW5vdGhlckNvbW1hOworICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgbm9kZS5udW1Db25zdGFudHMoKTsgKytpKQorICAgICAgICAgICAgb3V0LnBy
aW50KGFub3RoZXJDb21tYSwgbV9jb2RlQmxvY2stPmNvbnN0YW50QnVmZmVyKG5vZGUuc3RhcnRD
b25zdGFudCgpKVtpXSk7CiAgICAgICAgIG91dC5wcmludCgiXSIpOwotICAgICAgICBoYXNQcmlu
dGVkID0gdHJ1ZTsKLSAgICB9Ci0gICAgaWYgKG5vZGUuaGFzSW5kZXhpbmdUeXBlKCkpIHsKLSAg
ICAgICAgaWYgKGhhc1ByaW50ZWQpCi0gICAgICAgICAgICBvdXQucHJpbnQoIiwgIik7Ci0gICAg
ICAgIG91dC5wcmludChJbmRleGluZ1R5cGVEdW1wKG5vZGUuaW5kZXhpbmdUeXBlKCkpKTsKLSAg
ICAgICAgaGFzUHJpbnRlZCA9IHRydWU7Ci0gICAgfQotICAgIGlmIChub2RlLmhhc0V4ZWN1dGlv
bkNvdW50ZXIoKSkgewotICAgICAgICBpZiAoaGFzUHJpbnRlZCkKLSAgICAgICAgICAgIG91dC5w
cmludCgiLCAiKTsKLSAgICAgICAgb3V0LnByaW50KFJhd1BvaW50ZXIobm9kZS5leGVjdXRpb25D
b3VudGVyKCkpKTsKLSAgICAgICAgaGFzUHJpbnRlZCA9IHRydWU7CiAgICAgfQorICAgIGlmIChu
b2RlLT5oYXNJbmRleGluZ1R5cGUoKSkKKyAgICAgICAgb3V0LnByaW50KGNvbW1hLCBJbmRleGlu
Z1R5cGVEdW1wKG5vZGUtPmluZGV4aW5nVHlwZSgpKSk7CisgICAgaWYgKG5vZGUtPmhhc0V4ZWN1
dGlvbkNvdW50ZXIoKSkgeworICAgICAgICBvdXQucHJpbnQoY29tbWEsIFJhd1BvaW50ZXIobm9k
ZS0+ZXhlY3V0aW9uQ291bnRlcigpKSk7CiAgICAgaWYgKG9wID09IEpTQ29uc3RhbnQpIHsKLSAg
ICAgICAgb3V0LnByaW50KGhhc1ByaW50ZWQgPyAiLCAiIDogIiIsICIkIiwgbm9kZS5jb25zdGFu
dE51bWJlcigpKTsKLSAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IHZhbHVlT2ZKU0NvbnN0YW50KG5v
ZGVJbmRleCk7CisgICAgICAgIG91dC5wcmludChjb21tYSwgIiQiLCBub2RlLT5jb25zdGFudE51
bWJlcigpKTsKKyAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IHZhbHVlT2ZKU0NvbnN0YW50KG5vZGUp
OwogICAgICAgICBvdXQucHJpbnQoIiA9ICIsIHZhbHVlKTsKLSAgICAgICAgaGFzUHJpbnRlZCA9
IHRydWU7Ci0gICAgfQotICAgIGlmIChvcCA9PSBXZWFrSlNDb25zdGFudCkgewotICAgICAgICBv
dXQucHJpbnQoaGFzUHJpbnRlZCA/ICIsICIgOiAiIiwgUmF3UG9pbnRlcihub2RlLndlYWtDb25z
dGFudCgpKSk7Ci0gICAgICAgIGhhc1ByaW50ZWQgPSB0cnVlOwotICAgIH0KLSAgICBpZiAgKG5v
ZGUuaXNCcmFuY2goKSB8fCBub2RlLmlzSnVtcCgpKSB7Ci0gICAgICAgIG91dC5wcmludChoYXNQ
cmludGVkID8gIiwgIiA6ICIiLCAiVDojIiwgbm9kZS50YWtlbkJsb2NrSW5kZXgoKSk7Ci0gICAg
ICAgIGhhc1ByaW50ZWQgPSB0cnVlOwotICAgIH0KLSAgICBpZiAgKG5vZGUuaXNCcmFuY2goKSkg
ewotICAgICAgICBvdXQucHJpbnQoaGFzUHJpbnRlZCA/ICIsICIgOiAiIiwgIkY6IyIsIG5vZGUu
bm90VGFrZW5CbG9ja0luZGV4KCkpOwotICAgICAgICBoYXNQcmludGVkID0gdHJ1ZTsKICAgICB9
Ci0gICAgb3V0LnByaW50KGhhc1ByaW50ZWQgPyAiLCAiIDogIiIsICJiYyMiLCBub2RlLmNvZGVP
cmlnaW4uYnl0ZWNvZGVJbmRleCk7Ci0gICAgaGFzUHJpbnRlZCA9IHRydWU7Ci0gICAgCi0gICAg
KHZvaWQpaGFzUHJpbnRlZDsKKyAgICBpZiAob3AgPT0gV2Vha0pTQ29uc3RhbnQpCisgICAgICAg
IG91dC0+cHJpbnQoY29tbWEsIFJhd1BvaW50ZXIobm9kZS0+d2Vha0NvbnN0YW50KCkpKTsKKyAg
ICBpZiAobm9kZS0+aXNCcmFuY2goKSB8fCBub2RlLT5pc0p1bXAoKSkKKyAgICAgICAgb3V0LnBy
aW50KGNvbW1hLCAiVDojIiwgbm9kZS0+dGFrZW5CbG9ja0luZGV4KCkpOworICAgIGlmIChub2Rl
LT5pc0JyYW5jaCgpKQorICAgICAgICBvdXQucHJpbnQoY29tbWEsICJGOiMiLCBub2RlLT5ub3RU
YWtlbkJsb2NrSW5kZXgoKSk7CisgICAgb3V0LnByaW50KGNvbW1hLCAiYmMjIiwgbm9kZS0+Y29k
ZU9yaWdpbi5ieXRlY29kZUluZGV4KTsKICAgICAKICAgICBvdXQucHJpbnQoIikiKTsKIAogICAg
IGlmICghc2tpcHBlZCkgewotICAgICAgICBpZiAobm9kZS5oYXNWYXJpYWJsZUFjY2Vzc0RhdGEo
KSkKLSAgICAgICAgICAgIG91dC5wcmludCgiICBwcmVkaWN0aW5nICIsIFNwZWN1bGF0aW9uRHVt
cChub2RlLnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5wcmVkaWN0aW9uKCkpLCBub2RlLnZhcmlhYmxl
QWNjZXNzRGF0YSgpLT5zaG91bGRVc2VEb3VibGVGb3JtYXQoKSA/ICIsIGZvcmNpbmcgZG91Ymxl
IiA6ICIiKTsKLSAgICAgICAgZWxzZSBpZiAobm9kZS5oYXNIZWFwUHJlZGljdGlvbigpKQotICAg
ICAgICAgICAgb3V0LnByaW50KCIgIHByZWRpY3RpbmcgIiwgU3BlY3VsYXRpb25EdW1wKG5vZGUu
Z2V0SGVhcFByZWRpY3Rpb24oKSkpOworICAgICAgICBpZiAobm9kZS0+aGFzVmFyaWFibGVBY2Nl
c3NEYXRhKCkpCisgICAgICAgICAgICBvdXQucHJpbnQoIiAgcHJlZGljdGluZyAiLCBTcGVjdWxh
dGlvbkR1bXAobm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCktPnByZWRpY3Rpb24oKSksIG5vZGUt
PnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5zaG91bGRVc2VEb3VibGVGb3JtYXQoKSA/ICIsIGZvcmNp
bmcgZG91YmxlIiA6ICIiKTsKKyAgICAgICAgZWxzZSBpZiAobm9kZS0+aGFzSGVhcFByZWRpY3Rp
b24oKSkKKyAgICAgICAgICAgIG91dC5wcmludCgiICBwcmVkaWN0aW5nICIsIFNwZWN1bGF0aW9u
RHVtcChub2RlLT5nZXRIZWFwUHJlZGljdGlvbigpKSk7CiAgICAgfQogICAgIAogICAgIG91dC5w
cmludCgiXG4iKTsKQEAgLTMwOSw3ICsyNTAsNyBAQCB2b2lkIEdyYXBoOjpkdW1wQmxvY2tIZWFk
ZXIoUHJpbnRTdHJlYW0mCiB7CiAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2Jsb2Nrc1tibG9j
a0luZGV4XS5nZXQoKTsKIAotICAgIG91dC5wcmludChwcmVmaXgsICJCbG9jayAjIiwgYmxvY2tJ
bmRleCwgIiAoIiwgYXQoYmxvY2stPmF0KDApKS5jb2RlT3JpZ2luLCAiKTogIiwgYmxvY2stPmlz
UmVhY2hhYmxlID8gIiIgOiAiKHNraXBwZWQpIiwgYmxvY2stPmlzT1NSVGFyZ2V0ID8gIiAoT1NS
IHRhcmdldCkiIDogIiIsICJcbiIpOworICAgIG91dC5wcmludChwcmVmaXgsICJCbG9jayAjIiwg
YmxvY2tJbmRleCwgIiAoIiwgYmxvY2stPmF0KDApLT5jb2RlT3JpZ2luLCAiKTogIiwgYmxvY2st
PmlzUmVhY2hhYmxlID8gIiIgOiAiKHNraXBwZWQpIiwgYmxvY2stPmlzT1NSVGFyZ2V0ID8gIiAo
T1NSIHRhcmdldCkiIDogIiIsICJcbiIpOwogICAgIG91dC5wcmludChwcmVmaXgsICIgIFByZWRl
Y2Vzc29yczoiKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGJsb2NrLT5tX3ByZWRlY2Vz
c29ycy5zaXplKCk7ICsraSkKICAgICAgICAgb3V0LnByaW50KCIgIyIsIGJsb2NrLT5tX3ByZWRl
Y2Vzc29yc1tpXSk7CkBAIC0zMzIsMTcgKzI3MywxNiBAQCB2b2lkIEdyYXBoOjpkdW1wQmxvY2tI
ZWFkZXIoUHJpbnRTdHJlYW0mCiAgICAgfQogICAgIG91dC5wcmludChwcmVmaXgsICIgIFBoaSBO
b2RlczoiKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGJsb2NrLT5waGlzLnNpemUoKTsg
KytpKSB7Ci0gICAgICAgIE5vZGVJbmRleCBwaGlOb2RlSW5kZXggPSBibG9jay0+cGhpc1tpXTsK
LSAgICAgICAgTm9kZSYgcGhpTm9kZSA9IGF0KHBoaU5vZGVJbmRleCk7Ci0gICAgICAgIGlmICgh
cGhpTm9kZS5zaG91bGRHZW5lcmF0ZSgpICYmIHBoaU5vZGVEdW1wTW9kZSA9PSBEdW1wTGl2ZVBo
aXNPbmx5KQorICAgICAgICBOb2RlKiBwaGlOb2RlID0gYmxvY2stPnBoaXNbaV07CisgICAgICAg
IGlmICghcGhpTm9kZS0+c2hvdWxkR2VuZXJhdGUoKSAmJiBwaGlOb2RlRHVtcE1vZGUgPT0gRHVt
cExpdmVQaGlzT25seSkKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBvdXQucHJpbnQo
IiBAIiwgcGhpTm9kZUluZGV4LCAiPCIsIHBoaU5vZGUucmVmQ291bnQoKSwgIj4tPigiKTsKLSAg
ICAgICAgaWYgKHBoaU5vZGUuY2hpbGQxKCkpIHsKLSAgICAgICAgICAgIG91dC5wcmludCgiQCIs
IHBoaU5vZGUuY2hpbGQxKCkuaW5kZXgoKSk7Ci0gICAgICAgICAgICBpZiAocGhpTm9kZS5jaGls
ZDIoKSkgewotICAgICAgICAgICAgICAgIG91dC5wcmludCgiLCBAIiwgcGhpTm9kZS5jaGlsZDIo
KS5pbmRleCgpKTsKLSAgICAgICAgICAgICAgICBpZiAocGhpTm9kZS5jaGlsZDMoKSkKLSAgICAg
ICAgICAgICAgICAgICAgb3V0LnByaW50KCIsIEAiLCBwaGlOb2RlLmNoaWxkMygpLmluZGV4KCkp
OworICAgICAgICBvdXQucHJpbnQoIiBAIiwgcGhpTm9kZS0+aW5kZXgoKSwgIjwiLCBwaGlOb2Rl
LT5yZWZDb3VudCgpLCAiPi0+KCIpOworICAgICAgICBpZiAocGhpTm9kZS0+Y2hpbGQxKCkpIHsK
KyAgICAgICAgICAgIG91dC5wcmludCgiQCIsIHBoaU5vZGUtPmNoaWxkMSgpLT5pbmRleCgpKCkp
OworICAgICAgICAgICAgaWYgKHBoaU5vZGUtPmNoaWxkMigpKSB7CisgICAgICAgICAgICAgICAg
b3V0LnByaW50KCIsIEAiLCBwaGlOb2RlLT5jaGlsZDIoKS0+aW5kZXgoKSk7CisgICAgICAgICAg
ICAgICAgaWYgKHBoaU5vZGUtPmNoaWxkMygpKQorICAgICAgICAgICAgICAgICAgICBvdXQucHJp
bnQoIiwgQCIsIHBoaU5vZGUtPmNoaWxkMygpLT5pbmRleCgpKTsKICAgICAgICAgICAgIH0KICAg
ICAgICAgfQogICAgICAgICBvdXQucHJpbnQoIikiLCBpICsgMSA8IGJsb2NrLT5waGlzLnNpemUo
KSA/ICIsIiA6ICIiKTsKQEAgLTM1Miw3ICsyOTIsNyBAQCB2b2lkIEdyYXBoOjpkdW1wQmxvY2tI
ZWFkZXIoUHJpbnRTdHJlYW0mCiAKIHZvaWQgR3JhcGg6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkK
IHsKLSAgICBOb2RlSW5kZXggbGFzdE5vZGVJbmRleCA9IE5vTm9kZTsKKyAgICBOb2RlKiBsYXN0
Tm9kZSA9IDA7CiAgICAgZm9yIChzaXplX3QgYiA9IDA7IGIgPCBtX2Jsb2Nrcy5zaXplKCk7ICsr
YikgewogICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fYmxvY2tzW2JdLmdldCgpOwogICAg
ICAgICBpZiAoIWJsb2NrKQpAQCAtMzY4LDkgKzMwOCw5IEBAIHZvaWQgR3JhcGg6OmR1bXAoUHJp
bnRTdHJlYW0mIG91dCkKICAgICAgICAgZHVtcE9wZXJhbmRzKGJsb2NrLT52YXJpYWJsZXNBdEhl
YWQsIG91dCk7CiAgICAgICAgIG91dC5wcmludCgiXG4iKTsKICAgICAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBibG9jay0+c2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIGR1bXBDb2RlT3Jp
Z2luKG91dCwgIiIsIGxhc3ROb2RlSW5kZXgsIGJsb2NrLT5hdChpKSk7CisgICAgICAgICAgICBk
dW1wQ29kZU9yaWdpbihvdXQsICIiLCBsYXN0Tm9kZSwgYmxvY2stPmF0KGkpKTsKICAgICAgICAg
ICAgIGR1bXAob3V0LCAiIiwgYmxvY2stPmF0KGkpKTsKLSAgICAgICAgICAgIGxhc3ROb2RlSW5k
ZXggPSBibG9jay0+YXQoaSk7CisgICAgICAgICAgICBsYXN0Tm9kZSA9IGJsb2NrLT5hdChpKTsK
ICAgICAgICAgfQogICAgICAgICBvdXQucHJpbnQoIiAgdmFycyBhZnRlcjogIik7CiAgICAgICAg
IGlmIChibG9jay0+Y2ZhSGFzVmlzaXRlZCkKQEAgLTM4Niw0MCArMzI2LDQwIEBAIHZvaWQgR3Jh
cGg6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkKIAogLy8gRklYTUU6IENvbnZlcnQgdGhpcyB0byBi
ZSBpdGVyYXRpdmUsIG5vdCByZWN1cnNpdmUuCiAjZGVmaW5lIERPX1RPX0NISUxEUkVOKG5vZGUs
IHRoaW5nVG9EbykgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIE5v
ZGUmIF9ub2RlID0gKG5vZGUpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCi0gICAgICAgIGlmIChfbm9kZS5mbGFncygpICYgTm9kZUhhc1ZhckFyZ3MpIHsgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIF9jaGls
ZElkeCA9IF9ub2RlLmZpcnN0Q2hpbGQoKTsgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAg
ICAgIF9jaGlsZElkeCA8IF9ub2RlLmZpcnN0Q2hpbGQoKSArIF9ub2RlLm51bUNoaWxkcmVuKCk7
ICBcCisgICAgICAgIE5vZGUqIF9ub2RlID0gKG5vZGUpOyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGlmIChfbm9kZS0+ZmxhZ3MoKSAmIE5vZGVI
YXNWYXJBcmdzKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIF9jaGlsZElkeCA9IF9ub2RlLT5maXJzdENoaWxkKCk7ICAgICAgICAgICAgICBc
CisgICAgICAgICAgICAgICAgIF9jaGlsZElkeCA8IF9ub2RlLT5maXJzdENoaWxkKCkgKyBfbm9k
ZS0+bnVtQ2hpbGRyZW4oKTsgXAogICAgICAgICAgICAgICAgICBfY2hpbGRJZHgrKykgeyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICAgICAgIGlm
ICghIW1fdmFyQXJnQ2hpbGRyZW5bX2NoaWxkSWR4XSkgICAgICAgICAgICAgICAgICAgICAgXAog
ICAgICAgICAgICAgICAgICAgICB0aGluZ1RvRG8obV92YXJBcmdDaGlsZHJlbltfY2hpbGRJZHhd
KTsgICAgICAgICAgICAgXAogICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICB9IGVsc2UgeyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAg
ICAgICAgICAgaWYgKCFfbm9kZS5jaGlsZDEoKSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgIEFTU0VSVCghX25vZGUuY2hpbGQyKCkgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAm
JiAhX25vZGUuY2hpbGQzKCkpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAg
ICAgICAgaWYgKCFfbm9kZS0+Y2hpbGQxKCkpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAorICAgICAgICAgICAgICAgIEFTU0VSVCghX25vZGUtPmNoaWxkMigpICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAmJiAh
X25vZGUtPmNoaWxkMygpKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAg
ICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAogICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgdGhpbmdUb0RvKF9ub2RlLmNo
aWxkMSgpKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAg
dGhpbmdUb0RvKF9ub2RlLT5jaGlsZDEoKSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgaWYgKCFfbm9kZS5jaGlsZDIoKSkg
eyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAg
IEFTU0VSVCghX25vZGUuY2hpbGQzKCkpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAorICAgICAgICAgICAgaWYgKCFfbm9kZS0+Y2hpbGQyKCkpIHsgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIEFTU0VSVCghX25vZGUtPmNoaWxk
MygpKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICAgICAgIGJy
ZWFrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAog
ICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgdGhpbmdUb0RvKF9ub2RlLmNoaWxkMigpKTsg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgdGhpbmdUb0Rv
KF9ub2RlLT5jaGlsZDIoKSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAotICAgICAgICAgICAgaWYgKCFfbm9kZS5jaGlsZDMoKSkgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgaWYgKCFfbm9kZS0+
Y2hpbGQzKCkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAg
ICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAotICAgICAgICAgICAgdGhpbmdUb0RvKF9ub2RlLmNoaWxkMygpKTsgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgdGhpbmdUb0RvKF9ub2Rl
LT5jaGlsZDMoKSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICB9
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAogICAgIH0gd2hpbGUgKGZhbHNlKQogCi12b2lkIEdyYXBoOjpyZWZDaGlsZHJlbihO
b2RlSW5kZXggb3ApCit2b2lkIEdyYXBoOjpyZWZDaGlsZHJlbihOb2RlKiBvcCkKIHsKICAgICBE
T19UT19DSElMRFJFTihhdChvcCksIHJlZik7CiB9CiAKLXZvaWQgR3JhcGg6OmRlcmVmQ2hpbGRy
ZW4oTm9kZUluZGV4IG9wKQordm9pZCBHcmFwaDo6ZGVyZWZDaGlsZHJlbihOb2RlKiBvcCkKIHsK
ICAgICBET19UT19DSElMRFJFTihhdChvcCksIGRlcmVmKTsKIH0KQEAgLTQzMiwxMiArMzcyLDEy
IEBAIHZvaWQgR3JhcGg6OnByZWRpY3RBcmd1bWVudFR5cGVzKCkKICAgICAgICAgaWYgKCFwcm9m
aWxlKQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIAotICAgICAgICBhdChtX2FyZ3Vt
ZW50c1thcmddKS52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+cHJlZGljdChwcm9maWxlLT5jb21wdXRl
VXBkYXRlZFByZWRpY3Rpb24oKSk7CisgICAgICAgIG1fYXJndW1lbnRzW2FyZ10tPnZhcmlhYmxl
QWNjZXNzRGF0YSgpLT5wcmVkaWN0KHByb2ZpbGUtPmNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbigp
KTsKICAgICAgICAgCiAjaWYgREZHX0VOQUJMRShERUJVR19WRVJCT1NFKQogICAgICAgICBkYXRh
TG9nKAogICAgICAgICAgICAgIkFyZ3VtZW50IFsiLCBhcmcsICJdIHByZWRpY3Rpb246ICIsCi0g
ICAgICAgICAgICBTcGVjdWxhdGlvbkR1bXAoYXQobV9hcmd1bWVudHNbYXJnXSkudmFyaWFibGVB
Y2Nlc3NEYXRhKCktPnByZWRpY3Rpb24oKSksICJcbiIpOworICAgICAgICAgICAgU3BlY3VsYXRp
b25EdW1wKG1fYXJndW1lbnRzW2FyZ10tPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5wcmVkaWN0aW9u
KCkpLCAiXG4iKTsKICNlbmRpZgogICAgIH0KIH0KQEAgLTQ1Niw1MSArMzk2LDU0IEBAIHZvaWQg
R3JhcGg6OmhhbmRsZVN1Y2Nlc3NvcihWZWN0b3I8QmxvY2sKIHZvaWQgR3JhcGg6OmNvbGxlY3RH
YXJiYWdlKCkKIHsKICAgICAvLyBGaXJzdCByZXNldCB0aGUgY291bnRzIHRvIDAgZm9yIGFsbCBu
b2Rlcy4KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSBzaXplKCk7IGktLTspCi0gICAgICAgIGF0KGkp
LnNldFJlZkNvdW50KDApOworICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gMDsgYmxv
Y2tJbmRleCA8IG1fYmxvY2tzLnNpemUoKTsgKytibG9ja0luZGV4KSB7CisgICAgICAgIEJhc2lj
QmxvY2sqIGJsb2NrID0gbV9ibG9ja3NbYmxvY2tJbmRleF0uZ2V0KCk7CisgICAgICAgIGlmICgh
YmxvY2spCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbmRl
eEluQmxvY2sgPSBibG9jay0+c2l6ZSgpOyBpbmRleEluQmxvY2stLTspCisgICAgICAgICAgICBi
bG9jay0+YXQoaW5kZXhJbkJsb2NrKS0+c2V0UmVmQ291bnQoMCk7CisgICAgfQogICAgIAogICAg
IC8vIE5vdyBmaW5kIHRoZSByb290czogdGhlIG5vZGVzIHRoYXQgYXJlIG11c3QtZ2VuZXJhdGUu
IFNldCB0aGVpciByZWYgY291bnRzIHRvCiAgICAgLy8gMSBhbmQgcHV0IHRoZW0gb24gdGhlIHdv
cmtsaXN0LgotICAgIFZlY3RvcjxOb2RlSW5kZXgsIDEyOD4gd29ya2xpc3Q7CisgICAgVmVjdG9y
PE5vZGUqLCAxMjg+IHdvcmtsaXN0OwogICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0g
MDsgYmxvY2tJbmRleCA8IG1fYmxvY2tzLnNpemUoKTsgKytibG9ja0luZGV4KSB7CiAgICAgICAg
IEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ibG9ja3NbYmxvY2tJbmRleF0uZ2V0KCk7CiAgICAgICAg
IGlmICghYmxvY2spCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgZm9yICh1bnNpZ25l
ZCBpbmRleEluQmxvY2sgPSBibG9jay0+c2l6ZSgpOyBpbmRleEluQmxvY2stLTspIHsKLSAgICAg
ICAgICAgIE5vZGVJbmRleCBub2RlSW5kZXggPSBibG9jay0+YXQoaW5kZXhJbkJsb2NrKTsKLSAg
ICAgICAgICAgIE5vZGUmIG5vZGUgPSBhdChub2RlSW5kZXgpOwotICAgICAgICAgICAgaWYgKCEo
bm9kZS5mbGFncygpICYgTm9kZU11c3RHZW5lcmF0ZSkpCisgICAgICAgICAgICBOb2RlKiBub2Rl
ID0gYmxvY2stPmF0KGluZGV4SW5CbG9jayk7CisgICAgICAgICAgICBpZiAoIShub2RlLT5mbGFn
cygpICYgTm9kZU11c3RHZW5lcmF0ZSkpCiAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgICAgICBub2RlLnNldFJlZkNvdW50KDEpOwotICAgICAgICAgICAgd29ya2xpc3QuYXBwZW5k
KG5vZGVJbmRleCk7CisgICAgICAgICAgICBub2RlLT5zZXRSZWZDb3VudCgxKTsKKyAgICAgICAg
ICAgIHdvcmtsaXN0LmFwcGVuZChub2RlKTsKICAgICAgICAgfQogICAgIH0KICAgICAKICAgICB3
aGlsZSAoIXdvcmtsaXN0LmlzRW1wdHkoKSkgewotICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4
ID0gd29ya2xpc3QubGFzdCgpOworICAgICAgICBOb2RlKiBub2RlID0gd29ya2xpc3QubGFzdCgp
OwogICAgICAgICB3b3JrbGlzdC5yZW1vdmVMYXN0KCk7Ci0gICAgICAgIE5vZGUmIG5vZGUgPSBh
dChub2RlSW5kZXgpOwotICAgICAgICBBU1NFUlQobm9kZS5zaG91bGRHZW5lcmF0ZSgpKTsgLy8g
SXQgc2hvdWxkIG5vdCBiZSBvbiB0aGUgd29ya2xpc3QgdW5sZXNzIGl0J3MgcmVmJ2VkLgotICAg
ICAgICBpZiAobm9kZS5mbGFncygpICYgTm9kZUhhc1ZhckFyZ3MpIHsKLSAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgY2hpbGRJZHggPSBub2RlLmZpcnN0Q2hpbGQoKTsKLSAgICAgICAgICAgICAg
ICAgY2hpbGRJZHggPCBub2RlLmZpcnN0Q2hpbGQoKSArIG5vZGUubnVtQ2hpbGRyZW4oKTsKKyAg
ICAgICAgQVNTRVJUKG5vZGUtPnNob3VsZEdlbmVyYXRlKCkpOyAvLyBJdCBzaG91bGQgbm90IGJl
IG9uIHRoZSB3b3JrbGlzdCB1bmxlc3MgaXQncyByZWYnZWQuCisgICAgICAgIGlmIChub2RlLT5m
bGFncygpICYgTm9kZUhhc1ZhckFyZ3MpIHsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgY2hp
bGRJZHggPSBub2RlLT5maXJzdENoaWxkKCk7CisgICAgICAgICAgICAgICAgIGNoaWxkSWR4IDwg
bm9kZS0+Zmlyc3RDaGlsZCgpICsgbm9kZS0+bnVtQ2hpbGRyZW4oKTsKICAgICAgICAgICAgICAg
ICAgKytjaGlsZElkeCkgewogICAgICAgICAgICAgICAgIGlmICghbV92YXJBcmdDaGlsZHJlbltj
aGlsZElkeF0pCiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAg
IE5vZGVJbmRleCBjaGlsZE5vZGVJbmRleCA9IG1fdmFyQXJnQ2hpbGRyZW5bY2hpbGRJZHhdLmlu
ZGV4KCk7Ci0gICAgICAgICAgICAgICAgaWYgKGF0KGNoaWxkTm9kZUluZGV4KS5wb3N0Zml4UmVm
KCkpCisgICAgICAgICAgICAgICAgTm9kZSogY2hpbGROb2RlID0gbV92YXJBcmdDaGlsZHJlbltj
aGlsZElkeF0ubm9kZSgpOworICAgICAgICAgICAgICAgIGlmIChjaGlsZE5vZGUtPnBvc3RmaXhS
ZWYoKSkKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgd29y
a2xpc3QuYXBwZW5kKGNoaWxkTm9kZUluZGV4KTsKKyAgICAgICAgICAgICAgICB3b3JrbGlzdC5h
cHBlbmQoY2hpbGROb2RlKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlmIChub2Rl
LmNoaWxkMSgpKSB7Ci0gICAgICAgICAgICBpZiAoIWF0KG5vZGUuY2hpbGQxKCkpLnBvc3RmaXhS
ZWYoKSkKLSAgICAgICAgICAgICAgICB3b3JrbGlzdC5hcHBlbmQobm9kZS5jaGlsZDEoKS5pbmRl
eCgpKTsKLSAgICAgICAgICAgIGlmIChub2RlLmNoaWxkMigpKSB7Ci0gICAgICAgICAgICAgICAg
aWYgKCFhdChub2RlLmNoaWxkMigpKS5wb3N0Zml4UmVmKCkpCi0gICAgICAgICAgICAgICAgICAg
IHdvcmtsaXN0LmFwcGVuZChub2RlLmNoaWxkMigpLmluZGV4KCkpOwotICAgICAgICAgICAgICAg
IGlmIChub2RlLmNoaWxkMygpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghYXQobm9kZS5j
aGlsZDMoKSkucG9zdGZpeFJlZigpKQotICAgICAgICAgICAgICAgICAgICAgICAgd29ya2xpc3Qu
YXBwZW5kKG5vZGUuY2hpbGQzKCkuaW5kZXgoKSk7CisgICAgICAgIH0gZWxzZSBpZiAobm9kZS0+
Y2hpbGQxKCkpIHsKKyAgICAgICAgICAgIGlmICghbm9kZS0+Y2hpbGQxKCktPnBvc3RmaXhSZWYo
KSkKKyAgICAgICAgICAgICAgICB3b3JrbGlzdC5hcHBlbmQobm9kZS0+Y2hpbGQxKCkubm9kZSgp
KTsKKyAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDIoKSkgeworICAgICAgICAgICAgICAgIGlm
ICghbm9kZS0+Y2hpbGQyKCktPnBvc3RmaXhSZWYoKSkKKyAgICAgICAgICAgICAgICAgICAgd29y
a2xpc3QuYXBwZW5kKG5vZGUtPmNoaWxkMigpLm5vZGUoKSk7CisgICAgICAgICAgICAgICAgaWYg
KG5vZGUtPmNoaWxkMygpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICghbm9kZS0+Y2hpbGQz
KCktPnBvc3RmaXhSZWYoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtsaXN0LmFwcGVu
ZChub2RlLT5jaGlsZDMoKS5ub2RlKCkpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IH0KICAgICAgICAgfQpAQCAtNTE5LDE0ICs0NjIsMTQgQEAgdm9pZCBHcmFwaDo6ZGV0ZXJtaW5l
UmVhY2hhYmlsaXR5KCkKICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2Jsb2Nrc1tpbmRl
eF0uZ2V0KCk7CiAgICAgICAgIEFTU0VSVChibG9jay0+aXNMaW5rZWQpOwogICAgICAgICAKLSAg
ICAgICAgTm9kZSYgbm9kZSA9IGF0KGJsb2NrLT5sYXN0KCkpOwotICAgICAgICBBU1NFUlQobm9k
ZS5pc1Rlcm1pbmFsKCkpOworICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPmxhc3QoKTsKKyAg
ICAgICAgQVNTRVJUKG5vZGUtPmlzVGVybWluYWwoKSk7CiAgICAgICAgIAotICAgICAgICBpZiAo
bm9kZS5pc0p1bXAoKSkKLSAgICAgICAgICAgIGhhbmRsZVN1Y2Nlc3Nvcih3b3JrbGlzdCwgaW5k
ZXgsIG5vZGUudGFrZW5CbG9ja0luZGV4KCkpOwotICAgICAgICBlbHNlIGlmIChub2RlLmlzQnJh
bmNoKCkpIHsKLSAgICAgICAgICAgIGhhbmRsZVN1Y2Nlc3Nvcih3b3JrbGlzdCwgaW5kZXgsIG5v
ZGUudGFrZW5CbG9ja0luZGV4KCkpOwotICAgICAgICAgICAgaGFuZGxlU3VjY2Vzc29yKHdvcmts
aXN0LCBpbmRleCwgbm9kZS5ub3RUYWtlbkJsb2NrSW5kZXgoKSk7CisgICAgICAgIGlmIChub2Rl
LT5pc0p1bXAoKSkKKyAgICAgICAgICAgIGhhbmRsZVN1Y2Nlc3Nvcih3b3JrbGlzdCwgaW5kZXgs
IG5vZGUtPnRha2VuQmxvY2tJbmRleCgpKTsKKyAgICAgICAgZWxzZSBpZiAobm9kZS0+aXNCcmFu
Y2goKSkgeworICAgICAgICAgICAgaGFuZGxlU3VjY2Vzc29yKHdvcmtsaXN0LCBpbmRleCwgbm9k
ZS0+dGFrZW5CbG9ja0luZGV4KCkpOworICAgICAgICAgICAgaGFuZGxlU3VjY2Vzc29yKHdvcmts
aXN0LCBpbmRleCwgbm9kZS0+bm90VGFrZW5CbG9ja0luZGV4KCkpOwogICAgICAgICB9CiAgICAg
fQogfQpAQCAtNTQ2LDggKzQ4OSwxMyBAQCB2b2lkIEdyYXBoOjpyZXNldFJlYWNoYWJpbGl0eSgp
CiAKIHZvaWQgR3JhcGg6OnJlc2V0RXhpdFN0YXRlcygpCiB7Ci0gICAgZm9yICh1bnNpZ25lZCBp
ID0gc2l6ZSgpOyBpLS07KQotICAgICAgICBhdChpKS5zZXRDYW5FeGl0KHRydWUpOworICAgIGZv
ciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8IG1fYmxvY2tzLnNpemUo
KTsgKytibG9ja0luZGV4KSB7CisgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ibG9ja3Nb
YmxvY2tJbmRleF0uZ2V0KCk7CisgICAgICAgIGlmICghYmxvY2spCisgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbmRleEluQmxvY2sgPSBibG9jay0+c2l6ZSgp
OyBpbmRleEluQmxvY2stLTspCisgICAgICAgICAgICBibG9jay0+YXQoaW5kZXhJbkJsb2NrKS0+
c2V0Q2FuRXhpdCh0cnVlKTsKKyAgICB9CiB9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHJldmlzaW9uIDE0MDkwNCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEyLCAyMDEzIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtMzUsNyArMzUsOSBAQAogI2luY2x1ZGUgIkRGR0Fzc2VtYmx5SGVscGVycy5oIgogI2lu
Y2x1ZGUgIkRGR0Jhc2ljQmxvY2suaCIKICNpbmNsdWRlICJERkdEb21pbmF0b3JzLmgiCisjaW5j
bHVkZSAiREZHTG9uZ0xpdmVkU3RhdGUuaCIKICNpbmNsdWRlICJERkdOb2RlLmgiCisjaW5jbHVk
ZSAiREZHTm9kZUFsbG9jYXRvci5oIgogI2luY2x1ZGUgIkRGR1ZhcmlhZGljRnVuY3Rpb24uaCIK
ICNpbmNsdWRlICJKU1N0YWNrLmgiCiAjaW5jbHVkZSAiTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJv
ZmlsZS5oIgpAQCAtODMsNTQgKzg1LDQ4IEBAIGVudW0gQWRkU3BlY3VsYXRpb25Nb2RlIHsKIC8v
CiAvLyA9PT0gR3JhcGggPT09CiAvLwotLy8gVGhlIGRhdGFmbG93IGdyYXBoIGlzIGFuIG9yZGVy
ZWQgdmVjdG9yIG9mIG5vZGVzLgogLy8gVGhlIG9yZGVyIG1heSBiZSBzaWduaWZpY2FudCBmb3Ig
bm9kZXMgd2l0aCBzaWRlLWVmZmVjdHMgKHByb3BlcnR5IGFjY2Vzc2VzLCB2YWx1ZSBjb252ZXJz
aW9ucykuCiAvLyBOb2RlcyB0aGF0IGFyZSAnZGVhZCcgcmVtYWluIGluIHRoZSB2ZWN0b3Igd2l0
aCByZWZDb3VudCAwLgotY2xhc3MgR3JhcGggOiBwdWJsaWMgVmVjdG9yPE5vZGUsIDY0PiB7Citj
bGFzcyBHcmFwaCB7CiBwdWJsaWM6CiAgICAgR3JhcGgoSlNHbG9iYWxEYXRhJiwgQ29kZUJsb2Nr
KiwgdW5zaWduZWQgb3NyRW50cnlCeXRlY29kZUluZGV4LCBjb25zdCBPcGVyYW5kczxKU1ZhbHVl
PiYgbXVzdEhhbmRsZVZhbHVlcyk7Ci0gICAgCi0gICAgdXNpbmcgVmVjdG9yPE5vZGUsIDY0Pjo6
b3BlcmF0b3JbXTsKLSAgICB1c2luZyBWZWN0b3I8Tm9kZSwgNjQ+OjphdDsKLSAgICAKLSAgICBO
b2RlJiBvcGVyYXRvcltdKEVkZ2Ugbm9kZVVzZSkgeyByZXR1cm4gYXQobm9kZVVzZS5pbmRleCgp
KTsgfQotICAgIGNvbnN0IE5vZGUmIG9wZXJhdG9yW10oRWRnZSBub2RlVXNlKSBjb25zdCB7IHJl
dHVybiBhdChub2RlVXNlLmluZGV4KCkpOyB9Ci0gICAgCi0gICAgTm9kZSYgYXQoRWRnZSBub2Rl
VXNlKSB7IHJldHVybiBhdChub2RlVXNlLmluZGV4KCkpOyB9Ci0gICAgY29uc3QgTm9kZSYgYXQo
RWRnZSBub2RlVXNlKSBjb25zdCB7IHJldHVybiBhdChub2RlVXNlLmluZGV4KCkpOyB9CisgICAg
fkdyYXBoKCk7CiAgICAgCiAgICAgLy8gTWFyayBhIG5vZGUgYXMgYmVpbmcgcmVmZXJlbmNlZC4K
LSAgICBOb2RlSW5kZXggcmVmKE5vZGVJbmRleCBub2RlSW5kZXgpCisgICAgTm9kZSogcmVmKE5v
ZGUqIG5vZGUpCiAgICAgewotICAgICAgICBOb2RlJiBub2RlID0gYXQobm9kZUluZGV4KTsKICAg
ICAgICAgLy8gSWYgdGhlIHZhbHVlIChiZWZvcmUgaW5jcmVtZW50aW5nKSB3YXMgYXQgcmVmQ291
bnQgemVybyB0aGVuIHdlIG5lZWQgdG8gcmVmIGl0cyBjaGlsZHJlbi4KLSAgICAgICAgaWYgKCFu
b2RlLnBvc3RmaXhSZWYoKSkKLSAgICAgICAgICAgIHJlZkNoaWxkcmVuKG5vZGVJbmRleCk7Ci0g
ICAgICAgIHJldHVybiBub2RlSW5kZXg7CisgICAgICAgIGlmICghbm9kZS0+cG9zdGZpeFJlZigp
KQorICAgICAgICAgICAgcmVmQ2hpbGRyZW4obm9kZSk7CisgICAgICAgIHJldHVybiBub2RlOwog
ICAgIH0KICAgICBFZGdlIHJlZihFZGdlIG5vZGVVc2UpCiAgICAgewotICAgICAgICByZWYobm9k
ZVVzZS5pbmRleCgpKTsKKyAgICAgICAgcmVmKG5vZGVVc2Uubm9kZSgpKTsKICAgICAgICAgcmV0
dXJuIG5vZGVVc2U7CiAgICAgfQogICAgIAotICAgIHZvaWQgZGVyZWYoTm9kZUluZGV4IG5vZGVJ
bmRleCkKKyAgICB2b2lkIGRlcmVmKE5vZGUqIG5vZGUpCiAgICAgewotICAgICAgICBpZiAoYXQo
bm9kZUluZGV4KS5wb3N0Zml4RGVyZWYoKSA9PSAxKQotICAgICAgICAgICAgZGVyZWZDaGlsZHJl
bihub2RlSW5kZXgpOworI2lmICFBU1NFUlRfRElTQUJMRUQKKyAgICAgICAgaWYgKCFub2RlLT5y
ZWZDb3VudCgpKQorICAgICAgICAgICAgZHVtcCgpOworI2VuZGlmCisgICAgICAgIGlmIChub2Rl
LT5wb3N0Zml4RGVyZWYoKSA9PSAxKQorICAgICAgICAgICAgZGVyZWZDaGlsZHJlbihub2RlKTsK
ICAgICB9CiAgICAgdm9pZCBkZXJlZihFZGdlIG5vZGVVc2UpCiAgICAgewotICAgICAgICBkZXJl
Zihub2RlVXNlLmluZGV4KCkpOworICAgICAgICBkZXJlZihub2RlVXNlLm5vZGUoKSk7CiAgICAg
fQogICAgIAotICAgIHZvaWQgY2hhbmdlSW5kZXgoRWRnZSYgZWRnZSwgTm9kZUluZGV4IG5ld0lu
ZGV4LCBib29sIGNoYW5nZVJlZiA9IHRydWUpCisgICAgdm9pZCBjaGFuZ2VDaGlsZChFZGdlJiBl
ZGdlLCBOb2RlKiBuZXdOb2RlLCBib29sIGNoYW5nZVJlZiA9IHRydWUpCiAgICAgewogICAgICAg
ICBpZiAoY2hhbmdlUmVmKSB7Ci0gICAgICAgICAgICByZWYobmV3SW5kZXgpOwotICAgICAgICAg
ICAgZGVyZWYoZWRnZS5pbmRleCgpKTsKKyAgICAgICAgICAgIHJlZihuZXdOb2RlKTsKKyAgICAg
ICAgICAgIGRlcmVmKGVkZ2Uubm9kZSgpKTsKICAgICAgICAgfQotICAgICAgICBlZGdlLnNldElu
ZGV4KG5ld0luZGV4KTsKKyAgICAgICAgZWRnZS5zZXROb2RlKG5ld05vZGUpOwogICAgIH0KICAg
ICAKICAgICB2b2lkIGNoYW5nZUVkZ2UoRWRnZSYgZWRnZSwgRWRnZSBuZXdFZGdlLCBib29sIGNo
YW5nZVJlZiA9IHRydWUpCkBAIC0xNDIsMTEgKzEzOCwxMSBAQCBwdWJsaWM6CiAgICAgICAgIGVk
Z2UgPSBuZXdFZGdlOwogICAgIH0KICAgICAKLSAgICB2b2lkIGNvbXBhcmVBbmRTd2FwKEVkZ2Um
IGVkZ2UsIE5vZGVJbmRleCBvbGRJbmRleCwgTm9kZUluZGV4IG5ld0luZGV4LCBib29sIGNoYW5n
ZVJlZikKKyAgICB2b2lkIGNvbXBhcmVBbmRTd2FwKEVkZ2UmIGVkZ2UsIE5vZGUqIG9sZE5vZGUs
IE5vZGUqIG5ld05vZGUsIGJvb2wgY2hhbmdlUmVmKQogICAgIHsKLSAgICAgICAgaWYgKGVkZ2Uu
aW5kZXgoKSAhPSBvbGRJbmRleCkKKyAgICAgICAgaWYgKGVkZ2Uubm9kZSgpICE9IG9sZE5vZGUp
CiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGNoYW5nZUluZGV4KGVkZ2UsIG5ld0luZGV4
LCBjaGFuZ2VSZWYpOworICAgICAgICBjaGFuZ2VDaGlsZChlZGdlLCBuZXdOb2RlLCBjaGFuZ2VS
ZWYpOwogICAgIH0KICAgICAKICAgICB2b2lkIGNvbXBhcmVBbmRTd2FwKEVkZ2UmIGVkZ2UsIEVk
Z2Ugb2xkRWRnZSwgRWRnZSBuZXdFZGdlLCBib29sIGNoYW5nZVJlZikKQEAgLTE1Niw0NCArMTUy
LDI5IEBAIHB1YmxpYzoKICAgICAgICAgY2hhbmdlRWRnZShlZGdlLCBuZXdFZGdlLCBjaGFuZ2VS
ZWYpOwogICAgIH0KICAgICAKLSAgICB2b2lkIGNsZWFyQW5kRGVyZWZDaGlsZDEoTm9kZSYgbm9k
ZSkKKyAgICB2b2lkIGNsZWFyQW5kRGVyZWZDaGlsZChOb2RlKiBub2RlLCB1bnNpZ25lZCBpbmRl
eCkKICAgICB7Ci0gICAgICAgIGlmICghbm9kZS5jaGlsZDEoKSkKKyAgICAgICAgaWYgKCFub2Rl
LT5jaGlsZHJlbi5jaGlsZChpbmRleCkpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGRl
cmVmKG5vZGUuY2hpbGQxKCkpOwotICAgICAgICBub2RlLmNoaWxkcmVuLmNoaWxkMSgpID0gRWRn
ZSgpOwotICAgIH0KLQotICAgIHZvaWQgY2xlYXJBbmREZXJlZkNoaWxkMihOb2RlJiBub2RlKQot
ICAgIHsKLSAgICAgICAgaWYgKCFub2RlLmNoaWxkMigpKQotICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICBkZXJlZihub2RlLmNoaWxkMigpKTsKLSAgICAgICAgbm9kZS5jaGlsZHJlbi5jaGls
ZDIoKSA9IEVkZ2UoKTsKLSAgICB9Ci0KLSAgICB2b2lkIGNsZWFyQW5kRGVyZWZDaGlsZDMoTm9k
ZSYgbm9kZSkKLSAgICB7Ci0gICAgICAgIGlmICghbm9kZS5jaGlsZDMoKSkKLSAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgZGVyZWYobm9kZS5jaGlsZDMoKSk7Ci0gICAgICAgIG5vZGUuY2hp
bGRyZW4uY2hpbGQzKCkgPSBFZGdlKCk7CisgICAgICAgIGRlcmVmKG5vZGUtPmNoaWxkcmVuLmNo
aWxkKGluZGV4KSk7CisgICAgICAgIG5vZGUuY2hpbGRyZW4uc2V0Q2hpbGQoaW5kZXgsIEVkZ2Uo
KSk7CiAgICAgfQorICAgIHZvaWQgY2xlYXJBbmREZXJlZkNoaWxkMShOb2RlKiBub2RlKSB7IGNs
ZWFyQW5kRGVyZWZDaGlsZChub2RlLCAwKTsgfQorICAgIHZvaWQgY2xlYXJBbmREZXJlZkNoaWxk
MihOb2RlKiBub2RlKSB7IGNsZWFyQW5kRGVyZWZDaGlsZChub2RlLCAxKTsgfQorICAgIHZvaWQg
Y2xlYXJBbmREZXJlZkNoaWxkMyhOb2RlKiBub2RlKSB7IGNsZWFyQW5kRGVyZWZDaGlsZChub2Rl
LCAyKTsgfQogICAgIAogI2RlZmluZSBERkdfREVGSU5FX0FERF9OT0RFKHRlbXBsYXRlUHJlLCB0
ZW1wbGF0ZVBvc3QsIHR5cGVQYXJhbXMsIHZhbHVlUGFyYW1zQ29tbWEsIHZhbHVlUGFyYW1zLCB2
YWx1ZUFyZ3MpIFwKLSAgICB0ZW1wbGF0ZVByZSB0eXBlUGFyYW1zIHRlbXBsYXRlUG9zdCBOb2Rl
SW5kZXggYWRkTm9kZShSZWZDaGlsZHJlbk1vZGUgcmVmQ2hpbGRyZW5Nb2RlLCBSZWZOb2RlTW9k
ZSByZWZOb2RlTW9kZSwgU3BlY3VsYXRlZFR5cGUgdHlwZSB2YWx1ZVBhcmFtc0NvbW1hIHZhbHVl
UGFyYW1zKSBcCisgICAgdGVtcGxhdGVQcmUgdHlwZVBhcmFtcyB0ZW1wbGF0ZVBvc3QgTm9kZSog
YWRkTm9kZShSZWZDaGlsZHJlbk1vZGUgcmVmQ2hpbGRyZW5Nb2RlLCBSZWZOb2RlTW9kZSByZWZO
b2RlTW9kZSwgU3BlY3VsYXRlZFR5cGUgdHlwZSB2YWx1ZVBhcmFtc0NvbW1hIHZhbHVlUGFyYW1z
KSBcCiAgICAgeyBcCi0gICAgICAgIE5vZGUgbm9kZSA9IE5vZGUodmFsdWVBcmdzKTsgXAotICAg
ICAgICBub2RlLnByZWRpY3QodHlwZSk7IFwKLSAgICAgICAgaWYgKG5vZGUuZmxhZ3MoKSAmIE5v
ZGVNdXN0R2VuZXJhdGUpIFwKLSAgICAgICAgICAgIG5vZGUucmVmKCk7IFwKKyAgICAgICAgTm9k
ZSogbm9kZSA9IG5ldyAobV9hbGxvY2F0b3IpIE5vZGUodmFsdWVBcmdzKTsgXAorICAgICAgICBu
b2RlLT5wcmVkaWN0KHR5cGUpOyBcCisgICAgICAgIGlmIChub2RlLT5mbGFncygpICYgTm9kZU11
c3RHZW5lcmF0ZSkgXAorICAgICAgICAgICAgbm9kZS0+cmVmKCk7IFwKICAgICAgICAgaWYgKHJl
Zk5vZGVNb2RlID09IFJlZk5vZGUpIFwKLSAgICAgICAgICAgIG5vZGUucmVmKCk7IFwKLSAgICAg
ICAgTm9kZUluZGV4IHJlc3VsdCA9IHNpemUoKTsgXAotICAgICAgICBhcHBlbmQobm9kZSk7IFwK
KyAgICAgICAgICAgIG5vZGUtPnJlZigpOyBcCiAgICAgICAgIGlmIChyZWZDaGlsZHJlbk1vZGUg
PT0gUmVmQ2hpbGRyZW4pIFwKLSAgICAgICAgICAgIHJlZkNoaWxkcmVuKHJlc3VsdCk7IFwKLSAg
ICAgICAgcmV0dXJuIHJlc3VsdDsgXAorICAgICAgICAgICAgcmVmQ2hpbGRyZW4obm9kZSk7IFwK
KyAgICAgICAgcmV0dXJuIG5vZGU7IFwKICAgICB9CiAgICAgREZHX1ZBUklBRElDX1RFTVBMQVRF
X0ZVTkNUSU9OKERGR19ERUZJTkVfQUREX05PREUpCiAjdW5kZWYgREZHX0RFRklORV9BRERfTk9E
RQpAQCAtMjA0LDE0ICsxODUsMTQgQEAgcHVibGljOgogICAgIC8vIHJlZmVyZW5jZSBjb3VudHMg
YWNjb3JkaW5nIHRvIHJlYWNoYWJpbGl0eS4KICAgICB2b2lkIGNvbGxlY3RHYXJiYWdlKCk7CiAg
ICAgCi0gICAgdm9pZCBjb252ZXJ0VG9Db25zdGFudChOb2RlSW5kZXggbm9kZUluZGV4LCB1bnNp
Z25lZCBjb25zdGFudE51bWJlcikKKyAgICB2b2lkIGNvbnZlcnRUb0NvbnN0YW50KE5vZGUqIG5v
ZGUsIHVuc2lnbmVkIGNvbnN0YW50TnVtYmVyKQogICAgIHsKLSAgICAgICAgYXQobm9kZUluZGV4
KS5jb252ZXJ0VG9Db25zdGFudChjb25zdGFudE51bWJlcik7CisgICAgICAgIG5vZGUtPmNvbnZl
cnRUb0NvbnN0YW50KGNvbnN0YW50TnVtYmVyKTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBjb252
ZXJ0VG9Db25zdGFudChOb2RlSW5kZXggbm9kZUluZGV4LCBKU1ZhbHVlIHZhbHVlKQorICAgIHZv
aWQgY29udmVydFRvQ29uc3RhbnQoTm9kZSogbm9kZSwgSlNWYWx1ZSB2YWx1ZSkKICAgICB7Ci0g
ICAgICAgIGNvbnZlcnRUb0NvbnN0YW50KG5vZGVJbmRleCwgbV9jb2RlQmxvY2stPmFkZE9yRmlu
ZENvbnN0YW50KHZhbHVlKSk7CisgICAgICAgIGNvbnZlcnRUb0NvbnN0YW50KG5vZGUsIG1fY29k
ZUJsb2NrLT5hZGRPckZpbmRDb25zdGFudCh2YWx1ZSkpOwogICAgIH0KIAogICAgIC8vIENvZGVC
bG9jayBpcyBvcHRpb25hbCwgYnV0IG1heSBhbGxvdyBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHRv
IGJlIGR1bXBlZCAoZS5nLiBJZGVudGlmaWVyIG5hbWVzKS4KQEAgLTIxOSwxMjUgKzIwMCwxMjUg
QEAgcHVibGljOgogICAgIGVudW0gUGhpTm9kZUR1bXBNb2RlIHsgRHVtcExpdmVQaGlzT25seSwg
RHVtcEFsbFBoaXMgfTsKICAgICB2b2lkIGR1bXBCbG9ja0hlYWRlcihQcmludFN0cmVhbSYsIGNv
bnN0IGNoYXIqIHByZWZpeCwgQmxvY2tJbmRleCwgUGhpTm9kZUR1bXBNb2RlKTsKICAgICB2b2lk
IGR1bXAoUHJpbnRTdHJlYW0mLCBFZGdlKTsKLSAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mLCBj
b25zdCBjaGFyKiBwcmVmaXgsIE5vZGVJbmRleCk7Ci0gICAgc3RhdGljIGludCBhbW91bnRPZk5v
ZGVXaGl0ZVNwYWNlKE5vZGUmKTsKLSAgICBzdGF0aWMgdm9pZCBwcmludE5vZGVXaGl0ZVNwYWNl
KFByaW50U3RyZWFtJiwgTm9kZSYpOworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYsIGNvbnN0
IGNoYXIqIHByZWZpeCwgTm9kZSopOworICAgIHN0YXRpYyBpbnQgYW1vdW50T2ZOb2RlV2hpdGVT
cGFjZShOb2RlKik7CisgICAgc3RhdGljIHZvaWQgcHJpbnROb2RlV2hpdGVTcGFjZShQcmludFN0
cmVhbSYsIE5vZGUqKTsKIAogICAgIC8vIER1bXAgdGhlIGNvZGUgb3JpZ2luIG9mIHRoZSBnaXZl
biBub2RlIGFzIGEgZGlmZiBmcm9tIHRoZSBjb2RlIG9yaWdpbiBvZiB0aGUKICAgICAvLyBwcmVj
ZWRpbmcgbm9kZS4gUmV0dXJucyB0cnVlIGlmIGFueXRoaW5nIHdhcyBwcmludGVkLgotICAgIGJv
b2wgZHVtcENvZGVPcmlnaW4oUHJpbnRTdHJlYW0mLCBjb25zdCBjaGFyKiBwcmVmaXgsIE5vZGVJ
bmRleCwgTm9kZUluZGV4KTsKKyAgICBib29sIGR1bXBDb2RlT3JpZ2luKFByaW50U3RyZWFtJiwg
Y29uc3QgY2hhciogcHJlZml4LCBOb2RlKiBwcmV2aW91c05vZGUsIE5vZGUqIGN1cnJlbnROb2Rl
KTsKIAogICAgIEJsb2NrSW5kZXggYmxvY2tJbmRleEZvckJ5dGVjb2RlT2Zmc2V0KFZlY3RvcjxC
bG9ja0luZGV4PiYgYmxvY2tzLCB1bnNpZ25lZCBieXRlY29kZUJlZ2luKTsKIAotICAgIFNwZWN1
bGF0ZWRUeXBlIGdldEpTQ29uc3RhbnRTcGVjdWxhdGlvbihOb2RlJiBub2RlKQorICAgIFNwZWN1
bGF0ZWRUeXBlIGdldEpTQ29uc3RhbnRTcGVjdWxhdGlvbihOb2RlKiBub2RlKQogICAgIHsKLSAg
ICAgICAgcmV0dXJuIHNwZWN1bGF0aW9uRnJvbVZhbHVlKG5vZGUudmFsdWVPZkpTQ29uc3RhbnQo
bV9jb2RlQmxvY2spKTsKKyAgICAgICAgcmV0dXJuIHNwZWN1bGF0aW9uRnJvbVZhbHVlKG5vZGUt
PnZhbHVlT2ZKU0NvbnN0YW50KG1fY29kZUJsb2NrKSk7CiAgICAgfQogICAgIAotICAgIEFkZFNw
ZWN1bGF0aW9uTW9kZSBhZGRTcGVjdWxhdGlvbk1vZGUoTm9kZSYgYWRkLCBib29sIGxlZnRTaG91
bGRTcGVjdWxhdGVJbnRlZ2VyLCBib29sIHJpZ2h0U2hvdWxkU3BlY3VsYXRlSW50ZWdlcikKKyAg
ICBBZGRTcGVjdWxhdGlvbk1vZGUgYWRkU3BlY3VsYXRpb25Nb2RlKE5vZGUqIGFkZCwgYm9vbCBs
ZWZ0U2hvdWxkU3BlY3VsYXRlSW50ZWdlciwgYm9vbCByaWdodFNob3VsZFNwZWN1bGF0ZUludGVn
ZXIpCiAgICAgewotICAgICAgICBBU1NFUlQoYWRkLm9wKCkgPT0gVmFsdWVBZGQgfHwgYWRkLm9w
KCkgPT0gQXJpdGhBZGQgfHwgYWRkLm9wKCkgPT0gQXJpdGhTdWIpOworICAgICAgICBBU1NFUlQo
YWRkLT5vcCgpID09IFZhbHVlQWRkIHx8IGFkZC0+b3AoKSA9PSBBcml0aEFkZCB8fCBhZGQtPm9w
KCkgPT0gQXJpdGhTdWIpOwogICAgICAgICAKLSAgICAgICAgTm9kZSYgbGVmdCA9IGF0KGFkZC5j
aGlsZDEoKSk7Ci0gICAgICAgIE5vZGUmIHJpZ2h0ID0gYXQoYWRkLmNoaWxkMigpKTsKKyAgICAg
ICAgTm9kZSogbGVmdCA9IGFkZC0+Y2hpbGQxKCkubm9kZSgpOworICAgICAgICBOb2RlKiByaWdo
dCA9IGFkZC0+Y2hpbGQyKCkubm9kZSgpOwogICAgICAgICAKLSAgICAgICAgaWYgKGxlZnQuaGFz
Q29uc3RhbnQoKSkKKyAgICAgICAgaWYgKGxlZnQtPmhhc0NvbnN0YW50KCkpCiAgICAgICAgICAg
ICByZXR1cm4gYWRkSW1tZWRpYXRlU2hvdWxkU3BlY3VsYXRlSW50ZWdlcihhZGQsIHJpZ2h0U2hv
dWxkU3BlY3VsYXRlSW50ZWdlciwgbGVmdCk7Ci0gICAgICAgIGlmIChyaWdodC5oYXNDb25zdGFu
dCgpKQorICAgICAgICBpZiAocmlnaHQtPmhhc0NvbnN0YW50KCkpCiAgICAgICAgICAgICByZXR1
cm4gYWRkSW1tZWRpYXRlU2hvdWxkU3BlY3VsYXRlSW50ZWdlcihhZGQsIGxlZnRTaG91bGRTcGVj
dWxhdGVJbnRlZ2VyLCByaWdodCk7CiAgICAgICAgIAotICAgICAgICByZXR1cm4gKGxlZnRTaG91
bGRTcGVjdWxhdGVJbnRlZ2VyICYmIHJpZ2h0U2hvdWxkU3BlY3VsYXRlSW50ZWdlciAmJiBhZGQu
Y2FuU3BlY3VsYXRlSW50ZWdlcigpKSA/IFNwZWN1bGF0ZUludGVnZXIgOiBEb250U3BlY3VsYXRl
SW50ZWdlcjsKKyAgICAgICAgcmV0dXJuIChsZWZ0U2hvdWxkU3BlY3VsYXRlSW50ZWdlciAmJiBy
aWdodFNob3VsZFNwZWN1bGF0ZUludGVnZXIgJiYgYWRkLT5jYW5TcGVjdWxhdGVJbnRlZ2VyKCkp
ID8gU3BlY3VsYXRlSW50ZWdlciA6IERvbnRTcGVjdWxhdGVJbnRlZ2VyOwogICAgIH0KICAgICAK
LSAgICBBZGRTcGVjdWxhdGlvbk1vZGUgdmFsdWVBZGRTcGVjdWxhdGlvbk1vZGUoTm9kZSYgYWRk
KQorICAgIEFkZFNwZWN1bGF0aW9uTW9kZSB2YWx1ZUFkZFNwZWN1bGF0aW9uTW9kZShOb2RlKiBh
ZGQpCiAgICAgewotICAgICAgICByZXR1cm4gYWRkU3BlY3VsYXRpb25Nb2RlKGFkZCwgYXQoYWRk
LmNoaWxkMSgpKS5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyRXhwZWN0aW5nRGVmaW5lZCgpLCBhdChh
ZGQuY2hpbGQyKCkpLnNob3VsZFNwZWN1bGF0ZUludGVnZXJFeHBlY3RpbmdEZWZpbmVkKCkpOwor
ICAgICAgICByZXR1cm4gYWRkU3BlY3VsYXRpb25Nb2RlKGFkZCwgYWRkLT5jaGlsZDEoKS0+c2hv
dWxkU3BlY3VsYXRlSW50ZWdlckV4cGVjdGluZ0RlZmluZWQoKSwgYWRkLT5jaGlsZDIoKS0+c2hv
dWxkU3BlY3VsYXRlSW50ZWdlckV4cGVjdGluZ0RlZmluZWQoKSk7CiAgICAgfQogICAgIAotICAg
IEFkZFNwZWN1bGF0aW9uTW9kZSBhcml0aEFkZFNwZWN1bGF0aW9uTW9kZShOb2RlJiBhZGQpCisg
ICAgQWRkU3BlY3VsYXRpb25Nb2RlIGFyaXRoQWRkU3BlY3VsYXRpb25Nb2RlKE5vZGUqIGFkZCkK
ICAgICB7Ci0gICAgICAgIHJldHVybiBhZGRTcGVjdWxhdGlvbk1vZGUoYWRkLCBhdChhZGQuY2hp
bGQxKCkpLnNob3VsZFNwZWN1bGF0ZUludGVnZXJGb3JBcml0aG1ldGljKCksIGF0KGFkZC5jaGls
ZDIoKSkuc2hvdWxkU3BlY3VsYXRlSW50ZWdlckZvckFyaXRobWV0aWMoKSk7CisgICAgICAgIHJl
dHVybiBhZGRTcGVjdWxhdGlvbk1vZGUoYWRkLCBhZGQtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxh
dGVJbnRlZ2VyRm9yQXJpdGhtZXRpYygpLCBhZGQtPmNoaWxkMigpLT5zaG91bGRTcGVjdWxhdGVJ
bnRlZ2VyRm9yQXJpdGhtZXRpYygpKTsKICAgICB9CiAgICAgCi0gICAgQWRkU3BlY3VsYXRpb25N
b2RlIGFkZFNwZWN1bGF0aW9uTW9kZShOb2RlJiBhZGQpCisgICAgQWRkU3BlY3VsYXRpb25Nb2Rl
IGFkZFNwZWN1bGF0aW9uTW9kZShOb2RlKiBhZGQpCiAgICAgewotICAgICAgICBpZiAoYWRkLm9w
KCkgPT0gVmFsdWVBZGQpCisgICAgICAgIGlmIChhZGQtPm9wKCkgPT0gVmFsdWVBZGQpCiAgICAg
ICAgICAgICByZXR1cm4gdmFsdWVBZGRTcGVjdWxhdGlvbk1vZGUoYWRkKTsKICAgICAgICAgCiAg
ICAgICAgIHJldHVybiBhcml0aEFkZFNwZWN1bGF0aW9uTW9kZShhZGQpOwogICAgIH0KICAgICAK
LSAgICBib29sIGFkZFNob3VsZFNwZWN1bGF0ZUludGVnZXIoTm9kZSYgYWRkKQorICAgIGJvb2wg
YWRkU2hvdWxkU3BlY3VsYXRlSW50ZWdlcihOb2RlKiBhZGQpCiAgICAgewogICAgICAgICByZXR1
cm4gYWRkU3BlY3VsYXRpb25Nb2RlKGFkZCkgIT0gRG9udFNwZWN1bGF0ZUludGVnZXI7CiAgICAg
fQogICAgIAotICAgIGJvb2wgbXVsU2hvdWxkU3BlY3VsYXRlSW50ZWdlcihOb2RlJiBtdWwpCisg
ICAgYm9vbCBtdWxTaG91bGRTcGVjdWxhdGVJbnRlZ2VyKE5vZGUqIG11bCkKICAgICB7Ci0gICAg
ICAgIEFTU0VSVChtdWwub3AoKSA9PSBBcml0aE11bCk7CisgICAgICAgIEFTU0VSVChtdWwtPm9w
KCkgPT0gQXJpdGhNdWwpOwogICAgICAgICAKLSAgICAgICAgTm9kZSYgbGVmdCA9IGF0KG11bC5j
aGlsZDEoKSk7Ci0gICAgICAgIE5vZGUmIHJpZ2h0ID0gYXQobXVsLmNoaWxkMigpKTsKKyAgICAg
ICAgTm9kZSogbGVmdCA9IG11bC0+Y2hpbGQxKCkubm9kZSgpOworICAgICAgICBOb2RlKiByaWdo
dCA9IG11bC0+Y2hpbGQyKCkubm9kZSgpOwogICAgICAgICAKICAgICAgICAgcmV0dXJuIE5vZGU6
OnNob3VsZFNwZWN1bGF0ZUludGVnZXJGb3JBcml0aG1ldGljKGxlZnQsIHJpZ2h0KSAmJiBtdWwu
Y2FuU3BlY3VsYXRlSW50ZWdlcigpOwogICAgIH0KICAgICAKLSAgICBib29sIG5lZ2F0ZVNob3Vs
ZFNwZWN1bGF0ZUludGVnZXIoTm9kZSYgbmVnYXRlKQorICAgIGJvb2wgbmVnYXRlU2hvdWxkU3Bl
Y3VsYXRlSW50ZWdlcihOb2RlKiBuZWdhdGUpCiAgICAgewotICAgICAgICBBU1NFUlQobmVnYXRl
Lm9wKCkgPT0gQXJpdGhOZWdhdGUpOwotICAgICAgICByZXR1cm4gYXQobmVnYXRlLmNoaWxkMSgp
KS5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyRm9yQXJpdGhtZXRpYygpICYmIG5lZ2F0ZS5jYW5TcGVj
dWxhdGVJbnRlZ2VyKCk7CisgICAgICAgIEFTU0VSVChuZWdhdGUtPm9wKCkgPT0gQXJpdGhOZWdh
dGUpOworICAgICAgICByZXR1cm4gbmVnYXRlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlSW50
ZWdlckZvckFyaXRobWV0aWMoKSAmJiBuZWdhdGUtPmNhblNwZWN1bGF0ZUludGVnZXIoKTsKICAg
ICB9CiAgICAgCi0gICAgYm9vbCBhZGRTaG91bGRTcGVjdWxhdGVJbnRlZ2VyKE5vZGVJbmRleCBu
b2RlSW5kZXgpCisgICAgYm9vbCBhZGRTaG91bGRTcGVjdWxhdGVJbnRlZ2VyKE5vZGUqIG5vZGUp
CiAgICAgewotICAgICAgICByZXR1cm4gYWRkU2hvdWxkU3BlY3VsYXRlSW50ZWdlcihhdChub2Rl
SW5kZXgpKTsKKyAgICAgICAgcmV0dXJuIGFkZFNob3VsZFNwZWN1bGF0ZUludGVnZXIobm9kZSk7
CiAgICAgfQogICAgIAogICAgIC8vIEhlbHBlciBtZXRob2RzIHRvIGNoZWNrIG5vZGVzIGZvciBj
b25zdGFudHMuCi0gICAgYm9vbCBpc0NvbnN0YW50KE5vZGVJbmRleCBub2RlSW5kZXgpCisgICAg
Ym9vbCBpc0NvbnN0YW50KE5vZGUqIG5vZGUpCiAgICAgewotICAgICAgICByZXR1cm4gYXQobm9k
ZUluZGV4KS5oYXNDb25zdGFudCgpOworICAgICAgICByZXR1cm4gbm9kZS0+aGFzQ29uc3RhbnQo
KTsKICAgICB9Ci0gICAgYm9vbCBpc0pTQ29uc3RhbnQoTm9kZUluZGV4IG5vZGVJbmRleCkKKyAg
ICBib29sIGlzSlNDb25zdGFudChOb2RlKiBub2RlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGF0
KG5vZGVJbmRleCkuaGFzQ29uc3RhbnQoKTsKKyAgICAgICAgcmV0dXJuIG5vZGUtPmhhc0NvbnN0
YW50KCk7CiAgICAgfQotICAgIGJvb2wgaXNJbnQzMkNvbnN0YW50KE5vZGVJbmRleCBub2RlSW5k
ZXgpCisgICAgYm9vbCBpc0ludDMyQ29uc3RhbnQoTm9kZSogbm9kZSkKICAgICB7Ci0gICAgICAg
IHJldHVybiBhdChub2RlSW5kZXgpLmlzSW50MzJDb25zdGFudChtX2NvZGVCbG9jayk7CisgICAg
ICAgIHJldHVybiBub2RlLT5pc0ludDMyQ29uc3RhbnQobV9jb2RlQmxvY2spOwogICAgIH0KLSAg
ICBib29sIGlzRG91YmxlQ29uc3RhbnQoTm9kZUluZGV4IG5vZGVJbmRleCkKKyAgICBib29sIGlz
RG91YmxlQ29uc3RhbnQoTm9kZSogbm9kZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBhdChub2Rl
SW5kZXgpLmlzRG91YmxlQ29uc3RhbnQobV9jb2RlQmxvY2spOworICAgICAgICByZXR1cm4gbm9k
ZS0+aXNEb3VibGVDb25zdGFudChtX2NvZGVCbG9jayk7CiAgICAgfQotICAgIGJvb2wgaXNOdW1i
ZXJDb25zdGFudChOb2RlSW5kZXggbm9kZUluZGV4KQorICAgIGJvb2wgaXNOdW1iZXJDb25zdGFu
dChOb2RlKiBub2RlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGF0KG5vZGVJbmRleCkuaXNOdW1i
ZXJDb25zdGFudChtX2NvZGVCbG9jayk7CisgICAgICAgIHJldHVybiBub2RlLT5pc051bWJlckNv
bnN0YW50KG1fY29kZUJsb2NrKTsKICAgICB9Ci0gICAgYm9vbCBpc0Jvb2xlYW5Db25zdGFudChO
b2RlSW5kZXggbm9kZUluZGV4KQorICAgIGJvb2wgaXNCb29sZWFuQ29uc3RhbnQoTm9kZSogbm9k
ZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBhdChub2RlSW5kZXgpLmlzQm9vbGVhbkNvbnN0YW50
KG1fY29kZUJsb2NrKTsKKyAgICAgICAgcmV0dXJuIG5vZGUtPmlzQm9vbGVhbkNvbnN0YW50KG1f
Y29kZUJsb2NrKTsKICAgICB9Ci0gICAgYm9vbCBpc0NlbGxDb25zdGFudChOb2RlSW5kZXggbm9k
ZUluZGV4KQorICAgIGJvb2wgaXNDZWxsQ29uc3RhbnQoTm9kZSogbm9kZSkKICAgICB7Ci0gICAg
ICAgIGlmICghaXNKU0NvbnN0YW50KG5vZGVJbmRleCkpCisgICAgICAgIGlmICghaXNKU0NvbnN0
YW50KG5vZGUpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBKU1ZhbHVlIHZh
bHVlID0gdmFsdWVPZkpTQ29uc3RhbnQobm9kZUluZGV4KTsKKyAgICAgICAgSlNWYWx1ZSB2YWx1
ZSA9IHZhbHVlT2ZKU0NvbnN0YW50KG5vZGUpOwogICAgICAgICByZXR1cm4gdmFsdWUuaXNDZWxs
KCkgJiYgISF2YWx1ZTsKICAgICB9Ci0gICAgYm9vbCBpc0Z1bmN0aW9uQ29uc3RhbnQoTm9kZUlu
ZGV4IG5vZGVJbmRleCkKKyAgICBib29sIGlzRnVuY3Rpb25Db25zdGFudChOb2RlKiBub2RlKQog
ICAgIHsKLSAgICAgICAgaWYgKCFpc0pTQ29uc3RhbnQobm9kZUluZGV4KSkKKyAgICAgICAgaWYg
KCFpc0pTQ29uc3RhbnQobm9kZSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAg
IGlmICghZ2V0SlNGdW5jdGlvbih2YWx1ZU9mSlNDb25zdGFudChub2RlSW5kZXgpKSkKKyAgICAg
ICAgaWYgKCFnZXRKU0Z1bmN0aW9uKHZhbHVlT2ZKU0NvbnN0YW50KG5vZGUpKSkKICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQotICAgIGJvb2wg
aXNJbnRlcm5hbEZ1bmN0aW9uQ29uc3RhbnQoTm9kZUluZGV4IG5vZGVJbmRleCkKKyAgICBib29s
IGlzSW50ZXJuYWxGdW5jdGlvbkNvbnN0YW50KE5vZGUqIG5vZGUpCiAgICAgewotICAgICAgICBp
ZiAoIWlzSlNDb25zdGFudChub2RlSW5kZXgpKQorICAgICAgICBpZiAoIWlzSlNDb25zdGFudChu
b2RlKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9
IHZhbHVlT2ZKU0NvbnN0YW50KG5vZGVJbmRleCk7CisgICAgICAgIEpTVmFsdWUgdmFsdWUgPSB2
YWx1ZU9mSlNDb25zdGFudChub2RlKTsKICAgICAgICAgaWYgKCF2YWx1ZS5pc0NlbGwoKSB8fCAh
dmFsdWUpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIEpTQ2VsbCogY2VsbCA9
IHZhbHVlLmFzQ2VsbCgpOwpAQCAtMzQ2LDI1ICszMjcsMjUgQEAgcHVibGljOgogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgLy8gSGVscGVyIG1ldGhvZHMgZ2V0IGNvbnN0YW50IHZh
bHVlcyBmcm9tIG5vZGVzLgotICAgIEpTVmFsdWUgdmFsdWVPZkpTQ29uc3RhbnQoTm9kZUluZGV4
IG5vZGVJbmRleCkKKyAgICBKU1ZhbHVlIHZhbHVlT2ZKU0NvbnN0YW50KE5vZGUqIG5vZGUpCiAg
ICAgewotICAgICAgICByZXR1cm4gYXQobm9kZUluZGV4KS52YWx1ZU9mSlNDb25zdGFudChtX2Nv
ZGVCbG9jayk7CisgICAgICAgIHJldHVybiBub2RlLT52YWx1ZU9mSlNDb25zdGFudChtX2NvZGVC
bG9jayk7CiAgICAgfQotICAgIGludDMyX3QgdmFsdWVPZkludDMyQ29uc3RhbnQoTm9kZUluZGV4
IG5vZGVJbmRleCkKKyAgICBpbnQzMl90IHZhbHVlT2ZJbnQzMkNvbnN0YW50KE5vZGUqIG5vZGUp
CiAgICAgewotICAgICAgICByZXR1cm4gdmFsdWVPZkpTQ29uc3RhbnQobm9kZUluZGV4KS5hc0lu
dDMyKCk7CisgICAgICAgIHJldHVybiB2YWx1ZU9mSlNDb25zdGFudChub2RlKS5hc0ludDMyKCk7
CiAgICAgfQotICAgIGRvdWJsZSB2YWx1ZU9mTnVtYmVyQ29uc3RhbnQoTm9kZUluZGV4IG5vZGVJ
bmRleCkKKyAgICBkb3VibGUgdmFsdWVPZk51bWJlckNvbnN0YW50KE5vZGUqIG5vZGUpCiAgICAg
ewotICAgICAgICByZXR1cm4gdmFsdWVPZkpTQ29uc3RhbnQobm9kZUluZGV4KS5hc051bWJlcigp
OworICAgICAgICByZXR1cm4gdmFsdWVPZkpTQ29uc3RhbnQobm9kZSkuYXNOdW1iZXIoKTsKICAg
ICB9Ci0gICAgYm9vbCB2YWx1ZU9mQm9vbGVhbkNvbnN0YW50KE5vZGVJbmRleCBub2RlSW5kZXgp
CisgICAgYm9vbCB2YWx1ZU9mQm9vbGVhbkNvbnN0YW50KE5vZGUqIG5vZGUpCiAgICAgewotICAg
ICAgICByZXR1cm4gdmFsdWVPZkpTQ29uc3RhbnQobm9kZUluZGV4KS5hc0Jvb2xlYW4oKTsKKyAg
ICAgICAgcmV0dXJuIHZhbHVlT2ZKU0NvbnN0YW50KG5vZGUpLmFzQm9vbGVhbigpOwogICAgIH0K
LSAgICBKU0Z1bmN0aW9uKiB2YWx1ZU9mRnVuY3Rpb25Db25zdGFudChOb2RlSW5kZXggbm9kZUlu
ZGV4KQorICAgIEpTRnVuY3Rpb24qIHZhbHVlT2ZGdW5jdGlvbkNvbnN0YW50KE5vZGUqIG5vZGUp
CiAgICAgewotICAgICAgICBKU0NlbGwqIGZ1bmN0aW9uID0gZ2V0SlNGdW5jdGlvbih2YWx1ZU9m
SlNDb25zdGFudChub2RlSW5kZXgpKTsKKyAgICAgICAgSlNDZWxsKiBmdW5jdGlvbiA9IGdldEpT
RnVuY3Rpb24odmFsdWVPZkpTQ29uc3RhbnQobm9kZSkpOwogICAgICAgICBBU1NFUlQoZnVuY3Rp
b24pOwogICAgICAgICByZXR1cm4ganNDYXN0PEpTRnVuY3Rpb24qPihmdW5jdGlvbik7CiAgICAg
fQpAQCAtNDM5LDQ1ICs0MjAsNDMgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9jb2RlQmxv
Y2stPnVuY2hlY2tlZEFjdGl2YXRpb25SZWdpc3RlcigpOwogICAgIH0KICAgICAKLSAgICBWYWx1
ZVByb2ZpbGUqIHZhbHVlUHJvZmlsZUZvcihOb2RlSW5kZXggbm9kZUluZGV4KQorICAgIFZhbHVl
UHJvZmlsZSogdmFsdWVQcm9maWxlRm9yKE5vZGUqIG5vZGUpCiAgICAgewotICAgICAgICBpZiAo
bm9kZUluZGV4ID09IE5vTm9kZSkKKyAgICAgICAgaWYgKCFub2RlKQogICAgICAgICAgICAgcmV0
dXJuIDA7CiAgICAgICAgIAotICAgICAgICBOb2RlJiBub2RlID0gYXQobm9kZUluZGV4KTsKLSAg
ICAgICAgQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrID0gYmFzZWxpbmVDb2RlQmxvY2tGb3Iobm9k
ZS5jb2RlT3JpZ2luKTsKKyAgICAgICAgQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrID0gYmFzZWxp
bmVDb2RlQmxvY2tGb3Iobm9kZS0+Y29kZU9yaWdpbik7CiAgICAgICAgIAotICAgICAgICBpZiAo
bm9kZS5oYXNMb2NhbCgpKSB7Ci0gICAgICAgICAgICBpZiAoIW9wZXJhbmRJc0FyZ3VtZW50KG5v
ZGUubG9jYWwoKSkpCisgICAgICAgIGlmIChub2RlLT5oYXNMb2NhbCgpKSB7CisgICAgICAgICAg
ICBpZiAoIW9wZXJhbmRJc0FyZ3VtZW50KG5vZGUtPmxvY2FsKCkpKQogICAgICAgICAgICAgICAg
IHJldHVybiAwOwotICAgICAgICAgICAgaW50IGFyZ3VtZW50ID0gb3BlcmFuZFRvQXJndW1lbnQo
bm9kZS5sb2NhbCgpKTsKLSAgICAgICAgICAgIGlmIChub2RlLnZhcmlhYmxlQWNjZXNzRGF0YSgp
ICE9IGF0KG1fYXJndW1lbnRzW2FyZ3VtZW50XSkudmFyaWFibGVBY2Nlc3NEYXRhKCkpCisgICAg
ICAgICAgICBpbnQgYXJndW1lbnQgPSBvcGVyYW5kVG9Bcmd1bWVudChub2RlLT5sb2NhbCgpKTsK
KyAgICAgICAgICAgIGlmIChub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKSAhPSBtX2FyZ3VtZW50
c1thcmd1bWVudF0tPnZhcmlhYmxlQWNjZXNzRGF0YSgpKQogICAgICAgICAgICAgICAgIHJldHVy
biAwOwogICAgICAgICAgICAgcmV0dXJuIHByb2ZpbGVkQmxvY2stPnZhbHVlUHJvZmlsZUZvckFy
Z3VtZW50KGFyZ3VtZW50KTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgaWYgKG5vZGUu
aGFzSGVhcFByZWRpY3Rpb24oKSkKLSAgICAgICAgICAgIHJldHVybiBwcm9maWxlZEJsb2NrLT52
YWx1ZVByb2ZpbGVGb3JCeXRlY29kZU9mZnNldChub2RlLmNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRl
eEZvclZhbHVlUHJvZmlsZSgpKTsKKyAgICAgICAgaWYgKG5vZGUtPmhhc0hlYXBQcmVkaWN0aW9u
KCkpCisgICAgICAgICAgICByZXR1cm4gcHJvZmlsZWRCbG9jay0+dmFsdWVQcm9maWxlRm9yQnl0
ZWNvZGVPZmZzZXQobm9kZS0+Y29kZU9yaWdpbi5ieXRlY29kZUluZGV4Rm9yVmFsdWVQcm9maWxl
KCkpOwogICAgICAgICAKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogICAgIAotICAgIE1ldGhv
ZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUgbWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZUZvcihO
b2RlSW5kZXggbm9kZUluZGV4KQorICAgIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUgbWV0
aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZUZvcihOb2RlKiBub2RlKQogICAgIHsKLSAgICAgICAg
aWYgKG5vZGVJbmRleCA9PSBOb05vZGUpCisgICAgICAgIGlmICghbm9kZSkKICAgICAgICAgICAg
IHJldHVybiBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlKCk7CiAgICAgICAgIAotICAgICAg
ICBOb2RlJiBub2RlID0gYXQobm9kZUluZGV4KTsKLSAgICAgICAgQ29kZUJsb2NrKiBwcm9maWxl
ZEJsb2NrID0gYmFzZWxpbmVDb2RlQmxvY2tGb3Iobm9kZS5jb2RlT3JpZ2luKTsKKyAgICAgICAg
Q29kZUJsb2NrKiBwcm9maWxlZEJsb2NrID0gYmFzZWxpbmVDb2RlQmxvY2tGb3Iobm9kZS0+Y29k
ZU9yaWdpbik7CiAgICAgICAgIAotICAgICAgICBpZiAobm9kZS5vcCgpID09IEdldExvY2FsKSB7
CisgICAgICAgIGlmIChub2RlLT5vcCgpID09IEdldExvY2FsKSB7CiAgICAgICAgICAgICByZXR1
cm4gTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZTo6ZnJvbUxhenlPcGVyYW5kKAogICAgICAg
ICAgICAgICAgIHByb2ZpbGVkQmxvY2ssCiAgICAgICAgICAgICAgICAgTGF6eU9wZXJhbmRWYWx1
ZVByb2ZpbGVLZXkoCi0gICAgICAgICAgICAgICAgICAgIG5vZGUuY29kZU9yaWdpbi5ieXRlY29k
ZUluZGV4LCBub2RlLmxvY2FsKCkpKTsKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y29kZU9y
aWdpbi5ieXRlY29kZUluZGV4LCBub2RlLT5sb2NhbCgpKSk7CiAgICAgICAgIH0KICAgICAgICAg
Ci0gICAgICAgIHJldHVybiBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlKHZhbHVlUHJvZmls
ZUZvcihub2RlSW5kZXgpKTsKKyAgICAgICAgcmV0dXJuIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVBy
b2ZpbGUodmFsdWVQcm9maWxlRm9yKG5vZGUpKTsKICAgICB9CiAgICAgCiAgICAgYm9vbCBuZWVk
c0FjdGl2YXRpb24oKSBjb25zdApAQCAtNTAxLDIxICs0ODAsMjEgQEAgcHVibGljOgogICAgIAog
ICAgIHVuc2lnbmVkIG51bVN1Y2Nlc3NvcnMoQmFzaWNCbG9jayogYmxvY2spCiAgICAgewotICAg
ICAgICByZXR1cm4gYXQoYmxvY2stPmxhc3QoKSkubnVtU3VjY2Vzc29ycygpOworICAgICAgICBy
ZXR1cm4gYmxvY2stPmxhc3QoKS0+bnVtU3VjY2Vzc29ycygpOwogICAgIH0KICAgICBCbG9ja0lu
ZGV4IHN1Y2Nlc3NvcihCYXNpY0Jsb2NrKiBibG9jaywgdW5zaWduZWQgaW5kZXgpCiAgICAgewot
ICAgICAgICByZXR1cm4gYXQoYmxvY2stPmxhc3QoKSkuc3VjY2Vzc29yKGluZGV4KTsKKyAgICAg
ICAgcmV0dXJuIGJsb2NrLT5sYXN0KCktPnN1Y2Nlc3NvcihpbmRleCk7CiAgICAgfQogICAgIEJs
b2NrSW5kZXggc3VjY2Vzc29yRm9yQ29uZGl0aW9uKEJhc2ljQmxvY2sqIGJsb2NrLCBib29sIGNv
bmRpdGlvbikKICAgICB7Ci0gICAgICAgIHJldHVybiBhdChibG9jay0+bGFzdCgpKS5zdWNjZXNz
b3JGb3JDb25kaXRpb24oY29uZGl0aW9uKTsKKyAgICAgICAgcmV0dXJuIGJsb2NrLT5sYXN0KCkt
PnN1Y2Nlc3NvckZvckNvbmRpdGlvbihjb25kaXRpb24pOwogICAgIH0KICAgICAKLSAgICBib29s
IGlzUHJlZGljdGVkTnVtZXJpY2FsKE5vZGUmIG5vZGUpCisgICAgYm9vbCBpc1ByZWRpY3RlZE51
bWVyaWNhbChOb2RlKiBub2RlKQogICAgIHsKLSAgICAgICAgU3BlY3VsYXRlZFR5cGUgbGVmdCA9
IGF0KG5vZGUuY2hpbGQxKCkpLnByZWRpY3Rpb24oKTsKLSAgICAgICAgU3BlY3VsYXRlZFR5cGUg
cmlnaHQgPSBhdChub2RlLmNoaWxkMigpKS5wcmVkaWN0aW9uKCk7CisgICAgICAgIFNwZWN1bGF0
ZWRUeXBlIGxlZnQgPSBub2RlLT5jaGlsZDEoKS0+cHJlZGljdGlvbigpOworICAgICAgICBTcGVj
dWxhdGVkVHlwZSByaWdodCA9IG5vZGUtPmNoaWxkMigpLT5wcmVkaWN0aW9uKCk7CiAgICAgICAg
IHJldHVybiBpc051bWJlclNwZWN1bGF0aW9uKGxlZnQpICYmIGlzTnVtYmVyU3BlY3VsYXRpb24o
cmlnaHQpOwogICAgIH0KICAgICAKQEAgLTUyNSwyMyArNTA0LDIzIEBAIHB1YmxpYzoKICAgICAv
LyAtIFB1dEJ5VmFsIGRlZmluaXRlbHkgY2hhbmdlcyB0aGUgYXJyYXkgaXQgc3RvcmVzIHRvLCBh
bmQgbWF5IGV2ZW4gY2hhbmdlIGl0cyBsZW5ndGguCiAgICAgLy8gLSBQdXRCeU9mZnNldCBkZWZp
bml0ZWx5IGNoYW5nZXMgdGhlIG9iamVjdCBpdCBzdG9yZXMgdG8uCiAgICAgLy8gLSBhbmQgc28g
b24uCi0gICAgYm9vbCBieVZhbElzUHVyZShOb2RlJiBub2RlKQorICAgIGJvb2wgYnlWYWxJc1B1
cmUoTm9kZSogbm9kZSkKICAgICB7Ci0gICAgICAgIHN3aXRjaCAobm9kZS5hcnJheU1vZGUoKS50
eXBlKCkpIHsKKyAgICAgICAgc3dpdGNoIChub2RlLT5hcnJheU1vZGUoKS50eXBlKCkpIHsKICAg
ICAgICAgY2FzZSBBcnJheTo6R2VuZXJpYzoKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICAgICAgY2FzZSBBcnJheTo6SW50MzI6CiAgICAgICAgIGNhc2UgQXJyYXk6OkRvdWJsZToKICAg
ICAgICAgY2FzZSBBcnJheTo6Q29udGlndW91czoKICAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlT
dG9yYWdlOgotICAgICAgICAgICAgcmV0dXJuICFub2RlLmFycmF5TW9kZSgpLmlzT3V0T2ZCb3Vu
ZHMoKTsKKyAgICAgICAgICAgIHJldHVybiAhbm9kZS0+YXJyYXlNb2RlKCkuaXNPdXRPZkJvdW5k
cygpOwogICAgICAgICBjYXNlIEFycmF5OjpTbG93UHV0QXJyYXlTdG9yYWdlOgotICAgICAgICAg
ICAgcmV0dXJuICFub2RlLmFycmF5TW9kZSgpLm1heVN0b3JlVG9Ib2xlKCk7CisgICAgICAgICAg
ICByZXR1cm4gIW5vZGUtPmFycmF5TW9kZSgpLm1heVN0b3JlVG9Ib2xlKCk7CiAgICAgICAgIGNh
c2UgQXJyYXk6OlN0cmluZzoKLSAgICAgICAgICAgIHJldHVybiBub2RlLm9wKCkgPT0gR2V0QnlW
YWw7CisgICAgICAgICAgICByZXR1cm4gbm9kZS0+b3AoKSA9PSBHZXRCeVZhbDsKICNpZiBVU0Uo
SlNWQUxVRTMyXzY0KQogICAgICAgICBjYXNlIEFycmF5OjpBcmd1bWVudHM6Ci0gICAgICAgICAg
ICBpZiAobm9kZS5vcCgpID09IEdldEJ5VmFsKQorICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkg
PT0gR2V0QnlWYWwpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAjZW5kaWYgLy8gVVNFKEpTVkFMVUUzMl82NCkKQEAgLTU1MCwxMyArNTI5
LDEzIEBAIHB1YmxpYzoKICAgICAgICAgfQogICAgIH0KICAgICAKLSAgICBib29sIGNsb2JiZXJz
V29ybGQoTm9kZSYgbm9kZSkKKyAgICBib29sIGNsb2JiZXJzV29ybGQoTm9kZSogbm9kZSkKICAg
ICB7Ci0gICAgICAgIGlmIChub2RlLmZsYWdzKCkgJiBOb2RlQ2xvYmJlcnNXb3JsZCkKKyAgICAg
ICAgaWYgKG5vZGUtPmZsYWdzKCkgJiBOb2RlQ2xvYmJlcnNXb3JsZCkKICAgICAgICAgICAgIHJl
dHVybiB0cnVlOwotICAgICAgICBpZiAoIShub2RlLmZsYWdzKCkgJiBOb2RlTWlnaHRDbG9iYmVy
KSkKKyAgICAgICAgaWYgKCEobm9kZS0+ZmxhZ3MoKSAmIE5vZGVNaWdodENsb2JiZXIpKQogICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBzd2l0Y2ggKG5vZGUub3AoKSkgeworICAg
ICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKICAgICAgICAgY2FzZSBWYWx1ZUFkZDoKICAgICAg
ICAgY2FzZSBDb21wYXJlTGVzczoKICAgICAgICAgY2FzZSBDb21wYXJlTGVzc0VxOgpAQCAtNTc0
LDkgKzU1Myw5IEBAIHB1YmxpYzoKICAgICAgICAgfQogICAgIH0KICAgICAKLSAgICBib29sIGNs
b2JiZXJzV29ybGQoTm9kZUluZGV4IG5vZGVJbmRleCkKKyAgICBib29sIGNsb2JiZXJzV29ybGQo
Tm9kZSogbm9kZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBjbG9iYmVyc1dvcmxkKGF0KG5vZGVJ
bmRleCkpOworICAgICAgICByZXR1cm4gY2xvYmJlcnNXb3JsZChub2RlKTsKICAgICB9CiAgICAg
CiAgICAgdm9pZCBkZXRlcm1pbmVSZWFjaGFiaWxpdHkoKTsKQEAgLTU4NCw1MiArNTYzLDU3IEBA
IHB1YmxpYzoKICAgICAKICAgICB2b2lkIHJlc2V0RXhpdFN0YXRlcygpOwogICAgIAotICAgIHVu
c2lnbmVkIHZhckFyZ051bUNoaWxkcmVuKE5vZGUmIG5vZGUpCisgICAgdW5zaWduZWQgdmFyQXJn
TnVtQ2hpbGRyZW4oTm9kZSogbm9kZSkKICAgICB7Ci0gICAgICAgIEFTU0VSVChub2RlLmZsYWdz
KCkgJiBOb2RlSGFzVmFyQXJncyk7Ci0gICAgICAgIHJldHVybiBub2RlLm51bUNoaWxkcmVuKCk7
CisgICAgICAgIEFTU0VSVChub2RlLT5mbGFncygpICYgTm9kZUhhc1ZhckFyZ3MpOworICAgICAg
ICByZXR1cm4gbm9kZS0+bnVtQ2hpbGRyZW4oKTsKICAgICB9CiAgICAgCi0gICAgdW5zaWduZWQg
bnVtQ2hpbGRyZW4oTm9kZSYgbm9kZSkKKyAgICB1bnNpZ25lZCBudW1DaGlsZHJlbihOb2RlKiBu
b2RlKQogICAgIHsKLSAgICAgICAgaWYgKG5vZGUuZmxhZ3MoKSAmIE5vZGVIYXNWYXJBcmdzKQor
ICAgICAgICBpZiAobm9kZS0+ZmxhZ3MoKSAmIE5vZGVIYXNWYXJBcmdzKQogICAgICAgICAgICAg
cmV0dXJuIHZhckFyZ051bUNoaWxkcmVuKG5vZGUpOwogICAgICAgICByZXR1cm4gQWRqYWNlbmN5
TGlzdDo6U2l6ZTsKICAgICB9CiAgICAgCi0gICAgRWRnZSYgdmFyQXJnQ2hpbGQoTm9kZSYgbm9k
ZSwgdW5zaWduZWQgaW5kZXgpCisgICAgRWRnZSYgdmFyQXJnQ2hpbGQoTm9kZSogbm9kZSwgdW5z
aWduZWQgaW5kZXgpCiAgICAgewotICAgICAgICBBU1NFUlQobm9kZS5mbGFncygpICYgTm9kZUhh
c1ZhckFyZ3MpOwotICAgICAgICByZXR1cm4gbV92YXJBcmdDaGlsZHJlbltub2RlLmZpcnN0Q2hp
bGQoKSArIGluZGV4XTsKKyAgICAgICAgQVNTRVJUKG5vZGUtPmZsYWdzKCkgJiBOb2RlSGFzVmFy
QXJncyk7CisgICAgICAgIHJldHVybiBtX3ZhckFyZ0NoaWxkcmVuW25vZGUtPmZpcnN0Q2hpbGQo
KSArIGluZGV4XTsKICAgICB9CiAgICAgCi0gICAgRWRnZSYgY2hpbGQoTm9kZSYgbm9kZSwgdW5z
aWduZWQgaW5kZXgpCisgICAgRWRnZSYgY2hpbGQoTm9kZSogbm9kZSwgdW5zaWduZWQgaW5kZXgp
CiAgICAgewotICAgICAgICBpZiAobm9kZS5mbGFncygpICYgTm9kZUhhc1ZhckFyZ3MpCisgICAg
ICAgIGlmIChub2RlLT5mbGFncygpICYgTm9kZUhhc1ZhckFyZ3MpCiAgICAgICAgICAgICByZXR1
cm4gdmFyQXJnQ2hpbGQobm9kZSwgaW5kZXgpOwotICAgICAgICByZXR1cm4gbm9kZS5jaGlsZHJl
bi5jaGlsZChpbmRleCk7CisgICAgICAgIHJldHVybiBub2RlLT5jaGlsZHJlbi5jaGlsZChpbmRl
eCk7CiAgICAgfQogICAgIAotICAgIHZvaWQgdm90ZShFZGdlIGVkZ2UsIHVuc2lnbmVkIGJhbGxv
dCkKKyAgICB2b2lkIHZvdGVOb2RlKE5vZGUqIG5vZGUsIHVuc2lnbmVkIGJhbGxvdCkKICAgICB7
Ci0gICAgICAgIHN3aXRjaCAoYXQoZWRnZSkub3AoKSkgeworICAgICAgICBzd2l0Y2ggKG5vZGUt
Pm9wKCkpIHsKICAgICAgICAgY2FzZSBWYWx1ZVRvSW50MzI6CiAgICAgICAgIGNhc2UgVUludDMy
VG9OdW1iZXI6Ci0gICAgICAgICAgICBlZGdlID0gYXQoZWRnZSkuY2hpbGQxKCk7CisgICAgICAg
ICAgICBub2RlID0gbm9kZS0+Y2hpbGQxKCkubm9kZSgpOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAK
LSAgICAgICAgaWYgKGF0KGVkZ2UpLm9wKCkgPT0gR2V0TG9jYWwpCi0gICAgICAgICAgICBhdChl
ZGdlKS52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+dm90ZShiYWxsb3QpOworICAgICAgICBpZiAobm9k
ZS0+b3AoKSA9PSBHZXRMb2NhbCkKKyAgICAgICAgICAgIG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0
YSgpLT52b3RlKGJhbGxvdCk7CisgICAgfQorICAgIAorICAgIHZvaWQgdm90ZU5vZGUoRWRnZSBl
ZGdlLCB1bnNpZ25lZCBiYWxsb3QpCisgICAgeworICAgICAgICB2b3RlTm9kZShlZGdlLm5vZGUo
KSwgYmFsbG90KTsKICAgICB9CiAgICAgCi0gICAgdm9pZCB2b3RlKE5vZGUmIG5vZGUsIHVuc2ln
bmVkIGJhbGxvdCkKKyAgICB2b2lkIHZvdGVDaGlsZHJlbihOb2RlKiBub2RlLCB1bnNpZ25lZCBi
YWxsb3QpCiAgICAgewotICAgICAgICBpZiAobm9kZS5mbGFncygpICYgTm9kZUhhc1ZhckFyZ3Mp
IHsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgY2hpbGRJZHggPSBub2RlLmZpcnN0Q2hpbGQo
KTsKLSAgICAgICAgICAgICAgICAgY2hpbGRJZHggPCBub2RlLmZpcnN0Q2hpbGQoKSArIG5vZGUu
bnVtQ2hpbGRyZW4oKTsKKyAgICAgICAgaWYgKG5vZGUtPmZsYWdzKCkgJiBOb2RlSGFzVmFyQXJn
cykgeworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBjaGlsZElkeCA9IG5vZGUtPmZpcnN0Q2hp
bGQoKTsKKyAgICAgICAgICAgICAgICAgY2hpbGRJZHggPCBub2RlLT5maXJzdENoaWxkKCkgKyBu
b2RlLT5udW1DaGlsZHJlbigpOwogICAgICAgICAgICAgICAgICBjaGlsZElkeCsrKSB7CiAgICAg
ICAgICAgICAgICAgaWYgKCEhbV92YXJBcmdDaGlsZHJlbltjaGlsZElkeF0pCiAgICAgICAgICAg
ICAgICAgICAgIHZvdGUobV92YXJBcmdDaGlsZHJlbltjaGlsZElkeF0sIGJhbGxvdCk7CkBAIC02
MzcsMzkgKzYyMSwzOCBAQCBwdWJsaWM6CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0K
ICAgICAgICAgCi0gICAgICAgIGlmICghbm9kZS5jaGlsZDEoKSkKKyAgICAgICAgaWYgKCFub2Rl
LT5jaGlsZDEoKSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgdm90ZShub2RlLmNoaWxk
MSgpLCBiYWxsb3QpOwotICAgICAgICBpZiAoIW5vZGUuY2hpbGQyKCkpCisgICAgICAgIHZvdGUo
bm9kZS0+Y2hpbGQxKCksIGJhbGxvdCk7CisgICAgICAgIGlmICghbm9kZS0+Y2hpbGQyKCkpCiAg
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIHZvdGUobm9kZS5jaGlsZDIoKSwgYmFsbG90KTsK
LSAgICAgICAgaWYgKCFub2RlLmNoaWxkMygpKQorICAgICAgICB2b3RlKG5vZGUtPmNoaWxkMigp
LCBiYWxsb3QpOworICAgICAgICBpZiAoIW5vZGUtPmNoaWxkMygpKQogICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICB2b3RlKG5vZGUuY2hpbGQzKCksIGJhbGxvdCk7CisgICAgICAgIHZvdGUo
bm9kZS0+Y2hpbGQzKCksIGJhbGxvdCk7CiAgICAgfQogICAgIAotICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFQ+IC8vIFQgPSBOb2RlSW5kZXggb3IgRWRnZQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+
IC8vIFQgPSBOb2RlKiBvciBFZGdlCiAgICAgdm9pZCBzdWJzdGl0dXRlKEJhc2ljQmxvY2smIGJs
b2NrLCB1bnNpZ25lZCBzdGFydEluZGV4SW5CbG9jaywgVCBvbGRUaGluZywgVCBuZXdUaGluZykK
ICAgICB7CiAgICAgICAgIGZvciAodW5zaWduZWQgaW5kZXhJbkJsb2NrID0gc3RhcnRJbmRleElu
QmxvY2s7IGluZGV4SW5CbG9jayA8IGJsb2NrLnNpemUoKTsgKytpbmRleEluQmxvY2spIHsKLSAg
ICAgICAgICAgIE5vZGVJbmRleCBub2RlSW5kZXggPSBibG9ja1tpbmRleEluQmxvY2tdOwotICAg
ICAgICAgICAgTm9kZSYgbm9kZSA9IGF0KG5vZGVJbmRleCk7Ci0gICAgICAgICAgICBpZiAobm9k
ZS5mbGFncygpICYgTm9kZUhhc1ZhckFyZ3MpIHsKLSAgICAgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGNoaWxkSWR4ID0gbm9kZS5maXJzdENoaWxkKCk7IGNoaWxkSWR4IDwgbm9kZS5maXJzdENo
aWxkKCkgKyBub2RlLm51bUNoaWxkcmVuKCk7ICsrY2hpbGRJZHgpIHsKKyAgICAgICAgICAgIE5v
ZGUqIG5vZGUgPSBibG9ja1tpbmRleEluQmxvY2tdOworICAgICAgICAgICAgaWYgKG5vZGUtPmZs
YWdzKCkgJiBOb2RlSGFzVmFyQXJncykgeworICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQg
Y2hpbGRJZHggPSBub2RlLT5maXJzdENoaWxkKCk7IGNoaWxkSWR4IDwgbm9kZS0+Zmlyc3RDaGls
ZCgpICsgbm9kZS0+bnVtQ2hpbGRyZW4oKTsgKytjaGlsZElkeCkgewogICAgICAgICAgICAgICAg
ICAgICBpZiAoISFtX3ZhckFyZ0NoaWxkcmVuW2NoaWxkSWR4XSkKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbXBhcmVBbmRTd2FwKG1fdmFyQXJnQ2hpbGRyZW5bY2hpbGRJZHhdLCBvbGRUaGlu
ZywgbmV3VGhpbmcsIG5vZGUuc2hvdWxkR2VuZXJhdGUoKSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICBjb21wYXJlQW5kU3dhcChtX3ZhckFyZ0NoaWxkcmVuW2NoaWxkSWR4XSwgb2xkVGhpbmcs
IG5ld1RoaW5nLCBub2RlLT5zaG91bGRHZW5lcmF0ZSgpKTsKICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAo
IW5vZGUuY2hpbGQxKCkpCisgICAgICAgICAgICBpZiAoIW5vZGUtPmNoaWxkMSgpKQogICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgY29tcGFyZUFuZFN3YXAobm9kZS5jaGls
ZHJlbi5jaGlsZDEoKSwgb2xkVGhpbmcsIG5ld1RoaW5nLCBub2RlLnNob3VsZEdlbmVyYXRlKCkp
OwotICAgICAgICAgICAgaWYgKCFub2RlLmNoaWxkMigpKQorICAgICAgICAgICAgY29tcGFyZUFu
ZFN3YXAobm9kZS0+Y2hpbGRyZW4uY2hpbGQxKCksIG9sZFRoaW5nLCBuZXdUaGluZywgbm9kZS0+
c2hvdWxkR2VuZXJhdGUoKSk7CisgICAgICAgICAgICBpZiAoIW5vZGUtPmNoaWxkMigpKQogICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgY29tcGFyZUFuZFN3YXAobm9kZS5j
aGlsZHJlbi5jaGlsZDIoKSwgb2xkVGhpbmcsIG5ld1RoaW5nLCBub2RlLnNob3VsZEdlbmVyYXRl
KCkpOwotICAgICAgICAgICAgaWYgKCFub2RlLmNoaWxkMygpKQorICAgICAgICAgICAgY29tcGFy
ZUFuZFN3YXAobm9kZS0+Y2hpbGRyZW4uY2hpbGQyKCksIG9sZFRoaW5nLCBuZXdUaGluZywgbm9k
ZS0+c2hvdWxkR2VuZXJhdGUoKSk7CisgICAgICAgICAgICBpZiAoIW5vZGUtPmNoaWxkMygpKQog
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgY29tcGFyZUFuZFN3YXAobm9k
ZS5jaGlsZHJlbi5jaGlsZDMoKSwgb2xkVGhpbmcsIG5ld1RoaW5nLCBub2RlLnNob3VsZEdlbmVy
YXRlKCkpOworICAgICAgICAgICAgY29tcGFyZUFuZFN3YXAobm9kZS0+Y2hpbGRyZW4uY2hpbGQz
KCksIG9sZFRoaW5nLCBuZXdUaGluZywgbm9kZS0+c2hvdWxkR2VuZXJhdGUoKSk7CiAgICAgICAg
IH0KICAgICB9CiAgICAgCkBAIC02NzcsMjkgKzY2MCwyOCBAQCBwdWJsaWM6CiAgICAgLy8gYW55
IEdldExvY2FscyBpbiB0aGUgYmFzaWMgYmxvY2suCiAgICAgLy8gRklYTUU6IGl0IG1heSBiZSBh
cHByb3ByaWF0ZSwgaW4gdGhlIGZ1dHVyZSwgdG8gZ2VuZXJhbGl6ZSB0aGlzIHRvIGhhbmRsZSBH
ZXRMb2NhbHMKICAgICAvLyBpbnRyb2R1Y2VkIGFueXdoZXJlIGluIHRoZSBiYXNpYyBibG9jay4K
LSAgICB2b2lkIHN1YnN0aXR1dGVHZXRMb2NhbChCYXNpY0Jsb2NrJiBibG9jaywgdW5zaWduZWQg
c3RhcnRJbmRleEluQmxvY2ssIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRh
LCBOb2RlSW5kZXggbmV3R2V0TG9jYWwpCisgICAgdm9pZCBzdWJzdGl0dXRlR2V0TG9jYWwoQmFz
aWNCbG9jayYgYmxvY2ssIHVuc2lnbmVkIHN0YXJ0SW5kZXhJbkJsb2NrLCBWYXJpYWJsZUFjY2Vz
c0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSwgTm9kZSogbmV3R2V0TG9jYWwpCiAgICAgewogICAg
ICAgICBpZiAodmFyaWFibGVBY2Nlc3NEYXRhLT5pc0NhcHR1cmVkKCkpIHsKICAgICAgICAgICAg
IC8vIExldCBDU0Ugd29ycnkgYWJvdXQgdGhpcyBvbmUuCiAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgIH0KICAgICAgICAgZm9yICh1bnNpZ25lZCBpbmRleEluQmxvY2sgPSBzdGFydEluZGV4
SW5CbG9jazsgaW5kZXhJbkJsb2NrIDwgYmxvY2suc2l6ZSgpOyArK2luZGV4SW5CbG9jaykgewot
ICAgICAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRleCA9IGJsb2NrW2luZGV4SW5CbG9ja107Ci0g
ICAgICAgICAgICBOb2RlJiBub2RlID0gYXQobm9kZUluZGV4KTsKKyAgICAgICAgICAgIE5vZGUq
IG5vZGUgPSBibG9ja1tpbmRleEluQmxvY2tdOwogICAgICAgICAgICAgYm9vbCBzaG91bGRDb250
aW51ZSA9IHRydWU7Ci0gICAgICAgICAgICBzd2l0Y2ggKG5vZGUub3AoKSkgeworICAgICAgICAg
ICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CiAgICAgICAgICAgICBjYXNlIFNldExvY2FsOiB7Ci0g
ICAgICAgICAgICAgICAgaWYgKG5vZGUubG9jYWwoKSA9PSB2YXJpYWJsZUFjY2Vzc0RhdGEtPmxv
Y2FsKCkpCisgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmxvY2FsKCkgPT0gdmFyaWFibGVBY2Nl
c3NEYXRhLT5sb2NhbCgpKQogICAgICAgICAgICAgICAgICAgICBzaG91bGRDb250aW51ZSA9IGZh
bHNlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgIAogICAgICAgICAgICAgY2FzZSBHZXRMb2NhbDogewotICAgICAgICAgICAgICAgIGlmIChu
b2RlLnZhcmlhYmxlQWNjZXNzRGF0YSgpICE9IHZhcmlhYmxlQWNjZXNzRGF0YSkKKyAgICAgICAg
ICAgICAgICBpZiAobm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCkgIT0gdmFyaWFibGVBY2Nlc3NE
YXRhKQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICBzdWJz
dGl0dXRlKGJsb2NrLCBpbmRleEluQmxvY2ssIG5vZGVJbmRleCwgbmV3R2V0TG9jYWwpOwotICAg
ICAgICAgICAgICAgIE5vZGVJbmRleCBvbGRUYWlsSW5kZXggPSBibG9jay52YXJpYWJsZXNBdFRh
aWwub3BlcmFuZCh2YXJpYWJsZUFjY2Vzc0RhdGEtPmxvY2FsKCkpOwotICAgICAgICAgICAgICAg
IGlmIChvbGRUYWlsSW5kZXggPT0gbm9kZUluZGV4KQorICAgICAgICAgICAgICAgIHN1YnN0aXR1
dGUoYmxvY2ssIGluZGV4SW5CbG9jaywgbm9kZSwgbmV3R2V0TG9jYWwpOworICAgICAgICAgICAg
ICAgIE5vZGUqIG9sZFRhaWxOb2RlID0gYmxvY2sudmFyaWFibGVzQXRUYWlsLm9wZXJhbmQodmFy
aWFibGVBY2Nlc3NEYXRhLT5sb2NhbCgpKTsKKyAgICAgICAgICAgICAgICBpZiAob2xkVGFpbE5v
ZGUgPT0gbm9kZSkKICAgICAgICAgICAgICAgICAgICAgYmxvY2sudmFyaWFibGVzQXRUYWlsLm9w
ZXJhbmQodmFyaWFibGVBY2Nlc3NEYXRhLT5sb2NhbCgpKSA9IG5ld0dldExvY2FsOwogICAgICAg
ICAgICAgICAgIHNob3VsZENvbnRpbnVlID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgYnJlYWs7
CkBAIC03MTcsNiArNjk5LDggQEAgcHVibGljOgogICAgIENvZGVCbG9jayogbV9jb2RlQmxvY2s7
CiAgICAgUmVmUHRyPFByb2ZpbGVyOjpDb21waWxhdGlvbj4gbV9jb21waWxhdGlvbjsKICAgICBD
b2RlQmxvY2sqIG1fcHJvZmlsZWRCbG9jazsKKyAgICAKKyAgICBOb2RlQWxsb2NhdG9yJiBtX2Fs
bG9jYXRvcjsKIAogICAgIFZlY3RvcjwgT3duUHRyPEJhc2ljQmxvY2s+ICwgOD4gbV9ibG9ja3M7
CiAgICAgVmVjdG9yPEVkZ2UsIDE2PiBtX3ZhckFyZ0NoaWxkcmVuOwpAQCAtNzI0LDcgKzcwOCw3
IEBAIHB1YmxpYzoKICAgICBWZWN0b3I8UmVzb2x2ZUdsb2JhbERhdGE+IG1fcmVzb2x2ZUdsb2Jh
bERhdGE7CiAgICAgVmVjdG9yPFJlc29sdmVPcGVyYXRpb25EYXRhPiBtX3Jlc29sdmVPcGVyYXRp
b25zRGF0YTsKICAgICBWZWN0b3I8UHV0VG9CYXNlT3BlcmF0aW9uRGF0YT4gbV9wdXRUb0Jhc2VP
cGVyYXRpb25EYXRhOwotICAgIFZlY3RvcjxOb2RlSW5kZXgsIDg+IG1fYXJndW1lbnRzOworICAg
IFZlY3RvcjxOb2RlKiwgOD4gbV9hcmd1bWVudHM7CiAgICAgU2VnbWVudGVkVmVjdG9yPFZhcmlh
YmxlQWNjZXNzRGF0YSwgMTY+IG1fdmFyaWFibGVBY2Nlc3NEYXRhOwogICAgIFNlZ21lbnRlZFZl
Y3RvcjxBcmd1bWVudFBvc2l0aW9uLCA4PiBtX2FyZ3VtZW50UG9zaXRpb25zOwogICAgIFNlZ21l
bnRlZFZlY3RvcjxTdHJ1Y3R1cmVTZXQsIDE2PiBtX3N0cnVjdHVyZVNldDsKQEAgLTc0NCwyOSAr
NzI4LDI5IEBAIHByaXZhdGU6CiAgICAgCiAgICAgdm9pZCBoYW5kbGVTdWNjZXNzb3IoVmVjdG9y
PEJsb2NrSW5kZXgsIDE2PiYgd29ya2xpc3QsIEJsb2NrSW5kZXggYmxvY2tJbmRleCwgQmxvY2tJ
bmRleCBzdWNjZXNzb3JJbmRleCk7CiAgICAgCi0gICAgQWRkU3BlY3VsYXRpb25Nb2RlIGFkZElt
bWVkaWF0ZVNob3VsZFNwZWN1bGF0ZUludGVnZXIoTm9kZSYgYWRkLCBib29sIHZhcmlhYmxlU2hv
dWxkU3BlY3VsYXRlSW50ZWdlciwgTm9kZSYgaW1tZWRpYXRlKQorICAgIEFkZFNwZWN1bGF0aW9u
TW9kZSBhZGRJbW1lZGlhdGVTaG91bGRTcGVjdWxhdGVJbnRlZ2VyKE5vZGUqIGFkZCwgYm9vbCB2
YXJpYWJsZVNob3VsZFNwZWN1bGF0ZUludGVnZXIsIE5vZGUqIGltbWVkaWF0ZSkKICAgICB7CiAg
ICAgICAgIEFTU0VSVChpbW1lZGlhdGUuaGFzQ29uc3RhbnQoKSk7CiAgICAgICAgIAotICAgICAg
ICBKU1ZhbHVlIGltbWVkaWF0ZVZhbHVlID0gaW1tZWRpYXRlLnZhbHVlT2ZKU0NvbnN0YW50KG1f
Y29kZUJsb2NrKTsKLSAgICAgICAgaWYgKCFpbW1lZGlhdGVWYWx1ZS5pc051bWJlcigpKQorICAg
ICAgICBKU1ZhbHVlIGltbWVkaWF0ZVZhbHVlID0gaW1tZWRpYXRlLT52YWx1ZU9mSlNDb25zdGFu
dChtX2NvZGVCbG9jayk7CisgICAgICAgIGlmICghaW1tZWRpYXRlVmFsdWUtPmlzTnVtYmVyKCkp
CiAgICAgICAgICAgICByZXR1cm4gRG9udFNwZWN1bGF0ZUludGVnZXI7CiAgICAgICAgIAogICAg
ICAgICBpZiAoIXZhcmlhYmxlU2hvdWxkU3BlY3VsYXRlSW50ZWdlcikKICAgICAgICAgICAgIHJl
dHVybiBEb250U3BlY3VsYXRlSW50ZWdlcjsKICAgICAgICAgCi0gICAgICAgIGlmIChpbW1lZGlh
dGVWYWx1ZS5pc0ludDMyKCkpCi0gICAgICAgICAgICByZXR1cm4gYWRkLmNhblNwZWN1bGF0ZUlu
dGVnZXIoKSA/IFNwZWN1bGF0ZUludGVnZXIgOiBEb250U3BlY3VsYXRlSW50ZWdlcjsKKyAgICAg
ICAgaWYgKGltbWVkaWF0ZVZhbHVlLT5pc0ludDMyKCkpCisgICAgICAgICAgICByZXR1cm4gYWRk
LT5jYW5TcGVjdWxhdGVJbnRlZ2VyKCkgPyBTcGVjdWxhdGVJbnRlZ2VyIDogRG9udFNwZWN1bGF0
ZUludGVnZXI7CiAgICAgICAgIAogICAgICAgICBkb3VibGUgZG91YmxlSW1tZWRpYXRlID0gaW1t
ZWRpYXRlVmFsdWUuYXNEb3VibGUoKTsKICAgICAgICAgY29uc3QgZG91YmxlIHR3b1RvVGhlNDgg
PSAyODE0NzQ5NzY3MTA2NTYuMDsKICAgICAgICAgaWYgKGRvdWJsZUltbWVkaWF0ZSA8IC10d29U
b1RoZTQ4IHx8IGRvdWJsZUltbWVkaWF0ZSA+IHR3b1RvVGhlNDgpCiAgICAgICAgICAgICByZXR1
cm4gRG9udFNwZWN1bGF0ZUludGVnZXI7CiAgICAgICAgIAotICAgICAgICByZXR1cm4gbm9kZUNh
blRydW5jYXRlSW50ZWdlcihhZGQuYXJpdGhOb2RlRmxhZ3MoKSkgPyBTcGVjdWxhdGVJbnRlZ2Vy
QnV0QWx3YXlzV2F0Y2hPdmVyZmxvdyA6IERvbnRTcGVjdWxhdGVJbnRlZ2VyOworICAgICAgICBy
ZXR1cm4gbm9kZUNhblRydW5jYXRlSW50ZWdlcihhZGQtPmFyaXRoTm9kZUZsYWdzKCkpID8gU3Bl
Y3VsYXRlSW50ZWdlckJ1dEFsd2F5c1dhdGNoT3ZlcmZsb3cgOiBEb250U3BlY3VsYXRlSW50ZWdl
cjsKICAgICB9CiAgICAgCi0gICAgYm9vbCBtdWxJbW1lZGlhdGVTaG91bGRTcGVjdWxhdGVJbnRl
Z2VyKE5vZGUmIG11bCwgTm9kZSYgdmFyaWFibGUsIE5vZGUmIGltbWVkaWF0ZSkKKyAgICBib29s
IG11bEltbWVkaWF0ZVNob3VsZFNwZWN1bGF0ZUludGVnZXIoTm9kZSogbXVsLCBOb2RlKiB2YXJp
YWJsZSwgTm9kZSogaW1tZWRpYXRlKQogICAgIHsKICAgICAgICAgQVNTRVJUKGltbWVkaWF0ZS5o
YXNDb25zdGFudCgpKTsKICAgICAgICAgCkBAIC03NzQsNyArNzU4LDcgQEAgcHJpdmF0ZToKICAg
ICAgICAgaWYgKCFpbW1lZGlhdGVWYWx1ZS5pc0ludDMyKCkpCiAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgICAgIAotICAgICAgICBpZiAoIXZhcmlhYmxlLnNob3VsZFNwZWN1bGF0ZUlu
dGVnZXJGb3JBcml0aG1ldGljKCkpCisgICAgICAgIGlmICghdmFyaWFibGUtPnNob3VsZFNwZWN1
bGF0ZUludGVnZXJGb3JBcml0aG1ldGljKCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgICAgIAogICAgICAgICBpbnQzMl90IGludEltbWVkaWF0ZSA9IGltbWVkaWF0ZVZhbHVlLmFz
SW50MzIoKTsKQEAgLTc4NSwxNCArNzY5LDE0IEBAIHByaXZhdGU6CiAgICAgICAgIC8vIGNhblNw
ZWN1bGF0ZUludGVnZXIoKSBpbXBsaWVzKS4KICAgICAgICAgY29uc3QgaW50MzJfdCB0d29Ub1Ro
ZTIyID0gMSA8PCAyMjsKICAgICAgICAgaWYgKGludEltbWVkaWF0ZSA8PSAtdHdvVG9UaGUyMiB8
fCBpbnRJbW1lZGlhdGUgPj0gdHdvVG9UaGUyMikKLSAgICAgICAgICAgIHJldHVybiBtdWwuY2Fu
U3BlY3VsYXRlSW50ZWdlcigpICYmICFub2RlTWF5T3ZlcmZsb3cobXVsLmFyaXRoTm9kZUZsYWdz
KCkpOworICAgICAgICAgICAgcmV0dXJuIG11bC0+Y2FuU3BlY3VsYXRlSW50ZWdlcigpICYmICFu
b2RlTWF5T3ZlcmZsb3cobXVsLT5hcml0aE5vZGVGbGFncygpKTsKIAotICAgICAgICByZXR1cm4g
bXVsLmNhblNwZWN1bGF0ZUludGVnZXIoKTsKKyAgICAgICAgcmV0dXJuIG11bC0+Y2FuU3BlY3Vs
YXRlSW50ZWdlcigpOwogICAgIH0KICAgICAKICAgICAvLyBXaGVuIGEgbm9kZSdzIHJlZkNvdW50
IGdvZXMgZnJvbSAwIHRvIDEsIGl0IG11c3QgKGxvZ2ljYWxseSkgcmVjdXJzaXZlbHkgcmVmIGFs
bCBvZiBpdHMgY2hpbGRyZW4sIGFuZCB2aWNlIHZlcnNhLgotICAgIHZvaWQgcmVmQ2hpbGRyZW4o
Tm9kZUluZGV4KTsKLSAgICB2b2lkIGRlcmVmQ2hpbGRyZW4oTm9kZUluZGV4KTsKKyAgICB2b2lk
IHJlZkNoaWxkcmVuKE5vZGUqKTsKKyAgICB2b2lkIGRlcmVmQ2hpbGRyZW4oTm9kZSopOwogfTsK
IAogY2xhc3MgR2V0Qnl0ZWNvZGVCZWdpbkZvckJsb2NrIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHSW5zZXJ0aW9uU2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdJbnNlcnRpb25TZXQuaAkocmV2aXNpb24gMTQwOTA0KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJbnNlcnRpb25TZXQuaAkod29ya2luZyBjb3B5KQpA
QCAtMzksMTQgKzM5LDE0IEBAIGNsYXNzIEluc2VydGlvbiB7CiBwdWJsaWM6CiAgICAgSW5zZXJ0
aW9uKCkgeyB9CiAgICAgCi0gICAgSW5zZXJ0aW9uKHNpemVfdCBpbmRleCwgTm9kZUluZGV4IGVs
ZW1lbnQpCisgICAgSW5zZXJ0aW9uKHNpemVfdCBpbmRleCwgTm9kZSogZWxlbWVudCkKICAgICAg
ICAgOiBtX2luZGV4KGluZGV4KQogICAgICAgICAsIG1fZWxlbWVudChlbGVtZW50KQogICAgIHsK
ICAgICB9CiAgICAgCiAgICAgc2l6ZV90IGluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9pbmRleDsg
fQotICAgIE5vZGVJbmRleCBlbGVtZW50KCkgY29uc3QgeyByZXR1cm4gbV9lbGVtZW50OyB9Cisg
ICAgTm9kZSogZWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fZWxlbWVudDsgfQogcHJpdmF0ZToK
ICAgICBzaXplX3QgbV9pbmRleDsKICAgICBOb2RlSW5kZXggbV9lbGVtZW50OwpAQCAtNTksMjAg
KzU5LDIwIEBAIHB1YmxpYzoKICAgICB7CiAgICAgfQogICAgIAotICAgIE5vZGVJbmRleCBpbnNl
cnQoY29uc3QgSW5zZXJ0aW9uJiBpbnNlcnRpb24pCisgICAgTm9kZSogaW5zZXJ0KGNvbnN0IElu
c2VydGlvbiYgaW5zZXJ0aW9uKQogICAgIHsKICAgICAgICAgQVNTRVJUKCFtX2luc2VydGlvbnMu
c2l6ZSgpIHx8IG1faW5zZXJ0aW9ucy5sYXN0KCkuaW5kZXgoKSA8PSBpbnNlcnRpb24uaW5kZXgo
KSk7CiAgICAgICAgIG1faW5zZXJ0aW9ucy5hcHBlbmQoaW5zZXJ0aW9uKTsKICAgICAgICAgcmV0
dXJuIGluc2VydGlvbi5lbGVtZW50KCk7CiAgICAgfQogICAgIAotICAgIE5vZGVJbmRleCBpbnNl
cnQoc2l6ZV90IGluZGV4LCBOb2RlSW5kZXggZWxlbWVudCkKKyAgICBOb2RlKiBpbnNlcnQoc2l6
ZV90IGluZGV4LCBOb2RlSW5kZXggZWxlbWVudCkKICAgICB7CiAgICAgICAgIHJldHVybiBpbnNl
cnQoSW5zZXJ0aW9uKGluZGV4LCBlbGVtZW50KSk7CiAgICAgfQogCiAjZGVmaW5lIERGR19ERUZJ
TkVfSU5TRVJUX05PREUodGVtcGxhdGVQcmUsIHRlbXBsYXRlUG9zdCwgdHlwZVBhcmFtcywgdmFs
dWVQYXJhbXNDb21tYSwgdmFsdWVQYXJhbXMsIHZhbHVlQXJncykgXAotICAgIHRlbXBsYXRlUHJl
IHR5cGVQYXJhbXMgdGVtcGxhdGVQb3N0IE5vZGVJbmRleCBpbnNlcnROb2RlKHNpemVfdCBpbmRl
eCwgUmVmQ2hpbGRyZW5Nb2RlIHJlZkNoaWxkcmVuTW9kZSwgUmVmTm9kZU1vZGUgcmVmTm9kZU1v
ZGUsIFNwZWN1bGF0ZWRUeXBlIHR5cGUgdmFsdWVQYXJhbXNDb21tYSB2YWx1ZVBhcmFtcykgXAor
ICAgIHRlbXBsYXRlUHJlIHR5cGVQYXJhbXMgdGVtcGxhdGVQb3N0IE5vZGUqIGluc2VydE5vZGUo
c2l6ZV90IGluZGV4LCBSZWZDaGlsZHJlbk1vZGUgcmVmQ2hpbGRyZW5Nb2RlLCBSZWZOb2RlTW9k
ZSByZWZOb2RlTW9kZSwgU3BlY3VsYXRlZFR5cGUgdHlwZSB2YWx1ZVBhcmFtc0NvbW1hIHZhbHVl
UGFyYW1zKSBcCiAgICAgeyBcCiAgICAgICAgIHJldHVybiBpbnNlcnQoaW5kZXgsIG1fZ3JhcGgu
YWRkTm9kZShyZWZDaGlsZHJlbk1vZGUsIHJlZk5vZGVNb2RlLCB0eXBlIHZhbHVlUGFyYW1zQ29t
bWEgdmFsdWVBcmdzKSk7IFwKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0pJVENvbXBpbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdKSVRDb21waWxlci5oCShyZXZpc2lvbiAxNDA5MDQpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2NiwxMSArMjY2
LDExIEBAIHB1YmxpYzoKICAgICAgICAgbV9kaXNhc3NlbWJsZXItPnNldEZvckJsb2NrKGJsb2Nr
SW5kZXgsIGxhYmVsSWdub3JpbmdXYXRjaHBvaW50cygpKTsKICAgICB9CiAgICAgCi0gICAgdm9p
ZCBzZXRGb3JOb2RlKE5vZGVJbmRleCBub2RlSW5kZXgpCisgICAgdm9pZCBzZXRGb3JOb2RlKE5v
ZGUqIG5vZGUpCiAgICAgewogICAgICAgICBpZiAoTElLRUxZKCFtX2Rpc2Fzc2VtYmxlcikpCiAg
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIG1fZGlzYXNzZW1ibGVyLT5zZXRGb3JOb2RlKG5v
ZGVJbmRleCwgbGFiZWxJZ25vcmluZ1dhdGNocG9pbnRzKCkpOworICAgICAgICBtX2Rpc2Fzc2Vt
Ymxlci0+c2V0Rm9yTm9kZShub2RlLCBsYWJlbElnbm9yaW5nV2F0Y2hwb2ludHMoKSk7CiAgICAg
fQogICAgIAogICAgIHZvaWQgc2V0RW5kT2ZNYWluUGF0aCgpCkBAIC0zNDgsMTAgKzM0OCwxMCBA
QCBwdWJsaWM6CiAgICAgfQogCiAjaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICB2b2lkKiBhZGRy
ZXNzT2ZEb3VibGVDb25zdGFudChOb2RlSW5kZXggbm9kZUluZGV4KQorICAgIHZvaWQqIGFkZHJl
c3NPZkRvdWJsZUNvbnN0YW50KE5vZGUqIG5vZGUpCiAgICAgewotICAgICAgICBBU1NFUlQobV9n
cmFwaC5pc051bWJlckNvbnN0YW50KG5vZGVJbmRleCkpOwotICAgICAgICB1bnNpZ25lZCBjb25z
dGFudEluZGV4ID0gZ3JhcGgoKVtub2RlSW5kZXhdLmNvbnN0YW50TnVtYmVyKCk7CisgICAgICAg
IEFTU0VSVChtX2dyYXBoLmlzTnVtYmVyQ29uc3RhbnQobm9kZSkpOworICAgICAgICB1bnNpZ25l
ZCBjb25zdGFudEluZGV4ID0gbm9kZS0+Y29uc3RhbnROdW1iZXIoKTsKICAgICAgICAgcmV0dXJu
ICYoY29kZUJsb2NrKCktPmNvbnN0YW50UmVnaXN0ZXIoRmlyc3RDb25zdGFudFJlZ2lzdGVySW5k
ZXggKyBjb25zdGFudEluZGV4KSk7CiAgICAgfQogI2VuZGlmCkBAIC00MDUsMTUgKzQwNSwxNSBA
QCBwdWJsaWM6CiAgICAgICAgIC8vIHZhbHVlIG9mIChOb25lLCBbXSkuIEJ1dCB0aGUgb2xkIEpJ
VCBtYXkgc3Rhc2ggc29tZSB2YWx1ZXMgdGhlcmUuIFNvIHdlIHJlYWxseQogICAgICAgICAvLyBu
ZWVkIChUb3AsIFRPUCkuCiAgICAgICAgIGZvciAoc2l6ZV90IGFyZ3VtZW50ID0gMDsgYXJndW1l
bnQgPCBiYXNpY0Jsb2NrLnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkFyZ3VtZW50cygpOyArK2Fy
Z3VtZW50KSB7Ci0gICAgICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4ID0gYmFzaWNCbG9jay52
YXJpYWJsZXNBdEhlYWQuYXJndW1lbnQoYXJndW1lbnQpOwotICAgICAgICAgICAgaWYgKG5vZGVJ
bmRleCA9PSBOb05vZGUgfHwgIW1fZ3JhcGhbbm9kZUluZGV4XS5zaG91bGRHZW5lcmF0ZSgpKQor
ICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJhc2ljQmxvY2sudmFyaWFibGVzQXRIZWFkLmFyZ3Vt
ZW50KGFyZ3VtZW50KTsKKyAgICAgICAgICAgIGlmICghbm9kZSB8fCAhbm9kZS0+c2hvdWxkR2Vu
ZXJhdGUoKSkKICAgICAgICAgICAgICAgICBlbnRyeS0+bV9leHBlY3RlZFZhbHVlcy5hcmd1bWVu
dChhcmd1bWVudCkubWFrZVRvcCgpOwogICAgICAgICB9CiAgICAgICAgIGZvciAoc2l6ZV90IGxv
Y2FsID0gMDsgbG9jYWwgPCBiYXNpY0Jsb2NrLnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkxvY2Fs
cygpOyArK2xvY2FsKSB7Ci0gICAgICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4ID0gYmFzaWNC
bG9jay52YXJpYWJsZXNBdEhlYWQubG9jYWwobG9jYWwpOwotICAgICAgICAgICAgaWYgKG5vZGVJ
bmRleCA9PSBOb05vZGUgfHwgIW1fZ3JhcGhbbm9kZUluZGV4XS5zaG91bGRHZW5lcmF0ZSgpKQor
ICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJhc2ljQmxvY2sudmFyaWFibGVzQXRIZWFkLmxvY2Fs
KGxvY2FsKTsKKyAgICAgICAgICAgIGlmICghbm9kZSB8fCAhbm9kZS0+c2hvdWxkR2VuZXJhdGUo
KSkKICAgICAgICAgICAgICAgICBlbnRyeS0+bV9leHBlY3RlZFZhbHVlcy5sb2NhbChsb2NhbCku
bWFrZVRvcCgpOwotICAgICAgICAgICAgZWxzZSBpZiAobV9ncmFwaFtub2RlSW5kZXhdLnZhcmlh
YmxlQWNjZXNzRGF0YSgpLT5zaG91bGRVc2VEb3VibGVGb3JtYXQoKSkKKyAgICAgICAgICAgIGVs
c2UgaWYgKG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5zaG91bGRVc2VEb3VibGVGb3JtYXQo
KSkKICAgICAgICAgICAgICAgICBlbnRyeS0+bV9sb2NhbHNGb3JjZWREb3VibGUuc2V0KGxvY2Fs
KTsKICAgICAgICAgfQogI2Vsc2UKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
TG9uZ0xpdmVkU3RhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHTG9uZ0xpdmVkU3RhdGUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdMb25nTGl2ZWRTdGF0ZS5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
NDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGR0xvbmdMaXZlZFN0YXRlLmgiCisKKyNpZiBF
TkFCTEUoREZHX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitMb25n
TGl2ZWRTdGF0ZTo6TG9uZ0xpdmVkU3RhdGUoKQoreworfQorCitMb25nTGl2ZWRTdGF0ZTo6fkxv
bmdMaXZlZFN0YXRlKCkKK3sKK30KKwordm9pZCBMb25nTGl2ZWRTdGF0ZTo6c2hyaW5rVG9GaXQo
KQoreworICAgIG1fYWxsb2NhdG9yLnJlc2V0KCk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlND
OjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0xvbmdMaXZlZFN0YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdMb25nTGl2ZWRTdGF0ZS5oCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdMb25nTGl2ZWRTdGF0ZS5oCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDU1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpZm5kZWYgREZHTG9uZ0xpdmVkU3RhdGVfaAorI2RlZmluZSBERkdMb25nTGl2ZWRT
dGF0ZV9oCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2lmIEVOQUJMRShERkdfSklU
KQorCisjaW5jbHVkZSAiREZHTm9kZUFsbG9jYXRvci5oIgorI2luY2x1ZGUgPHd0Zi9GYXN0QWxs
b2NCYXNlLmg+CisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisKK25hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3MgTG9uZ0xpdmVkU3RhdGUgeworICAgIFdURl9NQUtF
X0ZBU1RfQUxMT0NBVEVEOyBXVEZfTUFLRV9OT05DT1BZQUJMRShMb25nTGl2ZWRTdGF0ZSk7Citw
dWJsaWM6CisgICAgTG9uZ0xpdmVkU3RhdGUoKTsKKyAgICB+TG9uZ0xpdmVkU3RhdGUoKTsKKyAg
ICAKKyAgICB2b2lkIHNocmlua1RvRml0KCk7CisgICAgCisgICAgTm9kZUFsbG9jYXRvciBtX2Fs
bG9jYXRvcjsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVO
QUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZHTG9uZ0xpdmVkU3RhdGVfaAorCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01pbmlmaWVkSUQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01pbmlmaWVkSUQuaAkocmV2aXNpb24gMTQwOTA0
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdNaW5pZmllZElELmgJKHdvcmtpbmcg
Y29weSkKQEAgLTQ0LDE0ICs0NCwxNCBAQCBjbGFzcyBNaW5pZmllZElEIHsKIHB1YmxpYzoKICAg
ICBNaW5pZmllZElEKCkgOiBtX2lkKGludmFsaWRJRCgpKSB7IH0KICAgICBNaW5pZmllZElEKFdU
Rjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlVHlwZSkgOiBtX2lkKG90aGVySW52YWxpZElEKCkpIHsg
fQotICAgIGV4cGxpY2l0IE1pbmlmaWVkSUQoTm9kZUluZGV4IG5vZGVJbmRleCkgOiBtX2lkKG5v
ZGVJbmRleCkgeyB9CisgICAgZXhwbGljaXQgTWluaWZpZWRJRChOb2RlKiBub2RlKSA6IG1faWQo
Yml0d2lzZV9jYXN0PHVpbnRwdHJfdD4obm9kZSkpIHsgfQogICAgIAogICAgIGJvb2wgb3BlcmF0
b3IhKCkgY29uc3QgeyByZXR1cm4gbV9pZCA9PSBpbnZhbGlkSUQoKTsgfQogICAgIAogICAgIC8v
IFRoaXMgdGFrZXMgR3JhcGgmIHRvIHJlbWluZCB5b3UsIHRoYXQgeW91IHNob3VsZCBvbmx5IGJl
IGNhbGxpbmcgdGhpcyBtZXRob2QKICAgICAvLyB3aGVuIHlvdSdyZSBpbiB0aGUgbWFpbiBjb21w
aWxhdGlvbiBwYXNzIChpLmUuIHlvdSBoYXZlIGEgZ3JhcGgpIGFuZCBub3QgbGF0ZXIsCiAgICAg
Ly8gbGlrZSBkdXJpbmcgT1NSIGV4aXQgY29tcGlsYXRpb24uCi0gICAgTm9kZUluZGV4IG5vZGVJ
bmRleChjb25zdCBHcmFwaCYpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PE5vZGVJbmRleD4o
bV9pZCk7IH0KKyAgICBOb2RlKiBub2RlSW5kZXgoY29uc3QgR3JhcGgmKSBjb25zdCB7IHJldHVy
biBiaXR3aXNlX2Nhc3Q8Tm9kZSo+KG1faWQpOyB9CiAgICAgCiAgICAgYm9vbCBvcGVyYXRvcj09
KGNvbnN0IE1pbmlmaWVkSUQmIG90aGVyKSBjb25zdCB7IHJldHVybiBtX2lkID09IG90aGVyLm1f
aWQ7IH0KICAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgTWluaWZpZWRJRCYgb3RoZXIpIGNvbnN0
IHsgcmV0dXJuIG1faWQgIT0gb3RoZXIubV9pZDsgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdOb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR05vZGUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdOb2RlLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1NiBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiREZHTm9kZS5oIgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJE
RkdOb2RlQWxsb2NhdG9yLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKwor
dW5zaWduZWQgTm9kZTo6aW5kZXgoKSBjb25zdAoreworICAgIHJldHVybiBOb2RlQWxsb2NhdG9y
OjphbGxvY2F0b3JPZih0aGlzKS0+aW5kZXhPZih0aGlzKTsKK30KKworfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkRGRworCituYW1lc3BhY2UgV1RGIHsKKwordm9pZCBwcmludEludGVybmFsKFByaW50
U3RyZWFtJiBvdXQsIE5vZGUqIG5vZGUpCit7CisgICAgaWYgKCFub2RlKQorICAgICAgICBvdXQu
cHJpbnQoIi0iKTsKKyAgICBlbHNlCisgICAgICAgIG91dC5wcmludCgiQCIsIG5vZGUtPmluZGV4
KCkpOworICAgIG91dC5wcmludChBYmJyZXZpYXRlZFNwZWN1bGF0aW9uRHVtcChub2RlLT5wcmVk
aWN0aW9uKCkpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBFTkFCTEUo
REZHX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHJldmlzaW9u
IDE0MDkwNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIw
MTIsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC02OCw3ICs2OCw3IEBAIHN0cnVjdCBOZXdBcnJheUJ1ZmZlckRh
dGEgewogCiAvLyBUaGlzIHR5cGUgdXNlZCBpbiBwYXNzaW5nIGFuIGltbWVkaWF0ZSBhcmd1bWVu
dCB0byBOb2RlIGNvbnN0cnVjdG9yOwogLy8gZGlzdGluZ3Vpc2hlcyBhbiBpbW1lZGlhdGUgdmFs
dWUgKHR5cGljYWxseSBhbiBpbmRleCBpbnRvIGEgQ29kZUJsb2NrIGRhdGEgc3RydWN0dXJlIC0g
Ci0vLyBhIGNvbnN0YW50IGluZGV4LCBhcmd1bWVudCwgb3IgaWRlbnRpZmllcikgZnJvbSBhIE5v
ZGVJbmRleC4KKy8vIGEgY29uc3RhbnQgaW5kZXgsIGFyZ3VtZW50LCBvciBpZGVudGlmaWVyKSBm
cm9tIGEgTm9kZSouCiBzdHJ1Y3QgT3BJbmZvIHsKICAgICBleHBsaWNpdCBPcEluZm8oaW50MzJf
dCB2YWx1ZSkgOiBtX3ZhbHVlKHN0YXRpY19jYXN0PHVpbnRwdHJfdD4odmFsdWUpKSB7IH0KICAg
ICBleHBsaWNpdCBPcEluZm8odWludDMyX3QgdmFsdWUpIDogbV92YWx1ZShzdGF0aWNfY2FzdDx1
aW50cHRyX3Q+KHZhbHVlKSkgeyB9CkBAIC05OSw3ICs5OSw3IEBAIHN0cnVjdCBOb2RlIHsKICAg
ICB9CiAgICAgCiAgICAgLy8gQ29uc3RydWN0IGEgbm9kZSB3aXRoIHVwIHRvIDMgY2hpbGRyZW4s
IG5vIGltbWVkaWF0ZSB2YWx1ZS4KLSAgICBOb2RlKE5vZGVUeXBlIG9wLCBDb2RlT3JpZ2luIGNv
ZGVPcmlnaW4sIE5vZGVJbmRleCBjaGlsZDEgPSBOb05vZGUsIE5vZGVJbmRleCBjaGlsZDIgPSBO
b05vZGUsIE5vZGVJbmRleCBjaGlsZDMgPSBOb05vZGUpCisgICAgTm9kZShOb2RlVHlwZSBvcCwg
Q29kZU9yaWdpbiBjb2RlT3JpZ2luLCBOb2RlKiBjaGlsZDEgPSAwLCBOb2RlKiBjaGlsZDIgPSAw
LCBOb2RlKiBjaGlsZDMgPSAwKQogICAgICAgICA6IGNvZGVPcmlnaW4oY29kZU9yaWdpbikKICAg
ICAgICAgLCBjaGlsZHJlbihBZGphY2VuY3lMaXN0OjpGaXhlZCwgY2hpbGQxLCBjaGlsZDIsIGNo
aWxkMykKICAgICAgICAgLCBtX3ZpcnR1YWxSZWdpc3RlcihJbnZhbGlkVmlydHVhbFJlZ2lzdGVy
KQpAQCAtMTExLDcgKzExMSw3IEBAIHN0cnVjdCBOb2RlIHsKICAgICB9CiAKICAgICAvLyBDb25z
dHJ1Y3QgYSBub2RlIHdpdGggdXAgdG8gMyBjaGlsZHJlbiBhbmQgYW4gaW1tZWRpYXRlIHZhbHVl
LgotICAgIE5vZGUoTm9kZVR5cGUgb3AsIENvZGVPcmlnaW4gY29kZU9yaWdpbiwgT3BJbmZvIGlt
bSwgTm9kZUluZGV4IGNoaWxkMSA9IE5vTm9kZSwgTm9kZUluZGV4IGNoaWxkMiA9IE5vTm9kZSwg
Tm9kZUluZGV4IGNoaWxkMyA9IE5vTm9kZSkKKyAgICBOb2RlKE5vZGVUeXBlIG9wLCBDb2RlT3Jp
Z2luIGNvZGVPcmlnaW4sIE9wSW5mbyBpbW0sIE5vZGUqIGNoaWxkMSA9IDAsIE5vZGUqIGNoaWxk
MiA9IDAsIE5vZGUqIGNoaWxkMyA9IDApCiAgICAgICAgIDogY29kZU9yaWdpbihjb2RlT3JpZ2lu
KQogICAgICAgICAsIGNoaWxkcmVuKEFkamFjZW5jeUxpc3Q6OkZpeGVkLCBjaGlsZDEsIGNoaWxk
MiwgY2hpbGQzKQogICAgICAgICAsIG1fdmlydHVhbFJlZ2lzdGVyKEludmFsaWRWaXJ0dWFsUmVn
aXN0ZXIpCkBAIC0xMjQsNyArMTI0LDcgQEAgc3RydWN0IE5vZGUgewogICAgIH0KIAogICAgIC8v
IENvbnN0cnVjdCBhIG5vZGUgd2l0aCB1cCB0byAzIGNoaWxkcmVuIGFuZCB0d28gaW1tZWRpYXRl
IHZhbHVlcy4KLSAgICBOb2RlKE5vZGVUeXBlIG9wLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIE9w
SW5mbyBpbW0xLCBPcEluZm8gaW1tMiwgTm9kZUluZGV4IGNoaWxkMSA9IE5vTm9kZSwgTm9kZUlu
ZGV4IGNoaWxkMiA9IE5vTm9kZSwgTm9kZUluZGV4IGNoaWxkMyA9IE5vTm9kZSkKKyAgICBOb2Rl
KE5vZGVUeXBlIG9wLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIE9wSW5mbyBpbW0xLCBPcEluZm8g
aW1tMiwgTm9kZSogY2hpbGQxID0gMCwgTm9kZSogY2hpbGQyID0gMCwgTm9kZSogY2hpbGQzID0g
MCkKICAgICAgICAgOiBjb2RlT3JpZ2luKGNvZGVPcmlnaW4pCiAgICAgICAgICwgY2hpbGRyZW4o
QWRqYWNlbmN5TGlzdDo6Rml4ZWQsIGNoaWxkMSwgY2hpbGQyLCBjaGlsZDMpCiAgICAgICAgICwg
bV92aXJ0dWFsUmVnaXN0ZXIoSW52YWxpZFZpcnR1YWxSZWdpc3RlcikKQEAgLTE1NCw2ICsxNTQs
OSBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgTm9kZVR5cGUgb3AoKSBjb25zdCB7IHJldHVybiBzdGF0
aWNfY2FzdDxOb2RlVHlwZT4obV9vcCk7IH0KICAgICBOb2RlRmxhZ3MgZmxhZ3MoKSBjb25zdCB7
IHJldHVybiBtX2ZsYWdzOyB9CiAgICAgCisgICAgLy8gVGhpcyBpcyBub3QgYSBmYXN0IG1ldGhv
ZC4KKyAgICB1bnNpZ25lZCBpbmRleCgpIGNvbnN0OworICAgIAogICAgIHZvaWQgc2V0T3AoTm9k
ZVR5cGUgb3ApCiAgICAgewogICAgICAgICBtX29wID0gb3A7CkBAIC0yODEsNyArMjg0LDcgQEAg
c3RydWN0IE5vZGUgewogICAgICAgICBjb252ZXJ0VG9TdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hw
b2ludChzdHJ1Y3R1cmVTZXQoKS5zaW5nbGV0b25TdHJ1Y3R1cmUoKSk7CiAgICAgfQogICAgIAot
ICAgIHZvaWQgY29udmVydFRvR2V0QnlPZmZzZXQodW5zaWduZWQgc3RvcmFnZUFjY2Vzc0RhdGFJ
bmRleCwgTm9kZUluZGV4IHN0b3JhZ2UpCisgICAgdm9pZCBjb252ZXJ0VG9HZXRCeU9mZnNldCh1
bnNpZ25lZCBzdG9yYWdlQWNjZXNzRGF0YUluZGV4LCBOb2RlKiBzdG9yYWdlKQogICAgIHsKICAg
ICAgICAgQVNTRVJUKG1fb3AgPT0gR2V0QnlJZCB8fCBtX29wID09IEdldEJ5SWRGbHVzaCk7CiAg
ICAgICAgIG1fb3BJbmZvID0gc3RvcmFnZUFjY2Vzc0RhdGFJbmRleDsKQEAgLTI5MCw3ICsyOTMs
NyBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAgIG1fZmxhZ3MgJj0gfk5vZGVDbG9iYmVyc1dvcmxk
OwogICAgIH0KICAgICAKLSAgICB2b2lkIGNvbnZlcnRUb1B1dEJ5T2Zmc2V0KHVuc2lnbmVkIHN0
b3JhZ2VBY2Nlc3NEYXRhSW5kZXgsIE5vZGVJbmRleCBzdG9yYWdlKQorICAgIHZvaWQgY29udmVy
dFRvUHV0QnlPZmZzZXQodW5zaWduZWQgc3RvcmFnZUFjY2Vzc0RhdGFJbmRleCwgTm9kZSogc3Rv
cmFnZSkKICAgICB7CiAgICAgICAgIEFTU0VSVChtX29wID09IFB1dEJ5SWQgfHwgbV9vcCA9PSBQ
dXRCeUlkRGlyZWN0KTsKICAgICAgICAgbV9vcEluZm8gPSBzdG9yYWdlQWNjZXNzRGF0YUluZGV4
OwpAQCAtOTIwLDkgKzkyMywxMCBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAgIHJldHVybiBtX3Jl
ZkNvdW50OwogICAgIH0KIAotICAgIHZvaWQgcmVmKCkKKyAgICBOb2RlKiByZWYoKQogICAgIHsK
ICAgICAgICAgbV9yZWZDb3VudCsrOworICAgICAgICByZXR1cm4gdGhpczsKICAgICB9CiAKICAg
ICB1bnNpZ25lZCBwb3N0Zml4UmVmKCkKQEAgLTExMzUsNDQgKzExMzksNDQgQEAgc3RydWN0IE5v
ZGUgewogICAgICAgICByZXR1cm4gaXNDZWxsU3BlY3VsYXRpb24ocHJlZGljdGlvbigpKTsKICAg
ICB9CiAgICAgCi0gICAgc3RhdGljIGJvb2wgc2hvdWxkU3BlY3VsYXRlSW50ZWdlcihOb2RlJiBv
cDEsIE5vZGUmIG9wMikKKyAgICBzdGF0aWMgYm9vbCBzaG91bGRTcGVjdWxhdGVJbnRlZ2VyKE5v
ZGUqIG9wMSwgTm9kZSogb3AyKQogICAgIHsKLSAgICAgICAgcmV0dXJuIG9wMS5zaG91bGRTcGVj
dWxhdGVJbnRlZ2VyKCkgJiYgb3AyLnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKTsKKyAgICAgICAg
cmV0dXJuIG9wMS0+c2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpICYmIG9wMi0+c2hvdWxkU3BlY3Vs
YXRlSW50ZWdlcigpOwogICAgIH0KICAgICAKLSAgICBzdGF0aWMgYm9vbCBzaG91bGRTcGVjdWxh
dGVJbnRlZ2VyRm9yQXJpdGhtZXRpYyhOb2RlJiBvcDEsIE5vZGUmIG9wMikKKyAgICBzdGF0aWMg
Ym9vbCBzaG91bGRTcGVjdWxhdGVJbnRlZ2VyRm9yQXJpdGhtZXRpYyhOb2RlKiBvcDEsIE5vZGUq
IG9wMikKICAgICB7Ci0gICAgICAgIHJldHVybiBvcDEuc2hvdWxkU3BlY3VsYXRlSW50ZWdlckZv
ckFyaXRobWV0aWMoKSAmJiBvcDIuc2hvdWxkU3BlY3VsYXRlSW50ZWdlckZvckFyaXRobWV0aWMo
KTsKKyAgICAgICAgcmV0dXJuIG9wMS0+c2hvdWxkU3BlY3VsYXRlSW50ZWdlckZvckFyaXRobWV0
aWMoKSAmJiBvcDItPnNob3VsZFNwZWN1bGF0ZUludGVnZXJGb3JBcml0aG1ldGljKCk7CiAgICAg
fQogICAgIAotICAgIHN0YXRpYyBib29sIHNob3VsZFNwZWN1bGF0ZUludGVnZXJFeHBlY3RpbmdE
ZWZpbmVkKE5vZGUmIG9wMSwgTm9kZSYgb3AyKQorICAgIHN0YXRpYyBib29sIHNob3VsZFNwZWN1
bGF0ZUludGVnZXJFeHBlY3RpbmdEZWZpbmVkKE5vZGUqIG9wMSwgTm9kZSogb3AyKQogICAgIHsK
LSAgICAgICAgcmV0dXJuIG9wMS5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyRXhwZWN0aW5nRGVmaW5l
ZCgpICYmIG9wMi5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyRXhwZWN0aW5nRGVmaW5lZCgpOworICAg
ICAgICByZXR1cm4gb3AxLT5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyRXhwZWN0aW5nRGVmaW5lZCgp
ICYmIG9wMi0+c2hvdWxkU3BlY3VsYXRlSW50ZWdlckV4cGVjdGluZ0RlZmluZWQoKTsKICAgICB9
CiAgICAgCi0gICAgc3RhdGljIGJvb2wgc2hvdWxkU3BlY3VsYXRlRG91YmxlRm9yQXJpdGhtZXRp
YyhOb2RlJiBvcDEsIE5vZGUmIG9wMikKKyAgICBzdGF0aWMgYm9vbCBzaG91bGRTcGVjdWxhdGVE
b3VibGVGb3JBcml0aG1ldGljKE5vZGUqIG9wMSwgTm9kZSogb3AyKQogICAgIHsKLSAgICAgICAg
cmV0dXJuIG9wMS5zaG91bGRTcGVjdWxhdGVEb3VibGVGb3JBcml0aG1ldGljKCkgJiYgb3AyLnNo
b3VsZFNwZWN1bGF0ZURvdWJsZUZvckFyaXRobWV0aWMoKTsKKyAgICAgICAgcmV0dXJuIG9wMS0+
c2hvdWxkU3BlY3VsYXRlRG91YmxlRm9yQXJpdGhtZXRpYygpICYmIG9wMi0+c2hvdWxkU3BlY3Vs
YXRlRG91YmxlRm9yQXJpdGhtZXRpYygpOwogICAgIH0KICAgICAKLSAgICBzdGF0aWMgYm9vbCBz
aG91bGRTcGVjdWxhdGVOdW1iZXIoTm9kZSYgb3AxLCBOb2RlJiBvcDIpCisgICAgc3RhdGljIGJv
b2wgc2hvdWxkU3BlY3VsYXRlTnVtYmVyKE5vZGUqIG9wMSwgTm9kZSogb3AyKQogICAgIHsKLSAg
ICAgICAgcmV0dXJuIG9wMS5zaG91bGRTcGVjdWxhdGVOdW1iZXIoKSAmJiBvcDIuc2hvdWxkU3Bl
Y3VsYXRlTnVtYmVyKCk7CisgICAgICAgIHJldHVybiBvcDEtPnNob3VsZFNwZWN1bGF0ZU51bWJl
cigpICYmIG9wMi0+c2hvdWxkU3BlY3VsYXRlTnVtYmVyKCk7CiAgICAgfQogICAgIAotICAgIHN0
YXRpYyBib29sIHNob3VsZFNwZWN1bGF0ZU51bWJlckV4cGVjdGluZ0RlZmluZWQoTm9kZSYgb3Ax
LCBOb2RlJiBvcDIpCisgICAgc3RhdGljIGJvb2wgc2hvdWxkU3BlY3VsYXRlTnVtYmVyRXhwZWN0
aW5nRGVmaW5lZChOb2RlKiBvcDEsIE5vZGUqIG9wMikKICAgICB7Ci0gICAgICAgIHJldHVybiBv
cDEuc2hvdWxkU3BlY3VsYXRlTnVtYmVyRXhwZWN0aW5nRGVmaW5lZCgpICYmIG9wMi5zaG91bGRT
cGVjdWxhdGVOdW1iZXJFeHBlY3RpbmdEZWZpbmVkKCk7CisgICAgICAgIHJldHVybiBvcDEtPnNo
b3VsZFNwZWN1bGF0ZU51bWJlckV4cGVjdGluZ0RlZmluZWQoKSAmJiBvcDItPnNob3VsZFNwZWN1
bGF0ZU51bWJlckV4cGVjdGluZ0RlZmluZWQoKTsKICAgICB9CiAgICAgCi0gICAgc3RhdGljIGJv
b2wgc2hvdWxkU3BlY3VsYXRlRmluYWxPYmplY3QoTm9kZSYgb3AxLCBOb2RlJiBvcDIpCisgICAg
c3RhdGljIGJvb2wgc2hvdWxkU3BlY3VsYXRlRmluYWxPYmplY3QoTm9kZSogb3AxLCBOb2RlKiBv
cDIpCiAgICAgewotICAgICAgICByZXR1cm4gb3AxLnNob3VsZFNwZWN1bGF0ZUZpbmFsT2JqZWN0
KCkgJiYgb3AyLnNob3VsZFNwZWN1bGF0ZUZpbmFsT2JqZWN0KCk7CisgICAgICAgIHJldHVybiBv
cDEtPnNob3VsZFNwZWN1bGF0ZUZpbmFsT2JqZWN0KCkgJiYgb3AyLT5zaG91bGRTcGVjdWxhdGVG
aW5hbE9iamVjdCgpOwogICAgIH0KIAotICAgIHN0YXRpYyBib29sIHNob3VsZFNwZWN1bGF0ZUFy
cmF5KE5vZGUmIG9wMSwgTm9kZSYgb3AyKQorICAgIHN0YXRpYyBib29sIHNob3VsZFNwZWN1bGF0
ZUFycmF5KE5vZGUqIG9wMSwgTm9kZSogb3AyKQogICAgIHsKLSAgICAgICAgcmV0dXJuIG9wMS5z
aG91bGRTcGVjdWxhdGVBcnJheSgpICYmIG9wMi5zaG91bGRTcGVjdWxhdGVBcnJheSgpOworICAg
ICAgICByZXR1cm4gb3AxLT5zaG91bGRTcGVjdWxhdGVBcnJheSgpICYmIG9wMi0+c2hvdWxkU3Bl
Y3VsYXRlQXJyYXkoKTsKICAgICB9CiAgICAgCiAgICAgYm9vbCBjYW5TcGVjdWxhdGVJbnRlZ2Vy
KCkKQEAgLTExODQsMTUgKzExODgsMTcgQEAgc3RydWN0IE5vZGUgewogICAgIHsKICAgICAgICAg
aWYgKCFjaGlsZDEoKSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgb3V0LnByaW50Zigi
QCV1IiwgY2hpbGQxKCkuaW5kZXgoKSk7CisgICAgICAgIG91dC5wcmludGYoIkAldSIsIGNoaWxk
MSgpLT5pbmRleCgpKTsKICAgICAgICAgaWYgKCFjaGlsZDIoKSkKICAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgb3V0LnByaW50ZigiLCBAJXUiLCBjaGlsZDIoKS5pbmRleCgpKTsKKyAgICAg
ICAgb3V0LnByaW50ZigiLCBAJXUiLCBjaGlsZDIoKS0+aW5kZXgoKSk7CiAgICAgICAgIGlmICgh
Y2hpbGQzKCkpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIG91dC5wcmludGYoIiwgQCV1
IiwgY2hpbGQzKCkuaW5kZXgoKSk7CisgICAgICAgIG91dC5wcmludGYoIiwgQCV1IiwgY2hpbGQz
KCktPmluZGV4KCkpOwogICAgIH0KICAgICAKKyAgICAvLyBOQi4gVGhpcyBjbGFzcyBtdXN0IGhh
dmUgYSB0cml2aWFsIGRlc3RydWN0b3IuCisgICAgCiAgICAgLy8gVXNlZCB0byBsb29rIHVwIGV4
Y2VwdGlvbiBoYW5kbGluZyBpbmZvcm1hdGlvbiAoY3VycmVudGx5IGltcGxlbWVudGVkIGFzIGEg
Ynl0ZWNvZGUgaW5kZXgpLgogICAgIENvZGVPcmlnaW4gY29kZU9yaWdpbjsKICAgICAvLyBSZWZl
cmVuY2VzIHRvIHVwIHRvIDMgY2hpbGRyZW4sIG9yIGxpbmtzIHRvIGEgdmFyaWFibGUgbGVuZ3Ro
IHNldCBvZiBjaGlsZHJlbi4KQEAgLTEyMTUsMTAgKzEyMjEsMTYgQEAgcHJpdmF0ZToKIHB1Ymxp
YzoKICAgICAvLyBGaWVsZHMgdXNlZCBieSB2YXJpb3VzIGFuYWx5c2VzLgogICAgIEFic3RyYWN0
VmFsdWUgdmFsdWU7Ci0gICAgTm9kZUluZGV4IHJlcGxhY2VtZW50OworICAgIE5vZGUqIHJlcGxh
Y2VtZW50OwogfTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwogCituYW1lc3BhY2UgV1RG
IHsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiwgTm9kZSopOworCit9IC8vIG5h
bWVzcGFjZSBXVEYKKwogI2VuZGlmCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHTm9kZUFsbG9jYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHTm9kZUFsbG9jYXRvci5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdOb2RlQWxsb2NhdG9yLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
NTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lm
bmRlZiBERkdOb2RlQWxsb2NhdG9yX2gKKyNkZWZpbmUgREZHTm9kZUFsbG9jYXRvcl9oCisKKyNp
bmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVk
ZSAiREZHQWxsb2NhdG9yLmgiCisjaW5jbHVkZSAiREZHTm9kZS5oIgorCituYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIERGRyB7CisKK3R5cGVkZWYgQWxsb2NhdG9yPE5vZGUsIDQwOTU+IE5vZGVB
bGxvY2F0b3I7CisKK2lubGluZSB2b2lkKiBvcGVyYXRvciBuZXcgKHNpemVfdCBzaXplLCBOb2Rl
QWxsb2NhdG9yJiBhbGxvY2F0b3IpCit7CisgICAgQVNTRVJUKHNpemUgPT0gc2l6ZW9mKE5vZGUp
KTsKKyAgICByZXR1cm4gYWxsb2NhdG9yLmFsbG9jYXRlKCk7Cit9CisKK30gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZH
Tm9kZUFsbG9jYXRvcl9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJl
ZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAx
NDA5MDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdh
dGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTEsIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDExLCAyMDEyLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtODUsNzUgKzg1LDczIEBA
IHB1YmxpYzoKIHByaXZhdGU6CiAgICAgYm9vbCBzZXRQcmVkaWN0aW9uKFNwZWN1bGF0ZWRUeXBl
IHByZWRpY3Rpb24pCiAgICAgewotICAgICAgICBBU1NFUlQobV9ncmFwaFttX2NvbXBpbGVJbmRl
eF0uaGFzUmVzdWx0KCkpOworICAgICAgICBBU1NFUlQobV9jdXJyZW50Tm9kZS0+aGFzUmVzdWx0
KCkpOwogICAgICAgICAKICAgICAgICAgLy8gc2V0UHJlZGljdGlvbigpIGlzIHVzZWQgd2hlbiB3
ZSBrbm93IHRoYXQgdGhlcmUgaXMgbm8gd2F5IHRoYXQgd2UgY2FuIGNoYW5nZQogICAgICAgICAv
LyBvdXIgbWluZHMgYWJvdXQgd2hhdCB0aGUgcHJlZGljdGlvbiBpcyBnb2luZyB0byBiZS4gVGhl
cmUgaXMgbm8gc2VtYW50aWMKICAgICAgICAgLy8gZGlmZmVyZW5jZSBiZXR3ZWVuIHNldFByZWRp
Y3Rpb24oKSBhbmQgbWVyZ2VTcGVjdWxhdGlvbigpIG90aGVyIHRoYW4gdGhlCiAgICAgICAgIC8v
IGluY3JlYXNlZCBjaGVja2luZyB0byB2YWxpZGF0ZSB0aGlzIHByb3BlcnR5LgotICAgICAgICBB
U1NFUlQobV9ncmFwaFttX2NvbXBpbGVJbmRleF0ucHJlZGljdGlvbigpID09IFNwZWNOb25lIHx8
IG1fZ3JhcGhbbV9jb21waWxlSW5kZXhdLnByZWRpY3Rpb24oKSA9PSBwcmVkaWN0aW9uKTsKKyAg
ICAgICAgQVNTRVJUKG1fY3VycmVudE5vZGUtPnByZWRpY3Rpb24oKSA9PSBTcGVjTm9uZSB8fCBt
X2N1cnJlbnROb2RlLT5wcmVkaWN0aW9uKCkgPT0gcHJlZGljdGlvbik7CiAgICAgICAgIAotICAg
ICAgICByZXR1cm4gbV9ncmFwaFttX2NvbXBpbGVJbmRleF0ucHJlZGljdChwcmVkaWN0aW9uKTsK
KyAgICAgICAgcmV0dXJuIG1fY3VycmVudE5vZGUtPnByZWRpY3QocHJlZGljdGlvbik7CiAgICAg
fQogICAgIAogICAgIGJvb2wgbWVyZ2VQcmVkaWN0aW9uKFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rp
b24pCiAgICAgewotICAgICAgICBBU1NFUlQobV9ncmFwaFttX2NvbXBpbGVJbmRleF0uaGFzUmVz
dWx0KCkpOworICAgICAgICBBU1NFUlQobV9jdXJyZW50Tm9kZS0+aGFzUmVzdWx0KCkpOwogICAg
ICAgICAKLSAgICAgICAgcmV0dXJuIG1fZ3JhcGhbbV9jb21waWxlSW5kZXhdLnByZWRpY3QocHJl
ZGljdGlvbik7CisgICAgICAgIHJldHVybiBtX2N1cnJlbnROb2RlLT5wcmVkaWN0KHByZWRpY3Rp
b24pOwogICAgIH0KICAgICAKLSAgICBib29sIGlzTm90TmVnWmVybyhOb2RlSW5kZXggbm9kZUlu
ZGV4KQorICAgIGJvb2wgaXNOb3ROZWdaZXJvKE5vZGUqIG5vZGUpCiAgICAgewotICAgICAgICBp
ZiAoIW1fZ3JhcGguaXNOdW1iZXJDb25zdGFudChub2RlSW5kZXgpKQorICAgICAgICBpZiAoIW1f
Z3JhcGguaXNOdW1iZXJDb25zdGFudChub2RlKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgICAgZG91YmxlIHZhbHVlID0gbV9ncmFwaC52YWx1ZU9mTnVtYmVyQ29uc3RhbnQobm9k
ZUluZGV4KTsKKyAgICAgICAgZG91YmxlIHZhbHVlID0gbV9ncmFwaC52YWx1ZU9mTnVtYmVyQ29u
c3RhbnQobm9kZSk7CiAgICAgICAgIHJldHVybiAhdmFsdWUgJiYgMS4wIC8gdmFsdWUgPCAwLjA7
CiAgICAgfQogICAgIAotICAgIGJvb2wgaXNOb3RaZXJvKE5vZGVJbmRleCBub2RlSW5kZXgpCisg
ICAgYm9vbCBpc05vdFplcm8oTm9kZSogbm9kZSkKICAgICB7Ci0gICAgICAgIGlmICghbV9ncmFw
aC5pc051bWJlckNvbnN0YW50KG5vZGVJbmRleCkpCisgICAgICAgIGlmICghbV9ncmFwaC5pc051
bWJlckNvbnN0YW50KG5vZGUpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBy
ZXR1cm4gISFtX2dyYXBoLnZhbHVlT2ZOdW1iZXJDb25zdGFudChub2RlSW5kZXgpOworICAgICAg
ICByZXR1cm4gISFtX2dyYXBoLnZhbHVlT2ZOdW1iZXJDb25zdGFudChub2RlKTsKICAgICB9CiAg
ICAgCi0gICAgYm9vbCBpc1dpdGhpblBvd2VyT2ZUd29Gb3JDb25zdGFudChOb2RlJiBub2RlLCBp
bnQgcG93ZXIpCisgICAgYm9vbCBpc1dpdGhpblBvd2VyT2ZUd29Gb3JDb25zdGFudChOb2RlKiBu
b2RlLCBpbnQgcG93ZXIpCiAgICAgewotICAgICAgICBKU1ZhbHVlIGltbWVkaWF0ZVZhbHVlID0g
bm9kZS52YWx1ZU9mSlNDb25zdGFudChjb2RlQmxvY2soKSk7CisgICAgICAgIEpTVmFsdWUgaW1t
ZWRpYXRlVmFsdWUgPSBub2RlLT52YWx1ZU9mSlNDb25zdGFudChjb2RlQmxvY2soKSk7CiAgICAg
ICAgIGlmICghaW1tZWRpYXRlVmFsdWUuaXNJbnQzMigpKQogICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgICAgICBpbnQzMl90IGludEltbWVkaWF0ZSA9IGltbWVkaWF0ZVZhbHVlLmFzSW50
MzIoKTsKICAgICAgICAgcmV0dXJuIGludEltbWVkaWF0ZSA+IC0oMSA8PCBwb3dlcikgJiYgaW50
SW1tZWRpYXRlIDwgKDEgPDwgcG93ZXIpOwogICAgIH0KICAgICAKLSAgICBib29sIGlzV2l0aGlu
UG93ZXJPZlR3b05vblJlY3Vyc2l2ZShOb2RlSW5kZXggbm9kZUluZGV4LCBpbnQgcG93ZXIpCisg
ICAgYm9vbCBpc1dpdGhpblBvd2VyT2ZUd29Ob25SZWN1cnNpdmUoTm9kZSogbm9kZSwgaW50IHBv
d2VyKQogICAgIHsKLSAgICAgICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhbbm9kZUluZGV4XTsKLSAg
ICAgICAgaWYgKG5vZGUub3AoKSAhPSBKU0NvbnN0YW50KQorICAgICAgICBpZiAobm9kZS0+b3Ao
KSAhPSBKU0NvbnN0YW50KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICByZXR1
cm4gaXNXaXRoaW5Qb3dlck9mVHdvRm9yQ29uc3RhbnQobm9kZSwgcG93ZXIpOwogICAgIH0KICAg
ICAKLSAgICBib29sIGlzV2l0aGluUG93ZXJPZlR3byhOb2RlSW5kZXggbm9kZUluZGV4LCBpbnQg
cG93ZXIpCisgICAgYm9vbCBpc1dpdGhpblBvd2VyT2ZUd28oTm9kZSogbm9kZSwgaW50IHBvd2Vy
KQogICAgIHsKLSAgICAgICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhbbm9kZUluZGV4XTsKLSAgICAg
ICAgc3dpdGNoIChub2RlLm9wKCkpIHsKKyAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CiAg
ICAgICAgIGNhc2UgSlNDb25zdGFudDogewogICAgICAgICAgICAgcmV0dXJuIGlzV2l0aGluUG93
ZXJPZlR3b0ZvckNvbnN0YW50KG5vZGUsIHBvd2VyKTsKICAgICAgICAgfQogICAgICAgICAgICAg
CiAgICAgICAgIGNhc2UgQml0QW5kOiB7Ci0gICAgICAgICAgICByZXR1cm4gaXNXaXRoaW5Qb3dl
ck9mVHdvTm9uUmVjdXJzaXZlKG5vZGUuY2hpbGQxKCkuaW5kZXgoKSwgcG93ZXIpCi0gICAgICAg
ICAgICAgICAgfHwgaXNXaXRoaW5Qb3dlck9mVHdvTm9uUmVjdXJzaXZlKG5vZGUuY2hpbGQyKCku
aW5kZXgoKSwgcG93ZXIpOworICAgICAgICAgICAgcmV0dXJuIGlzV2l0aGluUG93ZXJPZlR3b05v
blJlY3Vyc2l2ZShub2RlLT5jaGlsZDEoKS5ub2RlKCksIHBvd2VyKQorICAgICAgICAgICAgICAg
IHx8IGlzV2l0aGluUG93ZXJPZlR3b05vblJlY3Vyc2l2ZShub2RlLT5jaGlsZDIoKS5ub2RlKCks
IHBvd2VyKTsKICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgQml0UlNoaWZ0
OgogICAgICAgICBjYXNlIEJpdFVSU2hpZnQ6IHsKLSAgICAgICAgICAgIE5vZGUmIHNoaWZ0QW1v
dW50ID0gbV9ncmFwaFtub2RlLmNoaWxkMigpXTsKLSAgICAgICAgICAgIGlmIChzaGlmdEFtb3Vu
dC5vcCgpICE9IEpTQ29uc3RhbnQpCisgICAgICAgICAgICBOb2RlKiBzaGlmdEFtb3VudCA9IG5v
ZGUtPmNoaWxkMigpLm5vZGUoKTsKKyAgICAgICAgICAgIGlmIChzaGlmdEFtb3VudC0+b3AoKSAh
PSBKU0NvbnN0YW50KQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAg
IEpTVmFsdWUgaW1tZWRpYXRlVmFsdWUgPSBzaGlmdEFtb3VudC52YWx1ZU9mSlNDb25zdGFudChj
b2RlQmxvY2soKSk7CisgICAgICAgICAgICBKU1ZhbHVlIGltbWVkaWF0ZVZhbHVlID0gc2hpZnRB
bW91bnQtPnZhbHVlT2ZKU0NvbnN0YW50KGNvZGVCbG9jaygpKTsKICAgICAgICAgICAgIGlmICgh
aW1tZWRpYXRlVmFsdWUuaXNJbnQzMigpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICAgICAgICAgIHJldHVybiBpbW1lZGlhdGVWYWx1ZSA+IDMyIC0gcG93ZXI7CkBAIC0xNzgs
MTYgKzE3NiwxNiBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4gc3BlY3VsYXRlZERvdWJsZVR5
cGVGb3JQcmVkaWN0aW9uKG1lcmdlU3BlY3VsYXRpb25zKGxlZnQsIHJpZ2h0KSk7CiAgICAgfQog
Ci0gICAgdm9pZCBwcm9wYWdhdGUoTm9kZSYgbm9kZSkKKyAgICB2b2lkIHByb3BhZ2F0ZShOb2Rl
KiBub2RlKQogICAgIHsKLSAgICAgICAgaWYgKCFub2RlLnNob3VsZEdlbmVyYXRlKCkpCisgICAg
ICAgIGlmICghbm9kZS0+c2hvdWxkR2VuZXJhdGUoKSkKICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgCi0gICAgICAgIE5vZGVUeXBlIG9wID0gbm9kZS5vcCgpOwotICAgICAgICBOb2RlRmxh
Z3MgZmxhZ3MgPSBub2RlLmZsYWdzKCkgJiBOb2RlQmFja1Byb3BNYXNrOworICAgICAgICBOb2Rl
VHlwZSBvcCA9IG5vZGUtPm9wKCk7CisgICAgICAgIE5vZGVGbGFncyBmbGFncyA9IG5vZGUtPmZs
YWdzKCkgJiBOb2RlQmFja1Byb3BNYXNrOwogCiAjaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdB
VElPTl9WRVJCT1NFKQotICAgICAgICBkYXRhTG9nRigiICAgJXMgQCV1OiAlcyAiLCBHcmFwaDo6
b3BOYW1lKG9wKSwgbV9jb21waWxlSW5kZXgsIG5vZGVGbGFnc0FzU3RyaW5nKGZsYWdzKSk7Cisg
ICAgICAgIGRhdGFMb2coIiAgICIsIEdyYXBoOjpvcE5hbWUob3ApLCAiICIsIG1fY3VycmVudE5v
ZGUsICI6ICIsIG5vZGVGbGFnc0FzU3RyaW5nKGZsYWdzKSwgIiAiKTsKICNlbmRpZgogICAgICAg
ICAKICAgICAgICAgYm9vbCBjaGFuZ2VkID0gZmFsc2U7CkBAIC0xOTUsMTIgKzE5MywxMiBAQCBw
cml2YXRlOgogICAgICAgICBzd2l0Y2ggKG9wKSB7CiAgICAgICAgIGNhc2UgSlNDb25zdGFudDoK
ICAgICAgICAgY2FzZSBXZWFrSlNDb25zdGFudDogewotICAgICAgICAgICAgY2hhbmdlZCB8PSBz
ZXRQcmVkaWN0aW9uKHNwZWN1bGF0aW9uRnJvbVZhbHVlKG1fZ3JhcGgudmFsdWVPZkpTQ29uc3Rh
bnQobV9jb21waWxlSW5kZXgpKSk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IHNldFByZWRpY3Rp
b24oc3BlY3VsYXRpb25Gcm9tVmFsdWUobV9ncmFwaC52YWx1ZU9mSlNDb25zdGFudChub2RlKSkp
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBj
YXNlIEdldExvY2FsOiB7Ci0gICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxl
QWNjZXNzRGF0YSA9IG5vZGUudmFyaWFibGVBY2Nlc3NEYXRhKCk7CisgICAgICAgICAgICBWYXJp
YWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNz
RGF0YSgpOwogICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiA9IHZhcmlhYmxl
QWNjZXNzRGF0YS0+cHJlZGljdGlvbigpOwogICAgICAgICAgICAgaWYgKHByZWRpY3Rpb24pCiAg
ICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVByZWRpY3Rpb24ocHJlZGljdGlvbik7CkBA
IC0yMTAsMjEgKzIwOCwyMSBAQCBwcml2YXRlOgogICAgICAgICB9CiAgICAgICAgICAgICAKICAg
ICAgICAgY2FzZSBTZXRMb2NhbDogewotICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2
YXJpYWJsZUFjY2Vzc0RhdGEgPSBub2RlLnZhcmlhYmxlQWNjZXNzRGF0YSgpOwotICAgICAgICAg
ICAgY2hhbmdlZCB8PSB2YXJpYWJsZUFjY2Vzc0RhdGEtPnByZWRpY3QobV9ncmFwaFtub2RlLmNo
aWxkMSgpXS5wcmVkaWN0aW9uKCkpOworICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2
YXJpYWJsZUFjY2Vzc0RhdGEgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKKyAgICAgICAg
ICAgIGNoYW5nZWQgfD0gdmFyaWFibGVBY2Nlc3NEYXRhLT5wcmVkaWN0KG5vZGUtPmNoaWxkMSgp
LT5wcmVkaWN0aW9uKCkpOwogCiAgICAgICAgICAgICAvLyBBc3N1bWUgY29uc2VydmF0aXZlbHkg
dGhhdCBhIFNldExvY2FsIGltcGxpZXMgdGhhdCB0aGUgdmFsdWUgbWF5IGZsb3cgdGhyb3VnaCBh
IGxvb3AsCiAgICAgICAgICAgICAvLyBhbmQgc28gd2Ugd291bGQgaGF2ZSBvdmVyZmxvdyBsZWFk
aW5nIHRvIHRoZSBwcm9ncmFtICJvYnNlcnZpbmciIG51bWJlcnMgZXZlbiBpZiBhbGwKICAgICAg
ICAgICAgIC8vIHVzZXJzIG9mIHRoZSB2YWx1ZSBhcmUgZG9pbmcgdG9JbnQzMi4gSXQgbWlnaHQg
YmUgd29ydGh3aGlsZSB0byByZXZpc2l0IHRoaXMgYXQgc29tZQogICAgICAgICAgICAgLy8gcG9p
bnQgYW5kIGFjdHVhbGx5IGNoZWNrIGlmIHRoZSBkYXRhIGZsb3cgaW52b2x2ZXMgbG9vcHMsIGJ1
dCByaWdodCBub3cgSSBkb24ndCB0aGluawogICAgICAgICAgICAgLy8gd2UgaGF2ZSBldmlkZW5j
ZSB0aGF0IHRoaXMgd291bGQgYmUgYmVuZWZpY2lhbCBmb3IgYmVuY2htYXJrcy4KLSAgICAgICAg
ICAgIGNoYW5nZWQgfD0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5tZXJnZUZsYWdzKHZhcmlhYmxl
QWNjZXNzRGF0YS0+ZmxhZ3MoKSB8IE5vZGVVc2VkQXNOdW1iZXIpOworICAgICAgICAgICAgY2hh
bmdlZCB8PSBub2RlLT5jaGlsZDEoKS0+bWVyZ2VGbGFncyh2YXJpYWJsZUFjY2Vzc0RhdGEtPmZs
YWdzKCkgfCBOb2RlVXNlZEFzTnVtYmVyKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9
CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBGbHVzaDogewogICAgICAgICAgICAgLy8gTWFr
ZSBzdXJlIHRoYXQgdGhlIGFuYWx5c2lzIGtub3dzIHRoYXQgZmx1c2hlZCBsb2NhbHMgZXNjYXBl
LgotICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBu
b2RlLnZhcmlhYmxlQWNjZXNzRGF0YSgpOworICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRh
KiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKICAgICAg
ICAgICAgIGNoYW5nZWQgfD0gdmFyaWFibGVBY2Nlc3NEYXRhLT5tZXJnZUZsYWdzKE5vZGVVc2Vk
QXNWYWx1ZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtMjM4LDggKzIzNiw4
IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBjaGFuZ2VkIHw9IHNldFByZWRpY3Rpb24oU3BlY0lu
dDMyKTsKICAgICAgICAgICAgIGZsYWdzIHw9IE5vZGVVc2VkQXNJbnQgfCBOb2RlVXNlZEFzSW50
TG9jYWxseTsKICAgICAgICAgICAgIGZsYWdzICY9IH4oTm9kZVVzZWRBc051bWJlciB8IE5vZGVO
ZWVkc05lZ1plcm8gfCBOb2RlVXNlZEFzT3RoZXIpOwotICAgICAgICAgICAgY2hhbmdlZCB8PSBt
X2dyYXBoW25vZGUuY2hpbGQxKCldLm1lcmdlRmxhZ3MoZmxhZ3MpOwotICAgICAgICAgICAgY2hh
bmdlZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQyKCldLm1lcmdlRmxhZ3MoZmxhZ3MpOworICAgICAg
ICAgICAgY2hhbmdlZCB8PSBub2RlLT5jaGlsZDEoKS0+bWVyZ2VGbGFncyhmbGFncyk7CisgICAg
ICAgICAgICBjaGFuZ2VkIHw9IG5vZGUtPmNoaWxkMigpLT5tZXJnZUZsYWdzKGZsYWdzKTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKQEAgLTI0Nyw1MCArMjQ1
LDUwIEBAIHByaXZhdGU6CiAgICAgICAgICAgICBjaGFuZ2VkIHw9IHNldFByZWRpY3Rpb24oU3Bl
Y0ludDMyKTsKICAgICAgICAgICAgIGZsYWdzIHw9IE5vZGVVc2VkQXNJbnQgfCBOb2RlVXNlZEFz
SW50TG9jYWxseTsKICAgICAgICAgICAgIGZsYWdzICY9IH4oTm9kZVVzZWRBc051bWJlciB8IE5v
ZGVOZWVkc05lZ1plcm8gfCBOb2RlVXNlZEFzT3RoZXIpOwotICAgICAgICAgICAgY2hhbmdlZCB8
PSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLm1lcmdlRmxhZ3MoZmxhZ3MpOworICAgICAgICAgICAg
Y2hhbmdlZCB8PSBub2RlLT5jaGlsZDEoKS0+bWVyZ2VGbGFncyhmbGFncyk7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgQXJyYXlQb3A6
IHsKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKG5vZGUuZ2V0SGVhcFBy
ZWRpY3Rpb24oKSk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbihub2Rl
LT5nZXRIZWFwUHJlZGljdGlvbigpKTsKICAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VEZWZh
dWx0RmxhZ3Mobm9kZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCiAgICAgICAg
IGNhc2UgQXJyYXlQdXNoOiB7Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlv
bihub2RlLmdldEhlYXBQcmVkaWN0aW9uKCkpOwotICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dy
YXBoW25vZGUuY2hpbGQxKCldLm1lcmdlRmxhZ3MoTm9kZVVzZWRBc1ZhbHVlKTsKLSAgICAgICAg
ICAgIGNoYW5nZWQgfD0gbV9ncmFwaFtub2RlLmNoaWxkMigpXS5tZXJnZUZsYWdzKE5vZGVVc2Vk
QXNWYWx1ZSk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbihub2RlLT5n
ZXRIZWFwUHJlZGljdGlvbigpKTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbm9kZS0+Y2hpbGQx
KCktPm1lcmdlRmxhZ3MoTm9kZVVzZWRBc1ZhbHVlKTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0g
bm9kZS0+Y2hpbGQyKCktPm1lcmdlRmxhZ3MoTm9kZVVzZWRBc1ZhbHVlKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBSZWdFeHBFeGVjOgogICAgICAgICBj
YXNlIFJlZ0V4cFRlc3Q6IHsKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9u
KG5vZGUuZ2V0SGVhcFByZWRpY3Rpb24oKSk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdl
UHJlZGljdGlvbihub2RlLT5nZXRIZWFwUHJlZGljdGlvbigpKTsKICAgICAgICAgICAgIGNoYW5n
ZWQgfD0gbWVyZ2VEZWZhdWx0RmxhZ3Mobm9kZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgfQogCiAgICAgICAgIGNhc2UgU3RyaW5nQ2hhckNvZGVBdDogewogICAgICAgICAgICAgY2hh
bmdlZCB8PSBtZXJnZVByZWRpY3Rpb24oU3BlY0ludDMyKTsKLSAgICAgICAgICAgIGNoYW5nZWQg
fD0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5tZXJnZUZsYWdzKE5vZGVVc2VkQXNWYWx1ZSk7Ci0g
ICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbm9kZS5jaGlsZDIoKV0ubWVyZ2VGbGFncyhO
b2RlVXNlZEFzTnVtYmVyIHwgTm9kZVVzZWRBc090aGVyIHwgTm9kZVVzZWRBc0ludCB8IE5vZGVV
c2VkQXNJbnRMb2NhbGx5KTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbm9kZS0+Y2hpbGQxKCkt
Pm1lcmdlRmxhZ3MoTm9kZVVzZWRBc1ZhbHVlKTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbm9k
ZS0+Y2hpbGQyKCktPm1lcmdlRmxhZ3MoTm9kZVVzZWRBc051bWJlciB8IE5vZGVVc2VkQXNPdGhl
ciB8IE5vZGVVc2VkQXNJbnQgfCBOb2RlVXNlZEFzSW50TG9jYWxseSk7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQogCiAgICAgICAgIGNhc2UgVUludDMyVG9OdW1iZXI6IHsKLSAgICAg
ICAgICAgIGlmIChub2RlQ2FuU3BlY3VsYXRlSW50ZWdlcihub2RlLmFyaXRoTm9kZUZsYWdzKCkp
KQorICAgICAgICAgICAgaWYgKG5vZGVDYW5TcGVjdWxhdGVJbnRlZ2VyKG5vZGUtPmFyaXRoTm9k
ZUZsYWdzKCkpKQogICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKFNw
ZWNJbnQzMik7CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBt
ZXJnZVByZWRpY3Rpb24oU3BlY051bWJlcik7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGNo
YW5nZWQgfD0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5tZXJnZUZsYWdzKGZsYWdzKTsKKyAgICAg
ICAgICAgIGNoYW5nZWQgfD0gbm9kZS0+Y2hpbGQxKCktPm1lcmdlRmxhZ3MoZmxhZ3MpOwogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIFZhbHVlQWRkOiB7Ci0g
ICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSBsZWZ0ID0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5w
cmVkaWN0aW9uKCk7Ci0gICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSByaWdodCA9IG1fZ3JhcGhb
bm9kZS5jaGlsZDIoKV0ucHJlZGljdGlvbigpOworICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUg
bGVmdCA9IG5vZGUtPmNoaWxkMSgpLT5wcmVkaWN0aW9uKCk7CisgICAgICAgICAgICBTcGVjdWxh
dGVkVHlwZSByaWdodCA9IG5vZGUtPmNoaWxkMigpLT5wcmVkaWN0aW9uKCk7CiAgICAgICAgICAg
ICAKICAgICAgICAgICAgIEFkZFNwZWN1bGF0aW9uTW9kZSBtb2RlID0gRG9udFNwZWN1bGF0ZUlu
dGVnZXI7CiAgICAgICAgICAgICAKQEAgLTMwNywyMiArMzA1LDIyIEBAIHByaXZhdGU6CiAgICAg
ICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKFNwZWNTdHJpbmcgfCBT
cGVjSW50MzIgfCBTcGVjRG91YmxlKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAotICAg
ICAgICAgICAgaWYgKGlzTm90TmVnWmVybyhub2RlLmNoaWxkMSgpLmluZGV4KCkpIHx8IGlzTm90
TmVnWmVybyhub2RlLmNoaWxkMigpLmluZGV4KCkpKQorICAgICAgICAgICAgaWYgKGlzTm90TmVn
WmVybyhub2RlLT5jaGlsZDEoKS5ub2RlKCkpIHx8IGlzTm90TmVnWmVybyhub2RlLT5jaGlsZDIo
KS5ub2RlKCkpKQogICAgICAgICAgICAgICAgIGZsYWdzICY9IH5Ob2RlTmVlZHNOZWdaZXJvOwot
ICAgICAgICAgICAgaWYgKG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0uaGFzTnVtYmVyUmVzdWx0KCkg
fHwgbV9ncmFwaFtub2RlLmNoaWxkMigpXS5oYXNOdW1iZXJSZXN1bHQoKSkKKyAgICAgICAgICAg
IGlmIChub2RlLT5jaGlsZDEoKS0+aGFzTnVtYmVyUmVzdWx0KCkgfHwgbm9kZS0+Y2hpbGQyKCkt
Pmhhc051bWJlclJlc3VsdCgpKQogICAgICAgICAgICAgICAgIGZsYWdzICY9IH5Ob2RlVXNlZEFz
T3RoZXI7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlmIChtb2RlICE9IFNwZWN1bGF0ZUlu
dGVnZXIpCiAgICAgICAgICAgICAgICAgZmxhZ3MgfD0gTm9kZVVzZWRBc051bWJlcjsKICAgICAg
ICAgICAgIAotICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLm1l
cmdlRmxhZ3MoZmxhZ3MpOwotICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW25vZGUuY2hp
bGQyKCldLm1lcmdlRmxhZ3MoZmxhZ3MpOworICAgICAgICAgICAgY2hhbmdlZCB8PSBub2RlLT5j
aGlsZDEoKS0+bWVyZ2VGbGFncyhmbGFncyk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG5vZGUt
PmNoaWxkMigpLT5tZXJnZUZsYWdzKGZsYWdzKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBBcml0aEFkZDogewotICAgICAgICAgICAg
U3BlY3VsYXRlZFR5cGUgbGVmdCA9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ucHJlZGljdGlvbigp
OwotICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgcmlnaHQgPSBtX2dyYXBoW25vZGUuY2hpbGQy
KCldLnByZWRpY3Rpb24oKTsKKyAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIGxlZnQgPSBub2Rl
LT5jaGlsZDEoKS0+cHJlZGljdGlvbigpOworICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgcmln
aHQgPSBub2RlLT5jaGlsZDIoKS0+cHJlZGljdGlvbigpOwogICAgICAgICAgICAgCiAgICAgICAg
ICAgICBBZGRTcGVjdWxhdGlvbk1vZGUgbW9kZSA9IERvbnRTcGVjdWxhdGVJbnRlZ2VyOwogICAg
ICAgICAgICAgCkBAIC0zMzMsMjEgKzMzMSwyMSBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAg
ICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbihzcGVjdWxhdGVkRG91YmxlVHlwZUZvclBy
ZWRpY3Rpb25zKGxlZnQsIHJpZ2h0KSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKLSAg
ICAgICAgICAgIGlmIChpc05vdE5lZ1plcm8obm9kZS5jaGlsZDEoKS5pbmRleCgpKSB8fCBpc05v
dE5lZ1plcm8obm9kZS5jaGlsZDIoKS5pbmRleCgpKSkKKyAgICAgICAgICAgIGlmIChpc05vdE5l
Z1plcm8obm9kZS0+Y2hpbGQxKCkubm9kZSgpKSB8fCBpc05vdE5lZ1plcm8obm9kZS0+Y2hpbGQy
KCkubm9kZSgpKSkKICAgICAgICAgICAgICAgICBmbGFncyAmPSB+Tm9kZU5lZWRzTmVnWmVybzsK
ICAgICAgICAgICAgIGZsYWdzICY9IH5Ob2RlVXNlZEFzT3RoZXI7CiAgICAgICAgICAgICAKICAg
ICAgICAgICAgIGlmIChtb2RlICE9IFNwZWN1bGF0ZUludGVnZXIpCiAgICAgICAgICAgICAgICAg
ZmxhZ3MgfD0gTm9kZVVzZWRBc051bWJlcjsKICAgICAgICAgICAgIAotICAgICAgICAgICAgY2hh
bmdlZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLm1lcmdlRmxhZ3MoZmxhZ3MpOwotICAgICAg
ICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQyKCldLm1lcmdlRmxhZ3MoZmxhZ3Mp
OworICAgICAgICAgICAgY2hhbmdlZCB8PSBub2RlLT5jaGlsZDEoKS0+bWVyZ2VGbGFncyhmbGFn
cyk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG5vZGUtPmNoaWxkMigpLT5tZXJnZUZsYWdzKGZs
YWdzKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAg
ICAgY2FzZSBBcml0aFN1YjogewotICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgbGVmdCA9IG1f
Z3JhcGhbbm9kZS5jaGlsZDEoKV0ucHJlZGljdGlvbigpOwotICAgICAgICAgICAgU3BlY3VsYXRl
ZFR5cGUgcmlnaHQgPSBtX2dyYXBoW25vZGUuY2hpbGQyKCldLnByZWRpY3Rpb24oKTsKKyAgICAg
ICAgICAgIFNwZWN1bGF0ZWRUeXBlIGxlZnQgPSBub2RlLT5jaGlsZDEoKS0+cHJlZGljdGlvbigp
OworICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgcmlnaHQgPSBub2RlLT5jaGlsZDIoKS0+cHJl
ZGljdGlvbigpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBBZGRTcGVjdWxhdGlvbk1vZGUg
bW9kZSA9IERvbnRTcGVjdWxhdGVJbnRlZ2VyOwogICAgICAgICAgICAgCkBAIC0zNTgsMzkgKzM1
NiwzOSBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJl
ZGljdGlvbihzcGVjdWxhdGVkRG91YmxlVHlwZUZvclByZWRpY3Rpb25zKGxlZnQsIHJpZ2h0KSk7
CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmIChpc05vdFplcm8obm9kZS5jaGlsZDEo
KS5pbmRleCgpKSB8fCBpc05vdFplcm8obm9kZS5jaGlsZDIoKS5pbmRleCgpKSkKKyAgICAgICAg
ICAgIGlmIChpc05vdFplcm8obm9kZS0+Y2hpbGQxKCkubm9kZSgpKSB8fCBpc05vdFplcm8obm9k
ZS0+Y2hpbGQyKCkubm9kZSgpKSkKICAgICAgICAgICAgICAgICBmbGFncyAmPSB+Tm9kZU5lZWRz
TmVnWmVybzsKICAgICAgICAgICAgIGZsYWdzICY9IH5Ob2RlVXNlZEFzT3RoZXI7CiAgICAgICAg
ICAgICAKICAgICAgICAgICAgIGlmIChtb2RlICE9IFNwZWN1bGF0ZUludGVnZXIpCiAgICAgICAg
ICAgICAgICAgZmxhZ3MgfD0gTm9kZVVzZWRBc051bWJlcjsKICAgICAgICAgICAgIAotICAgICAg
ICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLm1lcmdlRmxhZ3MoZmxhZ3Mp
OwotICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQyKCldLm1lcmdlRmxh
Z3MoZmxhZ3MpOworICAgICAgICAgICAgY2hhbmdlZCB8PSBub2RlLT5jaGlsZDEoKS0+bWVyZ2VG
bGFncyhmbGFncyk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG5vZGUtPmNoaWxkMigpLT5tZXJn
ZUZsYWdzKGZsYWdzKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAg
ICAKICAgICAgICAgY2FzZSBBcml0aE5lZ2F0ZToKLSAgICAgICAgICAgIGlmIChtX2dyYXBoW25v
ZGUuY2hpbGQxKCldLnByZWRpY3Rpb24oKSkgeworICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxk
MSgpLT5wcmVkaWN0aW9uKCkpIHsKICAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC5uZWdhdGVT
aG91bGRTcGVjdWxhdGVJbnRlZ2VyKG5vZGUpKQogICAgICAgICAgICAgICAgICAgICBjaGFuZ2Vk
IHw9IG1lcmdlUHJlZGljdGlvbihTcGVjSW50MzIpOwogICAgICAgICAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVByZWRpY3Rpb24oc3BlY3VsYXRlZERv
dWJsZVR5cGVGb3JQcmVkaWN0aW9uKG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ucHJlZGljdGlvbigp
KSk7CisgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKHNwZWN1
bGF0ZWREb3VibGVUeXBlRm9yUHJlZGljdGlvbihub2RlLT5jaGlsZDEoKS0+cHJlZGljdGlvbigp
KSk7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGZsYWdzICY9IH5Ob2RlVXNlZEFzT3Ro
ZXI7CiAKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5tZXJn
ZUZsYWdzKGZsYWdzKTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbm9kZS0+Y2hpbGQxKCktPm1l
cmdlRmxhZ3MoZmxhZ3MpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICAg
ICAgY2FzZSBBcml0aE1pbjoKICAgICAgICAgY2FzZSBBcml0aE1heDogewotICAgICAgICAgICAg
U3BlY3VsYXRlZFR5cGUgbGVmdCA9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ucHJlZGljdGlvbigp
OwotICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgcmlnaHQgPSBtX2dyYXBoW25vZGUuY2hpbGQy
KCldLnByZWRpY3Rpb24oKTsKKyAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIGxlZnQgPSBub2Rl
LT5jaGlsZDEoKS0+cHJlZGljdGlvbigpOworICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgcmln
aHQgPSBub2RlLT5jaGlsZDIoKS0+cHJlZGljdGlvbigpOwogICAgICAgICAgICAgCiAgICAgICAg
ICAgICBpZiAobGVmdCAmJiByaWdodCkgewotICAgICAgICAgICAgICAgIGlmIChOb2RlOjpzaG91
bGRTcGVjdWxhdGVJbnRlZ2VyRm9yQXJpdGhtZXRpYyhtX2dyYXBoW25vZGUuY2hpbGQxKCldLCBt
X2dyYXBoW25vZGUuY2hpbGQyKCldKQotICAgICAgICAgICAgICAgICAgICAmJiBub2RlQ2FuU3Bl
Y3VsYXRlSW50ZWdlcihub2RlLmFyaXRoTm9kZUZsYWdzKCkpKQorICAgICAgICAgICAgICAgIGlm
IChOb2RlOjpzaG91bGRTcGVjdWxhdGVJbnRlZ2VyRm9yQXJpdGhtZXRpYyhub2RlLT5jaGlsZDEo
KS5ub2RlKCksIG5vZGUtPmNoaWxkMigpLm5vZGUoKSkKKyAgICAgICAgICAgICAgICAgICAgJiYg
bm9kZUNhblNwZWN1bGF0ZUludGVnZXIobm9kZS0+YXJpdGhOb2RlRmxhZ3MoKSkpCiAgICAgICAg
ICAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKFNwZWNJbnQzMik7CiAgICAg
ICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJl
ZGljdGlvbihzcGVjdWxhdGVkRG91YmxlVHlwZUZvclByZWRpY3Rpb25zKGxlZnQsIHJpZ2h0KSk7
CkBAIC0zOTksMTQgKzM5NywxNCBAQCBwcml2YXRlOgogICAgICAgICAgICAgZmxhZ3MgfD0gTm9k
ZVVzZWRBc051bWJlcjsKICAgICAgICAgICAgIGZsYWdzICY9IH5Ob2RlVXNlZEFzT3RoZXI7CiAK
LSAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5tZXJnZUZsYWdz
KGZsYWdzKTsKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaFtub2RlLmNoaWxkMigpXS5t
ZXJnZUZsYWdzKGZsYWdzKTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbm9kZS0+Y2hpbGQxKCkt
Pm1lcmdlRmxhZ3MoZmxhZ3MpOworICAgICAgICAgICAgY2hhbmdlZCB8PSBub2RlLT5jaGlsZDIo
KS0+bWVyZ2VGbGFncyhmbGFncyk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCiAg
ICAgICAgIGNhc2UgQXJpdGhNdWw6IHsKLSAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIGxlZnQg
PSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLnByZWRpY3Rpb24oKTsKLSAgICAgICAgICAgIFNwZWN1
bGF0ZWRUeXBlIHJpZ2h0ID0gbV9ncmFwaFtub2RlLmNoaWxkMigpXS5wcmVkaWN0aW9uKCk7Cisg
ICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSBsZWZ0ID0gbm9kZS0+Y2hpbGQxKCktPnByZWRpY3Rp
b24oKTsKKyAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHJpZ2h0ID0gbm9kZS0+Y2hpbGQyKCkt
PnByZWRpY3Rpb24oKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKGxlZnQgJiYgcmln
aHQpIHsKICAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC5tdWxTaG91bGRTcGVjdWxhdGVJbnRl
Z2VyKG5vZGUpKQpAQCAtNDIyLDggKzQyMCw4IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAvLyBp
dHNlbGYgdW5sZXNzIHdlIGNhbiBwcm92ZSB0aGF0IHRoZXJlIGlzIG5vIHdheSBmb3IgdGhlIHZh
bHVlcwogICAgICAgICAgICAgLy8gcHJvZHVjZWQgdG8gY2F1c2UgZG91YmxlIHJvdW5kaW5nLgog
ICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoIWlzV2l0aGluUG93ZXJPZlR3byhub2RlLmNo
aWxkMSgpLmluZGV4KCksIDIyKQotICAgICAgICAgICAgICAgICYmICFpc1dpdGhpblBvd2VyT2ZU
d28obm9kZS5jaGlsZDIoKS5pbmRleCgpLCAyMikpCisgICAgICAgICAgICBpZiAoIWlzV2l0aGlu
UG93ZXJPZlR3byhub2RlLT5jaGlsZDEoKS5ub2RlKCksIDIyKQorICAgICAgICAgICAgICAgICYm
ICFpc1dpdGhpblBvd2VyT2ZUd28obm9kZS0+Y2hpbGQyKCkubm9kZSgpLCAyMikpCiAgICAgICAg
ICAgICAgICAgZmxhZ3MgfD0gTm9kZVVzZWRBc051bWJlcjsKICAgICAgICAgICAgIAogICAgICAg
ICAgICAgY2hhbmdlZCB8PSBub2RlLm1lcmdlRmxhZ3MoZmxhZ3MpOwpAQCAtNDMxLDE4ICs0Mjks
MTggQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGZsYWdzIHw9IE5vZGVVc2VkQXNOdW1iZXIgfCBO
b2RlTmVlZHNOZWdaZXJvOwogICAgICAgICAgICAgZmxhZ3MgJj0gfk5vZGVVc2VkQXNPdGhlcjsK
IAotICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLm1lcmdlRmxh
Z3MoZmxhZ3MpOwotICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQyKCld
Lm1lcmdlRmxhZ3MoZmxhZ3MpOworICAgICAgICAgICAgY2hhbmdlZCB8PSBub2RlLT5jaGlsZDEo
KS0+bWVyZ2VGbGFncyhmbGFncyk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG5vZGUtPmNoaWxk
MigpLT5tZXJnZUZsYWdzKGZsYWdzKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAg
ICAgICAgICAgICAKICAgICAgICAgY2FzZSBBcml0aERpdjogewotICAgICAgICAgICAgU3BlY3Vs
YXRlZFR5cGUgbGVmdCA9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ucHJlZGljdGlvbigpOwotICAg
ICAgICAgICAgU3BlY3VsYXRlZFR5cGUgcmlnaHQgPSBtX2dyYXBoW25vZGUuY2hpbGQyKCldLnBy
ZWRpY3Rpb24oKTsKKyAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIGxlZnQgPSBub2RlLT5jaGls
ZDEoKS0+cHJlZGljdGlvbigpOworICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgcmlnaHQgPSBu
b2RlLT5jaGlsZDIoKS0+cHJlZGljdGlvbigpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBp
ZiAobGVmdCAmJiByaWdodCkgewotICAgICAgICAgICAgICAgIGlmIChOb2RlOjpzaG91bGRTcGVj
dWxhdGVJbnRlZ2VyRm9yQXJpdGhtZXRpYyhtX2dyYXBoW25vZGUuY2hpbGQxKCldLCBtX2dyYXBo
W25vZGUuY2hpbGQyKCldKQotICAgICAgICAgICAgICAgICAgICAmJiBub2RlQ2FuU3BlY3VsYXRl
SW50ZWdlcihub2RlLmFyaXRoTm9kZUZsYWdzKCkpKQorICAgICAgICAgICAgICAgIGlmIChOb2Rl
OjpzaG91bGRTcGVjdWxhdGVJbnRlZ2VyRm9yQXJpdGhtZXRpYyhub2RlLT5jaGlsZDEoKS5ub2Rl
KCksIG5vZGUtPmNoaWxkMigpLm5vZGUoKSkKKyAgICAgICAgICAgICAgICAgICAgJiYgbm9kZUNh
blNwZWN1bGF0ZUludGVnZXIobm9kZS0+YXJpdGhOb2RlRmxhZ3MoKSkpCiAgICAgICAgICAgICAg
ICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKFNwZWNJbnQzMik7CiAgICAgICAgICAg
ICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlv
bihTcGVjRG91YmxlKTsKQEAgLTQ1NiwxOCArNDU0LDE4IEBAIHByaXZhdGU6CiAgICAgICAgICAg
ICBmbGFncyB8PSBOb2RlVXNlZEFzTnVtYmVyIHwgTm9kZU5lZWRzTmVnWmVybzsKICAgICAgICAg
ICAgIGZsYWdzICY9IH5Ob2RlVXNlZEFzT3RoZXI7CiAKLSAgICAgICAgICAgIGNoYW5nZWQgfD0g
bV9ncmFwaFtub2RlLmNoaWxkMSgpXS5tZXJnZUZsYWdzKGZsYWdzKTsKLSAgICAgICAgICAgIGNo
YW5nZWQgfD0gbV9ncmFwaFtub2RlLmNoaWxkMigpXS5tZXJnZUZsYWdzKGZsYWdzKTsKKyAgICAg
ICAgICAgIGNoYW5nZWQgfD0gbm9kZS0+Y2hpbGQxKCktPm1lcmdlRmxhZ3MoZmxhZ3MpOworICAg
ICAgICAgICAgY2hhbmdlZCB8PSBub2RlLT5jaGlsZDIoKS0+bWVyZ2VGbGFncyhmbGFncyk7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgIGNhc2Ug
QXJpdGhNb2Q6IHsKLSAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIGxlZnQgPSBtX2dyYXBoW25v
ZGUuY2hpbGQxKCldLnByZWRpY3Rpb24oKTsKLSAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHJp
Z2h0ID0gbV9ncmFwaFtub2RlLmNoaWxkMigpXS5wcmVkaWN0aW9uKCk7CisgICAgICAgICAgICBT
cGVjdWxhdGVkVHlwZSBsZWZ0ID0gbm9kZS0+Y2hpbGQxKCktPnByZWRpY3Rpb24oKTsKKyAgICAg
ICAgICAgIFNwZWN1bGF0ZWRUeXBlIHJpZ2h0ID0gbm9kZS0+Y2hpbGQyKCktPnByZWRpY3Rpb24o
KTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKGxlZnQgJiYgcmlnaHQpIHsKLSAgICAg
ICAgICAgICAgICBpZiAoTm9kZTo6c2hvdWxkU3BlY3VsYXRlSW50ZWdlckZvckFyaXRobWV0aWMo
bV9ncmFwaFtub2RlLmNoaWxkMSgpXSwgbV9ncmFwaFtub2RlLmNoaWxkMigpXSkKLSAgICAgICAg
ICAgICAgICAgICAgJiYgbm9kZUNhblNwZWN1bGF0ZUludGVnZXIobm9kZS5hcml0aE5vZGVGbGFn
cygpKSkKKyAgICAgICAgICAgICAgICBpZiAoTm9kZTo6c2hvdWxkU3BlY3VsYXRlSW50ZWdlckZv
ckFyaXRobWV0aWMobm9kZS0+Y2hpbGQxKCkubm9kZSgpLCBub2RlLT5jaGlsZDIoKS5ub2RlKCkp
CisgICAgICAgICAgICAgICAgICAgICYmIG5vZGVDYW5TcGVjdWxhdGVJbnRlZ2VyKG5vZGUtPmFy
aXRoTm9kZUZsYWdzKCkpKQogICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJl
ZGljdGlvbihTcGVjSW50MzIpOwogICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAg
ICAgICAgY2hhbmdlZCB8PSBtZXJnZVByZWRpY3Rpb24oU3BlY0RvdWJsZSk7CkBAIC00NzYsOCAr
NDc0LDggQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGZsYWdzIHw9IE5vZGVVc2VkQXNOdW1iZXIg
fCBOb2RlTmVlZHNOZWdaZXJvOwogICAgICAgICAgICAgZmxhZ3MgJj0gfk5vZGVVc2VkQXNPdGhl
cjsKIAotICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLm1lcmdl
RmxhZ3MoZmxhZ3MpOwotICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQy
KCldLm1lcmdlRmxhZ3MoZmxhZ3MpOworICAgICAgICAgICAgY2hhbmdlZCB8PSBub2RlLT5jaGls
ZDEoKS0+bWVyZ2VGbGFncyhmbGFncyk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG5vZGUtPmNo
aWxkMigpLT5tZXJnZUZsYWdzKGZsYWdzKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9
CiAgICAgICAgICAgICAKQEAgLTQ4NSwxOSArNDgzLDE5IEBAIHByaXZhdGU6CiAgICAgICAgICAg
ICBjaGFuZ2VkIHw9IHNldFByZWRpY3Rpb24oU3BlY0RvdWJsZSk7CiAgICAgICAgICAgICBmbGFn
cyB8PSBOb2RlVXNlZEFzTnVtYmVyIHwgTm9kZU5lZWRzTmVnWmVybzsKICAgICAgICAgICAgIGZs
YWdzICY9IH5Ob2RlVXNlZEFzT3RoZXI7Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhb
bm9kZS5jaGlsZDEoKV0ubWVyZ2VGbGFncyhmbGFncyk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9
IG5vZGUtPmNoaWxkMSgpLT5tZXJnZUZsYWdzKGZsYWdzKTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBBcml0aEFiczogewotICAgICAg
ICAgICAgU3BlY3VsYXRlZFR5cGUgY2hpbGQgPSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLnByZWRp
Y3Rpb24oKTsKKyAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIGNoaWxkID0gbm9kZS0+Y2hpbGQx
KCktPnByZWRpY3Rpb24oKTsKICAgICAgICAgICAgIGlmIChpc0ludDMyU3BlY3VsYXRpb25Gb3JB
cml0aG1ldGljKGNoaWxkKQotICAgICAgICAgICAgICAgICYmIG5vZGVDYW5TcGVjdWxhdGVJbnRl
Z2VyKG5vZGUuYXJpdGhOb2RlRmxhZ3MoKSkpCisgICAgICAgICAgICAgICAgJiYgbm9kZUNhblNw
ZWN1bGF0ZUludGVnZXIobm9kZS0+YXJpdGhOb2RlRmxhZ3MoKSkpCiAgICAgICAgICAgICAgICAg
Y2hhbmdlZCB8PSBtZXJnZVByZWRpY3Rpb24oU3BlY0ludDMyKTsKICAgICAgICAgICAgIGVsc2UK
ICAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbihzcGVjdWxhdGVkRG91
YmxlVHlwZUZvclByZWRpY3Rpb24oY2hpbGQpKTsKIAotICAgICAgICAgICAgY2hhbmdlZCB8PSBt
X2dyYXBoW25vZGUuY2hpbGQxKCldLm1lcmdlRmxhZ3MoZmxhZ3MpOworICAgICAgICAgICAgY2hh
bmdlZCB8PSBub2RlLT5jaGlsZDEoKS0+bWVyZ2VGbGFncyhmbGFncyk7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCkBAIC01MjcsMzEgKzUyNSwzMSBAQCBwcml2
YXRlOgogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBHZXRCeUlkOiB7Ci0gICAgICAgICAgICBj
aGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbihub2RlLmdldEhlYXBQcmVkaWN0aW9uKCkpOworICAg
ICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVByZWRpY3Rpb24obm9kZS0+Z2V0SGVhcFByZWRpY3Rp
b24oKSk7CiAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlRGVmYXVsdEZsYWdzKG5vZGUpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBjYXNl
IEdldEJ5SWRGbHVzaDoKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKG5v
ZGUuZ2V0SGVhcFByZWRpY3Rpb24oKSk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJl
ZGljdGlvbihub2RlLT5nZXRIZWFwUHJlZGljdGlvbigpKTsKICAgICAgICAgICAgIGNoYW5nZWQg
fD0gbWVyZ2VEZWZhdWx0RmxhZ3Mobm9kZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgIAogICAgICAgICBjYXNlIEdldEJ5VmFsOiB7Ci0gICAgICAgICAgICBpZiAobV9ncmFwaFtu
b2RlLmNoaWxkMSgpXS5zaG91bGRTcGVjdWxhdGVGbG9hdDMyQXJyYXkoKQotICAgICAgICAgICAg
ICAgIHx8IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0uc2hvdWxkU3BlY3VsYXRlRmxvYXQ2NEFycmF5
KCkpCisgICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZUZsb2F0
MzJBcnJheSgpCisgICAgICAgICAgICAgICAgfHwgbm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1
bGF0ZUZsb2F0NjRBcnJheSgpKQogICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVk
aWN0aW9uKFNwZWNEb3VibGUpOwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIGNo
YW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKG5vZGUuZ2V0SGVhcFByZWRpY3Rpb24oKSk7CiAKLSAg
ICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5tZXJnZUZsYWdzKE5v
ZGVVc2VkQXNWYWx1ZSk7Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbm9kZS5jaGls
ZDIoKV0ubWVyZ2VGbGFncyhOb2RlVXNlZEFzTnVtYmVyIHwgTm9kZVVzZWRBc090aGVyIHwgTm9k
ZVVzZWRBc0ludCB8IE5vZGVVc2VkQXNJbnRMb2NhbGx5KTsKKyAgICAgICAgICAgIGNoYW5nZWQg
fD0gbm9kZS0+Y2hpbGQxKCktPm1lcmdlRmxhZ3MoTm9kZVVzZWRBc1ZhbHVlKTsKKyAgICAgICAg
ICAgIGNoYW5nZWQgfD0gbm9kZS0+Y2hpbGQyKCktPm1lcmdlRmxhZ3MoTm9kZVVzZWRBc051bWJl
ciB8IE5vZGVVc2VkQXNPdGhlciB8IE5vZGVVc2VkQXNJbnQgfCBOb2RlVXNlZEFzSW50TG9jYWxs
eSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAg
IGNhc2UgR2V0TXlBcmd1bWVudEJ5VmFsU2FmZTogewotICAgICAgICAgICAgY2hhbmdlZCB8PSBt
ZXJnZVByZWRpY3Rpb24obm9kZS5nZXRIZWFwUHJlZGljdGlvbigpKTsKLSAgICAgICAgICAgIGNo
YW5nZWQgfD0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5tZXJnZUZsYWdzKE5vZGVVc2VkQXNOdW1i
ZXIgfCBOb2RlVXNlZEFzT3RoZXIgfCBOb2RlVXNlZEFzSW50IHwgTm9kZVVzZWRBc0ludExvY2Fs
bHkpOworICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVByZWRpY3Rpb24obm9kZS0+Z2V0SGVh
cFByZWRpY3Rpb24oKSk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG5vZGUtPmNoaWxkMSgpLT5t
ZXJnZUZsYWdzKE5vZGVVc2VkQXNOdW1iZXIgfCBOb2RlVXNlZEFzT3RoZXIgfCBOb2RlVXNlZEFz
SW50IHwgTm9kZVVzZWRBc0ludExvY2FsbHkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IH0KICAgICAgICAgICAgIApAQCAtNTcxLDI1ICs1NjksMjMgQEAgcHJpdmF0ZToKICAgICAgICAg
fQogCiAgICAgICAgIGNhc2UgR2V0QnlPZmZzZXQ6IHsKLSAgICAgICAgICAgIGNoYW5nZWQgfD0g
bWVyZ2VQcmVkaWN0aW9uKG5vZGUuZ2V0SGVhcFByZWRpY3Rpb24oKSk7CisgICAgICAgICAgICBj
aGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbihub2RlLT5nZXRIZWFwUHJlZGljdGlvbigpKTsKICAg
ICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VEZWZhdWx0RmxhZ3Mobm9kZSk7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgQ2FsbDoKICAg
ICAgICAgY2FzZSBDb25zdHJ1Y3Q6IHsKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVk
aWN0aW9uKG5vZGUuZ2V0SGVhcFByZWRpY3Rpb24oKSk7Ci0gICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGNoaWxkSWR4ID0gbm9kZS5maXJzdENoaWxkKCk7Ci0gICAgICAgICAgICAgICAgIGNoaWxk
SWR4IDwgbm9kZS5maXJzdENoaWxkKCkgKyBub2RlLm51bUNoaWxkcmVuKCk7Ci0gICAgICAgICAg
ICAgICAgICsrY2hpbGRJZHgpIHsKLSAgICAgICAgICAgICAgICBFZGdlIGVkZ2UgPSBtX2dyYXBo
Lm1fdmFyQXJnQ2hpbGRyZW5bY2hpbGRJZHhdOwotICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0g
bV9ncmFwaFtlZGdlXS5tZXJnZUZsYWdzKE5vZGVVc2VkQXNWYWx1ZSk7Ci0gICAgICAgICAgICB9
CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbihub2RlLT5nZXRIZWFwUHJl
ZGljdGlvbigpKTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgY2hpbGRJZHggPSBub2RlLT5m
aXJzdENoaWxkKCk7CisgICAgICAgICAgICAgICAgIGNoaWxkSWR4IDwgbm9kZS0+Zmlyc3RDaGls
ZCgpICsgbm9kZS0+bnVtQ2hpbGRyZW4oKTsKKyAgICAgICAgICAgICAgICAgKytjaGlsZElkeCkK
KyAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGgubV92YXJBcmdDaGlsZHJlbltjaGls
ZElkeF0tPm1lcmdlRmxhZ3MoTm9kZVVzZWRBc1ZhbHVlKTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBDb252ZXJ0VGhpczogewotICAg
ICAgICAgICAgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiA9IG1fZ3JhcGhbbm9kZS5jaGlsZDEo
KV0ucHJlZGljdGlvbigpOworICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiA9
IG5vZGUtPmNoaWxkMSgpLT5wcmVkaWN0aW9uKCk7CiAgICAgICAgICAgICBpZiAocHJlZGljdGlv
bikgewogICAgICAgICAgICAgICAgIGlmIChwcmVkaWN0aW9uICYgflNwZWNPYmplY3RNYXNrKSB7
CiAgICAgICAgICAgICAgICAgICAgIHByZWRpY3Rpb24gJj0gU3BlY09iamVjdE1hc2s7CkBAIC02
MDIsMTMgKzU5OCwxMyBAQCBwcml2YXRlOgogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAg
ICAgY2FzZSBHZXRHbG9iYWxWYXI6IHsKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVk
aWN0aW9uKG5vZGUuZ2V0SGVhcFByZWRpY3Rpb24oKSk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9
IG1lcmdlUHJlZGljdGlvbihub2RlLT5nZXRIZWFwUHJlZGljdGlvbigpKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBQdXRHbG9iYWxW
YXI6CiAgICAgICAgIGNhc2UgUHV0R2xvYmFsVmFyQ2hlY2s6IHsKLSAgICAgICAgICAgIGNoYW5n
ZWQgfD0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5tZXJnZUZsYWdzKE5vZGVVc2VkQXNWYWx1ZSk7
CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG5vZGUtPmNoaWxkMSgpLT5tZXJnZUZsYWdzKE5vZGVV
c2VkQXNWYWx1ZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAg
CkBAIC02MTcsNyArNjEzLDcgQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBSZXNvbHZlQmFzZToK
ICAgICAgICAgY2FzZSBSZXNvbHZlQmFzZVN0cmljdFB1dDoKICAgICAgICAgY2FzZSBSZXNvbHZl
R2xvYmFsOiB7Ci0gICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uID0gbm9kZS5n
ZXRIZWFwUHJlZGljdGlvbigpOworICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlv
biA9IG5vZGUtPmdldEhlYXBQcmVkaWN0aW9uKCk7CiAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1l
cmdlUHJlZGljdGlvbihwcmVkaWN0aW9uKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9
CkBAIC02NDMsMTggKzYzOSwxNiBAQCBwcml2YXRlOgogICAgICAgICAgICAgCiAgICAgICAgIGNh
c2UgTmV3QXJyYXk6IHsKICAgICAgICAgICAgIGNoYW5nZWQgfD0gc2V0UHJlZGljdGlvbihTcGVj
QXJyYXkpOwotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBjaGlsZElkeCA9IG5vZGUuZmlyc3RD
aGlsZCgpOwotICAgICAgICAgICAgICAgICBjaGlsZElkeCA8IG5vZGUuZmlyc3RDaGlsZCgpICsg
bm9kZS5udW1DaGlsZHJlbigpOwotICAgICAgICAgICAgICAgICArK2NoaWxkSWR4KSB7Ci0gICAg
ICAgICAgICAgICAgRWRnZSBlZGdlID0gbV9ncmFwaC5tX3ZhckFyZ0NoaWxkcmVuW2NoaWxkSWR4
XTsKLSAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhbZWRnZV0ubWVyZ2VGbGFncyhO
b2RlVXNlZEFzVmFsdWUpOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBjaGlsZElkeCA9IG5vZGUtPmZpcnN0Q2hpbGQoKTsKKyAgICAgICAgICAgICAgICAgY2hpbGRJ
ZHggPCBub2RlLT5maXJzdENoaWxkKCkgKyBub2RlLT5udW1DaGlsZHJlbigpOworICAgICAgICAg
ICAgICAgICArK2NoaWxkSWR4KQorICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaC5t
X3ZhckFyZ0NoaWxkcmVuW2NoaWxkSWR4XS0+bWVyZ2VGbGFncyhOb2RlVXNlZEFzVmFsdWUpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBjYXNl
IE5ld0FycmF5V2l0aFNpemU6IHsKICAgICAgICAgICAgIGNoYW5nZWQgfD0gc2V0UHJlZGljdGlv
bihTcGVjQXJyYXkpOwotICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQx
KCldLm1lcmdlRmxhZ3MoTm9kZVVzZWRBc1ZhbHVlIHwgTm9kZVVzZWRBc0ludCB8IE5vZGVVc2Vk
QXNJbnRMb2NhbGx5KTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbm9kZS0+Y2hpbGQxKCktPm1l
cmdlRmxhZ3MoTm9kZVVzZWRBc1ZhbHVlIHwgTm9kZVVzZWRBc0ludCB8IE5vZGVVc2VkQXNJbnRM
b2NhbGx5KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKQEAg
LTY3MCwyMiArNjY0LDIyIEBAIHByaXZhdGU6CiAgICAgICAgIAogICAgICAgICBjYXNlIFN0cmlu
Z0NoYXJBdDogewogICAgICAgICAgICAgY2hhbmdlZCB8PSBzZXRQcmVkaWN0aW9uKFNwZWNTdHJp
bmcpOwotICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLm1lcmdl
RmxhZ3MoTm9kZVVzZWRBc1ZhbHVlKTsKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaFtu
b2RlLmNoaWxkMigpXS5tZXJnZUZsYWdzKE5vZGVVc2VkQXNOdW1iZXIgfCBOb2RlVXNlZEFzT3Ro
ZXIgfCBOb2RlVXNlZEFzSW50IHwgTm9kZVVzZWRBc0ludExvY2FsbHkpOworICAgICAgICAgICAg
Y2hhbmdlZCB8PSBub2RlLT5jaGlsZDEoKS0+bWVyZ2VGbGFncyhOb2RlVXNlZEFzVmFsdWUpOwor
ICAgICAgICAgICAgY2hhbmdlZCB8PSBub2RlLT5jaGlsZDIoKS0+bWVyZ2VGbGFncyhOb2RlVXNl
ZEFzTnVtYmVyIHwgTm9kZVVzZWRBc090aGVyIHwgTm9kZVVzZWRBc0ludCB8IE5vZGVVc2VkQXNJ
bnRMb2NhbGx5KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAK
ICAgICAgICAgY2FzZSBTdHJDYXQ6IHsKICAgICAgICAgICAgIGNoYW5nZWQgfD0gc2V0UHJlZGlj
dGlvbihTcGVjU3RyaW5nKTsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgY2hpbGRJZHggPSBu
b2RlLmZpcnN0Q2hpbGQoKTsKLSAgICAgICAgICAgICAgICAgY2hpbGRJZHggPCBub2RlLmZpcnN0
Q2hpbGQoKSArIG5vZGUubnVtQ2hpbGRyZW4oKTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQg
Y2hpbGRJZHggPSBub2RlLT5maXJzdENoaWxkKCk7CisgICAgICAgICAgICAgICAgIGNoaWxkSWR4
IDwgbm9kZS0+Zmlyc3RDaGlsZCgpICsgbm9kZS0+bnVtQ2hpbGRyZW4oKTsKICAgICAgICAgICAg
ICAgICAgKytjaGlsZElkeCkKLSAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbV9n
cmFwaC5tX3ZhckFyZ0NoaWxkcmVuW2NoaWxkSWR4XV0ubWVyZ2VGbGFncyhOb2RlVXNlZEFzTnVt
YmVyIHwgTm9kZVVzZWRBc090aGVyKTsKKyAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3Jh
cGgubV92YXJBcmdDaGlsZHJlbltjaGlsZElkeF0tPm1lcmdlRmxhZ3MoTm9kZVVzZWRBc051bWJl
ciB8IE5vZGVVc2VkQXNPdGhlcik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAg
ICAgICAgICAgCiAgICAgICAgIGNhc2UgVG9QcmltaXRpdmU6IHsKLSAgICAgICAgICAgIFNwZWN1
bGF0ZWRUeXBlIGNoaWxkID0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5wcmVkaWN0aW9uKCk7Cisg
ICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSBjaGlsZCA9IG5vZGUtPmNoaWxkMSgpLT5wcmVkaWN0
aW9uKCk7CiAgICAgICAgICAgICBpZiAoY2hpbGQpIHsKICAgICAgICAgICAgICAgICBpZiAoaXNP
YmplY3RTcGVjdWxhdGlvbihjaGlsZCkpIHsKICAgICAgICAgICAgICAgICAgICAgLy8gSSdkIGxv
dmUgdG8gZm9sZCB0aGlzIGNhc2UgaW50byB0aGUgY2FzZSBiZWxvdywgYnV0IEkgY2FuJ3QsIGJl
Y2F1c2UKQEAgLTcwMiw3ICs2OTYsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIH0gZWxz
ZQogICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbihjaGlsZCk7
CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbm9kZS5jaGls
ZDEoKV0ubWVyZ2VGbGFncyhmbGFncyk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG5vZGUtPmNo
aWxkMSgpLT5tZXJnZUZsYWdzKGZsYWdzKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9
CiAgICAgICAgICAgICAKQEAgLTc0NSw0MiArNzM5LDQ1IEBAIHByaXZhdGU6CiAgICAgICAgIH0K
ICAgICAgICAgCiAgICAgICAgIGNhc2UgUHV0QnlWYWw6Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9
IG1fZ3JhcGhbbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKV0ubWVyZ2VGbGFncyhOb2RlVXNl
ZEFzVmFsdWUpOwotICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW21fZ3JhcGgudmFyQXJn
Q2hpbGQobm9kZSwgMSldLm1lcmdlRmxhZ3MoTm9kZVVzZWRBc051bWJlciB8IE5vZGVVc2VkQXNP
dGhlciB8IE5vZGVVc2VkQXNJbnQgfCBOb2RlVXNlZEFzSW50TG9jYWxseSk7Ci0gICAgICAgICAg
ICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAyKV0ubWVyZ2VG
bGFncyhOb2RlVXNlZEFzVmFsdWUpOworICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoLnZh
ckFyZ0NoaWxkKG5vZGUsIDApLT5tZXJnZUZsYWdzKE5vZGVVc2VkQXNWYWx1ZSk7CisgICAgICAg
ICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSktPm1lcmdlRmxhZ3Mo
Tm9kZVVzZWRBc051bWJlciB8IE5vZGVVc2VkQXNPdGhlciB8IE5vZGVVc2VkQXNJbnQgfCBOb2Rl
VXNlZEFzSW50TG9jYWxseSk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGgudmFyQXJn
Q2hpbGQobm9kZSwgMiktPm1lcmdlRmxhZ3MoTm9kZVVzZWRBc1ZhbHVlKTsKICAgICAgICAgICAg
IGJyZWFrOwogCiAgICAgICAgIGNhc2UgUHV0U2NvcGVkVmFyOgotICAgICAgICAgICAgY2hhbmdl
ZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLm1lcmdlRmxhZ3MoTm9kZVVzZWRBc1ZhbHVlKTsK
LSAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaFtub2RlLmNoaWxkMygpXS5tZXJnZUZsYWdz
KE5vZGVVc2VkQXNWYWx1ZSk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG5vZGUtPmNoaWxkMSgp
LT5tZXJnZUZsYWdzKE5vZGVVc2VkQXNWYWx1ZSk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG5v
ZGUtPmNoaWxkMygpLT5tZXJnZUZsYWdzKE5vZGVVc2VkQXNWYWx1ZSk7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgIAogICAgICAgICBjYXNlIFJldHVybjoKICAgICAgICAgY2FzZSBU
aHJvdzoKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5tZXJn
ZUZsYWdzKE5vZGVVc2VkQXNWYWx1ZSk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG5vZGUtPmNo
aWxkMSgpLT5tZXJnZUZsYWdzKE5vZGVVc2VkQXNWYWx1ZSk7CiAgICAgICAgICAgICBicmVhazsK
IAogICAgICAgICBjYXNlIFB1dEJ5SWQ6CiAgICAgICAgIGNhc2UgUHV0QnlJZERpcmVjdDoKLSAg
ICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5tZXJnZUZsYWdzKE5v
ZGVVc2VkQXNWYWx1ZSk7Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbm9kZS5jaGls
ZDIoKV0ubWVyZ2VGbGFncyhOb2RlVXNlZEFzVmFsdWUpOworICAgICAgICAgICAgY2hhbmdlZCB8
PSBub2RlLT5jaGlsZDEoKS0+bWVyZ2VGbGFncyhOb2RlVXNlZEFzVmFsdWUpOworICAgICAgICAg
ICAgY2hhbmdlZCB8PSBub2RlLT5jaGlsZDIoKS0+bWVyZ2VGbGFncyhOb2RlVXNlZEFzVmFsdWUp
OwogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSBQdXRCeU9mZnNldDoKLSAgICAg
ICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5tZXJnZUZsYWdzKE5vZGVV
c2VkQXNWYWx1ZSk7Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbm9kZS5jaGlsZDMo
KV0ubWVyZ2VGbGFncyhOb2RlVXNlZEFzVmFsdWUpOworICAgICAgICAgICAgY2hhbmdlZCB8PSBu
b2RlLT5jaGlsZDEoKS0+bWVyZ2VGbGFncyhOb2RlVXNlZEFzVmFsdWUpOworICAgICAgICAgICAg
Y2hhbmdlZCB8PSBub2RlLT5jaGlsZDMoKS0+bWVyZ2VGbGFncyhOb2RlVXNlZEFzVmFsdWUpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBQaGk6CisgICAg
ICAgICAgICAvLyBQaGlzIHNob3VsZCBub3QgYmUgdmlzaWJsZSBoZXJlIHNpbmNlIHdlJ3JlIGl0
ZXJhdGluZyB0aGUgYWxsLWJ1dC1QaGkncworICAgICAgICAgICAgLy8gcGFydCBvZiBiYXNpYyBi
bG9ja3MuCisgICAgICAgICAgICBDUkFTSCgpOwogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAg
ICAgY2FzZSBTZXRDYWxsZWU6CiAgICAgICAgIGNhc2UgU2V0TXlTY29wZToKLSAgICAgICAgICAg
IGNoYW5nZWQgfD0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5tZXJnZUZsYWdzKE5vZGVVc2VkQXNW
YWx1ZSk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG5vZGUtPmNoaWxkMSgpLT5tZXJnZUZsYWdz
KE5vZGVVc2VkQXNWYWx1ZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAg
ICAgICBjYXNlIEdldFNjb3BlOgotICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW25vZGUu
Y2hpbGQxKCldLm1lcmdlRmxhZ3MoTm9kZVVzZWRBc1ZhbHVlKTsKKyAgICAgICAgICAgIGNoYW5n
ZWQgfD0gbm9kZS0+Y2hpbGQxKCktPm1lcmdlRmxhZ3MoTm9kZVVzZWRBc1ZhbHVlKTsKICAgICAg
ICAgICAgIGNoYW5nZWQgfD0gc2V0UHJlZGljdGlvbihTcGVjQ2VsbE90aGVyKTsKICAgICAgICAg
ICAgIGJyZWFrOwogCkBAIC04MjgsMzIgKzgyNSwzMiBAQCBwcml2YXRlOgogICAgICAgICB9CiAK
ICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCi0gICAgICAgIGRhdGFM
b2coU3BlY3VsYXRpb25EdW1wKG1fZ3JhcGhbbV9jb21waWxlSW5kZXhdLnByZWRpY3Rpb24oKSks
ICJcbiIpOworICAgICAgICBkYXRhTG9nKFNwZWN1bGF0aW9uRHVtcChub2RlLT5wcmVkaWN0aW9u
KCkpLCAiXG4iKTsKICNlbmRpZgogICAgICAgICAKICAgICAgICAgbV9jaGFuZ2VkIHw9IGNoYW5n
ZWQ7CiAgICAgfQogICAgICAgICAKLSAgICBib29sIG1lcmdlRGVmYXVsdEZsYWdzKE5vZGUmIG5v
ZGUpCisgICAgYm9vbCBtZXJnZURlZmF1bHRGbGFncyhOb2RlKiBub2RlKQogICAgIHsKICAgICAg
ICAgYm9vbCBjaGFuZ2VkID0gZmFsc2U7Ci0gICAgICAgIGlmIChub2RlLmZsYWdzKCkgJiBOb2Rl
SGFzVmFyQXJncykgewotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBjaGlsZElkeCA9IG5vZGUu
Zmlyc3RDaGlsZCgpOwotICAgICAgICAgICAgICAgICBjaGlsZElkeCA8IG5vZGUuZmlyc3RDaGls
ZCgpICsgbm9kZS5udW1DaGlsZHJlbigpOworICAgICAgICBpZiAobm9kZS0+ZmxhZ3MoKSAmIE5v
ZGVIYXNWYXJBcmdzKSB7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGNoaWxkSWR4ID0gbm9k
ZS0+Zmlyc3RDaGlsZCgpOworICAgICAgICAgICAgICAgICBjaGlsZElkeCA8IG5vZGUtPmZpcnN0
Q2hpbGQoKSArIG5vZGUtPm51bUNoaWxkcmVuKCk7CiAgICAgICAgICAgICAgICAgIGNoaWxkSWR4
KyspIHsKICAgICAgICAgICAgICAgICBpZiAoISFtX2dyYXBoLm1fdmFyQXJnQ2hpbGRyZW5bY2hp
bGRJZHhdKQotICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbV9ncmFwaC5t
X3ZhckFyZ0NoaWxkcmVuW2NoaWxkSWR4XV0ubWVyZ2VGbGFncyhOb2RlVXNlZEFzVmFsdWUpOwor
ICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGgubV92YXJBcmdDaGlsZHJlbltj
aGlsZElkeF0tPm1lcmdlRmxhZ3MoTm9kZVVzZWRBc1ZhbHVlKTsKICAgICAgICAgICAgIH0KICAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlmICghbm9kZS5jaGlsZDEoKSkKKyAgICAgICAg
ICAgIGlmICghbm9kZS0+Y2hpbGQxKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGNoYW5nZWQ7
Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ubWVyZ2VGbGFn
cyhOb2RlVXNlZEFzVmFsdWUpOwotICAgICAgICAgICAgaWYgKCFub2RlLmNoaWxkMigpKQorICAg
ICAgICAgICAgY2hhbmdlZCB8PSBub2RlLT5jaGlsZDEoKS0+bWVyZ2VGbGFncyhOb2RlVXNlZEFz
VmFsdWUpOworICAgICAgICAgICAgaWYgKCFub2RlLT5jaGlsZDIoKSkKICAgICAgICAgICAgICAg
ICByZXR1cm4gY2hhbmdlZDsKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaFtub2RlLmNo
aWxkMigpXS5tZXJnZUZsYWdzKE5vZGVVc2VkQXNWYWx1ZSk7Ci0gICAgICAgICAgICBpZiAoIW5v
ZGUuY2hpbGQzKCkpCisgICAgICAgICAgICBjaGFuZ2VkIHw9IG5vZGUtPmNoaWxkMigpLT5tZXJn
ZUZsYWdzKE5vZGVVc2VkQXNWYWx1ZSk7CisgICAgICAgICAgICBpZiAoIW5vZGUtPmNoaWxkMygp
KQogICAgICAgICAgICAgICAgIHJldHVybiBjaGFuZ2VkOwotICAgICAgICAgICAgY2hhbmdlZCB8
PSBtX2dyYXBoW25vZGUuY2hpbGQzKCldLm1lcmdlRmxhZ3MoTm9kZVVzZWRBc1ZhbHVlKTsKKyAg
ICAgICAgICAgIGNoYW5nZWQgfD0gbm9kZS0+Y2hpbGQzKCktPm1lcmdlRmxhZ3MoTm9kZVVzZWRB
c1ZhbHVlKTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gY2hhbmdlZDsKICAgICB9CkBAIC04
NjMsOCArODYwLDE2IEBAIHByaXZhdGU6CiAjaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElP
Tl9WRVJCT1NFKQogICAgICAgICBkYXRhTG9nRigiUHJvcGFnYXRpbmcgcHJlZGljdGlvbnMgZm9y
d2FyZCBbJXVdXG4iLCArK21fY291bnQpOwogI2VuZGlmCi0gICAgICAgIGZvciAobV9jb21waWxl
SW5kZXggPSAwOyBtX2NvbXBpbGVJbmRleCA8IG1fZ3JhcGguc2l6ZSgpOyArK21fY29tcGlsZUlu
ZGV4KQotICAgICAgICAgICAgcHJvcGFnYXRlKG1fZ3JhcGhbbV9jb21waWxlSW5kZXhdKTsKKyAg
ICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9ncmFw
aC5tX2Jsb2Nrcy5zaXplKCk7ICsrYmxvY2tJbmRleCkgeworICAgICAgICAgICAgQmFzaWNCbG9j
ayogYmxvY2sgPSBtX2dyYXBoLm1fYmxvY2tzW2Jsb2NrSW5kZXhdLmdldCgpOworICAgICAgICAg
ICAgaWYgKCFibG9jaykKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIEFT
U0VSVChibG9jay0+aXNSZWFjaGFibGUpOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IGJsb2NrLT5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgICAgIG1fY3VycmVudE5v
ZGUgPSBibG9jay0+YXQoaSk7CisgICAgICAgICAgICAgICAgcHJvcGFnYXRlKG1fY3VycmVudE5v
ZGUpOworICAgICAgICAgICAgfQorICAgICAgICB9CiAgICAgfQogICAgIAogICAgIHZvaWQgcHJv
cGFnYXRlQmFja3dhcmQoKQpAQCAtODcyLDEyMyArODc3LDEzOSBAQCBwcml2YXRlOgogI2lmIERG
R19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKICAgICAgICAgZGF0YUxvZ0YoIlBy
b3BhZ2F0aW5nIHByZWRpY3Rpb25zIGJhY2t3YXJkIFsldV1cbiIsICsrbV9jb3VudCk7CiAjZW5k
aWYKLSAgICAgICAgZm9yIChtX2NvbXBpbGVJbmRleCA9IG1fZ3JhcGguc2l6ZSgpOyBtX2NvbXBp
bGVJbmRleC0tID4gMDspCi0gICAgICAgICAgICBwcm9wYWdhdGUobV9ncmFwaFttX2NvbXBpbGVJ
bmRleF0pOworICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IG1fZ3JhcGgubV9i
bG9ja3Muc2l6ZSgpOyBibG9ja0luZGV4LS07KSB7CisgICAgICAgICAgICBCYXNpY0Jsb2NrKiBi
bG9jayA9IG1fZ3JhcGgubV9ibG9ja3NbYmxvY2tJbmRleF0uZ2V0KCk7CisgICAgICAgICAgICBp
ZiAoIWJsb2NrKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgQVNTRVJU
KGJsb2NrLT5pc1JlYWNoYWJsZSk7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBibG9j
ay0+c2l6ZSgpOyBpLS07KSB7CisgICAgICAgICAgICAgICAgbV9jdXJyZW50Tm9kZSA9IGJsb2Nr
LT5hdChpKTsKKyAgICAgICAgICAgICAgICBwcm9wYWdhdGUobV9jdXJyZW50Tm9kZSk7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KICAgICB9CiAgICAgCi0gICAgdm9pZCBkb1JvdW5kT2ZEb3Vi
bGVWb3RpbmcoKQorICAgIHZvaWQgZG9Eb3VibGVWb3RpbmcoTm9kZSogbm9kZSkKICAgICB7Ci0j
aWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQotICAgICAgICBkYXRhTG9n
RigiVm90aW5nIG9uIGRvdWJsZSB1c2VzIG9mIGxvY2FscyBbJXVdXG4iLCBtX2NvdW50KTsKLSNl
bmRpZgotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9ncmFwaC5tX3ZhcmlhYmxl
QWNjZXNzRGF0YS5zaXplKCk7ICsraSkKLSAgICAgICAgICAgIG1fZ3JhcGgubV92YXJpYWJsZUFj
Y2Vzc0RhdGFbaV0uZmluZCgpLT5jbGVhclZvdGVzKCk7Ci0gICAgICAgIGZvciAobV9jb21waWxl
SW5kZXggPSAwOyBtX2NvbXBpbGVJbmRleCA8IG1fZ3JhcGguc2l6ZSgpOyArK21fY29tcGlsZUlu
ZGV4KSB7Ci0gICAgICAgICAgICBOb2RlJiBub2RlID0gbV9ncmFwaFttX2NvbXBpbGVJbmRleF07
Ci0gICAgICAgICAgICBzd2l0Y2ggKG5vZGUub3AoKSkgewotICAgICAgICAgICAgY2FzZSBWYWx1
ZUFkZDoKLSAgICAgICAgICAgIGNhc2UgQXJpdGhBZGQ6Ci0gICAgICAgICAgICBjYXNlIEFyaXRo
U3ViOiB7Ci0gICAgICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgbGVmdCA9IG1fZ3JhcGhbbm9k
ZS5jaGlsZDEoKV0ucHJlZGljdGlvbigpOwotICAgICAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBl
IHJpZ2h0ID0gbV9ncmFwaFtub2RlLmNoaWxkMigpXS5wcmVkaWN0aW9uKCk7CisgICAgICAgIHN3
aXRjaCAobm9kZS0+b3AoKSkgeworICAgICAgICBjYXNlIFZhbHVlQWRkOgorICAgICAgICBjYXNl
IEFyaXRoQWRkOgorICAgICAgICBjYXNlIEFyaXRoU3ViOiB7CisgICAgICAgICAgICBTcGVjdWxh
dGVkVHlwZSBsZWZ0ID0gbm9kZS0+Y2hpbGQxKCktPnByZWRpY3Rpb24oKTsKKyAgICAgICAgICAg
IFNwZWN1bGF0ZWRUeXBlIHJpZ2h0ID0gbm9kZS0+Y2hpbGQyKCktPnByZWRpY3Rpb24oKTsKICAg
ICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBEb3VibGVCYWxsb3QgYmFsbG90OworICAg
ICAgICAgICAgRG91YmxlQmFsbG90IGJhbGxvdDsKICAgICAgICAgICAgICAgICAKLSAgICAgICAg
ICAgICAgICBpZiAoaXNOdW1iZXJTcGVjdWxhdGlvbkV4cGVjdGluZ0RlZmluZWQobGVmdCkgJiYg
aXNOdW1iZXJTcGVjdWxhdGlvbkV4cGVjdGluZ0RlZmluZWQocmlnaHQpCi0gICAgICAgICAgICAg
ICAgICAgICYmICFtX2dyYXBoLmFkZFNob3VsZFNwZWN1bGF0ZUludGVnZXIobm9kZSkpCi0gICAg
ICAgICAgICAgICAgICAgIGJhbGxvdCA9IFZvdGVEb3VibGU7Ci0gICAgICAgICAgICAgICAgZWxz
ZQotICAgICAgICAgICAgICAgICAgICBiYWxsb3QgPSBWb3RlVmFsdWU7CisgICAgICAgICAgICBp
ZiAoaXNOdW1iZXJTcGVjdWxhdGlvbkV4cGVjdGluZ0RlZmluZWQobGVmdCkgJiYgaXNOdW1iZXJT
cGVjdWxhdGlvbkV4cGVjdGluZ0RlZmluZWQocmlnaHQpCisgICAgICAgICAgICAgICAgJiYgIW1f
Z3JhcGguYWRkU2hvdWxkU3BlY3VsYXRlSW50ZWdlcihub2RlKSkKKyAgICAgICAgICAgICAgICBi
YWxsb3QgPSBWb3RlRG91YmxlOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGJh
bGxvdCA9IFZvdGVWYWx1ZTsKICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBtX2dy
YXBoLnZvdGUobm9kZS5jaGlsZDEoKSwgYmFsbG90KTsKLSAgICAgICAgICAgICAgICBtX2dyYXBo
LnZvdGUobm9kZS5jaGlsZDIoKSwgYmFsbG90KTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIG1fZ3JhcGgudm90ZU5vZGUobm9kZS0+Y2hpbGQxKCks
IGJhbGxvdCk7CisgICAgICAgICAgICBtX2dyYXBoLnZvdGVOb2RlKG5vZGUtPmNoaWxkMigpLCBi
YWxsb3QpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KICAgICAgICAgICAgICAgICAK
LSAgICAgICAgICAgIGNhc2UgQXJpdGhNdWw6IHsKLSAgICAgICAgICAgICAgICBTcGVjdWxhdGVk
VHlwZSBsZWZ0ID0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5wcmVkaWN0aW9uKCk7Ci0gICAgICAg
ICAgICAgICAgU3BlY3VsYXRlZFR5cGUgcmlnaHQgPSBtX2dyYXBoW25vZGUuY2hpbGQyKCldLnBy
ZWRpY3Rpb24oKTsKKyAgICAgICAgY2FzZSBBcml0aE11bDogeworICAgICAgICAgICAgU3BlY3Vs
YXRlZFR5cGUgbGVmdCA9IG5vZGUtPmNoaWxkMSgpLT5wcmVkaWN0aW9uKCk7CisgICAgICAgICAg
ICBTcGVjdWxhdGVkVHlwZSByaWdodCA9IG5vZGUtPmNoaWxkMigpLT5wcmVkaWN0aW9uKCk7CiAg
ICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgRG91YmxlQmFsbG90IGJhbGxvdDsKKyAg
ICAgICAgICAgIERvdWJsZUJhbGxvdCBiYWxsb3Q7CiAgICAgICAgICAgICAgICAgCi0gICAgICAg
ICAgICAgICAgaWYgKGlzTnVtYmVyU3BlY3VsYXRpb24obGVmdCkgJiYgaXNOdW1iZXJTcGVjdWxh
dGlvbihyaWdodCkKLSAgICAgICAgICAgICAgICAgICAgJiYgIW1fZ3JhcGgubXVsU2hvdWxkU3Bl
Y3VsYXRlSW50ZWdlcihub2RlKSkKLSAgICAgICAgICAgICAgICAgICAgYmFsbG90ID0gVm90ZURv
dWJsZTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIGJhbGxvdCA9
IFZvdGVWYWx1ZTsKKyAgICAgICAgICAgIGlmIChpc051bWJlclNwZWN1bGF0aW9uKGxlZnQpICYm
IGlzTnVtYmVyU3BlY3VsYXRpb24ocmlnaHQpCisgICAgICAgICAgICAgICAgJiYgIW1fZ3JhcGgu
bXVsU2hvdWxkU3BlY3VsYXRlSW50ZWdlcihub2RlKSkKKyAgICAgICAgICAgICAgICBiYWxsb3Qg
PSBWb3RlRG91YmxlOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGJhbGxvdCA9
IFZvdGVWYWx1ZTsKICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBtX2dyYXBoLnZv
dGUobm9kZS5jaGlsZDEoKSwgYmFsbG90KTsKLSAgICAgICAgICAgICAgICBtX2dyYXBoLnZvdGUo
bm9kZS5jaGlsZDIoKSwgYmFsbG90KTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIG1fZ3JhcGgudm90ZU5vZGUobm9kZS0+Y2hpbGQxKCksIGJhbGxv
dCk7CisgICAgICAgICAgICBtX2dyYXBoLnZvdGVOb2RlKG5vZGUtPmNoaWxkMigpLCBiYWxsb3Qp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KIAotICAgICAgICAgICAgY2FzZSBBcml0
aE1pbjoKLSAgICAgICAgICAgIGNhc2UgQXJpdGhNYXg6Ci0gICAgICAgICAgICBjYXNlIEFyaXRo
TW9kOgotICAgICAgICAgICAgY2FzZSBBcml0aERpdjogewotICAgICAgICAgICAgICAgIFNwZWN1
bGF0ZWRUeXBlIGxlZnQgPSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLnByZWRpY3Rpb24oKTsKLSAg
ICAgICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSByaWdodCA9IG1fZ3JhcGhbbm9kZS5jaGlsZDIo
KV0ucHJlZGljdGlvbigpOworICAgICAgICBjYXNlIEFyaXRoTWluOgorICAgICAgICBjYXNlIEFy
aXRoTWF4OgorICAgICAgICBjYXNlIEFyaXRoTW9kOgorICAgICAgICBjYXNlIEFyaXRoRGl2OiB7
CisgICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSBsZWZ0ID0gbm9kZS0+Y2hpbGQxKCktPnByZWRp
Y3Rpb24oKTsKKyAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHJpZ2h0ID0gbm9kZS0+Y2hpbGQy
KCktPnByZWRpY3Rpb24oKTsKICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBEb3Vi
bGVCYWxsb3QgYmFsbG90OworICAgICAgICAgICAgRG91YmxlQmFsbG90IGJhbGxvdDsKICAgICAg
ICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBpZiAoaXNOdW1iZXJTcGVjdWxhdGlvbihsZWZ0
KSAmJiBpc051bWJlclNwZWN1bGF0aW9uKHJpZ2h0KQotICAgICAgICAgICAgICAgICAgICAmJiAh
KE5vZGU6OnNob3VsZFNwZWN1bGF0ZUludGVnZXJGb3JBcml0aG1ldGljKG1fZ3JhcGhbbm9kZS5j
aGlsZDEoKV0sIG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0pCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgJiYgbm9kZS5jYW5TcGVjdWxhdGVJbnRlZ2VyKCkpKQotICAgICAgICAgICAgICAgICAgICBi
YWxsb3QgPSBWb3RlRG91YmxlOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAg
ICAgICAgYmFsbG90ID0gVm90ZVZhbHVlOworICAgICAgICAgICAgaWYgKGlzTnVtYmVyU3BlY3Vs
YXRpb24obGVmdCkgJiYgaXNOdW1iZXJTcGVjdWxhdGlvbihyaWdodCkKKyAgICAgICAgICAgICAg
ICAmJiAhKE5vZGU6OnNob3VsZFNwZWN1bGF0ZUludGVnZXJGb3JBcml0aG1ldGljKG5vZGUtPmNo
aWxkMSgpLm5vZGUoKSwgbm9kZS0+Y2hpbGQyKCkubm9kZSgpKQorICAgICAgICAgICAgICAgICAg
ICAgJiYgbm9kZS5jYW5TcGVjdWxhdGVJbnRlZ2VyKCkpKQorICAgICAgICAgICAgICAgIGJhbGxv
dCA9IFZvdGVEb3VibGU7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgYmFsbG90
ID0gVm90ZVZhbHVlOwogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIG1fZ3JhcGgu
dm90ZShub2RlLmNoaWxkMSgpLCBiYWxsb3QpOwotICAgICAgICAgICAgICAgIG1fZ3JhcGgudm90
ZShub2RlLmNoaWxkMigpLCBiYWxsb3QpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgfQorICAgICAgICAgICAgbV9ncmFwaC52b3RlTm9kZShub2RlLT5jaGlsZDEoKSwgYmFs
bG90KTsKKyAgICAgICAgICAgIG1fZ3JhcGgudm90ZU5vZGUobm9kZS0+Y2hpbGQyKCksIGJhbGxv
dCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQogICAgICAgICAgICAgICAgIAotICAg
ICAgICAgICAgY2FzZSBBcml0aEFiczoKLSAgICAgICAgICAgICAgICBEb3VibGVCYWxsb3QgYmFs
bG90OwotICAgICAgICAgICAgICAgIGlmICghKG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0uc2hvdWxk
U3BlY3VsYXRlSW50ZWdlckZvckFyaXRobWV0aWMoKQotICAgICAgICAgICAgICAgICAgICAgICYm
IG5vZGUuY2FuU3BlY3VsYXRlSW50ZWdlcigpKSkKLSAgICAgICAgICAgICAgICAgICAgYmFsbG90
ID0gVm90ZURvdWJsZTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAg
IGJhbGxvdCA9IFZvdGVWYWx1ZTsKKyAgICAgICAgY2FzZSBBcml0aEFiczoKKyAgICAgICAgICAg
IERvdWJsZUJhbGxvdCBiYWxsb3Q7CisgICAgICAgICAgICBpZiAoIShub2RlLT5jaGlsZDEoKS0+
c2hvdWxkU3BlY3VsYXRlSW50ZWdlckZvckFyaXRobWV0aWMoKQorICAgICAgICAgICAgICAgICAg
JiYgbm9kZS5jYW5TcGVjdWxhdGVJbnRlZ2VyKCkpKQorICAgICAgICAgICAgICAgIGJhbGxvdCA9
IFZvdGVEb3VibGU7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgYmFsbG90ID0g
Vm90ZVZhbHVlOwogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIG1fZ3JhcGgudm90
ZShub2RlLmNoaWxkMSgpLCBiYWxsb3QpOwotICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgbV9ncmFwaC52b3RlTm9kZShub2RlLT5jaGlsZDEoKSwgYmFsbG90KTsKKyAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgY2FzZSBBcml0aFNxcnQ6
Ci0gICAgICAgICAgICAgICAgbV9ncmFwaC52b3RlKG5vZGUuY2hpbGQxKCksIFZvdGVEb3VibGUp
OwotICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEFyaXRoU3FydDoKKyAgICAg
ICAgICAgIG1fZ3JhcGgudm90ZU5vZGUobm9kZS0+Y2hpbGQxKCksIFZvdGVEb3VibGUpOworICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBjYXNlIFNldExv
Y2FsOiB7Ci0gICAgICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiA9IG1fZ3Jh
cGhbbm9kZS5jaGlsZDEoKV0ucHJlZGljdGlvbigpOwotICAgICAgICAgICAgICAgIGlmIChpc0Rv
dWJsZVNwZWN1bGF0aW9uKHByZWRpY3Rpb24pKQotICAgICAgICAgICAgICAgICAgICBub2RlLnZh
cmlhYmxlQWNjZXNzRGF0YSgpLT52b3RlKFZvdGVEb3VibGUpOwotICAgICAgICAgICAgICAgIGVs
c2UgaWYgKCFpc051bWJlclNwZWN1bGF0aW9uKHByZWRpY3Rpb24pIHx8IGlzSW50MzJTcGVjdWxh
dGlvbihwcmVkaWN0aW9uKSkKLSAgICAgICAgICAgICAgICAgICAgbm9kZS52YXJpYWJsZUFjY2Vz
c0RhdGEoKS0+dm90ZShWb3RlVmFsdWUpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgfQorICAgICAgICBjYXNlIFNldExvY2FsOiB7CisgICAgICAgICAgICBTcGVjdWxhdGVk
VHlwZSBwcmVkaWN0aW9uID0gbm9kZS0+Y2hpbGQxKCktPnByZWRpY3Rpb24oKTsKKyAgICAgICAg
ICAgIGlmIChpc0RvdWJsZVNwZWN1bGF0aW9uKHByZWRpY3Rpb24pKQorICAgICAgICAgICAgICAg
IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT52b3RlKFZvdGVEb3VibGUpOworICAgICAgICAg
ICAgZWxzZSBpZiAoIWlzTnVtYmVyU3BlY3VsYXRpb24ocHJlZGljdGlvbikgfHwgaXNJbnQzMlNw
ZWN1bGF0aW9uKHByZWRpY3Rpb24pKQorICAgICAgICAgICAgICAgIG5vZGUtPnZhcmlhYmxlQWNj
ZXNzRGF0YSgpLT52b3RlKFZvdGVWYWx1ZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgY2FzZSBQdXRCeVZhbDoKLSAgICAgICAg
ICAgIGNhc2UgUHV0QnlWYWxBbGlhczogewotICAgICAgICAgICAgICAgIEVkZ2UgY2hpbGQxID0g
bV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKTsKLSAgICAgICAgICAgICAgICBFZGdlIGNoaWxk
MiA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSk7Ci0gICAgICAgICAgICAgICAgRWRnZSBj
aGlsZDMgPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpOwotICAgICAgICAgICAgICAgIG1f
Z3JhcGgudm90ZShjaGlsZDEsIFZvdGVWYWx1ZSk7Ci0gICAgICAgICAgICAgICAgbV9ncmFwaC52
b3RlKGNoaWxkMiwgVm90ZVZhbHVlKTsKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUuYXJy
YXlNb2RlKCkudHlwZSgpKSB7Ci0gICAgICAgICAgICAgICAgY2FzZSBBcnJheTo6RG91YmxlOgot
ICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLnZvdGUoY2hpbGQzLCBWb3RlRG91YmxlKTsKLSAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAg
ICAgICAgICAgICAgICAgbV9ncmFwaC52b3RlKGNoaWxkMywgVm90ZVZhbHVlKTsKLSAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICBjYXNlIFB1dEJ5
VmFsOgorICAgICAgICBjYXNlIFB1dEJ5VmFsQWxpYXM6IHsKKyAgICAgICAgICAgIEVkZ2UgY2hp
bGQxID0gbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKTsKKyAgICAgICAgICAgIEVkZ2UgY2hp
bGQyID0gbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKTsKKyAgICAgICAgICAgIEVkZ2UgY2hp
bGQzID0gbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAyKTsKKyAgICAgICAgICAgIG1fZ3JhcGgu
dm90ZU5vZGUoY2hpbGQxLCBWb3RlVmFsdWUpOworICAgICAgICAgICAgbV9ncmFwaC52b3RlTm9k
ZShjaGlsZDIsIFZvdGVWYWx1ZSk7CisgICAgICAgICAgICBzd2l0Y2ggKG5vZGUuYXJyYXlNb2Rl
KCkudHlwZSgpKSB7CisgICAgICAgICAgICBjYXNlIEFycmF5OjpEb3VibGU6CisgICAgICAgICAg
ICAgICAgbV9ncmFwaC52b3RlTm9kZShjaGlsZDMsIFZvdGVEb3VibGUpOwogICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIAogICAgICAgICAgICAg
ZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBtX2dyYXBoLnZvdGUobm9kZSwgVm90ZVZhbHVlKTsK
KyAgICAgICAgICAgICAgICBtX2dyYXBoLnZvdGVOb2RlKGNoaWxkMywgVm90ZVZhbHVlKTsKICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIG1f
Z3JhcGgudm90ZUNoaWxkcmVuKG5vZGUsIFZvdGVWYWx1ZSk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICB2b2lkIGRvUm91bmRPZkRvdWJsZVZvdGluZygp
CisgICAgeworI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKKyAgICAg
ICAgZGF0YUxvZ0YoIlZvdGluZyBvbiBkb3VibGUgdXNlcyBvZiBsb2NhbHMgWyV1XVxuIiwgbV9j
b3VudCk7CisjZW5kaWYKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fZ3JhcGgu
bV92YXJpYWJsZUFjY2Vzc0RhdGEuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICBtX2dyYXBoLm1f
dmFyaWFibGVBY2Nlc3NEYXRhW2ldLmZpbmQoKS0+Y2xlYXJWb3RlcygpOworICAgICAgICBmb3Ig
KEJhc2ljQmxvY2sgYmxvY2tJbmRleCA9IDA7IGkgPCBtX2dyYXBoLm1fYmxvY2tzLnNpemUoKTsg
KytibG9ja0luZGV4KSB7CisgICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGgu
bV9ibG9ja3NbYmxvY2tJbmRleF0uZ2V0KCk7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgYmxvY2stPnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICAgICAgbV9jdXJyZW50
Tm9kZSA9IGJsb2NrLT5hdChpKTsKKyAgICAgICAgICAgICAgICBkb0RvdWJsZVZvdGluZyhtX2N1
cnJlbnROb2RlKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgbV9ncmFwaC5tX3ZhcmlhYmxlQWNjZXNzRGF0YS5zaXplKCk7ICsraSkg
ewogICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSAm
bV9ncmFwaC5tX3ZhcmlhYmxlQWNjZXNzRGF0YVtpXTsKQEAgLTEwMTIsNyArMTAzMyw3IEBAIHBy
aXZhdGU6CiAgICAgICAgIH0KICAgICB9CiAgICAgCi0gICAgTm9kZUluZGV4IG1fY29tcGlsZUlu
ZGV4OworICAgIE5vZGUqIG1fY3VycmVudE5vZGU7CiAgICAgYm9vbCBtX2NoYW5nZWQ7CiAKICNp
ZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1Njb3JlQm9hcmQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1Njb3JlQm9hcmQuaAkocmV2aXNpb24gMTQwOTA0KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTY29yZUJvYXJkLmgJKHdvcmtpbmcgY29weSkKQEAg
LTQzLDkgKzQzLDggQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogLy8gYW5vdGhl
ciBub2RlLgogY2xhc3MgU2NvcmVCb2FyZCB7CiBwdWJsaWM6Ci0gICAgU2NvcmVCb2FyZChHcmFw
aCYgZ3JhcGgsIGNvbnN0IEJpdFZlY3RvciYgdXNlZFZhcnMpCi0gICAgICAgIDogbV9ncmFwaChn
cmFwaCkKLSAgICAgICAgLCBtX2hpZ2hXYXRlcm1hcmsoMCkKKyAgICBTY29yZUJvYXJkKGNvbnN0
IEJpdFZlY3RvciYgdXNlZFZhcnMpCisgICAgICAgIDogbV9oaWdoV2F0ZXJtYXJrKDApCiAgICAg
ewogICAgICAgICBtX3VzZWQuZmlsbCgwLCB1c2VkVmFycy5zaXplKCkpOwogICAgICAgICBtX2Zy
ZWUucmVzZXJ2ZUNhcGFjaXR5KHVzZWRWYXJzLnNpemUoKSk7CkBAIC0xMDIsMTQgKzEwMSwxMyBA
QCBwdWJsaWM6CiAKICAgICAvLyBJbmNyZW1lbnQgdGhlIHVzZWNvdW50IGZvciB0aGUgVmlydHVh
bFJlZ3NpdGVyIGFzc29jaWF0ZWQgd2l0aCAnY2hpbGQnLAogICAgIC8vIGlmIGl0IHJlYWNoZXMg
dGhlIG5vZGUncyByZWZjb3VudCwgZnJlZSB0aGUgVmlydHVhbFJlZ3NpdGVyLgotICAgIHZvaWQg
dXNlKE5vZGVJbmRleCBjaGlsZCkKKyAgICB2b2lkIHVzZShOb2RlKiBjaGlsZCkKICAgICB7Ci0g
ICAgICAgIGlmIChjaGlsZCA9PSBOb05vZGUpCisgICAgICAgIGlmICghY2hpbGQpCiAgICAgICAg
ICAgICByZXR1cm47CiAKICAgICAgICAgLy8gRmluZCB0aGUgdmlydHVhbCByZWdpc3RlciBudW1i
ZXIgZm9yIHRoaXMgY2hpbGQsIGluY3JlbWVudCBpdHMgdXNlIGNvdW50LgotICAgICAgICBOb2Rl
JiBub2RlID0gbV9ncmFwaFtjaGlsZF07Ci0gICAgICAgIHVpbnQzMl90IGluZGV4ID0gbm9kZS52
aXJ0dWFsUmVnaXN0ZXIoKTsKKyAgICAgICAgdWludDMyX3QgaW5kZXggPSBub2RlLT52aXJ0dWFs
UmVnaXN0ZXIoKTsKICAgICAgICAgQVNTRVJUKG1fdXNlZFtpbmRleF0gIT0gbWF4KCkpOwogICAg
ICAgICBpZiAobm9kZS5yZWZDb3VudCgpID09ICsrbV91c2VkW2luZGV4XSkgewogI2lmIERGR19F
TkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKQEAgLTEyMiwyMCArMTIwLDIwIEBAIHB1
YmxpYzoKICAgICAgICAgICAgIG1fZnJlZS5hcHBlbmQoaW5kZXgpOwogICAgICAgICB9IGVsc2Ug
ewogI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKLSAgICAgICAgICAg
IGRhdGFMb2dGKCIgVmlydHVhbCByZWdpc3RlciAldSBpcyBhdCAldS8ldSB1c2VzLiIsIGluZGV4
LCBtX3VzZWRbaW5kZXhdLCBub2RlLnJlZkNvdW50KCkpOworICAgICAgICAgICAgZGF0YUxvZ0Yo
IiBWaXJ0dWFsIHJlZ2lzdGVyICV1IGlzIGF0ICV1LyV1IHVzZXMuIiwgaW5kZXgsIG1fdXNlZFtp
bmRleF0sIG5vZGUtPnJlZkNvdW50KCkpOwogI2VuZGlmCiAgICAgICAgIH0KICAgICB9CiAgICAg
dm9pZCB1c2UoRWRnZSBjaGlsZCkKICAgICB7Ci0gICAgICAgIHVzZShjaGlsZC5pbmRleFVuY2hl
Y2tlZCgpKTsKKyAgICAgICAgdXNlKGNoaWxkLm5vZGUoKSk7CiAgICAgfQogICAgIAogICAgIHZv
aWQgdXNlSWZIYXNSZXN1bHQoRWRnZSBjaGlsZCkKICAgICB7CiAgICAgICAgIGlmICghY2hpbGQp
CiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGlmICghbV9ncmFwaFtjaGlsZF0uaGFzUmVz
dWx0KCkpCisgICAgICAgIGlmICghY2hpbGQtPmhhc1Jlc3VsdCgpKQogICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICB1c2UoY2hpbGQpOwogICAgIH0KQEAgLTE3NSw5ICsxNzMsNiBAQCBwdWJs
aWM6CiBwcml2YXRlOgogICAgIHN0YXRpYyB1aW50MzJfdCBtYXgoKSB7IHJldHVybiBzdGQ6Om51
bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCk7IH0KICAgICAKLSAgICAvLyBUaGUgZ3JhcGgs
IHNvIHdlIGNhbiBnZXQgcmVmQ291bnRzIGZvciBub2RlcywgdG8gZGV0ZXJtaW5lIHdoZW4gdmFs
dWVzIGFyZSBkZWFkLgotICAgIEdyYXBoJiBtX2dyYXBoOwotICAgIAogICAgIC8vIFRoZSBzaXpl
IG9mIHRoZSBzcGFuIG9mIHZpcnR1YWwgcmVnaXN0ZXJzIHRoYXQgdGhpcyBjb2RlIGJsb2NrIHdp
bGwgdXNlLgogICAgIHVuc2lnbmVkIG1faGlnaFdhdGVybWFyazsKICAgICAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHJldmlzaW9uIDE0
MDkwNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAko
d29ya2luZyBjb3B5KQpAQCAtMTEyLDE1ICsxMTIsNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBjcmVh
dGVPU1JFbnRyaWVzKCk7CiAgICAgdm9pZCBsaW5rT1NSRW50cmllcyhMaW5rQnVmZmVyJik7CiAK
LSAgICBOb2RlJiBhdChOb2RlSW5kZXggbm9kZUluZGV4KQotICAgIHsKLSAgICAgICAgcmV0dXJu
IG1faml0LmdyYXBoKClbbm9kZUluZGV4XTsKLSAgICB9Ci0gICAgTm9kZSYgYXQoRWRnZSBub2Rl
VXNlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGF0KG5vZGVVc2UuaW5kZXgoKSk7Ci0gICAgfQot
ICAgIAogICAgIEJsb2NrSW5kZXggbmV4dEJsb2NrKCkKICAgICB7CiAgICAgICAgIGZvciAoQmxv
Y2tJbmRleCByZXN1bHQgPSBtX2Jsb2NrICsgMTsgOyByZXN1bHQrKykgewpAQCAtMTMxLDE0ICsx
MjIsMTQgQEAgcHVibGljOgogICAgICAgICB9CiAgICAgfQogICAgIAotICAgIEdQUlJlZyBmaWxs
SW50ZWdlcihOb2RlSW5kZXgsIERhdGFGb3JtYXQmIHJldHVybkZvcm1hdCk7Ci0gICAgRlBSUmVn
IGZpbGxEb3VibGUoTm9kZUluZGV4KTsKKyAgICBHUFJSZWcgZmlsbEludGVnZXIoTm9kZSosIERh
dGFGb3JtYXQmIHJldHVybkZvcm1hdCk7CisgICAgRlBSUmVnIGZpbGxEb3VibGUoTm9kZSopOwog
I2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgR1BSUmVnIGZpbGxKU1ZhbHVlKE5vZGVJbmRleCk7Cisg
ICAgR1BSUmVnIGZpbGxKU1ZhbHVlKE5vZGUqKTsKICNlbGlmIFVTRShKU1ZBTFVFMzJfNjQpCi0g
ICAgYm9vbCBmaWxsSlNWYWx1ZShOb2RlSW5kZXgsIEdQUlJlZyYsIEdQUlJlZyYsIEZQUlJlZyYp
OworICAgIGJvb2wgZmlsbEpTVmFsdWUoTm9kZSosIEdQUlJlZyYsIEdQUlJlZyYsIEZQUlJlZyYp
OwogI2VuZGlmCi0gICAgR1BSUmVnIGZpbGxTdG9yYWdlKE5vZGVJbmRleCk7CisgICAgR1BSUmVn
IGZpbGxTdG9yYWdlKE5vZGUqKTsKIAogICAgIC8vIGxvY2sgYW5kIHVubG9jayBHUFIgJiBGUFIg
cmVnaXN0ZXJzLgogICAgIHZvaWQgbG9jayhHUFJSZWcgcmVnKQpAQCAtMTYwLDE1ICsxNTEsMTUg
QEAgcHVibGljOgogCiAgICAgLy8gVXNlZCB0byBjaGVjayB3aGV0aGVyIGEgY2hpbGQgbm9kZSBp
cyBvbiBpdHMgbGFzdCB1c2UsCiAgICAgLy8gYW5kIGl0cyBtYWNoaW5lIHJlZ2lzdGVycyBtYXkg
YmUgcmV1c2VkLgotICAgIGJvb2wgY2FuUmV1c2UoTm9kZUluZGV4IG5vZGVJbmRleCkKKyAgICBi
b29sIGNhblJldXNlKE5vZGUqIG5vZGUpCiAgICAgewotICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIg
dmlydHVhbFJlZ2lzdGVyID0gYXQobm9kZUluZGV4KS52aXJ0dWFsUmVnaXN0ZXIoKTsKKyAgICAg
ICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciA9IG5vZGUtPnZpcnR1YWxSZWdpc3Rl
cigpOwogICAgICAgICBHZW5lcmF0aW9uSW5mbyYgaW5mbyA9IG1fZ2VuZXJhdGlvbkluZm9bdmly
dHVhbFJlZ2lzdGVyXTsKICAgICAgICAgcmV0dXJuIGluZm8uY2FuUmV1c2UoKTsKICAgICB9CiAg
ICAgYm9vbCBjYW5SZXVzZShFZGdlIG5vZGVVc2UpCiAgICAgewotICAgICAgICByZXR1cm4gY2Fu
UmV1c2Uobm9kZVVzZS5pbmRleCgpKTsKKyAgICAgICAgcmV0dXJuIGNhblJldXNlKG5vZGVVc2Uu
bm9kZSgpKTsKICAgICB9CiAgICAgR1BSUmVnIHJldXNlKEdQUlJlZyByZWcpCiAgICAgewpAQCAt
MjI5LDI2ICsyMjAsMjUgQEAgcHVibGljOgogICAgIC8vIG1hY2hpbmUgcmVnaXN0ZXJzIGZpcnN0
IChieSBsb2NraW5nIFZpcnR1YWxSZWdzaXRlcnMgdGhhdCBhcmUgYWxyZWFkeQogICAgIC8vIGlu
IG1hY2hpbmUgcmVnaXN0ZXIgYmVmb3JlIGZpbGxpbmcgdGhvc2UgdGhhdCBhcmUgbm90IHdlIGF0
dGVtcHQgdG8KICAgICAvLyBhdm9pZCBzcGlsbGluZyB2YWx1ZXMgd2Ugd2lsbCBuZWVkIGltbWVk
aWF0ZWx5KS4KLSAgICBib29sIGlzRmlsbGVkKE5vZGVJbmRleCBub2RlSW5kZXgpCisgICAgYm9v
bCBpc0ZpbGxlZChOb2RlKiBub2RlKQogICAgIHsKLSAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHZp
cnR1YWxSZWdpc3RlciA9IGF0KG5vZGVJbmRleCkudmlydHVhbFJlZ2lzdGVyKCk7CisgICAgICAg
IFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIgPSBub2RlLT52aXJ0dWFsUmVnaXN0ZXIo
KTsKICAgICAgICAgR2VuZXJhdGlvbkluZm8mIGluZm8gPSBtX2dlbmVyYXRpb25JbmZvW3ZpcnR1
YWxSZWdpc3Rlcl07CiAgICAgICAgIHJldHVybiBpbmZvLnJlZ2lzdGVyRm9ybWF0KCkgIT0gRGF0
YUZvcm1hdE5vbmU7CiAgICAgfQotICAgIGJvb2wgaXNGaWxsZWREb3VibGUoTm9kZUluZGV4IG5v
ZGVJbmRleCkKKyAgICBib29sIGlzRmlsbGVkRG91YmxlKE5vZGUqIG5vZGUpCiAgICAgewotICAg
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyID0gYXQobm9kZUluZGV4KS52aXJ0
dWFsUmVnaXN0ZXIoKTsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciA9
IG5vZGUtPnZpcnR1YWxSZWdpc3RlcigpOwogICAgICAgICBHZW5lcmF0aW9uSW5mbyYgaW5mbyA9
IG1fZ2VuZXJhdGlvbkluZm9bdmlydHVhbFJlZ2lzdGVyXTsKICAgICAgICAgcmV0dXJuIGluZm8u
cmVnaXN0ZXJGb3JtYXQoKSA9PSBEYXRhRm9ybWF0RG91YmxlOwogICAgIH0KIAogICAgIC8vIENh
bGxlZCBvbiBhbiBvcGVyYW5kIG9uY2UgaXQgaGFzIGJlZW4gY29uc3VtZWQgYnkgYSBwYXJlbnQg
bm9kZS4KLSAgICB2b2lkIHVzZShOb2RlSW5kZXggbm9kZUluZGV4KQorICAgIHZvaWQgdXNlKE5v
ZGUqIG5vZGUpCiAgICAgewotICAgICAgICBOb2RlJiBub2RlID0gYXQobm9kZUluZGV4KTsKLSAg
ICAgICAgaWYgKCFub2RlLmhhc1Jlc3VsdCgpKQorICAgICAgICBpZiAoIW5vZGUtPmhhc1Jlc3Vs
dCgpKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVh
bFJlZ2lzdGVyID0gbm9kZS52aXJ0dWFsUmVnaXN0ZXIoKTsKKyAgICAgICAgVmlydHVhbFJlZ2lz
dGVyIHZpcnR1YWxSZWdpc3RlciA9IG5vZGUtPnZpcnR1YWxSZWdpc3RlcigpOwogICAgICAgICBH
ZW5lcmF0aW9uSW5mbyYgaW5mbyA9IG1fZ2VuZXJhdGlvbkluZm9bdmlydHVhbFJlZ2lzdGVyXTsK
IAogICAgICAgICAvLyB1c2UoKSByZXR1cm5zIHRydWUgd2hlbiB0aGUgdmFsdWUgYmVjb21lcyBk
ZWFkLCBhbmQgYW55CkBAIC0yNzUsNyArMjY1LDcgQEAgcHVibGljOgogICAgIH0KICAgICB2b2lk
IHVzZShFZGdlIG5vZGVVc2UpCiAgICAgewotICAgICAgICB1c2Uobm9kZVVzZS5pbmRleCgpKTsK
KyAgICAgICAgdXNlKG5vZGVVc2Uubm9kZSgpKTsKICAgICB9CiAgICAgCiAgICAgUmVnaXN0ZXJT
ZXQgdXNlZFJlZ2lzdGVycygpCkBAIC0zMDgsMTkgKzI5OCwxOSBAQCBwdWJsaWM6CiAKICAgICAv
LyBDYWxsZWQgYnkgdGhlIHNwZWN1bGF0aXZlIG9wZXJhbmQgdHlwZXMsIGJlbG93LCB0byBmaWxs
IG9wZXJhbmQgdG8KICAgICAvLyBtYWNoaW5lIHJlZ2lzdGVycywgaW1wbGljaXRseSBnZW5lcmF0
aW5nIHNwZWN1bGF0aW9uIGNoZWNrcyBhcyBuZWVkZWQuCi0gICAgR1BSUmVnIGZpbGxTcGVjdWxh
dGVJbnQoTm9kZUluZGV4LCBEYXRhRm9ybWF0JiByZXR1cm5Gb3JtYXQsIFNwZWN1bGF0aW9uRGly
ZWN0aW9uKTsKLSAgICBHUFJSZWcgZmlsbFNwZWN1bGF0ZUludFN0cmljdChOb2RlSW5kZXgpOwot
ICAgIEZQUlJlZyBmaWxsU3BlY3VsYXRlRG91YmxlKE5vZGVJbmRleCwgU3BlY3VsYXRpb25EaXJl
Y3Rpb24pOwotICAgIEdQUlJlZyBmaWxsU3BlY3VsYXRlQ2VsbChOb2RlSW5kZXgsIFNwZWN1bGF0
aW9uRGlyZWN0aW9uKTsKLSAgICBHUFJSZWcgZmlsbFNwZWN1bGF0ZUJvb2xlYW4oTm9kZUluZGV4
LCBTcGVjdWxhdGlvbkRpcmVjdGlvbik7Ci0gICAgR2VuZXJhdGVkT3BlcmFuZFR5cGUgY2hlY2tH
ZW5lcmF0ZWRUeXBlRm9yVG9JbnQzMihOb2RlSW5kZXgpOworICAgIEdQUlJlZyBmaWxsU3BlY3Vs
YXRlSW50KE5vZGUqLCBEYXRhRm9ybWF0JiByZXR1cm5Gb3JtYXQsIFNwZWN1bGF0aW9uRGlyZWN0
aW9uKTsKKyAgICBHUFJSZWcgZmlsbFNwZWN1bGF0ZUludFN0cmljdChOb2RlKik7CisgICAgRlBS
UmVnIGZpbGxTcGVjdWxhdGVEb3VibGUoTm9kZSosIFNwZWN1bGF0aW9uRGlyZWN0aW9uKTsKKyAg
ICBHUFJSZWcgZmlsbFNwZWN1bGF0ZUNlbGwoTm9kZSosIFNwZWN1bGF0aW9uRGlyZWN0aW9uKTsK
KyAgICBHUFJSZWcgZmlsbFNwZWN1bGF0ZUJvb2xlYW4oTm9kZSosIFNwZWN1bGF0aW9uRGlyZWN0
aW9uKTsKKyAgICBHZW5lcmF0ZWRPcGVyYW5kVHlwZSBjaGVja0dlbmVyYXRlZFR5cGVGb3JUb0lu
dDMyKE5vZGUqKTsKIAogICAgIHZvaWQgYWRkU2xvd1BhdGhHZW5lcmF0b3IoUGFzc093blB0cjxT
bG93UGF0aEdlbmVyYXRvcj4pOwogICAgIHZvaWQgcnVuU2xvd1BhdGhHZW5lcmF0b3JzKCk7CiAg
ICAgCi0gICAgdm9pZCBjb21waWxlKE5vZGUmKTsKLSAgICB2b2lkIG5vdGljZU9TUkJpcnRoKE5v
ZGVJbmRleCwgTm9kZSYpOwotICAgIHZvaWQgY29tcGlsZU1vdkhpbnQoTm9kZSYpOworICAgIHZv
aWQgY29tcGlsZShOb2RlKik7CisgICAgdm9pZCBub3RpY2VPU1JCaXJ0aChOb2RlKik7CisgICAg
dm9pZCBjb21waWxlTW92SGludChOb2RlKik7CiAgICAgdm9pZCBjb21waWxlKEJhc2ljQmxvY2sm
KTsKIAogICAgIHZvaWQgY2hlY2tBcmd1bWVudFR5cGVzKCk7CkBAIC01MzYsNDQgKzUyNiw0NCBA
QCBwdWJsaWM6CiAgICAgICAgIH0KICAgICB9CiAgICAgCi0gICAgYm9vbCBpc1N0cmljdEludDMy
KE5vZGVJbmRleCk7CisgICAgYm9vbCBpc1N0cmljdEludDMyKE5vZGUqKTsKICAgICAKLSAgICBi
b29sIGlzS25vd25JbnRlZ2VyKE5vZGVJbmRleCk7Ci0gICAgYm9vbCBpc0tub3duTnVtZXJpYyhO
b2RlSW5kZXgpOwotICAgIGJvb2wgaXNLbm93bkNlbGwoTm9kZUluZGV4KTsKKyAgICBib29sIGlz
S25vd25JbnRlZ2VyKE5vZGUqKTsKKyAgICBib29sIGlzS25vd25OdW1lcmljKE5vZGUqKTsKKyAg
ICBib29sIGlzS25vd25DZWxsKE5vZGUqKTsKICAgICAKLSAgICBib29sIGlzS25vd25Ob3RJbnRl
Z2VyKE5vZGVJbmRleCk7Ci0gICAgYm9vbCBpc0tub3duTm90TnVtYmVyKE5vZGVJbmRleCk7Cisg
ICAgYm9vbCBpc0tub3duTm90SW50ZWdlcihOb2RlKik7CisgICAgYm9vbCBpc0tub3duTm90TnVt
YmVyKE5vZGUqKTsKIAotICAgIGJvb2wgaXNLbm93bk5vdENlbGwoTm9kZUluZGV4KTsKKyAgICBi
b29sIGlzS25vd25Ob3RDZWxsKE5vZGUqKTsKICAgICAKICAgICAvLyBDaGVja3MvYWNjZXNzb3Jz
IGZvciBjb25zdGFudCB2YWx1ZXMuCi0gICAgYm9vbCBpc0NvbnN0YW50KE5vZGVJbmRleCBub2Rl
SW5kZXgpIHsgcmV0dXJuIG1faml0LmdyYXBoKCkuaXNDb25zdGFudChub2RlSW5kZXgpOyB9Ci0g
ICAgYm9vbCBpc0pTQ29uc3RhbnQoTm9kZUluZGV4IG5vZGVJbmRleCkgeyByZXR1cm4gbV9qaXQu
Z3JhcGgoKS5pc0pTQ29uc3RhbnQobm9kZUluZGV4KTsgfQotICAgIGJvb2wgaXNJbnQzMkNvbnN0
YW50KE5vZGVJbmRleCBub2RlSW5kZXgpIHsgcmV0dXJuIG1faml0LmdyYXBoKCkuaXNJbnQzMkNv
bnN0YW50KG5vZGVJbmRleCk7IH0KLSAgICBib29sIGlzRG91YmxlQ29uc3RhbnQoTm9kZUluZGV4
IG5vZGVJbmRleCkgeyByZXR1cm4gbV9qaXQuZ3JhcGgoKS5pc0RvdWJsZUNvbnN0YW50KG5vZGVJ
bmRleCk7IH0KLSAgICBib29sIGlzTnVtYmVyQ29uc3RhbnQoTm9kZUluZGV4IG5vZGVJbmRleCkg
eyByZXR1cm4gbV9qaXQuZ3JhcGgoKS5pc051bWJlckNvbnN0YW50KG5vZGVJbmRleCk7IH0KLSAg
ICBib29sIGlzQm9vbGVhbkNvbnN0YW50KE5vZGVJbmRleCBub2RlSW5kZXgpIHsgcmV0dXJuIG1f
aml0LmdyYXBoKCkuaXNCb29sZWFuQ29uc3RhbnQobm9kZUluZGV4KTsgfQotICAgIGJvb2wgaXNG
dW5jdGlvbkNvbnN0YW50KE5vZGVJbmRleCBub2RlSW5kZXgpIHsgcmV0dXJuIG1faml0LmdyYXBo
KCkuaXNGdW5jdGlvbkNvbnN0YW50KG5vZGVJbmRleCk7IH0KLSAgICBpbnQzMl90IHZhbHVlT2ZJ
bnQzMkNvbnN0YW50KE5vZGVJbmRleCBub2RlSW5kZXgpIHsgcmV0dXJuIG1faml0LmdyYXBoKCku
dmFsdWVPZkludDMyQ29uc3RhbnQobm9kZUluZGV4KTsgfQotICAgIGRvdWJsZSB2YWx1ZU9mTnVt
YmVyQ29uc3RhbnQoTm9kZUluZGV4IG5vZGVJbmRleCkgeyByZXR1cm4gbV9qaXQuZ3JhcGgoKS52
YWx1ZU9mTnVtYmVyQ29uc3RhbnQobm9kZUluZGV4KTsgfQotICAgIGludDMyX3QgdmFsdWVPZk51
bWJlckNvbnN0YW50QXNJbnQzMihOb2RlSW5kZXggbm9kZUluZGV4KQotICAgIHsKLSAgICAgICAg
aWYgKGlzSW50MzJDb25zdGFudChub2RlSW5kZXgpKQotICAgICAgICAgICAgcmV0dXJuIHZhbHVl
T2ZJbnQzMkNvbnN0YW50KG5vZGVJbmRleCk7Ci0gICAgICAgIHJldHVybiBKU0M6OnRvSW50MzIo
dmFsdWVPZk51bWJlckNvbnN0YW50KG5vZGVJbmRleCkpOworICAgIGJvb2wgaXNDb25zdGFudChO
b2RlKiBub2RlKSB7IHJldHVybiBtX2ppdC5ncmFwaCgpLmlzQ29uc3RhbnQobm9kZSk7IH0KKyAg
ICBib29sIGlzSlNDb25zdGFudChOb2RlKiBub2RlKSB7IHJldHVybiBtX2ppdC5ncmFwaCgpLmlz
SlNDb25zdGFudChub2RlKTsgfQorICAgIGJvb2wgaXNJbnQzMkNvbnN0YW50KE5vZGUqIG5vZGUp
IHsgcmV0dXJuIG1faml0LmdyYXBoKCkuaXNJbnQzMkNvbnN0YW50KG5vZGUpOyB9CisgICAgYm9v
bCBpc0RvdWJsZUNvbnN0YW50KE5vZGUqIG5vZGUpIHsgcmV0dXJuIG1faml0LmdyYXBoKCkuaXNE
b3VibGVDb25zdGFudChub2RlKTsgfQorICAgIGJvb2wgaXNOdW1iZXJDb25zdGFudChOb2RlKiBu
b2RlKSB7IHJldHVybiBtX2ppdC5ncmFwaCgpLmlzTnVtYmVyQ29uc3RhbnQobm9kZSk7IH0KKyAg
ICBib29sIGlzQm9vbGVhbkNvbnN0YW50KE5vZGUqIG5vZGUpIHsgcmV0dXJuIG1faml0LmdyYXBo
KCkuaXNCb29sZWFuQ29uc3RhbnQobm9kZSk7IH0KKyAgICBib29sIGlzRnVuY3Rpb25Db25zdGFu
dChOb2RlKiBub2RlKSB7IHJldHVybiBtX2ppdC5ncmFwaCgpLmlzRnVuY3Rpb25Db25zdGFudChu
b2RlKTsgfQorICAgIGludDMyX3QgdmFsdWVPZkludDMyQ29uc3RhbnQoTm9kZSogbm9kZSkgeyBy
ZXR1cm4gbV9qaXQuZ3JhcGgoKS52YWx1ZU9mSW50MzJDb25zdGFudChub2RlKTsgfQorICAgIGRv
dWJsZSB2YWx1ZU9mTnVtYmVyQ29uc3RhbnQoTm9kZSogbm9kZSkgeyByZXR1cm4gbV9qaXQuZ3Jh
cGgoKS52YWx1ZU9mTnVtYmVyQ29uc3RhbnQobm9kZSk7IH0KKyAgICBpbnQzMl90IHZhbHVlT2ZO
dW1iZXJDb25zdGFudEFzSW50MzIoTm9kZSogbm9kZSkKKyAgICB7CisgICAgICAgIGlmIChpc0lu
dDMyQ29uc3RhbnQobm9kZSkpCisgICAgICAgICAgICByZXR1cm4gdmFsdWVPZkludDMyQ29uc3Rh
bnQobm9kZSk7CisgICAgICAgIHJldHVybiBKU0M6OnRvSW50MzIodmFsdWVPZk51bWJlckNvbnN0
YW50KG5vZGUpKTsKICAgICB9CiAjaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICB2b2lkKiBhZGRy
ZXNzT2ZEb3VibGVDb25zdGFudChOb2RlSW5kZXggbm9kZUluZGV4KSB7IHJldHVybiBtX2ppdC5h
ZGRyZXNzT2ZEb3VibGVDb25zdGFudChub2RlSW5kZXgpOyB9CisgICAgdm9pZCogYWRkcmVzc09m
RG91YmxlQ29uc3RhbnQoTm9kZSogbm9kZSkgeyByZXR1cm4gbV9qaXQuYWRkcmVzc09mRG91Ymxl
Q29uc3RhbnQobm9kZSk7IH0KICNlbmRpZgotICAgIEpTVmFsdWUgdmFsdWVPZkpTQ29uc3RhbnQo
Tm9kZUluZGV4IG5vZGVJbmRleCkgeyByZXR1cm4gbV9qaXQuZ3JhcGgoKS52YWx1ZU9mSlNDb25z
dGFudChub2RlSW5kZXgpOyB9Ci0gICAgYm9vbCB2YWx1ZU9mQm9vbGVhbkNvbnN0YW50KE5vZGVJ
bmRleCBub2RlSW5kZXgpIHsgcmV0dXJuIG1faml0LmdyYXBoKCkudmFsdWVPZkJvb2xlYW5Db25z
dGFudChub2RlSW5kZXgpOyB9Ci0gICAgSlNGdW5jdGlvbiogdmFsdWVPZkZ1bmN0aW9uQ29uc3Rh
bnQoTm9kZUluZGV4IG5vZGVJbmRleCkgeyByZXR1cm4gbV9qaXQuZ3JhcGgoKS52YWx1ZU9mRnVu
Y3Rpb25Db25zdGFudChub2RlSW5kZXgpOyB9Ci0gICAgYm9vbCBpc051bGxDb25zdGFudChOb2Rl
SW5kZXggbm9kZUluZGV4KQorICAgIEpTVmFsdWUgdmFsdWVPZkpTQ29uc3RhbnQoTm9kZSogbm9k
ZSkgeyByZXR1cm4gbV9qaXQuZ3JhcGgoKS52YWx1ZU9mSlNDb25zdGFudChub2RlKTsgfQorICAg
IGJvb2wgdmFsdWVPZkJvb2xlYW5Db25zdGFudChOb2RlKiBub2RlKSB7IHJldHVybiBtX2ppdC5n
cmFwaCgpLnZhbHVlT2ZCb29sZWFuQ29uc3RhbnQobm9kZSk7IH0KKyAgICBKU0Z1bmN0aW9uKiB2
YWx1ZU9mRnVuY3Rpb25Db25zdGFudChOb2RlKiBub2RlKSB7IHJldHVybiBtX2ppdC5ncmFwaCgp
LnZhbHVlT2ZGdW5jdGlvbkNvbnN0YW50KG5vZGUpOyB9CisgICAgYm9vbCBpc051bGxDb25zdGFu
dChOb2RlKiBub2RlKQogICAgIHsKLSAgICAgICAgaWYgKCFpc0NvbnN0YW50KG5vZGVJbmRleCkp
CisgICAgICAgIGlmICghaXNDb25zdGFudChub2RlKSkKICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgcmV0dXJuIHZhbHVlT2ZKU0NvbnN0YW50KG5vZGVJbmRleCkuaXNOdWxsKCk7
CisgICAgICAgIHJldHVybiB2YWx1ZU9mSlNDb25zdGFudChub2RlKS5pc051bGwoKTsKICAgICB9
CiAKICAgICBJZGVudGlmaWVyKiBpZGVudGlmaWVyKHVuc2lnbmVkIGluZGV4KQpAQCAtNjI2LDkg
KzYxNiw5IEBAIHB1YmxpYzoKICNlbmRpZgogCiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBNYWNy
b0Fzc2VtYmxlcjo6SW1tNjQgdmFsdWVPZkpTQ29uc3RhbnRBc0ltbTY0KE5vZGVJbmRleCBub2Rl
SW5kZXgpCisgICAgTWFjcm9Bc3NlbWJsZXI6OkltbTY0IHZhbHVlT2ZKU0NvbnN0YW50QXNJbW02
NChOb2RlKiBub2RlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyOjpJbW02
NChKU1ZhbHVlOjplbmNvZGUodmFsdWVPZkpTQ29uc3RhbnQobm9kZUluZGV4KSkpOworICAgICAg
ICByZXR1cm4gTWFjcm9Bc3NlbWJsZXI6OkltbTY0KEpTVmFsdWU6OmVuY29kZSh2YWx1ZU9mSlND
b25zdGFudChub2RlKSkpOwogICAgIH0KICNlbmRpZgogCkBAIC03MDUsMTkgKzY5NSwxOSBAQCBw
dWJsaWM6CiAKICAgICAgICAgLy8gQ2hlY2sgdGhhdCBubyBpbnRlcnZlbmluZyBub2RlcyB3aWxs
IGJlIGdlbmVyYXRlZC4KICAgICAgICAgZm9yICh1bnNpZ25lZCBpbmRleCA9IG1faW5kZXhJbkJs
b2NrICsgMTsgaW5kZXggPCBibG9jay0+c2l6ZSgpIC0gMTsgKytpbmRleCkgewotICAgICAgICAg
ICAgTm9kZUluZGV4IG5vZGVJbmRleCA9IGJsb2NrLT5hdChpbmRleCk7Ci0gICAgICAgICAgICBp
ZiAoYXQobm9kZUluZGV4KS5zaG91bGRHZW5lcmF0ZSgpKQorICAgICAgICAgICAgTm9kZSogbm9k
ZSA9IGJsb2NrLT5hdChpbmRleCk7CisgICAgICAgICAgICBpZiAobm9kZS0+c2hvdWxkR2VuZXJh
dGUoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gVUlOVF9NQVg7CiAgICAgICAgIH0KIAogICAg
ICAgICAvLyBDaGVjayBpZiB0aGUgbGFzdE5vZGUgaXMgYSBicmFuY2ggb24gdGhpcyBub2RlLgot
ICAgICAgICBOb2RlJiBsYXN0Tm9kZSA9IGF0KGJsb2NrLT5sYXN0KCkpOwotICAgICAgICByZXR1
cm4gbGFzdE5vZGUub3AoKSA9PSBCcmFuY2ggJiYgbGFzdE5vZGUuY2hpbGQxKCkuaW5kZXgoKSA9
PSBtX2NvbXBpbGVJbmRleCA/IGJsb2NrLT5zaXplKCkgLSAxIDogVUlOVF9NQVg7CisgICAgICAg
IE5vZGUqIGxhc3ROb2RlID0gYmxvY2stPmxhc3QoKTsKKyAgICAgICAgcmV0dXJuIGxhc3ROb2Rl
LT5vcCgpID09IEJyYW5jaCAmJiBsYXN0Tm9kZS0+Y2hpbGQxKCkgPT0gbV9jdXJyZW50Tm9kZSA/
IGJsb2NrLT5zaXplKCkgLSAxIDogVUlOVF9NQVg7CiAgICAgfQogICAgIAotICAgIHZvaWQgbm9u
U3BlY3VsYXRpdmVWYWx1ZVRvTnVtYmVyKE5vZGUmKTsKLSAgICB2b2lkIG5vblNwZWN1bGF0aXZl
VmFsdWVUb0ludDMyKE5vZGUmKTsKLSAgICB2b2lkIG5vblNwZWN1bGF0aXZlVUludDMyVG9OdW1i
ZXIoTm9kZSYpOworICAgIHZvaWQgbm9uU3BlY3VsYXRpdmVWYWx1ZVRvTnVtYmVyKE5vZGUqKTsK
KyAgICB2b2lkIG5vblNwZWN1bGF0aXZlVmFsdWVUb0ludDMyKE5vZGUqKTsKKyAgICB2b2lkIG5v
blNwZWN1bGF0aXZlVUludDMyVG9OdW1iZXIoTm9kZSopOwogCiAjaWYgVVNFKEpTVkFMVUU2NCkK
ICAgICB2b2lkIGNhY2hlZEdldEJ5SWQoQ29kZU9yaWdpbiwgR1BSUmVnIGJhc2VHUFIsIEdQUlJl
ZyByZXN1bHRHUFIsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIEpJVENvbXBpbGVyOjpKdW1w
IHNsb3dQYXRoVGFyZ2V0ID0gSklUQ29tcGlsZXI6Okp1bXAoKSwgU3BpbGxSZWdpc3RlcnNNb2Rl
ID0gTmVlZFRvU3BpbGwpOwpAQCAtNzI4LDE5ICs3MTgsMTkgQEAgcHVibGljOgogI2VuZGlmCiAK
ICAgICB2b2lkIG5vblNwZWN1bGF0aXZlTm9uUGVlcGhvbGVDb21wYXJlTnVsbChFZGdlIG9wZXJh
bmQsIGJvb2wgaW52ZXJ0ID0gZmFsc2UpOwotICAgIHZvaWQgbm9uU3BlY3VsYXRpdmVQZWVwaG9s
ZUJyYW5jaE51bGwoRWRnZSBvcGVyYW5kLCBOb2RlSW5kZXggYnJhbmNoTm9kZUluZGV4LCBib29s
IGludmVydCA9IGZhbHNlKTsKLSAgICBib29sIG5vblNwZWN1bGF0aXZlQ29tcGFyZU51bGwoTm9k
ZSYsIEVkZ2Ugb3BlcmFuZCwgYm9vbCBpbnZlcnQgPSBmYWxzZSk7CisgICAgdm9pZCBub25TcGVj
dWxhdGl2ZVBlZXBob2xlQnJhbmNoTnVsbChFZGdlIG9wZXJhbmQsIE5vZGUqIGJyYW5jaE5vZGUs
IGJvb2wgaW52ZXJ0ID0gZmFsc2UpOworICAgIGJvb2wgbm9uU3BlY3VsYXRpdmVDb21wYXJlTnVs
bChOb2RlKiwgRWRnZSBvcGVyYW5kLCBib29sIGludmVydCA9IGZhbHNlKTsKICAgICAKLSAgICB2
b2lkIG5vblNwZWN1bGF0aXZlUGVlcGhvbGVCcmFuY2goTm9kZSYsIE5vZGVJbmRleCBicmFuY2hO
b2RlSW5kZXgsIE1hY3JvQXNzZW1ibGVyOjpSZWxhdGlvbmFsQ29uZGl0aW9uLCBTX0RGR09wZXJh
dGlvbl9FSkogaGVscGVyRnVuY3Rpb24pOwotICAgIHZvaWQgbm9uU3BlY3VsYXRpdmVOb25QZWVw
aG9sZUNvbXBhcmUoTm9kZSYsIE1hY3JvQXNzZW1ibGVyOjpSZWxhdGlvbmFsQ29uZGl0aW9uLCBT
X0RGR09wZXJhdGlvbl9FSkogaGVscGVyRnVuY3Rpb24pOwotICAgIGJvb2wgbm9uU3BlY3VsYXRp
dmVDb21wYXJlKE5vZGUmLCBNYWNyb0Fzc2VtYmxlcjo6UmVsYXRpb25hbENvbmRpdGlvbiwgU19E
RkdPcGVyYXRpb25fRUpKIGhlbHBlckZ1bmN0aW9uKTsKLSAgICAKLSAgICB2b2lkIG5vblNwZWN1
bGF0aXZlUGVlcGhvbGVTdHJpY3RFcShOb2RlJiwgTm9kZUluZGV4IGJyYW5jaE5vZGVJbmRleCwg
Ym9vbCBpbnZlcnQgPSBmYWxzZSk7Ci0gICAgdm9pZCBub25TcGVjdWxhdGl2ZU5vblBlZXBob2xl
U3RyaWN0RXEoTm9kZSYsIGJvb2wgaW52ZXJ0ID0gZmFsc2UpOwotICAgIGJvb2wgbm9uU3BlY3Vs
YXRpdmVTdHJpY3RFcShOb2RlJiwgYm9vbCBpbnZlcnQgPSBmYWxzZSk7CisgICAgdm9pZCBub25T
cGVjdWxhdGl2ZVBlZXBob2xlQnJhbmNoKE5vZGUqLCBOb2RlKiBicmFuY2hOb2RlLCBNYWNyb0Fz
c2VtYmxlcjo6UmVsYXRpb25hbENvbmRpdGlvbiwgU19ERkdPcGVyYXRpb25fRUpKIGhlbHBlckZ1
bmN0aW9uKTsKKyAgICB2b2lkIG5vblNwZWN1bGF0aXZlTm9uUGVlcGhvbGVDb21wYXJlKE5vZGUq
LCBNYWNyb0Fzc2VtYmxlcjo6UmVsYXRpb25hbENvbmRpdGlvbiwgU19ERkdPcGVyYXRpb25fRUpK
IGhlbHBlckZ1bmN0aW9uKTsKKyAgICBib29sIG5vblNwZWN1bGF0aXZlQ29tcGFyZShOb2RlKiwg
TWFjcm9Bc3NlbWJsZXI6OlJlbGF0aW9uYWxDb25kaXRpb24sIFNfREZHT3BlcmF0aW9uX0VKSiBo
ZWxwZXJGdW5jdGlvbik7CisgICAgCisgICAgdm9pZCBub25TcGVjdWxhdGl2ZVBlZXBob2xlU3Ry
aWN0RXEoTm9kZSosIE5vZGUqIGJyYW5jaE5vZGUsIGJvb2wgaW52ZXJ0ID0gZmFsc2UpOworICAg
IHZvaWQgbm9uU3BlY3VsYXRpdmVOb25QZWVwaG9sZVN0cmljdEVxKE5vZGUqLCBib29sIGludmVy
dCA9IGZhbHNlKTsKKyAgICBib29sIG5vblNwZWN1bGF0aXZlU3RyaWN0RXEoTm9kZSosIGJvb2wg
aW52ZXJ0ID0gZmFsc2UpOwogICAgIAotICAgIHZvaWQgY29tcGlsZUluc3RhbmNlT2ZGb3JPYmpl
Y3QoTm9kZSYsIEdQUlJlZyB2YWx1ZVJlZywgR1BSUmVnIHByb3RvdHlwZVJlZywgR1BSUmVnIHNj
cmF0Y2hBbmRSZXN1bHRSZWcpOwotICAgIHZvaWQgY29tcGlsZUluc3RhbmNlT2YoTm9kZSYpOwor
ICAgIHZvaWQgY29tcGlsZUluc3RhbmNlT2ZGb3JPYmplY3QoTm9kZSosIEdQUlJlZyB2YWx1ZVJl
ZywgR1BSUmVnIHByb3RvdHlwZVJlZywgR1BSUmVnIHNjcmF0Y2hBbmRSZXN1bHRSZWcpOworICAg
IHZvaWQgY29tcGlsZUluc3RhbmNlT2YoTm9kZSopOwogICAgIAogICAgIC8vIEFjY2VzcyB0byBv
dXIgZml4ZWQgY2FsbGVlIENhbGxGcmFtZS4KICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyBj
YWxsRnJhbWVTbG90KGludCBzbG90KQpAQCAtNzc0LDEzNyArNzY0LDEyOCBAQCBwdWJsaWM6CiAg
ICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVS
ZWdpc3RlciwgKG1faml0LmNvZGVCbG9jaygpLT5tX251bUNhbGxlZVJlZ2lzdGVycyArIGFyZ3Vt
ZW50VG9PcGVyYW5kKGFyZ3VtZW50KSkgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3Rl
cikpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy5wYXls
b2FkKSk7CiAgICAgfQogCi0gICAgdm9pZCBlbWl0Q2FsbChOb2RlJik7CisgICAgdm9pZCBlbWl0
Q2FsbChOb2RlKik7CiAgICAgCiAgICAgLy8gQ2FsbGVkIG9uY2UgYSBub2RlIGhhcyBjb21wbGV0
ZWQgY29kZSBnZW5lcmF0aW9uIGJ1dCBwcmlvciB0byBzZXR0aW5nCiAgICAgLy8gaXRzIHJlc3Vs
dCwgdG8gZnJlZSB1cCBpdHMgY2hpbGRyZW4uIChUaGlzIG11c3QgaGFwcGVuIHByaW9yIHRvIHNl
dHRpbmcKICAgICAvLyB0aGUgbm9kZXMgcmVzdWx0LCBzaW5jZSB0aGUgbm9kZSBtYXkgaGF2ZSB0
aGUgc2FtZSBWaXJ0dWFsUmVnaXN0ZXIgYXMKICAgICAvLyBhIGNoaWxkLCBhbmQgYXMgc3VjaCB3
aWxsIHVzZSB0aGUgc2FtZSBHZW5lcmF0aW9JbmZvKS4KLSAgICB2b2lkIHVzZUNoaWxkcmVuKE5v
ZGUmKTsKKyAgICB2b2lkIHVzZUNoaWxkcmVuKE5vZGUqKTsKIAogICAgIC8vIFRoZXNlIG1ldGhv
ZCBjYWxsZWQgdG8gaW5pdGlhbGl6ZSB0aGUgdGhlIEdlbmVyYXRpb25JbmZvCiAgICAgLy8gdG8g
ZGVzY3JpYmUgdGhlIHJlc3VsdCBvZiBhbiBvcGVyYXRpb24uCi0gICAgdm9pZCBpbnRlZ2VyUmVz
dWx0KEdQUlJlZyByZWcsIE5vZGVJbmRleCBub2RlSW5kZXgsIERhdGFGb3JtYXQgZm9ybWF0ID0g
RGF0YUZvcm1hdEludGVnZXIsIFVzZUNoaWxkcmVuTW9kZSBtb2RlID0gQ2FsbFVzZUNoaWxkcmVu
KQorICAgIHZvaWQgaW50ZWdlclJlc3VsdChHUFJSZWcgcmVnLCBOb2RlKiBub2RlLCBEYXRhRm9y
bWF0IGZvcm1hdCA9IERhdGFGb3JtYXRJbnRlZ2VyLCBVc2VDaGlsZHJlbk1vZGUgbW9kZSA9IENh
bGxVc2VDaGlsZHJlbikKICAgICB7Ci0gICAgICAgIE5vZGUmIG5vZGUgPSBhdChub2RlSW5kZXgp
OwogICAgICAgICBpZiAobW9kZSA9PSBDYWxsVXNlQ2hpbGRyZW4pCiAgICAgICAgICAgICB1c2VD
aGlsZHJlbihub2RlKTsKIAotICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVy
ID0gbm9kZS52aXJ0dWFsUmVnaXN0ZXIoKTsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1
YWxSZWdpc3RlciA9IG5vZGUtPnZpcnR1YWxSZWdpc3RlcigpOwogICAgICAgICBHZW5lcmF0aW9u
SW5mbyYgaW5mbyA9IG1fZ2VuZXJhdGlvbkluZm9bdmlydHVhbFJlZ2lzdGVyXTsKIAogICAgICAg
ICBpZiAoZm9ybWF0ID09IERhdGFGb3JtYXRJbnRlZ2VyKSB7CiAgICAgICAgICAgICBtX2ppdC5q
aXRBc3NlcnRJc0ludDMyKHJlZyk7CiAgICAgICAgICAgICBtX2dwcnMucmV0YWluKHJlZywgdmly
dHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVySW50ZWdlcik7Ci0gICAgICAgICAgICBpbmZvLmluaXRJ
bnRlZ2VyKG5vZGVJbmRleCwgbm9kZS5yZWZDb3VudCgpLCByZWcpOworICAgICAgICAgICAgaW5m
by5pbml0SW50ZWdlcihub2RlLCBub2RlLT5yZWZDb3VudCgpLCByZWcpOwogICAgICAgICB9IGVs
c2UgewogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChmb3Jt
YXQgPT0gRGF0YUZvcm1hdEpTSW50ZWdlcik7CiAgICAgICAgICAgICBtX2ppdC5qaXRBc3NlcnRJ
c0pTSW50MzIocmVnKTsKICAgICAgICAgICAgIG1fZ3Bycy5yZXRhaW4ocmVnLCB2aXJ0dWFsUmVn
aXN0ZXIsIFNwaWxsT3JkZXJKUyk7Ci0gICAgICAgICAgICBpbmZvLmluaXRKU1ZhbHVlKG5vZGVJ
bmRleCwgbm9kZS5yZWZDb3VudCgpLCByZWcsIGZvcm1hdCk7CisgICAgICAgICAgICBpbmZvLmlu
aXRKU1ZhbHVlKG5vZGUsIG5vZGUtPnJlZkNvdW50KCksIHJlZywgZm9ybWF0KTsKICNlbGlmIFVT
RShKU1ZBTFVFMzJfNjQpCiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OwogI2VuZGlmCiAgICAgICAgIH0KICAgICB9Ci0gICAgdm9pZCBpbnRlZ2VyUmVzdWx0KEdQUlJl
ZyByZWcsIE5vZGVJbmRleCBub2RlSW5kZXgsIFVzZUNoaWxkcmVuTW9kZSBtb2RlKQorICAgIHZv
aWQgaW50ZWdlclJlc3VsdChHUFJSZWcgcmVnLCBOb2RlKiBub2RlLCBVc2VDaGlsZHJlbk1vZGUg
bW9kZSkKICAgICB7Ci0gICAgICAgIGludGVnZXJSZXN1bHQocmVnLCBub2RlSW5kZXgsIERhdGFG
b3JtYXRJbnRlZ2VyLCBtb2RlKTsKKyAgICAgICAgaW50ZWdlclJlc3VsdChyZWcsIG5vZGUsIERh
dGFGb3JtYXRJbnRlZ2VyLCBtb2RlKTsKICAgICB9Ci0gICAgdm9pZCBub1Jlc3VsdChOb2RlSW5k
ZXggbm9kZUluZGV4LCBVc2VDaGlsZHJlbk1vZGUgbW9kZSA9IENhbGxVc2VDaGlsZHJlbikKKyAg
ICB2b2lkIG5vUmVzdWx0KE5vZGUqIG5vZGUsIFVzZUNoaWxkcmVuTW9kZSBtb2RlID0gQ2FsbFVz
ZUNoaWxkcmVuKQogICAgIHsKICAgICAgICAgaWYgKG1vZGUgPT0gVXNlQ2hpbGRyZW5DYWxsZWRF
eHBsaWNpdGx5KQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBOb2RlJiBub2RlID0gYXQo
bm9kZUluZGV4KTsKICAgICAgICAgdXNlQ2hpbGRyZW4obm9kZSk7CiAgICAgfQotICAgIHZvaWQg
Y2VsbFJlc3VsdChHUFJSZWcgcmVnLCBOb2RlSW5kZXggbm9kZUluZGV4LCBVc2VDaGlsZHJlbk1v
ZGUgbW9kZSA9IENhbGxVc2VDaGlsZHJlbikKKyAgICB2b2lkIGNlbGxSZXN1bHQoR1BSUmVnIHJl
ZywgTm9kZSogbm9kZSwgVXNlQ2hpbGRyZW5Nb2RlIG1vZGUgPSBDYWxsVXNlQ2hpbGRyZW4pCiAg
ICAgewotICAgICAgICBOb2RlJiBub2RlID0gYXQobm9kZUluZGV4KTsKICAgICAgICAgaWYgKG1v
ZGUgPT0gQ2FsbFVzZUNoaWxkcmVuKQogICAgICAgICAgICAgdXNlQ2hpbGRyZW4obm9kZSk7CiAK
LSAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciA9IG5vZGUudmlydHVhbFJl
Z2lzdGVyKCk7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIgPSBub2Rl
LT52aXJ0dWFsUmVnaXN0ZXIoKTsKICAgICAgICAgbV9ncHJzLnJldGFpbihyZWcsIHZpcnR1YWxS
ZWdpc3RlciwgU3BpbGxPcmRlckNlbGwpOwogICAgICAgICBHZW5lcmF0aW9uSW5mbyYgaW5mbyA9
IG1fZ2VuZXJhdGlvbkluZm9bdmlydHVhbFJlZ2lzdGVyXTsKLSAgICAgICAgaW5mby5pbml0Q2Vs
bChub2RlSW5kZXgsIG5vZGUucmVmQ291bnQoKSwgcmVnKTsKKyAgICAgICAgaW5mby5pbml0Q2Vs
bChub2RlLCBub2RlLT5yZWZDb3VudCgpLCByZWcpOwogICAgIH0KLSAgICB2b2lkIGJvb2xlYW5S
ZXN1bHQoR1BSUmVnIHJlZywgTm9kZUluZGV4IG5vZGVJbmRleCwgVXNlQ2hpbGRyZW5Nb2RlIG1v
ZGUgPSBDYWxsVXNlQ2hpbGRyZW4pCisgICAgdm9pZCBib29sZWFuUmVzdWx0KEdQUlJlZyByZWcs
IE5vZGUqIG5vZGUsIFVzZUNoaWxkcmVuTW9kZSBtb2RlID0gQ2FsbFVzZUNoaWxkcmVuKQogICAg
IHsKLSAgICAgICAgTm9kZSYgbm9kZSA9IGF0KG5vZGVJbmRleCk7CiAgICAgICAgIGlmIChtb2Rl
ID09IENhbGxVc2VDaGlsZHJlbikKICAgICAgICAgICAgIHVzZUNoaWxkcmVuKG5vZGUpOwogCi0g
ICAgICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIgPSBub2RlLnZpcnR1YWxSZWdp
c3RlcigpOworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyID0gbm9kZS0+
dmlydHVhbFJlZ2lzdGVyKCk7CiAgICAgICAgIG1fZ3Bycy5yZXRhaW4ocmVnLCB2aXJ0dWFsUmVn
aXN0ZXIsIFNwaWxsT3JkZXJCb29sZWFuKTsKICAgICAgICAgR2VuZXJhdGlvbkluZm8mIGluZm8g
PSBtX2dlbmVyYXRpb25JbmZvW3ZpcnR1YWxSZWdpc3Rlcl07Ci0gICAgICAgIGluZm8uaW5pdEJv
b2xlYW4obm9kZUluZGV4LCBub2RlLnJlZkNvdW50KCksIHJlZyk7CisgICAgICAgIGluZm8uaW5p
dEJvb2xlYW4obm9kZSwgbm9kZS0+cmVmQ291bnQoKSwgcmVnKTsKICAgICB9CiAjaWYgVVNFKEpT
VkFMVUU2NCkKLSAgICB2b2lkIGpzVmFsdWVSZXN1bHQoR1BSUmVnIHJlZywgTm9kZUluZGV4IG5v
ZGVJbmRleCwgRGF0YUZvcm1hdCBmb3JtYXQgPSBEYXRhRm9ybWF0SlMsIFVzZUNoaWxkcmVuTW9k
ZSBtb2RlID0gQ2FsbFVzZUNoaWxkcmVuKQorICAgIHZvaWQganNWYWx1ZVJlc3VsdChHUFJSZWcg
cmVnLCBOb2RlKiBub2RlLCBEYXRhRm9ybWF0IGZvcm1hdCA9IERhdGFGb3JtYXRKUywgVXNlQ2hp
bGRyZW5Nb2RlIG1vZGUgPSBDYWxsVXNlQ2hpbGRyZW4pCiAgICAgewogICAgICAgICBpZiAoZm9y
bWF0ID09IERhdGFGb3JtYXRKU0ludGVnZXIpCiAgICAgICAgICAgICBtX2ppdC5qaXRBc3NlcnRJ
c0pTSW50MzIocmVnKTsKICAgICAgICAgCi0gICAgICAgIE5vZGUmIG5vZGUgPSBhdChub2RlSW5k
ZXgpOwogICAgICAgICBpZiAobW9kZSA9PSBDYWxsVXNlQ2hpbGRyZW4pCiAgICAgICAgICAgICB1
c2VDaGlsZHJlbihub2RlKTsKIAotICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lz
dGVyID0gbm9kZS52aXJ0dWFsUmVnaXN0ZXIoKTsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHZp
cnR1YWxSZWdpc3RlciA9IG5vZGUtPnZpcnR1YWxSZWdpc3RlcigpOwogICAgICAgICBtX2dwcnMu
cmV0YWluKHJlZywgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVySlMpOwogICAgICAgICBHZW5l
cmF0aW9uSW5mbyYgaW5mbyA9IG1fZ2VuZXJhdGlvbkluZm9bdmlydHVhbFJlZ2lzdGVyXTsKLSAg
ICAgICAgaW5mby5pbml0SlNWYWx1ZShub2RlSW5kZXgsIG5vZGUucmVmQ291bnQoKSwgcmVnLCBm
b3JtYXQpOworICAgICAgICBpbmZvLmluaXRKU1ZhbHVlKG5vZGUsIG5vZGUtPnJlZkNvdW50KCks
IHJlZywgZm9ybWF0KTsKICAgICB9Ci0gICAgdm9pZCBqc1ZhbHVlUmVzdWx0KEdQUlJlZyByZWcs
IE5vZGVJbmRleCBub2RlSW5kZXgsIFVzZUNoaWxkcmVuTW9kZSBtb2RlKQorICAgIHZvaWQganNW
YWx1ZVJlc3VsdChHUFJSZWcgcmVnLCBOb2RlKiBub2RlLCBVc2VDaGlsZHJlbk1vZGUgbW9kZSkK
ICAgICB7Ci0gICAgICAgIGpzVmFsdWVSZXN1bHQocmVnLCBub2RlSW5kZXgsIERhdGFGb3JtYXRK
UywgbW9kZSk7CisgICAgICAgIGpzVmFsdWVSZXN1bHQocmVnLCBub2RlLCBEYXRhRm9ybWF0SlMs
IG1vZGUpOwogICAgIH0KICNlbGlmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgdm9pZCBqc1ZhbHVl
UmVzdWx0KEdQUlJlZyB0YWcsIEdQUlJlZyBwYXlsb2FkLCBOb2RlSW5kZXggbm9kZUluZGV4LCBE
YXRhRm9ybWF0IGZvcm1hdCA9IERhdGFGb3JtYXRKUywgVXNlQ2hpbGRyZW5Nb2RlIG1vZGUgPSBD
YWxsVXNlQ2hpbGRyZW4pCisgICAgdm9pZCBqc1ZhbHVlUmVzdWx0KEdQUlJlZyB0YWcsIEdQUlJl
ZyBwYXlsb2FkLCBOb2RlKiBub2RlLCBEYXRhRm9ybWF0IGZvcm1hdCA9IERhdGFGb3JtYXRKUywg
VXNlQ2hpbGRyZW5Nb2RlIG1vZGUgPSBDYWxsVXNlQ2hpbGRyZW4pCiAgICAgewotICAgICAgICBO
b2RlJiBub2RlID0gYXQobm9kZUluZGV4KTsKICAgICAgICAgaWYgKG1vZGUgPT0gQ2FsbFVzZUNo
aWxkcmVuKQogICAgICAgICAgICAgdXNlQ2hpbGRyZW4obm9kZSk7CiAKLSAgICAgICAgVmlydHVh
bFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciA9IG5vZGUudmlydHVhbFJlZ2lzdGVyKCk7CisgICAg
ICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIgPSBub2RlLT52aXJ0dWFsUmVnaXN0
ZXIoKTsKICAgICAgICAgbV9ncHJzLnJldGFpbih0YWcsIHZpcnR1YWxSZWdpc3RlciwgU3BpbGxP
cmRlckpTKTsKICAgICAgICAgbV9ncHJzLnJldGFpbihwYXlsb2FkLCB2aXJ0dWFsUmVnaXN0ZXIs
IFNwaWxsT3JkZXJKUyk7CiAgICAgICAgIEdlbmVyYXRpb25JbmZvJiBpbmZvID0gbV9nZW5lcmF0
aW9uSW5mb1t2aXJ0dWFsUmVnaXN0ZXJdOwotICAgICAgICBpbmZvLmluaXRKU1ZhbHVlKG5vZGVJ
bmRleCwgbm9kZS5yZWZDb3VudCgpLCB0YWcsIHBheWxvYWQsIGZvcm1hdCk7CisgICAgICAgIGlu
Zm8uaW5pdEpTVmFsdWUobm9kZSwgbm9kZS0+cmVmQ291bnQoKSwgdGFnLCBwYXlsb2FkLCBmb3Jt
YXQpOwogICAgIH0KLSAgICB2b2lkIGpzVmFsdWVSZXN1bHQoR1BSUmVnIHRhZywgR1BSUmVnIHBh
eWxvYWQsIE5vZGVJbmRleCBub2RlSW5kZXgsIFVzZUNoaWxkcmVuTW9kZSBtb2RlKQorICAgIHZv
aWQganNWYWx1ZVJlc3VsdChHUFJSZWcgdGFnLCBHUFJSZWcgcGF5bG9hZCwgTm9kZSogbm9kZSwg
VXNlQ2hpbGRyZW5Nb2RlIG1vZGUpCiAgICAgewotICAgICAgICBqc1ZhbHVlUmVzdWx0KHRhZywg
cGF5bG9hZCwgbm9kZUluZGV4LCBEYXRhRm9ybWF0SlMsIG1vZGUpOworICAgICAgICBqc1ZhbHVl
UmVzdWx0KHRhZywgcGF5bG9hZCwgbm9kZSwgRGF0YUZvcm1hdEpTLCBtb2RlKTsKICAgICB9CiAj
ZW5kaWYKLSAgICB2b2lkIHN0b3JhZ2VSZXN1bHQoR1BSUmVnIHJlZywgTm9kZUluZGV4IG5vZGVJ
bmRleCwgVXNlQ2hpbGRyZW5Nb2RlIG1vZGUgPSBDYWxsVXNlQ2hpbGRyZW4pCisgICAgdm9pZCBz
dG9yYWdlUmVzdWx0KEdQUlJlZyByZWcsIE5vZGUqIG5vZGUsIFVzZUNoaWxkcmVuTW9kZSBtb2Rl
ID0gQ2FsbFVzZUNoaWxkcmVuKQogICAgIHsKLSAgICAgICAgTm9kZSYgbm9kZSA9IGF0KG5vZGVJ
bmRleCk7CiAgICAgICAgIGlmIChtb2RlID09IENhbGxVc2VDaGlsZHJlbikKICAgICAgICAgICAg
IHVzZUNoaWxkcmVuKG5vZGUpOwogICAgICAgICAKLSAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHZp
cnR1YWxSZWdpc3RlciA9IG5vZGUudmlydHVhbFJlZ2lzdGVyKCk7CisgICAgICAgIFZpcnR1YWxS
ZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIgPSBub2RlLT52aXJ0dWFsUmVnaXN0ZXIoKTsKICAgICAg
ICAgbV9ncHJzLnJldGFpbihyZWcsIHZpcnR1YWxSZWdpc3RlciwgU3BpbGxPcmRlclN0b3JhZ2Up
OwogICAgICAgICBHZW5lcmF0aW9uSW5mbyYgaW5mbyA9IG1fZ2VuZXJhdGlvbkluZm9bdmlydHVh
bFJlZ2lzdGVyXTsKLSAgICAgICAgaW5mby5pbml0U3RvcmFnZShub2RlSW5kZXgsIG5vZGUucmVm
Q291bnQoKSwgcmVnKTsKKyAgICAgICAgaW5mby5pbml0U3RvcmFnZShub2RlLCBub2RlLT5yZWZD
b3VudCgpLCByZWcpOwogICAgIH0KLSAgICB2b2lkIGRvdWJsZVJlc3VsdChGUFJSZWcgcmVnLCBO
b2RlSW5kZXggbm9kZUluZGV4LCBVc2VDaGlsZHJlbk1vZGUgbW9kZSA9IENhbGxVc2VDaGlsZHJl
bikKKyAgICB2b2lkIGRvdWJsZVJlc3VsdChGUFJSZWcgcmVnLCBOb2RlKiBub2RlLCBVc2VDaGls
ZHJlbk1vZGUgbW9kZSA9IENhbGxVc2VDaGlsZHJlbikKICAgICB7Ci0gICAgICAgIE5vZGUmIG5v
ZGUgPSBhdChub2RlSW5kZXgpOwogICAgICAgICBpZiAobW9kZSA9PSBDYWxsVXNlQ2hpbGRyZW4p
CiAgICAgICAgICAgICB1c2VDaGlsZHJlbihub2RlKTsKIAotICAgICAgICBWaXJ0dWFsUmVnaXN0
ZXIgdmlydHVhbFJlZ2lzdGVyID0gbm9kZS52aXJ0dWFsUmVnaXN0ZXIoKTsKKyAgICAgICAgVmly
dHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciA9IG5vZGUtPnZpcnR1YWxSZWdpc3RlcigpOwog
ICAgICAgICBtX2ZwcnMucmV0YWluKHJlZywgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVyRG91
YmxlKTsKICAgICAgICAgR2VuZXJhdGlvbkluZm8mIGluZm8gPSBtX2dlbmVyYXRpb25JbmZvW3Zp
cnR1YWxSZWdpc3Rlcl07Ci0gICAgICAgIGluZm8uaW5pdERvdWJsZShub2RlSW5kZXgsIG5vZGUu
cmVmQ291bnQoKSwgcmVnKTsKKyAgICAgICAgaW5mby5pbml0RG91YmxlKG5vZGUsIG5vZGUtPnJl
ZkNvdW50KCksIHJlZyk7CiAgICAgfQotICAgIHZvaWQgaW5pdENvbnN0YW50SW5mbyhOb2RlSW5k
ZXggbm9kZUluZGV4KQorICAgIHZvaWQgaW5pdENvbnN0YW50SW5mbyhOb2RlKiBub2RlKQogICAg
IHsKLSAgICAgICAgQVNTRVJUKGlzSW50MzJDb25zdGFudChub2RlSW5kZXgpIHx8IGlzTnVtYmVy
Q29uc3RhbnQobm9kZUluZGV4KSB8fCBpc0pTQ29uc3RhbnQobm9kZUluZGV4KSk7Ci0gICAgICAg
IE5vZGUmIG5vZGUgPSBhdChub2RlSW5kZXgpOwotICAgICAgICBtX2dlbmVyYXRpb25JbmZvW25v
ZGUudmlydHVhbFJlZ2lzdGVyKCldLmluaXRDb25zdGFudChub2RlSW5kZXgsIG5vZGUucmVmQ291
bnQoKSk7CisgICAgICAgIEFTU0VSVChpc0ludDMyQ29uc3RhbnQobm9kZSkgfHwgaXNOdW1iZXJD
b25zdGFudChub2RlKSB8fCBpc0pTQ29uc3RhbnQobm9kZSkpOworICAgICAgICBtX2dlbmVyYXRp
b25JbmZvW25vZGUtPnZpcnR1YWxSZWdpc3RlcigpXS5pbml0Q29uc3RhbnQobm9kZSwgbm9kZS0+
cmVmQ291bnQoKSk7CiAgICAgfQogICAgIAogICAgIC8vIFRoZXNlIG1ldGhvZHMgYWRkIGNhbGxz
IHRvIEMrKyBoZWxwZXIgZnVuY3Rpb25zLgpAQCAtMjAyOCw4OSArMjAwOSw4OCBAQCBwdWJsaWM6
CiAgICAgdm9pZCBjaGVja0NvbnNpc3RlbmN5KCkgeyB9CiAjZW5kaWYKIAotICAgIGJvb2wgaXNJ
bnRlZ2VyKE5vZGVJbmRleCBub2RlSW5kZXgpCisgICAgYm9vbCBpc0ludGVnZXIoTm9kZSogbm9k
ZSkKICAgICB7Ci0gICAgICAgIE5vZGUmIG5vZGUgPSBhdChub2RlSW5kZXgpOwotICAgICAgICBp
ZiAobm9kZS5oYXNJbnQzMlJlc3VsdCgpKQorICAgICAgICBpZiAobm9kZS0+aGFzSW50MzJSZXN1
bHQoKSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgICAgIGlmIChpc0ludDMyQ29u
c3RhbnQobm9kZUluZGV4KSkKKyAgICAgICAgaWYgKGlzSW50MzJDb25zdGFudChub2RlKSkKICAg
ICAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFs
UmVnaXN0ZXIgPSBub2RlLnZpcnR1YWxSZWdpc3RlcigpOworICAgICAgICBWaXJ0dWFsUmVnaXN0
ZXIgdmlydHVhbFJlZ2lzdGVyID0gbm9kZS0+dmlydHVhbFJlZ2lzdGVyKCk7CiAgICAgICAgIEdl
bmVyYXRpb25JbmZvJiBpbmZvID0gbV9nZW5lcmF0aW9uSW5mb1t2aXJ0dWFsUmVnaXN0ZXJdOwog
ICAgICAgICAKICAgICAgICAgcmV0dXJuIGluZm8uaXNKU0ludGVnZXIoKTsKICAgICB9CiAgICAg
Ci0gICAgYm9vbCBjb21wYXJlKE5vZGUmLCBNYWNyb0Fzc2VtYmxlcjo6UmVsYXRpb25hbENvbmRp
dGlvbiwgTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUNvbmRpdGlvbiwgU19ERkdPcGVyYXRpb25fRUpK
KTsKLSAgICBib29sIGNvbXBpbGVQZWVwSG9sZUJyYW5jaChOb2RlJiwgTWFjcm9Bc3NlbWJsZXI6
OlJlbGF0aW9uYWxDb25kaXRpb24sIE1hY3JvQXNzZW1ibGVyOjpEb3VibGVDb25kaXRpb24sIFNf
REZHT3BlcmF0aW9uX0VKSik7Ci0gICAgdm9pZCBjb21waWxlUGVlcEhvbGVJbnRlZ2VyQnJhbmNo
KE5vZGUmLCBOb2RlSW5kZXggYnJhbmNoTm9kZUluZGV4LCBKSVRDb21waWxlcjo6UmVsYXRpb25h
bENvbmRpdGlvbik7Ci0gICAgdm9pZCBjb21waWxlUGVlcEhvbGVEb3VibGVCcmFuY2goTm9kZSYs
IE5vZGVJbmRleCBicmFuY2hOb2RlSW5kZXgsIEpJVENvbXBpbGVyOjpEb3VibGVDb25kaXRpb24p
OwotICAgIHZvaWQgY29tcGlsZVBlZXBIb2xlT2JqZWN0RXF1YWxpdHkoTm9kZSYsIE5vZGVJbmRl
eCBicmFuY2hOb2RlSW5kZXgpOwotICAgIHZvaWQgY29tcGlsZVBlZXBIb2xlT2JqZWN0VG9PYmpl
Y3RPck90aGVyRXF1YWxpdHkoRWRnZSBsZWZ0Q2hpbGQsIEVkZ2UgcmlnaHRDaGlsZCwgTm9kZUlu
ZGV4IGJyYW5jaE5vZGVJbmRleCk7Ci0gICAgdm9pZCBjb21waWxlT2JqZWN0RXF1YWxpdHkoTm9k
ZSYpOworICAgIGJvb2wgY29tcGFyZShOb2RlKiwgTWFjcm9Bc3NlbWJsZXI6OlJlbGF0aW9uYWxD
b25kaXRpb24sIE1hY3JvQXNzZW1ibGVyOjpEb3VibGVDb25kaXRpb24sIFNfREZHT3BlcmF0aW9u
X0VKSik7CisgICAgYm9vbCBjb21waWxlUGVlcEhvbGVCcmFuY2goTm9kZSosIE1hY3JvQXNzZW1i
bGVyOjpSZWxhdGlvbmFsQ29uZGl0aW9uLCBNYWNyb0Fzc2VtYmxlcjo6RG91YmxlQ29uZGl0aW9u
LCBTX0RGR09wZXJhdGlvbl9FSkopOworICAgIHZvaWQgY29tcGlsZVBlZXBIb2xlSW50ZWdlckJy
YW5jaChOb2RlKiwgTm9kZSogYnJhbmNoTm9kZSwgSklUQ29tcGlsZXI6OlJlbGF0aW9uYWxDb25k
aXRpb24pOworICAgIHZvaWQgY29tcGlsZVBlZXBIb2xlRG91YmxlQnJhbmNoKE5vZGUqLCBOb2Rl
KiBicmFuY2hOb2RlLCBKSVRDb21waWxlcjo6RG91YmxlQ29uZGl0aW9uKTsKKyAgICB2b2lkIGNv
bXBpbGVQZWVwSG9sZU9iamVjdEVxdWFsaXR5KE5vZGUqLCBOb2RlKiBicmFuY2hOb2RlKTsKKyAg
ICB2b2lkIGNvbXBpbGVQZWVwSG9sZU9iamVjdFRvT2JqZWN0T3JPdGhlckVxdWFsaXR5KEVkZ2Ug
bGVmdENoaWxkLCBFZGdlIHJpZ2h0Q2hpbGQsIE5vZGUqIGJyYW5jaE5vZGUpOworICAgIHZvaWQg
Y29tcGlsZU9iamVjdEVxdWFsaXR5KE5vZGUqKTsKICAgICB2b2lkIGNvbXBpbGVPYmplY3RUb09i
amVjdE9yT3RoZXJFcXVhbGl0eShFZGdlIGxlZnRDaGlsZCwgRWRnZSByaWdodENoaWxkKTsKLSAg
ICB2b2lkIGNvbXBpbGVWYWx1ZUFkZChOb2RlJik7CisgICAgdm9pZCBjb21waWxlVmFsdWVBZGQo
Tm9kZSopOwogICAgIHZvaWQgY29tcGlsZU5vblN0cmluZ0NlbGxPck90aGVyTG9naWNhbE5vdChF
ZGdlIHZhbHVlLCBib29sIG5lZWRTcGVjdWxhdGlvbkNoZWNrKTsKLSAgICB2b2lkIGNvbXBpbGVM
b2dpY2FsTm90KE5vZGUmKTsKKyAgICB2b2lkIGNvbXBpbGVMb2dpY2FsTm90KE5vZGUqKTsKICAg
ICB2b2lkIGVtaXROb25TdHJpbmdDZWxsT3JPdGhlckJyYW5jaChFZGdlIHZhbHVlLCBCbG9ja0lu
ZGV4IHRha2VuLCBCbG9ja0luZGV4IG5vdFRha2VuLCBib29sIG5lZWRTcGVjdWxhdGlvbkNoZWNr
KTsKLSAgICB2b2lkIGVtaXRCcmFuY2goTm9kZSYpOworICAgIHZvaWQgZW1pdEJyYW5jaChOb2Rl
Kik7CiAgICAgCi0gICAgdm9pZCBjb21waWxlSW50ZWdlckNvbXBhcmUoTm9kZSYsIE1hY3JvQXNz
ZW1ibGVyOjpSZWxhdGlvbmFsQ29uZGl0aW9uKTsKLSAgICB2b2lkIGNvbXBpbGVEb3VibGVDb21w
YXJlKE5vZGUmLCBNYWNyb0Fzc2VtYmxlcjo6RG91YmxlQ29uZGl0aW9uKTsKKyAgICB2b2lkIGNv
bXBpbGVJbnRlZ2VyQ29tcGFyZShOb2RlKiwgTWFjcm9Bc3NlbWJsZXI6OlJlbGF0aW9uYWxDb25k
aXRpb24pOworICAgIHZvaWQgY29tcGlsZURvdWJsZUNvbXBhcmUoTm9kZSosIE1hY3JvQXNzZW1i
bGVyOjpEb3VibGVDb25kaXRpb24pOwogICAgIAotICAgIGJvb2wgY29tcGlsZVN0cmljdEVxRm9y
Q29uc3RhbnQoTm9kZSYsIEVkZ2UgdmFsdWUsIEpTVmFsdWUgY29uc3RhbnQpOworICAgIGJvb2wg
Y29tcGlsZVN0cmljdEVxRm9yQ29uc3RhbnQoTm9kZSosIEVkZ2UgdmFsdWUsIEpTVmFsdWUgY29u
c3RhbnQpOwogICAgIAotICAgIGJvb2wgY29tcGlsZVN0cmljdEVxKE5vZGUmKTsKKyAgICBib29s
IGNvbXBpbGVTdHJpY3RFcShOb2RlKik7CiAgICAgCi0gICAgdm9pZCBjb21waWxlQWxsb2NhdGVQ
cm9wZXJ0eVN0b3JhZ2UoTm9kZSYpOwotICAgIHZvaWQgY29tcGlsZVJlYWxsb2NhdGVQcm9wZXJ0
eVN0b3JhZ2UoTm9kZSYpOworICAgIHZvaWQgY29tcGlsZUFsbG9jYXRlUHJvcGVydHlTdG9yYWdl
KE5vZGUqKTsKKyAgICB2b2lkIGNvbXBpbGVSZWFsbG9jYXRlUHJvcGVydHlTdG9yYWdlKE5vZGUq
KTsKICAgICAKICNpZiBVU0UoSlNWQUxVRTMyXzY0KQogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEJh
c2VPcGVyYW5kVHlwZSwgdHlwZW5hbWUgUHJvcGVydHlPcGVyYW5kVHlwZSwgdHlwZW5hbWUgVmFs
dWVPcGVyYW5kVHlwZSwgdHlwZW5hbWUgVGFnVHlwZT4KLSAgICB2b2lkIGNvbXBpbGVDb250aWd1
b3VzUHV0QnlWYWwoTm9kZSYsIEJhc2VPcGVyYW5kVHlwZSYsIFByb3BlcnR5T3BlcmFuZFR5cGUm
LCBWYWx1ZU9wZXJhbmRUeXBlJiwgR1BSUmVnIHZhbHVlUGF5bG9hZFJlZywgVGFnVHlwZSB2YWx1
ZVRhZyk7CisgICAgdm9pZCBjb21waWxlQ29udGlndW91c1B1dEJ5VmFsKE5vZGUqLCBCYXNlT3Bl
cmFuZFR5cGUmLCBQcm9wZXJ0eU9wZXJhbmRUeXBlJiwgVmFsdWVPcGVyYW5kVHlwZSYsIEdQUlJl
ZyB2YWx1ZVBheWxvYWRSZWcsIFRhZ1R5cGUgdmFsdWVUYWcpOwogI2VuZGlmCi0gICAgdm9pZCBj
b21waWxlRG91YmxlUHV0QnlWYWwoTm9kZSYsIFNwZWN1bGF0ZUNlbGxPcGVyYW5kJiBiYXNlLCBT
cGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQmIHByb3BlcnR5KTsKKyAgICB2b2lkIGNvbXBpbGVE
b3VibGVQdXRCeVZhbChOb2RlKiwgU3BlY3VsYXRlQ2VsbE9wZXJhbmQmIGJhc2UsIFNwZWN1bGF0
ZVN0cmljdEludDMyT3BlcmFuZCYgcHJvcGVydHkpOwogICAgIGJvb2wgcHV0QnlWYWxXaWxsTmVl
ZEV4dHJhUmVnaXN0ZXIoQXJyYXlNb2RlIGFycmF5TW9kZSkKICAgICB7CiAgICAgICAgIHJldHVy
biBhcnJheU1vZGUubWF5U3RvcmVUb0hvbGUoKTsKICAgICB9CiAgICAgR1BSUmVnIHRlbXBvcmFy
eVJlZ2lzdGVyRm9yUHV0QnlWYWwoR1BSVGVtcG9yYXJ5JiwgQXJyYXlNb2RlKTsKLSAgICBHUFJS
ZWcgdGVtcG9yYXJ5UmVnaXN0ZXJGb3JQdXRCeVZhbChHUFJUZW1wb3JhcnkmIHRlbXBvcmFyeSwg
Tm9kZSYgbm9kZSkKKyAgICBHUFJSZWcgdGVtcG9yYXJ5UmVnaXN0ZXJGb3JQdXRCeVZhbChHUFJU
ZW1wb3JhcnkmIHRlbXBvcmFyeSwgTm9kZSogbm9kZSkKICAgICB7CiAgICAgICAgIHJldHVybiB0
ZW1wb3JhcnlSZWdpc3RlckZvclB1dEJ5VmFsKHRlbXBvcmFyeSwgbm9kZS5hcnJheU1vZGUoKSk7
CiAgICAgfQogICAgIAotICAgIHZvaWQgY29tcGlsZUdldENoYXJDb2RlQXQoTm9kZSYpOwotICAg
IHZvaWQgY29tcGlsZUdldEJ5VmFsT25TdHJpbmcoTm9kZSYpOworICAgIHZvaWQgY29tcGlsZUdl
dENoYXJDb2RlQXQoTm9kZSopOworICAgIHZvaWQgY29tcGlsZUdldEJ5VmFsT25TdHJpbmcoTm9k
ZSopOwogCi0gICAgdm9pZCBjb21waWxlR2V0QnlWYWxPbkFyZ3VtZW50cyhOb2RlJik7Ci0gICAg
dm9pZCBjb21waWxlR2V0QXJndW1lbnRzTGVuZ3RoKE5vZGUmKTsKKyAgICB2b2lkIGNvbXBpbGVH
ZXRCeVZhbE9uQXJndW1lbnRzKE5vZGUqKTsKKyAgICB2b2lkIGNvbXBpbGVHZXRBcmd1bWVudHNM
ZW5ndGgoTm9kZSopOwogICAgIAotICAgIHZvaWQgY29tcGlsZUdldEFycmF5TGVuZ3RoKE5vZGUm
KTsKKyAgICB2b2lkIGNvbXBpbGVHZXRBcnJheUxlbmd0aChOb2RlKik7CiAgICAgCi0gICAgdm9p
ZCBjb21waWxlVmFsdWVUb0ludDMyKE5vZGUmKTsKLSAgICB2b2lkIGNvbXBpbGVVSW50MzJUb051
bWJlcihOb2RlJik7Ci0gICAgdm9pZCBjb21waWxlRG91YmxlQXNJbnQzMihOb2RlJik7Ci0gICAg
dm9pZCBjb21waWxlSW50MzJUb0RvdWJsZShOb2RlJik7Ci0gICAgdm9pZCBjb21waWxlQWRkKE5v
ZGUmKTsKLSAgICB2b2lkIGNvbXBpbGVBcml0aFN1YihOb2RlJik7Ci0gICAgdm9pZCBjb21waWxl
QXJpdGhOZWdhdGUoTm9kZSYpOwotICAgIHZvaWQgY29tcGlsZUFyaXRoTXVsKE5vZGUmKTsKKyAg
ICB2b2lkIGNvbXBpbGVWYWx1ZVRvSW50MzIoTm9kZSopOworICAgIHZvaWQgY29tcGlsZVVJbnQz
MlRvTnVtYmVyKE5vZGUqKTsKKyAgICB2b2lkIGNvbXBpbGVEb3VibGVBc0ludDMyKE5vZGUqKTsK
KyAgICB2b2lkIGNvbXBpbGVJbnQzMlRvRG91YmxlKE5vZGUqKTsKKyAgICB2b2lkIGNvbXBpbGVB
ZGQoTm9kZSopOworICAgIHZvaWQgY29tcGlsZUFyaXRoU3ViKE5vZGUqKTsKKyAgICB2b2lkIGNv
bXBpbGVBcml0aE5lZ2F0ZShOb2RlKik7CisgICAgdm9pZCBjb21waWxlQXJpdGhNdWwoTm9kZSop
OwogI2lmIENQVShYODYpIHx8IENQVShYODZfNjQpCi0gICAgdm9pZCBjb21waWxlSW50ZWdlckFy
aXRoRGl2Rm9yWDg2KE5vZGUmKTsKKyAgICB2b2lkIGNvbXBpbGVJbnRlZ2VyQXJpdGhEaXZGb3JY
ODYoTm9kZSopOwogI2VuZGlmCi0gICAgdm9pZCBjb21waWxlQXJpdGhNb2QoTm9kZSYpOwotICAg
IHZvaWQgY29tcGlsZVNvZnRNb2R1bG8oTm9kZSYpOwotICAgIHZvaWQgY29tcGlsZUdldEluZGV4
ZWRQcm9wZXJ0eVN0b3JhZ2UoTm9kZSYpOwotICAgIHZvaWQgY29tcGlsZUdldEJ5VmFsT25JbnRU
eXBlZEFycmF5KGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yJiwgTm9kZSYsIHNpemVfdCBlbGVt
ZW50U2l6ZSwgVHlwZWRBcnJheVNpZ25lZG5lc3MpOwotICAgIHZvaWQgY29tcGlsZVB1dEJ5VmFs
Rm9ySW50VHlwZWRBcnJheShjb25zdCBUeXBlZEFycmF5RGVzY3JpcHRvciYsIEdQUlJlZyBiYXNl
LCBHUFJSZWcgcHJvcGVydHksIE5vZGUmLCBzaXplX3QgZWxlbWVudFNpemUsIFR5cGVkQXJyYXlT
aWduZWRuZXNzLCBUeXBlZEFycmF5Um91bmRpbmcgPSBUcnVuY2F0ZVJvdW5kaW5nKTsKLSAgICB2
b2lkIGNvbXBpbGVHZXRCeVZhbE9uRmxvYXRUeXBlZEFycmF5KGNvbnN0IFR5cGVkQXJyYXlEZXNj
cmlwdG9yJiwgTm9kZSYsIHNpemVfdCBlbGVtZW50U2l6ZSk7Ci0gICAgdm9pZCBjb21waWxlUHV0
QnlWYWxGb3JGbG9hdFR5cGVkQXJyYXkoY29uc3QgVHlwZWRBcnJheURlc2NyaXB0b3ImLCBHUFJS
ZWcgYmFzZSwgR1BSUmVnIHByb3BlcnR5LCBOb2RlJiwgc2l6ZV90IGVsZW1lbnRTaXplKTsKLSAg
ICB2b2lkIGNvbXBpbGVOZXdGdW5jdGlvbk5vQ2hlY2soTm9kZSYpOwotICAgIHZvaWQgY29tcGls
ZU5ld0Z1bmN0aW9uRXhwcmVzc2lvbihOb2RlJik7Ci0gICAgYm9vbCBjb21waWxlUmVnRXhwRXhl
YyhOb2RlJik7CisgICAgdm9pZCBjb21waWxlQXJpdGhNb2QoTm9kZSopOworICAgIHZvaWQgY29t
cGlsZVNvZnRNb2R1bG8oTm9kZSopOworICAgIHZvaWQgY29tcGlsZUdldEluZGV4ZWRQcm9wZXJ0
eVN0b3JhZ2UoTm9kZSopOworICAgIHZvaWQgY29tcGlsZUdldEJ5VmFsT25JbnRUeXBlZEFycmF5
KGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yJiwgTm9kZSosIHNpemVfdCBlbGVtZW50U2l6ZSwg
VHlwZWRBcnJheVNpZ25lZG5lc3MpOworICAgIHZvaWQgY29tcGlsZVB1dEJ5VmFsRm9ySW50VHlw
ZWRBcnJheShjb25zdCBUeXBlZEFycmF5RGVzY3JpcHRvciYsIEdQUlJlZyBiYXNlLCBHUFJSZWcg
cHJvcGVydHksIE5vZGUqLCBzaXplX3QgZWxlbWVudFNpemUsIFR5cGVkQXJyYXlTaWduZWRuZXNz
LCBUeXBlZEFycmF5Um91bmRpbmcgPSBUcnVuY2F0ZVJvdW5kaW5nKTsKKyAgICB2b2lkIGNvbXBp
bGVHZXRCeVZhbE9uRmxvYXRUeXBlZEFycmF5KGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yJiwg
Tm9kZSosIHNpemVfdCBlbGVtZW50U2l6ZSk7CisgICAgdm9pZCBjb21waWxlUHV0QnlWYWxGb3JG
bG9hdFR5cGVkQXJyYXkoY29uc3QgVHlwZWRBcnJheURlc2NyaXB0b3ImLCBHUFJSZWcgYmFzZSwg
R1BSUmVnIHByb3BlcnR5LCBOb2RlKiwgc2l6ZV90IGVsZW1lbnRTaXplKTsKKyAgICB2b2lkIGNv
bXBpbGVOZXdGdW5jdGlvbk5vQ2hlY2soTm9kZSopOworICAgIHZvaWQgY29tcGlsZU5ld0Z1bmN0
aW9uRXhwcmVzc2lvbihOb2RlKik7CisgICAgYm9vbCBjb21waWxlUmVnRXhwRXhlYyhOb2RlKik7
CiAgICAgCiAgICAgLy8gc2l6ZSBjYW4gYmUgYW4gaW1tZWRpYXRlIG9yIGEgcmVnaXN0ZXIsIGFu
ZCBtdXN0IGJlIGluIGJ5dGVzLiBJZiBzaXplIGlzIGEgcmVnaXN0ZXIsCiAgICAgLy8gaXQgbXVz
dCBiZSBhIGRpZmZlcmVudCByZWdpc3RlciB0aGFuIHJlc3VsdEdQUi4gRW1pdHMgY29kZSB0aGF0
IHBsYWNlIGEgcG9pbnRlciB0bwpAQCAtMjEyMiwxMyArMjEwMiw2IEBAIHB1YmxpYzoKICAgICAg
ICAgCiAgICAgICAgIG1faml0LmxvYWRQdHIoJmNvcGllZEFsbG9jYXRvci0+bV9jdXJyZW50UmVt
YWluaW5nLCByZXN1bHRHUFIpOwogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBzbG93UGF0
aCA9IG1faml0LmJyYW5jaFN1YlB0cihKSVRDb21waWxlcjo6U2lnbmVkLCBzaXplLCByZXN1bHRH
UFIpOwotI2lmIDAKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZG9uZSA9IG1faml0Lmp1
bXAoKTsKLSAgICAgICAgc2xvd1BhdGgxLmxpbmsoJm1faml0KTsKLSAgICAgICAgbV9qaXQuYnJl
YWtwb2ludCgpOwotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBzbG93UGF0aCA9IG1faml0
Lmp1bXAoKTsKLSAgICAgICAgZG9uZS5saW5rKCZtX2ppdCk7Ci0jZW5kaWYKICAgICAgICAgbV9q
aXQuc3RvcmVQdHIocmVzdWx0R1BSLCAmY29waWVkQWxsb2NhdG9yLT5tX2N1cnJlbnRSZW1haW5p
bmcpOwogICAgICAgICBtX2ppdC5uZWdQdHIocmVzdWx0R1BSKTsKICAgICAgICAgbV9qaXQuYWRk
UHRyKEpJVENvbXBpbGVyOjpBYnNvbHV0ZUFkZHJlc3MoJmNvcGllZEFsbG9jYXRvci0+bV9jdXJy
ZW50UGF5bG9hZEVuZCksIHJlc3VsdEdQUik7CkBAIC0yMTc5LDIzICsyMTUyLDIzIEBAIHB1Ymxp
YzoKICNlbmRpZgogCiAgICAgLy8gQWRkIGEgc3BlY3VsYXRpb24gY2hlY2sgd2l0aG91dCBhZGRp
dGlvbmFsIHJlY292ZXJ5LgotICAgIHZvaWQgc3BlY3VsYXRpb25DaGVjayhFeGl0S2luZCwgSlNW
YWx1ZVNvdXJjZSwgTm9kZUluZGV4LCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBqdW1wVG9GYWlsKTsK
KyAgICB2b2lkIHNwZWN1bGF0aW9uQ2hlY2soRXhpdEtpbmQsIEpTVmFsdWVTb3VyY2UsIE5vZGUq
LCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBqdW1wVG9GYWlsKTsKICAgICB2b2lkIHNwZWN1bGF0aW9u
Q2hlY2soRXhpdEtpbmQsIEpTVmFsdWVTb3VyY2UsIEVkZ2UsIE1hY3JvQXNzZW1ibGVyOjpKdW1w
IGp1bXBUb0ZhaWwpOwogICAgIC8vIEFkZCBhIHNwZWN1bGF0aW9uIGNoZWNrIHdpdGhvdXQgYWRk
aXRpb25hbCByZWNvdmVyeSwgYW5kIHdpdGggYSBwcm9taXNlIHRvIHN1cHBseSBhIGp1bXAgbGF0
ZXIuCi0gICAgT1NSRXhpdEp1bXBQbGFjZWhvbGRlciBzcGVjdWxhdGlvbkNoZWNrKEV4aXRLaW5k
LCBKU1ZhbHVlU291cmNlLCBOb2RlSW5kZXgpOworICAgIE9TUkV4aXRKdW1wUGxhY2Vob2xkZXIg
c3BlY3VsYXRpb25DaGVjayhFeGl0S2luZCwgSlNWYWx1ZVNvdXJjZSwgTm9kZSopOwogICAgIE9T
UkV4aXRKdW1wUGxhY2Vob2xkZXIgc3BlY3VsYXRpb25DaGVjayhFeGl0S2luZCwgSlNWYWx1ZVNv
dXJjZSwgRWRnZSk7CiAgICAgLy8gQWRkIGEgc2V0IG9mIHNwZWN1bGF0aW9uIGNoZWNrcyB3aXRo
b3V0IGFkZGl0aW9uYWwgcmVjb3ZlcnkuCi0gICAgdm9pZCBzcGVjdWxhdGlvbkNoZWNrKEV4aXRL
aW5kLCBKU1ZhbHVlU291cmNlLCBOb2RlSW5kZXgsIGNvbnN0IE1hY3JvQXNzZW1ibGVyOjpKdW1w
TGlzdCYganVtcHNUb0ZhaWwpOworICAgIHZvaWQgc3BlY3VsYXRpb25DaGVjayhFeGl0S2luZCwg
SlNWYWx1ZVNvdXJjZSwgTm9kZSosIGNvbnN0IE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCYganVt
cHNUb0ZhaWwpOwogICAgIHZvaWQgc3BlY3VsYXRpb25DaGVjayhFeGl0S2luZCwgSlNWYWx1ZVNv
dXJjZSwgRWRnZSwgY29uc3QgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0JiBqdW1wc1RvRmFpbCk7
CiAgICAgLy8gQWRkIGEgc3BlY3VsYXRpb24gY2hlY2sgd2l0aCBhZGRpdGlvbmFsIHJlY292ZXJ5
LgotICAgIHZvaWQgc3BlY3VsYXRpb25DaGVjayhFeGl0S2luZCwgSlNWYWx1ZVNvdXJjZSwgTm9k
ZUluZGV4LCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBqdW1wVG9GYWlsLCBjb25zdCBTcGVjdWxhdGlv
blJlY292ZXJ5Jik7CisgICAgdm9pZCBzcGVjdWxhdGlvbkNoZWNrKEV4aXRLaW5kLCBKU1ZhbHVl
U291cmNlLCBOb2RlKiwgTWFjcm9Bc3NlbWJsZXI6Okp1bXAganVtcFRvRmFpbCwgY29uc3QgU3Bl
Y3VsYXRpb25SZWNvdmVyeSYpOwogICAgIHZvaWQgc3BlY3VsYXRpb25DaGVjayhFeGl0S2luZCwg
SlNWYWx1ZVNvdXJjZSwgRWRnZSwgTWFjcm9Bc3NlbWJsZXI6Okp1bXAganVtcFRvRmFpbCwgY29u
c3QgU3BlY3VsYXRpb25SZWNvdmVyeSYpOwogICAgIC8vIFVzZSB0aGlzIGxpa2UgeW91IHdvdWxk
IHVzZSBzcGVjdWxhdGlvbkNoZWNrKCksIGV4Y2VwdCB0aGF0IHlvdSBkb24ndCBwYXNzIGl0IGEg
anVtcAogICAgIC8vIChiZWNhdXNlIHlvdSBkb24ndCBoYXZlIHRvIGV4ZWN1dGUgYSBicmFuY2g7
IHRoYXQncyBraW5kIG9mIHRoZSB3aG9sZSBwb2ludCksIGFuZCB5b3UKICAgICAvLyBtdXN0IHJl
Z2lzdGVyIHRoZSByZXR1cm5lZCBXYXRjaHBvaW50IHdpdGggc29tZXRoaW5nIHJlbGV2YW50LiBJ
biBnZW5lcmFsLCB0aGlzIHNob3VsZAogICAgIC8vIGJlIHVzZWQgd2l0aCBleHRyZW1lIGNhcmUu
IFVzZSBzcGVjdWxhdGlvbkNoZWNrKCkgdW5sZXNzIHlvdSd2ZSBnb3QgYW4gYW1hemluZyByZWFz
b24KICAgICAvLyBub3QgdG8uCi0gICAgSnVtcFJlcGxhY2VtZW50V2F0Y2hwb2ludCogc3BlY3Vs
YXRpb25XYXRjaHBvaW50KEV4aXRLaW5kLCBKU1ZhbHVlU291cmNlLCBOb2RlSW5kZXgpOworICAg
IEp1bXBSZXBsYWNlbWVudFdhdGNocG9pbnQqIHNwZWN1bGF0aW9uV2F0Y2hwb2ludChFeGl0S2lu
ZCwgSlNWYWx1ZVNvdXJjZSwgTm9kZSopOwogICAgIC8vIFRoZSBkZWZhdWx0IGZvciBzcGVjdWxh
dGlvbiB3YXRjaHBvaW50cyBpcyB0aGF0IHRoZXkncmUgdW5jb3VudGVkLCBiZWNhdXNlIHRoZQog
ICAgIC8vIGFjdCBvZiBmaXJpbmcgYSB3YXRjaHBvaW50IGludmFsaWRhdGVzIGl0LiBTbywgZnV0
dXJlIHJlY29tcGlsYXRpb25zIHdpbGwgbm90CiAgICAgLy8gYXR0ZW1wdCB0byBzZXQgdGhpcyB3
YXRjaHBvaW50IGFnYWluLgpAQCAtMjIwNiwxNCArMjE3OSwxNCBAQCBwdWJsaWM6CiAgICAgCiAg
ICAgLy8gTm90ZTogbm90IHNwZWNpZnlpbmcgdGhlIHZhbHVlUmVjb3ZlcnkgYXJndW1lbnQgKGxl
YXZpbmcgaXQgYXMgVmFsdWVSZWNvdmVyeSgpKSBpbXBsaWVzCiAgICAgLy8gdGhhdCB5b3UndmUg
ZW5zdXJlZCB0aGF0IHRoZXJlIGV4aXN0cyBhIE1vdkhpbnQgcHJpb3IgdG8geW91ciB1c2Ugb2Yg
Zm9yd2FyZFNwZWN1bGF0aW9uQ2hlY2soKS4KLSAgICB2b2lkIGZvcndhcmRTcGVjdWxhdGlvbkNo
ZWNrKEV4aXRLaW5kLCBKU1ZhbHVlU291cmNlLCBOb2RlSW5kZXgsIE1hY3JvQXNzZW1ibGVyOjpK
dW1wIGp1bXBUb0ZhaWwsIGNvbnN0IFZhbHVlUmVjb3ZlcnkmID0gVmFsdWVSZWNvdmVyeSgpKTsK
LSAgICB2b2lkIGZvcndhcmRTcGVjdWxhdGlvbkNoZWNrKEV4aXRLaW5kLCBKU1ZhbHVlU291cmNl
LCBOb2RlSW5kZXgsIGNvbnN0IE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCYganVtcHNUb0ZhaWws
IGNvbnN0IFZhbHVlUmVjb3ZlcnkmID0gVmFsdWVSZWNvdmVyeSgpKTsKLSAgICB2b2lkIHNwZWN1
bGF0aW9uQ2hlY2soRXhpdEtpbmQsIEpTVmFsdWVTb3VyY2UsIE5vZGVJbmRleCwgTWFjcm9Bc3Nl
bWJsZXI6Okp1bXAganVtcFRvRmFpbCwgU3BlY3VsYXRpb25EaXJlY3Rpb24pOwotICAgIHZvaWQg
c3BlY3VsYXRpb25DaGVjayhFeGl0S2luZCwgSlNWYWx1ZVNvdXJjZSwgTm9kZUluZGV4LCBNYWNy
b0Fzc2VtYmxlcjo6SnVtcCBqdW1wVG9GYWlsLCBjb25zdCBTcGVjdWxhdGlvblJlY292ZXJ5Jiwg
U3BlY3VsYXRpb25EaXJlY3Rpb24pOworICAgIHZvaWQgZm9yd2FyZFNwZWN1bGF0aW9uQ2hlY2so
RXhpdEtpbmQsIEpTVmFsdWVTb3VyY2UsIE5vZGUqLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBqdW1w
VG9GYWlsLCBjb25zdCBWYWx1ZVJlY292ZXJ5JiA9IFZhbHVlUmVjb3ZlcnkoKSk7CisgICAgdm9p
ZCBmb3J3YXJkU3BlY3VsYXRpb25DaGVjayhFeGl0S2luZCwgSlNWYWx1ZVNvdXJjZSwgTm9kZSos
IGNvbnN0IE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCYganVtcHNUb0ZhaWwsIGNvbnN0IFZhbHVl
UmVjb3ZlcnkmID0gVmFsdWVSZWNvdmVyeSgpKTsKKyAgICB2b2lkIHNwZWN1bGF0aW9uQ2hlY2so
RXhpdEtpbmQsIEpTVmFsdWVTb3VyY2UsIE5vZGUqLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBqdW1w
VG9GYWlsLCBTcGVjdWxhdGlvbkRpcmVjdGlvbik7CisgICAgdm9pZCBzcGVjdWxhdGlvbkNoZWNr
KEV4aXRLaW5kLCBKU1ZhbHVlU291cmNlLCBOb2RlKiwgTWFjcm9Bc3NlbWJsZXI6Okp1bXAganVt
cFRvRmFpbCwgY29uc3QgU3BlY3VsYXRpb25SZWNvdmVyeSYsIFNwZWN1bGF0aW9uRGlyZWN0aW9u
KTsKICAgICAvLyBDYWxsZWQgd2hlbiB3ZSBzdGF0aWNhbGx5IGRldGVybWluZSB0aGF0IGEgc3Bl
Y3VsYXRpb24gd2lsbCBmYWlsLgotICAgIHZvaWQgdGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRp
b24oRXhpdEtpbmQsIEpTVmFsdWVSZWdzLCBOb2RlSW5kZXgpOworICAgIHZvaWQgdGVybWluYXRl
U3BlY3VsYXRpdmVFeGVjdXRpb24oRXhpdEtpbmQsIEpTVmFsdWVSZWdzLCBOb2RlKik7CiAgICAg
dm9pZCB0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihFeGl0S2luZCwgSlNWYWx1ZVJlZ3Ms
IEVkZ2UpOwotICAgIHZvaWQgdGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oRXhpdEtpbmQs
IEpTVmFsdWVSZWdzLCBOb2RlSW5kZXgsIFNwZWN1bGF0aW9uRGlyZWN0aW9uKTsKKyAgICB2b2lk
IHRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKEV4aXRLaW5kLCBKU1ZhbHVlUmVncywgTm9k
ZSosIFNwZWN1bGF0aW9uRGlyZWN0aW9uKTsKICAgICAvLyBJc3N1ZSBhIGZvcndhcmQgc3BlY3Vs
YXRpb24gd2F0Y2hwb2ludCwgd2hpY2ggd2lsbCBleGl0IHRvIHRoZSBuZXh0IGluc3RydWN0aW9u
IHJhdGhlcgogICAgIC8vIHRoYW4gdGhlIGN1cnJlbnQgb25lLgogICAgIEp1bXBSZXBsYWNlbWVu
dFdhdGNocG9pbnQqIGZvcndhcmRTcGVjdWxhdGlvbldhdGNocG9pbnQoRXhpdEtpbmQgPSBVbmNv
dW50YWJsZVdhdGNocG9pbnQpOwpAQCAtMjIyMywxMiArMjE5NiwxMiBAQCBwdWJsaWM6CiAgICAg
CiAgICAgSklUQ29tcGlsZXI6Okp1bXAganVtcFNsb3dGb3JVbndhbnRlZEFycmF5TW9kZShHUFJS
ZWcgdGVtcFdpdGhJbmRleGluZ1R5cGVSZWcsIEFycmF5TW9kZSwgSW5kZXhpbmdUeXBlLCBib29s
IGludmVydCk7CiAgICAgSklUQ29tcGlsZXI6Okp1bXBMaXN0IGp1bXBTbG93Rm9yVW53YW50ZWRB
cnJheU1vZGUoR1BSUmVnIHRlbXBXaXRoSW5kZXhpbmdUeXBlUmVnLCBBcnJheU1vZGUsIGJvb2wg
aW52ZXJ0ID0gZmFsc2UpOwotICAgIHZvaWQgY2hlY2tBcnJheShOb2RlJik7Ci0gICAgdm9pZCBh
cnJheWlmeShOb2RlJiwgR1BSUmVnIGJhc2VSZWcsIEdQUlJlZyBwcm9wZXJ0eVJlZyk7Ci0gICAg
dm9pZCBhcnJheWlmeShOb2RlJik7CisgICAgdm9pZCBjaGVja0FycmF5KE5vZGUqKTsKKyAgICB2
b2lkIGFycmF5aWZ5KE5vZGUqLCBHUFJSZWcgYmFzZVJlZywgR1BSUmVnIHByb3BlcnR5UmVnKTsK
KyAgICB2b2lkIGFycmF5aWZ5KE5vZGUqKTsKICAgICAKICAgICB0ZW1wbGF0ZTxib29sIHN0cmlj
dD4KLSAgICBHUFJSZWcgZmlsbFNwZWN1bGF0ZUludEludGVybmFsKE5vZGVJbmRleCwgRGF0YUZv
cm1hdCYgcmV0dXJuRm9ybWF0LCBTcGVjdWxhdGlvbkRpcmVjdGlvbik7CisgICAgR1BSUmVnIGZp
bGxTcGVjdWxhdGVJbnRJbnRlcm5hbChOb2RlKiwgRGF0YUZvcm1hdCYgcmV0dXJuRm9ybWF0LCBT
cGVjdWxhdGlvbkRpcmVjdGlvbik7CiAgICAgCiAgICAgLy8gSXQgaXMgcG9zc2libGUsIGR1cmlu
ZyBzcGVjdWxhdGl2ZSBnZW5lcmF0aW9uLCB0byByZWFjaCBhIHNpdHVhdGlvbiBpbiB3aGljaCB3
ZQogICAgIC8vIGNhbiBzdGF0aWNhbGx5IGRldGVybWluZSBhIHNwZWN1bGF0aW9uIHdpbGwgZmFp
bCAoZm9yIGV4YW1wbGUsIHdoZW4gdHdvIG5vZGVzCkBAIC0yMjQ0LDkgKzIyMTcsOSBAQCBwdWJs
aWM6CiAgICAgICAgIHJldHVybiB2YWx1ZVNvdXJjZVJlZmVyZW5jZUZvck9wZXJhbmQob3BlcmFu
ZCk7CiAgICAgfQogICAgIAotICAgIHZvaWQgc2V0Tm9kZUluZGV4Rm9yT3BlcmFuZChOb2RlSW5k
ZXggbm9kZUluZGV4LCBpbnQgb3BlcmFuZCkKKyAgICB2b2lkIHNldE5vZGVGb3JPcGVyYW5kKE5v
ZGUqIG5vZGUsIGludCBvcGVyYW5kKQogICAgIHsKLSAgICAgICAgdmFsdWVTb3VyY2VSZWZlcmVu
Y2VGb3JPcGVyYW5kKG9wZXJhbmQpID0gVmFsdWVTb3VyY2UoTWluaWZpZWRJRChub2RlSW5kZXgp
KTsKKyAgICAgICAgdmFsdWVTb3VyY2VSZWZlcmVuY2VGb3JPcGVyYW5kKG9wZXJhbmQpID0gVmFs
dWVTb3VyY2UoTWluaWZpZWRJRChub2RlKSk7CiAgICAgfQogICAgIAogICAgIC8vIENhbGwgdGhp
cyB3aXRoIGNhcmUsIHNpbmNlIGl0IGJvdGggcmV0dXJucyBhIHJlZmVyZW5jZSBpbnRvIGFuIGFy
cmF5CkBAIC0yMjc3LDcgKzIyNTAsNyBAQCBwdWJsaWM6CiAKICAgICAvLyBUaGUgY3VycmVudCBu
b2RlIGJlaW5nIGdlbmVyYXRlZC4KICAgICBCbG9ja0luZGV4IG1fYmxvY2s7Ci0gICAgTm9kZUlu
ZGV4IG1fY29tcGlsZUluZGV4OworICAgIE5vZGUqIG1fY3VycmVudE5vZGU7CiAgICAgdW5zaWdu
ZWQgbV9pbmRleEluQmxvY2s7CiAgICAgLy8gVmlydHVhbCBhbmQgcGh5c2ljYWwgcmVnaXN0ZXIg
bWFwcy4KICAgICBWZWN0b3I8R2VuZXJhdGlvbkluZm8sIDMyPiBtX2dlbmVyYXRpb25JbmZvOwpA
QCAtMjMzOCw3ICsyMzExLDcgQEAgY2xhc3MgSW50ZWdlck9wZXJhbmQgewogcHVibGljOgogICAg
IGV4cGxpY2l0IEludGVnZXJPcGVyYW5kKFNwZWN1bGF0aXZlSklUKiBqaXQsIEVkZ2UgdXNlKQog
ICAgICAgICA6IG1faml0KGppdCkKLSAgICAgICAgLCBtX2luZGV4KHVzZS5pbmRleCgpKQorICAg
ICAgICAsIG1fbm9kZSh1c2Uubm9kZSgpKQogICAgICAgICAsIG1fZ3ByT3JJbnZhbGlkKEludmFs
aWRHUFJSZWcpCiAjaWZuZGVmIE5ERUJVRwogICAgICAgICAsIG1fZm9ybWF0KERhdGFGb3JtYXRO
b25lKQpAQCAtMjM0Niw3ICsyMzE5LDcgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgQVNTRVJU
KG1faml0KTsKICAgICAgICAgQVNTRVJUKHVzZS51c2VLaW5kKCkgIT0gRG91YmxlVXNlKTsKLSAg
ICAgICAgaWYgKGppdC0+aXNGaWxsZWQobV9pbmRleCkpCisgICAgICAgIGlmIChqaXQtPmlzRmls
bGVkKG1fbm9kZSkpCiAgICAgICAgICAgICBncHIoKTsKICAgICB9CiAKQEAgLTIzNTYsOSArMjMy
OSw5IEBAIHB1YmxpYzoKICAgICAgICAgbV9qaXQtPnVubG9jayhtX2dwck9ySW52YWxpZCk7CiAg
ICAgfQogCi0gICAgTm9kZUluZGV4IGluZGV4KCkgY29uc3QKKyAgICBOb2RlKiBub2RlKCkgY29u
c3QKICAgICB7Ci0gICAgICAgIHJldHVybiBtX2luZGV4OworICAgICAgICByZXR1cm4gbV9ub2Rl
OwogICAgIH0KIAogICAgIERhdGFGb3JtYXQgZm9ybWF0KCkKQEAgLTIzNzEsMTggKzIzNDQsMTgg
QEAgcHVibGljOgogICAgIEdQUlJlZyBncHIoKQogICAgIHsKICAgICAgICAgaWYgKG1fZ3ByT3JJ
bnZhbGlkID09IEludmFsaWRHUFJSZWcpCi0gICAgICAgICAgICBtX2dwck9ySW52YWxpZCA9IG1f
aml0LT5maWxsSW50ZWdlcihpbmRleCgpLCBtX2Zvcm1hdCk7CisgICAgICAgICAgICBtX2dwck9y
SW52YWxpZCA9IG1faml0LT5maWxsSW50ZWdlcihub2RlKCksIG1fZm9ybWF0KTsKICAgICAgICAg
cmV0dXJuIG1fZ3ByT3JJbnZhbGlkOwogICAgIH0KICAgICAKICAgICB2b2lkIHVzZSgpCiAgICAg
ewotICAgICAgICBtX2ppdC0+dXNlKG1faW5kZXgpOworICAgICAgICBtX2ppdC0+dXNlKG1fbm9k
ZSk7CiAgICAgfQogCiBwcml2YXRlOgogICAgIFNwZWN1bGF0aXZlSklUKiBtX2ppdDsKLSAgICBO
b2RlSW5kZXggbV9pbmRleDsKKyAgICBOb2RlKiBtX25vZGU7CiAgICAgR1BSUmVnIG1fZ3ByT3JJ
bnZhbGlkOwogICAgIERhdGFGb3JtYXQgbV9mb3JtYXQ7CiB9OwpAQCAtMjM5MSw3ICsyMzY0LDcg
QEAgY2xhc3MgRG91YmxlT3BlcmFuZCB7CiBwdWJsaWM6CiAgICAgZXhwbGljaXQgRG91YmxlT3Bl
cmFuZChTcGVjdWxhdGl2ZUpJVCogaml0LCBFZGdlIHVzZSkKICAgICAgICAgOiBtX2ppdChqaXQp
Ci0gICAgICAgICwgbV9pbmRleCh1c2UuaW5kZXgoKSkKKyAgICAgICAgLCBtX25vZGUodXNlLm5v
ZGUoKSkKICAgICAgICAgLCBtX2Zwck9ySW52YWxpZChJbnZhbGlkRlBSUmVnKQogICAgIHsKICAg
ICAgICAgQVNTRVJUKG1faml0KTsKQEAgLTI0MDQsNyArMjM3Nyw3IEBAIHB1YmxpYzoKICAgICAg
ICAgLy8gaXMgbm90IG9uZSBhbHJlYWR5LgogICAgICAgICBBU1NFUlQodXNlLnVzZUtpbmQoKSAh
PSBEb3VibGVVc2UpOwogICAgICAgICAKLSAgICAgICAgaWYgKGppdC0+aXNGaWxsZWREb3VibGUo
bV9pbmRleCkpCisgICAgICAgIGlmIChqaXQtPmlzRmlsbGVkRG91YmxlKG1fbm9kZSkpCiAgICAg
ICAgICAgICBmcHIoKTsKICAgICB9CiAKQEAgLTI0MTQsMjYgKzIzODcsMjYgQEAgcHVibGljOgog
ICAgICAgICBtX2ppdC0+dW5sb2NrKG1fZnByT3JJbnZhbGlkKTsKICAgICB9CiAKLSAgICBOb2Rl
SW5kZXggaW5kZXgoKSBjb25zdAorICAgIE5vZGUqIG5vZGUoKSBjb25zdAogICAgIHsKLSAgICAg
ICAgcmV0dXJuIG1faW5kZXg7CisgICAgICAgIHJldHVybiBtX25vZGU7CiAgICAgfQogCiAgICAg
RlBSUmVnIGZwcigpCiAgICAgewogICAgICAgICBpZiAobV9mcHJPckludmFsaWQgPT0gSW52YWxp
ZEZQUlJlZykKLSAgICAgICAgICAgIG1fZnByT3JJbnZhbGlkID0gbV9qaXQtPmZpbGxEb3VibGUo
aW5kZXgoKSk7CisgICAgICAgICAgICBtX2Zwck9ySW52YWxpZCA9IG1faml0LT5maWxsRG91Ymxl
KG5vZGUoKSk7CiAgICAgICAgIHJldHVybiBtX2Zwck9ySW52YWxpZDsKICAgICB9CiAgICAgCiAg
ICAgdm9pZCB1c2UoKQogICAgIHsKLSAgICAgICAgbV9qaXQtPnVzZShtX2luZGV4KTsKKyAgICAg
ICAgbV9qaXQtPnVzZShtX25vZGUpOwogICAgIH0KIAogcHJpdmF0ZToKICAgICBTcGVjdWxhdGl2
ZUpJVCogbV9qaXQ7Ci0gICAgTm9kZUluZGV4IG1faW5kZXg7CisgICAgTm9kZSogbV9ub2RlOwog
ICAgIEZQUlJlZyBtX2Zwck9ySW52YWxpZDsKIH07CiAKQEAgLTI0NDEsNyArMjQxNCw3IEBAIGNs
YXNzIEpTVmFsdWVPcGVyYW5kIHsKIHB1YmxpYzoKICAgICBleHBsaWNpdCBKU1ZhbHVlT3BlcmFu
ZChTcGVjdWxhdGl2ZUpJVCogaml0LCBFZGdlIHVzZSkKICAgICAgICAgOiBtX2ppdChqaXQpCi0g
ICAgICAgICwgbV9pbmRleCh1c2UuaW5kZXgoKSkKKyAgICAgICAgLCBtX25vZGUodXNlLm5vZGUo
KSkKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgICAgICAsIG1fZ3ByT3JJbnZhbGlkKEludmFsaWRH
UFJSZWcpCiAjZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQpAQCAtMjQ1MSwxMiArMjQyNCwxMiBAQCBw
dWJsaWM6CiAgICAgICAgIEFTU0VSVChtX2ppdCk7CiAgICAgICAgIEFTU0VSVCh1c2UudXNlS2lu
ZCgpICE9IERvdWJsZVVzZSk7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgaWYgKGppdC0+
aXNGaWxsZWQobV9pbmRleCkpCisgICAgICAgIGlmIChqaXQtPmlzRmlsbGVkKG1fbm9kZSkpCiAg
ICAgICAgICAgICBncHIoKTsKICNlbGlmIFVTRShKU1ZBTFVFMzJfNjQpCiAgICAgICAgIG1fcmVn
aXN0ZXIucGFpci50YWdHUFIgPSBJbnZhbGlkR1BSUmVnOwogICAgICAgICBtX3JlZ2lzdGVyLnBh
aXIucGF5bG9hZEdQUiA9IEludmFsaWRHUFJSZWc7Ci0gICAgICAgIGlmIChqaXQtPmlzRmlsbGVk
KG1faW5kZXgpKQorICAgICAgICBpZiAoaml0LT5pc0ZpbGxlZChtX25vZGUpKQogICAgICAgICAg
ICAgZmlsbCgpOwogI2VuZGlmCiAgICAgfQpAQCAtMjQ3OCwxNiArMjQ1MSwxNiBAQCBwdWJsaWM6
CiAjZW5kaWYKICAgICB9CiAKLSAgICBOb2RlSW5kZXggaW5kZXgoKSBjb25zdAorICAgIE5vZGUq
IG5vZGUoKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIG1faW5kZXg7CisgICAgICAgIHJl
dHVybiBtX25vZGU7CiAgICAgfQogCiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICBHUFJSZWcgZ3By
KCkKICAgICB7CiAgICAgICAgIGlmIChtX2dwck9ySW52YWxpZCA9PSBJbnZhbGlkR1BSUmVnKQot
ICAgICAgICAgICAgbV9ncHJPckludmFsaWQgPSBtX2ppdC0+ZmlsbEpTVmFsdWUoaW5kZXgoKSk7
CisgICAgICAgICAgICBtX2dwck9ySW52YWxpZCA9IG1faml0LT5maWxsSlNWYWx1ZShub2RlKCkp
OwogICAgICAgICByZXR1cm4gbV9ncHJPckludmFsaWQ7CiAgICAgfQogICAgIEpTVmFsdWVSZWdz
IGpzVmFsdWVSZWdzKCkKQEAgLTI1MDAsNyArMjQ3Myw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGZp
bGwoKQogICAgIHsKICAgICAgICAgaWYgKG1fcmVnaXN0ZXIucGFpci50YWdHUFIgPT0gSW52YWxp
ZEdQUlJlZyAmJiBtX3JlZ2lzdGVyLnBhaXIucGF5bG9hZEdQUiA9PSBJbnZhbGlkR1BSUmVnKQot
ICAgICAgICAgICAgbV9pc0RvdWJsZSA9ICFtX2ppdC0+ZmlsbEpTVmFsdWUoaW5kZXgoKSwgbV9y
ZWdpc3Rlci5wYWlyLnRhZ0dQUiwgbV9yZWdpc3Rlci5wYWlyLnBheWxvYWRHUFIsIG1fcmVnaXN0
ZXIuZnByKTsKKyAgICAgICAgICAgIG1faXNEb3VibGUgPSAhbV9qaXQtPmZpbGxKU1ZhbHVlKG5v
ZGUoKSwgbV9yZWdpc3Rlci5wYWlyLnRhZ0dQUiwgbV9yZWdpc3Rlci5wYWlyLnBheWxvYWRHUFIs
IG1fcmVnaXN0ZXIuZnByKTsKICAgICB9CiAKICAgICBHUFJSZWcgdGFnR1BSKCkKQEAgLTI1MzIs
MTIgKzI1MDUsMTIgQEAgcHVibGljOgogCiAgICAgdm9pZCB1c2UoKQogICAgIHsKLSAgICAgICAg
bV9qaXQtPnVzZShtX2luZGV4KTsKKyAgICAgICAgbV9qaXQtPnVzZShtX25vZGUpOwogICAgIH0K
IAogcHJpdmF0ZToKICAgICBTcGVjdWxhdGl2ZUpJVCogbV9qaXQ7Ci0gICAgTm9kZUluZGV4IG1f
aW5kZXg7CisgICAgTm9kZSogbV9ub2RlOwogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgR1BSUmVn
IG1fZ3ByT3JJbnZhbGlkOwogI2VsaWYgVVNFKEpTVkFMVUUzMl82NCkKQEAgLTI1NTYsMTIgKzI1
MjksMTIgQEAgY2xhc3MgU3RvcmFnZU9wZXJhbmQgewogcHVibGljOgogICAgIGV4cGxpY2l0IFN0
b3JhZ2VPcGVyYW5kKFNwZWN1bGF0aXZlSklUKiBqaXQsIEVkZ2UgdXNlKQogICAgICAgICA6IG1f
aml0KGppdCkKLSAgICAgICAgLCBtX2luZGV4KHVzZS5pbmRleCgpKQorICAgICAgICAsIG1fbm9k
ZSh1c2Uubm9kZSgpKQogICAgICAgICAsIG1fZ3ByT3JJbnZhbGlkKEludmFsaWRHUFJSZWcpCiAg
ICAgewogICAgICAgICBBU1NFUlQobV9qaXQpOwogICAgICAgICBBU1NFUlQodXNlLnVzZUtpbmQo
KSAhPSBEb3VibGVVc2UpOwotICAgICAgICBpZiAoaml0LT5pc0ZpbGxlZChtX2luZGV4KSkKKyAg
ICAgICAgaWYgKGppdC0+aXNGaWxsZWQobV9ub2RlKSkKICAgICAgICAgICAgIGdwcigpOwogICAg
IH0KICAgICAKQEAgLTI1NzEsMjYgKzI1NDQsMjYgQEAgcHVibGljOgogICAgICAgICBtX2ppdC0+
dW5sb2NrKG1fZ3ByT3JJbnZhbGlkKTsKICAgICB9CiAgICAgCi0gICAgTm9kZUluZGV4IGluZGV4
KCkgY29uc3QKKyAgICBOb2RlKiBub2RlKCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBt
X2luZGV4OworICAgICAgICByZXR1cm4gbV9ub2RlOwogICAgIH0KICAgICAKICAgICBHUFJSZWcg
Z3ByKCkKICAgICB7CiAgICAgICAgIGlmIChtX2dwck9ySW52YWxpZCA9PSBJbnZhbGlkR1BSUmVn
KQotICAgICAgICAgICAgbV9ncHJPckludmFsaWQgPSBtX2ppdC0+ZmlsbFN0b3JhZ2UoaW5kZXgo
KSk7CisgICAgICAgICAgICBtX2dwck9ySW52YWxpZCA9IG1faml0LT5maWxsU3RvcmFnZShub2Rl
KCkpOwogICAgICAgICByZXR1cm4gbV9ncHJPckludmFsaWQ7CiAgICAgfQogICAgIAogICAgIHZv
aWQgdXNlKCkKICAgICB7Ci0gICAgICAgIG1faml0LT51c2UobV9pbmRleCk7CisgICAgICAgIG1f
aml0LT51c2UobV9ub2RlKTsKICAgICB9CiAgICAgCiBwcml2YXRlOgogICAgIFNwZWN1bGF0aXZl
SklUKiBtX2ppdDsKLSAgICBOb2RlSW5kZXggbV9pbmRleDsKKyAgICBOb2RlKiBtX25vZGU7CiAg
ICAgR1BSUmVnIG1fZ3ByT3JJbnZhbGlkOwogfTsKIApAQCAtMjcyNiw3ICsyNjk5LDcgQEAgY2xh
c3MgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgewogcHVibGljOgogICAgIGV4cGxpY2l0IFNwZWN1
bGF0ZUludGVnZXJPcGVyYW5kKFNwZWN1bGF0aXZlSklUKiBqaXQsIEVkZ2UgdXNlLCBTcGVjdWxh
dGlvbkRpcmVjdGlvbiBkaXJlY3Rpb24gPSBCYWNrd2FyZFNwZWN1bGF0aW9uKQogICAgICAgICA6
IG1faml0KGppdCkKLSAgICAgICAgLCBtX2luZGV4KHVzZS5pbmRleCgpKQorICAgICAgICAsIG1f
bm9kZSh1c2Uubm9kZSgpKQogICAgICAgICAsIG1fZ3ByT3JJbnZhbGlkKEludmFsaWRHUFJSZWcp
CiAjaWZuZGVmIE5ERUJVRwogICAgICAgICAsIG1fZm9ybWF0KERhdGFGb3JtYXROb25lKQpAQCAt
MjczNSw3ICsyNzA4LDcgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgQVNTRVJUKG1faml0KTsK
ICAgICAgICAgQVNTRVJUKHVzZS51c2VLaW5kKCkgIT0gRG91YmxlVXNlKTsKLSAgICAgICAgaWYg
KGppdC0+aXNGaWxsZWQobV9pbmRleCkpCisgICAgICAgIGlmIChqaXQtPmlzRmlsbGVkKG1fbm9k
ZSkpCiAgICAgICAgICAgICBncHIoKTsKICAgICB9CiAKQEAgLTI3NDUsOSArMjcxOCw5IEBAIHB1
YmxpYzoKICAgICAgICAgbV9qaXQtPnVubG9jayhtX2dwck9ySW52YWxpZCk7CiAgICAgfQogCi0g
ICAgTm9kZUluZGV4IGluZGV4KCkgY29uc3QKKyAgICBOb2RlKiBub2RlKCkgY29uc3QKICAgICB7
Ci0gICAgICAgIHJldHVybiBtX2luZGV4OworICAgICAgICByZXR1cm4gbV9ub2RlOwogICAgIH0K
IAogICAgIERhdGFGb3JtYXQgZm9ybWF0KCkKQEAgLTI3NjAsMTggKzI3MzMsMTggQEAgcHVibGlj
OgogICAgIEdQUlJlZyBncHIoKQogICAgIHsKICAgICAgICAgaWYgKG1fZ3ByT3JJbnZhbGlkID09
IEludmFsaWRHUFJSZWcpCi0gICAgICAgICAgICBtX2dwck9ySW52YWxpZCA9IG1faml0LT5maWxs
U3BlY3VsYXRlSW50KGluZGV4KCksIG1fZm9ybWF0LCBtX2RpcmVjdGlvbik7CisgICAgICAgICAg
ICBtX2dwck9ySW52YWxpZCA9IG1faml0LT5maWxsU3BlY3VsYXRlSW50KG5vZGUoKSwgbV9mb3Jt
YXQsIG1fZGlyZWN0aW9uKTsKICAgICAgICAgcmV0dXJuIG1fZ3ByT3JJbnZhbGlkOwogICAgIH0K
ICAgICAKICAgICB2b2lkIHVzZSgpCiAgICAgewotICAgICAgICBtX2ppdC0+dXNlKG1faW5kZXgp
OworICAgICAgICBtX2ppdC0+dXNlKG1fbm9kZSk7CiAgICAgfQogCiBwcml2YXRlOgogICAgIFNw
ZWN1bGF0aXZlSklUKiBtX2ppdDsKLSAgICBOb2RlSW5kZXggbV9pbmRleDsKKyAgICBOb2RlKiBt
X25vZGU7CiAgICAgR1BSUmVnIG1fZ3ByT3JJbnZhbGlkOwogICAgIERhdGFGb3JtYXQgbV9mb3Jt
YXQ7CiAgICAgU3BlY3VsYXRpb25EaXJlY3Rpb24gbV9kaXJlY3Rpb247CkBAIC0yNzgxLDEyICsy
NzU0LDEyIEBAIGNsYXNzIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCB7CiBwdWJsaWM6CiAg
ICAgZXhwbGljaXQgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kKFNwZWN1bGF0aXZlSklUKiBq
aXQsIEVkZ2UgdXNlKQogICAgICAgICA6IG1faml0KGppdCkKLSAgICAgICAgLCBtX2luZGV4KHVz
ZS5pbmRleCgpKQorICAgICAgICAsIG1fbm9kZSh1c2Uubm9kZSgpKQogICAgICAgICAsIG1fZ3By
T3JJbnZhbGlkKEludmFsaWRHUFJSZWcpCiAgICAgewogICAgICAgICBBU1NFUlQobV9qaXQpOwog
ICAgICAgICBBU1NFUlQodXNlLnVzZUtpbmQoKSAhPSBEb3VibGVVc2UpOwotICAgICAgICBpZiAo
aml0LT5pc0ZpbGxlZChtX2luZGV4KSkKKyAgICAgICAgaWYgKGppdC0+aXNGaWxsZWQobV9ub2Rl
KSkKICAgICAgICAgICAgIGdwcigpOwogICAgIH0KIApAQCAtMjc5NiwyNiArMjc2OSwyNiBAQCBw
dWJsaWM6CiAgICAgICAgIG1faml0LT51bmxvY2sobV9ncHJPckludmFsaWQpOwogICAgIH0KIAot
ICAgIE5vZGVJbmRleCBpbmRleCgpIGNvbnN0CisgICAgTm9kZSogbm9kZSgpIGNvbnN0CiAgICAg
ewotICAgICAgICByZXR1cm4gbV9pbmRleDsKKyAgICAgICAgcmV0dXJuIG1fbm9kZTsKICAgICB9
CiAKICAgICBHUFJSZWcgZ3ByKCkKICAgICB7CiAgICAgICAgIGlmIChtX2dwck9ySW52YWxpZCA9
PSBJbnZhbGlkR1BSUmVnKQotICAgICAgICAgICAgbV9ncHJPckludmFsaWQgPSBtX2ppdC0+Zmls
bFNwZWN1bGF0ZUludFN0cmljdChpbmRleCgpKTsKKyAgICAgICAgICAgIG1fZ3ByT3JJbnZhbGlk
ID0gbV9qaXQtPmZpbGxTcGVjdWxhdGVJbnRTdHJpY3Qobm9kZSgpKTsKICAgICAgICAgcmV0dXJu
IG1fZ3ByT3JJbnZhbGlkOwogICAgIH0KICAgICAKICAgICB2b2lkIHVzZSgpCiAgICAgewotICAg
ICAgICBtX2ppdC0+dXNlKG1faW5kZXgpOworICAgICAgICBtX2ppdC0+dXNlKG1fbm9kZSk7CiAg
ICAgfQogCiBwcml2YXRlOgogICAgIFNwZWN1bGF0aXZlSklUKiBtX2ppdDsKLSAgICBOb2RlSW5k
ZXggbV9pbmRleDsKKyAgICBOb2RlKiBtX25vZGU7CiAgICAgR1BSUmVnIG1fZ3ByT3JJbnZhbGlk
OwogfTsKIApAQCAtMjgyMywxMyArMjc5NiwxMyBAQCBjbGFzcyBTcGVjdWxhdGVEb3VibGVPcGVy
YW5kIHsKIHB1YmxpYzoKICAgICBleHBsaWNpdCBTcGVjdWxhdGVEb3VibGVPcGVyYW5kKFNwZWN1
bGF0aXZlSklUKiBqaXQsIEVkZ2UgdXNlLCBTcGVjdWxhdGlvbkRpcmVjdGlvbiBkaXJlY3Rpb24g
PSBCYWNrd2FyZFNwZWN1bGF0aW9uKQogICAgICAgICA6IG1faml0KGppdCkKLSAgICAgICAgLCBt
X2luZGV4KHVzZS5pbmRleCgpKQorICAgICAgICAsIG1fbm9kZSh1c2Uubm9kZSgpKQogICAgICAg
ICAsIG1fZnByT3JJbnZhbGlkKEludmFsaWRGUFJSZWcpCiAgICAgICAgICwgbV9kaXJlY3Rpb24o
ZGlyZWN0aW9uKQogICAgIHsKICAgICAgICAgQVNTRVJUKG1faml0KTsKICAgICAgICAgQVNTRVJU
KHVzZS51c2VLaW5kKCkgPT0gRG91YmxlVXNlKTsKLSAgICAgICAgaWYgKGppdC0+aXNGaWxsZWQo
bV9pbmRleCkpCisgICAgICAgIGlmIChqaXQtPmlzRmlsbGVkKG1fbm9kZSkpCiAgICAgICAgICAg
ICBmcHIoKTsKICAgICB9CiAKQEAgLTI4MzksMjYgKzI4MTIsMjYgQEAgcHVibGljOgogICAgICAg
ICBtX2ppdC0+dW5sb2NrKG1fZnByT3JJbnZhbGlkKTsKICAgICB9CiAKLSAgICBOb2RlSW5kZXgg
aW5kZXgoKSBjb25zdAorICAgIE5vZGUqIG5vZGUoKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0
dXJuIG1faW5kZXg7CisgICAgICAgIHJldHVybiBtX25vZGU7CiAgICAgfQogCiAgICAgRlBSUmVn
IGZwcigpCiAgICAgewogICAgICAgICBpZiAobV9mcHJPckludmFsaWQgPT0gSW52YWxpZEZQUlJl
ZykKLSAgICAgICAgICAgIG1fZnByT3JJbnZhbGlkID0gbV9qaXQtPmZpbGxTcGVjdWxhdGVEb3Vi
bGUoaW5kZXgoKSwgbV9kaXJlY3Rpb24pOworICAgICAgICAgICAgbV9mcHJPckludmFsaWQgPSBt
X2ppdC0+ZmlsbFNwZWN1bGF0ZURvdWJsZShub2RlKCksIG1fZGlyZWN0aW9uKTsKICAgICAgICAg
cmV0dXJuIG1fZnByT3JJbnZhbGlkOwogICAgIH0KICAgICAKICAgICB2b2lkIHVzZSgpCiAgICAg
ewotICAgICAgICBtX2ppdC0+dXNlKG1faW5kZXgpOworICAgICAgICBtX2ppdC0+dXNlKG1fbm9k
ZSk7CiAgICAgfQogCiBwcml2YXRlOgogICAgIFNwZWN1bGF0aXZlSklUKiBtX2ppdDsKLSAgICBO
b2RlSW5kZXggbV9pbmRleDsKKyAgICBOb2RlKiBtX25vZGU7CiAgICAgRlBSUmVnIG1fZnByT3JJ
bnZhbGlkOwogICAgIFNwZWN1bGF0aW9uRGlyZWN0aW9uIG1fZGlyZWN0aW9uOwogfTsKQEAgLTI4
NjcsMTMgKzI4NDAsMTMgQEAgY2xhc3MgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgewogcHVibGljOgog
ICAgIGV4cGxpY2l0IFNwZWN1bGF0ZUNlbGxPcGVyYW5kKFNwZWN1bGF0aXZlSklUKiBqaXQsIEVk
Z2UgdXNlLCBTcGVjdWxhdGlvbkRpcmVjdGlvbiBkaXJlY3Rpb24gPSBCYWNrd2FyZFNwZWN1bGF0
aW9uKQogICAgICAgICA6IG1faml0KGppdCkKLSAgICAgICAgLCBtX2luZGV4KHVzZS5pbmRleCgp
KQorICAgICAgICAsIG1fbm9kZSh1c2Uubm9kZSgpKQogICAgICAgICAsIG1fZ3ByT3JJbnZhbGlk
KEludmFsaWRHUFJSZWcpCiAgICAgICAgICwgbV9kaXJlY3Rpb24oZGlyZWN0aW9uKQogICAgIHsK
ICAgICAgICAgQVNTRVJUKG1faml0KTsKICAgICAgICAgQVNTRVJUKHVzZS51c2VLaW5kKCkgIT0g
RG91YmxlVXNlKTsKLSAgICAgICAgaWYgKGppdC0+aXNGaWxsZWQobV9pbmRleCkpCisgICAgICAg
IGlmIChqaXQtPmlzRmlsbGVkKG1fbm9kZSkpCiAgICAgICAgICAgICBncHIoKTsKICAgICB9CiAK
QEAgLTI4ODMsMjYgKzI4NTYsMjYgQEAgcHVibGljOgogICAgICAgICBtX2ppdC0+dW5sb2NrKG1f
Z3ByT3JJbnZhbGlkKTsKICAgICB9CiAKLSAgICBOb2RlSW5kZXggaW5kZXgoKSBjb25zdAorICAg
IE5vZGUqIG5vZGUoKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIG1faW5kZXg7CisgICAg
ICAgIHJldHVybiBtX25vZGU7CiAgICAgfQogCiAgICAgR1BSUmVnIGdwcigpCiAgICAgewogICAg
ICAgICBpZiAobV9ncHJPckludmFsaWQgPT0gSW52YWxpZEdQUlJlZykKLSAgICAgICAgICAgIG1f
Z3ByT3JJbnZhbGlkID0gbV9qaXQtPmZpbGxTcGVjdWxhdGVDZWxsKGluZGV4KCksIG1fZGlyZWN0
aW9uKTsKKyAgICAgICAgICAgIG1fZ3ByT3JJbnZhbGlkID0gbV9qaXQtPmZpbGxTcGVjdWxhdGVD
ZWxsKG5vZGUoKSwgbV9kaXJlY3Rpb24pOwogICAgICAgICByZXR1cm4gbV9ncHJPckludmFsaWQ7
CiAgICAgfQogICAgIAogICAgIHZvaWQgdXNlKCkKICAgICB7Ci0gICAgICAgIG1faml0LT51c2Uo
bV9pbmRleCk7CisgICAgICAgIG1faml0LT51c2UobV9ub2RlKTsKICAgICB9CiAKIHByaXZhdGU6
CiAgICAgU3BlY3VsYXRpdmVKSVQqIG1faml0OwotICAgIE5vZGVJbmRleCBtX2luZGV4OworICAg
IE5vZGUqIG1fbm9kZTsKICAgICBHUFJSZWcgbV9ncHJPckludmFsaWQ7CiAgICAgU3BlY3VsYXRp
b25EaXJlY3Rpb24gbV9kaXJlY3Rpb247CiB9OwpAQCAtMjkxMSwxMyArMjg4NCwxMyBAQCBjbGFz
cyBTcGVjdWxhdGVCb29sZWFuT3BlcmFuZCB7CiBwdWJsaWM6CiAgICAgZXhwbGljaXQgU3BlY3Vs
YXRlQm9vbGVhbk9wZXJhbmQoU3BlY3VsYXRpdmVKSVQqIGppdCwgRWRnZSB1c2UsIFNwZWN1bGF0
aW9uRGlyZWN0aW9uIGRpcmVjdGlvbiA9IEJhY2t3YXJkU3BlY3VsYXRpb24pCiAgICAgICAgIDog
bV9qaXQoaml0KQotICAgICAgICAsIG1faW5kZXgodXNlLmluZGV4KCkpCisgICAgICAgICwgbV9u
b2RlKHVzZS5ub2RlKCkpCiAgICAgICAgICwgbV9ncHJPckludmFsaWQoSW52YWxpZEdQUlJlZykK
ICAgICAgICAgLCBtX2RpcmVjdGlvbihkaXJlY3Rpb24pCiAgICAgewogICAgICAgICBBU1NFUlQo
bV9qaXQpOwogICAgICAgICBBU1NFUlQodXNlLnVzZUtpbmQoKSAhPSBEb3VibGVVc2UpOwotICAg
ICAgICBpZiAoaml0LT5pc0ZpbGxlZChtX2luZGV4KSkKKyAgICAgICAgaWYgKGppdC0+aXNGaWxs
ZWQobV9ub2RlKSkKICAgICAgICAgICAgIGdwcigpOwogICAgIH0KICAgICAKQEAgLTI5MjcsMjYg
KzI5MDAsMjYgQEAgcHVibGljOgogICAgICAgICBtX2ppdC0+dW5sb2NrKG1fZ3ByT3JJbnZhbGlk
KTsKICAgICB9CiAgICAgCi0gICAgTm9kZUluZGV4IGluZGV4KCkgY29uc3QKKyAgICBOb2RlKiBu
b2RlKCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBtX2luZGV4OworICAgICAgICByZXR1
cm4gbV9ub2RlOwogICAgIH0KICAgICAKICAgICBHUFJSZWcgZ3ByKCkKICAgICB7CiAgICAgICAg
IGlmIChtX2dwck9ySW52YWxpZCA9PSBJbnZhbGlkR1BSUmVnKQotICAgICAgICAgICAgbV9ncHJP
ckludmFsaWQgPSBtX2ppdC0+ZmlsbFNwZWN1bGF0ZUJvb2xlYW4oaW5kZXgoKSwgbV9kaXJlY3Rp
b24pOworICAgICAgICAgICAgbV9ncHJPckludmFsaWQgPSBtX2ppdC0+ZmlsbFNwZWN1bGF0ZUJv
b2xlYW4obm9kZSgpLCBtX2RpcmVjdGlvbik7CiAgICAgICAgIHJldHVybiBtX2dwck9ySW52YWxp
ZDsKICAgICB9CiAgICAgCiAgICAgdm9pZCB1c2UoKQogICAgIHsKLSAgICAgICAgbV9qaXQtPnVz
ZShtX2luZGV4KTsKKyAgICAgICAgbV9qaXQtPnVzZShtX25vZGUpOwogICAgIH0KIAogcHJpdmF0
ZToKICAgICBTcGVjdWxhdGl2ZUpJVCogbV9qaXQ7Ci0gICAgTm9kZUluZGV4IG1faW5kZXg7Cisg
ICAgTm9kZSogbV9ub2RlOwogICAgIEdQUlJlZyBtX2dwck9ySW52YWxpZDsKICAgICBTcGVjdWxh
dGlvbkRpcmVjdGlvbiBtX2RpcmVjdGlvbjsKIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1N0cnVjdHVyZUFic3RyYWN0VmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0cnVjdHVyZUFic3RyYWN0VmFsdWUuaAkocmV2aXNpb24g
MTQwOTA0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJ1Y3R1cmVBYnN0cmFj
dFZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDExLCAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMSwgMjAxMiwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMxNCw2ICszMTQsOCBAQCBwdWJs
aWM6CiBwcml2YXRlOgogICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIHRvcFZhbHVlKCkgeyByZXR1cm4g
cmVpbnRlcnByZXRfY2FzdDxTdHJ1Y3R1cmUqPigxKTsgfQogICAgIAorICAgIC8vIE5CLiBUaGlz
IG11c3QgaGF2ZSBhIHRyaXZpYWwgZGVzdHJ1Y3Rvci4KKyAgICAKICAgICAvLyBUaGlzIGNhbiBv
bmx5IHJlbWVtYmVyIG9uZSBzdHJ1Y3R1cmUgYXQgYSB0aW1lLgogICAgIFN0cnVjdHVyZSogbV9z
dHJ1Y3R1cmU7CiB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJ1Y3R1
cmVDaGVja0hvaXN0aW5nUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3RydWN0dXJlQ2hlY2tIb2lzdGluZ1BoYXNlLmNwcAkocmV2aXNpb24gMTQw
OTA0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJ1Y3R1cmVDaGVja0hvaXN0
aW5nUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NCwyMyArNjQsMjIgQEAgcHVibGljOgog
ICAgICAgICAgICAgaWYgKCFibG9jaykKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaW5kZXhJbkJsb2NrID0gMDsgaW5kZXhJbkJsb2NrIDwgYmxv
Y2stPnNpemUoKTsgKytpbmRleEluQmxvY2spIHsKLSAgICAgICAgICAgICAgICBOb2RlSW5kZXgg
bm9kZUluZGV4ID0gYmxvY2stPmF0KGluZGV4SW5CbG9jayk7Ci0gICAgICAgICAgICAgICAgTm9k
ZSYgbm9kZSA9IG1fZ3JhcGhbbm9kZUluZGV4XTsKLSAgICAgICAgICAgICAgICBpZiAoIW5vZGUu
c2hvdWxkR2VuZXJhdGUoKSkKKyAgICAgICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPmF0
KGluZGV4SW5CbG9jayk7CisgICAgICAgICAgICAgICAgaWYgKCFub2RlLT5zaG91bGRHZW5lcmF0
ZSgpKQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICBzd2l0
Y2ggKG5vZGUub3AoKSkgeworICAgICAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewog
ICAgICAgICAgICAgICAgIGNhc2UgQ2hlY2tTdHJ1Y3R1cmU6CiAgICAgICAgICAgICAgICAgY2Fz
ZSBTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludDogewotICAgICAgICAgICAgICAgICAgICBO
b2RlJiBjaGlsZCA9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV07Ci0gICAgICAgICAgICAgICAgICAg
IGlmIChjaGlsZC5vcCgpICE9IEdldExvY2FsKQorICAgICAgICAgICAgICAgICAgICBOb2RlKiBj
aGlsZCA9IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNo
aWxkLT5vcCgpICE9IEdldExvY2FsKQogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBjaGlsZC52
YXJpYWJsZUFjY2Vzc0RhdGEoKTsKKyAgICAgICAgICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NE
YXRhKiB2YXJpYWJsZSA9IGNoaWxkLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKICAgICAgICAgICAg
ICAgICAgICAgdmFyaWFibGUtPnZvdGUoVm90ZVN0cnVjdHVyZUNoZWNrKTsKICAgICAgICAgICAg
ICAgICAgICAgaWYgKHZhcmlhYmxlLT5pc0NhcHR1cmVkKCkgfHwgdmFyaWFibGUtPnN0cnVjdHVy
ZUNoZWNrSG9pc3RpbmdGYWlsZWQoKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgICAgICAgICBpZiAoIWlzQ2VsbFNwZWN1bGF0aW9uKHZhcmlhYmxlLT5wcmVk
aWN0aW9uKCkpKQogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAg
ICAgICAgIG5vdGljZVN0cnVjdHVyZUNoZWNrKHZhcmlhYmxlLCBub2RlLnN0cnVjdHVyZVNldCgp
KTsKKyAgICAgICAgICAgICAgICAgICAgbm90aWNlU3RydWN0dXJlQ2hlY2sodmFyaWFibGUsIG5v
ZGUtPnN0cnVjdHVyZVNldCgpKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAKQEAgLTEwOSwxMyArMTA4LDEzIEBAIHB1
YmxpYzoKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgY2FzZSBBcnJheWlm
eVRvU3RydWN0dXJlOgogICAgICAgICAgICAgICAgIGNhc2UgQXJyYXlpZnk6Ci0gICAgICAgICAg
ICAgICAgICAgIGlmIChub2RlLmFycmF5TW9kZSgpLmNvbnZlcnNpb24oKSA9PSBBcnJheTo6UmFn
ZUNvbnZlcnQpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmFycmF5TW9kZSgpLmNv
bnZlcnNpb24oKSA9PSBBcnJheTo6UmFnZUNvbnZlcnQpIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIFJhZ2UgY29udmVyc2lvbiBjaGFuZ2VzIHN0cnVjdHVyZXMuIFdlIHNob3VsZCBhdm9p
ZCB0eWluZyB0byBkbwogICAgICAgICAgICAgICAgICAgICAgICAgLy8gYW55IGtpbmQgb2YgaG9p
c3Rpbmcgd2hlbiByYWdlIGNvbnZlcnNpb24gaXMgaW4gcGxheS4KLSAgICAgICAgICAgICAgICAg
ICAgICAgIE5vZGUmIGNoaWxkID0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIChjaGlsZC5vcCgpICE9IEdldExvY2FsKQorICAgICAgICAgICAgICAg
ICAgICAgICAgTm9kZSogY2hpbGQgPSBub2RlLT5jaGlsZDEoKS5ub2RleCgpOworICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKGNoaWxkLT5vcCgpICE9IEdldExvY2FsKQogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgVmFyaWFibGVB
Y2Nlc3NEYXRhKiB2YXJpYWJsZSA9IGNoaWxkLnZhcmlhYmxlQWNjZXNzRGF0YSgpOworICAgICAg
ICAgICAgICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IGNoaWxkLT52
YXJpYWJsZUFjY2Vzc0RhdGEoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLT52
b3RlKFZvdGVPdGhlcik7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFyaWFibGUtPmlz
Q2FwdHVyZWQoKSB8fCB2YXJpYWJsZS0+c3RydWN0dXJlQ2hlY2tIb2lzdGluZ0ZhaWxlZCgpKQog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTMwLDMwICsxMjksMjkgQEAg
cHVibGljOgogICAgICAgICAgICAgICAgICAgICAvLyBraW5kIG9mIENoZWNrU3RydWN0dXJlLCB0
aGVuIHdlIHNob3VsZCBub3RpY2UgdGhlbSB0byBlbnN1cmUgdGhhdAogICAgICAgICAgICAgICAg
ICAgICAvLyB3ZSdyZSBub3QgaG9pc3RpbmcgYSBjaGVjayB0aGF0IHdvdWxkIGNvbnRyYXZlbmUg
Y2hlY2tzIHRoYXQgYXJlCiAgICAgICAgICAgICAgICAgICAgIC8vIGFscmVhZHkgYmVpbmcgcGVy
Zm9ybWVkLgotICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxl
ID0gbm9kZS52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKKyAgICAgICAgICAgICAgICAgICAgVmFyaWFi
bGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOwogICAg
ICAgICAgICAgICAgICAgICBpZiAodmFyaWFibGUtPmlzQ2FwdHVyZWQoKSB8fCB2YXJpYWJsZS0+
c3RydWN0dXJlQ2hlY2tIb2lzdGluZ0ZhaWxlZCgpKQogICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIGlmICghaXNDZWxsU3BlY3VsYXRpb24odmFyaWFi
bGUtPnByZWRpY3Rpb24oKSkpCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgICAgICAgICAgTm9kZUluZGV4IHNvdXJjZSA9IG5vZGUuY2hpbGQxKCkuaW5kZXgoKTsK
KyAgICAgICAgICAgICAgICAgICAgTm9kZSogc291cmNlID0gbm9kZS0+Y2hpbGQxKCkubm9kZSgp
OwogICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIHN1YkluZGV4SW5CbG9jayA9IDA7
IHN1YkluZGV4SW5CbG9jayA8IGJsb2NrLT5zaXplKCk7ICsrc3ViSW5kZXhJbkJsb2NrKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBOb2RlSW5kZXggc3ViTm9kZUluZGV4ID0gYmxvY2stPmF0
KHN1YkluZGV4SW5CbG9jayk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBOb2RlJiBzdWJOb2Rl
ID0gbV9ncmFwaFtzdWJOb2RlSW5kZXhdOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFz
dWJOb2RlLnNob3VsZEdlbmVyYXRlKCkpCisgICAgICAgICAgICAgICAgICAgICAgICBOb2RlKiBz
dWJOb2RlID0gYmxvY2stPmF0KHN1YkluZGV4SW5CbG9jayk7CisgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoIXN1Yk5vZGUtPnNob3VsZEdlbmVyYXRlKCkpCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHN1Yk5v
ZGUub3AoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChzdWJOb2RlLT5vcCgp
KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIENoZWNrU3RydWN0dXJlOiB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN1Yk5vZGUuY2hpbGQxKCkuaW5kZXgoKSAhPSBz
b3VyY2UpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN1Yk5vZGUtPmNoaWxkMSgp
ICE9IHNvdXJjZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbm90
aWNlU3RydWN0dXJlQ2hlY2sodmFyaWFibGUsIHN1Yk5vZGUuc3RydWN0dXJlU2V0KCkpOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG5vdGljZVN0cnVjdHVyZUNoZWNrKHZhcmlhYmxlLCBz
dWJOb2RlLT5zdHJ1Y3R1cmVTZXQoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICBj
YXNlIFN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50OiB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKHN1Yk5vZGUuY2hpbGQxKCkuaW5kZXgoKSAhPSBzb3VyY2UpCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKHN1Yk5vZGUtPmNoaWxkMSgpICE9IHNvdXJjZSkKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbm90aWNlU3RydWN0dXJlQ2hl
Y2sodmFyaWFibGUsIHN1Yk5vZGUuc3RydWN0dXJlKCkpOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG5vdGljZVN0cnVjdHVyZUNoZWNrKHZhcmlhYmxlLCBzdWJOb2RlLT5zdHJ1Y3R1cmUo
KSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgpAQCAtMTYxLDE0ICsx
NTksMTQgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBtX2dy
YXBoLnZvdGUobm9kZSwgVm90ZU90aGVyKTsKKyAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC52
b3RlQ2hpbGRyZW4obm9kZSwgVm90ZU90aGVyKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGNhc2UgR2FyYmFnZVZhbHVlOgog
ICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAg
ICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC52b3RlKG5vZGUs
IFZvdGVPdGhlcik7CisgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgudm90ZUNoaWxkcmVuKG5v
ZGUsIFZvdGVPdGhlcik7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIH0KQEAgLTIwOSwxMCArMjA3LDEwIEBAIHB1YmxpYzoKICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
bV9ncmFwaC5tX211c3RIYW5kbGVWYWx1ZXMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgICAgICAg
ICBpbnQgb3BlcmFuZCA9IG1fZ3JhcGgubV9tdXN0SGFuZGxlVmFsdWVzLm9wZXJhbmRGb3JJbmRl
eChpKTsKLSAgICAgICAgICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4ID0gYmxvY2stPnZhcmlh
Ymxlc0F0SGVhZC5vcGVyYW5kKG9wZXJhbmQpOwotICAgICAgICAgICAgICAgIGlmIChub2RlSW5k
ZXggPT0gTm9Ob2RlKQorICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+dmFyaWFi
bGVzQXRIZWFkLm9wZXJhbmQob3BlcmFuZCk7CisgICAgICAgICAgICAgICAgaWYgKCFub2RlKQog
ICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICBWYXJpYWJsZUFj
Y2Vzc0RhdGEqIHZhcmlhYmxlID0gbV9ncmFwaFtub2RlSW5kZXhdLnZhcmlhYmxlQWNjZXNzRGF0
YSgpOworICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBub2Rl
LT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKICAgICAgICAgICAgICAgICBIYXNoTWFwPFZhcmlhYmxl
QWNjZXNzRGF0YSosIENoZWNrRGF0YT46Oml0ZXJhdG9yIGl0ZXIgPSBtX21hcC5maW5kKHZhcmlh
YmxlKTsKICAgICAgICAgICAgICAgICBpZiAoaXRlciA9PSBtX21hcC5lbmQoKSkKICAgICAgICAg
ICAgICAgICAgICAgY29udGludWU7CkBAIC0yNjUsNDggKzI2Myw0NyBAQCBwdWJsaWM6CiAgICAg
ICAgICAgICBpZiAoIWJsb2NrKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpbmRleEluQmxvY2sgPSAwOyBpbmRleEluQmxvY2sgPCBibG9jay0+
c2l6ZSgpOyArK2luZGV4SW5CbG9jaykgewotICAgICAgICAgICAgICAgIE5vZGVJbmRleCBub2Rl
SW5kZXggPSBibG9jay0+YXQoaW5kZXhJbkJsb2NrKTsKLSAgICAgICAgICAgICAgICBOb2RlJiBu
b2RlID0gbV9ncmFwaFtub2RlSW5kZXhdOworICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBi
bG9jay0+YXQoaW5kZXhJbkJsb2NrKTsKICAgICAgICAgICAgICAgICAvLyBCZSBjYXJlZnVsIG5v
dCB0byB1c2UgJ25vZGUnIGFmdGVyIGFwcGVuZGluZyB0byB0aGUgZ3JhcGguIEluIHRob3NlIHN3
aXRjaAogICAgICAgICAgICAgICAgIC8vIGNhc2VzIHdoZXJlIHdlIG5lZWQgdG8gYXBwZW5kLCB3
ZSBmaXJzdCBjYXJlZnVsbHkgZXh0cmFjdCBldmVyeXRoaW5nIHdlIG5lZWQKICAgICAgICAgICAg
ICAgICAvLyBmcm9tIHRoZSBub2RlLCBiZWZvcmUgZG9pbmcgYW55IGFwcGVuZGluZy4KLSAgICAg
ICAgICAgICAgICBpZiAoIW5vZGUuc2hvdWxkR2VuZXJhdGUoKSkKKyAgICAgICAgICAgICAgICBp
ZiAoIW5vZGUtPnNob3VsZEdlbmVyYXRlKCkpCiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwotICAgICAgICAgICAgICAgIHN3aXRjaCAobm9kZS5vcCgpKSB7CisgICAgICAgICAgICAgICAg
c3dpdGNoIChub2RlLT5vcCgpKSB7CiAgICAgICAgICAgICAgICAgY2FzZSBTZXRBcmd1bWVudDog
ewogICAgICAgICAgICAgICAgICAgICBBU1NFUlQoIWJsb2NrSW5kZXgpOwogICAgICAgICAgICAg
ICAgICAgICAvLyBJbnNlcnQgYSBHZXRMb2NhbCBhbmQgYSBDaGVja1N0cnVjdHVyZSBpbW1lZGlh
dGVseSBmb2xsb3dpbmcgdGhpcwogICAgICAgICAgICAgICAgICAgICAvLyBTZXRBcmd1bWVudCwg
aWYgdGhlIHZhcmlhYmxlIHdhcyBhIGNhbmRpZGF0ZSBmb3Igc3RydWN0dXJlIGhvaXN0aW5nLgog
ICAgICAgICAgICAgICAgICAgICAvLyBJZiB0aGUgYmFzaWMgYmxvY2sgcHJldmlvdXNseSBvbmx5
IGhhZCB0aGUgU2V0QXJndW1lbnQgYXMgaXRzCiAgICAgICAgICAgICAgICAgICAgIC8vIHZhcmlh
YmxlLWF0LXRhaWwsIHRoZW4gcmVwbGFjZSBpdCB3aXRoIHRoaXMgR2V0TG9jYWwuCi0gICAgICAg
ICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBub2RlLnZhcmlhYmxl
QWNjZXNzRGF0YSgpOworICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZh
cmlhYmxlID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CiAgICAgICAgICAgICAgICAgICAg
IEhhc2hNYXA8VmFyaWFibGVBY2Nlc3NEYXRhKiwgQ2hlY2tEYXRhPjo6aXRlcmF0b3IgaXRlciA9
IG1fbWFwLmZpbmQodmFyaWFibGUpOwogICAgICAgICAgICAgICAgICAgICBpZiAoaXRlciA9PSBt
X21hcC5lbmQoKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
ICAgICAgICBpZiAoIWl0ZXItPnZhbHVlLm1fc3RydWN0dXJlKQogICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBD
b2RlT3JpZ2luIGNvZGVPcmlnaW4gPSBub2RlLmNvZGVPcmlnaW47CisgICAgICAgICAgICAgICAg
ICAgIENvZGVPcmlnaW4gY29kZU9yaWdpbiA9IG5vZGUtPmNvZGVPcmlnaW47CiAgICAgICAgICAg
ICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBOb2RlSW5kZXggZ2V0TG9jYWxJbmRleCA9
IGluc2VydGlvblNldC5pbnNlcnROb2RlKAorICAgICAgICAgICAgICAgICAgICBOb2RlKiBnZXRM
b2NhbCA9IGluc2VydGlvblNldC5pbnNlcnROb2RlKAogICAgICAgICAgICAgICAgICAgICAgICAg
aW5kZXhJbkJsb2NrICsgMSwgRG9udFJlZkNoaWxkcmVuLCBEb250UmVmTm9kZSwgdmFyaWFibGUt
PnByZWRpY3Rpb24oKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIEdldExvY2FsLCBjb2RlT3Jp
Z2luLCBPcEluZm8odmFyaWFibGUpLCBub2RlSW5kZXgpOworICAgICAgICAgICAgICAgICAgICAg
ICAgR2V0TG9jYWwsIGNvZGVPcmlnaW4sIE9wSW5mbyh2YXJpYWJsZSksIG5vZGUpOwogICAgICAg
ICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKICAgICAgICAgICAgICAgICAg
ICAgICAgIGluZGV4SW5CbG9jayArIDEsIFJlZkNoaWxkcmVuLCBEb250UmVmTm9kZSwgU3BlY05v
bmUsIENoZWNrU3RydWN0dXJlLAogICAgICAgICAgICAgICAgICAgICAgICAgY29kZU9yaWdpbiwg
T3BJbmZvKG1fZ3JhcGguYWRkU3RydWN0dXJlU2V0KGl0ZXItPnZhbHVlLm1fc3RydWN0dXJlKSks
CiAgICAgICAgICAgICAgICAgICAgICAgICBnZXRMb2NhbEluZGV4KTsKIAotICAgICAgICAgICAg
ICAgICAgICBpZiAoYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKHZhcmlhYmxlLT5sb2Nh
bCgpKSA9PSBub2RlSW5kZXgpCi0gICAgICAgICAgICAgICAgICAgICAgICBibG9jay0+dmFyaWFi
bGVzQXRUYWlsLm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpID0gZ2V0TG9jYWxJbmRleDsKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKGJsb2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZCh2YXJp
YWJsZS0+bG9jYWwoKSkgPT0gbm9kZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrLT52
YXJpYWJsZXNBdFRhaWwub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkgPSBnZXRMb2NhbDsKICAg
ICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguc3Vic3RpdHV0
ZUdldExvY2FsKCpibG9jaywgaW5kZXhJbkJsb2NrLCB2YXJpYWJsZSwgZ2V0TG9jYWxJbmRleCk7
CisgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguc3Vic3RpdHV0ZUdldExvY2FsKCpibG9jaywg
aW5kZXhJbkJsb2NrLCB2YXJpYWJsZSwgZ2V0TG9jYWwpOwogICAgICAgICAgICAgICAgICAgICAK
ICAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAg
ICAgICAgICAgY2FzZSBTZXRMb2NhbDogewotICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZUFj
Y2Vzc0RhdGEqIHZhcmlhYmxlID0gbm9kZS52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKKyAgICAgICAg
ICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG5vZGUtPnZhcmlhYmxl
QWNjZXNzRGF0YSgpOwogICAgICAgICAgICAgICAgICAgICBIYXNoTWFwPFZhcmlhYmxlQWNjZXNz
RGF0YSosIENoZWNrRGF0YT46Oml0ZXJhdG9yIGl0ZXIgPSBtX21hcC5maW5kKHZhcmlhYmxlKTsK
ICAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZXIgPT0gbV9tYXAuZW5kKCkpCiAgICAgICAgICAg
ICAgICAgICAgICAgICBicmVhazsKQEAgLTMxNyw4ICszMTQsOCBAQCBwdWJsaWM6CiAgICAgICAg
ICAgICAgICAgICAgIC8vIGJlIGRyb3BwZWQgaW50byB0aGlzIGJ5dGVjb2RlIHZhcmlhYmxlIGlm
IHRoZSBDaGVja1N0cnVjdHVyZSBkZWNpZGVzCiAgICAgICAgICAgICAgICAgICAgIC8vIHRvIGV4
aXQuCiAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBDb2RlT3JpZ2lu
IGNvZGVPcmlnaW4gPSBub2RlLmNvZGVPcmlnaW47Ci0gICAgICAgICAgICAgICAgICAgIE5vZGVJ
bmRleCBjaGlsZDEgPSBub2RlLmNoaWxkMSgpLmluZGV4KCk7CisgICAgICAgICAgICAgICAgICAg
IENvZGVPcmlnaW4gY29kZU9yaWdpbiA9IG5vZGUtPmNvZGVPcmlnaW47CisgICAgICAgICAgICAg
ICAgICAgIE5vZGUqIGNoaWxkMSA9IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKICAgICAgICAgICAg
ICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnROb2RlKAog
ICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBEb250UmVmQ2hpbGRyZW4sIERv
bnRSZWZOb2RlLCBTcGVjTm9uZSwgU2V0TG9jYWwsIGNvZGVPcmlnaW4sCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbGlkYXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbGlkYXRlLmNwcAkocmV2aXNpb24gMTQwOTA0KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYWxpZGF0ZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTgwLDQwICs4MCw0MyBAQCBwdWJsaWM6CiAgICAgICAgIC8vIFZhbGlkYXRlIHRoYXQgYWxs
IGxvY2FsIHZhcmlhYmxlcyBhdCB0aGUgaGVhZCBvZiB0aGUgcm9vdCBibG9jayBhcmUgZGVhZC4K
ICAgICAgICAgQmFzaWNCbG9jayogcm9vdCA9IG1fZ3JhcGgubV9ibG9ja3NbMF0uZ2V0KCk7CiAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCByb290LT52YXJpYWJsZXNBdEhlYWQubnVt
YmVyT2ZMb2NhbHMoKTsgKytpKQotICAgICAgICAgICAgVl9FUVVBTCgoc3RhdGljX2Nhc3Q8Vmly
dHVhbFJlZ2lzdGVyPihpKSwgMCksIE5vTm9kZSwgcm9vdC0+dmFyaWFibGVzQXRIZWFkLmxvY2Fs
KGkpKTsKKyAgICAgICAgICAgIFZfRVFVQUwoKHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4o
aSksIDApLCAwLCByb290LT52YXJpYWJsZXNBdEhlYWQubG9jYWwoaSkpOwogICAgICAgICAKICAg
ICAgICAgLy8gVmFsaWRhdGUgcmVmIGNvdW50cyBhbmQgdXNlcy4KLSAgICAgICAgVmVjdG9yPHVu
c2lnbmVkPiBteVJlZkNvdW50czsKLSAgICAgICAgbXlSZWZDb3VudHMuZmlsbCgwLCBtX2dyYXBo
LnNpemUoKSk7Ci0gICAgICAgIEJpdFZlY3RvciBhY2NlcHRhYmxlTm9kZUluZGljZXM7CisgICAg
ICAgIEhhc2hNYXA8Tm9kZSosIHVuc2lnbmVkPiBteVJlZkNvdW50czsKICAgICAgICAgZm9yIChC
bG9ja0luZGV4IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9ncmFwaC5tX2Jsb2Nrcy5z
aXplKCk7ICsrYmxvY2tJbmRleCkgewogICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBt
X2dyYXBoLm1fYmxvY2tzW2Jsb2NrSW5kZXhdLmdldCgpOwotICAgICAgICAgICAgaWYgKCFibG9j
aykKKyAgICAgICAgICAgIGlmICghYmxvY2sgfHwgIWJsb2NrLT5pc1JlYWNoYWJsZSkKICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGlmICghYmxvY2stPmlzUmVhY2hhYmxl
KQorICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBibG9jay0+bnVtTm9kZXMoKTsg
KytpKQorICAgICAgICAgICAgICAgIG15UmVmQ291bnRzLmFkZChibG9jay0+bm9kZShpKSwgMCk7
CisgICAgICAgIH0KKyAgICAgICAgSGFzaFNldDxOb2RlKj4gYWNjZXB0YWJsZU5vZGVzOworICAg
ICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2dyYXBo
Lm1fYmxvY2tzLnNpemUoKTsgKytibG9ja0luZGV4KSB7CisgICAgICAgICAgICBCYXNpY0Jsb2Nr
KiBibG9jayA9IG1fZ3JhcGgubV9ibG9ja3NbYmxvY2tJbmRleF0uZ2V0KCk7CisgICAgICAgICAg
ICBpZiAoIWJsb2NrIHx8ICFibG9jay0+aXNSZWFjaGFibGUpCiAgICAgICAgICAgICAgICAgY29u
dGludWU7CiAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGJsb2NrLT5udW1Ob2Rl
cygpOyArK2kpIHsKLSAgICAgICAgICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4ID0gYmxvY2st
Pm5vZGVJbmRleChpKTsKLSAgICAgICAgICAgICAgICBhY2NlcHRhYmxlTm9kZUluZGljZXMuc2V0
KG5vZGVJbmRleCk7Ci0gICAgICAgICAgICAgICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhbbm9kZUlu
ZGV4XTsKLSAgICAgICAgICAgICAgICBpZiAoIW5vZGUuc2hvdWxkR2VuZXJhdGUoKSkKKyAgICAg
ICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPm5vZGUoaSk7CisgICAgICAgICAgICAgICAg
YWNjZXB0YWJsZU5vZGVzLmFkZChub2RlKTsKKyAgICAgICAgICAgICAgICBpZiAoIW5vZGUtPnNo
b3VsZEdlbmVyYXRlKCkpCiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaiA9IDA7IGogPCBtX2dyYXBoLm51bUNoaWxkcmVuKG5vZGUp
OyArK2opIHsKICAgICAgICAgICAgICAgICAgICAgRWRnZSBlZGdlID0gbV9ncmFwaC5jaGlsZChu
b2RlLCBqKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKCFlZGdlKQogICAgICAgICAgICAgICAg
ICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAg
ICAgICBteVJlZkNvdW50c1tlZGdlLmluZGV4KCldKys7CisgICAgICAgICAgICAgICAgICAgIG15
UmVmQ291bnRzLmZpbmQoZWRnZS5ub2RlKCkpLT52YWx1ZSsrOwogICAgICAgICAgICAgICAgICAg
ICAKICAgICAgICAgICAgICAgICAgICAgLy8gVW5sZXNzIEknbSBhIEZsdXNoLCBQaGFudG9tLCBH
ZXRMb2NhbCwgb3IgUGhpLCBteSBjaGlsZHJlbiBzaG91bGQgaGFzUmVzdWx0KCkuCi0gICAgICAg
ICAgICAgICAgICAgIHN3aXRjaCAobm9kZS5vcCgpKSB7CisgICAgICAgICAgICAgICAgICAgIHN3
aXRjaCAobm9kZS0+b3AoKSkgewogICAgICAgICAgICAgICAgICAgICBjYXNlIEZsdXNoOgogICAg
ICAgICAgICAgICAgICAgICBjYXNlIFBoYW50b206CiAgICAgICAgICAgICAgICAgICAgIGNhc2Ug
R2V0TG9jYWw6CiAgICAgICAgICAgICAgICAgICAgIGNhc2UgUGhpOgogICAgICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBWQUxJREFURSgobm9kZUluZGV4LCBlZGdlKSwgbV9ncmFwaFtlZGdlXS5o
YXNSZXN1bHQoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgobm9kZSwgZWRn
ZSksIGVkZ2UtPmhhc1Jlc3VsdCgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQpAQCAtMTIxLDU0ICsxMjQs
NTAgQEAgcHVibGljOgogICAgICAgICB9CiAgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0lu
ZGV4ID0gMDsgYmxvY2tJbmRleCA8IG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgpOyArK2Jsb2NrSW5k
ZXgpIHsKICAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5tX2Jsb2Nrc1ti
bG9ja0luZGV4XS5nZXQoKTsKLSAgICAgICAgICAgIGlmICghYmxvY2spCi0gICAgICAgICAgICAg
ICAgY29udGludWU7Ci0gICAgICAgICAgICBpZiAoIWJsb2NrLT5pc1JlYWNoYWJsZSkKKyAgICAg
ICAgICAgIGlmICghYmxvY2sgfHwgIWJsb2NrLT5pc1JlYWNoYWJsZSkKICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgQml0VmVjdG9yIHBoaXNJblRo
aXNCbG9jazsKLSAgICAgICAgICAgIEJpdFZlY3RvciBub2Rlc0luVGhpc0Jsb2NrOworICAgICAg
ICAgICAgSGFzaFNldDxOb2RlKj4gcGhpc0luVGhpc0Jsb2NrOworICAgICAgICAgICAgSGFzaFNl
dDxOb2RlKj4gbm9kZXNJblRoaXNCbG9jazsKICAgICAgICAgICAgIAogICAgICAgICAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBibG9jay0+bnVtTm9kZXMoKTsgKytpKSB7Ci0gICAgICAgICAg
ICAgICAgTm9kZUluZGV4IG5vZGVJbmRleCA9IGJsb2NrLT5ub2RlSW5kZXgoaSk7Ci0gICAgICAg
ICAgICAgICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhbbm9kZUluZGV4XTsKLSAgICAgICAgICAgICAg
ICBub2Rlc0luVGhpc0Jsb2NrLnNldChub2RlSW5kZXgpOworICAgICAgICAgICAgICAgIE5vZGUq
IG5vZGUgPSBibG9jay0+bm9kZShpKTsKKyAgICAgICAgICAgICAgICBub2Rlc0luVGhpc0Jsb2Nr
LmFkZChub2RlKTsKICAgICAgICAgICAgICAgICBpZiAoYmxvY2stPmlzUGhpSW5kZXgoaSkpCi0g
ICAgICAgICAgICAgICAgICAgIHBoaXNJblRoaXNCbG9jay5zZXQobm9kZUluZGV4KTsKLSAgICAg
ICAgICAgICAgICBWX0VRVUFMKChub2RlSW5kZXgpLCBteVJlZkNvdW50c1tub2RlSW5kZXhdLCBu
b2RlLmFkanVzdGVkUmVmQ291bnQoKSk7CisgICAgICAgICAgICAgICAgICAgIHBoaXNJblRoaXNC
bG9jay5hZGQobm9kZSk7CisgICAgICAgICAgICAgICAgVl9FUVVBTCgobm9kZSksIG15UmVmQ291
bnRzLmdldChub2RlSW5kZXgpLCBub2RlLmFkanVzdGVkUmVmQ291bnQoKSk7CiAgICAgICAgICAg
ICAgICAgZm9yICh1bnNpZ25lZCBqID0gMDsgaiA8IG1fZ3JhcGgubnVtQ2hpbGRyZW4obm9kZSk7
ICsraikgewogICAgICAgICAgICAgICAgICAgICBFZGdlIGVkZ2UgPSBtX2dyYXBoLmNoaWxkKG5v
ZGUsIGopOwogICAgICAgICAgICAgICAgICAgICBpZiAoIWVkZ2UpCiAgICAgICAgICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKG5vZGVJbmRl
eCwgZWRnZSksIGFjY2VwdGFibGVOb2RlSW5kaWNlcy5nZXQoZWRnZS5pbmRleCgpKSk7CisgICAg
ICAgICAgICAgICAgICAgIFZBTElEQVRFKChub2RlLCBlZGdlKSwgYWNjZXB0YWJsZU5vZGVJbmRp
Y2VzLmNvbnRhaW5zKGVkZ2Uubm9kZSgpKSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgfQogICAgICAgICAgICAgCiAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGJs
b2NrLT5waGlzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICAgICAgTm9kZUluZGV4IG5vZGVJ
bmRleCA9IGJsb2NrLT5waGlzW2ldOwotICAgICAgICAgICAgICAgIE5vZGUmIG5vZGUgPSBtX2dy
YXBoW25vZGVJbmRleF07Ci0gICAgICAgICAgICAgICAgQVNTRVJUKHBoaXNJblRoaXNCbG9jay5n
ZXQobm9kZUluZGV4KSk7Ci0gICAgICAgICAgICAgICAgVkFMSURBVEUoKG5vZGVJbmRleCksIG5v
ZGUub3AoKSA9PSBQaGkpOwotICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBsb2NhbCA9
IG5vZGUubG9jYWwoKTsKKyAgICAgICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPnBoaXNb
aV07CisgICAgICAgICAgICAgICAgQVNTRVJUKHBoaXNJblRoaXNCbG9jay5jb250YWlucyhub2Rl
KSk7CisgICAgICAgICAgICAgICAgVkFMSURBVEUoKG5vZGUpLCBub2RlLT5vcCgpID09IFBoaSk7
CisgICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGxvY2FsID0gbm9kZS0+bG9jYWwoKTsK
ICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSAwOyBqIDwgbV9ncmFwaC5udW1DaGls
ZHJlbihub2RlKTsgKytqKSB7CiAgICAgICAgICAgICAgICAgICAgIEVkZ2UgZWRnZSA9IG1fZ3Jh
cGguY2hpbGQobm9kZSwgaik7CiAgICAgICAgICAgICAgICAgICAgIGlmICghZWRnZSkKICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgICAgICAKLSAgICAg
ICAgICAgICAgICAgICAgVkFMSURBVEUoKG5vZGVJbmRleCwgZWRnZSksCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG1fZ3JhcGhbZWRnZV0ub3AoKSA9PSBTZXRMb2NhbAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB8fCBtX2dyYXBoW2VkZ2VdLm9wKCkgPT0gU2V0QXJndW1lbnQK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgbV9ncmFwaFtlZGdlXS5vcCgpID09IEZs
dXNoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IG1fZ3JhcGhbZWRnZV0ub3AoKSA9
PSBQaGkpOworICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgobm9kZSwgZWRnZSksCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGVkZ2UtPm9wKCkgPT0gU2V0TG9jYWwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfHwgZWRnZS0+b3AoKSA9PSBTZXRBcmd1bWVudAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB8fCBlZGdlLT5vcCgpID09IEZsdXNoCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHx8IGVkZ2UtPm9wKCkgPT0gUGhpKTsKICAgICAgICAgICAgICAg
ICAgICAgCi0gICAgICAgICAgICAgICAgICAgIGlmIChwaGlzSW5UaGlzQmxvY2suZ2V0KGVkZ2Uu
aW5kZXgoKSkpCisgICAgICAgICAgICAgICAgICAgIGlmIChwaGlzSW5UaGlzQmxvY2suY29udGFp
bnMoZWRnZS5ub2RlKCkpKQogICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAg
ICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBpZiAobm9kZXNJblRoaXNCbG9j
ay5nZXQoZWRnZS5pbmRleCgpKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUo
KG5vZGVJbmRleCwgZWRnZSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2dy
YXBoW2VkZ2VdLm9wKCkgPT0gU2V0TG9jYWwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHx8IG1fZ3JhcGhbZWRnZV0ub3AoKSA9PSBTZXRBcmd1bWVudAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfHwgbV9ncmFwaFtlZGdlXS5vcCgpID09IEZsdXNoKTsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKG5vZGVzSW5UaGlzQmxvY2suY29udGFpbnMoZWRnZS5ub2RlKCkp
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgobm9kZSwgZWRnZSksCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZGdlLT5vcCgpID09IFNldExvY2FsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBlZGdlLT5vcCgpID09IFNldEFyZ3VtZW50
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBlZGdlLT5vcCgpID09IEZsdXNo
KTsKICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgY29u
dGludWU7CiAgICAgICAgICAgICAgICAgICAgIH0KQEAgLTE4MCwzMyArMTc5LDMwIEBAIHB1Ymxp
YzoKICAgICAgICAgICAgICAgICAgICAgICAgIEJhc2ljQmxvY2sqIHByZXZCbG9jayA9IG1fZ3Jh
cGgubV9ibG9ja3NbYmxvY2stPm1fcHJlZGVjZXNzb3JzW2tdXS5nZXQoKTsKICAgICAgICAgICAg
ICAgICAgICAgICAgIFZBTElEQVRFKChCbG9jaywgYmxvY2stPm1fcHJlZGVjZXNzb3JzW2tdKSwg
cHJldkJsb2NrKTsKICAgICAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChCbG9jaywgYmxv
Y2stPm1fcHJlZGVjZXNzb3JzW2tdKSwgcHJldkJsb2NrLT5pc1JlYWNoYWJsZSk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBOb2RlSW5kZXggcHJldk5vZGVJbmRleCA9IHByZXZCbG9jay0+dmFy
aWFibGVzQXRUYWlsLm9wZXJhbmQobG9jYWwpOworICAgICAgICAgICAgICAgICAgICAgICAgTm9k
ZSogcHJldk5vZGUgPSBwcmV2QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKGxvY2FsKTsK
ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIHdlIGhhdmUgYSBQaGkgdGhhdCBpcyBub3Qg
cmVmZXJyaW5nIHRvICp0aGlzKiBibG9jayB0aGVuIGFsbCBwcmVkZWNlc3NvcnMKICAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIG11c3QgaGF2ZSB0aGF0IGxvY2FsIGF2YWlsYWJsZS4KLSAgICAg
ICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChsb2NhbCwgYmxvY2tJbmRleCwgQmxvY2ssIGJs
b2NrLT5tX3ByZWRlY2Vzc29yc1trXSksIHByZXZOb2RlSW5kZXggIT0gTm9Ob2RlKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIE5vZGUqIHByZXZOb2RlID0gJm1fZ3JhcGhbcHJldk5vZGVJbmRl
eF07Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJldk5vZGUtPm9wKCkgPT0gR2V0TG9j
YWwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2Tm9kZUluZGV4ID0gcHJldk5v
ZGUtPmNoaWxkMSgpLmluZGV4KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldk5v
ZGUgPSAmbV9ncmFwaFtwcmV2Tm9kZUluZGV4XTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLnNob3VsZEdlbmVyYXRlKCkpIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgobG9jYWwsIGJsb2NrLT5tX3ByZWRl
Y2Vzc29yc1trXSwgcHJldk5vZGVJbmRleCksCisgICAgICAgICAgICAgICAgICAgICAgICBWQUxJ
REFURSgobG9jYWwsIGJsb2NrSW5kZXgsIEJsb2NrLCBibG9jay0+bV9wcmVkZWNlc3NvcnNba10p
LCBwcmV2Tm9kZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJldk5vZGUtPm9wKCkg
PT0gR2V0TG9jYWwpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldk5vZGUgPSBwcmV2
Tm9kZS0+Y2hpbGQxKCkubm9kZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUt
PnNob3VsZEdlbmVyYXRlKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBWQUxJREFU
RSgobG9jYWwsIGJsb2NrLT5tX3ByZWRlY2Vzc29yc1trXSwgcHJldk5vZGUpLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXZOb2RlLT5zaG91bGRHZW5lcmF0ZSgpKTsK
ICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIFZBTElE
QVRFKChsb2NhbCwgYmxvY2stPm1fcHJlZGVjZXNzb3JzW2tdLCBwcmV2Tm9kZUluZGV4KSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChsb2NhbCwgYmxvY2stPm1fcHJlZGVjZXNz
b3JzW2tdLCBwcmV2Tm9kZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2
Tm9kZS0+b3AoKSA9PSBTZXRMb2NhbAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fHwgcHJldk5vZGUtPm9wKCkgPT0gU2V0QXJndW1lbnQKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHx8IHByZXZOb2RlLT5vcCgpID09IEZsdXNoCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB8fCBwcmV2Tm9kZS0+b3AoKSA9PSBQaGkpOwotICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKHByZXZOb2RlSW5kZXggPT0gZWRnZS5pbmRleCgpKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAocHJldk5vZGUgPT0gZWRnZS5ub2RlKCkpIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBBdCB0aGlzIHBvaW50IGl0IGNhbm5vdCByZWZlciBpbnRvIHRoaXMgYmxvY2suCi0g
ICAgICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgobG9jYWwsIGJsb2NrLT5tX3ByZWRlY2Vz
c29yc1trXSwgcHJldk5vZGVJbmRleCksICFwcmV2QmxvY2stPmlzSW5CbG9jayhlZGdlLmluZGV4
KCkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChsb2NhbCwgYmxvY2stPm1f
cHJlZGVjZXNzb3JzW2tdLCBwcmV2Tm9kZSksICFwcmV2QmxvY2stPmlzSW5CbG9jayhlZGdlLm5v
ZGUoKSkpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIAotICAg
ICAgICAgICAgICAgICAgICBWQUxJREFURSgobm9kZUluZGV4LCBlZGdlKSwgZm91bmQpOworICAg
ICAgICAgICAgICAgICAgICBWQUxJREFURSgobm9kZSwgZWRnZSksIGZvdW5kKTsKICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKQEAgLTIyNywzNCArMjIzLDMz
IEBAIHB1YmxpYzoKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBibG9jay0+c2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgICAg
ICBOb2RlSW5kZXggbm9kZUluZGV4ID0gYmxvY2stPmF0KGkpOwotICAgICAgICAgICAgICAgIE5v
ZGUmIG5vZGUgPSBtX2dyYXBoW25vZGVJbmRleF07Ci0gICAgICAgICAgICAgICAgQVNTRVJUKG5v
ZGVzSW5UaGlzQmxvY2suZ2V0KG5vZGVJbmRleCkpOwotICAgICAgICAgICAgICAgIFZBTElEQVRF
KChub2RlSW5kZXgpLCBub2RlLm9wKCkgIT0gUGhpKTsKKyAgICAgICAgICAgICAgICBOb2RlKiBu
b2RlID0gYmxvY2stPmF0KGkpOworICAgICAgICAgICAgICAgIEFTU0VSVChub2Rlc0luVGhpc0Js
b2NrLmNvbnRhaW5zKG5vZGUpKTsKKyAgICAgICAgICAgICAgICBWQUxJREFURSgobm9kZSksIG5v
ZGUtPm9wKCkgIT0gUGhpKTsKICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSAwOyBq
IDwgbV9ncmFwaC5udW1DaGlsZHJlbihub2RlKTsgKytqKSB7CiAgICAgICAgICAgICAgICAgICAg
IEVkZ2UgZWRnZSA9IG1fZ3JhcGguY2hpbGQobm9kZSwgaik7CiAgICAgICAgICAgICAgICAgICAg
IGlmICghZWRnZSkKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAg
ICAgICAgICAgICBWQUxJREFURSgobm9kZUluZGV4LCBlZGdlKSwgbm9kZXNJblRoaXNCbG9jay5n
ZXQobm9kZUluZGV4KSk7CisgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChub2RlLCBlZGdl
KSwgbm9kZXNJblRoaXNCbG9jay5jb250YWlucyhlZGdlLm5vZGUoKSkpOwogICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBpZiAoIW5vZGUuc2hvdWxk
R2VuZXJhdGUoKSkKKyAgICAgICAgICAgICAgICBpZiAoIW5vZGUtPnNob3VsZEdlbmVyYXRlKCkp
CiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIHN3aXRjaCAo
bm9kZS5vcCgpKSB7CisgICAgICAgICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CiAgICAg
ICAgICAgICAgICAgY2FzZSBHZXRMb2NhbDoKLSAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUu
dmFyaWFibGVBY2Nlc3NEYXRhKCktPmlzQ2FwdHVyZWQoKSkKKyAgICAgICAgICAgICAgICAgICAg
aWYgKG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5pc0NhcHR1cmVkKCkpCiAgICAgICAgICAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKG5vZGVJ
bmRleCwgYmxvY2tJbmRleCksIGdldExvY2FsUG9zaXRpb25zLm9wZXJhbmQobm9kZS5sb2NhbCgp
KSA9PSBub3RTZXQpOwotICAgICAgICAgICAgICAgICAgICBnZXRMb2NhbFBvc2l0aW9ucy5vcGVy
YW5kKG5vZGUubG9jYWwoKSkgPSBpOworICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgobm9k
ZSwgYmxvY2tJbmRleCksIGdldExvY2FsUG9zaXRpb25zLm9wZXJhbmQobm9kZS0+bG9jYWwoKSkg
PT0gbm90U2V0KTsKKyAgICAgICAgICAgICAgICAgICAgZ2V0TG9jYWxQb3NpdGlvbnMub3BlcmFu
ZChub2RlLT5sb2NhbCgpKSA9IGk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgICAgIGNhc2UgU2V0TG9jYWw6Ci0gICAgICAgICAgICAgICAgICAgIGlmIChub2RlLnZh
cmlhYmxlQWNjZXNzRGF0YSgpLT5pc0NhcHR1cmVkKCkpCisgICAgICAgICAgICAgICAgICAgIGlm
IChub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+aXNDYXB0dXJlZCgpKQogICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIC8vIE9ubHkgcmVjb3JkIHRo
ZSBmaXJzdCBTZXRMb2NhbC4gVGhlcmUgbWF5IGJlIG11bHRpcGxlIFNldExvY2FscwogICAgICAg
ICAgICAgICAgICAgICAvLyBiZWNhdXNlIG9mIGZsdXNoaW5nLgotICAgICAgICAgICAgICAgICAg
ICBpZiAoc2V0TG9jYWxQb3NpdGlvbnMub3BlcmFuZChub2RlLmxvY2FsKCkpICE9IG5vdFNldCkK
KyAgICAgICAgICAgICAgICAgICAgaWYgKHNldExvY2FsUG9zaXRpb25zLm9wZXJhbmQobm9kZS0+
bG9jYWwoKSkgIT0gbm90U2V0KQogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICAgICAgICAgIHNldExvY2FsUG9zaXRpb25zLm9wZXJhbmQobm9kZS5sb2NhbCgpKSA9
IGk7CisgICAgICAgICAgICAgICAgICAgIHNldExvY2FsUG9zaXRpb25zLm9wZXJhbmQobm9kZS0+
bG9jYWwoKSkgPSBpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAg
ICBkZWZhdWx0OgogICAgICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTI5NCw5ICsyODksOSBA
QCBwcml2YXRlOgogICAgICAgICAgICAgZ2V0TG9jYWxQb3NpdGlvbnMub3BlcmFuZChvcGVyYW5k
KSA8IHNldExvY2FsUG9zaXRpb25zLm9wZXJhbmQob3BlcmFuZCkpOwogICAgIH0KICAgICAKLSAg
ICB2b2lkIHJlcG9ydFZhbGlkYXRpb25Db250ZXh0KE5vZGVJbmRleCBub2RlSW5kZXgpCisgICAg
dm9pZCByZXBvcnRWYWxpZGF0aW9uQ29udGV4dChOb2RlKiBub2RlKQogICAgIHsKLSAgICAgICAg
ZGF0YUxvZ0YoIkAldSIsIG5vZGVJbmRleCk7CisgICAgICAgIGRhdGFMb2dGKCJAJXUiLCBub2Rl
LT5pbmRleCgpKTsKICAgICB9CiAgICAgCiAgICAgZW51bSBCbG9ja1RhZyB7IEJsb2NrIH07CkBA
IC0zMDUsOSArMzAwLDkgQEAgcHJpdmF0ZToKICAgICAgICAgZGF0YUxvZ0YoIkJsb2NrICMldSIs
IGJsb2NrSW5kZXgpOwogICAgIH0KICAgICAKLSAgICB2b2lkIHJlcG9ydFZhbGlkYXRpb25Db250
ZXh0KE5vZGVJbmRleCBub2RlSW5kZXgsIEVkZ2UgZWRnZSkKKyAgICB2b2lkIHJlcG9ydFZhbGlk
YXRpb25Db250ZXh0KE5vZGUqIG5vZGUsIEVkZ2UgZWRnZSkKICAgICB7Ci0gICAgICAgIGRhdGFM
b2dGKCJAJXUgLT4gJXNAJXUiLCBub2RlSW5kZXgsIHVzZUtpbmRUb1N0cmluZyhlZGdlLnVzZUtp
bmQoKSksIGVkZ2UuaW5kZXgoKSk7CisgICAgICAgIGRhdGFMb2dGKCJAJXUgLT4gJXNAJXUiLCBu
b2RlLT5pbmRleCgpLCB1c2VLaW5kVG9TdHJpbmcoZWRnZS51c2VLaW5kKCkpLCBlZGdlLmluZGV4
KCkpOwogICAgIH0KICAgICAKICAgICB2b2lkIHJlcG9ydFZhbGlkYXRpb25Db250ZXh0KFZpcnR1
YWxSZWdpc3RlciBsb2NhbCwgQmxvY2tJbmRleCBibG9ja0luZGV4KQpAQCAtMzIyLDI3ICszMTcs
MjcgQEAgcHJpdmF0ZToKICAgICB9CiAgICAgCiAgICAgdm9pZCByZXBvcnRWYWxpZGF0aW9uQ29u
dGV4dCgKLSAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGxvY2FsLCBCbG9ja0luZGV4IHNvdXJjZUJs
b2NrSW5kZXgsIE5vZGVJbmRleCBwcmV2Tm9kZUluZGV4KQorICAgICAgICBWaXJ0dWFsUmVnaXN0
ZXIgbG9jYWwsIEJsb2NrSW5kZXggc291cmNlQmxvY2tJbmRleCwgTm9kZSogcHJldk5vZGUpCiAg
ICAgewotICAgICAgICBkYXRhTG9nRigiQCV1IGZvciByJWQgaW4gQmxvY2sgIyV1IiwgcHJldk5v
ZGVJbmRleCwgbG9jYWwsIHNvdXJjZUJsb2NrSW5kZXgpOworICAgICAgICBkYXRhTG9nRigiQCV1
IGZvciByJWQgaW4gQmxvY2sgIyV1IiwgcHJldk5vZGUtPmluZGV4KCksIGxvY2FsLCBzb3VyY2VC
bG9ja0luZGV4KTsKICAgICB9CiAgICAgCiAgICAgdm9pZCByZXBvcnRWYWxpZGF0aW9uQ29udGV4
dCgKLSAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRleCwgQmxvY2tJbmRleCBibG9ja0luZGV4KQor
ICAgICAgICBOb2RlKiBub2RlLCBCbG9ja0luZGV4IGJsb2NrSW5kZXgpCiAgICAgewotICAgICAg
ICBkYXRhTG9nRigiQCV1IGluIEJsb2NrICMldSIsIG5vZGVJbmRleCwgYmxvY2tJbmRleCk7Cisg
ICAgICAgIGRhdGFMb2dGKCJAJXUgaW4gQmxvY2sgIyV1Iiwgbm9kZS0+aW5kZXgoKSwgYmxvY2tJ
bmRleCk7CiAgICAgfQogICAgIAogICAgIHZvaWQgcmVwb3J0VmFsaWRhdGlvbkNvbnRleHQoCi0g
ICAgICAgIE5vZGVJbmRleCBub2RlSW5kZXgsIE5vZGVJbmRleCBub2RlSW5kZXgyLCBCbG9ja0lu
ZGV4IGJsb2NrSW5kZXgpCisgICAgICAgIE5vZGUqIG5vZGUsIE5vZGUqIG5vZGUyLCBCbG9ja0lu
ZGV4IGJsb2NrSW5kZXgpCiAgICAgewotICAgICAgICBkYXRhTG9nRigiQCV1IGFuZCBAJXUgaW4g
QmxvY2sgIyV1Iiwgbm9kZUluZGV4LCBub2RlSW5kZXgyLCBibG9ja0luZGV4KTsKKyAgICAgICAg
ZGF0YUxvZ0YoIkAldSBhbmQgQCV1IGluIEJsb2NrICMldSIsIG5vZGUtPmluZGV4KCksIG5vZGUy
LT5pbmRleCgpLCBibG9ja0luZGV4KTsKICAgICB9CiAgICAgCiAgICAgdm9pZCByZXBvcnRWYWxp
ZGF0aW9uQ29udGV4dCgKLSAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRleCwgQmxvY2tJbmRleCBi
bG9ja0luZGV4LCBOb2RlSW5kZXggZXhwZWN0ZWROb2RlSW5kZXgsIEVkZ2UgaW5jb21pbmdFZGdl
KQorICAgICAgICBOb2RlKiBub2RlLCBCbG9ja0luZGV4IGJsb2NrSW5kZXgsIE5vZGUqIGV4cGVj
dGVkTm9kZSwgRWRnZSBpbmNvbWluZ0VkZ2UpCiAgICAgewotICAgICAgICBkYXRhTG9nRigiQCV1
IGluIEJsb2NrICMldSwgc2VhcmNoaW5nIGZvciBAJXUgZnJvbSBAJXUiLCBub2RlSW5kZXgsIGJs
b2NrSW5kZXgsIGV4cGVjdGVkTm9kZUluZGV4LCBpbmNvbWluZ0VkZ2UuaW5kZXgoKSk7CisgICAg
ICAgIGRhdGFMb2dGKCJAJXUgaW4gQmxvY2sgIyV1LCBzZWFyY2hpbmcgZm9yIEAldSBmcm9tIEAl
dSIsIG5vZGUtPmluZGV4KCksIGJsb2NrSW5kZXgsIGV4cGVjdGVkTm9kZS0+aW5kZXgoKSwgaW5j
b21pbmdFZGdlLmluZGV4KCkpOwogICAgIH0KICAgICAKICAgICB2b2lkIGR1bXBEYXRhKHVuc2ln
bmVkIHZhbHVlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWaXJ0dWFsUmVn
aXN0ZXJBbGxvY2F0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHVmlydHVhbFJlZ2lzdGVyQWxsb2NhdGlvblBoYXNlLmNwcAkocmV2aXNpb24g
MTQwOTA0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWaXJ0dWFsUmVnaXN0ZXJB
bGxvY2F0aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OCw3ICs0OCw3IEBAIHB1Ymxp
YzoKICAgICAgICAgbV9ncmFwaC5tX3ByZXNlcnZlZFZhcnMuZHVtcChXVEY6OmRhdGFGaWxlKCkp
OwogICAgICAgICBkYXRhTG9nRigiXG4iKTsKICNlbmRpZgotICAgICAgICBTY29yZUJvYXJkIHNj
b3JlQm9hcmQobV9ncmFwaCwgbV9ncmFwaC5tX3ByZXNlcnZlZFZhcnMpOworICAgICAgICBTY29y
ZUJvYXJkIHNjb3JlQm9hcmQobV9ncmFwaC5tX3ByZXNlcnZlZFZhcnMpOwogICAgICAgICBzY29y
ZUJvYXJkLmFzc2VydENsZWFyKCk7CiAjaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9W
RVJCT1NFKQogICAgICAgICBib29sIG5lZWRzTmV3TGluZSA9IGZhbHNlOwpAQCAtNjAsNDcgKzYw
LDQ3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIGlmICghYmxvY2stPmlzUmVhY2hhYmxlKQogICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgZm9yIChzaXplX3QgaW5kZXhJbkJs
b2NrID0gMDsgaW5kZXhJbkJsb2NrIDwgYmxvY2stPnNpemUoKTsgKytpbmRleEluQmxvY2spIHsK
LSAgICAgICAgICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4ID0gYmxvY2stPmF0KGluZGV4SW5C
bG9jayk7CisgICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5hdChpbmRleEluQmxv
Y2spOwogI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKICAgICAgICAg
ICAgICAgICBpZiAobmVlZHNOZXdMaW5lKQogICAgICAgICAgICAgICAgICAgICBkYXRhTG9nRigi
XG4iKTsKLSAgICAgICAgICAgICAgICBkYXRhTG9nRigiICAgQCV1OiIsIG5vZGVJbmRleCk7Cisg
ICAgICAgICAgICAgICAgZGF0YUxvZ0YoIiAgIEAldToiLCBub2RlLT5pbmRleCgpKTsKICAgICAg
ICAgICAgICAgICBuZWVkc05ld0xpbmUgPSB0cnVlOwogI2VuZGlmCi0gICAgICAgICAgICAgICAg
Tm9kZSYgbm9kZSA9IG1fZ3JhcGhbbm9kZUluZGV4XTsKICAgICAgICAgCi0gICAgICAgICAgICAg
ICAgaWYgKCFub2RlLnNob3VsZEdlbmVyYXRlKCkgfHwgbm9kZS5vcCgpID09IFBoaSB8fCBub2Rl
Lm9wKCkgPT0gRmx1c2gpCisgICAgICAgICAgICAgICAgaWYgKCFub2RlLT5zaG91bGRHZW5lcmF0
ZSgpIHx8IG5vZGUtPm9wKCkgPT0gUGhpIHx8IG5vZGUtPm9wKCkgPT0gRmx1c2gpCiAgICAgICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAg
IGlmIChub2RlLm9wKCkgPT0gR2V0TG9jYWwpCi0gICAgICAgICAgICAgICAgICAgIEFTU0VSVCgh
bV9ncmFwaFtub2RlLmNoaWxkMSgpXS5oYXNSZXN1bHQoKSk7CisgICAgICAgICAgICAgICAgaWYg
KG5vZGUtPm9wKCkgPT0gR2V0TG9jYWwpCisgICAgICAgICAgICAgICAgICAgIEFTU0VSVCghbm9k
ZS0+Y2hpbGQxKCktPmhhc1Jlc3VsdCgpKTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAg
ICAgICAvLyBGaXJzdCwgY2FsbCB1c2Ugb24gYWxsIG9mIHRoZSBjdXJyZW50IG5vZGUncyBjaGls
ZHJlbiwgdGhlbgogICAgICAgICAgICAgICAgIC8vIGFsbG9jYXRlIGEgVmlydHVhbFJlZ2lzdGVy
IGZvciB0aGlzIG5vZGUuIFdlIGRvIHNvIGluIHRoaXMKICAgICAgICAgICAgICAgICAvLyBvcmRl
ciBzbyB0aGF0IGlmIGEgY2hpbGQgaXMgb24gaXRzIGxhc3QgdXNlLCBhbmQgYQogICAgICAgICAg
ICAgICAgIC8vIFZpcnR1YWxSZWdpc3RlciBpcyBmcmVlZCwgdGhlbiBpdCBtYXkgYmUgcmV1c2Vk
IGZvciBub2RlLgotICAgICAgICAgICAgICAgIGlmIChub2RlLmZsYWdzKCkgJiBOb2RlSGFzVmFy
QXJncykgeworICAgICAgICAgICAgICAgIGlmIChub2RlLT5mbGFncygpICYgTm9kZUhhc1ZhckFy
Z3MpIHsKICAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBjaGlsZElkeCA9IG5vZGUu
Zmlyc3RDaGlsZCgpOyBjaGlsZElkeCA8IG5vZGUuZmlyc3RDaGlsZCgpICsgbm9kZS5udW1DaGls
ZHJlbigpOyBjaGlsZElkeCsrKQogICAgICAgICAgICAgICAgICAgICAgICAgc2NvcmVCb2FyZC51
c2VJZkhhc1Jlc3VsdChtX2dyYXBoLm1fdmFyQXJnQ2hpbGRyZW5bY2hpbGRJZHhdKTsKICAgICAg
ICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBzY29yZUJvYXJkLnVzZUlm
SGFzUmVzdWx0KG5vZGUuY2hpbGQxKCkpOwotICAgICAgICAgICAgICAgICAgICBzY29yZUJvYXJk
LnVzZUlmSGFzUmVzdWx0KG5vZGUuY2hpbGQyKCkpOwotICAgICAgICAgICAgICAgICAgICBzY29y
ZUJvYXJkLnVzZUlmSGFzUmVzdWx0KG5vZGUuY2hpbGQzKCkpOworICAgICAgICAgICAgICAgICAg
ICBzY29yZUJvYXJkLnVzZUlmSGFzUmVzdWx0KG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAg
ICAgICAgICAgc2NvcmVCb2FyZC51c2VJZkhhc1Jlc3VsdChub2RlLT5jaGlsZDIoKSk7CisgICAg
ICAgICAgICAgICAgICAgIHNjb3JlQm9hcmQudXNlSWZIYXNSZXN1bHQobm9kZS0+Y2hpbGQzKCkp
OwogICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIGlmICghbm9kZS5oYXNSZXN1
bHQoKSkKKyAgICAgICAgICAgICAgICBpZiAoIW5vZGUtPmhhc1Jlc3VsdCgpKQogICAgICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciB2
aXJ0dWFsUmVnaXN0ZXIgPSBzY29yZUJvYXJkLmFsbG9jYXRlKCk7CiAjaWYgREZHX0VOQUJMRShE
RUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQotICAgICAgICAgICAgICAgIGRhdGFMb2dGKCIgQXNz
aWduaW5nIHZpcnR1YWwgcmVnaXN0ZXIgJXUgdG8gbm9kZSAldS4iLAotICAgICAgICAgICAgICAg
ICAgICAgICAgdmlydHVhbFJlZ2lzdGVyLCBub2RlSW5kZXgpOworICAgICAgICAgICAgICAgIGRh
dGFMb2dGKAorICAgICAgICAgICAgICAgICAgICAiIEFzc2lnbmluZyB2aXJ0dWFsIHJlZ2lzdGVy
ICV1IHRvIG5vZGUgJXUuIiwKKyAgICAgICAgICAgICAgICAgICAgdmlydHVhbFJlZ2lzdGVyLCBu
b2RlLT5pbmRleCgpKTsKICNlbmRpZgotICAgICAgICAgICAgICAgIG5vZGUuc2V0VmlydHVhbFJl
Z2lzdGVyKHZpcnR1YWxSZWdpc3Rlcik7CisgICAgICAgICAgICAgICAgbm9kZS0+c2V0VmlydHVh
bFJlZ2lzdGVyKHZpcnR1YWxSZWdpc3Rlcik7CiAgICAgICAgICAgICAgICAgLy8gJ211c3RHZW5l
cmF0ZScgbm9kZXMgaGF2ZSB0aGVpciB1c2VDb3VudCBhcnRpZmljaWFsbHkgZWxldmF0ZWQsCiAg
ICAgICAgICAgICAgICAgLy8gY2FsbCB1c2Ugbm93IHRvIGFjY291bnQgZm9yIHRoaXMuCi0gICAg
ICAgICAgICAgICAgaWYgKG5vZGUubXVzdEdlbmVyYXRlKCkpCi0gICAgICAgICAgICAgICAgICAg
IHNjb3JlQm9hcmQudXNlKG5vZGVJbmRleCk7CisgICAgICAgICAgICAgICAgaWYgKG5vZGUtPm11
c3RHZW5lcmF0ZSgpKQorICAgICAgICAgICAgICAgICAgICBzY29yZUJvYXJkLnVzZShub2RlKTsK
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHNjb3JlQm9hcmQuYXNzZXJ0Q2xlYXIoKTsKICAg
ICAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25FeGVj
dXRhYmxlRHVtcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvRnVuY3Rpb25FeGVjdXRhYmxlRHVtcC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvbkV4ZWN1dGFibGVEdW1wLmNwcAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSwzNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRnVuY3Rpb25FeGVjdXRh
YmxlRHVtcC5oIgorCituYW1lc3BhY2UgSlNDIHsKKwordm9pZCBGdW5jdGlvbkV4ZWN1dGFibGVE
dW1wOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KG1fZXhl
Y3V0YWJsZS0+aW5mZXJyZWROYW1lKCkuc3RyaW5nKCksICIjIiwgbV9leGVjdXRhYmxlLT5oYXNo
Rm9yKENvZGVGb3JDYWxsKSwgIi8iLCBtX2V4ZWN1dGFibGUtPmhhc2hGb3IoQ29kZUZvckNvbnN0
cnVjdCksICI6WyIsIFJhd1BvaW50ZXIobV9leGVjdXRhYmxlKSwgIl0iKTsKK30KKworfSAvLyBu
YW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0
aW9uRXhlY3V0YWJsZUR1bXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9GdW5jdGlvbkV4ZWN1dGFibGVEdW1wLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvbkV4ZWN1dGFibGVEdW1wLmgJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsNDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2lmbmRlZiBGdW5jdGlvbkV4ZWN1dGFibGVEdW1wX2gKKyNkZWZpbmUgRnVu
Y3Rpb25FeGVjdXRhYmxlRHVtcF9oCisKKyNpbmNsdWRlICJFeGVjdXRhYmxlLmgiCisjaW5jbHVk
ZSA8d3RmL1ByaW50U3RyZWFtLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBGdW5jdGlv
bkV4ZWN1dGFibGVEdW1wIHsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBGdW5jdGlvbkV4ZWN1dGFi
bGVEdW1wKEZ1bmN0aW9uRXhlY3V0YWJsZSogZXhlY3V0YWJsZSkKKyAgICAgICAgOiBtX2V4ZWN1
dGFibGUoZXhlY3V0YWJsZSkKKyAgICB7CisgICAgfQorICAgIAorICAgIHZvaWQgZHVtcChQcmlu
dFN0cmVhbSYpIGNvbnN0OworcHJpdmF0ZToKKyAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIG1fZXhl
Y3V0YWJsZTsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gRnVuY3Rpb25F
eGVjdXRhYmxlRHVtcF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
R2xvYmFsRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNHbG9iYWxEYXRhLmNwcAkocmV2aXNpb24gMTQwOTA0KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiAr
MzIsNyBAQAogI2luY2x1ZGUgIkFyZ0xpc3QuaCIKICNpbmNsdWRlICJDb2RlQ2FjaGUuaCIKICNp
bmNsdWRlICJDb21tb25JZGVudGlmaWVycy5oIgorI2luY2x1ZGUgIkRGR0xvbmdMaXZlZFN0YXRl
LmgiCiAjaW5jbHVkZSAiRGVidWdnZXJBY3RpdmF0aW9uLmgiCiAjaW5jbHVkZSAiRnVuY3Rpb25D
b25zdHJ1Y3Rvci5oIgogI2luY2x1ZGUgIkdDQWN0aXZpdHlDYWxsYmFjay5oIgpAQCAtMjUxLDYg
KzI1MiwxMSBAQCBKU0dsb2JhbERhdGE6OkpTR2xvYmFsRGF0YShHbG9iYWxEYXRhVHlwCiAgICAg
CiAgICAgaWYgKE9wdGlvbnM6OmVuYWJsZVByb2ZpbGVyKCkpCiAgICAgICAgIG1fcGVyQnl0ZWNv
ZGVQcm9maWxlciA9IGFkb3B0UHRyKG5ldyBQcm9maWxlcjo6RGF0YWJhc2UoKnRoaXMpKTsKKwor
I2lmIEVOQUJMRShERkdfSklUKQorICAgIGlmIChjYW5Vc2VKSVQoKSkKKyAgICAgICAgbV9kZmdT
dGF0ZSA9IGFkb3B0UHRyKG5ldyBERkc6OkxvbmdMaXZlZFN0YXRlKCkpOworI2VuZGlmCiB9CiAK
IEpTR2xvYmFsRGF0YTo6fkpTR2xvYmFsRGF0YSgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0dsb2JhbERhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuaAkocmV2aXNpb24gMTQwOTA0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmgJKHdvcmtpbmcgY29weSkKQEAg
LTkxLDYgKzkxLDEyIEBAIG5hbWVzcGFjZSBKU0MgewogICAgIGNsYXNzIFVubGlua2VkRnVuY3Rp
b25FeGVjdXRhYmxlOwogICAgIGNsYXNzIFVubGlua2VkUHJvZ3JhbUNvZGVCbG9jazsKIAorI2lm
IEVOQUJMRShERkdfSklUKQorICAgIG5hbWVzcGFjZSBERkcgeworICAgIGNsYXNzIExvbmdMaXZl
ZFN0YXRlOworICAgIH0KKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwogICAgIHN0cnVjdCBI
YXNoVGFibGU7CiAgICAgc3RydWN0IEluc3RydWN0aW9uOwogCkBAIC0xODksNiArMTk1LDEwIEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICAvLyBUaGUgaGVhcCBzaG91bGQgYmUganVzdCBhZnRl
ciBleGVjdXRhYmxlQWxsb2NhdG9yIGFuZCBiZWZvcmUgb3RoZXIgbWVtYmVycyB0byBlbnN1cmUg
dGhhdCBpdCdzCiAgICAgICAgIC8vIGRlc3RydWN0ZWQgYWZ0ZXIgYWxsIHRoZSBvYmplY3RzIHRo
YXQgcmVmZXJlbmNlIGl0LgogICAgICAgICBIZWFwIGhlYXA7CisgICAgICAgIAorI2lmIEVOQUJM
RShERkdfSklUKQorICAgICAgICBPd25QdHI8REZHOjpMb25nTGl2ZWRTdGF0ZT4gbV9kZmdTdGF0
ZTsKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKIAogICAgICAgICBHbG9iYWxEYXRhVHlwZSBn
bG9iYWxEYXRhVHlwZTsKICAgICAgICAgQ2xpZW50RGF0YSogY2xpZW50RGF0YTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>184891</attachid>
            <date>2013-01-26 16:29:02 -0800</date>
            <delta_ts>2013-01-26 18:27:51 -0800</delta_ts>
            <desc>work in progress</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>676638</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmNw
cAkocmV2aXNpb24gMTQwOTA0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0
cmFjdFN0YXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTEsIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDExLCAyMDEyLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtODcsMjEgKzg3LDIxIEBA
IHZvaWQgQWJzdHJhY3RTdGF0ZTo6aW5pdGlhbGl6ZShHcmFwaCYgZ3IKICAgICByb290LT5jZmFI
YXNWaXNpdGVkID0gZmFsc2U7CiAgICAgcm9vdC0+Y2ZhRm91bmRDb25zdGFudHMgPSBmYWxzZTsK
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHJvb3QtPnZhbHVlc0F0SGVhZC5udW1iZXJPZkFy
Z3VtZW50cygpOyArK2kpIHsKLSAgICAgICAgTm9kZSYgbm9kZSA9IGdyYXBoW3Jvb3QtPnZhcmlh
Ymxlc0F0SGVhZC5hcmd1bWVudChpKV07Ci0gICAgICAgIEFTU0VSVChub2RlLm9wKCkgPT0gU2V0
QXJndW1lbnQpOwotICAgICAgICBpZiAoIW5vZGUuc2hvdWxkR2VuZXJhdGUoKSkgeworICAgICAg
ICBOb2RlKiBub2RlID0gcm9vdC0+dmFyaWFibGVzQXRIZWFkLmFyZ3VtZW50KGkpOworICAgICAg
ICBBU1NFUlQobm9kZS0+b3AoKSA9PSBTZXRBcmd1bWVudCk7CisgICAgICAgIGlmICghbm9kZS0+
c2hvdWxkR2VuZXJhdGUoKSkgewogICAgICAgICAgICAgLy8gVGhlIGFyZ3VtZW50IGlzIGRlYWQu
IFdlIGRvbid0IGRvIGFueSBjaGVja3MgZm9yIHN1Y2ggYXJndW1lbnRzLCBhbmQgc28KICAgICAg
ICAgICAgIC8vIGZvciB0aGUgcHVycG9zZSBvZiB0aGUgYW5hbHlzaXMsIHRoZXkgY29udGFpbiBu
byB2YWx1ZS4KICAgICAgICAgICAgIHJvb3QtPnZhbHVlc0F0SGVhZC5hcmd1bWVudChpKS5jbGVh
cigpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAg
IGlmIChub2RlLnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5pc0NhcHR1cmVkKCkpIHsKKyAgICAgICAg
aWYgKG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5pc0NhcHR1cmVkKCkpIHsKICAgICAgICAg
ICAgIHJvb3QtPnZhbHVlc0F0SGVhZC5hcmd1bWVudChpKS5tYWtlVG9wKCk7CiAgICAgICAgICAg
ICBjb250aW51ZTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgU3BlY3VsYXRlZFR5cGUg
cHJlZGljdGlvbiA9IG5vZGUudmFyaWFibGVBY2Nlc3NEYXRhKCktPnByZWRpY3Rpb24oKTsKKyAg
ICAgICAgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0
YSgpLT5wcmVkaWN0aW9uKCk7CiAgICAgICAgIGlmIChpc0ludDMyU3BlY3VsYXRpb24ocHJlZGlj
dGlvbikpCiAgICAgICAgICAgICByb290LT52YWx1ZXNBdEhlYWQuYXJndW1lbnQoaSkuc2V0KFNw
ZWNJbnQzMik7CiAgICAgICAgIGVsc2UgaWYgKGlzQm9vbGVhblNwZWN1bGF0aW9uKHByZWRpY3Rp
b24pKQpAQCAtMTE0LDggKzExNCw4IEBAIHZvaWQgQWJzdHJhY3RTdGF0ZTo6aW5pdGlhbGl6ZShH
cmFwaCYgZ3IKICAgICAgICAgcm9vdC0+dmFsdWVzQXRUYWlsLmFyZ3VtZW50KGkpLmNsZWFyKCk7
CiAgICAgfQogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcm9vdC0+dmFsdWVzQXRIZWFkLm51
bWJlck9mTG9jYWxzKCk7ICsraSkgewotICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4ID0gcm9v
dC0+dmFyaWFibGVzQXRIZWFkLmxvY2FsKGkpOwotICAgICAgICBpZiAobm9kZUluZGV4ICE9IE5v
Tm9kZSAmJiBncmFwaFtub2RlSW5kZXhdLnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5pc0NhcHR1cmVk
KCkpCisgICAgICAgIE5vZGUqIG5vZGUgPSByb290LT52YXJpYWJsZXNBdEhlYWQubG9jYWwoaSk7
CisgICAgICAgIGlmIChub2RlICYmIG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5pc0NhcHR1
cmVkKCkpCiAgICAgICAgICAgICByb290LT52YWx1ZXNBdEhlYWQubG9jYWwoaSkubWFrZVRvcCgp
OwogICAgICAgICBlbHNlCiAgICAgICAgICAgICByb290LT52YWx1ZXNBdEhlYWQubG9jYWwoaSku
Y2xlYXIoKTsKQEAgLTIxMywxMSArMjEzLDExIEBAIHZvaWQgQWJzdHJhY3RTdGF0ZTo6cmVzZXQo
KQogICAgIG1fYnJhbmNoRGlyZWN0aW9uID0gSW52YWxpZEJyYW5jaERpcmVjdGlvbjsKIH0KIAot
QWJzdHJhY3RTdGF0ZTo6Qm9vbGVhblJlc3VsdCBBYnN0cmFjdFN0YXRlOjpib29sZWFuUmVzdWx0
KE5vZGUmIG5vZGUsIEFic3RyYWN0VmFsdWUmIHZhbHVlKQorQWJzdHJhY3RTdGF0ZTo6Qm9vbGVh
blJlc3VsdCBBYnN0cmFjdFN0YXRlOjpib29sZWFuUmVzdWx0KE5vZGUqIG5vZGUsIEFic3RyYWN0
VmFsdWUmIHZhbHVlKQogewogICAgIEpTVmFsdWUgY2hpbGRDb25zdCA9IHZhbHVlLnZhbHVlKCk7
CiAgICAgaWYgKGNoaWxkQ29uc3QpIHsKLSAgICAgICAgaWYgKGNoaWxkQ29uc3QudG9Cb29sZWFu
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3RGb3Iobm9kZS5jb2RlT3JpZ2luKS0+Z2xvYmFsRXhl
YygpKSkKKyAgICAgICAgaWYgKGNoaWxkQ29uc3QudG9Cb29sZWFuKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3RGb3Iobm9kZS0+Y29kZU9yaWdpbiktPmdsb2JhbEV4ZWMoKSkpCiAgICAgICAgICAg
ICByZXR1cm4gRGVmaW5pdGVseVRydWU7CiAgICAgICAgIHJldHVybiBEZWZpbml0ZWx5RmFsc2U7
CiAgICAgfQpAQCAtMjI2LDcgKzIyNiw3IEBAIEFic3RyYWN0U3RhdGU6OkJvb2xlYW5SZXN1bHQg
QWJzdHJhY3RTdGEKICAgICBpZiAoaXNDZWxsU3BlY3VsYXRpb24odmFsdWUubV90eXBlKQogICAg
ICAgICAmJiB2YWx1ZS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5oYXNTaW5nbGV0b24oKSkgewog
ICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHZhbHVlLm1fY3VycmVudEtub3duU3RydWN0
dXJlLnNpbmdsZXRvbigpOwotICAgICAgICBpZiAoIXN0cnVjdHVyZS0+bWFzcXVlcmFkZXNBc1Vu
ZGVmaW5lZChtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0Rm9yKG5vZGUuY29kZU9yaWdpbikpCisg
ICAgICAgIGlmICghc3RydWN0dXJlLT5tYXNxdWVyYWRlc0FzVW5kZWZpbmVkKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3RGb3Iobm9kZS0+Y29kZU9yaWdpbikpCiAgICAgICAgICAgICAmJiBzdHJ1
Y3R1cmUtPnR5cGVJbmZvKCkudHlwZSgpICE9IFN0cmluZ1R5cGUpCiAgICAgICAgICAgICByZXR1
cm4gRGVmaW5pdGVseVRydWU7CiAgICAgfQpAQCAtMjQxLDMyICsyNDEsMzEgQEAgYm9vbCBBYnN0
cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgIAogICAgIG1fZGlkQ2xvYmJlciA9
IGZhbHNlOwogICAgIAotICAgIE5vZGVJbmRleCBub2RlSW5kZXggPSBtX2Jsb2NrLT5hdChpbmRl
eEluQmxvY2spOwotICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW25vZGVJbmRleF07CisgICAgTm9k
ZSogbm9kZSA9IG1fYmxvY2stPmF0KGluZGV4SW5CbG9jayk7CiAgICAgICAgIAotICAgIGlmICgh
bm9kZS5zaG91bGRHZW5lcmF0ZSgpKQorICAgIGlmICghbm9kZS0+c2hvdWxkR2VuZXJhdGUoKSkK
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIAotICAgIHN3aXRjaCAobm9kZS5vcCgpKSB7
CisgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CiAgICAgY2FzZSBKU0NvbnN0YW50OgogICAgIGNh
c2UgV2Vha0pTQ29uc3RhbnQ6CiAgICAgY2FzZSBQaGFudG9tQXJndW1lbnRzOiB7Ci0gICAgICAg
IGZvck5vZGUobm9kZUluZGV4KS5zZXQobV9ncmFwaC52YWx1ZU9mSlNDb25zdGFudChub2RlSW5k
ZXgpKTsKLSAgICAgICAgbm9kZS5zZXRDYW5FeGl0KGZhbHNlKTsKKyAgICAgICAgZm9yTm9kZShu
b2RlKS5zZXQobV9ncmFwaC52YWx1ZU9mSlNDb25zdGFudChub2RlKSk7CisgICAgICAgIG5vZGUt
PnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIAogICAg
IGNhc2UgSWRlbnRpdHk6IHsKLSAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpID0gZm9yTm9kZShu
b2RlLmNoaWxkMSgpKTsKLSAgICAgICAgbm9kZS5zZXRDYW5FeGl0KGZhbHNlKTsKKyAgICAgICAg
Zm9yTm9kZShub2RlKSA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBub2RlLT5z
ZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAgICAgCiAg
ICAgY2FzZSBHZXRMb2NhbDogewotICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxl
QWNjZXNzRGF0YSA9IG5vZGUudmFyaWFibGVBY2Nlc3NEYXRhKCk7CisgICAgICAgIFZhcmlhYmxl
QWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRh
KCk7CiAgICAgICAgIGlmICh2YXJpYWJsZUFjY2Vzc0RhdGEtPnByZWRpY3Rpb24oKSA9PSBTcGVj
Tm9uZSkgewogICAgICAgICAgICAgbV9pc1ZhbGlkID0gZmFsc2U7Ci0gICAgICAgICAgICBub2Rl
LnNldENhbkV4aXQodHJ1ZSk7CisgICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgYm9vbCBjYW5FeGl0ID0gZmFs
c2U7CkBAIC0yNzcsNTMgKzI3Niw1MyBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5z
aWduZWQgaW5kCiAgICAgICAgIH0KICAgICAgICAgaWYgKHZhbHVlLnZhbHVlKCkpCiAgICAgICAg
ICAgICBtX2ZvdW5kQ29uc3RhbnRzID0gdHJ1ZTsKLSAgICAgICAgZm9yTm9kZShub2RlSW5kZXgp
ID0gdmFsdWU7Ci0gICAgICAgIG5vZGUuc2V0Q2FuRXhpdChjYW5FeGl0KTsKKyAgICAgICAgZm9y
Tm9kZShub2RlKSA9IHZhbHVlOworICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGNhbkV4aXQpOwog
ICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgR2V0TG9jYWxVbmxpbmtl
ZDogewotICAgICAgICBBYnN0cmFjdFZhbHVlIHZhbHVlID0gbV92YXJpYWJsZXMub3BlcmFuZChu
b2RlLnVubGlua2VkTG9jYWwoKSk7CisgICAgICAgIEFic3RyYWN0VmFsdWUgdmFsdWUgPSBtX3Zh
cmlhYmxlcy5vcGVyYW5kKG5vZGUtPnVubGlua2VkTG9jYWwoKSk7CiAgICAgICAgIGlmICh2YWx1
ZS52YWx1ZSgpKQogICAgICAgICAgICAgbV9mb3VuZENvbnN0YW50cyA9IHRydWU7Ci0gICAgICAg
IGZvck5vZGUobm9kZUluZGV4KSA9IHZhbHVlOwotICAgICAgICBub2RlLnNldENhbkV4aXQoZmFs
c2UpOworICAgICAgICBmb3JOb2RlKG5vZGUpID0gdmFsdWU7CisgICAgICAgIG5vZGUtPnNldENh
bkV4aXQoZmFsc2UpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIAogICAgIGNhc2Ug
U2V0TG9jYWw6IHsKLSAgICAgICAgaWYgKG5vZGUudmFyaWFibGVBY2Nlc3NEYXRhKCktPmlzQ2Fw
dHVyZWQoKQotICAgICAgICAgICAgfHwgbV9ncmFwaC5pc0NyZWF0ZWRUaGlzQXJndW1lbnQobm9k
ZS5sb2NhbCgpKSkgewotICAgICAgICAgICAgbV92YXJpYWJsZXMub3BlcmFuZChub2RlLmxvY2Fs
KCkpID0gZm9yTm9kZShub2RlLmNoaWxkMSgpKTsKLSAgICAgICAgICAgIG5vZGUuc2V0Q2FuRXhp
dChmYWxzZSk7CisgICAgICAgIGlmIChub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+aXNDYXB0
dXJlZCgpCisgICAgICAgICAgICB8fCBtX2dyYXBoLmlzQ3JlYXRlZFRoaXNBcmd1bWVudChub2Rl
LT5sb2NhbCgpKSkgeworICAgICAgICAgICAgbV92YXJpYWJsZXMub3BlcmFuZChub2RlLT5sb2Nh
bCgpKSA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgbm9kZS0+c2V0Q2Fu
RXhpdChmYWxzZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAKLSAg
ICAgICAgaWYgKG5vZGUudmFyaWFibGVBY2Nlc3NEYXRhKCktPnNob3VsZFVzZURvdWJsZUZvcm1h
dCgpKSB7CisgICAgICAgIGlmIChub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+c2hvdWxkVXNl
RG91YmxlRm9ybWF0KCkpIHsKICAgICAgICAgICAgIHNwZWN1bGF0ZU51bWJlclVuYXJ5KG5vZGUp
OwotICAgICAgICAgICAgbV92YXJpYWJsZXMub3BlcmFuZChub2RlLmxvY2FsKCkpLnNldChTcGVj
RG91YmxlKTsKKyAgICAgICAgICAgIG1fdmFyaWFibGVzLm9wZXJhbmQobm9kZS0+bG9jYWwoKSku
c2V0KFNwZWNEb3VibGUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAg
Ci0gICAgICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3RlZFR5cGUgPSBub2RlLnZhcmlhYmxlQWNj
ZXNzRGF0YSgpLT5hcmd1bWVudEF3YXJlUHJlZGljdGlvbigpOworICAgICAgICBTcGVjdWxhdGVk
VHlwZSBwcmVkaWN0ZWRUeXBlID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCktPmFyZ3VtZW50
QXdhcmVQcmVkaWN0aW9uKCk7CiAgICAgICAgIGlmIChpc0ludDMyU3BlY3VsYXRpb24ocHJlZGlj
dGVkVHlwZSkpCiAgICAgICAgICAgICBzcGVjdWxhdGVJbnQzMlVuYXJ5KG5vZGUpOwogICAgICAg
ICBlbHNlIGlmIChpc0NlbGxTcGVjdWxhdGlvbihwcmVkaWN0ZWRUeXBlKSkgewotICAgICAgICAg
ICAgbm9kZS5zZXRDYW5FeGl0KCFpc0NlbGxTcGVjdWxhdGlvbihmb3JOb2RlKG5vZGUuY2hpbGQx
KCkpLm1fdHlwZSkpOwotICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIo
U3BlY0NlbGwpOworICAgICAgICAgICAgbm9kZS5zZXRDYW5FeGl0KCFpc0NlbGxTcGVjdWxhdGlv
bihmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX3R5cGUpKTsKKyAgICAgICAgICAgIGZvck5vZGUo
bm9kZS0+Y2hpbGQxKCkpLmZpbHRlcihTcGVjQ2VsbCk7CiAgICAgICAgIH0gZWxzZSBpZiAoaXNC
b29sZWFuU3BlY3VsYXRpb24ocHJlZGljdGVkVHlwZSkpCiAgICAgICAgICAgICBzcGVjdWxhdGVC
b29sZWFuVW5hcnkobm9kZSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIG5vZGUuc2V0Q2Fu
RXhpdChmYWxzZSk7CisgICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAg
ICAgCi0gICAgICAgIG1fdmFyaWFibGVzLm9wZXJhbmQobm9kZS5sb2NhbCgpKSA9IGZvck5vZGUo
bm9kZS5jaGlsZDEoKSk7CisgICAgICAgIG1fdmFyaWFibGVzLm9wZXJhbmQobm9kZS0+bG9jYWwo
KSkgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAg
ICAgICAgICAgCiAgICAgY2FzZSBTZXRBcmd1bWVudDoKICAgICAgICAgLy8gQXNzZXJ0IHRoYXQg
dGhlIHN0YXRlIG9mIGFyZ3VtZW50cyBoYXMgYmVlbiBzZXQuCi0gICAgICAgIEFTU0VSVCghbV9i
bG9jay0+dmFsdWVzQXRIZWFkLm9wZXJhbmQobm9kZS5sb2NhbCgpKS5pc0NsZWFyKCkpOwotICAg
ICAgICBub2RlLnNldENhbkV4aXQoZmFsc2UpOworICAgICAgICBBU1NFUlQoIW1fYmxvY2stPnZh
bHVlc0F0SGVhZC5vcGVyYW5kKG5vZGUtPmxvY2FsKCkpLmlzQ2xlYXIoKSk7CisgICAgICAgIG5v
ZGUtPnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAg
IGNhc2UgQml0QW5kOgpAQCAtMzMyLDMwICszMzEsMzAgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpl
eGVjdXRlKHVuc2lnbmVkIGluZAogICAgIGNhc2UgQml0UlNoaWZ0OgogICAgIGNhc2UgQml0TFNo
aWZ0OgogICAgIGNhc2UgQml0VVJTaGlmdDogewotICAgICAgICBKU1ZhbHVlIGxlZnQgPSBmb3JO
b2RlKG5vZGUuY2hpbGQxKCkpLnZhbHVlKCk7Ci0gICAgICAgIEpTVmFsdWUgcmlnaHQgPSBmb3JO
b2RlKG5vZGUuY2hpbGQyKCkpLnZhbHVlKCk7CisgICAgICAgIEpTVmFsdWUgbGVmdCA9IGZvck5v
ZGUobm9kZS0+Y2hpbGQxKCkpLnZhbHVlKCk7CisgICAgICAgIEpTVmFsdWUgcmlnaHQgPSBmb3JO
b2RlKG5vZGUtPmNoaWxkMigpKS52YWx1ZSgpOwogICAgICAgICBpZiAobGVmdCAmJiByaWdodCAm
JiBsZWZ0LmlzSW50MzIoKSAmJiByaWdodC5pc0ludDMyKCkpIHsKICAgICAgICAgICAgIGludDMy
X3QgYSA9IGxlZnQuYXNJbnQzMigpOwogICAgICAgICAgICAgaW50MzJfdCBiID0gcmlnaHQuYXNJ
bnQzMigpOwogICAgICAgICAgICAgYm9vbCBjb25zdGFudFdhc1NldDsKICAgICAgICAgICAgIHN3
aXRjaCAobm9kZS5vcCgpKSB7CiAgICAgICAgICAgICBjYXNlIEJpdEFuZDoKLSAgICAgICAgICAg
ICAgICBjb25zdGFudFdhc1NldCA9IHRyeVNldENvbnN0YW50KG5vZGVJbmRleCwgSlNWYWx1ZShh
ICYgYikpOworICAgICAgICAgICAgICAgIGNvbnN0YW50V2FzU2V0ID0gdHJ5U2V0Q29uc3RhbnQo
bm9kZSwgSlNWYWx1ZShhICYgYikpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgY2FzZSBCaXRPcjoKLSAgICAgICAgICAgICAgICBjb25zdGFudFdhc1NldCA9IHRyeVNldENv
bnN0YW50KG5vZGVJbmRleCwgSlNWYWx1ZShhIHwgYikpOworICAgICAgICAgICAgICAgIGNvbnN0
YW50V2FzU2V0ID0gdHJ5U2V0Q29uc3RhbnQobm9kZSwgSlNWYWx1ZShhIHwgYikpOwogICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBCaXRYb3I6Ci0gICAgICAgICAgICAg
ICAgY29uc3RhbnRXYXNTZXQgPSB0cnlTZXRDb25zdGFudChub2RlSW5kZXgsIEpTVmFsdWUoYSBe
IGIpKTsKKyAgICAgICAgICAgICAgICBjb25zdGFudFdhc1NldCA9IHRyeVNldENvbnN0YW50KG5v
ZGUsIEpTVmFsdWUoYSBeIGIpKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
IGNhc2UgQml0UlNoaWZ0OgotICAgICAgICAgICAgICAgIGNvbnN0YW50V2FzU2V0ID0gdHJ5U2V0
Q29uc3RhbnQobm9kZUluZGV4LCBKU1ZhbHVlKGEgPj4gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGIp
KSk7CisgICAgICAgICAgICAgICAgY29uc3RhbnRXYXNTZXQgPSB0cnlTZXRDb25zdGFudChub2Rl
LCBKU1ZhbHVlKGEgPj4gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGIpKSk7CiAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIEJpdExTaGlmdDoKLSAgICAgICAgICAgICAgICBj
b25zdGFudFdhc1NldCA9IHRyeVNldENvbnN0YW50KG5vZGVJbmRleCwgSlNWYWx1ZShhIDw8IHN0
YXRpY19jYXN0PHVpbnQzMl90PihiKSkpOworICAgICAgICAgICAgICAgIGNvbnN0YW50V2FzU2V0
ID0gdHJ5U2V0Q29uc3RhbnQobm9kZSwgSlNWYWx1ZShhIDw8IHN0YXRpY19jYXN0PHVpbnQzMl90
PihiKSkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBCaXRVUlNo
aWZ0OgotICAgICAgICAgICAgICAgIGNvbnN0YW50V2FzU2V0ID0gdHJ5U2V0Q29uc3RhbnQobm9k
ZUluZGV4LCBKU1ZhbHVlKHN0YXRpY19jYXN0PHVpbnQzMl90PihhKSA+PiBzdGF0aWNfY2FzdDx1
aW50MzJfdD4oYikpKTsKKyAgICAgICAgICAgICAgICBjb25zdGFudFdhc1NldCA9IHRyeVNldENv
bnN0YW50KG5vZGUsIEpTVmFsdWUoc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGEpID4+IHN0YXRpY19j
YXN0PHVpbnQzMl90PihiKSkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
ZGVmYXVsdDoKICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwpA
QCAtMzYzLDE5OSArMzYyLDE5OSBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWdu
ZWQgaW5kCiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoY29uc3RhbnRXYXNTZXQpIHsK
ICAgICAgICAgICAgICAgICBtX2ZvdW5kQ29uc3RhbnRzID0gdHJ1ZTsKLSAgICAgICAgICAgICAg
ICBub2RlLnNldENhbkV4aXQoZmFsc2UpOworICAgICAgICAgICAgICAgIG5vZGUtPnNldENhbkV4
aXQoZmFsc2UpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAg
ICB9CiAgICAgICAgIHNwZWN1bGF0ZUludDMyQmluYXJ5KG5vZGUpOwotICAgICAgICBmb3JOb2Rl
KG5vZGVJbmRleCkuc2V0KFNwZWNJbnQzMik7CisgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNw
ZWNJbnQzMik7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBVSW50
MzJUb051bWJlcjogewotICAgICAgICBKU1ZhbHVlIGNoaWxkID0gZm9yTm9kZShub2RlLmNoaWxk
MSgpKS52YWx1ZSgpOworICAgICAgICBKU1ZhbHVlIGNoaWxkID0gZm9yTm9kZShub2RlLT5jaGls
ZDEoKSkudmFsdWUoKTsKICAgICAgICAgaWYgKGNoaWxkICYmIGNoaWxkLmlzTnVtYmVyKCkpIHsK
ICAgICAgICAgICAgIEFTU0VSVChjaGlsZC5pc0ludDMyKCkpOwotICAgICAgICAgICAgaWYgKHRy
eVNldENvbnN0YW50KG5vZGVJbmRleCwgSlNWYWx1ZShjaGlsZC5hc1VJbnQzMigpKSkpIHsKKyAg
ICAgICAgICAgIGlmICh0cnlTZXRDb25zdGFudChub2RlLCBKU1ZhbHVlKGNoaWxkLmFzVUludDMy
KCkpKSkgewogICAgICAgICAgICAgICAgIG1fZm91bmRDb25zdGFudHMgPSB0cnVlOwotICAgICAg
ICAgICAgICAgIG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7CisgICAgICAgICAgICAgICAgbm9kZS0+
c2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9
CiAgICAgICAgIH0KLSAgICAgICAgaWYgKCFub2RlLmNhblNwZWN1bGF0ZUludGVnZXIoKSkgewot
ICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChTcGVjRG91YmxlKTsKLSAgICAgICAg
ICAgIG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7CisgICAgICAgIGlmICghbm9kZS0+Y2FuU3BlY3Vs
YXRlSW50ZWdlcigpKSB7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjRG91Ymxl
KTsKKyAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChTcGVjSW50MzIpOwotICAgICAg
ICAgICAgbm9kZS5zZXRDYW5FeGl0KHRydWUpOworICAgICAgICAgICAgZm9yTm9kZShub2RlKS5z
ZXQoU3BlY0ludDMyKTsKKyAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7CiAgICAg
ICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAgICAgICAKICAgICAgICAgICAg
IAogICAgIGNhc2UgRG91YmxlQXNJbnQzMjogewotICAgICAgICBKU1ZhbHVlIGNoaWxkID0gZm9y
Tm9kZShub2RlLmNoaWxkMSgpKS52YWx1ZSgpOworICAgICAgICBKU1ZhbHVlIGNoaWxkID0gZm9y
Tm9kZShub2RlLT5jaGlsZDEoKSkudmFsdWUoKTsKICAgICAgICAgaWYgKGNoaWxkICYmIGNoaWxk
LmlzTnVtYmVyKCkpIHsKICAgICAgICAgICAgIGRvdWJsZSBhc0RvdWJsZSA9IGNoaWxkLmFzTnVt
YmVyKCk7CiAgICAgICAgICAgICBpbnQzMl90IGFzSW50ID0gSlNDOjp0b0ludDMyKGFzRG91Ymxl
KTsKICAgICAgICAgICAgIGlmIChiaXR3aXNlX2Nhc3Q8aW50NjRfdD4oc3RhdGljX2Nhc3Q8ZG91
YmxlPihhc0ludCkpID09IGJpdHdpc2VfY2FzdDxpbnQ2NF90Pihhc0RvdWJsZSkKLSAgICAgICAg
ICAgICAgICAmJiB0cnlTZXRDb25zdGFudChub2RlSW5kZXgsIEpTVmFsdWUoYXNJbnQpKSkgewor
ICAgICAgICAgICAgICAgICYmIHRyeVNldENvbnN0YW50KG5vZGUsIEpTVmFsdWUoYXNJbnQpKSkg
ewogICAgICAgICAgICAgICAgIG1fZm91bmRDb25zdGFudHMgPSB0cnVlOwogICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIG5vZGUuc2V0Q2Fu
RXhpdCh0cnVlKTsKLSAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY051
bWJlcik7Ci0gICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoU3BlY0ludDMyKTsKKyAgICAg
ICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKKyAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDEo
KSkuZmlsdGVyKFNwZWNOdW1iZXIpOworICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjSW50
MzIpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgICAgICAKICAgICBjYXNlIFZhbHVl
VG9JbnQzMjogewotICAgICAgICBKU1ZhbHVlIGNoaWxkID0gZm9yTm9kZShub2RlLmNoaWxkMSgp
KS52YWx1ZSgpOworICAgICAgICBKU1ZhbHVlIGNoaWxkID0gZm9yTm9kZShub2RlLT5jaGlsZDEo
KSkudmFsdWUoKTsKICAgICAgICAgaWYgKGNoaWxkICYmIGNoaWxkLmlzTnVtYmVyKCkpIHsKICAg
ICAgICAgICAgIGJvb2wgY29uc3RhbnRXYXNTZXQ7CiAgICAgICAgICAgICBpZiAoY2hpbGQuaXNJ
bnQzMigpKQotICAgICAgICAgICAgICAgIGNvbnN0YW50V2FzU2V0ID0gdHJ5U2V0Q29uc3RhbnQo
bm9kZUluZGV4LCBjaGlsZCk7CisgICAgICAgICAgICAgICAgY29uc3RhbnRXYXNTZXQgPSB0cnlT
ZXRDb25zdGFudChub2RlLCBjaGlsZCk7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAg
ICAgY29uc3RhbnRXYXNTZXQgPSB0cnlTZXRDb25zdGFudChub2RlSW5kZXgsIEpTVmFsdWUoSlND
Ojp0b0ludDMyKGNoaWxkLmFzRG91YmxlKCkpKSk7CisgICAgICAgICAgICAgICAgY29uc3RhbnRX
YXNTZXQgPSB0cnlTZXRDb25zdGFudChub2RlLCBKU1ZhbHVlKEpTQzo6dG9JbnQzMihjaGlsZC5h
c0RvdWJsZSgpKSkpOwogICAgICAgICAgICAgaWYgKGNvbnN0YW50V2FzU2V0KSB7CiAgICAgICAg
ICAgICAgICAgbV9mb3VuZENvbnN0YW50cyA9IHRydWU7Ci0gICAgICAgICAgICAgICAgbm9kZS5z
ZXRDYW5FeGl0KGZhbHNlKTsKKyAgICAgICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNl
KTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAg
ICAgICBpZiAobV9ncmFwaFtub2RlLmNoaWxkMSgpXS5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkp
CisgICAgICAgIGlmIChtX2dyYXBoW25vZGUtPmNoaWxkMSgpXS5zaG91bGRTcGVjdWxhdGVJbnRl
Z2VyKCkpCiAgICAgICAgICAgICBzcGVjdWxhdGVJbnQzMlVuYXJ5KG5vZGUpOwotICAgICAgICBl
bHNlIGlmIChtX2dyYXBoW25vZGUuY2hpbGQxKCldLnNob3VsZFNwZWN1bGF0ZU51bWJlcigpKQor
ICAgICAgICBlbHNlIGlmIChtX2dyYXBoW25vZGUtPmNoaWxkMSgpXS5zaG91bGRTcGVjdWxhdGVO
dW1iZXIoKSkKICAgICAgICAgICAgIHNwZWN1bGF0ZU51bWJlclVuYXJ5KG5vZGUpOwotICAgICAg
ICBlbHNlIGlmIChtX2dyYXBoW25vZGUuY2hpbGQxKCldLnNob3VsZFNwZWN1bGF0ZUJvb2xlYW4o
KSkKKyAgICAgICAgZWxzZSBpZiAobV9ncmFwaFtub2RlLT5jaGlsZDEoKV0uc2hvdWxkU3BlY3Vs
YXRlQm9vbGVhbigpKQogICAgICAgICAgICAgc3BlY3VsYXRlQm9vbGVhblVuYXJ5KG5vZGUpOwog
ICAgICAgICBlbHNlCi0gICAgICAgICAgICBub2RlLnNldENhbkV4aXQoZmFsc2UpOworICAgICAg
ICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgIAotICAgICAgICBmb3JOb2Rl
KG5vZGVJbmRleCkuc2V0KFNwZWNJbnQzMik7CisgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNw
ZWNJbnQzMik7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBJbnQz
MlRvRG91YmxlOiB7Ci0gICAgICAgIEpTVmFsdWUgY2hpbGQgPSBmb3JOb2RlKG5vZGUuY2hpbGQx
KCkpLnZhbHVlKCk7CisgICAgICAgIEpTVmFsdWUgY2hpbGQgPSBmb3JOb2RlKG5vZGUtPmNoaWxk
MSgpKS52YWx1ZSgpOwogICAgICAgICBpZiAoY2hpbGQgJiYgY2hpbGQuaXNOdW1iZXIoKQotICAg
ICAgICAgICAgJiYgdHJ5U2V0Q29uc3RhbnQobm9kZUluZGV4LCBKU1ZhbHVlKEpTVmFsdWU6OkVu
Y29kZUFzRG91YmxlLCBjaGlsZC5hc051bWJlcigpKSkpIHsKKyAgICAgICAgICAgICYmIHRyeVNl
dENvbnN0YW50KG5vZGUsIEpTVmFsdWUoSlNWYWx1ZTo6RW5jb2RlQXNEb3VibGUsIGNoaWxkLmFz
TnVtYmVyKCkpKSkgewogICAgICAgICAgICAgbV9mb3VuZENvbnN0YW50cyA9IHRydWU7Ci0gICAg
ICAgICAgICBub2RlLnNldENhbkV4aXQoZmFsc2UpOworICAgICAgICAgICAgbm9kZS0+c2V0Q2Fu
RXhpdChmYWxzZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBzcGVj
dWxhdGVOdW1iZXJVbmFyeShub2RlKTsKLSAgICAgICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbihm
b3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpCi0gICAgICAgICAgICBmb3JOb2RlKG5vZGVJ
bmRleCkuc2V0KFNwZWNEb3VibGVSZWFsKTsKKyAgICAgICAgaWYgKGlzSW50MzJTcGVjdWxhdGlv
bihmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX3R5cGUpKQorICAgICAgICAgICAgZm9yTm9kZShu
b2RlKS5zZXQoU3BlY0RvdWJsZVJlYWwpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBmb3JO
b2RlKG5vZGVJbmRleCkuc2V0KFNwZWNEb3VibGUpOworICAgICAgICAgICAgZm9yTm9kZShub2Rl
KS5zZXQoU3BlY0RvdWJsZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCiAgICAg
Y2FzZSBDaGVja051bWJlcjoKLSAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIo
U3BlY051bWJlcik7CisgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRlcihTcGVj
TnVtYmVyKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICBjYXNlIFZhbHVlQWRk
OgogICAgIGNhc2UgQXJpdGhBZGQ6IHsKLSAgICAgICAgSlNWYWx1ZSBsZWZ0ID0gZm9yTm9kZShu
b2RlLmNoaWxkMSgpKS52YWx1ZSgpOwotICAgICAgICBKU1ZhbHVlIHJpZ2h0ID0gZm9yTm9kZShu
b2RlLmNoaWxkMigpKS52YWx1ZSgpOworICAgICAgICBKU1ZhbHVlIGxlZnQgPSBmb3JOb2RlKG5v
ZGUtPmNoaWxkMSgpKS52YWx1ZSgpOworICAgICAgICBKU1ZhbHVlIHJpZ2h0ID0gZm9yTm9kZShu
b2RlLT5jaGlsZDIoKSkudmFsdWUoKTsKICAgICAgICAgaWYgKGxlZnQgJiYgcmlnaHQgJiYgbGVm
dC5pc051bWJlcigpICYmIHJpZ2h0LmlzTnVtYmVyKCkKLSAgICAgICAgICAgICYmIHRyeVNldENv
bnN0YW50KG5vZGVJbmRleCwgSlNWYWx1ZShsZWZ0LmFzTnVtYmVyKCkgKyByaWdodC5hc051bWJl
cigpKSkpIHsKKyAgICAgICAgICAgICYmIHRyeVNldENvbnN0YW50KG5vZGUsIEpTVmFsdWUobGVm
dC5hc051bWJlcigpICsgcmlnaHQuYXNOdW1iZXIoKSkpKSB7CiAgICAgICAgICAgICBtX2ZvdW5k
Q29uc3RhbnRzID0gdHJ1ZTsKICAgICAgICAgICAgIG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBpZiAobV9ncmFwaC5hZGRTaG91
bGRTcGVjdWxhdGVJbnRlZ2VyKG5vZGUpKSB7CiAgICAgICAgICAgICBzcGVjdWxhdGVJbnQzMkJp
bmFyeSgKLSAgICAgICAgICAgICAgICBub2RlLCAhbm9kZUNhblRydW5jYXRlSW50ZWdlcihub2Rl
LmFyaXRoTm9kZUZsYWdzKCkpKTsKLSAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQo
U3BlY0ludDMyKTsKKyAgICAgICAgICAgICAgICBub2RlLCAhbm9kZUNhblRydW5jYXRlSW50ZWdl
cihub2RlLT5hcml0aE5vZGVGbGFncygpKSk7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNl
dChTcGVjSW50MzIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgaWYg
KE5vZGU6OnNob3VsZFNwZWN1bGF0ZU51bWJlckV4cGVjdGluZ0RlZmluZWQobV9ncmFwaFtub2Rl
LmNoaWxkMSgpXSwgbV9ncmFwaFtub2RlLmNoaWxkMigpXSkpIHsKKyAgICAgICAgaWYgKE5vZGU6
OnNob3VsZFNwZWN1bGF0ZU51bWJlckV4cGVjdGluZ0RlZmluZWQobm9kZS0+Y2hpbGQxKCkubm9k
ZSgpLCBub2RlLT5jaGlsZDIoKS5ub2RlKCkpKSB7CiAgICAgICAgICAgICBzcGVjdWxhdGVOdW1i
ZXJCaW5hcnkobm9kZSk7Ci0gICAgICAgICAgICBpZiAoaXNSZWFsTnVtYmVyU3BlY3VsYXRpb24o
Zm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpCi0gICAgICAgICAgICAgICAgJiYgaXNSZWFs
TnVtYmVyU3BlY3VsYXRpb24oZm9yTm9kZShub2RlLmNoaWxkMigpKS5tX3R5cGUpKQotICAgICAg
ICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoU3BlY0RvdWJsZVJlYWwpOworICAgICAg
ICAgICAgaWYgKGlzUmVhbE51bWJlclNwZWN1bGF0aW9uKGZvck5vZGUobm9kZS0+Y2hpbGQxKCkp
Lm1fdHlwZSkKKyAgICAgICAgICAgICAgICAmJiBpc1JlYWxOdW1iZXJTcGVjdWxhdGlvbihmb3JO
b2RlKG5vZGUtPmNoaWxkMigpKS5tX3R5cGUpKQorICAgICAgICAgICAgICAgIGZvck5vZGUobm9k
ZSkuc2V0KFNwZWNEb3VibGVSZWFsKTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAg
ICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFNwZWNEb3VibGUpOworICAgICAgICAgICAgICAgIGZv
ck5vZGUobm9kZSkuc2V0KFNwZWNEb3VibGUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IH0KLSAgICAgICAgaWYgKG5vZGUub3AoKSA9PSBWYWx1ZUFkZCkgewotICAgICAgICAgICAgY2xv
YmJlcldvcmxkKG5vZGUuY29kZU9yaWdpbiwgaW5kZXhJbkJsb2NrKTsKLSAgICAgICAgICAgIGZv
ck5vZGUobm9kZUluZGV4KS5zZXQoU3BlY1N0cmluZyB8IFNwZWNJbnQzMiB8IFNwZWNOdW1iZXIp
OwotICAgICAgICAgICAgbm9kZS5zZXRDYW5FeGl0KGZhbHNlKTsKKyAgICAgICAgaWYgKG5vZGUt
Pm9wKCkgPT0gVmFsdWVBZGQpIHsKKyAgICAgICAgICAgIGNsb2JiZXJXb3JsZChub2RlLT5jb2Rl
T3JpZ2luLCBpbmRleEluQmxvY2spOworICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3Bl
Y1N0cmluZyB8IFNwZWNJbnQzMiB8IFNwZWNOdW1iZXIpOworICAgICAgICAgICAgbm9kZS0+c2V0
Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAv
LyBXZSBkb24ndCBoYW5kbGUgdGhpcyB5ZXQuIDotKAogICAgICAgICBtX2lzVmFsaWQgPSBmYWxz
ZTsKLSAgICAgICAgbm9kZS5zZXRDYW5FeGl0KHRydWUpOworICAgICAgICBub2RlLT5zZXRDYW5F
eGl0KHRydWUpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgICAgICAKICAgICBjYXNl
IEFyaXRoU3ViOiB7Ci0gICAgICAgIEpTVmFsdWUgbGVmdCA9IGZvck5vZGUobm9kZS5jaGlsZDEo
KSkudmFsdWUoKTsKLSAgICAgICAgSlNWYWx1ZSByaWdodCA9IGZvck5vZGUobm9kZS5jaGlsZDIo
KSkudmFsdWUoKTsKKyAgICAgICAgSlNWYWx1ZSBsZWZ0ID0gZm9yTm9kZShub2RlLT5jaGlsZDEo
KSkudmFsdWUoKTsKKyAgICAgICAgSlNWYWx1ZSByaWdodCA9IGZvck5vZGUobm9kZS0+Y2hpbGQy
KCkpLnZhbHVlKCk7CiAgICAgICAgIGlmIChsZWZ0ICYmIHJpZ2h0ICYmIGxlZnQuaXNOdW1iZXIo
KSAmJiByaWdodC5pc051bWJlcigpCi0gICAgICAgICAgICAmJiB0cnlTZXRDb25zdGFudChub2Rl
SW5kZXgsIEpTVmFsdWUobGVmdC5hc051bWJlcigpIC0gcmlnaHQuYXNOdW1iZXIoKSkpKSB7Cisg
ICAgICAgICAgICAmJiB0cnlTZXRDb25zdGFudChub2RlLCBKU1ZhbHVlKGxlZnQuYXNOdW1iZXIo
KSAtIHJpZ2h0LmFzTnVtYmVyKCkpKSkgewogICAgICAgICAgICAgbV9mb3VuZENvbnN0YW50cyA9
IHRydWU7Ci0gICAgICAgICAgICBub2RlLnNldENhbkV4aXQoZmFsc2UpOworICAgICAgICAgICAg
bm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQog
ICAgICAgICBpZiAobV9ncmFwaC5hZGRTaG91bGRTcGVjdWxhdGVJbnRlZ2VyKG5vZGUpKSB7CiAg
ICAgICAgICAgICBzcGVjdWxhdGVJbnQzMkJpbmFyeSgKLSAgICAgICAgICAgICAgICBub2RlLCAh
bm9kZUNhblRydW5jYXRlSW50ZWdlcihub2RlLmFyaXRoTm9kZUZsYWdzKCkpKTsKLSAgICAgICAg
ICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoU3BlY0ludDMyKTsKKyAgICAgICAgICAgICAgICBu
b2RlLCAhbm9kZUNhblRydW5jYXRlSW50ZWdlcihub2RlLT5hcml0aE5vZGVGbGFncygpKSk7Cisg
ICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjSW50MzIpOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIH0KICAgICAgICAgc3BlY3VsYXRlTnVtYmVyQmluYXJ5KG5vZGUpOwotICAg
ICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFNwZWNEb3VibGUpOworICAgICAgICBmb3JOb2Rl
KG5vZGUpLnNldChTcGVjRG91YmxlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAK
ICAgICBjYXNlIEFyaXRoTmVnYXRlOiB7Ci0gICAgICAgIEpTVmFsdWUgY2hpbGQgPSBmb3JOb2Rl
KG5vZGUuY2hpbGQxKCkpLnZhbHVlKCk7CisgICAgICAgIEpTVmFsdWUgY2hpbGQgPSBmb3JOb2Rl
KG5vZGUtPmNoaWxkMSgpKS52YWx1ZSgpOwogICAgICAgICBpZiAoY2hpbGQgJiYgY2hpbGQuaXNO
dW1iZXIoKQotICAgICAgICAgICAgJiYgdHJ5U2V0Q29uc3RhbnQobm9kZUluZGV4LCBKU1ZhbHVl
KC1jaGlsZC5hc051bWJlcigpKSkpIHsKKyAgICAgICAgICAgICYmIHRyeVNldENvbnN0YW50KG5v
ZGUsIEpTVmFsdWUoLWNoaWxkLmFzTnVtYmVyKCkpKSkgewogICAgICAgICAgICAgbV9mb3VuZENv
bnN0YW50cyA9IHRydWU7Ci0gICAgICAgICAgICBub2RlLnNldENhbkV4aXQoZmFsc2UpOworICAg
ICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgfQogICAgICAgICBpZiAobV9ncmFwaC5uZWdhdGVTaG91bGRTcGVjdWxhdGVJbnRlZ2Vy
KG5vZGUpKSB7CiAgICAgICAgICAgICBzcGVjdWxhdGVJbnQzMlVuYXJ5KAotICAgICAgICAgICAg
ICAgIG5vZGUsICFub2RlQ2FuVHJ1bmNhdGVJbnRlZ2VyKG5vZGUuYXJpdGhOb2RlRmxhZ3MoKSkp
OwotICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChTcGVjSW50MzIpOworICAgICAg
ICAgICAgICAgIG5vZGUsICFub2RlQ2FuVHJ1bmNhdGVJbnRlZ2VyKG5vZGUtPmFyaXRoTm9kZUZs
YWdzKCkpKTsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNJbnQzMik7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBzcGVjdWxhdGVOdW1iZXJVbmFyeShu
b2RlKTsKLSAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChTcGVjRG91YmxlKTsKKyAgICAg
ICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0RvdWJsZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0K
ICAgICAgICAgCiAgICAgY2FzZSBBcml0aE11bDogewotICAgICAgICBKU1ZhbHVlIGxlZnQgPSBm
b3JOb2RlKG5vZGUuY2hpbGQxKCkpLnZhbHVlKCk7Ci0gICAgICAgIEpTVmFsdWUgcmlnaHQgPSBm
b3JOb2RlKG5vZGUuY2hpbGQyKCkpLnZhbHVlKCk7CisgICAgICAgIEpTVmFsdWUgbGVmdCA9IGZv
ck5vZGUobm9kZS0+Y2hpbGQxKCkpLnZhbHVlKCk7CisgICAgICAgIEpTVmFsdWUgcmlnaHQgPSBm
b3JOb2RlKG5vZGUtPmNoaWxkMigpKS52YWx1ZSgpOwogICAgICAgICBpZiAobGVmdCAmJiByaWdo
dCAmJiBsZWZ0LmlzTnVtYmVyKCkgJiYgcmlnaHQuaXNOdW1iZXIoKQotICAgICAgICAgICAgJiYg
dHJ5U2V0Q29uc3RhbnQobm9kZUluZGV4LCBKU1ZhbHVlKGxlZnQuYXNOdW1iZXIoKSAqIHJpZ2h0
LmFzTnVtYmVyKCkpKSkgeworICAgICAgICAgICAgJiYgdHJ5U2V0Q29uc3RhbnQobm9kZSwgSlNW
YWx1ZShsZWZ0LmFzTnVtYmVyKCkgKiByaWdodC5hc051bWJlcigpKSkpIHsKICAgICAgICAgICAg
IG1fZm91bmRDb25zdGFudHMgPSB0cnVlOwotICAgICAgICAgICAgbm9kZS5zZXRDYW5FeGl0KGZh
bHNlKTsKKyAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgaWYgKG1fZ3JhcGgubXVsU2hvdWxkU3BlY3VsYXRl
SW50ZWdlcihub2RlKSkgewogICAgICAgICAgICAgc3BlY3VsYXRlSW50MzJCaW5hcnkoCiAgICAg
ICAgICAgICAgICAgbm9kZSwKLSAgICAgICAgICAgICAgICAhbm9kZUNhblRydW5jYXRlSW50ZWdl
cihub2RlLmFyaXRoTm9kZUZsYWdzKCkpCi0gICAgICAgICAgICAgICAgfHwgIW5vZGVDYW5JZ25v
cmVOZWdhdGl2ZVplcm8obm9kZS5hcml0aE5vZGVGbGFncygpKSk7Ci0gICAgICAgICAgICBmb3JO
b2RlKG5vZGVJbmRleCkuc2V0KFNwZWNJbnQzMik7CisgICAgICAgICAgICAgICAgIW5vZGVDYW5U
cnVuY2F0ZUludGVnZXIobm9kZS0+YXJpdGhOb2RlRmxhZ3MoKSkKKyAgICAgICAgICAgICAgICB8
fCAhbm9kZUNhbklnbm9yZU5lZ2F0aXZlWmVybyhub2RlLT5hcml0aE5vZGVGbGFncygpKSk7Cisg
ICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjSW50MzIpOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIH0KICAgICAgICAgc3BlY3VsYXRlTnVtYmVyQmluYXJ5KG5vZGUpOwotICAg
ICAgICBpZiAoaXNSZWFsTnVtYmVyU3BlY3VsYXRpb24oZm9yTm9kZShub2RlLmNoaWxkMSgpKS5t
X3R5cGUpCi0gICAgICAgICAgICB8fCBpc1JlYWxOdW1iZXJTcGVjdWxhdGlvbihmb3JOb2RlKG5v
ZGUuY2hpbGQyKCkpLm1fdHlwZSkpCi0gICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0
KFNwZWNEb3VibGVSZWFsKTsKKyAgICAgICAgaWYgKGlzUmVhbE51bWJlclNwZWN1bGF0aW9uKGZv
ck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fdHlwZSkKKyAgICAgICAgICAgIHx8IGlzUmVhbE51bWJl
clNwZWN1bGF0aW9uKGZvck5vZGUobm9kZS0+Y2hpbGQyKCkpLm1fdHlwZSkpCisgICAgICAgICAg
ICBmb3JOb2RlKG5vZGUpLnNldChTcGVjRG91YmxlUmVhbCk7CiAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoU3BlY0RvdWJsZSk7CisgICAgICAgICAgICBm
b3JOb2RlKG5vZGUpLnNldChTcGVjRG91YmxlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAg
ICAgICAKQEAgLTU2MywyNCArNTYyLDI0IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1
bnNpZ25lZCBpbmQKICAgICBjYXNlIEFyaXRoTWluOgogICAgIGNhc2UgQXJpdGhNYXg6CiAgICAg
Y2FzZSBBcml0aE1vZDogewotICAgICAgICBKU1ZhbHVlIGxlZnQgPSBmb3JOb2RlKG5vZGUuY2hp
bGQxKCkpLnZhbHVlKCk7Ci0gICAgICAgIEpTVmFsdWUgcmlnaHQgPSBmb3JOb2RlKG5vZGUuY2hp
bGQyKCkpLnZhbHVlKCk7CisgICAgICAgIEpTVmFsdWUgbGVmdCA9IGZvck5vZGUobm9kZS0+Y2hp
bGQxKCkpLnZhbHVlKCk7CisgICAgICAgIEpTVmFsdWUgcmlnaHQgPSBmb3JOb2RlKG5vZGUtPmNo
aWxkMigpKS52YWx1ZSgpOwogICAgICAgICBpZiAobGVmdCAmJiByaWdodCAmJiBsZWZ0LmlzTnVt
YmVyKCkgJiYgcmlnaHQuaXNOdW1iZXIoKSkgewogICAgICAgICAgICAgZG91YmxlIGEgPSBsZWZ0
LmFzTnVtYmVyKCk7CiAgICAgICAgICAgICBkb3VibGUgYiA9IHJpZ2h0LmFzTnVtYmVyKCk7CiAg
ICAgICAgICAgICBib29sIGNvbnN0YW50V2FzU2V0OwogICAgICAgICAgICAgc3dpdGNoIChub2Rl
Lm9wKCkpIHsKICAgICAgICAgICAgIGNhc2UgQXJpdGhEaXY6Ci0gICAgICAgICAgICAgICAgY29u
c3RhbnRXYXNTZXQgPSB0cnlTZXRDb25zdGFudChub2RlSW5kZXgsIEpTVmFsdWUoYSAvIGIpKTsK
KyAgICAgICAgICAgICAgICBjb25zdGFudFdhc1NldCA9IHRyeVNldENvbnN0YW50KG5vZGUsIEpT
VmFsdWUoYSAvIGIpKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2Ug
QXJpdGhNaW46Ci0gICAgICAgICAgICAgICAgY29uc3RhbnRXYXNTZXQgPSB0cnlTZXRDb25zdGFu
dChub2RlSW5kZXgsIEpTVmFsdWUoYSA8IGIgPyBhIDogKGIgPD0gYSA/IGIgOiBhICsgYikpKTsK
KyAgICAgICAgICAgICAgICBjb25zdGFudFdhc1NldCA9IHRyeVNldENvbnN0YW50KG5vZGUsIEpT
VmFsdWUoYSA8IGIgPyBhIDogKGIgPD0gYSA/IGIgOiBhICsgYikpKTsKICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgIGNhc2UgQXJpdGhNYXg6Ci0gICAgICAgICAgICAgICAgY29u
c3RhbnRXYXNTZXQgPSB0cnlTZXRDb25zdGFudChub2RlSW5kZXgsIEpTVmFsdWUoYSA+IGIgPyBh
IDogKGIgPj0gYSA/IGIgOiBhICsgYikpKTsKKyAgICAgICAgICAgICAgICBjb25zdGFudFdhc1Nl
dCA9IHRyeVNldENvbnN0YW50KG5vZGUsIEpTVmFsdWUoYSA+IGIgPyBhIDogKGIgPj0gYSA/IGIg
OiBhICsgYikpKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgQXJp
dGhNb2Q6Ci0gICAgICAgICAgICAgICAgY29uc3RhbnRXYXNTZXQgPSB0cnlTZXRDb25zdGFudChu
b2RlSW5kZXgsIEpTVmFsdWUoZm1vZChhLCBiKSkpOworICAgICAgICAgICAgICAgIGNvbnN0YW50
V2FzU2V0ID0gdHJ5U2V0Q29uc3RhbnQobm9kZSwgSlNWYWx1ZShmbW9kKGEsIGIpKSk7CiAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC01ODksODQgKzU4OCw4NCBAQCBib29s
IEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICBpZiAoY29uc3RhbnRXYXNTZXQpIHsKICAgICAgICAgICAgICAgICBtX2ZvdW5kQ29u
c3RhbnRzID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBub2RlLnNldENhbkV4aXQoZmFsc2UpOwor
ICAgICAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIGlmIChOb2RlOjpzaG91
bGRTcGVjdWxhdGVJbnRlZ2VyRm9yQXJpdGhtZXRpYygKLSAgICAgICAgICAgICAgICBtX2dyYXBo
W25vZGUuY2hpbGQxKCldLCBtX2dyYXBoW25vZGUuY2hpbGQyKCldKQotICAgICAgICAgICAgJiYg
bm9kZS5jYW5TcGVjdWxhdGVJbnRlZ2VyKCkpIHsKKyAgICAgICAgICAgICAgICBub2RlLT5jaGls
ZDEoKS5ub2RlKCksIG5vZGUtPmNoaWxkMigpLm5vZGUoKSkKKyAgICAgICAgICAgICYmIG5vZGUt
PmNhblNwZWN1bGF0ZUludGVnZXIoKSkgewogICAgICAgICAgICAgc3BlY3VsYXRlSW50MzJCaW5h
cnkobm9kZSwgdHJ1ZSk7IC8vIGZvcmNpbmcgY2FuLWV4aXQsIHdoaWNoIGlzIGEgYml0IG9uIHRo
ZSBjb25zZXJ2YXRpdmUgc2lkZS4KLSAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQo
U3BlY0ludDMyKTsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNJbnQzMik7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBzcGVjdWxhdGVOdW1iZXJCaW5h
cnkobm9kZSk7Ci0gICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoU3BlY0RvdWJsZSk7Cisg
ICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNEb3VibGUpOwogICAgICAgICBicmVhazsKICAg
ICB9CiAgICAgICAgICAgICAKICAgICBjYXNlIEFyaXRoQWJzOiB7Ci0gICAgICAgIEpTVmFsdWUg
Y2hpbGQgPSBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLnZhbHVlKCk7CisgICAgICAgIEpTVmFsdWUg
Y2hpbGQgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS52YWx1ZSgpOwogICAgICAgICBpZiAoY2hp
bGQgJiYgY2hpbGQuaXNOdW1iZXIoKQotICAgICAgICAgICAgJiYgdHJ5U2V0Q29uc3RhbnQobm9k
ZUluZGV4LCBKU1ZhbHVlKGZhYnMoY2hpbGQuYXNOdW1iZXIoKSkpKSkgeworICAgICAgICAgICAg
JiYgdHJ5U2V0Q29uc3RhbnQobm9kZSwgSlNWYWx1ZShmYWJzKGNoaWxkLmFzTnVtYmVyKCkpKSkp
IHsKICAgICAgICAgICAgIG1fZm91bmRDb25zdGFudHMgPSB0cnVlOwotICAgICAgICAgICAgbm9k
ZS5zZXRDYW5FeGl0KGZhbHNlKTsKKyAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2Up
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKG1fZ3JhcGhbbm9k
ZS5jaGlsZDEoKV0uc2hvdWxkU3BlY3VsYXRlSW50ZWdlckZvckFyaXRobWV0aWMoKQotICAgICAg
ICAgICAgJiYgbm9kZS5jYW5TcGVjdWxhdGVJbnRlZ2VyKCkpIHsKKyAgICAgICAgaWYgKG5vZGUt
PmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyRm9yQXJpdGhtZXRpYygpCisgICAgICAg
ICAgICAmJiBub2RlLT5jYW5TcGVjdWxhdGVJbnRlZ2VyKCkpIHsKICAgICAgICAgICAgIHNwZWN1
bGF0ZUludDMyVW5hcnkobm9kZSwgdHJ1ZSk7Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRl
eCkuc2V0KFNwZWNJbnQzMik7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjSW50
MzIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgc3BlY3VsYXRlTnVt
YmVyVW5hcnkobm9kZSk7Ci0gICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoU3BlY0RvdWJs
ZSk7CisgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNEb3VibGUpOwogICAgICAgICBicmVh
azsKICAgICB9CiAgICAgICAgICAgICAKICAgICBjYXNlIEFyaXRoU3FydDogewotICAgICAgICBK
U1ZhbHVlIGNoaWxkID0gZm9yTm9kZShub2RlLmNoaWxkMSgpKS52YWx1ZSgpOworICAgICAgICBK
U1ZhbHVlIGNoaWxkID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSkudmFsdWUoKTsKICAgICAgICAg
aWYgKGNoaWxkICYmIGNoaWxkLmlzTnVtYmVyKCkKLSAgICAgICAgICAgICYmIHRyeVNldENvbnN0
YW50KG5vZGVJbmRleCwgSlNWYWx1ZShzcXJ0KGNoaWxkLmFzTnVtYmVyKCkpKSkpIHsKKyAgICAg
ICAgICAgICYmIHRyeVNldENvbnN0YW50KG5vZGUsIEpTVmFsdWUoc3FydChjaGlsZC5hc051bWJl
cigpKSkpKSB7CiAgICAgICAgICAgICBtX2ZvdW5kQ29uc3RhbnRzID0gdHJ1ZTsKLSAgICAgICAg
ICAgIG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7CisgICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0
KGZhbHNlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIHNwZWN1bGF0
ZU51bWJlclVuYXJ5KG5vZGUpOwotICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFNwZWNE
b3VibGUpOworICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjRG91YmxlKTsKICAgICAgICAg
YnJlYWs7CiAgICAgfQogICAgICAgICAgICAgCiAgICAgY2FzZSBMb2dpY2FsTm90OiB7CiAgICAg
ICAgIGJvb2wgZGlkU2V0Q29uc3RhbnQgPSBmYWxzZTsKLSAgICAgICAgc3dpdGNoIChib29sZWFu
UmVzdWx0KG5vZGUsIGZvck5vZGUobm9kZS5jaGlsZDEoKSkpKSB7CisgICAgICAgIHN3aXRjaCAo
Ym9vbGVhblJlc3VsdChub2RlLCBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKSkpIHsKICAgICAgICAg
Y2FzZSBEZWZpbml0ZWx5VHJ1ZToKLSAgICAgICAgICAgIGRpZFNldENvbnN0YW50ID0gdHJ5U2V0
Q29uc3RhbnQobm9kZUluZGV4LCBqc0Jvb2xlYW4oZmFsc2UpKTsKKyAgICAgICAgICAgIGRpZFNl
dENvbnN0YW50ID0gdHJ5U2V0Q29uc3RhbnQobm9kZSwganNCb29sZWFuKGZhbHNlKSk7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBEZWZpbml0ZWx5RmFsc2U6Ci0gICAgICAgICAg
ICBkaWRTZXRDb25zdGFudCA9IHRyeVNldENvbnN0YW50KG5vZGVJbmRleCwganNCb29sZWFuKHRy
dWUpKTsKKyAgICAgICAgICAgIGRpZFNldENvbnN0YW50ID0gdHJ5U2V0Q29uc3RhbnQobm9kZSwg
anNCb29sZWFuKHRydWUpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBkZWZhdWx0Ogog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgaWYgKGRpZFNldENvbnN0YW50
KSB7CiAgICAgICAgICAgICBtX2ZvdW5kQ29uc3RhbnRzID0gdHJ1ZTsKLSAgICAgICAgICAgIG5v
ZGUuc2V0Q2FuRXhpdChmYWxzZSk7CisgICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNl
KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIE5vZGUmIGNoaWxkID0g
bV9ncmFwaFtub2RlLmNoaWxkMSgpXTsKLSAgICAgICAgaWYgKGlzQm9vbGVhblNwZWN1bGF0aW9u
KGNoaWxkLnByZWRpY3Rpb24oKSkpCisgICAgICAgIE5vZGUqIGNoaWxkID0gbm9kZS0+Y2hpbGQx
KCkubm9kZSgpOworICAgICAgICBpZiAoaXNCb29sZWFuU3BlY3VsYXRpb24oY2hpbGQtPnByZWRp
Y3Rpb24oKSkpCiAgICAgICAgICAgICBzcGVjdWxhdGVCb29sZWFuVW5hcnkobm9kZSk7Ci0gICAg
ICAgIGVsc2UgaWYgKGNoaWxkLnNob3VsZFNwZWN1bGF0ZU5vblN0cmluZ0NlbGxPck90aGVyKCkp
IHsKLSAgICAgICAgICAgIG5vZGUuc2V0Q2FuRXhpdCh0cnVlKTsKLSAgICAgICAgICAgIGZvck5v
ZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKChTcGVjQ2VsbCAmIH5TcGVjU3RyaW5nKSB8IFNwZWNP
dGhlcik7Ci0gICAgICAgIH0gZWxzZSBpZiAoY2hpbGQuc2hvdWxkU3BlY3VsYXRlSW50ZWdlcigp
KQorICAgICAgICBlbHNlIGlmIChjaGlsZC0+c2hvdWxkU3BlY3VsYXRlTm9uU3RyaW5nQ2VsbE9y
T3RoZXIoKSkgeworICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKKyAgICAgICAg
ICAgIGZvck5vZGUoY2hpbGQpLmZpbHRlcigoU3BlY0NlbGwgJiB+U3BlY1N0cmluZykgfCBTcGVj
T3RoZXIpOworICAgICAgICB9IGVsc2UgaWYgKGNoaWxkLT5zaG91bGRTcGVjdWxhdGVJbnRlZ2Vy
KCkpCiAgICAgICAgICAgICBzcGVjdWxhdGVJbnQzMlVuYXJ5KG5vZGUpOwotICAgICAgICBlbHNl
IGlmIChjaGlsZC5zaG91bGRTcGVjdWxhdGVOdW1iZXIoKSkKKyAgICAgICAgZWxzZSBpZiAoY2hp
bGQtPnNob3VsZFNwZWN1bGF0ZU51bWJlcigpKQogICAgICAgICAgICAgc3BlY3VsYXRlTnVtYmVy
VW5hcnkobm9kZSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIG5vZGUuc2V0Q2FuRXhpdChm
YWxzZSk7Ci0gICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoU3BlY0Jvb2xlYW4pOworICAg
ICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CisgICAgICAgIGZvck5vZGUobm9kZSku
c2V0KFNwZWNCb29sZWFuKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKQEAgLTY3
NiwzNiArNjc1LDM2IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQK
ICAgICBjYXNlIElzU3RyaW5nOgogICAgIGNhc2UgSXNPYmplY3Q6CiAgICAgY2FzZSBJc0Z1bmN0
aW9uOiB7Ci0gICAgICAgIG5vZGUuc2V0Q2FuRXhpdChub2RlLm9wKCkgPT0gSXNVbmRlZmluZWQg
JiYgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdEZvcihub2RlLmNvZGVPcmlnaW4pLT5tYXNxdWVy
YWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2ludCgpLT5pc1N0aWxsVmFsaWQoKSk7Ci0gICAgICAgIEpT
VmFsdWUgY2hpbGQgPSBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLnZhbHVlKCk7CisgICAgICAgIG5v
ZGUtPnNldENhbkV4aXQobm9kZS0+b3AoKSA9PSBJc1VuZGVmaW5lZCAmJiBtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0Rm9yKG5vZGUtPmNvZGVPcmlnaW4pLT5tYXNxdWVyYWRlc0FzVW5kZWZpbmVk
V2F0Y2hwb2ludCgpLT5pc1N0aWxsVmFsaWQoKSk7CisgICAgICAgIEpTVmFsdWUgY2hpbGQgPSBm
b3JOb2RlKG5vZGUtPmNoaWxkMSgpKS52YWx1ZSgpOwogICAgICAgICBpZiAoY2hpbGQpIHsKICAg
ICAgICAgICAgIGJvb2wgY29uc3RhbnRXYXNTZXQ7Ci0gICAgICAgICAgICBzd2l0Y2ggKG5vZGUu
b3AoKSkgeworICAgICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CiAgICAgICAgICAgICBj
YXNlIElzVW5kZWZpbmVkOgotICAgICAgICAgICAgICAgIGlmIChtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0Rm9yKG5vZGUuY29kZU9yaWdpbiktPm1hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBv
aW50KCktPmlzU3RpbGxWYWxpZCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnN0YW50V2Fz
U2V0ID0gdHJ5U2V0Q29uc3RhbnQobm9kZUluZGV4LCBqc0Jvb2xlYW4oCisgICAgICAgICAgICAg
ICAgaWYgKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3RGb3Iobm9kZS0+Y29kZU9yaWdpbiktPm1h
c3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50KCktPmlzU3RpbGxWYWxpZCgpKSB7CisgICAg
ICAgICAgICAgICAgICAgIGNvbnN0YW50V2FzU2V0ID0gdHJ5U2V0Q29uc3RhbnQobm9kZSwganNC
b29sZWFuKAogICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGQuaXNDZWxsKCkKICAgICAgICAg
ICAgICAgICAgICAgICAgID8gZmFsc2UgCiAgICAgICAgICAgICAgICAgICAgICAgICA6IGNoaWxk
LmlzVW5kZWZpbmVkKCkpKTsKICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
ICAgICAgICBjb25zdGFudFdhc1NldCA9IHRyeVNldENvbnN0YW50KG5vZGVJbmRleCwganNCb29s
ZWFuKAorICAgICAgICAgICAgICAgICAgICBjb25zdGFudFdhc1NldCA9IHRyeVNldENvbnN0YW50
KG5vZGUsIGpzQm9vbGVhbigKICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkLmlzQ2VsbCgp
Ci0gICAgICAgICAgICAgICAgICAgICAgICA/IGNoaWxkLmFzQ2VsbCgpLT5zdHJ1Y3R1cmUoKS0+
bWFzcXVlcmFkZXNBc1VuZGVmaW5lZChtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0Rm9yKG5vZGUu
Y29kZU9yaWdpbikpCisgICAgICAgICAgICAgICAgICAgICAgICA/IGNoaWxkLmFzQ2VsbCgpLT5z
dHJ1Y3R1cmUoKS0+bWFzcXVlcmFkZXNBc1VuZGVmaW5lZChtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0Rm9yKG5vZGUtPmNvZGVPcmlnaW4pKQogICAgICAgICAgICAgICAgICAgICAgICAgOiBjaGls
ZC5pc1VuZGVmaW5lZCgpKSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgY2FzZSBJc0Jvb2xlYW46Ci0gICAgICAgICAgICAgICAgY29uc3Rh
bnRXYXNTZXQgPSB0cnlTZXRDb25zdGFudChub2RlSW5kZXgsIGpzQm9vbGVhbihjaGlsZC5pc0Jv
b2xlYW4oKSkpOworICAgICAgICAgICAgICAgIGNvbnN0YW50V2FzU2V0ID0gdHJ5U2V0Q29uc3Rh
bnQobm9kZSwganNCb29sZWFuKGNoaWxkLmlzQm9vbGVhbigpKSk7CiAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICBjYXNlIElzTnVtYmVyOgotICAgICAgICAgICAgICAgIGNvbnN0
YW50V2FzU2V0ID0gdHJ5U2V0Q29uc3RhbnQobm9kZUluZGV4LCBqc0Jvb2xlYW4oY2hpbGQuaXNO
dW1iZXIoKSkpOworICAgICAgICAgICAgICAgIGNvbnN0YW50V2FzU2V0ID0gdHJ5U2V0Q29uc3Rh
bnQobm9kZSwganNCb29sZWFuKGNoaWxkLmlzTnVtYmVyKCkpKTsKICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgIGNhc2UgSXNTdHJpbmc6Ci0gICAgICAgICAgICAgICAgY29uc3Rh
bnRXYXNTZXQgPSB0cnlTZXRDb25zdGFudChub2RlSW5kZXgsIGpzQm9vbGVhbihpc0pTU3RyaW5n
KGNoaWxkKSkpOworICAgICAgICAgICAgICAgIGNvbnN0YW50V2FzU2V0ID0gdHJ5U2V0Q29uc3Rh
bnQobm9kZSwganNCb29sZWFuKGlzSlNTdHJpbmcoY2hpbGQpKSk7CiAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICBjYXNlIElzT2JqZWN0OgogICAgICAgICAgICAgICAgIGlmIChj
aGlsZC5pc051bGwoKSB8fCAhY2hpbGQuaXNPYmplY3QoKSkgewotICAgICAgICAgICAgICAgICAg
ICBjb25zdGFudFdhc1NldCA9IHRyeVNldENvbnN0YW50KG5vZGVJbmRleCwganNCb29sZWFuKGNo
aWxkLmlzTnVsbCgpKSk7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0YW50V2FzU2V0ID0gdHJ5
U2V0Q29uc3RhbnQobm9kZSwganNCb29sZWFuKGNoaWxkLmlzTnVsbCgpKSk7CiAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGRlZmF1bHQ6
CkBAIC03MTgsNjEgKzcxNyw2MSBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWdu
ZWQgaW5kCiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAotICAgICAgICBmb3JOb2RlKG5vZGVJ
bmRleCkuc2V0KFNwZWNCb29sZWFuKTsKKyAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0Jv
b2xlYW4pOwogICAgICAgICBicmVhazsKICAgICB9CiAKICAgICBjYXNlIFR5cGVPZjogewogICAg
ICAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSBtX2NvZGVCbG9jay0+Z2xvYmFsRGF0YSgp
OwotICAgICAgICBKU1ZhbHVlIGNoaWxkID0gZm9yTm9kZShub2RlLmNoaWxkMSgpKS52YWx1ZSgp
OwotICAgICAgICBBYnN0cmFjdFZhbHVlJiBhYnN0cmFjdENoaWxkID0gZm9yTm9kZShub2RlLmNo
aWxkMSgpKTsKKyAgICAgICAgSlNWYWx1ZSBjaGlsZCA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkp
LnZhbHVlKCk7CisgICAgICAgIEFic3RyYWN0VmFsdWUmIGFic3RyYWN0Q2hpbGQgPSBmb3JOb2Rl
KG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgaWYgKGNoaWxkKSB7Ci0gICAgICAgICAgICBKU1Zh
bHVlIHR5cGVTdHJpbmcgPSBqc1R5cGVTdHJpbmdGb3JWYWx1ZSgqZ2xvYmFsRGF0YSwgbV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdEZvcihub2RlLmNvZGVPcmlnaW4pLCBjaGlsZCk7Ci0gICAgICAg
ICAgICBpZiAodHJ5U2V0Q29uc3RhbnQobm9kZUluZGV4LCB0eXBlU3RyaW5nKSkgeworICAgICAg
ICAgICAgSlNWYWx1ZSB0eXBlU3RyaW5nID0ganNUeXBlU3RyaW5nRm9yVmFsdWUoKmdsb2JhbERh
dGEsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3RGb3Iobm9kZS0+Y29kZU9yaWdpbiksIGNoaWxk
KTsKKyAgICAgICAgICAgIGlmICh0cnlTZXRDb25zdGFudChub2RlLCB0eXBlU3RyaW5nKSkgewog
ICAgICAgICAgICAgICAgIG1fZm91bmRDb25zdGFudHMgPSB0cnVlOwogICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgaWYgKGlzTnVtYmVyU3BlY3Vs
YXRpb24oYWJzdHJhY3RDaGlsZC5tX3R5cGUpKSB7Ci0gICAgICAgICAgICBpZiAodHJ5U2V0Q29u
c3RhbnQobm9kZUluZGV4LCBnbG9iYWxEYXRhLT5zbWFsbFN0cmluZ3MubnVtYmVyU3RyaW5nKCkp
KSB7Ci0gICAgICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY051
bWJlcik7CisgICAgICAgICAgICBpZiAodHJ5U2V0Q29uc3RhbnQobm9kZSwgZ2xvYmFsRGF0YS0+
c21hbGxTdHJpbmdzLm51bWJlclN0cmluZygpKSkgeworICAgICAgICAgICAgICAgIGZvck5vZGUo
bm9kZS0+Y2hpbGQxKCkpLmZpbHRlcihTcGVjTnVtYmVyKTsKICAgICAgICAgICAgICAgICBtX2Zv
dW5kQ29uc3RhbnRzID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
IH0KICAgICAgICAgfSBlbHNlIGlmIChpc1N0cmluZ1NwZWN1bGF0aW9uKGFic3RyYWN0Q2hpbGQu
bV90eXBlKSkgewotICAgICAgICAgICAgaWYgKHRyeVNldENvbnN0YW50KG5vZGVJbmRleCwgZ2xv
YmFsRGF0YS0+c21hbGxTdHJpbmdzLnN0cmluZ1N0cmluZygpKSkgewotICAgICAgICAgICAgICAg
IGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNTdHJpbmcpOworICAgICAgICAgICAg
aWYgKHRyeVNldENvbnN0YW50KG5vZGUsIGdsb2JhbERhdGEtPnNtYWxsU3RyaW5ncy5zdHJpbmdT
dHJpbmcoKSkpIHsKKyAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5maWx0
ZXIoU3BlY1N0cmluZyk7CiAgICAgICAgICAgICAgICAgbV9mb3VuZENvbnN0YW50cyA9IHRydWU7
CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSBp
ZiAoaXNGaW5hbE9iamVjdFNwZWN1bGF0aW9uKGFic3RyYWN0Q2hpbGQubV90eXBlKSB8fCBpc0Fy
cmF5U3BlY3VsYXRpb24oYWJzdHJhY3RDaGlsZC5tX3R5cGUpIHx8IGlzQXJndW1lbnRzU3BlY3Vs
YXRpb24oYWJzdHJhY3RDaGlsZC5tX3R5cGUpKSB7Ci0gICAgICAgICAgICBpZiAodHJ5U2V0Q29u
c3RhbnQobm9kZUluZGV4LCBnbG9iYWxEYXRhLT5zbWFsbFN0cmluZ3Mub2JqZWN0U3RyaW5nKCkp
KSB7Ci0gICAgICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY0Zp
bmFsT2JqZWN0IHwgU3BlY0FycmF5IHwgU3BlY0FyZ3VtZW50cyk7CisgICAgICAgICAgICBpZiAo
dHJ5U2V0Q29uc3RhbnQobm9kZSwgZ2xvYmFsRGF0YS0+c21hbGxTdHJpbmdzLm9iamVjdFN0cmlu
ZygpKSkgeworICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRlcihT
cGVjRmluYWxPYmplY3QgfCBTcGVjQXJyYXkgfCBTcGVjQXJndW1lbnRzKTsKICAgICAgICAgICAg
ICAgICBtX2ZvdW5kQ29uc3RhbnRzID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIGlmIChpc0Z1bmN0aW9uU3BlY3VsYXRpb24oYWJz
dHJhY3RDaGlsZC5tX3R5cGUpKSB7Ci0gICAgICAgICAgICBpZiAodHJ5U2V0Q29uc3RhbnQobm9k
ZUluZGV4LCBnbG9iYWxEYXRhLT5zbWFsbFN0cmluZ3MuZnVuY3Rpb25TdHJpbmcoKSkpIHsKLSAg
ICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjRnVuY3Rpb24p
OworICAgICAgICAgICAgaWYgKHRyeVNldENvbnN0YW50KG5vZGUsIGdsb2JhbERhdGEtPnNtYWxs
U3RyaW5ncy5mdW5jdGlvblN0cmluZygpKSkgeworICAgICAgICAgICAgICAgIGZvck5vZGUobm9k
ZS0+Y2hpbGQxKCkpLmZpbHRlcihTcGVjRnVuY3Rpb24pOwogICAgICAgICAgICAgICAgIG1fZm91
bmRDb25zdGFudHMgPSB0cnVlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
fQogICAgICAgICB9IGVsc2UgaWYgKGlzQm9vbGVhblNwZWN1bGF0aW9uKGFic3RyYWN0Q2hpbGQu
bV90eXBlKSkgewotICAgICAgICAgICAgaWYgKHRyeVNldENvbnN0YW50KG5vZGVJbmRleCwgZ2xv
YmFsRGF0YS0+c21hbGxTdHJpbmdzLmJvb2xlYW5TdHJpbmcoKSkpIHsKLSAgICAgICAgICAgICAg
ICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjQm9vbGVhbik7CisgICAgICAgICAg
ICBpZiAodHJ5U2V0Q29uc3RhbnQobm9kZSwgZ2xvYmFsRGF0YS0+c21hbGxTdHJpbmdzLmJvb2xl
YW5TdHJpbmcoKSkpIHsKKyAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5m
aWx0ZXIoU3BlY0Jvb2xlYW4pOwogICAgICAgICAgICAgICAgIG1fZm91bmRDb25zdGFudHMgPSB0
cnVlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgTm9kZSYgY2hpbGROb2RlID0gbV9ncmFwaFtub2RlLmNoaWxkMSgp
XTsKLSAgICAgICAgICAgIGlmIChpc0NlbGxTcGVjdWxhdGlvbihjaGlsZE5vZGUucHJlZGljdGlv
bigpKSkgewotICAgICAgICAgICAgICAgIGlmIChpc1N0cmluZ1NwZWN1bGF0aW9uKGNoaWxkTm9k
ZS5wcmVkaWN0aW9uKCkpKQotICAgICAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQx
KCkpLmZpbHRlcihTcGVjU3RyaW5nKTsKKyAgICAgICAgICAgIE5vZGUqIGNoaWxkTm9kZSA9IG5v
ZGUtPmNoaWxkMSgpLm5vZGUoKTsKKyAgICAgICAgICAgIGlmIChpc0NlbGxTcGVjdWxhdGlvbihj
aGlsZE5vZGUtPnByZWRpY3Rpb24oKSkpIHsKKyAgICAgICAgICAgICAgICBpZiAoaXNTdHJpbmdT
cGVjdWxhdGlvbihjaGlsZE5vZGUtPnByZWRpY3Rpb24oKSkpCisgICAgICAgICAgICAgICAgICAg
IGZvck5vZGUoY2hpbGROb2RlKS5maWx0ZXIoU3BlY1N0cmluZyk7CiAgICAgICAgICAgICAgICAg
ZWxzZQotICAgICAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihT
cGVjQ2VsbCk7Ci0gICAgICAgICAgICAgICAgbm9kZS5zZXRDYW5FeGl0KHRydWUpOworICAgICAg
ICAgICAgICAgICAgICBmb3JOb2RlKGNoaWxkTm9kZSkuZmlsdGVyKFNwZWNDZWxsKTsKKyAgICAg
ICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOwogICAgICAgICAgICAgfQogICAgICAg
ICB9Ci0gICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoU3BlY1N0cmluZyk7CisgICAgICAg
IGZvck5vZGUobm9kZSkuc2V0KFNwZWNTdHJpbmcpOwogICAgICAgICBicmVhazsKICAgICB9CiAg
ICAgICAgICAgICAKQEAgLTc4MywyNiArNzgyLDI2IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhl
Y3V0ZSh1bnNpZ25lZCBpbmQKICAgICBjYXNlIENvbXBhcmVFcTogewogICAgICAgICBib29sIGNv
bnN0YW50V2FzU2V0ID0gZmFsc2U7CiAKLSAgICAgICAgSlNWYWx1ZSBsZWZ0Q29uc3QgPSBmb3JO
b2RlKG5vZGUuY2hpbGQxKCkpLnZhbHVlKCk7Ci0gICAgICAgIEpTVmFsdWUgcmlnaHRDb25zdCA9
IGZvck5vZGUobm9kZS5jaGlsZDIoKSkudmFsdWUoKTsKKyAgICAgICAgSlNWYWx1ZSBsZWZ0Q29u
c3QgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS52YWx1ZSgpOworICAgICAgICBKU1ZhbHVlIHJp
Z2h0Q29uc3QgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMigpKS52YWx1ZSgpOwogICAgICAgICBpZiAo
bGVmdENvbnN0ICYmIHJpZ2h0Q29uc3QgJiYgbGVmdENvbnN0LmlzTnVtYmVyKCkgJiYgcmlnaHRD
b25zdC5pc051bWJlcigpKSB7CiAgICAgICAgICAgICBkb3VibGUgYSA9IGxlZnRDb25zdC5hc051
bWJlcigpOwogICAgICAgICAgICAgZG91YmxlIGIgPSByaWdodENvbnN0LmFzTnVtYmVyKCk7CiAg
ICAgICAgICAgICBzd2l0Y2ggKG5vZGUub3AoKSkgewogICAgICAgICAgICAgY2FzZSBDb21wYXJl
TGVzczoKLSAgICAgICAgICAgICAgICBjb25zdGFudFdhc1NldCA9IHRyeVNldENvbnN0YW50KG5v
ZGVJbmRleCwganNCb29sZWFuKGEgPCBiKSk7CisgICAgICAgICAgICAgICAgY29uc3RhbnRXYXNT
ZXQgPSB0cnlTZXRDb25zdGFudChub2RlLCBqc0Jvb2xlYW4oYSA8IGIpKTsKICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgQ29tcGFyZUxlc3NFcToKLSAgICAgICAgICAg
ICAgICBjb25zdGFudFdhc1NldCA9IHRyeVNldENvbnN0YW50KG5vZGVJbmRleCwganNCb29sZWFu
KGEgPD0gYikpOworICAgICAgICAgICAgICAgIGNvbnN0YW50V2FzU2V0ID0gdHJ5U2V0Q29uc3Rh
bnQobm9kZSwganNCb29sZWFuKGEgPD0gYikpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgY2FzZSBDb21wYXJlR3JlYXRlcjoKLSAgICAgICAgICAgICAgICBjb25zdGFudFdh
c1NldCA9IHRyeVNldENvbnN0YW50KG5vZGVJbmRleCwganNCb29sZWFuKGEgPiBiKSk7CisgICAg
ICAgICAgICAgICAgY29uc3RhbnRXYXNTZXQgPSB0cnlTZXRDb25zdGFudChub2RlLCBqc0Jvb2xl
YW4oYSA+IGIpKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgQ29t
cGFyZUdyZWF0ZXJFcToKLSAgICAgICAgICAgICAgICBjb25zdGFudFdhc1NldCA9IHRyeVNldENv
bnN0YW50KG5vZGVJbmRleCwganNCb29sZWFuKGEgPj0gYikpOworICAgICAgICAgICAgICAgIGNv
bnN0YW50V2FzU2V0ID0gdHJ5U2V0Q29uc3RhbnQobm9kZSwganNCb29sZWFuKGEgPj0gYikpOwog
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBDb21wYXJlRXE6Ci0gICAg
ICAgICAgICAgICAgY29uc3RhbnRXYXNTZXQgPSB0cnlTZXRDb25zdGFudChub2RlSW5kZXgsIGpz
Qm9vbGVhbihhID09IGIpKTsKKyAgICAgICAgICAgICAgICBjb25zdGFudFdhc1NldCA9IHRyeVNl
dENvbnN0YW50KG5vZGUsIGpzQm9vbGVhbihhID09IGIpKTsKICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKQEAgLTgxMSwyNCArODEwLDI0IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6
ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICAK
LSAgICAgICAgaWYgKCFjb25zdGFudFdhc1NldCAmJiBub2RlLm9wKCkgPT0gQ29tcGFyZUVxKSB7
Ci0gICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSBsZWZ0VHlwZSA9IGZvck5vZGUobm9kZS5jaGls
ZDEoKSkubV90eXBlOwotICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgcmlnaHRUeXBlID0gZm9y
Tm9kZShub2RlLmNoaWxkMigpKS5tX3R5cGU7CisgICAgICAgIGlmICghY29uc3RhbnRXYXNTZXQg
JiYgbm9kZS0+b3AoKSA9PSBDb21wYXJlRXEpIHsKKyAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBl
IGxlZnRUeXBlID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSkubV90eXBlOworICAgICAgICAgICAg
U3BlY3VsYXRlZFR5cGUgcmlnaHRUeXBlID0gZm9yTm9kZShub2RlLT5jaGlsZDIoKSkubV90eXBl
OwogICAgICAgICAgICAgaWYgKChpc0ludDMyU3BlY3VsYXRpb24obGVmdFR5cGUpICYmIGlzT3Ro
ZXJTcGVjdWxhdGlvbihyaWdodFR5cGUpKQogICAgICAgICAgICAgICAgIHx8IChpc090aGVyU3Bl
Y3VsYXRpb24obGVmdFR5cGUpICYmIGlzSW50MzJTcGVjdWxhdGlvbihyaWdodFR5cGUpKSkKLSAg
ICAgICAgICAgICAgICBjb25zdGFudFdhc1NldCA9IHRyeVNldENvbnN0YW50KG5vZGVJbmRleCwg
anNCb29sZWFuKGZhbHNlKSk7CisgICAgICAgICAgICAgICAgY29uc3RhbnRXYXNTZXQgPSB0cnlT
ZXRDb25zdGFudChub2RlLCBqc0Jvb2xlYW4oZmFsc2UpKTsKICAgICAgICAgfQogICAgICAgICAK
ICAgICAgICAgaWYgKGNvbnN0YW50V2FzU2V0KSB7CiAgICAgICAgICAgICBtX2ZvdW5kQ29uc3Rh
bnRzID0gdHJ1ZTsKLSAgICAgICAgICAgIG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7CisgICAgICAg
ICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9CiAgICAgICAgIAotICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFNwZWNCb29sZWFu
KTsKKyAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0Jvb2xlYW4pOwogICAgICAgICAKLSAg
ICAgICAgTm9kZSYgbGVmdCA9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV07Ci0gICAgICAgIE5vZGUm
IHJpZ2h0ID0gbV9ncmFwaFtub2RlLmNoaWxkMigpXTsKKyAgICAgICAgTm9kZSogbGVmdCA9IG5v
ZGUtPmNoaWxkMSgpLm5vZGUoKTsKKyAgICAgICAgTm9kZSogcmlnaHQgPSBub2RlLT5jaGlsZDIo
KS5ub2RlKCk7CiAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIGZpbHRlcjsKICAgICAgICAgU3BlY3Vs
YXRlZFR5cGVDaGVja2VyIGNoZWNrZXI7CiAgICAgICAgIGlmIChOb2RlOjpzaG91bGRTcGVjdWxh
dGVJbnRlZ2VyKGxlZnQsIHJpZ2h0KSkgewpAQCAtODM4LDEyMSArODM3LDExOSBAQCBib29sIEFi
c3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgICAgICBmaWx0ZXIgPSBT
cGVjTnVtYmVyOwogICAgICAgICAgICAgY2hlY2tlciA9IGlzTnVtYmVyU3BlY3VsYXRpb247CiAg
ICAgICAgIH0gZWxzZSBpZiAobm9kZS5vcCgpID09IENvbXBhcmVFcSkgewotICAgICAgICAgICAg
aWYgKChtX2dyYXBoLmlzQ29uc3RhbnQobm9kZS5jaGlsZDEoKS5pbmRleCgpKQotICAgICAgICAg
ICAgICAgICAmJiBtX2dyYXBoLnZhbHVlT2ZKU0NvbnN0YW50KG5vZGUuY2hpbGQxKCkuaW5kZXgo
KSkuaXNOdWxsKCkpCi0gICAgICAgICAgICAgICAgfHwgKG1fZ3JhcGguaXNDb25zdGFudChub2Rl
LmNoaWxkMigpLmluZGV4KCkpCi0gICAgICAgICAgICAgICAgICAgICYmIG1fZ3JhcGgudmFsdWVP
ZkpTQ29uc3RhbnQobm9kZS5jaGlsZDIoKS5pbmRleCgpKS5pc051bGwoKSkpIHsKKyAgICAgICAg
ICAgIGlmICgobV9ncmFwaC5pc0NvbnN0YW50KGxlZnQpCisgICAgICAgICAgICAgICAgICYmIG1f
Z3JhcGgudmFsdWVPZkpTQ29uc3RhbnQobGVmdCkuaXNOdWxsKCkpCisgICAgICAgICAgICAgICAg
fHwgKG1fZ3JhcGguaXNDb25zdGFudChyaWdodCkKKyAgICAgICAgICAgICAgICAgICAgJiYgbV9n
cmFwaC52YWx1ZU9mSlNDb25zdGFudChyaWdodCkuaXNOdWxsKCkpKSB7CiAgICAgICAgICAgICAg
ICAgLy8gV2UgY2FuIGV4aXQgaWYgd2UgaGF2ZW4ndCBmaXJlZCB0aGUgTWFzcXVlcmFkZXNBc1Vu
ZGVmaW5kIHdhdGNocG9pbnQgeWV0LgotICAgICAgICAgICAgICAgIG5vZGUuc2V0Q2FuRXhpdCht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0Rm9yKG5vZGUuY29kZU9yaWdpbiktPm1hc3F1ZXJhZGVz
QXNVbmRlZmluZWRXYXRjaHBvaW50KCktPmlzU3RpbGxWYWxpZCgpKTsKKyAgICAgICAgICAgICAg
ICBub2RlLT5zZXRDYW5FeGl0KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3RGb3Iobm9kZS0+Y29k
ZU9yaWdpbiktPm1hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50KCktPmlzU3RpbGxWYWxp
ZCgpKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IAotICAgICAgICAgICAgaWYgKGxlZnQuc2hvdWxkU3BlY3VsYXRlU3RyaW5nKCkgfHwgcmlnaHQu
c2hvdWxkU3BlY3VsYXRlU3RyaW5nKCkpIHsKLSAgICAgICAgICAgICAgICBub2RlLnNldENhbkV4
aXQoZmFsc2UpOworICAgICAgICAgICAgaWYgKGxlZnQtPnNob3VsZFNwZWN1bGF0ZVN0cmluZygp
IHx8IHJpZ2h0LT5zaG91bGRTcGVjdWxhdGVTdHJpbmcoKSkgeworICAgICAgICAgICAgICAgIG5v
ZGUtPnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgfSAKLSAgICAgICAgICAgIGlmIChsZWZ0LnNob3VsZFNwZWN1bGF0ZU5vblN0cmluZ0NlbGwo
KSAmJiByaWdodC5zaG91bGRTcGVjdWxhdGVOb25TdHJpbmdDZWxsT3JPdGhlcigpKSB7Ci0gICAg
ICAgICAgICAgICAgbm9kZS5zZXRDYW5FeGl0KHRydWUpOwotICAgICAgICAgICAgICAgIGZvck5v
ZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNDZWxsICYgflNwZWNTdHJpbmcpOwotICAgICAg
ICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKChTcGVjQ2VsbCAmIH5TcGVj
U3RyaW5nKSB8IFNwZWNPdGhlcik7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBpZiAobGVmdC5zaG91bGRTcGVjdWxhdGVOb25TdHJpbmdDZWxsT3JP
dGhlcigpICYmIHJpZ2h0LnNob3VsZFNwZWN1bGF0ZU5vblN0cmluZ0NlbGwoKSkgewotICAgICAg
ICAgICAgICAgIG5vZGUuc2V0Q2FuRXhpdCh0cnVlKTsKLSAgICAgICAgICAgICAgICBmb3JOb2Rl
KG5vZGUuY2hpbGQxKCkpLmZpbHRlcigoU3BlY0NlbGwgJiB+U3BlY1N0cmluZykgfCBTcGVjT3Ro
ZXIpOwotICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKFNwZWND
ZWxsICYgflNwZWNTdHJpbmcpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
fQotICAgICAgICAgICAgaWYgKGxlZnQuc2hvdWxkU3BlY3VsYXRlTm9uU3RyaW5nQ2VsbCgpICYm
IHJpZ2h0LnNob3VsZFNwZWN1bGF0ZU5vblN0cmluZ0NlbGwoKSkgewotICAgICAgICAgICAgICAg
IG5vZGUuc2V0Q2FuRXhpdCh0cnVlKTsKLSAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hp
bGQxKCkpLmZpbHRlcihTcGVjQ2VsbCAmIH5TcGVjU3RyaW5nKTsKLSAgICAgICAgICAgICAgICBm
b3JOb2RlKG5vZGUuY2hpbGQyKCkpLmZpbHRlcihTcGVjQ2VsbCAmIH5TcGVjU3RyaW5nKTsKKyAg
ICAgICAgICAgIGlmIChsZWZ0LT5zaG91bGRTcGVjdWxhdGVOb25TdHJpbmdDZWxsKCkgJiYgcmln
aHQtPnNob3VsZFNwZWN1bGF0ZU5vblN0cmluZ0NlbGxPck90aGVyKCkpIHsKKyAgICAgICAgICAg
ICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOworICAgICAgICAgICAgICAgIGZvck5vZGUobGVm
dCkuZmlsdGVyKFNwZWNDZWxsICYgflNwZWNTdHJpbmcpOworICAgICAgICAgICAgICAgIGZvck5v
ZGUocmlnaHQpLmZpbHRlcigoU3BlY0NlbGwgJiB+U3BlY1N0cmluZykgfCBTcGVjT3RoZXIpOwor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGxl
ZnQtPnNob3VsZFNwZWN1bGF0ZU5vblN0cmluZ0NlbGxPck90aGVyKCkgJiYgcmlnaHQtPnNob3Vs
ZFNwZWN1bGF0ZU5vblN0cmluZ0NlbGwoKSkgeworICAgICAgICAgICAgICAgIG5vZGUtPnNldENh
bkV4aXQodHJ1ZSk7CisgICAgICAgICAgICAgICAgZm9yTm9kZShsZWZ0KS5maWx0ZXIoKFNwZWND
ZWxsICYgflNwZWNTdHJpbmcpIHwgU3BlY090aGVyKTsKKyAgICAgICAgICAgICAgICBmb3JOb2Rl
KHJpZ2h0KS5maWx0ZXIoU3BlY0NlbGwgJiB+U3BlY1N0cmluZyk7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAobGVmdC0+c2hvdWxkU3BlY3Vs
YXRlTm9uU3RyaW5nQ2VsbCgpICYmIHJpZ2h0LT5zaG91bGRTcGVjdWxhdGVOb25TdHJpbmdDZWxs
KCkpIHsKKyAgICAgICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOworICAgICAgICAg
ICAgICAgIGZvck5vZGUobGVmdCkuZmlsdGVyKFNwZWNDZWxsICYgflNwZWNTdHJpbmcpOworICAg
ICAgICAgICAgICAgIGZvck5vZGUocmlnaHQpLmZpbHRlcihTcGVjQ2VsbCAmIH5TcGVjU3RyaW5n
KTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAKICAgICAgICAgICAg
IGZpbHRlciA9IFNwZWNUb3A7CiAgICAgICAgICAgICBjaGVja2VyID0gaXNBbnlTcGVjdWxhdGlv
bjsKLSAgICAgICAgICAgIGNsb2JiZXJXb3JsZChub2RlLmNvZGVPcmlnaW4sIGluZGV4SW5CbG9j
ayk7CisgICAgICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+Y29kZU9yaWdpbiwgaW5kZXhJbkJs
b2NrKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGZpbHRlciA9IFNwZWNUb3A7CiAg
ICAgICAgICAgICBjaGVja2VyID0gaXNBbnlTcGVjdWxhdGlvbjsKLSAgICAgICAgICAgIGNsb2Ji
ZXJXb3JsZChub2RlLmNvZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7CisgICAgICAgICAgICBjbG9i
YmVyV29ybGQobm9kZS0+Y29kZU9yaWdpbiwgaW5kZXhJbkJsb2NrKTsKICAgICAgICAgfQogICAg
ICAgICBub2RlLnNldENhbkV4aXQoCi0gICAgICAgICAgICAhY2hlY2tlcihmb3JOb2RlKG5vZGUu
Y2hpbGQxKCkpLm1fdHlwZSkKLSAgICAgICAgICAgIHx8ICFjaGVja2VyKGZvck5vZGUobm9kZS5j
aGlsZDIoKSkubV90eXBlKSk7Ci0gICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVy
KGZpbHRlcik7Ci0gICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKGZpbHRlcik7
CisgICAgICAgICAgICAhY2hlY2tlcihmb3JOb2RlKGxlZnQpLm1fdHlwZSkKKyAgICAgICAgICAg
IHx8ICFjaGVja2VyKGZvck5vZGUocmlnaHQpLm1fdHlwZSkpOworICAgICAgICBmb3JOb2RlKGxl
ZnQpLmZpbHRlcihmaWx0ZXIpOworICAgICAgICBmb3JOb2RlKHJpZ2h0KS5maWx0ZXIoZmlsdGVy
KTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAgICAgCiAgICAgY2FzZSBDb21wYXJl
U3RyaWN0RXE6IHsKLSAgICAgICAgSlNWYWx1ZSBsZWZ0ID0gZm9yTm9kZShub2RlLmNoaWxkMSgp
KS52YWx1ZSgpOwotICAgICAgICBKU1ZhbHVlIHJpZ2h0ID0gZm9yTm9kZShub2RlLmNoaWxkMigp
KS52YWx1ZSgpOworICAgICAgICBOb2RlKiBsZWZ0Tm9kZSA9IG5vZGUtPmNoaWxkMSgpLm5vZGUo
KTsKKyAgICAgICAgTm9kZSogcmlnaHROb2RlID0gbm9kZS0+Y2hpbGQyKCkubm9kZSgpOworICAg
ICAgICBKU1ZhbHVlIGxlZnQgPSBmb3JOb2RlKGxlZnROb2RlKS52YWx1ZSgpOworICAgICAgICBK
U1ZhbHVlIHJpZ2h0ID0gZm9yTm9kZShyaWdodE5vZGUpLnZhbHVlKCk7CiAgICAgICAgIGlmIChs
ZWZ0ICYmIHJpZ2h0ICYmIGxlZnQuaXNOdW1iZXIoKSAmJiByaWdodC5pc051bWJlcigpCi0gICAg
ICAgICAgICAmJiB0cnlTZXRDb25zdGFudChub2RlSW5kZXgsIGpzQm9vbGVhbihsZWZ0LmFzTnVt
YmVyKCkgPT0gcmlnaHQuYXNOdW1iZXIoKSkpKSB7CisgICAgICAgICAgICAmJiB0cnlTZXRDb25z
dGFudChub2RlLCBqc0Jvb2xlYW4obGVmdC5hc051bWJlcigpID09IHJpZ2h0LmFzTnVtYmVyKCkp
KSkgewogICAgICAgICAgICAgbV9mb3VuZENvbnN0YW50cyA9IHRydWU7CiAgICAgICAgICAgICBu
b2RlLnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAg
ICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChTcGVjQm9vbGVhbik7Ci0gICAgICAgIGlmICht
X2dyYXBoLmlzSlNDb25zdGFudChub2RlLmNoaWxkMSgpLmluZGV4KCkpKSB7Ci0gICAgICAgICAg
ICBKU1ZhbHVlIHZhbHVlID0gbV9ncmFwaC52YWx1ZU9mSlNDb25zdGFudChub2RlLmNoaWxkMSgp
LmluZGV4KCkpOworICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjQm9vbGVhbik7CisgICAg
ICAgIGlmIChtX2dyYXBoLmlzSlNDb25zdGFudChsZWZ0Tm9kZSkpIHsKKyAgICAgICAgICAgIEpT
VmFsdWUgdmFsdWUgPSBtX2dyYXBoLnZhbHVlT2ZKU0NvbnN0YW50KGxlZnROb2RlKTsKICAgICAg
ICAgICAgIGlmICghdmFsdWUuaXNOdW1iZXIoKSAmJiAhdmFsdWUuaXNTdHJpbmcoKSkgewotICAg
ICAgICAgICAgICAgIG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7CisgICAgICAgICAgICAgICAgbm9k
ZS0+c2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICB9CiAgICAgICAgIH0KLSAgICAgICAgaWYgKG1fZ3JhcGguaXNKU0NvbnN0YW50KG5vZGUuY2hp
bGQyKCkuaW5kZXgoKSkpIHsKLSAgICAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBtX2dyYXBoLnZh
bHVlT2ZKU0NvbnN0YW50KG5vZGUuY2hpbGQyKCkuaW5kZXgoKSk7CisgICAgICAgIGlmIChtX2dy
YXBoLmlzSlNDb25zdGFudChyaWdodE5vZGUpKSB7CisgICAgICAgICAgICBKU1ZhbHVlIHZhbHVl
ID0gbV9ncmFwaC52YWx1ZU9mSlNDb25zdGFudChyaWdodE5vZGUpOwogICAgICAgICAgICAgaWYg
KCF2YWx1ZS5pc051bWJlcigpICYmICF2YWx1ZS5pc1N0cmluZygpKSB7Ci0gICAgICAgICAgICAg
ICAgbm9kZS5zZXRDYW5FeGl0KGZhbHNlKTsKKyAgICAgICAgICAgICAgICBub2RlLT5zZXRDYW5F
eGl0KGZhbHNlKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAg
ICAgfQotICAgICAgICBpZiAoTm9kZTo6c2hvdWxkU3BlY3VsYXRlSW50ZWdlcigKLSAgICAgICAg
ICAgICAgICBtX2dyYXBoW25vZGUuY2hpbGQxKCldLCBtX2dyYXBoW25vZGUuY2hpbGQyKCldKSkg
eworICAgICAgICBpZiAoTm9kZTo6c2hvdWxkU3BlY3VsYXRlSW50ZWdlcihsZWZ0Tm9kZSwgcmln
aHROb2RlKSkgewogICAgICAgICAgICAgc3BlY3VsYXRlSW50MzJCaW5hcnkobm9kZSk7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICBpZiAoTm9kZTo6c2hvdWxkU3BlY3Vs
YXRlTnVtYmVyKAotICAgICAgICAgICAgICAgIG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0sIG1fZ3Jh
cGhbbm9kZS5jaGlsZDIoKV0pKSB7CisgICAgICAgIGlmIChOb2RlOjpzaG91bGRTcGVjdWxhdGVO
dW1iZXIobGVmdE5vZGUsIHJpZ2h0Tm9kZSkpIHsKICAgICAgICAgICAgIHNwZWN1bGF0ZU51bWJl
ckJpbmFyeShub2RlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIE5v
ZGUmIGxlZnROb2RlID0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXTsKLSAgICAgICAgTm9kZSYgcmln
aHROb2RlID0gbV9ncmFwaFtub2RlLmNoaWxkMigpXTsKLSAgICAgICAgaWYgKGxlZnROb2RlLnNo
b3VsZFNwZWN1bGF0ZVN0cmluZygpIHx8IHJpZ2h0Tm9kZS5zaG91bGRTcGVjdWxhdGVTdHJpbmco
KSkgewotICAgICAgICAgICAgbm9kZS5zZXRDYW5FeGl0KGZhbHNlKTsKKyAgICAgICAgaWYgKGxl
ZnROb2RlLT5zaG91bGRTcGVjdWxhdGVTdHJpbmcoKSB8fCByaWdodE5vZGUtPnNob3VsZFNwZWN1
bGF0ZVN0cmluZygpKSB7CisgICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIGlmIChsZWZ0Tm9kZS5zaG91bGRT
cGVjdWxhdGVOb25TdHJpbmdDZWxsKCkgJiYgcmlnaHROb2RlLnNob3VsZFNwZWN1bGF0ZU5vblN0
cmluZ0NlbGwoKSkgeworICAgICAgICBpZiAobGVmdE5vZGUtPnNob3VsZFNwZWN1bGF0ZU5vblN0
cmluZ0NlbGwoKSAmJiByaWdodE5vZGUtPnNob3VsZFNwZWN1bGF0ZU5vblN0cmluZ0NlbGwoKSkg
ewogICAgICAgICAgICAgbm9kZS5zZXRDYW5FeGl0KHRydWUpOwotICAgICAgICAgICAgZm9yTm9k
ZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoKFNwZWNDZWxsICYgflNwZWNTdHJpbmcpIHwgU3BlY090
aGVyKTsKLSAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKChTcGVjQ2Vs
bCAmIH5TcGVjU3RyaW5nKSB8IFNwZWNPdGhlcik7CisgICAgICAgICAgICBmb3JOb2RlKGxlZnRO
b2RlKS5maWx0ZXIoKFNwZWNDZWxsICYgflNwZWNTdHJpbmcpIHwgU3BlY090aGVyKTsKKyAgICAg
ICAgICAgIGZvck5vZGUocmlnaHROb2RlKS5maWx0ZXIoKFNwZWNDZWxsICYgflNwZWNTdHJpbmcp
IHwgU3BlY090aGVyKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIG5v
ZGUuc2V0Q2FuRXhpdChmYWxzZSk7CisgICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwog
ICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgU3RyaW5nQ2hhckNvZGVB
dDoKLSAgICAgICAgbm9kZS5zZXRDYW5FeGl0KHRydWUpOwotICAgICAgICBmb3JOb2RlKG5vZGUu
Y2hpbGQxKCkpLmZpbHRlcihTcGVjU3RyaW5nKTsKLSAgICAgICAgZm9yTm9kZShub2RlLmNoaWxk
MigpKS5maWx0ZXIoU3BlY0ludDMyKTsKLSAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChT
cGVjSW50MzIpOworICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOworICAgICAgICBmb3JO
b2RlKG5vZGUtPmNoaWxkMSgpKS5maWx0ZXIoU3BlY1N0cmluZyk7CisgICAgICAgIGZvck5vZGUo
bm9kZS0+Y2hpbGQyKCkpLmZpbHRlcihTcGVjSW50MzIpOworICAgICAgICBmb3JOb2RlKG5vZGUp
LnNldChTcGVjSW50MzIpOwogICAgICAgICBicmVhazsKICAgICAgICAgCiAgICAgY2FzZSBTdHJp
bmdDaGFyQXQ6Ci0gICAgICAgIG5vZGUuc2V0Q2FuRXhpdCh0cnVlKTsKLSAgICAgICAgZm9yTm9k
ZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY1N0cmluZyk7Ci0gICAgICAgIGZvck5vZGUobm9k
ZS5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7Ci0gICAgICAgIGZvck5vZGUobm9kZUluZGV4
KS5zZXQoU3BlY1N0cmluZyk7CisgICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7CisgICAg
ICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRlcihTcGVjU3RyaW5nKTsKKyAgICAgICAg
Zm9yTm9kZShub2RlLT5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7CisgICAgICAgIGZvck5v
ZGUobm9kZSkuc2V0KFNwZWNTdHJpbmcpOwogICAgICAgICBicmVhazsKICAgICAgICAgICAgIAog
ICAgIGNhc2UgR2V0QnlWYWw6IHsKLSAgICAgICAgbm9kZS5zZXRDYW5FeGl0KHRydWUpOwotICAg
ICAgICBzd2l0Y2ggKG5vZGUuYXJyYXlNb2RlKCkudHlwZSgpKSB7CisgICAgICAgIG5vZGUtPnNl
dENhbkV4aXQodHJ1ZSk7CisgICAgICAgIHN3aXRjaCAobm9kZS0+YXJyYXlNb2RlKCkudHlwZSgp
KSB7CiAgICAgICAgIGNhc2UgQXJyYXk6OlNlbGVjdFVzaW5nUHJlZGljdGlvbnM6CiAgICAgICAg
IGNhc2UgQXJyYXk6OlVucHJvZmlsZWQ6CiAgICAgICAgIGNhc2UgQXJyYXk6OlVuZGVjaWRlZDoK
QEAgLTk2Miw4MSArOTU5LDgxIEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25l
ZCBpbmQKICAgICAgICAgICAgIG1faXNWYWxpZCA9IGZhbHNlOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIGNhc2UgQXJyYXk6OkdlbmVyaWM6Ci0gICAgICAgICAgICBjbG9iYmVyV29ybGQo
bm9kZS5jb2RlT3JpZ2luLCBpbmRleEluQmxvY2spOwotICAgICAgICAgICAgZm9yTm9kZShub2Rl
SW5kZXgpLm1ha2VUb3AoKTsKKyAgICAgICAgICAgIGNsb2JiZXJXb3JsZChub2RlLT5jb2RlT3Jp
Z2luLCBpbmRleEluQmxvY2spOworICAgICAgICAgICAgZm9yTm9kZShub2RlKS5tYWtlVG9wKCk7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6U3RyaW5nOgotICAgICAg
ICAgICAgZm9yTm9kZShub2RlLmNoaWxkMigpKS5maWx0ZXIoU3BlY0ludDMyKTsKLSAgICAgICAg
ICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoU3BlY1N0cmluZyk7CisgICAgICAgICAgICBmb3JO
b2RlKG5vZGUtPmNoaWxkMigpKS5maWx0ZXIoU3BlY0ludDMyKTsKKyAgICAgICAgICAgIGZvck5v
ZGUobm9kZSkuc2V0KFNwZWNTdHJpbmcpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNh
c2UgQXJyYXk6OkFyZ3VtZW50czoKLSAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDIoKSku
ZmlsdGVyKFNwZWNJbnQzMik7Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkubWFrZVRv
cCgpOworICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQz
Mik7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLm1ha2VUb3AoKTsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICBjYXNlIEFycmF5OjpJbnQzMjoKLSAgICAgICAgICAgIGZvck5vZGUobm9k
ZS5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7Ci0gICAgICAgICAgICBpZiAobm9kZS5hcnJh
eU1vZGUoKS5pc091dE9mQm91bmRzKCkpIHsKLSAgICAgICAgICAgICAgICBjbG9iYmVyV29ybGQo
bm9kZS5jb2RlT3JpZ2luLCBpbmRleEluQmxvY2spOwotICAgICAgICAgICAgICAgIGZvck5vZGUo
bm9kZUluZGV4KS5tYWtlVG9wKCk7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMigp
KS5maWx0ZXIoU3BlY0ludDMyKTsKKyAgICAgICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS5p
c091dE9mQm91bmRzKCkpIHsKKyAgICAgICAgICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+Y29k
ZU9yaWdpbiwgaW5kZXhJbkJsb2NrKTsKKyAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLm1h
a2VUb3AoKTsKICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgIGZvck5vZGUobm9k
ZUluZGV4KS5zZXQoU3BlY0ludDMyKTsKKyAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNl
dChTcGVjSW50MzIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OkRv
dWJsZToKLSAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQz
Mik7Ci0gICAgICAgICAgICBpZiAobm9kZS5hcnJheU1vZGUoKS5pc091dE9mQm91bmRzKCkpIHsK
LSAgICAgICAgICAgICAgICBjbG9iYmVyV29ybGQobm9kZS5jb2RlT3JpZ2luLCBpbmRleEluQmxv
Y2spOwotICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5tYWtlVG9wKCk7Ci0gICAg
ICAgICAgICB9IGVsc2UgaWYgKG5vZGUuYXJyYXlNb2RlKCkuaXNTYW5lQ2hhaW4oKSkKLSAgICAg
ICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFNwZWNEb3VibGUpOworICAgICAgICAg
ICAgZm9yTm9kZShub2RlLT5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7CisgICAgICAgICAg
ICBpZiAobm9kZS0+YXJyYXlNb2RlKCkuaXNPdXRPZkJvdW5kcygpKSB7CisgICAgICAgICAgICAg
ICAgY2xvYmJlcldvcmxkKG5vZGUtPmNvZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7CisgICAgICAg
ICAgICAgICAgZm9yTm9kZShub2RlKS5tYWtlVG9wKCk7CisgICAgICAgICAgICB9IGVsc2UgaWYg
KG5vZGUtPmFycmF5TW9kZSgpLmlzU2FuZUNoYWluKCkpCisgICAgICAgICAgICAgICAgZm9yTm9k
ZShub2RlKS5zZXQoU3BlY0RvdWJsZSk7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAg
ICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChTcGVjRG91YmxlUmVhbCk7CisgICAgICAgICAgICAg
ICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0RvdWJsZVJlYWwpOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3VvdXM6CiAgICAgICAgIGNhc2UgQXJyYXk6OkFy
cmF5U3RvcmFnZToKICAgICAgICAgY2FzZSBBcnJheTo6U2xvd1B1dEFycmF5U3RvcmFnZToKLSAg
ICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7Ci0gICAg
ICAgICAgICBpZiAobm9kZS5hcnJheU1vZGUoKS5pc091dE9mQm91bmRzKCkpCi0gICAgICAgICAg
ICAgICAgY2xvYmJlcldvcmxkKG5vZGUuY29kZU9yaWdpbiwgaW5kZXhJbkJsb2NrKTsKLSAgICAg
ICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5tYWtlVG9wKCk7CisgICAgICAgICAgICBmb3JOb2Rl
KG5vZGUtPmNoaWxkMigpKS5maWx0ZXIoU3BlY0ludDMyKTsKKyAgICAgICAgICAgIGlmIChub2Rl
LT5hcnJheU1vZGUoKS5pc091dE9mQm91bmRzKCkpCisgICAgICAgICAgICAgICAgY2xvYmJlcldv
cmxkKG5vZGUtPmNvZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7CisgICAgICAgICAgICBmb3JOb2Rl
KG5vZGUpLm1ha2VUb3AoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEFycmF5
OjpJbnQ4QXJyYXk6Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQyKCkpLmZpbHRlcihT
cGVjSW50MzIpOwotICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChTcGVjSW50MzIp
OworICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7
CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjSW50MzIpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OkludDE2QXJyYXk6Ci0gICAgICAgICAgICBmb3JO
b2RlKG5vZGUuY2hpbGQyKCkpLmZpbHRlcihTcGVjSW50MzIpOwotICAgICAgICAgICAgZm9yTm9k
ZShub2RlSW5kZXgpLnNldChTcGVjSW50MzIpOworICAgICAgICAgICAgZm9yTm9kZShub2RlLT5j
aGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNl
dChTcGVjSW50MzIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6Oklu
dDMyQXJyYXk6Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQyKCkpLmZpbHRlcihTcGVj
SW50MzIpOwotICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChTcGVjSW50MzIpOwor
ICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7Cisg
ICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjSW50MzIpOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OlVpbnQ4QXJyYXk6Ci0gICAgICAgICAgICBmb3JOb2Rl
KG5vZGUuY2hpbGQyKCkpLmZpbHRlcihTcGVjSW50MzIpOwotICAgICAgICAgICAgZm9yTm9kZShu
b2RlSW5kZXgpLnNldChTcGVjSW50MzIpOworICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGls
ZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChT
cGVjSW50MzIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OlVpbnQ4
Q2xhbXBlZEFycmF5OgotICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMigpKS5maWx0ZXIo
U3BlY0ludDMyKTsKLSAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoU3BlY0ludDMy
KTsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQyKCkpLmZpbHRlcihTcGVjSW50MzIp
OworICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0ludDMyKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICBjYXNlIEFycmF5OjpVaW50MTZBcnJheToKLSAgICAgICAgICAgIGZv
ck5vZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7Ci0gICAgICAgICAgICBmb3JO
b2RlKG5vZGVJbmRleCkuc2V0KFNwZWNJbnQzMik7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUt
PmNoaWxkMigpKS5maWx0ZXIoU3BlY0ludDMyKTsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZSku
c2V0KFNwZWNJbnQzMik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6
VWludDMyQXJyYXk6Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQyKCkpLmZpbHRlcihT
cGVjSW50MzIpOwotICAgICAgICAgICAgaWYgKG5vZGUuc2hvdWxkU3BlY3VsYXRlSW50ZWdlcigp
KQotICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoU3BlY0ludDMyKTsKKyAg
ICAgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQyKCkpLmZpbHRlcihTcGVjSW50MzIpOworICAg
ICAgICAgICAgaWYgKG5vZGUtPnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKSkKKyAgICAgICAgICAg
ICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjSW50MzIpOwogICAgICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoU3BlY0RvdWJsZSk7CisgICAgICAg
ICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0RvdWJsZSk7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgY2FzZSBBcnJheTo6RmxvYXQzMkFycmF5OgotICAgICAgICAgICAgZm9yTm9k
ZShub2RlLmNoaWxkMigpKS5maWx0ZXIoU3BlY0ludDMyKTsKLSAgICAgICAgICAgIGZvck5vZGUo
bm9kZUluZGV4KS5zZXQoU3BlY0RvdWJsZSk7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNo
aWxkMigpKS5maWx0ZXIoU3BlY0ludDMyKTsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0
KFNwZWNEb3VibGUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OkZs
b2F0NjRBcnJheToKLSAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKFNw
ZWNJbnQzMik7Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFNwZWNEb3VibGUp
OworICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7
CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjRG91YmxlKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKQEAgLTEwNDcsNDMgKzEwNDQsNDMgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpl
eGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICAgICAgCiAgICAgY2FzZSBQdXRCeVZhbDoKICAg
ICBjYXNlIFB1dEJ5VmFsQWxpYXM6IHsKLSAgICAgICAgbm9kZS5zZXRDYW5FeGl0KHRydWUpOwor
ICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOwogICAgICAgICBFZGdlIGNoaWxkMSA9IG1f
Z3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCk7CiAgICAgICAgIEVkZ2UgY2hpbGQyID0gbV9ncmFw
aC52YXJBcmdDaGlsZChub2RlLCAxKTsKICAgICAgICAgRWRnZSBjaGlsZDMgPSBtX2dyYXBoLnZh
ckFyZ0NoaWxkKG5vZGUsIDIpOwotICAgICAgICBzd2l0Y2ggKG5vZGUuYXJyYXlNb2RlKCkubW9k
ZUZvclB1dCgpLnR5cGUoKSkgeworICAgICAgICBzd2l0Y2ggKG5vZGUtPmFycmF5TW9kZSgpLm1v
ZGVGb3JQdXQoKS50eXBlKCkpIHsKICAgICAgICAgY2FzZSBBcnJheTo6Rm9yY2VFeGl0OgogICAg
ICAgICAgICAgbV9pc1ZhbGlkID0gZmFsc2U7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
Y2FzZSBBcnJheTo6R2VuZXJpYzoKLSAgICAgICAgICAgIGNsb2JiZXJXb3JsZChub2RlLmNvZGVP
cmlnaW4sIGluZGV4SW5CbG9jayk7CisgICAgICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+Y29k
ZU9yaWdpbiwgaW5kZXhJbkJsb2NrKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNl
IEFycmF5OjpJbnQzMjoKICAgICAgICAgICAgIGZvck5vZGUoY2hpbGQxKS5maWx0ZXIoU3BlY0Nl
bGwpOwogICAgICAgICAgICAgZm9yTm9kZShjaGlsZDIpLmZpbHRlcihTcGVjSW50MzIpOwogICAg
ICAgICAgICAgZm9yTm9kZShjaGlsZDMpLmZpbHRlcihTcGVjSW50MzIpOwotICAgICAgICAgICAg
aWYgKG5vZGUuYXJyYXlNb2RlKCkuaXNPdXRPZkJvdW5kcygpKQotICAgICAgICAgICAgICAgIGNs
b2JiZXJXb3JsZChub2RlLmNvZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7CisgICAgICAgICAgICBp
ZiAobm9kZS0+YXJyYXlNb2RlKCkuaXNPdXRPZkJvdW5kcygpKQorICAgICAgICAgICAgICAgIGNs
b2JiZXJXb3JsZChub2RlLT5jb2RlT3JpZ2luLCBpbmRleEluQmxvY2spOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OkRvdWJsZToKICAgICAgICAgICAgIGZvck5vZGUo
Y2hpbGQxKS5maWx0ZXIoU3BlY0NlbGwpOwogICAgICAgICAgICAgZm9yTm9kZShjaGlsZDIpLmZp
bHRlcihTcGVjSW50MzIpOwogICAgICAgICAgICAgZm9yTm9kZShjaGlsZDMpLmZpbHRlcihTcGVj
UmVhbE51bWJlcik7Ci0gICAgICAgICAgICBpZiAobm9kZS5hcnJheU1vZGUoKS5pc091dE9mQm91
bmRzKCkpCi0gICAgICAgICAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUuY29kZU9yaWdpbiwgaW5k
ZXhJbkJsb2NrKTsKKyAgICAgICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS5pc091dE9mQm91
bmRzKCkpCisgICAgICAgICAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUtPmNvZGVPcmlnaW4sIGlu
ZGV4SW5CbG9jayk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6Q29u
dGlndW91czoKICAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlTdG9yYWdlOgogICAgICAgICAgICAg
Zm9yTm9kZShjaGlsZDEpLmZpbHRlcihTcGVjQ2VsbCk7CiAgICAgICAgICAgICBmb3JOb2RlKGNo
aWxkMikuZmlsdGVyKFNwZWNJbnQzMik7Ci0gICAgICAgICAgICBpZiAobm9kZS5hcnJheU1vZGUo
KS5pc091dE9mQm91bmRzKCkpCi0gICAgICAgICAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUuY29k
ZU9yaWdpbiwgaW5kZXhJbkJsb2NrKTsKKyAgICAgICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUo
KS5pc091dE9mQm91bmRzKCkpCisgICAgICAgICAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUtPmNv
ZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2Fz
ZSBBcnJheTo6U2xvd1B1dEFycmF5U3RvcmFnZToKICAgICAgICAgICAgIGZvck5vZGUoY2hpbGQx
KS5maWx0ZXIoU3BlY0NlbGwpOwogICAgICAgICAgICAgZm9yTm9kZShjaGlsZDIpLmZpbHRlcihT
cGVjSW50MzIpOwotICAgICAgICAgICAgaWYgKG5vZGUuYXJyYXlNb2RlKCkubWF5U3RvcmVUb0hv
bGUoKSkKLSAgICAgICAgICAgICAgICBjbG9iYmVyV29ybGQobm9kZS5jb2RlT3JpZ2luLCBpbmRl
eEluQmxvY2spOworICAgICAgICAgICAgaWYgKG5vZGUtPmFycmF5TW9kZSgpLm1heVN0b3JlVG9I
b2xlKCkpCisgICAgICAgICAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUtPmNvZGVPcmlnaW4sIGlu
ZGV4SW5CbG9jayk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6QXJn
dW1lbnRzOgogICAgICAgICAgICAgZm9yTm9kZShjaGlsZDEpLmZpbHRlcihTcGVjQ2VsbCk7CkBA
IC0xMDkyLDcgKzEwODksNyBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQg
aW5kCiAgICAgICAgIGNhc2UgQXJyYXk6OkludDhBcnJheToKICAgICAgICAgICAgIGZvck5vZGUo
Y2hpbGQxKS5maWx0ZXIoU3BlY0NlbGwpOwogICAgICAgICAgICAgZm9yTm9kZShjaGlsZDIpLmZp
bHRlcihTcGVjSW50MzIpOwotICAgICAgICAgICAgaWYgKG1fZ3JhcGhbY2hpbGQzXS5zaG91bGRT
cGVjdWxhdGVJbnRlZ2VyKCkpCisgICAgICAgICAgICBpZiAoY2hpbGQzLT5zaG91bGRTcGVjdWxh
dGVJbnRlZ2VyKCkpCiAgICAgICAgICAgICAgICAgZm9yTm9kZShjaGlsZDMpLmZpbHRlcihTcGVj
SW50MzIpOwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIGZvck5vZGUoY2hpbGQz
KS5maWx0ZXIoU3BlY051bWJlcik7CkBAIC0xMTAwLDcgKzEwOTcsNyBAQCBib29sIEFic3RyYWN0
U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgIGNhc2UgQXJyYXk6OkludDE2QXJy
YXk6CiAgICAgICAgICAgICBmb3JOb2RlKGNoaWxkMSkuZmlsdGVyKFNwZWNDZWxsKTsKICAgICAg
ICAgICAgIGZvck5vZGUoY2hpbGQyKS5maWx0ZXIoU3BlY0ludDMyKTsKLSAgICAgICAgICAgIGlm
IChtX2dyYXBoW2NoaWxkM10uc2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKQorICAgICAgICAgICAg
aWYgKGNoaWxkMy0+c2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKQogICAgICAgICAgICAgICAgIGZv
ck5vZGUoY2hpbGQzKS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGVsc2UKICAgICAg
ICAgICAgICAgICBmb3JOb2RlKGNoaWxkMykuZmlsdGVyKFNwZWNOdW1iZXIpOwpAQCAtMTEwOCw3
ICsxMTA1LDcgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAg
ICAgICBjYXNlIEFycmF5OjpJbnQzMkFycmF5OgogICAgICAgICAgICAgZm9yTm9kZShjaGlsZDEp
LmZpbHRlcihTcGVjQ2VsbCk7CiAgICAgICAgICAgICBmb3JOb2RlKGNoaWxkMikuZmlsdGVyKFNw
ZWNJbnQzMik7Ci0gICAgICAgICAgICBpZiAobV9ncmFwaFtjaGlsZDNdLnNob3VsZFNwZWN1bGF0
ZUludGVnZXIoKSkKKyAgICAgICAgICAgIGlmIChjaGlsZDMtPnNob3VsZFNwZWN1bGF0ZUludGVn
ZXIoKSkKICAgICAgICAgICAgICAgICBmb3JOb2RlKGNoaWxkMykuZmlsdGVyKFNwZWNJbnQzMik7
CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgZm9yTm9kZShjaGlsZDMpLmZpbHRl
cihTcGVjTnVtYmVyKTsKQEAgLTExMTYsNyArMTExMyw3IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6
ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgY2FzZSBBcnJheTo6VWludDhBcnJheToKICAg
ICAgICAgICAgIGZvck5vZGUoY2hpbGQxKS5maWx0ZXIoU3BlY0NlbGwpOwogICAgICAgICAgICAg
Zm9yTm9kZShjaGlsZDIpLmZpbHRlcihTcGVjSW50MzIpOwotICAgICAgICAgICAgaWYgKG1fZ3Jh
cGhbY2hpbGQzXS5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpCisgICAgICAgICAgICBpZiAoY2hp
bGQzLT5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpCiAgICAgICAgICAgICAgICAgZm9yTm9kZShj
aGlsZDMpLmZpbHRlcihTcGVjSW50MzIpOwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAg
ICAgIGZvck5vZGUoY2hpbGQzKS5maWx0ZXIoU3BlY051bWJlcik7CkBAIC0xMTI0LDcgKzExMjEs
NyBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgIGNh
c2UgQXJyYXk6OlVpbnQ4Q2xhbXBlZEFycmF5OgogICAgICAgICAgICAgZm9yTm9kZShjaGlsZDEp
LmZpbHRlcihTcGVjQ2VsbCk7CiAgICAgICAgICAgICBmb3JOb2RlKGNoaWxkMikuZmlsdGVyKFNw
ZWNJbnQzMik7Ci0gICAgICAgICAgICBpZiAobV9ncmFwaFtjaGlsZDNdLnNob3VsZFNwZWN1bGF0
ZUludGVnZXIoKSkKKyAgICAgICAgICAgIGlmIChjaGlsZDMtPnNob3VsZFNwZWN1bGF0ZUludGVn
ZXIoKSkKICAgICAgICAgICAgICAgICBmb3JOb2RlKGNoaWxkMykuZmlsdGVyKFNwZWNJbnQzMik7
CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgZm9yTm9kZShjaGlsZDMpLmZpbHRl
cihTcGVjTnVtYmVyKTsKQEAgLTExMzIsNyArMTEyOSw3IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6
ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgY2FzZSBBcnJheTo6VWludDE2QXJyYXk6CiAg
ICAgICAgICAgICBmb3JOb2RlKGNoaWxkMSkuZmlsdGVyKFNwZWNDZWxsKTsKICAgICAgICAgICAg
IGZvck5vZGUoY2hpbGQyKS5maWx0ZXIoU3BlY0ludDMyKTsKLSAgICAgICAgICAgIGlmIChtX2dy
YXBoW2NoaWxkM10uc2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKQorICAgICAgICAgICAgaWYgKGNo
aWxkMy0+c2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKQogICAgICAgICAgICAgICAgIGZvck5vZGUo
Y2hpbGQzKS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAg
ICAgICBmb3JOb2RlKGNoaWxkMykuZmlsdGVyKFNwZWNOdW1iZXIpOwpAQCAtMTE0MCw3ICsxMTM3
LDcgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICBj
YXNlIEFycmF5OjpVaW50MzJBcnJheToKICAgICAgICAgICAgIGZvck5vZGUoY2hpbGQxKS5maWx0
ZXIoU3BlY0NlbGwpOwogICAgICAgICAgICAgZm9yTm9kZShjaGlsZDIpLmZpbHRlcihTcGVjSW50
MzIpOwotICAgICAgICAgICAgaWYgKG1fZ3JhcGhbY2hpbGQzXS5zaG91bGRTcGVjdWxhdGVJbnRl
Z2VyKCkpCisgICAgICAgICAgICBpZiAoY2hpbGQzLT5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkp
CiAgICAgICAgICAgICAgICAgZm9yTm9kZShjaGlsZDMpLmZpbHRlcihTcGVjSW50MzIpOwogICAg
ICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIGZvck5vZGUoY2hpbGQzKS5maWx0ZXIoU3Bl
Y051bWJlcik7CkBAIC0xMTYzLDE2NiArMTE2MCwxODggQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpl
eGVjdXRlKHVuc2lnbmVkIGluZAogICAgIH0KICAgICAgICAgICAgIAogICAgIGNhc2UgQXJyYXlQ
dXNoOgotICAgICAgICBub2RlLnNldENhbkV4aXQodHJ1ZSk7Ci0gICAgICAgIHN3aXRjaCAobm9k
ZS5hcnJheU1vZGUoKS50eXBlKCkpIHsKKyAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsK
KyAgICAgICAgc3dpdGNoIChub2RlLT5hcnJheU1vZGUoKS50eXBlKCkpIHsKICAgICAgICAgY2Fz
ZSBBcnJheTo6SW50MzI6Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQyKCkpLmZpbHRl
cihTcGVjSW50MzIpOworICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDIoKSkuZmlsdGVy
KFNwZWNJbnQzMik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6RG91
YmxlOgotICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMigpKS5maWx0ZXIoU3BlY1JlYWxO
dW1iZXIpOworICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDIoKSkuZmlsdGVyKFNwZWNS
ZWFsTnVtYmVyKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBkZWZhdWx0OgogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUuY29kZU9y
aWdpbiwgaW5kZXhJbkJsb2NrKTsKLSAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChTcGVj
TnVtYmVyKTsKKyAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUtPmNvZGVPcmlnaW4sIGluZGV4SW5C
bG9jayk7CisgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNOdW1iZXIpOwogICAgICAgICBi
cmVhazsKICAgICAgICAgICAgIAogICAgIGNhc2UgQXJyYXlQb3A6Ci0gICAgICAgIG5vZGUuc2V0
Q2FuRXhpdCh0cnVlKTsKLSAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUuY29kZU9yaWdpbiwgaW5k
ZXhJbkJsb2NrKTsKLSAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLm1ha2VUb3AoKTsKKyAgICAg
ICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKKyAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUtPmNv
ZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7CisgICAgICAgIGZvck5vZGUobm9kZSkubWFrZVRvcCgp
OwogICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgIGNhc2UgUmVnRXhwRXhlYzoKICAg
ICBjYXNlIFJlZ0V4cFRlc3Q6Ci0gICAgICAgIG5vZGUuc2V0Q2FuRXhpdCgKLSAgICAgICAgICAg
ICFpc0NlbGxTcGVjdWxhdGlvbihmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkKLSAgICAg
ICAgICAgIHx8ICFpc0NlbGxTcGVjdWxhdGlvbihmb3JOb2RlKG5vZGUuY2hpbGQyKCkpLm1fdHlw
ZSkpOwotICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjQ2VsbCk7Ci0g
ICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKFNwZWNDZWxsKTsKLSAgICAgICAg
Zm9yTm9kZShub2RlSW5kZXgpLm1ha2VUb3AoKTsKKyAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCgK
KyAgICAgICAgICAgICFpc0NlbGxTcGVjdWxhdGlvbihmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5t
X3R5cGUpCisgICAgICAgICAgICB8fCAhaXNDZWxsU3BlY3VsYXRpb24oZm9yTm9kZShub2RlLT5j
aGlsZDIoKSkubV90eXBlKSk7CisgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRl
cihTcGVjQ2VsbCk7CisgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQyKCkpLmZpbHRlcihTcGVj
Q2VsbCk7CisgICAgICAgIGZvck5vZGUobm9kZSkubWFrZVRvcCgpOwogICAgICAgICBicmVhazsK
ICAgICAgICAgICAgIAogICAgIGNhc2UgSnVtcDoKLSAgICAgICAgbm9kZS5zZXRDYW5FeGl0KGZh
bHNlKTsKKyAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgCiAgICAgY2FzZSBCcmFuY2g6IHsKLSAgICAgICAgQm9vbGVhblJlc3VsdCBy
ZXN1bHQgPSBib29sZWFuUmVzdWx0KG5vZGUsIGZvck5vZGUobm9kZS5jaGlsZDEoKSkpOworICAg
ICAgICBOb2RlKiBjaGlsZCA9IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKKyAgICAgICAgQm9vbGVh
blJlc3VsdCByZXN1bHQgPSBib29sZWFuUmVzdWx0KG5vZGUsIGZvck5vZGUoY2hpbGQpKTsKICAg
ICAgICAgaWYgKHJlc3VsdCA9PSBEZWZpbml0ZWx5VHJ1ZSkgewogICAgICAgICAgICAgbV9icmFu
Y2hEaXJlY3Rpb24gPSBUYWtlVHJ1ZTsKLSAgICAgICAgICAgIG5vZGUuc2V0Q2FuRXhpdChmYWxz
ZSk7CisgICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICB9CiAgICAgICAgIGlmIChyZXN1bHQgPT0gRGVmaW5pdGVseUZhbHNlKSB7
CiAgICAgICAgICAgICBtX2JyYW5jaERpcmVjdGlvbiA9IFRha2VGYWxzZTsKLSAgICAgICAgICAg
IG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7CisgICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZh
bHNlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIC8vIEZJWE1FOiBU
aGUgYWJvdmUgaGFuZGxlcyB0aGUgdHJpdmlhbCBjYXNlcyBvZiBzcGFyc2UgY29uZGl0aW9uYWwK
ICAgICAgICAgLy8gY29uc3RhbnQgcHJvcGFnYXRpb24sIGJ1dCB3ZSBjYW4gZG8gYmV0dGVyOgog
ICAgICAgICAvLyBXZSBjYW4gc3BlY2lhbGl6ZSB0aGUgc291cmNlIHZhcmlhYmxlJ3MgdmFsdWUg
b24gZWFjaCBkaXJlY3Rpb24gb2YKICAgICAgICAgLy8gdGhlIGJyYW5jaC4KLSAgICAgICAgTm9k
ZSYgY2hpbGQgPSBtX2dyYXBoW25vZGUuY2hpbGQxKCldOwotICAgICAgICBpZiAoY2hpbGQuc2hv
dWxkU3BlY3VsYXRlQm9vbGVhbigpKQorICAgICAgICBpZiAoY2hpbGQtPnNob3VsZFNwZWN1bGF0
ZUJvb2xlYW4oKSkKICAgICAgICAgICAgIHNwZWN1bGF0ZUJvb2xlYW5VbmFyeShub2RlKTsKLSAg
ICAgICAgZWxzZSBpZiAoY2hpbGQuc2hvdWxkU3BlY3VsYXRlTm9uU3RyaW5nQ2VsbE9yT3RoZXIo
KSkgewotICAgICAgICAgICAgbm9kZS5zZXRDYW5FeGl0KHRydWUpOwotICAgICAgICAgICAgZm9y
Tm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoKFNwZWNDZWxsICYgflNwZWNTdHJpbmcpIHwgU3Bl
Y090aGVyKTsKLSAgICAgICAgfSBlbHNlIGlmIChjaGlsZC5zaG91bGRTcGVjdWxhdGVJbnRlZ2Vy
KCkpCisgICAgICAgIGVsc2UgaWYgKGNoaWxkLT5zaG91bGRTcGVjdWxhdGVOb25TdHJpbmdDZWxs
T3JPdGhlcigpKSB7CisgICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOworICAgICAg
ICAgICAgZm9yTm9kZShjaGlsZCkuZmlsdGVyKChTcGVjQ2VsbCAmIH5TcGVjU3RyaW5nKSB8IFNw
ZWNPdGhlcik7CisgICAgICAgIH0gZWxzZSBpZiAoY2hpbGQtPnNob3VsZFNwZWN1bGF0ZUludGVn
ZXIoKSkKICAgICAgICAgICAgIHNwZWN1bGF0ZUludDMyVW5hcnkobm9kZSk7Ci0gICAgICAgIGVs
c2UgaWYgKGNoaWxkLnNob3VsZFNwZWN1bGF0ZU51bWJlcigpKQorICAgICAgICBlbHNlIGlmIChj
aGlsZC0+c2hvdWxkU3BlY3VsYXRlTnVtYmVyKCkpCiAgICAgICAgICAgICBzcGVjdWxhdGVOdW1i
ZXJVbmFyeShub2RlKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgbm9kZS5zZXRDYW5FeGl0
KGZhbHNlKTsKKyAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICBt
X2JyYW5jaERpcmVjdGlvbiA9IFRha2VCb3RoOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAg
ICAgICAgICAKICAgICBjYXNlIFJldHVybjoKICAgICAgICAgbV9pc1ZhbGlkID0gZmFsc2U7Ci0g
ICAgICAgIG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7CisgICAgICAgIG5vZGUtPnNldENhbkV4aXQo
ZmFsc2UpOwogICAgICAgICBicmVhazsKICAgICAgICAgCiAgICAgY2FzZSBUaHJvdzoKICAgICBj
YXNlIFRocm93UmVmZXJlbmNlRXJyb3I6CiAgICAgICAgIG1faXNWYWxpZCA9IGZhbHNlOwotICAg
ICAgICBub2RlLnNldENhbkV4aXQodHJ1ZSk7CisgICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1
ZSk7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAgY2FzZSBUb1ByaW1pdGl2ZTog
ewotICAgICAgICBKU1ZhbHVlIGNoaWxkQ29uc3QgPSBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLnZh
bHVlKCk7Ci0gICAgICAgIGlmIChjaGlsZENvbnN0ICYmIGNoaWxkQ29uc3QuaXNOdW1iZXIoKSAm
JiB0cnlTZXRDb25zdGFudChub2RlSW5kZXgsIGNoaWxkQ29uc3QpKSB7CisgICAgICAgIE5vZGUq
IGNoaWxkID0gbm9kZS0+Y2hpbGQxKCkubm9kZSgpOworICAgICAgICAKKyAgICAgICAgSlNWYWx1
ZSBjaGlsZENvbnN0ID0gZm9yTm9kZShjaGlsZCkudmFsdWUoKTsKKyAgICAgICAgaWYgKGNoaWxk
Q29uc3QgJiYgY2hpbGRDb25zdC5pc051bWJlcigpICYmIHRyeVNldENvbnN0YW50KG5vZGUsIGNo
aWxkQ29uc3QpKSB7CiAgICAgICAgICAgICBtX2ZvdW5kQ29uc3RhbnRzID0gdHJ1ZTsKLSAgICAg
ICAgICAgIG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7CisgICAgICAgICAgICBub2RlLT5zZXRDYW5F
eGl0KGZhbHNlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIAotICAg
ICAgICBOb2RlJiBjaGlsZCA9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV07Ci0gICAgICAgIGlmIChj
aGlsZC5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpIHsKKyAgICAgICAgaWYgKGNoaWxkLT5zaG91
bGRTcGVjdWxhdGVJbnRlZ2VyKCkpIHsKICAgICAgICAgICAgIHNwZWN1bGF0ZUludDMyVW5hcnko
bm9kZSk7Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFNwZWNJbnQzMik7Cisg
ICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjSW50MzIpOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIH0KIAotICAgICAgICBBYnN0cmFjdFZhbHVlJiBzb3VyY2UgPSBmb3JOb2Rl
KG5vZGUuY2hpbGQxKCkpOwotICAgICAgICBBYnN0cmFjdFZhbHVlJiBkZXN0aW5hdGlvbiA9IGZv
ck5vZGUobm9kZUluZGV4KTsKLSAgICAgICAgICAgIAorICAgICAgICBBYnN0cmFjdFZhbHVlJiBz
b3VyY2UgPSBmb3JOb2RlKGNoaWxkKTsKKyAgICAgICAgQWJzdHJhY3RWYWx1ZSYgZGVzdGluYXRp
b24gPSBmb3JOb2RlKG5vZGUpOworICAgICAgICAKKyAgICAgICAgLy8gTkIuIFRoZSBtb3JlIGNh
bm9uaWNhbCB3YXkgb2Ygd3JpdGluZyB0aGlzIHdvdWxkIGhhdmUgYmVlbjoKKyAgICAgICAgLy8K
KyAgICAgICAgLy8gZGVzdGluYXRpb24gPSBzb3VyY2U7CisgICAgICAgIC8vIGlmIChkZXN0aW5h
dGlvbi5tX3R5cGUgJiAhKFNwZWNOdW1iZXIgfCBTcGVjU3RyaW5nIHwgU3BlY0Jvb2xlYW4pKSB7
CisgICAgICAgIC8vICAgICBkZXN0aW5hdGlvbi5maWx0ZXIoU3BlY051bWJlciB8IFNwZWNTdHJp
bmcgfCBTcGVjQm9vbGVhbik7CisgICAgICAgIC8vICAgICBBYnN0cmFjdFZhbHVlIHN0cmluZzsK
KyAgICAgICAgLy8gICAgIHN0cmluZy5zZXQoZ2xvYmFsRGF0YS0+c3RyaW5nU3RydWN0dXJlKTsK
KyAgICAgICAgLy8gICAgIGRlc3RpbmF0aW9uLm1lcmdlKHN0cmluZyk7CisgICAgICAgIC8vIH0K
KyAgICAgICAgLy8KKyAgICAgICAgLy8gVGhlIHJlYXNvbiB3aHkgdGhpcyB3b3VsZCwgaW4gbW9z
dCBvdGhlciBjYXNlcywgaGF2ZSBiZWVuIGJldHRlciBpcyB0aGF0CisgICAgICAgIC8vIHRoZW4g
ZGVzdGluYXRpb24gd291bGQgcHJlc2VydmUgYW55IG5vbi1TcGVjdWxhdGVkVHlwZSBrbm93bGVk
Z2Ugb2Ygc291cmNlLgorICAgICAgICAvLyBBcyBpdCBzdGFuZHMsIHRoZSBjb2RlIGJlbG93IGZv
cmdldHMgYW55IG5vbi1TcGVjdWxhdGVkVHlwZSBrbm93bGVkZ2UgdGhhdAorICAgICAgICAvLyBz
b3VyY2Ugd291bGQgaGF2ZSBoYWQuIEZvcnR1bmF0ZWx5LCB0aG91Z2gsIGZvciB0aGluZ3MgbGlr
ZSBzdHJpbmdzIGFuZAorICAgICAgICAvLyBudW1iZXJzIGFuZCBib29sZWFucywgd2UgZG9uJ3Qg
Y2FyZSBhYm91dCB0aGUgbm9uLVNwZWN1bGF0ZWRUeXBlIGtub3dlZGdlOgorICAgICAgICAvLyB0
aGUgc3RydWN0dXJlIHdvbid0IHRlbGwgdXMgYW55dGhpbmcgd2UgZG9uJ3QgYWxyZWFkeSBrbm93
LCBhbmQgbmVpdGhlcgorICAgICAgICAvLyB3aWxsIEFycmF5TW9kZXMuIEFuZCBpZiB0aGUgc291
cmNlIHdhcyBhIG1lYW5pbmdmdWwgY29uc3RhbnQgdGhlbiB3ZQorICAgICAgICAvLyB3b3VsZCBo
YXZlIGhhbmRsZWQgdGhhdCBhYm92ZS4gVW5mb3J0dW5hdGVseSwgdGhpcyBkb2VzIG1lYW4gdGhh
dAorICAgICAgICAvLyBUb1ByaW1pdGl2ZSB3aWxsIGN1cnJlbnRseSBmb3JnZXQgc3RyaW5nIGNv
bnN0YW50cy4gQnV0IHRoYXQncyBub3QgYSBiaWcKKyAgICAgICAgLy8gZGVhbCBzaW5jZSB3ZSBk
b24ndCBkbyBhbnkgb3B0aW1pemF0aW9uIG9uIHRob3NlIGN1cnJlbnRseS4KKyAgICAgICAgCiAg
ICAgICAgIFNwZWN1bGF0ZWRUeXBlIHR5cGUgPSBzb3VyY2UubV90eXBlOwogICAgICAgICBpZiAo
dHlwZSAmIH4oU3BlY051bWJlciB8IFNwZWNTdHJpbmcgfCBTcGVjQm9vbGVhbikpIHsKICAgICAg
ICAgICAgIHR5cGUgJj0gKFNwZWNOdW1iZXIgfCBTcGVjU3RyaW5nIHwgU3BlY0Jvb2xlYW4pOwog
ICAgICAgICAgICAgdHlwZSB8PSBTcGVjU3RyaW5nOwogICAgICAgICB9CiAgICAgICAgIGRlc3Rp
bmF0aW9uLnNldCh0eXBlKTsKLSAgICAgICAgbm9kZS5zZXRDYW5FeGl0KGZhbHNlKTsKKyAgICAg
ICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAg
ICAgICAgIAogICAgIGNhc2UgU3RyQ2F0OgotICAgICAgICBub2RlLnNldENhbkV4aXQoZmFsc2Up
OwotICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFNwZWNTdHJpbmcpOworICAgICAgICBu
b2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKKyAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY1N0
cmluZyk7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAgY2FzZSBOZXdBcnJheToK
LSAgICAgICAgbm9kZS5zZXRDYW5FeGl0KHRydWUpOwotICAgICAgICBmb3JOb2RlKG5vZGVJbmRl
eCkuc2V0KG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUuY29kZU9yaWdpbiktPmFycmF5U3Ry
dWN0dXJlRm9ySW5kZXhpbmdUeXBlRHVyaW5nQWxsb2NhdGlvbihub2RlLmluZGV4aW5nVHlwZSgp
KSk7CisgICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7CisgICAgICAgIGZvck5vZGUobm9k
ZUluZGV4KS5zZXQobV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+Y29kZU9yaWdpbiktPmFy
cmF5U3RydWN0dXJlRm9ySW5kZXhpbmdUeXBlRHVyaW5nQWxsb2NhdGlvbihub2RlLT5pbmRleGlu
Z1R5cGUoKSkpOwogICAgICAgICBtX2hhdmVTdHJ1Y3R1cmVzID0gdHJ1ZTsKICAgICAgICAgYnJl
YWs7CiAgICAgICAgIAogICAgIGNhc2UgTmV3QXJyYXlCdWZmZXI6Ci0gICAgICAgIG5vZGUuc2V0
Q2FuRXhpdCh0cnVlKTsKLSAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChtX2dyYXBoLmds
b2JhbE9iamVjdEZvcihub2RlLmNvZGVPcmlnaW4pLT5hcnJheVN0cnVjdHVyZUZvckluZGV4aW5n
VHlwZUR1cmluZ0FsbG9jYXRpb24obm9kZS5pbmRleGluZ1R5cGUoKSkpOworICAgICAgICBub2Rl
LT5zZXRDYW5FeGl0KHRydWUpOworICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChtX2dyYXBoLmds
b2JhbE9iamVjdEZvcihub2RlLT5jb2RlT3JpZ2luKS0+YXJyYXlTdHJ1Y3R1cmVGb3JJbmRleGlu
Z1R5cGVEdXJpbmdBbGxvY2F0aW9uKG5vZGUtPmluZGV4aW5nVHlwZSgpKSk7CiAgICAgICAgIG1f
aGF2ZVN0cnVjdHVyZXMgPSB0cnVlOwogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgTmV3QXJy
YXlXaXRoU2l6ZToKLSAgICAgICAgbm9kZS5zZXRDYW5FeGl0KHRydWUpOwotICAgICAgICBmb3JO
b2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjSW50MzIpOwotICAgICAgICBmb3JOb2RlKG5v
ZGVJbmRleCkuc2V0KFNwZWNBcnJheSk7CisgICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7
CisgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRlcihTcGVjSW50MzIpOworICAg
ICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjQXJyYXkpOwogICAgICAgICBtX2hhdmVTdHJ1Y3R1
cmVzID0gdHJ1ZTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICBjYXNlIE5ld1Jl
Z2V4cDoKLSAgICAgICAgbm9kZS5zZXRDYW5FeGl0KGZhbHNlKTsKLSAgICAgICAgZm9yTm9kZShu
b2RlSW5kZXgpLnNldChtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLmNvZGVPcmlnaW4pLT5y
ZWdFeHBTdHJ1Y3R1cmUoKSk7CisgICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOworICAg
ICAgICBmb3JOb2RlKG5vZGUpLnNldChtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5jb2Rl
T3JpZ2luKS0+cmVnRXhwU3RydWN0dXJlKCkpOwogICAgICAgICBtX2hhdmVTdHJ1Y3R1cmVzID0g
dHJ1ZTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICBjYXNlIENvbnZlcnRUaGlz
OiB7Ci0gICAgICAgIE5vZGUmIGNoaWxkID0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXTsKLSAgICAg
ICAgQWJzdHJhY3RWYWx1ZSYgc291cmNlID0gZm9yTm9kZShub2RlLmNoaWxkMSgpKTsKLSAgICAg
ICAgQWJzdHJhY3RWYWx1ZSYgZGVzdGluYXRpb24gPSBmb3JOb2RlKG5vZGVJbmRleCk7CisgICAg
ICAgIE5vZGUqIGNoaWxkID0gbm9kZS0+Y2hpbGQxKCkubm9kZSgpOworICAgICAgICBBYnN0cmFj
dFZhbHVlJiBzb3VyY2UgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgQWJzdHJh
Y3RWYWx1ZSYgZGVzdGluYXRpb24gPSBmb3JOb2RlKG5vZGUpOwogICAgICAgICAgICAgCiAgICAg
ICAgIGlmIChpc09iamVjdFNwZWN1bGF0aW9uKHNvdXJjZS5tX3R5cGUpKSB7CiAgICAgICAgICAg
ICAvLyBUaGlzIGlzIHRoZSBzaW1wbGUgY2FzZS4gV2UgYWxyZWFkeSBrbm93IHRoYXQgdGhlIHNv
dXJjZSBpcyBhbgogICAgICAgICAgICAgLy8gb2JqZWN0LCBzbyB0aGVyZSdzIG5vdGhpbmcgdG8g
ZG8uIEkgZG9uJ3QgdGhpbmsgdGhpcyBjYXNlIHdpbGwKICAgICAgICAgICAgIC8vIGJlIGhpdCwg
YnV0IHRoZW4gYWdhaW4sIHlvdSBuZXZlciBrbm93LgogICAgICAgICAgICAgZGVzdGluYXRpb24g
PSBzb3VyY2U7Ci0gICAgICAgICAgICBub2RlLnNldENhbkV4aXQoZmFsc2UpOworICAgICAgICAg
ICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgICAgICBtX2ZvdW5kQ29uc3RhbnRz
ID0gdHJ1ZTsgLy8gVGVsbCB0aGUgY29uc3RhbnQgZm9sZGVyIHRvIHR1cm4gdGhpcyBpbnRvIElk
ZW50aXR5LgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAg
IG5vZGUuc2V0Q2FuRXhpdCh0cnVlKTsKKyAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsK
ICAgICAgICAgCi0gICAgICAgIGlmIChpc090aGVyU3BlY3VsYXRpb24oY2hpbGQucHJlZGljdGlv
bigpKSkgeworICAgICAgICBpZiAoaXNPdGhlclNwZWN1bGF0aW9uKGNoaWxkLT5wcmVkaWN0aW9u
KCkpKSB7CiAgICAgICAgICAgICBzb3VyY2UuZmlsdGVyKFNwZWNPdGhlcik7CiAgICAgICAgICAg
ICBkZXN0aW5hdGlvbi5zZXQoU3BlY09iamVjdE90aGVyKTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBpZiAoaXNPYmplY3RTcGVjdWxhdGlvbihjaGls
ZC5wcmVkaWN0aW9uKCkpKSB7CisgICAgICAgIGlmIChpc09iamVjdFNwZWN1bGF0aW9uKGNoaWxk
LT5wcmVkaWN0aW9uKCkpKSB7CiAgICAgICAgICAgICBzb3VyY2UuZmlsdGVyKFNwZWNPYmplY3RN
YXNrKTsKICAgICAgICAgICAgIGRlc3RpbmF0aW9uID0gc291cmNlOwogICAgICAgICAgICAgYnJl
YWs7CkBAIC0xMzM0LDEwICsxMzUzLDEwIEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1
bnNpZ25lZCBpbmQKICAgICB9CiAKICAgICBjYXNlIENyZWF0ZVRoaXM6IHsKLSAgICAgICAgQWJz
dHJhY3RWYWx1ZSYgc291cmNlID0gZm9yTm9kZShub2RlLmNoaWxkMSgpKTsKLSAgICAgICAgQWJz
dHJhY3RWYWx1ZSYgZGVzdGluYXRpb24gPSBmb3JOb2RlKG5vZGVJbmRleCk7CisgICAgICAgIEFi
c3RyYWN0VmFsdWUmIHNvdXJjZSA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBB
YnN0cmFjdFZhbHVlJiBkZXN0aW5hdGlvbiA9IGZvck5vZGUobm9kZSk7CiAgICAgICAgIAotICAg
ICAgICBub2RlLnNldENhbkV4aXQoIWlzQ2VsbFNwZWN1bGF0aW9uKHNvdXJjZS5tX3R5cGUpKTsK
KyAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCghaXNDZWxsU3BlY3VsYXRpb24oc291cmNlLm1fdHlw
ZSkpOwogICAgICAgICAgICAgCiAgICAgICAgIHNvdXJjZS5maWx0ZXIoU3BlY0Z1bmN0aW9uKTsK
ICAgICAgICAgZGVzdGluYXRpb24uc2V0KFNwZWNGaW5hbE9iamVjdCk7CkBAIC0xMzQ1LDQxICsx
MzY0LDQxIEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICB9
CiAgICAgICAgIAogICAgIGNhc2UgSW5oZXJpdG9ySURXYXRjaHBvaW50OgotICAgICAgICBub2Rl
LnNldENhbkV4aXQodHJ1ZSk7CisgICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7CiAgICAg
ICAgIGJyZWFrOwogCiAgICAgY2FzZSBOZXdPYmplY3Q6Ci0gICAgICAgIG5vZGUuc2V0Q2FuRXhp
dChmYWxzZSk7Ci0gICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQobm9kZS5zdHJ1Y3R1cmUo
KSk7CisgICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOworICAgICAgICBmb3JOb2RlKG5v
ZGUpLnNldChub2RlLT5zdHJ1Y3R1cmUoKSk7CiAgICAgICAgIG1faGF2ZVN0cnVjdHVyZXMgPSB0
cnVlOwogICAgICAgICBicmVhazsKICAgICAgICAgCiAgICAgY2FzZSBDcmVhdGVBY3RpdmF0aW9u
OgotICAgICAgICBub2RlLnNldENhbkV4aXQoZmFsc2UpOwotICAgICAgICBmb3JOb2RlKG5vZGVJ
bmRleCkuc2V0KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3RGb3Iobm9kZS5jb2RlT3JpZ2luKS0+
YWN0aXZhdGlvblN0cnVjdHVyZSgpKTsKKyAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7
CisgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3RGb3Io
bm9kZS0+Y29kZU9yaWdpbiktPmFjdGl2YXRpb25TdHJ1Y3R1cmUoKSk7CiAgICAgICAgIG1faGF2
ZVN0cnVjdHVyZXMgPSB0cnVlOwogICAgICAgICBicmVhazsKICAgICAgICAgCiAgICAgY2FzZSBD
cmVhdGVBcmd1bWVudHM6Ci0gICAgICAgIG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7Ci0gICAgICAg
IGZvck5vZGUobm9kZUluZGV4KS5zZXQobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdEZvcihub2Rl
LmNvZGVPcmlnaW4pLT5hcmd1bWVudHNTdHJ1Y3R1cmUoKSk7CisgICAgICAgIG5vZGUtPnNldENh
bkV4aXQoZmFsc2UpOworICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0Rm9yKG5vZGUtPmNvZGVPcmlnaW4pLT5hcmd1bWVudHNTdHJ1Y3R1cmUoKSk7CiAg
ICAgICAgIG1faGF2ZVN0cnVjdHVyZXMgPSB0cnVlOwogICAgICAgICBicmVhazsKICAgICAgICAg
CiAgICAgY2FzZSBUZWFyT2ZmQWN0aXZhdGlvbjoKICAgICBjYXNlIFRlYXJPZmZBcmd1bWVudHM6
Ci0gICAgICAgIG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7CisgICAgICAgIG5vZGUtPnNldENhbkV4
aXQoZmFsc2UpOwogICAgICAgICAvLyBEb2VzIG5vdGhpbmcgdGhhdCBpcyB1c2VyLXZpc2libGUu
CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBDaGVja0FyZ3VtZW50c05vdENyZWF0ZWQ6CiAg
ICAgICAgIGlmIChpc0VtcHR5U3BlY3VsYXRpb24oCiAgICAgICAgICAgICAgICAgbV92YXJpYWJs
ZXMub3BlcmFuZCgKLSAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5hcmd1bWVudHNSZWdpc3Rl
ckZvcihub2RlLmNvZGVPcmlnaW4pKS5tX3R5cGUpKSB7Ci0gICAgICAgICAgICBub2RlLnNldENh
bkV4aXQoZmFsc2UpOworICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLmFyZ3VtZW50c1JlZ2lz
dGVyRm9yKG5vZGUtPmNvZGVPcmlnaW4pKS5tX3R5cGUpKSB7CisgICAgICAgICAgICBub2RlLT5z
ZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgICAgIG1fZm91bmRDb25zdGFudHMgPSB0cnVlOwog
ICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIG5vZGUuc2V0Q2FuRXhpdCh0cnVlKTsKKyAgICAg
ICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAK
ICAgICBjYXNlIEdldE15QXJndW1lbnRzTGVuZ3RoOgpAQCAtMTM4NywxMTEgKzE0MDYsMTExIEBA
IGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgLy8gdGhl
IGFyZ3VtZW50cyBhIGJpdC4gTm90ZSB0aGF0IHRoaXMgaXMgbm90IHN1ZmZpY2llbnQgdG8gZm9y
Y2UgY29uc3RhbnQgZm9sZGluZwogICAgICAgICAvLyBvZiBHZXRNeUFyZ3VtZW50c0xlbmd0aCwg
YmVjYXVzZSBHZXRNeUFyZ3VtZW50c0xlbmd0aCBpcyBhIGNsb2JiZXJpbmcgb3BlcmF0aW9uLgog
ICAgICAgICAvLyBXZSBwZXJmb3JtIGZ1cnRoZXIgb3B0aW1pemF0aW9ucyBvbiB0aGlzIGxhdGVy
IG9uLgotICAgICAgICBpZiAobm9kZS5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSkKLSAgICAg
ICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoanNOdW1iZXIobm9kZS5jb2RlT3JpZ2luLmlu
bGluZUNhbGxGcmFtZS0+YXJndW1lbnRzLnNpemUoKSAtIDEpKTsKKyAgICAgICAgaWYgKG5vZGUt
PmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKQorICAgICAgICAgICAgZm9yTm9kZShub2RlKS5z
ZXQoanNOdW1iZXIobm9kZS0+Y29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50cy5z
aXplKCkgLSAxKSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4
KS5zZXQoU3BlY0ludDMyKTsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNJbnQz
Mik7CiAgICAgICAgIG5vZGUuc2V0Q2FuRXhpdCgKICAgICAgICAgICAgICFpc0VtcHR5U3BlY3Vs
YXRpb24oCiAgICAgICAgICAgICAgICAgbV92YXJpYWJsZXMub3BlcmFuZCgKLSAgICAgICAgICAg
ICAgICAgICAgbV9ncmFwaC5hcmd1bWVudHNSZWdpc3RlckZvcihub2RlLmNvZGVPcmlnaW4pKS5t
X3R5cGUpKTsKKyAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5hcmd1bWVudHNSZWdpc3RlckZv
cihub2RlLT5jb2RlT3JpZ2luKSkubV90eXBlKSk7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAK
ICAgICBjYXNlIEdldE15QXJndW1lbnRzTGVuZ3RoU2FmZToKLSAgICAgICAgbm9kZS5zZXRDYW5F
eGl0KGZhbHNlKTsKKyAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgIC8v
IFRoaXMgcG90ZW50aWFsbHkgY2xvYmJlcnMgYWxsIHN0cnVjdHVyZXMgaWYgdGhlIGFyZ3VtZW50
cyBvYmplY3QgaGFkIGEgZ2V0dGVyCiAgICAgICAgIC8vIGluc3RhbGxlZCBvbiB0aGUgbGVuZ3Ro
IHByb3BlcnR5LgotICAgICAgICBjbG9iYmVyV29ybGQobm9kZS5jb2RlT3JpZ2luLCBpbmRleElu
QmxvY2spOworICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+Y29kZU9yaWdpbiwgaW5kZXhJbkJs
b2NrKTsKICAgICAgICAgLy8gV2UgY3VycmVudGx5IG1ha2Ugbm8gZ3VhcmFudGVlIGFib3V0IHdo
YXQgdGhpcyByZXR1cm5zIGJlY2F1c2UgaXQgZG9lcyBub3QKICAgICAgICAgLy8gc3BlY3VsYXRl
IHRoYXQgdGhlIGxlbmd0aCBwcm9wZXJ0eSBpcyBhY3R1YWxseSBhIGxlbmd0aC4KLSAgICAgICAg
Zm9yTm9kZShub2RlSW5kZXgpLm1ha2VUb3AoKTsKKyAgICAgICAgZm9yTm9kZShub2RlKS5tYWtl
VG9wKCk7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAKICAgICBjYXNlIEdldE15QXJndW1lbnRC
eVZhbDoKLSAgICAgICAgbm9kZS5zZXRDYW5FeGl0KHRydWUpOworICAgICAgICBub2RlLT5zZXRD
YW5FeGl0KHRydWUpOwogICAgICAgICAvLyBXZSBrbm93IHRoYXQgdGhpcyBleGVjdXRhYmxlIGRv
ZXMgbm90IGVzY2FwZSBpdHMgYXJndW1lbnRzLCBzbyB3ZSBjYW4gb3B0aW1pemUKICAgICAgICAg
Ly8gdGhlIGFyZ3VtZW50cyBhIGJpdC4gTm90ZSB0aGF0IHRoaXMgZW5kcyB1cCBiZWluZyBmdXJ0
aGVyIG9wdGltaXplZCBieSB0aGUKICAgICAgICAgLy8gQXJndW1lbnRzU2ltcGxpZmljYXRpb25Q
aGFzZS4KLSAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY0ludDMyKTsK
LSAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLm1ha2VUb3AoKTsKKyAgICAgICAgZm9yTm9kZShu
b2RlLT5jaGlsZDEoKSkuZmlsdGVyKFNwZWNJbnQzMik7CisgICAgICAgIGZvck5vZGUobm9kZSku
bWFrZVRvcCgpOwogICAgICAgICBicmVhazsKICAgICAgICAgCiAgICAgY2FzZSBHZXRNeUFyZ3Vt
ZW50QnlWYWxTYWZlOgotICAgICAgICBub2RlLnNldENhbkV4aXQodHJ1ZSk7CisgICAgICAgIG5v
ZGUtPnNldENhbkV4aXQodHJ1ZSk7CiAgICAgICAgIC8vIFRoaXMgcG90ZW50aWFsbHkgY2xvYmJl
cnMgYWxsIHN0cnVjdHVyZXMgaWYgdGhlIHByb3BlcnR5IHdlJ3JlIGFjY2Vzc2luZyBoYXMKICAg
ICAgICAgLy8gYSBnZXR0ZXIuIFdlIGRvbid0IHNwZWN1bGF0ZSBhZ2FpbnN0IHRoaXMuCi0gICAg
ICAgIGNsb2JiZXJXb3JsZChub2RlLmNvZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7CisgICAgICAg
IGNsb2JiZXJXb3JsZChub2RlLT5jb2RlT3JpZ2luLCBpbmRleEluQmxvY2spOwogICAgICAgICAv
LyBCdXQgd2UgZG8gc3BlY3VsYXRlIHRoYXQgdGhlIGluZGV4IGlzIGFuIGludGVnZXIuCi0gICAg
ICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNJbnQzMik7CisgICAgICAgIGZv
ck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRlcihTcGVjSW50MzIpOwogICAgICAgICAvLyBBbmQg
dGhlIHJlc3VsdCBpcyB1bmtub3duLgotICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkubWFrZVRv
cCgpOworICAgICAgICBmb3JOb2RlKG5vZGUpLm1ha2VUb3AoKTsKICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIAogICAgIGNhc2UgTmV3RnVuY3Rpb246CiAgICAgY2FzZSBOZXdGdW5jdGlvbkV4cHJl
c3Npb246CiAgICAgY2FzZSBOZXdGdW5jdGlvbk5vQ2hlY2s6Ci0gICAgICAgIG5vZGUuc2V0Q2Fu
RXhpdChmYWxzZSk7Ci0gICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdEZvcihub2RlLmNvZGVPcmlnaW4pLT5mdW5jdGlvblN0cnVjdHVyZSgpKTsK
KyAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CisgICAgICAgIGZvck5vZGUobm9kZSku
c2V0KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3RGb3Iobm9kZS0+Y29kZU9yaWdpbiktPmZ1bmN0
aW9uU3RydWN0dXJlKCkpOwogICAgICAgICBicmVhazsKICAgICAgICAgCiAgICAgY2FzZSBHZXRD
YWxsZWU6Ci0gICAgICAgIG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7Ci0gICAgICAgIGZvck5vZGUo
bm9kZUluZGV4KS5zZXQoU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChm
YWxzZSk7CisgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNGdW5jdGlvbik7CiAgICAgICAg
IGJyZWFrOwogICAgICAgICAKICAgICBjYXNlIFNldENhbGxlZToKICAgICBjYXNlIFNldE15U2Nv
cGU6Ci0gICAgICAgIG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7CisgICAgICAgIG5vZGUtPnNldENh
bkV4aXQoZmFsc2UpOwogICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgIGNhc2UgR2V0
U2NvcGU6IC8vIEZJWE1FOiBXZSBjb3VsZCBnZXQgcmlkIG9mIHRoZXNlIGlmIHdlIGtub3cgdGhh
dCB0aGUgSlNGdW5jdGlvbiBpcyBhIGNvbnN0YW50LiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTA2MjAyCiAgICAgY2FzZSBHZXRNeVNjb3BlOgogICAgIGNhc2UgU2tp
cFRvcFNjb3BlOgotICAgICAgICBub2RlLnNldENhbkV4aXQoZmFsc2UpOwotICAgICAgICBmb3JO
b2RlKG5vZGVJbmRleCkuc2V0KFNwZWNDZWxsT3RoZXIpOworICAgICAgICBub2RlLT5zZXRDYW5F
eGl0KGZhbHNlKTsKKyAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0NlbGxPdGhlcik7CiAg
ICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBTa2lwU2NvcGU6IHsKLSAgICAgICAgbm9kZS5zZXRD
YW5FeGl0KGZhbHNlKTsKLSAgICAgICAgSlNWYWx1ZSBjaGlsZCA9IGZvck5vZGUobm9kZS5jaGls
ZDEoKSkudmFsdWUoKTsKLSAgICAgICAgaWYgKGNoaWxkICYmIHRyeVNldENvbnN0YW50KG5vZGVJ
bmRleCwgSlNWYWx1ZShqc0Nhc3Q8SlNTY29wZSo+KGNoaWxkLmFzQ2VsbCgpKS0+bmV4dCgpKSkp
IHsKKyAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CisgICAgICAgIEpTVmFsdWUgY2hp
bGQgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS52YWx1ZSgpOworICAgICAgICBpZiAoY2hpbGQg
JiYgdHJ5U2V0Q29uc3RhbnQobm9kZSwgSlNWYWx1ZShqc0Nhc3Q8SlNTY29wZSo+KGNoaWxkLmFz
Q2VsbCgpKS0+bmV4dCgpKSkpIHsKICAgICAgICAgICAgIG1fZm91bmRDb25zdGFudHMgPSB0cnVl
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgZm9yTm9kZShub2RlSW5k
ZXgpLnNldChTcGVjQ2VsbE90aGVyKTsKKyAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0Nl
bGxPdGhlcik7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIAogICAgIGNhc2UgR2V0U2NvcGVSZWdp
c3RlcnM6Ci0gICAgICAgIG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7Ci0gICAgICAgIGZvck5vZGUo
bm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNDZWxsKTsKLSAgICAgICAgZm9yTm9kZShub2RlSW5k
ZXgpLmNsZWFyKCk7IC8vIFRoZSByZXN1bHQgaXMgbm90IGEgSlMgdmFsdWUuCisgICAgICAgIG5v
ZGUtPnNldENhbkV4aXQoZmFsc2UpOworICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5m
aWx0ZXIoU3BlY0NlbGwpOworICAgICAgICBmb3JOb2RlKG5vZGUpLmNsZWFyKCk7IC8vIFRoZSBy
ZXN1bHQgaXMgbm90IGEgSlMgdmFsdWUuCiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBHZXRT
Y29wZWRWYXI6Ci0gICAgICAgIG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7Ci0gICAgICAgIGZvck5v
ZGUobm9kZUluZGV4KS5tYWtlVG9wKCk7CisgICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2Up
OworICAgICAgICBmb3JOb2RlKG5vZGUpLm1ha2VUb3AoKTsKICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICAKICAgICBjYXNlIFB1dFNjb3BlZFZhcjoKLSAgICAgICAgbm9kZS5zZXRDYW5FeGl0
KGZhbHNlKTsKLSAgICAgICAgY2xvYmJlckNhcHR1cmVkVmFycyhub2RlLmNvZGVPcmlnaW4pOwor
ICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKKyAgICAgICAgY2xvYmJlckNhcHR1cmVk
VmFycyhub2RlLT5jb2RlT3JpZ2luKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAg
ICBjYXNlIEdldEJ5SWQ6CiAgICAgY2FzZSBHZXRCeUlkRmx1c2g6Ci0gICAgICAgIG5vZGUuc2V0
Q2FuRXhpdCh0cnVlKTsKLSAgICAgICAgaWYgKCFub2RlLnByZWRpY3Rpb24oKSkgeworICAgICAg
ICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOworICAgICAgICBpZiAoIW5vZGUtPnByZWRpY3Rpb24o
KSkgewogICAgICAgICAgICAgbV9pc1ZhbGlkID0gZmFsc2U7CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgfQotICAgICAgICBpZiAoaXNDZWxsU3BlY3VsYXRpb24obV9ncmFwaFtub2RlLmNo
aWxkMSgpXS5wcmVkaWN0aW9uKCkpKSB7Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQx
KCkpLmZpbHRlcihTcGVjQ2VsbCk7CisgICAgICAgIGlmIChpc0NlbGxTcGVjdWxhdGlvbihub2Rl
LT5jaGlsZDEoKS0+cHJlZGljdGlvbigpKSkgeworICAgICAgICAgICAgZm9yTm9kZShub2RlLT5j
aGlsZDEoKSkuZmlsdGVyKFNwZWNDZWxsKTsKIAotICAgICAgICAgICAgaWYgKFN0cnVjdHVyZSog
c3RydWN0dXJlID0gZm9yTm9kZShub2RlLmNoaWxkMSgpKS5iZXN0UHJvdmVuU3RydWN0dXJlKCkp
IHsKKyAgICAgICAgICAgIGlmIChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGZvck5vZGUobm9kZS0+
Y2hpbGQxKCkpLmJlc3RQcm92ZW5TdHJ1Y3R1cmUoKSkgewogICAgICAgICAgICAgICAgIEdldEJ5
SWRTdGF0dXMgc3RhdHVzID0gR2V0QnlJZFN0YXR1czo6Y29tcHV0ZUZvcigKICAgICAgICAgICAg
ICAgICAgICAgbV9ncmFwaC5tX2dsb2JhbERhdGEsIHN0cnVjdHVyZSwKLSAgICAgICAgICAgICAg
ICAgICAgbV9ncmFwaC5tX2NvZGVCbG9jay0+aWRlbnRpZmllcihub2RlLmlkZW50aWZpZXJOdW1i
ZXIoKSkpOworICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLm1fY29kZUJsb2NrLT5pZGVudGlm
aWVyKG5vZGUtPmlkZW50aWZpZXJOdW1iZXIoKSkpOwogICAgICAgICAgICAgICAgIGlmIChzdGF0
dXMuaXNTaW1wbGUoKSkgewogICAgICAgICAgICAgICAgICAgICAvLyBBc3NlcnQgdGhpbmdzIHRo
YXQgd2UgY2FuJ3QgaGFuZGxlIGFuZCB0aGF0IHRoZSBjb21wdXRlRm9yKCkgbWV0aG9kCiAgICAg
ICAgICAgICAgICAgICAgIC8vIGFib3ZlIHdvbid0IGJlIGFibGUgdG8gcmV0dXJuLgpAQCAtMTQ5
OSwyMyArMTUxOCwyMyBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5k
CiAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChzdGF0dXMuY2hhaW4oKS5pc0VtcHR5KCkpOwog
ICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXR1cy5zcGVj
aWZpY1ZhbHVlKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCku
c2V0KHN0YXR1cy5zcGVjaWZpY1ZhbHVlKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgZm9y
Tm9kZShub2RlKS5zZXQoc3RhdHVzLnNwZWNpZmljVmFsdWUoKSk7CiAgICAgICAgICAgICAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5tYWtl
VG9wKCk7Ci0gICAgICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVy
KHN0YXR1cy5zdHJ1Y3R1cmVTZXQoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBmb3JOb2Rl
KG5vZGUpLm1ha2VUb3AoKTsKKyAgICAgICAgICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGls
ZDEoKSkuZmlsdGVyKHN0YXR1cy5zdHJ1Y3R1cmVTZXQoKSk7CiAgICAgICAgICAgICAgICAgICAg
IAogICAgICAgICAgICAgICAgICAgICBtX2ZvdW5kQ29uc3RhbnRzID0gdHJ1ZTsKICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAg
ICAgICB9Ci0gICAgICAgIGNsb2JiZXJXb3JsZChub2RlLmNvZGVPcmlnaW4sIGluZGV4SW5CbG9j
ayk7Ci0gICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5tYWtlVG9wKCk7CisgICAgICAgIGNsb2Ji
ZXJXb3JsZChub2RlLT5jb2RlT3JpZ2luLCBpbmRleEluQmxvY2spOworICAgICAgICBmb3JOb2Rl
KG5vZGUpLm1ha2VUb3AoKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICBjYXNl
IEdldEFycmF5TGVuZ3RoOgotICAgICAgICBub2RlLnNldENhbkV4aXQodHJ1ZSk7IC8vIExpZXMs
IGJ1dCBpdCdzIHRydWUgZm9yIHRoZSBjb21tb24gY2FzZSBvZiBKU0FycmF5LCBzbyBpdCdzIGdv
b2QgZW5vdWdoLgotICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFNwZWNJbnQzMik7Cisg
ICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7IC8vIExpZXMsIGJ1dCBpdCdzIHRydWUgZm9y
IHRoZSBjb21tb24gY2FzZSBvZiBKU0FycmF5LCBzbyBpdCdzIGdvb2QgZW5vdWdoLgorICAgICAg
ICBmb3JOb2RlKG5vZGUpLnNldChTcGVjSW50MzIpOwogICAgICAgICBicmVhazsKICAgICAgICAg
CiAgICAgY2FzZSBDaGVja0V4ZWN1dGFibGU6IHsKQEAgLTE1MjMsMjMgKzE1NDIsMjMgQEAgYm9v
bCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICAvLyBtb3JlIHRo
b3JvdWdobHkuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDYyMDAK
ICAgICAgICAgLy8gRklYTUU6IFdlIGNvdWxkIGVsaW1pbmF0ZSB0aGVzZSBlbnRpcmVseSBpZiB3
ZSBrbm93IHRoZSBleGFjdCB2YWx1ZSB0aGF0IGZsb3dzIGludG8gdGhpcy4KICAgICAgICAgLy8g
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwNjIwMQotICAgICAgICBm
b3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjQ2VsbCk7Ci0gICAgICAgIG5vZGUuc2V0
Q2FuRXhpdCh0cnVlKTsKKyAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDEoKSkuZmlsdGVyKFNw
ZWNDZWxsKTsKKyAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKICAgICAgICAgYnJlYWs7
CiAgICAgfQogCiAgICAgY2FzZSBDaGVja1N0cnVjdHVyZToKICAgICBjYXNlIEZvcndhcmRDaGVj
a1N0cnVjdHVyZTogewogICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGJlIGFibGUgdG8gcHJv
cGFnYXRlIHRoZSBzdHJ1Y3R1cmUgc2V0cyBvZiBjb25zdGFudHMgKGkuZS4gcHJvdG90eXBlcyku
Ci0gICAgICAgIEFic3RyYWN0VmFsdWUmIHZhbHVlID0gZm9yTm9kZShub2RlLmNoaWxkMSgpKTsK
KyAgICAgICAgQWJzdHJhY3RWYWx1ZSYgdmFsdWUgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKTsK
ICAgICAgICAgLy8gSWYgdGhpcyBzdHJ1Y3R1cmUgY2hlY2sgaXMgYXR0ZW1wdGluZyB0byBwcm92
ZSBrbm93bGVkZ2UgYWxyZWFkeSBoZWxkIGluCiAgICAgICAgIC8vIHRoZSBmdXR1cmVQb3NzaWJs
ZVN0cnVjdHVyZSBzZXQgdGhlbiB0aGUgY29uc3RhbnQgZm9sZGluZyBwaGFzZSBzaG91bGQKICAg
ICAgICAgLy8gdHVybiB0aGlzIGludG8gYSB3YXRjaHBvaW50IGluc3RlYWQuCi0gICAgICAgIFN0
cnVjdHVyZVNldCYgc2V0ID0gbm9kZS5zdHJ1Y3R1cmVTZXQoKTsKKyAgICAgICAgU3RydWN0dXJl
U2V0JiBzZXQgPSBub2RlLT5zdHJ1Y3R1cmVTZXQoKTsKICAgICAgICAgaWYgKHZhbHVlLm1fZnV0
dXJlUG9zc2libGVTdHJ1Y3R1cmUuaXNTdWJzZXRPZihzZXQpCiAgICAgICAgICAgICB8fCB2YWx1
ZS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5pc1N1YnNldE9mKHNldCkpCiAgICAgICAgICAgICBt
X2ZvdW5kQ29uc3RhbnRzID0gdHJ1ZTsKLSAgICAgICAgbm9kZS5zZXRDYW5FeGl0KAorICAgICAg
ICBub2RlLT5zZXRDYW5FeGl0KAogICAgICAgICAgICAgIXZhbHVlLm1fY3VycmVudEtub3duU3Ry
dWN0dXJlLmlzU3Vic2V0T2Yoc2V0KQogICAgICAgICAgICAgfHwgIWlzQ2VsbFNwZWN1bGF0aW9u
KHZhbHVlLm1fdHlwZSkpOwogICAgICAgICB2YWx1ZS5maWx0ZXIoc2V0KTsKQEAgLTE1NDksNyAr
MTU2OCw3IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAg
ICAgCiAgICAgY2FzZSBTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludDoKICAgICBjYXNlIEZv
cndhcmRTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludDogewotICAgICAgICBBYnN0cmFjdFZh
bHVlJiB2YWx1ZSA9IGZvck5vZGUobm9kZS5jaGlsZDEoKSk7CisgICAgICAgIEFic3RyYWN0VmFs
dWUmIHZhbHVlID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSk7CiAKICAgICAgICAgLy8gSXQncyBv
bmx5IHZhbGlkIHRvIGlzc3VlIGEgc3RydWN0dXJlIHRyYW5zaXRpb24gd2F0Y2hwb2ludCBpZiB3
ZSBhbHJlYWR5CiAgICAgICAgIC8vIGtub3cgdGhhdCB0aGUgd2F0Y2hwb2ludCBjb3ZlcnMgYSBz
dXBlcnNldCBvZiB0aGUgc3RydWN0dXJlcyBrbm93biB0bwpAQCAtMTU1NywxNTQgKzE1NzYsMTU0
IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgLy8g
Q3VycmVudGx5LCB3ZSBvbmx5IGlzc3VlIHNpbmdsZXRvbiB3YXRjaHBvaW50cyAodGhhdCBjaGVj
ayBvbmUgc3RydWN0dXJlKQogICAgICAgICAvLyBhbmQgb3VyIGZ1dHVyZVBvc3NpYmxlU3RydWN0
dXJlIHNldCBjYW4gb25seSBjb250YWluIHplcm8sIG9uZSwgb3IgYW4KICAgICAgICAgLy8gaW5m
aW5pdHkgb2Ygc3RydWN0dXJlcy4KLSAgICAgICAgQVNTRVJUKHZhbHVlLm1fZnV0dXJlUG9zc2li
bGVTdHJ1Y3R1cmUuaXNTdWJzZXRPZihTdHJ1Y3R1cmVTZXQobm9kZS5zdHJ1Y3R1cmUoKSkpKTsK
KyAgICAgICAgQVNTRVJUKHZhbHVlLm1fZnV0dXJlUG9zc2libGVTdHJ1Y3R1cmUuaXNTdWJzZXRP
ZihTdHJ1Y3R1cmVTZXQobm9kZS0+c3RydWN0dXJlKCkpKSk7CiAgICAgICAgIAogICAgICAgICBB
U1NFUlQodmFsdWUuaXNDbGVhcigpIHx8IGlzQ2VsbFNwZWN1bGF0aW9uKHZhbHVlLm1fdHlwZSkp
OyAvLyBWYWx1ZSBjb3VsZCBiZSBjbGVhciBpZiB3ZSd2ZSBwcm92ZW4gbXVzdC1leGl0IGR1ZSB0
byBhIHNwZWN1bGF0aW9uIHN0YXRpY2FsbHkga25vd24gdG8gYmUgYmFkLgotICAgICAgICB2YWx1
ZS5maWx0ZXIobm9kZS5zdHJ1Y3R1cmUoKSk7CisgICAgICAgIHZhbHVlLmZpbHRlcihub2RlLT5z
dHJ1Y3R1cmUoKSk7CiAgICAgICAgIG1faGF2ZVN0cnVjdHVyZXMgPSB0cnVlOwotICAgICAgICBu
b2RlLnNldENhbkV4aXQodHJ1ZSk7CisgICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7CiAg
ICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgICAgIAogICAgIGNhc2UgUHV0U3RydWN0dXJl
OgogICAgIGNhc2UgUGhhbnRvbVB1dFN0cnVjdHVyZToKLSAgICAgICAgbm9kZS5zZXRDYW5FeGl0
KGZhbHNlKTsKLSAgICAgICAgaWYgKCFmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fY3VycmVudEtu
b3duU3RydWN0dXJlLmlzQ2xlYXIoKSkgeworICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNl
KTsKKyAgICAgICAgaWYgKCFmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX2N1cnJlbnRLbm93blN0
cnVjdHVyZS5pc0NsZWFyKCkpIHsKICAgICAgICAgICAgIGNsb2JiZXJTdHJ1Y3R1cmVzKGluZGV4
SW5CbG9jayk7Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLnNldChub2RlLnN0
cnVjdHVyZVRyYW5zaXRpb25EYXRhKCkubmV3U3RydWN0dXJlKTsKKyAgICAgICAgICAgIGZvck5v
ZGUobm9kZS0+Y2hpbGQxKCkpLnNldChub2RlLT5zdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSgpLm5l
d1N0cnVjdHVyZSk7CiAgICAgICAgICAgICBtX2hhdmVTdHJ1Y3R1cmVzID0gdHJ1ZTsKICAgICAg
ICAgfQogICAgICAgICBicmVhazsKICAgICBjYXNlIEdldEJ1dHRlcmZseToKICAgICBjYXNlIEFs
bG9jYXRlUHJvcGVydHlTdG9yYWdlOgogICAgIGNhc2UgUmVhbGxvY2F0ZVByb3BlcnR5U3RvcmFn
ZToKLSAgICAgICAgbm9kZS5zZXRDYW5FeGl0KCFpc0NlbGxTcGVjdWxhdGlvbihmb3JOb2RlKG5v
ZGUuY2hpbGQxKCkpLm1fdHlwZSkpOwotICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZp
bHRlcihTcGVjQ2VsbCk7Ci0gICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5jbGVhcigpOyAvLyBU
aGUgcmVzdWx0IGlzIG5vdCBhIEpTIHZhbHVlLgorICAgICAgICBub2RlLT5zZXRDYW5FeGl0KCFp
c0NlbGxTcGVjdWxhdGlvbihmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX3R5cGUpKTsKKyAgICAg
ICAgZm9yTm9kZShub2RlLT5jaGlsZDEoKSkuZmlsdGVyKFNwZWNDZWxsKTsKKyAgICAgICAgZm9y
Tm9kZShub2RlKS5jbGVhcigpOyAvLyBUaGUgcmVzdWx0IGlzIG5vdCBhIEpTIHZhbHVlLgogICAg
ICAgICBicmVhazsKICAgICBjYXNlIENoZWNrQXJyYXk6IHsKLSAgICAgICAgaWYgKG5vZGUuYXJy
YXlNb2RlKCkuYWxyZWFkeUNoZWNrZWQobV9ncmFwaCwgbm9kZSwgZm9yTm9kZShub2RlLmNoaWxk
MSgpKSkpIHsKKyAgICAgICAgaWYgKG5vZGUtPmFycmF5TW9kZSgpLmFscmVhZHlDaGVja2VkKG1f
Z3JhcGgsIG5vZGUsIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpKSkgewogICAgICAgICAgICAgbV9m
b3VuZENvbnN0YW50cyA9IHRydWU7Ci0gICAgICAgICAgICBub2RlLnNldENhbkV4aXQoZmFsc2Up
OworICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgfQotICAgICAgICBub2RlLnNldENhbkV4aXQodHJ1ZSk7IC8vIExpZXMsIGJ1
dCB0aGlzIGlzIGZvbGxvd2VkIGJ5IG9wZXJhdGlvbnMgKGxpa2UgR2V0QnlWYWwpIHRoYXQgYWx3
YXlzIGV4aXQsIHNvIHRoZXJlIGlzIG5vIHBvaW50IGluIHVzIHRyeWluZyB0byBiZSBjbGV2ZXIg
aGVyZS4KLSAgICAgICAgc3dpdGNoIChub2RlLmFycmF5TW9kZSgpLnR5cGUoKSkgeworICAgICAg
ICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOyAvLyBMaWVzLCBidXQgdGhpcyBpcyBmb2xsb3dlZCBi
eSBvcGVyYXRpb25zIChsaWtlIEdldEJ5VmFsKSB0aGF0IGFsd2F5cyBleGl0LCBzbyB0aGVyZSBp
cyBubyBwb2ludCBpbiB1cyB0cnlpbmcgdG8gYmUgY2xldmVyIGhlcmUuCisgICAgICAgIHN3aXRj
aCAobm9kZS0+YXJyYXlNb2RlKCkudHlwZSgpKSB7CiAgICAgICAgIGNhc2UgQXJyYXk6OlN0cmlu
ZzoKLSAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNTdHJpbmcp
OworICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDEoKSkuZmlsdGVyKFNwZWNTdHJpbmcp
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OkludDMyOgogICAgICAg
ICBjYXNlIEFycmF5OjpEb3VibGU6CiAgICAgICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3VvdXM6CiAg
ICAgICAgIGNhc2UgQXJyYXk6OkFycmF5U3RvcmFnZToKICAgICAgICAgY2FzZSBBcnJheTo6U2xv
d1B1dEFycmF5U3RvcmFnZToKLSAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmls
dGVyKFNwZWNDZWxsKTsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRl
cihTcGVjQ2VsbCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6QXJn
dW1lbnRzOgotICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY0Fy
Z3VtZW50cyk7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5maWx0ZXIoU3Bl
Y0FyZ3VtZW50cyk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6SW50
OEFycmF5OgotICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY0lu
dDhBcnJheSk7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5maWx0ZXIoU3Bl
Y0ludDhBcnJheSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6SW50
MTZBcnJheToKLSAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNJ
bnQxNkFycmF5KTsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRlcihT
cGVjSW50MTZBcnJheSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6
SW50MzJBcnJheToKLSAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNw
ZWNJbnQzMkFycmF5KTsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRl
cihTcGVjSW50MzJBcnJheSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBBcnJh
eTo6VWludDhBcnJheToKLSAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVy
KFNwZWNVaW50OEFycmF5KTsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZp
bHRlcihTcGVjVWludDhBcnJheSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBB
cnJheTo6VWludDhDbGFtcGVkQXJyYXk6Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQx
KCkpLmZpbHRlcihTcGVjVWludDhDbGFtcGVkQXJyYXkpOworICAgICAgICAgICAgZm9yTm9kZShu
b2RlLT5jaGlsZDEoKSkuZmlsdGVyKFNwZWNVaW50OENsYW1wZWRBcnJheSk7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6VWludDE2QXJyYXk6Ci0gICAgICAgICAgICBm
b3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjVWludDE2QXJyYXkpOworICAgICAgICAg
ICAgZm9yTm9kZShub2RlLT5jaGlsZDEoKSkuZmlsdGVyKFNwZWNVaW50MTZBcnJheSk7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6VWludDMyQXJyYXk6Ci0gICAgICAg
ICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjVWludDMyQXJyYXkpOworICAg
ICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDEoKSkuZmlsdGVyKFNwZWNVaW50MzJBcnJheSk7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6RmxvYXQzMkFycmF5Ogot
ICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY0Zsb2F0MzJBcnJh
eSk7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5maWx0ZXIoU3BlY0Zsb2F0
MzJBcnJheSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6RmxvYXQ2
NEFycmF5OgotICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY0Zs
b2F0NjRBcnJheSk7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5maWx0ZXIo
U3BlY0Zsb2F0NjRBcnJheSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgZGVmYXVsdDoK
ICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQotICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlckFy
cmF5TW9kZXMobm9kZS5hcnJheU1vZGUoKS5hcnJheU1vZGVzVGhhdFBhc3NGaWx0ZXJpbmcoKSk7
CisgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRlckFycmF5TW9kZXMobm9kZS0+
YXJyYXlNb2RlKCkuYXJyYXlNb2Rlc1RoYXRQYXNzRmlsdGVyaW5nKCkpOwogICAgICAgICBtX2hh
dmVTdHJ1Y3R1cmVzID0gdHJ1ZTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGNhc2UgQXJy
YXlpZnk6IHsKLSAgICAgICAgaWYgKG5vZGUuYXJyYXlNb2RlKCkuYWxyZWFkeUNoZWNrZWQobV9n
cmFwaCwgbm9kZSwgZm9yTm9kZShub2RlLmNoaWxkMSgpKSkpIHsKKyAgICAgICAgaWYgKG5vZGUt
PmFycmF5TW9kZSgpLmFscmVhZHlDaGVja2VkKG1fZ3JhcGgsIG5vZGUsIGZvck5vZGUobm9kZS0+
Y2hpbGQxKCkpKSkgewogICAgICAgICAgICAgbV9mb3VuZENvbnN0YW50cyA9IHRydWU7Ci0gICAg
ICAgICAgICBub2RlLnNldENhbkV4aXQoZmFsc2UpOworICAgICAgICAgICAgbm9kZS0+c2V0Q2Fu
RXhpdChmYWxzZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICBBU1NF
UlQobm9kZS5hcnJheU1vZGUoKS5jb252ZXJzaW9uKCkgPT0gQXJyYXk6OkNvbnZlcnQKLSAgICAg
ICAgICAgIHx8IG5vZGUuYXJyYXlNb2RlKCkuY29udmVyc2lvbigpID09IEFycmF5OjpSYWdlQ29u
dmVydCk7Ci0gICAgICAgIG5vZGUuc2V0Q2FuRXhpdCh0cnVlKTsKLSAgICAgICAgZm9yTm9kZShu
b2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY0NlbGwpOwotICAgICAgICBpZiAobm9kZS5jaGlsZDIo
KSkKLSAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7
CisgICAgICAgIEFTU0VSVChub2RlLT5hcnJheU1vZGUoKS5jb252ZXJzaW9uKCkgPT0gQXJyYXk6
OkNvbnZlcnQKKyAgICAgICAgICAgIHx8IG5vZGUtPmFycmF5TW9kZSgpLmNvbnZlcnNpb24oKSA9
PSBBcnJheTo6UmFnZUNvbnZlcnQpOworICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOwor
ICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5maWx0ZXIoU3BlY0NlbGwpOworICAgICAg
ICBpZiAobm9kZS0+Y2hpbGQyKCkpCisgICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMigp
KS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAgY2xvYmJlclN0cnVjdHVyZXMoaW5kZXhJbkJs
b2NrKTsKLSAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXJBcnJheU1vZGVzKG5v
ZGUuYXJyYXlNb2RlKCkuYXJyYXlNb2Rlc1RoYXRQYXNzRmlsdGVyaW5nKCkpOworICAgICAgICBm
b3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5maWx0ZXJBcnJheU1vZGVzKG5vZGUtPmFycmF5TW9kZSgp
LmFycmF5TW9kZXNUaGF0UGFzc0ZpbHRlcmluZygpKTsKICAgICAgICAgbV9oYXZlU3RydWN0dXJl
cyA9IHRydWU7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBjYXNlIEFycmF5aWZ5VG9TdHJ1
Y3R1cmU6IHsKLSAgICAgICAgQWJzdHJhY3RWYWx1ZSYgdmFsdWUgPSBmb3JOb2RlKG5vZGUuY2hp
bGQxKCkpOwotICAgICAgICBTdHJ1Y3R1cmVTZXQgc2V0ID0gbm9kZS5zdHJ1Y3R1cmUoKTsKKyAg
ICAgICAgQWJzdHJhY3RWYWx1ZSYgdmFsdWUgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKTsKKyAg
ICAgICAgU3RydWN0dXJlU2V0IHNldCA9IG5vZGUtPnN0cnVjdHVyZSgpOwogICAgICAgICBpZiAo
dmFsdWUubV9mdXR1cmVQb3NzaWJsZVN0cnVjdHVyZS5pc1N1YnNldE9mKHNldCkKICAgICAgICAg
ICAgIHx8IHZhbHVlLm1fY3VycmVudEtub3duU3RydWN0dXJlLmlzU3Vic2V0T2Yoc2V0KSkKICAg
ICAgICAgICAgIG1fZm91bmRDb25zdGFudHMgPSB0cnVlOwotICAgICAgICBub2RlLnNldENhbkV4
aXQodHJ1ZSk7Ci0gICAgICAgIGlmIChub2RlLmNoaWxkMigpKQotICAgICAgICAgICAgZm9yTm9k
ZShub2RlLmNoaWxkMigpKS5maWx0ZXIoU3BlY0ludDMyKTsKKyAgICAgICAgbm9kZS0+c2V0Q2Fu
RXhpdCh0cnVlKTsKKyAgICAgICAgaWYgKG5vZGUtPmNoaWxkMigpKQorICAgICAgICAgICAgZm9y
Tm9kZShub2RlLT5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7CiAgICAgICAgIGNsb2JiZXJT
dHJ1Y3R1cmVzKGluZGV4SW5CbG9jayk7CiAgICAgICAgIHZhbHVlLmZpbHRlcihzZXQpOwogICAg
ICAgICBtX2hhdmVTdHJ1Y3R1cmVzID0gdHJ1ZTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAg
IGNhc2UgR2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZTogewotICAgICAgICBub2RlLnNldENhbkV4
aXQoZmFsc2UpOwotICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuY2xlYXIoKTsKKyAgICAgICAg
bm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CisgICAgICAgIGZvck5vZGUobm9kZSkuY2xlYXIoKTsK
ICAgICAgICAgYnJlYWs7IAogICAgIH0KICAgICBjYXNlIEdldEJ5T2Zmc2V0OgotICAgICAgICBp
ZiAoIW1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0uaGFzU3RvcmFnZVJlc3VsdCgpKSB7Ci0gICAgICAg
ICAgICBub2RlLnNldENhbkV4aXQoIWlzQ2VsbFNwZWN1bGF0aW9uKGZvck5vZGUobm9kZS5jaGls
ZDEoKSkubV90eXBlKSk7Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRl
cihTcGVjQ2VsbCk7CisgICAgICAgIGlmICghbm9kZS0+Y2hpbGQxKCktPmhhc1N0b3JhZ2VSZXN1
bHQoKSkgeworICAgICAgICAgICAgbm9kZS5zZXRDYW5FeGl0KCFpc0NlbGxTcGVjdWxhdGlvbihm
b3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX3R5cGUpKTsKKyAgICAgICAgICAgIGZvck5vZGUobm9k
ZS0+Y2hpbGQxKCkpLmZpbHRlcihTcGVjQ2VsbCk7CiAgICAgICAgIH0KLSAgICAgICAgZm9yTm9k
ZShub2RlSW5kZXgpLm1ha2VUb3AoKTsKKyAgICAgICAgZm9yTm9kZShub2RlKS5tYWtlVG9wKCk7
CiAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAgY2FzZSBQdXRCeU9mZnNldDogewog
ICAgICAgICBib29sIGNhbkV4aXQgPSBmYWxzZTsKLSAgICAgICAgaWYgKCFtX2dyYXBoW25vZGUu
Y2hpbGQxKCldLmhhc1N0b3JhZ2VSZXN1bHQoKSkgewotICAgICAgICAgICAgY2FuRXhpdCB8PSAh
aXNDZWxsU3BlY3VsYXRpb24oZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpOwotICAgICAg
ICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY0NlbGwpOwotICAgICAgICB9
Ci0gICAgICAgIGNhbkV4aXQgfD0gIWlzQ2VsbFNwZWN1bGF0aW9uKGZvck5vZGUobm9kZS5jaGls
ZDIoKSkubV90eXBlKTsKLSAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMigpKS5maWx0ZXIoU3Bl
Y0NlbGwpOwotICAgICAgICBub2RlLnNldENhbkV4aXQoY2FuRXhpdCk7CisgICAgICAgIGlmICgh
bm9kZS0+Y2hpbGQxKCktPmhhc1N0b3JhZ2VSZXN1bHQoKSkgeworICAgICAgICAgICAgY2FuRXhp
dCB8PSAhaXNDZWxsU3BlY3VsYXRpb24oZm9yTm9kZShub2RlLT5jaGlsZDEoKSkubV90eXBlKTsK
KyAgICAgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRlcihTcGVjQ2VsbCk7Cisg
ICAgICAgIH0KKyAgICAgICAgY2FuRXhpdCB8PSAhaXNDZWxsU3BlY3VsYXRpb24oZm9yTm9kZShu
b2RlLT5jaGlsZDIoKSkubV90eXBlKTsKKyAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDIoKSku
ZmlsdGVyKFNwZWNDZWxsKTsKKyAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChjYW5FeGl0KTsKICAg
ICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAgICAgCiAgICAgY2FzZSBDaGVja0Z1bmN0aW9u
OiB7Ci0gICAgICAgIEpTVmFsdWUgdmFsdWUgPSBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLnZhbHVl
KCk7Ci0gICAgICAgIGlmICh2YWx1ZSA9PSBub2RlLmZ1bmN0aW9uKCkpIHsKKyAgICAgICAgSlNW
YWx1ZSB2YWx1ZSA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLnZhbHVlKCk7CisgICAgICAgIGlm
ICh2YWx1ZSA9PSBub2RlLT5mdW5jdGlvbigpKSB7CiAgICAgICAgICAgICBtX2ZvdW5kQ29uc3Rh
bnRzID0gdHJ1ZTsKICAgICAgICAgICAgIEFTU0VSVCh2YWx1ZSk7Ci0gICAgICAgICAgICBub2Rl
LnNldENhbkV4aXQoZmFsc2UpOworICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgbm9kZS5z
ZXRDYW5FeGl0KHRydWUpOyAvLyBMaWVzISBXZSBjYW4gZG8gYmV0dGVyLgotICAgICAgICBpZiAo
IWZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyQnlWYWx1ZShub2RlLmZ1bmN0aW9uKCkpKSB7
CisgICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7IC8vIExpZXMhIFdlIGNhbiBkbyBiZXR0
ZXIuCisgICAgICAgIGlmICghZm9yTm9kZShub2RlLT5jaGlsZDEoKSkuZmlsdGVyQnlWYWx1ZShu
b2RlLT5mdW5jdGlvbigpKSkgewogICAgICAgICAgICAgbV9pc1ZhbGlkID0gZmFsc2U7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtMTcxMyw2NyArMTczMiw2OSBAQCBib29sIEFi
c3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgIAogICAgIGNhc2UgUHV0
QnlJZDoKICAgICBjYXNlIFB1dEJ5SWREaXJlY3Q6Ci0gICAgICAgIG5vZGUuc2V0Q2FuRXhpdCh0
cnVlKTsKLSAgICAgICAgaWYgKFN0cnVjdHVyZSogc3RydWN0dXJlID0gZm9yTm9kZShub2RlLmNo
aWxkMSgpKS5iZXN0UHJvdmVuU3RydWN0dXJlKCkpIHsKKyAgICAgICAgbm9kZS0+c2V0Q2FuRXhp
dCh0cnVlKTsKKyAgICAgICAgaWYgKFN0cnVjdHVyZSogc3RydWN0dXJlID0gZm9yTm9kZShub2Rl
LT5jaGlsZDEoKSkuYmVzdFByb3ZlblN0cnVjdHVyZSgpKSB7CiAgICAgICAgICAgICBQdXRCeUlk
U3RhdHVzIHN0YXR1cyA9IFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IoCiAgICAgICAgICAgICAg
ICAgbV9ncmFwaC5tX2dsb2JhbERhdGEsCi0gICAgICAgICAgICAgICAgbV9ncmFwaC5nbG9iYWxP
YmplY3RGb3Iobm9kZS5jb2RlT3JpZ2luKSwKKyAgICAgICAgICAgICAgICBtX2dyYXBoLmdsb2Jh
bE9iamVjdEZvcihub2RlLT5jb2RlT3JpZ2luKSwKICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUs
Ci0gICAgICAgICAgICAgICAgbV9ncmFwaC5tX2NvZGVCbG9jay0+aWRlbnRpZmllcihub2RlLmlk
ZW50aWZpZXJOdW1iZXIoKSksCi0gICAgICAgICAgICAgICAgbm9kZS5vcCgpID09IFB1dEJ5SWRE
aXJlY3QpOworICAgICAgICAgICAgICAgIG1fZ3JhcGgubV9jb2RlQmxvY2stPmlkZW50aWZpZXIo
bm9kZS0+aWRlbnRpZmllck51bWJlcigpKSwKKyAgICAgICAgICAgICAgICBub2RlLT5vcCgpID09
IFB1dEJ5SWREaXJlY3QpOwogICAgICAgICAgICAgaWYgKHN0YXR1cy5pc1NpbXBsZVJlcGxhY2Uo
KSkgewotICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKHN0cnVj
dHVyZSk7CisgICAgICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDEoKSkuZmlsdGVyKHN0
cnVjdHVyZSk7CiAgICAgICAgICAgICAgICAgbV9mb3VuZENvbnN0YW50cyA9IHRydWU7CiAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoc3RhdHVz
LmlzU2ltcGxlVHJhbnNpdGlvbigpKSB7CiAgICAgICAgICAgICAgICAgY2xvYmJlclN0cnVjdHVy
ZXMoaW5kZXhJbkJsb2NrKTsKLSAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkp
LnNldChzdGF0dXMubmV3U3RydWN0dXJlKCkpOworICAgICAgICAgICAgICAgIGZvck5vZGUobm9k
ZS0+Y2hpbGQxKCkpLnNldChzdGF0dXMubmV3U3RydWN0dXJlKCkpOwogICAgICAgICAgICAgICAg
IG1faGF2ZVN0cnVjdHVyZXMgPSB0cnVlOwogICAgICAgICAgICAgICAgIG1fZm91bmRDb25zdGFu
dHMgPSB0cnVlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAg
ICB9Ci0gICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNDZWxsKTsKLSAg
ICAgICAgY2xvYmJlcldvcmxkKG5vZGUuY29kZU9yaWdpbiwgaW5kZXhJbkJsb2NrKTsKKyAgICAg
ICAgZm9yTm9kZShub2RlLT5jaGlsZDEoKSkuZmlsdGVyKFNwZWNDZWxsKTsKKyAgICAgICAgY2xv
YmJlcldvcmxkKG5vZGUtPmNvZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7CiAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgCiAgICAgY2FzZSBHZXRHbG9iYWxWYXI6Ci0gICAgICAgIG5vZGUuc2V0
Q2FuRXhpdChmYWxzZSk7Ci0gICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5tYWtlVG9wKCk7Cisg
ICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOworICAgICAgICBmb3JOb2RlKG5vZGUpLm1h
a2VUb3AoKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgIAogICAgIGNhc2UgR2xvYmFsVmFyV2F0
Y2hwb2ludDoKLSAgICAgICAgbm9kZS5zZXRDYW5FeGl0KHRydWUpOworICAgICAgICBub2RlLT5z
ZXRDYW5FeGl0KHRydWUpOwogICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgIGNhc2Ug
UHV0R2xvYmFsVmFyOgogICAgIGNhc2UgUHV0R2xvYmFsVmFyQ2hlY2s6Ci0gICAgICAgIG5vZGUu
c2V0Q2FuRXhpdChmYWxzZSk7CisgICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwogICAg
ICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgIGNhc2UgQ2hlY2tIYXNJbnN0YW5jZToKLSAg
ICAgICAgbm9kZS5zZXRDYW5FeGl0KHRydWUpOwotICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQx
KCkpLmZpbHRlcihTcGVjQ2VsbCk7CisgICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7Cisg
ICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRlcihTcGVjQ2VsbCk7CiAgICAgICAg
IC8vIFNhZGx5LCB3ZSBkb24ndCBwcm9wYWdhdGUgdGhlIGZhY3QgdGhhdCB3ZSd2ZSBkb25lIENo
ZWNrSGFzSW5zdGFuY2UKICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICBjYXNlIElu
c3RhbmNlT2Y6Ci0gICAgICAgIG5vZGUuc2V0Q2FuRXhpdCh0cnVlKTsKKyAgICAgICAgbm9kZS0+
c2V0Q2FuRXhpdCh0cnVlKTsKICAgICAgICAgLy8gQWdhaW4sIHNhZGx5LCB3ZSBkb24ndCBwcm9w
YWdhdGUgdGhlIGZhY3QgdGhhdCB3ZSd2ZSBkb25lIEluc3RhbmNlT2YKLSAgICAgICAgaWYgKCEo
bV9ncmFwaFtub2RlLmNoaWxkMSgpXS5wcmVkaWN0aW9uKCkgJiB+U3BlY0NlbGwpICYmICEoZm9y
Tm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUgJiB+U3BlY0NlbGwpKQotICAgICAgICAgICAgZm9y
Tm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY0NlbGwpOwotICAgICAgICBmb3JOb2RlKG5v
ZGUuY2hpbGQyKCkpLmZpbHRlcihTcGVjQ2VsbCk7Ci0gICAgICAgIGZvck5vZGUobm9kZUluZGV4
KS5zZXQoU3BlY0Jvb2xlYW4pOworICAgICAgICAvLyBGSVhNRTogVGhpcyBhcHBlYXJzIGJyb2tl
bjogQ2hlY2tIYXNJbnN0YW5jZSBhbHJlYWR5IGRvZXMgYW4gdW5jb25kaXRpb25hbCBjZWxsCisg
ICAgICAgIC8vIGNoZWNrLiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTA3NDc5CisgICAgICAgIGlmICghKG5vZGUtPmNoaWxkMSgpLT5wcmVkaWN0aW9uKCkgJiB+U3Bl
Y0NlbGwpICYmICEoZm9yTm9kZShub2RlLT5jaGlsZDEoKSkubV90eXBlICYgflNwZWNDZWxsKSkK
KyAgICAgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRlcihTcGVjQ2VsbCk7Cisg
ICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQyKCkpLmZpbHRlcihTcGVjQ2VsbCk7CisgICAgICAg
IGZvck5vZGUobm9kZSkuc2V0KFNwZWNCb29sZWFuKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICAKICAgICBjYXNlIFBoaToKICAgICBjYXNlIEZsdXNoOgotICAgICAgICBub2RlLnNldENh
bkV4aXQoZmFsc2UpOworICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICAKICAgICBjYXNlIEJyZWFrcG9pbnQ6Ci0gICAgICAgIG5vZGUu
c2V0Q2FuRXhpdChmYWxzZSk7CisgICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwogICAg
ICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgIGNhc2UgQ2FsbDoKQEAgLTE3ODIsMTggKzE4
MDMsMTggQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgIGNh
c2UgUmVzb2x2ZUJhc2U6CiAgICAgY2FzZSBSZXNvbHZlQmFzZVN0cmljdFB1dDoKICAgICBjYXNl
IFJlc29sdmVHbG9iYWw6Ci0gICAgICAgIG5vZGUuc2V0Q2FuRXhpdCh0cnVlKTsKLSAgICAgICAg
Y2xvYmJlcldvcmxkKG5vZGUuY29kZU9yaWdpbiwgaW5kZXhJbkJsb2NrKTsKLSAgICAgICAgZm9y
Tm9kZShub2RlSW5kZXgpLm1ha2VUb3AoKTsKKyAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVl
KTsKKyAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUtPmNvZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7
CisgICAgICAgIGZvck5vZGUobm9kZSkubWFrZVRvcCgpOwogICAgICAgICBicmVhazsKIAogICAg
IGNhc2UgR2FyYmFnZVZhbHVlOgotICAgICAgICBjbG9iYmVyV29ybGQobm9kZS5jb2RlT3JpZ2lu
LCBpbmRleEluQmxvY2spOwotICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkubWFrZVRvcCgpOwor
ICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+Y29kZU9yaWdpbiwgaW5kZXhJbkJsb2NrKTsKKyAg
ICAgICAgZm9yTm9kZShub2RlKS5tYWtlVG9wKCk7CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2Fz
ZSBGb3JjZU9TUkV4aXQ6Ci0gICAgICAgIG5vZGUuc2V0Q2FuRXhpdCh0cnVlKTsKKyAgICAgICAg
bm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKICAgICAgICAgbV9pc1ZhbGlkID0gZmFsc2U7CiAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgCkBAIC0xODAxLDcgKzE4MjIsNyBAQCBib29sIEFic3Ry
YWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgY2FzZSBJbmxpbmVTdGFydDoKICAg
ICBjYXNlIE5vcDoKICAgICBjYXNlIENvdW50RXhlY3V0aW9uOgotICAgICAgICBub2RlLnNldENh
bkV4aXQoZmFsc2UpOworICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAg
YnJlYWs7CiAgICAgICAgIAogICAgIGNhc2UgTGFzdE5vZGVUeXBlOgpAQCAtMTg1NCwxNSArMTg3
NSwxNCBAQCBpbmxpbmUgdm9pZCBBYnN0cmFjdFN0YXRlOjpjbG9iYmVyU3RydWN0CiAgICAgbV9k
aWRDbG9iYmVyID0gdHJ1ZTsKIH0KIAotaW5saW5lIGJvb2wgQWJzdHJhY3RTdGF0ZTo6bWVyZ2VT
dGF0ZUF0VGFpbChBYnN0cmFjdFZhbHVlJiBkZXN0aW5hdGlvbiwgQWJzdHJhY3RWYWx1ZSYgaW5W
YXJpYWJsZSwgTm9kZUluZGV4IG5vZGVJbmRleCkKK2lubGluZSBib29sIEFic3RyYWN0U3RhdGU6
Om1lcmdlU3RhdGVBdFRhaWwoQWJzdHJhY3RWYWx1ZSYgZGVzdGluYXRpb24sIEFic3RyYWN0VmFs
dWUmIGluVmFyaWFibGUsIE5vZGUqIG5vZGUpCiB7Ci0gICAgaWYgKG5vZGVJbmRleCA9PSBOb05v
ZGUpCisgICAgaWYgKCFub2RlKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIAogICAg
IEFic3RyYWN0VmFsdWUgc291cmNlOwogICAgIAotICAgIE5vZGUmIHRhaWxOb2RlID0gbV9ncmFw
aFtub2RlSW5kZXhdOwotICAgIGlmICh0YWlsTm9kZS52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+aXND
YXB0dXJlZCgpKSB7CisgICAgaWYgKG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5pc0NhcHR1
cmVkKCkpIHsKICAgICAgICAgLy8gSWYgaXQncyBjYXB0dXJlZCB0aGVuIHdlIGtub3cgdGhhdCB3
aGF0ZXZlciB2YWx1ZSB3YXMgc3RvcmVkIGludG8gdGhlIHZhcmlhYmxlIGxhc3QgaXMgdGhlCiAg
ICAgICAgIC8vIG9uZSB3ZSBjYXJlIGFib3V0LiBUaGlzIGlzIHRydWUgZXZlbiBpZiB0aGUgdmFy
aWFibGUgYXQgdGFpbCBpcyBkZWFkLCB3aGljaCBtaWdodCBoYXBwZW4gaWYKICAgICAgICAgLy8g
dGhlIGxhc3QgdGhpbmcgd2UgZGlkIHRvIHRoZSB2YXJpYWJsZSB3YXMgYSBHZXRMb2NhbCBhbmQg
dGhlbiBlbmRlZCB1cCBub3cgdXNpbmcgdGhlCkBAIC0xODc1LDI2ICsxODk1LDI1IEBAIGlubGlu
ZSBib29sIEFic3RyYWN0U3RhdGU6Om1lcmdlU3RhdGVBdFQKICAgICAgICAgZGF0YUxvZ0YoIiBm
cm9tIGxhc3QgYWNjZXNzIGR1ZSB0byBjYXB0dXJlZCB2YXJpYWJsZS5cbiIpOwogI2VuZGlmCiAg
ICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKCF0YWlsTm9kZS5zaG91bGRHZW5lcmF0ZSgpKSB7Cisg
ICAgICAgIGlmICghbm9kZS0+c2hvdWxkR2VuZXJhdGUoKSkgewogICAgICAgICAgICAgLy8gSWYg
dGhlIG5vZGUgYXQgdGFpbCBpcyBhIEdldExvY2FsIHRoYXQgaXMgZGVhZCwgdGhlbiBza2lwIGl0
IHRvIGdldCB0byB0aGUgUGhpLgogICAgICAgICAgICAgLy8gVGhlIFBoaSBtYXkgYmUgbGl2ZS4K
LSAgICAgICAgICAgIGlmICh0YWlsTm9kZS5vcCgpICE9IEdldExvY2FsKQorICAgICAgICAgICAg
aWYgKG5vZGUtPm9wKCkgIT0gR2V0TG9jYWwpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgICAgICAgICAgCi0gICAgICAgICAgICBub2RlSW5kZXggPSB0YWlsTm9kZS5jaGlsZDEo
KS5pbmRleCgpOwotICAgICAgICAgICAgQVNTRVJUKG1fZ3JhcGhbbm9kZUluZGV4XS5vcCgpID09
IFBoaSk7Ci0gICAgICAgICAgICBpZiAoIW1fZ3JhcGhbbm9kZUluZGV4XS5zaG91bGRHZW5lcmF0
ZSgpKQorICAgICAgICAgICAgbm9kZSA9IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKKyAgICAgICAg
ICAgIEFTU0VSVChub2RlLT5vcCgpID09IFBoaSk7CisgICAgICAgICAgICBpZiAoIW5vZGUtPnNo
b3VsZEdlbmVyYXRlKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9
CiAgICAgICAgIAotICAgICAgICBOb2RlJiBub2RlID0gbV9ncmFwaFtub2RlSW5kZXhdOwotICAg
ICAgICBBU1NFUlQobm9kZS5zaG91bGRHZW5lcmF0ZSgpKTsKKyAgICAgICAgQVNTRVJUKG5vZGUt
PnNob3VsZEdlbmVyYXRlKCkpOwogCiAjaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9W
RVJCT1NFKQotICAgICAgICBkYXRhTG9nRigiICAgICAgICAgIEl0J3MgbGl2ZSwgbm9kZSBAJXUu
XG4iLCBub2RlSW5kZXgpOworICAgICAgICBkYXRhTG9nRigiICAgICAgICAgIEl0J3MgbGl2ZSwg
bm9kZSBAJXUuXG4iLCBub2RlLT5pbmRleCgpKTsKICNlbmRpZgogICAgIAotICAgICAgICBzd2l0
Y2ggKG5vZGUub3AoKSkgeworICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKICAgICAgICAg
Y2FzZSBQaGk6CiAgICAgICAgIGNhc2UgU2V0QXJndW1lbnQ6CiAgICAgICAgIGNhc2UgRmx1c2g6
CkBAIC0xOTA5LDcgKzE5MjgsNyBAQCBpbmxpbmUgYm9vbCBBYnN0cmFjdFN0YXRlOjptZXJnZVN0
YXRlQXRUCiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBHZXRMb2NhbDoKICAgICAgICAgICAg
IC8vIFRoZSBibG9jayByZWZpbmVzIHRoZSB2YWx1ZSB3aXRoIGFkZGl0aW9uYWwgc3BlY3VsYXRp
b25zLgotICAgICAgICAgICAgc291cmNlID0gZm9yTm9kZShub2RlSW5kZXgpOworICAgICAgICAg
ICAgc291cmNlID0gZm9yTm9kZShub2RlKTsKICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FU
SU9OX1ZFUkJPU0UpCiAgICAgICAgICAgICBkYXRhTG9nRigiICAgICAgICAgIFJlZmluaW5nIHRv
ICIpOwogICAgICAgICAgICAgc291cmNlLmR1bXAoV1RGOjpkYXRhRmlsZSgpKTsKQEAgLTE5MjAs
MTEgKzE5MzksMTEgQEAgaW5saW5lIGJvb2wgQWJzdHJhY3RTdGF0ZTo6bWVyZ2VTdGF0ZUF0VAog
ICAgICAgICBjYXNlIFNldExvY2FsOgogICAgICAgICAgICAgLy8gVGhlIGJsb2NrIHNldHMgdGhl
IHZhcmlhYmxlLCBhbmQgcG90ZW50aWFsbHkgcmVmaW5lcyBpdCwgYm90aAogICAgICAgICAgICAg
Ly8gYmVmb3JlIGFuZCBhZnRlciBzZXR0aW5nIGl0LgotICAgICAgICAgICAgaWYgKG5vZGUudmFy
aWFibGVBY2Nlc3NEYXRhKCktPnNob3VsZFVzZURvdWJsZUZvcm1hdCgpKSB7CisgICAgICAgICAg
ICBpZiAobm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCktPnNob3VsZFVzZURvdWJsZUZvcm1hdCgp
KSB7CiAgICAgICAgICAgICAgICAgLy8gRklYTUU6IFRoaXMgdW5uZWNlc3NhcmlseSBsb3NlcyBw
cmVjaXNpb24uCiAgICAgICAgICAgICAgICAgc291cmNlLnNldChTcGVjRG91YmxlKTsKICAgICAg
ICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgIHNvdXJjZSA9IGZvck5vZGUobm9kZS5jaGls
ZDEoKSk7CisgICAgICAgICAgICAgICAgc291cmNlID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSk7
CiAjaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQogICAgICAgICAgICAg
ZGF0YUxvZ0YoIiAgICAgICAgICBTZXR0aW5nIHRvICIpOwogICAgICAgICAgICAgc291cmNlLmR1
bXAoV1RGOjpkYXRhRmlsZSgpKTsKQEAgLTE5ODIsMzUgKzIwMDEsMzQgQEAgaW5saW5lIGJvb2wg
QWJzdHJhY3RTdGF0ZTo6bWVyZ2UoQmFzaWNCbAogICAgIHJldHVybiBjaGFuZ2VkOwogfQogCi1p
bmxpbmUgYm9vbCBBYnN0cmFjdFN0YXRlOjptZXJnZVRvU3VjY2Vzc29ycygKLSAgICBHcmFwaCYg
Z3JhcGgsIEJhc2ljQmxvY2sqIGJhc2ljQmxvY2spCitpbmxpbmUgYm9vbCBBYnN0cmFjdFN0YXRl
OjptZXJnZVRvU3VjY2Vzc29ycyhHcmFwaCYgZ3JhcGgsIEJhc2ljQmxvY2sqIGJhc2ljQmxvY2sp
CiB7Ci0gICAgTm9kZSYgdGVybWluYWwgPSBncmFwaFtiYXNpY0Jsb2NrLT5sYXN0KCldOworICAg
IE5vZGUqIHRlcm1pbmFsID0gYmFzaWNCbG9jay0+bGFzdCgpOwogICAgIAotICAgIEFTU0VSVCh0
ZXJtaW5hbC5pc1Rlcm1pbmFsKCkpOworICAgIEFTU0VSVCh0ZXJtaW5hbC0+aXNUZXJtaW5hbCgp
KTsKICAgICAKLSAgICBzd2l0Y2ggKHRlcm1pbmFsLm9wKCkpIHsKKyAgICBzd2l0Y2ggKHRlcm1p
bmFsLT5vcCgpKSB7CiAgICAgY2FzZSBKdW1wOiB7CiAgICAgICAgIEFTU0VSVChiYXNpY0Jsb2Nr
LT5jZmFCcmFuY2hEaXJlY3Rpb24gPT0gSW52YWxpZEJyYW5jaERpcmVjdGlvbik7CiAjaWYgREZH
X0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQogICAgICAgICBkYXRhTG9nRigiICAg
ICAgICBNZXJnaW5nIHRvIGJsb2NrICMldS5cbiIsIHRlcm1pbmFsLnRha2VuQmxvY2tJbmRleCgp
KTsKICNlbmRpZgotICAgICAgICByZXR1cm4gbWVyZ2UoYmFzaWNCbG9jaywgZ3JhcGgubV9ibG9j
a3NbdGVybWluYWwudGFrZW5CbG9ja0luZGV4KCldLmdldCgpKTsKKyAgICAgICAgcmV0dXJuIG1l
cmdlKGJhc2ljQmxvY2ssIGdyYXBoLm1fYmxvY2tzW3Rlcm1pbmFsLT50YWtlbkJsb2NrSW5kZXgo
KV0uZ2V0KCkpOwogICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBCcmFuY2g6IHsKICAgICAgICAg
QVNTRVJUKGJhc2ljQmxvY2stPmNmYUJyYW5jaERpcmVjdGlvbiAhPSBJbnZhbGlkQnJhbmNoRGly
ZWN0aW9uKTsKICAgICAgICAgYm9vbCBjaGFuZ2VkID0gZmFsc2U7CiAjaWYgREZHX0VOQUJMRShE
RUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQotICAgICAgICBkYXRhTG9nRigiICAgICAgICBNZXJn
aW5nIHRvIGJsb2NrICMldS5cbiIsIHRlcm1pbmFsLnRha2VuQmxvY2tJbmRleCgpKTsKKyAgICAg
ICAgZGF0YUxvZ0YoIiAgICAgICAgTWVyZ2luZyB0byBibG9jayAjJXUuXG4iLCB0ZXJtaW5hbC0+
dGFrZW5CbG9ja0luZGV4KCkpOwogI2VuZGlmCiAgICAgICAgIGlmIChiYXNpY0Jsb2NrLT5jZmFC
cmFuY2hEaXJlY3Rpb24gIT0gVGFrZUZhbHNlKQotICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJn
ZShiYXNpY0Jsb2NrLCBncmFwaC5tX2Jsb2Nrc1t0ZXJtaW5hbC50YWtlbkJsb2NrSW5kZXgoKV0u
Z2V0KCkpOworICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZShiYXNpY0Jsb2NrLCBncmFwaC5t
X2Jsb2Nrc1t0ZXJtaW5hbC0+dGFrZW5CbG9ja0luZGV4KCldLmdldCgpKTsKICNpZiBERkdfRU5B
QkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCiAgICAgICAgIGRhdGFMb2dGKCIgICAgICAg
IE1lcmdpbmcgdG8gYmxvY2sgIyV1LlxuIiwgdGVybWluYWwubm90VGFrZW5CbG9ja0luZGV4KCkp
OwogI2VuZGlmCiAgICAgICAgIGlmIChiYXNpY0Jsb2NrLT5jZmFCcmFuY2hEaXJlY3Rpb24gIT0g
VGFrZVRydWUpCi0gICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlKGJhc2ljQmxvY2ssIGdyYXBo
Lm1fYmxvY2tzW3Rlcm1pbmFsLm5vdFRha2VuQmxvY2tJbmRleCgpXS5nZXQoKSk7CisgICAgICAg
ICAgICBjaGFuZ2VkIHw9IG1lcmdlKGJhc2ljQmxvY2ssIGdyYXBoLm1fYmxvY2tzW3Rlcm1pbmFs
LT5ub3RUYWtlbkJsb2NrSW5kZXgoKV0uZ2V0KCkpOwogICAgICAgICByZXR1cm4gY2hhbmdlZDsK
ICAgICB9CiAgICAgICAgIApAQCAtMjAyNiwxMiArMjA0NCwxMiBAQCBpbmxpbmUgYm9vbCBBYnN0
cmFjdFN0YXRlOjptZXJnZVRvU3VjY2VzCiAgICAgfQogfQogCi1pbmxpbmUgYm9vbCBBYnN0cmFj
dFN0YXRlOjptZXJnZVZhcmlhYmxlQmV0d2VlbkJsb2NrcyhBYnN0cmFjdFZhbHVlJiBkZXN0aW5h
dGlvbiwgQWJzdHJhY3RWYWx1ZSYgc291cmNlLCBOb2RlSW5kZXggZGVzdGluYXRpb25Ob2RlSW5k
ZXgsIE5vZGVJbmRleCBzb3VyY2VOb2RlSW5kZXgpCitpbmxpbmUgYm9vbCBBYnN0cmFjdFN0YXRl
OjptZXJnZVZhcmlhYmxlQmV0d2VlbkJsb2NrcyhBYnN0cmFjdFZhbHVlJiBkZXN0aW5hdGlvbiwg
QWJzdHJhY3RWYWx1ZSYgc291cmNlLCBOb2RlKiBkZXN0aW5hdGlvbk5vZGUsIE5vZGUqIHNvdXJj
ZU5vZGUpCiB7Ci0gICAgaWYgKGRlc3RpbmF0aW9uTm9kZUluZGV4ID09IE5vTm9kZSkKKyAgICBp
ZiAoIWRlc3RpbmF0aW9uTm9kZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAotICAgIEFT
U0VSVF9VTlVTRUQoc291cmNlTm9kZUluZGV4LCBzb3VyY2VOb2RlSW5kZXggIT0gTm9Ob2RlKTsK
KyAgICBBU1NFUlRfVU5VU0VEKHNvdXJjZU5vZGUsIHNvdXJjZU5vZGUpOwogICAgIAogICAgIC8v
IEZJWE1FOiBXZSBjb3VsZCBkbyBzb21lIHNwYXJzZSBjb25kaXRpb25hbCBwcm9wYWdhdGlvbiBo
ZXJlIQogICAgIApAQCAtMjA0MiwxNSArMjA2MCwxNSBAQCB2b2lkIEFic3RyYWN0U3RhdGU6OmR1
bXAoUHJpbnRTdHJlYW0mIG91CiB7CiAgICAgYm9vbCBmaXJzdCA9IHRydWU7CiAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBtX2Jsb2NrLT5zaXplKCk7ICsraSkgewotICAgICAgICBOb2RlSW5k
ZXggaW5kZXggPSBtX2Jsb2NrLT5hdChpKTsKLSAgICAgICAgQWJzdHJhY3RWYWx1ZSYgdmFsdWUg
PSBmb3JOb2RlKGluZGV4KTsKKyAgICAgICAgTm9kZSogbm9kZSA9IG1fYmxvY2stPmF0KGkpOwor
ICAgICAgICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSA9IGZvck5vZGUobm9kZSk7CiAgICAgICAgIGlm
ICh2YWx1ZS5pc0NsZWFyKCkpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgaWYgKGZp
cnN0KQogICAgICAgICAgICAgZmlyc3QgPSBmYWxzZTsKICAgICAgICAgZWxzZQogICAgICAgICAg
ICAgb3V0LnByaW50ZigiICIpOwotICAgICAgICBvdXQucHJpbnRmKCJAJWx1OiIsIHN0YXRpY19j
YXN0PHVuc2lnbmVkIGxvbmc+KGluZGV4KSk7CisgICAgICAgIG91dC5wcmludGYoIkAlbHU6Iiwg
c3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4obm9kZS0+aW5kZXgoKSkpOwogICAgICAgICB2YWx1
ZS5kdW1wKG91dCk7CiAgICAgfQogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdBYnN0cmFjdFN0YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdBYnN0cmFjdFN0YXRlLmgJKHJldmlzaW9uIDE0MDkwNCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQWJzdHJhY3RTdGF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTIsIDIwMTMgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC03Miw4ICs3Miw4IEBAIHN0cnVjdCBCYXNpY0Jsb2NrOwogLy8gQWJzdHJhY3RTdGF0ZSBzdGF0
ZShjb2RlQmxvY2ssIGdyYXBoKTsKIC8vIHN0YXRlLmJlZ2luQmFzaWNCbG9jayhiYXNpY0Jsb2Nr
KTsKIC8vIGJvb2wgZW5kUmVhY2hlZCA9IHRydWU7Ci0vLyBmb3IgKE5vZGVJbmRleCBpZHggPSBi
YXNpY0Jsb2NrLmJlZ2luOyBpZHggPCBiYXNpY0Jsb2NrLmVuZDsgKytpZHgpIHsKLS8vICAgICBp
ZiAoIXN0YXRlLmV4ZWN1dGUoaWR4KSkKKy8vIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBiYXNp
Y0Jsb2NrLT5zaXplKCk7ICsraSkgeworLy8gICAgIGlmICghc3RhdGUuZXhlY3V0ZShpKSkKIC8v
ICAgICAgICAgYnJlYWs7CiAvLyB9CiAvLyBib29sIHJlc3VsdCA9IHN0YXRlLmVuZEJhc2ljQmxv
Y2soPGVpdGhlciBNZXJnZSBvciBEb250TWVyZ2U+KTsKQEAgLTk3LDE0ICs5NywxNCBAQCBwdWJs
aWM6CiAgICAgCiAgICAgfkFic3RyYWN0U3RhdGUoKTsKICAgICAKLSAgICBBYnN0cmFjdFZhbHVl
JiBmb3JOb2RlKE5vZGVJbmRleCBub2RlSW5kZXgpCisgICAgQWJzdHJhY3RWYWx1ZSYgZm9yTm9k
ZShOb2RlKiBub2RlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIG1fZ3JhcGhbbm9kZUluZGV4XS52
YWx1ZTsKKyAgICAgICAgcmV0dXJuIG5vZGUtPnZhbHVlOwogICAgIH0KICAgICAKLSAgICBBYnN0
cmFjdFZhbHVlJiBmb3JOb2RlKEVkZ2Ugbm9kZVVzZSkKKyAgICBBYnN0cmFjdFZhbHVlJiBmb3JO
b2RlKEVkZ2UgZWRnZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBmb3JOb2RlKG5vZGVVc2UuaW5k
ZXgoKSk7CisgICAgICAgIHJldHVybiBmb3JOb2RlKGVkZ2Uubm9kZSgpKTsKICAgICB9CiAgICAg
CiAgICAgT3BlcmFuZHM8QWJzdHJhY3RWYWx1ZT4mIHZhcmlhYmxlcygpCkBAIC0xODcsNDggKzE4
Nyw0OCBAQCBwcml2YXRlOgogICAgIHZvaWQgY2xvYmJlckNhcHR1cmVkVmFycyhjb25zdCBDb2Rl
T3JpZ2luJik7CiAgICAgdm9pZCBjbG9iYmVyU3RydWN0dXJlcyh1bnNpZ25lZCBpbmRleEluQmxv
Y2spOwogICAgIAotICAgIGJvb2wgbWVyZ2VTdGF0ZUF0VGFpbChBYnN0cmFjdFZhbHVlJiBkZXN0
aW5hdGlvbiwgQWJzdHJhY3RWYWx1ZSYgaW5WYXJpYWJsZSwgTm9kZUluZGV4KTsKKyAgICBib29s
IG1lcmdlU3RhdGVBdFRhaWwoQWJzdHJhY3RWYWx1ZSYgZGVzdGluYXRpb24sIEFic3RyYWN0VmFs
dWUmIGluVmFyaWFibGUsIE5vZGUqKTsKICAgICAKLSAgICBzdGF0aWMgYm9vbCBtZXJnZVZhcmlh
YmxlQmV0d2VlbkJsb2NrcyhBYnN0cmFjdFZhbHVlJiBkZXN0aW5hdGlvbiwgQWJzdHJhY3RWYWx1
ZSYgc291cmNlLCBOb2RlSW5kZXggZGVzdGluYXRpb25Ob2RlSW5kZXgsIE5vZGVJbmRleCBzb3Vy
Y2VOb2RlSW5kZXgpOworICAgIHN0YXRpYyBib29sIG1lcmdlVmFyaWFibGVCZXR3ZWVuQmxvY2tz
KEFic3RyYWN0VmFsdWUmIGRlc3RpbmF0aW9uLCBBYnN0cmFjdFZhbHVlJiBzb3VyY2UsIE5vZGUq
IGRlc3RpbmF0aW9uTm9kZSwgTm9kZSogc291cmNlTm9kZSk7CiAgICAgCi0gICAgdm9pZCBzcGVj
dWxhdGVJbnQzMlVuYXJ5KE5vZGUmIG5vZGUsIGJvb2wgZm9yY2VDYW5FeGl0ID0gZmFsc2UpCisg
ICAgdm9pZCBzcGVjdWxhdGVJbnQzMlVuYXJ5KE5vZGUqIG5vZGUsIGJvb2wgZm9yY2VDYW5FeGl0
ID0gZmFsc2UpCiAgICAgewotICAgICAgICBBYnN0cmFjdFZhbHVlJiBjaGlsZFZhbHVlID0gZm9y
Tm9kZShub2RlLmNoaWxkMSgpKTsKLSAgICAgICAgbm9kZS5zZXRDYW5FeGl0KGZvcmNlQ2FuRXhp
dCB8fCAhaXNJbnQzMlNwZWN1bGF0aW9uKGNoaWxkVmFsdWUubV90eXBlKSk7CisgICAgICAgIEFi
c3RyYWN0VmFsdWUmIGNoaWxkVmFsdWUgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKTsKKyAgICAg
ICAgbm9kZS0+c2V0Q2FuRXhpdChmb3JjZUNhbkV4aXQgfHwgIWlzSW50MzJTcGVjdWxhdGlvbihj
aGlsZFZhbHVlLm1fdHlwZSkpOwogICAgICAgICBjaGlsZFZhbHVlLmZpbHRlcihTcGVjSW50MzIp
OwogICAgIH0KICAgICAKLSAgICB2b2lkIHNwZWN1bGF0ZU51bWJlclVuYXJ5KE5vZGUmIG5vZGUp
CisgICAgdm9pZCBzcGVjdWxhdGVOdW1iZXJVbmFyeShOb2RlKiBub2RlKQogICAgIHsKLSAgICAg
ICAgQWJzdHJhY3RWYWx1ZSYgY2hpbGRWYWx1ZSA9IGZvck5vZGUobm9kZS5jaGlsZDEoKSk7Ci0g
ICAgICAgIG5vZGUuc2V0Q2FuRXhpdCghaXNOdW1iZXJTcGVjdWxhdGlvbihjaGlsZFZhbHVlLm1f
dHlwZSkpOworICAgICAgICBBYnN0cmFjdFZhbHVlJiBjaGlsZFZhbHVlID0gZm9yTm9kZShub2Rl
LT5jaGlsZDEoKSk7CisgICAgICAgIG5vZGUtPnNldENhbkV4aXQoIWlzTnVtYmVyU3BlY3VsYXRp
b24oY2hpbGRWYWx1ZS5tX3R5cGUpKTsKICAgICAgICAgY2hpbGRWYWx1ZS5maWx0ZXIoU3BlY051
bWJlcik7CiAgICAgfQogICAgIAotICAgIHZvaWQgc3BlY3VsYXRlQm9vbGVhblVuYXJ5KE5vZGUm
IG5vZGUpCisgICAgdm9pZCBzcGVjdWxhdGVCb29sZWFuVW5hcnkoTm9kZSogbm9kZSkKICAgICB7
Ci0gICAgICAgIEFic3RyYWN0VmFsdWUmIGNoaWxkVmFsdWUgPSBmb3JOb2RlKG5vZGUuY2hpbGQx
KCkpOwotICAgICAgICBub2RlLnNldENhbkV4aXQoIWlzQm9vbGVhblNwZWN1bGF0aW9uKGNoaWxk
VmFsdWUubV90eXBlKSk7CisgICAgICAgIEFic3RyYWN0VmFsdWUmIGNoaWxkVmFsdWUgPSBmb3JO
b2RlKG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCghaXNCb29sZWFu
U3BlY3VsYXRpb24oY2hpbGRWYWx1ZS5tX3R5cGUpKTsKICAgICAgICAgY2hpbGRWYWx1ZS5maWx0
ZXIoU3BlY0Jvb2xlYW4pOwogICAgIH0KICAgICAKLSAgICB2b2lkIHNwZWN1bGF0ZUludDMyQmlu
YXJ5KE5vZGUmIG5vZGUsIGJvb2wgZm9yY2VDYW5FeGl0ID0gZmFsc2UpCisgICAgdm9pZCBzcGVj
dWxhdGVJbnQzMkJpbmFyeShOb2RlKiBub2RlLCBib29sIGZvcmNlQ2FuRXhpdCA9IGZhbHNlKQog
ICAgIHsKLSAgICAgICAgQWJzdHJhY3RWYWx1ZSYgY2hpbGRWYWx1ZTEgPSBmb3JOb2RlKG5vZGUu
Y2hpbGQxKCkpOwotICAgICAgICBBYnN0cmFjdFZhbHVlJiBjaGlsZFZhbHVlMiA9IGZvck5vZGUo
bm9kZS5jaGlsZDIoKSk7Ci0gICAgICAgIG5vZGUuc2V0Q2FuRXhpdCgKKyAgICAgICAgQWJzdHJh
Y3RWYWx1ZSYgY2hpbGRWYWx1ZTEgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAg
QWJzdHJhY3RWYWx1ZSYgY2hpbGRWYWx1ZTIgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMigpKTsKKyAg
ICAgICAgbm9kZS0+c2V0Q2FuRXhpdCgKICAgICAgICAgICAgIGZvcmNlQ2FuRXhpdAotICAgICAg
ICAgICAgfHwgIWlzSW50MzJTcGVjdWxhdGlvbihjaGlsZFZhbHVlMS5tX3R5cGUpCi0gICAgICAg
ICAgICB8fCAhaXNJbnQzMlNwZWN1bGF0aW9uKGNoaWxkVmFsdWUyLm1fdHlwZSkpOworICAgICAg
ICAgICAgfHwgIWlzSW50MzJTcGVjdWxhdGlvbihjaGlsZFZhbHVlMS0+bV90eXBlKQorICAgICAg
ICAgICAgfHwgIWlzSW50MzJTcGVjdWxhdGlvbihjaGlsZFZhbHVlMi0+bV90eXBlKSk7CiAgICAg
ICAgIGNoaWxkVmFsdWUxLmZpbHRlcihTcGVjSW50MzIpOwogICAgICAgICBjaGlsZFZhbHVlMi5m
aWx0ZXIoU3BlY0ludDMyKTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBzcGVjdWxhdGVOdW1iZXJC
aW5hcnkoTm9kZSYgbm9kZSkKKyAgICB2b2lkIHNwZWN1bGF0ZU51bWJlckJpbmFyeShOb2RlKiBu
b2RlKQogICAgIHsKLSAgICAgICAgQWJzdHJhY3RWYWx1ZSYgY2hpbGRWYWx1ZTEgPSBmb3JOb2Rl
KG5vZGUuY2hpbGQxKCkpOwotICAgICAgICBBYnN0cmFjdFZhbHVlJiBjaGlsZFZhbHVlMiA9IGZv
ck5vZGUobm9kZS5jaGlsZDIoKSk7Ci0gICAgICAgIG5vZGUuc2V0Q2FuRXhpdCgKKyAgICAgICAg
QWJzdHJhY3RWYWx1ZSYgY2hpbGRWYWx1ZTEgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKTsKKyAg
ICAgICAgQWJzdHJhY3RWYWx1ZSYgY2hpbGRWYWx1ZTIgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMigp
KTsKKyAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCgKICAgICAgICAgICAgICFpc051bWJlclNwZWN1
bGF0aW9uKGNoaWxkVmFsdWUxLm1fdHlwZSkKICAgICAgICAgICAgIHx8ICFpc051bWJlclNwZWN1
bGF0aW9uKGNoaWxkVmFsdWUyLm1fdHlwZSkpOwogICAgICAgICBjaGlsZFZhbHVlMS5maWx0ZXIo
U3BlY051bWJlcik7CkBAIC0yNDAsOSArMjQwLDkgQEAgcHJpdmF0ZToKICAgICAgICAgRGVmaW5p
dGVseUZhbHNlLAogICAgICAgICBEZWZpbml0ZWx5VHJ1ZQogICAgIH07Ci0gICAgQm9vbGVhblJl
c3VsdCBib29sZWFuUmVzdWx0KE5vZGUmLCBBYnN0cmFjdFZhbHVlJik7CisgICAgQm9vbGVhblJl
c3VsdCBib29sZWFuUmVzdWx0KE5vZGUqLCBBYnN0cmFjdFZhbHVlJik7CiAgICAgCi0gICAgYm9v
bCB0cnlTZXRDb25zdGFudChOb2RlSW5kZXggbm9kZUluZGV4LCBKU1ZhbHVlIHZhbHVlKQorICAg
IGJvb2wgdHJ5U2V0Q29uc3RhbnQoTm9kZSogbm9kZSwgSlNWYWx1ZSB2YWx1ZSkKICAgICB7CiAg
ICAgICAgIC8vIE1ha2Ugc3VyZSB3ZSBkb24ndCBjb25zdGFudCBmb2xkIHNvbWV0aGluZyB0aGF0
IHdpbGwgcHJvZHVjZSB2YWx1ZXMgdGhhdCBjb250cmF2ZW5lCiAgICAgICAgIC8vIHByZWRpY3Rp
b25zLiBJZiB0aGF0IGhhcHBlbnMgdGhlbiB3ZSBrbm93IHRoYXQgdGhlIGNvZGUgd2lsbCBPU1Ig
ZXhpdCwgZm9yY2luZwpAQCAtMjUxLDExICsyNTEsMTEgQEAgcHJpdmF0ZToKICAgICAgICAgLy8g
bG90IG9mIHN1YnRsZSBjb2RlIHRoYXQgYXNzdW1lcyB0aGF0CiAgICAgICAgIC8vIHNwZWN1bGF0
aW9uRnJvbVZhbHVlKGpzQ29uc3RhbnQpID09IGpzQ29uc3RhbnQucHJlZGljdGlvbigpLiAiSGFy
ZGVuaW5nIiB0aGF0IGNvZGUKICAgICAgICAgLy8gaXMgcHJvYmFibHkgbGVzcyBzYW5lIHRoYW4g
anVzdCBwdWxsaW5nIGJhY2sgb24gY29uc3RhbnQgZm9sZGluZy4KLSAgICAgICAgU3BlY3VsYXRl
ZFR5cGUgb2xkVHlwZSA9IG1fZ3JhcGhbbm9kZUluZGV4XS5wcmVkaWN0aW9uKCk7CisgICAgICAg
IFNwZWN1bGF0ZWRUeXBlIG9sZFR5cGUgPSBub2RlLT5wcmVkaWN0aW9uKCk7CiAgICAgICAgIGlm
IChtZXJnZVNwZWN1bGF0aW9ucyhzcGVjdWxhdGlvbkZyb21WYWx1ZSh2YWx1ZSksIG9sZFR5cGUp
ICE9IG9sZFR5cGUpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIAotICAgICAg
ICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KHZhbHVlKTsKKyAgICAgICAgZm9yTm9kZShub2RlKS5z
ZXQodmFsdWUpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0VmFsdWUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0VmFsdWUuaAkocmV2aXNpb24gMTQw
OTA0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFZhbHVlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExLCAy
MDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
MSwgMjAxMiwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQxOCw2ICs0MTgsOCBAQCBzdHJ1Y3QgQWJzdHJhY3RW
YWx1ZSB7CiAgICAgLy8gICAgY2hhbmdlIHgncyBzdHJ1Y3R1cmUgYW5kIHdlIGhhdmUgbm8gd2F5
IG9mIHByb3Zpbmcgb3RoZXJ3aXNlLCBidXQKICAgICAvLyAgICB4J3MgbV9mdXR1cmVQb3NzaWJs
ZVN0cnVjdHVyZSB3aWxsIGJlIHdoYXRldmVyIHN0cnVjdHVyZSB3ZSBoYWQgY2hlY2tlZAogICAg
IC8vICAgIHdoZW4gZ2V0dGluZyBwcm9wZXJ0eSAnZicuCisgICAgCisgICAgLy8gTkIuIEFsbCBm
aWVsZHMgaW4gdGhpcyBzdHJ1Y3QgbXVzdCBoYXZlIHRyaXZpYWwgZGVzdHJ1Y3RvcnMuCiAKICAg
ICAvLyBUaGlzIGlzIGEgcHJvdmVuIGNvbnN0cmFpbnQgb24gdGhlIHN0cnVjdHVyZXMgdGhhdCB0
aGlzIHZhbHVlIGNhbiBoYXZlIHJpZ2h0CiAgICAgLy8gbm93LiBUaGUgc3RydWN0dXJlIG9mIHRo
ZSBjdXJyZW50IHZhbHVlIG11c3QgYmVsb25nIHRvIHRoaXMgc2V0LiBUaGUgc2V0IG1heQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBZGphY2VuY3lMaXN0LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBZGphY2VuY3lMaXN0LmgJKHJldmlz
aW9uIDE0MDkwNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWRqYWNlbmN5TGlz
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTEsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC01Nyw3ICs1Nyw3IEBAIHB1YmxpYzoKICAgICAgICAgfQogICAg
IH0KICAgICAKLSAgICBBZGphY2VuY3lMaXN0KEtpbmQga2luZCwgTm9kZUluZGV4IGNoaWxkMSwg
Tm9kZUluZGV4IGNoaWxkMiwgTm9kZUluZGV4IGNoaWxkMykKKyAgICBBZGphY2VuY3lMaXN0KEtp
bmQga2luZCwgTm9kZSogY2hpbGQxLCBOb2RlKiBjaGlsZDIsIE5vZGUqIGNoaWxkMykKICNpZiAh
QVNTRVJUX0RJU0FCTEVECiAgICAgICAgIDogbV9raW5kKEZpeGVkKQogI2VuZGlmCkBAIC0xMTgs
NyArMTE4LDcgQEAgcHVibGljOgogICAgICAgICBjaGlsZCgyKSA9IGNoaWxkMzsKICAgICB9CiAg
ICAgCi0gICAgdm9pZCBpbml0aWFsaXplKE5vZGVJbmRleCBjaGlsZDEgPSBOb05vZGUsIE5vZGVJ
bmRleCBjaGlsZDIgPSBOb05vZGUsIE5vZGVJbmRleCBjaGlsZDMgPSBOb05vZGUpCisgICAgdm9p
ZCBpbml0aWFsaXplKE5vZGUqIGNoaWxkMSA9IDAsIE5vZGUqIGNoaWxkMiA9IDAsIE5vZGUqIGNo
aWxkMyA9IDApCiAgICAgewogICAgICAgICBpbml0aWFsaXplKEVkZ2UoY2hpbGQxKSwgRWRnZShj
aGlsZDIpLCBFZGdlKGNoaWxkMykpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQWxsb2NhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdBbGxvY2F0b3IuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQWxsb2NhdG9yLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjM1IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHQWxs
b2NhdG9yX2gKKyNkZWZpbmUgREZHQWxsb2NhdG9yX2gKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9y
bS5oPgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlIDx3dGYvUGFnZUFsbG9jYXRp
b25BbGlnbmVkLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworLy8gQ3Vz
dG9tIHBvb2wgYWxsb2NhdG9yIGZvciBleGFjdGx5IG9uZSB0eXBlICh0eXBlIFQpLiBJdCBoYXMg
ZmFzdCAoTygxKSwgb25seSBhIGZldworLy8gaW5zdHJ1Y3Rpb25zKSBhbGxvY2F0b3IsIGFuZCBh
IHNpbWlsYXJseSBmYXN0IGZyZWUoKS4gUmVjeWNsaW5nIHdvcmtzIGlmIGVpdGhlciBvZgorLy8g
dGhlIGZvbGxvd2luZyBpcyB0cnVlOgorLy8gLSBUIGhhcyBhIHRyaXZpYWwgZGVzdHJ1Y3Rvci4g
SW4gdGhhdCBjYXNlIHlvdSBkb24ndCBoYXZlIHRvIGV2ZXIgY2FsbCBmcmVlKCkgb24KKy8vICAg
YW55dGhpbmcuIFlvdSBjYW4ganVzdCBjYWxsIGZyZWVBbGwoKSBpbnN0ZWFkLgorLy8gLSBZb3Ug
Y2FsbCBmcmVlKCkgb24gYWxsIFQncyB0aGF0IHlvdSBhbGxvY2F0ZWQsIGFuZCBuZXZlciB1c2Ug
ZnJlZUFsbCgpLgorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorY2xhc3MgQWxsb2NhdG9yIHsKK3B1
YmxpYzoKKyAgICBBbGxvY2F0b3IoKTsKKyAgICB+QWxsb2NhdG9yKCk7CisgICAgCisgICAgdm9p
ZCogYWxsb2NhdGUoKTsgLy8gVXNlIHBsYWNlbWVudCBuZXcgdG8gYWxsb2NhdGUsIGFuZCBhdm9p
ZCB1c2luZyB0aGlzIG1ldGhvZC4KKyAgICB2b2lkIGZyZWUoVCopOyAvLyBDYWxsIHRoaXMgbWV0
aG9kIHRvIGRlbGV0ZTsgbmV2ZXIgdXNlICdkZWxldGUnIGRpcmVjdGx5LgorICAgIAorICAgIHZv
aWQgZnJlZUFsbCgpOyAvLyBPbmx5IGNhbGwgdGhpcyBpZiBUIGhhcyBhIHRyaXZpYWwgZGVzdHJ1
Y3Rvci4KKyAgICB2b2lkIHJlc2V0KCk7IC8vIExpa2UgZnJlZUFsbCgpLCBidXQgYWxzbyByZXR1
cm5zIGFsbCBtZW1vcnkgdG8gdGhlIE9TLgorICAgIAorICAgIHVuc2lnbmVkIGluZGV4T2YoVCop
OworICAgIAorICAgIHN0YXRpYyBBbGxvY2F0b3IqIGFsbG9jYXRvck9mKFQqKTsKKyAgICAKK3By
aXZhdGU6CisgICAgdm9pZCogYnVtcEFsbG9jYXRlKCk7CisgICAgdm9pZCogZnJlZUxpc3RBbGxv
Y2F0ZSgpOworICAgIHZvaWQqIGFsbG9jYXRlU2xvdygpOworICAgIHZvaWQgZnJlZVJlZ2lvbnNT
dGFydGluZ0F0KFJlZ2lvbiopOworICAgIHZvaWQgc3RhcnRpbmdCdW1waW5nSW4oUmVnaW9uKik7
CisgICAgCisgICAgc3RydWN0IFJlZ2lvbiB7CisgICAgICAgIHN0YXRpYyBzaXplX3Qgc2l6ZSgp
IHsgcmV0dXJuIDY0ICogS0I7IH0KKyAgICAgICAgc3RhdGljIHNpemVfdCBoZWFkZXJTaXplKCkg
eyByZXR1cm4gc3RkOjptYXgoc2l6ZW9mKFJlZ2lvbiksIHNpemVvZihUKSk7IH0KKyAgICAgICAg
c3RhdGljIHVuc2lnbmVkIG51bWJlck9mVGhpbmdzUGVyUmVnaW9uKCkgeyByZXR1cm4gKHNpemUo
KSAtIGhlYWRlclNpemUoKSkgLyBzaXplb2YoVCk7IH0KKyAgICAgICAgVCogZGF0YSgpIHsgcmV0
dXJuIGJpdHdpc2VfY2FzdDxUKj4oYml0d2lzZV9jYXN0PGNoYXIqPih0aGlzKSArIGhlYWRlclNp
emUoKSk7IH0KKyAgICAgICAgYm9vbCBpc0luVGhpc1JlZ2lvbihUKiBwb2ludGVyKSB7IHJldHVy
biBzdGF0aWNfY2FzdDx1bnNpZ25lZD4ocG9pbnRlciAtIGRhdGEoKSkgPCBudW1iZXJPZlRoaW5n
c1BlclJlZ2lvbigpOyB9CisgICAgICAgIFJlZ2lvbiogcmVnaW9uRm9yKFQqIHBvaW50ZXIpIHsg
cmV0dXJuIGJpdHdpc2VfY2FzdDxSZWdpb24qPihiaXR3aXNlX2Nhc3Q8dWludHB0cl90Pihwb2lu
dGVyKSAmIH4oc2l6ZSgpIC0gMSkpOyB9CisgICAgICAgIAorICAgICAgICBQYWdlQWxsb2NhdGlv
bkFsaWduZWQgbV9hbGxvY2F0aW9uOworICAgICAgICBBbGxvY2F0b3IqIG1fYWxsb2NhdG9yOwor
ICAgICAgICBSZWdpb24qIG1fbmV4dDsKKyAgICB9OworICAgIAorICAgIFJlZ2lvbiogbV9yZWdp
b25IZWFkOworICAgIHZvaWQqKiBtX2ZyZWVMaXN0SGVhZDsKKyAgICBUKiBtX2J1bXBFbmQ7Cisg
ICAgdW5zaWduZWQgbV9idW1wUmVtYWluaW5nOworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4K
K2lubGluZSBBbGxvY2F0b3I6OkFsbG9jYXRvcigpCisgICAgOiBtX3JlZ2lvbkhlYWQoMCkKKyAg
ICAsIG1fZnJlZUxpc3RIZWFkKDApCisgICAgLCBtX2J1bXBSZW1haW5pbmcoMCkKK3sKK30KKwor
dGVtcGxhdGU8dHlwZW5hbWUgVD4KK2lubGluZSBBbGxvY2F0b3I6On5BbGxvY2F0b3IoKQorewor
ICAgIHJlc2V0KCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitBTFdBWVNfSU5MSU5FIHZv
aWQqIEFsbG9jYXRvcjo6YWxsb2NhdGUoKQoreworICAgIGlmIChMSUtFTFkodm9pZCogcmVzdWx0
ID0gYnVtcEFsbG9jYXRlKCkpKQorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIHJldHVybiBm
cmVlTGlzdEFsbG9jYXRlKCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+Cit2b2lkIEFsbG9j
YXRvcjo6ZnJlZShUKiBvYmplY3QpCit7CisgICAgb2JqZWN0LT5+VCgpOworICAgIAorICAgIHZv
aWQqKiBjZWxsID0gYml0d2lzZV9jYXN0PHZvaWQqKj4ob2JqZWN0KTsKKyAgICAqY2VsbCA9IG1f
ZnJlZUxpc3RIZWFkOworICAgIG1fZnJlZUxpc3RIZWFkID0gY2VsbDsKK30KKwordGVtcGxhdGU8
dHlwZW5hbWUgVD4KK3ZvaWQgQWxsb2NhdG9yOjpmcmVlQWxsKCkKK3sKKyAgICBpZiAoIW1fcmVn
aW9uSGVhZCkgeworICAgICAgICBBU1NFUlQoIW1fYnVtcFJlbWFpbmluZyk7CisgICAgICAgIEFT
U0VSVCghbV9mcmVlTGlzdEhlYWQpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAg
IC8vIFNpbmNlIHRoZSBjYWxsZXIgaXMgb3B0aW5nIG91dCBvZiBjYWxsaW5nIHRoZSBkZXN0cnVj
dG9yIGZvciBhbnkgYWxsb2NhdGVkIHRoaW5nLAorICAgIC8vIHdlIGhhdmUgdHdvIGNob2ljZXMs
IHBsdXMgYSBjb250aW51dW0gYmV0d2Vlbjogd2UgY2FuIGVpdGhlciBqdXN0IGRlbGV0ZSBhbGwg
cmVnaW9ucworICAgIC8vIChpLmUuIGNhbGwgcmVzZXQoKSksIG9yIHdlIGNhbiBtYWtlIGFsbCBy
ZWdpb25zIGF2YWlsYWJsZSBmb3IgcmV1c2UuIFdlIGRvIHNvbWV0aGluZworICAgIC8vIHRoYXQg
b3B0aW1pemVzIGZvciAoYSkgc3BlZWQgb2YgZnJlZUFsbCgpLCAoYikgdGhlIGFzc3VtcHRpb24g
dGhhdCBpZiB0aGUgdXNlciBjYWxscworICAgIC8vIGZyZWVBbGwoKSB0aGVuIHRoZXkgd2lsbCBw
cm9iYWJseSBiZSBjYWxsaW5nIGFsbG9jYXRlKCkgaW4gdGhlIG5lYXIgZnV0dXJlLiBOYW1lbHks
CisgICAgLy8gd2UgZnJlZSBhbGwgYnV0IG9uZSByZWdpb24sIGFuZCBtYWtlIHRoZSByZW1haW5p
bmcgcmVnaW9uIGEgYnVtcCBhbGxvY2F0aW9uIHJlZ2lvbi4KKyAgICAKKyAgICBmb3IgKFJlZ2lv
biogcmVnaW9uID0gbV9yZWdpb25IZWFkLT5tX25leHQ7IHJlZ2lvbjsgcmVnaW9uID0gcmVnaW9u
LT5tX25leHQpCisgICAgICAgIGJ1aWxkRnJlZUxpc3RJbihyZWdpb24pOworICAgIAorICAgIG1f
cmVnaW9uSGVhZC0+bV9uZXh0ID0gMDsKKyAgICBtX2ZyZWVMaXN0SGVhZCA9IDA7CisgICAgc3Rh
cnRCdW1waW5nSW4obV9yZWdpb25IZWFkKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK3Zv
aWQgQWxsb2NhdG9yOjpyZXNldCgpCit7CisgICAgZnJlZVJlZ2lvbnNTdGFydGluZ0F0KG1fcmVn
aW9uSGVhZCk7CisgICAgCisgICAgbV9yZWdpb25IZWFkID0gMDsKKyAgICBtX2ZyZWVMaXN0SGVh
ZCA9IDA7CisgICAgbV9idW1wUmVtYWluaW5nID0gMDsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUg
VD4KK3Vuc2lnbmVkIEFsbG9jYXRvcjo6aW5kZXhPZihUKiBvYmplY3QpCit7CisgICAgdW5zaWdu
ZWQgYmFzZUluZGV4ID0gMDsKKyAgICBmb3IgKFJlZ2lvbiogcmVnaW9uID0gbV9yZWdpb25IZWFk
OyByZWdpb247IHJlZ2lvbiA9IHJlZ2lvbi0+bV9uZXh0KSB7CisgICAgICAgIGlmIChyZWdpb24t
PmlzSW5UaGlzUmVnaW9uKG9iamVjdCkpCisgICAgICAgICAgICByZXR1cm4gYmFzZUluZGV4ICsg
KG9iamVjdCAtIHJlZ2lvbi0+ZGF0YSgpKTsKKyAgICAgICAgYmFzZUluZGV4ICs9IFJlZ2lvbjo6
bnVtYmVyT2ZUaGluZ3NQZXJSZWdpb24oKTsKKyAgICB9CisgICAgQ1JBU0goKTsKKyAgICByZXR1
cm4gMDsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK0FsbG9jYXRvciogQWxsb2NhdG9yOjph
bGxvY2F0b3JPZihUKiBvYmplY3QpCit7CisgICAgcmV0dXJuIFJlZ2lvbjo6cmVnaW9uRm9yKG9i
amVjdCktPm1fYWxsb2NhdG9yOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorQUxXQVlTX0lO
TElORSB2b2lkKiBBbGxvY2F0b3I6OmJ1bXBBbGxvY2F0ZSgpCit7CisgICAgaWYgKHVuc2lnbmVk
IHJlbWFpbmluZyA9IG1fYnVtcFJlbWFpbmluZykgeworICAgICAgICByZW1haW5pbmctLTsKKyAg
ICAgICAgbV9idW1wUmVtYWluaW5nID0gcmVtYWluaW5nOworICAgICAgICByZXR1cm4gbV9idW1w
RW5kIC0gKHJlbWFpbmluZyArIDEpOworICAgIH0KKyAgICByZXR1cm4gMDsKK30KKwordGVtcGxh
dGU8dHlwZW5hbWUgVD4KK3ZvaWQqIEFsbG9jYXRvcjo6ZnJlZUxpc3RBbGxvY2F0ZSgpCit7Cisg
ICAgdm9pZCoqIHJlc3VsdCA9IG1fZnJlZUxpc3RIZWFkOworICAgIGlmIChVTkxJS0VMWSghcmVz
dWx0KSkKKyAgICAgICAgcmV0dXJuIGFsbG9jYXRlU2xvdygpOworICAgIG1fZnJlZUxpc3RIZWFk
ID0gYml0d2lzZV9jYXN0PHZvaWQqKj4oKnJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30K
KwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK3ZvaWQqIEFsbG9jYXRvcjo6YWxsb2NhdGVTbG93KCkK
K3sKKyAgICBBU1NFUlQoIW1fZnJlZUxpc3RIZWFkKTsKKyAgICBBU1NFUlQoIW1fYnVtcFJlbWFp
bmluZyk7CisgICAgCisgICAgUGFnZUFsbG9jYXRpb25BbGlnbmVkIGFsbG9jYXRpb24gPSBQYWdl
QWxsb2NhdGlvbkFsaWduZWQ6OmFsbG9jYXRlKFJlZ2lvbjo6c2l6ZSgpLCBSZWdpb246OnNpemUo
KSwgT1NBbGxvY2F0b3I6OkpTR0NIZWFwUGFnZXMpOworICAgIGlmICghc3RhdGljX2Nhc3Q8Ym9v
bD4oYWxsb2NhdGlvbikpCisgICAgICAgIENSQVNIKCk7CisgICAgUmVnaW9uKiByZWdpb24gPSBz
dGF0aWNfY2FzdDxSZWdpb24qPihhbGxvY2F0aW9uLmJhc2UoKSk7CisgICAgcmVnaW9uLT5tX2Fs
bG9jYXRpb24gPSBtX2FsbG9jYXRpb247CisgICAgcmVnaW9uLT5tX2FsbG9jdG9yID0gdGhpczsK
KyAgICBzdGFydEJ1bXBpbmdJbihyZWdpb24pOworICAgIHJlZ2lvbi0+bV9uZXh0ID0gbV9yZWdp
b25IZWFkOworICAgIG1fcmVnaW9uSGVhZCA9IHJlZ2lvbjsKKyAgICAKKyAgICB2b2lkKiByZXN1
bHQgPSBidW1wQWxsb2NhdGUoKTsKKyAgICBBU1NFUlQocmVzdWx0KTsKKyAgICByZXR1cm4gcmVz
dWx0OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgordm9pZCBBbGxvY2F0b3I6OmZyZWVSZWdp
b25zU3RhcnRpbmdBdChSZWdpb24qIHJlZ2lvbikKK3sKKyAgICB3aGlsZSAocmVnaW9uKSB7Cisg
ICAgICAgIFJlZ2lvbiogbmV4dFJlZ2lvbiA9IHJlZ2lvbi0+bV9uZXh0OworICAgICAgICByZWdp
b24tPm1fYWxsb2NhdGlvbi5kZWFsbG9jYXRlKCk7CisgICAgICAgIHJlZ2lvbiA9IG5leHRSZWdp
b247CisgICAgfQorfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgordm9pZCBBbGxvY2F0b3I6OnN0
YXJ0QnVtcGluZ0luKFJlZ2lvbiogcmVnaW9uKQoreworICAgIG1fYnVtcEVuZCA9IHJlZ2lvbi0+
ZGF0YSgpICsgUmVnaW9uOjpudW1iZXJPZlRoaW5nc1BlclJlZ2lvbigpOworICAgIG1fYnVtcFJl
bWFpbmluZyA9IFJlZ2lvbjo6bnVtYmVyT2ZUaGluZ3NQZXJSZWdpb24oKTsKK30KKworfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRp
ZiAvLyBERkdBbGxvY2F0b3JfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0FyZ3VtZW50c1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRzU2ltcGxpZmljYXRpb25QaGFzZS5jcHAJKHJl
dmlzaW9uIDE0MDkwNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRz
U2ltcGxpZmljYXRpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE0OSwxMSArMTQ5LDEwIEBA
IHB1YmxpYzoKICAgICAgICAgICAgIGlmICghYmxvY2spCiAgICAgICAgICAgICAgICAgY29udGlu
dWU7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGluZGV4SW5CbG9jayA9IDA7IGluZGV4SW5C
bG9jayA8IGJsb2NrLT5zaXplKCk7ICsraW5kZXhJbkJsb2NrKSB7Ci0gICAgICAgICAgICAgICAg
Tm9kZUluZGV4IG5vZGVJbmRleCA9IGJsb2NrLT5hdChpbmRleEluQmxvY2spOwotICAgICAgICAg
ICAgICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW25vZGVJbmRleF07Ci0gICAgICAgICAgICAgICAg
aWYgKCFub2RlLnNob3VsZEdlbmVyYXRlKCkpCisgICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9
IGJsb2NrLT5hdChpbmRleEluQmxvY2spOworICAgICAgICAgICAgICAgIGlmICghbm9kZS0+c2hv
dWxkR2VuZXJhdGUoKSkKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAg
ICAgICAgc3dpdGNoIChub2RlLm9wKCkpIHsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUt
Pm9wKCkpIHsKICAgICAgICAgICAgICAgICBjYXNlIENyZWF0ZUFyZ3VtZW50czogewogICAgICAg
ICAgICAgICAgICAgICAvLyBJZ25vcmUgdGhpcyBvcC4gSWYgd2Ugc2VlIGEgbG9uZSBDcmVhdGVB
cmd1bWVudHMgdGhlbiB3ZSB3YW50IHRvCiAgICAgICAgICAgICAgICAgICAgIC8vIGNvbXBsZXRl
bHkgaWdub3JlIGl0IGJlY2F1c2U6CkBAIC0xNzMsMTYgKzE3MiwxNiBAQCBwdWJsaWM6CiAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBjYXNl
IFNldExvY2FsOiB7Ci0gICAgICAgICAgICAgICAgICAgIE5vZGUmIHNvdXJjZSA9IG1fZ3JhcGhb
bm9kZS5jaGlsZDEoKV07Ci0gICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSog
dmFyaWFibGVBY2Nlc3NEYXRhID0gbm9kZS52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKKyAgICAgICAg
ICAgICAgICAgICAgTm9kZSogc291cmNlID0gbm9kZS0+Y2hpbGQxKCkubm9kZSgpOworICAgICAg
ICAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9IG5v
ZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOwogICAgICAgICAgICAgICAgICAgICBpbnQgYXJndW1l
bnRzUmVnaXN0ZXIgPQotICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC51bmNoZWNrZWRB
cmd1bWVudHNSZWdpc3RlckZvcihub2RlLmNvZGVPcmlnaW4pOwotICAgICAgICAgICAgICAgICAg
ICBpZiAoc291cmNlLm9wKCkgIT0gQ3JlYXRlQXJndW1lbnRzICYmIHNvdXJjZS5vcCgpICE9IFBo
YW50b21Bcmd1bWVudHMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgudW5jaGVj
a2VkQXJndW1lbnRzUmVnaXN0ZXJGb3Iobm9kZS0+Y29kZU9yaWdpbik7CisgICAgICAgICAgICAg
ICAgICAgIGlmIChzb3VyY2UtPm9wKCkgIT0gQ3JlYXRlQXJndW1lbnRzICYmIHNvdXJjZS0+b3Ao
KSAhPSBQaGFudG9tQXJndW1lbnRzKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBNYWtl
IHN1cmUgdGhhdCB0aGUgc291cmNlIG9mIHRoZSBTZXRMb2NhbCBrbm93cyB0aGF0IGlmIGl0J3MK
ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGEgdmFyaWFibGUgdGhhdCB3ZSB0aGluayBpcyBh
bGlhc2VkIHRvIHRoZSBhcmd1bWVudHMsIHRoZW4gaXQKICAgICAgICAgICAgICAgICAgICAgICAg
IC8vIG1heSBlc2NhcGUgYXQgdGhpcyBwb2ludC4gSW4gZnV0dXJlLCB3ZSBjb3VsZCB0cmFjayB0
cmFuc2l0aXZlCiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhbGlhc2luZy4gQnV0IG5vdCB5
ZXQuCi0gICAgICAgICAgICAgICAgICAgICAgICBvYnNlcnZlQmFkQXJndW1lbnRzVXNlKG5vZGUu
Y2hpbGQxKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZUJhZEFyZ3VtZW50c1Vz
ZShzb3VyY2UpOwogICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBJZiB0aGlzIGlzIGFuIGFzc2lnbm1lbnQgdG8gdGhlIGFyZ3VtZW50cyByZWdpc3Rl
ciwgdGhlbgogICAgICAgICAgICAgICAgICAgICAgICAgLy8gcHJldGVuZCBhcyBpZiB0aGUgYXJn
dW1lbnRzIHdlcmUgY3JlYXRlZC4gV2UgZG9uJ3Qgd2FudCB0bwpAQCAtMTk1LDE0ICsxOTQsMTQg
QEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICAgICAgLy8gaW5pdF9sYXp5X3JlZyBzaW5j
ZSBpdCB0cmVhdHMgQ3JlYXRlQXJndW1lbnRzIGFzIHJlYWRpbmcKICAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIGxvY2FsIHZhcmlhYmxlcy4gVGhhdCBjb3VsZCBiZSBmaXhlZCwgYnV0IGl0J3Mg
ZWFzaWVyIHRvCiAgICAgICAgICAgICAgICAgICAgICAgICAvLyB3b3JrIGFyb3VuZCB0aGlzIGhl
cmUuCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc291cmNlLm9wKCkgPT0gSlNDb25zdGFu
dAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmICFzb3VyY2UudmFsdWVPZkpTQ29uc3Rh
bnQoY29kZUJsb2NrKCkpKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNvdXJjZS0+b3Ao
KSA9PSBKU0NvbnN0YW50CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgIXNvdXJjZS0+
dmFsdWVPZkpTQ29uc3RhbnQoY29kZUJsb2NrKCkpKQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoYXJndW1lbnRzUmVnaXN0ZXIgIT0gSW52YWxpZFZpcnR1YWxSZWdpc3RlcgogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICYmICh2YXJpYWJsZUFjY2Vzc0RhdGEtPmxvY2FsKCkg
PT0gYXJndW1lbnRzUmVnaXN0ZXIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwg
dmFyaWFibGVBY2Nlc3NEYXRhLT5sb2NhbCgpID09IHVubW9kaWZpZWRBcmd1bWVudHNSZWdpc3Rl
cihhcmd1bWVudHNSZWdpc3RlcikpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9j
cmVhdGVzQXJndW1lbnRzLmFkZChub2RlLmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBtX2NyZWF0ZXNBcmd1bWVudHMuYWRkKG5vZGUtPmNv
ZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KIApAQCAtMjE0LDE5ICsyMTMsMTkgQEAg
cHVibGljOgogICAgICAgICAgICAgICAgICAgICAgICAgQXJndW1lbnRzQWxpYXNpbmdEYXRhJiBk
YXRhID0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2FyZ3VtZW50c0FsaWFzaW5nLmZp
bmQodmFyaWFibGVBY2Nlc3NEYXRhKS0+dmFsdWU7CiAgICAgICAgICAgICAgICAgICAgICAgICBk
YXRhLm1lcmdlTm9uQXJndW1lbnRzQXNzaWdubWVudCgpOwotICAgICAgICAgICAgICAgICAgICAg
ICAgZGF0YS5tZXJnZUNhbGxDb250ZXh0KG5vZGUuY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUp
OworICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5tZXJnZUNhbGxDb250ZXh0KG5vZGUtPmNv
ZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIGlmIChhcmd1bWVu
dHNSZWdpc3RlciAhPSBJbnZhbGlkVmlydHVhbFJlZ2lzdGVyCiAgICAgICAgICAgICAgICAgICAg
ICAgICAmJiAodmFyaWFibGVBY2Nlc3NEYXRhLT5sb2NhbCgpID09IGFyZ3VtZW50c1JlZ2lzdGVy
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgdmFyaWFibGVBY2Nlc3NEYXRhLT5sb2Nh
bCgpID09IHVubW9kaWZpZWRBcmd1bWVudHNSZWdpc3Rlcihhcmd1bWVudHNSZWdpc3RlcikpKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS5jb2RlT3JpZ2luLmlubGluZUNhbGxG
cmFtZSA9PSBzb3VyY2UuY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpCisgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAobm9kZS0+Y29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUgPT0gc291cmNl
LT5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fY3JlYXRlc0FyZ3VtZW50cy5hZGQo
c291cmNlLmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIG1fY3JlYXRlc0FyZ3VtZW50cy5hZGQoc291cmNlLT5jb2RlT3JpZ2luLmlubGluZUNhbGxG
cmFtZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgICAgICBpZiAodmFyaWFibGVBY2Nlc3NEYXRhLT5pc0NhcHR1
cmVkKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fY3JlYXRlc0FyZ3VtZW50cy5hZGQo
c291cmNlLmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIG1fY3JlYXRlc0FyZ3VtZW50cy5hZGQoc291cmNlLT5jb2RlT3JpZ2luLmlubGluZUNhbGxG
cmFtZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgICAgICBBcmd1bWVudHNBbGlhc2luZ0RhdGEmIGRhdGEgPQpA
QCAtMjM0LDI5ICsyMzMsMjkgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICBkYXRhLm1l
cmdlQXJndW1lbnRzQXNzaWdubWVudCgpOwogICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGVu
c3VyZXMgdGhhdCB0aGUgdmFyaWFibGUncyB1c2VzIGFyZSBpbiB0aGUgc2FtZSBjb250ZXh0IGFz
CiAgICAgICAgICAgICAgICAgICAgIC8vIHRoZSBhcmd1bWVudHMgaXQgaXMgYWxpYXNpbmcuCi0g
ICAgICAgICAgICAgICAgICAgIGRhdGEubWVyZ2VDYWxsQ29udGV4dChub2RlLmNvZGVPcmlnaW4u
aW5saW5lQ2FsbEZyYW1lKTsKLSAgICAgICAgICAgICAgICAgICAgZGF0YS5tZXJnZUNhbGxDb250
ZXh0KHNvdXJjZS5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSk7CisgICAgICAgICAgICAgICAg
ICAgIGRhdGEubWVyZ2VDYWxsQ29udGV4dChub2RlLT5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFt
ZSk7CisgICAgICAgICAgICAgICAgICAgIGRhdGEubWVyZ2VDYWxsQ29udGV4dChzb3VyY2UtPmNv
ZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBj
YXNlIEdldExvY2FsOgogICAgICAgICAgICAgICAgIGNhc2UgUGhpOiB7Ci0gICAgICAgICAgICAg
ICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhID0gbm9kZS52YXJp
YWJsZUFjY2Vzc0RhdGEoKTsKKyAgICAgICAgICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRh
KiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKICAgICAg
ICAgICAgICAgICAgICAgaWYgKHZhcmlhYmxlQWNjZXNzRGF0YS0+aXNDYXB0dXJlZCgpKQogICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIEFyZ3VtZW50
c0FsaWFzaW5nRGF0YSYgZGF0YSA9CiAgICAgICAgICAgICAgICAgICAgICAgICBtX2FyZ3VtZW50
c0FsaWFzaW5nLmZpbmQodmFyaWFibGVBY2Nlc3NEYXRhKS0+dmFsdWU7Ci0gICAgICAgICAgICAg
ICAgICAgIGRhdGEubWVyZ2VDYWxsQ29udGV4dChub2RlLmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZy
YW1lKTsKKyAgICAgICAgICAgICAgICAgICAgZGF0YS5tZXJnZUNhbGxDb250ZXh0KG5vZGUtPmNv
ZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBj
YXNlIEZsdXNoOiB7Ci0gICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFy
aWFibGVBY2Nlc3NEYXRhID0gbm9kZS52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKKyAgICAgICAgICAg
ICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBub2RlLT52
YXJpYWJsZUFjY2Vzc0RhdGEoKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKHZhcmlhYmxlQWNj
ZXNzRGF0YS0+aXNDYXB0dXJlZCgpKQogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICAgICAgICAgIEFyZ3VtZW50c0FsaWFzaW5nRGF0YSYgZGF0YSA9CiAgICAgICAg
ICAgICAgICAgICAgICAgICBtX2FyZ3VtZW50c0FsaWFzaW5nLmZpbmQodmFyaWFibGVBY2Nlc3NE
YXRhKS0+dmFsdWU7Ci0gICAgICAgICAgICAgICAgICAgIGRhdGEubWVyZ2VDYWxsQ29udGV4dChu
b2RlLmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgZGF0
YS5tZXJnZUNhbGxDb250ZXh0KG5vZGUtPmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKTsKICAg
ICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIC8vIElmIGEgdmFyaWFibGUg
aXMgdXNlZCBpbiBhIGZsdXNoIHRoZW4gYnkgZGVmaW5pdGlvbiBpdCBlc2NhcGVzLgogICAgICAg
ICAgICAgICAgICAgICBkYXRhLmVzY2FwZXMgPSB0cnVlOwpAQCAtMjY0LDE4ICsyNjMsMTggQEAg
cHVibGljOgogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAg
ICAgICAgICAgY2FzZSBTZXRBcmd1bWVudDogewotICAgICAgICAgICAgICAgICAgICBWYXJpYWJs
ZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9IG5vZGUudmFyaWFibGVBY2Nlc3NEYXRh
KCk7CisgICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nl
c3NEYXRhID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CiAgICAgICAgICAgICAgICAgICAg
IGlmICh2YXJpYWJsZUFjY2Vzc0RhdGEtPmlzQ2FwdHVyZWQoKSkKICAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICBBcmd1bWVudHNBbGlhc2luZ0RhdGEm
IGRhdGEgPQogICAgICAgICAgICAgICAgICAgICAgICAgbV9hcmd1bWVudHNBbGlhc2luZy5maW5k
KHZhcmlhYmxlQWNjZXNzRGF0YSktPnZhbHVlOwogICAgICAgICAgICAgICAgICAgICBkYXRhLm1l
cmdlTm9uQXJndW1lbnRzQXNzaWdubWVudCgpOwotICAgICAgICAgICAgICAgICAgICBkYXRhLm1l
cmdlQ2FsbENvbnRleHQobm9kZS5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSk7CisgICAgICAg
ICAgICAgICAgICAgIGRhdGEubWVyZ2VDYWxsQ29udGV4dChub2RlLT5jb2RlT3JpZ2luLmlubGlu
ZUNhbGxGcmFtZSk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgY2FzZSBHZXRCeVZhbDog
ewotICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS5hcnJheU1vZGUoKS50eXBlKCkgIT0gQXJy
YXk6OkFyZ3VtZW50cykgeworICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS0+YXJyYXlNb2Rl
KCkudHlwZSgpICE9IEFycmF5OjpBcmd1bWVudHMpIHsKICAgICAgICAgICAgICAgICAgICAgICAg
IG9ic2VydmVCYWRBcmd1bWVudHNVc2VzKG5vZGUpOwogICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIH0KQEAgLTI4MywxOCArMjgyLDE4IEBAIHB1Ymxp
YzoKICAgICAgICAgICAgICAgICAgICAgLy8gVGhhdCdzIHNvIGF3ZnVsIGFuZCBwcmV0dHkgbXVj
aCBpbXBvc3NpYmxlIHNpbmNlIGl0IHdvdWxkCiAgICAgICAgICAgICAgICAgICAgIC8vIGltcGx5
IHRoYXQgdGhlIGFyZ3VtZW50cyB3ZXJlIHByZWRpY3RlZCBpbnRlZ2VyLCBidXQgaXQncwogICAg
ICAgICAgICAgICAgICAgICAvLyBnb29kIHRvIGJlIGRlZmVuc2l2ZSBhbmQgdGhvcm91Z2guCi0g
ICAgICAgICAgICAgICAgICAgIG9ic2VydmVCYWRBcmd1bWVudHNVc2Uobm9kZS5jaGlsZDIoKSk7
Ci0gICAgICAgICAgICAgICAgICAgIG9ic2VydmVQcm9wZXJBcmd1bWVudHNVc2Uobm9kZSwgbm9k
ZS5jaGlsZDEoKSk7CisgICAgICAgICAgICAgICAgICAgIG9ic2VydmVCYWRBcmd1bWVudHNVc2Uo
bm9kZS0+Y2hpbGQyKCkubm9kZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZVByb3Bl
ckFyZ3VtZW50c1VzZShub2RlLCBub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAg
ICAgICAgICAgY2FzZSBHZXRBcnJheUxlbmd0aDogewotICAgICAgICAgICAgICAgICAgICBpZiAo
bm9kZS5hcnJheU1vZGUoKS50eXBlKCkgIT0gQXJyYXk6OkFyZ3VtZW50cykgeworICAgICAgICAg
ICAgICAgICAgICBpZiAobm9kZS0+YXJyYXlNb2RlKCkudHlwZSgpICE9IEFycmF5OjpBcmd1bWVu
dHMpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIG9ic2VydmVCYWRBcmd1bWVudHNVc2VzKG5v
ZGUpOwogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBvYnNlcnZl
UHJvcGVyQXJndW1lbnRzVXNlKG5vZGUsIG5vZGUuY2hpbGQxKCkpOworICAgICAgICAgICAgICAg
ICAgICBvYnNlcnZlUHJvcGVyQXJndW1lbnRzVXNlKG5vZGUsIG5vZGUtPmNoaWxkMSgpKTsKICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgICAgICAKQEAgLTMzNSwxNiArMzM0LDE1IEBAIHB1YmxpYzoKICAgICAgICAgICAgIGlmICgh
YmxvY2spCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGluZGV4SW5CbG9jayA9IDA7IGluZGV4SW5CbG9jayA8IGJsb2NrLT5zaXplKCk7ICsraW5k
ZXhJbkJsb2NrKSB7Ci0gICAgICAgICAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRleCA9IGJsb2Nr
LT5hdChpbmRleEluQmxvY2spOwotICAgICAgICAgICAgICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBo
W25vZGVJbmRleF07Ci0gICAgICAgICAgICAgICAgaWYgKCFub2RlLnNob3VsZEdlbmVyYXRlKCkp
CisgICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5hdChpbmRleEluQmxvY2spOwor
ICAgICAgICAgICAgICAgIGlmICghbm9kZS0+c2hvdWxkR2VuZXJhdGUoKSkKICAgICAgICAgICAg
ICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGUub3AoKSAhPSBTZXRM
b2NhbCkKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSAhPSBTZXRMb2NhbCkKICAgICAg
ICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgTm9kZSYgc291cmNlID0g
bV9ncmFwaFtub2RlLmNoaWxkMSgpXTsKLSAgICAgICAgICAgICAgICBpZiAoc291cmNlLm9wKCkg
IT0gQ3JlYXRlQXJndW1lbnRzKQorICAgICAgICAgICAgICAgIE5vZGUqIHNvdXJjZSA9IG5vZGUt
PmNoaWxkMSgpLm5vZGUoKTsKKyAgICAgICAgICAgICAgICBpZiAoc291cmNlLT5vcCgpICE9IENy
ZWF0ZUFyZ3VtZW50cykKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAg
ICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBub2RlLnZhcmlh
YmxlQWNjZXNzRGF0YSgpOworICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFy
aWFibGVBY2Nlc3NEYXRhID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CiAgICAgICAgICAg
ICAgICAgaWYgKHZhcmlhYmxlQWNjZXNzRGF0YS0+aXNDYXB0dXJlZCgpKSB7CiAgICAgICAgICAg
ICAgICAgICAgIC8vIFRoZSBjYXB0dXJlZCBjYXNlIHdvdWxkIGhhdmUgYWxyZWFkeSBiZWVuIHRh
a2VuIGNhcmUgb2YgaW4gdGhlCiAgICAgICAgICAgICAgICAgICAgIC8vIHByZXZpb3VzIHBhc3Mu
CkBAIC0zNTYsNyArMzU0LDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIGlmIChkYXRhLmlz
VmFsaWQoKSkKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAg
Ci0gICAgICAgICAgICAgICAgbV9jcmVhdGVzQXJndW1lbnRzLmFkZChzb3VyY2UuY29kZU9yaWdp
bi5pbmxpbmVDYWxsRnJhbWUpOworICAgICAgICAgICAgICAgIG1fY3JlYXRlc0FyZ3VtZW50cy5h
ZGQoc291cmNlLT5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSk7CiAgICAgICAgICAgICB9CiAg
ICAgICAgIH0KICAgICAgICAgCkBAIC00MTQsMjQgKzQxMiwyMyBAQCBwdWJsaWM6CiAgICAgICAg
ICAgICBpZiAoIWJsb2NrKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpbmRleEluQmxvY2sgPSAwOyBpbmRleEluQmxvY2sgPCBibG9jay0+c2l6
ZSgpOyArK2luZGV4SW5CbG9jaykgewotICAgICAgICAgICAgICAgIE5vZGVJbmRleCBub2RlSW5k
ZXggPSBibG9jay0+YXQoaW5kZXhJbkJsb2NrKTsKLSAgICAgICAgICAgICAgICBOb2RlJiBub2Rl
ID0gbV9ncmFwaFtub2RlSW5kZXhdOwotICAgICAgICAgICAgICAgIGlmICghbm9kZS5zaG91bGRH
ZW5lcmF0ZSgpKQorICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+YXQoaW5kZXhJ
bkJsb2NrKTsKKyAgICAgICAgICAgICAgICBpZiAoIW5vZGUtPnNob3VsZEdlbmVyYXRlKCkpCiAg
ICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIAotICAgICAgICAg
ICAgICAgIHN3aXRjaCAobm9kZS5vcCgpKSB7CisgICAgICAgICAgICAgICAgc3dpdGNoIChub2Rl
LT5vcCgpKSB7CiAgICAgICAgICAgICAgICAgY2FzZSBTZXRMb2NhbDogewotICAgICAgICAgICAg
ICAgICAgICBOb2RlJiBzb3VyY2UgPSBtX2dyYXBoW25vZGUuY2hpbGQxKCldOwotICAgICAgICAg
ICAgICAgICAgICBpZiAoc291cmNlLm9wKCkgIT0gQ3JlYXRlQXJndW1lbnRzKQorICAgICAgICAg
ICAgICAgICAgICBOb2RlKiBzb3VyY2UgPSBub2RlLT5jaGlsZDEoKS5ub2RlKCk7CisgICAgICAg
ICAgICAgICAgICAgIGlmIChzb3VyY2UtPm9wKCkgIT0gQ3JlYXRlQXJndW1lbnRzKQogICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAg
ICAgICAgICAgICBpZiAobV9jcmVhdGVzQXJndW1lbnRzLmNvbnRhaW5zKHNvdXJjZS5jb2RlT3Jp
Z2luLmlubGluZUNhbGxGcmFtZSkpCisgICAgICAgICAgICAgICAgICAgIGlmIChtX2NyZWF0ZXNB
cmd1bWVudHMuY29udGFpbnMoc291cmNlLT5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSkpCiAg
ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgCi0gICAg
ICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhID0g
bm9kZS52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKKyAgICAgICAgICAgICAgICAgICAgVmFyaWFibGVB
Y2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEo
KTsKICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIGlmIChtX2dyYXBo
LmFyZ3VtZW50c1JlZ2lzdGVyRm9yKG5vZGUuY29kZU9yaWdpbikgPT0gdmFyaWFibGVBY2Nlc3NE
YXRhLT5sb2NhbCgpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICB8fCB1bm1vZGlmaWVkQXJn
dW1lbnRzUmVnaXN0ZXIobV9ncmFwaC5hcmd1bWVudHNSZWdpc3RlckZvcihub2RlLmNvZGVPcmln
aW4pKSA9PSB2YXJpYWJsZUFjY2Vzc0RhdGEtPmxvY2FsKCkpCisgICAgICAgICAgICAgICAgICAg
IGlmIChtX2dyYXBoLmFyZ3VtZW50c1JlZ2lzdGVyRm9yKG5vZGUtPmNvZGVPcmlnaW4pID09IHZh
cmlhYmxlQWNjZXNzRGF0YS0+bG9jYWwoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwg
dW5tb2RpZmllZEFyZ3VtZW50c1JlZ2lzdGVyKG1fZ3JhcGguYXJndW1lbnRzUmVnaXN0ZXJGb3Io
bm9kZS0+Y29kZU9yaWdpbikpID09IHZhcmlhYmxlQWNjZXNzRGF0YS0+bG9jYWwoKSkKICAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgICAgICAgICAgICAgIEFTU0VSVCgh
dmFyaWFibGVBY2Nlc3NEYXRhLT5pc0NhcHR1cmVkKCkpOwpAQCAtNDY5LDE2ICs0NjYsMTYgQEAg
cHVibGljOgogICAgICAgICAgICAgICAgIGNhc2UgRm9yd2FyZFN0cnVjdHVyZVRyYW5zaXRpb25X
YXRjaHBvaW50OgogICAgICAgICAgICAgICAgIGNhc2UgQ2hlY2tBcnJheTogewogICAgICAgICAg
ICAgICAgICAgICAvLyBXZSBjYW4ganVzdCBnZXQgcmlkIG9mIHRoaXMgbm9kZSwgaWYgaXQgcmVm
ZXJlbmNlcyBhIHBoYW50b20gYXJndW1lbnQuCi0gICAgICAgICAgICAgICAgICAgIGlmICghaXNP
S1RvT3B0aW1pemUobV9ncmFwaFtub2RlLmNoaWxkMSgpXSkpCisgICAgICAgICAgICAgICAgICAg
IGlmICghaXNPS1RvT3B0aW1pemUobm9kZS0+Y2hpbGQxKCkubm9kZSgpKSkKICAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLmRlcmVmKG5v
ZGUuY2hpbGQxKCkpOwotICAgICAgICAgICAgICAgICAgICBub2RlLnNldE9wQW5kRGVmYXVsdEZs
YWdzKFBoYW50b20pOwotICAgICAgICAgICAgICAgICAgICBub2RlLmNoaWxkcmVuLnNldENoaWxk
MShFZGdlKCkpOworICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLmRlcmVmKG5vZGUtPmNoaWxk
MSgpKTsKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+c2V0T3BBbmREZWZhdWx0RmxhZ3MoUGhh
bnRvbSk7CisgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkcmVuLnNldENoaWxkMShFZGdl
KCkpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGNhc2UgR2V0QnlWYWw6IHsKLSAgICAg
ICAgICAgICAgICAgICAgaWYgKG5vZGUuYXJyYXlNb2RlKCkudHlwZSgpICE9IEFycmF5OjpBcmd1
bWVudHMpCisgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS50eXBlKCkg
IT0gQXJyYXk6OkFyZ3VtZW50cykKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogCiAg
ICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgY2FuIGJlIHNpbXBsaWZpZWQgdG8gR2V0TXlBcmd1
bWVudEJ5VmFsIGlmIHdlIGtub3cgdGhhdApAQCAtNDg4LDI4ICs0ODUsMjggQEAgcHVibGljOgog
ICAgICAgICAgICAgICAgICAgICAvLyAyKSBJdHMgZmlyc3QgY2hpbGQgaXMgQ3JlYXRlQXJndW1l
bnRzIGFuZCBpdHMgSW5saW5lQ2FsbEZyYW1lKgogICAgICAgICAgICAgICAgICAgICAvLyAgICBp
cyBub3QgbWFya2VkIGFzIGNyZWF0aW5nIGFyZ3VtZW50cy4KICAgICAgICAgICAgICAgICAgICAg
Ci0gICAgICAgICAgICAgICAgICAgIGlmICghaXNPS1RvT3B0aW1pemUobV9ncmFwaFtub2RlLmNo
aWxkMSgpXSkpCisgICAgICAgICAgICAgICAgICAgIGlmICghaXNPS1RvT3B0aW1pemUobm9kZS0+
Y2hpbGQxKCkubm9kZSgpKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5kZXJlZihub2RlLmNo
aWxkMSgpKTsKLSAgICAgICAgICAgICAgICAgICAgbm9kZS5jaGlsZHJlbi5jaGlsZDEoKSA9IG5v
ZGUuY2hpbGRyZW4uY2hpbGQyKCk7Ci0gICAgICAgICAgICAgICAgICAgIG5vZGUuY2hpbGRyZW4u
Y2hpbGQyKCkgPSBFZGdlKCk7Ci0gICAgICAgICAgICAgICAgICAgIG5vZGUuc2V0T3BBbmREZWZh
dWx0RmxhZ3MoR2V0TXlBcmd1bWVudEJ5VmFsKTsKKyAgICAgICAgICAgICAgICAgICAgbV9ncmFw
aC5kZXJlZihub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxk
cmVuLmNoaWxkMSgpID0gbm9kZS0+Y2hpbGRyZW4uY2hpbGQyKCk7CisgICAgICAgICAgICAgICAg
ICAgIG5vZGUtPmNoaWxkcmVuLmNoaWxkMigpID0gRWRnZSgpOworICAgICAgICAgICAgICAgICAg
ICBub2RlLT5zZXRPcEFuZERlZmF1bHRGbGFncyhHZXRNeUFyZ3VtZW50QnlWYWwpOwogICAgICAg
ICAgICAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgLS1pbmRl
eEluQmxvY2s7IC8vIEZvcmNlIHJlY29uc2lkZXJhdGlvbiBvZiB0aGlzIG9wIG5vdyB0aGF0IGl0
J3MgYSBHZXRNeUFyZ3VtZW50QnlWYWwuCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgY2Fz
ZSBHZXRBcnJheUxlbmd0aDogewotICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS5hcnJheU1v
ZGUoKS50eXBlKCkgIT0gQXJyYXk6OkFyZ3VtZW50cykKKyAgICAgICAgICAgICAgICAgICAgaWYg
KG5vZGUtPmFycmF5TW9kZSgpLnR5cGUoKSAhPSBBcnJheTo6QXJndW1lbnRzKQogICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAg
ICAgICAgICBpZiAoIWlzT0tUb09wdGltaXplKG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0pKQorICAg
ICAgICAgICAgICAgICAgICBpZiAoIWlzT0tUb09wdGltaXplKG5vZGUtPmNoaWxkMSgpLm5vZGUo
KSkpCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAg
Ci0gICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguZGVyZWYobm9kZS5jaGlsZDEoKSk7Ci0gICAg
ICAgICAgICAgICAgICAgIG5vZGUuY2hpbGRyZW4uY2hpbGQxKCkgPSBFZGdlKCk7Ci0gICAgICAg
ICAgICAgICAgICAgIG5vZGUuc2V0T3BBbmREZWZhdWx0RmxhZ3MoR2V0TXlBcmd1bWVudHNMZW5n
dGgpOworICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLmRlcmVmKG5vZGUtPmNoaWxkMSgpKTsK
KyAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGRyZW4uY2hpbGQxKCkgPSBFZGdlKCk7Cisg
ICAgICAgICAgICAgICAgICAgIG5vZGUtPnNldE9wQW5kRGVmYXVsdEZsYWdzKEdldE15QXJndW1l
bnRzTGVuZ3RoKTsKICAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCA9IHRydWU7CiAgICAgICAg
ICAgICAgICAgICAgIC0taW5kZXhJbkJsb2NrOyAvLyBGb3JjZSByZWNvbnNpZGVyYXRpb24gb2Yg
dGhpcyBvcCBub2V3IHRoYXQgaXQncyBhIEdldE15QXJndW1lbnRzTGVuZ3RoLgogICAgICAgICAg
ICAgICAgICAgICBicmVhazsKQEAgLTUxNywxNiArNTE0LDE2IEBAIHB1YmxpYzoKICAgICAgICAg
ICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgY2FzZSBHZXRNeUFyZ3VtZW50c0xlbmd0aDoK
ICAgICAgICAgICAgICAgICBjYXNlIEdldE15QXJndW1lbnRzTGVuZ3RoU2FmZTogewotICAgICAg
ICAgICAgICAgICAgICBpZiAobV9jcmVhdGVzQXJndW1lbnRzLmNvbnRhaW5zKG5vZGUuY29kZU9y
aWdpbi5pbmxpbmVDYWxsRnJhbWUpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQo
bm9kZS5vcCgpID09IEdldE15QXJndW1lbnRzTGVuZ3RoU2FmZSk7CisgICAgICAgICAgICAgICAg
ICAgIGlmIChtX2NyZWF0ZXNBcmd1bWVudHMuY29udGFpbnMobm9kZS0+Y29kZU9yaWdpbi5pbmxp
bmVDYWxsRnJhbWUpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQobm9kZS0+b3Ao
KSA9PSBHZXRNeUFyZ3VtZW50c0xlbmd0aFNhZmUpOwogICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgaWYgKG5v
ZGUub3AoKSA9PSBHZXRNeUFyZ3VtZW50c0xlbmd0aFNhZmUpIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIG5vZGUuc2V0T3AoR2V0TXlBcmd1bWVudHNMZW5ndGgpOworICAgICAgICAgICAgICAg
ICAgICBpZiAobm9kZS0+b3AoKSA9PSBHZXRNeUFyZ3VtZW50c0xlbmd0aFNhZmUpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIG5vZGUtPnNldE9wKEdldE15QXJndW1lbnRzTGVuZ3RoKTsKICAg
ICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBDb2RlT3JpZ2lu
IGNvZGVPcmlnaW4gPSBub2RlLmNvZGVPcmlnaW47CisgICAgICAgICAgICAgICAgICAgIENvZGVP
cmlnaW4gY29kZU9yaWdpbiA9IG5vZGUtPmNvZGVPcmlnaW47CiAgICAgICAgICAgICAgICAgICAg
IGlmICghY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpCiAgICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgCkBAIC01MzcsMzIgKzUzNCwzMiBAQCBwdWJs
aWM6CiAgICAgICAgICAgICAgICAgICAgICAgICBDaGVja0FyZ3VtZW50c05vdENyZWF0ZWQsIGNv
ZGVPcmlnaW4pOwogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgbV9n
cmFwaC5jb252ZXJ0VG9Db25zdGFudCgKLSAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVJbmRl
eCwganNOdW1iZXIoY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50cy5zaXplKCkg
LSAxKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBub2RlLCBqc051bWJlcihjb2RlT3JpZ2lu
LmlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzLnNpemUoKSAtIDEpKTsKICAgICAgICAgICAgICAg
ICAgICAgY2hhbmdlZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgY2FzZSBH
ZXRNeUFyZ3VtZW50QnlWYWw6CiAgICAgICAgICAgICAgICAgY2FzZSBHZXRNeUFyZ3VtZW50QnlW
YWxTYWZlOiB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChtX2NyZWF0ZXNBcmd1bWVudHMuY29u
dGFpbnMobm9kZS5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSkpIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIEFTU0VSVChub2RlLm9wKCkgPT0gR2V0TXlBcmd1bWVudEJ5VmFsU2FmZSk7Cisg
ICAgICAgICAgICAgICAgICAgIGlmIChtX2NyZWF0ZXNBcmd1bWVudHMuY29udGFpbnMobm9kZS0+
Y29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBB
U1NFUlQobm9kZS0+b3AoKSA9PSBHZXRNeUFyZ3VtZW50QnlWYWxTYWZlKTsKICAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgICAgIGlmIChub2RlLm9wKCkgPT0gR2V0TXlBcmd1bWVudEJ5VmFsU2FmZSkgewotICAgICAg
ICAgICAgICAgICAgICAgICAgbm9kZS5zZXRPcChHZXRNeUFyZ3VtZW50QnlWYWwpOworICAgICAg
ICAgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBHZXRNeUFyZ3VtZW50QnlWYWxTYWZlKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5zZXRPcChHZXRNeUFyZ3VtZW50QnlWYWwp
OwogICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCA9IHRydWU7CiAgICAgICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgaWYgKCFub2RlLmNvZGVPcmlnaW4uaW5saW5l
Q2FsbEZyYW1lKQorICAgICAgICAgICAgICAgICAgICBpZiAoIW5vZGUtPmNvZGVPcmlnaW4uaW5s
aW5lQ2FsbEZyYW1lKQogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAgICAgICAgIGlmICghbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5oYXNDb25zdGFudCgpKQorICAg
ICAgICAgICAgICAgICAgICBpZiAoIW5vZGUtPmNoaWxkMSgpLT5oYXNDb25zdGFudCgpKQogICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIEpTVmFsdWUg
dmFsdWUgPSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLnZhbHVlT2ZKU0NvbnN0YW50KGNvZGVCbG9j
aygpKTsKKyAgICAgICAgICAgICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IG5vZGUtPmNoaWxkMSgp
LT52YWx1ZU9mSlNDb25zdGFudChjb2RlQmxvY2soKSk7CiAgICAgICAgICAgICAgICAgICAgIGlm
ICghdmFsdWUuaXNJbnQzMigpKQogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICAgICAgICAgIGludDMyX3QgaW5kZXggPSB2YWx1ZS5hc0ludDMyKCk7CiAgICAgICAg
ICAgICAgICAgICAgIGlmIChpbmRleCA8IDAKICAgICAgICAgICAgICAgICAgICAgICAgIHx8IHN0
YXRpY19jYXN0PHNpemVfdD4oaW5kZXggKyAxKSA+PQotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG5vZGUuY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50cy5zaXplKCkpCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y29kZU9yaWdpbi5pbmxpbmVDYWxsRnJh
bWUtPmFyZ3VtZW50cy5zaXplKCkpCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIC8vIFdlIGtub3cgd2hpY2gg
YXJndW1lbnQgdGhpcyBpcyBhY2Nlc3NpbmcuIEJ1dCBvbmx5IGFmdGVyIHdlIGhhdmUgY2hlY2tl
ZApAQCAtNTc0LDEzICs1NzEsMTMgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICAvLyBo
YXMgcnVuIC0gdGhlcmVmb3JlIGl0IG1ha2VzIGxpdHRsZSBzZW5zZSB0byBsaW5rIHRoZSBHZXRM
b2NhbCBvcGVyYXRpb24KICAgICAgICAgICAgICAgICAgICAgLy8gaW50byB0aGUgVmFyaWFibGVB
Y2Nlc3NEYXRhIGFuZCBQaGkgZ3JhcGhzLgogCi0gICAgICAgICAgICAgICAgICAgIENvZGVPcmln
aW4gY29kZU9yaWdpbiA9IG5vZGUuY29kZU9yaWdpbjsKLSAgICAgICAgICAgICAgICAgICAgQWRq
YWNlbmN5TGlzdCBjaGlsZHJlbiA9IG5vZGUuY2hpbGRyZW47CisgICAgICAgICAgICAgICAgICAg
IENvZGVPcmlnaW4gY29kZU9yaWdpbiA9IG5vZGUtPmNvZGVPcmlnaW47CisgICAgICAgICAgICAg
ICAgICAgIEFkamFjZW5jeUxpc3QgY2hpbGRyZW4gPSBub2RlLT5jaGlsZHJlbjsKICAgICAgICAg
ICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIG5vZGUuY29udmVydFRvR2V0TG9jYWxV
bmxpbmtlZCgKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y29udmVydFRvR2V0TG9jYWxVbmxp
bmtlZCgKICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rl
cj4oCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS5jb2RlT3JpZ2luLmlubGluZUNh
bGxGcmFtZS0+c3RhY2tPZmZzZXQgKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3Jh
cGguYmFzZWxpbmVDb2RlQmxvY2tGb3Iobm9kZS5jb2RlT3JpZ2luKS0+YXJndW1lbnRJbmRleEFm
dGVyQ2FwdHVyZShpbmRleCkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5j
b2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG1fZ3JhcGguYmFzZWxpbmVDb2RlQmxvY2tGb3Iobm9kZS0+Y29kZU9yaWdp
biktPmFyZ3VtZW50SW5kZXhBZnRlckNhcHR1cmUoaW5kZXgpKSk7CiAKICAgICAgICAgICAgICAg
ICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCiAgICAgICAgICAgICAgICAgICAgICAgICBp
bmRleEluQmxvY2ssIERvbnRSZWZDaGlsZHJlbiwgRG9udFJlZk5vZGUsIFNwZWNOb25lLCBDaGVj
a0FyZ3VtZW50c05vdENyZWF0ZWQsCkBAIC01OTQsMTMgKzU5MSwxMyBAQCBwdWJsaWM6CiAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBjYXNl
IFRlYXJPZmZBcmd1bWVudHM6IHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG1fY3JlYXRlc0Fy
Z3VtZW50cy5jb250YWlucyhub2RlLmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKSkKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKG1fY3JlYXRlc0FyZ3VtZW50cy5jb250YWlucyhub2RlLT5jb2Rl
T3JpZ2luLmlubGluZUNhbGxGcmFtZSkpCiAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51
ZTsKICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIG5vZGUuc2V0T3BB
bmREZWZhdWx0RmxhZ3MoTm9wKTsKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+c2V0T3BBbmRE
ZWZhdWx0RmxhZ3MoTm9wKTsKICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5jbGVhckFuZERl
cmVmQ2hpbGQxKG5vZGUpOwogICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLmNsZWFyQW5kRGVy
ZWZDaGlsZDIobm9kZSk7Ci0gICAgICAgICAgICAgICAgICAgIG5vZGUuc2V0UmVmQ291bnQoMCk7
CisgICAgICAgICAgICAgICAgICAgIG5vZGUtPnNldFJlZkNvdW50KDApOwogICAgICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIApA
QCAtNjE2LDI1ICs2MTMsMjMgQEAgcHVibGljOgogICAgICAgICAgICAgaWYgKCFibG9jaykKICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW5kZXhJ
bkJsb2NrID0gMDsgaW5kZXhJbkJsb2NrIDwgYmxvY2stPnNpemUoKTsgKytpbmRleEluQmxvY2sp
IHsKLSAgICAgICAgICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4ID0gYmxvY2stPmF0KGluZGV4
SW5CbG9jayk7Ci0gICAgICAgICAgICAgICAgTm9kZSogbm9kZVB0ciA9ICZtX2dyYXBoW25vZGVJ
bmRleF07Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGVQdHItPm9wKCkgIT0gQ3JlYXRlQXJndW1l
bnRzKQorICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+YXQoaW5kZXhJbkJsb2Nr
KTsKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSAhPSBDcmVhdGVBcmd1bWVudHMpCiAg
ICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIC8vIElmIHRoaXMg
aXMgYSBDcmVhdGVBcmd1bWVudHMgZm9yIGFuIElubGluZUNhbGxGcmFtZSogdGhhdCBkb2VzCiAg
ICAgICAgICAgICAgICAgLy8gbm90IGNyZWF0ZSBhcmd1bWVudHMsIHRoZW4gcmVwbGFjZSBpdCB3
aXRoIGEgUGhhbnRvbUFyZ3VtZW50cy4KICAgICAgICAgICAgICAgICAvLyBQaGFudG9tQXJndW1l
bnRzIGlzIGEgbm9uLWV4ZWN1dGluZyBub2RlIHRoYXQganVzdCBpbmRpY2F0ZXMKICAgICAgICAg
ICAgICAgICAvLyB0aGF0IHRoZSBub2RlIHNob3VsZCBiZSByZWlmaWVkIGFzIGFuIGFyZ3VtZW50
cyBvYmplY3Qgb24gT1NSCiAgICAgICAgICAgICAgICAgLy8gZXhpdC4KLSAgICAgICAgICAgICAg
ICBpZiAobV9jcmVhdGVzQXJndW1lbnRzLmNvbnRhaW5zKG5vZGVQdHItPmNvZGVPcmlnaW4uaW5s
aW5lQ2FsbEZyYW1lKSkKKyAgICAgICAgICAgICAgICBpZiAobV9jcmVhdGVzQXJndW1lbnRzLmNv
bnRhaW5zKG5vZGUtPmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKSkKICAgICAgICAgICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGVQdHItPnNob3VsZEdlbmVy
YXRlKCkpIHsKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+c2hvdWxkR2VuZXJhdGUoKSkgewog
ICAgICAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKICAgICAgICAgICAg
ICAgICAgICAgICAgIGluZGV4SW5CbG9jaywgRG9udFJlZkNoaWxkcmVuLCBEb250UmVmTm9kZSwg
U3BlY05vbmUsIFBoYW50b20sCi0gICAgICAgICAgICAgICAgICAgICAgICBub2RlUHRyLT5jb2Rl
T3JpZ2luLCBub2RlUHRyLT5jaGlsZHJlbik7Ci0gICAgICAgICAgICAgICAgICAgIG5vZGVQdHIg
PSAmbV9ncmFwaFtub2RlSW5kZXhdOworICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y29k
ZU9yaWdpbiwgbm9kZS0+Y2hpbGRyZW4pOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICBub2RlUHRyLT5zZXRPcEFuZERlZmF1bHRGbGFncyhQaGFudG9tQXJndW1lbnRzKTsKLSAg
ICAgICAgICAgICAgICBub2RlUHRyLT5jaGlsZHJlbi5yZXNldCgpOworICAgICAgICAgICAgICAg
IG5vZGUtPnNldE9wQW5kRGVmYXVsdEZsYWdzKFBoYW50b21Bcmd1bWVudHMpOworICAgICAgICAg
ICAgICAgIG5vZGUtPmNoaWxkcmVuLnJlc2V0KCk7CiAgICAgICAgICAgICAgICAgY2hhbmdlZCA9
IHRydWU7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpbnNlcnRpb25TZXQuZXhlY3V0ZShi
bG9jayk7CkBAIC02NTQsMjggKzY0OSwyNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgRGVmYXVs
dEhhc2g8VmFyaWFibGVBY2Nlc3NEYXRhKj46Okhhc2gsCiAgICAgICAgICAgICBOdWxsYWJsZUhh
c2hUcmFpdHM8VmFyaWFibGVBY2Nlc3NEYXRhKj4gPiBtX2FyZ3VtZW50c0FsaWFzaW5nOwogCi0g
ICAgdm9pZCBvYnNlcnZlQmFkQXJndW1lbnRzVXNlKEVkZ2UgZWRnZSkKKyAgICB2b2lkIG9ic2Vy
dmVCYWRBcmd1bWVudHNVc2UoTm9kZSogbm9kZSkKICAgICB7Ci0gICAgICAgIGlmICghZWRnZSkK
KyAgICAgICAgaWYgKCFub2RlKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAKLSAgICAg
ICAgTm9kZSYgY2hpbGQgPSBtX2dyYXBoW2VkZ2VdOwotICAgICAgICBzd2l0Y2ggKGNoaWxkLm9w
KCkpIHsKKyAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CiAgICAgICAgIGNhc2UgQ3JlYXRl
QXJndW1lbnRzOiB7Ci0gICAgICAgICAgICBtX2NyZWF0ZXNBcmd1bWVudHMuYWRkKGNoaWxkLmNv
ZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKTsKKyAgICAgICAgICAgIG1fY3JlYXRlc0FyZ3VtZW50
cy5hZGQobm9kZS0+Y29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBjYXNlIEdldExvY2FsOiB7Ci0g
ICAgICAgICAgICBpbnQgYXJndW1lbnRzUmVnaXN0ZXIgPSBtX2dyYXBoLnVuY2hlY2tlZEFyZ3Vt
ZW50c1JlZ2lzdGVyRm9yKGNoaWxkLmNvZGVPcmlnaW4pOworICAgICAgICAgICAgaW50IGFyZ3Vt
ZW50c1JlZ2lzdGVyID0gbV9ncmFwaC51bmNoZWNrZWRBcmd1bWVudHNSZWdpc3RlckZvcihub2Rl
LT5jb2RlT3JpZ2luKTsKICAgICAgICAgICAgIGlmIChhcmd1bWVudHNSZWdpc3RlciAhPSBJbnZh
bGlkVmlydHVhbFJlZ2lzdGVyCi0gICAgICAgICAgICAgICAgJiYgKGNoaWxkLmxvY2FsKCkgPT0g
YXJndW1lbnRzUmVnaXN0ZXIKLSAgICAgICAgICAgICAgICAgICAgfHwgY2hpbGQubG9jYWwoKSA9
PSB1bm1vZGlmaWVkQXJndW1lbnRzUmVnaXN0ZXIoYXJndW1lbnRzUmVnaXN0ZXIpKSkgewotICAg
ICAgICAgICAgICAgIG1fY3JlYXRlc0FyZ3VtZW50cy5hZGQoY2hpbGQuY29kZU9yaWdpbi5pbmxp
bmVDYWxsRnJhbWUpOworICAgICAgICAgICAgICAgICYmIChub2RlLT5sb2NhbCgpID09IGFyZ3Vt
ZW50c1JlZ2lzdGVyCisgICAgICAgICAgICAgICAgICAgIHx8IG5vZGUtPmxvY2FsKCkgPT0gdW5t
b2RpZmllZEFyZ3VtZW50c1JlZ2lzdGVyKGFyZ3VtZW50c1JlZ2lzdGVyKSkpIHsKKyAgICAgICAg
ICAgICAgICBtX2NyZWF0ZXNBcmd1bWVudHMuYWRkKG5vZGUtPmNvZGVPcmlnaW4uaW5saW5lQ2Fs
bEZyYW1lKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIAotICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEg
PSBjaGlsZC52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKKyAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNz
RGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CiAg
ICAgICAgICAgICBpZiAodmFyaWFibGVBY2Nlc3NEYXRhLT5pc0NhcHR1cmVkKCkpCiAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKQEAgLTY4OSwxNiArNjgzLDE1IEBAIHByaXZh
dGU6CiAgICAgICAgIH0KICAgICB9CiAgICAgCi0gICAgdm9pZCBvYnNlcnZlQmFkQXJndW1lbnRz
VXNlcyhOb2RlJiBub2RlKQorICAgIHZvaWQgb2JzZXJ2ZUJhZEFyZ3VtZW50c1VzZXMoTm9kZSog
bm9kZSkKICAgICB7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1fZ3JhcGgubnVtQ2hpbGRy
ZW4obm9kZSk7IGktLTspCi0gICAgICAgICAgICBvYnNlcnZlQmFkQXJndW1lbnRzVXNlKG1fZ3Jh
cGguY2hpbGQobm9kZSwgaSkpOworICAgICAgICAgICAgb2JzZXJ2ZUJhZEFyZ3VtZW50c1VzZSht
X2dyYXBoLmNoaWxkKG5vZGUsIGkpLm5vZGUoKSk7CiAgICAgfQogICAgIAotICAgIHZvaWQgb2Jz
ZXJ2ZVByb3BlckFyZ3VtZW50c1VzZShOb2RlJiBub2RlLCBFZGdlIGVkZ2UpCisgICAgdm9pZCBv
YnNlcnZlUHJvcGVyQXJndW1lbnRzVXNlKE5vZGUqIG5vZGUsIEVkZ2UgZWRnZSkKICAgICB7Ci0g
ICAgICAgIE5vZGUmIGNoaWxkID0gbV9ncmFwaFtlZGdlXTsKLSAgICAgICAgaWYgKGNoaWxkLm9w
KCkgIT0gR2V0TG9jYWwpIHsKKyAgICAgICAgaWYgKGVkZ2UtPm9wKCkgIT0gR2V0TG9jYWwpIHsK
ICAgICAgICAgICAgIC8vIFdoZW4gY2FuIHRoaXMgaGFwcGVuPyBBdCBsZWFzdCB0d28gY2FzZXMg
dGhhdCBJIGNhbiB0aGluawogICAgICAgICAgICAgLy8gb2Y6CiAgICAgICAgICAgICAvLwpAQCAt
NzEwLDE4ICs3MDMsMTggQEAgcHJpdmF0ZToKICAgICAgICAgICAgIC8vCiAgICAgICAgICAgICAv
LyAyKSBJZiB3ZSdyZSBhY2Nlc3NpbmcgYXJndW1lbnRzIHdlIGdvdCBmcm9tIHRoZSBoZWFwIQog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKGNoaWxkLm9wKCkg
PT0gQ3JlYXRlQXJndW1lbnRzCi0gICAgICAgICAgICAgICAgJiYgbm9kZS5jb2RlT3JpZ2luLmlu
bGluZUNhbGxGcmFtZQotICAgICAgICAgICAgICAgICAgICE9IGNoaWxkLmNvZGVPcmlnaW4uaW5s
aW5lQ2FsbEZyYW1lKQotICAgICAgICAgICAgICAgIG1fY3JlYXRlc0FyZ3VtZW50cy5hZGQoY2hp
bGQuY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpOworICAgICAgICAgICAgaWYgKGVkZ2UtPm9w
KCkgPT0gQ3JlYXRlQXJndW1lbnRzCisgICAgICAgICAgICAgICAgJiYgbm9kZS0+Y29kZU9yaWdp
bi5pbmxpbmVDYWxsRnJhbWUKKyAgICAgICAgICAgICAgICAgICAhPSBlZGdlLT5jb2RlT3JpZ2lu
LmlubGluZUNhbGxGcmFtZSkKKyAgICAgICAgICAgICAgICBtX2NyZWF0ZXNBcmd1bWVudHMuYWRk
KGVkZ2UtPmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKTsKICAgICAgICAgICAgIAogICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAg
ICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBjaGlsZC52YXJpYWJs
ZUFjY2Vzc0RhdGEoKTsKLSAgICAgICAgaWYgKGNoaWxkLmxvY2FsKCkgPT0gbV9ncmFwaC51bmNo
ZWNrZWRBcmd1bWVudHNSZWdpc3RlckZvcihjaGlsZC5jb2RlT3JpZ2luKQotICAgICAgICAgICAg
JiYgbm9kZS5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSAhPSBjaGlsZC5jb2RlT3JpZ2luLmlu
bGluZUNhbGxGcmFtZSkgewotICAgICAgICAgICAgbV9jcmVhdGVzQXJndW1lbnRzLmFkZChjaGls
ZC5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSk7CisgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0
YSogdmFyaWFibGVBY2Nlc3NEYXRhID0gZWRnZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CisgICAg
ICAgIGlmIChlZGdlLT5sb2NhbCgpID09IG1fZ3JhcGgudW5jaGVja2VkQXJndW1lbnRzUmVnaXN0
ZXJGb3IoZWRnZS0+Y29kZU9yaWdpbikKKyAgICAgICAgICAgICYmIG5vZGUtPmNvZGVPcmlnaW4u
aW5saW5lQ2FsbEZyYW1lICE9IGVkZ2UtPmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKSB7Cisg
ICAgICAgICAgICBtX2NyZWF0ZXNBcmd1bWVudHMuYWRkKGVkZ2UtPmNvZGVPcmlnaW4uaW5saW5l
Q2FsbEZyYW1lKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCkBAIC03MjksMTgg
KzcyMiwxOCBAQCBwcml2YXRlOgogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAKICAgICAg
ICAgQXJndW1lbnRzQWxpYXNpbmdEYXRhJiBkYXRhID0gbV9hcmd1bWVudHNBbGlhc2luZy5maW5k
KHZhcmlhYmxlQWNjZXNzRGF0YSktPnZhbHVlOwotICAgICAgICBkYXRhLm1lcmdlQ2FsbENvbnRl
eHQobm9kZS5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSk7CisgICAgICAgIGRhdGEubWVyZ2VD
YWxsQ29udGV4dChub2RlLT5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSk7CiAgICAgfQogICAg
IAotICAgIGJvb2wgaXNPS1RvT3B0aW1pemUoTm9kZSYgc291cmNlKQorICAgIGJvb2wgaXNPS1Rv
T3B0aW1pemUoTm9kZSogc291cmNlKQogICAgIHsKLSAgICAgICAgaWYgKG1fY3JlYXRlc0FyZ3Vt
ZW50cy5jb250YWlucyhzb3VyY2UuY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpKQorICAgICAg
ICBpZiAobV9jcmVhdGVzQXJndW1lbnRzLmNvbnRhaW5zKHNvdXJjZS0+Y29kZU9yaWdpbi5pbmxp
bmVDYWxsRnJhbWUpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAKLSAgICAg
ICAgc3dpdGNoIChzb3VyY2Uub3AoKSkgeworICAgICAgICBzd2l0Y2ggKHNvdXJjZS0+b3AoKSkg
ewogICAgICAgICBjYXNlIEdldExvY2FsOiB7Ci0gICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0Rh
dGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9IHNvdXJjZS52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKLSAg
ICAgICAgICAgIGludCBhcmd1bWVudHNSZWdpc3RlciA9IG1fZ3JhcGgudW5jaGVja2VkQXJndW1l
bnRzUmVnaXN0ZXJGb3Ioc291cmNlLmNvZGVPcmlnaW4pOworICAgICAgICAgICAgVmFyaWFibGVB
Y2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBzb3VyY2UtPnZhcmlhYmxlQWNjZXNzRGF0
YSgpOworICAgICAgICAgICAgaW50IGFyZ3VtZW50c1JlZ2lzdGVyID0gbV9ncmFwaC51bmNoZWNr
ZWRBcmd1bWVudHNSZWdpc3RlckZvcihzb3VyY2UtPmNvZGVPcmlnaW4pOwogICAgICAgICAgICAg
aWYgKGFyZ3VtZW50c1JlZ2lzdGVyID09IEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIpCiAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBpZiAoYXJndW1lbnRzUmVnaXN0ZXIgPT0gdmFy
aWFibGVBY2Nlc3NEYXRhLT5sb2NhbCgpKQpAQCAtNzY4LDM4ICs3NjEsMzcgQEAgcHJpdmF0ZToK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICAKLSAgICB2b2lkIHJlbW92ZUFyZ3Vt
ZW50c1JlZmVyZW5jaW5nUGhhbnRvbUNoaWxkKE5vZGUmIG5vZGUsIHVuc2lnbmVkIGVkZ2VJbmRl
eCkKKyAgICB2b2lkIHJlbW92ZUFyZ3VtZW50c1JlZmVyZW5jaW5nUGhhbnRvbUNoaWxkKE5vZGUq
IG5vZGUsIHVuc2lnbmVkIGVkZ2VJbmRleCkKICAgICB7Ci0gICAgICAgIEVkZ2UgZWRnZSA9IG5v
ZGUuY2hpbGRyZW4uY2hpbGQoZWRnZUluZGV4KTsKKyAgICAgICAgRWRnZSBlZGdlID0gbm9kZS0+
Y2hpbGRyZW4uY2hpbGQoZWRnZUluZGV4KTsKICAgICAgICAgaWYgKCFlZGdlKQogICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICAKLSAgICAgICAgTm9kZSYgY2hpbGQgPSBtX2dyYXBoW2VkZ2Vd
OwotICAgICAgICBzd2l0Y2ggKGNoaWxkLm9wKCkpIHsKKyAgICAgICAgc3dpdGNoIChlZGdlLT5v
cCgpKSB7CiAgICAgICAgIGNhc2UgUGhpOiAvLyBBcmlzZXMgaWYgd2UgaGFkIENTRSBvbiBhIEdl
dExvY2FsIG9mIHRoZSBhcmd1bWVudHMgcmVnaXN0ZXIuCiAgICAgICAgIGNhc2UgR2V0TG9jYWw6
IC8vIEFyaXNlcyBpZiB3ZSBoYWQgQ1NFIG9uIGFuIGFyZ3VtZW50cyBhY2Nlc3MgdG8gYSB2YXJp
YWJsZSBhbGlhc2VkIHRvIHRoZSBhcmd1bWVudHMuCiAgICAgICAgIGNhc2UgU2V0TG9jYWw6IHsg
Ly8gQXJpc2VzIGlmIHdlIGhhZCBDU0Ugb24gYSBHZXRMb2NhbCBvZiB0aGUgYXJndW1lbnRzIHJl
Z2lzdGVyLgotICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0Rh
dGEgPSBjaGlsZC52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKKyAgICAgICAgICAgIFZhcmlhYmxlQWNj
ZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhID0gZWRnZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7
CiAgICAgICAgICAgICBib29sIGlzRGVhZEFyZ3VtZW50c1JlZ2lzdGVyID0KICAgICAgICAgICAg
ICAgICB2YXJpYWJsZUFjY2Vzc0RhdGEtPmxvY2FsKCkgPT0KLSAgICAgICAgICAgICAgICAgICAg
bV9ncmFwaC51bmNoZWNrZWRBcmd1bWVudHNSZWdpc3RlckZvcihjaGlsZC5jb2RlT3JpZ2luKQot
ICAgICAgICAgICAgICAgICYmICFtX2NyZWF0ZXNBcmd1bWVudHMuY29udGFpbnMoY2hpbGQuY29k
ZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpOworICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLnVu
Y2hlY2tlZEFyZ3VtZW50c1JlZ2lzdGVyRm9yKGVkZ2UtPmNvZGVPcmlnaW4pCisgICAgICAgICAg
ICAgICAgJiYgIW1fY3JlYXRlc0FyZ3VtZW50cy5jb250YWlucyhlZGdlLT5jb2RlT3JpZ2luLmlu
bGluZUNhbGxGcmFtZSk7CiAgICAgICAgICAgICBib29sIGlzQWxpYXNlZEFyZ3VtZW50c1JlZ2lz
dGVyID0KICAgICAgICAgICAgICAgICAhdmFyaWFibGVBY2Nlc3NEYXRhLT5pc0NhcHR1cmVkKCkK
ICAgICAgICAgICAgICAgICAmJiBtX2FyZ3VtZW50c0FsaWFzaW5nLmZpbmQodmFyaWFibGVBY2Nl
c3NEYXRhKS0+dmFsdWUuaXNWYWxpZCgpCi0gICAgICAgICAgICAgICAgJiYgIW1fY3JlYXRlc0Fy
Z3VtZW50cy5jb250YWlucyhjaGlsZC5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSk7CisgICAg
ICAgICAgICAgICAgJiYgIW1fY3JlYXRlc0FyZ3VtZW50cy5jb250YWlucyhlZGdlLT5jb2RlT3Jp
Z2luLmlubGluZUNhbGxGcmFtZSk7CiAgICAgICAgICAgICBpZiAoIWlzRGVhZEFyZ3VtZW50c1Jl
Z2lzdGVyICYmICFpc0FsaWFzZWRBcmd1bWVudHNSZWdpc3RlcikKICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgIG1fZ3JhcGguZGVyZWYoZWRnZSk7Ci0gICAgICAgICAgICBub2Rl
LmNoaWxkcmVuLnJlbW92ZUVkZ2VGcm9tQmFnKGVkZ2VJbmRleCk7CisgICAgICAgICAgICBub2Rl
LT5jaGlsZHJlbi5yZW1vdmVFZGdlRnJvbUJhZyhlZGdlSW5kZXgpOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBjYXNlIENyZWF0ZUFyZ3VtZW50
czogeyAvLyBBcmlzZXMgaWYgd2UgQ1NFIHR3byBHZXRMb2NhbHMgdG8gdGhlIGFyZ3VtZW50cyBy
ZWdpc3RlciBhbmQgdGhlbiBDU0UgdGhlIHNlY29uZCB1c2Ugb2YgdGhlIEdldExvY2FsIHRvIHRo
ZSBmaXJzdC4KLSAgICAgICAgICAgIGlmIChtX2NyZWF0ZXNBcmd1bWVudHMuY29udGFpbnMoY2hp
bGQuY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpKQorICAgICAgICAgICAgaWYgKG1fY3JlYXRl
c0FyZ3VtZW50cy5jb250YWlucyhlZGdlLT5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSkpCiAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBtX2dyYXBoLmRlcmVmKGVkZ2UpOwot
ICAgICAgICAgICAgbm9kZS5jaGlsZHJlbi5yZW1vdmVFZGdlRnJvbUJhZyhlZGdlSW5kZXgpOwor
ICAgICAgICAgICAgbm9kZS0+Y2hpbGRyZW4ucmVtb3ZlRWRnZUZyb21CYWcoZWRnZUluZGV4KTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlNb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FycmF5TW9kZS5jcHAJKHJldmlzaW9uIDE0MDkwNCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlNb2RlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjQxLDE5ICsyNDEsMTkgQEAgU3RydWN0dXJlKiBBcnJheU1vZGU6Om9yaWdpbmFs
QXJyYXlTdHJ1YwogICAgIH0KIH0KIAotU3RydWN0dXJlKiBBcnJheU1vZGU6Om9yaWdpbmFsQXJy
YXlTdHJ1Y3R1cmUoR3JhcGgmIGdyYXBoLCBOb2RlJiBub2RlKSBjb25zdAorU3RydWN0dXJlKiBB
cnJheU1vZGU6Om9yaWdpbmFsQXJyYXlTdHJ1Y3R1cmUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2Rl
KSBjb25zdAogewotICAgIHJldHVybiBvcmlnaW5hbEFycmF5U3RydWN0dXJlKGdyYXBoLCBub2Rl
LmNvZGVPcmlnaW4pOworICAgIHJldHVybiBvcmlnaW5hbEFycmF5U3RydWN0dXJlKGdyYXBoLCBu
b2RlLT5jb2RlT3JpZ2luKTsKIH0KIAotYm9vbCBBcnJheU1vZGU6OmFscmVhZHlDaGVja2VkKEdy
YXBoJiBncmFwaCwgTm9kZSYgbm9kZSwgQWJzdHJhY3RWYWx1ZSYgdmFsdWUsIEluZGV4aW5nVHlw
ZSBzaGFwZSkgY29uc3QKK2Jvb2wgQXJyYXlNb2RlOjphbHJlYWR5Q2hlY2tlZChHcmFwaCYgZ3Jh
cGgsIE5vZGUqIG5vZGUsIEFic3RyYWN0VmFsdWUmIHZhbHVlLCBJbmRleGluZ1R5cGUgc2hhcGUp
IGNvbnN0CiB7CiAgICAgc3dpdGNoIChhcnJheUNsYXNzKCkpIHsKICAgICBjYXNlIEFycmF5OjpP
cmlnaW5hbEFycmF5OgogICAgICAgICByZXR1cm4gdmFsdWUubV9jdXJyZW50S25vd25TdHJ1Y3R1
cmUuaGFzU2luZ2xldG9uKCkKICAgICAgICAgICAgICYmICh2YWx1ZS5tX2N1cnJlbnRLbm93blN0
cnVjdHVyZS5zaW5nbGV0b24oKS0+aW5kZXhpbmdUeXBlKCkgJiBJbmRleGluZ1NoYXBlTWFzaykg
PT0gc2hhcGUKICAgICAgICAgICAgICYmICh2YWx1ZS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5z
aW5nbGV0b24oKS0+aW5kZXhpbmdUeXBlKCkgJiBJc0FycmF5KQotICAgICAgICAgICAgJiYgZ3Jh
cGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUuY29kZU9yaWdpbiktPmlzT3JpZ2luYWxBcnJheVN0cnVj
dHVyZSh2YWx1ZS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5zaW5nbGV0b24oKSk7CisgICAgICAg
ICAgICAmJiBncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+Y29kZU9yaWdpbiktPmlzT3JpZ2lu
YWxBcnJheVN0cnVjdHVyZSh2YWx1ZS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5zaW5nbGV0b24o
KSk7CiAgICAgICAgIAogICAgIGNhc2UgQXJyYXk6OkFycmF5OgogICAgICAgICBpZiAoYXJyYXlN
b2Rlc0FscmVhZHlDaGVja2VkKHZhbHVlLm1fYXJyYXlNb2RlcywgYXNBcnJheU1vZGVzKHNoYXBl
IHwgSXNBcnJheSkpKQpAQCAtMjcwLDcgKzI3MCw3IEBAIGJvb2wgQXJyYXlNb2RlOjphbHJlYWR5
Q2hlY2tlZChHcmFwaCYgZ3IKICAgICB9CiB9CiAKLWJvb2wgQXJyYXlNb2RlOjphbHJlYWR5Q2hl
Y2tlZChHcmFwaCYgZ3JhcGgsIE5vZGUmIG5vZGUsIEFic3RyYWN0VmFsdWUmIHZhbHVlKSBjb25z
dAorYm9vbCBBcnJheU1vZGU6OmFscmVhZHlDaGVja2VkKEdyYXBoJiBncmFwaCwgTm9kZSogbm9k
ZSwgQWJzdHJhY3RWYWx1ZSYgdmFsdWUpIGNvbnN0CiB7CiAgICAgc3dpdGNoICh0eXBlKCkpIHsK
ICAgICBjYXNlIEFycmF5OjpHZW5lcmljOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdBcnJheU1vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0FycmF5TW9kZS5oCShyZXZpc2lvbiAxNDA5MDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0FycmF5TW9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xOTcsNyArMTk3LDcgQEAg
cHVibGljOgogICAgIAogICAgIEFycmF5TW9kZSByZWZpbmUoU3BlY3VsYXRlZFR5cGUgYmFzZSwg
U3BlY3VsYXRlZFR5cGUgaW5kZXgsIFNwZWN1bGF0ZWRUeXBlIHZhbHVlID0gU3BlY05vbmUsIE5v
ZGVGbGFncyA9IDApIGNvbnN0OwogICAgIAotICAgIGJvb2wgYWxyZWFkeUNoZWNrZWQoR3JhcGgm
LCBOb2RlJiwgQWJzdHJhY3RWYWx1ZSYpIGNvbnN0OworICAgIGJvb2wgYWxyZWFkeUNoZWNrZWQo
R3JhcGgmLCBOb2RlKiwgQWJzdHJhY3RWYWx1ZSYpIGNvbnN0OwogICAgIAogICAgIHZvaWQgZHVt
cChQcmludFN0cmVhbSYpIGNvbnN0OwogICAgIApAQCAtMzQzLDcgKzM0Myw3IEBAIHB1YmxpYzoK
ICAgICAKICAgICAvLyBSZXR1cm5zIDAgaWYgdGhpcyBpcyBub3QgT3JpZ2luYWxBcnJheS4KICAg
ICBTdHJ1Y3R1cmUqIG9yaWdpbmFsQXJyYXlTdHJ1Y3R1cmUoR3JhcGgmLCBjb25zdCBDb2RlT3Jp
Z2luJikgY29uc3Q7Ci0gICAgU3RydWN0dXJlKiBvcmlnaW5hbEFycmF5U3RydWN0dXJlKEdyYXBo
JiwgTm9kZSYpIGNvbnN0OworICAgIFN0cnVjdHVyZSogb3JpZ2luYWxBcnJheVN0cnVjdHVyZShH
cmFwaCYsIE5vZGUqKSBjb25zdDsKICAgICAKICAgICBib29sIGJlbmVmaXRzRnJvbVN0cnVjdHVy
ZUNoZWNrKCkgY29uc3QKICAgICB7CkBAIC00MjIsNyArNDIyLDcgQEAgcHJpdmF0ZToKICAgICAg
ICAgfQogICAgIH0KICAgICAKLSAgICBib29sIGFscmVhZHlDaGVja2VkKEdyYXBoJiwgTm9kZSYs
IEFic3RyYWN0VmFsdWUmLCBJbmRleGluZ1R5cGUgc2hhcGUpIGNvbnN0OworICAgIGJvb2wgYWxy
ZWFkeUNoZWNrZWQoR3JhcGgmLCBOb2RlKiwgQWJzdHJhY3RWYWx1ZSYsIEluZGV4aW5nVHlwZSBz
aGFwZSkgY29uc3Q7CiAgICAgCiAgICAgdW5pb24gewogICAgICAgICBzdHJ1Y3QgewpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJheWlmeVNsb3dQYXRoR2VuZXJhdG9yLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJheWlmeVNsb3dQ
YXRoR2VuZXJhdG9yLmgJKHJldmlzaW9uIDE0MDkwNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQXJyYXlpZnlTbG93UGF0aEdlbmVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTMgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00Mywx
MiArNDMsMTIgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogY2xhc3MgQXJyYXlp
ZnlTbG93UGF0aEdlbmVyYXRvciA6IHB1YmxpYyBKdW1waW5nU2xvd1BhdGhHZW5lcmF0b3I8TWFj
cm9Bc3NlbWJsZXI6Okp1bXBMaXN0PiB7CiBwdWJsaWM6CiAgICAgQXJyYXlpZnlTbG93UGF0aEdl
bmVyYXRvcigKLSAgICAgICAgY29uc3QgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0JiBmcm9tLCBT
cGVjdWxhdGl2ZUpJVCogaml0LCBOb2RlJiBub2RlLCBHUFJSZWcgYmFzZUdQUiwKKyAgICAgICAg
Y29uc3QgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0JiBmcm9tLCBTcGVjdWxhdGl2ZUpJVCogaml0
LCBOb2RlKiBub2RlLCBHUFJSZWcgYmFzZUdQUiwKICAgICAgICAgR1BSUmVnIHByb3BlcnR5R1BS
LCBHUFJSZWcgdGVtcEdQUiwgR1BSUmVnIHN0cnVjdHVyZUdQUikKICAgICAgICAgOiBKdW1waW5n
U2xvd1BhdGhHZW5lcmF0b3I8TWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0Pihmcm9tLCBqaXQpCi0g
ICAgICAgICwgbV9vcChub2RlLm9wKCkpCi0gICAgICAgICwgbV9hcnJheU1vZGUobm9kZS5hcnJh
eU1vZGUoKSkKLSAgICAgICAgLCBtX3N0cnVjdHVyZShub2RlLm9wKCkgPT0gQXJyYXlpZnlUb1N0
cnVjdHVyZSA/IG5vZGUuc3RydWN0dXJlKCkgOiAwKQorICAgICAgICAsIG1fb3Aobm9kZS0+b3Ao
KSkKKyAgICAgICAgLCBtX2FycmF5TW9kZShub2RlLT5hcnJheU1vZGUoKSkKKyAgICAgICAgLCBt
X3N0cnVjdHVyZShub2RlLT5vcCgpID09IEFycmF5aWZ5VG9TdHJ1Y3R1cmUgPyBub2RlLT5zdHJ1
Y3R1cmUoKSA6IDApCiAgICAgICAgICwgbV9iYXNlR1BSKGJhc2VHUFIpCiAgICAgICAgICwgbV9w
cm9wZXJ0eUdQUihwcm9wZXJ0eUdQUikKICAgICAgICAgLCBtX3RlbXBHUFIodGVtcEdQUikKQEAg
LTYzLDEzICs2MywxMyBAQCBwdWJsaWM6CiAgICAgICAgICAgICBjYXNlIEFycmF5OjpJbnQzMjoK
ICAgICAgICAgICAgIGNhc2UgQXJyYXk6OkRvdWJsZToKICAgICAgICAgICAgIGNhc2UgQXJyYXk6
OkNvbnRpZ3VvdXM6Ci0gICAgICAgICAgICAgICAgbV9iYWRQcm9wZXJ0eUp1bXAgPSBqaXQtPnNw
ZWN1bGF0aW9uQ2hlY2soVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSk7CisgICAg
ICAgICAgICAgICAgbV9iYWRQcm9wZXJ0eUp1bXAgPSBqaXQtPnNwZWN1bGF0aW9uQ2hlY2soVW5j
b3VudGFibGUsIEpTVmFsdWVSZWdzKCksIDApOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0K
ICAgICAgICAgfQotICAgICAgICBtX2JhZEluZGV4aW5nVHlwZUp1bXAgPSBqaXQtPnNwZWN1bGF0
aW9uQ2hlY2soQmFkSW5kZXhpbmdUeXBlLCBKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChtX2Jh
c2VHUFIpLCBOb05vZGUpOworICAgICAgICBtX2JhZEluZGV4aW5nVHlwZUp1bXAgPSBqaXQtPnNw
ZWN1bGF0aW9uQ2hlY2soQmFkSW5kZXhpbmdUeXBlLCBKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2Vs
bChtX2Jhc2VHUFIpLCAwKTsKICAgICB9CiAgICAgCiBwcm90ZWN0ZWQ6CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suaAkocmV2aXNpb24gMTQwOTA0KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmgJKHdvcmtpbmcgY29weSkK
QEAgLTQyLDcgKzQyLDcgQEAgY2xhc3MgR3JhcGg7CiAKIHR5cGVkZWYgVmVjdG9yIDxCbG9ja0lu
ZGV4LCAyPiBQcmVkZWNlc3Nvckxpc3Q7CiAKLXN0cnVjdCBCYXNpY0Jsb2NrIDogVmVjdG9yPE5v
ZGVJbmRleCwgOD4geworc3RydWN0IEJhc2ljQmxvY2sgOiBWZWN0b3I8Tm9kZSosIDg+IHsKICAg
ICBCYXNpY0Jsb2NrKHVuc2lnbmVkIGJ5dGVjb2RlQmVnaW4sIHVuc2lnbmVkIG51bUFyZ3VtZW50
cywgdW5zaWduZWQgbnVtTG9jYWxzKQogICAgICAgICA6IGJ5dGVjb2RlQmVnaW4oYnl0ZWNvZGVC
ZWdpbikKICAgICAgICAgLCBpc09TUlRhcmdldChmYWxzZSkKQEAgLTc1LDcgKzc1LDcgQEAgc3Ry
dWN0IEJhc2ljQmxvY2sgOiBWZWN0b3I8Tm9kZUluZGV4LCA4PgogICAgIH0KICAgICAKICAgICBz
aXplX3QgbnVtTm9kZXMoKSBjb25zdCB7IHJldHVybiBwaGlzLnNpemUoKSArIHNpemUoKTsgfQot
ICAgIE5vZGVJbmRleCBub2RlSW5kZXgoc2l6ZV90IGkpIGNvbnN0CisgICAgTm9kZSogbm9kZShz
aXplX3QgaSkgY29uc3QKICAgICB7CiAgICAgICAgIGlmIChpIDwgcGhpcy5zaXplKCkpCiAgICAg
ICAgICAgICByZXR1cm4gcGhpc1tpXTsKQEAgLTgzLDI2ICs4MywyNiBAQCBzdHJ1Y3QgQmFzaWNC
bG9jayA6IFZlY3RvcjxOb2RlSW5kZXgsIDg+CiAgICAgfQogICAgIGJvb2wgaXNQaGlJbmRleChz
aXplX3QgaSkgY29uc3QgeyByZXR1cm4gaSA8IHBoaXMuc2l6ZSgpOyB9CiAgICAgCi0gICAgYm9v
bCBpc0luUGhpcyhOb2RlSW5kZXggbm9kZUluZGV4KSBjb25zdAorICAgIGJvb2wgaXNJblBoaXMo
Tm9kZSogbm9kZSkgY29uc3QKICAgICB7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
cGhpcy5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgaWYgKHBoaXNbaV0gPT0gbm9kZUluZGV4
KQorICAgICAgICAgICAgaWYgKHBoaXNbaV0gPT0gbm9kZSkKICAgICAgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIAot
ICAgIGJvb2wgaXNJbkJsb2NrKE5vZGVJbmRleCBpbmRleCkgY29uc3QKKyAgICBib29sIGlzSW5C
bG9jayhOb2RlKiBteU5vZGUpIGNvbnN0CiAgICAgewogICAgICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IG51bU5vZGVzKCk7ICsraSkgewotICAgICAgICAgICAgaWYgKG5vZGVJbmRleChpKSA9
PSBpbmRleCkKKyAgICAgICAgICAgIGlmIChub2RlKGkpID09IG15Tm9kZSkKICAgICAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
fQogICAgIAogI2RlZmluZSBERkdfREVGSU5FX0FQUEVORF9OT0RFKHRlbXBsYXRlUHJlLCB0ZW1w
bGF0ZVBvc3QsIHR5cGVQYXJhbXMsIHZhbHVlUGFyYW1zQ29tbWEsIHZhbHVlUGFyYW1zLCB2YWx1
ZUFyZ3MpIFwKLSAgICB0ZW1wbGF0ZVByZSB0eXBlUGFyYW1zIHRlbXBsYXRlUG9zdCBOb2RlSW5k
ZXggYXBwZW5kTm9kZShHcmFwaCYsIFJlZkNoaWxkcmVuTW9kZSwgUmVmTm9kZU1vZGUsIFNwZWN1
bGF0ZWRUeXBlIHZhbHVlUGFyYW1zQ29tbWEgdmFsdWVQYXJhbXMpOworICAgIHRlbXBsYXRlUHJl
IHR5cGVQYXJhbXMgdGVtcGxhdGVQb3N0IE5vZGUqIGFwcGVuZE5vZGUoR3JhcGgmLCBSZWZDaGls
ZHJlbk1vZGUsIFJlZk5vZGVNb2RlLCBTcGVjdWxhdGVkVHlwZSB2YWx1ZVBhcmFtc0NvbW1hIHZh
bHVlUGFyYW1zKTsKICAgICBERkdfVkFSSUFESUNfVEVNUExBVEVfRlVOQ1RJT04oREZHX0RFRklO
RV9BUFBFTkRfTk9ERSkKICN1bmRlZiBERkdfREVGSU5FX0FQUEVORF9OT0RFCiAgICAgCkBAIC0x
MjEsMTEgKzEyMSwxMSBAQCBzdHJ1Y3QgQmFzaWNCbG9jayA6IFZlY3RvcjxOb2RlSW5kZXgsIDg+
CiAjZW5kaWYKICAgICBib29sIGlzUmVhY2hhYmxlOwogICAgIAotICAgIFZlY3RvcjxOb2RlSW5k
ZXg+IHBoaXM7CisgICAgVmVjdG9yPE5vZGUqPiBwaGlzOwogICAgIFByZWRlY2Vzc29yTGlzdCBt
X3ByZWRlY2Vzc29yczsKICAgICAKLSAgICBPcGVyYW5kczxOb2RlSW5kZXgsIE5vZGVJbmRleFRy
YWl0cz4gdmFyaWFibGVzQXRIZWFkOwotICAgIE9wZXJhbmRzPE5vZGVJbmRleCwgTm9kZUluZGV4
VHJhaXRzPiB2YXJpYWJsZXNBdFRhaWw7CisgICAgT3BlcmFuZHM8Tm9kZSosIE5vZGVQb2ludGVy
VHJhaXRzPiB2YXJpYWJsZXNBdEhlYWQ7CisgICAgT3BlcmFuZHM8Tm9kZSosIE5vZGVQb2ludGVy
VHJhaXRzPiB2YXJpYWJsZXNBdFRhaWw7CiAgICAgCiAgICAgT3BlcmFuZHM8QWJzdHJhY3RWYWx1
ZT4gdmFsdWVzQXRIZWFkOwogICAgIE9wZXJhbmRzPEFic3RyYWN0VmFsdWU+IHZhbHVlc0F0VGFp
bDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9ja0lubGluZXMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2tJ
bmxpbmVzLmgJKHJldmlzaW9uIDE0MDkwNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQmFzaWNCbG9ja0lubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMzQsOSArMzQsOSBAQAog
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCiAjZGVmaW5lIERGR19ERUZJTkVfQVBQ
RU5EX05PREUodGVtcGxhdGVQcmUsIHRlbXBsYXRlUG9zdCwgdHlwZVBhcmFtcywgdmFsdWVQYXJh
bXNDb21tYSwgdmFsdWVQYXJhbXMsIHZhbHVlQXJncykgXAotICAgIHRlbXBsYXRlUHJlIHR5cGVQ
YXJhbXMgdGVtcGxhdGVQb3N0IE5vZGVJbmRleCBCYXNpY0Jsb2NrOjphcHBlbmROb2RlKEdyYXBo
JiBncmFwaCwgUmVmQ2hpbGRyZW5Nb2RlIHJlZkNoaWxkcmVuTW9kZSwgUmVmTm9kZU1vZGUgcmVm
Tm9kZU1vZGUsIFNwZWN1bGF0ZWRUeXBlIHR5cGUgdmFsdWVQYXJhbXNDb21tYSB2YWx1ZVBhcmFt
cykgXAorICAgIHRlbXBsYXRlUHJlIHR5cGVQYXJhbXMgdGVtcGxhdGVQb3N0IE5vZGUqIEJhc2lj
QmxvY2s6OmFwcGVuZE5vZGUoR3JhcGgmIGdyYXBoLCBSZWZDaGlsZHJlbk1vZGUgcmVmQ2hpbGRy
ZW5Nb2RlLCBSZWZOb2RlTW9kZSByZWZOb2RlTW9kZSwgU3BlY3VsYXRlZFR5cGUgdHlwZSB2YWx1
ZVBhcmFtc0NvbW1hIHZhbHVlUGFyYW1zKSBcCiAgICAgeyBcCi0gICAgICAgIE5vZGVJbmRleCBy
ZXN1bHQgPSBncmFwaC5hZGROb2RlKHJlZkNoaWxkcmVuTW9kZSwgcmVmTm9kZU1vZGUsIHR5cGUg
dmFsdWVQYXJhbXNDb21tYSB2YWx1ZUFyZ3MpOyBcCisgICAgICAgIE5vZGUqIHJlc3VsdCA9IGdy
YXBoLmFkZE5vZGUocmVmQ2hpbGRyZW5Nb2RlLCByZWZOb2RlTW9kZSwgdHlwZSB2YWx1ZVBhcmFt
c0NvbW1hIHZhbHVlQXJncyk7IFwKICAgICAgICAgYXBwZW5kKHJlc3VsdCk7IFwKICAgICAgICAg
cmV0dXJuIHJlc3VsdDsgXAogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQnl0ZUNvZGVQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCShyZXZpc2lvbiAxNDA5MDQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTYxLDI2ICsxNjEsMjYgQEAgcHJpdmF0ZToKICAgICAKICAgICAvLyBIYW5kbGUgY2FsbHMu
IFRoaXMgcmVzb2x2ZXMgaXNzdWVzIHN1cnJvdW5kaW5nIGlubGluaW5nIGFuZCBpbnRyaW5zaWNz
LgogICAgIHZvaWQgaGFuZGxlQ2FsbChJbnRlcnByZXRlciosIEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIE5vZGVUeXBlIG9wLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kKTsKLSAgICB2
b2lkIGVtaXRGdW5jdGlvbkNoZWNrcyhjb25zdCBDYWxsTGlua1N0YXR1cyYsIE5vZGVJbmRleCBj
YWxsVGFyZ2V0LCBpbnQgcmVnaXN0ZXJPZmZzZXQsIENvZGVTcGVjaWFsaXphdGlvbktpbmQpOwor
ICAgIHZvaWQgZW1pdEZ1bmN0aW9uQ2hlY2tzKGNvbnN0IENhbGxMaW5rU3RhdHVzJiwgTm9kZSog
Y2FsbFRhcmdldCwgaW50IHJlZ2lzdGVyT2Zmc2V0LCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kKTsK
ICAgICAvLyBIYW5kbGUgaW5saW5pbmcuIFJldHVybiB0cnVlIGlmIGl0IHN1Y2NlZWRlZCwgZmFs
c2UgaWYgd2UgbmVlZCB0byBwbGFudCBhIGNhbGwuCi0gICAgYm9vbCBoYW5kbGVJbmxpbmluZyhi
b29sIHVzZXNSZXN1bHQsIE5vZGVJbmRleCBjYWxsVGFyZ2V0Tm9kZUluZGV4LCBpbnQgcmVzdWx0
T3BlcmFuZCwgY29uc3QgQ2FsbExpbmtTdGF0dXMmLCBpbnQgcmVnaXN0ZXJPZmZzZXQsIGludCBh
cmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgdW5zaWduZWQgbmV4dE9mZnNldCwgQ29kZVNwZWNp
YWxpemF0aW9uS2luZCk7CisgICAgYm9vbCBoYW5kbGVJbmxpbmluZyhib29sIHVzZXNSZXN1bHQs
IE5vZGUqIGNhbGxUYXJnZXROb2RlLCBpbnQgcmVzdWx0T3BlcmFuZCwgY29uc3QgQ2FsbExpbmtT
dGF0dXMmLCBpbnQgcmVnaXN0ZXJPZmZzZXQsIGludCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhp
cywgdW5zaWduZWQgbmV4dE9mZnNldCwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCk7CiAgICAgLy8g
SGFuZGxlIHNldHRpbmcgdGhlIHJlc3VsdCBvZiBhbiBpbnRyaW5zaWMuCi0gICAgdm9pZCBzZXRJ
bnRyaW5zaWNSZXN1bHQoYm9vbCB1c2VzUmVzdWx0LCBpbnQgcmVzdWx0T3BlcmFuZCwgTm9kZUlu
ZGV4KTsKKyAgICB2b2lkIHNldEludHJpbnNpY1Jlc3VsdChib29sIHVzZXNSZXN1bHQsIGludCBy
ZXN1bHRPcGVyYW5kLCBOb2RlKik7CiAgICAgLy8gSGFuZGxlIGludHJpbnNpYyBmdW5jdGlvbnMu
IFJldHVybiB0cnVlIGlmIGl0IHN1Y2NlZWRlZCwgZmFsc2UgaWYgd2UgbmVlZCB0byBwbGFudCBh
IGNhbGwuCiAgICAgYm9vbCBoYW5kbGVJbnRyaW5zaWMoYm9vbCB1c2VzUmVzdWx0LCBpbnQgcmVz
dWx0T3BlcmFuZCwgSW50cmluc2ljLCBpbnQgcmVnaXN0ZXJPZmZzZXQsIGludCBhcmd1bWVudENv
dW50SW5jbHVkaW5nVGhpcywgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbik7CiAgICAgYm9vbCBo
YW5kbGVDb25zdGFudEludGVybmFsRnVuY3Rpb24oYm9vbCB1c2VzUmVzdWx0LCBpbnQgcmVzdWx0
T3BlcmFuZCwgSW50ZXJuYWxGdW5jdGlvbiosIGludCByZWdpc3Rlck9mZnNldCwgaW50IGFyZ3Vt
ZW50Q291bnRJbmNsdWRpbmdUaGlzLCBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uLCBDb2RlU3Bl
Y2lhbGl6YXRpb25LaW5kKTsKLSAgICBOb2RlSW5kZXggaGFuZGxlR2V0QnlPZmZzZXQoU3BlY3Vs
YXRlZFR5cGUsIE5vZGVJbmRleCBiYXNlLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBQcm9w
ZXJ0eU9mZnNldCk7CisgICAgTm9kZSogaGFuZGxlR2V0QnlPZmZzZXQoU3BlY3VsYXRlZFR5cGUs
IE5vZGUqIGJhc2UsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIFByb3BlcnR5T2Zmc2V0KTsK
ICAgICB2b2lkIGhhbmRsZUdldEJ5T2Zmc2V0KAotICAgICAgICBpbnQgZGVzdGluYXRpb25PcGVy
YW5kLCBTcGVjdWxhdGVkVHlwZSwgTm9kZUluZGV4IGJhc2UsIHVuc2lnbmVkIGlkZW50aWZpZXJO
dW1iZXIsCisgICAgICAgIGludCBkZXN0aW5hdGlvbk9wZXJhbmQsIFNwZWN1bGF0ZWRUeXBlLCBO
b2RlKiBiYXNlLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLAogICAgICAgICBQcm9wZXJ0eU9m
ZnNldCk7CiAgICAgdm9pZCBoYW5kbGVHZXRCeUlkKAotICAgICAgICBpbnQgZGVzdGluYXRpb25P
cGVyYW5kLCBTcGVjdWxhdGVkVHlwZSwgTm9kZUluZGV4IGJhc2UsIHVuc2lnbmVkIGlkZW50aWZp
ZXJOdW1iZXIsCisgICAgICAgIGludCBkZXN0aW5hdGlvbk9wZXJhbmQsIFNwZWN1bGF0ZWRUeXBl
LCBOb2RlKiBiYXNlLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLAogICAgICAgICBjb25zdCBH
ZXRCeUlkU3RhdHVzJik7CiAKLSAgICBOb2RlSW5kZXggZ2V0U2NvcGUoYm9vbCBza2lwVG9wLCB1
bnNpZ25lZCBza2lwQ291bnQpOworICAgIE5vZGUqIGdldFNjb3BlKGJvb2wgc2tpcFRvcCwgdW5z
aWduZWQgc2tpcENvdW50KTsKICAgICAKICAgICAvLyBDb252ZXJ0IGEgc2V0IG9mIFJlc29sdmVP
cGVyYXRpb25zIGludG8gZ3JhcGggbm9kZXMKLSAgICBib29sIHBhcnNlUmVzb2x2ZU9wZXJhdGlv
bnMoU3BlY3VsYXRlZFR5cGUsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIHVuc2lnbmVkIG9w
ZXJhdGlvbnMsIHVuc2lnbmVkIHB1dFRvQmFzZU9wZXJhdGlvbiwgTm9kZUluZGV4KiBiYXNlLCBO
b2RlSW5kZXgqIHZhbHVlKTsKKyAgICBib29sIHBhcnNlUmVzb2x2ZU9wZXJhdGlvbnMoU3BlY3Vs
YXRlZFR5cGUsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIHVuc2lnbmVkIG9wZXJhdGlvbnMs
IHVuc2lnbmVkIHB1dFRvQmFzZU9wZXJhdGlvbiwgTm9kZSoqIGJhc2UsIE5vZGUqKiB2YWx1ZSk7
CiAKICAgICAvLyBQcmVwYXJlIHRvIHBhcnNlIGEgYmxvY2suCiAgICAgdm9pZCBwcmVwYXJlVG9Q
YXJzZUJsb2NrKCk7CkBAIC0yMTAsNyArMjEwLDcgQEAgcHJpdmF0ZToKICAgICB9CiAgICAgCiAg
ICAgLy8gR2V0L1NldCB0aGUgb3BlcmFuZHMvcmVzdWx0IG9mIGEgYnl0ZWNvZGUgaW5zdHJ1Y3Rp
b24uCi0gICAgTm9kZUluZGV4IGdldERpcmVjdChpbnQgb3BlcmFuZCkKKyAgICBOb2RlKiBnZXRE
aXJlY3QoaW50IG9wZXJhbmQpCiAgICAgewogICAgICAgICAvLyBJcyB0aGlzIGEgY29uc3RhbnQ/
CiAgICAgICAgIGlmIChvcGVyYW5kID49IEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4KSB7CkBA
IC0yMjgsNyArMjI4LDcgQEAgcHJpdmF0ZToKICAgICAgICAgLy8gTXVzdCBiZSBhIGxvY2FsLgog
ICAgICAgICByZXR1cm4gZ2V0TG9jYWwoKHVuc2lnbmVkKW9wZXJhbmQpOwogICAgIH0KLSAgICBO
b2RlSW5kZXggZ2V0KGludCBvcGVyYW5kKQorICAgIE5vZGUqIGdldChpbnQgb3BlcmFuZCkKICAg
ICB7CiAgICAgICAgIGlmIChvcGVyYW5kID09IEpTU3RhY2s6OkNhbGxlZSkgewogICAgICAgICAg
ICAgaWYgKG1faW5saW5lU3RhY2tUb3AtPm1faW5saW5lQ2FsbEZyYW1lICYmIG1faW5saW5lU3Rh
Y2tUb3AtPm1faW5saW5lQ2FsbEZyYW1lLT5jYWxsZWUpCkBAIC0yNDAsNyArMjQwLDcgQEAgcHJp
dmF0ZToKICAgICAgICAgcmV0dXJuIGdldERpcmVjdChtX2lubGluZVN0YWNrVG9wLT5yZW1hcE9w
ZXJhbmQob3BlcmFuZCkpOwogICAgIH0KICAgICBlbnVtIFNldE1vZGUgeyBOb3JtYWxTZXQsIFNl
dE9uRW50cnkgfTsKLSAgICB2b2lkIHNldERpcmVjdChpbnQgb3BlcmFuZCwgTm9kZUluZGV4IHZh
bHVlLCBTZXRNb2RlIHNldE1vZGUgPSBOb3JtYWxTZXQpCisgICAgdm9pZCBzZXREaXJlY3QoaW50
IG9wZXJhbmQsIE5vZGUqIHZhbHVlLCBTZXRNb2RlIHNldE1vZGUgPSBOb3JtYWxTZXQpCiAgICAg
ewogICAgICAgICAvLyBJcyB0aGlzIGFuIGFyZ3VtZW50PwogICAgICAgICBpZiAob3BlcmFuZElz
QXJndW1lbnQob3BlcmFuZCkpIHsKQEAgLTI1MSwxMiArMjUxLDEyIEBAIHByaXZhdGU6CiAgICAg
ICAgIC8vIE11c3QgYmUgYSBsb2NhbC4KICAgICAgICAgc2V0TG9jYWwoKHVuc2lnbmVkKW9wZXJh
bmQsIHZhbHVlLCBzZXRNb2RlKTsKICAgICB9Ci0gICAgdm9pZCBzZXQoaW50IG9wZXJhbmQsIE5v
ZGVJbmRleCB2YWx1ZSwgU2V0TW9kZSBzZXRNb2RlID0gTm9ybWFsU2V0KQorICAgIHZvaWQgc2V0
KGludCBvcGVyYW5kLCBOb2RlKiB2YWx1ZSwgU2V0TW9kZSBzZXRNb2RlID0gTm9ybWFsU2V0KQog
ICAgIHsKICAgICAgICAgc2V0RGlyZWN0KG1faW5saW5lU3RhY2tUb3AtPnJlbWFwT3BlcmFuZChv
cGVyYW5kKSwgdmFsdWUsIHNldE1vZGUpOwogICAgIH0KICAgICAKLSAgICB2b2lkIHNldFBhaXIo
aW50IG9wZXJhbmQxLCBOb2RlSW5kZXggdmFsdWUxLCBpbnQgb3BlcmFuZDIsIE5vZGVJbmRleCB2
YWx1ZTIpCisgICAgdm9pZCBzZXRQYWlyKGludCBvcGVyYW5kMSwgTm9kZSogdmFsdWUxLCBpbnQg
b3BlcmFuZDIsIE5vZGUqIHZhbHVlMikKICAgICB7CiAgICAgICAgIC8vIEZpcnN0IGVtaXQgZGVh
ZCBTZXRMb2NhbHMgZm9yIHRoZSBiZW5lZml0IG9mIE9TUi4KICAgICAgICAgc2V0KG9wZXJhbmQx
LCB2YWx1ZTEpOwpAQCAtMjY3LDQ5ICsyNjcsNDQgQEAgcHJpdmF0ZToKICAgICAgICAgc2V0KG9w
ZXJhbmQyLCB2YWx1ZTIpOwogICAgIH0KICAgICAKLSAgICBOb2RlSW5kZXggaW5qZWN0TGF6eU9w
ZXJhbmRTcGVjdWxhdGlvbihOb2RlSW5kZXggbm9kZUluZGV4KQorICAgIE5vZGUqIGluamVjdExh
enlPcGVyYW5kU3BlY3VsYXRpb24oTm9kZSogbm9kZSkKICAgICB7Ci0gICAgICAgIE5vZGUmIG5v
ZGUgPSBtX2dyYXBoW25vZGVJbmRleF07Ci0gICAgICAgIEFTU0VSVChub2RlLm9wKCkgPT0gR2V0
TG9jYWwpOwotICAgICAgICBBU1NFUlQobm9kZS5jb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXggPT0g
bV9jdXJyZW50SW5kZXgpOworICAgICAgICBBU1NFUlQobm9kZS0+b3AoKSA9PSBHZXRMb2NhbCk7
CisgICAgICAgIEFTU0VSVChub2RlLT5jb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXggPT0gbV9jdXJy
ZW50SW5kZXgpOwogICAgICAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uID0gCiAgICAgICAg
ICAgICBtX2lubGluZVN0YWNrVG9wLT5tX2xhenlPcGVyYW5kcy5wcmVkaWN0aW9uKAotICAgICAg
ICAgICAgICAgIExhenlPcGVyYW5kVmFsdWVQcm9maWxlS2V5KG1fY3VycmVudEluZGV4LCBub2Rl
LmxvY2FsKCkpKTsKKyAgICAgICAgICAgICAgICBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZUtleSht
X2N1cnJlbnRJbmRleCwgbm9kZS0+bG9jYWwoKSkpOwogI2lmIERGR19FTkFCTEUoREVCVUdfVkVS
Qk9TRSkKLSAgICAgICAgZGF0YUxvZygiTGF6eSBvcGVyYW5kIFtAIiwgbm9kZUluZGV4LCAiLCBi
YyMiLCBtX2N1cnJlbnRJbmRleCwgIiwgciIsIG5vZGUubG9jYWwoKSwgIl0gcHJlZGljdGlvbjog
IiwgU3BlY3VsYXRpb25EdW1wKHByZWRpY3Rpb24pLCAiXG4iKTsKKyAgICAgICAgZGF0YUxvZygi
TGF6eSBvcGVyYW5kIFtAIiwgbm9kZS0+aW5kZXgoKSwgIiwgYmMjIiwgbV9jdXJyZW50SW5kZXgs
ICIsIHIiLCBub2RlLT5sb2NhbCgpLCAiXSBwcmVkaWN0aW9uOiAiLCBTcGVjdWxhdGlvbkR1bXAo
cHJlZGljdGlvbiksICJcbiIpOwogI2VuZGlmCi0gICAgICAgIG5vZGUudmFyaWFibGVBY2Nlc3NE
YXRhKCktPnByZWRpY3QocHJlZGljdGlvbik7Ci0gICAgICAgIHJldHVybiBub2RlSW5kZXg7Cisg
ICAgICAgIG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5wcmVkaWN0KHByZWRpY3Rpb24pOwor
ICAgICAgICByZXR1cm4gbm9kZTsKICAgICB9CiAKICAgICAvLyBVc2VkIGluIGltcGxlbWVudGlu
ZyBnZXQvc2V0LCBhYm92ZSwgd2hlcmUgdGhlIG9wZXJhbmQgaXMgYSBsb2NhbCB2YXJpYWJsZS4K
LSAgICBOb2RlSW5kZXggZ2V0TG9jYWwodW5zaWduZWQgb3BlcmFuZCkKKyAgICBOb2RlKiBnZXRM
b2NhbCh1bnNpZ25lZCBvcGVyYW5kKQogICAgIHsKLSAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRl
eCA9IG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwubG9jYWwob3BlcmFuZCk7CisgICAg
ICAgIE5vZGUqIG5vZGUgPSBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLmxvY2FsKG9w
ZXJhbmQpOwogICAgICAgICBib29sIGlzQ2FwdHVyZWQgPSBtX2NvZGVCbG9jay0+aXNDYXB0dXJl
ZChvcGVyYW5kLCBtX2lubGluZVN0YWNrVG9wLT5tX2lubGluZUNhbGxGcmFtZSk7CiAgICAgICAg
IAotICAgICAgICBpZiAobm9kZUluZGV4ICE9IE5vTm9kZSkgewotICAgICAgICAgICAgTm9kZSog
bm9kZVB0ciA9ICZtX2dyYXBoW25vZGVJbmRleF07Ci0gICAgICAgICAgICBpZiAobm9kZVB0ci0+
b3AoKSA9PSBGbHVzaCkgeworICAgICAgICBpZiAobm9kZSkgeworICAgICAgICAgICAgaWYgKG5v
ZGUtPm9wKCkgPT0gRmx1c2gpIHsKICAgICAgICAgICAgICAgICAvLyBUd28gcG9zc2liaWxpdGll
czogZWl0aGVyIHRoZSBibG9jayB3YW50cyB0aGUgbG9jYWwgdG8gYmUgbGl2ZQogICAgICAgICAg
ICAgICAgIC8vIGJ1dCBoYXMgbm90IGxvYWRlZCBpdHMgdmFsdWUsIG9yIGl0IGhhcyBsb2FkZWQg
aXRzIHZhbHVlLCBpbgogICAgICAgICAgICAgICAgIC8vIHdoaWNoIGNhc2Ugd2UncmUgZG9uZS4K
LSAgICAgICAgICAgICAgICBub2RlSW5kZXggPSBub2RlUHRyLT5jaGlsZDEoKS5pbmRleCgpOwot
ICAgICAgICAgICAgICAgIE5vZGUmIGZsdXNoQ2hpbGQgPSBtX2dyYXBoW25vZGVJbmRleF07Ci0g
ICAgICAgICAgICAgICAgaWYgKGZsdXNoQ2hpbGQub3AoKSA9PSBQaGkpIHsKLSAgICAgICAgICAg
ICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBmbHVzaENo
aWxkLnZhcmlhYmxlQWNjZXNzRGF0YSgpOworICAgICAgICAgICAgICAgIG5vZGUgPSBub2RlLT5j
aGlsZDEoKS5ub2RlKCk7CisgICAgICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gUGhpKSB7
CisgICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NE
YXRhID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CiAgICAgICAgICAgICAgICAgICAgIHZh
cmlhYmxlQWNjZXNzRGF0YS0+bWVyZ2VJc0NhcHR1cmVkKGlzQ2FwdHVyZWQpOwotICAgICAgICAg
ICAgICAgICAgICBub2RlSW5kZXggPSBpbmplY3RMYXp5T3BlcmFuZFNwZWN1bGF0aW9uKGFkZFRv
R3JhcGgoR2V0TG9jYWwsIE9wSW5mbyh2YXJpYWJsZUFjY2Vzc0RhdGEpLCBub2RlSW5kZXgpKTsK
LSAgICAgICAgICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5sb2Nh
bChvcGVyYW5kKSA9IG5vZGVJbmRleDsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGVJ
bmRleDsKKyAgICAgICAgICAgICAgICAgICAgbm9kZUluZGV4ID0gaW5qZWN0TGF6eU9wZXJhbmRT
cGVjdWxhdGlvbihhZGRUb0dyYXBoKEdldExvY2FsLCBPcEluZm8odmFyaWFibGVBY2Nlc3NEYXRh
KSwgbm9kZSkpOworICAgICAgICAgICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVz
QXRUYWlsLmxvY2FsKG9wZXJhbmQpID0gbm9kZTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IG5vZGU7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIG5vZGVQdHIgPSAmZmx1
c2hDaGlsZDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAgICAgICAgQVNTRVJU
KCZtX2dyYXBoW25vZGVJbmRleF0gPT0gbm9kZVB0cik7Ci0gICAgICAgICAgICBBU1NFUlQobm9k
ZVB0ci0+b3AoKSAhPSBGbHVzaCk7CisgICAgICAgICAgICBBU1NFUlQobm9kZS0+b3AoKSAhPSBG
bHVzaCk7CiAKLSAgICAgICAgICAgIG5vZGVQdHItPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5tZXJn
ZUlzQ2FwdHVyZWQoaXNDYXB0dXJlZCk7CisgICAgICAgICAgICBub2RlLT52YXJpYWJsZUFjY2Vz
c0RhdGEoKS0+bWVyZ2VJc0NhcHR1cmVkKGlzQ2FwdHVyZWQpOwogICAgICAgICAgICAgICAgIAog
ICAgICAgICAgICAgaWYgKGlzQ2FwdHVyZWQpIHsKICAgICAgICAgICAgICAgICAvLyBXZSB3aXNo
IHRvIHVzZSB0aGUgc2FtZSB2YXJpYWJsZSBhY2Nlc3MgZGF0YSBhcyB0aGUgcHJldmlvdXMgYWNj
ZXNzLApAQCAtMzE3LDE5ICszMTIsMTkgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAvLyBr
bm93LCBhdCB0aGlzIHN0YWdlIG9mIGNvbXBpbGF0aW9uLCB0aGUgbG9jYWwgaGFzIGJlZW4gY2xv
YmJlcmVkLgogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSB3
ZSBsaW5rIHRvIHRoZSBQaGkgbm9kZSwgbm90IHRvIHRoZSBHZXRMb2NhbC4KLSAgICAgICAgICAg
ICAgICBpZiAobm9kZVB0ci0+b3AoKSA9PSBHZXRMb2NhbCkKLSAgICAgICAgICAgICAgICAgICAg
bm9kZUluZGV4ID0gbm9kZVB0ci0+Y2hpbGQxKCkuaW5kZXgoKTsKKyAgICAgICAgICAgICAgICBp
ZiAobm9kZS0+b3AoKSA9PSBHZXRMb2NhbCkKKyAgICAgICAgICAgICAgICAgICAgbm9kZSA9IG5v
ZGUtPmNoaWxkMSgpLm5vZGUoKTsKICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBO
b2RlSW5kZXggbmV3R2V0TG9jYWwgPSBpbmplY3RMYXp5T3BlcmFuZFNwZWN1bGF0aW9uKAotICAg
ICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKEdldExvY2FsLCBPcEluZm8obm9kZVB0ci0+dmFy
aWFibGVBY2Nlc3NEYXRhKCkpLCBub2RlSW5kZXgpKTsKKyAgICAgICAgICAgICAgICBOb2RlKiBu
ZXdHZXRMb2NhbCA9IGluamVjdExhenlPcGVyYW5kU3BlY3VsYXRpb24oCisgICAgICAgICAgICAg
ICAgICAgIGFkZFRvR3JhcGgoR2V0TG9jYWwsIE9wSW5mbyhub2RlUHRyLT52YXJpYWJsZUFjY2Vz
c0RhdGEoKSksIG5vZGUpKTsKICAgICAgICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+dmFyaWFi
bGVzQXRUYWlsLmxvY2FsKG9wZXJhbmQpID0gbmV3R2V0TG9jYWw7CiAgICAgICAgICAgICAgICAg
cmV0dXJuIG5ld0dldExvY2FsOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAg
ICAgICBpZiAobm9kZVB0ci0+b3AoKSA9PSBHZXRMb2NhbCkKLSAgICAgICAgICAgICAgICByZXR1
cm4gbm9kZUluZGV4OwotICAgICAgICAgICAgQVNTRVJUKG5vZGVQdHItPm9wKCkgPT0gU2V0TG9j
YWwpOwotICAgICAgICAgICAgcmV0dXJuIG5vZGVQdHItPmNoaWxkMSgpLmluZGV4KCk7CisgICAg
ICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBHZXRMb2NhbCkKKyAgICAgICAgICAgICAgICByZXR1
cm4gbm9kZTsKKyAgICAgICAgICAgIEFTU0VSVChub2RlLT5vcCgpID09IFNldExvY2FsKTsKKyAg
ICAgICAgICAgIHJldHVybiBub2RlLT5jaGlsZDEoKS5ub2RlKCk7CiAgICAgICAgIH0KIAogICAg
ICAgICAvLyBDaGVjayBmb3IgcmVhZHMgb2YgdGVtcG9yYXJpZXMgZnJvbSBwcmlvciBibG9ja3Ms
CkBAIC0zMzgsMTYgKzMzMywxNiBAQCBwcml2YXRlOgogICAgICAgICAKICAgICAgICAgVmFyaWFi
bGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBuZXdWYXJpYWJsZUFjY2Vzc0RhdGEo
b3BlcmFuZCwgaXNDYXB0dXJlZCk7CiAgICAgICAgIAotICAgICAgICBOb2RlSW5kZXggcGhpID0g
YWRkVG9HcmFwaChQaGksIE9wSW5mbyh2YXJpYWJsZUFjY2Vzc0RhdGEpKTsKKyAgICAgICAgTm9k
ZSogcGhpID0gYWRkVG9HcmFwaChQaGksIE9wSW5mbyh2YXJpYWJsZUFjY2Vzc0RhdGEpKTsKICAg
ICAgICAgbV9sb2NhbFBoaVN0YWNrLmFwcGVuZChQaGlTdGFja0VudHJ5KG1fY3VycmVudEJsb2Nr
LCBwaGksIG9wZXJhbmQpKTsKLSAgICAgICAgbm9kZUluZGV4ID0gaW5qZWN0TGF6eU9wZXJhbmRT
cGVjdWxhdGlvbihhZGRUb0dyYXBoKEdldExvY2FsLCBPcEluZm8odmFyaWFibGVBY2Nlc3NEYXRh
KSwgcGhpKSk7Ci0gICAgICAgIG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwubG9jYWwo
b3BlcmFuZCkgPSBub2RlSW5kZXg7CisgICAgICAgIG5vZGUgPSBpbmplY3RMYXp5T3BlcmFuZFNw
ZWN1bGF0aW9uKGFkZFRvR3JhcGgoR2V0TG9jYWwsIE9wSW5mbyh2YXJpYWJsZUFjY2Vzc0RhdGEp
LCBwaGkpKTsKKyAgICAgICAgbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5sb2NhbChv
cGVyYW5kKSA9IG5vZGU7CiAgICAgICAgIAotICAgICAgICBtX2N1cnJlbnRCbG9jay0+dmFyaWFi
bGVzQXRIZWFkLnNldExvY2FsRmlyc3RUaW1lKG9wZXJhbmQsIG5vZGVJbmRleCk7CisgICAgICAg
IG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdEhlYWQuc2V0TG9jYWxGaXJzdFRpbWUob3BlcmFu
ZCwgbm9kZSk7CiAgICAgICAgIAotICAgICAgICByZXR1cm4gbm9kZUluZGV4OworICAgICAgICBy
ZXR1cm4gbm9kZTsKICAgICB9Ci0gICAgdm9pZCBzZXRMb2NhbCh1bnNpZ25lZCBvcGVyYW5kLCBO
b2RlSW5kZXggdmFsdWUsIFNldE1vZGUgc2V0TW9kZSA9IE5vcm1hbFNldCkKKyAgICB2b2lkIHNl
dExvY2FsKHVuc2lnbmVkIG9wZXJhbmQsIE5vZGUqIHZhbHVlLCBTZXRNb2RlIHNldE1vZGUgPSBO
b3JtYWxTZXQpCiAgICAgewogICAgICAgICBib29sIGlzQ2FwdHVyZWQgPSBtX2NvZGVCbG9jay0+
aXNDYXB0dXJlZChvcGVyYW5kLCBtX2lubGluZVN0YWNrVG9wLT5tX2lubGluZUNhbGxGcmFtZSk7
CiAgICAgICAgIApAQCAtMzYwLDc3ICszNTUsNzMgQEAgcHJpdmF0ZToKICAgICAgICAgVmFyaWFi
bGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBuZXdWYXJpYWJsZUFjY2Vzc0RhdGEo
b3BlcmFuZCwgaXNDYXB0dXJlZCk7CiAgICAgICAgIHZhcmlhYmxlQWNjZXNzRGF0YS0+bWVyZ2VT
dHJ1Y3R1cmVDaGVja0hvaXN0aW5nRmFpbGVkKAogICAgICAgICAgICAgbV9pbmxpbmVTdGFja1Rv
cC0+bV9leGl0UHJvZmlsZS5oYXNFeGl0U2l0ZShtX2N1cnJlbnRJbmRleCwgQmFkQ2FjaGUpKTsK
LSAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRleCA9IGFkZFRvR3JhcGgoU2V0TG9jYWwsIE9wSW5m
byh2YXJpYWJsZUFjY2Vzc0RhdGEpLCB2YWx1ZSk7Ci0gICAgICAgIG1fY3VycmVudEJsb2NrLT52
YXJpYWJsZXNBdFRhaWwubG9jYWwob3BlcmFuZCkgPSBub2RlSW5kZXg7CisgICAgICAgIE5vZGUq
IG5vZGUgPSBhZGRUb0dyYXBoKFNldExvY2FsLCBPcEluZm8odmFyaWFibGVBY2Nlc3NEYXRhKSwg
dmFsdWUpOworICAgICAgICBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLmxvY2FsKG9w
ZXJhbmQpID0gbm9kZTsKICAgICB9CiAKICAgICAvLyBVc2VkIGluIGltcGxlbWVudGluZyBnZXQv
c2V0LCBhYm92ZSwgd2hlcmUgdGhlIG9wZXJhbmQgaXMgYW4gYXJndW1lbnQuCi0gICAgTm9kZUlu
ZGV4IGdldEFyZ3VtZW50KHVuc2lnbmVkIG9wZXJhbmQpCisgICAgTm9kZSogZ2V0QXJndW1lbnQo
dW5zaWduZWQgb3BlcmFuZCkKICAgICB7CiAgICAgICAgIHVuc2lnbmVkIGFyZ3VtZW50ID0gb3Bl
cmFuZFRvQXJndW1lbnQob3BlcmFuZCk7CiAgICAgICAgIEFTU0VSVChhcmd1bWVudCA8IG1fbnVt
QXJndW1lbnRzKTsKICAgICAgICAgCi0gICAgICAgIE5vZGVJbmRleCBub2RlSW5kZXggPSBtX2N1
cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLmFyZ3VtZW50KGFyZ3VtZW50KTsKKyAgICAgICAg
Tm9kZSogbm9kZSA9IG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwuYXJndW1lbnQoYXJn
dW1lbnQpOwogICAgICAgICBib29sIGlzQ2FwdHVyZWQgPSBtX2NvZGVCbG9jay0+aXNDYXB0dXJl
ZChvcGVyYW5kKTsKIAotICAgICAgICBpZiAobm9kZUluZGV4ICE9IE5vTm9kZSkgewotICAgICAg
ICAgICAgTm9kZSogbm9kZVB0ciA9ICZtX2dyYXBoW25vZGVJbmRleF07Ci0gICAgICAgICAgICBp
ZiAobm9kZVB0ci0+b3AoKSA9PSBGbHVzaCkgeworICAgICAgICBpZiAobm9kZSkgeworICAgICAg
ICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gRmx1c2gpIHsKICAgICAgICAgICAgICAgICAvLyBUd28g
cG9zc2liaWxpdGllczogZWl0aGVyIHRoZSBibG9jayB3YW50cyB0aGUgbG9jYWwgdG8gYmUgbGl2
ZQogICAgICAgICAgICAgICAgIC8vIGJ1dCBoYXMgbm90IGxvYWRlZCBpdHMgdmFsdWUsIG9yIGl0
IGhhcyBsb2FkZWQgaXRzIHZhbHVlLCBpbgogICAgICAgICAgICAgICAgIC8vIHdoaWNoIGNhc2Ug
d2UncmUgZG9uZS4KLSAgICAgICAgICAgICAgICBub2RlSW5kZXggPSBub2RlUHRyLT5jaGlsZDEo
KS5pbmRleCgpOwotICAgICAgICAgICAgICAgIE5vZGUmIGZsdXNoQ2hpbGQgPSBtX2dyYXBoW25v
ZGVJbmRleF07Ci0gICAgICAgICAgICAgICAgaWYgKGZsdXNoQ2hpbGQub3AoKSA9PSBQaGkpIHsK
LSAgICAgICAgICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0Rh
dGEgPSBmbHVzaENoaWxkLnZhcmlhYmxlQWNjZXNzRGF0YSgpOworICAgICAgICAgICAgICAgIG5v
ZGUgPSBub2RlLT5jaGlsZDEoKS5ub2RlKCk7CisgICAgICAgICAgICAgICAgaWYgKG5vZGUtPm9w
KCkgPT0gUGhpKSB7CisgICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFy
aWFibGVBY2Nlc3NEYXRhID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CiAgICAgICAgICAg
ICAgICAgICAgIHZhcmlhYmxlQWNjZXNzRGF0YS0+bWVyZ2VJc0NhcHR1cmVkKGlzQ2FwdHVyZWQp
OwotICAgICAgICAgICAgICAgICAgICBub2RlSW5kZXggPSBpbmplY3RMYXp5T3BlcmFuZFNwZWN1
bGF0aW9uKGFkZFRvR3JhcGgoR2V0TG9jYWwsIE9wSW5mbyh2YXJpYWJsZUFjY2Vzc0RhdGEpLCBu
b2RlSW5kZXgpKTsKLSAgICAgICAgICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPnZhcmlhYmxl
c0F0VGFpbC5hcmd1bWVudChhcmd1bWVudCkgPSBub2RlSW5kZXg7Ci0gICAgICAgICAgICAgICAg
ICAgIHJldHVybiBub2RlSW5kZXg7CisgICAgICAgICAgICAgICAgICAgIG5vZGUgPSBpbmplY3RM
YXp5T3BlcmFuZFNwZWN1bGF0aW9uKGFkZFRvR3JhcGgoR2V0TG9jYWwsIE9wSW5mbyh2YXJpYWJs
ZUFjY2Vzc0RhdGEpLCBub2RlKSk7CisgICAgICAgICAgICAgICAgICAgIG1fY3VycmVudEJsb2Nr
LT52YXJpYWJsZXNBdFRhaWwuYXJndW1lbnQoYXJndW1lbnQpID0gbm9kZTsKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIG5vZGU7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IG5vZGVQdHIgPSAmZmx1c2hDaGlsZDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAotICAg
ICAgICAgICAgQVNTRVJUKCZtX2dyYXBoW25vZGVJbmRleF0gPT0gbm9kZVB0cik7Ci0gICAgICAg
ICAgICBBU1NFUlQobm9kZVB0ci0+b3AoKSAhPSBGbHVzaCk7CisgICAgICAgICAgICBBU1NFUlQo
bm9kZS0+b3AoKSAhPSBGbHVzaCk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIG5vZGVQdHIt
PnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5tZXJnZUlzQ2FwdHVyZWQoaXNDYXB0dXJlZCk7CisgICAg
ICAgICAgICBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+bWVyZ2VJc0NhcHR1cmVkKGlzQ2Fw
dHVyZWQpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAobm9kZVB0ci0+b3AoKSA9PSBT
ZXRBcmd1bWVudCkgeworICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gU2V0QXJndW1lbnQp
IHsKICAgICAgICAgICAgICAgICAvLyBXZSdyZSBnZXR0aW5nIGFuIGFyZ3VtZW50IGluIHRoZSBm
aXJzdCBiYXNpYyBibG9jazsgbGluawogICAgICAgICAgICAgICAgIC8vIHRoZSBHZXRMb2NhbCB0
byB0aGUgU2V0QXJndW1lbnQuCi0gICAgICAgICAgICAgICAgQVNTRVJUKG5vZGVQdHItPmxvY2Fs
KCkgPT0gc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihvcGVyYW5kKSk7Ci0gICAgICAgICAg
ICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG5vZGVQdHItPnZhcmlhYmxlQWNj
ZXNzRGF0YSgpOwotICAgICAgICAgICAgICAgIG5vZGVJbmRleCA9IGluamVjdExhenlPcGVyYW5k
U3BlY3VsYXRpb24oYWRkVG9HcmFwaChHZXRMb2NhbCwgT3BJbmZvKHZhcmlhYmxlKSwgbm9kZUlu
ZGV4KSk7Ci0gICAgICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5h
cmd1bWVudChhcmd1bWVudCkgPSBub2RlSW5kZXg7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG5v
ZGVJbmRleDsKKyAgICAgICAgICAgICAgICBBU1NFUlQobm9kZS0+bG9jYWwoKSA9PSBzdGF0aWNf
Y2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KG9wZXJhbmQpKTsKKyAgICAgICAgICAgICAgICBWYXJpYWJs
ZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CisgICAg
ICAgICAgICAgICAgbm9kZSA9IGluamVjdExhenlPcGVyYW5kU3BlY3VsYXRpb24oYWRkVG9HcmFw
aChHZXRMb2NhbCwgT3BJbmZvKHZhcmlhYmxlKSwgbm9kZSkpOworICAgICAgICAgICAgICAgIG1f
Y3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwuYXJndW1lbnQoYXJndW1lbnQpID0gbm9kZTsK
KyAgICAgICAgICAgICAgICByZXR1cm4gbm9kZTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IAogICAgICAgICAgICAgaWYgKGlzQ2FwdHVyZWQpIHsKLSAgICAgICAgICAgICAgICBpZiAobm9k
ZVB0ci0+b3AoKSA9PSBHZXRMb2NhbCkKLSAgICAgICAgICAgICAgICAgICAgbm9kZUluZGV4ID0g
bm9kZVB0ci0+Y2hpbGQxKCkuaW5kZXgoKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gaW5qZWN0
TGF6eU9wZXJhbmRTcGVjdWxhdGlvbihhZGRUb0dyYXBoKEdldExvY2FsLCBPcEluZm8obm9kZVB0
ci0+dmFyaWFibGVBY2Nlc3NEYXRhKCkpLCBub2RlSW5kZXgpKTsKKyAgICAgICAgICAgICAgICBp
ZiAobm9kZS0+b3AoKSA9PSBHZXRMb2NhbCkKKyAgICAgICAgICAgICAgICAgICAgbm9kZSA9IG5v
ZGUtPmNoaWxkMSgpLm5vZGUoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gaW5qZWN0TGF6eU9w
ZXJhbmRTcGVjdWxhdGlvbihhZGRUb0dyYXBoKEdldExvY2FsLCBPcEluZm8obm9kZS0+dmFyaWFi
bGVBY2Nlc3NEYXRhKCkpLCBub2RlKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKLSAg
ICAgICAgICAgIGlmIChub2RlUHRyLT5vcCgpID09IEdldExvY2FsKQotICAgICAgICAgICAgICAg
IHJldHVybiBub2RlSW5kZXg7CisgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBHZXRMb2Nh
bCkKKyAgICAgICAgICAgICAgICByZXR1cm4gbm9kZTsKICAgICAgICAgICAgIAotICAgICAgICAg
ICAgQVNTRVJUKG5vZGVQdHItPm9wKCkgPT0gU2V0TG9jYWwpOwotICAgICAgICAgICAgcmV0dXJu
IG5vZGVQdHItPmNoaWxkMSgpLmluZGV4KCk7CisgICAgICAgICAgICBBU1NFUlQobm9kZS0+b3Ao
KSA9PSBTZXRMb2NhbCk7CisgICAgICAgICAgICByZXR1cm4gbm9kZS0+Y2hpbGQxKCkubm9kZSgp
OwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlh
YmxlQWNjZXNzRGF0YSA9IG5ld1ZhcmlhYmxlQWNjZXNzRGF0YShvcGVyYW5kLCBpc0NhcHR1cmVk
KTsKIAotICAgICAgICBOb2RlSW5kZXggcGhpID0gYWRkVG9HcmFwaChQaGksIE9wSW5mbyh2YXJp
YWJsZUFjY2Vzc0RhdGEpKTsKKyAgICAgICAgTm9kZSogcGhpID0gYWRkVG9HcmFwaChQaGksIE9w
SW5mbyh2YXJpYWJsZUFjY2Vzc0RhdGEpKTsKICAgICAgICAgbV9hcmd1bWVudFBoaVN0YWNrLmFw
cGVuZChQaGlTdGFja0VudHJ5KG1fY3VycmVudEJsb2NrLCBwaGksIGFyZ3VtZW50KSk7Ci0gICAg
ICAgIG5vZGVJbmRleCA9IGluamVjdExhenlPcGVyYW5kU3BlY3VsYXRpb24oYWRkVG9HcmFwaChH
ZXRMb2NhbCwgT3BJbmZvKHZhcmlhYmxlQWNjZXNzRGF0YSksIHBoaSkpOwotICAgICAgICBtX2N1
cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLmFyZ3VtZW50KGFyZ3VtZW50KSA9IG5vZGVJbmRl
eDsKKyAgICAgICAgbm9kZSA9IGluamVjdExhenlPcGVyYW5kU3BlY3VsYXRpb24oYWRkVG9HcmFw
aChHZXRMb2NhbCwgT3BJbmZvKHZhcmlhYmxlQWNjZXNzRGF0YSksIHBoaSkpOworICAgICAgICBt
X2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLmFyZ3VtZW50KGFyZ3VtZW50KSA9IG5vZGU7
CiAgICAgICAgIAotICAgICAgICBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRIZWFkLnNldEFy
Z3VtZW50Rmlyc3RUaW1lKGFyZ3VtZW50LCBub2RlSW5kZXgpOworICAgICAgICBtX2N1cnJlbnRC
bG9jay0+dmFyaWFibGVzQXRIZWFkLnNldEFyZ3VtZW50Rmlyc3RUaW1lKGFyZ3VtZW50LCBub2Rl
KTsKICAgICAgICAgCi0gICAgICAgIHJldHVybiBub2RlSW5kZXg7CisgICAgICAgIHJldHVybiBu
b2RlOwogICAgIH0KLSAgICB2b2lkIHNldEFyZ3VtZW50KGludCBvcGVyYW5kLCBOb2RlSW5kZXgg
dmFsdWUsIFNldE1vZGUgc2V0TW9kZSA9IE5vcm1hbFNldCkKKyAgICB2b2lkIHNldEFyZ3VtZW50
KGludCBvcGVyYW5kLCBOb2RlKiB2YWx1ZSwgU2V0TW9kZSBzZXRNb2RlID0gTm9ybWFsU2V0KQog
ICAgIHsKICAgICAgICAgdW5zaWduZWQgYXJndW1lbnQgPSBvcGVyYW5kVG9Bcmd1bWVudChvcGVy
YW5kKTsKICAgICAgICAgQVNTRVJUKGFyZ3VtZW50IDwgbV9udW1Bcmd1bWVudHMpOwpAQCAtNDQ0
LDggKzQzNSw4IEBAIHByaXZhdGU6CiAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFi
bGVBY2Nlc3NEYXRhID0gbmV3VmFyaWFibGVBY2Nlc3NEYXRhKG9wZXJhbmQsIGlzQ2FwdHVyZWQp
OwogICAgICAgICB2YXJpYWJsZUFjY2Vzc0RhdGEtPm1lcmdlU3RydWN0dXJlQ2hlY2tIb2lzdGlu
Z0ZhaWxlZCgKICAgICAgICAgICAgIG1faW5saW5lU3RhY2tUb3AtPm1fZXhpdFByb2ZpbGUuaGFz
RXhpdFNpdGUobV9jdXJyZW50SW5kZXgsIEJhZENhY2hlKSk7Ci0gICAgICAgIE5vZGVJbmRleCBu
b2RlSW5kZXggPSBhZGRUb0dyYXBoKFNldExvY2FsLCBPcEluZm8odmFyaWFibGVBY2Nlc3NEYXRh
KSwgdmFsdWUpOwotICAgICAgICBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLmFyZ3Vt
ZW50KGFyZ3VtZW50KSA9IG5vZGVJbmRleDsKKyAgICAgICAgTm9kZSogbm9kZSA9IGFkZFRvR3Jh
cGgoU2V0TG9jYWwsIE9wSW5mbyh2YXJpYWJsZUFjY2Vzc0RhdGEpLCB2YWx1ZSk7CisgICAgICAg
IG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwuYXJndW1lbnQoYXJndW1lbnQpID0gbm9k
ZTsKICAgICB9CiAgICAgCiAgICAgQXJndW1lbnRQb3NpdGlvbiogZmluZEFyZ3VtZW50UG9zaXRp
b25Gb3JBcmd1bWVudChpbnQgYXJndW1lbnQpCkBAIC01MDAsNTUgKzQ5MSw1MyBAQCBwcml2YXRl
OgogICAgICAgICAKICAgICAgICAgQVNTRVJUKG9wZXJhbmQgPCBGaXJzdENvbnN0YW50UmVnaXN0
ZXJJbmRleCk7CiAgICAgICAgIAotICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4OworICAgICAg
ICBOb2RlKiBub2RlOwogICAgICAgICBpbnQgaW5kZXg7CiAgICAgICAgIGlmIChvcGVyYW5kSXNB
cmd1bWVudChvcGVyYW5kKSkgewogICAgICAgICAgICAgaW5kZXggPSBvcGVyYW5kVG9Bcmd1bWVu
dChvcGVyYW5kKTsKLSAgICAgICAgICAgIG5vZGVJbmRleCA9IG1fY3VycmVudEJsb2NrLT52YXJp
YWJsZXNBdFRhaWwuYXJndW1lbnQoaW5kZXgpOworICAgICAgICAgICAgbm9kZSA9IG1fY3VycmVu
dEJsb2NrLT52YXJpYWJsZXNBdFRhaWwuYXJndW1lbnQoaW5kZXgpOwogICAgICAgICB9IGVsc2Ug
ewogICAgICAgICAgICAgaW5kZXggPSBvcGVyYW5kOwotICAgICAgICAgICAgbm9kZUluZGV4ID0g
bV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5sb2NhbChpbmRleCk7CisgICAgICAgICAg
ICBub2RlID0gbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5sb2NhbChpbmRleCk7CiAg
ICAgICAgICAgICBtX3ByZXNlcnZlZFZhcnMuc2V0KG9wZXJhbmQpOwogICAgICAgICB9CiAgICAg
ICAgIAotICAgICAgICBpZiAobm9kZUluZGV4ICE9IE5vTm9kZSkgewotICAgICAgICAgICAgTm9k
ZSYgbm9kZSA9IG1fZ3JhcGhbbm9kZUluZGV4XTsKLSAgICAgICAgICAgIHN3aXRjaCAobm9kZS5v
cCgpKSB7CisgICAgICAgIGlmIChub2RlKSB7CisgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9w
KCkpIHsKICAgICAgICAgICAgIGNhc2UgRmx1c2g6Ci0gICAgICAgICAgICAgICAgbm9kZUluZGV4
ID0gbm9kZS5jaGlsZDEoKS5pbmRleCgpOworICAgICAgICAgICAgICAgIG5vZGUgPSBub2RlLT5j
aGlsZDEoKS5ub2RlKCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNl
IEdldExvY2FsOgotICAgICAgICAgICAgICAgIG5vZGVJbmRleCA9IG5vZGUuY2hpbGQxKCkuaW5k
ZXgoKTsKKyAgICAgICAgICAgICAgICBub2RlID0gbm9kZS0+Y2hpbGQxKCkubm9kZSgpOwogICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAgICAgICAgQVNTRVJU
KG1fZ3JhcGhbbm9kZUluZGV4XS5vcCgpICE9IEZsdXNoCi0gICAgICAgICAgICAgICAgICAgJiYg
bV9ncmFwaFtub2RlSW5kZXhdLm9wKCkgIT0gR2V0TG9jYWwpOworICAgICAgICAgICAgQVNTRVJU
KG5vZGUtPm9wKCkgIT0gRmx1c2ggJiYgbm9kZS0+b3AoKSAhPSBHZXRMb2NhbCk7CiAgICAgICAg
ICAgICAKICAgICAgICAgICAgIC8vIEVtaXQgYSBGbHVzaCByZWdhcmRsZXNzIG9mIHdoZXRoZXIg
d2UgYWxyZWFkeSBmbHVzaGVkIGl0LgogICAgICAgICAgICAgLy8gVGhpcyBnaXZlcyB1cyBndWlk
YW5jZSB0byBzZWUgdGhhdCB0aGUgdmFyaWFibGUgYWxzbyBuZWVkcyB0byBiZSBmbHVzaGVkCiAg
ICAgICAgICAgICAvLyBmb3IgYXJndW1lbnRzLCBldmVuIGlmIGl0IGFscmVhZHkgaGFkIHRvIGJl
IGZsdXNoZWQgZm9yIG90aGVyIHJlYXNvbnMuCi0gICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0Rh
dGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9IG5vZGUudmFyaWFibGVBY2Nlc3NEYXRhKCk7CisgICAg
ICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9IG5vZGUtPnZh
cmlhYmxlQWNjZXNzRGF0YSgpOwogICAgICAgICAgICAgdmFyaWFibGVBY2Nlc3NEYXRhLT5tZXJn
ZUlzQ2FwdHVyZWQoaXNDYXB0dXJlZCk7Ci0gICAgICAgICAgICBhZGRUb0dyYXBoKEZsdXNoLCBP
cEluZm8odmFyaWFibGVBY2Nlc3NEYXRhKSwgbm9kZUluZGV4KTsKKyAgICAgICAgICAgIGFkZFRv
R3JhcGgoRmx1c2gsIE9wSW5mbyh2YXJpYWJsZUFjY2Vzc0RhdGEpLCBub2RlKTsKICAgICAgICAg
ICAgIGlmIChhcmd1bWVudFBvc2l0aW9uKQogICAgICAgICAgICAgICAgIGFyZ3VtZW50UG9zaXRp
b24tPmFkZFZhcmlhYmxlKHZhcmlhYmxlQWNjZXNzRGF0YSk7CiAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFi
bGVBY2Nlc3NEYXRhID0gbmV3VmFyaWFibGVBY2Nlc3NEYXRhKG9wZXJhbmQsIGlzQ2FwdHVyZWQp
OwotICAgICAgICBOb2RlSW5kZXggcGhpID0gYWRkVG9HcmFwaChQaGksIE9wSW5mbyh2YXJpYWJs
ZUFjY2Vzc0RhdGEpKTsKLSAgICAgICAgbm9kZUluZGV4ID0gYWRkVG9HcmFwaChGbHVzaCwgT3BJ
bmZvKHZhcmlhYmxlQWNjZXNzRGF0YSksIHBoaSk7CisgICAgICAgIE5vZGUqIHBoaSA9IGFkZFRv
R3JhcGgoUGhpLCBPcEluZm8odmFyaWFibGVBY2Nlc3NEYXRhKSk7CisgICAgICAgIG5vZGUgPSBh
ZGRUb0dyYXBoKEZsdXNoLCBPcEluZm8odmFyaWFibGVBY2Nlc3NEYXRhKSwgcGhpKTsKICAgICAg
ICAgaWYgKG9wZXJhbmRJc0FyZ3VtZW50KG9wZXJhbmQpKSB7CiAgICAgICAgICAgICBtX2FyZ3Vt
ZW50UGhpU3RhY2suYXBwZW5kKFBoaVN0YWNrRW50cnkobV9jdXJyZW50QmxvY2ssIHBoaSwgaW5k
ZXgpKTsKLSAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwuYXJndW1l
bnQoaW5kZXgpID0gbm9kZUluZGV4OwotICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPnZhcmlh
Ymxlc0F0SGVhZC5zZXRBcmd1bWVudEZpcnN0VGltZShpbmRleCwgbm9kZUluZGV4KTsKKyAgICAg
ICAgICAgIG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwuYXJndW1lbnQoaW5kZXgpID0g
bm9kZTsKKyAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdEhlYWQuc2V0QXJn
dW1lbnRGaXJzdFRpbWUoaW5kZXgsIG5vZGUpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAg
ICAgbV9sb2NhbFBoaVN0YWNrLmFwcGVuZChQaGlTdGFja0VudHJ5KG1fY3VycmVudEJsb2NrLCBw
aGksIGluZGV4KSk7Ci0gICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWls
LmxvY2FsKGluZGV4KSA9IG5vZGVJbmRleDsKLSAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT52
YXJpYWJsZXNBdEhlYWQuc2V0TG9jYWxGaXJzdFRpbWUoaW5kZXgsIG5vZGVJbmRleCk7CisgICAg
ICAgICAgICBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLmxvY2FsKGluZGV4KSA9IG5v
ZGU7CisgICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRIZWFkLnNldExvY2Fs
Rmlyc3RUaW1lKGluZGV4LCBub2RlKTsKICAgICAgICAgfQogICAgICAgICBpZiAoYXJndW1lbnRQ
b3NpdGlvbikKICAgICAgICAgICAgIGFyZ3VtZW50UG9zaXRpb24tPmFkZFZhcmlhYmxlKHZhcmlh
YmxlQWNjZXNzRGF0YSk7CkBAIC01NzEsMzUgKzU2MCwzMyBAQCBwcml2YXRlOgogICAgIH0KIAog
ICAgIC8vIEdldCBhbiBvcGVyYW5kLCBhbmQgcGVyZm9ybSBhIFRvSW50MzIvVG9OdW1iZXIgY29u
dmVyc2lvbiBvbiBpdC4KLSAgICBOb2RlSW5kZXggZ2V0VG9JbnQzMihpbnQgb3BlcmFuZCkKKyAg
ICBOb2RlKiBnZXRUb0ludDMyKGludCBvcGVyYW5kKQogICAgIHsKICAgICAgICAgcmV0dXJuIHRv
SW50MzIoZ2V0KG9wZXJhbmQpKTsKICAgICB9CiAKICAgICAvLyBQZXJmb3JtIGFuIEVTNSBUb0lu
dDMyIG9wZXJhdGlvbiAtIHJldHVybnMgYSBub2RlIG9mIHR5cGUgTm9kZVJlc3VsdEludDMyLgot
ICAgIE5vZGVJbmRleCB0b0ludDMyKE5vZGVJbmRleCBpbmRleCkKKyAgICBOb2RlKiB0b0ludDMy
KE5vZGUqIG5vZGUpCiAgICAgewotICAgICAgICBOb2RlJiBub2RlID0gbV9ncmFwaFtpbmRleF07
CisgICAgICAgIGlmIChub2RlLT5oYXNJbnQzMlJlc3VsdCgpKQorICAgICAgICAgICAgcmV0dXJu
IG5vZGU7CiAKLSAgICAgICAgaWYgKG5vZGUuaGFzSW50MzJSZXN1bHQoKSkKLSAgICAgICAgICAg
IHJldHVybiBpbmRleDsKLQotICAgICAgICBpZiAobm9kZS5vcCgpID09IFVJbnQzMlRvTnVtYmVy
KQotICAgICAgICAgICAgcmV0dXJuIG5vZGUuY2hpbGQxKCkuaW5kZXgoKTsKKyAgICAgICAgaWYg
KG5vZGUtPm9wKCkgPT0gVUludDMyVG9OdW1iZXIpCisgICAgICAgICAgICByZXR1cm4gbm9kZS0+
Y2hpbGQxKCkubm9kZSgpOwogCiAgICAgICAgIC8vIENoZWNrIGZvciBudW1lcmljIGNvbnN0YW50
cyBib3hlZCBhcyBKU1ZhbHVlcy4KLSAgICAgICAgaWYgKG5vZGUub3AoKSA9PSBKU0NvbnN0YW50
KSB7Ci0gICAgICAgICAgICBKU1ZhbHVlIHYgPSB2YWx1ZU9mSlNDb25zdGFudChpbmRleCk7Cisg
ICAgICAgIGlmIChub2RlLT5vcCgpID09IEpTQ29uc3RhbnQpIHsKKyAgICAgICAgICAgIEpTVmFs
dWUgdiA9IHZhbHVlT2ZKU0NvbnN0YW50KG5vZGUpOwogICAgICAgICAgICAgaWYgKHYuaXNJbnQz
MigpKQotICAgICAgICAgICAgICAgIHJldHVybiBnZXRKU0NvbnN0YW50KG5vZGUuY29uc3RhbnRO
dW1iZXIoKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdldEpTQ29uc3RhbnQobm9kZS0+Y29u
c3RhbnROdW1iZXIoKSk7CiAgICAgICAgICAgICBpZiAodi5pc051bWJlcigpKQogICAgICAgICAg
ICAgICAgIHJldHVybiBnZXRKU0NvbnN0YW50Rm9yVmFsdWUoSlNWYWx1ZShKU0M6OnRvSW50MzIo
di5hc051bWJlcigpKSkpOwogICAgICAgICB9CiAKLSAgICAgICAgcmV0dXJuIGFkZFRvR3JhcGgo
VmFsdWVUb0ludDMyLCBpbmRleCk7CisgICAgICAgIHJldHVybiBhZGRUb0dyYXBoKFZhbHVlVG9J
bnQzMiwgbm9kZSk7CiAgICAgfQogCi0gICAgTm9kZUluZGV4IGdldEpTQ29uc3RhbnRGb3JWYWx1
ZShKU1ZhbHVlIGNvbnN0YW50VmFsdWUpCisgICAgTm9kZSogZ2V0SlNDb25zdGFudEZvclZhbHVl
KEpTVmFsdWUgY29uc3RhbnRWYWx1ZSkKICAgICB7CiAgICAgICAgIHVuc2lnbmVkIGNvbnN0YW50
SW5kZXggPSBtX2NvZGVCbG9jay0+YWRkT3JGaW5kQ29uc3RhbnQoY29uc3RhbnRWYWx1ZSk7CiAg
ICAgICAgIGlmIChjb25zdGFudEluZGV4ID49IG1fY29uc3RhbnRzLnNpemUoKSkKQEAgLTYxMCw1
NSArNTk3LDU1IEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiBnZXRKU0NvbnN0YW50KGNvbnN0
YW50SW5kZXgpOwogICAgIH0KIAotICAgIE5vZGVJbmRleCBnZXRKU0NvbnN0YW50KHVuc2lnbmVk
IGNvbnN0YW50KQorICAgIE5vZGUqIGdldEpTQ29uc3RhbnQodW5zaWduZWQgY29uc3RhbnQpCiAg
ICAgewotICAgICAgICBOb2RlSW5kZXggaW5kZXggPSBtX2NvbnN0YW50c1tjb25zdGFudF0uYXNK
U1ZhbHVlOwotICAgICAgICBpZiAoaW5kZXggIT0gTm9Ob2RlKQotICAgICAgICAgICAgcmV0dXJu
IGluZGV4OworICAgICAgICBOb2RlKiBub2RlID0gbV9jb25zdGFudHNbY29uc3RhbnRdLmFzSlNW
YWx1ZTsKKyAgICAgICAgaWYgKG5vZGUpCisgICAgICAgICAgICByZXR1cm4gbm9kZTsKIAotICAg
ICAgICBOb2RlSW5kZXggcmVzdWx0SW5kZXggPSBhZGRUb0dyYXBoKEpTQ29uc3RhbnQsIE9wSW5m
byhjb25zdGFudCkpOwotICAgICAgICBtX2NvbnN0YW50c1tjb25zdGFudF0uYXNKU1ZhbHVlID0g
cmVzdWx0SW5kZXg7Ci0gICAgICAgIHJldHVybiByZXN1bHRJbmRleDsKKyAgICAgICAgTm9kZSog
cmVzdWx0ID0gYWRkVG9HcmFwaChKU0NvbnN0YW50LCBPcEluZm8oY29uc3RhbnQpKTsKKyAgICAg
ICAgbV9jb25zdGFudHNbY29uc3RhbnRdLmFzSlNWYWx1ZSA9IHJlc3VsdDsKKyAgICAgICAgcmV0
dXJuIHJlc3VsdDsKICAgICB9CiAKLSAgICBOb2RlSW5kZXggZ2V0Q2FsbGVlKCkKKyAgICBOb2Rl
KiBnZXRDYWxsZWUoKQogICAgIHsKICAgICAgICAgcmV0dXJuIGFkZFRvR3JhcGgoR2V0Q2FsbGVl
KTsKICAgICB9CiAKICAgICAvLyBIZWxwZXIgZnVuY3Rpb25zIHRvIGdldC9zZXQgdGhlIHRoaXMg
dmFsdWUuCi0gICAgTm9kZUluZGV4IGdldFRoaXMoKQorICAgIE5vZGUqIGdldFRoaXMoKQogICAg
IHsKICAgICAgICAgcmV0dXJuIGdldChtX2lubGluZVN0YWNrVG9wLT5tX2NvZGVCbG9jay0+dGhp
c1JlZ2lzdGVyKCkpOwogICAgIH0KLSAgICB2b2lkIHNldFRoaXMoTm9kZUluZGV4IHZhbHVlKQor
ICAgIHZvaWQgc2V0VGhpcyhOb2RlKiB2YWx1ZSkKICAgICB7CiAgICAgICAgIHNldChtX2lubGlu
ZVN0YWNrVG9wLT5tX2NvZGVCbG9jay0+dGhpc1JlZ2lzdGVyKCksIHZhbHVlKTsKICAgICB9CiAK
ICAgICAvLyBDb252ZW5pZW5jZSBtZXRob2RzIGZvciBjaGVja2luZyBub2RlcyBmb3IgY29uc3Rh
bnRzLgotICAgIGJvb2wgaXNKU0NvbnN0YW50KE5vZGVJbmRleCBpbmRleCkKKyAgICBib29sIGlz
SlNDb25zdGFudChOb2RlKiBub2RlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIG1fZ3JhcGhbaW5k
ZXhdLm9wKCkgPT0gSlNDb25zdGFudDsKKyAgICAgICAgcmV0dXJuIG5vZGUtPm9wKCkgPT0gSlND
b25zdGFudDsKICAgICB9Ci0gICAgYm9vbCBpc0ludDMyQ29uc3RhbnQoTm9kZUluZGV4IG5vZGVJ
bmRleCkKKyAgICBib29sIGlzSW50MzJDb25zdGFudChOb2RlKiBub2RlKQogICAgIHsKLSAgICAg
ICAgcmV0dXJuIGlzSlNDb25zdGFudChub2RlSW5kZXgpICYmIHZhbHVlT2ZKU0NvbnN0YW50KG5v
ZGVJbmRleCkuaXNJbnQzMigpOworICAgICAgICByZXR1cm4gaXNKU0NvbnN0YW50KG5vZGUpICYm
IHZhbHVlT2ZKU0NvbnN0YW50KG5vZGUpLmlzSW50MzIoKTsKICAgICB9CiAgICAgLy8gQ29udmVu
aWVuY2UgbWV0aG9kcyBmb3IgZ2V0dGluZyBjb25zdGFudCB2YWx1ZXMuCi0gICAgSlNWYWx1ZSB2
YWx1ZU9mSlNDb25zdGFudChOb2RlSW5kZXggaW5kZXgpCisgICAgSlNWYWx1ZSB2YWx1ZU9mSlND
b25zdGFudChOb2RlKiBub2RlKQogICAgIHsKLSAgICAgICAgQVNTRVJUKGlzSlNDb25zdGFudChp
bmRleCkpOwotICAgICAgICByZXR1cm4gbV9jb2RlQmxvY2stPmdldENvbnN0YW50KEZpcnN0Q29u
c3RhbnRSZWdpc3RlckluZGV4ICsgbV9ncmFwaFtpbmRleF0uY29uc3RhbnROdW1iZXIoKSk7Cisg
ICAgICAgIEFTU0VSVChpc0pTQ29uc3RhbnQobm9kZSkpOworICAgICAgICByZXR1cm4gbV9jb2Rl
QmxvY2stPmdldENvbnN0YW50KEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4ICsgbm9kZS0+Y29u
c3RhbnROdW1iZXIoKSk7CiAgICAgfQotICAgIGludDMyX3QgdmFsdWVPZkludDMyQ29uc3RhbnQo
Tm9kZUluZGV4IG5vZGVJbmRleCkKKyAgICBpbnQzMl90IHZhbHVlT2ZJbnQzMkNvbnN0YW50KE5v
ZGUqIG5vZGUpCiAgICAgewotICAgICAgICBBU1NFUlQoaXNJbnQzMkNvbnN0YW50KG5vZGVJbmRl
eCkpOwotICAgICAgICByZXR1cm4gdmFsdWVPZkpTQ29uc3RhbnQobm9kZUluZGV4KS5hc0ludDMy
KCk7CisgICAgICAgIEFTU0VSVChpc0ludDMyQ29uc3RhbnQobm9kZSkpOworICAgICAgICByZXR1
cm4gdmFsdWVPZkpTQ29uc3RhbnQobm9kZSkuYXNJbnQzMigpOwogICAgIH0KICAgICAKICAgICAv
LyBUaGlzIG1ldGhvZCByZXR1cm5zIGEgSlNDb25zdGFudCB3aXRoIHRoZSB2YWx1ZSAndW5kZWZp
bmVkJy4KLSAgICBOb2RlSW5kZXggY29uc3RhbnRVbmRlZmluZWQoKQorICAgIE5vZGUqIGNvbnN0
YW50VW5kZWZpbmVkKCkKICAgICB7CiAgICAgICAgIC8vIEhhcyBtX2NvbnN0YW50VW5kZWZpbmVk
IGJlZW4gc2V0IHVwIHlldD8KICAgICAgICAgaWYgKG1fY29uc3RhbnRVbmRlZmluZWQgPT0gVUlO
VF9NQVgpIHsKQEAgLTY4Myw3ICs2NzAsNyBAQCBwcml2YXRlOgogICAgIH0KIAogICAgIC8vIFRo
aXMgbWV0aG9kIHJldHVybnMgYSBKU0NvbnN0YW50IHdpdGggdGhlIHZhbHVlICdudWxsJy4KLSAg
ICBOb2RlSW5kZXggY29uc3RhbnROdWxsKCkKKyAgICBOb2RlKiBjb25zdGFudE51bGwoKQogICAg
IHsKICAgICAgICAgLy8gSGFzIG1fY29uc3RhbnROdWxsIGJlZW4gc2V0IHVwIHlldD8KICAgICAg
ICAgaWYgKG1fY29uc3RhbnROdWxsID09IFVJTlRfTUFYKSB7CkBAIC03MDgsNyArNjk1LDcgQEAg
cHJpdmF0ZToKICAgICB9CiAKICAgICAvLyBUaGlzIG1ldGhvZCByZXR1cm5zIGEgRG91YmxlQ29u
c3RhbnQgd2l0aCB0aGUgdmFsdWUgMS4KLSAgICBOb2RlSW5kZXggb25lKCkKKyAgICBOb2RlKiBv
bmUoKQogICAgIHsKICAgICAgICAgLy8gSGFzIG1fY29uc3RhbnQxIGJlZW4gc2V0IHVwIHlldD8K
ICAgICAgICAgaWYgKG1fY29uc3RhbnQxID09IFVJTlRfTUFYKSB7CkBAIC03MzQsNyArNzIxLDcg
QEAgcHJpdmF0ZToKICAgICB9CiAgICAgCiAgICAgLy8gVGhpcyBtZXRob2QgcmV0dXJucyBhIERv
dWJsZUNvbnN0YW50IHdpdGggdGhlIHZhbHVlIE5hTi4KLSAgICBOb2RlSW5kZXggY29uc3RhbnRO
YU4oKQorICAgIE5vZGUqIGNvbnN0YW50TmFOKCkKICAgICB7CiAgICAgICAgIEpTVmFsdWUgbmFu
ID0ganNOYU4oKTsKICAgICAgICAgCkBAIC03NjEsOSArNzQ4LDkgQEAgcHJpdmF0ZToKICAgICAg
ICAgcmV0dXJuIGdldEpTQ29uc3RhbnQobV9jb25zdGFudE5hTik7CiAgICAgfQogICAgIAotICAg
IE5vZGVJbmRleCBjZWxsQ29uc3RhbnQoSlNDZWxsKiBjZWxsKQorICAgIE5vZGUqIGNlbGxDb25z
dGFudChKU0NlbGwqIGNlbGwpCiAgICAgewotICAgICAgICBIYXNoTWFwPEpTQ2VsbCosIE5vZGVJ
bmRleD46OkFkZFJlc3VsdCByZXN1bHQgPSBtX2NlbGxDb25zdGFudE5vZGVzLmFkZChjZWxsLCBO
b05vZGUpOworICAgICAgICBIYXNoTWFwPEpTQ2VsbCosIE5vZGVJbmRleD46OkFkZFJlc3VsdCBy
ZXN1bHQgPSBtX2NlbGxDb25zdGFudE5vZGVzLmFkZChjZWxsLCAwKTsKICAgICAgICAgaWYgKHJl
c3VsdC5pc05ld0VudHJ5KQogICAgICAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IGFk
ZFRvR3JhcGgoV2Vha0pTQ29uc3RhbnQsIE9wSW5mbyhjZWxsKSk7CiAgICAgICAgIApAQCAtNzc3
LDYzICs3NjQsNjkgQEAgcHJpdmF0ZToKIAogICAgIC8vIFRoZXNlIG1ldGhvZHMgY3JlYXRlIGEg
bm9kZSBhbmQgYWRkIGl0IHRvIHRoZSBncmFwaC4gSWYgbm9kZXMgb2YgdGhpcyB0eXBlIGFyZQog
ICAgIC8vICdtdXN0R2VuZXJhdGUnIHRoZW4gdGhlIG5vZGUgIHdpbGwgaW1wbGljaXRseSBiZSBy
ZWYnZWQgdG8gZW5zdXJlIGdlbmVyYXRpb24uCi0gICAgTm9kZUluZGV4IGFkZFRvR3JhcGgoTm9k
ZVR5cGUgb3AsIE5vZGVJbmRleCBjaGlsZDEgPSBOb05vZGUsIE5vZGVJbmRleCBjaGlsZDIgPSBO
b05vZGUsIE5vZGVJbmRleCBjaGlsZDMgPSBOb05vZGUpCisgICAgTm9kZSogYWRkVG9HcmFwaChO
b2RlVHlwZSBvcCwgTm9kZSogY2hpbGQxID0gMCwgTm9kZSogY2hpbGQyID0gMCwgTm9kZSogY2hp
bGQzID0gMCkKICAgICB7Ci0gICAgICAgIE5vZGVJbmRleCByZXN1bHRJbmRleCA9IChOb2RlSW5k
ZXgpbV9ncmFwaC5zaXplKCk7Ci0gICAgICAgIG1fZ3JhcGguYXBwZW5kKE5vZGUob3AsIGN1cnJl
bnRDb2RlT3JpZ2luKCksIGNoaWxkMSwgY2hpbGQyLCBjaGlsZDMpKTsKKyAgICAgICAgTm9kZSog
cmVzdWx0ID0gbV9ncmFwaC5hZGROb2RlKAorICAgICAgICAgICAgRG9udFJlZkNoaWxkcmVuLCBE
b250UmVmTm9kZSwgU3BlY05vbmUsCisgICAgICAgICAgICBvcCwgY3VycmVudENvZGVPcmlnaW4o
KSwgY2hpbGQxLCBjaGlsZDIsIGNoaWxkMyk7CiAgICAgICAgIEFTU0VSVChvcCAhPSBQaGkpOwot
ICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kKHJlc3VsdEluZGV4KTsKKyAgICAgICAgbV9j
dXJyZW50QmxvY2stPmFwcGVuZChyZXN1bHQpOwogCiAgICAgICAgIGlmIChkZWZhdWx0RmxhZ3Mo
b3ApICYgTm9kZU11c3RHZW5lcmF0ZSkKLSAgICAgICAgICAgIG1fZ3JhcGgucmVmKHJlc3VsdElu
ZGV4KTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdEluZGV4OworICAgICAgICAgICAgbV9ncmFwaC5y
ZWYocmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9Ci0gICAgTm9kZUluZGV4
IGFkZFRvR3JhcGgoTm9kZVR5cGUgb3AsIE9wSW5mbyBpbmZvLCBOb2RlSW5kZXggY2hpbGQxID0g
Tm9Ob2RlLCBOb2RlSW5kZXggY2hpbGQyID0gTm9Ob2RlLCBOb2RlSW5kZXggY2hpbGQzID0gTm9O
b2RlKQorICAgIE5vZGUqIGFkZFRvR3JhcGgoTm9kZVR5cGUgb3AsIE9wSW5mbyBpbmZvLCBOb2Rl
KiBjaGlsZDEgPSAwLCBOb2RlKiBjaGlsZDIgPSAwLCBOb2RlKiBjaGlsZDMgPSAwKQogICAgIHsK
LSAgICAgICAgTm9kZUluZGV4IHJlc3VsdEluZGV4ID0gKE5vZGVJbmRleCltX2dyYXBoLnNpemUo
KTsKLSAgICAgICAgbV9ncmFwaC5hcHBlbmQoTm9kZShvcCwgY3VycmVudENvZGVPcmlnaW4oKSwg
aW5mbywgY2hpbGQxLCBjaGlsZDIsIGNoaWxkMykpOworICAgICAgICBOb2RlKiByZXN1bHQgPSBt
X2dyYXBoLmFkZE5vZGUoCisgICAgICAgICAgICBEb250UmVmQ2hpbGRyZW4sIERvbnRSZWZOb2Rl
LCBTcGVjTm9uZSwKKyAgICAgICAgICAgIG9wLCBjdXJyZW50Q29kZU9yaWdpbigpLCBpbmZvLCBj
aGlsZDEsIGNoaWxkMiwgY2hpbGQzKTsKICAgICAgICAgaWYgKG9wID09IFBoaSkKLSAgICAgICAg
ICAgIG1fY3VycmVudEJsb2NrLT5waGlzLmFwcGVuZChyZXN1bHRJbmRleCk7CisgICAgICAgICAg
ICBtX2N1cnJlbnRCbG9jay0+cGhpcy5hcHBlbmQocmVzdWx0KTsKICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZChyZXN1bHRJbmRleCk7CisgICAgICAgICAg
ICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kKHJlc3VsdCk7CiAKICAgICAgICAgaWYgKGRlZmF1bHRG
bGFncyhvcCkgJiBOb2RlTXVzdEdlbmVyYXRlKQotICAgICAgICAgICAgbV9ncmFwaC5yZWYocmVz
dWx0SW5kZXgpOwotICAgICAgICByZXR1cm4gcmVzdWx0SW5kZXg7CisgICAgICAgICAgICBtX2dy
YXBoLnJlZihyZXN1bHQpOworICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KLSAgICBOb2Rl
SW5kZXggYWRkVG9HcmFwaChOb2RlVHlwZSBvcCwgT3BJbmZvIGluZm8xLCBPcEluZm8gaW5mbzIs
IE5vZGVJbmRleCBjaGlsZDEgPSBOb05vZGUsIE5vZGVJbmRleCBjaGlsZDIgPSBOb05vZGUsIE5v
ZGVJbmRleCBjaGlsZDMgPSBOb05vZGUpCisgICAgTm9kZSogYWRkVG9HcmFwaChOb2RlVHlwZSBv
cCwgT3BJbmZvIGluZm8xLCBPcEluZm8gaW5mbzIsIE5vZGUqIGNoaWxkMSA9IDAsIE5vZGUqIGNo
aWxkMiA9IDAsIE5vZGUqIGNoaWxkMyA9IDApCiAgICAgewotICAgICAgICBOb2RlSW5kZXggcmVz
dWx0SW5kZXggPSAoTm9kZUluZGV4KW1fZ3JhcGguc2l6ZSgpOwotICAgICAgICBtX2dyYXBoLmFw
cGVuZChOb2RlKG9wLCBjdXJyZW50Q29kZU9yaWdpbigpLCBpbmZvMSwgaW5mbzIsIGNoaWxkMSwg
Y2hpbGQyLCBjaGlsZDMpKTsKKyAgICAgICAgTm9kZSogcmVzdWx0ID0gbV9ncmFwaC5hZGROb2Rl
KAorICAgICAgICAgICAgRG9udFJlZkNoaWxkcmVuLCBEb250UmVmTm9kZSwgU3BlY05vbmUsCisg
ICAgICAgICAgICBvcCwgY3VycmVudENvZGVPcmlnaW4oKSwgaW5mbzEsIGluZm8yLCBjaGlsZDEs
IGNoaWxkMiwgY2hpbGQzKTsKICAgICAgICAgQVNTRVJUKG9wICE9IFBoaSk7Ci0gICAgICAgIG1f
Y3VycmVudEJsb2NrLT5hcHBlbmQocmVzdWx0SW5kZXgpOworICAgICAgICBtX2N1cnJlbnRCbG9j
ay0+YXBwZW5kKHJlc3VsdCk7CiAKICAgICAgICAgaWYgKGRlZmF1bHRGbGFncyhvcCkgJiBOb2Rl
TXVzdEdlbmVyYXRlKQotICAgICAgICAgICAgbV9ncmFwaC5yZWYocmVzdWx0SW5kZXgpOwotICAg
ICAgICByZXR1cm4gcmVzdWx0SW5kZXg7CisgICAgICAgICAgICBtX2dyYXBoLnJlZihyZXN1bHQp
OworICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KICAgICAKLSAgICBOb2RlSW5kZXggYWRk
VG9HcmFwaChOb2RlOjpWYXJBcmdUYWcsIE5vZGVUeXBlIG9wLCBPcEluZm8gaW5mbzEsIE9wSW5m
byBpbmZvMikKKyAgICBOb2RlKiBhZGRUb0dyYXBoKE5vZGU6OlZhckFyZ1RhZywgTm9kZVR5cGUg
b3AsIE9wSW5mbyBpbmZvMSwgT3BJbmZvIGluZm8yKQogICAgIHsKLSAgICAgICAgTm9kZUluZGV4
IHJlc3VsdEluZGV4ID0gKE5vZGVJbmRleCltX2dyYXBoLnNpemUoKTsKLSAgICAgICAgbV9ncmFw
aC5hcHBlbmQoTm9kZShOb2RlOjpWYXJBcmcsIG9wLCBjdXJyZW50Q29kZU9yaWdpbigpLCBpbmZv
MSwgaW5mbzIsIG1fZ3JhcGgubV92YXJBcmdDaGlsZHJlbi5zaXplKCkgLSBtX251bVBhc3NlZFZh
ckFyZ3MsIG1fbnVtUGFzc2VkVmFyQXJncykpOworICAgICAgICBOb2RlKiByZXN1bHQgPSBtX2dy
YXBoLmFkZE5vZGUoCisgICAgICAgICAgICBEb250UmVmQ2hpbGRyZW4sIERvbnRSZWZOb2RlLCBT
cGVjTm9uZSwKKyAgICAgICAgICAgIE5vZGU6OlZhckFyZywgb3AsIGN1cnJlbnRDb2RlT3JpZ2lu
KCksIGluZm8xLCBpbmZvMiwKKyAgICAgICAgICAgIG1fZ3JhcGgubV92YXJBcmdDaGlsZHJlbi5z
aXplKCkgLSBtX251bVBhc3NlZFZhckFyZ3MsIG1fbnVtUGFzc2VkVmFyQXJncyk7CiAgICAgICAg
IEFTU0VSVChvcCAhPSBQaGkpOwotICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kKHJlc3Vs
dEluZGV4KTsKKyAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZChyZXN1bHQpOwogICAgICAg
ICAKICAgICAgICAgbV9udW1QYXNzZWRWYXJBcmdzID0gMDsKICAgICAgICAgCiAgICAgICAgIGlm
IChkZWZhdWx0RmxhZ3Mob3ApICYgTm9kZU11c3RHZW5lcmF0ZSkKLSAgICAgICAgICAgIG1fZ3Jh
cGgucmVmKHJlc3VsdEluZGV4KTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdEluZGV4OworICAgICAg
ICAgICAgbV9ncmFwaC5yZWYocmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9
CiAKLSAgICBOb2RlSW5kZXggaW5zZXJ0UGhpTm9kZShPcEluZm8gaW5mbywgQmFzaWNCbG9jayog
YmxvY2spCisgICAgTm9kZSogaW5zZXJ0UGhpTm9kZShPcEluZm8gaW5mbywgQmFzaWNCbG9jayog
YmxvY2spCiAgICAgewotICAgICAgICBOb2RlSW5kZXggcmVzdWx0SW5kZXggPSAoTm9kZUluZGV4
KW1fZ3JhcGguc2l6ZSgpOwotICAgICAgICBtX2dyYXBoLmFwcGVuZChOb2RlKFBoaSwgY3VycmVu
dENvZGVPcmlnaW4oKSwgaW5mbykpOwotICAgICAgICBibG9jay0+cGhpcy5hcHBlbmQocmVzdWx0
SW5kZXgpOworICAgICAgICBOb2RlKiByZXN1bHQgPSBtX2dyYXBoLmFkZE5vZGUoCisgICAgICAg
ICAgICBEb250UmVmQ2hpbGRyZW4sIERvbnRSZWZOb2RlLCBTcGVjTm9uZSwKKyAgICAgICAgICAg
IFBoaSwgY3VycmVudENvZGVPcmlnaW4oKSwgaW5mbyk7CisgICAgICAgIGJsb2NrLT5waGlzLmFw
cGVuZChyZXN1bHQpOwogCi0gICAgICAgIHJldHVybiByZXN1bHRJbmRleDsKKyAgICAgICAgcmV0
dXJuIHJlc3VsdDsKICAgICB9CiAKICAgICB2b2lkIGFkZFZhckFyZ0NoaWxkKE5vZGVJbmRleCBj
aGlsZCkKQEAgLTg0Miw3ICs4MzUsNyBAQCBwcml2YXRlOgogICAgICAgICBtX251bVBhc3NlZFZh
ckFyZ3MrKzsKICAgICB9CiAgICAgCi0gICAgTm9kZUluZGV4IGFkZENhbGwoSW50ZXJwcmV0ZXIq
IGludGVycHJldGVyLCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBOb2RlVHlwZSBv
cCkKKyAgICBOb2RlKiBhZGRDYWxsKEludGVycHJldGVyKiBpbnRlcnByZXRlciwgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgTm9kZVR5cGUgb3ApCiAgICAgewogICAgICAgICBJbnN0
cnVjdGlvbiogcHV0SW5zdHJ1Y3Rpb24gPSBjdXJyZW50SW5zdHJ1Y3Rpb24gKyBPUENPREVfTEVO
R1RIKG9wX2NhbGwpOwogCkBAIC04NjIsNDggKzg1NSw0MSBAQCBwcml2YXRlOgogICAgICAgICBm
b3IgKGludCBpID0gMCArIGR1bW15VGhpc0FyZ3VtZW50OyBpIDwgYXJnQ291bnQ7ICsraSkKICAg
ICAgICAgICAgIGFkZFZhckFyZ0NoaWxkKGdldChyZWdpc3Rlck9mZnNldCArIGFyZ3VtZW50VG9P
cGVyYW5kKGkpKSk7CiAKLSAgICAgICAgTm9kZUluZGV4IGNhbGwgPSBhZGRUb0dyYXBoKE5vZGU6
OlZhckFyZywgb3AsIE9wSW5mbygwKSwgT3BJbmZvKHByZWRpY3Rpb24pKTsKKyAgICAgICAgTm9k
ZSogY2FsbCA9IGFkZFRvR3JhcGgoTm9kZTo6VmFyQXJnLCBvcCwgT3BJbmZvKDApLCBPcEluZm8o
cHJlZGljdGlvbikpOwogICAgICAgICBpZiAoaW50ZXJwcmV0ZXItPmdldE9wY29kZUlEKHB1dElu
c3RydWN0aW9uLT51Lm9wY29kZSkgPT0gb3BfY2FsbF9wdXRfcmVzdWx0KQogICAgICAgICAgICAg
c2V0KHB1dEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwgY2FsbCk7CiAgICAgICAgIHJldHVybiBj
YWxsOwogICAgIH0KICAgICAKLSAgICBOb2RlSW5kZXggYWRkU3RydWN0dXJlVHJhbnNpdGlvbkNo
ZWNrKEpTQ2VsbCogb2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICBOb2RlKiBhZGRT
dHJ1Y3R1cmVUcmFuc2l0aW9uQ2hlY2soSlNDZWxsKiBvYmplY3QsIFN0cnVjdHVyZSogc3RydWN0
dXJlKQogICAgIHsKICAgICAgICAgLy8gQWRkIGEgd2VhayBKUyBjb25zdGFudCBmb3IgdGhlIG9i
amVjdCByZWdhcmRsZXNzLCBzaW5jZSB0aGUgY29kZSBzaG91bGQKICAgICAgICAgLy8gYmUgamV0
dGlzb25lZCBpZiB0aGUgb2JqZWN0IGV2ZXIgZGllcy4KLSAgICAgICAgTm9kZUluZGV4IG9iamVj
dEluZGV4ID0gY2VsbENvbnN0YW50KG9iamVjdCk7CisgICAgICAgIE5vZGUqIG9iamVjdE5vZGUg
PSBjZWxsQ29uc3RhbnQob2JqZWN0KTsKICAgICAgICAgCiAgICAgICAgIGlmIChvYmplY3QtPnN0
cnVjdHVyZSgpID09IHN0cnVjdHVyZSAmJiBzdHJ1Y3R1cmUtPnRyYW5zaXRpb25XYXRjaHBvaW50
U2V0SXNTdGlsbFZhbGlkKCkpIHsKLSAgICAgICAgICAgIGFkZFRvR3JhcGgoU3RydWN0dXJlVHJh
bnNpdGlvbldhdGNocG9pbnQsIE9wSW5mbyhzdHJ1Y3R1cmUpLCBvYmplY3RJbmRleCk7Ci0gICAg
ICAgICAgICByZXR1cm4gb2JqZWN0SW5kZXg7CisgICAgICAgICAgICBhZGRUb0dyYXBoKFN0cnVj
dHVyZVRyYW5zaXRpb25XYXRjaHBvaW50LCBPcEluZm8oc3RydWN0dXJlKSwgb2JqZWN0Tm9kZSk7
CisgICAgICAgICAgICByZXR1cm4gb2JqZWN0Tm9kZTsKICAgICAgICAgfQogICAgICAgICAKLSAg
ICAgICAgYWRkVG9HcmFwaChDaGVja1N0cnVjdHVyZSwgT3BJbmZvKG1fZ3JhcGguYWRkU3RydWN0
dXJlU2V0KHN0cnVjdHVyZSkpLCBvYmplY3RJbmRleCk7CisgICAgICAgIGFkZFRvR3JhcGgoQ2hl
Y2tTdHJ1Y3R1cmUsIE9wSW5mbyhtX2dyYXBoLmFkZFN0cnVjdHVyZVNldChzdHJ1Y3R1cmUpKSwg
b2JqZWN0Tm9kZSk7CiAgICAgICAgIAotICAgICAgICByZXR1cm4gb2JqZWN0SW5kZXg7CisgICAg
ICAgIHJldHVybiBvYmplY3ROb2RlOwogICAgIH0KICAgICAKLSAgICBOb2RlSW5kZXggYWRkU3Ry
dWN0dXJlVHJhbnNpdGlvbkNoZWNrKEpTQ2VsbCogb2JqZWN0KQorICAgIE5vZGUqIGFkZFN0cnVj
dHVyZVRyYW5zaXRpb25DaGVjayhKU0NlbGwqIG9iamVjdCkKICAgICB7CiAgICAgICAgIHJldHVy
biBhZGRTdHJ1Y3R1cmVUcmFuc2l0aW9uQ2hlY2sob2JqZWN0LCBvYmplY3QtPnN0cnVjdHVyZSgp
KTsKICAgICB9CiAgICAgCi0gICAgU3BlY3VsYXRlZFR5cGUgZ2V0UHJlZGljdGlvbldpdGhvdXRP
U1JFeGl0KE5vZGVJbmRleCBub2RlSW5kZXgsIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpCisgICAg
U3BlY3VsYXRlZFR5cGUgZ2V0UHJlZGljdGlvbldpdGhvdXRPU1JFeGl0KHVuc2lnbmVkIGJ5dGVj
b2RlSW5kZXgpCiAgICAgewotICAgICAgICBVTlVTRURfUEFSQU0obm9kZUluZGV4KTsKLSAgICAg
ICAgCi0gICAgICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24gPSBtX2lubGluZVN0YWNrVG9w
LT5tX3Byb2ZpbGVkQmxvY2stPnZhbHVlUHJvZmlsZVByZWRpY3Rpb25Gb3JCeXRlY29kZU9mZnNl
dChieXRlY29kZUluZGV4KTsKLSNpZiBERkdfRU5BQkxFKERFQlVHX1ZFUkJPU0UpCi0gICAgICAg
IGRhdGFMb2coIkR5bmFtaWMgW0AiLCBub2RlSW5kZXgsICIsIGJjIyIsIGJ5dGVjb2RlSW5kZXgs
ICJdIHByZWRpY3Rpb246ICIsIFNwZWN1bGF0aW9uRHVtcChwcmVkaWN0aW9uKSwgIlxuIik7Ci0j
ZW5kaWYKLSAgICAgICAgCi0gICAgICAgIHJldHVybiBwcmVkaWN0aW9uOworICAgICAgICByZXR1
cm4gbV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLT52YWx1ZVByb2ZpbGVQcmVkaWN0
aW9uRm9yQnl0ZWNvZGVPZmZzZXQoYnl0ZWNvZGVJbmRleCk7CiAgICAgfQogCi0gICAgU3BlY3Vs
YXRlZFR5cGUgZ2V0UHJlZGljdGlvbihOb2RlSW5kZXggbm9kZUluZGV4LCB1bnNpZ25lZCBieXRl
Y29kZUluZGV4KQorICAgIFNwZWN1bGF0ZWRUeXBlIGdldFByZWRpY3Rpb24odW5zaWduZWQgYnl0
ZWNvZGVJbmRleCkKICAgICB7Ci0gICAgICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24gPSBn
ZXRQcmVkaWN0aW9uV2l0aG91dE9TUkV4aXQobm9kZUluZGV4LCBieXRlY29kZUluZGV4KTsKKyAg
ICAgICAgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiA9IGdldFByZWRpY3Rpb25XaXRob3V0T1NS
RXhpdChieXRlY29kZUluZGV4KTsKICAgICAgICAgCiAgICAgICAgIGlmIChwcmVkaWN0aW9uID09
IFNwZWNOb25lKSB7CiAgICAgICAgICAgICAvLyBXZSBoYXZlIG5vIGluZm9ybWF0aW9uIGFib3V0
IHdoYXQgdmFsdWVzIHRoaXMgbm9kZSBnZW5lcmF0ZXMuIEdpdmUgdXAKQEAgLTkxNiwxMiArOTAy
LDEyIEBAIHByaXZhdGU6CiAgICAgCiAgICAgU3BlY3VsYXRlZFR5cGUgZ2V0UHJlZGljdGlvbldp
dGhvdXRPU1JFeGl0KCkKICAgICB7Ci0gICAgICAgIHJldHVybiBnZXRQcmVkaWN0aW9uV2l0aG91
dE9TUkV4aXQobV9ncmFwaC5zaXplKCksIG1fY3VycmVudFByb2ZpbGluZ0luZGV4KTsKKyAgICAg
ICAgcmV0dXJuIGdldFByZWRpY3Rpb25XaXRob3V0T1NSRXhpdChtX2N1cnJlbnRQcm9maWxpbmdJ
bmRleCk7CiAgICAgfQogICAgIAogICAgIFNwZWN1bGF0ZWRUeXBlIGdldFByZWRpY3Rpb24oKQog
ICAgIHsKLSAgICAgICAgcmV0dXJuIGdldFByZWRpY3Rpb24obV9ncmFwaC5zaXplKCksIG1fY3Vy
cmVudFByb2ZpbGluZ0luZGV4KTsKKyAgICAgICAgcmV0dXJuIGdldFByZWRpY3Rpb24obV9jdXJy
ZW50UHJvZmlsaW5nSW5kZXgpOwogICAgIH0KICAgICAKICAgICBBcnJheU1vZGUgZ2V0QXJyYXlN
b2RlKEFycmF5UHJvZmlsZSogcHJvZmlsZSwgQXJyYXk6OkFjdGlvbiBhY3Rpb24pCkBAIC05MzUs
NyArOTIxLDcgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIGdldEFycmF5TW9kZShwcm9maWxl
LCBBcnJheTo6UmVhZCk7CiAgICAgfQogICAgIAotICAgIEFycmF5TW9kZSBnZXRBcnJheU1vZGVB
bmRFbWl0Q2hlY2tzKEFycmF5UHJvZmlsZSogcHJvZmlsZSwgQXJyYXk6OkFjdGlvbiBhY3Rpb24s
IE5vZGVJbmRleCBiYXNlKQorICAgIEFycmF5TW9kZSBnZXRBcnJheU1vZGVBbmRFbWl0Q2hlY2tz
KEFycmF5UHJvZmlsZSogcHJvZmlsZSwgQXJyYXk6OkFjdGlvbiBhY3Rpb24sIE5vZGUqIGJhc2Up
CiAgICAgewogICAgICAgICBwcm9maWxlLT5jb21wdXRlVXBkYXRlZFByZWRpY3Rpb24obV9pbmxp
bmVTdGFja1RvcC0+bV9jb2RlQmxvY2spOwogICAgICAgICAKQEAgLTk1OSwxMiArOTQ1LDEwIEBA
IHByaXZhdGU6CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogICAgIAotICAgIE5vZGVJ
bmRleCBtYWtlU2FmZShOb2RlSW5kZXggbm9kZUluZGV4KQorICAgIE5vZGUqIG1ha2VTYWZlKE5v
ZGUqIG5vZGUpCiAgICAgewotICAgICAgICBOb2RlJiBub2RlID0gbV9ncmFwaFtub2RlSW5kZXhd
OwotICAgICAgICAKICAgICAgICAgYm9vbCBsaWtlbHlUb1Rha2VTbG93Q2FzZTsKLSAgICAgICAg
aWYgKCFpc1g4NigpICYmIG5vZGUub3AoKSA9PSBBcml0aE1vZCkKKyAgICAgICAgaWYgKCFpc1g4
NigpICYmIG5vZGUtPm9wKCkgPT0gQXJpdGhNb2QpCiAgICAgICAgICAgICBsaWtlbHlUb1Rha2VT
bG93Q2FzZSA9IGZhbHNlOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBsaWtlbHlUb1Rha2VT
bG93Q2FzZSA9IG1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jay0+bGlrZWx5VG9UYWtl
U2xvd0Nhc2UobV9jdXJyZW50SW5kZXgpOwpAQCAtOTcyLDMxICs5NTYsMzEgQEAgcHJpdmF0ZToK
ICAgICAgICAgaWYgKCFsaWtlbHlUb1Rha2VTbG93Q2FzZQogICAgICAgICAgICAgJiYgIW1faW5s
aW5lU3RhY2tUb3AtPm1fZXhpdFByb2ZpbGUuaGFzRXhpdFNpdGUobV9jdXJyZW50SW5kZXgsIE92
ZXJmbG93KQogICAgICAgICAgICAgJiYgIW1faW5saW5lU3RhY2tUb3AtPm1fZXhpdFByb2ZpbGUu
aGFzRXhpdFNpdGUobV9jdXJyZW50SW5kZXgsIE5lZ2F0aXZlWmVybykpCi0gICAgICAgICAgICBy
ZXR1cm4gbm9kZUluZGV4OworICAgICAgICAgICAgcmV0dXJuIG5vZGU7CiAgICAgICAgIAotICAg
ICAgICBzd2l0Y2ggKG1fZ3JhcGhbbm9kZUluZGV4XS5vcCgpKSB7CisgICAgICAgIHN3aXRjaCAo
bm9kZS0+b3AoKSkgewogICAgICAgICBjYXNlIFVJbnQzMlRvTnVtYmVyOgogICAgICAgICBjYXNl
IEFyaXRoQWRkOgogICAgICAgICBjYXNlIEFyaXRoU3ViOgogICAgICAgICBjYXNlIEFyaXRoTmVn
YXRlOgogICAgICAgICBjYXNlIFZhbHVlQWRkOgogICAgICAgICBjYXNlIEFyaXRoTW9kOiAvLyBm
b3IgQXJpdGhNb2QgIk1heU92ZXJmbG93IiBtZWFucyB3ZSB0cmllZCB0byBkaXZpZGUgYnkgemVy
bywgb3Igd2Ugc2F3IGRvdWJsZS4KLSAgICAgICAgICAgIG1fZ3JhcGhbbm9kZUluZGV4XS5tZXJn
ZUZsYWdzKE5vZGVNYXlPdmVyZmxvdyk7CisgICAgICAgICAgICBub2RlLT5tZXJnZUZsYWdzKE5v
ZGVNYXlPdmVyZmxvdyk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgICAg
ICBjYXNlIEFyaXRoTXVsOgogICAgICAgICAgICAgaWYgKG1faW5saW5lU3RhY2tUb3AtPm1fcHJv
ZmlsZWRCbG9jay0+bGlrZWx5VG9UYWtlRGVlcGVzdFNsb3dDYXNlKG1fY3VycmVudEluZGV4KQog
ICAgICAgICAgICAgICAgIHx8IG1faW5saW5lU3RhY2tUb3AtPm1fZXhpdFByb2ZpbGUuaGFzRXhp
dFNpdGUobV9jdXJyZW50SW5kZXgsIE92ZXJmbG93KSkgewogI2lmIERGR19FTkFCTEUoREVCVUdf
VkVSQk9TRSkKLSAgICAgICAgICAgICAgICBkYXRhTG9nRigiTWFraW5nIEFyaXRoTXVsIEAldSB0
YWtlIGRlZXBlc3Qgc2xvdyBjYXNlLlxuIiwgbm9kZUluZGV4KTsKKyAgICAgICAgICAgICAgICBk
YXRhTG9nRigiTWFraW5nIEFyaXRoTXVsIEAldSB0YWtlIGRlZXBlc3Qgc2xvdyBjYXNlLlxuIiwg
bm9kZS0+aW5kZXgoKSk7CiAjZW5kaWYKLSAgICAgICAgICAgICAgICBtX2dyYXBoW25vZGVJbmRl
eF0ubWVyZ2VGbGFncyhOb2RlTWF5T3ZlcmZsb3cgfCBOb2RlTWF5TmVnWmVybyk7CisgICAgICAg
ICAgICAgICAgbm9kZS0+bWVyZ2VGbGFncyhOb2RlTWF5T3ZlcmZsb3cgfCBOb2RlTWF5TmVnWmVy
byk7CiAgICAgICAgICAgICB9IGVsc2UgaWYgKG1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRC
bG9jay0+bGlrZWx5VG9UYWtlU2xvd0Nhc2UobV9jdXJyZW50SW5kZXgpCiAgICAgICAgICAgICAg
ICAgICAgICAgIHx8IG1faW5saW5lU3RhY2tUb3AtPm1fZXhpdFByb2ZpbGUuaGFzRXhpdFNpdGUo
bV9jdXJyZW50SW5kZXgsIE5lZ2F0aXZlWmVybykpIHsKICNpZiBERkdfRU5BQkxFKERFQlVHX1ZF
UkJPU0UpCi0gICAgICAgICAgICAgICAgZGF0YUxvZ0YoIk1ha2luZyBBcml0aE11bCBAJXUgdGFr
ZSBmYXN0ZXIgc2xvdyBjYXNlLlxuIiwgbm9kZUluZGV4KTsKKyAgICAgICAgICAgICAgICBkYXRh
TG9nRigiTWFraW5nIEFyaXRoTXVsIEAldSB0YWtlIGZhc3RlciBzbG93IGNhc2UuXG4iLCBub2Rl
LT5pbmRleCgpKTsKICNlbmRpZgotICAgICAgICAgICAgICAgIG1fZ3JhcGhbbm9kZUluZGV4XS5t
ZXJnZUZsYWdzKE5vZGVNYXlOZWdaZXJvKTsKKyAgICAgICAgICAgICAgICBub2RlLT5tZXJnZUZs
YWdzKE5vZGVNYXlOZWdaZXJvKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgCkBAIC0xMDA1LDEyICs5ODksMTIgQEAgcHJpdmF0ZToKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICByZXR1cm4gbm9kZUluZGV4Owor
ICAgICAgICByZXR1cm4gbm9kZTsKICAgICB9CiAgICAgCi0gICAgTm9kZUluZGV4IG1ha2VEaXZT
YWZlKE5vZGVJbmRleCBub2RlSW5kZXgpCisgICAgTm9kZSogbWFrZURpdlNhZmUoTm9kZSogbm9k
ZUluZGV4KQogICAgIHsKLSAgICAgICAgQVNTRVJUKG1fZ3JhcGhbbm9kZUluZGV4XS5vcCgpID09
IEFyaXRoRGl2KTsKKyAgICAgICAgQVNTRVJUKG5vZGUtPm9wKCkgPT0gQXJpdGhEaXYpOwogICAg
ICAgICAKICAgICAgICAgLy8gVGhlIG1haW4gc2xvdyBjYXNlIGNvdW50ZXIgZm9yIG9wX2RpdiBp
biB0aGUgb2xkIEpJVCBjb3VudHMgb25seSB3aGVuCiAgICAgICAgIC8vIHRoZSBvcGVyYW5kcyBh
cmUgbm90IG51bWJlcnMuIFdlIGRvbid0IGNhcmUgYWJvdXQgdGhhdCBzaW5jZSB3ZSBhbHJlYWR5
CkBAIC0xMDIxLDQwICsxMDA1LDE3IEBAIHByaXZhdGU6CiAgICAgICAgIGlmICghbV9pbmxpbmVT
dGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLT5jb3VsZFRha2VTcGVjaWFsRmFzdENhc2UobV9jdXJy
ZW50SW5kZXgpCiAgICAgICAgICAgICAmJiAhbV9pbmxpbmVTdGFja1RvcC0+bV9leGl0UHJvZmls
ZS5oYXNFeGl0U2l0ZShtX2N1cnJlbnRJbmRleCwgT3ZlcmZsb3cpCiAgICAgICAgICAgICAmJiAh
bV9pbmxpbmVTdGFja1RvcC0+bV9leGl0UHJvZmlsZS5oYXNFeGl0U2l0ZShtX2N1cnJlbnRJbmRl
eCwgTmVnYXRpdmVaZXJvKSkKLSAgICAgICAgICAgIHJldHVybiBub2RlSW5kZXg7CisgICAgICAg
ICAgICByZXR1cm4gbm9kZTsKICAgICAgICAgCiAjaWYgREZHX0VOQUJMRShERUJVR19WRVJCT1NF
KQotICAgICAgICBkYXRhTG9nRigiTWFraW5nICVzIEAldSBzYWZlIGF0IGJjIyV1IGJlY2F1c2Ug
c3BlY2lhbCBmYXN0LWNhc2UgY291bnRlciBpcyBhdCAldSBhbmQgZXhpdCBwcm9maWxlcyBzYXkg
JWQsICVkXG4iLCBHcmFwaDo6b3BOYW1lKG1fZ3JhcGhbbm9kZUluZGV4XS5vcCgpKSwgbm9kZUlu
ZGV4LCBtX2N1cnJlbnRJbmRleCwgbV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLT5z
cGVjaWFsRmFzdENhc2VQcm9maWxlRm9yQnl0ZWNvZGVPZmZzZXQobV9jdXJyZW50SW5kZXgpLT5t
X2NvdW50ZXIsIG1faW5saW5lU3RhY2tUb3AtPm1fZXhpdFByb2ZpbGUuaGFzRXhpdFNpdGUobV9j
dXJyZW50SW5kZXgsIE92ZXJmbG93KSwgbV9pbmxpbmVTdGFja1RvcC0+bV9leGl0UHJvZmlsZS5o
YXNFeGl0U2l0ZShtX2N1cnJlbnRJbmRleCwgTmVnYXRpdmVaZXJvKSk7CisgICAgICAgIGRhdGFM
b2dGKCJNYWtpbmcgJXMgQCV1IHNhZmUgYXQgYmMjJXUgYmVjYXVzZSBzcGVjaWFsIGZhc3QtY2Fz
ZSBjb3VudGVyIGlzIGF0ICV1IGFuZCBleGl0IHByb2ZpbGVzIHNheSAlZCwgJWRcbiIsIEdyYXBo
OjpvcE5hbWUobm9kZS0+b3AoKSksIG5vZGUtPmluZGV4KCksIG1fY3VycmVudEluZGV4LCBtX2lu
bGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2stPnNwZWNpYWxGYXN0Q2FzZVByb2ZpbGVGb3JC
eXRlY29kZU9mZnNldChtX2N1cnJlbnRJbmRleCktPm1fY291bnRlciwgbV9pbmxpbmVTdGFja1Rv
cC0+bV9leGl0UHJvZmlsZS5oYXNFeGl0U2l0ZShtX2N1cnJlbnRJbmRleCwgT3ZlcmZsb3cpLCBt
X2lubGluZVN0YWNrVG9wLT5tX2V4aXRQcm9maWxlLmhhc0V4aXRTaXRlKG1fY3VycmVudEluZGV4
LCBOZWdhdGl2ZVplcm8pKTsKICNlbmRpZgogICAgICAgICAKICAgICAgICAgLy8gRklYTUU6IEl0
IG1pZ2h0IGJlIHBvc3NpYmxlIHRvIG1ha2UgdGhpcyBtb3JlIGdyYW51bGFyLiBUaGUgREZHIGNl
cnRhaW5seSBjYW4KICAgICAgICAgLy8gZGlzdGluZ3Vpc2ggYmV0d2VlbiBuZWdhdGl2ZSB6ZXJv
IGFuZCBvdmVyZmxvdyBpbiBpdHMgZXhpdCBwcm9maWxlcy4KLSAgICAgICAgbV9ncmFwaFtub2Rl
SW5kZXhdLm1lcmdlRmxhZ3MoTm9kZU1heU92ZXJmbG93IHwgTm9kZU1heU5lZ1plcm8pOworICAg
ICAgICBub2RlLT5tZXJnZUZsYWdzKE5vZGVNYXlPdmVyZmxvdyB8IE5vZGVNYXlOZWdaZXJvKTsK
ICAgICAgICAgCi0gICAgICAgIHJldHVybiBub2RlSW5kZXg7Ci0gICAgfQotICAgIAotICAgIGJv
b2wgd2lsbE5lZWRGbHVzaChTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCi0gICAgewotICAg
ICAgICBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QqIGxpc3Q7Ci0gICAgICAgIGludCBs
aXN0U2l6ZTsKLSAgICAgICAgc3dpdGNoIChzdHViSW5mby5hY2Nlc3NUeXBlKSB7Ci0gICAgICAg
IGNhc2UgYWNjZXNzX2dldF9ieV9pZF9zZWxmX2xpc3Q6Ci0gICAgICAgICAgICBsaXN0ID0gc3R1
YkluZm8udS5nZXRCeUlkU2VsZkxpc3Quc3RydWN0dXJlTGlzdDsKLSAgICAgICAgICAgIGxpc3RT
aXplID0gc3R1YkluZm8udS5nZXRCeUlkU2VsZkxpc3QubGlzdFNpemU7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgY2FzZSBhY2Nlc3NfZ2V0X2J5X2lkX3Byb3RvX2xpc3Q6Ci0gICAgICAg
ICAgICBsaXN0ID0gc3R1YkluZm8udS5nZXRCeUlkUHJvdG9MaXN0LnN0cnVjdHVyZUxpc3Q7Ci0g
ICAgICAgICAgICBsaXN0U2l6ZSA9IHN0dWJJbmZvLnUuZ2V0QnlJZFByb3RvTGlzdC5saXN0U2l6
ZTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGlzdFNp
emU7ICsraSkgewotICAgICAgICAgICAgaWYgKCFsaXN0LT5saXN0W2ldLmlzRGlyZWN0KQotICAg
ICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgcmV0dXJuIG5vZGU7CiAgICAgfQogICAgIAogICAgIGJvb2wgc3RydWN0dXJl
Q2hhaW5Jc1N0aWxsVmFsaWQoYm9vbCBkaXJlY3QsIFN0cnVjdHVyZSogcHJldmlvdXNTdHJ1Y3R1
cmUsIFN0cnVjdHVyZUNoYWluKiBjaGFpbikKQEAgLTEwOTgsMjEgKzEwNTksMjEgQEAgcHJpdmF0
ZToKICAgICB1bnNpZ25lZCBtX2NvbnN0YW50TmFOOwogICAgIHVuc2lnbmVkIG1fY29uc3RhbnQx
OwogICAgIEhhc2hNYXA8SlNDZWxsKiwgdW5zaWduZWQ+IG1fY2VsbENvbnN0YW50czsKLSAgICBI
YXNoTWFwPEpTQ2VsbCosIE5vZGVJbmRleD4gbV9jZWxsQ29uc3RhbnROb2RlczsKKyAgICBIYXNo
TWFwPEpTQ2VsbCosIE5vZGUqPiBtX2NlbGxDb25zdGFudE5vZGVzOwogCiAgICAgLy8gQSBjb25z
dGFudCBpbiB0aGUgY29uc3RhbnQgcG9vbCBtYXkgYmUgcmVwcmVzZW50ZWQgYnkgbW9yZSB0aGFu
IG9uZQogICAgIC8vIG5vZGUgaW4gdGhlIGdyYXBoLCBkZXBlbmRpbmcgb24gdGhlIGNvbnRleHQg
aW4gd2hpY2ggaXQgaXMgYmVpbmcgdXNlZC4KICAgICBzdHJ1Y3QgQ29uc3RhbnRSZWNvcmQgewog
ICAgICAgICBDb25zdGFudFJlY29yZCgpCi0gICAgICAgICAgICA6IGFzSW50MzIoTm9Ob2RlKQot
ICAgICAgICAgICAgLCBhc051bWVyaWMoTm9Ob2RlKQotICAgICAgICAgICAgLCBhc0pTVmFsdWUo
Tm9Ob2RlKQorICAgICAgICAgICAgOiBhc0ludDMyKDApCisgICAgICAgICAgICAsIGFzTnVtZXJp
YygwKQorICAgICAgICAgICAgLCBhc0pTVmFsdWUoMCkKICAgICAgICAgewogICAgICAgICB9CiAK
LSAgICAgICAgTm9kZUluZGV4IGFzSW50MzI7Ci0gICAgICAgIE5vZGVJbmRleCBhc051bWVyaWM7
Ci0gICAgICAgIE5vZGVJbmRleCBhc0pTVmFsdWU7CisgICAgICAgIE5vZGUqIGFzSW50MzI7Cisg
ICAgICAgIE5vZGUqIGFzTnVtZXJpYzsKKyAgICAgICAgTm9kZSogYXNKU1ZhbHVlOwogICAgIH07
CiAKICAgICAvLyBUcmFjayB0aGUgaW5kZXggb2YgdGhlIG5vZGUgd2hvc2UgcmVzdWx0IGlzIHRo
ZSBjdXJyZW50IHZhbHVlIGZvciBldmVyeQpAQCAtMTEzOCw3ICsxMDk5LDcgQEAgcHJpdmF0ZToK
ICAgICB1bnNpZ25lZCBtX2dsb2JhbFJlc29sdmVOdW1iZXI7CiAKICAgICBzdHJ1Y3QgUGhpU3Rh
Y2tFbnRyeSB7Ci0gICAgICAgIFBoaVN0YWNrRW50cnkoQmFzaWNCbG9jayogYmxvY2ssIE5vZGVJ
bmRleCBwaGksIHVuc2lnbmVkIHZhck5vKQorICAgICAgICBQaGlTdGFja0VudHJ5KEJhc2ljQmxv
Y2sqIGJsb2NrLCBOb2RlKiBwaGksIHVuc2lnbmVkIHZhck5vKQogICAgICAgICAgICAgOiBtX2Js
b2NrKGJsb2NrKQogICAgICAgICAgICAgLCBtX3BoaShwaGkpCiAgICAgICAgICAgICAsIG1fdmFy
Tm8odmFyTm8pCkBAIC0xMTQ2LDcgKzExMDcsNyBAQCBwcml2YXRlOgogICAgICAgICB9CiAKICAg
ICAgICAgQmFzaWNCbG9jayogbV9ibG9jazsKLSAgICAgICAgTm9kZUluZGV4IG1fcGhpOworICAg
ICAgICBOb2RlKiBtX3BoaTsKICAgICAgICAgdW5zaWduZWQgbV92YXJObzsKICAgICB9OwogICAg
IFZlY3RvcjxQaGlTdGFja0VudHJ5LCAxNj4gbV9hcmd1bWVudFBoaVN0YWNrOwpAQCAtMTI4MCw3
ICsxMjQxLDcgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlQ2FsbChJbnRlcnByZQogewog
ICAgIEFTU0VSVChPUENPREVfTEVOR1RIKG9wX2NhbGwpID09IE9QQ09ERV9MRU5HVEgob3BfY29u
c3RydWN0KSk7CiAgICAgCi0gICAgTm9kZUluZGV4IGNhbGxUYXJnZXQgPSBnZXQoY3VycmVudElu
c3RydWN0aW9uWzFdLnUub3BlcmFuZCk7CisgICAgTm9kZSogY2FsbFRhcmdldCA9IGdldChjdXJy
ZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKTsKICAgICAKICAgICBDYWxsTGlua1N0YXR1cyBj
YWxsTGlua1N0YXR1czsKIApAQCAtMTI5NCw3ICsxMjU1LDcgQEAgdm9pZCBCeXRlQ29kZVBhcnNl
cjo6aGFuZGxlQ2FsbChJbnRlcnByZQogICAgIH0KICAgICAKICNpZiBERkdfRU5BQkxFKERFQlVH
X1ZFUkJPU0UpCi0gICAgZGF0YUxvZygiRm9yIGNhbGwgYXQgQCIsIG1fZ3JhcGguc2l6ZSgpLCAi
IGJjIyIsIG1fY3VycmVudEluZGV4LCAiOiAiLCBjYWxsTGlua1N0YXR1cywgIlxuIik7CisgICAg
ZGF0YUxvZygiRm9yIGNhbGwgYXQgYmMjIiwgbV9jdXJyZW50SW5kZXgsICI6ICIsIGNhbGxMaW5r
U3RhdHVzLCAiXG4iKTsKICNlbmRpZgogICAgIAogICAgIGlmICghY2FsbExpbmtTdGF0dXMuY2Fu
T3B0aW1pemUoKSkgewpAQCAtMTM1MiwxOCArMTMxMywxOCBAQCB2b2lkIEJ5dGVDb2RlUGFyc2Vy
OjpoYW5kbGVDYWxsKEludGVycHJlCiAgICAgYWRkQ2FsbChpbnRlcnByZXRlciwgY3VycmVudElu
c3RydWN0aW9uLCBvcCk7CiB9CiAKLXZvaWQgQnl0ZUNvZGVQYXJzZXI6OmVtaXRGdW5jdGlvbkNo
ZWNrcyhjb25zdCBDYWxsTGlua1N0YXR1cyYgY2FsbExpbmtTdGF0dXMsIE5vZGVJbmRleCBjYWxs
VGFyZ2V0LCBpbnQgcmVnaXN0ZXJPZmZzZXQsIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkK
K3ZvaWQgQnl0ZUNvZGVQYXJzZXI6OmVtaXRGdW5jdGlvbkNoZWNrcyhjb25zdCBDYWxsTGlua1N0
YXR1cyYgY2FsbExpbmtTdGF0dXMsIE5vZGUqIGNhbGxUYXJnZXQsIGludCByZWdpc3Rlck9mZnNl
dCwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQogewogICAgIGlmIChjYWxsTGlua1N0YXR1
cy5pc1Byb3ZlZCgpKQogICAgICAgICByZXR1cm47CiAgICAgCiAgICAgQVNTRVJUKGNhbGxMaW5r
U3RhdHVzLmNhbk9wdGltaXplKCkpOwogICAgIAotICAgIE5vZGVJbmRleCB0aGlzQXJndW1lbnQ7
CisgICAgTm9kZSogdGhpc0FyZ3VtZW50OwogICAgIGlmIChraW5kID09IENvZGVGb3JDYWxsKQog
ICAgICAgICB0aGlzQXJndW1lbnQgPSBnZXQocmVnaXN0ZXJPZmZzZXQgKyBhcmd1bWVudFRvT3Bl
cmFuZCgwKSk7CiAgICAgZWxzZQotICAgICAgICB0aGlzQXJndW1lbnQgPSBOb05vZGU7CisgICAg
ICAgIHRoaXNBcmd1bWVudCA9IDA7CiAKICAgICBpZiAoSlNGdW5jdGlvbiogZnVuY3Rpb24gPSBj
YWxsTGlua1N0YXR1cy5mdW5jdGlvbigpKQogICAgICAgICBhZGRUb0dyYXBoKENoZWNrRnVuY3Rp
b24sIE9wSW5mbyhmdW5jdGlvbiksIGNhbGxUYXJnZXQsIHRoaXNBcmd1bWVudCk7CkBAIC0xMzc2
LDcgKzEzMzcsNyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjplbWl0RnVuY3Rpb25DaGVja3MoCiAg
ICAgfQogfQogCi1ib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbmxpbmluZyhib29sIHVzZXNS
ZXN1bHQsIE5vZGVJbmRleCBjYWxsVGFyZ2V0Tm9kZUluZGV4LCBpbnQgcmVzdWx0T3BlcmFuZCwg
Y29uc3QgQ2FsbExpbmtTdGF0dXMmIGNhbGxMaW5rU3RhdHVzLCBpbnQgcmVnaXN0ZXJPZmZzZXQs
IGludCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgdW5zaWduZWQgbmV4dE9mZnNldCwgQ29k
ZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQorYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW5s
aW5pbmcoYm9vbCB1c2VzUmVzdWx0LCBOb2RlKiBjYWxsVGFyZ2V0Tm9kZSwgaW50IHJlc3VsdE9w
ZXJhbmQsIGNvbnN0IENhbGxMaW5rU3RhdHVzJiBjYWxsTGlua1N0YXR1cywgaW50IHJlZ2lzdGVy
T2Zmc2V0LCBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIHVuc2lnbmVkIG5leHRPZmZz
ZXQsIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkKIHsKICAgICAvLyBGaXJzdCwgdGhlIHJl
YWxseSBzaW1wbGUgY2hlY2tzOiBkbyB3ZSBoYXZlIGFuIGFjdHVhbCBKUyBmdW5jdGlvbj8KICAg
ICBpZiAoIWNhbGxMaW5rU3RhdHVzLmV4ZWN1dGFibGUoKSkKQEAgLTE0MjMsNyArMTM4NCw3IEBA
IGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUlubGluaW5nKGJvb2wKICAgICAvLyBOb3cgd2Ug
a25vdyB3aXRob3V0IGEgZG91YnQgdGhhdCB3ZSBhcmUgY29tbWl0dGVkIHRvIGlubGluaW5nLiBT
byBiZWdpbiB0aGUgcHJvY2VzcwogICAgIC8vIGJ5IGNoZWNraW5nIHRoZSBjYWxsZWUgKGlmIG5l
Y2Vzc2FyeSkgYW5kIG1ha2luZyBzdXJlIHRoYXQgYXJndW1lbnRzIGFuZCB0aGUgY2FsbGVlCiAg
ICAgLy8gYXJlIGZsdXNoZWQuCi0gICAgZW1pdEZ1bmN0aW9uQ2hlY2tzKGNhbGxMaW5rU3RhdHVz
LCBjYWxsVGFyZ2V0Tm9kZUluZGV4LCByZWdpc3Rlck9mZnNldCwga2luZCk7CisgICAgZW1pdEZ1
bmN0aW9uQ2hlY2tzKGNhbGxMaW5rU3RhdHVzLCBjYWxsVGFyZ2V0Tm9kZSwgcmVnaXN0ZXJPZmZz
ZXQsIGtpbmQpOwogICAgIAogICAgIC8vIEZJWE1FOiBEb24ndCBmbHVzaCBjb25zdGFudHMhCiAg
ICAgCkBAIC0xNDU3LDggKzE0MTgsOCBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbmxp
bmluZyhib29sCiAKICAgICBhZGRUb0dyYXBoKElubGluZVN0YXJ0LCBPcEluZm8oYXJndW1lbnRQ
b3NpdGlvblN0YXJ0KSk7CiAgICAgaWYgKGNhbGxMaW5rU3RhdHVzLmlzQ2xvc3VyZUNhbGwoKSkg
ewotICAgICAgICBhZGRUb0dyYXBoKFNldENhbGxlZSwgY2FsbFRhcmdldE5vZGVJbmRleCk7Ci0g
ICAgICAgIGFkZFRvR3JhcGgoU2V0TXlTY29wZSwgYWRkVG9HcmFwaChHZXRTY29wZSwgY2FsbFRh
cmdldE5vZGVJbmRleCkpOworICAgICAgICBhZGRUb0dyYXBoKFNldENhbGxlZSwgY2FsbFRhcmdl
dE5vZGUpOworICAgICAgICBhZGRUb0dyYXBoKFNldE15U2NvcGUsIGFkZFRvR3JhcGgoR2V0U2Nv
cGUsIGNhbGxUYXJnZXROb2RlKSk7CiAgICAgfQogICAgIAogICAgIHBhcnNlQ29kZUJsb2NrKCk7
CkBAIC0xNDk0LDExICsxNDU1LDExIEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUlubGlu
aW5nKGJvb2wKICAgICB9IGVsc2UKICAgICAgICAgQVNTRVJUKGlubGluZVN0YWNrRW50cnkubV91
bmxpbmtlZEJsb2Nrcy5pc0VtcHR5KCkpOwogICAgIAorICAgIEJhc2ljQmxvY2sqIGxhc3RCbG9j
ayA9IG1fZ3JhcGgubV9ibG9ja3MubGFzdCgpLmdldCgpOwogICAgIC8vIElmIHRoZXJlIHdhcyBh
IHJldHVybiwgYnV0IG5vIGVhcmx5IHJldHVybnMsIHRoZW4gd2UncmUgZG9uZS4gV2UgYWxsb3cg
cGFyc2luZyBvZgogICAgIC8vIHRoZSBjYWxsZXIgdG8gY29udGludWUgaW4gd2hhdGV2ZXIgYmFz
aWMgYmxvY2sgd2UncmUgaW4gcmlnaHQgbm93LgogICAgIGlmICghaW5saW5lU3RhY2tFbnRyeS5t
X2RpZEVhcmx5UmV0dXJuICYmIGlubGluZVN0YWNrRW50cnkubV9kaWRSZXR1cm4pIHsKLSAgICAg
ICAgQmFzaWNCbG9jayogbGFzdEJsb2NrID0gbV9ncmFwaC5tX2Jsb2Nrcy5sYXN0KCkuZ2V0KCk7
Ci0gICAgICAgIEFTU0VSVChsYXN0QmxvY2stPmlzRW1wdHkoKSB8fCAhbV9ncmFwaC5sYXN0KCku
aXNUZXJtaW5hbCgpKTsKKyAgICAgICAgQVNTRVJUKGxhc3RCbG9jay0+aXNFbXB0eSgpIHx8ICFs
YXN0QmxvY2stPmxhc3QoKS0+aXNUZXJtaW5hbCgpKTsKICAgICAgICAgCiAgICAgICAgIC8vIElm
IHdlIGNyZWF0ZWQgbmV3IGJsb2NrcyB0aGVuIHRoZSBsYXN0IGJsb2NrIG5lZWRzIGxpbmtpbmcs
IGJ1dCBpbiB0aGUKICAgICAgICAgLy8gY2FsbGVyLiBJdCBkb2Vzbid0IG5lZWQgdG8gYmUgbGlu
a2VkIHRvLCBidXQgaXQgbmVlZHMgb3V0Z29pbmcgbGlua3MuCkBAIC0xNTIyLDcgKzE0ODMsNyBA
QCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbmxpbmluZyhib29sCiAgICAgfQogICAgIAog
ICAgIC8vIElmIHdlIGdldCB0byB0aGlzIHBvaW50IHRoZW4gYWxsIGJsb2NrcyBtdXN0IGVuZCBp
biBzb21lIHNvcnQgb2YgdGVybWluYWxzLgotICAgIEFTU0VSVChtX2dyYXBoLmxhc3QoKS5pc1Rl
cm1pbmFsKCkpOworICAgIEFTU0VSVChsYXN0QmxvY2stPmxhc3QoKS0+aXNUZXJtaW5hbCgpKTsK
ICAgICAKICAgICAvLyBMaW5rIHRoZSBlYXJseSByZXR1cm5zIHRvIHRoZSBiYXNpYyBibG9jayB3
ZSdyZSBhYm91dCB0byBjcmVhdGUuCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBpbmxpbmVT
dGFja0VudHJ5Lm1fdW5saW5rZWRCbG9ja3Muc2l6ZSgpOyArK2kpIHsKQEAgLTE1MzAsMTAgKzE0
OTEsMTAgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW5saW5pbmcoYm9vbAogICAgICAg
ICAgICAgY29udGludWU7CiAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5tX2Js
b2Nrc1tpbmxpbmVTdGFja0VudHJ5Lm1fdW5saW5rZWRCbG9ja3NbaV0ubV9ibG9ja0luZGV4XS5n
ZXQoKTsKICAgICAgICAgQVNTRVJUKCFibG9jay0+aXNMaW5rZWQpOwotICAgICAgICBOb2RlJiBu
b2RlID0gbV9ncmFwaFtibG9jay0+bGFzdCgpXTsKLSAgICAgICAgQVNTRVJUKG5vZGUub3AoKSA9
PSBKdW1wKTsKLSAgICAgICAgQVNTRVJUKG5vZGUudGFrZW5CbG9ja0luZGV4KCkgPT0gTm9CbG9j
ayk7Ci0gICAgICAgIG5vZGUuc2V0VGFrZW5CbG9ja0luZGV4KG1fZ3JhcGgubV9ibG9ja3Muc2l6
ZSgpKTsKKyAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5sYXN0KCk7CisgICAgICAgIEFTU0VS
VChub2RlLT5vcCgpID09IEp1bXApOworICAgICAgICBBU1NFUlQobm9kZS0+dGFrZW5CbG9ja0lu
ZGV4KCkgPT0gTm9CbG9jayk7CisgICAgICAgIG5vZGUtPnNldFRha2VuQmxvY2tJbmRleChtX2dy
YXBoLm1fYmxvY2tzLnNpemUoKSk7CiAgICAgICAgIGlubGluZVN0YWNrRW50cnkubV91bmxpbmtl
ZEJsb2Nrc1tpXS5tX25lZWRzRWFybHlSZXR1cm5MaW5raW5nID0gZmFsc2U7CiAjaWYgIUFTU0VS
VF9ESVNBQkxFRAogICAgICAgICBibG9jay0+aXNMaW5rZWQgPSB0cnVlOwpAQCAtMTU2MCwxMSAr
MTUyMSwxMSBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbmxpbmluZyhib29sCiAgICAg
cmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgQnl0ZUNvZGVQYXJzZXI6OnNldEludHJpbnNpY1Jlc3Vs
dChib29sIHVzZXNSZXN1bHQsIGludCByZXN1bHRPcGVyYW5kLCBOb2RlSW5kZXggbm9kZUluZGV4
KQordm9pZCBCeXRlQ29kZVBhcnNlcjo6c2V0SW50cmluc2ljUmVzdWx0KGJvb2wgdXNlc1Jlc3Vs
dCwgaW50IHJlc3VsdE9wZXJhbmQsIE5vZGUqIG5vZGUpCiB7CiAgICAgaWYgKCF1c2VzUmVzdWx0
KQogICAgICAgICByZXR1cm47Ci0gICAgc2V0KHJlc3VsdE9wZXJhbmQsIG5vZGVJbmRleCk7Cisg
ICAgc2V0KHJlc3VsdE9wZXJhbmQsIG5vZGUpOwogfQogCiBib29sIEJ5dGVDb2RlUGFyc2VyOjpo
YW5kbGVNaW5NYXgoYm9vbCB1c2VzUmVzdWx0LCBpbnQgcmVzdWx0T3BlcmFuZCwgTm9kZVR5cGUg
b3AsIGludCByZWdpc3Rlck9mZnNldCwgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKQpA
QCAtMTU3Niw3ICsxNTM3LDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlTWluTWF4KGJv
b2wgdQogICAgICAKICAgICBpZiAoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPT0gMikgeyAv
LyBNYXRoLm1pbih4KQogICAgICAgICAvLyBGSVhNRTogd2hhdCB3ZSdkIHJlYWxseSBsaWtlIGlz
IGEgVmFsdWVUb051bWJlciwgZXhjZXB0IHdlIGRvbid0IHN1cHBvcnQgdGhhdCByaWdodCBub3cu
IE9oIHdlbGwuCi0gICAgICAgIE5vZGVJbmRleCByZXN1bHQgPSBnZXQocmVnaXN0ZXJPZmZzZXQg
KyBhcmd1bWVudFRvT3BlcmFuZCgxKSk7CisgICAgICAgIE5vZGUqIHJlc3VsdCA9IGdldChyZWdp
c3Rlck9mZnNldCArIGFyZ3VtZW50VG9PcGVyYW5kKDEpKTsKICAgICAgICAgYWRkVG9HcmFwaChD
aGVja051bWJlciwgcmVzdWx0KTsKICAgICAgICAgc2V0SW50cmluc2ljUmVzdWx0KHVzZXNSZXN1
bHQsIHJlc3VsdE9wZXJhbmQsIHJlc3VsdCk7CiAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtMTYw
NSwxMCArMTU2NiwxMCBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbnRyaW5zaWMoYm9v
CiAgICAgICAgIGlmICghTWFjcm9Bc3NlbWJsZXI6OnN1cHBvcnRzRmxvYXRpbmdQb2ludEFicygp
KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgIE5vZGVJbmRleCBub2RlSW5k
ZXggPSBhZGRUb0dyYXBoKEFyaXRoQWJzLCBnZXQocmVnaXN0ZXJPZmZzZXQgKyBhcmd1bWVudFRv
T3BlcmFuZCgxKSkpOworICAgICAgICBOb2RlKiBub2RlID0gYWRkVG9HcmFwaChBcml0aEFicywg
Z2V0KHJlZ2lzdGVyT2Zmc2V0ICsgYXJndW1lbnRUb09wZXJhbmQoMSkpKTsKICAgICAgICAgaWYg
KG1faW5saW5lU3RhY2tUb3AtPm1fZXhpdFByb2ZpbGUuaGFzRXhpdFNpdGUobV9jdXJyZW50SW5k
ZXgsIE92ZXJmbG93KSkKLSAgICAgICAgICAgIG1fZ3JhcGhbbm9kZUluZGV4XS5tZXJnZUZsYWdz
KE5vZGVNYXlPdmVyZmxvdyk7Ci0gICAgICAgIHNldEludHJpbnNpY1Jlc3VsdCh1c2VzUmVzdWx0
LCByZXN1bHRPcGVyYW5kLCBub2RlSW5kZXgpOworICAgICAgICAgICAgbm9kZS0+bWVyZ2VGbGFn
cyhOb2RlTWF5T3ZlcmZsb3cpOworICAgICAgICBzZXRJbnRyaW5zaWNSZXN1bHQodXNlc1Jlc3Vs
dCwgcmVzdWx0T3BlcmFuZCwgbm9kZSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIApA
QCAtMTY0NCw3ICsxNjA1LDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW50cmluc2lj
KGJvbwogICAgICAgICBjYXNlIEFycmF5OjpEb3VibGU6CiAgICAgICAgIGNhc2UgQXJyYXk6OkNv
bnRpZ3VvdXM6CiAgICAgICAgIGNhc2UgQXJyYXk6OkFycmF5U3RvcmFnZTogewotICAgICAgICAg
ICAgTm9kZUluZGV4IGFycmF5UHVzaCA9IGFkZFRvR3JhcGgoQXJyYXlQdXNoLCBPcEluZm8oYXJy
YXlNb2RlLmFzV29yZCgpKSwgT3BJbmZvKHByZWRpY3Rpb24pLCBnZXQocmVnaXN0ZXJPZmZzZXQg
KyBhcmd1bWVudFRvT3BlcmFuZCgwKSksIGdldChyZWdpc3Rlck9mZnNldCArIGFyZ3VtZW50VG9P
cGVyYW5kKDEpKSk7CisgICAgICAgICAgICBOb2RlKiBhcnJheVB1c2ggPSBhZGRUb0dyYXBoKEFy
cmF5UHVzaCwgT3BJbmZvKGFycmF5TW9kZS5hc1dvcmQoKSksIE9wSW5mbyhwcmVkaWN0aW9uKSwg
Z2V0KHJlZ2lzdGVyT2Zmc2V0ICsgYXJndW1lbnRUb09wZXJhbmQoMCkpLCBnZXQocmVnaXN0ZXJP
ZmZzZXQgKyBhcmd1bWVudFRvT3BlcmFuZCgxKSkpOwogICAgICAgICAgICAgaWYgKHVzZXNSZXN1
bHQpCiAgICAgICAgICAgICAgICAgc2V0KHJlc3VsdE9wZXJhbmQsIGFycmF5UHVzaCk7CiAgICAg
ICAgICAgICAKQEAgLTE2NjgsNyArMTYyOSw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRs
ZUludHJpbnNpYyhib28KICAgICAgICAgY2FzZSBBcnJheTo6RG91YmxlOgogICAgICAgICBjYXNl
IEFycmF5OjpDb250aWd1b3VzOgogICAgICAgICBjYXNlIEFycmF5OjpBcnJheVN0b3JhZ2U6IHsK
LSAgICAgICAgICAgIE5vZGVJbmRleCBhcnJheVBvcCA9IGFkZFRvR3JhcGgoQXJyYXlQb3AsIE9w
SW5mbyhhcnJheU1vZGUuYXNXb3JkKCkpLCBPcEluZm8ocHJlZGljdGlvbiksIGdldChyZWdpc3Rl
ck9mZnNldCArIGFyZ3VtZW50VG9PcGVyYW5kKDApKSk7CisgICAgICAgICAgICBOb2RlKiBhcnJh
eVBvcCA9IGFkZFRvR3JhcGgoQXJyYXlQb3AsIE9wSW5mbyhhcnJheU1vZGUuYXNXb3JkKCkpLCBP
cEluZm8ocHJlZGljdGlvbiksIGdldChyZWdpc3Rlck9mZnNldCArIGFyZ3VtZW50VG9PcGVyYW5k
KDApKSk7CiAgICAgICAgICAgICBpZiAodXNlc1Jlc3VsdCkKICAgICAgICAgICAgICAgICBzZXQo
cmVzdWx0T3BlcmFuZCwgYXJyYXlQb3ApOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0x
Njg1LDcgKzE2NDYsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbnRyaW5zaWMoYm9v
CiAKICAgICAgICAgaW50IHRoaXNPcGVyYW5kID0gcmVnaXN0ZXJPZmZzZXQgKyBhcmd1bWVudFRv
T3BlcmFuZCgwKTsKICAgICAgICAgaW50IGluZGV4T3BlcmFuZCA9IHJlZ2lzdGVyT2Zmc2V0ICsg
YXJndW1lbnRUb09wZXJhbmQoMSk7Ci0gICAgICAgIE5vZGVJbmRleCBjaGFyQ29kZSA9IGFkZFRv
R3JhcGgoU3RyaW5nQ2hhckNvZGVBdCwgT3BJbmZvKEFycmF5TW9kZShBcnJheTo6U3RyaW5nKS5h
c1dvcmQoKSksIGdldCh0aGlzT3BlcmFuZCksIGdldFRvSW50MzIoaW5kZXhPcGVyYW5kKSk7Cisg
ICAgICAgIE5vZGUqIGNoYXJDb2RlID0gYWRkVG9HcmFwaChTdHJpbmdDaGFyQ29kZUF0LCBPcElu
Zm8oQXJyYXlNb2RlKEFycmF5OjpTdHJpbmcpLmFzV29yZCgpKSwgZ2V0KHRoaXNPcGVyYW5kKSwg
Z2V0VG9JbnQzMihpbmRleE9wZXJhbmQpKTsKIAogICAgICAgICBpZiAodXNlc1Jlc3VsdCkKICAg
ICAgICAgICAgIHNldChyZXN1bHRPcGVyYW5kLCBjaGFyQ29kZSk7CkBAIC0xNjk4LDcgKzE2NTks
NyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbnRyaW5zaWMoYm9vCiAKICAgICAgICAg
aW50IHRoaXNPcGVyYW5kID0gcmVnaXN0ZXJPZmZzZXQgKyBhcmd1bWVudFRvT3BlcmFuZCgwKTsK
ICAgICAgICAgaW50IGluZGV4T3BlcmFuZCA9IHJlZ2lzdGVyT2Zmc2V0ICsgYXJndW1lbnRUb09w
ZXJhbmQoMSk7Ci0gICAgICAgIE5vZGVJbmRleCBjaGFyQ29kZSA9IGFkZFRvR3JhcGgoU3RyaW5n
Q2hhckF0LCBPcEluZm8oQXJyYXlNb2RlKEFycmF5OjpTdHJpbmcpLmFzV29yZCgpKSwgZ2V0KHRo
aXNPcGVyYW5kKSwgZ2V0VG9JbnQzMihpbmRleE9wZXJhbmQpKTsKKyAgICAgICAgTm9kZSogY2hh
ckNvZGUgPSBhZGRUb0dyYXBoKFN0cmluZ0NoYXJBdCwgT3BJbmZvKEFycmF5TW9kZShBcnJheTo6
U3RyaW5nKS5hc1dvcmQoKSksIGdldCh0aGlzT3BlcmFuZCksIGdldFRvSW50MzIoaW5kZXhPcGVy
YW5kKSk7CiAKICAgICAgICAgaWYgKHVzZXNSZXN1bHQpCiAgICAgICAgICAgICBzZXQocmVzdWx0
T3BlcmFuZCwgY2hhckNvZGUpOwpAQCAtMTcwOSw3ICsxNjcwLDcgQEAgYm9vbCBCeXRlQ29kZVBh
cnNlcjo6aGFuZGxlSW50cmluc2ljKGJvbwogICAgICAgICBpZiAoYXJndW1lbnRDb3VudEluY2x1
ZGluZ1RoaXMgIT0gMikKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgCi0gICAg
ICAgIE5vZGVJbmRleCByZWdFeHBFeGVjID0gYWRkVG9HcmFwaChSZWdFeHBFeGVjLCBPcEluZm8o
MCksIE9wSW5mbyhwcmVkaWN0aW9uKSwgZ2V0KHJlZ2lzdGVyT2Zmc2V0ICsgYXJndW1lbnRUb09w
ZXJhbmQoMCkpLCBnZXQocmVnaXN0ZXJPZmZzZXQgKyBhcmd1bWVudFRvT3BlcmFuZCgxKSkpOwor
ICAgICAgICBOb2RlKiByZWdFeHBFeGVjID0gYWRkVG9HcmFwaChSZWdFeHBFeGVjLCBPcEluZm8o
MCksIE9wSW5mbyhwcmVkaWN0aW9uKSwgZ2V0KHJlZ2lzdGVyT2Zmc2V0ICsgYXJndW1lbnRUb09w
ZXJhbmQoMCkpLCBnZXQocmVnaXN0ZXJPZmZzZXQgKyBhcmd1bWVudFRvT3BlcmFuZCgxKSkpOwog
ICAgICAgICBpZiAodXNlc1Jlc3VsdCkKICAgICAgICAgICAgIHNldChyZXN1bHRPcGVyYW5kLCBy
ZWdFeHBFeGVjKTsKICAgICAgICAgCkBAIC0xNzIwLDcgKzE2ODEsNyBAQCBib29sIEJ5dGVDb2Rl
UGFyc2VyOjpoYW5kbGVJbnRyaW5zaWMoYm9vCiAgICAgICAgIGlmIChhcmd1bWVudENvdW50SW5j
bHVkaW5nVGhpcyAhPSAyKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAKLSAg
ICAgICAgTm9kZUluZGV4IHJlZ0V4cEV4ZWMgPSBhZGRUb0dyYXBoKFJlZ0V4cFRlc3QsIE9wSW5m
bygwKSwgT3BJbmZvKHByZWRpY3Rpb24pLCBnZXQocmVnaXN0ZXJPZmZzZXQgKyBhcmd1bWVudFRv
T3BlcmFuZCgwKSksIGdldChyZWdpc3Rlck9mZnNldCArIGFyZ3VtZW50VG9PcGVyYW5kKDEpKSk7
CisgICAgICAgIE5vZGUqIHJlZ0V4cEV4ZWMgPSBhZGRUb0dyYXBoKFJlZ0V4cFRlc3QsIE9wSW5m
bygwKSwgT3BJbmZvKHByZWRpY3Rpb24pLCBnZXQocmVnaXN0ZXJPZmZzZXQgKyBhcmd1bWVudFRv
T3BlcmFuZCgwKSksIGdldChyZWdpc3Rlck9mZnNldCArIGFyZ3VtZW50VG9PcGVyYW5kKDEpKSk7
CiAgICAgICAgIGlmICh1c2VzUmVzdWx0KQogICAgICAgICAgICAgc2V0KHJlc3VsdE9wZXJhbmQs
IHJlZ0V4cEV4ZWMpOwogICAgICAgICAKQEAgLTE3NjUsOSArMTcyNiw5IEBAIGJvb2wgQnl0ZUNv
ZGVQYXJzZXI6OmhhbmRsZUNvbnN0YW50SW50ZXIKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLU5v
ZGVJbmRleCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlR2V0QnlPZmZzZXQoU3BlY3VsYXRlZFR5cGUg
cHJlZGljdGlvbiwgTm9kZUluZGV4IGJhc2UsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIFBy
b3BlcnR5T2Zmc2V0IG9mZnNldCkKK05vZGVJbmRleCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlR2V0
QnlPZmZzZXQoU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiwgTm9kZSogYmFzZSwgdW5zaWduZWQg
aWRlbnRpZmllck51bWJlciwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQogewotICAgIE5vZGVJbmRl
eCBwcm9wZXJ0eVN0b3JhZ2U7CisgICAgTm9kZSogcHJvcGVydHlTdG9yYWdlOwogICAgIGlmIChp
c0lubGluZU9mZnNldChvZmZzZXQpKQogICAgICAgICBwcm9wZXJ0eVN0b3JhZ2UgPSBiYXNlOwog
ICAgIGVsc2UKQEAgLTE3NzYsNyArMTczNyw3IEBAIE5vZGVJbmRleCBCeXRlQ29kZVBhcnNlcjo6
aGFuZGxlR2V0QnlPZmYKICAgICAvLyBhbiBPU1Igc3RhbmRwb2ludCkgaWYgR2V0QnlPZmZzZXQg
YWxzbyByZWZlcmVuY2VkIHRoZSBvYmplY3Qgd2Ugd2VyZSBsb2FkaW5nCiAgICAgLy8gZnJvbSwg
YW5kIGlmIHdlIGNvdWxkIGxvYWQgZWxpbWluYXRlIGEgR2V0QnlPZmZzZXQgZXZlbiBpZiB0aGUg
YnV0dGVyZmx5CiAgICAgLy8gaGFkIGNoYW5nZWQuIFRoYXQgd291bGQgYmUgYSBncmVhdCBzdWNj
ZXNzLgotICAgIE5vZGVJbmRleCBnZXRCeU9mZnNldCA9IGFkZFRvR3JhcGgoR2V0QnlPZmZzZXQs
IE9wSW5mbyhtX2dyYXBoLm1fc3RvcmFnZUFjY2Vzc0RhdGEuc2l6ZSgpKSwgT3BJbmZvKHByZWRp
Y3Rpb24pLCBwcm9wZXJ0eVN0b3JhZ2UpOworICAgIE5vZGUqIGdldEJ5T2Zmc2V0ID0gYWRkVG9H
cmFwaChHZXRCeU9mZnNldCwgT3BJbmZvKG1fZ3JhcGgubV9zdG9yYWdlQWNjZXNzRGF0YS5zaXpl
KCkpLCBPcEluZm8ocHJlZGljdGlvbiksIHByb3BlcnR5U3RvcmFnZSk7CiAKICAgICBTdG9yYWdl
QWNjZXNzRGF0YSBzdG9yYWdlQWNjZXNzRGF0YTsKICAgICBzdG9yYWdlQWNjZXNzRGF0YS5vZmZz
ZXQgPSBpbmRleFJlbGF0aXZlVG9CYXNlKG9mZnNldCk7CkBAIC0xNzg3LDE0ICsxNzQ4LDE0IEBA
IE5vZGVJbmRleCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlR2V0QnlPZmYKIH0KIAogdm9pZCBCeXRl
Q29kZVBhcnNlcjo6aGFuZGxlR2V0QnlPZmZzZXQoCi0gICAgaW50IGRlc3RpbmF0aW9uT3BlcmFu
ZCwgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiwgTm9kZUluZGV4IGJhc2UsIHVuc2lnbmVkIGlk
ZW50aWZpZXJOdW1iZXIsCisgICAgaW50IGRlc3RpbmF0aW9uT3BlcmFuZCwgU3BlY3VsYXRlZFR5
cGUgcHJlZGljdGlvbiwgTm9kZSogYmFzZSwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwKICAg
ICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCiB7CiAgICAgc2V0KGRlc3RpbmF0aW9uT3BlcmFuZCwg
aGFuZGxlR2V0QnlPZmZzZXQocHJlZGljdGlvbiwgYmFzZSwgaWRlbnRpZmllck51bWJlciwgb2Zm
c2V0KSk7CiB9CiAKIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUdldEJ5SWQoCi0gICAgaW50
IGRlc3RpbmF0aW9uT3BlcmFuZCwgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiwgTm9kZUluZGV4
IGJhc2UsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsCisgICAgaW50IGRlc3RpbmF0aW9uT3Bl
cmFuZCwgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiwgTm9kZSogYmFzZSwgdW5zaWduZWQgaWRl
bnRpZmllck51bWJlciwKICAgICBjb25zdCBHZXRCeUlkU3RhdHVzJiBnZXRCeUlkU3RhdHVzKQog
ewogICAgIGlmICghZ2V0QnlJZFN0YXR1cy5pc1NpbXBsZSgpCkBAIC0xODEzLDcgKzE3NzQsNyBA
QCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVHZXRCeUlkKAogICAgIGlmIChwcmVkaWN0aW9u
ID09IFNwZWNOb25lKQogICAgICAgICBhZGRUb0dyYXBoKEZvcmNlT1NSRXhpdCk7CiAgICAgCi0g
ICAgTm9kZUluZGV4IG9yaWdpbmFsQmFzZUZvckJhc2VsaW5lSklUID0gYmFzZTsKKyAgICBOb2Rl
KiBvcmlnaW5hbEJhc2VGb3JCYXNlbGluZUpJVCA9IGJhc2U7CiAgICAgICAgICAgICAgICAgCiAg
ICAgYWRkVG9HcmFwaChDaGVja1N0cnVjdHVyZSwgT3BJbmZvKG1fZ3JhcGguYWRkU3RydWN0dXJl
U2V0KGdldEJ5SWRTdGF0dXMuc3RydWN0dXJlU2V0KCkpKSwgYmFzZSk7CiAgICAgCkBAIC0xODU2
LDcgKzE4MTcsNyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwcmVwYXJlVG9QYXJzZUJsb2NrCiAK
IE5vZGVJbmRleCBCeXRlQ29kZVBhcnNlcjo6Z2V0U2NvcGUoYm9vbCBza2lwVG9wLCB1bnNpZ25l
ZCBza2lwQ291bnQpCiB7Ci0gICAgTm9kZUluZGV4IGxvY2FsQmFzZTsKKyAgICBOb2RlKiBsb2Nh
bEJhc2U7CiAgICAgaWYgKG1faW5saW5lU3RhY2tUb3AtPm1faW5saW5lQ2FsbEZyYW1lICYmICFt
X2lubGluZVN0YWNrVG9wLT5tX2lubGluZUNhbGxGcmFtZS0+aXNDbG9zdXJlQ2FsbCgpKSB7CiAg
ICAgICAgIEFTU0VSVChtX2lubGluZVN0YWNrVG9wLT5tX2lubGluZUNhbGxGcmFtZS0+Y2FsbGVl
KTsKICAgICAgICAgbG9jYWxCYXNlID0gY2VsbENvbnN0YW50KG1faW5saW5lU3RhY2tUb3AtPm1f
aW5saW5lQ2FsbEZyYW1lLT5jYWxsZWUtPnNjb3BlKCkpOwpAQCAtMTg3MSw3ICsxODMyLDcgQEAg
Tm9kZUluZGV4IEJ5dGVDb2RlUGFyc2VyOjpnZXRTY29wZShib29sIAogICAgIHJldHVybiBsb2Nh
bEJhc2U7CiB9CiAKLWJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlUmVzb2x2ZU9wZXJhdGlvbnMo
U3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiwgdW5zaWduZWQgaWRlbnRpZmllciwgdW5zaWduZWQg
b3BlcmF0aW9ucywgdW5zaWduZWQgcHV0VG9CYXNlT3BlcmF0aW9uLCBOb2RlSW5kZXgqIGJhc2Us
IE5vZGVJbmRleCogdmFsdWUpCitib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZVJlc29sdmVPcGVy
YXRpb25zKFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24sIHVuc2lnbmVkIGlkZW50aWZpZXIsIHVu
c2lnbmVkIG9wZXJhdGlvbnMsIHVuc2lnbmVkIHB1dFRvQmFzZU9wZXJhdGlvbiwgTm9kZSoqIGJh
c2UsIE5vZGUqKiB2YWx1ZSkKIHsKICAgICBSZXNvbHZlT3BlcmF0aW9ucyogcmVzb2x2ZU9wZXJh
dGlvbnMgPSBtX2NvZGVCbG9jay0+cmVzb2x2ZU9wZXJhdGlvbnMob3BlcmF0aW9ucyk7CiAgICAg
aWYgKHJlc29sdmVPcGVyYXRpb25zLT5pc0VtcHR5KCkpIHsKQEAgLTE4ODQsNyArMTg0NSw3IEBA
IGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlUmVzb2x2ZU9wZXJhdGkKICAgICBib29sIHNraXBw
ZWRTY29wZXMgPSBmYWxzZTsKICAgICBib29sIHNldEJhc2UgPSBmYWxzZTsKICAgICBSZXNvbHZl
T3BlcmF0aW9uKiBwYyA9IHJlc29sdmVPcGVyYXRpb25zLT5kYXRhKCk7Ci0gICAgTm9kZUluZGV4
IGxvY2FsQmFzZSA9IDA7CisgICAgTm9kZSogbG9jYWxCYXNlID0gMDsKICAgICBib29sIHJlc29s
dmluZ0Jhc2UgPSB0cnVlOwogICAgIHdoaWxlIChyZXNvbHZpbmdCYXNlKSB7CiAgICAgICAgIHN3
aXRjaCAocGMtPm1fb3BlcmF0aW9uKSB7CkBAIC0xOTYwLDcgKzE5MjEsNyBAQCBib29sIEJ5dGVD
b2RlUGFyc2VyOjpwYXJzZVJlc29sdmVPcGVyYXRpCiAgICAgICAgIGlmIChzdGF0dXMuaXNTaW1w
bGUoKSkgewogICAgICAgICAgICAgQVNTRVJUKHN0YXR1cy5zdHJ1Y3R1cmUoKSk7CiAKLSAgICAg
ICAgICAgIE5vZGVJbmRleCBnbG9iYWxPYmplY3ROb2RlID0gYWRkU3RydWN0dXJlVHJhbnNpdGlv
bkNoZWNrKGdsb2JhbE9iamVjdCwgc3RhdHVzLnN0cnVjdHVyZSgpKTsKKyAgICAgICAgICAgIE5v
ZGUqIGdsb2JhbE9iamVjdE5vZGUgPSBhZGRTdHJ1Y3R1cmVUcmFuc2l0aW9uQ2hlY2soZ2xvYmFs
T2JqZWN0LCBzdGF0dXMuc3RydWN0dXJlKCkpOwogCiAgICAgICAgICAgICBpZiAoc3RhdHVzLnNw
ZWNpZmljVmFsdWUoKSkgewogICAgICAgICAgICAgICAgIEFTU0VSVChzdGF0dXMuc3BlY2lmaWNW
YWx1ZSgpLmlzQ2VsbCgpKTsKQEAgLTE5NzAsNyArMTkzMSw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJz
ZXI6OnBhcnNlUmVzb2x2ZU9wZXJhdGkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAg
ICB9CiAKLSAgICAgICAgTm9kZUluZGV4IHJlc29sdmUgPSBhZGRUb0dyYXBoKFJlc29sdmVHbG9i
YWwsIE9wSW5mbyhtX2dyYXBoLm1fcmVzb2x2ZUdsb2JhbERhdGEuc2l6ZSgpKSwgT3BJbmZvKHBy
ZWRpY3Rpb24pKTsKKyAgICAgICAgTm9kZSogcmVzb2x2ZSA9IGFkZFRvR3JhcGgoUmVzb2x2ZUds
b2JhbCwgT3BJbmZvKG1fZ3JhcGgubV9yZXNvbHZlR2xvYmFsRGF0YS5zaXplKCkpLCBPcEluZm8o
cHJlZGljdGlvbikpOwogICAgICAgICBtX2dyYXBoLm1fcmVzb2x2ZUdsb2JhbERhdGEuYXBwZW5k
KFJlc29sdmVHbG9iYWxEYXRhKCkpOwogICAgICAgICBSZXNvbHZlR2xvYmFsRGF0YSYgZGF0YSA9
IG1fZ3JhcGgubV9yZXNvbHZlR2xvYmFsRGF0YS5sYXN0KCk7CiAgICAgICAgIGRhdGEuaWRlbnRp
Zmllck51bWJlciA9IGlkZW50aWZpZXI7CkBAIC0xOTgxLDkgKzE5NDIsMTAgQEAgYm9vbCBCeXRl
Q29kZVBhcnNlcjo6cGFyc2VSZXNvbHZlT3BlcmF0aQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICB9CiAgICAgY2FzZSBSZXNvbHZlT3BlcmF0aW9uOjpHZXRBbmRSZXR1cm5HbG9iYWxWYXI6IHsK
LSAgICAgICAgKnZhbHVlID0gYWRkVG9HcmFwaChHZXRHbG9iYWxWYXIsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgT3BJbmZvKGdsb2JhbE9iamVjdC0+YXNzZXJ0UmVnaXN0ZXJJc0luVGhp
c09iamVjdChwYy0+bV9yZWdpc3RlckFkZHJlc3MpKSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBPcEluZm8ocHJlZGljdGlvbikpOworICAgICAgICAqdmFsdWUgPSBhZGRUb0dyYXBoKAor
ICAgICAgICAgICAgR2V0R2xvYmFsVmFyLAorICAgICAgICAgICAgT3BJbmZvKGdsb2JhbE9iamVj
dC0+YXNzZXJ0UmVnaXN0ZXJJc0luVGhpc09iamVjdChwYy0+bV9yZWdpc3RlckFkZHJlc3MpKSwK
KyAgICAgICAgICAgIE9wSW5mbyhwcmVkaWN0aW9uKSk7CiAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgIH0KICAgICBjYXNlIFJlc29sdmVPcGVyYXRpb246OkdldEFuZFJldHVybkdsb2JhbFZhcldh
dGNoYWJsZTogewpAQCAtMjAyMiw3ICsxOTg0LDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFy
c2VSZXNvbHZlT3BlcmF0aQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgY2FzZSBS
ZXNvbHZlT3BlcmF0aW9uOjpHZXRBbmRSZXR1cm5TY29wZWRWYXI6IHsKLSAgICAgICAgTm9kZUlu
ZGV4IGdldFNjb3BlUmVnaXN0ZXJzID0gYWRkVG9HcmFwaChHZXRTY29wZVJlZ2lzdGVycywgbG9j
YWxCYXNlKTsKKyAgICAgICAgTm9kZSogZ2V0U2NvcGVSZWdpc3RlcnMgPSBhZGRUb0dyYXBoKEdl
dFNjb3BlUmVnaXN0ZXJzLCBsb2NhbEJhc2UpOwogICAgICAgICAqdmFsdWUgPSBhZGRUb0dyYXBo
KEdldFNjb3BlZFZhciwgT3BJbmZvKHJlc29sdmVWYWx1ZU9wZXJhdGlvbi0+bV9vZmZzZXQpLCBP
cEluZm8ocHJlZGljdGlvbiksIGdldFNjb3BlUmVnaXN0ZXJzKTsKICAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgfQpAQCAtMjA1MSw3ICsyMDEzLDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFy
c2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgICAgIGFyZ3VtZW50VG9PcGVyYW5kKGFyZ3Vt
ZW50KSwgbV9jb2RlQmxvY2stPmlzQ2FwdHVyZWQoYXJndW1lbnRUb09wZXJhbmQoYXJndW1lbnQp
KSk7CiAgICAgICAgICAgICB2YXJpYWJsZS0+bWVyZ2VTdHJ1Y3R1cmVDaGVja0hvaXN0aW5nRmFp
bGVkKAogICAgICAgICAgICAgICAgIG1faW5saW5lU3RhY2tUb3AtPm1fZXhpdFByb2ZpbGUuaGFz
RXhpdFNpdGUobV9jdXJyZW50SW5kZXgsIEJhZENhY2hlKSk7Ci0gICAgICAgICAgICBOb2RlSW5k
ZXggc2V0QXJndW1lbnQgPSBhZGRUb0dyYXBoKFNldEFyZ3VtZW50LCBPcEluZm8odmFyaWFibGUp
KTsKKyAgICAgICAgICAgIE5vZGUqIHNldEFyZ3VtZW50ID0gYWRkVG9HcmFwaChTZXRBcmd1bWVu
dCwgT3BJbmZvKHZhcmlhYmxlKSk7CiAgICAgICAgICAgICBtX2dyYXBoLm1fYXJndW1lbnRzW2Fy
Z3VtZW50XSA9IHNldEFyZ3VtZW50OwogICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPnZhcmlh
Ymxlc0F0SGVhZC5zZXRBcmd1bWVudEZpcnN0VGltZShhcmd1bWVudCwgc2V0QXJndW1lbnQpOwog
ICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5zZXRBcmd1bWVudEZp
cnN0VGltZShhcmd1bWVudCwgc2V0QXJndW1lbnQpOwpAQCAtMjEwMSwxMyArMjA2MywxMyBAQCBi
b29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICBORVhU
X09QQ09ERShvcF9lbnRlcik7CiAKICAgICAgICAgY2FzZSBvcF9jb252ZXJ0X3RoaXM6IHsKLSAg
ICAgICAgICAgIE5vZGVJbmRleCBvcDEgPSBnZXRUaGlzKCk7Ci0gICAgICAgICAgICBpZiAobV9n
cmFwaFtvcDFdLm9wKCkgIT0gQ29udmVydFRoaXMpIHsKKyAgICAgICAgICAgIE5vZGUqIG9wMSA9
IGdldFRoaXMoKTsKKyAgICAgICAgICAgIGlmIChvcDEtPm9wKCkgIT0gQ29udmVydFRoaXMpIHsK
ICAgICAgICAgICAgICAgICBWYWx1ZVByb2ZpbGUqIHByb2ZpbGUgPQogICAgICAgICAgICAgICAg
ICAgICBtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2stPnZhbHVlUHJvZmlsZUZvckJ5
dGVjb2RlT2Zmc2V0KG1fY3VycmVudFByb2ZpbGluZ0luZGV4KTsKICAgICAgICAgICAgICAgICBw
cm9maWxlLT5jb21wdXRlVXBkYXRlZFByZWRpY3Rpb24oKTsKICNpZiBERkdfRU5BQkxFKERFQlVH
X1ZFUkJPU0UpCi0gICAgICAgICAgICAgICAgZGF0YUxvZ0YoIltAJWx1IGJjIyV1XTogcHJvZmls
ZSAlcDogIiwgbV9ncmFwaC5zaXplKCksIG1fY3VycmVudFByb2ZpbGluZ0luZGV4LCBwcm9maWxl
KTsKKyAgICAgICAgICAgICAgICBkYXRhTG9nRigiW2JjIyV1XTogcHJvZmlsZSAlcDogIiwgbV9j
dXJyZW50UHJvZmlsaW5nSW5kZXgsIHByb2ZpbGUpOwogICAgICAgICAgICAgICAgIHByb2ZpbGUt
PmR1bXAoV1RGOjpkYXRhRmlsZSgpKTsKICAgICAgICAgICAgICAgICBkYXRhTG9nRigiXG4iKTsK
ICNlbmRpZgpAQCAtMjEyOCwxMCArMjA5MCwxMCBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJz
ZUJsb2NrKHVuc2lnbmVkCiAKICAgICAgICAgY2FzZSBvcF9jcmVhdGVfdGhpczogewogICAgICAg
ICAgICAgaW50IGNhbGxlZU9wZXJhbmQgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5k
OwotICAgICAgICAgICAgTm9kZUluZGV4IGNhbGxlZSA9IGdldChjYWxsZWVPcGVyYW5kKTsKKyAg
ICAgICAgICAgIE5vZGUqIGNhbGxlZSA9IGdldChjYWxsZWVPcGVyYW5kKTsKICAgICAgICAgICAg
IGJvb2wgYWxyZWFkeUVtaXR0ZWQgPSBmYWxzZTsKLSAgICAgICAgICAgIGlmIChtX2dyYXBoW2Nh
bGxlZV0ub3AoKSA9PSBXZWFrSlNDb25zdGFudCkgewotICAgICAgICAgICAgICAgIEpTQ2VsbCog
Y2VsbCA9IG1fZ3JhcGhbY2FsbGVlXS53ZWFrQ29uc3RhbnQoKTsKKyAgICAgICAgICAgIGlmIChj
YWxsZWUtPm9wKCkgPT0gV2Vha0pTQ29uc3RhbnQpIHsKKyAgICAgICAgICAgICAgICBKU0NlbGwq
IGNlbGwgPSBjYWxsZWUtPndlYWtDb25zdGFudCgpOwogICAgICAgICAgICAgICAgIEFTU0VSVChj
ZWxsLT5pbmhlcml0cygmSlNGdW5jdGlvbjo6c19pbmZvKSk7CiAgICAgICAgICAgICAgICAgCiAg
ICAgICAgICAgICAgICAgSlNGdW5jdGlvbiogZnVuY3Rpb24gPSBqc0Nhc3Q8SlNGdW5jdGlvbio+
KGNlbGwpOwpAQCAtMjIwNSw3ICsyMTY3LDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VC
bG9jayh1bnNpZ25lZAogICAgICAgICAgICAgICAgIHNldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0u
dS5vcGVyYW5kLCBnZXQoSlNTdGFjazo6Q2FsbGVlKSk7CiAgICAgICAgICAgICBlbHNlIHsKICAg
ICAgICAgICAgICAgICBBU1NFUlQocHJvZmlsZS0+bV9zaW5nbGV0b25WYWx1ZS5hc0NlbGwoKS0+
aW5oZXJpdHMoJkpTRnVuY3Rpb246OnNfaW5mbykpOwotICAgICAgICAgICAgICAgIE5vZGVJbmRl
eCBhY3R1YWxDYWxsZWUgPSBnZXQoSlNTdGFjazo6Q2FsbGVlKTsKKyAgICAgICAgICAgICAgICBO
b2RlKiBhY3R1YWxDYWxsZWUgPSBnZXQoSlNTdGFjazo6Q2FsbGVlKTsKICAgICAgICAgICAgICAg
ICBhZGRUb0dyYXBoKENoZWNrRnVuY3Rpb24sIE9wSW5mbyhwcm9maWxlLT5tX3NpbmdsZXRvblZh
bHVlLmFzQ2VsbCgpKSwgYWN0dWFsQ2FsbGVlKTsKICAgICAgICAgICAgICAgICBzZXQoY3VycmVu
dEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwgYWRkVG9HcmFwaChXZWFrSlNDb25zdGFudCwgT3BJ
bmZvKHByb2ZpbGUtPm1fc2luZ2xldG9uVmFsdWUuYXNDZWxsKCkpKSk7CiAgICAgICAgICAgICB9
CkBAIC0yMjE1LDMwICsyMTc3LDMwIEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2so
dW5zaWduZWQKICAgICAgICAgLy8gPT09IEJpdHdpc2Ugb3BlcmF0aW9ucyA9PT0KIAogICAgICAg
ICBjYXNlIG9wX2JpdGFuZDogewotICAgICAgICAgICAgTm9kZUluZGV4IG9wMSA9IGdldFRvSW50
MzIoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7Ci0gICAgICAgICAgICBOb2RlSW5k
ZXggb3AyID0gZ2V0VG9JbnQzMihjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKTsKKyAg
ICAgICAgICAgIE5vZGUqIG9wMSA9IGdldFRvSW50MzIoY3VycmVudEluc3RydWN0aW9uWzJdLnUu
b3BlcmFuZCk7CisgICAgICAgICAgICBOb2RlKiBvcDIgPSBnZXRUb0ludDMyKGN1cnJlbnRJbnN0
cnVjdGlvblszXS51Lm9wZXJhbmQpOwogICAgICAgICAgICAgc2V0KGN1cnJlbnRJbnN0cnVjdGlv
blsxXS51Lm9wZXJhbmQsIGFkZFRvR3JhcGgoQml0QW5kLCBvcDEsIG9wMikpOwogICAgICAgICAg
ICAgTkVYVF9PUENPREUob3BfYml0YW5kKTsKICAgICAgICAgfQogCiAgICAgICAgIGNhc2Ugb3Bf
Yml0b3I6IHsKLSAgICAgICAgICAgIE5vZGVJbmRleCBvcDEgPSBnZXRUb0ludDMyKGN1cnJlbnRJ
bnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOwotICAgICAgICAgICAgTm9kZUluZGV4IG9wMiA9IGdl
dFRvSW50MzIoY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZCk7CisgICAgICAgICAgICBO
b2RlKiBvcDEgPSBnZXRUb0ludDMyKGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOwor
ICAgICAgICAgICAgTm9kZSogb3AyID0gZ2V0VG9JbnQzMihjdXJyZW50SW5zdHJ1Y3Rpb25bM10u
dS5vcGVyYW5kKTsKICAgICAgICAgICAgIHNldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVy
YW5kLCBhZGRUb0dyYXBoKEJpdE9yLCBvcDEsIG9wMikpOwogICAgICAgICAgICAgTkVYVF9PUENP
REUob3BfYml0b3IpOwogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBvcF9iaXR4b3I6IHsKLSAg
ICAgICAgICAgIE5vZGVJbmRleCBvcDEgPSBnZXRUb0ludDMyKGN1cnJlbnRJbnN0cnVjdGlvblsy
XS51Lm9wZXJhbmQpOwotICAgICAgICAgICAgTm9kZUluZGV4IG9wMiA9IGdldFRvSW50MzIoY3Vy
cmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZCk7CisgICAgICAgICAgICBOb2RlKiBvcDEgPSBn
ZXRUb0ludDMyKGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOworICAgICAgICAgICAg
Tm9kZSogb3AyID0gZ2V0VG9JbnQzMihjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKTsK
ICAgICAgICAgICAgIHNldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCBhZGRUb0dy
YXBoKEJpdFhvciwgb3AxLCBvcDIpKTsKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2JpdHhv
cik7CiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIG9wX3JzaGlmdDogewotICAgICAgICAgICAg
Tm9kZUluZGV4IG9wMSA9IGdldFRvSW50MzIoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFu
ZCk7Ci0gICAgICAgICAgICBOb2RlSW5kZXggb3AyID0gZ2V0VG9JbnQzMihjdXJyZW50SW5zdHJ1
Y3Rpb25bM10udS5vcGVyYW5kKTsKLSAgICAgICAgICAgIE5vZGVJbmRleCByZXN1bHQ7CisgICAg
ICAgICAgICBOb2RlKiBvcDEgPSBnZXRUb0ludDMyKGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9w
ZXJhbmQpOworICAgICAgICAgICAgTm9kZSogb3AyID0gZ2V0VG9JbnQzMihjdXJyZW50SW5zdHJ1
Y3Rpb25bM10udS5vcGVyYW5kKTsKKyAgICAgICAgICAgIE5vZGUqIHJlc3VsdDsKICAgICAgICAg
ICAgIC8vIE9wdGltaXplIG91dCBzaGlmdHMgYnkgemVyby4KICAgICAgICAgICAgIGlmIChpc0lu
dDMyQ29uc3RhbnQob3AyKSAmJiAhKHZhbHVlT2ZJbnQzMkNvbnN0YW50KG9wMikgJiAweDFmKSkK
ICAgICAgICAgICAgICAgICByZXN1bHQgPSBvcDE7CkBAIC0yMjQ5LDkgKzIyMTEsOSBAQCBib29s
IEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgIH0KIAogICAgICAg
ICBjYXNlIG9wX2xzaGlmdDogewotICAgICAgICAgICAgTm9kZUluZGV4IG9wMSA9IGdldFRvSW50
MzIoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7Ci0gICAgICAgICAgICBOb2RlSW5k
ZXggb3AyID0gZ2V0VG9JbnQzMihjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKTsKLSAg
ICAgICAgICAgIE5vZGVJbmRleCByZXN1bHQ7CisgICAgICAgICAgICBOb2RlKiBvcDEgPSBnZXRU
b0ludDMyKGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOworICAgICAgICAgICAgTm9k
ZSogb3AyID0gZ2V0VG9JbnQzMihjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKTsKKyAg
ICAgICAgICAgIE5vZGUqIHJlc3VsdDsKICAgICAgICAgICAgIC8vIE9wdGltaXplIG91dCBzaGlm
dHMgYnkgemVyby4KICAgICAgICAgICAgIGlmIChpc0ludDMyQ29uc3RhbnQob3AyKSAmJiAhKHZh
bHVlT2ZJbnQzMkNvbnN0YW50KG9wMikgJiAweDFmKSkKICAgICAgICAgICAgICAgICByZXN1bHQg
PSBvcDE7CkBAIC0yMjYyLDkgKzIyMjQsOSBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJs
b2NrKHVuc2lnbmVkCiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIG9wX3Vyc2hpZnQ6IHsKLSAg
ICAgICAgICAgIE5vZGVJbmRleCBvcDEgPSBnZXRUb0ludDMyKGN1cnJlbnRJbnN0cnVjdGlvblsy
XS51Lm9wZXJhbmQpOwotICAgICAgICAgICAgTm9kZUluZGV4IG9wMiA9IGdldFRvSW50MzIoY3Vy
cmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZCk7Ci0gICAgICAgICAgICBOb2RlSW5kZXggcmVz
dWx0OworICAgICAgICAgICAgTm9kZSogb3AxID0gZ2V0VG9JbnQzMihjdXJyZW50SW5zdHJ1Y3Rp
b25bMl0udS5vcGVyYW5kKTsKKyAgICAgICAgICAgIE5vZGUqIG9wMiA9IGdldFRvSW50MzIoY3Vy
cmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZCk7CisgICAgICAgICAgICBOb2RlKiByZXN1bHQ7
CiAgICAgICAgICAgICAvLyBUaGUgcmVzdWx0IG9mIGEgemVyby1leHRlbmRpbmcgcmlnaHQgc2hp
ZnQgaXMgdHJlYXRlZCBhcyBhbiB1bnNpZ25lZCB2YWx1ZS4KICAgICAgICAgICAgIC8vIFRoaXMg
bWVhbnMgdGhhdCBpZiB0aGUgdG9wIGJpdCBpcyBzZXQsIHRoZSByZXN1bHQgaXMgbm90IGluIHRo
ZSBpbnQzMiByYW5nZSwKICAgICAgICAgICAgIC8vIGFuZCBhcyBzdWNoIG11c3QgYmUgc3RvcmVk
IGFzIGEgZG91YmxlLiBJZiB0aGUgc2hpZnQgYW1vdW50IGlzIGEgY29uc3RhbnQsCkBAIC0yMjky
LDcgKzIyNTQsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAK
ICAgICAgICAgY2FzZSBvcF9wcmVfaW5jOiB7CiAgICAgICAgICAgICB1bnNpZ25lZCBzcmNEc3Qg
PSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwotICAgICAgICAgICAgTm9kZUluZGV4
IG9wID0gZ2V0KHNyY0RzdCk7CisgICAgICAgICAgICBOb2RlKiBvcCA9IGdldChzcmNEc3QpOwog
ICAgICAgICAgICAgc2V0KHNyY0RzdCwgbWFrZVNhZmUoYWRkVG9HcmFwaChBcml0aEFkZCwgb3As
IG9uZSgpKSkpOwogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfcHJlX2luYyk7CiAgICAgICAg
IH0KQEAgLTIzMDEsMTQgKzIyNjMsMTQgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9j
ayh1bnNpZ25lZAogICAgICAgICAgICAgdW5zaWduZWQgcmVzdWx0ID0gY3VycmVudEluc3RydWN0
aW9uWzFdLnUub3BlcmFuZDsKICAgICAgICAgICAgIHVuc2lnbmVkIHNyY0RzdCA9IGN1cnJlbnRJ
bnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7CiAgICAgICAgICAgICBBU1NFUlQocmVzdWx0ICE9IHNy
Y0RzdCk7IC8vIFJlcXVpcmVkIGZvciBhc3N1bXB0aW9ucyB3ZSBtYWtlIGR1cmluZyBPU1IuCi0g
ICAgICAgICAgICBOb2RlSW5kZXggb3AgPSBnZXQoc3JjRHN0KTsKKyAgICAgICAgICAgIE5vZGUq
IG9wID0gZ2V0KHNyY0RzdCk7CiAgICAgICAgICAgICBzZXRQYWlyKHJlc3VsdCwgb3AsIHNyY0Rz
dCwgbWFrZVNhZmUoYWRkVG9HcmFwaChBcml0aEFkZCwgb3AsIG9uZSgpKSkpOwogICAgICAgICAg
ICAgTkVYVF9PUENPREUob3BfcG9zdF9pbmMpOwogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBv
cF9wcmVfZGVjOiB7CiAgICAgICAgICAgICB1bnNpZ25lZCBzcmNEc3QgPSBjdXJyZW50SW5zdHJ1
Y3Rpb25bMV0udS5vcGVyYW5kOwotICAgICAgICAgICAgTm9kZUluZGV4IG9wID0gZ2V0KHNyY0Rz
dCk7CisgICAgICAgICAgICBOb2RlKiBvcCA9IGdldChzcmNEc3QpOwogICAgICAgICAgICAgc2V0
KHNyY0RzdCwgbWFrZVNhZmUoYWRkVG9HcmFwaChBcml0aFN1Yiwgb3AsIG9uZSgpKSkpOwogICAg
ICAgICAgICAgTkVYVF9PUENPREUob3BfcHJlX2RlYyk7CiAgICAgICAgIH0KQEAgLTIzMTYsNyAr
MjI3OCw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAg
ICAgY2FzZSBvcF9wb3N0X2RlYzogewogICAgICAgICAgICAgdW5zaWduZWQgcmVzdWx0ID0gY3Vy
cmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKICAgICAgICAgICAgIHVuc2lnbmVkIHNyY0Rz
dCA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBOb2RlSW5k
ZXggb3AgPSBnZXQoc3JjRHN0KTsKKyAgICAgICAgICAgIE5vZGUqIG9wID0gZ2V0KHNyY0RzdCk7
CiAgICAgICAgICAgICBzZXRQYWlyKHJlc3VsdCwgb3AsIHNyY0RzdCwgbWFrZVNhZmUoYWRkVG9H
cmFwaChBcml0aFN1Yiwgb3AsIG9uZSgpKSkpOwogICAgICAgICAgICAgTkVYVF9PUENPREUob3Bf
cG9zdF9kZWMpOwogICAgICAgICB9CkBAIC0yMzI0LDkgKzIyODYsOSBAQCBib29sIEJ5dGVDb2Rl
UGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgIC8vID09PSBBcml0aG1ldGljIG9w
ZXJhdGlvbnMgPT09CiAKICAgICAgICAgY2FzZSBvcF9hZGQ6IHsKLSAgICAgICAgICAgIE5vZGVJ
bmRleCBvcDEgPSBnZXQoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7Ci0gICAgICAg
ICAgICBOb2RlSW5kZXggb3AyID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQp
OwotICAgICAgICAgICAgaWYgKG1fZ3JhcGhbb3AxXS5oYXNOdW1iZXJSZXN1bHQoKSAmJiBtX2dy
YXBoW29wMl0uaGFzTnVtYmVyUmVzdWx0KCkpCisgICAgICAgICAgICBOb2RlKiBvcDEgPSBnZXQo
Y3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7CisgICAgICAgICAgICBOb2RlKiBvcDIg
PSBnZXQoY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZCk7CisgICAgICAgICAgICBpZiAo
b3AxLT5oYXNOdW1iZXJSZXN1bHQoKSAmJiBvcDItPmhhc051bWJlclJlc3VsdCgpKQogICAgICAg
ICAgICAgICAgIHNldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCBtYWtlU2FmZShh
ZGRUb0dyYXBoKEFyaXRoQWRkLCBvcDEsIG9wMikpKTsKICAgICAgICAgICAgIGVsc2UKICAgICAg
ICAgICAgICAgICBzZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwgbWFrZVNhZmUo
YWRkVG9HcmFwaChWYWx1ZUFkZCwgb3AxLCBvcDIpKSk7CkBAIC0yMzM0LDM2ICsyMjk2LDM2IEBA
IGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgfQogCiAg
ICAgICAgIGNhc2Ugb3Bfc3ViOiB7Ci0gICAgICAgICAgICBOb2RlSW5kZXggb3AxID0gZ2V0KGN1
cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOwotICAgICAgICAgICAgTm9kZUluZGV4IG9w
MiA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKTsKKyAgICAgICAgICAgIE5v
ZGUqIG9wMSA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKKyAgICAgICAg
ICAgIE5vZGUqIG9wMiA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKTsKICAg
ICAgICAgICAgIHNldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCBtYWtlU2FmZShh
ZGRUb0dyYXBoKEFyaXRoU3ViLCBvcDEsIG9wMikpKTsKICAgICAgICAgICAgIE5FWFRfT1BDT0RF
KG9wX3N1Yik7CiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIG9wX25lZ2F0ZTogewotICAgICAg
ICAgICAgTm9kZUluZGV4IG9wMSA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5k
KTsKKyAgICAgICAgICAgIE5vZGUqIG9wMSA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5v
cGVyYW5kKTsKICAgICAgICAgICAgIHNldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5k
LCBtYWtlU2FmZShhZGRUb0dyYXBoKEFyaXRoTmVnYXRlLCBvcDEpKSk7CiAgICAgICAgICAgICBO
RVhUX09QQ09ERShvcF9uZWdhdGUpOwogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBvcF9tdWw6
IHsKICAgICAgICAgICAgIC8vIE11bHRpcGx5IHJlcXVpcmVzIHRoYXQgdGhlIGlucHV0cyBhcmUg
bm90IHRydW5jYXRlZCwgdW5mb3J0dW5hdGVseS4KLSAgICAgICAgICAgIE5vZGVJbmRleCBvcDEg
PSBnZXQoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7Ci0gICAgICAgICAgICBOb2Rl
SW5kZXggb3AyID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpOworICAgICAg
ICAgICAgTm9kZSogb3AxID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOwor
ICAgICAgICAgICAgTm9kZSogb3AyID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJh
bmQpOwogICAgICAgICAgICAgc2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsIG1h
a2VTYWZlKGFkZFRvR3JhcGgoQXJpdGhNdWwsIG9wMSwgb3AyKSkpOwogICAgICAgICAgICAgTkVY
VF9PUENPREUob3BfbXVsKTsKICAgICAgICAgfQogCiAgICAgICAgIGNhc2Ugb3BfbW9kOiB7Ci0g
ICAgICAgICAgICBOb2RlSW5kZXggb3AxID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9w
ZXJhbmQpOwotICAgICAgICAgICAgTm9kZUluZGV4IG9wMiA9IGdldChjdXJyZW50SW5zdHJ1Y3Rp
b25bM10udS5vcGVyYW5kKTsKKyAgICAgICAgICAgIE5vZGUqIG9wMSA9IGdldChjdXJyZW50SW5z
dHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKKyAgICAgICAgICAgIE5vZGUqIG9wMiA9IGdldChjdXJy
ZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKTsKICAgICAgICAgICAgIHNldChjdXJyZW50SW5z
dHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCBtYWtlU2FmZShhZGRUb0dyYXBoKEFyaXRoTW9kLCBvcDEs
IG9wMikpKTsKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX21vZCk7CiAgICAgICAgIH0KIAog
ICAgICAgICBjYXNlIG9wX2RpdjogewotICAgICAgICAgICAgTm9kZUluZGV4IG9wMSA9IGdldChj
dXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKLSAgICAgICAgICAgIE5vZGVJbmRleCBv
cDIgPSBnZXQoY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZCk7CisgICAgICAgICAgICBO
b2RlKiBvcDEgPSBnZXQoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7CisgICAgICAg
ICAgICBOb2RlKiBvcDIgPSBnZXQoY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZCk7CiAg
ICAgICAgICAgICBzZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwgbWFrZURpdlNh
ZmUoYWRkVG9HcmFwaChBcml0aERpdiwgb3AxLCBvcDIpKSk7CiAgICAgICAgICAgICBORVhUX09Q
Q09ERShvcF9kaXYpOwogICAgICAgICB9CkBAIC0yMzc2LDcgKzIzMzgsNyBAQCBib29sIEJ5dGVD
b2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICBORVhUX09QQ09ERShv
cF9kZWJ1Zyk7CiAjZW5kaWYKICAgICAgICAgY2FzZSBvcF9tb3Y6IHsKLSAgICAgICAgICAgIE5v
ZGVJbmRleCBvcCA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKKyAgICAg
ICAgICAgIE5vZGUqIG9wID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOwog
ICAgICAgICAgICAgc2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsIG9wKTsKICAg
ICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX21vdik7CiAgICAgICAgIH0KQEAgLTIzODYsNTYgKzIz
NDgsNTYgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAg
ICAgICAgTkVYVF9PUENPREUob3BfY2hlY2tfaGFzX2luc3RhbmNlKTsKIAogICAgICAgICBjYXNl
IG9wX2luc3RhbmNlb2Y6IHsKLSAgICAgICAgICAgIE5vZGVJbmRleCB2YWx1ZSA9IGdldChjdXJy
ZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKLSAgICAgICAgICAgIE5vZGVJbmRleCBwcm90
b3R5cGUgPSBnZXQoY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZCk7CisgICAgICAgICAg
ICBOb2RlKiB2YWx1ZSA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKKyAg
ICAgICAgICAgIE5vZGUqIHByb3RvdHlwZSA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5v
cGVyYW5kKTsKICAgICAgICAgICAgIHNldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5k
LCBhZGRUb0dyYXBoKEluc3RhbmNlT2YsIHZhbHVlLCBwcm90b3R5cGUpKTsKICAgICAgICAgICAg
IE5FWFRfT1BDT0RFKG9wX2luc3RhbmNlb2YpOwogICAgICAgICB9CiAgICAgICAgICAgICAKICAg
ICAgICAgY2FzZSBvcF9pc191bmRlZmluZWQ6IHsKLSAgICAgICAgICAgIE5vZGVJbmRleCB2YWx1
ZSA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKKyAgICAgICAgICAgIE5v
ZGUqIHZhbHVlID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOwogICAgICAg
ICAgICAgc2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsIGFkZFRvR3JhcGgoSXNV
bmRlZmluZWQsIHZhbHVlKSk7CiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9pc191bmRlZmlu
ZWQpOwogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBvcF9pc19ib29sZWFuOiB7Ci0gICAgICAg
ICAgICBOb2RlSW5kZXggdmFsdWUgPSBnZXQoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFu
ZCk7CisgICAgICAgICAgICBOb2RlKiB2YWx1ZSA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMl0u
dS5vcGVyYW5kKTsKICAgICAgICAgICAgIHNldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVy
YW5kLCBhZGRUb0dyYXBoKElzQm9vbGVhbiwgdmFsdWUpKTsKICAgICAgICAgICAgIE5FWFRfT1BD
T0RFKG9wX2lzX2Jvb2xlYW4pOwogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBvcF9pc19udW1i
ZXI6IHsKLSAgICAgICAgICAgIE5vZGVJbmRleCB2YWx1ZSA9IGdldChjdXJyZW50SW5zdHJ1Y3Rp
b25bMl0udS5vcGVyYW5kKTsKKyAgICAgICAgICAgIE5vZGUqIHZhbHVlID0gZ2V0KGN1cnJlbnRJ
bnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOwogICAgICAgICAgICAgc2V0KGN1cnJlbnRJbnN0cnVj
dGlvblsxXS51Lm9wZXJhbmQsIGFkZFRvR3JhcGgoSXNOdW1iZXIsIHZhbHVlKSk7CiAgICAgICAg
ICAgICBORVhUX09QQ09ERShvcF9pc19udW1iZXIpOwogICAgICAgICB9CiAKICAgICAgICAgY2Fz
ZSBvcF9pc19zdHJpbmc6IHsKLSAgICAgICAgICAgIE5vZGVJbmRleCB2YWx1ZSA9IGdldChjdXJy
ZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKKyAgICAgICAgICAgIE5vZGUqIHZhbHVlID0g
Z2V0KGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOwogICAgICAgICAgICAgc2V0KGN1
cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsIGFkZFRvR3JhcGgoSXNTdHJpbmcsIHZhbHVl
KSk7CiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9pc19zdHJpbmcpOwogICAgICAgICB9CiAK
ICAgICAgICAgY2FzZSBvcF9pc19vYmplY3Q6IHsKLSAgICAgICAgICAgIE5vZGVJbmRleCB2YWx1
ZSA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKKyAgICAgICAgICAgIE5v
ZGUqIHZhbHVlID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOwogICAgICAg
ICAgICAgc2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsIGFkZFRvR3JhcGgoSXNP
YmplY3QsIHZhbHVlKSk7CiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9pc19vYmplY3QpOwog
ICAgICAgICB9CiAKICAgICAgICAgY2FzZSBvcF9pc19mdW5jdGlvbjogewotICAgICAgICAgICAg
Tm9kZUluZGV4IHZhbHVlID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOwor
ICAgICAgICAgICAgTm9kZSogdmFsdWUgPSBnZXQoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3Bl
cmFuZCk7CiAgICAgICAgICAgICBzZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwg
YWRkVG9HcmFwaChJc0Z1bmN0aW9uLCB2YWx1ZSkpOwogICAgICAgICAgICAgTkVYVF9PUENPREUo
b3BfaXNfZnVuY3Rpb24pOwogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBvcF9ub3Q6IHsKLSAg
ICAgICAgICAgIE5vZGVJbmRleCB2YWx1ZSA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5v
cGVyYW5kKTsKKyAgICAgICAgICAgIE5vZGUqIHZhbHVlID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlv
blsyXS51Lm9wZXJhbmQpOwogICAgICAgICAgICAgc2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51
Lm9wZXJhbmQsIGFkZFRvR3JhcGgoTG9naWNhbE5vdCwgdmFsdWUpKTsKICAgICAgICAgICAgIE5F
WFRfT1BDT0RFKG9wX25vdCk7CiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBjYXNl
IG9wX3RvX3ByaW1pdGl2ZTogewotICAgICAgICAgICAgTm9kZUluZGV4IHZhbHVlID0gZ2V0KGN1
cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOworICAgICAgICAgICAgTm9kZSogdmFsdWUg
PSBnZXQoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7CiAgICAgICAgICAgICBzZXQo
Y3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwgYWRkVG9HcmFwaChUb1ByaW1pdGl2ZSwg
dmFsdWUpKTsKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX3RvX3ByaW1pdGl2ZSk7CiAgICAg
ICAgIH0KQEAgLTI0NTAsNjkgKzI0MTIsNjkgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VC
bG9jayh1bnNpZ25lZAogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBvcF9sZXNzOiB7Ci0gICAg
ICAgICAgICBOb2RlSW5kZXggb3AxID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJh
bmQpOwotICAgICAgICAgICAgTm9kZUluZGV4IG9wMiA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25b
M10udS5vcGVyYW5kKTsKKyAgICAgICAgICAgIE5vZGUqIG9wMSA9IGdldChjdXJyZW50SW5zdHJ1
Y3Rpb25bMl0udS5vcGVyYW5kKTsKKyAgICAgICAgICAgIE5vZGUqIG9wMiA9IGdldChjdXJyZW50
SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKTsKICAgICAgICAgICAgIHNldChjdXJyZW50SW5zdHJ1
Y3Rpb25bMV0udS5vcGVyYW5kLCBhZGRUb0dyYXBoKENvbXBhcmVMZXNzLCBvcDEsIG9wMikpOwog
ICAgICAgICAgICAgTkVYVF9PUENPREUob3BfbGVzcyk7CiAgICAgICAgIH0KIAogICAgICAgICBj
YXNlIG9wX2xlc3NlcTogewotICAgICAgICAgICAgTm9kZUluZGV4IG9wMSA9IGdldChjdXJyZW50
SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKLSAgICAgICAgICAgIE5vZGVJbmRleCBvcDIgPSBn
ZXQoY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZCk7CisgICAgICAgICAgICBOb2RlKiBv
cDEgPSBnZXQoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7CisgICAgICAgICAgICBO
b2RlKiBvcDIgPSBnZXQoY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZCk7CiAgICAgICAg
ICAgICBzZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwgYWRkVG9HcmFwaChDb21w
YXJlTGVzc0VxLCBvcDEsIG9wMikpOwogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfbGVzc2Vx
KTsKICAgICAgICAgfQogCiAgICAgICAgIGNhc2Ugb3BfZ3JlYXRlcjogewotICAgICAgICAgICAg
Tm9kZUluZGV4IG9wMSA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKLSAg
ICAgICAgICAgIE5vZGVJbmRleCBvcDIgPSBnZXQoY3VycmVudEluc3RydWN0aW9uWzNdLnUub3Bl
cmFuZCk7CisgICAgICAgICAgICBOb2RlKiBvcDEgPSBnZXQoY3VycmVudEluc3RydWN0aW9uWzJd
LnUub3BlcmFuZCk7CisgICAgICAgICAgICBOb2RlKiBvcDIgPSBnZXQoY3VycmVudEluc3RydWN0
aW9uWzNdLnUub3BlcmFuZCk7CiAgICAgICAgICAgICBzZXQoY3VycmVudEluc3RydWN0aW9uWzFd
LnUub3BlcmFuZCwgYWRkVG9HcmFwaChDb21wYXJlR3JlYXRlciwgb3AxLCBvcDIpKTsKICAgICAg
ICAgICAgIE5FWFRfT1BDT0RFKG9wX2dyZWF0ZXIpOwogICAgICAgICB9CiAKICAgICAgICAgY2Fz
ZSBvcF9ncmVhdGVyZXE6IHsKLSAgICAgICAgICAgIE5vZGVJbmRleCBvcDEgPSBnZXQoY3VycmVu
dEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7Ci0gICAgICAgICAgICBOb2RlSW5kZXggb3AyID0g
Z2V0KGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpOworICAgICAgICAgICAgTm9kZSog
b3AxID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOworICAgICAgICAgICAg
Tm9kZSogb3AyID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpOwogICAgICAg
ICAgICAgc2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsIGFkZFRvR3JhcGgoQ29t
cGFyZUdyZWF0ZXJFcSwgb3AxLCBvcDIpKTsKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2dy
ZWF0ZXJlcSk7CiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIG9wX2VxOiB7Ci0gICAgICAgICAg
ICBOb2RlSW5kZXggb3AxID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOwot
ICAgICAgICAgICAgTm9kZUluZGV4IG9wMiA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5v
cGVyYW5kKTsKKyAgICAgICAgICAgIE5vZGUqIG9wMSA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25b
Ml0udS5vcGVyYW5kKTsKKyAgICAgICAgICAgIE5vZGUqIG9wMiA9IGdldChjdXJyZW50SW5zdHJ1
Y3Rpb25bM10udS5vcGVyYW5kKTsKICAgICAgICAgICAgIHNldChjdXJyZW50SW5zdHJ1Y3Rpb25b
MV0udS5vcGVyYW5kLCBhZGRUb0dyYXBoKENvbXBhcmVFcSwgb3AxLCBvcDIpKTsKICAgICAgICAg
ICAgIE5FWFRfT1BDT0RFKG9wX2VxKTsKICAgICAgICAgfQogCiAgICAgICAgIGNhc2Ugb3BfZXFf
bnVsbDogewotICAgICAgICAgICAgTm9kZUluZGV4IHZhbHVlID0gZ2V0KGN1cnJlbnRJbnN0cnVj
dGlvblsyXS51Lm9wZXJhbmQpOworICAgICAgICAgICAgTm9kZSogdmFsdWUgPSBnZXQoY3VycmVu
dEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7CiAgICAgICAgICAgICBzZXQoY3VycmVudEluc3Ry
dWN0aW9uWzFdLnUub3BlcmFuZCwgYWRkVG9HcmFwaChDb21wYXJlRXEsIHZhbHVlLCBjb25zdGFu
dE51bGwoKSkpOwogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfZXFfbnVsbCk7CiAgICAgICAg
IH0KIAogICAgICAgICBjYXNlIG9wX3N0cmljdGVxOiB7Ci0gICAgICAgICAgICBOb2RlSW5kZXgg
b3AxID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOwotICAgICAgICAgICAg
Tm9kZUluZGV4IG9wMiA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKTsKKyAg
ICAgICAgICAgIE5vZGUqIG9wMSA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5k
KTsKKyAgICAgICAgICAgIE5vZGUqIG9wMiA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5v
cGVyYW5kKTsKICAgICAgICAgICAgIHNldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5k
LCBhZGRUb0dyYXBoKENvbXBhcmVTdHJpY3RFcSwgb3AxLCBvcDIpKTsKICAgICAgICAgICAgIE5F
WFRfT1BDT0RFKG9wX3N0cmljdGVxKTsKICAgICAgICAgfQogCiAgICAgICAgIGNhc2Ugb3BfbmVx
OiB7Ci0gICAgICAgICAgICBOb2RlSW5kZXggb3AxID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsy
XS51Lm9wZXJhbmQpOwotICAgICAgICAgICAgTm9kZUluZGV4IG9wMiA9IGdldChjdXJyZW50SW5z
dHJ1Y3Rpb25bM10udS5vcGVyYW5kKTsKKyAgICAgICAgICAgIE5vZGUqIG9wMSA9IGdldChjdXJy
ZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKKyAgICAgICAgICAgIE5vZGUqIG9wMiA9IGdl
dChjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKTsKICAgICAgICAgICAgIHNldChjdXJy
ZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCBhZGRUb0dyYXBoKExvZ2ljYWxOb3QsIGFkZFRv
R3JhcGgoQ29tcGFyZUVxLCBvcDEsIG9wMikpKTsKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9w
X25lcSk7CiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIG9wX25lcV9udWxsOiB7Ci0gICAgICAg
ICAgICBOb2RlSW5kZXggdmFsdWUgPSBnZXQoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFu
ZCk7CisgICAgICAgICAgICBOb2RlKiB2YWx1ZSA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMl0u
dS5vcGVyYW5kKTsKICAgICAgICAgICAgIHNldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVy
YW5kLCBhZGRUb0dyYXBoKExvZ2ljYWxOb3QsIGFkZFRvR3JhcGgoQ29tcGFyZUVxLCB2YWx1ZSwg
Y29uc3RhbnROdWxsKCkpKSk7CiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9uZXFfbnVsbCk7
CiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIG9wX25zdHJpY3RlcTogewotICAgICAgICAgICAg
Tm9kZUluZGV4IG9wMSA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKLSAg
ICAgICAgICAgIE5vZGVJbmRleCBvcDIgPSBnZXQoY3VycmVudEluc3RydWN0aW9uWzNdLnUub3Bl
cmFuZCk7CisgICAgICAgICAgICBOb2RlKiBvcDEgPSBnZXQoY3VycmVudEluc3RydWN0aW9uWzJd
LnUub3BlcmFuZCk7CisgICAgICAgICAgICBOb2RlKiBvcDIgPSBnZXQoY3VycmVudEluc3RydWN0
aW9uWzNdLnUub3BlcmFuZCk7CiAgICAgICAgICAgICBzZXQoY3VycmVudEluc3RydWN0aW9uWzFd
LnUub3BlcmFuZCwgYWRkVG9HcmFwaChMb2dpY2FsTm90LCBhZGRUb0dyYXBoKENvbXBhcmVTdHJp
Y3RFcSwgb3AxLCBvcDIpKSk7CiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9uc3RyaWN0ZXEp
OwogICAgICAgICB9CkBAIC0yNTIyLDIyICsyNDg0LDIyIEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6
OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgY2FzZSBvcF9nZXRfYnlfdmFsOiB7CiAgICAg
ICAgICAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uID0gZ2V0UHJlZGljdGlvbigpOwogICAg
ICAgICAgICAgCi0gICAgICAgICAgICBOb2RlSW5kZXggYmFzZSA9IGdldChjdXJyZW50SW5zdHJ1
Y3Rpb25bMl0udS5vcGVyYW5kKTsKKyAgICAgICAgICAgIE5vZGUqIGJhc2UgPSBnZXQoY3VycmVu
dEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7CiAgICAgICAgICAgICBBcnJheU1vZGUgYXJyYXlN
b2RlID0gZ2V0QXJyYXlNb2RlQW5kRW1pdENoZWNrcyhjdXJyZW50SW5zdHJ1Y3Rpb25bNF0udS5h
cnJheVByb2ZpbGUsIEFycmF5OjpSZWFkLCBiYXNlKTsKLSAgICAgICAgICAgIE5vZGVJbmRleCBw
cm9wZXJ0eSA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKTsKLSAgICAgICAg
ICAgIE5vZGVJbmRleCBnZXRCeVZhbCA9IGFkZFRvR3JhcGgoR2V0QnlWYWwsIE9wSW5mbyhhcnJh
eU1vZGUuYXNXb3JkKCkpLCBPcEluZm8ocHJlZGljdGlvbiksIGJhc2UsIHByb3BlcnR5KTsKKyAg
ICAgICAgICAgIE5vZGUqIHByb3BlcnR5ID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9w
ZXJhbmQpOworICAgICAgICAgICAgTm9kZSogZ2V0QnlWYWwgPSBhZGRUb0dyYXBoKEdldEJ5VmFs
LCBPcEluZm8oYXJyYXlNb2RlLmFzV29yZCgpKSwgT3BJbmZvKHByZWRpY3Rpb24pLCBiYXNlLCBw
cm9wZXJ0eSk7CiAgICAgICAgICAgICBzZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFu
ZCwgZ2V0QnlWYWwpOwogCiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9nZXRfYnlfdmFsKTsK
ICAgICAgICAgfQogCiAgICAgICAgIGNhc2Ugb3BfcHV0X2J5X3ZhbDogewotICAgICAgICAgICAg
Tm9kZUluZGV4IGJhc2UgPSBnZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCk7Cisg
ICAgICAgICAgICBOb2RlKiBiYXNlID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJh
bmQpOwogCiAgICAgICAgICAgICBBcnJheU1vZGUgYXJyYXlNb2RlID0gZ2V0QXJyYXlNb2RlQW5k
RW1pdENoZWNrcyhjdXJyZW50SW5zdHJ1Y3Rpb25bNF0udS5hcnJheVByb2ZpbGUsIEFycmF5OjpX
cml0ZSwgYmFzZSk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIE5vZGVJbmRleCBwcm9wZXJ0
eSA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKLSAgICAgICAgICAgIE5v
ZGVJbmRleCB2YWx1ZSA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKTsKKyAg
ICAgICAgICAgIE5vZGUqIHByb3BlcnR5ID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9w
ZXJhbmQpOworICAgICAgICAgICAgTm9kZSogdmFsdWUgPSBnZXQoY3VycmVudEluc3RydWN0aW9u
WzNdLnUub3BlcmFuZCk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGFkZFZhckFyZ0NoaWxk
KGJhc2UpOwogICAgICAgICAgICAgYWRkVmFyQXJnQ2hpbGQocHJvcGVydHkpOwpAQCAtMjU1Myw3
ICsyNTE1LDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAg
ICAgICBjYXNlIG9wX2dldF9hcnJheV9sZW5ndGg6IHsKICAgICAgICAgICAgIFNwZWN1bGF0ZWRU
eXBlIHByZWRpY3Rpb24gPSBnZXRQcmVkaWN0aW9uKCk7CiAgICAgICAgICAgICAKLSAgICAgICAg
ICAgIE5vZGVJbmRleCBiYXNlID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQp
OworICAgICAgICAgICAgTm9kZSogYmFzZSA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5v
cGVyYW5kKTsKICAgICAgICAgICAgIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIgPSBtX2lubGlu
ZVN0YWNrVG9wLT5tX2lkZW50aWZpZXJSZW1hcFtjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVy
YW5kXTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgSWRlbnRpZmllciBpZGVudGlmaWVyID0g
bV9jb2RlQmxvY2stPmlkZW50aWZpZXIoaWRlbnRpZmllck51bWJlcik7CkBAIC0yNTcxLDggKzI1
MzMsOCBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAg
IGNhc2Ugb3BfcHV0X2J5X2lkX3RyYW5zaXRpb25fbm9ybWFsOgogICAgICAgICBjYXNlIG9wX3B1
dF9ieV9pZF90cmFuc2l0aW9uX2RpcmVjdF9vdXRfb2ZfbGluZToKICAgICAgICAgY2FzZSBvcF9w
dXRfYnlfaWRfdHJhbnNpdGlvbl9ub3JtYWxfb3V0X29mX2xpbmU6IHsKLSAgICAgICAgICAgIE5v
ZGVJbmRleCB2YWx1ZSA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKTsKLSAg
ICAgICAgICAgIE5vZGVJbmRleCBiYXNlID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9w
ZXJhbmQpOworICAgICAgICAgICAgTm9kZSogdmFsdWUgPSBnZXQoY3VycmVudEluc3RydWN0aW9u
WzNdLnUub3BlcmFuZCk7CisgICAgICAgICAgICBOb2RlKiBiYXNlID0gZ2V0KGN1cnJlbnRJbnN0
cnVjdGlvblsxXS51Lm9wZXJhbmQpOwogICAgICAgICAgICAgdW5zaWduZWQgaWRlbnRpZmllck51
bWJlciA9IG1faW5saW5lU3RhY2tUb3AtPm1faWRlbnRpZmllclJlbWFwW2N1cnJlbnRJbnN0cnVj
dGlvblsyXS51Lm9wZXJhbmRdOwogICAgICAgICAgICAgYm9vbCBkaXJlY3QgPSBjdXJyZW50SW5z
dHJ1Y3Rpb25bOF0udS5vcGVyYW5kOwogCkBAIC0yNTg3LDcgKzI1NDksNyBAQCBib29sIEJ5dGVD
b2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICAKICAgICAgICAgICAg
IGlmICghaGFzRXhpdFNpdGUgJiYgcHV0QnlJZFN0YXR1cy5pc1NpbXBsZVJlcGxhY2UoKSkgewog
ICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoQ2hlY2tTdHJ1Y3R1cmUsIE9wSW5mbyhtX2dyYXBo
LmFkZFN0cnVjdHVyZVNldChwdXRCeUlkU3RhdHVzLm9sZFN0cnVjdHVyZSgpKSksIGJhc2UpOwot
ICAgICAgICAgICAgICAgIE5vZGVJbmRleCBwcm9wZXJ0eVN0b3JhZ2U7CisgICAgICAgICAgICAg
ICAgTm9kZSogcHJvcGVydHlTdG9yYWdlOwogICAgICAgICAgICAgICAgIGlmIChpc0lubGluZU9m
ZnNldChwdXRCeUlkU3RhdHVzLm9mZnNldCgpKSkKICAgICAgICAgICAgICAgICAgICAgcHJvcGVy
dHlTdG9yYWdlID0gYmFzZTsKICAgICAgICAgICAgICAgICBlbHNlCkBAIC0yNjIyLDcgKzI1ODQs
NyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgIEFTU0VSVChwdXRCeUlkU3RhdHVzLm9sZFN0cnVjdHVy
ZSgpLT50cmFuc2l0aW9uV2F0Y2hwb2ludFNldEhhc0JlZW5JbnZhbGlkYXRlZCgpKTsKICAgICAg
ICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBOb2RlSW5kZXggcHJvcGVydHlTdG9yYWdlOwor
ICAgICAgICAgICAgICAgIE5vZGUqIHByb3BlcnR5U3RvcmFnZTsKICAgICAgICAgICAgICAgICBT
dHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSogdHJhbnNpdGlvbkRhdGEgPQogICAgICAgICAgICAgICAg
ICAgICBtX2dyYXBoLmFkZFN0cnVjdHVyZVRyYW5zaXRpb25EYXRhKAogICAgICAgICAgICAgICAg
ICAgICAgICAgU3RydWN0dXJlVHJhbnNpdGlvbkRhdGEoCkBAIC0yNjc5LDcgKzI2NDEsNyBAQCBi
b29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgIH0KIAogICAg
ICAgICBjYXNlIG9wX2luaXRfZ2xvYmFsX2NvbnN0OiB7Ci0gICAgICAgICAgICBOb2RlSW5kZXgg
dmFsdWUgPSBnZXQoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7CisgICAgICAgICAg
ICBOb2RlKiB2YWx1ZSA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKICAg
ICAgICAgICAgIGFkZFRvR3JhcGgoCiAgICAgICAgICAgICAgICAgUHV0R2xvYmFsVmFyLAogICAg
ICAgICAgICAgICAgIE9wSW5mbyhtX2lubGluZVN0YWNrVG9wLT5tX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCktPmFzc2VydFJlZ2lzdGVySXNJblRoaXNPYmplY3QoY3VycmVudEluc3RydWN0aW9u
WzFdLnUucmVnaXN0ZXJQb2ludGVyKSksCkBAIC0yNjg4LDcgKzI2NTAsNyBAQCBib29sIEJ5dGVD
b2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgIH0KIAogICAgICAgICBjYXNl
IG9wX2luaXRfZ2xvYmFsX2NvbnN0X2NoZWNrOiB7Ci0gICAgICAgICAgICBOb2RlSW5kZXggdmFs
dWUgPSBnZXQoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7CisgICAgICAgICAgICBO
b2RlKiB2YWx1ZSA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKICAgICAg
ICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gbV9pbmxpbmVTdGFja1RvcC0+bV9jb2RlQmxv
Y2s7CiAgICAgICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKTsKICAgICAgICAgICAgIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIg
PSBtX2lubGluZVN0YWNrVG9wLT5tX2lkZW50aWZpZXJSZW1hcFtjdXJyZW50SW5zdHJ1Y3Rpb25b
NF0udS5vcGVyYW5kXTsKQEAgLTI3MjYsMTUyICsyNjg4LDE1MiBAQCBib29sIEJ5dGVDb2RlUGFy
c2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAKICAgICAgICAgY2FzZSBvcF9qdHJ1ZTogewogICAg
ICAgICAgICAgdW5zaWduZWQgcmVsYXRpdmVPZmZzZXQgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0u
dS5vcGVyYW5kOwotICAgICAgICAgICAgTm9kZUluZGV4IGNvbmRpdGlvbiA9IGdldChjdXJyZW50
SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKTsKKyAgICAgICAgICAgIE5vZGUqIGNvbmRpdGlvbiA9
IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKTsKICAgICAgICAgICAgIGFkZFRv
R3JhcGgoQnJhbmNoLCBPcEluZm8obV9jdXJyZW50SW5kZXggKyByZWxhdGl2ZU9mZnNldCksIE9w
SW5mbyhtX2N1cnJlbnRJbmRleCArIE9QQ09ERV9MRU5HVEgob3BfanRydWUpKSwgY29uZGl0aW9u
KTsKICAgICAgICAgICAgIExBU1RfT1BDT0RFKG9wX2p0cnVlKTsKICAgICAgICAgfQogCiAgICAg
ICAgIGNhc2Ugb3BfamZhbHNlOiB7CiAgICAgICAgICAgICB1bnNpZ25lZCByZWxhdGl2ZU9mZnNl
dCA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBOb2RlSW5k
ZXggY29uZGl0aW9uID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpOworICAg
ICAgICAgICAgTm9kZSogY29uZGl0aW9uID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9w
ZXJhbmQpOwogICAgICAgICAgICAgYWRkVG9HcmFwaChCcmFuY2gsIE9wSW5mbyhtX2N1cnJlbnRJ
bmRleCArIE9QQ09ERV9MRU5HVEgob3BfamZhbHNlKSksIE9wSW5mbyhtX2N1cnJlbnRJbmRleCAr
IHJlbGF0aXZlT2Zmc2V0KSwgY29uZGl0aW9uKTsKICAgICAgICAgICAgIExBU1RfT1BDT0RFKG9w
X2pmYWxzZSk7CiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIG9wX2xvb3BfaWZfdHJ1ZTogewog
ICAgICAgICAgICAgdW5zaWduZWQgcmVsYXRpdmVPZmZzZXQgPSBjdXJyZW50SW5zdHJ1Y3Rpb25b
Ml0udS5vcGVyYW5kOwotICAgICAgICAgICAgTm9kZUluZGV4IGNvbmRpdGlvbiA9IGdldChjdXJy
ZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKTsKKyAgICAgICAgICAgIE5vZGUqIGNvbmRpdGlv
biA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKTsKICAgICAgICAgICAgIGFk
ZFRvR3JhcGgoQnJhbmNoLCBPcEluZm8obV9jdXJyZW50SW5kZXggKyByZWxhdGl2ZU9mZnNldCks
IE9wSW5mbyhtX2N1cnJlbnRJbmRleCArIE9QQ09ERV9MRU5HVEgob3BfbG9vcF9pZl90cnVlKSks
IGNvbmRpdGlvbik7CiAgICAgICAgICAgICBMQVNUX09QQ09ERShvcF9sb29wX2lmX3RydWUpOwog
ICAgICAgICB9CiAKICAgICAgICAgY2FzZSBvcF9sb29wX2lmX2ZhbHNlOiB7CiAgICAgICAgICAg
ICB1bnNpZ25lZCByZWxhdGl2ZU9mZnNldCA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJh
bmQ7Ci0gICAgICAgICAgICBOb2RlSW5kZXggY29uZGl0aW9uID0gZ2V0KGN1cnJlbnRJbnN0cnVj
dGlvblsxXS51Lm9wZXJhbmQpOworICAgICAgICAgICAgTm9kZSogY29uZGl0aW9uID0gZ2V0KGN1
cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpOwogICAgICAgICAgICAgYWRkVG9HcmFwaChC
cmFuY2gsIE9wSW5mbyhtX2N1cnJlbnRJbmRleCArIE9QQ09ERV9MRU5HVEgob3BfbG9vcF9pZl9m
YWxzZSkpLCBPcEluZm8obV9jdXJyZW50SW5kZXggKyByZWxhdGl2ZU9mZnNldCksIGNvbmRpdGlv
bik7CiAgICAgICAgICAgICBMQVNUX09QQ09ERShvcF9sb29wX2lmX2ZhbHNlKTsKICAgICAgICAg
fQogCiAgICAgICAgIGNhc2Ugb3BfamVxX251bGw6IHsKICAgICAgICAgICAgIHVuc2lnbmVkIHJl
bGF0aXZlT2Zmc2V0ID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKLSAgICAgICAg
ICAgIE5vZGVJbmRleCB2YWx1ZSA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5k
KTsKLSAgICAgICAgICAgIE5vZGVJbmRleCBjb25kaXRpb24gPSBhZGRUb0dyYXBoKENvbXBhcmVF
cSwgdmFsdWUsIGNvbnN0YW50TnVsbCgpKTsKKyAgICAgICAgICAgIE5vZGUqIHZhbHVlID0gZ2V0
KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpOworICAgICAgICAgICAgTm9kZSogY29u
ZGl0aW9uID0gYWRkVG9HcmFwaChDb21wYXJlRXEsIHZhbHVlLCBjb25zdGFudE51bGwoKSk7CiAg
ICAgICAgICAgICBhZGRUb0dyYXBoKEJyYW5jaCwgT3BJbmZvKG1fY3VycmVudEluZGV4ICsgcmVs
YXRpdmVPZmZzZXQpLCBPcEluZm8obV9jdXJyZW50SW5kZXggKyBPUENPREVfTEVOR1RIKG9wX2pl
cV9udWxsKSksIGNvbmRpdGlvbik7CiAgICAgICAgICAgICBMQVNUX09QQ09ERShvcF9qZXFfbnVs
bCk7CiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIG9wX2puZXFfbnVsbDogewogICAgICAgICAg
ICAgdW5zaWduZWQgcmVsYXRpdmVPZmZzZXQgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVy
YW5kOwotICAgICAgICAgICAgTm9kZUluZGV4IHZhbHVlID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlv
blsxXS51Lm9wZXJhbmQpOwotICAgICAgICAgICAgTm9kZUluZGV4IGNvbmRpdGlvbiA9IGFkZFRv
R3JhcGgoQ29tcGFyZUVxLCB2YWx1ZSwgY29uc3RhbnROdWxsKCkpOworICAgICAgICAgICAgTm9k
ZSogdmFsdWUgPSBnZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCk7CisgICAgICAg
ICAgICBOb2RlKiBjb25kaXRpb24gPSBhZGRUb0dyYXBoKENvbXBhcmVFcSwgdmFsdWUsIGNvbnN0
YW50TnVsbCgpKTsKICAgICAgICAgICAgIGFkZFRvR3JhcGgoQnJhbmNoLCBPcEluZm8obV9jdXJy
ZW50SW5kZXggKyBPUENPREVfTEVOR1RIKG9wX2puZXFfbnVsbCkpLCBPcEluZm8obV9jdXJyZW50
SW5kZXggKyByZWxhdGl2ZU9mZnNldCksIGNvbmRpdGlvbik7CiAgICAgICAgICAgICBMQVNUX09Q
Q09ERShvcF9qbmVxX251bGwpOwogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBvcF9qbGVzczog
ewogICAgICAgICAgICAgdW5zaWduZWQgcmVsYXRpdmVPZmZzZXQgPSBjdXJyZW50SW5zdHJ1Y3Rp
b25bM10udS5vcGVyYW5kOwotICAgICAgICAgICAgTm9kZUluZGV4IG9wMSA9IGdldChjdXJyZW50
SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKTsKLSAgICAgICAgICAgIE5vZGVJbmRleCBvcDIgPSBn
ZXQoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7Ci0gICAgICAgICAgICBOb2RlSW5k
ZXggY29uZGl0aW9uID0gYWRkVG9HcmFwaChDb21wYXJlTGVzcywgb3AxLCBvcDIpOworICAgICAg
ICAgICAgTm9kZSogb3AxID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpOwor
ICAgICAgICAgICAgTm9kZSogb3AyID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJh
bmQpOworICAgICAgICAgICAgTm9kZSogY29uZGl0aW9uID0gYWRkVG9HcmFwaChDb21wYXJlTGVz
cywgb3AxLCBvcDIpOwogICAgICAgICAgICAgYWRkVG9HcmFwaChCcmFuY2gsIE9wSW5mbyhtX2N1
cnJlbnRJbmRleCArIHJlbGF0aXZlT2Zmc2V0KSwgT3BJbmZvKG1fY3VycmVudEluZGV4ICsgT1BD
T0RFX0xFTkdUSChvcF9qbGVzcykpLCBjb25kaXRpb24pOwogICAgICAgICAgICAgTEFTVF9PUENP
REUob3Bfamxlc3MpOwogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBvcF9qbGVzc2VxOiB7CiAg
ICAgICAgICAgICB1bnNpZ25lZCByZWxhdGl2ZU9mZnNldCA9IGN1cnJlbnRJbnN0cnVjdGlvblsz
XS51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBOb2RlSW5kZXggb3AxID0gZ2V0KGN1cnJlbnRJbnN0
cnVjdGlvblsxXS51Lm9wZXJhbmQpOwotICAgICAgICAgICAgTm9kZUluZGV4IG9wMiA9IGdldChj
dXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKLSAgICAgICAgICAgIE5vZGVJbmRleCBj
b25kaXRpb24gPSBhZGRUb0dyYXBoKENvbXBhcmVMZXNzRXEsIG9wMSwgb3AyKTsKKyAgICAgICAg
ICAgIE5vZGUqIG9wMSA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKTsKKyAg
ICAgICAgICAgIE5vZGUqIG9wMiA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5k
KTsKKyAgICAgICAgICAgIE5vZGUqIGNvbmRpdGlvbiA9IGFkZFRvR3JhcGgoQ29tcGFyZUxlc3NF
cSwgb3AxLCBvcDIpOwogICAgICAgICAgICAgYWRkVG9HcmFwaChCcmFuY2gsIE9wSW5mbyhtX2N1
cnJlbnRJbmRleCArIHJlbGF0aXZlT2Zmc2V0KSwgT3BJbmZvKG1fY3VycmVudEluZGV4ICsgT1BD
T0RFX0xFTkdUSChvcF9qbGVzc2VxKSksIGNvbmRpdGlvbik7CiAgICAgICAgICAgICBMQVNUX09Q
Q09ERShvcF9qbGVzc2VxKTsKICAgICAgICAgfQogCiAgICAgICAgIGNhc2Ugb3BfamdyZWF0ZXI6
IHsKICAgICAgICAgICAgIHVuc2lnbmVkIHJlbGF0aXZlT2Zmc2V0ID0gY3VycmVudEluc3RydWN0
aW9uWzNdLnUub3BlcmFuZDsKLSAgICAgICAgICAgIE5vZGVJbmRleCBvcDEgPSBnZXQoY3VycmVu
dEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCk7Ci0gICAgICAgICAgICBOb2RlSW5kZXggb3AyID0g
Z2V0KGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOwotICAgICAgICAgICAgTm9kZUlu
ZGV4IGNvbmRpdGlvbiA9IGFkZFRvR3JhcGgoQ29tcGFyZUdyZWF0ZXIsIG9wMSwgb3AyKTsKKyAg
ICAgICAgICAgIE5vZGUqIG9wMSA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5k
KTsKKyAgICAgICAgICAgIE5vZGUqIG9wMiA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5v
cGVyYW5kKTsKKyAgICAgICAgICAgIE5vZGUqIGNvbmRpdGlvbiA9IGFkZFRvR3JhcGgoQ29tcGFy
ZUdyZWF0ZXIsIG9wMSwgb3AyKTsKICAgICAgICAgICAgIGFkZFRvR3JhcGgoQnJhbmNoLCBPcElu
Zm8obV9jdXJyZW50SW5kZXggKyByZWxhdGl2ZU9mZnNldCksIE9wSW5mbyhtX2N1cnJlbnRJbmRl
eCArIE9QQ09ERV9MRU5HVEgob3BfamdyZWF0ZXIpKSwgY29uZGl0aW9uKTsKICAgICAgICAgICAg
IExBU1RfT1BDT0RFKG9wX2pncmVhdGVyKTsKICAgICAgICAgfQogCiAgICAgICAgIGNhc2Ugb3Bf
amdyZWF0ZXJlcTogewogICAgICAgICAgICAgdW5zaWduZWQgcmVsYXRpdmVPZmZzZXQgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOwotICAgICAgICAgICAgTm9kZUluZGV4IG9wMSA9
IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKTsKLSAgICAgICAgICAgIE5vZGVJ
bmRleCBvcDIgPSBnZXQoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7Ci0gICAgICAg
ICAgICBOb2RlSW5kZXggY29uZGl0aW9uID0gYWRkVG9HcmFwaChDb21wYXJlR3JlYXRlckVxLCBv
cDEsIG9wMik7CisgICAgICAgICAgICBOb2RlKiBvcDEgPSBnZXQoY3VycmVudEluc3RydWN0aW9u
WzFdLnUub3BlcmFuZCk7CisgICAgICAgICAgICBOb2RlKiBvcDIgPSBnZXQoY3VycmVudEluc3Ry
dWN0aW9uWzJdLnUub3BlcmFuZCk7CisgICAgICAgICAgICBOb2RlKiBjb25kaXRpb24gPSBhZGRU
b0dyYXBoKENvbXBhcmVHcmVhdGVyRXEsIG9wMSwgb3AyKTsKICAgICAgICAgICAgIGFkZFRvR3Jh
cGgoQnJhbmNoLCBPcEluZm8obV9jdXJyZW50SW5kZXggKyByZWxhdGl2ZU9mZnNldCksIE9wSW5m
byhtX2N1cnJlbnRJbmRleCArIE9QQ09ERV9MRU5HVEgob3BfamdyZWF0ZXJlcSkpLCBjb25kaXRp
b24pOwogICAgICAgICAgICAgTEFTVF9PUENPREUob3BfamdyZWF0ZXJlcSk7CiAgICAgICAgIH0K
IAogICAgICAgICBjYXNlIG9wX2pubGVzczogewogICAgICAgICAgICAgdW5zaWduZWQgcmVsYXRp
dmVPZmZzZXQgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOwotICAgICAgICAgICAg
Tm9kZUluZGV4IG9wMSA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKTsKLSAg
ICAgICAgICAgIE5vZGVJbmRleCBvcDIgPSBnZXQoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3Bl
cmFuZCk7Ci0gICAgICAgICAgICBOb2RlSW5kZXggY29uZGl0aW9uID0gYWRkVG9HcmFwaChDb21w
YXJlTGVzcywgb3AxLCBvcDIpOworICAgICAgICAgICAgTm9kZSogb3AxID0gZ2V0KGN1cnJlbnRJ
bnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpOworICAgICAgICAgICAgTm9kZSogb3AyID0gZ2V0KGN1
cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOworICAgICAgICAgICAgTm9kZSogY29uZGl0
aW9uID0gYWRkVG9HcmFwaChDb21wYXJlTGVzcywgb3AxLCBvcDIpOwogICAgICAgICAgICAgYWRk
VG9HcmFwaChCcmFuY2gsIE9wSW5mbyhtX2N1cnJlbnRJbmRleCArIE9QQ09ERV9MRU5HVEgob3Bf
am5sZXNzKSksIE9wSW5mbyhtX2N1cnJlbnRJbmRleCArIHJlbGF0aXZlT2Zmc2V0KSwgY29uZGl0
aW9uKTsKICAgICAgICAgICAgIExBU1RfT1BDT0RFKG9wX2pubGVzcyk7CiAgICAgICAgIH0KIAog
ICAgICAgICBjYXNlIG9wX2pubGVzc2VxOiB7CiAgICAgICAgICAgICB1bnNpZ25lZCByZWxhdGl2
ZU9mZnNldCA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBO
b2RlSW5kZXggb3AxID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpOwotICAg
ICAgICAgICAgTm9kZUluZGV4IG9wMiA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVy
YW5kKTsKLSAgICAgICAgICAgIE5vZGVJbmRleCBjb25kaXRpb24gPSBhZGRUb0dyYXBoKENvbXBh
cmVMZXNzRXEsIG9wMSwgb3AyKTsKKyAgICAgICAgICAgIE5vZGUqIG9wMSA9IGdldChjdXJyZW50
SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKTsKKyAgICAgICAgICAgIE5vZGUqIG9wMiA9IGdldChj
dXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKKyAgICAgICAgICAgIE5vZGUqIGNvbmRp
dGlvbiA9IGFkZFRvR3JhcGgoQ29tcGFyZUxlc3NFcSwgb3AxLCBvcDIpOwogICAgICAgICAgICAg
YWRkVG9HcmFwaChCcmFuY2gsIE9wSW5mbyhtX2N1cnJlbnRJbmRleCArIE9QQ09ERV9MRU5HVEgo
b3Bfam5sZXNzZXEpKSwgT3BJbmZvKG1fY3VycmVudEluZGV4ICsgcmVsYXRpdmVPZmZzZXQpLCBj
b25kaXRpb24pOwogICAgICAgICAgICAgTEFTVF9PUENPREUob3Bfam5sZXNzZXEpOwogICAgICAg
ICB9CiAKICAgICAgICAgY2FzZSBvcF9qbmdyZWF0ZXI6IHsKICAgICAgICAgICAgIHVuc2lnbmVk
IHJlbGF0aXZlT2Zmc2V0ID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKLSAgICAg
ICAgICAgIE5vZGVJbmRleCBvcDEgPSBnZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFu
ZCk7Ci0gICAgICAgICAgICBOb2RlSW5kZXggb3AyID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsy
XS51Lm9wZXJhbmQpOwotICAgICAgICAgICAgTm9kZUluZGV4IGNvbmRpdGlvbiA9IGFkZFRvR3Jh
cGgoQ29tcGFyZUdyZWF0ZXIsIG9wMSwgb3AyKTsKKyAgICAgICAgICAgIE5vZGUqIG9wMSA9IGdl
dChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKTsKKyAgICAgICAgICAgIE5vZGUqIG9w
MiA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKKyAgICAgICAgICAgIE5v
ZGUqIGNvbmRpdGlvbiA9IGFkZFRvR3JhcGgoQ29tcGFyZUdyZWF0ZXIsIG9wMSwgb3AyKTsKICAg
ICAgICAgICAgIGFkZFRvR3JhcGgoQnJhbmNoLCBPcEluZm8obV9jdXJyZW50SW5kZXggKyBPUENP
REVfTEVOR1RIKG9wX2puZ3JlYXRlcikpLCBPcEluZm8obV9jdXJyZW50SW5kZXggKyByZWxhdGl2
ZU9mZnNldCksIGNvbmRpdGlvbik7CiAgICAgICAgICAgICBMQVNUX09QQ09ERShvcF9qbmdyZWF0
ZXIpOwogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBvcF9qbmdyZWF0ZXJlcTogewogICAgICAg
ICAgICAgdW5zaWduZWQgcmVsYXRpdmVPZmZzZXQgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5v
cGVyYW5kOwotICAgICAgICAgICAgTm9kZUluZGV4IG9wMSA9IGdldChjdXJyZW50SW5zdHJ1Y3Rp
b25bMV0udS5vcGVyYW5kKTsKLSAgICAgICAgICAgIE5vZGVJbmRleCBvcDIgPSBnZXQoY3VycmVu
dEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7Ci0gICAgICAgICAgICBOb2RlSW5kZXggY29uZGl0
aW9uID0gYWRkVG9HcmFwaChDb21wYXJlR3JlYXRlckVxLCBvcDEsIG9wMik7CisgICAgICAgICAg
ICBOb2RlKiBvcDEgPSBnZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCk7CisgICAg
ICAgICAgICBOb2RlKiBvcDIgPSBnZXQoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7
CisgICAgICAgICAgICBOb2RlKiBjb25kaXRpb24gPSBhZGRUb0dyYXBoKENvbXBhcmVHcmVhdGVy
RXEsIG9wMSwgb3AyKTsKICAgICAgICAgICAgIGFkZFRvR3JhcGgoQnJhbmNoLCBPcEluZm8obV9j
dXJyZW50SW5kZXggKyBPUENPREVfTEVOR1RIKG9wX2puZ3JlYXRlcmVxKSksIE9wSW5mbyhtX2N1
cnJlbnRJbmRleCArIHJlbGF0aXZlT2Zmc2V0KSwgY29uZGl0aW9uKTsKICAgICAgICAgICAgIExB
U1RfT1BDT0RFKG9wX2puZ3JlYXRlcmVxKTsKICAgICAgICAgfQogCiAgICAgICAgIGNhc2Ugb3Bf
bG9vcF9pZl9sZXNzOiB7CiAgICAgICAgICAgICB1bnNpZ25lZCByZWxhdGl2ZU9mZnNldCA9IGN1
cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBOb2RlSW5kZXggb3Ax
ID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpOwotICAgICAgICAgICAgTm9k
ZUluZGV4IG9wMiA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKLSAgICAg
ICAgICAgIE5vZGVJbmRleCBjb25kaXRpb24gPSBhZGRUb0dyYXBoKENvbXBhcmVMZXNzLCBvcDEs
IG9wMik7CisgICAgICAgICAgICBOb2RlKiBvcDEgPSBnZXQoY3VycmVudEluc3RydWN0aW9uWzFd
LnUub3BlcmFuZCk7CisgICAgICAgICAgICBOb2RlKiBvcDIgPSBnZXQoY3VycmVudEluc3RydWN0
aW9uWzJdLnUub3BlcmFuZCk7CisgICAgICAgICAgICBOb2RlKiBjb25kaXRpb24gPSBhZGRUb0dy
YXBoKENvbXBhcmVMZXNzLCBvcDEsIG9wMik7CiAgICAgICAgICAgICBhZGRUb0dyYXBoKEJyYW5j
aCwgT3BJbmZvKG1fY3VycmVudEluZGV4ICsgcmVsYXRpdmVPZmZzZXQpLCBPcEluZm8obV9jdXJy
ZW50SW5kZXggKyBPUENPREVfTEVOR1RIKG9wX2xvb3BfaWZfbGVzcykpLCBjb25kaXRpb24pOwog
ICAgICAgICAgICAgTEFTVF9PUENPREUob3BfbG9vcF9pZl9sZXNzKTsKICAgICAgICAgfQogCiAg
ICAgICAgIGNhc2Ugb3BfbG9vcF9pZl9sZXNzZXE6IHsKICAgICAgICAgICAgIHVuc2lnbmVkIHJl
bGF0aXZlT2Zmc2V0ID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKLSAgICAgICAg
ICAgIE5vZGVJbmRleCBvcDEgPSBnZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCk7
Ci0gICAgICAgICAgICBOb2RlSW5kZXggb3AyID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsyXS51
Lm9wZXJhbmQpOwotICAgICAgICAgICAgTm9kZUluZGV4IGNvbmRpdGlvbiA9IGFkZFRvR3JhcGgo
Q29tcGFyZUxlc3NFcSwgb3AxLCBvcDIpOworICAgICAgICAgICAgTm9kZSogb3AxID0gZ2V0KGN1
cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpOworICAgICAgICAgICAgTm9kZSogb3AyID0g
Z2V0KGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOworICAgICAgICAgICAgTm9kZSog
Y29uZGl0aW9uID0gYWRkVG9HcmFwaChDb21wYXJlTGVzc0VxLCBvcDEsIG9wMik7CiAgICAgICAg
ICAgICBhZGRUb0dyYXBoKEJyYW5jaCwgT3BJbmZvKG1fY3VycmVudEluZGV4ICsgcmVsYXRpdmVP
ZmZzZXQpLCBPcEluZm8obV9jdXJyZW50SW5kZXggKyBPUENPREVfTEVOR1RIKG9wX2xvb3BfaWZf
bGVzc2VxKSksIGNvbmRpdGlvbik7CiAgICAgICAgICAgICBMQVNUX09QQ09ERShvcF9sb29wX2lm
X2xlc3NlcSk7CiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIG9wX2xvb3BfaWZfZ3JlYXRlcjog
ewogICAgICAgICAgICAgdW5zaWduZWQgcmVsYXRpdmVPZmZzZXQgPSBjdXJyZW50SW5zdHJ1Y3Rp
b25bM10udS5vcGVyYW5kOwotICAgICAgICAgICAgTm9kZUluZGV4IG9wMSA9IGdldChjdXJyZW50
SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKTsKLSAgICAgICAgICAgIE5vZGVJbmRleCBvcDIgPSBn
ZXQoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7Ci0gICAgICAgICAgICBOb2RlSW5k
ZXggY29uZGl0aW9uID0gYWRkVG9HcmFwaChDb21wYXJlR3JlYXRlciwgb3AxLCBvcDIpOworICAg
ICAgICAgICAgTm9kZSogb3AxID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQp
OworICAgICAgICAgICAgTm9kZSogb3AyID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9w
ZXJhbmQpOworICAgICAgICAgICAgTm9kZSogY29uZGl0aW9uID0gYWRkVG9HcmFwaChDb21wYXJl
R3JlYXRlciwgb3AxLCBvcDIpOwogICAgICAgICAgICAgYWRkVG9HcmFwaChCcmFuY2gsIE9wSW5m
byhtX2N1cnJlbnRJbmRleCArIHJlbGF0aXZlT2Zmc2V0KSwgT3BJbmZvKG1fY3VycmVudEluZGV4
ICsgT1BDT0RFX0xFTkdUSChvcF9sb29wX2lmX2dyZWF0ZXIpKSwgY29uZGl0aW9uKTsKICAgICAg
ICAgICAgIExBU1RfT1BDT0RFKG9wX2xvb3BfaWZfZ3JlYXRlcik7CiAgICAgICAgIH0KIAogICAg
ICAgICBjYXNlIG9wX2xvb3BfaWZfZ3JlYXRlcmVxOiB7CiAgICAgICAgICAgICB1bnNpZ25lZCBy
ZWxhdGl2ZU9mZnNldCA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7Ci0gICAgICAg
ICAgICBOb2RlSW5kZXggb3AxID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQp
OwotICAgICAgICAgICAgTm9kZUluZGV4IG9wMiA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMl0u
dS5vcGVyYW5kKTsKLSAgICAgICAgICAgIE5vZGVJbmRleCBjb25kaXRpb24gPSBhZGRUb0dyYXBo
KENvbXBhcmVHcmVhdGVyRXEsIG9wMSwgb3AyKTsKKyAgICAgICAgICAgIE5vZGUqIG9wMSA9IGdl
dChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKTsKKyAgICAgICAgICAgIE5vZGUqIG9w
MiA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKKyAgICAgICAgICAgIE5v
ZGUqIGNvbmRpdGlvbiA9IGFkZFRvR3JhcGgoQ29tcGFyZUdyZWF0ZXJFcSwgb3AxLCBvcDIpOwog
ICAgICAgICAgICAgYWRkVG9HcmFwaChCcmFuY2gsIE9wSW5mbyhtX2N1cnJlbnRJbmRleCArIHJl
bGF0aXZlT2Zmc2V0KSwgT3BJbmZvKG1fY3VycmVudEluZGV4ICsgT1BDT0RFX0xFTkdUSChvcF9s
b29wX2lmX2dyZWF0ZXJlcSkpLCBjb25kaXRpb24pOwogICAgICAgICAgICAgTEFTVF9PUENPREUo
b3BfbG9vcF9pZl9ncmVhdGVyZXEpOwogICAgICAgICB9CkBAIC0yOTU2LDcgKzI5MTgsNyBAQCBi
b29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIGFyZ3VtZW50ID0gMTsgYXJndW1lbnQgPCBhcmdDb3VudDsgKythcmd1bWVudCkK
ICAgICAgICAgICAgICAgICBhZGRWYXJBcmdDaGlsZChnZXQoYXJndW1lbnRUb09wZXJhbmQoYXJn
dW1lbnQpKSk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIE5vZGVJbmRleCBjYWxsID0gYWRk
VG9HcmFwaChOb2RlOjpWYXJBcmcsIENhbGwsIE9wSW5mbygwKSwgT3BJbmZvKHByZWRpY3Rpb24p
KTsKKyAgICAgICAgICAgIE5vZGUqIGNhbGwgPSBhZGRUb0dyYXBoKE5vZGU6OlZhckFyZywgQ2Fs
bCwgT3BJbmZvKDApLCBPcEluZm8ocHJlZGljdGlvbikpOwogICAgICAgICAgICAgaWYgKGludGVy
cHJldGVyLT5nZXRPcGNvZGVJRChwdXRJbnN0cnVjdGlvbi0+dS5vcGNvZGUpID09IG9wX2NhbGxf
cHV0X3Jlc3VsdCkKICAgICAgICAgICAgICAgICBzZXQocHV0SW5zdHJ1Y3Rpb25bMV0udS5vcGVy
YW5kLCBjYWxsKTsKICAgICAgICAgICAgIApAQCAtMjk4OCwxMyArMjk1MCwxMyBAQCBib29sIEJ5
dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICAKICAgICAgICAg
ICAgIHVuc2lnbmVkIGlkZW50aWZpZXIgPSBtX2lubGluZVN0YWNrVG9wLT5tX2lkZW50aWZpZXJS
ZW1hcFtjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kXTsKICAgICAgICAgICAgIHVuc2ln
bmVkIG9wZXJhdGlvbnMgPSBtX2lubGluZVN0YWNrVG9wLT5tX3Jlc29sdmVPcGVyYXRpb25SZW1h
cFtjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kXTsKLSAgICAgICAgICAgIE5vZGVJbmRl
eCB2YWx1ZSA9IDA7CisgICAgICAgICAgICBOb2RlKiB2YWx1ZSA9IDA7CiAgICAgICAgICAgICBp
ZiAocGFyc2VSZXNvbHZlT3BlcmF0aW9ucyhwcmVkaWN0aW9uLCBpZGVudGlmaWVyLCBvcGVyYXRp
b25zLCAwLCAwLCAmdmFsdWUpKSB7CiAgICAgICAgICAgICAgICAgc2V0KGN1cnJlbnRJbnN0cnVj
dGlvblsxXS51Lm9wZXJhbmQsIHZhbHVlKTsKICAgICAgICAgICAgICAgICBORVhUX09QQ09ERShv
cF9yZXNvbHZlKTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgTm9kZUluZGV4IHJlc29s
dmUgPSBhZGRUb0dyYXBoKFJlc29sdmUsIE9wSW5mbyhtX2dyYXBoLm1fcmVzb2x2ZU9wZXJhdGlv
bnNEYXRhLnNpemUoKSksIE9wSW5mbyhwcmVkaWN0aW9uKSk7CisgICAgICAgICAgICBOb2RlKiBy
ZXNvbHZlID0gYWRkVG9HcmFwaChSZXNvbHZlLCBPcEluZm8obV9ncmFwaC5tX3Jlc29sdmVPcGVy
YXRpb25zRGF0YS5zaXplKCkpLCBPcEluZm8ocHJlZGljdGlvbikpOwogICAgICAgICAgICAgbV9n
cmFwaC5tX3Jlc29sdmVPcGVyYXRpb25zRGF0YS5hcHBlbmQoUmVzb2x2ZU9wZXJhdGlvbkRhdGEo
KSk7CiAgICAgICAgICAgICBSZXNvbHZlT3BlcmF0aW9uRGF0YSYgZGF0YSA9IG1fZ3JhcGgubV9y
ZXNvbHZlT3BlcmF0aW9uc0RhdGEubGFzdCgpOwogICAgICAgICAgICAgZGF0YS5pZGVudGlmaWVy
TnVtYmVyID0gaWRlbnRpZmllcjsKQEAgLTMwNDIsOCArMzAwNCw4IEBAIGJvb2wgQnl0ZUNvZGVQ
YXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdl
dCh2YWx1ZSkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBQdXRU
b0Jhc2VPcGVyYXRpb246OlZhcmlhYmxlUHV0OiB7Ci0gICAgICAgICAgICAgICAgTm9kZUluZGV4
IHNjb3BlID0gZ2V0KGJhc2UpOwotICAgICAgICAgICAgICAgIE5vZGVJbmRleCBzY29wZVJlZ2lz
dGVycyA9IGFkZFRvR3JhcGgoR2V0U2NvcGVSZWdpc3RlcnMsIHNjb3BlKTsKKyAgICAgICAgICAg
ICAgICBOb2RlKiBzY29wZSA9IGdldChiYXNlKTsKKyAgICAgICAgICAgICAgICBOb2RlKiBzY29w
ZVJlZ2lzdGVycyA9IGFkZFRvR3JhcGgoR2V0U2NvcGVSZWdpc3RlcnMsIHNjb3BlKTsKICAgICAg
ICAgICAgICAgICBhZGRUb0dyYXBoKFB1dFNjb3BlZFZhciwgT3BJbmZvKHB1dFRvQmFzZS0+bV9v
ZmZzZXQpLCBzY29wZSwgc2NvcGVSZWdpc3RlcnMsIGdldCh2YWx1ZSkpOwogICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgfQpAQCAtMzA1Myw5ICszMDE1LDkgQEAgYm9vbCBCeXRl
Q29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgICAgICAgICBhZGRU
b0dyYXBoKFBoYW50b20sIGdldChiYXNlKSk7CiAgICAgICAgICAgICAgICAgICAgIE5FWFRfT1BD
T0RFKG9wX3B1dF90b19iYXNlKTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
Tm9kZUluZGV4IGJhc2VOb2RlID0gZ2V0KGJhc2UpOworICAgICAgICAgICAgICAgIE5vZGUqIGJh
c2VOb2RlID0gZ2V0KGJhc2UpOwogICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoQ2hlY2tTdHJ1
Y3R1cmUsIE9wSW5mbyhtX2dyYXBoLmFkZFN0cnVjdHVyZVNldChwdXRUb0Jhc2UtPm1fc3RydWN0
dXJlLmdldCgpKSksIGJhc2VOb2RlKTsKLSAgICAgICAgICAgICAgICBOb2RlSW5kZXggcHJvcGVy
dHlTdG9yYWdlOworICAgICAgICAgICAgICAgIE5vZGUqIHByb3BlcnR5U3RvcmFnZTsKICAgICAg
ICAgICAgICAgICBpZiAoaXNJbmxpbmVPZmZzZXQocHV0VG9CYXNlLT5tX29mZnNldCkpCiAgICAg
ICAgICAgICAgICAgICAgIHByb3BlcnR5U3RvcmFnZSA9IGJhc2VOb2RlOwogICAgICAgICAgICAg
ICAgIGVsc2UKQEAgLTMwODYsMTMgKzMwNDgsMTMgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFy
c2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgdW5zaWduZWQgb3BlcmF0aW9ucyA9IG1faW5s
aW5lU3RhY2tUb3AtPm1fcmVzb2x2ZU9wZXJhdGlvblJlbWFwW2N1cnJlbnRJbnN0cnVjdGlvbls0
XS51Lm9wZXJhbmRdOwogICAgICAgICAgICAgdW5zaWduZWQgcHV0VG9CYXNlT3BlcmF0aW9uID0g
bV9pbmxpbmVTdGFja1RvcC0+bV9wdXRUb0Jhc2VPcGVyYXRpb25SZW1hcFtjdXJyZW50SW5zdHJ1
Y3Rpb25bNV0udS5vcGVyYW5kXTsKIAotICAgICAgICAgICAgTm9kZUluZGV4IGJhc2UgPSAwOwor
ICAgICAgICAgICAgTm9kZSogYmFzZSA9IDA7CiAgICAgICAgICAgICBpZiAocGFyc2VSZXNvbHZl
T3BlcmF0aW9ucyhwcmVkaWN0aW9uLCBpZGVudGlmaWVyLCBvcGVyYXRpb25zLCAwLCAmYmFzZSwg
MCkpIHsKICAgICAgICAgICAgICAgICBzZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFu
ZCwgYmFzZSk7CiAgICAgICAgICAgICAgICAgTkVYVF9PUENPREUob3BfcmVzb2x2ZV9iYXNlKTsK
ICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgTm9kZUluZGV4IHJlc29sdmUgPSBhZGRUb0dy
YXBoKGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQgPyBSZXNvbHZlQmFzZVN0cmljdFB1
dCA6IFJlc29sdmVCYXNlLCBPcEluZm8obV9ncmFwaC5tX3Jlc29sdmVPcGVyYXRpb25zRGF0YS5z
aXplKCkpLCBPcEluZm8ocHJlZGljdGlvbikpOworICAgICAgICAgICAgTm9kZSogcmVzb2x2ZSA9
IGFkZFRvR3JhcGgoY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZCA/IFJlc29sdmVCYXNl
U3RyaWN0UHV0IDogUmVzb2x2ZUJhc2UsIE9wSW5mbyhtX2dyYXBoLm1fcmVzb2x2ZU9wZXJhdGlv
bnNEYXRhLnNpemUoKSksIE9wSW5mbyhwcmVkaWN0aW9uKSk7CiAgICAgICAgICAgICBtX2dyYXBo
Lm1fcmVzb2x2ZU9wZXJhdGlvbnNEYXRhLmFwcGVuZChSZXNvbHZlT3BlcmF0aW9uRGF0YSgpKTsK
ICAgICAgICAgICAgIFJlc29sdmVPcGVyYXRpb25EYXRhJiBkYXRhID0gbV9ncmFwaC5tX3Jlc29s
dmVPcGVyYXRpb25zRGF0YS5sYXN0KCk7CiAgICAgICAgICAgICBkYXRhLmlkZW50aWZpZXJOdW1i
ZXIgPSBpZGVudGlmaWVyOwpAQCAtMzExMSw4ICszMDczLDggQEAgYm9vbCBCeXRlQ29kZVBhcnNl
cjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgdW5zaWduZWQgb3BlcmF0aW9ucyA9
IG1faW5saW5lU3RhY2tUb3AtPm1fcmVzb2x2ZU9wZXJhdGlvblJlbWFwW2N1cnJlbnRJbnN0cnVj
dGlvbls0XS51Lm9wZXJhbmRdOwogICAgICAgICAgICAgdW5zaWduZWQgcHV0VG9CYXNlT3BlcmF0
aW9uID0gbV9pbmxpbmVTdGFja1RvcC0+bV9wdXRUb0Jhc2VPcGVyYXRpb25SZW1hcFtjdXJyZW50
SW5zdHJ1Y3Rpb25bNV0udS5vcGVyYW5kXTsKIAotICAgICAgICAgICAgTm9kZUluZGV4IGJhc2Ug
PSAwOwotICAgICAgICAgICAgTm9kZUluZGV4IHZhbHVlID0gMDsKKyAgICAgICAgICAgIE5vZGUq
IGJhc2UgPSAwOworICAgICAgICAgICAgTm9kZSogdmFsdWUgPSAwOwogICAgICAgICAgICAgaWYg
KHBhcnNlUmVzb2x2ZU9wZXJhdGlvbnMocHJlZGljdGlvbiwgaWRlbnRpZmllciwgb3BlcmF0aW9u
cywgcHV0VG9CYXNlT3BlcmF0aW9uLCAmYmFzZSwgJnZhbHVlKSkKICAgICAgICAgICAgICAgICBz
ZXRQYWlyKGJhc2VEc3QsIGJhc2UsIHZhbHVlRHN0LCB2YWx1ZSk7CiAgICAgICAgICAgICBlbHNl
IHsKQEAgLTMxMjksOCArMzA5MSw4IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2so
dW5zaWduZWQKICAgICAgICAgICAgIHVuc2lnbmVkIGlkZW50aWZpZXIgPSBtX2lubGluZVN0YWNr
VG9wLT5tX2lkZW50aWZpZXJSZW1hcFtjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kXTsK
ICAgICAgICAgICAgIHVuc2lnbmVkIG9wZXJhdGlvbnMgPSBtX2lubGluZVN0YWNrVG9wLT5tX3Jl
c29sdmVPcGVyYXRpb25SZW1hcFtjdXJyZW50SW5zdHJ1Y3Rpb25bNF0udS5vcGVyYW5kXTsKIAot
ICAgICAgICAgICAgTm9kZUluZGV4IGJhc2UgPSAwOwotICAgICAgICAgICAgTm9kZUluZGV4IHZh
bHVlID0gMDsKKyAgICAgICAgICAgIE5vZGUqIGJhc2UgPSAwOworICAgICAgICAgICAgTm9kZSog
dmFsdWUgPSAwOwogICAgICAgICAgICAgaWYgKHBhcnNlUmVzb2x2ZU9wZXJhdGlvbnMocHJlZGlj
dGlvbiwgaWRlbnRpZmllciwgb3BlcmF0aW9ucywgMCwgJmJhc2UsICZ2YWx1ZSkpCiAgICAgICAg
ICAgICAgICAgc2V0UGFpcihiYXNlRHN0LCBiYXNlLCB2YWx1ZURzdCwgdmFsdWUpOwogICAgICAg
ICAgICAgZWxzZSB7CkBAIC0zMTcxLDcgKzMxMzMsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpw
YXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBvcF9jcmVhdGVf
YXJndW1lbnRzOiB7CiAgICAgICAgICAgICBtX2dyYXBoLm1faGFzQXJndW1lbnRzID0gdHJ1ZTsK
LSAgICAgICAgICAgIE5vZGVJbmRleCBjcmVhdGVBcmd1bWVudHMgPSBhZGRUb0dyYXBoKENyZWF0
ZUFyZ3VtZW50cywgZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpKTsKKyAgICAg
ICAgICAgIE5vZGUqIGNyZWF0ZUFyZ3VtZW50cyA9IGFkZFRvR3JhcGgoQ3JlYXRlQXJndW1lbnRz
LCBnZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCkpOwogICAgICAgICAgICAgc2V0
KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsIGNyZWF0ZUFyZ3VtZW50cyk7CiAgICAg
ICAgICAgICBzZXQodW5tb2RpZmllZEFyZ3VtZW50c1JlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlv
blsxXS51Lm9wZXJhbmQpLCBjcmVhdGVBcmd1bWVudHMpOwogICAgICAgICAgICAgTkVYVF9PUENP
REUob3BfY3JlYXRlX2FyZ3VtZW50cyk7CkBAIC0zMjUwLDEyICszMjEyLDkgQEAgdm9pZCBCeXRl
Q29kZVBhcnNlcjo6cHJvY2Vzc1BoaVN0YWNrKCkKICAgICAgICAgaWYgKCFlbnRyeS5tX2Jsb2Nr
LT5pc1JlYWNoYWJsZSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAKLSAgICAgICAg
aWYgKCFlbnRyeS5tX2Jsb2NrLT5pc1JlYWNoYWJsZSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwot
ICAgICAgICAKICAgICAgICAgUHJlZGVjZXNzb3JMaXN0JiBwcmVkZWNlc3NvcnMgPSBlbnRyeS5t
X2Jsb2NrLT5tX3ByZWRlY2Vzc29yczsKICAgICAgICAgdW5zaWduZWQgdmFyTm8gPSBlbnRyeS5t
X3Zhck5vOwotICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIGRhdGFGb3JQaGkgPSBtX2dyYXBo
W2VudHJ5Lm1fcGhpXS52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKKyAgICAgICAgVmFyaWFibGVBY2Nl
c3NEYXRhKiBkYXRhRm9yUGhpID0gZW50cnkubV9waGktPnZhcmlhYmxlQWNjZXNzRGF0YSgpOwog
CiAjaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQogICAgICAgICBkYXRh
TG9nRigiICAgSGFuZGxpbmcgcGhpIGVudHJ5IGZvciB2YXIgJXUsIHBoaSBAJXUuXG4iLCBlbnRy
eS5tX3Zhck5vLCBlbnRyeS5tX3BoaSk7CkBAIC0zMjY4LDEwICszMjI3LDEwIEBAIHZvaWQgQnl0
ZUNvZGVQYXJzZXI6OnByb2Nlc3NQaGlTdGFjaygpCiAgICAgICAgICAgICAKICAgICAgICAgICAg
IEJhc2ljQmxvY2sqIHByZWRlY2Vzc29yQmxvY2sgPSBtX2dyYXBoLm1fYmxvY2tzW3ByZWRlY2Vz
c29yc1tpXV0uZ2V0KCk7CiAKLSAgICAgICAgICAgIE5vZGVJbmRleCYgdmFyID0gKHN0YWNrVHlw
ZSA9PSBBcmd1bWVudFBoaVN0YWNrKSA/IHByZWRlY2Vzc29yQmxvY2stPnZhcmlhYmxlc0F0VGFp
bC5hcmd1bWVudCh2YXJObykgOiBwcmVkZWNlc3NvckJsb2NrLT52YXJpYWJsZXNBdFRhaWwubG9j
YWwodmFyTm8pOworICAgICAgICAgICAgTm9kZSomIHZhciA9IChzdGFja1R5cGUgPT0gQXJndW1l
bnRQaGlTdGFjaykgPyBwcmVkZWNlc3NvckJsb2NrLT52YXJpYWJsZXNBdFRhaWwuYXJndW1lbnQo
dmFyTm8pIDogcHJlZGVjZXNzb3JCbG9jay0+dmFyaWFibGVzQXRUYWlsLmxvY2FsKHZhck5vKTsK
ICAgICAgICAgICAgIAotICAgICAgICAgICAgTm9kZUluZGV4IHZhbHVlSW5QcmVkZWNlc3NvciA9
IHZhcjsKLSAgICAgICAgICAgIGlmICh2YWx1ZUluUHJlZGVjZXNzb3IgPT0gTm9Ob2RlKSB7Cisg
ICAgICAgICAgICBOb2RlKiB2YWx1ZUluUHJlZGVjZXNzb3IgPSB2YXI7CisgICAgICAgICAgICBp
ZiAoIXZhbHVlSW5QcmVkZWNlc3NvcikgewogI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJ
T05fVkVSQk9TRSkKICAgICAgICAgICAgICAgICBkYXRhTG9nRigiICAgICAgRGlkIG5vdCBmaW5k
IG5vZGUsIGFkZGluZyBwaGkuXG4iKTsKICNlbmRpZgpAQCAtMzI4MywzNiArMzI0MiwzNiBAQCB2
b2lkIEJ5dGVDb2RlUGFyc2VyOjpwcm9jZXNzUGhpU3RhY2soKQogICAgICAgICAgICAgICAgIGVs
c2UKICAgICAgICAgICAgICAgICAgICAgcHJlZGVjZXNzb3JCbG9jay0+dmFyaWFibGVzQXRIZWFk
LnNldExvY2FsRmlyc3RUaW1lKHZhck5vLCB2YWx1ZUluUHJlZGVjZXNzb3IpOwogICAgICAgICAg
ICAgICAgIHBoaVN0YWNrLmFwcGVuZChQaGlTdGFja0VudHJ5KHByZWRlY2Vzc29yQmxvY2ssIHZh
bHVlSW5QcmVkZWNlc3NvciwgdmFyTm8pKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAobV9ncmFw
aFt2YWx1ZUluUHJlZGVjZXNzb3JdLm9wKCkgPT0gR2V0TG9jYWwpIHsKKyAgICAgICAgICAgIH0g
ZWxzZSBpZiAodmFsdWVJblByZWRlY2Vzc29yLT5vcCgpID09IEdldExvY2FsKSB7CiAjaWYgREZH
X0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQotICAgICAgICAgICAgICAgIGRhdGFM
b2dGKCIgICAgICBGb3VuZCBHZXRMb2NhbCBAJXUuXG4iLCB2YWx1ZUluUHJlZGVjZXNzb3IpOwor
ICAgICAgICAgICAgICAgIGRhdGFMb2dGKCIgICAgICBGb3VuZCBHZXRMb2NhbCBAJXUuXG4iLCB2
YWx1ZUluUHJlZGVjZXNzb3ItPmluZGV4KCkpOwogI2VuZGlmCiAKICAgICAgICAgICAgICAgICAv
LyBXZSB3YW50IHRvIGVuc3VyZSB0aGF0IHRoZSBWYXJpYWJsZUFjY2Vzc0RhdGFzIGFyZSBpZGVu
dGljYWwgYmV0d2VlbiB0aGUKICAgICAgICAgICAgICAgICAvLyBHZXRMb2NhbCBhbmQgaXRzIGJs
b2NrLWxvY2FsIFBoaS4gU3RyaWN0bHkgc3BlYWtpbmcgd2Ugb25seSBuZWVkIHRoZSB0d28KICAg
ICAgICAgICAgICAgICAvLyB0byBiZSB1bmlmaWVkLiBCdXQgZm9yIGVmZmljaWVuY3ksIHdlIHdh
bnQgdGhlIGNvZGUgdGhhdCBjcmVhdGVzIEdldExvY2FscwogICAgICAgICAgICAgICAgIC8vIGFu
ZCBQaGlzIHRvIHRyeSB0byByZXVzZSBWYXJpYWJsZUFjY2Vzc0RhdGFzIGFzIG11Y2ggYXMgcG9z
c2libGUuCi0gICAgICAgICAgICAgICAgQVNTRVJUKG1fZ3JhcGhbdmFsdWVJblByZWRlY2Vzc29y
XS52YXJpYWJsZUFjY2Vzc0RhdGEoKSA9PSBtX2dyYXBoW21fZ3JhcGhbdmFsdWVJblByZWRlY2Vz
c29yXS5jaGlsZDEoKS5pbmRleCgpXS52YXJpYWJsZUFjY2Vzc0RhdGEoKSk7CisgICAgICAgICAg
ICAgICAgQVNTRVJUKHZhbHVlSW5QcmVkZWNlc3Nvci0+dmFyaWFibGVBY2Nlc3NEYXRhKCkgPT0g
dmFsdWVJblByZWRlY2Vzc29yLT5jaGlsZDEoKS0+dmFyaWFibGVBY2Nlc3NEYXRhKCkpOwogICAg
ICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIHZhbHVlSW5QcmVkZWNlc3NvciA9IG1fZ3Jh
cGhbdmFsdWVJblByZWRlY2Vzc29yXS5jaGlsZDEoKS5pbmRleCgpOworICAgICAgICAgICAgICAg
IHZhbHVlSW5QcmVkZWNlc3NvciA9IHZhbHVlSW5QcmVkZWNlc3Nvci0+Y2hpbGQxKCkubm9kZSgp
OwogICAgICAgICAgICAgfSBlbHNlIHsKICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9O
X1ZFUkJPU0UpCi0gICAgICAgICAgICAgICAgZGF0YUxvZ0YoIiAgICAgIEZvdW5kIEAldS5cbiIs
IHZhbHVlSW5QcmVkZWNlc3Nvcik7CisgICAgICAgICAgICAgICAgZGF0YUxvZ0YoIiAgICAgIEZv
dW5kIEAldS5cbiIsIHZhbHVlSW5QcmVkZWNlc3Nvci0+aW5kZXgoKSk7CiAjZW5kaWYKICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIEFTU0VSVChtX2dyYXBoW3ZhbHVlSW5QcmVkZWNlc3Nvcl0u
b3AoKSA9PSBTZXRMb2NhbAotICAgICAgICAgICAgICAgICAgIHx8IG1fZ3JhcGhbdmFsdWVJblBy
ZWRlY2Vzc29yXS5vcCgpID09IFBoaQotICAgICAgICAgICAgICAgICAgIHx8IG1fZ3JhcGhbdmFs
dWVJblByZWRlY2Vzc29yXS5vcCgpID09IEZsdXNoCi0gICAgICAgICAgICAgICAgICAgfHwgKG1f
Z3JhcGhbdmFsdWVJblByZWRlY2Vzc29yXS5vcCgpID09IFNldEFyZ3VtZW50CisgICAgICAgICAg
ICBBU1NFUlQodmFsdWVJblByZWRlY2Vzc29yLT5vcCgpID09IFNldExvY2FsCisgICAgICAgICAg
ICAgICAgICAgfHwgdmFsdWVJblByZWRlY2Vzc29yLT5vcCgpID09IFBoaQorICAgICAgICAgICAg
ICAgICAgIHx8IHZhbHVlSW5QcmVkZWNlc3Nvci0+b3AoKSA9PSBGbHVzaAorICAgICAgICAgICAg
ICAgICAgIHx8ICh2YWx1ZUluUHJlZGVjZXNzb3ItPm9wKCkgPT0gU2V0QXJndW1lbnQKICAgICAg
ICAgICAgICAgICAgICAgICAgJiYgc3RhY2tUeXBlID09IEFyZ3VtZW50UGhpU3RhY2spKTsKICAg
ICAgICAgICAgIAotICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiBkYXRhRm9yUHJlZGVj
ZXNzb3IgPSBtX2dyYXBoW3ZhbHVlSW5QcmVkZWNlc3Nvcl0udmFyaWFibGVBY2Nlc3NEYXRhKCk7
CisgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIGRhdGFGb3JQcmVkZWNlc3NvciA9IHZh
bHVlSW5QcmVkZWNlc3Nvci0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CiAgICAgICAgICAgICAKICAg
ICAgICAgICAgIGRhdGFGb3JQcmVkZWNlc3Nvci0+dW5pZnkoZGF0YUZvclBoaSk7CiAKLSAgICAg
ICAgICAgIE5vZGUqIHBoaU5vZGUgPSAmbV9ncmFwaFtlbnRyeS5tX3BoaV07CisgICAgICAgICAg
ICBOb2RlKiBwaGlOb2RlID0gZW50cnkubV9waGk7CiAjaWYgREZHX0VOQUJMRShERUJVR19QUk9Q
QUdBVElPTl9WRVJCT1NFKQotICAgICAgICAgICAgZGF0YUxvZ0YoIiAgICAgIFJlZiBjb3VudCBv
ZiBAJXUgPSAldS5cbiIsIGVudHJ5Lm1fcGhpLCBwaGlOb2RlLT5yZWZDb3VudCgpKTsKKyAgICAg
ICAgICAgIGRhdGFMb2dGKCIgICAgICBSZWYgY291bnQgb2YgQCV1ID0gJXUuXG4iLCBwaGlOb2Rl
LT5pbmRleCgpLCBwaGlOb2RlLT5yZWZDb3VudCgpKTsKICNlbmRpZgogICAgICAgICAgICAgaWYg
KHBoaU5vZGUtPnJlZkNvdW50KCkpIHsKICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9O
X1ZFUkJPU0UpCkBAIC0zMzIzLDExICszMjgyLDExIEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnBy
b2Nlc3NQaGlTdGFjaygpCiAKICAgICAgICAgICAgIGlmICghcGhpTm9kZS0+Y2hpbGQxKCkpIHsK
ICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCi0gICAgICAgICAgICAg
ICAgZGF0YUxvZ0YoIiAgICAgIFNldHRpbmcgQCV1LT5jaGlsZDEgPSBAJXUuXG4iLCBlbnRyeS5t
X3BoaSwgdmFsdWVJblByZWRlY2Vzc29yKTsKKyAgICAgICAgICAgICAgICBkYXRhTG9nRigiICAg
ICAgU2V0dGluZyBAJXUtPmNoaWxkMSA9IEAldS5cbiIsIHBoaU5vZGUtPmluZGV4KCksIHZhbHVl
SW5QcmVkZWNlc3Nvcik7CiAjZW5kaWYKICAgICAgICAgICAgICAgICBwaGlOb2RlLT5jaGlsZHJl
bi5zZXRDaGlsZDEoRWRnZSh2YWx1ZUluUHJlZGVjZXNzb3IpKTsKICNpZiBERkdfRU5BQkxFKERF
QlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCi0gICAgICAgICAgICAgICAgZGF0YUxvZ0YoIiAgICAg
IENoaWxkcmVuIG9mIEAldTogIiwgZW50cnkubV9waGkpOworICAgICAgICAgICAgICAgIGRhdGFM
b2dGKCIgICAgICBDaGlsZHJlbiBvZiBAJXU6ICIsIHBoaU5vZGUtPmluZGV4KCkpOwogICAgICAg
ICAgICAgICAgIHBoaU5vZGUtPmR1bXBDaGlsZHJlbihXVEY6OmRhdGFGaWxlKCkpOwogICAgICAg
ICAgICAgICAgIGRhdGFMb2dGKCIuXG4iKTsKICNlbmRpZgpAQCAtMzMzNSwxMSArMzI5NCwxMSBA
QCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwcm9jZXNzUGhpU3RhY2soKQogICAgICAgICAgICAgfQog
ICAgICAgICAgICAgaWYgKCFwaGlOb2RlLT5jaGlsZDIoKSkgewogI2lmIERGR19FTkFCTEUoREVC
VUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKLSAgICAgICAgICAgICAgICBkYXRhTG9nRigiICAgICAg
U2V0dGluZyBAJXUtPmNoaWxkMiA9IEAldS5cbiIsIGVudHJ5Lm1fcGhpLCB2YWx1ZUluUHJlZGVj
ZXNzb3IpOworICAgICAgICAgICAgICAgIGRhdGFMb2dGKCIgICAgICBTZXR0aW5nIEAldS0+Y2hp
bGQyID0gQCV1LlxuIiwgcGhpTm9kZS0+aW5kZXgoKSwgdmFsdWVJblByZWRlY2Vzc29yKTsKICNl
bmRpZgogICAgICAgICAgICAgICAgIHBoaU5vZGUtPmNoaWxkcmVuLnNldENoaWxkMihFZGdlKHZh
bHVlSW5QcmVkZWNlc3NvcikpOwogI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVS
Qk9TRSkKLSAgICAgICAgICAgICAgICBkYXRhTG9nRigiICAgICAgQ2hpbGRyZW4gb2YgQCV1OiAi
LCBlbnRyeS5tX3BoaSk7CisgICAgICAgICAgICAgICAgZGF0YUxvZ0YoIiAgICAgIENoaWxkcmVu
IG9mIEAldTogIiwgcGhpTm9kZS0+aW5kZXgoKSk7CiAgICAgICAgICAgICAgICAgcGhpTm9kZS0+
ZHVtcENoaWxkcmVuKFdURjo6ZGF0YUZpbGUoKSk7CiAgICAgICAgICAgICAgICAgZGF0YUxvZ0Yo
Ii5cbiIpOwogI2VuZGlmCkBAIC0zMzQ3LDQwICszMzA2LDM4IEBAIHZvaWQgQnl0ZUNvZGVQYXJz
ZXI6OnByb2Nlc3NQaGlTdGFjaygpCiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoIXBo
aU5vZGUtPmNoaWxkMygpKSB7CiAjaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJC
T1NFKQotICAgICAgICAgICAgICAgIGRhdGFMb2dGKCIgICAgICBTZXR0aW5nIEAldS0+Y2hpbGQz
ID0gQCV1LlxuIiwgZW50cnkubV9waGksIHZhbHVlSW5QcmVkZWNlc3Nvcik7CisgICAgICAgICAg
ICAgICAgZGF0YUxvZ0YoIiAgICAgIFNldHRpbmcgQCV1LT5jaGlsZDMgPSBAJXUuXG4iLCBwaGlO
b2RlLT5pbmRleCgpLCB2YWx1ZUluUHJlZGVjZXNzb3IpOwogI2VuZGlmCiAgICAgICAgICAgICAg
ICAgcGhpTm9kZS0+Y2hpbGRyZW4uc2V0Q2hpbGQzKEVkZ2UodmFsdWVJblByZWRlY2Vzc29yKSk7
CiAjaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQotICAgICAgICAgICAg
ICAgIGRhdGFMb2dGKCIgICAgICBDaGlsZHJlbiBvZiBAJXU6ICIsIGVudHJ5Lm1fcGhpKTsKKyAg
ICAgICAgICAgICAgICBkYXRhTG9nRigiICAgICAgQ2hpbGRyZW4gb2YgQCV1OiAiLCBwaGlOb2Rl
LT5pbmRleCgpKTsKICAgICAgICAgICAgICAgICBwaGlOb2RlLT5kdW1wQ2hpbGRyZW4oV1RGOjpk
YXRhRmlsZSgpKTsKICAgICAgICAgICAgICAgICBkYXRhTG9nRigiLlxuIik7CiAjZW5kaWYKICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAotICAg
ICAgICAgICAgTm9kZUluZGV4IG5ld1BoaSA9IGluc2VydFBoaU5vZGUoT3BJbmZvKGRhdGFGb3JQ
aGkpLCBlbnRyeS5tX2Jsb2NrKTsKKyAgICAgICAgICAgIE5vZGUqIG5ld1BoaSA9IGluc2VydFBo
aU5vZGUoT3BJbmZvKGRhdGFGb3JQaGkpLCBlbnRyeS5tX2Jsb2NrKTsKICAgICAgICAgICAgIAog
I2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKLSAgICAgICAgICAgIGRh
dGFMb2dGKCIgICAgICBTcGxpdHRpbmcgQCV1LCBjcmVhdGVkIEAldS5cbiIsIGVudHJ5Lm1fcGhp
LCBuZXdQaGkpOworICAgICAgICAgICAgZGF0YUxvZ0YoIiAgICAgIFNwbGl0dGluZyBAJXUsIGNy
ZWF0ZWQgQCV1LlxuIiwgcGhpTm9kZS0+aW5kZXgoKSwgbmV3UGhpLT5pbmRleCgpKTsKICNlbmRp
ZgogCi0gICAgICAgICAgICBwaGlOb2RlID0gJm1fZ3JhcGhbZW50cnkubV9waGldOyAvLyByZWxv
YWQgYWZ0ZXIgdmVjdG9yIHJlc2l6ZQotICAgICAgICAgICAgTm9kZSYgbmV3UGhpTm9kZSA9IG1f
Z3JhcGhbbmV3UGhpXTsKICAgICAgICAgICAgIGlmIChwaGlOb2RlLT5yZWZDb3VudCgpKQogICAg
ICAgICAgICAgICAgIG1fZ3JhcGgucmVmKG5ld1BoaSk7CiAKLSAgICAgICAgICAgIG5ld1BoaU5v
ZGUuY2hpbGRyZW4gPSBwaGlOb2RlLT5jaGlsZHJlbjsKKyAgICAgICAgICAgIG5ld1BoaS0+Y2hp
bGRyZW4gPSBwaGlOb2RlLT5jaGlsZHJlbjsKIAogI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFH
QVRJT05fVkVSQk9TRSkKLSAgICAgICAgICAgIGRhdGFMb2dGKCIgICAgICBDaGlsZHJlbiBvZiBA
JXU6ICIsIG5ld1BoaSk7Ci0gICAgICAgICAgICBuZXdQaGlOb2RlLmR1bXBDaGlsZHJlbihXVEY6
OmRhdGFGaWxlKCkpOworICAgICAgICAgICAgZGF0YUxvZ0YoIiAgICAgIENoaWxkcmVuIG9mIEAl
dTogIiwgbmV3UGhpLT5pbmRleCgpKTsKKyAgICAgICAgICAgIG5ld1BoaS0+ZHVtcENoaWxkcmVu
KFdURjo6ZGF0YUZpbGUoKSk7CiAgICAgICAgICAgICBkYXRhTG9nRigiLlxuIik7CiAjZW5kaWYK
IAotICAgICAgICAgICAgcGhpTm9kZS0+Y2hpbGRyZW4uaW5pdGlhbGl6ZShuZXdQaGksIHZhbHVl
SW5QcmVkZWNlc3NvciwgTm9Ob2RlKTsKKyAgICAgICAgICAgIHBoaU5vZGUtPmNoaWxkcmVuLmlu
aXRpYWxpemUobmV3UGhpLCB2YWx1ZUluUHJlZGVjZXNzb3IsIDApOwogCiAjaWYgREZHX0VOQUJM
RShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQotICAgICAgICAgICAgZGF0YUxvZ0YoIiAgICAg
IENoaWxkcmVuIG9mIEAldTogIiwgZW50cnkubV9waGkpOworICAgICAgICAgICAgZGF0YUxvZ0Yo
IiAgICAgIENoaWxkcmVuIG9mIEAldTogIiwgcGhpTm9kZS0+aW5kZXgoKSk7CiAgICAgICAgICAg
ICBwaGlOb2RlLT5kdW1wQ2hpbGRyZW4oV1RGOjpkYXRhRmlsZSgpKTsKICAgICAgICAgICAgIGRh
dGFMb2dGKCIuXG4iKTsKICNlbmRpZgpAQCAtMzQwMiwyMiArMzM1OSwyMiBAQCB2b2lkIEJ5dGVD
b2RlUGFyc2VyOjpsaW5rQmxvY2soQmFzaWNCbG9jCiB7CiAgICAgQVNTRVJUKCFibG9jay0+aXNM
aW5rZWQpOwogICAgIEFTU0VSVCghYmxvY2stPmlzRW1wdHkoKSk7Ci0gICAgTm9kZSYgbm9kZSA9
IG1fZ3JhcGhbYmxvY2stPmxhc3QoKV07Ci0gICAgQVNTRVJUKG5vZGUuaXNUZXJtaW5hbCgpKTsK
KyAgICBOb2RlKiBub2RlID0gYmxvY2stPmxhc3QoKTsKKyAgICBBU1NFUlQobm9kZS0+aXNUZXJt
aW5hbCgpKTsKICAgICAKLSAgICBzd2l0Y2ggKG5vZGUub3AoKSkgeworICAgIHN3aXRjaCAobm9k
ZS0+b3AoKSkgewogICAgIGNhc2UgSnVtcDoKLSAgICAgICAgbm9kZS5zZXRUYWtlbkJsb2NrSW5k
ZXgobV9ncmFwaC5ibG9ja0luZGV4Rm9yQnl0ZWNvZGVPZmZzZXQocG9zc2libGVUYXJnZXRzLCBu
b2RlLnRha2VuQnl0ZWNvZGVPZmZzZXREdXJpbmdQYXJzaW5nKCkpKTsKKyAgICAgICAgbm9kZS0+
c2V0VGFrZW5CbG9ja0luZGV4KG1fZ3JhcGguYmxvY2tJbmRleEZvckJ5dGVjb2RlT2Zmc2V0KHBv
c3NpYmxlVGFyZ2V0cywgbm9kZS0+dGFrZW5CeXRlY29kZU9mZnNldER1cmluZ1BhcnNpbmcoKSkp
OwogI2lmIERGR19FTkFCTEUoREVCVUdfVkVSQk9TRSkKLSAgICAgICAgZGF0YUxvZ0YoIkxpbmtl
ZCBiYXNpYyBibG9jayAlcCB0byAlcCwgIyV1LlxuIiwgYmxvY2ssIG1fZ3JhcGgubV9ibG9ja3Nb
bm9kZS50YWtlbkJsb2NrSW5kZXgoKV0uZ2V0KCksIG5vZGUudGFrZW5CbG9ja0luZGV4KCkpOwor
ICAgICAgICBkYXRhTG9nRigiTGlua2VkIGJhc2ljIGJsb2NrICVwIHRvICVwLCAjJXUuXG4iLCBi
bG9jaywgbV9ncmFwaC5tX2Jsb2Nrc1tub2RlLT50YWtlbkJsb2NrSW5kZXgoKV0uZ2V0KCksIG5v
ZGUtPnRha2VuQmxvY2tJbmRleCgpKTsKICNlbmRpZgogICAgICAgICBicmVhazsKICAgICAgICAg
CiAgICAgY2FzZSBCcmFuY2g6Ci0gICAgICAgIG5vZGUuc2V0VGFrZW5CbG9ja0luZGV4KG1fZ3Jh
cGguYmxvY2tJbmRleEZvckJ5dGVjb2RlT2Zmc2V0KHBvc3NpYmxlVGFyZ2V0cywgbm9kZS50YWtl
bkJ5dGVjb2RlT2Zmc2V0RHVyaW5nUGFyc2luZygpKSk7Ci0gICAgICAgIG5vZGUuc2V0Tm90VGFr
ZW5CbG9ja0luZGV4KG1fZ3JhcGguYmxvY2tJbmRleEZvckJ5dGVjb2RlT2Zmc2V0KHBvc3NpYmxl
VGFyZ2V0cywgbm9kZS5ub3RUYWtlbkJ5dGVjb2RlT2Zmc2V0RHVyaW5nUGFyc2luZygpKSk7Cisg
ICAgICAgIG5vZGUtPnNldFRha2VuQmxvY2tJbmRleChtX2dyYXBoLmJsb2NrSW5kZXhGb3JCeXRl
Y29kZU9mZnNldChwb3NzaWJsZVRhcmdldHMsIG5vZGUtPnRha2VuQnl0ZWNvZGVPZmZzZXREdXJp
bmdQYXJzaW5nKCkpKTsKKyAgICAgICAgbm9kZS0+c2V0Tm90VGFrZW5CbG9ja0luZGV4KG1fZ3Jh
cGguYmxvY2tJbmRleEZvckJ5dGVjb2RlT2Zmc2V0KHBvc3NpYmxlVGFyZ2V0cywgbm9kZS0+bm90
VGFrZW5CeXRlY29kZU9mZnNldER1cmluZ1BhcnNpbmcoKSkpOwogI2lmIERGR19FTkFCTEUoREVC
VUdfVkVSQk9TRSkKLSAgICAgICAgZGF0YUxvZ0YoIkxpbmtlZCBiYXNpYyBibG9jayAlcCB0byAl
cCwgIyV1IGFuZCAlcCwgIyV1LlxuIiwgYmxvY2ssIG1fZ3JhcGgubV9ibG9ja3Nbbm9kZS50YWtl
bkJsb2NrSW5kZXgoKV0uZ2V0KCksIG5vZGUudGFrZW5CbG9ja0luZGV4KCksIG1fZ3JhcGgubV9i
bG9ja3Nbbm9kZS5ub3RUYWtlbkJsb2NrSW5kZXgoKV0uZ2V0KCksIG5vZGUubm90VGFrZW5CbG9j
a0luZGV4KCkpOworICAgICAgICBkYXRhTG9nRigiTGlua2VkIGJhc2ljIGJsb2NrICVwIHRvICVw
LCAjJXUgYW5kICVwLCAjJXUuXG4iLCBibG9jaywgbV9ncmFwaC5tX2Jsb2Nrc1tub2RlLT50YWtl
bkJsb2NrSW5kZXgoKV0uZ2V0KCksIG5vZGUtPnRha2VuQmxvY2tJbmRleCgpLCBtX2dyYXBoLm1f
YmxvY2tzW25vZGUtPm5vdFRha2VuQmxvY2tJbmRleCgpXS5nZXQoKSwgbm9kZS0+bm90VGFrZW5C
bG9ja0luZGV4KCkpOwogI2VuZGlmCiAgICAgICAgIGJyZWFrOwogICAgICAgICAKQEAgLTM3MjUs
NyArMzY4Miw3IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQ29kZUJsb2NrKCkKICAgICAg
ICAgICAgIC8vIGFyZSBhdCB0aGUgZW5kIG9mIGFuIGlubGluZSBmdW5jdGlvbiwgb3Igd2UgcmVh
bGl6ZWQgdGhhdCB3ZQogICAgICAgICAgICAgLy8gc2hvdWxkIHN0b3AgcGFyc2luZyBiZWNhdXNl
IHRoZXJlIHdhcyBhIHJldHVybiBpbiB0aGUgZmlyc3QKICAgICAgICAgICAgIC8vIGJhc2ljIGJs
b2NrLgotICAgICAgICAgICAgQVNTRVJUKG1fY3VycmVudEJsb2NrLT5pc0VtcHR5KCkgfHwgbV9n
cmFwaC5sYXN0KCkuaXNUZXJtaW5hbCgpIHx8IChtX2N1cnJlbnRJbmRleCA9PSBjb2RlQmxvY2st
Pmluc3RydWN0aW9ucygpLnNpemUoKSAmJiBtX2lubGluZVN0YWNrVG9wLT5tX2lubGluZUNhbGxG
cmFtZSkgfHwgIXNob3VsZENvbnRpbnVlUGFyc2luZyk7CisgICAgICAgICAgICBBU1NFUlQobV9j
dXJyZW50QmxvY2stPmlzRW1wdHkoKSB8fCBtX2N1cnJlbnRCbG9jay0+bGFzdCgpLT5pc1Rlcm1p
bmFsKCkgfHwgKG1fY3VycmVudEluZGV4ID09IGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuc2l6
ZSgpICYmIG1faW5saW5lU3RhY2tUb3AtPm1faW5saW5lQ2FsbEZyYW1lKSB8fCAhc2hvdWxkQ29u
dGludWVQYXJzaW5nKTsKIAogICAgICAgICAgICAgaWYgKCFzaG91bGRDb250aW51ZVBhcnNpbmcp
CiAgICAgICAgICAgICAgICAgcmV0dXJuOwpAQCAtMzc4NiwxMyArMzc0MywxMiBAQCBib29sIEJ5
dGVDb2RlUGFyc2VyOjpwYXJzZSgpCiAgICAgICAgIGlmIChibG9jay0+Ynl0ZWNvZGVCZWdpbiAh
PSBtX2dyYXBoLm1fb3NyRW50cnlCeXRlY29kZUluZGV4KQogICAgICAgICAgICAgY29udGludWU7
CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9ncmFwaC5tX211c3RIYW5kbGVWYWx1
ZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIE5vZGVJbmRleCBub2RlSW5kZXggPSBibG9j
ay0+dmFyaWFibGVzQXRIZWFkLm9wZXJhbmQoCisgICAgICAgICAgICBOb2RlKiBub2RlID0gYmxv
Y2stPnZhcmlhYmxlc0F0SGVhZC5vcGVyYW5kKAogICAgICAgICAgICAgICAgIG1fZ3JhcGgubV9t
dXN0SGFuZGxlVmFsdWVzLm9wZXJhbmRGb3JJbmRleChpKSk7Ci0gICAgICAgICAgICBpZiAobm9k
ZUluZGV4ID09IE5vTm9kZSkKKyAgICAgICAgICAgIGlmICghbm9kZSkKICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKLSAgICAgICAgICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW25vZGVJbmRleF07
Ci0gICAgICAgICAgICBBU1NFUlQobm9kZS5oYXNMb2NhbCgpKTsKLSAgICAgICAgICAgIG5vZGUu
dmFyaWFibGVBY2Nlc3NEYXRhKCktPnByZWRpY3QoCisgICAgICAgICAgICBBU1NFUlQobm9kZS0+
aGFzTG9jYWwoKSk7CisgICAgICAgICAgICBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+cHJl
ZGljdCgKICAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkZyb21WYWx1ZShtX2dyYXBoLm1fbXVz
dEhhbmRsZVZhbHVlc1tpXSkpOwogICAgICAgICB9CiAgICAgfQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdDRkFQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdDRkFQaGFzZS5jcHAJKHJldmlzaW9uIDE0MDkwNCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ0ZBUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTMgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC04OCwx
MSArODgsMTEgQEAgcHJpdmF0ZToKICAgICAgICAgZGF0YUxvZ0YoIlxuIik7CiAjZW5kaWYKICAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGJsb2NrLT5zaXplKCk7ICsraSkgewotICAg
ICAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRleCA9IGJsb2NrLT5hdChpKTsKLSAgICAgICAgICAg
IGlmICghbV9ncmFwaFtub2RlSW5kZXhdLnNob3VsZEdlbmVyYXRlKCkpCisgICAgICAgICAgICBO
b2RlKiBub2RlID0gYmxvY2stPmF0KGkpOworICAgICAgICAgICAgaWYgKCFub2RlLT5zaG91bGRH
ZW5lcmF0ZSgpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogI2lmIERGR19FTkFCTEUoREVC
VUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKLSAgICAgICAgICAgIGRhdGFMb2dGKCIgICAgICAlcyBA
JXU6ICIsIEdyYXBoOjpvcE5hbWUobV9ncmFwaFtub2RlSW5kZXhdLm9wKCkpLCBub2RlSW5kZXgp
OworICAgICAgICAgICAgZGF0YUxvZ0YoIiAgICAgICVzIEAldTogIiwgR3JhcGg6Om9wTmFtZSht
X2dyYXBoW25vZGVJbmRleF0ub3AoKSksIG5vZGUtPmluZGV4KCkpOwogICAgICAgICAgICAgbV9z
dGF0ZS5kdW1wKFdURjo6ZGF0YUZpbGUoKSk7CiAgICAgICAgICAgICBkYXRhTG9nRigiXG4iKTsK
ICNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDRkdTaW1wbGlmaWNh
dGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0NGR1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAxNDA5MDQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0NGR1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTMgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC02MCw3ICs2MCw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgY29udGlu
dWU7CiAgICAgICAgICAgICAgICAgQVNTRVJUKGJsb2NrLT5pc1JlYWNoYWJsZSk7CiAgICAgICAg
ICAgICAKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKG1fZ3JhcGhbYmxvY2stPmxhc3QoKV0ub3Ao
KSkgeworICAgICAgICAgICAgICAgIHN3aXRjaCAoYmxvY2stPmxhc3QoKS0+b3AoKSkgewogICAg
ICAgICAgICAgICAgIGNhc2UgSnVtcDogewogICAgICAgICAgICAgICAgICAgICAvLyBTdWNjZXNz
b3Igd2l0aCBvbmUgcHJlZGVjZXNzb3IgLT4gbWVyZ2UuCiAgICAgICAgICAgICAgICAgICAgIGlm
IChtX2dyYXBoLm1fYmxvY2tzW21fZ3JhcGguc3VjY2Vzc29yKGJsb2NrLCAwKV0tPm1fcHJlZGVj
ZXNzb3JzLnNpemUoKSA9PSAxKSB7CkBAIC0xMjksMTAgKzEyOSwxMCBAQCBwdWJsaWM6CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgQmxvY2tJbmRleCB0YWtlbkJsb2NrSW5kZXggPSBtX2dy
YXBoLnN1Y2Nlc3NvckZvckNvbmRpdGlvbihibG9jaywgY29uZGl0aW9uKTsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBCbG9ja0luZGV4IG5vdFRha2VuQmxvY2tJbmRleCA9IG1fZ3JhcGgu
c3VjY2Vzc29yRm9yQ29uZGl0aW9uKGJsb2NrLCAhY29uZGl0aW9uKTsKICAgICAgICAgICAgICAg
ICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChtX2dyYXBoW2Js
b2NrLT5sYXN0KCldLmlzVGVybWluYWwoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
Q29kZU9yaWdpbiBib3VuZGFyeUNvZGVPcmlnaW4gPSBtX2dyYXBoW2Jsb2NrLT5sYXN0KCldLmNv
ZGVPcmlnaW47Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaFtibG9jay0+bGFz
dCgpXS5zZXRPcEFuZERlZmF1bHRGbGFncyhQaGFudG9tKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBBU1NFUlQobV9ncmFwaFtibG9jay0+bGFzdCgpXS5yZWZDb3VudCgpID09IDEpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChibG9jay0+bGFzdCgpLT5pc1Rlcm1p
bmFsKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvZGVPcmlnaW4gYm91bmRhcnlD
b2RlT3JpZ2luID0gYmxvY2stPmxhc3QoKS0+Y29kZU9yaWdpbjsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBibG9jay0+bGFzdCgpLT5zZXRPcEFuZERlZmF1bHRGbGFncyhQaGFudG9tKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQoYmxvY2stPmxhc3QoKS0+cmVmQ291
bnQoKSA9PSAxKTsKICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGpldHRpc29uQmxvY2soYmxvY2tJbmRleCwgbm90VGFrZW5CbG9ja0luZGV4LCBi
b3VuZGFyeUNvZGVPcmlnaW4pOwogICAgICAgICAgICAgICAgICAgICAgICAgCkBAIC0xNjAsMTIg
KzE2MCwxMSBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZ0Yo
IkNGR1NpbXBsaWZ5OiBCcmFuY2gtPmp1bXAgY29udmVyc2lvbiB0byBzYW1lIHN1Y2Nlc3NvciBv
biBCbG9jayAjJXUgdG8gQmxvY2sgIyV1LlxuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGJsb2NrSW5kZXgsIHRhcmdldEJsb2NrSW5kZXgpOwogI2VuZGlmCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKG1fZ3JhcGhbYmxvY2stPmxhc3QoKV0uaXNUZXJt
aW5hbCgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb2RlJiBicmFuY2ggPSBtX2dy
YXBoW2Jsb2NrLT5sYXN0KCldOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChi
cmFuY2guaXNUZXJtaW5hbCgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQo
YnJhbmNoLm9wKCkgPT0gQnJhbmNoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmFu
Y2guc2V0T3BBbmREZWZhdWx0RmxhZ3MoUGhhbnRvbSk7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgQVNTRVJUKGJyYW5jaC5yZWZDb3VudCgpID09IDEpOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIE5vZGUqIGJyYW5jaCA9IGJsb2NrLT5sYXN0KCk7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgQVNTRVJUKGJyYW5jaC0+aXNUZXJtaW5hbCgpKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBBU1NFUlQoYnJhbmNoLT5vcCgpID09IEJyYW5jaCk7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYnJhbmNoLT5zZXRPcEFuZERlZmF1bHRGbGFncyhQaGFudG9tKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQoYnJhbmNoLT5yZWZDb3VudCgpID09
IDEpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJsb2NrLT5hcHBlbmROb2RlKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBtX2dyYXBoLCBEb250UmVmQ2hpbGRyZW4sIERvbnRSZWZOb2RlLCBTcGVjTm9uZSwgSnVtcCwK
QEAgLTI2MCw0NSArMjU5LDQzIEBAIHByaXZhdGU6CiAgICAgCiAgICAgdm9pZCBrZWVwT3BlcmFu
ZEFsaXZlKEJhc2ljQmxvY2sqIGJsb2NrLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIGludCBvcGVy
YW5kKQogICAgIHsKLSAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRleCA9IGJsb2NrLT52YXJpYWJs
ZXNBdFRhaWwub3BlcmFuZChvcGVyYW5kKTsKLSAgICAgICAgaWYgKG5vZGVJbmRleCA9PSBOb05v
ZGUpCisgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQo
b3BlcmFuZCk7CisgICAgICAgIGlmICghbm9kZSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgaWYgKG1fZ3JhcGhbbm9kZUluZGV4XS52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+aXNDYXB0dXJl
ZCgpKQorICAgICAgICBpZiAobm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCktPmlzQ2FwdHVyZWQo
KSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgaWYgKG1fZ3JhcGhbbm9kZUluZGV4XS5v
cCgpID09IFNldExvY2FsKQotICAgICAgICAgICAgbm9kZUluZGV4ID0gbV9ncmFwaFtub2RlSW5k
ZXhdLmNoaWxkMSgpLmluZGV4KCk7Ci0gICAgICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW25vZGVJ
bmRleF07Ci0gICAgICAgIGlmICghbm9kZS5zaG91bGRHZW5lcmF0ZSgpKQorICAgICAgICBpZiAo
bm9kZS0+b3AoKSA9PSBTZXRMb2NhbCkKKyAgICAgICAgICAgIG5vZGUgPSBub2RlLT5jaGlsZDEo
KS5ub2RlKCk7CisgICAgICAgIGlmICghbm9kZS0+c2hvdWxkR2VuZXJhdGUoKSkKICAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgQVNTRVJUKG1fZ3JhcGhbbm9kZUluZGV4XS5vcCgpICE9IFNl
dExvY2FsKTsKKyAgICAgICAgQVNTRVJUKG5vZGUtPm9wKCkgIT0gU2V0TG9jYWwpOwogICAgICAg
ICBibG9jay0+YXBwZW5kTm9kZSgKLSAgICAgICAgICAgIG1fZ3JhcGgsIFJlZkNoaWxkcmVuLCBE
b250UmVmTm9kZSwgU3BlY05vbmUsIFBoYW50b20sIGNvZGVPcmlnaW4sIG5vZGVJbmRleCk7Cisg
ICAgICAgICAgICBtX2dyYXBoLCBSZWZDaGlsZHJlbiwgRG9udFJlZk5vZGUsIFNwZWNOb25lLCBQ
aGFudG9tLCBjb2RlT3JpZ2luLCBub2RlKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBmaXhQb3Nz
aWJsZUdldExvY2FsKEJhc2ljQmxvY2sqIGJsb2NrLCBFZGdlJiBlZGdlLCBib29sIGNoYW5nZVJl
ZikKICAgICB7Ci0gICAgICAgIE5vZGUmIGNoaWxkID0gbV9ncmFwaFtlZGdlXTsKLSAgICAgICAg
aWYgKGNoaWxkLm9wKCkgIT0gR2V0TG9jYWwpCisgICAgICAgIE5vZGUqIGNoaWxkID0gZWRnZS5u
b2RlKCk7CisgICAgICAgIGlmIChjaGlsZC0+b3AoKSAhPSBHZXRMb2NhbCkKICAgICAgICAgICAg
IHJldHVybjsKICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCi0gICAg
ICAgIGRhdGFMb2dGKCIgICAgQ29uc2lkZXJpbmcgR2V0TG9jYWwgYXQgQCV1LCBsb2NhbCByJWQu
XG4iLCBlZGdlLmluZGV4KCksIGNoaWxkLmxvY2FsKCkpOworICAgICAgICBkYXRhTG9nRigiICAg
IENvbnNpZGVyaW5nIEdldExvY2FsIGF0IEAldSwgbG9jYWwgciVkLlxuIiwgbm9kZS0+aW5kZXgo
KSwgY2hpbGQtPmxvY2FsKCkpOwogI2VuZGlmCi0gICAgICAgIGlmIChjaGlsZC52YXJpYWJsZUFj
Y2Vzc0RhdGEoKS0+aXNDYXB0dXJlZCgpKSB7CisgICAgICAgIGlmIChjaGlsZC0+dmFyaWFibGVB
Y2Nlc3NEYXRhKCktPmlzQ2FwdHVyZWQoKSkgewogI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFH
QVRJT05fVkVSQk9TRSkKICAgICAgICAgICAgIGRhdGFMb2dGKCIgICAgICAgIEl0J3MgY2FwdHVy
ZWQuXG4iKTsKICNlbmRpZgogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAg
IE5vZGVJbmRleCBvcmlnaW5hbE5vZGVJbmRleCA9IGJsb2NrLT52YXJpYWJsZXNBdFRhaWwub3Bl
cmFuZChjaGlsZC5sb2NhbCgpKTsKKyAgICAgICAgTm9kZSogb3JpZ2luYWxOb2RlID0gYmxvY2st
PnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKGNoaWxkLT5sb2NhbCgpKTsKICNpZiBERkdfRU5BQkxF
KERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCi0gICAgICAgIGRhdGFMb2dGKCIgICAgICAgIERl
YWxpbmcgd2l0aCBvcmlnaW5hbCBAJXUuXG4iLCBvcmlnaW5hbE5vZGVJbmRleCk7CisgICAgICAg
IGRhdGFMb2dGKCIgICAgICAgIERlYWxpbmcgd2l0aCBvcmlnaW5hbCBAJXUuXG4iLCBvcmlnaW5h
bE5vZGUtPmluZGV4KCkpOwogI2VuZGlmCi0gICAgICAgIEFTU0VSVChvcmlnaW5hbE5vZGVJbmRl
eCAhPSBOb05vZGUpOwotICAgICAgICBOb2RlKiBvcmlnaW5hbE5vZGUgPSAmbV9ncmFwaFtvcmln
aW5hbE5vZGVJbmRleF07CisgICAgICAgIEFTU0VSVChvcmlnaW5hbE5vZGVJbmRleCk7CiAjaWYg
REZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQogICAgICAgICBkYXRhTG9nRigi
ICAgICAgICBPcmlnaW5hbCBoYXMgbG9jYWwgciVkLlxuIiwgb3JpZ2luYWxOb2RlLT5sb2NhbCgp
KTsKICNlbmRpZgotICAgICAgICBBU1NFUlQoY2hpbGQubG9jYWwoKSA9PSBvcmlnaW5hbE5vZGUt
PmxvY2FsKCkpOworICAgICAgICBBU1NFUlQoY2hpbGQtPmxvY2FsKCkgPT0gb3JpZ2luYWxOb2Rl
LT5sb2NhbCgpKTsKICAgICAgICAgLy8gUG9zc2liaWxpdGllczoKICAgICAgICAgLy8gU2V0TG9j
YWwgLT4gdGhlIHNlY29uZEJsb2NrIGlzIGdldHRpbmcgdGhlIHZhbHVlIG9mIHNvbWV0aGluZyB0
aGF0IGlzIGltbWVkaWF0ZWx5CiAgICAgICAgIC8vICAgICBhdmFpbGFibGUgaW4gdGhlIGZpcnN0
IGJsb2NrIHdpdGggYSBrbm93biBOb2RlSW5kZXguCkBAIC0zMTIsMTAgKzMwOSw4IEBAIHByaXZh
dGU6CiAgICAgICAgIC8vIEZsdXNoIC0+IHRoZSBzZWNvbmRCbG9jayBpcyBhc2tpbmcgZm9yIGtl
ZXAtYWxpdmUgb24gYW4gb3BlcmFuZCB0aGF0IHRoZSBmaXJzdAogICAgICAgICAvLyAgICAgYmxv
Y2sgd2FzIGZvcmNpbmcgdG8gYmUgYWxpdmUsIHNvIHRoZSBzZWNvbmQgYmxvY2sgc2hvdWxkIHJl
ZmVyIGNoaWxkIG9mCiAgICAgICAgIC8vICAgICB0aGUgZmx1c2guCi0gICAgICAgIGlmIChvcmln
aW5hbE5vZGUtPm9wKCkgPT0gRmx1c2gpIHsKLSAgICAgICAgICAgIG9yaWdpbmFsTm9kZUluZGV4
ID0gb3JpZ2luYWxOb2RlLT5jaGlsZDEoKS5pbmRleCgpOwotICAgICAgICAgICAgb3JpZ2luYWxO
b2RlID0gJm1fZ3JhcGhbb3JpZ2luYWxOb2RlSW5kZXhdOwotICAgICAgICB9CisgICAgICAgIGlm
IChvcmlnaW5hbE5vZGUtPm9wKCkgPT0gRmx1c2gpCisgICAgICAgICAgICBvcmlnaW5hbE5vZGUg
PSBvcmlnaW5hbE5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKICAgICAgICAgc3dpdGNoIChvcmlnaW5h
bE5vZGUtPm9wKCkpIHsKICAgICAgICAgY2FzZSBTZXRMb2NhbDogewogICAgICAgICAgICAgaWYg
KGNoYW5nZVJlZikKQEAgLTMyMyw3ICszMTgsNyBAQCBwcml2YXRlOgogI2lmIERGR19FTkFCTEUo
REVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKICAgICAgICAgICAgIGRhdGFMb2dGKCIgICAgICAg
IEl0J3MgYSBTZXRMb2NhbC5cbiIpOwogI2VuZGlmCi0gICAgICAgICAgICBtX2dyYXBoLmNoYW5n
ZUluZGV4KGVkZ2UsIG9yaWdpbmFsTm9kZS0+Y2hpbGQxKCkuaW5kZXgoKSwgY2hhbmdlUmVmKTsK
KyAgICAgICAgICAgIG1fZ3JhcGguY2hhbmdlQ2hpbGQoZWRnZSwgb3JpZ2luYWxOb2RlLT5jaGls
ZDEoKS5ub2RlKCksIGNoYW5nZVJlZik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQog
ICAgICAgICBjYXNlIEdldExvY2FsOiB7CkBAIC0zMzEsNyArMzI2LDcgQEAgcHJpdmF0ZToKICAg
ICAgICAgICAgIGRhdGFMb2dGKCIgICAgICAgIEl0J3MgYSBHZXRMb2NhbC5cbiIpOwogI2VuZGlm
CiAgICAgICAgICAgICBpZiAob3JpZ2luYWxOb2RlLT5zaG91bGRHZW5lcmF0ZSgpKQotICAgICAg
ICAgICAgICAgIG1fZ3JhcGguY2hhbmdlSW5kZXgoZWRnZSwgb3JpZ2luYWxOb2RlSW5kZXgsIGNo
YW5nZVJlZik7CisgICAgICAgICAgICAgICAgbV9ncmFwaC5jaGFuZ2VDaGlsZChlZGdlLCBvcmln
aW5hbE5vZGUsIGNoYW5nZVJlZik7CiAgICAgICAgICAgICAvLyBJZiB3ZSBoYXZlIGEgR2V0TG9j
YWwgdGhhdCBwb2ludHMgdG8gYSBjaGlsZCBHZXRMb2NhbCB0aGF0IGlzIGRlYWQsIHRoZW4KICAg
ICAgICAgICAgIC8vIHdlIGhhdmUgbm8gbmVlZCB0byBkbyBhbnl0aGluZzogdGhpcyBvcmlnaW5h
bCBHZXRMb2NhbCBpcyBzdGlsbCB2YWxpZC4KICAgICAgICAgICAgIGJyZWFrOwpAQCAtMzc1LDIz
ICszNzAsMjEgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAg
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGRlc3RpbmF0aW9uQmxvY2stPnBoaXMuc2l6ZSgp
OyArK2kpIHsKLSAgICAgICAgICAgIE5vZGVJbmRleCBwaGlOb2RlSW5kZXggPSBkZXN0aW5hdGlv
bkJsb2NrLT5waGlzW2ldOwotICAgICAgICAgICAgTm9kZSYgcGhpTm9kZSA9IG1fZ3JhcGhbcGhp
Tm9kZUluZGV4XTsKLSAgICAgICAgICAgIE5vZGVJbmRleCBteU5vZGVJbmRleCA9IHNvdXJjZUJs
b2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZChwaGlOb2RlLmxvY2FsKCkpOwotI2lmIERGR19F
TkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKLSAgICAgICAgICAgIGRhdGFMb2dGKCJD
b25zaWRlcmluZyByZW1vdmluZyByZWZlcmVuY2UgZnJvbSBwaGkgQCV1IHRvIEAldSBvbiBsb2Nh
bCByJWQ6IiwKLSAgICAgICAgICAgICAgICAgICAgcGhpTm9kZUluZGV4LCBteU5vZGVJbmRleCwg
cGhpTm9kZS5sb2NhbCgpKTsKLSNlbmRpZgotICAgICAgICAgICAgaWYgKG15Tm9kZUluZGV4ID09
IE5vTm9kZSkgeworICAgICAgICAgICAgTm9kZSogcGhpTm9kZSA9IGRlc3RpbmF0aW9uQmxvY2st
PnBoaXNbaV07CisgICAgICAgICAgICBOb2RlKiBteU5vZGUgPSBzb3VyY2VCbG9jay0+dmFyaWFi
bGVzQXRUYWlsLm9wZXJhbmQocGhpTm9kZS0+bG9jYWwoKSk7CisgICAgICAgICAgICBpZiAoIW15
Tm9kZSkgewogICAgICAgICAgICAgICAgIC8vIFRoaXMgd2lsbCBoYXBwZW4gaWYgdGhlcmUgaXMg
YSBwaGkgaW4gdGhlIGRlc3RpbmF0aW9uIHRoYXQgcmVmZXJzIGludG8KICAgICAgICAgICAgICAg
ICAvLyB0aGUgZGVzdGluYXRpb24gaXRzZWxmLgogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwog
ICAgICAgICAgICAgfQotICAgICAgICAgICAgTm9kZSYgbXlOb2RlID0gbV9ncmFwaFtteU5vZGVJ
bmRleF07Ci0gICAgICAgICAgICBpZiAobXlOb2RlLm9wKCkgPT0gR2V0TG9jYWwpCi0gICAgICAg
ICAgICAgICAgbXlOb2RlSW5kZXggPSBteU5vZGUuY2hpbGQxKCkuaW5kZXgoKTsKKyNpZiBERkdf
RU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCisgICAgICAgICAgICBkYXRhTG9nRigi
Q29uc2lkZXJpbmcgcmVtb3ZpbmcgcmVmZXJlbmNlIGZyb20gcGhpIEAldSB0byBAJXUgb24gbG9j
YWwgciVkOiIsCisgICAgICAgICAgICAgICAgICAgICBwaGlOb2RlLT5pbmRleCgpLCBteU5vZGUt
PmluZGV4KCksIHBoaU5vZGUtPmxvY2FsKCkpOworI2VuZGlmCisgICAgICAgICAgICBpZiAobXlO
b2RlLT5vcCgpID09IEdldExvY2FsKQorICAgICAgICAgICAgICAgIG15Tm9kZSA9IG15Tm9kZS0+
Y2hpbGQxKCkubm9kZSgpOwogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gMDsgaiA8IEFk
amFjZW5jeUxpc3Q6OlNpemU7ICsraikKLSAgICAgICAgICAgICAgICByZW1vdmVQb3RlbnRpYWxs
eURlYWRQaGlSZWZlcmVuY2UobXlOb2RlSW5kZXgsIHBoaU5vZGUsIGosIHNvdXJjZUJsb2NrLT5p
c1JlYWNoYWJsZSk7CisgICAgICAgICAgICAgICAgcmVtb3ZlUG90ZW50aWFsbHlEZWFkUGhpUmVm
ZXJlbmNlKG15Tm9kZSwgcGhpTm9kZSwgaiwgc291cmNlQmxvY2stPmlzUmVhY2hhYmxlKTsKICNp
ZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCiAgICAgICAgICAgICBkYXRh
TG9nRigiXG4iKTsKICNlbmRpZgpAQCAtNDE2LDU4ICs0MDksNTcgQEAgcHJpdmF0ZToKICAgICAg
ICAgZml4UGhpcyhibG9ja0luZGV4LCBqZXR0aXNvbmVkQmxvY2tJbmRleCk7CiAgICAgfQogICAg
IAotICAgIHZvaWQgcmVtb3ZlUG90ZW50aWFsbHlEZWFkUGhpUmVmZXJlbmNlKE5vZGVJbmRleCBt
eU5vZGVJbmRleCwgTm9kZSYgcGhpTm9kZSwgdW5zaWduZWQgZWRnZUluZGV4LCBib29sIGNoYW5n
ZVJlZikKKyAgICB2b2lkIHJlbW92ZVBvdGVudGlhbGx5RGVhZFBoaVJlZmVyZW5jZShOb2RlKiBt
eU5vZGUsIE5vZGUqIHBoaU5vZGUsIHVuc2lnbmVkIGVkZ2VJbmRleCwgYm9vbCBjaGFuZ2VSZWYp
CiAgICAgewotICAgICAgICBpZiAocGhpTm9kZS5jaGlsZHJlbi5jaGlsZChlZGdlSW5kZXgpLmlu
ZGV4VW5jaGVja2VkKCkgIT0gbXlOb2RlSW5kZXgpCisgICAgICAgIGlmIChwaGlOb2RlLT5jaGls
ZHJlbi5jaGlsZChlZGdlSW5kZXgpLm5vZGUoKSAhPSBteU5vZGUpCiAgICAgICAgICAgICByZXR1
cm47CiAjaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQogICAgICAgICBk
YXRhTG9nRigiIFJlbW92aW5nIHJlZmVyZW5jZSBhdCBjaGlsZCAldS4iLCBlZGdlSW5kZXgpOwog
I2VuZGlmCi0gICAgICAgIGlmIChjaGFuZ2VSZWYgJiYgcGhpTm9kZS5zaG91bGRHZW5lcmF0ZSgp
KQotICAgICAgICAgICAgbV9ncmFwaC5kZXJlZihteU5vZGVJbmRleCk7Ci0gICAgICAgIHBoaU5v
ZGUuY2hpbGRyZW4ucmVtb3ZlRWRnZUZyb21CYWcoZWRnZUluZGV4KTsKKyAgICAgICAgaWYgKGNo
YW5nZVJlZiAmJiBwaGlOb2RlLT5zaG91bGRHZW5lcmF0ZSgpKQorICAgICAgICAgICAgbV9ncmFw
aC5kZXJlZihteU5vZGUpOworICAgICAgICBwaGlOb2RlLT5jaGlsZHJlbi5yZW1vdmVFZGdlRnJv
bUJhZyhlZGdlSW5kZXgpOwogICAgIH0KICAgICAKICAgICBzdHJ1Y3QgT3BlcmFuZFN1YnN0aXR1
dGlvbiB7CiAgICAgICAgIE9wZXJhbmRTdWJzdGl0dXRpb24oKQotICAgICAgICAgICAgOiBvbGRD
aGlsZChOb05vZGUpCi0gICAgICAgICAgICAsIG5ld0NoaWxkKE5vTm9kZSkKKyAgICAgICAgICAg
IDogb2xkQ2hpbGQoMCkKKyAgICAgICAgICAgICwgbmV3Q2hpbGQoMCkKICAgICAgICAgewogICAg
ICAgICB9CiAgICAgICAgIAotICAgICAgICBleHBsaWNpdCBPcGVyYW5kU3Vic3RpdHV0aW9uKE5v
ZGVJbmRleCBvbGRDaGlsZCkKKyAgICAgICAgZXhwbGljaXQgT3BlcmFuZFN1YnN0aXR1dGlvbihO
b2RlKiBvbGRDaGlsZCkKICAgICAgICAgICAgIDogb2xkQ2hpbGQob2xkQ2hpbGQpCiAgICAgICAg
ICAgICAsIG5ld0NoaWxkKG9sZENoaWxkKQogICAgICAgICB7CiAgICAgICAgIH0KICAgICAgICAg
Ci0gICAgICAgIE9wZXJhbmRTdWJzdGl0dXRpb24oTm9kZUluZGV4IG9sZENoaWxkLCBOb2RlSW5k
ZXggbmV3Q2hpbGQpCisgICAgICAgIE9wZXJhbmRTdWJzdGl0dXRpb24oTm9kZSogb2xkQ2hpbGQs
IE5vZGUqIG5ld0NoaWxkKQogICAgICAgICAgICAgOiBvbGRDaGlsZChvbGRDaGlsZCkKICAgICAg
ICAgICAgICwgbmV3Q2hpbGQobmV3Q2hpbGQpCiAgICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VS
VCgob2xkQ2hpbGQgPT0gTm9Ob2RlKSA9PSAobmV3Q2hpbGQgPT0gTm9Ob2RlKSk7CisgICAgICAg
ICAgICBBU1NFUlQoKCFvbGRDaGlsZCkgPT0gKCFuZXdDaGlsZCkpOwogICAgICAgICB9CiAgICAg
ICAgIAotICAgICAgICB2b2lkIGR1bXAoRklMRSogb3V0KQorICAgICAgICB2b2lkIGR1bXAoUHJp
bnRTdHJlYW0mIG91dCkgY29uc3QKICAgICAgICAgewotICAgICAgICAgICAgaWYgKG9sZENoaWxk
ID09IE5vTm9kZSkKLSAgICAgICAgICAgICAgICBmcHJpbnRmKG91dCwgIi0iKTsKKyAgICAgICAg
ICAgIGlmICghb2xkQ2hpbGQpCisgICAgICAgICAgICAgICAgb3V0LnByaW50ZihvdXQsICItIik7
CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZnByaW50ZihvdXQsICJAJXUgLT4g
QCV1Iiwgb2xkQ2hpbGQsIG5ld0NoaWxkKTsKKyAgICAgICAgICAgICAgICBvdXQucHJpbnRmKG91
dCwgIkAldSAtPiBAJXUiLCBvbGRDaGlsZC0+aW5kZXgoKSwgbmV3Q2hpbGQtPmluZGV4KCkpOwog
ICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBOb2RlSW5kZXggb2xkQ2hpbGQ7Ci0gICAgICAg
IE5vZGVJbmRleCBuZXdDaGlsZDsKKyAgICAgICAgTm9kZSogb2xkQ2hpbGQ7CisgICAgICAgIE5v
ZGUqIG5ld0NoaWxkOwogICAgIH07CiAgICAgCi0gICAgTm9kZUluZGV4IHNraXBHZXRMb2NhbChO
b2RlSW5kZXggbm9kZUluZGV4KQorICAgIE5vZGUqIHNraXBHZXRMb2NhbChOb2RlKiBub2RlKQog
ICAgIHsKLSAgICAgICAgaWYgKG5vZGVJbmRleCA9PSBOb05vZGUpCi0gICAgICAgICAgICByZXR1
cm4gTm9Ob2RlOwotICAgICAgICBOb2RlJiBub2RlID0gbV9ncmFwaFtub2RlSW5kZXhdOwotICAg
ICAgICBpZiAobm9kZS5vcCgpID09IEdldExvY2FsKQotICAgICAgICAgICAgcmV0dXJuIG5vZGUu
Y2hpbGQxKCkuaW5kZXgoKTsKLSAgICAgICAgcmV0dXJuIG5vZGVJbmRleDsKKyAgICAgICAgaWYg
KCFub2RlKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIGlmIChub2RlLT5vcCgpID09
IEdldExvY2FsKQorICAgICAgICAgICAgcmV0dXJuIG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKKyAg
ICAgICAgcmV0dXJuIG5vZGU7CiAgICAgfQogICAgIAogICAgIHZvaWQgcmVjb3JkUG9zc2libGVJ
bmNvbWluZ1JlZmVyZW5jZSgKQEAgLTQ3NywzMCArNDY5LDI4IEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICBza2lwR2V0TG9jYWwoc2Vjb25kQmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKG9w
ZXJhbmQpKSk7CiAgICAgfQogICAgIAotICAgIHZvaWQgcmVjb3JkTmV3VGFyZ2V0KE9wZXJhbmRz
PE9wZXJhbmRTdWJzdGl0dXRpb24+JiBzdWJzdGl0dXRpb25zLCBpbnQgb3BlcmFuZCwgTm9kZUlu
ZGV4IG5vZGVJbmRleCkKKyAgICB2b2lkIHJlY29yZE5ld1RhcmdldChPcGVyYW5kczxPcGVyYW5k
U3Vic3RpdHV0aW9uPiYgc3Vic3RpdHV0aW9ucywgaW50IG9wZXJhbmQsIE5vZGVJbmRleCBOb2Rl
KiBub2RlKQogICAgIHsKLSAgICAgICAgQVNTRVJUKG1fZ3JhcGhbbm9kZUluZGV4XS5vcCgpID09
IFNldExvY2FsCi0gICAgICAgICAgICAgICB8fCBtX2dyYXBoW25vZGVJbmRleF0ub3AoKSA9PSBT
ZXRBcmd1bWVudAotICAgICAgICAgICAgICAgfHwgbV9ncmFwaFtub2RlSW5kZXhdLm9wKCkgPT0g
Rmx1c2gKLSAgICAgICAgICAgICAgIHx8IG1fZ3JhcGhbbm9kZUluZGV4XS5vcCgpID09IFBoaSk7
Ci0gICAgICAgIHN1YnN0aXR1dGlvbnMub3BlcmFuZChvcGVyYW5kKS5uZXdDaGlsZCA9IG5vZGVJ
bmRleDsKKyAgICAgICAgQVNTRVJUKG5vZGUtPm9wKCkgPT0gU2V0TG9jYWwKKyAgICAgICAgICAg
ICAgIHx8IG5vZGUtPm9wKCkgPT0gU2V0QXJndW1lbnQKKyAgICAgICAgICAgICAgIHx8IG5vZGUt
Pm9wKCkgPT0gRmx1c2gKKyAgICAgICAgICAgICAgIHx8IG5vZGUtPm9wKCkgPT0gUGhpKTsKKyAg
ICAgICAgc3Vic3RpdHV0aW9ucy5vcGVyYW5kKG9wZXJhbmQpLm5ld0NoaWxkID0gbm9kZTsKICAg
ICB9CiAgICAgCiAgICAgdm9pZCBmaXhUYWlsT3BlcmFuZCgKICAgICAgICAgQmFzaWNCbG9jayog
Zmlyc3RCbG9jaywgQmFzaWNCbG9jayogc2Vjb25kQmxvY2ssIGludCBvcGVyYW5kLAogICAgICAg
ICBPcGVyYW5kczxPcGVyYW5kU3Vic3RpdHV0aW9uPiYgc3Vic3RpdHV0aW9ucykKICAgICB7Ci0g
ICAgICAgIE5vZGVJbmRleCBhdFNlY29uZFRhaWwgPSBzZWNvbmRCbG9jay0+dmFyaWFibGVzQXRU
YWlsLm9wZXJhbmQob3BlcmFuZCk7CisgICAgICAgIE5vZGUqIGF0U2Vjb25kVGFpbCA9IHNlY29u
ZEJsb2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZChvcGVyYW5kKTsKICAgICAgICAgCi0gICAg
ICAgIGlmIChhdFNlY29uZFRhaWwgPT0gTm9Ob2RlKSB7CisgICAgICAgIGlmICghYXRTZWNvbmRU
YWlsKSB7CiAgICAgICAgICAgICAvLyBJZiB0aGUgdmFyaWFibGUgaXMgZGVhZCBhdCB0aGUgZW5k
IG9mIHRoZSBzZWNvbmQgYmxvY2ssIHRoZW4gZG8gbm90aGluZzsgZXNzZW50aWFsbHkKICAgICAg
ICAgICAgIC8vIHRoaXMgbWVhbnMgdGhhdCB3ZSB3YW50IHRoZSB0YWlsIHN0YXRlIHRvIHJlZmxl
Y3Qgd2hhdGV2ZXIgdGhlIGZpcnN0IGJsb2NrIGRpZC4KICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgfQogCi0gICAgICAgIE5vZGUmIHNlY29uZE5vZGUgPSBtX2dyYXBoW2F0U2Vjb25kVGFp
bF07Ci0gICAgICAgIAotICAgICAgICBzd2l0Y2ggKHNlY29uZE5vZGUub3AoKSkgeworICAgICAg
ICBzd2l0Y2ggKGF0U2Vjb25kVGFpbC0+b3AoKSkgewogICAgICAgICBjYXNlIFNldExvY2FsOgog
ICAgICAgICBjYXNlIEZsdXNoOiB7CiAgICAgICAgICAgICAvLyBUaGUgc2Vjb25kIGJsb2NrIGRp
ZCBpbnRlcmVzdGluZyB0aGluZ3MgdG8gdGhlIHZhcmlhYmxlcywgc28gdXBkYXRlIHRoZSB0YWls
CkBAIC01MTEsNyArNTAxLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIAogICAgICAgICBjYXNl
IFBoaTogewogICAgICAgICAgICAgLy8gS2VlcCB3aGF0IHdhcyBpbiB0aGUgZmlyc3QgYmxvY2su
Ci0gICAgICAgICAgICBBU1NFUlQoZmlyc3RCbG9jay0+dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQo
b3BlcmFuZCkgIT0gTm9Ob2RlKTsKKyAgICAgICAgICAgIEFTU0VSVChmaXJzdEJsb2NrLT52YXJp
YWJsZXNBdFRhaWwub3BlcmFuZChvcGVyYW5kKSk7CiAgICAgICAgICAgICByZWNvcmROZXdUYXJn
ZXQoc3Vic3RpdHV0aW9ucywgb3BlcmFuZCwgc2tpcEdldExvY2FsKGZpcnN0QmxvY2stPnZhcmlh
Ymxlc0F0VGFpbC5vcGVyYW5kKG9wZXJhbmQpKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgfQpAQCAtNTIwLDI4ICs1MTAsMjggQEAgcHJpdmF0ZToKICAgICAgICAgICAgIC8vIElmIGl0
J3MgYSBHZXRMb2NhbCBvbiBhIGNhcHR1cmVkIHZhciwgdGhlbiBkZWZpbml0ZWx5IGtlZXAgd2hh
dCB3YXMKICAgICAgICAgICAgIC8vIGluIHRoZSBzZWNvbmQgYmxvY2suIEluIHBhcnRpY3VsYXIs
IGl0J3MgcG9zc2libGUgdGhhdCB0aGUgZmlyc3QKICAgICAgICAgICAgIC8vIGJsb2NrIGRvZXNu
J3QgZXZlbiBrbm93IGFib3V0IHRoaXMgdmFyaWFibGUuCi0gICAgICAgICAgICBpZiAoc2Vjb25k
Tm9kZS52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+aXNDYXB0dXJlZCgpKSB7CisgICAgICAgICAgICBp
ZiAoYXRTZWNvbmRUYWlsLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+aXNDYXB0dXJlZCgpKSB7CiAg
ICAgICAgICAgICAgICAgZmlyc3RCbG9jay0+dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQob3BlcmFu
ZCkgPSBhdFNlY29uZFRhaWw7Ci0gICAgICAgICAgICAgICAgcmVjb3JkTmV3VGFyZ2V0KHN1YnN0
aXR1dGlvbnMsIG9wZXJhbmQsIHNlY29uZE5vZGUuY2hpbGQxKCkuaW5kZXgoKSk7CisgICAgICAg
ICAgICAgICAgcmVjb3JkTmV3VGFyZ2V0KHN1YnN0aXR1dGlvbnMsIG9wZXJhbmQsIGF0U2Vjb25k
VGFpbC0+Y2hpbGQxKCkuaW5kZXgoKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgICAgIC8vIEl0J3MgcG9zc2libGUgdGhhdCB0
aGUgc2Vjb25kIGJsb2NrIGhhZCBhIEdldExvY2FsIGFuZCB0aGUgZmlyc3QgYmxvY2sKICAgICAg
ICAgICAgIC8vIGhhZCBhIFNldEFyZ3VtZW50IG9yIGEgUGhpLiBUaGVuIHVwZGF0ZSB0aGUgdGFp
bC4gT3RoZXJ3aXNlIGtlZXAgd2hhdCB3YXMgaW4gdGhlCiAgICAgICAgICAgICAvLyBmaXJzdCBi
bG9jay4KLSAgICAgICAgICAgIE5vZGVJbmRleCBhdEZpcnN0VGFpbCA9IGZpcnN0QmxvY2stPnZh
cmlhYmxlc0F0VGFpbC5vcGVyYW5kKG9wZXJhbmQpOwotICAgICAgICAgICAgQVNTRVJUKGF0Rmly
c3RUYWlsICE9IE5vTm9kZSk7Ci0gICAgICAgICAgICBzd2l0Y2ggKG1fZ3JhcGhbYXRGaXJzdFRh
aWxdLm9wKCkpIHsKKyAgICAgICAgICAgIE5vZGUqIGF0Rmlyc3RUYWlsID0gZmlyc3RCbG9jay0+
dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQob3BlcmFuZCk7CisgICAgICAgICAgICBBU1NFUlQoYXRG
aXJzdFRhaWwpOworICAgICAgICAgICAgc3dpdGNoIChhdEZpcnN0VGFpbC0+b3AoKSkgewogICAg
ICAgICAgICAgY2FzZSBTZXRBcmd1bWVudDoKICAgICAgICAgICAgIGNhc2UgUGhpOgogICAgICAg
ICAgICAgICAgIGZpcnN0QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKG9wZXJhbmQpID0g
YXRTZWNvbmRUYWlsOwotICAgICAgICAgICAgICAgIHJlY29yZE5ld1RhcmdldChzdWJzdGl0dXRp
b25zLCBvcGVyYW5kLCBzZWNvbmROb2RlLmNoaWxkMSgpLmluZGV4KCkpOworICAgICAgICAgICAg
ICAgIHJlY29yZE5ld1RhcmdldChzdWJzdGl0dXRpb25zLCBvcGVyYW5kLCBhdFNlY29uZFRhaWwt
PmNoaWxkMSgpLmluZGV4KCkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgICAg
ICBkZWZhdWx0OgogICAgICAgICAgICAgICAgIC8vIEtlZXAgd2hhdCB3YXMgaW4gdGhlIGZpcnN0
IGJsb2NrLCBhbmQgYWRqdXN0IHRoZSBzdWJzdGl0dXRpb24gdG8gYWNjb3VudCBmb3IKICAgICAg
ICAgICAgICAgICAvLyB0aGUgZmFjdCB0aGF0IHN1Y2Nlc3NvcnMgd2lsbCByZWZlciB0byB0aGUg
Y2hpbGQgb2YgdGhlIEdldExvY2FsLgotICAgICAgICAgICAgICAgIEFTU0VSVChmaXJzdEJsb2Nr
LT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZChvcGVyYW5kKSAhPSBOb05vZGUpOworICAgICAgICAg
ICAgICAgIEFTU0VSVChmaXJzdEJsb2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZChvcGVyYW5k
KSk7CiAgICAgICAgICAgICAgICAgcmVjb3JkTmV3VGFyZ2V0KHN1YnN0aXR1dGlvbnMsIG9wZXJh
bmQsIHNraXBHZXRMb2NhbChmaXJzdEJsb2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZChvcGVy
YW5kKSkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQpAQCAtNTY3LDEw
ICs1NTcsMTAgQEAgcHJpdmF0ZToKICAgICAgICAgCiAgICAgICAgIC8vIFJlbW92ZSB0aGUgdGVy
bWluYWwgb2YgZmlyc3RCbG9jayBzaW5jZSB3ZSBkb24ndCBuZWVkIGl0IGFueW1vcmUuIFdlbGws
IHdlIGRvbid0CiAgICAgICAgIC8vIHJlYWxseSByZW1vdmUgaXQ7IHdlIGFjdHVhbGx5IHR1cm4g
aXQgaW50byBhIFBoYW50b20uCi0gICAgICAgIEFTU0VSVChtX2dyYXBoW2ZpcnN0QmxvY2stPmxh
c3QoKV0uaXNUZXJtaW5hbCgpKTsKLSAgICAgICAgQ29kZU9yaWdpbiBib3VuZGFyeUNvZGVPcmln
aW4gPSBtX2dyYXBoW2ZpcnN0QmxvY2stPmxhc3QoKV0uY29kZU9yaWdpbjsKLSAgICAgICAgbV9n
cmFwaFtmaXJzdEJsb2NrLT5sYXN0KCldLnNldE9wQW5kRGVmYXVsdEZsYWdzKFBoYW50b20pOwot
ICAgICAgICBBU1NFUlQobV9ncmFwaFtmaXJzdEJsb2NrLT5sYXN0KCldLnJlZkNvdW50KCkgPT0g
MSk7CisgICAgICAgIEFTU0VSVChmaXJzdEJsb2NrLT5sYXN0KCktPmlzVGVybWluYWwoKSk7Cisg
ICAgICAgIENvZGVPcmlnaW4gYm91bmRhcnlDb2RlT3JpZ2luID0gZmlyc3RCbG9jay0+bGFzdCgp
LT5jb2RlT3JpZ2luOworICAgICAgICBmaXJzdEJsb2NrLT5sYXN0KCktPnNldE9wQW5kRGVmYXVs
dEZsYWdzKFBoYW50b20pOworICAgICAgICBBU1NFUlQoZmlyc3RCbG9jay0+bGFzdCgpLT5yZWZD
b3VudCgpID09IDEpOwogICAgICAgICAKICAgICAgICAgaWYgKGpldHRpc29uZWRCbG9ja0luZGV4
ICE9IE5vQmxvY2spIHsKICAgICAgICAgICAgIEJhc2ljQmxvY2sqIGpldHRpc29uZWRCbG9jayA9
IG1fZ3JhcGgubV9ibG9ja3NbamV0dGlzb25lZEJsb2NrSW5kZXhdLmdldCgpOwpAQCAtNTk5LDI4
ICs1ODksMjUgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHJlY29yZFBvc3NpYmxlSW5jb21pbmdS
ZWZlcmVuY2Uoc2Vjb25kQmxvY2ssIHN1YnN0aXR1dGlvbnMsIGkpOwogCiAgICAgICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgc2Vjb25kQmxvY2stPnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAg
ICBOb2RlSW5kZXggbm9kZUluZGV4ID0gc2Vjb25kQmxvY2stPmF0KGkpOwotICAgICAgICAgICAg
Tm9kZSYgbm9kZSA9IG1fZ3JhcGhbbm9kZUluZGV4XTsKKyAgICAgICAgICAgIE5vZGUqIG5vZGUg
PSBzZWNvbmRCbG9jay0+YXQoaSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGJvb2wgY2hp
bGRyZW5BbHJlYWR5Rml4ZWQgPSBmYWxzZTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgc3dp
dGNoIChub2RlLm9wKCkpIHsKKyAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewogICAg
ICAgICAgICAgY2FzZSBQaGFudG9tOiB7Ci0gICAgICAgICAgICAgICAgaWYgKCFub2RlLmNoaWxk
MSgpKQorICAgICAgICAgICAgICAgIGlmICghbm9kZS0+Y2hpbGQxKCkpCiAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIEFTU0VSVChu
b2RlLnNob3VsZEdlbmVyYXRlKCkpOwotICAgICAgICAgICAgICAgIE5vZGUmIHBvc3NpYmxlTG9j
YWxPcCA9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV07Ci0gICAgICAgICAgICAgICAgaWYgKHBvc3Np
YmxlTG9jYWxPcC5vcCgpICE9IEdldExvY2FsCi0gICAgICAgICAgICAgICAgICAgICYmIHBvc3Np
YmxlTG9jYWxPcC5oYXNMb2NhbCgpCi0gICAgICAgICAgICAgICAgICAgICYmICFwb3NzaWJsZUxv
Y2FsT3AudmFyaWFibGVBY2Nlc3NEYXRhKCktPmlzQ2FwdHVyZWQoKSkgewotICAgICAgICAgICAg
ICAgICAgICBOb2RlSW5kZXggc2V0TG9jYWxJbmRleCA9Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBmaXJzdEJsb2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZChwb3NzaWJsZUxvY2FsT3AubG9j
YWwoKSk7Ci0gICAgICAgICAgICAgICAgICAgIE5vZGUmIHNldExvY2FsID0gbV9ncmFwaFtzZXRM
b2NhbEluZGV4XTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHNldExvY2FsLm9wKCkgPT0gU2V0
TG9jYWwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguY2hhbmdlRWRnZShub2Rl
LmNoaWxkcmVuLmNoaWxkMSgpLCBzZXRMb2NhbC5jaGlsZDEoKSk7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBBU1NFUlQoIW5vZGUuY2hpbGQyKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAg
QVNTRVJUKCFub2RlLmNoaWxkMygpKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQobm9kZS0+c2hv
dWxkR2VuZXJhdGUoKSk7CisgICAgICAgICAgICAgICAgTm9kZSogcG9zc2libGVMb2NhbE9wID0g
bm9kZS0+Y2hpbGQxKCkubm9kZSgpOworICAgICAgICAgICAgICAgIGlmIChwb3NzaWJsZUxvY2Fs
T3AtPm9wKCkgIT0gR2V0TG9jYWwKKyAgICAgICAgICAgICAgICAgICAgJiYgcG9zc2libGVMb2Nh
bE9wLT5oYXNMb2NhbCgpCisgICAgICAgICAgICAgICAgICAgICYmICFwb3NzaWJsZUxvY2FsT3At
PnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5pc0NhcHR1cmVkKCkpIHsKKyAgICAgICAgICAgICAgICAg
ICAgTm9kZSogc2V0TG9jYWwgPSBmaXJzdEJsb2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZChw
b3NzaWJsZUxvY2FsT3AtPmxvY2FsKCkpOworICAgICAgICAgICAgICAgICAgICBpZiAoc2V0TG9j
YWwtPm9wKCkgPT0gU2V0TG9jYWwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgu
Y2hhbmdlRWRnZShub2RlLT5jaGlsZHJlbi5jaGlsZDEoKSwgc2V0TG9jYWwtPmNoaWxkMSgpKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVCghbm9kZS0+Y2hpbGQyKCkpOworICAgICAg
ICAgICAgICAgICAgICAgICAgQVNTRVJUKCFub2RlLT5jaGlsZDMoKSk7CiAgICAgICAgICAgICAg
ICAgICAgICAgICBjaGlsZHJlbkFscmVhZHlGaXhlZCA9IHRydWU7CiAgICAgICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICB9CkBAIC02MzcsMTEgKzYyNCwxMSBAQCBwcml2YXRlOgog
ICAgICAgICAgICAgICAgIC8vIFNpbWlsYXJseSBmb3IgR2V0TG9jYWw7IGl0IGNvdWxkIHVzZSBh
bnkgb2YgdGhvc2UgZXhjZXB0IGZvcgogICAgICAgICAgICAgICAgIC8vIEdldExvY2FsLiBJZiBp
dCB1c2VzIGEgUGhpIHRoZW4gaXQgc2hvdWxkIGJlIHJlZGlyZWN0ZWQgdG8gdXNlIGEKICAgICAg
ICAgICAgICAgICAvLyBQaGkgZnJvbSB0aGUgdGFpbCBvcGVyYW5kLgotICAgICAgICAgICAgICAg
IGlmIChtX2dyYXBoW25vZGUuY2hpbGQxKCldLm9wKCkgIT0gUGhpKQorICAgICAgICAgICAgICAg
IGlmIChub2RlLT5jaGlsZDEoKS0+b3AoKSAhPSBQaGkpCiAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIE5vZGVJbmRleCBhdEZpcnN0
SW5kZXggPSBmaXJzdEJsb2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZChub2RlLmxvY2FsKCkp
OwotICAgICAgICAgICAgICAgIG1fZ3JhcGguY2hhbmdlRWRnZShub2RlLmNoaWxkcmVuLmNoaWxk
MSgpLCBFZGdlKHNraXBHZXRMb2NhbChhdEZpcnN0SW5kZXgpKSwgbm9kZS5zaG91bGRHZW5lcmF0
ZSgpKTsKKyAgICAgICAgICAgICAgICBOb2RlKiBhdEZpcnN0ID0gZmlyc3RCbG9jay0+dmFyaWFi
bGVzQXRUYWlsLm9wZXJhbmQobm9kZS0+bG9jYWwoKSk7CisgICAgICAgICAgICAgICAgbV9ncmFw
aC5jaGFuZ2VFZGdlKG5vZGUtPmNoaWxkcmVuLmNoaWxkMSgpLCBFZGdlKHNraXBHZXRMb2NhbChh
dEZpcnN0KSksIG5vZGUtPnNob3VsZEdlbmVyYXRlKCkpOwogICAgICAgICAgICAgICAgIGNoaWxk
cmVuQWxyZWFkeUZpeGVkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgIH0KQEAgLTY1MSwzMCArNjM4LDMwIEBAIHByaXZhdGU6CiAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAKICAgICAgICAgICAgIGlmICghY2hpbGRyZW5BbHJlYWR5Rml4ZWQpIHsKLSAgICAg
ICAgICAgICAgICBib29sIGNoYW5nZVJlZiA9IG5vZGUuc2hvdWxkR2VuZXJhdGUoKTsKKyAgICAg
ICAgICAgICAgICBib29sIGNoYW5nZVJlZiA9IG5vZGUtPnNob3VsZEdlbmVyYXRlKCk7CiAgICAg
ICAgICAgICAKICAgICAgICAgICAgICAgICAvLyBJZiB0aGUgY2hpbGQgaXMgYSBHZXRMb2NhbCwg
dGhlbiB3ZSBtaWdodCBsaWtlIHRvIGZpeCBpdC4KLSAgICAgICAgICAgICAgICBpZiAobm9kZS5m
bGFncygpICYgTm9kZUhhc1ZhckFyZ3MpIHsKLSAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBjaGlsZElkeCA9IG5vZGUuZmlyc3RDaGlsZCgpOwotICAgICAgICAgICAgICAgICAgICAg
ICAgIGNoaWxkSWR4IDwgbm9kZS5maXJzdENoaWxkKCkgKyBub2RlLm51bUNoaWxkcmVuKCk7Cisg
ICAgICAgICAgICAgICAgaWYgKG5vZGUtPmZsYWdzKCkgJiBOb2RlSGFzVmFyQXJncykgeworICAg
ICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGNoaWxkSWR4ID0gbm9kZS0+Zmlyc3RDaGls
ZCgpOworICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkSWR4IDwgbm9kZS0+Zmlyc3RDaGls
ZCgpICsgbm9kZS0+bnVtQ2hpbGRyZW4oKTsKICAgICAgICAgICAgICAgICAgICAgICAgICArK2No
aWxkSWR4KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoISFtX2dyYXBoLm1fdmFyQXJn
Q2hpbGRyZW5bY2hpbGRJZHhdKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpeFBvc3Np
YmxlR2V0TG9jYWwoZmlyc3RCbG9jaywgbV9ncmFwaC5tX3ZhckFyZ0NoaWxkcmVuW2NoaWxkSWR4
XSwgY2hhbmdlUmVmKTsKICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0g
ZWxzZSBpZiAoISFub2RlLmNoaWxkMSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGZpeFBvc3Np
YmxlR2V0TG9jYWwoZmlyc3RCbG9jaywgbm9kZS5jaGlsZHJlbi5jaGlsZDEoKSwgY2hhbmdlUmVm
KTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCEhbm9kZS5jaGlsZDIoKSkgewotICAgICAgICAg
ICAgICAgICAgICAgICAgZml4UG9zc2libGVHZXRMb2NhbChmaXJzdEJsb2NrLCBub2RlLmNoaWxk
cmVuLmNoaWxkMigpLCBjaGFuZ2VSZWYpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEh
bm9kZS5jaGlsZDMoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXhQb3NzaWJsZUdl
dExvY2FsKGZpcnN0QmxvY2ssIG5vZGUuY2hpbGRyZW4uY2hpbGQzKCksIGNoYW5nZVJlZik7Cisg
ICAgICAgICAgICAgICAgfSBlbHNlIGlmICghIW5vZGUtPmNoaWxkMSgpKSB7CisgICAgICAgICAg
ICAgICAgICAgIGZpeFBvc3NpYmxlR2V0TG9jYWwoZmlyc3RCbG9jaywgbm9kZS0+Y2hpbGRyZW4u
Y2hpbGQxKCksIGNoYW5nZVJlZik7CisgICAgICAgICAgICAgICAgICAgIGlmICghIW5vZGUtPmNo
aWxkMigpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBmaXhQb3NzaWJsZUdldExvY2FsKGZp
cnN0QmxvY2ssIG5vZGUtPmNoaWxkcmVuLmNoaWxkMigpLCBjaGFuZ2VSZWYpOworICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKCEhbm9kZS0+Y2hpbGQzKCkpCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZml4UG9zc2libGVHZXRMb2NhbChmaXJzdEJsb2NrLCBub2RlLT5jaGlsZHJlbi5j
aGlsZDMoKSwgY2hhbmdlUmVmKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgZmlyc3RCbG9jay0+YXBwZW5kKG5v
ZGVJbmRleCk7CisgICAgICAgICAgICBmaXJzdEJsb2NrLT5hcHBlbmQobm9kZSk7CiAgICAgICAg
IH0KICAgICAgICAgCi0gICAgICAgIEFTU0VSVChtX2dyYXBoW2ZpcnN0QmxvY2stPmxhc3QoKV0u
aXNUZXJtaW5hbCgpKTsKKyAgICAgICAgQVNTRVJUKGZpcnN0QmxvY2stPmxhc3QoKS0+aXNUZXJt
aW5hbCgpKTsKICAgICAgICAgCiAgICAgICAgIC8vIEZpeCB0aGUgcHJlZGVjZXNzb3JzIG9mIG15
IG5ldyBzdWNjZXNzb3JzLiBUaGlzIGlzIHRyaWNreSwgc2luY2Ugd2UgYXJlIGdvaW5nIHRvIHJl
c2V0CiAgICAgICAgIC8vIGFsbCBwcmVkZWNlc3NvcnMgYW55d2F5IGR1ZSB0byByZWFjaGFiaWxp
dHkgYW5hbHlzaXMuIEJ1dCB3ZSBuZWVkIHRvIGZpeCB0aGUKQEAgLTcwNCwyNiArNjkxLDI0IEBA
IHByaXZhdGU6CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1fZ3JhcGgubnVtU3VjY2Vzc29y
cyhmaXJzdEJsb2NrKTsgaS0tOykgewogICAgICAgICAgICAgQmFzaWNCbG9jayogc3VjY2Vzc29y
ID0gbV9ncmFwaC5tX2Jsb2Nrc1ttX2dyYXBoLnN1Y2Nlc3NvcihmaXJzdEJsb2NrLCBpKV0uZ2V0
KCk7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSAwOyBqIDwgc3VjY2Vzc29yLT5waGlz
LnNpemUoKTsgKytqKSB7Ci0gICAgICAgICAgICAgICAgTm9kZUluZGV4IHBoaU5vZGVJbmRleCA9
IHN1Y2Nlc3Nvci0+cGhpc1tqXTsKLSAgICAgICAgICAgICAgICBOb2RlJiBwaGlOb2RlID0gbV9n
cmFwaFtwaGlOb2RlSW5kZXhdOwotICAgICAgICAgICAgICAgIGJvb2wgY2hhbmdlUmVmID0gcGhp
Tm9kZS5zaG91bGRHZW5lcmF0ZSgpOwotICAgICAgICAgICAgICAgIE9wZXJhbmRTdWJzdGl0dXRp
b24gc3Vic3RpdHV0aW9uID0gc3Vic3RpdHV0aW9ucy5vcGVyYW5kKHBoaU5vZGUubG9jYWwoKSk7
CisgICAgICAgICAgICAgICAgTm9kZSogcGhpTm9kZSA9IHN1Y2Nlc3Nvci0+cGhpc1tqXTsKKyAg
ICAgICAgICAgICAgICBib29sIGNoYW5nZVJlZiA9IHBoaU5vZGUtPnNob3VsZEdlbmVyYXRlKCk7
CisgICAgICAgICAgICAgICAgT3BlcmFuZFN1YnN0aXR1dGlvbiBzdWJzdGl0dXRpb24gPSBzdWJz
dGl0dXRpb25zLm9wZXJhbmQocGhpTm9kZS0+bG9jYWwoKSk7CiAjaWYgREZHX0VOQUJMRShERUJV
R19QUk9QQUdBVElPTl9WRVJCT1NFKQotICAgICAgICAgICAgICAgIGRhdGFMb2dGKCIgICAgUGVy
Zm9ybWluZyBvcGVyYW5kIHN1YnN0aXR1dGlvbiBAJXUgLT4gQCV1LlxuIiwKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHN1YnN0aXR1dGlvbi5vbGRDaGlsZCwgc3Vic3RpdHV0aW9uLm5ld0NoaWxk
KTsKKyAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgUGVyZm9ybWluZyBvcGVyYW5kIHN1YnN0
aXR1dGlvbiAiLCBzdWJzdGl0dXRpb24sICIuXG4iKTsKICNlbmRpZgotICAgICAgICAgICAgICAg
IGlmICghcGhpTm9kZS5jaGlsZDEoKSkKKyAgICAgICAgICAgICAgICBpZiAoIXBoaU5vZGUtPmNo
aWxkMSgpKQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICBp
ZiAocGhpTm9kZS5jaGlsZDEoKS5pbmRleCgpID09IHN1YnN0aXR1dGlvbi5vbGRDaGlsZCkKLSAg
ICAgICAgICAgICAgICAgICAgbV9ncmFwaC5jaGFuZ2VJbmRleChwaGlOb2RlLmNoaWxkcmVuLmNo
aWxkMSgpLCBzdWJzdGl0dXRpb24ubmV3Q2hpbGQsIGNoYW5nZVJlZik7Ci0gICAgICAgICAgICAg
ICAgaWYgKCFwaGlOb2RlLmNoaWxkMigpKQorICAgICAgICAgICAgICAgIGlmIChwaGlOb2RlLT5j
aGlsZDEoKSA9PSBzdWJzdGl0dXRpb24ub2xkQ2hpbGQpCisgICAgICAgICAgICAgICAgICAgIG1f
Z3JhcGguY2hhbmdlSW5kZXgocGhpTm9kZS0+Y2hpbGRyZW4uY2hpbGQxKCksIHN1YnN0aXR1dGlv
bi5uZXdDaGlsZCwgY2hhbmdlUmVmKTsKKyAgICAgICAgICAgICAgICBpZiAoIXBoaU5vZGUtPmNo
aWxkMigpKQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICBp
ZiAocGhpTm9kZS5jaGlsZDIoKS5pbmRleCgpID09IHN1YnN0aXR1dGlvbi5vbGRDaGlsZCkKLSAg
ICAgICAgICAgICAgICAgICAgbV9ncmFwaC5jaGFuZ2VJbmRleChwaGlOb2RlLmNoaWxkcmVuLmNo
aWxkMigpLCBzdWJzdGl0dXRpb24ubmV3Q2hpbGQsIGNoYW5nZVJlZik7Ci0gICAgICAgICAgICAg
ICAgaWYgKCFwaGlOb2RlLmNoaWxkMygpKQorICAgICAgICAgICAgICAgIGlmIChwaGlOb2RlLT5j
aGlsZDIoKSA9PSBzdWJzdGl0dXRpb24ub2xkQ2hpbGQpCisgICAgICAgICAgICAgICAgICAgIG1f
Z3JhcGguY2hhbmdlSW5kZXgocGhpTm9kZS0+Y2hpbGRyZW4uY2hpbGQyKCksIHN1YnN0aXR1dGlv
bi5uZXdDaGlsZCwgY2hhbmdlUmVmKTsKKyAgICAgICAgICAgICAgICBpZiAoIXBoaU5vZGUtPmNo
aWxkMygpKQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICBp
ZiAocGhpTm9kZS5jaGlsZDMoKS5pbmRleCgpID09IHN1YnN0aXR1dGlvbi5vbGRDaGlsZCkKLSAg
ICAgICAgICAgICAgICAgICAgbV9ncmFwaC5jaGFuZ2VJbmRleChwaGlOb2RlLmNoaWxkcmVuLmNo
aWxkMygpLCBzdWJzdGl0dXRpb24ubmV3Q2hpbGQsIGNoYW5nZVJlZik7CisgICAgICAgICAgICAg
ICAgaWYgKHBoaU5vZGUtPmNoaWxkMygpID09IHN1YnN0aXR1dGlvbi5vbGRDaGlsZCkKKyAgICAg
ICAgICAgICAgICAgICAgbV9ncmFwaC5jaGFuZ2VJbmRleChwaGlOb2RlLT5jaGlsZHJlbi5jaGls
ZDMoKSwgc3Vic3RpdHV0aW9uLm5ld0NoaWxkLCBjaGFuZ2VSZWYpOwogICAgICAgICAgICAgfQog
ICAgICAgICB9CiAgICAgICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdD
U0VQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdD
U0VQaGFzZS5jcHAJKHJldmlzaW9uIDE0MDkwNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQ1NFUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NCwyNCArNTQsMjQgQEAgcHVi
bGljOgogICAgIAogcHJpdmF0ZToKICAgICAKLSAgICBOb2RlSW5kZXggY2Fub25pY2FsaXplKE5v
ZGVJbmRleCBub2RlSW5kZXgpCisgICAgTm9kZSogY2Fub25pY2FsaXplKE5vZGUqIG5vZGUpCiAg
ICAgewotICAgICAgICBpZiAobm9kZUluZGV4ID09IE5vTm9kZSkKLSAgICAgICAgICAgIHJldHVy
biBOb05vZGU7CisgICAgICAgIGlmICghbm9kZSkKKyAgICAgICAgICAgIHJldHVybiAwOwogICAg
ICAgICAKLSAgICAgICAgaWYgKG1fZ3JhcGhbbm9kZUluZGV4XS5vcCgpID09IFZhbHVlVG9JbnQz
MikKLSAgICAgICAgICAgIG5vZGVJbmRleCA9IG1fZ3JhcGhbbm9kZUluZGV4XS5jaGlsZDEoKS5p
bmRleCgpOworICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBWYWx1ZVRvSW50MzIpCisgICAgICAg
ICAgICBub2RlID0gbm9kZS0+Y2hpbGQxKCkubm9kZSgpOwogICAgICAgICAKLSAgICAgICAgcmV0
dXJuIG5vZGVJbmRleDsKKyAgICAgICAgcmV0dXJuIG5vZGU7CiAgICAgfQotICAgIE5vZGVJbmRl
eCBjYW5vbmljYWxpemUoRWRnZSBub2RlVXNlKQorICAgIE5vZGUqIGNhbm9uaWNhbGl6ZShFZGdl
IGVkZ2UpCiAgICAgewotICAgICAgICByZXR1cm4gY2Fub25pY2FsaXplKG5vZGVVc2UuaW5kZXhV
bmNoZWNrZWQoKSk7CisgICAgICAgIHJldHVybiBjYW5vbmljYWxpemUoZWRnZS5ub2RlKCkpOwog
ICAgIH0KICAgICAKICAgICB1bnNpZ25lZCBlbmRJbmRleEZvclB1cmVDU0UoKQogICAgIHsKLSAg
ICAgICAgdW5zaWduZWQgcmVzdWx0ID0gbV9sYXN0U2VlblttX2dyYXBoW21fY29tcGlsZUluZGV4
XS5vcCgpXTsKKyAgICAgICAgdW5zaWduZWQgcmVzdWx0ID0gbV9sYXN0U2VlblttX2N1cnJlbnRO
b2RlLT5vcCgpXTsKICAgICAgICAgaWYgKHJlc3VsdCA9PSBVSU5UX01BWCkKICAgICAgICAgICAg
IHJlc3VsdCA9IDA7CiAgICAgICAgIGVsc2UKQEAgLTgzLDI2MSArODMsMjU3IEBAIHByaXZhdGU6
CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCi0gICAgTm9kZUluZGV4IHB1cmVDU0Uo
Tm9kZSYgbm9kZSkKKyAgICBOb2RlKiBwdXJlQ1NFKE5vZGUqIG5vZGUpCiAgICAgewotICAgICAg
ICBOb2RlSW5kZXggY2hpbGQxID0gY2Fub25pY2FsaXplKG5vZGUuY2hpbGQxKCkpOwotICAgICAg
ICBOb2RlSW5kZXggY2hpbGQyID0gY2Fub25pY2FsaXplKG5vZGUuY2hpbGQyKCkpOwotICAgICAg
ICBOb2RlSW5kZXggY2hpbGQzID0gY2Fub25pY2FsaXplKG5vZGUuY2hpbGQzKCkpOworICAgICAg
ICBOb2RlKiBjaGlsZDEgPSBjYW5vbmljYWxpemUobm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBO
b2RlKiBjaGlsZDIgPSBjYW5vbmljYWxpemUobm9kZS0+Y2hpbGQyKCkpOworICAgICAgICBOb2Rl
KiBjaGlsZDMgPSBjYW5vbmljYWxpemUobm9kZS0+Y2hpbGQzKCkpOwogICAgICAgICAKICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gZW5kSW5kZXhGb3JQdXJlQ1NFKCk7IGktLTspIHsKLSAgICAg
ICAgICAgIE5vZGVJbmRleCBpbmRleCA9IG1fY3VycmVudEJsb2NrLT5hdChpKTsKLSAgICAgICAg
ICAgIGlmIChpbmRleCA9PSBjaGlsZDEgfHwgaW5kZXggPT0gY2hpbGQyIHx8IGluZGV4ID09IGNo
aWxkMykKKyAgICAgICAgICAgIE5vZGUqIG90aGVyTm9kZSA9IG1fY3VycmVudEJsb2NrLT5hdChp
KTsKKyAgICAgICAgICAgIGlmIChvdGhlck5vZGUgPT0gY2hpbGQxIHx8IG90aGVyTm9kZSA9PSBj
aGlsZDIgfHwgb3RoZXJOb2RlID09IGNoaWxkMykKICAgICAgICAgICAgICAgICBicmVhazsKIAot
ICAgICAgICAgICAgTm9kZSYgb3RoZXJOb2RlID0gbV9ncmFwaFtpbmRleF07Ci0gICAgICAgICAg
ICBpZiAoIW90aGVyTm9kZS5zaG91bGRHZW5lcmF0ZSgpKQorICAgICAgICAgICAgaWYgKCFvdGhl
ck5vZGUtPnNob3VsZEdlbmVyYXRlKCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAg
ICAgICAgICAKLSAgICAgICAgICAgIGlmIChub2RlLm9wKCkgIT0gb3RoZXJOb2RlLm9wKCkpCisg
ICAgICAgICAgICBpZiAobm9kZS0+b3AoKSAhPSBvdGhlck5vZGUtPm9wKCkpCiAgICAgICAgICAg
ICAgICAgY29udGludWU7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChub2RlLmFyaXRo
Tm9kZUZsYWdzKCkgIT0gb3RoZXJOb2RlLmFyaXRoTm9kZUZsYWdzKCkpCisgICAgICAgICAgICBp
ZiAobm9kZS0+YXJpdGhOb2RlRmxhZ3MoKSAhPSBvdGhlck5vZGUtPmFyaXRoTm9kZUZsYWdzKCkp
CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIE5v
ZGVJbmRleCBvdGhlckNoaWxkID0gY2Fub25pY2FsaXplKG90aGVyTm9kZS5jaGlsZDEoKSk7Ci0g
ICAgICAgICAgICBpZiAob3RoZXJDaGlsZCA9PSBOb05vZGUpCi0gICAgICAgICAgICAgICAgcmV0
dXJuIGluZGV4OworICAgICAgICAgICAgTm9kZSogb3RoZXJDaGlsZCA9IGNhbm9uaWNhbGl6ZShv
dGhlck5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgIGlmICghb3RoZXJDaGlsZCkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gb3RoZXJOb2RlOwogICAgICAgICAgICAgaWYgKG90aGVyQ2hpbGQg
IT0gY2hpbGQxKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgCi0gICAg
ICAgICAgICBvdGhlckNoaWxkID0gY2Fub25pY2FsaXplKG90aGVyTm9kZS5jaGlsZDIoKSk7Ci0g
ICAgICAgICAgICBpZiAob3RoZXJDaGlsZCA9PSBOb05vZGUpCi0gICAgICAgICAgICAgICAgcmV0
dXJuIGluZGV4OworICAgICAgICAgICAgb3RoZXJDaGlsZCA9IGNhbm9uaWNhbGl6ZShvdGhlck5v
ZGUtPmNoaWxkMigpKTsKKyAgICAgICAgICAgIGlmICghb3RoZXJDaGlsZCkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gb3RoZXJOb2RlOwogICAgICAgICAgICAgaWYgKG90aGVyQ2hpbGQgIT0gY2hp
bGQyKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgCi0gICAgICAgICAg
ICBvdGhlckNoaWxkID0gY2Fub25pY2FsaXplKG90aGVyTm9kZS5jaGlsZDMoKSk7Ci0gICAgICAg
ICAgICBpZiAob3RoZXJDaGlsZCA9PSBOb05vZGUpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGlu
ZGV4OworICAgICAgICAgICAgb3RoZXJDaGlsZCA9IGNhbm9uaWNhbGl6ZShvdGhlck5vZGUtPmNo
aWxkMygpKTsKKyAgICAgICAgICAgIGlmICghb3RoZXJDaGlsZCkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gb3RoZXJOb2RlOwogICAgICAgICAgICAgaWYgKG90aGVyQ2hpbGQgIT0gY2hpbGQzKQog
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgCi0gICAgICAgICAgICByZXR1
cm4gaW5kZXg7CisgICAgICAgICAgICByZXR1cm4gb3RoZXJOb2RlOwogICAgICAgICB9Ci0gICAg
ICAgIHJldHVybiBOb05vZGU7CisgICAgICAgIHJldHVybiAwOwogICAgIH0KICAgICAKLSAgICBO
b2RlSW5kZXggY29uc3RhbnRDU0UoTm9kZSYgbm9kZSkKKyAgICBOb2RlKiBjb25zdGFudENTRShO
b2RlKiBub2RlKQogICAgIHsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gZW5kSW5kZXhGb3JQ
dXJlQ1NFKCk7IGktLTspIHsKLSAgICAgICAgICAgIE5vZGVJbmRleCBpbmRleCA9IG1fY3VycmVu
dEJsb2NrLT5hdChpKTsKLSAgICAgICAgICAgIE5vZGUmIG90aGVyTm9kZSA9IG1fZ3JhcGhbaW5k
ZXhdOwotICAgICAgICAgICAgaWYgKG90aGVyTm9kZS5vcCgpICE9IEpTQ29uc3RhbnQpCisgICAg
ICAgICAgICBOb2RlKiBvdGhlck5vZGUgPSBtX2N1cnJlbnRCbG9jay0+YXQoaSk7CisgICAgICAg
ICAgICBpZiAob3RoZXJOb2RlLT5vcCgpICE9IEpTQ29uc3RhbnQpCiAgICAgICAgICAgICAgICAg
Y29udGludWU7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChvdGhlck5vZGUuY29uc3Rh
bnROdW1iZXIoKSAhPSBub2RlLmNvbnN0YW50TnVtYmVyKCkpCisgICAgICAgICAgICBpZiAoIW90
aGVyTm9kZS0+c2hvdWxkR2VuZXJhdGUoKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAg
ICAgICAgICAgIAotICAgICAgICAgICAgcmV0dXJuIGluZGV4OworICAgICAgICAgICAgaWYgKG90
aGVyTm9kZS0+Y29uc3RhbnROdW1iZXIoKSAhPSBub2RlLT5jb25zdGFudE51bWJlcigpKQorICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgCisgICAgICAgICAgICByZXR1cm4g
b3RoZXJOb2RlOwogICAgICAgICB9Ci0gICAgICAgIHJldHVybiBOb05vZGU7CisgICAgICAgIHJl
dHVybiAwOwogICAgIH0KICAgICAKLSAgICBOb2RlSW5kZXggd2Vha0NvbnN0YW50Q1NFKE5vZGUm
IG5vZGUpCisgICAgTm9kZSogd2Vha0NvbnN0YW50Q1NFKE5vZGUqIG5vZGUpCiAgICAgewogICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSBlbmRJbmRleEZvclB1cmVDU0UoKTsgaS0tOykgewotICAg
ICAgICAgICAgTm9kZUluZGV4IGluZGV4ID0gbV9jdXJyZW50QmxvY2stPmF0KGkpOwotICAgICAg
ICAgICAgTm9kZSYgb3RoZXJOb2RlID0gbV9ncmFwaFtpbmRleF07Ci0gICAgICAgICAgICBpZiAo
b3RoZXJOb2RlLm9wKCkgIT0gV2Vha0pTQ29uc3RhbnQpCisgICAgICAgICAgICBOb2RlKiBvdGhl
ck5vZGUgPSBtX2N1cnJlbnRCbG9jay0+YXQoaSk7CisgICAgICAgICAgICBpZiAob3RoZXJOb2Rl
LT5vcCgpICE9IFdlYWtKU0NvbnN0YW50KQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICAgICAgCisgICAgICAgICAgICBpZiAoIW90aGVyTm9kZS0+c2hvdWxkR2VuZXJhdGUoKSkK
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgaWYg
KG90aGVyTm9kZS53ZWFrQ29uc3RhbnQoKSAhPSBub2RlLndlYWtDb25zdGFudCgpKQorICAgICAg
ICAgICAgaWYgKG90aGVyTm9kZS0+d2Vha0NvbnN0YW50KCkgIT0gbm9kZS0+d2Vha0NvbnN0YW50
KCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAKLSAgICAgICAgICAg
IHJldHVybiBpbmRleDsKKyAgICAgICAgICAgIHJldHVybiBvdGhlck5vZGU7CiAgICAgICAgIH0K
LSAgICAgICAgcmV0dXJuIE5vTm9kZTsKKyAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogICAgIAot
ICAgIE5vZGVJbmRleCBnZXRDYWxsZWVMb2FkRWxpbWluYXRpb24oSW5saW5lQ2FsbEZyYW1lKiBp
bmxpbmVDYWxsRnJhbWUpCisgICAgTm9kZSogZ2V0Q2FsbGVlTG9hZEVsaW1pbmF0aW9uKElubGlu
ZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lKQogICAgIHsKICAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gbV9pbmRleEluQmxvY2s7IGktLTspIHsKLSAgICAgICAgICAgIE5vZGVJbmRleCBpbmRl
eCA9IG1fY3VycmVudEJsb2NrLT5hdChpKTsKLSAgICAgICAgICAgIE5vZGUmIG5vZGUgPSBtX2dy
YXBoW2luZGV4XTsKLSAgICAgICAgICAgIGlmICghbm9kZS5zaG91bGRHZW5lcmF0ZSgpKQorICAg
ICAgICAgICAgTm9kZSogbm9kZSA9IG1fY3VycmVudEJsb2NrLT5hdChpKTsKKyAgICAgICAgICAg
IGlmICghbm9kZS0+c2hvdWxkR2VuZXJhdGUoKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsK
LSAgICAgICAgICAgIGlmIChub2RlLmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lICE9IGlubGlu
ZUNhbGxGcmFtZSkKKyAgICAgICAgICAgIGlmIChub2RlLT5jb2RlT3JpZ2luLmlubGluZUNhbGxG
cmFtZSAhPSBpbmxpbmVDYWxsRnJhbWUpCiAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgICAgICBzd2l0Y2ggKG5vZGUub3AoKSkgeworICAgICAgICAgICAgc3dpdGNoIChub2RlLT5v
cCgpKSB7CiAgICAgICAgICAgICBjYXNlIEdldENhbGxlZToKLSAgICAgICAgICAgICAgICByZXR1
cm4gaW5kZXg7CisgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGU7CiAgICAgICAgICAgICBjYXNl
IFNldENhbGxlZToKLSAgICAgICAgICAgICAgICByZXR1cm4gbm9kZS5jaGlsZDEoKS5pbmRleCgp
OworICAgICAgICAgICAgICAgIHJldHVybiBub2RlLT5jaGlsZDEoKS5ub2RlKCk7CiAgICAgICAg
ICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAg
ICAgICB9Ci0gICAgICAgIHJldHVybiBOb05vZGU7CisgICAgICAgIHJldHVybiAwOwogICAgIH0K
ICAgICAKLSAgICBOb2RlSW5kZXggZ2V0QXJyYXlMZW5ndGhFbGltaW5hdGlvbihOb2RlSW5kZXgg
YXJyYXkpCisgICAgTm9kZSogZ2V0QXJyYXlMZW5ndGhFbGltaW5hdGlvbihOb2RlKiBhcnJheSkK
ICAgICB7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1faW5kZXhJbkJsb2NrOyBpLS07KSB7
Ci0gICAgICAgICAgICBOb2RlSW5kZXggaW5kZXggPSBtX2N1cnJlbnRCbG9jay0+YXQoaSk7Ci0g
ICAgICAgICAgICBOb2RlJiBub2RlID0gbV9ncmFwaFtpbmRleF07Ci0gICAgICAgICAgICBpZiAo
IW5vZGUuc2hvdWxkR2VuZXJhdGUoKSkKKyAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBtX2N1cnJl
bnRCbG9jay0+YXQoaSk7CisgICAgICAgICAgICBpZiAoIW5vZGUtPnNob3VsZEdlbmVyYXRlKCkp
CiAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBzd2l0Y2ggKG5vZGUub3Ao
KSkgeworICAgICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CiAgICAgICAgICAgICBjYXNl
IEdldEFycmF5TGVuZ3RoOgotICAgICAgICAgICAgICAgIGlmIChub2RlLmNoaWxkMSgpID09IGFy
cmF5KQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW5kZXg7CisgICAgICAgICAgICAgICAg
aWYgKG5vZGUtPmNoaWxkMSgpID09IGFycmF5KQorICAgICAgICAgICAgICAgICAgICByZXR1cm4g
bm9kZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAKICAgICAgICAg
ICAgIGNhc2UgUHV0QnlWYWw6CiAgICAgICAgICAgICAgICAgaWYgKCFtX2dyYXBoLmJ5VmFsSXNQ
dXJlKG5vZGUpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gTm9Ob2RlOwotICAgICAgICAg
ICAgICAgIGlmIChub2RlLmFycmF5TW9kZSgpLm1heVN0b3JlVG9Ib2xlKCkpCi0gICAgICAgICAg
ICAgICAgICAgIHJldHVybiBOb05vZGU7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwor
ICAgICAgICAgICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS5tYXlTdG9yZVRvSG9sZSgpKQor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgICAgICAKICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgaWYg
KG1fZ3JhcGguY2xvYmJlcnNXb3JsZChpbmRleCkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVy
biBOb05vZGU7CisgICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGguY2xvYmJlcnNXb3JsZChub2Rl
KSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgICB9CiAgICAgICAg
IH0KLSAgICAgICAgcmV0dXJuIE5vTm9kZTsKKyAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogICAg
IAotICAgIE5vZGVJbmRleCBnbG9iYWxWYXJMb2FkRWxpbWluYXRpb24oV3JpdGVCYXJyaWVyPFVu
a25vd24+KiByZWdpc3RlclBvaW50ZXIpCisgICAgTm9kZSogZ2xvYmFsVmFyTG9hZEVsaW1pbmF0
aW9uKFdyaXRlQmFycmllcjxVbmtub3duPiogcmVnaXN0ZXJQb2ludGVyKQogICAgIHsKICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gbV9pbmRleEluQmxvY2s7IGktLTspIHsKLSAgICAgICAgICAg
IE5vZGVJbmRleCBpbmRleCA9IG1fY3VycmVudEJsb2NrLT5hdChpKTsKLSAgICAgICAgICAgIE5v
ZGUmIG5vZGUgPSBtX2dyYXBoW2luZGV4XTsKLSAgICAgICAgICAgIGlmICghbm9kZS5zaG91bGRH
ZW5lcmF0ZSgpKQorICAgICAgICAgICAgTm9kZSogbm9kZSA9IG1fY3VycmVudEJsb2NrLT5hdChp
KTsKKyAgICAgICAgICAgIGlmICghbm9kZS0+c2hvdWxkR2VuZXJhdGUoKSkKICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIHN3aXRjaCAobm9kZS5vcCgpKSB7CisgICAgICAg
ICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKICAgICAgICAgICAgIGNhc2UgR2V0R2xvYmFsVmFy
OgotICAgICAgICAgICAgICAgIGlmIChub2RlLnJlZ2lzdGVyUG9pbnRlcigpID09IHJlZ2lzdGVy
UG9pbnRlcikKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGluZGV4OworICAgICAgICAgICAg
ICAgIGlmIChub2RlLT5yZWdpc3RlclBvaW50ZXIoKSA9PSByZWdpc3RlclBvaW50ZXIpCisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBub2RlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgY2FzZSBQdXRHbG9iYWxWYXI6Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGUucmVn
aXN0ZXJQb2ludGVyKCkgPT0gcmVnaXN0ZXJQb2ludGVyKQotICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gbm9kZS5jaGlsZDEoKS5pbmRleCgpOworICAgICAgICAgICAgICAgIGlmIChub2RlLT5y
ZWdpc3RlclBvaW50ZXIoKSA9PSByZWdpc3RlclBvaW50ZXIpCisgICAgICAgICAgICAgICAgICAg
IHJldHVybiBub2RlLT5jaGlsZDEoKS5ub2RlKCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
fQotICAgICAgICAgICAgaWYgKG1fZ3JhcGguY2xvYmJlcnNXb3JsZChpbmRleCkpCisgICAgICAg
ICAgICBpZiAobV9ncmFwaC5jbG9iYmVyc1dvcmxkKG5vZGUpKQogICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICB9Ci0gICAgICAgIHJldHVybiBOb05vZGU7CisgICAgICAgIHJldHVybiAw
OwogICAgIH0KICAgICAKLSAgICBOb2RlSW5kZXggc2NvcGVkVmFyTG9hZEVsaW1pbmF0aW9uKE5v
ZGVJbmRleCByZWdpc3RlcnMsIHVuc2lnbmVkIHZhck51bWJlcikKKyAgICBOb2RlKiBzY29wZWRW
YXJMb2FkRWxpbWluYXRpb24oTm9kZSogcmVnaXN0ZXJzLCB1bnNpZ25lZCB2YXJOdW1iZXIpCiAg
ICAgewogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2luZGV4SW5CbG9jazsgaS0tOykgewot
ICAgICAgICAgICAgTm9kZUluZGV4IGluZGV4ID0gbV9jdXJyZW50QmxvY2stPmF0KGkpOwotICAg
ICAgICAgICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhbaW5kZXhdOwotICAgICAgICAgICAgaWYgKCFu
b2RlLnNob3VsZEdlbmVyYXRlKCkpCisgICAgICAgICAgICBOb2RlKiA9IG1fY3VycmVudEJsb2Nr
LT5hdChpKTsKKyAgICAgICAgICAgIGlmICghbm9kZS0+c2hvdWxkR2VuZXJhdGUoKSkKICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIHN3aXRjaCAobm9kZS5vcCgpKSB7Cisg
ICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKICAgICAgICAgICAgIGNhc2UgR2V0U2Nv
cGVkVmFyOiB7Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGUuY2hpbGQxKCkgPT0gcmVnaXN0ZXJz
ICYmIG5vZGUudmFyTnVtYmVyKCkgPT0gdmFyTnVtYmVyKQorICAgICAgICAgICAgICAgIGlmIChu
b2RlLT5jaGlsZDEoKSA9PSByZWdpc3RlcnMgJiYgbm9kZS52YXJOdW1iZXIoKSA9PSB2YXJOdW1i
ZXIpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpbmRleDsKICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgIH0gCiAgICAgICAgICAgICBjYXNlIFB1dFNjb3BlZFZhcjogewot
ICAgICAgICAgICAgICAgIGlmIChub2RlLmNoaWxkMigpID09IHJlZ2lzdGVycyAmJiBub2RlLnZh
ck51bWJlcigpID09IHZhck51bWJlcikKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGUu
Y2hpbGQzKCkuaW5kZXgoKTsKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQyKCkgPT0g
cmVnaXN0ZXJzICYmIG5vZGUudmFyTnVtYmVyKCkgPT0gdmFyTnVtYmVyKQorICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gbm9kZS0+Y2hpbGQzKCkubm9kZSgpOwogICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgY2FzZSBTZXRMb2NhbDogewotICAgICAg
ICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhID0gbm9kZS52
YXJpYWJsZUFjY2Vzc0RhdGEoKTsKKyAgICAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEq
IHZhcmlhYmxlQWNjZXNzRGF0YSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOwogICAgICAg
ICAgICAgICAgIGlmICh2YXJpYWJsZUFjY2Vzc0RhdGEtPmlzQ2FwdHVyZWQoKQogICAgICAgICAg
ICAgICAgICAgICAmJiB2YXJpYWJsZUFjY2Vzc0RhdGEtPmxvY2FsKCkgPT0gc3RhdGljX2Nhc3Q8
VmlydHVhbFJlZ2lzdGVyPih2YXJOdW1iZXIpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4g
Tm9Ob2RlOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAobV9ncmFwaC5jbG9iYmVy
c1dvcmxkKGluZGV4KSkKKyAgICAgICAgICAgIGlmIChtX2dyYXBoLmNsb2JiZXJzV29ybGQobm9k
ZSkpCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIE5v
Tm9kZTsKKyAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogICAgIAogICAgIGJvb2wgZ2xvYmFsVmFy
V2F0Y2hwb2ludEVsaW1pbmF0aW9uKFdyaXRlQmFycmllcjxVbmtub3duPiogcmVnaXN0ZXJQb2lu
dGVyKQogICAgIHsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9pbmRleEluQmxvY2s7IGkt
LTspIHsKLSAgICAgICAgICAgIE5vZGVJbmRleCBpbmRleCA9IG1fY3VycmVudEJsb2NrLT5hdChp
KTsKLSAgICAgICAgICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW2luZGV4XTsKLSAgICAgICAgICAg
IGlmICghbm9kZS5zaG91bGRHZW5lcmF0ZSgpKQorICAgICAgICAgICAgTm9kZSogbm9kZSA9IG1f
Y3VycmVudEJsb2NrLT5hdChpKTsKKyAgICAgICAgICAgIGlmICghbm9kZS0+c2hvdWxkR2VuZXJh
dGUoKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIHN3aXRjaCAobm9k
ZS5vcCgpKSB7CisgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKICAgICAgICAgICAg
IGNhc2UgR2xvYmFsVmFyV2F0Y2hwb2ludDoKLSAgICAgICAgICAgICAgICBpZiAobm9kZS5yZWdp
c3RlclBvaW50ZXIoKSA9PSByZWdpc3RlclBvaW50ZXIpCisgICAgICAgICAgICAgICAgaWYgKG5v
ZGUtPnJlZ2lzdGVyUG9pbnRlcigpID09IHJlZ2lzdGVyUG9pbnRlcikKICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBj
YXNlIFB1dEdsb2JhbFZhcjoKLSAgICAgICAgICAgICAgICBpZiAobm9kZS5yZWdpc3RlclBvaW50
ZXIoKSA9PSByZWdpc3RlclBvaW50ZXIpCisgICAgICAgICAgICAgICAgaWYgKG5vZGUtPnJlZ2lz
dGVyUG9pbnRlcigpID09IHJlZ2lzdGVyUG9pbnRlcikKICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgZGVmYXVsdDoK
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICht
X2dyYXBoLmNsb2JiZXJzV29ybGQoaW5kZXgpKQorICAgICAgICAgICAgaWYgKG1fZ3JhcGguY2xv
YmJlcnNXb3JsZChub2RlKSkKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIAotICAgIE5vZGVJbmRleCBnbG9iYWxWYXJT
dG9yZUVsaW1pbmF0aW9uKFdyaXRlQmFycmllcjxVbmtub3duPiogcmVnaXN0ZXJQb2ludGVyKQor
ICAgIE5vZGUqIGdsb2JhbFZhclN0b3JlRWxpbWluYXRpb24oV3JpdGVCYXJyaWVyPFVua25vd24+
KiByZWdpc3RlclBvaW50ZXIpCiAgICAgewogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2lu
ZGV4SW5CbG9jazsgaS0tOykgewotICAgICAgICAgICAgTm9kZUluZGV4IGluZGV4ID0gbV9jdXJy
ZW50QmxvY2stPmF0KGkpOwotICAgICAgICAgICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhbaW5kZXhd
OwotICAgICAgICAgICAgaWYgKCFub2RlLnNob3VsZEdlbmVyYXRlKCkpCisgICAgICAgICAgICBO
b2RlKiBub2RlID0gbV9jdXJyZW50QmxvY2stPmF0KGkpOworICAgICAgICAgICAgaWYgKCFub2Rl
LT5zaG91bGRHZW5lcmF0ZSgpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAg
ICAgc3dpdGNoIChub2RlLm9wKCkpIHsKKyAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkg
ewogICAgICAgICAgICAgY2FzZSBQdXRHbG9iYWxWYXI6CiAgICAgICAgICAgICBjYXNlIFB1dEds
b2JhbFZhckNoZWNrOgotICAgICAgICAgICAgICAgIGlmIChub2RlLnJlZ2lzdGVyUG9pbnRlcigp
ID09IHJlZ2lzdGVyUG9pbnRlcikKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGluZGV4Owor
ICAgICAgICAgICAgICAgIGlmIChub2RlLT5yZWdpc3RlclBvaW50ZXIoKSA9PSByZWdpc3RlclBv
aW50ZXIpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBub2RlOwogICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgY2FzZSBHZXRHbG9iYWxWYXI6
Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGUucmVnaXN0ZXJQb2ludGVyKCkgPT0gcmVnaXN0ZXJQ
b2ludGVyKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gTm9Ob2RlOworICAgICAgICAgICAg
ICAgIGlmIChub2RlLT5yZWdpc3RlclBvaW50ZXIoKSA9PSByZWdpc3RlclBvaW50ZXIpCisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgICAgIAogICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChtX2dyYXBoLmNsb2JiZXJzV29ybGQoaW5k
ZXgpIHx8IG5vZGUuY2FuRXhpdCgpKQotICAgICAgICAgICAgICAgIHJldHVybiBOb05vZGU7Cisg
ICAgICAgICAgICBpZiAobV9ncmFwaC5jbG9iYmVyc1dvcmxkKG5vZGUpIHx8IG5vZGUtPmNhbkV4
aXQoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgfQotICAgICAgICByZXR1
cm4gTm9Ob2RlOworICAgICAgICByZXR1cm4gMDsKICAgICB9CiAgICAgCi0gICAgTm9kZUluZGV4
IHNjb3BlZFZhclN0b3JlRWxpbWluYXRpb24oTm9kZUluZGV4IHNjb3BlLCBOb2RlSW5kZXggcmVn
aXN0ZXJzLCB1bnNpZ25lZCB2YXJOdW1iZXIpCisgICAgTm9kZSogc2NvcGVkVmFyU3RvcmVFbGlt
aW5hdGlvbihOb2RlKiBzY29wZSwgTm9kZSogcmVnaXN0ZXJzLCB1bnNpZ25lZCB2YXJOdW1iZXIp
CiAgICAgewogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2luZGV4SW5CbG9jazsgaS0tOykg
ewotICAgICAgICAgICAgTm9kZUluZGV4IGluZGV4ID0gbV9jdXJyZW50QmxvY2stPmF0KGkpOwot
ICAgICAgICAgICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhbaW5kZXhdOwotICAgICAgICAgICAgaWYg
KCFub2RlLnNob3VsZEdlbmVyYXRlKCkpCisgICAgICAgICAgICBOb2RlKiBub2RlID0gbV9jdXJy
ZW50QmxvY2stPmF0KGkpOworICAgICAgICAgICAgaWYgKCFub2RlLT5zaG91bGRHZW5lcmF0ZSgp
KQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgc3dpdGNoIChub2RlLm9w
KCkpIHsKKyAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewogICAgICAgICAgICAgY2Fz
ZSBQdXRTY29wZWRWYXI6IHsKLSAgICAgICAgICAgICAgICBpZiAobm9kZS5jaGlsZDEoKSA9PSBz
Y29wZSAmJiBub2RlLmNoaWxkMigpID09IHJlZ2lzdGVycyAmJiBub2RlLnZhck51bWJlcigpID09
IHZhck51bWJlcikKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGluZGV4OworICAgICAgICAg
ICAgICAgIGlmIChub2RlLT5jaGlsZDEoKSA9PSBzY29wZSAmJiBub2RlLT5jaGlsZDIoKSA9PSBy
ZWdpc3RlcnMgJiYgbm9kZS52YXJOdW1iZXIoKSA9PSB2YXJOdW1iZXIpCisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBub2RlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
fQogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgY2FzZSBHZXRTY29wZWRWYXI6IHsKICAg
ICAgICAgICAgICAgICAvLyBMZXQncyBiZSBjb25zZXJ2YXRpdmUuCi0gICAgICAgICAgICAgICAg
aWYgKG5vZGUudmFyTnVtYmVyKCkgPT0gdmFyTnVtYmVyKQotICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gTm9Ob2RlOworICAgICAgICAgICAgICAgIGlmIChub2RlLT52YXJOdW1iZXIoKSA9PSB2
YXJOdW1iZXIpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIApAQCAtMzQ1LDQ2ICszNDEs
NDUgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlh
YmxlQWNjZXNzRGF0YSA9IG5vZGUudmFyaWFibGVBY2Nlc3NEYXRhKCk7CiAgICAgICAgICAgICAg
ICAgaWYgKHZhcmlhYmxlQWNjZXNzRGF0YS0+aXNDYXB0dXJlZCgpCiAgICAgICAgICAgICAgICAg
ICAgICYmIHZhcmlhYmxlQWNjZXNzRGF0YS0+bG9jYWwoKSA9PSBzdGF0aWNfY2FzdDxWaXJ0dWFs
UmVnaXN0ZXI+KHZhck51bWJlcikpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBOb05vZGU7
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKG1fZ3JhcGguY2xvYmJlcnNXb3Js
ZChpbmRleCkgfHwgbm9kZS5jYW5FeGl0KCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIE5vTm9k
ZTsKKyAgICAgICAgICAgIGlmIChtX2dyYXBoLmNsb2JiZXJzV29ybGQobm9kZSkgfHwgbm9kZS0+
Y2FuRXhpdCgpKQorICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICB9Ci0gICAgICAg
IHJldHVybiBOb05vZGU7CisgICAgICAgIHJldHVybiAwOwogICAgIH0KICAgICAKLSAgICBOb2Rl
SW5kZXggZ2V0QnlWYWxMb2FkRWxpbWluYXRpb24oTm9kZUluZGV4IGNoaWxkMSwgTm9kZUluZGV4
IGNoaWxkMikKKyAgICBOb2RlKiBnZXRCeVZhbExvYWRFbGltaW5hdGlvbihOb2RlKiBjaGlsZDEs
IE5vZGUqIGNoaWxkMikKICAgICB7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1faW5kZXhJ
bkJsb2NrOyBpLS07KSB7Ci0gICAgICAgICAgICBOb2RlSW5kZXggaW5kZXggPSBtX2N1cnJlbnRC
bG9jay0+YXQoaSk7Ci0gICAgICAgICAgICBpZiAoaW5kZXggPT0gY2hpbGQxIHx8IGluZGV4ID09
IGNhbm9uaWNhbGl6ZShjaGlsZDIpKSAKKyAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBtX2N1cnJl
bnRCbG9jay0+YXQoaSk7CisgICAgICAgICAgICBpZiAobm9kZSA9PSBjaGlsZDEgfHwgbm9kZSA9
PSBjYW5vbmljYWxpemUoY2hpbGQyKSkgCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAg
ICAgICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW2luZGV4XTsKLSAgICAgICAgICAgIGlmICghbm9k
ZS5zaG91bGRHZW5lcmF0ZSgpKQorICAgICAgICAgICAgaWYgKCFub2RlLT5zaG91bGRHZW5lcmF0
ZSgpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgc3dpdGNoIChub2Rl
Lm9wKCkpIHsKKyAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewogICAgICAgICAgICAg
Y2FzZSBHZXRCeVZhbDoKICAgICAgICAgICAgICAgICBpZiAoIW1fZ3JhcGguYnlWYWxJc1B1cmUo
bm9kZSkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOb05vZGU7Ci0gICAgICAgICAgICAg
ICAgaWYgKG5vZGUuY2hpbGQxKCkgPT0gY2hpbGQxICYmIGNhbm9uaWNhbGl6ZShub2RlLmNoaWxk
MigpKSA9PSBjYW5vbmljYWxpemUoY2hpbGQyKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGluZGV4OworICAgICAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKSA9PSBjaGlsZDEgJiYg
Y2Fub25pY2FsaXplKG5vZGUtPmNoaWxkMigpKSA9PSBjYW5vbmljYWxpemUoY2hpbGQyKSkKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGU7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICBjYXNlIFB1dEJ5VmFsOgogICAgICAgICAgICAgY2FzZSBQdXRCeVZhbEFsaWFz
OiB7CiAgICAgICAgICAgICAgICAgaWYgKCFtX2dyYXBoLmJ5VmFsSXNQdXJlKG5vZGUpKQotICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gTm9Ob2RlOworICAgICAgICAgICAgICAgICAgICByZXR1
cm4gMDsKICAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKSA9
PSBjaGlsZDEgJiYgY2Fub25pY2FsaXplKG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkpID09
IGNhbm9uaWNhbGl6ZShjaGlsZDIpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gbV9ncmFw
aC52YXJBcmdDaGlsZChub2RlLCAyKS5pbmRleCgpOworICAgICAgICAgICAgICAgICAgICByZXR1
cm4gbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAyKS5ub2RlKCk7CiAgICAgICAgICAgICAgICAg
Ly8gV2UgbXVzdCBhc3N1bWUgdGhhdCB0aGUgUHV0QnlWYWwgd2lsbCBjbG9iYmVyIHRoZSBsb2Nh
dGlvbiB3ZSdyZSBnZXR0aW5nIGZyb20uCiAgICAgICAgICAgICAgICAgLy8gRklYTUU6IFdlIGNh
biBkbyBiZXR0ZXI7IGlmIHdlIGtub3cgdGhhdCB0aGUgUHV0QnlWYWwgaXMgYWNjZXNzaW5nIGFu
IGFycmF5IG9mIGEKICAgICAgICAgICAgICAgICAvLyBkaWZmZXJlbnQgdHlwZSB0aGFuIHRoZSBH
ZXRCeVZhbCwgdGhlbiB3ZSBrbm93IHRoYXQgdGhleSB3b24ndCBjbG9iYmVyIGVhY2ggb3RoZXIu
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIE5vTm9kZTsKKyAgICAgICAgICAgICAgICByZXR1cm4g
MDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGNhc2UgUHV0U3RydWN0dXJlOgogICAgICAg
ICAgICAgY2FzZSBQdXRCeU9mZnNldDoKQEAgLTM5NCw3MiArMzg5LDY5IEBAIHByaXZhdGU6CiAg
ICAgICAgICAgICAgICAgLy8gdGhlIEdldEJ5VmFsLgogICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC5jbG9iYmVy
c1dvcmxkKGluZGV4KSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5vTm9kZTsKKyAgICAg
ICAgICAgICAgICBpZiAobV9ncmFwaC5jbG9iYmVyc1dvcmxkKG5vZGUpKQorICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0K
ICAgICAgICAgfQotICAgICAgICByZXR1cm4gTm9Ob2RlOworICAgICAgICByZXR1cm4gMDsKICAg
ICB9CiAKLSAgICBib29sIGNoZWNrRnVuY3Rpb25FbGltaW5hdGlvbihKU0NlbGwqIGZ1bmN0aW9u
LCBOb2RlSW5kZXggY2hpbGQxKQorICAgIGJvb2wgY2hlY2tGdW5jdGlvbkVsaW1pbmF0aW9uKEpT
Q2VsbCogZnVuY3Rpb24sIE5vZGUqIGNoaWxkMSkKICAgICB7CiAgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IGVuZEluZGV4Rm9yUHVyZUNTRSgpOyBpLS07KSB7Ci0gICAgICAgICAgICBOb2RlSW5k
ZXggaW5kZXggPSBtX2N1cnJlbnRCbG9jay0+YXQoaSk7Ci0gICAgICAgICAgICBpZiAoaW5kZXgg
PT0gY2hpbGQxKSAKKyAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBtX2N1cnJlbnRCbG9jay0+YXQo
aSk7CisgICAgICAgICAgICBpZiAobm9kZSA9PSBjaGlsZDEpIAogICAgICAgICAgICAgICAgIGJy
ZWFrOwogCi0gICAgICAgICAgICBOb2RlJiBub2RlID0gbV9ncmFwaFtpbmRleF07Ci0gICAgICAg
ICAgICBpZiAobm9kZS5vcCgpID09IENoZWNrRnVuY3Rpb24gJiYgbm9kZS5jaGlsZDEoKSA9PSBj
aGlsZDEgJiYgbm9kZS5mdW5jdGlvbigpID09IGZ1bmN0aW9uKQorICAgICAgICAgICAgaWYgKG5v
ZGUtPm9wKCkgPT0gQ2hlY2tGdW5jdGlvbiAmJiBub2RlLT5jaGlsZDEoKSA9PSBjaGlsZDEgJiYg
bm9kZS0+ZnVuY3Rpb24oKSA9PSBmdW5jdGlvbikKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIAotICAgIGJv
b2wgY2hlY2tFeGVjdXRhYmxlRWxpbWluYXRpb24oRXhlY3V0YWJsZUJhc2UqIGV4ZWN1dGFibGUs
IE5vZGVJbmRleCBjaGlsZDEpCisgICAgYm9vbCBjaGVja0V4ZWN1dGFibGVFbGltaW5hdGlvbihF
eGVjdXRhYmxlQmFzZSogZXhlY3V0YWJsZSwgTm9kZSogY2hpbGQxKQogICAgIHsKICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gZW5kSW5kZXhGb3JQdXJlQ1NFKCk7IGktLTspIHsKLSAgICAgICAg
ICAgIE5vZGVJbmRleCBpbmRleCA9IG1fY3VycmVudEJsb2NrLT5hdChpKTsKLSAgICAgICAgICAg
IGlmIChpbmRleCA9PSBjaGlsZDEpCisgICAgICAgICAgICBOb2RlKiBub2RlID0gbV9jdXJyZW50
QmxvY2stPmF0KGkpOworICAgICAgICAgICAgaWYgKG5vZGUgPT0gY2hpbGQxKQogICAgICAgICAg
ICAgICAgIGJyZWFrOwogCi0gICAgICAgICAgICBOb2RlJiBub2RlID0gbV9ncmFwaFtpbmRleF07
Ci0gICAgICAgICAgICBpZiAobm9kZS5vcCgpID09IENoZWNrRXhlY3V0YWJsZSAmJiBub2RlLmNo
aWxkMSgpID09IGNoaWxkMSAmJiBub2RlLmV4ZWN1dGFibGUoKSA9PSBleGVjdXRhYmxlKQorICAg
ICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gQ2hlY2tFeGVjdXRhYmxlICYmIG5vZGUtPmNoaWxk
MSgpID09IGNoaWxkMSAmJiBub2RlLT5leGVjdXRhYmxlKCkgPT0gZXhlY3V0YWJsZSkKICAgICAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgfQogCi0gICAgYm9vbCBjaGVja1N0cnVjdHVyZUVsaW1pbmF0aW9uKGNvbnN0IFN0cnVj
dHVyZVNldCYgc3RydWN0dXJlU2V0LCBOb2RlSW5kZXggY2hpbGQxKQorICAgIGJvb2wgY2hlY2tT
dHJ1Y3R1cmVFbGltaW5hdGlvbihjb25zdCBTdHJ1Y3R1cmVTZXQmIHN0cnVjdHVyZVNldCwgTm9k
ZSogY2hpbGQxKQogICAgIHsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9pbmRleEluQmxv
Y2s7IGktLTspIHsKLSAgICAgICAgICAgIE5vZGVJbmRleCBpbmRleCA9IG1fY3VycmVudEJsb2Nr
LT5hdChpKTsKLSAgICAgICAgICAgIGlmIChpbmRleCA9PSBjaGlsZDEpIAorICAgICAgICAgICAg
Tm9kZSogbm9kZSA9IG1fY3VycmVudEJsb2NrLT5hdChpKTsKKyAgICAgICAgICAgIGlmIChub2Rl
ID09IGNoaWxkMSkgCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgICAgIE5vZGUm
IG5vZGUgPSBtX2dyYXBoW2luZGV4XTsKLSAgICAgICAgICAgIGlmICghbm9kZS5zaG91bGRHZW5l
cmF0ZSgpKQorICAgICAgICAgICAgaWYgKCFub2RlLT5zaG91bGRHZW5lcmF0ZSgpKQogICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgc3dpdGNoIChub2RlLm9wKCkpIHsKKyAg
ICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewogICAgICAgICAgICAgY2FzZSBDaGVja1N0
cnVjdHVyZToKICAgICAgICAgICAgIGNhc2UgRm9yd2FyZENoZWNrU3RydWN0dXJlOgotICAgICAg
ICAgICAgICAgIGlmIChub2RlLmNoaWxkMSgpID09IGNoaWxkMQotICAgICAgICAgICAgICAgICAg
ICAmJiBzdHJ1Y3R1cmVTZXQuaXNTdXBlcnNldE9mKG5vZGUuc3RydWN0dXJlU2V0KCkpKQorICAg
ICAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKSA9PSBjaGlsZDEKKyAgICAgICAgICAgICAg
ICAgICAgJiYgc3RydWN0dXJlU2V0LmlzU3VwZXJzZXRPZihub2RlLT5zdHJ1Y3R1cmVTZXQoKSkp
CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgY2FzZSBTdHJ1Y3R1cmVUcmFuc2l0aW9u
V2F0Y2hwb2ludDoKICAgICAgICAgICAgIGNhc2UgRm9yd2FyZFN0cnVjdHVyZVRyYW5zaXRpb25X
YXRjaHBvaW50OgotICAgICAgICAgICAgICAgIGlmIChub2RlLmNoaWxkMSgpID09IGNoaWxkMQot
ICAgICAgICAgICAgICAgICAgICAmJiBzdHJ1Y3R1cmVTZXQuY29udGFpbnMobm9kZS5zdHJ1Y3R1
cmUoKSkpCisgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpID09IGNoaWxkMQorICAg
ICAgICAgICAgICAgICAgICAmJiBzdHJ1Y3R1cmVTZXQuY29udGFpbnMobm9kZS0+c3RydWN0dXJl
KCkpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGNhc2UgUHV0U3RydWN0dXJlOgot
ICAgICAgICAgICAgICAgIGlmIChub2RlLmNoaWxkMSgpID09IGNoaWxkMQotICAgICAgICAgICAg
ICAgICAgICAmJiBzdHJ1Y3R1cmVTZXQuY29udGFpbnMobm9kZS5zdHJ1Y3R1cmVUcmFuc2l0aW9u
RGF0YSgpLm5ld1N0cnVjdHVyZSkpCisgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgp
ID09IGNoaWxkMQorICAgICAgICAgICAgICAgICAgICAmJiBzdHJ1Y3R1cmVTZXQuY29udGFpbnMo
bm9kZS0+c3RydWN0dXJlVHJhbnNpdGlvbkRhdGEoKS5uZXdTdHJ1Y3R1cmUpKQogICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgICAgICBpZiAoc3RydWN0dXJlU2V0
LmNvbnRhaW5zKG5vZGUuc3RydWN0dXJlVHJhbnNpdGlvbkRhdGEoKS5wcmV2aW91c1N0cnVjdHVy
ZSkpCisgICAgICAgICAgICAgICAgaWYgKHN0cnVjdHVyZVNldC5jb250YWlucyhub2RlLT5zdHJ1
Y3R1cmVUcmFuc2l0aW9uRGF0YSgpLnByZXZpb3VzU3RydWN0dXJlKSkKICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
ICAgIApAQCAtNDg0LDcgKzQ3Niw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAg
ICAgICAgICBpZiAobV9ncmFwaC5jbG9iYmVyc1dvcmxkKGluZGV4KSkKKyAgICAgICAgICAgICAg
ICBpZiAobV9ncmFwaC5jbG9iYmVyc1dvcmxkKG5vZGUpKQogICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CkBAIC00
OTIsMjYgKzQ4NCwyNSBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQog
ICAgIAotICAgIGJvb2wgc3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnRFbGltaW5hdGlvbihT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSwgTm9kZUluZGV4IGNoaWxkMSkKKyAgICBib29sIHN0cnVjdHVy
ZVRyYW5zaXRpb25XYXRjaHBvaW50RWxpbWluYXRpb24oU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIE5v
ZGUqIGNoaWxkMSkKICAgICB7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1faW5kZXhJbkJs
b2NrOyBpLS07KSB7Ci0gICAgICAgICAgICBOb2RlSW5kZXggaW5kZXggPSBtX2N1cnJlbnRCbG9j
ay0+YXQoaSk7Ci0gICAgICAgICAgICBpZiAoaW5kZXggPT0gY2hpbGQxKSAKKyAgICAgICAgICAg
IE5vZGUqIG5vZGUgPSBtX2N1cnJlbnRCbG9jay0+YXQoaSk7CisgICAgICAgICAgICBpZiAobm9k
ZSA9PSBjaGlsZDEpIAogICAgICAgICAgICAgICAgIGJyZWFrOwogCi0gICAgICAgICAgICBOb2Rl
JiBub2RlID0gbV9ncmFwaFtpbmRleF07Ci0gICAgICAgICAgICBpZiAoIW5vZGUuc2hvdWxkR2Vu
ZXJhdGUoKSkKKyAgICAgICAgICAgIGlmICghbm9kZS0+c2hvdWxkR2VuZXJhdGUoKSkKICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIHN3aXRjaCAobm9kZS5vcCgpKSB7Cisg
ICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKICAgICAgICAgICAgIGNhc2UgQ2hlY2tT
dHJ1Y3R1cmU6CiAgICAgICAgICAgICBjYXNlIEZvcndhcmRDaGVja1N0cnVjdHVyZToKLSAgICAg
ICAgICAgICAgICBpZiAobm9kZS5jaGlsZDEoKSA9PSBjaGlsZDEKLSAgICAgICAgICAgICAgICAg
ICAgJiYgbm9kZS5zdHJ1Y3R1cmVTZXQoKS5jb250YWluc09ubHkoc3RydWN0dXJlKSkKKyAgICAg
ICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCkgPT0gY2hpbGQxCisgICAgICAgICAgICAgICAg
ICAgICYmIG5vZGUtPnN0cnVjdHVyZVNldCgpLmNvbnRhaW5zT25seShzdHJ1Y3R1cmUpKQogICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgICAgICAKICAgICAgICAgICAgIGNhc2UgUHV0U3RydWN0dXJlOgotICAgICAgICAg
ICAgICAgIEFTU0VSVChub2RlLnN0cnVjdHVyZVRyYW5zaXRpb25EYXRhKCkucHJldmlvdXNTdHJ1
Y3R1cmUgIT0gc3RydWN0dXJlKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQobm9kZS0+c3RydWN0
dXJlVHJhbnNpdGlvbkRhdGEoKS5wcmV2aW91c1N0cnVjdHVyZSAhPSBzdHJ1Y3R1cmUpOwogICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgY2FzZSBQ
dXRCeU9mZnNldDoKQEAgLTUzMCw3ICs1MjEsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAg
IAogICAgICAgICAgICAgY2FzZSBTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludDoKICAgICAg
ICAgICAgIGNhc2UgRm9yd2FyZFN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50OgotICAgICAg
ICAgICAgICAgIGlmIChub2RlLnN0cnVjdHVyZSgpID09IHN0cnVjdHVyZSAmJiBub2RlLmNoaWxk
MSgpID09IGNoaWxkMSkKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+c3RydWN0dXJlKCkgPT0g
c3RydWN0dXJlICYmIG5vZGUtPmNoaWxkMSgpID09IGNoaWxkMSkKICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAg
CkBAIC01NDEsNyArNTMyLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAg
ICAgIGlmIChtX2dyYXBoLmNsb2JiZXJzV29ybGQoaW5kZXgpKQorICAgICAgICAgICAgICAgIGlm
IChtX2dyYXBoLmNsb2JiZXJzV29ybGQobm9kZSkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KQEAgLTU0OSwy
OCArNTQwLDI3IEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAg
Ci0gICAgTm9kZUluZGV4IHB1dFN0cnVjdHVyZVN0b3JlRWxpbWluYXRpb24oTm9kZUluZGV4IGNo
aWxkMSkKKyAgICBOb2RlKiBwdXRTdHJ1Y3R1cmVTdG9yZUVsaW1pbmF0aW9uKE5vZGUqIGNoaWxk
MSkKICAgICB7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1faW5kZXhJbkJsb2NrOyBpLS07
KSB7Ci0gICAgICAgICAgICBOb2RlSW5kZXggaW5kZXggPSBtX2N1cnJlbnRCbG9jay0+YXQoaSk7
Ci0gICAgICAgICAgICBpZiAoaW5kZXggPT0gY2hpbGQxKQorICAgICAgICAgICAgTm9kZSogbm9k
ZSA9IG1fY3VycmVudEJsb2NrLT5hdChpKTsKKyAgICAgICAgICAgIGlmIChub2RlID09IGNoaWxk
MSkKICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIE5vZGUmIG5vZGUgPSBtX2dy
YXBoW2luZGV4XTsKLSAgICAgICAgICAgIGlmICghbm9kZS5zaG91bGRHZW5lcmF0ZSgpKQorICAg
ICAgICAgICAgaWYgKCFub2RlLT5zaG91bGRHZW5lcmF0ZSgpKQogICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwotICAgICAgICAgICAgc3dpdGNoIChub2RlLm9wKCkpIHsKKyAgICAgICAgICAgIHN3
aXRjaCAobm9kZS0+b3AoKSkgewogICAgICAgICAgICAgY2FzZSBDaGVja1N0cnVjdHVyZToKICAg
ICAgICAgICAgIGNhc2UgRm9yd2FyZENoZWNrU3RydWN0dXJlOgogICAgICAgICAgICAgICAgIHJl
dHVybiBOb05vZGU7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBjYXNlIFBoYW50b21Q
dXRTdHJ1Y3R1cmU6Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGUuY2hpbGQxKCkgPT0gY2hpbGQx
KSAvLyBObyBuZWVkIHRvIHJldHJhY2Ugb3VyIHN0ZXBzLgorICAgICAgICAgICAgICAgIGlmIChu
b2RlLT5jaGlsZDEoKSA9PSBjaGlsZDEpIC8vIE5vIG5lZWQgdG8gcmV0cmFjZSBvdXIgc3RlcHMu
CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOb05vZGU7CiAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBjYXNlIFB1dFN0cnVjdHVyZToKLSAg
ICAgICAgICAgICAgICBpZiAobm9kZS5jaGlsZDEoKSA9PSBjaGlsZDEpCi0gICAgICAgICAgICAg
ICAgICAgIHJldHVybiBpbmRleDsKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCkg
PT0gY2hpbGQxKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gbm9kZTsKICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIC8vIFB1dFN0cnVjdHVy
ZSBuZWVkcyB0byBleGVjdXRlIGlmIHdlIEdDLiBIZW5jZSB0aGlzIG5lZWRzIHRvCkBAIC01OTIs
NDQgKzU4Miw0MyBAQCBwcml2YXRlOgogICAgICAgICAgICAgY2FzZSBBbGxvY2F0ZVByb3BlcnR5
U3RvcmFnZToKICAgICAgICAgICAgIGNhc2UgUmVhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZToKICAg
ICAgICAgICAgIGNhc2UgVHlwZU9mOgotICAgICAgICAgICAgICAgIHJldHVybiBOb05vZGU7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBj
YXNlIEdldEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2U6Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGUu
YXJyYXlNb2RlKCkuZ2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZU1heVRyaWdnZXJHQygpKQotICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gTm9Ob2RlOworICAgICAgICAgICAgICAgIGlmIChub2Rl
LT5hcnJheU1vZGUoKS5nZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlTWF5VHJpZ2dlckdDKCkpCisg
ICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgICAgIAogICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChtX2dyYXBoLmNsb2JiZXJzV29ybGQo
aW5kZXgpIHx8IG5vZGUuY2FuRXhpdCgpKQotICAgICAgICAgICAgICAgIHJldHVybiBOb05vZGU7
CisgICAgICAgICAgICBpZiAobV9ncmFwaC5jbG9iYmVyc1dvcmxkKG5vZGUpIHx8IG5vZGUtPmNh
bkV4aXQoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgfQotICAgICAgICBy
ZXR1cm4gTm9Ob2RlOworICAgICAgICByZXR1cm4gMDsKICAgICB9CiAgICAgCi0gICAgTm9kZUlu
ZGV4IGdldEJ5T2Zmc2V0TG9hZEVsaW1pbmF0aW9uKHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIs
IE5vZGVJbmRleCBjaGlsZDEpCisgICAgTm9kZSogZ2V0QnlPZmZzZXRMb2FkRWxpbWluYXRpb24o
dW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgTm9kZSogY2hpbGQxKQogICAgIHsKICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gbV9pbmRleEluQmxvY2s7IGktLTspIHsKLSAgICAgICAgICAgIE5v
ZGVJbmRleCBpbmRleCA9IG1fY3VycmVudEJsb2NrLT5hdChpKTsKLSAgICAgICAgICAgIGlmIChp
bmRleCA9PSBjaGlsZDEpCisgICAgICAgICAgICBOb2RlKiBub2RlID0gbV9jdXJyZW50QmxvY2st
PmF0KGkpOworICAgICAgICAgICAgaWYgKG5vZGUgPT0gY2hpbGQxKQogICAgICAgICAgICAgICAg
IGJyZWFrOwogCi0gICAgICAgICAgICBOb2RlJiBub2RlID0gbV9ncmFwaFtpbmRleF07Ci0gICAg
ICAgICAgICBpZiAoIW5vZGUuc2hvdWxkR2VuZXJhdGUoKSkKKyAgICAgICAgICAgIGlmICghbm9k
ZS0+c2hvdWxkR2VuZXJhdGUoKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAg
ICAgIHN3aXRjaCAobm9kZS5vcCgpKSB7CisgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkp
IHsKICAgICAgICAgICAgIGNhc2UgR2V0QnlPZmZzZXQ6Ci0gICAgICAgICAgICAgICAgaWYgKG5v
ZGUuY2hpbGQxKCkgPT0gY2hpbGQxCi0gICAgICAgICAgICAgICAgICAgICYmIG1fZ3JhcGgubV9z
dG9yYWdlQWNjZXNzRGF0YVtub2RlLnN0b3JhZ2VBY2Nlc3NEYXRhSW5kZXgoKV0uaWRlbnRpZmll
ck51bWJlciA9PSBpZGVudGlmaWVyTnVtYmVyKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4g
aW5kZXg7CisgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpID09IGNoaWxkMQorICAg
ICAgICAgICAgICAgICAgICAmJiBtX2dyYXBoLm1fc3RvcmFnZUFjY2Vzc0RhdGFbbm9kZS0+c3Rv
cmFnZUFjY2Vzc0RhdGFJbmRleCgpXS5pZGVudGlmaWVyTnVtYmVyID09IGlkZW50aWZpZXJOdW1i
ZXIpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBub2RlOwogICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgY2FzZSBQdXRCeU9mZnNldDoKLSAg
ICAgICAgICAgICAgICBpZiAobV9ncmFwaC5tX3N0b3JhZ2VBY2Nlc3NEYXRhW25vZGUuc3RvcmFn
ZUFjY2Vzc0RhdGFJbmRleCgpXS5pZGVudGlmaWVyTnVtYmVyID09IGlkZW50aWZpZXJOdW1iZXIp
IHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUuY2hpbGQxKCkgPT0gY2hpbGQxKSAvLyBN
dXN0IGJlIHNhbWUgcHJvcGVydHkgc3RvcmFnZS4KLSAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBub2RlLmNoaWxkMygpLmluZGV4KCk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBO
b05vZGU7CisgICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGgubV9zdG9yYWdlQWNjZXNzRGF0YVtu
b2RlLT5zdG9yYWdlQWNjZXNzRGF0YUluZGV4KCldLmlkZW50aWZpZXJOdW1iZXIgPT0gaWRlbnRp
Zmllck51bWJlcikgeworICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCkgPT0g
Y2hpbGQxKSAvLyBNdXN0IGJlIHNhbWUgcHJvcGVydHkgc3RvcmFnZS4KKyAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBub2RlLT5jaGlsZDMoKS5ub2RlKCk7CisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiAwOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgICAgICAKQEAgLTY0NSwzOCArNjM0LDM3IEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICAgICAgICAgIC8vIGNoYW5nZS4KICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHJldHVybiBOb05vZGU7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBkZWZhdWx0Ogot
ICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLmNsb2JiZXJzV29ybGQoaW5kZXgpKQotICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gTm9Ob2RlOworICAgICAgICAgICAgICAgIGlmIChtX2dyYXBo
LmNsb2JiZXJzV29ybGQobm9kZSkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIHJl
dHVybiBOb05vZGU7CisgICAgICAgIHJldHVybiAwOwogICAgIH0KICAgICAKLSAgICBOb2RlSW5k
ZXggcHV0QnlPZmZzZXRTdG9yZUVsaW1pbmF0aW9uKHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIs
IE5vZGVJbmRleCBjaGlsZDEpCisgICAgTm9kZSogcHV0QnlPZmZzZXRTdG9yZUVsaW1pbmF0aW9u
KHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIE5vZGUqIGNoaWxkMSkKICAgICB7CiAgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IG1faW5kZXhJbkJsb2NrOyBpLS07KSB7Ci0gICAgICAgICAgICBO
b2RlSW5kZXggaW5kZXggPSBtX2N1cnJlbnRCbG9jay0+YXQoaSk7Ci0gICAgICAgICAgICBpZiAo
aW5kZXggPT0gY2hpbGQxKQorICAgICAgICAgICAgTm9kZSogbm9kZSA9IG1fY3VycmVudEJsb2Nr
LT5hdChpKTsKKyAgICAgICAgICAgIGlmIChub2RlID09IGNoaWxkMSkKICAgICAgICAgICAgICAg
ICBicmVhazsKIAotICAgICAgICAgICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhbaW5kZXhdOwotICAg
ICAgICAgICAgaWYgKCFub2RlLnNob3VsZEdlbmVyYXRlKCkpCisgICAgICAgICAgICBpZiAoIW5v
ZGUtPnNob3VsZEdlbmVyYXRlKCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAg
ICAgICBzd2l0Y2ggKG5vZGUub3AoKSkgeworICAgICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgp
KSB7CiAgICAgICAgICAgICBjYXNlIEdldEJ5T2Zmc2V0OgotICAgICAgICAgICAgICAgIGlmICht
X2dyYXBoLm1fc3RvcmFnZUFjY2Vzc0RhdGFbbm9kZS5zdG9yYWdlQWNjZXNzRGF0YUluZGV4KCld
LmlkZW50aWZpZXJOdW1iZXIgPT0gaWRlbnRpZmllck51bWJlcikKLSAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIE5vTm9kZTsKKyAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC5tX3N0b3JhZ2VB
Y2Nlc3NEYXRhW25vZGUtPnN0b3JhZ2VBY2Nlc3NEYXRhSW5kZXgoKV0uaWRlbnRpZmllck51bWJl
ciA9PSBpZGVudGlmaWVyTnVtYmVyKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGNhc2Ug
UHV0QnlPZmZzZXQ6Ci0gICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGgubV9zdG9yYWdlQWNjZXNz
RGF0YVtub2RlLnN0b3JhZ2VBY2Nlc3NEYXRhSW5kZXgoKV0uaWRlbnRpZmllck51bWJlciA9PSBp
ZGVudGlmaWVyTnVtYmVyKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChub2RlLmNoaWxkMSgp
ID09IGNoaWxkMSkgLy8gTXVzdCBiZSBzYW1lIHByb3BlcnR5IHN0b3JhZ2UuCi0gICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gaW5kZXg7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBO
b05vZGU7CisgICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGgubV9zdG9yYWdlQWNjZXNzRGF0YVtu
b2RlLT5zdG9yYWdlQWNjZXNzRGF0YUluZGV4KCldLmlkZW50aWZpZXJOdW1iZXIgPT0gaWRlbnRp
Zmllck51bWJlcikgeworICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCkgPT0g
Y2hpbGQxKSAvLyBNdXN0IGJlIHNhbWUgcHJvcGVydHkgc3RvcmFnZS4KKyAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBub2RlOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAg
CkBAIC02ODksNDUgKzY3Nyw0NCBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICAvLyBj
aGFuZ2UuCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICByZXR1cm4gTm9Ob2RlOworICAgICAgICAgICAgICAgIHJldHVybiAwOwog
ICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBp
ZiAobV9ncmFwaC5jbG9iYmVyc1dvcmxkKGluZGV4KSkKLSAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIE5vTm9kZTsKKyAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC5jbG9iYmVyc1dvcmxkKG5v
ZGUpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChub2RlLmNhbkV4aXQoKSkKLSAgICAg
ICAgICAgICAgICByZXR1cm4gTm9Ob2RlOworICAgICAgICAgICAgaWYgKG5vZGUtPmNhbkV4aXQo
KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgfQotICAgICAgICByZXR1cm4g
Tm9Ob2RlOworICAgICAgICByZXR1cm4gMDsKICAgICB9CiAgICAgCi0gICAgTm9kZUluZGV4IGdl
dFByb3BlcnR5U3RvcmFnZUxvYWRFbGltaW5hdGlvbihOb2RlSW5kZXggY2hpbGQxKQorICAgIE5v
ZGUqIGdldFByb3BlcnR5U3RvcmFnZUxvYWRFbGltaW5hdGlvbihOb2RlKiBjaGlsZDEpCiAgICAg
ewogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2luZGV4SW5CbG9jazsgaS0tOykgewotICAg
ICAgICAgICAgTm9kZUluZGV4IGluZGV4ID0gbV9jdXJyZW50QmxvY2stPmF0KGkpOwotICAgICAg
ICAgICAgaWYgKGluZGV4ID09IGNoaWxkMSkgCisgICAgICAgICAgICBOb2RlKiBub2RlID0gbV9j
dXJyZW50QmxvY2stPmF0KGkpOworICAgICAgICAgICAgaWYgKG5vZGUgPT0gY2hpbGQxKSAKICAg
ICAgICAgICAgICAgICBicmVhazsKIAotICAgICAgICAgICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhb
aW5kZXhdOwotICAgICAgICAgICAgaWYgKCFub2RlLnNob3VsZEdlbmVyYXRlKCkpCisgICAgICAg
ICAgICBpZiAoIW5vZGUtPnNob3VsZEdlbmVyYXRlKCkpCiAgICAgICAgICAgICAgICAgY29udGlu
dWU7Ci0gICAgICAgICAgICBzd2l0Y2ggKG5vZGUub3AoKSkgeworICAgICAgICAgICAgc3dpdGNo
IChub2RlLT5vcCgpKSB7CiAgICAgICAgICAgICBjYXNlIEdldEJ1dHRlcmZseToKLSAgICAgICAg
ICAgICAgICBpZiAobm9kZS5jaGlsZDEoKSA9PSBjaGlsZDEpCi0gICAgICAgICAgICAgICAgICAg
IHJldHVybiBpbmRleDsKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCkgPT0gY2hp
bGQxKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gbm9kZTsKICAgICAgICAgICAgICAgICBi
cmVhazsKIAogICAgICAgICAgICAgY2FzZSBBbGxvY2F0ZVByb3BlcnR5U3RvcmFnZToKICAgICAg
ICAgICAgIGNhc2UgUmVhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZToKICAgICAgICAgICAgICAgICAv
LyBJZiB3ZSBjYW4gY2hlYXBseSBwcm92ZSB0aGlzIGlzIGEgY2hhbmdlIHRvIG91ciBvYmplY3Qn
cyBzdG9yYWdlLCB3ZQogICAgICAgICAgICAgICAgIC8vIGNhbiBvcHRpbWl6ZSBhbmQgdXNlIGl0
cyByZXN1bHQuCi0gICAgICAgICAgICAgICAgaWYgKG5vZGUuY2hpbGQxKCkgPT0gY2hpbGQxKQot
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW5kZXg7CisgICAgICAgICAgICAgICAgaWYgKG5v
ZGUtPmNoaWxkMSgpID09IGNoaWxkMSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGU7
CiAgICAgICAgICAgICAgICAgLy8gT3RoZXJ3aXNlLCB3ZSBjdXJyZW50bHkgY2FuJ3QgcHJvdmUg
dGhhdCB0aGlzIGRvZXNuJ3QgY2hhbmdlIG91ciBvYmplY3QncwogICAgICAgICAgICAgICAgIC8v
IHN0b3JhZ2UsIHNvIHdlIGNvbnNlcnZhdGl2ZWx5IGFzc3VtZSB0aGF0IGl0IG1heSBjaGFuZ2Ug
dGhlIHN0b3JhZ2UKICAgICAgICAgICAgICAgICAvLyBwb2ludGVyIG9mIGFueSBvYmplY3QsIGlu
Y2x1ZGluZyBvdXJzLgotICAgICAgICAgICAgICAgIHJldHVybiBOb05vZGU7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBjYXNlIFB1dEJ5
T2Zmc2V0OgogICAgICAgICAgICAgY2FzZSBQdXRTdHJ1Y3R1cmU6CkBAIC03NDMsMzQgKzczMCwz
MyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICAvLyBjaGFuZ2UuCiAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICByZXR1
cm4gTm9Ob2RlOworICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAgICAgIAog
ICAgICAgICAgICAgY2FzZSBBcnJheWlmeToKICAgICAgICAgICAgIGNhc2UgQXJyYXlpZnlUb1N0
cnVjdHVyZToKICAgICAgICAgICAgICAgICAvLyBXZSBjb3VsZCBjaGVjayBpZiB0aGUgYXJyYXlp
ZmljYXRpb24gY291bGQgYWZmZWN0IG91ciBidXR0ZXJmbHkuCiAgICAgICAgICAgICAgICAgLy8g
QnV0IHRoYXQgc2VlbXMgbGlrZSBpdCB3b3VsZCB0YWtlIEVmZm9ydC4KLSAgICAgICAgICAgICAg
ICByZXR1cm4gTm9Ob2RlOworICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAg
ICAgIAogICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC5j
bG9iYmVyc1dvcmxkKGluZGV4KSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5vTm9kZTsK
KyAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC5jbG9iYmVyc1dvcmxkKG5vZGUpKQorICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgIH0KICAgICAgICAgfQotICAgICAgICByZXR1cm4gTm9Ob2RlOworICAgICAgICByZXR1cm4g
MDsKICAgICB9CiAgICAgCi0gICAgYm9vbCBjaGVja0FycmF5RWxpbWluYXRpb24oTm9kZUluZGV4
IGNoaWxkMSwgQXJyYXlNb2RlIGFycmF5TW9kZSkKKyAgICBib29sIGNoZWNrQXJyYXlFbGltaW5h
dGlvbihOb2RlKiBjaGlsZDEsIEFycmF5TW9kZSBhcnJheU1vZGUpCiAgICAgewogICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSBtX2luZGV4SW5CbG9jazsgaS0tOykgewotICAgICAgICAgICAgTm9k
ZUluZGV4IGluZGV4ID0gbV9jdXJyZW50QmxvY2stPmF0KGkpOwotICAgICAgICAgICAgaWYgKGlu
ZGV4ID09IGNoaWxkMSkgCisgICAgICAgICAgICBOb2RlKiBub2RlID0gbV9jdXJyZW50QmxvY2st
PmF0KGkpOworICAgICAgICAgICAgaWYgKG5vZGUgPT0gY2hpbGQxKSAKICAgICAgICAgICAgICAg
ICBicmVhazsKIAotICAgICAgICAgICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhbaW5kZXhdOwotICAg
ICAgICAgICAgaWYgKCFub2RlLnNob3VsZEdlbmVyYXRlKCkpCisgICAgICAgICAgICBpZiAoIW5v
ZGUtPnNob3VsZEdlbmVyYXRlKCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAg
ICAgICBzd2l0Y2ggKG5vZGUub3AoKSkgeworICAgICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgp
KSB7CiAgICAgICAgICAgICBjYXNlIFB1dEJ5T2Zmc2V0OgogICAgICAgICAgICAgY2FzZSBQdXRT
dHJ1Y3R1cmU6CiAgICAgICAgICAgICAgICAgLy8gQ2hhbmdpbmcgdGhlIHN0cnVjdHVyZSBvciBw
dXR0aW5nIHRvIHRoZSBzdG9yYWdlIGNhbm5vdApAQCAtNzc4LDcgKzc2NCw3IEBAIHByaXZhdGU6
CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBj
YXNlIENoZWNrQXJyYXk6Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGUuY2hpbGQxKCkgPT0gY2hp
bGQxICYmIG5vZGUuYXJyYXlNb2RlKCkgPT0gYXJyYXlNb2RlKQorICAgICAgICAgICAgICAgIGlm
IChub2RlLT5jaGlsZDEoKSA9PSBjaGlsZDEgJiYgbm9kZS0+YXJyYXlNb2RlKCkgPT0gYXJyYXlN
b2RlKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgICAgICAKQEAgLTc4OSw3ICs3NzUsNyBAQCBwcml2YXRlOgogICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAg
IGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGguY2xvYmJlcnNXb3JsZChpbmRl
eCkpCisgICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGguY2xvYmJlcnNXb3JsZChub2RlKSkKICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgfQpAQCAtNzk3LDIwICs3ODMsMTkgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgIH0KIAotICAgIE5vZGVJbmRleCBnZXRJbmRleGVkUHJvcGVydHlTdG9y
YWdlTG9hZEVsaW1pbmF0aW9uKE5vZGVJbmRleCBjaGlsZDEsIEFycmF5TW9kZSBhcnJheU1vZGUp
CisgICAgTm9kZSogZ2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZUxvYWRFbGltaW5hdGlvbihOb2Rl
KiBjaGlsZDEsIEFycmF5TW9kZSBhcnJheU1vZGUpCiAgICAgewogICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSBtX2luZGV4SW5CbG9jazsgaS0tOykgewotICAgICAgICAgICAgTm9kZUluZGV4IGlu
ZGV4ID0gbV9jdXJyZW50QmxvY2stPmF0KGkpOwotICAgICAgICAgICAgaWYgKGluZGV4ID09IGNo
aWxkMSkgCisgICAgICAgICAgICBOb2RlKiBub2RlID0gbV9jdXJyZW50QmxvY2stPmF0KGkpOwor
ICAgICAgICAgICAgaWYgKG5vZGUgPT0gY2hpbGQxKSAKICAgICAgICAgICAgICAgICBicmVhazsK
IAotICAgICAgICAgICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhbaW5kZXhdOwotICAgICAgICAgICAg
aWYgKCFub2RlLnNob3VsZEdlbmVyYXRlKCkpCisgICAgICAgICAgICBpZiAoIW5vZGUtPnNob3Vs
ZEdlbmVyYXRlKCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBzd2l0
Y2ggKG5vZGUub3AoKSkgeworICAgICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CiAgICAg
ICAgICAgICBjYXNlIEdldEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2U6IHsKLSAgICAgICAgICAgICAg
ICBpZiAobm9kZS5jaGlsZDEoKSA9PSBjaGlsZDEgJiYgbm9kZS5hcnJheU1vZGUoKSA9PSBhcnJh
eU1vZGUpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBpbmRleDsKKyAgICAgICAgICAgICAg
ICBpZiAobm9kZS0+Y2hpbGQxKCkgPT0gY2hpbGQxICYmIG5vZGUtPmFycmF5TW9kZSgpID09IGFy
cmF5TW9kZSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGU7CiAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAKQEAgLTgyMSw4MSArODA2LDc5IEBAIHByaXZhdGU6
CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBk
ZWZhdWx0OgotICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLmNsb2JiZXJzV29ybGQoaW5kZXgp
KQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gTm9Ob2RlOworICAgICAgICAgICAgICAgIGlm
IChtX2dyYXBoLmNsb2JiZXJzV29ybGQobm9kZSkpCisgICAgICAgICAgICAgICAgICAgIHJldHVy
biAwOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0g
ICAgICAgIHJldHVybiBOb05vZGU7CisgICAgICAgIHJldHVybiAwOwogICAgIH0KICAgICAKLSAg
ICBOb2RlSW5kZXggZ2V0TXlTY29wZUxvYWRFbGltaW5hdGlvbihJbmxpbmVDYWxsRnJhbWUqIGlu
bGluZUNhbGxGcmFtZSkKKyAgICBOb2RlKiBnZXRNeVNjb3BlTG9hZEVsaW1pbmF0aW9uKElubGlu
ZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lKQogICAgIHsKICAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gbV9pbmRleEluQmxvY2s7IGktLTspIHsKLSAgICAgICAgICAgIE5vZGVJbmRleCBpbmRl
eCA9IG1fY3VycmVudEJsb2NrLT5hdChpKTsKLSAgICAgICAgICAgIE5vZGUmIG5vZGUgPSBtX2dy
YXBoW2luZGV4XTsKLSAgICAgICAgICAgIGlmICghbm9kZS5zaG91bGRHZW5lcmF0ZSgpKQorICAg
ICAgICAgICAgTm9kZSogbm9kZSA9IG1fY3VycmVudEJsb2NrLT5hdChpKTsKKyAgICAgICAgICAg
IGlmICghbm9kZS0+c2hvdWxkR2VuZXJhdGUoKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsK
LSAgICAgICAgICAgIGlmIChub2RlLmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lICE9IGlubGlu
ZUNhbGxGcmFtZSkKKyAgICAgICAgICAgIGlmIChub2RlLT5jb2RlT3JpZ2luLmlubGluZUNhbGxG
cmFtZSAhPSBpbmxpbmVDYWxsRnJhbWUpCiAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgICAgICBzd2l0Y2ggKG5vZGUub3AoKSkgeworICAgICAgICAgICAgc3dpdGNoIChub2RlLT5v
cCgpKSB7CiAgICAgICAgICAgICBjYXNlIENyZWF0ZUFjdGl2YXRpb246CiAgICAgICAgICAgICAg
ICAgLy8gVGhpcyBtYXkgY2F1c2UgdXMgdG8gcmV0dXJuIGEgZGlmZmVyZW50IHNjb3BlLgotICAg
ICAgICAgICAgICAgIHJldHVybiBOb05vZGU7CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAg
ICAgICAgICAgICBjYXNlIEdldE15U2NvcGU6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGluZGV4
OworICAgICAgICAgICAgICAgIHJldHVybiBub2RlOwogICAgICAgICAgICAgY2FzZSBTZXRNeVNj
b3BlOgotICAgICAgICAgICAgICAgIHJldHVybiBub2RlLmNoaWxkMSgpLmluZGV4KCk7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKICAgICAgICAgICAgIGRl
ZmF1bHQ6CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0K
LSAgICAgICAgcmV0dXJuIE5vTm9kZTsKKyAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogICAgIAot
ICAgIE5vZGVJbmRleCBnZXRMb2NhbExvYWRFbGltaW5hdGlvbihWaXJ0dWFsUmVnaXN0ZXIgbG9j
YWwsIE5vZGVJbmRleCYgcmVsZXZhbnRMb2NhbE9wLCBib29sIGNhcmVBYm91dENsb2JiZXJpbmcp
CisgICAgTm9kZSogZ2V0TG9jYWxMb2FkRWxpbWluYXRpb24oVmlydHVhbFJlZ2lzdGVyIGxvY2Fs
LCBOb2RlKiYgcmVsZXZhbnRMb2NhbE9wLCBib29sIGNhcmVBYm91dENsb2JiZXJpbmcpCiAgICAg
ewotICAgICAgICByZWxldmFudExvY2FsT3AgPSBOb05vZGU7CisgICAgICAgIHJlbGV2YW50TG9j
YWxPcCA9IDA7CiAgICAgICAgIAogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2luZGV4SW5C
bG9jazsgaS0tOykgewotICAgICAgICAgICAgTm9kZUluZGV4IGluZGV4ID0gbV9jdXJyZW50Qmxv
Y2stPmF0KGkpOwotICAgICAgICAgICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhbaW5kZXhdOwotICAg
ICAgICAgICAgaWYgKCFub2RlLnNob3VsZEdlbmVyYXRlKCkpCisgICAgICAgICAgICBOb2RlKiBu
b2RlID0gbV9jdXJyZW50QmxvY2stPmF0KGkpOworICAgICAgICAgICAgaWYgKCFub2RlLT5zaG91
bGRHZW5lcmF0ZSgpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgc3dp
dGNoIChub2RlLm9wKCkpIHsKKyAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewogICAg
ICAgICAgICAgY2FzZSBHZXRMb2NhbDoKLSAgICAgICAgICAgICAgICBpZiAobm9kZS5sb2NhbCgp
ID09IGxvY2FsKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJlbGV2YW50TG9jYWxPcCA9IGluZGV4
OwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW5kZXg7CisgICAgICAgICAgICAgICAgaWYg
KG5vZGUtPmxvY2FsKCkgPT0gbG9jYWwpIHsKKyAgICAgICAgICAgICAgICAgICAgcmVsZXZhbnRM
b2NhbE9wID0gbm9kZTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGU7CiAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIAogICAg
ICAgICAgICAgY2FzZSBHZXRMb2NhbFVubGlua2VkOgotICAgICAgICAgICAgICAgIGlmIChub2Rl
LnVubGlua2VkTG9jYWwoKSA9PSBsb2NhbCkgewotICAgICAgICAgICAgICAgICAgICByZWxldmFu
dExvY2FsT3AgPSBpbmRleDsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGluZGV4OworICAg
ICAgICAgICAgICAgIGlmIChub2RlLT51bmxpbmtlZExvY2FsKCkgPT0gbG9jYWwpIHsKKyAgICAg
ICAgICAgICAgICAgICAgcmVsZXZhbnRMb2NhbE9wID0gbm9kZTsKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIG5vZGU7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgY2FzZSBTZXRMb2NhbDoKLSAgICAgICAg
ICAgICAgICBpZiAobm9kZS5sb2NhbCgpID09IGxvY2FsKSB7Ci0gICAgICAgICAgICAgICAgICAg
IHJlbGV2YW50TG9jYWxPcCA9IGluZGV4OwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gbm9k
ZS5jaGlsZDEoKS5pbmRleCgpOworICAgICAgICAgICAgICAgIGlmIChub2RlLT5sb2NhbCgpID09
IGxvY2FsKSB7CisgICAgICAgICAgICAgICAgICAgIHJlbGV2YW50TG9jYWxPcCA9IG5vZGU7Cisg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBub2RlLT5jaGlsZDEoKS5ub2RlKCk7CiAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIAogICAg
ICAgICAgICAgY2FzZSBQdXRTY29wZWRWYXI6Ci0gICAgICAgICAgICAgICAgaWYgKHN0YXRpY19j
YXN0PFZpcnR1YWxSZWdpc3Rlcj4obm9kZS52YXJOdW1iZXIoKSkgPT0gbG9jYWwpCi0gICAgICAg
ICAgICAgICAgICAgIHJldHVybiBOb05vZGU7CisgICAgICAgICAgICAgICAgaWYgKHN0YXRpY19j
YXN0PFZpcnR1YWxSZWdpc3Rlcj4obm9kZS0+dmFyTnVtYmVyKCkpID09IGxvY2FsKQorICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgICAgICAKICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgaWYgKGNhcmVB
Ym91dENsb2JiZXJpbmcgJiYgbV9ncmFwaC5jbG9iYmVyc1dvcmxkKGluZGV4KSkKLSAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIE5vTm9kZTsKKyAgICAgICAgICAgICAgICBpZiAoY2FyZUFib3V0
Q2xvYmJlcmluZyAmJiBtX2dyYXBoLmNsb2JiZXJzV29ybGQobm9kZSkpCisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQog
ICAgICAgICB9Ci0gICAgICAgIHJldHVybiBOb05vZGU7CisgICAgICAgIHJldHVybiAwOwogICAg
IH0KICAgICAKICAgICBzdHJ1Y3QgU2V0TG9jYWxTdG9yZUVsaW1pbmF0aW9uUmVzdWx0IHsKQEAg
LTkxMSw1MSArODk0LDUwIEBAIHByaXZhdGU6CiAgICAgICAgIGJvb2wgbWF5Q2xvYmJlcldvcmxk
OwogICAgIH07CiAgICAgU2V0TG9jYWxTdG9yZUVsaW1pbmF0aW9uUmVzdWx0IHNldExvY2FsU3Rv
cmVFbGltaW5hdGlvbigKLSAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGxvY2FsLCBOb2RlSW5kZXgg
ZXhwZWN0ZWROb2RlSW5kZXgpCisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBsb2NhbCwgTm9kZSog
ZXhwZWN0ZWROb2RlSW5kZXgpCiAgICAgewogICAgICAgICBTZXRMb2NhbFN0b3JlRWxpbWluYXRp
b25SZXN1bHQgcmVzdWx0OwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2luZGV4SW5CbG9j
azsgaS0tOykgewotICAgICAgICAgICAgTm9kZUluZGV4IGluZGV4ID0gbV9jdXJyZW50QmxvY2st
PmF0KGkpOwotICAgICAgICAgICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhbaW5kZXhdOwotICAgICAg
ICAgICAgaWYgKCFub2RlLnNob3VsZEdlbmVyYXRlKCkpCisgICAgICAgICAgICBOb2RlKiBub2Rl
ID0gbV9jdXJyZW50QmxvY2stPmF0KGkpOworICAgICAgICAgICAgaWYgKCFub2RlLT5zaG91bGRH
ZW5lcmF0ZSgpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgc3dpdGNo
IChub2RlLm9wKCkpIHsKKyAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewogICAgICAg
ICAgICAgY2FzZSBHZXRMb2NhbDoKICAgICAgICAgICAgIGNhc2UgRmx1c2g6Ci0gICAgICAgICAg
ICAgICAgaWYgKG5vZGUubG9jYWwoKSA9PSBsb2NhbCkKKyAgICAgICAgICAgICAgICBpZiAobm9k
ZS0+bG9jYWwoKSA9PSBsb2NhbCkKICAgICAgICAgICAgICAgICAgICAgcmVzdWx0Lm1heUJlQWNj
ZXNzZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIAog
ICAgICAgICAgICAgY2FzZSBHZXRMb2NhbFVubGlua2VkOgotICAgICAgICAgICAgICAgIGlmIChu
b2RlLnVubGlua2VkTG9jYWwoKSA9PSBsb2NhbCkKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+
dW5saW5rZWRMb2NhbCgpID09IGxvY2FsKQogICAgICAgICAgICAgICAgICAgICByZXN1bHQubWF5
QmVBY2Nlc3NlZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAg
ICAgCiAgICAgICAgICAgICBjYXNlIFNldExvY2FsOiB7Ci0gICAgICAgICAgICAgICAgaWYgKG5v
ZGUubG9jYWwoKSAhPSBsb2NhbCkKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+bG9jYWwoKSAh
PSBsb2NhbCkKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgaWYg
KGluZGV4ICE9IGV4cGVjdGVkTm9kZUluZGV4KQogICAgICAgICAgICAgICAgICAgICByZXN1bHQu
bWF5QmVBY2Nlc3NlZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGhbaW5kZXhd
LnJlZkNvdW50KCkgPiAxKQorICAgICAgICAgICAgICAgIGlmIChub2RlLT5yZWZDb3VudCgpID4g
MSkKICAgICAgICAgICAgICAgICAgICAgcmVzdWx0Lm1heUJlQWNjZXNzZWQgPSB0cnVlOwogICAg
ICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICAgCiAgICAgICAgICAgICBjYXNlIEdldFNjb3BlZFZhcjoKLSAgICAgICAgICAgICAgICBpZiAo
c3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihub2RlLnZhck51bWJlcigpKSA9PSBsb2NhbCkK
KyAgICAgICAgICAgICAgICBpZiAoc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihub2RlLT52
YXJOdW1iZXIoKSkgPT0gbG9jYWwpCiAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5tYXlCZUFj
Y2Vzc2VkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAK
ICAgICAgICAgICAgIGNhc2UgR2V0TXlTY29wZToKICAgICAgICAgICAgIGNhc2UgU2tpcFRvcFNj
b3BlOgotICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLnVuY2hlY2tlZEFjdGl2YXRpb25SZWdp
c3RlckZvcihub2RlLmNvZGVPcmlnaW4pID09IGxvY2FsKQorICAgICAgICAgICAgICAgIGlmICht
X2dyYXBoLnVuY2hlY2tlZEFjdGl2YXRpb25SZWdpc3RlckZvcihub2RlLT5jb2RlT3JpZ2luKSA9
PSBsb2NhbCkKICAgICAgICAgICAgICAgICAgICAgcmVzdWx0Lm1heUJlQWNjZXNzZWQgPSB0cnVl
OwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAg
Y2FzZSBDaGVja0FyZ3VtZW50c05vdENyZWF0ZWQ6CiAgICAgICAgICAgICBjYXNlIEdldE15QXJn
dW1lbnRzTGVuZ3RoOgogICAgICAgICAgICAgY2FzZSBHZXRNeUFyZ3VtZW50c0xlbmd0aFNhZmU6
Ci0gICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGgudW5jaGVja2VkQXJndW1lbnRzUmVnaXN0ZXJG
b3Iobm9kZS5jb2RlT3JpZ2luKSA9PSBsb2NhbCkKKyAgICAgICAgICAgICAgICBpZiAobV9ncmFw
aC51bmNoZWNrZWRBcmd1bWVudHNSZWdpc3RlckZvcihub2RlLT5jb2RlT3JpZ2luKSA9PSBsb2Nh
bCkKICAgICAgICAgICAgICAgICAgICAgcmVzdWx0Lm1heUJlQWNjZXNzZWQgPSB0cnVlOwogICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIApAQCAtOTY2LDcgKzk0OCw3IEBA
IHByaXZhdGU6CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBjYXNlIEdldEJ5VmFsOgog
ICAgICAgICAgICAgICAgIC8vIElmIHRoaXMgaXMgYWNjZXNzaW5nIGFyZ3VtZW50cyB0aGVuIGl0
J3MgcG90ZW50aWFsbHkgYWNjZXNzaW5nIGxvY2Fscy4KLSAgICAgICAgICAgICAgICBpZiAobV9n
cmFwaFtub2RlLmNoaWxkMSgpXS5zaG91bGRTcGVjdWxhdGVBcmd1bWVudHMoKSkKKyAgICAgICAg
ICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZUFyZ3VtZW50cygpKQog
ICAgICAgICAgICAgICAgICAgICByZXN1bHQubWF5QmVBY2Nlc3NlZCA9IHRydWU7CiAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgCkBAIC05ODMsOCArOTY1LDggQEAgcHJp
dmF0ZToKICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICByZXN1bHQubWF5RXhpdCB8PSBub2RlLmNhbkV4aXQoKTsK
LSAgICAgICAgICAgIHJlc3VsdC5tYXlDbG9iYmVyV29ybGQgfD0gbV9ncmFwaC5jbG9iYmVyc1dv
cmxkKGluZGV4KTsKKyAgICAgICAgICAgIHJlc3VsdC5tYXlFeGl0IHw9IG5vZGUtPmNhbkV4aXQo
KTsKKyAgICAgICAgICAgIHJlc3VsdC5tYXlDbG9iYmVyV29ybGQgfD0gbV9ncmFwaC5jbG9iYmVy
c1dvcmxkKG5vZGUpOwogICAgICAgICB9CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7CiAgICAgICAgIC8vIEJlIHNhZmUgaW4gcmVsZWFzZSBtb2RlLgpAQCAtOTk5LDYyICs5
ODEsNjEgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAgICAg
IC8vIENoZWNrIGlmIHRoZXJlIGlzIGFueSByZXBsYWNlbWVudC4KLSAgICAgICAgTm9kZUluZGV4
IHJlcGxhY2VtZW50ID0gbV9ncmFwaFtjaGlsZC5pbmRleCgpXS5yZXBsYWNlbWVudDsKLSAgICAg
ICAgaWYgKHJlcGxhY2VtZW50ID09IE5vTm9kZSkKKyAgICAgICAgTm9kZSogcmVwbGFjZW1lbnQg
PSBjaGlsZC0+cmVwbGFjZW1lbnQ7CisgICAgICAgIGlmICghcmVwbGFjZW1lbnQpCiAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgIAotICAgICAgICBjaGlsZC5zZXRJbmRleChyZXBsYWNlbWVu
dCk7CisgICAgICAgIGNoaWxkLnNldE5vZGUocmVwbGFjZW1lbnQpOwogICAgICAgICAKICAgICAg
ICAgLy8gVGhlcmUgaXMgZGVmaW5pdGVseSBhIHJlcGxhY2VtZW50LiBBc3NlcnQgdGhhdCB0aGUg
cmVwbGFjZW1lbnQgZG9lcyBub3QKICAgICAgICAgLy8gaGF2ZSBhIHJlcGxhY2VtZW50LgotICAg
ICAgICBBU1NFUlQobV9ncmFwaFtjaGlsZC5pbmRleCgpXS5yZXBsYWNlbWVudCA9PSBOb05vZGUp
OworICAgICAgICBBU1NFUlQoIWNoaWxkLT5yZXBsYWNlbWVudCk7CiAgICAgICAgIAogICAgICAg
ICBpZiAoYWRkUmVmKQogICAgICAgICAgICAgbV9ncmFwaC5yZWYoY2hpbGQpOwogICAgIH0KICAg
ICAKLSAgICB2b2lkIGVsaW1pbmF0ZUlycmVsZXZhbnRQaGFudG9tQ2hpbGRyZW4oTm9kZSYgbm9k
ZSkKKyAgICB2b2lkIGVsaW1pbmF0ZUlycmVsZXZhbnRQaGFudG9tQ2hpbGRyZW4oTm9kZSogbm9k
ZSkKICAgICB7Ci0gICAgICAgIEFTU0VSVChub2RlLm9wKCkgPT0gUGhhbnRvbSk7CisgICAgICAg
IEFTU0VSVChub2RlLT5vcCgpID09IFBoYW50b20pOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgQWRqYWNlbmN5TGlzdDo6U2l6ZTsgKytpKSB7Ci0gICAgICAgICAgICBFZGdlIGVk
Z2UgPSBub2RlLmNoaWxkcmVuLmNoaWxkKGkpOworICAgICAgICAgICAgRWRnZSBlZGdlID0gbm9k
ZS0+Y2hpbGRyZW4uY2hpbGQoaSk7CiAgICAgICAgICAgICBpZiAoIWVkZ2UpCiAgICAgICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBpZiAobV9ncmFwaFtlZGdlXS5mbGFncygpICYg
Tm9kZVJlbGV2YW50VG9PU1IpCisgICAgICAgICAgICBpZiAoZWRnZS0+ZmxhZ3MoKSAmIE5vZGVS
ZWxldmFudFRvT1NSKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgCiAj
aWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQotICAgICAgICAgICAgZGF0
YUxvZygiICAgRWxpbWluYXRpbmcgZWRnZSBAIiwgbV9jb21waWxlSW5kZXgsICIgLT4gQCIsIGVk
Z2UuaW5kZXgoKSk7CisgICAgICAgICAgICBkYXRhTG9nKCIgICBFbGltaW5hdGluZyBlZGdlIEAi
LCBtX2N1cnJlbnROb2RlLT5pbmRleCgpLCAiIC0+IEAiLCBlZGdlLT5pbmRleCgpKTsKICNlbmRp
ZgogICAgICAgICAgICAgbV9ncmFwaC5kZXJlZihlZGdlKTsKLSAgICAgICAgICAgIG5vZGUuY2hp
bGRyZW4ucmVtb3ZlRWRnZUZyb21CYWcoaS0tKTsKKyAgICAgICAgICAgIG5vZGUtPmNoaWxkcmVu
LnJlbW92ZUVkZ2VGcm9tQmFnKGktLSk7CiAgICAgICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOwog
ICAgICAgICB9CiAgICAgfQogICAgIAogICAgIGVudW0gUHJlZGljdGlvbkhhbmRsaW5nTW9kZSB7
IFJlcXVpcmVTYW1lUHJlZGljdGlvbiwgQWxsb3dQcmVkaWN0aW9uTWlzbWF0Y2ggfTsKLSAgICBi
b29sIHNldFJlcGxhY2VtZW50KE5vZGVJbmRleCByZXBsYWNlbWVudCwgUHJlZGljdGlvbkhhbmRs
aW5nTW9kZSBwcmVkaWN0aW9uSGFuZGxpbmdNb2RlID0gUmVxdWlyZVNhbWVQcmVkaWN0aW9uKQor
ICAgIGJvb2wgc2V0UmVwbGFjZW1lbnQoTm9kZSogcmVwbGFjZW1lbnQsIFByZWRpY3Rpb25IYW5k
bGluZ01vZGUgcHJlZGljdGlvbkhhbmRsaW5nTW9kZSA9IFJlcXVpcmVTYW1lUHJlZGljdGlvbikK
ICAgICB7Ci0gICAgICAgIGlmIChyZXBsYWNlbWVudCA9PSBOb05vZGUpCisgICAgICAgIGlmICgh
cmVwbGFjZW1lbnQpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIAogICAgICAg
ICAvLyBCZSBzYWZlLiBEb24ndCB0cnkgdG8gcGVyZm9ybSByZXBsYWNlbWVudHMgaWYgdGhlIHBy
ZWRpY3Rpb25zIGRvbid0CiAgICAgICAgIC8vIGFncmVlLgogICAgICAgICBpZiAocHJlZGljdGlv
bkhhbmRsaW5nTW9kZSA9PSBSZXF1aXJlU2FtZVByZWRpY3Rpb24KLSAgICAgICAgICAgICYmIG1f
Z3JhcGhbbV9jb21waWxlSW5kZXhdLnByZWRpY3Rpb24oKSAhPSBtX2dyYXBoW3JlcGxhY2VtZW50
XS5wcmVkaWN0aW9uKCkpCisgICAgICAgICAgICAmJiBtX2N1cnJlbnROb2RlLT5wcmVkaWN0aW9u
KCkgIT0gcmVwbGFjZW1lbnQtPnByZWRpY3Rpb24oKSkKICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICAgICAgCiAjaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQot
ICAgICAgICBkYXRhTG9nRigiICAgUmVwbGFjaW5nIEAldSAtPiBAJXUiLCBtX2NvbXBpbGVJbmRl
eCwgcmVwbGFjZW1lbnQpOworICAgICAgICBkYXRhTG9nRigiICAgUmVwbGFjaW5nIEAldSAtPiBA
JXUiLCBtX2NvbXBpbGVOb2RlLT5pbmRleCgpLCByZXBsYWNlbWVudC0+aW5kZXgoKSk7CiAjZW5k
aWYKICAgICAgICAgCi0gICAgICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW21fY29tcGlsZUluZGV4
XTsKLSAgICAgICAgbm9kZS5zZXRPcEFuZERlZmF1bHRGbGFncyhQaGFudG9tKTsKLSAgICAgICAg
bm9kZS5zZXRSZWZDb3VudCgxKTsKLSAgICAgICAgZWxpbWluYXRlSXJyZWxldmFudFBoYW50b21D
aGlsZHJlbihub2RlKTsKKyAgICAgICAgbV9jdXJyZW50Tm9kZS0+c2V0T3BBbmREZWZhdWx0Rmxh
Z3MoUGhhbnRvbSk7CisgICAgICAgIG1fY3VycmVudE5vZGUtPnNldFJlZkNvdW50KDEpOworICAg
ICAgICBlbGltaW5hdGVJcnJlbGV2YW50UGhhbnRvbUNoaWxkcmVuKG1fY3VycmVudE5vZGUpOwog
ICAgICAgICAKICAgICAgICAgLy8gQXQgdGhpcyBwb2ludCB3ZSB3aWxsIGVsaW1pbmF0ZSBhbGwg
cmVmZXJlbmNlcyB0byB0aGlzIG5vZGUuCi0gICAgICAgIG1fZ3JhcGhbbV9jb21waWxlSW5kZXhd
LnJlcGxhY2VtZW50ID0gcmVwbGFjZW1lbnQ7CisgICAgICAgIG1fY3VycmVudE5vZGUtPnJlcGxh
Y2VtZW50ID0gcmVwbGFjZW1lbnQ7CiAgICAgICAgIAogICAgICAgICBtX2NoYW5nZWQgPSB0cnVl
OwogICAgICAgICAKQEAgLTEwNjcsNTEgKzEwNDgsNDkgQEAgcHJpdmF0ZToKICAgICAgICAgZGF0
YUxvZ0YoIiAgIEVsaW1pbmF0aW5nIEAldSIsIG1fY29tcGlsZUluZGV4KTsKICNlbmRpZgogICAg
ICAgICAKLSAgICAgICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhbbV9jb21waWxlSW5kZXhdOwotICAg
ICAgICBBU1NFUlQobm9kZS5yZWZDb3VudCgpID09IDEpOwotICAgICAgICBBU1NFUlQobm9kZS5t
dXN0R2VuZXJhdGUoKSk7Ci0gICAgICAgIG5vZGUuc2V0T3BBbmREZWZhdWx0RmxhZ3MoUGhhbnRv
bSk7Ci0gICAgICAgIGVsaW1pbmF0ZUlycmVsZXZhbnRQaGFudG9tQ2hpbGRyZW4obm9kZSk7Cisg
ICAgICAgIEFTU0VSVChtX2N1cnJlbnROb2RlLT5yZWZDb3VudCgpID09IDEpOworICAgICAgICBB
U1NFUlQobV9jdXJyZW50Tm9kZS0+bXVzdEdlbmVyYXRlKCkpOworICAgICAgICBtX2N1cnJlbnRO
b2RlLT5zZXRPcEFuZERlZmF1bHRGbGFncyhQaGFudG9tKTsKKyAgICAgICAgZWxpbWluYXRlSXJy
ZWxldmFudFBoYW50b21DaGlsZHJlbihtX2N1cnJlbnROb2RlKTsKICAgICAgICAgCiAgICAgICAg
IG1fY2hhbmdlZCA9IHRydWU7CiAgICAgfQogICAgIAotICAgIHZvaWQgZWxpbWluYXRlKE5vZGVJ
bmRleCBub2RlSW5kZXgsIE5vZGVUeXBlIHBoYW50b21UeXBlID0gUGhhbnRvbSkKKyAgICB2b2lk
IGVsaW1pbmF0ZShOb2RlKiBub2RlLCBOb2RlVHlwZSBwaGFudG9tVHlwZSA9IFBoYW50b20pCiAg
ICAgewotICAgICAgICBpZiAobm9kZUluZGV4ID09IE5vTm9kZSkKKyAgICAgICAgaWYgKCFub2Rl
KQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBOb2RlJiBub2RlID0gbV9ncmFwaFtub2Rl
SW5kZXhdOwotICAgICAgICBpZiAobm9kZS5yZWZDb3VudCgpICE9IDEpCisgICAgICAgIGlmIChu
b2RlLT5yZWZDb3VudCgpICE9IDEpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIEFTU0VS
VChub2RlLm11c3RHZW5lcmF0ZSgpKTsKLSAgICAgICAgbm9kZS5zZXRPcEFuZERlZmF1bHRGbGFn
cyhwaGFudG9tVHlwZSk7CisgICAgICAgIEFTU0VSVChub2RlLT5tdXN0R2VuZXJhdGUoKSk7Cisg
ICAgICAgIG5vZGUtPnNldE9wQW5kRGVmYXVsdEZsYWdzKHBoYW50b21UeXBlKTsKICAgICAgICAg
aWYgKHBoYW50b21UeXBlID09IFBoYW50b20pCiAgICAgICAgICAgICBlbGltaW5hdGVJcnJlbGV2
YW50UGhhbnRvbUNoaWxkcmVuKG5vZGUpOwogICAgICAgICAKICAgICAgICAgbV9jaGFuZ2VkID0g
dHJ1ZTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBwZXJmb3JtTm9kZUNTRShOb2RlJiBub2RlKQor
ICAgIHZvaWQgcGVyZm9ybU5vZGVDU0UoTm9kZSogbm9kZSkKICAgICB7Ci0gICAgICAgIGJvb2wg
c2hvdWxkR2VuZXJhdGUgPSBub2RlLnNob3VsZEdlbmVyYXRlKCk7CisgICAgICAgIGJvb2wgc2hv
dWxkR2VuZXJhdGUgPSBub2RlLT5zaG91bGRHZW5lcmF0ZSgpOwogCi0gICAgICAgIGlmIChub2Rl
LmZsYWdzKCkgJiBOb2RlSGFzVmFyQXJncykgewotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBj
aGlsZElkeCA9IG5vZGUuZmlyc3RDaGlsZCgpOyBjaGlsZElkeCA8IG5vZGUuZmlyc3RDaGlsZCgp
ICsgbm9kZS5udW1DaGlsZHJlbigpOyBjaGlsZElkeCsrKQorICAgICAgICBpZiAobm9kZS0+Zmxh
Z3MoKSAmIE5vZGVIYXNWYXJBcmdzKSB7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGNoaWxk
SWR4ID0gbm9kZS0+Zmlyc3RDaGlsZCgpOyBjaGlsZElkeCA8IG5vZGUtPmZpcnN0Q2hpbGQoKSAr
IG5vZGUtPm51bUNoaWxkcmVuKCk7IGNoaWxkSWR4KyspCiAgICAgICAgICAgICAgICAgcGVyZm9y
bVN1YnN0aXR1dGlvbihtX2dyYXBoLm1fdmFyQXJnQ2hpbGRyZW5bY2hpbGRJZHhdLCBzaG91bGRH
ZW5lcmF0ZSk7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBwZXJmb3JtU3Vic3RpdHV0
aW9uKG5vZGUuY2hpbGRyZW4uY2hpbGQxKCksIHNob3VsZEdlbmVyYXRlKTsKLSAgICAgICAgICAg
IHBlcmZvcm1TdWJzdGl0dXRpb24obm9kZS5jaGlsZHJlbi5jaGlsZDIoKSwgc2hvdWxkR2VuZXJh
dGUpOwotICAgICAgICAgICAgcGVyZm9ybVN1YnN0aXR1dGlvbihub2RlLmNoaWxkcmVuLmNoaWxk
MygpLCBzaG91bGRHZW5lcmF0ZSk7CisgICAgICAgICAgICBwZXJmb3JtU3Vic3RpdHV0aW9uKG5v
ZGUtPmNoaWxkcmVuLmNoaWxkMSgpLCBzaG91bGRHZW5lcmF0ZSk7CisgICAgICAgICAgICBwZXJm
b3JtU3Vic3RpdHV0aW9uKG5vZGUtPmNoaWxkcmVuLmNoaWxkMigpLCBzaG91bGRHZW5lcmF0ZSk7
CisgICAgICAgICAgICBwZXJmb3JtU3Vic3RpdHV0aW9uKG5vZGUtPmNoaWxkcmVuLmNoaWxkMygp
LCBzaG91bGRHZW5lcmF0ZSk7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIGlmIChub2Rl
Lm9wKCkgPT0gU2V0TG9jYWwpCi0gICAgICAgICAgICBtX2dyYXBoW25vZGUuY2hpbGQxKCldLm1l
cmdlRmxhZ3MoTm9kZVJlbGV2YW50VG9PU1IpOworICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBT
ZXRMb2NhbCkKKyAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLT5tZXJnZUZsYWdzKE5vZGVSZWxl
dmFudFRvT1NSKTsKICAgICAgICAgCiAgICAgICAgIGlmICghc2hvdWxkR2VuZXJhdGUpCiAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgIAogI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJ
T05fVkVSQk9TRSkKLSAgICAgICAgZGF0YUxvZ0YoIiAgICVzIEAldTogIiwgR3JhcGg6Om9wTmFt
ZShtX2dyYXBoW21fY29tcGlsZUluZGV4XS5vcCgpKSwgbV9jb21waWxlSW5kZXgpOworICAgICAg
ICBkYXRhTG9nRigiICAgJXMgQCV1OiAiLCBHcmFwaDo6b3BOYW1lKG5vZGUtPm9wKCkpLCBub2Rl
LT5pbmRleCgpKTsKICNlbmRpZgogICAgICAgICAKICAgICAgICAgLy8gTk9URTogdGhlcmUgYXJl
IHNvbWUgbm9kZXMgdGhhdCB3ZSBkZWxpYmVyYXRlbHkgZG9uJ3QgQ1NFIGV2ZW4gdGhvdWdoIHdl
CkBAIC0xMTIzLDEwICsxMTAyLDEwIEBAIHByaXZhdGU6CiAgICAgICAgIC8vIFRvUHJpbWl0aXZl
LCBidXQgd2UgY291bGQgY2hhbmdlIHRoYXQgd2l0aCBzb21lIHNwZWN1bGF0aW9ucyBpZiB3ZSBy
ZWFsbHkKICAgICAgICAgLy8gbmVlZGVkIHRvLgogICAgICAgICAKLSAgICAgICAgc3dpdGNoIChu
b2RlLm9wKCkpIHsKKyAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CiAgICAgICAgIAogICAg
ICAgICBjYXNlIElkZW50aXR5OgotICAgICAgICAgICAgc2V0UmVwbGFjZW1lbnQobm9kZS5jaGls
ZDEoKS5pbmRleCgpKTsKKyAgICAgICAgICAgIHNldFJlcGxhY2VtZW50KG5vZGUtPmNoaWxkMSgp
Lm5vZGUoKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgICAgICAvLyBI
YW5kbGUgdGhlIHB1cmUgbm9kZXMuIFRoZXNlIG5vZGVzIG5ldmVyIGhhdmUgYW55IHNpZGUtZWZm
ZWN0cy4KQEAgLTExNjYsNDEgKzExNDUsNDEgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgR2V0Q2FsbGVlOgotICAgICAgICAgICAgc2V0
UmVwbGFjZW1lbnQoZ2V0Q2FsbGVlTG9hZEVsaW1pbmF0aW9uKG5vZGUuY29kZU9yaWdpbi5pbmxp
bmVDYWxsRnJhbWUpKTsKKyAgICAgICAgICAgIHNldFJlcGxhY2VtZW50KGdldENhbGxlZUxvYWRF
bGltaW5hdGlvbihub2RlLT5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSkpOwogICAgICAgICAg
ICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSBHZXRMb2NhbDogewotICAgICAgICAgICAgVmFyaWFi
bGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBub2RlLnZhcmlhYmxlQWNjZXNzRGF0
YSgpOworICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEg
PSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKICAgICAgICAgICAgIGlmICghdmFyaWFibGVB
Y2Nlc3NEYXRhLT5pc0NhcHR1cmVkKCkpCiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICBOb2RlSW5kZXggcmVsZXZhbnRMb2NhbE9wOwotICAgICAgICAgICAgTm9kZUluZGV4IHBv
c3NpYmxlUmVwbGFjZW1lbnQgPSBnZXRMb2NhbExvYWRFbGltaW5hdGlvbih2YXJpYWJsZUFjY2Vz
c0RhdGEtPmxvY2FsKCksIHJlbGV2YW50TG9jYWxPcCwgdmFyaWFibGVBY2Nlc3NEYXRhLT5pc0Nh
cHR1cmVkKCkpOwotICAgICAgICAgICAgaWYgKHJlbGV2YW50TG9jYWxPcCA9PSBOb05vZGUpCisg
ICAgICAgICAgICBOb2RlKiByZWxldmFudExvY2FsT3A7CisgICAgICAgICAgICBOb2RlKiBwb3Nz
aWJsZVJlcGxhY2VtZW50ID0gZ2V0TG9jYWxMb2FkRWxpbWluYXRpb24odmFyaWFibGVBY2Nlc3NE
YXRhLT5sb2NhbCgpLCByZWxldmFudExvY2FsT3AsIHZhcmlhYmxlQWNjZXNzRGF0YS0+aXNDYXB0
dXJlZCgpKTsKKyAgICAgICAgICAgIGlmICghcmVsZXZhbnRMb2NhbE9wKQogICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgaWYgKG1fZ3JhcGhbcmVsZXZhbnRMb2NhbE9wXS5vcCgp
ICE9IEdldExvY2FsVW5saW5rZWQKLSAgICAgICAgICAgICAgICAmJiBtX2dyYXBoW3JlbGV2YW50
TG9jYWxPcF0udmFyaWFibGVBY2Nlc3NEYXRhKCkgIT0gdmFyaWFibGVBY2Nlc3NEYXRhKQorICAg
ICAgICAgICAgaWYgKHJlbGV2YW50TG9jYWxPcC0+b3AoKSAhPSBHZXRMb2NhbFVubGlua2VkCisg
ICAgICAgICAgICAgICAgJiYgcmVsZXZhbnRMb2NhbE9wLT52YXJpYWJsZUFjY2Vzc0RhdGEoKSAh
PSB2YXJpYWJsZUFjY2Vzc0RhdGEpCiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICBOb2RlSW5kZXggcGhpSW5kZXggPSBub2RlLmNoaWxkMSgpLmluZGV4KCk7CisgICAgICAgICAg
ICBOb2RlKiBwaGkgPSBub2RlLT5jaGlsZDEoKS5ub2RlKCk7CiAgICAgICAgICAgICBpZiAoIXNl
dFJlcGxhY2VtZW50KHBvc3NpYmxlUmVwbGFjZW1lbnQpKQogICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgLy8gSWYgdGhlIEdldExvY2FsIHdlIHJlcGxhY2VkIHVzZWQgdG8gcmVm
ZXIgdG8gYSBTZXRMb2NhbCwgdGhlbiBpdCBub3cKICAgICAgICAgICAgIC8vIHNob3VsZCByZWZl
ciB0byB0aGUgY2hpbGQgb2YgdGhlIFNldExvY2FsIGluc3RlYWQuCi0gICAgICAgICAgICBpZiAo
bV9ncmFwaFtwaGlJbmRleF0ub3AoKSA9PSBTZXRMb2NhbCkgewotICAgICAgICAgICAgICAgIEFT
U0VSVChub2RlLmNoaWxkMSgpLmluZGV4KCkgPT0gcGhpSW5kZXgpOwotICAgICAgICAgICAgICAg
IG1fZ3JhcGguY2hhbmdlRWRnZShub2RlLmNoaWxkcmVuLmNoaWxkMSgpLCBtX2dyYXBoW3BoaUlu
ZGV4XS5jaGlsZDEoKSk7CisgICAgICAgICAgICBpZiAocGhpLT5vcCgpID09IFNldExvY2FsKSB7
CisgICAgICAgICAgICAgICAgQVNTRVJUKG5vZGUtPmNoaWxkMSgpID09IHBoaSk7CisgICAgICAg
ICAgICAgICAgbV9ncmFwaC5jaGFuZ2VFZGdlKG5vZGUtPmNoaWxkcmVuLmNoaWxkMSgpLCBwaGkt
PmNoaWxkMSgpKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIE5vZGVJbmRleCBvbGRUYWls
SW5kZXggPSBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQoCisgICAgICAg
ICAgICBOb2RlKiBvbGRUYWlsID0gbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVy
YW5kKAogICAgICAgICAgICAgICAgIHZhcmlhYmxlQWNjZXNzRGF0YS0+bG9jYWwoKSk7Ci0gICAg
ICAgICAgICBpZiAob2xkVGFpbEluZGV4ID09IG1fY29tcGlsZUluZGV4KSB7CisgICAgICAgICAg
ICBpZiAob2xkVGFpbCA9PSBub2RlKSB7CiAgICAgICAgICAgICAgICAgbV9jdXJyZW50QmxvY2st
PnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKHZhcmlhYmxlQWNjZXNzRGF0YS0+bG9jYWwoKSkgPQog
ICAgICAgICAgICAgICAgICAgICByZWxldmFudExvY2FsT3A7CiAgICAgICAgICAgICAgICAgCiAg
ICAgICAgICAgICAgICAgLy8gTWFpbnRhaW4gZ3JhcGggaW50ZWdyaXR5OiBzaW5jZSB3ZSdyZSBy
ZXBsYWNpbmcgYSBHZXRMb2NhbCB3aXRoIGEgR2V0TG9jYWxVbmxpbmtlZCwKICAgICAgICAgICAg
ICAgICAvLyBtYWtlIHN1cmUgdGhhdCB0aGUgR2V0TG9jYWxVbmxpbmtlZCBpcyBub3cgbGlua2Vk
LgotICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoW3JlbGV2YW50TG9jYWxPcF0ub3AoKSA9PSBH
ZXRMb2NhbFVubGlua2VkKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1fZ3JhcGhbcmVsZXZhbnRM
b2NhbE9wXS5zZXRPcChHZXRMb2NhbCk7Ci0gICAgICAgICAgICAgICAgICAgIG1fZ3JhcGhbcmVs
ZXZhbnRMb2NhbE9wXS5jaGlsZHJlbi5jaGlsZDEoKSA9IEVkZ2UocGhpSW5kZXgpOwotICAgICAg
ICAgICAgICAgICAgICBtX2dyYXBoLnJlZihwaGlJbmRleCk7CisgICAgICAgICAgICAgICAgaWYg
KHJlbGV2YW50TG9jYWxPcC0+b3AoKSA9PSBHZXRMb2NhbFVubGlua2VkKSB7CisgICAgICAgICAg
ICAgICAgICAgIHJlbGV2YW50TG9jYWxPcC0+c2V0T3AoR2V0TG9jYWwpOworICAgICAgICAgICAg
ICAgICAgICByZWxldmFudExvY2FsT3AtPmNoaWxkcmVuLmNoaWxkMSgpID0gRWRnZShwaGkpOwor
ICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLnJlZihwaGkpOwogICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIG1fY2hhbmdlZCA9IHRydWU7CkBAIC0xMjA4LDE5
ICsxMTg3LDE4IEBAIHByaXZhdGU6CiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBj
YXNlIEdldExvY2FsVW5saW5rZWQ6IHsKLSAgICAgICAgICAgIE5vZGVJbmRleCByZWxldmFudExv
Y2FsT3BJZ25vcmVkOworICAgICAgICAgICAgTm9kZSogcmVsZXZhbnRMb2NhbE9wSWdub3JlZDsK
ICAgICAgICAgICAgIHNldFJlcGxhY2VtZW50KGdldExvY2FsTG9hZEVsaW1pbmF0aW9uKG5vZGUu
dW5saW5rZWRMb2NhbCgpLCByZWxldmFudExvY2FsT3BJZ25vcmVkLCB0cnVlKSk7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgRmx1c2g6
IHsKLSAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhID0g
bm9kZS52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKKyAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0
YSogdmFyaWFibGVBY2Nlc3NEYXRhID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CiAgICAg
ICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgbG9jYWwgPSB2YXJpYWJsZUFjY2Vzc0RhdGEtPmxvY2Fs
KCk7Ci0gICAgICAgICAgICBOb2RlSW5kZXggcmVwbGFjZW1lbnRJbmRleCA9IG5vZGUuY2hpbGQx
KCkuaW5kZXgoKTsKLSAgICAgICAgICAgIE5vZGUmIHJlcGxhY2VtZW50ID0gbV9ncmFwaFtyZXBs
YWNlbWVudEluZGV4XTsKLSAgICAgICAgICAgIGlmIChyZXBsYWNlbWVudC5vcCgpICE9IFNldExv
Y2FsKQorICAgICAgICAgICAgTm9kZSogcmVwbGFjZW1lbnQgPSBub2RlLT5jaGlsZDEoKS5ub2Rl
KCk7CisgICAgICAgICAgICBpZiAocmVwbGFjZW1lbnQtPm9wKCkgIT0gU2V0TG9jYWwpCiAgICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBBU1NFUlQocmVwbGFjZW1lbnQudmFyaWFi
bGVBY2Nlc3NEYXRhKCkgPT0gdmFyaWFibGVBY2Nlc3NEYXRhKTsKKyAgICAgICAgICAgIEFTU0VS
VChyZXBsYWNlbWVudC0+dmFyaWFibGVBY2Nlc3NEYXRhKCkgPT0gdmFyaWFibGVBY2Nlc3NEYXRh
KTsKICAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgYmUgYWJsZSB0byByZW1vdmUgU2V0
TG9jYWxzIHRoYXQgY2FuIGV4aXQ7IHdlIGp1c3QgbmVlZAogICAgICAgICAgICAgLy8gdG8gcmVw
bGFjZSB0aGVtIHdpdGggYXBwcm9wcmlhdGUgdHlwZSBjaGVja3MuCiAgICAgICAgICAgICBpZiAo
bV9ncmFwaC5tX2ZpeHBvaW50U3RhdGUgPT0gRml4cG9pbnROb3RDb252ZXJnZWQpIHsKQEAgLTEy
NDAsMjYgKzEyMTgsMjYgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAg
ICAgaWYgKHJlcGxhY2VtZW50LmNhbkV4aXQoKSkKKyAgICAgICAgICAgICAgICBpZiAocmVwbGFj
ZW1lbnQtPmNhbkV4aXQoKSkKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICBTZXRMb2NhbFN0b3JlRWxpbWluYXRpb25SZXN1bHQgcmVzdWx0ID0K
LSAgICAgICAgICAgICAgICBzZXRMb2NhbFN0b3JlRWxpbWluYXRpb24obG9jYWwsIHJlcGxhY2Vt
ZW50SW5kZXgpOworICAgICAgICAgICAgICAgIHNldExvY2FsU3RvcmVFbGltaW5hdGlvbihsb2Nh
bCwgcmVwbGFjZW1lbnQpOwogICAgICAgICAgICAgaWYgKHJlc3VsdC5tYXlCZUFjY2Vzc2VkIHx8
IHJlc3VsdC5tYXlDbG9iYmVyV29ybGQpCiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICBBU1NFUlQocmVwbGFjZW1lbnQub3AoKSA9PSBTZXRMb2NhbCk7Ci0gICAgICAgICAgICBB
U1NFUlQocmVwbGFjZW1lbnQucmVmQ291bnQoKSA9PSAxKTsKLSAgICAgICAgICAgIEFTU0VSVChy
ZXBsYWNlbWVudC5zaG91bGRHZW5lcmF0ZSgpKTsKKyAgICAgICAgICAgIEFTU0VSVChyZXBsYWNl
bWVudC0+b3AoKSA9PSBTZXRMb2NhbCk7CisgICAgICAgICAgICBBU1NFUlQocmVwbGFjZW1lbnQt
PnJlZkNvdW50KCkgPT0gMSk7CisgICAgICAgICAgICBBU1NFUlQocmVwbGFjZW1lbnQtPnNob3Vs
ZEdlbmVyYXRlKCkpOwogICAgICAgICAgICAgLy8gRklYTUU6IEludmVzdGlnYXRlIHVzaW5nIG1h
eUV4aXQgYXMgYSBmdXJ0aGVyIG9wdGltaXphdGlvbi4KLSAgICAgICAgICAgIG5vZGUuc2V0T3BB
bmREZWZhdWx0RmxhZ3MoUGhhbnRvbSk7Ci0gICAgICAgICAgICBOb2RlSW5kZXggZGF0YU5vZGVJ
bmRleCA9IHJlcGxhY2VtZW50LmNoaWxkMSgpLmluZGV4KCk7Ci0gICAgICAgICAgICBBU1NFUlQo
bV9ncmFwaFtkYXRhTm9kZUluZGV4XS5oYXNSZXN1bHQoKSk7CisgICAgICAgICAgICBub2RlLT5z
ZXRPcEFuZERlZmF1bHRGbGFncyhQaGFudG9tKTsKKyAgICAgICAgICAgIE5vZGUqIGRhdGFOb2Rl
ID0gcmVwbGFjZW1lbnQtPmNoaWxkMSgpLm5vZGUoKTsKKyAgICAgICAgICAgIEFTU0VSVChkYXRh
Tm9kZS0+aGFzUmVzdWx0KCkpOwogICAgICAgICAgICAgbV9ncmFwaC5jbGVhckFuZERlcmVmQ2hp
bGQxKG5vZGUpOwotICAgICAgICAgICAgbm9kZS5jaGlsZHJlbi5jaGlsZDEoKSA9IEVkZ2UoZGF0
YU5vZGVJbmRleCk7Ci0gICAgICAgICAgICBtX2dyYXBoLnJlZihkYXRhTm9kZUluZGV4KTsKLSAg
ICAgICAgICAgIE5vZGVJbmRleCBvbGRUYWlsSW5kZXggPSBtX2N1cnJlbnRCbG9jay0+dmFyaWFi
bGVzQXRUYWlsLm9wZXJhbmQobG9jYWwpOwotICAgICAgICAgICAgaWYgKG9sZFRhaWxJbmRleCA9
PSBtX2NvbXBpbGVJbmRleCkKLSAgICAgICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+dmFyaWFi
bGVzQXRUYWlsLm9wZXJhbmQobG9jYWwpID0gcmVwbGFjZW1lbnRJbmRleDsKKyAgICAgICAgICAg
IG5vZGUtPmNoaWxkcmVuLmNoaWxkMSgpID0gRWRnZShkYXRhTm9kZSk7CisgICAgICAgICAgICBt
X2dyYXBoLnJlZihkYXRhTm9kZSk7CisgICAgICAgICAgICBOb2RlKiBvbGRUYWlsID0gbV9jdXJy
ZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKGxvY2FsKTsKKyAgICAgICAgICAgIGlm
IChvbGRUYWlsID09IG5vZGUpCisgICAgICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPnZhcmlh
Ymxlc0F0VGFpbC5vcGVyYW5kKGxvY2FsKSA9IHJlcGxhY2VtZW50OwogICAgICAgICAgICAgbV9j
aGFuZ2VkID0gdHJ1ZTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkBAIC0xMjc2LDEx
ICsxMjU0LDExIEBAIHByaXZhdGU6CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIAog
ICAgICAgICBjYXNlIEdldEFycmF5TGVuZ3RoOgotICAgICAgICAgICAgc2V0UmVwbGFjZW1lbnQo
Z2V0QXJyYXlMZW5ndGhFbGltaW5hdGlvbihub2RlLmNoaWxkMSgpLmluZGV4KCkpKTsKKyAgICAg
ICAgICAgIHNldFJlcGxhY2VtZW50KGdldEFycmF5TGVuZ3RoRWxpbWluYXRpb24obm9kZS0+Y2hp
bGQxKCkubm9kZSgpKSk7CiAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICBjYXNlIEdldE15
U2NvcGU6Ci0gICAgICAgICAgICBzZXRSZXBsYWNlbWVudChnZXRNeVNjb3BlTG9hZEVsaW1pbmF0
aW9uKG5vZGUuY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpKTsKKyAgICAgICAgICAgIHNldFJl
cGxhY2VtZW50KGdldE15U2NvcGVMb2FkRWxpbWluYXRpb24obm9kZS0+Y29kZU9yaWdpbi5pbmxp
bmVDYWxsRnJhbWUpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAgICAg
IC8vIEhhbmRsZSBub2RlcyB0aGF0IGFyZSBjb25kaXRpb25hbGx5IHB1cmU6IHRoZXNlIGFyZSBw
dXJlLCBhbmQgY2FuCkBAIC0xMjkyLDkgKzEyNzAsOSBAQCBwcml2YXRlOgogICAgICAgICBjYXNl
IENvbXBhcmVHcmVhdGVyRXE6CiAgICAgICAgIGNhc2UgQ29tcGFyZUVxOiB7CiAgICAgICAgICAg
ICBpZiAobV9ncmFwaC5pc1ByZWRpY3RlZE51bWVyaWNhbChub2RlKSkgewotICAgICAgICAgICAg
ICAgIE5vZGVJbmRleCByZXBsYWNlbWVudEluZGV4ID0gcHVyZUNTRShub2RlKTsKLSAgICAgICAg
ICAgICAgICBpZiAocmVwbGFjZW1lbnRJbmRleCAhPSBOb05vZGUgJiYgbV9ncmFwaC5pc1ByZWRp
Y3RlZE51bWVyaWNhbChtX2dyYXBoW3JlcGxhY2VtZW50SW5kZXhdKSkKLSAgICAgICAgICAgICAg
ICAgICAgc2V0UmVwbGFjZW1lbnQocmVwbGFjZW1lbnRJbmRleCk7CisgICAgICAgICAgICAgICAg
Tm9kZSogcmVwbGFjZW1lbnQgPSBwdXJlQ1NFKG5vZGUpOworICAgICAgICAgICAgICAgIGlmIChy
ZXBsYWNlbWVudCAmJiBtX2dyYXBoLmlzUHJlZGljdGVkTnVtZXJpY2FsKHJlcGxhY2VtZW50KSkK
KyAgICAgICAgICAgICAgICAgICAgc2V0UmVwbGFjZW1lbnQocmVwbGFjZW1lbnQpOwogICAgICAg
ICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTEzMDIsMTYgKzEyODAs
MTYgQEAgcHJpdmF0ZToKICAgICAgICAgLy8gRmluYWxseSBoYW5kbGUgaGVhcCBhY2Nlc3Nlcy4g
VGhlc2UgYXJlIG5vdCBxdWl0ZSBwdXJlLCBidXQgd2UgY2FuIHN0aWxsCiAgICAgICAgIC8vIG9w
dGltaXplIHRoZW0gcHJvdmlkZWQgdGhhdCBzb21lIHN1YnRsZSBjb25kaXRpb25zIGFyZSBtZXQu
CiAgICAgICAgIGNhc2UgR2V0R2xvYmFsVmFyOgotICAgICAgICAgICAgc2V0UmVwbGFjZW1lbnQo
Z2xvYmFsVmFyTG9hZEVsaW1pbmF0aW9uKG5vZGUucmVnaXN0ZXJQb2ludGVyKCkpKTsKKyAgICAg
ICAgICAgIHNldFJlcGxhY2VtZW50KGdsb2JhbFZhckxvYWRFbGltaW5hdGlvbihub2RlLT5yZWdp
c3RlclBvaW50ZXIoKSkpOwogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSBHZXRT
Y29wZWRWYXI6IHsKLSAgICAgICAgICAgIHNldFJlcGxhY2VtZW50KHNjb3BlZFZhckxvYWRFbGlt
aW5hdGlvbihub2RlLmNoaWxkMSgpLmluZGV4KCksIG5vZGUudmFyTnVtYmVyKCkpKTsKKyAgICAg
ICAgICAgIHNldFJlcGxhY2VtZW50KHNjb3BlZFZhckxvYWRFbGltaW5hdGlvbihub2RlLT5jaGls
ZDEoKS5ub2RlKCksIG5vZGUtPnZhck51bWJlcigpKSk7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgfQogCiAgICAgICAgIGNhc2UgR2xvYmFsVmFyV2F0Y2hwb2ludDoKLSAgICAgICAgICAg
IGlmIChnbG9iYWxWYXJXYXRjaHBvaW50RWxpbWluYXRpb24obm9kZS5yZWdpc3RlclBvaW50ZXIo
KSkpCisgICAgICAgICAgICBpZiAoZ2xvYmFsVmFyV2F0Y2hwb2ludEVsaW1pbmF0aW9uKG5vZGUt
PnJlZ2lzdGVyUG9pbnRlcigpKSkKICAgICAgICAgICAgICAgICBlbGltaW5hdGUoKTsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCkBAIC0xMzE5LDgzICsxMjk3LDgzIEBAIHByaXZh
dGU6CiAgICAgICAgIGNhc2UgUHV0R2xvYmFsVmFyQ2hlY2s6CiAgICAgICAgICAgICBpZiAobV9n
cmFwaC5tX2ZpeHBvaW50U3RhdGUgPT0gRml4cG9pbnROb3RDb252ZXJnZWQpCiAgICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBlbGltaW5hdGUoZ2xvYmFsVmFyU3RvcmVFbGltaW5h
dGlvbihub2RlLnJlZ2lzdGVyUG9pbnRlcigpKSk7CisgICAgICAgICAgICBlbGltaW5hdGUoZ2xv
YmFsVmFyU3RvcmVFbGltaW5hdGlvbihub2RlLT5yZWdpc3RlclBvaW50ZXIoKSkpOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBQdXRTY29wZWRWYXI6IHsK
ICAgICAgICAgICAgIGlmIChtX2dyYXBoLm1fZml4cG9pbnRTdGF0ZSA9PSBGaXhwb2ludE5vdENv
bnZlcmdlZCkKICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGVsaW1pbmF0ZShz
Y29wZWRWYXJTdG9yZUVsaW1pbmF0aW9uKG5vZGUuY2hpbGQxKCkuaW5kZXgoKSwgbm9kZS5jaGls
ZDIoKS5pbmRleCgpLCBub2RlLnZhck51bWJlcigpKSk7CisgICAgICAgICAgICBlbGltaW5hdGUo
c2NvcGVkVmFyU3RvcmVFbGltaW5hdGlvbihub2RlLT5jaGlsZDEoKS5ub2RlKCksIG5vZGUtPmNo
aWxkMigpLm5vZGUoKSwgbm9kZS0+dmFyTnVtYmVyKCkpKTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICB9CiAKICAgICAgICAgY2FzZSBHZXRCeVZhbDoKICAgICAgICAgICAgIGlmIChtX2dy
YXBoLmJ5VmFsSXNQdXJlKG5vZGUpKQotICAgICAgICAgICAgICAgIHNldFJlcGxhY2VtZW50KGdl
dEJ5VmFsTG9hZEVsaW1pbmF0aW9uKG5vZGUuY2hpbGQxKCkuaW5kZXgoKSwgbm9kZS5jaGlsZDIo
KS5pbmRleCgpKSk7CisgICAgICAgICAgICAgICAgc2V0UmVwbGFjZW1lbnQoZ2V0QnlWYWxMb2Fk
RWxpbWluYXRpb24obm9kZS0+Y2hpbGQxKCkubm9kZSgpLCBub2RlLT5jaGlsZDIoKS5ub2RlKCkp
KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgUHV0QnlW
YWw6IHsKICAgICAgICAgICAgIEVkZ2UgY2hpbGQxID0gbV9ncmFwaC52YXJBcmdDaGlsZChub2Rl
LCAwKTsKICAgICAgICAgICAgIEVkZ2UgY2hpbGQyID0gbV9ncmFwaC52YXJBcmdDaGlsZChub2Rl
LCAxKTsKLSAgICAgICAgICAgIGlmIChub2RlLmFycmF5TW9kZSgpLmNhbkNTRVN0b3JhZ2UoKSkg
ewotICAgICAgICAgICAgICAgIE5vZGVJbmRleCBub2RlSW5kZXggPSBnZXRCeVZhbExvYWRFbGlt
aW5hdGlvbihjaGlsZDEuaW5kZXgoKSwgY2hpbGQyLmluZGV4KCkpOwotICAgICAgICAgICAgICAg
IGlmIChub2RlSW5kZXggPT0gTm9Ob2RlKQorICAgICAgICAgICAgaWYgKG5vZGUtPmFycmF5TW9k
ZSgpLmNhbkNTRVN0b3JhZ2UoKSkgeworICAgICAgICAgICAgICAgIE5vZGUqIHJlcGxhY2VtZW50
ID0gZ2V0QnlWYWxMb2FkRWxpbWluYXRpb24oY2hpbGQxLm5vZGUoKSwgY2hpbGQyLm5vZGUoKSk7
CisgICAgICAgICAgICAgICAgaWYgKCFyZXBsYWNlbWVudCkKICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICAgICAgbm9kZS5zZXRPcChQdXRCeVZhbEFsaWFzKTsKKyAgICAg
ICAgICAgICAgICBub2RlLT5zZXRPcChQdXRCeVZhbEFsaWFzKTsKICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBD
aGVja1N0cnVjdHVyZToKICAgICAgICAgY2FzZSBGb3J3YXJkQ2hlY2tTdHJ1Y3R1cmU6Ci0gICAg
ICAgICAgICBpZiAoY2hlY2tTdHJ1Y3R1cmVFbGltaW5hdGlvbihub2RlLnN0cnVjdHVyZVNldCgp
LCBub2RlLmNoaWxkMSgpLmluZGV4KCkpKQorICAgICAgICAgICAgaWYgKGNoZWNrU3RydWN0dXJl
RWxpbWluYXRpb24obm9kZS0+c3RydWN0dXJlU2V0KCksIG5vZGUtPmNoaWxkMSgpLm5vZGUoKSkp
CiAgICAgICAgICAgICAgICAgZWxpbWluYXRlKCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgIAogICAgICAgICBjYXNlIFN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50OgogICAg
ICAgICBjYXNlIEZvcndhcmRTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludDoKLSAgICAgICAg
ICAgIGlmIChzdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludEVsaW1pbmF0aW9uKG5vZGUuc3Ry
dWN0dXJlKCksIG5vZGUuY2hpbGQxKCkuaW5kZXgoKSkpCisgICAgICAgICAgICBpZiAoc3RydWN0
dXJlVHJhbnNpdGlvbldhdGNocG9pbnRFbGltaW5hdGlvbihub2RlLT5zdHJ1Y3R1cmUoKSwgbm9k
ZS0+Y2hpbGQxKCkubm9kZSgpKSkKICAgICAgICAgICAgICAgICBlbGltaW5hdGUoKTsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgUHV0U3RydWN0dXJlOgog
ICAgICAgICAgICAgaWYgKG1fZ3JhcGgubV9maXhwb2ludFN0YXRlID09IEZpeHBvaW50Tm90Q29u
dmVyZ2VkKQogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgZWxpbWluYXRlKHB1
dFN0cnVjdHVyZVN0b3JlRWxpbWluYXRpb24obm9kZS5jaGlsZDEoKS5pbmRleCgpKSwgUGhhbnRv
bVB1dFN0cnVjdHVyZSk7CisgICAgICAgICAgICBlbGltaW5hdGUocHV0U3RydWN0dXJlU3RvcmVF
bGltaW5hdGlvbihub2RlLT5jaGlsZDEoKS5ub2RlKCkpLCBQaGFudG9tUHV0U3RydWN0dXJlKTsK
ICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2UgQ2hlY2tGdW5jdGlvbjoKLSAgICAg
ICAgICAgIGlmIChjaGVja0Z1bmN0aW9uRWxpbWluYXRpb24obm9kZS5mdW5jdGlvbigpLCBub2Rl
LmNoaWxkMSgpLmluZGV4KCkpKQorICAgICAgICAgICAgaWYgKGNoZWNrRnVuY3Rpb25FbGltaW5h
dGlvbihub2RlLT5mdW5jdGlvbigpLCBub2RlLT5jaGlsZDEoKS5ub2RlKCkpKQogICAgICAgICAg
ICAgICAgIGVsaW1pbmF0ZSgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAg
CiAgICAgICAgIGNhc2UgQ2hlY2tFeGVjdXRhYmxlOgotICAgICAgICAgICAgaWYgKGNoZWNrRXhl
Y3V0YWJsZUVsaW1pbmF0aW9uKG5vZGUuZXhlY3V0YWJsZSgpLCBub2RlLmNoaWxkMSgpLmluZGV4
KCkpKQorICAgICAgICAgICAgaWYgKGNoZWNrRXhlY3V0YWJsZUVsaW1pbmF0aW9uKG5vZGUtPmV4
ZWN1dGFibGUoKSwgbm9kZS0+Y2hpbGQxKCkubm9kZSgpKSkKICAgICAgICAgICAgICAgICBlbGlt
aW5hdGUoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIAogICAgICAgICBj
YXNlIENoZWNrQXJyYXk6Ci0gICAgICAgICAgICBpZiAoY2hlY2tBcnJheUVsaW1pbmF0aW9uKG5v
ZGUuY2hpbGQxKCkuaW5kZXgoKSwgbm9kZS5hcnJheU1vZGUoKSkpCisgICAgICAgICAgICBpZiAo
Y2hlY2tBcnJheUVsaW1pbmF0aW9uKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgbm9kZS0+YXJyYXlN
b2RlKCkpKQogICAgICAgICAgICAgICAgIGVsaW1pbmF0ZSgpOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBHZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlOiB7
Ci0gICAgICAgICAgICBzZXRSZXBsYWNlbWVudChnZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlTG9h
ZEVsaW1pbmF0aW9uKG5vZGUuY2hpbGQxKCkuaW5kZXgoKSwgbm9kZS5hcnJheU1vZGUoKSkpOwor
ICAgICAgICAgICAgc2V0UmVwbGFjZW1lbnQoZ2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZUxvYWRF
bGltaW5hdGlvbihub2RlLT5jaGlsZDEoKS5ub2RlKCksIG5vZGUtPmFycmF5TW9kZSgpKSk7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCiAgICAgICAgIGNhc2UgR2V0QnV0dGVyZmx5
OgotICAgICAgICAgICAgc2V0UmVwbGFjZW1lbnQoZ2V0UHJvcGVydHlTdG9yYWdlTG9hZEVsaW1p
bmF0aW9uKG5vZGUuY2hpbGQxKCkuaW5kZXgoKSkpOworICAgICAgICAgICAgc2V0UmVwbGFjZW1l
bnQoZ2V0UHJvcGVydHlTdG9yYWdlTG9hZEVsaW1pbmF0aW9uKG5vZGUtPmNoaWxkMSgpLm5vZGUo
KSkpOwogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSBHZXRCeU9mZnNldDoKLSAg
ICAgICAgICAgIHNldFJlcGxhY2VtZW50KGdldEJ5T2Zmc2V0TG9hZEVsaW1pbmF0aW9uKG1fZ3Jh
cGgubV9zdG9yYWdlQWNjZXNzRGF0YVtub2RlLnN0b3JhZ2VBY2Nlc3NEYXRhSW5kZXgoKV0uaWRl
bnRpZmllck51bWJlciwgbm9kZS5jaGlsZDEoKS5pbmRleCgpKSk7CisgICAgICAgICAgICBzZXRS
ZXBsYWNlbWVudChnZXRCeU9mZnNldExvYWRFbGltaW5hdGlvbihtX2dyYXBoLm1fc3RvcmFnZUFj
Y2Vzc0RhdGFbbm9kZS0+c3RvcmFnZUFjY2Vzc0RhdGFJbmRleCgpXS5pZGVudGlmaWVyTnVtYmVy
LCBub2RlLT5jaGlsZDEoKS5ub2RlKCkpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgCiAgICAgICAgIGNhc2UgUHV0QnlPZmZzZXQ6CiAgICAgICAgICAgICBpZiAobV9ncmFwaC5t
X2ZpeHBvaW50U3RhdGUgPT0gRml4cG9pbnROb3RDb252ZXJnZWQpCiAgICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICBlbGltaW5hdGUocHV0QnlPZmZzZXRTdG9yZUVsaW1pbmF0aW9u
KG1fZ3JhcGgubV9zdG9yYWdlQWNjZXNzRGF0YVtub2RlLnN0b3JhZ2VBY2Nlc3NEYXRhSW5kZXgo
KV0uaWRlbnRpZmllck51bWJlciwgbm9kZS5jaGlsZDEoKS5pbmRleCgpKSk7CisgICAgICAgICAg
ICBlbGltaW5hdGUocHV0QnlPZmZzZXRTdG9yZUVsaW1pbmF0aW9uKG1fZ3JhcGgubV9zdG9yYWdl
QWNjZXNzRGF0YVtub2RlLT5zdG9yYWdlQWNjZXNzRGF0YUluZGV4KCldLmlkZW50aWZpZXJOdW1i
ZXIsIG5vZGUtPmNoaWxkMSgpLm5vZGUoKSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICAKICAgICAgICAgY2FzZSBQaGFudG9tOgpAQCAtMTQwOSw3ICsxMzg3LDcgQEAgcHJpdmF0
ZToKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBtX2xh
c3RTZWVuW25vZGUub3AoKV0gPSBtX2luZGV4SW5CbG9jazsKKyAgICAgICAgbV9sYXN0U2Vlbltu
b2RlLT5vcCgpXSA9IG1faW5kZXhJbkJsb2NrOwogI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFH
QVRJT05fVkVSQk9TRSkKICAgICAgICAgZGF0YUxvZ0YoIlxuIik7CiAjZW5kaWYKQEAgLTE0MzAs
MzcgKzE0MDgsMzYgQEAgcHJpdmF0ZToKICAgICAgICAgLy8gcmVwbGFjZW1lbnRzIGNsZWFyZWQs
IHNvIHdlIGRvbid0IGdldCBjb25mdXNlZCB3aGlsZSBkb2luZyBzdWJzdGl0dXRpb25zIG9uCiAg
ICAgICAgIC8vIEdldExvY2FsJ3MuCiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBi
bG9jay0+cGhpcy5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgQVNTRVJUKG1fZ3JhcGhbYmxv
Y2stPnBoaXNbaV1dLmZsYWdzKCkgJiBOb2RlUmVsZXZhbnRUb09TUik7Ci0gICAgICAgICAgICBt
X2dyYXBoW2Jsb2NrLT5waGlzW2ldXS5yZXBsYWNlbWVudCA9IE5vTm9kZTsKKyAgICAgICAgICAg
IEFTU0VSVChibG9jay0+cGhpc1tpXS0+ZmxhZ3MoKSAmIE5vZGVSZWxldmFudFRvT1NSKTsKKyAg
ICAgICAgICAgIGJsb2NrLT5waGlzW2ldLT5yZXBsYWNlbWVudCA9IDA7CiAgICAgICAgIH0KICAg
ICAgICAgCiAgICAgICAgIC8vIE1ha2UgYWxsIG9mIG15IFNldExvY2FsIGFuZCBHZXRMb2NhbCBu
b2RlcyByZWxldmFudCB0byBPU1IsIGFuZCBkbyBzb21lIG90aGVyCiAgICAgICAgIC8vIG5lY2Vz
c2FyeSBib29ra2VlcGluZy4KICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGJsb2Nr
LT5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRleCA9IGJsb2Nr
LT5hdChpKTsKLSAgICAgICAgICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW25vZGVJbmRleF07Cisg
ICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPmF0KGkpOwogICAgICAgICAgICAgCi0gICAg
ICAgICAgICBub2RlLnJlcGxhY2VtZW50ID0gTm9Ob2RlOworICAgICAgICAgICAgbm9kZS0+cmVw
bGFjZW1lbnQgPSAwOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBzd2l0Y2ggKG5vZGUub3Ao
KSkgeworICAgICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CiAgICAgICAgICAgICBjYXNl
IFNldExvY2FsOgogICAgICAgICAgICAgY2FzZSBHZXRMb2NhbDogLy8gRklYTUU6IFRoZSBHZXRM
b2NhbCBjYXNlIGlzIG9ubHkgbmVjZXNzYXJ5IHVudGlsIHdlIGRvIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDY3MDcuCi0gICAgICAgICAgICAgICAgbm9kZS5tZXJn
ZUZsYWdzKE5vZGVSZWxldmFudFRvT1NSKTsKKyAgICAgICAgICAgICAgICBub2RlLT5tZXJnZUZs
YWdzKE5vZGVSZWxldmFudFRvT1NSKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgbm9kZS5jbGVhckZsYWdzKE5vZGVSZWxldmFu
dFRvT1NSKTsKKyAgICAgICAgICAgICAgICBub2RlLT5jbGVhckZsYWdzKE5vZGVSZWxldmFudFRv
T1NSKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgfQog
CiAgICAgICAgIGZvciAobV9pbmRleEluQmxvY2sgPSAwOyBtX2luZGV4SW5CbG9jayA8IGJsb2Nr
LT5zaXplKCk7ICsrbV9pbmRleEluQmxvY2spIHsKLSAgICAgICAgICAgIG1fY29tcGlsZUluZGV4
ID0gYmxvY2stPmF0KG1faW5kZXhJbkJsb2NrKTsKLSAgICAgICAgICAgIHBlcmZvcm1Ob2RlQ1NF
KG1fZ3JhcGhbbV9jb21waWxlSW5kZXhdKTsKKyAgICAgICAgICAgIG1fY3VycmVudE5vZGUgPSBi
bG9jay0+YXQobV9pbmRleEluQmxvY2spOworICAgICAgICAgICAgcGVyZm9ybU5vZGVDU0UobV9j
dXJyZW50Tm9kZSk7CiAgICAgICAgIH0KICAgICB9CiAgICAgCiAgICAgQmFzaWNCbG9jayogbV9j
dXJyZW50QmxvY2s7Ci0gICAgTm9kZUluZGV4IG1fY29tcGlsZUluZGV4OworICAgIE5vZGUqIG1f
Y3VycmVudE5vZGU7CiAgICAgdW5zaWduZWQgbV9pbmRleEluQmxvY2s7CiAgICAgRml4ZWRBcnJh
eTx1bnNpZ25lZCwgTGFzdE5vZGVUeXBlPiBtX2xhc3RTZWVuOwogICAgIGJvb2wgbV9jaGFuZ2Vk
OyAvLyBPbmx5IHRyYWNrcyBjaGFuZ2VzIHRoYXQgaGF2ZSBhIHN1YnN0YW50aXZlIGVmZmVjdCBv
biBvdGhlciBvcHRpbWl6YXRpb25zLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdDb21tb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Q29tbW9uLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Q29tbW9uLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0MSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiREZHQ29tbW9uLmgiCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBERkcgeworCit2b2lkIE5vZGVQb2ludGVyVHJhaXRzOjpkdW1wKE5vZGUq
IHZhbHVlLCBQcmludFN0cmVhbSYgb3V0KQoreworICAgIG91dC5wcmludCh2YWx1ZSk7Cit9CisK
K30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQor
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbi5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uLmgJKHJldmlzaW9uIDE0MDkw
NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEyIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMiwg
MjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTgxLDIyICs4MSwxNCBAQAogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIERGRyB7CiAKLS8vIFR5cGUgZm9yIGEgcmVmZXJlbmNlIHRvIGFub3RoZXIgbm9kZSBpbiB0
aGUgZ3JhcGguCi10eXBlZGVmIHVpbnQzMl90IE5vZGVJbmRleDsKLXN0YXRpYyBjb25zdCBOb2Rl
SW5kZXggTm9Ob2RlID0gVUlOVF9NQVg7CitjbGFzcyBOb2RlOwogCiB0eXBlZGVmIHVpbnQzMl90
IEJsb2NrSW5kZXg7CiBzdGF0aWMgY29uc3QgQmxvY2tJbmRleCBOb0Jsb2NrID0gVUlOVF9NQVg7
CiAKLXN0cnVjdCBOb2RlSW5kZXhUcmFpdHMgewotICAgIHN0YXRpYyBOb2RlSW5kZXggZGVmYXVs
dFZhbHVlKCkgeyByZXR1cm4gTm9Ob2RlOyB9Ci0gICAgc3RhdGljIHZvaWQgZHVtcChOb2RlSW5k
ZXggdmFsdWUsIFByaW50U3RyZWFtJiBvdXQpCi0gICAgewotICAgICAgICBpZiAodmFsdWUgPT0g
Tm9Ob2RlKQotICAgICAgICAgICAgb3V0LnByaW50ZigiLSIpOwotICAgICAgICBlbHNlCi0gICAg
ICAgICAgICBvdXQucHJpbnRmKCJAJXUiLCB2YWx1ZSk7Ci0gICAgfQorc3RydWN0IE5vZGVQb2lu
dGVyVHJhaXRzIHsKKyAgICBzdGF0aWMgTm9kZSogZGVmYXVsdFZhbHVlKCkgeyByZXR1cm4gMDsg
fQorICAgIHN0YXRpYyB2b2lkIGR1bXAoTm9kZSogdmFsdWUsIFByaW50U3RyZWFtJiBvdXQpOwog
fTsKIAogZW51bSBVc2VLaW5kIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Q29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwCShyZXZpc2lvbiAxNDA5MDQpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLCAy
MDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtNzUsMjIgKzc1LDIxIEBAIHByaXZhdGU6CiAgICAgICAgIGJvb2wgY2hh
bmdlZCA9IGZhbHNlOwogICAgICAgICBtX3N0YXRlLmJlZ2luQmFzaWNCbG9jayhibG9jayk7CiAg
ICAgICAgIGZvciAodW5zaWduZWQgaW5kZXhJbkJsb2NrID0gMDsgaW5kZXhJbkJsb2NrIDwgYmxv
Y2stPnNpemUoKTsgKytpbmRleEluQmxvY2spIHsKLSAgICAgICAgICAgIE5vZGVJbmRleCBub2Rl
SW5kZXggPSBibG9jay0+YXQoaW5kZXhJbkJsb2NrKTsKLSAgICAgICAgICAgIE5vZGUmIG5vZGUg
PSBtX2dyYXBoW25vZGVJbmRleF07Ci0gICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAo
IW1fc3RhdGUuaXNWYWxpZCgpKQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
CisgICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPmF0KGluZGV4SW5CbG9jayk7CisKICAg
ICAgICAgICAgIGJvb2wgZWxpbWluYXRlZCA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICAK
LSAgICAgICAgICAgIHN3aXRjaCAobm9kZS5vcCgpKSB7CisgICAgICAgICAgICBzd2l0Y2ggKG5v
ZGUtPm9wKCkpIHsKICAgICAgICAgICAgIGNhc2UgQ2hlY2tBcmd1bWVudHNOb3RDcmVhdGVkOiB7
CiAgICAgICAgICAgICAgICAgaWYgKCFpc0VtcHR5U3BlY3VsYXRpb24oCiAgICAgICAgICAgICAg
ICAgICAgICAgICBtX3N0YXRlLnZhcmlhYmxlcygpLm9wZXJhbmQoCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbV9ncmFwaC5hcmd1bWVudHNSZWdpc3RlckZvcihub2RlLmNvZGVPcmlnaW4p
KS5tX3R5cGUpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguYXJndW1lbnRz
UmVnaXN0ZXJGb3Iobm9kZS0+Y29kZU9yaWdpbikpLm1fdHlwZSkpCiAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIEFTU0VSVChub2RlLnJlZkNvdW50KCkgPT0gMSk7
Ci0gICAgICAgICAgICAgICAgbm9kZS5zZXRPcEFuZERlZmF1bHRGbGFncyhQaGFudG9tKTsKKyAg
ICAgICAgICAgICAgICBub2RlLT5zZXRPcEFuZERlZmF1bHRGbGFncyhQaGFudG9tKTsKICAgICAg
ICAgICAgICAgICBlbGltaW5hdGVkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgIH0KQEAgLTk4LDI0ICs5NywyNCBAQCBwcml2YXRlOgogICAgICAgICAgICAgY2Fz
ZSBDaGVja1N0cnVjdHVyZToKICAgICAgICAgICAgIGNhc2UgRm9yd2FyZENoZWNrU3RydWN0dXJl
OgogICAgICAgICAgICAgY2FzZSBBcnJheWlmeVRvU3RydWN0dXJlOiB7Ci0gICAgICAgICAgICAg
ICAgQWJzdHJhY3RWYWx1ZSYgdmFsdWUgPSBtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSk7
CisgICAgICAgICAgICAgICAgQWJzdHJhY3RWYWx1ZSYgdmFsdWUgPSBtX3N0YXRlLmZvck5vZGUo
bm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICAgICAgICAgIFN0cnVjdHVyZVNldCBzZXQ7Ci0gICAg
ICAgICAgICAgICAgaWYgKG5vZGUub3AoKSA9PSBBcnJheWlmeVRvU3RydWN0dXJlKQotICAgICAg
ICAgICAgICAgICAgICBzZXQgPSBub2RlLnN0cnVjdHVyZSgpOworICAgICAgICAgICAgICAgIGlm
IChub2RlLT5vcCgpID09IEFycmF5aWZ5VG9TdHJ1Y3R1cmUpCisgICAgICAgICAgICAgICAgICAg
IHNldCA9IG5vZGUtPnN0cnVjdHVyZSgpOwogICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgICAgICAgICAgc2V0ID0gbm9kZS5zdHJ1Y3R1cmVTZXQoKTsKKyAgICAgICAgICAgICAgICAg
ICAgc2V0ID0gbm9kZS0+c3RydWN0dXJlU2V0KCk7CiAgICAgICAgICAgICAgICAgaWYgKCFpc0Nl
bGxTcGVjdWxhdGlvbih2YWx1ZS5tX3R5cGUpKQogICAgICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgICAgICBpZiAodmFsdWUubV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuaXNTdWJz
ZXRPZihzZXQpKSB7CiAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChub2RlLnJlZkNvdW50KCkg
PT0gMSk7Ci0gICAgICAgICAgICAgICAgICAgIG5vZGUuc2V0T3BBbmREZWZhdWx0RmxhZ3MoUGhh
bnRvbSk7CisgICAgICAgICAgICAgICAgICAgIG5vZGUtPnNldE9wQW5kRGVmYXVsdEZsYWdzKFBo
YW50b20pOwogICAgICAgICAgICAgICAgICAgICBlbGltaW5hdGVkID0gdHJ1ZTsKICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIFN0
cnVjdHVyZUFic3RyYWN0VmFsdWUmIHN0cnVjdHVyZVZhbHVlID0gdmFsdWUubV9mdXR1cmVQb3Nz
aWJsZVN0cnVjdHVyZTsKICAgICAgICAgICAgICAgICBpZiAoc3RydWN0dXJlVmFsdWUuaXNTdWJz
ZXRPZihzZXQpCiAgICAgICAgICAgICAgICAgICAgICYmIHN0cnVjdHVyZVZhbHVlLmhhc1Npbmds
ZXRvbigpKSB7Ci0gICAgICAgICAgICAgICAgICAgIG5vZGUuY29udmVydFRvU3RydWN0dXJlVHJh
bnNpdGlvbldhdGNocG9pbnQoc3RydWN0dXJlVmFsdWUuc2luZ2xldG9uKCkpOworICAgICAgICAg
ICAgICAgICAgICBub2RlLT5jb252ZXJ0VG9TdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludChz
dHJ1Y3R1cmVWYWx1ZS5zaW5nbGV0b24oKSk7CiAgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQg
PSB0cnVlOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTEy
MywzNyArMTIyLDM3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBj
YXNlIENoZWNrQXJyYXk6CiAgICAgICAgICAgICBjYXNlIEFycmF5aWZ5OiB7Ci0gICAgICAgICAg
ICAgICAgaWYgKCFub2RlLmFycmF5TW9kZSgpLmFscmVhZHlDaGVja2VkKG1fZ3JhcGgsIG5vZGUs
IG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKSkpCisgICAgICAgICAgICAgICAgaWYgKCFu
b2RlLT5hcnJheU1vZGUoKS5hbHJlYWR5Q2hlY2tlZChtX2dyYXBoLCBub2RlLCBtX3N0YXRlLmZv
ck5vZGUobm9kZS0+Y2hpbGQxKCkpKSkKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICAgICAgQVNTRVJUKG5vZGUucmVmQ291bnQoKSA9PSAxKTsKLSAgICAgICAgICAgICAg
ICBub2RlLnNldE9wQW5kRGVmYXVsdEZsYWdzKFBoYW50b20pOworICAgICAgICAgICAgICAgIEFT
U0VSVChub2RlLT5yZWZDb3VudCgpID09IDEpOworICAgICAgICAgICAgICAgIG5vZGUtPnNldE9w
QW5kRGVmYXVsdEZsYWdzKFBoYW50b20pOwogICAgICAgICAgICAgICAgIGVsaW1pbmF0ZWQgPSB0
cnVlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgIAogICAgICAgICAgICAgY2FzZSBDaGVja0Z1bmN0aW9uOiB7Ci0gICAgICAgICAgICAgICAg
aWYgKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS52YWx1ZSgpICE9IG5vZGUuZnVuY3Rp
b24oKSkKKyAgICAgICAgICAgICAgICBpZiAobV9zdGF0ZS5mb3JOb2RlKG5vZGUtPmNoaWxkMSgp
KS52YWx1ZSgpICE9IG5vZGUtPmZ1bmN0aW9uKCkpCiAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgICAgIG5vZGUuc2V0T3BBbmREZWZhdWx0RmxhZ3MoUGhhbnRvbSk7Cisg
ICAgICAgICAgICAgICAgbm9kZS0+c2V0T3BBbmREZWZhdWx0RmxhZ3MoUGhhbnRvbSk7CiAgICAg
ICAgICAgICAgICAgZWxpbWluYXRlZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBjYXNlIENvbnZlcnRU
aGlzOiB7Ci0gICAgICAgICAgICAgICAgaWYgKCFpc09iamVjdFNwZWN1bGF0aW9uKG1fc3RhdGUu
Zm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKQorICAgICAgICAgICAgICAgIGlmICghaXNP
YmplY3RTcGVjdWxhdGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fdHlwZSkp
CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIG5vZGUuc2V0T3BB
bmREZWZhdWx0RmxhZ3MoSWRlbnRpdHkpOworICAgICAgICAgICAgICAgIG5vZGUtPnNldE9wQW5k
RGVmYXVsdEZsYWdzKElkZW50aXR5KTsKICAgICAgICAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsK
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAK
ICAgICAgICAgICAgIGNhc2UgR2V0QnlJZDoKICAgICAgICAgICAgIGNhc2UgR2V0QnlJZEZsdXNo
OiB7Ci0gICAgICAgICAgICAgICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2luID0gbm9kZS5jb2RlT3Jp
Z2luOwotICAgICAgICAgICAgICAgIE5vZGVJbmRleCBjaGlsZCA9IG5vZGUuY2hpbGQxKCkuaW5k
ZXgoKTsKLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyID0gbm9kZS5p
ZGVudGlmaWVyTnVtYmVyKCk7CisgICAgICAgICAgICAgICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2lu
ID0gbm9kZS0+Y29kZU9yaWdpbjsKKyAgICAgICAgICAgICAgICBOb2RlKiBjaGlsZCA9IG5vZGUt
PmNoaWxkMSgpLm5vZGUoKTsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBpZGVudGlmaWVyTnVt
YmVyID0gbm9kZS0+aWRlbnRpZmllck51bWJlcigpOwogICAgICAgICAgICAgICAgIAotICAgICAg
ICAgICAgICAgIGlmICghaXNDZWxsU3BlY3VsYXRpb24obV9ncmFwaFtjaGlsZF0ucHJlZGljdGlv
bigpKSkKKyAgICAgICAgICAgICAgICBpZiAoIWlzQ2VsbFNwZWN1bGF0aW9uKGNoaWxkLT5wcmVk
aWN0aW9uKCkpKQogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAK
ICAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG1fc3RhdGUuZm9yTm9kZShj
aGlsZCkuYmVzdFByb3ZlblN0cnVjdHVyZSgpOwpAQCAtMTg3LDcgKzE4Niw3IEBAIHByaXZhdGU6
CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgTm9kZUluZGV4IHByb3BlcnR5U3Rv
cmFnZUluZGV4OwogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIG1fZ3JhcGhbY2hp
bGRdLnJlZigpOworICAgICAgICAgICAgICAgIGNoaWxkLT5yZWYoKTsKICAgICAgICAgICAgICAg
ICBpZiAoaXNJbmxpbmVPZmZzZXQoc3RhdHVzLm9mZnNldCgpKSkKICAgICAgICAgICAgICAgICAg
ICAgcHJvcGVydHlTdG9yYWdlSW5kZXggPSBjaGlsZDsKICAgICAgICAgICAgICAgICBlbHNlIHsK
QEAgLTE5Niw3ICsxOTUsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICAgICAgY2hp
bGQpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAg
ICBtX2dyYXBoW25vZGVJbmRleF0uY29udmVydFRvR2V0QnlPZmZzZXQobV9ncmFwaC5tX3N0b3Jh
Z2VBY2Nlc3NEYXRhLnNpemUoKSwgcHJvcGVydHlTdG9yYWdlSW5kZXgpOworICAgICAgICAgICAg
ICAgIG5vZGUtPmNvbnZlcnRUb0dldEJ5T2Zmc2V0KG1fZ3JhcGgubV9zdG9yYWdlQWNjZXNzRGF0
YS5zaXplKCksIHByb3BlcnR5U3RvcmFnZUluZGV4KTsKICAgICAgICAgICAgICAgICAKICAgICAg
ICAgICAgICAgICBTdG9yYWdlQWNjZXNzRGF0YSBzdG9yYWdlQWNjZXNzRGF0YTsKICAgICAgICAg
ICAgICAgICBzdG9yYWdlQWNjZXNzRGF0YS5vZmZzZXQgPSBpbmRleFJlbGF0aXZlVG9CYXNlKHN0
YXR1cy5vZmZzZXQoKSk7CkBAIC0yMDcsOSArMjA2LDkgQEAgcHJpdmF0ZToKICAgICAgICAgICAg
ICAgICAKICAgICAgICAgICAgIGNhc2UgUHV0QnlJZDoKICAgICAgICAgICAgIGNhc2UgUHV0QnlJ
ZERpcmVjdDogewotICAgICAgICAgICAgICAgIENvZGVPcmlnaW4gY29kZU9yaWdpbiA9IG5vZGUu
Y29kZU9yaWdpbjsKLSAgICAgICAgICAgICAgICBOb2RlSW5kZXggY2hpbGQgPSBub2RlLmNoaWxk
MSgpLmluZGV4KCk7Ci0gICAgICAgICAgICAgICAgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciA9
IG5vZGUuaWRlbnRpZmllck51bWJlcigpOworICAgICAgICAgICAgICAgIENvZGVPcmlnaW4gY29k
ZU9yaWdpbiA9IG5vZGUtPmNvZGVPcmlnaW47CisgICAgICAgICAgICAgICAgTm9kZSogY2hpbGQg
PSBub2RlLT5jaGlsZDEoKS5ub2RlKCk7CisgICAgICAgICAgICAgICAgdW5zaWduZWQgaWRlbnRp
Zmllck51bWJlciA9IG5vZGUtPmlkZW50aWZpZXJOdW1iZXIoKTsKICAgICAgICAgICAgICAgICAK
ICAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG1fc3RhdGUuZm9yTm9kZShj
aGlsZCkuYmVzdFByb3ZlblN0cnVjdHVyZSgpOwogICAgICAgICAgICAgICAgIGlmICghc3RydWN0
dXJlKQpAQCAtMjIyLDcgKzIyMSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgIG1f
Z3JhcGguZ2xvYmFsT2JqZWN0Rm9yKGNvZGVPcmlnaW4pLAogICAgICAgICAgICAgICAgICAgICBz
dHJ1Y3R1cmUsCiAgICAgICAgICAgICAgICAgICAgIGNvZGVCbG9jaygpLT5pZGVudGlmaWVyKGlk
ZW50aWZpZXJOdW1iZXIpLAotICAgICAgICAgICAgICAgICAgICBub2RlLm9wKCkgPT0gUHV0QnlJ
ZERpcmVjdCk7CisgICAgICAgICAgICAgICAgICAgIG5vZGUtPm9wKCkgPT0gUHV0QnlJZERpcmVj
dCk7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgaWYgKCFzdGF0dXMuaXNTaW1w
bGVSZXBsYWNlKCkgJiYgIXN0YXR1cy5pc1NpbXBsZVRyYW5zaXRpb24oKSkKICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CkBAIC0yNDcsNyArMjQ2LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAg
ICAgICAgICAgdHJhbnNpdGlvbkRhdGEgPSBtX2dyYXBoLmFkZFN0cnVjdHVyZVRyYW5zaXRpb25E
YXRhKAogICAgICAgICAgICAgICAgICAgICAgICAgU3RydWN0dXJlVHJhbnNpdGlvbkRhdGEoc3Ry
dWN0dXJlLCBzdGF0dXMubmV3U3RydWN0dXJlKCkpKTsKICAgICAgICAgICAgICAgICAgICAgCi0g
ICAgICAgICAgICAgICAgICAgIGlmIChub2RlLm9wKCkgPT0gUHV0QnlJZCkgeworICAgICAgICAg
ICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBQdXRCeUlkKSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoIXN0cnVjdHVyZS0+c3RvcmVkUHJvdG90eXBlKCkuaXNOdWxsKCkpIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRTdHJ1Y3R1cmVUcmFuc2l0aW9uQ2hlY2soCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVPcmlnaW4sIGluZGV4SW5CbG9jaywK
QEAgLTI2NSwxOCArMjY0LDE4IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICBOb2RlSW5kZXggcHJvcGVydHlTdG9y
YWdlSW5kZXg7CisgICAgICAgICAgICAgICAgTm9kZSogcHJvcGVydHlTdG9yYWdlOwogICAgICAg
ICAgICAgICAgIAogICAgICAgICAgICAgICAgIGlmIChpc0lubGluZU9mZnNldChzdGF0dXMub2Zm
c2V0KCkpKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1fZ3JhcGhbY2hpbGRdLnJlZigpOyAvLyBU
aGUgY2hpbGQgd2lsbCBiZSB1c2VkIGFzIHRoZSBwcm9wZXJ0eSBpbmRleCwgc28gcmVmIGl0IHRv
IHJlZmxlY3QgdGhlIGRvdWJsZSB1c2UuCi0gICAgICAgICAgICAgICAgICAgIHByb3BlcnR5U3Rv
cmFnZUluZGV4ID0gY2hpbGQ7CisgICAgICAgICAgICAgICAgICAgIGNoaWxkLT5yZWYoKTsgLy8g
VGhlIGNoaWxkIHdpbGwgYmUgdXNlZCBhcyB0aGUgcHJvcGVydHkgaW5kZXgsIHNvIHJlZiBpdCB0
byByZWZsZWN0IHRoZSBkb3VibGUgdXNlLgorICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eVN0
b3JhZ2UgPSBjaGlsZDsKICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHN0YXR1cy5pc1NpbXBs
ZVJlcGxhY2UoKSB8fCBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkgPT0gc3RhdHVzLm5l
d1N0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpKSB7Ci0gICAgICAgICAgICAgICAgICAg
IHByb3BlcnR5U3RvcmFnZUluZGV4ID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKKyAgICAg
ICAgICAgICAgICAgICAgcHJvcGVydHlTdG9yYWdlID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9k
ZSgKICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4SW5CbG9jaywgUmVmQ2hpbGRyZW4sIFJl
Zk5vZGUsIFNwZWNOb25lLCBHZXRCdXR0ZXJmbHksIGNvZGVPcmlnaW4sIGNoaWxkKTsKICAgICAg
ICAgICAgICAgICB9IGVsc2UgaWYgKCFzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpIHsK
ICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKHN0YXR1cy5uZXdTdHJ1Y3R1cmUoKS0+b3V0T2ZM
aW5lQ2FwYWNpdHkoKSk7CiAgICAgICAgICAgICAgICAgICAgIEFTU0VSVCghaXNJbmxpbmVPZmZz
ZXQoc3RhdHVzLm9mZnNldCgpKSk7Ci0gICAgICAgICAgICAgICAgICAgIHByb3BlcnR5U3RvcmFn
ZUluZGV4ID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKKyAgICAgICAgICAgICAgICAgICAg
cHJvcGVydHlTdG9yYWdlID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKICAgICAgICAgICAg
ICAgICAgICAgICAgIGluZGV4SW5CbG9jaywgUmVmQ2hpbGRyZW4sIFJlZk5vZGUsIFNwZWNOb25l
LCBBbGxvY2F0ZVByb3BlcnR5U3RvcmFnZSwKICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVP
cmlnaW4sIE9wSW5mbyh0cmFuc2l0aW9uRGF0YSksIGNoaWxkKTsKICAgICAgICAgICAgICAgICB9
IGVsc2UgewpAQCAtMjg0LDcgKzI4Myw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAg
IEFTU0VSVChzdGF0dXMubmV3U3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCkgPiBzdHJ1
Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpOwogICAgICAgICAgICAgICAgICAgICBBU1NFUlQo
IWlzSW5saW5lT2Zmc2V0KHN0YXR1cy5vZmZzZXQoKSkpOwogICAgICAgICAgICAgICAgICAgICAK
LSAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlTdG9yYWdlSW5kZXggPSBtX2luc2VydGlvblNl
dC5pbnNlcnROb2RlKAorICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eVN0b3JhZ2UgPSBtX2lu
c2VydGlvblNldC5pbnNlcnROb2RlKAogICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhJbkJs
b2NrLCBSZWZDaGlsZHJlbiwgUmVmTm9kZSwgU3BlY05vbmUsIFJlYWxsb2NhdGVQcm9wZXJ0eVN0
b3JhZ2UsCiAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlT3JpZ2luLCBPcEluZm8odHJhbnNp
dGlvbkRhdGEpLAogICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGQsCkBAIC0yOTksNyArMjk4
LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgICAgIE9wSW5mbyh0cmFuc2l0aW9u
RGF0YSksIGNoaWxkKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCi0gICAg
ICAgICAgICAgICAgbV9ncmFwaFtub2RlSW5kZXhdLmNvbnZlcnRUb1B1dEJ5T2Zmc2V0KG1fZ3Jh
cGgubV9zdG9yYWdlQWNjZXNzRGF0YS5zaXplKCksIHByb3BlcnR5U3RvcmFnZUluZGV4KTsKKyAg
ICAgICAgICAgICAgICBub2RlLT5jb252ZXJ0VG9QdXRCeU9mZnNldChtX2dyYXBoLm1fc3RvcmFn
ZUFjY2Vzc0RhdGEuc2l6ZSgpLCBwcm9wZXJ0eVN0b3JhZ2VJbmRleCk7CiAgICAgICAgICAgICAg
ICAgCiAgICAgICAgICAgICAgICAgU3RvcmFnZUFjY2Vzc0RhdGEgc3RvcmFnZUFjY2Vzc0RhdGE7
CiAgICAgICAgICAgICAgICAgc3RvcmFnZUFjY2Vzc0RhdGEub2Zmc2V0ID0gaW5kZXhSZWxhdGl2
ZVRvQmFzZShzdGF0dXMub2Zmc2V0KCkpOwpAQCAtMzIwLDczICszMTksNzEgQEAgcHJpdmF0ZToK
ICAgICAgICAgICAgIG1fc3RhdGUuZXhlY3V0ZShpbmRleEluQmxvY2spOwogICAgICAgICAgICAg
aWYgKCFub2RlLnNob3VsZEdlbmVyYXRlKCkgfHwgbV9zdGF0ZS5kaWRDbG9iYmVyKCkgfHwgbm9k
ZS5oYXNDb25zdGFudCgpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAg
SlNWYWx1ZSB2YWx1ZSA9IG1fc3RhdGUuZm9yTm9kZShub2RlSW5kZXgpLnZhbHVlKCk7CisgICAg
ICAgICAgICBKU1ZhbHVlIHZhbHVlID0gbV9zdGF0ZS5mb3JOb2RlKG5vZGUpLnZhbHVlKCk7CiAg
ICAgICAgICAgICBpZiAoIXZhbHVlKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAg
ICAgICAgICAgIAotICAgICAgICAgICAgaWYgKG5vZGUub3AoKSA9PSBHZXRMb2NhbCkgewotICAg
ICAgICAgICAgICAgIE5vZGVJbmRleCBwcmV2aW91c0xvY2FsQWNjZXNzID0gTm9Ob2RlOwotICAg
ICAgICAgICAgICAgIGlmIChibG9jay0+dmFyaWFibGVzQXRIZWFkLm9wZXJhbmQobm9kZS5sb2Nh
bCgpKSA9PSBub2RlSW5kZXgKLSAgICAgICAgICAgICAgICAgICAgJiYgbV9ncmFwaFtub2RlLmNo
aWxkMSgpXS5vcCgpID09IFBoaSkgeworICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gR2V0
TG9jYWwpIHsKKyAgICAgICAgICAgICAgICBOb2RlKiBwcmV2aW91c0xvY2FsQWNjZXNzID0gMDsK
KyAgICAgICAgICAgICAgICBpZiAoYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5vcGVyYW5kKG5vZGUt
PmxvY2FsKCkpID09IG5vZGUKKyAgICAgICAgICAgICAgICAgICAgJiYgbm9kZS0+Y2hpbGQxKCkt
Pm9wKCkgPT0gUGhpKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIFdlIGV4cGVjdCB0aGlzIHRv
IGJlIHRoZSBjb21tb24gY2FzZS4KLSAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGJsb2NrLT5p
c0luUGhpcyhub2RlLmNoaWxkMSgpLmluZGV4KCkpKTsKLSAgICAgICAgICAgICAgICAgICAgcHJl
dmlvdXNMb2NhbEFjY2VzcyA9IG5vZGUuY2hpbGQxKCkuaW5kZXgoKTsKLSAgICAgICAgICAgICAg
ICAgICAgYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5vcGVyYW5kKG5vZGUubG9jYWwoKSkgPSBwcmV2
aW91c0xvY2FsQWNjZXNzOworICAgICAgICAgICAgICAgICAgICBBU1NFUlQoYmxvY2stPmlzSW5Q
aGlzKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSkpOworICAgICAgICAgICAgICAgICAgICBwcmV2aW91
c0xvY2FsQWNjZXNzID0gbm9kZS0+Y2hpbGQxKCkubm9kZSgpOworICAgICAgICAgICAgICAgICAg
ICBibG9jay0+dmFyaWFibGVzQXRIZWFkLm9wZXJhbmQobm9kZS0+bG9jYWwoKSkgPSBwcmV2aW91
c0xvY2FsQWNjZXNzOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAg
ICAgIEFTU0VSVChpbmRleEluQmxvY2sgPiAwKTsKICAgICAgICAgICAgICAgICAgICAgLy8gTXVz
dCBzZWFyY2ggZm9yIHRoZSBwcmV2aW91cyBhY2Nlc3MgdG8gdGhpcyBsb2NhbC4KICAgICAgICAg
ICAgICAgICAgICAgZm9yIChCbG9ja0luZGV4IHN1YkluZGV4SW5CbG9jayA9IGluZGV4SW5CbG9j
azsgc3ViSW5kZXhJbkJsb2NrLS07KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBOb2RlSW5k
ZXggc3ViTm9kZUluZGV4ID0gYmxvY2stPmF0KHN1YkluZGV4SW5CbG9jayk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBOb2RlJiBzdWJOb2RlID0gbV9ncmFwaFtzdWJOb2RlSW5kZXhdOwotICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKCFzdWJOb2RlLnNob3VsZEdlbmVyYXRlKCkpCisgICAg
ICAgICAgICAgICAgICAgICAgICBOb2RlKiBzdWJOb2RlID0gYmxvY2stPmF0KHN1YkluZGV4SW5C
bG9jayk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXN1Yk5vZGUtPnNob3VsZEdlbmVy
YXRlKCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoIXN1Yk5vZGUuaGFzVmFyaWFibGVBY2Nlc3NEYXRhKCkpCisgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoIXN1Yk5vZGUtPmhhc1ZhcmlhYmxlQWNjZXNzRGF0YSgp
KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKHN1Yk5vZGUubG9jYWwoKSAhPSBub2RlLmxvY2FsKCkpCisgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoc3ViTm9kZS0+bG9jYWwoKSAhPSBub2RlLT5sb2NhbCgpKQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gVGhlIHR3byBtdXN0IGhhdmUgYmVlbiB1bmlmaWVkLgotICAgICAgICAgICAgICAgICAg
ICAgICAgQVNTRVJUKHN1Yk5vZGUudmFyaWFibGVBY2Nlc3NEYXRhKCkgPT0gbm9kZS52YXJpYWJs
ZUFjY2Vzc0RhdGEoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQoc3ViTm9kZS0+
dmFyaWFibGVBY2Nlc3NEYXRhKCkgPT0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCkpOwogICAg
ICAgICAgICAgICAgICAgICAgICAgcHJldmlvdXNMb2NhbEFjY2VzcyA9IHN1Yk5vZGVJbmRleDsK
ICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgICAgIGlmIChwcmV2aW91c0xvY2FsQWNjZXNzID09IE5vTm9kZSkgewor
ICAgICAgICAgICAgICAgICAgICBpZiAoIXByZXZpb3VzTG9jYWxBY2Nlc3MpIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIFRoZSBwcmV2aW91cyBhY2Nlc3MgbXVzdCBoYXZlIGJlZW4gYSBQ
aGkuCiAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKEJsb2NrSW5kZXggcGhpSW5kZXhJbkJs
b2NrID0gYmxvY2stPnBoaXMuc2l6ZSgpOyBwaGlJbmRleEluQmxvY2stLTspIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBOb2RlSW5kZXggcGhpTm9kZUluZGV4ID0gYmxvY2stPnBoaXNb
cGhpSW5kZXhJbkJsb2NrXTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb2RlJiBwaGlO
b2RlID0gbV9ncmFwaFtwaGlOb2RlSW5kZXhdOwotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGlmICghcGhpTm9kZS5zaG91bGRHZW5lcmF0ZSgpKQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIE5vZGUqIHBoaU5vZGUgPSBibG9jay0+cGhpc1twaGlJbmRleEluQmxvY2tdOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICghcGhpTm9kZS0+c2hvdWxkR2VuZXJhdGUoKSkKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKHBoaU5vZGUubG9jYWwoKSAhPSBub2RlLmxvY2FsKCkpCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKHBoaU5vZGUtPmxvY2FsKCkgIT0gbm9kZS0+bG9jYWwo
KSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gVGhlIHR3byBtdXN0IGhhdmUgYmVlbiB1bmlmaWVkLgotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChwaGlOb2RlLnZhcmlhYmxlQWNjZXNzRGF0
YSgpID09IG5vZGUudmFyaWFibGVBY2Nlc3NEYXRhKCkpOwotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHByZXZpb3VzTG9jYWxBY2Nlc3MgPSBwaGlOb2RlSW5kZXg7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgQVNTRVJUKHBoaU5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpID09IG5v
ZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBw
cmV2aW91c0xvY2FsQWNjZXNzID0gcGhpTm9kZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAg
ICAgIEFTU0VSVChwcmV2aW91c0xvY2FsQWNjZXNzICE9IE5vTm9kZSk7CisgICAgICAgICAgICAg
ICAgICAgICAgICBBU1NFUlQocHJldmlvdXNMb2NhbEFjY2Vzcyk7CiAgICAgICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAg
ICAgICAgIEFTU0VSVChwcmV2aW91c0xvY2FsQWNjZXNzICE9IE5vTm9kZSk7CisgICAgICAgICAg
ICAgICAgQVNTRVJUKHByZXZpb3VzTG9jYWxBY2Nlc3MpOwogICAgICAgICAgICAgICAgIAotICAg
ICAgICAgICAgICAgIE5vZGVJbmRleCB0YWlsTm9kZUluZGV4ID0gYmxvY2stPnZhcmlhYmxlc0F0
VGFpbC5vcGVyYW5kKG5vZGUubG9jYWwoKSk7Ci0gICAgICAgICAgICAgICAgaWYgKHRhaWxOb2Rl
SW5kZXggPT0gbm9kZUluZGV4KQotICAgICAgICAgICAgICAgICAgICBibG9jay0+dmFyaWFibGVz
QXRUYWlsLm9wZXJhbmQobm9kZS5sb2NhbCgpKSA9IHByZXZpb3VzTG9jYWxBY2Nlc3M7CisgICAg
ICAgICAgICAgICAgTm9kZSogdGFpbE5vZGUgPSBibG9jay0+dmFyaWFibGVzQXRUYWlsLm9wZXJh
bmQobm9kZS0+bG9jYWwoKSk7CisgICAgICAgICAgICAgICAgaWYgKHRhaWxOb2RlID09IG5vZGUp
CisgICAgICAgICAgICAgICAgICAgIGJsb2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZChub2Rl
LT5sb2NhbCgpKSA9IHByZXZpb3VzTG9jYWxBY2Nlc3M7CiAgICAgICAgICAgICAgICAgZWxzZSB7
CiAgICAgICAgICAgICAgICAgICAgIEFTU0VSVCgKLSAgICAgICAgICAgICAgICAgICAgICAgIG1f
Z3JhcGhbdGFpbE5vZGVJbmRleF0ub3AoKSA9PSBGbHVzaAotICAgICAgICAgICAgICAgICAgICAg
ICAgfHwgbV9ncmFwaFt0YWlsTm9kZUluZGV4XS5vcCgpID09IFNldExvY2FsCi0gICAgICAgICAg
ICAgICAgICAgICAgICB8fCBpc0NhcHR1cmVkQXRPckFmdGVyKGJsb2NrLCBpbmRleEluQmxvY2ss
IG5vZGUubG9jYWwoKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgdGFpbE5vZGUtPm9wKCkg
PT0gRmx1c2gKKyAgICAgICAgICAgICAgICAgICAgICAgIHx8IHRhaWxOb2RlLT5vcCgpID09IFNl
dExvY2FsCisgICAgICAgICAgICAgICAgICAgICAgICB8fCBpc0NhcHR1cmVkQXRPckFmdGVyKGJs
b2NrLCBpbmRleEluQmxvY2ssIG5vZGUtPmxvY2FsKCkpKTsKICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIENvZGVPcmlnaW4gY29kZU9y
aWdpbiA9IG5vZGUuY29kZU9yaWdpbjsKLSAgICAgICAgICAgIEFkamFjZW5jeUxpc3QgY2hpbGRy
ZW4gPSBub2RlLmNoaWxkcmVuOworICAgICAgICAgICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2luID0g
bm9kZS0+Y29kZU9yaWdpbjsKKyAgICAgICAgICAgIEFkamFjZW5jeUxpc3QgY2hpbGRyZW4gPSBu
b2RlLT5jaGlsZHJlbjsKICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIG1fZ3JhcGguY29u
dmVydFRvQ29uc3RhbnQobm9kZUluZGV4LCB2YWx1ZSk7CisgICAgICAgICAgICBtX2dyYXBoLmNv
bnZlcnRUb0NvbnN0YW50KG5vZGUsIHZhbHVlKTsKICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0
Lmluc2VydE5vZGUoCiAgICAgICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBEb250UmVmQ2hpbGRy
ZW4sIERvbnRSZWZOb2RlLCBTcGVjTm9uZSwgUGhhbnRvbSwgY29kZU9yaWdpbiwgY2hpbGRyZW4p
OwotICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgCiAgICAgICAgICAgICBjaGFuZ2VkID0g
dHJ1ZTsKICAgICAgICAgfQogICAgICAgICBtX3N0YXRlLnJlc2V0KCk7CkBAIC0zOTksMTIgKzM5
NiwxMiBAQCBwcml2YXRlOgogICAgIGJvb2wgaXNDYXB0dXJlZEF0T3JBZnRlcihCYXNpY0Jsb2Nr
KiBibG9jaywgdW5zaWduZWQgaW5kZXhJbkJsb2NrLCBpbnQgb3BlcmFuZCkKICAgICB7CiAgICAg
ICAgIGZvciAoOyBpbmRleEluQmxvY2sgPCBibG9jay0+c2l6ZSgpOyArK2luZGV4SW5CbG9jaykg
ewotICAgICAgICAgICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhbYmxvY2stPmF0KGluZGV4SW5CbG9j
ayldOwotICAgICAgICAgICAgaWYgKCFub2RlLmhhc0xvY2FsKCkpCisgICAgICAgICAgICBOb2Rl
KiBub2RlID0gYmxvY2stPmF0KGluZGV4SW5CbG9jayk7CisgICAgICAgICAgICBpZiAoIW5vZGUt
Pmhhc0xvY2FsKCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBpZiAo
bm9kZS5sb2NhbCgpICE9IG9wZXJhbmQpCisgICAgICAgICAgICBpZiAobm9kZS0+bG9jYWwoKSAh
PSBvcGVyYW5kKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgaWYgKG5v
ZGUudmFyaWFibGVBY2Nlc3NEYXRhKCktPmlzQ2FwdHVyZWQoKSkKKyAgICAgICAgICAgIGlmIChu
b2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+aXNDYXB0dXJlZCgpKQogICAgICAgICAgICAgICAg
IHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTQxMywy
MCArNDEwLDIwIEBAIHByaXZhdGU6CiAgICAgCiAgICAgdm9pZCBhZGRTdHJ1Y3R1cmVUcmFuc2l0
aW9uQ2hlY2soQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCB1bnNpZ25lZCBpbmRleEluQmxvY2ssIEpT
Q2VsbCogY2VsbCkKICAgICB7Ci0gICAgICAgIE5vZGVJbmRleCB3ZWFrQ29uc3RhbnRJbmRleCA9
IG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCisgICAgICAgIE5vZGUqIHdlYWtDb25zdGFudCA9
IG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCiAgICAgICAgICAgICBpbmRleEluQmxvY2ssIERv
bnRSZWZDaGlsZHJlbiwgRG9udFJlZk5vZGUsIHNwZWN1bGF0aW9uRnJvbVZhbHVlKGNlbGwpLAog
ICAgICAgICAgICAgV2Vha0pTQ29uc3RhbnQsIGNvZGVPcmlnaW4sIE9wSW5mbyhjZWxsKSk7CiAg
ICAgICAgIAogICAgICAgICBpZiAoY2VsbC0+c3RydWN0dXJlKCktPnRyYW5zaXRpb25XYXRjaHBv
aW50U2V0SXNTdGlsbFZhbGlkKCkpIHsKICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2Vy
dE5vZGUoCiAgICAgICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBSZWZDaGlsZHJlbiwgRG9udFJl
Zk5vZGUsIFNwZWNOb25lLCBTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludCwKLSAgICAgICAg
ICAgICAgICBjb2RlT3JpZ2luLCBPcEluZm8oY2VsbC0+c3RydWN0dXJlKCkpLCB3ZWFrQ29uc3Rh
bnRJbmRleCk7CisgICAgICAgICAgICAgICAgY29kZU9yaWdpbiwgT3BJbmZvKGNlbGwtPnN0cnVj
dHVyZSgpKSwgd2Vha0NvbnN0YW50KTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQog
CiAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCiAgICAgICAgICAgICBpbmRleElu
QmxvY2ssIFJlZkNoaWxkcmVuLCBEb250UmVmTm9kZSwgU3BlY05vbmUsIENoZWNrU3RydWN0dXJl
LCBjb2RlT3JpZ2luLAotICAgICAgICAgICAgT3BJbmZvKG1fZ3JhcGguYWRkU3RydWN0dXJlU2V0
KGNlbGwtPnN0cnVjdHVyZSgpKSksIHdlYWtDb25zdGFudEluZGV4KTsKKyAgICAgICAgICAgIE9w
SW5mbyhtX2dyYXBoLmFkZFN0cnVjdHVyZVNldChjZWxsLT5zdHJ1Y3R1cmUoKSkpLCB3ZWFrQ29u
c3RhbnQpOwogICAgIH0KICAgICAKICAgICAvLyBUaGlzIGlzIG5lY2Vzc2FyeSBiZWNhdXNlIHRo
ZSBDRkEgbWF5IHJlYWNoIGNvbmNsdXNpb25zIGFib3V0IGNvbnN0YW50cyBiYXNlZCBvbiBpdHMK
QEAgLTQ1MSw5ICs0NDgsOCBAQCBwcml2YXRlOgogICAgICAgICAgICAgaWYgKG1fc3RhdGUuaXNW
YWxpZCgpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgCi0gICAgICAg
ICAgICBOb2RlSW5kZXggbm9kZUluZGV4ID0gYmxvY2stPmF0KGluZGV4SW5CbG9jayk7Ci0gICAg
ICAgICAgICBOb2RlJiBub2RlID0gbV9ncmFwaFtub2RlSW5kZXhdOwotICAgICAgICAgICAgc3dp
dGNoIChub2RlLm9wKCkpIHsKKyAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+YXQoaW5k
ZXhJbkJsb2NrKTsKKyAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewogICAgICAgICAg
ICAgY2FzZSBSZXR1cm46CiAgICAgICAgICAgICBjYXNlIFRocm93OgogICAgICAgICAgICAgY2Fz
ZSBUaHJvd1JlZmVyZW5jZUVycm9yOgpAQCAtNDY0LDcgKzQ2MCw3IEBAIHByaXZhdGU6CiAgICAg
ICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5v
ZGUoCiAgICAgICAgICAgICAgICAgICAgIGluZGV4SW5CbG9jaywgRG9udFJlZkNoaWxkcmVuLCBE
b250UmVmTm9kZSwgU3BlY05vbmUsIEZvcmNlT1NSRXhpdCwKLSAgICAgICAgICAgICAgICAgICAg
bm9kZS5jb2RlT3JpZ2luKTsKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y29kZU9yaWdpbik7
CiAgICAgICAgICAgICAgICAgY2hhbmdlZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0VkZ2Uu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRWRnZS5jcHAJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0VkZ2UuY3BwCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdFZGdl
LmgiCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBE
RkcgeworCit2b2lkIEVkZ2U6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBv
dXQucHJpbnQodXNlS2luZFRvU3RyaW5nKHVzZUtpbmQoKSksIG5vZGUoKSk7Cit9CisKK30gfSAv
LyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0VkZ2UuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0VkZ2UuaAkocmV2aXNpb24gMTQwOTA0KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdFZGdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQzLDQxICs0
MywzOSBAQCBwdWJsaWM6CiAgICAgewogICAgIH0KICAgICAKLSAgICBleHBsaWNpdCBFZGdlKE5v
ZGVJbmRleCBub2RlSW5kZXgpCi0gICAgICAgIDogbV9lbmNvZGVkV29yZChtYWtlV29yZChub2Rl
SW5kZXgsIFVudHlwZWRVc2UpKQorICAgIGV4cGxpY2l0IEVkZ2UoTm9kZSogbm9kZSkKKyAgICAg
ICAgOiBtX2VuY29kZWRXb3JkKG1ha2VXb3JkKG5vZGUsIFVudHlwZWRVc2UpKQogICAgIHsKICAg
ICB9CiAgICAgCi0gICAgRWRnZShOb2RlSW5kZXggbm9kZUluZGV4LCBVc2VLaW5kIHVzZUtpbmQp
Ci0gICAgICAgIDogbV9lbmNvZGVkV29yZChtYWtlV29yZChub2RlSW5kZXgsIHVzZUtpbmQpKQor
ICAgIEVkZ2UoTm9kZSogbm9kZSwgVXNlS2luZCB1c2VLaW5kKQorICAgICAgICA6IG1fZW5jb2Rl
ZFdvcmQobWFrZVdvcmQobm9kZSwgdXNlS2luZCkpCiAgICAgewogICAgIH0KICAgICAKLSAgICBO
b2RlSW5kZXggaW5kZXhVbmNoZWNrZWQoKSBjb25zdCB7IHJldHVybiBtX2VuY29kZWRXb3JkID4+
IHNoaWZ0KCk7IH0KLSAgICBOb2RlSW5kZXggaW5kZXgoKSBjb25zdAotICAgIHsKLSAgICAgICAg
QVNTRVJUKGlzU2V0KCkpOwotICAgICAgICByZXR1cm4gbV9lbmNvZGVkV29yZCA+PiBzaGlmdCgp
OwotICAgIH0KLSAgICB2b2lkIHNldEluZGV4KE5vZGVJbmRleCBub2RlSW5kZXgpCisgICAgTm9k
ZSogbm9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fZW5jb2RlZFdvcmQgJiB+KCgxIDw8IHNoaWZ0KCkp
IC0gMSk7IH0KKyAgICBOb2RlJiBvcGVyYXRvciooKSBjb25zdCB7IHJldHVybiAqZ2V0KCk7IH0K
KyAgICBOb2RlKiBvcGVyYXRvci0+KCkgY29uc3QgeyByZXR1cm4gZ2V0KCk7IH0KKyAgICAKKyAg
ICB2b2lkIHNldE5vZGUoTm9kZSogbm9kZSkKICAgICB7Ci0gICAgICAgIG1fZW5jb2RlZFdvcmQg
PSBtYWtlV29yZChub2RlSW5kZXgsIHVzZUtpbmQoKSk7CisgICAgICAgIG1fZW5jb2RlZFdvcmQg
PSBtYWtlV29yZChub2RlLCB1c2VLaW5kKCkpOwogICAgIH0KICAgICAKICAgICBVc2VLaW5kIHVz
ZUtpbmQoKSBjb25zdAogICAgIHsKLSAgICAgICAgQVNTRVJUKGlzU2V0KCkpOworICAgICAgICBB
U1NFUlQobm9kZSgpKTsKICAgICAgICAgdW5zaWduZWQgbWFza2VkID0gbV9lbmNvZGVkV29yZCAm
ICgoKDEgPDwgc2hpZnQoKSkgLSAxKSk7CiAgICAgICAgIEFTU0VSVChtYXNrZWQgPCBMYXN0VXNl
S2luZCk7CiAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxVc2VLaW5kPihtYXNrZWQpOwogICAg
IH0KICAgICB2b2lkIHNldFVzZUtpbmQoVXNlS2luZCB1c2VLaW5kKQogICAgIHsKLSAgICAgICAg
QVNTRVJUKGlzU2V0KCkpOwotICAgICAgICBtX2VuY29kZWRXb3JkID0gbWFrZVdvcmQoaW5kZXgo
KSwgdXNlS2luZCk7CisgICAgICAgIEFTU0VSVChub2RlKCkpOworICAgICAgICBtX2VuY29kZWRX
b3JkID0gbWFrZVdvcmQobm9kZSgpLCB1c2VLaW5kKTsKICAgICB9CiAgICAgCi0gICAgYm9vbCBp
c1NldCgpIGNvbnN0IHsgcmV0dXJuIGluZGV4VW5jaGVja2VkKCkgIT0gTm9Ob2RlOyB9CisgICAg
Ym9vbCBpc1NldCgpIGNvbnN0IHsgcmV0dXJuICEhbm9kZSgpOyB9CiAgICAgCiAgICAgdHlwZWRl
ZiB2b2lkKiBFZGdlOjoqVW5zcGVjaWZpZWRCb29sVHlwZTsKICAgICBvcGVyYXRvciBVbnNwZWNp
ZmllZEJvb2xUeXBlKigpIGNvbnN0IHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8VW5zcGVjaWZp
ZWRCb29sVHlwZSo+KGlzU2V0KCkpOyB9CkBAIC05MiwzOCArOTAsNDEgQEAgcHVibGljOgogICAg
IHsKICAgICAgICAgcmV0dXJuIG1fZW5jb2RlZFdvcmQgIT0gb3RoZXIubV9lbmNvZGVkV29yZDsK
ICAgICB9CisgICAgCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CiAKIHByaXZh
dGU6CiAgICAgZnJpZW5kIGNsYXNzIEFkamFjZW5jeUxpc3Q7CiAgICAgCi0gICAgc3RhdGljIHVp
bnQzMl90IHNoaWZ0KCkgeyByZXR1cm4gNDsgfQorICAgIHN0YXRpYyB1aW50MzJfdCBzaGlmdCgp
IHsgcmV0dXJuIDI7IH0KICAgICAKLSAgICBzdGF0aWMgaW50MzJfdCBtYWtlV29yZChOb2RlSW5k
ZXggbm9kZUluZGV4LCBVc2VLaW5kIHVzZUtpbmQpCisgICAgc3RhdGljIHVpbnRwdHJfdCBtYWtl
V29yZChOb2RlKiBub2RlLCBVc2VLaW5kIHVzZUtpbmQpCiAgICAgewotICAgICAgICBBU1NFUlQo
c3RhdGljX2Nhc3Q8dWludDMyX3Q+KCgoc3RhdGljX2Nhc3Q8aW50MzJfdD4obm9kZUluZGV4KSA8
PCBzaGlmdCgpKSA+PiBzaGlmdCgpKSkgPT0gbm9kZUluZGV4KTsKKyAgICAgICAgdWludHB0cl90
IHZhbHVlID0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4obm9kZSk7CisgICAgICAgIEFTU0VSVCgh
KHZhbHVlICYgKCgxIDw8IHNoaWZ0KCkpIC0gMSkpKTsKICAgICAgICAgQVNTRVJUKHVzZUtpbmQg
Pj0gMCAmJiB1c2VLaW5kIDwgTGFzdFVzZUtpbmQpOwogICAgICAgICBBU1NFUlQoTGFzdFVzZUtp
bmQgPD0gKDEgPDwgc2hpZnQoKSkpOwotICAgICAgICByZXR1cm4gKG5vZGVJbmRleCA8PCBzaGlm
dCgpKSB8IHVzZUtpbmQ7CisgICAgICAgIHJldHVybiB2YWx1ZSB8IHN0YXRpY19jYXN0PHVpbnRw
dHJfdD4odXNlS2luZCk7CiAgICAgfQogICAgIAotICAgIGludDMyX3QgbV9lbmNvZGVkV29yZDsK
KyAgICB1aW50cHRyX3QgbV9lbmNvZGVkV29yZDsKIH07CiAKLWlubGluZSBib29sIG9wZXJhdG9y
PT0oRWRnZSBub2RlVXNlLCBOb2RlSW5kZXggbm9kZUluZGV4KQoraW5saW5lIGJvb2wgb3BlcmF0
b3I9PShFZGdlIGVkZ2UsIE5vZGUqIG5vZGUpCiB7Ci0gICAgcmV0dXJuIG5vZGVVc2UuaW5kZXhV
bmNoZWNrZWQoKSA9PSBub2RlSW5kZXg7CisgICAgcmV0dXJuIGVkZ2Uubm9kZSgpID09IG5vZGU7
CiB9Ci1pbmxpbmUgYm9vbCBvcGVyYXRvcj09KE5vZGVJbmRleCBub2RlSW5kZXgsIEVkZ2Ugbm9k
ZVVzZSkKK2lubGluZSBib29sIG9wZXJhdG9yPT0oTm9kZSogbm9kZSwgRWRnZSBlZGdlKQogewot
ICAgIHJldHVybiBub2RlVXNlLmluZGV4VW5jaGVja2VkKCkgPT0gbm9kZUluZGV4OworICAgIHJl
dHVybiBlZGdlLm5vZGUoKSA9PSBub2RlOwogfQotaW5saW5lIGJvb2wgb3BlcmF0b3IhPShFZGdl
IG5vZGVVc2UsIE5vZGVJbmRleCBub2RlSW5kZXgpCitpbmxpbmUgYm9vbCBvcGVyYXRvciE9KEVk
Z2UgZWRnZSwgTm9kZSogbm9kZSkKIHsKLSAgICByZXR1cm4gbm9kZVVzZS5pbmRleFVuY2hlY2tl
ZCgpICE9IG5vZGVJbmRleDsKKyAgICByZXR1cm4gZWRnZS5ub2RlKCkgIT0gbm9kZTsKIH0KLWlu
bGluZSBib29sIG9wZXJhdG9yIT0oTm9kZUluZGV4IG5vZGVJbmRleCwgRWRnZSBub2RlVXNlKQor
aW5saW5lIGJvb2wgb3BlcmF0b3IhPShOb2RlKiBub2RlLCBFZGdlIGVkZ2UpCiB7Ci0gICAgcmV0
dXJuIG5vZGVVc2UuaW5kZXhVbmNoZWNrZWQoKSAhPSBub2RlSW5kZXg7CisgICAgcmV0dXJuIGVk
Z2Uubm9kZSgpICE9IG5vZGU7CiB9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAkocmV2aXNpb24g
MTQwOTA0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLCAy
MDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtNTgsMjEgKzU4LDIxIEBAIHByaXZhdGU6CiAgICAgICAgIEFTU0VSVChi
bG9jay0+aXNSZWFjaGFibGUpOwogICAgICAgICBtX2Jsb2NrID0gYmxvY2s7CiAgICAgICAgIGZv
ciAobV9pbmRleEluQmxvY2sgPSAwOyBtX2luZGV4SW5CbG9jayA8IGJsb2NrLT5zaXplKCk7ICsr
bV9pbmRleEluQmxvY2spIHsKLSAgICAgICAgICAgIG1fY29tcGlsZUluZGV4ID0gYmxvY2stPmF0
KG1faW5kZXhJbkJsb2NrKTsKLSAgICAgICAgICAgIGZpeHVwTm9kZShtX2dyYXBoW21fY29tcGls
ZUluZGV4XSk7CisgICAgICAgICAgICBtX2N1cnJlbnROb2RlID0gYmxvY2stPmF0KG1faW5kZXhJ
bkJsb2NrKTsKKyAgICAgICAgICAgIGZpeHVwTm9kZShtX2N1cnJlbnROb2RlKTsKICAgICAgICAg
fQogICAgICAgICBtX2luc2VydGlvblNldC5leGVjdXRlKGJsb2NrKTsKICAgICB9CiAgICAgCi0g
ICAgdm9pZCBmaXh1cE5vZGUoTm9kZSYgbm9kZSkKKyAgICB2b2lkIGZpeHVwTm9kZShOb2RlKiBu
b2RlKQogICAgIHsKLSAgICAgICAgaWYgKCFub2RlLnNob3VsZEdlbmVyYXRlKCkpCisgICAgICAg
IGlmICghbm9kZS0+c2hvdWxkR2VuZXJhdGUoKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgCi0gICAgICAgIE5vZGVUeXBlIG9wID0gbm9kZS5vcCgpOworICAgICAgICBOb2RlVHlwZSBv
cCA9IG5vZGUtPm9wKCk7CiAKICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJP
U0UpCi0gICAgICAgIGRhdGFMb2dGKCIgICAlcyBAJXU6ICIsIEdyYXBoOjpvcE5hbWUob3ApLCBt
X2NvbXBpbGVJbmRleCk7CisgICAgICAgIGRhdGFMb2dGKCIgICAlcyBAJXU6ICIsIEdyYXBoOjpv
cE5hbWUob3ApLCBub2RlLT5pbmRleCgpKTsKICNlbmRpZgogICAgICAgICAKICAgICAgICAgc3dp
dGNoIChvcCkgewpAQCAtODAsODAgKzgwLDcxIEBAIHByaXZhdGU6CiAgICAgICAgICAgICBpZiAo
bV9ncmFwaC5tX2ZpeHBvaW50U3RhdGUgPiBCZWZvcmVGaXhwb2ludCkKICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgIAotICAgICAgICAgICAgTm9kZSogbm9kZVB0ciA9ICZub2Rl
OwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoIWlzSW50MzJTcGVjdWxhdGlvbihtX2dy
YXBoW21fY29tcGlsZUluZGV4XS5wcmVkaWN0aW9uKCkpKQorICAgICAgICAgICAgaWYgKCFpc0lu
dDMyU3BlY3VsYXRpb24obm9kZS0+cHJlZGljdGlvbigpKSkKICAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgIGlmIChjb2RlQmxvY2soKS0+aWRlbnRpZmllcihub2RlUHRyLT5pZGVu
dGlmaWVyTnVtYmVyKCkpICE9IGdsb2JhbERhdGEoKS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgpCisg
ICAgICAgICAgICBpZiAoY29kZUJsb2NrKCktPmlkZW50aWZpZXIobm9kZS0+aWRlbnRpZmllck51
bWJlcigpKSAhPSBnbG9iYWxEYXRhKCkucHJvcGVydHlOYW1lcy0+bGVuZ3RoKQogICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgQXJyYXlQcm9maWxlKiBhcnJheVByb2ZpbGUgPSAK
LSAgICAgICAgICAgICAgICBtX2dyYXBoLmJhc2VsaW5lQ29kZUJsb2NrRm9yKG5vZGVQdHItPmNv
ZGVPcmlnaW4pLT5nZXRBcnJheVByb2ZpbGUoCi0gICAgICAgICAgICAgICAgICAgIG5vZGVQdHIt
PmNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCk7CisgICAgICAgICAgICAgICAgbV9ncmFwaC5iYXNl
bGluZUNvZGVCbG9ja0Zvcihub2RlLT5jb2RlT3JpZ2luKS0+Z2V0QXJyYXlQcm9maWxlKAorICAg
ICAgICAgICAgICAgICAgICBub2RlLT5jb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgpOwogICAgICAg
ICAgICAgQXJyYXlNb2RlIGFycmF5TW9kZSA9IEFycmF5TW9kZShBcnJheTo6U2VsZWN0VXNpbmdQ
cmVkaWN0aW9ucyk7CiAgICAgICAgICAgICBpZiAoYXJyYXlQcm9maWxlKSB7Ci0gICAgICAgICAg
ICAgICAgYXJyYXlQcm9maWxlLT5jb21wdXRlVXBkYXRlZFByZWRpY3Rpb24obV9ncmFwaC5iYXNl
bGluZUNvZGVCbG9ja0Zvcihub2RlLmNvZGVPcmlnaW4pKTsKKyAgICAgICAgICAgICAgICBhcnJh
eVByb2ZpbGUtPmNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbihtX2dyYXBoLmJhc2VsaW5lQ29kZUJs
b2NrRm9yKG5vZGUtPmNvZGVPcmlnaW4pKTsKICAgICAgICAgICAgICAgICBhcnJheU1vZGUgPSBB
cnJheU1vZGU6OmZyb21PYnNlcnZlZChhcnJheVByb2ZpbGUsIEFycmF5OjpSZWFkLCBmYWxzZSk7
CiAgICAgICAgICAgICAgICAgYXJyYXlNb2RlID0gYXJyYXlNb2RlLnJlZmluZSgKLSAgICAgICAg
ICAgICAgICAgICAgbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5wcmVkaWN0aW9uKCksCi0gICAgICAg
ICAgICAgICAgICAgIG1fZ3JhcGhbbV9jb21waWxlSW5kZXhdLnByZWRpY3Rpb24oKSk7CisgICAg
ICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLT5wcmVkaWN0aW9uKCksIG5vZGUtPnByZWRp
Y3Rpb24oKSk7CiAgICAgICAgICAgICAgICAgaWYgKGFycmF5TW9kZS5zdXBwb3J0c0xlbmd0aCgp
ICYmIGFycmF5UHJvZmlsZS0+aGFzRGVmaW5pdGVTdHJ1Y3R1cmUoKSkgewogICAgICAgICAgICAg
ICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAogICAgICAgICAgICAgICAgICAgICAg
ICAgbV9pbmRleEluQmxvY2ssIFJlZkNoaWxkcmVuLCBEb250UmVmTm9kZSwgU3BlY05vbmUsIENo
ZWNrU3RydWN0dXJlLAotICAgICAgICAgICAgICAgICAgICAgICAgbm9kZVB0ci0+Y29kZU9yaWdp
biwgT3BJbmZvKG1fZ3JhcGguYWRkU3RydWN0dXJlU2V0KGFycmF5UHJvZmlsZS0+ZXhwZWN0ZWRT
dHJ1Y3R1cmUoKSkpLAotICAgICAgICAgICAgICAgICAgICAgICAgbm9kZVB0ci0+Y2hpbGQxKCku
aW5kZXgoKSk7Ci0gICAgICAgICAgICAgICAgICAgIG5vZGVQdHIgPSAmbV9ncmFwaFttX2NvbXBp
bGVJbmRleF07CisgICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5jb2RlT3JpZ2luLCBPcElu
Zm8obV9ncmFwaC5hZGRTdHJ1Y3R1cmVTZXQoYXJyYXlQcm9maWxlLT5leHBlY3RlZFN0cnVjdHVy
ZSgpKSksCisgICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDEoKS5ub2RlKCkpOwog
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAg
YXJyYXlNb2RlID0gYXJyYXlNb2RlLnJlZmluZSgKLSAgICAgICAgICAgICAgICAgICAgbV9ncmFw
aFtub2RlLmNoaWxkMSgpXS5wcmVkaWN0aW9uKCksCi0gICAgICAgICAgICAgICAgICAgIG1fZ3Jh
cGhbbV9jb21waWxlSW5kZXhdLnByZWRpY3Rpb24oKSk7Ci0gICAgICAgICAgICB9CisgICAgICAg
ICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICBhcnJheU1vZGUgPSBhcnJheU1vZGUucmVmaW5l
KG5vZGUtPmNoaWxkMSgpLT5wcmVkaWN0aW9uKCksIG5vZGUtPnByZWRpY3Rpb24oKSk7CiAgICAg
ICAgICAgICBpZiAoIWFycmF5TW9kZS5zdXBwb3J0c0xlbmd0aCgpKQogICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgbm9kZVB0ci0+c2V0T3AoR2V0QXJyYXlMZW5ndGgpOwotICAg
ICAgICAgICAgQVNTRVJUKG5vZGVQdHItPmZsYWdzKCkgJiBOb2RlTXVzdEdlbmVyYXRlKTsKLSAg
ICAgICAgICAgIG5vZGVQdHItPmNsZWFyRmxhZ3MoTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVDbG9i
YmVyc1dvcmxkKTsKLSAgICAgICAgICAgIG1fZ3JhcGguZGVyZWYobV9jb21waWxlSW5kZXgpOwot
ICAgICAgICAgICAgbm9kZVB0ci0+c2V0QXJyYXlNb2RlKGFycmF5TW9kZSk7CisgICAgICAgICAg
ICBub2RlLT5zZXRPcChHZXRBcnJheUxlbmd0aCk7CisgICAgICAgICAgICBBU1NFUlQobm9kZS0+
ZmxhZ3MoKSAmIE5vZGVNdXN0R2VuZXJhdGUpOworICAgICAgICAgICAgbm9kZS0+Y2xlYXJGbGFn
cyhOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZUNsb2JiZXJzV29ybGQpOworICAgICAgICAgICAgbV9n
cmFwaC5kZXJlZihub2RlKTsKKyAgICAgICAgICAgIG5vZGUtPnNldEFycmF5TW9kZShhcnJheU1v
ZGUpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBOb2RlSW5kZXggc3RvcmFnZSA9IGNoZWNr
QXJyYXkoYXJyYXlNb2RlLCBub2RlUHRyLT5jb2RlT3JpZ2luLCBub2RlUHRyLT5jaGlsZDEoKS5p
bmRleCgpLCBOb05vZGUsIGxlbmd0aE5lZWRzU3RvcmFnZSwgbm9kZVB0ci0+c2hvdWxkR2VuZXJh
dGUoKSk7Ci0gICAgICAgICAgICBpZiAoc3RvcmFnZSA9PSBOb05vZGUpCisgICAgICAgICAgICBO
b2RlKiBzdG9yYWdlID0gY2hlY2tBcnJheShhcnJheU1vZGUsIG5vZGUtPmNvZGVPcmlnaW4sIG5v
ZGUtPmNoaWxkMSgpLm5vZGUoKSwgMCwgbGVuZ3RoTmVlZHNTdG9yYWdlLCBub2RlLT5zaG91bGRH
ZW5lcmF0ZSgpKTsKKyAgICAgICAgICAgIGlmICghc3RvcmFnZSkKICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgIAotICAgICAgICAgICAgbm9kZVB0ciA9ICZtX2dyYXBoW21fY29t
cGlsZUluZGV4XTsKLSAgICAgICAgICAgIG5vZGVQdHItPmNoaWxkcmVuLmNoaWxkMigpID0gRWRn
ZShzdG9yYWdlKTsKKyAgICAgICAgICAgIG5vZGUtPmNoaWxkcmVuLmNoaWxkMigpID0gRWRnZShz
dG9yYWdlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgR2V0
SW5kZXhlZFByb3BlcnR5U3RvcmFnZTogewotICAgICAgICAgICAgQVNTRVJUKG5vZGUuYXJyYXlN
b2RlKCkuY2FuQ1NFU3RvcmFnZSgpKTsKKyAgICAgICAgICAgIEFTU0VSVChub2RlLT5hcnJheU1v
ZGUoKS5jYW5DU0VTdG9yYWdlKCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAg
ICAgICAgY2FzZSBHZXRCeVZhbDogewotICAgICAgICAgICAgbm9kZS5zZXRBcnJheU1vZGUoCi0g
ICAgICAgICAgICAgICAgbm9kZS5hcnJheU1vZGUoKS5yZWZpbmUoCi0gICAgICAgICAgICAgICAg
ICAgIG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ucHJlZGljdGlvbigpLAotICAgICAgICAgICAgICAg
ICAgICBtX2dyYXBoW25vZGUuY2hpbGQyKCldLnByZWRpY3Rpb24oKSwKLSAgICAgICAgICAgICAg
ICAgICAgU3BlY05vbmUsIG5vZGUuZmxhZ3MoKSkpOworICAgICAgICAgICAgbm9kZS0+c2V0QXJy
YXlNb2RlKAorICAgICAgICAgICAgICAgIG5vZGUtPmFycmF5TW9kZSgpLnJlZmluZSgKKyAgICAg
ICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCktPnByZWRpY3Rpb24oKSwKKyAgICAgICAgICAg
ICAgICAgICAgbm9kZS0+Y2hpbGQyKCktPnByZWRpY3Rpb24oKSwKKyAgICAgICAgICAgICAgICAg
ICAgU3BlY05vbmUsIG5vZGUtPmZsYWdzKCkpKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAg
Ymxlc3NBcnJheU9wZXJhdGlvbihub2RlLmNoaWxkMSgpLCBub2RlLmNoaWxkMigpLCAyKTsKKyAg
ICAgICAgICAgIGJsZXNzQXJyYXlPcGVyYXRpb24obm9kZS0+Y2hpbGQxKCksIG5vZGUtPmNoaWxk
MigpLCAyKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgTm9kZSogbm9kZVB0ciA9ICZtX2dy
YXBoW21fY29tcGlsZUluZGV4XTsKLSAgICAgICAgICAgIEFycmF5TW9kZSBhcnJheU1vZGUgPSBu
b2RlUHRyLT5hcnJheU1vZGUoKTsKKyAgICAgICAgICAgIEFycmF5TW9kZSBhcnJheU1vZGUgPSBu
b2RlLT5hcnJheU1vZGUoKTsKICAgICAgICAgICAgIGlmIChhcnJheU1vZGUudHlwZSgpID09IEFy
cmF5OjpEb3VibGUKICAgICAgICAgICAgICAgICAmJiBhcnJheU1vZGUuYXJyYXlDbGFzcygpID09
IEFycmF5OjpPcmlnaW5hbEFycmF5CiAgICAgICAgICAgICAgICAgJiYgYXJyYXlNb2RlLnNwZWN1
bGF0aW9uKCkgPT0gQXJyYXk6OkluQm91bmRzCiAgICAgICAgICAgICAgICAgJiYgYXJyYXlNb2Rl
LmNvbnZlcnNpb24oKSA9PSBBcnJheTo6QXNJcwotICAgICAgICAgICAgICAgICYmIG1fZ3JhcGgu
Z2xvYmFsT2JqZWN0Rm9yKG5vZGVQdHItPmNvZGVPcmlnaW4pLT5hcnJheVByb3RvdHlwZUNoYWlu
SXNTYW5lKCkKLSAgICAgICAgICAgICAgICAmJiAhKG5vZGVQdHItPmZsYWdzKCkgJiBOb2RlVXNl
ZEFzT3RoZXIpKQotICAgICAgICAgICAgICAgIG5vZGVQdHItPnNldEFycmF5TW9kZShhcnJheU1v
ZGUud2l0aFNwZWN1bGF0aW9uKEFycmF5OjpTYW5lQ2hhaW4pKTsKKyAgICAgICAgICAgICAgICAm
JiBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5jb2RlT3JpZ2luKS0+YXJyYXlQcm90b3R5
cGVDaGFpbklzU2FuZSgpCisgICAgICAgICAgICAgICAgJiYgIShub2RlLT5mbGFncygpICYgTm9k
ZVVzZWRBc090aGVyKSkKKyAgICAgICAgICAgICAgICBub2RlLT5zZXRBcnJheU1vZGUoYXJyYXlN
b2RlLndpdGhTcGVjdWxhdGlvbihBcnJheTo6U2FuZUNoYWluKSk7CiAgICAgICAgICAgICAKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgU3RyaW5nQ2hhckF0Ogog
ICAgICAgICBjYXNlIFN0cmluZ0NoYXJDb2RlQXQ6IHsKICAgICAgICAgICAgIC8vIEN1cnJlbnRs
eSB3ZSBoYXZlIG5vIGdvb2Qgd2F5IG9mIHJlZmluaW5nIHRoZXNlLgotICAgICAgICAgICAgQVNT
RVJUKG5vZGUuYXJyYXlNb2RlKCkgPT0gQXJyYXlNb2RlKEFycmF5OjpTdHJpbmcpKTsKLSAgICAg
ICAgICAgIGJsZXNzQXJyYXlPcGVyYXRpb24obm9kZS5jaGlsZDEoKSwgbm9kZS5jaGlsZDIoKSwg
Mik7CisgICAgICAgICAgICBBU1NFUlQobm9kZS0+YXJyYXlNb2RlKCkgPT0gQXJyYXlNb2RlKEFy
cmF5OjpTdHJpbmcpKTsKKyAgICAgICAgICAgIGJsZXNzQXJyYXlPcGVyYXRpb24obm9kZS0+Y2hp
bGQxKCksIG5vZGUtPmNoaWxkMigpLCAyKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9
CiAgICAgICAgICAgICAKQEAgLTE2NywxNSArMTU4LDE0IEBAIHByaXZhdGU6CiAgICAgICAgICAg
ICAvLyBpZ25vcmVkLiBUaGF0J3MgYmVjYXVzZSBBcnJheVB1c2ggY2FuJ3QgaGFuZGxlIGFueSBh
cnJheSBtb2RlcyB0aGF0IGFyZW4ndAogICAgICAgICAgICAgLy8gYXJyYXktcmVsYXRlZCAtIHNv
IGlmIHJlZmluZSgpIHR1cm5lZCB0aGlzIGludG8gYSAiR2VuZXJpYyIgQXJyYXlQdXNoIHRoZW4K
ICAgICAgICAgICAgIC8vIHRoYXQgd291bGQgYnJlYWsgdGhpbmdzLgotICAgICAgICAgICAgbm9k
ZS5zZXRBcnJheU1vZGUoCi0gICAgICAgICAgICAgICAgbm9kZS5hcnJheU1vZGUoKS5yZWZpbmUo
Ci0gICAgICAgICAgICAgICAgICAgIG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ucHJlZGljdGlvbigp
ICYgU3BlY0NlbGwsCisgICAgICAgICAgICBub2RlLT5zZXRBcnJheU1vZGUoCisgICAgICAgICAg
ICAgICAgbm9kZS0+YXJyYXlNb2RlKCkucmVmaW5lKAorICAgICAgICAgICAgICAgICAgICBub2Rl
LT5jaGlsZDEoKS0+cHJlZGljdGlvbigpICYgU3BlY0NlbGwsCiAgICAgICAgICAgICAgICAgICAg
IFNwZWNJbnQzMiwKLSAgICAgICAgICAgICAgICAgICAgbV9ncmFwaFtub2RlLmNoaWxkMigpXS5w
cmVkaWN0aW9uKCkpKTsKLSAgICAgICAgICAgIGJsZXNzQXJyYXlPcGVyYXRpb24obm9kZS5jaGls
ZDEoKSwgRWRnZSgpLCAyKTsKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQyKCktPnBy
ZWRpY3Rpb24oKSkpOworICAgICAgICAgICAgYmxlc3NBcnJheU9wZXJhdGlvbihub2RlLT5jaGls
ZDEoKSwgRWRnZSgpLCAyKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgTm9kZSogbm9kZVB0
ciA9ICZtX2dyYXBoW21fY29tcGlsZUluZGV4XTsKLSAgICAgICAgICAgIHN3aXRjaCAobm9kZVB0
ci0+YXJyYXlNb2RlKCkudHlwZSgpKSB7CisgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPmFycmF5
TW9kZSgpLnR5cGUoKSkgewogICAgICAgICAgICAgY2FzZSBBcnJheTo6RG91YmxlOgogICAgICAg
ICAgICAgICAgIGZpeERvdWJsZUVkZ2UoMSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0x
ODYsMTUgKzE3NiwxNSBAQCBwcml2YXRlOgogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAg
ICAgY2FzZSBBcnJheVBvcDogewotICAgICAgICAgICAgYmxlc3NBcnJheU9wZXJhdGlvbihub2Rl
LmNoaWxkMSgpLCBFZGdlKCksIDEpOworICAgICAgICAgICAgYmxlc3NBcnJheU9wZXJhdGlvbihu
b2RlLT5jaGlsZDEoKSwgRWRnZSgpLCAxKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9
CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBWYWx1ZVRvSW50MzI6IHsKLSAgICAgICAgICAg
IGlmIChtX2dyYXBoW25vZGUuY2hpbGQxKCldLnNob3VsZFNwZWN1bGF0ZU51bWJlcigpCi0gICAg
ICAgICAgICAgICAgJiYgbm9kZS5tdXN0R2VuZXJhdGUoKSkgewotICAgICAgICAgICAgICAgIG5v
ZGUuY2xlYXJGbGFncyhOb2RlTXVzdEdlbmVyYXRlKTsKLSAgICAgICAgICAgICAgICBtX2dyYXBo
LmRlcmVmKG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS0+
c2hvdWxkU3BlY3VsYXRlTnVtYmVyKCkKKyAgICAgICAgICAgICAgICAmJiBub2RlLT5tdXN0R2Vu
ZXJhdGUoKSkgeworICAgICAgICAgICAgICAgIG5vZGUtPmNsZWFyRmxhZ3MoTm9kZU11c3RHZW5l
cmF0ZSk7CisgICAgICAgICAgICAgICAgbV9ncmFwaC5kZXJlZihub2RlKTsKICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkBAIC0yMDUsOCArMTk1LDggQEAgcHJp
dmF0ZToKICAgICAgICAgY2FzZSBCaXRSU2hpZnQ6CiAgICAgICAgIGNhc2UgQml0TFNoaWZ0Ogog
ICAgICAgICBjYXNlIEJpdFVSU2hpZnQ6IHsKLSAgICAgICAgICAgIGZpeEludEVkZ2Uobm9kZS5j
aGlsZHJlbi5jaGlsZDEoKSk7Ci0gICAgICAgICAgICBmaXhJbnRFZGdlKG5vZGUuY2hpbGRyZW4u
Y2hpbGQyKCkpOworICAgICAgICAgICAgZml4SW50RWRnZShub2RlLT5jaGlsZHJlbi5jaGlsZDEo
KSk7CisgICAgICAgICAgICBmaXhJbnRFZGdlKG5vZGUtPmNoaWxkcmVuLmNoaWxkMigpKTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKQEAgLTIxNiw5ICsyMDYs
OSBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIENvbXBhcmVHcmVhdGVyOgogICAgICAgICBjYXNl
IENvbXBhcmVHcmVhdGVyRXE6CiAgICAgICAgIGNhc2UgQ29tcGFyZVN0cmljdEVxOiB7Ci0gICAg
ICAgICAgICBpZiAoTm9kZTo6c2hvdWxkU3BlY3VsYXRlSW50ZWdlcihtX2dyYXBoW25vZGUuY2hp
bGQxKCldLCBtX2dyYXBoW25vZGUuY2hpbGQyKCldKSkKKyAgICAgICAgICAgIGlmIChOb2RlOjpz
aG91bGRTcGVjdWxhdGVJbnRlZ2VyKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgbm9kZS0+Y2hpbGQy
KCkubm9kZSgpKSkKICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGlmICghTm9k
ZTo6c2hvdWxkU3BlY3VsYXRlTnVtYmVyKG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0sIG1fZ3JhcGhb
bm9kZS5jaGlsZDIoKV0pKQorICAgICAgICAgICAgaWYgKCFOb2RlOjpzaG91bGRTcGVjdWxhdGVO
dW1iZXIobm9kZS0+Y2hpbGQxKCkubm9kZSgpLCBub2RlLT5jaGlsZDIoKS5ub2RlKCkpKQogICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgZml4RG91YmxlRWRnZSgwKTsKICAgICAg
ICAgICAgIGZpeERvdWJsZUVkZ2UoMSk7CkBAIC0yMjYsNDMgKzIxNiw0MSBAQCBwcml2YXRlOgog
ICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBMb2dpY2FsTm90OiB7Ci0gICAg
ICAgICAgICBpZiAobV9ncmFwaFtub2RlLmNoaWxkMSgpXS5zaG91bGRTcGVjdWxhdGVJbnRlZ2Vy
KCkpCisgICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZUludGVn
ZXIoKSkKICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGlmICghbV9ncmFwaFtu
b2RlLmNoaWxkMSgpXS5zaG91bGRTcGVjdWxhdGVOdW1iZXIoKSkKKyAgICAgICAgICAgIGlmICgh
bm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZU51bWJlcigpKQogICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgZml4RG91YmxlRWRnZSgwKTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBCcmFuY2g6IHsKLSAgICAg
ICAgICAgIGlmICghbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5zaG91bGRTcGVjdWxhdGVJbnRlZ2Vy
KCkKLSAgICAgICAgICAgICAgICAmJiBtX2dyYXBoW25vZGUuY2hpbGQxKCldLnNob3VsZFNwZWN1
bGF0ZU51bWJlcigpKQorICAgICAgICAgICAgaWYgKCFub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3Bl
Y3VsYXRlSW50ZWdlcigpCisgICAgICAgICAgICAgICAgJiYgbm9kZS0+Y2hpbGQxKCktPnNob3Vs
ZFNwZWN1bGF0ZU51bWJlcigpKQogICAgICAgICAgICAgICAgIGZpeERvdWJsZUVkZ2UoMCk7CiAK
LSAgICAgICAgICAgIE5vZGUmIG15Tm9kZSA9IG1fZ3JhcGhbbV9jb21waWxlSW5kZXhdOyAvLyBy
ZWxvYWQgYmVjYXVzZSB0aGUgZ3JhcGggbWF5IGhhdmUgY2hhbmdlZAotICAgICAgICAgICAgRWRn
ZSBsb2dpY2FsTm90RWRnZSA9IG15Tm9kZS5jaGlsZDEoKTsKLSAgICAgICAgICAgIE5vZGUmIGxv
Z2ljYWxOb3QgPSBtX2dyYXBoW2xvZ2ljYWxOb3RFZGdlXTsKLSAgICAgICAgICAgIGlmIChsb2dp
Y2FsTm90Lm9wKCkgPT0gTG9naWNhbE5vdAotICAgICAgICAgICAgICAgICYmIGxvZ2ljYWxOb3Qu
YWRqdXN0ZWRSZWZDb3VudCgpID09IDEpIHsKLSAgICAgICAgICAgICAgICBFZGdlIG5ld0NoaWxk
RWRnZSA9IGxvZ2ljYWxOb3QuY2hpbGQxKCk7Ci0gICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGhb
bmV3Q2hpbGRFZGdlXS5oYXNCb29sZWFuUmVzdWx0KCkpIHsKKyAgICAgICAgICAgIE5vZGUqIGxv
Z2ljYWxOb3QgPSBub2RlLT5jaGlsZDEoKS5ub2RlKCk7CisgICAgICAgICAgICBpZiAobG9naWNh
bE5vdC0+b3AoKSA9PSBMb2dpY2FsTm90CisgICAgICAgICAgICAgICAgJiYgbG9naWNhbE5vdC0+
YWRqdXN0ZWRSZWZDb3VudCgpID09IDEpIHsKKyAgICAgICAgICAgICAgICBFZGdlIG5ld0NoaWxk
RWRnZSA9IGxvZ2ljYWxOb3QtPmNoaWxkMSgpOworICAgICAgICAgICAgICAgIGlmIChuZXdDaGls
ZEVkZ2UtPmhhc0Jvb2xlYW5SZXN1bHQoKSkgewogICAgICAgICAgICAgICAgICAgICBtX2dyYXBo
LnJlZihuZXdDaGlsZEVkZ2UpOwotICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLmRlcmVmKGxv
Z2ljYWxOb3RFZGdlKTsKKyAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5kZXJlZihsb2dpY2Fs
Tm90KTsKICAgICAgICAgICAgICAgICAgICAgbXlOb2RlLmNoaWxkcmVuLnNldENoaWxkMShuZXdD
aGlsZEVkZ2UpOwogICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgQmxv
Y2tJbmRleCB0b0JlVGFrZW4gPSBteU5vZGUubm90VGFrZW5CbG9ja0luZGV4KCk7Ci0gICAgICAg
ICAgICAgICAgICAgIEJsb2NrSW5kZXggdG9CZU5vdFRha2VuID0gbXlOb2RlLnRha2VuQmxvY2tJ
bmRleCgpOwotICAgICAgICAgICAgICAgICAgICBteU5vZGUuc2V0VGFrZW5CbG9ja0luZGV4KHRv
QmVUYWtlbik7Ci0gICAgICAgICAgICAgICAgICAgIG15Tm9kZS5zZXROb3RUYWtlbkJsb2NrSW5k
ZXgodG9CZU5vdFRha2VuKTsKKyAgICAgICAgICAgICAgICAgICAgQmxvY2tJbmRleCB0b0JlVGFr
ZW4gPSBub2RlLT5ub3RUYWtlbkJsb2NrSW5kZXgoKTsKKyAgICAgICAgICAgICAgICAgICAgQmxv
Y2tJbmRleCB0b0JlTm90VGFrZW4gPSBub2RlLT50YWtlbkJsb2NrSW5kZXgoKTsKKyAgICAgICAg
ICAgICAgICAgICAgbm9kZS0+c2V0VGFrZW5CbG9ja0luZGV4KHRvQmVUYWtlbik7CisgICAgICAg
ICAgICAgICAgICAgIG5vZGUtPnNldE5vdFRha2VuQmxvY2tJbmRleCh0b0JlTm90VGFrZW4pOwog
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBTZXRMb2NhbDogewotICAgICAgICAg
ICAgaWYgKG5vZGUudmFyaWFibGVBY2Nlc3NEYXRhKCktPmlzQ2FwdHVyZWQoKSkKKyAgICAgICAg
ICAgIGlmIChub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+aXNDYXB0dXJlZCgpKQogICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgaWYgKCFub2RlLnZhcmlhYmxlQWNjZXNzRGF0
YSgpLT5zaG91bGRVc2VEb3VibGVGb3JtYXQoKSkKKyAgICAgICAgICAgIGlmICghbm9kZS0+dmFy
aWFibGVBY2Nlc3NEYXRhKCktPnNob3VsZFVzZURvdWJsZUZvcm1hdCgpKQogICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgZml4RG91YmxlRWRnZSgwKTsKICAgICAgICAgICAgIGJy
ZWFrOwpAQCAtMjcyLDcgKzI2MCw3IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgVmFsdWVBZGQ6
IHsKICAgICAgICAgICAgIGlmIChtX2dyYXBoLmFkZFNob3VsZFNwZWN1bGF0ZUludGVnZXIobm9k
ZSkpCiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBpZiAoIU5vZGU6OnNob3Vs
ZFNwZWN1bGF0ZU51bWJlckV4cGVjdGluZ0RlZmluZWQobV9ncmFwaFtub2RlLmNoaWxkMSgpXSwg
bV9ncmFwaFtub2RlLmNoaWxkMigpXSkpCisgICAgICAgICAgICBpZiAoIU5vZGU6OnNob3VsZFNw
ZWN1bGF0ZU51bWJlckV4cGVjdGluZ0RlZmluZWQobm9kZS0+Y2hpbGQxKCkubm9kZSgpLCBub2Rl
LT5jaGlsZDIoKS5ub2RlKCkpKQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
Zml4RG91YmxlRWRnZSgwKTsKICAgICAgICAgICAgIGZpeERvdWJsZUVkZ2UoMSk7CkBAIC0yODEs
NyArMjY5LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIAogICAgICAgICBjYXNlIEFyaXRoU3Vi
OiB7CiAgICAgICAgICAgICBpZiAobV9ncmFwaC5hZGRTaG91bGRTcGVjdWxhdGVJbnRlZ2VyKG5v
ZGUpCi0gICAgICAgICAgICAgICAgJiYgbm9kZS5jYW5TcGVjdWxhdGVJbnRlZ2VyKCkpCisgICAg
ICAgICAgICAgICAgJiYgbm9kZS0+Y2FuU3BlY3VsYXRlSW50ZWdlcigpKQogICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgZml4RG91YmxlRWRnZSgwKTsKICAgICAgICAgICAgIGZp
eERvdWJsZUVkZ2UoMSk7CkBAIC0yOTgsOCArMjg2LDggQEAgcHJpdmF0ZToKICAgICAgICAgY2Fz
ZSBBcml0aE1pbjoKICAgICAgICAgY2FzZSBBcml0aE1heDoKICAgICAgICAgY2FzZSBBcml0aE1v
ZDogewotICAgICAgICAgICAgaWYgKE5vZGU6OnNob3VsZFNwZWN1bGF0ZUludGVnZXJGb3JBcml0
aG1ldGljKG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0sIG1fZ3JhcGhbbm9kZS5jaGlsZDIoKV0pCi0g
ICAgICAgICAgICAgICAgJiYgbm9kZS5jYW5TcGVjdWxhdGVJbnRlZ2VyKCkpCisgICAgICAgICAg
ICBpZiAoTm9kZTo6c2hvdWxkU3BlY3VsYXRlSW50ZWdlckZvckFyaXRobWV0aWMobm9kZS0+Y2hp
bGQxKCkubm9kZSgpLCBub2RlLT5jaGlsZDIoKS5ub2RlKCkpCisgICAgICAgICAgICAgICAgJiYg
bm9kZS0+Y2FuU3BlY3VsYXRlSW50ZWdlcigpKQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgZml4RG91YmxlRWRnZSgwKTsKICAgICAgICAgICAgIGZpeERvdWJsZUVkZ2UoMSk7
CkBAIC0zMTUsOCArMzAzLDggQEAgcHJpdmF0ZToKICAgICAgICAgfQogCiAgICAgICAgIGNhc2Ug
QXJpdGhEaXY6IHsKLSAgICAgICAgICAgIGlmIChOb2RlOjpzaG91bGRTcGVjdWxhdGVJbnRlZ2Vy
Rm9yQXJpdGhtZXRpYyhtX2dyYXBoW25vZGUuY2hpbGQxKCldLCBtX2dyYXBoW25vZGUuY2hpbGQy
KCldKQotICAgICAgICAgICAgICAgICYmIG5vZGUuY2FuU3BlY3VsYXRlSW50ZWdlcigpKSB7Cisg
ICAgICAgICAgICBpZiAoTm9kZTo6c2hvdWxkU3BlY3VsYXRlSW50ZWdlckZvckFyaXRobWV0aWMo
bm9kZS0+Y2hpbGQxKCkubm9kZSgpLCBub2RlLT5jaGlsZDIoKS5ub2RlKCkpCisgICAgICAgICAg
ICAgICAgJiYgbm9kZS0+Y2FuU3BlY3VsYXRlSW50ZWdlcigpKSB7CiAgICAgICAgICAgICAgICAg
aWYgKGlzWDg2KCkpCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAg
IGluamVjdEludDMyVG9Eb3VibGVOb2RlKDApOwpAQCAtMzI0LDEyICszMTIsMTEgQEAgcHJpdmF0
ZToKIAogICAgICAgICAgICAgICAgIC8vIFdlIGRvbid0IG5lZWQgdG8gZG8gcmVmJ2luZyBvbiB0
aGUgY2hpbGRyZW4gYmVjYXVzZSB3ZSdyZSBzdGVhbGluZyB0aGVtIGZyb20KICAgICAgICAgICAg
ICAgICAvLyB0aGUgb3JpZ2luYWwgZGl2aXNpb24uCi0gICAgICAgICAgICAgICAgTm9kZUluZGV4
IG5ld0RpdmlzaW9uSW5kZXggPSBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAotICAgICAgICAg
ICAgICAgICAgICBtX2luZGV4SW5CbG9jaywgRG9udFJlZkNoaWxkcmVuLCBSZWZOb2RlLCBTcGVj
RG91YmxlLCBtX2dyYXBoW21fY29tcGlsZUluZGV4XSk7Ci0gICAgICAgICAgICAgICAgCi0gICAg
ICAgICAgICAgICAgbV9ncmFwaFttX2NvbXBpbGVJbmRleF0uc2V0T3AoRG91YmxlQXNJbnQzMik7
Ci0gICAgICAgICAgICAgICAgbV9ncmFwaFttX2NvbXBpbGVJbmRleF0uY2hpbGRyZW4uaW5pdGlh
bGl6ZShFZGdlKG5ld0RpdmlzaW9uSW5kZXgsIERvdWJsZVVzZSksIEVkZ2UoKSwgRWRnZSgpKTsK
KyAgICAgICAgICAgICAgICBOb2RlKiBuZXdEaXZpc2lvbiA9IG1faW5zZXJ0aW9uU2V0Lmluc2Vy
dE5vZGUoCisgICAgICAgICAgICAgICAgICAgIG1faW5kZXhJbkJsb2NrLCBEb250UmVmQ2hpbGRy
ZW4sIFJlZk5vZGUsIFNwZWNEb3VibGUsIG5vZGUpOwogICAgICAgICAgICAgICAgIAorICAgICAg
ICAgICAgICAgIG5vZGUtPnNldE9wKERvdWJsZUFzSW50MzIpOworICAgICAgICAgICAgICAgIG5v
ZGUtPmNoaWxkcmVuLmluaXRpYWxpemUoRWRnZShuZXdEaXZpc2lvbiwgRG91YmxlVXNlKSwgRWRn
ZSgpLCBFZGdlKCkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAg
ICAgICAgICAgZml4RG91YmxlRWRnZSgwKTsKQEAgLTMzOCw4ICszMjUsOCBAQCBwcml2YXRlOgog
ICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBBcml0aEFiczogewotICAgICAg
ICAgICAgaWYgKG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0uc2hvdWxkU3BlY3VsYXRlSW50ZWdlckZv
ckFyaXRobWV0aWMoKQotICAgICAgICAgICAgICAgICYmIG5vZGUuY2FuU3BlY3VsYXRlSW50ZWdl
cigpKQorICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVJbnRl
Z2VyRm9yQXJpdGhtZXRpYygpCisgICAgICAgICAgICAgICAgJiYgbm9kZS0+Y2FuU3BlY3VsYXRl
SW50ZWdlcigpKQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgZml4RG91Ymxl
RWRnZSgwKTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMzU4LDE1ICszNDUsMTMgQEAgcHJpdmF0
ZToKIAogICAgICAgICAgICAgbm9kZS5zZXRBcnJheU1vZGUoCiAgICAgICAgICAgICAgICAgbm9k
ZS5hcnJheU1vZGUoKS5yZWZpbmUoCi0gICAgICAgICAgICAgICAgICAgIG1fZ3JhcGhbY2hpbGQx
XS5wcmVkaWN0aW9uKCksCi0gICAgICAgICAgICAgICAgICAgIG1fZ3JhcGhbY2hpbGQyXS5wcmVk
aWN0aW9uKCksCi0gICAgICAgICAgICAgICAgICAgIG1fZ3JhcGhbY2hpbGQzXS5wcmVkaWN0aW9u
KCkpKTsKKyAgICAgICAgICAgICAgICAgICAgY2hpbGQxLT5wcmVkaWN0aW9uKCksCisgICAgICAg
ICAgICAgICAgICAgIGNoaWxkMi0+cHJlZGljdGlvbigpLAorICAgICAgICAgICAgICAgICAgICBj
aGlsZDMtPnByZWRpY3Rpb24oKSkpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBibGVzc0Fy
cmF5T3BlcmF0aW9uKGNoaWxkMSwgY2hpbGQyLCAzKTsKICAgICAgICAgICAgIAotICAgICAgICAg
ICAgTm9kZSogbm9kZVB0ciA9ICZtX2dyYXBoW21fY29tcGlsZUluZGV4XTsKLSAgICAgICAgICAg
IAotICAgICAgICAgICAgc3dpdGNoIChub2RlUHRyLT5hcnJheU1vZGUoKS5tb2RlRm9yUHV0KCku
dHlwZSgpKSB7CisgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPmFycmF5TW9kZSgpLm1vZGVGb3JQ
dXQoKS50eXBlKCkpIHsKICAgICAgICAgICAgIGNhc2UgQXJyYXk6OkRvdWJsZToKICAgICAgICAg
ICAgICAgICBmaXhEb3VibGVFZGdlKDIpOwogICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMzc3
LDcgKzM2Miw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBjYXNlIEFycmF5OjpVaW50OENsYW1w
ZWRBcnJheToKICAgICAgICAgICAgIGNhc2UgQXJyYXk6OlVpbnQxNkFycmF5OgogICAgICAgICAg
ICAgY2FzZSBBcnJheTo6VWludDMyQXJyYXk6Ci0gICAgICAgICAgICAgICAgaWYgKCFtX2dyYXBo
W2NoaWxkM10uc2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKQorICAgICAgICAgICAgICAgIGlmICgh
Y2hpbGQzLT5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpCiAgICAgICAgICAgICAgICAgICAgIGZp
eERvdWJsZUVkZ2UoMik7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNl
IEFycmF5OjpGbG9hdDMyQXJyYXk6CkBAIC0zOTIsMTEgKzM3NywxMSBAQCBwcml2YXRlOgogICAg
ICAgICAgICAgCiAgICAgICAgIGNhc2UgTmV3QXJyYXk6IHsKICAgICAgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IG1fZ3JhcGgudmFyQXJnTnVtQ2hpbGRyZW4obm9kZSk7IGktLTspIHsKLSAgICAg
ICAgICAgICAgICBub2RlLnNldEluZGV4aW5nVHlwZSgKKyAgICAgICAgICAgICAgICBub2RlLT5z
ZXRJbmRleGluZ1R5cGUoCiAgICAgICAgICAgICAgICAgICAgIGxlYXN0VXBwZXJCb3VuZE9mSW5k
ZXhpbmdUeXBlQW5kVHlwZSgKLSAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUuaW5kZXhpbmdU
eXBlKCksIG1fZ3JhcGhbbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCBpKV0ucHJlZGljdGlvbigp
KSk7CisgICAgICAgICAgICAgICAgICAgICAgICBub2RlLmluZGV4aW5nVHlwZSgpLCBtX2dyYXBo
LnZhckFyZ0NoaWxkKG5vZGUsIGkpLT5wcmVkaWN0aW9uKCkpKTsKICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIGlmIChub2RlLmluZGV4aW5nVHlwZSgpID09IEFycmF5V2l0aERvdWJsZSkgewor
ICAgICAgICAgICAgaWYgKG5vZGUtPmluZGV4aW5nVHlwZSgpID09IEFycmF5V2l0aERvdWJsZSkg
ewogICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1fZ3JhcGgudmFyQXJnTnVtQ2hp
bGRyZW4obm9kZSk7IGktLTspCiAgICAgICAgICAgICAgICAgICAgIGZpeERvdWJsZUVkZ2UoaSk7
CiAgICAgICAgICAgICB9CkBAIC00MDgsMTYgKzM5MywxNSBAQCBwcml2YXRlOgogICAgICAgICB9
CiAKICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCi0gICAgICAgIE5v
ZGUqIG5vZGVQdHIgPSAmbV9ncmFwaFttX2NvbXBpbGVJbmRleF07Ci0gICAgICAgIGlmICghKG5v
ZGVQdHItPmZsYWdzKCkgJiBOb2RlSGFzVmFyQXJncykpIHsKKyAgICAgICAgaWYgKCEobm9kZS0+
ZmxhZ3MoKSAmIE5vZGVIYXNWYXJBcmdzKSkgewogICAgICAgICAgICAgZGF0YUxvZ0YoIm5ldyBj
aGlsZHJlbjogIik7Ci0gICAgICAgICAgICBub2RlUHRyLT5kdW1wQ2hpbGRyZW4oV1RGOjpkYXRh
RmlsZSgpKTsKKyAgICAgICAgICAgIG5vZGUtPmR1bXBDaGlsZHJlbihXVEY6OmRhdGFGaWxlKCkp
OwogICAgICAgICB9CiAgICAgICAgIGRhdGFMb2dGKCJcbiIpOwogI2VuZGlmCiAgICAgfQogICAg
IAotICAgIE5vZGVJbmRleCBjaGVja0FycmF5KEFycmF5TW9kZSBhcnJheU1vZGUsIENvZGVPcmln
aW4gY29kZU9yaWdpbiwgTm9kZUluZGV4IGFycmF5LCBOb2RlSW5kZXggaW5kZXgsIGJvb2wgKCpz
dG9yYWdlQ2hlY2spKGNvbnN0IEFycmF5TW9kZSYpID0gY2FuQ1NFU3RvcmFnZSwgYm9vbCBzaG91
bGRHZW5lcmF0ZSA9IHRydWUpCisgICAgTm9kZSogY2hlY2tBcnJheShBcnJheU1vZGUgYXJyYXlN
b2RlLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIE5vZGUqIGFycmF5LCBOb2RlKiBpbmRleCwgYm9v
bCAoKnN0b3JhZ2VDaGVjaykoY29uc3QgQXJyYXlNb2RlJikgPSBjYW5DU0VTdG9yYWdlLCBib29s
IHNob3VsZEdlbmVyYXRlID0gdHJ1ZSkKICAgICB7CiAgICAgICAgIEFTU0VSVChhcnJheU1vZGUu
aXNTcGVjaWZpYygpKTsKICAgICAgICAgCkBAIC00MjgsMTEgKzQxMiwxMSBAQCBwcml2YXRlOgog
ICAgICAgICAgICAgICAgIGlmIChtX2luZGV4SW5CbG9jayA+IDApIHsKICAgICAgICAgICAgICAg
ICAgICAgLy8gSWYgdGhlIHByZXZpb3VzIG5vZGUgd2FzIGEgQ2hlY2tTdHJ1Y3R1cmUgaW5zZXJ0
ZWQgYmVjYXVzZSBvZiBzdHVmZgogICAgICAgICAgICAgICAgICAgICAvLyB0aGF0IHRoZSBhcnJh
eSBwcm9maWxlIHRvbGQgdXMsIHRoZW4gcmVtb3ZlIGl0LgotICAgICAgICAgICAgICAgICAgICBO
b2RlJiBwcmV2aW91c05vZGUgPSBtX2dyYXBoW21fYmxvY2stPmF0KG1faW5kZXhJbkJsb2NrIC0g
MSldOwotICAgICAgICAgICAgICAgICAgICBpZiAocHJldmlvdXNOb2RlLm9wKCkgPT0gQ2hlY2tT
dHJ1Y3R1cmUKLSAgICAgICAgICAgICAgICAgICAgICAgICYmIHByZXZpb3VzTm9kZS5jaGlsZDEo
KSA9PSBhcnJheQotICAgICAgICAgICAgICAgICAgICAgICAgJiYgcHJldmlvdXNOb2RlLmNvZGVP
cmlnaW4gPT0gY29kZU9yaWdpbikKLSAgICAgICAgICAgICAgICAgICAgICAgIHByZXZpb3VzTm9k
ZS5zZXRPcEFuZERlZmF1bHRGbGFncyhQaGFudG9tKTsKKyAgICAgICAgICAgICAgICAgICAgTm9k
ZSogcHJldmlvdXNOb2RlID0gYmxvY2stPmF0KG1faW5kZXhJbkJsb2NrIC0gMSk7CisgICAgICAg
ICAgICAgICAgICAgIGlmIChwcmV2aW91c05vZGUtPm9wKCkgPT0gQ2hlY2tTdHJ1Y3R1cmUKKyAg
ICAgICAgICAgICAgICAgICAgICAgICYmIHByZXZpb3VzTm9kZS0+Y2hpbGQxKCkgPT0gYXJyYXkK
KyAgICAgICAgICAgICAgICAgICAgICAgICYmIHByZXZpb3VzTm9kZS0+Y29kZU9yaWdpbiA9PSBj
b2RlT3JpZ2luKQorICAgICAgICAgICAgICAgICAgICAgICAgcHJldmlvdXNOb2RlLT5zZXRPcEFu
ZERlZmF1bHRGbGFncyhQaGFudG9tKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICAgCiAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKQEAgLTQ1Niw3
ICs0NDAsNyBAQCBwcml2YXRlOgogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBpZiAoIXN0
b3JhZ2VDaGVjayhhcnJheU1vZGUpKQotICAgICAgICAgICAgcmV0dXJuIE5vTm9kZTsKKyAgICAg
ICAgICAgIHJldHVybiAwOwogICAgICAgICAKICAgICAgICAgaWYgKGFycmF5TW9kZS51c2VzQnV0
dGVyZmx5KCkpIHsKICAgICAgICAgICAgIHJldHVybiBtX2luc2VydGlvblNldC5pbnNlcnROb2Rl
KApAQCAtNDc3LDE0ICs0NjEsMTQgQEAgcHJpdmF0ZToKICAgICB7CiAgICAgICAgIGlmIChtX2dy
YXBoLm1fZml4cG9pbnRTdGF0ZSA+IEJlZm9yZUZpeHBvaW50KQogICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICAgICAgCi0gICAgICAgIE5vZGUqIG5vZGVQdHIgPSAmbV9ncmFwaFttX2NvbXBp
bGVJbmRleF07CiAgICAgICAgIAotICAgICAgICBzd2l0Y2ggKG5vZGVQdHItPmFycmF5TW9kZSgp
LnR5cGUoKSkgeworICAgICAgICBOb2RlKiBub2RlID0gbV9jdXJyZW50Tm9kZTsKKyAgICAgICAg
CisgICAgICAgIHN3aXRjaCAobm9kZS0+YXJyYXlNb2RlKCkudHlwZSgpKSB7CiAgICAgICAgIGNh
c2UgQXJyYXk6OkZvcmNlRXhpdDogewogICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0
Tm9kZSgKICAgICAgICAgICAgICAgICBtX2luZGV4SW5CbG9jaywgRG9udFJlZkNoaWxkcmVuLCBE
b250UmVmTm9kZSwgU3BlY05vbmUsIEZvcmNlT1NSRXhpdCwKLSAgICAgICAgICAgICAgICBub2Rl
UHRyLT5jb2RlT3JpZ2luKTsKKyAgICAgICAgICAgICAgICBub2RlLT5jb2RlT3JpZ2luKTsKICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICAgICAgCkBAIC00OTcsMjYgKzQ4
MSwyNiBAQCBwcml2YXRlOgogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgCiAgICAg
ICAgIGRlZmF1bHQ6IHsKLSAgICAgICAgICAgIE5vZGVJbmRleCBzdG9yYWdlID0gY2hlY2tBcnJh
eShub2RlUHRyLT5hcnJheU1vZGUoKSwgbm9kZVB0ci0+Y29kZU9yaWdpbiwgYmFzZS5pbmRleCgp
LCBpbmRleC5pbmRleFVuY2hlY2tlZCgpKTsKLSAgICAgICAgICAgIGlmIChzdG9yYWdlID09IE5v
Tm9kZSkKKyAgICAgICAgICAgIE5vZGUqIHN0b3JhZ2UgPSBjaGVja0FycmF5KG5vZGUtPmFycmF5
TW9kZSgpLCBub2RlLT5jb2RlT3JpZ2luLCBiYXNlLm5vZGUoKSwgaW5kZXgubm9kZSgpKTsKKyAg
ICAgICAgICAgIGlmICghc3RvcmFnZSkKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
ICAgICAKLSAgICAgICAgICAgIG1fZ3JhcGguY2hpbGQobV9ncmFwaFttX2NvbXBpbGVJbmRleF0s
IHN0b3JhZ2VDaGlsZElkeCkgPSBFZGdlKHN0b3JhZ2UpOworICAgICAgICAgICAgbV9ncmFwaC5j
aGlsZChub2RlLCBzdG9yYWdlQ2hpbGRJZHgpID0gRWRnZShzdG9yYWdlKTsKICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgfSB9CiAgICAgfQogICAgIAogICAgIHZvaWQgZml4SW50RWRnZShF
ZGdlJiBlZGdlKQogICAgIHsKLSAgICAgICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhbZWRnZV07Ci0g
ICAgICAgIGlmIChub2RlLm9wKCkgIT0gVmFsdWVUb0ludDMyKQorICAgICAgICBOb2RlKiBub2Rl
ID0gZWRnZS5ub2RlKCk7CisgICAgICAgIGlmIChub2RlLT5vcCgpICE9IFZhbHVlVG9JbnQzMikK
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgCi0gICAgICAgIGlmICghbV9ncmFwaFtub2Rl
LmNoaWxkMSgpXS5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpCisgICAgICAgIGlmICghbm9kZS0+
Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKSkKICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgCiAgICAgICAgIEVkZ2Ugb2xkRWRnZSA9IGVkZ2U7Ci0gICAgICAgIEVkZ2UgbmV3
RWRnZSA9IG5vZGUuY2hpbGQxKCk7CisgICAgICAgIEVkZ2UgbmV3RWRnZSA9IG5vZGUtPmNoaWxk
MSgpOwogICAgICAgICAKICAgICAgICAgbV9ncmFwaC5yZWYobmV3RWRnZSk7CiAgICAgICAgIG1f
Z3JhcGguZGVyZWYob2xkRWRnZSk7CkBAIC01MjYsMTEgKzUxMCwxMSBAQCBwcml2YXRlOgogICAg
IAogICAgIHZvaWQgZml4RG91YmxlRWRnZSh1bnNpZ25lZCBjaGlsZEluZGV4KQogICAgIHsKLSAg
ICAgICAgTm9kZSYgc291cmNlID0gbV9ncmFwaFttX2NvbXBpbGVJbmRleF07CisgICAgICAgIE5v
ZGUqIHNvdXJjZSA9IG1fY3VycmVudE5vZGU7CiAgICAgICAgIEVkZ2UmIGVkZ2UgPSBtX2dyYXBo
LmNoaWxkKHNvdXJjZSwgY2hpbGRJbmRleCk7CiAgICAgICAgIAotICAgICAgICBpZiAobV9ncmFw
aFtlZGdlXS5wcmVkaWN0aW9uKCkgJiBTcGVjRG91YmxlKSB7Ci0gICAgICAgICAgICBlZGdlLnNl
dFVzZUtpbmQoRG91YmxlVXNlKTsKKyAgICAgICAgaWYgKGVkZ2UtPnByZWRpY3Rpb24oKSAmIFNw
ZWNEb3VibGUpIHsKKyAgICAgICAgICAgIGVkZ2UtPnNldFVzZUtpbmQoRG91YmxlVXNlKTsKICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICAKQEAgLTUzOSwyMyArNTIzLDIy
IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIGluamVjdEludDMyVG9Eb3VibGVOb2RlKHVuc2lnbmVk
IGNoaWxkSW5kZXgpCiAgICAgewotICAgICAgICBOb2RlSW5kZXggcmVzdWx0SW5kZXggPSBtX2lu
c2VydGlvblNldC5pbnNlcnROb2RlKAorICAgICAgICBOb2RlKiByZXN1bHQgPSBtX2luc2VydGlv
blNldC5pbnNlcnROb2RlKAogICAgICAgICAgICAgbV9pbmRleEluQmxvY2ssIERvbnRSZWZDaGls
ZHJlbiwgUmVmTm9kZSwgU3BlY0RvdWJsZSwgSW50MzJUb0RvdWJsZSwKLSAgICAgICAgICAgIG1f
Z3JhcGhbbV9jb21waWxlSW5kZXhdLmNvZGVPcmlnaW4sCi0gICAgICAgICAgICBtX2dyYXBoLmNo
aWxkKG1fZ3JhcGhbbV9jb21waWxlSW5kZXhdLCBjaGlsZEluZGV4KS5pbmRleCgpKTsKKyAgICAg
ICAgICAgIG1fY3VycmVudE5vZGUtPmNvZGVPcmlnaW4sIG1fZ3JhcGguY2hpbGQobV9jdXJyZW50
Tm9kZSwgY2hpbGRJbmRleCkubm9kZSgpKTsKICAgICAgICAgCiAjaWYgREZHX0VOQUJMRShERUJV
R19QUk9QQUdBVElPTl9WRVJCT1NFKQogICAgICAgICBkYXRhTG9nRigKICAgICAgICAgICAgICIo
cmVwbGFjaW5nIEAldS0+QCV1IHdpdGggQCV1LT5AJXUpICIsCi0gICAgICAgICAgICBtX2NvbXBp
bGVJbmRleCwgbV9ncmFwaC5jaGlsZChtX2dyYXBoW21fY29tcGlsZUluZGV4XSwgY2hpbGRJbmRl
eCkuaW5kZXgoKSwgbV9jb21waWxlSW5kZXgsIHJlc3VsdEluZGV4KTsKKyAgICAgICAgICAgIG1f
Y3VycmVudE5vZGUtPmluZGV4KCksIG1fZ3JhcGguY2hpbGQobV9jdXJyZW50Tm9kZSwgY2hpbGRJ
bmRleCktPmluZGV4KCksIG1fY3VycmVudE5vZGUtPmluZGV4KCksIHJlc3VsdC0+aW5kZXgoKSk7
CiAjZW5kaWYKIAotICAgICAgICBtX2dyYXBoLmNoaWxkKG1fZ3JhcGhbbV9jb21waWxlSW5kZXhd
LCBjaGlsZEluZGV4KSA9IEVkZ2UocmVzdWx0SW5kZXgsIERvdWJsZVVzZSk7CisgICAgICAgIG1f
Z3JhcGguY2hpbGQobV9jdXJyZW50Tm9kZSwgY2hpbGRJbmRleCkgPSBFZGdlKHJlc3VsdCwgRG91
YmxlVXNlKTsKICAgICB9CiAKICAgICBCYXNpY0Jsb2NrKiBtX2Jsb2NrOwogICAgIHVuc2lnbmVk
IG1faW5kZXhJbkJsb2NrOwotICAgIE5vZGVJbmRleCBtX2NvbXBpbGVJbmRleDsKKyAgICBOb2Rl
KiBtX2N1cnJlbnROb2RlOwogICAgIEluc2VydGlvblNldCBtX2luc2VydGlvblNldDsKIH07CiAg
ICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dlbmVyYXRpb25JbmZvLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHZW5lcmF0aW9uSW5m
by5oCShyZXZpc2lvbiAxNDA5MDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dl
bmVyYXRpb25JbmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDcgKzQ4LDcgQEAgbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBERkcgewogY2xhc3MgR2VuZXJhdGlvbkluZm8gewogcHVibGljOgog
ICAgIEdlbmVyYXRpb25JbmZvKCkKLSAgICAgICAgOiBtX25vZGVJbmRleChOb05vZGUpCisgICAg
ICAgIDogbV9ub2RlKDApCiAgICAgICAgICwgbV91c2VDb3VudCgwKQogICAgICAgICAsIG1fcmVn
aXN0ZXJGb3JtYXQoRGF0YUZvcm1hdE5vbmUpCiAgICAgICAgICwgbV9zcGlsbEZvcm1hdChEYXRh
Rm9ybWF0Tm9uZSkKQEAgLTU4LDkgKzU4LDkgQEAgcHVibGljOgogICAgIHsKICAgICB9CiAKLSAg
ICB2b2lkIGluaXRDb25zdGFudChOb2RlSW5kZXggbm9kZUluZGV4LCB1aW50MzJfdCB1c2VDb3Vu
dCkKKyAgICB2b2lkIGluaXRDb25zdGFudChOb2RlKiBub2RlLCB1aW50MzJfdCB1c2VDb3VudCkK
ICAgICB7Ci0gICAgICAgIG1fbm9kZUluZGV4ID0gbm9kZUluZGV4OworICAgICAgICBtX25vZGUg
PSBub2RlOwogICAgICAgICBtX3VzZUNvdW50ID0gdXNlQ291bnQ7CiAgICAgICAgIG1fcmVnaXN0
ZXJGb3JtYXQgPSBEYXRhRm9ybWF0Tm9uZTsKICAgICAgICAgbV9zcGlsbEZvcm1hdCA9IERhdGFG
b3JtYXROb25lOwpAQCAtNjksOSArNjksOSBAQCBwdWJsaWM6CiAgICAgICAgIG1faXNDb25zdGFu
dCA9IHRydWU7CiAgICAgICAgIEFTU0VSVChtX3VzZUNvdW50KTsKICAgICB9Ci0gICAgdm9pZCBp
bml0SW50ZWdlcihOb2RlSW5kZXggbm9kZUluZGV4LCB1aW50MzJfdCB1c2VDb3VudCwgR1BSUmVn
IGdwcikKKyAgICB2b2lkIGluaXRJbnRlZ2VyKE5vZGUqIG5vZGUsIHVpbnQzMl90IHVzZUNvdW50
LCBHUFJSZWcgZ3ByKQogICAgIHsKLSAgICAgICAgbV9ub2RlSW5kZXggPSBub2RlSW5kZXg7Cisg
ICAgICAgIG1fbm9kZSA9IG5vZGU7CiAgICAgICAgIG1fdXNlQ291bnQgPSB1c2VDb3VudDsKICAg
ICAgICAgbV9yZWdpc3RlckZvcm1hdCA9IERhdGFGb3JtYXRJbnRlZ2VyOwogICAgICAgICBtX3Nw
aWxsRm9ybWF0ID0gRGF0YUZvcm1hdE5vbmU7CkBAIC04MiwxMSArODIsMTEgQEAgcHVibGljOgog
ICAgICAgICBBU1NFUlQobV91c2VDb3VudCk7CiAgICAgfQogI2lmIFVTRShKU1ZBTFVFNjQpCi0g
ICAgdm9pZCBpbml0SlNWYWx1ZShOb2RlSW5kZXggbm9kZUluZGV4LCB1aW50MzJfdCB1c2VDb3Vu
dCwgR1BSUmVnIGdwciwgRGF0YUZvcm1hdCBmb3JtYXQgPSBEYXRhRm9ybWF0SlMpCisgICAgdm9p
ZCBpbml0SlNWYWx1ZShOb2RlKiBub2RlLCB1aW50MzJfdCB1c2VDb3VudCwgR1BSUmVnIGdwciwg
RGF0YUZvcm1hdCBmb3JtYXQgPSBEYXRhRm9ybWF0SlMpCiAgICAgewogICAgICAgICBBU1NFUlQo
Zm9ybWF0ICYgRGF0YUZvcm1hdEpTKTsKIAotICAgICAgICBtX25vZGVJbmRleCA9IG5vZGVJbmRl
eDsKKyAgICAgICAgbV9ub2RlID0gbm9kZTsKICAgICAgICAgbV91c2VDb3VudCA9IHVzZUNvdW50
OwogICAgICAgICBtX3JlZ2lzdGVyRm9ybWF0ID0gZm9ybWF0OwogICAgICAgICBtX3NwaWxsRm9y
bWF0ID0gRGF0YUZvcm1hdE5vbmU7CkBAIC05NywxMSArOTcsMTEgQEAgcHVibGljOgogICAgICAg
ICBBU1NFUlQobV91c2VDb3VudCk7CiAgICAgfQogI2VsaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAg
ICB2b2lkIGluaXRKU1ZhbHVlKE5vZGVJbmRleCBub2RlSW5kZXgsIHVpbnQzMl90IHVzZUNvdW50
LCBHUFJSZWcgdGFnR1BSLCBHUFJSZWcgcGF5bG9hZEdQUiwgRGF0YUZvcm1hdCBmb3JtYXQgPSBE
YXRhRm9ybWF0SlMpCisgICAgdm9pZCBpbml0SlNWYWx1ZShOb2RlKiBub2RlLCB1aW50MzJfdCB1
c2VDb3VudCwgR1BSUmVnIHRhZ0dQUiwgR1BSUmVnIHBheWxvYWRHUFIsIERhdGFGb3JtYXQgZm9y
bWF0ID0gRGF0YUZvcm1hdEpTKQogICAgIHsKICAgICAgICAgQVNTRVJUKGZvcm1hdCAmIERhdGFG
b3JtYXRKUyk7CiAKLSAgICAgICAgbV9ub2RlSW5kZXggPSBub2RlSW5kZXg7CisgICAgICAgIG1f
bm9kZSA9IG5vZGU7CiAgICAgICAgIG1fdXNlQ291bnQgPSB1c2VDb3VudDsKICAgICAgICAgbV9y
ZWdpc3RlckZvcm1hdCA9IGZvcm1hdDsKICAgICAgICAgbV9zcGlsbEZvcm1hdCA9IERhdGFGb3Jt
YXROb25lOwpAQCAtMTEzLDkgKzExMyw5IEBAIHB1YmxpYzoKICAgICAgICAgQVNTRVJUKG1fdXNl
Q291bnQpOwogICAgIH0KICNlbmRpZgotICAgIHZvaWQgaW5pdENlbGwoTm9kZUluZGV4IG5vZGVJ
bmRleCwgdWludDMyX3QgdXNlQ291bnQsIEdQUlJlZyBncHIpCisgICAgdm9pZCBpbml0Q2VsbChO
b2RlKiBub2RlLCB1aW50MzJfdCB1c2VDb3VudCwgR1BSUmVnIGdwcikKICAgICB7Ci0gICAgICAg
IG1fbm9kZUluZGV4ID0gbm9kZUluZGV4OworICAgICAgICBtX25vZGUgPSBub2RlOwogICAgICAg
ICBtX3VzZUNvdW50ID0gdXNlQ291bnQ7CiAgICAgICAgIG1fcmVnaXN0ZXJGb3JtYXQgPSBEYXRh
Rm9ybWF0Q2VsbDsKICAgICAgICAgbV9zcGlsbEZvcm1hdCA9IERhdGFGb3JtYXROb25lOwpAQCAt
MTI1LDkgKzEyNSw5IEBAIHB1YmxpYzoKICAgICAgICAgbV9pc0NvbnN0YW50ID0gZmFsc2U7CiAg
ICAgICAgIEFTU0VSVChtX3VzZUNvdW50KTsKICAgICB9Ci0gICAgdm9pZCBpbml0Qm9vbGVhbihO
b2RlSW5kZXggbm9kZUluZGV4LCB1aW50MzJfdCB1c2VDb3VudCwgR1BSUmVnIGdwcikKKyAgICB2
b2lkIGluaXRCb29sZWFuKE5vZGUqIG5vZGUsIHVpbnQzMl90IHVzZUNvdW50LCBHUFJSZWcgZ3By
KQogICAgIHsKLSAgICAgICAgbV9ub2RlSW5kZXggPSBub2RlSW5kZXg7CisgICAgICAgIG1fbm9k
ZSA9IG5vZGU7CiAgICAgICAgIG1fdXNlQ291bnQgPSB1c2VDb3VudDsKICAgICAgICAgbV9yZWdp
c3RlckZvcm1hdCA9IERhdGFGb3JtYXRCb29sZWFuOwogICAgICAgICBtX3NwaWxsRm9ybWF0ID0g
RGF0YUZvcm1hdE5vbmU7CkBAIC0xMzcsMTAgKzEzNywxMCBAQCBwdWJsaWM6CiAgICAgICAgIG1f
aXNDb25zdGFudCA9IGZhbHNlOwogICAgICAgICBBU1NFUlQobV91c2VDb3VudCk7CiAgICAgfQot
ICAgIHZvaWQgaW5pdERvdWJsZShOb2RlSW5kZXggbm9kZUluZGV4LCB1aW50MzJfdCB1c2VDb3Vu
dCwgRlBSUmVnIGZwcikKKyAgICB2b2lkIGluaXREb3VibGUoTm9kZSogbm9kZSwgdWludDMyX3Qg
dXNlQ291bnQsIEZQUlJlZyBmcHIpCiAgICAgewogICAgICAgICBBU1NFUlQoZnByICE9IEludmFs
aWRGUFJSZWcpOwotICAgICAgICBtX25vZGVJbmRleCA9IG5vZGVJbmRleDsKKyAgICAgICAgbV9u
b2RlID0gbm9kZTsKICAgICAgICAgbV91c2VDb3VudCA9IHVzZUNvdW50OwogICAgICAgICBtX3Jl
Z2lzdGVyRm9ybWF0ID0gRGF0YUZvcm1hdERvdWJsZTsKICAgICAgICAgbV9zcGlsbEZvcm1hdCA9
IERhdGFGb3JtYXROb25lOwpAQCAtMTUwLDkgKzE1MCw5IEBAIHB1YmxpYzoKICAgICAgICAgbV9p
c0NvbnN0YW50ID0gZmFsc2U7CiAgICAgICAgIEFTU0VSVChtX3VzZUNvdW50KTsKICAgICB9Ci0g
ICAgdm9pZCBpbml0U3RvcmFnZShOb2RlSW5kZXggbm9kZUluZGV4LCB1aW50MzJfdCB1c2VDb3Vu
dCwgR1BSUmVnIGdwcikKKyAgICB2b2lkIGluaXRTdG9yYWdlKE5vZGUqIG5vZGUsIHVpbnQzMl90
IHVzZUNvdW50LCBHUFJSZWcgZ3ByKQogICAgIHsKLSAgICAgICAgbV9ub2RlSW5kZXggPSBub2Rl
SW5kZXg7CisgICAgICAgIG1fbm9kZSA9IG5vZGU7CiAgICAgICAgIG1fdXNlQ291bnQgPSB1c2VD
b3VudDsKICAgICAgICAgbV9yZWdpc3RlckZvcm1hdCA9IERhdGFGb3JtYXRTdG9yYWdlOwogICAg
ICAgICBtX3NwaWxsRm9ybWF0ID0gRGF0YUZvcm1hdE5vbmU7CkBAIC0xNjMsMTQgKzE2MywxNCBA
QCBwdWJsaWM6CiAgICAgICAgIEFTU0VSVChtX3VzZUNvdW50KTsKICAgICB9CiAKLSAgICAvLyBH
ZXQgdGhlIGluZGV4IG9mIHRoZSBub2RlIHRoYXQgcHJvZHVjZWQgdGhpcyB2YWx1ZS4KLSAgICBO
b2RlSW5kZXggbm9kZUluZGV4KCkgeyByZXR1cm4gbV9ub2RlSW5kZXg7IH0KKyAgICAvLyBHZXQg
dGhlIG5vZGUgdGhhdCBwcm9kdWNlZCB0aGlzIHZhbHVlLgorICAgIE5vZGUqIG5vZGUoKSB7IHJl
dHVybiBtX25vZGU7IH0KICAgICAKLSAgICB2b2lkIG5vdGljZU9TUkJpcnRoKFZhcmlhYmxlRXZl
bnRTdHJlYW0mIHN0cmVhbSwgTm9kZUluZGV4IG5vZGVJbmRleCwgVmlydHVhbFJlZ2lzdGVyIHZp
cnR1YWxSZWdpc3RlcikKKyAgICB2b2lkIG5vdGljZU9TUkJpcnRoKFZhcmlhYmxlRXZlbnRTdHJl
YW0mIHN0cmVhbSwgTm9kZSogbm9kZSwgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlcikK
ICAgICB7CiAgICAgICAgIGlmIChtX2lzQ29uc3RhbnQpCiAgICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIGlmIChtX25vZGVJbmRleCAhPSBub2RlSW5kZXgpCisgICAgICAgIGlmIChtX25vZGUg
IT0gbm9kZSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgaWYgKCFhbGl2ZSgpKQogICAg
ICAgICAgICAgcmV0dXJuOwpAQCAtMTk0LDggKzE5NCw4IEBAIHB1YmxpYzoKICAgICAgICAgYm9v
bCByZXN1bHQgPSAhLS1tX3VzZUNvdW50OwogICAgICAgICAKICAgICAgICAgaWYgKHJlc3VsdCAm
JiBtX2Jvcm5Gb3JPU1IpIHsKLSAgICAgICAgICAgIEFTU0VSVChtX25vZGVJbmRleCAhPSBOb05v
ZGUpOwotICAgICAgICAgICAgc3RyZWFtLmFwcGVuZEFuZExvZyhWYXJpYWJsZUV2ZW50OjpkZWF0
aChNaW5pZmllZElEKG1fbm9kZUluZGV4KSkpOworICAgICAgICAgICAgQVNTRVJUKG1fbm9kZSk7
CisgICAgICAgICAgICBzdHJlYW0uYXBwZW5kQW5kTG9nKFZhcmlhYmxlRXZlbnQ6OmRlYXRoKE1p
bmlmaWVkSUQobV9ub2RlKSkpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICByZXR1cm4g
cmVzdWx0OwpAQCAtMzgyLDI1ICszODIsMjUgQEAgcHJpdmF0ZToKICAgICAgICAgQVNTRVJUKG1f
Ym9ybkZvck9TUik7CiAgICAgICAgIAogICAgICAgICBpZiAobV9yZWdpc3RlckZvcm1hdCA9PSBE
YXRhRm9ybWF0RG91YmxlKSB7Ci0gICAgICAgICAgICBzdHJlYW0uYXBwZW5kQW5kTG9nKFZhcmlh
YmxlRXZlbnQ6OmZpbGxGUFIoa2luZCwgTWluaWZpZWRJRChtX25vZGVJbmRleCksIHUuZnByKSk7
CisgICAgICAgICAgICBzdHJlYW0uYXBwZW5kQW5kTG9nKFZhcmlhYmxlRXZlbnQ6OmZpbGxGUFIo
a2luZCwgTWluaWZpZWRJRChtX25vZGUpLCB1LmZwcikpOwogICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICB9CiAjaWYgVVNFKEpTVkFMVUUzMl82NCkKICAgICAgICAgaWYgKG1fcmVnaXN0ZXJG
b3JtYXQgJiBEYXRhRm9ybWF0SlMpIHsKLSAgICAgICAgICAgIHN0cmVhbS5hcHBlbmRBbmRMb2co
VmFyaWFibGVFdmVudDo6ZmlsbFBhaXIoa2luZCwgTWluaWZpZWRJRChtX25vZGVJbmRleCksIHUu
di50YWdHUFIsIHUudi5wYXlsb2FkR1BSKSk7CisgICAgICAgICAgICBzdHJlYW0uYXBwZW5kQW5k
TG9nKFZhcmlhYmxlRXZlbnQ6OmZpbGxQYWlyKGtpbmQsIE1pbmlmaWVkSUQobV9ub2RlKSwgdS52
LnRhZ0dQUiwgdS52LnBheWxvYWRHUFIpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
fQogI2VuZGlmCi0gICAgICAgIHN0cmVhbS5hcHBlbmRBbmRMb2coVmFyaWFibGVFdmVudDo6Zmls
bEdQUihraW5kLCBNaW5pZmllZElEKG1fbm9kZUluZGV4KSwgdS5ncHIsIG1fcmVnaXN0ZXJGb3Jt
YXQpKTsKKyAgICAgICAgc3RyZWFtLmFwcGVuZEFuZExvZyhWYXJpYWJsZUV2ZW50OjpmaWxsR1BS
KGtpbmQsIE1pbmlmaWVkSUQobV9ub2RlKSwgdS5ncHIsIG1fcmVnaXN0ZXJGb3JtYXQpKTsKICAg
ICB9CiAgICAgCiAgICAgdm9pZCBhcHBlbmRTcGlsbChWYXJpYWJsZUV2ZW50S2luZCBraW5kLCBW
YXJpYWJsZUV2ZW50U3RyZWFtJiBzdHJlYW0sIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0
ZXIpCiAgICAgewotICAgICAgICBzdHJlYW0uYXBwZW5kQW5kTG9nKFZhcmlhYmxlRXZlbnQ6OnNw
aWxsKGtpbmQsIE1pbmlmaWVkSUQobV9ub2RlSW5kZXgpLCB2aXJ0dWFsUmVnaXN0ZXIsIG1fc3Bp
bGxGb3JtYXQpKTsKKyAgICAgICAgc3RyZWFtLmFwcGVuZEFuZExvZyhWYXJpYWJsZUV2ZW50Ojpz
cGlsbChraW5kLCBNaW5pZmllZElEKG1fbm9kZSksIHZpcnR1YWxSZWdpc3RlciwgbV9zcGlsbEZv
cm1hdCkpOwogICAgIH0KICAgICAKLSAgICAvLyBUaGUgaW5kZXggb2YgdGhlIG5vZGUgd2hvc2Ug
cmVzdWx0IGlzIHN0b3JlZCBpbiB0aGlzIHZpcnR1YWwgcmVnaXN0ZXIuCi0gICAgTm9kZUluZGV4
IG1fbm9kZUluZGV4OworICAgIC8vIFRoZSBub2RlIHdob3NlIHJlc3VsdCBpcyBzdG9yZWQgaW4g
dGhpcyB2aXJ0dWFsIHJlZ2lzdGVyLgorICAgIE5vZGUqIG1fbm9kZTsKICAgICB1aW50MzJfdCBt
X3VzZUNvdW50OwogICAgIERhdGFGb3JtYXQgbV9yZWdpc3RlckZvcm1hdDsKICAgICBEYXRhRm9y
bWF0IG1fc3BpbGxGb3JtYXQ7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dy
YXBoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBo
LmNwcAkocmV2aXNpb24gMTQwOTA0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdH
cmFwaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDYgKzQ2LDcgQEAgR3JhcGg6OkdyYXBoKEpT
R2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgQwogICAgICwgbV9jb2RlQmxvY2soY29kZUJsb2NrKQog
ICAgICwgbV9jb21waWxhdGlvbihnbG9iYWxEYXRhLm1fcGVyQnl0ZWNvZGVQcm9maWxlciA/IGds
b2JhbERhdGEubV9wZXJCeXRlY29kZVByb2ZpbGVyLT5uZXdDb21waWxhdGlvbihjb2RlQmxvY2ss
IFByb2ZpbGVyOjpERkcpIDogMCkKICAgICAsIG1fcHJvZmlsZWRCbG9jayhjb2RlQmxvY2stPmFs
dGVybmF0aXZlKCkpCisgICAgLCBtX2FsbG9jYXRvcihnbG9iYWxEYXRhLm1fZGZnU3RhdGUtPm1f
YWxsb2NhdG9yKQogICAgICwgbV9oYXNBcmd1bWVudHMoZmFsc2UpCiAgICAgLCBtX29zckVudHJ5
Qnl0ZWNvZGVJbmRleChvc3JFbnRyeUJ5dGVjb2RlSW5kZXgpCiAgICAgLCBtX211c3RIYW5kbGVW
YWx1ZXMobXVzdEhhbmRsZVZhbHVlcykKQEAgLTU0LDYgKzU1LDExIEBAIEdyYXBoOjpHcmFwaChK
U0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEMKICAgICBBU1NFUlQobV9wcm9maWxlZEJsb2NrKTsK
IH0KIAorR3JhcGg6On5HcmFwaCgpCit7CisgICAgbV9hbGxvY2F0b3IuZnJlZUFsbCgpOworfQor
CiBjb25zdCBjaGFyICpHcmFwaDo6b3BOYW1lKE5vZGVUeXBlIG9wKQogewogICAgIHJldHVybiBk
ZmdPcE5hbWVzW29wXTsKQEAgLTY1LDE4ICs3MSwxNiBAQCBzdGF0aWMgdm9pZCBwcmludFdoaXRl
U3BhY2UoUHJpbnRTdHJlYW0mCiAgICAgICAgIG91dC5wcmludCgiICIpOwogfQogCi1ib29sIEdy
YXBoOjpkdW1wQ29kZU9yaWdpbihQcmludFN0cmVhbSYgb3V0LCBjb25zdCBjaGFyKiBwcmVmaXgs
IE5vZGVJbmRleCBwcmV2Tm9kZUluZGV4LCBOb2RlSW5kZXggbm9kZUluZGV4KQorYm9vbCBHcmFw
aDo6ZHVtcENvZGVPcmlnaW4oUHJpbnRTdHJlYW0mIG91dCwgY29uc3QgY2hhciogcHJlZml4LCBO
b2RlKiBwcmV2aW91c05vZGUsIE5vZGUqIGN1cnJlbnROb2RlKQogewotICAgIGlmIChwcmV2Tm9k
ZUluZGV4ID09IE5vTm9kZSkKKyAgICBpZiAoIXByZXZpb3VzTm9kZSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIAotICAgIE5vZGUmIGN1cnJlbnROb2RlID0gYXQobm9kZUluZGV4KTsKLSAg
ICBOb2RlJiBwcmV2aW91c05vZGUgPSBhdChwcmV2Tm9kZUluZGV4KTsKLSAgICBpZiAocHJldmlv
dXNOb2RlLmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lID09IGN1cnJlbnROb2RlLmNvZGVPcmln
aW4uaW5saW5lQ2FsbEZyYW1lKQorICAgIGlmIChwcmV2aW91c05vZGUtPmNvZGVPcmlnaW4uaW5s
aW5lQ2FsbEZyYW1lID09IGN1cnJlbnROb2RlLT5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAotICAgIFZlY3RvcjxDb2RlT3JpZ2luPiBwcmV2
aW91c0lubGluZVN0YWNrID0gcHJldmlvdXNOb2RlLmNvZGVPcmlnaW4uaW5saW5lU3RhY2soKTsK
LSAgICBWZWN0b3I8Q29kZU9yaWdpbj4gY3VycmVudElubGluZVN0YWNrID0gY3VycmVudE5vZGUu
Y29kZU9yaWdpbi5pbmxpbmVTdGFjaygpOworICAgIFZlY3RvcjxDb2RlT3JpZ2luPiBwcmV2aW91
c0lubGluZVN0YWNrID0gcHJldmlvdXNOb2RlLT5jb2RlT3JpZ2luLmlubGluZVN0YWNrKCk7Cisg
ICAgVmVjdG9yPENvZGVPcmlnaW4+IGN1cnJlbnRJbmxpbmVTdGFjayA9IGN1cnJlbnROb2RlLT5j
b2RlT3JpZ2luLmlubGluZVN0YWNrKCk7CiAgICAgdW5zaWduZWQgY29tbW9uU2l6ZSA9IHN0ZDo6
bWluKHByZXZpb3VzSW5saW5lU3RhY2suc2l6ZSgpLCBjdXJyZW50SW5saW5lU3RhY2suc2l6ZSgp
KTsKICAgICB1bnNpZ25lZCBpbmRleE9mRGl2ZXJnZW5jZSA9IGNvbW1vblNpemU7CiAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IGNvbW1vblNpemU7ICsraSkgewpAQCAtMTA3LDMyICsxMTEs
MjMgQEAgYm9vbCBHcmFwaDo6ZHVtcENvZGVPcmlnaW4oUHJpbnRTdHJlYW0mIAogICAgIHJldHVy
biBoYXNQcmludGVkOwogfQogCi1pbnQgR3JhcGg6OmFtb3VudE9mTm9kZVdoaXRlU3BhY2UoTm9k
ZSYgbm9kZSkKK2ludCBHcmFwaDo6YW1vdW50T2ZOb2RlV2hpdGVTcGFjZShOb2RlKiBub2RlKQog
ewotICAgIHJldHVybiAobm9kZS5jb2RlT3JpZ2luLmlubGluZURlcHRoKCkgLSAxKSAqIDI7Cisg
ICAgcmV0dXJuIChub2RlLT5jb2RlT3JpZ2luLmlubGluZURlcHRoKCkgLSAxKSAqIDI7CiB9CiAK
LXZvaWQgR3JhcGg6OnByaW50Tm9kZVdoaXRlU3BhY2UoUHJpbnRTdHJlYW0mIG91dCwgTm9kZSYg
bm9kZSkKK3ZvaWQgR3JhcGg6OnByaW50Tm9kZVdoaXRlU3BhY2UoUHJpbnRTdHJlYW0mIG91dCwg
Tm9kZSogbm9kZSkKIHsKICAgICBwcmludFdoaXRlU3BhY2Uob3V0LCBhbW91bnRPZk5vZGVXaGl0
ZVNwYWNlKG5vZGUpKTsKIH0KIAotdm9pZCBHcmFwaDo6ZHVtcChQcmludFN0cmVhbSYgb3V0LCBF
ZGdlIGVkZ2UpCit2b2lkIEdyYXBoOjpkdW1wKFByaW50U3RyZWFtJiBvdXQsIGNvbnN0IGNoYXIq
IHByZWZpeCwgTm9kZSogbm9kZSkKIHsKLSAgICBvdXQucHJpbnQoCi0gICAgICAgIHVzZUtpbmRU
b1N0cmluZyhlZGdlLnVzZUtpbmQoKSksCi0gICAgICAgICJAIiwgZWRnZS5pbmRleCgpLAotICAg
ICAgICBBYmJyZXZpYXRlZFNwZWN1bGF0aW9uRHVtcChhdChlZGdlKS5wcmVkaWN0aW9uKCkpKTsK
LX0KKyAgICBOb2RlVHlwZSBvcCA9IG5vZGUtPm9wKCk7CiAKLXZvaWQgR3JhcGg6OmR1bXAoUHJp
bnRTdHJlYW0mIG91dCwgY29uc3QgY2hhciogcHJlZml4LCBOb2RlSW5kZXggbm9kZUluZGV4KQot
ewotICAgIE5vZGUmIG5vZGUgPSBhdChub2RlSW5kZXgpOwotICAgIE5vZGVUeXBlIG9wID0gbm9k
ZS5vcCgpOwotCi0gICAgdW5zaWduZWQgcmVmQ291bnQgPSBub2RlLnJlZkNvdW50KCk7CisgICAg
dW5zaWduZWQgcmVmQ291bnQgPSBub2RlLT5yZWZDb3VudCgpOwogICAgIGJvb2wgc2tpcHBlZCA9
ICFyZWZDb3VudDsKLSAgICBib29sIG11c3RHZW5lcmF0ZSA9IG5vZGUubXVzdEdlbmVyYXRlKCk7
CisgICAgYm9vbCBtdXN0R2VuZXJhdGUgPSBub2RlLT5tdXN0R2VuZXJhdGUoKTsKICAgICBpZiAo
bXVzdEdlbmVyYXRlKQogICAgICAgICAtLXJlZkNvdW50OwogCkBAIC0xNTYsMTUwICsxNTEsOTYg
QEAgdm9pZCBHcmFwaDo6ZHVtcChQcmludFN0cmVhbSYgb3V0LCBjb25zdAogICAgIC8vICAgICAg
ICAgJCMgICAtIHRoZSBpbmRleCBpbiB0aGUgQ29kZUJsb2NrIG9mIGEgY29uc3RhbnQgeyBmb3Ig
bnVtZXJpYyBjb25zdGFudHMgdGhlIHZhbHVlIGlzIGRpc3BsYXllZCB8IGZvciBpbnRlZ2Vycywg
aW4gYm90aCBkZWNpbWFsIGFuZCBoZXggfS4KICAgICAvLyAgICAgICAgIGlkIyAgLSB0aGUgaW5k
ZXggaW4gdGhlIENvZGVCbG9jayBvZiBhbiBpZGVudGlmaWVyIHsgaWYgY29kZUJsb2NrIGlzIHBh
c3NlZCB0byBkdW1wKCksIHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gaXMgZGlzcGxheWVkIH0u
CiAgICAgLy8gICAgICAgICB2YXIjIC0gdGhlIGluZGV4IG9mIGEgdmFyIG9uIHRoZSBnbG9iYWwg
b2JqZWN0LCB1c2VkIGJ5IEdldEdsb2JhbFZhci9QdXRHbG9iYWxWYXIgb3BlcmF0aW9ucy4KLSAg
ICBvdXQucHJpbnRmKCIlIDRkOiVzPCVjJXU6IiwgKGludClub2RlSW5kZXgsIHNraXBwZWQgPyAi
ICBza2lwcGVkICAiIDogIiAgICAgICAgICAgIiwgbXVzdEdlbmVyYXRlID8gJyEnIDogJyAnLCBy
ZWZDb3VudCk7Ci0gICAgaWYgKG5vZGUuaGFzUmVzdWx0KCkgJiYgIXNraXBwZWQgJiYgbm9kZS5o
YXNWaXJ0dWFsUmVnaXN0ZXIoKSkKLSAgICAgICAgb3V0LnByaW50KG5vZGUudmlydHVhbFJlZ2lz
dGVyKCkpOworICAgIG91dC5wcmludGYoIiUgNGQ6JXM8JWMldToiLCAoaW50KW5vZGUtPmluZGV4
KCksIHNraXBwZWQgPyAiICBza2lwcGVkICAiIDogIiAgICAgICAgICAgIiwgbXVzdEdlbmVyYXRl
ID8gJyEnIDogJyAnLCByZWZDb3VudCk7CisgICAgaWYgKG5vZGUtPmhhc1Jlc3VsdCgpICYmICFz
a2lwcGVkICYmIG5vZGUtPmhhc1ZpcnR1YWxSZWdpc3RlcigpKQorICAgICAgICBvdXQucHJpbnQo
bm9kZS0+dmlydHVhbFJlZ2lzdGVyKCkpOwogICAgIGVsc2UKICAgICAgICAgb3V0LnByaW50KCIt
Iik7CiAgICAgb3V0LnByaW50KCI+XHQiLCBvcE5hbWUob3ApLCAiKCIpOwotICAgIGJvb2wgaGFz
UHJpbnRlZCA9IGZhbHNlOwotICAgIGlmIChub2RlLmZsYWdzKCkgJiBOb2RlSGFzVmFyQXJncykg
ewotICAgICAgICBmb3IgKHVuc2lnbmVkIGNoaWxkSWR4ID0gbm9kZS5maXJzdENoaWxkKCk7IGNo
aWxkSWR4IDwgbm9kZS5maXJzdENoaWxkKCkgKyBub2RlLm51bUNoaWxkcmVuKCk7IGNoaWxkSWR4
KyspIHsKLSAgICAgICAgICAgIGlmIChoYXNQcmludGVkKQotICAgICAgICAgICAgICAgIG91dC5w
cmludCgiLCAiKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBoYXNQcmludGVk
ID0gdHJ1ZTsKKyAgICBDb21tYVByaW50ZXIgY29tbWE7CisgICAgaWYgKG5vZGUtPmZsYWdzKCkg
JiBOb2RlSGFzVmFyQXJncykgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGNoaWxkSWR4ID0gbm9k
ZS0+Zmlyc3RDaGlsZCgpOyBjaGlsZElkeCA8IG5vZGUtPmZpcnN0Q2hpbGQoKSArIG5vZGUtPm51
bUNoaWxkcmVuKCk7IGNoaWxkSWR4KyspIHsKICAgICAgICAgICAgIGlmICghbV92YXJBcmdDaGls
ZHJlbltjaGlsZElkeF0pCiAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBk
dW1wKG91dCwgbV92YXJBcmdDaGlsZHJlbltjaGlsZElkeF0pOworICAgICAgICAgICAgb3V0LnBy
aW50KGNvbW1hLCBtX3ZhckFyZ0NoaWxkcmVuW2NoaWxkSWR4XSk7CiAgICAgICAgIH0KICAgICB9
IGVsc2UgewotICAgICAgICBpZiAoISFub2RlLmNoaWxkMSgpKSB7Ci0gICAgICAgICAgICBkdW1w
KG91dCwgbm9kZS5jaGlsZDEoKSk7Ci0gICAgICAgICAgICBoYXNQcmludGVkID0gdHJ1ZTsKLSAg
ICAgICAgfQotICAgICAgICBpZiAoISFub2RlLmNoaWxkMigpKSB7Ci0gICAgICAgICAgICBvdXQu
cHJpbnQoIiwgIik7IC8vIFdoZXRoZXIgb3Igbm90IHRoZXJlIGlzIGEgZmlyc3QgY2hpbGQsIHdl
IHByaW50IGEgY29tbWEgdG8gZW5zdXJlIHRoYXQgd2Ugc2VlIGEgYmxhbmsgZW50cnkgaWYgdGhl
cmUgd2Fzbid0IG9uZS4KLSAgICAgICAgICAgIGR1bXAob3V0LCBub2RlLmNoaWxkMigpKTsKLSAg
ICAgICAgICAgIGhhc1ByaW50ZWQgPSB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIGlmICghIW5v
ZGUuY2hpbGQzKCkpIHsKLSAgICAgICAgICAgIGlmICghbm9kZS5jaGlsZDEoKSAmJiAhbm9kZS5j
aGlsZDIoKSkKLSAgICAgICAgICAgICAgICBvdXQucHJpbnQoIiwgIik7IC8vIElmIHRoZSB0aGly
ZCBjaGlsZCBpcyB0aGUgZmlyc3Qgbm9uLWVtcHR5IG9uZSB0aGVuIG1ha2Ugc3VyZSB3ZSBoYXZl
IHR3byBibGFua3MgcHJlY2VkaW5nIGl0LgotICAgICAgICAgICAgb3V0LnByaW50KCIsICIpOwot
ICAgICAgICAgICAgZHVtcChvdXQsIG5vZGUuY2hpbGQzKCkpOwotICAgICAgICAgICAgaGFzUHJp
bnRlZCA9IHRydWU7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoc3RybGVuKG5vZGVGbGFn
c0FzU3RyaW5nKG5vZGUuZmxhZ3MoKSkpKSB7Ci0gICAgICAgIG91dC5wcmludChoYXNQcmludGVk
ID8gIiwgIiA6ICIiLCBub2RlRmxhZ3NBc1N0cmluZyhub2RlLmZsYWdzKCkpKTsKLSAgICAgICAg
aGFzUHJpbnRlZCA9IHRydWU7Ci0gICAgfQotICAgIGlmIChub2RlLmhhc0FycmF5TW9kZSgpKSB7
Ci0gICAgICAgIG91dC5wcmludChoYXNQcmludGVkID8gIiwgIiA6ICIiLCBub2RlLmFycmF5TW9k
ZSgpKTsKLSAgICAgICAgaGFzUHJpbnRlZCA9IHRydWU7Ci0gICAgfQotICAgIGlmIChub2RlLmhh
c1Zhck51bWJlcigpKSB7Ci0gICAgICAgIG91dC5wcmludChoYXNQcmludGVkID8gIiwgIiA6ICIi
LCAidmFyIiwgbm9kZS52YXJOdW1iZXIoKSk7Ci0gICAgICAgIGhhc1ByaW50ZWQgPSB0cnVlOwot
ICAgIH0KLSAgICBpZiAobm9kZS5oYXNSZWdpc3RlclBvaW50ZXIoKSkgewotICAgICAgICBvdXQu
cHJpbnQoaGFzUHJpbnRlZCA/ICIsICIgOiAiIiwgImdsb2JhbCIsIGdsb2JhbE9iamVjdEZvcihu
b2RlLmNvZGVPcmlnaW4pLT5maW5kUmVnaXN0ZXJJbmRleChub2RlLnJlZ2lzdGVyUG9pbnRlcigp
KSwgIigiLCBSYXdQb2ludGVyKG5vZGUucmVnaXN0ZXJQb2ludGVyKCkpLCAiKSIpOwotICAgICAg
ICBoYXNQcmludGVkID0gdHJ1ZTsKLSAgICB9Ci0gICAgaWYgKG5vZGUuaGFzSWRlbnRpZmllcigp
KSB7Ci0gICAgICAgIG91dC5wcmludChoYXNQcmludGVkID8gIiwgIiA6ICIiLCAiaWQiLCBub2Rl
LmlkZW50aWZpZXJOdW1iZXIoKSwgInsiLCBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihub2RlLmlk
ZW50aWZpZXJOdW1iZXIoKSkuc3RyaW5nKCksICJ9Iik7Ci0gICAgICAgIGhhc1ByaW50ZWQgPSB0
cnVlOwotICAgIH0KLSAgICBpZiAobm9kZS5oYXNTdHJ1Y3R1cmVTZXQoKSkgewotICAgICAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IG5vZGUuc3RydWN0dXJlU2V0KCkuc2l6ZSgpOyArK2kpIHsK
LSAgICAgICAgICAgIG91dC5wcmludChoYXNQcmludGVkID8gIiwgIiA6ICIiLCAic3RydWN0KCIs
IFJhd1BvaW50ZXIobm9kZS5zdHJ1Y3R1cmVTZXQoKVtpXSksICI6ICIsIEluZGV4aW5nVHlwZUR1
bXAobm9kZS5zdHJ1Y3R1cmVTZXQoKVtpXS0+aW5kZXhpbmdUeXBlKCkpLCAiKSIpOwotICAgICAg
ICAgICAgaGFzUHJpbnRlZCA9IHRydWU7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgaWYgKG5vZGUu
aGFzU3RydWN0dXJlKCkpIHsKLSAgICAgICAgb3V0LnByaW50KGhhc1ByaW50ZWQgPyAiLCAiIDog
IiIsICJzdHJ1Y3QoIiwgUmF3UG9pbnRlcihub2RlLnN0cnVjdHVyZSgpKSwgIjogIiwgSW5kZXhp
bmdUeXBlRHVtcChub2RlLnN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSksICIpIik7Ci0gICAg
ICAgIGhhc1ByaW50ZWQgPSB0cnVlOwotICAgIH0KLSAgICBpZiAobm9kZS5oYXNTdHJ1Y3R1cmVU
cmFuc2l0aW9uRGF0YSgpKSB7Ci0gICAgICAgIG91dC5wcmludChoYXNQcmludGVkID8gIiwgIiA6
ICIiLCAic3RydWN0KCIsIFJhd1BvaW50ZXIobm9kZS5zdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSgp
LnByZXZpb3VzU3RydWN0dXJlKSwgIiAtPiAiLCBSYXdQb2ludGVyKG5vZGUuc3RydWN0dXJlVHJh
bnNpdGlvbkRhdGEoKS5uZXdTdHJ1Y3R1cmUpLCAiKSIpOwotICAgICAgICBoYXNQcmludGVkID0g
dHJ1ZTsKLSAgICB9Ci0gICAgaWYgKG5vZGUuaGFzRnVuY3Rpb24oKSkgewotICAgICAgICBvdXQu
cHJpbnQoaGFzUHJpbnRlZCA/ICIsICIgOiAiIiwgUmF3UG9pbnRlcihub2RlLmZ1bmN0aW9uKCkp
KTsKLSAgICAgICAgaGFzUHJpbnRlZCA9IHRydWU7Ci0gICAgfQotICAgIGlmIChub2RlLmhhc1N0
b3JhZ2VBY2Nlc3NEYXRhKCkpIHsKLSAgICAgICAgU3RvcmFnZUFjY2Vzc0RhdGEmIHN0b3JhZ2VB
Y2Nlc3NEYXRhID0gbV9zdG9yYWdlQWNjZXNzRGF0YVtub2RlLnN0b3JhZ2VBY2Nlc3NEYXRhSW5k
ZXgoKV07Ci0gICAgICAgIG91dC5wcmludChoYXNQcmludGVkID8gIiwgIiA6ICIiLCAiaWQiLCBz
dG9yYWdlQWNjZXNzRGF0YS5pZGVudGlmaWVyTnVtYmVyLCAieyIsIG1fY29kZUJsb2NrLT5pZGVu
dGlmaWVyKHN0b3JhZ2VBY2Nlc3NEYXRhLmlkZW50aWZpZXJOdW1iZXIpLnN0cmluZygpLCAifSIp
OworICAgICAgICBpZiAoISFub2RlLmNoaWxkMSgpIHx8ICEhbm9kZS5jaGlsZDIoKSB8fCAhIW5v
ZGUuY2hpbGQzKCkpCisgICAgICAgICAgICBvdXQucHJpbnQoY29tbWEsIG5vZGUuY2hpbGQxKCkp
OworICAgICAgICBpZiAoISFub2RlLmNoaWxkMigpIHx8ICEhbm9kZS5jaGlsZDMoKSkKKyAgICAg
ICAgICAgIG91dC5wcmludChjb21tYSwgbm9kZS5jaGlsZDIoKSk7CisgICAgICAgIGlmICghIW5v
ZGUuY2hpbGQzKCkpCisgICAgICAgICAgICBvdXQucHJpbnQoY29tbWEsIG5vZGUuY2hpbGQzKCkp
OworICAgIH0KKworICAgIGlmIChzdHJsZW4obm9kZUZsYWdzQXNTdHJpbmcobm9kZS0+ZmxhZ3Mo
KSkpKQorICAgICAgICBvdXQucHJpbnQoY29tbWEsIG5vZGVGbGFnc0FzU3RyaW5nKG5vZGUtPmZs
YWdzKCkpKTsKKyAgICBpZiAobm9kZS0+aGFzQXJyYXlNb2RlKCkpIHsKKyAgICAgICAgb3V0LnBy
aW50KGNvbW1hLCBub2RlLT5hcnJheU1vZGUoKSk7CisgICAgaWYgKG5vZGUtPmhhc1Zhck51bWJl
cigpKSB7CisgICAgICAgIG91dC5wcmludChjb21tYSwgbm9kZS0+dmFyTnVtYmVyKCkpOworICAg
IGlmIChub2RlLT5oYXNSZWdpc3RlclBvaW50ZXIoKSkKKyAgICAgICAgb3V0LnByaW50KGNvbW1h
LCAiZ2xvYmFsIiwgZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPmNvZGVPcmlnaW4pLT5maW5kUmVnaXN0
ZXJJbmRleChub2RlLT5yZWdpc3RlclBvaW50ZXIoKSksICIoIiwgUmF3UG9pbnRlcihub2RlLT5y
ZWdpc3RlclBvaW50ZXIoKSksICIpIik7CisgICAgaWYgKG5vZGUtPmhhc0lkZW50aWZpZXIoKSkK
KyAgICAgICAgb3V0LnByaW50KGNvbW1hLCAiaWQiLCBub2RlLT5pZGVudGlmaWVyTnVtYmVyKCks
ICJ7IiwgbV9jb2RlQmxvY2stPmlkZW50aWZpZXIobm9kZS0+aWRlbnRpZmllck51bWJlcigpKS5z
dHJpbmcoKSwgIn0iKTsKKyAgICBpZiAobm9kZS0+aGFzU3RydWN0dXJlU2V0KCkpIHsKKyAgICAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBub2RlLnN0cnVjdHVyZVNldCgpLnNpemUoKTsgKytp
KQorICAgICAgICAgICAgb3V0LnByaW50KGNvbW1hLCAic3RydWN0KCIsIFJhd1BvaW50ZXIobm9k
ZS0+c3RydWN0dXJlU2V0KClbaV0pLCAiOiAiLCBJbmRleGluZ1R5cGVEdW1wKG5vZGUtPnN0cnVj
dHVyZVNldCgpW2ldLT5pbmRleGluZ1R5cGUoKSksICIpIik7CisgICAgfQorICAgIGlmIChub2Rl
LT5oYXNTdHJ1Y3R1cmUoKSkKKyAgICAgICAgb3V0LnByaW50KGNvbW1hLCAic3RydWN0KCIsIFJh
d1BvaW50ZXIobm9kZS0+c3RydWN0dXJlKCkpLCAiOiAiLCBJbmRleGluZ1R5cGVEdW1wKG5vZGUt
PnN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSksICIpIik7CisgICAgaWYgKG5vZGUtPmhhc1N0
cnVjdHVyZVRyYW5zaXRpb25EYXRhKCkpCisgICAgICAgIG91dC5wcmludChjb21tYSwgInN0cnVj
dCgiLCBSYXdQb2ludGVyKG5vZGUtPnN0cnVjdHVyZVRyYW5zaXRpb25EYXRhKCkucHJldmlvdXNT
dHJ1Y3R1cmUpLCAiIC0+ICIsIFJhd1BvaW50ZXIobm9kZS0+c3RydWN0dXJlVHJhbnNpdGlvbkRh
dGEoKS5uZXdTdHJ1Y3R1cmUpLCAiKSIpOworICAgIGlmIChub2RlLT5oYXNGdW5jdGlvbigpKQor
ICAgICAgICBvdXQucHJpbnQoY29tbWEsICJmdW5jdGlvbigiLCBSYXdQb2ludGVyKG5vZGUtPmZ1
bmN0aW9uKCkpLCAiLCAiLCBGdW5jdGlvbkV4ZWN1dGFibGVEdW1wKG5vZGUtPmZ1bmN0aW9uKCkt
PmpzRXhlY3V0YWJsZSgpKSwgIikiKTsKKyAgICBpZiAobm9kZS0+aGFzRXhlY3V0YWJsZSgpKQor
ICAgICAgICBvdXQucHJpbnQoY29tbWEsICJleGVjdXRhYmxlKCIsIEZ1bmN0aW9uRXhlY3V0YWJs
ZUR1bXAobm9kZS0+ZXhlY3V0YWJsZSgpKSwgIikiKTsKKyAgICBpZiAobm9kZS0+aGFzU3RvcmFn
ZUFjY2Vzc0RhdGEoKSkgeworICAgICAgICBTdG9yYWdlQWNjZXNzRGF0YSYgc3RvcmFnZUFjY2Vz
c0RhdGEgPSBtX3N0b3JhZ2VBY2Nlc3NEYXRhW25vZGUtPnN0b3JhZ2VBY2Nlc3NEYXRhSW5kZXgo
KV07CisgICAgICAgIG91dC5wcmludChjb21tYSwgImlkIiwgc3RvcmFnZUFjY2Vzc0RhdGEuaWRl
bnRpZmllck51bWJlciwgInsiLCBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihzdG9yYWdlQWNjZXNz
RGF0YS5pZGVudGlmaWVyTnVtYmVyKS5zdHJpbmcoKSwgIn0iKTsKICAgICAgICAgb3V0LnByaW50
KCIsICIsIHN0YXRpY19jYXN0PHB0cmRpZmZfdD4oc3RvcmFnZUFjY2Vzc0RhdGEub2Zmc2V0KSk7
Ci0gICAgICAgIGhhc1ByaW50ZWQgPSB0cnVlOwogICAgIH0KLSAgICBBU1NFUlQobm9kZS5oYXNW
YXJpYWJsZUFjY2Vzc0RhdGEoKSA9PSBub2RlLmhhc0xvY2FsKCkpOwotICAgIGlmIChub2RlLmhh
c1ZhcmlhYmxlQWNjZXNzRGF0YSgpKSB7Ci0gICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFy
aWFibGVBY2Nlc3NEYXRhID0gbm9kZS52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKKyAgICBBU1NFUlQo
bm9kZS0+aGFzVmFyaWFibGVBY2Nlc3NEYXRhKCkgPT0gbm9kZS0+aGFzTG9jYWwoKSk7CisgICAg
aWYgKG5vZGUtPmhhc1ZhcmlhYmxlQWNjZXNzRGF0YSgpKSB7CisgICAgICAgIFZhcmlhYmxlQWNj
ZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7
CiAgICAgICAgIGludCBvcGVyYW5kID0gdmFyaWFibGVBY2Nlc3NEYXRhLT5vcGVyYW5kKCk7CiAg
ICAgICAgIGlmIChvcGVyYW5kSXNBcmd1bWVudChvcGVyYW5kKSkKLSAgICAgICAgICAgIG91dC5w
cmludChoYXNQcmludGVkID8gIiwgIiA6ICIiLCAiYXJnIiwgb3BlcmFuZFRvQXJndW1lbnQob3Bl
cmFuZCksICIoIiwgVmFyaWFibGVBY2Nlc3NEYXRhRHVtcCgqdGhpcywgdmFyaWFibGVBY2Nlc3NE
YXRhKSwgIikiKTsKKyAgICAgICAgICAgIG91dC5wcmludChjb21tYSwgImFyZyIsIG9wZXJhbmRU
b0FyZ3VtZW50KG9wZXJhbmQpLCAiKCIsIFZhcmlhYmxlQWNjZXNzRGF0YUR1bXAoKnRoaXMsIHZh
cmlhYmxlQWNjZXNzRGF0YSksICIpIik7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIG91dC5w
cmludChoYXNQcmludGVkID8gIiwgIiA6ICIiLCAiciIsIG9wZXJhbmQsICIoIiwgVmFyaWFibGVB
Y2Nlc3NEYXRhRHVtcCgqdGhpcywgdmFyaWFibGVBY2Nlc3NEYXRhKSwgIikiKTsKLSAgICAgICAg
aGFzUHJpbnRlZCA9IHRydWU7CisgICAgICAgICAgICBvdXQucHJpbnQoY29tbWEsICJyIiwgb3Bl
cmFuZCwgIigiLCBWYXJpYWJsZUFjY2Vzc0RhdGFEdW1wKCp0aGlzLCB2YXJpYWJsZUFjY2Vzc0Rh
dGEpLCAiKSIpOwogICAgIH0KLSAgICBpZiAobm9kZS5oYXNDb25zdGFudEJ1ZmZlcigpKSB7Ci0g
ICAgICAgIGlmIChoYXNQcmludGVkKQotICAgICAgICAgICAgb3V0LnByaW50KCIsICIpOworICAg
IGlmIChub2RlLT5oYXNDb25zdGFudEJ1ZmZlcigpKSB7CisgICAgICAgIG91dC5wcmludChjb21t
YSk7CiAgICAgICAgIG91dC5wcmludChub2RlLnN0YXJ0Q29uc3RhbnQoKSwgIjpbIik7Ci0gICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBub2RlLm51bUNvbnN0YW50cygpOyArK2kpIHsK
LSAgICAgICAgICAgIGlmIChpKQotICAgICAgICAgICAgICAgIG91dC5wcmludCgiLCAiKTsKLSAg
ICAgICAgICAgIG91dC5wcmludChtX2NvZGVCbG9jay0+Y29uc3RhbnRCdWZmZXIobm9kZS5zdGFy
dENvbnN0YW50KCkpW2ldKTsKLSAgICAgICAgfQorICAgICAgICBDb21tYVByaW50ZXIgYW5vdGhl
ckNvbW1hOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbm9kZS5udW1Db25zdGFu
dHMoKTsgKytpKQorICAgICAgICAgICAgb3V0LnByaW50KGFub3RoZXJDb21tYSwgbV9jb2RlQmxv
Y2stPmNvbnN0YW50QnVmZmVyKG5vZGUuc3RhcnRDb25zdGFudCgpKVtpXSk7CiAgICAgICAgIG91
dC5wcmludCgiXSIpOwotICAgICAgICBoYXNQcmludGVkID0gdHJ1ZTsKLSAgICB9Ci0gICAgaWYg
KG5vZGUuaGFzSW5kZXhpbmdUeXBlKCkpIHsKLSAgICAgICAgaWYgKGhhc1ByaW50ZWQpCi0gICAg
ICAgICAgICBvdXQucHJpbnQoIiwgIik7Ci0gICAgICAgIG91dC5wcmludChJbmRleGluZ1R5cGVE
dW1wKG5vZGUuaW5kZXhpbmdUeXBlKCkpKTsKLSAgICAgICAgaGFzUHJpbnRlZCA9IHRydWU7Ci0g
ICAgfQotICAgIGlmIChub2RlLmhhc0V4ZWN1dGlvbkNvdW50ZXIoKSkgewotICAgICAgICBpZiAo
aGFzUHJpbnRlZCkKLSAgICAgICAgICAgIG91dC5wcmludCgiLCAiKTsKLSAgICAgICAgb3V0LnBy
aW50KFJhd1BvaW50ZXIobm9kZS5leGVjdXRpb25Db3VudGVyKCkpKTsKLSAgICAgICAgaGFzUHJp
bnRlZCA9IHRydWU7CiAgICAgfQorICAgIGlmIChub2RlLT5oYXNJbmRleGluZ1R5cGUoKSkKKyAg
ICAgICAgb3V0LnByaW50KGNvbW1hLCBJbmRleGluZ1R5cGVEdW1wKG5vZGUtPmluZGV4aW5nVHlw
ZSgpKSk7CisgICAgaWYgKG5vZGUtPmhhc0V4ZWN1dGlvbkNvdW50ZXIoKSkgeworICAgICAgICBv
dXQucHJpbnQoY29tbWEsIFJhd1BvaW50ZXIobm9kZS0+ZXhlY3V0aW9uQ291bnRlcigpKSk7CiAg
ICAgaWYgKG9wID09IEpTQ29uc3RhbnQpIHsKLSAgICAgICAgb3V0LnByaW50KGhhc1ByaW50ZWQg
PyAiLCAiIDogIiIsICIkIiwgbm9kZS5jb25zdGFudE51bWJlcigpKTsKLSAgICAgICAgSlNWYWx1
ZSB2YWx1ZSA9IHZhbHVlT2ZKU0NvbnN0YW50KG5vZGVJbmRleCk7CisgICAgICAgIG91dC5wcmlu
dChjb21tYSwgIiQiLCBub2RlLT5jb25zdGFudE51bWJlcigpKTsKKyAgICAgICAgSlNWYWx1ZSB2
YWx1ZSA9IHZhbHVlT2ZKU0NvbnN0YW50KG5vZGUpOwogICAgICAgICBvdXQucHJpbnQoIiA9ICIs
IHZhbHVlKTsKLSAgICAgICAgaGFzUHJpbnRlZCA9IHRydWU7Ci0gICAgfQotICAgIGlmIChvcCA9
PSBXZWFrSlNDb25zdGFudCkgewotICAgICAgICBvdXQucHJpbnQoaGFzUHJpbnRlZCA/ICIsICIg
OiAiIiwgUmF3UG9pbnRlcihub2RlLndlYWtDb25zdGFudCgpKSk7Ci0gICAgICAgIGhhc1ByaW50
ZWQgPSB0cnVlOwotICAgIH0KLSAgICBpZiAgKG5vZGUuaXNCcmFuY2goKSB8fCBub2RlLmlzSnVt
cCgpKSB7Ci0gICAgICAgIG91dC5wcmludChoYXNQcmludGVkID8gIiwgIiA6ICIiLCAiVDojIiwg
bm9kZS50YWtlbkJsb2NrSW5kZXgoKSk7Ci0gICAgICAgIGhhc1ByaW50ZWQgPSB0cnVlOwotICAg
IH0KLSAgICBpZiAgKG5vZGUuaXNCcmFuY2goKSkgewotICAgICAgICBvdXQucHJpbnQoaGFzUHJp
bnRlZCA/ICIsICIgOiAiIiwgIkY6IyIsIG5vZGUubm90VGFrZW5CbG9ja0luZGV4KCkpOwotICAg
ICAgICBoYXNQcmludGVkID0gdHJ1ZTsKICAgICB9Ci0gICAgb3V0LnByaW50KGhhc1ByaW50ZWQg
PyAiLCAiIDogIiIsICJiYyMiLCBub2RlLmNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCk7Ci0gICAg
aGFzUHJpbnRlZCA9IHRydWU7Ci0gICAgCi0gICAgKHZvaWQpaGFzUHJpbnRlZDsKKyAgICBpZiAo
b3AgPT0gV2Vha0pTQ29uc3RhbnQpCisgICAgICAgIG91dC0+cHJpbnQoY29tbWEsIFJhd1BvaW50
ZXIobm9kZS0+d2Vha0NvbnN0YW50KCkpKTsKKyAgICBpZiAobm9kZS0+aXNCcmFuY2goKSB8fCBu
b2RlLT5pc0p1bXAoKSkKKyAgICAgICAgb3V0LnByaW50KGNvbW1hLCAiVDojIiwgbm9kZS0+dGFr
ZW5CbG9ja0luZGV4KCkpOworICAgIGlmIChub2RlLT5pc0JyYW5jaCgpKQorICAgICAgICBvdXQu
cHJpbnQoY29tbWEsICJGOiMiLCBub2RlLT5ub3RUYWtlbkJsb2NrSW5kZXgoKSk7CisgICAgb3V0
LnByaW50KGNvbW1hLCAiYmMjIiwgbm9kZS0+Y29kZU9yaWdpbi5ieXRlY29kZUluZGV4KTsKICAg
ICAKICAgICBvdXQucHJpbnQoIikiKTsKIAogICAgIGlmICghc2tpcHBlZCkgewotICAgICAgICBp
ZiAobm9kZS5oYXNWYXJpYWJsZUFjY2Vzc0RhdGEoKSkKLSAgICAgICAgICAgIG91dC5wcmludCgi
ICBwcmVkaWN0aW5nICIsIFNwZWN1bGF0aW9uRHVtcChub2RlLnZhcmlhYmxlQWNjZXNzRGF0YSgp
LT5wcmVkaWN0aW9uKCkpLCBub2RlLnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5zaG91bGRVc2VEb3Vi
bGVGb3JtYXQoKSA/ICIsIGZvcmNpbmcgZG91YmxlIiA6ICIiKTsKLSAgICAgICAgZWxzZSBpZiAo
bm9kZS5oYXNIZWFwUHJlZGljdGlvbigpKQotICAgICAgICAgICAgb3V0LnByaW50KCIgIHByZWRp
Y3RpbmcgIiwgU3BlY3VsYXRpb25EdW1wKG5vZGUuZ2V0SGVhcFByZWRpY3Rpb24oKSkpOworICAg
ICAgICBpZiAobm9kZS0+aGFzVmFyaWFibGVBY2Nlc3NEYXRhKCkpCisgICAgICAgICAgICBvdXQu
cHJpbnQoIiAgcHJlZGljdGluZyAiLCBTcGVjdWxhdGlvbkR1bXAobm9kZS0+dmFyaWFibGVBY2Nl
c3NEYXRhKCktPnByZWRpY3Rpb24oKSksIG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5zaG91
bGRVc2VEb3VibGVGb3JtYXQoKSA/ICIsIGZvcmNpbmcgZG91YmxlIiA6ICIiKTsKKyAgICAgICAg
ZWxzZSBpZiAobm9kZS0+aGFzSGVhcFByZWRpY3Rpb24oKSkKKyAgICAgICAgICAgIG91dC5wcmlu
dCgiICBwcmVkaWN0aW5nICIsIFNwZWN1bGF0aW9uRHVtcChub2RlLT5nZXRIZWFwUHJlZGljdGlv
bigpKSk7CiAgICAgfQogICAgIAogICAgIG91dC5wcmludCgiXG4iKTsKQEAgLTMwOSw3ICsyNTAs
NyBAQCB2b2lkIEdyYXBoOjpkdW1wQmxvY2tIZWFkZXIoUHJpbnRTdHJlYW0mCiB7CiAgICAgQmFz
aWNCbG9jayogYmxvY2sgPSBtX2Jsb2Nrc1tibG9ja0luZGV4XS5nZXQoKTsKIAotICAgIG91dC5w
cmludChwcmVmaXgsICJCbG9jayAjIiwgYmxvY2tJbmRleCwgIiAoIiwgYXQoYmxvY2stPmF0KDAp
KS5jb2RlT3JpZ2luLCAiKTogIiwgYmxvY2stPmlzUmVhY2hhYmxlID8gIiIgOiAiKHNraXBwZWQp
IiwgYmxvY2stPmlzT1NSVGFyZ2V0ID8gIiAoT1NSIHRhcmdldCkiIDogIiIsICJcbiIpOworICAg
IG91dC5wcmludChwcmVmaXgsICJCbG9jayAjIiwgYmxvY2tJbmRleCwgIiAoIiwgYmxvY2stPmF0
KDApLT5jb2RlT3JpZ2luLCAiKTogIiwgYmxvY2stPmlzUmVhY2hhYmxlID8gIiIgOiAiKHNraXBw
ZWQpIiwgYmxvY2stPmlzT1NSVGFyZ2V0ID8gIiAoT1NSIHRhcmdldCkiIDogIiIsICJcbiIpOwog
ICAgIG91dC5wcmludChwcmVmaXgsICIgIFByZWRlY2Vzc29yczoiKTsKICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IGJsb2NrLT5tX3ByZWRlY2Vzc29ycy5zaXplKCk7ICsraSkKICAgICAgICAg
b3V0LnByaW50KCIgIyIsIGJsb2NrLT5tX3ByZWRlY2Vzc29yc1tpXSk7CkBAIC0zMzIsMTcgKzI3
MywxNiBAQCB2b2lkIEdyYXBoOjpkdW1wQmxvY2tIZWFkZXIoUHJpbnRTdHJlYW0mCiAgICAgfQog
ICAgIG91dC5wcmludChwcmVmaXgsICIgIFBoaSBOb2RlczoiKTsKICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IGJsb2NrLT5waGlzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIE5vZGVJbmRleCBw
aGlOb2RlSW5kZXggPSBibG9jay0+cGhpc1tpXTsKLSAgICAgICAgTm9kZSYgcGhpTm9kZSA9IGF0
KHBoaU5vZGVJbmRleCk7Ci0gICAgICAgIGlmICghcGhpTm9kZS5zaG91bGRHZW5lcmF0ZSgpICYm
IHBoaU5vZGVEdW1wTW9kZSA9PSBEdW1wTGl2ZVBoaXNPbmx5KQorICAgICAgICBOb2RlKiBwaGlO
b2RlID0gYmxvY2stPnBoaXNbaV07CisgICAgICAgIGlmICghcGhpTm9kZS0+c2hvdWxkR2VuZXJh
dGUoKSAmJiBwaGlOb2RlRHVtcE1vZGUgPT0gRHVtcExpdmVQaGlzT25seSkKICAgICAgICAgICAg
IGNvbnRpbnVlOwotICAgICAgICBvdXQucHJpbnQoIiBAIiwgcGhpTm9kZUluZGV4LCAiPCIsIHBo
aU5vZGUucmVmQ291bnQoKSwgIj4tPigiKTsKLSAgICAgICAgaWYgKHBoaU5vZGUuY2hpbGQxKCkp
IHsKLSAgICAgICAgICAgIG91dC5wcmludCgiQCIsIHBoaU5vZGUuY2hpbGQxKCkuaW5kZXgoKSk7
Ci0gICAgICAgICAgICBpZiAocGhpTm9kZS5jaGlsZDIoKSkgewotICAgICAgICAgICAgICAgIG91
dC5wcmludCgiLCBAIiwgcGhpTm9kZS5jaGlsZDIoKS5pbmRleCgpKTsKLSAgICAgICAgICAgICAg
ICBpZiAocGhpTm9kZS5jaGlsZDMoKSkKLSAgICAgICAgICAgICAgICAgICAgb3V0LnByaW50KCIs
IEAiLCBwaGlOb2RlLmNoaWxkMygpLmluZGV4KCkpOworICAgICAgICBvdXQucHJpbnQoIiBAIiwg
cGhpTm9kZS0+aW5kZXgoKSwgIjwiLCBwaGlOb2RlLT5yZWZDb3VudCgpLCAiPi0+KCIpOworICAg
ICAgICBpZiAocGhpTm9kZS0+Y2hpbGQxKCkpIHsKKyAgICAgICAgICAgIG91dC5wcmludCgiQCIs
IHBoaU5vZGUtPmNoaWxkMSgpLT5pbmRleCgpKCkpOworICAgICAgICAgICAgaWYgKHBoaU5vZGUt
PmNoaWxkMigpKSB7CisgICAgICAgICAgICAgICAgb3V0LnByaW50KCIsIEAiLCBwaGlOb2RlLT5j
aGlsZDIoKS0+aW5kZXgoKSk7CisgICAgICAgICAgICAgICAgaWYgKHBoaU5vZGUtPmNoaWxkMygp
KQorICAgICAgICAgICAgICAgICAgICBvdXQucHJpbnQoIiwgQCIsIHBoaU5vZGUtPmNoaWxkMygp
LT5pbmRleCgpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBvdXQucHJpbnQo
IikiLCBpICsgMSA8IGJsb2NrLT5waGlzLnNpemUoKSA/ICIsIiA6ICIiKTsKQEAgLTM1Miw3ICsy
OTIsNyBAQCB2b2lkIEdyYXBoOjpkdW1wQmxvY2tIZWFkZXIoUHJpbnRTdHJlYW0mCiAKIHZvaWQg
R3JhcGg6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkKIHsKLSAgICBOb2RlSW5kZXggbGFzdE5vZGVJ
bmRleCA9IE5vTm9kZTsKKyAgICBOb2RlKiBsYXN0Tm9kZSA9IDA7CiAgICAgZm9yIChzaXplX3Qg
YiA9IDA7IGIgPCBtX2Jsb2Nrcy5zaXplKCk7ICsrYikgewogICAgICAgICBCYXNpY0Jsb2NrKiBi
bG9jayA9IG1fYmxvY2tzW2JdLmdldCgpOwogICAgICAgICBpZiAoIWJsb2NrKQpAQCAtMzY4LDkg
KzMwOCw5IEBAIHZvaWQgR3JhcGg6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkKICAgICAgICAgZHVt
cE9wZXJhbmRzKGJsb2NrLT52YXJpYWJsZXNBdEhlYWQsIG91dCk7CiAgICAgICAgIG91dC5wcmlu
dCgiXG4iKTsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBibG9jay0+c2l6ZSgpOyAr
K2kpIHsKLSAgICAgICAgICAgIGR1bXBDb2RlT3JpZ2luKG91dCwgIiIsIGxhc3ROb2RlSW5kZXgs
IGJsb2NrLT5hdChpKSk7CisgICAgICAgICAgICBkdW1wQ29kZU9yaWdpbihvdXQsICIiLCBsYXN0
Tm9kZSwgYmxvY2stPmF0KGkpKTsKICAgICAgICAgICAgIGR1bXAob3V0LCAiIiwgYmxvY2stPmF0
KGkpKTsKLSAgICAgICAgICAgIGxhc3ROb2RlSW5kZXggPSBibG9jay0+YXQoaSk7CisgICAgICAg
ICAgICBsYXN0Tm9kZSA9IGJsb2NrLT5hdChpKTsKICAgICAgICAgfQogICAgICAgICBvdXQucHJp
bnQoIiAgdmFycyBhZnRlcjogIik7CiAgICAgICAgIGlmIChibG9jay0+Y2ZhSGFzVmlzaXRlZCkK
QEAgLTM4Niw0MCArMzI2LDQwIEBAIHZvaWQgR3JhcGg6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkK
IAogLy8gRklYTUU6IENvbnZlcnQgdGhpcyB0byBiZSBpdGVyYXRpdmUsIG5vdCByZWN1cnNpdmUu
CiAjZGVmaW5lIERPX1RPX0NISUxEUkVOKG5vZGUsIHRoaW5nVG9EbykgZG8geyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCi0gICAgICAgIE5vZGUmIF9ub2RlID0gKG5vZGUpOyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIGlmIChfbm9kZS5m
bGFncygpICYgTm9kZUhhc1ZhckFyZ3MpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0g
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIF9jaGlsZElkeCA9IF9ub2RlLmZpcnN0Q2hpbGQoKTsg
ICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgIF9jaGlsZElkeCA8IF9ub2RlLmZpcnN0
Q2hpbGQoKSArIF9ub2RlLm51bUNoaWxkcmVuKCk7ICBcCisgICAgICAgIE5vZGUqIF9ub2RlID0g
KG5vZGUpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAg
ICAgIGlmIChfbm9kZS0+ZmxhZ3MoKSAmIE5vZGVIYXNWYXJBcmdzKSB7ICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIF9jaGlsZElkeCA9IF9ub2Rl
LT5maXJzdENoaWxkKCk7ICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgIF9jaGlsZElk
eCA8IF9ub2RlLT5maXJzdENoaWxkKCkgKyBfbm9kZS0+bnVtQ2hpbGRyZW4oKTsgXAogICAgICAg
ICAgICAgICAgICBfY2hpbGRJZHgrKykgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAogICAgICAgICAgICAgICAgIGlmICghIW1fdmFyQXJnQ2hpbGRyZW5bX2NoaWxk
SWR4XSkgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICAgICAgICAgICB0aGluZ1Rv
RG8obV92YXJBcmdDaGlsZHJlbltfY2hpbGRJZHhdKTsgICAgICAgICAgICAgXAogICAgICAgICAg
ICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAogICAgICAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgaWYgKCFfbm9kZS5jaGlsZDEo
KSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAg
ICAgIEFTU0VSVCghX25vZGUuY2hpbGQyKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAotICAgICAgICAgICAgICAgICAgICAgICAmJiAhX25vZGUuY2hpbGQzKCkpOyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgaWYgKCFfbm9kZS0+Y2hpbGQxKCkp
IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAg
IEFTU0VSVCghX25vZGUtPmNoaWxkMigpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAorICAgICAgICAgICAgICAgICAgICAgICAmJiAhX25vZGUtPmNoaWxkMygpKTsgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICAgfSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAot
ICAgICAgICAgICAgdGhpbmdUb0RvKF9ub2RlLmNoaWxkMSgpKTsgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgdGhpbmdUb0RvKF9ub2RlLT5jaGlsZDEoKSk7
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAg
ICAgICAgICAgaWYgKCFfbm9kZS5jaGlsZDIoKSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgIEFTU0VSVCghX25vZGUuY2hpbGQzKCkpOyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgaWYgKCFfbm9kZS0+
Y2hpbGQyKCkpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAg
ICAgICAgICAgIEFTU0VSVCghX25vZGUtPmNoaWxkMygpKTsgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAogICAgICAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICAgfSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAg
ICAgdGhpbmdUb0RvKF9ub2RlLmNoaWxkMigpKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAorICAgICAgICAgICAgdGhpbmdUb0RvKF9ub2RlLT5jaGlsZDIoKSk7ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAg
aWYgKCFfbm9kZS5jaGlsZDMoKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAorICAgICAgICAgICAgaWYgKCFfbm9kZS0+Y2hpbGQzKCkpICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgdGhp
bmdUb0RvKF9ub2RlLmNoaWxkMygpKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAorICAgICAgICAgICAgdGhpbmdUb0RvKF9ub2RlLT5jaGlsZDMoKSk7ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAogICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIH0gd2hpbGUgKGZhbHNl
KQogCi12b2lkIEdyYXBoOjpyZWZDaGlsZHJlbihOb2RlSW5kZXggb3ApCit2b2lkIEdyYXBoOjpy
ZWZDaGlsZHJlbihOb2RlKiBvcCkKIHsKICAgICBET19UT19DSElMRFJFTihhdChvcCksIHJlZik7
CiB9CiAKLXZvaWQgR3JhcGg6OmRlcmVmQ2hpbGRyZW4oTm9kZUluZGV4IG9wKQordm9pZCBHcmFw
aDo6ZGVyZWZDaGlsZHJlbihOb2RlKiBvcCkKIHsKICAgICBET19UT19DSElMRFJFTihhdChvcCks
IGRlcmVmKTsKIH0KQEAgLTQzMiwxMiArMzcyLDEyIEBAIHZvaWQgR3JhcGg6OnByZWRpY3RBcmd1
bWVudFR5cGVzKCkKICAgICAgICAgaWYgKCFwcm9maWxlKQogICAgICAgICAgICAgY29udGludWU7
CiAgICAgICAgIAotICAgICAgICBhdChtX2FyZ3VtZW50c1thcmddKS52YXJpYWJsZUFjY2Vzc0Rh
dGEoKS0+cHJlZGljdChwcm9maWxlLT5jb21wdXRlVXBkYXRlZFByZWRpY3Rpb24oKSk7CisgICAg
ICAgIG1fYXJndW1lbnRzW2FyZ10tPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5wcmVkaWN0KHByb2Zp
bGUtPmNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbigpKTsKICAgICAgICAgCiAjaWYgREZHX0VOQUJM
RShERUJVR19WRVJCT1NFKQogICAgICAgICBkYXRhTG9nKAogICAgICAgICAgICAgIkFyZ3VtZW50
IFsiLCBhcmcsICJdIHByZWRpY3Rpb246ICIsCi0gICAgICAgICAgICBTcGVjdWxhdGlvbkR1bXAo
YXQobV9hcmd1bWVudHNbYXJnXSkudmFyaWFibGVBY2Nlc3NEYXRhKCktPnByZWRpY3Rpb24oKSks
ICJcbiIpOworICAgICAgICAgICAgU3BlY3VsYXRpb25EdW1wKG1fYXJndW1lbnRzW2FyZ10tPnZh
cmlhYmxlQWNjZXNzRGF0YSgpLT5wcmVkaWN0aW9uKCkpLCAiXG4iKTsKICNlbmRpZgogICAgIH0K
IH0KQEAgLTQ1Niw1MSArMzk2LDU0IEBAIHZvaWQgR3JhcGg6OmhhbmRsZVN1Y2Nlc3NvcihWZWN0
b3I8QmxvY2sKIHZvaWQgR3JhcGg6OmNvbGxlY3RHYXJiYWdlKCkKIHsKICAgICAvLyBGaXJzdCBy
ZXNldCB0aGUgY291bnRzIHRvIDAgZm9yIGFsbCBub2Rlcy4KLSAgICBmb3IgKHVuc2lnbmVkIGkg
PSBzaXplKCk7IGktLTspCi0gICAgICAgIGF0KGkpLnNldFJlZkNvdW50KDApOworICAgIGZvciAo
QmxvY2tJbmRleCBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8IG1fYmxvY2tzLnNpemUoKTsg
KytibG9ja0luZGV4KSB7CisgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ibG9ja3NbYmxv
Y2tJbmRleF0uZ2V0KCk7CisgICAgICAgIGlmICghYmxvY2spCisgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbmRleEluQmxvY2sgPSBibG9jay0+c2l6ZSgpOyBp
bmRleEluQmxvY2stLTspCisgICAgICAgICAgICBibG9jay0+YXQoaW5kZXhJbkJsb2NrKS0+c2V0
UmVmQ291bnQoMCk7CisgICAgfQogICAgIAogICAgIC8vIE5vdyBmaW5kIHRoZSByb290czogdGhl
IG5vZGVzIHRoYXQgYXJlIG11c3QtZ2VuZXJhdGUuIFNldCB0aGVpciByZWYgY291bnRzIHRvCiAg
ICAgLy8gMSBhbmQgcHV0IHRoZW0gb24gdGhlIHdvcmtsaXN0LgotICAgIFZlY3RvcjxOb2RlSW5k
ZXgsIDEyOD4gd29ya2xpc3Q7CisgICAgVmVjdG9yPE5vZGUqLCAxMjg+IHdvcmtsaXN0OwogICAg
IGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8IG1fYmxvY2tzLnNp
emUoKTsgKytibG9ja0luZGV4KSB7CiAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ibG9j
a3NbYmxvY2tJbmRleF0uZ2V0KCk7CiAgICAgICAgIGlmICghYmxvY2spCiAgICAgICAgICAgICBj
b250aW51ZTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpbmRleEluQmxvY2sgPSBibG9jay0+c2l6
ZSgpOyBpbmRleEluQmxvY2stLTspIHsKLSAgICAgICAgICAgIE5vZGVJbmRleCBub2RlSW5kZXgg
PSBibG9jay0+YXQoaW5kZXhJbkJsb2NrKTsKLSAgICAgICAgICAgIE5vZGUmIG5vZGUgPSBhdChu
b2RlSW5kZXgpOwotICAgICAgICAgICAgaWYgKCEobm9kZS5mbGFncygpICYgTm9kZU11c3RHZW5l
cmF0ZSkpCisgICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPmF0KGluZGV4SW5CbG9jayk7
CisgICAgICAgICAgICBpZiAoIShub2RlLT5mbGFncygpICYgTm9kZU11c3RHZW5lcmF0ZSkpCiAg
ICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBub2RlLnNldFJlZkNvdW50KDEp
OwotICAgICAgICAgICAgd29ya2xpc3QuYXBwZW5kKG5vZGVJbmRleCk7CisgICAgICAgICAgICBu
b2RlLT5zZXRSZWZDb3VudCgxKTsKKyAgICAgICAgICAgIHdvcmtsaXN0LmFwcGVuZChub2RlKTsK
ICAgICAgICAgfQogICAgIH0KICAgICAKICAgICB3aGlsZSAoIXdvcmtsaXN0LmlzRW1wdHkoKSkg
ewotICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4ID0gd29ya2xpc3QubGFzdCgpOworICAgICAg
ICBOb2RlKiBub2RlID0gd29ya2xpc3QubGFzdCgpOwogICAgICAgICB3b3JrbGlzdC5yZW1vdmVM
YXN0KCk7Ci0gICAgICAgIE5vZGUmIG5vZGUgPSBhdChub2RlSW5kZXgpOwotICAgICAgICBBU1NF
UlQobm9kZS5zaG91bGRHZW5lcmF0ZSgpKTsgLy8gSXQgc2hvdWxkIG5vdCBiZSBvbiB0aGUgd29y
a2xpc3QgdW5sZXNzIGl0J3MgcmVmJ2VkLgotICAgICAgICBpZiAobm9kZS5mbGFncygpICYgTm9k
ZUhhc1ZhckFyZ3MpIHsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgY2hpbGRJZHggPSBub2Rl
LmZpcnN0Q2hpbGQoKTsKLSAgICAgICAgICAgICAgICAgY2hpbGRJZHggPCBub2RlLmZpcnN0Q2hp
bGQoKSArIG5vZGUubnVtQ2hpbGRyZW4oKTsKKyAgICAgICAgQVNTRVJUKG5vZGUtPnNob3VsZEdl
bmVyYXRlKCkpOyAvLyBJdCBzaG91bGQgbm90IGJlIG9uIHRoZSB3b3JrbGlzdCB1bmxlc3MgaXQn
cyByZWYnZWQuCisgICAgICAgIGlmIChub2RlLT5mbGFncygpICYgTm9kZUhhc1ZhckFyZ3MpIHsK
KyAgICAgICAgICAgIGZvciAodW5zaWduZWQgY2hpbGRJZHggPSBub2RlLT5maXJzdENoaWxkKCk7
CisgICAgICAgICAgICAgICAgIGNoaWxkSWR4IDwgbm9kZS0+Zmlyc3RDaGlsZCgpICsgbm9kZS0+
bnVtQ2hpbGRyZW4oKTsKICAgICAgICAgICAgICAgICAgKytjaGlsZElkeCkgewogICAgICAgICAg
ICAgICAgIGlmICghbV92YXJBcmdDaGlsZHJlbltjaGlsZElkeF0pCiAgICAgICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIE5vZGVJbmRleCBjaGlsZE5vZGVJbmRleCA9
IG1fdmFyQXJnQ2hpbGRyZW5bY2hpbGRJZHhdLmluZGV4KCk7Ci0gICAgICAgICAgICAgICAgaWYg
KGF0KGNoaWxkTm9kZUluZGV4KS5wb3N0Zml4UmVmKCkpCisgICAgICAgICAgICAgICAgTm9kZSog
Y2hpbGROb2RlID0gbV92YXJBcmdDaGlsZHJlbltjaGlsZElkeF0ubm9kZSgpOworICAgICAgICAg
ICAgICAgIGlmIChjaGlsZE5vZGUtPnBvc3RmaXhSZWYoKSkKICAgICAgICAgICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgICAgICAgICAgd29ya2xpc3QuYXBwZW5kKGNoaWxkTm9kZUluZGV4
KTsKKyAgICAgICAgICAgICAgICB3b3JrbGlzdC5hcHBlbmQoY2hpbGROb2RlKTsKICAgICAgICAg
ICAgIH0KLSAgICAgICAgfSBlbHNlIGlmIChub2RlLmNoaWxkMSgpKSB7Ci0gICAgICAgICAgICBp
ZiAoIWF0KG5vZGUuY2hpbGQxKCkpLnBvc3RmaXhSZWYoKSkKLSAgICAgICAgICAgICAgICB3b3Jr
bGlzdC5hcHBlbmQobm9kZS5jaGlsZDEoKS5pbmRleCgpKTsKLSAgICAgICAgICAgIGlmIChub2Rl
LmNoaWxkMigpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFhdChub2RlLmNoaWxkMigpKS5wb3N0
Zml4UmVmKCkpCi0gICAgICAgICAgICAgICAgICAgIHdvcmtsaXN0LmFwcGVuZChub2RlLmNoaWxk
MigpLmluZGV4KCkpOwotICAgICAgICAgICAgICAgIGlmIChub2RlLmNoaWxkMygpKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIGlmICghYXQobm9kZS5jaGlsZDMoKSkucG9zdGZpeFJlZigpKQotICAg
ICAgICAgICAgICAgICAgICAgICAgd29ya2xpc3QuYXBwZW5kKG5vZGUuY2hpbGQzKCkuaW5kZXgo
KSk7CisgICAgICAgIH0gZWxzZSBpZiAobm9kZS0+Y2hpbGQxKCkpIHsKKyAgICAgICAgICAgIGlm
ICghbm9kZS0+Y2hpbGQxKCktPnBvc3RmaXhSZWYoKSkKKyAgICAgICAgICAgICAgICB3b3JrbGlz
dC5hcHBlbmQobm9kZS0+Y2hpbGQxKCkubm9kZSgpKTsKKyAgICAgICAgICAgIGlmIChub2RlLT5j
aGlsZDIoKSkgeworICAgICAgICAgICAgICAgIGlmICghbm9kZS0+Y2hpbGQyKCktPnBvc3RmaXhS
ZWYoKSkKKyAgICAgICAgICAgICAgICAgICAgd29ya2xpc3QuYXBwZW5kKG5vZGUtPmNoaWxkMigp
Lm5vZGUoKSk7CisgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMygpKSB7CisgICAgICAg
ICAgICAgICAgICAgIGlmICghbm9kZS0+Y2hpbGQzKCktPnBvc3RmaXhSZWYoKSkKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHdvcmtsaXN0LmFwcGVuZChub2RlLT5jaGlsZDMoKS5ub2RlKCkpOwog
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtNTE5LDE0ICs0
NjIsMTQgQEAgdm9pZCBHcmFwaDo6ZGV0ZXJtaW5lUmVhY2hhYmlsaXR5KCkKICAgICAgICAgQmFz
aWNCbG9jayogYmxvY2sgPSBtX2Jsb2Nrc1tpbmRleF0uZ2V0KCk7CiAgICAgICAgIEFTU0VSVChi
bG9jay0+aXNMaW5rZWQpOwogICAgICAgICAKLSAgICAgICAgTm9kZSYgbm9kZSA9IGF0KGJsb2Nr
LT5sYXN0KCkpOwotICAgICAgICBBU1NFUlQobm9kZS5pc1Rlcm1pbmFsKCkpOworICAgICAgICBO
b2RlKiBub2RlID0gYmxvY2stPmxhc3QoKTsKKyAgICAgICAgQVNTRVJUKG5vZGUtPmlzVGVybWlu
YWwoKSk7CiAgICAgICAgIAotICAgICAgICBpZiAobm9kZS5pc0p1bXAoKSkKLSAgICAgICAgICAg
IGhhbmRsZVN1Y2Nlc3Nvcih3b3JrbGlzdCwgaW5kZXgsIG5vZGUudGFrZW5CbG9ja0luZGV4KCkp
OwotICAgICAgICBlbHNlIGlmIChub2RlLmlzQnJhbmNoKCkpIHsKLSAgICAgICAgICAgIGhhbmRs
ZVN1Y2Nlc3Nvcih3b3JrbGlzdCwgaW5kZXgsIG5vZGUudGFrZW5CbG9ja0luZGV4KCkpOwotICAg
ICAgICAgICAgaGFuZGxlU3VjY2Vzc29yKHdvcmtsaXN0LCBpbmRleCwgbm9kZS5ub3RUYWtlbkJs
b2NrSW5kZXgoKSk7CisgICAgICAgIGlmIChub2RlLT5pc0p1bXAoKSkKKyAgICAgICAgICAgIGhh
bmRsZVN1Y2Nlc3Nvcih3b3JrbGlzdCwgaW5kZXgsIG5vZGUtPnRha2VuQmxvY2tJbmRleCgpKTsK
KyAgICAgICAgZWxzZSBpZiAobm9kZS0+aXNCcmFuY2goKSkgeworICAgICAgICAgICAgaGFuZGxl
U3VjY2Vzc29yKHdvcmtsaXN0LCBpbmRleCwgbm9kZS0+dGFrZW5CbG9ja0luZGV4KCkpOworICAg
ICAgICAgICAgaGFuZGxlU3VjY2Vzc29yKHdvcmtsaXN0LCBpbmRleCwgbm9kZS0+bm90VGFrZW5C
bG9ja0luZGV4KCkpOwogICAgICAgICB9CiAgICAgfQogfQpAQCAtNTQ2LDggKzQ4OSwxMyBAQCB2
b2lkIEdyYXBoOjpyZXNldFJlYWNoYWJpbGl0eSgpCiAKIHZvaWQgR3JhcGg6OnJlc2V0RXhpdFN0
YXRlcygpCiB7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gc2l6ZSgpOyBpLS07KQotICAgICAgICBh
dChpKS5zZXRDYW5FeGl0KHRydWUpOworICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0g
MDsgYmxvY2tJbmRleCA8IG1fYmxvY2tzLnNpemUoKTsgKytibG9ja0luZGV4KSB7CisgICAgICAg
IEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ibG9ja3NbYmxvY2tJbmRleF0uZ2V0KCk7CisgICAgICAg
IGlmICghYmxvY2spCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgZm9yICh1bnNpZ25l
ZCBpbmRleEluQmxvY2sgPSBibG9jay0+c2l6ZSgpOyBpbmRleEluQmxvY2stLTspCisgICAgICAg
ICAgICBibG9jay0+YXQoaW5kZXhJbkJsb2NrKS0+c2V0Q2FuRXhpdCh0cnVlKTsKKyAgICB9CiB9
CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHR3JhcGguaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0dyYXBoLmgJKHJldmlzaW9uIDE0MDkwNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHR3JhcGguaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDExLCAyMDEyLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzUsNyArMzUsOSBAQAogI2luY2x1
ZGUgIkRGR0Fzc2VtYmx5SGVscGVycy5oIgogI2luY2x1ZGUgIkRGR0Jhc2ljQmxvY2suaCIKICNp
bmNsdWRlICJERkdEb21pbmF0b3JzLmgiCisjaW5jbHVkZSAiREZHTG9uZ0xpdmVkU3RhdGUuaCIK
ICNpbmNsdWRlICJERkdOb2RlLmgiCisjaW5jbHVkZSAiREZHTm9kZUFsbG9jYXRvci5oIgogI2lu
Y2x1ZGUgIkRGR1ZhcmlhZGljRnVuY3Rpb24uaCIKICNpbmNsdWRlICJKU1N0YWNrLmgiCiAjaW5j
bHVkZSAiTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5oIgpAQCAtODMsNTQgKzg1LDQ4IEBA
IGVudW0gQWRkU3BlY3VsYXRpb25Nb2RlIHsKIC8vCiAvLyA9PT0gR3JhcGggPT09CiAvLwotLy8g
VGhlIGRhdGFmbG93IGdyYXBoIGlzIGFuIG9yZGVyZWQgdmVjdG9yIG9mIG5vZGVzLgogLy8gVGhl
IG9yZGVyIG1heSBiZSBzaWduaWZpY2FudCBmb3Igbm9kZXMgd2l0aCBzaWRlLWVmZmVjdHMgKHBy
b3BlcnR5IGFjY2Vzc2VzLCB2YWx1ZSBjb252ZXJzaW9ucykuCiAvLyBOb2RlcyB0aGF0IGFyZSAn
ZGVhZCcgcmVtYWluIGluIHRoZSB2ZWN0b3Igd2l0aCByZWZDb3VudCAwLgotY2xhc3MgR3JhcGgg
OiBwdWJsaWMgVmVjdG9yPE5vZGUsIDY0PiB7CitjbGFzcyBHcmFwaCB7CiBwdWJsaWM6CiAgICAg
R3JhcGgoSlNHbG9iYWxEYXRhJiwgQ29kZUJsb2NrKiwgdW5zaWduZWQgb3NyRW50cnlCeXRlY29k
ZUluZGV4LCBjb25zdCBPcGVyYW5kczxKU1ZhbHVlPiYgbXVzdEhhbmRsZVZhbHVlcyk7Ci0gICAg
Ci0gICAgdXNpbmcgVmVjdG9yPE5vZGUsIDY0Pjo6b3BlcmF0b3JbXTsKLSAgICB1c2luZyBWZWN0
b3I8Tm9kZSwgNjQ+OjphdDsKLSAgICAKLSAgICBOb2RlJiBvcGVyYXRvcltdKEVkZ2Ugbm9kZVVz
ZSkgeyByZXR1cm4gYXQobm9kZVVzZS5pbmRleCgpKTsgfQotICAgIGNvbnN0IE5vZGUmIG9wZXJh
dG9yW10oRWRnZSBub2RlVXNlKSBjb25zdCB7IHJldHVybiBhdChub2RlVXNlLmluZGV4KCkpOyB9
Ci0gICAgCi0gICAgTm9kZSYgYXQoRWRnZSBub2RlVXNlKSB7IHJldHVybiBhdChub2RlVXNlLmlu
ZGV4KCkpOyB9Ci0gICAgY29uc3QgTm9kZSYgYXQoRWRnZSBub2RlVXNlKSBjb25zdCB7IHJldHVy
biBhdChub2RlVXNlLmluZGV4KCkpOyB9CisgICAgfkdyYXBoKCk7CiAgICAgCiAgICAgLy8gTWFy
ayBhIG5vZGUgYXMgYmVpbmcgcmVmZXJlbmNlZC4KLSAgICBOb2RlSW5kZXggcmVmKE5vZGVJbmRl
eCBub2RlSW5kZXgpCisgICAgTm9kZSogcmVmKE5vZGUqIG5vZGUpCiAgICAgewotICAgICAgICBO
b2RlJiBub2RlID0gYXQobm9kZUluZGV4KTsKICAgICAgICAgLy8gSWYgdGhlIHZhbHVlIChiZWZv
cmUgaW5jcmVtZW50aW5nKSB3YXMgYXQgcmVmQ291bnQgemVybyB0aGVuIHdlIG5lZWQgdG8gcmVm
IGl0cyBjaGlsZHJlbi4KLSAgICAgICAgaWYgKCFub2RlLnBvc3RmaXhSZWYoKSkKLSAgICAgICAg
ICAgIHJlZkNoaWxkcmVuKG5vZGVJbmRleCk7Ci0gICAgICAgIHJldHVybiBub2RlSW5kZXg7Cisg
ICAgICAgIGlmICghbm9kZS0+cG9zdGZpeFJlZigpKQorICAgICAgICAgICAgcmVmQ2hpbGRyZW4o
bm9kZSk7CisgICAgICAgIHJldHVybiBub2RlOwogICAgIH0KICAgICBFZGdlIHJlZihFZGdlIG5v
ZGVVc2UpCiAgICAgewotICAgICAgICByZWYobm9kZVVzZS5pbmRleCgpKTsKKyAgICAgICAgcmVm
KG5vZGVVc2Uubm9kZSgpKTsKICAgICAgICAgcmV0dXJuIG5vZGVVc2U7CiAgICAgfQogICAgIAot
ICAgIHZvaWQgZGVyZWYoTm9kZUluZGV4IG5vZGVJbmRleCkKKyAgICB2b2lkIGRlcmVmKE5vZGUq
IG5vZGUpCiAgICAgewotICAgICAgICBpZiAoYXQobm9kZUluZGV4KS5wb3N0Zml4RGVyZWYoKSA9
PSAxKQotICAgICAgICAgICAgZGVyZWZDaGlsZHJlbihub2RlSW5kZXgpOworI2lmICFBU1NFUlRf
RElTQUJMRUQKKyAgICAgICAgaWYgKCFub2RlLT5yZWZDb3VudCgpKQorICAgICAgICAgICAgZHVt
cCgpOworI2VuZGlmCisgICAgICAgIGlmIChub2RlLT5wb3N0Zml4RGVyZWYoKSA9PSAxKQorICAg
ICAgICAgICAgZGVyZWZDaGlsZHJlbihub2RlKTsKICAgICB9CiAgICAgdm9pZCBkZXJlZihFZGdl
IG5vZGVVc2UpCiAgICAgewotICAgICAgICBkZXJlZihub2RlVXNlLmluZGV4KCkpOworICAgICAg
ICBkZXJlZihub2RlVXNlLm5vZGUoKSk7CiAgICAgfQogICAgIAotICAgIHZvaWQgY2hhbmdlSW5k
ZXgoRWRnZSYgZWRnZSwgTm9kZUluZGV4IG5ld0luZGV4LCBib29sIGNoYW5nZVJlZiA9IHRydWUp
CisgICAgdm9pZCBjaGFuZ2VDaGlsZChFZGdlJiBlZGdlLCBOb2RlKiBuZXdOb2RlLCBib29sIGNo
YW5nZVJlZiA9IHRydWUpCiAgICAgewogICAgICAgICBpZiAoY2hhbmdlUmVmKSB7Ci0gICAgICAg
ICAgICByZWYobmV3SW5kZXgpOwotICAgICAgICAgICAgZGVyZWYoZWRnZS5pbmRleCgpKTsKKyAg
ICAgICAgICAgIHJlZihuZXdOb2RlKTsKKyAgICAgICAgICAgIGRlcmVmKGVkZ2Uubm9kZSgpKTsK
ICAgICAgICAgfQotICAgICAgICBlZGdlLnNldEluZGV4KG5ld0luZGV4KTsKKyAgICAgICAgZWRn
ZS5zZXROb2RlKG5ld05vZGUpOwogICAgIH0KICAgICAKICAgICB2b2lkIGNoYW5nZUVkZ2UoRWRn
ZSYgZWRnZSwgRWRnZSBuZXdFZGdlLCBib29sIGNoYW5nZVJlZiA9IHRydWUpCkBAIC0xNDIsMTEg
KzEzOCwxMSBAQCBwdWJsaWM6CiAgICAgICAgIGVkZ2UgPSBuZXdFZGdlOwogICAgIH0KICAgICAK
LSAgICB2b2lkIGNvbXBhcmVBbmRTd2FwKEVkZ2UmIGVkZ2UsIE5vZGVJbmRleCBvbGRJbmRleCwg
Tm9kZUluZGV4IG5ld0luZGV4LCBib29sIGNoYW5nZVJlZikKKyAgICB2b2lkIGNvbXBhcmVBbmRT
d2FwKEVkZ2UmIGVkZ2UsIE5vZGUqIG9sZE5vZGUsIE5vZGUqIG5ld05vZGUsIGJvb2wgY2hhbmdl
UmVmKQogICAgIHsKLSAgICAgICAgaWYgKGVkZ2UuaW5kZXgoKSAhPSBvbGRJbmRleCkKKyAgICAg
ICAgaWYgKGVkZ2Uubm9kZSgpICE9IG9sZE5vZGUpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgIGNoYW5nZUluZGV4KGVkZ2UsIG5ld0luZGV4LCBjaGFuZ2VSZWYpOworICAgICAgICBjaGFu
Z2VDaGlsZChlZGdlLCBuZXdOb2RlLCBjaGFuZ2VSZWYpOwogICAgIH0KICAgICAKICAgICB2b2lk
IGNvbXBhcmVBbmRTd2FwKEVkZ2UmIGVkZ2UsIEVkZ2Ugb2xkRWRnZSwgRWRnZSBuZXdFZGdlLCBi
b29sIGNoYW5nZVJlZikKQEAgLTE1Niw0NCArMTUyLDI5IEBAIHB1YmxpYzoKICAgICAgICAgY2hh
bmdlRWRnZShlZGdlLCBuZXdFZGdlLCBjaGFuZ2VSZWYpOwogICAgIH0KICAgICAKLSAgICB2b2lk
IGNsZWFyQW5kRGVyZWZDaGlsZDEoTm9kZSYgbm9kZSkKKyAgICB2b2lkIGNsZWFyQW5kRGVyZWZD
aGlsZChOb2RlKiBub2RlLCB1bnNpZ25lZCBpbmRleCkKICAgICB7Ci0gICAgICAgIGlmICghbm9k
ZS5jaGlsZDEoKSkKKyAgICAgICAgaWYgKCFub2RlLT5jaGlsZHJlbi5jaGlsZChpbmRleCkpCiAg
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGRlcmVmKG5vZGUuY2hpbGQxKCkpOwotICAgICAg
ICBub2RlLmNoaWxkcmVuLmNoaWxkMSgpID0gRWRnZSgpOwotICAgIH0KLQotICAgIHZvaWQgY2xl
YXJBbmREZXJlZkNoaWxkMihOb2RlJiBub2RlKQotICAgIHsKLSAgICAgICAgaWYgKCFub2RlLmNo
aWxkMigpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBkZXJlZihub2RlLmNoaWxkMigp
KTsKLSAgICAgICAgbm9kZS5jaGlsZHJlbi5jaGlsZDIoKSA9IEVkZ2UoKTsKLSAgICB9Ci0KLSAg
ICB2b2lkIGNsZWFyQW5kRGVyZWZDaGlsZDMoTm9kZSYgbm9kZSkKLSAgICB7Ci0gICAgICAgIGlm
ICghbm9kZS5jaGlsZDMoKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgZGVyZWYobm9k
ZS5jaGlsZDMoKSk7Ci0gICAgICAgIG5vZGUuY2hpbGRyZW4uY2hpbGQzKCkgPSBFZGdlKCk7Cisg
ICAgICAgIGRlcmVmKG5vZGUtPmNoaWxkcmVuLmNoaWxkKGluZGV4KSk7CisgICAgICAgIG5vZGUu
Y2hpbGRyZW4uc2V0Q2hpbGQoaW5kZXgsIEVkZ2UoKSk7CiAgICAgfQorICAgIHZvaWQgY2xlYXJB
bmREZXJlZkNoaWxkMShOb2RlKiBub2RlKSB7IGNsZWFyQW5kRGVyZWZDaGlsZChub2RlLCAwKTsg
fQorICAgIHZvaWQgY2xlYXJBbmREZXJlZkNoaWxkMihOb2RlKiBub2RlKSB7IGNsZWFyQW5kRGVy
ZWZDaGlsZChub2RlLCAxKTsgfQorICAgIHZvaWQgY2xlYXJBbmREZXJlZkNoaWxkMyhOb2RlKiBu
b2RlKSB7IGNsZWFyQW5kRGVyZWZDaGlsZChub2RlLCAyKTsgfQogICAgIAogI2RlZmluZSBERkdf
REVGSU5FX0FERF9OT0RFKHRlbXBsYXRlUHJlLCB0ZW1wbGF0ZVBvc3QsIHR5cGVQYXJhbXMsIHZh
bHVlUGFyYW1zQ29tbWEsIHZhbHVlUGFyYW1zLCB2YWx1ZUFyZ3MpIFwKLSAgICB0ZW1wbGF0ZVBy
ZSB0eXBlUGFyYW1zIHRlbXBsYXRlUG9zdCBOb2RlSW5kZXggYWRkTm9kZShSZWZDaGlsZHJlbk1v
ZGUgcmVmQ2hpbGRyZW5Nb2RlLCBSZWZOb2RlTW9kZSByZWZOb2RlTW9kZSwgU3BlY3VsYXRlZFR5
cGUgdHlwZSB2YWx1ZVBhcmFtc0NvbW1hIHZhbHVlUGFyYW1zKSBcCisgICAgdGVtcGxhdGVQcmUg
dHlwZVBhcmFtcyB0ZW1wbGF0ZVBvc3QgTm9kZSogYWRkTm9kZShSZWZDaGlsZHJlbk1vZGUgcmVm
Q2hpbGRyZW5Nb2RlLCBSZWZOb2RlTW9kZSByZWZOb2RlTW9kZSwgU3BlY3VsYXRlZFR5cGUgdHlw
ZSB2YWx1ZVBhcmFtc0NvbW1hIHZhbHVlUGFyYW1zKSBcCiAgICAgeyBcCi0gICAgICAgIE5vZGUg
bm9kZSA9IE5vZGUodmFsdWVBcmdzKTsgXAotICAgICAgICBub2RlLnByZWRpY3QodHlwZSk7IFwK
LSAgICAgICAgaWYgKG5vZGUuZmxhZ3MoKSAmIE5vZGVNdXN0R2VuZXJhdGUpIFwKLSAgICAgICAg
ICAgIG5vZGUucmVmKCk7IFwKKyAgICAgICAgTm9kZSogbm9kZSA9IG5ldyAobV9hbGxvY2F0b3Ip
IE5vZGUodmFsdWVBcmdzKTsgXAorICAgICAgICBub2RlLT5wcmVkaWN0KHR5cGUpOyBcCisgICAg
ICAgIGlmIChub2RlLT5mbGFncygpICYgTm9kZU11c3RHZW5lcmF0ZSkgXAorICAgICAgICAgICAg
bm9kZS0+cmVmKCk7IFwKICAgICAgICAgaWYgKHJlZk5vZGVNb2RlID09IFJlZk5vZGUpIFwKLSAg
ICAgICAgICAgIG5vZGUucmVmKCk7IFwKLSAgICAgICAgTm9kZUluZGV4IHJlc3VsdCA9IHNpemUo
KTsgXAotICAgICAgICBhcHBlbmQobm9kZSk7IFwKKyAgICAgICAgICAgIG5vZGUtPnJlZigpOyBc
CiAgICAgICAgIGlmIChyZWZDaGlsZHJlbk1vZGUgPT0gUmVmQ2hpbGRyZW4pIFwKLSAgICAgICAg
ICAgIHJlZkNoaWxkcmVuKHJlc3VsdCk7IFwKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsgXAorICAg
ICAgICAgICAgcmVmQ2hpbGRyZW4obm9kZSk7IFwKKyAgICAgICAgcmV0dXJuIG5vZGU7IFwKICAg
ICB9CiAgICAgREZHX1ZBUklBRElDX1RFTVBMQVRFX0ZVTkNUSU9OKERGR19ERUZJTkVfQUREX05P
REUpCiAjdW5kZWYgREZHX0RFRklORV9BRERfTk9ERQpAQCAtMjA0LDE0ICsxODUsMTQgQEAgcHVi
bGljOgogICAgIC8vIHJlZmVyZW5jZSBjb3VudHMgYWNjb3JkaW5nIHRvIHJlYWNoYWJpbGl0eS4K
ICAgICB2b2lkIGNvbGxlY3RHYXJiYWdlKCk7CiAgICAgCi0gICAgdm9pZCBjb252ZXJ0VG9Db25z
dGFudChOb2RlSW5kZXggbm9kZUluZGV4LCB1bnNpZ25lZCBjb25zdGFudE51bWJlcikKKyAgICB2
b2lkIGNvbnZlcnRUb0NvbnN0YW50KE5vZGUqIG5vZGUsIHVuc2lnbmVkIGNvbnN0YW50TnVtYmVy
KQogICAgIHsKLSAgICAgICAgYXQobm9kZUluZGV4KS5jb252ZXJ0VG9Db25zdGFudChjb25zdGFu
dE51bWJlcik7CisgICAgICAgIG5vZGUtPmNvbnZlcnRUb0NvbnN0YW50KGNvbnN0YW50TnVtYmVy
KTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBjb252ZXJ0VG9Db25zdGFudChOb2RlSW5kZXggbm9k
ZUluZGV4LCBKU1ZhbHVlIHZhbHVlKQorICAgIHZvaWQgY29udmVydFRvQ29uc3RhbnQoTm9kZSog
bm9kZSwgSlNWYWx1ZSB2YWx1ZSkKICAgICB7Ci0gICAgICAgIGNvbnZlcnRUb0NvbnN0YW50KG5v
ZGVJbmRleCwgbV9jb2RlQmxvY2stPmFkZE9yRmluZENvbnN0YW50KHZhbHVlKSk7CisgICAgICAg
IGNvbnZlcnRUb0NvbnN0YW50KG5vZGUsIG1fY29kZUJsb2NrLT5hZGRPckZpbmRDb25zdGFudCh2
YWx1ZSkpOwogICAgIH0KIAogICAgIC8vIENvZGVCbG9jayBpcyBvcHRpb25hbCwgYnV0IG1heSBh
bGxvdyBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHRvIGJlIGR1bXBlZCAoZS5nLiBJZGVudGlmaWVy
IG5hbWVzKS4KQEAgLTIxOSwxMjUgKzIwMCwxMjUgQEAgcHVibGljOgogICAgIGVudW0gUGhpTm9k
ZUR1bXBNb2RlIHsgRHVtcExpdmVQaGlzT25seSwgRHVtcEFsbFBoaXMgfTsKICAgICB2b2lkIGR1
bXBCbG9ja0hlYWRlcihQcmludFN0cmVhbSYsIGNvbnN0IGNoYXIqIHByZWZpeCwgQmxvY2tJbmRl
eCwgUGhpTm9kZUR1bXBNb2RlKTsKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mLCBFZGdlKTsK
LSAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mLCBjb25zdCBjaGFyKiBwcmVmaXgsIE5vZGVJbmRl
eCk7Ci0gICAgc3RhdGljIGludCBhbW91bnRPZk5vZGVXaGl0ZVNwYWNlKE5vZGUmKTsKLSAgICBz
dGF0aWMgdm9pZCBwcmludE5vZGVXaGl0ZVNwYWNlKFByaW50U3RyZWFtJiwgTm9kZSYpOworICAg
IHZvaWQgZHVtcChQcmludFN0cmVhbSYsIGNvbnN0IGNoYXIqIHByZWZpeCwgTm9kZSopOworICAg
IHN0YXRpYyBpbnQgYW1vdW50T2ZOb2RlV2hpdGVTcGFjZShOb2RlKik7CisgICAgc3RhdGljIHZv
aWQgcHJpbnROb2RlV2hpdGVTcGFjZShQcmludFN0cmVhbSYsIE5vZGUqKTsKIAogICAgIC8vIER1
bXAgdGhlIGNvZGUgb3JpZ2luIG9mIHRoZSBnaXZlbiBub2RlIGFzIGEgZGlmZiBmcm9tIHRoZSBj
b2RlIG9yaWdpbiBvZiB0aGUKICAgICAvLyBwcmVjZWRpbmcgbm9kZS4gUmV0dXJucyB0cnVlIGlm
IGFueXRoaW5nIHdhcyBwcmludGVkLgotICAgIGJvb2wgZHVtcENvZGVPcmlnaW4oUHJpbnRTdHJl
YW0mLCBjb25zdCBjaGFyKiBwcmVmaXgsIE5vZGVJbmRleCwgTm9kZUluZGV4KTsKKyAgICBib29s
IGR1bXBDb2RlT3JpZ2luKFByaW50U3RyZWFtJiwgY29uc3QgY2hhciogcHJlZml4LCBOb2RlKiBw
cmV2aW91c05vZGUsIE5vZGUqIGN1cnJlbnROb2RlKTsKIAogICAgIEJsb2NrSW5kZXggYmxvY2tJ
bmRleEZvckJ5dGVjb2RlT2Zmc2V0KFZlY3RvcjxCbG9ja0luZGV4PiYgYmxvY2tzLCB1bnNpZ25l
ZCBieXRlY29kZUJlZ2luKTsKIAotICAgIFNwZWN1bGF0ZWRUeXBlIGdldEpTQ29uc3RhbnRTcGVj
dWxhdGlvbihOb2RlJiBub2RlKQorICAgIFNwZWN1bGF0ZWRUeXBlIGdldEpTQ29uc3RhbnRTcGVj
dWxhdGlvbihOb2RlKiBub2RlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIHNwZWN1bGF0aW9uRnJv
bVZhbHVlKG5vZGUudmFsdWVPZkpTQ29uc3RhbnQobV9jb2RlQmxvY2spKTsKKyAgICAgICAgcmV0
dXJuIHNwZWN1bGF0aW9uRnJvbVZhbHVlKG5vZGUtPnZhbHVlT2ZKU0NvbnN0YW50KG1fY29kZUJs
b2NrKSk7CiAgICAgfQogICAgIAotICAgIEFkZFNwZWN1bGF0aW9uTW9kZSBhZGRTcGVjdWxhdGlv
bk1vZGUoTm9kZSYgYWRkLCBib29sIGxlZnRTaG91bGRTcGVjdWxhdGVJbnRlZ2VyLCBib29sIHJp
Z2h0U2hvdWxkU3BlY3VsYXRlSW50ZWdlcikKKyAgICBBZGRTcGVjdWxhdGlvbk1vZGUgYWRkU3Bl
Y3VsYXRpb25Nb2RlKE5vZGUqIGFkZCwgYm9vbCBsZWZ0U2hvdWxkU3BlY3VsYXRlSW50ZWdlciwg
Ym9vbCByaWdodFNob3VsZFNwZWN1bGF0ZUludGVnZXIpCiAgICAgewotICAgICAgICBBU1NFUlQo
YWRkLm9wKCkgPT0gVmFsdWVBZGQgfHwgYWRkLm9wKCkgPT0gQXJpdGhBZGQgfHwgYWRkLm9wKCkg
PT0gQXJpdGhTdWIpOworICAgICAgICBBU1NFUlQoYWRkLT5vcCgpID09IFZhbHVlQWRkIHx8IGFk
ZC0+b3AoKSA9PSBBcml0aEFkZCB8fCBhZGQtPm9wKCkgPT0gQXJpdGhTdWIpOwogICAgICAgICAK
LSAgICAgICAgTm9kZSYgbGVmdCA9IGF0KGFkZC5jaGlsZDEoKSk7Ci0gICAgICAgIE5vZGUmIHJp
Z2h0ID0gYXQoYWRkLmNoaWxkMigpKTsKKyAgICAgICAgTm9kZSogbGVmdCA9IGFkZC0+Y2hpbGQx
KCkubm9kZSgpOworICAgICAgICBOb2RlKiByaWdodCA9IGFkZC0+Y2hpbGQyKCkubm9kZSgpOwog
ICAgICAgICAKLSAgICAgICAgaWYgKGxlZnQuaGFzQ29uc3RhbnQoKSkKKyAgICAgICAgaWYgKGxl
ZnQtPmhhc0NvbnN0YW50KCkpCiAgICAgICAgICAgICByZXR1cm4gYWRkSW1tZWRpYXRlU2hvdWxk
U3BlY3VsYXRlSW50ZWdlcihhZGQsIHJpZ2h0U2hvdWxkU3BlY3VsYXRlSW50ZWdlciwgbGVmdCk7
Ci0gICAgICAgIGlmIChyaWdodC5oYXNDb25zdGFudCgpKQorICAgICAgICBpZiAocmlnaHQtPmhh
c0NvbnN0YW50KCkpCiAgICAgICAgICAgICByZXR1cm4gYWRkSW1tZWRpYXRlU2hvdWxkU3BlY3Vs
YXRlSW50ZWdlcihhZGQsIGxlZnRTaG91bGRTcGVjdWxhdGVJbnRlZ2VyLCByaWdodCk7CiAgICAg
ICAgIAotICAgICAgICByZXR1cm4gKGxlZnRTaG91bGRTcGVjdWxhdGVJbnRlZ2VyICYmIHJpZ2h0
U2hvdWxkU3BlY3VsYXRlSW50ZWdlciAmJiBhZGQuY2FuU3BlY3VsYXRlSW50ZWdlcigpKSA/IFNw
ZWN1bGF0ZUludGVnZXIgOiBEb250U3BlY3VsYXRlSW50ZWdlcjsKKyAgICAgICAgcmV0dXJuIChs
ZWZ0U2hvdWxkU3BlY3VsYXRlSW50ZWdlciAmJiByaWdodFNob3VsZFNwZWN1bGF0ZUludGVnZXIg
JiYgYWRkLT5jYW5TcGVjdWxhdGVJbnRlZ2VyKCkpID8gU3BlY3VsYXRlSW50ZWdlciA6IERvbnRT
cGVjdWxhdGVJbnRlZ2VyOwogICAgIH0KICAgICAKLSAgICBBZGRTcGVjdWxhdGlvbk1vZGUgdmFs
dWVBZGRTcGVjdWxhdGlvbk1vZGUoTm9kZSYgYWRkKQorICAgIEFkZFNwZWN1bGF0aW9uTW9kZSB2
YWx1ZUFkZFNwZWN1bGF0aW9uTW9kZShOb2RlKiBhZGQpCiAgICAgewotICAgICAgICByZXR1cm4g
YWRkU3BlY3VsYXRpb25Nb2RlKGFkZCwgYXQoYWRkLmNoaWxkMSgpKS5zaG91bGRTcGVjdWxhdGVJ
bnRlZ2VyRXhwZWN0aW5nRGVmaW5lZCgpLCBhdChhZGQuY2hpbGQyKCkpLnNob3VsZFNwZWN1bGF0
ZUludGVnZXJFeHBlY3RpbmdEZWZpbmVkKCkpOworICAgICAgICByZXR1cm4gYWRkU3BlY3VsYXRp
b25Nb2RlKGFkZCwgYWRkLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlSW50ZWdlckV4cGVjdGlu
Z0RlZmluZWQoKSwgYWRkLT5jaGlsZDIoKS0+c2hvdWxkU3BlY3VsYXRlSW50ZWdlckV4cGVjdGlu
Z0RlZmluZWQoKSk7CiAgICAgfQogICAgIAotICAgIEFkZFNwZWN1bGF0aW9uTW9kZSBhcml0aEFk
ZFNwZWN1bGF0aW9uTW9kZShOb2RlJiBhZGQpCisgICAgQWRkU3BlY3VsYXRpb25Nb2RlIGFyaXRo
QWRkU3BlY3VsYXRpb25Nb2RlKE5vZGUqIGFkZCkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZGRT
cGVjdWxhdGlvbk1vZGUoYWRkLCBhdChhZGQuY2hpbGQxKCkpLnNob3VsZFNwZWN1bGF0ZUludGVn
ZXJGb3JBcml0aG1ldGljKCksIGF0KGFkZC5jaGlsZDIoKSkuc2hvdWxkU3BlY3VsYXRlSW50ZWdl
ckZvckFyaXRobWV0aWMoKSk7CisgICAgICAgIHJldHVybiBhZGRTcGVjdWxhdGlvbk1vZGUoYWRk
LCBhZGQtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyRm9yQXJpdGhtZXRpYygpLCBh
ZGQtPmNoaWxkMigpLT5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyRm9yQXJpdGhtZXRpYygpKTsKICAg
ICB9CiAgICAgCi0gICAgQWRkU3BlY3VsYXRpb25Nb2RlIGFkZFNwZWN1bGF0aW9uTW9kZShOb2Rl
JiBhZGQpCisgICAgQWRkU3BlY3VsYXRpb25Nb2RlIGFkZFNwZWN1bGF0aW9uTW9kZShOb2RlKiBh
ZGQpCiAgICAgewotICAgICAgICBpZiAoYWRkLm9wKCkgPT0gVmFsdWVBZGQpCisgICAgICAgIGlm
IChhZGQtPm9wKCkgPT0gVmFsdWVBZGQpCiAgICAgICAgICAgICByZXR1cm4gdmFsdWVBZGRTcGVj
dWxhdGlvbk1vZGUoYWRkKTsKICAgICAgICAgCiAgICAgICAgIHJldHVybiBhcml0aEFkZFNwZWN1
bGF0aW9uTW9kZShhZGQpOwogICAgIH0KICAgICAKLSAgICBib29sIGFkZFNob3VsZFNwZWN1bGF0
ZUludGVnZXIoTm9kZSYgYWRkKQorICAgIGJvb2wgYWRkU2hvdWxkU3BlY3VsYXRlSW50ZWdlcihO
b2RlKiBhZGQpCiAgICAgewogICAgICAgICByZXR1cm4gYWRkU3BlY3VsYXRpb25Nb2RlKGFkZCkg
IT0gRG9udFNwZWN1bGF0ZUludGVnZXI7CiAgICAgfQogICAgIAotICAgIGJvb2wgbXVsU2hvdWxk
U3BlY3VsYXRlSW50ZWdlcihOb2RlJiBtdWwpCisgICAgYm9vbCBtdWxTaG91bGRTcGVjdWxhdGVJ
bnRlZ2VyKE5vZGUqIG11bCkKICAgICB7Ci0gICAgICAgIEFTU0VSVChtdWwub3AoKSA9PSBBcml0
aE11bCk7CisgICAgICAgIEFTU0VSVChtdWwtPm9wKCkgPT0gQXJpdGhNdWwpOwogICAgICAgICAK
LSAgICAgICAgTm9kZSYgbGVmdCA9IGF0KG11bC5jaGlsZDEoKSk7Ci0gICAgICAgIE5vZGUmIHJp
Z2h0ID0gYXQobXVsLmNoaWxkMigpKTsKKyAgICAgICAgTm9kZSogbGVmdCA9IG11bC0+Y2hpbGQx
KCkubm9kZSgpOworICAgICAgICBOb2RlKiByaWdodCA9IG11bC0+Y2hpbGQyKCkubm9kZSgpOwog
ICAgICAgICAKICAgICAgICAgcmV0dXJuIE5vZGU6OnNob3VsZFNwZWN1bGF0ZUludGVnZXJGb3JB
cml0aG1ldGljKGxlZnQsIHJpZ2h0KSAmJiBtdWwuY2FuU3BlY3VsYXRlSW50ZWdlcigpOwogICAg
IH0KICAgICAKLSAgICBib29sIG5lZ2F0ZVNob3VsZFNwZWN1bGF0ZUludGVnZXIoTm9kZSYgbmVn
YXRlKQorICAgIGJvb2wgbmVnYXRlU2hvdWxkU3BlY3VsYXRlSW50ZWdlcihOb2RlKiBuZWdhdGUp
CiAgICAgewotICAgICAgICBBU1NFUlQobmVnYXRlLm9wKCkgPT0gQXJpdGhOZWdhdGUpOwotICAg
ICAgICByZXR1cm4gYXQobmVnYXRlLmNoaWxkMSgpKS5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyRm9y
QXJpdGhtZXRpYygpICYmIG5lZ2F0ZS5jYW5TcGVjdWxhdGVJbnRlZ2VyKCk7CisgICAgICAgIEFT
U0VSVChuZWdhdGUtPm9wKCkgPT0gQXJpdGhOZWdhdGUpOworICAgICAgICByZXR1cm4gbmVnYXRl
LT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlSW50ZWdlckZvckFyaXRobWV0aWMoKSAmJiBuZWdh
dGUtPmNhblNwZWN1bGF0ZUludGVnZXIoKTsKICAgICB9CiAgICAgCi0gICAgYm9vbCBhZGRTaG91
bGRTcGVjdWxhdGVJbnRlZ2VyKE5vZGVJbmRleCBub2RlSW5kZXgpCisgICAgYm9vbCBhZGRTaG91
bGRTcGVjdWxhdGVJbnRlZ2VyKE5vZGUqIG5vZGUpCiAgICAgewotICAgICAgICByZXR1cm4gYWRk
U2hvdWxkU3BlY3VsYXRlSW50ZWdlcihhdChub2RlSW5kZXgpKTsKKyAgICAgICAgcmV0dXJuIGFk
ZFNob3VsZFNwZWN1bGF0ZUludGVnZXIobm9kZSk7CiAgICAgfQogICAgIAogICAgIC8vIEhlbHBl
ciBtZXRob2RzIHRvIGNoZWNrIG5vZGVzIGZvciBjb25zdGFudHMuCi0gICAgYm9vbCBpc0NvbnN0
YW50KE5vZGVJbmRleCBub2RlSW5kZXgpCisgICAgYm9vbCBpc0NvbnN0YW50KE5vZGUqIG5vZGUp
CiAgICAgewotICAgICAgICByZXR1cm4gYXQobm9kZUluZGV4KS5oYXNDb25zdGFudCgpOworICAg
ICAgICByZXR1cm4gbm9kZS0+aGFzQ29uc3RhbnQoKTsKICAgICB9Ci0gICAgYm9vbCBpc0pTQ29u
c3RhbnQoTm9kZUluZGV4IG5vZGVJbmRleCkKKyAgICBib29sIGlzSlNDb25zdGFudChOb2RlKiBu
b2RlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGF0KG5vZGVJbmRleCkuaGFzQ29uc3RhbnQoKTsK
KyAgICAgICAgcmV0dXJuIG5vZGUtPmhhc0NvbnN0YW50KCk7CiAgICAgfQotICAgIGJvb2wgaXNJ
bnQzMkNvbnN0YW50KE5vZGVJbmRleCBub2RlSW5kZXgpCisgICAgYm9vbCBpc0ludDMyQ29uc3Rh
bnQoTm9kZSogbm9kZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBhdChub2RlSW5kZXgpLmlzSW50
MzJDb25zdGFudChtX2NvZGVCbG9jayk7CisgICAgICAgIHJldHVybiBub2RlLT5pc0ludDMyQ29u
c3RhbnQobV9jb2RlQmxvY2spOwogICAgIH0KLSAgICBib29sIGlzRG91YmxlQ29uc3RhbnQoTm9k
ZUluZGV4IG5vZGVJbmRleCkKKyAgICBib29sIGlzRG91YmxlQ29uc3RhbnQoTm9kZSogbm9kZSkK
ICAgICB7Ci0gICAgICAgIHJldHVybiBhdChub2RlSW5kZXgpLmlzRG91YmxlQ29uc3RhbnQobV9j
b2RlQmxvY2spOworICAgICAgICByZXR1cm4gbm9kZS0+aXNEb3VibGVDb25zdGFudChtX2NvZGVC
bG9jayk7CiAgICAgfQotICAgIGJvb2wgaXNOdW1iZXJDb25zdGFudChOb2RlSW5kZXggbm9kZUlu
ZGV4KQorICAgIGJvb2wgaXNOdW1iZXJDb25zdGFudChOb2RlKiBub2RlKQogICAgIHsKLSAgICAg
ICAgcmV0dXJuIGF0KG5vZGVJbmRleCkuaXNOdW1iZXJDb25zdGFudChtX2NvZGVCbG9jayk7Cisg
ICAgICAgIHJldHVybiBub2RlLT5pc051bWJlckNvbnN0YW50KG1fY29kZUJsb2NrKTsKICAgICB9
Ci0gICAgYm9vbCBpc0Jvb2xlYW5Db25zdGFudChOb2RlSW5kZXggbm9kZUluZGV4KQorICAgIGJv
b2wgaXNCb29sZWFuQ29uc3RhbnQoTm9kZSogbm9kZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBh
dChub2RlSW5kZXgpLmlzQm9vbGVhbkNvbnN0YW50KG1fY29kZUJsb2NrKTsKKyAgICAgICAgcmV0
dXJuIG5vZGUtPmlzQm9vbGVhbkNvbnN0YW50KG1fY29kZUJsb2NrKTsKICAgICB9Ci0gICAgYm9v
bCBpc0NlbGxDb25zdGFudChOb2RlSW5kZXggbm9kZUluZGV4KQorICAgIGJvb2wgaXNDZWxsQ29u
c3RhbnQoTm9kZSogbm9kZSkKICAgICB7Ci0gICAgICAgIGlmICghaXNKU0NvbnN0YW50KG5vZGVJ
bmRleCkpCisgICAgICAgIGlmICghaXNKU0NvbnN0YW50KG5vZGUpKQogICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgICAgICBKU1ZhbHVlIHZhbHVlID0gdmFsdWVPZkpTQ29uc3RhbnQobm9k
ZUluZGV4KTsKKyAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IHZhbHVlT2ZKU0NvbnN0YW50KG5vZGUp
OwogICAgICAgICByZXR1cm4gdmFsdWUuaXNDZWxsKCkgJiYgISF2YWx1ZTsKICAgICB9Ci0gICAg
Ym9vbCBpc0Z1bmN0aW9uQ29uc3RhbnQoTm9kZUluZGV4IG5vZGVJbmRleCkKKyAgICBib29sIGlz
RnVuY3Rpb25Db25zdGFudChOb2RlKiBub2RlKQogICAgIHsKLSAgICAgICAgaWYgKCFpc0pTQ29u
c3RhbnQobm9kZUluZGV4KSkKKyAgICAgICAgaWYgKCFpc0pTQ29uc3RhbnQobm9kZSkpCiAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmICghZ2V0SlNGdW5jdGlvbih2YWx1ZU9m
SlNDb25zdGFudChub2RlSW5kZXgpKSkKKyAgICAgICAgaWYgKCFnZXRKU0Z1bmN0aW9uKHZhbHVl
T2ZKU0NvbnN0YW50KG5vZGUpKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgfQotICAgIGJvb2wgaXNJbnRlcm5hbEZ1bmN0aW9uQ29uc3RhbnQo
Tm9kZUluZGV4IG5vZGVJbmRleCkKKyAgICBib29sIGlzSW50ZXJuYWxGdW5jdGlvbkNvbnN0YW50
KE5vZGUqIG5vZGUpCiAgICAgewotICAgICAgICBpZiAoIWlzSlNDb25zdGFudChub2RlSW5kZXgp
KQorICAgICAgICBpZiAoIWlzSlNDb25zdGFudChub2RlKSkKICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IHZhbHVlT2ZKU0NvbnN0YW50KG5vZGVJbmRl
eCk7CisgICAgICAgIEpTVmFsdWUgdmFsdWUgPSB2YWx1ZU9mSlNDb25zdGFudChub2RlKTsKICAg
ICAgICAgaWYgKCF2YWx1ZS5pc0NlbGwoKSB8fCAhdmFsdWUpCiAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgICAgIEpTQ2VsbCogY2VsbCA9IHZhbHVlLmFzQ2VsbCgpOwpAQCAtMzQ2LDI1
ICszMjcsMjUgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgLy8g
SGVscGVyIG1ldGhvZHMgZ2V0IGNvbnN0YW50IHZhbHVlcyBmcm9tIG5vZGVzLgotICAgIEpTVmFs
dWUgdmFsdWVPZkpTQ29uc3RhbnQoTm9kZUluZGV4IG5vZGVJbmRleCkKKyAgICBKU1ZhbHVlIHZh
bHVlT2ZKU0NvbnN0YW50KE5vZGUqIG5vZGUpCiAgICAgewotICAgICAgICByZXR1cm4gYXQobm9k
ZUluZGV4KS52YWx1ZU9mSlNDb25zdGFudChtX2NvZGVCbG9jayk7CisgICAgICAgIHJldHVybiBu
b2RlLT52YWx1ZU9mSlNDb25zdGFudChtX2NvZGVCbG9jayk7CiAgICAgfQotICAgIGludDMyX3Qg
dmFsdWVPZkludDMyQ29uc3RhbnQoTm9kZUluZGV4IG5vZGVJbmRleCkKKyAgICBpbnQzMl90IHZh
bHVlT2ZJbnQzMkNvbnN0YW50KE5vZGUqIG5vZGUpCiAgICAgewotICAgICAgICByZXR1cm4gdmFs
dWVPZkpTQ29uc3RhbnQobm9kZUluZGV4KS5hc0ludDMyKCk7CisgICAgICAgIHJldHVybiB2YWx1
ZU9mSlNDb25zdGFudChub2RlKS5hc0ludDMyKCk7CiAgICAgfQotICAgIGRvdWJsZSB2YWx1ZU9m
TnVtYmVyQ29uc3RhbnQoTm9kZUluZGV4IG5vZGVJbmRleCkKKyAgICBkb3VibGUgdmFsdWVPZk51
bWJlckNvbnN0YW50KE5vZGUqIG5vZGUpCiAgICAgewotICAgICAgICByZXR1cm4gdmFsdWVPZkpT
Q29uc3RhbnQobm9kZUluZGV4KS5hc051bWJlcigpOworICAgICAgICByZXR1cm4gdmFsdWVPZkpT
Q29uc3RhbnQobm9kZSkuYXNOdW1iZXIoKTsKICAgICB9Ci0gICAgYm9vbCB2YWx1ZU9mQm9vbGVh
bkNvbnN0YW50KE5vZGVJbmRleCBub2RlSW5kZXgpCisgICAgYm9vbCB2YWx1ZU9mQm9vbGVhbkNv
bnN0YW50KE5vZGUqIG5vZGUpCiAgICAgewotICAgICAgICByZXR1cm4gdmFsdWVPZkpTQ29uc3Rh
bnQobm9kZUluZGV4KS5hc0Jvb2xlYW4oKTsKKyAgICAgICAgcmV0dXJuIHZhbHVlT2ZKU0NvbnN0
YW50KG5vZGUpLmFzQm9vbGVhbigpOwogICAgIH0KLSAgICBKU0Z1bmN0aW9uKiB2YWx1ZU9mRnVu
Y3Rpb25Db25zdGFudChOb2RlSW5kZXggbm9kZUluZGV4KQorICAgIEpTRnVuY3Rpb24qIHZhbHVl
T2ZGdW5jdGlvbkNvbnN0YW50KE5vZGUqIG5vZGUpCiAgICAgewotICAgICAgICBKU0NlbGwqIGZ1
bmN0aW9uID0gZ2V0SlNGdW5jdGlvbih2YWx1ZU9mSlNDb25zdGFudChub2RlSW5kZXgpKTsKKyAg
ICAgICAgSlNDZWxsKiBmdW5jdGlvbiA9IGdldEpTRnVuY3Rpb24odmFsdWVPZkpTQ29uc3RhbnQo
bm9kZSkpOwogICAgICAgICBBU1NFUlQoZnVuY3Rpb24pOwogICAgICAgICByZXR1cm4ganNDYXN0
PEpTRnVuY3Rpb24qPihmdW5jdGlvbik7CiAgICAgfQpAQCAtNDM5LDQ1ICs0MjAsNDMgQEAgcHVi
bGljOgogICAgICAgICByZXR1cm4gbV9jb2RlQmxvY2stPnVuY2hlY2tlZEFjdGl2YXRpb25SZWdp
c3RlcigpOwogICAgIH0KICAgICAKLSAgICBWYWx1ZVByb2ZpbGUqIHZhbHVlUHJvZmlsZUZvcihO
b2RlSW5kZXggbm9kZUluZGV4KQorICAgIFZhbHVlUHJvZmlsZSogdmFsdWVQcm9maWxlRm9yKE5v
ZGUqIG5vZGUpCiAgICAgewotICAgICAgICBpZiAobm9kZUluZGV4ID09IE5vTm9kZSkKKyAgICAg
ICAgaWYgKCFub2RlKQogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIAotICAgICAgICBO
b2RlJiBub2RlID0gYXQobm9kZUluZGV4KTsKLSAgICAgICAgQ29kZUJsb2NrKiBwcm9maWxlZEJs
b2NrID0gYmFzZWxpbmVDb2RlQmxvY2tGb3Iobm9kZS5jb2RlT3JpZ2luKTsKKyAgICAgICAgQ29k
ZUJsb2NrKiBwcm9maWxlZEJsb2NrID0gYmFzZWxpbmVDb2RlQmxvY2tGb3Iobm9kZS0+Y29kZU9y
aWdpbik7CiAgICAgICAgIAotICAgICAgICBpZiAobm9kZS5oYXNMb2NhbCgpKSB7Ci0gICAgICAg
ICAgICBpZiAoIW9wZXJhbmRJc0FyZ3VtZW50KG5vZGUubG9jYWwoKSkpCisgICAgICAgIGlmIChu
b2RlLT5oYXNMb2NhbCgpKSB7CisgICAgICAgICAgICBpZiAoIW9wZXJhbmRJc0FyZ3VtZW50KG5v
ZGUtPmxvY2FsKCkpKQogICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgaW50
IGFyZ3VtZW50ID0gb3BlcmFuZFRvQXJndW1lbnQobm9kZS5sb2NhbCgpKTsKLSAgICAgICAgICAg
IGlmIChub2RlLnZhcmlhYmxlQWNjZXNzRGF0YSgpICE9IGF0KG1fYXJndW1lbnRzW2FyZ3VtZW50
XSkudmFyaWFibGVBY2Nlc3NEYXRhKCkpCisgICAgICAgICAgICBpbnQgYXJndW1lbnQgPSBvcGVy
YW5kVG9Bcmd1bWVudChub2RlLT5sb2NhbCgpKTsKKyAgICAgICAgICAgIGlmIChub2RlLT52YXJp
YWJsZUFjY2Vzc0RhdGEoKSAhPSBtX2FyZ3VtZW50c1thcmd1bWVudF0tPnZhcmlhYmxlQWNjZXNz
RGF0YSgpKQogICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAgcmV0dXJuIHBy
b2ZpbGVkQmxvY2stPnZhbHVlUHJvZmlsZUZvckFyZ3VtZW50KGFyZ3VtZW50KTsKICAgICAgICAg
fQogICAgICAgICAKLSAgICAgICAgaWYgKG5vZGUuaGFzSGVhcFByZWRpY3Rpb24oKSkKLSAgICAg
ICAgICAgIHJldHVybiBwcm9maWxlZEJsb2NrLT52YWx1ZVByb2ZpbGVGb3JCeXRlY29kZU9mZnNl
dChub2RlLmNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleEZvclZhbHVlUHJvZmlsZSgpKTsKKyAgICAg
ICAgaWYgKG5vZGUtPmhhc0hlYXBQcmVkaWN0aW9uKCkpCisgICAgICAgICAgICByZXR1cm4gcHJv
ZmlsZWRCbG9jay0+dmFsdWVQcm9maWxlRm9yQnl0ZWNvZGVPZmZzZXQobm9kZS0+Y29kZU9yaWdp
bi5ieXRlY29kZUluZGV4Rm9yVmFsdWVQcm9maWxlKCkpOwogICAgICAgICAKICAgICAgICAgcmV0
dXJuIDA7CiAgICAgfQogICAgIAotICAgIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUgbWV0
aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZUZvcihOb2RlSW5kZXggbm9kZUluZGV4KQorICAgIE1l
dGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUgbWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZUZv
cihOb2RlKiBub2RlKQogICAgIHsKLSAgICAgICAgaWYgKG5vZGVJbmRleCA9PSBOb05vZGUpCisg
ICAgICAgIGlmICghbm9kZSkKICAgICAgICAgICAgIHJldHVybiBNZXRob2RPZkdldHRpbmdBVmFs
dWVQcm9maWxlKCk7CiAgICAgICAgIAotICAgICAgICBOb2RlJiBub2RlID0gYXQobm9kZUluZGV4
KTsKLSAgICAgICAgQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrID0gYmFzZWxpbmVDb2RlQmxvY2tG
b3Iobm9kZS5jb2RlT3JpZ2luKTsKKyAgICAgICAgQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrID0g
YmFzZWxpbmVDb2RlQmxvY2tGb3Iobm9kZS0+Y29kZU9yaWdpbik7CiAgICAgICAgIAotICAgICAg
ICBpZiAobm9kZS5vcCgpID09IEdldExvY2FsKSB7CisgICAgICAgIGlmIChub2RlLT5vcCgpID09
IEdldExvY2FsKSB7CiAgICAgICAgICAgICByZXR1cm4gTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJv
ZmlsZTo6ZnJvbUxhenlPcGVyYW5kKAogICAgICAgICAgICAgICAgIHByb2ZpbGVkQmxvY2ssCiAg
ICAgICAgICAgICAgICAgTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVLZXkoCi0gICAgICAgICAgICAg
ICAgICAgIG5vZGUuY29kZU9yaWdpbi5ieXRlY29kZUluZGV4LCBub2RlLmxvY2FsKCkpKTsKKyAg
ICAgICAgICAgICAgICAgICAgbm9kZS0+Y29kZU9yaWdpbi5ieXRlY29kZUluZGV4LCBub2RlLT5s
b2NhbCgpKSk7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIHJldHVybiBNZXRob2RPZkdl
dHRpbmdBVmFsdWVQcm9maWxlKHZhbHVlUHJvZmlsZUZvcihub2RlSW5kZXgpKTsKKyAgICAgICAg
cmV0dXJuIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUodmFsdWVQcm9maWxlRm9yKG5vZGUp
KTsKICAgICB9CiAgICAgCiAgICAgYm9vbCBuZWVkc0FjdGl2YXRpb24oKSBjb25zdApAQCAtNTAx
LDIxICs0ODAsMjEgQEAgcHVibGljOgogICAgIAogICAgIHVuc2lnbmVkIG51bVN1Y2Nlc3NvcnMo
QmFzaWNCbG9jayogYmxvY2spCiAgICAgewotICAgICAgICByZXR1cm4gYXQoYmxvY2stPmxhc3Qo
KSkubnVtU3VjY2Vzc29ycygpOworICAgICAgICByZXR1cm4gYmxvY2stPmxhc3QoKS0+bnVtU3Vj
Y2Vzc29ycygpOwogICAgIH0KICAgICBCbG9ja0luZGV4IHN1Y2Nlc3NvcihCYXNpY0Jsb2NrKiBi
bG9jaywgdW5zaWduZWQgaW5kZXgpCiAgICAgewotICAgICAgICByZXR1cm4gYXQoYmxvY2stPmxh
c3QoKSkuc3VjY2Vzc29yKGluZGV4KTsKKyAgICAgICAgcmV0dXJuIGJsb2NrLT5sYXN0KCktPnN1
Y2Nlc3NvcihpbmRleCk7CiAgICAgfQogICAgIEJsb2NrSW5kZXggc3VjY2Vzc29yRm9yQ29uZGl0
aW9uKEJhc2ljQmxvY2sqIGJsb2NrLCBib29sIGNvbmRpdGlvbikKICAgICB7Ci0gICAgICAgIHJl
dHVybiBhdChibG9jay0+bGFzdCgpKS5zdWNjZXNzb3JGb3JDb25kaXRpb24oY29uZGl0aW9uKTsK
KyAgICAgICAgcmV0dXJuIGJsb2NrLT5sYXN0KCktPnN1Y2Nlc3NvckZvckNvbmRpdGlvbihjb25k
aXRpb24pOwogICAgIH0KICAgICAKLSAgICBib29sIGlzUHJlZGljdGVkTnVtZXJpY2FsKE5vZGUm
IG5vZGUpCisgICAgYm9vbCBpc1ByZWRpY3RlZE51bWVyaWNhbChOb2RlKiBub2RlKQogICAgIHsK
LSAgICAgICAgU3BlY3VsYXRlZFR5cGUgbGVmdCA9IGF0KG5vZGUuY2hpbGQxKCkpLnByZWRpY3Rp
b24oKTsKLSAgICAgICAgU3BlY3VsYXRlZFR5cGUgcmlnaHQgPSBhdChub2RlLmNoaWxkMigpKS5w
cmVkaWN0aW9uKCk7CisgICAgICAgIFNwZWN1bGF0ZWRUeXBlIGxlZnQgPSBub2RlLT5jaGlsZDEo
KS0+cHJlZGljdGlvbigpOworICAgICAgICBTcGVjdWxhdGVkVHlwZSByaWdodCA9IG5vZGUtPmNo
aWxkMigpLT5wcmVkaWN0aW9uKCk7CiAgICAgICAgIHJldHVybiBpc051bWJlclNwZWN1bGF0aW9u
KGxlZnQpICYmIGlzTnVtYmVyU3BlY3VsYXRpb24ocmlnaHQpOwogICAgIH0KICAgICAKQEAgLTUy
NSwyMyArNTA0LDIzIEBAIHB1YmxpYzoKICAgICAvLyAtIFB1dEJ5VmFsIGRlZmluaXRlbHkgY2hh
bmdlcyB0aGUgYXJyYXkgaXQgc3RvcmVzIHRvLCBhbmQgbWF5IGV2ZW4gY2hhbmdlIGl0cyBsZW5n
dGguCiAgICAgLy8gLSBQdXRCeU9mZnNldCBkZWZpbml0ZWx5IGNoYW5nZXMgdGhlIG9iamVjdCBp
dCBzdG9yZXMgdG8uCiAgICAgLy8gLSBhbmQgc28gb24uCi0gICAgYm9vbCBieVZhbElzUHVyZShO
b2RlJiBub2RlKQorICAgIGJvb2wgYnlWYWxJc1B1cmUoTm9kZSogbm9kZSkKICAgICB7Ci0gICAg
ICAgIHN3aXRjaCAobm9kZS5hcnJheU1vZGUoKS50eXBlKCkpIHsKKyAgICAgICAgc3dpdGNoIChu
b2RlLT5hcnJheU1vZGUoKS50eXBlKCkpIHsKICAgICAgICAgY2FzZSBBcnJheTo6R2VuZXJpYzoK
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgY2FzZSBBcnJheTo6SW50MzI6CiAg
ICAgICAgIGNhc2UgQXJyYXk6OkRvdWJsZToKICAgICAgICAgY2FzZSBBcnJheTo6Q29udGlndW91
czoKICAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlTdG9yYWdlOgotICAgICAgICAgICAgcmV0dXJu
ICFub2RlLmFycmF5TW9kZSgpLmlzT3V0T2ZCb3VuZHMoKTsKKyAgICAgICAgICAgIHJldHVybiAh
bm9kZS0+YXJyYXlNb2RlKCkuaXNPdXRPZkJvdW5kcygpOwogICAgICAgICBjYXNlIEFycmF5OjpT
bG93UHV0QXJyYXlTdG9yYWdlOgotICAgICAgICAgICAgcmV0dXJuICFub2RlLmFycmF5TW9kZSgp
Lm1heVN0b3JlVG9Ib2xlKCk7CisgICAgICAgICAgICByZXR1cm4gIW5vZGUtPmFycmF5TW9kZSgp
Lm1heVN0b3JlVG9Ib2xlKCk7CiAgICAgICAgIGNhc2UgQXJyYXk6OlN0cmluZzoKLSAgICAgICAg
ICAgIHJldHVybiBub2RlLm9wKCkgPT0gR2V0QnlWYWw7CisgICAgICAgICAgICByZXR1cm4gbm9k
ZS0+b3AoKSA9PSBHZXRCeVZhbDsKICNpZiBVU0UoSlNWQUxVRTMyXzY0KQogICAgICAgICBjYXNl
IEFycmF5OjpBcmd1bWVudHM6Ci0gICAgICAgICAgICBpZiAobm9kZS5vcCgpID09IEdldEJ5VmFs
KQorICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gR2V0QnlWYWwpCiAgICAgICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAjZW5kaWYgLy8gVVNF
KEpTVkFMVUUzMl82NCkKQEAgLTU1MCwxMyArNTI5LDEzIEBAIHB1YmxpYzoKICAgICAgICAgfQog
ICAgIH0KICAgICAKLSAgICBib29sIGNsb2JiZXJzV29ybGQoTm9kZSYgbm9kZSkKKyAgICBib29s
IGNsb2JiZXJzV29ybGQoTm9kZSogbm9kZSkKICAgICB7Ci0gICAgICAgIGlmIChub2RlLmZsYWdz
KCkgJiBOb2RlQ2xvYmJlcnNXb3JsZCkKKyAgICAgICAgaWYgKG5vZGUtPmZsYWdzKCkgJiBOb2Rl
Q2xvYmJlcnNXb3JsZCkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBpZiAoIShu
b2RlLmZsYWdzKCkgJiBOb2RlTWlnaHRDbG9iYmVyKSkKKyAgICAgICAgaWYgKCEobm9kZS0+Zmxh
Z3MoKSAmIE5vZGVNaWdodENsb2JiZXIpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgICBzd2l0Y2ggKG5vZGUub3AoKSkgeworICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsK
ICAgICAgICAgY2FzZSBWYWx1ZUFkZDoKICAgICAgICAgY2FzZSBDb21wYXJlTGVzczoKICAgICAg
ICAgY2FzZSBDb21wYXJlTGVzc0VxOgpAQCAtNTc0LDkgKzU1Myw5IEBAIHB1YmxpYzoKICAgICAg
ICAgfQogICAgIH0KICAgICAKLSAgICBib29sIGNsb2JiZXJzV29ybGQoTm9kZUluZGV4IG5vZGVJ
bmRleCkKKyAgICBib29sIGNsb2JiZXJzV29ybGQoTm9kZSogbm9kZSkKICAgICB7Ci0gICAgICAg
IHJldHVybiBjbG9iYmVyc1dvcmxkKGF0KG5vZGVJbmRleCkpOworICAgICAgICByZXR1cm4gY2xv
YmJlcnNXb3JsZChub2RlKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBkZXRlcm1pbmVSZWFjaGFi
aWxpdHkoKTsKQEAgLTU4NCw1MiArNTYzLDU3IEBAIHB1YmxpYzoKICAgICAKICAgICB2b2lkIHJl
c2V0RXhpdFN0YXRlcygpOwogICAgIAotICAgIHVuc2lnbmVkIHZhckFyZ051bUNoaWxkcmVuKE5v
ZGUmIG5vZGUpCisgICAgdW5zaWduZWQgdmFyQXJnTnVtQ2hpbGRyZW4oTm9kZSogbm9kZSkKICAg
ICB7Ci0gICAgICAgIEFTU0VSVChub2RlLmZsYWdzKCkgJiBOb2RlSGFzVmFyQXJncyk7Ci0gICAg
ICAgIHJldHVybiBub2RlLm51bUNoaWxkcmVuKCk7CisgICAgICAgIEFTU0VSVChub2RlLT5mbGFn
cygpICYgTm9kZUhhc1ZhckFyZ3MpOworICAgICAgICByZXR1cm4gbm9kZS0+bnVtQ2hpbGRyZW4o
KTsKICAgICB9CiAgICAgCi0gICAgdW5zaWduZWQgbnVtQ2hpbGRyZW4oTm9kZSYgbm9kZSkKKyAg
ICB1bnNpZ25lZCBudW1DaGlsZHJlbihOb2RlKiBub2RlKQogICAgIHsKLSAgICAgICAgaWYgKG5v
ZGUuZmxhZ3MoKSAmIE5vZGVIYXNWYXJBcmdzKQorICAgICAgICBpZiAobm9kZS0+ZmxhZ3MoKSAm
IE5vZGVIYXNWYXJBcmdzKQogICAgICAgICAgICAgcmV0dXJuIHZhckFyZ051bUNoaWxkcmVuKG5v
ZGUpOwogICAgICAgICByZXR1cm4gQWRqYWNlbmN5TGlzdDo6U2l6ZTsKICAgICB9CiAgICAgCi0g
ICAgRWRnZSYgdmFyQXJnQ2hpbGQoTm9kZSYgbm9kZSwgdW5zaWduZWQgaW5kZXgpCisgICAgRWRn
ZSYgdmFyQXJnQ2hpbGQoTm9kZSogbm9kZSwgdW5zaWduZWQgaW5kZXgpCiAgICAgewotICAgICAg
ICBBU1NFUlQobm9kZS5mbGFncygpICYgTm9kZUhhc1ZhckFyZ3MpOwotICAgICAgICByZXR1cm4g
bV92YXJBcmdDaGlsZHJlbltub2RlLmZpcnN0Q2hpbGQoKSArIGluZGV4XTsKKyAgICAgICAgQVNT
RVJUKG5vZGUtPmZsYWdzKCkgJiBOb2RlSGFzVmFyQXJncyk7CisgICAgICAgIHJldHVybiBtX3Zh
ckFyZ0NoaWxkcmVuW25vZGUtPmZpcnN0Q2hpbGQoKSArIGluZGV4XTsKICAgICB9CiAgICAgCi0g
ICAgRWRnZSYgY2hpbGQoTm9kZSYgbm9kZSwgdW5zaWduZWQgaW5kZXgpCisgICAgRWRnZSYgY2hp
bGQoTm9kZSogbm9kZSwgdW5zaWduZWQgaW5kZXgpCiAgICAgewotICAgICAgICBpZiAobm9kZS5m
bGFncygpICYgTm9kZUhhc1ZhckFyZ3MpCisgICAgICAgIGlmIChub2RlLT5mbGFncygpICYgTm9k
ZUhhc1ZhckFyZ3MpCiAgICAgICAgICAgICByZXR1cm4gdmFyQXJnQ2hpbGQobm9kZSwgaW5kZXgp
OwotICAgICAgICByZXR1cm4gbm9kZS5jaGlsZHJlbi5jaGlsZChpbmRleCk7CisgICAgICAgIHJl
dHVybiBub2RlLT5jaGlsZHJlbi5jaGlsZChpbmRleCk7CiAgICAgfQogICAgIAotICAgIHZvaWQg
dm90ZShFZGdlIGVkZ2UsIHVuc2lnbmVkIGJhbGxvdCkKKyAgICB2b2lkIHZvdGVOb2RlKE5vZGUq
IG5vZGUsIHVuc2lnbmVkIGJhbGxvdCkKICAgICB7Ci0gICAgICAgIHN3aXRjaCAoYXQoZWRnZSku
b3AoKSkgeworICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKICAgICAgICAgY2FzZSBWYWx1
ZVRvSW50MzI6CiAgICAgICAgIGNhc2UgVUludDMyVG9OdW1iZXI6Ci0gICAgICAgICAgICBlZGdl
ID0gYXQoZWRnZSkuY2hpbGQxKCk7CisgICAgICAgICAgICBub2RlID0gbm9kZS0+Y2hpbGQxKCku
bm9kZSgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgaWYgKGF0KGVkZ2UpLm9wKCkg
PT0gR2V0TG9jYWwpCi0gICAgICAgICAgICBhdChlZGdlKS52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+
dm90ZShiYWxsb3QpOworICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBHZXRMb2NhbCkKKyAgICAg
ICAgICAgIG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT52b3RlKGJhbGxvdCk7CisgICAgfQor
ICAgIAorICAgIHZvaWQgdm90ZU5vZGUoRWRnZSBlZGdlLCB1bnNpZ25lZCBiYWxsb3QpCisgICAg
eworICAgICAgICB2b3RlTm9kZShlZGdlLm5vZGUoKSwgYmFsbG90KTsKICAgICB9CiAgICAgCi0g
ICAgdm9pZCB2b3RlKE5vZGUmIG5vZGUsIHVuc2lnbmVkIGJhbGxvdCkKKyAgICB2b2lkIHZvdGVD
aGlsZHJlbihOb2RlKiBub2RlLCB1bnNpZ25lZCBiYWxsb3QpCiAgICAgewotICAgICAgICBpZiAo
bm9kZS5mbGFncygpICYgTm9kZUhhc1ZhckFyZ3MpIHsKLSAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgY2hpbGRJZHggPSBub2RlLmZpcnN0Q2hpbGQoKTsKLSAgICAgICAgICAgICAgICAgY2hpbGRJ
ZHggPCBub2RlLmZpcnN0Q2hpbGQoKSArIG5vZGUubnVtQ2hpbGRyZW4oKTsKKyAgICAgICAgaWYg
KG5vZGUtPmZsYWdzKCkgJiBOb2RlSGFzVmFyQXJncykgeworICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBjaGlsZElkeCA9IG5vZGUtPmZpcnN0Q2hpbGQoKTsKKyAgICAgICAgICAgICAgICAgY2hp
bGRJZHggPCBub2RlLT5maXJzdENoaWxkKCkgKyBub2RlLT5udW1DaGlsZHJlbigpOwogICAgICAg
ICAgICAgICAgICBjaGlsZElkeCsrKSB7CiAgICAgICAgICAgICAgICAgaWYgKCEhbV92YXJBcmdD
aGlsZHJlbltjaGlsZElkeF0pCiAgICAgICAgICAgICAgICAgICAgIHZvdGUobV92YXJBcmdDaGls
ZHJlbltjaGlsZElkeF0sIGJhbGxvdCk7CkBAIC02MzcsMzkgKzYyMSwzOCBAQCBwdWJsaWM6CiAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIGlmICghbm9k
ZS5jaGlsZDEoKSkKKyAgICAgICAgaWYgKCFub2RlLT5jaGlsZDEoKSkKICAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgdm90ZShub2RlLmNoaWxkMSgpLCBiYWxsb3QpOwotICAgICAgICBpZiAo
IW5vZGUuY2hpbGQyKCkpCisgICAgICAgIHZvdGUobm9kZS0+Y2hpbGQxKCksIGJhbGxvdCk7Cisg
ICAgICAgIGlmICghbm9kZS0+Y2hpbGQyKCkpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IHZvdGUobm9kZS5jaGlsZDIoKSwgYmFsbG90KTsKLSAgICAgICAgaWYgKCFub2RlLmNoaWxkMygp
KQorICAgICAgICB2b3RlKG5vZGUtPmNoaWxkMigpLCBiYWxsb3QpOworICAgICAgICBpZiAoIW5v
ZGUtPmNoaWxkMygpKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB2b3RlKG5vZGUuY2hp
bGQzKCksIGJhbGxvdCk7CisgICAgICAgIHZvdGUobm9kZS0+Y2hpbGQzKCksIGJhbGxvdCk7CiAg
ICAgfQogICAgIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IC8vIFQgPSBOb2RlSW5kZXggb3Ig
RWRnZQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IC8vIFQgPSBOb2RlKiBvciBFZGdlCiAgICAg
dm9pZCBzdWJzdGl0dXRlKEJhc2ljQmxvY2smIGJsb2NrLCB1bnNpZ25lZCBzdGFydEluZGV4SW5C
bG9jaywgVCBvbGRUaGluZywgVCBuZXdUaGluZykKICAgICB7CiAgICAgICAgIGZvciAodW5zaWdu
ZWQgaW5kZXhJbkJsb2NrID0gc3RhcnRJbmRleEluQmxvY2s7IGluZGV4SW5CbG9jayA8IGJsb2Nr
LnNpemUoKTsgKytpbmRleEluQmxvY2spIHsKLSAgICAgICAgICAgIE5vZGVJbmRleCBub2RlSW5k
ZXggPSBibG9ja1tpbmRleEluQmxvY2tdOwotICAgICAgICAgICAgTm9kZSYgbm9kZSA9IGF0KG5v
ZGVJbmRleCk7Ci0gICAgICAgICAgICBpZiAobm9kZS5mbGFncygpICYgTm9kZUhhc1ZhckFyZ3Mp
IHsKLSAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGNoaWxkSWR4ID0gbm9kZS5maXJzdENo
aWxkKCk7IGNoaWxkSWR4IDwgbm9kZS5maXJzdENoaWxkKCkgKyBub2RlLm51bUNoaWxkcmVuKCk7
ICsrY2hpbGRJZHgpIHsKKyAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9ja1tpbmRleEluQmxv
Y2tdOworICAgICAgICAgICAgaWYgKG5vZGUtPmZsYWdzKCkgJiBOb2RlSGFzVmFyQXJncykgewor
ICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgY2hpbGRJZHggPSBub2RlLT5maXJzdENoaWxk
KCk7IGNoaWxkSWR4IDwgbm9kZS0+Zmlyc3RDaGlsZCgpICsgbm9kZS0+bnVtQ2hpbGRyZW4oKTsg
KytjaGlsZElkeCkgewogICAgICAgICAgICAgICAgICAgICBpZiAoISFtX3ZhckFyZ0NoaWxkcmVu
W2NoaWxkSWR4XSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBhcmVBbmRTd2FwKG1fdmFy
QXJnQ2hpbGRyZW5bY2hpbGRJZHhdLCBvbGRUaGluZywgbmV3VGhpbmcsIG5vZGUuc2hvdWxkR2Vu
ZXJhdGUoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBjb21wYXJlQW5kU3dhcChtX3ZhckFy
Z0NoaWxkcmVuW2NoaWxkSWR4XSwgb2xkVGhpbmcsIG5ld1RoaW5nLCBub2RlLT5zaG91bGRHZW5l
cmF0ZSgpKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoIW5vZGUuY2hpbGQxKCkpCisgICAgICAgICAg
ICBpZiAoIW5vZGUtPmNoaWxkMSgpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAg
ICAgICAgY29tcGFyZUFuZFN3YXAobm9kZS5jaGlsZHJlbi5jaGlsZDEoKSwgb2xkVGhpbmcsIG5l
d1RoaW5nLCBub2RlLnNob3VsZEdlbmVyYXRlKCkpOwotICAgICAgICAgICAgaWYgKCFub2RlLmNo
aWxkMigpKQorICAgICAgICAgICAgY29tcGFyZUFuZFN3YXAobm9kZS0+Y2hpbGRyZW4uY2hpbGQx
KCksIG9sZFRoaW5nLCBuZXdUaGluZywgbm9kZS0+c2hvdWxkR2VuZXJhdGUoKSk7CisgICAgICAg
ICAgICBpZiAoIW5vZGUtPmNoaWxkMigpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAg
ICAgICAgICAgY29tcGFyZUFuZFN3YXAobm9kZS5jaGlsZHJlbi5jaGlsZDIoKSwgb2xkVGhpbmcs
IG5ld1RoaW5nLCBub2RlLnNob3VsZEdlbmVyYXRlKCkpOwotICAgICAgICAgICAgaWYgKCFub2Rl
LmNoaWxkMygpKQorICAgICAgICAgICAgY29tcGFyZUFuZFN3YXAobm9kZS0+Y2hpbGRyZW4uY2hp
bGQyKCksIG9sZFRoaW5nLCBuZXdUaGluZywgbm9kZS0+c2hvdWxkR2VuZXJhdGUoKSk7CisgICAg
ICAgICAgICBpZiAoIW5vZGUtPmNoaWxkMygpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwot
ICAgICAgICAgICAgY29tcGFyZUFuZFN3YXAobm9kZS5jaGlsZHJlbi5jaGlsZDMoKSwgb2xkVGhp
bmcsIG5ld1RoaW5nLCBub2RlLnNob3VsZEdlbmVyYXRlKCkpOworICAgICAgICAgICAgY29tcGFy
ZUFuZFN3YXAobm9kZS0+Y2hpbGRyZW4uY2hpbGQzKCksIG9sZFRoaW5nLCBuZXdUaGluZywgbm9k
ZS0+c2hvdWxkR2VuZXJhdGUoKSk7CiAgICAgICAgIH0KICAgICB9CiAgICAgCkBAIC02NzcsMjkg
KzY2MCwyOCBAQCBwdWJsaWM6CiAgICAgLy8gYW55IEdldExvY2FscyBpbiB0aGUgYmFzaWMgYmxv
Y2suCiAgICAgLy8gRklYTUU6IGl0IG1heSBiZSBhcHByb3ByaWF0ZSwgaW4gdGhlIGZ1dHVyZSwg
dG8gZ2VuZXJhbGl6ZSB0aGlzIHRvIGhhbmRsZSBHZXRMb2NhbHMKICAgICAvLyBpbnRyb2R1Y2Vk
IGFueXdoZXJlIGluIHRoZSBiYXNpYyBibG9jay4KLSAgICB2b2lkIHN1YnN0aXR1dGVHZXRMb2Nh
bChCYXNpY0Jsb2NrJiBibG9jaywgdW5zaWduZWQgc3RhcnRJbmRleEluQmxvY2ssIFZhcmlhYmxl
QWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhLCBOb2RlSW5kZXggbmV3R2V0TG9jYWwpCisg
ICAgdm9pZCBzdWJzdGl0dXRlR2V0TG9jYWwoQmFzaWNCbG9jayYgYmxvY2ssIHVuc2lnbmVkIHN0
YXJ0SW5kZXhJbkJsb2NrLCBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSwg
Tm9kZSogbmV3R2V0TG9jYWwpCiAgICAgewogICAgICAgICBpZiAodmFyaWFibGVBY2Nlc3NEYXRh
LT5pc0NhcHR1cmVkKCkpIHsKICAgICAgICAgICAgIC8vIExldCBDU0Ugd29ycnkgYWJvdXQgdGhp
cyBvbmUuCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgZm9yICh1bnNp
Z25lZCBpbmRleEluQmxvY2sgPSBzdGFydEluZGV4SW5CbG9jazsgaW5kZXhJbkJsb2NrIDwgYmxv
Y2suc2l6ZSgpOyArK2luZGV4SW5CbG9jaykgewotICAgICAgICAgICAgTm9kZUluZGV4IG5vZGVJ
bmRleCA9IGJsb2NrW2luZGV4SW5CbG9ja107Ci0gICAgICAgICAgICBOb2RlJiBub2RlID0gYXQo
bm9kZUluZGV4KTsKKyAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9ja1tpbmRleEluQmxvY2td
OwogICAgICAgICAgICAgYm9vbCBzaG91bGRDb250aW51ZSA9IHRydWU7Ci0gICAgICAgICAgICBz
d2l0Y2ggKG5vZGUub3AoKSkgeworICAgICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CiAg
ICAgICAgICAgICBjYXNlIFNldExvY2FsOiB7Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGUubG9j
YWwoKSA9PSB2YXJpYWJsZUFjY2Vzc0RhdGEtPmxvY2FsKCkpCisgICAgICAgICAgICAgICAgaWYg
KG5vZGUtPmxvY2FsKCkgPT0gdmFyaWFibGVBY2Nlc3NEYXRhLT5sb2NhbCgpKQogICAgICAgICAg
ICAgICAgICAgICBzaG91bGRDb250aW51ZSA9IGZhbHNlOwogICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgY2FzZSBHZXRM
b2NhbDogewotICAgICAgICAgICAgICAgIGlmIChub2RlLnZhcmlhYmxlQWNjZXNzRGF0YSgpICE9
IHZhcmlhYmxlQWNjZXNzRGF0YSkKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+dmFyaWFibGVB
Y2Nlc3NEYXRhKCkgIT0gdmFyaWFibGVBY2Nlc3NEYXRhKQogICAgICAgICAgICAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgICAgICAgICBzdWJzdGl0dXRlKGJsb2NrLCBpbmRleEluQmxvY2ss
IG5vZGVJbmRleCwgbmV3R2V0TG9jYWwpOwotICAgICAgICAgICAgICAgIE5vZGVJbmRleCBvbGRU
YWlsSW5kZXggPSBibG9jay52YXJpYWJsZXNBdFRhaWwub3BlcmFuZCh2YXJpYWJsZUFjY2Vzc0Rh
dGEtPmxvY2FsKCkpOwotICAgICAgICAgICAgICAgIGlmIChvbGRUYWlsSW5kZXggPT0gbm9kZUlu
ZGV4KQorICAgICAgICAgICAgICAgIHN1YnN0aXR1dGUoYmxvY2ssIGluZGV4SW5CbG9jaywgbm9k
ZSwgbmV3R2V0TG9jYWwpOworICAgICAgICAgICAgICAgIE5vZGUqIG9sZFRhaWxOb2RlID0gYmxv
Y2sudmFyaWFibGVzQXRUYWlsLm9wZXJhbmQodmFyaWFibGVBY2Nlc3NEYXRhLT5sb2NhbCgpKTsK
KyAgICAgICAgICAgICAgICBpZiAob2xkVGFpbE5vZGUgPT0gbm9kZSkKICAgICAgICAgICAgICAg
ICAgICAgYmxvY2sudmFyaWFibGVzQXRUYWlsLm9wZXJhbmQodmFyaWFibGVBY2Nlc3NEYXRhLT5s
b2NhbCgpKSA9IG5ld0dldExvY2FsOwogICAgICAgICAgICAgICAgIHNob3VsZENvbnRpbnVlID0g
ZmFsc2U7CiAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC03MTcsNiArNjk5LDggQEAgcHVibGlj
OgogICAgIENvZGVCbG9jayogbV9jb2RlQmxvY2s7CiAgICAgUmVmUHRyPFByb2ZpbGVyOjpDb21w
aWxhdGlvbj4gbV9jb21waWxhdGlvbjsKICAgICBDb2RlQmxvY2sqIG1fcHJvZmlsZWRCbG9jazsK
KyAgICAKKyAgICBOb2RlQWxsb2NhdG9yJiBtX2FsbG9jYXRvcjsKIAogICAgIFZlY3RvcjwgT3du
UHRyPEJhc2ljQmxvY2s+ICwgOD4gbV9ibG9ja3M7CiAgICAgVmVjdG9yPEVkZ2UsIDE2PiBtX3Zh
ckFyZ0NoaWxkcmVuOwpAQCAtNzI0LDcgKzcwOCw3IEBAIHB1YmxpYzoKICAgICBWZWN0b3I8UmVz
b2x2ZUdsb2JhbERhdGE+IG1fcmVzb2x2ZUdsb2JhbERhdGE7CiAgICAgVmVjdG9yPFJlc29sdmVP
cGVyYXRpb25EYXRhPiBtX3Jlc29sdmVPcGVyYXRpb25zRGF0YTsKICAgICBWZWN0b3I8UHV0VG9C
YXNlT3BlcmF0aW9uRGF0YT4gbV9wdXRUb0Jhc2VPcGVyYXRpb25EYXRhOwotICAgIFZlY3RvcjxO
b2RlSW5kZXgsIDg+IG1fYXJndW1lbnRzOworICAgIFZlY3RvcjxOb2RlKiwgOD4gbV9hcmd1bWVu
dHM7CiAgICAgU2VnbWVudGVkVmVjdG9yPFZhcmlhYmxlQWNjZXNzRGF0YSwgMTY+IG1fdmFyaWFi
bGVBY2Nlc3NEYXRhOwogICAgIFNlZ21lbnRlZFZlY3RvcjxBcmd1bWVudFBvc2l0aW9uLCA4PiBt
X2FyZ3VtZW50UG9zaXRpb25zOwogICAgIFNlZ21lbnRlZFZlY3RvcjxTdHJ1Y3R1cmVTZXQsIDE2
PiBtX3N0cnVjdHVyZVNldDsKQEAgLTc0NCwyOSArNzI4LDI5IEBAIHByaXZhdGU6CiAgICAgCiAg
ICAgdm9pZCBoYW5kbGVTdWNjZXNzb3IoVmVjdG9yPEJsb2NrSW5kZXgsIDE2PiYgd29ya2xpc3Qs
IEJsb2NrSW5kZXggYmxvY2tJbmRleCwgQmxvY2tJbmRleCBzdWNjZXNzb3JJbmRleCk7CiAgICAg
Ci0gICAgQWRkU3BlY3VsYXRpb25Nb2RlIGFkZEltbWVkaWF0ZVNob3VsZFNwZWN1bGF0ZUludGVn
ZXIoTm9kZSYgYWRkLCBib29sIHZhcmlhYmxlU2hvdWxkU3BlY3VsYXRlSW50ZWdlciwgTm9kZSYg
aW1tZWRpYXRlKQorICAgIEFkZFNwZWN1bGF0aW9uTW9kZSBhZGRJbW1lZGlhdGVTaG91bGRTcGVj
dWxhdGVJbnRlZ2VyKE5vZGUqIGFkZCwgYm9vbCB2YXJpYWJsZVNob3VsZFNwZWN1bGF0ZUludGVn
ZXIsIE5vZGUqIGltbWVkaWF0ZSkKICAgICB7CiAgICAgICAgIEFTU0VSVChpbW1lZGlhdGUuaGFz
Q29uc3RhbnQoKSk7CiAgICAgICAgIAotICAgICAgICBKU1ZhbHVlIGltbWVkaWF0ZVZhbHVlID0g
aW1tZWRpYXRlLnZhbHVlT2ZKU0NvbnN0YW50KG1fY29kZUJsb2NrKTsKLSAgICAgICAgaWYgKCFp
bW1lZGlhdGVWYWx1ZS5pc051bWJlcigpKQorICAgICAgICBKU1ZhbHVlIGltbWVkaWF0ZVZhbHVl
ID0gaW1tZWRpYXRlLT52YWx1ZU9mSlNDb25zdGFudChtX2NvZGVCbG9jayk7CisgICAgICAgIGlm
ICghaW1tZWRpYXRlVmFsdWUtPmlzTnVtYmVyKCkpCiAgICAgICAgICAgICByZXR1cm4gRG9udFNw
ZWN1bGF0ZUludGVnZXI7CiAgICAgICAgIAogICAgICAgICBpZiAoIXZhcmlhYmxlU2hvdWxkU3Bl
Y3VsYXRlSW50ZWdlcikKICAgICAgICAgICAgIHJldHVybiBEb250U3BlY3VsYXRlSW50ZWdlcjsK
ICAgICAgICAgCi0gICAgICAgIGlmIChpbW1lZGlhdGVWYWx1ZS5pc0ludDMyKCkpCi0gICAgICAg
ICAgICByZXR1cm4gYWRkLmNhblNwZWN1bGF0ZUludGVnZXIoKSA/IFNwZWN1bGF0ZUludGVnZXIg
OiBEb250U3BlY3VsYXRlSW50ZWdlcjsKKyAgICAgICAgaWYgKGltbWVkaWF0ZVZhbHVlLT5pc0lu
dDMyKCkpCisgICAgICAgICAgICByZXR1cm4gYWRkLT5jYW5TcGVjdWxhdGVJbnRlZ2VyKCkgPyBT
cGVjdWxhdGVJbnRlZ2VyIDogRG9udFNwZWN1bGF0ZUludGVnZXI7CiAgICAgICAgIAogICAgICAg
ICBkb3VibGUgZG91YmxlSW1tZWRpYXRlID0gaW1tZWRpYXRlVmFsdWUuYXNEb3VibGUoKTsKICAg
ICAgICAgY29uc3QgZG91YmxlIHR3b1RvVGhlNDggPSAyODE0NzQ5NzY3MTA2NTYuMDsKICAgICAg
ICAgaWYgKGRvdWJsZUltbWVkaWF0ZSA8IC10d29Ub1RoZTQ4IHx8IGRvdWJsZUltbWVkaWF0ZSA+
IHR3b1RvVGhlNDgpCiAgICAgICAgICAgICByZXR1cm4gRG9udFNwZWN1bGF0ZUludGVnZXI7CiAg
ICAgICAgIAotICAgICAgICByZXR1cm4gbm9kZUNhblRydW5jYXRlSW50ZWdlcihhZGQuYXJpdGhO
b2RlRmxhZ3MoKSkgPyBTcGVjdWxhdGVJbnRlZ2VyQnV0QWx3YXlzV2F0Y2hPdmVyZmxvdyA6IERv
bnRTcGVjdWxhdGVJbnRlZ2VyOworICAgICAgICByZXR1cm4gbm9kZUNhblRydW5jYXRlSW50ZWdl
cihhZGQtPmFyaXRoTm9kZUZsYWdzKCkpID8gU3BlY3VsYXRlSW50ZWdlckJ1dEFsd2F5c1dhdGNo
T3ZlcmZsb3cgOiBEb250U3BlY3VsYXRlSW50ZWdlcjsKICAgICB9CiAgICAgCi0gICAgYm9vbCBt
dWxJbW1lZGlhdGVTaG91bGRTcGVjdWxhdGVJbnRlZ2VyKE5vZGUmIG11bCwgTm9kZSYgdmFyaWFi
bGUsIE5vZGUmIGltbWVkaWF0ZSkKKyAgICBib29sIG11bEltbWVkaWF0ZVNob3VsZFNwZWN1bGF0
ZUludGVnZXIoTm9kZSogbXVsLCBOb2RlKiB2YXJpYWJsZSwgTm9kZSogaW1tZWRpYXRlKQogICAg
IHsKICAgICAgICAgQVNTRVJUKGltbWVkaWF0ZS5oYXNDb25zdGFudCgpKTsKICAgICAgICAgCkBA
IC03NzQsNyArNzU4LDcgQEAgcHJpdmF0ZToKICAgICAgICAgaWYgKCFpbW1lZGlhdGVWYWx1ZS5p
c0ludDMyKCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIAotICAgICAgICBp
ZiAoIXZhcmlhYmxlLnNob3VsZFNwZWN1bGF0ZUludGVnZXJGb3JBcml0aG1ldGljKCkpCisgICAg
ICAgIGlmICghdmFyaWFibGUtPnNob3VsZFNwZWN1bGF0ZUludGVnZXJGb3JBcml0aG1ldGljKCkp
CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIAogICAgICAgICBpbnQzMl90IGlu
dEltbWVkaWF0ZSA9IGltbWVkaWF0ZVZhbHVlLmFzSW50MzIoKTsKQEAgLTc4NSwxNCArNzY5LDE0
IEBAIHByaXZhdGU6CiAgICAgICAgIC8vIGNhblNwZWN1bGF0ZUludGVnZXIoKSBpbXBsaWVzKS4K
ICAgICAgICAgY29uc3QgaW50MzJfdCB0d29Ub1RoZTIyID0gMSA8PCAyMjsKICAgICAgICAgaWYg
KGludEltbWVkaWF0ZSA8PSAtdHdvVG9UaGUyMiB8fCBpbnRJbW1lZGlhdGUgPj0gdHdvVG9UaGUy
MikKLSAgICAgICAgICAgIHJldHVybiBtdWwuY2FuU3BlY3VsYXRlSW50ZWdlcigpICYmICFub2Rl
TWF5T3ZlcmZsb3cobXVsLmFyaXRoTm9kZUZsYWdzKCkpOworICAgICAgICAgICAgcmV0dXJuIG11
bC0+Y2FuU3BlY3VsYXRlSW50ZWdlcigpICYmICFub2RlTWF5T3ZlcmZsb3cobXVsLT5hcml0aE5v
ZGVGbGFncygpKTsKIAotICAgICAgICByZXR1cm4gbXVsLmNhblNwZWN1bGF0ZUludGVnZXIoKTsK
KyAgICAgICAgcmV0dXJuIG11bC0+Y2FuU3BlY3VsYXRlSW50ZWdlcigpOwogICAgIH0KICAgICAK
ICAgICAvLyBXaGVuIGEgbm9kZSdzIHJlZkNvdW50IGdvZXMgZnJvbSAwIHRvIDEsIGl0IG11c3Qg
KGxvZ2ljYWxseSkgcmVjdXJzaXZlbHkgcmVmIGFsbCBvZiBpdHMgY2hpbGRyZW4sIGFuZCB2aWNl
IHZlcnNhLgotICAgIHZvaWQgcmVmQ2hpbGRyZW4oTm9kZUluZGV4KTsKLSAgICB2b2lkIGRlcmVm
Q2hpbGRyZW4oTm9kZUluZGV4KTsKKyAgICB2b2lkIHJlZkNoaWxkcmVuKE5vZGUqKTsKKyAgICB2
b2lkIGRlcmVmQ2hpbGRyZW4oTm9kZSopOwogfTsKIAogY2xhc3MgR2V0Qnl0ZWNvZGVCZWdpbkZv
ckJsb2NrIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5zZXJ0aW9uU2V0
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJbnNlcnRpb25T
ZXQuaAkocmV2aXNpb24gMTQwOTA0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJ
bnNlcnRpb25TZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMzksMTQgKzM5LDE0IEBAIGNsYXNzIElu
c2VydGlvbiB7CiBwdWJsaWM6CiAgICAgSW5zZXJ0aW9uKCkgeyB9CiAgICAgCi0gICAgSW5zZXJ0
aW9uKHNpemVfdCBpbmRleCwgTm9kZUluZGV4IGVsZW1lbnQpCisgICAgSW5zZXJ0aW9uKHNpemVf
dCBpbmRleCwgTm9kZSogZWxlbWVudCkKICAgICAgICAgOiBtX2luZGV4KGluZGV4KQogICAgICAg
ICAsIG1fZWxlbWVudChlbGVtZW50KQogICAgIHsKICAgICB9CiAgICAgCiAgICAgc2l6ZV90IGlu
ZGV4KCkgY29uc3QgeyByZXR1cm4gbV9pbmRleDsgfQotICAgIE5vZGVJbmRleCBlbGVtZW50KCkg
Y29uc3QgeyByZXR1cm4gbV9lbGVtZW50OyB9CisgICAgTm9kZSogZWxlbWVudCgpIGNvbnN0IHsg
cmV0dXJuIG1fZWxlbWVudDsgfQogcHJpdmF0ZToKICAgICBzaXplX3QgbV9pbmRleDsKICAgICBO
b2RlSW5kZXggbV9lbGVtZW50OwpAQCAtNTksMjAgKzU5LDIwIEBAIHB1YmxpYzoKICAgICB7CiAg
ICAgfQogICAgIAotICAgIE5vZGVJbmRleCBpbnNlcnQoY29uc3QgSW5zZXJ0aW9uJiBpbnNlcnRp
b24pCisgICAgTm9kZSogaW5zZXJ0KGNvbnN0IEluc2VydGlvbiYgaW5zZXJ0aW9uKQogICAgIHsK
ICAgICAgICAgQVNTRVJUKCFtX2luc2VydGlvbnMuc2l6ZSgpIHx8IG1faW5zZXJ0aW9ucy5sYXN0
KCkuaW5kZXgoKSA8PSBpbnNlcnRpb24uaW5kZXgoKSk7CiAgICAgICAgIG1faW5zZXJ0aW9ucy5h
cHBlbmQoaW5zZXJ0aW9uKTsKICAgICAgICAgcmV0dXJuIGluc2VydGlvbi5lbGVtZW50KCk7CiAg
ICAgfQogICAgIAotICAgIE5vZGVJbmRleCBpbnNlcnQoc2l6ZV90IGluZGV4LCBOb2RlSW5kZXgg
ZWxlbWVudCkKKyAgICBOb2RlKiBpbnNlcnQoc2l6ZV90IGluZGV4LCBOb2RlSW5kZXggZWxlbWVu
dCkKICAgICB7CiAgICAgICAgIHJldHVybiBpbnNlcnQoSW5zZXJ0aW9uKGluZGV4LCBlbGVtZW50
KSk7CiAgICAgfQogCiAjZGVmaW5lIERGR19ERUZJTkVfSU5TRVJUX05PREUodGVtcGxhdGVQcmUs
IHRlbXBsYXRlUG9zdCwgdHlwZVBhcmFtcywgdmFsdWVQYXJhbXNDb21tYSwgdmFsdWVQYXJhbXMs
IHZhbHVlQXJncykgXAotICAgIHRlbXBsYXRlUHJlIHR5cGVQYXJhbXMgdGVtcGxhdGVQb3N0IE5v
ZGVJbmRleCBpbnNlcnROb2RlKHNpemVfdCBpbmRleCwgUmVmQ2hpbGRyZW5Nb2RlIHJlZkNoaWxk
cmVuTW9kZSwgUmVmTm9kZU1vZGUgcmVmTm9kZU1vZGUsIFNwZWN1bGF0ZWRUeXBlIHR5cGUgdmFs
dWVQYXJhbXNDb21tYSB2YWx1ZVBhcmFtcykgXAorICAgIHRlbXBsYXRlUHJlIHR5cGVQYXJhbXMg
dGVtcGxhdGVQb3N0IE5vZGUqIGluc2VydE5vZGUoc2l6ZV90IGluZGV4LCBSZWZDaGlsZHJlbk1v
ZGUgcmVmQ2hpbGRyZW5Nb2RlLCBSZWZOb2RlTW9kZSByZWZOb2RlTW9kZSwgU3BlY3VsYXRlZFR5
cGUgdHlwZSB2YWx1ZVBhcmFtc0NvbW1hIHZhbHVlUGFyYW1zKSBcCiAgICAgeyBcCiAgICAgICAg
IHJldHVybiBpbnNlcnQoaW5kZXgsIG1fZ3JhcGguYWRkTm9kZShyZWZDaGlsZHJlbk1vZGUsIHJl
Zk5vZGVNb2RlLCB0eXBlIHZhbHVlUGFyYW1zQ29tbWEgdmFsdWVBcmdzKSk7IFwKICAgICB9Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5oCShyZXZpc2lv
biAxNDA5MDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTI2NiwxMSArMjY2LDExIEBAIHB1YmxpYzoKICAgICAgICAgbV9k
aXNhc3NlbWJsZXItPnNldEZvckJsb2NrKGJsb2NrSW5kZXgsIGxhYmVsSWdub3JpbmdXYXRjaHBv
aW50cygpKTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBzZXRGb3JOb2RlKE5vZGVJbmRleCBub2Rl
SW5kZXgpCisgICAgdm9pZCBzZXRGb3JOb2RlKE5vZGUqIG5vZGUpCiAgICAgewogICAgICAgICBp
ZiAoTElLRUxZKCFtX2Rpc2Fzc2VtYmxlcikpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IG1fZGlzYXNzZW1ibGVyLT5zZXRGb3JOb2RlKG5vZGVJbmRleCwgbGFiZWxJZ25vcmluZ1dhdGNo
cG9pbnRzKCkpOworICAgICAgICBtX2Rpc2Fzc2VtYmxlci0+c2V0Rm9yTm9kZShub2RlLCBsYWJl
bElnbm9yaW5nV2F0Y2hwb2ludHMoKSk7CiAgICAgfQogICAgIAogICAgIHZvaWQgc2V0RW5kT2ZN
YWluUGF0aCgpCkBAIC0zNDgsMTAgKzM0OCwxMCBAQCBwdWJsaWM6CiAgICAgfQogCiAjaWYgVVNF
KEpTVkFMVUUzMl82NCkKLSAgICB2b2lkKiBhZGRyZXNzT2ZEb3VibGVDb25zdGFudChOb2RlSW5k
ZXggbm9kZUluZGV4KQorICAgIHZvaWQqIGFkZHJlc3NPZkRvdWJsZUNvbnN0YW50KE5vZGUqIG5v
ZGUpCiAgICAgewotICAgICAgICBBU1NFUlQobV9ncmFwaC5pc051bWJlckNvbnN0YW50KG5vZGVJ
bmRleCkpOwotICAgICAgICB1bnNpZ25lZCBjb25zdGFudEluZGV4ID0gZ3JhcGgoKVtub2RlSW5k
ZXhdLmNvbnN0YW50TnVtYmVyKCk7CisgICAgICAgIEFTU0VSVChtX2dyYXBoLmlzTnVtYmVyQ29u
c3RhbnQobm9kZSkpOworICAgICAgICB1bnNpZ25lZCBjb25zdGFudEluZGV4ID0gbm9kZS0+Y29u
c3RhbnROdW1iZXIoKTsKICAgICAgICAgcmV0dXJuICYoY29kZUJsb2NrKCktPmNvbnN0YW50UmVn
aXN0ZXIoRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXggKyBjb25zdGFudEluZGV4KSk7CiAgICAg
fQogI2VuZGlmCkBAIC00MDUsMTUgKzQwNSwxNSBAQCBwdWJsaWM6CiAgICAgICAgIC8vIHZhbHVl
IG9mIChOb25lLCBbXSkuIEJ1dCB0aGUgb2xkIEpJVCBtYXkgc3Rhc2ggc29tZSB2YWx1ZXMgdGhl
cmUuIFNvIHdlIHJlYWxseQogICAgICAgICAvLyBuZWVkIChUb3AsIFRPUCkuCiAgICAgICAgIGZv
ciAoc2l6ZV90IGFyZ3VtZW50ID0gMDsgYXJndW1lbnQgPCBiYXNpY0Jsb2NrLnZhcmlhYmxlc0F0
SGVhZC5udW1iZXJPZkFyZ3VtZW50cygpOyArK2FyZ3VtZW50KSB7Ci0gICAgICAgICAgICBOb2Rl
SW5kZXggbm9kZUluZGV4ID0gYmFzaWNCbG9jay52YXJpYWJsZXNBdEhlYWQuYXJndW1lbnQoYXJn
dW1lbnQpOwotICAgICAgICAgICAgaWYgKG5vZGVJbmRleCA9PSBOb05vZGUgfHwgIW1fZ3JhcGhb
bm9kZUluZGV4XS5zaG91bGRHZW5lcmF0ZSgpKQorICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJh
c2ljQmxvY2sudmFyaWFibGVzQXRIZWFkLmFyZ3VtZW50KGFyZ3VtZW50KTsKKyAgICAgICAgICAg
IGlmICghbm9kZSB8fCAhbm9kZS0+c2hvdWxkR2VuZXJhdGUoKSkKICAgICAgICAgICAgICAgICBl
bnRyeS0+bV9leHBlY3RlZFZhbHVlcy5hcmd1bWVudChhcmd1bWVudCkubWFrZVRvcCgpOwogICAg
ICAgICB9CiAgICAgICAgIGZvciAoc2l6ZV90IGxvY2FsID0gMDsgbG9jYWwgPCBiYXNpY0Jsb2Nr
LnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkxvY2FscygpOyArK2xvY2FsKSB7Ci0gICAgICAgICAg
ICBOb2RlSW5kZXggbm9kZUluZGV4ID0gYmFzaWNCbG9jay52YXJpYWJsZXNBdEhlYWQubG9jYWwo
bG9jYWwpOwotICAgICAgICAgICAgaWYgKG5vZGVJbmRleCA9PSBOb05vZGUgfHwgIW1fZ3JhcGhb
bm9kZUluZGV4XS5zaG91bGRHZW5lcmF0ZSgpKQorICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJh
c2ljQmxvY2sudmFyaWFibGVzQXRIZWFkLmxvY2FsKGxvY2FsKTsKKyAgICAgICAgICAgIGlmICgh
bm9kZSB8fCAhbm9kZS0+c2hvdWxkR2VuZXJhdGUoKSkKICAgICAgICAgICAgICAgICBlbnRyeS0+
bV9leHBlY3RlZFZhbHVlcy5sb2NhbChsb2NhbCkubWFrZVRvcCgpOwotICAgICAgICAgICAgZWxz
ZSBpZiAobV9ncmFwaFtub2RlSW5kZXhdLnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5zaG91bGRVc2VE
b3VibGVGb3JtYXQoKSkKKyAgICAgICAgICAgIGVsc2UgaWYgKG5vZGUtPnZhcmlhYmxlQWNjZXNz
RGF0YSgpLT5zaG91bGRVc2VEb3VibGVGb3JtYXQoKSkKICAgICAgICAgICAgICAgICBlbnRyeS0+
bV9sb2NhbHNGb3JjZWREb3VibGUuc2V0KGxvY2FsKTsKICAgICAgICAgfQogI2Vsc2UKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTG9uZ0xpdmVkU3RhdGUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTG9uZ0xpdmVkU3RhdGUuY3BwCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdMb25nTGl2ZWRTdGF0
ZS5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IkRGR0xvbmdMaXZlZFN0YXRlLmgiCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitMb25nTGl2ZWRTdGF0ZTo6TG9uZ0xpdmVkU3RhdGUo
KQoreworfQorCitMb25nTGl2ZWRTdGF0ZTo6fkxvbmdMaXZlZFN0YXRlKCkKK3sKK30KKwordm9p
ZCBMb25nTGl2ZWRTdGF0ZTo6c2hyaW5rVG9GaXQoKQoreworICAgIG1fYWxsb2NhdG9yLnJlc2V0
KCk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShE
RkdfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0xvbmdMaXZlZFN0
YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdMb25nTGl2
ZWRTdGF0ZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdM
b25nTGl2ZWRTdGF0ZS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDU1IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHTG9uZ0xpdmVk
U3RhdGVfaAorI2RlZmluZSBERkdMb25nTGl2ZWRTdGF0ZV9oCisKKyNpbmNsdWRlIDx3dGYvUGxh
dGZvcm0uaD4KKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZHTm9kZUFsbG9j
YXRvci5oIgorI2luY2x1ZGUgPHd0Zi9GYXN0QWxsb2NCYXNlLmg+CisjaW5jbHVkZSA8d3RmL05v
bmNvcHlhYmxlLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3Mg
TG9uZ0xpdmVkU3RhdGUgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOyBXVEZfTUFLRV9O
T05DT1BZQUJMRShMb25nTGl2ZWRTdGF0ZSk7CitwdWJsaWM6CisgICAgTG9uZ0xpdmVkU3RhdGUo
KTsKKyAgICB+TG9uZ0xpdmVkU3RhdGUoKTsKKyAgICAKKyAgICB2b2lkIHNocmlua1RvRml0KCk7
CisgICAgCisgICAgTm9kZUFsbG9jYXRvciBtX2FsbG9jYXRvcjsKK307CisKK30gfSAvLyBuYW1l
c3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisjZW5kaWYgLy8g
REZHTG9uZ0xpdmVkU3RhdGVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R01pbmlmaWVkSUQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R01pbmlmaWVkSUQuaAkocmV2aXNpb24gMTQwOTA0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdNaW5pZmllZElELmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDE0ICs0NCwxNCBAQCBj
bGFzcyBNaW5pZmllZElEIHsKIHB1YmxpYzoKICAgICBNaW5pZmllZElEKCkgOiBtX2lkKGludmFs
aWRJRCgpKSB7IH0KICAgICBNaW5pZmllZElEKFdURjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlVHlw
ZSkgOiBtX2lkKG90aGVySW52YWxpZElEKCkpIHsgfQotICAgIGV4cGxpY2l0IE1pbmlmaWVkSUQo
Tm9kZUluZGV4IG5vZGVJbmRleCkgOiBtX2lkKG5vZGVJbmRleCkgeyB9CisgICAgZXhwbGljaXQg
TWluaWZpZWRJRChOb2RlKiBub2RlKSA6IG1faWQoYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4obm9k
ZSkpIHsgfQogICAgIAogICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4gbV9pZCA9
PSBpbnZhbGlkSUQoKTsgfQogICAgIAogICAgIC8vIFRoaXMgdGFrZXMgR3JhcGgmIHRvIHJlbWlu
ZCB5b3UsIHRoYXQgeW91IHNob3VsZCBvbmx5IGJlIGNhbGxpbmcgdGhpcyBtZXRob2QKICAgICAv
LyB3aGVuIHlvdSdyZSBpbiB0aGUgbWFpbiBjb21waWxhdGlvbiBwYXNzIChpLmUuIHlvdSBoYXZl
IGEgZ3JhcGgpIGFuZCBub3QgbGF0ZXIsCiAgICAgLy8gbGlrZSBkdXJpbmcgT1NSIGV4aXQgY29t
cGlsYXRpb24uCi0gICAgTm9kZUluZGV4IG5vZGVJbmRleChjb25zdCBHcmFwaCYpIGNvbnN0IHsg
cmV0dXJuIHN0YXRpY19jYXN0PE5vZGVJbmRleD4obV9pZCk7IH0KKyAgICBOb2RlKiBub2RlSW5k
ZXgoY29uc3QgR3JhcGgmKSBjb25zdCB7IHJldHVybiBiaXR3aXNlX2Nhc3Q8Tm9kZSo+KG1faWQp
OyB9CiAgICAgCiAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IE1pbmlmaWVkSUQmIG90aGVyKSBj
b25zdCB7IHJldHVybiBtX2lkID09IG90aGVyLm1faWQ7IH0KICAgICBib29sIG9wZXJhdG9yIT0o
Y29uc3QgTWluaWZpZWRJRCYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuIG1faWQgIT0gb3RoZXIubV9p
ZDsgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuY3BwCShyZXZpc2lvbiAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmNwcAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSw1NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZHTm9kZS5oIgorCisjaWYg
RU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJERkdOb2RlQWxsb2NhdG9yLmgiCisKK25hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKwordW5zaWduZWQgTm9kZTo6aW5kZXgoKSBjb25z
dAoreworICAgIHJldHVybiBOb2RlQWxsb2NhdG9yOjphbGxvY2F0b3JPZih0aGlzKS0+aW5kZXhP
Zih0aGlzKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCituYW1lc3BhY2UgV1RG
IHsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIE5vZGUqIG5vZGUpCit7
CisgICAgaWYgKCFub2RlKQorICAgICAgICBvdXQucHJpbnQoIi0iKTsKKyAgICBlbHNlCisgICAg
ICAgIG91dC5wcmludCgiQCIsIG5vZGUtPmluZGV4KCkpOworICAgIG91dC5wcmludChBYmJyZXZp
YXRlZFNwZWN1bGF0aW9uRHVtcChub2RlLT5wcmVkaWN0aW9uKCkpKTsKK30KKworfSAvLyBuYW1l
c3BhY2UgV1RGCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdOb2RlLmgJKHJldmlzaW9uIDE0MDkwNCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTIsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02OCw3ICs2
OCw3IEBAIHN0cnVjdCBOZXdBcnJheUJ1ZmZlckRhdGEgewogCiAvLyBUaGlzIHR5cGUgdXNlZCBp
biBwYXNzaW5nIGFuIGltbWVkaWF0ZSBhcmd1bWVudCB0byBOb2RlIGNvbnN0cnVjdG9yOwogLy8g
ZGlzdGluZ3Vpc2hlcyBhbiBpbW1lZGlhdGUgdmFsdWUgKHR5cGljYWxseSBhbiBpbmRleCBpbnRv
IGEgQ29kZUJsb2NrIGRhdGEgc3RydWN0dXJlIC0gCi0vLyBhIGNvbnN0YW50IGluZGV4LCBhcmd1
bWVudCwgb3IgaWRlbnRpZmllcikgZnJvbSBhIE5vZGVJbmRleC4KKy8vIGEgY29uc3RhbnQgaW5k
ZXgsIGFyZ3VtZW50LCBvciBpZGVudGlmaWVyKSBmcm9tIGEgTm9kZSouCiBzdHJ1Y3QgT3BJbmZv
IHsKICAgICBleHBsaWNpdCBPcEluZm8oaW50MzJfdCB2YWx1ZSkgOiBtX3ZhbHVlKHN0YXRpY19j
YXN0PHVpbnRwdHJfdD4odmFsdWUpKSB7IH0KICAgICBleHBsaWNpdCBPcEluZm8odWludDMyX3Qg
dmFsdWUpIDogbV92YWx1ZShzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KHZhbHVlKSkgeyB9CkBAIC05
OSw3ICs5OSw3IEBAIHN0cnVjdCBOb2RlIHsKICAgICB9CiAgICAgCiAgICAgLy8gQ29uc3RydWN0
IGEgbm9kZSB3aXRoIHVwIHRvIDMgY2hpbGRyZW4sIG5vIGltbWVkaWF0ZSB2YWx1ZS4KLSAgICBO
b2RlKE5vZGVUeXBlIG9wLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIE5vZGVJbmRleCBjaGlsZDEg
PSBOb05vZGUsIE5vZGVJbmRleCBjaGlsZDIgPSBOb05vZGUsIE5vZGVJbmRleCBjaGlsZDMgPSBO
b05vZGUpCisgICAgTm9kZShOb2RlVHlwZSBvcCwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBOb2Rl
KiBjaGlsZDEgPSAwLCBOb2RlKiBjaGlsZDIgPSAwLCBOb2RlKiBjaGlsZDMgPSAwKQogICAgICAg
ICA6IGNvZGVPcmlnaW4oY29kZU9yaWdpbikKICAgICAgICAgLCBjaGlsZHJlbihBZGphY2VuY3lM
aXN0OjpGaXhlZCwgY2hpbGQxLCBjaGlsZDIsIGNoaWxkMykKICAgICAgICAgLCBtX3ZpcnR1YWxS
ZWdpc3RlcihJbnZhbGlkVmlydHVhbFJlZ2lzdGVyKQpAQCAtMTExLDcgKzExMSw3IEBAIHN0cnVj
dCBOb2RlIHsKICAgICB9CiAKICAgICAvLyBDb25zdHJ1Y3QgYSBub2RlIHdpdGggdXAgdG8gMyBj
aGlsZHJlbiBhbmQgYW4gaW1tZWRpYXRlIHZhbHVlLgotICAgIE5vZGUoTm9kZVR5cGUgb3AsIENv
ZGVPcmlnaW4gY29kZU9yaWdpbiwgT3BJbmZvIGltbSwgTm9kZUluZGV4IGNoaWxkMSA9IE5vTm9k
ZSwgTm9kZUluZGV4IGNoaWxkMiA9IE5vTm9kZSwgTm9kZUluZGV4IGNoaWxkMyA9IE5vTm9kZSkK
KyAgICBOb2RlKE5vZGVUeXBlIG9wLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIE9wSW5mbyBpbW0s
IE5vZGUqIGNoaWxkMSA9IDAsIE5vZGUqIGNoaWxkMiA9IDAsIE5vZGUqIGNoaWxkMyA9IDApCiAg
ICAgICAgIDogY29kZU9yaWdpbihjb2RlT3JpZ2luKQogICAgICAgICAsIGNoaWxkcmVuKEFkamFj
ZW5jeUxpc3Q6OkZpeGVkLCBjaGlsZDEsIGNoaWxkMiwgY2hpbGQzKQogICAgICAgICAsIG1fdmly
dHVhbFJlZ2lzdGVyKEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIpCkBAIC0xMjQsNyArMTI0LDcgQEAg
c3RydWN0IE5vZGUgewogICAgIH0KIAogICAgIC8vIENvbnN0cnVjdCBhIG5vZGUgd2l0aCB1cCB0
byAzIGNoaWxkcmVuIGFuZCB0d28gaW1tZWRpYXRlIHZhbHVlcy4KLSAgICBOb2RlKE5vZGVUeXBl
IG9wLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIE9wSW5mbyBpbW0xLCBPcEluZm8gaW1tMiwgTm9k
ZUluZGV4IGNoaWxkMSA9IE5vTm9kZSwgTm9kZUluZGV4IGNoaWxkMiA9IE5vTm9kZSwgTm9kZUlu
ZGV4IGNoaWxkMyA9IE5vTm9kZSkKKyAgICBOb2RlKE5vZGVUeXBlIG9wLCBDb2RlT3JpZ2luIGNv
ZGVPcmlnaW4sIE9wSW5mbyBpbW0xLCBPcEluZm8gaW1tMiwgTm9kZSogY2hpbGQxID0gMCwgTm9k
ZSogY2hpbGQyID0gMCwgTm9kZSogY2hpbGQzID0gMCkKICAgICAgICAgOiBjb2RlT3JpZ2luKGNv
ZGVPcmlnaW4pCiAgICAgICAgICwgY2hpbGRyZW4oQWRqYWNlbmN5TGlzdDo6Rml4ZWQsIGNoaWxk
MSwgY2hpbGQyLCBjaGlsZDMpCiAgICAgICAgICwgbV92aXJ0dWFsUmVnaXN0ZXIoSW52YWxpZFZp
cnR1YWxSZWdpc3RlcikKQEAgLTE1NCw2ICsxNTQsOSBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgTm9k
ZVR5cGUgb3AoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxOb2RlVHlwZT4obV9vcCk7IH0K
ICAgICBOb2RlRmxhZ3MgZmxhZ3MoKSBjb25zdCB7IHJldHVybiBtX2ZsYWdzOyB9CiAgICAgCisg
ICAgLy8gVGhpcyBpcyBub3QgYSBmYXN0IG1ldGhvZC4KKyAgICB1bnNpZ25lZCBpbmRleCgpIGNv
bnN0OworICAgIAogICAgIHZvaWQgc2V0T3AoTm9kZVR5cGUgb3ApCiAgICAgewogICAgICAgICBt
X29wID0gb3A7CkBAIC0yODEsNyArMjg0LDcgQEAgc3RydWN0IE5vZGUgewogICAgICAgICBjb252
ZXJ0VG9TdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludChzdHJ1Y3R1cmVTZXQoKS5zaW5nbGV0
b25TdHJ1Y3R1cmUoKSk7CiAgICAgfQogICAgIAotICAgIHZvaWQgY29udmVydFRvR2V0QnlPZmZz
ZXQodW5zaWduZWQgc3RvcmFnZUFjY2Vzc0RhdGFJbmRleCwgTm9kZUluZGV4IHN0b3JhZ2UpCisg
ICAgdm9pZCBjb252ZXJ0VG9HZXRCeU9mZnNldCh1bnNpZ25lZCBzdG9yYWdlQWNjZXNzRGF0YUlu
ZGV4LCBOb2RlKiBzdG9yYWdlKQogICAgIHsKICAgICAgICAgQVNTRVJUKG1fb3AgPT0gR2V0QnlJ
ZCB8fCBtX29wID09IEdldEJ5SWRGbHVzaCk7CiAgICAgICAgIG1fb3BJbmZvID0gc3RvcmFnZUFj
Y2Vzc0RhdGFJbmRleDsKQEAgLTI5MCw3ICsyOTMsNyBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAg
IG1fZmxhZ3MgJj0gfk5vZGVDbG9iYmVyc1dvcmxkOwogICAgIH0KICAgICAKLSAgICB2b2lkIGNv
bnZlcnRUb1B1dEJ5T2Zmc2V0KHVuc2lnbmVkIHN0b3JhZ2VBY2Nlc3NEYXRhSW5kZXgsIE5vZGVJ
bmRleCBzdG9yYWdlKQorICAgIHZvaWQgY29udmVydFRvUHV0QnlPZmZzZXQodW5zaWduZWQgc3Rv
cmFnZUFjY2Vzc0RhdGFJbmRleCwgTm9kZSogc3RvcmFnZSkKICAgICB7CiAgICAgICAgIEFTU0VS
VChtX29wID09IFB1dEJ5SWQgfHwgbV9vcCA9PSBQdXRCeUlkRGlyZWN0KTsKICAgICAgICAgbV9v
cEluZm8gPSBzdG9yYWdlQWNjZXNzRGF0YUluZGV4OwpAQCAtOTIwLDkgKzkyMywxMCBAQCBzdHJ1
Y3QgTm9kZSB7CiAgICAgICAgIHJldHVybiBtX3JlZkNvdW50OwogICAgIH0KIAotICAgIHZvaWQg
cmVmKCkKKyAgICBOb2RlKiByZWYoKQogICAgIHsKICAgICAgICAgbV9yZWZDb3VudCsrOworICAg
ICAgICByZXR1cm4gdGhpczsKICAgICB9CiAKICAgICB1bnNpZ25lZCBwb3N0Zml4UmVmKCkKQEAg
LTExMzUsNDQgKzExMzksNDQgQEAgc3RydWN0IE5vZGUgewogICAgICAgICByZXR1cm4gaXNDZWxs
U3BlY3VsYXRpb24ocHJlZGljdGlvbigpKTsKICAgICB9CiAgICAgCi0gICAgc3RhdGljIGJvb2wg
c2hvdWxkU3BlY3VsYXRlSW50ZWdlcihOb2RlJiBvcDEsIE5vZGUmIG9wMikKKyAgICBzdGF0aWMg
Ym9vbCBzaG91bGRTcGVjdWxhdGVJbnRlZ2VyKE5vZGUqIG9wMSwgTm9kZSogb3AyKQogICAgIHsK
LSAgICAgICAgcmV0dXJuIG9wMS5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkgJiYgb3AyLnNob3Vs
ZFNwZWN1bGF0ZUludGVnZXIoKTsKKyAgICAgICAgcmV0dXJuIG9wMS0+c2hvdWxkU3BlY3VsYXRl
SW50ZWdlcigpICYmIG9wMi0+c2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpOwogICAgIH0KICAgICAK
LSAgICBzdGF0aWMgYm9vbCBzaG91bGRTcGVjdWxhdGVJbnRlZ2VyRm9yQXJpdGhtZXRpYyhOb2Rl
JiBvcDEsIE5vZGUmIG9wMikKKyAgICBzdGF0aWMgYm9vbCBzaG91bGRTcGVjdWxhdGVJbnRlZ2Vy
Rm9yQXJpdGhtZXRpYyhOb2RlKiBvcDEsIE5vZGUqIG9wMikKICAgICB7Ci0gICAgICAgIHJldHVy
biBvcDEuc2hvdWxkU3BlY3VsYXRlSW50ZWdlckZvckFyaXRobWV0aWMoKSAmJiBvcDIuc2hvdWxk
U3BlY3VsYXRlSW50ZWdlckZvckFyaXRobWV0aWMoKTsKKyAgICAgICAgcmV0dXJuIG9wMS0+c2hv
dWxkU3BlY3VsYXRlSW50ZWdlckZvckFyaXRobWV0aWMoKSAmJiBvcDItPnNob3VsZFNwZWN1bGF0
ZUludGVnZXJGb3JBcml0aG1ldGljKCk7CiAgICAgfQogICAgIAotICAgIHN0YXRpYyBib29sIHNo
b3VsZFNwZWN1bGF0ZUludGVnZXJFeHBlY3RpbmdEZWZpbmVkKE5vZGUmIG9wMSwgTm9kZSYgb3Ay
KQorICAgIHN0YXRpYyBib29sIHNob3VsZFNwZWN1bGF0ZUludGVnZXJFeHBlY3RpbmdEZWZpbmVk
KE5vZGUqIG9wMSwgTm9kZSogb3AyKQogICAgIHsKLSAgICAgICAgcmV0dXJuIG9wMS5zaG91bGRT
cGVjdWxhdGVJbnRlZ2VyRXhwZWN0aW5nRGVmaW5lZCgpICYmIG9wMi5zaG91bGRTcGVjdWxhdGVJ
bnRlZ2VyRXhwZWN0aW5nRGVmaW5lZCgpOworICAgICAgICByZXR1cm4gb3AxLT5zaG91bGRTcGVj
dWxhdGVJbnRlZ2VyRXhwZWN0aW5nRGVmaW5lZCgpICYmIG9wMi0+c2hvdWxkU3BlY3VsYXRlSW50
ZWdlckV4cGVjdGluZ0RlZmluZWQoKTsKICAgICB9CiAgICAgCi0gICAgc3RhdGljIGJvb2wgc2hv
dWxkU3BlY3VsYXRlRG91YmxlRm9yQXJpdGhtZXRpYyhOb2RlJiBvcDEsIE5vZGUmIG9wMikKKyAg
ICBzdGF0aWMgYm9vbCBzaG91bGRTcGVjdWxhdGVEb3VibGVGb3JBcml0aG1ldGljKE5vZGUqIG9w
MSwgTm9kZSogb3AyKQogICAgIHsKLSAgICAgICAgcmV0dXJuIG9wMS5zaG91bGRTcGVjdWxhdGVE
b3VibGVGb3JBcml0aG1ldGljKCkgJiYgb3AyLnNob3VsZFNwZWN1bGF0ZURvdWJsZUZvckFyaXRo
bWV0aWMoKTsKKyAgICAgICAgcmV0dXJuIG9wMS0+c2hvdWxkU3BlY3VsYXRlRG91YmxlRm9yQXJp
dGhtZXRpYygpICYmIG9wMi0+c2hvdWxkU3BlY3VsYXRlRG91YmxlRm9yQXJpdGhtZXRpYygpOwog
ICAgIH0KICAgICAKLSAgICBzdGF0aWMgYm9vbCBzaG91bGRTcGVjdWxhdGVOdW1iZXIoTm9kZSYg
b3AxLCBOb2RlJiBvcDIpCisgICAgc3RhdGljIGJvb2wgc2hvdWxkU3BlY3VsYXRlTnVtYmVyKE5v
ZGUqIG9wMSwgTm9kZSogb3AyKQogICAgIHsKLSAgICAgICAgcmV0dXJuIG9wMS5zaG91bGRTcGVj
dWxhdGVOdW1iZXIoKSAmJiBvcDIuc2hvdWxkU3BlY3VsYXRlTnVtYmVyKCk7CisgICAgICAgIHJl
dHVybiBvcDEtPnNob3VsZFNwZWN1bGF0ZU51bWJlcigpICYmIG9wMi0+c2hvdWxkU3BlY3VsYXRl
TnVtYmVyKCk7CiAgICAgfQogICAgIAotICAgIHN0YXRpYyBib29sIHNob3VsZFNwZWN1bGF0ZU51
bWJlckV4cGVjdGluZ0RlZmluZWQoTm9kZSYgb3AxLCBOb2RlJiBvcDIpCisgICAgc3RhdGljIGJv
b2wgc2hvdWxkU3BlY3VsYXRlTnVtYmVyRXhwZWN0aW5nRGVmaW5lZChOb2RlKiBvcDEsIE5vZGUq
IG9wMikKICAgICB7Ci0gICAgICAgIHJldHVybiBvcDEuc2hvdWxkU3BlY3VsYXRlTnVtYmVyRXhw
ZWN0aW5nRGVmaW5lZCgpICYmIG9wMi5zaG91bGRTcGVjdWxhdGVOdW1iZXJFeHBlY3RpbmdEZWZp
bmVkKCk7CisgICAgICAgIHJldHVybiBvcDEtPnNob3VsZFNwZWN1bGF0ZU51bWJlckV4cGVjdGlu
Z0RlZmluZWQoKSAmJiBvcDItPnNob3VsZFNwZWN1bGF0ZU51bWJlckV4cGVjdGluZ0RlZmluZWQo
KTsKICAgICB9CiAgICAgCi0gICAgc3RhdGljIGJvb2wgc2hvdWxkU3BlY3VsYXRlRmluYWxPYmpl
Y3QoTm9kZSYgb3AxLCBOb2RlJiBvcDIpCisgICAgc3RhdGljIGJvb2wgc2hvdWxkU3BlY3VsYXRl
RmluYWxPYmplY3QoTm9kZSogb3AxLCBOb2RlKiBvcDIpCiAgICAgewotICAgICAgICByZXR1cm4g
b3AxLnNob3VsZFNwZWN1bGF0ZUZpbmFsT2JqZWN0KCkgJiYgb3AyLnNob3VsZFNwZWN1bGF0ZUZp
bmFsT2JqZWN0KCk7CisgICAgICAgIHJldHVybiBvcDEtPnNob3VsZFNwZWN1bGF0ZUZpbmFsT2Jq
ZWN0KCkgJiYgb3AyLT5zaG91bGRTcGVjdWxhdGVGaW5hbE9iamVjdCgpOwogICAgIH0KIAotICAg
IHN0YXRpYyBib29sIHNob3VsZFNwZWN1bGF0ZUFycmF5KE5vZGUmIG9wMSwgTm9kZSYgb3AyKQor
ICAgIHN0YXRpYyBib29sIHNob3VsZFNwZWN1bGF0ZUFycmF5KE5vZGUqIG9wMSwgTm9kZSogb3Ay
KQogICAgIHsKLSAgICAgICAgcmV0dXJuIG9wMS5zaG91bGRTcGVjdWxhdGVBcnJheSgpICYmIG9w
Mi5zaG91bGRTcGVjdWxhdGVBcnJheSgpOworICAgICAgICByZXR1cm4gb3AxLT5zaG91bGRTcGVj
dWxhdGVBcnJheSgpICYmIG9wMi0+c2hvdWxkU3BlY3VsYXRlQXJyYXkoKTsKICAgICB9CiAgICAg
CiAgICAgYm9vbCBjYW5TcGVjdWxhdGVJbnRlZ2VyKCkKQEAgLTExODQsMTUgKzExODgsMTcgQEAg
c3RydWN0IE5vZGUgewogICAgIHsKICAgICAgICAgaWYgKCFjaGlsZDEoKSkKICAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgb3V0LnByaW50ZigiQCV1IiwgY2hpbGQxKCkuaW5kZXgoKSk7Cisg
ICAgICAgIG91dC5wcmludGYoIkAldSIsIGNoaWxkMSgpLT5pbmRleCgpKTsKICAgICAgICAgaWYg
KCFjaGlsZDIoKSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgb3V0LnByaW50ZigiLCBA
JXUiLCBjaGlsZDIoKS5pbmRleCgpKTsKKyAgICAgICAgb3V0LnByaW50ZigiLCBAJXUiLCBjaGls
ZDIoKS0+aW5kZXgoKSk7CiAgICAgICAgIGlmICghY2hpbGQzKCkpCiAgICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIG91dC5wcmludGYoIiwgQCV1IiwgY2hpbGQzKCkuaW5kZXgoKSk7CisgICAg
ICAgIG91dC5wcmludGYoIiwgQCV1IiwgY2hpbGQzKCktPmluZGV4KCkpOwogICAgIH0KICAgICAK
KyAgICAvLyBOQi4gVGhpcyBjbGFzcyBtdXN0IGhhdmUgYSB0cml2aWFsIGRlc3RydWN0b3IuCisg
ICAgCiAgICAgLy8gVXNlZCB0byBsb29rIHVwIGV4Y2VwdGlvbiBoYW5kbGluZyBpbmZvcm1hdGlv
biAoY3VycmVudGx5IGltcGxlbWVudGVkIGFzIGEgYnl0ZWNvZGUgaW5kZXgpLgogICAgIENvZGVP
cmlnaW4gY29kZU9yaWdpbjsKICAgICAvLyBSZWZlcmVuY2VzIHRvIHVwIHRvIDMgY2hpbGRyZW4s
IG9yIGxpbmtzIHRvIGEgdmFyaWFibGUgbGVuZ3RoIHNldCBvZiBjaGlsZHJlbi4KQEAgLTEyMTUs
MTAgKzEyMjEsMTYgQEAgcHJpdmF0ZToKIHB1YmxpYzoKICAgICAvLyBGaWVsZHMgdXNlZCBieSB2
YXJpb3VzIGFuYWx5c2VzLgogICAgIEFic3RyYWN0VmFsdWUgdmFsdWU7Ci0gICAgTm9kZUluZGV4
IHJlcGxhY2VtZW50OworICAgIE5vZGUqIHJlcGxhY2VtZW50OwogfTsKIAogfSB9IC8vIG5hbWVz
cGFjZSBKU0M6OkRGRwogCituYW1lc3BhY2UgV1RGIHsKKwordm9pZCBwcmludEludGVybmFsKFBy
aW50U3RyZWFtJiwgTm9kZSopOworCit9IC8vIG5hbWVzcGFjZSBXVEYKKwogI2VuZGlmCiAjZW5k
aWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZUFsbG9jYXRvci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZUFsbG9jYXRvci5o
CShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlQWxsb2Nh
dG9yLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdOb2RlQWxsb2NhdG9yX2gKKyNk
ZWZpbmUgREZHTm9kZUFsbG9jYXRvcl9oCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKwor
I2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZHQWxsb2NhdG9yLmgiCisjaW5jbHVk
ZSAiREZHTm9kZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK3R5cGVk
ZWYgQWxsb2NhdG9yPE5vZGUsIDQwOTU+IE5vZGVBbGxvY2F0b3I7CisKK2lubGluZSB2b2lkKiBv
cGVyYXRvciBuZXcgKHNpemVfdCBzaXplLCBOb2RlQWxsb2NhdG9yJiBhbGxvY2F0b3IpCit7Cisg
ICAgQVNTRVJUKHNpemUgPT0gc2l6ZW9mKE5vZGUpKTsKKyAgICByZXR1cm4gYWxsb2NhdG9yLmFs
bG9jYXRlKCk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVO
QUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZHTm9kZUFsbG9jYXRvcl9oCisKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblBy
b3BhZ2F0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAxNDA5MDQpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTIgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEyLCAy
MDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtODUsNzUgKzg1LDczIEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgYm9v
bCBzZXRQcmVkaWN0aW9uKFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24pCiAgICAgewotICAgICAg
ICBBU1NFUlQobV9ncmFwaFttX2NvbXBpbGVJbmRleF0uaGFzUmVzdWx0KCkpOworICAgICAgICBB
U1NFUlQobV9jdXJyZW50Tm9kZS0+aGFzUmVzdWx0KCkpOwogICAgICAgICAKICAgICAgICAgLy8g
c2V0UHJlZGljdGlvbigpIGlzIHVzZWQgd2hlbiB3ZSBrbm93IHRoYXQgdGhlcmUgaXMgbm8gd2F5
IHRoYXQgd2UgY2FuIGNoYW5nZQogICAgICAgICAvLyBvdXIgbWluZHMgYWJvdXQgd2hhdCB0aGUg
cHJlZGljdGlvbiBpcyBnb2luZyB0byBiZS4gVGhlcmUgaXMgbm8gc2VtYW50aWMKICAgICAgICAg
Ly8gZGlmZmVyZW5jZSBiZXR3ZWVuIHNldFByZWRpY3Rpb24oKSBhbmQgbWVyZ2VTcGVjdWxhdGlv
bigpIG90aGVyIHRoYW4gdGhlCiAgICAgICAgIC8vIGluY3JlYXNlZCBjaGVja2luZyB0byB2YWxp
ZGF0ZSB0aGlzIHByb3BlcnR5LgotICAgICAgICBBU1NFUlQobV9ncmFwaFttX2NvbXBpbGVJbmRl
eF0ucHJlZGljdGlvbigpID09IFNwZWNOb25lIHx8IG1fZ3JhcGhbbV9jb21waWxlSW5kZXhdLnBy
ZWRpY3Rpb24oKSA9PSBwcmVkaWN0aW9uKTsKKyAgICAgICAgQVNTRVJUKG1fY3VycmVudE5vZGUt
PnByZWRpY3Rpb24oKSA9PSBTcGVjTm9uZSB8fCBtX2N1cnJlbnROb2RlLT5wcmVkaWN0aW9uKCkg
PT0gcHJlZGljdGlvbik7CiAgICAgICAgIAotICAgICAgICByZXR1cm4gbV9ncmFwaFttX2NvbXBp
bGVJbmRleF0ucHJlZGljdChwcmVkaWN0aW9uKTsKKyAgICAgICAgcmV0dXJuIG1fY3VycmVudE5v
ZGUtPnByZWRpY3QocHJlZGljdGlvbik7CiAgICAgfQogICAgIAogICAgIGJvb2wgbWVyZ2VQcmVk
aWN0aW9uKFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24pCiAgICAgewotICAgICAgICBBU1NFUlQo
bV9ncmFwaFttX2NvbXBpbGVJbmRleF0uaGFzUmVzdWx0KCkpOworICAgICAgICBBU1NFUlQobV9j
dXJyZW50Tm9kZS0+aGFzUmVzdWx0KCkpOwogICAgICAgICAKLSAgICAgICAgcmV0dXJuIG1fZ3Jh
cGhbbV9jb21waWxlSW5kZXhdLnByZWRpY3QocHJlZGljdGlvbik7CisgICAgICAgIHJldHVybiBt
X2N1cnJlbnROb2RlLT5wcmVkaWN0KHByZWRpY3Rpb24pOwogICAgIH0KICAgICAKLSAgICBib29s
IGlzTm90TmVnWmVybyhOb2RlSW5kZXggbm9kZUluZGV4KQorICAgIGJvb2wgaXNOb3ROZWdaZXJv
KE5vZGUqIG5vZGUpCiAgICAgewotICAgICAgICBpZiAoIW1fZ3JhcGguaXNOdW1iZXJDb25zdGFu
dChub2RlSW5kZXgpKQorICAgICAgICBpZiAoIW1fZ3JhcGguaXNOdW1iZXJDb25zdGFudChub2Rl
KSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgZG91YmxlIHZhbHVlID0gbV9n
cmFwaC52YWx1ZU9mTnVtYmVyQ29uc3RhbnQobm9kZUluZGV4KTsKKyAgICAgICAgZG91YmxlIHZh
bHVlID0gbV9ncmFwaC52YWx1ZU9mTnVtYmVyQ29uc3RhbnQobm9kZSk7CiAgICAgICAgIHJldHVy
biAhdmFsdWUgJiYgMS4wIC8gdmFsdWUgPCAwLjA7CiAgICAgfQogICAgIAotICAgIGJvb2wgaXNO
b3RaZXJvKE5vZGVJbmRleCBub2RlSW5kZXgpCisgICAgYm9vbCBpc05vdFplcm8oTm9kZSogbm9k
ZSkKICAgICB7Ci0gICAgICAgIGlmICghbV9ncmFwaC5pc051bWJlckNvbnN0YW50KG5vZGVJbmRl
eCkpCisgICAgICAgIGlmICghbV9ncmFwaC5pc051bWJlckNvbnN0YW50KG5vZGUpKQogICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICByZXR1cm4gISFtX2dyYXBoLnZhbHVlT2ZOdW1i
ZXJDb25zdGFudChub2RlSW5kZXgpOworICAgICAgICByZXR1cm4gISFtX2dyYXBoLnZhbHVlT2ZO
dW1iZXJDb25zdGFudChub2RlKTsKICAgICB9CiAgICAgCi0gICAgYm9vbCBpc1dpdGhpblBvd2Vy
T2ZUd29Gb3JDb25zdGFudChOb2RlJiBub2RlLCBpbnQgcG93ZXIpCisgICAgYm9vbCBpc1dpdGhp
blBvd2VyT2ZUd29Gb3JDb25zdGFudChOb2RlKiBub2RlLCBpbnQgcG93ZXIpCiAgICAgewotICAg
ICAgICBKU1ZhbHVlIGltbWVkaWF0ZVZhbHVlID0gbm9kZS52YWx1ZU9mSlNDb25zdGFudChjb2Rl
QmxvY2soKSk7CisgICAgICAgIEpTVmFsdWUgaW1tZWRpYXRlVmFsdWUgPSBub2RlLT52YWx1ZU9m
SlNDb25zdGFudChjb2RlQmxvY2soKSk7CiAgICAgICAgIGlmICghaW1tZWRpYXRlVmFsdWUuaXNJ
bnQzMigpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBpbnQzMl90IGludElt
bWVkaWF0ZSA9IGltbWVkaWF0ZVZhbHVlLmFzSW50MzIoKTsKICAgICAgICAgcmV0dXJuIGludElt
bWVkaWF0ZSA+IC0oMSA8PCBwb3dlcikgJiYgaW50SW1tZWRpYXRlIDwgKDEgPDwgcG93ZXIpOwog
ICAgIH0KICAgICAKLSAgICBib29sIGlzV2l0aGluUG93ZXJPZlR3b05vblJlY3Vyc2l2ZShOb2Rl
SW5kZXggbm9kZUluZGV4LCBpbnQgcG93ZXIpCisgICAgYm9vbCBpc1dpdGhpblBvd2VyT2ZUd29O
b25SZWN1cnNpdmUoTm9kZSogbm9kZSwgaW50IHBvd2VyKQogICAgIHsKLSAgICAgICAgTm9kZSYg
bm9kZSA9IG1fZ3JhcGhbbm9kZUluZGV4XTsKLSAgICAgICAgaWYgKG5vZGUub3AoKSAhPSBKU0Nv
bnN0YW50KQorICAgICAgICBpZiAobm9kZS0+b3AoKSAhPSBKU0NvbnN0YW50KQogICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgICAgICByZXR1cm4gaXNXaXRoaW5Qb3dlck9mVHdvRm9yQ29u
c3RhbnQobm9kZSwgcG93ZXIpOwogICAgIH0KICAgICAKLSAgICBib29sIGlzV2l0aGluUG93ZXJP
ZlR3byhOb2RlSW5kZXggbm9kZUluZGV4LCBpbnQgcG93ZXIpCisgICAgYm9vbCBpc1dpdGhpblBv
d2VyT2ZUd28oTm9kZSogbm9kZSwgaW50IHBvd2VyKQogICAgIHsKLSAgICAgICAgTm9kZSYgbm9k
ZSA9IG1fZ3JhcGhbbm9kZUluZGV4XTsKLSAgICAgICAgc3dpdGNoIChub2RlLm9wKCkpIHsKKyAg
ICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CiAgICAgICAgIGNhc2UgSlNDb25zdGFudDogewog
ICAgICAgICAgICAgcmV0dXJuIGlzV2l0aGluUG93ZXJPZlR3b0ZvckNvbnN0YW50KG5vZGUsIHBv
d2VyKTsKICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgQml0QW5kOiB7Ci0g
ICAgICAgICAgICByZXR1cm4gaXNXaXRoaW5Qb3dlck9mVHdvTm9uUmVjdXJzaXZlKG5vZGUuY2hp
bGQxKCkuaW5kZXgoKSwgcG93ZXIpCi0gICAgICAgICAgICAgICAgfHwgaXNXaXRoaW5Qb3dlck9m
VHdvTm9uUmVjdXJzaXZlKG5vZGUuY2hpbGQyKCkuaW5kZXgoKSwgcG93ZXIpOworICAgICAgICAg
ICAgcmV0dXJuIGlzV2l0aGluUG93ZXJPZlR3b05vblJlY3Vyc2l2ZShub2RlLT5jaGlsZDEoKS5u
b2RlKCksIHBvd2VyKQorICAgICAgICAgICAgICAgIHx8IGlzV2l0aGluUG93ZXJPZlR3b05vblJl
Y3Vyc2l2ZShub2RlLT5jaGlsZDIoKS5ub2RlKCksIHBvd2VyKTsKICAgICAgICAgfQogICAgICAg
ICAgICAgCiAgICAgICAgIGNhc2UgQml0UlNoaWZ0OgogICAgICAgICBjYXNlIEJpdFVSU2hpZnQ6
IHsKLSAgICAgICAgICAgIE5vZGUmIHNoaWZ0QW1vdW50ID0gbV9ncmFwaFtub2RlLmNoaWxkMigp
XTsKLSAgICAgICAgICAgIGlmIChzaGlmdEFtb3VudC5vcCgpICE9IEpTQ29uc3RhbnQpCisgICAg
ICAgICAgICBOb2RlKiBzaGlmdEFtb3VudCA9IG5vZGUtPmNoaWxkMigpLm5vZGUoKTsKKyAgICAg
ICAgICAgIGlmIChzaGlmdEFtb3VudC0+b3AoKSAhPSBKU0NvbnN0YW50KQogICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIEpTVmFsdWUgaW1tZWRpYXRlVmFsdWUgPSBz
aGlmdEFtb3VudC52YWx1ZU9mSlNDb25zdGFudChjb2RlQmxvY2soKSk7CisgICAgICAgICAgICBK
U1ZhbHVlIGltbWVkaWF0ZVZhbHVlID0gc2hpZnRBbW91bnQtPnZhbHVlT2ZKU0NvbnN0YW50KGNv
ZGVCbG9jaygpKTsKICAgICAgICAgICAgIGlmICghaW1tZWRpYXRlVmFsdWUuaXNJbnQzMigpKQog
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgIHJldHVybiBpbW1lZGlh
dGVWYWx1ZSA+IDMyIC0gcG93ZXI7CkBAIC0xNzgsMTYgKzE3NiwxNiBAQCBwcml2YXRlOgogICAg
ICAgICByZXR1cm4gc3BlY3VsYXRlZERvdWJsZVR5cGVGb3JQcmVkaWN0aW9uKG1lcmdlU3BlY3Vs
YXRpb25zKGxlZnQsIHJpZ2h0KSk7CiAgICAgfQogCi0gICAgdm9pZCBwcm9wYWdhdGUoTm9kZSYg
bm9kZSkKKyAgICB2b2lkIHByb3BhZ2F0ZShOb2RlKiBub2RlKQogICAgIHsKLSAgICAgICAgaWYg
KCFub2RlLnNob3VsZEdlbmVyYXRlKCkpCisgICAgICAgIGlmICghbm9kZS0+c2hvdWxkR2VuZXJh
dGUoKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgCi0gICAgICAgIE5vZGVUeXBlIG9w
ID0gbm9kZS5vcCgpOwotICAgICAgICBOb2RlRmxhZ3MgZmxhZ3MgPSBub2RlLmZsYWdzKCkgJiBO
b2RlQmFja1Byb3BNYXNrOworICAgICAgICBOb2RlVHlwZSBvcCA9IG5vZGUtPm9wKCk7CisgICAg
ICAgIE5vZGVGbGFncyBmbGFncyA9IG5vZGUtPmZsYWdzKCkgJiBOb2RlQmFja1Byb3BNYXNrOwog
CiAjaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQotICAgICAgICBkYXRh
TG9nRigiICAgJXMgQCV1OiAlcyAiLCBHcmFwaDo6b3BOYW1lKG9wKSwgbV9jb21waWxlSW5kZXgs
IG5vZGVGbGFnc0FzU3RyaW5nKGZsYWdzKSk7CisgICAgICAgIGRhdGFMb2coIiAgICIsIEdyYXBo
OjpvcE5hbWUob3ApLCAiICIsIG1fY3VycmVudE5vZGUsICI6ICIsIG5vZGVGbGFnc0FzU3RyaW5n
KGZsYWdzKSwgIiAiKTsKICNlbmRpZgogICAgICAgICAKICAgICAgICAgYm9vbCBjaGFuZ2VkID0g
ZmFsc2U7CkBAIC0xOTUsMTIgKzE5MywxMiBAQCBwcml2YXRlOgogICAgICAgICBzd2l0Y2ggKG9w
KSB7CiAgICAgICAgIGNhc2UgSlNDb25zdGFudDoKICAgICAgICAgY2FzZSBXZWFrSlNDb25zdGFu
dDogewotICAgICAgICAgICAgY2hhbmdlZCB8PSBzZXRQcmVkaWN0aW9uKHNwZWN1bGF0aW9uRnJv
bVZhbHVlKG1fZ3JhcGgudmFsdWVPZkpTQ29uc3RhbnQobV9jb21waWxlSW5kZXgpKSk7CisgICAg
ICAgICAgICBjaGFuZ2VkIHw9IHNldFByZWRpY3Rpb24oc3BlY3VsYXRpb25Gcm9tVmFsdWUobV9n
cmFwaC52YWx1ZU9mSlNDb25zdGFudChub2RlKSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBjYXNlIEdldExvY2FsOiB7Ci0gICAgICAgICAg
ICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9IG5vZGUudmFyaWFibGVB
Y2Nlc3NEYXRhKCk7CisgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNj
ZXNzRGF0YSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOwogICAgICAgICAgICAgU3BlY3Vs
YXRlZFR5cGUgcHJlZGljdGlvbiA9IHZhcmlhYmxlQWNjZXNzRGF0YS0+cHJlZGljdGlvbigpOwog
ICAgICAgICAgICAgaWYgKHByZWRpY3Rpb24pCiAgICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBt
ZXJnZVByZWRpY3Rpb24ocHJlZGljdGlvbik7CkBAIC0yMTAsMjEgKzIwOCwyMSBAQCBwcml2YXRl
OgogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBTZXRMb2NhbDogewotICAg
ICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBub2RlLnZh
cmlhYmxlQWNjZXNzRGF0YSgpOwotICAgICAgICAgICAgY2hhbmdlZCB8PSB2YXJpYWJsZUFjY2Vz
c0RhdGEtPnByZWRpY3QobV9ncmFwaFtub2RlLmNoaWxkMSgpXS5wcmVkaWN0aW9uKCkpOworICAg
ICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBub2RlLT52
YXJpYWJsZUFjY2Vzc0RhdGEoKTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gdmFyaWFibGVBY2Nl
c3NEYXRhLT5wcmVkaWN0KG5vZGUtPmNoaWxkMSgpLT5wcmVkaWN0aW9uKCkpOwogCiAgICAgICAg
ICAgICAvLyBBc3N1bWUgY29uc2VydmF0aXZlbHkgdGhhdCBhIFNldExvY2FsIGltcGxpZXMgdGhh
dCB0aGUgdmFsdWUgbWF5IGZsb3cgdGhyb3VnaCBhIGxvb3AsCiAgICAgICAgICAgICAvLyBhbmQg
c28gd2Ugd291bGQgaGF2ZSBvdmVyZmxvdyBsZWFkaW5nIHRvIHRoZSBwcm9ncmFtICJvYnNlcnZp
bmciIG51bWJlcnMgZXZlbiBpZiBhbGwKICAgICAgICAgICAgIC8vIHVzZXJzIG9mIHRoZSB2YWx1
ZSBhcmUgZG9pbmcgdG9JbnQzMi4gSXQgbWlnaHQgYmUgd29ydGh3aGlsZSB0byByZXZpc2l0IHRo
aXMgYXQgc29tZQogICAgICAgICAgICAgLy8gcG9pbnQgYW5kIGFjdHVhbGx5IGNoZWNrIGlmIHRo
ZSBkYXRhIGZsb3cgaW52b2x2ZXMgbG9vcHMsIGJ1dCByaWdodCBub3cgSSBkb24ndCB0aGluawog
ICAgICAgICAgICAgLy8gd2UgaGF2ZSBldmlkZW5jZSB0aGF0IHRoaXMgd291bGQgYmUgYmVuZWZp
Y2lhbCBmb3IgYmVuY2htYXJrcy4KLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaFtub2Rl
LmNoaWxkMSgpXS5tZXJnZUZsYWdzKHZhcmlhYmxlQWNjZXNzRGF0YS0+ZmxhZ3MoKSB8IE5vZGVV
c2VkQXNOdW1iZXIpOworICAgICAgICAgICAgY2hhbmdlZCB8PSBub2RlLT5jaGlsZDEoKS0+bWVy
Z2VGbGFncyh2YXJpYWJsZUFjY2Vzc0RhdGEtPmZsYWdzKCkgfCBOb2RlVXNlZEFzTnVtYmVyKTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2Fz
ZSBGbHVzaDogewogICAgICAgICAgICAgLy8gTWFrZSBzdXJlIHRoYXQgdGhlIGFuYWx5c2lzIGtu
b3dzIHRoYXQgZmx1c2hlZCBsb2NhbHMgZXNjYXBlLgotICAgICAgICAgICAgVmFyaWFibGVBY2Nl
c3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBub2RlLnZhcmlhYmxlQWNjZXNzRGF0YSgpOwor
ICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBub2Rl
LT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKICAgICAgICAgICAgIGNoYW5nZWQgfD0gdmFyaWFibGVB
Y2Nlc3NEYXRhLT5tZXJnZUZsYWdzKE5vZGVVc2VkQXNWYWx1ZSk7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgfQpAQCAtMjM4LDggKzIzNiw4IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBj
aGFuZ2VkIHw9IHNldFByZWRpY3Rpb24oU3BlY0ludDMyKTsKICAgICAgICAgICAgIGZsYWdzIHw9
IE5vZGVVc2VkQXNJbnQgfCBOb2RlVXNlZEFzSW50TG9jYWxseTsKICAgICAgICAgICAgIGZsYWdz
ICY9IH4oTm9kZVVzZWRBc051bWJlciB8IE5vZGVOZWVkc05lZ1plcm8gfCBOb2RlVXNlZEFzT3Ro
ZXIpOwotICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLm1lcmdl
RmxhZ3MoZmxhZ3MpOwotICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQy
KCldLm1lcmdlRmxhZ3MoZmxhZ3MpOworICAgICAgICAgICAgY2hhbmdlZCB8PSBub2RlLT5jaGls
ZDEoKS0+bWVyZ2VGbGFncyhmbGFncyk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG5vZGUtPmNo
aWxkMigpLT5tZXJnZUZsYWdzKGZsYWdzKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9
CiAgICAgICAgICAgICAKQEAgLTI0Nyw1MCArMjQ1LDUwIEBAIHByaXZhdGU6CiAgICAgICAgICAg
ICBjaGFuZ2VkIHw9IHNldFByZWRpY3Rpb24oU3BlY0ludDMyKTsKICAgICAgICAgICAgIGZsYWdz
IHw9IE5vZGVVc2VkQXNJbnQgfCBOb2RlVXNlZEFzSW50TG9jYWxseTsKICAgICAgICAgICAgIGZs
YWdzICY9IH4oTm9kZVVzZWRBc051bWJlciB8IE5vZGVOZWVkc05lZ1plcm8gfCBOb2RlVXNlZEFz
T3RoZXIpOwotICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLm1l
cmdlRmxhZ3MoZmxhZ3MpOworICAgICAgICAgICAgY2hhbmdlZCB8PSBub2RlLT5jaGlsZDEoKS0+
bWVyZ2VGbGFncyhmbGFncyk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAg
ICAgICAgCiAgICAgICAgIGNhc2UgQXJyYXlQb3A6IHsKLSAgICAgICAgICAgIGNoYW5nZWQgfD0g
bWVyZ2VQcmVkaWN0aW9uKG5vZGUuZ2V0SGVhcFByZWRpY3Rpb24oKSk7CisgICAgICAgICAgICBj
aGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbihub2RlLT5nZXRIZWFwUHJlZGljdGlvbigpKTsKICAg
ICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VEZWZhdWx0RmxhZ3Mobm9kZSk7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgfQogCiAgICAgICAgIGNhc2UgQXJyYXlQdXNoOiB7Ci0gICAgICAg
ICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbihub2RlLmdldEhlYXBQcmVkaWN0aW9uKCkp
OwotICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLm1lcmdlRmxh
Z3MoTm9kZVVzZWRBc1ZhbHVlKTsKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaFtub2Rl
LmNoaWxkMigpXS5tZXJnZUZsYWdzKE5vZGVVc2VkQXNWYWx1ZSk7CisgICAgICAgICAgICBjaGFu
Z2VkIHw9IG1lcmdlUHJlZGljdGlvbihub2RlLT5nZXRIZWFwUHJlZGljdGlvbigpKTsKKyAgICAg
ICAgICAgIGNoYW5nZWQgfD0gbm9kZS0+Y2hpbGQxKCktPm1lcmdlRmxhZ3MoTm9kZVVzZWRBc1Zh
bHVlKTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbm9kZS0+Y2hpbGQyKCktPm1lcmdlRmxhZ3Mo
Tm9kZVVzZWRBc1ZhbHVlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKICAgICAg
ICAgY2FzZSBSZWdFeHBFeGVjOgogICAgICAgICBjYXNlIFJlZ0V4cFRlc3Q6IHsKLSAgICAgICAg
ICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKG5vZGUuZ2V0SGVhcFByZWRpY3Rpb24oKSk7
CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbihub2RlLT5nZXRIZWFwUHJl
ZGljdGlvbigpKTsKICAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VEZWZhdWx0RmxhZ3Mobm9k
ZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCiAgICAgICAgIGNhc2UgU3RyaW5n
Q2hhckNvZGVBdDogewogICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVByZWRpY3Rpb24oU3Bl
Y0ludDMyKTsKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5t
ZXJnZUZsYWdzKE5vZGVVc2VkQXNWYWx1ZSk7Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3Jh
cGhbbm9kZS5jaGlsZDIoKV0ubWVyZ2VGbGFncyhOb2RlVXNlZEFzTnVtYmVyIHwgTm9kZVVzZWRB
c090aGVyIHwgTm9kZVVzZWRBc0ludCB8IE5vZGVVc2VkQXNJbnRMb2NhbGx5KTsKKyAgICAgICAg
ICAgIGNoYW5nZWQgfD0gbm9kZS0+Y2hpbGQxKCktPm1lcmdlRmxhZ3MoTm9kZVVzZWRBc1ZhbHVl
KTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbm9kZS0+Y2hpbGQyKCktPm1lcmdlRmxhZ3MoTm9k
ZVVzZWRBc051bWJlciB8IE5vZGVVc2VkQXNPdGhlciB8IE5vZGVVc2VkQXNJbnQgfCBOb2RlVXNl
ZEFzSW50TG9jYWxseSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCiAgICAgICAg
IGNhc2UgVUludDMyVG9OdW1iZXI6IHsKLSAgICAgICAgICAgIGlmIChub2RlQ2FuU3BlY3VsYXRl
SW50ZWdlcihub2RlLmFyaXRoTm9kZUZsYWdzKCkpKQorICAgICAgICAgICAgaWYgKG5vZGVDYW5T
cGVjdWxhdGVJbnRlZ2VyKG5vZGUtPmFyaXRoTm9kZUZsYWdzKCkpKQogICAgICAgICAgICAgICAg
IGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKFNwZWNJbnQzMik7CiAgICAgICAgICAgICBlbHNl
CiAgICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVByZWRpY3Rpb24oU3BlY051bWJlcik7
CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaFtub2RlLmNoaWxk
MSgpXS5tZXJnZUZsYWdzKGZsYWdzKTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbm9kZS0+Y2hp
bGQxKCktPm1lcmdlRmxhZ3MoZmxhZ3MpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0K
IAogICAgICAgICBjYXNlIFZhbHVlQWRkOiB7Ci0gICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSBs
ZWZ0ID0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5wcmVkaWN0aW9uKCk7Ci0gICAgICAgICAgICBT
cGVjdWxhdGVkVHlwZSByaWdodCA9IG1fZ3JhcGhbbm9kZS5jaGlsZDIoKV0ucHJlZGljdGlvbigp
OworICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgbGVmdCA9IG5vZGUtPmNoaWxkMSgpLT5wcmVk
aWN0aW9uKCk7CisgICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSByaWdodCA9IG5vZGUtPmNoaWxk
MigpLT5wcmVkaWN0aW9uKCk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIEFkZFNwZWN1bGF0
aW9uTW9kZSBtb2RlID0gRG9udFNwZWN1bGF0ZUludGVnZXI7CiAgICAgICAgICAgICAKQEAgLTMw
NywyMiArMzA1LDIyIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0g
bWVyZ2VQcmVkaWN0aW9uKFNwZWNTdHJpbmcgfCBTcGVjSW50MzIgfCBTcGVjRG91YmxlKTsKICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKGlzTm90TmVnWmVybyhu
b2RlLmNoaWxkMSgpLmluZGV4KCkpIHx8IGlzTm90TmVnWmVybyhub2RlLmNoaWxkMigpLmluZGV4
KCkpKQorICAgICAgICAgICAgaWYgKGlzTm90TmVnWmVybyhub2RlLT5jaGlsZDEoKS5ub2RlKCkp
IHx8IGlzTm90TmVnWmVybyhub2RlLT5jaGlsZDIoKS5ub2RlKCkpKQogICAgICAgICAgICAgICAg
IGZsYWdzICY9IH5Ob2RlTmVlZHNOZWdaZXJvOwotICAgICAgICAgICAgaWYgKG1fZ3JhcGhbbm9k
ZS5jaGlsZDEoKV0uaGFzTnVtYmVyUmVzdWx0KCkgfHwgbV9ncmFwaFtub2RlLmNoaWxkMigpXS5o
YXNOdW1iZXJSZXN1bHQoKSkKKyAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS0+aGFzTnVt
YmVyUmVzdWx0KCkgfHwgbm9kZS0+Y2hpbGQyKCktPmhhc051bWJlclJlc3VsdCgpKQogICAgICAg
ICAgICAgICAgIGZsYWdzICY9IH5Ob2RlVXNlZEFzT3RoZXI7CiAgICAgICAgICAgICAKICAgICAg
ICAgICAgIGlmIChtb2RlICE9IFNwZWN1bGF0ZUludGVnZXIpCiAgICAgICAgICAgICAgICAgZmxh
Z3MgfD0gTm9kZVVzZWRBc051bWJlcjsKICAgICAgICAgICAgIAotICAgICAgICAgICAgY2hhbmdl
ZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLm1lcmdlRmxhZ3MoZmxhZ3MpOwotICAgICAgICAg
ICAgY2hhbmdlZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQyKCldLm1lcmdlRmxhZ3MoZmxhZ3MpOwor
ICAgICAgICAgICAgY2hhbmdlZCB8PSBub2RlLT5jaGlsZDEoKS0+bWVyZ2VGbGFncyhmbGFncyk7
CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG5vZGUtPmNoaWxkMigpLT5tZXJnZUZsYWdzKGZsYWdz
KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAg
Y2FzZSBBcml0aEFkZDogewotICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgbGVmdCA9IG1fZ3Jh
cGhbbm9kZS5jaGlsZDEoKV0ucHJlZGljdGlvbigpOwotICAgICAgICAgICAgU3BlY3VsYXRlZFR5
cGUgcmlnaHQgPSBtX2dyYXBoW25vZGUuY2hpbGQyKCldLnByZWRpY3Rpb24oKTsKKyAgICAgICAg
ICAgIFNwZWN1bGF0ZWRUeXBlIGxlZnQgPSBub2RlLT5jaGlsZDEoKS0+cHJlZGljdGlvbigpOwor
ICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgcmlnaHQgPSBub2RlLT5jaGlsZDIoKS0+cHJlZGlj
dGlvbigpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBBZGRTcGVjdWxhdGlvbk1vZGUgbW9k
ZSA9IERvbnRTcGVjdWxhdGVJbnRlZ2VyOwogICAgICAgICAgICAgCkBAIC0zMzMsMjEgKzMzMSwy
MSBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGlj
dGlvbihzcGVjdWxhdGVkRG91YmxlVHlwZUZvclByZWRpY3Rpb25zKGxlZnQsIHJpZ2h0KSk7CiAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChpc05vdE5lZ1plcm8o
bm9kZS5jaGlsZDEoKS5pbmRleCgpKSB8fCBpc05vdE5lZ1plcm8obm9kZS5jaGlsZDIoKS5pbmRl
eCgpKSkKKyAgICAgICAgICAgIGlmIChpc05vdE5lZ1plcm8obm9kZS0+Y2hpbGQxKCkubm9kZSgp
KSB8fCBpc05vdE5lZ1plcm8obm9kZS0+Y2hpbGQyKCkubm9kZSgpKSkKICAgICAgICAgICAgICAg
ICBmbGFncyAmPSB+Tm9kZU5lZWRzTmVnWmVybzsKICAgICAgICAgICAgIGZsYWdzICY9IH5Ob2Rl
VXNlZEFzT3RoZXI7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlmIChtb2RlICE9IFNwZWN1
bGF0ZUludGVnZXIpCiAgICAgICAgICAgICAgICAgZmxhZ3MgfD0gTm9kZVVzZWRBc051bWJlcjsK
ICAgICAgICAgICAgIAotICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQx
KCldLm1lcmdlRmxhZ3MoZmxhZ3MpOwotICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW25v
ZGUuY2hpbGQyKCldLm1lcmdlRmxhZ3MoZmxhZ3MpOworICAgICAgICAgICAgY2hhbmdlZCB8PSBu
b2RlLT5jaGlsZDEoKS0+bWVyZ2VGbGFncyhmbGFncyk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9
IG5vZGUtPmNoaWxkMigpLT5tZXJnZUZsYWdzKGZsYWdzKTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBBcml0aFN1YjogewotICAgICAg
ICAgICAgU3BlY3VsYXRlZFR5cGUgbGVmdCA9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ucHJlZGlj
dGlvbigpOwotICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgcmlnaHQgPSBtX2dyYXBoW25vZGUu
Y2hpbGQyKCldLnByZWRpY3Rpb24oKTsKKyAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIGxlZnQg
PSBub2RlLT5jaGlsZDEoKS0+cHJlZGljdGlvbigpOworICAgICAgICAgICAgU3BlY3VsYXRlZFR5
cGUgcmlnaHQgPSBub2RlLT5jaGlsZDIoKS0+cHJlZGljdGlvbigpOwogICAgICAgICAgICAgCiAg
ICAgICAgICAgICBBZGRTcGVjdWxhdGlvbk1vZGUgbW9kZSA9IERvbnRTcGVjdWxhdGVJbnRlZ2Vy
OwogICAgICAgICAgICAgCkBAIC0zNTgsMzkgKzM1NiwzOSBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbihzcGVjdWxhdGVkRG91YmxlVHlw
ZUZvclByZWRpY3Rpb25zKGxlZnQsIHJpZ2h0KSk7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAg
ICAgIGlmIChpc05vdFplcm8obm9kZS5jaGlsZDEoKS5pbmRleCgpKSB8fCBpc05vdFplcm8obm9k
ZS5jaGlsZDIoKS5pbmRleCgpKSkKKyAgICAgICAgICAgIGlmIChpc05vdFplcm8obm9kZS0+Y2hp
bGQxKCkubm9kZSgpKSB8fCBpc05vdFplcm8obm9kZS0+Y2hpbGQyKCkubm9kZSgpKSkKICAgICAg
ICAgICAgICAgICBmbGFncyAmPSB+Tm9kZU5lZWRzTmVnWmVybzsKICAgICAgICAgICAgIGZsYWdz
ICY9IH5Ob2RlVXNlZEFzT3RoZXI7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlmIChtb2Rl
ICE9IFNwZWN1bGF0ZUludGVnZXIpCiAgICAgICAgICAgICAgICAgZmxhZ3MgfD0gTm9kZVVzZWRB
c051bWJlcjsKICAgICAgICAgICAgIAotICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW25v
ZGUuY2hpbGQxKCldLm1lcmdlRmxhZ3MoZmxhZ3MpOwotICAgICAgICAgICAgY2hhbmdlZCB8PSBt
X2dyYXBoW25vZGUuY2hpbGQyKCldLm1lcmdlRmxhZ3MoZmxhZ3MpOworICAgICAgICAgICAgY2hh
bmdlZCB8PSBub2RlLT5jaGlsZDEoKS0+bWVyZ2VGbGFncyhmbGFncyk7CisgICAgICAgICAgICBj
aGFuZ2VkIHw9IG5vZGUtPmNoaWxkMigpLT5tZXJnZUZsYWdzKGZsYWdzKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBBcml0aE5lZ2F0
ZToKLSAgICAgICAgICAgIGlmIChtX2dyYXBoW25vZGUuY2hpbGQxKCldLnByZWRpY3Rpb24oKSkg
eworICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5wcmVkaWN0aW9uKCkpIHsKICAgICAg
ICAgICAgICAgICBpZiAobV9ncmFwaC5uZWdhdGVTaG91bGRTcGVjdWxhdGVJbnRlZ2VyKG5vZGUp
KQogICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbihTcGVjSW50
MzIpOwogICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCB8
PSBtZXJnZVByZWRpY3Rpb24oc3BlY3VsYXRlZERvdWJsZVR5cGVGb3JQcmVkaWN0aW9uKG1fZ3Jh
cGhbbm9kZS5jaGlsZDEoKV0ucHJlZGljdGlvbigpKSk7CisgICAgICAgICAgICAgICAgICAgIGNo
YW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKHNwZWN1bGF0ZWREb3VibGVUeXBlRm9yUHJlZGljdGlv
bihub2RlLT5jaGlsZDEoKS0+cHJlZGljdGlvbigpKSk7CiAgICAgICAgICAgICB9CiAKICAgICAg
ICAgICAgIGZsYWdzICY9IH5Ob2RlVXNlZEFzT3RoZXI7CiAKLSAgICAgICAgICAgIGNoYW5nZWQg
fD0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5tZXJnZUZsYWdzKGZsYWdzKTsKKyAgICAgICAgICAg
IGNoYW5nZWQgfD0gbm9kZS0+Y2hpbGQxKCktPm1lcmdlRmxhZ3MoZmxhZ3MpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBBcml0aE1pbjoKICAgICAgICAg
Y2FzZSBBcml0aE1heDogewotICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgbGVmdCA9IG1fZ3Jh
cGhbbm9kZS5jaGlsZDEoKV0ucHJlZGljdGlvbigpOwotICAgICAgICAgICAgU3BlY3VsYXRlZFR5
cGUgcmlnaHQgPSBtX2dyYXBoW25vZGUuY2hpbGQyKCldLnByZWRpY3Rpb24oKTsKKyAgICAgICAg
ICAgIFNwZWN1bGF0ZWRUeXBlIGxlZnQgPSBub2RlLT5jaGlsZDEoKS0+cHJlZGljdGlvbigpOwor
ICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgcmlnaHQgPSBub2RlLT5jaGlsZDIoKS0+cHJlZGlj
dGlvbigpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAobGVmdCAmJiByaWdodCkgewot
ICAgICAgICAgICAgICAgIGlmIChOb2RlOjpzaG91bGRTcGVjdWxhdGVJbnRlZ2VyRm9yQXJpdGht
ZXRpYyhtX2dyYXBoW25vZGUuY2hpbGQxKCldLCBtX2dyYXBoW25vZGUuY2hpbGQyKCldKQotICAg
ICAgICAgICAgICAgICAgICAmJiBub2RlQ2FuU3BlY3VsYXRlSW50ZWdlcihub2RlLmFyaXRoTm9k
ZUZsYWdzKCkpKQorICAgICAgICAgICAgICAgIGlmIChOb2RlOjpzaG91bGRTcGVjdWxhdGVJbnRl
Z2VyRm9yQXJpdGhtZXRpYyhub2RlLT5jaGlsZDEoKS5ub2RlKCksIG5vZGUtPmNoaWxkMigpLm5v
ZGUoKSkKKyAgICAgICAgICAgICAgICAgICAgJiYgbm9kZUNhblNwZWN1bGF0ZUludGVnZXIobm9k
ZS0+YXJpdGhOb2RlRmxhZ3MoKSkpCiAgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVy
Z2VQcmVkaWN0aW9uKFNwZWNJbnQzMik7CiAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAg
ICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbihzcGVjdWxhdGVkRG91YmxlVHlw
ZUZvclByZWRpY3Rpb25zKGxlZnQsIHJpZ2h0KSk7CkBAIC0zOTksMTQgKzM5NywxNCBAQCBwcml2
YXRlOgogICAgICAgICAgICAgZmxhZ3MgfD0gTm9kZVVzZWRBc051bWJlcjsKICAgICAgICAgICAg
IGZsYWdzICY9IH5Ob2RlVXNlZEFzT3RoZXI7CiAKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9n
cmFwaFtub2RlLmNoaWxkMSgpXS5tZXJnZUZsYWdzKGZsYWdzKTsKLSAgICAgICAgICAgIGNoYW5n
ZWQgfD0gbV9ncmFwaFtub2RlLmNoaWxkMigpXS5tZXJnZUZsYWdzKGZsYWdzKTsKKyAgICAgICAg
ICAgIGNoYW5nZWQgfD0gbm9kZS0+Y2hpbGQxKCktPm1lcmdlRmxhZ3MoZmxhZ3MpOworICAgICAg
ICAgICAgY2hhbmdlZCB8PSBub2RlLT5jaGlsZDIoKS0+bWVyZ2VGbGFncyhmbGFncyk7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQogCiAgICAgICAgIGNhc2UgQXJpdGhNdWw6IHsKLSAg
ICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIGxlZnQgPSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLnBy
ZWRpY3Rpb24oKTsKLSAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHJpZ2h0ID0gbV9ncmFwaFtu
b2RlLmNoaWxkMigpXS5wcmVkaWN0aW9uKCk7CisgICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSBs
ZWZ0ID0gbm9kZS0+Y2hpbGQxKCktPnByZWRpY3Rpb24oKTsKKyAgICAgICAgICAgIFNwZWN1bGF0
ZWRUeXBlIHJpZ2h0ID0gbm9kZS0+Y2hpbGQyKCktPnByZWRpY3Rpb24oKTsKICAgICAgICAgICAg
IAogICAgICAgICAgICAgaWYgKGxlZnQgJiYgcmlnaHQpIHsKICAgICAgICAgICAgICAgICBpZiAo
bV9ncmFwaC5tdWxTaG91bGRTcGVjdWxhdGVJbnRlZ2VyKG5vZGUpKQpAQCAtNDIyLDggKzQyMCw4
IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAvLyBpdHNlbGYgdW5sZXNzIHdlIGNhbiBwcm92ZSB0
aGF0IHRoZXJlIGlzIG5vIHdheSBmb3IgdGhlIHZhbHVlcwogICAgICAgICAgICAgLy8gcHJvZHVj
ZWQgdG8gY2F1c2UgZG91YmxlIHJvdW5kaW5nLgogICAgICAgICAgICAgCi0gICAgICAgICAgICBp
ZiAoIWlzV2l0aGluUG93ZXJPZlR3byhub2RlLmNoaWxkMSgpLmluZGV4KCksIDIyKQotICAgICAg
ICAgICAgICAgICYmICFpc1dpdGhpblBvd2VyT2ZUd28obm9kZS5jaGlsZDIoKS5pbmRleCgpLCAy
MikpCisgICAgICAgICAgICBpZiAoIWlzV2l0aGluUG93ZXJPZlR3byhub2RlLT5jaGlsZDEoKS5u
b2RlKCksIDIyKQorICAgICAgICAgICAgICAgICYmICFpc1dpdGhpblBvd2VyT2ZUd28obm9kZS0+
Y2hpbGQyKCkubm9kZSgpLCAyMikpCiAgICAgICAgICAgICAgICAgZmxhZ3MgfD0gTm9kZVVzZWRB
c051bWJlcjsKICAgICAgICAgICAgIAogICAgICAgICAgICAgY2hhbmdlZCB8PSBub2RlLm1lcmdl
RmxhZ3MoZmxhZ3MpOwpAQCAtNDMxLDE4ICs0MjksMTggQEAgcHJpdmF0ZToKICAgICAgICAgICAg
IGZsYWdzIHw9IE5vZGVVc2VkQXNOdW1iZXIgfCBOb2RlTmVlZHNOZWdaZXJvOwogICAgICAgICAg
ICAgZmxhZ3MgJj0gfk5vZGVVc2VkQXNPdGhlcjsKIAotICAgICAgICAgICAgY2hhbmdlZCB8PSBt
X2dyYXBoW25vZGUuY2hpbGQxKCldLm1lcmdlRmxhZ3MoZmxhZ3MpOwotICAgICAgICAgICAgY2hh
bmdlZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQyKCldLm1lcmdlRmxhZ3MoZmxhZ3MpOworICAgICAg
ICAgICAgY2hhbmdlZCB8PSBub2RlLT5jaGlsZDEoKS0+bWVyZ2VGbGFncyhmbGFncyk7CisgICAg
ICAgICAgICBjaGFuZ2VkIHw9IG5vZGUtPmNoaWxkMigpLT5tZXJnZUZsYWdzKGZsYWdzKTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBB
cml0aERpdjogewotICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgbGVmdCA9IG1fZ3JhcGhbbm9k
ZS5jaGlsZDEoKV0ucHJlZGljdGlvbigpOwotICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgcmln
aHQgPSBtX2dyYXBoW25vZGUuY2hpbGQyKCldLnByZWRpY3Rpb24oKTsKKyAgICAgICAgICAgIFNw
ZWN1bGF0ZWRUeXBlIGxlZnQgPSBub2RlLT5jaGlsZDEoKS0+cHJlZGljdGlvbigpOworICAgICAg
ICAgICAgU3BlY3VsYXRlZFR5cGUgcmlnaHQgPSBub2RlLT5jaGlsZDIoKS0+cHJlZGljdGlvbigp
OwogICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAobGVmdCAmJiByaWdodCkgewotICAgICAg
ICAgICAgICAgIGlmIChOb2RlOjpzaG91bGRTcGVjdWxhdGVJbnRlZ2VyRm9yQXJpdGhtZXRpYyht
X2dyYXBoW25vZGUuY2hpbGQxKCldLCBtX2dyYXBoW25vZGUuY2hpbGQyKCldKQotICAgICAgICAg
ICAgICAgICAgICAmJiBub2RlQ2FuU3BlY3VsYXRlSW50ZWdlcihub2RlLmFyaXRoTm9kZUZsYWdz
KCkpKQorICAgICAgICAgICAgICAgIGlmIChOb2RlOjpzaG91bGRTcGVjdWxhdGVJbnRlZ2VyRm9y
QXJpdGhtZXRpYyhub2RlLT5jaGlsZDEoKS5ub2RlKCksIG5vZGUtPmNoaWxkMigpLm5vZGUoKSkK
KyAgICAgICAgICAgICAgICAgICAgJiYgbm9kZUNhblNwZWN1bGF0ZUludGVnZXIobm9kZS0+YXJp
dGhOb2RlRmxhZ3MoKSkpCiAgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVk
aWN0aW9uKFNwZWNJbnQzMik7CiAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAg
ICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbihTcGVjRG91YmxlKTsKQEAgLTQ1NiwxOCAr
NDU0LDE4IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBmbGFncyB8PSBOb2RlVXNlZEFzTnVtYmVy
IHwgTm9kZU5lZWRzTmVnWmVybzsKICAgICAgICAgICAgIGZsYWdzICY9IH5Ob2RlVXNlZEFzT3Ro
ZXI7CiAKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5tZXJn
ZUZsYWdzKGZsYWdzKTsKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaFtub2RlLmNoaWxk
MigpXS5tZXJnZUZsYWdzKGZsYWdzKTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbm9kZS0+Y2hp
bGQxKCktPm1lcmdlRmxhZ3MoZmxhZ3MpOworICAgICAgICAgICAgY2hhbmdlZCB8PSBub2RlLT5j
aGlsZDIoKS0+bWVyZ2VGbGFncyhmbGFncyk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
fQogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgQXJpdGhNb2Q6IHsKLSAgICAgICAgICAgIFNw
ZWN1bGF0ZWRUeXBlIGxlZnQgPSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLnByZWRpY3Rpb24oKTsK
LSAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHJpZ2h0ID0gbV9ncmFwaFtub2RlLmNoaWxkMigp
XS5wcmVkaWN0aW9uKCk7CisgICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSBsZWZ0ID0gbm9kZS0+
Y2hpbGQxKCktPnByZWRpY3Rpb24oKTsKKyAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHJpZ2h0
ID0gbm9kZS0+Y2hpbGQyKCktPnByZWRpY3Rpb24oKTsKICAgICAgICAgICAgIAogICAgICAgICAg
ICAgaWYgKGxlZnQgJiYgcmlnaHQpIHsKLSAgICAgICAgICAgICAgICBpZiAoTm9kZTo6c2hvdWxk
U3BlY3VsYXRlSW50ZWdlckZvckFyaXRobWV0aWMobV9ncmFwaFtub2RlLmNoaWxkMSgpXSwgbV9n
cmFwaFtub2RlLmNoaWxkMigpXSkKLSAgICAgICAgICAgICAgICAgICAgJiYgbm9kZUNhblNwZWN1
bGF0ZUludGVnZXIobm9kZS5hcml0aE5vZGVGbGFncygpKSkKKyAgICAgICAgICAgICAgICBpZiAo
Tm9kZTo6c2hvdWxkU3BlY3VsYXRlSW50ZWdlckZvckFyaXRobWV0aWMobm9kZS0+Y2hpbGQxKCku
bm9kZSgpLCBub2RlLT5jaGlsZDIoKS5ub2RlKCkpCisgICAgICAgICAgICAgICAgICAgICYmIG5v
ZGVDYW5TcGVjdWxhdGVJbnRlZ2VyKG5vZGUtPmFyaXRoTm9kZUZsYWdzKCkpKQogICAgICAgICAg
ICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbihTcGVjSW50MzIpOwogICAgICAg
ICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVByZWRp
Y3Rpb24oU3BlY0RvdWJsZSk7CkBAIC00NzYsOCArNDc0LDggQEAgcHJpdmF0ZToKICAgICAgICAg
ICAgIGZsYWdzIHw9IE5vZGVVc2VkQXNOdW1iZXIgfCBOb2RlTmVlZHNOZWdaZXJvOwogICAgICAg
ICAgICAgZmxhZ3MgJj0gfk5vZGVVc2VkQXNPdGhlcjsKIAotICAgICAgICAgICAgY2hhbmdlZCB8
PSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLm1lcmdlRmxhZ3MoZmxhZ3MpOwotICAgICAgICAgICAg
Y2hhbmdlZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQyKCldLm1lcmdlRmxhZ3MoZmxhZ3MpOworICAg
ICAgICAgICAgY2hhbmdlZCB8PSBub2RlLT5jaGlsZDEoKS0+bWVyZ2VGbGFncyhmbGFncyk7Cisg
ICAgICAgICAgICBjaGFuZ2VkIHw9IG5vZGUtPmNoaWxkMigpLT5tZXJnZUZsYWdzKGZsYWdzKTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKQEAgLTQ4NSwxOSAr
NDgzLDE5IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBjaGFuZ2VkIHw9IHNldFByZWRpY3Rpb24o
U3BlY0RvdWJsZSk7CiAgICAgICAgICAgICBmbGFncyB8PSBOb2RlVXNlZEFzTnVtYmVyIHwgTm9k
ZU5lZWRzTmVnWmVybzsKICAgICAgICAgICAgIGZsYWdzICY9IH5Ob2RlVXNlZEFzT3RoZXI7Ci0g
ICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ubWVyZ2VGbGFncyhm
bGFncyk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG5vZGUtPmNoaWxkMSgpLT5tZXJnZUZsYWdz
KGZsYWdzKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKICAg
ICAgICAgY2FzZSBBcml0aEFiczogewotICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgY2hpbGQg
PSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLnByZWRpY3Rpb24oKTsKKyAgICAgICAgICAgIFNwZWN1
bGF0ZWRUeXBlIGNoaWxkID0gbm9kZS0+Y2hpbGQxKCktPnByZWRpY3Rpb24oKTsKICAgICAgICAg
ICAgIGlmIChpc0ludDMyU3BlY3VsYXRpb25Gb3JBcml0aG1ldGljKGNoaWxkKQotICAgICAgICAg
ICAgICAgICYmIG5vZGVDYW5TcGVjdWxhdGVJbnRlZ2VyKG5vZGUuYXJpdGhOb2RlRmxhZ3MoKSkp
CisgICAgICAgICAgICAgICAgJiYgbm9kZUNhblNwZWN1bGF0ZUludGVnZXIobm9kZS0+YXJpdGhO
b2RlRmxhZ3MoKSkpCiAgICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVByZWRpY3Rpb24o
U3BlY0ludDMyKTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9
IG1lcmdlUHJlZGljdGlvbihzcGVjdWxhdGVkRG91YmxlVHlwZUZvclByZWRpY3Rpb24oY2hpbGQp
KTsKIAotICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLm1lcmdl
RmxhZ3MoZmxhZ3MpOworICAgICAgICAgICAgY2hhbmdlZCB8PSBub2RlLT5jaGlsZDEoKS0+bWVy
Z2VGbGFncyhmbGFncyk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAg
ICAgCkBAIC01MjcsMzEgKzUyNSwzMSBAQCBwcml2YXRlOgogICAgICAgICB9CiAKICAgICAgICAg
Y2FzZSBHZXRCeUlkOiB7Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbihu
b2RlLmdldEhlYXBQcmVkaWN0aW9uKCkpOworICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVBy
ZWRpY3Rpb24obm9kZS0+Z2V0SGVhcFByZWRpY3Rpb24oKSk7CiAgICAgICAgICAgICBjaGFuZ2Vk
IHw9IG1lcmdlRGVmYXVsdEZsYWdzKG5vZGUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IH0KICAgICAgICAgICAgIAogICAgICAgICBjYXNlIEdldEJ5SWRGbHVzaDoKLSAgICAgICAgICAg
IGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKG5vZGUuZ2V0SGVhcFByZWRpY3Rpb24oKSk7Cisg
ICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbihub2RlLT5nZXRIZWFwUHJlZGlj
dGlvbigpKTsKICAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VEZWZhdWx0RmxhZ3Mobm9kZSk7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgICAgICBjYXNlIEdldEJ5VmFs
OiB7Ci0gICAgICAgICAgICBpZiAobV9ncmFwaFtub2RlLmNoaWxkMSgpXS5zaG91bGRTcGVjdWxh
dGVGbG9hdDMyQXJyYXkoKQotICAgICAgICAgICAgICAgIHx8IG1fZ3JhcGhbbm9kZS5jaGlsZDEo
KV0uc2hvdWxkU3BlY3VsYXRlRmxvYXQ2NEFycmF5KCkpCisgICAgICAgICAgICBpZiAobm9kZS0+
Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZUZsb2F0MzJBcnJheSgpCisgICAgICAgICAgICAgICAg
fHwgbm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZUZsb2F0NjRBcnJheSgpKQogICAgICAg
ICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKFNwZWNEb3VibGUpOwogICAgICAg
ICAgICAgZWxzZQogICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKG5v
ZGUuZ2V0SGVhcFByZWRpY3Rpb24oKSk7CiAKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFw
aFtub2RlLmNoaWxkMSgpXS5tZXJnZUZsYWdzKE5vZGVVc2VkQXNWYWx1ZSk7Ci0gICAgICAgICAg
ICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbm9kZS5jaGlsZDIoKV0ubWVyZ2VGbGFncyhOb2RlVXNlZEFz
TnVtYmVyIHwgTm9kZVVzZWRBc090aGVyIHwgTm9kZVVzZWRBc0ludCB8IE5vZGVVc2VkQXNJbnRM
b2NhbGx5KTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbm9kZS0+Y2hpbGQxKCktPm1lcmdlRmxh
Z3MoTm9kZVVzZWRBc1ZhbHVlKTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbm9kZS0+Y2hpbGQy
KCktPm1lcmdlRmxhZ3MoTm9kZVVzZWRBc051bWJlciB8IE5vZGVVc2VkQXNPdGhlciB8IE5vZGVV
c2VkQXNJbnQgfCBOb2RlVXNlZEFzSW50TG9jYWxseSk7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgR2V0TXlBcmd1bWVudEJ5VmFsU2Fm
ZTogewotICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVByZWRpY3Rpb24obm9kZS5nZXRIZWFw
UHJlZGljdGlvbigpKTsKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaFtub2RlLmNoaWxk
MSgpXS5tZXJnZUZsYWdzKE5vZGVVc2VkQXNOdW1iZXIgfCBOb2RlVXNlZEFzT3RoZXIgfCBOb2Rl
VXNlZEFzSW50IHwgTm9kZVVzZWRBc0ludExvY2FsbHkpOworICAgICAgICAgICAgY2hhbmdlZCB8
PSBtZXJnZVByZWRpY3Rpb24obm9kZS0+Z2V0SGVhcFByZWRpY3Rpb24oKSk7CisgICAgICAgICAg
ICBjaGFuZ2VkIHw9IG5vZGUtPmNoaWxkMSgpLT5tZXJnZUZsYWdzKE5vZGVVc2VkQXNOdW1iZXIg
fCBOb2RlVXNlZEFzT3RoZXIgfCBOb2RlVXNlZEFzSW50IHwgTm9kZVVzZWRBc0ludExvY2FsbHkp
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIApAQCAtNTcxLDI1
ICs1NjksMjMgQEAgcHJpdmF0ZToKICAgICAgICAgfQogCiAgICAgICAgIGNhc2UgR2V0QnlPZmZz
ZXQ6IHsKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKG5vZGUuZ2V0SGVh
cFByZWRpY3Rpb24oKSk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbihu
b2RlLT5nZXRIZWFwUHJlZGljdGlvbigpKTsKICAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VE
ZWZhdWx0RmxhZ3Mobm9kZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAg
ICAgICAgCiAgICAgICAgIGNhc2UgQ2FsbDoKICAgICAgICAgY2FzZSBDb25zdHJ1Y3Q6IHsKLSAg
ICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKG5vZGUuZ2V0SGVhcFByZWRpY3Rp
b24oKSk7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGNoaWxkSWR4ID0gbm9kZS5maXJzdENo
aWxkKCk7Ci0gICAgICAgICAgICAgICAgIGNoaWxkSWR4IDwgbm9kZS5maXJzdENoaWxkKCkgKyBu
b2RlLm51bUNoaWxkcmVuKCk7Ci0gICAgICAgICAgICAgICAgICsrY2hpbGRJZHgpIHsKLSAgICAg
ICAgICAgICAgICBFZGdlIGVkZ2UgPSBtX2dyYXBoLm1fdmFyQXJnQ2hpbGRyZW5bY2hpbGRJZHhd
OwotICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaFtlZGdlXS5tZXJnZUZsYWdzKE5v
ZGVVc2VkQXNWYWx1ZSk7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG1l
cmdlUHJlZGljdGlvbihub2RlLT5nZXRIZWFwUHJlZGljdGlvbigpKTsKKyAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgY2hpbGRJZHggPSBub2RlLT5maXJzdENoaWxkKCk7CisgICAgICAgICAgICAg
ICAgIGNoaWxkSWR4IDwgbm9kZS0+Zmlyc3RDaGlsZCgpICsgbm9kZS0+bnVtQ2hpbGRyZW4oKTsK
KyAgICAgICAgICAgICAgICAgKytjaGlsZElkeCkKKyAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9
IG1fZ3JhcGgubV92YXJBcmdDaGlsZHJlbltjaGlsZElkeF0tPm1lcmdlRmxhZ3MoTm9kZVVzZWRB
c1ZhbHVlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKICAg
ICAgICAgY2FzZSBDb252ZXJ0VGhpczogewotICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgcHJl
ZGljdGlvbiA9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ucHJlZGljdGlvbigpOworICAgICAgICAg
ICAgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiA9IG5vZGUtPmNoaWxkMSgpLT5wcmVkaWN0aW9u
KCk7CiAgICAgICAgICAgICBpZiAocHJlZGljdGlvbikgewogICAgICAgICAgICAgICAgIGlmIChw
cmVkaWN0aW9uICYgflNwZWNPYmplY3RNYXNrKSB7CiAgICAgICAgICAgICAgICAgICAgIHByZWRp
Y3Rpb24gJj0gU3BlY09iamVjdE1hc2s7CkBAIC02MDIsMTMgKzU5OCwxMyBAQCBwcml2YXRlOgog
ICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBHZXRHbG9iYWxWYXI6IHsKLSAg
ICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKG5vZGUuZ2V0SGVhcFByZWRpY3Rp
b24oKSk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbihub2RlLT5nZXRI
ZWFwUHJlZGljdGlvbigpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAg
ICAgICAKICAgICAgICAgY2FzZSBQdXRHbG9iYWxWYXI6CiAgICAgICAgIGNhc2UgUHV0R2xvYmFs
VmFyQ2hlY2s6IHsKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaFtub2RlLmNoaWxkMSgp
XS5tZXJnZUZsYWdzKE5vZGVVc2VkQXNWYWx1ZSk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG5v
ZGUtPmNoaWxkMSgpLT5tZXJnZUZsYWdzKE5vZGVVc2VkQXNWYWx1ZSk7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCkBAIC02MTcsNyArNjEzLDcgQEAgcHJpdmF0
ZToKICAgICAgICAgY2FzZSBSZXNvbHZlQmFzZToKICAgICAgICAgY2FzZSBSZXNvbHZlQmFzZVN0
cmljdFB1dDoKICAgICAgICAgY2FzZSBSZXNvbHZlR2xvYmFsOiB7Ci0gICAgICAgICAgICBTcGVj
dWxhdGVkVHlwZSBwcmVkaWN0aW9uID0gbm9kZS5nZXRIZWFwUHJlZGljdGlvbigpOworICAgICAg
ICAgICAgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiA9IG5vZGUtPmdldEhlYXBQcmVkaWN0aW9u
KCk7CiAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbihwcmVkaWN0aW9uKTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkBAIC02NDMsMTggKzYzOSwxNiBAQCBwcml2
YXRlOgogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgTmV3QXJyYXk6IHsKICAgICAgICAgICAg
IGNoYW5nZWQgfD0gc2V0UHJlZGljdGlvbihTcGVjQXJyYXkpOwotICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBjaGlsZElkeCA9IG5vZGUuZmlyc3RDaGlsZCgpOwotICAgICAgICAgICAgICAgICBj
aGlsZElkeCA8IG5vZGUuZmlyc3RDaGlsZCgpICsgbm9kZS5udW1DaGlsZHJlbigpOwotICAgICAg
ICAgICAgICAgICArK2NoaWxkSWR4KSB7Ci0gICAgICAgICAgICAgICAgRWRnZSBlZGdlID0gbV9n
cmFwaC5tX3ZhckFyZ0NoaWxkcmVuW2NoaWxkSWR4XTsKLSAgICAgICAgICAgICAgICBjaGFuZ2Vk
IHw9IG1fZ3JhcGhbZWRnZV0ubWVyZ2VGbGFncyhOb2RlVXNlZEFzVmFsdWUpOwotICAgICAgICAg
ICAgfQorICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBjaGlsZElkeCA9IG5vZGUtPmZpcnN0Q2hp
bGQoKTsKKyAgICAgICAgICAgICAgICAgY2hpbGRJZHggPCBub2RlLT5maXJzdENoaWxkKCkgKyBu
b2RlLT5udW1DaGlsZHJlbigpOworICAgICAgICAgICAgICAgICArK2NoaWxkSWR4KQorICAgICAg
ICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaC5tX3ZhckFyZ0NoaWxkcmVuW2NoaWxkSWR4XS0+
bWVyZ2VGbGFncyhOb2RlVXNlZEFzVmFsdWUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IH0KICAgICAgICAgICAgIAogICAgICAgICBjYXNlIE5ld0FycmF5V2l0aFNpemU6IHsKICAgICAg
ICAgICAgIGNoYW5nZWQgfD0gc2V0UHJlZGljdGlvbihTcGVjQXJyYXkpOwotICAgICAgICAgICAg
Y2hhbmdlZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLm1lcmdlRmxhZ3MoTm9kZVVzZWRBc1Zh
bHVlIHwgTm9kZVVzZWRBc0ludCB8IE5vZGVVc2VkQXNJbnRMb2NhbGx5KTsKKyAgICAgICAgICAg
IGNoYW5nZWQgfD0gbm9kZS0+Y2hpbGQxKCktPm1lcmdlRmxhZ3MoTm9kZVVzZWRBc1ZhbHVlIHwg
Tm9kZVVzZWRBc0ludCB8IE5vZGVVc2VkQXNJbnRMb2NhbGx5KTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9CiAgICAgICAgICAgICAKQEAgLTY3MCwyMiArNjY0LDIyIEBAIHByaXZhdGU6
CiAgICAgICAgIAogICAgICAgICBjYXNlIFN0cmluZ0NoYXJBdDogewogICAgICAgICAgICAgY2hh
bmdlZCB8PSBzZXRQcmVkaWN0aW9uKFNwZWNTdHJpbmcpOwotICAgICAgICAgICAgY2hhbmdlZCB8
PSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLm1lcmdlRmxhZ3MoTm9kZVVzZWRBc1ZhbHVlKTsKLSAg
ICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaFtub2RlLmNoaWxkMigpXS5tZXJnZUZsYWdzKE5v
ZGVVc2VkQXNOdW1iZXIgfCBOb2RlVXNlZEFzT3RoZXIgfCBOb2RlVXNlZEFzSW50IHwgTm9kZVVz
ZWRBc0ludExvY2FsbHkpOworICAgICAgICAgICAgY2hhbmdlZCB8PSBub2RlLT5jaGlsZDEoKS0+
bWVyZ2VGbGFncyhOb2RlVXNlZEFzVmFsdWUpOworICAgICAgICAgICAgY2hhbmdlZCB8PSBub2Rl
LT5jaGlsZDIoKS0+bWVyZ2VGbGFncyhOb2RlVXNlZEFzTnVtYmVyIHwgTm9kZVVzZWRBc090aGVy
IHwgTm9kZVVzZWRBc0ludCB8IE5vZGVVc2VkQXNJbnRMb2NhbGx5KTsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBTdHJDYXQ6IHsKICAg
ICAgICAgICAgIGNoYW5nZWQgfD0gc2V0UHJlZGljdGlvbihTcGVjU3RyaW5nKTsKLSAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgY2hpbGRJZHggPSBub2RlLmZpcnN0Q2hpbGQoKTsKLSAgICAgICAg
ICAgICAgICAgY2hpbGRJZHggPCBub2RlLmZpcnN0Q2hpbGQoKSArIG5vZGUubnVtQ2hpbGRyZW4o
KTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgY2hpbGRJZHggPSBub2RlLT5maXJzdENoaWxk
KCk7CisgICAgICAgICAgICAgICAgIGNoaWxkSWR4IDwgbm9kZS0+Zmlyc3RDaGlsZCgpICsgbm9k
ZS0+bnVtQ2hpbGRyZW4oKTsKICAgICAgICAgICAgICAgICAgKytjaGlsZElkeCkKLSAgICAgICAg
ICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbV9ncmFwaC5tX3ZhckFyZ0NoaWxkcmVuW2NoaWxk
SWR4XV0ubWVyZ2VGbGFncyhOb2RlVXNlZEFzTnVtYmVyIHwgTm9kZVVzZWRBc090aGVyKTsKKyAg
ICAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGgubV92YXJBcmdDaGlsZHJlbltjaGlsZElk
eF0tPm1lcmdlRmxhZ3MoTm9kZVVzZWRBc051bWJlciB8IE5vZGVVc2VkQXNPdGhlcik7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgVG9Q
cmltaXRpdmU6IHsKLSAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIGNoaWxkID0gbV9ncmFwaFtu
b2RlLmNoaWxkMSgpXS5wcmVkaWN0aW9uKCk7CisgICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSBj
aGlsZCA9IG5vZGUtPmNoaWxkMSgpLT5wcmVkaWN0aW9uKCk7CiAgICAgICAgICAgICBpZiAoY2hp
bGQpIHsKICAgICAgICAgICAgICAgICBpZiAoaXNPYmplY3RTcGVjdWxhdGlvbihjaGlsZCkpIHsK
ICAgICAgICAgICAgICAgICAgICAgLy8gSSdkIGxvdmUgdG8gZm9sZCB0aGlzIGNhc2UgaW50byB0
aGUgY2FzZSBiZWxvdywgYnV0IEkgY2FuJ3QsIGJlY2F1c2UKQEAgLTcwMiw3ICs2OTYsNyBAQCBw
cml2YXRlOgogICAgICAgICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgICAgICAgICBjaGFu
Z2VkIHw9IG1lcmdlUHJlZGljdGlvbihjaGlsZCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ubWVyZ2VGbGFncyhmbGFncyk7Cisg
ICAgICAgICAgICBjaGFuZ2VkIHw9IG5vZGUtPmNoaWxkMSgpLT5tZXJnZUZsYWdzKGZsYWdzKTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKQEAgLTc0NSw0MiAr
NzM5LDQ1IEBAIHByaXZhdGU6CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIGNhc2UgUHV0
QnlWYWw6Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbV9ncmFwaC52YXJBcmdDaGls
ZChub2RlLCAwKV0ubWVyZ2VGbGFncyhOb2RlVXNlZEFzVmFsdWUpOwotICAgICAgICAgICAgY2hh
bmdlZCB8PSBtX2dyYXBoW21fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSldLm1lcmdlRmxhZ3Mo
Tm9kZVVzZWRBc051bWJlciB8IE5vZGVVc2VkQXNPdGhlciB8IE5vZGVVc2VkQXNJbnQgfCBOb2Rl
VXNlZEFzSW50TG9jYWxseSk7Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbV9ncmFw
aC52YXJBcmdDaGlsZChub2RlLCAyKV0ubWVyZ2VGbGFncyhOb2RlVXNlZEFzVmFsdWUpOworICAg
ICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApLT5tZXJnZUZs
YWdzKE5vZGVVc2VkQXNWYWx1ZSk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGgudmFy
QXJnQ2hpbGQobm9kZSwgMSktPm1lcmdlRmxhZ3MoTm9kZVVzZWRBc051bWJlciB8IE5vZGVVc2Vk
QXNPdGhlciB8IE5vZGVVc2VkQXNJbnQgfCBOb2RlVXNlZEFzSW50TG9jYWxseSk7CisgICAgICAg
ICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMiktPm1lcmdlRmxhZ3Mo
Tm9kZVVzZWRBc1ZhbHVlKTsKICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2UgUHV0
U2NvcGVkVmFyOgotICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQxKCld
Lm1lcmdlRmxhZ3MoTm9kZVVzZWRBc1ZhbHVlKTsKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9n
cmFwaFtub2RlLmNoaWxkMygpXS5tZXJnZUZsYWdzKE5vZGVVc2VkQXNWYWx1ZSk7CisgICAgICAg
ICAgICBjaGFuZ2VkIHw9IG5vZGUtPmNoaWxkMSgpLT5tZXJnZUZsYWdzKE5vZGVVc2VkQXNWYWx1
ZSk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG5vZGUtPmNoaWxkMygpLT5tZXJnZUZsYWdzKE5v
ZGVVc2VkQXNWYWx1ZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgICAg
ICBjYXNlIFJldHVybjoKICAgICAgICAgY2FzZSBUaHJvdzoKLSAgICAgICAgICAgIGNoYW5nZWQg
fD0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5tZXJnZUZsYWdzKE5vZGVVc2VkQXNWYWx1ZSk7Cisg
ICAgICAgICAgICBjaGFuZ2VkIHw9IG5vZGUtPmNoaWxkMSgpLT5tZXJnZUZsYWdzKE5vZGVVc2Vk
QXNWYWx1ZSk7CiAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICBjYXNlIFB1dEJ5SWQ6CiAg
ICAgICAgIGNhc2UgUHV0QnlJZERpcmVjdDoKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFw
aFtub2RlLmNoaWxkMSgpXS5tZXJnZUZsYWdzKE5vZGVVc2VkQXNWYWx1ZSk7Ci0gICAgICAgICAg
ICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbm9kZS5jaGlsZDIoKV0ubWVyZ2VGbGFncyhOb2RlVXNlZEFz
VmFsdWUpOworICAgICAgICAgICAgY2hhbmdlZCB8PSBub2RlLT5jaGlsZDEoKS0+bWVyZ2VGbGFn
cyhOb2RlVXNlZEFzVmFsdWUpOworICAgICAgICAgICAgY2hhbmdlZCB8PSBub2RlLT5jaGlsZDIo
KS0+bWVyZ2VGbGFncyhOb2RlVXNlZEFzVmFsdWUpOwogICAgICAgICAgICAgYnJlYWs7CiAKICAg
ICAgICAgY2FzZSBQdXRCeU9mZnNldDoKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaFtu
b2RlLmNoaWxkMSgpXS5tZXJnZUZsYWdzKE5vZGVVc2VkQXNWYWx1ZSk7Ci0gICAgICAgICAgICBj
aGFuZ2VkIHw9IG1fZ3JhcGhbbm9kZS5jaGlsZDMoKV0ubWVyZ2VGbGFncyhOb2RlVXNlZEFzVmFs
dWUpOworICAgICAgICAgICAgY2hhbmdlZCB8PSBub2RlLT5jaGlsZDEoKS0+bWVyZ2VGbGFncyhO
b2RlVXNlZEFzVmFsdWUpOworICAgICAgICAgICAgY2hhbmdlZCB8PSBub2RlLT5jaGlsZDMoKS0+
bWVyZ2VGbGFncyhOb2RlVXNlZEFzVmFsdWUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICAKICAgICAgICAgY2FzZSBQaGk6CisgICAgICAgICAgICAvLyBQaGlzIHNob3VsZCBub3Qg
YmUgdmlzaWJsZSBoZXJlIHNpbmNlIHdlJ3JlIGl0ZXJhdGluZyB0aGUgYWxsLWJ1dC1QaGkncwor
ICAgICAgICAgICAgLy8gcGFydCBvZiBiYXNpYyBibG9ja3MuCisgICAgICAgICAgICBDUkFTSCgp
OwogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSBTZXRDYWxsZWU6CiAgICAgICAg
IGNhc2UgU2V0TXlTY29wZToKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaFtub2RlLmNo
aWxkMSgpXS5tZXJnZUZsYWdzKE5vZGVVc2VkQXNWYWx1ZSk7CisgICAgICAgICAgICBjaGFuZ2Vk
IHw9IG5vZGUtPmNoaWxkMSgpLT5tZXJnZUZsYWdzKE5vZGVVc2VkQXNWYWx1ZSk7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgICAgICBjYXNlIEdldFNjb3BlOgotICAgICAg
ICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLm1lcmdlRmxhZ3MoTm9kZVVz
ZWRBc1ZhbHVlKTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbm9kZS0+Y2hpbGQxKCktPm1lcmdl
RmxhZ3MoTm9kZVVzZWRBc1ZhbHVlKTsKICAgICAgICAgICAgIGNoYW5nZWQgfD0gc2V0UHJlZGlj
dGlvbihTcGVjQ2VsbE90aGVyKTsKICAgICAgICAgICAgIGJyZWFrOwogCkBAIC04MjgsMzIgKzgy
NSwzMiBAQCBwcml2YXRlOgogICAgICAgICB9CiAKICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BB
R0FUSU9OX1ZFUkJPU0UpCi0gICAgICAgIGRhdGFMb2coU3BlY3VsYXRpb25EdW1wKG1fZ3JhcGhb
bV9jb21waWxlSW5kZXhdLnByZWRpY3Rpb24oKSksICJcbiIpOworICAgICAgICBkYXRhTG9nKFNw
ZWN1bGF0aW9uRHVtcChub2RlLT5wcmVkaWN0aW9uKCkpLCAiXG4iKTsKICNlbmRpZgogICAgICAg
ICAKICAgICAgICAgbV9jaGFuZ2VkIHw9IGNoYW5nZWQ7CiAgICAgfQogICAgICAgICAKLSAgICBi
b29sIG1lcmdlRGVmYXVsdEZsYWdzKE5vZGUmIG5vZGUpCisgICAgYm9vbCBtZXJnZURlZmF1bHRG
bGFncyhOb2RlKiBub2RlKQogICAgIHsKICAgICAgICAgYm9vbCBjaGFuZ2VkID0gZmFsc2U7Ci0g
ICAgICAgIGlmIChub2RlLmZsYWdzKCkgJiBOb2RlSGFzVmFyQXJncykgewotICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBjaGlsZElkeCA9IG5vZGUuZmlyc3RDaGlsZCgpOwotICAgICAgICAgICAg
ICAgICBjaGlsZElkeCA8IG5vZGUuZmlyc3RDaGlsZCgpICsgbm9kZS5udW1DaGlsZHJlbigpOwor
ICAgICAgICBpZiAobm9kZS0+ZmxhZ3MoKSAmIE5vZGVIYXNWYXJBcmdzKSB7CisgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGNoaWxkSWR4ID0gbm9kZS0+Zmlyc3RDaGlsZCgpOworICAgICAgICAg
ICAgICAgICBjaGlsZElkeCA8IG5vZGUtPmZpcnN0Q2hpbGQoKSArIG5vZGUtPm51bUNoaWxkcmVu
KCk7CiAgICAgICAgICAgICAgICAgIGNoaWxkSWR4KyspIHsKICAgICAgICAgICAgICAgICBpZiAo
ISFtX2dyYXBoLm1fdmFyQXJnQ2hpbGRyZW5bY2hpbGRJZHhdKQotICAgICAgICAgICAgICAgICAg
ICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbV9ncmFwaC5tX3ZhckFyZ0NoaWxkcmVuW2NoaWxkSWR4XV0u
bWVyZ2VGbGFncyhOb2RlVXNlZEFzVmFsdWUpOworICAgICAgICAgICAgICAgICAgICBjaGFuZ2Vk
IHw9IG1fZ3JhcGgubV92YXJBcmdDaGlsZHJlbltjaGlsZElkeF0tPm1lcmdlRmxhZ3MoTm9kZVVz
ZWRBc1ZhbHVlKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
IGlmICghbm9kZS5jaGlsZDEoKSkKKyAgICAgICAgICAgIGlmICghbm9kZS0+Y2hpbGQxKCkpCiAg
ICAgICAgICAgICAgICAgcmV0dXJuIGNoYW5nZWQ7Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IG1f
Z3JhcGhbbm9kZS5jaGlsZDEoKV0ubWVyZ2VGbGFncyhOb2RlVXNlZEFzVmFsdWUpOwotICAgICAg
ICAgICAgaWYgKCFub2RlLmNoaWxkMigpKQorICAgICAgICAgICAgY2hhbmdlZCB8PSBub2RlLT5j
aGlsZDEoKS0+bWVyZ2VGbGFncyhOb2RlVXNlZEFzVmFsdWUpOworICAgICAgICAgICAgaWYgKCFu
b2RlLT5jaGlsZDIoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gY2hhbmdlZDsKLSAgICAgICAg
ICAgIGNoYW5nZWQgfD0gbV9ncmFwaFtub2RlLmNoaWxkMigpXS5tZXJnZUZsYWdzKE5vZGVVc2Vk
QXNWYWx1ZSk7Ci0gICAgICAgICAgICBpZiAoIW5vZGUuY2hpbGQzKCkpCisgICAgICAgICAgICBj
aGFuZ2VkIHw9IG5vZGUtPmNoaWxkMigpLT5tZXJnZUZsYWdzKE5vZGVVc2VkQXNWYWx1ZSk7Cisg
ICAgICAgICAgICBpZiAoIW5vZGUtPmNoaWxkMygpKQogICAgICAgICAgICAgICAgIHJldHVybiBj
aGFuZ2VkOwotICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQzKCldLm1l
cmdlRmxhZ3MoTm9kZVVzZWRBc1ZhbHVlKTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbm9kZS0+
Y2hpbGQzKCktPm1lcmdlRmxhZ3MoTm9kZVVzZWRBc1ZhbHVlKTsKICAgICAgICAgfQogICAgICAg
ICByZXR1cm4gY2hhbmdlZDsKICAgICB9CkBAIC04NjMsOCArODYwLDE2IEBAIHByaXZhdGU6CiAj
aWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQogICAgICAgICBkYXRhTG9n
RigiUHJvcGFnYXRpbmcgcHJlZGljdGlvbnMgZm9yd2FyZCBbJXVdXG4iLCArK21fY291bnQpOwog
I2VuZGlmCi0gICAgICAgIGZvciAobV9jb21waWxlSW5kZXggPSAwOyBtX2NvbXBpbGVJbmRleCA8
IG1fZ3JhcGguc2l6ZSgpOyArK21fY29tcGlsZUluZGV4KQotICAgICAgICAgICAgcHJvcGFnYXRl
KG1fZ3JhcGhbbV9jb21waWxlSW5kZXhdKTsKKyAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2Nr
SW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9ncmFwaC5tX2Jsb2Nrcy5zaXplKCk7ICsrYmxvY2tJ
bmRleCkgeworICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLm1fYmxvY2tz
W2Jsb2NrSW5kZXhdLmdldCgpOworICAgICAgICAgICAgaWYgKCFibG9jaykKKyAgICAgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIEFTU0VSVChibG9jay0+aXNSZWFjaGFibGUpOwor
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGJsb2NrLT5zaXplKCk7ICsraSkg
eworICAgICAgICAgICAgICAgIG1fY3VycmVudE5vZGUgPSBibG9jay0+YXQoaSk7CisgICAgICAg
ICAgICAgICAgcHJvcGFnYXRlKG1fY3VycmVudE5vZGUpOworICAgICAgICAgICAgfQorICAgICAg
ICB9CiAgICAgfQogICAgIAogICAgIHZvaWQgcHJvcGFnYXRlQmFja3dhcmQoKQpAQCAtODcyLDEy
MyArODc3LDEzOSBAQCBwcml2YXRlOgogI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05f
VkVSQk9TRSkKICAgICAgICAgZGF0YUxvZ0YoIlByb3BhZ2F0aW5nIHByZWRpY3Rpb25zIGJhY2t3
YXJkIFsldV1cbiIsICsrbV9jb3VudCk7CiAjZW5kaWYKLSAgICAgICAgZm9yIChtX2NvbXBpbGVJ
bmRleCA9IG1fZ3JhcGguc2l6ZSgpOyBtX2NvbXBpbGVJbmRleC0tID4gMDspCi0gICAgICAgICAg
ICBwcm9wYWdhdGUobV9ncmFwaFttX2NvbXBpbGVJbmRleF0pOworICAgICAgICBmb3IgKEJsb2Nr
SW5kZXggYmxvY2tJbmRleCA9IG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgpOyBibG9ja0luZGV4LS07
KSB7CisgICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGgubV9ibG9ja3NbYmxv
Y2tJbmRleF0uZ2V0KCk7CisgICAgICAgICAgICBpZiAoIWJsb2NrKQorICAgICAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICAgICAgQVNTRVJUKGJsb2NrLT5pc1JlYWNoYWJsZSk7CisgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBibG9jay0+c2l6ZSgpOyBpLS07KSB7CisgICAgICAg
ICAgICAgICAgbV9jdXJyZW50Tm9kZSA9IGJsb2NrLT5hdChpKTsKKyAgICAgICAgICAgICAgICBw
cm9wYWdhdGUobV9jdXJyZW50Tm9kZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KICAgICB9
CiAgICAgCi0gICAgdm9pZCBkb1JvdW5kT2ZEb3VibGVWb3RpbmcoKQorICAgIHZvaWQgZG9Eb3Vi
bGVWb3RpbmcoTm9kZSogbm9kZSkKICAgICB7Ci0jaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdB
VElPTl9WRVJCT1NFKQotICAgICAgICBkYXRhTG9nRigiVm90aW5nIG9uIGRvdWJsZSB1c2VzIG9m
IGxvY2FscyBbJXVdXG4iLCBtX2NvdW50KTsKLSNlbmRpZgotICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgbV9ncmFwaC5tX3ZhcmlhYmxlQWNjZXNzRGF0YS5zaXplKCk7ICsraSkKLSAg
ICAgICAgICAgIG1fZ3JhcGgubV92YXJpYWJsZUFjY2Vzc0RhdGFbaV0uZmluZCgpLT5jbGVhclZv
dGVzKCk7Ci0gICAgICAgIGZvciAobV9jb21waWxlSW5kZXggPSAwOyBtX2NvbXBpbGVJbmRleCA8
IG1fZ3JhcGguc2l6ZSgpOyArK21fY29tcGlsZUluZGV4KSB7Ci0gICAgICAgICAgICBOb2RlJiBu
b2RlID0gbV9ncmFwaFttX2NvbXBpbGVJbmRleF07Ci0gICAgICAgICAgICBzd2l0Y2ggKG5vZGUu
b3AoKSkgewotICAgICAgICAgICAgY2FzZSBWYWx1ZUFkZDoKLSAgICAgICAgICAgIGNhc2UgQXJp
dGhBZGQ6Ci0gICAgICAgICAgICBjYXNlIEFyaXRoU3ViOiB7Ci0gICAgICAgICAgICAgICAgU3Bl
Y3VsYXRlZFR5cGUgbGVmdCA9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ucHJlZGljdGlvbigpOwot
ICAgICAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHJpZ2h0ID0gbV9ncmFwaFtub2RlLmNoaWxk
MigpXS5wcmVkaWN0aW9uKCk7CisgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgeworICAgICAg
ICBjYXNlIFZhbHVlQWRkOgorICAgICAgICBjYXNlIEFyaXRoQWRkOgorICAgICAgICBjYXNlIEFy
aXRoU3ViOiB7CisgICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSBsZWZ0ID0gbm9kZS0+Y2hpbGQx
KCktPnByZWRpY3Rpb24oKTsKKyAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHJpZ2h0ID0gbm9k
ZS0+Y2hpbGQyKCktPnByZWRpY3Rpb24oKTsKICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAg
ICAgICBEb3VibGVCYWxsb3QgYmFsbG90OworICAgICAgICAgICAgRG91YmxlQmFsbG90IGJhbGxv
dDsKICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBpZiAoaXNOdW1iZXJTcGVjdWxh
dGlvbkV4cGVjdGluZ0RlZmluZWQobGVmdCkgJiYgaXNOdW1iZXJTcGVjdWxhdGlvbkV4cGVjdGlu
Z0RlZmluZWQocmlnaHQpCi0gICAgICAgICAgICAgICAgICAgICYmICFtX2dyYXBoLmFkZFNob3Vs
ZFNwZWN1bGF0ZUludGVnZXIobm9kZSkpCi0gICAgICAgICAgICAgICAgICAgIGJhbGxvdCA9IFZv
dGVEb3VibGU7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBiYWxs
b3QgPSBWb3RlVmFsdWU7CisgICAgICAgICAgICBpZiAoaXNOdW1iZXJTcGVjdWxhdGlvbkV4cGVj
dGluZ0RlZmluZWQobGVmdCkgJiYgaXNOdW1iZXJTcGVjdWxhdGlvbkV4cGVjdGluZ0RlZmluZWQo
cmlnaHQpCisgICAgICAgICAgICAgICAgJiYgIW1fZ3JhcGguYWRkU2hvdWxkU3BlY3VsYXRlSW50
ZWdlcihub2RlKSkKKyAgICAgICAgICAgICAgICBiYWxsb3QgPSBWb3RlRG91YmxlOworICAgICAg
ICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGJhbGxvdCA9IFZvdGVWYWx1ZTsKICAgICAgICAg
ICAgICAgICAKLSAgICAgICAgICAgICAgICBtX2dyYXBoLnZvdGUobm9kZS5jaGlsZDEoKSwgYmFs
bG90KTsKLSAgICAgICAgICAgICAgICBtX2dyYXBoLnZvdGUobm9kZS5jaGlsZDIoKSwgYmFsbG90
KTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1f
Z3JhcGgudm90ZU5vZGUobm9kZS0+Y2hpbGQxKCksIGJhbGxvdCk7CisgICAgICAgICAgICBtX2dy
YXBoLnZvdGVOb2RlKG5vZGUtPmNoaWxkMigpLCBiYWxsb3QpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGNhc2UgQXJpdGhNdWw6
IHsKLSAgICAgICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSBsZWZ0ID0gbV9ncmFwaFtub2RlLmNo
aWxkMSgpXS5wcmVkaWN0aW9uKCk7Ci0gICAgICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgcmln
aHQgPSBtX2dyYXBoW25vZGUuY2hpbGQyKCldLnByZWRpY3Rpb24oKTsKKyAgICAgICAgY2FzZSBB
cml0aE11bDogeworICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgbGVmdCA9IG5vZGUtPmNoaWxk
MSgpLT5wcmVkaWN0aW9uKCk7CisgICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSByaWdodCA9IG5v
ZGUtPmNoaWxkMigpLT5wcmVkaWN0aW9uKCk7CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAg
ICAgICAgRG91YmxlQmFsbG90IGJhbGxvdDsKKyAgICAgICAgICAgIERvdWJsZUJhbGxvdCBiYWxs
b3Q7CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYgKGlzTnVtYmVyU3BlY3Vs
YXRpb24obGVmdCkgJiYgaXNOdW1iZXJTcGVjdWxhdGlvbihyaWdodCkKLSAgICAgICAgICAgICAg
ICAgICAgJiYgIW1fZ3JhcGgubXVsU2hvdWxkU3BlY3VsYXRlSW50ZWdlcihub2RlKSkKLSAgICAg
ICAgICAgICAgICAgICAgYmFsbG90ID0gVm90ZURvdWJsZTsKLSAgICAgICAgICAgICAgICBlbHNl
Ci0gICAgICAgICAgICAgICAgICAgIGJhbGxvdCA9IFZvdGVWYWx1ZTsKKyAgICAgICAgICAgIGlm
IChpc051bWJlclNwZWN1bGF0aW9uKGxlZnQpICYmIGlzTnVtYmVyU3BlY3VsYXRpb24ocmlnaHQp
CisgICAgICAgICAgICAgICAgJiYgIW1fZ3JhcGgubXVsU2hvdWxkU3BlY3VsYXRlSW50ZWdlcihu
b2RlKSkKKyAgICAgICAgICAgICAgICBiYWxsb3QgPSBWb3RlRG91YmxlOworICAgICAgICAgICAg
ZWxzZQorICAgICAgICAgICAgICAgIGJhbGxvdCA9IFZvdGVWYWx1ZTsKICAgICAgICAgICAgICAg
ICAKLSAgICAgICAgICAgICAgICBtX2dyYXBoLnZvdGUobm9kZS5jaGlsZDEoKSwgYmFsbG90KTsK
LSAgICAgICAgICAgICAgICBtX2dyYXBoLnZvdGUobm9kZS5jaGlsZDIoKSwgYmFsbG90KTsKLSAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1fZ3JhcGgu
dm90ZU5vZGUobm9kZS0+Y2hpbGQxKCksIGJhbGxvdCk7CisgICAgICAgICAgICBtX2dyYXBoLnZv
dGVOb2RlKG5vZGUtPmNoaWxkMigpLCBiYWxsb3QpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KIAotICAgICAgICAgICAgY2FzZSBBcml0aE1pbjoKLSAgICAgICAgICAgIGNhc2UgQXJp
dGhNYXg6Ci0gICAgICAgICAgICBjYXNlIEFyaXRoTW9kOgotICAgICAgICAgICAgY2FzZSBBcml0
aERpdjogewotICAgICAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIGxlZnQgPSBtX2dyYXBoW25v
ZGUuY2hpbGQxKCldLnByZWRpY3Rpb24oKTsKLSAgICAgICAgICAgICAgICBTcGVjdWxhdGVkVHlw
ZSByaWdodCA9IG1fZ3JhcGhbbm9kZS5jaGlsZDIoKV0ucHJlZGljdGlvbigpOworICAgICAgICBj
YXNlIEFyaXRoTWluOgorICAgICAgICBjYXNlIEFyaXRoTWF4OgorICAgICAgICBjYXNlIEFyaXRo
TW9kOgorICAgICAgICBjYXNlIEFyaXRoRGl2OiB7CisgICAgICAgICAgICBTcGVjdWxhdGVkVHlw
ZSBsZWZ0ID0gbm9kZS0+Y2hpbGQxKCktPnByZWRpY3Rpb24oKTsKKyAgICAgICAgICAgIFNwZWN1
bGF0ZWRUeXBlIHJpZ2h0ID0gbm9kZS0+Y2hpbGQyKCktPnByZWRpY3Rpb24oKTsKICAgICAgICAg
ICAgICAgICAKLSAgICAgICAgICAgICAgICBEb3VibGVCYWxsb3QgYmFsbG90OworICAgICAgICAg
ICAgRG91YmxlQmFsbG90IGJhbGxvdDsKICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAg
ICBpZiAoaXNOdW1iZXJTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc051bWJlclNwZWN1bGF0aW9uKHJp
Z2h0KQotICAgICAgICAgICAgICAgICAgICAmJiAhKE5vZGU6OnNob3VsZFNwZWN1bGF0ZUludGVn
ZXJGb3JBcml0aG1ldGljKG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0sIG1fZ3JhcGhbbm9kZS5jaGls
ZDEoKV0pCi0gICAgICAgICAgICAgICAgICAgICAgICAgJiYgbm9kZS5jYW5TcGVjdWxhdGVJbnRl
Z2VyKCkpKQotICAgICAgICAgICAgICAgICAgICBiYWxsb3QgPSBWb3RlRG91YmxlOwotICAgICAg
ICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgYmFsbG90ID0gVm90ZVZhbHVlOwor
ICAgICAgICAgICAgaWYgKGlzTnVtYmVyU3BlY3VsYXRpb24obGVmdCkgJiYgaXNOdW1iZXJTcGVj
dWxhdGlvbihyaWdodCkKKyAgICAgICAgICAgICAgICAmJiAhKE5vZGU6OnNob3VsZFNwZWN1bGF0
ZUludGVnZXJGb3JBcml0aG1ldGljKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgbm9kZS0+Y2hpbGQy
KCkubm9kZSgpKQorICAgICAgICAgICAgICAgICAgICAgJiYgbm9kZS5jYW5TcGVjdWxhdGVJbnRl
Z2VyKCkpKQorICAgICAgICAgICAgICAgIGJhbGxvdCA9IFZvdGVEb3VibGU7CisgICAgICAgICAg
ICBlbHNlCisgICAgICAgICAgICAgICAgYmFsbG90ID0gVm90ZVZhbHVlOwogICAgICAgICAgICAg
ICAgIAotICAgICAgICAgICAgICAgIG1fZ3JhcGgudm90ZShub2RlLmNoaWxkMSgpLCBiYWxsb3Qp
OwotICAgICAgICAgICAgICAgIG1fZ3JhcGgudm90ZShub2RlLmNoaWxkMigpLCBiYWxsb3QpOwot
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgbV9ncmFw
aC52b3RlTm9kZShub2RlLT5jaGlsZDEoKSwgYmFsbG90KTsKKyAgICAgICAgICAgIG1fZ3JhcGgu
dm90ZU5vZGUobm9kZS0+Y2hpbGQyKCksIGJhbGxvdCk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgY2FzZSBBcml0aEFiczoKLSAg
ICAgICAgICAgICAgICBEb3VibGVCYWxsb3QgYmFsbG90OwotICAgICAgICAgICAgICAgIGlmICgh
KG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0uc2hvdWxkU3BlY3VsYXRlSW50ZWdlckZvckFyaXRobWV0
aWMoKQotICAgICAgICAgICAgICAgICAgICAgICYmIG5vZGUuY2FuU3BlY3VsYXRlSW50ZWdlcigp
KSkKLSAgICAgICAgICAgICAgICAgICAgYmFsbG90ID0gVm90ZURvdWJsZTsKLSAgICAgICAgICAg
ICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIGJhbGxvdCA9IFZvdGVWYWx1ZTsKKyAgICAg
ICAgY2FzZSBBcml0aEFiczoKKyAgICAgICAgICAgIERvdWJsZUJhbGxvdCBiYWxsb3Q7CisgICAg
ICAgICAgICBpZiAoIShub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlSW50ZWdlckZvckFy
aXRobWV0aWMoKQorICAgICAgICAgICAgICAgICAgJiYgbm9kZS5jYW5TcGVjdWxhdGVJbnRlZ2Vy
KCkpKQorICAgICAgICAgICAgICAgIGJhbGxvdCA9IFZvdGVEb3VibGU7CisgICAgICAgICAgICBl
bHNlCisgICAgICAgICAgICAgICAgYmFsbG90ID0gVm90ZVZhbHVlOwogICAgICAgICAgICAgICAg
IAotICAgICAgICAgICAgICAgIG1fZ3JhcGgudm90ZShub2RlLmNoaWxkMSgpLCBiYWxsb3QpOwot
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgbV9ncmFwaC52b3RlTm9kZShub2Rl
LT5jaGlsZDEoKSwgYmFsbG90KTsKKyAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAg
IAotICAgICAgICAgICAgY2FzZSBBcml0aFNxcnQ6Ci0gICAgICAgICAgICAgICAgbV9ncmFwaC52
b3RlKG5vZGUuY2hpbGQxKCksIFZvdGVEb3VibGUpOwotICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIEFyaXRoU3FydDoKKyAgICAgICAgICAgIG1fZ3JhcGgudm90ZU5vZGUobm9k
ZS0+Y2hpbGQxKCksIFZvdGVEb3VibGUpOworICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICAgICAgCi0gICAgICAgICAgICBjYXNlIFNldExvY2FsOiB7Ci0gICAgICAgICAgICAgICAgU3Bl
Y3VsYXRlZFR5cGUgcHJlZGljdGlvbiA9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ucHJlZGljdGlv
bigpOwotICAgICAgICAgICAgICAgIGlmIChpc0RvdWJsZVNwZWN1bGF0aW9uKHByZWRpY3Rpb24p
KQotICAgICAgICAgICAgICAgICAgICBub2RlLnZhcmlhYmxlQWNjZXNzRGF0YSgpLT52b3RlKFZv
dGVEb3VibGUpOwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKCFpc051bWJlclNwZWN1bGF0aW9u
KHByZWRpY3Rpb24pIHx8IGlzSW50MzJTcGVjdWxhdGlvbihwcmVkaWN0aW9uKSkKLSAgICAgICAg
ICAgICAgICAgICAgbm9kZS52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+dm90ZShWb3RlVmFsdWUpOwot
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQorICAgICAgICBjYXNlIFNldExv
Y2FsOiB7CisgICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uID0gbm9kZS0+Y2hp
bGQxKCktPnByZWRpY3Rpb24oKTsKKyAgICAgICAgICAgIGlmIChpc0RvdWJsZVNwZWN1bGF0aW9u
KHByZWRpY3Rpb24pKQorICAgICAgICAgICAgICAgIG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgp
LT52b3RlKFZvdGVEb3VibGUpOworICAgICAgICAgICAgZWxzZSBpZiAoIWlzTnVtYmVyU3BlY3Vs
YXRpb24ocHJlZGljdGlvbikgfHwgaXNJbnQzMlNwZWN1bGF0aW9uKHByZWRpY3Rpb24pKQorICAg
ICAgICAgICAgICAgIG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT52b3RlKFZvdGVWYWx1ZSk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQogICAgICAgICAgICAgICAgIAotICAgICAg
ICAgICAgY2FzZSBQdXRCeVZhbDoKLSAgICAgICAgICAgIGNhc2UgUHV0QnlWYWxBbGlhczogewot
ICAgICAgICAgICAgICAgIEVkZ2UgY2hpbGQxID0gbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAw
KTsKLSAgICAgICAgICAgICAgICBFZGdlIGNoaWxkMiA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9k
ZSwgMSk7Ci0gICAgICAgICAgICAgICAgRWRnZSBjaGlsZDMgPSBtX2dyYXBoLnZhckFyZ0NoaWxk
KG5vZGUsIDIpOwotICAgICAgICAgICAgICAgIG1fZ3JhcGgudm90ZShjaGlsZDEsIFZvdGVWYWx1
ZSk7Ci0gICAgICAgICAgICAgICAgbV9ncmFwaC52b3RlKGNoaWxkMiwgVm90ZVZhbHVlKTsKLSAg
ICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUuYXJyYXlNb2RlKCkudHlwZSgpKSB7Ci0gICAgICAg
ICAgICAgICAgY2FzZSBBcnJheTo6RG91YmxlOgotICAgICAgICAgICAgICAgICAgICBtX2dyYXBo
LnZvdGUoY2hpbGQzLCBWb3RlRG91YmxlKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC52b3Rl
KGNoaWxkMywgVm90ZVZhbHVlKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICAgICAgfQorICAgICAgICBjYXNlIFB1dEJ5VmFsOgorICAgICAgICBjYXNlIFB1dEJ5VmFs
QWxpYXM6IHsKKyAgICAgICAgICAgIEVkZ2UgY2hpbGQxID0gbV9ncmFwaC52YXJBcmdDaGlsZChu
b2RlLCAwKTsKKyAgICAgICAgICAgIEVkZ2UgY2hpbGQyID0gbV9ncmFwaC52YXJBcmdDaGlsZChu
b2RlLCAxKTsKKyAgICAgICAgICAgIEVkZ2UgY2hpbGQzID0gbV9ncmFwaC52YXJBcmdDaGlsZChu
b2RlLCAyKTsKKyAgICAgICAgICAgIG1fZ3JhcGgudm90ZU5vZGUoY2hpbGQxLCBWb3RlVmFsdWUp
OworICAgICAgICAgICAgbV9ncmFwaC52b3RlTm9kZShjaGlsZDIsIFZvdGVWYWx1ZSk7CisgICAg
ICAgICAgICBzd2l0Y2ggKG5vZGUuYXJyYXlNb2RlKCkudHlwZSgpKSB7CisgICAgICAgICAgICBj
YXNlIEFycmF5OjpEb3VibGU6CisgICAgICAgICAgICAgICAgbV9ncmFwaC52b3RlTm9kZShjaGls
ZDMsIFZvdGVEb3VibGUpOwogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBt
X2dyYXBoLnZvdGUobm9kZSwgVm90ZVZhbHVlKTsKKyAgICAgICAgICAgICAgICBtX2dyYXBoLnZv
dGVOb2RlKGNoaWxkMywgVm90ZVZhbHVlKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgICAgICAKKyAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIG1fZ3JhcGgudm90ZUNoaWxkcmVuKG5vZGUsIFZv
dGVWYWx1ZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAg
ICB2b2lkIGRvUm91bmRPZkRvdWJsZVZvdGluZygpCisgICAgeworI2lmIERGR19FTkFCTEUoREVC
VUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKKyAgICAgICAgZGF0YUxvZ0YoIlZvdGluZyBvbiBkb3Vi
bGUgdXNlcyBvZiBsb2NhbHMgWyV1XVxuIiwgbV9jb3VudCk7CisjZW5kaWYKKyAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fZ3JhcGgubV92YXJpYWJsZUFjY2Vzc0RhdGEuc2l6ZSgp
OyArK2kpCisgICAgICAgICAgICBtX2dyYXBoLm1fdmFyaWFibGVBY2Nlc3NEYXRhW2ldLmZpbmQo
KS0+Y2xlYXJWb3RlcygpOworICAgICAgICBmb3IgKEJhc2ljQmxvY2sgYmxvY2tJbmRleCA9IDA7
IGkgPCBtX2dyYXBoLm1fYmxvY2tzLnNpemUoKTsgKytibG9ja0luZGV4KSB7CisgICAgICAgICAg
ICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGgubV9ibG9ja3NbYmxvY2tJbmRleF0uZ2V0KCk7
CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYmxvY2stPnNpemUoKTsgKytp
KSB7CisgICAgICAgICAgICAgICAgbV9jdXJyZW50Tm9kZSA9IGJsb2NrLT5hdChpKTsKKyAgICAg
ICAgICAgICAgICBkb0RvdWJsZVZvdGluZyhtX2N1cnJlbnROb2RlKTsKKyAgICAgICAgICAgIH0K
ICAgICAgICAgfQogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9ncmFwaC5tX3Zh
cmlhYmxlQWNjZXNzRGF0YS5zaXplKCk7ICsraSkgewogICAgICAgICAgICAgVmFyaWFibGVBY2Nl
c3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSAmbV9ncmFwaC5tX3ZhcmlhYmxlQWNjZXNzRGF0
YVtpXTsKQEAgLTEwMTIsNyArMTAzMyw3IEBAIHByaXZhdGU6CiAgICAgICAgIH0KICAgICB9CiAg
ICAgCi0gICAgTm9kZUluZGV4IG1fY29tcGlsZUluZGV4OworICAgIE5vZGUqIG1fY3VycmVudE5v
ZGU7CiAgICAgYm9vbCBtX2NoYW5nZWQ7CiAKICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FU
SU9OX1ZFUkJPU0UpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Njb3JlQm9h
cmQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Njb3JlQm9h
cmQuaAkocmV2aXNpb24gMTQwOTA0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
Y29yZUJvYXJkLmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDkgKzQzLDggQEAgbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBERkcgewogLy8gYW5vdGhlciBub2RlLgogY2xhc3MgU2NvcmVCb2FyZCB7
CiBwdWJsaWM6Ci0gICAgU2NvcmVCb2FyZChHcmFwaCYgZ3JhcGgsIGNvbnN0IEJpdFZlY3RvciYg
dXNlZFZhcnMpCi0gICAgICAgIDogbV9ncmFwaChncmFwaCkKLSAgICAgICAgLCBtX2hpZ2hXYXRl
cm1hcmsoMCkKKyAgICBTY29yZUJvYXJkKGNvbnN0IEJpdFZlY3RvciYgdXNlZFZhcnMpCisgICAg
ICAgIDogbV9oaWdoV2F0ZXJtYXJrKDApCiAgICAgewogICAgICAgICBtX3VzZWQuZmlsbCgwLCB1
c2VkVmFycy5zaXplKCkpOwogICAgICAgICBtX2ZyZWUucmVzZXJ2ZUNhcGFjaXR5KHVzZWRWYXJz
LnNpemUoKSk7CkBAIC0xMDIsMTQgKzEwMSwxMyBAQCBwdWJsaWM6CiAKICAgICAvLyBJbmNyZW1l
bnQgdGhlIHVzZWNvdW50IGZvciB0aGUgVmlydHVhbFJlZ3NpdGVyIGFzc29jaWF0ZWQgd2l0aCAn
Y2hpbGQnLAogICAgIC8vIGlmIGl0IHJlYWNoZXMgdGhlIG5vZGUncyByZWZjb3VudCwgZnJlZSB0
aGUgVmlydHVhbFJlZ3NpdGVyLgotICAgIHZvaWQgdXNlKE5vZGVJbmRleCBjaGlsZCkKKyAgICB2
b2lkIHVzZShOb2RlKiBjaGlsZCkKICAgICB7Ci0gICAgICAgIGlmIChjaGlsZCA9PSBOb05vZGUp
CisgICAgICAgIGlmICghY2hpbGQpCiAgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgLy8g
RmluZCB0aGUgdmlydHVhbCByZWdpc3RlciBudW1iZXIgZm9yIHRoaXMgY2hpbGQsIGluY3JlbWVu
dCBpdHMgdXNlIGNvdW50LgotICAgICAgICBOb2RlJiBub2RlID0gbV9ncmFwaFtjaGlsZF07Ci0g
ICAgICAgIHVpbnQzMl90IGluZGV4ID0gbm9kZS52aXJ0dWFsUmVnaXN0ZXIoKTsKKyAgICAgICAg
dWludDMyX3QgaW5kZXggPSBub2RlLT52aXJ0dWFsUmVnaXN0ZXIoKTsKICAgICAgICAgQVNTRVJU
KG1fdXNlZFtpbmRleF0gIT0gbWF4KCkpOwogICAgICAgICBpZiAobm9kZS5yZWZDb3VudCgpID09
ICsrbV91c2VkW2luZGV4XSkgewogI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVS
Qk9TRSkKQEAgLTEyMiwyMCArMTIwLDIwIEBAIHB1YmxpYzoKICAgICAgICAgICAgIG1fZnJlZS5h
cHBlbmQoaW5kZXgpOwogICAgICAgICB9IGVsc2UgewogI2lmIERGR19FTkFCTEUoREVCVUdfUFJP
UEFHQVRJT05fVkVSQk9TRSkKLSAgICAgICAgICAgIGRhdGFMb2dGKCIgVmlydHVhbCByZWdpc3Rl
ciAldSBpcyBhdCAldS8ldSB1c2VzLiIsIGluZGV4LCBtX3VzZWRbaW5kZXhdLCBub2RlLnJlZkNv
dW50KCkpOworICAgICAgICAgICAgZGF0YUxvZ0YoIiBWaXJ0dWFsIHJlZ2lzdGVyICV1IGlzIGF0
ICV1LyV1IHVzZXMuIiwgaW5kZXgsIG1fdXNlZFtpbmRleF0sIG5vZGUtPnJlZkNvdW50KCkpOwog
I2VuZGlmCiAgICAgICAgIH0KICAgICB9CiAgICAgdm9pZCB1c2UoRWRnZSBjaGlsZCkKICAgICB7
Ci0gICAgICAgIHVzZShjaGlsZC5pbmRleFVuY2hlY2tlZCgpKTsKKyAgICAgICAgdXNlKGNoaWxk
Lm5vZGUoKSk7CiAgICAgfQogICAgIAogICAgIHZvaWQgdXNlSWZIYXNSZXN1bHQoRWRnZSBjaGls
ZCkKICAgICB7CiAgICAgICAgIGlmICghY2hpbGQpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgIGlmICghbV9ncmFwaFtjaGlsZF0uaGFzUmVzdWx0KCkpCisgICAgICAgIGlmICghY2hpbGQt
Pmhhc1Jlc3VsdCgpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB1c2UoY2hpbGQpOwog
ICAgIH0KQEAgLTE3NSw5ICsxNzMsNiBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIHN0YXRpYyB1
aW50MzJfdCBtYXgoKSB7IHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4
KCk7IH0KICAgICAKLSAgICAvLyBUaGUgZ3JhcGgsIHNvIHdlIGNhbiBnZXQgcmVmQ291bnRzIGZv
ciBub2RlcywgdG8gZGV0ZXJtaW5lIHdoZW4gdmFsdWVzIGFyZSBkZWFkLgotICAgIEdyYXBoJiBt
X2dyYXBoOwotICAgIAogICAgIC8vIFRoZSBzaXplIG9mIHRoZSBzcGFuIG9mIHZpcnR1YWwgcmVn
aXN0ZXJzIHRoYXQgdGhpcyBjb2RlIGJsb2NrIHdpbGwgdXNlLgogICAgIHVuc2lnbmVkIG1faGln
aFdhdGVybWFyazsKICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2ls
ZW50UmVnaXN0ZXJTYXZlUGxhbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU2lsZW50UmVnaXN0ZXJTYXZlUGxhbi5oCShyZXZpc2lvbiAxNDA5MDQpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NpbGVudFJlZ2lzdGVyU2F2ZVBsYW4uaAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDEz
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtNzQsMzggKzc0LDM4IEBAIHB1YmxpYzoKICAgICAgICAgOiBtX3NwaWxsQWN0
aW9uKERvTm90aGluZ0ZvclNwaWxsKQogICAgICAgICAsIG1fZmlsbEFjdGlvbihEb05vdGhpbmdG
b3JGaWxsKQogICAgICAgICAsIG1fcmVnaXN0ZXIoLTEpCi0gICAgICAgICwgbV9ub2RlSW5kZXgo
Tm9Ob2RlKQorICAgICAgICAsIG1fbm9kZSgwKQogICAgIHsKICAgICB9CiAgICAgCiAgICAgU2ls
ZW50UmVnaXN0ZXJTYXZlUGxhbigKICAgICAgICAgU2lsZW50U3BpbGxBY3Rpb24gc3BpbGxBY3Rp
b24sCiAgICAgICAgIFNpbGVudEZpbGxBY3Rpb24gZmlsbEFjdGlvbiwKLSAgICAgICAgTm9kZUlu
ZGV4IG5vZGVJbmRleCwKKyAgICAgICAgTm9kZSogbm9kZSwKICAgICAgICAgR1BSUmVnIGdwcikK
ICAgICAgICAgOiBtX3NwaWxsQWN0aW9uKHNwaWxsQWN0aW9uKQogICAgICAgICAsIG1fZmlsbEFj
dGlvbihmaWxsQWN0aW9uKQogICAgICAgICAsIG1fcmVnaXN0ZXIoZ3ByKQotICAgICAgICAsIG1f
bm9kZUluZGV4KG5vZGVJbmRleCkKKyAgICAgICAgLCBtX25vZGUobm9kZSkKICAgICB7CiAgICAg
fQogICAgIAogICAgIFNpbGVudFJlZ2lzdGVyU2F2ZVBsYW4oCiAgICAgICAgIFNpbGVudFNwaWxs
QWN0aW9uIHNwaWxsQWN0aW9uLAogICAgICAgICBTaWxlbnRGaWxsQWN0aW9uIGZpbGxBY3Rpb24s
Ci0gICAgICAgIE5vZGVJbmRleCBub2RlSW5kZXgsCisgICAgICAgIE5vZGUqIG5vZGUsCiAgICAg
ICAgIEZQUlJlZyBmcHIpCiAgICAgICAgIDogbV9zcGlsbEFjdGlvbihzcGlsbEFjdGlvbikKICAg
ICAgICAgLCBtX2ZpbGxBY3Rpb24oZmlsbEFjdGlvbikKICAgICAgICAgLCBtX3JlZ2lzdGVyKGZw
cikKLSAgICAgICAgLCBtX25vZGVJbmRleChub2RlSW5kZXgpCisgICAgICAgICwgbV9ub2RlKG5v
ZGUpCiAgICAgewogICAgIH0KICAgICAKICAgICBTaWxlbnRTcGlsbEFjdGlvbiBzcGlsbEFjdGlv
bigpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PFNpbGVudFNwaWxsQWN0aW9uPihtX3NwaWxs
QWN0aW9uKTsgfQogICAgIFNpbGVudEZpbGxBY3Rpb24gZmlsbEFjdGlvbigpIGNvbnN0IHsgcmV0
dXJuIHN0YXRpY19jYXN0PFNpbGVudEZpbGxBY3Rpb24+KG1fZmlsbEFjdGlvbik7IH0KICAgICAK
LSAgICBOb2RlSW5kZXggbm9kZUluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9ub2RlSW5kZXg7IH0K
KyAgICBOb2RlKiBub2RlKCkgY29uc3QgeyByZXR1cm4gbV9ub2RlOyB9CiAgICAgCiAgICAgR1BS
UmVnIGdwcigpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PEdQUlJlZz4obV9yZWdpc3Rlcik7
IH0KICAgICBGUFJSZWcgZnByKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8RlBSUmVnPiht
X3JlZ2lzdGVyKTsgfQpAQCAtMTE0LDcgKzExNCw3IEBAIHByaXZhdGU6CiAgICAgaW50OF90IG1f
c3BpbGxBY3Rpb247CiAgICAgaW50OF90IG1fZmlsbEFjdGlvbjsKICAgICBpbnQ4X3QgbV9yZWdp
c3RlcjsKLSAgICBOb2RlSW5kZXggbV9ub2RlSW5kZXg7CisgICAgTm9kZSogbV9ub2RlOwogfTsK
IAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTbG93UGF0aEdlbmVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU2xvd1BhdGhHZW5lcmF0b3IuaAkocmV2aXNpb24gMTQwOTA0KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTbG93UGF0aEdlbmVyYXRvci5oCSh3b3JraW5n
IGNvcHkpCkBAIC00Miw3ICs0Miw3IEBAIGNsYXNzIFNsb3dQYXRoR2VuZXJhdG9yIHsKICAgICBX
VEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKICAgICBTbG93UGF0aEdlbmVyYXRvcihT
cGVjdWxhdGl2ZUpJVCogaml0KQotICAgICAgICA6IG1fY29tcGlsZUluZGV4KGppdC0+bV9jb21w
aWxlSW5kZXgpCisgICAgICAgIDogbV9jdXJyZW50Tm9kZShqaXQtPm1fY3VycmVudE5vZGUpCiAg
ICAgewogICAgIH0KICAgICB2aXJ0dWFsIH5TbG93UGF0aEdlbmVyYXRvcigpIHsgfQpAQCAtNTIs
NyArNTIsNyBAQCBwdWJsaWM6CiAgICAgICAgIGRhdGFMb2dGKCJHZW5lcmF0aW5nIHNsb3cgcGF0
aCAlcCBhdCBvZmZzZXQgMHgleFxuIiwgdGhpcywgaml0LT5tX2ppdC5kZWJ1Z09mZnNldCgpKTsK
ICNlbmRpZgogICAgICAgICBtX2xhYmVsID0gaml0LT5tX2ppdC5sYWJlbCgpOwotICAgICAgICBq
aXQtPm1fY29tcGlsZUluZGV4ID0gbV9jb21waWxlSW5kZXg7CisgICAgICAgIGppdC0+bV9jdXJy
ZW50Tm9kZSA9IG1fY3VycmVudE5vZGU7CiAgICAgICAgIGdlbmVyYXRlSW50ZXJuYWwoaml0KTsK
ICNpZiAhQVNTRVJUX0RJU0FCTEVECiAgICAgICAgIGppdC0+bV9qaXQuYnJlYWtwb2ludCgpOyAv
LyBtYWtlIHN1cmUgdGhhdCB0aGUgZ2VuZXJhdG9yIGp1bXBzIGJhY2sgdG8gc29tZXdoZXJlCkBA
IC02Nyw3ICs2Nyw3IEBAIHB1YmxpYzoKIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIHZvaWQgZ2Vu
ZXJhdGVJbnRlcm5hbChTcGVjdWxhdGl2ZUpJVCopID0gMDsKICAgICBNYWNyb0Fzc2VtYmxlcjo6
TGFiZWwgbV9sYWJlbDsKLSAgICBOb2RlSW5kZXggbV9jb21waWxlSW5kZXg7CisgICAgTm9kZSog
bV9jdXJyZW50Tm9kZTsKIH07CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEp1bXBUeXBlPgpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHJl
dmlzaW9uIDE0MDkwNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMSwgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTEsIDIwMTIsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00MCw3ICs0MCw3IEBAIG5hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIFNwZWN1bGF0aXZlSklUOjpTcGVjdWxhdGl2ZUpJ
VChKSVRDb21waWxlciYgaml0KQogICAgIDogbV9jb21waWxlT2theSh0cnVlKQogICAgICwgbV9q
aXQoaml0KQotICAgICwgbV9jb21waWxlSW5kZXgoMCkKKyAgICAsIG1fY3VycmVudE5vZGUoMCkK
ICAgICAsIG1faW5kZXhJbkJsb2NrKDApCiAgICAgLCBtX2dlbmVyYXRpb25JbmZvKG1faml0LmNv
ZGVCbG9jaygpLT5tX251bUNhbGxlZVJlZ2lzdGVycykKICAgICAsIG1fYmxvY2tIZWFkcyhqaXQu
Z3JhcGgoKS5tX2Jsb2Nrcy5zaXplKCkpCkBAIC0xMDYsODYgKzEwNiw4NiBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjplbWl0QWxsb2NhdGVKU0FycmF5CiAgICAgICAgICAgICBzdHJ1Y3R1cmUsIG51
bUVsZW1lbnRzKSkpOwogfQogCi12b2lkIFNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGlvbkNoZWNr
KEV4aXRLaW5kIGtpbmQsIEpTVmFsdWVTb3VyY2UganNWYWx1ZVNvdXJjZSwgTm9kZUluZGV4IG5v
ZGVJbmRleCwgTWFjcm9Bc3NlbWJsZXI6Okp1bXAganVtcFRvRmFpbCkKK3ZvaWQgU3BlY3VsYXRp
dmVKSVQ6OnNwZWN1bGF0aW9uQ2hlY2soRXhpdEtpbmQga2luZCwgSlNWYWx1ZVNvdXJjZSBqc1Zh
bHVlU291cmNlLCBOb2RlKiBub2RlLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBqdW1wVG9GYWlsKQog
ewogICAgIGlmICghbV9jb21waWxlT2theSkKICAgICAgICAgcmV0dXJuOwotICAgIEFTU0VSVChh
dChtX2NvbXBpbGVJbmRleCkuY2FuRXhpdCgpIHx8IG1faXNDaGVja2luZ0FyZ3VtZW50VHlwZXMp
OworICAgIEFTU0VSVChub2RlLT5jYW5FeGl0KCkgfHwgbV9pc0NoZWNraW5nQXJndW1lbnRUeXBl
cyk7CiAgICAgbV9qaXQuYXBwZW5kRXhpdEluZm8oanVtcFRvRmFpbCk7Ci0gICAgbV9qaXQuY29k
ZUJsb2NrKCktPmFwcGVuZE9TUkV4aXQoT1NSRXhpdChraW5kLCBqc1ZhbHVlU291cmNlLCBtX2pp
dC5ncmFwaCgpLm1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGVGb3Iobm9kZUluZGV4KSwgdGhp
cywgbV9zdHJlYW0tPnNpemUoKSkpOworICAgIG1faml0LmNvZGVCbG9jaygpLT5hcHBlbmRPU1JF
eGl0KE9TUkV4aXQoa2luZCwganNWYWx1ZVNvdXJjZSwgbV9qaXQuZ3JhcGgoKS5tZXRob2RPZkdl
dHRpbmdBVmFsdWVQcm9maWxlRm9yKG5vZGUpLCB0aGlzLCBtX3N0cmVhbS0+c2l6ZSgpKSk7CiB9
CiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0aW9uQ2hlY2soRXhpdEtpbmQga2luZCwg
SlNWYWx1ZVNvdXJjZSBqc1ZhbHVlU291cmNlLCBFZGdlIG5vZGVVc2UsIE1hY3JvQXNzZW1ibGVy
OjpKdW1wIGp1bXBUb0ZhaWwpCiB7Ci0gICAgQVNTRVJUKGF0KG1fY29tcGlsZUluZGV4KS5jYW5F
eGl0KCkgfHwgbV9pc0NoZWNraW5nQXJndW1lbnRUeXBlcyk7Ci0gICAgc3BlY3VsYXRpb25DaGVj
ayhraW5kLCBqc1ZhbHVlU291cmNlLCBub2RlVXNlLmluZGV4KCksIGp1bXBUb0ZhaWwpOworICAg
IEFTU0VSVChtX2N1cnJlbnROb2RlLT5jYW5FeGl0KCkgfHwgbV9pc0NoZWNraW5nQXJndW1lbnRU
eXBlcyk7CisgICAgc3BlY3VsYXRpb25DaGVjayhraW5kLCBqc1ZhbHVlU291cmNlLCBub2RlVXNl
Lm5vZGUoKSwganVtcFRvRmFpbCk7CiB9CiAKLU9TUkV4aXRKdW1wUGxhY2Vob2xkZXIgU3BlY3Vs
YXRpdmVKSVQ6OnNwZWN1bGF0aW9uQ2hlY2soRXhpdEtpbmQga2luZCwgSlNWYWx1ZVNvdXJjZSBq
c1ZhbHVlU291cmNlLCBOb2RlSW5kZXggbm9kZUluZGV4KQorT1NSRXhpdEp1bXBQbGFjZWhvbGRl
ciBTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRpb25DaGVjayhFeGl0S2luZCBraW5kLCBKU1ZhbHVl
U291cmNlIGpzVmFsdWVTb3VyY2UsIE5vZGUqIG5vZGUpCiB7CiAgICAgaWYgKCFtX2NvbXBpbGVP
a2F5KQogICAgICAgICByZXR1cm4gT1NSRXhpdEp1bXBQbGFjZWhvbGRlcigpOwotICAgIEFTU0VS
VChhdChtX2NvbXBpbGVJbmRleCkuY2FuRXhpdCgpIHx8IG1faXNDaGVja2luZ0FyZ3VtZW50VHlw
ZXMpOworICAgIEFTU0VSVChtX2N1cnJlbnROb2RlLT5jYW5FeGl0KCkgfHwgbV9pc0NoZWNraW5n
QXJndW1lbnRUeXBlcyk7CiAgICAgdW5zaWduZWQgaW5kZXggPSBtX2ppdC5jb2RlQmxvY2soKS0+
bnVtYmVyT2ZPU1JFeGl0cygpOwogICAgIG1faml0LmFwcGVuZEV4aXRJbmZvKCk7Ci0gICAgbV9q
aXQuY29kZUJsb2NrKCktPmFwcGVuZE9TUkV4aXQoT1NSRXhpdChraW5kLCBqc1ZhbHVlU291cmNl
LCBtX2ppdC5ncmFwaCgpLm1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGVGb3Iobm9kZUluZGV4
KSwgdGhpcywgbV9zdHJlYW0tPnNpemUoKSkpOworICAgIG1faml0LmNvZGVCbG9jaygpLT5hcHBl
bmRPU1JFeGl0KE9TUkV4aXQoa2luZCwganNWYWx1ZVNvdXJjZSwgbV9qaXQuZ3JhcGgoKS5tZXRo
b2RPZkdldHRpbmdBVmFsdWVQcm9maWxlRm9yKG5vZGUpLCB0aGlzLCBtX3N0cmVhbS0+c2l6ZSgp
KSk7CiAgICAgcmV0dXJuIE9TUkV4aXRKdW1wUGxhY2Vob2xkZXIoaW5kZXgpOwogfQogCiBPU1JF
eGl0SnVtcFBsYWNlaG9sZGVyIFNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGlvbkNoZWNrKEV4aXRL
aW5kIGtpbmQsIEpTVmFsdWVTb3VyY2UganNWYWx1ZVNvdXJjZSwgRWRnZSBub2RlVXNlKQogewot
ICAgIEFTU0VSVChhdChtX2NvbXBpbGVJbmRleCkuY2FuRXhpdCgpIHx8IG1faXNDaGVja2luZ0Fy
Z3VtZW50VHlwZXMpOwotICAgIHJldHVybiBzcGVjdWxhdGlvbkNoZWNrKGtpbmQsIGpzVmFsdWVT
b3VyY2UsIG5vZGVVc2UuaW5kZXgoKSk7CisgICAgQVNTRVJUKG1fY3VycmVudE5vZGUtPmNhbkV4
aXQoKSB8fCBtX2lzQ2hlY2tpbmdBcmd1bWVudFR5cGVzKTsKKyAgICByZXR1cm4gc3BlY3VsYXRp
b25DaGVjayhraW5kLCBqc1ZhbHVlU291cmNlLCBub2RlVXNlLm5vZGUoKSk7CiB9CiAKLXZvaWQg
U3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0aW9uQ2hlY2soRXhpdEtpbmQga2luZCwgSlNWYWx1ZVNv
dXJjZSBqc1ZhbHVlU291cmNlLCBOb2RlSW5kZXggbm9kZUluZGV4LCBjb25zdCBNYWNyb0Fzc2Vt
Ymxlcjo6SnVtcExpc3QmIGp1bXBzVG9GYWlsKQordm9pZCBTcGVjdWxhdGl2ZUpJVDo6c3BlY3Vs
YXRpb25DaGVjayhFeGl0S2luZCBraW5kLCBKU1ZhbHVlU291cmNlIGpzVmFsdWVTb3VyY2UsIE5v
ZGUqIG5vZGUsIGNvbnN0IE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCYganVtcHNUb0ZhaWwpCiB7
CiAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQogICAgICAgICByZXR1cm47Ci0gICAgQVNTRVJUKGF0
KG1fY29tcGlsZUluZGV4KS5jYW5FeGl0KCkgfHwgbV9pc0NoZWNraW5nQXJndW1lbnRUeXBlcyk7
CisgICAgQVNTRVJUKG1fY3VycmVudE5vZGUtPmNhbkV4aXQoKSB8fCBtX2lzQ2hlY2tpbmdBcmd1
bWVudFR5cGVzKTsKICAgICBtX2ppdC5hcHBlbmRFeGl0SW5mbyhqdW1wc1RvRmFpbCk7Ci0gICAg
bV9qaXQuY29kZUJsb2NrKCktPmFwcGVuZE9TUkV4aXQoT1NSRXhpdChraW5kLCBqc1ZhbHVlU291
cmNlLCBtX2ppdC5ncmFwaCgpLm1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGVGb3Iobm9kZUlu
ZGV4KSwgdGhpcywgbV9zdHJlYW0tPnNpemUoKSkpOworICAgIG1faml0LmNvZGVCbG9jaygpLT5h
cHBlbmRPU1JFeGl0KE9TUkV4aXQoa2luZCwganNWYWx1ZVNvdXJjZSwgbV9qaXQuZ3JhcGgoKS5t
ZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlRm9yKG5vZGUpLCB0aGlzLCBtX3N0cmVhbS0+c2l6
ZSgpKSk7CiB9CiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0aW9uQ2hlY2soRXhpdEtp
bmQga2luZCwgSlNWYWx1ZVNvdXJjZSBqc1ZhbHVlU291cmNlLCBFZGdlIG5vZGVVc2UsIGNvbnN0
IE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCYganVtcHNUb0ZhaWwpCiB7Ci0gICAgQVNTRVJUKGF0
KG1fY29tcGlsZUluZGV4KS5jYW5FeGl0KCkgfHwgbV9pc0NoZWNraW5nQXJndW1lbnRUeXBlcyk7
Ci0gICAgc3BlY3VsYXRpb25DaGVjayhraW5kLCBqc1ZhbHVlU291cmNlLCBub2RlVXNlLmluZGV4
KCksIGp1bXBzVG9GYWlsKTsKKyAgICBBU1NFUlQobV9jdXJyZW50Tm9kZS0+Y2FuRXhpdCgpIHx8
IG1faXNDaGVja2luZ0FyZ3VtZW50VHlwZXMpOworICAgIHNwZWN1bGF0aW9uQ2hlY2soa2luZCwg
anNWYWx1ZVNvdXJjZSwgbm9kZVVzZS5ub2RlKCksIGp1bXBzVG9GYWlsKTsKIH0KIAotdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRpb25DaGVjayhFeGl0S2luZCBraW5kLCBKU1ZhbHVlU291
cmNlIGpzVmFsdWVTb3VyY2UsIE5vZGVJbmRleCBub2RlSW5kZXgsIE1hY3JvQXNzZW1ibGVyOjpK
dW1wIGp1bXBUb0ZhaWwsIGNvbnN0IFNwZWN1bGF0aW9uUmVjb3ZlcnkmIHJlY292ZXJ5KQordm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRpb25DaGVjayhFeGl0S2luZCBraW5kLCBKU1ZhbHVl
U291cmNlIGpzVmFsdWVTb3VyY2UsIE5vZGUqIG5vZGUsIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGp1
bXBUb0ZhaWwsIGNvbnN0IFNwZWN1bGF0aW9uUmVjb3ZlcnkmIHJlY292ZXJ5KQogewogICAgIGlm
ICghbV9jb21waWxlT2theSkKICAgICAgICAgcmV0dXJuOwotICAgIEFTU0VSVChhdChtX2NvbXBp
bGVJbmRleCkuY2FuRXhpdCgpIHx8IG1faXNDaGVja2luZ0FyZ3VtZW50VHlwZXMpOworICAgIEFT
U0VSVChtX2N1cnJlbnROb2RlLT5jYW5FeGl0KCkgfHwgbV9pc0NoZWNraW5nQXJndW1lbnRUeXBl
cyk7CiAgICAgbV9qaXQuY29kZUJsb2NrKCktPmFwcGVuZFNwZWN1bGF0aW9uUmVjb3ZlcnkocmVj
b3ZlcnkpOwogICAgIG1faml0LmFwcGVuZEV4aXRJbmZvKGp1bXBUb0ZhaWwpOwotICAgIG1faml0
LmNvZGVCbG9jaygpLT5hcHBlbmRPU1JFeGl0KE9TUkV4aXQoa2luZCwganNWYWx1ZVNvdXJjZSwg
bV9qaXQuZ3JhcGgoKS5tZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlRm9yKG5vZGVJbmRleCks
IHRoaXMsIG1fc3RyZWFtLT5zaXplKCksIG1faml0LmNvZGVCbG9jaygpLT5udW1iZXJPZlNwZWN1
bGF0aW9uUmVjb3ZlcmllcygpKSk7CisgICAgbV9qaXQuY29kZUJsb2NrKCktPmFwcGVuZE9TUkV4
aXQoT1NSRXhpdChraW5kLCBqc1ZhbHVlU291cmNlLCBtX2ppdC5ncmFwaCgpLm1ldGhvZE9mR2V0
dGluZ0FWYWx1ZVByb2ZpbGVGb3Iobm9kZSksIHRoaXMsIG1fc3RyZWFtLT5zaXplKCksIG1faml0
LmNvZGVCbG9jaygpLT5udW1iZXJPZlNwZWN1bGF0aW9uUmVjb3ZlcmllcygpKSk7CiB9CiAKIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0aW9uQ2hlY2soRXhpdEtpbmQga2luZCwgSlNWYWx1
ZVNvdXJjZSBqc1ZhbHVlU291cmNlLCBFZGdlIG5vZGVVc2UsIE1hY3JvQXNzZW1ibGVyOjpKdW1w
IGp1bXBUb0ZhaWwsIGNvbnN0IFNwZWN1bGF0aW9uUmVjb3ZlcnkmIHJlY292ZXJ5KQogewotICAg
IEFTU0VSVChhdChtX2NvbXBpbGVJbmRleCkuY2FuRXhpdCgpIHx8IG1faXNDaGVja2luZ0FyZ3Vt
ZW50VHlwZXMpOwotICAgIHNwZWN1bGF0aW9uQ2hlY2soa2luZCwganNWYWx1ZVNvdXJjZSwgbm9k
ZVVzZS5pbmRleCgpLCBqdW1wVG9GYWlsLCByZWNvdmVyeSk7CisgICAgQVNTRVJUKG1fY3VycmVu
dE5vZGUtPmNhbkV4aXQoKSB8fCBtX2lzQ2hlY2tpbmdBcmd1bWVudFR5cGVzKTsKKyAgICBzcGVj
dWxhdGlvbkNoZWNrKGtpbmQsIGpzVmFsdWVTb3VyY2UsIG5vZGVVc2Uubm9kZSgpLCBqdW1wVG9G
YWlsLCByZWNvdmVyeSk7CiB9CiAKLXZvaWQgU3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0aW9uQ2hl
Y2soRXhpdEtpbmQga2luZCwgSlNWYWx1ZVNvdXJjZSBqc1ZhbHVlU291cmNlLCBOb2RlSW5kZXgg
bm9kZUluZGV4LCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBqdW1wVG9GYWlsLCBjb25zdCBTcGVjdWxh
dGlvblJlY292ZXJ5JiByZWNvdmVyeSwgU3BlY3VsYXRpb25EaXJlY3Rpb24gZGlyZWN0aW9uKQor
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRpb25DaGVjayhFeGl0S2luZCBraW5kLCBKU1Zh
bHVlU291cmNlIGpzVmFsdWVTb3VyY2UsIE5vZGVJbmRleCBOb2RlKiBub2RlLCBNYWNyb0Fzc2Vt
Ymxlcjo6SnVtcCBqdW1wVG9GYWlsLCBjb25zdCBTcGVjdWxhdGlvblJlY292ZXJ5JiByZWNvdmVy
eSwgU3BlY3VsYXRpb25EaXJlY3Rpb24gZGlyZWN0aW9uKQogewotICAgIHNwZWN1bGF0aW9uQ2hl
Y2soa2luZCwganNWYWx1ZVNvdXJjZSwgbm9kZUluZGV4LCBqdW1wVG9GYWlsLCByZWNvdmVyeSk7
CisgICAgc3BlY3VsYXRpb25DaGVjayhraW5kLCBqc1ZhbHVlU291cmNlLCBub2RlLCBqdW1wVG9G
YWlsLCByZWNvdmVyeSk7CiAgICAgaWYgKGRpcmVjdGlvbiA9PSBGb3J3YXJkU3BlY3VsYXRpb24p
CiAgICAgICAgIGNvbnZlcnRMYXN0T1NSRXhpdFRvRm9yd2FyZCgpOwogfQogCi1KdW1wUmVwbGFj
ZW1lbnRXYXRjaHBvaW50KiBTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRpb25XYXRjaHBvaW50KEV4
aXRLaW5kIGtpbmQsIEpTVmFsdWVTb3VyY2UganNWYWx1ZVNvdXJjZSwgTm9kZUluZGV4IG5vZGVJ
bmRleCkKK0p1bXBSZXBsYWNlbWVudFdhdGNocG9pbnQqIFNwZWN1bGF0aXZlSklUOjpzcGVjdWxh
dGlvbldhdGNocG9pbnQoRXhpdEtpbmQga2luZCwgSlNWYWx1ZVNvdXJjZSBqc1ZhbHVlU291cmNl
LCBOb2RlKiBub2RlKQogewogICAgIGlmICghbV9jb21waWxlT2theSkKICAgICAgICAgcmV0dXJu
IDA7Ci0gICAgQVNTRVJUKGF0KG1fY29tcGlsZUluZGV4KS5jYW5FeGl0KCkgfHwgbV9pc0NoZWNr
aW5nQXJndW1lbnRUeXBlcyk7CisgICAgQVNTRVJUKG1fY3VycmVudE5vZGUtPmNhbkV4aXQoKSB8
fCBtX2lzQ2hlY2tpbmdBcmd1bWVudFR5cGVzKTsKICAgICBtX2ppdC5hcHBlbmRFeGl0SW5mbyhK
SVRDb21waWxlcjo6SnVtcExpc3QoKSk7CiAgICAgT1NSRXhpdCYgZXhpdCA9IG1faml0LmNvZGVC
bG9jaygpLT5vc3JFeGl0KAogICAgICAgICBtX2ppdC5jb2RlQmxvY2soKS0+YXBwZW5kT1NSRXhp
dCgKICAgICAgICAgICAgIE9TUkV4aXQoa2luZCwganNWYWx1ZVNvdXJjZSwKLSAgICAgICAgICAg
ICAgICAgICAgbV9qaXQuZ3JhcGgoKS5tZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlRm9yKG5v
ZGVJbmRleCksCisgICAgICAgICAgICAgICAgICAgIG1faml0LmdyYXBoKCkubWV0aG9kT2ZHZXR0
aW5nQVZhbHVlUHJvZmlsZUZvcihub2RlKSwKICAgICAgICAgICAgICAgICAgICAgdGhpcywgbV9z
dHJlYW0tPnNpemUoKSkpKTsKICAgICBleGl0Lm1fd2F0Y2hwb2ludEluZGV4ID0gbV9qaXQuY29k
ZUJsb2NrKCktPmFwcGVuZFdhdGNocG9pbnQoCiAgICAgICAgIEp1bXBSZXBsYWNlbWVudFdhdGNo
cG9pbnQobV9qaXQud2F0Y2hwb2ludExhYmVsKCkpKTsKQEAgLTE5NCw3ICsxOTQsNyBAQCBKdW1w
UmVwbGFjZW1lbnRXYXRjaHBvaW50KiBTcGVjdWxhdGl2ZUpJCiAKIEp1bXBSZXBsYWNlbWVudFdh
dGNocG9pbnQqIFNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGlvbldhdGNocG9pbnQoRXhpdEtpbmQg
a2luZCkKIHsKLSAgICByZXR1cm4gc3BlY3VsYXRpb25XYXRjaHBvaW50KGtpbmQsIEpTVmFsdWVT
b3VyY2UoKSwgTm9Ob2RlKTsKKyAgICByZXR1cm4gc3BlY3VsYXRpb25XYXRjaHBvaW50KGtpbmQs
IEpTVmFsdWVTb3VyY2UoKSwgMCk7CiB9CiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbnZlcnRM
YXN0T1NSRXhpdFRvRm9yd2FyZChjb25zdCBWYWx1ZVJlY292ZXJ5JiB2YWx1ZVJlY292ZXJ5KQpA
QCAtMjAyLDEwICsyMDIsMTAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29udmVydExhc3RPU1JF
eGl0VAogICAgIGlmICghdmFsdWVSZWNvdmVyeSkgewogICAgICAgICAvLyBDaGVjayB0aGF0IGVp
dGhlciB0aGUgY3VycmVudCBub2RlIGlzIGEgU2V0TG9jYWwsIG9yIHRoZSBwcmVjZWRpbmcgbm9k
ZSB3YXMgYQogICAgICAgICAvLyBTZXRMb2NhbCB3aXRoIHRoZSBzYW1lIGNvZGUgb3JpZ2luLgot
ICAgICAgICBpZiAoYXQobV9jb21waWxlSW5kZXgpLm9wKCkgIT0gU2V0TG9jYWwpIHsKLSAgICAg
ICAgICAgIE5vZGUqIHNldExvY2FsID0gJmF0KG1faml0LmdyYXBoKCkubV9ibG9ja3NbbV9ibG9j
a10tPmF0KG1faW5kZXhJbkJsb2NrIC0gMSkpOworICAgICAgICBpZiAobV9jdXJyZW50Tm9kZS0+
b3AoKSAhPSBTZXRMb2NhbCkgeworICAgICAgICAgICAgTm9kZSogc2V0TG9jYWwgPSBtX2ppdC5n
cmFwaCgpLm1fYmxvY2tzW21fYmxvY2tdLT5hdChtX2luZGV4SW5CbG9jayAtIDEpOwogICAgICAg
ICAgICAgQVNTRVJUX1VOVVNFRChzZXRMb2NhbCwgc2V0TG9jYWwtPm9wKCkgPT0gU2V0TG9jYWwp
OwotICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChzZXRMb2NhbCwgc2V0TG9jYWwtPmNvZGVPcmln
aW4gPT0gYXQobV9jb21waWxlSW5kZXgpLmNvZGVPcmlnaW4pOworICAgICAgICAgICAgQVNTRVJU
X1VOVVNFRChzZXRMb2NhbCwgc2V0TG9jYWwtPmNvZGVPcmlnaW4gPT0gbV9jdXJyZW50Tm9kZS0+
Y29kZU9yaWdpbik7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIC8vIEZpbmQgdGhlIG5l
eHQgbm9kZS4KQEAgLTIxOSwxMyArMjE5LDEzIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbnZl
cnRMYXN0T1NSRXhpdFQKICAgICAgICAgICAgICAgICBBU1NFUlQobm9kZS0+b3AoKSA9PSBKdW1w
KTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBu
b2RlID0gJmF0KG1faml0LmdyYXBoKCkubV9ibG9ja3NbbV9ibG9ja10tPmF0KGluZGV4SW5CbG9j
aykpOwotICAgICAgICAgICAgaWYgKG5vZGUtPmNvZGVPcmlnaW4gIT0gYXQobV9jb21waWxlSW5k
ZXgpLmNvZGVPcmlnaW4pCisgICAgICAgICAgICBub2RlID0gbV9qaXQuZ3JhcGgoKS5tX2Jsb2Nr
c1ttX2Jsb2NrXS0+YXQoaW5kZXhJbkJsb2NrKTsKKyAgICAgICAgICAgIGlmIChub2RlLT5jb2Rl
T3JpZ2luICE9IG1fY3VycmVudE5vZGUtPmNvZGVPcmlnaW4pCiAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICBpbmRleEluQmxvY2srKzsKICAgICAgICAgfQogICAgICAgICAKLSAg
ICAgICAgQVNTRVJUKG5vZGUtPmNvZGVPcmlnaW4gIT0gYXQobV9jb21waWxlSW5kZXgpLmNvZGVP
cmlnaW4pOworICAgICAgICBBU1NFUlQobm9kZS0+Y29kZU9yaWdpbiAhPSBtX2N1cnJlbnROb2Rl
LT5jb2RlT3JpZ2luKTsKICAgICAgICAgT1NSRXhpdCYgZXhpdCA9IG1faml0LmNvZGVCbG9jaygp
LT5sYXN0T1NSRXhpdCgpOwogICAgICAgICBleGl0Lm1fY29kZU9yaWdpbiA9IG5vZGUtPmNvZGVP
cmlnaW47CiAgICAgICAgIHJldHVybjsKQEAgLTIzMywyOSArMjMzLDI5IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbnZlcnRMYXN0T1NSRXhpdFQKICAgICAKICAgICB1bnNpZ25lZCBzZXRMb2Nh
bEluZGV4SW5CbG9jayA9IG1faW5kZXhJbkJsb2NrICsgMTsKICAgICAKLSAgICBOb2RlKiBzZXRM
b2NhbCA9ICZhdChtX2ppdC5ncmFwaCgpLm1fYmxvY2tzW21fYmxvY2tdLT5hdChzZXRMb2NhbElu
ZGV4SW5CbG9jaykpOworICAgIE5vZGUqIHNldExvY2FsID0gbV9qaXQuZ3JhcGgoKS5tX2Jsb2Nr
c1ttX2Jsb2NrXS0+YXQoc2V0TG9jYWxJbmRleEluQmxvY2spOwogICAgIGJvb2wgaGFkSW50MzJU
b0RvdWJsZSA9IGZhbHNlOwogICAgIAogICAgIGlmIChzZXRMb2NhbC0+b3AoKSA9PSBJbnQzMlRv
RG91YmxlKSB7Ci0gICAgICAgIHNldExvY2FsID0gJmF0KG1faml0LmdyYXBoKCkubV9ibG9ja3Nb
bV9ibG9ja10tPmF0KCsrc2V0TG9jYWxJbmRleEluQmxvY2spKTsKKyAgICAgICAgc2V0TG9jYWwg
PSBtX2ppdC5ncmFwaCgpLm1fYmxvY2tzW21fYmxvY2tdLT5hdCgrK3NldExvY2FsSW5kZXhJbkJs
b2NrKTsKICAgICAgICAgaGFkSW50MzJUb0RvdWJsZSA9IHRydWU7CiAgICAgfQogICAgIGlmIChz
ZXRMb2NhbC0+b3AoKSA9PSBGbHVzaCB8fCBzZXRMb2NhbC0+b3AoKSA9PSBQaGFudG9tKQotICAg
ICAgICBzZXRMb2NhbCA9ICZhdChtX2ppdC5ncmFwaCgpLm1fYmxvY2tzW21fYmxvY2tdLT5hdCgr
K3NldExvY2FsSW5kZXhJbkJsb2NrKSk7CisgICAgICAgIHNldExvY2FsID0gbV9qaXQuZ3JhcGgo
KS5tX2Jsb2Nrc1ttX2Jsb2NrXS0+YXQoKytzZXRMb2NhbEluZGV4SW5CbG9jayk7CiAgICAgICAg
IAogICAgIGlmIChoYWRJbnQzMlRvRG91YmxlKQotICAgICAgICBBU1NFUlQoYXQoc2V0TG9jYWwt
PmNoaWxkMSgpKS5jaGlsZDEoKSA9PSBtX2NvbXBpbGVJbmRleCk7CisgICAgICAgIEFTU0VSVChz
ZXRMb2NhbC0+Y2hpbGQxKCktPmNoaWxkMSgpID09IG1fY29tcGlsZU5vZGUpOwogICAgIGVsc2UK
LSAgICAgICAgQVNTRVJUKHNldExvY2FsLT5jaGlsZDEoKSA9PSBtX2NvbXBpbGVJbmRleCk7Cisg
ICAgICAgIEFTU0VSVChzZXRMb2NhbC0+Y2hpbGQxKCkgPT0gbV9jb21waWxlTm9kZSk7CiAgICAg
QVNTRVJUKHNldExvY2FsLT5vcCgpID09IFNldExvY2FsKTsKLSAgICBBU1NFUlQoc2V0TG9jYWwt
PmNvZGVPcmlnaW4gPT0gYXQobV9jb21waWxlSW5kZXgpLmNvZGVPcmlnaW4pOworICAgIEFTU0VS
VChzZXRMb2NhbC0+Y29kZU9yaWdpbiA9PSBtX2N1cnJlbnROb2RlLT5jb2RlT3JpZ2luKTsKIAot
ICAgIE5vZGUqIG5leHROb2RlID0gJmF0KG1faml0LmdyYXBoKCkubV9ibG9ja3NbbV9ibG9ja10t
PmF0KHNldExvY2FsSW5kZXhJbkJsb2NrICsgMSkpOwotICAgIGlmIChuZXh0Tm9kZS0+b3AoKSA9
PSBKdW1wICYmIG5leHROb2RlLT5jb2RlT3JpZ2luID09IGF0KG1fY29tcGlsZUluZGV4KS5jb2Rl
T3JpZ2luKSB7CisgICAgTm9kZSogbmV4dE5vZGUgPSBtX2ppdC5ncmFwaCgpLm1fYmxvY2tzW21f
YmxvY2tdLT5hdChzZXRMb2NhbEluZGV4SW5CbG9jayArIDEpOworICAgIGlmIChuZXh0Tm9kZS0+
b3AoKSA9PSBKdW1wICYmIG5leHROb2RlLT5jb2RlT3JpZ2luID09IG1fY3VycmVudE5vZGUtPmNv
ZGVPcmlnaW4pIHsKICAgICAgICAgLy8gV2UncmUgYXQgYW4gaW5saW5lZCByZXR1cm4uIFVzZSBh
IGJhY2t3YXJkIHNwZWN1bGF0aW9uIGluc3RlYWQuCiAgICAgICAgIHJldHVybjsKICAgICB9Ci0g
ICAgQVNTRVJUKG5leHROb2RlLT5jb2RlT3JpZ2luICE9IGF0KG1fY29tcGlsZUluZGV4KS5jb2Rl
T3JpZ2luKTsKKyAgICBBU1NFUlQobmV4dE5vZGUtPmNvZGVPcmlnaW4gIT0gbV9jdXJyZW50Tm9k
ZS0+Y29kZU9yaWdpbik7CiAgICAgICAgIAogICAgIE9TUkV4aXQmIGV4aXQgPSBtX2ppdC5jb2Rl
QmxvY2soKS0+bGFzdE9TUkV4aXQoKTsKICAgICBleGl0Lm1fY29kZU9yaWdpbiA9IG5leHROb2Rl
LT5jb2RlT3JpZ2luOwpAQCAtMjgwLDU1ICsyODAsNTUgQEAgSnVtcFJlcGxhY2VtZW50V2F0Y2hw
b2ludCogU3BlY3VsYXRpdmVKSQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmZvcndhcmRTcGVjdWxhdGlvbkNoZWNrKEV4aXRLaW5kIGtpbmQsIEpTVmFsdWVT
b3VyY2UganNWYWx1ZVNvdXJjZSwgTm9kZUluZGV4IG5vZGVJbmRleCwgTWFjcm9Bc3NlbWJsZXI6
Okp1bXAganVtcFRvRmFpbCwgY29uc3QgVmFsdWVSZWNvdmVyeSYgdmFsdWVSZWNvdmVyeSkKK3Zv
aWQgU3BlY3VsYXRpdmVKSVQ6OmZvcndhcmRTcGVjdWxhdGlvbkNoZWNrKEV4aXRLaW5kIGtpbmQs
IEpTVmFsdWVTb3VyY2UganNWYWx1ZVNvdXJjZSwgTm9kZSogbm9kZSwgTWFjcm9Bc3NlbWJsZXI6
Okp1bXAganVtcFRvRmFpbCwgY29uc3QgVmFsdWVSZWNvdmVyeSYgdmFsdWVSZWNvdmVyeSkKIHsK
LSAgICBBU1NFUlQoYXQobV9jb21waWxlSW5kZXgpLmNhbkV4aXQoKSB8fCBtX2lzQ2hlY2tpbmdB
cmd1bWVudFR5cGVzKTsKLSAgICBzcGVjdWxhdGlvbkNoZWNrKGtpbmQsIGpzVmFsdWVTb3VyY2Us
IG5vZGVJbmRleCwganVtcFRvRmFpbCk7CisgICAgQVNTRVJUKG1fY3VycmVudE5vZGUtPmNhbkV4
aXQoKSB8fCBtX2lzQ2hlY2tpbmdBcmd1bWVudFR5cGVzKTsKKyAgICBzcGVjdWxhdGlvbkNoZWNr
KGtpbmQsIGpzVmFsdWVTb3VyY2UsIG5vZGUsIGp1bXBUb0ZhaWwpOwogICAgIGNvbnZlcnRMYXN0
T1NSRXhpdFRvRm9yd2FyZCh2YWx1ZVJlY292ZXJ5KTsKIH0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Zm9yd2FyZFNwZWN1bGF0aW9uQ2hlY2soRXhpdEtpbmQga2luZCwgSlNWYWx1ZVNvdXJjZSBq
c1ZhbHVlU291cmNlLCBOb2RlSW5kZXggbm9kZUluZGV4LCBjb25zdCBNYWNyb0Fzc2VtYmxlcjo6
SnVtcExpc3QmIGp1bXBzVG9GYWlsLCBjb25zdCBWYWx1ZVJlY292ZXJ5JiB2YWx1ZVJlY292ZXJ5
KQordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Zm9yd2FyZFNwZWN1bGF0aW9uQ2hlY2soRXhpdEtpbmQg
a2luZCwgSlNWYWx1ZVNvdXJjZSBqc1ZhbHVlU291cmNlLCBOb2RlKiBub2RlLCBjb25zdCBNYWNy
b0Fzc2VtYmxlcjo6SnVtcExpc3QmIGp1bXBzVG9GYWlsLCBjb25zdCBWYWx1ZVJlY292ZXJ5JiB2
YWx1ZVJlY292ZXJ5KQogewotICAgIEFTU0VSVChhdChtX2NvbXBpbGVJbmRleCkuY2FuRXhpdCgp
IHx8IG1faXNDaGVja2luZ0FyZ3VtZW50VHlwZXMpOwotICAgIHNwZWN1bGF0aW9uQ2hlY2soa2lu
ZCwganNWYWx1ZVNvdXJjZSwgbm9kZUluZGV4LCBqdW1wc1RvRmFpbCk7CisgICAgQVNTRVJUKG1f
Y3VycmVudE5vZGUtPmNhbkV4aXQoKSB8fCBtX2lzQ2hlY2tpbmdBcmd1bWVudFR5cGVzKTsKKyAg
ICBzcGVjdWxhdGlvbkNoZWNrKGtpbmQsIGpzVmFsdWVTb3VyY2UsIG5vZGUsIGp1bXBzVG9GYWls
KTsKICAgICBjb252ZXJ0TGFzdE9TUkV4aXRUb0ZvcndhcmQodmFsdWVSZWNvdmVyeSk7CiB9CiAK
LXZvaWQgU3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0aW9uQ2hlY2soRXhpdEtpbmQga2luZCwgSlNW
YWx1ZVNvdXJjZSBqc1ZhbHVlU291cmNlLCBOb2RlSW5kZXggbm9kZUluZGV4LCBNYWNyb0Fzc2Vt
Ymxlcjo6SnVtcCBqdW1wVG9GYWlsLCBTcGVjdWxhdGlvbkRpcmVjdGlvbiBkaXJlY3Rpb24pCit2
b2lkIFNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGlvbkNoZWNrKEV4aXRLaW5kIGtpbmQsIEpTVmFs
dWVTb3VyY2UganNWYWx1ZVNvdXJjZSwgTm9kZSogbm9kZSwgTWFjcm9Bc3NlbWJsZXI6Okp1bXAg
anVtcFRvRmFpbCwgU3BlY3VsYXRpb25EaXJlY3Rpb24gZGlyZWN0aW9uKQogewogICAgIGlmIChk
aXJlY3Rpb24gPT0gRm9yd2FyZFNwZWN1bGF0aW9uKQotICAgICAgICBmb3J3YXJkU3BlY3VsYXRp
b25DaGVjayhraW5kLCBqc1ZhbHVlU291cmNlLCBub2RlSW5kZXgsIGp1bXBUb0ZhaWwpOworICAg
ICAgICBmb3J3YXJkU3BlY3VsYXRpb25DaGVjayhraW5kLCBqc1ZhbHVlU291cmNlLCBub2RlLCBq
dW1wVG9GYWlsKTsKICAgICBlbHNlCi0gICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soa2luZCwganNW
YWx1ZVNvdXJjZSwgbm9kZUluZGV4LCBqdW1wVG9GYWlsKTsKKyAgICAgICAgc3BlY3VsYXRpb25D
aGVjayhraW5kLCBqc1ZhbHVlU291cmNlLCBub2RlLCBqdW1wVG9GYWlsKTsKIH0KIAotdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6dGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oRXhpdEtpbmQga2lu
ZCwgSlNWYWx1ZVJlZ3MganNWYWx1ZVJlZ3MsIE5vZGVJbmRleCBub2RlSW5kZXgpCit2b2lkIFNw
ZWN1bGF0aXZlSklUOjp0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihFeGl0S2luZCBraW5k
LCBKU1ZhbHVlUmVncyBqc1ZhbHVlUmVncywgTm9kZSogbm9kZSkKIHsKLSAgICBBU1NFUlQoYXQo
bV9jb21waWxlSW5kZXgpLmNhbkV4aXQoKSB8fCBtX2lzQ2hlY2tpbmdBcmd1bWVudFR5cGVzKTsK
KyAgICBBU1NFUlQobV9jdXJyZW50Tm9kZS0+Y2FuRXhpdCgpIHx8IG1faXNDaGVja2luZ0FyZ3Vt
ZW50VHlwZXMpOwogI2lmIERGR19FTkFCTEUoREVCVUdfVkVSQk9TRSkKICAgICBkYXRhTG9nRigi
U3BlY3VsYXRpdmVKSVQgd2FzIHRlcm1pbmF0ZWQuXG4iKTsKICNlbmRpZgogICAgIGlmICghbV9j
b21waWxlT2theSkKICAgICAgICAgcmV0dXJuOwotICAgIHNwZWN1bGF0aW9uQ2hlY2soa2luZCwg
anNWYWx1ZVJlZ3MsIG5vZGVJbmRleCwgbV9qaXQuanVtcCgpKTsKKyAgICBzcGVjdWxhdGlvbkNo
ZWNrKGtpbmQsIGpzVmFsdWVSZWdzLCBub2RlLCBtX2ppdC5qdW1wKCkpOwogICAgIG1fY29tcGls
ZU9rYXkgPSBmYWxzZTsKIH0KIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6dGVybWluYXRlU3BlY3Vs
YXRpdmVFeGVjdXRpb24oRXhpdEtpbmQga2luZCwgSlNWYWx1ZVJlZ3MganNWYWx1ZVJlZ3MsIEVk
Z2Ugbm9kZVVzZSkKIHsKLSAgICBBU1NFUlQoYXQobV9jb21waWxlSW5kZXgpLmNhbkV4aXQoKSB8
fCBtX2lzQ2hlY2tpbmdBcmd1bWVudFR5cGVzKTsKLSAgICB0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4
ZWN1dGlvbihraW5kLCBqc1ZhbHVlUmVncywgbm9kZVVzZS5pbmRleCgpKTsKKyAgICBBU1NFUlQo
bV9jdXJyZW50Tm9kZS0+Y2FuRXhpdCgpIHx8IG1faXNDaGVja2luZ0FyZ3VtZW50VHlwZXMpOwor
ICAgIHRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKGtpbmQsIGpzVmFsdWVSZWdzLCBub2Rl
VXNlLm5vZGUoKSk7CiB9CiAKLXZvaWQgU3BlY3VsYXRpdmVKSVQ6OnRlcm1pbmF0ZVNwZWN1bGF0
aXZlRXhlY3V0aW9uKEV4aXRLaW5kIGtpbmQsIEpTVmFsdWVSZWdzIGpzVmFsdWVSZWdzLCBOb2Rl
SW5kZXggbm9kZUluZGV4LCBTcGVjdWxhdGlvbkRpcmVjdGlvbiBkaXJlY3Rpb24pCit2b2lkIFNw
ZWN1bGF0aXZlSklUOjp0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihFeGl0S2luZCBraW5k
LCBKU1ZhbHVlUmVncyBqc1ZhbHVlUmVncywgTm9kZSogbm9kZSwgU3BlY3VsYXRpb25EaXJlY3Rp
b24gZGlyZWN0aW9uKQogewotICAgIEFTU0VSVChhdChtX2NvbXBpbGVJbmRleCkuY2FuRXhpdCgp
IHx8IG1faXNDaGVja2luZ0FyZ3VtZW50VHlwZXMpOworICAgIEFTU0VSVChtX2N1cnJlbnROb2Rl
LT5jYW5FeGl0KCkgfHwgbV9pc0NoZWNraW5nQXJndW1lbnRUeXBlcyk7CiAjaWYgREZHX0VOQUJM
RShERUJVR19WRVJCT1NFKQogICAgIGRhdGFMb2dGKCJTcGVjdWxhdGl2ZUpJVCB3YXMgdGVybWlu
YXRlZC5cbiIpOwogI2VuZGlmCiAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQogICAgICAgICByZXR1
cm47Ci0gICAgc3BlY3VsYXRpb25DaGVjayhraW5kLCBqc1ZhbHVlUmVncywgbm9kZUluZGV4LCBt
X2ppdC5qdW1wKCksIGRpcmVjdGlvbik7CisgICAgc3BlY3VsYXRpb25DaGVjayhraW5kLCBqc1Zh
bHVlUmVncywgbm9kZSwgbV9qaXQuanVtcCgpLCBkaXJlY3Rpb24pOwogICAgIG1fY29tcGlsZU9r
YXkgPSBmYWxzZTsKIH0KIApAQCAtMzY4LDggKzM2OCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNsZWFyR2VuZXJhdGlvbkluZm8KIFNpbGVudFJlZ2lzdGVyU2F2ZVBsYW4gU3BlY3VsYXRpdmVK
SVQ6OnNpbGVudFNhdmVQbGFuRm9yR1BSKFZpcnR1YWxSZWdpc3RlciBzcGlsbE1lLCBHUFJSZWcg
c291cmNlKQogewogICAgIEdlbmVyYXRpb25JbmZvJiBpbmZvID0gbV9nZW5lcmF0aW9uSW5mb1tz
cGlsbE1lXTsKLSAgICBOb2RlSW5kZXggbm9kZUluZGV4ID0gaW5mby5ub2RlSW5kZXgoKTsKLSAg
ICBOb2RlJiBub2RlID0gYXQobm9kZUluZGV4KTsKKyAgICBOb2RlKiBub2RlID0gaW5mby5ub2Rl
KCk7CiAgICAgRGF0YUZvcm1hdCByZWdpc3RlckZvcm1hdCA9IGluZm8ucmVnaXN0ZXJGb3JtYXQo
KTsKICAgICBBU1NFUlQocmVnaXN0ZXJGb3JtYXQgIT0gRGF0YUZvcm1hdE5vbmUpOwogICAgIEFT
U0VSVChyZWdpc3RlckZvcm1hdCAhPSBEYXRhRm9ybWF0RG91YmxlKTsKQEAgLTQwNCw4ICs0MDMs
OCBAQCBTaWxlbnRSZWdpc3RlclNhdmVQbGFuIFNwZWN1bGF0aXZlSklUOjpzCiAgICAgaWYgKHJl
Z2lzdGVyRm9ybWF0ID09IERhdGFGb3JtYXRJbnRlZ2VyKSB7CiAgICAgICAgIEFTU0VSVChpbmZv
LmdwcigpID09IHNvdXJjZSk7CiAgICAgICAgIEFTU0VSVChpc0pTSW50ZWdlcihpbmZvLnJlZ2lz
dGVyRm9ybWF0KCkpKTsKLSAgICAgICAgaWYgKG5vZGUuaGFzQ29uc3RhbnQoKSkgewotICAgICAg
ICAgICAgQVNTRVJUKGlzSW50MzJDb25zdGFudChub2RlSW5kZXgpKTsKKyAgICAgICAgaWYgKG5v
ZGUtPmhhc0NvbnN0YW50KCkpIHsKKyAgICAgICAgICAgIEFTU0VSVChpc0ludDMyQ29uc3RhbnQo
bm9kZSkpOwogICAgICAgICAgICAgZmlsbEFjdGlvbiA9IFNldEludDMyQ29uc3RhbnQ7CiAgICAg
ICAgIH0gZWxzZQogICAgICAgICAgICAgZmlsbEFjdGlvbiA9IExvYWQzMlBheWxvYWQ7CkBAIC00
MTUsMTYgKzQxNCwxNiBAQCBTaWxlbnRSZWdpc3RlclNhdmVQbGFuIFNwZWN1bGF0aXZlSklUOjpz
CiAgICAgICAgIGZpbGxBY3Rpb24gPSBEb05vdGhpbmdGb3JGaWxsOwogI2VsaWYgVVNFKEpTVkFM
VUUzMl82NCkKICAgICAgICAgQVNTRVJUKGluZm8uZ3ByKCkgPT0gc291cmNlKTsKLSAgICAgICAg
aWYgKG5vZGUuaGFzQ29uc3RhbnQoKSkgewotICAgICAgICAgICAgQVNTRVJUKGlzQm9vbGVhbkNv
bnN0YW50KG5vZGVJbmRleCkpOworICAgICAgICBpZiAobm9kZS0+aGFzQ29uc3RhbnQoKSkgewor
ICAgICAgICAgICAgQVNTRVJUKGlzQm9vbGVhbkNvbnN0YW50KG5vZGUpKTsKICAgICAgICAgICAg
IGZpbGxBY3Rpb24gPSBTZXRCb29sZWFuQ29uc3RhbnQ7CiAgICAgICAgIH0gZWxzZQogICAgICAg
ICAgICAgZmlsbEFjdGlvbiA9IExvYWQzMlBheWxvYWQ7CiAjZW5kaWYKICAgICB9IGVsc2UgaWYg
KHJlZ2lzdGVyRm9ybWF0ID09IERhdGFGb3JtYXRDZWxsKSB7CiAgICAgICAgIEFTU0VSVChpbmZv
LmdwcigpID09IHNvdXJjZSk7Ci0gICAgICAgIGlmIChub2RlLmhhc0NvbnN0YW50KCkpIHsKLSAg
ICAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSB2YWx1ZU9mSlNDb25zdGFudChub2RlSW5kZXgpOwor
ICAgICAgICBpZiAobm9kZS0+aGFzQ29uc3RhbnQoKSkgeworICAgICAgICAgICAgSlNWYWx1ZSB2
YWx1ZSA9IHZhbHVlT2ZKU0NvbnN0YW50KG5vZGUpOwogICAgICAgICAgICAgQVNTRVJUX1VOVVNF
RCh2YWx1ZSwgdmFsdWUuaXNDZWxsKCkpOwogICAgICAgICAgICAgZmlsbEFjdGlvbiA9IFNldENl
bGxDb25zdGFudDsKICAgICAgICAgfSBlbHNlIHsKQEAgLTQ0MSw4ICs0NDAsOCBAQCBTaWxlbnRS
ZWdpc3RlclNhdmVQbGFuIFNwZWN1bGF0aXZlSklUOjpzCiAgICAgICAgIEFTU0VSVChyZWdpc3Rl
ckZvcm1hdCAmIERhdGFGb3JtYXRKUyk7CiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICAgICAgQVNT
RVJUKGluZm8uZ3ByKCkgPT0gc291cmNlKTsKLSAgICAgICAgaWYgKG5vZGUuaGFzQ29uc3RhbnQo
KSkgewotICAgICAgICAgICAgaWYgKHZhbHVlT2ZKU0NvbnN0YW50KG5vZGVJbmRleCkuaXNDZWxs
KCkpCisgICAgICAgIGlmIChub2RlLT5oYXNDb25zdGFudCgpKSB7CisgICAgICAgICAgICBpZiAo
dmFsdWVPZkpTQ29uc3RhbnQobm9kZSkuaXNDZWxsKCkpCiAgICAgICAgICAgICAgICAgZmlsbEFj
dGlvbiA9IFNldFRydXN0ZWRKU0NvbnN0YW50OwogICAgICAgICAgICAgZWxzZQogICAgICAgICAg
ICAgICAgIGZpbGxBY3Rpb24gPSBTZXRKU0NvbnN0YW50OwpAQCAtNDU2LDcgKzQ1NSw3IEBAIFNp
bGVudFJlZ2lzdGVyU2F2ZVBsYW4gU3BlY3VsYXRpdmVKSVQ6OnMKICAgICAgICAgICAgIGZpbGxB
Y3Rpb24gPSBMb2FkNjQ7CiAjZWxzZQogICAgICAgICBBU1NFUlQoaW5mby50YWdHUFIoKSA9PSBz
b3VyY2UgfHwgaW5mby5wYXlsb2FkR1BSKCkgPT0gc291cmNlKTsKLSAgICAgICAgaWYgKG5vZGUu
aGFzQ29uc3RhbnQoKSkKKyAgICAgICAgaWYgKG5vZGUtPmhhc0NvbnN0YW50KCkpCiAgICAgICAg
ICAgICBmaWxsQWN0aW9uID0gaW5mby50YWdHUFIoKSA9PSBzb3VyY2UgPyBTZXRKU0NvbnN0YW50
VGFnIDogU2V0SlNDb25zdGFudFBheWxvYWQ7CiAgICAgICAgIGVsc2UgaWYgKGluZm8ucGF5bG9h
ZEdQUigpID09IHNvdXJjZSkKICAgICAgICAgICAgIGZpbGxBY3Rpb24gPSBMb2FkMzJQYXlsb2Fk
OwpAQCAtNDgyLDE0ICs0ODEsMTMgQEAgU2lsZW50UmVnaXN0ZXJTYXZlUGxhbiBTcGVjdWxhdGl2
ZUpJVDo6cwogI2VuZGlmCiAgICAgfQogICAgICAgICAKLSAgICByZXR1cm4gU2lsZW50UmVnaXN0
ZXJTYXZlUGxhbihzcGlsbEFjdGlvbiwgZmlsbEFjdGlvbiwgbm9kZUluZGV4LCBzb3VyY2UpOwor
ICAgIHJldHVybiBTaWxlbnRSZWdpc3RlclNhdmVQbGFuKHNwaWxsQWN0aW9uLCBmaWxsQWN0aW9u
LCBub2RlLCBzb3VyY2UpOwogfQogICAgIAogU2lsZW50UmVnaXN0ZXJTYXZlUGxhbiBTcGVjdWxh
dGl2ZUpJVDo6c2lsZW50U2F2ZVBsYW5Gb3JGUFIoVmlydHVhbFJlZ2lzdGVyIHNwaWxsTWUsIEZQ
UlJlZyBzb3VyY2UpCiB7CiAgICAgR2VuZXJhdGlvbkluZm8mIGluZm8gPSBtX2dlbmVyYXRpb25J
bmZvW3NwaWxsTWVdOwotICAgIE5vZGVJbmRleCBub2RlSW5kZXggPSBpbmZvLm5vZGVJbmRleCgp
OwotICAgIE5vZGUmIG5vZGUgPSBhdChub2RlSW5kZXgpOworICAgIE5vZGUqIG5vZGUgPSBpbmZv
Lm5vZGUoKTsKICAgICBBU1NFUlQoaW5mby5yZWdpc3RlckZvcm1hdCgpID09IERhdGFGb3JtYXRE
b3VibGUpOwogCiAgICAgU2lsZW50U3BpbGxBY3Rpb24gc3BpbGxBY3Rpb247CkBAIC00OTgsMTUg
KzQ5NiwxNSBAQCBTaWxlbnRSZWdpc3RlclNhdmVQbGFuIFNwZWN1bGF0aXZlSklUOjpzCiAgICAg
aWYgKCFpbmZvLm5lZWRzU3BpbGwoKSkKICAgICAgICAgc3BpbGxBY3Rpb24gPSBEb05vdGhpbmdG
b3JTcGlsbDsKICAgICBlbHNlIHsKLSAgICAgICAgQVNTRVJUKCFhdChpbmZvLm5vZGVJbmRleCgp
KS5oYXNDb25zdGFudCgpKTsKKyAgICAgICAgQVNTRVJUKG5vZGUtPmhhc0NvbnN0YW50KCkpOwog
ICAgICAgICBBU1NFUlQoaW5mby5zcGlsbEZvcm1hdCgpID09IERhdGFGb3JtYXROb25lKTsKICAg
ICAgICAgQVNTRVJUKGluZm8uZnByKCkgPT0gc291cmNlKTsKICAgICAgICAgc3BpbGxBY3Rpb24g
PSBTdG9yZURvdWJsZTsKICAgICB9CiAgICAgICAgIAogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAg
aWYgKG5vZGUuaGFzQ29uc3RhbnQoKSkgewotICAgICAgICBBU1NFUlQoaXNOdW1iZXJDb25zdGFu
dChub2RlSW5kZXgpKTsKKyAgICBpZiAobm9kZS0+aGFzQ29uc3RhbnQoKSkgeworICAgICAgICBB
U1NFUlQoaXNOdW1iZXJDb25zdGFudChub2RlKSk7CiAgICAgICAgIGZpbGxBY3Rpb24gPSBTZXRE
b3VibGVDb25zdGFudDsKICAgICB9IGVsc2UgaWYgKGluZm8uc3BpbGxGb3JtYXQoKSAhPSBEYXRh
Rm9ybWF0Tm9uZSAmJiBpbmZvLnNwaWxsRm9ybWF0KCkgIT0gRGF0YUZvcm1hdERvdWJsZSkgewog
ICAgICAgICAvLyBpdCB3YXMgYWxyZWFkeSBzcGlsbGVkIHByZXZpb3VzbHkgYW5kIG5vdCBhcyBh
IGRvdWJsZSwgd2hpY2ggbWVhbnMgd2UgbmVlZCB1bmJveGluZy4KQEAgLTUxNiwxNCArNTE0LDE0
IEBAIFNpbGVudFJlZ2lzdGVyU2F2ZVBsYW4gU3BlY3VsYXRpdmVKSVQ6OnMKICAgICAgICAgZmls
bEFjdGlvbiA9IExvYWREb3VibGU7CiAjZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQogICAgIEFTU0VS
VChpbmZvLnJlZ2lzdGVyRm9ybWF0KCkgPT0gRGF0YUZvcm1hdERvdWJsZSB8fCBpbmZvLnJlZ2lz
dGVyRm9ybWF0KCkgPT0gRGF0YUZvcm1hdEpTRG91YmxlKTsKLSAgICBpZiAobm9kZS5oYXNDb25z
dGFudCgpKSB7Ci0gICAgICAgIEFTU0VSVChpc051bWJlckNvbnN0YW50KG5vZGVJbmRleCkpOwor
ICAgIGlmIChub2RlLT5oYXNDb25zdGFudCgpKSB7CisgICAgICAgIEFTU0VSVChpc051bWJlckNv
bnN0YW50KG5vZGUpKTsKICAgICAgICAgZmlsbEFjdGlvbiA9IFNldERvdWJsZUNvbnN0YW50Owog
ICAgIH0gZWxzZQogICAgICAgICBmaWxsQWN0aW9uID0gTG9hZERvdWJsZTsKICNlbmRpZgogCi0g
ICAgcmV0dXJuIFNpbGVudFJlZ2lzdGVyU2F2ZVBsYW4oc3BpbGxBY3Rpb24sIGZpbGxBY3Rpb24s
IG5vZGVJbmRleCwgc291cmNlKTsKKyAgICByZXR1cm4gU2lsZW50UmVnaXN0ZXJTYXZlUGxhbihz
cGlsbEFjdGlvbiwgZmlsbEFjdGlvbiwgbm9kZSwgc291cmNlKTsKIH0KICAgICAKIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OnNpbGVudFNwaWxsKGNvbnN0IFNpbGVudFJlZ2lzdGVyU2F2ZVBsYW4mIHBs
YW4pCkBAIC01MzIsMjEgKzUzMCwyMSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpzaWxlbnRTcGls
bChjb25zdCBTCiAgICAgY2FzZSBEb05vdGhpbmdGb3JTcGlsbDoKICAgICAgICAgYnJlYWs7CiAg
ICAgY2FzZSBTdG9yZTMyVGFnOgotICAgICAgICBtX2ppdC5zdG9yZTMyKHBsYW4uZ3ByKCksIEpJ
VENvbXBpbGVyOjp0YWdGb3IoYXQocGxhbi5ub2RlSW5kZXgoKSkudmlydHVhbFJlZ2lzdGVyKCkp
KTsKKyAgICAgICAgbV9qaXQuc3RvcmUzMihwbGFuLmdwcigpLCBKSVRDb21waWxlcjo6dGFnRm9y
KHBsYW4ubm9kZSgpLT52aXJ0dWFsUmVnaXN0ZXIoKSkpOwogICAgICAgICBicmVhazsKICAgICBj
YXNlIFN0b3JlMzJQYXlsb2FkOgotICAgICAgICBtX2ppdC5zdG9yZTMyKHBsYW4uZ3ByKCksIEpJ
VENvbXBpbGVyOjpwYXlsb2FkRm9yKGF0KHBsYW4ubm9kZUluZGV4KCkpLnZpcnR1YWxSZWdpc3Rl
cigpKSk7CisgICAgICAgIG1faml0LnN0b3JlMzIocGxhbi5ncHIoKSwgSklUQ29tcGlsZXI6OnBh
eWxvYWRGb3IocGxhbi5ub2RlKCktPnZpcnR1YWxSZWdpc3RlcigpKSk7CiAgICAgICAgIGJyZWFr
OwogICAgIGNhc2UgU3RvcmVQdHI6Ci0gICAgICAgIG1faml0LnN0b3JlUHRyKHBsYW4uZ3ByKCks
IEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKGF0KHBsYW4ubm9kZUluZGV4KCkpLnZpcnR1YWxSZWdp
c3RlcigpKSk7CisgICAgICAgIG1faml0LnN0b3JlUHRyKHBsYW4uZ3ByKCksIEpJVENvbXBpbGVy
OjphZGRyZXNzRm9yKHBsYW4ubm9kZSgpLT52aXJ0dWFsUmVnaXN0ZXIoKSkpOwogICAgICAgICBi
cmVhazsKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIGNhc2UgU3RvcmU2NDoKLSAgICAgICAgbV9q
aXQuc3RvcmU2NChwbGFuLmdwcigpLCBKSVRDb21waWxlcjo6YWRkcmVzc0ZvcihhdChwbGFuLm5v
ZGVJbmRleCgpKS52aXJ0dWFsUmVnaXN0ZXIoKSkpOworICAgICAgICBtX2ppdC5zdG9yZTY0KHBs
YW4uZ3ByKCksIEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKHBsYW4ubm9kZSgpLT52aXJ0dWFsUmVn
aXN0ZXIoKSkpOwogICAgICAgICBicmVhazsKICNlbmRpZgogICAgIGNhc2UgU3RvcmVEb3VibGU6
Ci0gICAgICAgIG1faml0LnN0b3JlRG91YmxlKHBsYW4uZnByKCksIEpJVENvbXBpbGVyOjphZGRy
ZXNzRm9yKGF0KHBsYW4ubm9kZUluZGV4KCkpLnZpcnR1YWxSZWdpc3RlcigpKSk7CisgICAgICAg
IG1faml0LnN0b3JlRG91YmxlKHBsYW4uZnByKCksIEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKHBs
YW4ubm9kZSgpLT52aXJ0dWFsUmVnaXN0ZXIoKSkpOwogICAgICAgICBicmVhazsKICAgICBkZWZh
dWx0OgogICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtNTYyLDQzICs1
NjAsNDMgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6c2lsZW50RmlsbChjb25zdCBTaQogICAgIGNh
c2UgRG9Ob3RoaW5nRm9yRmlsbDoKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBTZXRJbnQzMkNv
bnN0YW50OgotICAgICAgICBtX2ppdC5tb3ZlKEltbTMyKHZhbHVlT2ZJbnQzMkNvbnN0YW50KHBs
YW4ubm9kZUluZGV4KCkpKSwgcGxhbi5ncHIoKSk7CisgICAgICAgIG1faml0Lm1vdmUoSW1tMzIo
dmFsdWVPZkludDMyQ29uc3RhbnQocGxhbi5ub2RlKCkpKSwgcGxhbi5ncHIoKSk7CiAgICAgICAg
IGJyZWFrOwogICAgIGNhc2UgU2V0Qm9vbGVhbkNvbnN0YW50OgotICAgICAgICBtX2ppdC5tb3Zl
KFRydXN0ZWRJbW0zMih2YWx1ZU9mQm9vbGVhbkNvbnN0YW50KHBsYW4ubm9kZUluZGV4KCkpKSwg
cGxhbi5ncHIoKSk7CisgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbTMyKHZhbHVlT2ZCb29s
ZWFuQ29uc3RhbnQocGxhbi5ub2RlKCkpKSwgcGxhbi5ncHIoKSk7CiAgICAgICAgIGJyZWFrOwog
ICAgIGNhc2UgU2V0Q2VsbENvbnN0YW50OgotICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1Q
dHIodmFsdWVPZkpTQ29uc3RhbnQocGxhbi5ub2RlSW5kZXgoKSkuYXNDZWxsKCkpLCBwbGFuLmdw
cigpKTsKKyAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyKHZhbHVlT2ZKU0NvbnN0YW50
KHBsYW4ubm9kZSgpKS5hc0NlbGwoKSksIHBsYW4uZ3ByKCkpOwogICAgICAgICBicmVhazsKICNp
ZiBVU0UoSlNWQUxVRTY0KQogICAgIGNhc2UgU2V0VHJ1c3RlZEpTQ29uc3RhbnQ6Ci0gICAgICAg
IG1faml0Lm1vdmUodmFsdWVPZkpTQ29uc3RhbnRBc0ltbTY0KHBsYW4ubm9kZUluZGV4KCkpLmFz
VHJ1c3RlZEltbTY0KCksIHBsYW4uZ3ByKCkpOworICAgICAgICBtX2ppdC5tb3ZlKHZhbHVlT2ZK
U0NvbnN0YW50QXNJbW02NChwbGFuLm5vZGUoKSkuYXNUcnVzdGVkSW1tNjQoKSwgcGxhbi5ncHIo
KSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgU2V0SlNDb25zdGFudDoKLSAgICAgICAgbV9q
aXQubW92ZSh2YWx1ZU9mSlNDb25zdGFudEFzSW1tNjQocGxhbi5ub2RlSW5kZXgoKSksIHBsYW4u
Z3ByKCkpOworICAgICAgICBtX2ppdC5tb3ZlKHZhbHVlT2ZKU0NvbnN0YW50QXNJbW02NChwbGFu
Lm5vZGUoKSksIHBsYW4uZ3ByKCkpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIFNldERvdWJs
ZUNvbnN0YW50OgotICAgICAgICBtX2ppdC5tb3ZlKEltbTY0KHJlaW50ZXJwcmV0RG91YmxlVG9J
bnQ2NCh2YWx1ZU9mTnVtYmVyQ29uc3RhbnQocGxhbi5ub2RlSW5kZXgoKSkpKSwgY2FuVHJhbXBs
ZSk7CisgICAgICAgIG1faml0Lm1vdmUoSW1tNjQocmVpbnRlcnByZXREb3VibGVUb0ludDY0KHZh
bHVlT2ZOdW1iZXJDb25zdGFudChwbGFuLm5vZGUoKSkpKSwgY2FuVHJhbXBsZSk7CiAgICAgICAg
IG1faml0Lm1vdmU2NFRvRG91YmxlKGNhblRyYW1wbGUsIHBsYW4uZnByKCkpOwogICAgICAgICBi
cmVhazsKICAgICBjYXNlIExvYWQzMlBheWxvYWRCb3hJbnQ6Ci0gICAgICAgIG1faml0LmxvYWQz
MihKSVRDb21waWxlcjo6cGF5bG9hZEZvcihhdChwbGFuLm5vZGVJbmRleCgpKS52aXJ0dWFsUmVn
aXN0ZXIoKSksIHBsYW4uZ3ByKCkpOworICAgICAgICBtX2ppdC5sb2FkMzIoSklUQ29tcGlsZXI6
OnBheWxvYWRGb3IocGxhbi5ub2RlKCktPnZpcnR1YWxSZWdpc3RlcigpKSwgcGxhbi5ncHIoKSk7
CiAgICAgICAgIG1faml0Lm9yNjQoR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyLCBwbGFu
LmdwcigpKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBMb2FkRG91YmxlQm94RG91YmxlOgot
ICAgICAgICBtX2ppdC5sb2FkNjQoSklUQ29tcGlsZXI6OmFkZHJlc3NGb3IoYXQocGxhbi5ub2Rl
SW5kZXgoKSkudmlydHVhbFJlZ2lzdGVyKCkpLCBwbGFuLmdwcigpKTsKKyAgICAgICAgbV9qaXQu
bG9hZDY0KEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKHBsYW4ubm9kZSgpLT52aXJ0dWFsUmVnaXN0
ZXIoKSksIHBsYW4uZ3ByKCkpOwogICAgICAgICBtX2ppdC5zdWI2NChHUFJJbmZvOjp0YWdUeXBl
TnVtYmVyUmVnaXN0ZXIsIHBsYW4uZ3ByKCkpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIExv
YWRKU1VuYm94RG91YmxlOgotICAgICAgICBtX2ppdC5sb2FkNjQoSklUQ29tcGlsZXI6OmFkZHJl
c3NGb3IoYXQocGxhbi5ub2RlSW5kZXgoKSkudmlydHVhbFJlZ2lzdGVyKCkpLCBjYW5UcmFtcGxl
KTsKKyAgICAgICAgbV9qaXQubG9hZDY0KEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKHBsYW4ubm9k
ZSgpLT52aXJ0dWFsUmVnaXN0ZXIoKSksIGNhblRyYW1wbGUpOwogICAgICAgICB1bmJveERvdWJs
ZShjYW5UcmFtcGxlLCBwbGFuLmZwcigpKTsKICAgICAgICAgYnJlYWs7CiAjZWxzZQogICAgIGNh
c2UgU2V0SlNDb25zdGFudFRhZzoKLSAgICAgICAgbV9qaXQubW92ZShJbW0zMih2YWx1ZU9mSlND
b25zdGFudChwbGFuLm5vZGVJbmRleCgpKS50YWcoKSksIHBsYW4uZ3ByKCkpOworICAgICAgICBt
X2ppdC5tb3ZlKEltbTMyKHZhbHVlT2ZKU0NvbnN0YW50KHBsYW4ubm9kZSgpKS50YWcoKSksIHBs
YW4uZ3ByKCkpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIFNldEpTQ29uc3RhbnRQYXlsb2Fk
OgotICAgICAgICBtX2ppdC5tb3ZlKEltbTMyKHZhbHVlT2ZKU0NvbnN0YW50KHBsYW4ubm9kZUlu
ZGV4KCkpLnBheWxvYWQoKSksIHBsYW4uZ3ByKCkpOworICAgICAgICBtX2ppdC5tb3ZlKEltbTMy
KHZhbHVlT2ZKU0NvbnN0YW50KHBsYW4ubm9kZSgpKS5wYXlsb2FkKCkpLCBwbGFuLmdwcigpKTsK
ICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBTZXRJbnQzMlRhZzoKICAgICAgICAgbV9qaXQubW92
ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpLCBwbGFuLmdwcigpKTsKQEAgLTYxMCwy
NSArNjA4LDI1IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OnNpbGVudEZpbGwoY29uc3QgU2kKICAg
ICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Qm9vbGVhblRhZyksIHBsYW4u
Z3ByKCkpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIFNldERvdWJsZUNvbnN0YW50OgotICAg
ICAgICBtX2ppdC5sb2FkRG91YmxlKGFkZHJlc3NPZkRvdWJsZUNvbnN0YW50KHBsYW4ubm9kZUlu
ZGV4KCkpLCBwbGFuLmZwcigpKTsKKyAgICAgICAgbV9qaXQubG9hZERvdWJsZShhZGRyZXNzT2ZE
b3VibGVDb25zdGFudChwbGFuLm5vZGUoKSksIHBsYW4uZnByKCkpOwogICAgICAgICBicmVhazsK
ICNlbmRpZgogICAgIGNhc2UgTG9hZDMyVGFnOgotICAgICAgICBtX2ppdC5sb2FkMzIoSklUQ29t
cGlsZXI6OnRhZ0ZvcihhdChwbGFuLm5vZGVJbmRleCgpKS52aXJ0dWFsUmVnaXN0ZXIoKSksIHBs
YW4uZ3ByKCkpOworICAgICAgICBtX2ppdC5sb2FkMzIoSklUQ29tcGlsZXI6OnRhZ0ZvcihwbGFu
Lm5vZGUoKS0+dmlydHVhbFJlZ2lzdGVyKCkpLCBwbGFuLmdwcigpKTsKICAgICAgICAgYnJlYWs7
CiAgICAgY2FzZSBMb2FkMzJQYXlsb2FkOgotICAgICAgICBtX2ppdC5sb2FkMzIoSklUQ29tcGls
ZXI6OnBheWxvYWRGb3IoYXQocGxhbi5ub2RlSW5kZXgoKSkudmlydHVhbFJlZ2lzdGVyKCkpLCBw
bGFuLmdwcigpKTsKKyAgICAgICAgbV9qaXQubG9hZDMyKEpJVENvbXBpbGVyOjpwYXlsb2FkRm9y
KHBsYW4ubm9kZSgpLT52aXJ0dWFsUmVnaXN0ZXIoKSksIHBsYW4uZ3ByKCkpOwogICAgICAgICBi
cmVhazsKICAgICBjYXNlIExvYWRQdHI6Ci0gICAgICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGls
ZXI6OmFkZHJlc3NGb3IoYXQocGxhbi5ub2RlSW5kZXgoKSkudmlydHVhbFJlZ2lzdGVyKCkpLCBw
bGFuLmdwcigpKTsKKyAgICAgICAgbV9qaXQubG9hZFB0cihKSVRDb21waWxlcjo6YWRkcmVzc0Zv
cihwbGFuLm5vZGUoKS0+dmlydHVhbFJlZ2lzdGVyKCkpLCBwbGFuLmdwcigpKTsKICAgICAgICAg
YnJlYWs7CiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICBjYXNlIExvYWQ2NDoKLSAgICAgICAgbV9q
aXQubG9hZDY0KEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKGF0KHBsYW4ubm9kZUluZGV4KCkpLnZp
cnR1YWxSZWdpc3RlcigpKSwgcGxhbi5ncHIoKSk7CisgICAgICAgIG1faml0LmxvYWQ2NChKSVRD
b21waWxlcjo6YWRkcmVzc0ZvcihwbGFuLm5vZGUoKS0+dmlydHVhbFJlZ2lzdGVyKCkpLCBwbGFu
LmdwcigpKTsKICAgICAgICAgYnJlYWs7CiAjZW5kaWYKICAgICBjYXNlIExvYWREb3VibGU6Ci0g
ICAgICAgIG1faml0LmxvYWREb3VibGUoSklUQ29tcGlsZXI6OmFkZHJlc3NGb3IoYXQocGxhbi5u
b2RlSW5kZXgoKSkudmlydHVhbFJlZ2lzdGVyKCkpLCBwbGFuLmZwcigpKTsKKyAgICAgICAgbV9q
aXQubG9hZERvdWJsZShKSVRDb21waWxlcjo6YWRkcmVzc0ZvcihwbGFuLm5vZGUoKS0+dmlydHVh
bFJlZ2lzdGVyKCkpLCBwbGFuLmZwcigpKTsKICAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoK
ICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTc1MSwyNCArNzQ5LDI0
IEBAIEpJVENvbXBpbGVyOjpKdW1wTGlzdCBTcGVjdWxhdGl2ZUpJVDo6anUKICAgICByZXR1cm4g
cmVzdWx0OwogfQogCi12b2lkIFNwZWN1bGF0aXZlSklUOjpjaGVja0FycmF5KE5vZGUmIG5vZGUp
Cit2b2lkIFNwZWN1bGF0aXZlSklUOjpjaGVja0FycmF5KE5vZGUqIG5vZGUpCiB7Ci0gICAgQVNT
RVJUKG5vZGUuYXJyYXlNb2RlKCkuaXNTcGVjaWZpYygpKTsKLSAgICBBU1NFUlQoIW5vZGUuYXJy
YXlNb2RlKCkuZG9lc0NvbnZlcnNpb24oKSk7CisgICAgQVNTRVJUKG5vZGUtPmFycmF5TW9kZSgp
LmlzU3BlY2lmaWMoKSk7CisgICAgQVNTRVJUKCFub2RlLT5hcnJheU1vZGUoKS5kb2VzQ29udmVy
c2lvbigpKTsKICAgICAKLSAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUu
Y2hpbGQxKCkpOworICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS0+Y2hp
bGQxKCkpOwogICAgIEdQUlJlZyBiYXNlUmVnID0gYmFzZS5ncHIoKTsKICAgICAKLSAgICBjb25z
dCBUeXBlZEFycmF5RGVzY3JpcHRvciogcmVzdWx0ID0gdHlwZWRBcnJheURlc2NyaXB0b3Iobm9k
ZS5hcnJheU1vZGUoKSk7CisgICAgY29uc3QgVHlwZWRBcnJheURlc2NyaXB0b3IqIHJlc3VsdCA9
IHR5cGVkQXJyYXlEZXNjcmlwdG9yKG5vZGUtPmFycmF5TW9kZSgpKTsKICAgICAKLSAgICBpZiAo
bm9kZS5hcnJheU1vZGUoKS5hbHJlYWR5Q2hlY2tlZChtX2ppdC5ncmFwaCgpLCBub2RlLCBtX3N0
YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSkpKSB7Ci0gICAgICAgIG5vUmVzdWx0KG1fY29tcGls
ZUluZGV4KTsKKyAgICBpZiAobm9kZS0+YXJyYXlNb2RlKCkuYWxyZWFkeUNoZWNrZWQobV9qaXQu
Z3JhcGgoKSwgbm9kZSwgbV9zdGF0ZS5mb3JOb2RlKG5vZGUtPmNoaWxkMSgpKSkpIHsKKyAgICAg
ICAgbm9SZXN1bHQobV9jdXJyZW50Tm9kZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAg
CiAgICAgY29uc3QgQ2xhc3NJbmZvKiBleHBlY3RlZENsYXNzSW5mbyA9IDA7CiAgICAgCi0gICAg
c3dpdGNoIChub2RlLmFycmF5TW9kZSgpLnR5cGUoKSkgeworICAgIHN3aXRjaCAobm9kZS0+YXJy
YXlNb2RlKCkudHlwZSgpKSB7CiAgICAgY2FzZSBBcnJheTo6U3RyaW5nOgogICAgICAgICBleHBl
Y3RlZENsYXNzSW5mbyA9ICZKU1N0cmluZzo6c19pbmZvOwogICAgICAgICBicmVhazsKQEAgLTc4
MywxMCArNzgxLDEwIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNoZWNrQXJyYXkoTm9kZSYgbm8K
ICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIEpTQ2VsbDo6c3Ry
dWN0dXJlT2Zmc2V0KCkpLCB0ZW1wR1BSKTsKICAgICAgICAgbV9qaXQubG9hZDgoTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3ModGVtcEdQUiwgU3RydWN0dXJlOjppbmRleGluZ1R5cGVPZmZzZXQoKSks
IHRlbXBHUFIpOwogICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAotICAgICAgICAgICAgQmFkSW5k
ZXhpbmdUeXBlLCBKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChiYXNlUmVnKSwgTm9Ob2RlLAot
ICAgICAgICAgICAganVtcFNsb3dGb3JVbndhbnRlZEFycmF5TW9kZSh0ZW1wR1BSLCBub2RlLmFy
cmF5TW9kZSgpKSk7CisgICAgICAgICAgICBCYWRJbmRleGluZ1R5cGUsIEpTVmFsdWVTb3VyY2U6
OnVuYm94ZWRDZWxsKGJhc2VSZWcpLCAwLAorICAgICAgICAgICAganVtcFNsb3dGb3JVbndhbnRl
ZEFycmF5TW9kZSh0ZW1wR1BSLCBub2RlLT5hcnJheU1vZGUoKSkpOwogICAgICAgICAKLSAgICAg
ICAgbm9SZXN1bHQobV9jb21waWxlSW5kZXgpOworICAgICAgICBub1Jlc3VsdChtX2N1cnJlbnRO
b2RlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBjYXNlIEFycmF5OjpBcmd1bWVudHM6
CkBAIC04MTIsMjUgKzgxMCwyNSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjaGVja0FycmF5KE5v
ZGUmIG5vCiAgICAgbV9qaXQubG9hZFB0cigKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3MoYmFzZVJlZywgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIHRlbXAuZ3ByKCkpOwogICAg
IHNwZWN1bGF0aW9uQ2hlY2soCi0gICAgICAgIFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBO
b05vZGUsCisgICAgICAgIFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCAwLAogICAgICAgICBt
X2ppdC5icmFuY2hQdHIoCiAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsCiAg
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyh0ZW1wLmdwcigpLCBTdHJ1Y3R1cmU6
OmNsYXNzSW5mb09mZnNldCgpKSwKICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVk
SW1tUHRyKGV4cGVjdGVkQ2xhc3NJbmZvKSkpOwogICAgIAotICAgIG5vUmVzdWx0KG1fY29tcGls
ZUluZGV4KTsKKyAgICBub1Jlc3VsdChtX2N1cnJlbnROb2RlKTsKIH0KIAotdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6YXJyYXlpZnkoTm9kZSYgbm9kZSwgR1BSUmVnIGJhc2VSZWcsIEdQUlJlZyBwcm9w
ZXJ0eVJlZykKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmFycmF5aWZ5KE5vZGUqIG5vZGUsIEdQUlJl
ZyBiYXNlUmVnLCBHUFJSZWcgcHJvcGVydHlSZWcpCiB7Ci0gICAgQVNTRVJUKG5vZGUuYXJyYXlN
b2RlKCkuZG9lc0NvbnZlcnNpb24oKSk7CisgICAgQVNTRVJUKG5vZGUtPmFycmF5TW9kZSgpLmRv
ZXNDb252ZXJzaW9uKCkpOwogICAgIAogICAgIEdQUlRlbXBvcmFyeSB0ZW1wKHRoaXMpOwogICAg
IEdQUlRlbXBvcmFyeSBzdHJ1Y3R1cmU7CiAgICAgR1BSUmVnIHRlbXBHUFIgPSB0ZW1wLmdwcigp
OwogICAgIEdQUlJlZyBzdHJ1Y3R1cmVHUFIgPSBJbnZhbGlkR1BSUmVnOwogICAgIAotICAgIGlm
IChub2RlLm9wKCkgIT0gQXJyYXlpZnlUb1N0cnVjdHVyZSkgeworICAgIGlmIChub2RlLT5vcCgp
ICE9IEFycmF5aWZ5VG9TdHJ1Y3R1cmUpIHsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlYWxTdHJ1
Y3R1cmUodGhpcyk7CiAgICAgICAgIHN0cnVjdHVyZS5hZG9wdChyZWFsU3RydWN0dXJlKTsKICAg
ICAgICAgc3RydWN0dXJlR1BSID0gc3RydWN0dXJlLmdwcigpOwpAQCAtODM5LDExICs4MzcsMTEg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6YXJyYXlpZnkoTm9kZSYgbm9kZQogICAgIC8vIFdlIGNh
biBza2lwIGFsbCB0aGF0IGNvbWVzIG5leHQgaWYgd2UgYWxyZWFkeSBoYXZlIGFycmF5IHN0b3Jh
Z2UuCiAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IHNsb3dQYXRoOwogICAgIAotICAgIGlm
IChub2RlLm9wKCkgPT0gQXJyYXlpZnlUb1N0cnVjdHVyZSkgeworICAgIGlmIChub2RlLT5vcCgp
ID09IEFycmF5aWZ5VG9TdHJ1Y3R1cmUpIHsKICAgICAgICAgc2xvd1BhdGguYXBwZW5kKG1faml0
LmJyYW5jaFdlYWtQdHIoCiAgICAgICAgICAgICBKSVRDb21waWxlcjo6Tm90RXF1YWwsCiAgICAg
ICAgICAgICBKSVRDb21waWxlcjo6QWRkcmVzcyhiYXNlUmVnLCBKU0NlbGw6OnN0cnVjdHVyZU9m
ZnNldCgpKSwKLSAgICAgICAgICAgIG5vZGUuc3RydWN0dXJlKCkpKTsKKyAgICAgICAgICAgIG5v
ZGUtPnN0cnVjdHVyZSgpKSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgbV9qaXQubG9hZFB0cigK
ICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIEpTQ2VsbDo6c3Ry
dWN0dXJlT2Zmc2V0KCkpLCBzdHJ1Y3R1cmVHUFIpOwpAQCAtODUxLDM1ICs4NDksMzQgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6YXJyYXlpZnkoTm9kZSYgbm9kZQogICAgICAgICBtX2ppdC5sb2Fk
OCgKICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0cnVjdHVyZUdQUiwgU3Ry
dWN0dXJlOjppbmRleGluZ1R5cGVPZmZzZXQoKSksIHRlbXBHUFIpOwogICAgICAgICAKLSAgICAg
ICAgc2xvd1BhdGguYXBwZW5kKGp1bXBTbG93Rm9yVW53YW50ZWRBcnJheU1vZGUodGVtcEdQUiwg
bm9kZS5hcnJheU1vZGUoKSkpOworICAgICAgICBzbG93UGF0aC5hcHBlbmQoanVtcFNsb3dGb3JV
bndhbnRlZEFycmF5TW9kZSh0ZW1wR1BSLCBub2RlLT5hcnJheU1vZGUoKSkpOwogICAgIH0KICAg
ICAKICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcihhZG9wdFB0cihuZXcgQXJyYXlpZnlTbG93UGF0
aEdlbmVyYXRvcigKICAgICAgICAgc2xvd1BhdGgsIHRoaXMsIG5vZGUsIGJhc2VSZWcsIHByb3Bl
cnR5UmVnLCB0ZW1wR1BSLCBzdHJ1Y3R1cmVHUFIpKSk7CiAgICAgCi0gICAgbm9SZXN1bHQobV9j
b21waWxlSW5kZXgpOworICAgIG5vUmVzdWx0KG1fY3VycmVudE5vZGUpOwogfQogCiB2b2lkIFNw
ZWN1bGF0aXZlSklUOjphcnJheWlmeShOb2RlJiBub2RlKQogewotICAgIEFTU0VSVChub2RlLmFy
cmF5TW9kZSgpLmlzU3BlY2lmaWMoKSk7CisgICAgQVNTRVJUKG5vZGUtPmFycmF5TW9kZSgpLmlz
U3BlY2lmaWMoKSk7CiAgICAgCi0gICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBu
b2RlLmNoaWxkMSgpKTsKKyAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUt
PmNoaWxkMSgpKTsKICAgICAKLSAgICBpZiAoIW5vZGUuY2hpbGQyKCkpIHsKKyAgICBpZiAoIW5v
ZGUtPmNoaWxkMigpKSB7CiAgICAgICAgIGFycmF5aWZ5KG5vZGUsIGJhc2UuZ3ByKCksIEludmFs
aWRHUFJSZWcpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAotICAgIFNwZWN1bGF0ZUlu
dGVnZXJPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG5vZGUuY2hpbGQyKCkpOworICAgIFNwZWN1bGF0
ZUludGVnZXJPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG5vZGUtPmNoaWxkMigpKTsKICAgICAKICAg
ICBhcnJheWlmeShub2RlLCBiYXNlLmdwcigpLCBwcm9wZXJ0eS5ncHIoKSk7CiB9CiAKLUdQUlJl
ZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFN0b3JhZ2UoTm9kZUluZGV4IG5vZGVJbmRleCkKK0dQUlJl
ZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFN0b3JhZ2UoTm9kZSogbm9kZSkKIHsKLSAgICBOb2RlJiBu
b2RlID0gbV9qaXQuZ3JhcGgoKVtub2RlSW5kZXhdOwotICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0
dWFsUmVnaXN0ZXIgPSBub2RlLnZpcnR1YWxSZWdpc3RlcigpOworICAgIFZpcnR1YWxSZWdpc3Rl
ciB2aXJ0dWFsUmVnaXN0ZXIgPSBub2RlLT52aXJ0dWFsUmVnaXN0ZXIoKTsKICAgICBHZW5lcmF0
aW9uSW5mbyYgaW5mbyA9IG1fZ2VuZXJhdGlvbkluZm9bdmlydHVhbFJlZ2lzdGVyXTsKICAgICAK
ICAgICBzd2l0Y2ggKGluZm8ucmVnaXN0ZXJGb3JtYXQoKSkgewpAQCAtODkzLDcgKzg5MCw3IEBA
IEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFN0b3JhZ2UoTm9kZUkKICAgICAgICAgfQogICAg
ICAgICAKICAgICAgICAgLy8gTXVzdCBiZSBhIGNlbGw7IGZpbGwgaXQgYXMgYSBjZWxsIGFuZCB0
aGVuIHJldHVybiB0aGUgcG9pbnRlci4KLSAgICAgICAgcmV0dXJuIGZpbGxTcGVjdWxhdGVDZWxs
KG5vZGVJbmRleCwgQmFja3dhcmRTcGVjdWxhdGlvbik7CisgICAgICAgIHJldHVybiBmaWxsU3Bl
Y3VsYXRlQ2VsbChub2RlLCBCYWNrd2FyZFNwZWN1bGF0aW9uKTsKICAgICB9CiAgICAgICAgIAog
ICAgIGNhc2UgRGF0YUZvcm1hdFN0b3JhZ2U6IHsKQEAgLTkwMywxMTMgKzkwMCwxMDUgQEAgR1BS
UmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3RvcmFnZShOb2RlSQogICAgIH0KICAgICAgICAgCiAg
ICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIGZpbGxTcGVjdWxhdGVDZWxsKG5vZGVJbmRleCwg
QmFja3dhcmRTcGVjdWxhdGlvbik7CisgICAgICAgIHJldHVybiBmaWxsU3BlY3VsYXRlQ2VsbChu
b2RlLCBCYWNrd2FyZFNwZWN1bGF0aW9uKTsKICAgICB9CiB9CiAKLXZvaWQgU3BlY3VsYXRpdmVK
SVQ6OnVzZUNoaWxkcmVuKE5vZGUmIG5vZGUpCit2b2lkIFNwZWN1bGF0aXZlSklUOjp1c2VDaGls
ZHJlbihOb2RlKiBub2RlKQogewotICAgIGlmIChub2RlLmZsYWdzKCkgJiBOb2RlSGFzVmFyQXJn
cykgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGNoaWxkSWR4ID0gbm9kZS5maXJzdENoaWxkKCk7
IGNoaWxkSWR4IDwgbm9kZS5maXJzdENoaWxkKCkgKyBub2RlLm51bUNoaWxkcmVuKCk7IGNoaWxk
SWR4KyspIHsKKyAgICBpZiAobm9kZS0+ZmxhZ3MoKSAmIE5vZGVIYXNWYXJBcmdzKSB7CisgICAg
ICAgIGZvciAodW5zaWduZWQgY2hpbGRJZHggPSBub2RlLT5maXJzdENoaWxkKCk7IGNoaWxkSWR4
IDwgbm9kZS0+Zmlyc3RDaGlsZCgpICsgbm9kZS0+bnVtQ2hpbGRyZW4oKTsgY2hpbGRJZHgrKykg
ewogICAgICAgICAgICAgaWYgKCEhbV9qaXQuZ3JhcGgoKS5tX3ZhckFyZ0NoaWxkcmVuW2NoaWxk
SWR4XSkKICAgICAgICAgICAgICAgICB1c2UobV9qaXQuZ3JhcGgoKS5tX3ZhckFyZ0NoaWxkcmVu
W2NoaWxkSWR4XSk7CiAgICAgICAgIH0KICAgICB9IGVsc2UgewotICAgICAgICBFZGdlIGNoaWxk
MSA9IG5vZGUuY2hpbGQxKCk7CisgICAgICAgIEVkZ2UgY2hpbGQxID0gbm9kZS0+Y2hpbGQxKCk7
CiAgICAgICAgIGlmICghY2hpbGQxKSB7Ci0gICAgICAgICAgICBBU1NFUlQoIW5vZGUuY2hpbGQy
KCkgJiYgIW5vZGUuY2hpbGQzKCkpOworICAgICAgICAgICAgQVNTRVJUKCFub2RlLT5jaGlsZDIo
KSAmJiAhbm9kZS0+Y2hpbGQzKCkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAg
ICAgICAgIHVzZShjaGlsZDEpOwogICAgICAgICAKLSAgICAgICAgRWRnZSBjaGlsZDIgPSBub2Rl
LmNoaWxkMigpOworICAgICAgICBFZGdlIGNoaWxkMiA9IG5vZGUtPmNoaWxkMigpOwogICAgICAg
ICBpZiAoIWNoaWxkMikgewotICAgICAgICAgICAgQVNTRVJUKCFub2RlLmNoaWxkMygpKTsKKyAg
ICAgICAgICAgIEFTU0VSVCghbm9kZS0+Y2hpbGQzKCkpOwogICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICB9CiAgICAgICAgIHVzZShjaGlsZDIpOwogICAgICAgICAKLSAgICAgICAgRWRnZSBj
aGlsZDMgPSBub2RlLmNoaWxkMygpOworICAgICAgICBFZGdlIGNoaWxkMyA9IG5vZGUtPmNoaWxk
MygpOwogICAgICAgICBpZiAoIWNoaWxkMykKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
dXNlKGNoaWxkMyk7CiAgICAgfQogfQogCi1ib29sIFNwZWN1bGF0aXZlSklUOjppc1N0cmljdElu
dDMyKE5vZGVJbmRleCBub2RlSW5kZXgpCitib29sIFNwZWN1bGF0aXZlSklUOjppc1N0cmljdElu
dDMyKE5vZGUqIG5vZGUpCiB7Ci0gICAgaWYgKGlzSW50MzJDb25zdGFudChub2RlSW5kZXgpKQor
ICAgIGlmIChpc0ludDMyQ29uc3RhbnQobm9kZSkpCiAgICAgICAgIHJldHVybiB0cnVlOwogICAg
IAotICAgIE5vZGUmIG5vZGUgPSBtX2ppdC5ncmFwaCgpW25vZGVJbmRleF07Ci0gICAgR2VuZXJh
dGlvbkluZm8mIGluZm8gPSBtX2dlbmVyYXRpb25JbmZvW25vZGUudmlydHVhbFJlZ2lzdGVyKCld
OworICAgIEdlbmVyYXRpb25JbmZvJiBpbmZvID0gbV9nZW5lcmF0aW9uSW5mb1tub2RlLT52aXJ0
dWFsUmVnaXN0ZXIoKV07CiAgICAgCiAgICAgcmV0dXJuIGluZm8ucmVnaXN0ZXJGb3JtYXQoKSA9
PSBEYXRhRm9ybWF0SW50ZWdlcjsKIH0KIAotYm9vbCBTcGVjdWxhdGl2ZUpJVDo6aXNLbm93bklu
dGVnZXIoTm9kZUluZGV4IG5vZGVJbmRleCkKK2Jvb2wgU3BlY3VsYXRpdmVKSVQ6OmlzS25vd25J
bnRlZ2VyKE5vZGUqIG5vZGUpCiB7Ci0gICAgaWYgKGlzSW50MzJDb25zdGFudChub2RlSW5kZXgp
KQorICAgIGlmIChpc0ludDMyQ29uc3RhbnQobm9kZSkpCiAgICAgICAgIHJldHVybiB0cnVlOwog
Ci0gICAgTm9kZSYgbm9kZSA9IG1faml0LmdyYXBoKClbbm9kZUluZGV4XTsKLSAgICAKLSAgICBp
ZiAobm9kZS5oYXNJbnQzMlJlc3VsdCgpKQorICAgIGlmIChub2RlLT5oYXNJbnQzMlJlc3VsdCgp
KQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAKLSAgICBHZW5lcmF0aW9uSW5mbyYgaW5mbyA9
IG1fZ2VuZXJhdGlvbkluZm9bbm9kZS52aXJ0dWFsUmVnaXN0ZXIoKV07CisgICAgR2VuZXJhdGlv
bkluZm8mIGluZm8gPSBtX2dlbmVyYXRpb25JbmZvW25vZGUtPnZpcnR1YWxSZWdpc3RlcigpXTsK
IAogICAgIHJldHVybiBpbmZvLmlzSlNJbnRlZ2VyKCk7CiB9CiAKLWJvb2wgU3BlY3VsYXRpdmVK
SVQ6OmlzS25vd25OdW1lcmljKE5vZGVJbmRleCBub2RlSW5kZXgpCitib29sIFNwZWN1bGF0aXZl
SklUOjppc0tub3duTnVtZXJpYyhOb2RlKiBub2RlKQogewotICAgIGlmIChpc0ludDMyQ29uc3Rh
bnQobm9kZUluZGV4KSB8fCBpc051bWJlckNvbnN0YW50KG5vZGVJbmRleCkpCisgICAgaWYgKGlz
SW50MzJDb25zdGFudChub2RlKSB8fCBpc051bWJlckNvbnN0YW50KG5vZGUpKQogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKIAotICAgIE5vZGUmIG5vZGUgPSBtX2ppdC5ncmFwaCgpW25vZGVJbmRleF07
Ci0gICAgCi0gICAgaWYgKG5vZGUuaGFzTnVtYmVyUmVzdWx0KCkpCisgICAgaWYgKG5vZGUtPmhh
c051bWJlclJlc3VsdCgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAKLSAgICBHZW5lcmF0
aW9uSW5mbyYgaW5mbyA9IG1fZ2VuZXJhdGlvbkluZm9bbm9kZS52aXJ0dWFsUmVnaXN0ZXIoKV07
CisgICAgR2VuZXJhdGlvbkluZm8mIGluZm8gPSBtX2dlbmVyYXRpb25JbmZvW25vZGUtPnZpcnR1
YWxSZWdpc3RlcigpXTsKIAogICAgIHJldHVybiBpbmZvLmlzSlNJbnRlZ2VyKCkgfHwgaW5mby5p
c0pTRG91YmxlKCk7CiB9CiAKLWJvb2wgU3BlY3VsYXRpdmVKSVQ6OmlzS25vd25DZWxsKE5vZGVJ
bmRleCBub2RlSW5kZXgpCitib29sIFNwZWN1bGF0aXZlSklUOjppc0tub3duQ2VsbChOb2RlKiBu
b2RlKQogewotICAgIHJldHVybiBtX2dlbmVyYXRpb25JbmZvW21faml0LmdyYXBoKClbbm9kZUlu
ZGV4XS52aXJ0dWFsUmVnaXN0ZXIoKV0uaXNKU0NlbGwoKTsKKyAgICByZXR1cm4gbV9nZW5lcmF0
aW9uSW5mb1tub2RlLT52aXJ0dWFsUmVnaXN0ZXIoKV0uaXNKU0NlbGwoKTsKIH0KIAotYm9vbCBT
cGVjdWxhdGl2ZUpJVDo6aXNLbm93bk5vdENlbGwoTm9kZUluZGV4IG5vZGVJbmRleCkKK2Jvb2wg
U3BlY3VsYXRpdmVKSVQ6OmlzS25vd25Ob3RDZWxsKE5vZGUqIG5vZGUpCiB7Ci0gICAgTm9kZSYg
bm9kZSA9IG1faml0LmdyYXBoKClbbm9kZUluZGV4XTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgdmly
dHVhbFJlZ2lzdGVyID0gbm9kZS52aXJ0dWFsUmVnaXN0ZXIoKTsKKyAgICBWaXJ0dWFsUmVnaXN0
ZXIgdmlydHVhbFJlZ2lzdGVyID0gbm9kZS0+dmlydHVhbFJlZ2lzdGVyKCk7CiAgICAgR2VuZXJh
dGlvbkluZm8mIGluZm8gPSBtX2dlbmVyYXRpb25JbmZvW3ZpcnR1YWxSZWdpc3Rlcl07Ci0gICAg
aWYgKG5vZGUuaGFzQ29uc3RhbnQoKSAmJiAhdmFsdWVPZkpTQ29uc3RhbnQobm9kZUluZGV4KS5p
c0NlbGwoKSkKKyAgICBpZiAobm9kZS0+aGFzQ29uc3RhbnQoKSAmJiAhdmFsdWVPZkpTQ29uc3Rh
bnQobm9kZSkuaXNDZWxsKCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIHJldHVybiAhKGlu
Zm8uaXNKU0NlbGwoKSB8fCBpbmZvLmlzVW5rbm93bkpTKCkpOwogfQogCi1ib29sIFNwZWN1bGF0
aXZlSklUOjppc0tub3duTm90SW50ZWdlcihOb2RlSW5kZXggbm9kZUluZGV4KQorYm9vbCBTcGVj
dWxhdGl2ZUpJVDo6aXNLbm93bk5vdEludGVnZXIoTm9kZSogbm9kZSkKIHsKLSAgICBOb2RlJiBu
b2RlID0gbV9qaXQuZ3JhcGgoKVtub2RlSW5kZXhdOwotICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0
dWFsUmVnaXN0ZXIgPSBub2RlLnZpcnR1YWxSZWdpc3RlcigpOworICAgIFZpcnR1YWxSZWdpc3Rl
ciB2aXJ0dWFsUmVnaXN0ZXIgPSBub2RlLT52aXJ0dWFsUmVnaXN0ZXIoKTsKICAgICBHZW5lcmF0
aW9uSW5mbyYgaW5mbyA9IG1fZ2VuZXJhdGlvbkluZm9bdmlydHVhbFJlZ2lzdGVyXTsKICAgICAK
ICAgICByZXR1cm4gaW5mby5pc0pTRG91YmxlKCkgfHwgaW5mby5pc0pTQ2VsbCgpIHx8IGluZm8u
aXNKU0Jvb2xlYW4oKQotICAgICAgICB8fCAobm9kZS5oYXNDb25zdGFudCgpICYmICF2YWx1ZU9m
SlNDb25zdGFudChub2RlSW5kZXgpLmlzSW50MzIoKSk7CisgICAgICAgIHx8IChub2RlLT5oYXND
b25zdGFudCgpICYmICF2YWx1ZU9mSlNDb25zdGFudChub2RlKS5pc0ludDMyKCkpOwogfQogCi1i
b29sIFNwZWN1bGF0aXZlSklUOjppc0tub3duTm90TnVtYmVyKE5vZGVJbmRleCBub2RlSW5kZXgp
Citib29sIFNwZWN1bGF0aXZlSklUOjppc0tub3duTm90TnVtYmVyKE5vZGUqIG5vZGUpCiB7Ci0g
ICAgTm9kZSYgbm9kZSA9IG1faml0LmdyYXBoKClbbm9kZUluZGV4XTsKLSAgICBWaXJ0dWFsUmVn
aXN0ZXIgdmlydHVhbFJlZ2lzdGVyID0gbm9kZS52aXJ0dWFsUmVnaXN0ZXIoKTsKKyAgICBWaXJ0
dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyID0gbm9kZS0+dmlydHVhbFJlZ2lzdGVyKCk7CiAg
ICAgR2VuZXJhdGlvbkluZm8mIGluZm8gPSBtX2dlbmVyYXRpb25JbmZvW3ZpcnR1YWxSZWdpc3Rl
cl07CiAgICAgCiAgICAgcmV0dXJuICghaW5mby5pc0pTRG91YmxlKCkgJiYgIWluZm8uaXNKU0lu
dGVnZXIoKSAmJiAhaW5mby5pc1Vua25vd25KUygpKQotICAgICAgICB8fCAobm9kZS5oYXNDb25z
dGFudCgpICYmICFpc051bWJlckNvbnN0YW50KG5vZGVJbmRleCkpOworICAgICAgICB8fCAobm9k
ZS0+aGFzQ29uc3RhbnQoKSAmJiAhaXNOdW1iZXJDb25zdGFudChub2RlKSk7CiB9CiAKIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OndyaXRlQmFycmllcihNYWNyb0Fzc2VtYmxlciYgaml0LCBHUFJSZWcg
b3duZXIsIEdQUlJlZyBzY3JhdGNoMSwgR1BSUmVnIHNjcmF0Y2gyLCBXcml0ZUJhcnJpZXJVc2VL
aW5kIHVzZUtpbmQpCkBAIC0xMDYwLDcgKzEwNDksNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjp3
cml0ZUJhcnJpZXIoR1BSUmVnCiAgICAgVU5VU0VEX1BBUkFNKHNjcmF0Y2gyKTsKICAgICBVTlVT
RURfUEFSQU0odXNlS2luZCk7CiAKLSAgICBpZiAoaXNLbm93bk5vdENlbGwodmFsdWVVc2UuaW5k
ZXgoKSkpCisgICAgaWYgKGlzS25vd25Ob3RDZWxsKHZhbHVlVXNlLm5vZGUoKSkpCiAgICAgICAg
IHJldHVybjsKIAogI2lmIEVOQUJMRShXUklURV9CQVJSSUVSX1BST0ZJTElORykKQEAgLTEwODMs
NyArMTA3Miw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OndyaXRlQmFycmllcihHUFJSZWcKICAg
ICAKICAgICBKSVRDb21waWxlcjo6SnVtcCByaHNOb3RDZWxsOwogICAgIGJvb2wgaGFkQ2VsbENo
ZWNrID0gZmFsc2U7Ci0gICAgaWYgKCFpc0tub3duQ2VsbCh2YWx1ZVVzZS5pbmRleCgpKSAmJiAh
aXNDZWxsU3BlY3VsYXRpb24obV9qaXQuZ2V0U3BlY3VsYXRpb24odmFsdWVVc2UuaW5kZXgoKSkp
KSB7CisgICAgaWYgKCFpc0tub3duQ2VsbCh2YWx1ZVVzZS5ub2RlKCkpICYmICFpc0NlbGxTcGVj
dWxhdGlvbihtX2ppdC5nZXRTcGVjdWxhdGlvbih2YWx1ZVVzZS5ub2RlKCkpKSkgewogICAgICAg
ICBoYWRDZWxsQ2hlY2sgPSB0cnVlOwogICAgICAgICByaHNOb3RDZWxsID0gbV9qaXQuYnJhbmNo
SWZOb3RDZWxsKHZhbHVlR1BSKTsKICAgICB9CkBAIC0xMTM1LDcgKzExMjQsNyBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjp3cml0ZUJhcnJpZXIoSlNDZWxsCiAgICAgVU5VU0VEX1BBUkFNKHNjcmF0
Y2gpOwogICAgIFVOVVNFRF9QQVJBTSh1c2VLaW5kKTsKIAotICAgIGlmIChpc0tub3duTm90Q2Vs
bCh2YWx1ZVVzZS5pbmRleCgpKSkKKyAgICBpZiAoaXNLbm93bk5vdENlbGwodmFsdWVVc2Uubm9k
ZSgpKSkKICAgICAgICAgcmV0dXJuOwogCiAjaWYgRU5BQkxFKFdSSVRFX0JBUlJJRVJfUFJPRklM
SU5HKQpAQCAtMTE0NSw3ICsxMTM0LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6d3JpdGVCYXJy
aWVyKEpTQ2VsbAogI2lmIEVOQUJMRShHR0MpCiAgICAgSklUQ29tcGlsZXI6Okp1bXAgcmhzTm90
Q2VsbDsKICAgICBib29sIGhhZENlbGxDaGVjayA9IGZhbHNlOwotICAgIGlmICghaXNLbm93bkNl
bGwodmFsdWVVc2UuaW5kZXgoKSkgJiYgIWlzQ2VsbFNwZWN1bGF0aW9uKG1faml0LmdldFNwZWN1
bGF0aW9uKHZhbHVlVXNlLmluZGV4KCkpKSkgeworICAgIGlmICghaXNLbm93bkNlbGwodmFsdWVV
c2Uubm9kZSgpKSAmJiAhaXNDZWxsU3BlY3VsYXRpb24obV9qaXQuZ2V0U3BlY3VsYXRpb24odmFs
dWVVc2Uubm9kZSgpKSkpIHsKICAgICAgICAgaGFkQ2VsbENoZWNrID0gdHJ1ZTsKICAgICAgICAg
cmhzTm90Q2VsbCA9IG1faml0LmJyYW5jaElmTm90Q2VsbCh2YWx1ZUdQUik7CiAgICAgfQpAQCAt
MTE2NiwxOCArMTE1NSwxOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjp3cml0ZUJhcnJpZXIoSlND
ZWxsCiAjZW5kaWYKIH0KIAotYm9vbCBTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVDb21w
YXJlKE5vZGUmIG5vZGUsIE1hY3JvQXNzZW1ibGVyOjpSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmQs
IFNfREZHT3BlcmF0aW9uX0VKSiBoZWxwZXJGdW5jdGlvbikKK2Jvb2wgU3BlY3VsYXRpdmVKSVQ6
Om5vblNwZWN1bGF0aXZlQ29tcGFyZShOb2RlKiBub2RlLCBNYWNyb0Fzc2VtYmxlcjo6UmVsYXRp
b25hbENvbmRpdGlvbiBjb25kLCBTX0RGR09wZXJhdGlvbl9FSkogaGVscGVyRnVuY3Rpb24pCiB7
CiAgICAgdW5zaWduZWQgYnJhbmNoSW5kZXhJbkJsb2NrID0gZGV0ZWN0UGVlcEhvbGVCcmFuY2go
KTsKICAgICBpZiAoYnJhbmNoSW5kZXhJbkJsb2NrICE9IFVJTlRfTUFYKSB7Ci0gICAgICAgIE5v
ZGVJbmRleCBicmFuY2hOb2RlSW5kZXggPSBtX2ppdC5ncmFwaCgpLm1fYmxvY2tzW21fYmxvY2td
LT5hdChicmFuY2hJbmRleEluQmxvY2spOworICAgICAgICBOb2RlKiBicmFuY2hOb2RlID0gbV9q
aXQuZ3JhcGgoKS5tX2Jsb2Nrc1ttX2Jsb2NrXS0+YXQoYnJhbmNoSW5kZXhJbkJsb2NrKTsKIAot
ICAgICAgICBBU1NFUlQobm9kZS5hZGp1c3RlZFJlZkNvdW50KCkgPT0gMSk7CisgICAgICAgIEFT
U0VSVChub2RlLT5hZGp1c3RlZFJlZkNvdW50KCkgPT0gMSk7CiAgICAgICAgIAotICAgICAgICBu
b25TcGVjdWxhdGl2ZVBlZXBob2xlQnJhbmNoKG5vZGUsIGJyYW5jaE5vZGVJbmRleCwgY29uZCwg
aGVscGVyRnVuY3Rpb24pOworICAgICAgICBub25TcGVjdWxhdGl2ZVBlZXBob2xlQnJhbmNoKG5v
ZGUsIGJyYW5jaE5vZGUsIGNvbmQsIGhlbHBlckZ1bmN0aW9uKTsKICAgICAKICAgICAgICAgbV9p
bmRleEluQmxvY2sgPSBicmFuY2hJbmRleEluQmxvY2s7Ci0gICAgICAgIG1fY29tcGlsZUluZGV4
ID0gYnJhbmNoTm9kZUluZGV4OworICAgICAgICBtX2N1cnJlbnROb2RlID0gYnJhbmNoTm9kZTsK
ICAgICAgICAgCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KQEAgLTExODcsMTggKzExNzYs
MTggQEAgYm9vbCBTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVDb21wYQogICAgIHJldHVy
biBmYWxzZTsKIH0KIAotYm9vbCBTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVTdHJpY3RF
cShOb2RlJiBub2RlLCBib29sIGludmVydCkKK2Jvb2wgU3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1
bGF0aXZlU3RyaWN0RXEoTm9kZSogbm9kZSwgYm9vbCBpbnZlcnQpCiB7CiAgICAgdW5zaWduZWQg
YnJhbmNoSW5kZXhJbkJsb2NrID0gZGV0ZWN0UGVlcEhvbGVCcmFuY2goKTsKICAgICBpZiAoYnJh
bmNoSW5kZXhJbkJsb2NrICE9IFVJTlRfTUFYKSB7Ci0gICAgICAgIE5vZGVJbmRleCBicmFuY2hO
b2RlSW5kZXggPSBtX2ppdC5ncmFwaCgpLm1fYmxvY2tzW21fYmxvY2tdLT5hdChicmFuY2hJbmRl
eEluQmxvY2spOworICAgICAgICBOb2RlSW5kZXggYnJhbmNoTm9kZSA9IG1faml0LmdyYXBoKCku
bV9ibG9ja3NbbV9ibG9ja10tPmF0KGJyYW5jaEluZGV4SW5CbG9jayk7CiAKLSAgICAgICAgQVNT
RVJUKG5vZGUuYWRqdXN0ZWRSZWZDb3VudCgpID09IDEpOworICAgICAgICBBU1NFUlQobm9kZS0+
YWRqdXN0ZWRSZWZDb3VudCgpID09IDEpOwogICAgICAgICAKLSAgICAgICAgbm9uU3BlY3VsYXRp
dmVQZWVwaG9sZVN0cmljdEVxKG5vZGUsIGJyYW5jaE5vZGVJbmRleCwgaW52ZXJ0KTsKKyAgICAg
ICAgbm9uU3BlY3VsYXRpdmVQZWVwaG9sZVN0cmljdEVxKG5vZGUsIGJyYW5jaE5vZGUsIGludmVy
dCk7CiAgICAgCiAgICAgICAgIG1faW5kZXhJbkJsb2NrID0gYnJhbmNoSW5kZXhJbkJsb2NrOwot
ICAgICAgICBtX2NvbXBpbGVJbmRleCA9IGJyYW5jaE5vZGVJbmRleDsKKyAgICAgICAgbV9jdXJy
ZW50Tm9kZSA9IGJyYW5jaE5vZGU7CiAgICAgICAgIAogICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICB9CkBAIC0xNTcxLDI0ICsxNTYwLDIyIEBAIEZQUlRlbXBvcmFyeTo6RlBSVGVtcG9yYXJ5KFNw
ZWN1bGF0aXZlSkkKIH0KICNlbmRpZgogCi12b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUGVl
cEhvbGVEb3VibGVCcmFuY2goTm9kZSYgbm9kZSwgTm9kZUluZGV4IGJyYW5jaE5vZGVJbmRleCwg
SklUQ29tcGlsZXI6OkRvdWJsZUNvbmRpdGlvbiBjb25kaXRpb24pCit2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlUGVlcEhvbGVEb3VibGVCcmFuY2goTm9kZSogbm9kZSwgTm9kZSogYnJhbmNo
Tm9kZSwgSklUQ29tcGlsZXI6OkRvdWJsZUNvbmRpdGlvbiBjb25kaXRpb24pCiB7Ci0gICAgTm9k
ZSYgYnJhbmNoTm9kZSA9IGF0KGJyYW5jaE5vZGVJbmRleCk7Ci0gICAgQmxvY2tJbmRleCB0YWtl
biA9IGJyYW5jaE5vZGUudGFrZW5CbG9ja0luZGV4KCk7Ci0gICAgQmxvY2tJbmRleCBub3RUYWtl
biA9IGJyYW5jaE5vZGUubm90VGFrZW5CbG9ja0luZGV4KCk7CisgICAgQmxvY2tJbmRleCB0YWtl
biA9IGJyYW5jaE5vZGUtPnRha2VuQmxvY2tJbmRleCgpOworICAgIEJsb2NrSW5kZXggbm90VGFr
ZW4gPSBicmFuY2hOb2RlLT5ub3RUYWtlbkJsb2NrSW5kZXgoKTsKICAgICAKLSAgICBTcGVjdWxh
dGVEb3VibGVPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKLSAgICBTcGVjdWxhdGVE
b3VibGVPcGVyYW5kIG9wMih0aGlzLCBub2RlLmNoaWxkMigpKTsKKyAgICBTcGVjdWxhdGVEb3Vi
bGVPcGVyYW5kIG9wMSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CisgICAgU3BlY3VsYXRlRG91Ymxl
T3BlcmFuZCBvcDIodGhpcywgbm9kZS0+Y2hpbGQyKCkpOwogICAgIAogICAgIGJyYW5jaERvdWJs
ZShjb25kaXRpb24sIG9wMS5mcHIoKSwgb3AyLmZwcigpLCB0YWtlbik7CiAgICAganVtcChub3RU
YWtlbik7CiB9CiAKLXZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQZWVwSG9sZU9iamVjdEVx
dWFsaXR5KE5vZGUmIG5vZGUsIE5vZGVJbmRleCBicmFuY2hOb2RlSW5kZXgpCit2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlUGVlcEhvbGVPYmplY3RFcXVhbGl0eShOb2RlKiBub2RlLCBOb2Rl
KiBicmFuY2hOb2RlKQogewotICAgIE5vZGUmIGJyYW5jaE5vZGUgPSBhdChicmFuY2hOb2RlSW5k
ZXgpOwotICAgIEJsb2NrSW5kZXggdGFrZW4gPSBicmFuY2hOb2RlLnRha2VuQmxvY2tJbmRleCgp
OwotICAgIEJsb2NrSW5kZXggbm90VGFrZW4gPSBicmFuY2hOb2RlLm5vdFRha2VuQmxvY2tJbmRl
eCgpOworICAgIEJsb2NrSW5kZXggdGFrZW4gPSBicmFuY2hOb2RlLT50YWtlbkJsb2NrSW5kZXgo
KTsKKyAgICBCbG9ja0luZGV4IG5vdFRha2VuID0gYnJhbmNoTm9kZS0+bm90VGFrZW5CbG9ja0lu
ZGV4KCk7CiAKICAgICBNYWNyb0Fzc2VtYmxlcjo6UmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRp
b24gPSBNYWNyb0Fzc2VtYmxlcjo6RXF1YWw7CiAgICAgCkBAIC0xNTk5LDIwICsxNTg2LDIwIEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQZWVwSG9sZU9iamUKICAgICAgICAgbm90VGFr
ZW4gPSB0bXA7CiAgICAgfQogCi0gICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgb3AxKHRoaXMsIG5v
ZGUuY2hpbGQxKCkpOwotICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIG9wMih0aGlzLCBub2RlLmNo
aWxkMigpKTsKKyAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBvcDEodGhpcywgbm9kZS0+Y2hpbGQx
KCkpOworICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIG9wMih0aGlzLCBub2RlLT5jaGlsZDIoKSk7
CiAgICAgCiAgICAgR1BSUmVnIG9wMUdQUiA9IG9wMS5ncHIoKTsKICAgICBHUFJSZWcgb3AyR1BS
ID0gb3AyLmdwcigpOwogICAgIAotICAgIGlmIChtX2ppdC5ncmFwaCgpLmdsb2JhbE9iamVjdEZv
cihub2RlLmNvZGVPcmlnaW4pLT5tYXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2ludCgpLT5p
c1N0aWxsVmFsaWQoKSkgewotICAgICAgICBtX2ppdC5ncmFwaCgpLmdsb2JhbE9iamVjdEZvcihu
b2RlLmNvZGVPcmlnaW4pLT5tYXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2ludCgpLT5hZGQo
c3BlY3VsYXRpb25XYXRjaHBvaW50KCkpOwotICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5
cGUsIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKG9wMUdQUiksIG5vZGUuY2hpbGQxKCkuaW5k
ZXgoKSwgCisgICAgaWYgKG1faml0LmdyYXBoKCkuZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPmNvZGVP
cmlnaW4pLT5tYXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2ludCgpLT5pc1N0aWxsVmFsaWQo
KSkgeworICAgICAgICBtX2ppdC5ncmFwaCgpLmdsb2JhbE9iamVjdEZvcihub2RlLT5jb2RlT3Jp
Z2luKS0+bWFzcXVlcmFkZXNBc1VuZGVmaW5lZFdhdGNocG9pbnQoKS0+YWRkKHNwZWN1bGF0aW9u
V2F0Y2hwb2ludCgpKTsKKyAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVl
U291cmNlOjp1bmJveGVkQ2VsbChvcDFHUFIpLCBub2RlLT5jaGlsZDEoKSwgCiAgICAgICAgICAg
ICBtX2ppdC5icmFuY2hQdHIoCiAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkVxdWFs
LCAKICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhvcDFHUFIsIEpTQ2Vs
bDo6c3RydWN0dXJlT2Zmc2V0KCkpLCAKICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkp
KTsKLSAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlU291cmNlOjp1bmJv
eGVkQ2VsbChvcDJHUFIpLCBub2RlLmNoaWxkMigpLmluZGV4KCksIAorICAgICAgICBzcGVjdWxh
dGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKG9wMkdQUiksIG5v
ZGUtPmNoaWxkMigpLAogICAgICAgICAgICAgbV9qaXQuYnJhbmNoUHRyKAogICAgICAgICAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgCiAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3Mob3AyR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgCkBAIC0xNjIy
LDI0ICsxNjA5LDI0IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQZWVwSG9sZU9iamUK
ICAgICAgICAgR1BSUmVnIHN0cnVjdHVyZUdQUiA9IHN0cnVjdHVyZS5ncHIoKTsKIAogICAgICAg
ICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKG9wMUdQUiwgSlNDZWxsOjpz
dHJ1Y3R1cmVPZmZzZXQoKSksIHN0cnVjdHVyZUdQUik7Ci0gICAgICAgIHNwZWN1bGF0aW9uQ2hl
Y2soQmFkVHlwZSwgSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwob3AxR1BSKSwgbm9kZS5jaGls
ZDEoKS5pbmRleCgpLCAKKyAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVl
U291cmNlOjp1bmJveGVkQ2VsbChvcDFHUFIpLCBub2RlLT5jaGlsZDEoKSwKICAgICAgICAgICAg
IG1faml0LmJyYW5jaFB0cigKICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RXF1YWws
IAogICAgICAgICAgICAgICAgIHN0cnVjdHVyZUdQUiwgCiAgICAgICAgICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5zdHJpbmdTdHJ1Y3R1
cmUuZ2V0KCkpKSk7Ci0gICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVNv
dXJjZTo6dW5ib3hlZENlbGwob3AxR1BSKSwgbm9kZS5jaGlsZDEoKS5pbmRleCgpLCAKKyAgICAg
ICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChv
cDFHUFIpLCBub2RlLT5jaGlsZDEoKSwKICAgICAgICAgICAgIG1faml0LmJyYW5jaFRlc3Q4KAog
ICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCAKICAgICAgICAgICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdHJ1Y3R1cmVHUFIsIFN0cnVjdHVyZTo6dHlwZUlu
Zm9GbGFnc09mZnNldCgpKSwgCiAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0
ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSkpOwogCiAgICAgICAgIG1faml0LmxvYWRQ
dHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mob3AyR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNl
dCgpKSwgc3RydWN0dXJlR1BSKTsKLSAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBK
U1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChvcDJHUFIpLCBub2RlLmNoaWxkMigpLmluZGV4KCks
IAorICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVTb3VyY2U6OnVuYm94
ZWRDZWxsKG9wMkdQUiksIG5vZGUtPmNoaWxkMigpLAogICAgICAgICAgICAgbV9qaXQuYnJhbmNo
UHRyKAogICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgCiAgICAgICAgICAg
ICAgICAgc3RydWN0dXJlR1BSLCAKICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1
c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpKTsK
LSAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlU291cmNlOjp1bmJveGVk
Q2VsbChvcDJHUFIpLCBub2RlLmNoaWxkMigpLmluZGV4KCksIAorICAgICAgICBzcGVjdWxhdGlv
bkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKG9wMkdQUiksIG5vZGUt
PmNoaWxkMigpLAogICAgICAgICAgICAgbV9qaXQuYnJhbmNoVGVzdDgoCiAgICAgICAgICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIAogICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKHN0cnVjdHVyZUdQUiwgU3RydWN0dXJlOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0
KCkpLCAKQEAgLTE2NTAsMTEgKzE2MzcsMTAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZVBlZXBIb2xlT2JqZQogICAgIGp1bXAobm90VGFrZW4pOwogfQogCi12b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlUGVlcEhvbGVJbnRlZ2VyQnJhbmNoKE5vZGUmIG5vZGUsIE5vZGVJbmRleCBi
cmFuY2hOb2RlSW5kZXgsIEpJVENvbXBpbGVyOjpSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlv
bikKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQZWVwSG9sZUludGVnZXJCcmFuY2goTm9k
ZSogbm9kZSwgTm9kZSogYnJhbmNoTm9kZSwgSklUQ29tcGlsZXI6OlJlbGF0aW9uYWxDb25kaXRp
b24gY29uZGl0aW9uKQogewotICAgIE5vZGUmIGJyYW5jaE5vZGUgPSBhdChicmFuY2hOb2RlSW5k
ZXgpOwotICAgIEJsb2NrSW5kZXggdGFrZW4gPSBicmFuY2hOb2RlLnRha2VuQmxvY2tJbmRleCgp
OwotICAgIEJsb2NrSW5kZXggbm90VGFrZW4gPSBicmFuY2hOb2RlLm5vdFRha2VuQmxvY2tJbmRl
eCgpOworICAgIEJsb2NrSW5kZXggdGFrZW4gPSBicmFuY2hOb2RlLT50YWtlbkJsb2NrSW5kZXgo
KTsKKyAgICBCbG9ja0luZGV4IG5vdFRha2VuID0gYnJhbmNoTm9kZS0+bm90VGFrZW5CbG9ja0lu
ZGV4KCk7CiAKICAgICAvLyBUaGUgYnJhbmNoIGluc3RydWN0aW9uIHdpbGwgYnJhbmNoIHRvIHRo
ZSB0YWtlbiBibG9jay4KICAgICAvLyBJZiB0YWtlbiBpcyBuZXh0LCBzd2l0Y2ggdGFrZW4gd2l0
aCBub3RUYWtlbiAmIGludmVydCB0aGUgYnJhbmNoIGNvbmRpdGlvbiBzbyB3ZSBjYW4gZmFsbCB0
aHJvdWdoLgpAQCAtMTY2NSwxNyArMTY1MSwxNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlUGVlcEhvbGVJbnRlCiAgICAgICAgIG5vdFRha2VuID0gdG1wOwogICAgIH0KIAotICAgIGlm
IChpc0ludDMyQ29uc3RhbnQobm9kZS5jaGlsZDEoKS5pbmRleCgpKSkgewotICAgICAgICBpbnQz
Ml90IGltbSA9IHZhbHVlT2ZJbnQzMkNvbnN0YW50KG5vZGUuY2hpbGQxKCkuaW5kZXgoKSk7Ci0g
ICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMih0aGlzLCBub2RlLmNoaWxkMigpKTsK
KyAgICBpZiAoaXNJbnQzMkNvbnN0YW50KG5vZGUtPmNoaWxkMSgpLm5vZGUoKSkpIHsKKyAgICAg
ICAgaW50MzJfdCBpbW0gPSB2YWx1ZU9mSW50MzJDb25zdGFudChub2RlLT5jaGlsZDEoKS5ub2Rl
KCkpOworICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDIodGhpcywgbm9kZS0+Y2hp
bGQyKCkpOwogICAgICAgICBicmFuY2gzMihjb25kaXRpb24sIEpJVENvbXBpbGVyOjpJbW0zMihp
bW0pLCBvcDIuZ3ByKCksIHRha2VuKTsKLSAgICB9IGVsc2UgaWYgKGlzSW50MzJDb25zdGFudChu
b2RlLmNoaWxkMigpLmluZGV4KCkpKSB7Ci0gICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5k
IG9wMSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKLSAgICAgICAgaW50MzJfdCBpbW0gPSB2YWx1ZU9m
SW50MzJDb25zdGFudChub2RlLmNoaWxkMigpLmluZGV4KCkpOworICAgIH0gZWxzZSBpZiAoaXNJ
bnQzMkNvbnN0YW50KG5vZGUtPmNoaWxkMigpLm5vZGUoKSkpIHsKKyAgICAgICAgU3BlY3VsYXRl
SW50ZWdlck9wZXJhbmQgb3AxKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgaW50MzJf
dCBpbW0gPSB2YWx1ZU9mSW50MzJDb25zdGFudChub2RlLT5jaGlsZDIoKS5ub2RlKCkpOwogICAg
ICAgICBicmFuY2gzMihjb25kaXRpb24sIG9wMS5ncHIoKSwgSklUQ29tcGlsZXI6OkltbTMyKGlt
bSksIHRha2VuKTsKICAgICB9IGVsc2UgewotICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFu
ZCBvcDEodGhpcywgbm9kZS5jaGlsZDEoKSk7Ci0gICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVy
YW5kIG9wMih0aGlzLCBub2RlLmNoaWxkMigpKTsKKyAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9w
ZXJhbmQgb3AxKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgU3BlY3VsYXRlSW50ZWdl
ck9wZXJhbmQgb3AyKHRoaXMsIG5vZGUtPmNoaWxkMigpKTsKICAgICAgICAgYnJhbmNoMzIoY29u
ZGl0aW9uLCBvcDEuZ3ByKCksIG9wMi5ncHIoKSwgdGFrZW4pOwogICAgIH0KIApAQCAtMTY4Myw3
NCArMTY2OSw3NCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUGVlcEhvbGVJbnRlCiB9
CiAKIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgY29tcGFyZSBpcyBmdXNlZCB3aXRoIGEgc3Vic2Vx
dWVudCBicmFuY2guCi1ib29sIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUGVlcEhvbGVCcmFuY2go
Tm9kZSYgbm9kZSwgTWFjcm9Bc3NlbWJsZXI6OlJlbGF0aW9uYWxDb25kaXRpb24gY29uZGl0aW9u
LCBNYWNyb0Fzc2VtYmxlcjo6RG91YmxlQ29uZGl0aW9uIGRvdWJsZUNvbmRpdGlvbiwgU19ERkdP
cGVyYXRpb25fRUpKIG9wZXJhdGlvbikKK2Jvb2wgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQZWVw
SG9sZUJyYW5jaChOb2RlKiBub2RlLCBNYWNyb0Fzc2VtYmxlcjo6UmVsYXRpb25hbENvbmRpdGlv
biBjb25kaXRpb24sIE1hY3JvQXNzZW1ibGVyOjpEb3VibGVDb25kaXRpb24gZG91YmxlQ29uZGl0
aW9uLCBTX0RGR09wZXJhdGlvbl9FSkogb3BlcmF0aW9uKQogewogICAgIC8vIEZ1c2VkIGNvbXBh
cmUgJiBicmFuY2guCiAgICAgdW5zaWduZWQgYnJhbmNoSW5kZXhJbkJsb2NrID0gZGV0ZWN0UGVl
cEhvbGVCcmFuY2goKTsKICAgICBpZiAoYnJhbmNoSW5kZXhJbkJsb2NrICE9IFVJTlRfTUFYKSB7
Ci0gICAgICAgIE5vZGVJbmRleCBicmFuY2hOb2RlSW5kZXggPSBtX2ppdC5ncmFwaCgpLm1fYmxv
Y2tzW21fYmxvY2tdLT5hdChicmFuY2hJbmRleEluQmxvY2spOworICAgICAgICBOb2RlKiBicmFu
Y2hOb2RlID0gbV9qaXQuZ3JhcGgoKS5tX2Jsb2Nrc1ttX2Jsb2NrXS0+YXQoYnJhbmNoSW5kZXhJ
bkJsb2NrKTsKIAogICAgICAgICAvLyBkZXRlY3RQZWVwSG9sZUJyYW5jaCBjdXJyZW50bHkgb25s
eSBwZXJtaXRzIHRoZSBicmFuY2ggdG8gYmUgdGhlIHZlcnkgbmV4dCBub2RlLAogICAgICAgICAv
LyBzbyBjYW4gYmUgbm8gaW50ZXJ2ZW5pbmcgbm9kZXMgdG8gYWxzbyByZWZlcmVuY2UgdGhlIGNv
bXBhcmUuIAotICAgICAgICBBU1NFUlQobm9kZS5hZGp1c3RlZFJlZkNvdW50KCkgPT0gMSk7Cisg
ICAgICAgIEFTU0VSVChub2RlLT5hZGp1c3RlZFJlZkNvdW50KCkgPT0gMSk7CiAKLSAgICAgICAg
aWYgKE5vZGU6OnNob3VsZFNwZWN1bGF0ZUludGVnZXIoYXQobm9kZS5jaGlsZDEoKSksIGF0KG5v
ZGUuY2hpbGQyKCkpKSkKLSAgICAgICAgICAgIGNvbXBpbGVQZWVwSG9sZUludGVnZXJCcmFuY2go
bm9kZSwgYnJhbmNoTm9kZUluZGV4LCBjb25kaXRpb24pOwotICAgICAgICBlbHNlIGlmIChOb2Rl
OjpzaG91bGRTcGVjdWxhdGVOdW1iZXIoYXQobm9kZS5jaGlsZDEoKSksIGF0KG5vZGUuY2hpbGQy
KCkpKSkKLSAgICAgICAgICAgIGNvbXBpbGVQZWVwSG9sZURvdWJsZUJyYW5jaChub2RlLCBicmFu
Y2hOb2RlSW5kZXgsIGRvdWJsZUNvbmRpdGlvbik7Ci0gICAgICAgIGVsc2UgaWYgKG5vZGUub3Ao
KSA9PSBDb21wYXJlRXEpIHsKLSAgICAgICAgICAgIGlmIChhdChub2RlLmNoaWxkMSgpKS5zaG91
bGRTcGVjdWxhdGVTdHJpbmcoKSB8fCBhdChub2RlLmNoaWxkMigpKS5zaG91bGRTcGVjdWxhdGVT
dHJpbmcoKSkgewotICAgICAgICAgICAgICAgIG5vblNwZWN1bGF0aXZlUGVlcGhvbGVCcmFuY2go
bm9kZSwgYnJhbmNoTm9kZUluZGV4LCBjb25kaXRpb24sIG9wZXJhdGlvbik7CisgICAgICAgIGlm
IChOb2RlOjpzaG91bGRTcGVjdWxhdGVJbnRlZ2VyKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgbm9k
ZS0+Y2hpbGQyKCkubm9kZSgpKSkKKyAgICAgICAgICAgIGNvbXBpbGVQZWVwSG9sZUludGVnZXJC
cmFuY2gobm9kZSwgYnJhbmNoTm9kZSwgY29uZGl0aW9uKTsKKyAgICAgICAgZWxzZSBpZiAoTm9k
ZTo6c2hvdWxkU3BlY3VsYXRlTnVtYmVyKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgbm9kZS0+Y2hp
bGQyKCkubm9kZSgpKSkKKyAgICAgICAgICAgIGNvbXBpbGVQZWVwSG9sZURvdWJsZUJyYW5jaChu
b2RlLCBicmFuY2hOb2RlLCBkb3VibGVDb25kaXRpb24pOworICAgICAgICBlbHNlIGlmIChub2Rl
LT5vcCgpID09IENvbXBhcmVFcSkgeworICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5z
aG91bGRTcGVjdWxhdGVTdHJpbmcoKSB8fCBub2RlLT5jaGlsZDIoKS0+c2hvdWxkU3BlY3VsYXRl
U3RyaW5nKCkpIHsKKyAgICAgICAgICAgICAgICBub25TcGVjdWxhdGl2ZVBlZXBob2xlQnJhbmNo
KG5vZGUsIGJyYW5jaE5vZGUsIGNvbmRpdGlvbiwgb3BlcmF0aW9uKTsKICAgICAgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChhdChub2RlLmNo
aWxkMSgpKS5zaG91bGRTcGVjdWxhdGVOb25TdHJpbmdDZWxsKCkgJiYgYXQobm9kZS5jaGlsZDIo
KSkuc2hvdWxkU3BlY3VsYXRlTm9uU3RyaW5nQ2VsbE9yT3RoZXIoKSkKLSAgICAgICAgICAgICAg
ICBjb21waWxlUGVlcEhvbGVPYmplY3RUb09iamVjdE9yT3RoZXJFcXVhbGl0eShub2RlLmNoaWxk
MSgpLCBub2RlLmNoaWxkMigpLCBicmFuY2hOb2RlSW5kZXgpOwotICAgICAgICAgICAgZWxzZSBp
ZiAoYXQobm9kZS5jaGlsZDEoKSkuc2hvdWxkU3BlY3VsYXRlTm9uU3RyaW5nQ2VsbE9yT3RoZXIo
KSAmJiBhdChub2RlLmNoaWxkMigpKS5zaG91bGRTcGVjdWxhdGVOb25TdHJpbmdDZWxsKCkpCi0g
ICAgICAgICAgICAgICAgY29tcGlsZVBlZXBIb2xlT2JqZWN0VG9PYmplY3RPck90aGVyRXF1YWxp
dHkobm9kZS5jaGlsZDIoKSwgbm9kZS5jaGlsZDEoKSwgYnJhbmNoTm9kZUluZGV4KTsKLSAgICAg
ICAgICAgIGVsc2UgaWYgKGF0KG5vZGUuY2hpbGQxKCkpLnNob3VsZFNwZWN1bGF0ZU5vblN0cmlu
Z0NlbGwoKSAmJiBhdChub2RlLmNoaWxkMigpKS5zaG91bGRTcGVjdWxhdGVOb25TdHJpbmdDZWxs
KCkpCi0gICAgICAgICAgICAgICAgY29tcGlsZVBlZXBIb2xlT2JqZWN0RXF1YWxpdHkobm9kZSwg
YnJhbmNoTm9kZUluZGV4KTsKKyAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxk
U3BlY3VsYXRlTm9uU3RyaW5nQ2VsbCgpICYmIG5vZGUtPmNoaWxkMigpLT5zaG91bGRTcGVjdWxh
dGVOb25TdHJpbmdDZWxsT3JPdGhlcigpKQorICAgICAgICAgICAgICAgIGNvbXBpbGVQZWVwSG9s
ZU9iamVjdFRvT2JqZWN0T3JPdGhlckVxdWFsaXR5KG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgbm9k
ZS0+Y2hpbGQyKCkubm9kZSgpLCBicmFuY2hOb2RlKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKG5v
ZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVOb25TdHJpbmdDZWxsT3JPdGhlcigpICYmIG5v
ZGUtPmNoaWxkMigpLT5zaG91bGRTcGVjdWxhdGVOb25TdHJpbmdDZWxsKCkpCisgICAgICAgICAg
ICAgICAgY29tcGlsZVBlZXBIb2xlT2JqZWN0VG9PYmplY3RPck90aGVyRXF1YWxpdHkobm9kZS0+
Y2hpbGQyKCkubm9kZSgpLCBub2RlLT5jaGlsZDEoKS5ub2RlKCksIGJyYW5jaE5vZGUpOworICAg
ICAgICAgICAgZWxzZSBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZU5vblN0cmlu
Z0NlbGwoKSAmJiBub2RlLT5jaGlsZDIoKS0+c2hvdWxkU3BlY3VsYXRlTm9uU3RyaW5nQ2VsbCgp
KQorICAgICAgICAgICAgICAgIGNvbXBpbGVQZWVwSG9sZU9iamVjdEVxdWFsaXR5KG5vZGUsIGJy
YW5jaE5vZGUpOwogICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgbm9uU3BlY3Vs
YXRpdmVQZWVwaG9sZUJyYW5jaChub2RlLCBicmFuY2hOb2RlSW5kZXgsIGNvbmRpdGlvbiwgb3Bl
cmF0aW9uKTsKKyAgICAgICAgICAgICAgICBub25TcGVjdWxhdGl2ZVBlZXBob2xlQnJhbmNoKG5v
ZGUsIGJyYW5jaE5vZGUsIGNvbmRpdGlvbiwgb3BlcmF0aW9uKTsKICAgICAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
IG5vblNwZWN1bGF0aXZlUGVlcGhvbGVCcmFuY2gobm9kZSwgYnJhbmNoTm9kZUluZGV4LCBjb25k
aXRpb24sIG9wZXJhdGlvbik7CisgICAgICAgICAgICBub25TcGVjdWxhdGl2ZVBlZXBob2xlQnJh
bmNoKG5vZGUsIGJyYW5jaE5vZGUsIGNvbmRpdGlvbiwgb3BlcmF0aW9uKTsKICAgICAgICAgICAg
IHJldHVybiB0cnVlOwogICAgICAgICB9CiAKLSAgICAgICAgdXNlKG5vZGUuY2hpbGQxKCkpOwot
ICAgICAgICB1c2Uobm9kZS5jaGlsZDIoKSk7CisgICAgICAgIHVzZShub2RlLT5jaGlsZDEoKSk7
CisgICAgICAgIHVzZShub2RlLT5jaGlsZDIoKSk7CiAgICAgICAgIG1faW5kZXhJbkJsb2NrID0g
YnJhbmNoSW5kZXhJbkJsb2NrOwotICAgICAgICBtX2NvbXBpbGVJbmRleCA9IGJyYW5jaE5vZGVJ
bmRleDsKKyAgICAgICAgbV9jdXJyZW50Tm9kZSA9IGJyYW5jaE5vZGU7CiAgICAgICAgIHJldHVy
biB0cnVlOwogICAgIH0KICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgU3BlY3VsYXRpdmVK
SVQ6Om5vdGljZU9TUkJpcnRoKE5vZGVJbmRleCBub2RlSW5kZXgsIE5vZGUmIG5vZGUpCit2b2lk
IFNwZWN1bGF0aXZlSklUOjpub3RpY2VPU1JCaXJ0aChOb2RlKiBub2RlKQogewotICAgIGlmICgh
bm9kZS5oYXNWaXJ0dWFsUmVnaXN0ZXIoKSkKKyAgICBpZiAoIW5vZGUtPmhhc1ZpcnR1YWxSZWdp
c3RlcigpKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1
YWxSZWdpc3RlciA9IG5vZGUudmlydHVhbFJlZ2lzdGVyKCk7CisgICAgVmlydHVhbFJlZ2lzdGVy
IHZpcnR1YWxSZWdpc3RlciA9IG5vZGUtPnZpcnR1YWxSZWdpc3RlcigpOwogICAgIEdlbmVyYXRp
b25JbmZvJiBpbmZvID0gbV9nZW5lcmF0aW9uSW5mb1t2aXJ0dWFsUmVnaXN0ZXJdOwogICAgIAot
ICAgIGluZm8ubm90aWNlT1NSQmlydGgoKm1fc3RyZWFtLCBub2RlSW5kZXgsIHZpcnR1YWxSZWdp
c3Rlcik7CisgICAgaW5mby5ub3RpY2VPU1JCaXJ0aCgqbV9zdHJlYW0sIG5vZGUsIHZpcnR1YWxS
ZWdpc3Rlcik7CiB9CiAKLXZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVNb3ZIaW50KE5vZGUm
IG5vZGUpCit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlTW92SGludChOb2RlKiBub2RlKQog
ewotICAgIEFTU0VSVChub2RlLm9wKCkgPT0gU2V0TG9jYWwpOworICAgIEFTU0VSVChub2RlLT5v
cCgpID09IFNldExvY2FsKTsKICAgICAKLSAgICBtX2xhc3RTZXRPcGVyYW5kID0gbm9kZS5sb2Nh
bCgpOwotICAgIAotICAgIE5vZGUmIGNoaWxkID0gYXQobm9kZS5jaGlsZDEoKSk7Ci0gICAgbm90
aWNlT1NSQmlydGgobm9kZS5jaGlsZDEoKS5pbmRleCgpLCBjaGlsZCk7CisgICAgbV9sYXN0U2V0
T3BlcmFuZCA9IG5vZGUtPmxvY2FsKCk7CisKKyAgICBOb2RlKiBjaGlsZCA9IG5vZGUtPmNoaWxk
MSgpLm5vZGUoKTsKKyAgICBub3RpY2VPU1JCaXJ0aChjaGlsZCk7CiAgICAgCi0gICAgaWYgKGNo
aWxkLm9wKCkgPT0gVUludDMyVG9OdW1iZXIpCi0gICAgICAgIG5vdGljZU9TUkJpcnRoKGNoaWxk
LmNoaWxkMSgpLmluZGV4KCksIGF0KGNoaWxkLmNoaWxkMSgpKSk7CisgICAgaWYgKGNoaWxkLT5v
cCgpID09IFVJbnQzMlRvTnVtYmVyKQorICAgICAgICBub3RpY2VPU1JCaXJ0aChjaGlsZC0+Y2hp
bGQxKCkubm9kZSgpKTsKICAgICAKLSAgICBtX3N0cmVhbS0+YXBwZW5kQW5kTG9nKFZhcmlhYmxl
RXZlbnQ6Om1vdkhpbnQoTWluaWZpZWRJRChub2RlLmNoaWxkMSgpLmluZGV4KCkpLCBub2RlLmxv
Y2FsKCkpKTsKKyAgICBtX3N0cmVhbS0+YXBwZW5kQW5kTG9nKFZhcmlhYmxlRXZlbnQ6Om1vdkhp
bnQoTWluaWZpZWRJRChjaGlsZCksIG5vZGUtPmxvY2FsKCkpKTsKIH0KIAogdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZShCYXNpY0Jsb2NrJiBibG9jaykKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHJldmlzaW9uIDE0MDkwNCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTIgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEy
LCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMTEyLDE1ICsxMTIsNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBjcmVh
dGVPU1JFbnRyaWVzKCk7CiAgICAgdm9pZCBsaW5rT1NSRW50cmllcyhMaW5rQnVmZmVyJik7CiAK
LSAgICBOb2RlJiBhdChOb2RlSW5kZXggbm9kZUluZGV4KQotICAgIHsKLSAgICAgICAgcmV0dXJu
IG1faml0LmdyYXBoKClbbm9kZUluZGV4XTsKLSAgICB9Ci0gICAgTm9kZSYgYXQoRWRnZSBub2Rl
VXNlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGF0KG5vZGVVc2UuaW5kZXgoKSk7Ci0gICAgfQot
ICAgIAogICAgIEJsb2NrSW5kZXggbmV4dEJsb2NrKCkKICAgICB7CiAgICAgICAgIGZvciAoQmxv
Y2tJbmRleCByZXN1bHQgPSBtX2Jsb2NrICsgMTsgOyByZXN1bHQrKykgewpAQCAtMTMxLDE0ICsx
MjIsMTQgQEAgcHVibGljOgogICAgICAgICB9CiAgICAgfQogICAgIAotICAgIEdQUlJlZyBmaWxs
SW50ZWdlcihOb2RlSW5kZXgsIERhdGFGb3JtYXQmIHJldHVybkZvcm1hdCk7Ci0gICAgRlBSUmVn
IGZpbGxEb3VibGUoTm9kZUluZGV4KTsKKyAgICBHUFJSZWcgZmlsbEludGVnZXIoTm9kZSosIERh
dGFGb3JtYXQmIHJldHVybkZvcm1hdCk7CisgICAgRlBSUmVnIGZpbGxEb3VibGUoTm9kZSopOwog
I2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgR1BSUmVnIGZpbGxKU1ZhbHVlKE5vZGVJbmRleCk7Cisg
ICAgR1BSUmVnIGZpbGxKU1ZhbHVlKE5vZGUqKTsKICNlbGlmIFVTRShKU1ZBTFVFMzJfNjQpCi0g
ICAgYm9vbCBmaWxsSlNWYWx1ZShOb2RlSW5kZXgsIEdQUlJlZyYsIEdQUlJlZyYsIEZQUlJlZyYp
OworICAgIGJvb2wgZmlsbEpTVmFsdWUoTm9kZSosIEdQUlJlZyYsIEdQUlJlZyYsIEZQUlJlZyYp
OwogI2VuZGlmCi0gICAgR1BSUmVnIGZpbGxTdG9yYWdlKE5vZGVJbmRleCk7CisgICAgR1BSUmVn
IGZpbGxTdG9yYWdlKE5vZGUqKTsKIAogICAgIC8vIGxvY2sgYW5kIHVubG9jayBHUFIgJiBGUFIg
cmVnaXN0ZXJzLgogICAgIHZvaWQgbG9jayhHUFJSZWcgcmVnKQpAQCAtMTYwLDE1ICsxNTEsMTUg
QEAgcHVibGljOgogCiAgICAgLy8gVXNlZCB0byBjaGVjayB3aGV0aGVyIGEgY2hpbGQgbm9kZSBp
cyBvbiBpdHMgbGFzdCB1c2UsCiAgICAgLy8gYW5kIGl0cyBtYWNoaW5lIHJlZ2lzdGVycyBtYXkg
YmUgcmV1c2VkLgotICAgIGJvb2wgY2FuUmV1c2UoTm9kZUluZGV4IG5vZGVJbmRleCkKKyAgICBi
b29sIGNhblJldXNlKE5vZGUqIG5vZGUpCiAgICAgewotICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIg
dmlydHVhbFJlZ2lzdGVyID0gYXQobm9kZUluZGV4KS52aXJ0dWFsUmVnaXN0ZXIoKTsKKyAgICAg
ICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciA9IG5vZGUtPnZpcnR1YWxSZWdpc3Rl
cigpOwogICAgICAgICBHZW5lcmF0aW9uSW5mbyYgaW5mbyA9IG1fZ2VuZXJhdGlvbkluZm9bdmly
dHVhbFJlZ2lzdGVyXTsKICAgICAgICAgcmV0dXJuIGluZm8uY2FuUmV1c2UoKTsKICAgICB9CiAg
ICAgYm9vbCBjYW5SZXVzZShFZGdlIG5vZGVVc2UpCiAgICAgewotICAgICAgICByZXR1cm4gY2Fu
UmV1c2Uobm9kZVVzZS5pbmRleCgpKTsKKyAgICAgICAgcmV0dXJuIGNhblJldXNlKG5vZGVVc2Uu
bm9kZSgpKTsKICAgICB9CiAgICAgR1BSUmVnIHJldXNlKEdQUlJlZyByZWcpCiAgICAgewpAQCAt
MjI5LDI2ICsyMjAsMjUgQEAgcHVibGljOgogICAgIC8vIG1hY2hpbmUgcmVnaXN0ZXJzIGZpcnN0
IChieSBsb2NraW5nIFZpcnR1YWxSZWdzaXRlcnMgdGhhdCBhcmUgYWxyZWFkeQogICAgIC8vIGlu
IG1hY2hpbmUgcmVnaXN0ZXIgYmVmb3JlIGZpbGxpbmcgdGhvc2UgdGhhdCBhcmUgbm90IHdlIGF0
dGVtcHQgdG8KICAgICAvLyBhdm9pZCBzcGlsbGluZyB2YWx1ZXMgd2Ugd2lsbCBuZWVkIGltbWVk
aWF0ZWx5KS4KLSAgICBib29sIGlzRmlsbGVkKE5vZGVJbmRleCBub2RlSW5kZXgpCisgICAgYm9v
bCBpc0ZpbGxlZChOb2RlKiBub2RlKQogICAgIHsKLSAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHZp
cnR1YWxSZWdpc3RlciA9IGF0KG5vZGVJbmRleCkudmlydHVhbFJlZ2lzdGVyKCk7CisgICAgICAg
IFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIgPSBub2RlLT52aXJ0dWFsUmVnaXN0ZXIo
KTsKICAgICAgICAgR2VuZXJhdGlvbkluZm8mIGluZm8gPSBtX2dlbmVyYXRpb25JbmZvW3ZpcnR1
YWxSZWdpc3Rlcl07CiAgICAgICAgIHJldHVybiBpbmZvLnJlZ2lzdGVyRm9ybWF0KCkgIT0gRGF0
YUZvcm1hdE5vbmU7CiAgICAgfQotICAgIGJvb2wgaXNGaWxsZWREb3VibGUoTm9kZUluZGV4IG5v
ZGVJbmRleCkKKyAgICBib29sIGlzRmlsbGVkRG91YmxlKE5vZGUqIG5vZGUpCiAgICAgewotICAg
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyID0gYXQobm9kZUluZGV4KS52aXJ0
dWFsUmVnaXN0ZXIoKTsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciA9
IG5vZGUtPnZpcnR1YWxSZWdpc3RlcigpOwogICAgICAgICBHZW5lcmF0aW9uSW5mbyYgaW5mbyA9
IG1fZ2VuZXJhdGlvbkluZm9bdmlydHVhbFJlZ2lzdGVyXTsKICAgICAgICAgcmV0dXJuIGluZm8u
cmVnaXN0ZXJGb3JtYXQoKSA9PSBEYXRhRm9ybWF0RG91YmxlOwogICAgIH0KIAogICAgIC8vIENh
bGxlZCBvbiBhbiBvcGVyYW5kIG9uY2UgaXQgaGFzIGJlZW4gY29uc3VtZWQgYnkgYSBwYXJlbnQg
bm9kZS4KLSAgICB2b2lkIHVzZShOb2RlSW5kZXggbm9kZUluZGV4KQorICAgIHZvaWQgdXNlKE5v
ZGUqIG5vZGUpCiAgICAgewotICAgICAgICBOb2RlJiBub2RlID0gYXQobm9kZUluZGV4KTsKLSAg
ICAgICAgaWYgKCFub2RlLmhhc1Jlc3VsdCgpKQorICAgICAgICBpZiAoIW5vZGUtPmhhc1Jlc3Vs
dCgpKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVh
bFJlZ2lzdGVyID0gbm9kZS52aXJ0dWFsUmVnaXN0ZXIoKTsKKyAgICAgICAgVmlydHVhbFJlZ2lz
dGVyIHZpcnR1YWxSZWdpc3RlciA9IG5vZGUtPnZpcnR1YWxSZWdpc3RlcigpOwogICAgICAgICBH
ZW5lcmF0aW9uSW5mbyYgaW5mbyA9IG1fZ2VuZXJhdGlvbkluZm9bdmlydHVhbFJlZ2lzdGVyXTsK
IAogICAgICAgICAvLyB1c2UoKSByZXR1cm5zIHRydWUgd2hlbiB0aGUgdmFsdWUgYmVjb21lcyBk
ZWFkLCBhbmQgYW55CkBAIC0yNzUsNyArMjY1LDcgQEAgcHVibGljOgogICAgIH0KICAgICB2b2lk
IHVzZShFZGdlIG5vZGVVc2UpCiAgICAgewotICAgICAgICB1c2Uobm9kZVVzZS5pbmRleCgpKTsK
KyAgICAgICAgdXNlKG5vZGVVc2Uubm9kZSgpKTsKICAgICB9CiAgICAgCiAgICAgUmVnaXN0ZXJT
ZXQgdXNlZFJlZ2lzdGVycygpCkBAIC0zMDgsMTkgKzI5OCwxOSBAQCBwdWJsaWM6CiAKICAgICAv
LyBDYWxsZWQgYnkgdGhlIHNwZWN1bGF0aXZlIG9wZXJhbmQgdHlwZXMsIGJlbG93LCB0byBmaWxs
IG9wZXJhbmQgdG8KICAgICAvLyBtYWNoaW5lIHJlZ2lzdGVycywgaW1wbGljaXRseSBnZW5lcmF0
aW5nIHNwZWN1bGF0aW9uIGNoZWNrcyBhcyBuZWVkZWQuCi0gICAgR1BSUmVnIGZpbGxTcGVjdWxh
dGVJbnQoTm9kZUluZGV4LCBEYXRhRm9ybWF0JiByZXR1cm5Gb3JtYXQsIFNwZWN1bGF0aW9uRGly
ZWN0aW9uKTsKLSAgICBHUFJSZWcgZmlsbFNwZWN1bGF0ZUludFN0cmljdChOb2RlSW5kZXgpOwot
ICAgIEZQUlJlZyBmaWxsU3BlY3VsYXRlRG91YmxlKE5vZGVJbmRleCwgU3BlY3VsYXRpb25EaXJl
Y3Rpb24pOwotICAgIEdQUlJlZyBmaWxsU3BlY3VsYXRlQ2VsbChOb2RlSW5kZXgsIFNwZWN1bGF0
aW9uRGlyZWN0aW9uKTsKLSAgICBHUFJSZWcgZmlsbFNwZWN1bGF0ZUJvb2xlYW4oTm9kZUluZGV4
LCBTcGVjdWxhdGlvbkRpcmVjdGlvbik7Ci0gICAgR2VuZXJhdGVkT3BlcmFuZFR5cGUgY2hlY2tH
ZW5lcmF0ZWRUeXBlRm9yVG9JbnQzMihOb2RlSW5kZXgpOworICAgIEdQUlJlZyBmaWxsU3BlY3Vs
YXRlSW50KE5vZGUqLCBEYXRhRm9ybWF0JiByZXR1cm5Gb3JtYXQsIFNwZWN1bGF0aW9uRGlyZWN0
aW9uKTsKKyAgICBHUFJSZWcgZmlsbFNwZWN1bGF0ZUludFN0cmljdChOb2RlKik7CisgICAgRlBS
UmVnIGZpbGxTcGVjdWxhdGVEb3VibGUoTm9kZSosIFNwZWN1bGF0aW9uRGlyZWN0aW9uKTsKKyAg
ICBHUFJSZWcgZmlsbFNwZWN1bGF0ZUNlbGwoTm9kZSosIFNwZWN1bGF0aW9uRGlyZWN0aW9uKTsK
KyAgICBHUFJSZWcgZmlsbFNwZWN1bGF0ZUJvb2xlYW4oTm9kZSosIFNwZWN1bGF0aW9uRGlyZWN0
aW9uKTsKKyAgICBHZW5lcmF0ZWRPcGVyYW5kVHlwZSBjaGVja0dlbmVyYXRlZFR5cGVGb3JUb0lu
dDMyKE5vZGUqKTsKIAogICAgIHZvaWQgYWRkU2xvd1BhdGhHZW5lcmF0b3IoUGFzc093blB0cjxT
bG93UGF0aEdlbmVyYXRvcj4pOwogICAgIHZvaWQgcnVuU2xvd1BhdGhHZW5lcmF0b3JzKCk7CiAg
ICAgCi0gICAgdm9pZCBjb21waWxlKE5vZGUmKTsKLSAgICB2b2lkIG5vdGljZU9TUkJpcnRoKE5v
ZGVJbmRleCwgTm9kZSYpOwotICAgIHZvaWQgY29tcGlsZU1vdkhpbnQoTm9kZSYpOworICAgIHZv
aWQgY29tcGlsZShOb2RlKik7CisgICAgdm9pZCBub3RpY2VPU1JCaXJ0aChOb2RlKik7CisgICAg
dm9pZCBjb21waWxlTW92SGludChOb2RlKik7CiAgICAgdm9pZCBjb21waWxlKEJhc2ljQmxvY2sm
KTsKIAogICAgIHZvaWQgY2hlY2tBcmd1bWVudFR5cGVzKCk7CkBAIC01MzYsNDQgKzUyNiw0NCBA
QCBwdWJsaWM6CiAgICAgICAgIH0KICAgICB9CiAgICAgCi0gICAgYm9vbCBpc1N0cmljdEludDMy
KE5vZGVJbmRleCk7CisgICAgYm9vbCBpc1N0cmljdEludDMyKE5vZGUqKTsKICAgICAKLSAgICBi
b29sIGlzS25vd25JbnRlZ2VyKE5vZGVJbmRleCk7Ci0gICAgYm9vbCBpc0tub3duTnVtZXJpYyhO
b2RlSW5kZXgpOwotICAgIGJvb2wgaXNLbm93bkNlbGwoTm9kZUluZGV4KTsKKyAgICBib29sIGlz
S25vd25JbnRlZ2VyKE5vZGUqKTsKKyAgICBib29sIGlzS25vd25OdW1lcmljKE5vZGUqKTsKKyAg
ICBib29sIGlzS25vd25DZWxsKE5vZGUqKTsKICAgICAKLSAgICBib29sIGlzS25vd25Ob3RJbnRl
Z2VyKE5vZGVJbmRleCk7Ci0gICAgYm9vbCBpc0tub3duTm90TnVtYmVyKE5vZGVJbmRleCk7Cisg
ICAgYm9vbCBpc0tub3duTm90SW50ZWdlcihOb2RlKik7CisgICAgYm9vbCBpc0tub3duTm90TnVt
YmVyKE5vZGUqKTsKIAotICAgIGJvb2wgaXNLbm93bk5vdENlbGwoTm9kZUluZGV4KTsKKyAgICBi
b29sIGlzS25vd25Ob3RDZWxsKE5vZGUqKTsKICAgICAKICAgICAvLyBDaGVja3MvYWNjZXNzb3Jz
IGZvciBjb25zdGFudCB2YWx1ZXMuCi0gICAgYm9vbCBpc0NvbnN0YW50KE5vZGVJbmRleCBub2Rl
SW5kZXgpIHsgcmV0dXJuIG1faml0LmdyYXBoKCkuaXNDb25zdGFudChub2RlSW5kZXgpOyB9Ci0g
ICAgYm9vbCBpc0pTQ29uc3RhbnQoTm9kZUluZGV4IG5vZGVJbmRleCkgeyByZXR1cm4gbV9qaXQu
Z3JhcGgoKS5pc0pTQ29uc3RhbnQobm9kZUluZGV4KTsgfQotICAgIGJvb2wgaXNJbnQzMkNvbnN0
YW50KE5vZGVJbmRleCBub2RlSW5kZXgpIHsgcmV0dXJuIG1faml0LmdyYXBoKCkuaXNJbnQzMkNv
bnN0YW50KG5vZGVJbmRleCk7IH0KLSAgICBib29sIGlzRG91YmxlQ29uc3RhbnQoTm9kZUluZGV4
IG5vZGVJbmRleCkgeyByZXR1cm4gbV9qaXQuZ3JhcGgoKS5pc0RvdWJsZUNvbnN0YW50KG5vZGVJ
bmRleCk7IH0KLSAgICBib29sIGlzTnVtYmVyQ29uc3RhbnQoTm9kZUluZGV4IG5vZGVJbmRleCkg
eyByZXR1cm4gbV9qaXQuZ3JhcGgoKS5pc051bWJlckNvbnN0YW50KG5vZGVJbmRleCk7IH0KLSAg
ICBib29sIGlzQm9vbGVhbkNvbnN0YW50KE5vZGVJbmRleCBub2RlSW5kZXgpIHsgcmV0dXJuIG1f
aml0LmdyYXBoKCkuaXNCb29sZWFuQ29uc3RhbnQobm9kZUluZGV4KTsgfQotICAgIGJvb2wgaXNG
dW5jdGlvbkNvbnN0YW50KE5vZGVJbmRleCBub2RlSW5kZXgpIHsgcmV0dXJuIG1faml0LmdyYXBo
KCkuaXNGdW5jdGlvbkNvbnN0YW50KG5vZGVJbmRleCk7IH0KLSAgICBpbnQzMl90IHZhbHVlT2ZJ
bnQzMkNvbnN0YW50KE5vZGVJbmRleCBub2RlSW5kZXgpIHsgcmV0dXJuIG1faml0LmdyYXBoKCku
dmFsdWVPZkludDMyQ29uc3RhbnQobm9kZUluZGV4KTsgfQotICAgIGRvdWJsZSB2YWx1ZU9mTnVt
YmVyQ29uc3RhbnQoTm9kZUluZGV4IG5vZGVJbmRleCkgeyByZXR1cm4gbV9qaXQuZ3JhcGgoKS52
YWx1ZU9mTnVtYmVyQ29uc3RhbnQobm9kZUluZGV4KTsgfQotICAgIGludDMyX3QgdmFsdWVPZk51
bWJlckNvbnN0YW50QXNJbnQzMihOb2RlSW5kZXggbm9kZUluZGV4KQotICAgIHsKLSAgICAgICAg
aWYgKGlzSW50MzJDb25zdGFudChub2RlSW5kZXgpKQotICAgICAgICAgICAgcmV0dXJuIHZhbHVl
T2ZJbnQzMkNvbnN0YW50KG5vZGVJbmRleCk7Ci0gICAgICAgIHJldHVybiBKU0M6OnRvSW50MzIo
dmFsdWVPZk51bWJlckNvbnN0YW50KG5vZGVJbmRleCkpOworICAgIGJvb2wgaXNDb25zdGFudChO
b2RlKiBub2RlKSB7IHJldHVybiBtX2ppdC5ncmFwaCgpLmlzQ29uc3RhbnQobm9kZSk7IH0KKyAg
ICBib29sIGlzSlNDb25zdGFudChOb2RlKiBub2RlKSB7IHJldHVybiBtX2ppdC5ncmFwaCgpLmlz
SlNDb25zdGFudChub2RlKTsgfQorICAgIGJvb2wgaXNJbnQzMkNvbnN0YW50KE5vZGUqIG5vZGUp
IHsgcmV0dXJuIG1faml0LmdyYXBoKCkuaXNJbnQzMkNvbnN0YW50KG5vZGUpOyB9CisgICAgYm9v
bCBpc0RvdWJsZUNvbnN0YW50KE5vZGUqIG5vZGUpIHsgcmV0dXJuIG1faml0LmdyYXBoKCkuaXNE
b3VibGVDb25zdGFudChub2RlKTsgfQorICAgIGJvb2wgaXNOdW1iZXJDb25zdGFudChOb2RlKiBu
b2RlKSB7IHJldHVybiBtX2ppdC5ncmFwaCgpLmlzTnVtYmVyQ29uc3RhbnQobm9kZSk7IH0KKyAg
ICBib29sIGlzQm9vbGVhbkNvbnN0YW50KE5vZGUqIG5vZGUpIHsgcmV0dXJuIG1faml0LmdyYXBo
KCkuaXNCb29sZWFuQ29uc3RhbnQobm9kZSk7IH0KKyAgICBib29sIGlzRnVuY3Rpb25Db25zdGFu
dChOb2RlKiBub2RlKSB7IHJldHVybiBtX2ppdC5ncmFwaCgpLmlzRnVuY3Rpb25Db25zdGFudChu
b2RlKTsgfQorICAgIGludDMyX3QgdmFsdWVPZkludDMyQ29uc3RhbnQoTm9kZSogbm9kZSkgeyBy
ZXR1cm4gbV9qaXQuZ3JhcGgoKS52YWx1ZU9mSW50MzJDb25zdGFudChub2RlKTsgfQorICAgIGRv
dWJsZSB2YWx1ZU9mTnVtYmVyQ29uc3RhbnQoTm9kZSogbm9kZSkgeyByZXR1cm4gbV9qaXQuZ3Jh
cGgoKS52YWx1ZU9mTnVtYmVyQ29uc3RhbnQobm9kZSk7IH0KKyAgICBpbnQzMl90IHZhbHVlT2ZO
dW1iZXJDb25zdGFudEFzSW50MzIoTm9kZSogbm9kZSkKKyAgICB7CisgICAgICAgIGlmIChpc0lu
dDMyQ29uc3RhbnQobm9kZSkpCisgICAgICAgICAgICByZXR1cm4gdmFsdWVPZkludDMyQ29uc3Rh
bnQobm9kZSk7CisgICAgICAgIHJldHVybiBKU0M6OnRvSW50MzIodmFsdWVPZk51bWJlckNvbnN0
YW50KG5vZGUpKTsKICAgICB9CiAjaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICB2b2lkKiBhZGRy
ZXNzT2ZEb3VibGVDb25zdGFudChOb2RlSW5kZXggbm9kZUluZGV4KSB7IHJldHVybiBtX2ppdC5h
ZGRyZXNzT2ZEb3VibGVDb25zdGFudChub2RlSW5kZXgpOyB9CisgICAgdm9pZCogYWRkcmVzc09m
RG91YmxlQ29uc3RhbnQoTm9kZSogbm9kZSkgeyByZXR1cm4gbV9qaXQuYWRkcmVzc09mRG91Ymxl
Q29uc3RhbnQobm9kZSk7IH0KICNlbmRpZgotICAgIEpTVmFsdWUgdmFsdWVPZkpTQ29uc3RhbnQo
Tm9kZUluZGV4IG5vZGVJbmRleCkgeyByZXR1cm4gbV9qaXQuZ3JhcGgoKS52YWx1ZU9mSlNDb25z
dGFudChub2RlSW5kZXgpOyB9Ci0gICAgYm9vbCB2YWx1ZU9mQm9vbGVhbkNvbnN0YW50KE5vZGVJ
bmRleCBub2RlSW5kZXgpIHsgcmV0dXJuIG1faml0LmdyYXBoKCkudmFsdWVPZkJvb2xlYW5Db25z
dGFudChub2RlSW5kZXgpOyB9Ci0gICAgSlNGdW5jdGlvbiogdmFsdWVPZkZ1bmN0aW9uQ29uc3Rh
bnQoTm9kZUluZGV4IG5vZGVJbmRleCkgeyByZXR1cm4gbV9qaXQuZ3JhcGgoKS52YWx1ZU9mRnVu
Y3Rpb25Db25zdGFudChub2RlSW5kZXgpOyB9Ci0gICAgYm9vbCBpc051bGxDb25zdGFudChOb2Rl
SW5kZXggbm9kZUluZGV4KQorICAgIEpTVmFsdWUgdmFsdWVPZkpTQ29uc3RhbnQoTm9kZSogbm9k
ZSkgeyByZXR1cm4gbV9qaXQuZ3JhcGgoKS52YWx1ZU9mSlNDb25zdGFudChub2RlKTsgfQorICAg
IGJvb2wgdmFsdWVPZkJvb2xlYW5Db25zdGFudChOb2RlKiBub2RlKSB7IHJldHVybiBtX2ppdC5n
cmFwaCgpLnZhbHVlT2ZCb29sZWFuQ29uc3RhbnQobm9kZSk7IH0KKyAgICBKU0Z1bmN0aW9uKiB2
YWx1ZU9mRnVuY3Rpb25Db25zdGFudChOb2RlKiBub2RlKSB7IHJldHVybiBtX2ppdC5ncmFwaCgp
LnZhbHVlT2ZGdW5jdGlvbkNvbnN0YW50KG5vZGUpOyB9CisgICAgYm9vbCBpc051bGxDb25zdGFu
dChOb2RlKiBub2RlKQogICAgIHsKLSAgICAgICAgaWYgKCFpc0NvbnN0YW50KG5vZGVJbmRleCkp
CisgICAgICAgIGlmICghaXNDb25zdGFudChub2RlKSkKICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgcmV0dXJuIHZhbHVlT2ZKU0NvbnN0YW50KG5vZGVJbmRleCkuaXNOdWxsKCk7
CisgICAgICAgIHJldHVybiB2YWx1ZU9mSlNDb25zdGFudChub2RlKS5pc051bGwoKTsKICAgICB9
CiAKICAgICBJZGVudGlmaWVyKiBpZGVudGlmaWVyKHVuc2lnbmVkIGluZGV4KQpAQCAtNjI2LDkg
KzYxNiw5IEBAIHB1YmxpYzoKICNlbmRpZgogCiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBNYWNy
b0Fzc2VtYmxlcjo6SW1tNjQgdmFsdWVPZkpTQ29uc3RhbnRBc0ltbTY0KE5vZGVJbmRleCBub2Rl
SW5kZXgpCisgICAgTWFjcm9Bc3NlbWJsZXI6OkltbTY0IHZhbHVlT2ZKU0NvbnN0YW50QXNJbW02
NChOb2RlKiBub2RlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyOjpJbW02
NChKU1ZhbHVlOjplbmNvZGUodmFsdWVPZkpTQ29uc3RhbnQobm9kZUluZGV4KSkpOworICAgICAg
ICByZXR1cm4gTWFjcm9Bc3NlbWJsZXI6OkltbTY0KEpTVmFsdWU6OmVuY29kZSh2YWx1ZU9mSlND
b25zdGFudChub2RlKSkpOwogICAgIH0KICNlbmRpZgogCkBAIC03MDUsMTkgKzY5NSwxOSBAQCBw
dWJsaWM6CiAKICAgICAgICAgLy8gQ2hlY2sgdGhhdCBubyBpbnRlcnZlbmluZyBub2RlcyB3aWxs
IGJlIGdlbmVyYXRlZC4KICAgICAgICAgZm9yICh1bnNpZ25lZCBpbmRleCA9IG1faW5kZXhJbkJs
b2NrICsgMTsgaW5kZXggPCBibG9jay0+c2l6ZSgpIC0gMTsgKytpbmRleCkgewotICAgICAgICAg
ICAgTm9kZUluZGV4IG5vZGVJbmRleCA9IGJsb2NrLT5hdChpbmRleCk7Ci0gICAgICAgICAgICBp
ZiAoYXQobm9kZUluZGV4KS5zaG91bGRHZW5lcmF0ZSgpKQorICAgICAgICAgICAgTm9kZSogbm9k
ZSA9IGJsb2NrLT5hdChpbmRleCk7CisgICAgICAgICAgICBpZiAobm9kZS0+c2hvdWxkR2VuZXJh
dGUoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gVUlOVF9NQVg7CiAgICAgICAgIH0KIAogICAg
ICAgICAvLyBDaGVjayBpZiB0aGUgbGFzdE5vZGUgaXMgYSBicmFuY2ggb24gdGhpcyBub2RlLgot
ICAgICAgICBOb2RlJiBsYXN0Tm9kZSA9IGF0KGJsb2NrLT5sYXN0KCkpOwotICAgICAgICByZXR1
cm4gbGFzdE5vZGUub3AoKSA9PSBCcmFuY2ggJiYgbGFzdE5vZGUuY2hpbGQxKCkuaW5kZXgoKSA9
PSBtX2NvbXBpbGVJbmRleCA/IGJsb2NrLT5zaXplKCkgLSAxIDogVUlOVF9NQVg7CisgICAgICAg
IE5vZGUqIGxhc3ROb2RlID0gYmxvY2stPmxhc3QoKTsKKyAgICAgICAgcmV0dXJuIGxhc3ROb2Rl
LT5vcCgpID09IEJyYW5jaCAmJiBsYXN0Tm9kZS0+Y2hpbGQxKCkgPT0gbV9jdXJyZW50Tm9kZSA/
IGJsb2NrLT5zaXplKCkgLSAxIDogVUlOVF9NQVg7CiAgICAgfQogICAgIAotICAgIHZvaWQgbm9u
U3BlY3VsYXRpdmVWYWx1ZVRvTnVtYmVyKE5vZGUmKTsKLSAgICB2b2lkIG5vblNwZWN1bGF0aXZl
VmFsdWVUb0ludDMyKE5vZGUmKTsKLSAgICB2b2lkIG5vblNwZWN1bGF0aXZlVUludDMyVG9OdW1i
ZXIoTm9kZSYpOworICAgIHZvaWQgbm9uU3BlY3VsYXRpdmVWYWx1ZVRvTnVtYmVyKE5vZGUqKTsK
KyAgICB2b2lkIG5vblNwZWN1bGF0aXZlVmFsdWVUb0ludDMyKE5vZGUqKTsKKyAgICB2b2lkIG5v
blNwZWN1bGF0aXZlVUludDMyVG9OdW1iZXIoTm9kZSopOwogCiAjaWYgVVNFKEpTVkFMVUU2NCkK
ICAgICB2b2lkIGNhY2hlZEdldEJ5SWQoQ29kZU9yaWdpbiwgR1BSUmVnIGJhc2VHUFIsIEdQUlJl
ZyByZXN1bHRHUFIsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIEpJVENvbXBpbGVyOjpKdW1w
IHNsb3dQYXRoVGFyZ2V0ID0gSklUQ29tcGlsZXI6Okp1bXAoKSwgU3BpbGxSZWdpc3RlcnNNb2Rl
ID0gTmVlZFRvU3BpbGwpOwpAQCAtNzI4LDE5ICs3MTgsMTkgQEAgcHVibGljOgogI2VuZGlmCiAK
ICAgICB2b2lkIG5vblNwZWN1bGF0aXZlTm9uUGVlcGhvbGVDb21wYXJlTnVsbChFZGdlIG9wZXJh
bmQsIGJvb2wgaW52ZXJ0ID0gZmFsc2UpOwotICAgIHZvaWQgbm9uU3BlY3VsYXRpdmVQZWVwaG9s
ZUJyYW5jaE51bGwoRWRnZSBvcGVyYW5kLCBOb2RlSW5kZXggYnJhbmNoTm9kZUluZGV4LCBib29s
IGludmVydCA9IGZhbHNlKTsKLSAgICBib29sIG5vblNwZWN1bGF0aXZlQ29tcGFyZU51bGwoTm9k
ZSYsIEVkZ2Ugb3BlcmFuZCwgYm9vbCBpbnZlcnQgPSBmYWxzZSk7CisgICAgdm9pZCBub25TcGVj
dWxhdGl2ZVBlZXBob2xlQnJhbmNoTnVsbChFZGdlIG9wZXJhbmQsIE5vZGUqIGJyYW5jaE5vZGUs
IGJvb2wgaW52ZXJ0ID0gZmFsc2UpOworICAgIGJvb2wgbm9uU3BlY3VsYXRpdmVDb21wYXJlTnVs
bChOb2RlKiwgRWRnZSBvcGVyYW5kLCBib29sIGludmVydCA9IGZhbHNlKTsKICAgICAKLSAgICB2
b2lkIG5vblNwZWN1bGF0aXZlUGVlcGhvbGVCcmFuY2goTm9kZSYsIE5vZGVJbmRleCBicmFuY2hO
b2RlSW5kZXgsIE1hY3JvQXNzZW1ibGVyOjpSZWxhdGlvbmFsQ29uZGl0aW9uLCBTX0RGR09wZXJh
dGlvbl9FSkogaGVscGVyRnVuY3Rpb24pOwotICAgIHZvaWQgbm9uU3BlY3VsYXRpdmVOb25QZWVw
aG9sZUNvbXBhcmUoTm9kZSYsIE1hY3JvQXNzZW1ibGVyOjpSZWxhdGlvbmFsQ29uZGl0aW9uLCBT
X0RGR09wZXJhdGlvbl9FSkogaGVscGVyRnVuY3Rpb24pOwotICAgIGJvb2wgbm9uU3BlY3VsYXRp
dmVDb21wYXJlKE5vZGUmLCBNYWNyb0Fzc2VtYmxlcjo6UmVsYXRpb25hbENvbmRpdGlvbiwgU19E
RkdPcGVyYXRpb25fRUpKIGhlbHBlckZ1bmN0aW9uKTsKLSAgICAKLSAgICB2b2lkIG5vblNwZWN1
bGF0aXZlUGVlcGhvbGVTdHJpY3RFcShOb2RlJiwgTm9kZUluZGV4IGJyYW5jaE5vZGVJbmRleCwg
Ym9vbCBpbnZlcnQgPSBmYWxzZSk7Ci0gICAgdm9pZCBub25TcGVjdWxhdGl2ZU5vblBlZXBob2xl
U3RyaWN0RXEoTm9kZSYsIGJvb2wgaW52ZXJ0ID0gZmFsc2UpOwotICAgIGJvb2wgbm9uU3BlY3Vs
YXRpdmVTdHJpY3RFcShOb2RlJiwgYm9vbCBpbnZlcnQgPSBmYWxzZSk7CisgICAgdm9pZCBub25T
cGVjdWxhdGl2ZVBlZXBob2xlQnJhbmNoKE5vZGUqLCBOb2RlKiBicmFuY2hOb2RlLCBNYWNyb0Fz
c2VtYmxlcjo6UmVsYXRpb25hbENvbmRpdGlvbiwgU19ERkdPcGVyYXRpb25fRUpKIGhlbHBlckZ1
bmN0aW9uKTsKKyAgICB2b2lkIG5vblNwZWN1bGF0aXZlTm9uUGVlcGhvbGVDb21wYXJlKE5vZGUq
LCBNYWNyb0Fzc2VtYmxlcjo6UmVsYXRpb25hbENvbmRpdGlvbiwgU19ERkdPcGVyYXRpb25fRUpK
IGhlbHBlckZ1bmN0aW9uKTsKKyAgICBib29sIG5vblNwZWN1bGF0aXZlQ29tcGFyZShOb2RlKiwg
TWFjcm9Bc3NlbWJsZXI6OlJlbGF0aW9uYWxDb25kaXRpb24sIFNfREZHT3BlcmF0aW9uX0VKSiBo
ZWxwZXJGdW5jdGlvbik7CisgICAgCisgICAgdm9pZCBub25TcGVjdWxhdGl2ZVBlZXBob2xlU3Ry
aWN0RXEoTm9kZSosIE5vZGUqIGJyYW5jaE5vZGUsIGJvb2wgaW52ZXJ0ID0gZmFsc2UpOworICAg
IHZvaWQgbm9uU3BlY3VsYXRpdmVOb25QZWVwaG9sZVN0cmljdEVxKE5vZGUqLCBib29sIGludmVy
dCA9IGZhbHNlKTsKKyAgICBib29sIG5vblNwZWN1bGF0aXZlU3RyaWN0RXEoTm9kZSosIGJvb2wg
aW52ZXJ0ID0gZmFsc2UpOwogICAgIAotICAgIHZvaWQgY29tcGlsZUluc3RhbmNlT2ZGb3JPYmpl
Y3QoTm9kZSYsIEdQUlJlZyB2YWx1ZVJlZywgR1BSUmVnIHByb3RvdHlwZVJlZywgR1BSUmVnIHNj
cmF0Y2hBbmRSZXN1bHRSZWcpOwotICAgIHZvaWQgY29tcGlsZUluc3RhbmNlT2YoTm9kZSYpOwor
ICAgIHZvaWQgY29tcGlsZUluc3RhbmNlT2ZGb3JPYmplY3QoTm9kZSosIEdQUlJlZyB2YWx1ZVJl
ZywgR1BSUmVnIHByb3RvdHlwZVJlZywgR1BSUmVnIHNjcmF0Y2hBbmRSZXN1bHRSZWcpOworICAg
IHZvaWQgY29tcGlsZUluc3RhbmNlT2YoTm9kZSopOwogICAgIAogICAgIC8vIEFjY2VzcyB0byBv
dXIgZml4ZWQgY2FsbGVlIENhbGxGcmFtZS4KICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyBj
YWxsRnJhbWVTbG90KGludCBzbG90KQpAQCAtNzc0LDEzNyArNzY0LDEyOCBAQCBwdWJsaWM6CiAg
ICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVS
ZWdpc3RlciwgKG1faml0LmNvZGVCbG9jaygpLT5tX251bUNhbGxlZVJlZ2lzdGVycyArIGFyZ3Vt
ZW50VG9PcGVyYW5kKGFyZ3VtZW50KSkgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3Rl
cikpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy5wYXls
b2FkKSk7CiAgICAgfQogCi0gICAgdm9pZCBlbWl0Q2FsbChOb2RlJik7CisgICAgdm9pZCBlbWl0
Q2FsbChOb2RlKik7CiAgICAgCiAgICAgLy8gQ2FsbGVkIG9uY2UgYSBub2RlIGhhcyBjb21wbGV0
ZWQgY29kZSBnZW5lcmF0aW9uIGJ1dCBwcmlvciB0byBzZXR0aW5nCiAgICAgLy8gaXRzIHJlc3Vs
dCwgdG8gZnJlZSB1cCBpdHMgY2hpbGRyZW4uIChUaGlzIG11c3QgaGFwcGVuIHByaW9yIHRvIHNl
dHRpbmcKICAgICAvLyB0aGUgbm9kZXMgcmVzdWx0LCBzaW5jZSB0aGUgbm9kZSBtYXkgaGF2ZSB0
aGUgc2FtZSBWaXJ0dWFsUmVnaXN0ZXIgYXMKICAgICAvLyBhIGNoaWxkLCBhbmQgYXMgc3VjaCB3
aWxsIHVzZSB0aGUgc2FtZSBHZW5lcmF0aW9JbmZvKS4KLSAgICB2b2lkIHVzZUNoaWxkcmVuKE5v
ZGUmKTsKKyAgICB2b2lkIHVzZUNoaWxkcmVuKE5vZGUqKTsKIAogICAgIC8vIFRoZXNlIG1ldGhv
ZCBjYWxsZWQgdG8gaW5pdGlhbGl6ZSB0aGUgdGhlIEdlbmVyYXRpb25JbmZvCiAgICAgLy8gdG8g
ZGVzY3JpYmUgdGhlIHJlc3VsdCBvZiBhbiBvcGVyYXRpb24uCi0gICAgdm9pZCBpbnRlZ2VyUmVz
dWx0KEdQUlJlZyByZWcsIE5vZGVJbmRleCBub2RlSW5kZXgsIERhdGFGb3JtYXQgZm9ybWF0ID0g
RGF0YUZvcm1hdEludGVnZXIsIFVzZUNoaWxkcmVuTW9kZSBtb2RlID0gQ2FsbFVzZUNoaWxkcmVu
KQorICAgIHZvaWQgaW50ZWdlclJlc3VsdChHUFJSZWcgcmVnLCBOb2RlKiBub2RlLCBEYXRhRm9y
bWF0IGZvcm1hdCA9IERhdGFGb3JtYXRJbnRlZ2VyLCBVc2VDaGlsZHJlbk1vZGUgbW9kZSA9IENh
bGxVc2VDaGlsZHJlbikKICAgICB7Ci0gICAgICAgIE5vZGUmIG5vZGUgPSBhdChub2RlSW5kZXgp
OwogICAgICAgICBpZiAobW9kZSA9PSBDYWxsVXNlQ2hpbGRyZW4pCiAgICAgICAgICAgICB1c2VD
aGlsZHJlbihub2RlKTsKIAotICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVy
ID0gbm9kZS52aXJ0dWFsUmVnaXN0ZXIoKTsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1
YWxSZWdpc3RlciA9IG5vZGUtPnZpcnR1YWxSZWdpc3RlcigpOwogICAgICAgICBHZW5lcmF0aW9u
SW5mbyYgaW5mbyA9IG1fZ2VuZXJhdGlvbkluZm9bdmlydHVhbFJlZ2lzdGVyXTsKIAogICAgICAg
ICBpZiAoZm9ybWF0ID09IERhdGFGb3JtYXRJbnRlZ2VyKSB7CiAgICAgICAgICAgICBtX2ppdC5q
aXRBc3NlcnRJc0ludDMyKHJlZyk7CiAgICAgICAgICAgICBtX2dwcnMucmV0YWluKHJlZywgdmly
dHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVySW50ZWdlcik7Ci0gICAgICAgICAgICBpbmZvLmluaXRJ
bnRlZ2VyKG5vZGVJbmRleCwgbm9kZS5yZWZDb3VudCgpLCByZWcpOworICAgICAgICAgICAgaW5m
by5pbml0SW50ZWdlcihub2RlLCBub2RlLT5yZWZDb3VudCgpLCByZWcpOwogICAgICAgICB9IGVs
c2UgewogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChmb3Jt
YXQgPT0gRGF0YUZvcm1hdEpTSW50ZWdlcik7CiAgICAgICAgICAgICBtX2ppdC5qaXRBc3NlcnRJ
c0pTSW50MzIocmVnKTsKICAgICAgICAgICAgIG1fZ3Bycy5yZXRhaW4ocmVnLCB2aXJ0dWFsUmVn
aXN0ZXIsIFNwaWxsT3JkZXJKUyk7Ci0gICAgICAgICAgICBpbmZvLmluaXRKU1ZhbHVlKG5vZGVJ
bmRleCwgbm9kZS5yZWZDb3VudCgpLCByZWcsIGZvcm1hdCk7CisgICAgICAgICAgICBpbmZvLmlu
aXRKU1ZhbHVlKG5vZGUsIG5vZGUtPnJlZkNvdW50KCksIHJlZywgZm9ybWF0KTsKICNlbGlmIFVT
RShKU1ZBTFVFMzJfNjQpCiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OwogI2VuZGlmCiAgICAgICAgIH0KICAgICB9Ci0gICAgdm9pZCBpbnRlZ2VyUmVzdWx0KEdQUlJl
ZyByZWcsIE5vZGVJbmRleCBub2RlSW5kZXgsIFVzZUNoaWxkcmVuTW9kZSBtb2RlKQorICAgIHZv
aWQgaW50ZWdlclJlc3VsdChHUFJSZWcgcmVnLCBOb2RlKiBub2RlLCBVc2VDaGlsZHJlbk1vZGUg
bW9kZSkKICAgICB7Ci0gICAgICAgIGludGVnZXJSZXN1bHQocmVnLCBub2RlSW5kZXgsIERhdGFG
b3JtYXRJbnRlZ2VyLCBtb2RlKTsKKyAgICAgICAgaW50ZWdlclJlc3VsdChyZWcsIG5vZGUsIERh
dGFGb3JtYXRJbnRlZ2VyLCBtb2RlKTsKICAgICB9Ci0gICAgdm9pZCBub1Jlc3VsdChOb2RlSW5k
ZXggbm9kZUluZGV4LCBVc2VDaGlsZHJlbk1vZGUgbW9kZSA9IENhbGxVc2VDaGlsZHJlbikKKyAg
ICB2b2lkIG5vUmVzdWx0KE5vZGUqIG5vZGUsIFVzZUNoaWxkcmVuTW9kZSBtb2RlID0gQ2FsbFVz
ZUNoaWxkcmVuKQogICAgIHsKICAgICAgICAgaWYgKG1vZGUgPT0gVXNlQ2hpbGRyZW5DYWxsZWRF
eHBsaWNpdGx5KQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBOb2RlJiBub2RlID0gYXQo
bm9kZUluZGV4KTsKICAgICAgICAgdXNlQ2hpbGRyZW4obm9kZSk7CiAgICAgfQotICAgIHZvaWQg
Y2VsbFJlc3VsdChHUFJSZWcgcmVnLCBOb2RlSW5kZXggbm9kZUluZGV4LCBVc2VDaGlsZHJlbk1v
ZGUgbW9kZSA9IENhbGxVc2VDaGlsZHJlbikKKyAgICB2b2lkIGNlbGxSZXN1bHQoR1BSUmVnIHJl
ZywgTm9kZSogbm9kZSwgVXNlQ2hpbGRyZW5Nb2RlIG1vZGUgPSBDYWxsVXNlQ2hpbGRyZW4pCiAg
ICAgewotICAgICAgICBOb2RlJiBub2RlID0gYXQobm9kZUluZGV4KTsKICAgICAgICAgaWYgKG1v
ZGUgPT0gQ2FsbFVzZUNoaWxkcmVuKQogICAgICAgICAgICAgdXNlQ2hpbGRyZW4obm9kZSk7CiAK
LSAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciA9IG5vZGUudmlydHVhbFJl
Z2lzdGVyKCk7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIgPSBub2Rl
LT52aXJ0dWFsUmVnaXN0ZXIoKTsKICAgICAgICAgbV9ncHJzLnJldGFpbihyZWcsIHZpcnR1YWxS
ZWdpc3RlciwgU3BpbGxPcmRlckNlbGwpOwogICAgICAgICBHZW5lcmF0aW9uSW5mbyYgaW5mbyA9
IG1fZ2VuZXJhdGlvbkluZm9bdmlydHVhbFJlZ2lzdGVyXTsKLSAgICAgICAgaW5mby5pbml0Q2Vs
bChub2RlSW5kZXgsIG5vZGUucmVmQ291bnQoKSwgcmVnKTsKKyAgICAgICAgaW5mby5pbml0Q2Vs
bChub2RlLCBub2RlLT5yZWZDb3VudCgpLCByZWcpOwogICAgIH0KLSAgICB2b2lkIGJvb2xlYW5S
ZXN1bHQoR1BSUmVnIHJlZywgTm9kZUluZGV4IG5vZGVJbmRleCwgVXNlQ2hpbGRyZW5Nb2RlIG1v
ZGUgPSBDYWxsVXNlQ2hpbGRyZW4pCisgICAgdm9pZCBib29sZWFuUmVzdWx0KEdQUlJlZyByZWcs
IE5vZGUqIG5vZGUsIFVzZUNoaWxkcmVuTW9kZSBtb2RlID0gQ2FsbFVzZUNoaWxkcmVuKQogICAg
IHsKLSAgICAgICAgTm9kZSYgbm9kZSA9IGF0KG5vZGVJbmRleCk7CiAgICAgICAgIGlmIChtb2Rl
ID09IENhbGxVc2VDaGlsZHJlbikKICAgICAgICAgICAgIHVzZUNoaWxkcmVuKG5vZGUpOwogCi0g
ICAgICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIgPSBub2RlLnZpcnR1YWxSZWdp
c3RlcigpOworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyID0gbm9kZS0+
dmlydHVhbFJlZ2lzdGVyKCk7CiAgICAgICAgIG1fZ3Bycy5yZXRhaW4ocmVnLCB2aXJ0dWFsUmVn
aXN0ZXIsIFNwaWxsT3JkZXJCb29sZWFuKTsKICAgICAgICAgR2VuZXJhdGlvbkluZm8mIGluZm8g
PSBtX2dlbmVyYXRpb25JbmZvW3ZpcnR1YWxSZWdpc3Rlcl07Ci0gICAgICAgIGluZm8uaW5pdEJv
b2xlYW4obm9kZUluZGV4LCBub2RlLnJlZkNvdW50KCksIHJlZyk7CisgICAgICAgIGluZm8uaW5p
dEJvb2xlYW4obm9kZSwgbm9kZS0+cmVmQ291bnQoKSwgcmVnKTsKICAgICB9CiAjaWYgVVNFKEpT
VkFMVUU2NCkKLSAgICB2b2lkIGpzVmFsdWVSZXN1bHQoR1BSUmVnIHJlZywgTm9kZUluZGV4IG5v
ZGVJbmRleCwgRGF0YUZvcm1hdCBmb3JtYXQgPSBEYXRhRm9ybWF0SlMsIFVzZUNoaWxkcmVuTW9k
ZSBtb2RlID0gQ2FsbFVzZUNoaWxkcmVuKQorICAgIHZvaWQganNWYWx1ZVJlc3VsdChHUFJSZWcg
cmVnLCBOb2RlKiBub2RlLCBEYXRhRm9ybWF0IGZvcm1hdCA9IERhdGFGb3JtYXRKUywgVXNlQ2hp
bGRyZW5Nb2RlIG1vZGUgPSBDYWxsVXNlQ2hpbGRyZW4pCiAgICAgewogICAgICAgICBpZiAoZm9y
bWF0ID09IERhdGFGb3JtYXRKU0ludGVnZXIpCiAgICAgICAgICAgICBtX2ppdC5qaXRBc3NlcnRJ
c0pTSW50MzIocmVnKTsKICAgICAgICAgCi0gICAgICAgIE5vZGUmIG5vZGUgPSBhdChub2RlSW5k
ZXgpOwogICAgICAgICBpZiAobW9kZSA9PSBDYWxsVXNlQ2hpbGRyZW4pCiAgICAgICAgICAgICB1
c2VDaGlsZHJlbihub2RlKTsKIAotICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lz
dGVyID0gbm9kZS52aXJ0dWFsUmVnaXN0ZXIoKTsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHZp
cnR1YWxSZWdpc3RlciA9IG5vZGUtPnZpcnR1YWxSZWdpc3RlcigpOwogICAgICAgICBtX2dwcnMu
cmV0YWluKHJlZywgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVySlMpOwogICAgICAgICBHZW5l
cmF0aW9uSW5mbyYgaW5mbyA9IG1fZ2VuZXJhdGlvbkluZm9bdmlydHVhbFJlZ2lzdGVyXTsKLSAg
ICAgICAgaW5mby5pbml0SlNWYWx1ZShub2RlSW5kZXgsIG5vZGUucmVmQ291bnQoKSwgcmVnLCBm
b3JtYXQpOworICAgICAgICBpbmZvLmluaXRKU1ZhbHVlKG5vZGUsIG5vZGUtPnJlZkNvdW50KCks
IHJlZywgZm9ybWF0KTsKICAgICB9Ci0gICAgdm9pZCBqc1ZhbHVlUmVzdWx0KEdQUlJlZyByZWcs
IE5vZGVJbmRleCBub2RlSW5kZXgsIFVzZUNoaWxkcmVuTW9kZSBtb2RlKQorICAgIHZvaWQganNW
YWx1ZVJlc3VsdChHUFJSZWcgcmVnLCBOb2RlKiBub2RlLCBVc2VDaGlsZHJlbk1vZGUgbW9kZSkK
ICAgICB7Ci0gICAgICAgIGpzVmFsdWVSZXN1bHQocmVnLCBub2RlSW5kZXgsIERhdGFGb3JtYXRK
UywgbW9kZSk7CisgICAgICAgIGpzVmFsdWVSZXN1bHQocmVnLCBub2RlLCBEYXRhRm9ybWF0SlMs
IG1vZGUpOwogICAgIH0KICNlbGlmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgdm9pZCBqc1ZhbHVl
UmVzdWx0KEdQUlJlZyB0YWcsIEdQUlJlZyBwYXlsb2FkLCBOb2RlSW5kZXggbm9kZUluZGV4LCBE
YXRhRm9ybWF0IGZvcm1hdCA9IERhdGFGb3JtYXRKUywgVXNlQ2hpbGRyZW5Nb2RlIG1vZGUgPSBD
YWxsVXNlQ2hpbGRyZW4pCisgICAgdm9pZCBqc1ZhbHVlUmVzdWx0KEdQUlJlZyB0YWcsIEdQUlJl
ZyBwYXlsb2FkLCBOb2RlKiBub2RlLCBEYXRhRm9ybWF0IGZvcm1hdCA9IERhdGFGb3JtYXRKUywg
VXNlQ2hpbGRyZW5Nb2RlIG1vZGUgPSBDYWxsVXNlQ2hpbGRyZW4pCiAgICAgewotICAgICAgICBO
b2RlJiBub2RlID0gYXQobm9kZUluZGV4KTsKICAgICAgICAgaWYgKG1vZGUgPT0gQ2FsbFVzZUNo
aWxkcmVuKQogICAgICAgICAgICAgdXNlQ2hpbGRyZW4obm9kZSk7CiAKLSAgICAgICAgVmlydHVh
bFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciA9IG5vZGUudmlydHVhbFJlZ2lzdGVyKCk7CisgICAg
ICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIgPSBub2RlLT52aXJ0dWFsUmVnaXN0
ZXIoKTsKICAgICAgICAgbV9ncHJzLnJldGFpbih0YWcsIHZpcnR1YWxSZWdpc3RlciwgU3BpbGxP
cmRlckpTKTsKICAgICAgICAgbV9ncHJzLnJldGFpbihwYXlsb2FkLCB2aXJ0dWFsUmVnaXN0ZXIs
IFNwaWxsT3JkZXJKUyk7CiAgICAgICAgIEdlbmVyYXRpb25JbmZvJiBpbmZvID0gbV9nZW5lcmF0
aW9uSW5mb1t2aXJ0dWFsUmVnaXN0ZXJdOwotICAgICAgICBpbmZvLmluaXRKU1ZhbHVlKG5vZGVJ
bmRleCwgbm9kZS5yZWZDb3VudCgpLCB0YWcsIHBheWxvYWQsIGZvcm1hdCk7CisgICAgICAgIGlu
Zm8uaW5pdEpTVmFsdWUobm9kZSwgbm9kZS0+cmVmQ291bnQoKSwgdGFnLCBwYXlsb2FkLCBmb3Jt
YXQpOwogICAgIH0KLSAgICB2b2lkIGpzVmFsdWVSZXN1bHQoR1BSUmVnIHRhZywgR1BSUmVnIHBh
eWxvYWQsIE5vZGVJbmRleCBub2RlSW5kZXgsIFVzZUNoaWxkcmVuTW9kZSBtb2RlKQorICAgIHZv
aWQganNWYWx1ZVJlc3VsdChHUFJSZWcgdGFnLCBHUFJSZWcgcGF5bG9hZCwgTm9kZSogbm9kZSwg
VXNlQ2hpbGRyZW5Nb2RlIG1vZGUpCiAgICAgewotICAgICAgICBqc1ZhbHVlUmVzdWx0KHRhZywg
cGF5bG9hZCwgbm9kZUluZGV4LCBEYXRhRm9ybWF0SlMsIG1vZGUpOworICAgICAgICBqc1ZhbHVl
UmVzdWx0KHRhZywgcGF5bG9hZCwgbm9kZSwgRGF0YUZvcm1hdEpTLCBtb2RlKTsKICAgICB9CiAj
ZW5kaWYKLSAgICB2b2lkIHN0b3JhZ2VSZXN1bHQoR1BSUmVnIHJlZywgTm9kZUluZGV4IG5vZGVJ
bmRleCwgVXNlQ2hpbGRyZW5Nb2RlIG1vZGUgPSBDYWxsVXNlQ2hpbGRyZW4pCisgICAgdm9pZCBz
dG9yYWdlUmVzdWx0KEdQUlJlZyByZWcsIE5vZGUqIG5vZGUsIFVzZUNoaWxkcmVuTW9kZSBtb2Rl
ID0gQ2FsbFVzZUNoaWxkcmVuKQogICAgIHsKLSAgICAgICAgTm9kZSYgbm9kZSA9IGF0KG5vZGVJ
bmRleCk7CiAgICAgICAgIGlmIChtb2RlID09IENhbGxVc2VDaGlsZHJlbikKICAgICAgICAgICAg
IHVzZUNoaWxkcmVuKG5vZGUpOwogICAgICAgICAKLSAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHZp
cnR1YWxSZWdpc3RlciA9IG5vZGUudmlydHVhbFJlZ2lzdGVyKCk7CisgICAgICAgIFZpcnR1YWxS
ZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIgPSBub2RlLT52aXJ0dWFsUmVnaXN0ZXIoKTsKICAgICAg
ICAgbV9ncHJzLnJldGFpbihyZWcsIHZpcnR1YWxSZWdpc3RlciwgU3BpbGxPcmRlclN0b3JhZ2Up
OwogICAgICAgICBHZW5lcmF0aW9uSW5mbyYgaW5mbyA9IG1fZ2VuZXJhdGlvbkluZm9bdmlydHVh
bFJlZ2lzdGVyXTsKLSAgICAgICAgaW5mby5pbml0U3RvcmFnZShub2RlSW5kZXgsIG5vZGUucmVm
Q291bnQoKSwgcmVnKTsKKyAgICAgICAgaW5mby5pbml0U3RvcmFnZShub2RlLCBub2RlLT5yZWZD
b3VudCgpLCByZWcpOwogICAgIH0KLSAgICB2b2lkIGRvdWJsZVJlc3VsdChGUFJSZWcgcmVnLCBO
b2RlSW5kZXggbm9kZUluZGV4LCBVc2VDaGlsZHJlbk1vZGUgbW9kZSA9IENhbGxVc2VDaGlsZHJl
bikKKyAgICB2b2lkIGRvdWJsZVJlc3VsdChGUFJSZWcgcmVnLCBOb2RlKiBub2RlLCBVc2VDaGls
ZHJlbk1vZGUgbW9kZSA9IENhbGxVc2VDaGlsZHJlbikKICAgICB7Ci0gICAgICAgIE5vZGUmIG5v
ZGUgPSBhdChub2RlSW5kZXgpOwogICAgICAgICBpZiAobW9kZSA9PSBDYWxsVXNlQ2hpbGRyZW4p
CiAgICAgICAgICAgICB1c2VDaGlsZHJlbihub2RlKTsKIAotICAgICAgICBWaXJ0dWFsUmVnaXN0
ZXIgdmlydHVhbFJlZ2lzdGVyID0gbm9kZS52aXJ0dWFsUmVnaXN0ZXIoKTsKKyAgICAgICAgVmly
dHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciA9IG5vZGUtPnZpcnR1YWxSZWdpc3RlcigpOwog
ICAgICAgICBtX2ZwcnMucmV0YWluKHJlZywgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVyRG91
YmxlKTsKICAgICAgICAgR2VuZXJhdGlvbkluZm8mIGluZm8gPSBtX2dlbmVyYXRpb25JbmZvW3Zp
cnR1YWxSZWdpc3Rlcl07Ci0gICAgICAgIGluZm8uaW5pdERvdWJsZShub2RlSW5kZXgsIG5vZGUu
cmVmQ291bnQoKSwgcmVnKTsKKyAgICAgICAgaW5mby5pbml0RG91YmxlKG5vZGUsIG5vZGUtPnJl
ZkNvdW50KCksIHJlZyk7CiAgICAgfQotICAgIHZvaWQgaW5pdENvbnN0YW50SW5mbyhOb2RlSW5k
ZXggbm9kZUluZGV4KQorICAgIHZvaWQgaW5pdENvbnN0YW50SW5mbyhOb2RlKiBub2RlKQogICAg
IHsKLSAgICAgICAgQVNTRVJUKGlzSW50MzJDb25zdGFudChub2RlSW5kZXgpIHx8IGlzTnVtYmVy
Q29uc3RhbnQobm9kZUluZGV4KSB8fCBpc0pTQ29uc3RhbnQobm9kZUluZGV4KSk7Ci0gICAgICAg
IE5vZGUmIG5vZGUgPSBhdChub2RlSW5kZXgpOwotICAgICAgICBtX2dlbmVyYXRpb25JbmZvW25v
ZGUudmlydHVhbFJlZ2lzdGVyKCldLmluaXRDb25zdGFudChub2RlSW5kZXgsIG5vZGUucmVmQ291
bnQoKSk7CisgICAgICAgIEFTU0VSVChpc0ludDMyQ29uc3RhbnQobm9kZSkgfHwgaXNOdW1iZXJD
b25zdGFudChub2RlKSB8fCBpc0pTQ29uc3RhbnQobm9kZSkpOworICAgICAgICBtX2dlbmVyYXRp
b25JbmZvW25vZGUtPnZpcnR1YWxSZWdpc3RlcigpXS5pbml0Q29uc3RhbnQobm9kZSwgbm9kZS0+
cmVmQ291bnQoKSk7CiAgICAgfQogICAgIAogICAgIC8vIFRoZXNlIG1ldGhvZHMgYWRkIGNhbGxz
IHRvIEMrKyBoZWxwZXIgZnVuY3Rpb25zLgpAQCAtMjAyOCw4OSArMjAwOSw4OCBAQCBwdWJsaWM6
CiAgICAgdm9pZCBjaGVja0NvbnNpc3RlbmN5KCkgeyB9CiAjZW5kaWYKIAotICAgIGJvb2wgaXNJ
bnRlZ2VyKE5vZGVJbmRleCBub2RlSW5kZXgpCisgICAgYm9vbCBpc0ludGVnZXIoTm9kZSogbm9k
ZSkKICAgICB7Ci0gICAgICAgIE5vZGUmIG5vZGUgPSBhdChub2RlSW5kZXgpOwotICAgICAgICBp
ZiAobm9kZS5oYXNJbnQzMlJlc3VsdCgpKQorICAgICAgICBpZiAobm9kZS0+aGFzSW50MzJSZXN1
bHQoKSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgICAgIGlmIChpc0ludDMyQ29u
c3RhbnQobm9kZUluZGV4KSkKKyAgICAgICAgaWYgKGlzSW50MzJDb25zdGFudChub2RlKSkKICAg
ICAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFs
UmVnaXN0ZXIgPSBub2RlLnZpcnR1YWxSZWdpc3RlcigpOworICAgICAgICBWaXJ0dWFsUmVnaXN0
ZXIgdmlydHVhbFJlZ2lzdGVyID0gbm9kZS0+dmlydHVhbFJlZ2lzdGVyKCk7CiAgICAgICAgIEdl
bmVyYXRpb25JbmZvJiBpbmZvID0gbV9nZW5lcmF0aW9uSW5mb1t2aXJ0dWFsUmVnaXN0ZXJdOwog
ICAgICAgICAKICAgICAgICAgcmV0dXJuIGluZm8uaXNKU0ludGVnZXIoKTsKICAgICB9CiAgICAg
Ci0gICAgYm9vbCBjb21wYXJlKE5vZGUmLCBNYWNyb0Fzc2VtYmxlcjo6UmVsYXRpb25hbENvbmRp
dGlvbiwgTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUNvbmRpdGlvbiwgU19ERkdPcGVyYXRpb25fRUpK
KTsKLSAgICBib29sIGNvbXBpbGVQZWVwSG9sZUJyYW5jaChOb2RlJiwgTWFjcm9Bc3NlbWJsZXI6
OlJlbGF0aW9uYWxDb25kaXRpb24sIE1hY3JvQXNzZW1ibGVyOjpEb3VibGVDb25kaXRpb24sIFNf
REZHT3BlcmF0aW9uX0VKSik7Ci0gICAgdm9pZCBjb21waWxlUGVlcEhvbGVJbnRlZ2VyQnJhbmNo
KE5vZGUmLCBOb2RlSW5kZXggYnJhbmNoTm9kZUluZGV4LCBKSVRDb21waWxlcjo6UmVsYXRpb25h
bENvbmRpdGlvbik7Ci0gICAgdm9pZCBjb21waWxlUGVlcEhvbGVEb3VibGVCcmFuY2goTm9kZSYs
IE5vZGVJbmRleCBicmFuY2hOb2RlSW5kZXgsIEpJVENvbXBpbGVyOjpEb3VibGVDb25kaXRpb24p
OwotICAgIHZvaWQgY29tcGlsZVBlZXBIb2xlT2JqZWN0RXF1YWxpdHkoTm9kZSYsIE5vZGVJbmRl
eCBicmFuY2hOb2RlSW5kZXgpOwotICAgIHZvaWQgY29tcGlsZVBlZXBIb2xlT2JqZWN0VG9PYmpl
Y3RPck90aGVyRXF1YWxpdHkoRWRnZSBsZWZ0Q2hpbGQsIEVkZ2UgcmlnaHRDaGlsZCwgTm9kZUlu
ZGV4IGJyYW5jaE5vZGVJbmRleCk7Ci0gICAgdm9pZCBjb21waWxlT2JqZWN0RXF1YWxpdHkoTm9k
ZSYpOworICAgIGJvb2wgY29tcGFyZShOb2RlKiwgTWFjcm9Bc3NlbWJsZXI6OlJlbGF0aW9uYWxD
b25kaXRpb24sIE1hY3JvQXNzZW1ibGVyOjpEb3VibGVDb25kaXRpb24sIFNfREZHT3BlcmF0aW9u
X0VKSik7CisgICAgYm9vbCBjb21waWxlUGVlcEhvbGVCcmFuY2goTm9kZSosIE1hY3JvQXNzZW1i
bGVyOjpSZWxhdGlvbmFsQ29uZGl0aW9uLCBNYWNyb0Fzc2VtYmxlcjo6RG91YmxlQ29uZGl0aW9u
LCBTX0RGR09wZXJhdGlvbl9FSkopOworICAgIHZvaWQgY29tcGlsZVBlZXBIb2xlSW50ZWdlckJy
YW5jaChOb2RlKiwgTm9kZSogYnJhbmNoTm9kZSwgSklUQ29tcGlsZXI6OlJlbGF0aW9uYWxDb25k
aXRpb24pOworICAgIHZvaWQgY29tcGlsZVBlZXBIb2xlRG91YmxlQnJhbmNoKE5vZGUqLCBOb2Rl
KiBicmFuY2hOb2RlLCBKSVRDb21waWxlcjo6RG91YmxlQ29uZGl0aW9uKTsKKyAgICB2b2lkIGNv
bXBpbGVQZWVwSG9sZU9iamVjdEVxdWFsaXR5KE5vZGUqLCBOb2RlKiBicmFuY2hOb2RlKTsKKyAg
ICB2b2lkIGNvbXBpbGVQZWVwSG9sZU9iamVjdFRvT2JqZWN0T3JPdGhlckVxdWFsaXR5KEVkZ2Ug
bGVmdENoaWxkLCBFZGdlIHJpZ2h0Q2hpbGQsIE5vZGUqIGJyYW5jaE5vZGUpOworICAgIHZvaWQg
Y29tcGlsZU9iamVjdEVxdWFsaXR5KE5vZGUqKTsKICAgICB2b2lkIGNvbXBpbGVPYmplY3RUb09i
amVjdE9yT3RoZXJFcXVhbGl0eShFZGdlIGxlZnRDaGlsZCwgRWRnZSByaWdodENoaWxkKTsKLSAg
ICB2b2lkIGNvbXBpbGVWYWx1ZUFkZChOb2RlJik7CisgICAgdm9pZCBjb21waWxlVmFsdWVBZGQo
Tm9kZSopOwogICAgIHZvaWQgY29tcGlsZU5vblN0cmluZ0NlbGxPck90aGVyTG9naWNhbE5vdChF
ZGdlIHZhbHVlLCBib29sIG5lZWRTcGVjdWxhdGlvbkNoZWNrKTsKLSAgICB2b2lkIGNvbXBpbGVM
b2dpY2FsTm90KE5vZGUmKTsKKyAgICB2b2lkIGNvbXBpbGVMb2dpY2FsTm90KE5vZGUqKTsKICAg
ICB2b2lkIGVtaXROb25TdHJpbmdDZWxsT3JPdGhlckJyYW5jaChFZGdlIHZhbHVlLCBCbG9ja0lu
ZGV4IHRha2VuLCBCbG9ja0luZGV4IG5vdFRha2VuLCBib29sIG5lZWRTcGVjdWxhdGlvbkNoZWNr
KTsKLSAgICB2b2lkIGVtaXRCcmFuY2goTm9kZSYpOworICAgIHZvaWQgZW1pdEJyYW5jaChOb2Rl
Kik7CiAgICAgCi0gICAgdm9pZCBjb21waWxlSW50ZWdlckNvbXBhcmUoTm9kZSYsIE1hY3JvQXNz
ZW1ibGVyOjpSZWxhdGlvbmFsQ29uZGl0aW9uKTsKLSAgICB2b2lkIGNvbXBpbGVEb3VibGVDb21w
YXJlKE5vZGUmLCBNYWNyb0Fzc2VtYmxlcjo6RG91YmxlQ29uZGl0aW9uKTsKKyAgICB2b2lkIGNv
bXBpbGVJbnRlZ2VyQ29tcGFyZShOb2RlKiwgTWFjcm9Bc3NlbWJsZXI6OlJlbGF0aW9uYWxDb25k
aXRpb24pOworICAgIHZvaWQgY29tcGlsZURvdWJsZUNvbXBhcmUoTm9kZSosIE1hY3JvQXNzZW1i
bGVyOjpEb3VibGVDb25kaXRpb24pOwogICAgIAotICAgIGJvb2wgY29tcGlsZVN0cmljdEVxRm9y
Q29uc3RhbnQoTm9kZSYsIEVkZ2UgdmFsdWUsIEpTVmFsdWUgY29uc3RhbnQpOworICAgIGJvb2wg
Y29tcGlsZVN0cmljdEVxRm9yQ29uc3RhbnQoTm9kZSosIEVkZ2UgdmFsdWUsIEpTVmFsdWUgY29u
c3RhbnQpOwogICAgIAotICAgIGJvb2wgY29tcGlsZVN0cmljdEVxKE5vZGUmKTsKKyAgICBib29s
IGNvbXBpbGVTdHJpY3RFcShOb2RlKik7CiAgICAgCi0gICAgdm9pZCBjb21waWxlQWxsb2NhdGVQ
cm9wZXJ0eVN0b3JhZ2UoTm9kZSYpOwotICAgIHZvaWQgY29tcGlsZVJlYWxsb2NhdGVQcm9wZXJ0
eVN0b3JhZ2UoTm9kZSYpOworICAgIHZvaWQgY29tcGlsZUFsbG9jYXRlUHJvcGVydHlTdG9yYWdl
KE5vZGUqKTsKKyAgICB2b2lkIGNvbXBpbGVSZWFsbG9jYXRlUHJvcGVydHlTdG9yYWdlKE5vZGUq
KTsKICAgICAKICNpZiBVU0UoSlNWQUxVRTMyXzY0KQogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEJh
c2VPcGVyYW5kVHlwZSwgdHlwZW5hbWUgUHJvcGVydHlPcGVyYW5kVHlwZSwgdHlwZW5hbWUgVmFs
dWVPcGVyYW5kVHlwZSwgdHlwZW5hbWUgVGFnVHlwZT4KLSAgICB2b2lkIGNvbXBpbGVDb250aWd1
b3VzUHV0QnlWYWwoTm9kZSYsIEJhc2VPcGVyYW5kVHlwZSYsIFByb3BlcnR5T3BlcmFuZFR5cGUm
LCBWYWx1ZU9wZXJhbmRUeXBlJiwgR1BSUmVnIHZhbHVlUGF5bG9hZFJlZywgVGFnVHlwZSB2YWx1
ZVRhZyk7CisgICAgdm9pZCBjb21waWxlQ29udGlndW91c1B1dEJ5VmFsKE5vZGUqLCBCYXNlT3Bl
cmFuZFR5cGUmLCBQcm9wZXJ0eU9wZXJhbmRUeXBlJiwgVmFsdWVPcGVyYW5kVHlwZSYsIEdQUlJl
ZyB2YWx1ZVBheWxvYWRSZWcsIFRhZ1R5cGUgdmFsdWVUYWcpOwogI2VuZGlmCi0gICAgdm9pZCBj
b21waWxlRG91YmxlUHV0QnlWYWwoTm9kZSYsIFNwZWN1bGF0ZUNlbGxPcGVyYW5kJiBiYXNlLCBT
cGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQmIHByb3BlcnR5KTsKKyAgICB2b2lkIGNvbXBpbGVE
b3VibGVQdXRCeVZhbChOb2RlKiwgU3BlY3VsYXRlQ2VsbE9wZXJhbmQmIGJhc2UsIFNwZWN1bGF0
ZVN0cmljdEludDMyT3BlcmFuZCYgcHJvcGVydHkpOwogICAgIGJvb2wgcHV0QnlWYWxXaWxsTmVl
ZEV4dHJhUmVnaXN0ZXIoQXJyYXlNb2RlIGFycmF5TW9kZSkKICAgICB7CiAgICAgICAgIHJldHVy
biBhcnJheU1vZGUubWF5U3RvcmVUb0hvbGUoKTsKICAgICB9CiAgICAgR1BSUmVnIHRlbXBvcmFy
eVJlZ2lzdGVyRm9yUHV0QnlWYWwoR1BSVGVtcG9yYXJ5JiwgQXJyYXlNb2RlKTsKLSAgICBHUFJS
ZWcgdGVtcG9yYXJ5UmVnaXN0ZXJGb3JQdXRCeVZhbChHUFJUZW1wb3JhcnkmIHRlbXBvcmFyeSwg
Tm9kZSYgbm9kZSkKKyAgICBHUFJSZWcgdGVtcG9yYXJ5UmVnaXN0ZXJGb3JQdXRCeVZhbChHUFJU
ZW1wb3JhcnkmIHRlbXBvcmFyeSwgTm9kZSogbm9kZSkKICAgICB7CiAgICAgICAgIHJldHVybiB0
ZW1wb3JhcnlSZWdpc3RlckZvclB1dEJ5VmFsKHRlbXBvcmFyeSwgbm9kZS5hcnJheU1vZGUoKSk7
CiAgICAgfQogICAgIAotICAgIHZvaWQgY29tcGlsZUdldENoYXJDb2RlQXQoTm9kZSYpOwotICAg
IHZvaWQgY29tcGlsZUdldEJ5VmFsT25TdHJpbmcoTm9kZSYpOworICAgIHZvaWQgY29tcGlsZUdl
dENoYXJDb2RlQXQoTm9kZSopOworICAgIHZvaWQgY29tcGlsZUdldEJ5VmFsT25TdHJpbmcoTm9k
ZSopOwogCi0gICAgdm9pZCBjb21waWxlR2V0QnlWYWxPbkFyZ3VtZW50cyhOb2RlJik7Ci0gICAg
dm9pZCBjb21waWxlR2V0QXJndW1lbnRzTGVuZ3RoKE5vZGUmKTsKKyAgICB2b2lkIGNvbXBpbGVH
ZXRCeVZhbE9uQXJndW1lbnRzKE5vZGUqKTsKKyAgICB2b2lkIGNvbXBpbGVHZXRBcmd1bWVudHNM
ZW5ndGgoTm9kZSopOwogICAgIAotICAgIHZvaWQgY29tcGlsZUdldEFycmF5TGVuZ3RoKE5vZGUm
KTsKKyAgICB2b2lkIGNvbXBpbGVHZXRBcnJheUxlbmd0aChOb2RlKik7CiAgICAgCi0gICAgdm9p
ZCBjb21waWxlVmFsdWVUb0ludDMyKE5vZGUmKTsKLSAgICB2b2lkIGNvbXBpbGVVSW50MzJUb051
bWJlcihOb2RlJik7Ci0gICAgdm9pZCBjb21waWxlRG91YmxlQXNJbnQzMihOb2RlJik7Ci0gICAg
dm9pZCBjb21waWxlSW50MzJUb0RvdWJsZShOb2RlJik7Ci0gICAgdm9pZCBjb21waWxlQWRkKE5v
ZGUmKTsKLSAgICB2b2lkIGNvbXBpbGVBcml0aFN1YihOb2RlJik7Ci0gICAgdm9pZCBjb21waWxl
QXJpdGhOZWdhdGUoTm9kZSYpOwotICAgIHZvaWQgY29tcGlsZUFyaXRoTXVsKE5vZGUmKTsKKyAg
ICB2b2lkIGNvbXBpbGVWYWx1ZVRvSW50MzIoTm9kZSopOworICAgIHZvaWQgY29tcGlsZVVJbnQz
MlRvTnVtYmVyKE5vZGUqKTsKKyAgICB2b2lkIGNvbXBpbGVEb3VibGVBc0ludDMyKE5vZGUqKTsK
KyAgICB2b2lkIGNvbXBpbGVJbnQzMlRvRG91YmxlKE5vZGUqKTsKKyAgICB2b2lkIGNvbXBpbGVB
ZGQoTm9kZSopOworICAgIHZvaWQgY29tcGlsZUFyaXRoU3ViKE5vZGUqKTsKKyAgICB2b2lkIGNv
bXBpbGVBcml0aE5lZ2F0ZShOb2RlKik7CisgICAgdm9pZCBjb21waWxlQXJpdGhNdWwoTm9kZSop
OwogI2lmIENQVShYODYpIHx8IENQVShYODZfNjQpCi0gICAgdm9pZCBjb21waWxlSW50ZWdlckFy
aXRoRGl2Rm9yWDg2KE5vZGUmKTsKKyAgICB2b2lkIGNvbXBpbGVJbnRlZ2VyQXJpdGhEaXZGb3JY
ODYoTm9kZSopOwogI2VuZGlmCi0gICAgdm9pZCBjb21waWxlQXJpdGhNb2QoTm9kZSYpOwotICAg
IHZvaWQgY29tcGlsZVNvZnRNb2R1bG8oTm9kZSYpOwotICAgIHZvaWQgY29tcGlsZUdldEluZGV4
ZWRQcm9wZXJ0eVN0b3JhZ2UoTm9kZSYpOwotICAgIHZvaWQgY29tcGlsZUdldEJ5VmFsT25JbnRU
eXBlZEFycmF5KGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yJiwgTm9kZSYsIHNpemVfdCBlbGVt
ZW50U2l6ZSwgVHlwZWRBcnJheVNpZ25lZG5lc3MpOwotICAgIHZvaWQgY29tcGlsZVB1dEJ5VmFs
Rm9ySW50VHlwZWRBcnJheShjb25zdCBUeXBlZEFycmF5RGVzY3JpcHRvciYsIEdQUlJlZyBiYXNl
LCBHUFJSZWcgcHJvcGVydHksIE5vZGUmLCBzaXplX3QgZWxlbWVudFNpemUsIFR5cGVkQXJyYXlT
aWduZWRuZXNzLCBUeXBlZEFycmF5Um91bmRpbmcgPSBUcnVuY2F0ZVJvdW5kaW5nKTsKLSAgICB2
b2lkIGNvbXBpbGVHZXRCeVZhbE9uRmxvYXRUeXBlZEFycmF5KGNvbnN0IFR5cGVkQXJyYXlEZXNj
cmlwdG9yJiwgTm9kZSYsIHNpemVfdCBlbGVtZW50U2l6ZSk7Ci0gICAgdm9pZCBjb21waWxlUHV0
QnlWYWxGb3JGbG9hdFR5cGVkQXJyYXkoY29uc3QgVHlwZWRBcnJheURlc2NyaXB0b3ImLCBHUFJS
ZWcgYmFzZSwgR1BSUmVnIHByb3BlcnR5LCBOb2RlJiwgc2l6ZV90IGVsZW1lbnRTaXplKTsKLSAg
ICB2b2lkIGNvbXBpbGVOZXdGdW5jdGlvbk5vQ2hlY2soTm9kZSYpOwotICAgIHZvaWQgY29tcGls
ZU5ld0Z1bmN0aW9uRXhwcmVzc2lvbihOb2RlJik7Ci0gICAgYm9vbCBjb21waWxlUmVnRXhwRXhl
YyhOb2RlJik7CisgICAgdm9pZCBjb21waWxlQXJpdGhNb2QoTm9kZSopOworICAgIHZvaWQgY29t
cGlsZVNvZnRNb2R1bG8oTm9kZSopOworICAgIHZvaWQgY29tcGlsZUdldEluZGV4ZWRQcm9wZXJ0
eVN0b3JhZ2UoTm9kZSopOworICAgIHZvaWQgY29tcGlsZUdldEJ5VmFsT25JbnRUeXBlZEFycmF5
KGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yJiwgTm9kZSosIHNpemVfdCBlbGVtZW50U2l6ZSwg
VHlwZWRBcnJheVNpZ25lZG5lc3MpOworICAgIHZvaWQgY29tcGlsZVB1dEJ5VmFsRm9ySW50VHlw
ZWRBcnJheShjb25zdCBUeXBlZEFycmF5RGVzY3JpcHRvciYsIEdQUlJlZyBiYXNlLCBHUFJSZWcg
cHJvcGVydHksIE5vZGUqLCBzaXplX3QgZWxlbWVudFNpemUsIFR5cGVkQXJyYXlTaWduZWRuZXNz
LCBUeXBlZEFycmF5Um91bmRpbmcgPSBUcnVuY2F0ZVJvdW5kaW5nKTsKKyAgICB2b2lkIGNvbXBp
bGVHZXRCeVZhbE9uRmxvYXRUeXBlZEFycmF5KGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yJiwg
Tm9kZSosIHNpemVfdCBlbGVtZW50U2l6ZSk7CisgICAgdm9pZCBjb21waWxlUHV0QnlWYWxGb3JG
bG9hdFR5cGVkQXJyYXkoY29uc3QgVHlwZWRBcnJheURlc2NyaXB0b3ImLCBHUFJSZWcgYmFzZSwg
R1BSUmVnIHByb3BlcnR5LCBOb2RlKiwgc2l6ZV90IGVsZW1lbnRTaXplKTsKKyAgICB2b2lkIGNv
bXBpbGVOZXdGdW5jdGlvbk5vQ2hlY2soTm9kZSopOworICAgIHZvaWQgY29tcGlsZU5ld0Z1bmN0
aW9uRXhwcmVzc2lvbihOb2RlKik7CisgICAgYm9vbCBjb21waWxlUmVnRXhwRXhlYyhOb2RlKik7
CiAgICAgCiAgICAgLy8gc2l6ZSBjYW4gYmUgYW4gaW1tZWRpYXRlIG9yIGEgcmVnaXN0ZXIsIGFu
ZCBtdXN0IGJlIGluIGJ5dGVzLiBJZiBzaXplIGlzIGEgcmVnaXN0ZXIsCiAgICAgLy8gaXQgbXVz
dCBiZSBhIGRpZmZlcmVudCByZWdpc3RlciB0aGFuIHJlc3VsdEdQUi4gRW1pdHMgY29kZSB0aGF0
IHBsYWNlIGEgcG9pbnRlciB0bwpAQCAtMjEyMiwxMyArMjEwMiw2IEBAIHB1YmxpYzoKICAgICAg
ICAgCiAgICAgICAgIG1faml0LmxvYWRQdHIoJmNvcGllZEFsbG9jYXRvci0+bV9jdXJyZW50UmVt
YWluaW5nLCByZXN1bHRHUFIpOwogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBzbG93UGF0
aCA9IG1faml0LmJyYW5jaFN1YlB0cihKSVRDb21waWxlcjo6U2lnbmVkLCBzaXplLCByZXN1bHRH
UFIpOwotI2lmIDAKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZG9uZSA9IG1faml0Lmp1
bXAoKTsKLSAgICAgICAgc2xvd1BhdGgxLmxpbmsoJm1faml0KTsKLSAgICAgICAgbV9qaXQuYnJl
YWtwb2ludCgpOwotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBzbG93UGF0aCA9IG1faml0
Lmp1bXAoKTsKLSAgICAgICAgZG9uZS5saW5rKCZtX2ppdCk7Ci0jZW5kaWYKICAgICAgICAgbV9q
aXQuc3RvcmVQdHIocmVzdWx0R1BSLCAmY29waWVkQWxsb2NhdG9yLT5tX2N1cnJlbnRSZW1haW5p
bmcpOwogICAgICAgICBtX2ppdC5uZWdQdHIocmVzdWx0R1BSKTsKICAgICAgICAgbV9qaXQuYWRk
UHRyKEpJVENvbXBpbGVyOjpBYnNvbHV0ZUFkZHJlc3MoJmNvcGllZEFsbG9jYXRvci0+bV9jdXJy
ZW50UGF5bG9hZEVuZCksIHJlc3VsdEdQUik7CkBAIC0yMTc5LDIzICsyMTUyLDIzIEBAIHB1Ymxp
YzoKICNlbmRpZgogCiAgICAgLy8gQWRkIGEgc3BlY3VsYXRpb24gY2hlY2sgd2l0aG91dCBhZGRp
dGlvbmFsIHJlY292ZXJ5LgotICAgIHZvaWQgc3BlY3VsYXRpb25DaGVjayhFeGl0S2luZCwgSlNW
YWx1ZVNvdXJjZSwgTm9kZUluZGV4LCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBqdW1wVG9GYWlsKTsK
KyAgICB2b2lkIHNwZWN1bGF0aW9uQ2hlY2soRXhpdEtpbmQsIEpTVmFsdWVTb3VyY2UsIE5vZGUq
LCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBqdW1wVG9GYWlsKTsKICAgICB2b2lkIHNwZWN1bGF0aW9u
Q2hlY2soRXhpdEtpbmQsIEpTVmFsdWVTb3VyY2UsIEVkZ2UsIE1hY3JvQXNzZW1ibGVyOjpKdW1w
IGp1bXBUb0ZhaWwpOwogICAgIC8vIEFkZCBhIHNwZWN1bGF0aW9uIGNoZWNrIHdpdGhvdXQgYWRk
aXRpb25hbCByZWNvdmVyeSwgYW5kIHdpdGggYSBwcm9taXNlIHRvIHN1cHBseSBhIGp1bXAgbGF0
ZXIuCi0gICAgT1NSRXhpdEp1bXBQbGFjZWhvbGRlciBzcGVjdWxhdGlvbkNoZWNrKEV4aXRLaW5k
LCBKU1ZhbHVlU291cmNlLCBOb2RlSW5kZXgpOworICAgIE9TUkV4aXRKdW1wUGxhY2Vob2xkZXIg
c3BlY3VsYXRpb25DaGVjayhFeGl0S2luZCwgSlNWYWx1ZVNvdXJjZSwgTm9kZSopOwogICAgIE9T
UkV4aXRKdW1wUGxhY2Vob2xkZXIgc3BlY3VsYXRpb25DaGVjayhFeGl0S2luZCwgSlNWYWx1ZVNv
dXJjZSwgRWRnZSk7CiAgICAgLy8gQWRkIGEgc2V0IG9mIHNwZWN1bGF0aW9uIGNoZWNrcyB3aXRo
b3V0IGFkZGl0aW9uYWwgcmVjb3ZlcnkuCi0gICAgdm9pZCBzcGVjdWxhdGlvbkNoZWNrKEV4aXRL
aW5kLCBKU1ZhbHVlU291cmNlLCBOb2RlSW5kZXgsIGNvbnN0IE1hY3JvQXNzZW1ibGVyOjpKdW1w
TGlzdCYganVtcHNUb0ZhaWwpOworICAgIHZvaWQgc3BlY3VsYXRpb25DaGVjayhFeGl0S2luZCwg
SlNWYWx1ZVNvdXJjZSwgTm9kZSosIGNvbnN0IE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCYganVt
cHNUb0ZhaWwpOwogICAgIHZvaWQgc3BlY3VsYXRpb25DaGVjayhFeGl0S2luZCwgSlNWYWx1ZVNv
dXJjZSwgRWRnZSwgY29uc3QgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0JiBqdW1wc1RvRmFpbCk7
CiAgICAgLy8gQWRkIGEgc3BlY3VsYXRpb24gY2hlY2sgd2l0aCBhZGRpdGlvbmFsIHJlY292ZXJ5
LgotICAgIHZvaWQgc3BlY3VsYXRpb25DaGVjayhFeGl0S2luZCwgSlNWYWx1ZVNvdXJjZSwgTm9k
ZUluZGV4LCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBqdW1wVG9GYWlsLCBjb25zdCBTcGVjdWxhdGlv
blJlY292ZXJ5Jik7CisgICAgdm9pZCBzcGVjdWxhdGlvbkNoZWNrKEV4aXRLaW5kLCBKU1ZhbHVl
U291cmNlLCBOb2RlKiwgTWFjcm9Bc3NlbWJsZXI6Okp1bXAganVtcFRvRmFpbCwgY29uc3QgU3Bl
Y3VsYXRpb25SZWNvdmVyeSYpOwogICAgIHZvaWQgc3BlY3VsYXRpb25DaGVjayhFeGl0S2luZCwg
SlNWYWx1ZVNvdXJjZSwgRWRnZSwgTWFjcm9Bc3NlbWJsZXI6Okp1bXAganVtcFRvRmFpbCwgY29u
c3QgU3BlY3VsYXRpb25SZWNvdmVyeSYpOwogICAgIC8vIFVzZSB0aGlzIGxpa2UgeW91IHdvdWxk
IHVzZSBzcGVjdWxhdGlvbkNoZWNrKCksIGV4Y2VwdCB0aGF0IHlvdSBkb24ndCBwYXNzIGl0IGEg
anVtcAogICAgIC8vIChiZWNhdXNlIHlvdSBkb24ndCBoYXZlIHRvIGV4ZWN1dGUgYSBicmFuY2g7
IHRoYXQncyBraW5kIG9mIHRoZSB3aG9sZSBwb2ludCksIGFuZCB5b3UKICAgICAvLyBtdXN0IHJl
Z2lzdGVyIHRoZSByZXR1cm5lZCBXYXRjaHBvaW50IHdpdGggc29tZXRoaW5nIHJlbGV2YW50LiBJ
biBnZW5lcmFsLCB0aGlzIHNob3VsZAogICAgIC8vIGJlIHVzZWQgd2l0aCBleHRyZW1lIGNhcmUu
IFVzZSBzcGVjdWxhdGlvbkNoZWNrKCkgdW5sZXNzIHlvdSd2ZSBnb3QgYW4gYW1hemluZyByZWFz
b24KICAgICAvLyBub3QgdG8uCi0gICAgSnVtcFJlcGxhY2VtZW50V2F0Y2hwb2ludCogc3BlY3Vs
YXRpb25XYXRjaHBvaW50KEV4aXRLaW5kLCBKU1ZhbHVlU291cmNlLCBOb2RlSW5kZXgpOworICAg
IEp1bXBSZXBsYWNlbWVudFdhdGNocG9pbnQqIHNwZWN1bGF0aW9uV2F0Y2hwb2ludChFeGl0S2lu
ZCwgSlNWYWx1ZVNvdXJjZSwgTm9kZSopOwogICAgIC8vIFRoZSBkZWZhdWx0IGZvciBzcGVjdWxh
dGlvbiB3YXRjaHBvaW50cyBpcyB0aGF0IHRoZXkncmUgdW5jb3VudGVkLCBiZWNhdXNlIHRoZQog
ICAgIC8vIGFjdCBvZiBmaXJpbmcgYSB3YXRjaHBvaW50IGludmFsaWRhdGVzIGl0LiBTbywgZnV0
dXJlIHJlY29tcGlsYXRpb25zIHdpbGwgbm90CiAgICAgLy8gYXR0ZW1wdCB0byBzZXQgdGhpcyB3
YXRjaHBvaW50IGFnYWluLgpAQCAtMjIwNiwxNCArMjE3OSwxNCBAQCBwdWJsaWM6CiAgICAgCiAg
ICAgLy8gTm90ZTogbm90IHNwZWNpZnlpbmcgdGhlIHZhbHVlUmVjb3ZlcnkgYXJndW1lbnQgKGxl
YXZpbmcgaXQgYXMgVmFsdWVSZWNvdmVyeSgpKSBpbXBsaWVzCiAgICAgLy8gdGhhdCB5b3UndmUg
ZW5zdXJlZCB0aGF0IHRoZXJlIGV4aXN0cyBhIE1vdkhpbnQgcHJpb3IgdG8geW91ciB1c2Ugb2Yg
Zm9yd2FyZFNwZWN1bGF0aW9uQ2hlY2soKS4KLSAgICB2b2lkIGZvcndhcmRTcGVjdWxhdGlvbkNo
ZWNrKEV4aXRLaW5kLCBKU1ZhbHVlU291cmNlLCBOb2RlSW5kZXgsIE1hY3JvQXNzZW1ibGVyOjpK
dW1wIGp1bXBUb0ZhaWwsIGNvbnN0IFZhbHVlUmVjb3ZlcnkmID0gVmFsdWVSZWNvdmVyeSgpKTsK
LSAgICB2b2lkIGZvcndhcmRTcGVjdWxhdGlvbkNoZWNrKEV4aXRLaW5kLCBKU1ZhbHVlU291cmNl
LCBOb2RlSW5kZXgsIGNvbnN0IE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCYganVtcHNUb0ZhaWws
IGNvbnN0IFZhbHVlUmVjb3ZlcnkmID0gVmFsdWVSZWNvdmVyeSgpKTsKLSAgICB2b2lkIHNwZWN1
bGF0aW9uQ2hlY2soRXhpdEtpbmQsIEpTVmFsdWVTb3VyY2UsIE5vZGVJbmRleCwgTWFjcm9Bc3Nl
bWJsZXI6Okp1bXAganVtcFRvRmFpbCwgU3BlY3VsYXRpb25EaXJlY3Rpb24pOwotICAgIHZvaWQg
c3BlY3VsYXRpb25DaGVjayhFeGl0S2luZCwgSlNWYWx1ZVNvdXJjZSwgTm9kZUluZGV4LCBNYWNy
b0Fzc2VtYmxlcjo6SnVtcCBqdW1wVG9GYWlsLCBjb25zdCBTcGVjdWxhdGlvblJlY292ZXJ5Jiwg
U3BlY3VsYXRpb25EaXJlY3Rpb24pOworICAgIHZvaWQgZm9yd2FyZFNwZWN1bGF0aW9uQ2hlY2so
RXhpdEtpbmQsIEpTVmFsdWVTb3VyY2UsIE5vZGUqLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBqdW1w
VG9GYWlsLCBjb25zdCBWYWx1ZVJlY292ZXJ5JiA9IFZhbHVlUmVjb3ZlcnkoKSk7CisgICAgdm9p
ZCBmb3J3YXJkU3BlY3VsYXRpb25DaGVjayhFeGl0S2luZCwgSlNWYWx1ZVNvdXJjZSwgTm9kZSos
IGNvbnN0IE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCYganVtcHNUb0ZhaWwsIGNvbnN0IFZhbHVl
UmVjb3ZlcnkmID0gVmFsdWVSZWNvdmVyeSgpKTsKKyAgICB2b2lkIHNwZWN1bGF0aW9uQ2hlY2so
RXhpdEtpbmQsIEpTVmFsdWVTb3VyY2UsIE5vZGUqLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBqdW1w
VG9GYWlsLCBTcGVjdWxhdGlvbkRpcmVjdGlvbik7CisgICAgdm9pZCBzcGVjdWxhdGlvbkNoZWNr
KEV4aXRLaW5kLCBKU1ZhbHVlU291cmNlLCBOb2RlKiwgTWFjcm9Bc3NlbWJsZXI6Okp1bXAganVt
cFRvRmFpbCwgY29uc3QgU3BlY3VsYXRpb25SZWNvdmVyeSYsIFNwZWN1bGF0aW9uRGlyZWN0aW9u
KTsKICAgICAvLyBDYWxsZWQgd2hlbiB3ZSBzdGF0aWNhbGx5IGRldGVybWluZSB0aGF0IGEgc3Bl
Y3VsYXRpb24gd2lsbCBmYWlsLgotICAgIHZvaWQgdGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRp
b24oRXhpdEtpbmQsIEpTVmFsdWVSZWdzLCBOb2RlSW5kZXgpOworICAgIHZvaWQgdGVybWluYXRl
U3BlY3VsYXRpdmVFeGVjdXRpb24oRXhpdEtpbmQsIEpTVmFsdWVSZWdzLCBOb2RlKik7CiAgICAg
dm9pZCB0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihFeGl0S2luZCwgSlNWYWx1ZVJlZ3Ms
IEVkZ2UpOwotICAgIHZvaWQgdGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oRXhpdEtpbmQs
IEpTVmFsdWVSZWdzLCBOb2RlSW5kZXgsIFNwZWN1bGF0aW9uRGlyZWN0aW9uKTsKKyAgICB2b2lk
IHRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKEV4aXRLaW5kLCBKU1ZhbHVlUmVncywgTm9k
ZSosIFNwZWN1bGF0aW9uRGlyZWN0aW9uKTsKICAgICAvLyBJc3N1ZSBhIGZvcndhcmQgc3BlY3Vs
YXRpb24gd2F0Y2hwb2ludCwgd2hpY2ggd2lsbCBleGl0IHRvIHRoZSBuZXh0IGluc3RydWN0aW9u
IHJhdGhlcgogICAgIC8vIHRoYW4gdGhlIGN1cnJlbnQgb25lLgogICAgIEp1bXBSZXBsYWNlbWVu
dFdhdGNocG9pbnQqIGZvcndhcmRTcGVjdWxhdGlvbldhdGNocG9pbnQoRXhpdEtpbmQgPSBVbmNv
dW50YWJsZVdhdGNocG9pbnQpOwpAQCAtMjIyMywxMiArMjE5NiwxMiBAQCBwdWJsaWM6CiAgICAg
CiAgICAgSklUQ29tcGlsZXI6Okp1bXAganVtcFNsb3dGb3JVbndhbnRlZEFycmF5TW9kZShHUFJS
ZWcgdGVtcFdpdGhJbmRleGluZ1R5cGVSZWcsIEFycmF5TW9kZSwgSW5kZXhpbmdUeXBlLCBib29s
IGludmVydCk7CiAgICAgSklUQ29tcGlsZXI6Okp1bXBMaXN0IGp1bXBTbG93Rm9yVW53YW50ZWRB
cnJheU1vZGUoR1BSUmVnIHRlbXBXaXRoSW5kZXhpbmdUeXBlUmVnLCBBcnJheU1vZGUsIGJvb2wg
aW52ZXJ0ID0gZmFsc2UpOwotICAgIHZvaWQgY2hlY2tBcnJheShOb2RlJik7Ci0gICAgdm9pZCBh
cnJheWlmeShOb2RlJiwgR1BSUmVnIGJhc2VSZWcsIEdQUlJlZyBwcm9wZXJ0eVJlZyk7Ci0gICAg
dm9pZCBhcnJheWlmeShOb2RlJik7CisgICAgdm9pZCBjaGVja0FycmF5KE5vZGUqKTsKKyAgICB2
b2lkIGFycmF5aWZ5KE5vZGUqLCBHUFJSZWcgYmFzZVJlZywgR1BSUmVnIHByb3BlcnR5UmVnKTsK
KyAgICB2b2lkIGFycmF5aWZ5KE5vZGUqKTsKICAgICAKICAgICB0ZW1wbGF0ZTxib29sIHN0cmlj
dD4KLSAgICBHUFJSZWcgZmlsbFNwZWN1bGF0ZUludEludGVybmFsKE5vZGVJbmRleCwgRGF0YUZv
cm1hdCYgcmV0dXJuRm9ybWF0LCBTcGVjdWxhdGlvbkRpcmVjdGlvbik7CisgICAgR1BSUmVnIGZp
bGxTcGVjdWxhdGVJbnRJbnRlcm5hbChOb2RlKiwgRGF0YUZvcm1hdCYgcmV0dXJuRm9ybWF0LCBT
cGVjdWxhdGlvbkRpcmVjdGlvbik7CiAgICAgCiAgICAgLy8gSXQgaXMgcG9zc2libGUsIGR1cmlu
ZyBzcGVjdWxhdGl2ZSBnZW5lcmF0aW9uLCB0byByZWFjaCBhIHNpdHVhdGlvbiBpbiB3aGljaCB3
ZQogICAgIC8vIGNhbiBzdGF0aWNhbGx5IGRldGVybWluZSBhIHNwZWN1bGF0aW9uIHdpbGwgZmFp
bCAoZm9yIGV4YW1wbGUsIHdoZW4gdHdvIG5vZGVzCkBAIC0yMjQ0LDkgKzIyMTcsOSBAQCBwdWJs
aWM6CiAgICAgICAgIHJldHVybiB2YWx1ZVNvdXJjZVJlZmVyZW5jZUZvck9wZXJhbmQob3BlcmFu
ZCk7CiAgICAgfQogICAgIAotICAgIHZvaWQgc2V0Tm9kZUluZGV4Rm9yT3BlcmFuZChOb2RlSW5k
ZXggbm9kZUluZGV4LCBpbnQgb3BlcmFuZCkKKyAgICB2b2lkIHNldE5vZGVGb3JPcGVyYW5kKE5v
ZGUqIG5vZGUsIGludCBvcGVyYW5kKQogICAgIHsKLSAgICAgICAgdmFsdWVTb3VyY2VSZWZlcmVu
Y2VGb3JPcGVyYW5kKG9wZXJhbmQpID0gVmFsdWVTb3VyY2UoTWluaWZpZWRJRChub2RlSW5kZXgp
KTsKKyAgICAgICAgdmFsdWVTb3VyY2VSZWZlcmVuY2VGb3JPcGVyYW5kKG9wZXJhbmQpID0gVmFs
dWVTb3VyY2UoTWluaWZpZWRJRChub2RlKSk7CiAgICAgfQogICAgIAogICAgIC8vIENhbGwgdGhp
cyB3aXRoIGNhcmUsIHNpbmNlIGl0IGJvdGggcmV0dXJucyBhIHJlZmVyZW5jZSBpbnRvIGFuIGFy
cmF5CkBAIC0yMjc3LDcgKzIyNTAsNyBAQCBwdWJsaWM6CiAKICAgICAvLyBUaGUgY3VycmVudCBu
b2RlIGJlaW5nIGdlbmVyYXRlZC4KICAgICBCbG9ja0luZGV4IG1fYmxvY2s7Ci0gICAgTm9kZUlu
ZGV4IG1fY29tcGlsZUluZGV4OworICAgIE5vZGUqIG1fY3VycmVudE5vZGU7CiAgICAgdW5zaWdu
ZWQgbV9pbmRleEluQmxvY2s7CiAgICAgLy8gVmlydHVhbCBhbmQgcGh5c2ljYWwgcmVnaXN0ZXIg
bWFwcy4KICAgICBWZWN0b3I8R2VuZXJhdGlvbkluZm8sIDMyPiBtX2dlbmVyYXRpb25JbmZvOwpA
QCAtMjMzOCw3ICsyMzExLDcgQEAgY2xhc3MgSW50ZWdlck9wZXJhbmQgewogcHVibGljOgogICAg
IGV4cGxpY2l0IEludGVnZXJPcGVyYW5kKFNwZWN1bGF0aXZlSklUKiBqaXQsIEVkZ2UgdXNlKQog
ICAgICAgICA6IG1faml0KGppdCkKLSAgICAgICAgLCBtX2luZGV4KHVzZS5pbmRleCgpKQorICAg
ICAgICAsIG1fbm9kZSh1c2Uubm9kZSgpKQogICAgICAgICAsIG1fZ3ByT3JJbnZhbGlkKEludmFs
aWRHUFJSZWcpCiAjaWZuZGVmIE5ERUJVRwogICAgICAgICAsIG1fZm9ybWF0KERhdGFGb3JtYXRO
b25lKQpAQCAtMjM0Niw3ICsyMzE5LDcgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgQVNTRVJU
KG1faml0KTsKICAgICAgICAgQVNTRVJUKHVzZS51c2VLaW5kKCkgIT0gRG91YmxlVXNlKTsKLSAg
ICAgICAgaWYgKGppdC0+aXNGaWxsZWQobV9pbmRleCkpCisgICAgICAgIGlmIChqaXQtPmlzRmls
bGVkKG1fbm9kZSkpCiAgICAgICAgICAgICBncHIoKTsKICAgICB9CiAKQEAgLTIzNTYsOSArMjMy
OSw5IEBAIHB1YmxpYzoKICAgICAgICAgbV9qaXQtPnVubG9jayhtX2dwck9ySW52YWxpZCk7CiAg
ICAgfQogCi0gICAgTm9kZUluZGV4IGluZGV4KCkgY29uc3QKKyAgICBOb2RlKiBub2RlKCkgY29u
c3QKICAgICB7Ci0gICAgICAgIHJldHVybiBtX2luZGV4OworICAgICAgICByZXR1cm4gbV9ub2Rl
OwogICAgIH0KIAogICAgIERhdGFGb3JtYXQgZm9ybWF0KCkKQEAgLTIzNzEsMTggKzIzNDQsMTgg
QEAgcHVibGljOgogICAgIEdQUlJlZyBncHIoKQogICAgIHsKICAgICAgICAgaWYgKG1fZ3ByT3JJ
bnZhbGlkID09IEludmFsaWRHUFJSZWcpCi0gICAgICAgICAgICBtX2dwck9ySW52YWxpZCA9IG1f
aml0LT5maWxsSW50ZWdlcihpbmRleCgpLCBtX2Zvcm1hdCk7CisgICAgICAgICAgICBtX2dwck9y
SW52YWxpZCA9IG1faml0LT5maWxsSW50ZWdlcihub2RlKCksIG1fZm9ybWF0KTsKICAgICAgICAg
cmV0dXJuIG1fZ3ByT3JJbnZhbGlkOwogICAgIH0KICAgICAKICAgICB2b2lkIHVzZSgpCiAgICAg
ewotICAgICAgICBtX2ppdC0+dXNlKG1faW5kZXgpOworICAgICAgICBtX2ppdC0+dXNlKG1fbm9k
ZSk7CiAgICAgfQogCiBwcml2YXRlOgogICAgIFNwZWN1bGF0aXZlSklUKiBtX2ppdDsKLSAgICBO
b2RlSW5kZXggbV9pbmRleDsKKyAgICBOb2RlKiBtX25vZGU7CiAgICAgR1BSUmVnIG1fZ3ByT3JJ
bnZhbGlkOwogICAgIERhdGFGb3JtYXQgbV9mb3JtYXQ7CiB9OwpAQCAtMjM5MSw3ICsyMzY0LDcg
QEAgY2xhc3MgRG91YmxlT3BlcmFuZCB7CiBwdWJsaWM6CiAgICAgZXhwbGljaXQgRG91YmxlT3Bl
cmFuZChTcGVjdWxhdGl2ZUpJVCogaml0LCBFZGdlIHVzZSkKICAgICAgICAgOiBtX2ppdChqaXQp
Ci0gICAgICAgICwgbV9pbmRleCh1c2UuaW5kZXgoKSkKKyAgICAgICAgLCBtX25vZGUodXNlLm5v
ZGUoKSkKICAgICAgICAgLCBtX2Zwck9ySW52YWxpZChJbnZhbGlkRlBSUmVnKQogICAgIHsKICAg
ICAgICAgQVNTRVJUKG1faml0KTsKQEAgLTI0MDQsNyArMjM3Nyw3IEBAIHB1YmxpYzoKICAgICAg
ICAgLy8gaXMgbm90IG9uZSBhbHJlYWR5LgogICAgICAgICBBU1NFUlQodXNlLnVzZUtpbmQoKSAh
PSBEb3VibGVVc2UpOwogICAgICAgICAKLSAgICAgICAgaWYgKGppdC0+aXNGaWxsZWREb3VibGUo
bV9pbmRleCkpCisgICAgICAgIGlmIChqaXQtPmlzRmlsbGVkRG91YmxlKG1fbm9kZSkpCiAgICAg
ICAgICAgICBmcHIoKTsKICAgICB9CiAKQEAgLTI0MTQsMjYgKzIzODcsMjYgQEAgcHVibGljOgog
ICAgICAgICBtX2ppdC0+dW5sb2NrKG1fZnByT3JJbnZhbGlkKTsKICAgICB9CiAKLSAgICBOb2Rl
SW5kZXggaW5kZXgoKSBjb25zdAorICAgIE5vZGUqIG5vZGUoKSBjb25zdAogICAgIHsKLSAgICAg
ICAgcmV0dXJuIG1faW5kZXg7CisgICAgICAgIHJldHVybiBtX25vZGU7CiAgICAgfQogCiAgICAg
RlBSUmVnIGZwcigpCiAgICAgewogICAgICAgICBpZiAobV9mcHJPckludmFsaWQgPT0gSW52YWxp
ZEZQUlJlZykKLSAgICAgICAgICAgIG1fZnByT3JJbnZhbGlkID0gbV9qaXQtPmZpbGxEb3VibGUo
aW5kZXgoKSk7CisgICAgICAgICAgICBtX2Zwck9ySW52YWxpZCA9IG1faml0LT5maWxsRG91Ymxl
KG5vZGUoKSk7CiAgICAgICAgIHJldHVybiBtX2Zwck9ySW52YWxpZDsKICAgICB9CiAgICAgCiAg
ICAgdm9pZCB1c2UoKQogICAgIHsKLSAgICAgICAgbV9qaXQtPnVzZShtX2luZGV4KTsKKyAgICAg
ICAgbV9qaXQtPnVzZShtX25vZGUpOwogICAgIH0KIAogcHJpdmF0ZToKICAgICBTcGVjdWxhdGl2
ZUpJVCogbV9qaXQ7Ci0gICAgTm9kZUluZGV4IG1faW5kZXg7CisgICAgTm9kZSogbV9ub2RlOwog
ICAgIEZQUlJlZyBtX2Zwck9ySW52YWxpZDsKIH07CiAKQEAgLTI0NDEsNyArMjQxNCw3IEBAIGNs
YXNzIEpTVmFsdWVPcGVyYW5kIHsKIHB1YmxpYzoKICAgICBleHBsaWNpdCBKU1ZhbHVlT3BlcmFu
ZChTcGVjdWxhdGl2ZUpJVCogaml0LCBFZGdlIHVzZSkKICAgICAgICAgOiBtX2ppdChqaXQpCi0g
ICAgICAgICwgbV9pbmRleCh1c2UuaW5kZXgoKSkKKyAgICAgICAgLCBtX25vZGUodXNlLm5vZGUo
KSkKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgICAgICAsIG1fZ3ByT3JJbnZhbGlkKEludmFsaWRH
UFJSZWcpCiAjZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQpAQCAtMjQ1MSwxMiArMjQyNCwxMiBAQCBw
dWJsaWM6CiAgICAgICAgIEFTU0VSVChtX2ppdCk7CiAgICAgICAgIEFTU0VSVCh1c2UudXNlS2lu
ZCgpICE9IERvdWJsZVVzZSk7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgaWYgKGppdC0+
aXNGaWxsZWQobV9pbmRleCkpCisgICAgICAgIGlmIChqaXQtPmlzRmlsbGVkKG1fbm9kZSkpCiAg
ICAgICAgICAgICBncHIoKTsKICNlbGlmIFVTRShKU1ZBTFVFMzJfNjQpCiAgICAgICAgIG1fcmVn
aXN0ZXIucGFpci50YWdHUFIgPSBJbnZhbGlkR1BSUmVnOwogICAgICAgICBtX3JlZ2lzdGVyLnBh
aXIucGF5bG9hZEdQUiA9IEludmFsaWRHUFJSZWc7Ci0gICAgICAgIGlmIChqaXQtPmlzRmlsbGVk
KG1faW5kZXgpKQorICAgICAgICBpZiAoaml0LT5pc0ZpbGxlZChtX25vZGUpKQogICAgICAgICAg
ICAgZmlsbCgpOwogI2VuZGlmCiAgICAgfQpAQCAtMjQ3OCwxNiArMjQ1MSwxNiBAQCBwdWJsaWM6
CiAjZW5kaWYKICAgICB9CiAKLSAgICBOb2RlSW5kZXggaW5kZXgoKSBjb25zdAorICAgIE5vZGUq
IG5vZGUoKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIG1faW5kZXg7CisgICAgICAgIHJl
dHVybiBtX25vZGU7CiAgICAgfQogCiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICBHUFJSZWcgZ3By
KCkKICAgICB7CiAgICAgICAgIGlmIChtX2dwck9ySW52YWxpZCA9PSBJbnZhbGlkR1BSUmVnKQot
ICAgICAgICAgICAgbV9ncHJPckludmFsaWQgPSBtX2ppdC0+ZmlsbEpTVmFsdWUoaW5kZXgoKSk7
CisgICAgICAgICAgICBtX2dwck9ySW52YWxpZCA9IG1faml0LT5maWxsSlNWYWx1ZShub2RlKCkp
OwogICAgICAgICByZXR1cm4gbV9ncHJPckludmFsaWQ7CiAgICAgfQogICAgIEpTVmFsdWVSZWdz
IGpzVmFsdWVSZWdzKCkKQEAgLTI1MDAsNyArMjQ3Myw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGZp
bGwoKQogICAgIHsKICAgICAgICAgaWYgKG1fcmVnaXN0ZXIucGFpci50YWdHUFIgPT0gSW52YWxp
ZEdQUlJlZyAmJiBtX3JlZ2lzdGVyLnBhaXIucGF5bG9hZEdQUiA9PSBJbnZhbGlkR1BSUmVnKQot
ICAgICAgICAgICAgbV9pc0RvdWJsZSA9ICFtX2ppdC0+ZmlsbEpTVmFsdWUoaW5kZXgoKSwgbV9y
ZWdpc3Rlci5wYWlyLnRhZ0dQUiwgbV9yZWdpc3Rlci5wYWlyLnBheWxvYWRHUFIsIG1fcmVnaXN0
ZXIuZnByKTsKKyAgICAgICAgICAgIG1faXNEb3VibGUgPSAhbV9qaXQtPmZpbGxKU1ZhbHVlKG5v
ZGUoKSwgbV9yZWdpc3Rlci5wYWlyLnRhZ0dQUiwgbV9yZWdpc3Rlci5wYWlyLnBheWxvYWRHUFIs
IG1fcmVnaXN0ZXIuZnByKTsKICAgICB9CiAKICAgICBHUFJSZWcgdGFnR1BSKCkKQEAgLTI1MzIs
MTIgKzI1MDUsMTIgQEAgcHVibGljOgogCiAgICAgdm9pZCB1c2UoKQogICAgIHsKLSAgICAgICAg
bV9qaXQtPnVzZShtX2luZGV4KTsKKyAgICAgICAgbV9qaXQtPnVzZShtX25vZGUpOwogICAgIH0K
IAogcHJpdmF0ZToKICAgICBTcGVjdWxhdGl2ZUpJVCogbV9qaXQ7Ci0gICAgTm9kZUluZGV4IG1f
aW5kZXg7CisgICAgTm9kZSogbV9ub2RlOwogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgR1BSUmVn
IG1fZ3ByT3JJbnZhbGlkOwogI2VsaWYgVVNFKEpTVkFMVUUzMl82NCkKQEAgLTI1NTYsMTIgKzI1
MjksMTIgQEAgY2xhc3MgU3RvcmFnZU9wZXJhbmQgewogcHVibGljOgogICAgIGV4cGxpY2l0IFN0
b3JhZ2VPcGVyYW5kKFNwZWN1bGF0aXZlSklUKiBqaXQsIEVkZ2UgdXNlKQogICAgICAgICA6IG1f
aml0KGppdCkKLSAgICAgICAgLCBtX2luZGV4KHVzZS5pbmRleCgpKQorICAgICAgICAsIG1fbm9k
ZSh1c2Uubm9kZSgpKQogICAgICAgICAsIG1fZ3ByT3JJbnZhbGlkKEludmFsaWRHUFJSZWcpCiAg
ICAgewogICAgICAgICBBU1NFUlQobV9qaXQpOwogICAgICAgICBBU1NFUlQodXNlLnVzZUtpbmQo
KSAhPSBEb3VibGVVc2UpOwotICAgICAgICBpZiAoaml0LT5pc0ZpbGxlZChtX2luZGV4KSkKKyAg
ICAgICAgaWYgKGppdC0+aXNGaWxsZWQobV9ub2RlKSkKICAgICAgICAgICAgIGdwcigpOwogICAg
IH0KICAgICAKQEAgLTI1NzEsMjYgKzI1NDQsMjYgQEAgcHVibGljOgogICAgICAgICBtX2ppdC0+
dW5sb2NrKG1fZ3ByT3JJbnZhbGlkKTsKICAgICB9CiAgICAgCi0gICAgTm9kZUluZGV4IGluZGV4
KCkgY29uc3QKKyAgICBOb2RlKiBub2RlKCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBt
X2luZGV4OworICAgICAgICByZXR1cm4gbV9ub2RlOwogICAgIH0KICAgICAKICAgICBHUFJSZWcg
Z3ByKCkKICAgICB7CiAgICAgICAgIGlmIChtX2dwck9ySW52YWxpZCA9PSBJbnZhbGlkR1BSUmVn
KQotICAgICAgICAgICAgbV9ncHJPckludmFsaWQgPSBtX2ppdC0+ZmlsbFN0b3JhZ2UoaW5kZXgo
KSk7CisgICAgICAgICAgICBtX2dwck9ySW52YWxpZCA9IG1faml0LT5maWxsU3RvcmFnZShub2Rl
KCkpOwogICAgICAgICByZXR1cm4gbV9ncHJPckludmFsaWQ7CiAgICAgfQogICAgIAogICAgIHZv
aWQgdXNlKCkKICAgICB7Ci0gICAgICAgIG1faml0LT51c2UobV9pbmRleCk7CisgICAgICAgIG1f
aml0LT51c2UobV9ub2RlKTsKICAgICB9CiAgICAgCiBwcml2YXRlOgogICAgIFNwZWN1bGF0aXZl
SklUKiBtX2ppdDsKLSAgICBOb2RlSW5kZXggbV9pbmRleDsKKyAgICBOb2RlKiBtX25vZGU7CiAg
ICAgR1BSUmVnIG1fZ3ByT3JJbnZhbGlkOwogfTsKIApAQCAtMjcyNiw3ICsyNjk5LDcgQEAgY2xh
c3MgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgewogcHVibGljOgogICAgIGV4cGxpY2l0IFNwZWN1
bGF0ZUludGVnZXJPcGVyYW5kKFNwZWN1bGF0aXZlSklUKiBqaXQsIEVkZ2UgdXNlLCBTcGVjdWxh
dGlvbkRpcmVjdGlvbiBkaXJlY3Rpb24gPSBCYWNrd2FyZFNwZWN1bGF0aW9uKQogICAgICAgICA6
IG1faml0KGppdCkKLSAgICAgICAgLCBtX2luZGV4KHVzZS5pbmRleCgpKQorICAgICAgICAsIG1f
bm9kZSh1c2Uubm9kZSgpKQogICAgICAgICAsIG1fZ3ByT3JJbnZhbGlkKEludmFsaWRHUFJSZWcp
CiAjaWZuZGVmIE5ERUJVRwogICAgICAgICAsIG1fZm9ybWF0KERhdGFGb3JtYXROb25lKQpAQCAt
MjczNSw3ICsyNzA4LDcgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgQVNTRVJUKG1faml0KTsK
ICAgICAgICAgQVNTRVJUKHVzZS51c2VLaW5kKCkgIT0gRG91YmxlVXNlKTsKLSAgICAgICAgaWYg
KGppdC0+aXNGaWxsZWQobV9pbmRleCkpCisgICAgICAgIGlmIChqaXQtPmlzRmlsbGVkKG1fbm9k
ZSkpCiAgICAgICAgICAgICBncHIoKTsKICAgICB9CiAKQEAgLTI3NDUsOSArMjcxOCw5IEBAIHB1
YmxpYzoKICAgICAgICAgbV9qaXQtPnVubG9jayhtX2dwck9ySW52YWxpZCk7CiAgICAgfQogCi0g
ICAgTm9kZUluZGV4IGluZGV4KCkgY29uc3QKKyAgICBOb2RlKiBub2RlKCkgY29uc3QKICAgICB7
Ci0gICAgICAgIHJldHVybiBtX2luZGV4OworICAgICAgICByZXR1cm4gbV9ub2RlOwogICAgIH0K
IAogICAgIERhdGFGb3JtYXQgZm9ybWF0KCkKQEAgLTI3NjAsMTggKzI3MzMsMTggQEAgcHVibGlj
OgogICAgIEdQUlJlZyBncHIoKQogICAgIHsKICAgICAgICAgaWYgKG1fZ3ByT3JJbnZhbGlkID09
IEludmFsaWRHUFJSZWcpCi0gICAgICAgICAgICBtX2dwck9ySW52YWxpZCA9IG1faml0LT5maWxs
U3BlY3VsYXRlSW50KGluZGV4KCksIG1fZm9ybWF0LCBtX2RpcmVjdGlvbik7CisgICAgICAgICAg
ICBtX2dwck9ySW52YWxpZCA9IG1faml0LT5maWxsU3BlY3VsYXRlSW50KG5vZGUoKSwgbV9mb3Jt
YXQsIG1fZGlyZWN0aW9uKTsKICAgICAgICAgcmV0dXJuIG1fZ3ByT3JJbnZhbGlkOwogICAgIH0K
ICAgICAKICAgICB2b2lkIHVzZSgpCiAgICAgewotICAgICAgICBtX2ppdC0+dXNlKG1faW5kZXgp
OworICAgICAgICBtX2ppdC0+dXNlKG1fbm9kZSk7CiAgICAgfQogCiBwcml2YXRlOgogICAgIFNw
ZWN1bGF0aXZlSklUKiBtX2ppdDsKLSAgICBOb2RlSW5kZXggbV9pbmRleDsKKyAgICBOb2RlKiBt
X25vZGU7CiAgICAgR1BSUmVnIG1fZ3ByT3JJbnZhbGlkOwogICAgIERhdGFGb3JtYXQgbV9mb3Jt
YXQ7CiAgICAgU3BlY3VsYXRpb25EaXJlY3Rpb24gbV9kaXJlY3Rpb247CkBAIC0yNzgxLDEyICsy
NzU0LDEyIEBAIGNsYXNzIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCB7CiBwdWJsaWM6CiAg
ICAgZXhwbGljaXQgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kKFNwZWN1bGF0aXZlSklUKiBq
aXQsIEVkZ2UgdXNlKQogICAgICAgICA6IG1faml0KGppdCkKLSAgICAgICAgLCBtX2luZGV4KHVz
ZS5pbmRleCgpKQorICAgICAgICAsIG1fbm9kZSh1c2Uubm9kZSgpKQogICAgICAgICAsIG1fZ3By
T3JJbnZhbGlkKEludmFsaWRHUFJSZWcpCiAgICAgewogICAgICAgICBBU1NFUlQobV9qaXQpOwog
ICAgICAgICBBU1NFUlQodXNlLnVzZUtpbmQoKSAhPSBEb3VibGVVc2UpOwotICAgICAgICBpZiAo
aml0LT5pc0ZpbGxlZChtX2luZGV4KSkKKyAgICAgICAgaWYgKGppdC0+aXNGaWxsZWQobV9ub2Rl
KSkKICAgICAgICAgICAgIGdwcigpOwogICAgIH0KIApAQCAtMjc5NiwyNiArMjc2OSwyNiBAQCBw
dWJsaWM6CiAgICAgICAgIG1faml0LT51bmxvY2sobV9ncHJPckludmFsaWQpOwogICAgIH0KIAot
ICAgIE5vZGVJbmRleCBpbmRleCgpIGNvbnN0CisgICAgTm9kZSogbm9kZSgpIGNvbnN0CiAgICAg
ewotICAgICAgICByZXR1cm4gbV9pbmRleDsKKyAgICAgICAgcmV0dXJuIG1fbm9kZTsKICAgICB9
CiAKICAgICBHUFJSZWcgZ3ByKCkKICAgICB7CiAgICAgICAgIGlmIChtX2dwck9ySW52YWxpZCA9
PSBJbnZhbGlkR1BSUmVnKQotICAgICAgICAgICAgbV9ncHJPckludmFsaWQgPSBtX2ppdC0+Zmls
bFNwZWN1bGF0ZUludFN0cmljdChpbmRleCgpKTsKKyAgICAgICAgICAgIG1fZ3ByT3JJbnZhbGlk
ID0gbV9qaXQtPmZpbGxTcGVjdWxhdGVJbnRTdHJpY3Qobm9kZSgpKTsKICAgICAgICAgcmV0dXJu
IG1fZ3ByT3JJbnZhbGlkOwogICAgIH0KICAgICAKICAgICB2b2lkIHVzZSgpCiAgICAgewotICAg
ICAgICBtX2ppdC0+dXNlKG1faW5kZXgpOworICAgICAgICBtX2ppdC0+dXNlKG1fbm9kZSk7CiAg
ICAgfQogCiBwcml2YXRlOgogICAgIFNwZWN1bGF0aXZlSklUKiBtX2ppdDsKLSAgICBOb2RlSW5k
ZXggbV9pbmRleDsKKyAgICBOb2RlKiBtX25vZGU7CiAgICAgR1BSUmVnIG1fZ3ByT3JJbnZhbGlk
OwogfTsKIApAQCAtMjgyMywxMyArMjc5NiwxMyBAQCBjbGFzcyBTcGVjdWxhdGVEb3VibGVPcGVy
YW5kIHsKIHB1YmxpYzoKICAgICBleHBsaWNpdCBTcGVjdWxhdGVEb3VibGVPcGVyYW5kKFNwZWN1
bGF0aXZlSklUKiBqaXQsIEVkZ2UgdXNlLCBTcGVjdWxhdGlvbkRpcmVjdGlvbiBkaXJlY3Rpb24g
PSBCYWNrd2FyZFNwZWN1bGF0aW9uKQogICAgICAgICA6IG1faml0KGppdCkKLSAgICAgICAgLCBt
X2luZGV4KHVzZS5pbmRleCgpKQorICAgICAgICAsIG1fbm9kZSh1c2Uubm9kZSgpKQogICAgICAg
ICAsIG1fZnByT3JJbnZhbGlkKEludmFsaWRGUFJSZWcpCiAgICAgICAgICwgbV9kaXJlY3Rpb24o
ZGlyZWN0aW9uKQogICAgIHsKICAgICAgICAgQVNTRVJUKG1faml0KTsKICAgICAgICAgQVNTRVJU
KHVzZS51c2VLaW5kKCkgPT0gRG91YmxlVXNlKTsKLSAgICAgICAgaWYgKGppdC0+aXNGaWxsZWQo
bV9pbmRleCkpCisgICAgICAgIGlmIChqaXQtPmlzRmlsbGVkKG1fbm9kZSkpCiAgICAgICAgICAg
ICBmcHIoKTsKICAgICB9CiAKQEAgLTI4MzksMjYgKzI4MTIsMjYgQEAgcHVibGljOgogICAgICAg
ICBtX2ppdC0+dW5sb2NrKG1fZnByT3JJbnZhbGlkKTsKICAgICB9CiAKLSAgICBOb2RlSW5kZXgg
aW5kZXgoKSBjb25zdAorICAgIE5vZGUqIG5vZGUoKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0
dXJuIG1faW5kZXg7CisgICAgICAgIHJldHVybiBtX25vZGU7CiAgICAgfQogCiAgICAgRlBSUmVn
IGZwcigpCiAgICAgewogICAgICAgICBpZiAobV9mcHJPckludmFsaWQgPT0gSW52YWxpZEZQUlJl
ZykKLSAgICAgICAgICAgIG1fZnByT3JJbnZhbGlkID0gbV9qaXQtPmZpbGxTcGVjdWxhdGVEb3Vi
bGUoaW5kZXgoKSwgbV9kaXJlY3Rpb24pOworICAgICAgICAgICAgbV9mcHJPckludmFsaWQgPSBt
X2ppdC0+ZmlsbFNwZWN1bGF0ZURvdWJsZShub2RlKCksIG1fZGlyZWN0aW9uKTsKICAgICAgICAg
cmV0dXJuIG1fZnByT3JJbnZhbGlkOwogICAgIH0KICAgICAKICAgICB2b2lkIHVzZSgpCiAgICAg
ewotICAgICAgICBtX2ppdC0+dXNlKG1faW5kZXgpOworICAgICAgICBtX2ppdC0+dXNlKG1fbm9k
ZSk7CiAgICAgfQogCiBwcml2YXRlOgogICAgIFNwZWN1bGF0aXZlSklUKiBtX2ppdDsKLSAgICBO
b2RlSW5kZXggbV9pbmRleDsKKyAgICBOb2RlKiBtX25vZGU7CiAgICAgRlBSUmVnIG1fZnByT3JJ
bnZhbGlkOwogICAgIFNwZWN1bGF0aW9uRGlyZWN0aW9uIG1fZGlyZWN0aW9uOwogfTsKQEAgLTI4
NjcsMTMgKzI4NDAsMTMgQEAgY2xhc3MgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgewogcHVibGljOgog
ICAgIGV4cGxpY2l0IFNwZWN1bGF0ZUNlbGxPcGVyYW5kKFNwZWN1bGF0aXZlSklUKiBqaXQsIEVk
Z2UgdXNlLCBTcGVjdWxhdGlvbkRpcmVjdGlvbiBkaXJlY3Rpb24gPSBCYWNrd2FyZFNwZWN1bGF0
aW9uKQogICAgICAgICA6IG1faml0KGppdCkKLSAgICAgICAgLCBtX2luZGV4KHVzZS5pbmRleCgp
KQorICAgICAgICAsIG1fbm9kZSh1c2Uubm9kZSgpKQogICAgICAgICAsIG1fZ3ByT3JJbnZhbGlk
KEludmFsaWRHUFJSZWcpCiAgICAgICAgICwgbV9kaXJlY3Rpb24oZGlyZWN0aW9uKQogICAgIHsK
ICAgICAgICAgQVNTRVJUKG1faml0KTsKICAgICAgICAgQVNTRVJUKHVzZS51c2VLaW5kKCkgIT0g
RG91YmxlVXNlKTsKLSAgICAgICAgaWYgKGppdC0+aXNGaWxsZWQobV9pbmRleCkpCisgICAgICAg
IGlmIChqaXQtPmlzRmlsbGVkKG1fbm9kZSkpCiAgICAgICAgICAgICBncHIoKTsKICAgICB9CiAK
QEAgLTI4ODMsMjYgKzI4NTYsMjYgQEAgcHVibGljOgogICAgICAgICBtX2ppdC0+dW5sb2NrKG1f
Z3ByT3JJbnZhbGlkKTsKICAgICB9CiAKLSAgICBOb2RlSW5kZXggaW5kZXgoKSBjb25zdAorICAg
IE5vZGUqIG5vZGUoKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIG1faW5kZXg7CisgICAg
ICAgIHJldHVybiBtX25vZGU7CiAgICAgfQogCiAgICAgR1BSUmVnIGdwcigpCiAgICAgewogICAg
ICAgICBpZiAobV9ncHJPckludmFsaWQgPT0gSW52YWxpZEdQUlJlZykKLSAgICAgICAgICAgIG1f
Z3ByT3JJbnZhbGlkID0gbV9qaXQtPmZpbGxTcGVjdWxhdGVDZWxsKGluZGV4KCksIG1fZGlyZWN0
aW9uKTsKKyAgICAgICAgICAgIG1fZ3ByT3JJbnZhbGlkID0gbV9qaXQtPmZpbGxTcGVjdWxhdGVD
ZWxsKG5vZGUoKSwgbV9kaXJlY3Rpb24pOwogICAgICAgICByZXR1cm4gbV9ncHJPckludmFsaWQ7
CiAgICAgfQogICAgIAogICAgIHZvaWQgdXNlKCkKICAgICB7Ci0gICAgICAgIG1faml0LT51c2Uo
bV9pbmRleCk7CisgICAgICAgIG1faml0LT51c2UobV9ub2RlKTsKICAgICB9CiAKIHByaXZhdGU6
CiAgICAgU3BlY3VsYXRpdmVKSVQqIG1faml0OwotICAgIE5vZGVJbmRleCBtX2luZGV4OworICAg
IE5vZGUqIG1fbm9kZTsKICAgICBHUFJSZWcgbV9ncHJPckludmFsaWQ7CiAgICAgU3BlY3VsYXRp
b25EaXJlY3Rpb24gbV9kaXJlY3Rpb247CiB9OwpAQCAtMjkxMSwxMyArMjg4NCwxMyBAQCBjbGFz
cyBTcGVjdWxhdGVCb29sZWFuT3BlcmFuZCB7CiBwdWJsaWM6CiAgICAgZXhwbGljaXQgU3BlY3Vs
YXRlQm9vbGVhbk9wZXJhbmQoU3BlY3VsYXRpdmVKSVQqIGppdCwgRWRnZSB1c2UsIFNwZWN1bGF0
aW9uRGlyZWN0aW9uIGRpcmVjdGlvbiA9IEJhY2t3YXJkU3BlY3VsYXRpb24pCiAgICAgICAgIDog
bV9qaXQoaml0KQotICAgICAgICAsIG1faW5kZXgodXNlLmluZGV4KCkpCisgICAgICAgICwgbV9u
b2RlKHVzZS5ub2RlKCkpCiAgICAgICAgICwgbV9ncHJPckludmFsaWQoSW52YWxpZEdQUlJlZykK
ICAgICAgICAgLCBtX2RpcmVjdGlvbihkaXJlY3Rpb24pCiAgICAgewogICAgICAgICBBU1NFUlQo
bV9qaXQpOwogICAgICAgICBBU1NFUlQodXNlLnVzZUtpbmQoKSAhPSBEb3VibGVVc2UpOwotICAg
ICAgICBpZiAoaml0LT5pc0ZpbGxlZChtX2luZGV4KSkKKyAgICAgICAgaWYgKGppdC0+aXNGaWxs
ZWQobV9ub2RlKSkKICAgICAgICAgICAgIGdwcigpOwogICAgIH0KICAgICAKQEAgLTI5MjcsMjYg
KzI5MDAsMjYgQEAgcHVibGljOgogICAgICAgICBtX2ppdC0+dW5sb2NrKG1fZ3ByT3JJbnZhbGlk
KTsKICAgICB9CiAgICAgCi0gICAgTm9kZUluZGV4IGluZGV4KCkgY29uc3QKKyAgICBOb2RlKiBu
b2RlKCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBtX2luZGV4OworICAgICAgICByZXR1
cm4gbV9ub2RlOwogICAgIH0KICAgICAKICAgICBHUFJSZWcgZ3ByKCkKICAgICB7CiAgICAgICAg
IGlmIChtX2dwck9ySW52YWxpZCA9PSBJbnZhbGlkR1BSUmVnKQotICAgICAgICAgICAgbV9ncHJP
ckludmFsaWQgPSBtX2ppdC0+ZmlsbFNwZWN1bGF0ZUJvb2xlYW4oaW5kZXgoKSwgbV9kaXJlY3Rp
b24pOworICAgICAgICAgICAgbV9ncHJPckludmFsaWQgPSBtX2ppdC0+ZmlsbFNwZWN1bGF0ZUJv
b2xlYW4obm9kZSgpLCBtX2RpcmVjdGlvbik7CiAgICAgICAgIHJldHVybiBtX2dwck9ySW52YWxp
ZDsKICAgICB9CiAgICAgCiAgICAgdm9pZCB1c2UoKQogICAgIHsKLSAgICAgICAgbV9qaXQtPnVz
ZShtX2luZGV4KTsKKyAgICAgICAgbV9qaXQtPnVzZShtX25vZGUpOwogICAgIH0KIAogcHJpdmF0
ZToKICAgICBTcGVjdWxhdGl2ZUpJVCogbV9qaXQ7Ci0gICAgTm9kZUluZGV4IG1faW5kZXg7Cisg
ICAgTm9kZSogbV9ub2RlOwogICAgIEdQUlJlZyBtX2dwck9ySW52YWxpZDsKICAgICBTcGVjdWxh
dGlvbkRpcmVjdGlvbiBtX2RpcmVjdGlvbjsKIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1N0cnVjdHVyZUFic3RyYWN0VmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0cnVjdHVyZUFic3RyYWN0VmFsdWUuaAkocmV2aXNpb24g
MTQwOTA0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJ1Y3R1cmVBYnN0cmFj
dFZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDExLCAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMSwgMjAxMiwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMxNCw2ICszMTQsOCBAQCBwdWJs
aWM6CiBwcml2YXRlOgogICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIHRvcFZhbHVlKCkgeyByZXR1cm4g
cmVpbnRlcnByZXRfY2FzdDxTdHJ1Y3R1cmUqPigxKTsgfQogICAgIAorICAgIC8vIE5CLiBUaGlz
IG11c3QgaGF2ZSBhIHRyaXZpYWwgZGVzdHJ1Y3Rvci4KKyAgICAKICAgICAvLyBUaGlzIGNhbiBv
bmx5IHJlbWVtYmVyIG9uZSBzdHJ1Y3R1cmUgYXQgYSB0aW1lLgogICAgIFN0cnVjdHVyZSogbV9z
dHJ1Y3R1cmU7CiB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJ1Y3R1
cmVDaGVja0hvaXN0aW5nUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3RydWN0dXJlQ2hlY2tIb2lzdGluZ1BoYXNlLmNwcAkocmV2aXNpb24gMTQw
OTA0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJ1Y3R1cmVDaGVja0hvaXN0
aW5nUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NCwyMyArNjQsMjIgQEAgcHVibGljOgog
ICAgICAgICAgICAgaWYgKCFibG9jaykKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaW5kZXhJbkJsb2NrID0gMDsgaW5kZXhJbkJsb2NrIDwgYmxv
Y2stPnNpemUoKTsgKytpbmRleEluQmxvY2spIHsKLSAgICAgICAgICAgICAgICBOb2RlSW5kZXgg
bm9kZUluZGV4ID0gYmxvY2stPmF0KGluZGV4SW5CbG9jayk7Ci0gICAgICAgICAgICAgICAgTm9k
ZSYgbm9kZSA9IG1fZ3JhcGhbbm9kZUluZGV4XTsKLSAgICAgICAgICAgICAgICBpZiAoIW5vZGUu
c2hvdWxkR2VuZXJhdGUoKSkKKyAgICAgICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPmF0
KGluZGV4SW5CbG9jayk7CisgICAgICAgICAgICAgICAgaWYgKCFub2RlLT5zaG91bGRHZW5lcmF0
ZSgpKQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICBzd2l0
Y2ggKG5vZGUub3AoKSkgeworICAgICAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewog
ICAgICAgICAgICAgICAgIGNhc2UgQ2hlY2tTdHJ1Y3R1cmU6CiAgICAgICAgICAgICAgICAgY2Fz
ZSBTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludDogewotICAgICAgICAgICAgICAgICAgICBO
b2RlJiBjaGlsZCA9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV07Ci0gICAgICAgICAgICAgICAgICAg
IGlmIChjaGlsZC5vcCgpICE9IEdldExvY2FsKQorICAgICAgICAgICAgICAgICAgICBOb2RlKiBj
aGlsZCA9IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNo
aWxkLT5vcCgpICE9IEdldExvY2FsKQogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBjaGlsZC52
YXJpYWJsZUFjY2Vzc0RhdGEoKTsKKyAgICAgICAgICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NE
YXRhKiB2YXJpYWJsZSA9IGNoaWxkLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKICAgICAgICAgICAg
ICAgICAgICAgdmFyaWFibGUtPnZvdGUoVm90ZVN0cnVjdHVyZUNoZWNrKTsKICAgICAgICAgICAg
ICAgICAgICAgaWYgKHZhcmlhYmxlLT5pc0NhcHR1cmVkKCkgfHwgdmFyaWFibGUtPnN0cnVjdHVy
ZUNoZWNrSG9pc3RpbmdGYWlsZWQoKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgICAgICAgICBpZiAoIWlzQ2VsbFNwZWN1bGF0aW9uKHZhcmlhYmxlLT5wcmVk
aWN0aW9uKCkpKQogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAg
ICAgICAgIG5vdGljZVN0cnVjdHVyZUNoZWNrKHZhcmlhYmxlLCBub2RlLnN0cnVjdHVyZVNldCgp
KTsKKyAgICAgICAgICAgICAgICAgICAgbm90aWNlU3RydWN0dXJlQ2hlY2sodmFyaWFibGUsIG5v
ZGUtPnN0cnVjdHVyZVNldCgpKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAKQEAgLTEwOSwxMyArMTA4LDEzIEBAIHB1
YmxpYzoKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgY2FzZSBBcnJheWlm
eVRvU3RydWN0dXJlOgogICAgICAgICAgICAgICAgIGNhc2UgQXJyYXlpZnk6Ci0gICAgICAgICAg
ICAgICAgICAgIGlmIChub2RlLmFycmF5TW9kZSgpLmNvbnZlcnNpb24oKSA9PSBBcnJheTo6UmFn
ZUNvbnZlcnQpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmFycmF5TW9kZSgpLmNv
bnZlcnNpb24oKSA9PSBBcnJheTo6UmFnZUNvbnZlcnQpIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIFJhZ2UgY29udmVyc2lvbiBjaGFuZ2VzIHN0cnVjdHVyZXMuIFdlIHNob3VsZCBhdm9p
ZCB0eWluZyB0byBkbwogICAgICAgICAgICAgICAgICAgICAgICAgLy8gYW55IGtpbmQgb2YgaG9p
c3Rpbmcgd2hlbiByYWdlIGNvbnZlcnNpb24gaXMgaW4gcGxheS4KLSAgICAgICAgICAgICAgICAg
ICAgICAgIE5vZGUmIGNoaWxkID0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIChjaGlsZC5vcCgpICE9IEdldExvY2FsKQorICAgICAgICAgICAgICAg
ICAgICAgICAgTm9kZSogY2hpbGQgPSBub2RlLT5jaGlsZDEoKS5ub2RleCgpOworICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKGNoaWxkLT5vcCgpICE9IEdldExvY2FsKQogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgVmFyaWFibGVB
Y2Nlc3NEYXRhKiB2YXJpYWJsZSA9IGNoaWxkLnZhcmlhYmxlQWNjZXNzRGF0YSgpOworICAgICAg
ICAgICAgICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IGNoaWxkLT52
YXJpYWJsZUFjY2Vzc0RhdGEoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLT52
b3RlKFZvdGVPdGhlcik7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFyaWFibGUtPmlz
Q2FwdHVyZWQoKSB8fCB2YXJpYWJsZS0+c3RydWN0dXJlQ2hlY2tIb2lzdGluZ0ZhaWxlZCgpKQog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTMwLDMwICsxMjksMjkgQEAg
cHVibGljOgogICAgICAgICAgICAgICAgICAgICAvLyBraW5kIG9mIENoZWNrU3RydWN0dXJlLCB0
aGVuIHdlIHNob3VsZCBub3RpY2UgdGhlbSB0byBlbnN1cmUgdGhhdAogICAgICAgICAgICAgICAg
ICAgICAvLyB3ZSdyZSBub3QgaG9pc3RpbmcgYSBjaGVjayB0aGF0IHdvdWxkIGNvbnRyYXZlbmUg
Y2hlY2tzIHRoYXQgYXJlCiAgICAgICAgICAgICAgICAgICAgIC8vIGFscmVhZHkgYmVpbmcgcGVy
Zm9ybWVkLgotICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxl
ID0gbm9kZS52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKKyAgICAgICAgICAgICAgICAgICAgVmFyaWFi
bGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOwogICAg
ICAgICAgICAgICAgICAgICBpZiAodmFyaWFibGUtPmlzQ2FwdHVyZWQoKSB8fCB2YXJpYWJsZS0+
c3RydWN0dXJlQ2hlY2tIb2lzdGluZ0ZhaWxlZCgpKQogICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIGlmICghaXNDZWxsU3BlY3VsYXRpb24odmFyaWFi
bGUtPnByZWRpY3Rpb24oKSkpCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgICAgICAgICAgTm9kZUluZGV4IHNvdXJjZSA9IG5vZGUuY2hpbGQxKCkuaW5kZXgoKTsK
KyAgICAgICAgICAgICAgICAgICAgTm9kZSogc291cmNlID0gbm9kZS0+Y2hpbGQxKCkubm9kZSgp
OwogICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIHN1YkluZGV4SW5CbG9jayA9IDA7
IHN1YkluZGV4SW5CbG9jayA8IGJsb2NrLT5zaXplKCk7ICsrc3ViSW5kZXhJbkJsb2NrKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBOb2RlSW5kZXggc3ViTm9kZUluZGV4ID0gYmxvY2stPmF0
KHN1YkluZGV4SW5CbG9jayk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBOb2RlJiBzdWJOb2Rl
ID0gbV9ncmFwaFtzdWJOb2RlSW5kZXhdOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFz
dWJOb2RlLnNob3VsZEdlbmVyYXRlKCkpCisgICAgICAgICAgICAgICAgICAgICAgICBOb2RlKiBz
dWJOb2RlID0gYmxvY2stPmF0KHN1YkluZGV4SW5CbG9jayk7CisgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoIXN1Yk5vZGUtPnNob3VsZEdlbmVyYXRlKCkpCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHN1Yk5v
ZGUub3AoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChzdWJOb2RlLT5vcCgp
KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIENoZWNrU3RydWN0dXJlOiB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN1Yk5vZGUuY2hpbGQxKCkuaW5kZXgoKSAhPSBz
b3VyY2UpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN1Yk5vZGUtPmNoaWxkMSgp
ICE9IHNvdXJjZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbm90
aWNlU3RydWN0dXJlQ2hlY2sodmFyaWFibGUsIHN1Yk5vZGUuc3RydWN0dXJlU2V0KCkpOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG5vdGljZVN0cnVjdHVyZUNoZWNrKHZhcmlhYmxlLCBz
dWJOb2RlLT5zdHJ1Y3R1cmVTZXQoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICBj
YXNlIFN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50OiB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKHN1Yk5vZGUuY2hpbGQxKCkuaW5kZXgoKSAhPSBzb3VyY2UpCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKHN1Yk5vZGUtPmNoaWxkMSgpICE9IHNvdXJjZSkKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbm90aWNlU3RydWN0dXJlQ2hl
Y2sodmFyaWFibGUsIHN1Yk5vZGUuc3RydWN0dXJlKCkpOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG5vdGljZVN0cnVjdHVyZUNoZWNrKHZhcmlhYmxlLCBzdWJOb2RlLT5zdHJ1Y3R1cmUo
KSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgpAQCAtMTYxLDE0ICsx
NTksMTQgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBtX2dy
YXBoLnZvdGUobm9kZSwgVm90ZU90aGVyKTsKKyAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC52
b3RlQ2hpbGRyZW4obm9kZSwgVm90ZU90aGVyKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGNhc2UgR2FyYmFnZVZhbHVlOgog
ICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAg
ICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC52b3RlKG5vZGUs
IFZvdGVPdGhlcik7CisgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgudm90ZUNoaWxkcmVuKG5v
ZGUsIFZvdGVPdGhlcik7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIH0KQEAgLTIwOSwxMCArMjA3LDEwIEBAIHB1YmxpYzoKICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
bV9ncmFwaC5tX211c3RIYW5kbGVWYWx1ZXMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgICAgICAg
ICBpbnQgb3BlcmFuZCA9IG1fZ3JhcGgubV9tdXN0SGFuZGxlVmFsdWVzLm9wZXJhbmRGb3JJbmRl
eChpKTsKLSAgICAgICAgICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4ID0gYmxvY2stPnZhcmlh
Ymxlc0F0SGVhZC5vcGVyYW5kKG9wZXJhbmQpOwotICAgICAgICAgICAgICAgIGlmIChub2RlSW5k
ZXggPT0gTm9Ob2RlKQorICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+dmFyaWFi
bGVzQXRIZWFkLm9wZXJhbmQob3BlcmFuZCk7CisgICAgICAgICAgICAgICAgaWYgKCFub2RlKQog
ICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICBWYXJpYWJsZUFj
Y2Vzc0RhdGEqIHZhcmlhYmxlID0gbV9ncmFwaFtub2RlSW5kZXhdLnZhcmlhYmxlQWNjZXNzRGF0
YSgpOworICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBub2Rl
LT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKICAgICAgICAgICAgICAgICBIYXNoTWFwPFZhcmlhYmxl
QWNjZXNzRGF0YSosIENoZWNrRGF0YT46Oml0ZXJhdG9yIGl0ZXIgPSBtX21hcC5maW5kKHZhcmlh
YmxlKTsKICAgICAgICAgICAgICAgICBpZiAoaXRlciA9PSBtX21hcC5lbmQoKSkKICAgICAgICAg
ICAgICAgICAgICAgY29udGludWU7CkBAIC0yNjUsNDggKzI2Myw0NyBAQCBwdWJsaWM6CiAgICAg
ICAgICAgICBpZiAoIWJsb2NrKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpbmRleEluQmxvY2sgPSAwOyBpbmRleEluQmxvY2sgPCBibG9jay0+
c2l6ZSgpOyArK2luZGV4SW5CbG9jaykgewotICAgICAgICAgICAgICAgIE5vZGVJbmRleCBub2Rl
SW5kZXggPSBibG9jay0+YXQoaW5kZXhJbkJsb2NrKTsKLSAgICAgICAgICAgICAgICBOb2RlJiBu
b2RlID0gbV9ncmFwaFtub2RlSW5kZXhdOworICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBi
bG9jay0+YXQoaW5kZXhJbkJsb2NrKTsKICAgICAgICAgICAgICAgICAvLyBCZSBjYXJlZnVsIG5v
dCB0byB1c2UgJ25vZGUnIGFmdGVyIGFwcGVuZGluZyB0byB0aGUgZ3JhcGguIEluIHRob3NlIHN3
aXRjaAogICAgICAgICAgICAgICAgIC8vIGNhc2VzIHdoZXJlIHdlIG5lZWQgdG8gYXBwZW5kLCB3
ZSBmaXJzdCBjYXJlZnVsbHkgZXh0cmFjdCBldmVyeXRoaW5nIHdlIG5lZWQKICAgICAgICAgICAg
ICAgICAvLyBmcm9tIHRoZSBub2RlLCBiZWZvcmUgZG9pbmcgYW55IGFwcGVuZGluZy4KLSAgICAg
ICAgICAgICAgICBpZiAoIW5vZGUuc2hvdWxkR2VuZXJhdGUoKSkKKyAgICAgICAgICAgICAgICBp
ZiAoIW5vZGUtPnNob3VsZEdlbmVyYXRlKCkpCiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwotICAgICAgICAgICAgICAgIHN3aXRjaCAobm9kZS5vcCgpKSB7CisgICAgICAgICAgICAgICAg
c3dpdGNoIChub2RlLT5vcCgpKSB7CiAgICAgICAgICAgICAgICAgY2FzZSBTZXRBcmd1bWVudDog
ewogICAgICAgICAgICAgICAgICAgICBBU1NFUlQoIWJsb2NrSW5kZXgpOwogICAgICAgICAgICAg
ICAgICAgICAvLyBJbnNlcnQgYSBHZXRMb2NhbCBhbmQgYSBDaGVja1N0cnVjdHVyZSBpbW1lZGlh
dGVseSBmb2xsb3dpbmcgdGhpcwogICAgICAgICAgICAgICAgICAgICAvLyBTZXRBcmd1bWVudCwg
aWYgdGhlIHZhcmlhYmxlIHdhcyBhIGNhbmRpZGF0ZSBmb3Igc3RydWN0dXJlIGhvaXN0aW5nLgog
ICAgICAgICAgICAgICAgICAgICAvLyBJZiB0aGUgYmFzaWMgYmxvY2sgcHJldmlvdXNseSBvbmx5
IGhhZCB0aGUgU2V0QXJndW1lbnQgYXMgaXRzCiAgICAgICAgICAgICAgICAgICAgIC8vIHZhcmlh
YmxlLWF0LXRhaWwsIHRoZW4gcmVwbGFjZSBpdCB3aXRoIHRoaXMgR2V0TG9jYWwuCi0gICAgICAg
ICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBub2RlLnZhcmlhYmxl
QWNjZXNzRGF0YSgpOworICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZh
cmlhYmxlID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CiAgICAgICAgICAgICAgICAgICAg
IEhhc2hNYXA8VmFyaWFibGVBY2Nlc3NEYXRhKiwgQ2hlY2tEYXRhPjo6aXRlcmF0b3IgaXRlciA9
IG1fbWFwLmZpbmQodmFyaWFibGUpOwogICAgICAgICAgICAgICAgICAgICBpZiAoaXRlciA9PSBt
X21hcC5lbmQoKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
ICAgICAgICBpZiAoIWl0ZXItPnZhbHVlLm1fc3RydWN0dXJlKQogICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBD
b2RlT3JpZ2luIGNvZGVPcmlnaW4gPSBub2RlLmNvZGVPcmlnaW47CisgICAgICAgICAgICAgICAg
ICAgIENvZGVPcmlnaW4gY29kZU9yaWdpbiA9IG5vZGUtPmNvZGVPcmlnaW47CiAgICAgICAgICAg
ICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBOb2RlSW5kZXggZ2V0TG9jYWxJbmRleCA9
IGluc2VydGlvblNldC5pbnNlcnROb2RlKAorICAgICAgICAgICAgICAgICAgICBOb2RlKiBnZXRM
b2NhbCA9IGluc2VydGlvblNldC5pbnNlcnROb2RlKAogICAgICAgICAgICAgICAgICAgICAgICAg
aW5kZXhJbkJsb2NrICsgMSwgRG9udFJlZkNoaWxkcmVuLCBEb250UmVmTm9kZSwgdmFyaWFibGUt
PnByZWRpY3Rpb24oKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIEdldExvY2FsLCBjb2RlT3Jp
Z2luLCBPcEluZm8odmFyaWFibGUpLCBub2RlSW5kZXgpOworICAgICAgICAgICAgICAgICAgICAg
ICAgR2V0TG9jYWwsIGNvZGVPcmlnaW4sIE9wSW5mbyh2YXJpYWJsZSksIG5vZGUpOwogICAgICAg
ICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKICAgICAgICAgICAgICAgICAg
ICAgICAgIGluZGV4SW5CbG9jayArIDEsIFJlZkNoaWxkcmVuLCBEb250UmVmTm9kZSwgU3BlY05v
bmUsIENoZWNrU3RydWN0dXJlLAogICAgICAgICAgICAgICAgICAgICAgICAgY29kZU9yaWdpbiwg
T3BJbmZvKG1fZ3JhcGguYWRkU3RydWN0dXJlU2V0KGl0ZXItPnZhbHVlLm1fc3RydWN0dXJlKSks
CiAgICAgICAgICAgICAgICAgICAgICAgICBnZXRMb2NhbEluZGV4KTsKIAotICAgICAgICAgICAg
ICAgICAgICBpZiAoYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKHZhcmlhYmxlLT5sb2Nh
bCgpKSA9PSBub2RlSW5kZXgpCi0gICAgICAgICAgICAgICAgICAgICAgICBibG9jay0+dmFyaWFi
bGVzQXRUYWlsLm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpID0gZ2V0TG9jYWxJbmRleDsKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKGJsb2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZCh2YXJp
YWJsZS0+bG9jYWwoKSkgPT0gbm9kZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrLT52
YXJpYWJsZXNBdFRhaWwub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkgPSBnZXRMb2NhbDsKICAg
ICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguc3Vic3RpdHV0
ZUdldExvY2FsKCpibG9jaywgaW5kZXhJbkJsb2NrLCB2YXJpYWJsZSwgZ2V0TG9jYWxJbmRleCk7
CisgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguc3Vic3RpdHV0ZUdldExvY2FsKCpibG9jaywg
aW5kZXhJbkJsb2NrLCB2YXJpYWJsZSwgZ2V0TG9jYWwpOwogICAgICAgICAgICAgICAgICAgICAK
ICAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAg
ICAgICAgICAgY2FzZSBTZXRMb2NhbDogewotICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZUFj
Y2Vzc0RhdGEqIHZhcmlhYmxlID0gbm9kZS52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKKyAgICAgICAg
ICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG5vZGUtPnZhcmlhYmxl
QWNjZXNzRGF0YSgpOwogICAgICAgICAgICAgICAgICAgICBIYXNoTWFwPFZhcmlhYmxlQWNjZXNz
RGF0YSosIENoZWNrRGF0YT46Oml0ZXJhdG9yIGl0ZXIgPSBtX21hcC5maW5kKHZhcmlhYmxlKTsK
ICAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZXIgPT0gbV9tYXAuZW5kKCkpCiAgICAgICAgICAg
ICAgICAgICAgICAgICBicmVhazsKQEAgLTMxNyw4ICszMTQsOCBAQCBwdWJsaWM6CiAgICAgICAg
ICAgICAgICAgICAgIC8vIGJlIGRyb3BwZWQgaW50byB0aGlzIGJ5dGVjb2RlIHZhcmlhYmxlIGlm
IHRoZSBDaGVja1N0cnVjdHVyZSBkZWNpZGVzCiAgICAgICAgICAgICAgICAgICAgIC8vIHRvIGV4
aXQuCiAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBDb2RlT3JpZ2lu
IGNvZGVPcmlnaW4gPSBub2RlLmNvZGVPcmlnaW47Ci0gICAgICAgICAgICAgICAgICAgIE5vZGVJ
bmRleCBjaGlsZDEgPSBub2RlLmNoaWxkMSgpLmluZGV4KCk7CisgICAgICAgICAgICAgICAgICAg
IENvZGVPcmlnaW4gY29kZU9yaWdpbiA9IG5vZGUtPmNvZGVPcmlnaW47CisgICAgICAgICAgICAg
ICAgICAgIE5vZGUqIGNoaWxkMSA9IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKICAgICAgICAgICAg
ICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnROb2RlKAog
ICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBEb250UmVmQ2hpbGRyZW4sIERv
bnRSZWZOb2RlLCBTcGVjTm9uZSwgU2V0TG9jYWwsIGNvZGVPcmlnaW4sCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbGlkYXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbGlkYXRlLmNwcAkocmV2aXNpb24gMTQwOTA0KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYWxpZGF0ZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTgwLDQwICs4MCw0MyBAQCBwdWJsaWM6CiAgICAgICAgIC8vIFZhbGlkYXRlIHRoYXQgYWxs
IGxvY2FsIHZhcmlhYmxlcyBhdCB0aGUgaGVhZCBvZiB0aGUgcm9vdCBibG9jayBhcmUgZGVhZC4K
ICAgICAgICAgQmFzaWNCbG9jayogcm9vdCA9IG1fZ3JhcGgubV9ibG9ja3NbMF0uZ2V0KCk7CiAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCByb290LT52YXJpYWJsZXNBdEhlYWQubnVt
YmVyT2ZMb2NhbHMoKTsgKytpKQotICAgICAgICAgICAgVl9FUVVBTCgoc3RhdGljX2Nhc3Q8Vmly
dHVhbFJlZ2lzdGVyPihpKSwgMCksIE5vTm9kZSwgcm9vdC0+dmFyaWFibGVzQXRIZWFkLmxvY2Fs
KGkpKTsKKyAgICAgICAgICAgIFZfRVFVQUwoKHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4o
aSksIDApLCAwLCByb290LT52YXJpYWJsZXNBdEhlYWQubG9jYWwoaSkpOwogICAgICAgICAKICAg
ICAgICAgLy8gVmFsaWRhdGUgcmVmIGNvdW50cyBhbmQgdXNlcy4KLSAgICAgICAgVmVjdG9yPHVu
c2lnbmVkPiBteVJlZkNvdW50czsKLSAgICAgICAgbXlSZWZDb3VudHMuZmlsbCgwLCBtX2dyYXBo
LnNpemUoKSk7Ci0gICAgICAgIEJpdFZlY3RvciBhY2NlcHRhYmxlTm9kZUluZGljZXM7CisgICAg
ICAgIEhhc2hNYXA8Tm9kZSosIHVuc2lnbmVkPiBteVJlZkNvdW50czsKICAgICAgICAgZm9yIChC
bG9ja0luZGV4IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9ncmFwaC5tX2Jsb2Nrcy5z
aXplKCk7ICsrYmxvY2tJbmRleCkgewogICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBt
X2dyYXBoLm1fYmxvY2tzW2Jsb2NrSW5kZXhdLmdldCgpOwotICAgICAgICAgICAgaWYgKCFibG9j
aykKKyAgICAgICAgICAgIGlmICghYmxvY2sgfHwgIWJsb2NrLT5pc1JlYWNoYWJsZSkKICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGlmICghYmxvY2stPmlzUmVhY2hhYmxl
KQorICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBibG9jay0+bnVtTm9kZXMoKTsg
KytpKQorICAgICAgICAgICAgICAgIG15UmVmQ291bnRzLmFkZChibG9jay0+bm9kZShpKSwgMCk7
CisgICAgICAgIH0KKyAgICAgICAgSGFzaFNldDxOb2RlKj4gYWNjZXB0YWJsZU5vZGVzOworICAg
ICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2dyYXBo
Lm1fYmxvY2tzLnNpemUoKTsgKytibG9ja0luZGV4KSB7CisgICAgICAgICAgICBCYXNpY0Jsb2Nr
KiBibG9jayA9IG1fZ3JhcGgubV9ibG9ja3NbYmxvY2tJbmRleF0uZ2V0KCk7CisgICAgICAgICAg
ICBpZiAoIWJsb2NrIHx8ICFibG9jay0+aXNSZWFjaGFibGUpCiAgICAgICAgICAgICAgICAgY29u
dGludWU7CiAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGJsb2NrLT5udW1Ob2Rl
cygpOyArK2kpIHsKLSAgICAgICAgICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4ID0gYmxvY2st
Pm5vZGVJbmRleChpKTsKLSAgICAgICAgICAgICAgICBhY2NlcHRhYmxlTm9kZUluZGljZXMuc2V0
KG5vZGVJbmRleCk7Ci0gICAgICAgICAgICAgICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhbbm9kZUlu
ZGV4XTsKLSAgICAgICAgICAgICAgICBpZiAoIW5vZGUuc2hvdWxkR2VuZXJhdGUoKSkKKyAgICAg
ICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPm5vZGUoaSk7CisgICAgICAgICAgICAgICAg
YWNjZXB0YWJsZU5vZGVzLmFkZChub2RlKTsKKyAgICAgICAgICAgICAgICBpZiAoIW5vZGUtPnNo
b3VsZEdlbmVyYXRlKCkpCiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaiA9IDA7IGogPCBtX2dyYXBoLm51bUNoaWxkcmVuKG5vZGUp
OyArK2opIHsKICAgICAgICAgICAgICAgICAgICAgRWRnZSBlZGdlID0gbV9ncmFwaC5jaGlsZChu
b2RlLCBqKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKCFlZGdlKQogICAgICAgICAgICAgICAg
ICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAg
ICAgICBteVJlZkNvdW50c1tlZGdlLmluZGV4KCldKys7CisgICAgICAgICAgICAgICAgICAgIG15
UmVmQ291bnRzLmZpbmQoZWRnZS5ub2RlKCkpLT52YWx1ZSsrOwogICAgICAgICAgICAgICAgICAg
ICAKICAgICAgICAgICAgICAgICAgICAgLy8gVW5sZXNzIEknbSBhIEZsdXNoLCBQaGFudG9tLCBH
ZXRMb2NhbCwgb3IgUGhpLCBteSBjaGlsZHJlbiBzaG91bGQgaGFzUmVzdWx0KCkuCi0gICAgICAg
ICAgICAgICAgICAgIHN3aXRjaCAobm9kZS5vcCgpKSB7CisgICAgICAgICAgICAgICAgICAgIHN3
aXRjaCAobm9kZS0+b3AoKSkgewogICAgICAgICAgICAgICAgICAgICBjYXNlIEZsdXNoOgogICAg
ICAgICAgICAgICAgICAgICBjYXNlIFBoYW50b206CiAgICAgICAgICAgICAgICAgICAgIGNhc2Ug
R2V0TG9jYWw6CiAgICAgICAgICAgICAgICAgICAgIGNhc2UgUGhpOgogICAgICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBWQUxJREFURSgobm9kZUluZGV4LCBlZGdlKSwgbV9ncmFwaFtlZGdlXS5o
YXNSZXN1bHQoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgobm9kZSwgZWRn
ZSksIGVkZ2UtPmhhc1Jlc3VsdCgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQpAQCAtMTIxLDU0ICsxMjQs
NTAgQEAgcHVibGljOgogICAgICAgICB9CiAgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0lu
ZGV4ID0gMDsgYmxvY2tJbmRleCA8IG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgpOyArK2Jsb2NrSW5k
ZXgpIHsKICAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5tX2Jsb2Nrc1ti
bG9ja0luZGV4XS5nZXQoKTsKLSAgICAgICAgICAgIGlmICghYmxvY2spCi0gICAgICAgICAgICAg
ICAgY29udGludWU7Ci0gICAgICAgICAgICBpZiAoIWJsb2NrLT5pc1JlYWNoYWJsZSkKKyAgICAg
ICAgICAgIGlmICghYmxvY2sgfHwgIWJsb2NrLT5pc1JlYWNoYWJsZSkKICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgQml0VmVjdG9yIHBoaXNJblRo
aXNCbG9jazsKLSAgICAgICAgICAgIEJpdFZlY3RvciBub2Rlc0luVGhpc0Jsb2NrOworICAgICAg
ICAgICAgSGFzaFNldDxOb2RlKj4gcGhpc0luVGhpc0Jsb2NrOworICAgICAgICAgICAgSGFzaFNl
dDxOb2RlKj4gbm9kZXNJblRoaXNCbG9jazsKICAgICAgICAgICAgIAogICAgICAgICAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBibG9jay0+bnVtTm9kZXMoKTsgKytpKSB7Ci0gICAgICAgICAg
ICAgICAgTm9kZUluZGV4IG5vZGVJbmRleCA9IGJsb2NrLT5ub2RlSW5kZXgoaSk7Ci0gICAgICAg
ICAgICAgICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhbbm9kZUluZGV4XTsKLSAgICAgICAgICAgICAg
ICBub2Rlc0luVGhpc0Jsb2NrLnNldChub2RlSW5kZXgpOworICAgICAgICAgICAgICAgIE5vZGUq
IG5vZGUgPSBibG9jay0+bm9kZShpKTsKKyAgICAgICAgICAgICAgICBub2Rlc0luVGhpc0Jsb2Nr
LmFkZChub2RlKTsKICAgICAgICAgICAgICAgICBpZiAoYmxvY2stPmlzUGhpSW5kZXgoaSkpCi0g
ICAgICAgICAgICAgICAgICAgIHBoaXNJblRoaXNCbG9jay5zZXQobm9kZUluZGV4KTsKLSAgICAg
ICAgICAgICAgICBWX0VRVUFMKChub2RlSW5kZXgpLCBteVJlZkNvdW50c1tub2RlSW5kZXhdLCBu
b2RlLmFkanVzdGVkUmVmQ291bnQoKSk7CisgICAgICAgICAgICAgICAgICAgIHBoaXNJblRoaXNC
bG9jay5hZGQobm9kZSk7CisgICAgICAgICAgICAgICAgVl9FUVVBTCgobm9kZSksIG15UmVmQ291
bnRzLmdldChub2RlSW5kZXgpLCBub2RlLmFkanVzdGVkUmVmQ291bnQoKSk7CiAgICAgICAgICAg
ICAgICAgZm9yICh1bnNpZ25lZCBqID0gMDsgaiA8IG1fZ3JhcGgubnVtQ2hpbGRyZW4obm9kZSk7
ICsraikgewogICAgICAgICAgICAgICAgICAgICBFZGdlIGVkZ2UgPSBtX2dyYXBoLmNoaWxkKG5v
ZGUsIGopOwogICAgICAgICAgICAgICAgICAgICBpZiAoIWVkZ2UpCiAgICAgICAgICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKG5vZGVJbmRl
eCwgZWRnZSksIGFjY2VwdGFibGVOb2RlSW5kaWNlcy5nZXQoZWRnZS5pbmRleCgpKSk7CisgICAg
ICAgICAgICAgICAgICAgIFZBTElEQVRFKChub2RlLCBlZGdlKSwgYWNjZXB0YWJsZU5vZGVJbmRp
Y2VzLmNvbnRhaW5zKGVkZ2Uubm9kZSgpKSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgfQogICAgICAgICAgICAgCiAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGJs
b2NrLT5waGlzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICAgICAgTm9kZUluZGV4IG5vZGVJ
bmRleCA9IGJsb2NrLT5waGlzW2ldOwotICAgICAgICAgICAgICAgIE5vZGUmIG5vZGUgPSBtX2dy
YXBoW25vZGVJbmRleF07Ci0gICAgICAgICAgICAgICAgQVNTRVJUKHBoaXNJblRoaXNCbG9jay5n
ZXQobm9kZUluZGV4KSk7Ci0gICAgICAgICAgICAgICAgVkFMSURBVEUoKG5vZGVJbmRleCksIG5v
ZGUub3AoKSA9PSBQaGkpOwotICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBsb2NhbCA9
IG5vZGUubG9jYWwoKTsKKyAgICAgICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPnBoaXNb
aV07CisgICAgICAgICAgICAgICAgQVNTRVJUKHBoaXNJblRoaXNCbG9jay5jb250YWlucyhub2Rl
KSk7CisgICAgICAgICAgICAgICAgVkFMSURBVEUoKG5vZGUpLCBub2RlLT5vcCgpID09IFBoaSk7
CisgICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGxvY2FsID0gbm9kZS0+bG9jYWwoKTsK
ICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSAwOyBqIDwgbV9ncmFwaC5udW1DaGls
ZHJlbihub2RlKTsgKytqKSB7CiAgICAgICAgICAgICAgICAgICAgIEVkZ2UgZWRnZSA9IG1fZ3Jh
cGguY2hpbGQobm9kZSwgaik7CiAgICAgICAgICAgICAgICAgICAgIGlmICghZWRnZSkKICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgICAgICAKLSAgICAg
ICAgICAgICAgICAgICAgVkFMSURBVEUoKG5vZGVJbmRleCwgZWRnZSksCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG1fZ3JhcGhbZWRnZV0ub3AoKSA9PSBTZXRMb2NhbAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB8fCBtX2dyYXBoW2VkZ2VdLm9wKCkgPT0gU2V0QXJndW1lbnQK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgbV9ncmFwaFtlZGdlXS5vcCgpID09IEZs
dXNoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IG1fZ3JhcGhbZWRnZV0ub3AoKSA9
PSBQaGkpOworICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgobm9kZSwgZWRnZSksCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGVkZ2UtPm9wKCkgPT0gU2V0TG9jYWwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfHwgZWRnZS0+b3AoKSA9PSBTZXRBcmd1bWVudAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB8fCBlZGdlLT5vcCgpID09IEZsdXNoCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHx8IGVkZ2UtPm9wKCkgPT0gUGhpKTsKICAgICAgICAgICAgICAg
ICAgICAgCi0gICAgICAgICAgICAgICAgICAgIGlmIChwaGlzSW5UaGlzQmxvY2suZ2V0KGVkZ2Uu
aW5kZXgoKSkpCisgICAgICAgICAgICAgICAgICAgIGlmIChwaGlzSW5UaGlzQmxvY2suY29udGFp
bnMoZWRnZS5ub2RlKCkpKQogICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAg
ICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBpZiAobm9kZXNJblRoaXNCbG9j
ay5nZXQoZWRnZS5pbmRleCgpKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUo
KG5vZGVJbmRleCwgZWRnZSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2dy
YXBoW2VkZ2VdLm9wKCkgPT0gU2V0TG9jYWwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHx8IG1fZ3JhcGhbZWRnZV0ub3AoKSA9PSBTZXRBcmd1bWVudAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfHwgbV9ncmFwaFtlZGdlXS5vcCgpID09IEZsdXNoKTsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKG5vZGVzSW5UaGlzQmxvY2suY29udGFpbnMoZWRnZS5ub2RlKCkp
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgobm9kZSwgZWRnZSksCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZGdlLT5vcCgpID09IFNldExvY2FsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBlZGdlLT5vcCgpID09IFNldEFyZ3VtZW50
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBlZGdlLT5vcCgpID09IEZsdXNo
KTsKICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgY29u
dGludWU7CiAgICAgICAgICAgICAgICAgICAgIH0KQEAgLTE4MCwzMyArMTc5LDMwIEBAIHB1Ymxp
YzoKICAgICAgICAgICAgICAgICAgICAgICAgIEJhc2ljQmxvY2sqIHByZXZCbG9jayA9IG1fZ3Jh
cGgubV9ibG9ja3NbYmxvY2stPm1fcHJlZGVjZXNzb3JzW2tdXS5nZXQoKTsKICAgICAgICAgICAg
ICAgICAgICAgICAgIFZBTElEQVRFKChCbG9jaywgYmxvY2stPm1fcHJlZGVjZXNzb3JzW2tdKSwg
cHJldkJsb2NrKTsKICAgICAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChCbG9jaywgYmxv
Y2stPm1fcHJlZGVjZXNzb3JzW2tdKSwgcHJldkJsb2NrLT5pc1JlYWNoYWJsZSk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBOb2RlSW5kZXggcHJldk5vZGVJbmRleCA9IHByZXZCbG9jay0+dmFy
aWFibGVzQXRUYWlsLm9wZXJhbmQobG9jYWwpOworICAgICAgICAgICAgICAgICAgICAgICAgTm9k
ZSogcHJldk5vZGUgPSBwcmV2QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKGxvY2FsKTsK
ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIHdlIGhhdmUgYSBQaGkgdGhhdCBpcyBub3Qg
cmVmZXJyaW5nIHRvICp0aGlzKiBibG9jayB0aGVuIGFsbCBwcmVkZWNlc3NvcnMKICAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIG11c3QgaGF2ZSB0aGF0IGxvY2FsIGF2YWlsYWJsZS4KLSAgICAg
ICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChsb2NhbCwgYmxvY2tJbmRleCwgQmxvY2ssIGJs
b2NrLT5tX3ByZWRlY2Vzc29yc1trXSksIHByZXZOb2RlSW5kZXggIT0gTm9Ob2RlKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIE5vZGUqIHByZXZOb2RlID0gJm1fZ3JhcGhbcHJldk5vZGVJbmRl
eF07Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJldk5vZGUtPm9wKCkgPT0gR2V0TG9j
YWwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2Tm9kZUluZGV4ID0gcHJldk5v
ZGUtPmNoaWxkMSgpLmluZGV4KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldk5v
ZGUgPSAmbV9ncmFwaFtwcmV2Tm9kZUluZGV4XTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLnNob3VsZEdlbmVyYXRlKCkpIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgobG9jYWwsIGJsb2NrLT5tX3ByZWRl
Y2Vzc29yc1trXSwgcHJldk5vZGVJbmRleCksCisgICAgICAgICAgICAgICAgICAgICAgICBWQUxJ
REFURSgobG9jYWwsIGJsb2NrSW5kZXgsIEJsb2NrLCBibG9jay0+bV9wcmVkZWNlc3NvcnNba10p
LCBwcmV2Tm9kZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJldk5vZGUtPm9wKCkg
PT0gR2V0TG9jYWwpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldk5vZGUgPSBwcmV2
Tm9kZS0+Y2hpbGQxKCkubm9kZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUt
PnNob3VsZEdlbmVyYXRlKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBWQUxJREFU
RSgobG9jYWwsIGJsb2NrLT5tX3ByZWRlY2Vzc29yc1trXSwgcHJldk5vZGUpLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXZOb2RlLT5zaG91bGRHZW5lcmF0ZSgpKTsK
ICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIFZBTElE
QVRFKChsb2NhbCwgYmxvY2stPm1fcHJlZGVjZXNzb3JzW2tdLCBwcmV2Tm9kZUluZGV4KSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChsb2NhbCwgYmxvY2stPm1fcHJlZGVjZXNz
b3JzW2tdLCBwcmV2Tm9kZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2
Tm9kZS0+b3AoKSA9PSBTZXRMb2NhbAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fHwgcHJldk5vZGUtPm9wKCkgPT0gU2V0QXJndW1lbnQKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHx8IHByZXZOb2RlLT5vcCgpID09IEZsdXNoCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB8fCBwcmV2Tm9kZS0+b3AoKSA9PSBQaGkpOwotICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKHByZXZOb2RlSW5kZXggPT0gZWRnZS5pbmRleCgpKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAocHJldk5vZGUgPT0gZWRnZS5ub2RlKCkpIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBBdCB0aGlzIHBvaW50IGl0IGNhbm5vdCByZWZlciBpbnRvIHRoaXMgYmxvY2suCi0g
ICAgICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgobG9jYWwsIGJsb2NrLT5tX3ByZWRlY2Vz
c29yc1trXSwgcHJldk5vZGVJbmRleCksICFwcmV2QmxvY2stPmlzSW5CbG9jayhlZGdlLmluZGV4
KCkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChsb2NhbCwgYmxvY2stPm1f
cHJlZGVjZXNzb3JzW2tdLCBwcmV2Tm9kZSksICFwcmV2QmxvY2stPmlzSW5CbG9jayhlZGdlLm5v
ZGUoKSkpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIAotICAg
ICAgICAgICAgICAgICAgICBWQUxJREFURSgobm9kZUluZGV4LCBlZGdlKSwgZm91bmQpOworICAg
ICAgICAgICAgICAgICAgICBWQUxJREFURSgobm9kZSwgZWRnZSksIGZvdW5kKTsKICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKQEAgLTIyNywzNCArMjIzLDMz
IEBAIHB1YmxpYzoKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBibG9jay0+c2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgICAg
ICBOb2RlSW5kZXggbm9kZUluZGV4ID0gYmxvY2stPmF0KGkpOwotICAgICAgICAgICAgICAgIE5v
ZGUmIG5vZGUgPSBtX2dyYXBoW25vZGVJbmRleF07Ci0gICAgICAgICAgICAgICAgQVNTRVJUKG5v
ZGVzSW5UaGlzQmxvY2suZ2V0KG5vZGVJbmRleCkpOwotICAgICAgICAgICAgICAgIFZBTElEQVRF
KChub2RlSW5kZXgpLCBub2RlLm9wKCkgIT0gUGhpKTsKKyAgICAgICAgICAgICAgICBOb2RlKiBu
b2RlID0gYmxvY2stPmF0KGkpOworICAgICAgICAgICAgICAgIEFTU0VSVChub2Rlc0luVGhpc0Js
b2NrLmNvbnRhaW5zKG5vZGUpKTsKKyAgICAgICAgICAgICAgICBWQUxJREFURSgobm9kZSksIG5v
ZGUtPm9wKCkgIT0gUGhpKTsKICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSAwOyBq
IDwgbV9ncmFwaC5udW1DaGlsZHJlbihub2RlKTsgKytqKSB7CiAgICAgICAgICAgICAgICAgICAg
IEVkZ2UgZWRnZSA9IG1fZ3JhcGguY2hpbGQobm9kZSwgaik7CiAgICAgICAgICAgICAgICAgICAg
IGlmICghZWRnZSkKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAg
ICAgICAgICAgICBWQUxJREFURSgobm9kZUluZGV4LCBlZGdlKSwgbm9kZXNJblRoaXNCbG9jay5n
ZXQobm9kZUluZGV4KSk7CisgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChub2RlLCBlZGdl
KSwgbm9kZXNJblRoaXNCbG9jay5jb250YWlucyhlZGdlLm5vZGUoKSkpOwogICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBpZiAoIW5vZGUuc2hvdWxk
R2VuZXJhdGUoKSkKKyAgICAgICAgICAgICAgICBpZiAoIW5vZGUtPnNob3VsZEdlbmVyYXRlKCkp
CiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIHN3aXRjaCAo
bm9kZS5vcCgpKSB7CisgICAgICAgICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CiAgICAg
ICAgICAgICAgICAgY2FzZSBHZXRMb2NhbDoKLSAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUu
dmFyaWFibGVBY2Nlc3NEYXRhKCktPmlzQ2FwdHVyZWQoKSkKKyAgICAgICAgICAgICAgICAgICAg
aWYgKG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5pc0NhcHR1cmVkKCkpCiAgICAgICAgICAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKG5vZGVJ
bmRleCwgYmxvY2tJbmRleCksIGdldExvY2FsUG9zaXRpb25zLm9wZXJhbmQobm9kZS5sb2NhbCgp
KSA9PSBub3RTZXQpOwotICAgICAgICAgICAgICAgICAgICBnZXRMb2NhbFBvc2l0aW9ucy5vcGVy
YW5kKG5vZGUubG9jYWwoKSkgPSBpOworICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgobm9k
ZSwgYmxvY2tJbmRleCksIGdldExvY2FsUG9zaXRpb25zLm9wZXJhbmQobm9kZS0+bG9jYWwoKSkg
PT0gbm90U2V0KTsKKyAgICAgICAgICAgICAgICAgICAgZ2V0TG9jYWxQb3NpdGlvbnMub3BlcmFu
ZChub2RlLT5sb2NhbCgpKSA9IGk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgICAgIGNhc2UgU2V0TG9jYWw6Ci0gICAgICAgICAgICAgICAgICAgIGlmIChub2RlLnZh
cmlhYmxlQWNjZXNzRGF0YSgpLT5pc0NhcHR1cmVkKCkpCisgICAgICAgICAgICAgICAgICAgIGlm
IChub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+aXNDYXB0dXJlZCgpKQogICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIC8vIE9ubHkgcmVjb3JkIHRo
ZSBmaXJzdCBTZXRMb2NhbC4gVGhlcmUgbWF5IGJlIG11bHRpcGxlIFNldExvY2FscwogICAgICAg
ICAgICAgICAgICAgICAvLyBiZWNhdXNlIG9mIGZsdXNoaW5nLgotICAgICAgICAgICAgICAgICAg
ICBpZiAoc2V0TG9jYWxQb3NpdGlvbnMub3BlcmFuZChub2RlLmxvY2FsKCkpICE9IG5vdFNldCkK
KyAgICAgICAgICAgICAgICAgICAgaWYgKHNldExvY2FsUG9zaXRpb25zLm9wZXJhbmQobm9kZS0+
bG9jYWwoKSkgIT0gbm90U2V0KQogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICAgICAgICAgIHNldExvY2FsUG9zaXRpb25zLm9wZXJhbmQobm9kZS5sb2NhbCgpKSA9
IGk7CisgICAgICAgICAgICAgICAgICAgIHNldExvY2FsUG9zaXRpb25zLm9wZXJhbmQobm9kZS0+
bG9jYWwoKSkgPSBpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAg
ICBkZWZhdWx0OgogICAgICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTI5NCw5ICsyODksOSBA
QCBwcml2YXRlOgogICAgICAgICAgICAgZ2V0TG9jYWxQb3NpdGlvbnMub3BlcmFuZChvcGVyYW5k
KSA8IHNldExvY2FsUG9zaXRpb25zLm9wZXJhbmQob3BlcmFuZCkpOwogICAgIH0KICAgICAKLSAg
ICB2b2lkIHJlcG9ydFZhbGlkYXRpb25Db250ZXh0KE5vZGVJbmRleCBub2RlSW5kZXgpCisgICAg
dm9pZCByZXBvcnRWYWxpZGF0aW9uQ29udGV4dChOb2RlKiBub2RlKQogICAgIHsKLSAgICAgICAg
ZGF0YUxvZ0YoIkAldSIsIG5vZGVJbmRleCk7CisgICAgICAgIGRhdGFMb2dGKCJAJXUiLCBub2Rl
LT5pbmRleCgpKTsKICAgICB9CiAgICAgCiAgICAgZW51bSBCbG9ja1RhZyB7IEJsb2NrIH07CkBA
IC0zMDUsOSArMzAwLDkgQEAgcHJpdmF0ZToKICAgICAgICAgZGF0YUxvZ0YoIkJsb2NrICMldSIs
IGJsb2NrSW5kZXgpOwogICAgIH0KICAgICAKLSAgICB2b2lkIHJlcG9ydFZhbGlkYXRpb25Db250
ZXh0KE5vZGVJbmRleCBub2RlSW5kZXgsIEVkZ2UgZWRnZSkKKyAgICB2b2lkIHJlcG9ydFZhbGlk
YXRpb25Db250ZXh0KE5vZGUqIG5vZGUsIEVkZ2UgZWRnZSkKICAgICB7Ci0gICAgICAgIGRhdGFM
b2dGKCJAJXUgLT4gJXNAJXUiLCBub2RlSW5kZXgsIHVzZUtpbmRUb1N0cmluZyhlZGdlLnVzZUtp
bmQoKSksIGVkZ2UuaW5kZXgoKSk7CisgICAgICAgIGRhdGFMb2dGKCJAJXUgLT4gJXNAJXUiLCBu
b2RlLT5pbmRleCgpLCB1c2VLaW5kVG9TdHJpbmcoZWRnZS51c2VLaW5kKCkpLCBlZGdlLmluZGV4
KCkpOwogICAgIH0KICAgICAKICAgICB2b2lkIHJlcG9ydFZhbGlkYXRpb25Db250ZXh0KFZpcnR1
YWxSZWdpc3RlciBsb2NhbCwgQmxvY2tJbmRleCBibG9ja0luZGV4KQpAQCAtMzIyLDI3ICszMTcs
MjcgQEAgcHJpdmF0ZToKICAgICB9CiAgICAgCiAgICAgdm9pZCByZXBvcnRWYWxpZGF0aW9uQ29u
dGV4dCgKLSAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGxvY2FsLCBCbG9ja0luZGV4IHNvdXJjZUJs
b2NrSW5kZXgsIE5vZGVJbmRleCBwcmV2Tm9kZUluZGV4KQorICAgICAgICBWaXJ0dWFsUmVnaXN0
ZXIgbG9jYWwsIEJsb2NrSW5kZXggc291cmNlQmxvY2tJbmRleCwgTm9kZSogcHJldk5vZGUpCiAg
ICAgewotICAgICAgICBkYXRhTG9nRigiQCV1IGZvciByJWQgaW4gQmxvY2sgIyV1IiwgcHJldk5v
ZGVJbmRleCwgbG9jYWwsIHNvdXJjZUJsb2NrSW5kZXgpOworICAgICAgICBkYXRhTG9nRigiQCV1
IGZvciByJWQgaW4gQmxvY2sgIyV1IiwgcHJldk5vZGUtPmluZGV4KCksIGxvY2FsLCBzb3VyY2VC
bG9ja0luZGV4KTsKICAgICB9CiAgICAgCiAgICAgdm9pZCByZXBvcnRWYWxpZGF0aW9uQ29udGV4
dCgKLSAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRleCwgQmxvY2tJbmRleCBibG9ja0luZGV4KQor
ICAgICAgICBOb2RlKiBub2RlLCBCbG9ja0luZGV4IGJsb2NrSW5kZXgpCiAgICAgewotICAgICAg
ICBkYXRhTG9nRigiQCV1IGluIEJsb2NrICMldSIsIG5vZGVJbmRleCwgYmxvY2tJbmRleCk7Cisg
ICAgICAgIGRhdGFMb2dGKCJAJXUgaW4gQmxvY2sgIyV1Iiwgbm9kZS0+aW5kZXgoKSwgYmxvY2tJ
bmRleCk7CiAgICAgfQogICAgIAogICAgIHZvaWQgcmVwb3J0VmFsaWRhdGlvbkNvbnRleHQoCi0g
ICAgICAgIE5vZGVJbmRleCBub2RlSW5kZXgsIE5vZGVJbmRleCBub2RlSW5kZXgyLCBCbG9ja0lu
ZGV4IGJsb2NrSW5kZXgpCisgICAgICAgIE5vZGUqIG5vZGUsIE5vZGUqIG5vZGUyLCBCbG9ja0lu
ZGV4IGJsb2NrSW5kZXgpCiAgICAgewotICAgICAgICBkYXRhTG9nRigiQCV1IGFuZCBAJXUgaW4g
QmxvY2sgIyV1Iiwgbm9kZUluZGV4LCBub2RlSW5kZXgyLCBibG9ja0luZGV4KTsKKyAgICAgICAg
ZGF0YUxvZ0YoIkAldSBhbmQgQCV1IGluIEJsb2NrICMldSIsIG5vZGUtPmluZGV4KCksIG5vZGUy
LT5pbmRleCgpLCBibG9ja0luZGV4KTsKICAgICB9CiAgICAgCiAgICAgdm9pZCByZXBvcnRWYWxp
ZGF0aW9uQ29udGV4dCgKLSAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRleCwgQmxvY2tJbmRleCBi
bG9ja0luZGV4LCBOb2RlSW5kZXggZXhwZWN0ZWROb2RlSW5kZXgsIEVkZ2UgaW5jb21pbmdFZGdl
KQorICAgICAgICBOb2RlKiBub2RlLCBCbG9ja0luZGV4IGJsb2NrSW5kZXgsIE5vZGUqIGV4cGVj
dGVkTm9kZSwgRWRnZSBpbmNvbWluZ0VkZ2UpCiAgICAgewotICAgICAgICBkYXRhTG9nRigiQCV1
IGluIEJsb2NrICMldSwgc2VhcmNoaW5nIGZvciBAJXUgZnJvbSBAJXUiLCBub2RlSW5kZXgsIGJs
b2NrSW5kZXgsIGV4cGVjdGVkTm9kZUluZGV4LCBpbmNvbWluZ0VkZ2UuaW5kZXgoKSk7CisgICAg
ICAgIGRhdGFMb2dGKCJAJXUgaW4gQmxvY2sgIyV1LCBzZWFyY2hpbmcgZm9yIEAldSBmcm9tIEAl
dSIsIG5vZGUtPmluZGV4KCksIGJsb2NrSW5kZXgsIGV4cGVjdGVkTm9kZS0+aW5kZXgoKSwgaW5j
b21pbmdFZGdlLmluZGV4KCkpOwogICAgIH0KICAgICAKICAgICB2b2lkIGR1bXBEYXRhKHVuc2ln
bmVkIHZhbHVlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWaXJ0dWFsUmVn
aXN0ZXJBbGxvY2F0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHVmlydHVhbFJlZ2lzdGVyQWxsb2NhdGlvblBoYXNlLmNwcAkocmV2aXNpb24g
MTQwOTA0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWaXJ0dWFsUmVnaXN0ZXJB
bGxvY2F0aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OCw3ICs0OCw3IEBAIHB1Ymxp
YzoKICAgICAgICAgbV9ncmFwaC5tX3ByZXNlcnZlZFZhcnMuZHVtcChXVEY6OmRhdGFGaWxlKCkp
OwogICAgICAgICBkYXRhTG9nRigiXG4iKTsKICNlbmRpZgotICAgICAgICBTY29yZUJvYXJkIHNj
b3JlQm9hcmQobV9ncmFwaCwgbV9ncmFwaC5tX3ByZXNlcnZlZFZhcnMpOworICAgICAgICBTY29y
ZUJvYXJkIHNjb3JlQm9hcmQobV9ncmFwaC5tX3ByZXNlcnZlZFZhcnMpOwogICAgICAgICBzY29y
ZUJvYXJkLmFzc2VydENsZWFyKCk7CiAjaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9W
RVJCT1NFKQogICAgICAgICBib29sIG5lZWRzTmV3TGluZSA9IGZhbHNlOwpAQCAtNjAsNDcgKzYw
LDQ3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIGlmICghYmxvY2stPmlzUmVhY2hhYmxlKQogICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgZm9yIChzaXplX3QgaW5kZXhJbkJs
b2NrID0gMDsgaW5kZXhJbkJsb2NrIDwgYmxvY2stPnNpemUoKTsgKytpbmRleEluQmxvY2spIHsK
LSAgICAgICAgICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4ID0gYmxvY2stPmF0KGluZGV4SW5C
bG9jayk7CisgICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5hdChpbmRleEluQmxv
Y2spOwogI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKICAgICAgICAg
ICAgICAgICBpZiAobmVlZHNOZXdMaW5lKQogICAgICAgICAgICAgICAgICAgICBkYXRhTG9nRigi
XG4iKTsKLSAgICAgICAgICAgICAgICBkYXRhTG9nRigiICAgQCV1OiIsIG5vZGVJbmRleCk7Cisg
ICAgICAgICAgICAgICAgZGF0YUxvZ0YoIiAgIEAldToiLCBub2RlLT5pbmRleCgpKTsKICAgICAg
ICAgICAgICAgICBuZWVkc05ld0xpbmUgPSB0cnVlOwogI2VuZGlmCi0gICAgICAgICAgICAgICAg
Tm9kZSYgbm9kZSA9IG1fZ3JhcGhbbm9kZUluZGV4XTsKICAgICAgICAgCi0gICAgICAgICAgICAg
ICAgaWYgKCFub2RlLnNob3VsZEdlbmVyYXRlKCkgfHwgbm9kZS5vcCgpID09IFBoaSB8fCBub2Rl
Lm9wKCkgPT0gRmx1c2gpCisgICAgICAgICAgICAgICAgaWYgKCFub2RlLT5zaG91bGRHZW5lcmF0
ZSgpIHx8IG5vZGUtPm9wKCkgPT0gUGhpIHx8IG5vZGUtPm9wKCkgPT0gRmx1c2gpCiAgICAgICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAg
IGlmIChub2RlLm9wKCkgPT0gR2V0TG9jYWwpCi0gICAgICAgICAgICAgICAgICAgIEFTU0VSVCgh
bV9ncmFwaFtub2RlLmNoaWxkMSgpXS5oYXNSZXN1bHQoKSk7CisgICAgICAgICAgICAgICAgaWYg
KG5vZGUtPm9wKCkgPT0gR2V0TG9jYWwpCisgICAgICAgICAgICAgICAgICAgIEFTU0VSVCghbm9k
ZS0+Y2hpbGQxKCktPmhhc1Jlc3VsdCgpKTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAg
ICAgICAvLyBGaXJzdCwgY2FsbCB1c2Ugb24gYWxsIG9mIHRoZSBjdXJyZW50IG5vZGUncyBjaGls
ZHJlbiwgdGhlbgogICAgICAgICAgICAgICAgIC8vIGFsbG9jYXRlIGEgVmlydHVhbFJlZ2lzdGVy
IGZvciB0aGlzIG5vZGUuIFdlIGRvIHNvIGluIHRoaXMKICAgICAgICAgICAgICAgICAvLyBvcmRl
ciBzbyB0aGF0IGlmIGEgY2hpbGQgaXMgb24gaXRzIGxhc3QgdXNlLCBhbmQgYQogICAgICAgICAg
ICAgICAgIC8vIFZpcnR1YWxSZWdpc3RlciBpcyBmcmVlZCwgdGhlbiBpdCBtYXkgYmUgcmV1c2Vk
IGZvciBub2RlLgotICAgICAgICAgICAgICAgIGlmIChub2RlLmZsYWdzKCkgJiBOb2RlSGFzVmFy
QXJncykgeworICAgICAgICAgICAgICAgIGlmIChub2RlLT5mbGFncygpICYgTm9kZUhhc1ZhckFy
Z3MpIHsKICAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBjaGlsZElkeCA9IG5vZGUu
Zmlyc3RDaGlsZCgpOyBjaGlsZElkeCA8IG5vZGUuZmlyc3RDaGlsZCgpICsgbm9kZS5udW1DaGls
ZHJlbigpOyBjaGlsZElkeCsrKQogICAgICAgICAgICAgICAgICAgICAgICAgc2NvcmVCb2FyZC51
c2VJZkhhc1Jlc3VsdChtX2dyYXBoLm1fdmFyQXJnQ2hpbGRyZW5bY2hpbGRJZHhdKTsKICAgICAg
ICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBzY29yZUJvYXJkLnVzZUlm
SGFzUmVzdWx0KG5vZGUuY2hpbGQxKCkpOwotICAgICAgICAgICAgICAgICAgICBzY29yZUJvYXJk
LnVzZUlmSGFzUmVzdWx0KG5vZGUuY2hpbGQyKCkpOwotICAgICAgICAgICAgICAgICAgICBzY29y
ZUJvYXJkLnVzZUlmSGFzUmVzdWx0KG5vZGUuY2hpbGQzKCkpOworICAgICAgICAgICAgICAgICAg
ICBzY29yZUJvYXJkLnVzZUlmSGFzUmVzdWx0KG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAg
ICAgICAgICAgc2NvcmVCb2FyZC51c2VJZkhhc1Jlc3VsdChub2RlLT5jaGlsZDIoKSk7CisgICAg
ICAgICAgICAgICAgICAgIHNjb3JlQm9hcmQudXNlSWZIYXNSZXN1bHQobm9kZS0+Y2hpbGQzKCkp
OwogICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIGlmICghbm9kZS5oYXNSZXN1
bHQoKSkKKyAgICAgICAgICAgICAgICBpZiAoIW5vZGUtPmhhc1Jlc3VsdCgpKQogICAgICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciB2
aXJ0dWFsUmVnaXN0ZXIgPSBzY29yZUJvYXJkLmFsbG9jYXRlKCk7CiAjaWYgREZHX0VOQUJMRShE
RUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQotICAgICAgICAgICAgICAgIGRhdGFMb2dGKCIgQXNz
aWduaW5nIHZpcnR1YWwgcmVnaXN0ZXIgJXUgdG8gbm9kZSAldS4iLAotICAgICAgICAgICAgICAg
ICAgICAgICAgdmlydHVhbFJlZ2lzdGVyLCBub2RlSW5kZXgpOworICAgICAgICAgICAgICAgIGRh
dGFMb2dGKAorICAgICAgICAgICAgICAgICAgICAiIEFzc2lnbmluZyB2aXJ0dWFsIHJlZ2lzdGVy
ICV1IHRvIG5vZGUgJXUuIiwKKyAgICAgICAgICAgICAgICAgICAgdmlydHVhbFJlZ2lzdGVyLCBu
b2RlLT5pbmRleCgpKTsKICNlbmRpZgotICAgICAgICAgICAgICAgIG5vZGUuc2V0VmlydHVhbFJl
Z2lzdGVyKHZpcnR1YWxSZWdpc3Rlcik7CisgICAgICAgICAgICAgICAgbm9kZS0+c2V0VmlydHVh
bFJlZ2lzdGVyKHZpcnR1YWxSZWdpc3Rlcik7CiAgICAgICAgICAgICAgICAgLy8gJ211c3RHZW5l
cmF0ZScgbm9kZXMgaGF2ZSB0aGVpciB1c2VDb3VudCBhcnRpZmljaWFsbHkgZWxldmF0ZWQsCiAg
ICAgICAgICAgICAgICAgLy8gY2FsbCB1c2Ugbm93IHRvIGFjY291bnQgZm9yIHRoaXMuCi0gICAg
ICAgICAgICAgICAgaWYgKG5vZGUubXVzdEdlbmVyYXRlKCkpCi0gICAgICAgICAgICAgICAgICAg
IHNjb3JlQm9hcmQudXNlKG5vZGVJbmRleCk7CisgICAgICAgICAgICAgICAgaWYgKG5vZGUtPm11
c3RHZW5lcmF0ZSgpKQorICAgICAgICAgICAgICAgICAgICBzY29yZUJvYXJkLnVzZShub2RlKTsK
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHNjb3JlQm9hcmQuYXNzZXJ0Q2xlYXIoKTsKICAg
ICAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25FeGVj
dXRhYmxlRHVtcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvRnVuY3Rpb25FeGVjdXRhYmxlRHVtcC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvbkV4ZWN1dGFibGVEdW1wLmNwcAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSwzNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRnVuY3Rpb25FeGVjdXRh
YmxlRHVtcC5oIgorCituYW1lc3BhY2UgSlNDIHsKKwordm9pZCBGdW5jdGlvbkV4ZWN1dGFibGVE
dW1wOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KG1fZXhl
Y3V0YWJsZS0+aW5mZXJyZWROYW1lKCkuc3RyaW5nKCksICIjIiwgbV9leGVjdXRhYmxlLT5oYXNo
Rm9yKENvZGVGb3JDYWxsKSwgIi8iLCBtX2V4ZWN1dGFibGUtPmhhc2hGb3IoQ29kZUZvckNvbnN0
cnVjdCksICI6WyIsIFJhd1BvaW50ZXIobV9leGVjdXRhYmxlKSwgIl0iKTsKK30KKworfSAvLyBu
YW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0
aW9uRXhlY3V0YWJsZUR1bXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9GdW5jdGlvbkV4ZWN1dGFibGVEdW1wLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvbkV4ZWN1dGFibGVEdW1wLmgJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsNDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2lmbmRlZiBGdW5jdGlvbkV4ZWN1dGFibGVEdW1wX2gKKyNkZWZpbmUgRnVu
Y3Rpb25FeGVjdXRhYmxlRHVtcF9oCisKKyNpbmNsdWRlICJFeGVjdXRhYmxlLmgiCisjaW5jbHVk
ZSA8d3RmL1ByaW50U3RyZWFtLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBGdW5jdGlv
bkV4ZWN1dGFibGVEdW1wIHsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBGdW5jdGlvbkV4ZWN1dGFi
bGVEdW1wKEZ1bmN0aW9uRXhlY3V0YWJsZSogZXhlY3V0YWJsZSkKKyAgICAgICAgOiBtX2V4ZWN1
dGFibGUoZXhlY3V0YWJsZSkKKyAgICB7CisgICAgfQorICAgIAorICAgIHZvaWQgZHVtcChQcmlu
dFN0cmVhbSYpIGNvbnN0OworcHJpdmF0ZToKKyAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIG1fZXhl
Y3V0YWJsZTsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gRnVuY3Rpb25F
eGVjdXRhYmxlRHVtcF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
R2xvYmFsRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNHbG9iYWxEYXRhLmNwcAkocmV2aXNpb24gMTQwOTA0KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiAr
MzIsNyBAQAogI2luY2x1ZGUgIkFyZ0xpc3QuaCIKICNpbmNsdWRlICJDb2RlQ2FjaGUuaCIKICNp
bmNsdWRlICJDb21tb25JZGVudGlmaWVycy5oIgorI2luY2x1ZGUgIkRGR0xvbmdMaXZlZFN0YXRl
LmgiCiAjaW5jbHVkZSAiRGVidWdnZXJBY3RpdmF0aW9uLmgiCiAjaW5jbHVkZSAiRnVuY3Rpb25D
b25zdHJ1Y3Rvci5oIgogI2luY2x1ZGUgIkdDQWN0aXZpdHlDYWxsYmFjay5oIgpAQCAtMjUxLDYg
KzI1MiwxMSBAQCBKU0dsb2JhbERhdGE6OkpTR2xvYmFsRGF0YShHbG9iYWxEYXRhVHlwCiAgICAg
CiAgICAgaWYgKE9wdGlvbnM6OmVuYWJsZVByb2ZpbGVyKCkpCiAgICAgICAgIG1fcGVyQnl0ZWNv
ZGVQcm9maWxlciA9IGFkb3B0UHRyKG5ldyBQcm9maWxlcjo6RGF0YWJhc2UoKnRoaXMpKTsKKwor
I2lmIEVOQUJMRShERkdfSklUKQorICAgIGlmIChjYW5Vc2VKSVQoKSkKKyAgICAgICAgbV9kZmdT
dGF0ZSA9IGFkb3B0UHRyKG5ldyBERkc6OkxvbmdMaXZlZFN0YXRlKCkpOworI2VuZGlmCiB9CiAK
IEpTR2xvYmFsRGF0YTo6fkpTR2xvYmFsRGF0YSgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0dsb2JhbERhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuaAkocmV2aXNpb24gMTQwOTA0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmgJKHdvcmtpbmcgY29weSkKQEAg
LTkxLDYgKzkxLDEyIEBAIG5hbWVzcGFjZSBKU0MgewogICAgIGNsYXNzIFVubGlua2VkRnVuY3Rp
b25FeGVjdXRhYmxlOwogICAgIGNsYXNzIFVubGlua2VkUHJvZ3JhbUNvZGVCbG9jazsKIAorI2lm
IEVOQUJMRShERkdfSklUKQorICAgIG5hbWVzcGFjZSBERkcgeworICAgIGNsYXNzIExvbmdMaXZl
ZFN0YXRlOworICAgIH0KKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwogICAgIHN0cnVjdCBI
YXNoVGFibGU7CiAgICAgc3RydWN0IEluc3RydWN0aW9uOwogCkBAIC0xODksNiArMTk1LDEwIEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICAvLyBUaGUgaGVhcCBzaG91bGQgYmUganVzdCBhZnRl
ciBleGVjdXRhYmxlQWxsb2NhdG9yIGFuZCBiZWZvcmUgb3RoZXIgbWVtYmVycyB0byBlbnN1cmUg
dGhhdCBpdCdzCiAgICAgICAgIC8vIGRlc3RydWN0ZWQgYWZ0ZXIgYWxsIHRoZSBvYmplY3RzIHRo
YXQgcmVmZXJlbmNlIGl0LgogICAgICAgICBIZWFwIGhlYXA7CisgICAgICAgIAorI2lmIEVOQUJM
RShERkdfSklUKQorICAgICAgICBPd25QdHI8REZHOjpMb25nTGl2ZWRTdGF0ZT4gbV9kZmdTdGF0
ZTsKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKIAogICAgICAgICBHbG9iYWxEYXRhVHlwZSBn
bG9iYWxEYXRhVHlwZTsKICAgICAgICAgQ2xpZW50RGF0YSogY2xpZW50RGF0YTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>184894</attachid>
            <date>2013-01-26 18:27:51 -0800</date>
            <delta_ts>2013-01-27 13:32:53 -0800</delta_ts>
            <desc>work in progress</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>0</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64"></data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>184922</attachid>
            <date>2013-01-27 13:32:53 -0800</date>
            <delta_ts>2013-01-27 19:33:31 -0800</delta_ts>
            <desc>work in progress</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>0</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64"></data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>184930</attachid>
            <date>2013-01-27 19:33:31 -0800</date>
            <delta_ts>2013-01-28 14:05:34 -0800</delta_ts>
            <desc>it&apos;s starting to compile</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>987136</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxNDA5MDQpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTA3Nyw2ICsxMDc3LDE1IEBACiAJCTBGQjEwNTg5MTY3
NTQ4MkUwMEY4QUI2RSAvKiBQcm9maWxlck9TUkV4aXRTaXRlLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFByb2ZpbGVyT1NSRXhpdFNpdGUuY3BwOyBwYXRoID0gcHJv
ZmlsZXIvUHJvZmlsZXJPU1JFeGl0U2l0ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTBGQjEwNThBMTY3NTQ4MkUwMEY4QUI2RSAvKiBQcm9maWxlck9TUkV4aXRTaXRlLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFByb2ZpbGVyT1NSRXhpdFNpdGUuaDsgcGF0
aCA9IHByb2ZpbGVyL1Byb2ZpbGVyT1NSRXhpdFNpdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMEZCNEI1MTAxNkIzQTk2NDAwM0Y2OTZCIC8qIERGR01pbmlmaWVkSUQuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHTWluaWZpZWRJRC5oOyBwYXRoID0gZGZn
L0RGR01pbmlmaWVkSUQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZCNEI1MTkx
NkI2Mjc3MjAwM0Y2OTZCIC8qIERGR0FsbG9jYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBERkdBbGxvY2F0b3IuaDsgcGF0aCA9IGRmZy9ERkdBbGxvY2F0b3IuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZCNEI1MUExNkI2Mjc3MjAwM0Y2OTZCIC8qIERG
R0NvbW1vbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdDb21t
b24uY3BwOyBwYXRoID0gZGZnL0RGR0NvbW1vbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTBGQjRCNTFCMTZCNjI3NzIwMDNGNjk2QiAvKiBERkdFZGdlLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0VkZ2UuY3BwOyBwYXRoID0gZGZnL0RGR0Vk
Z2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkI0QjUxQzE2QjYyNzcyMDAz
RjY5NkIgLyogREZHTG9uZ0xpdmVkU3RhdGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBuYW1lID0gREZHTG9uZ0xpdmVkU3RhdGUuY3BwOyBwYXRoID0gZGZnL0RGR0xvbmdMaXZl
ZFN0YXRlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZCNEI1MUQxNkI2Mjc3
MjAwM0Y2OTZCIC8qIERGR0xvbmdMaXZlZFN0YXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IERGR0xvbmdMaXZlZFN0YXRlLmg7IHBhdGggPSBkZmcvREZHTG9uZ0xpdmVkU3Rh
dGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZCNEI1MUUxNkI2Mjc3MjAwM0Y2
OTZCIC8qIERGR05vZGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0g
REZHTm9kZS5jcHA7IHBhdGggPSBkZmcvREZHTm9kZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTBGQjRCNTFGMTZCNjI3NzIwMDNGNjk2QiAvKiBERkdOb2RlQWxsb2NhdG9yLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR05vZGVBbGxvY2F0b3IuaDsgcGF0
aCA9IGRmZy9ERkdOb2RlQWxsb2NhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTBGQjRCNTIxMTZCNjI3OEQwMDNGNjk2QiAvKiBGdW5jdGlvbkV4ZWN1dGFibGVEdW1wLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZ1bmN0aW9uRXhlY3V0YWJsZUR1
bXAuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkI0QjUyMjE2QjYyNzhEMDAz
RjY5NkIgLyogRnVuY3Rpb25FeGVjdXRhYmxlRHVtcC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBGdW5jdGlvbkV4ZWN1dGFibGVEdW1wLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTBGQjU0Njc2MTRGNTlBRDEwMDJDMjk4OSAvKiBMYXp5T3BlcmFuZFZhbHVlUHJv
ZmlsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMYXp5T3BlcmFuZFZhbHVl
UHJvZmlsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkI1NDY3ODE0RjVDNDY4
MDAyQzI5ODkgLyogTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGUuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGUuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkwRkI1NDY3QTE0RjVDN0Q0MDAyQzI5ODkgLyogTWV0aG9k
T2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC0yMzI1LDYgKzIzMzQsOCBAQAogCQkJCTBGMjFDMjdBMTRCRTcyNzMwMEFEQzY0QiAv
KiBFeGVjdXRpb25IYXJuZXNzLmggKi8sCiAJCQkJQkMyNjgwQzAwRTE2RDRFOTAwQTA2RTkyIC8q
IEZ1bmN0aW9uQ29uc3RydWN0b3IuY3BwICovLAogCQkJCUJDMjY4MEMxMEUxNkQ0RTkwMEEwNkU5
MiAvKiBGdW5jdGlvbkNvbnN0cnVjdG9yLmggKi8sCisJCQkJMEZCNEI1MjExNkI2Mjc4RDAwM0Y2
OTZCIC8qIEZ1bmN0aW9uRXhlY3V0YWJsZUR1bXAuY3BwICovLAorCQkJCTBGQjRCNTIyMTZCNjI3
OEQwMDNGNjk2QiAvKiBGdW5jdGlvbkV4ZWN1dGFibGVEdW1wLmggKi8sCiAJCQkJRjY5MkE4NUMw
MjU1NTk3RDAxRkY2MEY3IC8qIEZ1bmN0aW9uUHJvdG90eXBlLmNwcCAqLywKIAkJCQlGNjkyQTg1
RDAyNTU1OTdEMDFGRjYwRjcgLyogRnVuY3Rpb25Qcm90b3R5cGUuaCAqLywKIAkJCQlDMkQ1OEMz
MzE1OTEyRkVFMDAyMUE4NDQgLyogR0NBY3Rpdml0eUNhbGxiYWNrLmNwcCAqLywKQEAgLTIzNTEs
NiArMjM2Miw5IEBACiAJCQkJQkM3RjhGQkEwRTE5RDFFRjAwODYzMkMwIC8qIEpTQ2VsbC5jcHAg
Ki8sCiAJCQkJQkMxMTY3RDgwRTE5QkNDOTAwODA2NkREIC8qIEpTQ2VsbC5oICovLAogCQkJCTBG
OTc0OTZGMTY4N0FERTIwMEE0RkY2QSAvKiBKU0NlbGxJbmxpbmVzLmggKi8sCisJCQkJRjY5MkE4
ODcwMjU1NTk3RDAxRkY2MEY3IC8qIEpTQ0pTVmFsdWUuY3BwICovLAorCQkJCTE0QUJCMzZFMDk5
QzA3NjQwMEUyQTI0RiAvKiBKU0NKU1ZhbHVlLmggKi8sCisJCQkJODY1QTMwRjAxMzUwMDdFMTAw
Q0RCNDlFIC8qIEpTQ0pTVmFsdWVJbmxpbmVzLmggKi8sCiAJCQkJOTc4OEZDMjIxNDcxQUQwQzAw
NjhDRTJEIC8qIEpTRGF0ZU1hdGguY3BwICovLAogCQkJCTk3ODhGQzIzMTQ3MUFEMEMwMDY4Q0Uy
RCAvKiBKU0RhdGVNYXRoLmggKi8sCiAJCQkJQzJBN0Y2ODcxNjA0MzJENDAwRjc2Qjk4IC8qIEpT
RGVzdHJ1Y3RpYmxlT2JqZWN0LmggKi8sCkBAIC0yMzkwLDkgKzI0MDQsNiBAQAogCQkJCTBGOTE5
RDBBMTU3RUUwOUQwMDRBNEU3RCAvKiBKU1N5bWJvbFRhYmxlT2JqZWN0LmggKi8sCiAJCQkJMTRB
QkI0NTQwOTlDMkEwRjAwRTJBMjRGIC8qIEpTVHlwZS5oICovLAogCQkJCTY1MDdEMjk3MEU4NzFF
NEEwMEQ3RDg5NiAvKiBKU1R5cGVJbmZvLmggKi8sCi0JCQkJRjY5MkE4ODcwMjU1NTk3RDAxRkY2
MEY3IC8qIEpTQ0pTVmFsdWUuY3BwICovLAotCQkJCTE0QUJCMzZFMDk5QzA3NjQwMEUyQTI0RiAv
KiBKU0NKU1ZhbHVlLmggKi8sCi0JCQkJODY1QTMwRjAxMzUwMDdFMTAwQ0RCNDlFIC8qIEpTQ0pT
VmFsdWVJbmxpbmVzLmggKi8sCiAJCQkJQkMyMkEzOUEwRTE2RTE0ODAwQUYyMUM4IC8qIEpTVmFy
aWFibGVPYmplY3QuY3BwICovLAogCQkJCTE0RjI1MjU2MEQwOEREOEQwMDRFQ0ZGRiAvKiBKU1Zh
cmlhYmxlT2JqZWN0LmggKi8sCiAJCQkJMTQ0MjU2NUYxNUVERTk4RDAwNjZBNDlCIC8qIEpTV2l0
aFNjb3BlLmNwcCAqLywKQEAgLTI1NDMsNiArMjU1NCw3IEBACiAJCQkJMEY2MjAxNkUxNDNGQ0Qy
RjAwNjhCNzdDIC8qIERGR0Fic3RyYWN0U3RhdGUuaCAqLywKIAkJCQkwRjYyMDE2RjE0M0ZDRDJG
MDA2OEI3N0MgLyogREZHQWJzdHJhY3RWYWx1ZS5oICovLAogCQkJCTBGNjZFMTY4MTRERjNGMTMw
MEI3QjJFNCAvKiBERkdBZGphY2VuY3lMaXN0LmggKi8sCisJCQkJMEZCNEI1MTkxNkI2Mjc3MjAw
M0Y2OTZCIC8qIERGR0FsbG9jYXRvci5oICovLAogCQkJCTBGMUUzQTQzMTUzNENCQUQwMDBGOTQ1
NiAvKiBERkdBcmd1bWVudFBvc2l0aW9uLmggKi8sCiAJCQkJMEYxNjAxNUExNTYxOThCRjAwQzI1
ODdDIC8qIERGR0FyZ3VtZW50c1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwICovLAogCQkJCTBGMTYw
MTVCMTU2MTk4QkYwMEMyNTg3QyAvKiBERkdBcmd1bWVudHNTaW1wbGlmaWNhdGlvblBoYXNlLmgg
Ki8sCkBAIC0yNTY0LDYgKzI1NzYsNyBAQAogCQkJCTBGRkZDOTRDMTRFRjkwOTUwMEM3MjUzMiAv
KiBERkdDRkFQaGFzZS5oICovLAogCQkJCTBGM0IzQTI0MTU0NEM5OTEwMDNFRDBGRiAvKiBERkdD
RkdTaW1wbGlmaWNhdGlvblBoYXNlLmNwcCAqLywKIAkJCQkwRjNCM0EyNTE1NDRDOTkxMDAzRUQw
RkYgLyogREZHQ0ZHU2ltcGxpZmljYXRpb25QaGFzZS5oICovLAorCQkJCTBGQjRCNTFBMTZCNjI3
NzIwMDNGNjk2QiAvKiBERkdDb21tb24uY3BwICovLAogCQkJCTBGQzA5NzdFMTQ2OUVCQzQwMENG
MjQ0MiAvKiBERkdDb21tb24uaCAqLywKIAkJCQkwRjNCM0ExNzE1M0U2OEVGMDAzRUQwRkYgLyog
REZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwICovLAogCQkJCTBGM0IzQTE4MTUzRTY4RUYwMDNF
RDBGRiAvKiBERkdDb25zdGFudEZvbGRpbmdQaGFzZS5oICovLApAQCAtMjU3Niw2ICsyNTg5LDcg
QEAKIAkJCQkwRjFFM0E0NDE1MzRDQkFEMDAwRjk0NTYgLyogREZHRG91YmxlRm9ybWF0U3RhdGUu
aCAqLywKIAkJCQkwRkQzQzgyMDE0MTE1Q0Y4MDBGRDgxQ0IgLyogREZHRHJpdmVyLmNwcCAqLywK
IAkJCQkwRkQzQzgyMjE0MTE1RDBFMDBGRDgxQ0IgLyogREZHRHJpdmVyLmggKi8sCisJCQkJMEZC
NEI1MUIxNkI2Mjc3MjAwM0Y2OTZCIC8qIERGR0VkZ2UuY3BwICovLAogCQkJCTBGNjZFMTY5MTRE
RjNGMTMwMEI3QjJFNCAvKiBERkdFZGdlLmggKi8sCiAJCQkJMEYyQkRDMTIxNTFDNUQ0QTAwQ0Q4
OTEwIC8qIERGR0ZpeHVwUGhhc2UuY3BwICovLAogCQkJCTBGMkJEQzEzMTUxQzVENEEwMENEODkx
MCAvKiBERkdGaXh1cFBoYXNlLmggKi8sCkBAIC0yNTg3LDExICsyNjAxLDE1IEBACiAJCQkJMEYy
QkRDMUYxNTFFODAzODAwQ0Q4OTEwIC8qIERGR0luc2VydGlvblNldC5oICovLAogCQkJCTg2RUM5
REJCMTMyOERGODIwMDJCMkFENyAvKiBERkdKSVRDb21waWxlci5jcHAgKi8sCiAJCQkJODZFQzlE
QkMxMzI4REY4MjAwMkIyQUQ3IC8qIERGR0pJVENvbXBpbGVyLmggKi8sCisJCQkJMEZCNEI1MUMx
NkI2Mjc3MjAwM0Y2OTZCIC8qIERGR0xvbmdMaXZlZFN0YXRlLmNwcCAqLywKKwkJCQkwRkI0QjUx
RDE2QjYyNzcyMDAzRjY5NkIgLyogREZHTG9uZ0xpdmVkU3RhdGUuaCAqLywKIAkJCQkwRjJCREMz
RDE1MjI4MDE3MDBDRDg5MTAgLyogREZHTWluaWZpZWRHcmFwaC5oICovLAogCQkJCTBGQjRCNTEw
MTZCM0E5NjQwMDNGNjk2QiAvKiBERkdNaW5pZmllZElELmggKi8sCiAJCQkJMEYyQkRDNEMxNTIy
ODE4MzAwQ0Q4OTEwIC8qIERGR01pbmlmaWVkTm9kZS5jcHAgKi8sCiAJCQkJMEYyQkRDM0UxNTIy
ODAxNzAwQ0Q4OTEwIC8qIERGR01pbmlmaWVkTm9kZS5oICovLAorCQkJCTBGQjRCNTFFMTZCNjI3
NzIwMDNGNjk2QiAvKiBERkdOb2RlLmNwcCAqLywKIAkJCQk4NkVDQTNFOTEzMkRFRjFDMDAyQjJB
RDcgLyogREZHTm9kZS5oICovLAorCQkJCTBGQjRCNTFGMTZCNjI3NzIwMDNGNjk2QiAvKiBERkdO
b2RlQWxsb2NhdG9yLmggKi8sCiAJCQkJMEZBNTgxQjcxNTBFOTUyQTAwQjlBMkQ5IC8qIERGR05v
ZGVGbGFncy5jcHAgKi8sCiAJCQkJMEZBNTgxQjgxNTBFOTUyQTAwQjlBMkQ5IC8qIERGR05vZGVG
bGFncy5oICovLAogCQkJCTBGQTU4MUI5MTUwRTk1MkEwMEI5QTJEOSAvKiBERkdOb2RlVHlwZS5o
ICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0RhdGFGb3JtYXQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRGF0YUZvcm1hdC5o
CShyZXZpc2lvbiAxNDA5MDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRGF0
YUZvcm1hdC5oCSh3b3JraW5nIGNvcHkpCkBAIC04Miw3ICs4MiwxMiBAQCBpbmxpbmUgY29uc3Qg
Y2hhciogZGF0YUZvcm1hdFRvU3RyaW5nKERhCiAgICAgICAgIHJldHVybiAiSlNDZWxsIjsKICAg
ICBjYXNlIERhdGFGb3JtYXRKU0Jvb2xlYW46CiAgICAgICAgIHJldHVybiAiSlNCb29sZWFuIjsK
KyAgICBjYXNlIERhdGFGb3JtYXREZWFkOgorICAgICAgICByZXR1cm4gIkRlYWQiOworICAgIGNh
c2UgRGF0YUZvcm1hdEFyZ3VtZW50czoKKyAgICAgICAgcmV0dXJuICJBcmd1bWVudHMiOwogICAg
IGRlZmF1bHQ6CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAg
IHJldHVybiAiVW5rbm93biI7CiAgICAgfQogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdBYnN0cmFjdFN0YXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwCShyZXZpc2lvbiAxNDA5MDQpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTIsIDIw
MTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC04NywyMSArODcsMjEgQEAgdm9pZCBBYnN0cmFjdFN0YXRlOjppbml0aWFs
aXplKEdyYXBoJiBncgogICAgIHJvb3QtPmNmYUhhc1Zpc2l0ZWQgPSBmYWxzZTsKICAgICByb290
LT5jZmFGb3VuZENvbnN0YW50cyA9IGZhbHNlOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
cm9vdC0+dmFsdWVzQXRIZWFkLm51bWJlck9mQXJndW1lbnRzKCk7ICsraSkgewotICAgICAgICBO
b2RlJiBub2RlID0gZ3JhcGhbcm9vdC0+dmFyaWFibGVzQXRIZWFkLmFyZ3VtZW50KGkpXTsKLSAg
ICAgICAgQVNTRVJUKG5vZGUub3AoKSA9PSBTZXRBcmd1bWVudCk7Ci0gICAgICAgIGlmICghbm9k
ZS5zaG91bGRHZW5lcmF0ZSgpKSB7CisgICAgICAgIE5vZGUqIG5vZGUgPSByb290LT52YXJpYWJs
ZXNBdEhlYWQuYXJndW1lbnQoaSk7CisgICAgICAgIEFTU0VSVChub2RlLT5vcCgpID09IFNldEFy
Z3VtZW50KTsKKyAgICAgICAgaWYgKCFub2RlLT5zaG91bGRHZW5lcmF0ZSgpKSB7CiAgICAgICAg
ICAgICAvLyBUaGUgYXJndW1lbnQgaXMgZGVhZC4gV2UgZG9uJ3QgZG8gYW55IGNoZWNrcyBmb3Ig
c3VjaCBhcmd1bWVudHMsIGFuZCBzbwogICAgICAgICAgICAgLy8gZm9yIHRoZSBwdXJwb3NlIG9m
IHRoZSBhbmFseXNpcywgdGhleSBjb250YWluIG5vIHZhbHVlLgogICAgICAgICAgICAgcm9vdC0+
dmFsdWVzQXRIZWFkLmFyZ3VtZW50KGkpLmNsZWFyKCk7CiAgICAgICAgICAgICBjb250aW51ZTsK
ICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgaWYgKG5vZGUudmFyaWFibGVBY2Nlc3NEYXRh
KCktPmlzQ2FwdHVyZWQoKSkgeworICAgICAgICBpZiAobm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRh
KCktPmlzQ2FwdHVyZWQoKSkgewogICAgICAgICAgICAgcm9vdC0+dmFsdWVzQXRIZWFkLmFyZ3Vt
ZW50KGkpLm1ha2VUb3AoKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAgICAg
ICAgIAotICAgICAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uID0gbm9kZS52YXJpYWJsZUFj
Y2Vzc0RhdGEoKS0+cHJlZGljdGlvbigpOworICAgICAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0
aW9uID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCktPnByZWRpY3Rpb24oKTsKICAgICAgICAg
aWYgKGlzSW50MzJTcGVjdWxhdGlvbihwcmVkaWN0aW9uKSkKICAgICAgICAgICAgIHJvb3QtPnZh
bHVlc0F0SGVhZC5hcmd1bWVudChpKS5zZXQoU3BlY0ludDMyKTsKICAgICAgICAgZWxzZSBpZiAo
aXNCb29sZWFuU3BlY3VsYXRpb24ocHJlZGljdGlvbikpCkBAIC0xMTQsOCArMTE0LDggQEAgdm9p
ZCBBYnN0cmFjdFN0YXRlOjppbml0aWFsaXplKEdyYXBoJiBncgogICAgICAgICByb290LT52YWx1
ZXNBdFRhaWwuYXJndW1lbnQoaSkuY2xlYXIoKTsKICAgICB9CiAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCByb290LT52YWx1ZXNBdEhlYWQubnVtYmVyT2ZMb2NhbHMoKTsgKytpKSB7Ci0gICAg
ICAgIE5vZGVJbmRleCBub2RlSW5kZXggPSByb290LT52YXJpYWJsZXNBdEhlYWQubG9jYWwoaSk7
Ci0gICAgICAgIGlmIChub2RlSW5kZXggIT0gTm9Ob2RlICYmIGdyYXBoW25vZGVJbmRleF0udmFy
aWFibGVBY2Nlc3NEYXRhKCktPmlzQ2FwdHVyZWQoKSkKKyAgICAgICAgTm9kZSogbm9kZSA9IHJv
b3QtPnZhcmlhYmxlc0F0SGVhZC5sb2NhbChpKTsKKyAgICAgICAgaWYgKG5vZGUgJiYgbm9kZS0+
dmFyaWFibGVBY2Nlc3NEYXRhKCktPmlzQ2FwdHVyZWQoKSkKICAgICAgICAgICAgIHJvb3QtPnZh
bHVlc0F0SGVhZC5sb2NhbChpKS5tYWtlVG9wKCk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAg
IHJvb3QtPnZhbHVlc0F0SGVhZC5sb2NhbChpKS5jbGVhcigpOwpAQCAtMjEzLDExICsyMTMsMTEg
QEAgdm9pZCBBYnN0cmFjdFN0YXRlOjpyZXNldCgpCiAgICAgbV9icmFuY2hEaXJlY3Rpb24gPSBJ
bnZhbGlkQnJhbmNoRGlyZWN0aW9uOwogfQogCi1BYnN0cmFjdFN0YXRlOjpCb29sZWFuUmVzdWx0
IEFic3RyYWN0U3RhdGU6OmJvb2xlYW5SZXN1bHQoTm9kZSYgbm9kZSwgQWJzdHJhY3RWYWx1ZSYg
dmFsdWUpCitBYnN0cmFjdFN0YXRlOjpCb29sZWFuUmVzdWx0IEFic3RyYWN0U3RhdGU6OmJvb2xl
YW5SZXN1bHQoTm9kZSogbm9kZSwgQWJzdHJhY3RWYWx1ZSYgdmFsdWUpCiB7CiAgICAgSlNWYWx1
ZSBjaGlsZENvbnN0ID0gdmFsdWUudmFsdWUoKTsKICAgICBpZiAoY2hpbGRDb25zdCkgewotICAg
ICAgICBpZiAoY2hpbGRDb25zdC50b0Jvb2xlYW4obV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdEZv
cihub2RlLmNvZGVPcmlnaW4pLT5nbG9iYWxFeGVjKCkpKQorICAgICAgICBpZiAoY2hpbGRDb25z
dC50b0Jvb2xlYW4obV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdEZvcihub2RlLT5jb2RlT3JpZ2lu
KS0+Z2xvYmFsRXhlYygpKSkKICAgICAgICAgICAgIHJldHVybiBEZWZpbml0ZWx5VHJ1ZTsKICAg
ICAgICAgcmV0dXJuIERlZmluaXRlbHlGYWxzZTsKICAgICB9CkBAIC0yMjYsNyArMjI2LDcgQEAg
QWJzdHJhY3RTdGF0ZTo6Qm9vbGVhblJlc3VsdCBBYnN0cmFjdFN0YQogICAgIGlmIChpc0NlbGxT
cGVjdWxhdGlvbih2YWx1ZS5tX3R5cGUpCiAgICAgICAgICYmIHZhbHVlLm1fY3VycmVudEtub3du
U3RydWN0dXJlLmhhc1NpbmdsZXRvbigpKSB7CiAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJl
ID0gdmFsdWUubV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuc2luZ2xldG9uKCk7Ci0gICAgICAgIGlm
ICghc3RydWN0dXJlLT5tYXNxdWVyYWRlc0FzVW5kZWZpbmVkKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3RGb3Iobm9kZS5jb2RlT3JpZ2luKSkKKyAgICAgICAgaWYgKCFzdHJ1Y3R1cmUtPm1hc3F1
ZXJhZGVzQXNVbmRlZmluZWQobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdEZvcihub2RlLT5jb2Rl
T3JpZ2luKSkKICAgICAgICAgICAgICYmIHN0cnVjdHVyZS0+dHlwZUluZm8oKS50eXBlKCkgIT0g
U3RyaW5nVHlwZSkKICAgICAgICAgICAgIHJldHVybiBEZWZpbml0ZWx5VHJ1ZTsKICAgICB9CkBA
IC0yNDEsMzIgKzI0MSwzMSBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQg
aW5kCiAgICAgCiAgICAgbV9kaWRDbG9iYmVyID0gZmFsc2U7CiAgICAgCi0gICAgTm9kZUluZGV4
IG5vZGVJbmRleCA9IG1fYmxvY2stPmF0KGluZGV4SW5CbG9jayk7Ci0gICAgTm9kZSYgbm9kZSA9
IG1fZ3JhcGhbbm9kZUluZGV4XTsKKyAgICBOb2RlKiBub2RlID0gbV9ibG9jay0+YXQoaW5kZXhJ
bkJsb2NrKTsKICAgICAgICAgCi0gICAgaWYgKCFub2RlLnNob3VsZEdlbmVyYXRlKCkpCisgICAg
aWYgKCFub2RlLT5zaG91bGRHZW5lcmF0ZSgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAg
ICAgCi0gICAgc3dpdGNoIChub2RlLm9wKCkpIHsKKyAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsK
ICAgICBjYXNlIEpTQ29uc3RhbnQ6CiAgICAgY2FzZSBXZWFrSlNDb25zdGFudDoKICAgICBjYXNl
IFBoYW50b21Bcmd1bWVudHM6IHsKLSAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChtX2dy
YXBoLnZhbHVlT2ZKU0NvbnN0YW50KG5vZGVJbmRleCkpOwotICAgICAgICBub2RlLnNldENhbkV4
aXQoZmFsc2UpOworICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChtX2dyYXBoLnZhbHVlT2ZKU0Nv
bnN0YW50KG5vZGUpKTsKKyAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAg
IGJyZWFrOwogICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBJZGVudGl0eTogewotICAgICAgICBm
b3JOb2RlKG5vZGVJbmRleCkgPSBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpOwotICAgICAgICBub2Rl
LnNldENhbkV4aXQoZmFsc2UpOworICAgICAgICBmb3JOb2RlKG5vZGUpID0gZm9yTm9kZShub2Rl
LT5jaGlsZDEoKSk7CisgICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICBi
cmVhazsKICAgICB9CiAgICAgICAgICAgICAKICAgICBjYXNlIEdldExvY2FsOiB7Ci0gICAgICAg
IFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhID0gbm9kZS52YXJpYWJsZUFj
Y2Vzc0RhdGEoKTsKKyAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0Rh
dGEgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKICAgICAgICAgaWYgKHZhcmlhYmxlQWNj
ZXNzRGF0YS0+cHJlZGljdGlvbigpID09IFNwZWNOb25lKSB7CiAgICAgICAgICAgICBtX2lzVmFs
aWQgPSBmYWxzZTsKLSAgICAgICAgICAgIG5vZGUuc2V0Q2FuRXhpdCh0cnVlKTsKKyAgICAgICAg
ICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
fQogICAgICAgICBib29sIGNhbkV4aXQgPSBmYWxzZTsKQEAgLTI3Nyw1MyArMjc2LDUzIEBAIGJv
b2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgfQogICAgICAg
ICBpZiAodmFsdWUudmFsdWUoKSkKICAgICAgICAgICAgIG1fZm91bmRDb25zdGFudHMgPSB0cnVl
OwotICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkgPSB2YWx1ZTsKLSAgICAgICAgbm9kZS5zZXRD
YW5FeGl0KGNhbkV4aXQpOworICAgICAgICBmb3JOb2RlKG5vZGUpID0gdmFsdWU7CisgICAgICAg
IG5vZGUtPnNldENhbkV4aXQoY2FuRXhpdCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAg
ICAgCiAgICAgY2FzZSBHZXRMb2NhbFVubGlua2VkOiB7Ci0gICAgICAgIEFic3RyYWN0VmFsdWUg
dmFsdWUgPSBtX3ZhcmlhYmxlcy5vcGVyYW5kKG5vZGUudW5saW5rZWRMb2NhbCgpKTsKKyAgICAg
ICAgQWJzdHJhY3RWYWx1ZSB2YWx1ZSA9IG1fdmFyaWFibGVzLm9wZXJhbmQobm9kZS0+dW5saW5r
ZWRMb2NhbCgpKTsKICAgICAgICAgaWYgKHZhbHVlLnZhbHVlKCkpCiAgICAgICAgICAgICBtX2Zv
dW5kQ29uc3RhbnRzID0gdHJ1ZTsKLSAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpID0gdmFsdWU7
Ci0gICAgICAgIG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7CisgICAgICAgIGZvck5vZGUobm9kZSkg
PSB2YWx1ZTsKKyAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgIGJyZWFr
OwogICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBTZXRMb2NhbDogewotICAgICAgICBpZiAobm9k
ZS52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+aXNDYXB0dXJlZCgpCi0gICAgICAgICAgICB8fCBtX2dy
YXBoLmlzQ3JlYXRlZFRoaXNBcmd1bWVudChub2RlLmxvY2FsKCkpKSB7Ci0gICAgICAgICAgICBt
X3ZhcmlhYmxlcy5vcGVyYW5kKG5vZGUubG9jYWwoKSkgPSBmb3JOb2RlKG5vZGUuY2hpbGQxKCkp
OwotICAgICAgICAgICAgbm9kZS5zZXRDYW5FeGl0KGZhbHNlKTsKKyAgICAgICAgaWYgKG5vZGUt
PnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5pc0NhcHR1cmVkKCkKKyAgICAgICAgICAgIHx8IG1fZ3Jh
cGguaXNDcmVhdGVkVGhpc0FyZ3VtZW50KG5vZGUtPmxvY2FsKCkpKSB7CisgICAgICAgICAgICBt
X3ZhcmlhYmxlcy5vcGVyYW5kKG5vZGUtPmxvY2FsKCkpID0gZm9yTm9kZShub2RlLT5jaGlsZDEo
KSk7CisgICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBpZiAobm9kZS52YXJpYWJsZUFjY2Vz
c0RhdGEoKS0+c2hvdWxkVXNlRG91YmxlRm9ybWF0KCkpIHsKKyAgICAgICAgaWYgKG5vZGUtPnZh
cmlhYmxlQWNjZXNzRGF0YSgpLT5zaG91bGRVc2VEb3VibGVGb3JtYXQoKSkgewogICAgICAgICAg
ICAgc3BlY3VsYXRlTnVtYmVyVW5hcnkobm9kZSk7Ci0gICAgICAgICAgICBtX3ZhcmlhYmxlcy5v
cGVyYW5kKG5vZGUubG9jYWwoKSkuc2V0KFNwZWNEb3VibGUpOworICAgICAgICAgICAgbV92YXJp
YWJsZXMub3BlcmFuZChub2RlLT5sb2NhbCgpKS5zZXQoU3BlY0RvdWJsZSk7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgU3BlY3VsYXRlZFR5cGUgcHJl
ZGljdGVkVHlwZSA9IG5vZGUudmFyaWFibGVBY2Nlc3NEYXRhKCktPmFyZ3VtZW50QXdhcmVQcmVk
aWN0aW9uKCk7CisgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3RlZFR5cGUgPSBub2RlLT52
YXJpYWJsZUFjY2Vzc0RhdGEoKS0+YXJndW1lbnRBd2FyZVByZWRpY3Rpb24oKTsKICAgICAgICAg
aWYgKGlzSW50MzJTcGVjdWxhdGlvbihwcmVkaWN0ZWRUeXBlKSkKICAgICAgICAgICAgIHNwZWN1
bGF0ZUludDMyVW5hcnkobm9kZSk7CiAgICAgICAgIGVsc2UgaWYgKGlzQ2VsbFNwZWN1bGF0aW9u
KHByZWRpY3RlZFR5cGUpKSB7Ci0gICAgICAgICAgICBub2RlLnNldENhbkV4aXQoIWlzQ2VsbFNw
ZWN1bGF0aW9uKGZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSk7Ci0gICAgICAgICAgICBm
b3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjQ2VsbCk7CisgICAgICAgICAgICBub2Rl
LT5zZXRDYW5FeGl0KCFpc0NlbGxTcGVjdWxhdGlvbihmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5t
X3R5cGUpKTsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRlcihTcGVj
Q2VsbCk7CiAgICAgICAgIH0gZWxzZSBpZiAoaXNCb29sZWFuU3BlY3VsYXRpb24ocHJlZGljdGVk
VHlwZSkpCiAgICAgICAgICAgICBzcGVjdWxhdGVCb29sZWFuVW5hcnkobm9kZSk7CiAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgIG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7CisgICAgICAgICAgICBu
b2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgCi0gICAgICAgIG1fdmFyaWFibGVzLm9w
ZXJhbmQobm9kZS5sb2NhbCgpKSA9IGZvck5vZGUobm9kZS5jaGlsZDEoKSk7CisgICAgICAgIG1f
dmFyaWFibGVzLm9wZXJhbmQobm9kZS0+bG9jYWwoKSkgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgp
KTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAgICAgCiAgICAgY2FzZSBTZXRBcmd1
bWVudDoKICAgICAgICAgLy8gQXNzZXJ0IHRoYXQgdGhlIHN0YXRlIG9mIGFyZ3VtZW50cyBoYXMg
YmVlbiBzZXQuCi0gICAgICAgIEFTU0VSVCghbV9ibG9jay0+dmFsdWVzQXRIZWFkLm9wZXJhbmQo
bm9kZS5sb2NhbCgpKS5pc0NsZWFyKCkpOwotICAgICAgICBub2RlLnNldENhbkV4aXQoZmFsc2Up
OworICAgICAgICBBU1NFUlQoIW1fYmxvY2stPnZhbHVlc0F0SGVhZC5vcGVyYW5kKG5vZGUtPmxv
Y2FsKCkpLmlzQ2xlYXIoKSk7CisgICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwogICAg
ICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgIGNhc2UgQml0QW5kOgpAQCAtMzMyLDMwICsz
MzEsMzAgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgIGNh
c2UgQml0UlNoaWZ0OgogICAgIGNhc2UgQml0TFNoaWZ0OgogICAgIGNhc2UgQml0VVJTaGlmdDog
ewotICAgICAgICBKU1ZhbHVlIGxlZnQgPSBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLnZhbHVlKCk7
Ci0gICAgICAgIEpTVmFsdWUgcmlnaHQgPSBmb3JOb2RlKG5vZGUuY2hpbGQyKCkpLnZhbHVlKCk7
CisgICAgICAgIEpTVmFsdWUgbGVmdCA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLnZhbHVlKCk7
CisgICAgICAgIEpTVmFsdWUgcmlnaHQgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMigpKS52YWx1ZSgp
OwogICAgICAgICBpZiAobGVmdCAmJiByaWdodCAmJiBsZWZ0LmlzSW50MzIoKSAmJiByaWdodC5p
c0ludDMyKCkpIHsKICAgICAgICAgICAgIGludDMyX3QgYSA9IGxlZnQuYXNJbnQzMigpOwogICAg
ICAgICAgICAgaW50MzJfdCBiID0gcmlnaHQuYXNJbnQzMigpOwogICAgICAgICAgICAgYm9vbCBj
b25zdGFudFdhc1NldDsKLSAgICAgICAgICAgIHN3aXRjaCAobm9kZS5vcCgpKSB7CisgICAgICAg
ICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKICAgICAgICAgICAgIGNhc2UgQml0QW5kOgotICAg
ICAgICAgICAgICAgIGNvbnN0YW50V2FzU2V0ID0gdHJ5U2V0Q29uc3RhbnQobm9kZUluZGV4LCBK
U1ZhbHVlKGEgJiBiKSk7CisgICAgICAgICAgICAgICAgY29uc3RhbnRXYXNTZXQgPSB0cnlTZXRD
b25zdGFudChub2RlLCBKU1ZhbHVlKGEgJiBiKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICBjYXNlIEJpdE9yOgotICAgICAgICAgICAgICAgIGNvbnN0YW50V2FzU2V0ID0g
dHJ5U2V0Q29uc3RhbnQobm9kZUluZGV4LCBKU1ZhbHVlKGEgfCBiKSk7CisgICAgICAgICAgICAg
ICAgY29uc3RhbnRXYXNTZXQgPSB0cnlTZXRDb25zdGFudChub2RlLCBKU1ZhbHVlKGEgfCBiKSk7
CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIEJpdFhvcjoKLSAgICAg
ICAgICAgICAgICBjb25zdGFudFdhc1NldCA9IHRyeVNldENvbnN0YW50KG5vZGVJbmRleCwgSlNW
YWx1ZShhIF4gYikpOworICAgICAgICAgICAgICAgIGNvbnN0YW50V2FzU2V0ID0gdHJ5U2V0Q29u
c3RhbnQobm9kZSwgSlNWYWx1ZShhIF4gYikpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgY2FzZSBCaXRSU2hpZnQ6Ci0gICAgICAgICAgICAgICAgY29uc3RhbnRXYXNTZXQg
PSB0cnlTZXRDb25zdGFudChub2RlSW5kZXgsIEpTVmFsdWUoYSA+PiBzdGF0aWNfY2FzdDx1aW50
MzJfdD4oYikpKTsKKyAgICAgICAgICAgICAgICBjb25zdGFudFdhc1NldCA9IHRyeVNldENvbnN0
YW50KG5vZGUsIEpTVmFsdWUoYSA+PiBzdGF0aWNfY2FzdDx1aW50MzJfdD4oYikpKTsKICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgQml0TFNoaWZ0OgotICAgICAgICAg
ICAgICAgIGNvbnN0YW50V2FzU2V0ID0gdHJ5U2V0Q29uc3RhbnQobm9kZUluZGV4LCBKU1ZhbHVl
KGEgPDwgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGIpKSk7CisgICAgICAgICAgICAgICAgY29uc3Rh
bnRXYXNTZXQgPSB0cnlTZXRDb25zdGFudChub2RlLCBKU1ZhbHVlKGEgPDwgc3RhdGljX2Nhc3Q8
dWludDMyX3Q+KGIpKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNl
IEJpdFVSU2hpZnQ6Ci0gICAgICAgICAgICAgICAgY29uc3RhbnRXYXNTZXQgPSB0cnlTZXRDb25z
dGFudChub2RlSW5kZXgsIEpTVmFsdWUoc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGEpID4+IHN0YXRp
Y19jYXN0PHVpbnQzMl90PihiKSkpOworICAgICAgICAgICAgICAgIGNvbnN0YW50V2FzU2V0ID0g
dHJ5U2V0Q29uc3RhbnQobm9kZSwgSlNWYWx1ZShzdGF0aWNfY2FzdDx1aW50MzJfdD4oYSkgPj4g
c3RhdGljX2Nhc3Q8dWludDMyX3Q+KGIpKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7CkBAIC0zNjMsMTk5ICszNjIsMTk5IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0
ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChjb25zdGFudFdh
c1NldCkgewogICAgICAgICAgICAgICAgIG1fZm91bmRDb25zdGFudHMgPSB0cnVlOwotICAgICAg
ICAgICAgICAgIG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7CisgICAgICAgICAgICAgICAgbm9kZS0+
c2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9
CiAgICAgICAgIH0KICAgICAgICAgc3BlY3VsYXRlSW50MzJCaW5hcnkobm9kZSk7Ci0gICAgICAg
IGZvck5vZGUobm9kZUluZGV4KS5zZXQoU3BlY0ludDMyKTsKKyAgICAgICAgZm9yTm9kZShub2Rl
KS5zZXQoU3BlY0ludDMyKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKICAgICBj
YXNlIFVJbnQzMlRvTnVtYmVyOiB7Ci0gICAgICAgIEpTVmFsdWUgY2hpbGQgPSBmb3JOb2RlKG5v
ZGUuY2hpbGQxKCkpLnZhbHVlKCk7CisgICAgICAgIEpTVmFsdWUgY2hpbGQgPSBmb3JOb2RlKG5v
ZGUtPmNoaWxkMSgpKS52YWx1ZSgpOwogICAgICAgICBpZiAoY2hpbGQgJiYgY2hpbGQuaXNOdW1i
ZXIoKSkgewogICAgICAgICAgICAgQVNTRVJUKGNoaWxkLmlzSW50MzIoKSk7Ci0gICAgICAgICAg
ICBpZiAodHJ5U2V0Q29uc3RhbnQobm9kZUluZGV4LCBKU1ZhbHVlKGNoaWxkLmFzVUludDMyKCkp
KSkgeworICAgICAgICAgICAgaWYgKHRyeVNldENvbnN0YW50KG5vZGUsIEpTVmFsdWUoY2hpbGQu
YXNVSW50MzIoKSkpKSB7CiAgICAgICAgICAgICAgICAgbV9mb3VuZENvbnN0YW50cyA9IHRydWU7
Ci0gICAgICAgICAgICAgICAgbm9kZS5zZXRDYW5FeGl0KGZhbHNlKTsKKyAgICAgICAgICAgICAg
ICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgIH0KICAgICAgICAgfQotICAgICAgICBpZiAoIW5vZGUuY2FuU3BlY3VsYXRlSW50ZWdl
cigpKSB7Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFNwZWNEb3VibGUpOwot
ICAgICAgICAgICAgbm9kZS5zZXRDYW5FeGl0KGZhbHNlKTsKKyAgICAgICAgaWYgKCFub2RlLT5j
YW5TcGVjdWxhdGVJbnRlZ2VyKCkpIHsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNw
ZWNEb3VibGUpOworICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFNwZWNJbnQzMik7
Ci0gICAgICAgICAgICBub2RlLnNldENhbkV4aXQodHJ1ZSk7CisgICAgICAgICAgICBmb3JOb2Rl
KG5vZGUpLnNldChTcGVjSW50MzIpOworICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVl
KTsKICAgICAgICAgfQogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgICAgICAgIAogICAg
ICAgICAgICAgCiAgICAgY2FzZSBEb3VibGVBc0ludDMyOiB7Ci0gICAgICAgIEpTVmFsdWUgY2hp
bGQgPSBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLnZhbHVlKCk7CisgICAgICAgIEpTVmFsdWUgY2hp
bGQgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS52YWx1ZSgpOwogICAgICAgICBpZiAoY2hpbGQg
JiYgY2hpbGQuaXNOdW1iZXIoKSkgewogICAgICAgICAgICAgZG91YmxlIGFzRG91YmxlID0gY2hp
bGQuYXNOdW1iZXIoKTsKICAgICAgICAgICAgIGludDMyX3QgYXNJbnQgPSBKU0M6OnRvSW50MzIo
YXNEb3VibGUpOwogICAgICAgICAgICAgaWYgKGJpdHdpc2VfY2FzdDxpbnQ2NF90PihzdGF0aWNf
Y2FzdDxkb3VibGU+KGFzSW50KSkgPT0gYml0d2lzZV9jYXN0PGludDY0X3Q+KGFzRG91YmxlKQot
ICAgICAgICAgICAgICAgICYmIHRyeVNldENvbnN0YW50KG5vZGVJbmRleCwgSlNWYWx1ZShhc0lu
dCkpKSB7CisgICAgICAgICAgICAgICAgJiYgdHJ5U2V0Q29uc3RhbnQobm9kZSwgSlNWYWx1ZShh
c0ludCkpKSB7CiAgICAgICAgICAgICAgICAgbV9mb3VuZENvbnN0YW50cyA9IHRydWU7CiAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgbm9k
ZS5zZXRDYW5FeGl0KHRydWUpOwotICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRl
cihTcGVjTnVtYmVyKTsKLSAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChTcGVjSW50MzIp
OworICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOworICAgICAgICBmb3JOb2RlKG5vZGUt
PmNoaWxkMSgpKS5maWx0ZXIoU3BlY051bWJlcik7CisgICAgICAgIGZvck5vZGUobm9kZSkuc2V0
KFNwZWNJbnQzMik7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgICAgIAogICAgIGNh
c2UgVmFsdWVUb0ludDMyOiB7Ci0gICAgICAgIEpTVmFsdWUgY2hpbGQgPSBmb3JOb2RlKG5vZGUu
Y2hpbGQxKCkpLnZhbHVlKCk7CisgICAgICAgIEpTVmFsdWUgY2hpbGQgPSBmb3JOb2RlKG5vZGUt
PmNoaWxkMSgpKS52YWx1ZSgpOwogICAgICAgICBpZiAoY2hpbGQgJiYgY2hpbGQuaXNOdW1iZXIo
KSkgewogICAgICAgICAgICAgYm9vbCBjb25zdGFudFdhc1NldDsKICAgICAgICAgICAgIGlmIChj
aGlsZC5pc0ludDMyKCkpCi0gICAgICAgICAgICAgICAgY29uc3RhbnRXYXNTZXQgPSB0cnlTZXRD
b25zdGFudChub2RlSW5kZXgsIGNoaWxkKTsKKyAgICAgICAgICAgICAgICBjb25zdGFudFdhc1Nl
dCA9IHRyeVNldENvbnN0YW50KG5vZGUsIGNoaWxkKTsKICAgICAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgICAgICBjb25zdGFudFdhc1NldCA9IHRyeVNldENvbnN0YW50KG5vZGVJbmRleCwgSlNW
YWx1ZShKU0M6OnRvSW50MzIoY2hpbGQuYXNEb3VibGUoKSkpKTsKKyAgICAgICAgICAgICAgICBj
b25zdGFudFdhc1NldCA9IHRyeVNldENvbnN0YW50KG5vZGUsIEpTVmFsdWUoSlNDOjp0b0ludDMy
KGNoaWxkLmFzRG91YmxlKCkpKSk7CiAgICAgICAgICAgICBpZiAoY29uc3RhbnRXYXNTZXQpIHsK
ICAgICAgICAgICAgICAgICBtX2ZvdW5kQ29uc3RhbnRzID0gdHJ1ZTsKLSAgICAgICAgICAgICAg
ICBub2RlLnNldENhbkV4aXQoZmFsc2UpOworICAgICAgICAgICAgICAgIG5vZGUtPnNldENhbkV4
aXQoZmFsc2UpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAg
ICB9Ci0gICAgICAgIGlmIChtX2dyYXBoW25vZGUuY2hpbGQxKCldLnNob3VsZFNwZWN1bGF0ZUlu
dGVnZXIoKSkKKyAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVJbnRl
Z2VyKCkpCiAgICAgICAgICAgICBzcGVjdWxhdGVJbnQzMlVuYXJ5KG5vZGUpOwotICAgICAgICBl
bHNlIGlmIChtX2dyYXBoW25vZGUuY2hpbGQxKCldLnNob3VsZFNwZWN1bGF0ZU51bWJlcigpKQor
ICAgICAgICBlbHNlIGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlTnVtYmVyKCkp
CiAgICAgICAgICAgICBzcGVjdWxhdGVOdW1iZXJVbmFyeShub2RlKTsKLSAgICAgICAgZWxzZSBp
ZiAobV9ncmFwaFtub2RlLmNoaWxkMSgpXS5zaG91bGRTcGVjdWxhdGVCb29sZWFuKCkpCisgICAg
ICAgIGVsc2UgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVCb29sZWFuKCkpCiAg
ICAgICAgICAgICBzcGVjdWxhdGVCb29sZWFuVW5hcnkobm9kZSk7CiAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgIG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7CisgICAgICAgICAgICBub2RlLT5zZXRD
YW5FeGl0KGZhbHNlKTsKICAgICAgICAgCi0gICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQo
U3BlY0ludDMyKTsKKyAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0ludDMyKTsKICAgICAg
ICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKICAgICBjYXNlIEludDMyVG9Eb3VibGU6IHsKLSAg
ICAgICAgSlNWYWx1ZSBjaGlsZCA9IGZvck5vZGUobm9kZS5jaGlsZDEoKSkudmFsdWUoKTsKKyAg
ICAgICAgSlNWYWx1ZSBjaGlsZCA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLnZhbHVlKCk7CiAg
ICAgICAgIGlmIChjaGlsZCAmJiBjaGlsZC5pc051bWJlcigpCi0gICAgICAgICAgICAmJiB0cnlT
ZXRDb25zdGFudChub2RlSW5kZXgsIEpTVmFsdWUoSlNWYWx1ZTo6RW5jb2RlQXNEb3VibGUsIGNo
aWxkLmFzTnVtYmVyKCkpKSkgeworICAgICAgICAgICAgJiYgdHJ5U2V0Q29uc3RhbnQobm9kZSwg
SlNWYWx1ZShKU1ZhbHVlOjpFbmNvZGVBc0RvdWJsZSwgY2hpbGQuYXNOdW1iZXIoKSkpKSB7CiAg
ICAgICAgICAgICBtX2ZvdW5kQ29uc3RhbnRzID0gdHJ1ZTsKLSAgICAgICAgICAgIG5vZGUuc2V0
Q2FuRXhpdChmYWxzZSk7CisgICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIHNwZWN1bGF0ZU51bWJlclVuYXJ5
KG5vZGUpOwotICAgICAgICBpZiAoaXNJbnQzMlNwZWN1bGF0aW9uKGZvck5vZGUobm9kZS5jaGls
ZDEoKSkubV90eXBlKSkKLSAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoU3BlY0Rv
dWJsZVJlYWwpOworICAgICAgICBpZiAoaXNJbnQzMlNwZWN1bGF0aW9uKGZvck5vZGUobm9kZS0+
Y2hpbGQxKCkpLm1fdHlwZSkpCisgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjRG91
YmxlUmVhbCk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5z
ZXQoU3BlY0RvdWJsZSk7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjRG91Ymxl
KTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKICAgICBjYXNlIENoZWNrTnVtYmVy
OgotICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjTnVtYmVyKTsKKyAg
ICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDEoKSkuZmlsdGVyKFNwZWNOdW1iZXIpOwogICAgICAg
ICBicmVhazsKICAgICAgICAgICAgIAogICAgIGNhc2UgVmFsdWVBZGQ6CiAgICAgY2FzZSBBcml0
aEFkZDogewotICAgICAgICBKU1ZhbHVlIGxlZnQgPSBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLnZh
bHVlKCk7Ci0gICAgICAgIEpTVmFsdWUgcmlnaHQgPSBmb3JOb2RlKG5vZGUuY2hpbGQyKCkpLnZh
bHVlKCk7CisgICAgICAgIEpTVmFsdWUgbGVmdCA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLnZh
bHVlKCk7CisgICAgICAgIEpTVmFsdWUgcmlnaHQgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMigpKS52
YWx1ZSgpOwogICAgICAgICBpZiAobGVmdCAmJiByaWdodCAmJiBsZWZ0LmlzTnVtYmVyKCkgJiYg
cmlnaHQuaXNOdW1iZXIoKQotICAgICAgICAgICAgJiYgdHJ5U2V0Q29uc3RhbnQobm9kZUluZGV4
LCBKU1ZhbHVlKGxlZnQuYXNOdW1iZXIoKSArIHJpZ2h0LmFzTnVtYmVyKCkpKSkgeworICAgICAg
ICAgICAgJiYgdHJ5U2V0Q29uc3RhbnQobm9kZSwgSlNWYWx1ZShsZWZ0LmFzTnVtYmVyKCkgKyBy
aWdodC5hc051bWJlcigpKSkpIHsKICAgICAgICAgICAgIG1fZm91bmRDb25zdGFudHMgPSB0cnVl
OwotICAgICAgICAgICAgbm9kZS5zZXRDYW5FeGl0KGZhbHNlKTsKKyAgICAgICAgICAgIG5vZGUt
PnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAg
ICAgaWYgKG1fZ3JhcGguYWRkU2hvdWxkU3BlY3VsYXRlSW50ZWdlcihub2RlKSkgewogICAgICAg
ICAgICAgc3BlY3VsYXRlSW50MzJCaW5hcnkoCi0gICAgICAgICAgICAgICAgbm9kZSwgIW5vZGVD
YW5UcnVuY2F0ZUludGVnZXIobm9kZS5hcml0aE5vZGVGbGFncygpKSk7Ci0gICAgICAgICAgICBm
b3JOb2RlKG5vZGVJbmRleCkuc2V0KFNwZWNJbnQzMik7CisgICAgICAgICAgICAgICAgbm9kZSwg
IW5vZGVDYW5UcnVuY2F0ZUludGVnZXIobm9kZS0+YXJpdGhOb2RlRmxhZ3MoKSkpOworICAgICAg
ICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICB9Ci0gICAgICAgIGlmIChOb2RlOjpzaG91bGRTcGVjdWxhdGVOdW1iZXJFeHBlY3Rp
bmdEZWZpbmVkKG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0sIG1fZ3JhcGhbbm9kZS5jaGlsZDIoKV0p
KSB7CisgICAgICAgIGlmIChOb2RlOjpzaG91bGRTcGVjdWxhdGVOdW1iZXJFeHBlY3RpbmdEZWZp
bmVkKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgbm9kZS0+Y2hpbGQyKCkubm9kZSgpKSkgewogICAg
ICAgICAgICAgc3BlY3VsYXRlTnVtYmVyQmluYXJ5KG5vZGUpOwotICAgICAgICAgICAgaWYgKGlz
UmVhbE51bWJlclNwZWN1bGF0aW9uKGZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKQotICAg
ICAgICAgICAgICAgICYmIGlzUmVhbE51bWJlclNwZWN1bGF0aW9uKGZvck5vZGUobm9kZS5jaGls
ZDIoKSkubV90eXBlKSkKLSAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFNw
ZWNEb3VibGVSZWFsKTsKKyAgICAgICAgICAgIGlmIChpc1JlYWxOdW1iZXJTcGVjdWxhdGlvbihm
b3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX3R5cGUpCisgICAgICAgICAgICAgICAgJiYgaXNSZWFs
TnVtYmVyU3BlY3VsYXRpb24oZm9yTm9kZShub2RlLT5jaGlsZDIoKSkubV90eXBlKSkKKyAgICAg
ICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjRG91YmxlUmVhbCk7CiAgICAgICAgICAg
ICBlbHNlCi0gICAgICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChTcGVjRG91Ymxl
KTsKKyAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjRG91YmxlKTsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIGlmIChub2RlLm9wKCkgPT0gVmFsdWVB
ZGQpIHsKLSAgICAgICAgICAgIGNsb2JiZXJXb3JsZChub2RlLmNvZGVPcmlnaW4sIGluZGV4SW5C
bG9jayk7Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFNwZWNTdHJpbmcgfCBT
cGVjSW50MzIgfCBTcGVjTnVtYmVyKTsKLSAgICAgICAgICAgIG5vZGUuc2V0Q2FuRXhpdChmYWxz
ZSk7CisgICAgICAgIGlmIChub2RlLT5vcCgpID09IFZhbHVlQWRkKSB7CisgICAgICAgICAgICBj
bG9iYmVyV29ybGQobm9kZS0+Y29kZU9yaWdpbiwgaW5kZXhJbkJsb2NrKTsKKyAgICAgICAgICAg
IGZvck5vZGUobm9kZSkuc2V0KFNwZWNTdHJpbmcgfCBTcGVjSW50MzIgfCBTcGVjTnVtYmVyKTsK
KyAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIH0KICAgICAgICAgLy8gV2UgZG9uJ3QgaGFuZGxlIHRoaXMgeWV0LiA6LSgKICAg
ICAgICAgbV9pc1ZhbGlkID0gZmFsc2U7Ci0gICAgICAgIG5vZGUuc2V0Q2FuRXhpdCh0cnVlKTsK
KyAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQog
ICAgICAgICAgICAgCiAgICAgY2FzZSBBcml0aFN1YjogewotICAgICAgICBKU1ZhbHVlIGxlZnQg
PSBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLnZhbHVlKCk7Ci0gICAgICAgIEpTVmFsdWUgcmlnaHQg
PSBmb3JOb2RlKG5vZGUuY2hpbGQyKCkpLnZhbHVlKCk7CisgICAgICAgIEpTVmFsdWUgbGVmdCA9
IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLnZhbHVlKCk7CisgICAgICAgIEpTVmFsdWUgcmlnaHQg
PSBmb3JOb2RlKG5vZGUtPmNoaWxkMigpKS52YWx1ZSgpOwogICAgICAgICBpZiAobGVmdCAmJiBy
aWdodCAmJiBsZWZ0LmlzTnVtYmVyKCkgJiYgcmlnaHQuaXNOdW1iZXIoKQotICAgICAgICAgICAg
JiYgdHJ5U2V0Q29uc3RhbnQobm9kZUluZGV4LCBKU1ZhbHVlKGxlZnQuYXNOdW1iZXIoKSAtIHJp
Z2h0LmFzTnVtYmVyKCkpKSkgeworICAgICAgICAgICAgJiYgdHJ5U2V0Q29uc3RhbnQobm9kZSwg
SlNWYWx1ZShsZWZ0LmFzTnVtYmVyKCkgLSByaWdodC5hc051bWJlcigpKSkpIHsKICAgICAgICAg
ICAgIG1fZm91bmRDb25zdGFudHMgPSB0cnVlOwotICAgICAgICAgICAgbm9kZS5zZXRDYW5FeGl0
KGZhbHNlKTsKKyAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgaWYgKG1fZ3JhcGguYWRkU2hvdWxkU3BlY3Vs
YXRlSW50ZWdlcihub2RlKSkgewogICAgICAgICAgICAgc3BlY3VsYXRlSW50MzJCaW5hcnkoCi0g
ICAgICAgICAgICAgICAgbm9kZSwgIW5vZGVDYW5UcnVuY2F0ZUludGVnZXIobm9kZS5hcml0aE5v
ZGVGbGFncygpKSk7Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFNwZWNJbnQz
Mik7CisgICAgICAgICAgICAgICAgbm9kZSwgIW5vZGVDYW5UcnVuY2F0ZUludGVnZXIobm9kZS0+
YXJpdGhOb2RlRmxhZ3MoKSkpOworICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0lu
dDMyKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIHNwZWN1bGF0ZU51
bWJlckJpbmFyeShub2RlKTsKLSAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChTcGVjRG91
YmxlKTsKKyAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0RvdWJsZSk7CiAgICAgICAgIGJy
ZWFrOwogICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBBcml0aE5lZ2F0ZTogewotICAgICAgICBK
U1ZhbHVlIGNoaWxkID0gZm9yTm9kZShub2RlLmNoaWxkMSgpKS52YWx1ZSgpOworICAgICAgICBK
U1ZhbHVlIGNoaWxkID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSkudmFsdWUoKTsKICAgICAgICAg
aWYgKGNoaWxkICYmIGNoaWxkLmlzTnVtYmVyKCkKLSAgICAgICAgICAgICYmIHRyeVNldENvbnN0
YW50KG5vZGVJbmRleCwgSlNWYWx1ZSgtY2hpbGQuYXNOdW1iZXIoKSkpKSB7CisgICAgICAgICAg
ICAmJiB0cnlTZXRDb25zdGFudChub2RlLCBKU1ZhbHVlKC1jaGlsZC5hc051bWJlcigpKSkpIHsK
ICAgICAgICAgICAgIG1fZm91bmRDb25zdGFudHMgPSB0cnVlOwotICAgICAgICAgICAgbm9kZS5z
ZXRDYW5FeGl0KGZhbHNlKTsKKyAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgaWYgKG1fZ3JhcGgubmVnYXRl
U2hvdWxkU3BlY3VsYXRlSW50ZWdlcihub2RlKSkgewogICAgICAgICAgICAgc3BlY3VsYXRlSW50
MzJVbmFyeSgKLSAgICAgICAgICAgICAgICBub2RlLCAhbm9kZUNhblRydW5jYXRlSW50ZWdlcihu
b2RlLmFyaXRoTm9kZUZsYWdzKCkpKTsKLSAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5z
ZXQoU3BlY0ludDMyKTsKKyAgICAgICAgICAgICAgICBub2RlLCAhbm9kZUNhblRydW5jYXRlSW50
ZWdlcihub2RlLT5hcml0aE5vZGVGbGFncygpKSk7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUp
LnNldChTcGVjSW50MzIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAg
c3BlY3VsYXRlTnVtYmVyVW5hcnkobm9kZSk7Ci0gICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5z
ZXQoU3BlY0RvdWJsZSk7CisgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNEb3VibGUpOwog
ICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgQXJpdGhNdWw6IHsKLSAg
ICAgICAgSlNWYWx1ZSBsZWZ0ID0gZm9yTm9kZShub2RlLmNoaWxkMSgpKS52YWx1ZSgpOwotICAg
ICAgICBKU1ZhbHVlIHJpZ2h0ID0gZm9yTm9kZShub2RlLmNoaWxkMigpKS52YWx1ZSgpOworICAg
ICAgICBKU1ZhbHVlIGxlZnQgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS52YWx1ZSgpOworICAg
ICAgICBKU1ZhbHVlIHJpZ2h0ID0gZm9yTm9kZShub2RlLT5jaGlsZDIoKSkudmFsdWUoKTsKICAg
ICAgICAgaWYgKGxlZnQgJiYgcmlnaHQgJiYgbGVmdC5pc051bWJlcigpICYmIHJpZ2h0LmlzTnVt
YmVyKCkKLSAgICAgICAgICAgICYmIHRyeVNldENvbnN0YW50KG5vZGVJbmRleCwgSlNWYWx1ZShs
ZWZ0LmFzTnVtYmVyKCkgKiByaWdodC5hc051bWJlcigpKSkpIHsKKyAgICAgICAgICAgICYmIHRy
eVNldENvbnN0YW50KG5vZGUsIEpTVmFsdWUobGVmdC5hc051bWJlcigpICogcmlnaHQuYXNOdW1i
ZXIoKSkpKSB7CiAgICAgICAgICAgICBtX2ZvdW5kQ29uc3RhbnRzID0gdHJ1ZTsKLSAgICAgICAg
ICAgIG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7CisgICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0
KGZhbHNlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGlmIChtX2dy
YXBoLm11bFNob3VsZFNwZWN1bGF0ZUludGVnZXIobm9kZSkpIHsKICAgICAgICAgICAgIHNwZWN1
bGF0ZUludDMyQmluYXJ5KAogICAgICAgICAgICAgICAgIG5vZGUsCi0gICAgICAgICAgICAgICAg
IW5vZGVDYW5UcnVuY2F0ZUludGVnZXIobm9kZS5hcml0aE5vZGVGbGFncygpKQotICAgICAgICAg
ICAgICAgIHx8ICFub2RlQ2FuSWdub3JlTmVnYXRpdmVaZXJvKG5vZGUuYXJpdGhOb2RlRmxhZ3Mo
KSkpOwotICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChTcGVjSW50MzIpOworICAg
ICAgICAgICAgICAgICFub2RlQ2FuVHJ1bmNhdGVJbnRlZ2VyKG5vZGUtPmFyaXRoTm9kZUZsYWdz
KCkpCisgICAgICAgICAgICAgICAgfHwgIW5vZGVDYW5JZ25vcmVOZWdhdGl2ZVplcm8obm9kZS0+
YXJpdGhOb2RlRmxhZ3MoKSkpOworICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0lu
dDMyKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIHNwZWN1bGF0ZU51
bWJlckJpbmFyeShub2RlKTsKLSAgICAgICAgaWYgKGlzUmVhbE51bWJlclNwZWN1bGF0aW9uKGZv
ck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKQotICAgICAgICAgICAgfHwgaXNSZWFsTnVtYmVy
U3BlY3VsYXRpb24oZm9yTm9kZShub2RlLmNoaWxkMigpKS5tX3R5cGUpKQotICAgICAgICAgICAg
Zm9yTm9kZShub2RlSW5kZXgpLnNldChTcGVjRG91YmxlUmVhbCk7CisgICAgICAgIGlmIChpc1Jl
YWxOdW1iZXJTcGVjdWxhdGlvbihmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX3R5cGUpCisgICAg
ICAgICAgICB8fCBpc1JlYWxOdW1iZXJTcGVjdWxhdGlvbihmb3JOb2RlKG5vZGUtPmNoaWxkMigp
KS5tX3R5cGUpKQorICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0RvdWJsZVJlYWwp
OwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFNwZWNE
b3VibGUpOworICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0RvdWJsZSk7CiAgICAg
ICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCkBAIC01NjMsMjQgKzU2MiwyNCBAQCBib29sIEFi
c3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgY2FzZSBBcml0aE1pbjoKICAg
ICBjYXNlIEFyaXRoTWF4OgogICAgIGNhc2UgQXJpdGhNb2Q6IHsKLSAgICAgICAgSlNWYWx1ZSBs
ZWZ0ID0gZm9yTm9kZShub2RlLmNoaWxkMSgpKS52YWx1ZSgpOwotICAgICAgICBKU1ZhbHVlIHJp
Z2h0ID0gZm9yTm9kZShub2RlLmNoaWxkMigpKS52YWx1ZSgpOworICAgICAgICBKU1ZhbHVlIGxl
ZnQgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS52YWx1ZSgpOworICAgICAgICBKU1ZhbHVlIHJp
Z2h0ID0gZm9yTm9kZShub2RlLT5jaGlsZDIoKSkudmFsdWUoKTsKICAgICAgICAgaWYgKGxlZnQg
JiYgcmlnaHQgJiYgbGVmdC5pc051bWJlcigpICYmIHJpZ2h0LmlzTnVtYmVyKCkpIHsKICAgICAg
ICAgICAgIGRvdWJsZSBhID0gbGVmdC5hc051bWJlcigpOwogICAgICAgICAgICAgZG91YmxlIGIg
PSByaWdodC5hc051bWJlcigpOwogICAgICAgICAgICAgYm9vbCBjb25zdGFudFdhc1NldDsKLSAg
ICAgICAgICAgIHN3aXRjaCAobm9kZS5vcCgpKSB7CisgICAgICAgICAgICBzd2l0Y2ggKG5vZGUt
Pm9wKCkpIHsKICAgICAgICAgICAgIGNhc2UgQXJpdGhEaXY6Ci0gICAgICAgICAgICAgICAgY29u
c3RhbnRXYXNTZXQgPSB0cnlTZXRDb25zdGFudChub2RlSW5kZXgsIEpTVmFsdWUoYSAvIGIpKTsK
KyAgICAgICAgICAgICAgICBjb25zdGFudFdhc1NldCA9IHRyeVNldENvbnN0YW50KG5vZGUsIEpT
VmFsdWUoYSAvIGIpKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2Ug
QXJpdGhNaW46Ci0gICAgICAgICAgICAgICAgY29uc3RhbnRXYXNTZXQgPSB0cnlTZXRDb25zdGFu
dChub2RlSW5kZXgsIEpTVmFsdWUoYSA8IGIgPyBhIDogKGIgPD0gYSA/IGIgOiBhICsgYikpKTsK
KyAgICAgICAgICAgICAgICBjb25zdGFudFdhc1NldCA9IHRyeVNldENvbnN0YW50KG5vZGUsIEpT
VmFsdWUoYSA8IGIgPyBhIDogKGIgPD0gYSA/IGIgOiBhICsgYikpKTsKICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgIGNhc2UgQXJpdGhNYXg6Ci0gICAgICAgICAgICAgICAgY29u
c3RhbnRXYXNTZXQgPSB0cnlTZXRDb25zdGFudChub2RlSW5kZXgsIEpTVmFsdWUoYSA+IGIgPyBh
IDogKGIgPj0gYSA/IGIgOiBhICsgYikpKTsKKyAgICAgICAgICAgICAgICBjb25zdGFudFdhc1Nl
dCA9IHRyeVNldENvbnN0YW50KG5vZGUsIEpTVmFsdWUoYSA+IGIgPyBhIDogKGIgPj0gYSA/IGIg
OiBhICsgYikpKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgQXJp
dGhNb2Q6Ci0gICAgICAgICAgICAgICAgY29uc3RhbnRXYXNTZXQgPSB0cnlTZXRDb25zdGFudChu
b2RlSW5kZXgsIEpTVmFsdWUoZm1vZChhLCBiKSkpOworICAgICAgICAgICAgICAgIGNvbnN0YW50
V2FzU2V0ID0gdHJ5U2V0Q29uc3RhbnQobm9kZSwgSlNWYWx1ZShmbW9kKGEsIGIpKSk7CiAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC01ODksODQgKzU4OCw4NCBAQCBib29s
IEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICBpZiAoY29uc3RhbnRXYXNTZXQpIHsKICAgICAgICAgICAgICAgICBtX2ZvdW5kQ29u
c3RhbnRzID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBub2RlLnNldENhbkV4aXQoZmFsc2UpOwor
ICAgICAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIGlmIChOb2RlOjpzaG91
bGRTcGVjdWxhdGVJbnRlZ2VyRm9yQXJpdGhtZXRpYygKLSAgICAgICAgICAgICAgICBtX2dyYXBo
W25vZGUuY2hpbGQxKCldLCBtX2dyYXBoW25vZGUuY2hpbGQyKCldKQotICAgICAgICAgICAgJiYg
bm9kZS5jYW5TcGVjdWxhdGVJbnRlZ2VyKCkpIHsKKyAgICAgICAgICAgICAgICBub2RlLT5jaGls
ZDEoKS5ub2RlKCksIG5vZGUtPmNoaWxkMigpLm5vZGUoKSkKKyAgICAgICAgICAgICYmIG5vZGUt
PmNhblNwZWN1bGF0ZUludGVnZXIoKSkgewogICAgICAgICAgICAgc3BlY3VsYXRlSW50MzJCaW5h
cnkobm9kZSwgdHJ1ZSk7IC8vIGZvcmNpbmcgY2FuLWV4aXQsIHdoaWNoIGlzIGEgYml0IG9uIHRo
ZSBjb25zZXJ2YXRpdmUgc2lkZS4KLSAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQo
U3BlY0ludDMyKTsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNJbnQzMik7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBzcGVjdWxhdGVOdW1iZXJCaW5h
cnkobm9kZSk7Ci0gICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoU3BlY0RvdWJsZSk7Cisg
ICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNEb3VibGUpOwogICAgICAgICBicmVhazsKICAg
ICB9CiAgICAgICAgICAgICAKICAgICBjYXNlIEFyaXRoQWJzOiB7Ci0gICAgICAgIEpTVmFsdWUg
Y2hpbGQgPSBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLnZhbHVlKCk7CisgICAgICAgIEpTVmFsdWUg
Y2hpbGQgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS52YWx1ZSgpOwogICAgICAgICBpZiAoY2hp
bGQgJiYgY2hpbGQuaXNOdW1iZXIoKQotICAgICAgICAgICAgJiYgdHJ5U2V0Q29uc3RhbnQobm9k
ZUluZGV4LCBKU1ZhbHVlKGZhYnMoY2hpbGQuYXNOdW1iZXIoKSkpKSkgeworICAgICAgICAgICAg
JiYgdHJ5U2V0Q29uc3RhbnQobm9kZSwgSlNWYWx1ZShmYWJzKGNoaWxkLmFzTnVtYmVyKCkpKSkp
IHsKICAgICAgICAgICAgIG1fZm91bmRDb25zdGFudHMgPSB0cnVlOwotICAgICAgICAgICAgbm9k
ZS5zZXRDYW5FeGl0KGZhbHNlKTsKKyAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2Up
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKG1fZ3JhcGhbbm9k
ZS5jaGlsZDEoKV0uc2hvdWxkU3BlY3VsYXRlSW50ZWdlckZvckFyaXRobWV0aWMoKQotICAgICAg
ICAgICAgJiYgbm9kZS5jYW5TcGVjdWxhdGVJbnRlZ2VyKCkpIHsKKyAgICAgICAgaWYgKG5vZGUt
PmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyRm9yQXJpdGhtZXRpYygpCisgICAgICAg
ICAgICAmJiBub2RlLT5jYW5TcGVjdWxhdGVJbnRlZ2VyKCkpIHsKICAgICAgICAgICAgIHNwZWN1
bGF0ZUludDMyVW5hcnkobm9kZSwgdHJ1ZSk7Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRl
eCkuc2V0KFNwZWNJbnQzMik7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjSW50
MzIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgc3BlY3VsYXRlTnVt
YmVyVW5hcnkobm9kZSk7Ci0gICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoU3BlY0RvdWJs
ZSk7CisgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNEb3VibGUpOwogICAgICAgICBicmVh
azsKICAgICB9CiAgICAgICAgICAgICAKICAgICBjYXNlIEFyaXRoU3FydDogewotICAgICAgICBK
U1ZhbHVlIGNoaWxkID0gZm9yTm9kZShub2RlLmNoaWxkMSgpKS52YWx1ZSgpOworICAgICAgICBK
U1ZhbHVlIGNoaWxkID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSkudmFsdWUoKTsKICAgICAgICAg
aWYgKGNoaWxkICYmIGNoaWxkLmlzTnVtYmVyKCkKLSAgICAgICAgICAgICYmIHRyeVNldENvbnN0
YW50KG5vZGVJbmRleCwgSlNWYWx1ZShzcXJ0KGNoaWxkLmFzTnVtYmVyKCkpKSkpIHsKKyAgICAg
ICAgICAgICYmIHRyeVNldENvbnN0YW50KG5vZGUsIEpTVmFsdWUoc3FydChjaGlsZC5hc051bWJl
cigpKSkpKSB7CiAgICAgICAgICAgICBtX2ZvdW5kQ29uc3RhbnRzID0gdHJ1ZTsKLSAgICAgICAg
ICAgIG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7CisgICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0
KGZhbHNlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIHNwZWN1bGF0
ZU51bWJlclVuYXJ5KG5vZGUpOwotICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFNwZWNE
b3VibGUpOworICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjRG91YmxlKTsKICAgICAgICAg
YnJlYWs7CiAgICAgfQogICAgICAgICAgICAgCiAgICAgY2FzZSBMb2dpY2FsTm90OiB7CiAgICAg
ICAgIGJvb2wgZGlkU2V0Q29uc3RhbnQgPSBmYWxzZTsKLSAgICAgICAgc3dpdGNoIChib29sZWFu
UmVzdWx0KG5vZGUsIGZvck5vZGUobm9kZS5jaGlsZDEoKSkpKSB7CisgICAgICAgIHN3aXRjaCAo
Ym9vbGVhblJlc3VsdChub2RlLCBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKSkpIHsKICAgICAgICAg
Y2FzZSBEZWZpbml0ZWx5VHJ1ZToKLSAgICAgICAgICAgIGRpZFNldENvbnN0YW50ID0gdHJ5U2V0
Q29uc3RhbnQobm9kZUluZGV4LCBqc0Jvb2xlYW4oZmFsc2UpKTsKKyAgICAgICAgICAgIGRpZFNl
dENvbnN0YW50ID0gdHJ5U2V0Q29uc3RhbnQobm9kZSwganNCb29sZWFuKGZhbHNlKSk7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBEZWZpbml0ZWx5RmFsc2U6Ci0gICAgICAgICAg
ICBkaWRTZXRDb25zdGFudCA9IHRyeVNldENvbnN0YW50KG5vZGVJbmRleCwganNCb29sZWFuKHRy
dWUpKTsKKyAgICAgICAgICAgIGRpZFNldENvbnN0YW50ID0gdHJ5U2V0Q29uc3RhbnQobm9kZSwg
anNCb29sZWFuKHRydWUpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBkZWZhdWx0Ogog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgaWYgKGRpZFNldENvbnN0YW50
KSB7CiAgICAgICAgICAgICBtX2ZvdW5kQ29uc3RhbnRzID0gdHJ1ZTsKLSAgICAgICAgICAgIG5v
ZGUuc2V0Q2FuRXhpdChmYWxzZSk7CisgICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNl
KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIE5vZGUmIGNoaWxkID0g
bV9ncmFwaFtub2RlLmNoaWxkMSgpXTsKLSAgICAgICAgaWYgKGlzQm9vbGVhblNwZWN1bGF0aW9u
KGNoaWxkLnByZWRpY3Rpb24oKSkpCisgICAgICAgIE5vZGUqIGNoaWxkID0gbm9kZS0+Y2hpbGQx
KCkubm9kZSgpOworICAgICAgICBpZiAoaXNCb29sZWFuU3BlY3VsYXRpb24oY2hpbGQtPnByZWRp
Y3Rpb24oKSkpCiAgICAgICAgICAgICBzcGVjdWxhdGVCb29sZWFuVW5hcnkobm9kZSk7Ci0gICAg
ICAgIGVsc2UgaWYgKGNoaWxkLnNob3VsZFNwZWN1bGF0ZU5vblN0cmluZ0NlbGxPck90aGVyKCkp
IHsKLSAgICAgICAgICAgIG5vZGUuc2V0Q2FuRXhpdCh0cnVlKTsKLSAgICAgICAgICAgIGZvck5v
ZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKChTcGVjQ2VsbCAmIH5TcGVjU3RyaW5nKSB8IFNwZWNP
dGhlcik7Ci0gICAgICAgIH0gZWxzZSBpZiAoY2hpbGQuc2hvdWxkU3BlY3VsYXRlSW50ZWdlcigp
KQorICAgICAgICBlbHNlIGlmIChjaGlsZC0+c2hvdWxkU3BlY3VsYXRlTm9uU3RyaW5nQ2VsbE9y
T3RoZXIoKSkgeworICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKKyAgICAgICAg
ICAgIGZvck5vZGUoY2hpbGQpLmZpbHRlcigoU3BlY0NlbGwgJiB+U3BlY1N0cmluZykgfCBTcGVj
T3RoZXIpOworICAgICAgICB9IGVsc2UgaWYgKGNoaWxkLT5zaG91bGRTcGVjdWxhdGVJbnRlZ2Vy
KCkpCiAgICAgICAgICAgICBzcGVjdWxhdGVJbnQzMlVuYXJ5KG5vZGUpOwotICAgICAgICBlbHNl
IGlmIChjaGlsZC5zaG91bGRTcGVjdWxhdGVOdW1iZXIoKSkKKyAgICAgICAgZWxzZSBpZiAoY2hp
bGQtPnNob3VsZFNwZWN1bGF0ZU51bWJlcigpKQogICAgICAgICAgICAgc3BlY3VsYXRlTnVtYmVy
VW5hcnkobm9kZSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIG5vZGUuc2V0Q2FuRXhpdChm
YWxzZSk7Ci0gICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoU3BlY0Jvb2xlYW4pOworICAg
ICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CisgICAgICAgIGZvck5vZGUobm9kZSku
c2V0KFNwZWNCb29sZWFuKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKQEAgLTY3
NiwzNiArNjc1LDM2IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQK
ICAgICBjYXNlIElzU3RyaW5nOgogICAgIGNhc2UgSXNPYmplY3Q6CiAgICAgY2FzZSBJc0Z1bmN0
aW9uOiB7Ci0gICAgICAgIG5vZGUuc2V0Q2FuRXhpdChub2RlLm9wKCkgPT0gSXNVbmRlZmluZWQg
JiYgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdEZvcihub2RlLmNvZGVPcmlnaW4pLT5tYXNxdWVy
YWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2ludCgpLT5pc1N0aWxsVmFsaWQoKSk7Ci0gICAgICAgIEpT
VmFsdWUgY2hpbGQgPSBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLnZhbHVlKCk7CisgICAgICAgIG5v
ZGUtPnNldENhbkV4aXQobm9kZS0+b3AoKSA9PSBJc1VuZGVmaW5lZCAmJiBtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0Rm9yKG5vZGUtPmNvZGVPcmlnaW4pLT5tYXNxdWVyYWRlc0FzVW5kZWZpbmVk
V2F0Y2hwb2ludCgpLT5pc1N0aWxsVmFsaWQoKSk7CisgICAgICAgIEpTVmFsdWUgY2hpbGQgPSBm
b3JOb2RlKG5vZGUtPmNoaWxkMSgpKS52YWx1ZSgpOwogICAgICAgICBpZiAoY2hpbGQpIHsKICAg
ICAgICAgICAgIGJvb2wgY29uc3RhbnRXYXNTZXQ7Ci0gICAgICAgICAgICBzd2l0Y2ggKG5vZGUu
b3AoKSkgeworICAgICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CiAgICAgICAgICAgICBj
YXNlIElzVW5kZWZpbmVkOgotICAgICAgICAgICAgICAgIGlmIChtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0Rm9yKG5vZGUuY29kZU9yaWdpbiktPm1hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBv
aW50KCktPmlzU3RpbGxWYWxpZCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnN0YW50V2Fz
U2V0ID0gdHJ5U2V0Q29uc3RhbnQobm9kZUluZGV4LCBqc0Jvb2xlYW4oCisgICAgICAgICAgICAg
ICAgaWYgKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3RGb3Iobm9kZS0+Y29kZU9yaWdpbiktPm1h
c3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50KCktPmlzU3RpbGxWYWxpZCgpKSB7CisgICAg
ICAgICAgICAgICAgICAgIGNvbnN0YW50V2FzU2V0ID0gdHJ5U2V0Q29uc3RhbnQobm9kZSwganNC
b29sZWFuKAogICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGQuaXNDZWxsKCkKICAgICAgICAg
ICAgICAgICAgICAgICAgID8gZmFsc2UgCiAgICAgICAgICAgICAgICAgICAgICAgICA6IGNoaWxk
LmlzVW5kZWZpbmVkKCkpKTsKICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
ICAgICAgICBjb25zdGFudFdhc1NldCA9IHRyeVNldENvbnN0YW50KG5vZGVJbmRleCwganNCb29s
ZWFuKAorICAgICAgICAgICAgICAgICAgICBjb25zdGFudFdhc1NldCA9IHRyeVNldENvbnN0YW50
KG5vZGUsIGpzQm9vbGVhbigKICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkLmlzQ2VsbCgp
Ci0gICAgICAgICAgICAgICAgICAgICAgICA/IGNoaWxkLmFzQ2VsbCgpLT5zdHJ1Y3R1cmUoKS0+
bWFzcXVlcmFkZXNBc1VuZGVmaW5lZChtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0Rm9yKG5vZGUu
Y29kZU9yaWdpbikpCisgICAgICAgICAgICAgICAgICAgICAgICA/IGNoaWxkLmFzQ2VsbCgpLT5z
dHJ1Y3R1cmUoKS0+bWFzcXVlcmFkZXNBc1VuZGVmaW5lZChtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0Rm9yKG5vZGUtPmNvZGVPcmlnaW4pKQogICAgICAgICAgICAgICAgICAgICAgICAgOiBjaGls
ZC5pc1VuZGVmaW5lZCgpKSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgY2FzZSBJc0Jvb2xlYW46Ci0gICAgICAgICAgICAgICAgY29uc3Rh
bnRXYXNTZXQgPSB0cnlTZXRDb25zdGFudChub2RlSW5kZXgsIGpzQm9vbGVhbihjaGlsZC5pc0Jv
b2xlYW4oKSkpOworICAgICAgICAgICAgICAgIGNvbnN0YW50V2FzU2V0ID0gdHJ5U2V0Q29uc3Rh
bnQobm9kZSwganNCb29sZWFuKGNoaWxkLmlzQm9vbGVhbigpKSk7CiAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICBjYXNlIElzTnVtYmVyOgotICAgICAgICAgICAgICAgIGNvbnN0
YW50V2FzU2V0ID0gdHJ5U2V0Q29uc3RhbnQobm9kZUluZGV4LCBqc0Jvb2xlYW4oY2hpbGQuaXNO
dW1iZXIoKSkpOworICAgICAgICAgICAgICAgIGNvbnN0YW50V2FzU2V0ID0gdHJ5U2V0Q29uc3Rh
bnQobm9kZSwganNCb29sZWFuKGNoaWxkLmlzTnVtYmVyKCkpKTsKICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgIGNhc2UgSXNTdHJpbmc6Ci0gICAgICAgICAgICAgICAgY29uc3Rh
bnRXYXNTZXQgPSB0cnlTZXRDb25zdGFudChub2RlSW5kZXgsIGpzQm9vbGVhbihpc0pTU3RyaW5n
KGNoaWxkKSkpOworICAgICAgICAgICAgICAgIGNvbnN0YW50V2FzU2V0ID0gdHJ5U2V0Q29uc3Rh
bnQobm9kZSwganNCb29sZWFuKGlzSlNTdHJpbmcoY2hpbGQpKSk7CiAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICBjYXNlIElzT2JqZWN0OgogICAgICAgICAgICAgICAgIGlmIChj
aGlsZC5pc051bGwoKSB8fCAhY2hpbGQuaXNPYmplY3QoKSkgewotICAgICAgICAgICAgICAgICAg
ICBjb25zdGFudFdhc1NldCA9IHRyeVNldENvbnN0YW50KG5vZGVJbmRleCwganNCb29sZWFuKGNo
aWxkLmlzTnVsbCgpKSk7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0YW50V2FzU2V0ID0gdHJ5
U2V0Q29uc3RhbnQobm9kZSwganNCb29sZWFuKGNoaWxkLmlzTnVsbCgpKSk7CiAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGRlZmF1bHQ6
CkBAIC03MTgsNjEgKzcxNyw2MSBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWdu
ZWQgaW5kCiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAotICAgICAgICBmb3JOb2RlKG5vZGVJ
bmRleCkuc2V0KFNwZWNCb29sZWFuKTsKKyAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0Jv
b2xlYW4pOwogICAgICAgICBicmVhazsKICAgICB9CiAKICAgICBjYXNlIFR5cGVPZjogewogICAg
ICAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSBtX2NvZGVCbG9jay0+Z2xvYmFsRGF0YSgp
OwotICAgICAgICBKU1ZhbHVlIGNoaWxkID0gZm9yTm9kZShub2RlLmNoaWxkMSgpKS52YWx1ZSgp
OwotICAgICAgICBBYnN0cmFjdFZhbHVlJiBhYnN0cmFjdENoaWxkID0gZm9yTm9kZShub2RlLmNo
aWxkMSgpKTsKKyAgICAgICAgSlNWYWx1ZSBjaGlsZCA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkp
LnZhbHVlKCk7CisgICAgICAgIEFic3RyYWN0VmFsdWUmIGFic3RyYWN0Q2hpbGQgPSBmb3JOb2Rl
KG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgaWYgKGNoaWxkKSB7Ci0gICAgICAgICAgICBKU1Zh
bHVlIHR5cGVTdHJpbmcgPSBqc1R5cGVTdHJpbmdGb3JWYWx1ZSgqZ2xvYmFsRGF0YSwgbV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdEZvcihub2RlLmNvZGVPcmlnaW4pLCBjaGlsZCk7Ci0gICAgICAg
ICAgICBpZiAodHJ5U2V0Q29uc3RhbnQobm9kZUluZGV4LCB0eXBlU3RyaW5nKSkgeworICAgICAg
ICAgICAgSlNWYWx1ZSB0eXBlU3RyaW5nID0ganNUeXBlU3RyaW5nRm9yVmFsdWUoKmdsb2JhbERh
dGEsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3RGb3Iobm9kZS0+Y29kZU9yaWdpbiksIGNoaWxk
KTsKKyAgICAgICAgICAgIGlmICh0cnlTZXRDb25zdGFudChub2RlLCB0eXBlU3RyaW5nKSkgewog
ICAgICAgICAgICAgICAgIG1fZm91bmRDb25zdGFudHMgPSB0cnVlOwogICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgaWYgKGlzTnVtYmVyU3BlY3Vs
YXRpb24oYWJzdHJhY3RDaGlsZC5tX3R5cGUpKSB7Ci0gICAgICAgICAgICBpZiAodHJ5U2V0Q29u
c3RhbnQobm9kZUluZGV4LCBnbG9iYWxEYXRhLT5zbWFsbFN0cmluZ3MubnVtYmVyU3RyaW5nKCkp
KSB7Ci0gICAgICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY051
bWJlcik7CisgICAgICAgICAgICBpZiAodHJ5U2V0Q29uc3RhbnQobm9kZSwgZ2xvYmFsRGF0YS0+
c21hbGxTdHJpbmdzLm51bWJlclN0cmluZygpKSkgeworICAgICAgICAgICAgICAgIGZvck5vZGUo
bm9kZS0+Y2hpbGQxKCkpLmZpbHRlcihTcGVjTnVtYmVyKTsKICAgICAgICAgICAgICAgICBtX2Zv
dW5kQ29uc3RhbnRzID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
IH0KICAgICAgICAgfSBlbHNlIGlmIChpc1N0cmluZ1NwZWN1bGF0aW9uKGFic3RyYWN0Q2hpbGQu
bV90eXBlKSkgewotICAgICAgICAgICAgaWYgKHRyeVNldENvbnN0YW50KG5vZGVJbmRleCwgZ2xv
YmFsRGF0YS0+c21hbGxTdHJpbmdzLnN0cmluZ1N0cmluZygpKSkgewotICAgICAgICAgICAgICAg
IGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNTdHJpbmcpOworICAgICAgICAgICAg
aWYgKHRyeVNldENvbnN0YW50KG5vZGUsIGdsb2JhbERhdGEtPnNtYWxsU3RyaW5ncy5zdHJpbmdT
dHJpbmcoKSkpIHsKKyAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5maWx0
ZXIoU3BlY1N0cmluZyk7CiAgICAgICAgICAgICAgICAgbV9mb3VuZENvbnN0YW50cyA9IHRydWU7
CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSBp
ZiAoaXNGaW5hbE9iamVjdFNwZWN1bGF0aW9uKGFic3RyYWN0Q2hpbGQubV90eXBlKSB8fCBpc0Fy
cmF5U3BlY3VsYXRpb24oYWJzdHJhY3RDaGlsZC5tX3R5cGUpIHx8IGlzQXJndW1lbnRzU3BlY3Vs
YXRpb24oYWJzdHJhY3RDaGlsZC5tX3R5cGUpKSB7Ci0gICAgICAgICAgICBpZiAodHJ5U2V0Q29u
c3RhbnQobm9kZUluZGV4LCBnbG9iYWxEYXRhLT5zbWFsbFN0cmluZ3Mub2JqZWN0U3RyaW5nKCkp
KSB7Ci0gICAgICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY0Zp
bmFsT2JqZWN0IHwgU3BlY0FycmF5IHwgU3BlY0FyZ3VtZW50cyk7CisgICAgICAgICAgICBpZiAo
dHJ5U2V0Q29uc3RhbnQobm9kZSwgZ2xvYmFsRGF0YS0+c21hbGxTdHJpbmdzLm9iamVjdFN0cmlu
ZygpKSkgeworICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRlcihT
cGVjRmluYWxPYmplY3QgfCBTcGVjQXJyYXkgfCBTcGVjQXJndW1lbnRzKTsKICAgICAgICAgICAg
ICAgICBtX2ZvdW5kQ29uc3RhbnRzID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIGlmIChpc0Z1bmN0aW9uU3BlY3VsYXRpb24oYWJz
dHJhY3RDaGlsZC5tX3R5cGUpKSB7Ci0gICAgICAgICAgICBpZiAodHJ5U2V0Q29uc3RhbnQobm9k
ZUluZGV4LCBnbG9iYWxEYXRhLT5zbWFsbFN0cmluZ3MuZnVuY3Rpb25TdHJpbmcoKSkpIHsKLSAg
ICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjRnVuY3Rpb24p
OworICAgICAgICAgICAgaWYgKHRyeVNldENvbnN0YW50KG5vZGUsIGdsb2JhbERhdGEtPnNtYWxs
U3RyaW5ncy5mdW5jdGlvblN0cmluZygpKSkgeworICAgICAgICAgICAgICAgIGZvck5vZGUobm9k
ZS0+Y2hpbGQxKCkpLmZpbHRlcihTcGVjRnVuY3Rpb24pOwogICAgICAgICAgICAgICAgIG1fZm91
bmRDb25zdGFudHMgPSB0cnVlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
fQogICAgICAgICB9IGVsc2UgaWYgKGlzQm9vbGVhblNwZWN1bGF0aW9uKGFic3RyYWN0Q2hpbGQu
bV90eXBlKSkgewotICAgICAgICAgICAgaWYgKHRyeVNldENvbnN0YW50KG5vZGVJbmRleCwgZ2xv
YmFsRGF0YS0+c21hbGxTdHJpbmdzLmJvb2xlYW5TdHJpbmcoKSkpIHsKLSAgICAgICAgICAgICAg
ICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjQm9vbGVhbik7CisgICAgICAgICAg
ICBpZiAodHJ5U2V0Q29uc3RhbnQobm9kZSwgZ2xvYmFsRGF0YS0+c21hbGxTdHJpbmdzLmJvb2xl
YW5TdHJpbmcoKSkpIHsKKyAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5m
aWx0ZXIoU3BlY0Jvb2xlYW4pOwogICAgICAgICAgICAgICAgIG1fZm91bmRDb25zdGFudHMgPSB0
cnVlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgTm9kZSYgY2hpbGROb2RlID0gbV9ncmFwaFtub2RlLmNoaWxkMSgp
XTsKLSAgICAgICAgICAgIGlmIChpc0NlbGxTcGVjdWxhdGlvbihjaGlsZE5vZGUucHJlZGljdGlv
bigpKSkgewotICAgICAgICAgICAgICAgIGlmIChpc1N0cmluZ1NwZWN1bGF0aW9uKGNoaWxkTm9k
ZS5wcmVkaWN0aW9uKCkpKQotICAgICAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQx
KCkpLmZpbHRlcihTcGVjU3RyaW5nKTsKKyAgICAgICAgICAgIE5vZGUqIGNoaWxkTm9kZSA9IG5v
ZGUtPmNoaWxkMSgpLm5vZGUoKTsKKyAgICAgICAgICAgIGlmIChpc0NlbGxTcGVjdWxhdGlvbihj
aGlsZE5vZGUtPnByZWRpY3Rpb24oKSkpIHsKKyAgICAgICAgICAgICAgICBpZiAoaXNTdHJpbmdT
cGVjdWxhdGlvbihjaGlsZE5vZGUtPnByZWRpY3Rpb24oKSkpCisgICAgICAgICAgICAgICAgICAg
IGZvck5vZGUoY2hpbGROb2RlKS5maWx0ZXIoU3BlY1N0cmluZyk7CiAgICAgICAgICAgICAgICAg
ZWxzZQotICAgICAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihT
cGVjQ2VsbCk7Ci0gICAgICAgICAgICAgICAgbm9kZS5zZXRDYW5FeGl0KHRydWUpOworICAgICAg
ICAgICAgICAgICAgICBmb3JOb2RlKGNoaWxkTm9kZSkuZmlsdGVyKFNwZWNDZWxsKTsKKyAgICAg
ICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOwogICAgICAgICAgICAgfQogICAgICAg
ICB9Ci0gICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoU3BlY1N0cmluZyk7CisgICAgICAg
IGZvck5vZGUobm9kZSkuc2V0KFNwZWNTdHJpbmcpOwogICAgICAgICBicmVhazsKICAgICB9CiAg
ICAgICAgICAgICAKQEAgLTc4MywyNiArNzgyLDI2IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhl
Y3V0ZSh1bnNpZ25lZCBpbmQKICAgICBjYXNlIENvbXBhcmVFcTogewogICAgICAgICBib29sIGNv
bnN0YW50V2FzU2V0ID0gZmFsc2U7CiAKLSAgICAgICAgSlNWYWx1ZSBsZWZ0Q29uc3QgPSBmb3JO
b2RlKG5vZGUuY2hpbGQxKCkpLnZhbHVlKCk7Ci0gICAgICAgIEpTVmFsdWUgcmlnaHRDb25zdCA9
IGZvck5vZGUobm9kZS5jaGlsZDIoKSkudmFsdWUoKTsKKyAgICAgICAgSlNWYWx1ZSBsZWZ0Q29u
c3QgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS52YWx1ZSgpOworICAgICAgICBKU1ZhbHVlIHJp
Z2h0Q29uc3QgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMigpKS52YWx1ZSgpOwogICAgICAgICBpZiAo
bGVmdENvbnN0ICYmIHJpZ2h0Q29uc3QgJiYgbGVmdENvbnN0LmlzTnVtYmVyKCkgJiYgcmlnaHRD
b25zdC5pc051bWJlcigpKSB7CiAgICAgICAgICAgICBkb3VibGUgYSA9IGxlZnRDb25zdC5hc051
bWJlcigpOwogICAgICAgICAgICAgZG91YmxlIGIgPSByaWdodENvbnN0LmFzTnVtYmVyKCk7Ci0g
ICAgICAgICAgICBzd2l0Y2ggKG5vZGUub3AoKSkgeworICAgICAgICAgICAgc3dpdGNoIChub2Rl
LT5vcCgpKSB7CiAgICAgICAgICAgICBjYXNlIENvbXBhcmVMZXNzOgotICAgICAgICAgICAgICAg
IGNvbnN0YW50V2FzU2V0ID0gdHJ5U2V0Q29uc3RhbnQobm9kZUluZGV4LCBqc0Jvb2xlYW4oYSA8
IGIpKTsKKyAgICAgICAgICAgICAgICBjb25zdGFudFdhc1NldCA9IHRyeVNldENvbnN0YW50KG5v
ZGUsIGpzQm9vbGVhbihhIDwgYikpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgY2FzZSBDb21wYXJlTGVzc0VxOgotICAgICAgICAgICAgICAgIGNvbnN0YW50V2FzU2V0ID0g
dHJ5U2V0Q29uc3RhbnQobm9kZUluZGV4LCBqc0Jvb2xlYW4oYSA8PSBiKSk7CisgICAgICAgICAg
ICAgICAgY29uc3RhbnRXYXNTZXQgPSB0cnlTZXRDb25zdGFudChub2RlLCBqc0Jvb2xlYW4oYSA8
PSBiKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIENvbXBhcmVH
cmVhdGVyOgotICAgICAgICAgICAgICAgIGNvbnN0YW50V2FzU2V0ID0gdHJ5U2V0Q29uc3RhbnQo
bm9kZUluZGV4LCBqc0Jvb2xlYW4oYSA+IGIpKTsKKyAgICAgICAgICAgICAgICBjb25zdGFudFdh
c1NldCA9IHRyeVNldENvbnN0YW50KG5vZGUsIGpzQm9vbGVhbihhID4gYikpOwogICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBDb21wYXJlR3JlYXRlckVxOgotICAgICAg
ICAgICAgICAgIGNvbnN0YW50V2FzU2V0ID0gdHJ5U2V0Q29uc3RhbnQobm9kZUluZGV4LCBqc0Jv
b2xlYW4oYSA+PSBiKSk7CisgICAgICAgICAgICAgICAgY29uc3RhbnRXYXNTZXQgPSB0cnlTZXRD
b25zdGFudChub2RlLCBqc0Jvb2xlYW4oYSA+PSBiKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICBjYXNlIENvbXBhcmVFcToKLSAgICAgICAgICAgICAgICBjb25zdGFudFdh
c1NldCA9IHRyeVNldENvbnN0YW50KG5vZGVJbmRleCwganNCb29sZWFuKGEgPT0gYikpOworICAg
ICAgICAgICAgICAgIGNvbnN0YW50V2FzU2V0ID0gdHJ5U2V0Q29uc3RhbnQobm9kZSwganNCb29s
ZWFuKGEgPT0gYikpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgZGVmYXVs
dDoKICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtODEx
LDI0ICs4MTAsMjQgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAog
ICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBpZiAoIWNvbnN0YW50
V2FzU2V0ICYmIG5vZGUub3AoKSA9PSBDb21wYXJlRXEpIHsKLSAgICAgICAgICAgIFNwZWN1bGF0
ZWRUeXBlIGxlZnRUeXBlID0gZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGU7Ci0gICAgICAg
ICAgICBTcGVjdWxhdGVkVHlwZSByaWdodFR5cGUgPSBmb3JOb2RlKG5vZGUuY2hpbGQyKCkpLm1f
dHlwZTsKKyAgICAgICAgaWYgKCFjb25zdGFudFdhc1NldCAmJiBub2RlLT5vcCgpID09IENvbXBh
cmVFcSkgeworICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgbGVmdFR5cGUgPSBmb3JOb2RlKG5v
ZGUtPmNoaWxkMSgpKS5tX3R5cGU7CisgICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSByaWdodFR5
cGUgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMigpKS5tX3R5cGU7CiAgICAgICAgICAgICBpZiAoKGlz
SW50MzJTcGVjdWxhdGlvbihsZWZ0VHlwZSkgJiYgaXNPdGhlclNwZWN1bGF0aW9uKHJpZ2h0VHlw
ZSkpCiAgICAgICAgICAgICAgICAgfHwgKGlzT3RoZXJTcGVjdWxhdGlvbihsZWZ0VHlwZSkgJiYg
aXNJbnQzMlNwZWN1bGF0aW9uKHJpZ2h0VHlwZSkpKQotICAgICAgICAgICAgICAgIGNvbnN0YW50
V2FzU2V0ID0gdHJ5U2V0Q29uc3RhbnQobm9kZUluZGV4LCBqc0Jvb2xlYW4oZmFsc2UpKTsKKyAg
ICAgICAgICAgICAgICBjb25zdGFudFdhc1NldCA9IHRyeVNldENvbnN0YW50KG5vZGUsIGpzQm9v
bGVhbihmYWxzZSkpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBpZiAoY29uc3RhbnRX
YXNTZXQpIHsKICAgICAgICAgICAgIG1fZm91bmRDb25zdGFudHMgPSB0cnVlOwotICAgICAgICAg
ICAgbm9kZS5zZXRDYW5FeGl0KGZhbHNlKTsKKyAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQo
ZmFsc2UpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAg
IGZvck5vZGUobm9kZUluZGV4KS5zZXQoU3BlY0Jvb2xlYW4pOworICAgICAgICBmb3JOb2RlKG5v
ZGUpLnNldChTcGVjQm9vbGVhbik7CiAgICAgICAgIAotICAgICAgICBOb2RlJiBsZWZ0ID0gbV9n
cmFwaFtub2RlLmNoaWxkMSgpXTsKLSAgICAgICAgTm9kZSYgcmlnaHQgPSBtX2dyYXBoW25vZGUu
Y2hpbGQyKCldOworICAgICAgICBOb2RlKiBsZWZ0ID0gbm9kZS0+Y2hpbGQxKCkubm9kZSgpOwor
ICAgICAgICBOb2RlKiByaWdodCA9IG5vZGUtPmNoaWxkMigpLm5vZGUoKTsKICAgICAgICAgU3Bl
Y3VsYXRlZFR5cGUgZmlsdGVyOwogICAgICAgICBTcGVjdWxhdGVkVHlwZUNoZWNrZXIgY2hlY2tl
cjsKICAgICAgICAgaWYgKE5vZGU6OnNob3VsZFNwZWN1bGF0ZUludGVnZXIobGVmdCwgcmlnaHQp
KSB7CkBAIC04MzcsMTIyICs4MzYsMTIwIEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1
bnNpZ25lZCBpbmQKICAgICAgICAgfSBlbHNlIGlmIChOb2RlOjpzaG91bGRTcGVjdWxhdGVOdW1i
ZXIobGVmdCwgcmlnaHQpKSB7CiAgICAgICAgICAgICBmaWx0ZXIgPSBTcGVjTnVtYmVyOwogICAg
ICAgICAgICAgY2hlY2tlciA9IGlzTnVtYmVyU3BlY3VsYXRpb247Ci0gICAgICAgIH0gZWxzZSBp
ZiAobm9kZS5vcCgpID09IENvbXBhcmVFcSkgewotICAgICAgICAgICAgaWYgKChtX2dyYXBoLmlz
Q29uc3RhbnQobm9kZS5jaGlsZDEoKS5pbmRleCgpKQotICAgICAgICAgICAgICAgICAmJiBtX2dy
YXBoLnZhbHVlT2ZKU0NvbnN0YW50KG5vZGUuY2hpbGQxKCkuaW5kZXgoKSkuaXNOdWxsKCkpCi0g
ICAgICAgICAgICAgICAgfHwgKG1fZ3JhcGguaXNDb25zdGFudChub2RlLmNoaWxkMigpLmluZGV4
KCkpCi0gICAgICAgICAgICAgICAgICAgICYmIG1fZ3JhcGgudmFsdWVPZkpTQ29uc3RhbnQobm9k
ZS5jaGlsZDIoKS5pbmRleCgpKS5pc051bGwoKSkpIHsKKyAgICAgICAgfSBlbHNlIGlmIChub2Rl
LT5vcCgpID09IENvbXBhcmVFcSkgeworICAgICAgICAgICAgaWYgKChtX2dyYXBoLmlzQ29uc3Rh
bnQobGVmdCkKKyAgICAgICAgICAgICAgICAgJiYgbV9ncmFwaC52YWx1ZU9mSlNDb25zdGFudChs
ZWZ0KS5pc051bGwoKSkKKyAgICAgICAgICAgICAgICB8fCAobV9ncmFwaC5pc0NvbnN0YW50KHJp
Z2h0KQorICAgICAgICAgICAgICAgICAgICAmJiBtX2dyYXBoLnZhbHVlT2ZKU0NvbnN0YW50KHJp
Z2h0KS5pc051bGwoKSkpIHsKICAgICAgICAgICAgICAgICAvLyBXZSBjYW4gZXhpdCBpZiB3ZSBo
YXZlbid0IGZpcmVkIHRoZSBNYXNxdWVyYWRlc0FzVW5kZWZpbmQgd2F0Y2hwb2ludCB5ZXQuCi0g
ICAgICAgICAgICAgICAgbm9kZS5zZXRDYW5FeGl0KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3RG
b3Iobm9kZS5jb2RlT3JpZ2luKS0+bWFzcXVlcmFkZXNBc1VuZGVmaW5lZFdhdGNocG9pbnQoKS0+
aXNTdGlsbFZhbGlkKCkpOworICAgICAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdEZvcihub2RlLT5jb2RlT3JpZ2luKS0+bWFzcXVlcmFkZXNBc1Vu
ZGVmaW5lZFdhdGNocG9pbnQoKS0+aXNTdGlsbFZhbGlkKCkpOwogICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAobGVmdC5z
aG91bGRTcGVjdWxhdGVTdHJpbmcoKSB8fCByaWdodC5zaG91bGRTcGVjdWxhdGVTdHJpbmcoKSkg
ewotICAgICAgICAgICAgICAgIG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7CisgICAgICAgICAgICBp
ZiAobGVmdC0+c2hvdWxkU3BlY3VsYXRlU3RyaW5nKCkgfHwgcmlnaHQtPnNob3VsZFNwZWN1bGF0
ZVN0cmluZygpKSB7CisgICAgICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CiAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9IAotICAgICAgICAgICAgaWYgKGxl
ZnQuc2hvdWxkU3BlY3VsYXRlTm9uU3RyaW5nQ2VsbCgpICYmIHJpZ2h0LnNob3VsZFNwZWN1bGF0
ZU5vblN0cmluZ0NlbGxPck90aGVyKCkpIHsKLSAgICAgICAgICAgICAgICBub2RlLnNldENhbkV4
aXQodHJ1ZSk7Ci0gICAgICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIo
U3BlY0NlbGwgJiB+U3BlY1N0cmluZyk7Ci0gICAgICAgICAgICAgICAgZm9yTm9kZShub2RlLmNo
aWxkMigpKS5maWx0ZXIoKFNwZWNDZWxsICYgflNwZWNTdHJpbmcpIHwgU3BlY090aGVyKTsKLSAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChsZWZ0
LnNob3VsZFNwZWN1bGF0ZU5vblN0cmluZ0NlbGxPck90aGVyKCkgJiYgcmlnaHQuc2hvdWxkU3Bl
Y3VsYXRlTm9uU3RyaW5nQ2VsbCgpKSB7Ci0gICAgICAgICAgICAgICAgbm9kZS5zZXRDYW5FeGl0
KHRydWUpOwotICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKChT
cGVjQ2VsbCAmIH5TcGVjU3RyaW5nKSB8IFNwZWNPdGhlcik7Ci0gICAgICAgICAgICAgICAgZm9y
Tm9kZShub2RlLmNoaWxkMigpKS5maWx0ZXIoU3BlY0NlbGwgJiB+U3BlY1N0cmluZyk7Ci0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAobGVmdC5z
aG91bGRTcGVjdWxhdGVOb25TdHJpbmdDZWxsKCkgJiYgcmlnaHQuc2hvdWxkU3BlY3VsYXRlTm9u
U3RyaW5nQ2VsbCgpKSB7Ci0gICAgICAgICAgICAgICAgbm9kZS5zZXRDYW5FeGl0KHRydWUpOwot
ICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNDZWxsICYg
flNwZWNTdHJpbmcpOwotICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDIoKSkuZmls
dGVyKFNwZWNDZWxsICYgflNwZWNTdHJpbmcpOworICAgICAgICAgICAgaWYgKGxlZnQtPnNob3Vs
ZFNwZWN1bGF0ZU5vblN0cmluZ0NlbGwoKSAmJiByaWdodC0+c2hvdWxkU3BlY3VsYXRlTm9uU3Ry
aW5nQ2VsbE9yT3RoZXIoKSkgeworICAgICAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1
ZSk7CisgICAgICAgICAgICAgICAgZm9yTm9kZShsZWZ0KS5maWx0ZXIoU3BlY0NlbGwgJiB+U3Bl
Y1N0cmluZyk7CisgICAgICAgICAgICAgICAgZm9yTm9kZShyaWdodCkuZmlsdGVyKChTcGVjQ2Vs
bCAmIH5TcGVjU3RyaW5nKSB8IFNwZWNPdGhlcik7CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAobGVmdC0+c2hvdWxkU3BlY3VsYXRlTm9uU3Ry
aW5nQ2VsbE9yT3RoZXIoKSAmJiByaWdodC0+c2hvdWxkU3BlY3VsYXRlTm9uU3RyaW5nQ2VsbCgp
KSB7CisgICAgICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKKyAgICAgICAgICAg
ICAgICBmb3JOb2RlKGxlZnQpLmZpbHRlcigoU3BlY0NlbGwgJiB+U3BlY1N0cmluZykgfCBTcGVj
T3RoZXIpOworICAgICAgICAgICAgICAgIGZvck5vZGUocmlnaHQpLmZpbHRlcihTcGVjQ2VsbCAm
IH5TcGVjU3RyaW5nKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGlmIChsZWZ0LT5zaG91bGRTcGVjdWxhdGVOb25TdHJpbmdDZWxsKCkgJiYgcmln
aHQtPnNob3VsZFNwZWN1bGF0ZU5vblN0cmluZ0NlbGwoKSkgeworICAgICAgICAgICAgICAgIG5v
ZGUtPnNldENhbkV4aXQodHJ1ZSk7CisgICAgICAgICAgICAgICAgZm9yTm9kZShsZWZ0KS5maWx0
ZXIoU3BlY0NlbGwgJiB+U3BlY1N0cmluZyk7CisgICAgICAgICAgICAgICAgZm9yTm9kZShyaWdo
dCkuZmlsdGVyKFNwZWNDZWxsICYgflNwZWNTdHJpbmcpOwogICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgfQogIAogICAgICAgICAgICAgZmlsdGVyID0gU3BlY1RvcDsKICAgICAg
ICAgICAgIGNoZWNrZXIgPSBpc0FueVNwZWN1bGF0aW9uOwotICAgICAgICAgICAgY2xvYmJlcldv
cmxkKG5vZGUuY29kZU9yaWdpbiwgaW5kZXhJbkJsb2NrKTsKKyAgICAgICAgICAgIGNsb2JiZXJX
b3JsZChub2RlLT5jb2RlT3JpZ2luLCBpbmRleEluQmxvY2spOwogICAgICAgICB9IGVsc2Ugewog
ICAgICAgICAgICAgZmlsdGVyID0gU3BlY1RvcDsKICAgICAgICAgICAgIGNoZWNrZXIgPSBpc0Fu
eVNwZWN1bGF0aW9uOwotICAgICAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUuY29kZU9yaWdpbiwg
aW5kZXhJbkJsb2NrKTsKKyAgICAgICAgICAgIGNsb2JiZXJXb3JsZChub2RlLT5jb2RlT3JpZ2lu
LCBpbmRleEluQmxvY2spOwogICAgICAgICB9Ci0gICAgICAgIG5vZGUuc2V0Q2FuRXhpdCgKLSAg
ICAgICAgICAgICFjaGVja2VyKGZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKQotICAgICAg
ICAgICAgfHwgIWNoZWNrZXIoZm9yTm9kZShub2RlLmNoaWxkMigpKS5tX3R5cGUpKTsKLSAgICAg
ICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoZmlsdGVyKTsKLSAgICAgICAgZm9yTm9k
ZShub2RlLmNoaWxkMigpKS5maWx0ZXIoZmlsdGVyKTsKKyAgICAgICAgbm9kZS0+c2V0Q2FuRXhp
dCgKKyAgICAgICAgICAgICFjaGVja2VyKGZvck5vZGUobGVmdCkubV90eXBlKQorICAgICAgICAg
ICAgfHwgIWNoZWNrZXIoZm9yTm9kZShyaWdodCkubV90eXBlKSk7CisgICAgICAgIGZvck5vZGUo
bGVmdCkuZmlsdGVyKGZpbHRlcik7CisgICAgICAgIGZvck5vZGUocmlnaHQpLmZpbHRlcihmaWx0
ZXIpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgICAgICAKICAgICBjYXNlIENvbXBh
cmVTdHJpY3RFcTogewotICAgICAgICBKU1ZhbHVlIGxlZnQgPSBmb3JOb2RlKG5vZGUuY2hpbGQx
KCkpLnZhbHVlKCk7Ci0gICAgICAgIEpTVmFsdWUgcmlnaHQgPSBmb3JOb2RlKG5vZGUuY2hpbGQy
KCkpLnZhbHVlKCk7CisgICAgICAgIE5vZGUqIGxlZnROb2RlID0gbm9kZS0+Y2hpbGQxKCkubm9k
ZSgpOworICAgICAgICBOb2RlKiByaWdodE5vZGUgPSBub2RlLT5jaGlsZDIoKS5ub2RlKCk7Cisg
ICAgICAgIEpTVmFsdWUgbGVmdCA9IGZvck5vZGUobGVmdE5vZGUpLnZhbHVlKCk7CisgICAgICAg
IEpTVmFsdWUgcmlnaHQgPSBmb3JOb2RlKHJpZ2h0Tm9kZSkudmFsdWUoKTsKICAgICAgICAgaWYg
KGxlZnQgJiYgcmlnaHQgJiYgbGVmdC5pc051bWJlcigpICYmIHJpZ2h0LmlzTnVtYmVyKCkKLSAg
ICAgICAgICAgICYmIHRyeVNldENvbnN0YW50KG5vZGVJbmRleCwganNCb29sZWFuKGxlZnQuYXNO
dW1iZXIoKSA9PSByaWdodC5hc051bWJlcigpKSkpIHsKKyAgICAgICAgICAgICYmIHRyeVNldENv
bnN0YW50KG5vZGUsIGpzQm9vbGVhbihsZWZ0LmFzTnVtYmVyKCkgPT0gcmlnaHQuYXNOdW1iZXIo
KSkpKSB7CiAgICAgICAgICAgICBtX2ZvdW5kQ29uc3RhbnRzID0gdHJ1ZTsKLSAgICAgICAgICAg
IG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7CisgICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZh
bHNlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIGZvck5vZGUobm9k
ZUluZGV4KS5zZXQoU3BlY0Jvb2xlYW4pOwotICAgICAgICBpZiAobV9ncmFwaC5pc0pTQ29uc3Rh
bnQobm9kZS5jaGlsZDEoKS5pbmRleCgpKSkgewotICAgICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9
IG1fZ3JhcGgudmFsdWVPZkpTQ29uc3RhbnQobm9kZS5jaGlsZDEoKS5pbmRleCgpKTsKKyAgICAg
ICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0Jvb2xlYW4pOworICAgICAgICBpZiAobV9ncmFwaC5p
c0pTQ29uc3RhbnQobGVmdE5vZGUpKSB7CisgICAgICAgICAgICBKU1ZhbHVlIHZhbHVlID0gbV9n
cmFwaC52YWx1ZU9mSlNDb25zdGFudChsZWZ0Tm9kZSk7CiAgICAgICAgICAgICBpZiAoIXZhbHVl
LmlzTnVtYmVyKCkgJiYgIXZhbHVlLmlzU3RyaW5nKCkpIHsKLSAgICAgICAgICAgICAgICBub2Rl
LnNldENhbkV4aXQoZmFsc2UpOworICAgICAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFs
c2UpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0g
ICAgICAgIGlmIChtX2dyYXBoLmlzSlNDb25zdGFudChub2RlLmNoaWxkMigpLmluZGV4KCkpKSB7
Ci0gICAgICAgICAgICBKU1ZhbHVlIHZhbHVlID0gbV9ncmFwaC52YWx1ZU9mSlNDb25zdGFudChu
b2RlLmNoaWxkMigpLmluZGV4KCkpOworICAgICAgICBpZiAobV9ncmFwaC5pc0pTQ29uc3RhbnQo
cmlnaHROb2RlKSkgeworICAgICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IG1fZ3JhcGgudmFsdWVP
ZkpTQ29uc3RhbnQocmlnaHROb2RlKTsKICAgICAgICAgICAgIGlmICghdmFsdWUuaXNOdW1iZXIo
KSAmJiAhdmFsdWUuaXNTdHJpbmcoKSkgewotICAgICAgICAgICAgICAgIG5vZGUuc2V0Q2FuRXhp
dChmYWxzZSk7CisgICAgICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CiAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgaWYg
KE5vZGU6OnNob3VsZFNwZWN1bGF0ZUludGVnZXIoCi0gICAgICAgICAgICAgICAgbV9ncmFwaFtu
b2RlLmNoaWxkMSgpXSwgbV9ncmFwaFtub2RlLmNoaWxkMigpXSkpIHsKKyAgICAgICAgaWYgKE5v
ZGU6OnNob3VsZFNwZWN1bGF0ZUludGVnZXIobGVmdE5vZGUsIHJpZ2h0Tm9kZSkpIHsKICAgICAg
ICAgICAgIHNwZWN1bGF0ZUludDMyQmluYXJ5KG5vZGUpOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIH0KLSAgICAgICAgaWYgKE5vZGU6OnNob3VsZFNwZWN1bGF0ZU51bWJlcigKLSAgICAg
ICAgICAgICAgICBtX2dyYXBoW25vZGUuY2hpbGQxKCldLCBtX2dyYXBoW25vZGUuY2hpbGQyKCld
KSkgeworICAgICAgICBpZiAoTm9kZTo6c2hvdWxkU3BlY3VsYXRlTnVtYmVyKGxlZnROb2RlLCBy
aWdodE5vZGUpKSB7CiAgICAgICAgICAgICBzcGVjdWxhdGVOdW1iZXJCaW5hcnkobm9kZSk7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICBOb2RlJiBsZWZ0Tm9kZSA9IG1f
Z3JhcGhbbm9kZS5jaGlsZDEoKV07Ci0gICAgICAgIE5vZGUmIHJpZ2h0Tm9kZSA9IG1fZ3JhcGhb
bm9kZS5jaGlsZDIoKV07Ci0gICAgICAgIGlmIChsZWZ0Tm9kZS5zaG91bGRTcGVjdWxhdGVTdHJp
bmcoKSB8fCByaWdodE5vZGUuc2hvdWxkU3BlY3VsYXRlU3RyaW5nKCkpIHsKLSAgICAgICAgICAg
IG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7CisgICAgICAgIGlmIChsZWZ0Tm9kZS0+c2hvdWxkU3Bl
Y3VsYXRlU3RyaW5nKCkgfHwgcmlnaHROb2RlLT5zaG91bGRTcGVjdWxhdGVTdHJpbmcoKSkgewor
ICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgfQotICAgICAgICBpZiAobGVmdE5vZGUuc2hvdWxkU3BlY3VsYXRlTm9uU3RyaW5n
Q2VsbCgpICYmIHJpZ2h0Tm9kZS5zaG91bGRTcGVjdWxhdGVOb25TdHJpbmdDZWxsKCkpIHsKLSAg
ICAgICAgICAgIG5vZGUuc2V0Q2FuRXhpdCh0cnVlKTsKLSAgICAgICAgICAgIGZvck5vZGUobm9k
ZS5jaGlsZDEoKSkuZmlsdGVyKChTcGVjQ2VsbCAmIH5TcGVjU3RyaW5nKSB8IFNwZWNPdGhlcik7
Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQyKCkpLmZpbHRlcigoU3BlY0NlbGwgJiB+
U3BlY1N0cmluZykgfCBTcGVjT3RoZXIpOworICAgICAgICBpZiAobGVmdE5vZGUtPnNob3VsZFNw
ZWN1bGF0ZU5vblN0cmluZ0NlbGwoKSAmJiByaWdodE5vZGUtPnNob3VsZFNwZWN1bGF0ZU5vblN0
cmluZ0NlbGwoKSkgeworICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKKyAgICAg
ICAgICAgIGZvck5vZGUobGVmdE5vZGUpLmZpbHRlcigoU3BlY0NlbGwgJiB+U3BlY1N0cmluZykg
fCBTcGVjT3RoZXIpOworICAgICAgICAgICAgZm9yTm9kZShyaWdodE5vZGUpLmZpbHRlcigoU3Bl
Y0NlbGwgJiB+U3BlY1N0cmluZykgfCBTcGVjT3RoZXIpOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIH0KLSAgICAgICAgbm9kZS5zZXRDYW5FeGl0KGZhbHNlKTsKKyAgICAgICAgbm9kZS0+
c2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCiAgICAg
Y2FzZSBTdHJpbmdDaGFyQ29kZUF0OgotICAgICAgICBub2RlLnNldENhbkV4aXQodHJ1ZSk7Ci0g
ICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNTdHJpbmcpOwotICAgICAg
ICBmb3JOb2RlKG5vZGUuY2hpbGQyKCkpLmZpbHRlcihTcGVjSW50MzIpOwotICAgICAgICBmb3JO
b2RlKG5vZGVJbmRleCkuc2V0KFNwZWNJbnQzMik7CisgICAgICAgIG5vZGUtPnNldENhbkV4aXQo
dHJ1ZSk7CisgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRlcihTcGVjU3RyaW5n
KTsKKyAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7Cisg
ICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNJbnQzMik7CiAgICAgICAgIGJyZWFrOwogICAg
ICAgICAKICAgICBjYXNlIFN0cmluZ0NoYXJBdDoKLSAgICAgICAgbm9kZS5zZXRDYW5FeGl0KHRy
dWUpOwotICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjU3RyaW5nKTsK
LSAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMigpKS5maWx0ZXIoU3BlY0ludDMyKTsKLSAgICAg
ICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChTcGVjU3RyaW5nKTsKKyAgICAgICAgbm9kZS0+c2V0
Q2FuRXhpdCh0cnVlKTsKKyAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDEoKSkuZmlsdGVyKFNw
ZWNTdHJpbmcpOworICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMigpKS5maWx0ZXIoU3BlY0lu
dDMyKTsKKyAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY1N0cmluZyk7CiAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgCiAgICAgY2FzZSBHZXRCeVZhbDogewotICAgICAgICBub2RlLnNl
dENhbkV4aXQodHJ1ZSk7Ci0gICAgICAgIHN3aXRjaCAobm9kZS5hcnJheU1vZGUoKS50eXBlKCkp
IHsKKyAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKKyAgICAgICAgc3dpdGNoIChub2Rl
LT5hcnJheU1vZGUoKS50eXBlKCkpIHsKICAgICAgICAgY2FzZSBBcnJheTo6U2VsZWN0VXNpbmdQ
cmVkaWN0aW9uczoKICAgICAgICAgY2FzZSBBcnJheTo6VW5wcm9maWxlZDoKICAgICAgICAgY2Fz
ZSBBcnJheTo6VW5kZWNpZGVkOgpAQCAtOTYyLDgxICs5NTksODEgQEAgYm9vbCBBYnN0cmFjdFN0
YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICAgICAgbV9pc1ZhbGlkID0gZmFsc2U7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6R2VuZXJpYzoKLSAgICAg
ICAgICAgIGNsb2JiZXJXb3JsZChub2RlLmNvZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7Ci0gICAg
ICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkubWFrZVRvcCgpOworICAgICAgICAgICAgY2xvYmJl
cldvcmxkKG5vZGUtPmNvZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7CisgICAgICAgICAgICBmb3JO
b2RlKG5vZGUpLm1ha2VUb3AoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEFy
cmF5OjpTdHJpbmc6Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQyKCkpLmZpbHRlcihT
cGVjSW50MzIpOwotICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChTcGVjU3RyaW5n
KTsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQyKCkpLmZpbHRlcihTcGVjSW50MzIp
OworICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY1N0cmluZyk7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6QXJndW1lbnRzOgotICAgICAgICAgICAgZm9y
Tm9kZShub2RlLmNoaWxkMigpKS5maWx0ZXIoU3BlY0ludDMyKTsKLSAgICAgICAgICAgIGZvck5v
ZGUobm9kZUluZGV4KS5tYWtlVG9wKCk7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxk
MigpKS5maWx0ZXIoU3BlY0ludDMyKTsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZSkubWFrZVRv
cCgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OkludDMyOgotICAg
ICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMigpKS5maWx0ZXIoU3BlY0ludDMyKTsKLSAgICAg
ICAgICAgIGlmIChub2RlLmFycmF5TW9kZSgpLmlzT3V0T2ZCb3VuZHMoKSkgewotICAgICAgICAg
ICAgICAgIGNsb2JiZXJXb3JsZChub2RlLmNvZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7Ci0gICAg
ICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLm1ha2VUb3AoKTsKKyAgICAgICAgICAgIGZv
ck5vZGUobm9kZS0+Y2hpbGQyKCkpLmZpbHRlcihTcGVjSW50MzIpOworICAgICAgICAgICAgaWYg
KG5vZGUtPmFycmF5TW9kZSgpLmlzT3V0T2ZCb3VuZHMoKSkgeworICAgICAgICAgICAgICAgIGNs
b2JiZXJXb3JsZChub2RlLT5jb2RlT3JpZ2luLCBpbmRleEluQmxvY2spOworICAgICAgICAgICAg
ICAgIGZvck5vZGUobm9kZSkubWFrZVRvcCgpOwogICAgICAgICAgICAgfSBlbHNlCi0gICAgICAg
ICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChTcGVjSW50MzIpOworICAgICAgICAgICAg
ICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNJbnQzMik7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgY2FzZSBBcnJheTo6RG91YmxlOgotICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxk
MigpKS5maWx0ZXIoU3BlY0ludDMyKTsKLSAgICAgICAgICAgIGlmIChub2RlLmFycmF5TW9kZSgp
LmlzT3V0T2ZCb3VuZHMoKSkgewotICAgICAgICAgICAgICAgIGNsb2JiZXJXb3JsZChub2RlLmNv
ZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7Ci0gICAgICAgICAgICAgICAgZm9yTm9kZShub2RlSW5k
ZXgpLm1ha2VUb3AoKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAobm9kZS5hcnJheU1vZGUoKS5p
c1NhbmVDaGFpbigpKQotICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoU3Bl
Y0RvdWJsZSk7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMigpKS5maWx0ZXIoU3Bl
Y0ludDMyKTsKKyAgICAgICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS5pc091dE9mQm91bmRz
KCkpIHsKKyAgICAgICAgICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+Y29kZU9yaWdpbiwgaW5k
ZXhJbkJsb2NrKTsKKyAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLm1ha2VUb3AoKTsKKyAg
ICAgICAgICAgIH0gZWxzZSBpZiAobm9kZS0+YXJyYXlNb2RlKCkuaXNTYW5lQ2hhaW4oKSkKKyAg
ICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjRG91YmxlKTsKICAgICAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFNwZWNEb3VibGVS
ZWFsKTsKKyAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjRG91YmxlUmVhbCk7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6Q29udGlndW91czoKICAg
ICAgICAgY2FzZSBBcnJheTo6QXJyYXlTdG9yYWdlOgogICAgICAgICBjYXNlIEFycmF5OjpTbG93
UHV0QXJyYXlTdG9yYWdlOgotICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMigpKS5maWx0
ZXIoU3BlY0ludDMyKTsKLSAgICAgICAgICAgIGlmIChub2RlLmFycmF5TW9kZSgpLmlzT3V0T2ZC
b3VuZHMoKSkKLSAgICAgICAgICAgICAgICBjbG9iYmVyV29ybGQobm9kZS5jb2RlT3JpZ2luLCBp
bmRleEluQmxvY2spOwotICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLm1ha2VUb3AoKTsK
KyAgICAgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQyKCkpLmZpbHRlcihTcGVjSW50MzIpOwor
ICAgICAgICAgICAgaWYgKG5vZGUtPmFycmF5TW9kZSgpLmlzT3V0T2ZCb3VuZHMoKSkKKyAgICAg
ICAgICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+Y29kZU9yaWdpbiwgaW5kZXhJbkJsb2NrKTsK
KyAgICAgICAgICAgIGZvck5vZGUobm9kZSkubWFrZVRvcCgpOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIGNhc2UgQXJyYXk6OkludDhBcnJheToKLSAgICAgICAgICAgIGZvck5vZGUobm9k
ZS5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGVJ
bmRleCkuc2V0KFNwZWNJbnQzMik7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMigp
KS5maWx0ZXIoU3BlY0ludDMyKTsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNJ
bnQzMik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6SW50MTZBcnJh
eToKLSAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7
Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFNwZWNJbnQzMik7CisgICAgICAg
ICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMigpKS5maWx0ZXIoU3BlY0ludDMyKTsKKyAgICAgICAg
ICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNJbnQzMik7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgY2FzZSBBcnJheTo6SW50MzJBcnJheToKLSAgICAgICAgICAgIGZvck5vZGUobm9kZS5j
aGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRl
eCkuc2V0KFNwZWNJbnQzMik7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMigpKS5m
aWx0ZXIoU3BlY0ludDMyKTsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNJbnQz
Mik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6VWludDhBcnJheToK
LSAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7Ci0g
ICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFNwZWNJbnQzMik7CisgICAgICAgICAg
ICBmb3JOb2RlKG5vZGUtPmNoaWxkMigpKS5maWx0ZXIoU3BlY0ludDMyKTsKKyAgICAgICAgICAg
IGZvck5vZGUobm9kZSkuc2V0KFNwZWNJbnQzMik7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgY2FzZSBBcnJheTo6VWludDhDbGFtcGVkQXJyYXk6Ci0gICAgICAgICAgICBmb3JOb2RlKG5v
ZGUuY2hpbGQyKCkpLmZpbHRlcihTcGVjSW50MzIpOwotICAgICAgICAgICAgZm9yTm9kZShub2Rl
SW5kZXgpLnNldChTcGVjSW50MzIpOworICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDIo
KSkuZmlsdGVyKFNwZWNJbnQzMik7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVj
SW50MzIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OlVpbnQxNkFy
cmF5OgotICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMigpKS5maWx0ZXIoU3BlY0ludDMy
KTsKLSAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoU3BlY0ludDMyKTsKKyAgICAg
ICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQyKCkpLmZpbHRlcihTcGVjSW50MzIpOworICAgICAg
ICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICBjYXNlIEFycmF5OjpVaW50MzJBcnJheToKLSAgICAgICAgICAgIGZvck5vZGUobm9k
ZS5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7Ci0gICAgICAgICAgICBpZiAobm9kZS5zaG91
bGRTcGVjdWxhdGVJbnRlZ2VyKCkpCi0gICAgICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgp
LnNldChTcGVjSW50MzIpOworICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDIoKSkuZmls
dGVyKFNwZWNJbnQzMik7CisgICAgICAgICAgICBpZiAobm9kZS0+c2hvdWxkU3BlY3VsYXRlSW50
ZWdlcigpKQorICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNJbnQzMik7CiAg
ICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChT
cGVjRG91YmxlKTsKKyAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjRG91Ymxl
KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEFycmF5OjpGbG9hdDMyQXJyYXk6
Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQyKCkpLmZpbHRlcihTcGVjSW50MzIpOwot
ICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChTcGVjRG91YmxlKTsKKyAgICAgICAg
ICAgIGZvck5vZGUobm9kZS0+Y2hpbGQyKCkpLmZpbHRlcihTcGVjSW50MzIpOworICAgICAgICAg
ICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0RvdWJsZSk7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgY2FzZSBBcnJheTo6RmxvYXQ2NEFycmF5OgotICAgICAgICAgICAgZm9yTm9kZShub2Rl
LmNoaWxkMigpKS5maWx0ZXIoU3BlY0ludDMyKTsKLSAgICAgICAgICAgIGZvck5vZGUobm9kZUlu
ZGV4KS5zZXQoU3BlY0RvdWJsZSk7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMigp
KS5maWx0ZXIoU3BlY0ludDMyKTsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNE
b3VibGUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtMTA0Nyw0MyArMTA0NCw0MyBAQCBi
b29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgICAgICAKICAg
ICBjYXNlIFB1dEJ5VmFsOgogICAgIGNhc2UgUHV0QnlWYWxBbGlhczogewotICAgICAgICBub2Rl
LnNldENhbkV4aXQodHJ1ZSk7CisgICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7CiAgICAg
ICAgIEVkZ2UgY2hpbGQxID0gbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKTsKICAgICAgICAg
RWRnZSBjaGlsZDIgPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpOwogICAgICAgICBFZGdl
IGNoaWxkMyA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMik7Ci0gICAgICAgIHN3aXRjaCAo
bm9kZS5hcnJheU1vZGUoKS5tb2RlRm9yUHV0KCkudHlwZSgpKSB7CisgICAgICAgIHN3aXRjaCAo
bm9kZS0+YXJyYXlNb2RlKCkubW9kZUZvclB1dCgpLnR5cGUoKSkgewogICAgICAgICBjYXNlIEFy
cmF5OjpGb3JjZUV4aXQ6CiAgICAgICAgICAgICBtX2lzVmFsaWQgPSBmYWxzZTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICBjYXNlIEFycmF5OjpHZW5lcmljOgotICAgICAgICAgICAgY2xv
YmJlcldvcmxkKG5vZGUuY29kZU9yaWdpbiwgaW5kZXhJbkJsb2NrKTsKKyAgICAgICAgICAgIGNs
b2JiZXJXb3JsZChub2RlLT5jb2RlT3JpZ2luLCBpbmRleEluQmxvY2spOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OkludDMyOgogICAgICAgICAgICAgZm9yTm9kZShj
aGlsZDEpLmZpbHRlcihTcGVjQ2VsbCk7CiAgICAgICAgICAgICBmb3JOb2RlKGNoaWxkMikuZmls
dGVyKFNwZWNJbnQzMik7CiAgICAgICAgICAgICBmb3JOb2RlKGNoaWxkMykuZmlsdGVyKFNwZWNJ
bnQzMik7Ci0gICAgICAgICAgICBpZiAobm9kZS5hcnJheU1vZGUoKS5pc091dE9mQm91bmRzKCkp
Ci0gICAgICAgICAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUuY29kZU9yaWdpbiwgaW5kZXhJbkJs
b2NrKTsKKyAgICAgICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS5pc091dE9mQm91bmRzKCkp
CisgICAgICAgICAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUtPmNvZGVPcmlnaW4sIGluZGV4SW5C
bG9jayk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6RG91YmxlOgog
ICAgICAgICAgICAgZm9yTm9kZShjaGlsZDEpLmZpbHRlcihTcGVjQ2VsbCk7CiAgICAgICAgICAg
ICBmb3JOb2RlKGNoaWxkMikuZmlsdGVyKFNwZWNJbnQzMik7CiAgICAgICAgICAgICBmb3JOb2Rl
KGNoaWxkMykuZmlsdGVyKFNwZWNSZWFsTnVtYmVyKTsKLSAgICAgICAgICAgIGlmIChub2RlLmFy
cmF5TW9kZSgpLmlzT3V0T2ZCb3VuZHMoKSkKLSAgICAgICAgICAgICAgICBjbG9iYmVyV29ybGQo
bm9kZS5jb2RlT3JpZ2luLCBpbmRleEluQmxvY2spOworICAgICAgICAgICAgaWYgKG5vZGUtPmFy
cmF5TW9kZSgpLmlzT3V0T2ZCb3VuZHMoKSkKKyAgICAgICAgICAgICAgICBjbG9iYmVyV29ybGQo
bm9kZS0+Y29kZU9yaWdpbiwgaW5kZXhJbkJsb2NrKTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICBjYXNlIEFycmF5OjpDb250aWd1b3VzOgogICAgICAgICBjYXNlIEFycmF5OjpBcnJheVN0
b3JhZ2U6CiAgICAgICAgICAgICBmb3JOb2RlKGNoaWxkMSkuZmlsdGVyKFNwZWNDZWxsKTsKICAg
ICAgICAgICAgIGZvck5vZGUoY2hpbGQyKS5maWx0ZXIoU3BlY0ludDMyKTsKLSAgICAgICAgICAg
IGlmIChub2RlLmFycmF5TW9kZSgpLmlzT3V0T2ZCb3VuZHMoKSkKLSAgICAgICAgICAgICAgICBj
bG9iYmVyV29ybGQobm9kZS5jb2RlT3JpZ2luLCBpbmRleEluQmxvY2spOworICAgICAgICAgICAg
aWYgKG5vZGUtPmFycmF5TW9kZSgpLmlzT3V0T2ZCb3VuZHMoKSkKKyAgICAgICAgICAgICAgICBj
bG9iYmVyV29ybGQobm9kZS0+Y29kZU9yaWdpbiwgaW5kZXhJbkJsb2NrKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICBjYXNlIEFycmF5OjpTbG93UHV0QXJyYXlTdG9yYWdlOgogICAgICAg
ICAgICAgZm9yTm9kZShjaGlsZDEpLmZpbHRlcihTcGVjQ2VsbCk7CiAgICAgICAgICAgICBmb3JO
b2RlKGNoaWxkMikuZmlsdGVyKFNwZWNJbnQzMik7Ci0gICAgICAgICAgICBpZiAobm9kZS5hcnJh
eU1vZGUoKS5tYXlTdG9yZVRvSG9sZSgpKQotICAgICAgICAgICAgICAgIGNsb2JiZXJXb3JsZChu
b2RlLmNvZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7CisgICAgICAgICAgICBpZiAobm9kZS0+YXJy
YXlNb2RlKCkubWF5U3RvcmVUb0hvbGUoKSkKKyAgICAgICAgICAgICAgICBjbG9iYmVyV29ybGQo
bm9kZS0+Y29kZU9yaWdpbiwgaW5kZXhJbkJsb2NrKTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICBjYXNlIEFycmF5OjpBcmd1bWVudHM6CiAgICAgICAgICAgICBmb3JOb2RlKGNoaWxkMSku
ZmlsdGVyKFNwZWNDZWxsKTsKQEAgLTEwOTIsNyArMTA4OSw3IEBAIGJvb2wgQWJzdHJhY3RTdGF0
ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgY2FzZSBBcnJheTo6SW50OEFycmF5Ogog
ICAgICAgICAgICAgZm9yTm9kZShjaGlsZDEpLmZpbHRlcihTcGVjQ2VsbCk7CiAgICAgICAgICAg
ICBmb3JOb2RlKGNoaWxkMikuZmlsdGVyKFNwZWNJbnQzMik7Ci0gICAgICAgICAgICBpZiAobV9n
cmFwaFtjaGlsZDNdLnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKSkKKyAgICAgICAgICAgIGlmIChj
aGlsZDMtPnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKSkKICAgICAgICAgICAgICAgICBmb3JOb2Rl
KGNoaWxkMykuZmlsdGVyKFNwZWNJbnQzMik7CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAg
ICAgICAgZm9yTm9kZShjaGlsZDMpLmZpbHRlcihTcGVjTnVtYmVyKTsKQEAgLTExMDAsNyArMTA5
Nyw3IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAg
Y2FzZSBBcnJheTo6SW50MTZBcnJheToKICAgICAgICAgICAgIGZvck5vZGUoY2hpbGQxKS5maWx0
ZXIoU3BlY0NlbGwpOwogICAgICAgICAgICAgZm9yTm9kZShjaGlsZDIpLmZpbHRlcihTcGVjSW50
MzIpOwotICAgICAgICAgICAgaWYgKG1fZ3JhcGhbY2hpbGQzXS5zaG91bGRTcGVjdWxhdGVJbnRl
Z2VyKCkpCisgICAgICAgICAgICBpZiAoY2hpbGQzLT5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkp
CiAgICAgICAgICAgICAgICAgZm9yTm9kZShjaGlsZDMpLmZpbHRlcihTcGVjSW50MzIpOwogICAg
ICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIGZvck5vZGUoY2hpbGQzKS5maWx0ZXIoU3Bl
Y051bWJlcik7CkBAIC0xMTA4LDcgKzExMDUsNyBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1
dGUodW5zaWduZWQgaW5kCiAgICAgICAgIGNhc2UgQXJyYXk6OkludDMyQXJyYXk6CiAgICAgICAg
ICAgICBmb3JOb2RlKGNoaWxkMSkuZmlsdGVyKFNwZWNDZWxsKTsKICAgICAgICAgICAgIGZvck5v
ZGUoY2hpbGQyKS5maWx0ZXIoU3BlY0ludDMyKTsKLSAgICAgICAgICAgIGlmIChtX2dyYXBoW2No
aWxkM10uc2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKQorICAgICAgICAgICAgaWYgKGNoaWxkMy0+
c2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKQogICAgICAgICAgICAgICAgIGZvck5vZGUoY2hpbGQz
KS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBm
b3JOb2RlKGNoaWxkMykuZmlsdGVyKFNwZWNOdW1iZXIpOwpAQCAtMTExNiw3ICsxMTEzLDcgQEAg
Ym9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICBjYXNlIEFy
cmF5OjpVaW50OEFycmF5OgogICAgICAgICAgICAgZm9yTm9kZShjaGlsZDEpLmZpbHRlcihTcGVj
Q2VsbCk7CiAgICAgICAgICAgICBmb3JOb2RlKGNoaWxkMikuZmlsdGVyKFNwZWNJbnQzMik7Ci0g
ICAgICAgICAgICBpZiAobV9ncmFwaFtjaGlsZDNdLnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKSkK
KyAgICAgICAgICAgIGlmIChjaGlsZDMtPnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKSkKICAgICAg
ICAgICAgICAgICBmb3JOb2RlKGNoaWxkMykuZmlsdGVyKFNwZWNJbnQzMik7CiAgICAgICAgICAg
ICBlbHNlCiAgICAgICAgICAgICAgICAgZm9yTm9kZShjaGlsZDMpLmZpbHRlcihTcGVjTnVtYmVy
KTsKQEAgLTExMjQsNyArMTEyMSw3IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNp
Z25lZCBpbmQKICAgICAgICAgY2FzZSBBcnJheTo6VWludDhDbGFtcGVkQXJyYXk6CiAgICAgICAg
ICAgICBmb3JOb2RlKGNoaWxkMSkuZmlsdGVyKFNwZWNDZWxsKTsKICAgICAgICAgICAgIGZvck5v
ZGUoY2hpbGQyKS5maWx0ZXIoU3BlY0ludDMyKTsKLSAgICAgICAgICAgIGlmIChtX2dyYXBoW2No
aWxkM10uc2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKQorICAgICAgICAgICAgaWYgKGNoaWxkMy0+
c2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKQogICAgICAgICAgICAgICAgIGZvck5vZGUoY2hpbGQz
KS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBm
b3JOb2RlKGNoaWxkMykuZmlsdGVyKFNwZWNOdW1iZXIpOwpAQCAtMTEzMiw3ICsxMTI5LDcgQEAg
Ym9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICBjYXNlIEFy
cmF5OjpVaW50MTZBcnJheToKICAgICAgICAgICAgIGZvck5vZGUoY2hpbGQxKS5maWx0ZXIoU3Bl
Y0NlbGwpOwogICAgICAgICAgICAgZm9yTm9kZShjaGlsZDIpLmZpbHRlcihTcGVjSW50MzIpOwot
ICAgICAgICAgICAgaWYgKG1fZ3JhcGhbY2hpbGQzXS5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkp
CisgICAgICAgICAgICBpZiAoY2hpbGQzLT5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpCiAgICAg
ICAgICAgICAgICAgZm9yTm9kZShjaGlsZDMpLmZpbHRlcihTcGVjSW50MzIpOwogICAgICAgICAg
ICAgZWxzZQogICAgICAgICAgICAgICAgIGZvck5vZGUoY2hpbGQzKS5maWx0ZXIoU3BlY051bWJl
cik7CkBAIC0xMTQwLDcgKzExMzcsNyBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5z
aWduZWQgaW5kCiAgICAgICAgIGNhc2UgQXJyYXk6OlVpbnQzMkFycmF5OgogICAgICAgICAgICAg
Zm9yTm9kZShjaGlsZDEpLmZpbHRlcihTcGVjQ2VsbCk7CiAgICAgICAgICAgICBmb3JOb2RlKGNo
aWxkMikuZmlsdGVyKFNwZWNJbnQzMik7Ci0gICAgICAgICAgICBpZiAobV9ncmFwaFtjaGlsZDNd
LnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKSkKKyAgICAgICAgICAgIGlmIChjaGlsZDMtPnNob3Vs
ZFNwZWN1bGF0ZUludGVnZXIoKSkKICAgICAgICAgICAgICAgICBmb3JOb2RlKGNoaWxkMykuZmls
dGVyKFNwZWNJbnQzMik7CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgZm9yTm9k
ZShjaGlsZDMpLmZpbHRlcihTcGVjTnVtYmVyKTsKQEAgLTExNjMsMTY2ICsxMTYwLDE4OCBAQCBi
b29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgfQogICAgICAgICAg
ICAgCiAgICAgY2FzZSBBcnJheVB1c2g6Ci0gICAgICAgIG5vZGUuc2V0Q2FuRXhpdCh0cnVlKTsK
LSAgICAgICAgc3dpdGNoIChub2RlLmFycmF5TW9kZSgpLnR5cGUoKSkgeworICAgICAgICBub2Rl
LT5zZXRDYW5FeGl0KHRydWUpOworICAgICAgICBzd2l0Y2ggKG5vZGUtPmFycmF5TW9kZSgpLnR5
cGUoKSkgewogICAgICAgICBjYXNlIEFycmF5OjpJbnQzMjoKLSAgICAgICAgICAgIGZvck5vZGUo
bm9kZS5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7CisgICAgICAgICAgICBmb3JOb2RlKG5v
ZGUtPmNoaWxkMigpKS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICBjYXNlIEFycmF5OjpEb3VibGU6Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQy
KCkpLmZpbHRlcihTcGVjUmVhbE51bWJlcik7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNo
aWxkMigpKS5maWx0ZXIoU3BlY1JlYWxOdW1iZXIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICBjbG9i
YmVyV29ybGQobm9kZS5jb2RlT3JpZ2luLCBpbmRleEluQmxvY2spOwotICAgICAgICBmb3JOb2Rl
KG5vZGVJbmRleCkuc2V0KFNwZWNOdW1iZXIpOworICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+
Y29kZU9yaWdpbiwgaW5kZXhJbkJsb2NrKTsKKyAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3Bl
Y051bWJlcik7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAgY2FzZSBBcnJheVBv
cDoKLSAgICAgICAgbm9kZS5zZXRDYW5FeGl0KHRydWUpOwotICAgICAgICBjbG9iYmVyV29ybGQo
bm9kZS5jb2RlT3JpZ2luLCBpbmRleEluQmxvY2spOwotICAgICAgICBmb3JOb2RlKG5vZGVJbmRl
eCkubWFrZVRvcCgpOworICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOworICAgICAgICBj
bG9iYmVyV29ybGQobm9kZS0+Y29kZU9yaWdpbiwgaW5kZXhJbkJsb2NrKTsKKyAgICAgICAgZm9y
Tm9kZShub2RlKS5tYWtlVG9wKCk7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAg
Y2FzZSBSZWdFeHBFeGVjOgogICAgIGNhc2UgUmVnRXhwVGVzdDoKLSAgICAgICAgbm9kZS5zZXRD
YW5FeGl0KAotICAgICAgICAgICAgIWlzQ2VsbFNwZWN1bGF0aW9uKGZvck5vZGUobm9kZS5jaGls
ZDEoKSkubV90eXBlKQotICAgICAgICAgICAgfHwgIWlzQ2VsbFNwZWN1bGF0aW9uKGZvck5vZGUo
bm9kZS5jaGlsZDIoKSkubV90eXBlKSk7Ci0gICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSku
ZmlsdGVyKFNwZWNDZWxsKTsKLSAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMigpKS5maWx0ZXIo
U3BlY0NlbGwpOwotICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkubWFrZVRvcCgpOworICAgICAg
ICBub2RlLT5zZXRDYW5FeGl0KAorICAgICAgICAgICAgIWlzQ2VsbFNwZWN1bGF0aW9uKGZvck5v
ZGUobm9kZS0+Y2hpbGQxKCkpLm1fdHlwZSkKKyAgICAgICAgICAgIHx8ICFpc0NlbGxTcGVjdWxh
dGlvbihmb3JOb2RlKG5vZGUtPmNoaWxkMigpKS5tX3R5cGUpKTsKKyAgICAgICAgZm9yTm9kZShu
b2RlLT5jaGlsZDEoKSkuZmlsdGVyKFNwZWNDZWxsKTsKKyAgICAgICAgZm9yTm9kZShub2RlLT5j
aGlsZDIoKSkuZmlsdGVyKFNwZWNDZWxsKTsKKyAgICAgICAgZm9yTm9kZShub2RlKS5tYWtlVG9w
KCk7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAgY2FzZSBKdW1wOgotICAgICAg
ICBub2RlLnNldENhbkV4aXQoZmFsc2UpOworICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNl
KTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICBjYXNlIEJyYW5jaDogewotICAg
ICAgICBCb29sZWFuUmVzdWx0IHJlc3VsdCA9IGJvb2xlYW5SZXN1bHQobm9kZSwgZm9yTm9kZShu
b2RlLmNoaWxkMSgpKSk7CisgICAgICAgIE5vZGUqIGNoaWxkID0gbm9kZS0+Y2hpbGQxKCkubm9k
ZSgpOworICAgICAgICBCb29sZWFuUmVzdWx0IHJlc3VsdCA9IGJvb2xlYW5SZXN1bHQobm9kZSwg
Zm9yTm9kZShjaGlsZCkpOwogICAgICAgICBpZiAocmVzdWx0ID09IERlZmluaXRlbHlUcnVlKSB7
CiAgICAgICAgICAgICBtX2JyYW5jaERpcmVjdGlvbiA9IFRha2VUcnVlOwotICAgICAgICAgICAg
bm9kZS5zZXRDYW5FeGl0KGZhbHNlKTsKKyAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFs
c2UpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgaWYgKHJlc3VsdCA9
PSBEZWZpbml0ZWx5RmFsc2UpIHsKICAgICAgICAgICAgIG1fYnJhbmNoRGlyZWN0aW9uID0gVGFr
ZUZhbHNlOwotICAgICAgICAgICAgbm9kZS5zZXRDYW5FeGl0KGZhbHNlKTsKKyAgICAgICAgICAg
IG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0K
ICAgICAgICAgLy8gRklYTUU6IFRoZSBhYm92ZSBoYW5kbGVzIHRoZSB0cml2aWFsIGNhc2VzIG9m
IHNwYXJzZSBjb25kaXRpb25hbAogICAgICAgICAvLyBjb25zdGFudCBwcm9wYWdhdGlvbiwgYnV0
IHdlIGNhbiBkbyBiZXR0ZXI6CiAgICAgICAgIC8vIFdlIGNhbiBzcGVjaWFsaXplIHRoZSBzb3Vy
Y2UgdmFyaWFibGUncyB2YWx1ZSBvbiBlYWNoIGRpcmVjdGlvbiBvZgogICAgICAgICAvLyB0aGUg
YnJhbmNoLgotICAgICAgICBOb2RlJiBjaGlsZCA9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV07Ci0g
ICAgICAgIGlmIChjaGlsZC5zaG91bGRTcGVjdWxhdGVCb29sZWFuKCkpCisgICAgICAgIGlmIChj
aGlsZC0+c2hvdWxkU3BlY3VsYXRlQm9vbGVhbigpKQogICAgICAgICAgICAgc3BlY3VsYXRlQm9v
bGVhblVuYXJ5KG5vZGUpOwotICAgICAgICBlbHNlIGlmIChjaGlsZC5zaG91bGRTcGVjdWxhdGVO
b25TdHJpbmdDZWxsT3JPdGhlcigpKSB7Ci0gICAgICAgICAgICBub2RlLnNldENhbkV4aXQodHJ1
ZSk7Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcigoU3BlY0NlbGwg
JiB+U3BlY1N0cmluZykgfCBTcGVjT3RoZXIpOwotICAgICAgICB9IGVsc2UgaWYgKGNoaWxkLnNo
b3VsZFNwZWN1bGF0ZUludGVnZXIoKSkKKyAgICAgICAgZWxzZSBpZiAoY2hpbGQtPnNob3VsZFNw
ZWN1bGF0ZU5vblN0cmluZ0NlbGxPck90aGVyKCkpIHsKKyAgICAgICAgICAgIG5vZGUtPnNldENh
bkV4aXQodHJ1ZSk7CisgICAgICAgICAgICBmb3JOb2RlKGNoaWxkKS5maWx0ZXIoKFNwZWNDZWxs
ICYgflNwZWNTdHJpbmcpIHwgU3BlY090aGVyKTsKKyAgICAgICAgfSBlbHNlIGlmIChjaGlsZC0+
c2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKQogICAgICAgICAgICAgc3BlY3VsYXRlSW50MzJVbmFy
eShub2RlKTsKLSAgICAgICAgZWxzZSBpZiAoY2hpbGQuc2hvdWxkU3BlY3VsYXRlTnVtYmVyKCkp
CisgICAgICAgIGVsc2UgaWYgKGNoaWxkLT5zaG91bGRTcGVjdWxhdGVOdW1iZXIoKSkKICAgICAg
ICAgICAgIHNwZWN1bGF0ZU51bWJlclVuYXJ5KG5vZGUpOwogICAgICAgICBlbHNlCi0gICAgICAg
ICAgICBub2RlLnNldENhbkV4aXQoZmFsc2UpOworICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhp
dChmYWxzZSk7CiAgICAgICAgIG1fYnJhbmNoRGlyZWN0aW9uID0gVGFrZUJvdGg7CiAgICAgICAg
IGJyZWFrOwogICAgIH0KICAgICAgICAgICAgIAogICAgIGNhc2UgUmV0dXJuOgogICAgICAgICBt
X2lzVmFsaWQgPSBmYWxzZTsKLSAgICAgICAgbm9kZS5zZXRDYW5FeGl0KGZhbHNlKTsKKyAgICAg
ICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAKICAg
ICBjYXNlIFRocm93OgogICAgIGNhc2UgVGhyb3dSZWZlcmVuY2VFcnJvcjoKICAgICAgICAgbV9p
c1ZhbGlkID0gZmFsc2U7Ci0gICAgICAgIG5vZGUuc2V0Q2FuRXhpdCh0cnVlKTsKKyAgICAgICAg
bm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAg
ICBjYXNlIFRvUHJpbWl0aXZlOiB7Ci0gICAgICAgIEpTVmFsdWUgY2hpbGRDb25zdCA9IGZvck5v
ZGUobm9kZS5jaGlsZDEoKSkudmFsdWUoKTsKLSAgICAgICAgaWYgKGNoaWxkQ29uc3QgJiYgY2hp
bGRDb25zdC5pc051bWJlcigpICYmIHRyeVNldENvbnN0YW50KG5vZGVJbmRleCwgY2hpbGRDb25z
dCkpIHsKKyAgICAgICAgTm9kZSogY2hpbGQgPSBub2RlLT5jaGlsZDEoKS5ub2RlKCk7CisgICAg
ICAgIAorICAgICAgICBKU1ZhbHVlIGNoaWxkQ29uc3QgPSBmb3JOb2RlKGNoaWxkKS52YWx1ZSgp
OworICAgICAgICBpZiAoY2hpbGRDb25zdCAmJiBjaGlsZENvbnN0LmlzTnVtYmVyKCkgJiYgdHJ5
U2V0Q29uc3RhbnQobm9kZSwgY2hpbGRDb25zdCkpIHsKICAgICAgICAgICAgIG1fZm91bmRDb25z
dGFudHMgPSB0cnVlOwotICAgICAgICAgICAgbm9kZS5zZXRDYW5FeGl0KGZhbHNlKTsKKyAgICAg
ICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIH0KICAgICAgICAgCi0gICAgICAgIE5vZGUmIGNoaWxkID0gbV9ncmFwaFtub2RlLmNoaWxk
MSgpXTsKLSAgICAgICAgaWYgKGNoaWxkLnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKSkgeworICAg
ICAgICBpZiAoY2hpbGQtPnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKSkgewogICAgICAgICAgICAg
c3BlY3VsYXRlSW50MzJVbmFyeShub2RlKTsKLSAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4
KS5zZXQoU3BlY0ludDMyKTsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNJbnQz
Mik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCi0gICAgICAgIEFic3RyYWN0VmFs
dWUmIHNvdXJjZSA9IGZvck5vZGUobm9kZS5jaGlsZDEoKSk7Ci0gICAgICAgIEFic3RyYWN0VmFs
dWUmIGRlc3RpbmF0aW9uID0gZm9yTm9kZShub2RlSW5kZXgpOwotICAgICAgICAgICAgCisgICAg
ICAgIEFic3RyYWN0VmFsdWUmIHNvdXJjZSA9IGZvck5vZGUoY2hpbGQpOworICAgICAgICBBYnN0
cmFjdFZhbHVlJiBkZXN0aW5hdGlvbiA9IGZvck5vZGUobm9kZSk7CisgICAgICAgIAorICAgICAg
ICAvLyBOQi4gVGhlIG1vcmUgY2Fub25pY2FsIHdheSBvZiB3cml0aW5nIHRoaXMgd291bGQgaGF2
ZSBiZWVuOgorICAgICAgICAvLworICAgICAgICAvLyBkZXN0aW5hdGlvbiA9IHNvdXJjZTsKKyAg
ICAgICAgLy8gaWYgKGRlc3RpbmF0aW9uLm1fdHlwZSAmICEoU3BlY051bWJlciB8IFNwZWNTdHJp
bmcgfCBTcGVjQm9vbGVhbikpIHsKKyAgICAgICAgLy8gICAgIGRlc3RpbmF0aW9uLmZpbHRlcihT
cGVjTnVtYmVyIHwgU3BlY1N0cmluZyB8IFNwZWNCb29sZWFuKTsKKyAgICAgICAgLy8gICAgIEFi
c3RyYWN0VmFsdWUgc3RyaW5nOworICAgICAgICAvLyAgICAgc3RyaW5nLnNldChnbG9iYWxEYXRh
LT5zdHJpbmdTdHJ1Y3R1cmUpOworICAgICAgICAvLyAgICAgZGVzdGluYXRpb24ubWVyZ2Uoc3Ry
aW5nKTsKKyAgICAgICAgLy8gfQorICAgICAgICAvLworICAgICAgICAvLyBUaGUgcmVhc29uIHdo
eSB0aGlzIHdvdWxkLCBpbiBtb3N0IG90aGVyIGNhc2VzLCBoYXZlIGJlZW4gYmV0dGVyIGlzIHRo
YXQKKyAgICAgICAgLy8gdGhlbiBkZXN0aW5hdGlvbiB3b3VsZCBwcmVzZXJ2ZSBhbnkgbm9uLVNw
ZWN1bGF0ZWRUeXBlIGtub3dsZWRnZSBvZiBzb3VyY2UuCisgICAgICAgIC8vIEFzIGl0IHN0YW5k
cywgdGhlIGNvZGUgYmVsb3cgZm9yZ2V0cyBhbnkgbm9uLVNwZWN1bGF0ZWRUeXBlIGtub3dsZWRn
ZSB0aGF0CisgICAgICAgIC8vIHNvdXJjZSB3b3VsZCBoYXZlIGhhZC4gRm9ydHVuYXRlbHksIHRo
b3VnaCwgZm9yIHRoaW5ncyBsaWtlIHN0cmluZ3MgYW5kCisgICAgICAgIC8vIG51bWJlcnMgYW5k
IGJvb2xlYW5zLCB3ZSBkb24ndCBjYXJlIGFib3V0IHRoZSBub24tU3BlY3VsYXRlZFR5cGUga25v
d2VkZ2U6CisgICAgICAgIC8vIHRoZSBzdHJ1Y3R1cmUgd29uJ3QgdGVsbCB1cyBhbnl0aGluZyB3
ZSBkb24ndCBhbHJlYWR5IGtub3csIGFuZCBuZWl0aGVyCisgICAgICAgIC8vIHdpbGwgQXJyYXlN
b2Rlcy4gQW5kIGlmIHRoZSBzb3VyY2Ugd2FzIGEgbWVhbmluZ2Z1bCBjb25zdGFudCB0aGVuIHdl
CisgICAgICAgIC8vIHdvdWxkIGhhdmUgaGFuZGxlZCB0aGF0IGFib3ZlLiBVbmZvcnR1bmF0ZWx5
LCB0aGlzIGRvZXMgbWVhbiB0aGF0CisgICAgICAgIC8vIFRvUHJpbWl0aXZlIHdpbGwgY3VycmVu
dGx5IGZvcmdldCBzdHJpbmcgY29uc3RhbnRzLiBCdXQgdGhhdCdzIG5vdCBhIGJpZworICAgICAg
ICAvLyBkZWFsIHNpbmNlIHdlIGRvbid0IGRvIGFueSBvcHRpbWl6YXRpb24gb24gdGhvc2UgY3Vy
cmVudGx5LgorICAgICAgICAKICAgICAgICAgU3BlY3VsYXRlZFR5cGUgdHlwZSA9IHNvdXJjZS5t
X3R5cGU7CiAgICAgICAgIGlmICh0eXBlICYgfihTcGVjTnVtYmVyIHwgU3BlY1N0cmluZyB8IFNw
ZWNCb29sZWFuKSkgewogICAgICAgICAgICAgdHlwZSAmPSAoU3BlY051bWJlciB8IFNwZWNTdHJp
bmcgfCBTcGVjQm9vbGVhbik7CiAgICAgICAgICAgICB0eXBlIHw9IFNwZWNTdHJpbmc7CiAgICAg
ICAgIH0KICAgICAgICAgZGVzdGluYXRpb24uc2V0KHR5cGUpOwotICAgICAgICBub2RlLnNldENh
bkV4aXQoZmFsc2UpOworICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAg
YnJlYWs7CiAgICAgfQogICAgICAgICAgICAgCiAgICAgY2FzZSBTdHJDYXQ6Ci0gICAgICAgIG5v
ZGUuc2V0Q2FuRXhpdChmYWxzZSk7Ci0gICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoU3Bl
Y1N0cmluZyk7CisgICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOworICAgICAgICBmb3JO
b2RlKG5vZGUpLnNldChTcGVjU3RyaW5nKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAK
ICAgICBjYXNlIE5ld0FycmF5OgotICAgICAgICBub2RlLnNldENhbkV4aXQodHJ1ZSk7Ci0gICAg
ICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQobV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS5j
b2RlT3JpZ2luKS0+YXJyYXlTdHJ1Y3R1cmVGb3JJbmRleGluZ1R5cGVEdXJpbmdBbGxvY2F0aW9u
KG5vZGUuaW5kZXhpbmdUeXBlKCkpKTsKKyAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsK
KyAgICAgICAgZm9yTm9kZShub2RlKS5zZXQobV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+
Y29kZU9yaWdpbiktPmFycmF5U3RydWN0dXJlRm9ySW5kZXhpbmdUeXBlRHVyaW5nQWxsb2NhdGlv
bihub2RlLT5pbmRleGluZ1R5cGUoKSkpOwogICAgICAgICBtX2hhdmVTdHJ1Y3R1cmVzID0gdHJ1
ZTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgIAogICAgIGNhc2UgTmV3QXJyYXlCdWZmZXI6Ci0g
ICAgICAgIG5vZGUuc2V0Q2FuRXhpdCh0cnVlKTsKLSAgICAgICAgZm9yTm9kZShub2RlSW5kZXgp
LnNldChtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLmNvZGVPcmlnaW4pLT5hcnJheVN0cnVj
dHVyZUZvckluZGV4aW5nVHlwZUR1cmluZ0FsbG9jYXRpb24obm9kZS5pbmRleGluZ1R5cGUoKSkp
OworICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOworICAgICAgICBmb3JOb2RlKG5vZGUp
LnNldChtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5jb2RlT3JpZ2luKS0+YXJyYXlTdHJ1
Y3R1cmVGb3JJbmRleGluZ1R5cGVEdXJpbmdBbGxvY2F0aW9uKG5vZGUtPmluZGV4aW5nVHlwZSgp
KSk7CiAgICAgICAgIG1faGF2ZVN0cnVjdHVyZXMgPSB0cnVlOwogICAgICAgICBicmVhazsKIAog
ICAgIGNhc2UgTmV3QXJyYXlXaXRoU2l6ZToKLSAgICAgICAgbm9kZS5zZXRDYW5FeGl0KHRydWUp
OwotICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjSW50MzIpOwotICAg
ICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFNwZWNBcnJheSk7CisgICAgICAgIG5vZGUtPnNl
dENhbkV4aXQodHJ1ZSk7CisgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRlcihT
cGVjSW50MzIpOworICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjQXJyYXkpOwogICAgICAg
ICBtX2hhdmVTdHJ1Y3R1cmVzID0gdHJ1ZTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAK
ICAgICBjYXNlIE5ld1JlZ2V4cDoKLSAgICAgICAgbm9kZS5zZXRDYW5FeGl0KGZhbHNlKTsKLSAg
ICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2Rl
LmNvZGVPcmlnaW4pLT5yZWdFeHBTdHJ1Y3R1cmUoKSk7CisgICAgICAgIG5vZGUtPnNldENhbkV4
aXQoZmFsc2UpOworICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChtX2dyYXBoLmdsb2JhbE9iamVj
dEZvcihub2RlLT5jb2RlT3JpZ2luKS0+cmVnRXhwU3RydWN0dXJlKCkpOwogICAgICAgICBtX2hh
dmVTdHJ1Y3R1cmVzID0gdHJ1ZTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICBj
YXNlIENvbnZlcnRUaGlzOiB7Ci0gICAgICAgIE5vZGUmIGNoaWxkID0gbV9ncmFwaFtub2RlLmNo
aWxkMSgpXTsKLSAgICAgICAgQWJzdHJhY3RWYWx1ZSYgc291cmNlID0gZm9yTm9kZShub2RlLmNo
aWxkMSgpKTsKLSAgICAgICAgQWJzdHJhY3RWYWx1ZSYgZGVzdGluYXRpb24gPSBmb3JOb2RlKG5v
ZGVJbmRleCk7CisgICAgICAgIE5vZGUqIGNoaWxkID0gbm9kZS0+Y2hpbGQxKCkubm9kZSgpOwor
ICAgICAgICBBYnN0cmFjdFZhbHVlJiBzb3VyY2UgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKTsK
KyAgICAgICAgQWJzdHJhY3RWYWx1ZSYgZGVzdGluYXRpb24gPSBmb3JOb2RlKG5vZGUpOwogICAg
ICAgICAgICAgCiAgICAgICAgIGlmIChpc09iamVjdFNwZWN1bGF0aW9uKHNvdXJjZS5tX3R5cGUp
KSB7CiAgICAgICAgICAgICAvLyBUaGlzIGlzIHRoZSBzaW1wbGUgY2FzZS4gV2UgYWxyZWFkeSBr
bm93IHRoYXQgdGhlIHNvdXJjZSBpcyBhbgogICAgICAgICAgICAgLy8gb2JqZWN0LCBzbyB0aGVy
ZSdzIG5vdGhpbmcgdG8gZG8uIEkgZG9uJ3QgdGhpbmsgdGhpcyBjYXNlIHdpbGwKICAgICAgICAg
ICAgIC8vIGJlIGhpdCwgYnV0IHRoZW4gYWdhaW4sIHlvdSBuZXZlciBrbm93LgogICAgICAgICAg
ICAgZGVzdGluYXRpb24gPSBzb3VyY2U7Ci0gICAgICAgICAgICBub2RlLnNldENhbkV4aXQoZmFs
c2UpOworICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgICAgICBt
X2ZvdW5kQ29uc3RhbnRzID0gdHJ1ZTsgLy8gVGVsbCB0aGUgY29uc3RhbnQgZm9sZGVyIHRvIHR1
cm4gdGhpcyBpbnRvIElkZW50aXR5LgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAg
ICAgICAgCi0gICAgICAgIG5vZGUuc2V0Q2FuRXhpdCh0cnVlKTsKKyAgICAgICAgbm9kZS0+c2V0
Q2FuRXhpdCh0cnVlKTsKICAgICAgICAgCi0gICAgICAgIGlmIChpc090aGVyU3BlY3VsYXRpb24o
Y2hpbGQucHJlZGljdGlvbigpKSkgeworICAgICAgICBpZiAoaXNPdGhlclNwZWN1bGF0aW9uKGNo
aWxkLT5wcmVkaWN0aW9uKCkpKSB7CiAgICAgICAgICAgICBzb3VyY2UuZmlsdGVyKFNwZWNPdGhl
cik7CiAgICAgICAgICAgICBkZXN0aW5hdGlvbi5zZXQoU3BlY09iamVjdE90aGVyKTsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBpZiAoaXNPYmplY3RT
cGVjdWxhdGlvbihjaGlsZC5wcmVkaWN0aW9uKCkpKSB7CisgICAgICAgIGlmIChpc09iamVjdFNw
ZWN1bGF0aW9uKGNoaWxkLT5wcmVkaWN0aW9uKCkpKSB7CiAgICAgICAgICAgICBzb3VyY2UuZmls
dGVyKFNwZWNPYmplY3RNYXNrKTsKICAgICAgICAgICAgIGRlc3RpbmF0aW9uID0gc291cmNlOwog
ICAgICAgICAgICAgYnJlYWs7CkBAIC0xMzM0LDEwICsxMzUzLDEwIEBAIGJvb2wgQWJzdHJhY3RT
dGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICB9CiAKICAgICBjYXNlIENyZWF0ZVRoaXM6
IHsKLSAgICAgICAgQWJzdHJhY3RWYWx1ZSYgc291cmNlID0gZm9yTm9kZShub2RlLmNoaWxkMSgp
KTsKLSAgICAgICAgQWJzdHJhY3RWYWx1ZSYgZGVzdGluYXRpb24gPSBmb3JOb2RlKG5vZGVJbmRl
eCk7CisgICAgICAgIEFic3RyYWN0VmFsdWUmIHNvdXJjZSA9IGZvck5vZGUobm9kZS0+Y2hpbGQx
KCkpOworICAgICAgICBBYnN0cmFjdFZhbHVlJiBkZXN0aW5hdGlvbiA9IGZvck5vZGUobm9kZSk7
CiAgICAgICAgIAotICAgICAgICBub2RlLnNldENhbkV4aXQoIWlzQ2VsbFNwZWN1bGF0aW9uKHNv
dXJjZS5tX3R5cGUpKTsKKyAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCghaXNDZWxsU3BlY3VsYXRp
b24oc291cmNlLm1fdHlwZSkpOwogICAgICAgICAgICAgCiAgICAgICAgIHNvdXJjZS5maWx0ZXIo
U3BlY0Z1bmN0aW9uKTsKICAgICAgICAgZGVzdGluYXRpb24uc2V0KFNwZWNGaW5hbE9iamVjdCk7
CkBAIC0xMzQ1LDQxICsxMzY0LDQxIEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNp
Z25lZCBpbmQKICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgSW5oZXJpdG9ySURXYXRjaHBvaW50
OgotICAgICAgICBub2RlLnNldENhbkV4aXQodHJ1ZSk7CisgICAgICAgIG5vZGUtPnNldENhbkV4
aXQodHJ1ZSk7CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBOZXdPYmplY3Q6Ci0gICAgICAg
IG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7Ci0gICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQo
bm9kZS5zdHJ1Y3R1cmUoKSk7CisgICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOworICAg
ICAgICBmb3JOb2RlKG5vZGUpLnNldChub2RlLT5zdHJ1Y3R1cmUoKSk7CiAgICAgICAgIG1faGF2
ZVN0cnVjdHVyZXMgPSB0cnVlOwogICAgICAgICBicmVhazsKICAgICAgICAgCiAgICAgY2FzZSBD
cmVhdGVBY3RpdmF0aW9uOgotICAgICAgICBub2RlLnNldENhbkV4aXQoZmFsc2UpOwotICAgICAg
ICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3RGb3Iobm9k
ZS5jb2RlT3JpZ2luKS0+YWN0aXZhdGlvblN0cnVjdHVyZSgpKTsKKyAgICAgICAgbm9kZS0+c2V0
Q2FuRXhpdChmYWxzZSk7CisgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3RGb3Iobm9kZS0+Y29kZU9yaWdpbiktPmFjdGl2YXRpb25TdHJ1Y3R1cmUoKSk7
CiAgICAgICAgIG1faGF2ZVN0cnVjdHVyZXMgPSB0cnVlOwogICAgICAgICBicmVhazsKICAgICAg
ICAgCiAgICAgY2FzZSBDcmVhdGVBcmd1bWVudHM6Ci0gICAgICAgIG5vZGUuc2V0Q2FuRXhpdChm
YWxzZSk7Ci0gICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdEZvcihub2RlLmNvZGVPcmlnaW4pLT5hcmd1bWVudHNTdHJ1Y3R1cmUoKSk7CisgICAg
ICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOworICAgICAgICBmb3JOb2RlKG5vZGUpLnNldCht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0Rm9yKG5vZGUtPmNvZGVPcmlnaW4pLT5hcmd1bWVudHNT
dHJ1Y3R1cmUoKSk7CiAgICAgICAgIG1faGF2ZVN0cnVjdHVyZXMgPSB0cnVlOwogICAgICAgICBi
cmVhazsKICAgICAgICAgCiAgICAgY2FzZSBUZWFyT2ZmQWN0aXZhdGlvbjoKICAgICBjYXNlIFRl
YXJPZmZBcmd1bWVudHM6Ci0gICAgICAgIG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7CisgICAgICAg
IG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICAvLyBEb2VzIG5vdGhpbmcgdGhhdCBp
cyB1c2VyLXZpc2libGUuCiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBDaGVja0FyZ3VtZW50
c05vdENyZWF0ZWQ6CiAgICAgICAgIGlmIChpc0VtcHR5U3BlY3VsYXRpb24oCiAgICAgICAgICAg
ICAgICAgbV92YXJpYWJsZXMub3BlcmFuZCgKLSAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5h
cmd1bWVudHNSZWdpc3RlckZvcihub2RlLmNvZGVPcmlnaW4pKS5tX3R5cGUpKSB7Ci0gICAgICAg
ICAgICBub2RlLnNldENhbkV4aXQoZmFsc2UpOworICAgICAgICAgICAgICAgICAgICBtX2dyYXBo
LmFyZ3VtZW50c1JlZ2lzdGVyRm9yKG5vZGUtPmNvZGVPcmlnaW4pKS5tX3R5cGUpKSB7CisgICAg
ICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgICAgIG1fZm91bmRDb25z
dGFudHMgPSB0cnVlOwogICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIG5vZGUuc2V0Q2FuRXhp
dCh0cnVlKTsKKyAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7CiAgICAgICAgIGJy
ZWFrOwogICAgICAgICAKICAgICBjYXNlIEdldE15QXJndW1lbnRzTGVuZ3RoOgpAQCAtMTM4Nywx
MTEgKzE0MDYsMTExIEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQK
ICAgICAgICAgLy8gdGhlIGFyZ3VtZW50cyBhIGJpdC4gTm90ZSB0aGF0IHRoaXMgaXMgbm90IHN1
ZmZpY2llbnQgdG8gZm9yY2UgY29uc3RhbnQgZm9sZGluZwogICAgICAgICAvLyBvZiBHZXRNeUFy
Z3VtZW50c0xlbmd0aCwgYmVjYXVzZSBHZXRNeUFyZ3VtZW50c0xlbmd0aCBpcyBhIGNsb2JiZXJp
bmcgb3BlcmF0aW9uLgogICAgICAgICAvLyBXZSBwZXJmb3JtIGZ1cnRoZXIgb3B0aW1pemF0aW9u
cyBvbiB0aGlzIGxhdGVyIG9uLgotICAgICAgICBpZiAobm9kZS5jb2RlT3JpZ2luLmlubGluZUNh
bGxGcmFtZSkKLSAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoanNOdW1iZXIobm9k
ZS5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzLnNpemUoKSAtIDEpKTsKKyAg
ICAgICAgaWYgKG5vZGUtPmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKQorICAgICAgICAgICAg
Zm9yTm9kZShub2RlKS5zZXQoanNOdW1iZXIobm9kZS0+Y29kZU9yaWdpbi5pbmxpbmVDYWxsRnJh
bWUtPmFyZ3VtZW50cy5zaXplKCkgLSAxKSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGZv
ck5vZGUobm9kZUluZGV4KS5zZXQoU3BlY0ludDMyKTsKLSAgICAgICAgbm9kZS5zZXRDYW5FeGl0
KAorICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0ludDMyKTsKKyAgICAgICAgbm9k
ZS0+c2V0Q2FuRXhpdCgKICAgICAgICAgICAgICFpc0VtcHR5U3BlY3VsYXRpb24oCiAgICAgICAg
ICAgICAgICAgbV92YXJpYWJsZXMub3BlcmFuZCgKLSAgICAgICAgICAgICAgICAgICAgbV9ncmFw
aC5hcmd1bWVudHNSZWdpc3RlckZvcihub2RlLmNvZGVPcmlnaW4pKS5tX3R5cGUpKTsKKyAgICAg
ICAgICAgICAgICAgICAgbV9ncmFwaC5hcmd1bWVudHNSZWdpc3RlckZvcihub2RlLT5jb2RlT3Jp
Z2luKSkubV90eXBlKSk7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAKICAgICBjYXNlIEdldE15
QXJndW1lbnRzTGVuZ3RoU2FmZToKLSAgICAgICAgbm9kZS5zZXRDYW5FeGl0KGZhbHNlKTsKKyAg
ICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgIC8vIFRoaXMgcG90ZW50aWFs
bHkgY2xvYmJlcnMgYWxsIHN0cnVjdHVyZXMgaWYgdGhlIGFyZ3VtZW50cyBvYmplY3QgaGFkIGEg
Z2V0dGVyCiAgICAgICAgIC8vIGluc3RhbGxlZCBvbiB0aGUgbGVuZ3RoIHByb3BlcnR5LgotICAg
ICAgICBjbG9iYmVyV29ybGQobm9kZS5jb2RlT3JpZ2luLCBpbmRleEluQmxvY2spOworICAgICAg
ICBjbG9iYmVyV29ybGQobm9kZS0+Y29kZU9yaWdpbiwgaW5kZXhJbkJsb2NrKTsKICAgICAgICAg
Ly8gV2UgY3VycmVudGx5IG1ha2Ugbm8gZ3VhcmFudGVlIGFib3V0IHdoYXQgdGhpcyByZXR1cm5z
IGJlY2F1c2UgaXQgZG9lcyBub3QKICAgICAgICAgLy8gc3BlY3VsYXRlIHRoYXQgdGhlIGxlbmd0
aCBwcm9wZXJ0eSBpcyBhY3R1YWxseSBhIGxlbmd0aC4KLSAgICAgICAgZm9yTm9kZShub2RlSW5k
ZXgpLm1ha2VUb3AoKTsKKyAgICAgICAgZm9yTm9kZShub2RlKS5tYWtlVG9wKCk7CiAgICAgICAg
IGJyZWFrOwogICAgICAgICAKICAgICBjYXNlIEdldE15QXJndW1lbnRCeVZhbDoKLSAgICAgICAg
bm9kZS5zZXRDYW5FeGl0KHRydWUpOworICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOwog
ICAgICAgICAvLyBXZSBrbm93IHRoYXQgdGhpcyBleGVjdXRhYmxlIGRvZXMgbm90IGVzY2FwZSBp
dHMgYXJndW1lbnRzLCBzbyB3ZSBjYW4gb3B0aW1pemUKICAgICAgICAgLy8gdGhlIGFyZ3VtZW50
cyBhIGJpdC4gTm90ZSB0aGF0IHRoaXMgZW5kcyB1cCBiZWluZyBmdXJ0aGVyIG9wdGltaXplZCBi
eSB0aGUKICAgICAgICAgLy8gQXJndW1lbnRzU2ltcGxpZmljYXRpb25QaGFzZS4KLSAgICAgICAg
Zm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY0ludDMyKTsKLSAgICAgICAgZm9yTm9k
ZShub2RlSW5kZXgpLm1ha2VUb3AoKTsKKyAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDEoKSku
ZmlsdGVyKFNwZWNJbnQzMik7CisgICAgICAgIGZvck5vZGUobm9kZSkubWFrZVRvcCgpOwogICAg
ICAgICBicmVhazsKICAgICAgICAgCiAgICAgY2FzZSBHZXRNeUFyZ3VtZW50QnlWYWxTYWZlOgot
ICAgICAgICBub2RlLnNldENhbkV4aXQodHJ1ZSk7CisgICAgICAgIG5vZGUtPnNldENhbkV4aXQo
dHJ1ZSk7CiAgICAgICAgIC8vIFRoaXMgcG90ZW50aWFsbHkgY2xvYmJlcnMgYWxsIHN0cnVjdHVy
ZXMgaWYgdGhlIHByb3BlcnR5IHdlJ3JlIGFjY2Vzc2luZyBoYXMKICAgICAgICAgLy8gYSBnZXR0
ZXIuIFdlIGRvbid0IHNwZWN1bGF0ZSBhZ2FpbnN0IHRoaXMuCi0gICAgICAgIGNsb2JiZXJXb3Js
ZChub2RlLmNvZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7CisgICAgICAgIGNsb2JiZXJXb3JsZChu
b2RlLT5jb2RlT3JpZ2luLCBpbmRleEluQmxvY2spOwogICAgICAgICAvLyBCdXQgd2UgZG8gc3Bl
Y3VsYXRlIHRoYXQgdGhlIGluZGV4IGlzIGFuIGludGVnZXIuCi0gICAgICAgIGZvck5vZGUobm9k
ZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNJbnQzMik7CisgICAgICAgIGZvck5vZGUobm9kZS0+Y2hp
bGQxKCkpLmZpbHRlcihTcGVjSW50MzIpOwogICAgICAgICAvLyBBbmQgdGhlIHJlc3VsdCBpcyB1
bmtub3duLgotICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkubWFrZVRvcCgpOworICAgICAgICBm
b3JOb2RlKG5vZGUpLm1ha2VUb3AoKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgIAogICAgIGNh
c2UgTmV3RnVuY3Rpb246CiAgICAgY2FzZSBOZXdGdW5jdGlvbkV4cHJlc3Npb246CiAgICAgY2Fz
ZSBOZXdGdW5jdGlvbk5vQ2hlY2s6Ci0gICAgICAgIG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7Ci0g
ICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdEZv
cihub2RlLmNvZGVPcmlnaW4pLT5mdW5jdGlvblN0cnVjdHVyZSgpKTsKKyAgICAgICAgbm9kZS0+
c2V0Q2FuRXhpdChmYWxzZSk7CisgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3RGb3Iobm9kZS0+Y29kZU9yaWdpbiktPmZ1bmN0aW9uU3RydWN0dXJlKCkp
OwogICAgICAgICBicmVhazsKICAgICAgICAgCiAgICAgY2FzZSBHZXRDYWxsZWU6Ci0gICAgICAg
IG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7Ci0gICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQo
U3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CisgICAgICAg
IGZvck5vZGUobm9kZSkuc2V0KFNwZWNGdW5jdGlvbik7CiAgICAgICAgIGJyZWFrOwogICAgICAg
ICAKICAgICBjYXNlIFNldENhbGxlZToKICAgICBjYXNlIFNldE15U2NvcGU6Ci0gICAgICAgIG5v
ZGUuc2V0Q2FuRXhpdChmYWxzZSk7CisgICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwog
ICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgIGNhc2UgR2V0U2NvcGU6IC8vIEZJWE1F
OiBXZSBjb3VsZCBnZXQgcmlkIG9mIHRoZXNlIGlmIHdlIGtub3cgdGhhdCB0aGUgSlNGdW5jdGlv
biBpcyBhIGNvbnN0YW50LiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTA2MjAyCiAgICAgY2FzZSBHZXRNeVNjb3BlOgogICAgIGNhc2UgU2tpcFRvcFNjb3BlOgotICAg
ICAgICBub2RlLnNldENhbkV4aXQoZmFsc2UpOwotICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCku
c2V0KFNwZWNDZWxsT3RoZXIpOworICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKKyAg
ICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0NlbGxPdGhlcik7CiAgICAgICAgIGJyZWFrOwog
CiAgICAgY2FzZSBTa2lwU2NvcGU6IHsKLSAgICAgICAgbm9kZS5zZXRDYW5FeGl0KGZhbHNlKTsK
LSAgICAgICAgSlNWYWx1ZSBjaGlsZCA9IGZvck5vZGUobm9kZS5jaGlsZDEoKSkudmFsdWUoKTsK
LSAgICAgICAgaWYgKGNoaWxkICYmIHRyeVNldENvbnN0YW50KG5vZGVJbmRleCwgSlNWYWx1ZShq
c0Nhc3Q8SlNTY29wZSo+KGNoaWxkLmFzQ2VsbCgpKS0+bmV4dCgpKSkpIHsKKyAgICAgICAgbm9k
ZS0+c2V0Q2FuRXhpdChmYWxzZSk7CisgICAgICAgIEpTVmFsdWUgY2hpbGQgPSBmb3JOb2RlKG5v
ZGUtPmNoaWxkMSgpKS52YWx1ZSgpOworICAgICAgICBpZiAoY2hpbGQgJiYgdHJ5U2V0Q29uc3Rh
bnQobm9kZSwgSlNWYWx1ZShqc0Nhc3Q8SlNTY29wZSo+KGNoaWxkLmFzQ2VsbCgpKS0+bmV4dCgp
KSkpIHsKICAgICAgICAgICAgIG1fZm91bmRDb25zdGFudHMgPSB0cnVlOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChTcGVjQ2Vs
bE90aGVyKTsKKyAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0NlbGxPdGhlcik7CiAgICAg
ICAgIGJyZWFrOwogICAgIH0KIAogICAgIGNhc2UgR2V0U2NvcGVSZWdpc3RlcnM6Ci0gICAgICAg
IG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7Ci0gICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSku
ZmlsdGVyKFNwZWNDZWxsKTsKLSAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLmNsZWFyKCk7IC8v
IFRoZSByZXN1bHQgaXMgbm90IGEgSlMgdmFsdWUuCisgICAgICAgIG5vZGUtPnNldENhbkV4aXQo
ZmFsc2UpOworICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5maWx0ZXIoU3BlY0NlbGwp
OworICAgICAgICBmb3JOb2RlKG5vZGUpLmNsZWFyKCk7IC8vIFRoZSByZXN1bHQgaXMgbm90IGEg
SlMgdmFsdWUuCiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBHZXRTY29wZWRWYXI6Ci0gICAg
ICAgIG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7Ci0gICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5t
YWtlVG9wKCk7CisgICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOworICAgICAgICBmb3JO
b2RlKG5vZGUpLm1ha2VUb3AoKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICBj
YXNlIFB1dFNjb3BlZFZhcjoKLSAgICAgICAgbm9kZS5zZXRDYW5FeGl0KGZhbHNlKTsKLSAgICAg
ICAgY2xvYmJlckNhcHR1cmVkVmFycyhub2RlLmNvZGVPcmlnaW4pOworICAgICAgICBub2RlLT5z
ZXRDYW5FeGl0KGZhbHNlKTsKKyAgICAgICAgY2xvYmJlckNhcHR1cmVkVmFycyhub2RlLT5jb2Rl
T3JpZ2luKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICBjYXNlIEdldEJ5SWQ6
CiAgICAgY2FzZSBHZXRCeUlkRmx1c2g6Ci0gICAgICAgIG5vZGUuc2V0Q2FuRXhpdCh0cnVlKTsK
LSAgICAgICAgaWYgKCFub2RlLnByZWRpY3Rpb24oKSkgeworICAgICAgICBub2RlLT5zZXRDYW5F
eGl0KHRydWUpOworICAgICAgICBpZiAoIW5vZGUtPnByZWRpY3Rpb24oKSkgewogICAgICAgICAg
ICAgbV9pc1ZhbGlkID0gZmFsc2U7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAg
ICAgICBpZiAoaXNDZWxsU3BlY3VsYXRpb24obV9ncmFwaFtub2RlLmNoaWxkMSgpXS5wcmVkaWN0
aW9uKCkpKSB7Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVj
Q2VsbCk7CisgICAgICAgIGlmIChpc0NlbGxTcGVjdWxhdGlvbihub2RlLT5jaGlsZDEoKS0+cHJl
ZGljdGlvbigpKSkgeworICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDEoKSkuZmlsdGVy
KFNwZWNDZWxsKTsKIAotICAgICAgICAgICAgaWYgKFN0cnVjdHVyZSogc3RydWN0dXJlID0gZm9y
Tm9kZShub2RlLmNoaWxkMSgpKS5iZXN0UHJvdmVuU3RydWN0dXJlKCkpIHsKKyAgICAgICAgICAg
IGlmIChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmJlc3RQ
cm92ZW5TdHJ1Y3R1cmUoKSkgewogICAgICAgICAgICAgICAgIEdldEJ5SWRTdGF0dXMgc3RhdHVz
ID0gR2V0QnlJZFN0YXR1czo6Y29tcHV0ZUZvcigKICAgICAgICAgICAgICAgICAgICAgbV9ncmFw
aC5tX2dsb2JhbERhdGEsIHN0cnVjdHVyZSwKLSAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5t
X2NvZGVCbG9jay0+aWRlbnRpZmllcihub2RlLmlkZW50aWZpZXJOdW1iZXIoKSkpOworICAgICAg
ICAgICAgICAgICAgICBtX2dyYXBoLm1fY29kZUJsb2NrLT5pZGVudGlmaWVyKG5vZGUtPmlkZW50
aWZpZXJOdW1iZXIoKSkpOwogICAgICAgICAgICAgICAgIGlmIChzdGF0dXMuaXNTaW1wbGUoKSkg
ewogICAgICAgICAgICAgICAgICAgICAvLyBBc3NlcnQgdGhpbmdzIHRoYXQgd2UgY2FuJ3QgaGFu
ZGxlIGFuZCB0aGF0IHRoZSBjb21wdXRlRm9yKCkgbWV0aG9kCiAgICAgICAgICAgICAgICAgICAg
IC8vIGFib3ZlIHdvbid0IGJlIGFibGUgdG8gcmV0dXJuLgpAQCAtMTQ5OSwyMyArMTUxOCwyMyBA
QCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgICAgICAg
ICAgICAgIEFTU0VSVChzdGF0dXMuY2hhaW4oKS5pc0VtcHR5KCkpOwogICAgICAgICAgICAgICAg
ICAgICAKICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXR1cy5zcGVjaWZpY1ZhbHVlKCkpCi0g
ICAgICAgICAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KHN0YXR1cy5zcGVj
aWZpY1ZhbHVlKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQo
c3RhdHVzLnNwZWNpZmljVmFsdWUoKSk7CiAgICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5tYWtlVG9wKCk7Ci0gICAgICAg
ICAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKHN0YXR1cy5zdHJ1Y3R1
cmVTZXQoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLm1ha2VUb3Ao
KTsKKyAgICAgICAgICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDEoKSkuZmlsdGVyKHN0
YXR1cy5zdHJ1Y3R1cmVTZXQoKSk7CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAg
ICAgICAgICBtX2ZvdW5kQ29uc3RhbnRzID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAg
IGNsb2JiZXJXb3JsZChub2RlLmNvZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7Ci0gICAgICAgIGZv
ck5vZGUobm9kZUluZGV4KS5tYWtlVG9wKCk7CisgICAgICAgIGNsb2JiZXJXb3JsZChub2RlLT5j
b2RlT3JpZ2luLCBpbmRleEluQmxvY2spOworICAgICAgICBmb3JOb2RlKG5vZGUpLm1ha2VUb3Ao
KTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICBjYXNlIEdldEFycmF5TGVuZ3Ro
OgotICAgICAgICBub2RlLnNldENhbkV4aXQodHJ1ZSk7IC8vIExpZXMsIGJ1dCBpdCdzIHRydWUg
Zm9yIHRoZSBjb21tb24gY2FzZSBvZiBKU0FycmF5LCBzbyBpdCdzIGdvb2QgZW5vdWdoLgotICAg
ICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFNwZWNJbnQzMik7CisgICAgICAgIG5vZGUtPnNl
dENhbkV4aXQodHJ1ZSk7IC8vIExpZXMsIGJ1dCBpdCdzIHRydWUgZm9yIHRoZSBjb21tb24gY2Fz
ZSBvZiBKU0FycmF5LCBzbyBpdCdzIGdvb2QgZW5vdWdoLgorICAgICAgICBmb3JOb2RlKG5vZGUp
LnNldChTcGVjSW50MzIpOwogICAgICAgICBicmVhazsKICAgICAgICAgCiAgICAgY2FzZSBDaGVj
a0V4ZWN1dGFibGU6IHsKQEAgLTE1MjMsMjMgKzE1NDIsMjMgQEAgYm9vbCBBYnN0cmFjdFN0YXRl
OjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICAvLyBtb3JlIHRob3JvdWdobHkuIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDYyMDAKICAgICAgICAgLy8gRklY
TUU6IFdlIGNvdWxkIGVsaW1pbmF0ZSB0aGVzZSBlbnRpcmVseSBpZiB3ZSBrbm93IHRoZSBleGFj
dCB2YWx1ZSB0aGF0IGZsb3dzIGludG8gdGhpcy4KICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwNjIwMQotICAgICAgICBmb3JOb2RlKG5vZGUuY2hp
bGQxKCkpLmZpbHRlcihTcGVjQ2VsbCk7Ci0gICAgICAgIG5vZGUuc2V0Q2FuRXhpdCh0cnVlKTsK
KyAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDEoKSkuZmlsdGVyKFNwZWNDZWxsKTsKKyAgICAg
ICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAg
Y2FzZSBDaGVja1N0cnVjdHVyZToKICAgICBjYXNlIEZvcndhcmRDaGVja1N0cnVjdHVyZTogewog
ICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGJlIGFibGUgdG8gcHJvcGFnYXRlIHRoZSBzdHJ1
Y3R1cmUgc2V0cyBvZiBjb25zdGFudHMgKGkuZS4gcHJvdG90eXBlcykuCi0gICAgICAgIEFic3Ry
YWN0VmFsdWUmIHZhbHVlID0gZm9yTm9kZShub2RlLmNoaWxkMSgpKTsKKyAgICAgICAgQWJzdHJh
Y3RWYWx1ZSYgdmFsdWUgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgLy8gSWYg
dGhpcyBzdHJ1Y3R1cmUgY2hlY2sgaXMgYXR0ZW1wdGluZyB0byBwcm92ZSBrbm93bGVkZ2UgYWxy
ZWFkeSBoZWxkIGluCiAgICAgICAgIC8vIHRoZSBmdXR1cmVQb3NzaWJsZVN0cnVjdHVyZSBzZXQg
dGhlbiB0aGUgY29uc3RhbnQgZm9sZGluZyBwaGFzZSBzaG91bGQKICAgICAgICAgLy8gdHVybiB0
aGlzIGludG8gYSB3YXRjaHBvaW50IGluc3RlYWQuCi0gICAgICAgIFN0cnVjdHVyZVNldCYgc2V0
ID0gbm9kZS5zdHJ1Y3R1cmVTZXQoKTsKKyAgICAgICAgU3RydWN0dXJlU2V0JiBzZXQgPSBub2Rl
LT5zdHJ1Y3R1cmVTZXQoKTsKICAgICAgICAgaWYgKHZhbHVlLm1fZnV0dXJlUG9zc2libGVTdHJ1
Y3R1cmUuaXNTdWJzZXRPZihzZXQpCiAgICAgICAgICAgICB8fCB2YWx1ZS5tX2N1cnJlbnRLbm93
blN0cnVjdHVyZS5pc1N1YnNldE9mKHNldCkpCiAgICAgICAgICAgICBtX2ZvdW5kQ29uc3RhbnRz
ID0gdHJ1ZTsKLSAgICAgICAgbm9kZS5zZXRDYW5FeGl0KAorICAgICAgICBub2RlLT5zZXRDYW5F
eGl0KAogICAgICAgICAgICAgIXZhbHVlLm1fY3VycmVudEtub3duU3RydWN0dXJlLmlzU3Vic2V0
T2Yoc2V0KQogICAgICAgICAgICAgfHwgIWlzQ2VsbFNwZWN1bGF0aW9uKHZhbHVlLm1fdHlwZSkp
OwogICAgICAgICB2YWx1ZS5maWx0ZXIoc2V0KTsKQEAgLTE1NDksNyArMTU2OCw3IEBAIGJvb2wg
QWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgCiAgICAgY2FzZSBT
dHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludDoKICAgICBjYXNlIEZvcndhcmRTdHJ1Y3R1cmVU
cmFuc2l0aW9uV2F0Y2hwb2ludDogewotICAgICAgICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSA9IGZv
ck5vZGUobm9kZS5jaGlsZDEoKSk7CisgICAgICAgIEFic3RyYWN0VmFsdWUmIHZhbHVlID0gZm9y
Tm9kZShub2RlLT5jaGlsZDEoKSk7CiAKICAgICAgICAgLy8gSXQncyBvbmx5IHZhbGlkIHRvIGlz
c3VlIGEgc3RydWN0dXJlIHRyYW5zaXRpb24gd2F0Y2hwb2ludCBpZiB3ZSBhbHJlYWR5CiAgICAg
ICAgIC8vIGtub3cgdGhhdCB0aGUgd2F0Y2hwb2ludCBjb3ZlcnMgYSBzdXBlcnNldCBvZiB0aGUg
c3RydWN0dXJlcyBrbm93biB0bwpAQCAtMTU1NywxNTQgKzE1NzYsMTU0IEBAIGJvb2wgQWJzdHJh
Y3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgLy8gQ3VycmVudGx5LCB3ZSBv
bmx5IGlzc3VlIHNpbmdsZXRvbiB3YXRjaHBvaW50cyAodGhhdCBjaGVjayBvbmUgc3RydWN0dXJl
KQogICAgICAgICAvLyBhbmQgb3VyIGZ1dHVyZVBvc3NpYmxlU3RydWN0dXJlIHNldCBjYW4gb25s
eSBjb250YWluIHplcm8sIG9uZSwgb3IgYW4KICAgICAgICAgLy8gaW5maW5pdHkgb2Ygc3RydWN0
dXJlcy4KLSAgICAgICAgQVNTRVJUKHZhbHVlLm1fZnV0dXJlUG9zc2libGVTdHJ1Y3R1cmUuaXNT
dWJzZXRPZihTdHJ1Y3R1cmVTZXQobm9kZS5zdHJ1Y3R1cmUoKSkpKTsKKyAgICAgICAgQVNTRVJU
KHZhbHVlLm1fZnV0dXJlUG9zc2libGVTdHJ1Y3R1cmUuaXNTdWJzZXRPZihTdHJ1Y3R1cmVTZXQo
bm9kZS0+c3RydWN0dXJlKCkpKSk7CiAgICAgICAgIAogICAgICAgICBBU1NFUlQodmFsdWUuaXND
bGVhcigpIHx8IGlzQ2VsbFNwZWN1bGF0aW9uKHZhbHVlLm1fdHlwZSkpOyAvLyBWYWx1ZSBjb3Vs
ZCBiZSBjbGVhciBpZiB3ZSd2ZSBwcm92ZW4gbXVzdC1leGl0IGR1ZSB0byBhIHNwZWN1bGF0aW9u
IHN0YXRpY2FsbHkga25vd24gdG8gYmUgYmFkLgotICAgICAgICB2YWx1ZS5maWx0ZXIobm9kZS5z
dHJ1Y3R1cmUoKSk7CisgICAgICAgIHZhbHVlLmZpbHRlcihub2RlLT5zdHJ1Y3R1cmUoKSk7CiAg
ICAgICAgIG1faGF2ZVN0cnVjdHVyZXMgPSB0cnVlOwotICAgICAgICBub2RlLnNldENhbkV4aXQo
dHJ1ZSk7CisgICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7CiAgICAgICAgIGJyZWFrOwog
ICAgIH0KICAgICAgICAgICAgIAogICAgIGNhc2UgUHV0U3RydWN0dXJlOgogICAgIGNhc2UgUGhh
bnRvbVB1dFN0cnVjdHVyZToKLSAgICAgICAgbm9kZS5zZXRDYW5FeGl0KGZhbHNlKTsKLSAgICAg
ICAgaWYgKCFmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fY3VycmVudEtub3duU3RydWN0dXJlLmlz
Q2xlYXIoKSkgeworICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKKyAgICAgICAgaWYg
KCFmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5pc0NsZWFy
KCkpIHsKICAgICAgICAgICAgIGNsb2JiZXJTdHJ1Y3R1cmVzKGluZGV4SW5CbG9jayk7Ci0gICAg
ICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLnNldChub2RlLnN0cnVjdHVyZVRyYW5zaXRp
b25EYXRhKCkubmV3U3RydWN0dXJlKTsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQx
KCkpLnNldChub2RlLT5zdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSgpLm5ld1N0cnVjdHVyZSk7CiAg
ICAgICAgICAgICBtX2hhdmVTdHJ1Y3R1cmVzID0gdHJ1ZTsKICAgICAgICAgfQogICAgICAgICBi
cmVhazsKICAgICBjYXNlIEdldEJ1dHRlcmZseToKICAgICBjYXNlIEFsbG9jYXRlUHJvcGVydHlT
dG9yYWdlOgogICAgIGNhc2UgUmVhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZToKLSAgICAgICAgbm9k
ZS5zZXRDYW5FeGl0KCFpc0NlbGxTcGVjdWxhdGlvbihmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1f
dHlwZSkpOwotICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjQ2VsbCk7
Ci0gICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5jbGVhcigpOyAvLyBUaGUgcmVzdWx0IGlzIG5v
dCBhIEpTIHZhbHVlLgorICAgICAgICBub2RlLT5zZXRDYW5FeGl0KCFpc0NlbGxTcGVjdWxhdGlv
bihmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX3R5cGUpKTsKKyAgICAgICAgZm9yTm9kZShub2Rl
LT5jaGlsZDEoKSkuZmlsdGVyKFNwZWNDZWxsKTsKKyAgICAgICAgZm9yTm9kZShub2RlKS5jbGVh
cigpOyAvLyBUaGUgcmVzdWx0IGlzIG5vdCBhIEpTIHZhbHVlLgogICAgICAgICBicmVhazsKICAg
ICBjYXNlIENoZWNrQXJyYXk6IHsKLSAgICAgICAgaWYgKG5vZGUuYXJyYXlNb2RlKCkuYWxyZWFk
eUNoZWNrZWQobV9ncmFwaCwgbm9kZSwgZm9yTm9kZShub2RlLmNoaWxkMSgpKSkpIHsKKyAgICAg
ICAgaWYgKG5vZGUtPmFycmF5TW9kZSgpLmFscmVhZHlDaGVja2VkKG1fZ3JhcGgsIG5vZGUsIGZv
ck5vZGUobm9kZS0+Y2hpbGQxKCkpKSkgewogICAgICAgICAgICAgbV9mb3VuZENvbnN0YW50cyA9
IHRydWU7Ci0gICAgICAgICAgICBub2RlLnNldENhbkV4aXQoZmFsc2UpOworICAgICAgICAgICAg
bm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQot
ICAgICAgICBub2RlLnNldENhbkV4aXQodHJ1ZSk7IC8vIExpZXMsIGJ1dCB0aGlzIGlzIGZvbGxv
d2VkIGJ5IG9wZXJhdGlvbnMgKGxpa2UgR2V0QnlWYWwpIHRoYXQgYWx3YXlzIGV4aXQsIHNvIHRo
ZXJlIGlzIG5vIHBvaW50IGluIHVzIHRyeWluZyB0byBiZSBjbGV2ZXIgaGVyZS4KLSAgICAgICAg
c3dpdGNoIChub2RlLmFycmF5TW9kZSgpLnR5cGUoKSkgeworICAgICAgICBub2RlLT5zZXRDYW5F
eGl0KHRydWUpOyAvLyBMaWVzLCBidXQgdGhpcyBpcyBmb2xsb3dlZCBieSBvcGVyYXRpb25zIChs
aWtlIEdldEJ5VmFsKSB0aGF0IGFsd2F5cyBleGl0LCBzbyB0aGVyZSBpcyBubyBwb2ludCBpbiB1
cyB0cnlpbmcgdG8gYmUgY2xldmVyIGhlcmUuCisgICAgICAgIHN3aXRjaCAobm9kZS0+YXJyYXlN
b2RlKCkudHlwZSgpKSB7CiAgICAgICAgIGNhc2UgQXJyYXk6OlN0cmluZzoKLSAgICAgICAgICAg
IGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNTdHJpbmcpOworICAgICAgICAgICAg
Zm9yTm9kZShub2RlLT5jaGlsZDEoKSkuZmlsdGVyKFNwZWNTdHJpbmcpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OkludDMyOgogICAgICAgICBjYXNlIEFycmF5OjpE
b3VibGU6CiAgICAgICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3VvdXM6CiAgICAgICAgIGNhc2UgQXJy
YXk6OkFycmF5U3RvcmFnZToKICAgICAgICAgY2FzZSBBcnJheTo6U2xvd1B1dEFycmF5U3RvcmFn
ZToKLSAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNDZWxsKTsK
KyAgICAgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRlcihTcGVjQ2VsbCk7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6QXJndW1lbnRzOgotICAgICAg
ICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY0FyZ3VtZW50cyk7CisgICAg
ICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5maWx0ZXIoU3BlY0FyZ3VtZW50cyk7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6SW50OEFycmF5OgotICAgICAg
ICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY0ludDhBcnJheSk7CisgICAg
ICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5maWx0ZXIoU3BlY0ludDhBcnJheSk7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6SW50MTZBcnJheToKLSAgICAg
ICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNJbnQxNkFycmF5KTsKKyAg
ICAgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRlcihTcGVjSW50MTZBcnJheSk7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6SW50MzJBcnJheToKLSAg
ICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNJbnQzMkFycmF5KTsK
KyAgICAgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRlcihTcGVjSW50MzJBcnJh
eSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6VWludDhBcnJheToK
LSAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNVaW50OEFycmF5
KTsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRlcihTcGVjVWludDhB
cnJheSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6VWludDhDbGFt
cGVkQXJyYXk6Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVj
VWludDhDbGFtcGVkQXJyYXkpOworICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDEoKSku
ZmlsdGVyKFNwZWNVaW50OENsYW1wZWRBcnJheSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgY2FzZSBBcnJheTo6VWludDE2QXJyYXk6Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hp
bGQxKCkpLmZpbHRlcihTcGVjVWludDE2QXJyYXkpOworICAgICAgICAgICAgZm9yTm9kZShub2Rl
LT5jaGlsZDEoKSkuZmlsdGVyKFNwZWNVaW50MTZBcnJheSk7CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgY2FzZSBBcnJheTo6VWludDMyQXJyYXk6Ci0gICAgICAgICAgICBmb3JOb2RlKG5v
ZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjVWludDMyQXJyYXkpOworICAgICAgICAgICAgZm9yTm9k
ZShub2RlLT5jaGlsZDEoKSkuZmlsdGVyKFNwZWNVaW50MzJBcnJheSk7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6RmxvYXQzMkFycmF5OgotICAgICAgICAgICAgZm9y
Tm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY0Zsb2F0MzJBcnJheSk7CisgICAgICAgICAg
ICBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5maWx0ZXIoU3BlY0Zsb2F0MzJBcnJheSk7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6RmxvYXQ2NEFycmF5OgotICAgICAg
ICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY0Zsb2F0NjRBcnJheSk7Cisg
ICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5maWx0ZXIoU3BlY0Zsb2F0NjRBcnJh
eSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
fQotICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlckFycmF5TW9kZXMobm9kZS5h
cnJheU1vZGUoKS5hcnJheU1vZGVzVGhhdFBhc3NGaWx0ZXJpbmcoKSk7CisgICAgICAgIGZvck5v
ZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRlckFycmF5TW9kZXMobm9kZS0+YXJyYXlNb2RlKCkuYXJy
YXlNb2Rlc1RoYXRQYXNzRmlsdGVyaW5nKCkpOwogICAgICAgICBtX2hhdmVTdHJ1Y3R1cmVzID0g
dHJ1ZTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGNhc2UgQXJyYXlpZnk6IHsKLSAgICAg
ICAgaWYgKG5vZGUuYXJyYXlNb2RlKCkuYWxyZWFkeUNoZWNrZWQobV9ncmFwaCwgbm9kZSwgZm9y
Tm9kZShub2RlLmNoaWxkMSgpKSkpIHsKKyAgICAgICAgaWYgKG5vZGUtPmFycmF5TW9kZSgpLmFs
cmVhZHlDaGVja2VkKG1fZ3JhcGgsIG5vZGUsIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpKSkgewog
ICAgICAgICAgICAgbV9mb3VuZENvbnN0YW50cyA9IHRydWU7Ci0gICAgICAgICAgICBub2RlLnNl
dENhbkV4aXQoZmFsc2UpOworICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICBBU1NFUlQobm9kZS5hcnJheU1v
ZGUoKS5jb252ZXJzaW9uKCkgPT0gQXJyYXk6OkNvbnZlcnQKLSAgICAgICAgICAgIHx8IG5vZGUu
YXJyYXlNb2RlKCkuY29udmVyc2lvbigpID09IEFycmF5OjpSYWdlQ29udmVydCk7Ci0gICAgICAg
IG5vZGUuc2V0Q2FuRXhpdCh0cnVlKTsKLSAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5m
aWx0ZXIoU3BlY0NlbGwpOwotICAgICAgICBpZiAobm9kZS5jaGlsZDIoKSkKLSAgICAgICAgICAg
IGZvck5vZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7CisgICAgICAgIEFTU0VS
VChub2RlLT5hcnJheU1vZGUoKS5jb252ZXJzaW9uKCkgPT0gQXJyYXk6OkNvbnZlcnQKKyAgICAg
ICAgICAgIHx8IG5vZGUtPmFycmF5TW9kZSgpLmNvbnZlcnNpb24oKSA9PSBBcnJheTo6UmFnZUNv
bnZlcnQpOworICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOworICAgICAgICBmb3JOb2Rl
KG5vZGUtPmNoaWxkMSgpKS5maWx0ZXIoU3BlY0NlbGwpOworICAgICAgICBpZiAobm9kZS0+Y2hp
bGQyKCkpCisgICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMigpKS5maWx0ZXIoU3BlY0lu
dDMyKTsKICAgICAgICAgY2xvYmJlclN0cnVjdHVyZXMoaW5kZXhJbkJsb2NrKTsKLSAgICAgICAg
Zm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXJBcnJheU1vZGVzKG5vZGUuYXJyYXlNb2RlKCku
YXJyYXlNb2Rlc1RoYXRQYXNzRmlsdGVyaW5nKCkpOworICAgICAgICBmb3JOb2RlKG5vZGUtPmNo
aWxkMSgpKS5maWx0ZXJBcnJheU1vZGVzKG5vZGUtPmFycmF5TW9kZSgpLmFycmF5TW9kZXNUaGF0
UGFzc0ZpbHRlcmluZygpKTsKICAgICAgICAgbV9oYXZlU3RydWN0dXJlcyA9IHRydWU7CiAgICAg
ICAgIGJyZWFrOwogICAgIH0KICAgICBjYXNlIEFycmF5aWZ5VG9TdHJ1Y3R1cmU6IHsKLSAgICAg
ICAgQWJzdHJhY3RWYWx1ZSYgdmFsdWUgPSBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpOwotICAgICAg
ICBTdHJ1Y3R1cmVTZXQgc2V0ID0gbm9kZS5zdHJ1Y3R1cmUoKTsKKyAgICAgICAgQWJzdHJhY3RW
YWx1ZSYgdmFsdWUgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgU3RydWN0dXJl
U2V0IHNldCA9IG5vZGUtPnN0cnVjdHVyZSgpOwogICAgICAgICBpZiAodmFsdWUubV9mdXR1cmVQ
b3NzaWJsZVN0cnVjdHVyZS5pc1N1YnNldE9mKHNldCkKICAgICAgICAgICAgIHx8IHZhbHVlLm1f
Y3VycmVudEtub3duU3RydWN0dXJlLmlzU3Vic2V0T2Yoc2V0KSkKICAgICAgICAgICAgIG1fZm91
bmRDb25zdGFudHMgPSB0cnVlOwotICAgICAgICBub2RlLnNldENhbkV4aXQodHJ1ZSk7Ci0gICAg
ICAgIGlmIChub2RlLmNoaWxkMigpKQotICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMigp
KS5maWx0ZXIoU3BlY0ludDMyKTsKKyAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKKyAg
ICAgICAgaWYgKG5vZGUtPmNoaWxkMigpKQorICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGls
ZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7CiAgICAgICAgIGNsb2JiZXJTdHJ1Y3R1cmVzKGluZGV4
SW5CbG9jayk7CiAgICAgICAgIHZhbHVlLmZpbHRlcihzZXQpOwogICAgICAgICBtX2hhdmVTdHJ1
Y3R1cmVzID0gdHJ1ZTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGNhc2UgR2V0SW5kZXhl
ZFByb3BlcnR5U3RvcmFnZTogewotICAgICAgICBub2RlLnNldENhbkV4aXQoZmFsc2UpOwotICAg
ICAgICBmb3JOb2RlKG5vZGVJbmRleCkuY2xlYXIoKTsKKyAgICAgICAgbm9kZS0+c2V0Q2FuRXhp
dChmYWxzZSk7CisgICAgICAgIGZvck5vZGUobm9kZSkuY2xlYXIoKTsKICAgICAgICAgYnJlYWs7
IAogICAgIH0KICAgICBjYXNlIEdldEJ5T2Zmc2V0OgotICAgICAgICBpZiAoIW1fZ3JhcGhbbm9k
ZS5jaGlsZDEoKV0uaGFzU3RvcmFnZVJlc3VsdCgpKSB7Ci0gICAgICAgICAgICBub2RlLnNldENh
bkV4aXQoIWlzQ2VsbFNwZWN1bGF0aW9uKGZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSk7
Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjQ2VsbCk7Cisg
ICAgICAgIGlmICghbm9kZS0+Y2hpbGQxKCktPmhhc1N0b3JhZ2VSZXN1bHQoKSkgeworICAgICAg
ICAgICAgbm9kZS0+c2V0Q2FuRXhpdCghaXNDZWxsU3BlY3VsYXRpb24oZm9yTm9kZShub2RlLT5j
aGlsZDEoKSkubV90eXBlKSk7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5m
aWx0ZXIoU3BlY0NlbGwpOwogICAgICAgICB9Ci0gICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5t
YWtlVG9wKCk7CisgICAgICAgIGZvck5vZGUobm9kZSkubWFrZVRvcCgpOwogICAgICAgICBicmVh
azsKICAgICAgICAgICAgIAogICAgIGNhc2UgUHV0QnlPZmZzZXQ6IHsKICAgICAgICAgYm9vbCBj
YW5FeGl0ID0gZmFsc2U7Ci0gICAgICAgIGlmICghbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5oYXNT
dG9yYWdlUmVzdWx0KCkpIHsKLSAgICAgICAgICAgIGNhbkV4aXQgfD0gIWlzQ2VsbFNwZWN1bGF0
aW9uKGZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKTsKLSAgICAgICAgICAgIGZvck5vZGUo
bm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNDZWxsKTsKLSAgICAgICAgfQotICAgICAgICBjYW5F
eGl0IHw9ICFpc0NlbGxTcGVjdWxhdGlvbihmb3JOb2RlKG5vZGUuY2hpbGQyKCkpLm1fdHlwZSk7
Ci0gICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKFNwZWNDZWxsKTsKLSAgICAg
ICAgbm9kZS5zZXRDYW5FeGl0KGNhbkV4aXQpOworICAgICAgICBpZiAoIW5vZGUtPmNoaWxkMSgp
LT5oYXNTdG9yYWdlUmVzdWx0KCkpIHsKKyAgICAgICAgICAgIGNhbkV4aXQgfD0gIWlzQ2VsbFNw
ZWN1bGF0aW9uKGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fdHlwZSk7CisgICAgICAgICAgICBm
b3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5maWx0ZXIoU3BlY0NlbGwpOworICAgICAgICB9CisgICAg
ICAgIGNhbkV4aXQgfD0gIWlzQ2VsbFNwZWN1bGF0aW9uKGZvck5vZGUobm9kZS0+Y2hpbGQyKCkp
Lm1fdHlwZSk7CisgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQyKCkpLmZpbHRlcihTcGVjQ2Vs
bCk7CisgICAgICAgIG5vZGUtPnNldENhbkV4aXQoY2FuRXhpdCk7CiAgICAgICAgIGJyZWFrOwog
ICAgIH0KICAgICAgICAgICAgIAogICAgIGNhc2UgQ2hlY2tGdW5jdGlvbjogewotICAgICAgICBK
U1ZhbHVlIHZhbHVlID0gZm9yTm9kZShub2RlLmNoaWxkMSgpKS52YWx1ZSgpOwotICAgICAgICBp
ZiAodmFsdWUgPT0gbm9kZS5mdW5jdGlvbigpKSB7CisgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBm
b3JOb2RlKG5vZGUtPmNoaWxkMSgpKS52YWx1ZSgpOworICAgICAgICBpZiAodmFsdWUgPT0gbm9k
ZS0+ZnVuY3Rpb24oKSkgewogICAgICAgICAgICAgbV9mb3VuZENvbnN0YW50cyA9IHRydWU7CiAg
ICAgICAgICAgICBBU1NFUlQodmFsdWUpOwotICAgICAgICAgICAgbm9kZS5zZXRDYW5FeGl0KGZh
bHNlKTsKKyAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIG5vZGUuc2V0Q2FuRXhpdCh0cnVl
KTsgLy8gTGllcyEgV2UgY2FuIGRvIGJldHRlci4KLSAgICAgICAgaWYgKCFmb3JOb2RlKG5vZGUu
Y2hpbGQxKCkpLmZpbHRlckJ5VmFsdWUobm9kZS5mdW5jdGlvbigpKSkgeworICAgICAgICBub2Rl
LT5zZXRDYW5FeGl0KHRydWUpOyAvLyBMaWVzISBXZSBjYW4gZG8gYmV0dGVyLgorICAgICAgICBp
ZiAoIWZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRlckJ5VmFsdWUobm9kZS0+ZnVuY3Rpb24o
KSkpIHsKICAgICAgICAgICAgIG1faXNWYWxpZCA9IGZhbHNlOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIH0KQEAgLTE3MTMsNjcgKzE3MzIsNjkgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpl
eGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICAKICAgICBjYXNlIFB1dEJ5SWQ6CiAgICAgY2Fz
ZSBQdXRCeUlkRGlyZWN0OgotICAgICAgICBub2RlLnNldENhbkV4aXQodHJ1ZSk7Ci0gICAgICAg
IGlmIChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGZvck5vZGUobm9kZS5jaGlsZDEoKSkuYmVzdFBy
b3ZlblN0cnVjdHVyZSgpKSB7CisgICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7CisgICAg
ICAgIGlmIChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmJl
c3RQcm92ZW5TdHJ1Y3R1cmUoKSkgewogICAgICAgICAgICAgUHV0QnlJZFN0YXR1cyBzdGF0dXMg
PSBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yKAogICAgICAgICAgICAgICAgIG1fZ3JhcGgubV9n
bG9iYWxEYXRhLAotICAgICAgICAgICAgICAgIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUu
Y29kZU9yaWdpbiksCisgICAgICAgICAgICAgICAgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9k
ZS0+Y29kZU9yaWdpbiksCiAgICAgICAgICAgICAgICAgc3RydWN0dXJlLAotICAgICAgICAgICAg
ICAgIG1fZ3JhcGgubV9jb2RlQmxvY2stPmlkZW50aWZpZXIobm9kZS5pZGVudGlmaWVyTnVtYmVy
KCkpLAotICAgICAgICAgICAgICAgIG5vZGUub3AoKSA9PSBQdXRCeUlkRGlyZWN0KTsKKyAgICAg
ICAgICAgICAgICBtX2dyYXBoLm1fY29kZUJsb2NrLT5pZGVudGlmaWVyKG5vZGUtPmlkZW50aWZp
ZXJOdW1iZXIoKSksCisgICAgICAgICAgICAgICAgbm9kZS0+b3AoKSA9PSBQdXRCeUlkRGlyZWN0
KTsKICAgICAgICAgICAgIGlmIChzdGF0dXMuaXNTaW1wbGVSZXBsYWNlKCkpIHsKLSAgICAgICAg
ICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihzdHJ1Y3R1cmUpOworICAgICAg
ICAgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRlcihzdHJ1Y3R1cmUpOwogICAg
ICAgICAgICAgICAgIG1fZm91bmRDb25zdGFudHMgPSB0cnVlOwogICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKHN0YXR1cy5pc1NpbXBsZVRyYW5z
aXRpb24oKSkgewogICAgICAgICAgICAgICAgIGNsb2JiZXJTdHJ1Y3R1cmVzKGluZGV4SW5CbG9j
ayk7Ci0gICAgICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5zZXQoc3RhdHVzLm5l
d1N0cnVjdHVyZSgpKTsKKyAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5z
ZXQoc3RhdHVzLm5ld1N0cnVjdHVyZSgpKTsKICAgICAgICAgICAgICAgICBtX2hhdmVTdHJ1Y3R1
cmVzID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBtX2ZvdW5kQ29uc3RhbnRzID0gdHJ1ZTsKICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICBm
b3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjQ2VsbCk7Ci0gICAgICAgIGNsb2JiZXJX
b3JsZChub2RlLmNvZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7CisgICAgICAgIGZvck5vZGUobm9k
ZS0+Y2hpbGQxKCkpLmZpbHRlcihTcGVjQ2VsbCk7CisgICAgICAgIGNsb2JiZXJXb3JsZChub2Rl
LT5jb2RlT3JpZ2luLCBpbmRleEluQmxvY2spOwogICAgICAgICBicmVhazsKICAgICAgICAgICAg
IAogICAgIGNhc2UgR2V0R2xvYmFsVmFyOgotICAgICAgICBub2RlLnNldENhbkV4aXQoZmFsc2Up
OwotICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkubWFrZVRvcCgpOworICAgICAgICBub2RlLT5z
ZXRDYW5FeGl0KGZhbHNlKTsKKyAgICAgICAgZm9yTm9kZShub2RlKS5tYWtlVG9wKCk7CiAgICAg
ICAgIGJyZWFrOwogICAgICAgICAKICAgICBjYXNlIEdsb2JhbFZhcldhdGNocG9pbnQ6Ci0gICAg
ICAgIG5vZGUuc2V0Q2FuRXhpdCh0cnVlKTsKKyAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVl
KTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICBjYXNlIFB1dEdsb2JhbFZhcjoK
ICAgICBjYXNlIFB1dEdsb2JhbFZhckNoZWNrOgotICAgICAgICBub2RlLnNldENhbkV4aXQoZmFs
c2UpOworICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICAKICAgICBjYXNlIENoZWNrSGFzSW5zdGFuY2U6Ci0gICAgICAgIG5vZGUuc2V0
Q2FuRXhpdCh0cnVlKTsKLSAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3Bl
Y0NlbGwpOworICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOworICAgICAgICBmb3JOb2Rl
KG5vZGUtPmNoaWxkMSgpKS5maWx0ZXIoU3BlY0NlbGwpOwogICAgICAgICAvLyBTYWRseSwgd2Ug
ZG9uJ3QgcHJvcGFnYXRlIHRoZSBmYWN0IHRoYXQgd2UndmUgZG9uZSBDaGVja0hhc0luc3RhbmNl
CiAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAgY2FzZSBJbnN0YW5jZU9mOgotICAg
ICAgICBub2RlLnNldENhbkV4aXQodHJ1ZSk7CisgICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1
ZSk7CiAgICAgICAgIC8vIEFnYWluLCBzYWRseSwgd2UgZG9uJ3QgcHJvcGFnYXRlIHRoZSBmYWN0
IHRoYXQgd2UndmUgZG9uZSBJbnN0YW5jZU9mCi0gICAgICAgIGlmICghKG1fZ3JhcGhbbm9kZS5j
aGlsZDEoKV0ucHJlZGljdGlvbigpICYgflNwZWNDZWxsKSAmJiAhKGZvck5vZGUobm9kZS5jaGls
ZDEoKSkubV90eXBlICYgflNwZWNDZWxsKSkKLSAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGls
ZDEoKSkuZmlsdGVyKFNwZWNDZWxsKTsKLSAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMigpKS5m
aWx0ZXIoU3BlY0NlbGwpOwotICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFNwZWNCb29s
ZWFuKTsKKyAgICAgICAgLy8gRklYTUU6IFRoaXMgYXBwZWFycyBicm9rZW46IENoZWNrSGFzSW5z
dGFuY2UgYWxyZWFkeSBkb2VzIGFuIHVuY29uZGl0aW9uYWwgY2VsbAorICAgICAgICAvLyBjaGVj
ay4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwNzQ3OQorICAgICAg
ICBpZiAoIShub2RlLT5jaGlsZDEoKS0+cHJlZGljdGlvbigpICYgflNwZWNDZWxsKSAmJiAhKGZv
ck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fdHlwZSAmIH5TcGVjQ2VsbCkpCisgICAgICAgICAgICBm
b3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5maWx0ZXIoU3BlY0NlbGwpOworICAgICAgICBmb3JOb2Rl
KG5vZGUtPmNoaWxkMigpKS5maWx0ZXIoU3BlY0NlbGwpOworICAgICAgICBmb3JOb2RlKG5vZGUp
LnNldChTcGVjQm9vbGVhbik7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAgY2Fz
ZSBQaGk6CiAgICAgY2FzZSBGbHVzaDoKLSAgICAgICAgbm9kZS5zZXRDYW5FeGl0KGZhbHNlKTsK
KyAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgCiAgICAgY2FzZSBCcmVha3BvaW50OgotICAgICAgICBub2RlLnNldENhbkV4aXQoZmFs
c2UpOworICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICAKICAgICBjYXNlIENhbGw6CkBAIC0xNzgyLDE4ICsxODAzLDE4IEBAIGJvb2wg
QWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICBjYXNlIFJlc29sdmVCYXNl
OgogICAgIGNhc2UgUmVzb2x2ZUJhc2VTdHJpY3RQdXQ6CiAgICAgY2FzZSBSZXNvbHZlR2xvYmFs
OgotICAgICAgICBub2RlLnNldENhbkV4aXQodHJ1ZSk7Ci0gICAgICAgIGNsb2JiZXJXb3JsZChu
b2RlLmNvZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7Ci0gICAgICAgIGZvck5vZGUobm9kZUluZGV4
KS5tYWtlVG9wKCk7CisgICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7CisgICAgICAgIGNs
b2JiZXJXb3JsZChub2RlLT5jb2RlT3JpZ2luLCBpbmRleEluQmxvY2spOworICAgICAgICBmb3JO
b2RlKG5vZGUpLm1ha2VUb3AoKTsKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIEdhcmJhZ2VW
YWx1ZToKLSAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUuY29kZU9yaWdpbiwgaW5kZXhJbkJsb2Nr
KTsKLSAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLm1ha2VUb3AoKTsKKyAgICAgICAgY2xvYmJl
cldvcmxkKG5vZGUtPmNvZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7CisgICAgICAgIGZvck5vZGUo
bm9kZSkubWFrZVRvcCgpOwogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgRm9yY2VPU1JFeGl0
OgotICAgICAgICBub2RlLnNldENhbkV4aXQodHJ1ZSk7CisgICAgICAgIG5vZGUtPnNldENhbkV4
aXQodHJ1ZSk7CiAgICAgICAgIG1faXNWYWxpZCA9IGZhbHNlOwogICAgICAgICBicmVhazsKICAg
ICAgICAgICAgIApAQCAtMTgwMSw3ICsxODIyLDcgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVj
dXRlKHVuc2lnbmVkIGluZAogICAgIGNhc2UgSW5saW5lU3RhcnQ6CiAgICAgY2FzZSBOb3A6CiAg
ICAgY2FzZSBDb3VudEV4ZWN1dGlvbjoKLSAgICAgICAgbm9kZS5zZXRDYW5FeGl0KGZhbHNlKTsK
KyAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgIGJyZWFrOwogICAgICAg
ICAKICAgICBjYXNlIExhc3ROb2RlVHlwZToKQEAgLTE4NTQsMTUgKzE4NzUsMTQgQEAgaW5saW5l
IHZvaWQgQWJzdHJhY3RTdGF0ZTo6Y2xvYmJlclN0cnVjdAogICAgIG1fZGlkQ2xvYmJlciA9IHRy
dWU7CiB9CiAKLWlubGluZSBib29sIEFic3RyYWN0U3RhdGU6Om1lcmdlU3RhdGVBdFRhaWwoQWJz
dHJhY3RWYWx1ZSYgZGVzdGluYXRpb24sIEFic3RyYWN0VmFsdWUmIGluVmFyaWFibGUsIE5vZGVJ
bmRleCBub2RlSW5kZXgpCitpbmxpbmUgYm9vbCBBYnN0cmFjdFN0YXRlOjptZXJnZVN0YXRlQXRU
YWlsKEFic3RyYWN0VmFsdWUmIGRlc3RpbmF0aW9uLCBBYnN0cmFjdFZhbHVlJiBpblZhcmlhYmxl
LCBOb2RlKiBub2RlKQogewotICAgIGlmIChub2RlSW5kZXggPT0gTm9Ob2RlKQorICAgIGlmICgh
bm9kZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAKICAgICBBYnN0cmFjdFZhbHVl
IHNvdXJjZTsKICAgICAKLSAgICBOb2RlJiB0YWlsTm9kZSA9IG1fZ3JhcGhbbm9kZUluZGV4XTsK
LSAgICBpZiAodGFpbE5vZGUudmFyaWFibGVBY2Nlc3NEYXRhKCktPmlzQ2FwdHVyZWQoKSkgewor
ICAgIGlmIChub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+aXNDYXB0dXJlZCgpKSB7CiAgICAg
ICAgIC8vIElmIGl0J3MgY2FwdHVyZWQgdGhlbiB3ZSBrbm93IHRoYXQgd2hhdGV2ZXIgdmFsdWUg
d2FzIHN0b3JlZCBpbnRvIHRoZSB2YXJpYWJsZSBsYXN0IGlzIHRoZQogICAgICAgICAvLyBvbmUg
d2UgY2FyZSBhYm91dC4gVGhpcyBpcyB0cnVlIGV2ZW4gaWYgdGhlIHZhcmlhYmxlIGF0IHRhaWwg
aXMgZGVhZCwgd2hpY2ggbWlnaHQgaGFwcGVuIGlmCiAgICAgICAgIC8vIHRoZSBsYXN0IHRoaW5n
IHdlIGRpZCB0byB0aGUgdmFyaWFibGUgd2FzIGEgR2V0TG9jYWwgYW5kIHRoZW4gZW5kZWQgdXAg
bm93IHVzaW5nIHRoZQpAQCAtMTg3NSwyNiArMTg5NSwyNSBAQCBpbmxpbmUgYm9vbCBBYnN0cmFj
dFN0YXRlOjptZXJnZVN0YXRlQXRUCiAgICAgICAgIGRhdGFMb2dGKCIgZnJvbSBsYXN0IGFjY2Vz
cyBkdWUgdG8gY2FwdHVyZWQgdmFyaWFibGUuXG4iKTsKICNlbmRpZgogICAgIH0gZWxzZSB7Ci0g
ICAgICAgIGlmICghdGFpbE5vZGUuc2hvdWxkR2VuZXJhdGUoKSkgeworICAgICAgICBpZiAoIW5v
ZGUtPnNob3VsZEdlbmVyYXRlKCkpIHsKICAgICAgICAgICAgIC8vIElmIHRoZSBub2RlIGF0IHRh
aWwgaXMgYSBHZXRMb2NhbCB0aGF0IGlzIGRlYWQsIHRoZW4gc2tpcCBpdCB0byBnZXQgdG8gdGhl
IFBoaS4KICAgICAgICAgICAgIC8vIFRoZSBQaGkgbWF5IGJlIGxpdmUuCi0gICAgICAgICAgICBp
ZiAodGFpbE5vZGUub3AoKSAhPSBHZXRMb2NhbCkKKyAgICAgICAgICAgIGlmIChub2RlLT5vcCgp
ICE9IEdldExvY2FsKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAg
IAotICAgICAgICAgICAgbm9kZUluZGV4ID0gdGFpbE5vZGUuY2hpbGQxKCkuaW5kZXgoKTsKLSAg
ICAgICAgICAgIEFTU0VSVChtX2dyYXBoW25vZGVJbmRleF0ub3AoKSA9PSBQaGkpOwotICAgICAg
ICAgICAgaWYgKCFtX2dyYXBoW25vZGVJbmRleF0uc2hvdWxkR2VuZXJhdGUoKSkKKyAgICAgICAg
ICAgIG5vZGUgPSBub2RlLT5jaGlsZDEoKS5ub2RlKCk7CisgICAgICAgICAgICBBU1NFUlQobm9k
ZS0+b3AoKSA9PSBQaGkpOworICAgICAgICAgICAgaWYgKCFub2RlLT5zaG91bGRHZW5lcmF0ZSgp
KQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgICAgICAKLSAg
ICAgICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhbbm9kZUluZGV4XTsKLSAgICAgICAgQVNTRVJUKG5v
ZGUuc2hvdWxkR2VuZXJhdGUoKSk7CisgICAgICAgIEFTU0VSVChub2RlLT5zaG91bGRHZW5lcmF0
ZSgpKTsKIAogI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKLSAgICAg
ICAgZGF0YUxvZ0YoIiAgICAgICAgICBJdCdzIGxpdmUsIG5vZGUgQCV1LlxuIiwgbm9kZUluZGV4
KTsKKyAgICAgICAgZGF0YUxvZ0YoIiAgICAgICAgICBJdCdzIGxpdmUsIG5vZGUgQCV1LlxuIiwg
bm9kZS0+aW5kZXgoKSk7CiAjZW5kaWYKICAgICAKLSAgICAgICAgc3dpdGNoIChub2RlLm9wKCkp
IHsKKyAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CiAgICAgICAgIGNhc2UgUGhpOgogICAg
ICAgICBjYXNlIFNldEFyZ3VtZW50OgogICAgICAgICBjYXNlIEZsdXNoOgpAQCAtMTkwOSw3ICsx
OTI4LDcgQEAgaW5saW5lIGJvb2wgQWJzdHJhY3RTdGF0ZTo6bWVyZ2VTdGF0ZUF0VAogICAgICAg
ICAgICAgCiAgICAgICAgIGNhc2UgR2V0TG9jYWw6CiAgICAgICAgICAgICAvLyBUaGUgYmxvY2sg
cmVmaW5lcyB0aGUgdmFsdWUgd2l0aCBhZGRpdGlvbmFsIHNwZWN1bGF0aW9ucy4KLSAgICAgICAg
ICAgIHNvdXJjZSA9IGZvck5vZGUobm9kZUluZGV4KTsKKyAgICAgICAgICAgIHNvdXJjZSA9IGZv
ck5vZGUobm9kZSk7CiAjaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQog
ICAgICAgICAgICAgZGF0YUxvZ0YoIiAgICAgICAgICBSZWZpbmluZyB0byAiKTsKICAgICAgICAg
ICAgIHNvdXJjZS5kdW1wKFdURjo6ZGF0YUZpbGUoKSk7CkBAIC0xOTIwLDExICsxOTM5LDExIEBA
IGlubGluZSBib29sIEFic3RyYWN0U3RhdGU6Om1lcmdlU3RhdGVBdFQKICAgICAgICAgY2FzZSBT
ZXRMb2NhbDoKICAgICAgICAgICAgIC8vIFRoZSBibG9jayBzZXRzIHRoZSB2YXJpYWJsZSwgYW5k
IHBvdGVudGlhbGx5IHJlZmluZXMgaXQsIGJvdGgKICAgICAgICAgICAgIC8vIGJlZm9yZSBhbmQg
YWZ0ZXIgc2V0dGluZyBpdC4KLSAgICAgICAgICAgIGlmIChub2RlLnZhcmlhYmxlQWNjZXNzRGF0
YSgpLT5zaG91bGRVc2VEb3VibGVGb3JtYXQoKSkgeworICAgICAgICAgICAgaWYgKG5vZGUtPnZh
cmlhYmxlQWNjZXNzRGF0YSgpLT5zaG91bGRVc2VEb3VibGVGb3JtYXQoKSkgewogICAgICAgICAg
ICAgICAgIC8vIEZJWE1FOiBUaGlzIHVubmVjZXNzYXJpbHkgbG9zZXMgcHJlY2lzaW9uLgogICAg
ICAgICAgICAgICAgIHNvdXJjZS5zZXQoU3BlY0RvdWJsZSk7CiAgICAgICAgICAgICB9IGVsc2UK
LSAgICAgICAgICAgICAgICBzb3VyY2UgPSBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpOworICAgICAg
ICAgICAgICAgIHNvdXJjZSA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpOwogI2lmIERGR19FTkFC
TEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKICAgICAgICAgICAgIGRhdGFMb2dGKCIgICAg
ICAgICAgU2V0dGluZyB0byAiKTsKICAgICAgICAgICAgIHNvdXJjZS5kdW1wKFdURjo6ZGF0YUZp
bGUoKSk7CkBAIC0xOTgyLDM1ICsyMDAxLDM0IEBAIGlubGluZSBib29sIEFic3RyYWN0U3RhdGU6
Om1lcmdlKEJhc2ljQmwKICAgICByZXR1cm4gY2hhbmdlZDsKIH0KIAotaW5saW5lIGJvb2wgQWJz
dHJhY3RTdGF0ZTo6bWVyZ2VUb1N1Y2Nlc3NvcnMoCi0gICAgR3JhcGgmIGdyYXBoLCBCYXNpY0Js
b2NrKiBiYXNpY0Jsb2NrKQoraW5saW5lIGJvb2wgQWJzdHJhY3RTdGF0ZTo6bWVyZ2VUb1N1Y2Nl
c3NvcnMoR3JhcGgmIGdyYXBoLCBCYXNpY0Jsb2NrKiBiYXNpY0Jsb2NrKQogewotICAgIE5vZGUm
IHRlcm1pbmFsID0gZ3JhcGhbYmFzaWNCbG9jay0+bGFzdCgpXTsKKyAgICBOb2RlKiB0ZXJtaW5h
bCA9IGJhc2ljQmxvY2stPmxhc3QoKTsKICAgICAKLSAgICBBU1NFUlQodGVybWluYWwuaXNUZXJt
aW5hbCgpKTsKKyAgICBBU1NFUlQodGVybWluYWwtPmlzVGVybWluYWwoKSk7CiAgICAgCi0gICAg
c3dpdGNoICh0ZXJtaW5hbC5vcCgpKSB7CisgICAgc3dpdGNoICh0ZXJtaW5hbC0+b3AoKSkgewog
ICAgIGNhc2UgSnVtcDogewogICAgICAgICBBU1NFUlQoYmFzaWNCbG9jay0+Y2ZhQnJhbmNoRGly
ZWN0aW9uID09IEludmFsaWRCcmFuY2hEaXJlY3Rpb24pOwogI2lmIERGR19FTkFCTEUoREVCVUdf
UFJPUEFHQVRJT05fVkVSQk9TRSkKICAgICAgICAgZGF0YUxvZ0YoIiAgICAgICAgTWVyZ2luZyB0
byBibG9jayAjJXUuXG4iLCB0ZXJtaW5hbC50YWtlbkJsb2NrSW5kZXgoKSk7CiAjZW5kaWYKLSAg
ICAgICAgcmV0dXJuIG1lcmdlKGJhc2ljQmxvY2ssIGdyYXBoLm1fYmxvY2tzW3Rlcm1pbmFsLnRh
a2VuQmxvY2tJbmRleCgpXS5nZXQoKSk7CisgICAgICAgIHJldHVybiBtZXJnZShiYXNpY0Jsb2Nr
LCBncmFwaC5tX2Jsb2Nrc1t0ZXJtaW5hbC0+dGFrZW5CbG9ja0luZGV4KCldLmdldCgpKTsKICAg
ICB9CiAgICAgICAgIAogICAgIGNhc2UgQnJhbmNoOiB7CiAgICAgICAgIEFTU0VSVChiYXNpY0Js
b2NrLT5jZmFCcmFuY2hEaXJlY3Rpb24gIT0gSW52YWxpZEJyYW5jaERpcmVjdGlvbik7CiAgICAg
ICAgIGJvb2wgY2hhbmdlZCA9IGZhbHNlOwogI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJ
T05fVkVSQk9TRSkKLSAgICAgICAgZGF0YUxvZ0YoIiAgICAgICAgTWVyZ2luZyB0byBibG9jayAj
JXUuXG4iLCB0ZXJtaW5hbC50YWtlbkJsb2NrSW5kZXgoKSk7CisgICAgICAgIGRhdGFMb2dGKCIg
ICAgICAgIE1lcmdpbmcgdG8gYmxvY2sgIyV1LlxuIiwgdGVybWluYWwtPnRha2VuQmxvY2tJbmRl
eCgpKTsKICNlbmRpZgogICAgICAgICBpZiAoYmFzaWNCbG9jay0+Y2ZhQnJhbmNoRGlyZWN0aW9u
ICE9IFRha2VGYWxzZSkKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2UoYmFzaWNCbG9jaywg
Z3JhcGgubV9ibG9ja3NbdGVybWluYWwudGFrZW5CbG9ja0luZGV4KCldLmdldCgpKTsKKyAgICAg
ICAgICAgIGNoYW5nZWQgfD0gbWVyZ2UoYmFzaWNCbG9jaywgZ3JhcGgubV9ibG9ja3NbdGVybWlu
YWwtPnRha2VuQmxvY2tJbmRleCgpXS5nZXQoKSk7CiAjaWYgREZHX0VOQUJMRShERUJVR19QUk9Q
QUdBVElPTl9WRVJCT1NFKQogICAgICAgICBkYXRhTG9nRigiICAgICAgICBNZXJnaW5nIHRvIGJs
b2NrICMldS5cbiIsIHRlcm1pbmFsLm5vdFRha2VuQmxvY2tJbmRleCgpKTsKICNlbmRpZgogICAg
ICAgICBpZiAoYmFzaWNCbG9jay0+Y2ZhQnJhbmNoRGlyZWN0aW9uICE9IFRha2VUcnVlKQotICAg
ICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZShiYXNpY0Jsb2NrLCBncmFwaC5tX2Jsb2Nrc1t0ZXJt
aW5hbC5ub3RUYWtlbkJsb2NrSW5kZXgoKV0uZ2V0KCkpOworICAgICAgICAgICAgY2hhbmdlZCB8
PSBtZXJnZShiYXNpY0Jsb2NrLCBncmFwaC5tX2Jsb2Nrc1t0ZXJtaW5hbC0+bm90VGFrZW5CbG9j
a0luZGV4KCldLmdldCgpKTsKICAgICAgICAgcmV0dXJuIGNoYW5nZWQ7CiAgICAgfQogICAgICAg
ICAKQEAgLTIwMjYsMTIgKzIwNDQsMTIgQEAgaW5saW5lIGJvb2wgQWJzdHJhY3RTdGF0ZTo6bWVy
Z2VUb1N1Y2NlcwogICAgIH0KIH0KIAotaW5saW5lIGJvb2wgQWJzdHJhY3RTdGF0ZTo6bWVyZ2VW
YXJpYWJsZUJldHdlZW5CbG9ja3MoQWJzdHJhY3RWYWx1ZSYgZGVzdGluYXRpb24sIEFic3RyYWN0
VmFsdWUmIHNvdXJjZSwgTm9kZUluZGV4IGRlc3RpbmF0aW9uTm9kZUluZGV4LCBOb2RlSW5kZXgg
c291cmNlTm9kZUluZGV4KQoraW5saW5lIGJvb2wgQWJzdHJhY3RTdGF0ZTo6bWVyZ2VWYXJpYWJs
ZUJldHdlZW5CbG9ja3MoQWJzdHJhY3RWYWx1ZSYgZGVzdGluYXRpb24sIEFic3RyYWN0VmFsdWUm
IHNvdXJjZSwgTm9kZSogZGVzdGluYXRpb25Ob2RlLCBOb2RlKiBzb3VyY2VOb2RlKQogewotICAg
IGlmIChkZXN0aW5hdGlvbk5vZGVJbmRleCA9PSBOb05vZGUpCisgICAgaWYgKCFkZXN0aW5hdGlv
bk5vZGUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKLSAgICBBU1NFUlRfVU5VU0VEKHNv
dXJjZU5vZGVJbmRleCwgc291cmNlTm9kZUluZGV4ICE9IE5vTm9kZSk7CisgICAgQVNTRVJUX1VO
VVNFRChzb3VyY2VOb2RlLCBzb3VyY2VOb2RlKTsKICAgICAKICAgICAvLyBGSVhNRTogV2UgY291
bGQgZG8gc29tZSBzcGFyc2UgY29uZGl0aW9uYWwgcHJvcGFnYXRpb24gaGVyZSEKICAgICAKQEAg
LTIwNDIsMTUgKzIwNjAsMTUgQEAgdm9pZCBBYnN0cmFjdFN0YXRlOjpkdW1wKFByaW50U3RyZWFt
JiBvdQogewogICAgIGJvb2wgZmlyc3QgPSB0cnVlOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgbV9ibG9jay0+c2l6ZSgpOyArK2kpIHsKLSAgICAgICAgTm9kZUluZGV4IGluZGV4ID0gbV9i
bG9jay0+YXQoaSk7Ci0gICAgICAgIEFic3RyYWN0VmFsdWUmIHZhbHVlID0gZm9yTm9kZShpbmRl
eCk7CisgICAgICAgIE5vZGUqIG5vZGUgPSBtX2Jsb2NrLT5hdChpKTsKKyAgICAgICAgQWJzdHJh
Y3RWYWx1ZSYgdmFsdWUgPSBmb3JOb2RlKG5vZGUpOwogICAgICAgICBpZiAodmFsdWUuaXNDbGVh
cigpKQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIGlmIChmaXJzdCkKICAgICAgICAg
ICAgIGZpcnN0ID0gZmFsc2U7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIG91dC5wcmludGYo
IiAiKTsKLSAgICAgICAgb3V0LnByaW50ZigiQCVsdToiLCBzdGF0aWNfY2FzdDx1bnNpZ25lZCBs
b25nPihpbmRleCkpOworICAgICAgICBvdXQucHJpbnRmKCJAJWx1OiIsIHN0YXRpY19jYXN0PHVu
c2lnbmVkIGxvbmc+KG5vZGUtPmluZGV4KCkpKTsKICAgICAgICAgdmFsdWUuZHVtcChvdXQpOwog
ICAgIH0KIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RTdGF0
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RT
dGF0ZS5oCShyZXZpc2lvbiAxNDA5MDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0Fic3RyYWN0U3RhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTEsIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEyLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNzIsOCArNzIsOCBA
QCBzdHJ1Y3QgQmFzaWNCbG9jazsKIC8vIEFic3RyYWN0U3RhdGUgc3RhdGUoY29kZUJsb2NrLCBn
cmFwaCk7CiAvLyBzdGF0ZS5iZWdpbkJhc2ljQmxvY2soYmFzaWNCbG9jayk7CiAvLyBib29sIGVu
ZFJlYWNoZWQgPSB0cnVlOwotLy8gZm9yIChOb2RlSW5kZXggaWR4ID0gYmFzaWNCbG9jay5iZWdp
bjsgaWR4IDwgYmFzaWNCbG9jay5lbmQ7ICsraWR4KSB7Ci0vLyAgICAgaWYgKCFzdGF0ZS5leGVj
dXRlKGlkeCkpCisvLyBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYmFzaWNCbG9jay0+c2l6ZSgp
OyArK2kpIHsKKy8vICAgICBpZiAoIXN0YXRlLmV4ZWN1dGUoaSkpCiAvLyAgICAgICAgIGJyZWFr
OwogLy8gfQogLy8gYm9vbCByZXN1bHQgPSBzdGF0ZS5lbmRCYXNpY0Jsb2NrKDxlaXRoZXIgTWVy
Z2Ugb3IgRG9udE1lcmdlPik7CkBAIC05NywxNCArOTcsMTQgQEAgcHVibGljOgogICAgIAogICAg
IH5BYnN0cmFjdFN0YXRlKCk7CiAgICAgCi0gICAgQWJzdHJhY3RWYWx1ZSYgZm9yTm9kZShOb2Rl
SW5kZXggbm9kZUluZGV4KQorICAgIEFic3RyYWN0VmFsdWUmIGZvck5vZGUoTm9kZSogbm9kZSkK
ICAgICB7Ci0gICAgICAgIHJldHVybiBtX2dyYXBoW25vZGVJbmRleF0udmFsdWU7CisgICAgICAg
IHJldHVybiBub2RlLT52YWx1ZTsKICAgICB9CiAgICAgCi0gICAgQWJzdHJhY3RWYWx1ZSYgZm9y
Tm9kZShFZGdlIG5vZGVVc2UpCisgICAgQWJzdHJhY3RWYWx1ZSYgZm9yTm9kZShFZGdlIGVkZ2Up
CiAgICAgewotICAgICAgICByZXR1cm4gZm9yTm9kZShub2RlVXNlLmluZGV4KCkpOworICAgICAg
ICByZXR1cm4gZm9yTm9kZShlZGdlLm5vZGUoKSk7CiAgICAgfQogICAgIAogICAgIE9wZXJhbmRz
PEFic3RyYWN0VmFsdWU+JiB2YXJpYWJsZXMoKQpAQCAtMTg3LDM2ICsxODcsMzYgQEAgcHJpdmF0
ZToKICAgICB2b2lkIGNsb2JiZXJDYXB0dXJlZFZhcnMoY29uc3QgQ29kZU9yaWdpbiYpOwogICAg
IHZvaWQgY2xvYmJlclN0cnVjdHVyZXModW5zaWduZWQgaW5kZXhJbkJsb2NrKTsKICAgICAKLSAg
ICBib29sIG1lcmdlU3RhdGVBdFRhaWwoQWJzdHJhY3RWYWx1ZSYgZGVzdGluYXRpb24sIEFic3Ry
YWN0VmFsdWUmIGluVmFyaWFibGUsIE5vZGVJbmRleCk7CisgICAgYm9vbCBtZXJnZVN0YXRlQXRU
YWlsKEFic3RyYWN0VmFsdWUmIGRlc3RpbmF0aW9uLCBBYnN0cmFjdFZhbHVlJiBpblZhcmlhYmxl
LCBOb2RlKik7CiAgICAgCi0gICAgc3RhdGljIGJvb2wgbWVyZ2VWYXJpYWJsZUJldHdlZW5CbG9j
a3MoQWJzdHJhY3RWYWx1ZSYgZGVzdGluYXRpb24sIEFic3RyYWN0VmFsdWUmIHNvdXJjZSwgTm9k
ZUluZGV4IGRlc3RpbmF0aW9uTm9kZUluZGV4LCBOb2RlSW5kZXggc291cmNlTm9kZUluZGV4KTsK
KyAgICBzdGF0aWMgYm9vbCBtZXJnZVZhcmlhYmxlQmV0d2VlbkJsb2NrcyhBYnN0cmFjdFZhbHVl
JiBkZXN0aW5hdGlvbiwgQWJzdHJhY3RWYWx1ZSYgc291cmNlLCBOb2RlKiBkZXN0aW5hdGlvbk5v
ZGUsIE5vZGUqIHNvdXJjZU5vZGUpOwogICAgIAotICAgIHZvaWQgc3BlY3VsYXRlSW50MzJVbmFy
eShOb2RlJiBub2RlLCBib29sIGZvcmNlQ2FuRXhpdCA9IGZhbHNlKQorICAgIHZvaWQgc3BlY3Vs
YXRlSW50MzJVbmFyeShOb2RlKiBub2RlLCBib29sIGZvcmNlQ2FuRXhpdCA9IGZhbHNlKQogICAg
IHsKLSAgICAgICAgQWJzdHJhY3RWYWx1ZSYgY2hpbGRWYWx1ZSA9IGZvck5vZGUobm9kZS5jaGls
ZDEoKSk7Ci0gICAgICAgIG5vZGUuc2V0Q2FuRXhpdChmb3JjZUNhbkV4aXQgfHwgIWlzSW50MzJT
cGVjdWxhdGlvbihjaGlsZFZhbHVlLm1fdHlwZSkpOworICAgICAgICBBYnN0cmFjdFZhbHVlJiBj
aGlsZFZhbHVlID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIG5vZGUtPnNldENh
bkV4aXQoZm9yY2VDYW5FeGl0IHx8ICFpc0ludDMyU3BlY3VsYXRpb24oY2hpbGRWYWx1ZS5tX3R5
cGUpKTsKICAgICAgICAgY2hpbGRWYWx1ZS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICB9CiAgICAg
Ci0gICAgdm9pZCBzcGVjdWxhdGVOdW1iZXJVbmFyeShOb2RlJiBub2RlKQorICAgIHZvaWQgc3Bl
Y3VsYXRlTnVtYmVyVW5hcnkoTm9kZSogbm9kZSkKICAgICB7Ci0gICAgICAgIEFic3RyYWN0VmFs
dWUmIGNoaWxkVmFsdWUgPSBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpOwotICAgICAgICBub2RlLnNl
dENhbkV4aXQoIWlzTnVtYmVyU3BlY3VsYXRpb24oY2hpbGRWYWx1ZS5tX3R5cGUpKTsKKyAgICAg
ICAgQWJzdHJhY3RWYWx1ZSYgY2hpbGRWYWx1ZSA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpOwor
ICAgICAgICBub2RlLT5zZXRDYW5FeGl0KCFpc051bWJlclNwZWN1bGF0aW9uKGNoaWxkVmFsdWUu
bV90eXBlKSk7CiAgICAgICAgIGNoaWxkVmFsdWUuZmlsdGVyKFNwZWNOdW1iZXIpOwogICAgIH0K
ICAgICAKLSAgICB2b2lkIHNwZWN1bGF0ZUJvb2xlYW5VbmFyeShOb2RlJiBub2RlKQorICAgIHZv
aWQgc3BlY3VsYXRlQm9vbGVhblVuYXJ5KE5vZGUqIG5vZGUpCiAgICAgewotICAgICAgICBBYnN0
cmFjdFZhbHVlJiBjaGlsZFZhbHVlID0gZm9yTm9kZShub2RlLmNoaWxkMSgpKTsKLSAgICAgICAg
bm9kZS5zZXRDYW5FeGl0KCFpc0Jvb2xlYW5TcGVjdWxhdGlvbihjaGlsZFZhbHVlLm1fdHlwZSkp
OworICAgICAgICBBYnN0cmFjdFZhbHVlJiBjaGlsZFZhbHVlID0gZm9yTm9kZShub2RlLT5jaGls
ZDEoKSk7CisgICAgICAgIG5vZGUtPnNldENhbkV4aXQoIWlzQm9vbGVhblNwZWN1bGF0aW9uKGNo
aWxkVmFsdWUubV90eXBlKSk7CiAgICAgICAgIGNoaWxkVmFsdWUuZmlsdGVyKFNwZWNCb29sZWFu
KTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBzcGVjdWxhdGVJbnQzMkJpbmFyeShOb2RlJiBub2Rl
LCBib29sIGZvcmNlQ2FuRXhpdCA9IGZhbHNlKQorICAgIHZvaWQgc3BlY3VsYXRlSW50MzJCaW5h
cnkoTm9kZSogbm9kZSwgYm9vbCBmb3JjZUNhbkV4aXQgPSBmYWxzZSkKICAgICB7Ci0gICAgICAg
IEFic3RyYWN0VmFsdWUmIGNoaWxkVmFsdWUxID0gZm9yTm9kZShub2RlLmNoaWxkMSgpKTsKLSAg
ICAgICAgQWJzdHJhY3RWYWx1ZSYgY2hpbGRWYWx1ZTIgPSBmb3JOb2RlKG5vZGUuY2hpbGQyKCkp
OwotICAgICAgICBub2RlLnNldENhbkV4aXQoCisgICAgICAgIEFic3RyYWN0VmFsdWUmIGNoaWxk
VmFsdWUxID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIEFic3RyYWN0VmFsdWUm
IGNoaWxkVmFsdWUyID0gZm9yTm9kZShub2RlLT5jaGlsZDIoKSk7CisgICAgICAgIG5vZGUtPnNl
dENhbkV4aXQoCiAgICAgICAgICAgICBmb3JjZUNhbkV4aXQKICAgICAgICAgICAgIHx8ICFpc0lu
dDMyU3BlY3VsYXRpb24oY2hpbGRWYWx1ZTEubV90eXBlKQogICAgICAgICAgICAgfHwgIWlzSW50
MzJTcGVjdWxhdGlvbihjaGlsZFZhbHVlMi5tX3R5cGUpKTsKQEAgLTIyNCwxMSArMjI0LDExIEBA
IHByaXZhdGU6CiAgICAgICAgIGNoaWxkVmFsdWUyLmZpbHRlcihTcGVjSW50MzIpOwogICAgIH0K
ICAgICAKLSAgICB2b2lkIHNwZWN1bGF0ZU51bWJlckJpbmFyeShOb2RlJiBub2RlKQorICAgIHZv
aWQgc3BlY3VsYXRlTnVtYmVyQmluYXJ5KE5vZGUqIG5vZGUpCiAgICAgewotICAgICAgICBBYnN0
cmFjdFZhbHVlJiBjaGlsZFZhbHVlMSA9IGZvck5vZGUobm9kZS5jaGlsZDEoKSk7Ci0gICAgICAg
IEFic3RyYWN0VmFsdWUmIGNoaWxkVmFsdWUyID0gZm9yTm9kZShub2RlLmNoaWxkMigpKTsKLSAg
ICAgICAgbm9kZS5zZXRDYW5FeGl0KAorICAgICAgICBBYnN0cmFjdFZhbHVlJiBjaGlsZFZhbHVl
MSA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBBYnN0cmFjdFZhbHVlJiBjaGls
ZFZhbHVlMiA9IGZvck5vZGUobm9kZS0+Y2hpbGQyKCkpOworICAgICAgICBub2RlLT5zZXRDYW5F
eGl0KAogICAgICAgICAgICAgIWlzTnVtYmVyU3BlY3VsYXRpb24oY2hpbGRWYWx1ZTEubV90eXBl
KQogICAgICAgICAgICAgfHwgIWlzTnVtYmVyU3BlY3VsYXRpb24oY2hpbGRWYWx1ZTIubV90eXBl
KSk7CiAgICAgICAgIGNoaWxkVmFsdWUxLmZpbHRlcihTcGVjTnVtYmVyKTsKQEAgLTI0MCw5ICsy
NDAsOSBAQCBwcml2YXRlOgogICAgICAgICBEZWZpbml0ZWx5RmFsc2UsCiAgICAgICAgIERlZmlu
aXRlbHlUcnVlCiAgICAgfTsKLSAgICBCb29sZWFuUmVzdWx0IGJvb2xlYW5SZXN1bHQoTm9kZSYs
IEFic3RyYWN0VmFsdWUmKTsKKyAgICBCb29sZWFuUmVzdWx0IGJvb2xlYW5SZXN1bHQoTm9kZSos
IEFic3RyYWN0VmFsdWUmKTsKICAgICAKLSAgICBib29sIHRyeVNldENvbnN0YW50KE5vZGVJbmRl
eCBub2RlSW5kZXgsIEpTVmFsdWUgdmFsdWUpCisgICAgYm9vbCB0cnlTZXRDb25zdGFudChOb2Rl
KiBub2RlLCBKU1ZhbHVlIHZhbHVlKQogICAgIHsKICAgICAgICAgLy8gTWFrZSBzdXJlIHdlIGRv
bid0IGNvbnN0YW50IGZvbGQgc29tZXRoaW5nIHRoYXQgd2lsbCBwcm9kdWNlIHZhbHVlcyB0aGF0
IGNvbnRyYXZlbmUKICAgICAgICAgLy8gcHJlZGljdGlvbnMuIElmIHRoYXQgaGFwcGVucyB0aGVu
IHdlIGtub3cgdGhhdCB0aGUgY29kZSB3aWxsIE9TUiBleGl0LCBmb3JjaW5nCkBAIC0yNTEsMTEg
KzI1MSwxMSBAQCBwcml2YXRlOgogICAgICAgICAvLyBsb3Qgb2Ygc3VidGxlIGNvZGUgdGhhdCBh
c3N1bWVzIHRoYXQKICAgICAgICAgLy8gc3BlY3VsYXRpb25Gcm9tVmFsdWUoanNDb25zdGFudCkg
PT0ganNDb25zdGFudC5wcmVkaWN0aW9uKCkuICJIYXJkZW5pbmciIHRoYXQgY29kZQogICAgICAg
ICAvLyBpcyBwcm9iYWJseSBsZXNzIHNhbmUgdGhhbiBqdXN0IHB1bGxpbmcgYmFjayBvbiBjb25z
dGFudCBmb2xkaW5nLgotICAgICAgICBTcGVjdWxhdGVkVHlwZSBvbGRUeXBlID0gbV9ncmFwaFtu
b2RlSW5kZXhdLnByZWRpY3Rpb24oKTsKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUgb2xkVHlwZSA9
IG5vZGUtPnByZWRpY3Rpb24oKTsKICAgICAgICAgaWYgKG1lcmdlU3BlY3VsYXRpb25zKHNwZWN1
bGF0aW9uRnJvbVZhbHVlKHZhbHVlKSwgb2xkVHlwZSkgIT0gb2xkVHlwZSkKICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICAgICAgCi0gICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQo
dmFsdWUpOworICAgICAgICBmb3JOb2RlKG5vZGUpLnNldCh2YWx1ZSk7CiAgICAgICAgIHJldHVy
biB0cnVlOwogICAgIH0KICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
QWJzdHJhY3RWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQWJzdHJhY3RWYWx1ZS5oCShyZXZpc2lvbiAxNDA5MDQpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0Fic3RyYWN0VmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEyLCAyMDEzIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
NDE4LDYgKzQxOCw4IEBAIHN0cnVjdCBBYnN0cmFjdFZhbHVlIHsKICAgICAvLyAgICBjaGFuZ2Ug
eCdzIHN0cnVjdHVyZSBhbmQgd2UgaGF2ZSBubyB3YXkgb2YgcHJvdmluZyBvdGhlcndpc2UsIGJ1
dAogICAgIC8vICAgIHgncyBtX2Z1dHVyZVBvc3NpYmxlU3RydWN0dXJlIHdpbGwgYmUgd2hhdGV2
ZXIgc3RydWN0dXJlIHdlIGhhZCBjaGVja2VkCiAgICAgLy8gICAgd2hlbiBnZXR0aW5nIHByb3Bl
cnR5ICdmJy4KKyAgICAKKyAgICAvLyBOQi4gQWxsIGZpZWxkcyBpbiB0aGlzIHN0cnVjdCBtdXN0
IGhhdmUgdHJpdmlhbCBkZXN0cnVjdG9ycy4KIAogICAgIC8vIFRoaXMgaXMgYSBwcm92ZW4gY29u
c3RyYWludCBvbiB0aGUgc3RydWN0dXJlcyB0aGF0IHRoaXMgdmFsdWUgY2FuIGhhdmUgcmlnaHQK
ICAgICAvLyBub3cuIFRoZSBzdHJ1Y3R1cmUgb2YgdGhlIGN1cnJlbnQgdmFsdWUgbXVzdCBiZWxv
bmcgdG8gdGhpcyBzZXQuIFRoZSBzZXQgbWF5CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0FkamFjZW5jeUxpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0FkamFjZW5jeUxpc3QuaAkocmV2aXNpb24gMTQwOTA0KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdBZGphY2VuY3lMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTU3LDcg
KzU3LDcgQEAgcHVibGljOgogICAgICAgICB9CiAgICAgfQogICAgIAotICAgIEFkamFjZW5jeUxp
c3QoS2luZCBraW5kLCBOb2RlSW5kZXggY2hpbGQxLCBOb2RlSW5kZXggY2hpbGQyLCBOb2RlSW5k
ZXggY2hpbGQzKQorICAgIEFkamFjZW5jeUxpc3QoS2luZCBraW5kLCBOb2RlKiBjaGlsZDEsIE5v
ZGUqIGNoaWxkMiwgTm9kZSogY2hpbGQzKQogI2lmICFBU1NFUlRfRElTQUJMRUQKICAgICAgICAg
OiBtX2tpbmQoRml4ZWQpCiAjZW5kaWYKQEAgLTExOCw3ICsxMTgsNyBAQCBwdWJsaWM6CiAgICAg
ICAgIGNoaWxkKDIpID0gY2hpbGQzOwogICAgIH0KICAgICAKLSAgICB2b2lkIGluaXRpYWxpemUo
Tm9kZUluZGV4IGNoaWxkMSA9IE5vTm9kZSwgTm9kZUluZGV4IGNoaWxkMiA9IE5vTm9kZSwgTm9k
ZUluZGV4IGNoaWxkMyA9IE5vTm9kZSkKKyAgICB2b2lkIGluaXRpYWxpemUoTm9kZSogY2hpbGQx
ID0gMCwgTm9kZSogY2hpbGQyID0gMCwgTm9kZSogY2hpbGQzID0gMCkKICAgICB7CiAgICAgICAg
IGluaXRpYWxpemUoRWRnZShjaGlsZDEpLCBFZGdlKGNoaWxkMiksIEVkZ2UoY2hpbGQzKSk7CiAg
ICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBbGxvY2F0b3IuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FsbG9jYXRvci5oCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBbGxvY2F0b3IuaAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSwyMzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdBbGxvY2F0b3JfaAorI2RlZmluZSBERkdBbGxv
Y2F0b3JfaAorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNpZiBFTkFCTEUoREZHX0pJ
VCkKKworI2luY2x1ZGUgPHd0Zi9QYWdlQWxsb2NhdGlvbkFsaWduZWQuaD4KKworbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBERkcgeworCisvLyBDdXN0b20gcG9vbCBhbGxvY2F0b3IgZm9yIGV4
YWN0bHkgb25lIHR5cGUgKHR5cGUgVCkuIEl0IGhhcyBmYXN0IChPKDEpLCBvbmx5IGEgZmV3Cisv
LyBpbnN0cnVjdGlvbnMpIGFsbG9jYXRvciwgYW5kIGEgc2ltaWxhcmx5IGZhc3QgZnJlZSgpLiBS
ZWN5Y2xpbmcgd29ya3MgaWYgZWl0aGVyIG9mCisvLyB0aGUgZm9sbG93aW5nIGlzIHRydWU6Cisv
LyAtIFQgaGFzIGEgdHJpdmlhbCBkZXN0cnVjdG9yLiBJbiB0aGF0IGNhc2UgeW91IGRvbid0IGhh
dmUgdG8gZXZlciBjYWxsIGZyZWUoKSBvbgorLy8gICBhbnl0aGluZy4gWW91IGNhbiBqdXN0IGNh
bGwgZnJlZUFsbCgpIGluc3RlYWQuCisvLyAtIFlvdSBjYWxsIGZyZWUoKSBvbiBhbGwgVCdzIHRo
YXQgeW91IGFsbG9jYXRlZCwgYW5kIG5ldmVyIHVzZSBmcmVlQWxsKCkuCisKK3RlbXBsYXRlPHR5
cGVuYW1lIFQ+CitjbGFzcyBBbGxvY2F0b3IgeworcHVibGljOgorICAgIEFsbG9jYXRvcigpOwor
ICAgIH5BbGxvY2F0b3IoKTsKKyAgICAKKyAgICB2b2lkKiBhbGxvY2F0ZSgpOyAvLyBVc2UgcGxh
Y2VtZW50IG5ldyB0byBhbGxvY2F0ZSwgYW5kIGF2b2lkIHVzaW5nIHRoaXMgbWV0aG9kLgorICAg
IHZvaWQgZnJlZShUKik7IC8vIENhbGwgdGhpcyBtZXRob2QgdG8gZGVsZXRlOyBuZXZlciB1c2Ug
J2RlbGV0ZScgZGlyZWN0bHkuCisgICAgCisgICAgdm9pZCBmcmVlQWxsKCk7IC8vIE9ubHkgY2Fs
bCB0aGlzIGlmIFQgaGFzIGEgdHJpdmlhbCBkZXN0cnVjdG9yLgorICAgIHZvaWQgcmVzZXQoKTsg
Ly8gTGlrZSBmcmVlQWxsKCksIGJ1dCBhbHNvIHJldHVybnMgYWxsIG1lbW9yeSB0byB0aGUgT1Mu
CisgICAgCisgICAgdW5zaWduZWQgaW5kZXhPZihUKik7CisgICAgCisgICAgc3RhdGljIEFsbG9j
YXRvciogYWxsb2NhdG9yT2YoVCopOworICAgIAorcHJpdmF0ZToKKyAgICB2b2lkKiBidW1wQWxs
b2NhdGUoKTsKKyAgICB2b2lkKiBmcmVlTGlzdEFsbG9jYXRlKCk7CisgICAgdm9pZCogYWxsb2Nh
dGVTbG93KCk7CisKKyAgICBzdHJ1Y3QgUmVnaW9uIHsKKyAgICAgICAgc3RhdGljIHNpemVfdCBz
aXplKCkgeyByZXR1cm4gNjQgKiBLQjsgfQorICAgICAgICBzdGF0aWMgc2l6ZV90IGhlYWRlclNp
emUoKSB7IHJldHVybiBzdGQ6Om1heChzaXplb2YoUmVnaW9uKSwgc2l6ZW9mKFQpKTsgfQorICAg
ICAgICBzdGF0aWMgdW5zaWduZWQgbnVtYmVyT2ZUaGluZ3NQZXJSZWdpb24oKSB7IHJldHVybiAo
c2l6ZSgpIC0gaGVhZGVyU2l6ZSgpKSAvIHNpemVvZihUKTsgfQorICAgICAgICBUKiBkYXRhKCkg
eyByZXR1cm4gYml0d2lzZV9jYXN0PFQqPihiaXR3aXNlX2Nhc3Q8Y2hhcio+KHRoaXMpICsgaGVh
ZGVyU2l6ZSgpKTsgfQorICAgICAgICBib29sIGlzSW5UaGlzUmVnaW9uKFQqIHBvaW50ZXIpIHsg
cmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkPihwb2ludGVyIC0gZGF0YSgpKSA8IG51bWJlck9m
VGhpbmdzUGVyUmVnaW9uKCk7IH0KKyAgICAgICAgUmVnaW9uKiByZWdpb25Gb3IoVCogcG9pbnRl
cikgeyByZXR1cm4gYml0d2lzZV9jYXN0PFJlZ2lvbio+KGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+
KHBvaW50ZXIpICYgfihzaXplKCkgLSAxKSk7IH0KKyAgICAgICAgCisgICAgICAgIFBhZ2VBbGxv
Y2F0aW9uQWxpZ25lZCBtX2FsbG9jYXRpb247CisgICAgICAgIEFsbG9jYXRvciogbV9hbGxvY2F0
b3I7CisgICAgICAgIFJlZ2lvbiogbV9uZXh0OworICAgIH07CisgICAgCisgICAgdm9pZCBmcmVl
UmVnaW9uc1N0YXJ0aW5nQXQoQWxsb2NhdG9yOjpSZWdpb24qKTsKKyAgICB2b2lkIHN0YXJ0QnVt
cGluZ0luKEFsbG9jYXRvcjo6UmVnaW9uKik7CisgICAgCisgICAgUmVnaW9uKiBtX3JlZ2lvbkhl
YWQ7CisgICAgdm9pZCoqIG1fZnJlZUxpc3RIZWFkOworICAgIFQqIG1fYnVtcEVuZDsKKyAgICB1
bnNpZ25lZCBtX2J1bXBSZW1haW5pbmc7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgoraW5s
aW5lIEFsbG9jYXRvcjxUPjo6QWxsb2NhdG9yKCkKKyAgICA6IG1fcmVnaW9uSGVhZCgwKQorICAg
ICwgbV9mcmVlTGlzdEhlYWQoMCkKKyAgICAsIG1fYnVtcFJlbWFpbmluZygwKQoreworfQorCit0
ZW1wbGF0ZTx0eXBlbmFtZSBUPgoraW5saW5lIEFsbG9jYXRvcjxUPjo6fkFsbG9jYXRvcigpCit7
CisgICAgcmVzZXQoKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK0FMV0FZU19JTkxJTkUg
dm9pZCogQWxsb2NhdG9yPFQ+OjphbGxvY2F0ZSgpCit7CisgICAgdm9pZCogcmVzdWx0ID0gYnVt
cEFsbG9jYXRlKCk7CisgICAgaWYgKExJS0VMWSghIXJlc3VsdCkpCisgICAgICAgIHJldHVybiBy
ZXN1bHQ7CisgICAgcmV0dXJuIGZyZWVMaXN0QWxsb2NhdGUoKTsKK30KKwordGVtcGxhdGU8dHlw
ZW5hbWUgVD4KK3ZvaWQgQWxsb2NhdG9yPFQ+OjpmcmVlKFQqIG9iamVjdCkKK3sKKyAgICBvYmpl
Y3QtPn5UKCk7CisgICAgCisgICAgdm9pZCoqIGNlbGwgPSBiaXR3aXNlX2Nhc3Q8dm9pZCoqPihv
YmplY3QpOworICAgICpjZWxsID0gbV9mcmVlTGlzdEhlYWQ7CisgICAgbV9mcmVlTGlzdEhlYWQg
PSBjZWxsOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgordm9pZCBBbGxvY2F0b3I8VD46OmZy
ZWVBbGwoKQoreworICAgIGlmICghbV9yZWdpb25IZWFkKSB7CisgICAgICAgIEFTU0VSVCghbV9i
dW1wUmVtYWluaW5nKTsKKyAgICAgICAgQVNTRVJUKCFtX2ZyZWVMaXN0SGVhZCk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisgICAgCisgICAgLy8gU2luY2UgdGhlIGNhbGxlciBpcyBvcHRpbmcg
b3V0IG9mIGNhbGxpbmcgdGhlIGRlc3RydWN0b3IgZm9yIGFueSBhbGxvY2F0ZWQgdGhpbmcsCisg
ICAgLy8gd2UgaGF2ZSB0d28gY2hvaWNlcywgcGx1cyBhIGNvbnRpbnV1bSBiZXR3ZWVuOiB3ZSBj
YW4gZWl0aGVyIGp1c3QgZGVsZXRlIGFsbCByZWdpb25zCisgICAgLy8gKGkuZS4gY2FsbCByZXNl
dCgpKSwgb3Igd2UgY2FuIG1ha2UgYWxsIHJlZ2lvbnMgYXZhaWxhYmxlIGZvciByZXVzZS4gV2Ug
ZG8gc29tZXRoaW5nCisgICAgLy8gdGhhdCBvcHRpbWl6ZXMgZm9yIChhKSBzcGVlZCBvZiBmcmVl
QWxsKCksIChiKSB0aGUgYXNzdW1wdGlvbiB0aGF0IGlmIHRoZSB1c2VyIGNhbGxzCisgICAgLy8g
ZnJlZUFsbCgpIHRoZW4gdGhleSB3aWxsIHByb2JhYmx5IGJlIGNhbGxpbmcgYWxsb2NhdGUoKSBp
biB0aGUgbmVhciBmdXR1cmUuIE5hbWVseSwKKyAgICAvLyB3ZSBmcmVlIGFsbCBidXQgb25lIHJl
Z2lvbiwgYW5kIG1ha2UgdGhlIHJlbWFpbmluZyByZWdpb24gYSBidW1wIGFsbG9jYXRpb24gcmVn
aW9uLgorICAgIAorICAgIGZvciAoUmVnaW9uKiByZWdpb24gPSBtX3JlZ2lvbkhlYWQtPm1fbmV4
dDsgcmVnaW9uOyByZWdpb24gPSByZWdpb24tPm1fbmV4dCkKKyAgICAgICAgYnVpbGRGcmVlTGlz
dEluKHJlZ2lvbik7CisgICAgCisgICAgbV9yZWdpb25IZWFkLT5tX25leHQgPSAwOworICAgIG1f
ZnJlZUxpc3RIZWFkID0gMDsKKyAgICBzdGFydEJ1bXBpbmdJbihtX3JlZ2lvbkhlYWQpOworfQor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgordm9pZCBBbGxvY2F0b3I8VD46OnJlc2V0KCkKK3sKKyAg
ICBmcmVlUmVnaW9uc1N0YXJ0aW5nQXQobV9yZWdpb25IZWFkKTsKKyAgICAKKyAgICBtX3JlZ2lv
bkhlYWQgPSAwOworICAgIG1fZnJlZUxpc3RIZWFkID0gMDsKKyAgICBtX2J1bXBSZW1haW5pbmcg
PSAwOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgordW5zaWduZWQgQWxsb2NhdG9yPFQ+Ojpp
bmRleE9mKFQqIG9iamVjdCkKK3sKKyAgICB1bnNpZ25lZCBiYXNlSW5kZXggPSAwOworICAgIGZv
ciAoUmVnaW9uKiByZWdpb24gPSBtX3JlZ2lvbkhlYWQ7IHJlZ2lvbjsgcmVnaW9uID0gcmVnaW9u
LT5tX25leHQpIHsKKyAgICAgICAgaWYgKHJlZ2lvbi0+aXNJblRoaXNSZWdpb24ob2JqZWN0KSkK
KyAgICAgICAgICAgIHJldHVybiBiYXNlSW5kZXggKyAob2JqZWN0IC0gcmVnaW9uLT5kYXRhKCkp
OworICAgICAgICBiYXNlSW5kZXggKz0gUmVnaW9uOjpudW1iZXJPZlRoaW5nc1BlclJlZ2lvbigp
OworICAgIH0KKyAgICBDUkFTSCgpOworICAgIHJldHVybiAwOworfQorCit0ZW1wbGF0ZTx0eXBl
bmFtZSBUPgorQWxsb2NhdG9yPFQ+KiBBbGxvY2F0b3I8VD46OmFsbG9jYXRvck9mKFQqIG9iamVj
dCkKK3sKKyAgICByZXR1cm4gUmVnaW9uOjpyZWdpb25Gb3Iob2JqZWN0KS0+bV9hbGxvY2F0b3I7
Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitBTFdBWVNfSU5MSU5FIHZvaWQqIEFsbG9jYXRv
cjxUPjo6YnVtcEFsbG9jYXRlKCkKK3sKKyAgICBpZiAodW5zaWduZWQgcmVtYWluaW5nID0gbV9i
dW1wUmVtYWluaW5nKSB7CisgICAgICAgIHJlbWFpbmluZy0tOworICAgICAgICBtX2J1bXBSZW1h
aW5pbmcgPSByZW1haW5pbmc7CisgICAgICAgIHJldHVybiBtX2J1bXBFbmQgLSAocmVtYWluaW5n
ICsgMSk7CisgICAgfQorICAgIHJldHVybiAwOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgor
dm9pZCogQWxsb2NhdG9yPFQ+OjpmcmVlTGlzdEFsbG9jYXRlKCkKK3sKKyAgICB2b2lkKiogcmVz
dWx0ID0gbV9mcmVlTGlzdEhlYWQ7CisgICAgaWYgKFVOTElLRUxZKCFyZXN1bHQpKQorICAgICAg
ICByZXR1cm4gYWxsb2NhdGVTbG93KCk7CisgICAgbV9mcmVlTGlzdEhlYWQgPSBiaXR3aXNlX2Nh
c3Q8dm9pZCoqPigqcmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit0ZW1wbGF0ZTx0
eXBlbmFtZSBUPgordm9pZCogQWxsb2NhdG9yPFQ+OjphbGxvY2F0ZVNsb3coKQoreworICAgIEFT
U0VSVCghbV9mcmVlTGlzdEhlYWQpOworICAgIEFTU0VSVCghbV9idW1wUmVtYWluaW5nKTsKKyAg
ICAKKyAgICBQYWdlQWxsb2NhdGlvbkFsaWduZWQgYWxsb2NhdGlvbiA9IFBhZ2VBbGxvY2F0aW9u
QWxpZ25lZDo6YWxsb2NhdGUoUmVnaW9uOjpzaXplKCksIFJlZ2lvbjo6c2l6ZSgpLCBPU0FsbG9j
YXRvcjo6SlNHQ0hlYXBQYWdlcyk7CisgICAgaWYgKCFzdGF0aWNfY2FzdDxib29sPihhbGxvY2F0
aW9uKSkKKyAgICAgICAgQ1JBU0goKTsKKyAgICBSZWdpb24qIHJlZ2lvbiA9IHN0YXRpY19jYXN0
PFJlZ2lvbio+KGFsbG9jYXRpb24uYmFzZSgpKTsKKyAgICByZWdpb24tPm1fYWxsb2NhdGlvbiA9
IGFsbG9jYXRpb247CisgICAgcmVnaW9uLT5tX2FsbG9jYXRvciA9IHRoaXM7CisgICAgc3RhcnRC
dW1waW5nSW4ocmVnaW9uKTsKKyAgICByZWdpb24tPm1fbmV4dCA9IG1fcmVnaW9uSGVhZDsKKyAg
ICBtX3JlZ2lvbkhlYWQgPSByZWdpb247CisgICAgCisgICAgdm9pZCogcmVzdWx0ID0gYnVtcEFs
bG9jYXRlKCk7CisgICAgQVNTRVJUKHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwor
dGVtcGxhdGU8dHlwZW5hbWUgVD4KK3ZvaWQgQWxsb2NhdG9yPFQ+OjpmcmVlUmVnaW9uc1N0YXJ0
aW5nQXQodHlwZW5hbWUgQWxsb2NhdG9yPFQ+OjpSZWdpb24qIHJlZ2lvbikKK3sKKyAgICB3aGls
ZSAocmVnaW9uKSB7CisgICAgICAgIFJlZ2lvbiogbmV4dFJlZ2lvbiA9IHJlZ2lvbi0+bV9uZXh0
OworICAgICAgICByZWdpb24tPm1fYWxsb2NhdGlvbi5kZWFsbG9jYXRlKCk7CisgICAgICAgIHJl
Z2lvbiA9IG5leHRSZWdpb247CisgICAgfQorfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgordm9p
ZCBBbGxvY2F0b3I8VD46OnN0YXJ0QnVtcGluZ0luKHR5cGVuYW1lIEFsbG9jYXRvcjxUPjo6UmVn
aW9uKiByZWdpb24pCit7CisgICAgbV9idW1wRW5kID0gcmVnaW9uLT5kYXRhKCkgKyBSZWdpb246
Om51bWJlck9mVGhpbmdzUGVyUmVnaW9uKCk7CisgICAgbV9idW1wUmVtYWluaW5nID0gUmVnaW9u
OjpudW1iZXJPZlRoaW5nc1BlclJlZ2lvbigpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR0FsbG9jYXRv
cl9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRzU2ltcGxp
ZmljYXRpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdBcmd1bWVudHNTaW1wbGlmaWNhdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMTQwOTA0KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVudHNTaW1wbGlmaWNhdGlvblBo
YXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDEyLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTQ5LDExICsxNDksMTAgQEAgcHVibGljOgogICAgICAg
ICAgICAgaWYgKCFibG9jaykKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAg
IGZvciAodW5zaWduZWQgaW5kZXhJbkJsb2NrID0gMDsgaW5kZXhJbkJsb2NrIDwgYmxvY2stPnNp
emUoKTsgKytpbmRleEluQmxvY2spIHsKLSAgICAgICAgICAgICAgICBOb2RlSW5kZXggbm9kZUlu
ZGV4ID0gYmxvY2stPmF0KGluZGV4SW5CbG9jayk7Ci0gICAgICAgICAgICAgICAgTm9kZSYgbm9k
ZSA9IG1fZ3JhcGhbbm9kZUluZGV4XTsKLSAgICAgICAgICAgICAgICBpZiAoIW5vZGUuc2hvdWxk
R2VuZXJhdGUoKSkKKyAgICAgICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPmF0KGluZGV4
SW5CbG9jayk7CisgICAgICAgICAgICAgICAgaWYgKCFub2RlLT5zaG91bGRHZW5lcmF0ZSgpKQog
ICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKG5v
ZGUub3AoKSkgeworICAgICAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewogICAgICAg
ICAgICAgICAgIGNhc2UgQ3JlYXRlQXJndW1lbnRzOiB7CiAgICAgICAgICAgICAgICAgICAgIC8v
IElnbm9yZSB0aGlzIG9wLiBJZiB3ZSBzZWUgYSBsb25lIENyZWF0ZUFyZ3VtZW50cyB0aGVuIHdl
IHdhbnQgdG8KICAgICAgICAgICAgICAgICAgICAgLy8gY29tcGxldGVseSBpZ25vcmUgaXQgYmVj
YXVzZToKQEAgLTE3MywxNiArMTcyLDE2IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGNhc2UgU2V0TG9jYWw6IHsKLSAg
ICAgICAgICAgICAgICAgICAgTm9kZSYgc291cmNlID0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXTsK
LSAgICAgICAgICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0Rh
dGEgPSBub2RlLnZhcmlhYmxlQWNjZXNzRGF0YSgpOworICAgICAgICAgICAgICAgICAgICBOb2Rl
KiBzb3VyY2UgPSBub2RlLT5jaGlsZDEoKS5ub2RlKCk7CisgICAgICAgICAgICAgICAgICAgIFZh
cmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhID0gbm9kZS0+dmFyaWFibGVBY2Nl
c3NEYXRhKCk7CiAgICAgICAgICAgICAgICAgICAgIGludCBhcmd1bWVudHNSZWdpc3RlciA9Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLnVuY2hlY2tlZEFyZ3VtZW50c1JlZ2lzdGVy
Rm9yKG5vZGUuY29kZU9yaWdpbik7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChzb3VyY2Uub3Ao
KSAhPSBDcmVhdGVBcmd1bWVudHMgJiYgc291cmNlLm9wKCkgIT0gUGhhbnRvbUFyZ3VtZW50cykg
eworICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC51bmNoZWNrZWRBcmd1bWVudHNSZWdp
c3RlckZvcihub2RlLT5jb2RlT3JpZ2luKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHNvdXJj
ZS0+b3AoKSAhPSBDcmVhdGVBcmd1bWVudHMgJiYgc291cmNlLT5vcCgpICE9IFBoYW50b21Bcmd1
bWVudHMpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHRoZSBz
b3VyY2Ugb2YgdGhlIFNldExvY2FsIGtub3dzIHRoYXQgaWYgaXQncwogICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gYSB2YXJpYWJsZSB0aGF0IHdlIHRoaW5rIGlzIGFsaWFzZWQgdG8gdGhlIGFy
Z3VtZW50cywgdGhlbiBpdAogICAgICAgICAgICAgICAgICAgICAgICAgLy8gbWF5IGVzY2FwZSBh
dCB0aGlzIHBvaW50LiBJbiBmdXR1cmUsIHdlIGNvdWxkIHRyYWNrIHRyYW5zaXRpdmUKICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIGFsaWFzaW5nLiBCdXQgbm90IHlldC4KLSAgICAgICAgICAg
ICAgICAgICAgICAgIG9ic2VydmVCYWRBcmd1bWVudHNVc2Uobm9kZS5jaGlsZDEoKSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICBvYnNlcnZlQmFkQXJndW1lbnRzVXNlKHNvdXJjZSk7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIHRoaXMg
aXMgYW4gYXNzaWdubWVudCB0byB0aGUgYXJndW1lbnRzIHJlZ2lzdGVyLCB0aGVuCiAgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBwcmV0ZW5kIGFzIGlmIHRoZSBhcmd1bWVudHMgd2VyZSBjcmVh
dGVkLiBXZSBkb24ndCB3YW50IHRvCkBAIC0xOTUsMTQgKzE5NCwxNCBAQCBwdWJsaWM6CiAgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBpbml0X2xhenlfcmVnIHNpbmNlIGl0IHRyZWF0cyBDcmVh
dGVBcmd1bWVudHMgYXMgcmVhZGluZwogICAgICAgICAgICAgICAgICAgICAgICAgLy8gbG9jYWwg
dmFyaWFibGVzLiBUaGF0IGNvdWxkIGJlIGZpeGVkLCBidXQgaXQncyBlYXNpZXIgdG8KICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIHdvcmsgYXJvdW5kIHRoaXMgaGVyZS4KLSAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIChzb3VyY2Uub3AoKSA9PSBKU0NvbnN0YW50Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgJiYgIXNvdXJjZS52YWx1ZU9mSlNDb25zdGFudChjb2RlQmxvY2soKSkp
CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc291cmNlLT5vcCgpID09IEpTQ29uc3RhbnQK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAhc291cmNlLT52YWx1ZU9mSlNDb25zdGFu
dChjb2RlQmxvY2soKSkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhcmd1bWVu
dHNSZWdpc3RlciAhPSBJbnZhbGlkVmlydHVhbFJlZ2lzdGVyCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgJiYgKHZhcmlhYmxlQWNjZXNzRGF0YS0+bG9jYWwoKSA9PSBhcmd1bWVudHNSZWdp
c3RlcgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCB2YXJpYWJsZUFjY2Vzc0Rh
dGEtPmxvY2FsKCkgPT0gdW5tb2RpZmllZEFyZ3VtZW50c1JlZ2lzdGVyKGFyZ3VtZW50c1JlZ2lz
dGVyKSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2NyZWF0ZXNBcmd1bWVudHMu
YWRkKG5vZGUuY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG1fY3JlYXRlc0FyZ3VtZW50cy5hZGQobm9kZS0+Y29kZU9yaWdpbi5pbmxpbmVD
YWxsRnJhbWUpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgICAgICAgICAgICAgfQogCkBAIC0yMTQsMTkgKzIxMywxOSBAQCBwdWJsaWM6CiAgICAgICAg
ICAgICAgICAgICAgICAgICBBcmd1bWVudHNBbGlhc2luZ0RhdGEmIGRhdGEgPQogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG1fYXJndW1lbnRzQWxpYXNpbmcuZmluZCh2YXJpYWJsZUFjY2Vz
c0RhdGEpLT52YWx1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEubWVyZ2VOb25Bcmd1
bWVudHNBc3NpZ25tZW50KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkYXRhLm1lcmdlQ2Fs
bENvbnRleHQobm9kZS5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSk7CisgICAgICAgICAgICAg
ICAgICAgICAgICBkYXRhLm1lcmdlQ2FsbENvbnRleHQobm9kZS0+Y29kZU9yaWdpbi5pbmxpbmVD
YWxsRnJhbWUpOwogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3VtZW50c1JlZ2lzdGVyICE9IElu
dmFsaWRWaXJ0dWFsUmVnaXN0ZXIKICAgICAgICAgICAgICAgICAgICAgICAgICYmICh2YXJpYWJs
ZUFjY2Vzc0RhdGEtPmxvY2FsKCkgPT0gYXJndW1lbnRzUmVnaXN0ZXIKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB8fCB2YXJpYWJsZUFjY2Vzc0RhdGEtPmxvY2FsKCkgPT0gdW5tb2RpZmll
ZEFyZ3VtZW50c1JlZ2lzdGVyKGFyZ3VtZW50c1JlZ2lzdGVyKSkpIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGlmIChub2RlLmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lID09IHNvdXJjZS5j
b2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChu
b2RlLT5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSA9PSBzb3VyY2UtPmNvZGVPcmlnaW4uaW5s
aW5lQ2FsbEZyYW1lKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgICAgICAgICAgICAgbV9jcmVhdGVzQXJndW1lbnRzLmFkZChzb3VyY2UuY29kZU9yaWdp
bi5pbmxpbmVDYWxsRnJhbWUpOworICAgICAgICAgICAgICAgICAgICAgICAgbV9jcmVhdGVzQXJn
dW1lbnRzLmFkZChzb3VyY2UtPmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICAgICAgIGlmICh2YXJpYWJsZUFjY2Vzc0RhdGEtPmlzQ2FwdHVyZWQoKSkgewotICAgICAg
ICAgICAgICAgICAgICAgICAgbV9jcmVhdGVzQXJndW1lbnRzLmFkZChzb3VyY2UuY29kZU9yaWdp
bi5pbmxpbmVDYWxsRnJhbWUpOworICAgICAgICAgICAgICAgICAgICAgICAgbV9jcmVhdGVzQXJn
dW1lbnRzLmFkZChzb3VyY2UtPmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICAgICAgIEFyZ3VtZW50c0FsaWFzaW5nRGF0YSYgZGF0YSA9CkBAIC0yMzQsMjkgKzIzMywy
OSBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgIGRhdGEubWVyZ2VBcmd1bWVudHNBc3Np
Z25tZW50KCk7CiAgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgZW5zdXJlcyB0aGF0IHRoZSB2
YXJpYWJsZSdzIHVzZXMgYXJlIGluIHRoZSBzYW1lIGNvbnRleHQgYXMKICAgICAgICAgICAgICAg
ICAgICAgLy8gdGhlIGFyZ3VtZW50cyBpdCBpcyBhbGlhc2luZy4KLSAgICAgICAgICAgICAgICAg
ICAgZGF0YS5tZXJnZUNhbGxDb250ZXh0KG5vZGUuY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUp
OwotICAgICAgICAgICAgICAgICAgICBkYXRhLm1lcmdlQ2FsbENvbnRleHQoc291cmNlLmNvZGVP
cmlnaW4uaW5saW5lQ2FsbEZyYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgZGF0YS5tZXJnZUNh
bGxDb250ZXh0KG5vZGUtPmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKTsKKyAgICAgICAgICAg
ICAgICAgICAgZGF0YS5tZXJnZUNhbGxDb250ZXh0KHNvdXJjZS0+Y29kZU9yaWdpbi5pbmxpbmVD
YWxsRnJhbWUpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGNhc2UgR2V0TG9jYWw6CiAg
ICAgICAgICAgICAgICAgY2FzZSBQaGk6IHsKLSAgICAgICAgICAgICAgICAgICAgVmFyaWFibGVB
Y2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBub2RlLnZhcmlhYmxlQWNjZXNzRGF0YSgp
OworICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNz
RGF0YSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOwogICAgICAgICAgICAgICAgICAgICBp
ZiAodmFyaWFibGVBY2Nlc3NEYXRhLT5pc0NhcHR1cmVkKCkpCiAgICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgQXJndW1lbnRzQWxpYXNpbmdEYXRhJiBk
YXRhID0KICAgICAgICAgICAgICAgICAgICAgICAgIG1fYXJndW1lbnRzQWxpYXNpbmcuZmluZCh2
YXJpYWJsZUFjY2Vzc0RhdGEpLT52YWx1ZTsKLSAgICAgICAgICAgICAgICAgICAgZGF0YS5tZXJn
ZUNhbGxDb250ZXh0KG5vZGUuY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpOworICAgICAgICAg
ICAgICAgICAgICBkYXRhLm1lcmdlQ2FsbENvbnRleHQobm9kZS0+Y29kZU9yaWdpbi5pbmxpbmVD
YWxsRnJhbWUpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGNhc2UgRmx1c2g6IHsKLSAg
ICAgICAgICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEg
PSBub2RlLnZhcmlhYmxlQWNjZXNzRGF0YSgpOworICAgICAgICAgICAgICAgICAgICBWYXJpYWJs
ZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0
YSgpOwogICAgICAgICAgICAgICAgICAgICBpZiAodmFyaWFibGVBY2Nlc3NEYXRhLT5pc0NhcHR1
cmVkKCkpCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAg
ICAgQXJndW1lbnRzQWxpYXNpbmdEYXRhJiBkYXRhID0KICAgICAgICAgICAgICAgICAgICAgICAg
IG1fYXJndW1lbnRzQWxpYXNpbmcuZmluZCh2YXJpYWJsZUFjY2Vzc0RhdGEpLT52YWx1ZTsKLSAg
ICAgICAgICAgICAgICAgICAgZGF0YS5tZXJnZUNhbGxDb250ZXh0KG5vZGUuY29kZU9yaWdpbi5p
bmxpbmVDYWxsRnJhbWUpOworICAgICAgICAgICAgICAgICAgICBkYXRhLm1lcmdlQ2FsbENvbnRl
eHQobm9kZS0+Y29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpOwogICAgICAgICAgICAgICAgICAg
ICAKICAgICAgICAgICAgICAgICAgICAgLy8gSWYgYSB2YXJpYWJsZSBpcyB1c2VkIGluIGEgZmx1
c2ggdGhlbiBieSBkZWZpbml0aW9uIGl0IGVzY2FwZXMuCiAgICAgICAgICAgICAgICAgICAgIGRh
dGEuZXNjYXBlcyA9IHRydWU7CkBAIC0yNjQsMTggKzI2MywxOCBAQCBwdWJsaWM6CiAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBjYXNlIFNl
dEFyZ3VtZW50OiB7Ci0gICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFy
aWFibGVBY2Nlc3NEYXRhID0gbm9kZS52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKKyAgICAgICAgICAg
ICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBub2RlLT52
YXJpYWJsZUFjY2Vzc0RhdGEoKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKHZhcmlhYmxlQWNj
ZXNzRGF0YS0+aXNDYXB0dXJlZCgpKQogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICAgICAgICAgIEFyZ3VtZW50c0FsaWFzaW5nRGF0YSYgZGF0YSA9CiAgICAgICAg
ICAgICAgICAgICAgICAgICBtX2FyZ3VtZW50c0FsaWFzaW5nLmZpbmQodmFyaWFibGVBY2Nlc3NE
YXRhKS0+dmFsdWU7CiAgICAgICAgICAgICAgICAgICAgIGRhdGEubWVyZ2VOb25Bcmd1bWVudHNB
c3NpZ25tZW50KCk7Ci0gICAgICAgICAgICAgICAgICAgIGRhdGEubWVyZ2VDYWxsQ29udGV4dChu
b2RlLmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgZGF0
YS5tZXJnZUNhbGxDb250ZXh0KG5vZGUtPmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKTsKICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgICAgICAKICAgICAgICAgICAgICAgICBjYXNlIEdldEJ5VmFsOiB7Ci0gICAgICAgICAgICAg
ICAgICAgIGlmIChub2RlLmFycmF5TW9kZSgpLnR5cGUoKSAhPSBBcnJheTo6QXJndW1lbnRzKSB7
CisgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS50eXBlKCkgIT0gQXJy
YXk6OkFyZ3VtZW50cykgewogICAgICAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZUJhZEFyZ3Vt
ZW50c1VzZXMobm9kZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgICAgICAgICAgfQpAQCAtMjgzLDE4ICsyODIsMTggQEAgcHVibGljOgogICAgICAgICAgICAg
ICAgICAgICAvLyBUaGF0J3Mgc28gYXdmdWwgYW5kIHByZXR0eSBtdWNoIGltcG9zc2libGUgc2lu
Y2UgaXQgd291bGQKICAgICAgICAgICAgICAgICAgICAgLy8gaW1wbHkgdGhhdCB0aGUgYXJndW1l
bnRzIHdlcmUgcHJlZGljdGVkIGludGVnZXIsIGJ1dCBpdCdzCiAgICAgICAgICAgICAgICAgICAg
IC8vIGdvb2QgdG8gYmUgZGVmZW5zaXZlIGFuZCB0aG9yb3VnaC4KLSAgICAgICAgICAgICAgICAg
ICAgb2JzZXJ2ZUJhZEFyZ3VtZW50c1VzZShub2RlLmNoaWxkMigpKTsKLSAgICAgICAgICAgICAg
ICAgICAgb2JzZXJ2ZVByb3BlckFyZ3VtZW50c1VzZShub2RlLCBub2RlLmNoaWxkMSgpKTsKKyAg
ICAgICAgICAgICAgICAgICAgb2JzZXJ2ZUJhZEFyZ3VtZW50c1VzZShub2RlLT5jaGlsZDIoKS5u
b2RlKCkpOworICAgICAgICAgICAgICAgICAgICBvYnNlcnZlUHJvcGVyQXJndW1lbnRzVXNlKG5v
ZGUsIG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBjYXNlIEdl
dEFycmF5TGVuZ3RoOiB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChub2RlLmFycmF5TW9kZSgp
LnR5cGUoKSAhPSBBcnJheTo6QXJndW1lbnRzKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChu
b2RlLT5hcnJheU1vZGUoKS50eXBlKCkgIT0gQXJyYXk6OkFyZ3VtZW50cykgewogICAgICAgICAg
ICAgICAgICAgICAgICAgb2JzZXJ2ZUJhZEFyZ3VtZW50c1VzZXMobm9kZSk7CiAgICAgICAgICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIG9ic2VydmVQcm9wZXJBcmd1bWVudHNV
c2Uobm9kZSwgbm9kZS5jaGlsZDEoKSk7CisgICAgICAgICAgICAgICAgICAgIG9ic2VydmVQcm9w
ZXJBcmd1bWVudHNVc2Uobm9kZSwgbm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIApAQCAtMzM1
LDE2ICszMzQsMTUgQEAgcHVibGljOgogICAgICAgICAgICAgaWYgKCFibG9jaykKICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW5kZXhJbkJsb2Nr
ID0gMDsgaW5kZXhJbkJsb2NrIDwgYmxvY2stPnNpemUoKTsgKytpbmRleEluQmxvY2spIHsKLSAg
ICAgICAgICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4ID0gYmxvY2stPmF0KGluZGV4SW5CbG9j
ayk7Ci0gICAgICAgICAgICAgICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhbbm9kZUluZGV4XTsKLSAg
ICAgICAgICAgICAgICBpZiAoIW5vZGUuc2hvdWxkR2VuZXJhdGUoKSkKKyAgICAgICAgICAgICAg
ICBOb2RlKiBub2RlID0gYmxvY2stPmF0KGluZGV4SW5CbG9jayk7CisgICAgICAgICAgICAgICAg
aWYgKCFub2RlLT5zaG91bGRHZW5lcmF0ZSgpKQogICAgICAgICAgICAgICAgICAgICBjb250aW51
ZTsKLSAgICAgICAgICAgICAgICBpZiAobm9kZS5vcCgpICE9IFNldExvY2FsKQorICAgICAgICAg
ICAgICAgIGlmIChub2RlLT5vcCgpICE9IFNldExvY2FsKQogICAgICAgICAgICAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgICAgICAgICBOb2RlJiBzb3VyY2UgPSBtX2dyYXBoW25vZGUuY2hp
bGQxKCldOwotICAgICAgICAgICAgICAgIGlmIChzb3VyY2Uub3AoKSAhPSBDcmVhdGVBcmd1bWVu
dHMpCisgICAgICAgICAgICAgICAgTm9kZSogc291cmNlID0gbm9kZS0+Y2hpbGQxKCkubm9kZSgp
OworICAgICAgICAgICAgICAgIGlmIChzb3VyY2UtPm9wKCkgIT0gQ3JlYXRlQXJndW1lbnRzKQog
ICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICBWYXJpYWJsZUFj
Y2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9IG5vZGUudmFyaWFibGVBY2Nlc3NEYXRhKCk7
CisgICAgICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEg
PSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKICAgICAgICAgICAgICAgICBpZiAodmFyaWFi
bGVBY2Nlc3NEYXRhLT5pc0NhcHR1cmVkKCkpIHsKICAgICAgICAgICAgICAgICAgICAgLy8gVGhl
IGNhcHR1cmVkIGNhc2Ugd291bGQgaGF2ZSBhbHJlYWR5IGJlZW4gdGFrZW4gY2FyZSBvZiBpbiB0
aGUKICAgICAgICAgICAgICAgICAgICAgLy8gcHJldmlvdXMgcGFzcy4KQEAgLTM1Niw3ICszNTQs
NyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgaWYgKGRhdGEuaXNWYWxpZCgpKQogICAgICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAg
ICBtX2NyZWF0ZXNBcmd1bWVudHMuYWRkKHNvdXJjZS5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFt
ZSk7CisgICAgICAgICAgICAgICAgbV9jcmVhdGVzQXJndW1lbnRzLmFkZChzb3VyY2UtPmNvZGVP
cmlnaW4uaW5saW5lQ2FsbEZyYW1lKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAg
ICAKQEAgLTQxNCwyNCArNDEyLDIzIEBAIHB1YmxpYzoKICAgICAgICAgICAgIGlmICghYmxvY2sp
CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGlu
ZGV4SW5CbG9jayA9IDA7IGluZGV4SW5CbG9jayA8IGJsb2NrLT5zaXplKCk7ICsraW5kZXhJbkJs
b2NrKSB7Ci0gICAgICAgICAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRleCA9IGJsb2NrLT5hdChp
bmRleEluQmxvY2spOwotICAgICAgICAgICAgICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW25vZGVJ
bmRleF07Ci0gICAgICAgICAgICAgICAgaWYgKCFub2RlLnNob3VsZEdlbmVyYXRlKCkpCisgICAg
ICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5hdChpbmRleEluQmxvY2spOworICAgICAg
ICAgICAgICAgIGlmICghbm9kZS0+c2hvdWxkR2VuZXJhdGUoKSkKICAgICAgICAgICAgICAgICAg
ICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgc3dpdGNoIChu
b2RlLm9wKCkpIHsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKICAgICAg
ICAgICAgICAgICBjYXNlIFNldExvY2FsOiB7Ci0gICAgICAgICAgICAgICAgICAgIE5vZGUmIHNv
dXJjZSA9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV07Ci0gICAgICAgICAgICAgICAgICAgIGlmIChz
b3VyY2Uub3AoKSAhPSBDcmVhdGVBcmd1bWVudHMpCisgICAgICAgICAgICAgICAgICAgIE5vZGUq
IHNvdXJjZSA9IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KHNvdXJjZS0+b3AoKSAhPSBDcmVhdGVBcmd1bWVudHMpCiAgICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIGlmICht
X2NyZWF0ZXNBcmd1bWVudHMuY29udGFpbnMoc291cmNlLmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZy
YW1lKSkKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1fY3JlYXRlc0FyZ3VtZW50cy5jb250YWlu
cyhzb3VyY2UtPmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKSkKICAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAg
VmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBub2RlLnZhcmlhYmxlQWNj
ZXNzRGF0YSgpOworICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlh
YmxlQWNjZXNzRGF0YSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOwogICAgICAgICAgICAg
ICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGguYXJndW1lbnRzUmVnaXN0
ZXJGb3Iobm9kZS5jb2RlT3JpZ2luKSA9PSB2YXJpYWJsZUFjY2Vzc0RhdGEtPmxvY2FsKCkKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHx8IHVubW9kaWZpZWRBcmd1bWVudHNSZWdpc3Rlciht
X2dyYXBoLmFyZ3VtZW50c1JlZ2lzdGVyRm9yKG5vZGUuY29kZU9yaWdpbikpID09IHZhcmlhYmxl
QWNjZXNzRGF0YS0+bG9jYWwoKSkKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGguYXJn
dW1lbnRzUmVnaXN0ZXJGb3Iobm9kZS0+Y29kZU9yaWdpbikgPT0gdmFyaWFibGVBY2Nlc3NEYXRh
LT5sb2NhbCgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCB1bm1vZGlmaWVkQXJndW1l
bnRzUmVnaXN0ZXIobV9ncmFwaC5hcmd1bWVudHNSZWdpc3RlckZvcihub2RlLT5jb2RlT3JpZ2lu
KSkgPT0gdmFyaWFibGVBY2Nlc3NEYXRhLT5sb2NhbCgpKQogICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAKICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKCF2YXJpYWJsZUFjY2Vzc0Rh
dGEtPmlzQ2FwdHVyZWQoKSk7CkBAIC00NjksMTYgKzQ2NiwxNiBAQCBwdWJsaWM6CiAgICAgICAg
ICAgICAgICAgY2FzZSBGb3J3YXJkU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnQ6CiAgICAg
ICAgICAgICAgICAgY2FzZSBDaGVja0FycmF5OiB7CiAgICAgICAgICAgICAgICAgICAgIC8vIFdl
IGNhbiBqdXN0IGdldCByaWQgb2YgdGhpcyBub2RlLCBpZiBpdCByZWZlcmVuY2VzIGEgcGhhbnRv
bSBhcmd1bWVudC4KLSAgICAgICAgICAgICAgICAgICAgaWYgKCFpc09LVG9PcHRpbWl6ZShtX2dy
YXBoW25vZGUuY2hpbGQxKCldKSkKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFpc09LVG9PcHRp
bWl6ZShub2RlLT5jaGlsZDEoKS5ub2RlKCkpKQogICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguZGVyZWYobm9kZS5jaGlsZDEoKSk7Ci0g
ICAgICAgICAgICAgICAgICAgIG5vZGUuc2V0T3BBbmREZWZhdWx0RmxhZ3MoUGhhbnRvbSk7Ci0g
ICAgICAgICAgICAgICAgICAgIG5vZGUuY2hpbGRyZW4uc2V0Q2hpbGQxKEVkZ2UoKSk7CisgICAg
ICAgICAgICAgICAgICAgIG1fZ3JhcGguZGVyZWYobm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAg
ICAgICAgICAgICBub2RlLT5zZXRPcEFuZERlZmF1bHRGbGFncyhQaGFudG9tKTsKKyAgICAgICAg
ICAgICAgICAgICAgbm9kZS0+Y2hpbGRyZW4uc2V0Q2hpbGQxKEVkZ2UoKSk7CiAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAg
CiAgICAgICAgICAgICAgICAgY2FzZSBHZXRCeVZhbDogewotICAgICAgICAgICAgICAgICAgICBp
ZiAobm9kZS5hcnJheU1vZGUoKS50eXBlKCkgIT0gQXJyYXk6OkFyZ3VtZW50cykKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKG5vZGUtPmFycmF5TW9kZSgpLnR5cGUoKSAhPSBBcnJheTo6QXJndW1l
bnRzKQogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgICAgICAgICAg
ICAgLy8gVGhpcyBjYW4gYmUgc2ltcGxpZmllZCB0byBHZXRNeUFyZ3VtZW50QnlWYWwgaWYgd2Ug
a25vdyB0aGF0CkBAIC00ODgsMjggKzQ4NSwyOCBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAg
ICAgIC8vIDIpIEl0cyBmaXJzdCBjaGlsZCBpcyBDcmVhdGVBcmd1bWVudHMgYW5kIGl0cyBJbmxp
bmVDYWxsRnJhbWUqCiAgICAgICAgICAgICAgICAgICAgIC8vICAgIGlzIG5vdCBtYXJrZWQgYXMg
Y3JlYXRpbmcgYXJndW1lbnRzLgogICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAg
ICAgICAgaWYgKCFpc09LVG9PcHRpbWl6ZShtX2dyYXBoW25vZGUuY2hpbGQxKCldKSkKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKCFpc09LVG9PcHRpbWl6ZShub2RlLT5jaGlsZDEoKS5ub2RlKCkp
KQogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIAot
ICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLmRlcmVmKG5vZGUuY2hpbGQxKCkpOwotICAgICAg
ICAgICAgICAgICAgICBub2RlLmNoaWxkcmVuLmNoaWxkMSgpID0gbm9kZS5jaGlsZHJlbi5jaGls
ZDIoKTsKLSAgICAgICAgICAgICAgICAgICAgbm9kZS5jaGlsZHJlbi5jaGlsZDIoKSA9IEVkZ2Uo
KTsKLSAgICAgICAgICAgICAgICAgICAgbm9kZS5zZXRPcEFuZERlZmF1bHRGbGFncyhHZXRNeUFy
Z3VtZW50QnlWYWwpOworICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLmRlcmVmKG5vZGUtPmNo
aWxkMSgpKTsKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGRyZW4uY2hpbGQxKCkgPSBu
b2RlLT5jaGlsZHJlbi5jaGlsZDIoKTsKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGRy
ZW4uY2hpbGQyKCkgPSBFZGdlKCk7CisgICAgICAgICAgICAgICAgICAgIG5vZGUtPnNldE9wQW5k
RGVmYXVsdEZsYWdzKEdldE15QXJndW1lbnRCeVZhbCk7CiAgICAgICAgICAgICAgICAgICAgIGNo
YW5nZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAtLWluZGV4SW5CbG9jazsgLy8gRm9y
Y2UgcmVjb25zaWRlcmF0aW9uIG9mIHRoaXMgb3Agbm93IHRoYXQgaXQncyBhIEdldE15QXJndW1l
bnRCeVZhbC4KICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBjYXNlIEdldEFycmF5TGVuZ3Ro
OiB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChub2RlLmFycmF5TW9kZSgpLnR5cGUoKSAhPSBB
cnJheTo6QXJndW1lbnRzKQorICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS0+YXJyYXlNb2Rl
KCkudHlwZSgpICE9IEFycmF5OjpBcmd1bWVudHMpCiAgICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIGlmICghaXNP
S1RvT3B0aW1pemUobV9ncmFwaFtub2RlLmNoaWxkMSgpXSkpCisgICAgICAgICAgICAgICAgICAg
IGlmICghaXNPS1RvT3B0aW1pemUobm9kZS0+Y2hpbGQxKCkubm9kZSgpKSkKICAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAg
ICAgICAgbV9ncmFwaC5kZXJlZihub2RlLmNoaWxkMSgpKTsKLSAgICAgICAgICAgICAgICAgICAg
bm9kZS5jaGlsZHJlbi5jaGlsZDEoKSA9IEVkZ2UoKTsKLSAgICAgICAgICAgICAgICAgICAgbm9k
ZS5zZXRPcEFuZERlZmF1bHRGbGFncyhHZXRNeUFyZ3VtZW50c0xlbmd0aCk7CisgICAgICAgICAg
ICAgICAgICAgIG1fZ3JhcGguZGVyZWYobm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgICAg
ICAgICBub2RlLT5jaGlsZHJlbi5jaGlsZDEoKSA9IEVkZ2UoKTsKKyAgICAgICAgICAgICAgICAg
ICAgbm9kZS0+c2V0T3BBbmREZWZhdWx0RmxhZ3MoR2V0TXlBcmd1bWVudHNMZW5ndGgpOwogICAg
ICAgICAgICAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgLS1p
bmRleEluQmxvY2s7IC8vIEZvcmNlIHJlY29uc2lkZXJhdGlvbiBvZiB0aGlzIG9wIG5vZXcgdGhh
dCBpdCdzIGEgR2V0TXlBcmd1bWVudHNMZW5ndGguCiAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OwpAQCAtNTE3LDE2ICs1MTQsMTYgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICAKICAg
ICAgICAgICAgICAgICBjYXNlIEdldE15QXJndW1lbnRzTGVuZ3RoOgogICAgICAgICAgICAgICAg
IGNhc2UgR2V0TXlBcmd1bWVudHNMZW5ndGhTYWZlOiB7Ci0gICAgICAgICAgICAgICAgICAgIGlm
IChtX2NyZWF0ZXNBcmd1bWVudHMuY29udGFpbnMobm9kZS5jb2RlT3JpZ2luLmlubGluZUNhbGxG
cmFtZSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChub2RlLm9wKCkgPT0gR2V0
TXlBcmd1bWVudHNMZW5ndGhTYWZlKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1fY3JlYXRl
c0FyZ3VtZW50cy5jb250YWlucyhub2RlLT5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSkpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChub2RlLT5vcCgpID09IEdldE15QXJndW1l
bnRzTGVuZ3RoU2FmZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS5vcCgpID09IEdldE15
QXJndW1lbnRzTGVuZ3RoU2FmZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS5zZXRP
cChHZXRNeUFyZ3VtZW50c0xlbmd0aCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5v
cCgpID09IEdldE15QXJndW1lbnRzTGVuZ3RoU2FmZSkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgbm9kZS0+c2V0T3AoR2V0TXlBcmd1bWVudHNMZW5ndGgpOwogICAgICAgICAgICAgICAgICAg
ICAgICAgY2hhbmdlZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIENvZGVPcmlnaW4gY29kZU9yaWdpbiA9IG5v
ZGUuY29kZU9yaWdpbjsKKyAgICAgICAgICAgICAgICAgICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2lu
ID0gbm9kZS0+Y29kZU9yaWdpbjsKICAgICAgICAgICAgICAgICAgICAgaWYgKCFjb2RlT3JpZ2lu
LmlubGluZUNhbGxGcmFtZSkKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgICAgICAgICAKQEAgLTUzNywzMiArNTM0LDMyIEBAIHB1YmxpYzoKICAgICAgICAgICAg
ICAgICAgICAgICAgIENoZWNrQXJndW1lbnRzTm90Q3JlYXRlZCwgY29kZU9yaWdpbik7CiAgICAg
ICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLmNvbnZlcnRUb0Nv
bnN0YW50KAotICAgICAgICAgICAgICAgICAgICAgICAgbm9kZUluZGV4LCBqc051bWJlcihjb2Rl
T3JpZ2luLmlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzLnNpemUoKSAtIDEpKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIG5vZGUsIGpzTnVtYmVyKGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1l
LT5hcmd1bWVudHMuc2l6ZSgpIC0gMSkpOwogICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkID0g
dHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBjYXNlIEdldE15QXJndW1lbnRCeVZh
bDoKICAgICAgICAgICAgICAgICBjYXNlIEdldE15QXJndW1lbnRCeVZhbFNhZmU6IHsKLSAgICAg
ICAgICAgICAgICAgICAgaWYgKG1fY3JlYXRlc0FyZ3VtZW50cy5jb250YWlucyhub2RlLmNvZGVP
cmlnaW4uaW5saW5lQ2FsbEZyYW1lKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJU
KG5vZGUub3AoKSA9PSBHZXRNeUFyZ3VtZW50QnlWYWxTYWZlKTsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKG1fY3JlYXRlc0FyZ3VtZW50cy5jb250YWlucyhub2RlLT5jb2RlT3JpZ2luLmlubGlu
ZUNhbGxGcmFtZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChub2RlLT5vcCgp
ID09IEdldE15QXJndW1lbnRCeVZhbFNhZmUpOwogICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUu
b3AoKSA9PSBHZXRNeUFyZ3VtZW50QnlWYWxTYWZlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBub2RlLnNldE9wKEdldE15QXJndW1lbnRCeVZhbCk7CisgICAgICAgICAgICAgICAgICAgIGlm
IChub2RlLT5vcCgpID09IEdldE15QXJndW1lbnRCeVZhbFNhZmUpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIG5vZGUtPnNldE9wKEdldE15QXJndW1lbnRCeVZhbCk7CiAgICAgICAgICAgICAg
ICAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgICAgICBpZiAoIW5vZGUuY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpCisgICAg
ICAgICAgICAgICAgICAgIGlmICghbm9kZS0+Y29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpCiAg
ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFt
X2dyYXBoW25vZGUuY2hpbGQxKCldLmhhc0NvbnN0YW50KCkpCisgICAgICAgICAgICAgICAgICAg
IGlmICghbm9kZS0+Y2hpbGQxKCktPmhhc0NvbnN0YW50KCkpCiAgICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IG1fZ3JhcGhb
bm9kZS5jaGlsZDEoKV0udmFsdWVPZkpTQ29uc3RhbnQoY29kZUJsb2NrKCkpOworICAgICAgICAg
ICAgICAgICAgICBKU1ZhbHVlIHZhbHVlID0gbm9kZS0+Y2hpbGQxKCktPnZhbHVlT2ZKU0NvbnN0
YW50KGNvZGVCbG9jaygpKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKCF2YWx1ZS5pc0ludDMy
KCkpCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAg
aW50MzJfdCBpbmRleCA9IHZhbHVlLmFzSW50MzIoKTsKICAgICAgICAgICAgICAgICAgICAgaWYg
KGluZGV4IDwgMAogICAgICAgICAgICAgICAgICAgICAgICAgfHwgc3RhdGljX2Nhc3Q8c2l6ZV90
PihpbmRleCArIDEpID49Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS5jb2RlT3Jp
Z2luLmlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzLnNpemUoKSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBub2RlLT5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzLnNp
emUoKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAg
ICAKICAgICAgICAgICAgICAgICAgICAgLy8gV2Uga25vdyB3aGljaCBhcmd1bWVudCB0aGlzIGlz
IGFjY2Vzc2luZy4gQnV0IG9ubHkgYWZ0ZXIgd2UgaGF2ZSBjaGVja2VkCkBAIC01NzQsMTMgKzU3
MSwxMyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgIC8vIGhhcyBydW4gLSB0aGVyZWZv
cmUgaXQgbWFrZXMgbGl0dGxlIHNlbnNlIHRvIGxpbmsgdGhlIEdldExvY2FsIG9wZXJhdGlvbgog
ICAgICAgICAgICAgICAgICAgICAvLyBpbnRvIHRoZSBWYXJpYWJsZUFjY2Vzc0RhdGEgYW5kIFBo
aSBncmFwaHMuCiAKLSAgICAgICAgICAgICAgICAgICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2luID0g
bm9kZS5jb2RlT3JpZ2luOwotICAgICAgICAgICAgICAgICAgICBBZGphY2VuY3lMaXN0IGNoaWxk
cmVuID0gbm9kZS5jaGlsZHJlbjsKKyAgICAgICAgICAgICAgICAgICAgQ29kZU9yaWdpbiBjb2Rl
T3JpZ2luID0gbm9kZS0+Y29kZU9yaWdpbjsKKyAgICAgICAgICAgICAgICAgICAgQWRqYWNlbmN5
TGlzdCBjaGlsZHJlbiA9IG5vZGUtPmNoaWxkcmVuOwogICAgICAgICAgICAgICAgICAgICAKLSAg
ICAgICAgICAgICAgICAgICAgbm9kZS5jb252ZXJ0VG9HZXRMb2NhbFVubGlua2VkKAorICAgICAg
ICAgICAgICAgICAgICBub2RlLT5jb252ZXJ0VG9HZXRMb2NhbFVubGlua2VkKAogICAgICAgICAg
ICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPigKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBub2RlLmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lLT5zdGFja09m
ZnNldCArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5iYXNlbGluZUNvZGVC
bG9ja0Zvcihub2RlLmNvZGVPcmlnaW4pLT5hcmd1bWVudEluZGV4QWZ0ZXJDYXB0dXJlKGluZGV4
KSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNvZGVPcmlnaW4uaW5saW5l
Q2FsbEZyYW1lLT5zdGFja09mZnNldCArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9n
cmFwaC5iYXNlbGluZUNvZGVCbG9ja0Zvcihub2RlLT5jb2RlT3JpZ2luKS0+YXJndW1lbnRJbmRl
eEFmdGVyQ2FwdHVyZShpbmRleCkpKTsKIAogICAgICAgICAgICAgICAgICAgICBpbnNlcnRpb25T
ZXQuaW5zZXJ0Tm9kZSgKICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4SW5CbG9jaywgRG9u
dFJlZkNoaWxkcmVuLCBEb250UmVmTm9kZSwgU3BlY05vbmUsIENoZWNrQXJndW1lbnRzTm90Q3Jl
YXRlZCwKQEAgLTU5NCwxMyArNTkxLDEzIEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGNhc2UgVGVhck9mZkFyZ3VtZW50
czogewotICAgICAgICAgICAgICAgICAgICBpZiAobV9jcmVhdGVzQXJndW1lbnRzLmNvbnRhaW5z
KG5vZGUuY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpKQorICAgICAgICAgICAgICAgICAgICBp
ZiAobV9jcmVhdGVzQXJndW1lbnRzLmNvbnRhaW5zKG5vZGUtPmNvZGVPcmlnaW4uaW5saW5lQ2Fs
bEZyYW1lKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAg
ICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgbm9kZS5zZXRPcEFuZERlZmF1bHRGbGFncyhO
b3ApOworICAgICAgICAgICAgICAgICAgICBub2RlLT5zZXRPcEFuZERlZmF1bHRGbGFncyhOb3Ap
OwogICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLmNsZWFyQW5kRGVyZWZDaGlsZDEobm9kZSk7
CiAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguY2xlYXJBbmREZXJlZkNoaWxkMihub2RlKTsK
LSAgICAgICAgICAgICAgICAgICAgbm9kZS5zZXRSZWZDb3VudCgwKTsKKyAgICAgICAgICAgICAg
ICAgICAgbm9kZS0+c2V0UmVmQ291bnQoMCk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgCkBAIC02MTYsMjUgKzYxMywy
MyBAQCBwdWJsaWM6CiAgICAgICAgICAgICBpZiAoIWJsb2NrKQogICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbmRleEluQmxvY2sgPSAwOyBpbmRl
eEluQmxvY2sgPCBibG9jay0+c2l6ZSgpOyArK2luZGV4SW5CbG9jaykgewotICAgICAgICAgICAg
ICAgIE5vZGVJbmRleCBub2RlSW5kZXggPSBibG9jay0+YXQoaW5kZXhJbkJsb2NrKTsKLSAgICAg
ICAgICAgICAgICBOb2RlKiBub2RlUHRyID0gJm1fZ3JhcGhbbm9kZUluZGV4XTsKLSAgICAgICAg
ICAgICAgICBpZiAobm9kZVB0ci0+b3AoKSAhPSBDcmVhdGVBcmd1bWVudHMpCisgICAgICAgICAg
ICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5hdChpbmRleEluQmxvY2spOworICAgICAgICAgICAg
ICAgIGlmIChub2RlLT5vcCgpICE9IENyZWF0ZUFyZ3VtZW50cykKICAgICAgICAgICAgICAgICAg
ICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgLy8gSWYgdGhpcyBpcyBhIENyZWF0ZUFyZ3Vt
ZW50cyBmb3IgYW4gSW5saW5lQ2FsbEZyYW1lKiB0aGF0IGRvZXMKICAgICAgICAgICAgICAgICAv
LyBub3QgY3JlYXRlIGFyZ3VtZW50cywgdGhlbiByZXBsYWNlIGl0IHdpdGggYSBQaGFudG9tQXJn
dW1lbnRzLgogICAgICAgICAgICAgICAgIC8vIFBoYW50b21Bcmd1bWVudHMgaXMgYSBub24tZXhl
Y3V0aW5nIG5vZGUgdGhhdCBqdXN0IGluZGljYXRlcwogICAgICAgICAgICAgICAgIC8vIHRoYXQg
dGhlIG5vZGUgc2hvdWxkIGJlIHJlaWZpZWQgYXMgYW4gYXJndW1lbnRzIG9iamVjdCBvbiBPU1IK
ICAgICAgICAgICAgICAgICAvLyBleGl0LgotICAgICAgICAgICAgICAgIGlmIChtX2NyZWF0ZXNB
cmd1bWVudHMuY29udGFpbnMobm9kZVB0ci0+Y29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpKQor
ICAgICAgICAgICAgICAgIGlmIChtX2NyZWF0ZXNBcmd1bWVudHMuY29udGFpbnMobm9kZS0+Y29k
ZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpKQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsK
LSAgICAgICAgICAgICAgICBpZiAobm9kZVB0ci0+c2hvdWxkR2VuZXJhdGUoKSkgeworICAgICAg
ICAgICAgICAgIGlmIChub2RlLT5zaG91bGRHZW5lcmF0ZSgpKSB7CiAgICAgICAgICAgICAgICAg
ICAgIGluc2VydGlvblNldC5pbnNlcnROb2RlKAogICAgICAgICAgICAgICAgICAgICAgICAgaW5k
ZXhJbkJsb2NrLCBEb250UmVmQ2hpbGRyZW4sIERvbnRSZWZOb2RlLCBTcGVjTm9uZSwgUGhhbnRv
bSwKLSAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVQdHItPmNvZGVPcmlnaW4sIG5vZGVQdHIt
PmNoaWxkcmVuKTsKLSAgICAgICAgICAgICAgICAgICAgbm9kZVB0ciA9ICZtX2dyYXBoW25vZGVJ
bmRleF07CisgICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5jb2RlT3JpZ2luLCBub2RlLT5j
aGlsZHJlbik7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIG5vZGVQdHItPnNl
dE9wQW5kRGVmYXVsdEZsYWdzKFBoYW50b21Bcmd1bWVudHMpOwotICAgICAgICAgICAgICAgIG5v
ZGVQdHItPmNoaWxkcmVuLnJlc2V0KCk7CisgICAgICAgICAgICAgICAgbm9kZS0+c2V0T3BBbmRE
ZWZhdWx0RmxhZ3MoUGhhbnRvbUFyZ3VtZW50cyk7CisgICAgICAgICAgICAgICAgbm9kZS0+Y2hp
bGRyZW4ucmVzZXQoKTsKICAgICAgICAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIGluc2VydGlvblNldC5leGVjdXRlKGJsb2NrKTsKQEAgLTY1NCwy
OCArNjQ5LDI3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBEZWZhdWx0SGFzaDxWYXJpYWJsZUFj
Y2Vzc0RhdGEqPjo6SGFzaCwKICAgICAgICAgICAgIE51bGxhYmxlSGFzaFRyYWl0czxWYXJpYWJs
ZUFjY2Vzc0RhdGEqPiA+IG1fYXJndW1lbnRzQWxpYXNpbmc7CiAKLSAgICB2b2lkIG9ic2VydmVC
YWRBcmd1bWVudHNVc2UoRWRnZSBlZGdlKQorICAgIHZvaWQgb2JzZXJ2ZUJhZEFyZ3VtZW50c1Vz
ZShOb2RlKiBub2RlKQogICAgIHsKLSAgICAgICAgaWYgKCFlZGdlKQorICAgICAgICBpZiAoIW5v
ZGUpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIAotICAgICAgICBOb2RlJiBjaGlsZCA9
IG1fZ3JhcGhbZWRnZV07Ci0gICAgICAgIHN3aXRjaCAoY2hpbGQub3AoKSkgeworICAgICAgICBz
d2l0Y2ggKG5vZGUtPm9wKCkpIHsKICAgICAgICAgY2FzZSBDcmVhdGVBcmd1bWVudHM6IHsKLSAg
ICAgICAgICAgIG1fY3JlYXRlc0FyZ3VtZW50cy5hZGQoY2hpbGQuY29kZU9yaWdpbi5pbmxpbmVD
YWxsRnJhbWUpOworICAgICAgICAgICAgbV9jcmVhdGVzQXJndW1lbnRzLmFkZChub2RlLT5jb2Rl
T3JpZ2luLmlubGluZUNhbGxGcmFtZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQog
ICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgR2V0TG9jYWw6IHsKLSAgICAgICAgICAgIGludCBh
cmd1bWVudHNSZWdpc3RlciA9IG1fZ3JhcGgudW5jaGVja2VkQXJndW1lbnRzUmVnaXN0ZXJGb3Io
Y2hpbGQuY29kZU9yaWdpbik7CisgICAgICAgICAgICBpbnQgYXJndW1lbnRzUmVnaXN0ZXIgPSBt
X2dyYXBoLnVuY2hlY2tlZEFyZ3VtZW50c1JlZ2lzdGVyRm9yKG5vZGUtPmNvZGVPcmlnaW4pOwog
ICAgICAgICAgICAgaWYgKGFyZ3VtZW50c1JlZ2lzdGVyICE9IEludmFsaWRWaXJ0dWFsUmVnaXN0
ZXIKLSAgICAgICAgICAgICAgICAmJiAoY2hpbGQubG9jYWwoKSA9PSBhcmd1bWVudHNSZWdpc3Rl
cgotICAgICAgICAgICAgICAgICAgICB8fCBjaGlsZC5sb2NhbCgpID09IHVubW9kaWZpZWRBcmd1
bWVudHNSZWdpc3Rlcihhcmd1bWVudHNSZWdpc3RlcikpKSB7Ci0gICAgICAgICAgICAgICAgbV9j
cmVhdGVzQXJndW1lbnRzLmFkZChjaGlsZC5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSk7Cisg
ICAgICAgICAgICAgICAgJiYgKG5vZGUtPmxvY2FsKCkgPT0gYXJndW1lbnRzUmVnaXN0ZXIKKyAg
ICAgICAgICAgICAgICAgICAgfHwgbm9kZS0+bG9jYWwoKSA9PSB1bm1vZGlmaWVkQXJndW1lbnRz
UmVnaXN0ZXIoYXJndW1lbnRzUmVnaXN0ZXIpKSkgeworICAgICAgICAgICAgICAgIG1fY3JlYXRl
c0FyZ3VtZW50cy5hZGQobm9kZS0+Y29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpOwogICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgICAg
ICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9IGNoaWxkLnZhcmlhYmxl
QWNjZXNzRGF0YSgpOworICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFj
Y2Vzc0RhdGEgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKICAgICAgICAgICAgIGlmICh2
YXJpYWJsZUFjY2Vzc0RhdGEtPmlzQ2FwdHVyZWQoKSkKICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgIApAQCAtNjg5LDE2ICs2ODMsMTUgQEAgcHJpdmF0ZToKICAgICAgICAgfQog
ICAgIH0KICAgICAKLSAgICB2b2lkIG9ic2VydmVCYWRBcmd1bWVudHNVc2VzKE5vZGUmIG5vZGUp
CisgICAgdm9pZCBvYnNlcnZlQmFkQXJndW1lbnRzVXNlcyhOb2RlKiBub2RlKQogICAgIHsKICAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9ncmFwaC5udW1DaGlsZHJlbihub2RlKTsgaS0tOykK
LSAgICAgICAgICAgIG9ic2VydmVCYWRBcmd1bWVudHNVc2UobV9ncmFwaC5jaGlsZChub2RlLCBp
KSk7CisgICAgICAgICAgICBvYnNlcnZlQmFkQXJndW1lbnRzVXNlKG1fZ3JhcGguY2hpbGQobm9k
ZSwgaSkubm9kZSgpKTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBvYnNlcnZlUHJvcGVyQXJndW1l
bnRzVXNlKE5vZGUmIG5vZGUsIEVkZ2UgZWRnZSkKKyAgICB2b2lkIG9ic2VydmVQcm9wZXJBcmd1
bWVudHNVc2UoTm9kZSogbm9kZSwgRWRnZSBlZGdlKQogICAgIHsKLSAgICAgICAgTm9kZSYgY2hp
bGQgPSBtX2dyYXBoW2VkZ2VdOwotICAgICAgICBpZiAoY2hpbGQub3AoKSAhPSBHZXRMb2NhbCkg
eworICAgICAgICBpZiAoZWRnZS0+b3AoKSAhPSBHZXRMb2NhbCkgewogICAgICAgICAgICAgLy8g
V2hlbiBjYW4gdGhpcyBoYXBwZW4/IEF0IGxlYXN0IHR3byBjYXNlcyB0aGF0IEkgY2FuIHRoaW5r
CiAgICAgICAgICAgICAvLyBvZjoKICAgICAgICAgICAgIC8vCkBAIC03MTAsMTggKzcwMywxOCBA
QCBwcml2YXRlOgogICAgICAgICAgICAgLy8KICAgICAgICAgICAgIC8vIDIpIElmIHdlJ3JlIGFj
Y2Vzc2luZyBhcmd1bWVudHMgd2UgZ290IGZyb20gdGhlIGhlYXAhCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoY2hpbGQub3AoKSA9PSBDcmVhdGVBcmd1bWVu
dHMKLSAgICAgICAgICAgICAgICAmJiBub2RlLmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lCi0g
ICAgICAgICAgICAgICAgICAgIT0gY2hpbGQuY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpCi0g
ICAgICAgICAgICAgICAgbV9jcmVhdGVzQXJndW1lbnRzLmFkZChjaGlsZC5jb2RlT3JpZ2luLmlu
bGluZUNhbGxGcmFtZSk7CisgICAgICAgICAgICBpZiAoZWRnZS0+b3AoKSA9PSBDcmVhdGVBcmd1
bWVudHMKKyAgICAgICAgICAgICAgICAmJiBub2RlLT5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFt
ZQorICAgICAgICAgICAgICAgICAgICE9IGVkZ2UtPmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1l
KQorICAgICAgICAgICAgICAgIG1fY3JlYXRlc0FyZ3VtZW50cy5hZGQoZWRnZS0+Y29kZU9yaWdp
bi5pbmxpbmVDYWxsRnJhbWUpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICBWYXJpYWJsZUFjY2Vz
c0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9IGNoaWxkLnZhcmlhYmxlQWNjZXNzRGF0YSgpOwot
ICAgICAgICBpZiAoY2hpbGQubG9jYWwoKSA9PSBtX2dyYXBoLnVuY2hlY2tlZEFyZ3VtZW50c1Jl
Z2lzdGVyRm9yKGNoaWxkLmNvZGVPcmlnaW4pCi0gICAgICAgICAgICAmJiBub2RlLmNvZGVPcmln
aW4uaW5saW5lQ2FsbEZyYW1lICE9IGNoaWxkLmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKSB7
Ci0gICAgICAgICAgICBtX2NyZWF0ZXNBcmd1bWVudHMuYWRkKGNoaWxkLmNvZGVPcmlnaW4uaW5s
aW5lQ2FsbEZyYW1lKTsKKyAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vz
c0RhdGEgPSBlZGdlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKKyAgICAgICAgaWYgKGVkZ2UtPmxv
Y2FsKCkgPT0gbV9ncmFwaC51bmNoZWNrZWRBcmd1bWVudHNSZWdpc3RlckZvcihlZGdlLT5jb2Rl
T3JpZ2luKQorICAgICAgICAgICAgJiYgbm9kZS0+Y29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUg
IT0gZWRnZS0+Y29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpIHsKKyAgICAgICAgICAgIG1fY3Jl
YXRlc0FyZ3VtZW50cy5hZGQoZWRnZS0+Y29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpOwogICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKQEAgLTcyOSwxOCArNzIyLDE4IEBAIHByaXZh
dGU6CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIAogICAgICAgICBBcmd1bWVudHNBbGlh
c2luZ0RhdGEmIGRhdGEgPSBtX2FyZ3VtZW50c0FsaWFzaW5nLmZpbmQodmFyaWFibGVBY2Nlc3NE
YXRhKS0+dmFsdWU7Ci0gICAgICAgIGRhdGEubWVyZ2VDYWxsQ29udGV4dChub2RlLmNvZGVPcmln
aW4uaW5saW5lQ2FsbEZyYW1lKTsKKyAgICAgICAgZGF0YS5tZXJnZUNhbGxDb250ZXh0KG5vZGUt
PmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKTsKICAgICB9CiAgICAgCi0gICAgYm9vbCBpc09L
VG9PcHRpbWl6ZShOb2RlJiBzb3VyY2UpCisgICAgYm9vbCBpc09LVG9PcHRpbWl6ZShOb2RlKiBz
b3VyY2UpCiAgICAgewotICAgICAgICBpZiAobV9jcmVhdGVzQXJndW1lbnRzLmNvbnRhaW5zKHNv
dXJjZS5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSkpCisgICAgICAgIGlmIChtX2NyZWF0ZXNB
cmd1bWVudHMuY29udGFpbnMoc291cmNlLT5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSkpCiAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIAotICAgICAgICBzd2l0Y2ggKHNvdXJj
ZS5vcCgpKSB7CisgICAgICAgIHN3aXRjaCAoc291cmNlLT5vcCgpKSB7CiAgICAgICAgIGNhc2Ug
R2V0TG9jYWw6IHsKLSAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nl
c3NEYXRhID0gc291cmNlLnZhcmlhYmxlQWNjZXNzRGF0YSgpOwotICAgICAgICAgICAgaW50IGFy
Z3VtZW50c1JlZ2lzdGVyID0gbV9ncmFwaC51bmNoZWNrZWRBcmd1bWVudHNSZWdpc3RlckZvcihz
b3VyY2UuY29kZU9yaWdpbik7CisgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlh
YmxlQWNjZXNzRGF0YSA9IHNvdXJjZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CisgICAgICAgICAg
ICBpbnQgYXJndW1lbnRzUmVnaXN0ZXIgPSBtX2dyYXBoLnVuY2hlY2tlZEFyZ3VtZW50c1JlZ2lz
dGVyRm9yKHNvdXJjZS0+Y29kZU9yaWdpbik7CiAgICAgICAgICAgICBpZiAoYXJndW1lbnRzUmVn
aXN0ZXIgPT0gSW52YWxpZFZpcnR1YWxSZWdpc3RlcikKICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgIGlmIChhcmd1bWVudHNSZWdpc3RlciA9PSB2YXJpYWJsZUFjY2Vzc0RhdGEt
PmxvY2FsKCkpCkBAIC03NjgsMzggKzc2MSwzNyBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgfQogICAgIAotICAgIHZvaWQgcmVtb3ZlQXJndW1lbnRzUmVmZXJlbmNpbmdQ
aGFudG9tQ2hpbGQoTm9kZSYgbm9kZSwgdW5zaWduZWQgZWRnZUluZGV4KQorICAgIHZvaWQgcmVt
b3ZlQXJndW1lbnRzUmVmZXJlbmNpbmdQaGFudG9tQ2hpbGQoTm9kZSogbm9kZSwgdW5zaWduZWQg
ZWRnZUluZGV4KQogICAgIHsKLSAgICAgICAgRWRnZSBlZGdlID0gbm9kZS5jaGlsZHJlbi5jaGls
ZChlZGdlSW5kZXgpOworICAgICAgICBFZGdlIGVkZ2UgPSBub2RlLT5jaGlsZHJlbi5jaGlsZChl
ZGdlSW5kZXgpOwogICAgICAgICBpZiAoIWVkZ2UpCiAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgIAotICAgICAgICBOb2RlJiBjaGlsZCA9IG1fZ3JhcGhbZWRnZV07Ci0gICAgICAgIHN3aXRj
aCAoY2hpbGQub3AoKSkgeworICAgICAgICBzd2l0Y2ggKGVkZ2UtPm9wKCkpIHsKICAgICAgICAg
Y2FzZSBQaGk6IC8vIEFyaXNlcyBpZiB3ZSBoYWQgQ1NFIG9uIGEgR2V0TG9jYWwgb2YgdGhlIGFy
Z3VtZW50cyByZWdpc3Rlci4KICAgICAgICAgY2FzZSBHZXRMb2NhbDogLy8gQXJpc2VzIGlmIHdl
IGhhZCBDU0Ugb24gYW4gYXJndW1lbnRzIGFjY2VzcyB0byBhIHZhcmlhYmxlIGFsaWFzZWQgdG8g
dGhlIGFyZ3VtZW50cy4KICAgICAgICAgY2FzZSBTZXRMb2NhbDogeyAvLyBBcmlzZXMgaWYgd2Ug
aGFkIENTRSBvbiBhIEdldExvY2FsIG9mIHRoZSBhcmd1bWVudHMgcmVnaXN0ZXIuCi0gICAgICAg
ICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9IGNoaWxkLnZhcmlh
YmxlQWNjZXNzRGF0YSgpOworICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJs
ZUFjY2Vzc0RhdGEgPSBlZGdlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKICAgICAgICAgICAgIGJv
b2wgaXNEZWFkQXJndW1lbnRzUmVnaXN0ZXIgPQogICAgICAgICAgICAgICAgIHZhcmlhYmxlQWNj
ZXNzRGF0YS0+bG9jYWwoKSA9PQotICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLnVuY2hlY2tl
ZEFyZ3VtZW50c1JlZ2lzdGVyRm9yKGNoaWxkLmNvZGVPcmlnaW4pCi0gICAgICAgICAgICAgICAg
JiYgIW1fY3JlYXRlc0FyZ3VtZW50cy5jb250YWlucyhjaGlsZC5jb2RlT3JpZ2luLmlubGluZUNh
bGxGcmFtZSk7CisgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgudW5jaGVja2VkQXJndW1lbnRz
UmVnaXN0ZXJGb3IoZWRnZS0+Y29kZU9yaWdpbikKKyAgICAgICAgICAgICAgICAmJiAhbV9jcmVh
dGVzQXJndW1lbnRzLmNvbnRhaW5zKGVkZ2UtPmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKTsK
ICAgICAgICAgICAgIGJvb2wgaXNBbGlhc2VkQXJndW1lbnRzUmVnaXN0ZXIgPQogICAgICAgICAg
ICAgICAgICF2YXJpYWJsZUFjY2Vzc0RhdGEtPmlzQ2FwdHVyZWQoKQogICAgICAgICAgICAgICAg
ICYmIG1fYXJndW1lbnRzQWxpYXNpbmcuZmluZCh2YXJpYWJsZUFjY2Vzc0RhdGEpLT52YWx1ZS5p
c1ZhbGlkKCkKLSAgICAgICAgICAgICAgICAmJiAhbV9jcmVhdGVzQXJndW1lbnRzLmNvbnRhaW5z
KGNoaWxkLmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKTsKKyAgICAgICAgICAgICAgICAmJiAh
bV9jcmVhdGVzQXJndW1lbnRzLmNvbnRhaW5zKGVkZ2UtPmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZy
YW1lKTsKICAgICAgICAgICAgIGlmICghaXNEZWFkQXJndW1lbnRzUmVnaXN0ZXIgJiYgIWlzQWxp
YXNlZEFyZ3VtZW50c1JlZ2lzdGVyKQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgbV9ncmFwaC5kZXJlZihlZGdlKTsKLSAgICAgICAgICAgIG5vZGUuY2hpbGRyZW4ucmVtb3Zl
RWRnZUZyb21CYWcoZWRnZUluZGV4KTsKKyAgICAgICAgICAgIG5vZGUtPmNoaWxkcmVuLnJlbW92
ZUVkZ2VGcm9tQmFnKGVkZ2VJbmRleCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQog
ICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgQ3JlYXRlQXJndW1lbnRzOiB7IC8vIEFyaXNlcyBp
ZiB3ZSBDU0UgdHdvIEdldExvY2FscyB0byB0aGUgYXJndW1lbnRzIHJlZ2lzdGVyIGFuZCB0aGVu
IENTRSB0aGUgc2Vjb25kIHVzZSBvZiB0aGUgR2V0TG9jYWwgdG8gdGhlIGZpcnN0LgotICAgICAg
ICAgICAgaWYgKG1fY3JlYXRlc0FyZ3VtZW50cy5jb250YWlucyhjaGlsZC5jb2RlT3JpZ2luLmlu
bGluZUNhbGxGcmFtZSkpCisgICAgICAgICAgICBpZiAobV9jcmVhdGVzQXJndW1lbnRzLmNvbnRh
aW5zKGVkZ2UtPmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKSkKICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgIG1fZ3JhcGguZGVyZWYoZWRnZSk7Ci0gICAgICAgICAgICBub2Rl
LmNoaWxkcmVuLnJlbW92ZUVkZ2VGcm9tQmFnKGVkZ2VJbmRleCk7CisgICAgICAgICAgICBub2Rl
LT5jaGlsZHJlbi5yZW1vdmVFZGdlRnJvbUJhZyhlZGdlSW5kZXgpOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdBcnJheU1vZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQXJyYXlNb2RlLmNwcAkocmV2aXNpb24gMTQwOTA0KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdBcnJheU1vZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNDEsMTkg
KzI0MSwxOSBAQCBTdHJ1Y3R1cmUqIEFycmF5TW9kZTo6b3JpZ2luYWxBcnJheVN0cnVjCiAgICAg
fQogfQogCi1TdHJ1Y3R1cmUqIEFycmF5TW9kZTo6b3JpZ2luYWxBcnJheVN0cnVjdHVyZShHcmFw
aCYgZ3JhcGgsIE5vZGUmIG5vZGUpIGNvbnN0CitTdHJ1Y3R1cmUqIEFycmF5TW9kZTo6b3JpZ2lu
YWxBcnJheVN0cnVjdHVyZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUpIGNvbnN0CiB7Ci0gICAg
cmV0dXJuIG9yaWdpbmFsQXJyYXlTdHJ1Y3R1cmUoZ3JhcGgsIG5vZGUuY29kZU9yaWdpbik7Cisg
ICAgcmV0dXJuIG9yaWdpbmFsQXJyYXlTdHJ1Y3R1cmUoZ3JhcGgsIG5vZGUtPmNvZGVPcmlnaW4p
OwogfQogCi1ib29sIEFycmF5TW9kZTo6YWxyZWFkeUNoZWNrZWQoR3JhcGgmIGdyYXBoLCBOb2Rl
JiBub2RlLCBBYnN0cmFjdFZhbHVlJiB2YWx1ZSwgSW5kZXhpbmdUeXBlIHNoYXBlKSBjb25zdAor
Ym9vbCBBcnJheU1vZGU6OmFscmVhZHlDaGVja2VkKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSwg
QWJzdHJhY3RWYWx1ZSYgdmFsdWUsIEluZGV4aW5nVHlwZSBzaGFwZSkgY29uc3QKIHsKICAgICBz
d2l0Y2ggKGFycmF5Q2xhc3MoKSkgewogICAgIGNhc2UgQXJyYXk6Ok9yaWdpbmFsQXJyYXk6CiAg
ICAgICAgIHJldHVybiB2YWx1ZS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5oYXNTaW5nbGV0b24o
KQogICAgICAgICAgICAgJiYgKHZhbHVlLm1fY3VycmVudEtub3duU3RydWN0dXJlLnNpbmdsZXRv
bigpLT5pbmRleGluZ1R5cGUoKSAmIEluZGV4aW5nU2hhcGVNYXNrKSA9PSBzaGFwZQogICAgICAg
ICAgICAgJiYgKHZhbHVlLm1fY3VycmVudEtub3duU3RydWN0dXJlLnNpbmdsZXRvbigpLT5pbmRl
eGluZ1R5cGUoKSAmIElzQXJyYXkpCi0gICAgICAgICAgICAmJiBncmFwaC5nbG9iYWxPYmplY3RG
b3Iobm9kZS5jb2RlT3JpZ2luKS0+aXNPcmlnaW5hbEFycmF5U3RydWN0dXJlKHZhbHVlLm1fY3Vy
cmVudEtub3duU3RydWN0dXJlLnNpbmdsZXRvbigpKTsKKyAgICAgICAgICAgICYmIGdyYXBoLmds
b2JhbE9iamVjdEZvcihub2RlLT5jb2RlT3JpZ2luKS0+aXNPcmlnaW5hbEFycmF5U3RydWN0dXJl
KHZhbHVlLm1fY3VycmVudEtub3duU3RydWN0dXJlLnNpbmdsZXRvbigpKTsKICAgICAgICAgCiAg
ICAgY2FzZSBBcnJheTo6QXJyYXk6CiAgICAgICAgIGlmIChhcnJheU1vZGVzQWxyZWFkeUNoZWNr
ZWQodmFsdWUubV9hcnJheU1vZGVzLCBhc0FycmF5TW9kZXMoc2hhcGUgfCBJc0FycmF5KSkpCkBA
IC0yNzAsNyArMjcwLDcgQEAgYm9vbCBBcnJheU1vZGU6OmFscmVhZHlDaGVja2VkKEdyYXBoJiBn
cgogICAgIH0KIH0KIAotYm9vbCBBcnJheU1vZGU6OmFscmVhZHlDaGVja2VkKEdyYXBoJiBncmFw
aCwgTm9kZSYgbm9kZSwgQWJzdHJhY3RWYWx1ZSYgdmFsdWUpIGNvbnN0Citib29sIEFycmF5TW9k
ZTo6YWxyZWFkeUNoZWNrZWQoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlLCBBYnN0cmFjdFZhbHVl
JiB2YWx1ZSkgY29uc3QKIHsKICAgICBzd2l0Y2ggKHR5cGUoKSkgewogICAgIGNhc2UgQXJyYXk6
OkdlbmVyaWM6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FycmF5TW9kZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlNb2RlLmgJ
KHJldmlzaW9uIDE0MDkwNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlN
b2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTE5Nyw3ICsxOTcsNyBAQCBwdWJsaWM6CiAgICAgCiAg
ICAgQXJyYXlNb2RlIHJlZmluZShTcGVjdWxhdGVkVHlwZSBiYXNlLCBTcGVjdWxhdGVkVHlwZSBp
bmRleCwgU3BlY3VsYXRlZFR5cGUgdmFsdWUgPSBTcGVjTm9uZSwgTm9kZUZsYWdzID0gMCkgY29u
c3Q7CiAgICAgCi0gICAgYm9vbCBhbHJlYWR5Q2hlY2tlZChHcmFwaCYsIE5vZGUmLCBBYnN0cmFj
dFZhbHVlJikgY29uc3Q7CisgICAgYm9vbCBhbHJlYWR5Q2hlY2tlZChHcmFwaCYsIE5vZGUqLCBB
YnN0cmFjdFZhbHVlJikgY29uc3Q7CiAgICAgCiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikg
Y29uc3Q7CiAgICAgCkBAIC0zNDMsNyArMzQzLDcgQEAgcHVibGljOgogICAgIAogICAgIC8vIFJl
dHVybnMgMCBpZiB0aGlzIGlzIG5vdCBPcmlnaW5hbEFycmF5LgogICAgIFN0cnVjdHVyZSogb3Jp
Z2luYWxBcnJheVN0cnVjdHVyZShHcmFwaCYsIGNvbnN0IENvZGVPcmlnaW4mKSBjb25zdDsKLSAg
ICBTdHJ1Y3R1cmUqIG9yaWdpbmFsQXJyYXlTdHJ1Y3R1cmUoR3JhcGgmLCBOb2RlJikgY29uc3Q7
CisgICAgU3RydWN0dXJlKiBvcmlnaW5hbEFycmF5U3RydWN0dXJlKEdyYXBoJiwgTm9kZSopIGNv
bnN0OwogICAgIAogICAgIGJvb2wgYmVuZWZpdHNGcm9tU3RydWN0dXJlQ2hlY2soKSBjb25zdAog
ICAgIHsKQEAgLTQyMiw3ICs0MjIsNyBAQCBwcml2YXRlOgogICAgICAgICB9CiAgICAgfQogICAg
IAotICAgIGJvb2wgYWxyZWFkeUNoZWNrZWQoR3JhcGgmLCBOb2RlJiwgQWJzdHJhY3RWYWx1ZSYs
IEluZGV4aW5nVHlwZSBzaGFwZSkgY29uc3Q7CisgICAgYm9vbCBhbHJlYWR5Q2hlY2tlZChHcmFw
aCYsIE5vZGUqLCBBYnN0cmFjdFZhbHVlJiwgSW5kZXhpbmdUeXBlIHNoYXBlKSBjb25zdDsKICAg
ICAKICAgICB1bmlvbiB7CiAgICAgICAgIHN0cnVjdCB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0FycmF5aWZ5U2xvd1BhdGhHZW5lcmF0b3IuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FycmF5aWZ5U2xvd1BhdGhHZW5lcmF0b3IuaAko
cmV2aXNpb24gMTQwOTA0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJheWlm
eVNsb3dQYXRoR2VuZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMiwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQzLDEyICs0MywxMiBAQCBuYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiBjbGFzcyBBcnJheWlmeVNsb3dQYXRoR2VuZXJh
dG9yIDogcHVibGljIEp1bXBpbmdTbG93UGF0aEdlbmVyYXRvcjxNYWNyb0Fzc2VtYmxlcjo6SnVt
cExpc3Q+IHsKIHB1YmxpYzoKICAgICBBcnJheWlmeVNsb3dQYXRoR2VuZXJhdG9yKAotICAgICAg
ICBjb25zdCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QmIGZyb20sIFNwZWN1bGF0aXZlSklUKiBq
aXQsIE5vZGUmIG5vZGUsIEdQUlJlZyBiYXNlR1BSLAorICAgICAgICBjb25zdCBNYWNyb0Fzc2Vt
Ymxlcjo6SnVtcExpc3QmIGZyb20sIFNwZWN1bGF0aXZlSklUKiBqaXQsIE5vZGUqIG5vZGUsIEdQ
UlJlZyBiYXNlR1BSLAogICAgICAgICBHUFJSZWcgcHJvcGVydHlHUFIsIEdQUlJlZyB0ZW1wR1BS
LCBHUFJSZWcgc3RydWN0dXJlR1BSKQogICAgICAgICA6IEp1bXBpbmdTbG93UGF0aEdlbmVyYXRv
cjxNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Q+KGZyb20sIGppdCkKLSAgICAgICAgLCBtX29wKG5v
ZGUub3AoKSkKLSAgICAgICAgLCBtX2FycmF5TW9kZShub2RlLmFycmF5TW9kZSgpKQotICAgICAg
ICAsIG1fc3RydWN0dXJlKG5vZGUub3AoKSA9PSBBcnJheWlmeVRvU3RydWN0dXJlID8gbm9kZS5z
dHJ1Y3R1cmUoKSA6IDApCisgICAgICAgICwgbV9vcChub2RlLT5vcCgpKQorICAgICAgICAsIG1f
YXJyYXlNb2RlKG5vZGUtPmFycmF5TW9kZSgpKQorICAgICAgICAsIG1fc3RydWN0dXJlKG5vZGUt
Pm9wKCkgPT0gQXJyYXlpZnlUb1N0cnVjdHVyZSA/IG5vZGUtPnN0cnVjdHVyZSgpIDogMCkKICAg
ICAgICAgLCBtX2Jhc2VHUFIoYmFzZUdQUikKICAgICAgICAgLCBtX3Byb3BlcnR5R1BSKHByb3Bl
cnR5R1BSKQogICAgICAgICAsIG1fdGVtcEdQUih0ZW1wR1BSKQpAQCAtNjMsMTMgKzYzLDEzIEBA
IHB1YmxpYzoKICAgICAgICAgICAgIGNhc2UgQXJyYXk6OkludDMyOgogICAgICAgICAgICAgY2Fz
ZSBBcnJheTo6RG91YmxlOgogICAgICAgICAgICAgY2FzZSBBcnJheTo6Q29udGlndW91czoKLSAg
ICAgICAgICAgICAgICBtX2JhZFByb3BlcnR5SnVtcCA9IGppdC0+c3BlY3VsYXRpb25DaGVjayhV
bmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlKTsKKyAgICAgICAgICAgICAgICBtX2Jh
ZFByb3BlcnR5SnVtcCA9IGppdC0+c3BlY3VsYXRpb25DaGVjayhVbmNvdW50YWJsZSwgSlNWYWx1
ZVJlZ3MoKSwgMCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBkZWZhdWx0
OgogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAg
ICAgIG1fYmFkSW5kZXhpbmdUeXBlSnVtcCA9IGppdC0+c3BlY3VsYXRpb25DaGVjayhCYWRJbmRl
eGluZ1R5cGUsIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKG1fYmFzZUdQUiksIE5vTm9kZSk7
CisgICAgICAgIG1fYmFkSW5kZXhpbmdUeXBlSnVtcCA9IGppdC0+c3BlY3VsYXRpb25DaGVjayhC
YWRJbmRleGluZ1R5cGUsIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKG1fYmFzZUdQUiksIDAp
OwogICAgIH0KICAgICAKIHByb3RlY3RlZDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQmFzaWNCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQmFzaWNCbG9jay5oCShyZXZpc2lvbiAxNDA5MDQpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtNDIsNyArNDIsNyBA
QCBjbGFzcyBHcmFwaDsKIAogdHlwZWRlZiBWZWN0b3IgPEJsb2NrSW5kZXgsIDI+IFByZWRlY2Vz
c29yTGlzdDsKIAotc3RydWN0IEJhc2ljQmxvY2sgOiBWZWN0b3I8Tm9kZUluZGV4LCA4PiB7Citz
dHJ1Y3QgQmFzaWNCbG9jayA6IFZlY3RvcjxOb2RlKiwgOD4gewogICAgIEJhc2ljQmxvY2sodW5z
aWduZWQgYnl0ZWNvZGVCZWdpbiwgdW5zaWduZWQgbnVtQXJndW1lbnRzLCB1bnNpZ25lZCBudW1M
b2NhbHMpCiAgICAgICAgIDogYnl0ZWNvZGVCZWdpbihieXRlY29kZUJlZ2luKQogICAgICAgICAs
IGlzT1NSVGFyZ2V0KGZhbHNlKQpAQCAtNzUsNyArNzUsNyBAQCBzdHJ1Y3QgQmFzaWNCbG9jayA6
IFZlY3RvcjxOb2RlSW5kZXgsIDg+CiAgICAgfQogICAgIAogICAgIHNpemVfdCBudW1Ob2Rlcygp
IGNvbnN0IHsgcmV0dXJuIHBoaXMuc2l6ZSgpICsgc2l6ZSgpOyB9Ci0gICAgTm9kZUluZGV4IG5v
ZGVJbmRleChzaXplX3QgaSkgY29uc3QKKyAgICBOb2RlKiBub2RlKHNpemVfdCBpKSBjb25zdAog
ICAgIHsKICAgICAgICAgaWYgKGkgPCBwaGlzLnNpemUoKSkKICAgICAgICAgICAgIHJldHVybiBw
aGlzW2ldOwpAQCAtODMsMjYgKzgzLDI2IEBAIHN0cnVjdCBCYXNpY0Jsb2NrIDogVmVjdG9yPE5v
ZGVJbmRleCwgOD4KICAgICB9CiAgICAgYm9vbCBpc1BoaUluZGV4KHNpemVfdCBpKSBjb25zdCB7
IHJldHVybiBpIDwgcGhpcy5zaXplKCk7IH0KICAgICAKLSAgICBib29sIGlzSW5QaGlzKE5vZGVJ
bmRleCBub2RlSW5kZXgpIGNvbnN0CisgICAgYm9vbCBpc0luUGhpcyhOb2RlKiBub2RlKSBjb25z
dAogICAgIHsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwaGlzLnNpemUoKTsgKytp
KSB7Ci0gICAgICAgICAgICBpZiAocGhpc1tpXSA9PSBub2RlSW5kZXgpCisgICAgICAgICAgICBp
ZiAocGhpc1tpXSA9PSBub2RlKQogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAg
ICB9CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgCi0gICAgYm9vbCBpc0luQmxv
Y2soTm9kZUluZGV4IGluZGV4KSBjb25zdAorICAgIGJvb2wgaXNJbkJsb2NrKE5vZGUqIG15Tm9k
ZSkgY29uc3QKICAgICB7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtTm9kZXMo
KTsgKytpKSB7Ci0gICAgICAgICAgICBpZiAobm9kZUluZGV4KGkpID09IGluZGV4KQorICAgICAg
ICAgICAgaWYgKG5vZGUoaSkgPT0gbXlOb2RlKQogICAgICAgICAgICAgICAgIHJldHVybiB0cnVl
OwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgCiAjZGVmaW5l
IERGR19ERUZJTkVfQVBQRU5EX05PREUodGVtcGxhdGVQcmUsIHRlbXBsYXRlUG9zdCwgdHlwZVBh
cmFtcywgdmFsdWVQYXJhbXNDb21tYSwgdmFsdWVQYXJhbXMsIHZhbHVlQXJncykgXAotICAgIHRl
bXBsYXRlUHJlIHR5cGVQYXJhbXMgdGVtcGxhdGVQb3N0IE5vZGVJbmRleCBhcHBlbmROb2RlKEdy
YXBoJiwgUmVmQ2hpbGRyZW5Nb2RlLCBSZWZOb2RlTW9kZSwgU3BlY3VsYXRlZFR5cGUgdmFsdWVQ
YXJhbXNDb21tYSB2YWx1ZVBhcmFtcyk7CisgICAgdGVtcGxhdGVQcmUgdHlwZVBhcmFtcyB0ZW1w
bGF0ZVBvc3QgTm9kZSogYXBwZW5kTm9kZShHcmFwaCYsIFJlZkNoaWxkcmVuTW9kZSwgUmVmTm9k
ZU1vZGUsIFNwZWN1bGF0ZWRUeXBlIHZhbHVlUGFyYW1zQ29tbWEgdmFsdWVQYXJhbXMpOwogICAg
IERGR19WQVJJQURJQ19URU1QTEFURV9GVU5DVElPTihERkdfREVGSU5FX0FQUEVORF9OT0RFKQog
I3VuZGVmIERGR19ERUZJTkVfQVBQRU5EX05PREUKICAgICAKQEAgLTEyMSwxMSArMTIxLDExIEBA
IHN0cnVjdCBCYXNpY0Jsb2NrIDogVmVjdG9yPE5vZGVJbmRleCwgOD4KICNlbmRpZgogICAgIGJv
b2wgaXNSZWFjaGFibGU7CiAgICAgCi0gICAgVmVjdG9yPE5vZGVJbmRleD4gcGhpczsKKyAgICBW
ZWN0b3I8Tm9kZSo+IHBoaXM7CiAgICAgUHJlZGVjZXNzb3JMaXN0IG1fcHJlZGVjZXNzb3JzOwog
ICAgIAotICAgIE9wZXJhbmRzPE5vZGVJbmRleCwgTm9kZUluZGV4VHJhaXRzPiB2YXJpYWJsZXNB
dEhlYWQ7Ci0gICAgT3BlcmFuZHM8Tm9kZUluZGV4LCBOb2RlSW5kZXhUcmFpdHM+IHZhcmlhYmxl
c0F0VGFpbDsKKyAgICBPcGVyYW5kczxOb2RlKiwgTm9kZVBvaW50ZXJUcmFpdHM+IHZhcmlhYmxl
c0F0SGVhZDsKKyAgICBPcGVyYW5kczxOb2RlKiwgTm9kZVBvaW50ZXJUcmFpdHM+IHZhcmlhYmxl
c0F0VGFpbDsKICAgICAKICAgICBPcGVyYW5kczxBYnN0cmFjdFZhbHVlPiB2YWx1ZXNBdEhlYWQ7
CiAgICAgT3BlcmFuZHM8QWJzdHJhY3RWYWx1ZT4gdmFsdWVzQXRUYWlsOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrSW5saW5lcy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9ja0lubGluZXMuaAkocmV2aXNp
b24gMTQwOTA0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrSW5s
aW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw5ICszNCw5IEBACiBuYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIERGRyB7CiAKICNkZWZpbmUgREZHX0RFRklORV9BUFBFTkRfTk9ERSh0ZW1wbGF0
ZVByZSwgdGVtcGxhdGVQb3N0LCB0eXBlUGFyYW1zLCB2YWx1ZVBhcmFtc0NvbW1hLCB2YWx1ZVBh
cmFtcywgdmFsdWVBcmdzKSBcCi0gICAgdGVtcGxhdGVQcmUgdHlwZVBhcmFtcyB0ZW1wbGF0ZVBv
c3QgTm9kZUluZGV4IEJhc2ljQmxvY2s6OmFwcGVuZE5vZGUoR3JhcGgmIGdyYXBoLCBSZWZDaGls
ZHJlbk1vZGUgcmVmQ2hpbGRyZW5Nb2RlLCBSZWZOb2RlTW9kZSByZWZOb2RlTW9kZSwgU3BlY3Vs
YXRlZFR5cGUgdHlwZSB2YWx1ZVBhcmFtc0NvbW1hIHZhbHVlUGFyYW1zKSBcCisgICAgdGVtcGxh
dGVQcmUgdHlwZVBhcmFtcyB0ZW1wbGF0ZVBvc3QgTm9kZSogQmFzaWNCbG9jazo6YXBwZW5kTm9k
ZShHcmFwaCYgZ3JhcGgsIFJlZkNoaWxkcmVuTW9kZSByZWZDaGlsZHJlbk1vZGUsIFJlZk5vZGVN
b2RlIHJlZk5vZGVNb2RlLCBTcGVjdWxhdGVkVHlwZSB0eXBlIHZhbHVlUGFyYW1zQ29tbWEgdmFs
dWVQYXJhbXMpIFwKICAgICB7IFwKLSAgICAgICAgTm9kZUluZGV4IHJlc3VsdCA9IGdyYXBoLmFk
ZE5vZGUocmVmQ2hpbGRyZW5Nb2RlLCByZWZOb2RlTW9kZSwgdHlwZSB2YWx1ZVBhcmFtc0NvbW1h
IHZhbHVlQXJncyk7IFwKKyAgICAgICAgTm9kZSogcmVzdWx0ID0gZ3JhcGguYWRkTm9kZShyZWZD
aGlsZHJlbk1vZGUsIHJlZk5vZGVNb2RlLCB0eXBlIHZhbHVlUGFyYW1zQ29tbWEgdmFsdWVBcmdz
KTsgXAogICAgICAgICBhcHBlbmQocmVzdWx0KTsgXAogICAgICAgICByZXR1cm4gcmVzdWx0OyBc
CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNl
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29k
ZVBhcnNlci5jcHAJKHJldmlzaW9uIDE0MDkwNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjEsMjYgKzE2MSwy
NiBAQCBwcml2YXRlOgogICAgIAogICAgIC8vIEhhbmRsZSBjYWxscy4gVGhpcyByZXNvbHZlcyBp
c3N1ZXMgc3Vycm91bmRpbmcgaW5saW5pbmcgYW5kIGludHJpbnNpY3MuCiAgICAgdm9pZCBoYW5k
bGVDYWxsKEludGVycHJldGVyKiwgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgTm9k
ZVR5cGUgb3AsIENvZGVTcGVjaWFsaXphdGlvbktpbmQpOwotICAgIHZvaWQgZW1pdEZ1bmN0aW9u
Q2hlY2tzKGNvbnN0IENhbGxMaW5rU3RhdHVzJiwgTm9kZUluZGV4IGNhbGxUYXJnZXQsIGludCBy
ZWdpc3Rlck9mZnNldCwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCk7CisgICAgdm9pZCBlbWl0RnVu
Y3Rpb25DaGVja3MoY29uc3QgQ2FsbExpbmtTdGF0dXMmLCBOb2RlKiBjYWxsVGFyZ2V0LCBpbnQg
cmVnaXN0ZXJPZmZzZXQsIENvZGVTcGVjaWFsaXphdGlvbktpbmQpOwogICAgIC8vIEhhbmRsZSBp
bmxpbmluZy4gUmV0dXJuIHRydWUgaWYgaXQgc3VjY2VlZGVkLCBmYWxzZSBpZiB3ZSBuZWVkIHRv
IHBsYW50IGEgY2FsbC4KLSAgICBib29sIGhhbmRsZUlubGluaW5nKGJvb2wgdXNlc1Jlc3VsdCwg
Tm9kZUluZGV4IGNhbGxUYXJnZXROb2RlSW5kZXgsIGludCByZXN1bHRPcGVyYW5kLCBjb25zdCBD
YWxsTGlua1N0YXR1cyYsIGludCByZWdpc3Rlck9mZnNldCwgaW50IGFyZ3VtZW50Q291bnRJbmNs
dWRpbmdUaGlzLCB1bnNpZ25lZCBuZXh0T2Zmc2V0LCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kKTsK
KyAgICBib29sIGhhbmRsZUlubGluaW5nKGJvb2wgdXNlc1Jlc3VsdCwgTm9kZSogY2FsbFRhcmdl
dE5vZGUsIGludCByZXN1bHRPcGVyYW5kLCBjb25zdCBDYWxsTGlua1N0YXR1cyYsIGludCByZWdp
c3Rlck9mZnNldCwgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCB1bnNpZ25lZCBuZXh0
T2Zmc2V0LCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kKTsKICAgICAvLyBIYW5kbGUgc2V0dGluZyB0
aGUgcmVzdWx0IG9mIGFuIGludHJpbnNpYy4KLSAgICB2b2lkIHNldEludHJpbnNpY1Jlc3VsdChi
b29sIHVzZXNSZXN1bHQsIGludCByZXN1bHRPcGVyYW5kLCBOb2RlSW5kZXgpOworICAgIHZvaWQg
c2V0SW50cmluc2ljUmVzdWx0KGJvb2wgdXNlc1Jlc3VsdCwgaW50IHJlc3VsdE9wZXJhbmQsIE5v
ZGUqKTsKICAgICAvLyBIYW5kbGUgaW50cmluc2ljIGZ1bmN0aW9ucy4gUmV0dXJuIHRydWUgaWYg
aXQgc3VjY2VlZGVkLCBmYWxzZSBpZiB3ZSBuZWVkIHRvIHBsYW50IGEgY2FsbC4KICAgICBib29s
IGhhbmRsZUludHJpbnNpYyhib29sIHVzZXNSZXN1bHQsIGludCByZXN1bHRPcGVyYW5kLCBJbnRy
aW5zaWMsIGludCByZWdpc3Rlck9mZnNldCwgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlz
LCBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uKTsKICAgICBib29sIGhhbmRsZUNvbnN0YW50SW50
ZXJuYWxGdW5jdGlvbihib29sIHVzZXNSZXN1bHQsIGludCByZXN1bHRPcGVyYW5kLCBJbnRlcm5h
bEZ1bmN0aW9uKiwgaW50IHJlZ2lzdGVyT2Zmc2V0LCBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGlu
Z1RoaXMsIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24sIENvZGVTcGVjaWFsaXphdGlvbktpbmQp
OwotICAgIE5vZGVJbmRleCBoYW5kbGVHZXRCeU9mZnNldChTcGVjdWxhdGVkVHlwZSwgTm9kZUlu
ZGV4IGJhc2UsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIFByb3BlcnR5T2Zmc2V0KTsKKyAg
ICBOb2RlKiBoYW5kbGVHZXRCeU9mZnNldChTcGVjdWxhdGVkVHlwZSwgTm9kZSogYmFzZSwgdW5z
aWduZWQgaWRlbnRpZmllck51bWJlciwgUHJvcGVydHlPZmZzZXQpOwogICAgIHZvaWQgaGFuZGxl
R2V0QnlPZmZzZXQoCi0gICAgICAgIGludCBkZXN0aW5hdGlvbk9wZXJhbmQsIFNwZWN1bGF0ZWRU
eXBlLCBOb2RlSW5kZXggYmFzZSwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwKKyAgICAgICAg
aW50IGRlc3RpbmF0aW9uT3BlcmFuZCwgU3BlY3VsYXRlZFR5cGUsIE5vZGUqIGJhc2UsIHVuc2ln
bmVkIGlkZW50aWZpZXJOdW1iZXIsCiAgICAgICAgIFByb3BlcnR5T2Zmc2V0KTsKICAgICB2b2lk
IGhhbmRsZUdldEJ5SWQoCi0gICAgICAgIGludCBkZXN0aW5hdGlvbk9wZXJhbmQsIFNwZWN1bGF0
ZWRUeXBlLCBOb2RlSW5kZXggYmFzZSwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwKKyAgICAg
ICAgaW50IGRlc3RpbmF0aW9uT3BlcmFuZCwgU3BlY3VsYXRlZFR5cGUsIE5vZGUqIGJhc2UsIHVu
c2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsCiAgICAgICAgIGNvbnN0IEdldEJ5SWRTdGF0dXMmKTsK
IAotICAgIE5vZGVJbmRleCBnZXRTY29wZShib29sIHNraXBUb3AsIHVuc2lnbmVkIHNraXBDb3Vu
dCk7CisgICAgTm9kZSogZ2V0U2NvcGUoYm9vbCBza2lwVG9wLCB1bnNpZ25lZCBza2lwQ291bnQp
OwogICAgIAogICAgIC8vIENvbnZlcnQgYSBzZXQgb2YgUmVzb2x2ZU9wZXJhdGlvbnMgaW50byBn
cmFwaCBub2RlcwotICAgIGJvb2wgcGFyc2VSZXNvbHZlT3BlcmF0aW9ucyhTcGVjdWxhdGVkVHlw
ZSwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgdW5zaWduZWQgb3BlcmF0aW9ucywgdW5zaWdu
ZWQgcHV0VG9CYXNlT3BlcmF0aW9uLCBOb2RlSW5kZXgqIGJhc2UsIE5vZGVJbmRleCogdmFsdWUp
OworICAgIGJvb2wgcGFyc2VSZXNvbHZlT3BlcmF0aW9ucyhTcGVjdWxhdGVkVHlwZSwgdW5zaWdu
ZWQgaWRlbnRpZmllck51bWJlciwgdW5zaWduZWQgb3BlcmF0aW9ucywgdW5zaWduZWQgcHV0VG9C
YXNlT3BlcmF0aW9uLCBOb2RlKiogYmFzZSwgTm9kZSoqIHZhbHVlKTsKIAogICAgIC8vIFByZXBh
cmUgdG8gcGFyc2UgYSBibG9jay4KICAgICB2b2lkIHByZXBhcmVUb1BhcnNlQmxvY2soKTsKQEAg
LTIxMCw3ICsyMTAsNyBAQCBwcml2YXRlOgogICAgIH0KICAgICAKICAgICAvLyBHZXQvU2V0IHRo
ZSBvcGVyYW5kcy9yZXN1bHQgb2YgYSBieXRlY29kZSBpbnN0cnVjdGlvbi4KLSAgICBOb2RlSW5k
ZXggZ2V0RGlyZWN0KGludCBvcGVyYW5kKQorICAgIE5vZGUqIGdldERpcmVjdChpbnQgb3BlcmFu
ZCkKICAgICB7CiAgICAgICAgIC8vIElzIHRoaXMgYSBjb25zdGFudD8KICAgICAgICAgaWYgKG9w
ZXJhbmQgPj0gRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXgpIHsKQEAgLTIyOCw3ICsyMjgsNyBA
QCBwcml2YXRlOgogICAgICAgICAvLyBNdXN0IGJlIGEgbG9jYWwuCiAgICAgICAgIHJldHVybiBn
ZXRMb2NhbCgodW5zaWduZWQpb3BlcmFuZCk7CiAgICAgfQotICAgIE5vZGVJbmRleCBnZXQoaW50
IG9wZXJhbmQpCisgICAgTm9kZSogZ2V0KGludCBvcGVyYW5kKQogICAgIHsKICAgICAgICAgaWYg
KG9wZXJhbmQgPT0gSlNTdGFjazo6Q2FsbGVlKSB7CiAgICAgICAgICAgICBpZiAobV9pbmxpbmVT
dGFja1RvcC0+bV9pbmxpbmVDYWxsRnJhbWUgJiYgbV9pbmxpbmVTdGFja1RvcC0+bV9pbmxpbmVD
YWxsRnJhbWUtPmNhbGxlZSkKQEAgLTI0MCw3ICsyNDAsNyBAQCBwcml2YXRlOgogICAgICAgICBy
ZXR1cm4gZ2V0RGlyZWN0KG1faW5saW5lU3RhY2tUb3AtPnJlbWFwT3BlcmFuZChvcGVyYW5kKSk7
CiAgICAgfQogICAgIGVudW0gU2V0TW9kZSB7IE5vcm1hbFNldCwgU2V0T25FbnRyeSB9OwotICAg
IHZvaWQgc2V0RGlyZWN0KGludCBvcGVyYW5kLCBOb2RlSW5kZXggdmFsdWUsIFNldE1vZGUgc2V0
TW9kZSA9IE5vcm1hbFNldCkKKyAgICB2b2lkIHNldERpcmVjdChpbnQgb3BlcmFuZCwgTm9kZSog
dmFsdWUsIFNldE1vZGUgc2V0TW9kZSA9IE5vcm1hbFNldCkKICAgICB7CiAgICAgICAgIC8vIElz
IHRoaXMgYW4gYXJndW1lbnQ/CiAgICAgICAgIGlmIChvcGVyYW5kSXNBcmd1bWVudChvcGVyYW5k
KSkgewpAQCAtMjUxLDEyICsyNTEsMTIgQEAgcHJpdmF0ZToKICAgICAgICAgLy8gTXVzdCBiZSBh
IGxvY2FsLgogICAgICAgICBzZXRMb2NhbCgodW5zaWduZWQpb3BlcmFuZCwgdmFsdWUsIHNldE1v
ZGUpOwogICAgIH0KLSAgICB2b2lkIHNldChpbnQgb3BlcmFuZCwgTm9kZUluZGV4IHZhbHVlLCBT
ZXRNb2RlIHNldE1vZGUgPSBOb3JtYWxTZXQpCisgICAgdm9pZCBzZXQoaW50IG9wZXJhbmQsIE5v
ZGUqIHZhbHVlLCBTZXRNb2RlIHNldE1vZGUgPSBOb3JtYWxTZXQpCiAgICAgewogICAgICAgICBz
ZXREaXJlY3QobV9pbmxpbmVTdGFja1RvcC0+cmVtYXBPcGVyYW5kKG9wZXJhbmQpLCB2YWx1ZSwg
c2V0TW9kZSk7CiAgICAgfQogICAgIAotICAgIHZvaWQgc2V0UGFpcihpbnQgb3BlcmFuZDEsIE5v
ZGVJbmRleCB2YWx1ZTEsIGludCBvcGVyYW5kMiwgTm9kZUluZGV4IHZhbHVlMikKKyAgICB2b2lk
IHNldFBhaXIoaW50IG9wZXJhbmQxLCBOb2RlKiB2YWx1ZTEsIGludCBvcGVyYW5kMiwgTm9kZSog
dmFsdWUyKQogICAgIHsKICAgICAgICAgLy8gRmlyc3QgZW1pdCBkZWFkIFNldExvY2FscyBmb3Ig
dGhlIGJlbmVmaXQgb2YgT1NSLgogICAgICAgICBzZXQob3BlcmFuZDEsIHZhbHVlMSk7CkBAIC0y
NjcsNDkgKzI2Nyw0NCBAQCBwcml2YXRlOgogICAgICAgICBzZXQob3BlcmFuZDIsIHZhbHVlMik7
CiAgICAgfQogICAgIAotICAgIE5vZGVJbmRleCBpbmplY3RMYXp5T3BlcmFuZFNwZWN1bGF0aW9u
KE5vZGVJbmRleCBub2RlSW5kZXgpCisgICAgTm9kZSogaW5qZWN0TGF6eU9wZXJhbmRTcGVjdWxh
dGlvbihOb2RlKiBub2RlKQogICAgIHsKLSAgICAgICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhbbm9k
ZUluZGV4XTsKLSAgICAgICAgQVNTRVJUKG5vZGUub3AoKSA9PSBHZXRMb2NhbCk7Ci0gICAgICAg
IEFTU0VSVChub2RlLmNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCA9PSBtX2N1cnJlbnRJbmRleCk7
CisgICAgICAgIEFTU0VSVChub2RlLT5vcCgpID09IEdldExvY2FsKTsKKyAgICAgICAgQVNTRVJU
KG5vZGUtPmNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCA9PSBtX2N1cnJlbnRJbmRleCk7CiAgICAg
ICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24gPSAKICAgICAgICAgICAgIG1faW5saW5lU3Rh
Y2tUb3AtPm1fbGF6eU9wZXJhbmRzLnByZWRpY3Rpb24oCi0gICAgICAgICAgICAgICAgTGF6eU9w
ZXJhbmRWYWx1ZVByb2ZpbGVLZXkobV9jdXJyZW50SW5kZXgsIG5vZGUubG9jYWwoKSkpOworICAg
ICAgICAgICAgICAgIExhenlPcGVyYW5kVmFsdWVQcm9maWxlS2V5KG1fY3VycmVudEluZGV4LCBu
b2RlLT5sb2NhbCgpKSk7CiAjaWYgREZHX0VOQUJMRShERUJVR19WRVJCT1NFKQotICAgICAgICBk
YXRhTG9nKCJMYXp5IG9wZXJhbmQgW0AiLCBub2RlSW5kZXgsICIsIGJjIyIsIG1fY3VycmVudElu
ZGV4LCAiLCByIiwgbm9kZS5sb2NhbCgpLCAiXSBwcmVkaWN0aW9uOiAiLCBTcGVjdWxhdGlvbkR1
bXAocHJlZGljdGlvbiksICJcbiIpOworICAgICAgICBkYXRhTG9nKCJMYXp5IG9wZXJhbmQgW0Ai
LCBub2RlLT5pbmRleCgpLCAiLCBiYyMiLCBtX2N1cnJlbnRJbmRleCwgIiwgciIsIG5vZGUtPmxv
Y2FsKCksICJdIHByZWRpY3Rpb246ICIsIFNwZWN1bGF0aW9uRHVtcChwcmVkaWN0aW9uKSwgIlxu
Iik7CiAjZW5kaWYKLSAgICAgICAgbm9kZS52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+cHJlZGljdChw
cmVkaWN0aW9uKTsKLSAgICAgICAgcmV0dXJuIG5vZGVJbmRleDsKKyAgICAgICAgbm9kZS0+dmFy
aWFibGVBY2Nlc3NEYXRhKCktPnByZWRpY3QocHJlZGljdGlvbik7CisgICAgICAgIHJldHVybiBu
b2RlOwogICAgIH0KIAogICAgIC8vIFVzZWQgaW4gaW1wbGVtZW50aW5nIGdldC9zZXQsIGFib3Zl
LCB3aGVyZSB0aGUgb3BlcmFuZCBpcyBhIGxvY2FsIHZhcmlhYmxlLgotICAgIE5vZGVJbmRleCBn
ZXRMb2NhbCh1bnNpZ25lZCBvcGVyYW5kKQorICAgIE5vZGUqIGdldExvY2FsKHVuc2lnbmVkIG9w
ZXJhbmQpCiAgICAgewotICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4ID0gbV9jdXJyZW50Qmxv
Y2stPnZhcmlhYmxlc0F0VGFpbC5sb2NhbChvcGVyYW5kKTsKKyAgICAgICAgTm9kZSogbm9kZSA9
IG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwubG9jYWwob3BlcmFuZCk7CiAgICAgICAg
IGJvb2wgaXNDYXB0dXJlZCA9IG1fY29kZUJsb2NrLT5pc0NhcHR1cmVkKG9wZXJhbmQsIG1faW5s
aW5lU3RhY2tUb3AtPm1faW5saW5lQ2FsbEZyYW1lKTsKICAgICAgICAgCi0gICAgICAgIGlmIChu
b2RlSW5kZXggIT0gTm9Ob2RlKSB7Ci0gICAgICAgICAgICBOb2RlKiBub2RlUHRyID0gJm1fZ3Jh
cGhbbm9kZUluZGV4XTsKLSAgICAgICAgICAgIGlmIChub2RlUHRyLT5vcCgpID09IEZsdXNoKSB7
CisgICAgICAgIGlmIChub2RlKSB7CisgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBGbHVz
aCkgewogICAgICAgICAgICAgICAgIC8vIFR3byBwb3NzaWJpbGl0aWVzOiBlaXRoZXIgdGhlIGJs
b2NrIHdhbnRzIHRoZSBsb2NhbCB0byBiZSBsaXZlCiAgICAgICAgICAgICAgICAgLy8gYnV0IGhh
cyBub3QgbG9hZGVkIGl0cyB2YWx1ZSwgb3IgaXQgaGFzIGxvYWRlZCBpdHMgdmFsdWUsIGluCiAg
ICAgICAgICAgICAgICAgLy8gd2hpY2ggY2FzZSB3ZSdyZSBkb25lLgotICAgICAgICAgICAgICAg
IG5vZGVJbmRleCA9IG5vZGVQdHItPmNoaWxkMSgpLmluZGV4KCk7Ci0gICAgICAgICAgICAgICAg
Tm9kZSYgZmx1c2hDaGlsZCA9IG1fZ3JhcGhbbm9kZUluZGV4XTsKLSAgICAgICAgICAgICAgICBp
ZiAoZmx1c2hDaGlsZC5vcCgpID09IFBoaSkgewotICAgICAgICAgICAgICAgICAgICBWYXJpYWJs
ZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9IGZsdXNoQ2hpbGQudmFyaWFibGVBY2Nl
c3NEYXRhKCk7CisgICAgICAgICAgICAgICAgbm9kZSA9IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsK
KyAgICAgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBQaGkpIHsKKyAgICAgICAgICAgICAg
ICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBub2RlLT52YXJp
YWJsZUFjY2Vzc0RhdGEoKTsKICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVBY2Nlc3NEYXRh
LT5tZXJnZUlzQ2FwdHVyZWQoaXNDYXB0dXJlZCk7Ci0gICAgICAgICAgICAgICAgICAgIG5vZGVJ
bmRleCA9IGluamVjdExhenlPcGVyYW5kU3BlY3VsYXRpb24oYWRkVG9HcmFwaChHZXRMb2NhbCwg
T3BJbmZvKHZhcmlhYmxlQWNjZXNzRGF0YSksIG5vZGVJbmRleCkpOwotICAgICAgICAgICAgICAg
ICAgICBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLmxvY2FsKG9wZXJhbmQpID0gbm9k
ZUluZGV4OwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gbm9kZUluZGV4OworICAgICAgICAg
ICAgICAgICAgICBub2RlID0gaW5qZWN0TGF6eU9wZXJhbmRTcGVjdWxhdGlvbihhZGRUb0dyYXBo
KEdldExvY2FsLCBPcEluZm8odmFyaWFibGVBY2Nlc3NEYXRhKSwgbm9kZSkpOworICAgICAgICAg
ICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLmxvY2FsKG9wZXJhbmQp
ID0gbm9kZTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGU7CiAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIG5vZGVQdHIgPSAmZmx1c2hDaGlsZDsKICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIAotICAgICAgICAgICAgQVNTRVJUKCZtX2dyYXBoW25vZGVJbmRleF0g
PT0gbm9kZVB0cik7Ci0gICAgICAgICAgICBBU1NFUlQobm9kZVB0ci0+b3AoKSAhPSBGbHVzaCk7
CisgICAgICAgICAgICBBU1NFUlQobm9kZS0+b3AoKSAhPSBGbHVzaCk7CiAKLSAgICAgICAgICAg
IG5vZGVQdHItPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5tZXJnZUlzQ2FwdHVyZWQoaXNDYXB0dXJl
ZCk7CisgICAgICAgICAgICBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+bWVyZ2VJc0NhcHR1
cmVkKGlzQ2FwdHVyZWQpOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKGlzQ2Fw
dHVyZWQpIHsKICAgICAgICAgICAgICAgICAvLyBXZSB3aXNoIHRvIHVzZSB0aGUgc2FtZSB2YXJp
YWJsZSBhY2Nlc3MgZGF0YSBhcyB0aGUgcHJldmlvdXMgYWNjZXNzLApAQCAtMzE3LDE5ICszMTIs
MTkgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAvLyBrbm93LCBhdCB0aGlzIHN0YWdlIG9m
IGNvbXBpbGF0aW9uLCB0aGUgbG9jYWwgaGFzIGJlZW4gY2xvYmJlcmVkLgogICAgICAgICAgICAg
ICAgIAogICAgICAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSB3ZSBsaW5rIHRvIHRoZSBQaGkgbm9k
ZSwgbm90IHRvIHRoZSBHZXRMb2NhbC4KLSAgICAgICAgICAgICAgICBpZiAobm9kZVB0ci0+b3Ao
KSA9PSBHZXRMb2NhbCkKLSAgICAgICAgICAgICAgICAgICAgbm9kZUluZGV4ID0gbm9kZVB0ci0+
Y2hpbGQxKCkuaW5kZXgoKTsKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBHZXRM
b2NhbCkKKyAgICAgICAgICAgICAgICAgICAgbm9kZSA9IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsK
ICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBOb2RlSW5kZXggbmV3R2V0TG9jYWwg
PSBpbmplY3RMYXp5T3BlcmFuZFNwZWN1bGF0aW9uKAotICAgICAgICAgICAgICAgICAgICBhZGRU
b0dyYXBoKEdldExvY2FsLCBPcEluZm8obm9kZVB0ci0+dmFyaWFibGVBY2Nlc3NEYXRhKCkpLCBu
b2RlSW5kZXgpKTsKKyAgICAgICAgICAgICAgICBOb2RlKiBuZXdHZXRMb2NhbCA9IGluamVjdExh
enlPcGVyYW5kU3BlY3VsYXRpb24oCisgICAgICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoR2V0
TG9jYWwsIE9wSW5mbyhub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKSksIG5vZGUpKTsKICAgICAg
ICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLmxvY2FsKG9wZXJhbmQp
ID0gbmV3R2V0TG9jYWw7CiAgICAgICAgICAgICAgICAgcmV0dXJuIG5ld0dldExvY2FsOwogICAg
ICAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAobm9kZVB0ci0+b3AoKSA9
PSBHZXRMb2NhbCkKLSAgICAgICAgICAgICAgICByZXR1cm4gbm9kZUluZGV4OwotICAgICAgICAg
ICAgQVNTRVJUKG5vZGVQdHItPm9wKCkgPT0gU2V0TG9jYWwpOwotICAgICAgICAgICAgcmV0dXJu
IG5vZGVQdHItPmNoaWxkMSgpLmluZGV4KCk7CisgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9
PSBHZXRMb2NhbCkKKyAgICAgICAgICAgICAgICByZXR1cm4gbm9kZTsKKyAgICAgICAgICAgIEFT
U0VSVChub2RlLT5vcCgpID09IFNldExvY2FsKTsKKyAgICAgICAgICAgIHJldHVybiBub2RlLT5j
aGlsZDEoKS5ub2RlKCk7CiAgICAgICAgIH0KIAogICAgICAgICAvLyBDaGVjayBmb3IgcmVhZHMg
b2YgdGVtcG9yYXJpZXMgZnJvbSBwcmlvciBibG9ja3MsCkBAIC0zMzgsMTYgKzMzMywxNiBAQCBw
cml2YXRlOgogICAgICAgICAKICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFj
Y2Vzc0RhdGEgPSBuZXdWYXJpYWJsZUFjY2Vzc0RhdGEob3BlcmFuZCwgaXNDYXB0dXJlZCk7CiAg
ICAgICAgIAotICAgICAgICBOb2RlSW5kZXggcGhpID0gYWRkVG9HcmFwaChQaGksIE9wSW5mbyh2
YXJpYWJsZUFjY2Vzc0RhdGEpKTsKKyAgICAgICAgTm9kZSogcGhpID0gYWRkVG9HcmFwaChQaGks
IE9wSW5mbyh2YXJpYWJsZUFjY2Vzc0RhdGEpKTsKICAgICAgICAgbV9sb2NhbFBoaVN0YWNrLmFw
cGVuZChQaGlTdGFja0VudHJ5KG1fY3VycmVudEJsb2NrLCBwaGksIG9wZXJhbmQpKTsKLSAgICAg
ICAgbm9kZUluZGV4ID0gaW5qZWN0TGF6eU9wZXJhbmRTcGVjdWxhdGlvbihhZGRUb0dyYXBoKEdl
dExvY2FsLCBPcEluZm8odmFyaWFibGVBY2Nlc3NEYXRhKSwgcGhpKSk7Ci0gICAgICAgIG1fY3Vy
cmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwubG9jYWwob3BlcmFuZCkgPSBub2RlSW5kZXg7Cisg
ICAgICAgIG5vZGUgPSBpbmplY3RMYXp5T3BlcmFuZFNwZWN1bGF0aW9uKGFkZFRvR3JhcGgoR2V0
TG9jYWwsIE9wSW5mbyh2YXJpYWJsZUFjY2Vzc0RhdGEpLCBwaGkpKTsKKyAgICAgICAgbV9jdXJy
ZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5sb2NhbChvcGVyYW5kKSA9IG5vZGU7CiAgICAgICAg
IAotICAgICAgICBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRIZWFkLnNldExvY2FsRmlyc3RU
aW1lKG9wZXJhbmQsIG5vZGVJbmRleCk7CisgICAgICAgIG1fY3VycmVudEJsb2NrLT52YXJpYWJs
ZXNBdEhlYWQuc2V0TG9jYWxGaXJzdFRpbWUob3BlcmFuZCwgbm9kZSk7CiAgICAgICAgIAotICAg
ICAgICByZXR1cm4gbm9kZUluZGV4OworICAgICAgICByZXR1cm4gbm9kZTsKICAgICB9Ci0gICAg
dm9pZCBzZXRMb2NhbCh1bnNpZ25lZCBvcGVyYW5kLCBOb2RlSW5kZXggdmFsdWUsIFNldE1vZGUg
c2V0TW9kZSA9IE5vcm1hbFNldCkKKyAgICB2b2lkIHNldExvY2FsKHVuc2lnbmVkIG9wZXJhbmQs
IE5vZGUqIHZhbHVlLCBTZXRNb2RlIHNldE1vZGUgPSBOb3JtYWxTZXQpCiAgICAgewogICAgICAg
ICBib29sIGlzQ2FwdHVyZWQgPSBtX2NvZGVCbG9jay0+aXNDYXB0dXJlZChvcGVyYW5kLCBtX2lu
bGluZVN0YWNrVG9wLT5tX2lubGluZUNhbGxGcmFtZSk7CiAgICAgICAgIApAQCAtMzYwLDc3ICsz
NTUsNzMgQEAgcHJpdmF0ZToKICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFj
Y2Vzc0RhdGEgPSBuZXdWYXJpYWJsZUFjY2Vzc0RhdGEob3BlcmFuZCwgaXNDYXB0dXJlZCk7CiAg
ICAgICAgIHZhcmlhYmxlQWNjZXNzRGF0YS0+bWVyZ2VTdHJ1Y3R1cmVDaGVja0hvaXN0aW5nRmFp
bGVkKAogICAgICAgICAgICAgbV9pbmxpbmVTdGFja1RvcC0+bV9leGl0UHJvZmlsZS5oYXNFeGl0
U2l0ZShtX2N1cnJlbnRJbmRleCwgQmFkQ2FjaGUpKTsKLSAgICAgICAgTm9kZUluZGV4IG5vZGVJ
bmRleCA9IGFkZFRvR3JhcGgoU2V0TG9jYWwsIE9wSW5mbyh2YXJpYWJsZUFjY2Vzc0RhdGEpLCB2
YWx1ZSk7Ci0gICAgICAgIG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwubG9jYWwob3Bl
cmFuZCkgPSBub2RlSW5kZXg7CisgICAgICAgIE5vZGUqIG5vZGUgPSBhZGRUb0dyYXBoKFNldExv
Y2FsLCBPcEluZm8odmFyaWFibGVBY2Nlc3NEYXRhKSwgdmFsdWUpOworICAgICAgICBtX2N1cnJl
bnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLmxvY2FsKG9wZXJhbmQpID0gbm9kZTsKICAgICB9CiAK
ICAgICAvLyBVc2VkIGluIGltcGxlbWVudGluZyBnZXQvc2V0LCBhYm92ZSwgd2hlcmUgdGhlIG9w
ZXJhbmQgaXMgYW4gYXJndW1lbnQuCi0gICAgTm9kZUluZGV4IGdldEFyZ3VtZW50KHVuc2lnbmVk
IG9wZXJhbmQpCisgICAgTm9kZSogZ2V0QXJndW1lbnQodW5zaWduZWQgb3BlcmFuZCkKICAgICB7
CiAgICAgICAgIHVuc2lnbmVkIGFyZ3VtZW50ID0gb3BlcmFuZFRvQXJndW1lbnQob3BlcmFuZCk7
CiAgICAgICAgIEFTU0VSVChhcmd1bWVudCA8IG1fbnVtQXJndW1lbnRzKTsKICAgICAgICAgCi0g
ICAgICAgIE5vZGVJbmRleCBub2RlSW5kZXggPSBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRU
YWlsLmFyZ3VtZW50KGFyZ3VtZW50KTsKKyAgICAgICAgTm9kZSogbm9kZSA9IG1fY3VycmVudEJs
b2NrLT52YXJpYWJsZXNBdFRhaWwuYXJndW1lbnQoYXJndW1lbnQpOwogICAgICAgICBib29sIGlz
Q2FwdHVyZWQgPSBtX2NvZGVCbG9jay0+aXNDYXB0dXJlZChvcGVyYW5kKTsKIAotICAgICAgICBp
ZiAobm9kZUluZGV4ICE9IE5vTm9kZSkgewotICAgICAgICAgICAgTm9kZSogbm9kZVB0ciA9ICZt
X2dyYXBoW25vZGVJbmRleF07Ci0gICAgICAgICAgICBpZiAobm9kZVB0ci0+b3AoKSA9PSBGbHVz
aCkgeworICAgICAgICBpZiAobm9kZSkgeworICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0g
Rmx1c2gpIHsKICAgICAgICAgICAgICAgICAvLyBUd28gcG9zc2liaWxpdGllczogZWl0aGVyIHRo
ZSBibG9jayB3YW50cyB0aGUgbG9jYWwgdG8gYmUgbGl2ZQogICAgICAgICAgICAgICAgIC8vIGJ1
dCBoYXMgbm90IGxvYWRlZCBpdHMgdmFsdWUsIG9yIGl0IGhhcyBsb2FkZWQgaXRzIHZhbHVlLCBp
bgogICAgICAgICAgICAgICAgIC8vIHdoaWNoIGNhc2Ugd2UncmUgZG9uZS4KLSAgICAgICAgICAg
ICAgICBub2RlSW5kZXggPSBub2RlUHRyLT5jaGlsZDEoKS5pbmRleCgpOwotICAgICAgICAgICAg
ICAgIE5vZGUmIGZsdXNoQ2hpbGQgPSBtX2dyYXBoW25vZGVJbmRleF07Ci0gICAgICAgICAgICAg
ICAgaWYgKGZsdXNoQ2hpbGQub3AoKSA9PSBQaGkpIHsKLSAgICAgICAgICAgICAgICAgICAgVmFy
aWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBmbHVzaENoaWxkLnZhcmlhYmxl
QWNjZXNzRGF0YSgpOworICAgICAgICAgICAgICAgIG5vZGUgPSBub2RlLT5jaGlsZDEoKS5ub2Rl
KCk7CisgICAgICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gUGhpKSB7CisgICAgICAgICAg
ICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhID0gbm9kZS0+
dmFyaWFibGVBY2Nlc3NEYXRhKCk7CiAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlQWNjZXNz
RGF0YS0+bWVyZ2VJc0NhcHR1cmVkKGlzQ2FwdHVyZWQpOwotICAgICAgICAgICAgICAgICAgICBu
b2RlSW5kZXggPSBpbmplY3RMYXp5T3BlcmFuZFNwZWN1bGF0aW9uKGFkZFRvR3JhcGgoR2V0TG9j
YWwsIE9wSW5mbyh2YXJpYWJsZUFjY2Vzc0RhdGEpLCBub2RlSW5kZXgpKTsKLSAgICAgICAgICAg
ICAgICAgICAgbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5hcmd1bWVudChhcmd1bWVu
dCkgPSBub2RlSW5kZXg7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBub2RlSW5kZXg7Cisg
ICAgICAgICAgICAgICAgICAgIG5vZGUgPSBpbmplY3RMYXp5T3BlcmFuZFNwZWN1bGF0aW9uKGFk
ZFRvR3JhcGgoR2V0TG9jYWwsIE9wSW5mbyh2YXJpYWJsZUFjY2Vzc0RhdGEpLCBub2RlKSk7Cisg
ICAgICAgICAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwuYXJndW1l
bnQoYXJndW1lbnQpID0gbm9kZTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGU7CiAg
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIG5vZGVQdHIgPSAmZmx1c2hDaGlsZDsK
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAgICAgICAgQVNTRVJUKCZtX2dyYXBo
W25vZGVJbmRleF0gPT0gbm9kZVB0cik7Ci0gICAgICAgICAgICBBU1NFUlQobm9kZVB0ci0+b3Ao
KSAhPSBGbHVzaCk7CisgICAgICAgICAgICBBU1NFUlQobm9kZS0+b3AoKSAhPSBGbHVzaCk7CiAg
ICAgICAgICAgICAKLSAgICAgICAgICAgIG5vZGVQdHItPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5t
ZXJnZUlzQ2FwdHVyZWQoaXNDYXB0dXJlZCk7CisgICAgICAgICAgICBub2RlLT52YXJpYWJsZUFj
Y2Vzc0RhdGEoKS0+bWVyZ2VJc0NhcHR1cmVkKGlzQ2FwdHVyZWQpOwogICAgICAgICAgICAgCi0g
ICAgICAgICAgICBpZiAobm9kZVB0ci0+b3AoKSA9PSBTZXRBcmd1bWVudCkgeworICAgICAgICAg
ICAgaWYgKG5vZGUtPm9wKCkgPT0gU2V0QXJndW1lbnQpIHsKICAgICAgICAgICAgICAgICAvLyBX
ZSdyZSBnZXR0aW5nIGFuIGFyZ3VtZW50IGluIHRoZSBmaXJzdCBiYXNpYyBibG9jazsgbGluawog
ICAgICAgICAgICAgICAgIC8vIHRoZSBHZXRMb2NhbCB0byB0aGUgU2V0QXJndW1lbnQuCi0gICAg
ICAgICAgICAgICAgQVNTRVJUKG5vZGVQdHItPmxvY2FsKCkgPT0gc3RhdGljX2Nhc3Q8VmlydHVh
bFJlZ2lzdGVyPihvcGVyYW5kKSk7Ci0gICAgICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRh
KiB2YXJpYWJsZSA9IG5vZGVQdHItPnZhcmlhYmxlQWNjZXNzRGF0YSgpOwotICAgICAgICAgICAg
ICAgIG5vZGVJbmRleCA9IGluamVjdExhenlPcGVyYW5kU3BlY3VsYXRpb24oYWRkVG9HcmFwaChH
ZXRMb2NhbCwgT3BJbmZvKHZhcmlhYmxlKSwgbm9kZUluZGV4KSk7Ci0gICAgICAgICAgICAgICAg
bV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5hcmd1bWVudChhcmd1bWVudCkgPSBub2Rl
SW5kZXg7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG5vZGVJbmRleDsKKyAgICAgICAgICAgICAg
ICBBU1NFUlQobm9kZS0+bG9jYWwoKSA9PSBzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KG9w
ZXJhbmQpKTsKKyAgICAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0g
bm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CisgICAgICAgICAgICAgICAgbm9kZSA9IGluamVj
dExhenlPcGVyYW5kU3BlY3VsYXRpb24oYWRkVG9HcmFwaChHZXRMb2NhbCwgT3BJbmZvKHZhcmlh
YmxlKSwgbm9kZSkpOworICAgICAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNB
dFRhaWwuYXJndW1lbnQoYXJndW1lbnQpID0gbm9kZTsKKyAgICAgICAgICAgICAgICByZXR1cm4g
bm9kZTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKGlzQ2Fw
dHVyZWQpIHsKLSAgICAgICAgICAgICAgICBpZiAobm9kZVB0ci0+b3AoKSA9PSBHZXRMb2NhbCkK
LSAgICAgICAgICAgICAgICAgICAgbm9kZUluZGV4ID0gbm9kZVB0ci0+Y2hpbGQxKCkuaW5kZXgo
KTsKLSAgICAgICAgICAgICAgICByZXR1cm4gaW5qZWN0TGF6eU9wZXJhbmRTcGVjdWxhdGlvbihh
ZGRUb0dyYXBoKEdldExvY2FsLCBPcEluZm8obm9kZVB0ci0+dmFyaWFibGVBY2Nlc3NEYXRhKCkp
LCBub2RlSW5kZXgpKTsKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBHZXRMb2Nh
bCkKKyAgICAgICAgICAgICAgICAgICAgbm9kZSA9IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gaW5qZWN0TGF6eU9wZXJhbmRTcGVjdWxhdGlvbihhZGRUb0dy
YXBoKEdldExvY2FsLCBPcEluZm8obm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCkpLCBub2RlKSk7
CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChub2RlUHRyLT5v
cCgpID09IEdldExvY2FsKQotICAgICAgICAgICAgICAgIHJldHVybiBub2RlSW5kZXg7CisgICAg
ICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBHZXRMb2NhbCkKKyAgICAgICAgICAgICAgICByZXR1
cm4gbm9kZTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgQVNTRVJUKG5vZGVQdHItPm9wKCkg
PT0gU2V0TG9jYWwpOwotICAgICAgICAgICAgcmV0dXJuIG5vZGVQdHItPmNoaWxkMSgpLmluZGV4
KCk7CisgICAgICAgICAgICBBU1NFUlQobm9kZS0+b3AoKSA9PSBTZXRMb2NhbCk7CisgICAgICAg
ICAgICByZXR1cm4gbm9kZS0+Y2hpbGQxKCkubm9kZSgpOwogICAgICAgICB9CiAgICAgICAgIAog
ICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9IG5ld1Zhcmlh
YmxlQWNjZXNzRGF0YShvcGVyYW5kLCBpc0NhcHR1cmVkKTsKIAotICAgICAgICBOb2RlSW5kZXgg
cGhpID0gYWRkVG9HcmFwaChQaGksIE9wSW5mbyh2YXJpYWJsZUFjY2Vzc0RhdGEpKTsKKyAgICAg
ICAgTm9kZSogcGhpID0gYWRkVG9HcmFwaChQaGksIE9wSW5mbyh2YXJpYWJsZUFjY2Vzc0RhdGEp
KTsKICAgICAgICAgbV9hcmd1bWVudFBoaVN0YWNrLmFwcGVuZChQaGlTdGFja0VudHJ5KG1fY3Vy
cmVudEJsb2NrLCBwaGksIGFyZ3VtZW50KSk7Ci0gICAgICAgIG5vZGVJbmRleCA9IGluamVjdExh
enlPcGVyYW5kU3BlY3VsYXRpb24oYWRkVG9HcmFwaChHZXRMb2NhbCwgT3BJbmZvKHZhcmlhYmxl
QWNjZXNzRGF0YSksIHBoaSkpOwotICAgICAgICBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRU
YWlsLmFyZ3VtZW50KGFyZ3VtZW50KSA9IG5vZGVJbmRleDsKKyAgICAgICAgbm9kZSA9IGluamVj
dExhenlPcGVyYW5kU3BlY3VsYXRpb24oYWRkVG9HcmFwaChHZXRMb2NhbCwgT3BJbmZvKHZhcmlh
YmxlQWNjZXNzRGF0YSksIHBoaSkpOworICAgICAgICBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVz
QXRUYWlsLmFyZ3VtZW50KGFyZ3VtZW50KSA9IG5vZGU7CiAgICAgICAgIAotICAgICAgICBtX2N1
cnJlbnRCbG9jay0+dmFyaWFibGVzQXRIZWFkLnNldEFyZ3VtZW50Rmlyc3RUaW1lKGFyZ3VtZW50
LCBub2RlSW5kZXgpOworICAgICAgICBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRIZWFkLnNl
dEFyZ3VtZW50Rmlyc3RUaW1lKGFyZ3VtZW50LCBub2RlKTsKICAgICAgICAgCi0gICAgICAgIHJl
dHVybiBub2RlSW5kZXg7CisgICAgICAgIHJldHVybiBub2RlOwogICAgIH0KLSAgICB2b2lkIHNl
dEFyZ3VtZW50KGludCBvcGVyYW5kLCBOb2RlSW5kZXggdmFsdWUsIFNldE1vZGUgc2V0TW9kZSA9
IE5vcm1hbFNldCkKKyAgICB2b2lkIHNldEFyZ3VtZW50KGludCBvcGVyYW5kLCBOb2RlKiB2YWx1
ZSwgU2V0TW9kZSBzZXRNb2RlID0gTm9ybWFsU2V0KQogICAgIHsKICAgICAgICAgdW5zaWduZWQg
YXJndW1lbnQgPSBvcGVyYW5kVG9Bcmd1bWVudChvcGVyYW5kKTsKICAgICAgICAgQVNTRVJUKGFy
Z3VtZW50IDwgbV9udW1Bcmd1bWVudHMpOwpAQCAtNDQ0LDggKzQzNSw4IEBAIHByaXZhdGU6CiAg
ICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhID0gbmV3VmFyaWFi
bGVBY2Nlc3NEYXRhKG9wZXJhbmQsIGlzQ2FwdHVyZWQpOwogICAgICAgICB2YXJpYWJsZUFjY2Vz
c0RhdGEtPm1lcmdlU3RydWN0dXJlQ2hlY2tIb2lzdGluZ0ZhaWxlZCgKICAgICAgICAgICAgIG1f
aW5saW5lU3RhY2tUb3AtPm1fZXhpdFByb2ZpbGUuaGFzRXhpdFNpdGUobV9jdXJyZW50SW5kZXgs
IEJhZENhY2hlKSk7Ci0gICAgICAgIE5vZGVJbmRleCBub2RlSW5kZXggPSBhZGRUb0dyYXBoKFNl
dExvY2FsLCBPcEluZm8odmFyaWFibGVBY2Nlc3NEYXRhKSwgdmFsdWUpOwotICAgICAgICBtX2N1
cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLmFyZ3VtZW50KGFyZ3VtZW50KSA9IG5vZGVJbmRl
eDsKKyAgICAgICAgTm9kZSogbm9kZSA9IGFkZFRvR3JhcGgoU2V0TG9jYWwsIE9wSW5mbyh2YXJp
YWJsZUFjY2Vzc0RhdGEpLCB2YWx1ZSk7CisgICAgICAgIG1fY3VycmVudEJsb2NrLT52YXJpYWJs
ZXNBdFRhaWwuYXJndW1lbnQoYXJndW1lbnQpID0gbm9kZTsKICAgICB9CiAgICAgCiAgICAgQXJn
dW1lbnRQb3NpdGlvbiogZmluZEFyZ3VtZW50UG9zaXRpb25Gb3JBcmd1bWVudChpbnQgYXJndW1l
bnQpCkBAIC01MDAsNTUgKzQ5MSw1MyBAQCBwcml2YXRlOgogICAgICAgICAKICAgICAgICAgQVNT
RVJUKG9wZXJhbmQgPCBGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleCk7CiAgICAgICAgIAotICAg
ICAgICBOb2RlSW5kZXggbm9kZUluZGV4OworICAgICAgICBOb2RlKiBub2RlOwogICAgICAgICBp
bnQgaW5kZXg7CiAgICAgICAgIGlmIChvcGVyYW5kSXNBcmd1bWVudChvcGVyYW5kKSkgewogICAg
ICAgICAgICAgaW5kZXggPSBvcGVyYW5kVG9Bcmd1bWVudChvcGVyYW5kKTsKLSAgICAgICAgICAg
IG5vZGVJbmRleCA9IG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwuYXJndW1lbnQoaW5k
ZXgpOworICAgICAgICAgICAgbm9kZSA9IG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwu
YXJndW1lbnQoaW5kZXgpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgaW5kZXggPSBv
cGVyYW5kOwotICAgICAgICAgICAgbm9kZUluZGV4ID0gbV9jdXJyZW50QmxvY2stPnZhcmlhYmxl
c0F0VGFpbC5sb2NhbChpbmRleCk7CisgICAgICAgICAgICBub2RlID0gbV9jdXJyZW50QmxvY2st
PnZhcmlhYmxlc0F0VGFpbC5sb2NhbChpbmRleCk7CiAgICAgICAgICAgICBtX3ByZXNlcnZlZFZh
cnMuc2V0KG9wZXJhbmQpOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBpZiAobm9kZUlu
ZGV4ICE9IE5vTm9kZSkgewotICAgICAgICAgICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhbbm9kZUlu
ZGV4XTsKLSAgICAgICAgICAgIHN3aXRjaCAobm9kZS5vcCgpKSB7CisgICAgICAgIGlmIChub2Rl
KSB7CisgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKICAgICAgICAgICAgIGNhc2Ug
Rmx1c2g6Ci0gICAgICAgICAgICAgICAgbm9kZUluZGV4ID0gbm9kZS5jaGlsZDEoKS5pbmRleCgp
OworICAgICAgICAgICAgICAgIG5vZGUgPSBub2RlLT5jaGlsZDEoKS5ub2RlKCk7CiAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIEdldExvY2FsOgotICAgICAgICAgICAg
ICAgIG5vZGVJbmRleCA9IG5vZGUuY2hpbGQxKCkuaW5kZXgoKTsKKyAgICAgICAgICAgICAgICBu
b2RlID0gbm9kZS0+Y2hpbGQxKCkubm9kZSgpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIAotICAgICAgICAgICAgQVNTRVJUKG1fZ3JhcGhbbm9kZUluZGV4XS5vcCgp
ICE9IEZsdXNoCi0gICAgICAgICAgICAgICAgICAgJiYgbV9ncmFwaFtub2RlSW5kZXhdLm9wKCkg
IT0gR2V0TG9jYWwpOworICAgICAgICAgICAgQVNTRVJUKG5vZGUtPm9wKCkgIT0gRmx1c2ggJiYg
bm9kZS0+b3AoKSAhPSBHZXRMb2NhbCk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIC8vIEVt
aXQgYSBGbHVzaCByZWdhcmRsZXNzIG9mIHdoZXRoZXIgd2UgYWxyZWFkeSBmbHVzaGVkIGl0Lgog
ICAgICAgICAgICAgLy8gVGhpcyBnaXZlcyB1cyBndWlkYW5jZSB0byBzZWUgdGhhdCB0aGUgdmFy
aWFibGUgYWxzbyBuZWVkcyB0byBiZSBmbHVzaGVkCiAgICAgICAgICAgICAvLyBmb3IgYXJndW1l
bnRzLCBldmVuIGlmIGl0IGFscmVhZHkgaGFkIHRvIGJlIGZsdXNoZWQgZm9yIG90aGVyIHJlYXNv
bnMuCi0gICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9
IG5vZGUudmFyaWFibGVBY2Nlc3NEYXRhKCk7CisgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0Rh
dGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOwogICAg
ICAgICAgICAgdmFyaWFibGVBY2Nlc3NEYXRhLT5tZXJnZUlzQ2FwdHVyZWQoaXNDYXB0dXJlZCk7
Ci0gICAgICAgICAgICBhZGRUb0dyYXBoKEZsdXNoLCBPcEluZm8odmFyaWFibGVBY2Nlc3NEYXRh
KSwgbm9kZUluZGV4KTsKKyAgICAgICAgICAgIGFkZFRvR3JhcGgoRmx1c2gsIE9wSW5mbyh2YXJp
YWJsZUFjY2Vzc0RhdGEpLCBub2RlKTsKICAgICAgICAgICAgIGlmIChhcmd1bWVudFBvc2l0aW9u
KQogICAgICAgICAgICAgICAgIGFyZ3VtZW50UG9zaXRpb24tPmFkZFZhcmlhYmxlKHZhcmlhYmxl
QWNjZXNzRGF0YSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgCiAg
ICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhID0gbmV3VmFyaWFi
bGVBY2Nlc3NEYXRhKG9wZXJhbmQsIGlzQ2FwdHVyZWQpOwotICAgICAgICBOb2RlSW5kZXggcGhp
ID0gYWRkVG9HcmFwaChQaGksIE9wSW5mbyh2YXJpYWJsZUFjY2Vzc0RhdGEpKTsKLSAgICAgICAg
bm9kZUluZGV4ID0gYWRkVG9HcmFwaChGbHVzaCwgT3BJbmZvKHZhcmlhYmxlQWNjZXNzRGF0YSks
IHBoaSk7CisgICAgICAgIE5vZGUqIHBoaSA9IGFkZFRvR3JhcGgoUGhpLCBPcEluZm8odmFyaWFi
bGVBY2Nlc3NEYXRhKSk7CisgICAgICAgIG5vZGUgPSBhZGRUb0dyYXBoKEZsdXNoLCBPcEluZm8o
dmFyaWFibGVBY2Nlc3NEYXRhKSwgcGhpKTsKICAgICAgICAgaWYgKG9wZXJhbmRJc0FyZ3VtZW50
KG9wZXJhbmQpKSB7CiAgICAgICAgICAgICBtX2FyZ3VtZW50UGhpU3RhY2suYXBwZW5kKFBoaVN0
YWNrRW50cnkobV9jdXJyZW50QmxvY2ssIHBoaSwgaW5kZXgpKTsKLSAgICAgICAgICAgIG1fY3Vy
cmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwuYXJndW1lbnQoaW5kZXgpID0gbm9kZUluZGV4Owot
ICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0SGVhZC5zZXRBcmd1bWVudEZp
cnN0VGltZShpbmRleCwgbm9kZUluZGV4KTsKKyAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT52
YXJpYWJsZXNBdFRhaWwuYXJndW1lbnQoaW5kZXgpID0gbm9kZTsKKyAgICAgICAgICAgIG1fY3Vy
cmVudEJsb2NrLT52YXJpYWJsZXNBdEhlYWQuc2V0QXJndW1lbnRGaXJzdFRpbWUoaW5kZXgsIG5v
ZGUpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgbV9sb2NhbFBoaVN0YWNrLmFwcGVu
ZChQaGlTdGFja0VudHJ5KG1fY3VycmVudEJsb2NrLCBwaGksIGluZGV4KSk7Ci0gICAgICAgICAg
ICBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLmxvY2FsKGluZGV4KSA9IG5vZGVJbmRl
eDsKLSAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdEhlYWQuc2V0TG9jYWxG
aXJzdFRpbWUoaW5kZXgsIG5vZGVJbmRleCk7CisgICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+
dmFyaWFibGVzQXRUYWlsLmxvY2FsKGluZGV4KSA9IG5vZGU7CisgICAgICAgICAgICBtX2N1cnJl
bnRCbG9jay0+dmFyaWFibGVzQXRIZWFkLnNldExvY2FsRmlyc3RUaW1lKGluZGV4LCBub2RlKTsK
ICAgICAgICAgfQogICAgICAgICBpZiAoYXJndW1lbnRQb3NpdGlvbikKICAgICAgICAgICAgIGFy
Z3VtZW50UG9zaXRpb24tPmFkZFZhcmlhYmxlKHZhcmlhYmxlQWNjZXNzRGF0YSk7CkBAIC01NzEs
MzUgKzU2MCwzMyBAQCBwcml2YXRlOgogICAgIH0KIAogICAgIC8vIEdldCBhbiBvcGVyYW5kLCBh
bmQgcGVyZm9ybSBhIFRvSW50MzIvVG9OdW1iZXIgY29udmVyc2lvbiBvbiBpdC4KLSAgICBOb2Rl
SW5kZXggZ2V0VG9JbnQzMihpbnQgb3BlcmFuZCkKKyAgICBOb2RlKiBnZXRUb0ludDMyKGludCBv
cGVyYW5kKQogICAgIHsKICAgICAgICAgcmV0dXJuIHRvSW50MzIoZ2V0KG9wZXJhbmQpKTsKICAg
ICB9CiAKICAgICAvLyBQZXJmb3JtIGFuIEVTNSBUb0ludDMyIG9wZXJhdGlvbiAtIHJldHVybnMg
YSBub2RlIG9mIHR5cGUgTm9kZVJlc3VsdEludDMyLgotICAgIE5vZGVJbmRleCB0b0ludDMyKE5v
ZGVJbmRleCBpbmRleCkKKyAgICBOb2RlKiB0b0ludDMyKE5vZGUqIG5vZGUpCiAgICAgewotICAg
ICAgICBOb2RlJiBub2RlID0gbV9ncmFwaFtpbmRleF07CisgICAgICAgIGlmIChub2RlLT5oYXNJ
bnQzMlJlc3VsdCgpKQorICAgICAgICAgICAgcmV0dXJuIG5vZGU7CiAKLSAgICAgICAgaWYgKG5v
ZGUuaGFzSW50MzJSZXN1bHQoKSkKLSAgICAgICAgICAgIHJldHVybiBpbmRleDsKLQotICAgICAg
ICBpZiAobm9kZS5vcCgpID09IFVJbnQzMlRvTnVtYmVyKQotICAgICAgICAgICAgcmV0dXJuIG5v
ZGUuY2hpbGQxKCkuaW5kZXgoKTsKKyAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gVUludDMyVG9O
dW1iZXIpCisgICAgICAgICAgICByZXR1cm4gbm9kZS0+Y2hpbGQxKCkubm9kZSgpOwogCiAgICAg
ICAgIC8vIENoZWNrIGZvciBudW1lcmljIGNvbnN0YW50cyBib3hlZCBhcyBKU1ZhbHVlcy4KLSAg
ICAgICAgaWYgKG5vZGUub3AoKSA9PSBKU0NvbnN0YW50KSB7Ci0gICAgICAgICAgICBKU1ZhbHVl
IHYgPSB2YWx1ZU9mSlNDb25zdGFudChpbmRleCk7CisgICAgICAgIGlmIChub2RlLT5vcCgpID09
IEpTQ29uc3RhbnQpIHsKKyAgICAgICAgICAgIEpTVmFsdWUgdiA9IHZhbHVlT2ZKU0NvbnN0YW50
KG5vZGUpOwogICAgICAgICAgICAgaWYgKHYuaXNJbnQzMigpKQotICAgICAgICAgICAgICAgIHJl
dHVybiBnZXRKU0NvbnN0YW50KG5vZGUuY29uc3RhbnROdW1iZXIoKSk7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIGdldEpTQ29uc3RhbnQobm9kZS0+Y29uc3RhbnROdW1iZXIoKSk7CiAgICAgICAg
ICAgICBpZiAodi5pc051bWJlcigpKQogICAgICAgICAgICAgICAgIHJldHVybiBnZXRKU0NvbnN0
YW50Rm9yVmFsdWUoSlNWYWx1ZShKU0M6OnRvSW50MzIodi5hc051bWJlcigpKSkpOwogICAgICAg
ICB9CiAKLSAgICAgICAgcmV0dXJuIGFkZFRvR3JhcGgoVmFsdWVUb0ludDMyLCBpbmRleCk7Cisg
ICAgICAgIHJldHVybiBhZGRUb0dyYXBoKFZhbHVlVG9JbnQzMiwgbm9kZSk7CiAgICAgfQogCi0g
ICAgTm9kZUluZGV4IGdldEpTQ29uc3RhbnRGb3JWYWx1ZShKU1ZhbHVlIGNvbnN0YW50VmFsdWUp
CisgICAgTm9kZSogZ2V0SlNDb25zdGFudEZvclZhbHVlKEpTVmFsdWUgY29uc3RhbnRWYWx1ZSkK
ICAgICB7CiAgICAgICAgIHVuc2lnbmVkIGNvbnN0YW50SW5kZXggPSBtX2NvZGVCbG9jay0+YWRk
T3JGaW5kQ29uc3RhbnQoY29uc3RhbnRWYWx1ZSk7CiAgICAgICAgIGlmIChjb25zdGFudEluZGV4
ID49IG1fY29uc3RhbnRzLnNpemUoKSkKQEAgLTYxMCw1NSArNTk3LDU1IEBAIHByaXZhdGU6CiAg
ICAgICAgIHJldHVybiBnZXRKU0NvbnN0YW50KGNvbnN0YW50SW5kZXgpOwogICAgIH0KIAotICAg
IE5vZGVJbmRleCBnZXRKU0NvbnN0YW50KHVuc2lnbmVkIGNvbnN0YW50KQorICAgIE5vZGUqIGdl
dEpTQ29uc3RhbnQodW5zaWduZWQgY29uc3RhbnQpCiAgICAgewotICAgICAgICBOb2RlSW5kZXgg
aW5kZXggPSBtX2NvbnN0YW50c1tjb25zdGFudF0uYXNKU1ZhbHVlOwotICAgICAgICBpZiAoaW5k
ZXggIT0gTm9Ob2RlKQotICAgICAgICAgICAgcmV0dXJuIGluZGV4OworICAgICAgICBOb2RlKiBu
b2RlID0gbV9jb25zdGFudHNbY29uc3RhbnRdLmFzSlNWYWx1ZTsKKyAgICAgICAgaWYgKG5vZGUp
CisgICAgICAgICAgICByZXR1cm4gbm9kZTsKIAotICAgICAgICBOb2RlSW5kZXggcmVzdWx0SW5k
ZXggPSBhZGRUb0dyYXBoKEpTQ29uc3RhbnQsIE9wSW5mbyhjb25zdGFudCkpOwotICAgICAgICBt
X2NvbnN0YW50c1tjb25zdGFudF0uYXNKU1ZhbHVlID0gcmVzdWx0SW5kZXg7Ci0gICAgICAgIHJl
dHVybiByZXN1bHRJbmRleDsKKyAgICAgICAgTm9kZSogcmVzdWx0ID0gYWRkVG9HcmFwaChKU0Nv
bnN0YW50LCBPcEluZm8oY29uc3RhbnQpKTsKKyAgICAgICAgbV9jb25zdGFudHNbY29uc3RhbnRd
LmFzSlNWYWx1ZSA9IHJlc3VsdDsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKLSAg
ICBOb2RlSW5kZXggZ2V0Q2FsbGVlKCkKKyAgICBOb2RlKiBnZXRDYWxsZWUoKQogICAgIHsKICAg
ICAgICAgcmV0dXJuIGFkZFRvR3JhcGgoR2V0Q2FsbGVlKTsKICAgICB9CiAKICAgICAvLyBIZWxw
ZXIgZnVuY3Rpb25zIHRvIGdldC9zZXQgdGhlIHRoaXMgdmFsdWUuCi0gICAgTm9kZUluZGV4IGdl
dFRoaXMoKQorICAgIE5vZGUqIGdldFRoaXMoKQogICAgIHsKICAgICAgICAgcmV0dXJuIGdldCht
X2lubGluZVN0YWNrVG9wLT5tX2NvZGVCbG9jay0+dGhpc1JlZ2lzdGVyKCkpOwogICAgIH0KLSAg
ICB2b2lkIHNldFRoaXMoTm9kZUluZGV4IHZhbHVlKQorICAgIHZvaWQgc2V0VGhpcyhOb2RlKiB2
YWx1ZSkKICAgICB7CiAgICAgICAgIHNldChtX2lubGluZVN0YWNrVG9wLT5tX2NvZGVCbG9jay0+
dGhpc1JlZ2lzdGVyKCksIHZhbHVlKTsKICAgICB9CiAKICAgICAvLyBDb252ZW5pZW5jZSBtZXRo
b2RzIGZvciBjaGVja2luZyBub2RlcyBmb3IgY29uc3RhbnRzLgotICAgIGJvb2wgaXNKU0NvbnN0
YW50KE5vZGVJbmRleCBpbmRleCkKKyAgICBib29sIGlzSlNDb25zdGFudChOb2RlKiBub2RlKQog
ICAgIHsKLSAgICAgICAgcmV0dXJuIG1fZ3JhcGhbaW5kZXhdLm9wKCkgPT0gSlNDb25zdGFudDsK
KyAgICAgICAgcmV0dXJuIG5vZGUtPm9wKCkgPT0gSlNDb25zdGFudDsKICAgICB9Ci0gICAgYm9v
bCBpc0ludDMyQ29uc3RhbnQoTm9kZUluZGV4IG5vZGVJbmRleCkKKyAgICBib29sIGlzSW50MzJD
b25zdGFudChOb2RlKiBub2RlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGlzSlNDb25zdGFudChu
b2RlSW5kZXgpICYmIHZhbHVlT2ZKU0NvbnN0YW50KG5vZGVJbmRleCkuaXNJbnQzMigpOworICAg
ICAgICByZXR1cm4gaXNKU0NvbnN0YW50KG5vZGUpICYmIHZhbHVlT2ZKU0NvbnN0YW50KG5vZGUp
LmlzSW50MzIoKTsKICAgICB9CiAgICAgLy8gQ29udmVuaWVuY2UgbWV0aG9kcyBmb3IgZ2V0dGlu
ZyBjb25zdGFudCB2YWx1ZXMuCi0gICAgSlNWYWx1ZSB2YWx1ZU9mSlNDb25zdGFudChOb2RlSW5k
ZXggaW5kZXgpCisgICAgSlNWYWx1ZSB2YWx1ZU9mSlNDb25zdGFudChOb2RlKiBub2RlKQogICAg
IHsKLSAgICAgICAgQVNTRVJUKGlzSlNDb25zdGFudChpbmRleCkpOwotICAgICAgICByZXR1cm4g
bV9jb2RlQmxvY2stPmdldENvbnN0YW50KEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4ICsgbV9n
cmFwaFtpbmRleF0uY29uc3RhbnROdW1iZXIoKSk7CisgICAgICAgIEFTU0VSVChpc0pTQ29uc3Rh
bnQobm9kZSkpOworICAgICAgICByZXR1cm4gbV9jb2RlQmxvY2stPmdldENvbnN0YW50KEZpcnN0
Q29uc3RhbnRSZWdpc3RlckluZGV4ICsgbm9kZS0+Y29uc3RhbnROdW1iZXIoKSk7CiAgICAgfQot
ICAgIGludDMyX3QgdmFsdWVPZkludDMyQ29uc3RhbnQoTm9kZUluZGV4IG5vZGVJbmRleCkKKyAg
ICBpbnQzMl90IHZhbHVlT2ZJbnQzMkNvbnN0YW50KE5vZGUqIG5vZGUpCiAgICAgewotICAgICAg
ICBBU1NFUlQoaXNJbnQzMkNvbnN0YW50KG5vZGVJbmRleCkpOwotICAgICAgICByZXR1cm4gdmFs
dWVPZkpTQ29uc3RhbnQobm9kZUluZGV4KS5hc0ludDMyKCk7CisgICAgICAgIEFTU0VSVChpc0lu
dDMyQ29uc3RhbnQobm9kZSkpOworICAgICAgICByZXR1cm4gdmFsdWVPZkpTQ29uc3RhbnQobm9k
ZSkuYXNJbnQzMigpOwogICAgIH0KICAgICAKICAgICAvLyBUaGlzIG1ldGhvZCByZXR1cm5zIGEg
SlNDb25zdGFudCB3aXRoIHRoZSB2YWx1ZSAndW5kZWZpbmVkJy4KLSAgICBOb2RlSW5kZXggY29u
c3RhbnRVbmRlZmluZWQoKQorICAgIE5vZGUqIGNvbnN0YW50VW5kZWZpbmVkKCkKICAgICB7CiAg
ICAgICAgIC8vIEhhcyBtX2NvbnN0YW50VW5kZWZpbmVkIGJlZW4gc2V0IHVwIHlldD8KICAgICAg
ICAgaWYgKG1fY29uc3RhbnRVbmRlZmluZWQgPT0gVUlOVF9NQVgpIHsKQEAgLTY4Myw3ICs2NzAs
NyBAQCBwcml2YXRlOgogICAgIH0KIAogICAgIC8vIFRoaXMgbWV0aG9kIHJldHVybnMgYSBKU0Nv
bnN0YW50IHdpdGggdGhlIHZhbHVlICdudWxsJy4KLSAgICBOb2RlSW5kZXggY29uc3RhbnROdWxs
KCkKKyAgICBOb2RlKiBjb25zdGFudE51bGwoKQogICAgIHsKICAgICAgICAgLy8gSGFzIG1fY29u
c3RhbnROdWxsIGJlZW4gc2V0IHVwIHlldD8KICAgICAgICAgaWYgKG1fY29uc3RhbnROdWxsID09
IFVJTlRfTUFYKSB7CkBAIC03MDgsNyArNjk1LDcgQEAgcHJpdmF0ZToKICAgICB9CiAKICAgICAv
LyBUaGlzIG1ldGhvZCByZXR1cm5zIGEgRG91YmxlQ29uc3RhbnQgd2l0aCB0aGUgdmFsdWUgMS4K
LSAgICBOb2RlSW5kZXggb25lKCkKKyAgICBOb2RlKiBvbmUoKQogICAgIHsKICAgICAgICAgLy8g
SGFzIG1fY29uc3RhbnQxIGJlZW4gc2V0IHVwIHlldD8KICAgICAgICAgaWYgKG1fY29uc3RhbnQx
ID09IFVJTlRfTUFYKSB7CkBAIC03MzQsNyArNzIxLDcgQEAgcHJpdmF0ZToKICAgICB9CiAgICAg
CiAgICAgLy8gVGhpcyBtZXRob2QgcmV0dXJucyBhIERvdWJsZUNvbnN0YW50IHdpdGggdGhlIHZh
bHVlIE5hTi4KLSAgICBOb2RlSW5kZXggY29uc3RhbnROYU4oKQorICAgIE5vZGUqIGNvbnN0YW50
TmFOKCkKICAgICB7CiAgICAgICAgIEpTVmFsdWUgbmFuID0ganNOYU4oKTsKICAgICAgICAgCkBA
IC03NjEsOSArNzQ4LDkgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIGdldEpTQ29uc3RhbnQo
bV9jb25zdGFudE5hTik7CiAgICAgfQogICAgIAotICAgIE5vZGVJbmRleCBjZWxsQ29uc3RhbnQo
SlNDZWxsKiBjZWxsKQorICAgIE5vZGUqIGNlbGxDb25zdGFudChKU0NlbGwqIGNlbGwpCiAgICAg
ewotICAgICAgICBIYXNoTWFwPEpTQ2VsbCosIE5vZGVJbmRleD46OkFkZFJlc3VsdCByZXN1bHQg
PSBtX2NlbGxDb25zdGFudE5vZGVzLmFkZChjZWxsLCBOb05vZGUpOworICAgICAgICBIYXNoTWFw
PEpTQ2VsbCosIE5vZGUqPjo6QWRkUmVzdWx0IHJlc3VsdCA9IG1fY2VsbENvbnN0YW50Tm9kZXMu
YWRkKGNlbGwsIDApOwogICAgICAgICBpZiAocmVzdWx0LmlzTmV3RW50cnkpCiAgICAgICAgICAg
ICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gYWRkVG9HcmFwaChXZWFrSlNDb25zdGFudCwgT3BJ
bmZvKGNlbGwpKTsKICAgICAgICAgCkBAIC03NzcsNzIgKzc2NCw3OCBAQCBwcml2YXRlOgogCiAg
ICAgLy8gVGhlc2UgbWV0aG9kcyBjcmVhdGUgYSBub2RlIGFuZCBhZGQgaXQgdG8gdGhlIGdyYXBo
LiBJZiBub2RlcyBvZiB0aGlzIHR5cGUgYXJlCiAgICAgLy8gJ211c3RHZW5lcmF0ZScgdGhlbiB0
aGUgbm9kZSAgd2lsbCBpbXBsaWNpdGx5IGJlIHJlZidlZCB0byBlbnN1cmUgZ2VuZXJhdGlvbi4K
LSAgICBOb2RlSW5kZXggYWRkVG9HcmFwaChOb2RlVHlwZSBvcCwgTm9kZUluZGV4IGNoaWxkMSA9
IE5vTm9kZSwgTm9kZUluZGV4IGNoaWxkMiA9IE5vTm9kZSwgTm9kZUluZGV4IGNoaWxkMyA9IE5v
Tm9kZSkKKyAgICBOb2RlKiBhZGRUb0dyYXBoKE5vZGVUeXBlIG9wLCBOb2RlKiBjaGlsZDEgPSAw
LCBOb2RlKiBjaGlsZDIgPSAwLCBOb2RlKiBjaGlsZDMgPSAwKQogICAgIHsKLSAgICAgICAgTm9k
ZUluZGV4IHJlc3VsdEluZGV4ID0gKE5vZGVJbmRleCltX2dyYXBoLnNpemUoKTsKLSAgICAgICAg
bV9ncmFwaC5hcHBlbmQoTm9kZShvcCwgY3VycmVudENvZGVPcmlnaW4oKSwgY2hpbGQxLCBjaGls
ZDIsIGNoaWxkMykpOworICAgICAgICBOb2RlKiByZXN1bHQgPSBtX2dyYXBoLmFkZE5vZGUoCisg
ICAgICAgICAgICBEb250UmVmQ2hpbGRyZW4sIERvbnRSZWZOb2RlLCBTcGVjTm9uZSwKKyAgICAg
ICAgICAgIG9wLCBjdXJyZW50Q29kZU9yaWdpbigpLCBjaGlsZDEsIGNoaWxkMiwgY2hpbGQzKTsK
ICAgICAgICAgQVNTRVJUKG9wICE9IFBoaSk7Ci0gICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBl
bmQocmVzdWx0SW5kZXgpOworICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kKHJlc3VsdCk7
CiAKICAgICAgICAgaWYgKGRlZmF1bHRGbGFncyhvcCkgJiBOb2RlTXVzdEdlbmVyYXRlKQotICAg
ICAgICAgICAgbV9ncmFwaC5yZWYocmVzdWx0SW5kZXgpOwotICAgICAgICByZXR1cm4gcmVzdWx0
SW5kZXg7CisgICAgICAgICAgICBtX2dyYXBoLnJlZihyZXN1bHQpOworICAgICAgICByZXR1cm4g
cmVzdWx0OwogICAgIH0KLSAgICBOb2RlSW5kZXggYWRkVG9HcmFwaChOb2RlVHlwZSBvcCwgT3BJ
bmZvIGluZm8sIE5vZGVJbmRleCBjaGlsZDEgPSBOb05vZGUsIE5vZGVJbmRleCBjaGlsZDIgPSBO
b05vZGUsIE5vZGVJbmRleCBjaGlsZDMgPSBOb05vZGUpCisgICAgTm9kZSogYWRkVG9HcmFwaChO
b2RlVHlwZSBvcCwgT3BJbmZvIGluZm8sIE5vZGUqIGNoaWxkMSA9IDAsIE5vZGUqIGNoaWxkMiA9
IDAsIE5vZGUqIGNoaWxkMyA9IDApCiAgICAgewotICAgICAgICBOb2RlSW5kZXggcmVzdWx0SW5k
ZXggPSAoTm9kZUluZGV4KW1fZ3JhcGguc2l6ZSgpOwotICAgICAgICBtX2dyYXBoLmFwcGVuZChO
b2RlKG9wLCBjdXJyZW50Q29kZU9yaWdpbigpLCBpbmZvLCBjaGlsZDEsIGNoaWxkMiwgY2hpbGQz
KSk7CisgICAgICAgIE5vZGUqIHJlc3VsdCA9IG1fZ3JhcGguYWRkTm9kZSgKKyAgICAgICAgICAg
IERvbnRSZWZDaGlsZHJlbiwgRG9udFJlZk5vZGUsIFNwZWNOb25lLAorICAgICAgICAgICAgb3As
IGN1cnJlbnRDb2RlT3JpZ2luKCksIGluZm8sIGNoaWxkMSwgY2hpbGQyLCBjaGlsZDMpOwogICAg
ICAgICBpZiAob3AgPT0gUGhpKQotICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPnBoaXMuYXBw
ZW5kKHJlc3VsdEluZGV4KTsKKyAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT5waGlzLmFwcGVu
ZChyZXN1bHQpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBw
ZW5kKHJlc3VsdEluZGV4KTsKKyAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmQocmVz
dWx0KTsKIAogICAgICAgICBpZiAoZGVmYXVsdEZsYWdzKG9wKSAmIE5vZGVNdXN0R2VuZXJhdGUp
Ci0gICAgICAgICAgICBtX2dyYXBoLnJlZihyZXN1bHRJbmRleCk7Ci0gICAgICAgIHJldHVybiBy
ZXN1bHRJbmRleDsKKyAgICAgICAgICAgIG1fZ3JhcGgucmVmKHJlc3VsdCk7CisgICAgICAgIHJl
dHVybiByZXN1bHQ7CiAgICAgfQotICAgIE5vZGVJbmRleCBhZGRUb0dyYXBoKE5vZGVUeXBlIG9w
LCBPcEluZm8gaW5mbzEsIE9wSW5mbyBpbmZvMiwgTm9kZUluZGV4IGNoaWxkMSA9IE5vTm9kZSwg
Tm9kZUluZGV4IGNoaWxkMiA9IE5vTm9kZSwgTm9kZUluZGV4IGNoaWxkMyA9IE5vTm9kZSkKKyAg
ICBOb2RlKiBhZGRUb0dyYXBoKE5vZGVUeXBlIG9wLCBPcEluZm8gaW5mbzEsIE9wSW5mbyBpbmZv
MiwgTm9kZSogY2hpbGQxID0gMCwgTm9kZSogY2hpbGQyID0gMCwgTm9kZSogY2hpbGQzID0gMCkK
ICAgICB7Ci0gICAgICAgIE5vZGVJbmRleCByZXN1bHRJbmRleCA9IChOb2RlSW5kZXgpbV9ncmFw
aC5zaXplKCk7Ci0gICAgICAgIG1fZ3JhcGguYXBwZW5kKE5vZGUob3AsIGN1cnJlbnRDb2RlT3Jp
Z2luKCksIGluZm8xLCBpbmZvMiwgY2hpbGQxLCBjaGlsZDIsIGNoaWxkMykpOworICAgICAgICBO
b2RlKiByZXN1bHQgPSBtX2dyYXBoLmFkZE5vZGUoCisgICAgICAgICAgICBEb250UmVmQ2hpbGRy
ZW4sIERvbnRSZWZOb2RlLCBTcGVjTm9uZSwKKyAgICAgICAgICAgIG9wLCBjdXJyZW50Q29kZU9y
aWdpbigpLCBpbmZvMSwgaW5mbzIsIGNoaWxkMSwgY2hpbGQyLCBjaGlsZDMpOwogICAgICAgICBB
U1NFUlQob3AgIT0gUGhpKTsKLSAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZChyZXN1bHRJ
bmRleCk7CisgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmQocmVzdWx0KTsKIAogICAgICAg
ICBpZiAoZGVmYXVsdEZsYWdzKG9wKSAmIE5vZGVNdXN0R2VuZXJhdGUpCi0gICAgICAgICAgICBt
X2dyYXBoLnJlZihyZXN1bHRJbmRleCk7Ci0gICAgICAgIHJldHVybiByZXN1bHRJbmRleDsKKyAg
ICAgICAgICAgIG1fZ3JhcGgucmVmKHJlc3VsdCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CiAg
ICAgfQogICAgIAotICAgIE5vZGVJbmRleCBhZGRUb0dyYXBoKE5vZGU6OlZhckFyZ1RhZywgTm9k
ZVR5cGUgb3AsIE9wSW5mbyBpbmZvMSwgT3BJbmZvIGluZm8yKQorICAgIE5vZGUqIGFkZFRvR3Jh
cGgoTm9kZTo6VmFyQXJnVGFnLCBOb2RlVHlwZSBvcCwgT3BJbmZvIGluZm8xLCBPcEluZm8gaW5m
bzIpCiAgICAgewotICAgICAgICBOb2RlSW5kZXggcmVzdWx0SW5kZXggPSAoTm9kZUluZGV4KW1f
Z3JhcGguc2l6ZSgpOwotICAgICAgICBtX2dyYXBoLmFwcGVuZChOb2RlKE5vZGU6OlZhckFyZywg
b3AsIGN1cnJlbnRDb2RlT3JpZ2luKCksIGluZm8xLCBpbmZvMiwgbV9ncmFwaC5tX3ZhckFyZ0No
aWxkcmVuLnNpemUoKSAtIG1fbnVtUGFzc2VkVmFyQXJncywgbV9udW1QYXNzZWRWYXJBcmdzKSk7
CisgICAgICAgIE5vZGUqIHJlc3VsdCA9IG1fZ3JhcGguYWRkTm9kZSgKKyAgICAgICAgICAgIERv
bnRSZWZDaGlsZHJlbiwgRG9udFJlZk5vZGUsIFNwZWNOb25lLAorICAgICAgICAgICAgTm9kZTo6
VmFyQXJnLCBvcCwgY3VycmVudENvZGVPcmlnaW4oKSwgaW5mbzEsIGluZm8yLAorICAgICAgICAg
ICAgbV9ncmFwaC5tX3ZhckFyZ0NoaWxkcmVuLnNpemUoKSAtIG1fbnVtUGFzc2VkVmFyQXJncywg
bV9udW1QYXNzZWRWYXJBcmdzKTsKICAgICAgICAgQVNTRVJUKG9wICE9IFBoaSk7Ci0gICAgICAg
IG1fY3VycmVudEJsb2NrLT5hcHBlbmQocmVzdWx0SW5kZXgpOworICAgICAgICBtX2N1cnJlbnRC
bG9jay0+YXBwZW5kKHJlc3VsdCk7CiAgICAgICAgIAogICAgICAgICBtX251bVBhc3NlZFZhckFy
Z3MgPSAwOwogICAgICAgICAKICAgICAgICAgaWYgKGRlZmF1bHRGbGFncyhvcCkgJiBOb2RlTXVz
dEdlbmVyYXRlKQotICAgICAgICAgICAgbV9ncmFwaC5yZWYocmVzdWx0SW5kZXgpOwotICAgICAg
ICByZXR1cm4gcmVzdWx0SW5kZXg7CisgICAgICAgICAgICBtX2dyYXBoLnJlZihyZXN1bHQpOwor
ICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIAotICAgIE5vZGVJbmRleCBpbnNlcnRQaGlO
b2RlKE9wSW5mbyBpbmZvLCBCYXNpY0Jsb2NrKiBibG9jaykKKyAgICBOb2RlKiBpbnNlcnRQaGlO
b2RlKE9wSW5mbyBpbmZvLCBCYXNpY0Jsb2NrKiBibG9jaykKICAgICB7Ci0gICAgICAgIE5vZGVJ
bmRleCByZXN1bHRJbmRleCA9IChOb2RlSW5kZXgpbV9ncmFwaC5zaXplKCk7Ci0gICAgICAgIG1f
Z3JhcGguYXBwZW5kKE5vZGUoUGhpLCBjdXJyZW50Q29kZU9yaWdpbigpLCBpbmZvKSk7Ci0gICAg
ICAgIGJsb2NrLT5waGlzLmFwcGVuZChyZXN1bHRJbmRleCk7CisgICAgICAgIE5vZGUqIHJlc3Vs
dCA9IG1fZ3JhcGguYWRkTm9kZSgKKyAgICAgICAgICAgIERvbnRSZWZDaGlsZHJlbiwgRG9udFJl
Zk5vZGUsIFNwZWNOb25lLAorICAgICAgICAgICAgUGhpLCBjdXJyZW50Q29kZU9yaWdpbigpLCBp
bmZvKTsKKyAgICAgICAgYmxvY2stPnBoaXMuYXBwZW5kKHJlc3VsdCk7CiAKLSAgICAgICAgcmV0
dXJuIHJlc3VsdEluZGV4OworICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIAotICAgIHZv
aWQgYWRkVmFyQXJnQ2hpbGQoTm9kZUluZGV4IGNoaWxkKQorICAgIHZvaWQgYWRkVmFyQXJnQ2hp
bGQoTm9kZSogY2hpbGQpCiAgICAgewogICAgICAgICBtX2dyYXBoLm1fdmFyQXJnQ2hpbGRyZW4u
YXBwZW5kKEVkZ2UoY2hpbGQpKTsKICAgICAgICAgbV9udW1QYXNzZWRWYXJBcmdzKys7CiAgICAg
fQogICAgIAotICAgIE5vZGVJbmRleCBhZGRDYWxsKEludGVycHJldGVyKiBpbnRlcnByZXRlciwg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgTm9kZVR5cGUgb3ApCisgICAgTm9kZSog
YWRkQ2FsbChJbnRlcnByZXRlciogaW50ZXJwcmV0ZXIsIEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIE5vZGVUeXBlIG9wKQogICAgIHsKICAgICAgICAgSW5zdHJ1Y3Rpb24qIHB1dElu
c3RydWN0aW9uID0gY3VycmVudEluc3RydWN0aW9uICsgT1BDT0RFX0xFTkdUSChvcF9jYWxsKTsK
IApAQCAtODYyLDQ4ICs4NTUsNDEgQEAgcHJpdmF0ZToKICAgICAgICAgZm9yIChpbnQgaSA9IDAg
KyBkdW1teVRoaXNBcmd1bWVudDsgaSA8IGFyZ0NvdW50OyArK2kpCiAgICAgICAgICAgICBhZGRW
YXJBcmdDaGlsZChnZXQocmVnaXN0ZXJPZmZzZXQgKyBhcmd1bWVudFRvT3BlcmFuZChpKSkpOwog
Ci0gICAgICAgIE5vZGVJbmRleCBjYWxsID0gYWRkVG9HcmFwaChOb2RlOjpWYXJBcmcsIG9wLCBP
cEluZm8oMCksIE9wSW5mbyhwcmVkaWN0aW9uKSk7CisgICAgICAgIE5vZGUqIGNhbGwgPSBhZGRU
b0dyYXBoKE5vZGU6OlZhckFyZywgb3AsIE9wSW5mbygwKSwgT3BJbmZvKHByZWRpY3Rpb24pKTsK
ICAgICAgICAgaWYgKGludGVycHJldGVyLT5nZXRPcGNvZGVJRChwdXRJbnN0cnVjdGlvbi0+dS5v
cGNvZGUpID09IG9wX2NhbGxfcHV0X3Jlc3VsdCkKICAgICAgICAgICAgIHNldChwdXRJbnN0cnVj
dGlvblsxXS51Lm9wZXJhbmQsIGNhbGwpOwogICAgICAgICByZXR1cm4gY2FsbDsKICAgICB9CiAg
ICAgCi0gICAgTm9kZUluZGV4IGFkZFN0cnVjdHVyZVRyYW5zaXRpb25DaGVjayhKU0NlbGwqIG9i
amVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgTm9kZSogYWRkU3RydWN0dXJlVHJhbnNp
dGlvbkNoZWNrKEpTQ2VsbCogb2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKICAgICB7CiAg
ICAgICAgIC8vIEFkZCBhIHdlYWsgSlMgY29uc3RhbnQgZm9yIHRoZSBvYmplY3QgcmVnYXJkbGVz
cywgc2luY2UgdGhlIGNvZGUgc2hvdWxkCiAgICAgICAgIC8vIGJlIGpldHRpc29uZWQgaWYgdGhl
IG9iamVjdCBldmVyIGRpZXMuCi0gICAgICAgIE5vZGVJbmRleCBvYmplY3RJbmRleCA9IGNlbGxD
b25zdGFudChvYmplY3QpOworICAgICAgICBOb2RlKiBvYmplY3ROb2RlID0gY2VsbENvbnN0YW50
KG9iamVjdCk7CiAgICAgICAgIAogICAgICAgICBpZiAob2JqZWN0LT5zdHJ1Y3R1cmUoKSA9PSBz
dHJ1Y3R1cmUgJiYgc3RydWN0dXJlLT50cmFuc2l0aW9uV2F0Y2hwb2ludFNldElzU3RpbGxWYWxp
ZCgpKSB7Ci0gICAgICAgICAgICBhZGRUb0dyYXBoKFN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBv
aW50LCBPcEluZm8oc3RydWN0dXJlKSwgb2JqZWN0SW5kZXgpOwotICAgICAgICAgICAgcmV0dXJu
IG9iamVjdEluZGV4OworICAgICAgICAgICAgYWRkVG9HcmFwaChTdHJ1Y3R1cmVUcmFuc2l0aW9u
V2F0Y2hwb2ludCwgT3BJbmZvKHN0cnVjdHVyZSksIG9iamVjdE5vZGUpOworICAgICAgICAgICAg
cmV0dXJuIG9iamVjdE5vZGU7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIGFkZFRvR3Jh
cGgoQ2hlY2tTdHJ1Y3R1cmUsIE9wSW5mbyhtX2dyYXBoLmFkZFN0cnVjdHVyZVNldChzdHJ1Y3R1
cmUpKSwgb2JqZWN0SW5kZXgpOworICAgICAgICBhZGRUb0dyYXBoKENoZWNrU3RydWN0dXJlLCBP
cEluZm8obV9ncmFwaC5hZGRTdHJ1Y3R1cmVTZXQoc3RydWN0dXJlKSksIG9iamVjdE5vZGUpOwog
ICAgICAgICAKLSAgICAgICAgcmV0dXJuIG9iamVjdEluZGV4OworICAgICAgICByZXR1cm4gb2Jq
ZWN0Tm9kZTsKICAgICB9CiAgICAgCi0gICAgTm9kZUluZGV4IGFkZFN0cnVjdHVyZVRyYW5zaXRp
b25DaGVjayhKU0NlbGwqIG9iamVjdCkKKyAgICBOb2RlKiBhZGRTdHJ1Y3R1cmVUcmFuc2l0aW9u
Q2hlY2soSlNDZWxsKiBvYmplY3QpCiAgICAgewogICAgICAgICByZXR1cm4gYWRkU3RydWN0dXJl
VHJhbnNpdGlvbkNoZWNrKG9iamVjdCwgb2JqZWN0LT5zdHJ1Y3R1cmUoKSk7CiAgICAgfQogICAg
IAotICAgIFNwZWN1bGF0ZWRUeXBlIGdldFByZWRpY3Rpb25XaXRob3V0T1NSRXhpdChOb2RlSW5k
ZXggbm9kZUluZGV4LCB1bnNpZ25lZCBieXRlY29kZUluZGV4KQorICAgIFNwZWN1bGF0ZWRUeXBl
IGdldFByZWRpY3Rpb25XaXRob3V0T1NSRXhpdCh1bnNpZ25lZCBieXRlY29kZUluZGV4KQogICAg
IHsKLSAgICAgICAgVU5VU0VEX1BBUkFNKG5vZGVJbmRleCk7Ci0gICAgICAgIAotICAgICAgICBT
cGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uID0gbV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJs
b2NrLT52YWx1ZVByb2ZpbGVQcmVkaWN0aW9uRm9yQnl0ZWNvZGVPZmZzZXQoYnl0ZWNvZGVJbmRl
eCk7Ci0jaWYgREZHX0VOQUJMRShERUJVR19WRVJCT1NFKQotICAgICAgICBkYXRhTG9nKCJEeW5h
bWljIFtAIiwgbm9kZUluZGV4LCAiLCBiYyMiLCBieXRlY29kZUluZGV4LCAiXSBwcmVkaWN0aW9u
OiAiLCBTcGVjdWxhdGlvbkR1bXAocHJlZGljdGlvbiksICJcbiIpOwotI2VuZGlmCi0gICAgICAg
IAotICAgICAgICByZXR1cm4gcHJlZGljdGlvbjsKKyAgICAgICAgcmV0dXJuIG1faW5saW5lU3Rh
Y2tUb3AtPm1fcHJvZmlsZWRCbG9jay0+dmFsdWVQcm9maWxlUHJlZGljdGlvbkZvckJ5dGVjb2Rl
T2Zmc2V0KGJ5dGVjb2RlSW5kZXgpOwogICAgIH0KIAotICAgIFNwZWN1bGF0ZWRUeXBlIGdldFBy
ZWRpY3Rpb24oTm9kZUluZGV4IG5vZGVJbmRleCwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCkKKyAg
ICBTcGVjdWxhdGVkVHlwZSBnZXRQcmVkaWN0aW9uKHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpCiAg
ICAgewotICAgICAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uID0gZ2V0UHJlZGljdGlvbldp
dGhvdXRPU1JFeGl0KG5vZGVJbmRleCwgYnl0ZWNvZGVJbmRleCk7CisgICAgICAgIFNwZWN1bGF0
ZWRUeXBlIHByZWRpY3Rpb24gPSBnZXRQcmVkaWN0aW9uV2l0aG91dE9TUkV4aXQoYnl0ZWNvZGVJ
bmRleCk7CiAgICAgICAgIAogICAgICAgICBpZiAocHJlZGljdGlvbiA9PSBTcGVjTm9uZSkgewog
ICAgICAgICAgICAgLy8gV2UgaGF2ZSBubyBpbmZvcm1hdGlvbiBhYm91dCB3aGF0IHZhbHVlcyB0
aGlzIG5vZGUgZ2VuZXJhdGVzLiBHaXZlIHVwCkBAIC05MTYsMTIgKzkwMiwxMiBAQCBwcml2YXRl
OgogICAgIAogICAgIFNwZWN1bGF0ZWRUeXBlIGdldFByZWRpY3Rpb25XaXRob3V0T1NSRXhpdCgp
CiAgICAgewotICAgICAgICByZXR1cm4gZ2V0UHJlZGljdGlvbldpdGhvdXRPU1JFeGl0KG1fZ3Jh
cGguc2l6ZSgpLCBtX2N1cnJlbnRQcm9maWxpbmdJbmRleCk7CisgICAgICAgIHJldHVybiBnZXRQ
cmVkaWN0aW9uV2l0aG91dE9TUkV4aXQobV9jdXJyZW50UHJvZmlsaW5nSW5kZXgpOwogICAgIH0K
ICAgICAKICAgICBTcGVjdWxhdGVkVHlwZSBnZXRQcmVkaWN0aW9uKCkKICAgICB7Ci0gICAgICAg
IHJldHVybiBnZXRQcmVkaWN0aW9uKG1fZ3JhcGguc2l6ZSgpLCBtX2N1cnJlbnRQcm9maWxpbmdJ
bmRleCk7CisgICAgICAgIHJldHVybiBnZXRQcmVkaWN0aW9uKG1fY3VycmVudFByb2ZpbGluZ0lu
ZGV4KTsKICAgICB9CiAgICAgCiAgICAgQXJyYXlNb2RlIGdldEFycmF5TW9kZShBcnJheVByb2Zp
bGUqIHByb2ZpbGUsIEFycmF5OjpBY3Rpb24gYWN0aW9uKQpAQCAtOTM1LDcgKzkyMSw3IEBAIHBy
aXZhdGU6CiAgICAgICAgIHJldHVybiBnZXRBcnJheU1vZGUocHJvZmlsZSwgQXJyYXk6OlJlYWQp
OwogICAgIH0KICAgICAKLSAgICBBcnJheU1vZGUgZ2V0QXJyYXlNb2RlQW5kRW1pdENoZWNrcyhB
cnJheVByb2ZpbGUqIHByb2ZpbGUsIEFycmF5OjpBY3Rpb24gYWN0aW9uLCBOb2RlSW5kZXggYmFz
ZSkKKyAgICBBcnJheU1vZGUgZ2V0QXJyYXlNb2RlQW5kRW1pdENoZWNrcyhBcnJheVByb2ZpbGUq
IHByb2ZpbGUsIEFycmF5OjpBY3Rpb24gYWN0aW9uLCBOb2RlKiBiYXNlKQogICAgIHsKICAgICAg
ICAgcHJvZmlsZS0+Y29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKG1faW5saW5lU3RhY2tUb3AtPm1f
Y29kZUJsb2NrKTsKICAgICAgICAgCkBAIC05NTksMTIgKzk0NSwxMCBAQCBwcml2YXRlOgogICAg
ICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KICAgICAKLSAgICBOb2RlSW5kZXggbWFrZVNhZmUo
Tm9kZUluZGV4IG5vZGVJbmRleCkKKyAgICBOb2RlKiBtYWtlU2FmZShOb2RlKiBub2RlKQogICAg
IHsKLSAgICAgICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhbbm9kZUluZGV4XTsKLSAgICAgICAgCiAg
ICAgICAgIGJvb2wgbGlrZWx5VG9UYWtlU2xvd0Nhc2U7Ci0gICAgICAgIGlmICghaXNYODYoKSAm
JiBub2RlLm9wKCkgPT0gQXJpdGhNb2QpCisgICAgICAgIGlmICghaXNYODYoKSAmJiBub2RlLT5v
cCgpID09IEFyaXRoTW9kKQogICAgICAgICAgICAgbGlrZWx5VG9UYWtlU2xvd0Nhc2UgPSBmYWxz
ZTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgbGlrZWx5VG9UYWtlU2xvd0Nhc2UgPSBtX2lu
bGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2stPmxpa2VseVRvVGFrZVNsb3dDYXNlKG1fY3Vy
cmVudEluZGV4KTsKQEAgLTk3MiwzMSArOTU2LDMxIEBAIHByaXZhdGU6CiAgICAgICAgIGlmICgh
bGlrZWx5VG9UYWtlU2xvd0Nhc2UKICAgICAgICAgICAgICYmICFtX2lubGluZVN0YWNrVG9wLT5t
X2V4aXRQcm9maWxlLmhhc0V4aXRTaXRlKG1fY3VycmVudEluZGV4LCBPdmVyZmxvdykKICAgICAg
ICAgICAgICYmICFtX2lubGluZVN0YWNrVG9wLT5tX2V4aXRQcm9maWxlLmhhc0V4aXRTaXRlKG1f
Y3VycmVudEluZGV4LCBOZWdhdGl2ZVplcm8pKQotICAgICAgICAgICAgcmV0dXJuIG5vZGVJbmRl
eDsKKyAgICAgICAgICAgIHJldHVybiBub2RlOwogICAgICAgICAKLSAgICAgICAgc3dpdGNoICht
X2dyYXBoW25vZGVJbmRleF0ub3AoKSkgeworICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsK
ICAgICAgICAgY2FzZSBVSW50MzJUb051bWJlcjoKICAgICAgICAgY2FzZSBBcml0aEFkZDoKICAg
ICAgICAgY2FzZSBBcml0aFN1YjoKICAgICAgICAgY2FzZSBBcml0aE5lZ2F0ZToKICAgICAgICAg
Y2FzZSBWYWx1ZUFkZDoKICAgICAgICAgY2FzZSBBcml0aE1vZDogLy8gZm9yIEFyaXRoTW9kICJN
YXlPdmVyZmxvdyIgbWVhbnMgd2UgdHJpZWQgdG8gZGl2aWRlIGJ5IHplcm8sIG9yIHdlIHNhdyBk
b3VibGUuCi0gICAgICAgICAgICBtX2dyYXBoW25vZGVJbmRleF0ubWVyZ2VGbGFncyhOb2RlTWF5
T3ZlcmZsb3cpOworICAgICAgICAgICAgbm9kZS0+bWVyZ2VGbGFncyhOb2RlTWF5T3ZlcmZsb3cp
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBBcml0aE11
bDoKICAgICAgICAgICAgIGlmIChtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2stPmxp
a2VseVRvVGFrZURlZXBlc3RTbG93Q2FzZShtX2N1cnJlbnRJbmRleCkKICAgICAgICAgICAgICAg
ICB8fCBtX2lubGluZVN0YWNrVG9wLT5tX2V4aXRQcm9maWxlLmhhc0V4aXRTaXRlKG1fY3VycmVu
dEluZGV4LCBPdmVyZmxvdykpIHsKICNpZiBERkdfRU5BQkxFKERFQlVHX1ZFUkJPU0UpCi0gICAg
ICAgICAgICAgICAgZGF0YUxvZ0YoIk1ha2luZyBBcml0aE11bCBAJXUgdGFrZSBkZWVwZXN0IHNs
b3cgY2FzZS5cbiIsIG5vZGVJbmRleCk7CisgICAgICAgICAgICAgICAgZGF0YUxvZ0YoIk1ha2lu
ZyBBcml0aE11bCBAJXUgdGFrZSBkZWVwZXN0IHNsb3cgY2FzZS5cbiIsIG5vZGUtPmluZGV4KCkp
OwogI2VuZGlmCi0gICAgICAgICAgICAgICAgbV9ncmFwaFtub2RlSW5kZXhdLm1lcmdlRmxhZ3Mo
Tm9kZU1heU92ZXJmbG93IHwgTm9kZU1heU5lZ1plcm8pOworICAgICAgICAgICAgICAgIG5vZGUt
Pm1lcmdlRmxhZ3MoTm9kZU1heU92ZXJmbG93IHwgTm9kZU1heU5lZ1plcm8pOwogICAgICAgICAg
ICAgfSBlbHNlIGlmIChtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2stPmxpa2VseVRv
VGFrZVNsb3dDYXNlKG1fY3VycmVudEluZGV4KQogICAgICAgICAgICAgICAgICAgICAgICB8fCBt
X2lubGluZVN0YWNrVG9wLT5tX2V4aXRQcm9maWxlLmhhc0V4aXRTaXRlKG1fY3VycmVudEluZGV4
LCBOZWdhdGl2ZVplcm8pKSB7CiAjaWYgREZHX0VOQUJMRShERUJVR19WRVJCT1NFKQotICAgICAg
ICAgICAgICAgIGRhdGFMb2dGKCJNYWtpbmcgQXJpdGhNdWwgQCV1IHRha2UgZmFzdGVyIHNsb3cg
Y2FzZS5cbiIsIG5vZGVJbmRleCk7CisgICAgICAgICAgICAgICAgZGF0YUxvZ0YoIk1ha2luZyBB
cml0aE11bCBAJXUgdGFrZSBmYXN0ZXIgc2xvdyBjYXNlLlxuIiwgbm9kZS0+aW5kZXgoKSk7CiAj
ZW5kaWYKLSAgICAgICAgICAgICAgICBtX2dyYXBoW25vZGVJbmRleF0ubWVyZ2VGbGFncyhOb2Rl
TWF5TmVnWmVybyk7CisgICAgICAgICAgICAgICAgbm9kZS0+bWVyZ2VGbGFncyhOb2RlTWF5TmVn
WmVybyk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIApA
QCAtMTAwNSwxMiArOTg5LDEyIEBAIHByaXZhdGU6CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgfQogICAgICAgICAKLSAgICAgICAgcmV0dXJuIG5vZGVJbmRleDsKKyAgICAgICAgcmV0dXJu
IG5vZGU7CiAgICAgfQogICAgIAotICAgIE5vZGVJbmRleCBtYWtlRGl2U2FmZShOb2RlSW5kZXgg
bm9kZUluZGV4KQorICAgIE5vZGUqIG1ha2VEaXZTYWZlKE5vZGUqIG5vZGUpCiAgICAgewotICAg
ICAgICBBU1NFUlQobV9ncmFwaFtub2RlSW5kZXhdLm9wKCkgPT0gQXJpdGhEaXYpOworICAgICAg
ICBBU1NFUlQobm9kZS0+b3AoKSA9PSBBcml0aERpdik7CiAgICAgICAgIAogICAgICAgICAvLyBU
aGUgbWFpbiBzbG93IGNhc2UgY291bnRlciBmb3Igb3BfZGl2IGluIHRoZSBvbGQgSklUIGNvdW50
cyBvbmx5IHdoZW4KICAgICAgICAgLy8gdGhlIG9wZXJhbmRzIGFyZSBub3QgbnVtYmVycy4gV2Ug
ZG9uJ3QgY2FyZSBhYm91dCB0aGF0IHNpbmNlIHdlIGFscmVhZHkKQEAgLTEwMjEsNDAgKzEwMDUs
MTcgQEAgcHJpdmF0ZToKICAgICAgICAgaWYgKCFtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVk
QmxvY2stPmNvdWxkVGFrZVNwZWNpYWxGYXN0Q2FzZShtX2N1cnJlbnRJbmRleCkKICAgICAgICAg
ICAgICYmICFtX2lubGluZVN0YWNrVG9wLT5tX2V4aXRQcm9maWxlLmhhc0V4aXRTaXRlKG1fY3Vy
cmVudEluZGV4LCBPdmVyZmxvdykKICAgICAgICAgICAgICYmICFtX2lubGluZVN0YWNrVG9wLT5t
X2V4aXRQcm9maWxlLmhhc0V4aXRTaXRlKG1fY3VycmVudEluZGV4LCBOZWdhdGl2ZVplcm8pKQot
ICAgICAgICAgICAgcmV0dXJuIG5vZGVJbmRleDsKKyAgICAgICAgICAgIHJldHVybiBub2RlOwog
ICAgICAgICAKICNpZiBERkdfRU5BQkxFKERFQlVHX1ZFUkJPU0UpCi0gICAgICAgIGRhdGFMb2dG
KCJNYWtpbmcgJXMgQCV1IHNhZmUgYXQgYmMjJXUgYmVjYXVzZSBzcGVjaWFsIGZhc3QtY2FzZSBj
b3VudGVyIGlzIGF0ICV1IGFuZCBleGl0IHByb2ZpbGVzIHNheSAlZCwgJWRcbiIsIEdyYXBoOjpv
cE5hbWUobV9ncmFwaFtub2RlSW5kZXhdLm9wKCkpLCBub2RlSW5kZXgsIG1fY3VycmVudEluZGV4
LCBtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2stPnNwZWNpYWxGYXN0Q2FzZVByb2Zp
bGVGb3JCeXRlY29kZU9mZnNldChtX2N1cnJlbnRJbmRleCktPm1fY291bnRlciwgbV9pbmxpbmVT
dGFja1RvcC0+bV9leGl0UHJvZmlsZS5oYXNFeGl0U2l0ZShtX2N1cnJlbnRJbmRleCwgT3ZlcmZs
b3cpLCBtX2lubGluZVN0YWNrVG9wLT5tX2V4aXRQcm9maWxlLmhhc0V4aXRTaXRlKG1fY3VycmVu
dEluZGV4LCBOZWdhdGl2ZVplcm8pKTsKKyAgICAgICAgZGF0YUxvZ0YoIk1ha2luZyAlcyBAJXUg
c2FmZSBhdCBiYyMldSBiZWNhdXNlIHNwZWNpYWwgZmFzdC1jYXNlIGNvdW50ZXIgaXMgYXQgJXUg
YW5kIGV4aXQgcHJvZmlsZXMgc2F5ICVkLCAlZFxuIiwgR3JhcGg6Om9wTmFtZShub2RlLT5vcCgp
KSwgbm9kZS0+aW5kZXgoKSwgbV9jdXJyZW50SW5kZXgsIG1faW5saW5lU3RhY2tUb3AtPm1fcHJv
ZmlsZWRCbG9jay0+c3BlY2lhbEZhc3RDYXNlUHJvZmlsZUZvckJ5dGVjb2RlT2Zmc2V0KG1fY3Vy
cmVudEluZGV4KS0+bV9jb3VudGVyLCBtX2lubGluZVN0YWNrVG9wLT5tX2V4aXRQcm9maWxlLmhh
c0V4aXRTaXRlKG1fY3VycmVudEluZGV4LCBPdmVyZmxvdyksIG1faW5saW5lU3RhY2tUb3AtPm1f
ZXhpdFByb2ZpbGUuaGFzRXhpdFNpdGUobV9jdXJyZW50SW5kZXgsIE5lZ2F0aXZlWmVybykpOwog
I2VuZGlmCiAgICAgICAgIAogICAgICAgICAvLyBGSVhNRTogSXQgbWlnaHQgYmUgcG9zc2libGUg
dG8gbWFrZSB0aGlzIG1vcmUgZ3JhbnVsYXIuIFRoZSBERkcgY2VydGFpbmx5IGNhbgogICAgICAg
ICAvLyBkaXN0aW5ndWlzaCBiZXR3ZWVuIG5lZ2F0aXZlIHplcm8gYW5kIG92ZXJmbG93IGluIGl0
cyBleGl0IHByb2ZpbGVzLgotICAgICAgICBtX2dyYXBoW25vZGVJbmRleF0ubWVyZ2VGbGFncyhO
b2RlTWF5T3ZlcmZsb3cgfCBOb2RlTWF5TmVnWmVybyk7CisgICAgICAgIG5vZGUtPm1lcmdlRmxh
Z3MoTm9kZU1heU92ZXJmbG93IHwgTm9kZU1heU5lZ1plcm8pOwogICAgICAgICAKLSAgICAgICAg
cmV0dXJuIG5vZGVJbmRleDsKLSAgICB9Ci0gICAgCi0gICAgYm9vbCB3aWxsTmVlZEZsdXNoKFN0
cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKLSAgICB7Ci0gICAgICAgIFBvbHltb3JwaGljQWNj
ZXNzU3RydWN0dXJlTGlzdCogbGlzdDsKLSAgICAgICAgaW50IGxpc3RTaXplOwotICAgICAgICBz
d2l0Y2ggKHN0dWJJbmZvLmFjY2Vzc1R5cGUpIHsKLSAgICAgICAgY2FzZSBhY2Nlc3NfZ2V0X2J5
X2lkX3NlbGZfbGlzdDoKLSAgICAgICAgICAgIGxpc3QgPSBzdHViSW5mby51LmdldEJ5SWRTZWxm
TGlzdC5zdHJ1Y3R1cmVMaXN0OwotICAgICAgICAgICAgbGlzdFNpemUgPSBzdHViSW5mby51Lmdl
dEJ5SWRTZWxmTGlzdC5saXN0U2l6ZTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNl
IGFjY2Vzc19nZXRfYnlfaWRfcHJvdG9fbGlzdDoKLSAgICAgICAgICAgIGxpc3QgPSBzdHViSW5m
by51LmdldEJ5SWRQcm90b0xpc3Quc3RydWN0dXJlTGlzdDsKLSAgICAgICAgICAgIGxpc3RTaXpl
ID0gc3R1YkluZm8udS5nZXRCeUlkUHJvdG9MaXN0Lmxpc3RTaXplOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAg
IH0KLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsaXN0U2l6ZTsgKytpKSB7Ci0gICAgICAg
ICAgICBpZiAoIWxpc3QtPmxpc3RbaV0uaXNEaXJlY3QpCi0gICAgICAgICAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4g
bm9kZTsKICAgICB9CiAgICAgCiAgICAgYm9vbCBzdHJ1Y3R1cmVDaGFpbklzU3RpbGxWYWxpZChi
b29sIGRpcmVjdCwgU3RydWN0dXJlKiBwcmV2aW91c1N0cnVjdHVyZSwgU3RydWN0dXJlQ2hhaW4q
IGNoYWluKQpAQCAtMTA5OCwyMSArMTA1OSwyMSBAQCBwcml2YXRlOgogICAgIHVuc2lnbmVkIG1f
Y29uc3RhbnROYU47CiAgICAgdW5zaWduZWQgbV9jb25zdGFudDE7CiAgICAgSGFzaE1hcDxKU0Nl
bGwqLCB1bnNpZ25lZD4gbV9jZWxsQ29uc3RhbnRzOwotICAgIEhhc2hNYXA8SlNDZWxsKiwgTm9k
ZUluZGV4PiBtX2NlbGxDb25zdGFudE5vZGVzOworICAgIEhhc2hNYXA8SlNDZWxsKiwgTm9kZSo+
IG1fY2VsbENvbnN0YW50Tm9kZXM7CiAKICAgICAvLyBBIGNvbnN0YW50IGluIHRoZSBjb25zdGFu
dCBwb29sIG1heSBiZSByZXByZXNlbnRlZCBieSBtb3JlIHRoYW4gb25lCiAgICAgLy8gbm9kZSBp
biB0aGUgZ3JhcGgsIGRlcGVuZGluZyBvbiB0aGUgY29udGV4dCBpbiB3aGljaCBpdCBpcyBiZWlu
ZyB1c2VkLgogICAgIHN0cnVjdCBDb25zdGFudFJlY29yZCB7CiAgICAgICAgIENvbnN0YW50UmVj
b3JkKCkKLSAgICAgICAgICAgIDogYXNJbnQzMihOb05vZGUpCi0gICAgICAgICAgICAsIGFzTnVt
ZXJpYyhOb05vZGUpCi0gICAgICAgICAgICAsIGFzSlNWYWx1ZShOb05vZGUpCisgICAgICAgICAg
ICA6IGFzSW50MzIoMCkKKyAgICAgICAgICAgICwgYXNOdW1lcmljKDApCisgICAgICAgICAgICAs
IGFzSlNWYWx1ZSgwKQogICAgICAgICB7CiAgICAgICAgIH0KIAotICAgICAgICBOb2RlSW5kZXgg
YXNJbnQzMjsKLSAgICAgICAgTm9kZUluZGV4IGFzTnVtZXJpYzsKLSAgICAgICAgTm9kZUluZGV4
IGFzSlNWYWx1ZTsKKyAgICAgICAgTm9kZSogYXNJbnQzMjsKKyAgICAgICAgTm9kZSogYXNOdW1l
cmljOworICAgICAgICBOb2RlKiBhc0pTVmFsdWU7CiAgICAgfTsKIAogICAgIC8vIFRyYWNrIHRo
ZSBpbmRleCBvZiB0aGUgbm9kZSB3aG9zZSByZXN1bHQgaXMgdGhlIGN1cnJlbnQgdmFsdWUgZm9y
IGV2ZXJ5CkBAIC0xMTM4LDcgKzEwOTksNyBAQCBwcml2YXRlOgogICAgIHVuc2lnbmVkIG1fZ2xv
YmFsUmVzb2x2ZU51bWJlcjsKIAogICAgIHN0cnVjdCBQaGlTdGFja0VudHJ5IHsKLSAgICAgICAg
UGhpU3RhY2tFbnRyeShCYXNpY0Jsb2NrKiBibG9jaywgTm9kZUluZGV4IHBoaSwgdW5zaWduZWQg
dmFyTm8pCisgICAgICAgIFBoaVN0YWNrRW50cnkoQmFzaWNCbG9jayogYmxvY2ssIE5vZGUqIHBo
aSwgdW5zaWduZWQgdmFyTm8pCiAgICAgICAgICAgICA6IG1fYmxvY2soYmxvY2spCiAgICAgICAg
ICAgICAsIG1fcGhpKHBoaSkKICAgICAgICAgICAgICwgbV92YXJObyh2YXJObykKQEAgLTExNDYs
NyArMTEwNyw3IEBAIHByaXZhdGU6CiAgICAgICAgIH0KIAogICAgICAgICBCYXNpY0Jsb2NrKiBt
X2Jsb2NrOwotICAgICAgICBOb2RlSW5kZXggbV9waGk7CisgICAgICAgIE5vZGUqIG1fcGhpOwog
ICAgICAgICB1bnNpZ25lZCBtX3Zhck5vOwogICAgIH07CiAgICAgVmVjdG9yPFBoaVN0YWNrRW50
cnksIDE2PiBtX2FyZ3VtZW50UGhpU3RhY2s7CkBAIC0xMjgwLDcgKzEyNDEsNyBAQCB2b2lkIEJ5
dGVDb2RlUGFyc2VyOjpoYW5kbGVDYWxsKEludGVycHJlCiB7CiAgICAgQVNTRVJUKE9QQ09ERV9M
RU5HVEgob3BfY2FsbCkgPT0gT1BDT0RFX0xFTkdUSChvcF9jb25zdHJ1Y3QpKTsKICAgICAKLSAg
ICBOb2RlSW5kZXggY2FsbFRhcmdldCA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVy
YW5kKTsKKyAgICBOb2RlKiBjYWxsVGFyZ2V0ID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51
Lm9wZXJhbmQpOwogICAgIAogICAgIENhbGxMaW5rU3RhdHVzIGNhbGxMaW5rU3RhdHVzOwogCkBA
IC0xMjk0LDcgKzEyNTUsNyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVDYWxsKEludGVy
cHJlCiAgICAgfQogICAgIAogI2lmIERGR19FTkFCTEUoREVCVUdfVkVSQk9TRSkKLSAgICBkYXRh
TG9nKCJGb3IgY2FsbCBhdCBAIiwgbV9ncmFwaC5zaXplKCksICIgYmMjIiwgbV9jdXJyZW50SW5k
ZXgsICI6ICIsIGNhbGxMaW5rU3RhdHVzLCAiXG4iKTsKKyAgICBkYXRhTG9nKCJGb3IgY2FsbCBh
dCBiYyMiLCBtX2N1cnJlbnRJbmRleCwgIjogIiwgY2FsbExpbmtTdGF0dXMsICJcbiIpOwogI2Vu
ZGlmCiAgICAgCiAgICAgaWYgKCFjYWxsTGlua1N0YXR1cy5jYW5PcHRpbWl6ZSgpKSB7CkBAIC0x
MzUyLDE4ICsxMzEzLDE4IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUNhbGwoSW50ZXJw
cmUKICAgICBhZGRDYWxsKGludGVycHJldGVyLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wKTsKIH0K
IAotdm9pZCBCeXRlQ29kZVBhcnNlcjo6ZW1pdEZ1bmN0aW9uQ2hlY2tzKGNvbnN0IENhbGxMaW5r
U3RhdHVzJiBjYWxsTGlua1N0YXR1cywgTm9kZUluZGV4IGNhbGxUYXJnZXQsIGludCByZWdpc3Rl
ck9mZnNldCwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQordm9pZCBCeXRlQ29kZVBhcnNl
cjo6ZW1pdEZ1bmN0aW9uQ2hlY2tzKGNvbnN0IENhbGxMaW5rU3RhdHVzJiBjYWxsTGlua1N0YXR1
cywgTm9kZSogY2FsbFRhcmdldCwgaW50IHJlZ2lzdGVyT2Zmc2V0LCBDb2RlU3BlY2lhbGl6YXRp
b25LaW5kIGtpbmQpCiB7CiAgICAgaWYgKGNhbGxMaW5rU3RhdHVzLmlzUHJvdmVkKCkpCiAgICAg
ICAgIHJldHVybjsKICAgICAKICAgICBBU1NFUlQoY2FsbExpbmtTdGF0dXMuY2FuT3B0aW1pemUo
KSk7CiAgICAgCi0gICAgTm9kZUluZGV4IHRoaXNBcmd1bWVudDsKKyAgICBOb2RlKiB0aGlzQXJn
dW1lbnQ7CiAgICAgaWYgKGtpbmQgPT0gQ29kZUZvckNhbGwpCiAgICAgICAgIHRoaXNBcmd1bWVu
dCA9IGdldChyZWdpc3Rlck9mZnNldCArIGFyZ3VtZW50VG9PcGVyYW5kKDApKTsKICAgICBlbHNl
Ci0gICAgICAgIHRoaXNBcmd1bWVudCA9IE5vTm9kZTsKKyAgICAgICAgdGhpc0FyZ3VtZW50ID0g
MDsKIAogICAgIGlmIChKU0Z1bmN0aW9uKiBmdW5jdGlvbiA9IGNhbGxMaW5rU3RhdHVzLmZ1bmN0
aW9uKCkpCiAgICAgICAgIGFkZFRvR3JhcGgoQ2hlY2tGdW5jdGlvbiwgT3BJbmZvKGZ1bmN0aW9u
KSwgY2FsbFRhcmdldCwgdGhpc0FyZ3VtZW50KTsKQEAgLTEzNzYsNyArMTMzNyw3IEBAIHZvaWQg
Qnl0ZUNvZGVQYXJzZXI6OmVtaXRGdW5jdGlvbkNoZWNrcygKICAgICB9CiB9CiAKLWJvb2wgQnl0
ZUNvZGVQYXJzZXI6OmhhbmRsZUlubGluaW5nKGJvb2wgdXNlc1Jlc3VsdCwgTm9kZUluZGV4IGNh
bGxUYXJnZXROb2RlSW5kZXgsIGludCByZXN1bHRPcGVyYW5kLCBjb25zdCBDYWxsTGlua1N0YXR1
cyYgY2FsbExpbmtTdGF0dXMsIGludCByZWdpc3Rlck9mZnNldCwgaW50IGFyZ3VtZW50Q291bnRJ
bmNsdWRpbmdUaGlzLCB1bnNpZ25lZCBuZXh0T2Zmc2V0LCBDb2RlU3BlY2lhbGl6YXRpb25LaW5k
IGtpbmQpCitib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbmxpbmluZyhib29sIHVzZXNSZXN1
bHQsIE5vZGUqIGNhbGxUYXJnZXROb2RlLCBpbnQgcmVzdWx0T3BlcmFuZCwgY29uc3QgQ2FsbExp
bmtTdGF0dXMmIGNhbGxMaW5rU3RhdHVzLCBpbnQgcmVnaXN0ZXJPZmZzZXQsIGludCBhcmd1bWVu
dENvdW50SW5jbHVkaW5nVGhpcywgdW5zaWduZWQgbmV4dE9mZnNldCwgQ29kZVNwZWNpYWxpemF0
aW9uS2luZCBraW5kKQogewogICAgIC8vIEZpcnN0LCB0aGUgcmVhbGx5IHNpbXBsZSBjaGVja3M6
IGRvIHdlIGhhdmUgYW4gYWN0dWFsIEpTIGZ1bmN0aW9uPwogICAgIGlmICghY2FsbExpbmtTdGF0
dXMuZXhlY3V0YWJsZSgpKQpAQCAtMTQyMyw3ICsxMzg0LDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNl
cjo6aGFuZGxlSW5saW5pbmcoYm9vbAogICAgIC8vIE5vdyB3ZSBrbm93IHdpdGhvdXQgYSBkb3Vi
dCB0aGF0IHdlIGFyZSBjb21taXR0ZWQgdG8gaW5saW5pbmcuIFNvIGJlZ2luIHRoZSBwcm9jZXNz
CiAgICAgLy8gYnkgY2hlY2tpbmcgdGhlIGNhbGxlZSAoaWYgbmVjZXNzYXJ5KSBhbmQgbWFraW5n
IHN1cmUgdGhhdCBhcmd1bWVudHMgYW5kIHRoZSBjYWxsZWUKICAgICAvLyBhcmUgZmx1c2hlZC4K
LSAgICBlbWl0RnVuY3Rpb25DaGVja3MoY2FsbExpbmtTdGF0dXMsIGNhbGxUYXJnZXROb2RlSW5k
ZXgsIHJlZ2lzdGVyT2Zmc2V0LCBraW5kKTsKKyAgICBlbWl0RnVuY3Rpb25DaGVja3MoY2FsbExp
bmtTdGF0dXMsIGNhbGxUYXJnZXROb2RlLCByZWdpc3Rlck9mZnNldCwga2luZCk7CiAgICAgCiAg
ICAgLy8gRklYTUU6IERvbid0IGZsdXNoIGNvbnN0YW50cyEKICAgICAKQEAgLTE0NTcsOCArMTQx
OCw4IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUlubGluaW5nKGJvb2wKIAogICAgIGFk
ZFRvR3JhcGgoSW5saW5lU3RhcnQsIE9wSW5mbyhhcmd1bWVudFBvc2l0aW9uU3RhcnQpKTsKICAg
ICBpZiAoY2FsbExpbmtTdGF0dXMuaXNDbG9zdXJlQ2FsbCgpKSB7Ci0gICAgICAgIGFkZFRvR3Jh
cGgoU2V0Q2FsbGVlLCBjYWxsVGFyZ2V0Tm9kZUluZGV4KTsKLSAgICAgICAgYWRkVG9HcmFwaChT
ZXRNeVNjb3BlLCBhZGRUb0dyYXBoKEdldFNjb3BlLCBjYWxsVGFyZ2V0Tm9kZUluZGV4KSk7Cisg
ICAgICAgIGFkZFRvR3JhcGgoU2V0Q2FsbGVlLCBjYWxsVGFyZ2V0Tm9kZSk7CisgICAgICAgIGFk
ZFRvR3JhcGgoU2V0TXlTY29wZSwgYWRkVG9HcmFwaChHZXRTY29wZSwgY2FsbFRhcmdldE5vZGUp
KTsKICAgICB9CiAgICAgCiAgICAgcGFyc2VDb2RlQmxvY2soKTsKQEAgLTE0OTQsMTEgKzE0NTUs
MTEgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW5saW5pbmcoYm9vbAogICAgIH0gZWxz
ZQogICAgICAgICBBU1NFUlQoaW5saW5lU3RhY2tFbnRyeS5tX3VubGlua2VkQmxvY2tzLmlzRW1w
dHkoKSk7CiAgICAgCisgICAgQmFzaWNCbG9jayogbGFzdEJsb2NrID0gbV9ncmFwaC5tX2Jsb2Nr
cy5sYXN0KCkuZ2V0KCk7CiAgICAgLy8gSWYgdGhlcmUgd2FzIGEgcmV0dXJuLCBidXQgbm8gZWFy
bHkgcmV0dXJucywgdGhlbiB3ZSdyZSBkb25lLiBXZSBhbGxvdyBwYXJzaW5nIG9mCiAgICAgLy8g
dGhlIGNhbGxlciB0byBjb250aW51ZSBpbiB3aGF0ZXZlciBiYXNpYyBibG9jayB3ZSdyZSBpbiBy
aWdodCBub3cuCiAgICAgaWYgKCFpbmxpbmVTdGFja0VudHJ5Lm1fZGlkRWFybHlSZXR1cm4gJiYg
aW5saW5lU3RhY2tFbnRyeS5tX2RpZFJldHVybikgewotICAgICAgICBCYXNpY0Jsb2NrKiBsYXN0
QmxvY2sgPSBtX2dyYXBoLm1fYmxvY2tzLmxhc3QoKS5nZXQoKTsKLSAgICAgICAgQVNTRVJUKGxh
c3RCbG9jay0+aXNFbXB0eSgpIHx8ICFtX2dyYXBoLmxhc3QoKS5pc1Rlcm1pbmFsKCkpOworICAg
ICAgICBBU1NFUlQobGFzdEJsb2NrLT5pc0VtcHR5KCkgfHwgIWxhc3RCbG9jay0+bGFzdCgpLT5p
c1Rlcm1pbmFsKCkpOwogICAgICAgICAKICAgICAgICAgLy8gSWYgd2UgY3JlYXRlZCBuZXcgYmxv
Y2tzIHRoZW4gdGhlIGxhc3QgYmxvY2sgbmVlZHMgbGlua2luZywgYnV0IGluIHRoZQogICAgICAg
ICAvLyBjYWxsZXIuIEl0IGRvZXNuJ3QgbmVlZCB0byBiZSBsaW5rZWQgdG8sIGJ1dCBpdCBuZWVk
cyBvdXRnb2luZyBsaW5rcy4KQEAgLTE1MjIsNyArMTQ4Myw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJz
ZXI6OmhhbmRsZUlubGluaW5nKGJvb2wKICAgICB9CiAgICAgCiAgICAgLy8gSWYgd2UgZ2V0IHRv
IHRoaXMgcG9pbnQgdGhlbiBhbGwgYmxvY2tzIG11c3QgZW5kIGluIHNvbWUgc29ydCBvZiB0ZXJt
aW5hbHMuCi0gICAgQVNTRVJUKG1fZ3JhcGgubGFzdCgpLmlzVGVybWluYWwoKSk7CisgICAgQVNT
RVJUKGxhc3RCbG9jay0+bGFzdCgpLT5pc1Rlcm1pbmFsKCkpOwogICAgIAogICAgIC8vIExpbmsg
dGhlIGVhcmx5IHJldHVybnMgdG8gdGhlIGJhc2ljIGJsb2NrIHdlJ3JlIGFib3V0IHRvIGNyZWF0
ZS4KICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGlubGluZVN0YWNrRW50cnkubV91bmxpbmtl
ZEJsb2Nrcy5zaXplKCk7ICsraSkgewpAQCAtMTUzMCwxMCArMTQ5MSwxMCBAQCBib29sIEJ5dGVD
b2RlUGFyc2VyOjpoYW5kbGVJbmxpbmluZyhib29sCiAgICAgICAgICAgICBjb250aW51ZTsKICAg
ICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLm1fYmxvY2tzW2lubGluZVN0YWNrRW50
cnkubV91bmxpbmtlZEJsb2Nrc1tpXS5tX2Jsb2NrSW5kZXhdLmdldCgpOwogICAgICAgICBBU1NF
UlQoIWJsb2NrLT5pc0xpbmtlZCk7Ci0gICAgICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW2Jsb2Nr
LT5sYXN0KCldOwotICAgICAgICBBU1NFUlQobm9kZS5vcCgpID09IEp1bXApOwotICAgICAgICBB
U1NFUlQobm9kZS50YWtlbkJsb2NrSW5kZXgoKSA9PSBOb0Jsb2NrKTsKLSAgICAgICAgbm9kZS5z
ZXRUYWtlbkJsb2NrSW5kZXgobV9ncmFwaC5tX2Jsb2Nrcy5zaXplKCkpOworICAgICAgICBOb2Rl
KiBub2RlID0gYmxvY2stPmxhc3QoKTsKKyAgICAgICAgQVNTRVJUKG5vZGUtPm9wKCkgPT0gSnVt
cCk7CisgICAgICAgIEFTU0VSVChub2RlLT50YWtlbkJsb2NrSW5kZXgoKSA9PSBOb0Jsb2NrKTsK
KyAgICAgICAgbm9kZS0+c2V0VGFrZW5CbG9ja0luZGV4KG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgp
KTsKICAgICAgICAgaW5saW5lU3RhY2tFbnRyeS5tX3VubGlua2VkQmxvY2tzW2ldLm1fbmVlZHNF
YXJseVJldHVybkxpbmtpbmcgPSBmYWxzZTsKICNpZiAhQVNTRVJUX0RJU0FCTEVECiAgICAgICAg
IGJsb2NrLT5pc0xpbmtlZCA9IHRydWU7CkBAIC0xNTYwLDExICsxNTIxLDExIEBAIGJvb2wgQnl0
ZUNvZGVQYXJzZXI6OmhhbmRsZUlubGluaW5nKGJvb2wKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAot
dm9pZCBCeXRlQ29kZVBhcnNlcjo6c2V0SW50cmluc2ljUmVzdWx0KGJvb2wgdXNlc1Jlc3VsdCwg
aW50IHJlc3VsdE9wZXJhbmQsIE5vZGVJbmRleCBub2RlSW5kZXgpCit2b2lkIEJ5dGVDb2RlUGFy
c2VyOjpzZXRJbnRyaW5zaWNSZXN1bHQoYm9vbCB1c2VzUmVzdWx0LCBpbnQgcmVzdWx0T3BlcmFu
ZCwgTm9kZSogbm9kZSkKIHsKICAgICBpZiAoIXVzZXNSZXN1bHQpCiAgICAgICAgIHJldHVybjsK
LSAgICBzZXQocmVzdWx0T3BlcmFuZCwgbm9kZUluZGV4KTsKKyAgICBzZXQocmVzdWx0T3BlcmFu
ZCwgbm9kZSk7CiB9CiAKIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZU1pbk1heChib29sIHVz
ZXNSZXN1bHQsIGludCByZXN1bHRPcGVyYW5kLCBOb2RlVHlwZSBvcCwgaW50IHJlZ2lzdGVyT2Zm
c2V0LCBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpCkBAIC0xNTc2LDcgKzE1MzcsNyBA
QCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVNaW5NYXgoYm9vbCB1CiAgICAgIAogICAgIGlm
IChhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA9PSAyKSB7IC8vIE1hdGgubWluKHgpCiAgICAg
ICAgIC8vIEZJWE1FOiB3aGF0IHdlJ2QgcmVhbGx5IGxpa2UgaXMgYSBWYWx1ZVRvTnVtYmVyLCBl
eGNlcHQgd2UgZG9uJ3Qgc3VwcG9ydCB0aGF0IHJpZ2h0IG5vdy4gT2ggd2VsbC4KLSAgICAgICAg
Tm9kZUluZGV4IHJlc3VsdCA9IGdldChyZWdpc3Rlck9mZnNldCArIGFyZ3VtZW50VG9PcGVyYW5k
KDEpKTsKKyAgICAgICAgTm9kZSogcmVzdWx0ID0gZ2V0KHJlZ2lzdGVyT2Zmc2V0ICsgYXJndW1l
bnRUb09wZXJhbmQoMSkpOwogICAgICAgICBhZGRUb0dyYXBoKENoZWNrTnVtYmVyLCByZXN1bHQp
OwogICAgICAgICBzZXRJbnRyaW5zaWNSZXN1bHQodXNlc1Jlc3VsdCwgcmVzdWx0T3BlcmFuZCwg
cmVzdWx0KTsKICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0xNjA1LDEwICsxNTY2LDEwIEBAIGJv
b2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUludHJpbnNpYyhib28KICAgICAgICAgaWYgKCFNYWNy
b0Fzc2VtYmxlcjo6c3VwcG9ydHNGbG9hdGluZ1BvaW50QWJzKCkpCiAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CiAKLSAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRleCA9IGFkZFRvR3JhcGgoQXJp
dGhBYnMsIGdldChyZWdpc3Rlck9mZnNldCArIGFyZ3VtZW50VG9PcGVyYW5kKDEpKSk7CisgICAg
ICAgIE5vZGUqIG5vZGUgPSBhZGRUb0dyYXBoKEFyaXRoQWJzLCBnZXQocmVnaXN0ZXJPZmZzZXQg
KyBhcmd1bWVudFRvT3BlcmFuZCgxKSkpOwogICAgICAgICBpZiAobV9pbmxpbmVTdGFja1RvcC0+
bV9leGl0UHJvZmlsZS5oYXNFeGl0U2l0ZShtX2N1cnJlbnRJbmRleCwgT3ZlcmZsb3cpKQotICAg
ICAgICAgICAgbV9ncmFwaFtub2RlSW5kZXhdLm1lcmdlRmxhZ3MoTm9kZU1heU92ZXJmbG93KTsK
LSAgICAgICAgc2V0SW50cmluc2ljUmVzdWx0KHVzZXNSZXN1bHQsIHJlc3VsdE9wZXJhbmQsIG5v
ZGVJbmRleCk7CisgICAgICAgICAgICBub2RlLT5tZXJnZUZsYWdzKE5vZGVNYXlPdmVyZmxvdyk7
CisgICAgICAgIHNldEludHJpbnNpY1Jlc3VsdCh1c2VzUmVzdWx0LCByZXN1bHRPcGVyYW5kLCBu
b2RlKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCkBAIC0xNjQ0LDcgKzE2MDUsNyBA
QCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbnRyaW5zaWMoYm9vCiAgICAgICAgIGNhc2Ug
QXJyYXk6OkRvdWJsZToKICAgICAgICAgY2FzZSBBcnJheTo6Q29udGlndW91czoKICAgICAgICAg
Y2FzZSBBcnJheTo6QXJyYXlTdG9yYWdlOiB7Ci0gICAgICAgICAgICBOb2RlSW5kZXggYXJyYXlQ
dXNoID0gYWRkVG9HcmFwaChBcnJheVB1c2gsIE9wSW5mbyhhcnJheU1vZGUuYXNXb3JkKCkpLCBP
cEluZm8ocHJlZGljdGlvbiksIGdldChyZWdpc3Rlck9mZnNldCArIGFyZ3VtZW50VG9PcGVyYW5k
KDApKSwgZ2V0KHJlZ2lzdGVyT2Zmc2V0ICsgYXJndW1lbnRUb09wZXJhbmQoMSkpKTsKKyAgICAg
ICAgICAgIE5vZGUqIGFycmF5UHVzaCA9IGFkZFRvR3JhcGgoQXJyYXlQdXNoLCBPcEluZm8oYXJy
YXlNb2RlLmFzV29yZCgpKSwgT3BJbmZvKHByZWRpY3Rpb24pLCBnZXQocmVnaXN0ZXJPZmZzZXQg
KyBhcmd1bWVudFRvT3BlcmFuZCgwKSksIGdldChyZWdpc3Rlck9mZnNldCArIGFyZ3VtZW50VG9P
cGVyYW5kKDEpKSk7CiAgICAgICAgICAgICBpZiAodXNlc1Jlc3VsdCkKICAgICAgICAgICAgICAg
ICBzZXQocmVzdWx0T3BlcmFuZCwgYXJyYXlQdXNoKTsKICAgICAgICAgICAgIApAQCAtMTY2OCw3
ICsxNjI5LDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW50cmluc2ljKGJvbwogICAg
ICAgICBjYXNlIEFycmF5OjpEb3VibGU6CiAgICAgICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3VvdXM6
CiAgICAgICAgIGNhc2UgQXJyYXk6OkFycmF5U3RvcmFnZTogewotICAgICAgICAgICAgTm9kZUlu
ZGV4IGFycmF5UG9wID0gYWRkVG9HcmFwaChBcnJheVBvcCwgT3BJbmZvKGFycmF5TW9kZS5hc1dv
cmQoKSksIE9wSW5mbyhwcmVkaWN0aW9uKSwgZ2V0KHJlZ2lzdGVyT2Zmc2V0ICsgYXJndW1lbnRU
b09wZXJhbmQoMCkpKTsKKyAgICAgICAgICAgIE5vZGUqIGFycmF5UG9wID0gYWRkVG9HcmFwaChB
cnJheVBvcCwgT3BJbmZvKGFycmF5TW9kZS5hc1dvcmQoKSksIE9wSW5mbyhwcmVkaWN0aW9uKSwg
Z2V0KHJlZ2lzdGVyT2Zmc2V0ICsgYXJndW1lbnRUb09wZXJhbmQoMCkpKTsKICAgICAgICAgICAg
IGlmICh1c2VzUmVzdWx0KQogICAgICAgICAgICAgICAgIHNldChyZXN1bHRPcGVyYW5kLCBhcnJh
eVBvcCk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTE2ODUsNyArMTY0Niw3IEBAIGJv
b2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUludHJpbnNpYyhib28KIAogICAgICAgICBpbnQgdGhp
c09wZXJhbmQgPSByZWdpc3Rlck9mZnNldCArIGFyZ3VtZW50VG9PcGVyYW5kKDApOwogICAgICAg
ICBpbnQgaW5kZXhPcGVyYW5kID0gcmVnaXN0ZXJPZmZzZXQgKyBhcmd1bWVudFRvT3BlcmFuZCgx
KTsKLSAgICAgICAgTm9kZUluZGV4IGNoYXJDb2RlID0gYWRkVG9HcmFwaChTdHJpbmdDaGFyQ29k
ZUF0LCBPcEluZm8oQXJyYXlNb2RlKEFycmF5OjpTdHJpbmcpLmFzV29yZCgpKSwgZ2V0KHRoaXNP
cGVyYW5kKSwgZ2V0VG9JbnQzMihpbmRleE9wZXJhbmQpKTsKKyAgICAgICAgTm9kZSogY2hhckNv
ZGUgPSBhZGRUb0dyYXBoKFN0cmluZ0NoYXJDb2RlQXQsIE9wSW5mbyhBcnJheU1vZGUoQXJyYXk6
OlN0cmluZykuYXNXb3JkKCkpLCBnZXQodGhpc09wZXJhbmQpLCBnZXRUb0ludDMyKGluZGV4T3Bl
cmFuZCkpOwogCiAgICAgICAgIGlmICh1c2VzUmVzdWx0KQogICAgICAgICAgICAgc2V0KHJlc3Vs
dE9wZXJhbmQsIGNoYXJDb2RlKTsKQEAgLTE2OTgsNyArMTY1OSw3IEBAIGJvb2wgQnl0ZUNvZGVQ
YXJzZXI6OmhhbmRsZUludHJpbnNpYyhib28KIAogICAgICAgICBpbnQgdGhpc09wZXJhbmQgPSBy
ZWdpc3Rlck9mZnNldCArIGFyZ3VtZW50VG9PcGVyYW5kKDApOwogICAgICAgICBpbnQgaW5kZXhP
cGVyYW5kID0gcmVnaXN0ZXJPZmZzZXQgKyBhcmd1bWVudFRvT3BlcmFuZCgxKTsKLSAgICAgICAg
Tm9kZUluZGV4IGNoYXJDb2RlID0gYWRkVG9HcmFwaChTdHJpbmdDaGFyQXQsIE9wSW5mbyhBcnJh
eU1vZGUoQXJyYXk6OlN0cmluZykuYXNXb3JkKCkpLCBnZXQodGhpc09wZXJhbmQpLCBnZXRUb0lu
dDMyKGluZGV4T3BlcmFuZCkpOworICAgICAgICBOb2RlKiBjaGFyQ29kZSA9IGFkZFRvR3JhcGgo
U3RyaW5nQ2hhckF0LCBPcEluZm8oQXJyYXlNb2RlKEFycmF5OjpTdHJpbmcpLmFzV29yZCgpKSwg
Z2V0KHRoaXNPcGVyYW5kKSwgZ2V0VG9JbnQzMihpbmRleE9wZXJhbmQpKTsKIAogICAgICAgICBp
ZiAodXNlc1Jlc3VsdCkKICAgICAgICAgICAgIHNldChyZXN1bHRPcGVyYW5kLCBjaGFyQ29kZSk7
CkBAIC0xNzA5LDcgKzE2NzAsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbnRyaW5z
aWMoYm9vCiAgICAgICAgIGlmIChhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAhPSAyKQogICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAKLSAgICAgICAgTm9kZUluZGV4IHJlZ0V4
cEV4ZWMgPSBhZGRUb0dyYXBoKFJlZ0V4cEV4ZWMsIE9wSW5mbygwKSwgT3BJbmZvKHByZWRpY3Rp
b24pLCBnZXQocmVnaXN0ZXJPZmZzZXQgKyBhcmd1bWVudFRvT3BlcmFuZCgwKSksIGdldChyZWdp
c3Rlck9mZnNldCArIGFyZ3VtZW50VG9PcGVyYW5kKDEpKSk7CisgICAgICAgIE5vZGUqIHJlZ0V4
cEV4ZWMgPSBhZGRUb0dyYXBoKFJlZ0V4cEV4ZWMsIE9wSW5mbygwKSwgT3BJbmZvKHByZWRpY3Rp
b24pLCBnZXQocmVnaXN0ZXJPZmZzZXQgKyBhcmd1bWVudFRvT3BlcmFuZCgwKSksIGdldChyZWdp
c3Rlck9mZnNldCArIGFyZ3VtZW50VG9PcGVyYW5kKDEpKSk7CiAgICAgICAgIGlmICh1c2VzUmVz
dWx0KQogICAgICAgICAgICAgc2V0KHJlc3VsdE9wZXJhbmQsIHJlZ0V4cEV4ZWMpOwogICAgICAg
ICAKQEAgLTE3MjAsNyArMTY4MSw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUludHJp
bnNpYyhib28KICAgICAgICAgaWYgKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzICE9IDIpCiAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIAotICAgICAgICBOb2RlSW5kZXggcmVn
RXhwRXhlYyA9IGFkZFRvR3JhcGgoUmVnRXhwVGVzdCwgT3BJbmZvKDApLCBPcEluZm8ocHJlZGlj
dGlvbiksIGdldChyZWdpc3Rlck9mZnNldCArIGFyZ3VtZW50VG9PcGVyYW5kKDApKSwgZ2V0KHJl
Z2lzdGVyT2Zmc2V0ICsgYXJndW1lbnRUb09wZXJhbmQoMSkpKTsKKyAgICAgICAgTm9kZSogcmVn
RXhwRXhlYyA9IGFkZFRvR3JhcGgoUmVnRXhwVGVzdCwgT3BJbmZvKDApLCBPcEluZm8ocHJlZGlj
dGlvbiksIGdldChyZWdpc3Rlck9mZnNldCArIGFyZ3VtZW50VG9PcGVyYW5kKDApKSwgZ2V0KHJl
Z2lzdGVyT2Zmc2V0ICsgYXJndW1lbnRUb09wZXJhbmQoMSkpKTsKICAgICAgICAgaWYgKHVzZXNS
ZXN1bHQpCiAgICAgICAgICAgICBzZXQocmVzdWx0T3BlcmFuZCwgcmVnRXhwRXhlYyk7CiAgICAg
ICAgIApAQCAtMTc2NSw5ICsxNzI2LDkgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlQ29u
c3RhbnRJbnRlcgogICAgIHJldHVybiBmYWxzZTsKIH0KIAotTm9kZUluZGV4IEJ5dGVDb2RlUGFy
c2VyOjpoYW5kbGVHZXRCeU9mZnNldChTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uLCBOb2RlSW5k
ZXggYmFzZSwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0
KQorTm9kZSogQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUdldEJ5T2Zmc2V0KFNwZWN1bGF0ZWRUeXBl
IHByZWRpY3Rpb24sIE5vZGUqIGJhc2UsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIFByb3Bl
cnR5T2Zmc2V0IG9mZnNldCkKIHsKLSAgICBOb2RlSW5kZXggcHJvcGVydHlTdG9yYWdlOworICAg
IE5vZGUqIHByb3BlcnR5U3RvcmFnZTsKICAgICBpZiAoaXNJbmxpbmVPZmZzZXQob2Zmc2V0KSkK
ICAgICAgICAgcHJvcGVydHlTdG9yYWdlID0gYmFzZTsKICAgICBlbHNlCkBAIC0xNzc2LDcgKzE3
MzcsNyBAQCBOb2RlSW5kZXggQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUdldEJ5T2ZmCiAgICAgLy8g
YW4gT1NSIHN0YW5kcG9pbnQpIGlmIEdldEJ5T2Zmc2V0IGFsc28gcmVmZXJlbmNlZCB0aGUgb2Jq
ZWN0IHdlIHdlcmUgbG9hZGluZwogICAgIC8vIGZyb20sIGFuZCBpZiB3ZSBjb3VsZCBsb2FkIGVs
aW1pbmF0ZSBhIEdldEJ5T2Zmc2V0IGV2ZW4gaWYgdGhlIGJ1dHRlcmZseQogICAgIC8vIGhhZCBj
aGFuZ2VkLiBUaGF0IHdvdWxkIGJlIGEgZ3JlYXQgc3VjY2Vzcy4KLSAgICBOb2RlSW5kZXggZ2V0
QnlPZmZzZXQgPSBhZGRUb0dyYXBoKEdldEJ5T2Zmc2V0LCBPcEluZm8obV9ncmFwaC5tX3N0b3Jh
Z2VBY2Nlc3NEYXRhLnNpemUoKSksIE9wSW5mbyhwcmVkaWN0aW9uKSwgcHJvcGVydHlTdG9yYWdl
KTsKKyAgICBOb2RlKiBnZXRCeU9mZnNldCA9IGFkZFRvR3JhcGgoR2V0QnlPZmZzZXQsIE9wSW5m
byhtX2dyYXBoLm1fc3RvcmFnZUFjY2Vzc0RhdGEuc2l6ZSgpKSwgT3BJbmZvKHByZWRpY3Rpb24p
LCBwcm9wZXJ0eVN0b3JhZ2UpOwogCiAgICAgU3RvcmFnZUFjY2Vzc0RhdGEgc3RvcmFnZUFjY2Vz
c0RhdGE7CiAgICAgc3RvcmFnZUFjY2Vzc0RhdGEub2Zmc2V0ID0gaW5kZXhSZWxhdGl2ZVRvQmFz
ZShvZmZzZXQpOwpAQCAtMTc4NywxNCArMTc0OCwxNCBAQCBOb2RlSW5kZXggQnl0ZUNvZGVQYXJz
ZXI6OmhhbmRsZUdldEJ5T2ZmCiB9CiAKIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUdldEJ5
T2Zmc2V0KAotICAgIGludCBkZXN0aW5hdGlvbk9wZXJhbmQsIFNwZWN1bGF0ZWRUeXBlIHByZWRp
Y3Rpb24sIE5vZGVJbmRleCBiYXNlLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLAorICAgIGlu
dCBkZXN0aW5hdGlvbk9wZXJhbmQsIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24sIE5vZGUqIGJh
c2UsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsCiAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0
KQogewogICAgIHNldChkZXN0aW5hdGlvbk9wZXJhbmQsIGhhbmRsZUdldEJ5T2Zmc2V0KHByZWRp
Y3Rpb24sIGJhc2UsIGlkZW50aWZpZXJOdW1iZXIsIG9mZnNldCkpOwogfQogCiB2b2lkIEJ5dGVD
b2RlUGFyc2VyOjpoYW5kbGVHZXRCeUlkKAotICAgIGludCBkZXN0aW5hdGlvbk9wZXJhbmQsIFNw
ZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24sIE5vZGVJbmRleCBiYXNlLCB1bnNpZ25lZCBpZGVudGlm
aWVyTnVtYmVyLAorICAgIGludCBkZXN0aW5hdGlvbk9wZXJhbmQsIFNwZWN1bGF0ZWRUeXBlIHBy
ZWRpY3Rpb24sIE5vZGUqIGJhc2UsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsCiAgICAgY29u
c3QgR2V0QnlJZFN0YXR1cyYgZ2V0QnlJZFN0YXR1cykKIHsKICAgICBpZiAoIWdldEJ5SWRTdGF0
dXMuaXNTaW1wbGUoKQpAQCAtMTgxMyw3ICsxNzc0LDcgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6
aGFuZGxlR2V0QnlJZCgKICAgICBpZiAocHJlZGljdGlvbiA9PSBTcGVjTm9uZSkKICAgICAgICAg
YWRkVG9HcmFwaChGb3JjZU9TUkV4aXQpOwogICAgIAotICAgIE5vZGVJbmRleCBvcmlnaW5hbEJh
c2VGb3JCYXNlbGluZUpJVCA9IGJhc2U7CisgICAgTm9kZSogb3JpZ2luYWxCYXNlRm9yQmFzZWxp
bmVKSVQgPSBiYXNlOwogICAgICAgICAgICAgICAgIAogICAgIGFkZFRvR3JhcGgoQ2hlY2tTdHJ1
Y3R1cmUsIE9wSW5mbyhtX2dyYXBoLmFkZFN0cnVjdHVyZVNldChnZXRCeUlkU3RhdHVzLnN0cnVj
dHVyZVNldCgpKSksIGJhc2UpOwogICAgIApAQCAtMTg1NCw5ICsxODE1LDkgQEAgdm9pZCBCeXRl
Q29kZVBhcnNlcjo6cHJlcGFyZVRvUGFyc2VCbG9jawogICAgIG1fY2VsbENvbnN0YW50Tm9kZXMu
Y2xlYXIoKTsKIH0KIAotTm9kZUluZGV4IEJ5dGVDb2RlUGFyc2VyOjpnZXRTY29wZShib29sIHNr
aXBUb3AsIHVuc2lnbmVkIHNraXBDb3VudCkKK05vZGUqIEJ5dGVDb2RlUGFyc2VyOjpnZXRTY29w
ZShib29sIHNraXBUb3AsIHVuc2lnbmVkIHNraXBDb3VudCkKIHsKLSAgICBOb2RlSW5kZXggbG9j
YWxCYXNlOworICAgIE5vZGUqIGxvY2FsQmFzZTsKICAgICBpZiAobV9pbmxpbmVTdGFja1RvcC0+
bV9pbmxpbmVDYWxsRnJhbWUgJiYgIW1faW5saW5lU3RhY2tUb3AtPm1faW5saW5lQ2FsbEZyYW1l
LT5pc0Nsb3N1cmVDYWxsKCkpIHsKICAgICAgICAgQVNTRVJUKG1faW5saW5lU3RhY2tUb3AtPm1f
aW5saW5lQ2FsbEZyYW1lLT5jYWxsZWUpOwogICAgICAgICBsb2NhbEJhc2UgPSBjZWxsQ29uc3Rh
bnQobV9pbmxpbmVTdGFja1RvcC0+bV9pbmxpbmVDYWxsRnJhbWUtPmNhbGxlZS0+c2NvcGUoKSk7
CkBAIC0xODcxLDcgKzE4MzIsNyBAQCBOb2RlSW5kZXggQnl0ZUNvZGVQYXJzZXI6OmdldFNjb3Bl
KGJvb2wgCiAgICAgcmV0dXJuIGxvY2FsQmFzZTsKIH0KIAotYm9vbCBCeXRlQ29kZVBhcnNlcjo6
cGFyc2VSZXNvbHZlT3BlcmF0aW9ucyhTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uLCB1bnNpZ25l
ZCBpZGVudGlmaWVyLCB1bnNpZ25lZCBvcGVyYXRpb25zLCB1bnNpZ25lZCBwdXRUb0Jhc2VPcGVy
YXRpb24sIE5vZGVJbmRleCogYmFzZSwgTm9kZUluZGV4KiB2YWx1ZSkKK2Jvb2wgQnl0ZUNvZGVQ
YXJzZXI6OnBhcnNlUmVzb2x2ZU9wZXJhdGlvbnMoU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiwg
dW5zaWduZWQgaWRlbnRpZmllciwgdW5zaWduZWQgb3BlcmF0aW9ucywgdW5zaWduZWQgcHV0VG9C
YXNlT3BlcmF0aW9uLCBOb2RlKiogYmFzZSwgTm9kZSoqIHZhbHVlKQogewogICAgIFJlc29sdmVP
cGVyYXRpb25zKiByZXNvbHZlT3BlcmF0aW9ucyA9IG1fY29kZUJsb2NrLT5yZXNvbHZlT3BlcmF0
aW9ucyhvcGVyYXRpb25zKTsKICAgICBpZiAocmVzb2x2ZU9wZXJhdGlvbnMtPmlzRW1wdHkoKSkg
ewpAQCAtMTg4NCw3ICsxODQ1LDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VSZXNvbHZl
T3BlcmF0aQogICAgIGJvb2wgc2tpcHBlZFNjb3BlcyA9IGZhbHNlOwogICAgIGJvb2wgc2V0QmFz
ZSA9IGZhbHNlOwogICAgIFJlc29sdmVPcGVyYXRpb24qIHBjID0gcmVzb2x2ZU9wZXJhdGlvbnMt
PmRhdGEoKTsKLSAgICBOb2RlSW5kZXggbG9jYWxCYXNlID0gMDsKKyAgICBOb2RlKiBsb2NhbEJh
c2UgPSAwOwogICAgIGJvb2wgcmVzb2x2aW5nQmFzZSA9IHRydWU7CiAgICAgd2hpbGUgKHJlc29s
dmluZ0Jhc2UpIHsKICAgICAgICAgc3dpdGNoIChwYy0+bV9vcGVyYXRpb24pIHsKQEAgLTE5NjAs
NyArMTkyMSw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlUmVzb2x2ZU9wZXJhdGkKICAg
ICAgICAgaWYgKHN0YXR1cy5pc1NpbXBsZSgpKSB7CiAgICAgICAgICAgICBBU1NFUlQoc3RhdHVz
LnN0cnVjdHVyZSgpKTsKIAotICAgICAgICAgICAgTm9kZUluZGV4IGdsb2JhbE9iamVjdE5vZGUg
PSBhZGRTdHJ1Y3R1cmVUcmFuc2l0aW9uQ2hlY2soZ2xvYmFsT2JqZWN0LCBzdGF0dXMuc3RydWN0
dXJlKCkpOworICAgICAgICAgICAgTm9kZSogZ2xvYmFsT2JqZWN0Tm9kZSA9IGFkZFN0cnVjdHVy
ZVRyYW5zaXRpb25DaGVjayhnbG9iYWxPYmplY3QsIHN0YXR1cy5zdHJ1Y3R1cmUoKSk7CiAKICAg
ICAgICAgICAgIGlmIChzdGF0dXMuc3BlY2lmaWNWYWx1ZSgpKSB7CiAgICAgICAgICAgICAgICAg
QVNTRVJUKHN0YXR1cy5zcGVjaWZpY1ZhbHVlKCkuaXNDZWxsKCkpOwpAQCAtMTk3MCw3ICsxOTMx
LDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VSZXNvbHZlT3BlcmF0aQogICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KIAotICAgICAgICBOb2RlSW5kZXggcmVzb2x2ZSA9
IGFkZFRvR3JhcGgoUmVzb2x2ZUdsb2JhbCwgT3BJbmZvKG1fZ3JhcGgubV9yZXNvbHZlR2xvYmFs
RGF0YS5zaXplKCkpLCBPcEluZm8ocHJlZGljdGlvbikpOworICAgICAgICBOb2RlKiByZXNvbHZl
ID0gYWRkVG9HcmFwaChSZXNvbHZlR2xvYmFsLCBPcEluZm8obV9ncmFwaC5tX3Jlc29sdmVHbG9i
YWxEYXRhLnNpemUoKSksIE9wSW5mbyhwcmVkaWN0aW9uKSk7CiAgICAgICAgIG1fZ3JhcGgubV9y
ZXNvbHZlR2xvYmFsRGF0YS5hcHBlbmQoUmVzb2x2ZUdsb2JhbERhdGEoKSk7CiAgICAgICAgIFJl
c29sdmVHbG9iYWxEYXRhJiBkYXRhID0gbV9ncmFwaC5tX3Jlc29sdmVHbG9iYWxEYXRhLmxhc3Qo
KTsKICAgICAgICAgZGF0YS5pZGVudGlmaWVyTnVtYmVyID0gaWRlbnRpZmllcjsKQEAgLTE5ODEs
OSArMTk0MiwxMCBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZVJlc29sdmVPcGVyYXRpCiAg
ICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICBjYXNlIFJlc29sdmVPcGVyYXRpb246Okdl
dEFuZFJldHVybkdsb2JhbFZhcjogewotICAgICAgICAqdmFsdWUgPSBhZGRUb0dyYXBoKEdldEds
b2JhbFZhciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcEluZm8oZ2xvYmFsT2JqZWN0
LT5hc3NlcnRSZWdpc3RlcklzSW5UaGlzT2JqZWN0KHBjLT5tX3JlZ2lzdGVyQWRkcmVzcykpLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9wSW5mbyhwcmVkaWN0aW9uKSk7CisgICAgICAg
ICp2YWx1ZSA9IGFkZFRvR3JhcGgoCisgICAgICAgICAgICBHZXRHbG9iYWxWYXIsCisgICAgICAg
ICAgICBPcEluZm8oZ2xvYmFsT2JqZWN0LT5hc3NlcnRSZWdpc3RlcklzSW5UaGlzT2JqZWN0KHBj
LT5tX3JlZ2lzdGVyQWRkcmVzcykpLAorICAgICAgICAgICAgT3BJbmZvKHByZWRpY3Rpb24pKTsK
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIGNhc2UgUmVzb2x2ZU9wZXJhdGlvbjo6
R2V0QW5kUmV0dXJuR2xvYmFsVmFyV2F0Y2hhYmxlOiB7CkBAIC0yMDIyLDcgKzE5ODQsNyBAQCBi
b29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZVJlc29sdmVPcGVyYXRpCiAgICAgICAgIHJldHVybiB0
cnVlOwogICAgIH0KICAgICBjYXNlIFJlc29sdmVPcGVyYXRpb246OkdldEFuZFJldHVyblNjb3Bl
ZFZhcjogewotICAgICAgICBOb2RlSW5kZXggZ2V0U2NvcGVSZWdpc3RlcnMgPSBhZGRUb0dyYXBo
KEdldFNjb3BlUmVnaXN0ZXJzLCBsb2NhbEJhc2UpOworICAgICAgICBOb2RlKiBnZXRTY29wZVJl
Z2lzdGVycyA9IGFkZFRvR3JhcGgoR2V0U2NvcGVSZWdpc3RlcnMsIGxvY2FsQmFzZSk7CiAgICAg
ICAgICp2YWx1ZSA9IGFkZFRvR3JhcGgoR2V0U2NvcGVkVmFyLCBPcEluZm8ocmVzb2x2ZVZhbHVl
T3BlcmF0aW9uLT5tX29mZnNldCksIE9wSW5mbyhwcmVkaWN0aW9uKSwgZ2V0U2NvcGVSZWdpc3Rl
cnMpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CkBAIC0yMDUxLDcgKzIwMTMsNyBAQCBi
b29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICAgICAg
YXJndW1lbnRUb09wZXJhbmQoYXJndW1lbnQpLCBtX2NvZGVCbG9jay0+aXNDYXB0dXJlZChhcmd1
bWVudFRvT3BlcmFuZChhcmd1bWVudCkpKTsKICAgICAgICAgICAgIHZhcmlhYmxlLT5tZXJnZVN0
cnVjdHVyZUNoZWNrSG9pc3RpbmdGYWlsZWQoCiAgICAgICAgICAgICAgICAgbV9pbmxpbmVTdGFj
a1RvcC0+bV9leGl0UHJvZmlsZS5oYXNFeGl0U2l0ZShtX2N1cnJlbnRJbmRleCwgQmFkQ2FjaGUp
KTsKLSAgICAgICAgICAgIE5vZGVJbmRleCBzZXRBcmd1bWVudCA9IGFkZFRvR3JhcGgoU2V0QXJn
dW1lbnQsIE9wSW5mbyh2YXJpYWJsZSkpOworICAgICAgICAgICAgTm9kZSogc2V0QXJndW1lbnQg
PSBhZGRUb0dyYXBoKFNldEFyZ3VtZW50LCBPcEluZm8odmFyaWFibGUpKTsKICAgICAgICAgICAg
IG1fZ3JhcGgubV9hcmd1bWVudHNbYXJndW1lbnRdID0gc2V0QXJndW1lbnQ7CiAgICAgICAgICAg
ICBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRIZWFkLnNldEFyZ3VtZW50Rmlyc3RUaW1lKGFy
Z3VtZW50LCBzZXRBcmd1bWVudCk7CiAgICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+dmFyaWFi
bGVzQXRUYWlsLnNldEFyZ3VtZW50Rmlyc3RUaW1lKGFyZ3VtZW50LCBzZXRBcmd1bWVudCk7CkBA
IC0yMTAxLDEzICsyMDYzLDEzIEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5z
aWduZWQKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2VudGVyKTsKIAogICAgICAgICBjYXNl
IG9wX2NvbnZlcnRfdGhpczogewotICAgICAgICAgICAgTm9kZUluZGV4IG9wMSA9IGdldFRoaXMo
KTsKLSAgICAgICAgICAgIGlmIChtX2dyYXBoW29wMV0ub3AoKSAhPSBDb252ZXJ0VGhpcykgewor
ICAgICAgICAgICAgTm9kZSogb3AxID0gZ2V0VGhpcygpOworICAgICAgICAgICAgaWYgKG9wMS0+
b3AoKSAhPSBDb252ZXJ0VGhpcykgewogICAgICAgICAgICAgICAgIFZhbHVlUHJvZmlsZSogcHJv
ZmlsZSA9CiAgICAgICAgICAgICAgICAgICAgIG1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRC
bG9jay0+dmFsdWVQcm9maWxlRm9yQnl0ZWNvZGVPZmZzZXQobV9jdXJyZW50UHJvZmlsaW5nSW5k
ZXgpOwogICAgICAgICAgICAgICAgIHByb2ZpbGUtPmNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbigp
OwogI2lmIERGR19FTkFCTEUoREVCVUdfVkVSQk9TRSkKLSAgICAgICAgICAgICAgICBkYXRhTG9n
RigiW0AlbHUgYmMjJXVdOiBwcm9maWxlICVwOiAiLCBtX2dyYXBoLnNpemUoKSwgbV9jdXJyZW50
UHJvZmlsaW5nSW5kZXgsIHByb2ZpbGUpOworICAgICAgICAgICAgICAgIGRhdGFMb2dGKCJbYmMj
JXVdOiBwcm9maWxlICVwOiAiLCBtX2N1cnJlbnRQcm9maWxpbmdJbmRleCwgcHJvZmlsZSk7CiAg
ICAgICAgICAgICAgICAgcHJvZmlsZS0+ZHVtcChXVEY6OmRhdGFGaWxlKCkpOwogICAgICAgICAg
ICAgICAgIGRhdGFMb2dGKCJcbiIpOwogI2VuZGlmCkBAIC0yMTI4LDEwICsyMDkwLDEwIEBAIGJv
b2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKIAogICAgICAgICBjYXNlIG9w
X2NyZWF0ZV90aGlzOiB7CiAgICAgICAgICAgICBpbnQgY2FsbGVlT3BlcmFuZCA9IGN1cnJlbnRJ
bnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBOb2RlSW5kZXggY2FsbGVlID0g
Z2V0KGNhbGxlZU9wZXJhbmQpOworICAgICAgICAgICAgTm9kZSogY2FsbGVlID0gZ2V0KGNhbGxl
ZU9wZXJhbmQpOwogICAgICAgICAgICAgYm9vbCBhbHJlYWR5RW1pdHRlZCA9IGZhbHNlOwotICAg
ICAgICAgICAgaWYgKG1fZ3JhcGhbY2FsbGVlXS5vcCgpID09IFdlYWtKU0NvbnN0YW50KSB7Ci0g
ICAgICAgICAgICAgICAgSlNDZWxsKiBjZWxsID0gbV9ncmFwaFtjYWxsZWVdLndlYWtDb25zdGFu
dCgpOworICAgICAgICAgICAgaWYgKGNhbGxlZS0+b3AoKSA9PSBXZWFrSlNDb25zdGFudCkgewor
ICAgICAgICAgICAgICAgIEpTQ2VsbCogY2VsbCA9IGNhbGxlZS0+d2Vha0NvbnN0YW50KCk7CiAg
ICAgICAgICAgICAgICAgQVNTRVJUKGNlbGwtPmluaGVyaXRzKCZKU0Z1bmN0aW9uOjpzX2luZm8p
KTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBKU0Z1bmN0aW9uKiBmdW5jdGlv
biA9IGpzQ2FzdDxKU0Z1bmN0aW9uKj4oY2VsbCk7CkBAIC0yMjA1LDcgKzIxNjcsNyBAQCBib29s
IEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICAgICAgc2V0
KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsIGdldChKU1N0YWNrOjpDYWxsZWUpKTsK
ICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgIEFTU0VSVChwcm9maWxlLT5tX3Np
bmdsZXRvblZhbHVlLmFzQ2VsbCgpLT5pbmhlcml0cygmSlNGdW5jdGlvbjo6c19pbmZvKSk7Ci0g
ICAgICAgICAgICAgICAgTm9kZUluZGV4IGFjdHVhbENhbGxlZSA9IGdldChKU1N0YWNrOjpDYWxs
ZWUpOworICAgICAgICAgICAgICAgIE5vZGUqIGFjdHVhbENhbGxlZSA9IGdldChKU1N0YWNrOjpD
YWxsZWUpOwogICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoQ2hlY2tGdW5jdGlvbiwgT3BJbmZv
KHByb2ZpbGUtPm1fc2luZ2xldG9uVmFsdWUuYXNDZWxsKCkpLCBhY3R1YWxDYWxsZWUpOwogICAg
ICAgICAgICAgICAgIHNldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCBhZGRUb0dy
YXBoKFdlYWtKU0NvbnN0YW50LCBPcEluZm8ocHJvZmlsZS0+bV9zaW5nbGV0b25WYWx1ZS5hc0Nl
bGwoKSkpKTsKICAgICAgICAgICAgIH0KQEAgLTIyMTUsMzAgKzIxNzcsMzAgQEAgYm9vbCBCeXRl
Q29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAvLyA9PT0gQml0d2lzZSBv
cGVyYXRpb25zID09PQogCiAgICAgICAgIGNhc2Ugb3BfYml0YW5kOiB7Ci0gICAgICAgICAgICBO
b2RlSW5kZXggb3AxID0gZ2V0VG9JbnQzMihjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5k
KTsKLSAgICAgICAgICAgIE5vZGVJbmRleCBvcDIgPSBnZXRUb0ludDMyKGN1cnJlbnRJbnN0cnVj
dGlvblszXS51Lm9wZXJhbmQpOworICAgICAgICAgICAgTm9kZSogb3AxID0gZ2V0VG9JbnQzMihj
dXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKKyAgICAgICAgICAgIE5vZGUqIG9wMiA9
IGdldFRvSW50MzIoY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZCk7CiAgICAgICAgICAg
ICBzZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwgYWRkVG9HcmFwaChCaXRBbmQs
IG9wMSwgb3AyKSk7CiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9iaXRhbmQpOwogICAgICAg
ICB9CiAKICAgICAgICAgY2FzZSBvcF9iaXRvcjogewotICAgICAgICAgICAgTm9kZUluZGV4IG9w
MSA9IGdldFRvSW50MzIoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7Ci0gICAgICAg
ICAgICBOb2RlSW5kZXggb3AyID0gZ2V0VG9JbnQzMihjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5v
cGVyYW5kKTsKKyAgICAgICAgICAgIE5vZGUqIG9wMSA9IGdldFRvSW50MzIoY3VycmVudEluc3Ry
dWN0aW9uWzJdLnUub3BlcmFuZCk7CisgICAgICAgICAgICBOb2RlKiBvcDIgPSBnZXRUb0ludDMy
KGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpOwogICAgICAgICAgICAgc2V0KGN1cnJl
bnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsIGFkZFRvR3JhcGgoQml0T3IsIG9wMSwgb3AyKSk7
CiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9iaXRvcik7CiAgICAgICAgIH0KIAogICAgICAg
ICBjYXNlIG9wX2JpdHhvcjogewotICAgICAgICAgICAgTm9kZUluZGV4IG9wMSA9IGdldFRvSW50
MzIoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7Ci0gICAgICAgICAgICBOb2RlSW5k
ZXggb3AyID0gZ2V0VG9JbnQzMihjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKTsKKyAg
ICAgICAgICAgIE5vZGUqIG9wMSA9IGdldFRvSW50MzIoY3VycmVudEluc3RydWN0aW9uWzJdLnUu
b3BlcmFuZCk7CisgICAgICAgICAgICBOb2RlKiBvcDIgPSBnZXRUb0ludDMyKGN1cnJlbnRJbnN0
cnVjdGlvblszXS51Lm9wZXJhbmQpOwogICAgICAgICAgICAgc2V0KGN1cnJlbnRJbnN0cnVjdGlv
blsxXS51Lm9wZXJhbmQsIGFkZFRvR3JhcGgoQml0WG9yLCBvcDEsIG9wMikpOwogICAgICAgICAg
ICAgTkVYVF9PUENPREUob3BfYml0eG9yKTsKICAgICAgICAgfQogCiAgICAgICAgIGNhc2Ugb3Bf
cnNoaWZ0OiB7Ci0gICAgICAgICAgICBOb2RlSW5kZXggb3AxID0gZ2V0VG9JbnQzMihjdXJyZW50
SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKLSAgICAgICAgICAgIE5vZGVJbmRleCBvcDIgPSBn
ZXRUb0ludDMyKGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpOwotICAgICAgICAgICAg
Tm9kZUluZGV4IHJlc3VsdDsKKyAgICAgICAgICAgIE5vZGUqIG9wMSA9IGdldFRvSW50MzIoY3Vy
cmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7CisgICAgICAgICAgICBOb2RlKiBvcDIgPSBn
ZXRUb0ludDMyKGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpOworICAgICAgICAgICAg
Tm9kZSogcmVzdWx0OwogICAgICAgICAgICAgLy8gT3B0aW1pemUgb3V0IHNoaWZ0cyBieSB6ZXJv
LgogICAgICAgICAgICAgaWYgKGlzSW50MzJDb25zdGFudChvcDIpICYmICEodmFsdWVPZkludDMy
Q29uc3RhbnQob3AyKSAmIDB4MWYpKQogICAgICAgICAgICAgICAgIHJlc3VsdCA9IG9wMTsKQEAg
LTIyNDksOSArMjIxMSw5IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWdu
ZWQKICAgICAgICAgfQogCiAgICAgICAgIGNhc2Ugb3BfbHNoaWZ0OiB7Ci0gICAgICAgICAgICBO
b2RlSW5kZXggb3AxID0gZ2V0VG9JbnQzMihjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5k
KTsKLSAgICAgICAgICAgIE5vZGVJbmRleCBvcDIgPSBnZXRUb0ludDMyKGN1cnJlbnRJbnN0cnVj
dGlvblszXS51Lm9wZXJhbmQpOwotICAgICAgICAgICAgTm9kZUluZGV4IHJlc3VsdDsKKyAgICAg
ICAgICAgIE5vZGUqIG9wMSA9IGdldFRvSW50MzIoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3Bl
cmFuZCk7CisgICAgICAgICAgICBOb2RlKiBvcDIgPSBnZXRUb0ludDMyKGN1cnJlbnRJbnN0cnVj
dGlvblszXS51Lm9wZXJhbmQpOworICAgICAgICAgICAgTm9kZSogcmVzdWx0OwogICAgICAgICAg
ICAgLy8gT3B0aW1pemUgb3V0IHNoaWZ0cyBieSB6ZXJvLgogICAgICAgICAgICAgaWYgKGlzSW50
MzJDb25zdGFudChvcDIpICYmICEodmFsdWVPZkludDMyQ29uc3RhbnQob3AyKSAmIDB4MWYpKQog
ICAgICAgICAgICAgICAgIHJlc3VsdCA9IG9wMTsKQEAgLTIyNjIsOSArMjIyNCw5IEBAIGJvb2wg
Qnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgfQogCiAgICAgICAg
IGNhc2Ugb3BfdXJzaGlmdDogewotICAgICAgICAgICAgTm9kZUluZGV4IG9wMSA9IGdldFRvSW50
MzIoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7Ci0gICAgICAgICAgICBOb2RlSW5k
ZXggb3AyID0gZ2V0VG9JbnQzMihjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKTsKLSAg
ICAgICAgICAgIE5vZGVJbmRleCByZXN1bHQ7CisgICAgICAgICAgICBOb2RlKiBvcDEgPSBnZXRU
b0ludDMyKGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOworICAgICAgICAgICAgTm9k
ZSogb3AyID0gZ2V0VG9JbnQzMihjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKTsKKyAg
ICAgICAgICAgIE5vZGUqIHJlc3VsdDsKICAgICAgICAgICAgIC8vIFRoZSByZXN1bHQgb2YgYSB6
ZXJvLWV4dGVuZGluZyByaWdodCBzaGlmdCBpcyB0cmVhdGVkIGFzIGFuIHVuc2lnbmVkIHZhbHVl
LgogICAgICAgICAgICAgLy8gVGhpcyBtZWFucyB0aGF0IGlmIHRoZSB0b3AgYml0IGlzIHNldCwg
dGhlIHJlc3VsdCBpcyBub3QgaW4gdGhlIGludDMyIHJhbmdlLAogICAgICAgICAgICAgLy8gYW5k
IGFzIHN1Y2ggbXVzdCBiZSBzdG9yZWQgYXMgYSBkb3VibGUuIElmIHRoZSBzaGlmdCBhbW91bnQg
aXMgYSBjb25zdGFudCwKQEAgLTIyOTIsNyArMjI1NCw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6
OnBhcnNlQmxvY2sodW5zaWduZWQKIAogICAgICAgICBjYXNlIG9wX3ByZV9pbmM6IHsKICAgICAg
ICAgICAgIHVuc2lnbmVkIHNyY0RzdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7
Ci0gICAgICAgICAgICBOb2RlSW5kZXggb3AgPSBnZXQoc3JjRHN0KTsKKyAgICAgICAgICAgIE5v
ZGUqIG9wID0gZ2V0KHNyY0RzdCk7CiAgICAgICAgICAgICBzZXQoc3JjRHN0LCBtYWtlU2FmZShh
ZGRUb0dyYXBoKEFyaXRoQWRkLCBvcCwgb25lKCkpKSk7CiAgICAgICAgICAgICBORVhUX09QQ09E
RShvcF9wcmVfaW5jKTsKICAgICAgICAgfQpAQCAtMjMwMSwxNCArMjI2MywxNCBAQCBib29sIEJ5
dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICB1bnNpZ25lZCBy
ZXN1bHQgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwogICAgICAgICAgICAgdW5z
aWduZWQgc3JjRHN0ID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKICAgICAgICAg
ICAgIEFTU0VSVChyZXN1bHQgIT0gc3JjRHN0KTsgLy8gUmVxdWlyZWQgZm9yIGFzc3VtcHRpb25z
IHdlIG1ha2UgZHVyaW5nIE9TUi4KLSAgICAgICAgICAgIE5vZGVJbmRleCBvcCA9IGdldChzcmNE
c3QpOworICAgICAgICAgICAgTm9kZSogb3AgPSBnZXQoc3JjRHN0KTsKICAgICAgICAgICAgIHNl
dFBhaXIocmVzdWx0LCBvcCwgc3JjRHN0LCBtYWtlU2FmZShhZGRUb0dyYXBoKEFyaXRoQWRkLCBv
cCwgb25lKCkpKSk7CiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9wb3N0X2luYyk7CiAgICAg
ICAgIH0KIAogICAgICAgICBjYXNlIG9wX3ByZV9kZWM6IHsKICAgICAgICAgICAgIHVuc2lnbmVk
IHNyY0RzdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBO
b2RlSW5kZXggb3AgPSBnZXQoc3JjRHN0KTsKKyAgICAgICAgICAgIE5vZGUqIG9wID0gZ2V0KHNy
Y0RzdCk7CiAgICAgICAgICAgICBzZXQoc3JjRHN0LCBtYWtlU2FmZShhZGRUb0dyYXBoKEFyaXRo
U3ViLCBvcCwgb25lKCkpKSk7CiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9wcmVfZGVjKTsK
ICAgICAgICAgfQpAQCAtMjMxNiw3ICsyMjc4LDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFy
c2VCbG9jayh1bnNpZ25lZAogICAgICAgICBjYXNlIG9wX3Bvc3RfZGVjOiB7CiAgICAgICAgICAg
ICB1bnNpZ25lZCByZXN1bHQgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwogICAg
ICAgICAgICAgdW5zaWduZWQgc3JjRHN0ID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFu
ZDsKLSAgICAgICAgICAgIE5vZGVJbmRleCBvcCA9IGdldChzcmNEc3QpOworICAgICAgICAgICAg
Tm9kZSogb3AgPSBnZXQoc3JjRHN0KTsKICAgICAgICAgICAgIHNldFBhaXIocmVzdWx0LCBvcCwg
c3JjRHN0LCBtYWtlU2FmZShhZGRUb0dyYXBoKEFyaXRoU3ViLCBvcCwgb25lKCkpKSk7CiAgICAg
ICAgICAgICBORVhUX09QQ09ERShvcF9wb3N0X2RlYyk7CiAgICAgICAgIH0KQEAgLTIzMjQsOSAr
MjI4Niw5IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAg
ICAgLy8gPT09IEFyaXRobWV0aWMgb3BlcmF0aW9ucyA9PT0KIAogICAgICAgICBjYXNlIG9wX2Fk
ZDogewotICAgICAgICAgICAgTm9kZUluZGV4IG9wMSA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25b
Ml0udS5vcGVyYW5kKTsKLSAgICAgICAgICAgIE5vZGVJbmRleCBvcDIgPSBnZXQoY3VycmVudElu
c3RydWN0aW9uWzNdLnUub3BlcmFuZCk7Ci0gICAgICAgICAgICBpZiAobV9ncmFwaFtvcDFdLmhh
c051bWJlclJlc3VsdCgpICYmIG1fZ3JhcGhbb3AyXS5oYXNOdW1iZXJSZXN1bHQoKSkKKyAgICAg
ICAgICAgIE5vZGUqIG9wMSA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsK
KyAgICAgICAgICAgIE5vZGUqIG9wMiA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVy
YW5kKTsKKyAgICAgICAgICAgIGlmIChvcDEtPmhhc051bWJlclJlc3VsdCgpICYmIG9wMi0+aGFz
TnVtYmVyUmVzdWx0KCkpCiAgICAgICAgICAgICAgICAgc2V0KGN1cnJlbnRJbnN0cnVjdGlvblsx
XS51Lm9wZXJhbmQsIG1ha2VTYWZlKGFkZFRvR3JhcGgoQXJpdGhBZGQsIG9wMSwgb3AyKSkpOwog
ICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIHNldChjdXJyZW50SW5zdHJ1Y3Rpb25b
MV0udS5vcGVyYW5kLCBtYWtlU2FmZShhZGRUb0dyYXBoKFZhbHVlQWRkLCBvcDEsIG9wMikpKTsK
QEAgLTIzMzQsMzYgKzIyOTYsMzYgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1
bnNpZ25lZAogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBvcF9zdWI6IHsKLSAgICAgICAgICAg
IE5vZGVJbmRleCBvcDEgPSBnZXQoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7Ci0g
ICAgICAgICAgICBOb2RlSW5kZXggb3AyID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9w
ZXJhbmQpOworICAgICAgICAgICAgTm9kZSogb3AxID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsy
XS51Lm9wZXJhbmQpOworICAgICAgICAgICAgTm9kZSogb3AyID0gZ2V0KGN1cnJlbnRJbnN0cnVj
dGlvblszXS51Lm9wZXJhbmQpOwogICAgICAgICAgICAgc2V0KGN1cnJlbnRJbnN0cnVjdGlvblsx
XS51Lm9wZXJhbmQsIG1ha2VTYWZlKGFkZFRvR3JhcGgoQXJpdGhTdWIsIG9wMSwgb3AyKSkpOwog
ICAgICAgICAgICAgTkVYVF9PUENPREUob3Bfc3ViKTsKICAgICAgICAgfQogCiAgICAgICAgIGNh
c2Ugb3BfbmVnYXRlOiB7Ci0gICAgICAgICAgICBOb2RlSW5kZXggb3AxID0gZ2V0KGN1cnJlbnRJ
bnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOworICAgICAgICAgICAgTm9kZSogb3AxID0gZ2V0KGN1
cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOwogICAgICAgICAgICAgc2V0KGN1cnJlbnRJ
bnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsIG1ha2VTYWZlKGFkZFRvR3JhcGgoQXJpdGhOZWdhdGUs
IG9wMSkpKTsKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX25lZ2F0ZSk7CiAgICAgICAgIH0K
IAogICAgICAgICBjYXNlIG9wX211bDogewogICAgICAgICAgICAgLy8gTXVsdGlwbHkgcmVxdWly
ZXMgdGhhdCB0aGUgaW5wdXRzIGFyZSBub3QgdHJ1bmNhdGVkLCB1bmZvcnR1bmF0ZWx5LgotICAg
ICAgICAgICAgTm9kZUluZGV4IG9wMSA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVy
YW5kKTsKLSAgICAgICAgICAgIE5vZGVJbmRleCBvcDIgPSBnZXQoY3VycmVudEluc3RydWN0aW9u
WzNdLnUub3BlcmFuZCk7CisgICAgICAgICAgICBOb2RlKiBvcDEgPSBnZXQoY3VycmVudEluc3Ry
dWN0aW9uWzJdLnUub3BlcmFuZCk7CisgICAgICAgICAgICBOb2RlKiBvcDIgPSBnZXQoY3VycmVu
dEluc3RydWN0aW9uWzNdLnUub3BlcmFuZCk7CiAgICAgICAgICAgICBzZXQoY3VycmVudEluc3Ry
dWN0aW9uWzFdLnUub3BlcmFuZCwgbWFrZVNhZmUoYWRkVG9HcmFwaChBcml0aE11bCwgb3AxLCBv
cDIpKSk7CiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9tdWwpOwogICAgICAgICB9CiAKICAg
ICAgICAgY2FzZSBvcF9tb2Q6IHsKLSAgICAgICAgICAgIE5vZGVJbmRleCBvcDEgPSBnZXQoY3Vy
cmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7Ci0gICAgICAgICAgICBOb2RlSW5kZXggb3Ay
ID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpOworICAgICAgICAgICAgTm9k
ZSogb3AxID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOworICAgICAgICAg
ICAgTm9kZSogb3AyID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpOwogICAg
ICAgICAgICAgc2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsIG1ha2VTYWZlKGFk
ZFRvR3JhcGgoQXJpdGhNb2QsIG9wMSwgb3AyKSkpOwogICAgICAgICAgICAgTkVYVF9PUENPREUo
b3BfbW9kKTsKICAgICAgICAgfQogCiAgICAgICAgIGNhc2Ugb3BfZGl2OiB7Ci0gICAgICAgICAg
ICBOb2RlSW5kZXggb3AxID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOwot
ICAgICAgICAgICAgTm9kZUluZGV4IG9wMiA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5v
cGVyYW5kKTsKKyAgICAgICAgICAgIE5vZGUqIG9wMSA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25b
Ml0udS5vcGVyYW5kKTsKKyAgICAgICAgICAgIE5vZGUqIG9wMiA9IGdldChjdXJyZW50SW5zdHJ1
Y3Rpb25bM10udS5vcGVyYW5kKTsKICAgICAgICAgICAgIHNldChjdXJyZW50SW5zdHJ1Y3Rpb25b
MV0udS5vcGVyYW5kLCBtYWtlRGl2U2FmZShhZGRUb0dyYXBoKEFyaXRoRGl2LCBvcDEsIG9wMikp
KTsKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2Rpdik7CiAgICAgICAgIH0KQEAgLTIzNzYs
NyArMjMzOCw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAg
ICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2RlYnVnKTsKICNlbmRpZgogICAgICAgICBjYXNlIG9w
X21vdjogewotICAgICAgICAgICAgTm9kZUluZGV4IG9wID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlv
blsyXS51Lm9wZXJhbmQpOworICAgICAgICAgICAgTm9kZSogb3AgPSBnZXQoY3VycmVudEluc3Ry
dWN0aW9uWzJdLnUub3BlcmFuZCk7CiAgICAgICAgICAgICBzZXQoY3VycmVudEluc3RydWN0aW9u
WzFdLnUub3BlcmFuZCwgb3ApOwogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfbW92KTsKICAg
ICAgICAgfQpAQCAtMjM4Niw1NiArMjM0OCw1NiBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJz
ZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9jaGVja19oYXNfaW5z
dGFuY2UpOwogCiAgICAgICAgIGNhc2Ugb3BfaW5zdGFuY2VvZjogewotICAgICAgICAgICAgTm9k
ZUluZGV4IHZhbHVlID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOwotICAg
ICAgICAgICAgTm9kZUluZGV4IHByb3RvdHlwZSA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bM10u
dS5vcGVyYW5kKTsKKyAgICAgICAgICAgIE5vZGUqIHZhbHVlID0gZ2V0KGN1cnJlbnRJbnN0cnVj
dGlvblsyXS51Lm9wZXJhbmQpOworICAgICAgICAgICAgTm9kZSogcHJvdG90eXBlID0gZ2V0KGN1
cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpOwogICAgICAgICAgICAgc2V0KGN1cnJlbnRJ
bnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsIGFkZFRvR3JhcGgoSW5zdGFuY2VPZiwgdmFsdWUsIHBy
b3RvdHlwZSkpOwogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfaW5zdGFuY2VvZik7CiAgICAg
ICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBjYXNlIG9wX2lzX3VuZGVmaW5lZDogewotICAg
ICAgICAgICAgTm9kZUluZGV4IHZhbHVlID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9w
ZXJhbmQpOworICAgICAgICAgICAgTm9kZSogdmFsdWUgPSBnZXQoY3VycmVudEluc3RydWN0aW9u
WzJdLnUub3BlcmFuZCk7CiAgICAgICAgICAgICBzZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUu
b3BlcmFuZCwgYWRkVG9HcmFwaChJc1VuZGVmaW5lZCwgdmFsdWUpKTsKICAgICAgICAgICAgIE5F
WFRfT1BDT0RFKG9wX2lzX3VuZGVmaW5lZCk7CiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIG9w
X2lzX2Jvb2xlYW46IHsKLSAgICAgICAgICAgIE5vZGVJbmRleCB2YWx1ZSA9IGdldChjdXJyZW50
SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKKyAgICAgICAgICAgIE5vZGUqIHZhbHVlID0gZ2V0
KGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOwogICAgICAgICAgICAgc2V0KGN1cnJl
bnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsIGFkZFRvR3JhcGgoSXNCb29sZWFuLCB2YWx1ZSkp
OwogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfaXNfYm9vbGVhbik7CiAgICAgICAgIH0KIAog
ICAgICAgICBjYXNlIG9wX2lzX251bWJlcjogewotICAgICAgICAgICAgTm9kZUluZGV4IHZhbHVl
ID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOworICAgICAgICAgICAgTm9k
ZSogdmFsdWUgPSBnZXQoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7CiAgICAgICAg
ICAgICBzZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwgYWRkVG9HcmFwaChJc051
bWJlciwgdmFsdWUpKTsKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2lzX251bWJlcik7CiAg
ICAgICAgIH0KIAogICAgICAgICBjYXNlIG9wX2lzX3N0cmluZzogewotICAgICAgICAgICAgTm9k
ZUluZGV4IHZhbHVlID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOworICAg
ICAgICAgICAgTm9kZSogdmFsdWUgPSBnZXQoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFu
ZCk7CiAgICAgICAgICAgICBzZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwgYWRk
VG9HcmFwaChJc1N0cmluZywgdmFsdWUpKTsKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2lz
X3N0cmluZyk7CiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIG9wX2lzX29iamVjdDogewotICAg
ICAgICAgICAgTm9kZUluZGV4IHZhbHVlID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9w
ZXJhbmQpOworICAgICAgICAgICAgTm9kZSogdmFsdWUgPSBnZXQoY3VycmVudEluc3RydWN0aW9u
WzJdLnUub3BlcmFuZCk7CiAgICAgICAgICAgICBzZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUu
b3BlcmFuZCwgYWRkVG9HcmFwaChJc09iamVjdCwgdmFsdWUpKTsKICAgICAgICAgICAgIE5FWFRf
T1BDT0RFKG9wX2lzX29iamVjdCk7CiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIG9wX2lzX2Z1
bmN0aW9uOiB7Ci0gICAgICAgICAgICBOb2RlSW5kZXggdmFsdWUgPSBnZXQoY3VycmVudEluc3Ry
dWN0aW9uWzJdLnUub3BlcmFuZCk7CisgICAgICAgICAgICBOb2RlKiB2YWx1ZSA9IGdldChjdXJy
ZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKICAgICAgICAgICAgIHNldChjdXJyZW50SW5z
dHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCBhZGRUb0dyYXBoKElzRnVuY3Rpb24sIHZhbHVlKSk7CiAg
ICAgICAgICAgICBORVhUX09QQ09ERShvcF9pc19mdW5jdGlvbik7CiAgICAgICAgIH0KIAogICAg
ICAgICBjYXNlIG9wX25vdDogewotICAgICAgICAgICAgTm9kZUluZGV4IHZhbHVlID0gZ2V0KGN1
cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOworICAgICAgICAgICAgTm9kZSogdmFsdWUg
PSBnZXQoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7CiAgICAgICAgICAgICBzZXQo
Y3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwgYWRkVG9HcmFwaChMb2dpY2FsTm90LCB2
YWx1ZSkpOwogICAgICAgICAgICAgTkVYVF9PUENPREUob3Bfbm90KTsKICAgICAgICAgfQogICAg
ICAgICAgICAgCiAgICAgICAgIGNhc2Ugb3BfdG9fcHJpbWl0aXZlOiB7Ci0gICAgICAgICAgICBO
b2RlSW5kZXggdmFsdWUgPSBnZXQoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7Cisg
ICAgICAgICAgICBOb2RlKiB2YWx1ZSA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVy
YW5kKTsKICAgICAgICAgICAgIHNldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCBh
ZGRUb0dyYXBoKFRvUHJpbWl0aXZlLCB2YWx1ZSkpOwogICAgICAgICAgICAgTkVYVF9PUENPREUo
b3BfdG9fcHJpbWl0aXZlKTsKICAgICAgICAgfQpAQCAtMjQ1MCw2OSArMjQxMiw2OSBAQCBib29s
IEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgIH0KIAogICAgICAg
ICBjYXNlIG9wX2xlc3M6IHsKLSAgICAgICAgICAgIE5vZGVJbmRleCBvcDEgPSBnZXQoY3VycmVu
dEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7Ci0gICAgICAgICAgICBOb2RlSW5kZXggb3AyID0g
Z2V0KGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpOworICAgICAgICAgICAgTm9kZSog
b3AxID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOworICAgICAgICAgICAg
Tm9kZSogb3AyID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpOwogICAgICAg
ICAgICAgc2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsIGFkZFRvR3JhcGgoQ29t
cGFyZUxlc3MsIG9wMSwgb3AyKSk7CiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9sZXNzKTsK
ICAgICAgICAgfQogCiAgICAgICAgIGNhc2Ugb3BfbGVzc2VxOiB7Ci0gICAgICAgICAgICBOb2Rl
SW5kZXggb3AxID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOwotICAgICAg
ICAgICAgTm9kZUluZGV4IG9wMiA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5k
KTsKKyAgICAgICAgICAgIE5vZGUqIG9wMSA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5v
cGVyYW5kKTsKKyAgICAgICAgICAgIE5vZGUqIG9wMiA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25b
M10udS5vcGVyYW5kKTsKICAgICAgICAgICAgIHNldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5v
cGVyYW5kLCBhZGRUb0dyYXBoKENvbXBhcmVMZXNzRXEsIG9wMSwgb3AyKSk7CiAgICAgICAgICAg
ICBORVhUX09QQ09ERShvcF9sZXNzZXEpOwogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBvcF9n
cmVhdGVyOiB7Ci0gICAgICAgICAgICBOb2RlSW5kZXggb3AxID0gZ2V0KGN1cnJlbnRJbnN0cnVj
dGlvblsyXS51Lm9wZXJhbmQpOwotICAgICAgICAgICAgTm9kZUluZGV4IG9wMiA9IGdldChjdXJy
ZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKTsKKyAgICAgICAgICAgIE5vZGUqIG9wMSA9IGdl
dChjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKKyAgICAgICAgICAgIE5vZGUqIG9w
MiA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKTsKICAgICAgICAgICAgIHNl
dChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCBhZGRUb0dyYXBoKENvbXBhcmVHcmVh
dGVyLCBvcDEsIG9wMikpOwogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfZ3JlYXRlcik7CiAg
ICAgICAgIH0KIAogICAgICAgICBjYXNlIG9wX2dyZWF0ZXJlcTogewotICAgICAgICAgICAgTm9k
ZUluZGV4IG9wMSA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKLSAgICAg
ICAgICAgIE5vZGVJbmRleCBvcDIgPSBnZXQoY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFu
ZCk7CisgICAgICAgICAgICBOb2RlKiBvcDEgPSBnZXQoY3VycmVudEluc3RydWN0aW9uWzJdLnUu
b3BlcmFuZCk7CisgICAgICAgICAgICBOb2RlKiBvcDIgPSBnZXQoY3VycmVudEluc3RydWN0aW9u
WzNdLnUub3BlcmFuZCk7CiAgICAgICAgICAgICBzZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUu
b3BlcmFuZCwgYWRkVG9HcmFwaChDb21wYXJlR3JlYXRlckVxLCBvcDEsIG9wMikpOwogICAgICAg
ICAgICAgTkVYVF9PUENPREUob3BfZ3JlYXRlcmVxKTsKICAgICAgICAgfQogCiAgICAgICAgIGNh
c2Ugb3BfZXE6IHsKLSAgICAgICAgICAgIE5vZGVJbmRleCBvcDEgPSBnZXQoY3VycmVudEluc3Ry
dWN0aW9uWzJdLnUub3BlcmFuZCk7Ci0gICAgICAgICAgICBOb2RlSW5kZXggb3AyID0gZ2V0KGN1
cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpOworICAgICAgICAgICAgTm9kZSogb3AxID0g
Z2V0KGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOworICAgICAgICAgICAgTm9kZSog
b3AyID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpOwogICAgICAgICAgICAg
c2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsIGFkZFRvR3JhcGgoQ29tcGFyZUVx
LCBvcDEsIG9wMikpOwogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfZXEpOwogICAgICAgICB9
CiAKICAgICAgICAgY2FzZSBvcF9lcV9udWxsOiB7Ci0gICAgICAgICAgICBOb2RlSW5kZXggdmFs
dWUgPSBnZXQoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7CisgICAgICAgICAgICBO
b2RlKiB2YWx1ZSA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKICAgICAg
ICAgICAgIHNldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCBhZGRUb0dyYXBoKENv
bXBhcmVFcSwgdmFsdWUsIGNvbnN0YW50TnVsbCgpKSk7CiAgICAgICAgICAgICBORVhUX09QQ09E
RShvcF9lcV9udWxsKTsKICAgICAgICAgfQogCiAgICAgICAgIGNhc2Ugb3Bfc3RyaWN0ZXE6IHsK
LSAgICAgICAgICAgIE5vZGVJbmRleCBvcDEgPSBnZXQoY3VycmVudEluc3RydWN0aW9uWzJdLnUu
b3BlcmFuZCk7Ci0gICAgICAgICAgICBOb2RlSW5kZXggb3AyID0gZ2V0KGN1cnJlbnRJbnN0cnVj
dGlvblszXS51Lm9wZXJhbmQpOworICAgICAgICAgICAgTm9kZSogb3AxID0gZ2V0KGN1cnJlbnRJ
bnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOworICAgICAgICAgICAgTm9kZSogb3AyID0gZ2V0KGN1
cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpOwogICAgICAgICAgICAgc2V0KGN1cnJlbnRJ
bnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsIGFkZFRvR3JhcGgoQ29tcGFyZVN0cmljdEVxLCBvcDEs
IG9wMikpOwogICAgICAgICAgICAgTkVYVF9PUENPREUob3Bfc3RyaWN0ZXEpOwogICAgICAgICB9
CiAKICAgICAgICAgY2FzZSBvcF9uZXE6IHsKLSAgICAgICAgICAgIE5vZGVJbmRleCBvcDEgPSBn
ZXQoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7Ci0gICAgICAgICAgICBOb2RlSW5k
ZXggb3AyID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpOworICAgICAgICAg
ICAgTm9kZSogb3AxID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOworICAg
ICAgICAgICAgTm9kZSogb3AyID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQp
OwogICAgICAgICAgICAgc2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsIGFkZFRv
R3JhcGgoTG9naWNhbE5vdCwgYWRkVG9HcmFwaChDb21wYXJlRXEsIG9wMSwgb3AyKSkpOwogICAg
ICAgICAgICAgTkVYVF9PUENPREUob3BfbmVxKTsKICAgICAgICAgfQogCiAgICAgICAgIGNhc2Ug
b3BfbmVxX251bGw6IHsKLSAgICAgICAgICAgIE5vZGVJbmRleCB2YWx1ZSA9IGdldChjdXJyZW50
SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKKyAgICAgICAgICAgIE5vZGUqIHZhbHVlID0gZ2V0
KGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOwogICAgICAgICAgICAgc2V0KGN1cnJl
bnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsIGFkZFRvR3JhcGgoTG9naWNhbE5vdCwgYWRkVG9H
cmFwaChDb21wYXJlRXEsIHZhbHVlLCBjb25zdGFudE51bGwoKSkpKTsKICAgICAgICAgICAgIE5F
WFRfT1BDT0RFKG9wX25lcV9udWxsKTsKICAgICAgICAgfQogCiAgICAgICAgIGNhc2Ugb3BfbnN0
cmljdGVxOiB7Ci0gICAgICAgICAgICBOb2RlSW5kZXggb3AxID0gZ2V0KGN1cnJlbnRJbnN0cnVj
dGlvblsyXS51Lm9wZXJhbmQpOwotICAgICAgICAgICAgTm9kZUluZGV4IG9wMiA9IGdldChjdXJy
ZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKTsKKyAgICAgICAgICAgIE5vZGUqIG9wMSA9IGdl
dChjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKKyAgICAgICAgICAgIE5vZGUqIG9w
MiA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKTsKICAgICAgICAgICAgIHNl
dChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCBhZGRUb0dyYXBoKExvZ2ljYWxOb3Qs
IGFkZFRvR3JhcGgoQ29tcGFyZVN0cmljdEVxLCBvcDEsIG9wMikpKTsKICAgICAgICAgICAgIE5F
WFRfT1BDT0RFKG9wX25zdHJpY3RlcSk7CiAgICAgICAgIH0KQEAgLTI1MjIsMjcgKzI0ODQsMjcg
QEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICBjYXNl
IG9wX2dldF9ieV92YWw6IHsKICAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24g
PSBnZXRQcmVkaWN0aW9uKCk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIE5vZGVJbmRleCBi
YXNlID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOworICAgICAgICAgICAg
Tm9kZSogYmFzZSA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKICAgICAg
ICAgICAgIEFycmF5TW9kZSBhcnJheU1vZGUgPSBnZXRBcnJheU1vZGVBbmRFbWl0Q2hlY2tzKGN1
cnJlbnRJbnN0cnVjdGlvbls0XS51LmFycmF5UHJvZmlsZSwgQXJyYXk6OlJlYWQsIGJhc2UpOwot
ICAgICAgICAgICAgTm9kZUluZGV4IHByb3BlcnR5ID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsz
XS51Lm9wZXJhbmQpOwotICAgICAgICAgICAgTm9kZUluZGV4IGdldEJ5VmFsID0gYWRkVG9HcmFw
aChHZXRCeVZhbCwgT3BJbmZvKGFycmF5TW9kZS5hc1dvcmQoKSksIE9wSW5mbyhwcmVkaWN0aW9u
KSwgYmFzZSwgcHJvcGVydHkpOworICAgICAgICAgICAgTm9kZSogcHJvcGVydHkgPSBnZXQoY3Vy
cmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZCk7CisgICAgICAgICAgICBOb2RlKiBnZXRCeVZh
bCA9IGFkZFRvR3JhcGgoR2V0QnlWYWwsIE9wSW5mbyhhcnJheU1vZGUuYXNXb3JkKCkpLCBPcElu
Zm8ocHJlZGljdGlvbiksIGJhc2UsIHByb3BlcnR5KTsKICAgICAgICAgICAgIHNldChjdXJyZW50
SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCBnZXRCeVZhbCk7CiAKICAgICAgICAgICAgIE5FWFRf
T1BDT0RFKG9wX2dldF9ieV92YWwpOwogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBvcF9wdXRf
YnlfdmFsOiB7Ci0gICAgICAgICAgICBOb2RlSW5kZXggYmFzZSA9IGdldChjdXJyZW50SW5zdHJ1
Y3Rpb25bMV0udS5vcGVyYW5kKTsKKyAgICAgICAgICAgIE5vZGUqIGJhc2UgPSBnZXQoY3VycmVu
dEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCk7CiAKICAgICAgICAgICAgIEFycmF5TW9kZSBhcnJh
eU1vZGUgPSBnZXRBcnJheU1vZGVBbmRFbWl0Q2hlY2tzKGN1cnJlbnRJbnN0cnVjdGlvbls0XS51
LmFycmF5UHJvZmlsZSwgQXJyYXk6OldyaXRlLCBiYXNlKTsKICAgICAgICAgICAgIAotICAgICAg
ICAgICAgTm9kZUluZGV4IHByb3BlcnR5ID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9w
ZXJhbmQpOwotICAgICAgICAgICAgTm9kZUluZGV4IHZhbHVlID0gZ2V0KGN1cnJlbnRJbnN0cnVj
dGlvblszXS51Lm9wZXJhbmQpOworICAgICAgICAgICAgTm9kZSogcHJvcGVydHkgPSBnZXQoY3Vy
cmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7CisgICAgICAgICAgICBOb2RlKiB2YWx1ZSA9
IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKTsKICAgICAgICAgICAgIAogICAg
ICAgICAgICAgYWRkVmFyQXJnQ2hpbGQoYmFzZSk7CiAgICAgICAgICAgICBhZGRWYXJBcmdDaGls
ZChwcm9wZXJ0eSk7CiAgICAgICAgICAgICBhZGRWYXJBcmdDaGlsZCh2YWx1ZSk7Ci0gICAgICAg
ICAgICBhZGRWYXJBcmdDaGlsZChOb05vZGUpOyAvLyBMZWF2ZSByb29tIGZvciBwcm9wZXJ0eSBz
dG9yYWdlLgorICAgICAgICAgICAgYWRkVmFyQXJnQ2hpbGQoMCk7IC8vIExlYXZlIHJvb20gZm9y
IHByb3BlcnR5IHN0b3JhZ2UuCiAgICAgICAgICAgICBhZGRUb0dyYXBoKE5vZGU6OlZhckFyZywg
UHV0QnlWYWwsIE9wSW5mbyhhcnJheU1vZGUuYXNXb3JkKCkpLCBPcEluZm8oMCkpOwogCiAgICAg
ICAgICAgICBORVhUX09QQ09ERShvcF9wdXRfYnlfdmFsKTsKQEAgLTI1NTMsNyArMjUxNSw3IEBA
IGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgY2FzZSBv
cF9nZXRfYXJyYXlfbGVuZ3RoOiB7CiAgICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0
aW9uID0gZ2V0UHJlZGljdGlvbigpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBOb2RlSW5k
ZXggYmFzZSA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKKyAgICAgICAg
ICAgIE5vZGUqIGJhc2UgPSBnZXQoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7CiAg
ICAgICAgICAgICB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyID0gbV9pbmxpbmVTdGFja1RvcC0+
bV9pZGVudGlmaWVyUmVtYXBbY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZF07CiAgICAg
ICAgICAgICAKICAgICAgICAgICAgIElkZW50aWZpZXIgaWRlbnRpZmllciA9IG1fY29kZUJsb2Nr
LT5pZGVudGlmaWVyKGlkZW50aWZpZXJOdW1iZXIpOwpAQCAtMjU3MSw4ICsyNTMzLDggQEAgYm9v
bCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICBjYXNlIG9wX3B1
dF9ieV9pZF90cmFuc2l0aW9uX25vcm1hbDoKICAgICAgICAgY2FzZSBvcF9wdXRfYnlfaWRfdHJh
bnNpdGlvbl9kaXJlY3Rfb3V0X29mX2xpbmU6CiAgICAgICAgIGNhc2Ugb3BfcHV0X2J5X2lkX3Ry
YW5zaXRpb25fbm9ybWFsX291dF9vZl9saW5lOiB7Ci0gICAgICAgICAgICBOb2RlSW5kZXggdmFs
dWUgPSBnZXQoY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZCk7Ci0gICAgICAgICAgICBO
b2RlSW5kZXggYmFzZSA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKTsKKyAg
ICAgICAgICAgIE5vZGUqIHZhbHVlID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJh
bmQpOworICAgICAgICAgICAgTm9kZSogYmFzZSA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0u
dS5vcGVyYW5kKTsKICAgICAgICAgICAgIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIgPSBtX2lu
bGluZVN0YWNrVG9wLT5tX2lkZW50aWZpZXJSZW1hcFtjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5v
cGVyYW5kXTsKICAgICAgICAgICAgIGJvb2wgZGlyZWN0ID0gY3VycmVudEluc3RydWN0aW9uWzhd
LnUub3BlcmFuZDsKIApAQCAtMjU4Nyw3ICsyNTQ5LDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6
cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAoIWhhc0V4
aXRTaXRlICYmIHB1dEJ5SWRTdGF0dXMuaXNTaW1wbGVSZXBsYWNlKCkpIHsKICAgICAgICAgICAg
ICAgICBhZGRUb0dyYXBoKENoZWNrU3RydWN0dXJlLCBPcEluZm8obV9ncmFwaC5hZGRTdHJ1Y3R1
cmVTZXQocHV0QnlJZFN0YXR1cy5vbGRTdHJ1Y3R1cmUoKSkpLCBiYXNlKTsKLSAgICAgICAgICAg
ICAgICBOb2RlSW5kZXggcHJvcGVydHlTdG9yYWdlOworICAgICAgICAgICAgICAgIE5vZGUqIHBy
b3BlcnR5U3RvcmFnZTsKICAgICAgICAgICAgICAgICBpZiAoaXNJbmxpbmVPZmZzZXQocHV0QnlJ
ZFN0YXR1cy5vZmZzZXQoKSkpCiAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5U3RvcmFnZSA9
IGJhc2U7CiAgICAgICAgICAgICAgICAgZWxzZQpAQCAtMjYyMiw3ICsyNTg0LDcgQEAgYm9vbCBC
eXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgICBBU1NFUlQocHV0QnlJZFN0YXR1cy5vbGRTdHJ1Y3R1cmUoKS0+dHJhbnNp
dGlvbldhdGNocG9pbnRTZXRIYXNCZWVuSW52YWxpZGF0ZWQoKSk7CiAgICAgICAgICAgICAgICAg
Ci0gICAgICAgICAgICAgICAgTm9kZUluZGV4IHByb3BlcnR5U3RvcmFnZTsKKyAgICAgICAgICAg
ICAgICBOb2RlKiBwcm9wZXJ0eVN0b3JhZ2U7CiAgICAgICAgICAgICAgICAgU3RydWN0dXJlVHJh
bnNpdGlvbkRhdGEqIHRyYW5zaXRpb25EYXRhID0KICAgICAgICAgICAgICAgICAgICAgbV9ncmFw
aC5hZGRTdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSgKICAgICAgICAgICAgICAgICAgICAgICAgIFN0
cnVjdHVyZVRyYW5zaXRpb25EYXRhKApAQCAtMjY3OSw3ICsyNjQxLDcgQEAgYm9vbCBCeXRlQ29k
ZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBv
cF9pbml0X2dsb2JhbF9jb25zdDogewotICAgICAgICAgICAgTm9kZUluZGV4IHZhbHVlID0gZ2V0
KGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOworICAgICAgICAgICAgTm9kZSogdmFs
dWUgPSBnZXQoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7CiAgICAgICAgICAgICBh
ZGRUb0dyYXBoKAogICAgICAgICAgICAgICAgIFB1dEdsb2JhbFZhciwKICAgICAgICAgICAgICAg
ICBPcEluZm8obV9pbmxpbmVTdGFja1RvcC0+bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT5h
c3NlcnRSZWdpc3RlcklzSW5UaGlzT2JqZWN0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51LnJlZ2lz
dGVyUG9pbnRlcikpLApAQCAtMjY4OCw3ICsyNjUwLDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6
cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBvcF9pbml0X2ds
b2JhbF9jb25zdF9jaGVjazogewotICAgICAgICAgICAgTm9kZUluZGV4IHZhbHVlID0gZ2V0KGN1
cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOworICAgICAgICAgICAgTm9kZSogdmFsdWUg
PSBnZXQoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7CiAgICAgICAgICAgICBDb2Rl
QmxvY2sqIGNvZGVCbG9jayA9IG1faW5saW5lU3RhY2tUb3AtPm1fY29kZUJsb2NrOwogICAgICAg
ICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGNvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCk7CiAgICAgICAgICAgICB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyID0gbV9pbmxpbmVT
dGFja1RvcC0+bV9pZGVudGlmaWVyUmVtYXBbY3VycmVudEluc3RydWN0aW9uWzRdLnUub3BlcmFu
ZF07CkBAIC0yNzI2LDE1MiArMjY4OCwxNTIgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VC
bG9jayh1bnNpZ25lZAogCiAgICAgICAgIGNhc2Ugb3BfanRydWU6IHsKICAgICAgICAgICAgIHVu
c2lnbmVkIHJlbGF0aXZlT2Zmc2V0ID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsK
LSAgICAgICAgICAgIE5vZGVJbmRleCBjb25kaXRpb24gPSBnZXQoY3VycmVudEluc3RydWN0aW9u
WzFdLnUub3BlcmFuZCk7CisgICAgICAgICAgICBOb2RlKiBjb25kaXRpb24gPSBnZXQoY3VycmVu
dEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCk7CiAgICAgICAgICAgICBhZGRUb0dyYXBoKEJyYW5j
aCwgT3BJbmZvKG1fY3VycmVudEluZGV4ICsgcmVsYXRpdmVPZmZzZXQpLCBPcEluZm8obV9jdXJy
ZW50SW5kZXggKyBPUENPREVfTEVOR1RIKG9wX2p0cnVlKSksIGNvbmRpdGlvbik7CiAgICAgICAg
ICAgICBMQVNUX09QQ09ERShvcF9qdHJ1ZSk7CiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIG9w
X2pmYWxzZTogewogICAgICAgICAgICAgdW5zaWduZWQgcmVsYXRpdmVPZmZzZXQgPSBjdXJyZW50
SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwotICAgICAgICAgICAgTm9kZUluZGV4IGNvbmRpdGlv
biA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKTsKKyAgICAgICAgICAgIE5v
ZGUqIGNvbmRpdGlvbiA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKTsKICAg
ICAgICAgICAgIGFkZFRvR3JhcGgoQnJhbmNoLCBPcEluZm8obV9jdXJyZW50SW5kZXggKyBPUENP
REVfTEVOR1RIKG9wX2pmYWxzZSkpLCBPcEluZm8obV9jdXJyZW50SW5kZXggKyByZWxhdGl2ZU9m
ZnNldCksIGNvbmRpdGlvbik7CiAgICAgICAgICAgICBMQVNUX09QQ09ERShvcF9qZmFsc2UpOwog
ICAgICAgICB9CiAKICAgICAgICAgY2FzZSBvcF9sb29wX2lmX3RydWU6IHsKICAgICAgICAgICAg
IHVuc2lnbmVkIHJlbGF0aXZlT2Zmc2V0ID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFu
ZDsKLSAgICAgICAgICAgIE5vZGVJbmRleCBjb25kaXRpb24gPSBnZXQoY3VycmVudEluc3RydWN0
aW9uWzFdLnUub3BlcmFuZCk7CisgICAgICAgICAgICBOb2RlKiBjb25kaXRpb24gPSBnZXQoY3Vy
cmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCk7CiAgICAgICAgICAgICBhZGRUb0dyYXBoKEJy
YW5jaCwgT3BJbmZvKG1fY3VycmVudEluZGV4ICsgcmVsYXRpdmVPZmZzZXQpLCBPcEluZm8obV9j
dXJyZW50SW5kZXggKyBPUENPREVfTEVOR1RIKG9wX2xvb3BfaWZfdHJ1ZSkpLCBjb25kaXRpb24p
OwogICAgICAgICAgICAgTEFTVF9PUENPREUob3BfbG9vcF9pZl90cnVlKTsKICAgICAgICAgfQog
CiAgICAgICAgIGNhc2Ugb3BfbG9vcF9pZl9mYWxzZTogewogICAgICAgICAgICAgdW5zaWduZWQg
cmVsYXRpdmVPZmZzZXQgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwotICAgICAg
ICAgICAgTm9kZUluZGV4IGNvbmRpdGlvbiA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5v
cGVyYW5kKTsKKyAgICAgICAgICAgIE5vZGUqIGNvbmRpdGlvbiA9IGdldChjdXJyZW50SW5zdHJ1
Y3Rpb25bMV0udS5vcGVyYW5kKTsKICAgICAgICAgICAgIGFkZFRvR3JhcGgoQnJhbmNoLCBPcElu
Zm8obV9jdXJyZW50SW5kZXggKyBPUENPREVfTEVOR1RIKG9wX2xvb3BfaWZfZmFsc2UpKSwgT3BJ
bmZvKG1fY3VycmVudEluZGV4ICsgcmVsYXRpdmVPZmZzZXQpLCBjb25kaXRpb24pOwogICAgICAg
ICAgICAgTEFTVF9PUENPREUob3BfbG9vcF9pZl9mYWxzZSk7CiAgICAgICAgIH0KIAogICAgICAg
ICBjYXNlIG9wX2plcV9udWxsOiB7CiAgICAgICAgICAgICB1bnNpZ25lZCByZWxhdGl2ZU9mZnNl
dCA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBOb2RlSW5k
ZXggdmFsdWUgPSBnZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCk7Ci0gICAgICAg
ICAgICBOb2RlSW5kZXggY29uZGl0aW9uID0gYWRkVG9HcmFwaChDb21wYXJlRXEsIHZhbHVlLCBj
b25zdGFudE51bGwoKSk7CisgICAgICAgICAgICBOb2RlKiB2YWx1ZSA9IGdldChjdXJyZW50SW5z
dHJ1Y3Rpb25bMV0udS5vcGVyYW5kKTsKKyAgICAgICAgICAgIE5vZGUqIGNvbmRpdGlvbiA9IGFk
ZFRvR3JhcGgoQ29tcGFyZUVxLCB2YWx1ZSwgY29uc3RhbnROdWxsKCkpOwogICAgICAgICAgICAg
YWRkVG9HcmFwaChCcmFuY2gsIE9wSW5mbyhtX2N1cnJlbnRJbmRleCArIHJlbGF0aXZlT2Zmc2V0
KSwgT3BJbmZvKG1fY3VycmVudEluZGV4ICsgT1BDT0RFX0xFTkdUSChvcF9qZXFfbnVsbCkpLCBj
b25kaXRpb24pOwogICAgICAgICAgICAgTEFTVF9PUENPREUob3BfamVxX251bGwpOwogICAgICAg
ICB9CiAKICAgICAgICAgY2FzZSBvcF9qbmVxX251bGw6IHsKICAgICAgICAgICAgIHVuc2lnbmVk
IHJlbGF0aXZlT2Zmc2V0ID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKLSAgICAg
ICAgICAgIE5vZGVJbmRleCB2YWx1ZSA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVy
YW5kKTsKLSAgICAgICAgICAgIE5vZGVJbmRleCBjb25kaXRpb24gPSBhZGRUb0dyYXBoKENvbXBh
cmVFcSwgdmFsdWUsIGNvbnN0YW50TnVsbCgpKTsKKyAgICAgICAgICAgIE5vZGUqIHZhbHVlID0g
Z2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpOworICAgICAgICAgICAgTm9kZSog
Y29uZGl0aW9uID0gYWRkVG9HcmFwaChDb21wYXJlRXEsIHZhbHVlLCBjb25zdGFudE51bGwoKSk7
CiAgICAgICAgICAgICBhZGRUb0dyYXBoKEJyYW5jaCwgT3BJbmZvKG1fY3VycmVudEluZGV4ICsg
T1BDT0RFX0xFTkdUSChvcF9qbmVxX251bGwpKSwgT3BJbmZvKG1fY3VycmVudEluZGV4ICsgcmVs
YXRpdmVPZmZzZXQpLCBjb25kaXRpb24pOwogICAgICAgICAgICAgTEFTVF9PUENPREUob3Bfam5l
cV9udWxsKTsKICAgICAgICAgfQogCiAgICAgICAgIGNhc2Ugb3Bfamxlc3M6IHsKICAgICAgICAg
ICAgIHVuc2lnbmVkIHJlbGF0aXZlT2Zmc2V0ID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3Bl
cmFuZDsKLSAgICAgICAgICAgIE5vZGVJbmRleCBvcDEgPSBnZXQoY3VycmVudEluc3RydWN0aW9u
WzFdLnUub3BlcmFuZCk7Ci0gICAgICAgICAgICBOb2RlSW5kZXggb3AyID0gZ2V0KGN1cnJlbnRJ
bnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOwotICAgICAgICAgICAgTm9kZUluZGV4IGNvbmRpdGlv
biA9IGFkZFRvR3JhcGgoQ29tcGFyZUxlc3MsIG9wMSwgb3AyKTsKKyAgICAgICAgICAgIE5vZGUq
IG9wMSA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKTsKKyAgICAgICAgICAg
IE5vZGUqIG9wMiA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKKyAgICAg
ICAgICAgIE5vZGUqIGNvbmRpdGlvbiA9IGFkZFRvR3JhcGgoQ29tcGFyZUxlc3MsIG9wMSwgb3Ay
KTsKICAgICAgICAgICAgIGFkZFRvR3JhcGgoQnJhbmNoLCBPcEluZm8obV9jdXJyZW50SW5kZXgg
KyByZWxhdGl2ZU9mZnNldCksIE9wSW5mbyhtX2N1cnJlbnRJbmRleCArIE9QQ09ERV9MRU5HVEgo
b3Bfamxlc3MpKSwgY29uZGl0aW9uKTsKICAgICAgICAgICAgIExBU1RfT1BDT0RFKG9wX2psZXNz
KTsKICAgICAgICAgfQogCiAgICAgICAgIGNhc2Ugb3Bfamxlc3NlcTogewogICAgICAgICAgICAg
dW5zaWduZWQgcmVsYXRpdmVPZmZzZXQgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5k
OwotICAgICAgICAgICAgTm9kZUluZGV4IG9wMSA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0u
dS5vcGVyYW5kKTsKLSAgICAgICAgICAgIE5vZGVJbmRleCBvcDIgPSBnZXQoY3VycmVudEluc3Ry
dWN0aW9uWzJdLnUub3BlcmFuZCk7Ci0gICAgICAgICAgICBOb2RlSW5kZXggY29uZGl0aW9uID0g
YWRkVG9HcmFwaChDb21wYXJlTGVzc0VxLCBvcDEsIG9wMik7CisgICAgICAgICAgICBOb2RlKiBv
cDEgPSBnZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCk7CisgICAgICAgICAgICBO
b2RlKiBvcDIgPSBnZXQoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7CisgICAgICAg
ICAgICBOb2RlKiBjb25kaXRpb24gPSBhZGRUb0dyYXBoKENvbXBhcmVMZXNzRXEsIG9wMSwgb3Ay
KTsKICAgICAgICAgICAgIGFkZFRvR3JhcGgoQnJhbmNoLCBPcEluZm8obV9jdXJyZW50SW5kZXgg
KyByZWxhdGl2ZU9mZnNldCksIE9wSW5mbyhtX2N1cnJlbnRJbmRleCArIE9QQ09ERV9MRU5HVEgo
b3Bfamxlc3NlcSkpLCBjb25kaXRpb24pOwogICAgICAgICAgICAgTEFTVF9PUENPREUob3Bfamxl
c3NlcSk7CiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIG9wX2pncmVhdGVyOiB7CiAgICAgICAg
ICAgICB1bnNpZ25lZCByZWxhdGl2ZU9mZnNldCA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9w
ZXJhbmQ7Ci0gICAgICAgICAgICBOb2RlSW5kZXggb3AxID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlv
blsxXS51Lm9wZXJhbmQpOwotICAgICAgICAgICAgTm9kZUluZGV4IG9wMiA9IGdldChjdXJyZW50
SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKLSAgICAgICAgICAgIE5vZGVJbmRleCBjb25kaXRp
b24gPSBhZGRUb0dyYXBoKENvbXBhcmVHcmVhdGVyLCBvcDEsIG9wMik7CisgICAgICAgICAgICBO
b2RlKiBvcDEgPSBnZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCk7CisgICAgICAg
ICAgICBOb2RlKiBvcDIgPSBnZXQoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7Cisg
ICAgICAgICAgICBOb2RlKiBjb25kaXRpb24gPSBhZGRUb0dyYXBoKENvbXBhcmVHcmVhdGVyLCBv
cDEsIG9wMik7CiAgICAgICAgICAgICBhZGRUb0dyYXBoKEJyYW5jaCwgT3BJbmZvKG1fY3VycmVu
dEluZGV4ICsgcmVsYXRpdmVPZmZzZXQpLCBPcEluZm8obV9jdXJyZW50SW5kZXggKyBPUENPREVf
TEVOR1RIKG9wX2pncmVhdGVyKSksIGNvbmRpdGlvbik7CiAgICAgICAgICAgICBMQVNUX09QQ09E
RShvcF9qZ3JlYXRlcik7CiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIG9wX2pncmVhdGVyZXE6
IHsKICAgICAgICAgICAgIHVuc2lnbmVkIHJlbGF0aXZlT2Zmc2V0ID0gY3VycmVudEluc3RydWN0
aW9uWzNdLnUub3BlcmFuZDsKLSAgICAgICAgICAgIE5vZGVJbmRleCBvcDEgPSBnZXQoY3VycmVu
dEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCk7Ci0gICAgICAgICAgICBOb2RlSW5kZXggb3AyID0g
Z2V0KGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOwotICAgICAgICAgICAgTm9kZUlu
ZGV4IGNvbmRpdGlvbiA9IGFkZFRvR3JhcGgoQ29tcGFyZUdyZWF0ZXJFcSwgb3AxLCBvcDIpOwor
ICAgICAgICAgICAgTm9kZSogb3AxID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJh
bmQpOworICAgICAgICAgICAgTm9kZSogb3AyID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsyXS51
Lm9wZXJhbmQpOworICAgICAgICAgICAgTm9kZSogY29uZGl0aW9uID0gYWRkVG9HcmFwaChDb21w
YXJlR3JlYXRlckVxLCBvcDEsIG9wMik7CiAgICAgICAgICAgICBhZGRUb0dyYXBoKEJyYW5jaCwg
T3BJbmZvKG1fY3VycmVudEluZGV4ICsgcmVsYXRpdmVPZmZzZXQpLCBPcEluZm8obV9jdXJyZW50
SW5kZXggKyBPUENPREVfTEVOR1RIKG9wX2pncmVhdGVyZXEpKSwgY29uZGl0aW9uKTsKICAgICAg
ICAgICAgIExBU1RfT1BDT0RFKG9wX2pncmVhdGVyZXEpOwogICAgICAgICB9CiAKICAgICAgICAg
Y2FzZSBvcF9qbmxlc3M6IHsKICAgICAgICAgICAgIHVuc2lnbmVkIHJlbGF0aXZlT2Zmc2V0ID0g
Y3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKLSAgICAgICAgICAgIE5vZGVJbmRleCBv
cDEgPSBnZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCk7Ci0gICAgICAgICAgICBO
b2RlSW5kZXggb3AyID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOwotICAg
ICAgICAgICAgTm9kZUluZGV4IGNvbmRpdGlvbiA9IGFkZFRvR3JhcGgoQ29tcGFyZUxlc3MsIG9w
MSwgb3AyKTsKKyAgICAgICAgICAgIE5vZGUqIG9wMSA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25b
MV0udS5vcGVyYW5kKTsKKyAgICAgICAgICAgIE5vZGUqIG9wMiA9IGdldChjdXJyZW50SW5zdHJ1
Y3Rpb25bMl0udS5vcGVyYW5kKTsKKyAgICAgICAgICAgIE5vZGUqIGNvbmRpdGlvbiA9IGFkZFRv
R3JhcGgoQ29tcGFyZUxlc3MsIG9wMSwgb3AyKTsKICAgICAgICAgICAgIGFkZFRvR3JhcGgoQnJh
bmNoLCBPcEluZm8obV9jdXJyZW50SW5kZXggKyBPUENPREVfTEVOR1RIKG9wX2pubGVzcykpLCBP
cEluZm8obV9jdXJyZW50SW5kZXggKyByZWxhdGl2ZU9mZnNldCksIGNvbmRpdGlvbik7CiAgICAg
ICAgICAgICBMQVNUX09QQ09ERShvcF9qbmxlc3MpOwogICAgICAgICB9CiAKICAgICAgICAgY2Fz
ZSBvcF9qbmxlc3NlcTogewogICAgICAgICAgICAgdW5zaWduZWQgcmVsYXRpdmVPZmZzZXQgPSBj
dXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOwotICAgICAgICAgICAgTm9kZUluZGV4IG9w
MSA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKTsKLSAgICAgICAgICAgIE5v
ZGVJbmRleCBvcDIgPSBnZXQoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7Ci0gICAg
ICAgICAgICBOb2RlSW5kZXggY29uZGl0aW9uID0gYWRkVG9HcmFwaChDb21wYXJlTGVzc0VxLCBv
cDEsIG9wMik7CisgICAgICAgICAgICBOb2RlKiBvcDEgPSBnZXQoY3VycmVudEluc3RydWN0aW9u
WzFdLnUub3BlcmFuZCk7CisgICAgICAgICAgICBOb2RlKiBvcDIgPSBnZXQoY3VycmVudEluc3Ry
dWN0aW9uWzJdLnUub3BlcmFuZCk7CisgICAgICAgICAgICBOb2RlKiBjb25kaXRpb24gPSBhZGRU
b0dyYXBoKENvbXBhcmVMZXNzRXEsIG9wMSwgb3AyKTsKICAgICAgICAgICAgIGFkZFRvR3JhcGgo
QnJhbmNoLCBPcEluZm8obV9jdXJyZW50SW5kZXggKyBPUENPREVfTEVOR1RIKG9wX2pubGVzc2Vx
KSksIE9wSW5mbyhtX2N1cnJlbnRJbmRleCArIHJlbGF0aXZlT2Zmc2V0KSwgY29uZGl0aW9uKTsK
ICAgICAgICAgICAgIExBU1RfT1BDT0RFKG9wX2pubGVzc2VxKTsKICAgICAgICAgfQogCiAgICAg
ICAgIGNhc2Ugb3Bfam5ncmVhdGVyOiB7CiAgICAgICAgICAgICB1bnNpZ25lZCByZWxhdGl2ZU9m
ZnNldCA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBOb2Rl
SW5kZXggb3AxID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpOwotICAgICAg
ICAgICAgTm9kZUluZGV4IG9wMiA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5k
KTsKLSAgICAgICAgICAgIE5vZGVJbmRleCBjb25kaXRpb24gPSBhZGRUb0dyYXBoKENvbXBhcmVH
cmVhdGVyLCBvcDEsIG9wMik7CisgICAgICAgICAgICBOb2RlKiBvcDEgPSBnZXQoY3VycmVudElu
c3RydWN0aW9uWzFdLnUub3BlcmFuZCk7CisgICAgICAgICAgICBOb2RlKiBvcDIgPSBnZXQoY3Vy
cmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7CisgICAgICAgICAgICBOb2RlKiBjb25kaXRp
b24gPSBhZGRUb0dyYXBoKENvbXBhcmVHcmVhdGVyLCBvcDEsIG9wMik7CiAgICAgICAgICAgICBh
ZGRUb0dyYXBoKEJyYW5jaCwgT3BJbmZvKG1fY3VycmVudEluZGV4ICsgT1BDT0RFX0xFTkdUSChv
cF9qbmdyZWF0ZXIpKSwgT3BJbmZvKG1fY3VycmVudEluZGV4ICsgcmVsYXRpdmVPZmZzZXQpLCBj
b25kaXRpb24pOwogICAgICAgICAgICAgTEFTVF9PUENPREUob3Bfam5ncmVhdGVyKTsKICAgICAg
ICAgfQogCiAgICAgICAgIGNhc2Ugb3Bfam5ncmVhdGVyZXE6IHsKICAgICAgICAgICAgIHVuc2ln
bmVkIHJlbGF0aXZlT2Zmc2V0ID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKLSAg
ICAgICAgICAgIE5vZGVJbmRleCBvcDEgPSBnZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3Bl
cmFuZCk7Ci0gICAgICAgICAgICBOb2RlSW5kZXggb3AyID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlv
blsyXS51Lm9wZXJhbmQpOwotICAgICAgICAgICAgTm9kZUluZGV4IGNvbmRpdGlvbiA9IGFkZFRv
R3JhcGgoQ29tcGFyZUdyZWF0ZXJFcSwgb3AxLCBvcDIpOworICAgICAgICAgICAgTm9kZSogb3Ax
ID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpOworICAgICAgICAgICAgTm9k
ZSogb3AyID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOworICAgICAgICAg
ICAgTm9kZSogY29uZGl0aW9uID0gYWRkVG9HcmFwaChDb21wYXJlR3JlYXRlckVxLCBvcDEsIG9w
Mik7CiAgICAgICAgICAgICBhZGRUb0dyYXBoKEJyYW5jaCwgT3BJbmZvKG1fY3VycmVudEluZGV4
ICsgT1BDT0RFX0xFTkdUSChvcF9qbmdyZWF0ZXJlcSkpLCBPcEluZm8obV9jdXJyZW50SW5kZXgg
KyByZWxhdGl2ZU9mZnNldCksIGNvbmRpdGlvbik7CiAgICAgICAgICAgICBMQVNUX09QQ09ERShv
cF9qbmdyZWF0ZXJlcSk7CiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIG9wX2xvb3BfaWZfbGVz
czogewogICAgICAgICAgICAgdW5zaWduZWQgcmVsYXRpdmVPZmZzZXQgPSBjdXJyZW50SW5zdHJ1
Y3Rpb25bM10udS5vcGVyYW5kOwotICAgICAgICAgICAgTm9kZUluZGV4IG9wMSA9IGdldChjdXJy
ZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKTsKLSAgICAgICAgICAgIE5vZGVJbmRleCBvcDIg
PSBnZXQoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7Ci0gICAgICAgICAgICBOb2Rl
SW5kZXggY29uZGl0aW9uID0gYWRkVG9HcmFwaChDb21wYXJlTGVzcywgb3AxLCBvcDIpOworICAg
ICAgICAgICAgTm9kZSogb3AxID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQp
OworICAgICAgICAgICAgTm9kZSogb3AyID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9w
ZXJhbmQpOworICAgICAgICAgICAgTm9kZSogY29uZGl0aW9uID0gYWRkVG9HcmFwaChDb21wYXJl
TGVzcywgb3AxLCBvcDIpOwogICAgICAgICAgICAgYWRkVG9HcmFwaChCcmFuY2gsIE9wSW5mbyht
X2N1cnJlbnRJbmRleCArIHJlbGF0aXZlT2Zmc2V0KSwgT3BJbmZvKG1fY3VycmVudEluZGV4ICsg
T1BDT0RFX0xFTkdUSChvcF9sb29wX2lmX2xlc3MpKSwgY29uZGl0aW9uKTsKICAgICAgICAgICAg
IExBU1RfT1BDT0RFKG9wX2xvb3BfaWZfbGVzcyk7CiAgICAgICAgIH0KIAogICAgICAgICBjYXNl
IG9wX2xvb3BfaWZfbGVzc2VxOiB7CiAgICAgICAgICAgICB1bnNpZ25lZCByZWxhdGl2ZU9mZnNl
dCA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBOb2RlSW5k
ZXggb3AxID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpOwotICAgICAgICAg
ICAgTm9kZUluZGV4IG9wMiA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsK
LSAgICAgICAgICAgIE5vZGVJbmRleCBjb25kaXRpb24gPSBhZGRUb0dyYXBoKENvbXBhcmVMZXNz
RXEsIG9wMSwgb3AyKTsKKyAgICAgICAgICAgIE5vZGUqIG9wMSA9IGdldChjdXJyZW50SW5zdHJ1
Y3Rpb25bMV0udS5vcGVyYW5kKTsKKyAgICAgICAgICAgIE5vZGUqIG9wMiA9IGdldChjdXJyZW50
SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKKyAgICAgICAgICAgIE5vZGUqIGNvbmRpdGlvbiA9
IGFkZFRvR3JhcGgoQ29tcGFyZUxlc3NFcSwgb3AxLCBvcDIpOwogICAgICAgICAgICAgYWRkVG9H
cmFwaChCcmFuY2gsIE9wSW5mbyhtX2N1cnJlbnRJbmRleCArIHJlbGF0aXZlT2Zmc2V0KSwgT3BJ
bmZvKG1fY3VycmVudEluZGV4ICsgT1BDT0RFX0xFTkdUSChvcF9sb29wX2lmX2xlc3NlcSkpLCBj
b25kaXRpb24pOwogICAgICAgICAgICAgTEFTVF9PUENPREUob3BfbG9vcF9pZl9sZXNzZXEpOwog
ICAgICAgICB9CiAKICAgICAgICAgY2FzZSBvcF9sb29wX2lmX2dyZWF0ZXI6IHsKICAgICAgICAg
ICAgIHVuc2lnbmVkIHJlbGF0aXZlT2Zmc2V0ID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3Bl
cmFuZDsKLSAgICAgICAgICAgIE5vZGVJbmRleCBvcDEgPSBnZXQoY3VycmVudEluc3RydWN0aW9u
WzFdLnUub3BlcmFuZCk7Ci0gICAgICAgICAgICBOb2RlSW5kZXggb3AyID0gZ2V0KGN1cnJlbnRJ
bnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOwotICAgICAgICAgICAgTm9kZUluZGV4IGNvbmRpdGlv
biA9IGFkZFRvR3JhcGgoQ29tcGFyZUdyZWF0ZXIsIG9wMSwgb3AyKTsKKyAgICAgICAgICAgIE5v
ZGUqIG9wMSA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKTsKKyAgICAgICAg
ICAgIE5vZGUqIG9wMiA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKKyAg
ICAgICAgICAgIE5vZGUqIGNvbmRpdGlvbiA9IGFkZFRvR3JhcGgoQ29tcGFyZUdyZWF0ZXIsIG9w
MSwgb3AyKTsKICAgICAgICAgICAgIGFkZFRvR3JhcGgoQnJhbmNoLCBPcEluZm8obV9jdXJyZW50
SW5kZXggKyByZWxhdGl2ZU9mZnNldCksIE9wSW5mbyhtX2N1cnJlbnRJbmRleCArIE9QQ09ERV9M
RU5HVEgob3BfbG9vcF9pZl9ncmVhdGVyKSksIGNvbmRpdGlvbik7CiAgICAgICAgICAgICBMQVNU
X09QQ09ERShvcF9sb29wX2lmX2dyZWF0ZXIpOwogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBv
cF9sb29wX2lmX2dyZWF0ZXJlcTogewogICAgICAgICAgICAgdW5zaWduZWQgcmVsYXRpdmVPZmZz
ZXQgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOwotICAgICAgICAgICAgTm9kZUlu
ZGV4IG9wMSA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKTsKLSAgICAgICAg
ICAgIE5vZGVJbmRleCBvcDIgPSBnZXQoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7
Ci0gICAgICAgICAgICBOb2RlSW5kZXggY29uZGl0aW9uID0gYWRkVG9HcmFwaChDb21wYXJlR3Jl
YXRlckVxLCBvcDEsIG9wMik7CisgICAgICAgICAgICBOb2RlKiBvcDEgPSBnZXQoY3VycmVudElu
c3RydWN0aW9uWzFdLnUub3BlcmFuZCk7CisgICAgICAgICAgICBOb2RlKiBvcDIgPSBnZXQoY3Vy
cmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7CisgICAgICAgICAgICBOb2RlKiBjb25kaXRp
b24gPSBhZGRUb0dyYXBoKENvbXBhcmVHcmVhdGVyRXEsIG9wMSwgb3AyKTsKICAgICAgICAgICAg
IGFkZFRvR3JhcGgoQnJhbmNoLCBPcEluZm8obV9jdXJyZW50SW5kZXggKyByZWxhdGl2ZU9mZnNl
dCksIE9wSW5mbyhtX2N1cnJlbnRJbmRleCArIE9QQ09ERV9MRU5HVEgob3BfbG9vcF9pZl9ncmVh
dGVyZXEpKSwgY29uZGl0aW9uKTsKICAgICAgICAgICAgIExBU1RfT1BDT0RFKG9wX2xvb3BfaWZf
Z3JlYXRlcmVxKTsKICAgICAgICAgfQpAQCAtMjk1Niw3ICsyOTE4LDcgQEAgYm9vbCBCeXRlQ29k
ZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBh
cmd1bWVudCA9IDE7IGFyZ3VtZW50IDwgYXJnQ291bnQ7ICsrYXJndW1lbnQpCiAgICAgICAgICAg
ICAgICAgYWRkVmFyQXJnQ2hpbGQoZ2V0KGFyZ3VtZW50VG9PcGVyYW5kKGFyZ3VtZW50KSkpOwog
ICAgICAgICAgICAgCi0gICAgICAgICAgICBOb2RlSW5kZXggY2FsbCA9IGFkZFRvR3JhcGgoTm9k
ZTo6VmFyQXJnLCBDYWxsLCBPcEluZm8oMCksIE9wSW5mbyhwcmVkaWN0aW9uKSk7CisgICAgICAg
ICAgICBOb2RlKiBjYWxsID0gYWRkVG9HcmFwaChOb2RlOjpWYXJBcmcsIENhbGwsIE9wSW5mbygw
KSwgT3BJbmZvKHByZWRpY3Rpb24pKTsKICAgICAgICAgICAgIGlmIChpbnRlcnByZXRlci0+Z2V0
T3Bjb2RlSUQocHV0SW5zdHJ1Y3Rpb24tPnUub3Bjb2RlKSA9PSBvcF9jYWxsX3B1dF9yZXN1bHQp
CiAgICAgICAgICAgICAgICAgc2V0KHB1dEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwgY2FsbCk7
CiAgICAgICAgICAgICAKQEAgLTI5ODgsMTMgKzI5NTAsMTMgQEAgYm9vbCBCeXRlQ29kZVBhcnNl
cjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgCiAgICAgICAgICAgICB1bnNpZ25l
ZCBpZGVudGlmaWVyID0gbV9pbmxpbmVTdGFja1RvcC0+bV9pZGVudGlmaWVyUmVtYXBbY3VycmVu
dEluc3RydWN0aW9uWzJdLnUub3BlcmFuZF07CiAgICAgICAgICAgICB1bnNpZ25lZCBvcGVyYXRp
b25zID0gbV9pbmxpbmVTdGFja1RvcC0+bV9yZXNvbHZlT3BlcmF0aW9uUmVtYXBbY3VycmVudElu
c3RydWN0aW9uWzNdLnUub3BlcmFuZF07Ci0gICAgICAgICAgICBOb2RlSW5kZXggdmFsdWUgPSAw
OworICAgICAgICAgICAgTm9kZSogdmFsdWUgPSAwOwogICAgICAgICAgICAgaWYgKHBhcnNlUmVz
b2x2ZU9wZXJhdGlvbnMocHJlZGljdGlvbiwgaWRlbnRpZmllciwgb3BlcmF0aW9ucywgMCwgMCwg
JnZhbHVlKSkgewogICAgICAgICAgICAgICAgIHNldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5v
cGVyYW5kLCB2YWx1ZSk7CiAgICAgICAgICAgICAgICAgTkVYVF9PUENPREUob3BfcmVzb2x2ZSk7
CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIE5vZGVJbmRleCByZXNvbHZlID0gYWRkVG9H
cmFwaChSZXNvbHZlLCBPcEluZm8obV9ncmFwaC5tX3Jlc29sdmVPcGVyYXRpb25zRGF0YS5zaXpl
KCkpLCBPcEluZm8ocHJlZGljdGlvbikpOworICAgICAgICAgICAgTm9kZSogcmVzb2x2ZSA9IGFk
ZFRvR3JhcGgoUmVzb2x2ZSwgT3BJbmZvKG1fZ3JhcGgubV9yZXNvbHZlT3BlcmF0aW9uc0RhdGEu
c2l6ZSgpKSwgT3BJbmZvKHByZWRpY3Rpb24pKTsKICAgICAgICAgICAgIG1fZ3JhcGgubV9yZXNv
bHZlT3BlcmF0aW9uc0RhdGEuYXBwZW5kKFJlc29sdmVPcGVyYXRpb25EYXRhKCkpOwogICAgICAg
ICAgICAgUmVzb2x2ZU9wZXJhdGlvbkRhdGEmIGRhdGEgPSBtX2dyYXBoLm1fcmVzb2x2ZU9wZXJh
dGlvbnNEYXRhLmxhc3QoKTsKICAgICAgICAgICAgIGRhdGEuaWRlbnRpZmllck51bWJlciA9IGlk
ZW50aWZpZXI7CkBAIC0zMDQyLDggKzMwMDQsOCBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJz
ZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXQodmFsdWUpKTsK
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgUHV0VG9CYXNlT3BlcmF0
aW9uOjpWYXJpYWJsZVB1dDogewotICAgICAgICAgICAgICAgIE5vZGVJbmRleCBzY29wZSA9IGdl
dChiYXNlKTsKLSAgICAgICAgICAgICAgICBOb2RlSW5kZXggc2NvcGVSZWdpc3RlcnMgPSBhZGRU
b0dyYXBoKEdldFNjb3BlUmVnaXN0ZXJzLCBzY29wZSk7CisgICAgICAgICAgICAgICAgTm9kZSog
c2NvcGUgPSBnZXQoYmFzZSk7CisgICAgICAgICAgICAgICAgTm9kZSogc2NvcGVSZWdpc3RlcnMg
PSBhZGRUb0dyYXBoKEdldFNjb3BlUmVnaXN0ZXJzLCBzY29wZSk7CiAgICAgICAgICAgICAgICAg
YWRkVG9HcmFwaChQdXRTY29wZWRWYXIsIE9wSW5mbyhwdXRUb0Jhc2UtPm1fb2Zmc2V0KSwgc2Nv
cGUsIHNjb3BlUmVnaXN0ZXJzLCBnZXQodmFsdWUpKTsKICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgIH0KQEAgLTMwNTMsOSArMzAxNSw5IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6
OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChQaGFu
dG9tLCBnZXQoYmFzZSkpOwogICAgICAgICAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9wdXRf
dG9fYmFzZSk7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIE5vZGVJbmRleCBi
YXNlTm9kZSA9IGdldChiYXNlKTsKKyAgICAgICAgICAgICAgICBOb2RlKiBiYXNlTm9kZSA9IGdl
dChiYXNlKTsKICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKENoZWNrU3RydWN0dXJlLCBPcElu
Zm8obV9ncmFwaC5hZGRTdHJ1Y3R1cmVTZXQocHV0VG9CYXNlLT5tX3N0cnVjdHVyZS5nZXQoKSkp
LCBiYXNlTm9kZSk7Ci0gICAgICAgICAgICAgICAgTm9kZUluZGV4IHByb3BlcnR5U3RvcmFnZTsK
KyAgICAgICAgICAgICAgICBOb2RlKiBwcm9wZXJ0eVN0b3JhZ2U7CiAgICAgICAgICAgICAgICAg
aWYgKGlzSW5saW5lT2Zmc2V0KHB1dFRvQmFzZS0+bV9vZmZzZXQpKQogICAgICAgICAgICAgICAg
ICAgICBwcm9wZXJ0eVN0b3JhZ2UgPSBiYXNlTm9kZTsKICAgICAgICAgICAgICAgICBlbHNlCkBA
IC0zMDg2LDEzICszMDQ4LDEzIEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5z
aWduZWQKICAgICAgICAgICAgIHVuc2lnbmVkIG9wZXJhdGlvbnMgPSBtX2lubGluZVN0YWNrVG9w
LT5tX3Jlc29sdmVPcGVyYXRpb25SZW1hcFtjdXJyZW50SW5zdHJ1Y3Rpb25bNF0udS5vcGVyYW5k
XTsKICAgICAgICAgICAgIHVuc2lnbmVkIHB1dFRvQmFzZU9wZXJhdGlvbiA9IG1faW5saW5lU3Rh
Y2tUb3AtPm1fcHV0VG9CYXNlT3BlcmF0aW9uUmVtYXBbY3VycmVudEluc3RydWN0aW9uWzVdLnUu
b3BlcmFuZF07CiAKLSAgICAgICAgICAgIE5vZGVJbmRleCBiYXNlID0gMDsKKyAgICAgICAgICAg
IE5vZGUqIGJhc2UgPSAwOwogICAgICAgICAgICAgaWYgKHBhcnNlUmVzb2x2ZU9wZXJhdGlvbnMo
cHJlZGljdGlvbiwgaWRlbnRpZmllciwgb3BlcmF0aW9ucywgMCwgJmJhc2UsIDApKSB7CiAgICAg
ICAgICAgICAgICAgc2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsIGJhc2UpOwog
ICAgICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX3Jlc29sdmVfYmFzZSk7CiAgICAgICAgICAg
ICB9CiAKLSAgICAgICAgICAgIE5vZGVJbmRleCByZXNvbHZlID0gYWRkVG9HcmFwaChjdXJyZW50
SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kID8gUmVzb2x2ZUJhc2VTdHJpY3RQdXQgOiBSZXNvbHZl
QmFzZSwgT3BJbmZvKG1fZ3JhcGgubV9yZXNvbHZlT3BlcmF0aW9uc0RhdGEuc2l6ZSgpKSwgT3BJ
bmZvKHByZWRpY3Rpb24pKTsKKyAgICAgICAgICAgIE5vZGUqIHJlc29sdmUgPSBhZGRUb0dyYXBo
KGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQgPyBSZXNvbHZlQmFzZVN0cmljdFB1dCA6
IFJlc29sdmVCYXNlLCBPcEluZm8obV9ncmFwaC5tX3Jlc29sdmVPcGVyYXRpb25zRGF0YS5zaXpl
KCkpLCBPcEluZm8ocHJlZGljdGlvbikpOwogICAgICAgICAgICAgbV9ncmFwaC5tX3Jlc29sdmVP
cGVyYXRpb25zRGF0YS5hcHBlbmQoUmVzb2x2ZU9wZXJhdGlvbkRhdGEoKSk7CiAgICAgICAgICAg
ICBSZXNvbHZlT3BlcmF0aW9uRGF0YSYgZGF0YSA9IG1fZ3JhcGgubV9yZXNvbHZlT3BlcmF0aW9u
c0RhdGEubGFzdCgpOwogICAgICAgICAgICAgZGF0YS5pZGVudGlmaWVyTnVtYmVyID0gaWRlbnRp
ZmllcjsKQEAgLTMxMTEsOCArMzA3Myw4IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxv
Y2sodW5zaWduZWQKICAgICAgICAgICAgIHVuc2lnbmVkIG9wZXJhdGlvbnMgPSBtX2lubGluZVN0
YWNrVG9wLT5tX3Jlc29sdmVPcGVyYXRpb25SZW1hcFtjdXJyZW50SW5zdHJ1Y3Rpb25bNF0udS5v
cGVyYW5kXTsKICAgICAgICAgICAgIHVuc2lnbmVkIHB1dFRvQmFzZU9wZXJhdGlvbiA9IG1faW5s
aW5lU3RhY2tUb3AtPm1fcHV0VG9CYXNlT3BlcmF0aW9uUmVtYXBbY3VycmVudEluc3RydWN0aW9u
WzVdLnUub3BlcmFuZF07CiAKLSAgICAgICAgICAgIE5vZGVJbmRleCBiYXNlID0gMDsKLSAgICAg
ICAgICAgIE5vZGVJbmRleCB2YWx1ZSA9IDA7CisgICAgICAgICAgICBOb2RlKiBiYXNlID0gMDsK
KyAgICAgICAgICAgIE5vZGUqIHZhbHVlID0gMDsKICAgICAgICAgICAgIGlmIChwYXJzZVJlc29s
dmVPcGVyYXRpb25zKHByZWRpY3Rpb24sIGlkZW50aWZpZXIsIG9wZXJhdGlvbnMsIHB1dFRvQmFz
ZU9wZXJhdGlvbiwgJmJhc2UsICZ2YWx1ZSkpCiAgICAgICAgICAgICAgICAgc2V0UGFpcihiYXNl
RHN0LCBiYXNlLCB2YWx1ZURzdCwgdmFsdWUpOwogICAgICAgICAgICAgZWxzZSB7CkBAIC0zMTI5
LDggKzMwOTEsOCBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAg
ICAgICAgICAgICB1bnNpZ25lZCBpZGVudGlmaWVyID0gbV9pbmxpbmVTdGFja1RvcC0+bV9pZGVu
dGlmaWVyUmVtYXBbY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZF07CiAgICAgICAgICAg
ICB1bnNpZ25lZCBvcGVyYXRpb25zID0gbV9pbmxpbmVTdGFja1RvcC0+bV9yZXNvbHZlT3BlcmF0
aW9uUmVtYXBbY3VycmVudEluc3RydWN0aW9uWzRdLnUub3BlcmFuZF07CiAKLSAgICAgICAgICAg
IE5vZGVJbmRleCBiYXNlID0gMDsKLSAgICAgICAgICAgIE5vZGVJbmRleCB2YWx1ZSA9IDA7Cisg
ICAgICAgICAgICBOb2RlKiBiYXNlID0gMDsKKyAgICAgICAgICAgIE5vZGUqIHZhbHVlID0gMDsK
ICAgICAgICAgICAgIGlmIChwYXJzZVJlc29sdmVPcGVyYXRpb25zKHByZWRpY3Rpb24sIGlkZW50
aWZpZXIsIG9wZXJhdGlvbnMsIDAsICZiYXNlLCAmdmFsdWUpKQogICAgICAgICAgICAgICAgIHNl
dFBhaXIoYmFzZURzdCwgYmFzZSwgdmFsdWVEc3QsIHZhbHVlKTsKICAgICAgICAgICAgIGVsc2Ug
ewpAQCAtMzE3MSw3ICszMTMzLDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1
bnNpZ25lZAogICAgICAgICAgICAgCiAgICAgICAgIGNhc2Ugb3BfY3JlYXRlX2FyZ3VtZW50czog
ewogICAgICAgICAgICAgbV9ncmFwaC5tX2hhc0FyZ3VtZW50cyA9IHRydWU7Ci0gICAgICAgICAg
ICBOb2RlSW5kZXggY3JlYXRlQXJndW1lbnRzID0gYWRkVG9HcmFwaChDcmVhdGVBcmd1bWVudHMs
IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKSk7CisgICAgICAgICAgICBOb2Rl
KiBjcmVhdGVBcmd1bWVudHMgPSBhZGRUb0dyYXBoKENyZWF0ZUFyZ3VtZW50cywgZ2V0KGN1cnJl
bnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpKTsKICAgICAgICAgICAgIHNldChjdXJyZW50SW5z
dHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCBjcmVhdGVBcmd1bWVudHMpOwogICAgICAgICAgICAgc2V0
KHVubW9kaWZpZWRBcmd1bWVudHNSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVy
YW5kKSwgY3JlYXRlQXJndW1lbnRzKTsKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2NyZWF0
ZV9hcmd1bWVudHMpOwpAQCAtMzI1MCwxMiArMzIxMiw5IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6
OnByb2Nlc3NQaGlTdGFjaygpCiAgICAgICAgIGlmICghZW50cnkubV9ibG9jay0+aXNSZWFjaGFi
bGUpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgCi0gICAgICAgIGlmICghZW50cnku
bV9ibG9jay0+aXNSZWFjaGFibGUpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgCiAg
ICAgICAgIFByZWRlY2Vzc29yTGlzdCYgcHJlZGVjZXNzb3JzID0gZW50cnkubV9ibG9jay0+bV9w
cmVkZWNlc3NvcnM7CiAgICAgICAgIHVuc2lnbmVkIHZhck5vID0gZW50cnkubV92YXJObzsKLSAg
ICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiBkYXRhRm9yUGhpID0gbV9ncmFwaFtlbnRyeS5tX3Bo
aV0udmFyaWFibGVBY2Nlc3NEYXRhKCk7CisgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogZGF0
YUZvclBoaSA9IGVudHJ5Lm1fcGhpLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKIAogI2lmIERGR19F
TkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKICAgICAgICAgZGF0YUxvZ0YoIiAgIEhh
bmRsaW5nIHBoaSBlbnRyeSBmb3IgdmFyICV1LCBwaGkgQCV1LlxuIiwgZW50cnkubV92YXJObywg
ZW50cnkubV9waGkpOwpAQCAtMzI2OCwxMCArMzIyNywxMCBAQCB2b2lkIEJ5dGVDb2RlUGFyc2Vy
Ojpwcm9jZXNzUGhpU3RhY2soKQogICAgICAgICAgICAgCiAgICAgICAgICAgICBCYXNpY0Jsb2Nr
KiBwcmVkZWNlc3NvckJsb2NrID0gbV9ncmFwaC5tX2Jsb2Nrc1twcmVkZWNlc3NvcnNbaV1dLmdl
dCgpOwogCi0gICAgICAgICAgICBOb2RlSW5kZXgmIHZhciA9IChzdGFja1R5cGUgPT0gQXJndW1l
bnRQaGlTdGFjaykgPyBwcmVkZWNlc3NvckJsb2NrLT52YXJpYWJsZXNBdFRhaWwuYXJndW1lbnQo
dmFyTm8pIDogcHJlZGVjZXNzb3JCbG9jay0+dmFyaWFibGVzQXRUYWlsLmxvY2FsKHZhck5vKTsK
KyAgICAgICAgICAgIE5vZGUqJiB2YXIgPSAoc3RhY2tUeXBlID09IEFyZ3VtZW50UGhpU3RhY2sp
ID8gcHJlZGVjZXNzb3JCbG9jay0+dmFyaWFibGVzQXRUYWlsLmFyZ3VtZW50KHZhck5vKSA6IHBy
ZWRlY2Vzc29yQmxvY2stPnZhcmlhYmxlc0F0VGFpbC5sb2NhbCh2YXJObyk7CiAgICAgICAgICAg
ICAKLSAgICAgICAgICAgIE5vZGVJbmRleCB2YWx1ZUluUHJlZGVjZXNzb3IgPSB2YXI7Ci0gICAg
ICAgICAgICBpZiAodmFsdWVJblByZWRlY2Vzc29yID09IE5vTm9kZSkgeworICAgICAgICAgICAg
Tm9kZSogdmFsdWVJblByZWRlY2Vzc29yID0gdmFyOworICAgICAgICAgICAgaWYgKCF2YWx1ZUlu
UHJlZGVjZXNzb3IpIHsKICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0Up
CiAgICAgICAgICAgICAgICAgZGF0YUxvZ0YoIiAgICAgIERpZCBub3QgZmluZCBub2RlLCBhZGRp
bmcgcGhpLlxuIik7CiAjZW5kaWYKQEAgLTMyODMsMzYgKzMyNDIsMzYgQEAgdm9pZCBCeXRlQ29k
ZVBhcnNlcjo6cHJvY2Vzc1BoaVN0YWNrKCkKICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAg
ICAgICAgICAgICAgIHByZWRlY2Vzc29yQmxvY2stPnZhcmlhYmxlc0F0SGVhZC5zZXRMb2NhbEZp
cnN0VGltZSh2YXJObywgdmFsdWVJblByZWRlY2Vzc29yKTsKICAgICAgICAgICAgICAgICBwaGlT
dGFjay5hcHBlbmQoUGhpU3RhY2tFbnRyeShwcmVkZWNlc3NvckJsb2NrLCB2YWx1ZUluUHJlZGVj
ZXNzb3IsIHZhck5vKSk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKG1fZ3JhcGhbdmFsdWVJblBy
ZWRlY2Vzc29yXS5vcCgpID09IEdldExvY2FsKSB7CisgICAgICAgICAgICB9IGVsc2UgaWYgKHZh
bHVlSW5QcmVkZWNlc3Nvci0+b3AoKSA9PSBHZXRMb2NhbCkgewogI2lmIERGR19FTkFCTEUoREVC
VUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKLSAgICAgICAgICAgICAgICBkYXRhTG9nRigiICAgICAg
Rm91bmQgR2V0TG9jYWwgQCV1LlxuIiwgdmFsdWVJblByZWRlY2Vzc29yKTsKKyAgICAgICAgICAg
ICAgICBkYXRhTG9nRigiICAgICAgRm91bmQgR2V0TG9jYWwgQCV1LlxuIiwgdmFsdWVJblByZWRl
Y2Vzc29yLT5pbmRleCgpKTsKICNlbmRpZgogCiAgICAgICAgICAgICAgICAgLy8gV2Ugd2FudCB0
byBlbnN1cmUgdGhhdCB0aGUgVmFyaWFibGVBY2Nlc3NEYXRhcyBhcmUgaWRlbnRpY2FsIGJldHdl
ZW4gdGhlCiAgICAgICAgICAgICAgICAgLy8gR2V0TG9jYWwgYW5kIGl0cyBibG9jay1sb2NhbCBQ
aGkuIFN0cmljdGx5IHNwZWFraW5nIHdlIG9ubHkgbmVlZCB0aGUgdHdvCiAgICAgICAgICAgICAg
ICAgLy8gdG8gYmUgdW5pZmllZC4gQnV0IGZvciBlZmZpY2llbmN5LCB3ZSB3YW50IHRoZSBjb2Rl
IHRoYXQgY3JlYXRlcyBHZXRMb2NhbHMKICAgICAgICAgICAgICAgICAvLyBhbmQgUGhpcyB0byB0
cnkgdG8gcmV1c2UgVmFyaWFibGVBY2Nlc3NEYXRhcyBhcyBtdWNoIGFzIHBvc3NpYmxlLgotICAg
ICAgICAgICAgICAgIEFTU0VSVChtX2dyYXBoW3ZhbHVlSW5QcmVkZWNlc3Nvcl0udmFyaWFibGVB
Y2Nlc3NEYXRhKCkgPT0gbV9ncmFwaFttX2dyYXBoW3ZhbHVlSW5QcmVkZWNlc3Nvcl0uY2hpbGQx
KCkuaW5kZXgoKV0udmFyaWFibGVBY2Nlc3NEYXRhKCkpOworICAgICAgICAgICAgICAgIEFTU0VS
VCh2YWx1ZUluUHJlZGVjZXNzb3ItPnZhcmlhYmxlQWNjZXNzRGF0YSgpID09IHZhbHVlSW5QcmVk
ZWNlc3Nvci0+Y2hpbGQxKCktPnZhcmlhYmxlQWNjZXNzRGF0YSgpKTsKICAgICAgICAgICAgICAg
ICAKLSAgICAgICAgICAgICAgICB2YWx1ZUluUHJlZGVjZXNzb3IgPSBtX2dyYXBoW3ZhbHVlSW5Q
cmVkZWNlc3Nvcl0uY2hpbGQxKCkuaW5kZXgoKTsKKyAgICAgICAgICAgICAgICB2YWx1ZUluUHJl
ZGVjZXNzb3IgPSB2YWx1ZUluUHJlZGVjZXNzb3ItPmNoaWxkMSgpLm5vZGUoKTsKICAgICAgICAg
ICAgIH0gZWxzZSB7CiAjaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQot
ICAgICAgICAgICAgICAgIGRhdGFMb2dGKCIgICAgICBGb3VuZCBAJXUuXG4iLCB2YWx1ZUluUHJl
ZGVjZXNzb3IpOworICAgICAgICAgICAgICAgIGRhdGFMb2dGKCIgICAgICBGb3VuZCBAJXUuXG4i
LCB2YWx1ZUluUHJlZGVjZXNzb3ItPmluZGV4KCkpOwogI2VuZGlmCiAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBBU1NFUlQobV9ncmFwaFt2YWx1ZUluUHJlZGVjZXNzb3JdLm9wKCkgPT0gU2V0
TG9jYWwKLSAgICAgICAgICAgICAgICAgICB8fCBtX2dyYXBoW3ZhbHVlSW5QcmVkZWNlc3Nvcl0u
b3AoKSA9PSBQaGkKLSAgICAgICAgICAgICAgICAgICB8fCBtX2dyYXBoW3ZhbHVlSW5QcmVkZWNl
c3Nvcl0ub3AoKSA9PSBGbHVzaAotICAgICAgICAgICAgICAgICAgIHx8IChtX2dyYXBoW3ZhbHVl
SW5QcmVkZWNlc3Nvcl0ub3AoKSA9PSBTZXRBcmd1bWVudAorICAgICAgICAgICAgQVNTRVJUKHZh
bHVlSW5QcmVkZWNlc3Nvci0+b3AoKSA9PSBTZXRMb2NhbAorICAgICAgICAgICAgICAgICAgIHx8
IHZhbHVlSW5QcmVkZWNlc3Nvci0+b3AoKSA9PSBQaGkKKyAgICAgICAgICAgICAgICAgICB8fCB2
YWx1ZUluUHJlZGVjZXNzb3ItPm9wKCkgPT0gRmx1c2gKKyAgICAgICAgICAgICAgICAgICB8fCAo
dmFsdWVJblByZWRlY2Vzc29yLT5vcCgpID09IFNldEFyZ3VtZW50CiAgICAgICAgICAgICAgICAg
ICAgICAgICYmIHN0YWNrVHlwZSA9PSBBcmd1bWVudFBoaVN0YWNrKSk7CiAgICAgICAgICAgICAK
LSAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogZGF0YUZvclByZWRlY2Vzc29yID0gbV9n
cmFwaFt2YWx1ZUluUHJlZGVjZXNzb3JdLnZhcmlhYmxlQWNjZXNzRGF0YSgpOworICAgICAgICAg
ICAgVmFyaWFibGVBY2Nlc3NEYXRhKiBkYXRhRm9yUHJlZGVjZXNzb3IgPSB2YWx1ZUluUHJlZGVj
ZXNzb3ItPnZhcmlhYmxlQWNjZXNzRGF0YSgpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBk
YXRhRm9yUHJlZGVjZXNzb3ItPnVuaWZ5KGRhdGFGb3JQaGkpOwogCi0gICAgICAgICAgICBOb2Rl
KiBwaGlOb2RlID0gJm1fZ3JhcGhbZW50cnkubV9waGldOworICAgICAgICAgICAgTm9kZSogcGhp
Tm9kZSA9IGVudHJ5Lm1fcGhpOwogI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVS
Qk9TRSkKLSAgICAgICAgICAgIGRhdGFMb2dGKCIgICAgICBSZWYgY291bnQgb2YgQCV1ID0gJXUu
XG4iLCBlbnRyeS5tX3BoaSwgcGhpTm9kZS0+cmVmQ291bnQoKSk7CisgICAgICAgICAgICBkYXRh
TG9nRigiICAgICAgUmVmIGNvdW50IG9mIEAldSA9ICV1LlxuIiwgcGhpTm9kZS0+aW5kZXgoKSwg
cGhpTm9kZS0+cmVmQ291bnQoKSk7CiAjZW5kaWYKICAgICAgICAgICAgIGlmIChwaGlOb2RlLT5y
ZWZDb3VudCgpKSB7CiAjaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQpA
QCAtMzMyMywxMSArMzI4MiwxMSBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwcm9jZXNzUGhpU3Rh
Y2soKQogCiAgICAgICAgICAgICBpZiAoIXBoaU5vZGUtPmNoaWxkMSgpKSB7CiAjaWYgREZHX0VO
QUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQotICAgICAgICAgICAgICAgIGRhdGFMb2dG
KCIgICAgICBTZXR0aW5nIEAldS0+Y2hpbGQxID0gQCV1LlxuIiwgZW50cnkubV9waGksIHZhbHVl
SW5QcmVkZWNlc3Nvcik7CisgICAgICAgICAgICAgICAgZGF0YUxvZ0YoIiAgICAgIFNldHRpbmcg
QCV1LT5jaGlsZDEgPSBAJXUuXG4iLCBwaGlOb2RlLT5pbmRleCgpLCB2YWx1ZUluUHJlZGVjZXNz
b3IpOwogI2VuZGlmCiAgICAgICAgICAgICAgICAgcGhpTm9kZS0+Y2hpbGRyZW4uc2V0Q2hpbGQx
KEVkZ2UodmFsdWVJblByZWRlY2Vzc29yKSk7CiAjaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdB
VElPTl9WRVJCT1NFKQotICAgICAgICAgICAgICAgIGRhdGFMb2dGKCIgICAgICBDaGlsZHJlbiBv
ZiBAJXU6ICIsIGVudHJ5Lm1fcGhpKTsKKyAgICAgICAgICAgICAgICBkYXRhTG9nRigiICAgICAg
Q2hpbGRyZW4gb2YgQCV1OiAiLCBwaGlOb2RlLT5pbmRleCgpKTsKICAgICAgICAgICAgICAgICBw
aGlOb2RlLT5kdW1wQ2hpbGRyZW4oV1RGOjpkYXRhRmlsZSgpKTsKICAgICAgICAgICAgICAgICBk
YXRhTG9nRigiLlxuIik7CiAjZW5kaWYKQEAgLTMzMzUsMTEgKzMyOTQsMTEgQEAgdm9pZCBCeXRl
Q29kZVBhcnNlcjo6cHJvY2Vzc1BoaVN0YWNrKCkKICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IGlmICghcGhpTm9kZS0+Y2hpbGQyKCkpIHsKICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FU
SU9OX1ZFUkJPU0UpCi0gICAgICAgICAgICAgICAgZGF0YUxvZ0YoIiAgICAgIFNldHRpbmcgQCV1
LT5jaGlsZDIgPSBAJXUuXG4iLCBlbnRyeS5tX3BoaSwgdmFsdWVJblByZWRlY2Vzc29yKTsKKyAg
ICAgICAgICAgICAgICBkYXRhTG9nRigiICAgICAgU2V0dGluZyBAJXUtPmNoaWxkMiA9IEAldS5c
biIsIHBoaU5vZGUtPmluZGV4KCksIHZhbHVlSW5QcmVkZWNlc3Nvcik7CiAjZW5kaWYKICAgICAg
ICAgICAgICAgICBwaGlOb2RlLT5jaGlsZHJlbi5zZXRDaGlsZDIoRWRnZSh2YWx1ZUluUHJlZGVj
ZXNzb3IpKTsKICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCi0gICAg
ICAgICAgICAgICAgZGF0YUxvZ0YoIiAgICAgIENoaWxkcmVuIG9mIEAldTogIiwgZW50cnkubV9w
aGkpOworICAgICAgICAgICAgICAgIGRhdGFMb2dGKCIgICAgICBDaGlsZHJlbiBvZiBAJXU6ICIs
IHBoaU5vZGUtPmluZGV4KCkpOwogICAgICAgICAgICAgICAgIHBoaU5vZGUtPmR1bXBDaGlsZHJl
bihXVEY6OmRhdGFGaWxlKCkpOwogICAgICAgICAgICAgICAgIGRhdGFMb2dGKCIuXG4iKTsKICNl
bmRpZgpAQCAtMzM0Nyw0MCArMzMwNiwzOCBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwcm9jZXNz
UGhpU3RhY2soKQogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKCFwaGlOb2RlLT5jaGls
ZDMoKSkgewogI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKLSAgICAg
ICAgICAgICAgICBkYXRhTG9nRigiICAgICAgU2V0dGluZyBAJXUtPmNoaWxkMyA9IEAldS5cbiIs
IGVudHJ5Lm1fcGhpLCB2YWx1ZUluUHJlZGVjZXNzb3IpOworICAgICAgICAgICAgICAgIGRhdGFM
b2dGKCIgICAgICBTZXR0aW5nIEAldS0+Y2hpbGQzID0gQCV1LlxuIiwgcGhpTm9kZS0+aW5kZXgo
KSwgdmFsdWVJblByZWRlY2Vzc29yKTsKICNlbmRpZgogICAgICAgICAgICAgICAgIHBoaU5vZGUt
PmNoaWxkcmVuLnNldENoaWxkMyhFZGdlKHZhbHVlSW5QcmVkZWNlc3NvcikpOwogI2lmIERGR19F
TkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKLSAgICAgICAgICAgICAgICBkYXRhTG9n
RigiICAgICAgQ2hpbGRyZW4gb2YgQCV1OiAiLCBlbnRyeS5tX3BoaSk7CisgICAgICAgICAgICAg
ICAgZGF0YUxvZ0YoIiAgICAgIENoaWxkcmVuIG9mIEAldTogIiwgcGhpTm9kZS0+aW5kZXgoKSk7
CiAgICAgICAgICAgICAgICAgcGhpTm9kZS0+ZHVtcENoaWxkcmVuKFdURjo6ZGF0YUZpbGUoKSk7
CiAgICAgICAgICAgICAgICAgZGF0YUxvZ0YoIi5cbiIpOwogI2VuZGlmCiAgICAgICAgICAgICAg
ICAgY29udGludWU7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIE5v
ZGVJbmRleCBuZXdQaGkgPSBpbnNlcnRQaGlOb2RlKE9wSW5mbyhkYXRhRm9yUGhpKSwgZW50cnku
bV9ibG9jayk7CisgICAgICAgICAgICBOb2RlKiBuZXdQaGkgPSBpbnNlcnRQaGlOb2RlKE9wSW5m
byhkYXRhRm9yUGhpKSwgZW50cnkubV9ibG9jayk7CiAgICAgICAgICAgICAKICNpZiBERkdfRU5B
QkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCi0gICAgICAgICAgICBkYXRhTG9nRigiICAg
ICAgU3BsaXR0aW5nIEAldSwgY3JlYXRlZCBAJXUuXG4iLCBlbnRyeS5tX3BoaSwgbmV3UGhpKTsK
KyAgICAgICAgICAgIGRhdGFMb2dGKCIgICAgICBTcGxpdHRpbmcgQCV1LCBjcmVhdGVkIEAldS5c
biIsIHBoaU5vZGUtPmluZGV4KCksIG5ld1BoaS0+aW5kZXgoKSk7CiAjZW5kaWYKIAotICAgICAg
ICAgICAgcGhpTm9kZSA9ICZtX2dyYXBoW2VudHJ5Lm1fcGhpXTsgLy8gcmVsb2FkIGFmdGVyIHZl
Y3RvciByZXNpemUKLSAgICAgICAgICAgIE5vZGUmIG5ld1BoaU5vZGUgPSBtX2dyYXBoW25ld1Bo
aV07CiAgICAgICAgICAgICBpZiAocGhpTm9kZS0+cmVmQ291bnQoKSkKICAgICAgICAgICAgICAg
ICBtX2dyYXBoLnJlZihuZXdQaGkpOwogCi0gICAgICAgICAgICBuZXdQaGlOb2RlLmNoaWxkcmVu
ID0gcGhpTm9kZS0+Y2hpbGRyZW47CisgICAgICAgICAgICBuZXdQaGktPmNoaWxkcmVuID0gcGhp
Tm9kZS0+Y2hpbGRyZW47CiAKICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJP
U0UpCi0gICAgICAgICAgICBkYXRhTG9nRigiICAgICAgQ2hpbGRyZW4gb2YgQCV1OiAiLCBuZXdQ
aGkpOwotICAgICAgICAgICAgbmV3UGhpTm9kZS5kdW1wQ2hpbGRyZW4oV1RGOjpkYXRhRmlsZSgp
KTsKKyAgICAgICAgICAgIGRhdGFMb2dGKCIgICAgICBDaGlsZHJlbiBvZiBAJXU6ICIsIG5ld1Bo
aS0+aW5kZXgoKSk7CisgICAgICAgICAgICBuZXdQaGktPmR1bXBDaGlsZHJlbihXVEY6OmRhdGFG
aWxlKCkpOwogICAgICAgICAgICAgZGF0YUxvZ0YoIi5cbiIpOwogI2VuZGlmCiAKLSAgICAgICAg
ICAgIHBoaU5vZGUtPmNoaWxkcmVuLmluaXRpYWxpemUobmV3UGhpLCB2YWx1ZUluUHJlZGVjZXNz
b3IsIE5vTm9kZSk7CisgICAgICAgICAgICBwaGlOb2RlLT5jaGlsZHJlbi5pbml0aWFsaXplKG5l
d1BoaSwgdmFsdWVJblByZWRlY2Vzc29yLCAwKTsKIAogI2lmIERGR19FTkFCTEUoREVCVUdfUFJP
UEFHQVRJT05fVkVSQk9TRSkKLSAgICAgICAgICAgIGRhdGFMb2dGKCIgICAgICBDaGlsZHJlbiBv
ZiBAJXU6ICIsIGVudHJ5Lm1fcGhpKTsKKyAgICAgICAgICAgIGRhdGFMb2dGKCIgICAgICBDaGls
ZHJlbiBvZiBAJXU6ICIsIHBoaU5vZGUtPmluZGV4KCkpOwogICAgICAgICAgICAgcGhpTm9kZS0+
ZHVtcENoaWxkcmVuKFdURjo6ZGF0YUZpbGUoKSk7CiAgICAgICAgICAgICBkYXRhTG9nRigiLlxu
Iik7CiAjZW5kaWYKQEAgLTM0MDIsMjIgKzMzNTksMjIgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6
bGlua0Jsb2NrKEJhc2ljQmxvYwogewogICAgIEFTU0VSVCghYmxvY2stPmlzTGlua2VkKTsKICAg
ICBBU1NFUlQoIWJsb2NrLT5pc0VtcHR5KCkpOwotICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW2Js
b2NrLT5sYXN0KCldOwotICAgIEFTU0VSVChub2RlLmlzVGVybWluYWwoKSk7CisgICAgTm9kZSog
bm9kZSA9IGJsb2NrLT5sYXN0KCk7CisgICAgQVNTRVJUKG5vZGUtPmlzVGVybWluYWwoKSk7CiAg
ICAgCi0gICAgc3dpdGNoIChub2RlLm9wKCkpIHsKKyAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsK
ICAgICBjYXNlIEp1bXA6Ci0gICAgICAgIG5vZGUuc2V0VGFrZW5CbG9ja0luZGV4KG1fZ3JhcGgu
YmxvY2tJbmRleEZvckJ5dGVjb2RlT2Zmc2V0KHBvc3NpYmxlVGFyZ2V0cywgbm9kZS50YWtlbkJ5
dGVjb2RlT2Zmc2V0RHVyaW5nUGFyc2luZygpKSk7CisgICAgICAgIG5vZGUtPnNldFRha2VuQmxv
Y2tJbmRleChtX2dyYXBoLmJsb2NrSW5kZXhGb3JCeXRlY29kZU9mZnNldChwb3NzaWJsZVRhcmdl
dHMsIG5vZGUtPnRha2VuQnl0ZWNvZGVPZmZzZXREdXJpbmdQYXJzaW5nKCkpKTsKICNpZiBERkdf
RU5BQkxFKERFQlVHX1ZFUkJPU0UpCi0gICAgICAgIGRhdGFMb2dGKCJMaW5rZWQgYmFzaWMgYmxv
Y2sgJXAgdG8gJXAsICMldS5cbiIsIGJsb2NrLCBtX2dyYXBoLm1fYmxvY2tzW25vZGUudGFrZW5C
bG9ja0luZGV4KCldLmdldCgpLCBub2RlLnRha2VuQmxvY2tJbmRleCgpKTsKKyAgICAgICAgZGF0
YUxvZ0YoIkxpbmtlZCBiYXNpYyBibG9jayAlcCB0byAlcCwgIyV1LlxuIiwgYmxvY2ssIG1fZ3Jh
cGgubV9ibG9ja3Nbbm9kZS0+dGFrZW5CbG9ja0luZGV4KCldLmdldCgpLCBub2RlLT50YWtlbkJs
b2NrSW5kZXgoKSk7CiAjZW5kaWYKICAgICAgICAgYnJlYWs7CiAgICAgICAgIAogICAgIGNhc2Ug
QnJhbmNoOgotICAgICAgICBub2RlLnNldFRha2VuQmxvY2tJbmRleChtX2dyYXBoLmJsb2NrSW5k
ZXhGb3JCeXRlY29kZU9mZnNldChwb3NzaWJsZVRhcmdldHMsIG5vZGUudGFrZW5CeXRlY29kZU9m
ZnNldER1cmluZ1BhcnNpbmcoKSkpOwotICAgICAgICBub2RlLnNldE5vdFRha2VuQmxvY2tJbmRl
eChtX2dyYXBoLmJsb2NrSW5kZXhGb3JCeXRlY29kZU9mZnNldChwb3NzaWJsZVRhcmdldHMsIG5v
ZGUubm90VGFrZW5CeXRlY29kZU9mZnNldER1cmluZ1BhcnNpbmcoKSkpOworICAgICAgICBub2Rl
LT5zZXRUYWtlbkJsb2NrSW5kZXgobV9ncmFwaC5ibG9ja0luZGV4Rm9yQnl0ZWNvZGVPZmZzZXQo
cG9zc2libGVUYXJnZXRzLCBub2RlLT50YWtlbkJ5dGVjb2RlT2Zmc2V0RHVyaW5nUGFyc2luZygp
KSk7CisgICAgICAgIG5vZGUtPnNldE5vdFRha2VuQmxvY2tJbmRleChtX2dyYXBoLmJsb2NrSW5k
ZXhGb3JCeXRlY29kZU9mZnNldChwb3NzaWJsZVRhcmdldHMsIG5vZGUtPm5vdFRha2VuQnl0ZWNv
ZGVPZmZzZXREdXJpbmdQYXJzaW5nKCkpKTsKICNpZiBERkdfRU5BQkxFKERFQlVHX1ZFUkJPU0Up
Ci0gICAgICAgIGRhdGFMb2dGKCJMaW5rZWQgYmFzaWMgYmxvY2sgJXAgdG8gJXAsICMldSBhbmQg
JXAsICMldS5cbiIsIGJsb2NrLCBtX2dyYXBoLm1fYmxvY2tzW25vZGUudGFrZW5CbG9ja0luZGV4
KCldLmdldCgpLCBub2RlLnRha2VuQmxvY2tJbmRleCgpLCBtX2dyYXBoLm1fYmxvY2tzW25vZGUu
bm90VGFrZW5CbG9ja0luZGV4KCldLmdldCgpLCBub2RlLm5vdFRha2VuQmxvY2tJbmRleCgpKTsK
KyAgICAgICAgZGF0YUxvZ0YoIkxpbmtlZCBiYXNpYyBibG9jayAlcCB0byAlcCwgIyV1IGFuZCAl
cCwgIyV1LlxuIiwgYmxvY2ssIG1fZ3JhcGgubV9ibG9ja3Nbbm9kZS0+dGFrZW5CbG9ja0luZGV4
KCldLmdldCgpLCBub2RlLT50YWtlbkJsb2NrSW5kZXgoKSwgbV9ncmFwaC5tX2Jsb2Nrc1tub2Rl
LT5ub3RUYWtlbkJsb2NrSW5kZXgoKV0uZ2V0KCksIG5vZGUtPm5vdFRha2VuQmxvY2tJbmRleCgp
KTsKICNlbmRpZgogICAgICAgICBicmVhazsKICAgICAgICAgCkBAIC0zNzI1LDcgKzM2ODIsNyBA
QCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUNvZGVCbG9jaygpCiAgICAgICAgICAgICAvLyBh
cmUgYXQgdGhlIGVuZCBvZiBhbiBpbmxpbmUgZnVuY3Rpb24sIG9yIHdlIHJlYWxpemVkIHRoYXQg
d2UKICAgICAgICAgICAgIC8vIHNob3VsZCBzdG9wIHBhcnNpbmcgYmVjYXVzZSB0aGVyZSB3YXMg
YSByZXR1cm4gaW4gdGhlIGZpcnN0CiAgICAgICAgICAgICAvLyBiYXNpYyBibG9jay4KLSAgICAg
ICAgICAgIEFTU0VSVChtX2N1cnJlbnRCbG9jay0+aXNFbXB0eSgpIHx8IG1fZ3JhcGgubGFzdCgp
LmlzVGVybWluYWwoKSB8fCAobV9jdXJyZW50SW5kZXggPT0gY29kZUJsb2NrLT5pbnN0cnVjdGlv
bnMoKS5zaXplKCkgJiYgbV9pbmxpbmVTdGFja1RvcC0+bV9pbmxpbmVDYWxsRnJhbWUpIHx8ICFz
aG91bGRDb250aW51ZVBhcnNpbmcpOworICAgICAgICAgICAgQVNTRVJUKG1fY3VycmVudEJsb2Nr
LT5pc0VtcHR5KCkgfHwgbV9jdXJyZW50QmxvY2stPmxhc3QoKS0+aXNUZXJtaW5hbCgpIHx8ICht
X2N1cnJlbnRJbmRleCA9PSBjb2RlQmxvY2stPmluc3RydWN0aW9ucygpLnNpemUoKSAmJiBtX2lu
bGluZVN0YWNrVG9wLT5tX2lubGluZUNhbGxGcmFtZSkgfHwgIXNob3VsZENvbnRpbnVlUGFyc2lu
Zyk7CiAKICAgICAgICAgICAgIGlmICghc2hvdWxkQ29udGludWVQYXJzaW5nKQogICAgICAgICAg
ICAgICAgIHJldHVybjsKQEAgLTM3ODYsMTMgKzM3NDMsMTIgQEAgYm9vbCBCeXRlQ29kZVBhcnNl
cjo6cGFyc2UoKQogICAgICAgICBpZiAoYmxvY2stPmJ5dGVjb2RlQmVnaW4gIT0gbV9ncmFwaC5t
X29zckVudHJ5Qnl0ZWNvZGVJbmRleCkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IG1fZ3JhcGgubV9tdXN0SGFuZGxlVmFsdWVzLnNpemUoKTsg
KytpKSB7Ci0gICAgICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4ID0gYmxvY2stPnZhcmlhYmxl
c0F0SGVhZC5vcGVyYW5kKAorICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT52YXJpYWJs
ZXNBdEhlYWQub3BlcmFuZCgKICAgICAgICAgICAgICAgICBtX2dyYXBoLm1fbXVzdEhhbmRsZVZh
bHVlcy5vcGVyYW5kRm9ySW5kZXgoaSkpOwotICAgICAgICAgICAgaWYgKG5vZGVJbmRleCA9PSBO
b05vZGUpCisgICAgICAgICAgICBpZiAoIW5vZGUpCiAgICAgICAgICAgICAgICAgY29udGludWU7
Ci0gICAgICAgICAgICBOb2RlJiBub2RlID0gbV9ncmFwaFtub2RlSW5kZXhdOwotICAgICAgICAg
ICAgQVNTRVJUKG5vZGUuaGFzTG9jYWwoKSk7Ci0gICAgICAgICAgICBub2RlLnZhcmlhYmxlQWNj
ZXNzRGF0YSgpLT5wcmVkaWN0KAorICAgICAgICAgICAgQVNTRVJUKG5vZGUtPmhhc0xvY2FsKCkp
OworICAgICAgICAgICAgbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCktPnByZWRpY3QoCiAgICAg
ICAgICAgICAgICAgc3BlY3VsYXRpb25Gcm9tVmFsdWUobV9ncmFwaC5tX211c3RIYW5kbGVWYWx1
ZXNbaV0pKTsKICAgICAgICAgfQogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQ0ZBUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQ0ZBUGhhc2UuY3BwCShyZXZpc2lvbiAxNDA5MDQpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0NGQVBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtODgsMTEgKzg4LDExIEBA
IHByaXZhdGU6CiAgICAgICAgIGRhdGFMb2dGKCJcbiIpOwogI2VuZGlmCiAgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBibG9jay0+c2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIE5v
ZGVJbmRleCBub2RlSW5kZXggPSBibG9jay0+YXQoaSk7Ci0gICAgICAgICAgICBpZiAoIW1fZ3Jh
cGhbbm9kZUluZGV4XS5zaG91bGRHZW5lcmF0ZSgpKQorICAgICAgICAgICAgTm9kZSogbm9kZSA9
IGJsb2NrLT5hdChpKTsKKyAgICAgICAgICAgIGlmICghbm9kZS0+c2hvdWxkR2VuZXJhdGUoKSkK
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FU
SU9OX1ZFUkJPU0UpCi0gICAgICAgICAgICBkYXRhTG9nRigiICAgICAgJXMgQCV1OiAiLCBHcmFw
aDo6b3BOYW1lKG1fZ3JhcGhbbm9kZUluZGV4XS5vcCgpKSwgbm9kZUluZGV4KTsKKyAgICAgICAg
ICAgIGRhdGFMb2dGKCIgICAgICAlcyBAJXU6ICIsIEdyYXBoOjpvcE5hbWUobV9ncmFwaFtub2Rl
SW5kZXhdLm9wKCkpLCBub2RlLT5pbmRleCgpKTsKICAgICAgICAgICAgIG1fc3RhdGUuZHVtcChX
VEY6OmRhdGFGaWxlKCkpOwogICAgICAgICAgICAgZGF0YUxvZ0YoIlxuIik7CiAjZW5kaWYKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ0ZHU2ltcGxpZmljYXRpb25QaGFzZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDRkdTaW1wbGlm
aWNhdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMTQwOTA0KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdDRkdTaW1wbGlmaWNhdGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDEzIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjAs
NyArNjAsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAg
ICAgICAgICAgIEFTU0VSVChibG9jay0+aXNSZWFjaGFibGUpOwogICAgICAgICAgICAgCi0gICAg
ICAgICAgICAgICAgc3dpdGNoIChtX2dyYXBoW2Jsb2NrLT5sYXN0KCldLm9wKCkpIHsKKyAgICAg
ICAgICAgICAgICBzd2l0Y2ggKGJsb2NrLT5sYXN0KCktPm9wKCkpIHsKICAgICAgICAgICAgICAg
ICBjYXNlIEp1bXA6IHsKICAgICAgICAgICAgICAgICAgICAgLy8gU3VjY2Vzc29yIHdpdGggb25l
IHByZWRlY2Vzc29yIC0+IG1lcmdlLgogICAgICAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC5t
X2Jsb2Nrc1ttX2dyYXBoLnN1Y2Nlc3NvcihibG9jaywgMCldLT5tX3ByZWRlY2Vzc29ycy5zaXpl
KCkgPT0gMSkgewpAQCAtMTI5LDEwICsxMjksMTAgQEAgcHVibGljOgogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEJsb2NrSW5kZXggdGFrZW5CbG9ja0luZGV4ID0gbV9ncmFwaC5zdWNjZXNz
b3JGb3JDb25kaXRpb24oYmxvY2ssIGNvbmRpdGlvbik7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgQmxvY2tJbmRleCBub3RUYWtlbkJsb2NrSW5kZXggPSBtX2dyYXBoLnN1Y2Nlc3NvckZv
ckNvbmRpdGlvbihibG9jaywgIWNvbmRpdGlvbik7CiAgICAgICAgICAgICAgICAgICAgICAgICAK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQobV9ncmFwaFtibG9jay0+bGFzdCgp
XS5pc1Rlcm1pbmFsKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvZGVPcmlnaW4g
Ym91bmRhcnlDb2RlT3JpZ2luID0gbV9ncmFwaFtibG9jay0+bGFzdCgpXS5jb2RlT3JpZ2luOwot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGhbYmxvY2stPmxhc3QoKV0uc2V0T3BB
bmREZWZhdWx0RmxhZ3MoUGhhbnRvbSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQVNT
RVJUKG1fZ3JhcGhbYmxvY2stPmxhc3QoKV0ucmVmQ291bnQoKSA9PSAxKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBBU1NFUlQoYmxvY2stPmxhc3QoKS0+aXNUZXJtaW5hbCgpKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBDb2RlT3JpZ2luIGJvdW5kYXJ5Q29kZU9yaWdpbiA9
IGJsb2NrLT5sYXN0KCktPmNvZGVPcmlnaW47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
YmxvY2stPmxhc3QoKS0+c2V0T3BBbmREZWZhdWx0RmxhZ3MoUGhhbnRvbSk7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgQVNTRVJUKGJsb2NrLT5sYXN0KCktPnJlZkNvdW50KCkgPT0gMSk7
CiAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBq
ZXR0aXNvbkJsb2NrKGJsb2NrSW5kZXgsIG5vdFRha2VuQmxvY2tJbmRleCwgYm91bmRhcnlDb2Rl
T3JpZ2luKTsKICAgICAgICAgICAgICAgICAgICAgICAgIApAQCAtMTYwLDE2ICsxNjAsMTUgQEAg
cHVibGljOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2dGKCJDRkdTaW1wbGlm
eTogQnJhbmNoLT5qdW1wIGNvbnZlcnNpb24gdG8gc2FtZSBzdWNjZXNzb3Igb24gQmxvY2sgIyV1
IHRvIEJsb2NrICMldS5cbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
bG9ja0luZGV4LCB0YXJnZXRCbG9ja0luZGV4KTsKICNlbmRpZgotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEFTU0VSVChtX2dyYXBoW2Jsb2NrLT5sYXN0KCldLmlzVGVybWluYWwoKSk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgTm9kZSYgYnJhbmNoID0gbV9ncmFwaFtibG9jay0+
bGFzdCgpXTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQoYnJhbmNoLmlzVGVy
bWluYWwoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGJyYW5jaC5vcCgp
ID09IEJyYW5jaCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJhbmNoLnNldE9wQW5k
RGVmYXVsdEZsYWdzKFBoYW50b20pOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VS
VChicmFuY2gucmVmQ291bnQoKSA9PSAxKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBO
b2RlKiBicmFuY2ggPSBibG9jay0+bGFzdCgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEFTU0VSVChicmFuY2gtPmlzVGVybWluYWwoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgQVNTRVJUKGJyYW5jaC0+b3AoKSA9PSBCcmFuY2gpOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJyYW5jaC0+c2V0T3BBbmREZWZhdWx0RmxhZ3MoUGhhbnRvbSk7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgQVNTRVJUKGJyYW5jaC0+cmVmQ291bnQoKSA9PSAxKTsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBibG9j
ay0+YXBwZW5kTm9kZSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaCwg
RG9udFJlZkNoaWxkcmVuLCBEb250UmVmTm9kZSwgU3BlY05vbmUsIEp1bXAsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGJyYW5jaC5jb2RlT3JpZ2luLCBPcEluZm8odGFyZ2V0Qmxv
Y2tJbmRleCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmFuY2gtPmNvZGVP
cmlnaW4sIE9wSW5mbyh0YXJnZXRCbG9ja0luZGV4KSk7CiAgICAgICAgICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgICAgICAgICBpbm5lckNoYW5nZWQgPSBvdXRlckNoYW5nZWQg
PSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0yNjAsNDUgKzI1OSw0
MyBAQCBwcml2YXRlOgogICAgIAogICAgIHZvaWQga2VlcE9wZXJhbmRBbGl2ZShCYXNpY0Jsb2Nr
KiBibG9jaywgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBpbnQgb3BlcmFuZCkKICAgICB7Ci0gICAg
ICAgIE5vZGVJbmRleCBub2RlSW5kZXggPSBibG9jay0+dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQo
b3BlcmFuZCk7Ci0gICAgICAgIGlmIChub2RlSW5kZXggPT0gTm9Ob2RlKQorICAgICAgICBOb2Rl
KiBub2RlID0gYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKG9wZXJhbmQpOworICAgICAg
ICBpZiAoIW5vZGUpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGlmIChtX2dyYXBoW25v
ZGVJbmRleF0udmFyaWFibGVBY2Nlc3NEYXRhKCktPmlzQ2FwdHVyZWQoKSkKKyAgICAgICAgaWYg
KG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5pc0NhcHR1cmVkKCkpCiAgICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgIGlmIChtX2dyYXBoW25vZGVJbmRleF0ub3AoKSA9PSBTZXRMb2NhbCkK
LSAgICAgICAgICAgIG5vZGVJbmRleCA9IG1fZ3JhcGhbbm9kZUluZGV4XS5jaGlsZDEoKS5pbmRl
eCgpOwotICAgICAgICBOb2RlJiBub2RlID0gbV9ncmFwaFtub2RlSW5kZXhdOwotICAgICAgICBp
ZiAoIW5vZGUuc2hvdWxkR2VuZXJhdGUoKSkKKyAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gU2V0
TG9jYWwpCisgICAgICAgICAgICBub2RlID0gbm9kZS0+Y2hpbGQxKCkubm9kZSgpOworICAgICAg
ICBpZiAoIW5vZGUtPnNob3VsZEdlbmVyYXRlKCkpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgIEFTU0VSVChtX2dyYXBoW25vZGVJbmRleF0ub3AoKSAhPSBTZXRMb2NhbCk7CisgICAgICAg
IEFTU0VSVChub2RlLT5vcCgpICE9IFNldExvY2FsKTsKICAgICAgICAgYmxvY2stPmFwcGVuZE5v
ZGUoCi0gICAgICAgICAgICBtX2dyYXBoLCBSZWZDaGlsZHJlbiwgRG9udFJlZk5vZGUsIFNwZWNO
b25lLCBQaGFudG9tLCBjb2RlT3JpZ2luLCBub2RlSW5kZXgpOworICAgICAgICAgICAgbV9ncmFw
aCwgUmVmQ2hpbGRyZW4sIERvbnRSZWZOb2RlLCBTcGVjTm9uZSwgUGhhbnRvbSwgY29kZU9yaWdp
biwgbm9kZSk7CiAgICAgfQogICAgIAogICAgIHZvaWQgZml4UG9zc2libGVHZXRMb2NhbChCYXNp
Y0Jsb2NrKiBibG9jaywgRWRnZSYgZWRnZSwgYm9vbCBjaGFuZ2VSZWYpCiAgICAgewotICAgICAg
ICBOb2RlJiBjaGlsZCA9IG1fZ3JhcGhbZWRnZV07Ci0gICAgICAgIGlmIChjaGlsZC5vcCgpICE9
IEdldExvY2FsKQorICAgICAgICBOb2RlKiBjaGlsZCA9IGVkZ2Uubm9kZSgpOworICAgICAgICBp
ZiAoY2hpbGQtPm9wKCkgIT0gR2V0TG9jYWwpCiAgICAgICAgICAgICByZXR1cm47CiAjaWYgREZH
X0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQotICAgICAgICBkYXRhTG9nRigiICAg
IENvbnNpZGVyaW5nIEdldExvY2FsIGF0IEAldSwgbG9jYWwgciVkLlxuIiwgZWRnZS5pbmRleCgp
LCBjaGlsZC5sb2NhbCgpKTsKKyAgICAgICAgZGF0YUxvZ0YoIiAgICBDb25zaWRlcmluZyBHZXRM
b2NhbCBhdCBAJXUsIGxvY2FsIHIlZC5cbiIsIG5vZGUtPmluZGV4KCksIGNoaWxkLT5sb2NhbCgp
KTsKICNlbmRpZgotICAgICAgICBpZiAoY2hpbGQudmFyaWFibGVBY2Nlc3NEYXRhKCktPmlzQ2Fw
dHVyZWQoKSkgeworICAgICAgICBpZiAoY2hpbGQtPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5pc0Nh
cHR1cmVkKCkpIHsKICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCiAg
ICAgICAgICAgICBkYXRhTG9nRigiICAgICAgICBJdCdzIGNhcHR1cmVkLlxuIik7CiAjZW5kaWYK
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICBOb2RlSW5kZXggb3JpZ2lu
YWxOb2RlSW5kZXggPSBibG9jay0+dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQoY2hpbGQubG9jYWwo
KSk7CisgICAgICAgIE5vZGUqIG9yaWdpbmFsTm9kZSA9IGJsb2NrLT52YXJpYWJsZXNBdFRhaWwu
b3BlcmFuZChjaGlsZC0+bG9jYWwoKSk7CiAjaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElP
Tl9WRVJCT1NFKQotICAgICAgICBkYXRhTG9nRigiICAgICAgICBEZWFsaW5nIHdpdGggb3JpZ2lu
YWwgQCV1LlxuIiwgb3JpZ2luYWxOb2RlSW5kZXgpOworICAgICAgICBkYXRhTG9nRigiICAgICAg
ICBEZWFsaW5nIHdpdGggb3JpZ2luYWwgQCV1LlxuIiwgb3JpZ2luYWxOb2RlLT5pbmRleCgpKTsK
ICNlbmRpZgotICAgICAgICBBU1NFUlQob3JpZ2luYWxOb2RlSW5kZXggIT0gTm9Ob2RlKTsKLSAg
ICAgICAgTm9kZSogb3JpZ2luYWxOb2RlID0gJm1fZ3JhcGhbb3JpZ2luYWxOb2RlSW5kZXhdOwor
ICAgICAgICBBU1NFUlQob3JpZ2luYWxOb2RlKTsKICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BB
R0FUSU9OX1ZFUkJPU0UpCiAgICAgICAgIGRhdGFMb2dGKCIgICAgICAgIE9yaWdpbmFsIGhhcyBs
b2NhbCByJWQuXG4iLCBvcmlnaW5hbE5vZGUtPmxvY2FsKCkpOwogI2VuZGlmCi0gICAgICAgIEFT
U0VSVChjaGlsZC5sb2NhbCgpID09IG9yaWdpbmFsTm9kZS0+bG9jYWwoKSk7CisgICAgICAgIEFT
U0VSVChjaGlsZC0+bG9jYWwoKSA9PSBvcmlnaW5hbE5vZGUtPmxvY2FsKCkpOwogICAgICAgICAv
LyBQb3NzaWJpbGl0aWVzOgogICAgICAgICAvLyBTZXRMb2NhbCAtPiB0aGUgc2Vjb25kQmxvY2sg
aXMgZ2V0dGluZyB0aGUgdmFsdWUgb2Ygc29tZXRoaW5nIHRoYXQgaXMgaW1tZWRpYXRlbHkKICAg
ICAgICAgLy8gICAgIGF2YWlsYWJsZSBpbiB0aGUgZmlyc3QgYmxvY2sgd2l0aCBhIGtub3duIE5v
ZGVJbmRleC4KQEAgLTMxMiwxMCArMzA5LDggQEAgcHJpdmF0ZToKICAgICAgICAgLy8gRmx1c2gg
LT4gdGhlIHNlY29uZEJsb2NrIGlzIGFza2luZyBmb3Iga2VlcC1hbGl2ZSBvbiBhbiBvcGVyYW5k
IHRoYXQgdGhlIGZpcnN0CiAgICAgICAgIC8vICAgICBibG9jayB3YXMgZm9yY2luZyB0byBiZSBh
bGl2ZSwgc28gdGhlIHNlY29uZCBibG9jayBzaG91bGQgcmVmZXIgY2hpbGQgb2YKICAgICAgICAg
Ly8gICAgIHRoZSBmbHVzaC4KLSAgICAgICAgaWYgKG9yaWdpbmFsTm9kZS0+b3AoKSA9PSBGbHVz
aCkgewotICAgICAgICAgICAgb3JpZ2luYWxOb2RlSW5kZXggPSBvcmlnaW5hbE5vZGUtPmNoaWxk
MSgpLmluZGV4KCk7Ci0gICAgICAgICAgICBvcmlnaW5hbE5vZGUgPSAmbV9ncmFwaFtvcmlnaW5h
bE5vZGVJbmRleF07Ci0gICAgICAgIH0KKyAgICAgICAgaWYgKG9yaWdpbmFsTm9kZS0+b3AoKSA9
PSBGbHVzaCkKKyAgICAgICAgICAgIG9yaWdpbmFsTm9kZSA9IG9yaWdpbmFsTm9kZS0+Y2hpbGQx
KCkubm9kZSgpOwogICAgICAgICBzd2l0Y2ggKG9yaWdpbmFsTm9kZS0+b3AoKSkgewogICAgICAg
ICBjYXNlIFNldExvY2FsOiB7CiAgICAgICAgICAgICBpZiAoY2hhbmdlUmVmKQpAQCAtMzIzLDcg
KzMxOCw3IEBAIHByaXZhdGU6CiAjaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJC
T1NFKQogICAgICAgICAgICAgZGF0YUxvZ0YoIiAgICAgICAgSXQncyBhIFNldExvY2FsLlxuIik7
CiAjZW5kaWYKLSAgICAgICAgICAgIG1fZ3JhcGguY2hhbmdlSW5kZXgoZWRnZSwgb3JpZ2luYWxO
b2RlLT5jaGlsZDEoKS5pbmRleCgpLCBjaGFuZ2VSZWYpOworICAgICAgICAgICAgbV9ncmFwaC5j
aGFuZ2VDaGlsZChlZGdlLCBvcmlnaW5hbE5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgY2hhbmdlUmVm
KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgR2V0TG9jYWw6
IHsKQEAgLTMzMSw3ICszMjYsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgZGF0YUxvZ0YoIiAg
ICAgICAgSXQncyBhIEdldExvY2FsLlxuIik7CiAjZW5kaWYKICAgICAgICAgICAgIGlmIChvcmln
aW5hbE5vZGUtPnNob3VsZEdlbmVyYXRlKCkpCi0gICAgICAgICAgICAgICAgbV9ncmFwaC5jaGFu
Z2VJbmRleChlZGdlLCBvcmlnaW5hbE5vZGVJbmRleCwgY2hhbmdlUmVmKTsKKyAgICAgICAgICAg
ICAgICBtX2dyYXBoLmNoYW5nZUNoaWxkKGVkZ2UsIG9yaWdpbmFsTm9kZSwgY2hhbmdlUmVmKTsK
ICAgICAgICAgICAgIC8vIElmIHdlIGhhdmUgYSBHZXRMb2NhbCB0aGF0IHBvaW50cyB0byBhIGNo
aWxkIEdldExvY2FsIHRoYXQgaXMgZGVhZCwgdGhlbgogICAgICAgICAgICAgLy8gd2UgaGF2ZSBu
byBuZWVkIHRvIGRvIGFueXRoaW5nOiB0aGlzIG9yaWdpbmFsIEdldExvY2FsIGlzIHN0aWxsIHZh
bGlkLgogICAgICAgICAgICAgYnJlYWs7CkBAIC0zNzUsMjMgKzM3MCwyMSBAQCBwcml2YXRlOgog
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgZGVzdGluYXRpb25CbG9jay0+cGhpcy5zaXplKCk7ICsraSkgewotICAgICAgICAgICAg
Tm9kZUluZGV4IHBoaU5vZGVJbmRleCA9IGRlc3RpbmF0aW9uQmxvY2stPnBoaXNbaV07Ci0gICAg
ICAgICAgICBOb2RlJiBwaGlOb2RlID0gbV9ncmFwaFtwaGlOb2RlSW5kZXhdOwotICAgICAgICAg
ICAgTm9kZUluZGV4IG15Tm9kZUluZGV4ID0gc291cmNlQmxvY2stPnZhcmlhYmxlc0F0VGFpbC5v
cGVyYW5kKHBoaU5vZGUubG9jYWwoKSk7Ci0jaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElP
Tl9WRVJCT1NFKQotICAgICAgICAgICAgZGF0YUxvZ0YoIkNvbnNpZGVyaW5nIHJlbW92aW5nIHJl
ZmVyZW5jZSBmcm9tIHBoaSBAJXUgdG8gQCV1IG9uIGxvY2FsIHIlZDoiLAotICAgICAgICAgICAg
ICAgICAgICBwaGlOb2RlSW5kZXgsIG15Tm9kZUluZGV4LCBwaGlOb2RlLmxvY2FsKCkpOwotI2Vu
ZGlmCi0gICAgICAgICAgICBpZiAobXlOb2RlSW5kZXggPT0gTm9Ob2RlKSB7CisgICAgICAgICAg
ICBOb2RlKiBwaGlOb2RlID0gZGVzdGluYXRpb25CbG9jay0+cGhpc1tpXTsKKyAgICAgICAgICAg
IE5vZGUqIG15Tm9kZSA9IHNvdXJjZUJsb2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZChwaGlO
b2RlLT5sb2NhbCgpKTsKKyAgICAgICAgICAgIGlmICghbXlOb2RlKSB7CiAgICAgICAgICAgICAg
ICAgLy8gVGhpcyB3aWxsIGhhcHBlbiBpZiB0aGVyZSBpcyBhIHBoaSBpbiB0aGUgZGVzdGluYXRp
b24gdGhhdCByZWZlcnMgaW50bwogICAgICAgICAgICAgICAgIC8vIHRoZSBkZXN0aW5hdGlvbiBp
dHNlbGYuCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBOb2RlJiBteU5vZGUgPSBtX2dyYXBoW215Tm9kZUluZGV4XTsKLSAgICAgICAgICAgIGlm
IChteU5vZGUub3AoKSA9PSBHZXRMb2NhbCkKLSAgICAgICAgICAgICAgICBteU5vZGVJbmRleCA9
IG15Tm9kZS5jaGlsZDEoKS5pbmRleCgpOworI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJ
T05fVkVSQk9TRSkKKyAgICAgICAgICAgIGRhdGFMb2dGKCJDb25zaWRlcmluZyByZW1vdmluZyBy
ZWZlcmVuY2UgZnJvbSBwaGkgQCV1IHRvIEAldSBvbiBsb2NhbCByJWQ6IiwKKyAgICAgICAgICAg
ICAgICAgICAgIHBoaU5vZGUtPmluZGV4KCksIG15Tm9kZS0+aW5kZXgoKSwgcGhpTm9kZS0+bG9j
YWwoKSk7CisjZW5kaWYKKyAgICAgICAgICAgIGlmIChteU5vZGUtPm9wKCkgPT0gR2V0TG9jYWwp
CisgICAgICAgICAgICAgICAgbXlOb2RlID0gbXlOb2RlLT5jaGlsZDEoKS5ub2RlKCk7CiAgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSAwOyBqIDwgQWRqYWNlbmN5TGlzdDo6U2l6ZTsgKytq
KQotICAgICAgICAgICAgICAgIHJlbW92ZVBvdGVudGlhbGx5RGVhZFBoaVJlZmVyZW5jZShteU5v
ZGVJbmRleCwgcGhpTm9kZSwgaiwgc291cmNlQmxvY2stPmlzUmVhY2hhYmxlKTsKKyAgICAgICAg
ICAgICAgICByZW1vdmVQb3RlbnRpYWxseURlYWRQaGlSZWZlcmVuY2UobXlOb2RlLCBwaGlOb2Rl
LCBqLCBzb3VyY2VCbG9jay0+aXNSZWFjaGFibGUpOwogI2lmIERGR19FTkFCTEUoREVCVUdfUFJP
UEFHQVRJT05fVkVSQk9TRSkKICAgICAgICAgICAgIGRhdGFMb2dGKCJcbiIpOwogI2VuZGlmCkBA
IC00MTYsNTggKzQwOSw1NyBAQCBwcml2YXRlOgogICAgICAgICBmaXhQaGlzKGJsb2NrSW5kZXgs
IGpldHRpc29uZWRCbG9ja0luZGV4KTsKICAgICB9CiAgICAgCi0gICAgdm9pZCByZW1vdmVQb3Rl
bnRpYWxseURlYWRQaGlSZWZlcmVuY2UoTm9kZUluZGV4IG15Tm9kZUluZGV4LCBOb2RlJiBwaGlO
b2RlLCB1bnNpZ25lZCBlZGdlSW5kZXgsIGJvb2wgY2hhbmdlUmVmKQorICAgIHZvaWQgcmVtb3Zl
UG90ZW50aWFsbHlEZWFkUGhpUmVmZXJlbmNlKE5vZGUqIG15Tm9kZSwgTm9kZSogcGhpTm9kZSwg
dW5zaWduZWQgZWRnZUluZGV4LCBib29sIGNoYW5nZVJlZikKICAgICB7Ci0gICAgICAgIGlmIChw
aGlOb2RlLmNoaWxkcmVuLmNoaWxkKGVkZ2VJbmRleCkuaW5kZXhVbmNoZWNrZWQoKSAhPSBteU5v
ZGVJbmRleCkKKyAgICAgICAgaWYgKHBoaU5vZGUtPmNoaWxkcmVuLmNoaWxkKGVkZ2VJbmRleCku
bm9kZSgpICE9IG15Tm9kZSkKICAgICAgICAgICAgIHJldHVybjsKICNpZiBERkdfRU5BQkxFKERF
QlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCiAgICAgICAgIGRhdGFMb2dGKCIgUmVtb3ZpbmcgcmVm
ZXJlbmNlIGF0IGNoaWxkICV1LiIsIGVkZ2VJbmRleCk7CiAjZW5kaWYKLSAgICAgICAgaWYgKGNo
YW5nZVJlZiAmJiBwaGlOb2RlLnNob3VsZEdlbmVyYXRlKCkpCi0gICAgICAgICAgICBtX2dyYXBo
LmRlcmVmKG15Tm9kZUluZGV4KTsKLSAgICAgICAgcGhpTm9kZS5jaGlsZHJlbi5yZW1vdmVFZGdl
RnJvbUJhZyhlZGdlSW5kZXgpOworICAgICAgICBpZiAoY2hhbmdlUmVmICYmIHBoaU5vZGUtPnNo
b3VsZEdlbmVyYXRlKCkpCisgICAgICAgICAgICBtX2dyYXBoLmRlcmVmKG15Tm9kZSk7CisgICAg
ICAgIHBoaU5vZGUtPmNoaWxkcmVuLnJlbW92ZUVkZ2VGcm9tQmFnKGVkZ2VJbmRleCk7CiAgICAg
fQogICAgIAogICAgIHN0cnVjdCBPcGVyYW5kU3Vic3RpdHV0aW9uIHsKICAgICAgICAgT3BlcmFu
ZFN1YnN0aXR1dGlvbigpCi0gICAgICAgICAgICA6IG9sZENoaWxkKE5vTm9kZSkKLSAgICAgICAg
ICAgICwgbmV3Q2hpbGQoTm9Ob2RlKQorICAgICAgICAgICAgOiBvbGRDaGlsZCgwKQorICAgICAg
ICAgICAgLCBuZXdDaGlsZCgwKQogICAgICAgICB7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAg
ICAgIGV4cGxpY2l0IE9wZXJhbmRTdWJzdGl0dXRpb24oTm9kZUluZGV4IG9sZENoaWxkKQorICAg
ICAgICBleHBsaWNpdCBPcGVyYW5kU3Vic3RpdHV0aW9uKE5vZGUqIG9sZENoaWxkKQogICAgICAg
ICAgICAgOiBvbGRDaGlsZChvbGRDaGlsZCkKICAgICAgICAgICAgICwgbmV3Q2hpbGQob2xkQ2hp
bGQpCiAgICAgICAgIHsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgT3BlcmFuZFN1YnN0
aXR1dGlvbihOb2RlSW5kZXggb2xkQ2hpbGQsIE5vZGVJbmRleCBuZXdDaGlsZCkKKyAgICAgICAg
T3BlcmFuZFN1YnN0aXR1dGlvbihOb2RlKiBvbGRDaGlsZCwgTm9kZSogbmV3Q2hpbGQpCiAgICAg
ICAgICAgICA6IG9sZENoaWxkKG9sZENoaWxkKQogICAgICAgICAgICAgLCBuZXdDaGlsZChuZXdD
aGlsZCkKICAgICAgICAgewotICAgICAgICAgICAgQVNTRVJUKChvbGRDaGlsZCA9PSBOb05vZGUp
ID09IChuZXdDaGlsZCA9PSBOb05vZGUpKTsKKyAgICAgICAgICAgIEFTU0VSVCgoIW9sZENoaWxk
KSA9PSAoIW5ld0NoaWxkKSk7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIHZvaWQgZHVt
cChGSUxFKiBvdXQpCisgICAgICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAog
ICAgICAgICB7Ci0gICAgICAgICAgICBpZiAob2xkQ2hpbGQgPT0gTm9Ob2RlKQotICAgICAgICAg
ICAgICAgIGZwcmludGYob3V0LCAiLSIpOworICAgICAgICAgICAgaWYgKCFvbGRDaGlsZCkKKyAg
ICAgICAgICAgICAgICBvdXQucHJpbnRmKCItIik7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAg
ICAgICAgICAgZnByaW50ZihvdXQsICJAJXUgLT4gQCV1Iiwgb2xkQ2hpbGQsIG5ld0NoaWxkKTsK
KyAgICAgICAgICAgICAgICBvdXQucHJpbnRmKCJAJXUgLT4gQCV1Iiwgb2xkQ2hpbGQtPmluZGV4
KCksIG5ld0NoaWxkLT5pbmRleCgpKTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgTm9k
ZUluZGV4IG9sZENoaWxkOwotICAgICAgICBOb2RlSW5kZXggbmV3Q2hpbGQ7CisgICAgICAgIE5v
ZGUqIG9sZENoaWxkOworICAgICAgICBOb2RlKiBuZXdDaGlsZDsKICAgICB9OwogICAgIAotICAg
IE5vZGVJbmRleCBza2lwR2V0TG9jYWwoTm9kZUluZGV4IG5vZGVJbmRleCkKKyAgICBOb2RlKiBz
a2lwR2V0TG9jYWwoTm9kZSogbm9kZSkKICAgICB7Ci0gICAgICAgIGlmIChub2RlSW5kZXggPT0g
Tm9Ob2RlKQotICAgICAgICAgICAgcmV0dXJuIE5vTm9kZTsKLSAgICAgICAgTm9kZSYgbm9kZSA9
IG1fZ3JhcGhbbm9kZUluZGV4XTsKLSAgICAgICAgaWYgKG5vZGUub3AoKSA9PSBHZXRMb2NhbCkK
LSAgICAgICAgICAgIHJldHVybiBub2RlLmNoaWxkMSgpLmluZGV4KCk7Ci0gICAgICAgIHJldHVy
biBub2RlSW5kZXg7CisgICAgICAgIGlmICghbm9kZSkKKyAgICAgICAgICAgIHJldHVybiAwOwor
ICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBHZXRMb2NhbCkKKyAgICAgICAgICAgIHJldHVybiBu
b2RlLT5jaGlsZDEoKS5ub2RlKCk7CisgICAgICAgIHJldHVybiBub2RlOwogICAgIH0KICAgICAK
ICAgICB2b2lkIHJlY29yZFBvc3NpYmxlSW5jb21pbmdSZWZlcmVuY2UoCkBAIC00NzcsMzAgKzQ2
OSwyOCBAQCBwcml2YXRlOgogICAgICAgICAgICAgc2tpcEdldExvY2FsKHNlY29uZEJsb2NrLT52
YXJpYWJsZXNBdFRhaWwub3BlcmFuZChvcGVyYW5kKSkpOwogICAgIH0KICAgICAKLSAgICB2b2lk
IHJlY29yZE5ld1RhcmdldChPcGVyYW5kczxPcGVyYW5kU3Vic3RpdHV0aW9uPiYgc3Vic3RpdHV0
aW9ucywgaW50IG9wZXJhbmQsIE5vZGVJbmRleCBub2RlSW5kZXgpCisgICAgdm9pZCByZWNvcmRO
ZXdUYXJnZXQoT3BlcmFuZHM8T3BlcmFuZFN1YnN0aXR1dGlvbj4mIHN1YnN0aXR1dGlvbnMsIGlu
dCBvcGVyYW5kLCBOb2RlKiBub2RlKQogICAgIHsKLSAgICAgICAgQVNTRVJUKG1fZ3JhcGhbbm9k
ZUluZGV4XS5vcCgpID09IFNldExvY2FsCi0gICAgICAgICAgICAgICB8fCBtX2dyYXBoW25vZGVJ
bmRleF0ub3AoKSA9PSBTZXRBcmd1bWVudAotICAgICAgICAgICAgICAgfHwgbV9ncmFwaFtub2Rl
SW5kZXhdLm9wKCkgPT0gRmx1c2gKLSAgICAgICAgICAgICAgIHx8IG1fZ3JhcGhbbm9kZUluZGV4
XS5vcCgpID09IFBoaSk7Ci0gICAgICAgIHN1YnN0aXR1dGlvbnMub3BlcmFuZChvcGVyYW5kKS5u
ZXdDaGlsZCA9IG5vZGVJbmRleDsKKyAgICAgICAgQVNTRVJUKG5vZGUtPm9wKCkgPT0gU2V0TG9j
YWwKKyAgICAgICAgICAgICAgIHx8IG5vZGUtPm9wKCkgPT0gU2V0QXJndW1lbnQKKyAgICAgICAg
ICAgICAgIHx8IG5vZGUtPm9wKCkgPT0gRmx1c2gKKyAgICAgICAgICAgICAgIHx8IG5vZGUtPm9w
KCkgPT0gUGhpKTsKKyAgICAgICAgc3Vic3RpdHV0aW9ucy5vcGVyYW5kKG9wZXJhbmQpLm5ld0No
aWxkID0gbm9kZTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBmaXhUYWlsT3BlcmFuZCgKICAgICAg
ICAgQmFzaWNCbG9jayogZmlyc3RCbG9jaywgQmFzaWNCbG9jayogc2Vjb25kQmxvY2ssIGludCBv
cGVyYW5kLAogICAgICAgICBPcGVyYW5kczxPcGVyYW5kU3Vic3RpdHV0aW9uPiYgc3Vic3RpdHV0
aW9ucykKICAgICB7Ci0gICAgICAgIE5vZGVJbmRleCBhdFNlY29uZFRhaWwgPSBzZWNvbmRCbG9j
ay0+dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQob3BlcmFuZCk7CisgICAgICAgIE5vZGUqIGF0U2Vj
b25kVGFpbCA9IHNlY29uZEJsb2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZChvcGVyYW5kKTsK
ICAgICAgICAgCi0gICAgICAgIGlmIChhdFNlY29uZFRhaWwgPT0gTm9Ob2RlKSB7CisgICAgICAg
IGlmICghYXRTZWNvbmRUYWlsKSB7CiAgICAgICAgICAgICAvLyBJZiB0aGUgdmFyaWFibGUgaXMg
ZGVhZCBhdCB0aGUgZW5kIG9mIHRoZSBzZWNvbmQgYmxvY2ssIHRoZW4gZG8gbm90aGluZzsgZXNz
ZW50aWFsbHkKICAgICAgICAgICAgIC8vIHRoaXMgbWVhbnMgdGhhdCB3ZSB3YW50IHRoZSB0YWls
IHN0YXRlIHRvIHJlZmxlY3Qgd2hhdGV2ZXIgdGhlIGZpcnN0IGJsb2NrIGRpZC4KICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgfQogCi0gICAgICAgIE5vZGUmIHNlY29uZE5vZGUgPSBtX2dy
YXBoW2F0U2Vjb25kVGFpbF07Ci0gICAgICAgIAotICAgICAgICBzd2l0Y2ggKHNlY29uZE5vZGUu
b3AoKSkgeworICAgICAgICBzd2l0Y2ggKGF0U2Vjb25kVGFpbC0+b3AoKSkgewogICAgICAgICBj
YXNlIFNldExvY2FsOgogICAgICAgICBjYXNlIEZsdXNoOiB7CiAgICAgICAgICAgICAvLyBUaGUg
c2Vjb25kIGJsb2NrIGRpZCBpbnRlcmVzdGluZyB0aGluZ3MgdG8gdGhlIHZhcmlhYmxlcywgc28g
dXBkYXRlIHRoZSB0YWlsCkBAIC01MTEsNyArNTAxLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAg
IAogICAgICAgICBjYXNlIFBoaTogewogICAgICAgICAgICAgLy8gS2VlcCB3aGF0IHdhcyBpbiB0
aGUgZmlyc3QgYmxvY2suCi0gICAgICAgICAgICBBU1NFUlQoZmlyc3RCbG9jay0+dmFyaWFibGVz
QXRUYWlsLm9wZXJhbmQob3BlcmFuZCkgIT0gTm9Ob2RlKTsKKyAgICAgICAgICAgIEFTU0VSVChm
aXJzdEJsb2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZChvcGVyYW5kKSk7CiAgICAgICAgICAg
ICByZWNvcmROZXdUYXJnZXQoc3Vic3RpdHV0aW9ucywgb3BlcmFuZCwgc2tpcEdldExvY2FsKGZp
cnN0QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKG9wZXJhbmQpKSk7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgfQpAQCAtNTIwLDI4ICs1MTAsMjggQEAgcHJpdmF0ZToKICAgICAg
ICAgICAgIC8vIElmIGl0J3MgYSBHZXRMb2NhbCBvbiBhIGNhcHR1cmVkIHZhciwgdGhlbiBkZWZp
bml0ZWx5IGtlZXAgd2hhdCB3YXMKICAgICAgICAgICAgIC8vIGluIHRoZSBzZWNvbmQgYmxvY2su
IEluIHBhcnRpY3VsYXIsIGl0J3MgcG9zc2libGUgdGhhdCB0aGUgZmlyc3QKICAgICAgICAgICAg
IC8vIGJsb2NrIGRvZXNuJ3QgZXZlbiBrbm93IGFib3V0IHRoaXMgdmFyaWFibGUuCi0gICAgICAg
ICAgICBpZiAoc2Vjb25kTm9kZS52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+aXNDYXB0dXJlZCgpKSB7
CisgICAgICAgICAgICBpZiAoYXRTZWNvbmRUYWlsLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+aXND
YXB0dXJlZCgpKSB7CiAgICAgICAgICAgICAgICAgZmlyc3RCbG9jay0+dmFyaWFibGVzQXRUYWls
Lm9wZXJhbmQob3BlcmFuZCkgPSBhdFNlY29uZFRhaWw7Ci0gICAgICAgICAgICAgICAgcmVjb3Jk
TmV3VGFyZ2V0KHN1YnN0aXR1dGlvbnMsIG9wZXJhbmQsIHNlY29uZE5vZGUuY2hpbGQxKCkuaW5k
ZXgoKSk7CisgICAgICAgICAgICAgICAgcmVjb3JkTmV3VGFyZ2V0KHN1YnN0aXR1dGlvbnMsIG9w
ZXJhbmQsIGF0U2Vjb25kVGFpbC0+Y2hpbGQxKCkubm9kZSgpKTsKICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICAgICAgLy8gSXQncyBw
b3NzaWJsZSB0aGF0IHRoZSBzZWNvbmQgYmxvY2sgaGFkIGEgR2V0TG9jYWwgYW5kIHRoZSBmaXJz
dCBibG9jawogICAgICAgICAgICAgLy8gaGFkIGEgU2V0QXJndW1lbnQgb3IgYSBQaGkuIFRoZW4g
dXBkYXRlIHRoZSB0YWlsLiBPdGhlcndpc2Uga2VlcCB3aGF0IHdhcyBpbiB0aGUKICAgICAgICAg
ICAgIC8vIGZpcnN0IGJsb2NrLgotICAgICAgICAgICAgTm9kZUluZGV4IGF0Rmlyc3RUYWlsID0g
Zmlyc3RCbG9jay0+dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQob3BlcmFuZCk7Ci0gICAgICAgICAg
ICBBU1NFUlQoYXRGaXJzdFRhaWwgIT0gTm9Ob2RlKTsKLSAgICAgICAgICAgIHN3aXRjaCAobV9n
cmFwaFthdEZpcnN0VGFpbF0ub3AoKSkgeworICAgICAgICAgICAgTm9kZSogYXRGaXJzdFRhaWwg
PSBmaXJzdEJsb2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZChvcGVyYW5kKTsKKyAgICAgICAg
ICAgIEFTU0VSVChhdEZpcnN0VGFpbCk7CisgICAgICAgICAgICBzd2l0Y2ggKGF0Rmlyc3RUYWls
LT5vcCgpKSB7CiAgICAgICAgICAgICBjYXNlIFNldEFyZ3VtZW50OgogICAgICAgICAgICAgY2Fz
ZSBQaGk6CiAgICAgICAgICAgICAgICAgZmlyc3RCbG9jay0+dmFyaWFibGVzQXRUYWlsLm9wZXJh
bmQob3BlcmFuZCkgPSBhdFNlY29uZFRhaWw7Ci0gICAgICAgICAgICAgICAgcmVjb3JkTmV3VGFy
Z2V0KHN1YnN0aXR1dGlvbnMsIG9wZXJhbmQsIHNlY29uZE5vZGUuY2hpbGQxKCkuaW5kZXgoKSk7
CisgICAgICAgICAgICAgICAgcmVjb3JkTmV3VGFyZ2V0KHN1YnN0aXR1dGlvbnMsIG9wZXJhbmQs
IGF0U2Vjb25kVGFpbC0+Y2hpbGQxKCkubm9kZSgpKTsKICAgICAgICAgICAgICAgICBicmVhazsK
IAogICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICAvLyBLZWVwIHdoYXQgd2Fz
IGluIHRoZSBmaXJzdCBibG9jaywgYW5kIGFkanVzdCB0aGUgc3Vic3RpdHV0aW9uIHRvIGFjY291
bnQgZm9yCiAgICAgICAgICAgICAgICAgLy8gdGhlIGZhY3QgdGhhdCBzdWNjZXNzb3JzIHdpbGwg
cmVmZXIgdG8gdGhlIGNoaWxkIG9mIHRoZSBHZXRMb2NhbC4KLSAgICAgICAgICAgICAgICBBU1NF
UlQoZmlyc3RCbG9jay0+dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQob3BlcmFuZCkgIT0gTm9Ob2Rl
KTsKKyAgICAgICAgICAgICAgICBBU1NFUlQoZmlyc3RCbG9jay0+dmFyaWFibGVzQXRUYWlsLm9w
ZXJhbmQob3BlcmFuZCkpOwogICAgICAgICAgICAgICAgIHJlY29yZE5ld1RhcmdldChzdWJzdGl0
dXRpb25zLCBvcGVyYW5kLCBza2lwR2V0TG9jYWwoZmlyc3RCbG9jay0+dmFyaWFibGVzQXRUYWls
Lm9wZXJhbmQob3BlcmFuZCkpKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
IH0KQEAgLTU2NywxMCArNTU3LDEwIEBAIHByaXZhdGU6CiAgICAgICAgIAogICAgICAgICAvLyBS
ZW1vdmUgdGhlIHRlcm1pbmFsIG9mIGZpcnN0QmxvY2sgc2luY2Ugd2UgZG9uJ3QgbmVlZCBpdCBh
bnltb3JlLiBXZWxsLCB3ZSBkb24ndAogICAgICAgICAvLyByZWFsbHkgcmVtb3ZlIGl0OyB3ZSBh
Y3R1YWxseSB0dXJuIGl0IGludG8gYSBQaGFudG9tLgotICAgICAgICBBU1NFUlQobV9ncmFwaFtm
aXJzdEJsb2NrLT5sYXN0KCldLmlzVGVybWluYWwoKSk7Ci0gICAgICAgIENvZGVPcmlnaW4gYm91
bmRhcnlDb2RlT3JpZ2luID0gbV9ncmFwaFtmaXJzdEJsb2NrLT5sYXN0KCldLmNvZGVPcmlnaW47
Ci0gICAgICAgIG1fZ3JhcGhbZmlyc3RCbG9jay0+bGFzdCgpXS5zZXRPcEFuZERlZmF1bHRGbGFn
cyhQaGFudG9tKTsKLSAgICAgICAgQVNTRVJUKG1fZ3JhcGhbZmlyc3RCbG9jay0+bGFzdCgpXS5y
ZWZDb3VudCgpID09IDEpOworICAgICAgICBBU1NFUlQoZmlyc3RCbG9jay0+bGFzdCgpLT5pc1Rl
cm1pbmFsKCkpOworICAgICAgICBDb2RlT3JpZ2luIGJvdW5kYXJ5Q29kZU9yaWdpbiA9IGZpcnN0
QmxvY2stPmxhc3QoKS0+Y29kZU9yaWdpbjsKKyAgICAgICAgZmlyc3RCbG9jay0+bGFzdCgpLT5z
ZXRPcEFuZERlZmF1bHRGbGFncyhQaGFudG9tKTsKKyAgICAgICAgQVNTRVJUKGZpcnN0QmxvY2st
Pmxhc3QoKS0+cmVmQ291bnQoKSA9PSAxKTsKICAgICAgICAgCiAgICAgICAgIGlmIChqZXR0aXNv
bmVkQmxvY2tJbmRleCAhPSBOb0Jsb2NrKSB7CiAgICAgICAgICAgICBCYXNpY0Jsb2NrKiBqZXR0
aXNvbmVkQmxvY2sgPSBtX2dyYXBoLm1fYmxvY2tzW2pldHRpc29uZWRCbG9ja0luZGV4XS5nZXQo
KTsKQEAgLTU5OSwyOCArNTg5LDI1IEBAIHByaXZhdGU6CiAgICAgICAgICAgICByZWNvcmRQb3Nz
aWJsZUluY29taW5nUmVmZXJlbmNlKHNlY29uZEJsb2NrLCBzdWJzdGl0dXRpb25zLCBpKTsKIAog
ICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNlY29uZEJsb2NrLT5zaXplKCk7ICsraSkg
ewotICAgICAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRleCA9IHNlY29uZEJsb2NrLT5hdChpKTsK
LSAgICAgICAgICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW25vZGVJbmRleF07CisgICAgICAgICAg
ICBOb2RlKiBub2RlID0gc2Vjb25kQmxvY2stPmF0KGkpOwogICAgICAgICAgICAgCiAgICAgICAg
ICAgICBib29sIGNoaWxkcmVuQWxyZWFkeUZpeGVkID0gZmFsc2U7CiAgICAgICAgICAgICAKLSAg
ICAgICAgICAgIHN3aXRjaCAobm9kZS5vcCgpKSB7CisgICAgICAgICAgICBzd2l0Y2ggKG5vZGUt
Pm9wKCkpIHsKICAgICAgICAgICAgIGNhc2UgUGhhbnRvbTogewotICAgICAgICAgICAgICAgIGlm
ICghbm9kZS5jaGlsZDEoKSkKKyAgICAgICAgICAgICAgICBpZiAoIW5vZGUtPmNoaWxkMSgpKQog
ICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAg
ICAgICBBU1NFUlQobm9kZS5zaG91bGRHZW5lcmF0ZSgpKTsKLSAgICAgICAgICAgICAgICBOb2Rl
JiBwb3NzaWJsZUxvY2FsT3AgPSBtX2dyYXBoW25vZGUuY2hpbGQxKCldOwotICAgICAgICAgICAg
ICAgIGlmIChwb3NzaWJsZUxvY2FsT3Aub3AoKSAhPSBHZXRMb2NhbAotICAgICAgICAgICAgICAg
ICAgICAmJiBwb3NzaWJsZUxvY2FsT3AuaGFzTG9jYWwoKQotICAgICAgICAgICAgICAgICAgICAm
JiAhcG9zc2libGVMb2NhbE9wLnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5pc0NhcHR1cmVkKCkpIHsK
LSAgICAgICAgICAgICAgICAgICAgTm9kZUluZGV4IHNldExvY2FsSW5kZXggPQotICAgICAgICAg
ICAgICAgICAgICAgICAgZmlyc3RCbG9jay0+dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQocG9zc2li
bGVMb2NhbE9wLmxvY2FsKCkpOwotICAgICAgICAgICAgICAgICAgICBOb2RlJiBzZXRMb2NhbCA9
IG1fZ3JhcGhbc2V0TG9jYWxJbmRleF07Ci0gICAgICAgICAgICAgICAgICAgIGlmIChzZXRMb2Nh
bC5vcCgpID09IFNldExvY2FsKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLmNo
YW5nZUVkZ2Uobm9kZS5jaGlsZHJlbi5jaGlsZDEoKSwgc2V0TG9jYWwuY2hpbGQxKCkpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKCFub2RlLmNoaWxkMigpKTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIEFTU0VSVCghbm9kZS5jaGlsZDMoKSk7CisgICAgICAgICAgICAgICAgQVNT
RVJUKG5vZGUtPnNob3VsZEdlbmVyYXRlKCkpOworICAgICAgICAgICAgICAgIE5vZGUqIHBvc3Np
YmxlTG9jYWxPcCA9IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKKyAgICAgICAgICAgICAgICBpZiAo
cG9zc2libGVMb2NhbE9wLT5vcCgpICE9IEdldExvY2FsCisgICAgICAgICAgICAgICAgICAgICYm
IHBvc3NpYmxlTG9jYWxPcC0+aGFzTG9jYWwoKQorICAgICAgICAgICAgICAgICAgICAmJiAhcG9z
c2libGVMb2NhbE9wLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+aXNDYXB0dXJlZCgpKSB7CisgICAg
ICAgICAgICAgICAgICAgIE5vZGUqIHNldExvY2FsID0gZmlyc3RCbG9jay0+dmFyaWFibGVzQXRU
YWlsLm9wZXJhbmQocG9zc2libGVMb2NhbE9wLT5sb2NhbCgpKTsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKHNldExvY2FsLT5vcCgpID09IFNldExvY2FsKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBtX2dyYXBoLmNoYW5nZUVkZ2Uobm9kZS0+Y2hpbGRyZW4uY2hpbGQxKCksIHNldExvY2Fs
LT5jaGlsZDEoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQoIW5vZGUtPmNoaWxk
MigpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVCghbm9kZS0+Y2hpbGQzKCkpOwog
ICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW5BbHJlYWR5Rml4ZWQgPSB0cnVlOwogICAg
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQpAQCAtNjM3LDExICs2MjQsMTEg
QEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAvLyBTaW1pbGFybHkgZm9yIEdldExvY2FsOyBp
dCBjb3VsZCB1c2UgYW55IG9mIHRob3NlIGV4Y2VwdCBmb3IKICAgICAgICAgICAgICAgICAvLyBH
ZXRMb2NhbC4gSWYgaXQgdXNlcyBhIFBoaSB0aGVuIGl0IHNob3VsZCBiZSByZWRpcmVjdGVkIHRv
IHVzZSBhCiAgICAgICAgICAgICAgICAgLy8gUGhpIGZyb20gdGhlIHRhaWwgb3BlcmFuZC4KLSAg
ICAgICAgICAgICAgICBpZiAobV9ncmFwaFtub2RlLmNoaWxkMSgpXS5vcCgpICE9IFBoaSkKKyAg
ICAgICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPm9wKCkgIT0gUGhpKQogICAgICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBOb2Rl
SW5kZXggYXRGaXJzdEluZGV4ID0gZmlyc3RCbG9jay0+dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQo
bm9kZS5sb2NhbCgpKTsKLSAgICAgICAgICAgICAgICBtX2dyYXBoLmNoYW5nZUVkZ2Uobm9kZS5j
aGlsZHJlbi5jaGlsZDEoKSwgRWRnZShza2lwR2V0TG9jYWwoYXRGaXJzdEluZGV4KSksIG5vZGUu
c2hvdWxkR2VuZXJhdGUoKSk7CisgICAgICAgICAgICAgICAgTm9kZSogYXRGaXJzdCA9IGZpcnN0
QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKG5vZGUtPmxvY2FsKCkpOworICAgICAgICAg
ICAgICAgIG1fZ3JhcGguY2hhbmdlRWRnZShub2RlLT5jaGlsZHJlbi5jaGlsZDEoKSwgRWRnZShz
a2lwR2V0TG9jYWwoYXRGaXJzdCkpLCBub2RlLT5zaG91bGRHZW5lcmF0ZSgpKTsKICAgICAgICAg
ICAgICAgICBjaGlsZHJlbkFscmVhZHlGaXhlZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICB9CkBAIC02NTEsMzAgKzYzOCwzMCBAQCBwcml2YXRlOgogICAgICAg
ICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAoIWNoaWxkcmVuQWxyZWFkeUZp
eGVkKSB7Ci0gICAgICAgICAgICAgICAgYm9vbCBjaGFuZ2VSZWYgPSBub2RlLnNob3VsZEdlbmVy
YXRlKCk7CisgICAgICAgICAgICAgICAgYm9vbCBjaGFuZ2VSZWYgPSBub2RlLT5zaG91bGRHZW5l
cmF0ZSgpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgLy8gSWYgdGhlIGNoaWxkIGlz
IGEgR2V0TG9jYWwsIHRoZW4gd2UgbWlnaHQgbGlrZSB0byBmaXggaXQuCi0gICAgICAgICAgICAg
ICAgaWYgKG5vZGUuZmxhZ3MoKSAmIE5vZGVIYXNWYXJBcmdzKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgY2hpbGRJZHggPSBub2RlLmZpcnN0Q2hpbGQoKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICBjaGlsZElkeCA8IG5vZGUuZmlyc3RDaGlsZCgpICsgbm9kZS5udW1D
aGlsZHJlbigpOworICAgICAgICAgICAgICAgIGlmIChub2RlLT5mbGFncygpICYgTm9kZUhhc1Zh
ckFyZ3MpIHsKKyAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBjaGlsZElkeCA9IG5v
ZGUtPmZpcnN0Q2hpbGQoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZElkeCA8IG5v
ZGUtPmZpcnN0Q2hpbGQoKSArIG5vZGUtPm51bUNoaWxkcmVuKCk7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgKytjaGlsZElkeCkgewogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEhbV9n
cmFwaC5tX3ZhckFyZ0NoaWxkcmVuW2NoaWxkSWR4XSkKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBmaXhQb3NzaWJsZUdldExvY2FsKGZpcnN0QmxvY2ssIG1fZ3JhcGgubV92YXJBcmdDaGls
ZHJlbltjaGlsZElkeF0sIGNoYW5nZVJlZik7CiAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICB9IGVsc2UgaWYgKCEhbm9kZS5jaGlsZDEoKSkgewotICAgICAgICAgICAgICAg
ICAgICBmaXhQb3NzaWJsZUdldExvY2FsKGZpcnN0QmxvY2ssIG5vZGUuY2hpbGRyZW4uY2hpbGQx
KCksIGNoYW5nZVJlZik7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghIW5vZGUuY2hpbGQyKCkp
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZpeFBvc3NpYmxlR2V0TG9jYWwoZmlyc3RCbG9j
aywgbm9kZS5jaGlsZHJlbi5jaGlsZDIoKSwgY2hhbmdlUmVmKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICghIW5vZGUuY2hpbGQzKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
Zml4UG9zc2libGVHZXRMb2NhbChmaXJzdEJsb2NrLCBub2RlLmNoaWxkcmVuLmNoaWxkMygpLCBj
aGFuZ2VSZWYpOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoISFub2RlLT5jaGlsZDEoKSkg
eworICAgICAgICAgICAgICAgICAgICBmaXhQb3NzaWJsZUdldExvY2FsKGZpcnN0QmxvY2ssIG5v
ZGUtPmNoaWxkcmVuLmNoaWxkMSgpLCBjaGFuZ2VSZWYpOworICAgICAgICAgICAgICAgICAgICBp
ZiAoISFub2RlLT5jaGlsZDIoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgZml4UG9zc2li
bGVHZXRMb2NhbChmaXJzdEJsb2NrLCBub2RlLT5jaGlsZHJlbi5jaGlsZDIoKSwgY2hhbmdlUmVm
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghIW5vZGUtPmNoaWxkMygpKQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGZpeFBvc3NpYmxlR2V0TG9jYWwoZmlyc3RCbG9jaywgbm9k
ZS0+Y2hpbGRyZW4uY2hpbGQzKCksIGNoYW5nZVJlZik7CiAgICAgICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGZpcnN0Qmxv
Y2stPmFwcGVuZChub2RlSW5kZXgpOworICAgICAgICAgICAgZmlyc3RCbG9jay0+YXBwZW5kKG5v
ZGUpOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBBU1NFUlQobV9ncmFwaFtmaXJzdEJs
b2NrLT5sYXN0KCldLmlzVGVybWluYWwoKSk7CisgICAgICAgIEFTU0VSVChmaXJzdEJsb2NrLT5s
YXN0KCktPmlzVGVybWluYWwoKSk7CiAgICAgICAgIAogICAgICAgICAvLyBGaXggdGhlIHByZWRl
Y2Vzc29ycyBvZiBteSBuZXcgc3VjY2Vzc29ycy4gVGhpcyBpcyB0cmlja3ksIHNpbmNlIHdlIGFy
ZSBnb2luZyB0byByZXNldAogICAgICAgICAvLyBhbGwgcHJlZGVjZXNzb3JzIGFueXdheSBkdWUg
dG8gcmVhY2hhYmlsaXR5IGFuYWx5c2lzLiBCdXQgd2UgbmVlZCB0byBmaXggdGhlCkBAIC03MDQs
MjYgKzY5MSwyNCBAQCBwcml2YXRlOgogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2dyYXBo
Lm51bVN1Y2Nlc3NvcnMoZmlyc3RCbG9jayk7IGktLTspIHsKICAgICAgICAgICAgIEJhc2ljQmxv
Y2sqIHN1Y2Nlc3NvciA9IG1fZ3JhcGgubV9ibG9ja3NbbV9ncmFwaC5zdWNjZXNzb3IoZmlyc3RC
bG9jaywgaSldLmdldCgpOwogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gMDsgaiA8IHN1
Y2Nlc3Nvci0+cGhpcy5zaXplKCk7ICsraikgewotICAgICAgICAgICAgICAgIE5vZGVJbmRleCBw
aGlOb2RlSW5kZXggPSBzdWNjZXNzb3ItPnBoaXNbal07Ci0gICAgICAgICAgICAgICAgTm9kZSYg
cGhpTm9kZSA9IG1fZ3JhcGhbcGhpTm9kZUluZGV4XTsKLSAgICAgICAgICAgICAgICBib29sIGNo
YW5nZVJlZiA9IHBoaU5vZGUuc2hvdWxkR2VuZXJhdGUoKTsKLSAgICAgICAgICAgICAgICBPcGVy
YW5kU3Vic3RpdHV0aW9uIHN1YnN0aXR1dGlvbiA9IHN1YnN0aXR1dGlvbnMub3BlcmFuZChwaGlO
b2RlLmxvY2FsKCkpOworICAgICAgICAgICAgICAgIE5vZGUqIHBoaU5vZGUgPSBzdWNjZXNzb3It
PnBoaXNbal07CisgICAgICAgICAgICAgICAgYm9vbCBjaGFuZ2VSZWYgPSBwaGlOb2RlLT5zaG91
bGRHZW5lcmF0ZSgpOworICAgICAgICAgICAgICAgIE9wZXJhbmRTdWJzdGl0dXRpb24gc3Vic3Rp
dHV0aW9uID0gc3Vic3RpdHV0aW9ucy5vcGVyYW5kKHBoaU5vZGUtPmxvY2FsKCkpOwogI2lmIERG
R19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKLSAgICAgICAgICAgICAgICBkYXRh
TG9nRigiICAgIFBlcmZvcm1pbmcgb3BlcmFuZCBzdWJzdGl0dXRpb24gQCV1IC0+IEAldS5cbiIs
Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdWJzdGl0dXRpb24ub2xkQ2hpbGQsIHN1YnN0aXR1
dGlvbi5uZXdDaGlsZCk7CisgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgIFBlcmZvcm1pbmcg
b3BlcmFuZCBzdWJzdGl0dXRpb24gIiwgc3Vic3RpdHV0aW9uLCAiLlxuIik7CiAjZW5kaWYKLSAg
ICAgICAgICAgICAgICBpZiAoIXBoaU5vZGUuY2hpbGQxKCkpCisgICAgICAgICAgICAgICAgaWYg
KCFwaGlOb2RlLT5jaGlsZDEoKSkKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgICAgICAgICAgaWYgKHBoaU5vZGUuY2hpbGQxKCkuaW5kZXgoKSA9PSBzdWJzdGl0dXRpb24u
b2xkQ2hpbGQpCi0gICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguY2hhbmdlSW5kZXgocGhpTm9k
ZS5jaGlsZHJlbi5jaGlsZDEoKSwgc3Vic3RpdHV0aW9uLm5ld0NoaWxkLCBjaGFuZ2VSZWYpOwot
ICAgICAgICAgICAgICAgIGlmICghcGhpTm9kZS5jaGlsZDIoKSkKKyAgICAgICAgICAgICAgICBp
ZiAocGhpTm9kZS0+Y2hpbGQxKCkgPT0gc3Vic3RpdHV0aW9uLm9sZENoaWxkKQorICAgICAgICAg
ICAgICAgICAgICBtX2dyYXBoLmNoYW5nZUNoaWxkKHBoaU5vZGUtPmNoaWxkcmVuLmNoaWxkMSgp
LCBzdWJzdGl0dXRpb24ubmV3Q2hpbGQsIGNoYW5nZVJlZik7CisgICAgICAgICAgICAgICAgaWYg
KCFwaGlOb2RlLT5jaGlsZDIoKSkKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgICAgICAgICAgaWYgKHBoaU5vZGUuY2hpbGQyKCkuaW5kZXgoKSA9PSBzdWJzdGl0dXRpb24u
b2xkQ2hpbGQpCi0gICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguY2hhbmdlSW5kZXgocGhpTm9k
ZS5jaGlsZHJlbi5jaGlsZDIoKSwgc3Vic3RpdHV0aW9uLm5ld0NoaWxkLCBjaGFuZ2VSZWYpOwot
ICAgICAgICAgICAgICAgIGlmICghcGhpTm9kZS5jaGlsZDMoKSkKKyAgICAgICAgICAgICAgICBp
ZiAocGhpTm9kZS0+Y2hpbGQyKCkgPT0gc3Vic3RpdHV0aW9uLm9sZENoaWxkKQorICAgICAgICAg
ICAgICAgICAgICBtX2dyYXBoLmNoYW5nZUNoaWxkKHBoaU5vZGUtPmNoaWxkcmVuLmNoaWxkMigp
LCBzdWJzdGl0dXRpb24ubmV3Q2hpbGQsIGNoYW5nZVJlZik7CisgICAgICAgICAgICAgICAgaWYg
KCFwaGlOb2RlLT5jaGlsZDMoKSkKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgICAgICAgICAgaWYgKHBoaU5vZGUuY2hpbGQzKCkuaW5kZXgoKSA9PSBzdWJzdGl0dXRpb24u
b2xkQ2hpbGQpCi0gICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguY2hhbmdlSW5kZXgocGhpTm9k
ZS5jaGlsZHJlbi5jaGlsZDMoKSwgc3Vic3RpdHV0aW9uLm5ld0NoaWxkLCBjaGFuZ2VSZWYpOwor
ICAgICAgICAgICAgICAgIGlmIChwaGlOb2RlLT5jaGlsZDMoKSA9PSBzdWJzdGl0dXRpb24ub2xk
Q2hpbGQpCisgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguY2hhbmdlQ2hpbGQocGhpTm9kZS0+
Y2hpbGRyZW4uY2hpbGQzKCksIHN1YnN0aXR1dGlvbi5uZXdDaGlsZCwgY2hhbmdlUmVmKTsKICAg
ICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQ1NFUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQ1NFUGhhc2UuY3BwCShyZXZpc2lvbiAxNDA5MDQpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0NTRVBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTQsMjQg
KzU0LDI0IEBAIHB1YmxpYzoKICAgICAKIHByaXZhdGU6CiAgICAgCi0gICAgTm9kZUluZGV4IGNh
bm9uaWNhbGl6ZShOb2RlSW5kZXggbm9kZUluZGV4KQorICAgIE5vZGUqIGNhbm9uaWNhbGl6ZShO
b2RlKiBub2RlKQogICAgIHsKLSAgICAgICAgaWYgKG5vZGVJbmRleCA9PSBOb05vZGUpCi0gICAg
ICAgICAgICByZXR1cm4gTm9Ob2RlOworICAgICAgICBpZiAoIW5vZGUpCisgICAgICAgICAgICBy
ZXR1cm4gMDsKICAgICAgICAgCi0gICAgICAgIGlmIChtX2dyYXBoW25vZGVJbmRleF0ub3AoKSA9
PSBWYWx1ZVRvSW50MzIpCi0gICAgICAgICAgICBub2RlSW5kZXggPSBtX2dyYXBoW25vZGVJbmRl
eF0uY2hpbGQxKCkuaW5kZXgoKTsKKyAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gVmFsdWVUb0lu
dDMyKQorICAgICAgICAgICAgbm9kZSA9IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKICAgICAgICAg
Ci0gICAgICAgIHJldHVybiBub2RlSW5kZXg7CisgICAgICAgIHJldHVybiBub2RlOwogICAgIH0K
LSAgICBOb2RlSW5kZXggY2Fub25pY2FsaXplKEVkZ2Ugbm9kZVVzZSkKKyAgICBOb2RlKiBjYW5v
bmljYWxpemUoRWRnZSBlZGdlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGNhbm9uaWNhbGl6ZShu
b2RlVXNlLmluZGV4VW5jaGVja2VkKCkpOworICAgICAgICByZXR1cm4gY2Fub25pY2FsaXplKGVk
Z2Uubm9kZSgpKTsKICAgICB9CiAgICAgCiAgICAgdW5zaWduZWQgZW5kSW5kZXhGb3JQdXJlQ1NF
KCkKICAgICB7Ci0gICAgICAgIHVuc2lnbmVkIHJlc3VsdCA9IG1fbGFzdFNlZW5bbV9ncmFwaFtt
X2NvbXBpbGVJbmRleF0ub3AoKV07CisgICAgICAgIHVuc2lnbmVkIHJlc3VsdCA9IG1fbGFzdFNl
ZW5bbV9jdXJyZW50Tm9kZS0+b3AoKV07CiAgICAgICAgIGlmIChyZXN1bHQgPT0gVUlOVF9NQVgp
CiAgICAgICAgICAgICByZXN1bHQgPSAwOwogICAgICAgICBlbHNlCkBAIC04MywzMDggKzgzLDMw
MyBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIAotICAgIE5vZGVJ
bmRleCBwdXJlQ1NFKE5vZGUmIG5vZGUpCisgICAgTm9kZSogcHVyZUNTRShOb2RlKiBub2RlKQog
ICAgIHsKLSAgICAgICAgTm9kZUluZGV4IGNoaWxkMSA9IGNhbm9uaWNhbGl6ZShub2RlLmNoaWxk
MSgpKTsKLSAgICAgICAgTm9kZUluZGV4IGNoaWxkMiA9IGNhbm9uaWNhbGl6ZShub2RlLmNoaWxk
MigpKTsKLSAgICAgICAgTm9kZUluZGV4IGNoaWxkMyA9IGNhbm9uaWNhbGl6ZShub2RlLmNoaWxk
MygpKTsKKyAgICAgICAgTm9kZSogY2hpbGQxID0gY2Fub25pY2FsaXplKG5vZGUtPmNoaWxkMSgp
KTsKKyAgICAgICAgTm9kZSogY2hpbGQyID0gY2Fub25pY2FsaXplKG5vZGUtPmNoaWxkMigpKTsK
KyAgICAgICAgTm9kZSogY2hpbGQzID0gY2Fub25pY2FsaXplKG5vZGUtPmNoaWxkMygpKTsKICAg
ICAgICAgCiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGVuZEluZGV4Rm9yUHVyZUNTRSgpOyBp
LS07KSB7Ci0gICAgICAgICAgICBOb2RlSW5kZXggaW5kZXggPSBtX2N1cnJlbnRCbG9jay0+YXQo
aSk7Ci0gICAgICAgICAgICBpZiAoaW5kZXggPT0gY2hpbGQxIHx8IGluZGV4ID09IGNoaWxkMiB8
fCBpbmRleCA9PSBjaGlsZDMpCisgICAgICAgICAgICBOb2RlKiBvdGhlck5vZGUgPSBtX2N1cnJl
bnRCbG9jay0+YXQoaSk7CisgICAgICAgICAgICBpZiAob3RoZXJOb2RlID09IGNoaWxkMSB8fCBv
dGhlck5vZGUgPT0gY2hpbGQyIHx8IG90aGVyTm9kZSA9PSBjaGlsZDMpCiAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAKLSAgICAgICAgICAgIE5vZGUmIG90aGVyTm9kZSA9IG1fZ3JhcGhbaW5kZXhd
OwotICAgICAgICAgICAgaWYgKCFvdGhlck5vZGUuc2hvdWxkR2VuZXJhdGUoKSkKKyAgICAgICAg
ICAgIGlmICghb3RoZXJOb2RlLT5zaG91bGRHZW5lcmF0ZSgpKQogICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAobm9kZS5vcCgpICE9IG90aGVy
Tm9kZS5vcCgpKQorICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgIT0gb3RoZXJOb2RlLT5vcCgp
KQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBp
ZiAobm9kZS5hcml0aE5vZGVGbGFncygpICE9IG90aGVyTm9kZS5hcml0aE5vZGVGbGFncygpKQor
ICAgICAgICAgICAgaWYgKG5vZGUtPmFyaXRoTm9kZUZsYWdzKCkgIT0gb3RoZXJOb2RlLT5hcml0
aE5vZGVGbGFncygpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgCi0g
ICAgICAgICAgICBOb2RlSW5kZXggb3RoZXJDaGlsZCA9IGNhbm9uaWNhbGl6ZShvdGhlck5vZGUu
Y2hpbGQxKCkpOwotICAgICAgICAgICAgaWYgKG90aGVyQ2hpbGQgPT0gTm9Ob2RlKQotICAgICAg
ICAgICAgICAgIHJldHVybiBpbmRleDsKKyAgICAgICAgICAgIE5vZGUqIG90aGVyQ2hpbGQgPSBj
YW5vbmljYWxpemUob3RoZXJOb2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICBpZiAoIW90aGVy
Q2hpbGQpCisgICAgICAgICAgICAgICAgcmV0dXJuIG90aGVyTm9kZTsKICAgICAgICAgICAgIGlm
IChvdGhlckNoaWxkICE9IGNoaWxkMSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAg
ICAgICAgIAotICAgICAgICAgICAgb3RoZXJDaGlsZCA9IGNhbm9uaWNhbGl6ZShvdGhlck5vZGUu
Y2hpbGQyKCkpOwotICAgICAgICAgICAgaWYgKG90aGVyQ2hpbGQgPT0gTm9Ob2RlKQotICAgICAg
ICAgICAgICAgIHJldHVybiBpbmRleDsKKyAgICAgICAgICAgIG90aGVyQ2hpbGQgPSBjYW5vbmlj
YWxpemUob3RoZXJOb2RlLT5jaGlsZDIoKSk7CisgICAgICAgICAgICBpZiAoIW90aGVyQ2hpbGQp
CisgICAgICAgICAgICAgICAgcmV0dXJuIG90aGVyTm9kZTsKICAgICAgICAgICAgIGlmIChvdGhl
ckNoaWxkICE9IGNoaWxkMikKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAg
IAotICAgICAgICAgICAgb3RoZXJDaGlsZCA9IGNhbm9uaWNhbGl6ZShvdGhlck5vZGUuY2hpbGQz
KCkpOwotICAgICAgICAgICAgaWYgKG90aGVyQ2hpbGQgPT0gTm9Ob2RlKQotICAgICAgICAgICAg
ICAgIHJldHVybiBpbmRleDsKKyAgICAgICAgICAgIG90aGVyQ2hpbGQgPSBjYW5vbmljYWxpemUo
b3RoZXJOb2RlLT5jaGlsZDMoKSk7CisgICAgICAgICAgICBpZiAoIW90aGVyQ2hpbGQpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIG90aGVyTm9kZTsKICAgICAgICAgICAgIGlmIChvdGhlckNoaWxk
ICE9IGNoaWxkMykKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIAotICAg
ICAgICAgICAgcmV0dXJuIGluZGV4OworICAgICAgICAgICAgcmV0dXJuIG90aGVyTm9kZTsKICAg
ICAgICAgfQotICAgICAgICByZXR1cm4gTm9Ob2RlOworICAgICAgICByZXR1cm4gMDsKICAgICB9
CiAgICAgCi0gICAgTm9kZUluZGV4IGNvbnN0YW50Q1NFKE5vZGUmIG5vZGUpCisgICAgTm9kZSog
Y29uc3RhbnRDU0UoTm9kZSogbm9kZSkKICAgICB7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IGVuZEluZGV4Rm9yUHVyZUNTRSgpOyBpLS07KSB7Ci0gICAgICAgICAgICBOb2RlSW5kZXggaW5k
ZXggPSBtX2N1cnJlbnRCbG9jay0+YXQoaSk7Ci0gICAgICAgICAgICBOb2RlJiBvdGhlck5vZGUg
PSBtX2dyYXBoW2luZGV4XTsKLSAgICAgICAgICAgIGlmIChvdGhlck5vZGUub3AoKSAhPSBKU0Nv
bnN0YW50KQorICAgICAgICAgICAgTm9kZSogb3RoZXJOb2RlID0gbV9jdXJyZW50QmxvY2stPmF0
KGkpOworICAgICAgICAgICAgaWYgKG90aGVyTm9kZS0+b3AoKSAhPSBKU0NvbnN0YW50KQogICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAob3Ro
ZXJOb2RlLmNvbnN0YW50TnVtYmVyKCkgIT0gbm9kZS5jb25zdGFudE51bWJlcigpKQorICAgICAg
ICAgICAgaWYgKCFvdGhlck5vZGUtPnNob3VsZEdlbmVyYXRlKCkpCiAgICAgICAgICAgICAgICAg
Y29udGludWU7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIHJldHVybiBpbmRleDsKKyAgICAg
ICAgICAgIGlmIChvdGhlck5vZGUtPmNvbnN0YW50TnVtYmVyKCkgIT0gbm9kZS0+Y29uc3RhbnRO
dW1iZXIoKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgcmV0dXJuIG90aGVyTm9kZTsKICAgICAgICAgfQotICAgICAgICByZXR1cm4gTm9Ob2Rl
OworICAgICAgICByZXR1cm4gMDsKICAgICB9CiAgICAgCi0gICAgTm9kZUluZGV4IHdlYWtDb25z
dGFudENTRShOb2RlJiBub2RlKQorICAgIE5vZGUqIHdlYWtDb25zdGFudENTRShOb2RlKiBub2Rl
KQogICAgIHsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gZW5kSW5kZXhGb3JQdXJlQ1NFKCk7
IGktLTspIHsKLSAgICAgICAgICAgIE5vZGVJbmRleCBpbmRleCA9IG1fY3VycmVudEJsb2NrLT5h
dChpKTsKLSAgICAgICAgICAgIE5vZGUmIG90aGVyTm9kZSA9IG1fZ3JhcGhbaW5kZXhdOwotICAg
ICAgICAgICAgaWYgKG90aGVyTm9kZS5vcCgpICE9IFdlYWtKU0NvbnN0YW50KQorICAgICAgICAg
ICAgTm9kZSogb3RoZXJOb2RlID0gbV9jdXJyZW50QmxvY2stPmF0KGkpOworICAgICAgICAgICAg
aWYgKG90aGVyTm9kZS0+b3AoKSAhPSBXZWFrSlNDb25zdGFudCkKKyAgICAgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKCFvdGhlck5vZGUtPnNob3Vs
ZEdlbmVyYXRlKCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAKLSAg
ICAgICAgICAgIGlmIChvdGhlck5vZGUud2Vha0NvbnN0YW50KCkgIT0gbm9kZS53ZWFrQ29uc3Rh
bnQoKSkKKyAgICAgICAgICAgIGlmIChvdGhlck5vZGUtPndlYWtDb25zdGFudCgpICE9IG5vZGUt
PndlYWtDb25zdGFudCgpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAg
Ci0gICAgICAgICAgICByZXR1cm4gaW5kZXg7CisgICAgICAgICAgICByZXR1cm4gb3RoZXJOb2Rl
OwogICAgICAgICB9Ci0gICAgICAgIHJldHVybiBOb05vZGU7CisgICAgICAgIHJldHVybiAwOwog
ICAgIH0KICAgICAKLSAgICBOb2RlSW5kZXggZ2V0Q2FsbGVlTG9hZEVsaW1pbmF0aW9uKElubGlu
ZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lKQorICAgIE5vZGUqIGdldENhbGxlZUxvYWRFbGlt
aW5hdGlvbihJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSkKICAgICB7CiAgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IG1faW5kZXhJbkJsb2NrOyBpLS07KSB7Ci0gICAgICAgICAgICBO
b2RlSW5kZXggaW5kZXggPSBtX2N1cnJlbnRCbG9jay0+YXQoaSk7Ci0gICAgICAgICAgICBOb2Rl
JiBub2RlID0gbV9ncmFwaFtpbmRleF07Ci0gICAgICAgICAgICBpZiAoIW5vZGUuc2hvdWxkR2Vu
ZXJhdGUoKSkKKyAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBtX2N1cnJlbnRCbG9jay0+YXQoaSk7
CisgICAgICAgICAgICBpZiAoIW5vZGUtPnNob3VsZEdlbmVyYXRlKCkpCiAgICAgICAgICAgICAg
ICAgY29udGludWU7Ci0gICAgICAgICAgICBpZiAobm9kZS5jb2RlT3JpZ2luLmlubGluZUNhbGxG
cmFtZSAhPSBpbmxpbmVDYWxsRnJhbWUpCisgICAgICAgICAgICBpZiAobm9kZS0+Y29kZU9yaWdp
bi5pbmxpbmVDYWxsRnJhbWUgIT0gaW5saW5lQ2FsbEZyYW1lKQogICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwotICAgICAgICAgICAgc3dpdGNoIChub2RlLm9wKCkpIHsKKyAgICAgICAgICAgIHN3
aXRjaCAobm9kZS0+b3AoKSkgewogICAgICAgICAgICAgY2FzZSBHZXRDYWxsZWU6Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuIGluZGV4OworICAgICAgICAgICAgICAgIHJldHVybiBub2RlOwogICAg
ICAgICAgICAgY2FzZSBTZXRDYWxsZWU6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG5vZGUuY2hp
bGQxKCkuaW5kZXgoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gbm9kZS0+Y2hpbGQxKCkubm9k
ZSgpOwogICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgIH0KICAgICAgICAgfQotICAgICAgICByZXR1cm4gTm9Ob2RlOworICAgICAgICByZXR1
cm4gMDsKICAgICB9CiAgICAgCi0gICAgTm9kZUluZGV4IGdldEFycmF5TGVuZ3RoRWxpbWluYXRp
b24oTm9kZUluZGV4IGFycmF5KQorICAgIE5vZGUqIGdldEFycmF5TGVuZ3RoRWxpbWluYXRpb24o
Tm9kZSogYXJyYXkpCiAgICAgewogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2luZGV4SW5C
bG9jazsgaS0tOykgewotICAgICAgICAgICAgTm9kZUluZGV4IGluZGV4ID0gbV9jdXJyZW50Qmxv
Y2stPmF0KGkpOwotICAgICAgICAgICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhbaW5kZXhdOwotICAg
ICAgICAgICAgaWYgKCFub2RlLnNob3VsZEdlbmVyYXRlKCkpCisgICAgICAgICAgICBOb2RlKiBu
b2RlID0gbV9jdXJyZW50QmxvY2stPmF0KGkpOworICAgICAgICAgICAgaWYgKCFub2RlLT5zaG91
bGRHZW5lcmF0ZSgpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgc3dp
dGNoIChub2RlLm9wKCkpIHsKKyAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewogICAg
ICAgICAgICAgY2FzZSBHZXRBcnJheUxlbmd0aDoKLSAgICAgICAgICAgICAgICBpZiAobm9kZS5j
aGlsZDEoKSA9PSBhcnJheSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGluZGV4OworICAg
ICAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKSA9PSBhcnJheSkKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIG5vZGU7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAg
ICAgCiAgICAgICAgICAgICBjYXNlIFB1dEJ5VmFsOgogICAgICAgICAgICAgICAgIGlmICghbV9n
cmFwaC5ieVZhbElzUHVyZShub2RlKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5vTm9k
ZTsKLSAgICAgICAgICAgICAgICBpZiAobm9kZS5hcnJheU1vZGUoKS5tYXlTdG9yZVRvSG9sZSgp
KQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gTm9Ob2RlOworICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gMDsKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+YXJyYXlNb2RlKCkubWF5U3Rv
cmVUb0hvbGUoKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAg
ICAgICAgICAgIGlmIChtX2dyYXBoLmNsb2JiZXJzV29ybGQoaW5kZXgpKQotICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gTm9Ob2RlOworICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLmNsb2Ji
ZXJzV29ybGQobm9kZSkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAg
ICAgfQogICAgICAgICB9Ci0gICAgICAgIHJldHVybiBOb05vZGU7CisgICAgICAgIHJldHVybiAw
OwogICAgIH0KICAgICAKLSAgICBOb2RlSW5kZXggZ2xvYmFsVmFyTG9hZEVsaW1pbmF0aW9uKFdy
aXRlQmFycmllcjxVbmtub3duPiogcmVnaXN0ZXJQb2ludGVyKQorICAgIE5vZGUqIGdsb2JhbFZh
ckxvYWRFbGltaW5hdGlvbihXcml0ZUJhcnJpZXI8VW5rbm93bj4qIHJlZ2lzdGVyUG9pbnRlcikK
ICAgICB7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1faW5kZXhJbkJsb2NrOyBpLS07KSB7
Ci0gICAgICAgICAgICBOb2RlSW5kZXggaW5kZXggPSBtX2N1cnJlbnRCbG9jay0+YXQoaSk7Ci0g
ICAgICAgICAgICBOb2RlJiBub2RlID0gbV9ncmFwaFtpbmRleF07Ci0gICAgICAgICAgICBpZiAo
IW5vZGUuc2hvdWxkR2VuZXJhdGUoKSkKKyAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBtX2N1cnJl
bnRCbG9jay0+YXQoaSk7CisgICAgICAgICAgICBpZiAoIW5vZGUtPnNob3VsZEdlbmVyYXRlKCkp
CiAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBzd2l0Y2ggKG5vZGUub3Ao
KSkgeworICAgICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CiAgICAgICAgICAgICBjYXNl
IEdldEdsb2JhbFZhcjoKLSAgICAgICAgICAgICAgICBpZiAobm9kZS5yZWdpc3RlclBvaW50ZXIo
KSA9PSByZWdpc3RlclBvaW50ZXIpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBpbmRleDsK
KyAgICAgICAgICAgICAgICBpZiAobm9kZS0+cmVnaXN0ZXJQb2ludGVyKCkgPT0gcmVnaXN0ZXJQ
b2ludGVyKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gbm9kZTsKICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgIGNhc2UgUHV0R2xvYmFsVmFyOgotICAgICAgICAgICAgICAg
IGlmIChub2RlLnJlZ2lzdGVyUG9pbnRlcigpID09IHJlZ2lzdGVyUG9pbnRlcikKLSAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIG5vZGUuY2hpbGQxKCkuaW5kZXgoKTsKKyAgICAgICAgICAgICAg
ICBpZiAobm9kZS0+cmVnaXN0ZXJQb2ludGVyKCkgPT0gcmVnaXN0ZXJQb2ludGVyKQorICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gbm9kZS0+Y2hpbGQxKCkubm9kZSgpOwogICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChtX2dyYXBoLmNsb2JiZXJzV29ybGQoaW5k
ZXgpKQorICAgICAgICAgICAgaWYgKG1fZ3JhcGguY2xvYmJlcnNXb3JsZChub2RlKSkKICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICByZXR1cm4gTm9Ob2RlOworICAg
ICAgICByZXR1cm4gMDsKICAgICB9CiAgICAgCi0gICAgTm9kZUluZGV4IHNjb3BlZFZhckxvYWRF
bGltaW5hdGlvbihOb2RlSW5kZXggcmVnaXN0ZXJzLCB1bnNpZ25lZCB2YXJOdW1iZXIpCisgICAg
Tm9kZSogc2NvcGVkVmFyTG9hZEVsaW1pbmF0aW9uKE5vZGUqIHJlZ2lzdGVycywgdW5zaWduZWQg
dmFyTnVtYmVyKQogICAgIHsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9pbmRleEluQmxv
Y2s7IGktLTspIHsKLSAgICAgICAgICAgIE5vZGVJbmRleCBpbmRleCA9IG1fY3VycmVudEJsb2Nr
LT5hdChpKTsKLSAgICAgICAgICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW2luZGV4XTsKLSAgICAg
ICAgICAgIGlmICghbm9kZS5zaG91bGRHZW5lcmF0ZSgpKQorICAgICAgICAgICAgTm9kZSogbm9k
ZSA9IG1fY3VycmVudEJsb2NrLT5hdChpKTsKKyAgICAgICAgICAgIGlmICghbm9kZS0+c2hvdWxk
R2VuZXJhdGUoKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIHN3aXRj
aCAobm9kZS5vcCgpKSB7CisgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKICAgICAg
ICAgICAgIGNhc2UgR2V0U2NvcGVkVmFyOiB7Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGUuY2hp
bGQxKCkgPT0gcmVnaXN0ZXJzICYmIG5vZGUudmFyTnVtYmVyKCkgPT0gdmFyTnVtYmVyKQotICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gaW5kZXg7CisgICAgICAgICAgICAgICAgaWYgKG5vZGUt
PmNoaWxkMSgpID09IHJlZ2lzdGVycyAmJiBub2RlLT52YXJOdW1iZXIoKSA9PSB2YXJOdW1iZXIp
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBub2RlOwogICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgfSAKICAgICAgICAgICAgIGNhc2UgUHV0U2NvcGVkVmFyOiB7Ci0gICAg
ICAgICAgICAgICAgaWYgKG5vZGUuY2hpbGQyKCkgPT0gcmVnaXN0ZXJzICYmIG5vZGUudmFyTnVt
YmVyKCkgPT0gdmFyTnVtYmVyKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gbm9kZS5jaGls
ZDMoKS5pbmRleCgpOworICAgICAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDIoKSA9PSByZWdp
c3RlcnMgJiYgbm9kZS0+dmFyTnVtYmVyKCkgPT0gdmFyTnVtYmVyKQorICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gbm9kZS0+Y2hpbGQzKCkubm9kZSgpOwogICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgfQogICAgICAgICAgICAgY2FzZSBTZXRMb2NhbDogewotICAgICAgICAg
ICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhID0gbm9kZS52YXJp
YWJsZUFjY2Vzc0RhdGEoKTsKKyAgICAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZh
cmlhYmxlQWNjZXNzRGF0YSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOwogICAgICAgICAg
ICAgICAgIGlmICh2YXJpYWJsZUFjY2Vzc0RhdGEtPmlzQ2FwdHVyZWQoKQogICAgICAgICAgICAg
ICAgICAgICAmJiB2YXJpYWJsZUFjY2Vzc0RhdGEtPmxvY2FsKCkgPT0gc3RhdGljX2Nhc3Q8Vmly
dHVhbFJlZ2lzdGVyPih2YXJOdW1iZXIpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gTm9O
b2RlOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAobV9ncmFwaC5jbG9iYmVyc1dv
cmxkKGluZGV4KSkKKyAgICAgICAgICAgIGlmIChtX2dyYXBoLmNsb2JiZXJzV29ybGQobm9kZSkp
CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIE5vTm9k
ZTsKKyAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogICAgIAogICAgIGJvb2wgZ2xvYmFsVmFyV2F0
Y2hwb2ludEVsaW1pbmF0aW9uKFdyaXRlQmFycmllcjxVbmtub3duPiogcmVnaXN0ZXJQb2ludGVy
KQogICAgIHsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9pbmRleEluQmxvY2s7IGktLTsp
IHsKLSAgICAgICAgICAgIE5vZGVJbmRleCBpbmRleCA9IG1fY3VycmVudEJsb2NrLT5hdChpKTsK
LSAgICAgICAgICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW2luZGV4XTsKLSAgICAgICAgICAgIGlm
ICghbm9kZS5zaG91bGRHZW5lcmF0ZSgpKQorICAgICAgICAgICAgTm9kZSogbm9kZSA9IG1fY3Vy
cmVudEJsb2NrLT5hdChpKTsKKyAgICAgICAgICAgIGlmICghbm9kZS0+c2hvdWxkR2VuZXJhdGUo
KSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIHN3aXRjaCAobm9kZS5v
cCgpKSB7CisgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKICAgICAgICAgICAgIGNh
c2UgR2xvYmFsVmFyV2F0Y2hwb2ludDoKLSAgICAgICAgICAgICAgICBpZiAobm9kZS5yZWdpc3Rl
clBvaW50ZXIoKSA9PSByZWdpc3RlclBvaW50ZXIpCisgICAgICAgICAgICAgICAgaWYgKG5vZGUt
PnJlZ2lzdGVyUG9pbnRlcigpID09IHJlZ2lzdGVyUG9pbnRlcikKICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNl
IFB1dEdsb2JhbFZhcjoKLSAgICAgICAgICAgICAgICBpZiAobm9kZS5yZWdpc3RlclBvaW50ZXIo
KSA9PSByZWdpc3RlclBvaW50ZXIpCisgICAgICAgICAgICAgICAgaWYgKG5vZGUtPnJlZ2lzdGVy
UG9pbnRlcigpID09IHJlZ2lzdGVyUG9pbnRlcikKICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgZGVmYXVsdDoKICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChtX2dy
YXBoLmNsb2JiZXJzV29ybGQoaW5kZXgpKQorICAgICAgICAgICAgaWYgKG1fZ3JhcGguY2xvYmJl
cnNXb3JsZChub2RlKSkKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIAotICAgIE5vZGVJbmRleCBnbG9iYWxWYXJTdG9y
ZUVsaW1pbmF0aW9uKFdyaXRlQmFycmllcjxVbmtub3duPiogcmVnaXN0ZXJQb2ludGVyKQorICAg
IE5vZGUqIGdsb2JhbFZhclN0b3JlRWxpbWluYXRpb24oV3JpdGVCYXJyaWVyPFVua25vd24+KiBy
ZWdpc3RlclBvaW50ZXIpCiAgICAgewogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2luZGV4
SW5CbG9jazsgaS0tOykgewotICAgICAgICAgICAgTm9kZUluZGV4IGluZGV4ID0gbV9jdXJyZW50
QmxvY2stPmF0KGkpOwotICAgICAgICAgICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhbaW5kZXhdOwot
ICAgICAgICAgICAgaWYgKCFub2RlLnNob3VsZEdlbmVyYXRlKCkpCisgICAgICAgICAgICBOb2Rl
KiBub2RlID0gbV9jdXJyZW50QmxvY2stPmF0KGkpOworICAgICAgICAgICAgaWYgKCFub2RlLT5z
aG91bGRHZW5lcmF0ZSgpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAg
c3dpdGNoIChub2RlLm9wKCkpIHsKKyAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewog
ICAgICAgICAgICAgY2FzZSBQdXRHbG9iYWxWYXI6CiAgICAgICAgICAgICBjYXNlIFB1dEdsb2Jh
bFZhckNoZWNrOgotICAgICAgICAgICAgICAgIGlmIChub2RlLnJlZ2lzdGVyUG9pbnRlcigpID09
IHJlZ2lzdGVyUG9pbnRlcikKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGluZGV4OworICAg
ICAgICAgICAgICAgIGlmIChub2RlLT5yZWdpc3RlclBvaW50ZXIoKSA9PSByZWdpc3RlclBvaW50
ZXIpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBub2RlOwogICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgY2FzZSBHZXRHbG9iYWxWYXI6Ci0g
ICAgICAgICAgICAgICAgaWYgKG5vZGUucmVnaXN0ZXJQb2ludGVyKCkgPT0gcmVnaXN0ZXJQb2lu
dGVyKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gTm9Ob2RlOworICAgICAgICAgICAgICAg
IGlmIChub2RlLT5yZWdpc3RlclBvaW50ZXIoKSA9PSByZWdpc3RlclBvaW50ZXIpCisgICAgICAg
ICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgICAgIAogICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChtX2dyYXBoLmNsb2JiZXJzV29ybGQoaW5kZXgp
IHx8IG5vZGUuY2FuRXhpdCgpKQotICAgICAgICAgICAgICAgIHJldHVybiBOb05vZGU7CisgICAg
ICAgICAgICBpZiAobV9ncmFwaC5jbG9iYmVyc1dvcmxkKG5vZGUpIHx8IG5vZGUtPmNhbkV4aXQo
KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgfQotICAgICAgICByZXR1cm4g
Tm9Ob2RlOworICAgICAgICByZXR1cm4gMDsKICAgICB9CiAgICAgCi0gICAgTm9kZUluZGV4IHNj
b3BlZFZhclN0b3JlRWxpbWluYXRpb24oTm9kZUluZGV4IHNjb3BlLCBOb2RlSW5kZXggcmVnaXN0
ZXJzLCB1bnNpZ25lZCB2YXJOdW1iZXIpCisgICAgTm9kZSogc2NvcGVkVmFyU3RvcmVFbGltaW5h
dGlvbihOb2RlKiBzY29wZSwgTm9kZSogcmVnaXN0ZXJzLCB1bnNpZ25lZCB2YXJOdW1iZXIpCiAg
ICAgewogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2luZGV4SW5CbG9jazsgaS0tOykgewot
ICAgICAgICAgICAgTm9kZUluZGV4IGluZGV4ID0gbV9jdXJyZW50QmxvY2stPmF0KGkpOwotICAg
ICAgICAgICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhbaW5kZXhdOwotICAgICAgICAgICAgaWYgKCFu
b2RlLnNob3VsZEdlbmVyYXRlKCkpCisgICAgICAgICAgICBOb2RlKiBub2RlID0gbV9jdXJyZW50
QmxvY2stPmF0KGkpOworICAgICAgICAgICAgaWYgKCFub2RlLT5zaG91bGRHZW5lcmF0ZSgpKQog
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgc3dpdGNoIChub2RlLm9wKCkp
IHsKKyAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewogICAgICAgICAgICAgY2FzZSBQ
dXRTY29wZWRWYXI6IHsKLSAgICAgICAgICAgICAgICBpZiAobm9kZS5jaGlsZDEoKSA9PSBzY29w
ZSAmJiBub2RlLmNoaWxkMigpID09IHJlZ2lzdGVycyAmJiBub2RlLnZhck51bWJlcigpID09IHZh
ck51bWJlcikKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGluZGV4OworICAgICAgICAgICAg
ICAgIGlmIChub2RlLT5jaGlsZDEoKSA9PSBzY29wZSAmJiBub2RlLT5jaGlsZDIoKSA9PSByZWdp
c3RlcnMgJiYgbm9kZS0+dmFyTnVtYmVyKCkgPT0gdmFyTnVtYmVyKQorICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gbm9kZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGNhc2UgR2V0U2NvcGVkVmFyOiB7CiAgICAg
ICAgICAgICAgICAgLy8gTGV0J3MgYmUgY29uc2VydmF0aXZlLgotICAgICAgICAgICAgICAgIGlm
IChub2RlLnZhck51bWJlcigpID09IHZhck51bWJlcikKLSAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIE5vTm9kZTsKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+dmFyTnVtYmVyKCkgPT0gdmFy
TnVtYmVyKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGNhc2Ug
R2V0TG9jYWw6IHsKLSAgICAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxl
QWNjZXNzRGF0YSA9IG5vZGUudmFyaWFibGVBY2Nlc3NEYXRhKCk7CisgICAgICAgICAgICAgICAg
VmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBub2RlLT52YXJpYWJsZUFj
Y2Vzc0RhdGEoKTsKICAgICAgICAgICAgICAgICBpZiAodmFyaWFibGVBY2Nlc3NEYXRhLT5pc0Nh
cHR1cmVkKCkKICAgICAgICAgICAgICAgICAgICAgJiYgdmFyaWFibGVBY2Nlc3NEYXRhLT5sb2Nh
bCgpID09IHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4odmFyTnVtYmVyKSkKLSAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIE5vTm9kZTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7
CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGRl
ZmF1bHQ6CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBpZiAobV9ncmFwaC5jbG9iYmVyc1dvcmxkKGluZGV4KSB8fCBub2RlLmNhbkV4aXQoKSkKLSAg
ICAgICAgICAgICAgICByZXR1cm4gTm9Ob2RlOworICAgICAgICAgICAgaWYgKG1fZ3JhcGguY2xv
YmJlcnNXb3JsZChub2RlKSB8fCBub2RlLT5jYW5FeGl0KCkpCisgICAgICAgICAgICAgICAgcmV0
dXJuIDA7CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIE5vTm9kZTsKKyAgICAgICAgcmV0dXJu
IDA7CiAgICAgfQogICAgIAotICAgIE5vZGVJbmRleCBnZXRCeVZhbExvYWRFbGltaW5hdGlvbihO
b2RlSW5kZXggY2hpbGQxLCBOb2RlSW5kZXggY2hpbGQyKQorICAgIE5vZGUqIGdldEJ5VmFsTG9h
ZEVsaW1pbmF0aW9uKE5vZGUqIGNoaWxkMSwgTm9kZSogY2hpbGQyKQogICAgIHsKICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gbV9pbmRleEluQmxvY2s7IGktLTspIHsKLSAgICAgICAgICAgIE5v
ZGVJbmRleCBpbmRleCA9IG1fY3VycmVudEJsb2NrLT5hdChpKTsKLSAgICAgICAgICAgIGlmIChp
bmRleCA9PSBjaGlsZDEgfHwgaW5kZXggPT0gY2Fub25pY2FsaXplKGNoaWxkMikpIAorICAgICAg
ICAgICAgTm9kZSogbm9kZSA9IG1fY3VycmVudEJsb2NrLT5hdChpKTsKKyAgICAgICAgICAgIGlm
IChub2RlID09IGNoaWxkMSB8fCBub2RlID09IGNhbm9uaWNhbGl6ZShjaGlsZDIpKSAKICAgICAg
ICAgICAgICAgICBicmVhazsKIAotICAgICAgICAgICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhbaW5k
ZXhdOwotICAgICAgICAgICAgaWYgKCFub2RlLnNob3VsZEdlbmVyYXRlKCkpCisgICAgICAgICAg
ICBpZiAoIW5vZGUtPnNob3VsZEdlbmVyYXRlKCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7
Ci0gICAgICAgICAgICBzd2l0Y2ggKG5vZGUub3AoKSkgeworICAgICAgICAgICAgc3dpdGNoIChu
b2RlLT5vcCgpKSB7CiAgICAgICAgICAgICBjYXNlIEdldEJ5VmFsOgogICAgICAgICAgICAgICAg
IGlmICghbV9ncmFwaC5ieVZhbElzUHVyZShub2RlKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIE5vTm9kZTsKLSAgICAgICAgICAgICAgICBpZiAobm9kZS5jaGlsZDEoKSA9PSBjaGlsZDEg
JiYgY2Fub25pY2FsaXplKG5vZGUuY2hpbGQyKCkpID09IGNhbm9uaWNhbGl6ZShjaGlsZDIpKQot
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW5kZXg7CisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiAwOworICAgICAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKSA9PSBjaGlsZDEgJiYg
Y2Fub25pY2FsaXplKG5vZGUtPmNoaWxkMigpKSA9PSBjYW5vbmljYWxpemUoY2hpbGQyKSkKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGU7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICBjYXNlIFB1dEJ5VmFsOgogICAgICAgICAgICAgY2FzZSBQdXRCeVZhbEFsaWFz
OiB7CiAgICAgICAgICAgICAgICAgaWYgKCFtX2dyYXBoLmJ5VmFsSXNQdXJlKG5vZGUpKQotICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gTm9Ob2RlOworICAgICAgICAgICAgICAgICAgICByZXR1
cm4gMDsKICAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKSA9
PSBjaGlsZDEgJiYgY2Fub25pY2FsaXplKG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkpID09
IGNhbm9uaWNhbGl6ZShjaGlsZDIpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gbV9ncmFw
aC52YXJBcmdDaGlsZChub2RlLCAyKS5pbmRleCgpOworICAgICAgICAgICAgICAgICAgICByZXR1
cm4gbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAyKS5ub2RlKCk7CiAgICAgICAgICAgICAgICAg
Ly8gV2UgbXVzdCBhc3N1bWUgdGhhdCB0aGUgUHV0QnlWYWwgd2lsbCBjbG9iYmVyIHRoZSBsb2Nh
dGlvbiB3ZSdyZSBnZXR0aW5nIGZyb20uCiAgICAgICAgICAgICAgICAgLy8gRklYTUU6IFdlIGNh
biBkbyBiZXR0ZXI7IGlmIHdlIGtub3cgdGhhdCB0aGUgUHV0QnlWYWwgaXMgYWNjZXNzaW5nIGFu
IGFycmF5IG9mIGEKICAgICAgICAgICAgICAgICAvLyBkaWZmZXJlbnQgdHlwZSB0aGFuIHRoZSBH
ZXRCeVZhbCwgdGhlbiB3ZSBrbm93IHRoYXQgdGhleSB3b24ndCBjbG9iYmVyIGVhY2ggb3RoZXIu
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIE5vTm9kZTsKKyAgICAgICAgICAgICAgICByZXR1cm4g
MDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGNhc2UgUHV0U3RydWN0dXJlOgogICAgICAg
ICAgICAgY2FzZSBQdXRCeU9mZnNldDoKQEAgLTM5NCw3MiArMzg5LDY5IEBAIHByaXZhdGU6CiAg
ICAgICAgICAgICAgICAgLy8gdGhlIEdldEJ5VmFsLgogICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC5jbG9iYmVy
c1dvcmxkKGluZGV4KSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5vTm9kZTsKKyAgICAg
ICAgICAgICAgICBpZiAobV9ncmFwaC5jbG9iYmVyc1dvcmxkKG5vZGUpKQorICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0K
ICAgICAgICAgfQotICAgICAgICByZXR1cm4gTm9Ob2RlOworICAgICAgICByZXR1cm4gMDsKICAg
ICB9CiAKLSAgICBib29sIGNoZWNrRnVuY3Rpb25FbGltaW5hdGlvbihKU0NlbGwqIGZ1bmN0aW9u
LCBOb2RlSW5kZXggY2hpbGQxKQorICAgIGJvb2wgY2hlY2tGdW5jdGlvbkVsaW1pbmF0aW9uKEpT
Q2VsbCogZnVuY3Rpb24sIE5vZGUqIGNoaWxkMSkKICAgICB7CiAgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IGVuZEluZGV4Rm9yUHVyZUNTRSgpOyBpLS07KSB7Ci0gICAgICAgICAgICBOb2RlSW5k
ZXggaW5kZXggPSBtX2N1cnJlbnRCbG9jay0+YXQoaSk7Ci0gICAgICAgICAgICBpZiAoaW5kZXgg
PT0gY2hpbGQxKSAKKyAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBtX2N1cnJlbnRCbG9jay0+YXQo
aSk7CisgICAgICAgICAgICBpZiAobm9kZSA9PSBjaGlsZDEpIAogICAgICAgICAgICAgICAgIGJy
ZWFrOwogCi0gICAgICAgICAgICBOb2RlJiBub2RlID0gbV9ncmFwaFtpbmRleF07Ci0gICAgICAg
ICAgICBpZiAobm9kZS5vcCgpID09IENoZWNrRnVuY3Rpb24gJiYgbm9kZS5jaGlsZDEoKSA9PSBj
aGlsZDEgJiYgbm9kZS5mdW5jdGlvbigpID09IGZ1bmN0aW9uKQorICAgICAgICAgICAgaWYgKG5v
ZGUtPm9wKCkgPT0gQ2hlY2tGdW5jdGlvbiAmJiBub2RlLT5jaGlsZDEoKSA9PSBjaGlsZDEgJiYg
bm9kZS0+ZnVuY3Rpb24oKSA9PSBmdW5jdGlvbikKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIAotICAgIGJv
b2wgY2hlY2tFeGVjdXRhYmxlRWxpbWluYXRpb24oRXhlY3V0YWJsZUJhc2UqIGV4ZWN1dGFibGUs
IE5vZGVJbmRleCBjaGlsZDEpCisgICAgYm9vbCBjaGVja0V4ZWN1dGFibGVFbGltaW5hdGlvbihF
eGVjdXRhYmxlQmFzZSogZXhlY3V0YWJsZSwgTm9kZSogY2hpbGQxKQogICAgIHsKICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gZW5kSW5kZXhGb3JQdXJlQ1NFKCk7IGktLTspIHsKLSAgICAgICAg
ICAgIE5vZGVJbmRleCBpbmRleCA9IG1fY3VycmVudEJsb2NrLT5hdChpKTsKLSAgICAgICAgICAg
IGlmIChpbmRleCA9PSBjaGlsZDEpCisgICAgICAgICAgICBOb2RlKiBub2RlID0gbV9jdXJyZW50
QmxvY2stPmF0KGkpOworICAgICAgICAgICAgaWYgKG5vZGUgPT0gY2hpbGQxKQogICAgICAgICAg
ICAgICAgIGJyZWFrOwogCi0gICAgICAgICAgICBOb2RlJiBub2RlID0gbV9ncmFwaFtpbmRleF07
Ci0gICAgICAgICAgICBpZiAobm9kZS5vcCgpID09IENoZWNrRXhlY3V0YWJsZSAmJiBub2RlLmNo
aWxkMSgpID09IGNoaWxkMSAmJiBub2RlLmV4ZWN1dGFibGUoKSA9PSBleGVjdXRhYmxlKQorICAg
ICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gQ2hlY2tFeGVjdXRhYmxlICYmIG5vZGUtPmNoaWxk
MSgpID09IGNoaWxkMSAmJiBub2RlLT5leGVjdXRhYmxlKCkgPT0gZXhlY3V0YWJsZSkKICAgICAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgfQogCi0gICAgYm9vbCBjaGVja1N0cnVjdHVyZUVsaW1pbmF0aW9uKGNvbnN0IFN0cnVj
dHVyZVNldCYgc3RydWN0dXJlU2V0LCBOb2RlSW5kZXggY2hpbGQxKQorICAgIGJvb2wgY2hlY2tT
dHJ1Y3R1cmVFbGltaW5hdGlvbihjb25zdCBTdHJ1Y3R1cmVTZXQmIHN0cnVjdHVyZVNldCwgTm9k
ZSogY2hpbGQxKQogICAgIHsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9pbmRleEluQmxv
Y2s7IGktLTspIHsKLSAgICAgICAgICAgIE5vZGVJbmRleCBpbmRleCA9IG1fY3VycmVudEJsb2Nr
LT5hdChpKTsKLSAgICAgICAgICAgIGlmIChpbmRleCA9PSBjaGlsZDEpIAorICAgICAgICAgICAg
Tm9kZSogbm9kZSA9IG1fY3VycmVudEJsb2NrLT5hdChpKTsKKyAgICAgICAgICAgIGlmIChub2Rl
ID09IGNoaWxkMSkgCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgICAgIE5vZGUm
IG5vZGUgPSBtX2dyYXBoW2luZGV4XTsKLSAgICAgICAgICAgIGlmICghbm9kZS5zaG91bGRHZW5l
cmF0ZSgpKQorICAgICAgICAgICAgaWYgKCFub2RlLT5zaG91bGRHZW5lcmF0ZSgpKQogICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgc3dpdGNoIChub2RlLm9wKCkpIHsKKyAg
ICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewogICAgICAgICAgICAgY2FzZSBDaGVja1N0
cnVjdHVyZToKICAgICAgICAgICAgIGNhc2UgRm9yd2FyZENoZWNrU3RydWN0dXJlOgotICAgICAg
ICAgICAgICAgIGlmIChub2RlLmNoaWxkMSgpID09IGNoaWxkMQotICAgICAgICAgICAgICAgICAg
ICAmJiBzdHJ1Y3R1cmVTZXQuaXNTdXBlcnNldE9mKG5vZGUuc3RydWN0dXJlU2V0KCkpKQorICAg
ICAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKSA9PSBjaGlsZDEKKyAgICAgICAgICAgICAg
ICAgICAgJiYgc3RydWN0dXJlU2V0LmlzU3VwZXJzZXRPZihub2RlLT5zdHJ1Y3R1cmVTZXQoKSkp
CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgY2FzZSBTdHJ1Y3R1cmVUcmFuc2l0aW9u
V2F0Y2hwb2ludDoKICAgICAgICAgICAgIGNhc2UgRm9yd2FyZFN0cnVjdHVyZVRyYW5zaXRpb25X
YXRjaHBvaW50OgotICAgICAgICAgICAgICAgIGlmIChub2RlLmNoaWxkMSgpID09IGNoaWxkMQot
ICAgICAgICAgICAgICAgICAgICAmJiBzdHJ1Y3R1cmVTZXQuY29udGFpbnMobm9kZS5zdHJ1Y3R1
cmUoKSkpCisgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpID09IGNoaWxkMQorICAg
ICAgICAgICAgICAgICAgICAmJiBzdHJ1Y3R1cmVTZXQuY29udGFpbnMobm9kZS0+c3RydWN0dXJl
KCkpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGNhc2UgUHV0U3RydWN0dXJlOgot
ICAgICAgICAgICAgICAgIGlmIChub2RlLmNoaWxkMSgpID09IGNoaWxkMQotICAgICAgICAgICAg
ICAgICAgICAmJiBzdHJ1Y3R1cmVTZXQuY29udGFpbnMobm9kZS5zdHJ1Y3R1cmVUcmFuc2l0aW9u
RGF0YSgpLm5ld1N0cnVjdHVyZSkpCisgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgp
ID09IGNoaWxkMQorICAgICAgICAgICAgICAgICAgICAmJiBzdHJ1Y3R1cmVTZXQuY29udGFpbnMo
bm9kZS0+c3RydWN0dXJlVHJhbnNpdGlvbkRhdGEoKS5uZXdTdHJ1Y3R1cmUpKQogICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgICAgICBpZiAoc3RydWN0dXJlU2V0
LmNvbnRhaW5zKG5vZGUuc3RydWN0dXJlVHJhbnNpdGlvbkRhdGEoKS5wcmV2aW91c1N0cnVjdHVy
ZSkpCisgICAgICAgICAgICAgICAgaWYgKHN0cnVjdHVyZVNldC5jb250YWlucyhub2RlLT5zdHJ1
Y3R1cmVUcmFuc2l0aW9uRGF0YSgpLnByZXZpb3VzU3RydWN0dXJlKSkKICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
ICAgIApAQCAtNDg0LDcgKzQ3Niw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAg
ICAgICAgICBpZiAobV9ncmFwaC5jbG9iYmVyc1dvcmxkKGluZGV4KSkKKyAgICAgICAgICAgICAg
ICBpZiAobV9ncmFwaC5jbG9iYmVyc1dvcmxkKG5vZGUpKQogICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CkBAIC00
OTIsMjYgKzQ4NCwyNSBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQog
ICAgIAotICAgIGJvb2wgc3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnRFbGltaW5hdGlvbihT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSwgTm9kZUluZGV4IGNoaWxkMSkKKyAgICBib29sIHN0cnVjdHVy
ZVRyYW5zaXRpb25XYXRjaHBvaW50RWxpbWluYXRpb24oU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIE5v
ZGUqIGNoaWxkMSkKICAgICB7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1faW5kZXhJbkJs
b2NrOyBpLS07KSB7Ci0gICAgICAgICAgICBOb2RlSW5kZXggaW5kZXggPSBtX2N1cnJlbnRCbG9j
ay0+YXQoaSk7Ci0gICAgICAgICAgICBpZiAoaW5kZXggPT0gY2hpbGQxKSAKKyAgICAgICAgICAg
IE5vZGUqIG5vZGUgPSBtX2N1cnJlbnRCbG9jay0+YXQoaSk7CisgICAgICAgICAgICBpZiAobm9k
ZSA9PSBjaGlsZDEpIAogICAgICAgICAgICAgICAgIGJyZWFrOwogCi0gICAgICAgICAgICBOb2Rl
JiBub2RlID0gbV9ncmFwaFtpbmRleF07Ci0gICAgICAgICAgICBpZiAoIW5vZGUuc2hvdWxkR2Vu
ZXJhdGUoKSkKKyAgICAgICAgICAgIGlmICghbm9kZS0+c2hvdWxkR2VuZXJhdGUoKSkKICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIHN3aXRjaCAobm9kZS5vcCgpKSB7Cisg
ICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKICAgICAgICAgICAgIGNhc2UgQ2hlY2tT
dHJ1Y3R1cmU6CiAgICAgICAgICAgICBjYXNlIEZvcndhcmRDaGVja1N0cnVjdHVyZToKLSAgICAg
ICAgICAgICAgICBpZiAobm9kZS5jaGlsZDEoKSA9PSBjaGlsZDEKLSAgICAgICAgICAgICAgICAg
ICAgJiYgbm9kZS5zdHJ1Y3R1cmVTZXQoKS5jb250YWluc09ubHkoc3RydWN0dXJlKSkKKyAgICAg
ICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCkgPT0gY2hpbGQxCisgICAgICAgICAgICAgICAg
ICAgICYmIG5vZGUtPnN0cnVjdHVyZVNldCgpLmNvbnRhaW5zT25seShzdHJ1Y3R1cmUpKQogICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgICAgICAKICAgICAgICAgICAgIGNhc2UgUHV0U3RydWN0dXJlOgotICAgICAgICAg
ICAgICAgIEFTU0VSVChub2RlLnN0cnVjdHVyZVRyYW5zaXRpb25EYXRhKCkucHJldmlvdXNTdHJ1
Y3R1cmUgIT0gc3RydWN0dXJlKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQobm9kZS0+c3RydWN0
dXJlVHJhbnNpdGlvbkRhdGEoKS5wcmV2aW91c1N0cnVjdHVyZSAhPSBzdHJ1Y3R1cmUpOwogICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgY2FzZSBQ
dXRCeU9mZnNldDoKQEAgLTUzMCw3ICs1MjEsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAg
IAogICAgICAgICAgICAgY2FzZSBTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludDoKICAgICAg
ICAgICAgIGNhc2UgRm9yd2FyZFN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50OgotICAgICAg
ICAgICAgICAgIGlmIChub2RlLnN0cnVjdHVyZSgpID09IHN0cnVjdHVyZSAmJiBub2RlLmNoaWxk
MSgpID09IGNoaWxkMSkKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+c3RydWN0dXJlKCkgPT0g
c3RydWN0dXJlICYmIG5vZGUtPmNoaWxkMSgpID09IGNoaWxkMSkKICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAg
CkBAIC01NDEsNyArNTMyLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAg
ICAgIGlmIChtX2dyYXBoLmNsb2JiZXJzV29ybGQoaW5kZXgpKQorICAgICAgICAgICAgICAgIGlm
IChtX2dyYXBoLmNsb2JiZXJzV29ybGQobm9kZSkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KQEAgLTU0OSwy
OCArNTQwLDI3IEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAg
Ci0gICAgTm9kZUluZGV4IHB1dFN0cnVjdHVyZVN0b3JlRWxpbWluYXRpb24oTm9kZUluZGV4IGNo
aWxkMSkKKyAgICBOb2RlKiBwdXRTdHJ1Y3R1cmVTdG9yZUVsaW1pbmF0aW9uKE5vZGUqIGNoaWxk
MSkKICAgICB7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1faW5kZXhJbkJsb2NrOyBpLS07
KSB7Ci0gICAgICAgICAgICBOb2RlSW5kZXggaW5kZXggPSBtX2N1cnJlbnRCbG9jay0+YXQoaSk7
Ci0gICAgICAgICAgICBpZiAoaW5kZXggPT0gY2hpbGQxKQorICAgICAgICAgICAgTm9kZSogbm9k
ZSA9IG1fY3VycmVudEJsb2NrLT5hdChpKTsKKyAgICAgICAgICAgIGlmIChub2RlID09IGNoaWxk
MSkKICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIE5vZGUmIG5vZGUgPSBtX2dy
YXBoW2luZGV4XTsKLSAgICAgICAgICAgIGlmICghbm9kZS5zaG91bGRHZW5lcmF0ZSgpKQorICAg
ICAgICAgICAgaWYgKCFub2RlLT5zaG91bGRHZW5lcmF0ZSgpKQogICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwotICAgICAgICAgICAgc3dpdGNoIChub2RlLm9wKCkpIHsKKyAgICAgICAgICAgIHN3
aXRjaCAobm9kZS0+b3AoKSkgewogICAgICAgICAgICAgY2FzZSBDaGVja1N0cnVjdHVyZToKICAg
ICAgICAgICAgIGNhc2UgRm9yd2FyZENoZWNrU3RydWN0dXJlOgotICAgICAgICAgICAgICAgIHJl
dHVybiBOb05vZGU7CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgICAgICAg
CiAgICAgICAgICAgICBjYXNlIFBoYW50b21QdXRTdHJ1Y3R1cmU6Ci0gICAgICAgICAgICAgICAg
aWYgKG5vZGUuY2hpbGQxKCkgPT0gY2hpbGQxKSAvLyBObyBuZWVkIHRvIHJldHJhY2Ugb3VyIHN0
ZXBzLgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gTm9Ob2RlOworICAgICAgICAgICAgICAg
IGlmIChub2RlLT5jaGlsZDEoKSA9PSBjaGlsZDEpIC8vIE5vIG5lZWQgdG8gcmV0cmFjZSBvdXIg
c3RlcHMuCisgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgY2FzZSBQdXRTdHJ1Y3R1cmU6Ci0g
ICAgICAgICAgICAgICAgaWYgKG5vZGUuY2hpbGQxKCkgPT0gY2hpbGQxKQotICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gaW5kZXg7CisgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgp
ID09IGNoaWxkMSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGU7CiAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAvLyBQdXRTdHJ1Y3R1
cmUgbmVlZHMgdG8gZXhlY3V0ZSBpZiB3ZSBHQy4gSGVuY2UgdGhpcyBuZWVkcyB0bwpAQCAtNTky
LDQ0ICs1ODIsNDMgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGNhc2UgQWxsb2NhdGVQcm9wZXJ0
eVN0b3JhZ2U6CiAgICAgICAgICAgICBjYXNlIFJlYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2U6CiAg
ICAgICAgICAgICBjYXNlIFR5cGVPZjoKLSAgICAgICAgICAgICAgICByZXR1cm4gTm9Ob2RlOwor
ICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAg
Y2FzZSBHZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlOgotICAgICAgICAgICAgICAgIGlmIChub2Rl
LmFycmF5TW9kZSgpLmdldEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2VNYXlUcmlnZ2VyR0MoKSkKLSAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIE5vTm9kZTsKKyAgICAgICAgICAgICAgICBpZiAobm9k
ZS0+YXJyYXlNb2RlKCkuZ2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZU1heVRyaWdnZXJHQygpKQor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgICAgICAKICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAobV9ncmFwaC5jbG9iYmVyc1dvcmxk
KGluZGV4KSB8fCBub2RlLmNhbkV4aXQoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gTm9Ob2Rl
OworICAgICAgICAgICAgaWYgKG1fZ3JhcGguY2xvYmJlcnNXb3JsZChub2RlKSB8fCBub2RlLT5j
YW5FeGl0KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIH0KLSAgICAgICAg
cmV0dXJuIE5vTm9kZTsKKyAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogICAgIAotICAgIE5vZGVJ
bmRleCBnZXRCeU9mZnNldExvYWRFbGltaW5hdGlvbih1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVy
LCBOb2RlSW5kZXggY2hpbGQxKQorICAgIE5vZGUqIGdldEJ5T2Zmc2V0TG9hZEVsaW1pbmF0aW9u
KHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIE5vZGUqIGNoaWxkMSkKICAgICB7CiAgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IG1faW5kZXhJbkJsb2NrOyBpLS07KSB7Ci0gICAgICAgICAgICBO
b2RlSW5kZXggaW5kZXggPSBtX2N1cnJlbnRCbG9jay0+YXQoaSk7Ci0gICAgICAgICAgICBpZiAo
aW5kZXggPT0gY2hpbGQxKQorICAgICAgICAgICAgTm9kZSogbm9kZSA9IG1fY3VycmVudEJsb2Nr
LT5hdChpKTsKKyAgICAgICAgICAgIGlmIChub2RlID09IGNoaWxkMSkKICAgICAgICAgICAgICAg
ICBicmVhazsKIAotICAgICAgICAgICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhbaW5kZXhdOwotICAg
ICAgICAgICAgaWYgKCFub2RlLnNob3VsZEdlbmVyYXRlKCkpCisgICAgICAgICAgICBpZiAoIW5v
ZGUtPnNob3VsZEdlbmVyYXRlKCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAg
ICAgICBzd2l0Y2ggKG5vZGUub3AoKSkgeworICAgICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgp
KSB7CiAgICAgICAgICAgICBjYXNlIEdldEJ5T2Zmc2V0OgotICAgICAgICAgICAgICAgIGlmIChu
b2RlLmNoaWxkMSgpID09IGNoaWxkMQotICAgICAgICAgICAgICAgICAgICAmJiBtX2dyYXBoLm1f
c3RvcmFnZUFjY2Vzc0RhdGFbbm9kZS5zdG9yYWdlQWNjZXNzRGF0YUluZGV4KCldLmlkZW50aWZp
ZXJOdW1iZXIgPT0gaWRlbnRpZmllck51bWJlcikKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGluZGV4OworICAgICAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKSA9PSBjaGlsZDEKKyAg
ICAgICAgICAgICAgICAgICAgJiYgbV9ncmFwaC5tX3N0b3JhZ2VBY2Nlc3NEYXRhW25vZGUtPnN0
b3JhZ2VBY2Nlc3NEYXRhSW5kZXgoKV0uaWRlbnRpZmllck51bWJlciA9PSBpZGVudGlmaWVyTnVt
YmVyKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gbm9kZTsKICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGNhc2UgUHV0QnlPZmZzZXQ6Ci0g
ICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGgubV9zdG9yYWdlQWNjZXNzRGF0YVtub2RlLnN0b3Jh
Z2VBY2Nlc3NEYXRhSW5kZXgoKV0uaWRlbnRpZmllck51bWJlciA9PSBpZGVudGlmaWVyTnVtYmVy
KSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChub2RlLmNoaWxkMSgpID09IGNoaWxkMSkgLy8g
TXVzdCBiZSBzYW1lIHByb3BlcnR5IHN0b3JhZ2UuCi0gICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gbm9kZS5jaGlsZDMoKS5pbmRleCgpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4g
Tm9Ob2RlOworICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLm1fc3RvcmFnZUFjY2Vzc0RhdGFb
bm9kZS0+c3RvcmFnZUFjY2Vzc0RhdGFJbmRleCgpXS5pZGVudGlmaWVyTnVtYmVyID09IGlkZW50
aWZpZXJOdW1iZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpID09
IGNoaWxkMSkgLy8gTXVzdCBiZSBzYW1lIHByb3BlcnR5IHN0b3JhZ2UuCisgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gbm9kZS0+Y2hpbGQzKCkubm9kZSgpOworICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gMDsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICAgICAgCkBAIC02NDUsMzggKzYzNCwzNyBAQCBwcml2YXRlOgogICAgICAg
ICAgICAgICAgICAgICAvLyBjaGFuZ2UuCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICByZXR1cm4gTm9Ob2RlOworICAgICAgICAg
ICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgZGVmYXVsdDoK
LSAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC5jbG9iYmVyc1dvcmxkKGluZGV4KSkKLSAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIE5vTm9kZTsKKyAgICAgICAgICAgICAgICBpZiAobV9ncmFw
aC5jbG9iYmVyc1dvcmxkKG5vZGUpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICBy
ZXR1cm4gTm9Ob2RlOworICAgICAgICByZXR1cm4gMDsKICAgICB9CiAgICAgCi0gICAgTm9kZUlu
ZGV4IHB1dEJ5T2Zmc2V0U3RvcmVFbGltaW5hdGlvbih1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVy
LCBOb2RlSW5kZXggY2hpbGQxKQorICAgIE5vZGUqIHB1dEJ5T2Zmc2V0U3RvcmVFbGltaW5hdGlv
bih1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBOb2RlKiBjaGlsZDEpCiAgICAgewogICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSBtX2luZGV4SW5CbG9jazsgaS0tOykgewotICAgICAgICAgICAg
Tm9kZUluZGV4IGluZGV4ID0gbV9jdXJyZW50QmxvY2stPmF0KGkpOwotICAgICAgICAgICAgaWYg
KGluZGV4ID09IGNoaWxkMSkKKyAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBtX2N1cnJlbnRCbG9j
ay0+YXQoaSk7CisgICAgICAgICAgICBpZiAobm9kZSA9PSBjaGlsZDEpCiAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAKLSAgICAgICAgICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW2luZGV4XTsKLSAg
ICAgICAgICAgIGlmICghbm9kZS5zaG91bGRHZW5lcmF0ZSgpKQorICAgICAgICAgICAgaWYgKCFu
b2RlLT5zaG91bGRHZW5lcmF0ZSgpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAg
ICAgICAgc3dpdGNoIChub2RlLm9wKCkpIHsKKyAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3Ao
KSkgewogICAgICAgICAgICAgY2FzZSBHZXRCeU9mZnNldDoKLSAgICAgICAgICAgICAgICBpZiAo
bV9ncmFwaC5tX3N0b3JhZ2VBY2Nlc3NEYXRhW25vZGUuc3RvcmFnZUFjY2Vzc0RhdGFJbmRleCgp
XS5pZGVudGlmaWVyTnVtYmVyID09IGlkZW50aWZpZXJOdW1iZXIpCi0gICAgICAgICAgICAgICAg
ICAgIHJldHVybiBOb05vZGU7CisgICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGgubV9zdG9yYWdl
QWNjZXNzRGF0YVtub2RlLT5zdG9yYWdlQWNjZXNzRGF0YUluZGV4KCldLmlkZW50aWZpZXJOdW1i
ZXIgPT0gaWRlbnRpZmllck51bWJlcikKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBjYXNl
IFB1dEJ5T2Zmc2V0OgotICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLm1fc3RvcmFnZUFjY2Vz
c0RhdGFbbm9kZS5zdG9yYWdlQWNjZXNzRGF0YUluZGV4KCldLmlkZW50aWZpZXJOdW1iZXIgPT0g
aWRlbnRpZmllck51bWJlcikgewotICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS5jaGlsZDEo
KSA9PSBjaGlsZDEpIC8vIE11c3QgYmUgc2FtZSBwcm9wZXJ0eSBzdG9yYWdlLgotICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGluZGV4OwotICAgICAgICAgICAgICAgICAgICByZXR1cm4g
Tm9Ob2RlOworICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLm1fc3RvcmFnZUFjY2Vzc0RhdGFb
bm9kZS0+c3RvcmFnZUFjY2Vzc0RhdGFJbmRleCgpXS5pZGVudGlmaWVyTnVtYmVyID09IGlkZW50
aWZpZXJOdW1iZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpID09
IGNoaWxkMSkgLy8gTXVzdCBiZSBzYW1lIHByb3BlcnR5IHN0b3JhZ2UuCisgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gbm9kZTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAg
IApAQCAtNjg5LDQ1ICs2NzcsNDQgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgLy8g
Y2hhbmdlLgogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIE5vTm9kZTsKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsK
ICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAg
aWYgKG1fZ3JhcGguY2xvYmJlcnNXb3JsZChpbmRleCkpCi0gICAgICAgICAgICAgICAgICAgIHJl
dHVybiBOb05vZGU7CisgICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGguY2xvYmJlcnNXb3JsZChu
b2RlKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAobm9kZS5jYW5FeGl0KCkpCi0gICAg
ICAgICAgICAgICAgcmV0dXJuIE5vTm9kZTsKKyAgICAgICAgICAgIGlmIChub2RlLT5jYW5FeGl0
KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJu
IE5vTm9kZTsKKyAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogICAgIAotICAgIE5vZGVJbmRleCBn
ZXRQcm9wZXJ0eVN0b3JhZ2VMb2FkRWxpbWluYXRpb24oTm9kZUluZGV4IGNoaWxkMSkKKyAgICBO
b2RlKiBnZXRQcm9wZXJ0eVN0b3JhZ2VMb2FkRWxpbWluYXRpb24oTm9kZSogY2hpbGQxKQogICAg
IHsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9pbmRleEluQmxvY2s7IGktLTspIHsKLSAg
ICAgICAgICAgIE5vZGVJbmRleCBpbmRleCA9IG1fY3VycmVudEJsb2NrLT5hdChpKTsKLSAgICAg
ICAgICAgIGlmIChpbmRleCA9PSBjaGlsZDEpIAorICAgICAgICAgICAgTm9kZSogbm9kZSA9IG1f
Y3VycmVudEJsb2NrLT5hdChpKTsKKyAgICAgICAgICAgIGlmIChub2RlID09IGNoaWxkMSkgCiAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBo
W2luZGV4XTsKLSAgICAgICAgICAgIGlmICghbm9kZS5zaG91bGRHZW5lcmF0ZSgpKQorICAgICAg
ICAgICAgaWYgKCFub2RlLT5zaG91bGRHZW5lcmF0ZSgpKQogICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwotICAgICAgICAgICAgc3dpdGNoIChub2RlLm9wKCkpIHsKKyAgICAgICAgICAgIHN3aXRj
aCAobm9kZS0+b3AoKSkgewogICAgICAgICAgICAgY2FzZSBHZXRCdXR0ZXJmbHk6Ci0gICAgICAg
ICAgICAgICAgaWYgKG5vZGUuY2hpbGQxKCkgPT0gY2hpbGQxKQotICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gaW5kZXg7CisgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpID09IGNo
aWxkMSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGU7CiAgICAgICAgICAgICAgICAg
YnJlYWs7CiAKICAgICAgICAgICAgIGNhc2UgQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2U6CiAgICAg
ICAgICAgICBjYXNlIFJlYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2U6CiAgICAgICAgICAgICAgICAg
Ly8gSWYgd2UgY2FuIGNoZWFwbHkgcHJvdmUgdGhpcyBpcyBhIGNoYW5nZSB0byBvdXIgb2JqZWN0
J3Mgc3RvcmFnZSwgd2UKICAgICAgICAgICAgICAgICAvLyBjYW4gb3B0aW1pemUgYW5kIHVzZSBp
dHMgcmVzdWx0LgotICAgICAgICAgICAgICAgIGlmIChub2RlLmNoaWxkMSgpID09IGNoaWxkMSkK
LSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGluZGV4OworICAgICAgICAgICAgICAgIGlmIChu
b2RlLT5jaGlsZDEoKSA9PSBjaGlsZDEpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBub2Rl
OwogICAgICAgICAgICAgICAgIC8vIE90aGVyd2lzZSwgd2UgY3VycmVudGx5IGNhbid0IHByb3Zl
IHRoYXQgdGhpcyBkb2Vzbid0IGNoYW5nZSBvdXIgb2JqZWN0J3MKICAgICAgICAgICAgICAgICAv
LyBzdG9yYWdlLCBzbyB3ZSBjb25zZXJ2YXRpdmVseSBhc3N1bWUgdGhhdCBpdCBtYXkgY2hhbmdl
IHRoZSBzdG9yYWdlCiAgICAgICAgICAgICAgICAgLy8gcG9pbnRlciBvZiBhbnkgb2JqZWN0LCBp
bmNsdWRpbmcgb3Vycy4KLSAgICAgICAgICAgICAgICByZXR1cm4gTm9Ob2RlOworICAgICAgICAg
ICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgY2FzZSBQdXRC
eU9mZnNldDoKICAgICAgICAgICAgIGNhc2UgUHV0U3RydWN0dXJlOgpAQCAtNzQzLDM0ICs3MzAs
MzMgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgLy8gY2hhbmdlLgogICAgICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0
dXJuIE5vTm9kZTsKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgICAgICAK
ICAgICAgICAgICAgIGNhc2UgQXJyYXlpZnk6CiAgICAgICAgICAgICBjYXNlIEFycmF5aWZ5VG9T
dHJ1Y3R1cmU6CiAgICAgICAgICAgICAgICAgLy8gV2UgY291bGQgY2hlY2sgaWYgdGhlIGFycmF5
aWZpY2F0aW9uIGNvdWxkIGFmZmVjdCBvdXIgYnV0dGVyZmx5LgogICAgICAgICAgICAgICAgIC8v
IEJ1dCB0aGF0IHNlZW1zIGxpa2UgaXQgd291bGQgdGFrZSBFZmZvcnQuCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIE5vTm9kZTsKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAg
ICAgICAKICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGgu
Y2xvYmJlcnNXb3JsZChpbmRleCkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBOb05vZGU7
CisgICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGguY2xvYmJlcnNXb3JsZChub2RlKSkKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIE5vTm9kZTsKKyAgICAgICAgcmV0dXJu
IDA7CiAgICAgfQogICAgIAotICAgIGJvb2wgY2hlY2tBcnJheUVsaW1pbmF0aW9uKE5vZGVJbmRl
eCBjaGlsZDEsIEFycmF5TW9kZSBhcnJheU1vZGUpCisgICAgYm9vbCBjaGVja0FycmF5RWxpbWlu
YXRpb24oTm9kZSogY2hpbGQxLCBBcnJheU1vZGUgYXJyYXlNb2RlKQogICAgIHsKICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gbV9pbmRleEluQmxvY2s7IGktLTspIHsKLSAgICAgICAgICAgIE5v
ZGVJbmRleCBpbmRleCA9IG1fY3VycmVudEJsb2NrLT5hdChpKTsKLSAgICAgICAgICAgIGlmIChp
bmRleCA9PSBjaGlsZDEpIAorICAgICAgICAgICAgTm9kZSogbm9kZSA9IG1fY3VycmVudEJsb2Nr
LT5hdChpKTsKKyAgICAgICAgICAgIGlmIChub2RlID09IGNoaWxkMSkgCiAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAKLSAgICAgICAgICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW2luZGV4XTsKLSAg
ICAgICAgICAgIGlmICghbm9kZS5zaG91bGRHZW5lcmF0ZSgpKQorICAgICAgICAgICAgaWYgKCFu
b2RlLT5zaG91bGRHZW5lcmF0ZSgpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAg
ICAgICAgc3dpdGNoIChub2RlLm9wKCkpIHsKKyAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3Ao
KSkgewogICAgICAgICAgICAgY2FzZSBQdXRCeU9mZnNldDoKICAgICAgICAgICAgIGNhc2UgUHV0
U3RydWN0dXJlOgogICAgICAgICAgICAgICAgIC8vIENoYW5naW5nIHRoZSBzdHJ1Y3R1cmUgb3Ig
cHV0dGluZyB0byB0aGUgc3RvcmFnZSBjYW5ub3QKQEAgLTc3OCw3ICs3NjQsNyBAQCBwcml2YXRl
OgogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAg
Y2FzZSBDaGVja0FycmF5OgotICAgICAgICAgICAgICAgIGlmIChub2RlLmNoaWxkMSgpID09IGNo
aWxkMSAmJiBub2RlLmFycmF5TW9kZSgpID09IGFycmF5TW9kZSkKKyAgICAgICAgICAgICAgICBp
ZiAobm9kZS0+Y2hpbGQxKCkgPT0gY2hpbGQxICYmIG5vZGUtPmFycmF5TW9kZSgpID09IGFycmF5
TW9kZSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICAgICAgCkBAIC03ODksNyArNzc1LDcgQEAgcHJpdmF0ZToKICAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAg
ICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLmNsb2JiZXJzV29ybGQoaW5k
ZXgpKQorICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLmNsb2JiZXJzV29ybGQobm9kZSkpCiAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgIH0KQEAgLTc5NywyMCArNzgzLDE5IEBAIHByaXZhdGU6CiAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBOb2RlSW5kZXggZ2V0SW5kZXhlZFByb3BlcnR5U3Rv
cmFnZUxvYWRFbGltaW5hdGlvbihOb2RlSW5kZXggY2hpbGQxLCBBcnJheU1vZGUgYXJyYXlNb2Rl
KQorICAgIE5vZGUqIGdldEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2VMb2FkRWxpbWluYXRpb24oTm9k
ZSogY2hpbGQxLCBBcnJheU1vZGUgYXJyYXlNb2RlKQogICAgIHsKICAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gbV9pbmRleEluQmxvY2s7IGktLTspIHsKLSAgICAgICAgICAgIE5vZGVJbmRleCBp
bmRleCA9IG1fY3VycmVudEJsb2NrLT5hdChpKTsKLSAgICAgICAgICAgIGlmIChpbmRleCA9PSBj
aGlsZDEpIAorICAgICAgICAgICAgTm9kZSogbm9kZSA9IG1fY3VycmVudEJsb2NrLT5hdChpKTsK
KyAgICAgICAgICAgIGlmIChub2RlID09IGNoaWxkMSkgCiAgICAgICAgICAgICAgICAgYnJlYWs7
CiAKLSAgICAgICAgICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW2luZGV4XTsKLSAgICAgICAgICAg
IGlmICghbm9kZS5zaG91bGRHZW5lcmF0ZSgpKQorICAgICAgICAgICAgaWYgKCFub2RlLT5zaG91
bGRHZW5lcmF0ZSgpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgc3dp
dGNoIChub2RlLm9wKCkpIHsKKyAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewogICAg
ICAgICAgICAgY2FzZSBHZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlOiB7Ci0gICAgICAgICAgICAg
ICAgaWYgKG5vZGUuY2hpbGQxKCkgPT0gY2hpbGQxICYmIG5vZGUuYXJyYXlNb2RlKCkgPT0gYXJy
YXlNb2RlKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW5kZXg7CisgICAgICAgICAgICAg
ICAgaWYgKG5vZGUtPmNoaWxkMSgpID09IGNoaWxkMSAmJiBub2RlLT5hcnJheU1vZGUoKSA9PSBh
cnJheU1vZGUpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBub2RlOwogICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgfQogCkBAIC04MjEsODEgKzgwNiw3OSBAQCBwcml2YXRl
OgogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAg
ZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC5jbG9iYmVyc1dvcmxkKGluZGV4
KSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5vTm9kZTsKKyAgICAgICAgICAgICAgICBp
ZiAobV9ncmFwaC5jbG9iYmVyc1dvcmxkKG5vZGUpKQorICAgICAgICAgICAgICAgICAgICByZXR1
cm4gMDsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgfQot
ICAgICAgICByZXR1cm4gTm9Ob2RlOworICAgICAgICByZXR1cm4gMDsKICAgICB9CiAgICAgCi0g
ICAgTm9kZUluZGV4IGdldE15U2NvcGVMb2FkRWxpbWluYXRpb24oSW5saW5lQ2FsbEZyYW1lKiBp
bmxpbmVDYWxsRnJhbWUpCisgICAgTm9kZSogZ2V0TXlTY29wZUxvYWRFbGltaW5hdGlvbihJbmxp
bmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSkKICAgICB7CiAgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IG1faW5kZXhJbkJsb2NrOyBpLS07KSB7Ci0gICAgICAgICAgICBOb2RlSW5kZXggaW5k
ZXggPSBtX2N1cnJlbnRCbG9jay0+YXQoaSk7Ci0gICAgICAgICAgICBOb2RlJiBub2RlID0gbV9n
cmFwaFtpbmRleF07Ci0gICAgICAgICAgICBpZiAoIW5vZGUuc2hvdWxkR2VuZXJhdGUoKSkKKyAg
ICAgICAgICAgIE5vZGUqIG5vZGUgPSBtX2N1cnJlbnRCbG9jay0+YXQoaSk7CisgICAgICAgICAg
ICBpZiAoIW5vZGUtPnNob3VsZEdlbmVyYXRlKCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7
Ci0gICAgICAgICAgICBpZiAobm9kZS5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSAhPSBpbmxp
bmVDYWxsRnJhbWUpCisgICAgICAgICAgICBpZiAobm9kZS0+Y29kZU9yaWdpbi5pbmxpbmVDYWxs
RnJhbWUgIT0gaW5saW5lQ2FsbEZyYW1lKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAg
ICAgICAgICAgc3dpdGNoIChub2RlLm9wKCkpIHsKKyAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+
b3AoKSkgewogICAgICAgICAgICAgY2FzZSBDcmVhdGVBY3RpdmF0aW9uOgogICAgICAgICAgICAg
ICAgIC8vIFRoaXMgbWF5IGNhdXNlIHVzIHRvIHJldHVybiBhIGRpZmZlcmVudCBzY29wZS4KLSAg
ICAgICAgICAgICAgICByZXR1cm4gTm9Ob2RlOworICAgICAgICAgICAgICAgIHJldHVybiAwOwog
ICAgICAgICAgICAgY2FzZSBHZXRNeVNjb3BlOgotICAgICAgICAgICAgICAgIHJldHVybiBpbmRl
eDsKKyAgICAgICAgICAgICAgICByZXR1cm4gbm9kZTsKICAgICAgICAgICAgIGNhc2UgU2V0TXlT
Y29wZToKLSAgICAgICAgICAgICAgICByZXR1cm4gbm9kZS5jaGlsZDEoKS5pbmRleCgpOworICAg
ICAgICAgICAgICAgIHJldHVybiBub2RlLT5jaGlsZDEoKS5ub2RlKCk7CiAgICAgICAgICAgICBk
ZWZhdWx0OgogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICB9
Ci0gICAgICAgIHJldHVybiBOb05vZGU7CisgICAgICAgIHJldHVybiAwOwogICAgIH0KICAgICAK
LSAgICBOb2RlSW5kZXggZ2V0TG9jYWxMb2FkRWxpbWluYXRpb24oVmlydHVhbFJlZ2lzdGVyIGxv
Y2FsLCBOb2RlSW5kZXgmIHJlbGV2YW50TG9jYWxPcCwgYm9vbCBjYXJlQWJvdXRDbG9iYmVyaW5n
KQorICAgIE5vZGUqIGdldExvY2FsTG9hZEVsaW1pbmF0aW9uKFZpcnR1YWxSZWdpc3RlciBsb2Nh
bCwgTm9kZSomIHJlbGV2YW50TG9jYWxPcCwgYm9vbCBjYXJlQWJvdXRDbG9iYmVyaW5nKQogICAg
IHsKLSAgICAgICAgcmVsZXZhbnRMb2NhbE9wID0gTm9Ob2RlOworICAgICAgICByZWxldmFudExv
Y2FsT3AgPSAwOwogICAgICAgICAKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9pbmRleElu
QmxvY2s7IGktLTspIHsKLSAgICAgICAgICAgIE5vZGVJbmRleCBpbmRleCA9IG1fY3VycmVudEJs
b2NrLT5hdChpKTsKLSAgICAgICAgICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW2luZGV4XTsKLSAg
ICAgICAgICAgIGlmICghbm9kZS5zaG91bGRHZW5lcmF0ZSgpKQorICAgICAgICAgICAgTm9kZSog
bm9kZSA9IG1fY3VycmVudEJsb2NrLT5hdChpKTsKKyAgICAgICAgICAgIGlmICghbm9kZS0+c2hv
dWxkR2VuZXJhdGUoKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIHN3
aXRjaCAobm9kZS5vcCgpKSB7CisgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKICAg
ICAgICAgICAgIGNhc2UgR2V0TG9jYWw6Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGUubG9jYWwo
KSA9PSBsb2NhbCkgewotICAgICAgICAgICAgICAgICAgICByZWxldmFudExvY2FsT3AgPSBpbmRl
eDsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGluZGV4OworICAgICAgICAgICAgICAgIGlm
IChub2RlLT5sb2NhbCgpID09IGxvY2FsKSB7CisgICAgICAgICAgICAgICAgICAgIHJlbGV2YW50
TG9jYWxPcCA9IG5vZGU7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBub2RlOwogICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAKICAg
ICAgICAgICAgIGNhc2UgR2V0TG9jYWxVbmxpbmtlZDoKLSAgICAgICAgICAgICAgICBpZiAobm9k
ZS51bmxpbmtlZExvY2FsKCkgPT0gbG9jYWwpIHsKLSAgICAgICAgICAgICAgICAgICAgcmVsZXZh
bnRMb2NhbE9wID0gaW5kZXg7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBpbmRleDsKKyAg
ICAgICAgICAgICAgICBpZiAobm9kZS0+dW5saW5rZWRMb2NhbCgpID09IGxvY2FsKSB7CisgICAg
ICAgICAgICAgICAgICAgIHJlbGV2YW50TG9jYWxPcCA9IG5vZGU7CisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBub2RlOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGNhc2UgU2V0TG9jYWw6Ci0gICAgICAg
ICAgICAgICAgaWYgKG5vZGUubG9jYWwoKSA9PSBsb2NhbCkgewotICAgICAgICAgICAgICAgICAg
ICByZWxldmFudExvY2FsT3AgPSBpbmRleDsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5v
ZGUuY2hpbGQxKCkuaW5kZXgoKTsKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+bG9jYWwoKSA9
PSBsb2NhbCkgeworICAgICAgICAgICAgICAgICAgICByZWxldmFudExvY2FsT3AgPSBub2RlOwor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gbm9kZS0+Y2hpbGQxKCkubm9kZSgpOwogICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAKICAg
ICAgICAgICAgIGNhc2UgUHV0U2NvcGVkVmFyOgotICAgICAgICAgICAgICAgIGlmIChzdGF0aWNf
Y2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KG5vZGUudmFyTnVtYmVyKCkpID09IGxvY2FsKQotICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gTm9Ob2RlOworICAgICAgICAgICAgICAgIGlmIChzdGF0aWNf
Y2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KG5vZGUtPnZhck51bWJlcigpKSA9PSBsb2NhbCkKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICAgICAgCiAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIGlmIChjYXJl
QWJvdXRDbG9iYmVyaW5nICYmIG1fZ3JhcGguY2xvYmJlcnNXb3JsZChpbmRleCkpCi0gICAgICAg
ICAgICAgICAgICAgIHJldHVybiBOb05vZGU7CisgICAgICAgICAgICAgICAgaWYgKGNhcmVBYm91
dENsb2JiZXJpbmcgJiYgbV9ncmFwaC5jbG9iYmVyc1dvcmxkKG5vZGUpKQorICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0K
ICAgICAgICAgfQotICAgICAgICByZXR1cm4gTm9Ob2RlOworICAgICAgICByZXR1cm4gMDsKICAg
ICB9CiAgICAgCiAgICAgc3RydWN0IFNldExvY2FsU3RvcmVFbGltaW5hdGlvblJlc3VsdCB7CkBA
IC05MTEsNTEgKzg5NCw1MCBAQCBwcml2YXRlOgogICAgICAgICBib29sIG1heUNsb2JiZXJXb3Js
ZDsKICAgICB9OwogICAgIFNldExvY2FsU3RvcmVFbGltaW5hdGlvblJlc3VsdCBzZXRMb2NhbFN0
b3JlRWxpbWluYXRpb24oCi0gICAgICAgIFZpcnR1YWxSZWdpc3RlciBsb2NhbCwgTm9kZUluZGV4
IGV4cGVjdGVkTm9kZUluZGV4KQorICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgbG9jYWwsIE5vZGUq
IGV4cGVjdGVkTm9kZSkKICAgICB7CiAgICAgICAgIFNldExvY2FsU3RvcmVFbGltaW5hdGlvblJl
c3VsdCByZXN1bHQ7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1faW5kZXhJbkJsb2NrOyBp
LS07KSB7Ci0gICAgICAgICAgICBOb2RlSW5kZXggaW5kZXggPSBtX2N1cnJlbnRCbG9jay0+YXQo
aSk7Ci0gICAgICAgICAgICBOb2RlJiBub2RlID0gbV9ncmFwaFtpbmRleF07Ci0gICAgICAgICAg
ICBpZiAoIW5vZGUuc2hvdWxkR2VuZXJhdGUoKSkKKyAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBt
X2N1cnJlbnRCbG9jay0+YXQoaSk7CisgICAgICAgICAgICBpZiAoIW5vZGUtPnNob3VsZEdlbmVy
YXRlKCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBzd2l0Y2ggKG5v
ZGUub3AoKSkgeworICAgICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CiAgICAgICAgICAg
ICBjYXNlIEdldExvY2FsOgogICAgICAgICAgICAgY2FzZSBGbHVzaDoKLSAgICAgICAgICAgICAg
ICBpZiAobm9kZS5sb2NhbCgpID09IGxvY2FsKQorICAgICAgICAgICAgICAgIGlmIChub2RlLT5s
b2NhbCgpID09IGxvY2FsKQogICAgICAgICAgICAgICAgICAgICByZXN1bHQubWF5QmVBY2Nlc3Nl
ZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgCiAgICAg
ICAgICAgICBjYXNlIEdldExvY2FsVW5saW5rZWQ6Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGUu
dW5saW5rZWRMb2NhbCgpID09IGxvY2FsKQorICAgICAgICAgICAgICAgIGlmIChub2RlLT51bmxp
bmtlZExvY2FsKCkgPT0gbG9jYWwpCiAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5tYXlCZUFj
Y2Vzc2VkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAK
ICAgICAgICAgICAgIGNhc2UgU2V0TG9jYWw6IHsKLSAgICAgICAgICAgICAgICBpZiAobm9kZS5s
b2NhbCgpICE9IGxvY2FsKQorICAgICAgICAgICAgICAgIGlmIChub2RlLT5sb2NhbCgpICE9IGxv
Y2FsKQogICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBpZiAoaW5k
ZXggIT0gZXhwZWN0ZWROb2RlSW5kZXgpCisgICAgICAgICAgICAgICAgaWYgKG5vZGUgIT0gZXhw
ZWN0ZWROb2RlKQogICAgICAgICAgICAgICAgICAgICByZXN1bHQubWF5QmVBY2Nlc3NlZCA9IHRy
dWU7Ci0gICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGhbaW5kZXhdLnJlZkNvdW50KCkgPiAxKQor
ICAgICAgICAgICAgICAgIGlmIChub2RlLT5yZWZDb3VudCgpID4gMSkKICAgICAgICAgICAgICAg
ICAgICAgcmVzdWx0Lm1heUJlQWNjZXNzZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgIHJldHVy
biByZXN1bHQ7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBj
YXNlIEdldFNjb3BlZFZhcjoKLSAgICAgICAgICAgICAgICBpZiAoc3RhdGljX2Nhc3Q8VmlydHVh
bFJlZ2lzdGVyPihub2RlLnZhck51bWJlcigpKSA9PSBsb2NhbCkKKyAgICAgICAgICAgICAgICBp
ZiAoc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihub2RlLT52YXJOdW1iZXIoKSkgPT0gbG9j
YWwpCiAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5tYXlCZUFjY2Vzc2VkID0gdHJ1ZTsKICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGNhc2Ug
R2V0TXlTY29wZToKICAgICAgICAgICAgIGNhc2UgU2tpcFRvcFNjb3BlOgotICAgICAgICAgICAg
ICAgIGlmIChtX2dyYXBoLnVuY2hlY2tlZEFjdGl2YXRpb25SZWdpc3RlckZvcihub2RlLmNvZGVP
cmlnaW4pID09IGxvY2FsKQorICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLnVuY2hlY2tlZEFj
dGl2YXRpb25SZWdpc3RlckZvcihub2RlLT5jb2RlT3JpZ2luKSA9PSBsb2NhbCkKICAgICAgICAg
ICAgICAgICAgICAgcmVzdWx0Lm1heUJlQWNjZXNzZWQgPSB0cnVlOwogICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgY2FzZSBDaGVja0FyZ3VtZW50
c05vdENyZWF0ZWQ6CiAgICAgICAgICAgICBjYXNlIEdldE15QXJndW1lbnRzTGVuZ3RoOgogICAg
ICAgICAgICAgY2FzZSBHZXRNeUFyZ3VtZW50c0xlbmd0aFNhZmU6Ci0gICAgICAgICAgICAgICAg
aWYgKG1fZ3JhcGgudW5jaGVja2VkQXJndW1lbnRzUmVnaXN0ZXJGb3Iobm9kZS5jb2RlT3JpZ2lu
KSA9PSBsb2NhbCkKKyAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC51bmNoZWNrZWRBcmd1bWVu
dHNSZWdpc3RlckZvcihub2RlLT5jb2RlT3JpZ2luKSA9PSBsb2NhbCkKICAgICAgICAgICAgICAg
ICAgICAgcmVzdWx0Lm1heUJlQWNjZXNzZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgICAgIApAQCAtOTY2LDcgKzk0OCw3IEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICAgICAgCiAgICAgICAgICAgICBjYXNlIEdldEJ5VmFsOgogICAgICAgICAgICAgICAgIC8v
IElmIHRoaXMgaXMgYWNjZXNzaW5nIGFyZ3VtZW50cyB0aGVuIGl0J3MgcG90ZW50aWFsbHkgYWNj
ZXNzaW5nIGxvY2Fscy4KLSAgICAgICAgICAgICAgICBpZiAobV9ncmFwaFtub2RlLmNoaWxkMSgp
XS5zaG91bGRTcGVjdWxhdGVBcmd1bWVudHMoKSkKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+
Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZUFyZ3VtZW50cygpKQogICAgICAgICAgICAgICAgICAg
ICByZXN1bHQubWF5QmVBY2Nlc3NlZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICAgICAgCkBAIC05ODMsOCArOTY1LDggQEAgcHJpdmF0ZToKICAgICAgICAgICAg
IGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICByZXN1bHQubWF5RXhpdCB8PSBub2RlLmNhbkV4aXQoKTsKLSAgICAgICAgICAgIHJlc3Vs
dC5tYXlDbG9iYmVyV29ybGQgfD0gbV9ncmFwaC5jbG9iYmVyc1dvcmxkKGluZGV4KTsKKyAgICAg
ICAgICAgIHJlc3VsdC5tYXlFeGl0IHw9IG5vZGUtPmNhbkV4aXQoKTsKKyAgICAgICAgICAgIHJl
c3VsdC5tYXlDbG9iYmVyV29ybGQgfD0gbV9ncmFwaC5jbG9iYmVyc1dvcmxkKG5vZGUpOwogICAg
ICAgICB9CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIC8v
IEJlIHNhZmUgaW4gcmVsZWFzZSBtb2RlLgpAQCAtOTk5LDYyICs5ODEsNjEgQEAgcHJpdmF0ZToK
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAgICAgIC8vIENoZWNrIGlmIHRoZXJl
IGlzIGFueSByZXBsYWNlbWVudC4KLSAgICAgICAgTm9kZUluZGV4IHJlcGxhY2VtZW50ID0gbV9n
cmFwaFtjaGlsZC5pbmRleCgpXS5yZXBsYWNlbWVudDsKLSAgICAgICAgaWYgKHJlcGxhY2VtZW50
ID09IE5vTm9kZSkKKyAgICAgICAgTm9kZSogcmVwbGFjZW1lbnQgPSBjaGlsZC0+cmVwbGFjZW1l
bnQ7CisgICAgICAgIGlmICghcmVwbGFjZW1lbnQpCiAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgIAotICAgICAgICBjaGlsZC5zZXRJbmRleChyZXBsYWNlbWVudCk7CisgICAgICAgIGNoaWxk
LnNldE5vZGUocmVwbGFjZW1lbnQpOwogICAgICAgICAKICAgICAgICAgLy8gVGhlcmUgaXMgZGVm
aW5pdGVseSBhIHJlcGxhY2VtZW50LiBBc3NlcnQgdGhhdCB0aGUgcmVwbGFjZW1lbnQgZG9lcyBu
b3QKICAgICAgICAgLy8gaGF2ZSBhIHJlcGxhY2VtZW50LgotICAgICAgICBBU1NFUlQobV9ncmFw
aFtjaGlsZC5pbmRleCgpXS5yZXBsYWNlbWVudCA9PSBOb05vZGUpOworICAgICAgICBBU1NFUlQo
IWNoaWxkLT5yZXBsYWNlbWVudCk7CiAgICAgICAgIAogICAgICAgICBpZiAoYWRkUmVmKQogICAg
ICAgICAgICAgbV9ncmFwaC5yZWYoY2hpbGQpOwogICAgIH0KICAgICAKLSAgICB2b2lkIGVsaW1p
bmF0ZUlycmVsZXZhbnRQaGFudG9tQ2hpbGRyZW4oTm9kZSYgbm9kZSkKKyAgICB2b2lkIGVsaW1p
bmF0ZUlycmVsZXZhbnRQaGFudG9tQ2hpbGRyZW4oTm9kZSogbm9kZSkKICAgICB7Ci0gICAgICAg
IEFTU0VSVChub2RlLm9wKCkgPT0gUGhhbnRvbSk7CisgICAgICAgIEFTU0VSVChub2RlLT5vcCgp
ID09IFBoYW50b20pOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgQWRqYWNlbmN5
TGlzdDo6U2l6ZTsgKytpKSB7Ci0gICAgICAgICAgICBFZGdlIGVkZ2UgPSBub2RlLmNoaWxkcmVu
LmNoaWxkKGkpOworICAgICAgICAgICAgRWRnZSBlZGdlID0gbm9kZS0+Y2hpbGRyZW4uY2hpbGQo
aSk7CiAgICAgICAgICAgICBpZiAoIWVkZ2UpCiAgICAgICAgICAgICAgICAgY29udGludWU7Ci0g
ICAgICAgICAgICBpZiAobV9ncmFwaFtlZGdlXS5mbGFncygpICYgTm9kZVJlbGV2YW50VG9PU1Ip
CisgICAgICAgICAgICBpZiAoZWRnZS0+ZmxhZ3MoKSAmIE5vZGVSZWxldmFudFRvT1NSKQogICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgCiAjaWYgREZHX0VOQUJMRShERUJV
R19QUk9QQUdBVElPTl9WRVJCT1NFKQotICAgICAgICAgICAgZGF0YUxvZygiICAgRWxpbWluYXRp
bmcgZWRnZSBAIiwgbV9jb21waWxlSW5kZXgsICIgLT4gQCIsIGVkZ2UuaW5kZXgoKSk7CisgICAg
ICAgICAgICBkYXRhTG9nKCIgICBFbGltaW5hdGluZyBlZGdlIEAiLCBtX2N1cnJlbnROb2RlLT5p
bmRleCgpLCAiIC0+IEAiLCBlZGdlLT5pbmRleCgpKTsKICNlbmRpZgogICAgICAgICAgICAgbV9n
cmFwaC5kZXJlZihlZGdlKTsKLSAgICAgICAgICAgIG5vZGUuY2hpbGRyZW4ucmVtb3ZlRWRnZUZy
b21CYWcoaS0tKTsKKyAgICAgICAgICAgIG5vZGUtPmNoaWxkcmVuLnJlbW92ZUVkZ2VGcm9tQmFn
KGktLSk7CiAgICAgICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOwogICAgICAgICB9CiAgICAgfQog
ICAgIAogICAgIGVudW0gUHJlZGljdGlvbkhhbmRsaW5nTW9kZSB7IFJlcXVpcmVTYW1lUHJlZGlj
dGlvbiwgQWxsb3dQcmVkaWN0aW9uTWlzbWF0Y2ggfTsKLSAgICBib29sIHNldFJlcGxhY2VtZW50
KE5vZGVJbmRleCByZXBsYWNlbWVudCwgUHJlZGljdGlvbkhhbmRsaW5nTW9kZSBwcmVkaWN0aW9u
SGFuZGxpbmdNb2RlID0gUmVxdWlyZVNhbWVQcmVkaWN0aW9uKQorICAgIGJvb2wgc2V0UmVwbGFj
ZW1lbnQoTm9kZSogcmVwbGFjZW1lbnQsIFByZWRpY3Rpb25IYW5kbGluZ01vZGUgcHJlZGljdGlv
bkhhbmRsaW5nTW9kZSA9IFJlcXVpcmVTYW1lUHJlZGljdGlvbikKICAgICB7Ci0gICAgICAgIGlm
IChyZXBsYWNlbWVudCA9PSBOb05vZGUpCisgICAgICAgIGlmICghcmVwbGFjZW1lbnQpCiAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIAogICAgICAgICAvLyBCZSBzYWZlLiBEb24n
dCB0cnkgdG8gcGVyZm9ybSByZXBsYWNlbWVudHMgaWYgdGhlIHByZWRpY3Rpb25zIGRvbid0CiAg
ICAgICAgIC8vIGFncmVlLgogICAgICAgICBpZiAocHJlZGljdGlvbkhhbmRsaW5nTW9kZSA9PSBS
ZXF1aXJlU2FtZVByZWRpY3Rpb24KLSAgICAgICAgICAgICYmIG1fZ3JhcGhbbV9jb21waWxlSW5k
ZXhdLnByZWRpY3Rpb24oKSAhPSBtX2dyYXBoW3JlcGxhY2VtZW50XS5wcmVkaWN0aW9uKCkpCisg
ICAgICAgICAgICAmJiBtX2N1cnJlbnROb2RlLT5wcmVkaWN0aW9uKCkgIT0gcmVwbGFjZW1lbnQt
PnByZWRpY3Rpb24oKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgCiAjaWYg
REZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQotICAgICAgICBkYXRhTG9nRigi
ICAgUmVwbGFjaW5nIEAldSAtPiBAJXUiLCBtX2NvbXBpbGVJbmRleCwgcmVwbGFjZW1lbnQpOwor
ICAgICAgICBkYXRhTG9nRigiICAgUmVwbGFjaW5nIEAldSAtPiBAJXUiLCBtX2NvbXBpbGVOb2Rl
LT5pbmRleCgpLCByZXBsYWNlbWVudC0+aW5kZXgoKSk7CiAjZW5kaWYKICAgICAgICAgCi0gICAg
ICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW21fY29tcGlsZUluZGV4XTsKLSAgICAgICAgbm9kZS5z
ZXRPcEFuZERlZmF1bHRGbGFncyhQaGFudG9tKTsKLSAgICAgICAgbm9kZS5zZXRSZWZDb3VudCgx
KTsKLSAgICAgICAgZWxpbWluYXRlSXJyZWxldmFudFBoYW50b21DaGlsZHJlbihub2RlKTsKKyAg
ICAgICAgbV9jdXJyZW50Tm9kZS0+c2V0T3BBbmREZWZhdWx0RmxhZ3MoUGhhbnRvbSk7CisgICAg
ICAgIG1fY3VycmVudE5vZGUtPnNldFJlZkNvdW50KDEpOworICAgICAgICBlbGltaW5hdGVJcnJl
bGV2YW50UGhhbnRvbUNoaWxkcmVuKG1fY3VycmVudE5vZGUpOwogICAgICAgICAKICAgICAgICAg
Ly8gQXQgdGhpcyBwb2ludCB3ZSB3aWxsIGVsaW1pbmF0ZSBhbGwgcmVmZXJlbmNlcyB0byB0aGlz
IG5vZGUuCi0gICAgICAgIG1fZ3JhcGhbbV9jb21waWxlSW5kZXhdLnJlcGxhY2VtZW50ID0gcmVw
bGFjZW1lbnQ7CisgICAgICAgIG1fY3VycmVudE5vZGUtPnJlcGxhY2VtZW50ID0gcmVwbGFjZW1l
bnQ7CiAgICAgICAgIAogICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOwogICAgICAgICAKQEAgLTEw
NjcsNTEgKzEwNDgsNDkgQEAgcHJpdmF0ZToKICAgICAgICAgZGF0YUxvZ0YoIiAgIEVsaW1pbmF0
aW5nIEAldSIsIG1fY29tcGlsZUluZGV4KTsKICNlbmRpZgogICAgICAgICAKLSAgICAgICAgTm9k
ZSYgbm9kZSA9IG1fZ3JhcGhbbV9jb21waWxlSW5kZXhdOwotICAgICAgICBBU1NFUlQobm9kZS5y
ZWZDb3VudCgpID09IDEpOwotICAgICAgICBBU1NFUlQobm9kZS5tdXN0R2VuZXJhdGUoKSk7Ci0g
ICAgICAgIG5vZGUuc2V0T3BBbmREZWZhdWx0RmxhZ3MoUGhhbnRvbSk7Ci0gICAgICAgIGVsaW1p
bmF0ZUlycmVsZXZhbnRQaGFudG9tQ2hpbGRyZW4obm9kZSk7CisgICAgICAgIEFTU0VSVChtX2N1
cnJlbnROb2RlLT5yZWZDb3VudCgpID09IDEpOworICAgICAgICBBU1NFUlQobV9jdXJyZW50Tm9k
ZS0+bXVzdEdlbmVyYXRlKCkpOworICAgICAgICBtX2N1cnJlbnROb2RlLT5zZXRPcEFuZERlZmF1
bHRGbGFncyhQaGFudG9tKTsKKyAgICAgICAgZWxpbWluYXRlSXJyZWxldmFudFBoYW50b21DaGls
ZHJlbihtX2N1cnJlbnROb2RlKTsKICAgICAgICAgCiAgICAgICAgIG1fY2hhbmdlZCA9IHRydWU7
CiAgICAgfQogICAgIAotICAgIHZvaWQgZWxpbWluYXRlKE5vZGVJbmRleCBub2RlSW5kZXgsIE5v
ZGVUeXBlIHBoYW50b21UeXBlID0gUGhhbnRvbSkKKyAgICB2b2lkIGVsaW1pbmF0ZShOb2RlKiBu
b2RlLCBOb2RlVHlwZSBwaGFudG9tVHlwZSA9IFBoYW50b20pCiAgICAgewotICAgICAgICBpZiAo
bm9kZUluZGV4ID09IE5vTm9kZSkKKyAgICAgICAgaWYgKCFub2RlKQogICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICBOb2RlJiBub2RlID0gbV9ncmFwaFtub2RlSW5kZXhdOwotICAgICAgICBp
ZiAobm9kZS5yZWZDb3VudCgpICE9IDEpCisgICAgICAgIGlmIChub2RlLT5yZWZDb3VudCgpICE9
IDEpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIEFTU0VSVChub2RlLm11c3RHZW5lcmF0
ZSgpKTsKLSAgICAgICAgbm9kZS5zZXRPcEFuZERlZmF1bHRGbGFncyhwaGFudG9tVHlwZSk7Cisg
ICAgICAgIEFTU0VSVChub2RlLT5tdXN0R2VuZXJhdGUoKSk7CisgICAgICAgIG5vZGUtPnNldE9w
QW5kRGVmYXVsdEZsYWdzKHBoYW50b21UeXBlKTsKICAgICAgICAgaWYgKHBoYW50b21UeXBlID09
IFBoYW50b20pCiAgICAgICAgICAgICBlbGltaW5hdGVJcnJlbGV2YW50UGhhbnRvbUNoaWxkcmVu
KG5vZGUpOwogICAgICAgICAKICAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKICAgICB9CiAgICAg
Ci0gICAgdm9pZCBwZXJmb3JtTm9kZUNTRShOb2RlJiBub2RlKQorICAgIHZvaWQgcGVyZm9ybU5v
ZGVDU0UoTm9kZSogbm9kZSkKICAgICB7Ci0gICAgICAgIGJvb2wgc2hvdWxkR2VuZXJhdGUgPSBu
b2RlLnNob3VsZEdlbmVyYXRlKCk7CisgICAgICAgIGJvb2wgc2hvdWxkR2VuZXJhdGUgPSBub2Rl
LT5zaG91bGRHZW5lcmF0ZSgpOwogCi0gICAgICAgIGlmIChub2RlLmZsYWdzKCkgJiBOb2RlSGFz
VmFyQXJncykgewotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBjaGlsZElkeCA9IG5vZGUuZmly
c3RDaGlsZCgpOyBjaGlsZElkeCA8IG5vZGUuZmlyc3RDaGlsZCgpICsgbm9kZS5udW1DaGlsZHJl
bigpOyBjaGlsZElkeCsrKQorICAgICAgICBpZiAobm9kZS0+ZmxhZ3MoKSAmIE5vZGVIYXNWYXJB
cmdzKSB7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGNoaWxkSWR4ID0gbm9kZS0+Zmlyc3RD
aGlsZCgpOyBjaGlsZElkeCA8IG5vZGUtPmZpcnN0Q2hpbGQoKSArIG5vZGUtPm51bUNoaWxkcmVu
KCk7IGNoaWxkSWR4KyspCiAgICAgICAgICAgICAgICAgcGVyZm9ybVN1YnN0aXR1dGlvbihtX2dy
YXBoLm1fdmFyQXJnQ2hpbGRyZW5bY2hpbGRJZHhdLCBzaG91bGRHZW5lcmF0ZSk7CiAgICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICBwZXJmb3JtU3Vic3RpdHV0aW9uKG5vZGUuY2hpbGRyZW4u
Y2hpbGQxKCksIHNob3VsZEdlbmVyYXRlKTsKLSAgICAgICAgICAgIHBlcmZvcm1TdWJzdGl0dXRp
b24obm9kZS5jaGlsZHJlbi5jaGlsZDIoKSwgc2hvdWxkR2VuZXJhdGUpOwotICAgICAgICAgICAg
cGVyZm9ybVN1YnN0aXR1dGlvbihub2RlLmNoaWxkcmVuLmNoaWxkMygpLCBzaG91bGRHZW5lcmF0
ZSk7CisgICAgICAgICAgICBwZXJmb3JtU3Vic3RpdHV0aW9uKG5vZGUtPmNoaWxkcmVuLmNoaWxk
MSgpLCBzaG91bGRHZW5lcmF0ZSk7CisgICAgICAgICAgICBwZXJmb3JtU3Vic3RpdHV0aW9uKG5v
ZGUtPmNoaWxkcmVuLmNoaWxkMigpLCBzaG91bGRHZW5lcmF0ZSk7CisgICAgICAgICAgICBwZXJm
b3JtU3Vic3RpdHV0aW9uKG5vZGUtPmNoaWxkcmVuLmNoaWxkMygpLCBzaG91bGRHZW5lcmF0ZSk7
CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIGlmIChub2RlLm9wKCkgPT0gU2V0TG9jYWwp
Ci0gICAgICAgICAgICBtX2dyYXBoW25vZGUuY2hpbGQxKCldLm1lcmdlRmxhZ3MoTm9kZVJlbGV2
YW50VG9PU1IpOworICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBTZXRMb2NhbCkKKyAgICAgICAg
ICAgIG5vZGUtPmNoaWxkMSgpLT5tZXJnZUZsYWdzKE5vZGVSZWxldmFudFRvT1NSKTsKICAgICAg
ICAgCiAgICAgICAgIGlmICghc2hvdWxkR2VuZXJhdGUpCiAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgIAogI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKLSAgICAg
ICAgZGF0YUxvZ0YoIiAgICVzIEAldTogIiwgR3JhcGg6Om9wTmFtZShtX2dyYXBoW21fY29tcGls
ZUluZGV4XS5vcCgpKSwgbV9jb21waWxlSW5kZXgpOworICAgICAgICBkYXRhTG9nRigiICAgJXMg
QCV1OiAiLCBHcmFwaDo6b3BOYW1lKG5vZGUtPm9wKCkpLCBub2RlLT5pbmRleCgpKTsKICNlbmRp
ZgogICAgICAgICAKICAgICAgICAgLy8gTk9URTogdGhlcmUgYXJlIHNvbWUgbm9kZXMgdGhhdCB3
ZSBkZWxpYmVyYXRlbHkgZG9uJ3QgQ1NFIGV2ZW4gdGhvdWdoIHdlCkBAIC0xMTIzLDEwICsxMTAy
LDEwIEBAIHByaXZhdGU6CiAgICAgICAgIC8vIFRvUHJpbWl0aXZlLCBidXQgd2UgY291bGQgY2hh
bmdlIHRoYXQgd2l0aCBzb21lIHNwZWN1bGF0aW9ucyBpZiB3ZSByZWFsbHkKICAgICAgICAgLy8g
bmVlZGVkIHRvLgogICAgICAgICAKLSAgICAgICAgc3dpdGNoIChub2RlLm9wKCkpIHsKKyAgICAg
ICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CiAgICAgICAgIAogICAgICAgICBjYXNlIElkZW50aXR5
OgotICAgICAgICAgICAgc2V0UmVwbGFjZW1lbnQobm9kZS5jaGlsZDEoKS5pbmRleCgpKTsKKyAg
ICAgICAgICAgIHNldFJlcGxhY2VtZW50KG5vZGUtPmNoaWxkMSgpLm5vZGUoKSk7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgICAgICAvLyBIYW5kbGUgdGhlIHB1cmUgbm9k
ZXMuIFRoZXNlIG5vZGVzIG5ldmVyIGhhdmUgYW55IHNpZGUtZWZmZWN0cy4KQEAgLTExNjYsNDEg
KzExNDUsNDEgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAg
ICAgICAgIGNhc2UgR2V0Q2FsbGVlOgotICAgICAgICAgICAgc2V0UmVwbGFjZW1lbnQoZ2V0Q2Fs
bGVlTG9hZEVsaW1pbmF0aW9uKG5vZGUuY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpKTsKKyAg
ICAgICAgICAgIHNldFJlcGxhY2VtZW50KGdldENhbGxlZUxvYWRFbGltaW5hdGlvbihub2RlLT5j
b2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSkpOwogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAg
ICAgY2FzZSBHZXRMb2NhbDogewotICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJp
YWJsZUFjY2Vzc0RhdGEgPSBub2RlLnZhcmlhYmxlQWNjZXNzRGF0YSgpOworICAgICAgICAgICAg
VmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBub2RlLT52YXJpYWJsZUFj
Y2Vzc0RhdGEoKTsKICAgICAgICAgICAgIGlmICghdmFyaWFibGVBY2Nlc3NEYXRhLT5pc0NhcHR1
cmVkKCkpCiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBOb2RlSW5kZXggcmVs
ZXZhbnRMb2NhbE9wOwotICAgICAgICAgICAgTm9kZUluZGV4IHBvc3NpYmxlUmVwbGFjZW1lbnQg
PSBnZXRMb2NhbExvYWRFbGltaW5hdGlvbih2YXJpYWJsZUFjY2Vzc0RhdGEtPmxvY2FsKCksIHJl
bGV2YW50TG9jYWxPcCwgdmFyaWFibGVBY2Nlc3NEYXRhLT5pc0NhcHR1cmVkKCkpOwotICAgICAg
ICAgICAgaWYgKHJlbGV2YW50TG9jYWxPcCA9PSBOb05vZGUpCisgICAgICAgICAgICBOb2RlKiBy
ZWxldmFudExvY2FsT3A7CisgICAgICAgICAgICBOb2RlKiBwb3NzaWJsZVJlcGxhY2VtZW50ID0g
Z2V0TG9jYWxMb2FkRWxpbWluYXRpb24odmFyaWFibGVBY2Nlc3NEYXRhLT5sb2NhbCgpLCByZWxl
dmFudExvY2FsT3AsIHZhcmlhYmxlQWNjZXNzRGF0YS0+aXNDYXB0dXJlZCgpKTsKKyAgICAgICAg
ICAgIGlmICghcmVsZXZhbnRMb2NhbE9wKQogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgaWYgKG1fZ3JhcGhbcmVsZXZhbnRMb2NhbE9wXS5vcCgpICE9IEdldExvY2FsVW5saW5r
ZWQKLSAgICAgICAgICAgICAgICAmJiBtX2dyYXBoW3JlbGV2YW50TG9jYWxPcF0udmFyaWFibGVB
Y2Nlc3NEYXRhKCkgIT0gdmFyaWFibGVBY2Nlc3NEYXRhKQorICAgICAgICAgICAgaWYgKHJlbGV2
YW50TG9jYWxPcC0+b3AoKSAhPSBHZXRMb2NhbFVubGlua2VkCisgICAgICAgICAgICAgICAgJiYg
cmVsZXZhbnRMb2NhbE9wLT52YXJpYWJsZUFjY2Vzc0RhdGEoKSAhPSB2YXJpYWJsZUFjY2Vzc0Rh
dGEpCiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBOb2RlSW5kZXggcGhpSW5k
ZXggPSBub2RlLmNoaWxkMSgpLmluZGV4KCk7CisgICAgICAgICAgICBOb2RlKiBwaGkgPSBub2Rl
LT5jaGlsZDEoKS5ub2RlKCk7CiAgICAgICAgICAgICBpZiAoIXNldFJlcGxhY2VtZW50KHBvc3Np
YmxlUmVwbGFjZW1lbnQpKQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgLy8g
SWYgdGhlIEdldExvY2FsIHdlIHJlcGxhY2VkIHVzZWQgdG8gcmVmZXIgdG8gYSBTZXRMb2NhbCwg
dGhlbiBpdCBub3cKICAgICAgICAgICAgIC8vIHNob3VsZCByZWZlciB0byB0aGUgY2hpbGQgb2Yg
dGhlIFNldExvY2FsIGluc3RlYWQuCi0gICAgICAgICAgICBpZiAobV9ncmFwaFtwaGlJbmRleF0u
b3AoKSA9PSBTZXRMb2NhbCkgewotICAgICAgICAgICAgICAgIEFTU0VSVChub2RlLmNoaWxkMSgp
LmluZGV4KCkgPT0gcGhpSW5kZXgpOwotICAgICAgICAgICAgICAgIG1fZ3JhcGguY2hhbmdlRWRn
ZShub2RlLmNoaWxkcmVuLmNoaWxkMSgpLCBtX2dyYXBoW3BoaUluZGV4XS5jaGlsZDEoKSk7Cisg
ICAgICAgICAgICBpZiAocGhpLT5vcCgpID09IFNldExvY2FsKSB7CisgICAgICAgICAgICAgICAg
QVNTRVJUKG5vZGUtPmNoaWxkMSgpID09IHBoaSk7CisgICAgICAgICAgICAgICAgbV9ncmFwaC5j
aGFuZ2VFZGdlKG5vZGUtPmNoaWxkcmVuLmNoaWxkMSgpLCBwaGktPmNoaWxkMSgpKTsKICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIE5vZGVJbmRleCBvbGRUYWlsSW5kZXggPSBtX2N1cnJlbnRC
bG9jay0+dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQoCisgICAgICAgICAgICBOb2RlKiBvbGRUYWls
ID0gbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKAogICAgICAgICAgICAg
ICAgIHZhcmlhYmxlQWNjZXNzRGF0YS0+bG9jYWwoKSk7Ci0gICAgICAgICAgICBpZiAob2xkVGFp
bEluZGV4ID09IG1fY29tcGlsZUluZGV4KSB7CisgICAgICAgICAgICBpZiAob2xkVGFpbCA9PSBu
b2RlKSB7CiAgICAgICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5v
cGVyYW5kKHZhcmlhYmxlQWNjZXNzRGF0YS0+bG9jYWwoKSkgPQogICAgICAgICAgICAgICAgICAg
ICByZWxldmFudExvY2FsT3A7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgLy8g
TWFpbnRhaW4gZ3JhcGggaW50ZWdyaXR5OiBzaW5jZSB3ZSdyZSByZXBsYWNpbmcgYSBHZXRMb2Nh
bCB3aXRoIGEgR2V0TG9jYWxVbmxpbmtlZCwKICAgICAgICAgICAgICAgICAvLyBtYWtlIHN1cmUg
dGhhdCB0aGUgR2V0TG9jYWxVbmxpbmtlZCBpcyBub3cgbGlua2VkLgotICAgICAgICAgICAgICAg
IGlmIChtX2dyYXBoW3JlbGV2YW50TG9jYWxPcF0ub3AoKSA9PSBHZXRMb2NhbFVubGlua2VkKSB7
Ci0gICAgICAgICAgICAgICAgICAgIG1fZ3JhcGhbcmVsZXZhbnRMb2NhbE9wXS5zZXRPcChHZXRM
b2NhbCk7Ci0gICAgICAgICAgICAgICAgICAgIG1fZ3JhcGhbcmVsZXZhbnRMb2NhbE9wXS5jaGls
ZHJlbi5jaGlsZDEoKSA9IEVkZ2UocGhpSW5kZXgpOwotICAgICAgICAgICAgICAgICAgICBtX2dy
YXBoLnJlZihwaGlJbmRleCk7CisgICAgICAgICAgICAgICAgaWYgKHJlbGV2YW50TG9jYWxPcC0+
b3AoKSA9PSBHZXRMb2NhbFVubGlua2VkKSB7CisgICAgICAgICAgICAgICAgICAgIHJlbGV2YW50
TG9jYWxPcC0+c2V0T3AoR2V0TG9jYWwpOworICAgICAgICAgICAgICAgICAgICByZWxldmFudExv
Y2FsT3AtPmNoaWxkcmVuLmNoaWxkMSgpID0gRWRnZShwaGkpOworICAgICAgICAgICAgICAgICAg
ICBtX2dyYXBoLnJlZihwaGkpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIG1fY2hhbmdlZCA9IHRydWU7CkBAIC0xMjA4LDE5ICsxMTg3LDE4IEBAIHByaXZh
dGU6CiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBjYXNlIEdldExvY2FsVW5saW5r
ZWQ6IHsKLSAgICAgICAgICAgIE5vZGVJbmRleCByZWxldmFudExvY2FsT3BJZ25vcmVkOwotICAg
ICAgICAgICAgc2V0UmVwbGFjZW1lbnQoZ2V0TG9jYWxMb2FkRWxpbWluYXRpb24obm9kZS51bmxp
bmtlZExvY2FsKCksIHJlbGV2YW50TG9jYWxPcElnbm9yZWQsIHRydWUpKTsKKyAgICAgICAgICAg
IE5vZGUqIHJlbGV2YW50TG9jYWxPcElnbm9yZWQ7CisgICAgICAgICAgICBzZXRSZXBsYWNlbWVu
dChnZXRMb2NhbExvYWRFbGltaW5hdGlvbihub2RlLT51bmxpbmtlZExvY2FsKCksIHJlbGV2YW50
TG9jYWxPcElnbm9yZWQsIHRydWUpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAg
ICAgICAgICAgICAKICAgICAgICAgY2FzZSBGbHVzaDogewotICAgICAgICAgICAgVmFyaWFibGVB
Y2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBub2RlLnZhcmlhYmxlQWNjZXNzRGF0YSgp
OworICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBu
b2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBs
b2NhbCA9IHZhcmlhYmxlQWNjZXNzRGF0YS0+bG9jYWwoKTsKLSAgICAgICAgICAgIE5vZGVJbmRl
eCByZXBsYWNlbWVudEluZGV4ID0gbm9kZS5jaGlsZDEoKS5pbmRleCgpOwotICAgICAgICAgICAg
Tm9kZSYgcmVwbGFjZW1lbnQgPSBtX2dyYXBoW3JlcGxhY2VtZW50SW5kZXhdOwotICAgICAgICAg
ICAgaWYgKHJlcGxhY2VtZW50Lm9wKCkgIT0gU2V0TG9jYWwpCisgICAgICAgICAgICBOb2RlKiBy
ZXBsYWNlbWVudCA9IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKKyAgICAgICAgICAgIGlmIChyZXBs
YWNlbWVudC0+b3AoKSAhPSBTZXRMb2NhbCkKICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgIEFTU0VSVChyZXBsYWNlbWVudC52YXJpYWJsZUFjY2Vzc0RhdGEoKSA9PSB2YXJpYWJs
ZUFjY2Vzc0RhdGEpOworICAgICAgICAgICAgQVNTRVJUKHJlcGxhY2VtZW50LT52YXJpYWJsZUFj
Y2Vzc0RhdGEoKSA9PSB2YXJpYWJsZUFjY2Vzc0RhdGEpOwogICAgICAgICAgICAgLy8gRklYTUU6
IFdlIHNob3VsZCBiZSBhYmxlIHRvIHJlbW92ZSBTZXRMb2NhbHMgdGhhdCBjYW4gZXhpdDsgd2Ug
anVzdCBuZWVkCiAgICAgICAgICAgICAvLyB0byByZXBsYWNlIHRoZW0gd2l0aCBhcHByb3ByaWF0
ZSB0eXBlIGNoZWNrcy4KICAgICAgICAgICAgIGlmIChtX2dyYXBoLm1fZml4cG9pbnRTdGF0ZSA9
PSBGaXhwb2ludE5vdENvbnZlcmdlZCkgewpAQCAtMTI0MCwyNiArMTIxOCwyNiBAQCBwcml2YXRl
OgogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBpZiAocmVwbGFjZW1lbnQuY2FuRXhp
dCgpKQorICAgICAgICAgICAgICAgIGlmIChyZXBsYWNlbWVudC0+Y2FuRXhpdCgpKQogICAgICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIFNldExvY2Fs
U3RvcmVFbGltaW5hdGlvblJlc3VsdCByZXN1bHQgPQotICAgICAgICAgICAgICAgIHNldExvY2Fs
U3RvcmVFbGltaW5hdGlvbihsb2NhbCwgcmVwbGFjZW1lbnRJbmRleCk7CisgICAgICAgICAgICAg
ICAgc2V0TG9jYWxTdG9yZUVsaW1pbmF0aW9uKGxvY2FsLCByZXBsYWNlbWVudCk7CiAgICAgICAg
ICAgICBpZiAocmVzdWx0Lm1heUJlQWNjZXNzZWQgfHwgcmVzdWx0Lm1heUNsb2JiZXJXb3JsZCkK
ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIEFTU0VSVChyZXBsYWNlbWVudC5v
cCgpID09IFNldExvY2FsKTsKLSAgICAgICAgICAgIEFTU0VSVChyZXBsYWNlbWVudC5yZWZDb3Vu
dCgpID09IDEpOwotICAgICAgICAgICAgQVNTRVJUKHJlcGxhY2VtZW50LnNob3VsZEdlbmVyYXRl
KCkpOworICAgICAgICAgICAgQVNTRVJUKHJlcGxhY2VtZW50LT5vcCgpID09IFNldExvY2FsKTsK
KyAgICAgICAgICAgIEFTU0VSVChyZXBsYWNlbWVudC0+cmVmQ291bnQoKSA9PSAxKTsKKyAgICAg
ICAgICAgIEFTU0VSVChyZXBsYWNlbWVudC0+c2hvdWxkR2VuZXJhdGUoKSk7CiAgICAgICAgICAg
ICAvLyBGSVhNRTogSW52ZXN0aWdhdGUgdXNpbmcgbWF5RXhpdCBhcyBhIGZ1cnRoZXIgb3B0aW1p
emF0aW9uLgotICAgICAgICAgICAgbm9kZS5zZXRPcEFuZERlZmF1bHRGbGFncyhQaGFudG9tKTsK
LSAgICAgICAgICAgIE5vZGVJbmRleCBkYXRhTm9kZUluZGV4ID0gcmVwbGFjZW1lbnQuY2hpbGQx
KCkuaW5kZXgoKTsKLSAgICAgICAgICAgIEFTU0VSVChtX2dyYXBoW2RhdGFOb2RlSW5kZXhdLmhh
c1Jlc3VsdCgpKTsKKyAgICAgICAgICAgIG5vZGUtPnNldE9wQW5kRGVmYXVsdEZsYWdzKFBoYW50
b20pOworICAgICAgICAgICAgTm9kZSogZGF0YU5vZGUgPSByZXBsYWNlbWVudC0+Y2hpbGQxKCku
bm9kZSgpOworICAgICAgICAgICAgQVNTRVJUKGRhdGFOb2RlLT5oYXNSZXN1bHQoKSk7CiAgICAg
ICAgICAgICBtX2dyYXBoLmNsZWFyQW5kRGVyZWZDaGlsZDEobm9kZSk7Ci0gICAgICAgICAgICBu
b2RlLmNoaWxkcmVuLmNoaWxkMSgpID0gRWRnZShkYXRhTm9kZUluZGV4KTsKLSAgICAgICAgICAg
IG1fZ3JhcGgucmVmKGRhdGFOb2RlSW5kZXgpOwotICAgICAgICAgICAgTm9kZUluZGV4IG9sZFRh
aWxJbmRleCA9IG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZChsb2NhbCk7
Ci0gICAgICAgICAgICBpZiAob2xkVGFpbEluZGV4ID09IG1fY29tcGlsZUluZGV4KQotICAgICAg
ICAgICAgICAgIG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZChsb2NhbCkg
PSByZXBsYWNlbWVudEluZGV4OworICAgICAgICAgICAgbm9kZS0+Y2hpbGRyZW4uY2hpbGQxKCkg
PSBFZGdlKGRhdGFOb2RlKTsKKyAgICAgICAgICAgIG1fZ3JhcGgucmVmKGRhdGFOb2RlKTsKKyAg
ICAgICAgICAgIE5vZGUqIG9sZFRhaWwgPSBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWls
Lm9wZXJhbmQobG9jYWwpOworICAgICAgICAgICAgaWYgKG9sZFRhaWwgPT0gbm9kZSkKKyAgICAg
ICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQobG9jYWwp
ID0gcmVwbGFjZW1lbnQ7CiAgICAgICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTEyNzYsMTEgKzEyNTQsMTEgQEAgcHJpdmF0ZToKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgR2V0QXJyYXlMZW5n
dGg6Ci0gICAgICAgICAgICBzZXRSZXBsYWNlbWVudChnZXRBcnJheUxlbmd0aEVsaW1pbmF0aW9u
KG5vZGUuY2hpbGQxKCkuaW5kZXgoKSkpOworICAgICAgICAgICAgc2V0UmVwbGFjZW1lbnQoZ2V0
QXJyYXlMZW5ndGhFbGltaW5hdGlvbihub2RlLT5jaGlsZDEoKS5ub2RlKCkpKTsKICAgICAgICAg
ICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2UgR2V0TXlTY29wZToKLSAgICAgICAgICAgIHNldFJl
cGxhY2VtZW50KGdldE15U2NvcGVMb2FkRWxpbWluYXRpb24obm9kZS5jb2RlT3JpZ2luLmlubGlu
ZUNhbGxGcmFtZSkpOworICAgICAgICAgICAgc2V0UmVwbGFjZW1lbnQoZ2V0TXlTY29wZUxvYWRF
bGltaW5hdGlvbihub2RlLT5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSkpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICAgICAgLy8gSGFuZGxlIG5vZGVzIHRoYXQgYXJl
IGNvbmRpdGlvbmFsbHkgcHVyZTogdGhlc2UgYXJlIHB1cmUsIGFuZCBjYW4KQEAgLTEyOTIsOSAr
MTI3MCw5IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgQ29tcGFyZUdyZWF0ZXJFcToKICAgICAg
ICAgY2FzZSBDb21wYXJlRXE6IHsKICAgICAgICAgICAgIGlmIChtX2dyYXBoLmlzUHJlZGljdGVk
TnVtZXJpY2FsKG5vZGUpKSB7Ci0gICAgICAgICAgICAgICAgTm9kZUluZGV4IHJlcGxhY2VtZW50
SW5kZXggPSBwdXJlQ1NFKG5vZGUpOwotICAgICAgICAgICAgICAgIGlmIChyZXBsYWNlbWVudElu
ZGV4ICE9IE5vTm9kZSAmJiBtX2dyYXBoLmlzUHJlZGljdGVkTnVtZXJpY2FsKG1fZ3JhcGhbcmVw
bGFjZW1lbnRJbmRleF0pKQotICAgICAgICAgICAgICAgICAgICBzZXRSZXBsYWNlbWVudChyZXBs
YWNlbWVudEluZGV4KTsKKyAgICAgICAgICAgICAgICBOb2RlKiByZXBsYWNlbWVudCA9IHB1cmVD
U0Uobm9kZSk7CisgICAgICAgICAgICAgICAgaWYgKHJlcGxhY2VtZW50ICYmIG1fZ3JhcGguaXNQ
cmVkaWN0ZWROdW1lcmljYWwocmVwbGFjZW1lbnQpKQorICAgICAgICAgICAgICAgICAgICBzZXRS
ZXBsYWNlbWVudChyZXBsYWNlbWVudCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgfQpAQCAtMTMwMiwxNiArMTI4MCwxNiBAQCBwcml2YXRlOgogICAgICAgICAv
LyBGaW5hbGx5IGhhbmRsZSBoZWFwIGFjY2Vzc2VzLiBUaGVzZSBhcmUgbm90IHF1aXRlIHB1cmUs
IGJ1dCB3ZSBjYW4gc3RpbGwKICAgICAgICAgLy8gb3B0aW1pemUgdGhlbSBwcm92aWRlZCB0aGF0
IHNvbWUgc3VidGxlIGNvbmRpdGlvbnMgYXJlIG1ldC4KICAgICAgICAgY2FzZSBHZXRHbG9iYWxW
YXI6Ci0gICAgICAgICAgICBzZXRSZXBsYWNlbWVudChnbG9iYWxWYXJMb2FkRWxpbWluYXRpb24o
bm9kZS5yZWdpc3RlclBvaW50ZXIoKSkpOworICAgICAgICAgICAgc2V0UmVwbGFjZW1lbnQoZ2xv
YmFsVmFyTG9hZEVsaW1pbmF0aW9uKG5vZGUtPnJlZ2lzdGVyUG9pbnRlcigpKSk7CiAgICAgICAg
ICAgICBicmVhazsKIAogICAgICAgICBjYXNlIEdldFNjb3BlZFZhcjogewotICAgICAgICAgICAg
c2V0UmVwbGFjZW1lbnQoc2NvcGVkVmFyTG9hZEVsaW1pbmF0aW9uKG5vZGUuY2hpbGQxKCkuaW5k
ZXgoKSwgbm9kZS52YXJOdW1iZXIoKSkpOworICAgICAgICAgICAgc2V0UmVwbGFjZW1lbnQoc2Nv
cGVkVmFyTG9hZEVsaW1pbmF0aW9uKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgbm9kZS0+dmFyTnVt
YmVyKCkpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBH
bG9iYWxWYXJXYXRjaHBvaW50OgotICAgICAgICAgICAgaWYgKGdsb2JhbFZhcldhdGNocG9pbnRF
bGltaW5hdGlvbihub2RlLnJlZ2lzdGVyUG9pbnRlcigpKSkKKyAgICAgICAgICAgIGlmIChnbG9i
YWxWYXJXYXRjaHBvaW50RWxpbWluYXRpb24obm9kZS0+cmVnaXN0ZXJQb2ludGVyKCkpKQogICAg
ICAgICAgICAgICAgIGVsaW1pbmF0ZSgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICAKQEAgLTEzMTksODMgKzEyOTcsODMgQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBQdXRHbG9i
YWxWYXJDaGVjazoKICAgICAgICAgICAgIGlmIChtX2dyYXBoLm1fZml4cG9pbnRTdGF0ZSA9PSBG
aXhwb2ludE5vdENvbnZlcmdlZCkKICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
IGVsaW1pbmF0ZShnbG9iYWxWYXJTdG9yZUVsaW1pbmF0aW9uKG5vZGUucmVnaXN0ZXJQb2ludGVy
KCkpKTsKKyAgICAgICAgICAgIGVsaW1pbmF0ZShnbG9iYWxWYXJTdG9yZUVsaW1pbmF0aW9uKG5v
ZGUtPnJlZ2lzdGVyUG9pbnRlcigpKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
IAogICAgICAgICBjYXNlIFB1dFNjb3BlZFZhcjogewogICAgICAgICAgICAgaWYgKG1fZ3JhcGgu
bV9maXhwb2ludFN0YXRlID09IEZpeHBvaW50Tm90Q29udmVyZ2VkKQogICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgZWxpbWluYXRlKHNjb3BlZFZhclN0b3JlRWxpbWluYXRpb24o
bm9kZS5jaGlsZDEoKS5pbmRleCgpLCBub2RlLmNoaWxkMigpLmluZGV4KCksIG5vZGUudmFyTnVt
YmVyKCkpKTsKKyAgICAgICAgICAgIGVsaW1pbmF0ZShzY29wZWRWYXJTdG9yZUVsaW1pbmF0aW9u
KG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgbm9kZS0+Y2hpbGQyKCkubm9kZSgpLCBub2RlLT52YXJO
dW1iZXIoKSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIAogICAgICAgICBjYXNl
IEdldEJ5VmFsOgogICAgICAgICAgICAgaWYgKG1fZ3JhcGguYnlWYWxJc1B1cmUobm9kZSkpCi0g
ICAgICAgICAgICAgICAgc2V0UmVwbGFjZW1lbnQoZ2V0QnlWYWxMb2FkRWxpbWluYXRpb24obm9k
ZS5jaGlsZDEoKS5pbmRleCgpLCBub2RlLmNoaWxkMigpLmluZGV4KCkpKTsKKyAgICAgICAgICAg
ICAgICBzZXRSZXBsYWNlbWVudChnZXRCeVZhbExvYWRFbGltaW5hdGlvbihub2RlLT5jaGlsZDEo
KS5ub2RlKCksIG5vZGUtPmNoaWxkMigpLm5vZGUoKSkpOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICAKICAgICAgICAgY2FzZSBQdXRCeVZhbDogewogICAgICAgICAgICAgRWRnZSBj
aGlsZDEgPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApOwogICAgICAgICAgICAgRWRnZSBj
aGlsZDIgPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpOwotICAgICAgICAgICAgaWYgKG5v
ZGUuYXJyYXlNb2RlKCkuY2FuQ1NFU3RvcmFnZSgpKSB7Ci0gICAgICAgICAgICAgICAgTm9kZUlu
ZGV4IG5vZGVJbmRleCA9IGdldEJ5VmFsTG9hZEVsaW1pbmF0aW9uKGNoaWxkMS5pbmRleCgpLCBj
aGlsZDIuaW5kZXgoKSk7Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGVJbmRleCA9PSBOb05vZGUp
CisgICAgICAgICAgICBpZiAobm9kZS0+YXJyYXlNb2RlKCkuY2FuQ1NFU3RvcmFnZSgpKSB7Cisg
ICAgICAgICAgICAgICAgTm9kZSogcmVwbGFjZW1lbnQgPSBnZXRCeVZhbExvYWRFbGltaW5hdGlv
bihjaGlsZDEubm9kZSgpLCBjaGlsZDIubm9kZSgpKTsKKyAgICAgICAgICAgICAgICBpZiAoIXJl
cGxhY2VtZW50KQogICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBu
b2RlLnNldE9wKFB1dEJ5VmFsQWxpYXMpOworICAgICAgICAgICAgICAgIG5vZGUtPnNldE9wKFB1
dEJ5VmFsQWxpYXMpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IH0KICAgICAgICAgICAgIAogICAgICAgICBjYXNlIENoZWNrU3RydWN0dXJlOgogICAgICAgICBj
YXNlIEZvcndhcmRDaGVja1N0cnVjdHVyZToKLSAgICAgICAgICAgIGlmIChjaGVja1N0cnVjdHVy
ZUVsaW1pbmF0aW9uKG5vZGUuc3RydWN0dXJlU2V0KCksIG5vZGUuY2hpbGQxKCkuaW5kZXgoKSkp
CisgICAgICAgICAgICBpZiAoY2hlY2tTdHJ1Y3R1cmVFbGltaW5hdGlvbihub2RlLT5zdHJ1Y3R1
cmVTZXQoKSwgbm9kZS0+Y2hpbGQxKCkubm9kZSgpKSkKICAgICAgICAgICAgICAgICBlbGltaW5h
dGUoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgU3Ry
dWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnQ6CiAgICAgICAgIGNhc2UgRm9yd2FyZFN0cnVjdHVy
ZVRyYW5zaXRpb25XYXRjaHBvaW50OgotICAgICAgICAgICAgaWYgKHN0cnVjdHVyZVRyYW5zaXRp
b25XYXRjaHBvaW50RWxpbWluYXRpb24obm9kZS5zdHJ1Y3R1cmUoKSwgbm9kZS5jaGlsZDEoKS5p
bmRleCgpKSkKKyAgICAgICAgICAgIGlmIChzdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludEVs
aW1pbmF0aW9uKG5vZGUtPnN0cnVjdHVyZSgpLCBub2RlLT5jaGlsZDEoKS5ub2RlKCkpKQogICAg
ICAgICAgICAgICAgIGVsaW1pbmF0ZSgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICAKICAgICAgICAgY2FzZSBQdXRTdHJ1Y3R1cmU6CiAgICAgICAgICAgICBpZiAobV9ncmFwaC5t
X2ZpeHBvaW50U3RhdGUgPT0gRml4cG9pbnROb3RDb252ZXJnZWQpCiAgICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICBlbGltaW5hdGUocHV0U3RydWN0dXJlU3RvcmVFbGltaW5hdGlv
bihub2RlLmNoaWxkMSgpLmluZGV4KCkpLCBQaGFudG9tUHV0U3RydWN0dXJlKTsKKyAgICAgICAg
ICAgIGVsaW1pbmF0ZShwdXRTdHJ1Y3R1cmVTdG9yZUVsaW1pbmF0aW9uKG5vZGUtPmNoaWxkMSgp
Lm5vZGUoKSksIFBoYW50b21QdXRTdHJ1Y3R1cmUpOwogICAgICAgICAgICAgYnJlYWs7CiAKICAg
ICAgICAgY2FzZSBDaGVja0Z1bmN0aW9uOgotICAgICAgICAgICAgaWYgKGNoZWNrRnVuY3Rpb25F
bGltaW5hdGlvbihub2RlLmZ1bmN0aW9uKCksIG5vZGUuY2hpbGQxKCkuaW5kZXgoKSkpCisgICAg
ICAgICAgICBpZiAoY2hlY2tGdW5jdGlvbkVsaW1pbmF0aW9uKG5vZGUtPmZ1bmN0aW9uKCksIG5v
ZGUtPmNoaWxkMSgpLm5vZGUoKSkpCiAgICAgICAgICAgICAgICAgZWxpbWluYXRlKCk7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBDaGVja0V4ZWN1
dGFibGU6Ci0gICAgICAgICAgICBpZiAoY2hlY2tFeGVjdXRhYmxlRWxpbWluYXRpb24obm9kZS5l
eGVjdXRhYmxlKCksIG5vZGUuY2hpbGQxKCkuaW5kZXgoKSkpCisgICAgICAgICAgICBpZiAoY2hl
Y2tFeGVjdXRhYmxlRWxpbWluYXRpb24obm9kZS0+ZXhlY3V0YWJsZSgpLCBub2RlLT5jaGlsZDEo
KS5ub2RlKCkpKQogICAgICAgICAgICAgICAgIGVsaW1pbmF0ZSgpOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgQ2hlY2tBcnJheToKLSAgICAgICAg
ICAgIGlmIChjaGVja0FycmF5RWxpbWluYXRpb24obm9kZS5jaGlsZDEoKS5pbmRleCgpLCBub2Rl
LmFycmF5TW9kZSgpKSkKKyAgICAgICAgICAgIGlmIChjaGVja0FycmF5RWxpbWluYXRpb24obm9k
ZS0+Y2hpbGQxKCkubm9kZSgpLCBub2RlLT5hcnJheU1vZGUoKSkpCiAgICAgICAgICAgICAgICAg
ZWxpbWluYXRlKCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgICAgICBj
YXNlIEdldEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2U6IHsKLSAgICAgICAgICAgIHNldFJlcGxhY2Vt
ZW50KGdldEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2VMb2FkRWxpbWluYXRpb24obm9kZS5jaGlsZDEo
KS5pbmRleCgpLCBub2RlLmFycmF5TW9kZSgpKSk7CisgICAgICAgICAgICBzZXRSZXBsYWNlbWVu
dChnZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlTG9hZEVsaW1pbmF0aW9uKG5vZGUtPmNoaWxkMSgp
Lm5vZGUoKSwgbm9kZS0+YXJyYXlNb2RlKCkpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9CiAKICAgICAgICAgY2FzZSBHZXRCdXR0ZXJmbHk6Ci0gICAgICAgICAgICBzZXRSZXBsYWNl
bWVudChnZXRQcm9wZXJ0eVN0b3JhZ2VMb2FkRWxpbWluYXRpb24obm9kZS5jaGlsZDEoKS5pbmRl
eCgpKSk7CisgICAgICAgICAgICBzZXRSZXBsYWNlbWVudChnZXRQcm9wZXJ0eVN0b3JhZ2VMb2Fk
RWxpbWluYXRpb24obm9kZS0+Y2hpbGQxKCkubm9kZSgpKSk7CiAgICAgICAgICAgICBicmVhazsK
IAogICAgICAgICBjYXNlIEdldEJ5T2Zmc2V0OgotICAgICAgICAgICAgc2V0UmVwbGFjZW1lbnQo
Z2V0QnlPZmZzZXRMb2FkRWxpbWluYXRpb24obV9ncmFwaC5tX3N0b3JhZ2VBY2Nlc3NEYXRhW25v
ZGUuc3RvcmFnZUFjY2Vzc0RhdGFJbmRleCgpXS5pZGVudGlmaWVyTnVtYmVyLCBub2RlLmNoaWxk
MSgpLmluZGV4KCkpKTsKKyAgICAgICAgICAgIHNldFJlcGxhY2VtZW50KGdldEJ5T2Zmc2V0TG9h
ZEVsaW1pbmF0aW9uKG1fZ3JhcGgubV9zdG9yYWdlQWNjZXNzRGF0YVtub2RlLT5zdG9yYWdlQWNj
ZXNzRGF0YUluZGV4KCldLmlkZW50aWZpZXJOdW1iZXIsIG5vZGUtPmNoaWxkMSgpLm5vZGUoKSkp
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBQdXRCeU9m
ZnNldDoKICAgICAgICAgICAgIGlmIChtX2dyYXBoLm1fZml4cG9pbnRTdGF0ZSA9PSBGaXhwb2lu
dE5vdENvbnZlcmdlZCkKICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGVsaW1p
bmF0ZShwdXRCeU9mZnNldFN0b3JlRWxpbWluYXRpb24obV9ncmFwaC5tX3N0b3JhZ2VBY2Nlc3NE
YXRhW25vZGUuc3RvcmFnZUFjY2Vzc0RhdGFJbmRleCgpXS5pZGVudGlmaWVyTnVtYmVyLCBub2Rl
LmNoaWxkMSgpLmluZGV4KCkpKTsKKyAgICAgICAgICAgIGVsaW1pbmF0ZShwdXRCeU9mZnNldFN0
b3JlRWxpbWluYXRpb24obV9ncmFwaC5tX3N0b3JhZ2VBY2Nlc3NEYXRhW25vZGUtPnN0b3JhZ2VB
Y2Nlc3NEYXRhSW5kZXgoKV0uaWRlbnRpZmllck51bWJlciwgbm9kZS0+Y2hpbGQxKCkubm9kZSgp
KSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgICAgICBjYXNlIFBoYW50
b206CkBAIC0xNDA5LDcgKzEzODcsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIG1fbGFzdFNlZW5bbm9kZS5vcCgpXSA9IG1faW5k
ZXhJbkJsb2NrOworICAgICAgICBtX2xhc3RTZWVuW25vZGUtPm9wKCldID0gbV9pbmRleEluQmxv
Y2s7CiAjaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQogICAgICAgICBk
YXRhTG9nRigiXG4iKTsKICNlbmRpZgpAQCAtMTQzMCwzNyArMTQwOCwzNiBAQCBwcml2YXRlOgog
ICAgICAgICAvLyByZXBsYWNlbWVudHMgY2xlYXJlZCwgc28gd2UgZG9uJ3QgZ2V0IGNvbmZ1c2Vk
IHdoaWxlIGRvaW5nIHN1YnN0aXR1dGlvbnMgb24KICAgICAgICAgLy8gR2V0TG9jYWwncy4KICAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGJsb2NrLT5waGlzLnNpemUoKTsgKytpKSB7
Ci0gICAgICAgICAgICBBU1NFUlQobV9ncmFwaFtibG9jay0+cGhpc1tpXV0uZmxhZ3MoKSAmIE5v
ZGVSZWxldmFudFRvT1NSKTsKLSAgICAgICAgICAgIG1fZ3JhcGhbYmxvY2stPnBoaXNbaV1dLnJl
cGxhY2VtZW50ID0gTm9Ob2RlOworICAgICAgICAgICAgQVNTRVJUKGJsb2NrLT5waGlzW2ldLT5m
bGFncygpICYgTm9kZVJlbGV2YW50VG9PU1IpOworICAgICAgICAgICAgYmxvY2stPnBoaXNbaV0t
PnJlcGxhY2VtZW50ID0gMDsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgLy8gTWFrZSBh
bGwgb2YgbXkgU2V0TG9jYWwgYW5kIEdldExvY2FsIG5vZGVzIHJlbGV2YW50IHRvIE9TUiwgYW5k
IGRvIHNvbWUgb3RoZXIKICAgICAgICAgLy8gbmVjZXNzYXJ5IGJvb2trZWVwaW5nLgogICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYmxvY2stPnNpemUoKTsgKytpKSB7Ci0gICAgICAg
ICAgICBOb2RlSW5kZXggbm9kZUluZGV4ID0gYmxvY2stPmF0KGkpOwotICAgICAgICAgICAgTm9k
ZSYgbm9kZSA9IG1fZ3JhcGhbbm9kZUluZGV4XTsKKyAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBi
bG9jay0+YXQoaSk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIG5vZGUucmVwbGFjZW1lbnQg
PSBOb05vZGU7CisgICAgICAgICAgICBub2RlLT5yZXBsYWNlbWVudCA9IDA7CiAgICAgICAgICAg
ICAKLSAgICAgICAgICAgIHN3aXRjaCAobm9kZS5vcCgpKSB7CisgICAgICAgICAgICBzd2l0Y2gg
KG5vZGUtPm9wKCkpIHsKICAgICAgICAgICAgIGNhc2UgU2V0TG9jYWw6CiAgICAgICAgICAgICBj
YXNlIEdldExvY2FsOiAvLyBGSVhNRTogVGhlIEdldExvY2FsIGNhc2UgaXMgb25seSBuZWNlc3Nh
cnkgdW50aWwgd2UgZG8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEw
NjcwNy4KLSAgICAgICAgICAgICAgICBub2RlLm1lcmdlRmxhZ3MoTm9kZVJlbGV2YW50VG9PU1Ip
OworICAgICAgICAgICAgICAgIG5vZGUtPm1lcmdlRmxhZ3MoTm9kZVJlbGV2YW50VG9PU1IpOwog
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAg
ICAgICBub2RlLmNsZWFyRmxhZ3MoTm9kZVJlbGV2YW50VG9PU1IpOworICAgICAgICAgICAgICAg
IG5vZGUtPmNsZWFyRmxhZ3MoTm9kZVJlbGV2YW50VG9PU1IpOwogICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAKICAgICAgICAgZm9yIChtX2luZGV4SW5C
bG9jayA9IDA7IG1faW5kZXhJbkJsb2NrIDwgYmxvY2stPnNpemUoKTsgKyttX2luZGV4SW5CbG9j
aykgewotICAgICAgICAgICAgbV9jb21waWxlSW5kZXggPSBibG9jay0+YXQobV9pbmRleEluQmxv
Y2spOwotICAgICAgICAgICAgcGVyZm9ybU5vZGVDU0UobV9ncmFwaFttX2NvbXBpbGVJbmRleF0p
OworICAgICAgICAgICAgbV9jdXJyZW50Tm9kZSA9IGJsb2NrLT5hdChtX2luZGV4SW5CbG9jayk7
CisgICAgICAgICAgICBwZXJmb3JtTm9kZUNTRShtX2N1cnJlbnROb2RlKTsKICAgICAgICAgfQog
ICAgIH0KICAgICAKICAgICBCYXNpY0Jsb2NrKiBtX2N1cnJlbnRCbG9jazsKLSAgICBOb2RlSW5k
ZXggbV9jb21waWxlSW5kZXg7CisgICAgTm9kZSogbV9jdXJyZW50Tm9kZTsKICAgICB1bnNpZ25l
ZCBtX2luZGV4SW5CbG9jazsKICAgICBGaXhlZEFycmF5PHVuc2lnbmVkLCBMYXN0Tm9kZVR5cGU+
IG1fbGFzdFNlZW47CiAgICAgYm9vbCBtX2NoYW5nZWQ7IC8vIE9ubHkgdHJhY2tzIGNoYW5nZXMg
dGhhdCBoYXZlIGEgc3Vic3RhbnRpdmUgZWZmZWN0IG9uIG90aGVyIG9wdGltaXphdGlvbnMuCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbi5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb24uY3BwCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb24uY3BwCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDQxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdDb21tb24uaCIKKworI2lm
IEVOQUJMRShERkdfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK3Zv
aWQgTm9kZVBvaW50ZXJUcmFpdHM6OmR1bXAoTm9kZSogdmFsdWUsIFByaW50U3RyZWFtJiBvdXQp
Cit7CisgICAgb3V0LnByaW50KHZhbHVlKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRG
RworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQ29tbW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdDb21tb24uaAkocmV2aXNpb24gMTQwOTA0KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdDb21tb24uaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEyLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtODEsMjIgKzgx
LDE0IEBACiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAotLy8gVHlwZSBmb3Ig
YSByZWZlcmVuY2UgdG8gYW5vdGhlciBub2RlIGluIHRoZSBncmFwaC4KLXR5cGVkZWYgdWludDMy
X3QgTm9kZUluZGV4Owotc3RhdGljIGNvbnN0IE5vZGVJbmRleCBOb05vZGUgPSBVSU5UX01BWDsK
K3N0cnVjdCBOb2RlOwogCiB0eXBlZGVmIHVpbnQzMl90IEJsb2NrSW5kZXg7CiBzdGF0aWMgY29u
c3QgQmxvY2tJbmRleCBOb0Jsb2NrID0gVUlOVF9NQVg7CiAKLXN0cnVjdCBOb2RlSW5kZXhUcmFp
dHMgewotICAgIHN0YXRpYyBOb2RlSW5kZXggZGVmYXVsdFZhbHVlKCkgeyByZXR1cm4gTm9Ob2Rl
OyB9Ci0gICAgc3RhdGljIHZvaWQgZHVtcChOb2RlSW5kZXggdmFsdWUsIFByaW50U3RyZWFtJiBv
dXQpCi0gICAgewotICAgICAgICBpZiAodmFsdWUgPT0gTm9Ob2RlKQotICAgICAgICAgICAgb3V0
LnByaW50ZigiLSIpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBvdXQucHJpbnRmKCJAJXUi
LCB2YWx1ZSk7Ci0gICAgfQorc3RydWN0IE5vZGVQb2ludGVyVHJhaXRzIHsKKyAgICBzdGF0aWMg
Tm9kZSogZGVmYXVsdFZhbHVlKCkgeyByZXR1cm4gMDsgfQorICAgIHN0YXRpYyB2b2lkIGR1bXAo
Tm9kZSogdmFsdWUsIFByaW50U3RyZWFtJiBvdXQpOwogfTsKIAogZW51bSBVc2VLaW5kIHsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xk
aW5nUGhhc2UuY3BwCShyZXZpc2lvbiAxNDA5MDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNzUsMjIgKzc1
LDIxIEBAIHByaXZhdGU6CiAgICAgICAgIGJvb2wgY2hhbmdlZCA9IGZhbHNlOwogICAgICAgICBt
X3N0YXRlLmJlZ2luQmFzaWNCbG9jayhibG9jayk7CiAgICAgICAgIGZvciAodW5zaWduZWQgaW5k
ZXhJbkJsb2NrID0gMDsgaW5kZXhJbkJsb2NrIDwgYmxvY2stPnNpemUoKTsgKytpbmRleEluQmxv
Y2spIHsKLSAgICAgICAgICAgIE5vZGVJbmRleCBub2RlSW5kZXggPSBibG9jay0+YXQoaW5kZXhJ
bkJsb2NrKTsKLSAgICAgICAgICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW25vZGVJbmRleF07Ci0g
ICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAoIW1fc3RhdGUuaXNWYWxpZCgpKQogICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCisgICAgICAgICAgICBOb2RlKiBub2Rl
ID0gYmxvY2stPmF0KGluZGV4SW5CbG9jayk7CisKICAgICAgICAgICAgIGJvb2wgZWxpbWluYXRl
ZCA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIHN3aXRjaCAobm9k
ZS5vcCgpKSB7CisgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKICAgICAgICAgICAg
IGNhc2UgQ2hlY2tBcmd1bWVudHNOb3RDcmVhdGVkOiB7CiAgICAgICAgICAgICAgICAgaWYgKCFp
c0VtcHR5U3BlY3VsYXRpb24oCiAgICAgICAgICAgICAgICAgICAgICAgICBtX3N0YXRlLnZhcmlh
YmxlcygpLm9wZXJhbmQoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5hcmd1
bWVudHNSZWdpc3RlckZvcihub2RlLmNvZGVPcmlnaW4pKS5tX3R5cGUpKQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG1fZ3JhcGguYXJndW1lbnRzUmVnaXN0ZXJGb3Iobm9kZS0+Y29kZU9y
aWdpbikpLm1fdHlwZSkpCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
ICAgIEFTU0VSVChub2RlLnJlZkNvdW50KCkgPT0gMSk7Ci0gICAgICAgICAgICAgICAgbm9kZS5z
ZXRPcEFuZERlZmF1bHRGbGFncyhQaGFudG9tKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQobm9k
ZS0+cmVmQ291bnQoKSA9PSAxKTsKKyAgICAgICAgICAgICAgICBub2RlLT5zZXRPcEFuZERlZmF1
bHRGbGFncyhQaGFudG9tKTsKICAgICAgICAgICAgICAgICBlbGltaW5hdGVkID0gdHJ1ZTsKICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KQEAgLTk4LDI0ICs5NywyNCBAQCBw
cml2YXRlOgogICAgICAgICAgICAgY2FzZSBDaGVja1N0cnVjdHVyZToKICAgICAgICAgICAgIGNh
c2UgRm9yd2FyZENoZWNrU3RydWN0dXJlOgogICAgICAgICAgICAgY2FzZSBBcnJheWlmeVRvU3Ry
dWN0dXJlOiB7Ci0gICAgICAgICAgICAgICAgQWJzdHJhY3RWYWx1ZSYgdmFsdWUgPSBtX3N0YXRl
LmZvck5vZGUobm9kZS5jaGlsZDEoKSk7CisgICAgICAgICAgICAgICAgQWJzdHJhY3RWYWx1ZSYg
dmFsdWUgPSBtX3N0YXRlLmZvck5vZGUobm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICAgICAgICAg
IFN0cnVjdHVyZVNldCBzZXQ7Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGUub3AoKSA9PSBBcnJh
eWlmeVRvU3RydWN0dXJlKQotICAgICAgICAgICAgICAgICAgICBzZXQgPSBub2RlLnN0cnVjdHVy
ZSgpOworICAgICAgICAgICAgICAgIGlmIChub2RlLT5vcCgpID09IEFycmF5aWZ5VG9TdHJ1Y3R1
cmUpCisgICAgICAgICAgICAgICAgICAgIHNldCA9IG5vZGUtPnN0cnVjdHVyZSgpOwogICAgICAg
ICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgc2V0ID0gbm9kZS5zdHJ1Y3R1cmVT
ZXQoKTsKKyAgICAgICAgICAgICAgICAgICAgc2V0ID0gbm9kZS0+c3RydWN0dXJlU2V0KCk7CiAg
ICAgICAgICAgICAgICAgaWYgKCFpc0NlbGxTcGVjdWxhdGlvbih2YWx1ZS5tX3R5cGUpKQogICAg
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICBpZiAodmFsdWUubV9jdXJy
ZW50S25vd25TdHJ1Y3R1cmUuaXNTdWJzZXRPZihzZXQpKSB7Ci0gICAgICAgICAgICAgICAgICAg
IEFTU0VSVChub2RlLnJlZkNvdW50KCkgPT0gMSk7Ci0gICAgICAgICAgICAgICAgICAgIG5vZGUu
c2V0T3BBbmREZWZhdWx0RmxhZ3MoUGhhbnRvbSk7CisgICAgICAgICAgICAgICAgICAgIEFTU0VS
VChub2RlLT5yZWZDb3VudCgpID09IDEpOworICAgICAgICAgICAgICAgICAgICBub2RlLT5zZXRP
cEFuZERlZmF1bHRGbGFncyhQaGFudG9tKTsKICAgICAgICAgICAgICAgICAgICAgZWxpbWluYXRl
ZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgICBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlJiBzdHJ1Y3R1cmVWYWx1ZSA9
IHZhbHVlLm1fZnV0dXJlUG9zc2libGVTdHJ1Y3R1cmU7CiAgICAgICAgICAgICAgICAgaWYgKHN0
cnVjdHVyZVZhbHVlLmlzU3Vic2V0T2Yoc2V0KQogICAgICAgICAgICAgICAgICAgICAmJiBzdHJ1
Y3R1cmVWYWx1ZS5oYXNTaW5nbGV0b24oKSkgewotICAgICAgICAgICAgICAgICAgICBub2RlLmNv
bnZlcnRUb1N0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50KHN0cnVjdHVyZVZhbHVlLnNpbmds
ZXRvbigpKTsKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y29udmVydFRvU3RydWN0dXJlVHJh
bnNpdGlvbldhdGNocG9pbnQoc3RydWN0dXJlVmFsdWUuc2luZ2xldG9uKCkpOwogICAgICAgICAg
ICAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICAgYnJlYWs7CkBAIC0xMjMsMzcgKzEyMiwzNyBAQCBwcml2YXRlOgogICAgICAgICAgICAg
ICAgIAogICAgICAgICAgICAgY2FzZSBDaGVja0FycmF5OgogICAgICAgICAgICAgY2FzZSBBcnJh
eWlmeTogewotICAgICAgICAgICAgICAgIGlmICghbm9kZS5hcnJheU1vZGUoKS5hbHJlYWR5Q2hl
Y2tlZChtX2dyYXBoLCBub2RlLCBtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSkpKQorICAg
ICAgICAgICAgICAgIGlmICghbm9kZS0+YXJyYXlNb2RlKCkuYWxyZWFkeUNoZWNrZWQobV9ncmFw
aCwgbm9kZSwgbV9zdGF0ZS5mb3JOb2RlKG5vZGUtPmNoaWxkMSgpKSkpCiAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIEFTU0VSVChub2RlLnJlZkNvdW50KCkgPT0g
MSk7Ci0gICAgICAgICAgICAgICAgbm9kZS5zZXRPcEFuZERlZmF1bHRGbGFncyhQaGFudG9tKTsK
KyAgICAgICAgICAgICAgICBBU1NFUlQobm9kZS0+cmVmQ291bnQoKSA9PSAxKTsKKyAgICAgICAg
ICAgICAgICBub2RlLT5zZXRPcEFuZERlZmF1bHRGbGFncyhQaGFudG9tKTsKICAgICAgICAgICAg
ICAgICBlbGltaW5hdGVkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGNhc2UgQ2hlY2tGdW5jdGlvbjog
ewotICAgICAgICAgICAgICAgIGlmIChtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSkudmFs
dWUoKSAhPSBub2RlLmZ1bmN0aW9uKCkpCisgICAgICAgICAgICAgICAgaWYgKG1fc3RhdGUuZm9y
Tm9kZShub2RlLT5jaGlsZDEoKSkudmFsdWUoKSAhPSBub2RlLT5mdW5jdGlvbigpKQogICAgICAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBub2RlLnNldE9wQW5kRGVmYXVs
dEZsYWdzKFBoYW50b20pOworICAgICAgICAgICAgICAgIG5vZGUtPnNldE9wQW5kRGVmYXVsdEZs
YWdzKFBoYW50b20pOwogICAgICAgICAgICAgICAgIGVsaW1pbmF0ZWQgPSB0cnVlOwogICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIAogICAgICAg
ICAgICAgY2FzZSBDb252ZXJ0VGhpczogewotICAgICAgICAgICAgICAgIGlmICghaXNPYmplY3RT
cGVjdWxhdGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSkKKyAgICAg
ICAgICAgICAgICBpZiAoIWlzT2JqZWN0U3BlY3VsYXRpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUt
PmNoaWxkMSgpKS5tX3R5cGUpKQogICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgICAgICBub2RlLnNldE9wQW5kRGVmYXVsdEZsYWdzKElkZW50aXR5KTsKKyAgICAgICAgICAg
ICAgICBub2RlLT5zZXRPcEFuZERlZmF1bHRGbGFncyhJZGVudGl0eSk7CiAgICAgICAgICAgICAg
ICAgY2hhbmdlZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBjYXNlIEdldEJ5SWQ6CiAgICAgICAgICAg
ICBjYXNlIEdldEJ5SWRGbHVzaDogewotICAgICAgICAgICAgICAgIENvZGVPcmlnaW4gY29kZU9y
aWdpbiA9IG5vZGUuY29kZU9yaWdpbjsKLSAgICAgICAgICAgICAgICBOb2RlSW5kZXggY2hpbGQg
PSBub2RlLmNoaWxkMSgpLmluZGV4KCk7Ci0gICAgICAgICAgICAgICAgdW5zaWduZWQgaWRlbnRp
Zmllck51bWJlciA9IG5vZGUuaWRlbnRpZmllck51bWJlcigpOworICAgICAgICAgICAgICAgIENv
ZGVPcmlnaW4gY29kZU9yaWdpbiA9IG5vZGUtPmNvZGVPcmlnaW47CisgICAgICAgICAgICAgICAg
Tm9kZSogY2hpbGQgPSBub2RlLT5jaGlsZDEoKS5ub2RlKCk7CisgICAgICAgICAgICAgICAgdW5z
aWduZWQgaWRlbnRpZmllck51bWJlciA9IG5vZGUtPmlkZW50aWZpZXJOdW1iZXIoKTsKICAgICAg
ICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBpZiAoIWlzQ2VsbFNwZWN1bGF0aW9uKG1fZ3Jh
cGhbY2hpbGRdLnByZWRpY3Rpb24oKSkpCisgICAgICAgICAgICAgICAgaWYgKCFpc0NlbGxTcGVj
dWxhdGlvbihjaGlsZC0+cHJlZGljdGlvbigpKSkKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUg
PSBtX3N0YXRlLmZvck5vZGUoY2hpbGQpLmJlc3RQcm92ZW5TdHJ1Y3R1cmUoKTsKQEAgLTE4NSwx
OCArMTg0LDE4IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgICAgICBTdHJ1Y3R1cmVU
cmFuc2l0aW9uV2F0Y2hwb2ludCwgY29kZU9yaWdpbiwgT3BJbmZvKHN0cnVjdHVyZSksIGNoaWxk
KTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAg
Tm9kZUluZGV4IHByb3BlcnR5U3RvcmFnZUluZGV4OworICAgICAgICAgICAgICAgIE5vZGUqIHBy
b3BlcnR5U3RvcmFnZTsKICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBtX2dyYXBo
W2NoaWxkXS5yZWYoKTsKKyAgICAgICAgICAgICAgICBjaGlsZC0+cmVmKCk7CiAgICAgICAgICAg
ICAgICAgaWYgKGlzSW5saW5lT2Zmc2V0KHN0YXR1cy5vZmZzZXQoKSkpCi0gICAgICAgICAgICAg
ICAgICAgIHByb3BlcnR5U3RvcmFnZUluZGV4ID0gY2hpbGQ7CisgICAgICAgICAgICAgICAgICAg
IHByb3BlcnR5U3RvcmFnZSA9IGNoaWxkOwogICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAg
ICAgICAgICAgICAgICBwcm9wZXJ0eVN0b3JhZ2VJbmRleCA9IG1faW5zZXJ0aW9uU2V0Lmluc2Vy
dE5vZGUoCisgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5U3RvcmFnZSA9IG1faW5zZXJ0aW9u
U2V0Lmluc2VydE5vZGUoCiAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleEluQmxvY2ssIERv
bnRSZWZDaGlsZHJlbiwgUmVmTm9kZSwgU3BlY05vbmUsIEdldEJ1dHRlcmZseSwgY29kZU9yaWdp
biwKICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkKTsKICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgbV9ncmFwaFtub2RlSW5kZXhdLmNvbnZl
cnRUb0dldEJ5T2Zmc2V0KG1fZ3JhcGgubV9zdG9yYWdlQWNjZXNzRGF0YS5zaXplKCksIHByb3Bl
cnR5U3RvcmFnZUluZGV4KTsKKyAgICAgICAgICAgICAgICBub2RlLT5jb252ZXJ0VG9HZXRCeU9m
ZnNldChtX2dyYXBoLm1fc3RvcmFnZUFjY2Vzc0RhdGEuc2l6ZSgpLCBwcm9wZXJ0eVN0b3JhZ2Up
OwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIFN0b3JhZ2VBY2Nlc3NEYXRhIHN0
b3JhZ2VBY2Nlc3NEYXRhOwogICAgICAgICAgICAgICAgIHN0b3JhZ2VBY2Nlc3NEYXRhLm9mZnNl
dCA9IGluZGV4UmVsYXRpdmVUb0Jhc2Uoc3RhdHVzLm9mZnNldCgpKTsKQEAgLTIwNyw5ICsyMDYs
OSBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgY2FzZSBQdXRCeUlk
OgogICAgICAgICAgICAgY2FzZSBQdXRCeUlkRGlyZWN0OiB7Ci0gICAgICAgICAgICAgICAgQ29k
ZU9yaWdpbiBjb2RlT3JpZ2luID0gbm9kZS5jb2RlT3JpZ2luOwotICAgICAgICAgICAgICAgIE5v
ZGVJbmRleCBjaGlsZCA9IG5vZGUuY2hpbGQxKCkuaW5kZXgoKTsKLSAgICAgICAgICAgICAgICB1
bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyID0gbm9kZS5pZGVudGlmaWVyTnVtYmVyKCk7CisgICAg
ICAgICAgICAgICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2luID0gbm9kZS0+Y29kZU9yaWdpbjsKKyAg
ICAgICAgICAgICAgICBOb2RlKiBjaGlsZCA9IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKKyAgICAg
ICAgICAgICAgICB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyID0gbm9kZS0+aWRlbnRpZmllck51
bWJlcigpOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIFN0cnVjdHVyZSogc3Ry
dWN0dXJlID0gbV9zdGF0ZS5mb3JOb2RlKGNoaWxkKS5iZXN0UHJvdmVuU3RydWN0dXJlKCk7CiAg
ICAgICAgICAgICAgICAgaWYgKCFzdHJ1Y3R1cmUpCkBAIC0yMjIsNyArMjIxLDcgQEAgcHJpdmF0
ZToKICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3IoY29kZU9yaWdp
biksCiAgICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZSwKICAgICAgICAgICAgICAgICAgICAg
Y29kZUJsb2NrKCktPmlkZW50aWZpZXIoaWRlbnRpZmllck51bWJlciksCi0gICAgICAgICAgICAg
ICAgICAgIG5vZGUub3AoKSA9PSBQdXRCeUlkRGlyZWN0KTsKKyAgICAgICAgICAgICAgICAgICAg
bm9kZS0+b3AoKSA9PSBQdXRCeUlkRGlyZWN0KTsKICAgICAgICAgICAgICAgICAKICAgICAgICAg
ICAgICAgICBpZiAoIXN0YXR1cy5pc1NpbXBsZVJlcGxhY2UoKSAmJiAhc3RhdHVzLmlzU2ltcGxl
VHJhbnNpdGlvbigpKQogICAgICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTI0Nyw3ICsyNDYs
NyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICB0cmFuc2l0aW9uRGF0YSA9IG1fZ3Jh
cGguYWRkU3RydWN0dXJlVHJhbnNpdGlvbkRhdGEoCiAgICAgICAgICAgICAgICAgICAgICAgICBT
dHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YShzdHJ1Y3R1cmUsIHN0YXR1cy5uZXdTdHJ1Y3R1cmUoKSkp
OwogICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUub3Ao
KSA9PSBQdXRCeUlkKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5vcCgpID09IFB1
dEJ5SWQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghc3RydWN0dXJlLT5zdG9yZWRQ
cm90b3R5cGUoKS5pc051bGwoKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZFN0
cnVjdHVyZVRyYW5zaXRpb25DaGVjaygKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29kZU9yaWdpbiwgaW5kZXhJbkJsb2NrLApAQCAtMjY1LDE4ICsyNjQsMTggQEAgcHJpdmF0ZToK
ICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAg
ICAgIE5vZGVJbmRleCBwcm9wZXJ0eVN0b3JhZ2VJbmRleDsKKyAgICAgICAgICAgICAgICBOb2Rl
KiBwcm9wZXJ0eVN0b3JhZ2U7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgaWYg
KGlzSW5saW5lT2Zmc2V0KHN0YXR1cy5vZmZzZXQoKSkpIHsKLSAgICAgICAgICAgICAgICAgICAg
bV9ncmFwaFtjaGlsZF0ucmVmKCk7IC8vIFRoZSBjaGlsZCB3aWxsIGJlIHVzZWQgYXMgdGhlIHBy
b3BlcnR5IGluZGV4LCBzbyByZWYgaXQgdG8gcmVmbGVjdCB0aGUgZG91YmxlIHVzZS4KLSAgICAg
ICAgICAgICAgICAgICAgcHJvcGVydHlTdG9yYWdlSW5kZXggPSBjaGlsZDsKKyAgICAgICAgICAg
ICAgICAgICAgY2hpbGQtPnJlZigpOyAvLyBUaGUgY2hpbGQgd2lsbCBiZSB1c2VkIGFzIHRoZSBw
cm9wZXJ0eSBpbmRleCwgc28gcmVmIGl0IHRvIHJlZmxlY3QgdGhlIGRvdWJsZSB1c2UuCisgICAg
ICAgICAgICAgICAgICAgIHByb3BlcnR5U3RvcmFnZSA9IGNoaWxkOwogICAgICAgICAgICAgICAg
IH0gZWxzZSBpZiAoc3RhdHVzLmlzU2ltcGxlUmVwbGFjZSgpIHx8IHN0cnVjdHVyZS0+b3V0T2ZM
aW5lQ2FwYWNpdHkoKSA9PSBzdGF0dXMubmV3U3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5
KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlTdG9yYWdlSW5kZXggPSBtX2luc2Vy
dGlvblNldC5pbnNlcnROb2RlKAorICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eVN0b3JhZ2Ug
PSBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAogICAgICAgICAgICAgICAgICAgICAgICAgaW5k
ZXhJbkJsb2NrLCBSZWZDaGlsZHJlbiwgUmVmTm9kZSwgU3BlY05vbmUsIEdldEJ1dHRlcmZseSwg
Y29kZU9yaWdpbiwgY2hpbGQpOwogICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIXN0cnVjdHVy
ZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSkgewogICAgICAgICAgICAgICAgICAgICBBU1NFUlQoc3Rh
dHVzLm5ld1N0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpKTsKICAgICAgICAgICAgICAg
ICAgICAgQVNTRVJUKCFpc0lubGluZU9mZnNldChzdGF0dXMub2Zmc2V0KCkpKTsKLSAgICAgICAg
ICAgICAgICAgICAgcHJvcGVydHlTdG9yYWdlSW5kZXggPSBtX2luc2VydGlvblNldC5pbnNlcnRO
b2RlKAorICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eVN0b3JhZ2UgPSBtX2luc2VydGlvblNl
dC5pbnNlcnROb2RlKAogICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBSZWZD
aGlsZHJlbiwgUmVmTm9kZSwgU3BlY05vbmUsIEFsbG9jYXRlUHJvcGVydHlTdG9yYWdlLAogICAg
ICAgICAgICAgICAgICAgICAgICAgY29kZU9yaWdpbiwgT3BJbmZvKHRyYW5zaXRpb25EYXRhKSwg
Y2hpbGQpOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7CkBAIC0yODQsNyArMjgzLDcgQEAgcHJp
dmF0ZToKICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKHN0YXR1cy5uZXdTdHJ1Y3R1cmUoKS0+
b3V0T2ZMaW5lQ2FwYWNpdHkoKSA+IHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7CiAg
ICAgICAgICAgICAgICAgICAgIEFTU0VSVCghaXNJbmxpbmVPZmZzZXQoc3RhdHVzLm9mZnNldCgp
KSk7CiAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eVN0
b3JhZ2VJbmRleCA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCisgICAgICAgICAgICAgICAg
ICAgIHByb3BlcnR5U3RvcmFnZSA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCiAgICAgICAg
ICAgICAgICAgICAgICAgICBpbmRleEluQmxvY2ssIFJlZkNoaWxkcmVuLCBSZWZOb2RlLCBTcGVj
Tm9uZSwgUmVhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZSwKICAgICAgICAgICAgICAgICAgICAgICAg
IGNvZGVPcmlnaW4sIE9wSW5mbyh0cmFuc2l0aW9uRGF0YSksCiAgICAgICAgICAgICAgICAgICAg
ICAgICBjaGlsZCwKQEAgLTI5OSw3ICsyOTgsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAg
ICAgICAgICAgT3BJbmZvKHRyYW5zaXRpb25EYXRhKSwgY2hpbGQpOwogICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBtX2dyYXBoW25vZGVJbmRleF0u
Y29udmVydFRvUHV0QnlPZmZzZXQobV9ncmFwaC5tX3N0b3JhZ2VBY2Nlc3NEYXRhLnNpemUoKSwg
cHJvcGVydHlTdG9yYWdlSW5kZXgpOworICAgICAgICAgICAgICAgIG5vZGUtPmNvbnZlcnRUb1B1
dEJ5T2Zmc2V0KG1fZ3JhcGgubV9zdG9yYWdlQWNjZXNzRGF0YS5zaXplKCksIHByb3BlcnR5U3Rv
cmFnZSk7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgU3RvcmFnZUFjY2Vzc0Rh
dGEgc3RvcmFnZUFjY2Vzc0RhdGE7CiAgICAgICAgICAgICAgICAgc3RvcmFnZUFjY2Vzc0RhdGEu
b2Zmc2V0ID0gaW5kZXhSZWxhdGl2ZVRvQmFzZShzdGF0dXMub2Zmc2V0KCkpOwpAQCAtMzE4LDc1
ICszMTcsNzMgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKICAg
ICAgICAgICAgIG1fc3RhdGUuZXhlY3V0ZShpbmRleEluQmxvY2spOwotICAgICAgICAgICAgaWYg
KCFub2RlLnNob3VsZEdlbmVyYXRlKCkgfHwgbV9zdGF0ZS5kaWRDbG9iYmVyKCkgfHwgbm9kZS5o
YXNDb25zdGFudCgpKQorICAgICAgICAgICAgaWYgKCFub2RlLT5zaG91bGRHZW5lcmF0ZSgpIHx8
IG1fc3RhdGUuZGlkQ2xvYmJlcigpIHx8IG5vZGUtPmhhc0NvbnN0YW50KCkpCiAgICAgICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBKU1ZhbHVlIHZhbHVlID0gbV9zdGF0ZS5mb3JO
b2RlKG5vZGVJbmRleCkudmFsdWUoKTsKKyAgICAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBtX3N0
YXRlLmZvck5vZGUobm9kZSkudmFsdWUoKTsKICAgICAgICAgICAgIGlmICghdmFsdWUpCiAgICAg
ICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAo
bm9kZS5vcCgpID09IEdldExvY2FsKSB7Ci0gICAgICAgICAgICAgICAgTm9kZUluZGV4IHByZXZp
b3VzTG9jYWxBY2Nlc3MgPSBOb05vZGU7Ci0gICAgICAgICAgICAgICAgaWYgKGJsb2NrLT52YXJp
YWJsZXNBdEhlYWQub3BlcmFuZChub2RlLmxvY2FsKCkpID09IG5vZGVJbmRleAotICAgICAgICAg
ICAgICAgICAgICAmJiBtX2dyYXBoW25vZGUuY2hpbGQxKCldLm9wKCkgPT0gUGhpKSB7CisgICAg
ICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBHZXRMb2NhbCkgeworICAgICAgICAgICAgICAgIE5v
ZGUqIHByZXZpb3VzTG9jYWxBY2Nlc3MgPSAwOworICAgICAgICAgICAgICAgIGlmIChibG9jay0+
dmFyaWFibGVzQXRIZWFkLm9wZXJhbmQobm9kZS0+bG9jYWwoKSkgPT0gbm9kZQorICAgICAgICAg
ICAgICAgICAgICAmJiBub2RlLT5jaGlsZDEoKS0+b3AoKSA9PSBQaGkpIHsKICAgICAgICAgICAg
ICAgICAgICAgLy8gV2UgZXhwZWN0IHRoaXMgdG8gYmUgdGhlIGNvbW1vbiBjYXNlLgotICAgICAg
ICAgICAgICAgICAgICBBU1NFUlQoYmxvY2stPmlzSW5QaGlzKG5vZGUuY2hpbGQxKCkuaW5kZXgo
KSkpOwotICAgICAgICAgICAgICAgICAgICBwcmV2aW91c0xvY2FsQWNjZXNzID0gbm9kZS5jaGls
ZDEoKS5pbmRleCgpOwotICAgICAgICAgICAgICAgICAgICBibG9jay0+dmFyaWFibGVzQXRIZWFk
Lm9wZXJhbmQobm9kZS5sb2NhbCgpKSA9IHByZXZpb3VzTG9jYWxBY2Nlc3M7CisgICAgICAgICAg
ICAgICAgICAgIEFTU0VSVChibG9jay0+aXNJblBoaXMobm9kZS0+Y2hpbGQxKCkubm9kZSgpKSk7
CisgICAgICAgICAgICAgICAgICAgIHByZXZpb3VzTG9jYWxBY2Nlc3MgPSBub2RlLT5jaGlsZDEo
KS5ub2RlKCk7CisgICAgICAgICAgICAgICAgICAgIGJsb2NrLT52YXJpYWJsZXNBdEhlYWQub3Bl
cmFuZChub2RlLT5sb2NhbCgpKSA9IHByZXZpb3VzTG9jYWxBY2Nlc3M7CiAgICAgICAgICAgICAg
ICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGluZGV4SW5CbG9jayA+IDAp
OwogICAgICAgICAgICAgICAgICAgICAvLyBNdXN0IHNlYXJjaCBmb3IgdGhlIHByZXZpb3VzIGFj
Y2VzcyB0byB0aGlzIGxvY2FsLgogICAgICAgICAgICAgICAgICAgICBmb3IgKEJsb2NrSW5kZXgg
c3ViSW5kZXhJbkJsb2NrID0gaW5kZXhJbkJsb2NrOyBzdWJJbmRleEluQmxvY2stLTspIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIE5vZGVJbmRleCBzdWJOb2RlSW5kZXggPSBibG9jay0+YXQo
c3ViSW5kZXhJbkJsb2NrKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIE5vZGUmIHN1Yk5vZGUg
PSBtX2dyYXBoW3N1Yk5vZGVJbmRleF07Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXN1
Yk5vZGUuc2hvdWxkR2VuZXJhdGUoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIE5vZGUqIHN1
Yk5vZGUgPSBibG9jay0+YXQoc3ViSW5kZXhJbkJsb2NrKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICghc3ViTm9kZS0+c2hvdWxkR2VuZXJhdGUoKSkKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICghc3ViTm9kZS5o
YXNWYXJpYWJsZUFjY2Vzc0RhdGEoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghc3Vi
Tm9kZS0+aGFzVmFyaWFibGVBY2Nlc3NEYXRhKCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3ViTm9kZS5sb2NhbCgp
ICE9IG5vZGUubG9jYWwoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdWJOb2RlLT5s
b2NhbCgpICE9IG5vZGUtPmxvY2FsKCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
dGludWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGUgdHdvIG11c3QgaGF2ZSBiZWVu
IHVuaWZpZWQuCi0gICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQoc3ViTm9kZS52YXJpYWJs
ZUFjY2Vzc0RhdGEoKSA9PSBub2RlLnZhcmlhYmxlQWNjZXNzRGF0YSgpKTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHByZXZpb3VzTG9jYWxBY2Nlc3MgPSBzdWJOb2RlSW5kZXg7CisgICAgICAg
ICAgICAgICAgICAgICAgICBBU1NFUlQoc3ViTm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCkgPT0g
bm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgcHJl
dmlvdXNMb2NhbEFjY2VzcyA9IHN1Yk5vZGU7CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBpZiAocHJldmlv
dXNMb2NhbEFjY2VzcyA9PSBOb05vZGUpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFwcmV2
aW91c0xvY2FsQWNjZXNzKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGUgcHJldmlv
dXMgYWNjZXNzIG11c3QgaGF2ZSBiZWVuIGEgUGhpLgogICAgICAgICAgICAgICAgICAgICAgICAg
Zm9yIChCbG9ja0luZGV4IHBoaUluZGV4SW5CbG9jayA9IGJsb2NrLT5waGlzLnNpemUoKTsgcGhp
SW5kZXhJbkJsb2NrLS07KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgTm9kZUluZGV4
IHBoaU5vZGVJbmRleCA9IGJsb2NrLT5waGlzW3BoaUluZGV4SW5CbG9ja107Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgTm9kZSYgcGhpTm9kZSA9IG1fZ3JhcGhbcGhpTm9kZUluZGV4XTsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXBoaU5vZGUuc2hvdWxkR2VuZXJhdGUo
KSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb2RlKiBwaGlOb2RlID0gYmxvY2stPnBo
aXNbcGhpSW5kZXhJbkJsb2NrXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXBo
aU5vZGUtPnNob3VsZEdlbmVyYXRlKCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwaGlOb2RlLmxvY2Fs
KCkgIT0gbm9kZS5sb2NhbCgpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwaGlO
b2RlLT5sb2NhbCgpICE9IG5vZGUtPmxvY2FsKCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoZSB0d28g
bXVzdCBoYXZlIGJlZW4gdW5pZmllZC4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBBU1NF
UlQocGhpTm9kZS52YXJpYWJsZUFjY2Vzc0RhdGEoKSA9PSBub2RlLnZhcmlhYmxlQWNjZXNzRGF0
YSgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2aW91c0xvY2FsQWNjZXNzID0g
cGhpTm9kZUluZGV4OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChwaGlOb2Rl
LT52YXJpYWJsZUFjY2Vzc0RhdGEoKSA9PSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldmlvdXNMb2NhbEFjY2VzcyA9IHBoaU5vZGU7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQocHJldmlvdXNMb2NhbEFjY2Vz
cyAhPSBOb05vZGUpOworICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKHByZXZpb3VzTG9j
YWxBY2Nlc3MpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBBU1NFUlQocHJldmlvdXNMb2NhbEFj
Y2VzcyAhPSBOb05vZGUpOworICAgICAgICAgICAgICAgIEFTU0VSVChwcmV2aW91c0xvY2FsQWNj
ZXNzKTsKICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBOb2RlSW5kZXggdGFpbE5v
ZGVJbmRleCA9IGJsb2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZChub2RlLmxvY2FsKCkpOwot
ICAgICAgICAgICAgICAgIGlmICh0YWlsTm9kZUluZGV4ID09IG5vZGVJbmRleCkKLSAgICAgICAg
ICAgICAgICAgICAgYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKG5vZGUubG9jYWwoKSkg
PSBwcmV2aW91c0xvY2FsQWNjZXNzOworICAgICAgICAgICAgICAgIE5vZGUqIHRhaWxOb2RlID0g
YmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKG5vZGUtPmxvY2FsKCkpOworICAgICAgICAg
ICAgICAgIGlmICh0YWlsTm9kZSA9PSBub2RlKQorICAgICAgICAgICAgICAgICAgICBibG9jay0+
dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQobm9kZS0+bG9jYWwoKSkgPSBwcmV2aW91c0xvY2FsQWNj
ZXNzOwogICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICBBU1NFUlQo
Ci0gICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoW3RhaWxOb2RlSW5kZXhdLm9wKCkgPT0g
Rmx1c2gKLSAgICAgICAgICAgICAgICAgICAgICAgIHx8IG1fZ3JhcGhbdGFpbE5vZGVJbmRleF0u
b3AoKSA9PSBTZXRMb2NhbAotICAgICAgICAgICAgICAgICAgICAgICAgfHwgaXNDYXB0dXJlZEF0
T3JBZnRlcihibG9jaywgaW5kZXhJbkJsb2NrLCBub2RlLmxvY2FsKCkpKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHRhaWxOb2RlLT5vcCgpID09IEZsdXNoCisgICAgICAgICAgICAgICAgICAg
ICAgICB8fCB0YWlsTm9kZS0+b3AoKSA9PSBTZXRMb2NhbAorICAgICAgICAgICAgICAgICAgICAg
ICAgfHwgaXNDYXB0dXJlZEF0T3JBZnRlcihibG9jaywgaW5kZXhJbkJsb2NrLCBub2RlLT5sb2Nh
bCgpKSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICAgICAgCi0g
ICAgICAgICAgICBDb2RlT3JpZ2luIGNvZGVPcmlnaW4gPSBub2RlLmNvZGVPcmlnaW47Ci0gICAg
ICAgICAgICBBZGphY2VuY3lMaXN0IGNoaWxkcmVuID0gbm9kZS5jaGlsZHJlbjsKKyAgICAgICAg
ICAgIENvZGVPcmlnaW4gY29kZU9yaWdpbiA9IG5vZGUtPmNvZGVPcmlnaW47CisgICAgICAgICAg
ICBBZGphY2VuY3lMaXN0IGNoaWxkcmVuID0gbm9kZS0+Y2hpbGRyZW47CiAgICAgICAgICAgICAg
ICAgCi0gICAgICAgICAgICBtX2dyYXBoLmNvbnZlcnRUb0NvbnN0YW50KG5vZGVJbmRleCwgdmFs
dWUpOworICAgICAgICAgICAgbV9ncmFwaC5jb252ZXJ0VG9Db25zdGFudChub2RlLCB2YWx1ZSk7
CiAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAogICAgICAgICAgICAgICAg
IGluZGV4SW5CbG9jaywgRG9udFJlZkNoaWxkcmVuLCBEb250UmVmTm9kZSwgU3BlY05vbmUsIFBo
YW50b20sIGNvZGVPcmlnaW4sIGNoaWxkcmVuKTsKLSAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgIAogICAgICAgICAgICAgY2hhbmdlZCA9IHRydWU7CiAgICAgICAgIH0KICAgICAgICAgbV9z
dGF0ZS5yZXNldCgpOwpAQCAtMzk5LDEyICszOTYsMTIgQEAgcHJpdmF0ZToKICAgICBib29sIGlz
Q2FwdHVyZWRBdE9yQWZ0ZXIoQmFzaWNCbG9jayogYmxvY2ssIHVuc2lnbmVkIGluZGV4SW5CbG9j
aywgaW50IG9wZXJhbmQpCiAgICAgewogICAgICAgICBmb3IgKDsgaW5kZXhJbkJsb2NrIDwgYmxv
Y2stPnNpemUoKTsgKytpbmRleEluQmxvY2spIHsKLSAgICAgICAgICAgIE5vZGUmIG5vZGUgPSBt
X2dyYXBoW2Jsb2NrLT5hdChpbmRleEluQmxvY2spXTsKLSAgICAgICAgICAgIGlmICghbm9kZS5o
YXNMb2NhbCgpKQorICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5hdChpbmRleEluQmxv
Y2spOworICAgICAgICAgICAgaWYgKCFub2RlLT5oYXNMb2NhbCgpKQogICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwotICAgICAgICAgICAgaWYgKG5vZGUubG9jYWwoKSAhPSBvcGVyYW5kKQorICAg
ICAgICAgICAgaWYgKG5vZGUtPmxvY2FsKCkgIT0gb3BlcmFuZCkKICAgICAgICAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgICAgIGlmIChub2RlLnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5pc0Nh
cHR1cmVkKCkpCisgICAgICAgICAgICBpZiAobm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCktPmlz
Q2FwdHVyZWQoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogICAg
ICAgICByZXR1cm4gZmFsc2U7CkBAIC00MTMsMjAgKzQxMCwyMCBAQCBwcml2YXRlOgogICAgIAog
ICAgIHZvaWQgYWRkU3RydWN0dXJlVHJhbnNpdGlvbkNoZWNrKENvZGVPcmlnaW4gY29kZU9yaWdp
biwgdW5zaWduZWQgaW5kZXhJbkJsb2NrLCBKU0NlbGwqIGNlbGwpCiAgICAgewotICAgICAgICBO
b2RlSW5kZXggd2Vha0NvbnN0YW50SW5kZXggPSBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAor
ICAgICAgICBOb2RlKiB3ZWFrQ29uc3RhbnQgPSBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAog
ICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBEb250UmVmQ2hpbGRyZW4sIERvbnRSZWZOb2RlLCBz
cGVjdWxhdGlvbkZyb21WYWx1ZShjZWxsKSwKICAgICAgICAgICAgIFdlYWtKU0NvbnN0YW50LCBj
b2RlT3JpZ2luLCBPcEluZm8oY2VsbCkpOwogICAgICAgICAKICAgICAgICAgaWYgKGNlbGwtPnN0
cnVjdHVyZSgpLT50cmFuc2l0aW9uV2F0Y2hwb2ludFNldElzU3RpbGxWYWxpZCgpKSB7CiAgICAg
ICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAogICAgICAgICAgICAgICAgIGluZGV4
SW5CbG9jaywgUmVmQ2hpbGRyZW4sIERvbnRSZWZOb2RlLCBTcGVjTm9uZSwgU3RydWN0dXJlVHJh
bnNpdGlvbldhdGNocG9pbnQsCi0gICAgICAgICAgICAgICAgY29kZU9yaWdpbiwgT3BJbmZvKGNl
bGwtPnN0cnVjdHVyZSgpKSwgd2Vha0NvbnN0YW50SW5kZXgpOworICAgICAgICAgICAgICAgIGNv
ZGVPcmlnaW4sIE9wSW5mbyhjZWxsLT5zdHJ1Y3R1cmUoKSksIHdlYWtDb25zdGFudCk7CiAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAogICAgICAgICBtX2luc2VydGlvblNldC5pbnNl
cnROb2RlKAogICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBSZWZDaGlsZHJlbiwgRG9udFJlZk5v
ZGUsIFNwZWNOb25lLCBDaGVja1N0cnVjdHVyZSwgY29kZU9yaWdpbiwKLSAgICAgICAgICAgIE9w
SW5mbyhtX2dyYXBoLmFkZFN0cnVjdHVyZVNldChjZWxsLT5zdHJ1Y3R1cmUoKSkpLCB3ZWFrQ29u
c3RhbnRJbmRleCk7CisgICAgICAgICAgICBPcEluZm8obV9ncmFwaC5hZGRTdHJ1Y3R1cmVTZXQo
Y2VsbC0+c3RydWN0dXJlKCkpKSwgd2Vha0NvbnN0YW50KTsKICAgICB9CiAgICAgCiAgICAgLy8g
VGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVzZSB0aGUgQ0ZBIG1heSByZWFjaCBjb25jbHVzaW9ucyBh
Ym91dCBjb25zdGFudHMgYmFzZWQgb24gaXRzCkBAIC00NTEsOSArNDQ4LDggQEAgcHJpdmF0ZToK
ICAgICAgICAgICAgIGlmIChtX3N0YXRlLmlzVmFsaWQoKSkKICAgICAgICAgICAgICAgICBjb250
aW51ZTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRleCA9IGJs
b2NrLT5hdChpbmRleEluQmxvY2spOwotICAgICAgICAgICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhb
bm9kZUluZGV4XTsKLSAgICAgICAgICAgIHN3aXRjaCAobm9kZS5vcCgpKSB7CisgICAgICAgICAg
ICBOb2RlKiBub2RlID0gYmxvY2stPmF0KGluZGV4SW5CbG9jayk7CisgICAgICAgICAgICBzd2l0
Y2ggKG5vZGUtPm9wKCkpIHsKICAgICAgICAgICAgIGNhc2UgUmV0dXJuOgogICAgICAgICAgICAg
Y2FzZSBUaHJvdzoKICAgICAgICAgICAgIGNhc2UgVGhyb3dSZWZlcmVuY2VFcnJvcjoKQEAgLTQ2
NCw3ICs0NjAsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAg
ICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAogICAgICAgICAgICAgICAgICAgICBpbmRl
eEluQmxvY2ssIERvbnRSZWZDaGlsZHJlbiwgRG9udFJlZk5vZGUsIFNwZWNOb25lLCBGb3JjZU9T
UkV4aXQsCi0gICAgICAgICAgICAgICAgICAgIG5vZGUuY29kZU9yaWdpbik7CisgICAgICAgICAg
ICAgICAgICAgIG5vZGUtPmNvZGVPcmlnaW4pOwogICAgICAgICAgICAgICAgIGNoYW5nZWQgPSB0
cnVlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEaXNhc3NlbWJsZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGlzYXNzZW1ibGVyLmNwcAkocmV2aXNpb24gMTQw
OTA0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEaXNhc3NlbWJsZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIw
MTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC0zNyw3ICszNyw2IEBAIERpc2Fzc2VtYmxlcjo6RGlzYXNzZW1ibGVyKEdy
YXBoJiBncmFwaCkKICAgICA6IG1fZ3JhcGgoZ3JhcGgpCiB7CiAgICAgbV9sYWJlbEZvckJsb2Nr
SW5kZXgucmVzaXplKGdyYXBoLm1fYmxvY2tzLnNpemUoKSk7Ci0gICAgbV9sYWJlbEZvck5vZGVJ
bmRleC5yZXNpemUoZ3JhcGguc2l6ZSgpKTsKIH0KIAogdm9pZCBEaXNhc3NlbWJsZXI6OmR1bXAo
UHJpbnRTdHJlYW0mIG91dCwgTGlua0J1ZmZlciYgbGlua0J1ZmZlcikKQEAgLTk1LDIzICs5NCwy
NCBAQCBWZWN0b3I8RGlzYXNzZW1ibGVyOjpEdW1wZWRPcD4gRGlzYXNzZW1iCiAgICAgY29uc3Qg
Y2hhciogcHJlZml4ID0gIiAgICAiOwogICAgIGNvbnN0IGNoYXIqIGRpc2Fzc2VtYmx5UHJlZml4
ID0gIiAgICAgICAgIjsKICAgICAKLSAgICBOb2RlSW5kZXggbGFzdE5vZGVJbmRleCA9IE5vTm9k
ZTsKKyAgICBOb2RlKiBsYXN0Tm9kZSA9IDA7CiAgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIHBy
ZXZpb3VzTGFiZWwgPSBtX3N0YXJ0T2ZDb2RlOwogICAgIGZvciAoc2l6ZV90IGJsb2NrSW5kZXgg
PSAwOyBibG9ja0luZGV4IDwgbV9ncmFwaC5tX2Jsb2Nrcy5zaXplKCk7ICsrYmxvY2tJbmRleCkg
ewogICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGgubV9ibG9ja3NbYmxvY2tJbmRl
eF0uZ2V0KCk7CiAgICAgICAgIGlmICghYmxvY2spCiAgICAgICAgICAgICBjb250aW51ZTsKLSAg
ICAgICAgZHVtcERpc2Fzc2VtYmx5KG91dCwgZGlzYXNzZW1ibHlQcmVmaXgsIGxpbmtCdWZmZXIs
IHByZXZpb3VzTGFiZWwsIG1fbGFiZWxGb3JCbG9ja0luZGV4W2Jsb2NrSW5kZXhdLCBsYXN0Tm9k
ZUluZGV4KTsKKyAgICAgICAgZHVtcERpc2Fzc2VtYmx5KG91dCwgZGlzYXNzZW1ibHlQcmVmaXgs
IGxpbmtCdWZmZXIsIHByZXZpb3VzTGFiZWwsIG1fbGFiZWxGb3JCbG9ja0luZGV4W2Jsb2NrSW5k
ZXhdLCBsYXN0Tm9kZSk7CiAgICAgICAgIGFwcGVuZChyZXN1bHQsIG91dCwgcHJldmlvdXNPcmln
aW4pOwogICAgICAgICBtX2dyYXBoLmR1bXBCbG9ja0hlYWRlcihvdXQsIHByZWZpeCwgYmxvY2tJ
bmRleCwgR3JhcGg6OkR1bXBMaXZlUGhpc09ubHkpOwogICAgICAgICBhcHBlbmQocmVzdWx0LCBv
dXQsIHByZXZpb3VzT3JpZ2luKTsKLSAgICAgICAgTm9kZUluZGV4IGxhc3ROb2RlSW5kZXhGb3JE
aXNhc3NlbWJseSA9IGJsb2NrLT5hdCgwKTsKKyAgICAgICAgTm9kZSogbGFzdE5vZGVGb3JEaXNh
c3NlbWJseSA9IGJsb2NrLT5hdCgwKTsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBi
bG9jay0+c2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIGlmICghbV9ncmFwaFtibG9jay0+YXQo
aSldLndpbGxIYXZlQ29kZUdlbk9yT1NSKCkgJiYgIU9wdGlvbnM6OnNob3dBbGxERkdOb2Rlcygp
KQorICAgICAgICAgICAgaWYgKCFibG9jay0+YXQoaSktPndpbGxIYXZlQ29kZUdlbk9yT1NSKCkg
JiYgIU9wdGlvbnM6OnNob3dBbGxERkdOb2RlcygpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwogICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIGN1cnJlbnRMYWJlbDsKLSAgICAg
ICAgICAgIGlmIChtX2xhYmVsRm9yTm9kZUluZGV4W2Jsb2NrLT5hdChpKV0uaXNTZXQoKSkKLSAg
ICAgICAgICAgICAgICBjdXJyZW50TGFiZWwgPSBtX2xhYmVsRm9yTm9kZUluZGV4W2Jsb2NrLT5h
dChpKV07CisgICAgICAgICAgICBIYXNoTWFwPE5vZGUqLCBNYWNyb0Fzc2VtYmxlcjo6TGFiZWw+
OjppdGVyYXRvciBpdGVyID0gbV9sYWJlbEZvck5vZGUuZmluZChibG9jay0+YXQoaSkpOworICAg
ICAgICAgICAgaWYgKGl0ZXIgIT0gbV9sYWJlbEZvck5vZGUuZW5kKCkpCisgICAgICAgICAgICAg
ICAgY3VycmVudExhYmVsID0gaXRlci0+dmFsdWU7CiAgICAgICAgICAgICBlbHNlIHsKICAgICAg
ICAgICAgICAgICAvLyBEdW1wIHRoZSBsYXN0IGluc3RydWN0aW9uIGJ5IHVzaW5nIHRoZSBmaXJz
dCBsYWJlbCBvZiB0aGUgbmV4dCBibG9jawogICAgICAgICAgICAgICAgIC8vIGFzIHRoZSBlbmQg
cG9pbnQuIFRoaXMgY2FzZSBpcyBoaXQgZWl0aGVyIGR1cmluZyBwZWVwaG9sZSBjb21wYXJlCkBA
IC0xMjIsMzYgKzEyMiwzNiBAQCBWZWN0b3I8RGlzYXNzZW1ibGVyOjpEdW1wZWRPcD4gRGlzYXNz
ZW1iCiAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICBjdXJyZW50TGFi
ZWwgPSBtX2VuZE9mTWFpblBhdGg7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBkdW1wRGlz
YXNzZW1ibHkob3V0LCBkaXNhc3NlbWJseVByZWZpeCwgbGlua0J1ZmZlciwgcHJldmlvdXNMYWJl
bCwgY3VycmVudExhYmVsLCBsYXN0Tm9kZUluZGV4Rm9yRGlzYXNzZW1ibHkpOworICAgICAgICAg
ICAgZHVtcERpc2Fzc2VtYmx5KG91dCwgZGlzYXNzZW1ibHlQcmVmaXgsIGxpbmtCdWZmZXIsIHBy
ZXZpb3VzTGFiZWwsIGN1cnJlbnRMYWJlbCwgbGFzdE5vZGVGb3JEaXNhc3NlbWJseSk7CiAgICAg
ICAgICAgICBhcHBlbmQocmVzdWx0LCBvdXQsIHByZXZpb3VzT3JpZ2luKTsKLSAgICAgICAgICAg
IHByZXZpb3VzT3JpZ2luID0gbV9ncmFwaFtibG9jay0+YXQoaSldLmNvZGVPcmlnaW47Ci0gICAg
ICAgICAgICBpZiAobV9ncmFwaC5kdW1wQ29kZU9yaWdpbihvdXQsIHByZWZpeCwgbGFzdE5vZGVJ
bmRleCwgYmxvY2stPmF0KGkpKSkgeworICAgICAgICAgICAgcHJldmlvdXNPcmlnaW4gPSBibG9j
ay0+YXQoaSktPmNvZGVPcmlnaW47CisgICAgICAgICAgICBpZiAobV9ncmFwaC5kdW1wQ29kZU9y
aWdpbihvdXQsIHByZWZpeCwgbGFzdE5vZGUsIGJsb2NrLT5hdChpKSkpIHsKICAgICAgICAgICAg
ICAgICBhcHBlbmQocmVzdWx0LCBvdXQsIHByZXZpb3VzT3JpZ2luKTsKLSAgICAgICAgICAgICAg
ICBwcmV2aW91c09yaWdpbiA9IG1fZ3JhcGhbYmxvY2stPmF0KGkpXS5jb2RlT3JpZ2luOworICAg
ICAgICAgICAgICAgIHByZXZpb3VzT3JpZ2luID0gYmxvY2stPmF0KGkpLT5jb2RlT3JpZ2luOwog
ICAgICAgICAgICAgfQogICAgICAgICAgICAgbV9ncmFwaC5kdW1wKG91dCwgcHJlZml4LCBibG9j
ay0+YXQoaSkpOwotICAgICAgICAgICAgbGFzdE5vZGVJbmRleCA9IGJsb2NrLT5hdChpKTsKLSAg
ICAgICAgICAgIGxhc3ROb2RlSW5kZXhGb3JEaXNhc3NlbWJseSA9IGJsb2NrLT5hdChpKTsKKyAg
ICAgICAgICAgIGxhc3ROb2RlID0gYmxvY2stPmF0KGkpOworICAgICAgICAgICAgbGFzdE5vZGVG
b3JEaXNhc3NlbWJseSA9IGJsb2NrLT5hdChpKTsKICAgICAgICAgfQogICAgIH0KLSAgICBkdW1w
RGlzYXNzZW1ibHkob3V0LCBkaXNhc3NlbWJseVByZWZpeCwgbGlua0J1ZmZlciwgcHJldmlvdXNM
YWJlbCwgbV9lbmRPZk1haW5QYXRoLCBsYXN0Tm9kZUluZGV4KTsKKyAgICBkdW1wRGlzYXNzZW1i
bHkob3V0LCBkaXNhc3NlbWJseVByZWZpeCwgbGlua0J1ZmZlciwgcHJldmlvdXNMYWJlbCwgbV9l
bmRPZk1haW5QYXRoLCBsYXN0Tm9kZSk7CiAgICAgYXBwZW5kKHJlc3VsdCwgb3V0LCBwcmV2aW91
c09yaWdpbik7CiAgICAgb3V0LnByaW50KHByZWZpeCwgIihFbmQgT2YgTWFpbiBQYXRoKVxuIik7
CiAgICAgYXBwZW5kKHJlc3VsdCwgb3V0LCBwcmV2aW91c09yaWdpbik7Ci0gICAgZHVtcERpc2Fz
c2VtYmx5KG91dCwgZGlzYXNzZW1ibHlQcmVmaXgsIGxpbmtCdWZmZXIsIHByZXZpb3VzTGFiZWws
IG1fZW5kT2ZDb2RlLCBOb05vZGUpOworICAgIGR1bXBEaXNhc3NlbWJseShvdXQsIGRpc2Fzc2Vt
Ymx5UHJlZml4LCBsaW5rQnVmZmVyLCBwcmV2aW91c0xhYmVsLCBtX2VuZE9mQ29kZSwgMCk7CiAg
ICAgYXBwZW5kKHJlc3VsdCwgb3V0LCBwcmV2aW91c09yaWdpbik7CiAgICAgCiAgICAgcmV0dXJu
IHJlc3VsdDsKIH0KIAotdm9pZCBEaXNhc3NlbWJsZXI6OmR1bXBEaXNhc3NlbWJseShQcmludFN0
cmVhbSYgb3V0LCBjb25zdCBjaGFyKiBwcmVmaXgsIExpbmtCdWZmZXImIGxpbmtCdWZmZXIsIE1h
Y3JvQXNzZW1ibGVyOjpMYWJlbCYgcHJldmlvdXNMYWJlbCwgTWFjcm9Bc3NlbWJsZXI6OkxhYmVs
IGN1cnJlbnRMYWJlbCwgTm9kZUluZGV4IGNvbnRleHQpCit2b2lkIERpc2Fzc2VtYmxlcjo6ZHVt
cERpc2Fzc2VtYmx5KFByaW50U3RyZWFtJiBvdXQsIGNvbnN0IGNoYXIqIHByZWZpeCwgTGlua0J1
ZmZlciYgbGlua0J1ZmZlciwgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsJiBwcmV2aW91c0xhYmVsLCBN
YWNyb0Fzc2VtYmxlcjo6TGFiZWwgY3VycmVudExhYmVsLCBOb2RlKiBjb250ZXh0KQogewogICAg
IHNpemVfdCBwcmVmaXhMZW5ndGggPSBzdHJsZW4ocHJlZml4KTsKICAgICBpbnQgYW1vdW50T2ZO
b2RlV2hpdGVTcGFjZTsKLSAgICBpZiAoY29udGV4dCA9PSBOb05vZGUpCisgICAgaWYgKCFjb250
ZXh0KQogICAgICAgICBhbW91bnRPZk5vZGVXaGl0ZVNwYWNlID0gMDsKICAgICBlbHNlCi0gICAg
ICAgIGFtb3VudE9mTm9kZVdoaXRlU3BhY2UgPSBHcmFwaDo6YW1vdW50T2ZOb2RlV2hpdGVTcGFj
ZShtX2dyYXBoW2NvbnRleHRdKTsKKyAgICAgICAgYW1vdW50T2ZOb2RlV2hpdGVTcGFjZSA9IEdy
YXBoOjphbW91bnRPZk5vZGVXaGl0ZVNwYWNlKGNvbnRleHQpOwogICAgIE93bkFycmF5UHRyPGNo
YXI+IHByZWZpeEJ1ZmZlciA9IGFkb3B0QXJyYXlQdHIobmV3IGNoYXJbcHJlZml4TGVuZ3RoICsg
YW1vdW50T2ZOb2RlV2hpdGVTcGFjZSArIDFdKTsKICAgICBzdHJjcHkocHJlZml4QnVmZmVyLmdl
dCgpLCBwcmVmaXgpOwogICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYW1vdW50T2ZOb2RlV2hpdGVT
cGFjZTsgKytpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEaXNhc3NlbWJs
ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rpc2Fzc2Vt
Ymxlci5oCShyZXZpc2lvbiAxNDA5MDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0Rpc2Fzc2VtYmxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTIsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAi
REZHQ29tbW9uLmgiCiAjaW5jbHVkZSAiTGlua0J1ZmZlci5oIgogI2luY2x1ZGUgIk1hY3JvQXNz
ZW1ibGVyLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvU3RyaW5n
UHJpbnRTdHJlYW0uaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKQEAgLTUwLDkgKzUxLDEw
IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIG1fbGFiZWxGb3JCbG9ja0luZGV4W2Jsb2NrSW5k
ZXhdID0gbGFiZWw7CiAgICAgfQotICAgIHZvaWQgc2V0Rm9yTm9kZShOb2RlSW5kZXggbm9kZUlu
ZGV4LCBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbGFiZWwpCisgICAgdm9pZCBzZXRGb3JOb2RlKE5v
ZGUqIG5vZGUsIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBsYWJlbCkKICAgICB7Ci0gICAgICAgIG1f
bGFiZWxGb3JOb2RlSW5kZXhbbm9kZUluZGV4XSA9IGxhYmVsOworICAgICAgICBBU1NFUlQobGFi
ZWwuaXNTZXQoKSk7CisgICAgICAgIG1fbGFiZWxGb3JOb2RlLmFkZChub2RlLCBsYWJlbCk7CiAg
ICAgfQogICAgIHZvaWQgc2V0RW5kT2ZNYWluUGF0aChNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbGFi
ZWwpCiAgICAgewpAQCAtODMsMTIgKzg1LDEyIEBAIHByaXZhdGU6CiAgICAgdm9pZCBhcHBlbmQo
VmVjdG9yPER1bXBlZE9wPiYsIFN0cmluZ1ByaW50U3RyZWFtJiwgQ29kZU9yaWdpbiYpOwogICAg
IFZlY3RvcjxEdW1wZWRPcD4gY3JlYXRlRHVtcExpc3QoTGlua0J1ZmZlciYpOwogICAgIAotICAg
IHZvaWQgZHVtcERpc2Fzc2VtYmx5KFByaW50U3RyZWFtJiwgY29uc3QgY2hhciogcHJlZml4LCBM
aW5rQnVmZmVyJiwgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsJiBwcmV2aW91c0xhYmVsLCBNYWNyb0Fz
c2VtYmxlcjo6TGFiZWwgY3VycmVudExhYmVsLCBOb2RlSW5kZXggY29udGV4dCk7CisgICAgdm9p
ZCBkdW1wRGlzYXNzZW1ibHkoUHJpbnRTdHJlYW0mLCBjb25zdCBjaGFyKiBwcmVmaXgsIExpbmtC
dWZmZXImLCBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwmIHByZXZpb3VzTGFiZWwsIE1hY3JvQXNzZW1i
bGVyOjpMYWJlbCBjdXJyZW50TGFiZWwsIE5vZGUqIGNvbnRleHQpOwogICAgIAogICAgIEdyYXBo
JiBtX2dyYXBoOwogICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBtX3N0YXJ0T2ZDb2RlOwogICAg
IFZlY3RvcjxNYWNyb0Fzc2VtYmxlcjo6TGFiZWw+IG1fbGFiZWxGb3JCbG9ja0luZGV4OwotICAg
IFZlY3RvcjxNYWNyb0Fzc2VtYmxlcjo6TGFiZWw+IG1fbGFiZWxGb3JOb2RlSW5kZXg7CisgICAg
SGFzaE1hcDxOb2RlKiwgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsPiBtX2xhYmVsRm9yTm9kZTsKICAg
ICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbV9lbmRPZk1haW5QYXRoOwogICAgIE1hY3JvQXNzZW1i
bGVyOjpMYWJlbCBtX2VuZE9mQ29kZTsKIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0VkZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHRWRnZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0VkZ2UuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQxIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJERkdFZGdlLmgiCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBERkcgeworCit2b2lkIEVkZ2U6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29u
c3QKK3sKKyAgICBvdXQucHJpbnQodXNlS2luZFRvU3RyaW5nKHVzZUtpbmQoKSksIG5vZGUoKSk7
Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdf
SklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0VkZ2UuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0VkZ2UuaAkocmV2aXNpb24gMTQw
OTA0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdFZGdlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTM5LDQ1ICszOSw0MyBAQCBjbGFzcyBBZGphY2VuY3lMaXN0OwogY2xhc3MgRWRnZSB7CiBw
dWJsaWM6CiAgICAgRWRnZSgpCi0gICAgICAgIDogbV9lbmNvZGVkV29yZChtYWtlV29yZChOb05v
ZGUsIFVudHlwZWRVc2UpKQorICAgICAgICA6IG1fZW5jb2RlZFdvcmQobWFrZVdvcmQoMCwgVW50
eXBlZFVzZSkpCiAgICAgewogICAgIH0KICAgICAKLSAgICBleHBsaWNpdCBFZGdlKE5vZGVJbmRl
eCBub2RlSW5kZXgpCi0gICAgICAgIDogbV9lbmNvZGVkV29yZChtYWtlV29yZChub2RlSW5kZXgs
IFVudHlwZWRVc2UpKQorICAgIGV4cGxpY2l0IEVkZ2UoTm9kZSogbm9kZSkKKyAgICAgICAgOiBt
X2VuY29kZWRXb3JkKG1ha2VXb3JkKG5vZGUsIFVudHlwZWRVc2UpKQogICAgIHsKICAgICB9CiAg
ICAgCi0gICAgRWRnZShOb2RlSW5kZXggbm9kZUluZGV4LCBVc2VLaW5kIHVzZUtpbmQpCi0gICAg
ICAgIDogbV9lbmNvZGVkV29yZChtYWtlV29yZChub2RlSW5kZXgsIHVzZUtpbmQpKQorICAgIEVk
Z2UoTm9kZSogbm9kZSwgVXNlS2luZCB1c2VLaW5kKQorICAgICAgICA6IG1fZW5jb2RlZFdvcmQo
bWFrZVdvcmQobm9kZSwgdXNlS2luZCkpCiAgICAgewogICAgIH0KICAgICAKLSAgICBOb2RlSW5k
ZXggaW5kZXhVbmNoZWNrZWQoKSBjb25zdCB7IHJldHVybiBtX2VuY29kZWRXb3JkID4+IHNoaWZ0
KCk7IH0KLSAgICBOb2RlSW5kZXggaW5kZXgoKSBjb25zdAotICAgIHsKLSAgICAgICAgQVNTRVJU
KGlzU2V0KCkpOwotICAgICAgICByZXR1cm4gbV9lbmNvZGVkV29yZCA+PiBzaGlmdCgpOwotICAg
IH0KLSAgICB2b2lkIHNldEluZGV4KE5vZGVJbmRleCBub2RlSW5kZXgpCisgICAgTm9kZSogbm9k
ZSgpIGNvbnN0IHsgcmV0dXJuIGJpdHdpc2VfY2FzdDxOb2RlKj4obV9lbmNvZGVkV29yZCAmIH4o
KDEgPDwgc2hpZnQoKSkgLSAxKSk7IH0KKyAgICBOb2RlJiBvcGVyYXRvciooKSBjb25zdCB7IHJl
dHVybiAqbm9kZSgpOyB9CisgICAgTm9kZSogb3BlcmF0b3ItPigpIGNvbnN0IHsgcmV0dXJuIG5v
ZGUoKTsgfQorICAgIAorICAgIHZvaWQgc2V0Tm9kZShOb2RlKiBub2RlKQogICAgIHsKLSAgICAg
ICAgbV9lbmNvZGVkV29yZCA9IG1ha2VXb3JkKG5vZGVJbmRleCwgdXNlS2luZCgpKTsKKyAgICAg
ICAgbV9lbmNvZGVkV29yZCA9IG1ha2VXb3JkKG5vZGUsIHVzZUtpbmQoKSk7CiAgICAgfQogICAg
IAogICAgIFVzZUtpbmQgdXNlS2luZCgpIGNvbnN0CiAgICAgewotICAgICAgICBBU1NFUlQoaXNT
ZXQoKSk7CisgICAgICAgIEFTU0VSVChub2RlKCkpOwogICAgICAgICB1bnNpZ25lZCBtYXNrZWQg
PSBtX2VuY29kZWRXb3JkICYgKCgoMSA8PCBzaGlmdCgpKSAtIDEpKTsKICAgICAgICAgQVNTRVJU
KG1hc2tlZCA8IExhc3RVc2VLaW5kKTsKICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFVzZUtp
bmQ+KG1hc2tlZCk7CiAgICAgfQogICAgIHZvaWQgc2V0VXNlS2luZChVc2VLaW5kIHVzZUtpbmQp
CiAgICAgewotICAgICAgICBBU1NFUlQoaXNTZXQoKSk7Ci0gICAgICAgIG1fZW5jb2RlZFdvcmQg
PSBtYWtlV29yZChpbmRleCgpLCB1c2VLaW5kKTsKKyAgICAgICAgQVNTRVJUKG5vZGUoKSk7Cisg
ICAgICAgIG1fZW5jb2RlZFdvcmQgPSBtYWtlV29yZChub2RlKCksIHVzZUtpbmQpOwogICAgIH0K
ICAgICAKLSAgICBib29sIGlzU2V0KCkgY29uc3QgeyByZXR1cm4gaW5kZXhVbmNoZWNrZWQoKSAh
PSBOb05vZGU7IH0KKyAgICBib29sIGlzU2V0KCkgY29uc3QgeyByZXR1cm4gISFub2RlKCk7IH0K
ICAgICAKICAgICB0eXBlZGVmIHZvaWQqIEVkZ2U6OipVbnNwZWNpZmllZEJvb2xUeXBlOwogICAg
IG9wZXJhdG9yIFVuc3BlY2lmaWVkQm9vbFR5cGUqKCkgY29uc3QgeyByZXR1cm4gcmVpbnRlcnBy
ZXRfY2FzdDxVbnNwZWNpZmllZEJvb2xUeXBlKj4oaXNTZXQoKSk7IH0KQEAgLTkyLDM4ICs5MCw0
MSBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICByZXR1cm4gbV9lbmNvZGVkV29yZCAhPSBvdGhl
ci5tX2VuY29kZWRXb3JkOwogICAgIH0KKyAgICAKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0m
KSBjb25zdDsKIAogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgQWRqYWNlbmN5TGlzdDsKICAg
ICAKLSAgICBzdGF0aWMgdWludDMyX3Qgc2hpZnQoKSB7IHJldHVybiA0OyB9CisgICAgc3RhdGlj
IHVpbnQzMl90IHNoaWZ0KCkgeyByZXR1cm4gMjsgfQogICAgIAotICAgIHN0YXRpYyBpbnQzMl90
IG1ha2VXb3JkKE5vZGVJbmRleCBub2RlSW5kZXgsIFVzZUtpbmQgdXNlS2luZCkKKyAgICBzdGF0
aWMgdWludHB0cl90IG1ha2VXb3JkKE5vZGUqIG5vZGUsIFVzZUtpbmQgdXNlS2luZCkKICAgICB7
Ci0gICAgICAgIEFTU0VSVChzdGF0aWNfY2FzdDx1aW50MzJfdD4oKChzdGF0aWNfY2FzdDxpbnQz
Ml90Pihub2RlSW5kZXgpIDw8IHNoaWZ0KCkpID4+IHNoaWZ0KCkpKSA9PSBub2RlSW5kZXgpOwor
ICAgICAgICB1aW50cHRyX3QgdmFsdWUgPSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90Pihub2RlKTsK
KyAgICAgICAgQVNTRVJUKCEodmFsdWUgJiAoKDEgPDwgc2hpZnQoKSkgLSAxKSkpOwogICAgICAg
ICBBU1NFUlQodXNlS2luZCA+PSAwICYmIHVzZUtpbmQgPCBMYXN0VXNlS2luZCk7CiAgICAgICAg
IEFTU0VSVChMYXN0VXNlS2luZCA8PSAoMSA8PCBzaGlmdCgpKSk7Ci0gICAgICAgIHJldHVybiAo
bm9kZUluZGV4IDw8IHNoaWZ0KCkpIHwgdXNlS2luZDsKKyAgICAgICAgcmV0dXJuIHZhbHVlIHwg
c3RhdGljX2Nhc3Q8dWludHB0cl90Pih1c2VLaW5kKTsKICAgICB9CiAgICAgCi0gICAgaW50MzJf
dCBtX2VuY29kZWRXb3JkOworICAgIHVpbnRwdHJfdCBtX2VuY29kZWRXb3JkOwogfTsKIAotaW5s
aW5lIGJvb2wgb3BlcmF0b3I9PShFZGdlIG5vZGVVc2UsIE5vZGVJbmRleCBub2RlSW5kZXgpCitp
bmxpbmUgYm9vbCBvcGVyYXRvcj09KEVkZ2UgZWRnZSwgTm9kZSogbm9kZSkKIHsKLSAgICByZXR1
cm4gbm9kZVVzZS5pbmRleFVuY2hlY2tlZCgpID09IG5vZGVJbmRleDsKKyAgICByZXR1cm4gZWRn
ZS5ub2RlKCkgPT0gbm9kZTsKIH0KLWlubGluZSBib29sIG9wZXJhdG9yPT0oTm9kZUluZGV4IG5v
ZGVJbmRleCwgRWRnZSBub2RlVXNlKQoraW5saW5lIGJvb2wgb3BlcmF0b3I9PShOb2RlKiBub2Rl
LCBFZGdlIGVkZ2UpCiB7Ci0gICAgcmV0dXJuIG5vZGVVc2UuaW5kZXhVbmNoZWNrZWQoKSA9PSBu
b2RlSW5kZXg7CisgICAgcmV0dXJuIGVkZ2Uubm9kZSgpID09IG5vZGU7CiB9Ci1pbmxpbmUgYm9v
bCBvcGVyYXRvciE9KEVkZ2Ugbm9kZVVzZSwgTm9kZUluZGV4IG5vZGVJbmRleCkKK2lubGluZSBi
b29sIG9wZXJhdG9yIT0oRWRnZSBlZGdlLCBOb2RlKiBub2RlKQogewotICAgIHJldHVybiBub2Rl
VXNlLmluZGV4VW5jaGVja2VkKCkgIT0gbm9kZUluZGV4OworICAgIHJldHVybiBlZGdlLm5vZGUo
KSAhPSBub2RlOwogfQotaW5saW5lIGJvb2wgb3BlcmF0b3IhPShOb2RlSW5kZXggbm9kZUluZGV4
LCBFZGdlIG5vZGVVc2UpCitpbmxpbmUgYm9vbCBvcGVyYXRvciE9KE5vZGUqIG5vZGUsIEVkZ2Ug
ZWRnZSkKIHsKLSAgICByZXR1cm4gbm9kZVVzZS5pbmRleFVuY2hlY2tlZCgpICE9IG5vZGVJbmRl
eDsKKyAgICByZXR1cm4gZWRnZS5ub2RlKCkgIT0gbm9kZTsKIH0KIAogfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkRGRwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhh
c2UuY3BwCShyZXZpc2lvbiAxNDA5MDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0ZpeHVwUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTIsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01OCwyMSArNTgsMjEgQEAgcHJpdmF0ZToK
ICAgICAgICAgQVNTRVJUKGJsb2NrLT5pc1JlYWNoYWJsZSk7CiAgICAgICAgIG1fYmxvY2sgPSBi
bG9jazsKICAgICAgICAgZm9yIChtX2luZGV4SW5CbG9jayA9IDA7IG1faW5kZXhJbkJsb2NrIDwg
YmxvY2stPnNpemUoKTsgKyttX2luZGV4SW5CbG9jaykgewotICAgICAgICAgICAgbV9jb21waWxl
SW5kZXggPSBibG9jay0+YXQobV9pbmRleEluQmxvY2spOwotICAgICAgICAgICAgZml4dXBOb2Rl
KG1fZ3JhcGhbbV9jb21waWxlSW5kZXhdKTsKKyAgICAgICAgICAgIG1fY3VycmVudE5vZGUgPSBi
bG9jay0+YXQobV9pbmRleEluQmxvY2spOworICAgICAgICAgICAgZml4dXBOb2RlKG1fY3VycmVu
dE5vZGUpOwogICAgICAgICB9CiAgICAgICAgIG1faW5zZXJ0aW9uU2V0LmV4ZWN1dGUoYmxvY2sp
OwogICAgIH0KICAgICAKLSAgICB2b2lkIGZpeHVwTm9kZShOb2RlJiBub2RlKQorICAgIHZvaWQg
Zml4dXBOb2RlKE5vZGUqIG5vZGUpCiAgICAgewotICAgICAgICBpZiAoIW5vZGUuc2hvdWxkR2Vu
ZXJhdGUoKSkKKyAgICAgICAgaWYgKCFub2RlLT5zaG91bGRHZW5lcmF0ZSgpKQogICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICAKLSAgICAgICAgTm9kZVR5cGUgb3AgPSBub2RlLm9wKCk7Cisg
ICAgICAgIE5vZGVUeXBlIG9wID0gbm9kZS0+b3AoKTsKIAogI2lmIERGR19FTkFCTEUoREVCVUdf
UFJPUEFHQVRJT05fVkVSQk9TRSkKLSAgICAgICAgZGF0YUxvZ0YoIiAgICVzIEAldTogIiwgR3Jh
cGg6Om9wTmFtZShvcCksIG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAgZGF0YUxvZ0YoIiAgICVz
IEAldTogIiwgR3JhcGg6Om9wTmFtZShvcCksIG5vZGUtPmluZGV4KCkpOwogI2VuZGlmCiAgICAg
ICAgIAogICAgICAgICBzd2l0Y2ggKG9wKSB7CkBAIC04MCw4MCArODAsNzEgQEAgcHJpdmF0ZToK
ICAgICAgICAgICAgIGlmIChtX2dyYXBoLm1fZml4cG9pbnRTdGF0ZSA+IEJlZm9yZUZpeHBvaW50
KQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBOb2Rl
KiBub2RlUHRyID0gJm5vZGU7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmICghaXNJbnQz
MlNwZWN1bGF0aW9uKG1fZ3JhcGhbbV9jb21waWxlSW5kZXhdLnByZWRpY3Rpb24oKSkpCisgICAg
ICAgICAgICBpZiAoIWlzSW50MzJTcGVjdWxhdGlvbihub2RlLT5wcmVkaWN0aW9uKCkpKQogICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgaWYgKGNvZGVCbG9jaygpLT5pZGVudGlm
aWVyKG5vZGVQdHItPmlkZW50aWZpZXJOdW1iZXIoKSkgIT0gZ2xvYmFsRGF0YSgpLnByb3BlcnR5
TmFtZXMtPmxlbmd0aCkKKyAgICAgICAgICAgIGlmIChjb2RlQmxvY2soKS0+aWRlbnRpZmllcihu
b2RlLT5pZGVudGlmaWVyTnVtYmVyKCkpICE9IGdsb2JhbERhdGEoKS5wcm9wZXJ0eU5hbWVzLT5s
ZW5ndGgpCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBBcnJheVByb2ZpbGUq
IGFycmF5UHJvZmlsZSA9IAotICAgICAgICAgICAgICAgIG1fZ3JhcGguYmFzZWxpbmVDb2RlQmxv
Y2tGb3Iobm9kZVB0ci0+Y29kZU9yaWdpbiktPmdldEFycmF5UHJvZmlsZSgKLSAgICAgICAgICAg
ICAgICAgICAgbm9kZVB0ci0+Y29kZU9yaWdpbi5ieXRlY29kZUluZGV4KTsKKyAgICAgICAgICAg
ICAgICBtX2dyYXBoLmJhc2VsaW5lQ29kZUJsb2NrRm9yKG5vZGUtPmNvZGVPcmlnaW4pLT5nZXRB
cnJheVByb2ZpbGUoCisgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNvZGVPcmlnaW4uYnl0ZWNv
ZGVJbmRleCk7CiAgICAgICAgICAgICBBcnJheU1vZGUgYXJyYXlNb2RlID0gQXJyYXlNb2RlKEFy
cmF5OjpTZWxlY3RVc2luZ1ByZWRpY3Rpb25zKTsKICAgICAgICAgICAgIGlmIChhcnJheVByb2Zp
bGUpIHsKLSAgICAgICAgICAgICAgICBhcnJheVByb2ZpbGUtPmNvbXB1dGVVcGRhdGVkUHJlZGlj
dGlvbihtX2dyYXBoLmJhc2VsaW5lQ29kZUJsb2NrRm9yKG5vZGUuY29kZU9yaWdpbikpOworICAg
ICAgICAgICAgICAgIGFycmF5UHJvZmlsZS0+Y29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKG1fZ3Jh
cGguYmFzZWxpbmVDb2RlQmxvY2tGb3Iobm9kZS0+Y29kZU9yaWdpbikpOwogICAgICAgICAgICAg
ICAgIGFycmF5TW9kZSA9IEFycmF5TW9kZTo6ZnJvbU9ic2VydmVkKGFycmF5UHJvZmlsZSwgQXJy
YXk6OlJlYWQsIGZhbHNlKTsKICAgICAgICAgICAgICAgICBhcnJheU1vZGUgPSBhcnJheU1vZGUu
cmVmaW5lKAotICAgICAgICAgICAgICAgICAgICBtX2dyYXBoW25vZGUuY2hpbGQxKCldLnByZWRp
Y3Rpb24oKSwKLSAgICAgICAgICAgICAgICAgICAgbV9ncmFwaFttX2NvbXBpbGVJbmRleF0ucHJl
ZGljdGlvbigpKTsKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCktPnByZWRpY3Rp
b24oKSwgbm9kZS0+cHJlZGljdGlvbigpKTsKICAgICAgICAgICAgICAgICBpZiAoYXJyYXlNb2Rl
LnN1cHBvcnRzTGVuZ3RoKCkgJiYgYXJyYXlQcm9maWxlLT5oYXNEZWZpbml0ZVN0cnVjdHVyZSgp
KSB7CiAgICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCiAgICAg
ICAgICAgICAgICAgICAgICAgICBtX2luZGV4SW5CbG9jaywgUmVmQ2hpbGRyZW4sIERvbnRSZWZO
b2RlLCBTcGVjTm9uZSwgQ2hlY2tTdHJ1Y3R1cmUsCi0gICAgICAgICAgICAgICAgICAgICAgICBu
b2RlUHRyLT5jb2RlT3JpZ2luLCBPcEluZm8obV9ncmFwaC5hZGRTdHJ1Y3R1cmVTZXQoYXJyYXlQ
cm9maWxlLT5leHBlY3RlZFN0cnVjdHVyZSgpKSksCi0gICAgICAgICAgICAgICAgICAgICAgICBu
b2RlUHRyLT5jaGlsZDEoKS5pbmRleCgpKTsKLSAgICAgICAgICAgICAgICAgICAgbm9kZVB0ciA9
ICZtX2dyYXBoW21fY29tcGlsZUluZGV4XTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUt
PmNvZGVPcmlnaW4sIE9wSW5mbyhtX2dyYXBoLmFkZFN0cnVjdHVyZVNldChhcnJheVByb2ZpbGUt
PmV4cGVjdGVkU3RydWN0dXJlKCkpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNo
aWxkMSgpLm5vZGUoKSk7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgICAgICBhcnJheU1vZGUgPSBhcnJheU1vZGUucmVmaW5lKAotICAgICAgICAg
ICAgICAgICAgICBtX2dyYXBoW25vZGUuY2hpbGQxKCldLnByZWRpY3Rpb24oKSwKLSAgICAgICAg
ICAgICAgICAgICAgbV9ncmFwaFttX2NvbXBpbGVJbmRleF0ucHJlZGljdGlvbigpKTsKLSAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIGFycmF5TW9kZSA9
IGFycmF5TW9kZS5yZWZpbmUobm9kZS0+Y2hpbGQxKCktPnByZWRpY3Rpb24oKSwgbm9kZS0+cHJl
ZGljdGlvbigpKTsKICAgICAgICAgICAgIGlmICghYXJyYXlNb2RlLnN1cHBvcnRzTGVuZ3RoKCkp
CiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBub2RlUHRyLT5zZXRPcChHZXRB
cnJheUxlbmd0aCk7Ci0gICAgICAgICAgICBBU1NFUlQobm9kZVB0ci0+ZmxhZ3MoKSAmIE5vZGVN
dXN0R2VuZXJhdGUpOwotICAgICAgICAgICAgbm9kZVB0ci0+Y2xlYXJGbGFncyhOb2RlTXVzdEdl
bmVyYXRlIHwgTm9kZUNsb2JiZXJzV29ybGQpOwotICAgICAgICAgICAgbV9ncmFwaC5kZXJlZiht
X2NvbXBpbGVJbmRleCk7Ci0gICAgICAgICAgICBub2RlUHRyLT5zZXRBcnJheU1vZGUoYXJyYXlN
b2RlKTsKKyAgICAgICAgICAgIG5vZGUtPnNldE9wKEdldEFycmF5TGVuZ3RoKTsKKyAgICAgICAg
ICAgIEFTU0VSVChub2RlLT5mbGFncygpICYgTm9kZU11c3RHZW5lcmF0ZSk7CisgICAgICAgICAg
ICBub2RlLT5jbGVhckZsYWdzKE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlQ2xvYmJlcnNXb3JsZCk7
CisgICAgICAgICAgICBtX2dyYXBoLmRlcmVmKG5vZGUpOworICAgICAgICAgICAgbm9kZS0+c2V0
QXJyYXlNb2RlKGFycmF5TW9kZSk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIE5vZGVJbmRl
eCBzdG9yYWdlID0gY2hlY2tBcnJheShhcnJheU1vZGUsIG5vZGVQdHItPmNvZGVPcmlnaW4sIG5v
ZGVQdHItPmNoaWxkMSgpLmluZGV4KCksIE5vTm9kZSwgbGVuZ3RoTmVlZHNTdG9yYWdlLCBub2Rl
UHRyLT5zaG91bGRHZW5lcmF0ZSgpKTsKLSAgICAgICAgICAgIGlmIChzdG9yYWdlID09IE5vTm9k
ZSkKKyAgICAgICAgICAgIE5vZGUqIHN0b3JhZ2UgPSBjaGVja0FycmF5KGFycmF5TW9kZSwgbm9k
ZS0+Y29kZU9yaWdpbiwgbm9kZS0+Y2hpbGQxKCkubm9kZSgpLCAwLCBsZW5ndGhOZWVkc1N0b3Jh
Z2UsIG5vZGUtPnNob3VsZEdlbmVyYXRlKCkpOworICAgICAgICAgICAgaWYgKCFzdG9yYWdlKQog
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBub2RlUHRy
ID0gJm1fZ3JhcGhbbV9jb21waWxlSW5kZXhdOwotICAgICAgICAgICAgbm9kZVB0ci0+Y2hpbGRy
ZW4uY2hpbGQyKCkgPSBFZGdlKHN0b3JhZ2UpOworICAgICAgICAgICAgbm9kZS0+Y2hpbGRyZW4u
Y2hpbGQyKCkgPSBFZGdlKHN0b3JhZ2UpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0K
ICAgICAgICAgY2FzZSBHZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlOiB7Ci0gICAgICAgICAgICBB
U1NFUlQobm9kZS5hcnJheU1vZGUoKS5jYW5DU0VTdG9yYWdlKCkpOworICAgICAgICAgICAgQVNT
RVJUKG5vZGUtPmFycmF5TW9kZSgpLmNhbkNTRVN0b3JhZ2UoKSk7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgfQogICAgICAgICBjYXNlIEdldEJ5VmFsOiB7Ci0gICAgICAgICAgICBub2Rl
LnNldEFycmF5TW9kZSgKLSAgICAgICAgICAgICAgICBub2RlLmFycmF5TW9kZSgpLnJlZmluZSgK
LSAgICAgICAgICAgICAgICAgICAgbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5wcmVkaWN0aW9uKCks
Ci0gICAgICAgICAgICAgICAgICAgIG1fZ3JhcGhbbm9kZS5jaGlsZDIoKV0ucHJlZGljdGlvbigp
LAotICAgICAgICAgICAgICAgICAgICBTcGVjTm9uZSwgbm9kZS5mbGFncygpKSk7CisgICAgICAg
ICAgICBub2RlLT5zZXRBcnJheU1vZGUoCisgICAgICAgICAgICAgICAgbm9kZS0+YXJyYXlNb2Rl
KCkucmVmaW5lKAorICAgICAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDEoKS0+cHJlZGljdGlv
bigpLAorICAgICAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDIoKS0+cHJlZGljdGlvbigpLAor
ICAgICAgICAgICAgICAgICAgICBTcGVjTm9uZSwgbm9kZS0+ZmxhZ3MoKSkpOwogICAgICAgICAg
ICAgCi0gICAgICAgICAgICBibGVzc0FycmF5T3BlcmF0aW9uKG5vZGUuY2hpbGQxKCksIG5vZGUu
Y2hpbGQyKCksIDIpOworICAgICAgICAgICAgYmxlc3NBcnJheU9wZXJhdGlvbihub2RlLT5jaGls
ZDEoKSwgbm9kZS0+Y2hpbGQyKCksIDIpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBOb2Rl
KiBub2RlUHRyID0gJm1fZ3JhcGhbbV9jb21waWxlSW5kZXhdOwotICAgICAgICAgICAgQXJyYXlN
b2RlIGFycmF5TW9kZSA9IG5vZGVQdHItPmFycmF5TW9kZSgpOworICAgICAgICAgICAgQXJyYXlN
b2RlIGFycmF5TW9kZSA9IG5vZGUtPmFycmF5TW9kZSgpOwogICAgICAgICAgICAgaWYgKGFycmF5
TW9kZS50eXBlKCkgPT0gQXJyYXk6OkRvdWJsZQogICAgICAgICAgICAgICAgICYmIGFycmF5TW9k
ZS5hcnJheUNsYXNzKCkgPT0gQXJyYXk6Ok9yaWdpbmFsQXJyYXkKICAgICAgICAgICAgICAgICAm
JiBhcnJheU1vZGUuc3BlY3VsYXRpb24oKSA9PSBBcnJheTo6SW5Cb3VuZHMKICAgICAgICAgICAg
ICAgICAmJiBhcnJheU1vZGUuY29udmVyc2lvbigpID09IEFycmF5OjpBc0lzCi0gICAgICAgICAg
ICAgICAgJiYgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZVB0ci0+Y29kZU9yaWdpbiktPmFy
cmF5UHJvdG90eXBlQ2hhaW5Jc1NhbmUoKQotICAgICAgICAgICAgICAgICYmICEobm9kZVB0ci0+
ZmxhZ3MoKSAmIE5vZGVVc2VkQXNPdGhlcikpCi0gICAgICAgICAgICAgICAgbm9kZVB0ci0+c2V0
QXJyYXlNb2RlKGFycmF5TW9kZS53aXRoU3BlY3VsYXRpb24oQXJyYXk6OlNhbmVDaGFpbikpOwor
ICAgICAgICAgICAgICAgICYmIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPmNvZGVPcmln
aW4pLT5hcnJheVByb3RvdHlwZUNoYWluSXNTYW5lKCkKKyAgICAgICAgICAgICAgICAmJiAhKG5v
ZGUtPmZsYWdzKCkgJiBOb2RlVXNlZEFzT3RoZXIpKQorICAgICAgICAgICAgICAgIG5vZGUtPnNl
dEFycmF5TW9kZShhcnJheU1vZGUud2l0aFNwZWN1bGF0aW9uKEFycmF5OjpTYW5lQ2hhaW4pKTsK
ICAgICAgICAgICAgIAogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2Fz
ZSBTdHJpbmdDaGFyQXQ6CiAgICAgICAgIGNhc2UgU3RyaW5nQ2hhckNvZGVBdDogewogICAgICAg
ICAgICAgLy8gQ3VycmVudGx5IHdlIGhhdmUgbm8gZ29vZCB3YXkgb2YgcmVmaW5pbmcgdGhlc2Uu
Ci0gICAgICAgICAgICBBU1NFUlQobm9kZS5hcnJheU1vZGUoKSA9PSBBcnJheU1vZGUoQXJyYXk6
OlN0cmluZykpOwotICAgICAgICAgICAgYmxlc3NBcnJheU9wZXJhdGlvbihub2RlLmNoaWxkMSgp
LCBub2RlLmNoaWxkMigpLCAyKTsKKyAgICAgICAgICAgIEFTU0VSVChub2RlLT5hcnJheU1vZGUo
KSA9PSBBcnJheU1vZGUoQXJyYXk6OlN0cmluZykpOworICAgICAgICAgICAgYmxlc3NBcnJheU9w
ZXJhdGlvbihub2RlLT5jaGlsZDEoKSwgbm9kZS0+Y2hpbGQyKCksIDIpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIApAQCAtMTY3LDE1ICsxNTgsMTQgQEAgcHJp
dmF0ZToKICAgICAgICAgICAgIC8vIGlnbm9yZWQuIFRoYXQncyBiZWNhdXNlIEFycmF5UHVzaCBj
YW4ndCBoYW5kbGUgYW55IGFycmF5IG1vZGVzIHRoYXQgYXJlbid0CiAgICAgICAgICAgICAvLyBh
cnJheS1yZWxhdGVkIC0gc28gaWYgcmVmaW5lKCkgdHVybmVkIHRoaXMgaW50byBhICJHZW5lcmlj
IiBBcnJheVB1c2ggdGhlbgogICAgICAgICAgICAgLy8gdGhhdCB3b3VsZCBicmVhayB0aGluZ3Mu
Ci0gICAgICAgICAgICBub2RlLnNldEFycmF5TW9kZSgKLSAgICAgICAgICAgICAgICBub2RlLmFy
cmF5TW9kZSgpLnJlZmluZSgKLSAgICAgICAgICAgICAgICAgICAgbV9ncmFwaFtub2RlLmNoaWxk
MSgpXS5wcmVkaWN0aW9uKCkgJiBTcGVjQ2VsbCwKKyAgICAgICAgICAgIG5vZGUtPnNldEFycmF5
TW9kZSgKKyAgICAgICAgICAgICAgICBub2RlLT5hcnJheU1vZGUoKS5yZWZpbmUoCisgICAgICAg
ICAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLT5wcmVkaWN0aW9uKCkgJiBTcGVjQ2VsbCwKICAg
ICAgICAgICAgICAgICAgICAgU3BlY0ludDMyLAotICAgICAgICAgICAgICAgICAgICBtX2dyYXBo
W25vZGUuY2hpbGQyKCldLnByZWRpY3Rpb24oKSkpOwotICAgICAgICAgICAgYmxlc3NBcnJheU9w
ZXJhdGlvbihub2RlLmNoaWxkMSgpLCBFZGdlKCksIDIpOworICAgICAgICAgICAgICAgICAgICBu
b2RlLT5jaGlsZDIoKS0+cHJlZGljdGlvbigpKSk7CisgICAgICAgICAgICBibGVzc0FycmF5T3Bl
cmF0aW9uKG5vZGUtPmNoaWxkMSgpLCBFZGdlKCksIDIpOwogICAgICAgICAgICAgCi0gICAgICAg
ICAgICBOb2RlKiBub2RlUHRyID0gJm1fZ3JhcGhbbV9jb21waWxlSW5kZXhdOwotICAgICAgICAg
ICAgc3dpdGNoIChub2RlUHRyLT5hcnJheU1vZGUoKS50eXBlKCkpIHsKKyAgICAgICAgICAgIHN3
aXRjaCAobm9kZS0+YXJyYXlNb2RlKCkudHlwZSgpKSB7CiAgICAgICAgICAgICBjYXNlIEFycmF5
OjpEb3VibGU6CiAgICAgICAgICAgICAgICAgZml4RG91YmxlRWRnZSgxKTsKICAgICAgICAgICAg
ICAgICBicmVhazsKQEAgLTE4NiwxNSArMTc2LDE1IEBAIHByaXZhdGU6CiAgICAgICAgIH0KICAg
ICAgICAgICAgIAogICAgICAgICBjYXNlIEFycmF5UG9wOiB7Ci0gICAgICAgICAgICBibGVzc0Fy
cmF5T3BlcmF0aW9uKG5vZGUuY2hpbGQxKCksIEVkZ2UoKSwgMSk7CisgICAgICAgICAgICBibGVz
c0FycmF5T3BlcmF0aW9uKG5vZGUtPmNoaWxkMSgpLCBFZGdlKCksIDEpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBjYXNlIFZhbHVlVG9JbnQz
MjogewotICAgICAgICAgICAgaWYgKG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0uc2hvdWxkU3BlY3Vs
YXRlTnVtYmVyKCkKLSAgICAgICAgICAgICAgICAmJiBub2RlLm11c3RHZW5lcmF0ZSgpKSB7Ci0g
ICAgICAgICAgICAgICAgbm9kZS5jbGVhckZsYWdzKE5vZGVNdXN0R2VuZXJhdGUpOwotICAgICAg
ICAgICAgICAgIG1fZ3JhcGguZGVyZWYobV9jb21waWxlSW5kZXgpOworICAgICAgICAgICAgaWYg
KG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVOdW1iZXIoKQorICAgICAgICAgICAgICAg
ICYmIG5vZGUtPm11c3RHZW5lcmF0ZSgpKSB7CisgICAgICAgICAgICAgICAgbm9kZS0+Y2xlYXJG
bGFncyhOb2RlTXVzdEdlbmVyYXRlKTsKKyAgICAgICAgICAgICAgICBtX2dyYXBoLmRlcmVmKG5v
ZGUpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTIw
NSw4ICsxOTUsOCBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIEJpdFJTaGlmdDoKICAgICAgICAg
Y2FzZSBCaXRMU2hpZnQ6CiAgICAgICAgIGNhc2UgQml0VVJTaGlmdDogewotICAgICAgICAgICAg
Zml4SW50RWRnZShub2RlLmNoaWxkcmVuLmNoaWxkMSgpKTsKLSAgICAgICAgICAgIGZpeEludEVk
Z2Uobm9kZS5jaGlsZHJlbi5jaGlsZDIoKSk7CisgICAgICAgICAgICBmaXhJbnRFZGdlKG5vZGUt
PmNoaWxkcmVuLmNoaWxkMSgpKTsKKyAgICAgICAgICAgIGZpeEludEVkZ2Uobm9kZS0+Y2hpbGRy
ZW4uY2hpbGQyKCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAg
IApAQCAtMjE2LDkgKzIwNiw5IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgQ29tcGFyZUdyZWF0
ZXI6CiAgICAgICAgIGNhc2UgQ29tcGFyZUdyZWF0ZXJFcToKICAgICAgICAgY2FzZSBDb21wYXJl
U3RyaWN0RXE6IHsKLSAgICAgICAgICAgIGlmIChOb2RlOjpzaG91bGRTcGVjdWxhdGVJbnRlZ2Vy
KG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0sIG1fZ3JhcGhbbm9kZS5jaGlsZDIoKV0pKQorICAgICAg
ICAgICAgaWYgKE5vZGU6OnNob3VsZFNwZWN1bGF0ZUludGVnZXIobm9kZS0+Y2hpbGQxKCkubm9k
ZSgpLCBub2RlLT5jaGlsZDIoKS5ub2RlKCkpKQogICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgaWYgKCFOb2RlOjpzaG91bGRTcGVjdWxhdGVOdW1iZXIobV9ncmFwaFtub2RlLmNo
aWxkMSgpXSwgbV9ncmFwaFtub2RlLmNoaWxkMigpXSkpCisgICAgICAgICAgICBpZiAoIU5vZGU6
OnNob3VsZFNwZWN1bGF0ZU51bWJlcihub2RlLT5jaGlsZDEoKS5ub2RlKCksIG5vZGUtPmNoaWxk
MigpLm5vZGUoKSkpCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBmaXhEb3Vi
bGVFZGdlKDApOwogICAgICAgICAgICAgZml4RG91YmxlRWRnZSgxKTsKQEAgLTIyNiw0MyArMjE2
LDQxIEBAIHByaXZhdGU6CiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBjYXNlIExv
Z2ljYWxOb3Q6IHsKLSAgICAgICAgICAgIGlmIChtX2dyYXBoW25vZGUuY2hpbGQxKCldLnNob3Vs
ZFNwZWN1bGF0ZUludGVnZXIoKSkKKyAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS0+c2hv
dWxkU3BlY3VsYXRlSW50ZWdlcigpKQogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgaWYgKCFtX2dyYXBoW25vZGUuY2hpbGQxKCldLnNob3VsZFNwZWN1bGF0ZU51bWJlcigpKQor
ICAgICAgICAgICAgaWYgKCFub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlTnVtYmVyKCkp
CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBmaXhEb3VibGVFZGdlKDApOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBjYXNl
IEJyYW5jaDogewotICAgICAgICAgICAgaWYgKCFtX2dyYXBoW25vZGUuY2hpbGQxKCldLnNob3Vs
ZFNwZWN1bGF0ZUludGVnZXIoKQotICAgICAgICAgICAgICAgICYmIG1fZ3JhcGhbbm9kZS5jaGls
ZDEoKV0uc2hvdWxkU3BlY3VsYXRlTnVtYmVyKCkpCisgICAgICAgICAgICBpZiAoIW5vZGUtPmNo
aWxkMSgpLT5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkKKyAgICAgICAgICAgICAgICAmJiBub2Rl
LT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlTnVtYmVyKCkpCiAgICAgICAgICAgICAgICAgZml4
RG91YmxlRWRnZSgwKTsKIAotICAgICAgICAgICAgTm9kZSYgbXlOb2RlID0gbV9ncmFwaFttX2Nv
bXBpbGVJbmRleF07IC8vIHJlbG9hZCBiZWNhdXNlIHRoZSBncmFwaCBtYXkgaGF2ZSBjaGFuZ2Vk
Ci0gICAgICAgICAgICBFZGdlIGxvZ2ljYWxOb3RFZGdlID0gbXlOb2RlLmNoaWxkMSgpOwotICAg
ICAgICAgICAgTm9kZSYgbG9naWNhbE5vdCA9IG1fZ3JhcGhbbG9naWNhbE5vdEVkZ2VdOwotICAg
ICAgICAgICAgaWYgKGxvZ2ljYWxOb3Qub3AoKSA9PSBMb2dpY2FsTm90Ci0gICAgICAgICAgICAg
ICAgJiYgbG9naWNhbE5vdC5hZGp1c3RlZFJlZkNvdW50KCkgPT0gMSkgewotICAgICAgICAgICAg
ICAgIEVkZ2UgbmV3Q2hpbGRFZGdlID0gbG9naWNhbE5vdC5jaGlsZDEoKTsKLSAgICAgICAgICAg
ICAgICBpZiAobV9ncmFwaFtuZXdDaGlsZEVkZ2VdLmhhc0Jvb2xlYW5SZXN1bHQoKSkgeworICAg
ICAgICAgICAgTm9kZSogbG9naWNhbE5vdCA9IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKKyAgICAg
ICAgICAgIGlmIChsb2dpY2FsTm90LT5vcCgpID09IExvZ2ljYWxOb3QKKyAgICAgICAgICAgICAg
ICAmJiBsb2dpY2FsTm90LT5hZGp1c3RlZFJlZkNvdW50KCkgPT0gMSkgeworICAgICAgICAgICAg
ICAgIEVkZ2UgbmV3Q2hpbGRFZGdlID0gbG9naWNhbE5vdC0+Y2hpbGQxKCk7CisgICAgICAgICAg
ICAgICAgaWYgKG5ld0NoaWxkRWRnZS0+aGFzQm9vbGVhblJlc3VsdCgpKSB7CiAgICAgICAgICAg
ICAgICAgICAgIG1fZ3JhcGgucmVmKG5ld0NoaWxkRWRnZSk7Ci0gICAgICAgICAgICAgICAgICAg
IG1fZ3JhcGguZGVyZWYobG9naWNhbE5vdEVkZ2UpOwotICAgICAgICAgICAgICAgICAgICBteU5v
ZGUuY2hpbGRyZW4uc2V0Q2hpbGQxKG5ld0NoaWxkRWRnZSk7CisgICAgICAgICAgICAgICAgICAg
IG1fZ3JhcGguZGVyZWYobG9naWNhbE5vdCk7CisgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNo
aWxkcmVuLnNldENoaWxkMShuZXdDaGlsZEVkZ2UpOwogICAgICAgICAgICAgICAgICAgICAKLSAg
ICAgICAgICAgICAgICAgICAgQmxvY2tJbmRleCB0b0JlVGFrZW4gPSBteU5vZGUubm90VGFrZW5C
bG9ja0luZGV4KCk7Ci0gICAgICAgICAgICAgICAgICAgIEJsb2NrSW5kZXggdG9CZU5vdFRha2Vu
ID0gbXlOb2RlLnRha2VuQmxvY2tJbmRleCgpOwotICAgICAgICAgICAgICAgICAgICBteU5vZGUu
c2V0VGFrZW5CbG9ja0luZGV4KHRvQmVUYWtlbik7Ci0gICAgICAgICAgICAgICAgICAgIG15Tm9k
ZS5zZXROb3RUYWtlbkJsb2NrSW5kZXgodG9CZU5vdFRha2VuKTsKKyAgICAgICAgICAgICAgICAg
ICAgQmxvY2tJbmRleCB0b0JlVGFrZW4gPSBub2RlLT5ub3RUYWtlbkJsb2NrSW5kZXgoKTsKKyAg
ICAgICAgICAgICAgICAgICAgQmxvY2tJbmRleCB0b0JlTm90VGFrZW4gPSBub2RlLT50YWtlbkJs
b2NrSW5kZXgoKTsKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+c2V0VGFrZW5CbG9ja0luZGV4
KHRvQmVUYWtlbik7CisgICAgICAgICAgICAgICAgICAgIG5vZGUtPnNldE5vdFRha2VuQmxvY2tJ
bmRleCh0b0JlTm90VGFrZW4pOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBT
ZXRMb2NhbDogewotICAgICAgICAgICAgaWYgKG5vZGUudmFyaWFibGVBY2Nlc3NEYXRhKCktPmlz
Q2FwdHVyZWQoKSkKKyAgICAgICAgICAgIGlmIChub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+
aXNDYXB0dXJlZCgpKQogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgaWYgKCFu
b2RlLnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5zaG91bGRVc2VEb3VibGVGb3JtYXQoKSkKKyAgICAg
ICAgICAgIGlmICghbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCktPnNob3VsZFVzZURvdWJsZUZv
cm1hdCgpKQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgZml4RG91YmxlRWRn
ZSgwKTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMjcyLDcgKzI2MCw3IEBAIHByaXZhdGU6CiAg
ICAgICAgIGNhc2UgVmFsdWVBZGQ6IHsKICAgICAgICAgICAgIGlmIChtX2dyYXBoLmFkZFNob3Vs
ZFNwZWN1bGF0ZUludGVnZXIobm9kZSkpCiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICBpZiAoIU5vZGU6OnNob3VsZFNwZWN1bGF0ZU51bWJlckV4cGVjdGluZ0RlZmluZWQobV9n
cmFwaFtub2RlLmNoaWxkMSgpXSwgbV9ncmFwaFtub2RlLmNoaWxkMigpXSkpCisgICAgICAgICAg
ICBpZiAoIU5vZGU6OnNob3VsZFNwZWN1bGF0ZU51bWJlckV4cGVjdGluZ0RlZmluZWQobm9kZS0+
Y2hpbGQxKCkubm9kZSgpLCBub2RlLT5jaGlsZDIoKS5ub2RlKCkpKQogICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgZml4RG91YmxlRWRnZSgwKTsKICAgICAgICAgICAgIGZpeERv
dWJsZUVkZ2UoMSk7CkBAIC0yODEsNyArMjY5LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIAog
ICAgICAgICBjYXNlIEFyaXRoU3ViOiB7CiAgICAgICAgICAgICBpZiAobV9ncmFwaC5hZGRTaG91
bGRTcGVjdWxhdGVJbnRlZ2VyKG5vZGUpCi0gICAgICAgICAgICAgICAgJiYgbm9kZS5jYW5TcGVj
dWxhdGVJbnRlZ2VyKCkpCisgICAgICAgICAgICAgICAgJiYgbm9kZS0+Y2FuU3BlY3VsYXRlSW50
ZWdlcigpKQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgZml4RG91YmxlRWRn
ZSgwKTsKICAgICAgICAgICAgIGZpeERvdWJsZUVkZ2UoMSk7CkBAIC0yOTgsOCArMjg2LDggQEAg
cHJpdmF0ZToKICAgICAgICAgY2FzZSBBcml0aE1pbjoKICAgICAgICAgY2FzZSBBcml0aE1heDoK
ICAgICAgICAgY2FzZSBBcml0aE1vZDogewotICAgICAgICAgICAgaWYgKE5vZGU6OnNob3VsZFNw
ZWN1bGF0ZUludGVnZXJGb3JBcml0aG1ldGljKG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0sIG1fZ3Jh
cGhbbm9kZS5jaGlsZDIoKV0pCi0gICAgICAgICAgICAgICAgJiYgbm9kZS5jYW5TcGVjdWxhdGVJ
bnRlZ2VyKCkpCisgICAgICAgICAgICBpZiAoTm9kZTo6c2hvdWxkU3BlY3VsYXRlSW50ZWdlckZv
ckFyaXRobWV0aWMobm9kZS0+Y2hpbGQxKCkubm9kZSgpLCBub2RlLT5jaGlsZDIoKS5ub2RlKCkp
CisgICAgICAgICAgICAgICAgJiYgbm9kZS0+Y2FuU3BlY3VsYXRlSW50ZWdlcigpKQogICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgZml4RG91YmxlRWRnZSgwKTsKICAgICAgICAg
ICAgIGZpeERvdWJsZUVkZ2UoMSk7CkBAIC0zMTUsOCArMzAzLDggQEAgcHJpdmF0ZToKICAgICAg
ICAgfQogCiAgICAgICAgIGNhc2UgQXJpdGhEaXY6IHsKLSAgICAgICAgICAgIGlmIChOb2RlOjpz
aG91bGRTcGVjdWxhdGVJbnRlZ2VyRm9yQXJpdGhtZXRpYyhtX2dyYXBoW25vZGUuY2hpbGQxKCld
LCBtX2dyYXBoW25vZGUuY2hpbGQyKCldKQotICAgICAgICAgICAgICAgICYmIG5vZGUuY2FuU3Bl
Y3VsYXRlSW50ZWdlcigpKSB7CisgICAgICAgICAgICBpZiAoTm9kZTo6c2hvdWxkU3BlY3VsYXRl
SW50ZWdlckZvckFyaXRobWV0aWMobm9kZS0+Y2hpbGQxKCkubm9kZSgpLCBub2RlLT5jaGlsZDIo
KS5ub2RlKCkpCisgICAgICAgICAgICAgICAgJiYgbm9kZS0+Y2FuU3BlY3VsYXRlSW50ZWdlcigp
KSB7CiAgICAgICAgICAgICAgICAgaWYgKGlzWDg2KCkpCiAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgICAgIGluamVjdEludDMyVG9Eb3VibGVOb2RlKDApOwpAQCAtMzI0
LDEyICszMTIsMTEgQEAgcHJpdmF0ZToKIAogICAgICAgICAgICAgICAgIC8vIFdlIGRvbid0IG5l
ZWQgdG8gZG8gcmVmJ2luZyBvbiB0aGUgY2hpbGRyZW4gYmVjYXVzZSB3ZSdyZSBzdGVhbGluZyB0
aGVtIGZyb20KICAgICAgICAgICAgICAgICAvLyB0aGUgb3JpZ2luYWwgZGl2aXNpb24uCi0gICAg
ICAgICAgICAgICAgTm9kZUluZGV4IG5ld0RpdmlzaW9uSW5kZXggPSBtX2luc2VydGlvblNldC5p
bnNlcnROb2RlKAotICAgICAgICAgICAgICAgICAgICBtX2luZGV4SW5CbG9jaywgRG9udFJlZkNo
aWxkcmVuLCBSZWZOb2RlLCBTcGVjRG91YmxlLCBtX2dyYXBoW21fY29tcGlsZUluZGV4XSk7Ci0g
ICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgbV9ncmFwaFttX2NvbXBpbGVJbmRleF0u
c2V0T3AoRG91YmxlQXNJbnQzMik7Ci0gICAgICAgICAgICAgICAgbV9ncmFwaFttX2NvbXBpbGVJ
bmRleF0uY2hpbGRyZW4uaW5pdGlhbGl6ZShFZGdlKG5ld0RpdmlzaW9uSW5kZXgsIERvdWJsZVVz
ZSksIEVkZ2UoKSwgRWRnZSgpKTsKKyAgICAgICAgICAgICAgICBOb2RlKiBuZXdEaXZpc2lvbiA9
IG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCisgICAgICAgICAgICAgICAgICAgIG1faW5kZXhJ
bkJsb2NrLCBEb250UmVmQ2hpbGRyZW4sIFJlZk5vZGUsIFNwZWNEb3VibGUsICpub2RlKTsKICAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBub2RlLT5zZXRPcChEb3VibGVBc0ludDMy
KTsKKyAgICAgICAgICAgICAgICBub2RlLT5jaGlsZHJlbi5pbml0aWFsaXplKEVkZ2UobmV3RGl2
aXNpb24sIERvdWJsZVVzZSksIEVkZ2UoKSwgRWRnZSgpKTsKICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGZpeERvdWJsZUVkZ2UoMCk7CkBAIC0zMzgs
OCArMzI1LDggQEAgcHJpdmF0ZToKICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgIGNh
c2UgQXJpdGhBYnM6IHsKLSAgICAgICAgICAgIGlmIChtX2dyYXBoW25vZGUuY2hpbGQxKCldLnNo
b3VsZFNwZWN1bGF0ZUludGVnZXJGb3JBcml0aG1ldGljKCkKLSAgICAgICAgICAgICAgICAmJiBu
b2RlLmNhblNwZWN1bGF0ZUludGVnZXIoKSkKKyAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEo
KS0+c2hvdWxkU3BlY3VsYXRlSW50ZWdlckZvckFyaXRobWV0aWMoKQorICAgICAgICAgICAgICAg
ICYmIG5vZGUtPmNhblNwZWN1bGF0ZUludGVnZXIoKSkKICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgIGZpeERvdWJsZUVkZ2UoMCk7CiAgICAgICAgICAgICBicmVhazsKQEAgLTM1
NiwxNyArMzQzLDE1IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBFZGdlIGNoaWxkMiA9IG1fZ3Jh
cGgudmFyQXJnQ2hpbGQobm9kZSwgMSk7CiAgICAgICAgICAgICBFZGdlIGNoaWxkMyA9IG1fZ3Jh
cGgudmFyQXJnQ2hpbGQobm9kZSwgMik7CiAKLSAgICAgICAgICAgIG5vZGUuc2V0QXJyYXlNb2Rl
KAotICAgICAgICAgICAgICAgIG5vZGUuYXJyYXlNb2RlKCkucmVmaW5lKAotICAgICAgICAgICAg
ICAgICAgICBtX2dyYXBoW2NoaWxkMV0ucHJlZGljdGlvbigpLAotICAgICAgICAgICAgICAgICAg
ICBtX2dyYXBoW2NoaWxkMl0ucHJlZGljdGlvbigpLAotICAgICAgICAgICAgICAgICAgICBtX2dy
YXBoW2NoaWxkM10ucHJlZGljdGlvbigpKSk7CisgICAgICAgICAgICBub2RlLT5zZXRBcnJheU1v
ZGUoCisgICAgICAgICAgICAgICAgbm9kZS0+YXJyYXlNb2RlKCkucmVmaW5lKAorICAgICAgICAg
ICAgICAgICAgICBjaGlsZDEtPnByZWRpY3Rpb24oKSwKKyAgICAgICAgICAgICAgICAgICAgY2hp
bGQyLT5wcmVkaWN0aW9uKCksCisgICAgICAgICAgICAgICAgICAgIGNoaWxkMy0+cHJlZGljdGlv
bigpKSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGJsZXNzQXJyYXlPcGVyYXRpb24oY2hp
bGQxLCBjaGlsZDIsIDMpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBOb2RlKiBub2RlUHRy
ID0gJm1fZ3JhcGhbbV9jb21waWxlSW5kZXhdOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBz
d2l0Y2ggKG5vZGVQdHItPmFycmF5TW9kZSgpLm1vZGVGb3JQdXQoKS50eXBlKCkpIHsKKyAgICAg
ICAgICAgIHN3aXRjaCAobm9kZS0+YXJyYXlNb2RlKCkubW9kZUZvclB1dCgpLnR5cGUoKSkgewog
ICAgICAgICAgICAgY2FzZSBBcnJheTo6RG91YmxlOgogICAgICAgICAgICAgICAgIGZpeERvdWJs
ZUVkZ2UoMik7CiAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0zNzcsNyArMzYyLDcgQEAgcHJp
dmF0ZToKICAgICAgICAgICAgIGNhc2UgQXJyYXk6OlVpbnQ4Q2xhbXBlZEFycmF5OgogICAgICAg
ICAgICAgY2FzZSBBcnJheTo6VWludDE2QXJyYXk6CiAgICAgICAgICAgICBjYXNlIEFycmF5OjpV
aW50MzJBcnJheToKLSAgICAgICAgICAgICAgICBpZiAoIW1fZ3JhcGhbY2hpbGQzXS5zaG91bGRT
cGVjdWxhdGVJbnRlZ2VyKCkpCisgICAgICAgICAgICAgICAgaWYgKCFjaGlsZDMtPnNob3VsZFNw
ZWN1bGF0ZUludGVnZXIoKSkKICAgICAgICAgICAgICAgICAgICAgZml4RG91YmxlRWRnZSgyKTsK
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgQXJyYXk6OkZsb2F0MzJB
cnJheToKQEAgLTM5MiwxMSArMzc3LDExIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAKICAgICAg
ICAgY2FzZSBOZXdBcnJheTogewogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9ncmFw
aC52YXJBcmdOdW1DaGlsZHJlbihub2RlKTsgaS0tOykgewotICAgICAgICAgICAgICAgIG5vZGUu
c2V0SW5kZXhpbmdUeXBlKAorICAgICAgICAgICAgICAgIG5vZGUtPnNldEluZGV4aW5nVHlwZSgK
ICAgICAgICAgICAgICAgICAgICAgbGVhc3RVcHBlckJvdW5kT2ZJbmRleGluZ1R5cGVBbmRUeXBl
KAotICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS5pbmRleGluZ1R5cGUoKSwgbV9ncmFwaFtt
X2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIGkpXS5wcmVkaWN0aW9uKCkpKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIG5vZGUtPmluZGV4aW5nVHlwZSgpLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5v
ZGUsIGkpLT5wcmVkaWN0aW9uKCkpKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChu
b2RlLmluZGV4aW5nVHlwZSgpID09IEFycmF5V2l0aERvdWJsZSkgeworICAgICAgICAgICAgaWYg
KG5vZGUtPmluZGV4aW5nVHlwZSgpID09IEFycmF5V2l0aERvdWJsZSkgewogICAgICAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IG1fZ3JhcGgudmFyQXJnTnVtQ2hpbGRyZW4obm9kZSk7IGkt
LTspCiAgICAgICAgICAgICAgICAgICAgIGZpeERvdWJsZUVkZ2UoaSk7CiAgICAgICAgICAgICB9
CkBAIC00MDgsMTYgKzM5MywxNSBAQCBwcml2YXRlOgogICAgICAgICB9CiAKICNpZiBERkdfRU5B
QkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCi0gICAgICAgIE5vZGUqIG5vZGVQdHIgPSAm
bV9ncmFwaFttX2NvbXBpbGVJbmRleF07Ci0gICAgICAgIGlmICghKG5vZGVQdHItPmZsYWdzKCkg
JiBOb2RlSGFzVmFyQXJncykpIHsKKyAgICAgICAgaWYgKCEobm9kZS0+ZmxhZ3MoKSAmIE5vZGVI
YXNWYXJBcmdzKSkgewogICAgICAgICAgICAgZGF0YUxvZ0YoIm5ldyBjaGlsZHJlbjogIik7Ci0g
ICAgICAgICAgICBub2RlUHRyLT5kdW1wQ2hpbGRyZW4oV1RGOjpkYXRhRmlsZSgpKTsKKyAgICAg
ICAgICAgIG5vZGUtPmR1bXBDaGlsZHJlbihXVEY6OmRhdGFGaWxlKCkpOwogICAgICAgICB9CiAg
ICAgICAgIGRhdGFMb2dGKCJcbiIpOwogI2VuZGlmCiAgICAgfQogICAgIAotICAgIE5vZGVJbmRl
eCBjaGVja0FycmF5KEFycmF5TW9kZSBhcnJheU1vZGUsIENvZGVPcmlnaW4gY29kZU9yaWdpbiwg
Tm9kZUluZGV4IGFycmF5LCBOb2RlSW5kZXggaW5kZXgsIGJvb2wgKCpzdG9yYWdlQ2hlY2spKGNv
bnN0IEFycmF5TW9kZSYpID0gY2FuQ1NFU3RvcmFnZSwgYm9vbCBzaG91bGRHZW5lcmF0ZSA9IHRy
dWUpCisgICAgTm9kZSogY2hlY2tBcnJheShBcnJheU1vZGUgYXJyYXlNb2RlLCBDb2RlT3JpZ2lu
IGNvZGVPcmlnaW4sIE5vZGUqIGFycmF5LCBOb2RlKiBpbmRleCwgYm9vbCAoKnN0b3JhZ2VDaGVj
aykoY29uc3QgQXJyYXlNb2RlJikgPSBjYW5DU0VTdG9yYWdlLCBib29sIHNob3VsZEdlbmVyYXRl
ID0gdHJ1ZSkKICAgICB7CiAgICAgICAgIEFTU0VSVChhcnJheU1vZGUuaXNTcGVjaWZpYygpKTsK
ICAgICAgICAgCkBAIC00MjgsMTEgKzQxMiwxMSBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAg
IGlmIChtX2luZGV4SW5CbG9jayA+IDApIHsKICAgICAgICAgICAgICAgICAgICAgLy8gSWYgdGhl
IHByZXZpb3VzIG5vZGUgd2FzIGEgQ2hlY2tTdHJ1Y3R1cmUgaW5zZXJ0ZWQgYmVjYXVzZSBvZiBz
dHVmZgogICAgICAgICAgICAgICAgICAgICAvLyB0aGF0IHRoZSBhcnJheSBwcm9maWxlIHRvbGQg
dXMsIHRoZW4gcmVtb3ZlIGl0LgotICAgICAgICAgICAgICAgICAgICBOb2RlJiBwcmV2aW91c05v
ZGUgPSBtX2dyYXBoW21fYmxvY2stPmF0KG1faW5kZXhJbkJsb2NrIC0gMSldOwotICAgICAgICAg
ICAgICAgICAgICBpZiAocHJldmlvdXNOb2RlLm9wKCkgPT0gQ2hlY2tTdHJ1Y3R1cmUKLSAgICAg
ICAgICAgICAgICAgICAgICAgICYmIHByZXZpb3VzTm9kZS5jaGlsZDEoKSA9PSBhcnJheQotICAg
ICAgICAgICAgICAgICAgICAgICAgJiYgcHJldmlvdXNOb2RlLmNvZGVPcmlnaW4gPT0gY29kZU9y
aWdpbikKLSAgICAgICAgICAgICAgICAgICAgICAgIHByZXZpb3VzTm9kZS5zZXRPcEFuZERlZmF1
bHRGbGFncyhQaGFudG9tKTsKKyAgICAgICAgICAgICAgICAgICAgTm9kZSogcHJldmlvdXNOb2Rl
ID0gbV9ibG9jay0+YXQobV9pbmRleEluQmxvY2sgLSAxKTsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKHByZXZpb3VzTm9kZS0+b3AoKSA9PSBDaGVja1N0cnVjdHVyZQorICAgICAgICAgICAgICAg
ICAgICAgICAgJiYgcHJldmlvdXNOb2RlLT5jaGlsZDEoKSA9PSBhcnJheQorICAgICAgICAgICAg
ICAgICAgICAgICAgJiYgcHJldmlvdXNOb2RlLT5jb2RlT3JpZ2luID09IGNvZGVPcmlnaW4pCisg
ICAgICAgICAgICAgICAgICAgICAgICBwcmV2aW91c05vZGUtPnNldE9wQW5kRGVmYXVsdEZsYWdz
KFBoYW50b20pOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKICAgICAgICAg
ICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKApAQCAtNDU2LDcgKzQ0MCw3IEBAIHBy
aXZhdGU6CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIGlmICghc3RvcmFnZUNoZWNrKGFy
cmF5TW9kZSkpCi0gICAgICAgICAgICByZXR1cm4gTm9Ob2RlOworICAgICAgICAgICAgcmV0dXJu
IDA7CiAgICAgICAgIAogICAgICAgICBpZiAoYXJyYXlNb2RlLnVzZXNCdXR0ZXJmbHkoKSkgewog
ICAgICAgICAgICAgcmV0dXJuIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCkBAIC00NzcsMTQg
KzQ2MSwxNCBAQCBwcml2YXRlOgogICAgIHsKICAgICAgICAgaWYgKG1fZ3JhcGgubV9maXhwb2lu
dFN0YXRlID4gQmVmb3JlRml4cG9pbnQpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAg
ICAKLSAgICAgICAgTm9kZSogbm9kZVB0ciA9ICZtX2dyYXBoW21fY29tcGlsZUluZGV4XTsKICAg
ICAgICAgCi0gICAgICAgIHN3aXRjaCAobm9kZVB0ci0+YXJyYXlNb2RlKCkudHlwZSgpKSB7Cisg
ICAgICAgIE5vZGUqIG5vZGUgPSBtX2N1cnJlbnROb2RlOworICAgICAgICAKKyAgICAgICAgc3dp
dGNoIChub2RlLT5hcnJheU1vZGUoKS50eXBlKCkpIHsKICAgICAgICAgY2FzZSBBcnJheTo6Rm9y
Y2VFeGl0OiB7CiAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAogICAgICAg
ICAgICAgICAgIG1faW5kZXhJbkJsb2NrLCBEb250UmVmQ2hpbGRyZW4sIERvbnRSZWZOb2RlLCBT
cGVjTm9uZSwgRm9yY2VPU1JFeGl0LAotICAgICAgICAgICAgICAgIG5vZGVQdHItPmNvZGVPcmln
aW4pOworICAgICAgICAgICAgICAgIG5vZGUtPmNvZGVPcmlnaW4pOwogICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICB9CiAgICAgICAgICAgICAKQEAgLTQ5NywyNiArNDgxLDI2IEBAIHByaXZh
dGU6CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAKICAgICAgICAgZGVmYXVsdDog
ewotICAgICAgICAgICAgTm9kZUluZGV4IHN0b3JhZ2UgPSBjaGVja0FycmF5KG5vZGVQdHItPmFy
cmF5TW9kZSgpLCBub2RlUHRyLT5jb2RlT3JpZ2luLCBiYXNlLmluZGV4KCksIGluZGV4LmluZGV4
VW5jaGVja2VkKCkpOwotICAgICAgICAgICAgaWYgKHN0b3JhZ2UgPT0gTm9Ob2RlKQorICAgICAg
ICAgICAgTm9kZSogc3RvcmFnZSA9IGNoZWNrQXJyYXkobm9kZS0+YXJyYXlNb2RlKCksIG5vZGUt
PmNvZGVPcmlnaW4sIGJhc2Uubm9kZSgpLCBpbmRleC5ub2RlKCkpOworICAgICAgICAgICAgaWYg
KCFzdG9yYWdlKQogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIAotICAgICAg
ICAgICAgbV9ncmFwaC5jaGlsZChtX2dyYXBoW21fY29tcGlsZUluZGV4XSwgc3RvcmFnZUNoaWxk
SWR4KSA9IEVkZ2Uoc3RvcmFnZSk7CisgICAgICAgICAgICBtX2dyYXBoLmNoaWxkKG5vZGUsIHN0
b3JhZ2VDaGlsZElkeCkgPSBFZGdlKHN0b3JhZ2UpOwogICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICB9IH0KICAgICB9CiAgICAgCiAgICAgdm9pZCBmaXhJbnRFZGdlKEVkZ2UmIGVkZ2UpCiAg
ICAgewotICAgICAgICBOb2RlJiBub2RlID0gbV9ncmFwaFtlZGdlXTsKLSAgICAgICAgaWYgKG5v
ZGUub3AoKSAhPSBWYWx1ZVRvSW50MzIpCisgICAgICAgIE5vZGUqIG5vZGUgPSBlZGdlLm5vZGUo
KTsKKyAgICAgICAgaWYgKG5vZGUtPm9wKCkgIT0gVmFsdWVUb0ludDMyKQogICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICAKLSAgICAgICAgaWYgKCFtX2dyYXBoW25vZGUuY2hpbGQxKCldLnNo
b3VsZFNwZWN1bGF0ZUludGVnZXIoKSkKKyAgICAgICAgaWYgKCFub2RlLT5jaGlsZDEoKS0+c2hv
dWxkU3BlY3VsYXRlSW50ZWdlcigpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAKICAg
ICAgICAgRWRnZSBvbGRFZGdlID0gZWRnZTsKLSAgICAgICAgRWRnZSBuZXdFZGdlID0gbm9kZS5j
aGlsZDEoKTsKKyAgICAgICAgRWRnZSBuZXdFZGdlID0gbm9kZS0+Y2hpbGQxKCk7CiAgICAgICAg
IAogICAgICAgICBtX2dyYXBoLnJlZihuZXdFZGdlKTsKICAgICAgICAgbV9ncmFwaC5kZXJlZihv
bGRFZGdlKTsKQEAgLTUyNiwxMCArNTEwLDEwIEBAIHByaXZhdGU6CiAgICAgCiAgICAgdm9pZCBm
aXhEb3VibGVFZGdlKHVuc2lnbmVkIGNoaWxkSW5kZXgpCiAgICAgewotICAgICAgICBOb2RlJiBz
b3VyY2UgPSBtX2dyYXBoW21fY29tcGlsZUluZGV4XTsKKyAgICAgICAgTm9kZSogc291cmNlID0g
bV9jdXJyZW50Tm9kZTsKICAgICAgICAgRWRnZSYgZWRnZSA9IG1fZ3JhcGguY2hpbGQoc291cmNl
LCBjaGlsZEluZGV4KTsKICAgICAgICAgCi0gICAgICAgIGlmIChtX2dyYXBoW2VkZ2VdLnByZWRp
Y3Rpb24oKSAmIFNwZWNEb3VibGUpIHsKKyAgICAgICAgaWYgKGVkZ2UtPnByZWRpY3Rpb24oKSAm
IFNwZWNEb3VibGUpIHsKICAgICAgICAgICAgIGVkZ2Uuc2V0VXNlS2luZChEb3VibGVVc2UpOwog
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CkBAIC01MzksMjMgKzUyMywyMiBAQCBwcml2
YXRlOgogCiAgICAgdm9pZCBpbmplY3RJbnQzMlRvRG91YmxlTm9kZSh1bnNpZ25lZCBjaGlsZElu
ZGV4KQogICAgIHsKLSAgICAgICAgTm9kZUluZGV4IHJlc3VsdEluZGV4ID0gbV9pbnNlcnRpb25T
ZXQuaW5zZXJ0Tm9kZSgKKyAgICAgICAgTm9kZSogcmVzdWx0ID0gbV9pbnNlcnRpb25TZXQuaW5z
ZXJ0Tm9kZSgKICAgICAgICAgICAgIG1faW5kZXhJbkJsb2NrLCBEb250UmVmQ2hpbGRyZW4sIFJl
Zk5vZGUsIFNwZWNEb3VibGUsIEludDMyVG9Eb3VibGUsCi0gICAgICAgICAgICBtX2dyYXBoW21f
Y29tcGlsZUluZGV4XS5jb2RlT3JpZ2luLAotICAgICAgICAgICAgbV9ncmFwaC5jaGlsZChtX2dy
YXBoW21fY29tcGlsZUluZGV4XSwgY2hpbGRJbmRleCkuaW5kZXgoKSk7CisgICAgICAgICAgICBt
X2N1cnJlbnROb2RlLT5jb2RlT3JpZ2luLCBtX2dyYXBoLmNoaWxkKG1fY3VycmVudE5vZGUsIGNo
aWxkSW5kZXgpLm5vZGUoKSk7CiAgICAgICAgIAogI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFH
QVRJT05fVkVSQk9TRSkKICAgICAgICAgZGF0YUxvZ0YoCiAgICAgICAgICAgICAiKHJlcGxhY2lu
ZyBAJXUtPkAldSB3aXRoIEAldS0+QCV1KSAiLAotICAgICAgICAgICAgbV9jb21waWxlSW5kZXgs
IG1fZ3JhcGguY2hpbGQobV9ncmFwaFttX2NvbXBpbGVJbmRleF0sIGNoaWxkSW5kZXgpLmluZGV4
KCksIG1fY29tcGlsZUluZGV4LCByZXN1bHRJbmRleCk7CisgICAgICAgICAgICBtX2N1cnJlbnRO
b2RlLT5pbmRleCgpLCBtX2dyYXBoLmNoaWxkKG1fY3VycmVudE5vZGUsIGNoaWxkSW5kZXgpLT5p
bmRleCgpLCBtX2N1cnJlbnROb2RlLT5pbmRleCgpLCByZXN1bHQtPmluZGV4KCkpOwogI2VuZGlm
CiAKLSAgICAgICAgbV9ncmFwaC5jaGlsZChtX2dyYXBoW21fY29tcGlsZUluZGV4XSwgY2hpbGRJ
bmRleCkgPSBFZGdlKHJlc3VsdEluZGV4LCBEb3VibGVVc2UpOworICAgICAgICBtX2dyYXBoLmNo
aWxkKG1fY3VycmVudE5vZGUsIGNoaWxkSW5kZXgpID0gRWRnZShyZXN1bHQsIERvdWJsZVVzZSk7
CiAgICAgfQogCiAgICAgQmFzaWNCbG9jayogbV9ibG9jazsKICAgICB1bnNpZ25lZCBtX2luZGV4
SW5CbG9jazsKLSAgICBOb2RlSW5kZXggbV9jb21waWxlSW5kZXg7CisgICAgTm9kZSogbV9jdXJy
ZW50Tm9kZTsKICAgICBJbnNlcnRpb25TZXQgbV9pbnNlcnRpb25TZXQ7CiB9OwogICAgIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHZW5lcmF0aW9uSW5mby5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR2VuZXJhdGlvbkluZm8uaAkocmV2
aXNpb24gMTQwOTA0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHZW5lcmF0aW9u
SW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC00OCw3ICs0OCw3IEBAIG5hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgREZHIHsKIGNsYXNzIEdlbmVyYXRpb25JbmZvIHsKIHB1YmxpYzoKICAgICBHZW5l
cmF0aW9uSW5mbygpCi0gICAgICAgIDogbV9ub2RlSW5kZXgoTm9Ob2RlKQorICAgICAgICA6IG1f
bm9kZSgwKQogICAgICAgICAsIG1fdXNlQ291bnQoMCkKICAgICAgICAgLCBtX3JlZ2lzdGVyRm9y
bWF0KERhdGFGb3JtYXROb25lKQogICAgICAgICAsIG1fc3BpbGxGb3JtYXQoRGF0YUZvcm1hdE5v
bmUpCkBAIC01OCw5ICs1OCw5IEBAIHB1YmxpYzoKICAgICB7CiAgICAgfQogCi0gICAgdm9pZCBp
bml0Q29uc3RhbnQoTm9kZUluZGV4IG5vZGVJbmRleCwgdWludDMyX3QgdXNlQ291bnQpCisgICAg
dm9pZCBpbml0Q29uc3RhbnQoTm9kZSogbm9kZSwgdWludDMyX3QgdXNlQ291bnQpCiAgICAgewot
ICAgICAgICBtX25vZGVJbmRleCA9IG5vZGVJbmRleDsKKyAgICAgICAgbV9ub2RlID0gbm9kZTsK
ICAgICAgICAgbV91c2VDb3VudCA9IHVzZUNvdW50OwogICAgICAgICBtX3JlZ2lzdGVyRm9ybWF0
ID0gRGF0YUZvcm1hdE5vbmU7CiAgICAgICAgIG1fc3BpbGxGb3JtYXQgPSBEYXRhRm9ybWF0Tm9u
ZTsKQEAgLTY5LDkgKzY5LDkgQEAgcHVibGljOgogICAgICAgICBtX2lzQ29uc3RhbnQgPSB0cnVl
OwogICAgICAgICBBU1NFUlQobV91c2VDb3VudCk7CiAgICAgfQotICAgIHZvaWQgaW5pdEludGVn
ZXIoTm9kZUluZGV4IG5vZGVJbmRleCwgdWludDMyX3QgdXNlQ291bnQsIEdQUlJlZyBncHIpCisg
ICAgdm9pZCBpbml0SW50ZWdlcihOb2RlKiBub2RlLCB1aW50MzJfdCB1c2VDb3VudCwgR1BSUmVn
IGdwcikKICAgICB7Ci0gICAgICAgIG1fbm9kZUluZGV4ID0gbm9kZUluZGV4OworICAgICAgICBt
X25vZGUgPSBub2RlOwogICAgICAgICBtX3VzZUNvdW50ID0gdXNlQ291bnQ7CiAgICAgICAgIG1f
cmVnaXN0ZXJGb3JtYXQgPSBEYXRhRm9ybWF0SW50ZWdlcjsKICAgICAgICAgbV9zcGlsbEZvcm1h
dCA9IERhdGFGb3JtYXROb25lOwpAQCAtODIsMTEgKzgyLDExIEBAIHB1YmxpYzoKICAgICAgICAg
QVNTRVJUKG1fdXNlQ291bnQpOwogICAgIH0KICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIHZvaWQg
aW5pdEpTVmFsdWUoTm9kZUluZGV4IG5vZGVJbmRleCwgdWludDMyX3QgdXNlQ291bnQsIEdQUlJl
ZyBncHIsIERhdGFGb3JtYXQgZm9ybWF0ID0gRGF0YUZvcm1hdEpTKQorICAgIHZvaWQgaW5pdEpT
VmFsdWUoTm9kZSogbm9kZSwgdWludDMyX3QgdXNlQ291bnQsIEdQUlJlZyBncHIsIERhdGFGb3Jt
YXQgZm9ybWF0ID0gRGF0YUZvcm1hdEpTKQogICAgIHsKICAgICAgICAgQVNTRVJUKGZvcm1hdCAm
IERhdGFGb3JtYXRKUyk7CiAKLSAgICAgICAgbV9ub2RlSW5kZXggPSBub2RlSW5kZXg7CisgICAg
ICAgIG1fbm9kZSA9IG5vZGU7CiAgICAgICAgIG1fdXNlQ291bnQgPSB1c2VDb3VudDsKICAgICAg
ICAgbV9yZWdpc3RlckZvcm1hdCA9IGZvcm1hdDsKICAgICAgICAgbV9zcGlsbEZvcm1hdCA9IERh
dGFGb3JtYXROb25lOwpAQCAtOTcsMTEgKzk3LDExIEBAIHB1YmxpYzoKICAgICAgICAgQVNTRVJU
KG1fdXNlQ291bnQpOwogICAgIH0KICNlbGlmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgdm9pZCBp
bml0SlNWYWx1ZShOb2RlSW5kZXggbm9kZUluZGV4LCB1aW50MzJfdCB1c2VDb3VudCwgR1BSUmVn
IHRhZ0dQUiwgR1BSUmVnIHBheWxvYWRHUFIsIERhdGFGb3JtYXQgZm9ybWF0ID0gRGF0YUZvcm1h
dEpTKQorICAgIHZvaWQgaW5pdEpTVmFsdWUoTm9kZSogbm9kZSwgdWludDMyX3QgdXNlQ291bnQs
IEdQUlJlZyB0YWdHUFIsIEdQUlJlZyBwYXlsb2FkR1BSLCBEYXRhRm9ybWF0IGZvcm1hdCA9IERh
dGFGb3JtYXRKUykKICAgICB7CiAgICAgICAgIEFTU0VSVChmb3JtYXQgJiBEYXRhRm9ybWF0SlMp
OwogCi0gICAgICAgIG1fbm9kZUluZGV4ID0gbm9kZUluZGV4OworICAgICAgICBtX25vZGUgPSBu
b2RlOwogICAgICAgICBtX3VzZUNvdW50ID0gdXNlQ291bnQ7CiAgICAgICAgIG1fcmVnaXN0ZXJG
b3JtYXQgPSBmb3JtYXQ7CiAgICAgICAgIG1fc3BpbGxGb3JtYXQgPSBEYXRhRm9ybWF0Tm9uZTsK
QEAgLTExMyw5ICsxMTMsOSBAQCBwdWJsaWM6CiAgICAgICAgIEFTU0VSVChtX3VzZUNvdW50KTsK
ICAgICB9CiAjZW5kaWYKLSAgICB2b2lkIGluaXRDZWxsKE5vZGVJbmRleCBub2RlSW5kZXgsIHVp
bnQzMl90IHVzZUNvdW50LCBHUFJSZWcgZ3ByKQorICAgIHZvaWQgaW5pdENlbGwoTm9kZSogbm9k
ZSwgdWludDMyX3QgdXNlQ291bnQsIEdQUlJlZyBncHIpCiAgICAgewotICAgICAgICBtX25vZGVJ
bmRleCA9IG5vZGVJbmRleDsKKyAgICAgICAgbV9ub2RlID0gbm9kZTsKICAgICAgICAgbV91c2VD
b3VudCA9IHVzZUNvdW50OwogICAgICAgICBtX3JlZ2lzdGVyRm9ybWF0ID0gRGF0YUZvcm1hdENl
bGw7CiAgICAgICAgIG1fc3BpbGxGb3JtYXQgPSBEYXRhRm9ybWF0Tm9uZTsKQEAgLTEyNSw5ICsx
MjUsOSBAQCBwdWJsaWM6CiAgICAgICAgIG1faXNDb25zdGFudCA9IGZhbHNlOwogICAgICAgICBB
U1NFUlQobV91c2VDb3VudCk7CiAgICAgfQotICAgIHZvaWQgaW5pdEJvb2xlYW4oTm9kZUluZGV4
IG5vZGVJbmRleCwgdWludDMyX3QgdXNlQ291bnQsIEdQUlJlZyBncHIpCisgICAgdm9pZCBpbml0
Qm9vbGVhbihOb2RlKiBub2RlLCB1aW50MzJfdCB1c2VDb3VudCwgR1BSUmVnIGdwcikKICAgICB7
Ci0gICAgICAgIG1fbm9kZUluZGV4ID0gbm9kZUluZGV4OworICAgICAgICBtX25vZGUgPSBub2Rl
OwogICAgICAgICBtX3VzZUNvdW50ID0gdXNlQ291bnQ7CiAgICAgICAgIG1fcmVnaXN0ZXJGb3Jt
YXQgPSBEYXRhRm9ybWF0Qm9vbGVhbjsKICAgICAgICAgbV9zcGlsbEZvcm1hdCA9IERhdGFGb3Jt
YXROb25lOwpAQCAtMTM3LDEwICsxMzcsMTAgQEAgcHVibGljOgogICAgICAgICBtX2lzQ29uc3Rh
bnQgPSBmYWxzZTsKICAgICAgICAgQVNTRVJUKG1fdXNlQ291bnQpOwogICAgIH0KLSAgICB2b2lk
IGluaXREb3VibGUoTm9kZUluZGV4IG5vZGVJbmRleCwgdWludDMyX3QgdXNlQ291bnQsIEZQUlJl
ZyBmcHIpCisgICAgdm9pZCBpbml0RG91YmxlKE5vZGUqIG5vZGUsIHVpbnQzMl90IHVzZUNvdW50
LCBGUFJSZWcgZnByKQogICAgIHsKICAgICAgICAgQVNTRVJUKGZwciAhPSBJbnZhbGlkRlBSUmVn
KTsKLSAgICAgICAgbV9ub2RlSW5kZXggPSBub2RlSW5kZXg7CisgICAgICAgIG1fbm9kZSA9IG5v
ZGU7CiAgICAgICAgIG1fdXNlQ291bnQgPSB1c2VDb3VudDsKICAgICAgICAgbV9yZWdpc3RlckZv
cm1hdCA9IERhdGFGb3JtYXREb3VibGU7CiAgICAgICAgIG1fc3BpbGxGb3JtYXQgPSBEYXRhRm9y
bWF0Tm9uZTsKQEAgLTE1MCw5ICsxNTAsOSBAQCBwdWJsaWM6CiAgICAgICAgIG1faXNDb25zdGFu
dCA9IGZhbHNlOwogICAgICAgICBBU1NFUlQobV91c2VDb3VudCk7CiAgICAgfQotICAgIHZvaWQg
aW5pdFN0b3JhZ2UoTm9kZUluZGV4IG5vZGVJbmRleCwgdWludDMyX3QgdXNlQ291bnQsIEdQUlJl
ZyBncHIpCisgICAgdm9pZCBpbml0U3RvcmFnZShOb2RlKiBub2RlLCB1aW50MzJfdCB1c2VDb3Vu
dCwgR1BSUmVnIGdwcikKICAgICB7Ci0gICAgICAgIG1fbm9kZUluZGV4ID0gbm9kZUluZGV4Owor
ICAgICAgICBtX25vZGUgPSBub2RlOwogICAgICAgICBtX3VzZUNvdW50ID0gdXNlQ291bnQ7CiAg
ICAgICAgIG1fcmVnaXN0ZXJGb3JtYXQgPSBEYXRhRm9ybWF0U3RvcmFnZTsKICAgICAgICAgbV9z
cGlsbEZvcm1hdCA9IERhdGFGb3JtYXROb25lOwpAQCAtMTYzLDE0ICsxNjMsMTQgQEAgcHVibGlj
OgogICAgICAgICBBU1NFUlQobV91c2VDb3VudCk7CiAgICAgfQogCi0gICAgLy8gR2V0IHRoZSBp
bmRleCBvZiB0aGUgbm9kZSB0aGF0IHByb2R1Y2VkIHRoaXMgdmFsdWUuCi0gICAgTm9kZUluZGV4
IG5vZGVJbmRleCgpIHsgcmV0dXJuIG1fbm9kZUluZGV4OyB9CisgICAgLy8gR2V0IHRoZSBub2Rl
IHRoYXQgcHJvZHVjZWQgdGhpcyB2YWx1ZS4KKyAgICBOb2RlKiBub2RlKCkgeyByZXR1cm4gbV9u
b2RlOyB9CiAgICAgCi0gICAgdm9pZCBub3RpY2VPU1JCaXJ0aChWYXJpYWJsZUV2ZW50U3RyZWFt
JiBzdHJlYW0sIE5vZGVJbmRleCBub2RlSW5kZXgsIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVn
aXN0ZXIpCisgICAgdm9pZCBub3RpY2VPU1JCaXJ0aChWYXJpYWJsZUV2ZW50U3RyZWFtJiBzdHJl
YW0sIE5vZGUqIG5vZGUsIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIpCiAgICAgewog
ICAgICAgICBpZiAobV9pc0NvbnN0YW50KQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBp
ZiAobV9ub2RlSW5kZXggIT0gbm9kZUluZGV4KQorICAgICAgICBpZiAobV9ub2RlICE9IG5vZGUp
CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGlmICghYWxpdmUoKSkKICAgICAgICAgICAg
IHJldHVybjsKQEAgLTE5NCw4ICsxOTQsOCBAQCBwdWJsaWM6CiAgICAgICAgIGJvb2wgcmVzdWx0
ID0gIS0tbV91c2VDb3VudDsKICAgICAgICAgCiAgICAgICAgIGlmIChyZXN1bHQgJiYgbV9ib3Ju
Rm9yT1NSKSB7Ci0gICAgICAgICAgICBBU1NFUlQobV9ub2RlSW5kZXggIT0gTm9Ob2RlKTsKLSAg
ICAgICAgICAgIHN0cmVhbS5hcHBlbmRBbmRMb2coVmFyaWFibGVFdmVudDo6ZGVhdGgoTWluaWZp
ZWRJRChtX25vZGVJbmRleCkpKTsKKyAgICAgICAgICAgIEFTU0VSVChtX25vZGUpOworICAgICAg
ICAgICAgc3RyZWFtLmFwcGVuZEFuZExvZyhWYXJpYWJsZUV2ZW50OjpkZWF0aChNaW5pZmllZElE
KG1fbm9kZSkpKTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgcmV0dXJuIHJlc3VsdDsK
QEAgLTM4MiwyNSArMzgyLDI1IEBAIHByaXZhdGU6CiAgICAgICAgIEFTU0VSVChtX2Jvcm5Gb3JP
U1IpOwogICAgICAgICAKICAgICAgICAgaWYgKG1fcmVnaXN0ZXJGb3JtYXQgPT0gRGF0YUZvcm1h
dERvdWJsZSkgewotICAgICAgICAgICAgc3RyZWFtLmFwcGVuZEFuZExvZyhWYXJpYWJsZUV2ZW50
OjpmaWxsRlBSKGtpbmQsIE1pbmlmaWVkSUQobV9ub2RlSW5kZXgpLCB1LmZwcikpOworICAgICAg
ICAgICAgc3RyZWFtLmFwcGVuZEFuZExvZyhWYXJpYWJsZUV2ZW50OjpmaWxsRlBSKGtpbmQsIE1p
bmlmaWVkSUQobV9ub2RlKSwgdS5mcHIpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
fQogI2lmIFVTRShKU1ZBTFVFMzJfNjQpCiAgICAgICAgIGlmIChtX3JlZ2lzdGVyRm9ybWF0ICYg
RGF0YUZvcm1hdEpTKSB7Ci0gICAgICAgICAgICBzdHJlYW0uYXBwZW5kQW5kTG9nKFZhcmlhYmxl
RXZlbnQ6OmZpbGxQYWlyKGtpbmQsIE1pbmlmaWVkSUQobV9ub2RlSW5kZXgpLCB1LnYudGFnR1BS
LCB1LnYucGF5bG9hZEdQUikpOworICAgICAgICAgICAgc3RyZWFtLmFwcGVuZEFuZExvZyhWYXJp
YWJsZUV2ZW50OjpmaWxsUGFpcihraW5kLCBNaW5pZmllZElEKG1fbm9kZSksIHUudi50YWdHUFIs
IHUudi5wYXlsb2FkR1BSKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICNlbmRp
ZgotICAgICAgICBzdHJlYW0uYXBwZW5kQW5kTG9nKFZhcmlhYmxlRXZlbnQ6OmZpbGxHUFIoa2lu
ZCwgTWluaWZpZWRJRChtX25vZGVJbmRleCksIHUuZ3ByLCBtX3JlZ2lzdGVyRm9ybWF0KSk7Cisg
ICAgICAgIHN0cmVhbS5hcHBlbmRBbmRMb2coVmFyaWFibGVFdmVudDo6ZmlsbEdQUihraW5kLCBN
aW5pZmllZElEKG1fbm9kZSksIHUuZ3ByLCBtX3JlZ2lzdGVyRm9ybWF0KSk7CiAgICAgfQogICAg
IAogICAgIHZvaWQgYXBwZW5kU3BpbGwoVmFyaWFibGVFdmVudEtpbmQga2luZCwgVmFyaWFibGVF
dmVudFN0cmVhbSYgc3RyZWFtLCBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyKQogICAg
IHsKLSAgICAgICAgc3RyZWFtLmFwcGVuZEFuZExvZyhWYXJpYWJsZUV2ZW50OjpzcGlsbChraW5k
LCBNaW5pZmllZElEKG1fbm9kZUluZGV4KSwgdmlydHVhbFJlZ2lzdGVyLCBtX3NwaWxsRm9ybWF0
KSk7CisgICAgICAgIHN0cmVhbS5hcHBlbmRBbmRMb2coVmFyaWFibGVFdmVudDo6c3BpbGwoa2lu
ZCwgTWluaWZpZWRJRChtX25vZGUpLCB2aXJ0dWFsUmVnaXN0ZXIsIG1fc3BpbGxGb3JtYXQpKTsK
ICAgICB9CiAgICAgCi0gICAgLy8gVGhlIGluZGV4IG9mIHRoZSBub2RlIHdob3NlIHJlc3VsdCBp
cyBzdG9yZWQgaW4gdGhpcyB2aXJ0dWFsIHJlZ2lzdGVyLgotICAgIE5vZGVJbmRleCBtX25vZGVJ
bmRleDsKKyAgICAvLyBUaGUgbm9kZSB3aG9zZSByZXN1bHQgaXMgc3RvcmVkIGluIHRoaXMgdmly
dHVhbCByZWdpc3Rlci4KKyAgICBOb2RlKiBtX25vZGU7CiAgICAgdWludDMyX3QgbV91c2VDb3Vu
dDsKICAgICBEYXRhRm9ybWF0IG1fcmVnaXN0ZXJGb3JtYXQ7CiAgICAgRGF0YUZvcm1hdCBtX3Nw
aWxsRm9ybWF0OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHJl
dmlzaW9uIDE0MDkwNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yOCw3ICsyOCw5IEBACiAKICNpbmNsdWRlICJDb2RlQmxvY2su
aCIKICNpbmNsdWRlICJERkdWYXJpYWJsZUFjY2Vzc0RhdGFEdW1wLmgiCisjaW5jbHVkZSAiRnVu
Y3Rpb25FeGVjdXRhYmxlRHVtcC5oIgogI2luY2x1ZGUgIk9wZXJhdGlvbnMuaCIKKyNpbmNsdWRl
IDx3dGYvQ29tbWFQcmludGVyLmg+CiAKICNpZiBFTkFCTEUoREZHX0pJVCkKIApAQCAtNDYsNiAr
NDgsNyBAQCBHcmFwaDo6R3JhcGgoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBDCiAgICAgLCBt
X2NvZGVCbG9jayhjb2RlQmxvY2spCiAgICAgLCBtX2NvbXBpbGF0aW9uKGdsb2JhbERhdGEubV9w
ZXJCeXRlY29kZVByb2ZpbGVyID8gZ2xvYmFsRGF0YS5tX3BlckJ5dGVjb2RlUHJvZmlsZXItPm5l
d0NvbXBpbGF0aW9uKGNvZGVCbG9jaywgUHJvZmlsZXI6OkRGRykgOiAwKQogICAgICwgbV9wcm9m
aWxlZEJsb2NrKGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKSkKKyAgICAsIG1fYWxsb2NhdG9yKGds
b2JhbERhdGEubV9kZmdTdGF0ZS0+bV9hbGxvY2F0b3IpCiAgICAgLCBtX2hhc0FyZ3VtZW50cyhm
YWxzZSkKICAgICAsIG1fb3NyRW50cnlCeXRlY29kZUluZGV4KG9zckVudHJ5Qnl0ZWNvZGVJbmRl
eCkKICAgICAsIG1fbXVzdEhhbmRsZVZhbHVlcyhtdXN0SGFuZGxlVmFsdWVzKQpAQCAtNTQsNiAr
NTcsMTEgQEAgR3JhcGg6OkdyYXBoKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgQwogICAgIEFT
U0VSVChtX3Byb2ZpbGVkQmxvY2spOwogfQogCitHcmFwaDo6fkdyYXBoKCkKK3sKKyAgICBtX2Fs
bG9jYXRvci5mcmVlQWxsKCk7Cit9CisKIGNvbnN0IGNoYXIgKkdyYXBoOjpvcE5hbWUoTm9kZVR5
cGUgb3ApCiB7CiAgICAgcmV0dXJuIGRmZ09wTmFtZXNbb3BdOwpAQCAtNjUsMTggKzczLDE2IEBA
IHN0YXRpYyB2b2lkIHByaW50V2hpdGVTcGFjZShQcmludFN0cmVhbSYKICAgICAgICAgb3V0LnBy
aW50KCIgIik7CiB9CiAKLWJvb2wgR3JhcGg6OmR1bXBDb2RlT3JpZ2luKFByaW50U3RyZWFtJiBv
dXQsIGNvbnN0IGNoYXIqIHByZWZpeCwgTm9kZUluZGV4IHByZXZOb2RlSW5kZXgsIE5vZGVJbmRl
eCBub2RlSW5kZXgpCitib29sIEdyYXBoOjpkdW1wQ29kZU9yaWdpbihQcmludFN0cmVhbSYgb3V0
LCBjb25zdCBjaGFyKiBwcmVmaXgsIE5vZGUqIHByZXZpb3VzTm9kZSwgTm9kZSogY3VycmVudE5v
ZGUpCiB7Ci0gICAgaWYgKHByZXZOb2RlSW5kZXggPT0gTm9Ob2RlKQorICAgIGlmICghcHJldmlv
dXNOb2RlKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCi0gICAgTm9kZSYgY3VycmVudE5v
ZGUgPSBhdChub2RlSW5kZXgpOwotICAgIE5vZGUmIHByZXZpb3VzTm9kZSA9IGF0KHByZXZOb2Rl
SW5kZXgpOwotICAgIGlmIChwcmV2aW91c05vZGUuY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUg
PT0gY3VycmVudE5vZGUuY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpCisgICAgaWYgKHByZXZp
b3VzTm9kZS0+Y29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUgPT0gY3VycmVudE5vZGUtPmNvZGVP
cmlnaW4uaW5saW5lQ2FsbEZyYW1lKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCi0gICAg
VmVjdG9yPENvZGVPcmlnaW4+IHByZXZpb3VzSW5saW5lU3RhY2sgPSBwcmV2aW91c05vZGUuY29k
ZU9yaWdpbi5pbmxpbmVTdGFjaygpOwotICAgIFZlY3RvcjxDb2RlT3JpZ2luPiBjdXJyZW50SW5s
aW5lU3RhY2sgPSBjdXJyZW50Tm9kZS5jb2RlT3JpZ2luLmlubGluZVN0YWNrKCk7CisgICAgVmVj
dG9yPENvZGVPcmlnaW4+IHByZXZpb3VzSW5saW5lU3RhY2sgPSBwcmV2aW91c05vZGUtPmNvZGVP
cmlnaW4uaW5saW5lU3RhY2soKTsKKyAgICBWZWN0b3I8Q29kZU9yaWdpbj4gY3VycmVudElubGlu
ZVN0YWNrID0gY3VycmVudE5vZGUtPmNvZGVPcmlnaW4uaW5saW5lU3RhY2soKTsKICAgICB1bnNp
Z25lZCBjb21tb25TaXplID0gc3RkOjptaW4ocHJldmlvdXNJbmxpbmVTdGFjay5zaXplKCksIGN1
cnJlbnRJbmxpbmVTdGFjay5zaXplKCkpOwogICAgIHVuc2lnbmVkIGluZGV4T2ZEaXZlcmdlbmNl
ID0gY29tbW9uU2l6ZTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY29tbW9uU2l6ZTsg
KytpKSB7CkBAIC0xMDcsMzIgKzExMywyMyBAQCBib29sIEdyYXBoOjpkdW1wQ29kZU9yaWdpbihQ
cmludFN0cmVhbSYgCiAgICAgcmV0dXJuIGhhc1ByaW50ZWQ7CiB9CiAKLWludCBHcmFwaDo6YW1v
dW50T2ZOb2RlV2hpdGVTcGFjZShOb2RlJiBub2RlKQoraW50IEdyYXBoOjphbW91bnRPZk5vZGVX
aGl0ZVNwYWNlKE5vZGUqIG5vZGUpCiB7Ci0gICAgcmV0dXJuIChub2RlLmNvZGVPcmlnaW4uaW5s
aW5lRGVwdGgoKSAtIDEpICogMjsKKyAgICByZXR1cm4gKG5vZGUtPmNvZGVPcmlnaW4uaW5saW5l
RGVwdGgoKSAtIDEpICogMjsKIH0KIAotdm9pZCBHcmFwaDo6cHJpbnROb2RlV2hpdGVTcGFjZShQ
cmludFN0cmVhbSYgb3V0LCBOb2RlJiBub2RlKQordm9pZCBHcmFwaDo6cHJpbnROb2RlV2hpdGVT
cGFjZShQcmludFN0cmVhbSYgb3V0LCBOb2RlKiBub2RlKQogewogICAgIHByaW50V2hpdGVTcGFj
ZShvdXQsIGFtb3VudE9mTm9kZVdoaXRlU3BhY2Uobm9kZSkpOwogfQogCi12b2lkIEdyYXBoOjpk
dW1wKFByaW50U3RyZWFtJiBvdXQsIEVkZ2UgZWRnZSkKLXsKLSAgICBvdXQucHJpbnQoCi0gICAg
ICAgIHVzZUtpbmRUb1N0cmluZyhlZGdlLnVzZUtpbmQoKSksCi0gICAgICAgICJAIiwgZWRnZS5p
bmRleCgpLAotICAgICAgICBBYmJyZXZpYXRlZFNwZWN1bGF0aW9uRHVtcChhdChlZGdlKS5wcmVk
aWN0aW9uKCkpKTsKLX0KLQotdm9pZCBHcmFwaDo6ZHVtcChQcmludFN0cmVhbSYgb3V0LCBjb25z
dCBjaGFyKiBwcmVmaXgsIE5vZGVJbmRleCBub2RlSW5kZXgpCit2b2lkIEdyYXBoOjpkdW1wKFBy
aW50U3RyZWFtJiBvdXQsIGNvbnN0IGNoYXIqIHByZWZpeCwgTm9kZSogbm9kZSkKIHsKLSAgICBO
b2RlJiBub2RlID0gYXQobm9kZUluZGV4KTsKLSAgICBOb2RlVHlwZSBvcCA9IG5vZGUub3AoKTsK
KyAgICBOb2RlVHlwZSBvcCA9IG5vZGUtPm9wKCk7CiAKLSAgICB1bnNpZ25lZCByZWZDb3VudCA9
IG5vZGUucmVmQ291bnQoKTsKKyAgICB1bnNpZ25lZCByZWZDb3VudCA9IG5vZGUtPnJlZkNvdW50
KCk7CiAgICAgYm9vbCBza2lwcGVkID0gIXJlZkNvdW50OwotICAgIGJvb2wgbXVzdEdlbmVyYXRl
ID0gbm9kZS5tdXN0R2VuZXJhdGUoKTsKKyAgICBib29sIG11c3RHZW5lcmF0ZSA9IG5vZGUtPm11
c3RHZW5lcmF0ZSgpOwogICAgIGlmIChtdXN0R2VuZXJhdGUpCiAgICAgICAgIC0tcmVmQ291bnQ7
CiAKQEAgLTE1NiwxNTAgKzE1MywxMDEgQEAgdm9pZCBHcmFwaDo6ZHVtcChQcmludFN0cmVhbSYg
b3V0LCBjb25zdAogICAgIC8vICAgICAgICAgJCMgICAtIHRoZSBpbmRleCBpbiB0aGUgQ29kZUJs
b2NrIG9mIGEgY29uc3RhbnQgeyBmb3IgbnVtZXJpYyBjb25zdGFudHMgdGhlIHZhbHVlIGlzIGRp
c3BsYXllZCB8IGZvciBpbnRlZ2VycywgaW4gYm90aCBkZWNpbWFsIGFuZCBoZXggfS4KICAgICAv
LyAgICAgICAgIGlkIyAgLSB0aGUgaW5kZXggaW4gdGhlIENvZGVCbG9jayBvZiBhbiBpZGVudGlm
aWVyIHsgaWYgY29kZUJsb2NrIGlzIHBhc3NlZCB0byBkdW1wKCksIHRoZSBzdHJpbmcgcmVwcmVz
ZW50YXRpb24gaXMgZGlzcGxheWVkIH0uCiAgICAgLy8gICAgICAgICB2YXIjIC0gdGhlIGluZGV4
IG9mIGEgdmFyIG9uIHRoZSBnbG9iYWwgb2JqZWN0LCB1c2VkIGJ5IEdldEdsb2JhbFZhci9QdXRH
bG9iYWxWYXIgb3BlcmF0aW9ucy4KLSAgICBvdXQucHJpbnRmKCIlIDRkOiVzPCVjJXU6IiwgKGlu
dClub2RlSW5kZXgsIHNraXBwZWQgPyAiICBza2lwcGVkICAiIDogIiAgICAgICAgICAgIiwgbXVz
dEdlbmVyYXRlID8gJyEnIDogJyAnLCByZWZDb3VudCk7Ci0gICAgaWYgKG5vZGUuaGFzUmVzdWx0
KCkgJiYgIXNraXBwZWQgJiYgbm9kZS5oYXNWaXJ0dWFsUmVnaXN0ZXIoKSkKLSAgICAgICAgb3V0
LnByaW50KG5vZGUudmlydHVhbFJlZ2lzdGVyKCkpOworICAgIG91dC5wcmludGYoIiUgNGQ6JXM8
JWMldToiLCAoaW50KW5vZGUtPmluZGV4KCksIHNraXBwZWQgPyAiICBza2lwcGVkICAiIDogIiAg
ICAgICAgICAgIiwgbXVzdEdlbmVyYXRlID8gJyEnIDogJyAnLCByZWZDb3VudCk7CisgICAgaWYg
KG5vZGUtPmhhc1Jlc3VsdCgpICYmICFza2lwcGVkICYmIG5vZGUtPmhhc1ZpcnR1YWxSZWdpc3Rl
cigpKQorICAgICAgICBvdXQucHJpbnQobm9kZS0+dmlydHVhbFJlZ2lzdGVyKCkpOwogICAgIGVs
c2UKICAgICAgICAgb3V0LnByaW50KCItIik7CiAgICAgb3V0LnByaW50KCI+XHQiLCBvcE5hbWUo
b3ApLCAiKCIpOwotICAgIGJvb2wgaGFzUHJpbnRlZCA9IGZhbHNlOwotICAgIGlmIChub2RlLmZs
YWdzKCkgJiBOb2RlSGFzVmFyQXJncykgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGNoaWxkSWR4
ID0gbm9kZS5maXJzdENoaWxkKCk7IGNoaWxkSWR4IDwgbm9kZS5maXJzdENoaWxkKCkgKyBub2Rl
Lm51bUNoaWxkcmVuKCk7IGNoaWxkSWR4KyspIHsKLSAgICAgICAgICAgIGlmIChoYXNQcmludGVk
KQotICAgICAgICAgICAgICAgIG91dC5wcmludCgiLCAiKTsKLSAgICAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgICAgICBoYXNQcmludGVkID0gdHJ1ZTsKKyAgICBDb21tYVByaW50ZXIgY29tbWE7
CisgICAgaWYgKG5vZGUtPmZsYWdzKCkgJiBOb2RlSGFzVmFyQXJncykgeworICAgICAgICBmb3Ig
KHVuc2lnbmVkIGNoaWxkSWR4ID0gbm9kZS0+Zmlyc3RDaGlsZCgpOyBjaGlsZElkeCA8IG5vZGUt
PmZpcnN0Q2hpbGQoKSArIG5vZGUtPm51bUNoaWxkcmVuKCk7IGNoaWxkSWR4KyspIHsKICAgICAg
ICAgICAgIGlmICghbV92YXJBcmdDaGlsZHJlbltjaGlsZElkeF0pCiAgICAgICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgICAgICBkdW1wKG91dCwgbV92YXJBcmdDaGlsZHJlbltjaGlsZElk
eF0pOworICAgICAgICAgICAgb3V0LnByaW50KGNvbW1hLCBtX3ZhckFyZ0NoaWxkcmVuW2NoaWxk
SWR4XSk7CiAgICAgICAgIH0KICAgICB9IGVsc2UgewotICAgICAgICBpZiAoISFub2RlLmNoaWxk
MSgpKSB7Ci0gICAgICAgICAgICBkdW1wKG91dCwgbm9kZS5jaGlsZDEoKSk7Ci0gICAgICAgICAg
ICBoYXNQcmludGVkID0gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICBpZiAoISFub2RlLmNoaWxk
MigpKSB7Ci0gICAgICAgICAgICBvdXQucHJpbnQoIiwgIik7IC8vIFdoZXRoZXIgb3Igbm90IHRo
ZXJlIGlzIGEgZmlyc3QgY2hpbGQsIHdlIHByaW50IGEgY29tbWEgdG8gZW5zdXJlIHRoYXQgd2Ug
c2VlIGEgYmxhbmsgZW50cnkgaWYgdGhlcmUgd2Fzbid0IG9uZS4KLSAgICAgICAgICAgIGR1bXAo
b3V0LCBub2RlLmNoaWxkMigpKTsKLSAgICAgICAgICAgIGhhc1ByaW50ZWQgPSB0cnVlOwotICAg
ICAgICB9Ci0gICAgICAgIGlmICghIW5vZGUuY2hpbGQzKCkpIHsKLSAgICAgICAgICAgIGlmICgh
bm9kZS5jaGlsZDEoKSAmJiAhbm9kZS5jaGlsZDIoKSkKLSAgICAgICAgICAgICAgICBvdXQucHJp
bnQoIiwgIik7IC8vIElmIHRoZSB0aGlyZCBjaGlsZCBpcyB0aGUgZmlyc3Qgbm9uLWVtcHR5IG9u
ZSB0aGVuIG1ha2Ugc3VyZSB3ZSBoYXZlIHR3byBibGFua3MgcHJlY2VkaW5nIGl0LgotICAgICAg
ICAgICAgb3V0LnByaW50KCIsICIpOwotICAgICAgICAgICAgZHVtcChvdXQsIG5vZGUuY2hpbGQz
KCkpOwotICAgICAgICAgICAgaGFzUHJpbnRlZCA9IHRydWU7Ci0gICAgICAgIH0KLSAgICB9Ci0K
LSAgICBpZiAoc3RybGVuKG5vZGVGbGFnc0FzU3RyaW5nKG5vZGUuZmxhZ3MoKSkpKSB7Ci0gICAg
ICAgIG91dC5wcmludChoYXNQcmludGVkID8gIiwgIiA6ICIiLCBub2RlRmxhZ3NBc1N0cmluZyhu
b2RlLmZsYWdzKCkpKTsKLSAgICAgICAgaGFzUHJpbnRlZCA9IHRydWU7Ci0gICAgfQotICAgIGlm
IChub2RlLmhhc0FycmF5TW9kZSgpKSB7Ci0gICAgICAgIG91dC5wcmludChoYXNQcmludGVkID8g
IiwgIiA6ICIiLCBub2RlLmFycmF5TW9kZSgpKTsKLSAgICAgICAgaGFzUHJpbnRlZCA9IHRydWU7
Ci0gICAgfQotICAgIGlmIChub2RlLmhhc1Zhck51bWJlcigpKSB7Ci0gICAgICAgIG91dC5wcmlu
dChoYXNQcmludGVkID8gIiwgIiA6ICIiLCAidmFyIiwgbm9kZS52YXJOdW1iZXIoKSk7Ci0gICAg
ICAgIGhhc1ByaW50ZWQgPSB0cnVlOwotICAgIH0KLSAgICBpZiAobm9kZS5oYXNSZWdpc3RlclBv
aW50ZXIoKSkgewotICAgICAgICBvdXQucHJpbnQoaGFzUHJpbnRlZCA/ICIsICIgOiAiIiwgImds
b2JhbCIsIGdsb2JhbE9iamVjdEZvcihub2RlLmNvZGVPcmlnaW4pLT5maW5kUmVnaXN0ZXJJbmRl
eChub2RlLnJlZ2lzdGVyUG9pbnRlcigpKSwgIigiLCBSYXdQb2ludGVyKG5vZGUucmVnaXN0ZXJQ
b2ludGVyKCkpLCAiKSIpOwotICAgICAgICBoYXNQcmludGVkID0gdHJ1ZTsKLSAgICB9Ci0gICAg
aWYgKG5vZGUuaGFzSWRlbnRpZmllcigpKSB7Ci0gICAgICAgIG91dC5wcmludChoYXNQcmludGVk
ID8gIiwgIiA6ICIiLCAiaWQiLCBub2RlLmlkZW50aWZpZXJOdW1iZXIoKSwgInsiLCBtX2NvZGVC
bG9jay0+aWRlbnRpZmllcihub2RlLmlkZW50aWZpZXJOdW1iZXIoKSkuc3RyaW5nKCksICJ9Iik7
Ci0gICAgICAgIGhhc1ByaW50ZWQgPSB0cnVlOwotICAgIH0KLSAgICBpZiAobm9kZS5oYXNTdHJ1
Y3R1cmVTZXQoKSkgewotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG5vZGUuc3RydWN0
dXJlU2V0KCkuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIG91dC5wcmludChoYXNQcmludGVk
ID8gIiwgIiA6ICIiLCAic3RydWN0KCIsIFJhd1BvaW50ZXIobm9kZS5zdHJ1Y3R1cmVTZXQoKVtp
XSksICI6ICIsIEluZGV4aW5nVHlwZUR1bXAobm9kZS5zdHJ1Y3R1cmVTZXQoKVtpXS0+aW5kZXhp
bmdUeXBlKCkpLCAiKSIpOwotICAgICAgICAgICAgaGFzUHJpbnRlZCA9IHRydWU7Ci0gICAgICAg
IH0KLSAgICB9Ci0gICAgaWYgKG5vZGUuaGFzU3RydWN0dXJlKCkpIHsKLSAgICAgICAgb3V0LnBy
aW50KGhhc1ByaW50ZWQgPyAiLCAiIDogIiIsICJzdHJ1Y3QoIiwgUmF3UG9pbnRlcihub2RlLnN0
cnVjdHVyZSgpKSwgIjogIiwgSW5kZXhpbmdUeXBlRHVtcChub2RlLnN0cnVjdHVyZSgpLT5pbmRl
eGluZ1R5cGUoKSksICIpIik7Ci0gICAgICAgIGhhc1ByaW50ZWQgPSB0cnVlOwotICAgIH0KLSAg
ICBpZiAobm9kZS5oYXNTdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSgpKSB7Ci0gICAgICAgIG91dC5w
cmludChoYXNQcmludGVkID8gIiwgIiA6ICIiLCAic3RydWN0KCIsIFJhd1BvaW50ZXIobm9kZS5z
dHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSgpLnByZXZpb3VzU3RydWN0dXJlKSwgIiAtPiAiLCBSYXdQ
b2ludGVyKG5vZGUuc3RydWN0dXJlVHJhbnNpdGlvbkRhdGEoKS5uZXdTdHJ1Y3R1cmUpLCAiKSIp
OwotICAgICAgICBoYXNQcmludGVkID0gdHJ1ZTsKLSAgICB9Ci0gICAgaWYgKG5vZGUuaGFzRnVu
Y3Rpb24oKSkgewotICAgICAgICBvdXQucHJpbnQoaGFzUHJpbnRlZCA/ICIsICIgOiAiIiwgUmF3
UG9pbnRlcihub2RlLmZ1bmN0aW9uKCkpKTsKLSAgICAgICAgaGFzUHJpbnRlZCA9IHRydWU7Ci0g
ICAgfQotICAgIGlmIChub2RlLmhhc1N0b3JhZ2VBY2Nlc3NEYXRhKCkpIHsKLSAgICAgICAgU3Rv
cmFnZUFjY2Vzc0RhdGEmIHN0b3JhZ2VBY2Nlc3NEYXRhID0gbV9zdG9yYWdlQWNjZXNzRGF0YVtu
b2RlLnN0b3JhZ2VBY2Nlc3NEYXRhSW5kZXgoKV07Ci0gICAgICAgIG91dC5wcmludChoYXNQcmlu
dGVkID8gIiwgIiA6ICIiLCAiaWQiLCBzdG9yYWdlQWNjZXNzRGF0YS5pZGVudGlmaWVyTnVtYmVy
LCAieyIsIG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKHN0b3JhZ2VBY2Nlc3NEYXRhLmlkZW50aWZp
ZXJOdW1iZXIpLnN0cmluZygpLCAifSIpOworICAgICAgICBpZiAoISFub2RlLT5jaGlsZDEoKSB8
fCAhIW5vZGUtPmNoaWxkMigpIHx8ICEhbm9kZS0+Y2hpbGQzKCkpCisgICAgICAgICAgICBvdXQu
cHJpbnQoY29tbWEsIG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgaWYgKCEhbm9kZS0+Y2hpbGQy
KCkgfHwgISFub2RlLT5jaGlsZDMoKSkKKyAgICAgICAgICAgIG91dC5wcmludChjb21tYSwgbm9k
ZS0+Y2hpbGQyKCkpOworICAgICAgICBpZiAoISFub2RlLT5jaGlsZDMoKSkKKyAgICAgICAgICAg
IG91dC5wcmludChjb21tYSwgbm9kZS0+Y2hpbGQzKCkpOworICAgIH0KKworICAgIGlmIChzdHJs
ZW4obm9kZUZsYWdzQXNTdHJpbmcobm9kZS0+ZmxhZ3MoKSkpKQorICAgICAgICBvdXQucHJpbnQo
Y29tbWEsIG5vZGVGbGFnc0FzU3RyaW5nKG5vZGUtPmZsYWdzKCkpKTsKKyAgICBpZiAobm9kZS0+
aGFzQXJyYXlNb2RlKCkpIHsKKyAgICAgICAgb3V0LnByaW50KGNvbW1hLCBub2RlLT5hcnJheU1v
ZGUoKSk7CisgICAgaWYgKG5vZGUtPmhhc1Zhck51bWJlcigpKSB7CisgICAgICAgIG91dC5wcmlu
dChjb21tYSwgbm9kZS0+dmFyTnVtYmVyKCkpOworICAgIGlmIChub2RlLT5oYXNSZWdpc3RlclBv
aW50ZXIoKSkKKyAgICAgICAgb3V0LnByaW50KGNvbW1hLCAiZ2xvYmFsIiwgZ2xvYmFsT2JqZWN0
Rm9yKG5vZGUtPmNvZGVPcmlnaW4pLT5maW5kUmVnaXN0ZXJJbmRleChub2RlLT5yZWdpc3RlclBv
aW50ZXIoKSksICIoIiwgUmF3UG9pbnRlcihub2RlLT5yZWdpc3RlclBvaW50ZXIoKSksICIpIik7
CisgICAgaWYgKG5vZGUtPmhhc0lkZW50aWZpZXIoKSkKKyAgICAgICAgb3V0LnByaW50KGNvbW1h
LCAiaWQiLCBub2RlLT5pZGVudGlmaWVyTnVtYmVyKCksICJ7IiwgbV9jb2RlQmxvY2stPmlkZW50
aWZpZXIobm9kZS0+aWRlbnRpZmllck51bWJlcigpKS5zdHJpbmcoKSwgIn0iKTsKKyAgICBpZiAo
bm9kZS0+aGFzU3RydWN0dXJlU2V0KCkpIHsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBub2RlLT5zdHJ1Y3R1cmVTZXQoKS5zaXplKCk7ICsraSkKKyAgICAgICAgICAgIG91dC5wcmlu
dChjb21tYSwgInN0cnVjdCgiLCBSYXdQb2ludGVyKG5vZGUtPnN0cnVjdHVyZVNldCgpW2ldKSwg
IjogIiwgSW5kZXhpbmdUeXBlRHVtcChub2RlLT5zdHJ1Y3R1cmVTZXQoKVtpXS0+aW5kZXhpbmdU
eXBlKCkpLCAiKSIpOworICAgIH0KKyAgICBpZiAobm9kZS0+aGFzU3RydWN0dXJlKCkpCisgICAg
ICAgIG91dC5wcmludChjb21tYSwgInN0cnVjdCgiLCBSYXdQb2ludGVyKG5vZGUtPnN0cnVjdHVy
ZSgpKSwgIjogIiwgSW5kZXhpbmdUeXBlRHVtcChub2RlLT5zdHJ1Y3R1cmUoKS0+aW5kZXhpbmdU
eXBlKCkpLCAiKSIpOworICAgIGlmIChub2RlLT5oYXNTdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSgp
KQorICAgICAgICBvdXQucHJpbnQoY29tbWEsICJzdHJ1Y3QoIiwgUmF3UG9pbnRlcihub2RlLT5z
dHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSgpLnByZXZpb3VzU3RydWN0dXJlKSwgIiAtPiAiLCBSYXdQ
b2ludGVyKG5vZGUtPnN0cnVjdHVyZVRyYW5zaXRpb25EYXRhKCkubmV3U3RydWN0dXJlKSwgIiki
KTsKKyAgICBpZiAobm9kZS0+aGFzRnVuY3Rpb24oKSkgeworICAgICAgICBvdXQucHJpbnQoY29t
bWEsICJmdW5jdGlvbigiLCBSYXdQb2ludGVyKG5vZGUtPmZ1bmN0aW9uKCkpLCAiLCAiKTsKKyAg
ICAgICAgaWYgKG5vZGUtPmZ1bmN0aW9uKCktPmluaGVyaXRzKCZKU0Z1bmN0aW9uOjpzX2luZm8p
KQorICAgICAgICAgICAgb3V0LnByaW50KEZ1bmN0aW9uRXhlY3V0YWJsZUR1bXAoanNDYXN0PEpT
RnVuY3Rpb24qPihub2RlLT5mdW5jdGlvbigpKS0+anNFeGVjdXRhYmxlKCkpKTsKKyAgICAgICAg
ZWxzZQorICAgICAgICAgICAgb3V0LnByaW50KCI8bm90IEpTRnVuY3Rpb24+Iik7CisgICAgICAg
IG91dC5wcmludCgiKSIpOworICAgIGlmIChub2RlLT5oYXNFeGVjdXRhYmxlKCkpCisgICAgICAg
IG91dC5wcmludChjb21tYSwgImV4ZWN1dGFibGUoIiwgRnVuY3Rpb25FeGVjdXRhYmxlRHVtcChu
b2RlLT5leGVjdXRhYmxlKCkpLCAiKSIpOworICAgIGlmIChub2RlLT5oYXNTdG9yYWdlQWNjZXNz
RGF0YSgpKSB7CisgICAgICAgIFN0b3JhZ2VBY2Nlc3NEYXRhJiBzdG9yYWdlQWNjZXNzRGF0YSA9
IG1fc3RvcmFnZUFjY2Vzc0RhdGFbbm9kZS0+c3RvcmFnZUFjY2Vzc0RhdGFJbmRleCgpXTsKKyAg
ICAgICAgb3V0LnByaW50KGNvbW1hLCAiaWQiLCBzdG9yYWdlQWNjZXNzRGF0YS5pZGVudGlmaWVy
TnVtYmVyLCAieyIsIG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKHN0b3JhZ2VBY2Nlc3NEYXRhLmlk
ZW50aWZpZXJOdW1iZXIpLnN0cmluZygpLCAifSIpOwogICAgICAgICBvdXQucHJpbnQoIiwgIiwg
c3RhdGljX2Nhc3Q8cHRyZGlmZl90PihzdG9yYWdlQWNjZXNzRGF0YS5vZmZzZXQpKTsKLSAgICAg
ICAgaGFzUHJpbnRlZCA9IHRydWU7CiAgICAgfQotICAgIEFTU0VSVChub2RlLmhhc1ZhcmlhYmxl
QWNjZXNzRGF0YSgpID09IG5vZGUuaGFzTG9jYWwoKSk7Ci0gICAgaWYgKG5vZGUuaGFzVmFyaWFi
bGVBY2Nlc3NEYXRhKCkpIHsKLSAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFj
Y2Vzc0RhdGEgPSBub2RlLnZhcmlhYmxlQWNjZXNzRGF0YSgpOworICAgIEFTU0VSVChub2RlLT5o
YXNWYXJpYWJsZUFjY2Vzc0RhdGEoKSA9PSBub2RlLT5oYXNMb2NhbCgpKTsKKyAgICBpZiAobm9k
ZS0+aGFzVmFyaWFibGVBY2Nlc3NEYXRhKCkpIHsKKyAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRh
KiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKICAgICAg
ICAgaW50IG9wZXJhbmQgPSB2YXJpYWJsZUFjY2Vzc0RhdGEtPm9wZXJhbmQoKTsKICAgICAgICAg
aWYgKG9wZXJhbmRJc0FyZ3VtZW50KG9wZXJhbmQpKQotICAgICAgICAgICAgb3V0LnByaW50KGhh
c1ByaW50ZWQgPyAiLCAiIDogIiIsICJhcmciLCBvcGVyYW5kVG9Bcmd1bWVudChvcGVyYW5kKSwg
IigiLCBWYXJpYWJsZUFjY2Vzc0RhdGFEdW1wKCp0aGlzLCB2YXJpYWJsZUFjY2Vzc0RhdGEpLCAi
KSIpOworICAgICAgICAgICAgb3V0LnByaW50KGNvbW1hLCAiYXJnIiwgb3BlcmFuZFRvQXJndW1l
bnQob3BlcmFuZCksICIoIiwgVmFyaWFibGVBY2Nlc3NEYXRhRHVtcCgqdGhpcywgdmFyaWFibGVB
Y2Nlc3NEYXRhKSwgIikiKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgb3V0LnByaW50KGhh
c1ByaW50ZWQgPyAiLCAiIDogIiIsICJyIiwgb3BlcmFuZCwgIigiLCBWYXJpYWJsZUFjY2Vzc0Rh
dGFEdW1wKCp0aGlzLCB2YXJpYWJsZUFjY2Vzc0RhdGEpLCAiKSIpOwotICAgICAgICBoYXNQcmlu
dGVkID0gdHJ1ZTsKKyAgICAgICAgICAgIG91dC5wcmludChjb21tYSwgInIiLCBvcGVyYW5kLCAi
KCIsIFZhcmlhYmxlQWNjZXNzRGF0YUR1bXAoKnRoaXMsIHZhcmlhYmxlQWNjZXNzRGF0YSksICIp
Iik7CiAgICAgfQotICAgIGlmIChub2RlLmhhc0NvbnN0YW50QnVmZmVyKCkpIHsKLSAgICAgICAg
aWYgKGhhc1ByaW50ZWQpCi0gICAgICAgICAgICBvdXQucHJpbnQoIiwgIik7Ci0gICAgICAgIG91
dC5wcmludChub2RlLnN0YXJ0Q29uc3RhbnQoKSwgIjpbIik7Ci0gICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBub2RlLm51bUNvbnN0YW50cygpOyArK2kpIHsKLSAgICAgICAgICAgIGlm
IChpKQotICAgICAgICAgICAgICAgIG91dC5wcmludCgiLCAiKTsKLSAgICAgICAgICAgIG91dC5w
cmludChtX2NvZGVCbG9jay0+Y29uc3RhbnRCdWZmZXIobm9kZS5zdGFydENvbnN0YW50KCkpW2ld
KTsKLSAgICAgICAgfQorICAgIGlmIChub2RlLT5oYXNDb25zdGFudEJ1ZmZlcigpKSB7CisgICAg
ICAgIG91dC5wcmludChjb21tYSk7CisgICAgICAgIG91dC5wcmludChub2RlLT5zdGFydENvbnN0
YW50KCksICI6WyIpOworICAgICAgICBDb21tYVByaW50ZXIgYW5vdGhlckNvbW1hOworICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbm9kZS0+bnVtQ29uc3RhbnRzKCk7ICsraSkKKyAg
ICAgICAgICAgIG91dC5wcmludChhbm90aGVyQ29tbWEsIG1fY29kZUJsb2NrLT5jb25zdGFudEJ1
ZmZlcihub2RlLT5zdGFydENvbnN0YW50KCkpW2ldKTsKICAgICAgICAgb3V0LnByaW50KCJdIik7
Ci0gICAgICAgIGhhc1ByaW50ZWQgPSB0cnVlOwotICAgIH0KLSAgICBpZiAobm9kZS5oYXNJbmRl
eGluZ1R5cGUoKSkgewotICAgICAgICBpZiAoaGFzUHJpbnRlZCkKLSAgICAgICAgICAgIG91dC5w
cmludCgiLCAiKTsKLSAgICAgICAgb3V0LnByaW50KEluZGV4aW5nVHlwZUR1bXAobm9kZS5pbmRl
eGluZ1R5cGUoKSkpOwotICAgICAgICBoYXNQcmludGVkID0gdHJ1ZTsKLSAgICB9Ci0gICAgaWYg
KG5vZGUuaGFzRXhlY3V0aW9uQ291bnRlcigpKSB7Ci0gICAgICAgIGlmIChoYXNQcmludGVkKQot
ICAgICAgICAgICAgb3V0LnByaW50KCIsICIpOwotICAgICAgICBvdXQucHJpbnQoUmF3UG9pbnRl
cihub2RlLmV4ZWN1dGlvbkNvdW50ZXIoKSkpOwotICAgICAgICBoYXNQcmludGVkID0gdHJ1ZTsK
ICAgICB9CisgICAgaWYgKG5vZGUtPmhhc0luZGV4aW5nVHlwZSgpKQorICAgICAgICBvdXQucHJp
bnQoY29tbWEsIEluZGV4aW5nVHlwZUR1bXAobm9kZS0+aW5kZXhpbmdUeXBlKCkpKTsKKyAgICBp
ZiAobm9kZS0+aGFzRXhlY3V0aW9uQ291bnRlcigpKQorICAgICAgICBvdXQucHJpbnQoY29tbWEs
IFJhd1BvaW50ZXIobm9kZS0+ZXhlY3V0aW9uQ291bnRlcigpKSk7CiAgICAgaWYgKG9wID09IEpT
Q29uc3RhbnQpIHsKLSAgICAgICAgb3V0LnByaW50KGhhc1ByaW50ZWQgPyAiLCAiIDogIiIsICIk
Iiwgbm9kZS5jb25zdGFudE51bWJlcigpKTsKLSAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IHZhbHVl
T2ZKU0NvbnN0YW50KG5vZGVJbmRleCk7CisgICAgICAgIG91dC5wcmludChjb21tYSwgIiQiLCBu
b2RlLT5jb25zdGFudE51bWJlcigpKTsKKyAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IHZhbHVlT2ZK
U0NvbnN0YW50KG5vZGUpOwogICAgICAgICBvdXQucHJpbnQoIiA9ICIsIHZhbHVlKTsKLSAgICAg
ICAgaGFzUHJpbnRlZCA9IHRydWU7Ci0gICAgfQotICAgIGlmIChvcCA9PSBXZWFrSlNDb25zdGFu
dCkgewotICAgICAgICBvdXQucHJpbnQoaGFzUHJpbnRlZCA/ICIsICIgOiAiIiwgUmF3UG9pbnRl
cihub2RlLndlYWtDb25zdGFudCgpKSk7Ci0gICAgICAgIGhhc1ByaW50ZWQgPSB0cnVlOwotICAg
IH0KLSAgICBpZiAgKG5vZGUuaXNCcmFuY2goKSB8fCBub2RlLmlzSnVtcCgpKSB7Ci0gICAgICAg
IG91dC5wcmludChoYXNQcmludGVkID8gIiwgIiA6ICIiLCAiVDojIiwgbm9kZS50YWtlbkJsb2Nr
SW5kZXgoKSk7Ci0gICAgICAgIGhhc1ByaW50ZWQgPSB0cnVlOwotICAgIH0KLSAgICBpZiAgKG5v
ZGUuaXNCcmFuY2goKSkgewotICAgICAgICBvdXQucHJpbnQoaGFzUHJpbnRlZCA/ICIsICIgOiAi
IiwgIkY6IyIsIG5vZGUubm90VGFrZW5CbG9ja0luZGV4KCkpOwotICAgICAgICBoYXNQcmludGVk
ID0gdHJ1ZTsKICAgICB9Ci0gICAgb3V0LnByaW50KGhhc1ByaW50ZWQgPyAiLCAiIDogIiIsICJi
YyMiLCBub2RlLmNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCk7Ci0gICAgaGFzUHJpbnRlZCA9IHRy
dWU7Ci0gICAgCi0gICAgKHZvaWQpaGFzUHJpbnRlZDsKKyAgICBpZiAob3AgPT0gV2Vha0pTQ29u
c3RhbnQpCisgICAgICAgIG91dC5wcmludChjb21tYSwgUmF3UG9pbnRlcihub2RlLT53ZWFrQ29u
c3RhbnQoKSkpOworICAgIGlmIChub2RlLT5pc0JyYW5jaCgpIHx8IG5vZGUtPmlzSnVtcCgpKQor
ICAgICAgICBvdXQucHJpbnQoY29tbWEsICJUOiMiLCBub2RlLT50YWtlbkJsb2NrSW5kZXgoKSk7
CisgICAgaWYgKG5vZGUtPmlzQnJhbmNoKCkpCisgICAgICAgIG91dC5wcmludChjb21tYSwgIkY6
IyIsIG5vZGUtPm5vdFRha2VuQmxvY2tJbmRleCgpKTsKKyAgICBvdXQucHJpbnQoY29tbWEsICJi
YyMiLCBub2RlLT5jb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgpOwogICAgIAogICAgIG91dC5wcmlu
dCgiKSIpOwogCiAgICAgaWYgKCFza2lwcGVkKSB7Ci0gICAgICAgIGlmIChub2RlLmhhc1Zhcmlh
YmxlQWNjZXNzRGF0YSgpKQotICAgICAgICAgICAgb3V0LnByaW50KCIgIHByZWRpY3RpbmcgIiwg
U3BlY3VsYXRpb25EdW1wKG5vZGUudmFyaWFibGVBY2Nlc3NEYXRhKCktPnByZWRpY3Rpb24oKSks
IG5vZGUudmFyaWFibGVBY2Nlc3NEYXRhKCktPnNob3VsZFVzZURvdWJsZUZvcm1hdCgpID8gIiwg
Zm9yY2luZyBkb3VibGUiIDogIiIpOwotICAgICAgICBlbHNlIGlmIChub2RlLmhhc0hlYXBQcmVk
aWN0aW9uKCkpCi0gICAgICAgICAgICBvdXQucHJpbnQoIiAgcHJlZGljdGluZyAiLCBTcGVjdWxh
dGlvbkR1bXAobm9kZS5nZXRIZWFwUHJlZGljdGlvbigpKSk7CisgICAgICAgIGlmIChub2RlLT5o
YXNWYXJpYWJsZUFjY2Vzc0RhdGEoKSkKKyAgICAgICAgICAgIG91dC5wcmludCgiICBwcmVkaWN0
aW5nICIsIFNwZWN1bGF0aW9uRHVtcChub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+cHJlZGlj
dGlvbigpKSwgbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCktPnNob3VsZFVzZURvdWJsZUZvcm1h
dCgpID8gIiwgZm9yY2luZyBkb3VibGUiIDogIiIpOworICAgICAgICBlbHNlIGlmIChub2RlLT5o
YXNIZWFwUHJlZGljdGlvbigpKQorICAgICAgICAgICAgb3V0LnByaW50KCIgIHByZWRpY3Rpbmcg
IiwgU3BlY3VsYXRpb25EdW1wKG5vZGUtPmdldEhlYXBQcmVkaWN0aW9uKCkpKTsKICAgICB9CiAg
ICAgCiAgICAgb3V0LnByaW50KCJcbiIpOwpAQCAtMzA5LDcgKzI1Nyw3IEBAIHZvaWQgR3JhcGg6
OmR1bXBCbG9ja0hlYWRlcihQcmludFN0cmVhbSYKIHsKICAgICBCYXNpY0Jsb2NrKiBibG9jayA9
IG1fYmxvY2tzW2Jsb2NrSW5kZXhdLmdldCgpOwogCi0gICAgb3V0LnByaW50KHByZWZpeCwgIkJs
b2NrICMiLCBibG9ja0luZGV4LCAiICgiLCBhdChibG9jay0+YXQoMCkpLmNvZGVPcmlnaW4sICIp
OiAiLCBibG9jay0+aXNSZWFjaGFibGUgPyAiIiA6ICIoc2tpcHBlZCkiLCBibG9jay0+aXNPU1JU
YXJnZXQgPyAiIChPU1IgdGFyZ2V0KSIgOiAiIiwgIlxuIik7CisgICAgb3V0LnByaW50KHByZWZp
eCwgIkJsb2NrICMiLCBibG9ja0luZGV4LCAiICgiLCBibG9jay0+YXQoMCktPmNvZGVPcmlnaW4s
ICIpOiAiLCBibG9jay0+aXNSZWFjaGFibGUgPyAiIiA6ICIoc2tpcHBlZCkiLCBibG9jay0+aXNP
U1JUYXJnZXQgPyAiIChPU1IgdGFyZ2V0KSIgOiAiIiwgIlxuIik7CiAgICAgb3V0LnByaW50KHBy
ZWZpeCwgIiAgUHJlZGVjZXNzb3JzOiIpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYmxv
Y2stPm1fcHJlZGVjZXNzb3JzLnNpemUoKTsgKytpKQogICAgICAgICBvdXQucHJpbnQoIiAjIiwg
YmxvY2stPm1fcHJlZGVjZXNzb3JzW2ldKTsKQEAgLTMzMiwxNyArMjgwLDE2IEBAIHZvaWQgR3Jh
cGg6OmR1bXBCbG9ja0hlYWRlcihQcmludFN0cmVhbSYKICAgICB9CiAgICAgb3V0LnByaW50KHBy
ZWZpeCwgIiAgUGhpIE5vZGVzOiIpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYmxvY2st
PnBoaXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgTm9kZUluZGV4IHBoaU5vZGVJbmRleCA9IGJs
b2NrLT5waGlzW2ldOwotICAgICAgICBOb2RlJiBwaGlOb2RlID0gYXQocGhpTm9kZUluZGV4KTsK
LSAgICAgICAgaWYgKCFwaGlOb2RlLnNob3VsZEdlbmVyYXRlKCkgJiYgcGhpTm9kZUR1bXBNb2Rl
ID09IER1bXBMaXZlUGhpc09ubHkpCisgICAgICAgIE5vZGUqIHBoaU5vZGUgPSBibG9jay0+cGhp
c1tpXTsKKyAgICAgICAgaWYgKCFwaGlOb2RlLT5zaG91bGRHZW5lcmF0ZSgpICYmIHBoaU5vZGVE
dW1wTW9kZSA9PSBEdW1wTGl2ZVBoaXNPbmx5KQogICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgIG91dC5wcmludCgiIEAiLCBwaGlOb2RlSW5kZXgsICI8IiwgcGhpTm9kZS5yZWZDb3VudCgp
LCAiPi0+KCIpOwotICAgICAgICBpZiAocGhpTm9kZS5jaGlsZDEoKSkgewotICAgICAgICAgICAg
b3V0LnByaW50KCJAIiwgcGhpTm9kZS5jaGlsZDEoKS5pbmRleCgpKTsKLSAgICAgICAgICAgIGlm
IChwaGlOb2RlLmNoaWxkMigpKSB7Ci0gICAgICAgICAgICAgICAgb3V0LnByaW50KCIsIEAiLCBw
aGlOb2RlLmNoaWxkMigpLmluZGV4KCkpOwotICAgICAgICAgICAgICAgIGlmIChwaGlOb2RlLmNo
aWxkMygpKQotICAgICAgICAgICAgICAgICAgICBvdXQucHJpbnQoIiwgQCIsIHBoaU5vZGUuY2hp
bGQzKCkuaW5kZXgoKSk7CisgICAgICAgIG91dC5wcmludCgiIEAiLCBwaGlOb2RlLT5pbmRleCgp
LCAiPCIsIHBoaU5vZGUtPnJlZkNvdW50KCksICI+LT4oIik7CisgICAgICAgIGlmIChwaGlOb2Rl
LT5jaGlsZDEoKSkgeworICAgICAgICAgICAgb3V0LnByaW50KCJAIiwgcGhpTm9kZS0+Y2hpbGQx
KCktPmluZGV4KCkoKSk7CisgICAgICAgICAgICBpZiAocGhpTm9kZS0+Y2hpbGQyKCkpIHsKKyAg
ICAgICAgICAgICAgICBvdXQucHJpbnQoIiwgQCIsIHBoaU5vZGUtPmNoaWxkMigpLT5pbmRleCgp
KTsKKyAgICAgICAgICAgICAgICBpZiAocGhpTm9kZS0+Y2hpbGQzKCkpCisgICAgICAgICAgICAg
ICAgICAgIG91dC5wcmludCgiLCBAIiwgcGhpTm9kZS0+Y2hpbGQzKCktPmluZGV4KCkpOwogICAg
ICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIG91dC5wcmludCgiKSIsIGkgKyAxIDwgYmxv
Y2stPnBoaXMuc2l6ZSgpID8gIiwiIDogIiIpOwpAQCAtMzUyLDcgKzI5OSw3IEBAIHZvaWQgR3Jh
cGg6OmR1bXBCbG9ja0hlYWRlcihQcmludFN0cmVhbSYKIAogdm9pZCBHcmFwaDo6ZHVtcChQcmlu
dFN0cmVhbSYgb3V0KQogewotICAgIE5vZGVJbmRleCBsYXN0Tm9kZUluZGV4ID0gTm9Ob2RlOwor
ICAgIE5vZGUqIGxhc3ROb2RlID0gMDsKICAgICBmb3IgKHNpemVfdCBiID0gMDsgYiA8IG1fYmxv
Y2tzLnNpemUoKTsgKytiKSB7CiAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ibG9ja3Nb
Yl0uZ2V0KCk7CiAgICAgICAgIGlmICghYmxvY2spCkBAIC0zNjgsOSArMzE1LDkgQEAgdm9pZCBH
cmFwaDo6ZHVtcChQcmludFN0cmVhbSYgb3V0KQogICAgICAgICBkdW1wT3BlcmFuZHMoYmxvY2st
PnZhcmlhYmxlc0F0SGVhZCwgb3V0KTsKICAgICAgICAgb3V0LnByaW50KCJcbiIpOwogICAgICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGJsb2NrLT5zaXplKCk7ICsraSkgewotICAgICAgICAg
ICAgZHVtcENvZGVPcmlnaW4ob3V0LCAiIiwgbGFzdE5vZGVJbmRleCwgYmxvY2stPmF0KGkpKTsK
KyAgICAgICAgICAgIGR1bXBDb2RlT3JpZ2luKG91dCwgIiIsIGxhc3ROb2RlLCBibG9jay0+YXQo
aSkpOwogICAgICAgICAgICAgZHVtcChvdXQsICIiLCBibG9jay0+YXQoaSkpOwotICAgICAgICAg
ICAgbGFzdE5vZGVJbmRleCA9IGJsb2NrLT5hdChpKTsKKyAgICAgICAgICAgIGxhc3ROb2RlID0g
YmxvY2stPmF0KGkpOwogICAgICAgICB9CiAgICAgICAgIG91dC5wcmludCgiICB2YXJzIGFmdGVy
OiAiKTsKICAgICAgICAgaWYgKGJsb2NrLT5jZmFIYXNWaXNpdGVkKQpAQCAtMzg2LDQwICszMzMs
NDAgQEAgdm9pZCBHcmFwaDo6ZHVtcChQcmludFN0cmVhbSYgb3V0KQogCiAvLyBGSVhNRTogQ29u
dmVydCB0aGlzIHRvIGJlIGl0ZXJhdGl2ZSwgbm90IHJlY3Vyc2l2ZS4KICNkZWZpbmUgRE9fVE9f
Q0hJTERSRU4obm9kZSwgdGhpbmdUb0RvKSBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKLSAgICAgICAgTm9kZSYgX25vZGUgPSAobm9kZSk7ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgaWYgKF9ub2RlLmZsYWdzKCkgJiBOb2RlSGFz
VmFyQXJncykgeyAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgX2NoaWxkSWR4ID0gX25vZGUuZmlyc3RDaGlsZCgpOyAgICAgICAgICAgICAgIFwK
LSAgICAgICAgICAgICAgICAgX2NoaWxkSWR4IDwgX25vZGUuZmlyc3RDaGlsZCgpICsgX25vZGUu
bnVtQ2hpbGRyZW4oKTsgIFwKKyAgICAgICAgTm9kZSogX25vZGUgPSAobm9kZSk7ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgaWYgKF9ub2RlLT5m
bGFncygpICYgTm9kZUhhc1ZhckFyZ3MpIHsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgX2NoaWxkSWR4ID0gX25vZGUtPmZpcnN0Q2hpbGQoKTsg
ICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgX2NoaWxkSWR4IDwgX25vZGUtPmZpcnN0
Q2hpbGQoKSArIF9ub2RlLT5udW1DaGlsZHJlbigpOyBcCiAgICAgICAgICAgICAgICAgIF9jaGls
ZElkeCsrKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAg
ICAgICAgICAgICAgaWYgKCEhbV92YXJBcmdDaGlsZHJlbltfY2hpbGRJZHhdKSAgICAgICAgICAg
ICAgICAgICAgICBcCiAgICAgICAgICAgICAgICAgICAgIHRoaW5nVG9EbyhtX3ZhckFyZ0NoaWxk
cmVuW19jaGlsZElkeF0pOyAgICAgICAgICAgICBcCiAgICAgICAgICAgICB9ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAg
IH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCi0gICAgICAgICAgICBpZiAoIV9ub2RlLmNoaWxkMSgpKSB7ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgQVNTRVJUKCFfbm9k
ZS5jaGlsZDIoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAg
ICAgICAgICAgICAgICYmICFfbm9kZS5jaGlsZDMoKSk7ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCisgICAgICAgICAgICBpZiAoIV9ub2RlLT5jaGlsZDEoKSkgeyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgQVNTRVJUKCFfbm9kZS0+
Y2hpbGQyKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAg
ICAgICAgICAgICYmICFfbm9kZS0+Y2hpbGQzKCkpOyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCiAgICAgICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICB0aGlu
Z1RvRG8oX25vZGUuY2hpbGQxKCkpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
CisgICAgICAgICAgICB0aGluZ1RvRG8oX25vZGUtPmNoaWxkMSgpKTsgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBpZiAoIV9u
b2RlLmNoaWxkMigpKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0g
ICAgICAgICAgICAgICAgQVNTRVJUKCFfbm9kZS5jaGlsZDMoKSk7ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCisgICAgICAgICAgICBpZiAoIV9ub2RlLT5jaGlsZDIoKSkgeyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgQVNTRVJU
KCFfbm9kZS0+Y2hpbGQzKCkpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAg
ICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCiAgICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICB0aGluZ1RvRG8oX25v
ZGUuY2hpbGQyKCkpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAg
ICAgICB0aGluZ1RvRG8oX25vZGUtPmNoaWxkMigpKTsgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBpZiAoIV9ub2RlLmNoaWxk
MygpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAg
ICBpZiAoIV9ub2RlLT5jaGlsZDMoKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCiAgICAgICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICB0aGluZ1RvRG8oX25vZGUuY2hp
bGQzKCkpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICB0
aGluZ1RvRG8oX25vZGUtPmNoaWxkMygpKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCiAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCiAgICAgfSB3aGlsZSAoZmFsc2UpCiAKLXZvaWQgR3JhcGg6
OnJlZkNoaWxkcmVuKE5vZGVJbmRleCBvcCkKK3ZvaWQgR3JhcGg6OnJlZkNoaWxkcmVuKE5vZGUq
IG9wKQogewogICAgIERPX1RPX0NISUxEUkVOKGF0KG9wKSwgcmVmKTsKIH0KIAotdm9pZCBHcmFw
aDo6ZGVyZWZDaGlsZHJlbihOb2RlSW5kZXggb3ApCit2b2lkIEdyYXBoOjpkZXJlZkNoaWxkcmVu
KE5vZGUqIG9wKQogewogICAgIERPX1RPX0NISUxEUkVOKGF0KG9wKSwgZGVyZWYpOwogfQpAQCAt
NDMyLDEyICszNzksMTIgQEAgdm9pZCBHcmFwaDo6cHJlZGljdEFyZ3VtZW50VHlwZXMoKQogICAg
ICAgICBpZiAoIXByb2ZpbGUpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgCi0gICAg
ICAgIGF0KG1fYXJndW1lbnRzW2FyZ10pLnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5wcmVkaWN0KHBy
b2ZpbGUtPmNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbigpKTsKKyAgICAgICAgbV9hcmd1bWVudHNb
YXJnXS0+dmFyaWFibGVBY2Nlc3NEYXRhKCktPnByZWRpY3QocHJvZmlsZS0+Y29tcHV0ZVVwZGF0
ZWRQcmVkaWN0aW9uKCkpOwogICAgICAgICAKICNpZiBERkdfRU5BQkxFKERFQlVHX1ZFUkJPU0Up
CiAgICAgICAgIGRhdGFMb2coCiAgICAgICAgICAgICAiQXJndW1lbnQgWyIsIGFyZywgIl0gcHJl
ZGljdGlvbjogIiwKLSAgICAgICAgICAgIFNwZWN1bGF0aW9uRHVtcChhdChtX2FyZ3VtZW50c1th
cmddKS52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+cHJlZGljdGlvbigpKSwgIlxuIik7CisgICAgICAg
ICAgICBTcGVjdWxhdGlvbkR1bXAobV9hcmd1bWVudHNbYXJnXS0+dmFyaWFibGVBY2Nlc3NEYXRh
KCktPnByZWRpY3Rpb24oKSksICJcbiIpOwogI2VuZGlmCiAgICAgfQogfQpAQCAtNDU2LDUxICs0
MDMsNTQgQEAgdm9pZCBHcmFwaDo6aGFuZGxlU3VjY2Vzc29yKFZlY3RvcjxCbG9jawogdm9pZCBH
cmFwaDo6Y29sbGVjdEdhcmJhZ2UoKQogewogICAgIC8vIEZpcnN0IHJlc2V0IHRoZSBjb3VudHMg
dG8gMCBmb3IgYWxsIG5vZGVzLgotICAgIGZvciAodW5zaWduZWQgaSA9IHNpemUoKTsgaS0tOykK
LSAgICAgICAgYXQoaSkuc2V0UmVmQ291bnQoMCk7CisgICAgZm9yIChCbG9ja0luZGV4IGJsb2Nr
SW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9ibG9ja3Muc2l6ZSgpOyArK2Jsb2NrSW5kZXgpIHsK
KyAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2Jsb2Nrc1tibG9ja0luZGV4XS5nZXQoKTsK
KyAgICAgICAgaWYgKCFibG9jaykKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBmb3Ig
KHVuc2lnbmVkIGluZGV4SW5CbG9jayA9IGJsb2NrLT5zaXplKCk7IGluZGV4SW5CbG9jay0tOykK
KyAgICAgICAgICAgIGJsb2NrLT5hdChpbmRleEluQmxvY2spLT5zZXRSZWZDb3VudCgwKTsKKyAg
ICB9CiAgICAgCiAgICAgLy8gTm93IGZpbmQgdGhlIHJvb3RzOiB0aGUgbm9kZXMgdGhhdCBhcmUg
bXVzdC1nZW5lcmF0ZS4gU2V0IHRoZWlyIHJlZiBjb3VudHMgdG8KICAgICAvLyAxIGFuZCBwdXQg
dGhlbSBvbiB0aGUgd29ya2xpc3QuCi0gICAgVmVjdG9yPE5vZGVJbmRleCwgMTI4PiB3b3JrbGlz
dDsKKyAgICBWZWN0b3I8Tm9kZSosIDEyOD4gd29ya2xpc3Q7CiAgICAgZm9yIChCbG9ja0luZGV4
IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9ibG9ja3Muc2l6ZSgpOyArK2Jsb2NrSW5k
ZXgpIHsKICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2Jsb2Nrc1tibG9ja0luZGV4XS5n
ZXQoKTsKICAgICAgICAgaWYgKCFibG9jaykKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAg
ICBmb3IgKHVuc2lnbmVkIGluZGV4SW5CbG9jayA9IGJsb2NrLT5zaXplKCk7IGluZGV4SW5CbG9j
ay0tOykgewotICAgICAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRleCA9IGJsb2NrLT5hdChpbmRl
eEluQmxvY2spOwotICAgICAgICAgICAgTm9kZSYgbm9kZSA9IGF0KG5vZGVJbmRleCk7Ci0gICAg
ICAgICAgICBpZiAoIShub2RlLmZsYWdzKCkgJiBOb2RlTXVzdEdlbmVyYXRlKSkKKyAgICAgICAg
ICAgIE5vZGUqIG5vZGUgPSBibG9jay0+YXQoaW5kZXhJbkJsb2NrKTsKKyAgICAgICAgICAgIGlm
ICghKG5vZGUtPmZsYWdzKCkgJiBOb2RlTXVzdEdlbmVyYXRlKSkKICAgICAgICAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgICAgIG5vZGUuc2V0UmVmQ291bnQoMSk7Ci0gICAgICAgICAgICB3
b3JrbGlzdC5hcHBlbmQobm9kZUluZGV4KTsKKyAgICAgICAgICAgIG5vZGUtPnNldFJlZkNvdW50
KDEpOworICAgICAgICAgICAgd29ya2xpc3QuYXBwZW5kKG5vZGUpOwogICAgICAgICB9CiAgICAg
fQogICAgIAogICAgIHdoaWxlICghd29ya2xpc3QuaXNFbXB0eSgpKSB7Ci0gICAgICAgIE5vZGVJ
bmRleCBub2RlSW5kZXggPSB3b3JrbGlzdC5sYXN0KCk7CisgICAgICAgIE5vZGUqIG5vZGUgPSB3
b3JrbGlzdC5sYXN0KCk7CiAgICAgICAgIHdvcmtsaXN0LnJlbW92ZUxhc3QoKTsKLSAgICAgICAg
Tm9kZSYgbm9kZSA9IGF0KG5vZGVJbmRleCk7Ci0gICAgICAgIEFTU0VSVChub2RlLnNob3VsZEdl
bmVyYXRlKCkpOyAvLyBJdCBzaG91bGQgbm90IGJlIG9uIHRoZSB3b3JrbGlzdCB1bmxlc3MgaXQn
cyByZWYnZWQuCi0gICAgICAgIGlmIChub2RlLmZsYWdzKCkgJiBOb2RlSGFzVmFyQXJncykgewot
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBjaGlsZElkeCA9IG5vZGUuZmlyc3RDaGlsZCgpOwot
ICAgICAgICAgICAgICAgICBjaGlsZElkeCA8IG5vZGUuZmlyc3RDaGlsZCgpICsgbm9kZS5udW1D
aGlsZHJlbigpOworICAgICAgICBBU1NFUlQobm9kZS0+c2hvdWxkR2VuZXJhdGUoKSk7IC8vIEl0
IHNob3VsZCBub3QgYmUgb24gdGhlIHdvcmtsaXN0IHVubGVzcyBpdCdzIHJlZidlZC4KKyAgICAg
ICAgaWYgKG5vZGUtPmZsYWdzKCkgJiBOb2RlSGFzVmFyQXJncykgeworICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBjaGlsZElkeCA9IG5vZGUtPmZpcnN0Q2hpbGQoKTsKKyAgICAgICAgICAgICAg
ICAgY2hpbGRJZHggPCBub2RlLT5maXJzdENoaWxkKCkgKyBub2RlLT5udW1DaGlsZHJlbigpOwog
ICAgICAgICAgICAgICAgICArK2NoaWxkSWR4KSB7CiAgICAgICAgICAgICAgICAgaWYgKCFtX3Zh
ckFyZ0NoaWxkcmVuW2NoaWxkSWR4XSkKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0g
ICAgICAgICAgICAgICAgTm9kZUluZGV4IGNoaWxkTm9kZUluZGV4ID0gbV92YXJBcmdDaGlsZHJl
bltjaGlsZElkeF0uaW5kZXgoKTsKLSAgICAgICAgICAgICAgICBpZiAoYXQoY2hpbGROb2RlSW5k
ZXgpLnBvc3RmaXhSZWYoKSkKKyAgICAgICAgICAgICAgICBOb2RlKiBjaGlsZE5vZGUgPSBtX3Zh
ckFyZ0NoaWxkcmVuW2NoaWxkSWR4XS5ub2RlKCk7CisgICAgICAgICAgICAgICAgaWYgKGNoaWxk
Tm9kZS0+cG9zdGZpeFJlZigpKQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAg
ICAgICAgICAgICB3b3JrbGlzdC5hcHBlbmQoY2hpbGROb2RlSW5kZXgpOworICAgICAgICAgICAg
ICAgIHdvcmtsaXN0LmFwcGVuZChjaGlsZE5vZGUpOwogICAgICAgICAgICAgfQotICAgICAgICB9
IGVsc2UgaWYgKG5vZGUuY2hpbGQxKCkpIHsKLSAgICAgICAgICAgIGlmICghYXQobm9kZS5jaGls
ZDEoKSkucG9zdGZpeFJlZigpKQotICAgICAgICAgICAgICAgIHdvcmtsaXN0LmFwcGVuZChub2Rl
LmNoaWxkMSgpLmluZGV4KCkpOwotICAgICAgICAgICAgaWYgKG5vZGUuY2hpbGQyKCkpIHsKLSAg
ICAgICAgICAgICAgICBpZiAoIWF0KG5vZGUuY2hpbGQyKCkpLnBvc3RmaXhSZWYoKSkKLSAgICAg
ICAgICAgICAgICAgICAgd29ya2xpc3QuYXBwZW5kKG5vZGUuY2hpbGQyKCkuaW5kZXgoKSk7Ci0g
ICAgICAgICAgICAgICAgaWYgKG5vZGUuY2hpbGQzKCkpIHsKLSAgICAgICAgICAgICAgICAgICAg
aWYgKCFhdChub2RlLmNoaWxkMygpKS5wb3N0Zml4UmVmKCkpCi0gICAgICAgICAgICAgICAgICAg
ICAgICB3b3JrbGlzdC5hcHBlbmQobm9kZS5jaGlsZDMoKS5pbmRleCgpKTsKKyAgICAgICAgfSBl
bHNlIGlmIChub2RlLT5jaGlsZDEoKSkgeworICAgICAgICAgICAgaWYgKCFub2RlLT5jaGlsZDEo
KS0+cG9zdGZpeFJlZigpKQorICAgICAgICAgICAgICAgIHdvcmtsaXN0LmFwcGVuZChub2RlLT5j
aGlsZDEoKS5ub2RlKCkpOworICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMigpKSB7CisgICAg
ICAgICAgICAgICAgaWYgKCFub2RlLT5jaGlsZDIoKS0+cG9zdGZpeFJlZigpKQorICAgICAgICAg
ICAgICAgICAgICB3b3JrbGlzdC5hcHBlbmQobm9kZS0+Y2hpbGQyKCkubm9kZSgpKTsKKyAgICAg
ICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQzKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KCFub2RlLT5jaGlsZDMoKS0+cG9zdGZpeFJlZigpKQorICAgICAgICAgICAgICAgICAgICAgICAg
d29ya2xpc3QuYXBwZW5kKG5vZGUtPmNoaWxkMygpLm5vZGUoKSk7CiAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC01MTksMTQgKzQ2OSwxNCBAQCB2b2lkIEdy
YXBoOjpkZXRlcm1pbmVSZWFjaGFiaWxpdHkoKQogICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9
IG1fYmxvY2tzW2luZGV4XS5nZXQoKTsKICAgICAgICAgQVNTRVJUKGJsb2NrLT5pc0xpbmtlZCk7
CiAgICAgICAgIAotICAgICAgICBOb2RlJiBub2RlID0gYXQoYmxvY2stPmxhc3QoKSk7Ci0gICAg
ICAgIEFTU0VSVChub2RlLmlzVGVybWluYWwoKSk7CisgICAgICAgIE5vZGUqIG5vZGUgPSBibG9j
ay0+bGFzdCgpOworICAgICAgICBBU1NFUlQobm9kZS0+aXNUZXJtaW5hbCgpKTsKICAgICAgICAg
Ci0gICAgICAgIGlmIChub2RlLmlzSnVtcCgpKQotICAgICAgICAgICAgaGFuZGxlU3VjY2Vzc29y
KHdvcmtsaXN0LCBpbmRleCwgbm9kZS50YWtlbkJsb2NrSW5kZXgoKSk7Ci0gICAgICAgIGVsc2Ug
aWYgKG5vZGUuaXNCcmFuY2goKSkgewotICAgICAgICAgICAgaGFuZGxlU3VjY2Vzc29yKHdvcmts
aXN0LCBpbmRleCwgbm9kZS50YWtlbkJsb2NrSW5kZXgoKSk7Ci0gICAgICAgICAgICBoYW5kbGVT
dWNjZXNzb3Iod29ya2xpc3QsIGluZGV4LCBub2RlLm5vdFRha2VuQmxvY2tJbmRleCgpKTsKKyAg
ICAgICAgaWYgKG5vZGUtPmlzSnVtcCgpKQorICAgICAgICAgICAgaGFuZGxlU3VjY2Vzc29yKHdv
cmtsaXN0LCBpbmRleCwgbm9kZS0+dGFrZW5CbG9ja0luZGV4KCkpOworICAgICAgICBlbHNlIGlm
IChub2RlLT5pc0JyYW5jaCgpKSB7CisgICAgICAgICAgICBoYW5kbGVTdWNjZXNzb3Iod29ya2xp
c3QsIGluZGV4LCBub2RlLT50YWtlbkJsb2NrSW5kZXgoKSk7CisgICAgICAgICAgICBoYW5kbGVT
dWNjZXNzb3Iod29ya2xpc3QsIGluZGV4LCBub2RlLT5ub3RUYWtlbkJsb2NrSW5kZXgoKSk7CiAg
ICAgICAgIH0KICAgICB9CiB9CkBAIC01NDYsOCArNDk2LDEzIEBAIHZvaWQgR3JhcGg6OnJlc2V0
UmVhY2hhYmlsaXR5KCkKIAogdm9pZCBHcmFwaDo6cmVzZXRFeGl0U3RhdGVzKCkKIHsKLSAgICBm
b3IgKHVuc2lnbmVkIGkgPSBzaXplKCk7IGktLTspCi0gICAgICAgIGF0KGkpLnNldENhbkV4aXQo
dHJ1ZSk7CisgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwg
bV9ibG9ja3Muc2l6ZSgpOyArK2Jsb2NrSW5kZXgpIHsKKyAgICAgICAgQmFzaWNCbG9jayogYmxv
Y2sgPSBtX2Jsb2Nrc1tibG9ja0luZGV4XS5nZXQoKTsKKyAgICAgICAgaWYgKCFibG9jaykKKyAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBmb3IgKHVuc2lnbmVkIGluZGV4SW5CbG9jayA9
IGJsb2NrLT5zaXplKCk7IGluZGV4SW5CbG9jay0tOykKKyAgICAgICAgICAgIGJsb2NrLT5hdChp
bmRleEluQmxvY2spLT5zZXRDYW5FeGl0KHRydWUpOworICAgIH0KIH0KIAogfSB9IC8vIG5hbWVz
cGFjZSBKU0M6OkRGRwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkocmV2
aXNpb24gMTQwOTA0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIw
MTIsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC0zNSw3ICszNSw5IEBACiAjaW5jbHVkZSAiREZHQXNzZW1ibHlI
ZWxwZXJzLmgiCiAjaW5jbHVkZSAiREZHQmFzaWNCbG9jay5oIgogI2luY2x1ZGUgIkRGR0RvbWlu
YXRvcnMuaCIKKyNpbmNsdWRlICJERkdMb25nTGl2ZWRTdGF0ZS5oIgogI2luY2x1ZGUgIkRGR05v
ZGUuaCIKKyNpbmNsdWRlICJERkdOb2RlQWxsb2NhdG9yLmgiCiAjaW5jbHVkZSAiREZHVmFyaWFk
aWNGdW5jdGlvbi5oIgogI2luY2x1ZGUgIkpTU3RhY2suaCIKICNpbmNsdWRlICJNZXRob2RPZkdl
dHRpbmdBVmFsdWVQcm9maWxlLmgiCkBAIC04Myw1NCArODUsNDggQEAgZW51bSBBZGRTcGVjdWxh
dGlvbk1vZGUgewogLy8KIC8vID09PSBHcmFwaCA9PT0KIC8vCi0vLyBUaGUgZGF0YWZsb3cgZ3Jh
cGggaXMgYW4gb3JkZXJlZCB2ZWN0b3Igb2Ygbm9kZXMuCiAvLyBUaGUgb3JkZXIgbWF5IGJlIHNp
Z25pZmljYW50IGZvciBub2RlcyB3aXRoIHNpZGUtZWZmZWN0cyAocHJvcGVydHkgYWNjZXNzZXMs
IHZhbHVlIGNvbnZlcnNpb25zKS4KIC8vIE5vZGVzIHRoYXQgYXJlICdkZWFkJyByZW1haW4gaW4g
dGhlIHZlY3RvciB3aXRoIHJlZkNvdW50IDAuCi1jbGFzcyBHcmFwaCA6IHB1YmxpYyBWZWN0b3I8
Tm9kZSwgNjQ+IHsKK2NsYXNzIEdyYXBoIHsKIHB1YmxpYzoKICAgICBHcmFwaChKU0dsb2JhbERh
dGEmLCBDb2RlQmxvY2sqLCB1bnNpZ25lZCBvc3JFbnRyeUJ5dGVjb2RlSW5kZXgsIGNvbnN0IE9w
ZXJhbmRzPEpTVmFsdWU+JiBtdXN0SGFuZGxlVmFsdWVzKTsKLSAgICAKLSAgICB1c2luZyBWZWN0
b3I8Tm9kZSwgNjQ+OjpvcGVyYXRvcltdOwotICAgIHVzaW5nIFZlY3RvcjxOb2RlLCA2ND46OmF0
OwotICAgIAotICAgIE5vZGUmIG9wZXJhdG9yW10oRWRnZSBub2RlVXNlKSB7IHJldHVybiBhdChu
b2RlVXNlLmluZGV4KCkpOyB9Ci0gICAgY29uc3QgTm9kZSYgb3BlcmF0b3JbXShFZGdlIG5vZGVV
c2UpIGNvbnN0IHsgcmV0dXJuIGF0KG5vZGVVc2UuaW5kZXgoKSk7IH0KLSAgICAKLSAgICBOb2Rl
JiBhdChFZGdlIG5vZGVVc2UpIHsgcmV0dXJuIGF0KG5vZGVVc2UuaW5kZXgoKSk7IH0KLSAgICBj
b25zdCBOb2RlJiBhdChFZGdlIG5vZGVVc2UpIGNvbnN0IHsgcmV0dXJuIGF0KG5vZGVVc2UuaW5k
ZXgoKSk7IH0KKyAgICB+R3JhcGgoKTsKICAgICAKICAgICAvLyBNYXJrIGEgbm9kZSBhcyBiZWlu
ZyByZWZlcmVuY2VkLgotICAgIE5vZGVJbmRleCByZWYoTm9kZUluZGV4IG5vZGVJbmRleCkKKyAg
ICBOb2RlKiByZWYoTm9kZSogbm9kZSkKICAgICB7Ci0gICAgICAgIE5vZGUmIG5vZGUgPSBhdChu
b2RlSW5kZXgpOwogICAgICAgICAvLyBJZiB0aGUgdmFsdWUgKGJlZm9yZSBpbmNyZW1lbnRpbmcp
IHdhcyBhdCByZWZDb3VudCB6ZXJvIHRoZW4gd2UgbmVlZCB0byByZWYgaXRzIGNoaWxkcmVuLgot
ICAgICAgICBpZiAoIW5vZGUucG9zdGZpeFJlZigpKQotICAgICAgICAgICAgcmVmQ2hpbGRyZW4o
bm9kZUluZGV4KTsKLSAgICAgICAgcmV0dXJuIG5vZGVJbmRleDsKKyAgICAgICAgaWYgKCFub2Rl
LT5wb3N0Zml4UmVmKCkpCisgICAgICAgICAgICByZWZDaGlsZHJlbihub2RlKTsKKyAgICAgICAg
cmV0dXJuIG5vZGU7CiAgICAgfQogICAgIEVkZ2UgcmVmKEVkZ2Ugbm9kZVVzZSkKICAgICB7Ci0g
ICAgICAgIHJlZihub2RlVXNlLmluZGV4KCkpOworICAgICAgICByZWYobm9kZVVzZS5ub2RlKCkp
OwogICAgICAgICByZXR1cm4gbm9kZVVzZTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBkZXJlZihO
b2RlSW5kZXggbm9kZUluZGV4KQorICAgIHZvaWQgZGVyZWYoTm9kZSogbm9kZSkKICAgICB7Ci0g
ICAgICAgIGlmIChhdChub2RlSW5kZXgpLnBvc3RmaXhEZXJlZigpID09IDEpCi0gICAgICAgICAg
ICBkZXJlZkNoaWxkcmVuKG5vZGVJbmRleCk7CisjaWYgIUFTU0VSVF9ESVNBQkxFRAorICAgICAg
ICBpZiAoIW5vZGUtPnJlZkNvdW50KCkpCisgICAgICAgICAgICBkdW1wKCk7CisjZW5kaWYKKyAg
ICAgICAgaWYgKG5vZGUtPnBvc3RmaXhEZXJlZigpID09IDEpCisgICAgICAgICAgICBkZXJlZkNo
aWxkcmVuKG5vZGUpOwogICAgIH0KICAgICB2b2lkIGRlcmVmKEVkZ2Ugbm9kZVVzZSkKICAgICB7
Ci0gICAgICAgIGRlcmVmKG5vZGVVc2UuaW5kZXgoKSk7CisgICAgICAgIGRlcmVmKG5vZGVVc2Uu
bm9kZSgpKTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBjaGFuZ2VJbmRleChFZGdlJiBlZGdlLCBO
b2RlSW5kZXggbmV3SW5kZXgsIGJvb2wgY2hhbmdlUmVmID0gdHJ1ZSkKKyAgICB2b2lkIGNoYW5n
ZUNoaWxkKEVkZ2UmIGVkZ2UsIE5vZGUqIG5ld05vZGUsIGJvb2wgY2hhbmdlUmVmID0gdHJ1ZSkK
ICAgICB7CiAgICAgICAgIGlmIChjaGFuZ2VSZWYpIHsKLSAgICAgICAgICAgIHJlZihuZXdJbmRl
eCk7Ci0gICAgICAgICAgICBkZXJlZihlZGdlLmluZGV4KCkpOworICAgICAgICAgICAgcmVmKG5l
d05vZGUpOworICAgICAgICAgICAgZGVyZWYoZWRnZS5ub2RlKCkpOwogICAgICAgICB9Ci0gICAg
ICAgIGVkZ2Uuc2V0SW5kZXgobmV3SW5kZXgpOworICAgICAgICBlZGdlLnNldE5vZGUobmV3Tm9k
ZSk7CiAgICAgfQogICAgIAogICAgIHZvaWQgY2hhbmdlRWRnZShFZGdlJiBlZGdlLCBFZGdlIG5l
d0VkZ2UsIGJvb2wgY2hhbmdlUmVmID0gdHJ1ZSkKQEAgLTE0MiwxMSArMTM4LDExIEBAIHB1Ymxp
YzoKICAgICAgICAgZWRnZSA9IG5ld0VkZ2U7CiAgICAgfQogICAgIAotICAgIHZvaWQgY29tcGFy
ZUFuZFN3YXAoRWRnZSYgZWRnZSwgTm9kZUluZGV4IG9sZEluZGV4LCBOb2RlSW5kZXggbmV3SW5k
ZXgsIGJvb2wgY2hhbmdlUmVmKQorICAgIHZvaWQgY29tcGFyZUFuZFN3YXAoRWRnZSYgZWRnZSwg
Tm9kZSogb2xkTm9kZSwgTm9kZSogbmV3Tm9kZSwgYm9vbCBjaGFuZ2VSZWYpCiAgICAgewotICAg
ICAgICBpZiAoZWRnZS5pbmRleCgpICE9IG9sZEluZGV4KQorICAgICAgICBpZiAoZWRnZS5ub2Rl
KCkgIT0gb2xkTm9kZSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgY2hhbmdlSW5kZXgo
ZWRnZSwgbmV3SW5kZXgsIGNoYW5nZVJlZik7CisgICAgICAgIGNoYW5nZUNoaWxkKGVkZ2UsIG5l
d05vZGUsIGNoYW5nZVJlZik7CiAgICAgfQogICAgIAogICAgIHZvaWQgY29tcGFyZUFuZFN3YXAo
RWRnZSYgZWRnZSwgRWRnZSBvbGRFZGdlLCBFZGdlIG5ld0VkZ2UsIGJvb2wgY2hhbmdlUmVmKQpA
QCAtMTU2LDQ0ICsxNTIsMjkgQEAgcHVibGljOgogICAgICAgICBjaGFuZ2VFZGdlKGVkZ2UsIG5l
d0VkZ2UsIGNoYW5nZVJlZik7CiAgICAgfQogICAgIAotICAgIHZvaWQgY2xlYXJBbmREZXJlZkNo
aWxkMShOb2RlJiBub2RlKQotICAgIHsKLSAgICAgICAgaWYgKCFub2RlLmNoaWxkMSgpKQotICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICBkZXJlZihub2RlLmNoaWxkMSgpKTsKLSAgICAgICAg
bm9kZS5jaGlsZHJlbi5jaGlsZDEoKSA9IEVkZ2UoKTsKLSAgICB9Ci0KLSAgICB2b2lkIGNsZWFy
QW5kRGVyZWZDaGlsZDIoTm9kZSYgbm9kZSkKLSAgICB7Ci0gICAgICAgIGlmICghbm9kZS5jaGls
ZDIoKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgZGVyZWYobm9kZS5jaGlsZDIoKSk7
Ci0gICAgICAgIG5vZGUuY2hpbGRyZW4uY2hpbGQyKCkgPSBFZGdlKCk7Ci0gICAgfQotCi0gICAg
dm9pZCBjbGVhckFuZERlcmVmQ2hpbGQzKE5vZGUmIG5vZGUpCisgICAgdm9pZCBjbGVhckFuZERl
cmVmQ2hpbGQoTm9kZSogbm9kZSwgdW5zaWduZWQgaW5kZXgpCiAgICAgewotICAgICAgICBpZiAo
IW5vZGUuY2hpbGQzKCkpCisgICAgICAgIGlmICghbm9kZS0+Y2hpbGRyZW4uY2hpbGQoaW5kZXgp
KQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBkZXJlZihub2RlLmNoaWxkMygpKTsKLSAg
ICAgICAgbm9kZS5jaGlsZHJlbi5jaGlsZDMoKSA9IEVkZ2UoKTsKKyAgICAgICAgZGVyZWYobm9k
ZS0+Y2hpbGRyZW4uY2hpbGQoaW5kZXgpKTsKKyAgICAgICAgbm9kZS0+Y2hpbGRyZW4uc2V0Q2hp
bGQoaW5kZXgsIEVkZ2UoKSk7CiAgICAgfQorICAgIHZvaWQgY2xlYXJBbmREZXJlZkNoaWxkMShO
b2RlKiBub2RlKSB7IGNsZWFyQW5kRGVyZWZDaGlsZChub2RlLCAwKTsgfQorICAgIHZvaWQgY2xl
YXJBbmREZXJlZkNoaWxkMihOb2RlKiBub2RlKSB7IGNsZWFyQW5kRGVyZWZDaGlsZChub2RlLCAx
KTsgfQorICAgIHZvaWQgY2xlYXJBbmREZXJlZkNoaWxkMyhOb2RlKiBub2RlKSB7IGNsZWFyQW5k
RGVyZWZDaGlsZChub2RlLCAyKTsgfQogICAgIAogI2RlZmluZSBERkdfREVGSU5FX0FERF9OT0RF
KHRlbXBsYXRlUHJlLCB0ZW1wbGF0ZVBvc3QsIHR5cGVQYXJhbXMsIHZhbHVlUGFyYW1zQ29tbWEs
IHZhbHVlUGFyYW1zLCB2YWx1ZUFyZ3MpIFwKLSAgICB0ZW1wbGF0ZVByZSB0eXBlUGFyYW1zIHRl
bXBsYXRlUG9zdCBOb2RlSW5kZXggYWRkTm9kZShSZWZDaGlsZHJlbk1vZGUgcmVmQ2hpbGRyZW5N
b2RlLCBSZWZOb2RlTW9kZSByZWZOb2RlTW9kZSwgU3BlY3VsYXRlZFR5cGUgdHlwZSB2YWx1ZVBh
cmFtc0NvbW1hIHZhbHVlUGFyYW1zKSBcCisgICAgdGVtcGxhdGVQcmUgdHlwZVBhcmFtcyB0ZW1w
bGF0ZVBvc3QgTm9kZSogYWRkTm9kZShSZWZDaGlsZHJlbk1vZGUgcmVmQ2hpbGRyZW5Nb2RlLCBS
ZWZOb2RlTW9kZSByZWZOb2RlTW9kZSwgU3BlY3VsYXRlZFR5cGUgdHlwZSB2YWx1ZVBhcmFtc0Nv
bW1hIHZhbHVlUGFyYW1zKSBcCiAgICAgeyBcCi0gICAgICAgIE5vZGUgbm9kZSA9IE5vZGUodmFs
dWVBcmdzKTsgXAotICAgICAgICBub2RlLnByZWRpY3QodHlwZSk7IFwKLSAgICAgICAgaWYgKG5v
ZGUuZmxhZ3MoKSAmIE5vZGVNdXN0R2VuZXJhdGUpIFwKLSAgICAgICAgICAgIG5vZGUucmVmKCk7
IFwKKyAgICAgICAgTm9kZSogbm9kZSA9IG5ldyAobV9hbGxvY2F0b3IpIE5vZGUodmFsdWVBcmdz
KTsgXAorICAgICAgICBub2RlLT5wcmVkaWN0KHR5cGUpOyBcCisgICAgICAgIGlmIChub2RlLT5m
bGFncygpICYgTm9kZU11c3RHZW5lcmF0ZSkgXAorICAgICAgICAgICAgbm9kZS0+cmVmKCk7IFwK
ICAgICAgICAgaWYgKHJlZk5vZGVNb2RlID09IFJlZk5vZGUpIFwKLSAgICAgICAgICAgIG5vZGUu
cmVmKCk7IFwKLSAgICAgICAgTm9kZUluZGV4IHJlc3VsdCA9IHNpemUoKTsgXAotICAgICAgICBh
cHBlbmQobm9kZSk7IFwKKyAgICAgICAgICAgIG5vZGUtPnJlZigpOyBcCiAgICAgICAgIGlmIChy
ZWZDaGlsZHJlbk1vZGUgPT0gUmVmQ2hpbGRyZW4pIFwKLSAgICAgICAgICAgIHJlZkNoaWxkcmVu
KHJlc3VsdCk7IFwKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsgXAorICAgICAgICAgICAgcmVmQ2hp
bGRyZW4obm9kZSk7IFwKKyAgICAgICAgcmV0dXJuIG5vZGU7IFwKICAgICB9CiAgICAgREZHX1ZB
UklBRElDX1RFTVBMQVRFX0ZVTkNUSU9OKERGR19ERUZJTkVfQUREX05PREUpCiAjdW5kZWYgREZH
X0RFRklORV9BRERfTk9ERQpAQCAtMjA0LDE0ICsxODUsMTQgQEAgcHVibGljOgogICAgIC8vIHJl
ZmVyZW5jZSBjb3VudHMgYWNjb3JkaW5nIHRvIHJlYWNoYWJpbGl0eS4KICAgICB2b2lkIGNvbGxl
Y3RHYXJiYWdlKCk7CiAgICAgCi0gICAgdm9pZCBjb252ZXJ0VG9Db25zdGFudChOb2RlSW5kZXgg
bm9kZUluZGV4LCB1bnNpZ25lZCBjb25zdGFudE51bWJlcikKKyAgICB2b2lkIGNvbnZlcnRUb0Nv
bnN0YW50KE5vZGUqIG5vZGUsIHVuc2lnbmVkIGNvbnN0YW50TnVtYmVyKQogICAgIHsKLSAgICAg
ICAgYXQobm9kZUluZGV4KS5jb252ZXJ0VG9Db25zdGFudChjb25zdGFudE51bWJlcik7CisgICAg
ICAgIG5vZGUtPmNvbnZlcnRUb0NvbnN0YW50KGNvbnN0YW50TnVtYmVyKTsKICAgICB9CiAgICAg
Ci0gICAgdm9pZCBjb252ZXJ0VG9Db25zdGFudChOb2RlSW5kZXggbm9kZUluZGV4LCBKU1ZhbHVl
IHZhbHVlKQorICAgIHZvaWQgY29udmVydFRvQ29uc3RhbnQoTm9kZSogbm9kZSwgSlNWYWx1ZSB2
YWx1ZSkKICAgICB7Ci0gICAgICAgIGNvbnZlcnRUb0NvbnN0YW50KG5vZGVJbmRleCwgbV9jb2Rl
QmxvY2stPmFkZE9yRmluZENvbnN0YW50KHZhbHVlKSk7CisgICAgICAgIGNvbnZlcnRUb0NvbnN0
YW50KG5vZGUsIG1fY29kZUJsb2NrLT5hZGRPckZpbmRDb25zdGFudCh2YWx1ZSkpOwogICAgIH0K
IAogICAgIC8vIENvZGVCbG9jayBpcyBvcHRpb25hbCwgYnV0IG1heSBhbGxvdyBhZGRpdGlvbmFs
IGluZm9ybWF0aW9uIHRvIGJlIGR1bXBlZCAoZS5nLiBJZGVudGlmaWVyIG5hbWVzKS4KQEAgLTIx
OSwxMjUgKzIwMCwxMjAgQEAgcHVibGljOgogICAgIGVudW0gUGhpTm9kZUR1bXBNb2RlIHsgRHVt
cExpdmVQaGlzT25seSwgRHVtcEFsbFBoaXMgfTsKICAgICB2b2lkIGR1bXBCbG9ja0hlYWRlcihQ
cmludFN0cmVhbSYsIGNvbnN0IGNoYXIqIHByZWZpeCwgQmxvY2tJbmRleCwgUGhpTm9kZUR1bXBN
b2RlKTsKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mLCBFZGdlKTsKLSAgICB2b2lkIGR1bXAo
UHJpbnRTdHJlYW0mLCBjb25zdCBjaGFyKiBwcmVmaXgsIE5vZGVJbmRleCk7Ci0gICAgc3RhdGlj
IGludCBhbW91bnRPZk5vZGVXaGl0ZVNwYWNlKE5vZGUmKTsKLSAgICBzdGF0aWMgdm9pZCBwcmlu
dE5vZGVXaGl0ZVNwYWNlKFByaW50U3RyZWFtJiwgTm9kZSYpOworICAgIHZvaWQgZHVtcChQcmlu
dFN0cmVhbSYsIGNvbnN0IGNoYXIqIHByZWZpeCwgTm9kZSopOworICAgIHN0YXRpYyBpbnQgYW1v
dW50T2ZOb2RlV2hpdGVTcGFjZShOb2RlKik7CisgICAgc3RhdGljIHZvaWQgcHJpbnROb2RlV2hp
dGVTcGFjZShQcmludFN0cmVhbSYsIE5vZGUqKTsKIAogICAgIC8vIER1bXAgdGhlIGNvZGUgb3Jp
Z2luIG9mIHRoZSBnaXZlbiBub2RlIGFzIGEgZGlmZiBmcm9tIHRoZSBjb2RlIG9yaWdpbiBvZiB0
aGUKICAgICAvLyBwcmVjZWRpbmcgbm9kZS4gUmV0dXJucyB0cnVlIGlmIGFueXRoaW5nIHdhcyBw
cmludGVkLgotICAgIGJvb2wgZHVtcENvZGVPcmlnaW4oUHJpbnRTdHJlYW0mLCBjb25zdCBjaGFy
KiBwcmVmaXgsIE5vZGVJbmRleCwgTm9kZUluZGV4KTsKKyAgICBib29sIGR1bXBDb2RlT3JpZ2lu
KFByaW50U3RyZWFtJiwgY29uc3QgY2hhciogcHJlZml4LCBOb2RlKiBwcmV2aW91c05vZGUsIE5v
ZGUqIGN1cnJlbnROb2RlKTsKIAogICAgIEJsb2NrSW5kZXggYmxvY2tJbmRleEZvckJ5dGVjb2Rl
T2Zmc2V0KFZlY3RvcjxCbG9ja0luZGV4PiYgYmxvY2tzLCB1bnNpZ25lZCBieXRlY29kZUJlZ2lu
KTsKIAotICAgIFNwZWN1bGF0ZWRUeXBlIGdldEpTQ29uc3RhbnRTcGVjdWxhdGlvbihOb2RlJiBu
b2RlKQorICAgIFNwZWN1bGF0ZWRUeXBlIGdldEpTQ29uc3RhbnRTcGVjdWxhdGlvbihOb2RlKiBu
b2RlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIHNwZWN1bGF0aW9uRnJvbVZhbHVlKG5vZGUudmFs
dWVPZkpTQ29uc3RhbnQobV9jb2RlQmxvY2spKTsKKyAgICAgICAgcmV0dXJuIHNwZWN1bGF0aW9u
RnJvbVZhbHVlKG5vZGUtPnZhbHVlT2ZKU0NvbnN0YW50KG1fY29kZUJsb2NrKSk7CiAgICAgfQog
ICAgIAotICAgIEFkZFNwZWN1bGF0aW9uTW9kZSBhZGRTcGVjdWxhdGlvbk1vZGUoTm9kZSYgYWRk
LCBib29sIGxlZnRTaG91bGRTcGVjdWxhdGVJbnRlZ2VyLCBib29sIHJpZ2h0U2hvdWxkU3BlY3Vs
YXRlSW50ZWdlcikKKyAgICBBZGRTcGVjdWxhdGlvbk1vZGUgYWRkU3BlY3VsYXRpb25Nb2RlKE5v
ZGUqIGFkZCwgYm9vbCBsZWZ0U2hvdWxkU3BlY3VsYXRlSW50ZWdlciwgYm9vbCByaWdodFNob3Vs
ZFNwZWN1bGF0ZUludGVnZXIpCiAgICAgewotICAgICAgICBBU1NFUlQoYWRkLm9wKCkgPT0gVmFs
dWVBZGQgfHwgYWRkLm9wKCkgPT0gQXJpdGhBZGQgfHwgYWRkLm9wKCkgPT0gQXJpdGhTdWIpOwor
ICAgICAgICBBU1NFUlQoYWRkLT5vcCgpID09IFZhbHVlQWRkIHx8IGFkZC0+b3AoKSA9PSBBcml0
aEFkZCB8fCBhZGQtPm9wKCkgPT0gQXJpdGhTdWIpOwogICAgICAgICAKLSAgICAgICAgTm9kZSYg
bGVmdCA9IGF0KGFkZC5jaGlsZDEoKSk7Ci0gICAgICAgIE5vZGUmIHJpZ2h0ID0gYXQoYWRkLmNo
aWxkMigpKTsKKyAgICAgICAgTm9kZSogbGVmdCA9IGFkZC0+Y2hpbGQxKCkubm9kZSgpOworICAg
ICAgICBOb2RlKiByaWdodCA9IGFkZC0+Y2hpbGQyKCkubm9kZSgpOwogICAgICAgICAKLSAgICAg
ICAgaWYgKGxlZnQuaGFzQ29uc3RhbnQoKSkKKyAgICAgICAgaWYgKGxlZnQtPmhhc0NvbnN0YW50
KCkpCiAgICAgICAgICAgICByZXR1cm4gYWRkSW1tZWRpYXRlU2hvdWxkU3BlY3VsYXRlSW50ZWdl
cihhZGQsIHJpZ2h0U2hvdWxkU3BlY3VsYXRlSW50ZWdlciwgbGVmdCk7Ci0gICAgICAgIGlmIChy
aWdodC5oYXNDb25zdGFudCgpKQorICAgICAgICBpZiAocmlnaHQtPmhhc0NvbnN0YW50KCkpCiAg
ICAgICAgICAgICByZXR1cm4gYWRkSW1tZWRpYXRlU2hvdWxkU3BlY3VsYXRlSW50ZWdlcihhZGQs
IGxlZnRTaG91bGRTcGVjdWxhdGVJbnRlZ2VyLCByaWdodCk7CiAgICAgICAgIAotICAgICAgICBy
ZXR1cm4gKGxlZnRTaG91bGRTcGVjdWxhdGVJbnRlZ2VyICYmIHJpZ2h0U2hvdWxkU3BlY3VsYXRl
SW50ZWdlciAmJiBhZGQuY2FuU3BlY3VsYXRlSW50ZWdlcigpKSA/IFNwZWN1bGF0ZUludGVnZXIg
OiBEb250U3BlY3VsYXRlSW50ZWdlcjsKKyAgICAgICAgcmV0dXJuIChsZWZ0U2hvdWxkU3BlY3Vs
YXRlSW50ZWdlciAmJiByaWdodFNob3VsZFNwZWN1bGF0ZUludGVnZXIgJiYgYWRkLT5jYW5TcGVj
dWxhdGVJbnRlZ2VyKCkpID8gU3BlY3VsYXRlSW50ZWdlciA6IERvbnRTcGVjdWxhdGVJbnRlZ2Vy
OwogICAgIH0KICAgICAKLSAgICBBZGRTcGVjdWxhdGlvbk1vZGUgdmFsdWVBZGRTcGVjdWxhdGlv
bk1vZGUoTm9kZSYgYWRkKQorICAgIEFkZFNwZWN1bGF0aW9uTW9kZSB2YWx1ZUFkZFNwZWN1bGF0
aW9uTW9kZShOb2RlKiBhZGQpCiAgICAgewotICAgICAgICByZXR1cm4gYWRkU3BlY3VsYXRpb25N
b2RlKGFkZCwgYXQoYWRkLmNoaWxkMSgpKS5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyRXhwZWN0aW5n
RGVmaW5lZCgpLCBhdChhZGQuY2hpbGQyKCkpLnNob3VsZFNwZWN1bGF0ZUludGVnZXJFeHBlY3Rp
bmdEZWZpbmVkKCkpOworICAgICAgICByZXR1cm4gYWRkU3BlY3VsYXRpb25Nb2RlKGFkZCwgYWRk
LT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlSW50ZWdlckV4cGVjdGluZ0RlZmluZWQoKSwgYWRk
LT5jaGlsZDIoKS0+c2hvdWxkU3BlY3VsYXRlSW50ZWdlckV4cGVjdGluZ0RlZmluZWQoKSk7CiAg
ICAgfQogICAgIAotICAgIEFkZFNwZWN1bGF0aW9uTW9kZSBhcml0aEFkZFNwZWN1bGF0aW9uTW9k
ZShOb2RlJiBhZGQpCisgICAgQWRkU3BlY3VsYXRpb25Nb2RlIGFyaXRoQWRkU3BlY3VsYXRpb25N
b2RlKE5vZGUqIGFkZCkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZGRTcGVjdWxhdGlvbk1vZGUo
YWRkLCBhdChhZGQuY2hpbGQxKCkpLnNob3VsZFNwZWN1bGF0ZUludGVnZXJGb3JBcml0aG1ldGlj
KCksIGF0KGFkZC5jaGlsZDIoKSkuc2hvdWxkU3BlY3VsYXRlSW50ZWdlckZvckFyaXRobWV0aWMo
KSk7CisgICAgICAgIHJldHVybiBhZGRTcGVjdWxhdGlvbk1vZGUoYWRkLCBhZGQtPmNoaWxkMSgp
LT5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyRm9yQXJpdGhtZXRpYygpLCBhZGQtPmNoaWxkMigpLT5z
aG91bGRTcGVjdWxhdGVJbnRlZ2VyRm9yQXJpdGhtZXRpYygpKTsKICAgICB9CiAgICAgCi0gICAg
QWRkU3BlY3VsYXRpb25Nb2RlIGFkZFNwZWN1bGF0aW9uTW9kZShOb2RlJiBhZGQpCisgICAgQWRk
U3BlY3VsYXRpb25Nb2RlIGFkZFNwZWN1bGF0aW9uTW9kZShOb2RlKiBhZGQpCiAgICAgewotICAg
ICAgICBpZiAoYWRkLm9wKCkgPT0gVmFsdWVBZGQpCisgICAgICAgIGlmIChhZGQtPm9wKCkgPT0g
VmFsdWVBZGQpCiAgICAgICAgICAgICByZXR1cm4gdmFsdWVBZGRTcGVjdWxhdGlvbk1vZGUoYWRk
KTsKICAgICAgICAgCiAgICAgICAgIHJldHVybiBhcml0aEFkZFNwZWN1bGF0aW9uTW9kZShhZGQp
OwogICAgIH0KICAgICAKLSAgICBib29sIGFkZFNob3VsZFNwZWN1bGF0ZUludGVnZXIoTm9kZSYg
YWRkKQorICAgIGJvb2wgYWRkU2hvdWxkU3BlY3VsYXRlSW50ZWdlcihOb2RlKiBhZGQpCiAgICAg
ewogICAgICAgICByZXR1cm4gYWRkU3BlY3VsYXRpb25Nb2RlKGFkZCkgIT0gRG9udFNwZWN1bGF0
ZUludGVnZXI7CiAgICAgfQogICAgIAotICAgIGJvb2wgbXVsU2hvdWxkU3BlY3VsYXRlSW50ZWdl
cihOb2RlJiBtdWwpCisgICAgYm9vbCBtdWxTaG91bGRTcGVjdWxhdGVJbnRlZ2VyKE5vZGUqIG11
bCkKICAgICB7Ci0gICAgICAgIEFTU0VSVChtdWwub3AoKSA9PSBBcml0aE11bCk7CisgICAgICAg
IEFTU0VSVChtdWwtPm9wKCkgPT0gQXJpdGhNdWwpOwogICAgICAgICAKLSAgICAgICAgTm9kZSYg
bGVmdCA9IGF0KG11bC5jaGlsZDEoKSk7Ci0gICAgICAgIE5vZGUmIHJpZ2h0ID0gYXQobXVsLmNo
aWxkMigpKTsKKyAgICAgICAgTm9kZSogbGVmdCA9IG11bC0+Y2hpbGQxKCkubm9kZSgpOworICAg
ICAgICBOb2RlKiByaWdodCA9IG11bC0+Y2hpbGQyKCkubm9kZSgpOwogICAgICAgICAKLSAgICAg
ICAgcmV0dXJuIE5vZGU6OnNob3VsZFNwZWN1bGF0ZUludGVnZXJGb3JBcml0aG1ldGljKGxlZnQs
IHJpZ2h0KSAmJiBtdWwuY2FuU3BlY3VsYXRlSW50ZWdlcigpOwotICAgIH0KLSAgICAKLSAgICBi
b29sIG5lZ2F0ZVNob3VsZFNwZWN1bGF0ZUludGVnZXIoTm9kZSYgbmVnYXRlKQotICAgIHsKLSAg
ICAgICAgQVNTRVJUKG5lZ2F0ZS5vcCgpID09IEFyaXRoTmVnYXRlKTsKLSAgICAgICAgcmV0dXJu
IGF0KG5lZ2F0ZS5jaGlsZDEoKSkuc2hvdWxkU3BlY3VsYXRlSW50ZWdlckZvckFyaXRobWV0aWMo
KSAmJiBuZWdhdGUuY2FuU3BlY3VsYXRlSW50ZWdlcigpOworICAgICAgICByZXR1cm4gTm9kZTo6
c2hvdWxkU3BlY3VsYXRlSW50ZWdlckZvckFyaXRobWV0aWMobGVmdCwgcmlnaHQpICYmIG11bC0+
Y2FuU3BlY3VsYXRlSW50ZWdlcigpOwogICAgIH0KICAgICAKLSAgICBib29sIGFkZFNob3VsZFNw
ZWN1bGF0ZUludGVnZXIoTm9kZUluZGV4IG5vZGVJbmRleCkKKyAgICBib29sIG5lZ2F0ZVNob3Vs
ZFNwZWN1bGF0ZUludGVnZXIoTm9kZSogbmVnYXRlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFk
ZFNob3VsZFNwZWN1bGF0ZUludGVnZXIoYXQobm9kZUluZGV4KSk7CisgICAgICAgIEFTU0VSVChu
ZWdhdGUtPm9wKCkgPT0gQXJpdGhOZWdhdGUpOworICAgICAgICByZXR1cm4gbmVnYXRlLT5jaGls
ZDEoKS0+c2hvdWxkU3BlY3VsYXRlSW50ZWdlckZvckFyaXRobWV0aWMoKSAmJiBuZWdhdGUtPmNh
blNwZWN1bGF0ZUludGVnZXIoKTsKICAgICB9CiAgICAgCiAgICAgLy8gSGVscGVyIG1ldGhvZHMg
dG8gY2hlY2sgbm9kZXMgZm9yIGNvbnN0YW50cy4KLSAgICBib29sIGlzQ29uc3RhbnQoTm9kZUlu
ZGV4IG5vZGVJbmRleCkKKyAgICBib29sIGlzQ29uc3RhbnQoTm9kZSogbm9kZSkKICAgICB7Ci0g
ICAgICAgIHJldHVybiBhdChub2RlSW5kZXgpLmhhc0NvbnN0YW50KCk7CisgICAgICAgIHJldHVy
biBub2RlLT5oYXNDb25zdGFudCgpOwogICAgIH0KLSAgICBib29sIGlzSlNDb25zdGFudChOb2Rl
SW5kZXggbm9kZUluZGV4KQorICAgIGJvb2wgaXNKU0NvbnN0YW50KE5vZGUqIG5vZGUpCiAgICAg
ewotICAgICAgICByZXR1cm4gYXQobm9kZUluZGV4KS5oYXNDb25zdGFudCgpOworICAgICAgICBy
ZXR1cm4gbm9kZS0+aGFzQ29uc3RhbnQoKTsKICAgICB9Ci0gICAgYm9vbCBpc0ludDMyQ29uc3Rh
bnQoTm9kZUluZGV4IG5vZGVJbmRleCkKKyAgICBib29sIGlzSW50MzJDb25zdGFudChOb2RlKiBu
b2RlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGF0KG5vZGVJbmRleCkuaXNJbnQzMkNvbnN0YW50
KG1fY29kZUJsb2NrKTsKKyAgICAgICAgcmV0dXJuIG5vZGUtPmlzSW50MzJDb25zdGFudChtX2Nv
ZGVCbG9jayk7CiAgICAgfQotICAgIGJvb2wgaXNEb3VibGVDb25zdGFudChOb2RlSW5kZXggbm9k
ZUluZGV4KQorICAgIGJvb2wgaXNEb3VibGVDb25zdGFudChOb2RlKiBub2RlKQogICAgIHsKLSAg
ICAgICAgcmV0dXJuIGF0KG5vZGVJbmRleCkuaXNEb3VibGVDb25zdGFudChtX2NvZGVCbG9jayk7
CisgICAgICAgIHJldHVybiBub2RlLT5pc0RvdWJsZUNvbnN0YW50KG1fY29kZUJsb2NrKTsKICAg
ICB9Ci0gICAgYm9vbCBpc051bWJlckNvbnN0YW50KE5vZGVJbmRleCBub2RlSW5kZXgpCisgICAg
Ym9vbCBpc051bWJlckNvbnN0YW50KE5vZGUqIG5vZGUpCiAgICAgewotICAgICAgICByZXR1cm4g
YXQobm9kZUluZGV4KS5pc051bWJlckNvbnN0YW50KG1fY29kZUJsb2NrKTsKKyAgICAgICAgcmV0
dXJuIG5vZGUtPmlzTnVtYmVyQ29uc3RhbnQobV9jb2RlQmxvY2spOwogICAgIH0KLSAgICBib29s
IGlzQm9vbGVhbkNvbnN0YW50KE5vZGVJbmRleCBub2RlSW5kZXgpCisgICAgYm9vbCBpc0Jvb2xl
YW5Db25zdGFudChOb2RlKiBub2RlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGF0KG5vZGVJbmRl
eCkuaXNCb29sZWFuQ29uc3RhbnQobV9jb2RlQmxvY2spOworICAgICAgICByZXR1cm4gbm9kZS0+
aXNCb29sZWFuQ29uc3RhbnQobV9jb2RlQmxvY2spOwogICAgIH0KLSAgICBib29sIGlzQ2VsbENv
bnN0YW50KE5vZGVJbmRleCBub2RlSW5kZXgpCisgICAgYm9vbCBpc0NlbGxDb25zdGFudChOb2Rl
KiBub2RlKQogICAgIHsKLSAgICAgICAgaWYgKCFpc0pTQ29uc3RhbnQobm9kZUluZGV4KSkKKyAg
ICAgICAgaWYgKCFpc0pTQ29uc3RhbnQobm9kZSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgICAgIEpTVmFsdWUgdmFsdWUgPSB2YWx1ZU9mSlNDb25zdGFudChub2RlSW5kZXgpOwor
ICAgICAgICBKU1ZhbHVlIHZhbHVlID0gdmFsdWVPZkpTQ29uc3RhbnQobm9kZSk7CiAgICAgICAg
IHJldHVybiB2YWx1ZS5pc0NlbGwoKSAmJiAhIXZhbHVlOwogICAgIH0KLSAgICBib29sIGlzRnVu
Y3Rpb25Db25zdGFudChOb2RlSW5kZXggbm9kZUluZGV4KQorICAgIGJvb2wgaXNGdW5jdGlvbkNv
bnN0YW50KE5vZGUqIG5vZGUpCiAgICAgewotICAgICAgICBpZiAoIWlzSlNDb25zdGFudChub2Rl
SW5kZXgpKQorICAgICAgICBpZiAoIWlzSlNDb25zdGFudChub2RlKSkKICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgICAgaWYgKCFnZXRKU0Z1bmN0aW9uKHZhbHVlT2ZKU0NvbnN0YW50
KG5vZGVJbmRleCkpKQorICAgICAgICBpZiAoIWdldEpTRnVuY3Rpb24odmFsdWVPZkpTQ29uc3Rh
bnQobm9kZSkpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICB9Ci0gICAgYm9vbCBpc0ludGVybmFsRnVuY3Rpb25Db25zdGFudChOb2RlSW5kZXgg
bm9kZUluZGV4KQorICAgIGJvb2wgaXNJbnRlcm5hbEZ1bmN0aW9uQ29uc3RhbnQoTm9kZSogbm9k
ZSkKICAgICB7Ci0gICAgICAgIGlmICghaXNKU0NvbnN0YW50KG5vZGVJbmRleCkpCisgICAgICAg
IGlmICghaXNKU0NvbnN0YW50KG5vZGUpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgICBKU1ZhbHVlIHZhbHVlID0gdmFsdWVPZkpTQ29uc3RhbnQobm9kZUluZGV4KTsKKyAgICAg
ICAgSlNWYWx1ZSB2YWx1ZSA9IHZhbHVlT2ZKU0NvbnN0YW50KG5vZGUpOwogICAgICAgICBpZiAo
IXZhbHVlLmlzQ2VsbCgpIHx8ICF2YWx1ZSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICAgICAgSlNDZWxsKiBjZWxsID0gdmFsdWUuYXNDZWxsKCk7CkBAIC0zNDYsMjUgKzMyMiwyNSBA
QCBwdWJsaWM6CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICAvLyBIZWxwZXIgbWV0
aG9kcyBnZXQgY29uc3RhbnQgdmFsdWVzIGZyb20gbm9kZXMuCi0gICAgSlNWYWx1ZSB2YWx1ZU9m
SlNDb25zdGFudChOb2RlSW5kZXggbm9kZUluZGV4KQorICAgIEpTVmFsdWUgdmFsdWVPZkpTQ29u
c3RhbnQoTm9kZSogbm9kZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBhdChub2RlSW5kZXgpLnZh
bHVlT2ZKU0NvbnN0YW50KG1fY29kZUJsb2NrKTsKKyAgICAgICAgcmV0dXJuIG5vZGUtPnZhbHVl
T2ZKU0NvbnN0YW50KG1fY29kZUJsb2NrKTsKICAgICB9Ci0gICAgaW50MzJfdCB2YWx1ZU9mSW50
MzJDb25zdGFudChOb2RlSW5kZXggbm9kZUluZGV4KQorICAgIGludDMyX3QgdmFsdWVPZkludDMy
Q29uc3RhbnQoTm9kZSogbm9kZSkKICAgICB7Ci0gICAgICAgIHJldHVybiB2YWx1ZU9mSlNDb25z
dGFudChub2RlSW5kZXgpLmFzSW50MzIoKTsKKyAgICAgICAgcmV0dXJuIHZhbHVlT2ZKU0NvbnN0
YW50KG5vZGUpLmFzSW50MzIoKTsKICAgICB9Ci0gICAgZG91YmxlIHZhbHVlT2ZOdW1iZXJDb25z
dGFudChOb2RlSW5kZXggbm9kZUluZGV4KQorICAgIGRvdWJsZSB2YWx1ZU9mTnVtYmVyQ29uc3Rh
bnQoTm9kZSogbm9kZSkKICAgICB7Ci0gICAgICAgIHJldHVybiB2YWx1ZU9mSlNDb25zdGFudChu
b2RlSW5kZXgpLmFzTnVtYmVyKCk7CisgICAgICAgIHJldHVybiB2YWx1ZU9mSlNDb25zdGFudChu
b2RlKS5hc051bWJlcigpOwogICAgIH0KLSAgICBib29sIHZhbHVlT2ZCb29sZWFuQ29uc3RhbnQo
Tm9kZUluZGV4IG5vZGVJbmRleCkKKyAgICBib29sIHZhbHVlT2ZCb29sZWFuQ29uc3RhbnQoTm9k
ZSogbm9kZSkKICAgICB7Ci0gICAgICAgIHJldHVybiB2YWx1ZU9mSlNDb25zdGFudChub2RlSW5k
ZXgpLmFzQm9vbGVhbigpOworICAgICAgICByZXR1cm4gdmFsdWVPZkpTQ29uc3RhbnQobm9kZSku
YXNCb29sZWFuKCk7CiAgICAgfQotICAgIEpTRnVuY3Rpb24qIHZhbHVlT2ZGdW5jdGlvbkNvbnN0
YW50KE5vZGVJbmRleCBub2RlSW5kZXgpCisgICAgSlNGdW5jdGlvbiogdmFsdWVPZkZ1bmN0aW9u
Q29uc3RhbnQoTm9kZSogbm9kZSkKICAgICB7Ci0gICAgICAgIEpTQ2VsbCogZnVuY3Rpb24gPSBn
ZXRKU0Z1bmN0aW9uKHZhbHVlT2ZKU0NvbnN0YW50KG5vZGVJbmRleCkpOworICAgICAgICBKU0Nl
bGwqIGZ1bmN0aW9uID0gZ2V0SlNGdW5jdGlvbih2YWx1ZU9mSlNDb25zdGFudChub2RlKSk7CiAg
ICAgICAgIEFTU0VSVChmdW5jdGlvbik7CiAgICAgICAgIHJldHVybiBqc0Nhc3Q8SlNGdW5jdGlv
bio+KGZ1bmN0aW9uKTsKICAgICB9CkBAIC00MzksNDUgKzQxNSw0MyBAQCBwdWJsaWM6CiAgICAg
ICAgIHJldHVybiBtX2NvZGVCbG9jay0+dW5jaGVja2VkQWN0aXZhdGlvblJlZ2lzdGVyKCk7CiAg
ICAgfQogICAgIAotICAgIFZhbHVlUHJvZmlsZSogdmFsdWVQcm9maWxlRm9yKE5vZGVJbmRleCBu
b2RlSW5kZXgpCisgICAgVmFsdWVQcm9maWxlKiB2YWx1ZVByb2ZpbGVGb3IoTm9kZSogbm9kZSkK
ICAgICB7Ci0gICAgICAgIGlmIChub2RlSW5kZXggPT0gTm9Ob2RlKQorICAgICAgICBpZiAoIW5v
ZGUpCiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgCi0gICAgICAgIE5vZGUmIG5vZGUg
PSBhdChub2RlSW5kZXgpOwotICAgICAgICBDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2sgPSBiYXNl
bGluZUNvZGVCbG9ja0Zvcihub2RlLmNvZGVPcmlnaW4pOworICAgICAgICBDb2RlQmxvY2sqIHBy
b2ZpbGVkQmxvY2sgPSBiYXNlbGluZUNvZGVCbG9ja0Zvcihub2RlLT5jb2RlT3JpZ2luKTsKICAg
ICAgICAgCi0gICAgICAgIGlmIChub2RlLmhhc0xvY2FsKCkpIHsKLSAgICAgICAgICAgIGlmICgh
b3BlcmFuZElzQXJndW1lbnQobm9kZS5sb2NhbCgpKSkKKyAgICAgICAgaWYgKG5vZGUtPmhhc0xv
Y2FsKCkpIHsKKyAgICAgICAgICAgIGlmICghb3BlcmFuZElzQXJndW1lbnQobm9kZS0+bG9jYWwo
KSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICBpbnQgYXJndW1lbnQg
PSBvcGVyYW5kVG9Bcmd1bWVudChub2RlLmxvY2FsKCkpOwotICAgICAgICAgICAgaWYgKG5vZGUu
dmFyaWFibGVBY2Nlc3NEYXRhKCkgIT0gYXQobV9hcmd1bWVudHNbYXJndW1lbnRdKS52YXJpYWJs
ZUFjY2Vzc0RhdGEoKSkKKyAgICAgICAgICAgIGludCBhcmd1bWVudCA9IG9wZXJhbmRUb0FyZ3Vt
ZW50KG5vZGUtPmxvY2FsKCkpOworICAgICAgICAgICAgaWYgKG5vZGUtPnZhcmlhYmxlQWNjZXNz
RGF0YSgpICE9IG1fYXJndW1lbnRzW2FyZ3VtZW50XS0+dmFyaWFibGVBY2Nlc3NEYXRhKCkpCiAg
ICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgICByZXR1cm4gcHJvZmlsZWRCbG9j
ay0+dmFsdWVQcm9maWxlRm9yQXJndW1lbnQoYXJndW1lbnQpOwogICAgICAgICB9CiAgICAgICAg
IAotICAgICAgICBpZiAobm9kZS5oYXNIZWFwUHJlZGljdGlvbigpKQotICAgICAgICAgICAgcmV0
dXJuIHByb2ZpbGVkQmxvY2stPnZhbHVlUHJvZmlsZUZvckJ5dGVjb2RlT2Zmc2V0KG5vZGUuY29k
ZU9yaWdpbi5ieXRlY29kZUluZGV4Rm9yVmFsdWVQcm9maWxlKCkpOworICAgICAgICBpZiAobm9k
ZS0+aGFzSGVhcFByZWRpY3Rpb24oKSkKKyAgICAgICAgICAgIHJldHVybiBwcm9maWxlZEJsb2Nr
LT52YWx1ZVByb2ZpbGVGb3JCeXRlY29kZU9mZnNldChub2RlLT5jb2RlT3JpZ2luLmJ5dGVjb2Rl
SW5kZXhGb3JWYWx1ZVByb2ZpbGUoKSk7CiAgICAgICAgIAogICAgICAgICByZXR1cm4gMDsKICAg
ICB9CiAgICAgCi0gICAgTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZSBtZXRob2RPZkdldHRp
bmdBVmFsdWVQcm9maWxlRm9yKE5vZGVJbmRleCBub2RlSW5kZXgpCisgICAgTWV0aG9kT2ZHZXR0
aW5nQVZhbHVlUHJvZmlsZSBtZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlRm9yKE5vZGUqIG5v
ZGUpCiAgICAgewotICAgICAgICBpZiAobm9kZUluZGV4ID09IE5vTm9kZSkKKyAgICAgICAgaWYg
KCFub2RlKQogICAgICAgICAgICAgcmV0dXJuIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUo
KTsKICAgICAgICAgCi0gICAgICAgIE5vZGUmIG5vZGUgPSBhdChub2RlSW5kZXgpOwotICAgICAg
ICBDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2sgPSBiYXNlbGluZUNvZGVCbG9ja0Zvcihub2RlLmNv
ZGVPcmlnaW4pOworICAgICAgICBDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2sgPSBiYXNlbGluZUNv
ZGVCbG9ja0Zvcihub2RlLT5jb2RlT3JpZ2luKTsKICAgICAgICAgCi0gICAgICAgIGlmIChub2Rl
Lm9wKCkgPT0gR2V0TG9jYWwpIHsKKyAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gR2V0TG9jYWwp
IHsKICAgICAgICAgICAgIHJldHVybiBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlOjpmcm9t
TGF6eU9wZXJhbmQoCiAgICAgICAgICAgICAgICAgcHJvZmlsZWRCbG9jaywKICAgICAgICAgICAg
ICAgICBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZUtleSgKLSAgICAgICAgICAgICAgICAgICAgbm9k
ZS5jb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgsIG5vZGUubG9jYWwoKSkpOworICAgICAgICAgICAg
ICAgICAgICBub2RlLT5jb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgsIG5vZGUtPmxvY2FsKCkpKTsK
ICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgcmV0dXJuIE1ldGhvZE9mR2V0dGluZ0FWYWx1
ZVByb2ZpbGUodmFsdWVQcm9maWxlRm9yKG5vZGVJbmRleCkpOworICAgICAgICByZXR1cm4gTWV0
aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZSh2YWx1ZVByb2ZpbGVGb3Iobm9kZSkpOwogICAgIH0K
ICAgICAKICAgICBib29sIG5lZWRzQWN0aXZhdGlvbigpIGNvbnN0CkBAIC01MDEsMjEgKzQ3NSwy
MSBAQCBwdWJsaWM6CiAgICAgCiAgICAgdW5zaWduZWQgbnVtU3VjY2Vzc29ycyhCYXNpY0Jsb2Nr
KiBibG9jaykKICAgICB7Ci0gICAgICAgIHJldHVybiBhdChibG9jay0+bGFzdCgpKS5udW1TdWNj
ZXNzb3JzKCk7CisgICAgICAgIHJldHVybiBibG9jay0+bGFzdCgpLT5udW1TdWNjZXNzb3JzKCk7
CiAgICAgfQogICAgIEJsb2NrSW5kZXggc3VjY2Vzc29yKEJhc2ljQmxvY2sqIGJsb2NrLCB1bnNp
Z25lZCBpbmRleCkKICAgICB7Ci0gICAgICAgIHJldHVybiBhdChibG9jay0+bGFzdCgpKS5zdWNj
ZXNzb3IoaW5kZXgpOworICAgICAgICByZXR1cm4gYmxvY2stPmxhc3QoKS0+c3VjY2Vzc29yKGlu
ZGV4KTsKICAgICB9CiAgICAgQmxvY2tJbmRleCBzdWNjZXNzb3JGb3JDb25kaXRpb24oQmFzaWNC
bG9jayogYmxvY2ssIGJvb2wgY29uZGl0aW9uKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGF0KGJs
b2NrLT5sYXN0KCkpLnN1Y2Nlc3NvckZvckNvbmRpdGlvbihjb25kaXRpb24pOworICAgICAgICBy
ZXR1cm4gYmxvY2stPmxhc3QoKS0+c3VjY2Vzc29yRm9yQ29uZGl0aW9uKGNvbmRpdGlvbik7CiAg
ICAgfQogICAgIAotICAgIGJvb2wgaXNQcmVkaWN0ZWROdW1lcmljYWwoTm9kZSYgbm9kZSkKKyAg
ICBib29sIGlzUHJlZGljdGVkTnVtZXJpY2FsKE5vZGUqIG5vZGUpCiAgICAgewotICAgICAgICBT
cGVjdWxhdGVkVHlwZSBsZWZ0ID0gYXQobm9kZS5jaGlsZDEoKSkucHJlZGljdGlvbigpOwotICAg
ICAgICBTcGVjdWxhdGVkVHlwZSByaWdodCA9IGF0KG5vZGUuY2hpbGQyKCkpLnByZWRpY3Rpb24o
KTsKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUgbGVmdCA9IG5vZGUtPmNoaWxkMSgpLT5wcmVkaWN0
aW9uKCk7CisgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHJpZ2h0ID0gbm9kZS0+Y2hpbGQyKCktPnBy
ZWRpY3Rpb24oKTsKICAgICAgICAgcmV0dXJuIGlzTnVtYmVyU3BlY3VsYXRpb24obGVmdCkgJiYg
aXNOdW1iZXJTcGVjdWxhdGlvbihyaWdodCk7CiAgICAgfQogICAgIApAQCAtNTI1LDIzICs0OTks
MjMgQEAgcHVibGljOgogICAgIC8vIC0gUHV0QnlWYWwgZGVmaW5pdGVseSBjaGFuZ2VzIHRoZSBh
cnJheSBpdCBzdG9yZXMgdG8sIGFuZCBtYXkgZXZlbiBjaGFuZ2UgaXRzIGxlbmd0aC4KICAgICAv
LyAtIFB1dEJ5T2Zmc2V0IGRlZmluaXRlbHkgY2hhbmdlcyB0aGUgb2JqZWN0IGl0IHN0b3JlcyB0
by4KICAgICAvLyAtIGFuZCBzbyBvbi4KLSAgICBib29sIGJ5VmFsSXNQdXJlKE5vZGUmIG5vZGUp
CisgICAgYm9vbCBieVZhbElzUHVyZShOb2RlKiBub2RlKQogICAgIHsKLSAgICAgICAgc3dpdGNo
IChub2RlLmFycmF5TW9kZSgpLnR5cGUoKSkgeworICAgICAgICBzd2l0Y2ggKG5vZGUtPmFycmF5
TW9kZSgpLnR5cGUoKSkgewogICAgICAgICBjYXNlIEFycmF5OjpHZW5lcmljOgogICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBjYXNlIEFycmF5OjpJbnQzMjoKICAgICAgICAgY2Fz
ZSBBcnJheTo6RG91YmxlOgogICAgICAgICBjYXNlIEFycmF5OjpDb250aWd1b3VzOgogICAgICAg
ICBjYXNlIEFycmF5OjpBcnJheVN0b3JhZ2U6Ci0gICAgICAgICAgICByZXR1cm4gIW5vZGUuYXJy
YXlNb2RlKCkuaXNPdXRPZkJvdW5kcygpOworICAgICAgICAgICAgcmV0dXJuICFub2RlLT5hcnJh
eU1vZGUoKS5pc091dE9mQm91bmRzKCk7CiAgICAgICAgIGNhc2UgQXJyYXk6OlNsb3dQdXRBcnJh
eVN0b3JhZ2U6Ci0gICAgICAgICAgICByZXR1cm4gIW5vZGUuYXJyYXlNb2RlKCkubWF5U3RvcmVU
b0hvbGUoKTsKKyAgICAgICAgICAgIHJldHVybiAhbm9kZS0+YXJyYXlNb2RlKCkubWF5U3RvcmVU
b0hvbGUoKTsKICAgICAgICAgY2FzZSBBcnJheTo6U3RyaW5nOgotICAgICAgICAgICAgcmV0dXJu
IG5vZGUub3AoKSA9PSBHZXRCeVZhbDsKKyAgICAgICAgICAgIHJldHVybiBub2RlLT5vcCgpID09
IEdldEJ5VmFsOwogI2lmIFVTRShKU1ZBTFVFMzJfNjQpCiAgICAgICAgIGNhc2UgQXJyYXk6OkFy
Z3VtZW50czoKLSAgICAgICAgICAgIGlmIChub2RlLm9wKCkgPT0gR2V0QnlWYWwpCisgICAgICAg
ICAgICBpZiAobm9kZS0+b3AoKSA9PSBHZXRCeVZhbCkKICAgICAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICNlbmRpZiAvLyBVU0UoSlNWQUxVRTMy
XzY0KQpAQCAtNTUwLDEzICs1MjQsMTMgQEAgcHVibGljOgogICAgICAgICB9CiAgICAgfQogICAg
IAotICAgIGJvb2wgY2xvYmJlcnNXb3JsZChOb2RlJiBub2RlKQorICAgIGJvb2wgY2xvYmJlcnNX
b3JsZChOb2RlKiBub2RlKQogICAgIHsKLSAgICAgICAgaWYgKG5vZGUuZmxhZ3MoKSAmIE5vZGVD
bG9iYmVyc1dvcmxkKQorICAgICAgICBpZiAobm9kZS0+ZmxhZ3MoKSAmIE5vZGVDbG9iYmVyc1dv
cmxkKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGlmICghKG5vZGUuZmxhZ3Mo
KSAmIE5vZGVNaWdodENsb2JiZXIpKQorICAgICAgICBpZiAoIShub2RlLT5mbGFncygpICYgTm9k
ZU1pZ2h0Q2xvYmJlcikpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIHN3aXRj
aCAobm9kZS5vcCgpKSB7CisgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewogICAgICAgICBj
YXNlIFZhbHVlQWRkOgogICAgICAgICBjYXNlIENvbXBhcmVMZXNzOgogICAgICAgICBjYXNlIENv
bXBhcmVMZXNzRXE6CkBAIC01NzQsMTAyICs1NDgsMTAxIEBAIHB1YmxpYzoKICAgICAgICAgfQog
ICAgIH0KICAgICAKLSAgICBib29sIGNsb2JiZXJzV29ybGQoTm9kZUluZGV4IG5vZGVJbmRleCkK
LSAgICB7Ci0gICAgICAgIHJldHVybiBjbG9iYmVyc1dvcmxkKGF0KG5vZGVJbmRleCkpOwotICAg
IH0KLSAgICAKICAgICB2b2lkIGRldGVybWluZVJlYWNoYWJpbGl0eSgpOwogICAgIHZvaWQgcmVz
ZXRSZWFjaGFiaWxpdHkoKTsKICAgICAKICAgICB2b2lkIHJlc2V0RXhpdFN0YXRlcygpOwogICAg
IAotICAgIHVuc2lnbmVkIHZhckFyZ051bUNoaWxkcmVuKE5vZGUmIG5vZGUpCisgICAgdW5zaWdu
ZWQgdmFyQXJnTnVtQ2hpbGRyZW4oTm9kZSogbm9kZSkKICAgICB7Ci0gICAgICAgIEFTU0VSVChu
b2RlLmZsYWdzKCkgJiBOb2RlSGFzVmFyQXJncyk7Ci0gICAgICAgIHJldHVybiBub2RlLm51bUNo
aWxkcmVuKCk7CisgICAgICAgIEFTU0VSVChub2RlLT5mbGFncygpICYgTm9kZUhhc1ZhckFyZ3Mp
OworICAgICAgICByZXR1cm4gbm9kZS0+bnVtQ2hpbGRyZW4oKTsKICAgICB9CiAgICAgCi0gICAg
dW5zaWduZWQgbnVtQ2hpbGRyZW4oTm9kZSYgbm9kZSkKKyAgICB1bnNpZ25lZCBudW1DaGlsZHJl
bihOb2RlKiBub2RlKQogICAgIHsKLSAgICAgICAgaWYgKG5vZGUuZmxhZ3MoKSAmIE5vZGVIYXNW
YXJBcmdzKQorICAgICAgICBpZiAobm9kZS0+ZmxhZ3MoKSAmIE5vZGVIYXNWYXJBcmdzKQogICAg
ICAgICAgICAgcmV0dXJuIHZhckFyZ051bUNoaWxkcmVuKG5vZGUpOwogICAgICAgICByZXR1cm4g
QWRqYWNlbmN5TGlzdDo6U2l6ZTsKICAgICB9CiAgICAgCi0gICAgRWRnZSYgdmFyQXJnQ2hpbGQo
Tm9kZSYgbm9kZSwgdW5zaWduZWQgaW5kZXgpCisgICAgRWRnZSYgdmFyQXJnQ2hpbGQoTm9kZSog
bm9kZSwgdW5zaWduZWQgaW5kZXgpCiAgICAgewotICAgICAgICBBU1NFUlQobm9kZS5mbGFncygp
ICYgTm9kZUhhc1ZhckFyZ3MpOwotICAgICAgICByZXR1cm4gbV92YXJBcmdDaGlsZHJlbltub2Rl
LmZpcnN0Q2hpbGQoKSArIGluZGV4XTsKKyAgICAgICAgQVNTRVJUKG5vZGUtPmZsYWdzKCkgJiBO
b2RlSGFzVmFyQXJncyk7CisgICAgICAgIHJldHVybiBtX3ZhckFyZ0NoaWxkcmVuW25vZGUtPmZp
cnN0Q2hpbGQoKSArIGluZGV4XTsKICAgICB9CiAgICAgCi0gICAgRWRnZSYgY2hpbGQoTm9kZSYg
bm9kZSwgdW5zaWduZWQgaW5kZXgpCisgICAgRWRnZSYgY2hpbGQoTm9kZSogbm9kZSwgdW5zaWdu
ZWQgaW5kZXgpCiAgICAgewotICAgICAgICBpZiAobm9kZS5mbGFncygpICYgTm9kZUhhc1ZhckFy
Z3MpCisgICAgICAgIGlmIChub2RlLT5mbGFncygpICYgTm9kZUhhc1ZhckFyZ3MpCiAgICAgICAg
ICAgICByZXR1cm4gdmFyQXJnQ2hpbGQobm9kZSwgaW5kZXgpOwotICAgICAgICByZXR1cm4gbm9k
ZS5jaGlsZHJlbi5jaGlsZChpbmRleCk7CisgICAgICAgIHJldHVybiBub2RlLT5jaGlsZHJlbi5j
aGlsZChpbmRleCk7CiAgICAgfQogICAgIAotICAgIHZvaWQgdm90ZShFZGdlIGVkZ2UsIHVuc2ln
bmVkIGJhbGxvdCkKKyAgICB2b2lkIHZvdGVOb2RlKE5vZGUqIG5vZGUsIHVuc2lnbmVkIGJhbGxv
dCkKICAgICB7Ci0gICAgICAgIHN3aXRjaCAoYXQoZWRnZSkub3AoKSkgeworICAgICAgICBzd2l0
Y2ggKG5vZGUtPm9wKCkpIHsKICAgICAgICAgY2FzZSBWYWx1ZVRvSW50MzI6CiAgICAgICAgIGNh
c2UgVUludDMyVG9OdW1iZXI6Ci0gICAgICAgICAgICBlZGdlID0gYXQoZWRnZSkuY2hpbGQxKCk7
CisgICAgICAgICAgICBub2RlID0gbm9kZS0+Y2hpbGQxKCkubm9kZSgpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQog
ICAgICAgICAKLSAgICAgICAgaWYgKGF0KGVkZ2UpLm9wKCkgPT0gR2V0TG9jYWwpCi0gICAgICAg
ICAgICBhdChlZGdlKS52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+dm90ZShiYWxsb3QpOworICAgICAg
ICBpZiAobm9kZS0+b3AoKSA9PSBHZXRMb2NhbCkKKyAgICAgICAgICAgIG5vZGUtPnZhcmlhYmxl
QWNjZXNzRGF0YSgpLT52b3RlKGJhbGxvdCk7CiAgICAgfQogICAgIAotICAgIHZvaWQgdm90ZShO
b2RlJiBub2RlLCB1bnNpZ25lZCBiYWxsb3QpCisgICAgdm9pZCB2b3RlTm9kZShFZGdlIGVkZ2Us
IHVuc2lnbmVkIGJhbGxvdCkKICAgICB7Ci0gICAgICAgIGlmIChub2RlLmZsYWdzKCkgJiBOb2Rl
SGFzVmFyQXJncykgewotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBjaGlsZElkeCA9IG5vZGUu
Zmlyc3RDaGlsZCgpOwotICAgICAgICAgICAgICAgICBjaGlsZElkeCA8IG5vZGUuZmlyc3RDaGls
ZCgpICsgbm9kZS5udW1DaGlsZHJlbigpOworICAgICAgICB2b3RlTm9kZShlZGdlLm5vZGUoKSwg
YmFsbG90KTsKKyAgICB9CisgICAgCisgICAgdm9pZCB2b3RlQ2hpbGRyZW4oTm9kZSogbm9kZSwg
dW5zaWduZWQgYmFsbG90KQorICAgIHsKKyAgICAgICAgaWYgKG5vZGUtPmZsYWdzKCkgJiBOb2Rl
SGFzVmFyQXJncykgeworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBjaGlsZElkeCA9IG5vZGUt
PmZpcnN0Q2hpbGQoKTsKKyAgICAgICAgICAgICAgICAgY2hpbGRJZHggPCBub2RlLT5maXJzdENo
aWxkKCkgKyBub2RlLT5udW1DaGlsZHJlbigpOwogICAgICAgICAgICAgICAgICBjaGlsZElkeCsr
KSB7CiAgICAgICAgICAgICAgICAgaWYgKCEhbV92YXJBcmdDaGlsZHJlbltjaGlsZElkeF0pCi0g
ICAgICAgICAgICAgICAgICAgIHZvdGUobV92YXJBcmdDaGlsZHJlbltjaGlsZElkeF0sIGJhbGxv
dCk7CisgICAgICAgICAgICAgICAgICAgIHZvdGVOb2RlKG1fdmFyQXJnQ2hpbGRyZW5bY2hpbGRJ
ZHhdLCBiYWxsb3QpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICB9CiAgICAgICAgIAotICAgICAgICBpZiAoIW5vZGUuY2hpbGQxKCkpCisgICAgICAgIGlmICgh
bm9kZS0+Y2hpbGQxKCkpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIHZvdGUobm9kZS5j
aGlsZDEoKSwgYmFsbG90KTsKLSAgICAgICAgaWYgKCFub2RlLmNoaWxkMigpKQorICAgICAgICB2
b3RlTm9kZShub2RlLT5jaGlsZDEoKSwgYmFsbG90KTsKKyAgICAgICAgaWYgKCFub2RlLT5jaGls
ZDIoKSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgdm90ZShub2RlLmNoaWxkMigpLCBi
YWxsb3QpOwotICAgICAgICBpZiAoIW5vZGUuY2hpbGQzKCkpCisgICAgICAgIHZvdGVOb2RlKG5v
ZGUtPmNoaWxkMigpLCBiYWxsb3QpOworICAgICAgICBpZiAoIW5vZGUtPmNoaWxkMygpKQogICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICB2b3RlKG5vZGUuY2hpbGQzKCksIGJhbGxvdCk7Cisg
ICAgICAgIHZvdGVOb2RlKG5vZGUtPmNoaWxkMygpLCBiYWxsb3QpOwogICAgIH0KICAgICAKLSAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiAvLyBUID0gTm9kZUluZGV4IG9yIEVkZ2UKKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBUPiAvLyBUID0gTm9kZSogb3IgRWRnZQogICAgIHZvaWQgc3Vic3RpdHV0
ZShCYXNpY0Jsb2NrJiBibG9jaywgdW5zaWduZWQgc3RhcnRJbmRleEluQmxvY2ssIFQgb2xkVGhp
bmcsIFQgbmV3VGhpbmcpCiAgICAgewogICAgICAgICBmb3IgKHVuc2lnbmVkIGluZGV4SW5CbG9j
ayA9IHN0YXJ0SW5kZXhJbkJsb2NrOyBpbmRleEluQmxvY2sgPCBibG9jay5zaXplKCk7ICsraW5k
ZXhJbkJsb2NrKSB7Ci0gICAgICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4ID0gYmxvY2tbaW5k
ZXhJbkJsb2NrXTsKLSAgICAgICAgICAgIE5vZGUmIG5vZGUgPSBhdChub2RlSW5kZXgpOwotICAg
ICAgICAgICAgaWYgKG5vZGUuZmxhZ3MoKSAmIE5vZGVIYXNWYXJBcmdzKSB7Ci0gICAgICAgICAg
ICAgICAgZm9yICh1bnNpZ25lZCBjaGlsZElkeCA9IG5vZGUuZmlyc3RDaGlsZCgpOyBjaGlsZElk
eCA8IG5vZGUuZmlyc3RDaGlsZCgpICsgbm9kZS5udW1DaGlsZHJlbigpOyArK2NoaWxkSWR4KSB7
CisgICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2tbaW5kZXhJbkJsb2NrXTsKKyAgICAgICAg
ICAgIGlmIChub2RlLT5mbGFncygpICYgTm9kZUhhc1ZhckFyZ3MpIHsKKyAgICAgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGNoaWxkSWR4ID0gbm9kZS0+Zmlyc3RDaGlsZCgpOyBjaGlsZElkeCA8
IG5vZGUtPmZpcnN0Q2hpbGQoKSArIG5vZGUtPm51bUNoaWxkcmVuKCk7ICsrY2hpbGRJZHgpIHsK
ICAgICAgICAgICAgICAgICAgICAgaWYgKCEhbV92YXJBcmdDaGlsZHJlbltjaGlsZElkeF0pCi0g
ICAgICAgICAgICAgICAgICAgICAgICBjb21wYXJlQW5kU3dhcChtX3ZhckFyZ0NoaWxkcmVuW2No
aWxkSWR4XSwgb2xkVGhpbmcsIG5ld1RoaW5nLCBub2RlLnNob3VsZEdlbmVyYXRlKCkpOworICAg
ICAgICAgICAgICAgICAgICAgICAgY29tcGFyZUFuZFN3YXAobV92YXJBcmdDaGlsZHJlbltjaGls
ZElkeF0sIG9sZFRoaW5nLCBuZXdUaGluZywgbm9kZS0+c2hvdWxkR2VuZXJhdGUoKSk7CiAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQot
ICAgICAgICAgICAgaWYgKCFub2RlLmNoaWxkMSgpKQorICAgICAgICAgICAgaWYgKCFub2RlLT5j
aGlsZDEoKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGNvbXBhcmVB
bmRTd2FwKG5vZGUuY2hpbGRyZW4uY2hpbGQxKCksIG9sZFRoaW5nLCBuZXdUaGluZywgbm9kZS5z
aG91bGRHZW5lcmF0ZSgpKTsKLSAgICAgICAgICAgIGlmICghbm9kZS5jaGlsZDIoKSkKKyAgICAg
ICAgICAgIGNvbXBhcmVBbmRTd2FwKG5vZGUtPmNoaWxkcmVuLmNoaWxkMSgpLCBvbGRUaGluZywg
bmV3VGhpbmcsIG5vZGUtPnNob3VsZEdlbmVyYXRlKCkpOworICAgICAgICAgICAgaWYgKCFub2Rl
LT5jaGlsZDIoKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGNvbXBh
cmVBbmRTd2FwKG5vZGUuY2hpbGRyZW4uY2hpbGQyKCksIG9sZFRoaW5nLCBuZXdUaGluZywgbm9k
ZS5zaG91bGRHZW5lcmF0ZSgpKTsKLSAgICAgICAgICAgIGlmICghbm9kZS5jaGlsZDMoKSkKKyAg
ICAgICAgICAgIGNvbXBhcmVBbmRTd2FwKG5vZGUtPmNoaWxkcmVuLmNoaWxkMigpLCBvbGRUaGlu
ZywgbmV3VGhpbmcsIG5vZGUtPnNob3VsZEdlbmVyYXRlKCkpOworICAgICAgICAgICAgaWYgKCFu
b2RlLT5jaGlsZDMoKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGNv
bXBhcmVBbmRTd2FwKG5vZGUuY2hpbGRyZW4uY2hpbGQzKCksIG9sZFRoaW5nLCBuZXdUaGluZywg
bm9kZS5zaG91bGRHZW5lcmF0ZSgpKTsKKyAgICAgICAgICAgIGNvbXBhcmVBbmRTd2FwKG5vZGUt
PmNoaWxkcmVuLmNoaWxkMygpLCBvbGRUaGluZywgbmV3VGhpbmcsIG5vZGUtPnNob3VsZEdlbmVy
YXRlKCkpOwogICAgICAgICB9CiAgICAgfQogICAgIApAQCAtNjc3LDI5ICs2NTAsMjggQEAgcHVi
bGljOgogICAgIC8vIGFueSBHZXRMb2NhbHMgaW4gdGhlIGJhc2ljIGJsb2NrLgogICAgIC8vIEZJ
WE1FOiBpdCBtYXkgYmUgYXBwcm9wcmlhdGUsIGluIHRoZSBmdXR1cmUsIHRvIGdlbmVyYWxpemUg
dGhpcyB0byBoYW5kbGUgR2V0TG9jYWxzCiAgICAgLy8gaW50cm9kdWNlZCBhbnl3aGVyZSBpbiB0
aGUgYmFzaWMgYmxvY2suCi0gICAgdm9pZCBzdWJzdGl0dXRlR2V0TG9jYWwoQmFzaWNCbG9jayYg
YmxvY2ssIHVuc2lnbmVkIHN0YXJ0SW5kZXhJbkJsb2NrLCBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZh
cmlhYmxlQWNjZXNzRGF0YSwgTm9kZUluZGV4IG5ld0dldExvY2FsKQorICAgIHZvaWQgc3Vic3Rp
dHV0ZUdldExvY2FsKEJhc2ljQmxvY2smIGJsb2NrLCB1bnNpZ25lZCBzdGFydEluZGV4SW5CbG9j
aywgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEsIE5vZGUqIG5ld0dldExv
Y2FsKQogICAgIHsKICAgICAgICAgaWYgKHZhcmlhYmxlQWNjZXNzRGF0YS0+aXNDYXB0dXJlZCgp
KSB7CiAgICAgICAgICAgICAvLyBMZXQgQ1NFIHdvcnJ5IGFib3V0IHRoaXMgb25lLgogICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIGZvciAodW5zaWduZWQgaW5kZXhJbkJs
b2NrID0gc3RhcnRJbmRleEluQmxvY2s7IGluZGV4SW5CbG9jayA8IGJsb2NrLnNpemUoKTsgKytp
bmRleEluQmxvY2spIHsKLSAgICAgICAgICAgIE5vZGVJbmRleCBub2RlSW5kZXggPSBibG9ja1tp
bmRleEluQmxvY2tdOwotICAgICAgICAgICAgTm9kZSYgbm9kZSA9IGF0KG5vZGVJbmRleCk7Cisg
ICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2tbaW5kZXhJbkJsb2NrXTsKICAgICAgICAgICAg
IGJvb2wgc2hvdWxkQ29udGludWUgPSB0cnVlOwotICAgICAgICAgICAgc3dpdGNoIChub2RlLm9w
KCkpIHsKKyAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewogICAgICAgICAgICAgY2Fz
ZSBTZXRMb2NhbDogewotICAgICAgICAgICAgICAgIGlmIChub2RlLmxvY2FsKCkgPT0gdmFyaWFi
bGVBY2Nlc3NEYXRhLT5sb2NhbCgpKQorICAgICAgICAgICAgICAgIGlmIChub2RlLT5sb2NhbCgp
ID09IHZhcmlhYmxlQWNjZXNzRGF0YS0+bG9jYWwoKSkKICAgICAgICAgICAgICAgICAgICAgc2hv
dWxkQ29udGludWUgPSBmYWxzZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGNhc2UgR2V0TG9jYWw6IHsKLSAgICAg
ICAgICAgICAgICBpZiAobm9kZS52YXJpYWJsZUFjY2Vzc0RhdGEoKSAhPSB2YXJpYWJsZUFjY2Vz
c0RhdGEpCisgICAgICAgICAgICAgICAgaWYgKG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpICE9
IHZhcmlhYmxlQWNjZXNzRGF0YSkKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgICAgICAgICAgc3Vic3RpdHV0ZShibG9jaywgaW5kZXhJbkJsb2NrLCBub2RlSW5kZXgsIG5l
d0dldExvY2FsKTsKLSAgICAgICAgICAgICAgICBOb2RlSW5kZXggb2xkVGFpbEluZGV4ID0gYmxv
Y2sudmFyaWFibGVzQXRUYWlsLm9wZXJhbmQodmFyaWFibGVBY2Nlc3NEYXRhLT5sb2NhbCgpKTsK
LSAgICAgICAgICAgICAgICBpZiAob2xkVGFpbEluZGV4ID09IG5vZGVJbmRleCkKKyAgICAgICAg
ICAgICAgICBzdWJzdGl0dXRlKGJsb2NrLCBpbmRleEluQmxvY2ssIG5vZGUsIG5ld0dldExvY2Fs
KTsKKyAgICAgICAgICAgICAgICBOb2RlKiBvbGRUYWlsTm9kZSA9IGJsb2NrLnZhcmlhYmxlc0F0
VGFpbC5vcGVyYW5kKHZhcmlhYmxlQWNjZXNzRGF0YS0+bG9jYWwoKSk7CisgICAgICAgICAgICAg
ICAgaWYgKG9sZFRhaWxOb2RlID09IG5vZGUpCiAgICAgICAgICAgICAgICAgICAgIGJsb2NrLnZh
cmlhYmxlc0F0VGFpbC5vcGVyYW5kKHZhcmlhYmxlQWNjZXNzRGF0YS0+bG9jYWwoKSkgPSBuZXdH
ZXRMb2NhbDsKICAgICAgICAgICAgICAgICBzaG91bGRDb250aW51ZSA9IGZhbHNlOwogICAgICAg
ICAgICAgICAgIGJyZWFrOwpAQCAtNzE3LDYgKzY4OSw4IEBAIHB1YmxpYzoKICAgICBDb2RlQmxv
Y2sqIG1fY29kZUJsb2NrOwogICAgIFJlZlB0cjxQcm9maWxlcjo6Q29tcGlsYXRpb24+IG1fY29t
cGlsYXRpb247CiAgICAgQ29kZUJsb2NrKiBtX3Byb2ZpbGVkQmxvY2s7CisgICAgCisgICAgTm9k
ZUFsbG9jYXRvciYgbV9hbGxvY2F0b3I7CiAKICAgICBWZWN0b3I8IE93blB0cjxCYXNpY0Jsb2Nr
PiAsIDg+IG1fYmxvY2tzOwogICAgIFZlY3RvcjxFZGdlLCAxNj4gbV92YXJBcmdDaGlsZHJlbjsK
QEAgLTcyNCw3ICs2OTgsNyBAQCBwdWJsaWM6CiAgICAgVmVjdG9yPFJlc29sdmVHbG9iYWxEYXRh
PiBtX3Jlc29sdmVHbG9iYWxEYXRhOwogICAgIFZlY3RvcjxSZXNvbHZlT3BlcmF0aW9uRGF0YT4g
bV9yZXNvbHZlT3BlcmF0aW9uc0RhdGE7CiAgICAgVmVjdG9yPFB1dFRvQmFzZU9wZXJhdGlvbkRh
dGE+IG1fcHV0VG9CYXNlT3BlcmF0aW9uRGF0YTsKLSAgICBWZWN0b3I8Tm9kZUluZGV4LCA4PiBt
X2FyZ3VtZW50czsKKyAgICBWZWN0b3I8Tm9kZSosIDg+IG1fYXJndW1lbnRzOwogICAgIFNlZ21l
bnRlZFZlY3RvcjxWYXJpYWJsZUFjY2Vzc0RhdGEsIDE2PiBtX3ZhcmlhYmxlQWNjZXNzRGF0YTsK
ICAgICBTZWdtZW50ZWRWZWN0b3I8QXJndW1lbnRQb3NpdGlvbiwgOD4gbV9hcmd1bWVudFBvc2l0
aW9uczsKICAgICBTZWdtZW50ZWRWZWN0b3I8U3RydWN0dXJlU2V0LCAxNj4gbV9zdHJ1Y3R1cmVT
ZXQ7CkBAIC03NDQsMTEgKzcxOCwxMSBAQCBwcml2YXRlOgogICAgIAogICAgIHZvaWQgaGFuZGxl
U3VjY2Vzc29yKFZlY3RvcjxCbG9ja0luZGV4LCAxNj4mIHdvcmtsaXN0LCBCbG9ja0luZGV4IGJs
b2NrSW5kZXgsIEJsb2NrSW5kZXggc3VjY2Vzc29ySW5kZXgpOwogICAgIAotICAgIEFkZFNwZWN1
bGF0aW9uTW9kZSBhZGRJbW1lZGlhdGVTaG91bGRTcGVjdWxhdGVJbnRlZ2VyKE5vZGUmIGFkZCwg
Ym9vbCB2YXJpYWJsZVNob3VsZFNwZWN1bGF0ZUludGVnZXIsIE5vZGUmIGltbWVkaWF0ZSkKKyAg
ICBBZGRTcGVjdWxhdGlvbk1vZGUgYWRkSW1tZWRpYXRlU2hvdWxkU3BlY3VsYXRlSW50ZWdlcihO
b2RlKiBhZGQsIGJvb2wgdmFyaWFibGVTaG91bGRTcGVjdWxhdGVJbnRlZ2VyLCBOb2RlKiBpbW1l
ZGlhdGUpCiAgICAgewotICAgICAgICBBU1NFUlQoaW1tZWRpYXRlLmhhc0NvbnN0YW50KCkpOwor
ICAgICAgICBBU1NFUlQoaW1tZWRpYXRlLT5oYXNDb25zdGFudCgpKTsKICAgICAgICAgCi0gICAg
ICAgIEpTVmFsdWUgaW1tZWRpYXRlVmFsdWUgPSBpbW1lZGlhdGUudmFsdWVPZkpTQ29uc3RhbnQo
bV9jb2RlQmxvY2spOworICAgICAgICBKU1ZhbHVlIGltbWVkaWF0ZVZhbHVlID0gaW1tZWRpYXRl
LT52YWx1ZU9mSlNDb25zdGFudChtX2NvZGVCbG9jayk7CiAgICAgICAgIGlmICghaW1tZWRpYXRl
VmFsdWUuaXNOdW1iZXIoKSkKICAgICAgICAgICAgIHJldHVybiBEb250U3BlY3VsYXRlSW50ZWdl
cjsKICAgICAgICAgCkBAIC03NTYsMjUgKzczMCwyNSBAQCBwcml2YXRlOgogICAgICAgICAgICAg
cmV0dXJuIERvbnRTcGVjdWxhdGVJbnRlZ2VyOwogICAgICAgICAKICAgICAgICAgaWYgKGltbWVk
aWF0ZVZhbHVlLmlzSW50MzIoKSkKLSAgICAgICAgICAgIHJldHVybiBhZGQuY2FuU3BlY3VsYXRl
SW50ZWdlcigpID8gU3BlY3VsYXRlSW50ZWdlciA6IERvbnRTcGVjdWxhdGVJbnRlZ2VyOworICAg
ICAgICAgICAgcmV0dXJuIGFkZC0+Y2FuU3BlY3VsYXRlSW50ZWdlcigpID8gU3BlY3VsYXRlSW50
ZWdlciA6IERvbnRTcGVjdWxhdGVJbnRlZ2VyOwogICAgICAgICAKICAgICAgICAgZG91YmxlIGRv
dWJsZUltbWVkaWF0ZSA9IGltbWVkaWF0ZVZhbHVlLmFzRG91YmxlKCk7CiAgICAgICAgIGNvbnN0
IGRvdWJsZSB0d29Ub1RoZTQ4ID0gMjgxNDc0OTc2NzEwNjU2LjA7CiAgICAgICAgIGlmIChkb3Vi
bGVJbW1lZGlhdGUgPCAtdHdvVG9UaGU0OCB8fCBkb3VibGVJbW1lZGlhdGUgPiB0d29Ub1RoZTQ4
KQogICAgICAgICAgICAgcmV0dXJuIERvbnRTcGVjdWxhdGVJbnRlZ2VyOwogICAgICAgICAKLSAg
ICAgICAgcmV0dXJuIG5vZGVDYW5UcnVuY2F0ZUludGVnZXIoYWRkLmFyaXRoTm9kZUZsYWdzKCkp
ID8gU3BlY3VsYXRlSW50ZWdlckJ1dEFsd2F5c1dhdGNoT3ZlcmZsb3cgOiBEb250U3BlY3VsYXRl
SW50ZWdlcjsKKyAgICAgICAgcmV0dXJuIG5vZGVDYW5UcnVuY2F0ZUludGVnZXIoYWRkLT5hcml0
aE5vZGVGbGFncygpKSA/IFNwZWN1bGF0ZUludGVnZXJCdXRBbHdheXNXYXRjaE92ZXJmbG93IDog
RG9udFNwZWN1bGF0ZUludGVnZXI7CiAgICAgfQogICAgIAotICAgIGJvb2wgbXVsSW1tZWRpYXRl
U2hvdWxkU3BlY3VsYXRlSW50ZWdlcihOb2RlJiBtdWwsIE5vZGUmIHZhcmlhYmxlLCBOb2RlJiBp
bW1lZGlhdGUpCisgICAgYm9vbCBtdWxJbW1lZGlhdGVTaG91bGRTcGVjdWxhdGVJbnRlZ2VyKE5v
ZGUqIG11bCwgTm9kZSogdmFyaWFibGUsIE5vZGUqIGltbWVkaWF0ZSkKICAgICB7Ci0gICAgICAg
IEFTU0VSVChpbW1lZGlhdGUuaGFzQ29uc3RhbnQoKSk7CisgICAgICAgIEFTU0VSVChpbW1lZGlh
dGUtPmhhc0NvbnN0YW50KCkpOwogICAgICAgICAKLSAgICAgICAgSlNWYWx1ZSBpbW1lZGlhdGVW
YWx1ZSA9IGltbWVkaWF0ZS52YWx1ZU9mSlNDb25zdGFudChtX2NvZGVCbG9jayk7CisgICAgICAg
IEpTVmFsdWUgaW1tZWRpYXRlVmFsdWUgPSBpbW1lZGlhdGUtPnZhbHVlT2ZKU0NvbnN0YW50KG1f
Y29kZUJsb2NrKTsKICAgICAgICAgaWYgKCFpbW1lZGlhdGVWYWx1ZS5pc0ludDMyKCkpCiAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIAotICAgICAgICBpZiAoIXZhcmlhYmxlLnNo
b3VsZFNwZWN1bGF0ZUludGVnZXJGb3JBcml0aG1ldGljKCkpCisgICAgICAgIGlmICghdmFyaWFi
bGUtPnNob3VsZFNwZWN1bGF0ZUludGVnZXJGb3JBcml0aG1ldGljKCkpCiAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgICAgIAogICAgICAgICBpbnQzMl90IGludEltbWVkaWF0ZSA9IGlt
bWVkaWF0ZVZhbHVlLmFzSW50MzIoKTsKQEAgLTc4NSwxNCArNzU5LDE0IEBAIHByaXZhdGU6CiAg
ICAgICAgIC8vIGNhblNwZWN1bGF0ZUludGVnZXIoKSBpbXBsaWVzKS4KICAgICAgICAgY29uc3Qg
aW50MzJfdCB0d29Ub1RoZTIyID0gMSA8PCAyMjsKICAgICAgICAgaWYgKGludEltbWVkaWF0ZSA8
PSAtdHdvVG9UaGUyMiB8fCBpbnRJbW1lZGlhdGUgPj0gdHdvVG9UaGUyMikKLSAgICAgICAgICAg
IHJldHVybiBtdWwuY2FuU3BlY3VsYXRlSW50ZWdlcigpICYmICFub2RlTWF5T3ZlcmZsb3cobXVs
LmFyaXRoTm9kZUZsYWdzKCkpOworICAgICAgICAgICAgcmV0dXJuIG11bC0+Y2FuU3BlY3VsYXRl
SW50ZWdlcigpICYmICFub2RlTWF5T3ZlcmZsb3cobXVsLT5hcml0aE5vZGVGbGFncygpKTsKIAot
ICAgICAgICByZXR1cm4gbXVsLmNhblNwZWN1bGF0ZUludGVnZXIoKTsKKyAgICAgICAgcmV0dXJu
IG11bC0+Y2FuU3BlY3VsYXRlSW50ZWdlcigpOwogICAgIH0KICAgICAKICAgICAvLyBXaGVuIGEg
bm9kZSdzIHJlZkNvdW50IGdvZXMgZnJvbSAwIHRvIDEsIGl0IG11c3QgKGxvZ2ljYWxseSkgcmVj
dXJzaXZlbHkgcmVmIGFsbCBvZiBpdHMgY2hpbGRyZW4sIGFuZCB2aWNlIHZlcnNhLgotICAgIHZv
aWQgcmVmQ2hpbGRyZW4oTm9kZUluZGV4KTsKLSAgICB2b2lkIGRlcmVmQ2hpbGRyZW4oTm9kZUlu
ZGV4KTsKKyAgICB2b2lkIHJlZkNoaWxkcmVuKE5vZGUqKTsKKyAgICB2b2lkIGRlcmVmQ2hpbGRy
ZW4oTm9kZSopOwogfTsKIAogY2xhc3MgR2V0Qnl0ZWNvZGVCZWdpbkZvckJsb2NrIHsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5zZXJ0aW9uU2V0LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJbnNlcnRpb25TZXQuaAkocmV2aXNpb24g
MTQwOTA0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJbnNlcnRpb25TZXQuaAko
d29ya2luZyBjb3B5KQpAQCAtMzksMTcgKzM5LDE3IEBAIGNsYXNzIEluc2VydGlvbiB7CiBwdWJs
aWM6CiAgICAgSW5zZXJ0aW9uKCkgeyB9CiAgICAgCi0gICAgSW5zZXJ0aW9uKHNpemVfdCBpbmRl
eCwgTm9kZUluZGV4IGVsZW1lbnQpCisgICAgSW5zZXJ0aW9uKHNpemVfdCBpbmRleCwgTm9kZSog
ZWxlbWVudCkKICAgICAgICAgOiBtX2luZGV4KGluZGV4KQogICAgICAgICAsIG1fZWxlbWVudChl
bGVtZW50KQogICAgIHsKICAgICB9CiAgICAgCiAgICAgc2l6ZV90IGluZGV4KCkgY29uc3QgeyBy
ZXR1cm4gbV9pbmRleDsgfQotICAgIE5vZGVJbmRleCBlbGVtZW50KCkgY29uc3QgeyByZXR1cm4g
bV9lbGVtZW50OyB9CisgICAgTm9kZSogZWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fZWxlbWVu
dDsgfQogcHJpdmF0ZToKICAgICBzaXplX3QgbV9pbmRleDsKLSAgICBOb2RlSW5kZXggbV9lbGVt
ZW50OworICAgIE5vZGUqIG1fZWxlbWVudDsKIH07CiAKIGNsYXNzIEluc2VydGlvblNldCB7CkBA
IC01OSwyMCArNTksMjAgQEAgcHVibGljOgogICAgIHsKICAgICB9CiAgICAgCi0gICAgTm9kZUlu
ZGV4IGluc2VydChjb25zdCBJbnNlcnRpb24mIGluc2VydGlvbikKKyAgICBOb2RlKiBpbnNlcnQo
Y29uc3QgSW5zZXJ0aW9uJiBpbnNlcnRpb24pCiAgICAgewogICAgICAgICBBU1NFUlQoIW1faW5z
ZXJ0aW9ucy5zaXplKCkgfHwgbV9pbnNlcnRpb25zLmxhc3QoKS5pbmRleCgpIDw9IGluc2VydGlv
bi5pbmRleCgpKTsKICAgICAgICAgbV9pbnNlcnRpb25zLmFwcGVuZChpbnNlcnRpb24pOwogICAg
ICAgICByZXR1cm4gaW5zZXJ0aW9uLmVsZW1lbnQoKTsKICAgICB9CiAgICAgCi0gICAgTm9kZUlu
ZGV4IGluc2VydChzaXplX3QgaW5kZXgsIE5vZGVJbmRleCBlbGVtZW50KQorICAgIE5vZGUqIGlu
c2VydChzaXplX3QgaW5kZXgsIE5vZGUqIGVsZW1lbnQpCiAgICAgewogICAgICAgICByZXR1cm4g
aW5zZXJ0KEluc2VydGlvbihpbmRleCwgZWxlbWVudCkpOwogICAgIH0KIAogI2RlZmluZSBERkdf
REVGSU5FX0lOU0VSVF9OT0RFKHRlbXBsYXRlUHJlLCB0ZW1wbGF0ZVBvc3QsIHR5cGVQYXJhbXMs
IHZhbHVlUGFyYW1zQ29tbWEsIHZhbHVlUGFyYW1zLCB2YWx1ZUFyZ3MpIFwKLSAgICB0ZW1wbGF0
ZVByZSB0eXBlUGFyYW1zIHRlbXBsYXRlUG9zdCBOb2RlSW5kZXggaW5zZXJ0Tm9kZShzaXplX3Qg
aW5kZXgsIFJlZkNoaWxkcmVuTW9kZSByZWZDaGlsZHJlbk1vZGUsIFJlZk5vZGVNb2RlIHJlZk5v
ZGVNb2RlLCBTcGVjdWxhdGVkVHlwZSB0eXBlIHZhbHVlUGFyYW1zQ29tbWEgdmFsdWVQYXJhbXMp
IFwKKyAgICB0ZW1wbGF0ZVByZSB0eXBlUGFyYW1zIHRlbXBsYXRlUG9zdCBOb2RlKiBpbnNlcnRO
b2RlKHNpemVfdCBpbmRleCwgUmVmQ2hpbGRyZW5Nb2RlIHJlZkNoaWxkcmVuTW9kZSwgUmVmTm9k
ZU1vZGUgcmVmTm9kZU1vZGUsIFNwZWN1bGF0ZWRUeXBlIHR5cGUgdmFsdWVQYXJhbXNDb21tYSB2
YWx1ZVBhcmFtcykgXAogICAgIHsgXAogICAgICAgICByZXR1cm4gaW5zZXJ0KGluZGV4LCBtX2dy
YXBoLmFkZE5vZGUocmVmQ2hpbGRyZW5Nb2RlLCByZWZOb2RlTW9kZSwgdHlwZSB2YWx1ZVBhcmFt
c0NvbW1hIHZhbHVlQXJncykpOyBcCiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdKSVRDb21waWxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHSklUQ29tcGlsZXIuaAkocmV2aXNpb24gMTQwOTA0KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNjYsMTEg
KzI2NiwxMSBAQCBwdWJsaWM6CiAgICAgICAgIG1fZGlzYXNzZW1ibGVyLT5zZXRGb3JCbG9jayhi
bG9ja0luZGV4LCBsYWJlbElnbm9yaW5nV2F0Y2hwb2ludHMoKSk7CiAgICAgfQogICAgIAotICAg
IHZvaWQgc2V0Rm9yTm9kZShOb2RlSW5kZXggbm9kZUluZGV4KQorICAgIHZvaWQgc2V0Rm9yTm9k
ZShOb2RlKiBub2RlKQogICAgIHsKICAgICAgICAgaWYgKExJS0VMWSghbV9kaXNhc3NlbWJsZXIp
KQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBtX2Rpc2Fzc2VtYmxlci0+c2V0Rm9yTm9k
ZShub2RlSW5kZXgsIGxhYmVsSWdub3JpbmdXYXRjaHBvaW50cygpKTsKKyAgICAgICAgbV9kaXNh
c3NlbWJsZXItPnNldEZvck5vZGUobm9kZSwgbGFiZWxJZ25vcmluZ1dhdGNocG9pbnRzKCkpOwog
ICAgIH0KICAgICAKICAgICB2b2lkIHNldEVuZE9mTWFpblBhdGgoKQpAQCAtMzQ4LDEwICszNDgs
MTAgQEAgcHVibGljOgogICAgIH0KIAogI2lmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgdm9pZCog
YWRkcmVzc09mRG91YmxlQ29uc3RhbnQoTm9kZUluZGV4IG5vZGVJbmRleCkKKyAgICB2b2lkKiBh
ZGRyZXNzT2ZEb3VibGVDb25zdGFudChOb2RlKiBub2RlKQogICAgIHsKLSAgICAgICAgQVNTRVJU
KG1fZ3JhcGguaXNOdW1iZXJDb25zdGFudChub2RlSW5kZXgpKTsKLSAgICAgICAgdW5zaWduZWQg
Y29uc3RhbnRJbmRleCA9IGdyYXBoKClbbm9kZUluZGV4XS5jb25zdGFudE51bWJlcigpOworICAg
ICAgICBBU1NFUlQobV9ncmFwaC5pc051bWJlckNvbnN0YW50KG5vZGUpKTsKKyAgICAgICAgdW5z
aWduZWQgY29uc3RhbnRJbmRleCA9IG5vZGUtPmNvbnN0YW50TnVtYmVyKCk7CiAgICAgICAgIHJl
dHVybiAmKGNvZGVCbG9jaygpLT5jb25zdGFudFJlZ2lzdGVyKEZpcnN0Q29uc3RhbnRSZWdpc3Rl
ckluZGV4ICsgY29uc3RhbnRJbmRleCkpOwogICAgIH0KICNlbmRpZgpAQCAtNDA1LDE1ICs0MDUs
MTUgQEAgcHVibGljOgogICAgICAgICAvLyB2YWx1ZSBvZiAoTm9uZSwgW10pLiBCdXQgdGhlIG9s
ZCBKSVQgbWF5IHN0YXNoIHNvbWUgdmFsdWVzIHRoZXJlLiBTbyB3ZSByZWFsbHkKICAgICAgICAg
Ly8gbmVlZCAoVG9wLCBUT1ApLgogICAgICAgICBmb3IgKHNpemVfdCBhcmd1bWVudCA9IDA7IGFy
Z3VtZW50IDwgYmFzaWNCbG9jay52YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZBcmd1bWVudHMoKTsg
Kythcmd1bWVudCkgewotICAgICAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRleCA9IGJhc2ljQmxv
Y2sudmFyaWFibGVzQXRIZWFkLmFyZ3VtZW50KGFyZ3VtZW50KTsKLSAgICAgICAgICAgIGlmIChu
b2RlSW5kZXggPT0gTm9Ob2RlIHx8ICFtX2dyYXBoW25vZGVJbmRleF0uc2hvdWxkR2VuZXJhdGUo
KSkKKyAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBiYXNpY0Jsb2NrLnZhcmlhYmxlc0F0SGVhZC5h
cmd1bWVudChhcmd1bWVudCk7CisgICAgICAgICAgICBpZiAoIW5vZGUgfHwgIW5vZGUtPnNob3Vs
ZEdlbmVyYXRlKCkpCiAgICAgICAgICAgICAgICAgZW50cnktPm1fZXhwZWN0ZWRWYWx1ZXMuYXJn
dW1lbnQoYXJndW1lbnQpLm1ha2VUb3AoKTsKICAgICAgICAgfQogICAgICAgICBmb3IgKHNpemVf
dCBsb2NhbCA9IDA7IGxvY2FsIDwgYmFzaWNCbG9jay52YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZM
b2NhbHMoKTsgKytsb2NhbCkgewotICAgICAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRleCA9IGJh
c2ljQmxvY2sudmFyaWFibGVzQXRIZWFkLmxvY2FsKGxvY2FsKTsKLSAgICAgICAgICAgIGlmIChu
b2RlSW5kZXggPT0gTm9Ob2RlIHx8ICFtX2dyYXBoW25vZGVJbmRleF0uc2hvdWxkR2VuZXJhdGUo
KSkKKyAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBiYXNpY0Jsb2NrLnZhcmlhYmxlc0F0SGVhZC5s
b2NhbChsb2NhbCk7CisgICAgICAgICAgICBpZiAoIW5vZGUgfHwgIW5vZGUtPnNob3VsZEdlbmVy
YXRlKCkpCiAgICAgICAgICAgICAgICAgZW50cnktPm1fZXhwZWN0ZWRWYWx1ZXMubG9jYWwobG9j
YWwpLm1ha2VUb3AoKTsKLSAgICAgICAgICAgIGVsc2UgaWYgKG1fZ3JhcGhbbm9kZUluZGV4XS52
YXJpYWJsZUFjY2Vzc0RhdGEoKS0+c2hvdWxkVXNlRG91YmxlRm9ybWF0KCkpCisgICAgICAgICAg
ICBlbHNlIGlmIChub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+c2hvdWxkVXNlRG91YmxlRm9y
bWF0KCkpCiAgICAgICAgICAgICAgICAgZW50cnktPm1fbG9jYWxzRm9yY2VkRG91YmxlLnNldChs
b2NhbCk7CiAgICAgICAgIH0KICNlbHNlCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0xvbmdMaXZlZFN0YXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0xvbmdMaXZlZFN0YXRlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHTG9uZ0xpdmVkU3RhdGUuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDQ5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdMb25nTGl2ZWRTdGF0ZS5oIgorCisj
aWYgRU5BQkxFKERGR19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKwor
TG9uZ0xpdmVkU3RhdGU6OkxvbmdMaXZlZFN0YXRlKCkKK3sKK30KKworTG9uZ0xpdmVkU3RhdGU6
On5Mb25nTGl2ZWRTdGF0ZSgpCit7Cit9CisKK3ZvaWQgTG9uZ0xpdmVkU3RhdGU6OnNocmlua1Rv
Rml0KCkKK3sKKyAgICBtX2FsbG9jYXRvci5yZXNldCgpOworfQorCit9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdMb25nTGl2ZWRTdGF0ZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTG9uZ0xpdmVkU3RhdGUuaAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTG9uZ0xpdmVkU3RhdGUuaAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSw1NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaWZuZGVmIERGR0xvbmdMaXZlZFN0YXRlX2gKKyNkZWZpbmUgREZHTG9uZ0xp
dmVkU3RhdGVfaAorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNpZiBFTkFCTEUoREZH
X0pJVCkKKworI2luY2x1ZGUgIkRGR05vZGVBbGxvY2F0b3IuaCIKKyNpbmNsdWRlIDx3dGYvRmFz
dEFsbG9jQmFzZS5oPgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorCituYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK2NsYXNzIExvbmdMaXZlZFN0YXRlIHsKKyAgICBXVEZf
TUFLRV9GQVNUX0FMTE9DQVRFRDsgV1RGX01BS0VfTk9OQ09QWUFCTEUoTG9uZ0xpdmVkU3RhdGUp
OworcHVibGljOgorICAgIExvbmdMaXZlZFN0YXRlKCk7CisgICAgfkxvbmdMaXZlZFN0YXRlKCk7
CisgICAgCisgICAgdm9pZCBzaHJpbmtUb0ZpdCgpOworICAgIAorICAgIE5vZGVBbGxvY2F0b3Ig
bV9hbGxvY2F0b3I7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAv
LyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR0xvbmdMaXZlZFN0YXRlX2gKKwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdNaW5pZmllZElELmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdNaW5pZmllZElELmgJKHJldmlzaW9uIDE0
MDkwNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTWluaWZpZWRJRC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC00NCwxNCArNDQsMTQgQEAgY2xhc3MgTWluaWZpZWRJRCB7CiBwdWJsaWM6
CiAgICAgTWluaWZpZWRJRCgpIDogbV9pZChpbnZhbGlkSUQoKSkgeyB9CiAgICAgTWluaWZpZWRJ
RChXVEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZVR5cGUpIDogbV9pZChvdGhlckludmFsaWRJRCgp
KSB7IH0KLSAgICBleHBsaWNpdCBNaW5pZmllZElEKE5vZGVJbmRleCBub2RlSW5kZXgpIDogbV9p
ZChub2RlSW5kZXgpIHsgfQorICAgIGV4cGxpY2l0IE1pbmlmaWVkSUQoTm9kZSogbm9kZSkgOiBt
X2lkKGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KG5vZGUpKSB7IH0KICAgICAKICAgICBib29sIG9w
ZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuIG1faWQgPT0gaW52YWxpZElEKCk7IH0KICAgICAKICAg
ICAvLyBUaGlzIHRha2VzIEdyYXBoJiB0byByZW1pbmQgeW91LCB0aGF0IHlvdSBzaG91bGQgb25s
eSBiZSBjYWxsaW5nIHRoaXMgbWV0aG9kCiAgICAgLy8gd2hlbiB5b3UncmUgaW4gdGhlIG1haW4g
Y29tcGlsYXRpb24gcGFzcyAoaS5lLiB5b3UgaGF2ZSBhIGdyYXBoKSBhbmQgbm90IGxhdGVyLAog
ICAgIC8vIGxpa2UgZHVyaW5nIE9TUiBleGl0IGNvbXBpbGF0aW9uLgotICAgIE5vZGVJbmRleCBu
b2RlSW5kZXgoY29uc3QgR3JhcGgmKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxOb2RlSW5k
ZXg+KG1faWQpOyB9CisgICAgTm9kZSogbm9kZShjb25zdCBHcmFwaCYpIGNvbnN0IHsgcmV0dXJu
IGJpdHdpc2VfY2FzdDxOb2RlKj4obV9pZCk7IH0KICAgICAKICAgICBib29sIG9wZXJhdG9yPT0o
Y29uc3QgTWluaWZpZWRJRCYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuIG1faWQgPT0gb3RoZXIubV9p
ZDsgfQogICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBNaW5pZmllZElEJiBvdGhlcikgY29uc3Qg
eyByZXR1cm4gbV9pZCAhPSBvdGhlci5tX2lkOyB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR01pbmlmaWVkTm9kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdNaW5pZmllZE5vZGUuY3BwCShyZXZpc2lvbiAxNDA5MDQpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01pbmlmaWVkTm9kZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMyLDIwICszMiwyMCBAQAogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAK
LU1pbmlmaWVkTm9kZSBNaW5pZmllZE5vZGU6OmZyb21Ob2RlKE5vZGVJbmRleCBub2RlSW5kZXgs
IE5vZGUmIG5vZGUpCitNaW5pZmllZE5vZGUgTWluaWZpZWROb2RlOjpmcm9tTm9kZShOb2RlKiBu
b2RlKQogewotICAgIEFTU0VSVChiZWxvbmdzSW5NaW5pZmllZEdyYXBoKG5vZGUub3AoKSkpOwor
ICAgIEFTU0VSVChiZWxvbmdzSW5NaW5pZmllZEdyYXBoKG5vZGUtPm9wKCkpKTsKICAgICBNaW5p
ZmllZE5vZGUgcmVzdWx0OwotICAgIHJlc3VsdC5tX2lkID0gTWluaWZpZWRJRChub2RlSW5kZXgp
OwotICAgIHJlc3VsdC5tX29wID0gbm9kZS5vcCgpOwotICAgIGlmIChoYXNDaGlsZChub2RlLm9w
KCkpKQotICAgICAgICByZXN1bHQubV9jaGlsZE9ySW5mbyA9IG5vZGUuY2hpbGQxKCkuaW5kZXgo
KTsKLSAgICBlbHNlIGlmIChoYXNDb25zdGFudE51bWJlcihub2RlLm9wKCkpKQotICAgICAgICBy
ZXN1bHQubV9jaGlsZE9ySW5mbyA9IG5vZGUuY29uc3RhbnROdW1iZXIoKTsKKyAgICByZXN1bHQu
bV9pZCA9IE1pbmlmaWVkSUQobm9kZSk7CisgICAgcmVzdWx0Lm1fb3AgPSBub2RlLT5vcCgpOwor
ICAgIGlmIChoYXNDaGlsZChub2RlLT5vcCgpKSkKKyAgICAgICAgcmVzdWx0Lm1fY2hpbGRPcklu
Zm8gPSBNaW5pZmllZElEKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSkubV9pZDsKKyAgICBlbHNlIGlm
IChoYXNDb25zdGFudE51bWJlcihub2RlLT5vcCgpKSkKKyAgICAgICAgcmVzdWx0Lm1fY2hpbGRP
ckluZm8gPSBub2RlLT5jb25zdGFudE51bWJlcigpOwogICAgIGVsc2UgaWYgKGhhc1dlYWtDb25z
dGFudChub2RlLm9wKCkpKQotICAgICAgICByZXN1bHQubV9jaGlsZE9ySW5mbyA9IGJpdHdpc2Vf
Y2FzdDx1aW50cHRyX3Q+KG5vZGUud2Vha0NvbnN0YW50KCkpOworICAgICAgICByZXN1bHQubV9j
aGlsZE9ySW5mbyA9IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KG5vZGUtPndlYWtDb25zdGFudCgp
KTsKICAgICBlbHNlIHsKLSAgICAgICAgQVNTRVJUKG5vZGUub3AoKSA9PSBQaGFudG9tQXJndW1l
bnRzKTsKKyAgICAgICAgQVNTRVJUKG5vZGUtPm9wKCkgPT0gUGhhbnRvbUFyZ3VtZW50cyk7CiAg
ICAgICAgIHJlc3VsdC5tX2NoaWxkT3JJbmZvID0gMDsKICAgICB9CiAgICAgcmV0dXJuIHJlc3Vs
dDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTWluaWZpZWROb2RlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdNaW5pZmllZE5vZGUuaAko
cmV2aXNpb24gMTQwOTA0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdNaW5pZmll
ZE5vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtNTgsNyArNTgsNyBAQCBjbGFzcyBNaW5pZmllZE5v
ZGUgewogcHVibGljOgogICAgIE1pbmlmaWVkTm9kZSgpIHsgfQogICAgIAotICAgIHN0YXRpYyBN
aW5pZmllZE5vZGUgZnJvbU5vZGUoTm9kZUluZGV4LCBOb2RlJik7CisgICAgc3RhdGljIE1pbmlm
aWVkTm9kZSBmcm9tTm9kZShOb2RlKik7CiAgICAgCiAgICAgTWluaWZpZWRJRCBpZCgpIGNvbnN0
IHsgcmV0dXJuIG1faWQ7IH0KICAgICBOb2RlVHlwZSBvcCgpIGNvbnN0IHsgcmV0dXJuIG1fb3A7
IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmNwcAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5jcHAJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsNTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGR05vZGUuaCIKKworI2lmIEVO
QUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZHTm9kZUFsbG9jYXRvci5oIgorCituYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK3Vuc2lnbmVkIE5vZGU6OmluZGV4KCkgY29uc3QK
K3sKKyAgICByZXR1cm4gTm9kZUFsbG9jYXRvcjo6YWxsb2NhdG9yT2YodGhpcyktPmluZGV4T2Yo
dGhpcyk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworbmFtZXNwYWNlIFdURiB7
CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBKU0M6OkRGRzo6Tm9kZSog
bm9kZSkKK3sKKyAgICBpZiAoIW5vZGUpCisgICAgICAgIG91dC5wcmludCgiLSIpOworICAgIGVs
c2UKKyAgICAgICAgb3V0LnByaW50KCJAIiwgbm9kZS0+aW5kZXgoKSk7CisgICAgb3V0LnByaW50
KEpTQzo6QWJicmV2aWF0ZWRTcGVjdWxhdGlvbkR1bXAobm9kZS0+cHJlZGljdGlvbigpKSk7Cit9
CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCShyZXZpc2lvbiAxNDA5MDQpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTIgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEyLCAyMDEzIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtNjgsNyArNjgsNyBAQCBzdHJ1Y3QgTmV3QXJyYXlCdWZmZXJEYXRhIHsKIAogLy8gVGhp
cyB0eXBlIHVzZWQgaW4gcGFzc2luZyBhbiBpbW1lZGlhdGUgYXJndW1lbnQgdG8gTm9kZSBjb25z
dHJ1Y3RvcjsKIC8vIGRpc3Rpbmd1aXNoZXMgYW4gaW1tZWRpYXRlIHZhbHVlICh0eXBpY2FsbHkg
YW4gaW5kZXggaW50byBhIENvZGVCbG9jayBkYXRhIHN0cnVjdHVyZSAtIAotLy8gYSBjb25zdGFu
dCBpbmRleCwgYXJndW1lbnQsIG9yIGlkZW50aWZpZXIpIGZyb20gYSBOb2RlSW5kZXguCisvLyBh
IGNvbnN0YW50IGluZGV4LCBhcmd1bWVudCwgb3IgaWRlbnRpZmllcikgZnJvbSBhIE5vZGUqLgog
c3RydWN0IE9wSW5mbyB7CiAgICAgZXhwbGljaXQgT3BJbmZvKGludDMyX3QgdmFsdWUpIDogbV92
YWx1ZShzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KHZhbHVlKSkgeyB9CiAgICAgZXhwbGljaXQgT3BJ
bmZvKHVpbnQzMl90IHZhbHVlKSA6IG1fdmFsdWUoc3RhdGljX2Nhc3Q8dWludHB0cl90Pih2YWx1
ZSkpIHsgfQpAQCAtOTksNyArOTksNyBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgfQogICAgIAogICAg
IC8vIENvbnN0cnVjdCBhIG5vZGUgd2l0aCB1cCB0byAzIGNoaWxkcmVuLCBubyBpbW1lZGlhdGUg
dmFsdWUuCi0gICAgTm9kZShOb2RlVHlwZSBvcCwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBOb2Rl
SW5kZXggY2hpbGQxID0gTm9Ob2RlLCBOb2RlSW5kZXggY2hpbGQyID0gTm9Ob2RlLCBOb2RlSW5k
ZXggY2hpbGQzID0gTm9Ob2RlKQorICAgIE5vZGUoTm9kZVR5cGUgb3AsIENvZGVPcmlnaW4gY29k
ZU9yaWdpbiwgTm9kZSogY2hpbGQxID0gMCwgTm9kZSogY2hpbGQyID0gMCwgTm9kZSogY2hpbGQz
ID0gMCkKICAgICAgICAgOiBjb2RlT3JpZ2luKGNvZGVPcmlnaW4pCiAgICAgICAgICwgY2hpbGRy
ZW4oQWRqYWNlbmN5TGlzdDo6Rml4ZWQsIGNoaWxkMSwgY2hpbGQyLCBjaGlsZDMpCiAgICAgICAg
ICwgbV92aXJ0dWFsUmVnaXN0ZXIoSW52YWxpZFZpcnR1YWxSZWdpc3RlcikKQEAgLTExMSw3ICsx
MTEsNyBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgfQogCiAgICAgLy8gQ29uc3RydWN0IGEgbm9kZSB3
aXRoIHVwIHRvIDMgY2hpbGRyZW4gYW5kIGFuIGltbWVkaWF0ZSB2YWx1ZS4KLSAgICBOb2RlKE5v
ZGVUeXBlIG9wLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIE9wSW5mbyBpbW0sIE5vZGVJbmRleCBj
aGlsZDEgPSBOb05vZGUsIE5vZGVJbmRleCBjaGlsZDIgPSBOb05vZGUsIE5vZGVJbmRleCBjaGls
ZDMgPSBOb05vZGUpCisgICAgTm9kZShOb2RlVHlwZSBvcCwgQ29kZU9yaWdpbiBjb2RlT3JpZ2lu
LCBPcEluZm8gaW1tLCBOb2RlKiBjaGlsZDEgPSAwLCBOb2RlKiBjaGlsZDIgPSAwLCBOb2RlKiBj
aGlsZDMgPSAwKQogICAgICAgICA6IGNvZGVPcmlnaW4oY29kZU9yaWdpbikKICAgICAgICAgLCBj
aGlsZHJlbihBZGphY2VuY3lMaXN0OjpGaXhlZCwgY2hpbGQxLCBjaGlsZDIsIGNoaWxkMykKICAg
ICAgICAgLCBtX3ZpcnR1YWxSZWdpc3RlcihJbnZhbGlkVmlydHVhbFJlZ2lzdGVyKQpAQCAtMTI0
LDcgKzEyNCw3IEBAIHN0cnVjdCBOb2RlIHsKICAgICB9CiAKICAgICAvLyBDb25zdHJ1Y3QgYSBu
b2RlIHdpdGggdXAgdG8gMyBjaGlsZHJlbiBhbmQgdHdvIGltbWVkaWF0ZSB2YWx1ZXMuCi0gICAg
Tm9kZShOb2RlVHlwZSBvcCwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBPcEluZm8gaW1tMSwgT3BJ
bmZvIGltbTIsIE5vZGVJbmRleCBjaGlsZDEgPSBOb05vZGUsIE5vZGVJbmRleCBjaGlsZDIgPSBO
b05vZGUsIE5vZGVJbmRleCBjaGlsZDMgPSBOb05vZGUpCisgICAgTm9kZShOb2RlVHlwZSBvcCwg
Q29kZU9yaWdpbiBjb2RlT3JpZ2luLCBPcEluZm8gaW1tMSwgT3BJbmZvIGltbTIsIE5vZGUqIGNo
aWxkMSA9IDAsIE5vZGUqIGNoaWxkMiA9IDAsIE5vZGUqIGNoaWxkMyA9IDApCiAgICAgICAgIDog
Y29kZU9yaWdpbihjb2RlT3JpZ2luKQogICAgICAgICAsIGNoaWxkcmVuKEFkamFjZW5jeUxpc3Q6
OkZpeGVkLCBjaGlsZDEsIGNoaWxkMiwgY2hpbGQzKQogICAgICAgICAsIG1fdmlydHVhbFJlZ2lz
dGVyKEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIpCkBAIC0xNTQsNiArMTU0LDkgQEAgc3RydWN0IE5v
ZGUgewogICAgIE5vZGVUeXBlIG9wKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Tm9kZVR5
cGU+KG1fb3ApOyB9CiAgICAgTm9kZUZsYWdzIGZsYWdzKCkgY29uc3QgeyByZXR1cm4gbV9mbGFn
czsgfQogICAgIAorICAgIC8vIFRoaXMgaXMgbm90IGEgZmFzdCBtZXRob2QuCisgICAgdW5zaWdu
ZWQgaW5kZXgoKSBjb25zdDsKKyAgICAKICAgICB2b2lkIHNldE9wKE5vZGVUeXBlIG9wKQogICAg
IHsKICAgICAgICAgbV9vcCA9IG9wOwpAQCAtMjgxLDcgKzI4NCw3IEBAIHN0cnVjdCBOb2RlIHsK
ICAgICAgICAgY29udmVydFRvU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnQoc3RydWN0dXJl
U2V0KCkuc2luZ2xldG9uU3RydWN0dXJlKCkpOwogICAgIH0KICAgICAKLSAgICB2b2lkIGNvbnZl
cnRUb0dldEJ5T2Zmc2V0KHVuc2lnbmVkIHN0b3JhZ2VBY2Nlc3NEYXRhSW5kZXgsIE5vZGVJbmRl
eCBzdG9yYWdlKQorICAgIHZvaWQgY29udmVydFRvR2V0QnlPZmZzZXQodW5zaWduZWQgc3RvcmFn
ZUFjY2Vzc0RhdGFJbmRleCwgTm9kZSogc3RvcmFnZSkKICAgICB7CiAgICAgICAgIEFTU0VSVCht
X29wID09IEdldEJ5SWQgfHwgbV9vcCA9PSBHZXRCeUlkRmx1c2gpOwogICAgICAgICBtX29wSW5m
byA9IHN0b3JhZ2VBY2Nlc3NEYXRhSW5kZXg7CkBAIC0yOTAsNyArMjkzLDcgQEAgc3RydWN0IE5v
ZGUgewogICAgICAgICBtX2ZsYWdzICY9IH5Ob2RlQ2xvYmJlcnNXb3JsZDsKICAgICB9CiAgICAg
Ci0gICAgdm9pZCBjb252ZXJ0VG9QdXRCeU9mZnNldCh1bnNpZ25lZCBzdG9yYWdlQWNjZXNzRGF0
YUluZGV4LCBOb2RlSW5kZXggc3RvcmFnZSkKKyAgICB2b2lkIGNvbnZlcnRUb1B1dEJ5T2Zmc2V0
KHVuc2lnbmVkIHN0b3JhZ2VBY2Nlc3NEYXRhSW5kZXgsIE5vZGUqIHN0b3JhZ2UpCiAgICAgewog
ICAgICAgICBBU1NFUlQobV9vcCA9PSBQdXRCeUlkIHx8IG1fb3AgPT0gUHV0QnlJZERpcmVjdCk7
CiAgICAgICAgIG1fb3BJbmZvID0gc3RvcmFnZUFjY2Vzc0RhdGFJbmRleDsKQEAgLTkyMCw5ICs5
MjMsMTAgQEAgc3RydWN0IE5vZGUgewogICAgICAgICByZXR1cm4gbV9yZWZDb3VudDsKICAgICB9
CiAKLSAgICB2b2lkIHJlZigpCisgICAgTm9kZSogcmVmKCkKICAgICB7CiAgICAgICAgIG1fcmVm
Q291bnQrKzsKKyAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgfQogCiAgICAgdW5zaWduZWQgcG9z
dGZpeFJlZigpCkBAIC0xMTM1LDQ0ICsxMTM5LDQ0IEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAg
cmV0dXJuIGlzQ2VsbFNwZWN1bGF0aW9uKHByZWRpY3Rpb24oKSk7CiAgICAgfQogICAgIAotICAg
IHN0YXRpYyBib29sIHNob3VsZFNwZWN1bGF0ZUludGVnZXIoTm9kZSYgb3AxLCBOb2RlJiBvcDIp
CisgICAgc3RhdGljIGJvb2wgc2hvdWxkU3BlY3VsYXRlSW50ZWdlcihOb2RlKiBvcDEsIE5vZGUq
IG9wMikKICAgICB7Ci0gICAgICAgIHJldHVybiBvcDEuc2hvdWxkU3BlY3VsYXRlSW50ZWdlcigp
ICYmIG9wMi5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCk7CisgICAgICAgIHJldHVybiBvcDEtPnNo
b3VsZFNwZWN1bGF0ZUludGVnZXIoKSAmJiBvcDItPnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKTsK
ICAgICB9CiAgICAgCi0gICAgc3RhdGljIGJvb2wgc2hvdWxkU3BlY3VsYXRlSW50ZWdlckZvckFy
aXRobWV0aWMoTm9kZSYgb3AxLCBOb2RlJiBvcDIpCisgICAgc3RhdGljIGJvb2wgc2hvdWxkU3Bl
Y3VsYXRlSW50ZWdlckZvckFyaXRobWV0aWMoTm9kZSogb3AxLCBOb2RlKiBvcDIpCiAgICAgewot
ICAgICAgICByZXR1cm4gb3AxLnNob3VsZFNwZWN1bGF0ZUludGVnZXJGb3JBcml0aG1ldGljKCkg
JiYgb3AyLnNob3VsZFNwZWN1bGF0ZUludGVnZXJGb3JBcml0aG1ldGljKCk7CisgICAgICAgIHJl
dHVybiBvcDEtPnNob3VsZFNwZWN1bGF0ZUludGVnZXJGb3JBcml0aG1ldGljKCkgJiYgb3AyLT5z
aG91bGRTcGVjdWxhdGVJbnRlZ2VyRm9yQXJpdGhtZXRpYygpOwogICAgIH0KICAgICAKLSAgICBz
dGF0aWMgYm9vbCBzaG91bGRTcGVjdWxhdGVJbnRlZ2VyRXhwZWN0aW5nRGVmaW5lZChOb2RlJiBv
cDEsIE5vZGUmIG9wMikKKyAgICBzdGF0aWMgYm9vbCBzaG91bGRTcGVjdWxhdGVJbnRlZ2VyRXhw
ZWN0aW5nRGVmaW5lZChOb2RlKiBvcDEsIE5vZGUqIG9wMikKICAgICB7Ci0gICAgICAgIHJldHVy
biBvcDEuc2hvdWxkU3BlY3VsYXRlSW50ZWdlckV4cGVjdGluZ0RlZmluZWQoKSAmJiBvcDIuc2hv
dWxkU3BlY3VsYXRlSW50ZWdlckV4cGVjdGluZ0RlZmluZWQoKTsKKyAgICAgICAgcmV0dXJuIG9w
MS0+c2hvdWxkU3BlY3VsYXRlSW50ZWdlckV4cGVjdGluZ0RlZmluZWQoKSAmJiBvcDItPnNob3Vs
ZFNwZWN1bGF0ZUludGVnZXJFeHBlY3RpbmdEZWZpbmVkKCk7CiAgICAgfQogICAgIAotICAgIHN0
YXRpYyBib29sIHNob3VsZFNwZWN1bGF0ZURvdWJsZUZvckFyaXRobWV0aWMoTm9kZSYgb3AxLCBO
b2RlJiBvcDIpCisgICAgc3RhdGljIGJvb2wgc2hvdWxkU3BlY3VsYXRlRG91YmxlRm9yQXJpdGht
ZXRpYyhOb2RlKiBvcDEsIE5vZGUqIG9wMikKICAgICB7Ci0gICAgICAgIHJldHVybiBvcDEuc2hv
dWxkU3BlY3VsYXRlRG91YmxlRm9yQXJpdGhtZXRpYygpICYmIG9wMi5zaG91bGRTcGVjdWxhdGVE
b3VibGVGb3JBcml0aG1ldGljKCk7CisgICAgICAgIHJldHVybiBvcDEtPnNob3VsZFNwZWN1bGF0
ZURvdWJsZUZvckFyaXRobWV0aWMoKSAmJiBvcDItPnNob3VsZFNwZWN1bGF0ZURvdWJsZUZvckFy
aXRobWV0aWMoKTsKICAgICB9CiAgICAgCi0gICAgc3RhdGljIGJvb2wgc2hvdWxkU3BlY3VsYXRl
TnVtYmVyKE5vZGUmIG9wMSwgTm9kZSYgb3AyKQorICAgIHN0YXRpYyBib29sIHNob3VsZFNwZWN1
bGF0ZU51bWJlcihOb2RlKiBvcDEsIE5vZGUqIG9wMikKICAgICB7Ci0gICAgICAgIHJldHVybiBv
cDEuc2hvdWxkU3BlY3VsYXRlTnVtYmVyKCkgJiYgb3AyLnNob3VsZFNwZWN1bGF0ZU51bWJlcigp
OworICAgICAgICByZXR1cm4gb3AxLT5zaG91bGRTcGVjdWxhdGVOdW1iZXIoKSAmJiBvcDItPnNo
b3VsZFNwZWN1bGF0ZU51bWJlcigpOwogICAgIH0KICAgICAKLSAgICBzdGF0aWMgYm9vbCBzaG91
bGRTcGVjdWxhdGVOdW1iZXJFeHBlY3RpbmdEZWZpbmVkKE5vZGUmIG9wMSwgTm9kZSYgb3AyKQor
ICAgIHN0YXRpYyBib29sIHNob3VsZFNwZWN1bGF0ZU51bWJlckV4cGVjdGluZ0RlZmluZWQoTm9k
ZSogb3AxLCBOb2RlKiBvcDIpCiAgICAgewotICAgICAgICByZXR1cm4gb3AxLnNob3VsZFNwZWN1
bGF0ZU51bWJlckV4cGVjdGluZ0RlZmluZWQoKSAmJiBvcDIuc2hvdWxkU3BlY3VsYXRlTnVtYmVy
RXhwZWN0aW5nRGVmaW5lZCgpOworICAgICAgICByZXR1cm4gb3AxLT5zaG91bGRTcGVjdWxhdGVO
dW1iZXJFeHBlY3RpbmdEZWZpbmVkKCkgJiYgb3AyLT5zaG91bGRTcGVjdWxhdGVOdW1iZXJFeHBl
Y3RpbmdEZWZpbmVkKCk7CiAgICAgfQogICAgIAotICAgIHN0YXRpYyBib29sIHNob3VsZFNwZWN1
bGF0ZUZpbmFsT2JqZWN0KE5vZGUmIG9wMSwgTm9kZSYgb3AyKQorICAgIHN0YXRpYyBib29sIHNo
b3VsZFNwZWN1bGF0ZUZpbmFsT2JqZWN0KE5vZGUqIG9wMSwgTm9kZSogb3AyKQogICAgIHsKLSAg
ICAgICAgcmV0dXJuIG9wMS5zaG91bGRTcGVjdWxhdGVGaW5hbE9iamVjdCgpICYmIG9wMi5zaG91
bGRTcGVjdWxhdGVGaW5hbE9iamVjdCgpOworICAgICAgICByZXR1cm4gb3AxLT5zaG91bGRTcGVj
dWxhdGVGaW5hbE9iamVjdCgpICYmIG9wMi0+c2hvdWxkU3BlY3VsYXRlRmluYWxPYmplY3QoKTsK
ICAgICB9CiAKLSAgICBzdGF0aWMgYm9vbCBzaG91bGRTcGVjdWxhdGVBcnJheShOb2RlJiBvcDEs
IE5vZGUmIG9wMikKKyAgICBzdGF0aWMgYm9vbCBzaG91bGRTcGVjdWxhdGVBcnJheShOb2RlKiBv
cDEsIE5vZGUqIG9wMikKICAgICB7Ci0gICAgICAgIHJldHVybiBvcDEuc2hvdWxkU3BlY3VsYXRl
QXJyYXkoKSAmJiBvcDIuc2hvdWxkU3BlY3VsYXRlQXJyYXkoKTsKKyAgICAgICAgcmV0dXJuIG9w
MS0+c2hvdWxkU3BlY3VsYXRlQXJyYXkoKSAmJiBvcDItPnNob3VsZFNwZWN1bGF0ZUFycmF5KCk7
CiAgICAgfQogICAgIAogICAgIGJvb2wgY2FuU3BlY3VsYXRlSW50ZWdlcigpCkBAIC0xMTg0LDE1
ICsxMTg4LDE3IEBAIHN0cnVjdCBOb2RlIHsKICAgICB7CiAgICAgICAgIGlmICghY2hpbGQxKCkp
CiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIG91dC5wcmludGYoIkAldSIsIGNoaWxkMSgp
LmluZGV4KCkpOworICAgICAgICBvdXQucHJpbnRmKCJAJXUiLCBjaGlsZDEoKS0+aW5kZXgoKSk7
CiAgICAgICAgIGlmICghY2hpbGQyKCkpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIG91
dC5wcmludGYoIiwgQCV1IiwgY2hpbGQyKCkuaW5kZXgoKSk7CisgICAgICAgIG91dC5wcmludGYo
IiwgQCV1IiwgY2hpbGQyKCktPmluZGV4KCkpOwogICAgICAgICBpZiAoIWNoaWxkMygpKQogICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICBvdXQucHJpbnRmKCIsIEAldSIsIGNoaWxkMygpLmlu
ZGV4KCkpOworICAgICAgICBvdXQucHJpbnRmKCIsIEAldSIsIGNoaWxkMygpLT5pbmRleCgpKTsK
ICAgICB9CiAgICAgCisgICAgLy8gTkIuIFRoaXMgY2xhc3MgbXVzdCBoYXZlIGEgdHJpdmlhbCBk
ZXN0cnVjdG9yLgorICAgIAogICAgIC8vIFVzZWQgdG8gbG9vayB1cCBleGNlcHRpb24gaGFuZGxp
bmcgaW5mb3JtYXRpb24gKGN1cnJlbnRseSBpbXBsZW1lbnRlZCBhcyBhIGJ5dGVjb2RlIGluZGV4
KS4KICAgICBDb2RlT3JpZ2luIGNvZGVPcmlnaW47CiAgICAgLy8gUmVmZXJlbmNlcyB0byB1cCB0
byAzIGNoaWxkcmVuLCBvciBsaW5rcyB0byBhIHZhcmlhYmxlIGxlbmd0aCBzZXQgb2YgY2hpbGRy
ZW4uCkBAIC0xMjE1LDEwICsxMjIxLDE2IEBAIHByaXZhdGU6CiBwdWJsaWM6CiAgICAgLy8gRmll
bGRzIHVzZWQgYnkgdmFyaW91cyBhbmFseXNlcy4KICAgICBBYnN0cmFjdFZhbHVlIHZhbHVlOwot
ICAgIE5vZGVJbmRleCByZXBsYWNlbWVudDsKKyAgICBOb2RlKiByZXBsYWNlbWVudDsKIH07CiAK
IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKIAorbmFtZXNwYWNlIFdURiB7CisKK3ZvaWQgcHJp
bnRJbnRlcm5hbChQcmludFN0cmVhbSYsIEpTQzo6REZHOjpOb2RlKik7CisKK30gLy8gbmFtZXNw
YWNlIFdURgorCiAjZW5kaWYKICNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdOb2RlQWxsb2NhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdOb2RlQWxsb2NhdG9yLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR05vZGVBbGxvY2F0b3IuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1MSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVm
IERGR05vZGVBbGxvY2F0b3JfaAorI2RlZmluZSBERkdOb2RlQWxsb2NhdG9yX2gKKworI2luY2x1
ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJE
RkdBbGxvY2F0b3IuaCIKKyNpbmNsdWRlICJERkdOb2RlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgREZHIHsKKwordHlwZWRlZiBBbGxvY2F0b3I8Tm9kZT4gTm9kZUFsbG9jYXRvcjsK
KworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCitpbmxpbmUgdm9pZCogb3BlcmF0b3IgbmV3
IChzaXplX3Qgc2l6ZSwgSlNDOjpERkc6Ok5vZGVBbGxvY2F0b3ImIGFsbG9jYXRvcikKK3sKKyAg
ICBBU1NFUlQoc2l6ZSA9PSBzaXplb2YoSlNDOjpERkc6Ok5vZGUpKTsKKyAgICByZXR1cm4gYWxs
b2NhdG9yLmFsbG9jYXRlKCk7Cit9CisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2Vu
ZGlmIC8vIERGR05vZGVBbGxvY2F0b3JfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR09TUkV4aXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHT1NSRXhpdC5jcHAJKHJldmlzaW9uIDE0MDkwNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHT1NSRXhpdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4LDcgKzM4LDYgQEAg
T1NSRXhpdDo6T1NSRXhpdChFeGl0S2luZCBraW5kLCBKU1ZhbHVlUwogICAgIDogbV9qc1ZhbHVl
U291cmNlKGpzVmFsdWVTb3VyY2UpCiAgICAgLCBtX3ZhbHVlUHJvZmlsZSh2YWx1ZVByb2ZpbGUp
CiAgICAgLCBtX3BhdGNoYWJsZUNvZGVPZmZzZXQoMCkKLSAgICAsIG1fbm9kZUluZGV4KGppdC0+
bV9jb21waWxlSW5kZXgpCiAgICAgLCBtX2NvZGVPcmlnaW4oaml0LT5tX2NvZGVPcmlnaW5Gb3JP
U1IpCiAgICAgLCBtX2NvZGVPcmlnaW5Gb3JFeGl0UHJvZmlsZShtX2NvZGVPcmlnaW4pCiAgICAg
LCBtX3JlY292ZXJ5SW5kZXgocmVjb3ZlcnlJbmRleCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHT1NSRXhpdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHT1NSRXhpdC5oCShyZXZpc2lvbiAxNDA5MDQpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR09TUkV4aXQuaAkod29ya2luZyBjb3B5KQpAQCAtOTEsNyArOTEsNiBAQCBz
dHJ1Y3QgT1NSRXhpdCB7CiAgICAgTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZSBtX3ZhbHVl
UHJvZmlsZTsKIAogICAgIHVuc2lnbmVkIG1fcGF0Y2hhYmxlQ29kZU9mZnNldDsKLSAgICBOb2Rl
SW5kZXggbV9ub2RlSW5kZXg7CiAgICAgQ29kZU9yaWdpbiBtX2NvZGVPcmlnaW47CiAgICAgQ29k
ZU9yaWdpbiBtX2NvZGVPcmlnaW5Gb3JFeGl0UHJvZmlsZTsKICAgICAKQEAgLTEyNCw3ICsxMjMs
NiBAQCBwcml2YXRlOgogCiBzdHJ1Y3QgU3BlY3VsYXRpb25GYWlsdXJlRGVidWdJbmZvIHsKICAg
ICBDb2RlQmxvY2sqIGNvZGVCbG9jazsKLSAgICBOb2RlSW5kZXggbm9kZUluZGV4OwogfTsKIAog
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdPU1JFeGl0Q29tcGlsZXI2NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXI2NC5jcHAJKHJldmlzaW9uIDE0MDkwNCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyNjQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTMg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC0zOCw3ICszOCw3IEBAIHZvaWQgT1NSRXhpdENvbXBpbGVyOjpjb21waWxlRXhp
dChjb25zdCAKIHsKICAgICAvLyAxKSBQcm8tZm9ybWEgc3R1ZmYuCiAjaWYgREZHX0VOQUJMRShE
RUJVR19WRVJCT1NFKQotICAgIGRhdGFMb2dGKCJPU1IgZXhpdCBmb3IgTm9kZSBAJWQgKCIsIChp
bnQpZXhpdC5tX25vZGVJbmRleCk7CisgICAgZGF0YUxvZ0YoIk9TUiBleGl0IGZvciAoIik7CiAg
ICAgZm9yIChDb2RlT3JpZ2luIGNvZGVPcmlnaW4gPSBleGl0Lm1fY29kZU9yaWdpbjsgOyBjb2Rl
T3JpZ2luID0gY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUtPmNhbGxlcikgewogICAgICAgICBk
YXRhTG9nRigiYmMjJXUiLCBjb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgpOwogICAgICAgICBpZiAo
IWNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKQpAQCAtNTIsNyArNTIsNiBAQCB2b2lkIE9TUkV4
aXRDb21waWxlcjo6Y29tcGlsZUV4aXQoY29uc3QgCiAgICAgaWYgKE9wdGlvbnM6OnByaW50RWFj
aE9TUkV4aXQoKSkgewogICAgICAgICBTcGVjdWxhdGlvbkZhaWx1cmVEZWJ1Z0luZm8qIGRlYnVn
SW5mbyA9IG5ldyBTcGVjdWxhdGlvbkZhaWx1cmVEZWJ1Z0luZm87CiAgICAgICAgIGRlYnVnSW5m
by0+Y29kZUJsb2NrID0gbV9qaXQuY29kZUJsb2NrKCk7Ci0gICAgICAgIGRlYnVnSW5mby0+bm9k
ZUluZGV4ID0gZXhpdC5tX25vZGVJbmRleDsKICAgICAgICAgCiAgICAgICAgIG1faml0LmRlYnVn
Q2FsbChkZWJ1Z09wZXJhdGlvblByaW50U3BlY3VsYXRpb25GYWlsdXJlLCBkZWJ1Z0luZm8pOwog
ICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRD
b21waWxlci5jcHAJKHJldmlzaW9uIDE0MDkwNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHT1NSRXhpdENvbXBpbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODUsNyArODUsNyBA
QCB2b2lkIGNvbXBpbGVPU1JFeGl0KEV4ZWNTdGF0ZSogZXhlYykKICNpZiBERkdfRU5BQkxFKERF
QlVHX1ZFUkJPU0UpCiAgICAgZGF0YUxvZygKICAgICAgICAgIkdlbmVyYXRpbmcgT1NSIGV4aXQg
IyIsIGV4aXRJbmRleCwgIiAoc2VxIyIsIGV4aXQubV9zdHJlYW1JbmRleCwKLSAgICAgICAgIiwg
YmMjIiwgZXhpdC5tX2NvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCwgIiwgQCIsIGV4aXQubV9ub2Rl
SW5kZXgsICIsICIsCisgICAgICAgICIsIGJjIyIsIGV4aXQubV9jb2RlT3JpZ2luLmJ5dGVjb2Rl
SW5kZXgsICIsICIsCiAgICAgICAgIGV4aXQubV9raW5kLCAiKSBmb3IgIiwgKmNvZGVCbG9jaywg
Ii5cbiIpOwogI2VuZGlmCiAKQEAgLTExMiw4ICsxMTIsOCBAQCB2b2lkIGNvbXBpbGVPU1JFeGl0
KEV4ZWNTdGF0ZSogZXhlYykKICAgICAgICAgZXhpdC5tX2NvZGUgPSBGSU5BTElaRV9DT0RFX0lG
KAogICAgICAgICAgICAgc2hvdWxkU2hvd0Rpc2Fzc2VtYmx5KCksCiAgICAgICAgICAgICBwYXRj
aEJ1ZmZlciwKLSAgICAgICAgICAgICgiREZHIE9TUiBleGl0ICMldSAoYmMjJXUsIEAldSwgJXMp
IGZyb20gJXMiLAotICAgICAgICAgICAgICAgIGV4aXRJbmRleCwgZXhpdC5tX2NvZGVPcmlnaW4u
Ynl0ZWNvZGVJbmRleCwgZXhpdC5tX25vZGVJbmRleCwKKyAgICAgICAgICAgICgiREZHIE9TUiBl
eGl0ICMldSAoYmMjJXUsICVzKSBmcm9tICVzIiwKKyAgICAgICAgICAgICAgICBleGl0SW5kZXgs
IGV4aXQubV9jb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgsCiAgICAgICAgICAgICAgICAgZXhpdEtp
bmRUb1N0cmluZyhleGl0Lm1fa2luZCksIHRvQ1N0cmluZygqY29kZUJsb2NrKS5kYXRhKCkpKTsK
ICAgICB9CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlv
bnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0
aW9ucy5jcHAJKHJldmlzaW9uIDE0MDkwNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2MTYsOCArMTYxNiw3IEBAIHZv
aWQgREZHX09QRVJBVElPTiBkZWJ1Z09wZXJhdGlvblByaW50U3AKICAgICBDb2RlQmxvY2sqIGNv
ZGVCbG9jayA9IGRlYnVnSW5mby0+Y29kZUJsb2NrOwogICAgIENvZGVCbG9jayogYWx0ZXJuYXRp
dmUgPSBjb2RlQmxvY2stPmFsdGVybmF0aXZlKCk7CiAgICAgZGF0YUxvZygKLSAgICAgICAgIlNw
ZWN1bGF0aW9uIGZhaWx1cmUgaW4gIiwgKmNvZGVCbG9jaywgIiBhdCBAIiwgZGVidWdJbmZvLT5u
b2RlSW5kZXgsCi0gICAgICAgICIgd2l0aCAiKTsKKyAgICAgICAgIlNwZWN1bGF0aW9uIGZhaWx1
cmUgaW4gIiwgKmNvZGVCbG9jaywgIiB3aXRoICIpOwogICAgIGlmIChhbHRlcm5hdGl2ZSkgewog
ICAgICAgICBkYXRhTG9nKAogICAgICAgICAgICAgImV4ZWN1dGVDb3VudGVyID0gIiwgYWx0ZXJu
YXRpdmUtPmppdEV4ZWN1dGVDb3VudGVyKCksCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAko
cmV2aXNpb24gMTQwOTA0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0
aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMiwgMjAxMyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTg1LDc1
ICs4NSw3MyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIGJvb2wgc2V0UHJlZGljdGlvbihTcGVj
dWxhdGVkVHlwZSBwcmVkaWN0aW9uKQogICAgIHsKLSAgICAgICAgQVNTRVJUKG1fZ3JhcGhbbV9j
b21waWxlSW5kZXhdLmhhc1Jlc3VsdCgpKTsKKyAgICAgICAgQVNTRVJUKG1fY3VycmVudE5vZGUt
Pmhhc1Jlc3VsdCgpKTsKICAgICAgICAgCiAgICAgICAgIC8vIHNldFByZWRpY3Rpb24oKSBpcyB1
c2VkIHdoZW4gd2Uga25vdyB0aGF0IHRoZXJlIGlzIG5vIHdheSB0aGF0IHdlIGNhbiBjaGFuZ2UK
ICAgICAgICAgLy8gb3VyIG1pbmRzIGFib3V0IHdoYXQgdGhlIHByZWRpY3Rpb24gaXMgZ29pbmcg
dG8gYmUuIFRoZXJlIGlzIG5vIHNlbWFudGljCiAgICAgICAgIC8vIGRpZmZlcmVuY2UgYmV0d2Vl
biBzZXRQcmVkaWN0aW9uKCkgYW5kIG1lcmdlU3BlY3VsYXRpb24oKSBvdGhlciB0aGFuIHRoZQog
ICAgICAgICAvLyBpbmNyZWFzZWQgY2hlY2tpbmcgdG8gdmFsaWRhdGUgdGhpcyBwcm9wZXJ0eS4K
LSAgICAgICAgQVNTRVJUKG1fZ3JhcGhbbV9jb21waWxlSW5kZXhdLnByZWRpY3Rpb24oKSA9PSBT
cGVjTm9uZSB8fCBtX2dyYXBoW21fY29tcGlsZUluZGV4XS5wcmVkaWN0aW9uKCkgPT0gcHJlZGlj
dGlvbik7CisgICAgICAgIEFTU0VSVChtX2N1cnJlbnROb2RlLT5wcmVkaWN0aW9uKCkgPT0gU3Bl
Y05vbmUgfHwgbV9jdXJyZW50Tm9kZS0+cHJlZGljdGlvbigpID09IHByZWRpY3Rpb24pOwogICAg
ICAgICAKLSAgICAgICAgcmV0dXJuIG1fZ3JhcGhbbV9jb21waWxlSW5kZXhdLnByZWRpY3QocHJl
ZGljdGlvbik7CisgICAgICAgIHJldHVybiBtX2N1cnJlbnROb2RlLT5wcmVkaWN0KHByZWRpY3Rp
b24pOwogICAgIH0KICAgICAKICAgICBib29sIG1lcmdlUHJlZGljdGlvbihTcGVjdWxhdGVkVHlw
ZSBwcmVkaWN0aW9uKQogICAgIHsKLSAgICAgICAgQVNTRVJUKG1fZ3JhcGhbbV9jb21waWxlSW5k
ZXhdLmhhc1Jlc3VsdCgpKTsKKyAgICAgICAgQVNTRVJUKG1fY3VycmVudE5vZGUtPmhhc1Jlc3Vs
dCgpKTsKICAgICAgICAgCi0gICAgICAgIHJldHVybiBtX2dyYXBoW21fY29tcGlsZUluZGV4XS5w
cmVkaWN0KHByZWRpY3Rpb24pOworICAgICAgICByZXR1cm4gbV9jdXJyZW50Tm9kZS0+cHJlZGlj
dChwcmVkaWN0aW9uKTsKICAgICB9CiAgICAgCi0gICAgYm9vbCBpc05vdE5lZ1plcm8oTm9kZUlu
ZGV4IG5vZGVJbmRleCkKKyAgICBib29sIGlzTm90TmVnWmVybyhOb2RlKiBub2RlKQogICAgIHsK
LSAgICAgICAgaWYgKCFtX2dyYXBoLmlzTnVtYmVyQ29uc3RhbnQobm9kZUluZGV4KSkKKyAgICAg
ICAgaWYgKCFtX2dyYXBoLmlzTnVtYmVyQ29uc3RhbnQobm9kZSkpCiAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgICAgIGRvdWJsZSB2YWx1ZSA9IG1fZ3JhcGgudmFsdWVPZk51bWJlckNv
bnN0YW50KG5vZGVJbmRleCk7CisgICAgICAgIGRvdWJsZSB2YWx1ZSA9IG1fZ3JhcGgudmFsdWVP
Zk51bWJlckNvbnN0YW50KG5vZGUpOwogICAgICAgICByZXR1cm4gIXZhbHVlICYmIDEuMCAvIHZh
bHVlIDwgMC4wOwogICAgIH0KICAgICAKLSAgICBib29sIGlzTm90WmVybyhOb2RlSW5kZXggbm9k
ZUluZGV4KQorICAgIGJvb2wgaXNOb3RaZXJvKE5vZGUqIG5vZGUpCiAgICAgewotICAgICAgICBp
ZiAoIW1fZ3JhcGguaXNOdW1iZXJDb25zdGFudChub2RlSW5kZXgpKQorICAgICAgICBpZiAoIW1f
Z3JhcGguaXNOdW1iZXJDb25zdGFudChub2RlKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgICAgcmV0dXJuICEhbV9ncmFwaC52YWx1ZU9mTnVtYmVyQ29uc3RhbnQobm9kZUluZGV4
KTsKKyAgICAgICAgcmV0dXJuICEhbV9ncmFwaC52YWx1ZU9mTnVtYmVyQ29uc3RhbnQobm9kZSk7
CiAgICAgfQogICAgIAotICAgIGJvb2wgaXNXaXRoaW5Qb3dlck9mVHdvRm9yQ29uc3RhbnQoTm9k
ZSYgbm9kZSwgaW50IHBvd2VyKQorICAgIGJvb2wgaXNXaXRoaW5Qb3dlck9mVHdvRm9yQ29uc3Rh
bnQoTm9kZSogbm9kZSwgaW50IHBvd2VyKQogICAgIHsKLSAgICAgICAgSlNWYWx1ZSBpbW1lZGlh
dGVWYWx1ZSA9IG5vZGUudmFsdWVPZkpTQ29uc3RhbnQoY29kZUJsb2NrKCkpOworICAgICAgICBK
U1ZhbHVlIGltbWVkaWF0ZVZhbHVlID0gbm9kZS0+dmFsdWVPZkpTQ29uc3RhbnQoY29kZUJsb2Nr
KCkpOwogICAgICAgICBpZiAoIWltbWVkaWF0ZVZhbHVlLmlzSW50MzIoKSkKICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICAgICAgaW50MzJfdCBpbnRJbW1lZGlhdGUgPSBpbW1lZGlhdGVW
YWx1ZS5hc0ludDMyKCk7CiAgICAgICAgIHJldHVybiBpbnRJbW1lZGlhdGUgPiAtKDEgPDwgcG93
ZXIpICYmIGludEltbWVkaWF0ZSA8ICgxIDw8IHBvd2VyKTsKICAgICB9CiAgICAgCi0gICAgYm9v
bCBpc1dpdGhpblBvd2VyT2ZUd29Ob25SZWN1cnNpdmUoTm9kZUluZGV4IG5vZGVJbmRleCwgaW50
IHBvd2VyKQorICAgIGJvb2wgaXNXaXRoaW5Qb3dlck9mVHdvTm9uUmVjdXJzaXZlKE5vZGUqIG5v
ZGUsIGludCBwb3dlcikKICAgICB7Ci0gICAgICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW25vZGVJ
bmRleF07Ci0gICAgICAgIGlmIChub2RlLm9wKCkgIT0gSlNDb25zdGFudCkKKyAgICAgICAgaWYg
KG5vZGUtPm9wKCkgIT0gSlNDb25zdGFudCkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICAgICAgcmV0dXJuIGlzV2l0aGluUG93ZXJPZlR3b0ZvckNvbnN0YW50KG5vZGUsIHBvd2VyKTsK
ICAgICB9CiAgICAgCi0gICAgYm9vbCBpc1dpdGhpblBvd2VyT2ZUd28oTm9kZUluZGV4IG5vZGVJ
bmRleCwgaW50IHBvd2VyKQorICAgIGJvb2wgaXNXaXRoaW5Qb3dlck9mVHdvKE5vZGUqIG5vZGUs
IGludCBwb3dlcikKICAgICB7Ci0gICAgICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW25vZGVJbmRl
eF07Ci0gICAgICAgIHN3aXRjaCAobm9kZS5vcCgpKSB7CisgICAgICAgIHN3aXRjaCAobm9kZS0+
b3AoKSkgewogICAgICAgICBjYXNlIEpTQ29uc3RhbnQ6IHsKICAgICAgICAgICAgIHJldHVybiBp
c1dpdGhpblBvd2VyT2ZUd29Gb3JDb25zdGFudChub2RlLCBwb3dlcik7CiAgICAgICAgIH0KICAg
ICAgICAgICAgIAogICAgICAgICBjYXNlIEJpdEFuZDogewotICAgICAgICAgICAgcmV0dXJuIGlz
V2l0aGluUG93ZXJPZlR3b05vblJlY3Vyc2l2ZShub2RlLmNoaWxkMSgpLmluZGV4KCksIHBvd2Vy
KQotICAgICAgICAgICAgICAgIHx8IGlzV2l0aGluUG93ZXJPZlR3b05vblJlY3Vyc2l2ZShub2Rl
LmNoaWxkMigpLmluZGV4KCksIHBvd2VyKTsKKyAgICAgICAgICAgIHJldHVybiBpc1dpdGhpblBv
d2VyT2ZUd29Ob25SZWN1cnNpdmUobm9kZS0+Y2hpbGQxKCkubm9kZSgpLCBwb3dlcikKKyAgICAg
ICAgICAgICAgICB8fCBpc1dpdGhpblBvd2VyT2ZUd29Ob25SZWN1cnNpdmUobm9kZS0+Y2hpbGQy
KCkubm9kZSgpLCBwb3dlcik7CiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBjYXNl
IEJpdFJTaGlmdDoKICAgICAgICAgY2FzZSBCaXRVUlNoaWZ0OiB7Ci0gICAgICAgICAgICBOb2Rl
JiBzaGlmdEFtb3VudCA9IG1fZ3JhcGhbbm9kZS5jaGlsZDIoKV07Ci0gICAgICAgICAgICBpZiAo
c2hpZnRBbW91bnQub3AoKSAhPSBKU0NvbnN0YW50KQorICAgICAgICAgICAgTm9kZSogc2hpZnRB
bW91bnQgPSBub2RlLT5jaGlsZDIoKS5ub2RlKCk7CisgICAgICAgICAgICBpZiAoc2hpZnRBbW91
bnQtPm9wKCkgIT0gSlNDb25zdGFudCkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgICAgICAgICBKU1ZhbHVlIGltbWVkaWF0ZVZhbHVlID0gc2hpZnRBbW91bnQudmFsdWVPZkpT
Q29uc3RhbnQoY29kZUJsb2NrKCkpOworICAgICAgICAgICAgSlNWYWx1ZSBpbW1lZGlhdGVWYWx1
ZSA9IHNoaWZ0QW1vdW50LT52YWx1ZU9mSlNDb25zdGFudChjb2RlQmxvY2soKSk7CiAgICAgICAg
ICAgICBpZiAoIWltbWVkaWF0ZVZhbHVlLmlzSW50MzIoKSkKICAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgICAgICAgICByZXR1cm4gaW1tZWRpYXRlVmFsdWUgPiAzMiAtIHBvd2Vy
OwpAQCAtMTc4LDE2ICsxNzYsMTYgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIHNwZWN1bGF0
ZWREb3VibGVUeXBlRm9yUHJlZGljdGlvbihtZXJnZVNwZWN1bGF0aW9ucyhsZWZ0LCByaWdodCkp
OwogICAgIH0KIAotICAgIHZvaWQgcHJvcGFnYXRlKE5vZGUmIG5vZGUpCisgICAgdm9pZCBwcm9w
YWdhdGUoTm9kZSogbm9kZSkKICAgICB7Ci0gICAgICAgIGlmICghbm9kZS5zaG91bGRHZW5lcmF0
ZSgpKQorICAgICAgICBpZiAoIW5vZGUtPnNob3VsZEdlbmVyYXRlKCkpCiAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgIAotICAgICAgICBOb2RlVHlwZSBvcCA9IG5vZGUub3AoKTsKLSAgICAg
ICAgTm9kZUZsYWdzIGZsYWdzID0gbm9kZS5mbGFncygpICYgTm9kZUJhY2tQcm9wTWFzazsKKyAg
ICAgICAgTm9kZVR5cGUgb3AgPSBub2RlLT5vcCgpOworICAgICAgICBOb2RlRmxhZ3MgZmxhZ3Mg
PSBub2RlLT5mbGFncygpICYgTm9kZUJhY2tQcm9wTWFzazsKIAogI2lmIERGR19FTkFCTEUoREVC
VUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKLSAgICAgICAgZGF0YUxvZ0YoIiAgICVzIEAldTogJXMg
IiwgR3JhcGg6Om9wTmFtZShvcCksIG1fY29tcGlsZUluZGV4LCBub2RlRmxhZ3NBc1N0cmluZyhm
bGFncykpOworICAgICAgICBkYXRhTG9nKCIgICAiLCBHcmFwaDo6b3BOYW1lKG9wKSwgIiAiLCBt
X2N1cnJlbnROb2RlLCAiOiAiLCBub2RlRmxhZ3NBc1N0cmluZyhmbGFncyksICIgIik7CiAjZW5k
aWYKICAgICAgICAgCiAgICAgICAgIGJvb2wgY2hhbmdlZCA9IGZhbHNlOwpAQCAtMTk1LDEyICsx
OTMsMTIgQEAgcHJpdmF0ZToKICAgICAgICAgc3dpdGNoIChvcCkgewogICAgICAgICBjYXNlIEpT
Q29uc3RhbnQ6CiAgICAgICAgIGNhc2UgV2Vha0pTQ29uc3RhbnQ6IHsKLSAgICAgICAgICAgIGNo
YW5nZWQgfD0gc2V0UHJlZGljdGlvbihzcGVjdWxhdGlvbkZyb21WYWx1ZShtX2dyYXBoLnZhbHVl
T2ZKU0NvbnN0YW50KG1fY29tcGlsZUluZGV4KSkpOworICAgICAgICAgICAgY2hhbmdlZCB8PSBz
ZXRQcmVkaWN0aW9uKHNwZWN1bGF0aW9uRnJvbVZhbHVlKG1fZ3JhcGgudmFsdWVPZkpTQ29uc3Rh
bnQobm9kZSkpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAK
ICAgICAgICAgY2FzZSBHZXRMb2NhbDogewotICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRh
KiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBub2RlLnZhcmlhYmxlQWNjZXNzRGF0YSgpOworICAgICAg
ICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBub2RlLT52YXJp
YWJsZUFjY2Vzc0RhdGEoKTsKICAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24g
PSB2YXJpYWJsZUFjY2Vzc0RhdGEtPnByZWRpY3Rpb24oKTsKICAgICAgICAgICAgIGlmIChwcmVk
aWN0aW9uKQogICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKHByZWRp
Y3Rpb24pOwpAQCAtMjEwLDIxICsyMDgsMjEgQEAgcHJpdmF0ZToKICAgICAgICAgfQogICAgICAg
ICAgICAgCiAgICAgICAgIGNhc2UgU2V0TG9jYWw6IHsKLSAgICAgICAgICAgIFZhcmlhYmxlQWNj
ZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhID0gbm9kZS52YXJpYWJsZUFjY2Vzc0RhdGEoKTsK
LSAgICAgICAgICAgIGNoYW5nZWQgfD0gdmFyaWFibGVBY2Nlc3NEYXRhLT5wcmVkaWN0KG1fZ3Jh
cGhbbm9kZS5jaGlsZDEoKV0ucHJlZGljdGlvbigpKTsKKyAgICAgICAgICAgIFZhcmlhYmxlQWNj
ZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7
CisgICAgICAgICAgICBjaGFuZ2VkIHw9IHZhcmlhYmxlQWNjZXNzRGF0YS0+cHJlZGljdChub2Rl
LT5jaGlsZDEoKS0+cHJlZGljdGlvbigpKTsKIAogICAgICAgICAgICAgLy8gQXNzdW1lIGNvbnNl
cnZhdGl2ZWx5IHRoYXQgYSBTZXRMb2NhbCBpbXBsaWVzIHRoYXQgdGhlIHZhbHVlIG1heSBmbG93
IHRocm91Z2ggYSBsb29wLAogICAgICAgICAgICAgLy8gYW5kIHNvIHdlIHdvdWxkIGhhdmUgb3Zl
cmZsb3cgbGVhZGluZyB0byB0aGUgcHJvZ3JhbSAib2JzZXJ2aW5nIiBudW1iZXJzIGV2ZW4gaWYg
YWxsCiAgICAgICAgICAgICAvLyB1c2VycyBvZiB0aGUgdmFsdWUgYXJlIGRvaW5nIHRvSW50MzIu
IEl0IG1pZ2h0IGJlIHdvcnRod2hpbGUgdG8gcmV2aXNpdCB0aGlzIGF0IHNvbWUKICAgICAgICAg
ICAgIC8vIHBvaW50IGFuZCBhY3R1YWxseSBjaGVjayBpZiB0aGUgZGF0YSBmbG93IGludm9sdmVz
IGxvb3BzLCBidXQgcmlnaHQgbm93IEkgZG9uJ3QgdGhpbmsKICAgICAgICAgICAgIC8vIHdlIGhh
dmUgZXZpZGVuY2UgdGhhdCB0aGlzIHdvdWxkIGJlIGJlbmVmaWNpYWwgZm9yIGJlbmNobWFya3Mu
Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ubWVyZ2VGbGFn
cyh2YXJpYWJsZUFjY2Vzc0RhdGEtPmZsYWdzKCkgfCBOb2RlVXNlZEFzTnVtYmVyKTsKKyAgICAg
ICAgICAgIGNoYW5nZWQgfD0gbm9kZS0+Y2hpbGQxKCktPm1lcmdlRmxhZ3ModmFyaWFibGVBY2Nl
c3NEYXRhLT5mbGFncygpIHwgTm9kZVVzZWRBc051bWJlcik7CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgRmx1c2g6IHsKICAgICAgICAg
ICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHRoZSBhbmFseXNpcyBrbm93cyB0aGF0IGZsdXNoZWQgbG9j
YWxzIGVzY2FwZS4KLSAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nl
c3NEYXRhID0gbm9kZS52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKKyAgICAgICAgICAgIFZhcmlhYmxl
QWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRh
KCk7CiAgICAgICAgICAgICBjaGFuZ2VkIHw9IHZhcmlhYmxlQWNjZXNzRGF0YS0+bWVyZ2VGbGFn
cyhOb2RlVXNlZEFzVmFsdWUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTIz
OCw4ICsyMzYsOCBAQCBwcml2YXRlOgogICAgICAgICAgICAgY2hhbmdlZCB8PSBzZXRQcmVkaWN0
aW9uKFNwZWNJbnQzMik7CiAgICAgICAgICAgICBmbGFncyB8PSBOb2RlVXNlZEFzSW50IHwgTm9k
ZVVzZWRBc0ludExvY2FsbHk7CiAgICAgICAgICAgICBmbGFncyAmPSB+KE5vZGVVc2VkQXNOdW1i
ZXIgfCBOb2RlTmVlZHNOZWdaZXJvIHwgTm9kZVVzZWRBc090aGVyKTsKLSAgICAgICAgICAgIGNo
YW5nZWQgfD0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5tZXJnZUZsYWdzKGZsYWdzKTsKLSAgICAg
ICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaFtub2RlLmNoaWxkMigpXS5tZXJnZUZsYWdzKGZsYWdz
KTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbm9kZS0+Y2hpbGQxKCktPm1lcmdlRmxhZ3MoZmxh
Z3MpOworICAgICAgICAgICAgY2hhbmdlZCB8PSBub2RlLT5jaGlsZDIoKS0+bWVyZ2VGbGFncyhm
bGFncyk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCkBAIC0y
NDcsNTAgKzI0NSw1MCBAQCBwcml2YXRlOgogICAgICAgICAgICAgY2hhbmdlZCB8PSBzZXRQcmVk
aWN0aW9uKFNwZWNJbnQzMik7CiAgICAgICAgICAgICBmbGFncyB8PSBOb2RlVXNlZEFzSW50IHwg
Tm9kZVVzZWRBc0ludExvY2FsbHk7CiAgICAgICAgICAgICBmbGFncyAmPSB+KE5vZGVVc2VkQXNO
dW1iZXIgfCBOb2RlTmVlZHNOZWdaZXJvIHwgTm9kZVVzZWRBc090aGVyKTsKLSAgICAgICAgICAg
IGNoYW5nZWQgfD0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5tZXJnZUZsYWdzKGZsYWdzKTsKKyAg
ICAgICAgICAgIGNoYW5nZWQgfD0gbm9kZS0+Y2hpbGQxKCktPm1lcmdlRmxhZ3MoZmxhZ3MpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBjYXNl
IEFycmF5UG9wOiB7Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbihub2Rl
LmdldEhlYXBQcmVkaWN0aW9uKCkpOworICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVByZWRp
Y3Rpb24obm9kZS0+Z2V0SGVhcFByZWRpY3Rpb24oKSk7CiAgICAgICAgICAgICBjaGFuZ2VkIHw9
IG1lcmdlRGVmYXVsdEZsYWdzKG5vZGUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0K
IAogICAgICAgICBjYXNlIEFycmF5UHVzaDogewotICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJn
ZVByZWRpY3Rpb24obm9kZS5nZXRIZWFwUHJlZGljdGlvbigpKTsKLSAgICAgICAgICAgIGNoYW5n
ZWQgfD0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5tZXJnZUZsYWdzKE5vZGVVc2VkQXNWYWx1ZSk7
Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbm9kZS5jaGlsZDIoKV0ubWVyZ2VGbGFn
cyhOb2RlVXNlZEFzVmFsdWUpOworICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVByZWRpY3Rp
b24obm9kZS0+Z2V0SGVhcFByZWRpY3Rpb24oKSk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG5v
ZGUtPmNoaWxkMSgpLT5tZXJnZUZsYWdzKE5vZGVVc2VkQXNWYWx1ZSk7CisgICAgICAgICAgICBj
aGFuZ2VkIHw9IG5vZGUtPmNoaWxkMigpLT5tZXJnZUZsYWdzKE5vZGVVc2VkQXNWYWx1ZSk7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCiAgICAgICAgIGNhc2UgUmVnRXhwRXhlYzoK
ICAgICAgICAgY2FzZSBSZWdFeHBUZXN0OiB7Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdl
UHJlZGljdGlvbihub2RlLmdldEhlYXBQcmVkaWN0aW9uKCkpOworICAgICAgICAgICAgY2hhbmdl
ZCB8PSBtZXJnZVByZWRpY3Rpb24obm9kZS0+Z2V0SGVhcFByZWRpY3Rpb24oKSk7CiAgICAgICAg
ICAgICBjaGFuZ2VkIHw9IG1lcmdlRGVmYXVsdEZsYWdzKG5vZGUpOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIFN0cmluZ0NoYXJDb2RlQXQ6IHsKICAgICAg
ICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKFNwZWNJbnQzMik7Ci0gICAgICAgICAg
ICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ubWVyZ2VGbGFncyhOb2RlVXNlZEFz
VmFsdWUpOwotICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQyKCldLm1l
cmdlRmxhZ3MoTm9kZVVzZWRBc051bWJlciB8IE5vZGVVc2VkQXNPdGhlciB8IE5vZGVVc2VkQXNJ
bnQgfCBOb2RlVXNlZEFzSW50TG9jYWxseSk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG5vZGUt
PmNoaWxkMSgpLT5tZXJnZUZsYWdzKE5vZGVVc2VkQXNWYWx1ZSk7CisgICAgICAgICAgICBjaGFu
Z2VkIHw9IG5vZGUtPmNoaWxkMigpLT5tZXJnZUZsYWdzKE5vZGVVc2VkQXNOdW1iZXIgfCBOb2Rl
VXNlZEFzT3RoZXIgfCBOb2RlVXNlZEFzSW50IHwgTm9kZVVzZWRBc0ludExvY2FsbHkpOwogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIFVJbnQzMlRvTnVtYmVy
OiB7Ci0gICAgICAgICAgICBpZiAobm9kZUNhblNwZWN1bGF0ZUludGVnZXIobm9kZS5hcml0aE5v
ZGVGbGFncygpKSkKKyAgICAgICAgICAgIGlmIChub2RlQ2FuU3BlY3VsYXRlSW50ZWdlcihub2Rl
LT5hcml0aE5vZGVGbGFncygpKSkKICAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJl
ZGljdGlvbihTcGVjSW50MzIpOwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIGNo
YW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKFNwZWNOdW1iZXIpOwogICAgICAgICAgICAgCi0gICAg
ICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ubWVyZ2VGbGFncyhmbGFn
cyk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG5vZGUtPmNoaWxkMSgpLT5tZXJnZUZsYWdzKGZs
YWdzKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBWYWx1
ZUFkZDogewotICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgbGVmdCA9IG1fZ3JhcGhbbm9kZS5j
aGlsZDEoKV0ucHJlZGljdGlvbigpOwotICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgcmlnaHQg
PSBtX2dyYXBoW25vZGUuY2hpbGQyKCldLnByZWRpY3Rpb24oKTsKKyAgICAgICAgICAgIFNwZWN1
bGF0ZWRUeXBlIGxlZnQgPSBub2RlLT5jaGlsZDEoKS0+cHJlZGljdGlvbigpOworICAgICAgICAg
ICAgU3BlY3VsYXRlZFR5cGUgcmlnaHQgPSBub2RlLT5jaGlsZDIoKS0+cHJlZGljdGlvbigpOwog
ICAgICAgICAgICAgCiAgICAgICAgICAgICBBZGRTcGVjdWxhdGlvbk1vZGUgbW9kZSA9IERvbnRT
cGVjdWxhdGVJbnRlZ2VyOwogICAgICAgICAgICAgCkBAIC0zMDcsMjIgKzMwNSwyMiBAQCBwcml2
YXRlOgogICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbihTcGVj
U3RyaW5nIHwgU3BlY0ludDMyIHwgU3BlY0RvdWJsZSk7CiAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAKLSAgICAgICAgICAgIGlmIChpc05vdE5lZ1plcm8obm9kZS5jaGlsZDEoKS5pbmRleCgp
KSB8fCBpc05vdE5lZ1plcm8obm9kZS5jaGlsZDIoKS5pbmRleCgpKSkKKyAgICAgICAgICAgIGlm
IChpc05vdE5lZ1plcm8obm9kZS0+Y2hpbGQxKCkubm9kZSgpKSB8fCBpc05vdE5lZ1plcm8obm9k
ZS0+Y2hpbGQyKCkubm9kZSgpKSkKICAgICAgICAgICAgICAgICBmbGFncyAmPSB+Tm9kZU5lZWRz
TmVnWmVybzsKLSAgICAgICAgICAgIGlmIChtX2dyYXBoW25vZGUuY2hpbGQxKCldLmhhc051bWJl
clJlc3VsdCgpIHx8IG1fZ3JhcGhbbm9kZS5jaGlsZDIoKV0uaGFzTnVtYmVyUmVzdWx0KCkpCisg
ICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPmhhc051bWJlclJlc3VsdCgpIHx8IG5vZGUt
PmNoaWxkMigpLT5oYXNOdW1iZXJSZXN1bHQoKSkKICAgICAgICAgICAgICAgICBmbGFncyAmPSB+
Tm9kZVVzZWRBc090aGVyOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAobW9kZSAhPSBT
cGVjdWxhdGVJbnRlZ2VyKQogICAgICAgICAgICAgICAgIGZsYWdzIHw9IE5vZGVVc2VkQXNOdW1i
ZXI7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaFtub2RlLmNo
aWxkMSgpXS5tZXJnZUZsYWdzKGZsYWdzKTsKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFw
aFtub2RlLmNoaWxkMigpXS5tZXJnZUZsYWdzKGZsYWdzKTsKKyAgICAgICAgICAgIGNoYW5nZWQg
fD0gbm9kZS0+Y2hpbGQxKCktPm1lcmdlRmxhZ3MoZmxhZ3MpOworICAgICAgICAgICAgY2hhbmdl
ZCB8PSBub2RlLT5jaGlsZDIoKS0+bWVyZ2VGbGFncyhmbGFncyk7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgQXJpdGhBZGQ6IHsKLSAg
ICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIGxlZnQgPSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLnBy
ZWRpY3Rpb24oKTsKLSAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHJpZ2h0ID0gbV9ncmFwaFtu
b2RlLmNoaWxkMigpXS5wcmVkaWN0aW9uKCk7CisgICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSBs
ZWZ0ID0gbm9kZS0+Y2hpbGQxKCktPnByZWRpY3Rpb24oKTsKKyAgICAgICAgICAgIFNwZWN1bGF0
ZWRUeXBlIHJpZ2h0ID0gbm9kZS0+Y2hpbGQyKCktPnByZWRpY3Rpb24oKTsKICAgICAgICAgICAg
IAogICAgICAgICAgICAgQWRkU3BlY3VsYXRpb25Nb2RlIG1vZGUgPSBEb250U3BlY3VsYXRlSW50
ZWdlcjsKICAgICAgICAgICAgIApAQCAtMzMzLDIxICszMzEsMjEgQEAgcHJpdmF0ZToKICAgICAg
ICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVByZWRpY3Rpb24oc3BlY3VsYXRlZERvdWJs
ZVR5cGVGb3JQcmVkaWN0aW9ucyhsZWZ0LCByaWdodCkpOwogICAgICAgICAgICAgfQogICAgICAg
ICAgICAgCi0gICAgICAgICAgICBpZiAoaXNOb3ROZWdaZXJvKG5vZGUuY2hpbGQxKCkuaW5kZXgo
KSkgfHwgaXNOb3ROZWdaZXJvKG5vZGUuY2hpbGQyKCkuaW5kZXgoKSkpCisgICAgICAgICAgICBp
ZiAoaXNOb3ROZWdaZXJvKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSkgfHwgaXNOb3ROZWdaZXJvKG5v
ZGUtPmNoaWxkMigpLm5vZGUoKSkpCiAgICAgICAgICAgICAgICAgZmxhZ3MgJj0gfk5vZGVOZWVk
c05lZ1plcm87CiAgICAgICAgICAgICBmbGFncyAmPSB+Tm9kZVVzZWRBc090aGVyOwogICAgICAg
ICAgICAgCiAgICAgICAgICAgICBpZiAobW9kZSAhPSBTcGVjdWxhdGVJbnRlZ2VyKQogICAgICAg
ICAgICAgICAgIGZsYWdzIHw9IE5vZGVVc2VkQXNOdW1iZXI7CiAgICAgICAgICAgICAKLSAgICAg
ICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5tZXJnZUZsYWdzKGZsYWdz
KTsKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaFtub2RlLmNoaWxkMigpXS5tZXJnZUZs
YWdzKGZsYWdzKTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbm9kZS0+Y2hpbGQxKCktPm1lcmdl
RmxhZ3MoZmxhZ3MpOworICAgICAgICAgICAgY2hhbmdlZCB8PSBub2RlLT5jaGlsZDIoKS0+bWVy
Z2VGbGFncyhmbGFncyk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAg
ICAgCiAgICAgICAgIGNhc2UgQXJpdGhTdWI6IHsKLSAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBl
IGxlZnQgPSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLnByZWRpY3Rpb24oKTsKLSAgICAgICAgICAg
IFNwZWN1bGF0ZWRUeXBlIHJpZ2h0ID0gbV9ncmFwaFtub2RlLmNoaWxkMigpXS5wcmVkaWN0aW9u
KCk7CisgICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSBsZWZ0ID0gbm9kZS0+Y2hpbGQxKCktPnBy
ZWRpY3Rpb24oKTsKKyAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHJpZ2h0ID0gbm9kZS0+Y2hp
bGQyKCktPnByZWRpY3Rpb24oKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgQWRkU3BlY3Vs
YXRpb25Nb2RlIG1vZGUgPSBEb250U3BlY3VsYXRlSW50ZWdlcjsKICAgICAgICAgICAgIApAQCAt
MzU4LDM5ICszNTYsMzkgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCB8
PSBtZXJnZVByZWRpY3Rpb24oc3BlY3VsYXRlZERvdWJsZVR5cGVGb3JQcmVkaWN0aW9ucyhsZWZ0
LCByaWdodCkpOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAoaXNOb3RaZXJvKG5v
ZGUuY2hpbGQxKCkuaW5kZXgoKSkgfHwgaXNOb3RaZXJvKG5vZGUuY2hpbGQyKCkuaW5kZXgoKSkp
CisgICAgICAgICAgICBpZiAoaXNOb3RaZXJvKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSkgfHwgaXNO
b3RaZXJvKG5vZGUtPmNoaWxkMigpLm5vZGUoKSkpCiAgICAgICAgICAgICAgICAgZmxhZ3MgJj0g
fk5vZGVOZWVkc05lZ1plcm87CiAgICAgICAgICAgICBmbGFncyAmPSB+Tm9kZVVzZWRBc090aGVy
OwogICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAobW9kZSAhPSBTcGVjdWxhdGVJbnRlZ2Vy
KQogICAgICAgICAgICAgICAgIGZsYWdzIHw9IE5vZGVVc2VkQXNOdW1iZXI7CiAgICAgICAgICAg
ICAKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5tZXJnZUZs
YWdzKGZsYWdzKTsKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaFtub2RlLmNoaWxkMigp
XS5tZXJnZUZsYWdzKGZsYWdzKTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbm9kZS0+Y2hpbGQx
KCktPm1lcmdlRmxhZ3MoZmxhZ3MpOworICAgICAgICAgICAgY2hhbmdlZCB8PSBub2RlLT5jaGls
ZDIoKS0+bWVyZ2VGbGFncyhmbGFncyk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQog
ICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgQXJpdGhOZWdhdGU6Ci0gICAgICAgICAgICBpZiAo
bV9ncmFwaFtub2RlLmNoaWxkMSgpXS5wcmVkaWN0aW9uKCkpIHsKKyAgICAgICAgICAgIGlmIChu
b2RlLT5jaGlsZDEoKS0+cHJlZGljdGlvbigpKSB7CiAgICAgICAgICAgICAgICAgaWYgKG1fZ3Jh
cGgubmVnYXRlU2hvdWxkU3BlY3VsYXRlSW50ZWdlcihub2RlKSkKICAgICAgICAgICAgICAgICAg
ICAgY2hhbmdlZCB8PSBtZXJnZVByZWRpY3Rpb24oU3BlY0ludDMyKTsKICAgICAgICAgICAgICAg
ICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKHNw
ZWN1bGF0ZWREb3VibGVUeXBlRm9yUHJlZGljdGlvbihtX2dyYXBoW25vZGUuY2hpbGQxKCldLnBy
ZWRpY3Rpb24oKSkpOworICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGlj
dGlvbihzcGVjdWxhdGVkRG91YmxlVHlwZUZvclByZWRpY3Rpb24obm9kZS0+Y2hpbGQxKCktPnBy
ZWRpY3Rpb24oKSkpOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBmbGFncyAmPSB+Tm9k
ZVVzZWRBc090aGVyOwogCi0gICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbm9kZS5jaGls
ZDEoKV0ubWVyZ2VGbGFncyhmbGFncyk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG5vZGUtPmNo
aWxkMSgpLT5tZXJnZUZsYWdzKGZsYWdzKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgCiAgICAgICAgIGNhc2UgQXJpdGhNaW46CiAgICAgICAgIGNhc2UgQXJpdGhNYXg6IHsKLSAg
ICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIGxlZnQgPSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLnBy
ZWRpY3Rpb24oKTsKLSAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHJpZ2h0ID0gbV9ncmFwaFtu
b2RlLmNoaWxkMigpXS5wcmVkaWN0aW9uKCk7CisgICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSBs
ZWZ0ID0gbm9kZS0+Y2hpbGQxKCktPnByZWRpY3Rpb24oKTsKKyAgICAgICAgICAgIFNwZWN1bGF0
ZWRUeXBlIHJpZ2h0ID0gbm9kZS0+Y2hpbGQyKCktPnByZWRpY3Rpb24oKTsKICAgICAgICAgICAg
IAogICAgICAgICAgICAgaWYgKGxlZnQgJiYgcmlnaHQpIHsKLSAgICAgICAgICAgICAgICBpZiAo
Tm9kZTo6c2hvdWxkU3BlY3VsYXRlSW50ZWdlckZvckFyaXRobWV0aWMobV9ncmFwaFtub2RlLmNo
aWxkMSgpXSwgbV9ncmFwaFtub2RlLmNoaWxkMigpXSkKLSAgICAgICAgICAgICAgICAgICAgJiYg
bm9kZUNhblNwZWN1bGF0ZUludGVnZXIobm9kZS5hcml0aE5vZGVGbGFncygpKSkKKyAgICAgICAg
ICAgICAgICBpZiAoTm9kZTo6c2hvdWxkU3BlY3VsYXRlSW50ZWdlckZvckFyaXRobWV0aWMobm9k
ZS0+Y2hpbGQxKCkubm9kZSgpLCBub2RlLT5jaGlsZDIoKS5ub2RlKCkpCisgICAgICAgICAgICAg
ICAgICAgICYmIG5vZGVDYW5TcGVjdWxhdGVJbnRlZ2VyKG5vZGUtPmFyaXRoTm9kZUZsYWdzKCkp
KQogICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbihTcGVjSW50
MzIpOwogICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCB8
PSBtZXJnZVByZWRpY3Rpb24oc3BlY3VsYXRlZERvdWJsZVR5cGVGb3JQcmVkaWN0aW9ucyhsZWZ0
LCByaWdodCkpOwpAQCAtMzk5LDE0ICszOTcsMTQgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGZs
YWdzIHw9IE5vZGVVc2VkQXNOdW1iZXI7CiAgICAgICAgICAgICBmbGFncyAmPSB+Tm9kZVVzZWRB
c090aGVyOwogCi0gICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0u
bWVyZ2VGbGFncyhmbGFncyk7Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbm9kZS5j
aGlsZDIoKV0ubWVyZ2VGbGFncyhmbGFncyk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG5vZGUt
PmNoaWxkMSgpLT5tZXJnZUZsYWdzKGZsYWdzKTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbm9k
ZS0+Y2hpbGQyKCktPm1lcmdlRmxhZ3MoZmxhZ3MpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIH0KIAogICAgICAgICBjYXNlIEFyaXRoTXVsOiB7Ci0gICAgICAgICAgICBTcGVjdWxhdGVk
VHlwZSBsZWZ0ID0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5wcmVkaWN0aW9uKCk7Ci0gICAgICAg
ICAgICBTcGVjdWxhdGVkVHlwZSByaWdodCA9IG1fZ3JhcGhbbm9kZS5jaGlsZDIoKV0ucHJlZGlj
dGlvbigpOworICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgbGVmdCA9IG5vZGUtPmNoaWxkMSgp
LT5wcmVkaWN0aW9uKCk7CisgICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSByaWdodCA9IG5vZGUt
PmNoaWxkMigpLT5wcmVkaWN0aW9uKCk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlmIChs
ZWZ0ICYmIHJpZ2h0KSB7CiAgICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGgubXVsU2hvdWxkU3Bl
Y3VsYXRlSW50ZWdlcihub2RlKSkKQEAgLTQyMiwyNyArNDIwLDI3IEBAIHByaXZhdGU6CiAgICAg
ICAgICAgICAvLyBpdHNlbGYgdW5sZXNzIHdlIGNhbiBwcm92ZSB0aGF0IHRoZXJlIGlzIG5vIHdh
eSBmb3IgdGhlIHZhbHVlcwogICAgICAgICAgICAgLy8gcHJvZHVjZWQgdG8gY2F1c2UgZG91Ymxl
IHJvdW5kaW5nLgogICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoIWlzV2l0aGluUG93ZXJP
ZlR3byhub2RlLmNoaWxkMSgpLmluZGV4KCksIDIyKQotICAgICAgICAgICAgICAgICYmICFpc1dp
dGhpblBvd2VyT2ZUd28obm9kZS5jaGlsZDIoKS5pbmRleCgpLCAyMikpCisgICAgICAgICAgICBp
ZiAoIWlzV2l0aGluUG93ZXJPZlR3byhub2RlLT5jaGlsZDEoKS5ub2RlKCksIDIyKQorICAgICAg
ICAgICAgICAgICYmICFpc1dpdGhpblBvd2VyT2ZUd28obm9kZS0+Y2hpbGQyKCkubm9kZSgpLCAy
MikpCiAgICAgICAgICAgICAgICAgZmxhZ3MgfD0gTm9kZVVzZWRBc051bWJlcjsKICAgICAgICAg
ICAgIAotICAgICAgICAgICAgY2hhbmdlZCB8PSBub2RlLm1lcmdlRmxhZ3MoZmxhZ3MpOworICAg
ICAgICAgICAgY2hhbmdlZCB8PSBub2RlLT5tZXJnZUZsYWdzKGZsYWdzKTsKICAgICAgICAgICAg
IAogICAgICAgICAgICAgZmxhZ3MgfD0gTm9kZVVzZWRBc051bWJlciB8IE5vZGVOZWVkc05lZ1pl
cm87CiAgICAgICAgICAgICBmbGFncyAmPSB+Tm9kZVVzZWRBc090aGVyOwogCi0gICAgICAgICAg
ICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ubWVyZ2VGbGFncyhmbGFncyk7Ci0g
ICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbm9kZS5jaGlsZDIoKV0ubWVyZ2VGbGFncyhm
bGFncyk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG5vZGUtPmNoaWxkMSgpLT5tZXJnZUZsYWdz
KGZsYWdzKTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbm9kZS0+Y2hpbGQyKCktPm1lcmdlRmxh
Z3MoZmxhZ3MpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIAog
ICAgICAgICBjYXNlIEFyaXRoRGl2OiB7Ci0gICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSBsZWZ0
ID0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5wcmVkaWN0aW9uKCk7Ci0gICAgICAgICAgICBTcGVj
dWxhdGVkVHlwZSByaWdodCA9IG1fZ3JhcGhbbm9kZS5jaGlsZDIoKV0ucHJlZGljdGlvbigpOwor
ICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgbGVmdCA9IG5vZGUtPmNoaWxkMSgpLT5wcmVkaWN0
aW9uKCk7CisgICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSByaWdodCA9IG5vZGUtPmNoaWxkMigp
LT5wcmVkaWN0aW9uKCk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlmIChsZWZ0ICYmIHJp
Z2h0KSB7Ci0gICAgICAgICAgICAgICAgaWYgKE5vZGU6OnNob3VsZFNwZWN1bGF0ZUludGVnZXJG
b3JBcml0aG1ldGljKG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0sIG1fZ3JhcGhbbm9kZS5jaGlsZDIo
KV0pCi0gICAgICAgICAgICAgICAgICAgICYmIG5vZGVDYW5TcGVjdWxhdGVJbnRlZ2VyKG5vZGUu
YXJpdGhOb2RlRmxhZ3MoKSkpCisgICAgICAgICAgICAgICAgaWYgKE5vZGU6OnNob3VsZFNwZWN1
bGF0ZUludGVnZXJGb3JBcml0aG1ldGljKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgbm9kZS0+Y2hp
bGQyKCkubm9kZSgpKQorICAgICAgICAgICAgICAgICAgICAmJiBub2RlQ2FuU3BlY3VsYXRlSW50
ZWdlcihub2RlLT5hcml0aE5vZGVGbGFncygpKSkKICAgICAgICAgICAgICAgICAgICAgY2hhbmdl
ZCB8PSBtZXJnZVByZWRpY3Rpb24oU3BlY0ludDMyKTsKICAgICAgICAgICAgICAgICBlbHNlCiAg
ICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKFNwZWNEb3VibGUp
OwpAQCAtNDU2LDE4ICs0NTQsMTggQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGZsYWdzIHw9IE5v
ZGVVc2VkQXNOdW1iZXIgfCBOb2RlTmVlZHNOZWdaZXJvOwogICAgICAgICAgICAgZmxhZ3MgJj0g
fk5vZGVVc2VkQXNPdGhlcjsKIAotICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW25vZGUu
Y2hpbGQxKCldLm1lcmdlRmxhZ3MoZmxhZ3MpOwotICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dy
YXBoW25vZGUuY2hpbGQyKCldLm1lcmdlRmxhZ3MoZmxhZ3MpOworICAgICAgICAgICAgY2hhbmdl
ZCB8PSBub2RlLT5jaGlsZDEoKS0+bWVyZ2VGbGFncyhmbGFncyk7CisgICAgICAgICAgICBjaGFu
Z2VkIHw9IG5vZGUtPmNoaWxkMigpLT5tZXJnZUZsYWdzKGZsYWdzKTsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBBcml0aE1vZDogewot
ICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgbGVmdCA9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0u
cHJlZGljdGlvbigpOwotICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgcmlnaHQgPSBtX2dyYXBo
W25vZGUuY2hpbGQyKCldLnByZWRpY3Rpb24oKTsKKyAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBl
IGxlZnQgPSBub2RlLT5jaGlsZDEoKS0+cHJlZGljdGlvbigpOworICAgICAgICAgICAgU3BlY3Vs
YXRlZFR5cGUgcmlnaHQgPSBub2RlLT5jaGlsZDIoKS0+cHJlZGljdGlvbigpOwogICAgICAgICAg
ICAgCiAgICAgICAgICAgICBpZiAobGVmdCAmJiByaWdodCkgewotICAgICAgICAgICAgICAgIGlm
IChOb2RlOjpzaG91bGRTcGVjdWxhdGVJbnRlZ2VyRm9yQXJpdGhtZXRpYyhtX2dyYXBoW25vZGUu
Y2hpbGQxKCldLCBtX2dyYXBoW25vZGUuY2hpbGQyKCldKQotICAgICAgICAgICAgICAgICAgICAm
JiBub2RlQ2FuU3BlY3VsYXRlSW50ZWdlcihub2RlLmFyaXRoTm9kZUZsYWdzKCkpKQorICAgICAg
ICAgICAgICAgIGlmIChOb2RlOjpzaG91bGRTcGVjdWxhdGVJbnRlZ2VyRm9yQXJpdGhtZXRpYyhu
b2RlLT5jaGlsZDEoKS5ub2RlKCksIG5vZGUtPmNoaWxkMigpLm5vZGUoKSkKKyAgICAgICAgICAg
ICAgICAgICAgJiYgbm9kZUNhblNwZWN1bGF0ZUludGVnZXIobm9kZS0+YXJpdGhOb2RlRmxhZ3Mo
KSkpCiAgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKFNwZWNJ
bnQzMik7CiAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICBjaGFuZ2Vk
IHw9IG1lcmdlUHJlZGljdGlvbihTcGVjRG91YmxlKTsKQEAgLTQ3Niw4ICs0NzQsOCBAQCBwcml2
YXRlOgogICAgICAgICAgICAgZmxhZ3MgfD0gTm9kZVVzZWRBc051bWJlciB8IE5vZGVOZWVkc05l
Z1plcm87CiAgICAgICAgICAgICBmbGFncyAmPSB+Tm9kZVVzZWRBc090aGVyOwogCi0gICAgICAg
ICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ubWVyZ2VGbGFncyhmbGFncyk7
Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbm9kZS5jaGlsZDIoKV0ubWVyZ2VGbGFn
cyhmbGFncyk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG5vZGUtPmNoaWxkMSgpLT5tZXJnZUZs
YWdzKGZsYWdzKTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbm9kZS0+Y2hpbGQyKCktPm1lcmdl
RmxhZ3MoZmxhZ3MpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAg
IApAQCAtNDg1LDE5ICs0ODMsMTkgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGNoYW5nZWQgfD0g
c2V0UHJlZGljdGlvbihTcGVjRG91YmxlKTsKICAgICAgICAgICAgIGZsYWdzIHw9IE5vZGVVc2Vk
QXNOdW1iZXIgfCBOb2RlTmVlZHNOZWdaZXJvOwogICAgICAgICAgICAgZmxhZ3MgJj0gfk5vZGVV
c2VkQXNPdGhlcjsKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaFtub2RlLmNoaWxkMSgp
XS5tZXJnZUZsYWdzKGZsYWdzKTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbm9kZS0+Y2hpbGQx
KCktPm1lcmdlRmxhZ3MoZmxhZ3MpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAg
ICAgICAgICAgIAogICAgICAgICBjYXNlIEFyaXRoQWJzOiB7Ci0gICAgICAgICAgICBTcGVjdWxh
dGVkVHlwZSBjaGlsZCA9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ucHJlZGljdGlvbigpOworICAg
ICAgICAgICAgU3BlY3VsYXRlZFR5cGUgY2hpbGQgPSBub2RlLT5jaGlsZDEoKS0+cHJlZGljdGlv
bigpOwogICAgICAgICAgICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbkZvckFyaXRobWV0aWMoY2hp
bGQpCi0gICAgICAgICAgICAgICAgJiYgbm9kZUNhblNwZWN1bGF0ZUludGVnZXIobm9kZS5hcml0
aE5vZGVGbGFncygpKSkKKyAgICAgICAgICAgICAgICAmJiBub2RlQ2FuU3BlY3VsYXRlSW50ZWdl
cihub2RlLT5hcml0aE5vZGVGbGFncygpKSkKICAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1l
cmdlUHJlZGljdGlvbihTcGVjSW50MzIpOwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAg
ICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKHNwZWN1bGF0ZWREb3VibGVUeXBlRm9yUHJl
ZGljdGlvbihjaGlsZCkpOwogCi0gICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbm9kZS5j
aGlsZDEoKV0ubWVyZ2VGbGFncyhmbGFncyk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG5vZGUt
PmNoaWxkMSgpLT5tZXJnZUZsYWdzKGZsYWdzKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9CiAgICAgICAgICAgICAKQEAgLTUyNywzMSArNTI1LDMxIEBAIHByaXZhdGU6CiAgICAgICAg
IH0KIAogICAgICAgICBjYXNlIEdldEJ5SWQ6IHsKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVy
Z2VQcmVkaWN0aW9uKG5vZGUuZ2V0SGVhcFByZWRpY3Rpb24oKSk7CisgICAgICAgICAgICBjaGFu
Z2VkIHw9IG1lcmdlUHJlZGljdGlvbihub2RlLT5nZXRIZWFwUHJlZGljdGlvbigpKTsKICAgICAg
ICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VEZWZhdWx0RmxhZ3Mobm9kZSk7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgR2V0QnlJZEZsdXNo
OgotICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVByZWRpY3Rpb24obm9kZS5nZXRIZWFwUHJl
ZGljdGlvbigpKTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKG5vZGUt
PmdldEhlYXBQcmVkaWN0aW9uKCkpOwogICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZURlZmF1
bHRGbGFncyhub2RlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAgICAg
IGNhc2UgR2V0QnlWYWw6IHsKLSAgICAgICAgICAgIGlmIChtX2dyYXBoW25vZGUuY2hpbGQxKCld
LnNob3VsZFNwZWN1bGF0ZUZsb2F0MzJBcnJheSgpCi0gICAgICAgICAgICAgICAgfHwgbV9ncmFw
aFtub2RlLmNoaWxkMSgpXS5zaG91bGRTcGVjdWxhdGVGbG9hdDY0QXJyYXkoKSkKKyAgICAgICAg
ICAgIGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlRmxvYXQzMkFycmF5KCkKKyAg
ICAgICAgICAgICAgICB8fCBub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlRmxvYXQ2NEFy
cmF5KCkpCiAgICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVByZWRpY3Rpb24oU3BlY0Rv
dWJsZSk7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJn
ZVByZWRpY3Rpb24obm9kZS5nZXRIZWFwUHJlZGljdGlvbigpKTsKKyAgICAgICAgICAgICAgICBj
aGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbihub2RlLT5nZXRIZWFwUHJlZGljdGlvbigpKTsKIAot
ICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLm1lcmdlRmxhZ3Mo
Tm9kZVVzZWRBc1ZhbHVlKTsKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaFtub2RlLmNo
aWxkMigpXS5tZXJnZUZsYWdzKE5vZGVVc2VkQXNOdW1iZXIgfCBOb2RlVXNlZEFzT3RoZXIgfCBO
b2RlVXNlZEFzSW50IHwgTm9kZVVzZWRBc0ludExvY2FsbHkpOworICAgICAgICAgICAgY2hhbmdl
ZCB8PSBub2RlLT5jaGlsZDEoKS0+bWVyZ2VGbGFncyhOb2RlVXNlZEFzVmFsdWUpOworICAgICAg
ICAgICAgY2hhbmdlZCB8PSBub2RlLT5jaGlsZDIoKS0+bWVyZ2VGbGFncyhOb2RlVXNlZEFzTnVt
YmVyIHwgTm9kZVVzZWRBc090aGVyIHwgTm9kZVVzZWRBc0ludCB8IE5vZGVVc2VkQXNJbnRMb2Nh
bGx5KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAg
ICAgY2FzZSBHZXRNeUFyZ3VtZW50QnlWYWxTYWZlOiB7Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9
IG1lcmdlUHJlZGljdGlvbihub2RlLmdldEhlYXBQcmVkaWN0aW9uKCkpOwotICAgICAgICAgICAg
Y2hhbmdlZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLm1lcmdlRmxhZ3MoTm9kZVVzZWRBc051
bWJlciB8IE5vZGVVc2VkQXNPdGhlciB8IE5vZGVVc2VkQXNJbnQgfCBOb2RlVXNlZEFzSW50TG9j
YWxseSk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbihub2RlLT5nZXRI
ZWFwUHJlZGljdGlvbigpKTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbm9kZS0+Y2hpbGQxKCkt
Pm1lcmdlRmxhZ3MoTm9kZVVzZWRBc051bWJlciB8IE5vZGVVc2VkQXNPdGhlciB8IE5vZGVVc2Vk
QXNJbnQgfCBOb2RlVXNlZEFzSW50TG9jYWxseSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgfQogICAgICAgICAgICAgCkBAIC01NzEsMjUgKzU2OSwyMyBAQCBwcml2YXRlOgogICAgICAg
ICB9CiAKICAgICAgICAgY2FzZSBHZXRCeU9mZnNldDogewotICAgICAgICAgICAgY2hhbmdlZCB8
PSBtZXJnZVByZWRpY3Rpb24obm9kZS5nZXRIZWFwUHJlZGljdGlvbigpKTsKKyAgICAgICAgICAg
IGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKG5vZGUtPmdldEhlYXBQcmVkaWN0aW9uKCkpOwog
ICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZURlZmF1bHRGbGFncyhub2RlKTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBDYWxsOgog
ICAgICAgICBjYXNlIENvbnN0cnVjdDogewotICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVBy
ZWRpY3Rpb24obm9kZS5nZXRIZWFwUHJlZGljdGlvbigpKTsKLSAgICAgICAgICAgIGZvciAodW5z
aWduZWQgY2hpbGRJZHggPSBub2RlLmZpcnN0Q2hpbGQoKTsKLSAgICAgICAgICAgICAgICAgY2hp
bGRJZHggPCBub2RlLmZpcnN0Q2hpbGQoKSArIG5vZGUubnVtQ2hpbGRyZW4oKTsKLSAgICAgICAg
ICAgICAgICAgKytjaGlsZElkeCkgewotICAgICAgICAgICAgICAgIEVkZ2UgZWRnZSA9IG1fZ3Jh
cGgubV92YXJBcmdDaGlsZHJlbltjaGlsZElkeF07Ci0gICAgICAgICAgICAgICAgY2hhbmdlZCB8
PSBtX2dyYXBoW2VkZ2VdLm1lcmdlRmxhZ3MoTm9kZVVzZWRBc1ZhbHVlKTsKLSAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKG5vZGUtPmdldEhlYXBQ
cmVkaWN0aW9uKCkpOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBjaGlsZElkeCA9IG5vZGUt
PmZpcnN0Q2hpbGQoKTsKKyAgICAgICAgICAgICAgICAgY2hpbGRJZHggPCBub2RlLT5maXJzdENo
aWxkKCkgKyBub2RlLT5udW1DaGlsZHJlbigpOworICAgICAgICAgICAgICAgICArK2NoaWxkSWR4
KQorICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaC5tX3ZhckFyZ0NoaWxkcmVuW2No
aWxkSWR4XS0+bWVyZ2VGbGFncyhOb2RlVXNlZEFzVmFsdWUpOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBjYXNlIENvbnZlcnRUaGlzOiB7Ci0g
ICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uID0gbV9ncmFwaFtub2RlLmNoaWxk
MSgpXS5wcmVkaWN0aW9uKCk7CisgICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9u
ID0gbm9kZS0+Y2hpbGQxKCktPnByZWRpY3Rpb24oKTsKICAgICAgICAgICAgIGlmIChwcmVkaWN0
aW9uKSB7CiAgICAgICAgICAgICAgICAgaWYgKHByZWRpY3Rpb24gJiB+U3BlY09iamVjdE1hc2sp
IHsKICAgICAgICAgICAgICAgICAgICAgcHJlZGljdGlvbiAmPSBTcGVjT2JqZWN0TWFzazsKQEAg
LTYwMiwxMyArNTk4LDEzIEBAIHByaXZhdGU6CiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAg
ICAgICBjYXNlIEdldEdsb2JhbFZhcjogewotICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVBy
ZWRpY3Rpb24obm9kZS5nZXRIZWFwUHJlZGljdGlvbigpKTsKKyAgICAgICAgICAgIGNoYW5nZWQg
fD0gbWVyZ2VQcmVkaWN0aW9uKG5vZGUtPmdldEhlYXBQcmVkaWN0aW9uKCkpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBjYXNlIFB1dEdsb2Jh
bFZhcjoKICAgICAgICAgY2FzZSBQdXRHbG9iYWxWYXJDaGVjazogewotICAgICAgICAgICAgY2hh
bmdlZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLm1lcmdlRmxhZ3MoTm9kZVVzZWRBc1ZhbHVl
KTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbm9kZS0+Y2hpbGQxKCktPm1lcmdlRmxhZ3MoTm9k
ZVVzZWRBc1ZhbHVlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAg
ICAKQEAgLTYxNyw3ICs2MTMsNyBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIFJlc29sdmVCYXNl
OgogICAgICAgICBjYXNlIFJlc29sdmVCYXNlU3RyaWN0UHV0OgogICAgICAgICBjYXNlIFJlc29s
dmVHbG9iYWw6IHsKLSAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24gPSBub2Rl
LmdldEhlYXBQcmVkaWN0aW9uKCk7CisgICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0
aW9uID0gbm9kZS0+Z2V0SGVhcFByZWRpY3Rpb24oKTsKICAgICAgICAgICAgIGNoYW5nZWQgfD0g
bWVyZ2VQcmVkaWN0aW9uKHByZWRpY3Rpb24pOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IH0KQEAgLTY0MywxOCArNjM5LDE2IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAKICAgICAgICAg
Y2FzZSBOZXdBcnJheTogewogICAgICAgICAgICAgY2hhbmdlZCB8PSBzZXRQcmVkaWN0aW9uKFNw
ZWNBcnJheSk7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGNoaWxkSWR4ID0gbm9kZS5maXJz
dENoaWxkKCk7Ci0gICAgICAgICAgICAgICAgIGNoaWxkSWR4IDwgbm9kZS5maXJzdENoaWxkKCkg
KyBub2RlLm51bUNoaWxkcmVuKCk7Ci0gICAgICAgICAgICAgICAgICsrY2hpbGRJZHgpIHsKLSAg
ICAgICAgICAgICAgICBFZGdlIGVkZ2UgPSBtX2dyYXBoLm1fdmFyQXJnQ2hpbGRyZW5bY2hpbGRJ
ZHhdOwotICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaFtlZGdlXS5tZXJnZUZsYWdz
KE5vZGVVc2VkQXNWYWx1ZSk7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGNoaWxkSWR4ID0gbm9kZS0+Zmlyc3RDaGlsZCgpOworICAgICAgICAgICAgICAgICBjaGls
ZElkeCA8IG5vZGUtPmZpcnN0Q2hpbGQoKSArIG5vZGUtPm51bUNoaWxkcmVuKCk7CisgICAgICAg
ICAgICAgICAgICsrY2hpbGRJZHgpCisgICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBo
Lm1fdmFyQXJnQ2hpbGRyZW5bY2hpbGRJZHhdLT5tZXJnZUZsYWdzKE5vZGVVc2VkQXNWYWx1ZSk7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgIGNh
c2UgTmV3QXJyYXlXaXRoU2l6ZTogewogICAgICAgICAgICAgY2hhbmdlZCB8PSBzZXRQcmVkaWN0
aW9uKFNwZWNBcnJheSk7Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbm9kZS5jaGls
ZDEoKV0ubWVyZ2VGbGFncyhOb2RlVXNlZEFzVmFsdWUgfCBOb2RlVXNlZEFzSW50IHwgTm9kZVVz
ZWRBc0ludExvY2FsbHkpOworICAgICAgICAgICAgY2hhbmdlZCB8PSBub2RlLT5jaGlsZDEoKS0+
bWVyZ2VGbGFncyhOb2RlVXNlZEFzVmFsdWUgfCBOb2RlVXNlZEFzSW50IHwgTm9kZVVzZWRBc0lu
dExvY2FsbHkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIApA
QCAtNjcwLDIyICs2NjQsMjIgQEAgcHJpdmF0ZToKICAgICAgICAgCiAgICAgICAgIGNhc2UgU3Ry
aW5nQ2hhckF0OiB7CiAgICAgICAgICAgICBjaGFuZ2VkIHw9IHNldFByZWRpY3Rpb24oU3BlY1N0
cmluZyk7Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ubWVy
Z2VGbGFncyhOb2RlVXNlZEFzVmFsdWUpOwotICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBo
W25vZGUuY2hpbGQyKCldLm1lcmdlRmxhZ3MoTm9kZVVzZWRBc051bWJlciB8IE5vZGVVc2VkQXNP
dGhlciB8IE5vZGVVc2VkQXNJbnQgfCBOb2RlVXNlZEFzSW50TG9jYWxseSk7CisgICAgICAgICAg
ICBjaGFuZ2VkIHw9IG5vZGUtPmNoaWxkMSgpLT5tZXJnZUZsYWdzKE5vZGVVc2VkQXNWYWx1ZSk7
CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG5vZGUtPmNoaWxkMigpLT5tZXJnZUZsYWdzKE5vZGVV
c2VkQXNOdW1iZXIgfCBOb2RlVXNlZEFzT3RoZXIgfCBOb2RlVXNlZEFzSW50IHwgTm9kZVVzZWRB
c0ludExvY2FsbHkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAg
IAogICAgICAgICBjYXNlIFN0ckNhdDogewogICAgICAgICAgICAgY2hhbmdlZCB8PSBzZXRQcmVk
aWN0aW9uKFNwZWNTdHJpbmcpOwotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBjaGlsZElkeCA9
IG5vZGUuZmlyc3RDaGlsZCgpOwotICAgICAgICAgICAgICAgICBjaGlsZElkeCA8IG5vZGUuZmly
c3RDaGlsZCgpICsgbm9kZS5udW1DaGlsZHJlbigpOworICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBjaGlsZElkeCA9IG5vZGUtPmZpcnN0Q2hpbGQoKTsKKyAgICAgICAgICAgICAgICAgY2hpbGRJ
ZHggPCBub2RlLT5maXJzdENoaWxkKCkgKyBub2RlLT5udW1DaGlsZHJlbigpOwogICAgICAgICAg
ICAgICAgICArK2NoaWxkSWR4KQotICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaFtt
X2dyYXBoLm1fdmFyQXJnQ2hpbGRyZW5bY2hpbGRJZHhdXS5tZXJnZUZsYWdzKE5vZGVVc2VkQXNO
dW1iZXIgfCBOb2RlVXNlZEFzT3RoZXIpOworICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9n
cmFwaC5tX3ZhckFyZ0NoaWxkcmVuW2NoaWxkSWR4XS0+bWVyZ2VGbGFncyhOb2RlVXNlZEFzTnVt
YmVyIHwgTm9kZVVzZWRBc090aGVyKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAg
ICAgICAgICAgICAKICAgICAgICAgY2FzZSBUb1ByaW1pdGl2ZTogewotICAgICAgICAgICAgU3Bl
Y3VsYXRlZFR5cGUgY2hpbGQgPSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLnByZWRpY3Rpb24oKTsK
KyAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIGNoaWxkID0gbm9kZS0+Y2hpbGQxKCktPnByZWRp
Y3Rpb24oKTsKICAgICAgICAgICAgIGlmIChjaGlsZCkgewogICAgICAgICAgICAgICAgIGlmIChp
c09iamVjdFNwZWN1bGF0aW9uKGNoaWxkKSkgewogICAgICAgICAgICAgICAgICAgICAvLyBJJ2Qg
bG92ZSB0byBmb2xkIHRoaXMgY2FzZSBpbnRvIHRoZSBjYXNlIGJlbG93LCBidXQgSSBjYW4ndCwg
YmVjYXVzZQpAQCAtNzAyLDcgKzY5Niw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgfSBl
bHNlCiAgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKGNoaWxk
KTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaFtub2RlLmNo
aWxkMSgpXS5tZXJnZUZsYWdzKGZsYWdzKTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbm9kZS0+
Y2hpbGQxKCktPm1lcmdlRmxhZ3MoZmxhZ3MpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IH0KICAgICAgICAgICAgIApAQCAtNzQ1LDQyICs3MzksNDUgQEAgcHJpdmF0ZToKICAgICAgICAg
fQogICAgICAgICAKICAgICAgICAgY2FzZSBQdXRCeVZhbDoKLSAgICAgICAgICAgIGNoYW5nZWQg
fD0gbV9ncmFwaFttX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApXS5tZXJnZUZsYWdzKE5vZGVV
c2VkQXNWYWx1ZSk7Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbV9ncmFwaC52YXJB
cmdDaGlsZChub2RlLCAxKV0ubWVyZ2VGbGFncyhOb2RlVXNlZEFzTnVtYmVyIHwgTm9kZVVzZWRB
c090aGVyIHwgTm9kZVVzZWRBc0ludCB8IE5vZGVVc2VkQXNJbnRMb2NhbGx5KTsKLSAgICAgICAg
ICAgIGNoYW5nZWQgfD0gbV9ncmFwaFttX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpXS5tZXJn
ZUZsYWdzKE5vZGVVc2VkQXNWYWx1ZSk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGgu
dmFyQXJnQ2hpbGQobm9kZSwgMCktPm1lcmdlRmxhZ3MoTm9kZVVzZWRBc1ZhbHVlKTsKKyAgICAg
ICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKS0+bWVyZ2VGbGFn
cyhOb2RlVXNlZEFzTnVtYmVyIHwgTm9kZVVzZWRBc090aGVyIHwgTm9kZVVzZWRBc0ludCB8IE5v
ZGVVc2VkQXNJbnRMb2NhbGx5KTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaC52YXJB
cmdDaGlsZChub2RlLCAyKS0+bWVyZ2VGbGFncyhOb2RlVXNlZEFzVmFsdWUpOwogICAgICAgICAg
ICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSBQdXRTY29wZWRWYXI6Ci0gICAgICAgICAgICBjaGFu
Z2VkIHw9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ubWVyZ2VGbGFncyhOb2RlVXNlZEFzVmFsdWUp
OwotICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQzKCldLm1lcmdlRmxh
Z3MoTm9kZVVzZWRBc1ZhbHVlKTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbm9kZS0+Y2hpbGQx
KCktPm1lcmdlRmxhZ3MoTm9kZVVzZWRBc1ZhbHVlKTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0g
bm9kZS0+Y2hpbGQzKCktPm1lcmdlRmxhZ3MoTm9kZVVzZWRBc1ZhbHVlKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgUmV0dXJuOgogICAgICAgICBjYXNl
IFRocm93OgotICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLm1l
cmdlRmxhZ3MoTm9kZVVzZWRBc1ZhbHVlKTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbm9kZS0+
Y2hpbGQxKCktPm1lcmdlRmxhZ3MoTm9kZVVzZWRBc1ZhbHVlKTsKICAgICAgICAgICAgIGJyZWFr
OwogCiAgICAgICAgIGNhc2UgUHV0QnlJZDoKICAgICAgICAgY2FzZSBQdXRCeUlkRGlyZWN0Ogot
ICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLm1lcmdlRmxhZ3Mo
Tm9kZVVzZWRBc1ZhbHVlKTsKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaFtub2RlLmNo
aWxkMigpXS5tZXJnZUZsYWdzKE5vZGVVc2VkQXNWYWx1ZSk7CisgICAgICAgICAgICBjaGFuZ2Vk
IHw9IG5vZGUtPmNoaWxkMSgpLT5tZXJnZUZsYWdzKE5vZGVVc2VkQXNWYWx1ZSk7CisgICAgICAg
ICAgICBjaGFuZ2VkIHw9IG5vZGUtPmNoaWxkMigpLT5tZXJnZUZsYWdzKE5vZGVVc2VkQXNWYWx1
ZSk7CiAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICBjYXNlIFB1dEJ5T2Zmc2V0OgotICAg
ICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLm1lcmdlRmxhZ3MoTm9k
ZVVzZWRBc1ZhbHVlKTsKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaFtub2RlLmNoaWxk
MygpXS5tZXJnZUZsYWdzKE5vZGVVc2VkQXNWYWx1ZSk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9
IG5vZGUtPmNoaWxkMSgpLT5tZXJnZUZsYWdzKE5vZGVVc2VkQXNWYWx1ZSk7CisgICAgICAgICAg
ICBjaGFuZ2VkIHw9IG5vZGUtPmNoaWxkMygpLT5tZXJnZUZsYWdzKE5vZGVVc2VkQXNWYWx1ZSk7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgICAgICBjYXNlIFBoaToKKyAg
ICAgICAgICAgIC8vIFBoaXMgc2hvdWxkIG5vdCBiZSB2aXNpYmxlIGhlcmUgc2luY2Ugd2UncmUg
aXRlcmF0aW5nIHRoZSBhbGwtYnV0LVBoaSdzCisgICAgICAgICAgICAvLyBwYXJ0IG9mIGJhc2lj
IGJsb2Nrcy4KKyAgICAgICAgICAgIENSQVNIKCk7CiAgICAgICAgICAgICBicmVhazsKIAogICAg
ICAgICBjYXNlIFNldENhbGxlZToKICAgICAgICAgY2FzZSBTZXRNeVNjb3BlOgotICAgICAgICAg
ICAgY2hhbmdlZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLm1lcmdlRmxhZ3MoTm9kZVVzZWRB
c1ZhbHVlKTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbm9kZS0+Y2hpbGQxKCktPm1lcmdlRmxh
Z3MoTm9kZVVzZWRBc1ZhbHVlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAg
ICAgICAgIGNhc2UgR2V0U2NvcGU6Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbm9k
ZS5jaGlsZDEoKV0ubWVyZ2VGbGFncyhOb2RlVXNlZEFzVmFsdWUpOworICAgICAgICAgICAgY2hh
bmdlZCB8PSBub2RlLT5jaGlsZDEoKS0+bWVyZ2VGbGFncyhOb2RlVXNlZEFzVmFsdWUpOwogICAg
ICAgICAgICAgY2hhbmdlZCB8PSBzZXRQcmVkaWN0aW9uKFNwZWNDZWxsT3RoZXIpOwogICAgICAg
ICAgICAgYnJlYWs7CiAKQEAgLTgyOCwzMiArODI1LDMyIEBAIHByaXZhdGU6CiAgICAgICAgIH0K
IAogI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKLSAgICAgICAgZGF0
YUxvZyhTcGVjdWxhdGlvbkR1bXAobV9ncmFwaFttX2NvbXBpbGVJbmRleF0ucHJlZGljdGlvbigp
KSwgIlxuIik7CisgICAgICAgIGRhdGFMb2coU3BlY3VsYXRpb25EdW1wKG5vZGUtPnByZWRpY3Rp
b24oKSksICJcbiIpOwogI2VuZGlmCiAgICAgICAgIAogICAgICAgICBtX2NoYW5nZWQgfD0gY2hh
bmdlZDsKICAgICB9CiAgICAgICAgIAotICAgIGJvb2wgbWVyZ2VEZWZhdWx0RmxhZ3MoTm9kZSYg
bm9kZSkKKyAgICBib29sIG1lcmdlRGVmYXVsdEZsYWdzKE5vZGUqIG5vZGUpCiAgICAgewogICAg
ICAgICBib29sIGNoYW5nZWQgPSBmYWxzZTsKLSAgICAgICAgaWYgKG5vZGUuZmxhZ3MoKSAmIE5v
ZGVIYXNWYXJBcmdzKSB7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGNoaWxkSWR4ID0gbm9k
ZS5maXJzdENoaWxkKCk7Ci0gICAgICAgICAgICAgICAgIGNoaWxkSWR4IDwgbm9kZS5maXJzdENo
aWxkKCkgKyBub2RlLm51bUNoaWxkcmVuKCk7CisgICAgICAgIGlmIChub2RlLT5mbGFncygpICYg
Tm9kZUhhc1ZhckFyZ3MpIHsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgY2hpbGRJZHggPSBu
b2RlLT5maXJzdENoaWxkKCk7CisgICAgICAgICAgICAgICAgIGNoaWxkSWR4IDwgbm9kZS0+Zmly
c3RDaGlsZCgpICsgbm9kZS0+bnVtQ2hpbGRyZW4oKTsKICAgICAgICAgICAgICAgICAgY2hpbGRJ
ZHgrKykgewogICAgICAgICAgICAgICAgIGlmICghIW1fZ3JhcGgubV92YXJBcmdDaGlsZHJlbltj
aGlsZElkeF0pCi0gICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaFttX2dyYXBo
Lm1fdmFyQXJnQ2hpbGRyZW5bY2hpbGRJZHhdXS5tZXJnZUZsYWdzKE5vZGVVc2VkQXNWYWx1ZSk7
CisgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaC5tX3ZhckFyZ0NoaWxkcmVu
W2NoaWxkSWR4XS0+bWVyZ2VGbGFncyhOb2RlVXNlZEFzVmFsdWUpOwogICAgICAgICAgICAgfQog
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaWYgKCFub2RlLmNoaWxkMSgpKQorICAgICAg
ICAgICAgaWYgKCFub2RlLT5jaGlsZDEoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gY2hhbmdl
ZDsKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5tZXJnZUZs
YWdzKE5vZGVVc2VkQXNWYWx1ZSk7Ci0gICAgICAgICAgICBpZiAoIW5vZGUuY2hpbGQyKCkpCisg
ICAgICAgICAgICBjaGFuZ2VkIHw9IG5vZGUtPmNoaWxkMSgpLT5tZXJnZUZsYWdzKE5vZGVVc2Vk
QXNWYWx1ZSk7CisgICAgICAgICAgICBpZiAoIW5vZGUtPmNoaWxkMigpKQogICAgICAgICAgICAg
ICAgIHJldHVybiBjaGFuZ2VkOwotICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW25vZGUu
Y2hpbGQyKCldLm1lcmdlRmxhZ3MoTm9kZVVzZWRBc1ZhbHVlKTsKLSAgICAgICAgICAgIGlmICgh
bm9kZS5jaGlsZDMoKSkKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbm9kZS0+Y2hpbGQyKCktPm1l
cmdlRmxhZ3MoTm9kZVVzZWRBc1ZhbHVlKTsKKyAgICAgICAgICAgIGlmICghbm9kZS0+Y2hpbGQz
KCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGNoYW5nZWQ7Ci0gICAgICAgICAgICBjaGFuZ2Vk
IHw9IG1fZ3JhcGhbbm9kZS5jaGlsZDMoKV0ubWVyZ2VGbGFncyhOb2RlVXNlZEFzVmFsdWUpOwor
ICAgICAgICAgICAgY2hhbmdlZCB8PSBub2RlLT5jaGlsZDMoKS0+bWVyZ2VGbGFncyhOb2RlVXNl
ZEFzVmFsdWUpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBjaGFuZ2VkOwogICAgIH0KQEAg
LTg2Myw4ICs4NjAsMTYgQEAgcHJpdmF0ZToKICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FU
SU9OX1ZFUkJPU0UpCiAgICAgICAgIGRhdGFMb2dGKCJQcm9wYWdhdGluZyBwcmVkaWN0aW9ucyBm
b3J3YXJkIFsldV1cbiIsICsrbV9jb3VudCk7CiAjZW5kaWYKLSAgICAgICAgZm9yIChtX2NvbXBp
bGVJbmRleCA9IDA7IG1fY29tcGlsZUluZGV4IDwgbV9ncmFwaC5zaXplKCk7ICsrbV9jb21waWxl
SW5kZXgpCi0gICAgICAgICAgICBwcm9wYWdhdGUobV9ncmFwaFttX2NvbXBpbGVJbmRleF0pOwor
ICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2dy
YXBoLm1fYmxvY2tzLnNpemUoKTsgKytibG9ja0luZGV4KSB7CisgICAgICAgICAgICBCYXNpY0Js
b2NrKiBibG9jayA9IG1fZ3JhcGgubV9ibG9ja3NbYmxvY2tJbmRleF0uZ2V0KCk7CisgICAgICAg
ICAgICBpZiAoIWJsb2NrKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAg
QVNTRVJUKGJsb2NrLT5pc1JlYWNoYWJsZSk7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgYmxvY2stPnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICAgICAgbV9jdXJyZW50
Tm9kZSA9IGJsb2NrLT5hdChpKTsKKyAgICAgICAgICAgICAgICBwcm9wYWdhdGUobV9jdXJyZW50
Tm9kZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KICAgICB9CiAgICAgCiAgICAgdm9pZCBw
cm9wYWdhdGVCYWNrd2FyZCgpCkBAIC04NzIsMTIzICs4NzcsMTM5IEBAIHByaXZhdGU6CiAjaWYg
REZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQogICAgICAgICBkYXRhTG9nRigi
UHJvcGFnYXRpbmcgcHJlZGljdGlvbnMgYmFja3dhcmQgWyV1XVxuIiwgKyttX2NvdW50KTsKICNl
bmRpZgotICAgICAgICBmb3IgKG1fY29tcGlsZUluZGV4ID0gbV9ncmFwaC5zaXplKCk7IG1fY29t
cGlsZUluZGV4LS0gPiAwOykKLSAgICAgICAgICAgIHByb3BhZ2F0ZShtX2dyYXBoW21fY29tcGls
ZUluZGV4XSk7CisgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gbV9ncmFwaC5t
X2Jsb2Nrcy5zaXplKCk7IGJsb2NrSW5kZXgtLTspIHsKKyAgICAgICAgICAgIEJhc2ljQmxvY2sq
IGJsb2NrID0gbV9ncmFwaC5tX2Jsb2Nrc1tibG9ja0luZGV4XS5nZXQoKTsKKyAgICAgICAgICAg
IGlmICghYmxvY2spCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBBU1NF
UlQoYmxvY2stPmlzUmVhY2hhYmxlKTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGJs
b2NrLT5zaXplKCk7IGktLTspIHsKKyAgICAgICAgICAgICAgICBtX2N1cnJlbnROb2RlID0gYmxv
Y2stPmF0KGkpOworICAgICAgICAgICAgICAgIHByb3BhZ2F0ZShtX2N1cnJlbnROb2RlKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQogICAgIH0KICAgICAKLSAgICB2b2lkIGRvUm91bmRPZkRv
dWJsZVZvdGluZygpCisgICAgdm9pZCBkb0RvdWJsZVZvdGluZyhOb2RlKiBub2RlKQogICAgIHsK
LSNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCi0gICAgICAgIGRhdGFM
b2dGKCJWb3Rpbmcgb24gZG91YmxlIHVzZXMgb2YgbG9jYWxzIFsldV1cbiIsIG1fY291bnQpOwot
I2VuZGlmCi0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2dyYXBoLm1fdmFyaWFi
bGVBY2Nlc3NEYXRhLnNpemUoKTsgKytpKQotICAgICAgICAgICAgbV9ncmFwaC5tX3ZhcmlhYmxl
QWNjZXNzRGF0YVtpXS5maW5kKCktPmNsZWFyVm90ZXMoKTsKLSAgICAgICAgZm9yIChtX2NvbXBp
bGVJbmRleCA9IDA7IG1fY29tcGlsZUluZGV4IDwgbV9ncmFwaC5zaXplKCk7ICsrbV9jb21waWxl
SW5kZXgpIHsKLSAgICAgICAgICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW21fY29tcGlsZUluZGV4
XTsKLSAgICAgICAgICAgIHN3aXRjaCAobm9kZS5vcCgpKSB7Ci0gICAgICAgICAgICBjYXNlIFZh
bHVlQWRkOgotICAgICAgICAgICAgY2FzZSBBcml0aEFkZDoKLSAgICAgICAgICAgIGNhc2UgQXJp
dGhTdWI6IHsKLSAgICAgICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSBsZWZ0ID0gbV9ncmFwaFtu
b2RlLmNoaWxkMSgpXS5wcmVkaWN0aW9uKCk7Ci0gICAgICAgICAgICAgICAgU3BlY3VsYXRlZFR5
cGUgcmlnaHQgPSBtX2dyYXBoW25vZGUuY2hpbGQyKCldLnByZWRpY3Rpb24oKTsKKyAgICAgICAg
c3dpdGNoIChub2RlLT5vcCgpKSB7CisgICAgICAgIGNhc2UgVmFsdWVBZGQ6CisgICAgICAgIGNh
c2UgQXJpdGhBZGQ6CisgICAgICAgIGNhc2UgQXJpdGhTdWI6IHsKKyAgICAgICAgICAgIFNwZWN1
bGF0ZWRUeXBlIGxlZnQgPSBub2RlLT5jaGlsZDEoKS0+cHJlZGljdGlvbigpOworICAgICAgICAg
ICAgU3BlY3VsYXRlZFR5cGUgcmlnaHQgPSBub2RlLT5jaGlsZDIoKS0+cHJlZGljdGlvbigpOwog
ICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIERvdWJsZUJhbGxvdCBiYWxsb3Q7Cisg
ICAgICAgICAgICBEb3VibGVCYWxsb3QgYmFsbG90OwogICAgICAgICAgICAgICAgIAotICAgICAg
ICAgICAgICAgIGlmIChpc051bWJlclNwZWN1bGF0aW9uRXhwZWN0aW5nRGVmaW5lZChsZWZ0KSAm
JiBpc051bWJlclNwZWN1bGF0aW9uRXhwZWN0aW5nRGVmaW5lZChyaWdodCkKLSAgICAgICAgICAg
ICAgICAgICAgJiYgIW1fZ3JhcGguYWRkU2hvdWxkU3BlY3VsYXRlSW50ZWdlcihub2RlKSkKLSAg
ICAgICAgICAgICAgICAgICAgYmFsbG90ID0gVm90ZURvdWJsZTsKLSAgICAgICAgICAgICAgICBl
bHNlCi0gICAgICAgICAgICAgICAgICAgIGJhbGxvdCA9IFZvdGVWYWx1ZTsKKyAgICAgICAgICAg
IGlmIChpc051bWJlclNwZWN1bGF0aW9uRXhwZWN0aW5nRGVmaW5lZChsZWZ0KSAmJiBpc051bWJl
clNwZWN1bGF0aW9uRXhwZWN0aW5nRGVmaW5lZChyaWdodCkKKyAgICAgICAgICAgICAgICAmJiAh
bV9ncmFwaC5hZGRTaG91bGRTcGVjdWxhdGVJbnRlZ2VyKG5vZGUpKQorICAgICAgICAgICAgICAg
IGJhbGxvdCA9IFZvdGVEb3VibGU7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAg
YmFsbG90ID0gVm90ZVZhbHVlOwogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIG1f
Z3JhcGgudm90ZShub2RlLmNoaWxkMSgpLCBiYWxsb3QpOwotICAgICAgICAgICAgICAgIG1fZ3Jh
cGgudm90ZShub2RlLmNoaWxkMigpLCBiYWxsb3QpOwotICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgfQorICAgICAgICAgICAgbV9ncmFwaC52b3RlTm9kZShub2RlLT5jaGlsZDEo
KSwgYmFsbG90KTsKKyAgICAgICAgICAgIG1fZ3JhcGgudm90ZU5vZGUobm9kZS0+Y2hpbGQyKCks
IGJhbGxvdCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQogICAgICAgICAgICAgICAg
IAotICAgICAgICAgICAgY2FzZSBBcml0aE11bDogewotICAgICAgICAgICAgICAgIFNwZWN1bGF0
ZWRUeXBlIGxlZnQgPSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLnByZWRpY3Rpb24oKTsKLSAgICAg
ICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSByaWdodCA9IG1fZ3JhcGhbbm9kZS5jaGlsZDIoKV0u
cHJlZGljdGlvbigpOworICAgICAgICBjYXNlIEFyaXRoTXVsOiB7CisgICAgICAgICAgICBTcGVj
dWxhdGVkVHlwZSBsZWZ0ID0gbm9kZS0+Y2hpbGQxKCktPnByZWRpY3Rpb24oKTsKKyAgICAgICAg
ICAgIFNwZWN1bGF0ZWRUeXBlIHJpZ2h0ID0gbm9kZS0+Y2hpbGQyKCktPnByZWRpY3Rpb24oKTsK
ICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBEb3VibGVCYWxsb3QgYmFsbG90Owor
ICAgICAgICAgICAgRG91YmxlQmFsbG90IGJhbGxvdDsKICAgICAgICAgICAgICAgICAKLSAgICAg
ICAgICAgICAgICBpZiAoaXNOdW1iZXJTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc051bWJlclNwZWN1
bGF0aW9uKHJpZ2h0KQotICAgICAgICAgICAgICAgICAgICAmJiAhbV9ncmFwaC5tdWxTaG91bGRT
cGVjdWxhdGVJbnRlZ2VyKG5vZGUpKQotICAgICAgICAgICAgICAgICAgICBiYWxsb3QgPSBWb3Rl
RG91YmxlOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgYmFsbG90
ID0gVm90ZVZhbHVlOworICAgICAgICAgICAgaWYgKGlzTnVtYmVyU3BlY3VsYXRpb24obGVmdCkg
JiYgaXNOdW1iZXJTcGVjdWxhdGlvbihyaWdodCkKKyAgICAgICAgICAgICAgICAmJiAhbV9ncmFw
aC5tdWxTaG91bGRTcGVjdWxhdGVJbnRlZ2VyKG5vZGUpKQorICAgICAgICAgICAgICAgIGJhbGxv
dCA9IFZvdGVEb3VibGU7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgYmFsbG90
ID0gVm90ZVZhbHVlOwogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIG1fZ3JhcGgu
dm90ZShub2RlLmNoaWxkMSgpLCBiYWxsb3QpOwotICAgICAgICAgICAgICAgIG1fZ3JhcGgudm90
ZShub2RlLmNoaWxkMigpLCBiYWxsb3QpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgfQorICAgICAgICAgICAgbV9ncmFwaC52b3RlTm9kZShub2RlLT5jaGlsZDEoKSwgYmFs
bG90KTsKKyAgICAgICAgICAgIG1fZ3JhcGgudm90ZU5vZGUobm9kZS0+Y2hpbGQyKCksIGJhbGxv
dCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQogCi0gICAgICAgICAgICBjYXNlIEFy
aXRoTWluOgotICAgICAgICAgICAgY2FzZSBBcml0aE1heDoKLSAgICAgICAgICAgIGNhc2UgQXJp
dGhNb2Q6Ci0gICAgICAgICAgICBjYXNlIEFyaXRoRGl2OiB7Ci0gICAgICAgICAgICAgICAgU3Bl
Y3VsYXRlZFR5cGUgbGVmdCA9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ucHJlZGljdGlvbigpOwot
ICAgICAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHJpZ2h0ID0gbV9ncmFwaFtub2RlLmNoaWxk
MigpXS5wcmVkaWN0aW9uKCk7CisgICAgICAgIGNhc2UgQXJpdGhNaW46CisgICAgICAgIGNhc2Ug
QXJpdGhNYXg6CisgICAgICAgIGNhc2UgQXJpdGhNb2Q6CisgICAgICAgIGNhc2UgQXJpdGhEaXY6
IHsKKyAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIGxlZnQgPSBub2RlLT5jaGlsZDEoKS0+cHJl
ZGljdGlvbigpOworICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgcmlnaHQgPSBub2RlLT5jaGls
ZDIoKS0+cHJlZGljdGlvbigpOwogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIERv
dWJsZUJhbGxvdCBiYWxsb3Q7CisgICAgICAgICAgICBEb3VibGVCYWxsb3QgYmFsbG90OwogICAg
ICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGlmIChpc051bWJlclNwZWN1bGF0aW9uKGxl
ZnQpICYmIGlzTnVtYmVyU3BlY3VsYXRpb24ocmlnaHQpCi0gICAgICAgICAgICAgICAgICAgICYm
ICEoTm9kZTo6c2hvdWxkU3BlY3VsYXRlSW50ZWdlckZvckFyaXRobWV0aWMobV9ncmFwaFtub2Rl
LmNoaWxkMSgpXSwgbV9ncmFwaFtub2RlLmNoaWxkMSgpXSkKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAmJiBub2RlLmNhblNwZWN1bGF0ZUludGVnZXIoKSkpCi0gICAgICAgICAgICAgICAgICAg
IGJhbGxvdCA9IFZvdGVEb3VibGU7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAg
ICAgICAgICBiYWxsb3QgPSBWb3RlVmFsdWU7CisgICAgICAgICAgICBpZiAoaXNOdW1iZXJTcGVj
dWxhdGlvbihsZWZ0KSAmJiBpc051bWJlclNwZWN1bGF0aW9uKHJpZ2h0KQorICAgICAgICAgICAg
ICAgICYmICEoTm9kZTo6c2hvdWxkU3BlY3VsYXRlSW50ZWdlckZvckFyaXRobWV0aWMobm9kZS0+
Y2hpbGQxKCkubm9kZSgpLCBub2RlLT5jaGlsZDIoKS5ub2RlKCkpCisgICAgICAgICAgICAgICAg
ICAgICAmJiBub2RlLT5jYW5TcGVjdWxhdGVJbnRlZ2VyKCkpKQorICAgICAgICAgICAgICAgIGJh
bGxvdCA9IFZvdGVEb3VibGU7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgYmFs
bG90ID0gVm90ZVZhbHVlOwogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIG1fZ3Jh
cGgudm90ZShub2RlLmNoaWxkMSgpLCBiYWxsb3QpOwotICAgICAgICAgICAgICAgIG1fZ3JhcGgu
dm90ZShub2RlLmNoaWxkMigpLCBiYWxsb3QpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgfQorICAgICAgICAgICAgbV9ncmFwaC52b3RlTm9kZShub2RlLT5jaGlsZDEoKSwg
YmFsbG90KTsKKyAgICAgICAgICAgIG1fZ3JhcGgudm90ZU5vZGUobm9kZS0+Y2hpbGQyKCksIGJh
bGxvdCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQogICAgICAgICAgICAgICAgIAot
ICAgICAgICAgICAgY2FzZSBBcml0aEFiczoKLSAgICAgICAgICAgICAgICBEb3VibGVCYWxsb3Qg
YmFsbG90OwotICAgICAgICAgICAgICAgIGlmICghKG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0uc2hv
dWxkU3BlY3VsYXRlSW50ZWdlckZvckFyaXRobWV0aWMoKQotICAgICAgICAgICAgICAgICAgICAg
ICYmIG5vZGUuY2FuU3BlY3VsYXRlSW50ZWdlcigpKSkKLSAgICAgICAgICAgICAgICAgICAgYmFs
bG90ID0gVm90ZURvdWJsZTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAg
ICAgIGJhbGxvdCA9IFZvdGVWYWx1ZTsKKyAgICAgICAgY2FzZSBBcml0aEFiczoKKyAgICAgICAg
ICAgIERvdWJsZUJhbGxvdCBiYWxsb3Q7CisgICAgICAgICAgICBpZiAoIShub2RlLT5jaGlsZDEo
KS0+c2hvdWxkU3BlY3VsYXRlSW50ZWdlckZvckFyaXRobWV0aWMoKQorICAgICAgICAgICAgICAg
ICAgJiYgbm9kZS0+Y2FuU3BlY3VsYXRlSW50ZWdlcigpKSkKKyAgICAgICAgICAgICAgICBiYWxs
b3QgPSBWb3RlRG91YmxlOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGJhbGxv
dCA9IFZvdGVWYWx1ZTsKICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBtX2dyYXBo
LnZvdGUobm9kZS5jaGlsZDEoKSwgYmFsbG90KTsKLSAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIG1fZ3JhcGgudm90ZU5vZGUobm9kZS0+Y2hpbGQxKCksIGJhbGxvdCk7CisgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGNhc2UgQXJpdGhT
cXJ0OgotICAgICAgICAgICAgICAgIG1fZ3JhcGgudm90ZShub2RlLmNoaWxkMSgpLCBWb3RlRG91
YmxlKTsKLSAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBBcml0aFNxcnQ6Cisg
ICAgICAgICAgICBtX2dyYXBoLnZvdGVOb2RlKG5vZGUtPmNoaWxkMSgpLCBWb3RlRG91YmxlKTsK
KyAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgY2FzZSBT
ZXRMb2NhbDogewotICAgICAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24gPSBt
X2dyYXBoW25vZGUuY2hpbGQxKCldLnByZWRpY3Rpb24oKTsKLSAgICAgICAgICAgICAgICBpZiAo
aXNEb3VibGVTcGVjdWxhdGlvbihwcmVkaWN0aW9uKSkKLSAgICAgICAgICAgICAgICAgICAgbm9k
ZS52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+dm90ZShWb3RlRG91YmxlKTsKLSAgICAgICAgICAgICAg
ICBlbHNlIGlmICghaXNOdW1iZXJTcGVjdWxhdGlvbihwcmVkaWN0aW9uKSB8fCBpc0ludDMyU3Bl
Y3VsYXRpb24ocHJlZGljdGlvbikpCi0gICAgICAgICAgICAgICAgICAgIG5vZGUudmFyaWFibGVB
Y2Nlc3NEYXRhKCktPnZvdGUoVm90ZVZhbHVlKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgIH0KKyAgICAgICAgY2FzZSBTZXRMb2NhbDogeworICAgICAgICAgICAgU3BlY3Vs
YXRlZFR5cGUgcHJlZGljdGlvbiA9IG5vZGUtPmNoaWxkMSgpLT5wcmVkaWN0aW9uKCk7CisgICAg
ICAgICAgICBpZiAoaXNEb3VibGVTcGVjdWxhdGlvbihwcmVkaWN0aW9uKSkKKyAgICAgICAgICAg
ICAgICBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+dm90ZShWb3RlRG91YmxlKTsKKyAgICAg
ICAgICAgIGVsc2UgaWYgKCFpc051bWJlclNwZWN1bGF0aW9uKHByZWRpY3Rpb24pIHx8IGlzSW50
MzJTcGVjdWxhdGlvbihwcmVkaWN0aW9uKSkKKyAgICAgICAgICAgICAgICBub2RlLT52YXJpYWJs
ZUFjY2Vzc0RhdGEoKS0+dm90ZShWb3RlVmFsdWUpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGNhc2UgUHV0QnlWYWw6Ci0gICAg
ICAgICAgICBjYXNlIFB1dEJ5VmFsQWxpYXM6IHsKLSAgICAgICAgICAgICAgICBFZGdlIGNoaWxk
MSA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCk7Ci0gICAgICAgICAgICAgICAgRWRnZSBj
aGlsZDIgPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpOwotICAgICAgICAgICAgICAgIEVk
Z2UgY2hpbGQzID0gbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAyKTsKLSAgICAgICAgICAgICAg
ICBtX2dyYXBoLnZvdGUoY2hpbGQxLCBWb3RlVmFsdWUpOwotICAgICAgICAgICAgICAgIG1fZ3Jh
cGgudm90ZShjaGlsZDIsIFZvdGVWYWx1ZSk7Ci0gICAgICAgICAgICAgICAgc3dpdGNoIChub2Rl
LmFycmF5TW9kZSgpLnR5cGUoKSkgewotICAgICAgICAgICAgICAgIGNhc2UgQXJyYXk6OkRvdWJs
ZToKLSAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC52b3RlKGNoaWxkMywgVm90ZURvdWJsZSk7
Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0g
ICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgudm90ZShjaGlsZDMsIFZvdGVWYWx1ZSk7Ci0gICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgY2FzZSBQ
dXRCeVZhbDoKKyAgICAgICAgY2FzZSBQdXRCeVZhbEFsaWFzOiB7CisgICAgICAgICAgICBFZGdl
IGNoaWxkMSA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCk7CisgICAgICAgICAgICBFZGdl
IGNoaWxkMiA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSk7CisgICAgICAgICAgICBFZGdl
IGNoaWxkMyA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMik7CisgICAgICAgICAgICBtX2dy
YXBoLnZvdGVOb2RlKGNoaWxkMSwgVm90ZVZhbHVlKTsKKyAgICAgICAgICAgIG1fZ3JhcGgudm90
ZU5vZGUoY2hpbGQyLCBWb3RlVmFsdWUpOworICAgICAgICAgICAgc3dpdGNoIChub2RlLT5hcnJh
eU1vZGUoKS50eXBlKCkpIHsKKyAgICAgICAgICAgIGNhc2UgQXJyYXk6OkRvdWJsZToKKyAgICAg
ICAgICAgICAgICBtX2dyYXBoLnZvdGVOb2RlKGNoaWxkMywgVm90ZURvdWJsZSk7CiAgICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgCiAgICAgICAg
ICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIG1fZ3JhcGgudm90ZShub2RlLCBWb3RlVmFs
dWUpOworICAgICAgICAgICAgICAgIG1fZ3JhcGgudm90ZU5vZGUoY2hpbGQzLCBWb3RlVmFsdWUp
OwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBkZWZhdWx0OgorICAgICAgICAg
ICAgbV9ncmFwaC52b3RlQ2hpbGRyZW4obm9kZSwgVm90ZVZhbHVlKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIHZvaWQgZG9Sb3VuZE9mRG91YmxlVm90
aW5nKCkKKyAgICB7CisjaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQor
ICAgICAgICBkYXRhTG9nRigiVm90aW5nIG9uIGRvdWJsZSB1c2VzIG9mIGxvY2FscyBbJXVdXG4i
LCBtX2NvdW50KTsKKyNlbmRpZgorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9n
cmFwaC5tX3ZhcmlhYmxlQWNjZXNzRGF0YS5zaXplKCk7ICsraSkKKyAgICAgICAgICAgIG1fZ3Jh
cGgubV92YXJpYWJsZUFjY2Vzc0RhdGFbaV0uZmluZCgpLT5jbGVhclZvdGVzKCk7CisgICAgICAg
IGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gMDsgaSA8IG1fZ3JhcGgubV9ibG9ja3Muc2l6
ZSgpOyArK2Jsb2NrSW5kZXgpIHsKKyAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9n
cmFwaC5tX2Jsb2Nrc1tibG9ja0luZGV4XS5nZXQoKTsKKyAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBibG9jay0+c2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgICAgICBtX2N1
cnJlbnROb2RlID0gYmxvY2stPmF0KGkpOworICAgICAgICAgICAgICAgIGRvRG91YmxlVm90aW5n
KG1fY3VycmVudE5vZGUpOworICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBtX2dyYXBoLm1fdmFyaWFibGVBY2Nlc3NEYXRhLnNpemUoKTsg
KytpKSB7CiAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0
YSA9ICZtX2dyYXBoLm1fdmFyaWFibGVBY2Nlc3NEYXRhW2ldOwpAQCAtMTAxMiw3ICsxMDMzLDcg
QEAgcHJpdmF0ZToKICAgICAgICAgfQogICAgIH0KICAgICAKLSAgICBOb2RlSW5kZXggbV9jb21w
aWxlSW5kZXg7CisgICAgTm9kZSogbV9jdXJyZW50Tm9kZTsKICAgICBib29sIG1fY2hhbmdlZDsK
IAogI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2NvcmVCb2FyZC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2NvcmVCb2FyZC5oCShyZXZpc2lvbiAxNDA5MDQpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Njb3JlQm9hcmQuaAkod29ya2luZyBjb3B5
KQpAQCAtNDMsOSArNDMsOCBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAvLyBh
bm90aGVyIG5vZGUuCiBjbGFzcyBTY29yZUJvYXJkIHsKIHB1YmxpYzoKLSAgICBTY29yZUJvYXJk
KEdyYXBoJiBncmFwaCwgY29uc3QgQml0VmVjdG9yJiB1c2VkVmFycykKLSAgICAgICAgOiBtX2dy
YXBoKGdyYXBoKQotICAgICAgICAsIG1faGlnaFdhdGVybWFyaygwKQorICAgIFNjb3JlQm9hcmQo
Y29uc3QgQml0VmVjdG9yJiB1c2VkVmFycykKKyAgICAgICAgOiBtX2hpZ2hXYXRlcm1hcmsoMCkK
ICAgICB7CiAgICAgICAgIG1fdXNlZC5maWxsKDAsIHVzZWRWYXJzLnNpemUoKSk7CiAgICAgICAg
IG1fZnJlZS5yZXNlcnZlQ2FwYWNpdHkodXNlZFZhcnMuc2l6ZSgpKTsKQEAgLTEwMiwxNiArMTAx
LDE1IEBAIHB1YmxpYzoKIAogICAgIC8vIEluY3JlbWVudCB0aGUgdXNlY291bnQgZm9yIHRoZSBW
aXJ0dWFsUmVnc2l0ZXIgYXNzb2NpYXRlZCB3aXRoICdjaGlsZCcsCiAgICAgLy8gaWYgaXQgcmVh
Y2hlcyB0aGUgbm9kZSdzIHJlZmNvdW50LCBmcmVlIHRoZSBWaXJ0dWFsUmVnc2l0ZXIuCi0gICAg
dm9pZCB1c2UoTm9kZUluZGV4IGNoaWxkKQorICAgIHZvaWQgdXNlKE5vZGUqIGNoaWxkKQogICAg
IHsKLSAgICAgICAgaWYgKGNoaWxkID09IE5vTm9kZSkKKyAgICAgICAgaWYgKCFjaGlsZCkKICAg
ICAgICAgICAgIHJldHVybjsKIAogICAgICAgICAvLyBGaW5kIHRoZSB2aXJ0dWFsIHJlZ2lzdGVy
IG51bWJlciBmb3IgdGhpcyBjaGlsZCwgaW5jcmVtZW50IGl0cyB1c2UgY291bnQuCi0gICAgICAg
IE5vZGUmIG5vZGUgPSBtX2dyYXBoW2NoaWxkXTsKLSAgICAgICAgdWludDMyX3QgaW5kZXggPSBu
b2RlLnZpcnR1YWxSZWdpc3RlcigpOworICAgICAgICB1aW50MzJfdCBpbmRleCA9IGNoaWxkLT52
aXJ0dWFsUmVnaXN0ZXIoKTsKICAgICAgICAgQVNTRVJUKG1fdXNlZFtpbmRleF0gIT0gbWF4KCkp
OwotICAgICAgICBpZiAobm9kZS5yZWZDb3VudCgpID09ICsrbV91c2VkW2luZGV4XSkgeworICAg
ICAgICBpZiAoY2hpbGQtPnJlZkNvdW50KCkgPT0gKyttX3VzZWRbaW5kZXhdKSB7CiAjaWYgREZH
X0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQogICAgICAgICAgICAgZGF0YUxvZ0Yo
IiBGcmVlaW5nIHZpcnR1YWwgcmVnaXN0ZXIgJXUuIiwgaW5kZXgpOwogI2VuZGlmCkBAIC0xMjIs
MjAgKzEyMCwyMCBAQCBwdWJsaWM6CiAgICAgICAgICAgICBtX2ZyZWUuYXBwZW5kKGluZGV4KTsK
ICAgICAgICAgfSBlbHNlIHsKICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJP
U0UpCi0gICAgICAgICAgICBkYXRhTG9nRigiIFZpcnR1YWwgcmVnaXN0ZXIgJXUgaXMgYXQgJXUv
JXUgdXNlcy4iLCBpbmRleCwgbV91c2VkW2luZGV4XSwgbm9kZS5yZWZDb3VudCgpKTsKKyAgICAg
ICAgICAgIGRhdGFMb2dGKCIgVmlydHVhbCByZWdpc3RlciAldSBpcyBhdCAldS8ldSB1c2VzLiIs
IGluZGV4LCBtX3VzZWRbaW5kZXhdLCBjaGlsZC0+cmVmQ291bnQoKSk7CiAjZW5kaWYKICAgICAg
ICAgfQogICAgIH0KICAgICB2b2lkIHVzZShFZGdlIGNoaWxkKQogICAgIHsKLSAgICAgICAgdXNl
KGNoaWxkLmluZGV4VW5jaGVja2VkKCkpOworICAgICAgICB1c2UoY2hpbGQubm9kZSgpKTsKICAg
ICB9CiAgICAgCiAgICAgdm9pZCB1c2VJZkhhc1Jlc3VsdChFZGdlIGNoaWxkKQogICAgIHsKICAg
ICAgICAgaWYgKCFjaGlsZCkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgaWYgKCFtX2dy
YXBoW2NoaWxkXS5oYXNSZXN1bHQoKSkKKyAgICAgICAgaWYgKCFjaGlsZC0+aGFzUmVzdWx0KCkp
CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIHVzZShjaGlsZCk7CiAgICAgfQpAQCAtMTc1
LDkgKzE3Myw2IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgc3RhdGljIHVpbnQzMl90IG1heCgp
IHsgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgoKTsgfQogICAgIAot
ICAgIC8vIFRoZSBncmFwaCwgc28gd2UgY2FuIGdldCByZWZDb3VudHMgZm9yIG5vZGVzLCB0byBk
ZXRlcm1pbmUgd2hlbiB2YWx1ZXMgYXJlIGRlYWQuCi0gICAgR3JhcGgmIG1fZ3JhcGg7Ci0gICAg
CiAgICAgLy8gVGhlIHNpemUgb2YgdGhlIHNwYW4gb2YgdmlydHVhbCByZWdpc3RlcnMgdGhhdCB0
aGlzIGNvZGUgYmxvY2sgd2lsbCB1c2UuCiAgICAgdW5zaWduZWQgbV9oaWdoV2F0ZXJtYXJrOwog
ICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTaWxlbnRSZWdpc3RlclNh
dmVQbGFuLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTaWxl
bnRSZWdpc3RlclNhdmVQbGFuLmgJKHJldmlzaW9uIDE0MDkwNCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU2lsZW50UmVnaXN0ZXJTYXZlUGxhbi5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTMgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC03
NCwzOCArNzQsMzggQEAgcHVibGljOgogICAgICAgICA6IG1fc3BpbGxBY3Rpb24oRG9Ob3RoaW5n
Rm9yU3BpbGwpCiAgICAgICAgICwgbV9maWxsQWN0aW9uKERvTm90aGluZ0ZvckZpbGwpCiAgICAg
ICAgICwgbV9yZWdpc3RlcigtMSkKLSAgICAgICAgLCBtX25vZGVJbmRleChOb05vZGUpCisgICAg
ICAgICwgbV9ub2RlKDApCiAgICAgewogICAgIH0KICAgICAKICAgICBTaWxlbnRSZWdpc3RlclNh
dmVQbGFuKAogICAgICAgICBTaWxlbnRTcGlsbEFjdGlvbiBzcGlsbEFjdGlvbiwKICAgICAgICAg
U2lsZW50RmlsbEFjdGlvbiBmaWxsQWN0aW9uLAotICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4
LAorICAgICAgICBOb2RlKiBub2RlLAogICAgICAgICBHUFJSZWcgZ3ByKQogICAgICAgICA6IG1f
c3BpbGxBY3Rpb24oc3BpbGxBY3Rpb24pCiAgICAgICAgICwgbV9maWxsQWN0aW9uKGZpbGxBY3Rp
b24pCiAgICAgICAgICwgbV9yZWdpc3RlcihncHIpCi0gICAgICAgICwgbV9ub2RlSW5kZXgobm9k
ZUluZGV4KQorICAgICAgICAsIG1fbm9kZShub2RlKQogICAgIHsKICAgICB9CiAgICAgCiAgICAg
U2lsZW50UmVnaXN0ZXJTYXZlUGxhbigKICAgICAgICAgU2lsZW50U3BpbGxBY3Rpb24gc3BpbGxB
Y3Rpb24sCiAgICAgICAgIFNpbGVudEZpbGxBY3Rpb24gZmlsbEFjdGlvbiwKLSAgICAgICAgTm9k
ZUluZGV4IG5vZGVJbmRleCwKKyAgICAgICAgTm9kZSogbm9kZSwKICAgICAgICAgRlBSUmVnIGZw
cikKICAgICAgICAgOiBtX3NwaWxsQWN0aW9uKHNwaWxsQWN0aW9uKQogICAgICAgICAsIG1fZmls
bEFjdGlvbihmaWxsQWN0aW9uKQogICAgICAgICAsIG1fcmVnaXN0ZXIoZnByKQotICAgICAgICAs
IG1fbm9kZUluZGV4KG5vZGVJbmRleCkKKyAgICAgICAgLCBtX25vZGUobm9kZSkKICAgICB7CiAg
ICAgfQogICAgIAogICAgIFNpbGVudFNwaWxsQWN0aW9uIHNwaWxsQWN0aW9uKCkgY29uc3QgeyBy
ZXR1cm4gc3RhdGljX2Nhc3Q8U2lsZW50U3BpbGxBY3Rpb24+KG1fc3BpbGxBY3Rpb24pOyB9CiAg
ICAgU2lsZW50RmlsbEFjdGlvbiBmaWxsQWN0aW9uKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nh
c3Q8U2lsZW50RmlsbEFjdGlvbj4obV9maWxsQWN0aW9uKTsgfQogICAgIAotICAgIE5vZGVJbmRl
eCBub2RlSW5kZXgoKSBjb25zdCB7IHJldHVybiBtX25vZGVJbmRleDsgfQorICAgIE5vZGUqIG5v
ZGUoKSBjb25zdCB7IHJldHVybiBtX25vZGU7IH0KICAgICAKICAgICBHUFJSZWcgZ3ByKCkgY29u
c3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8R1BSUmVnPihtX3JlZ2lzdGVyKTsgfQogICAgIEZQUlJl
ZyBmcHIoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxGUFJSZWc+KG1fcmVnaXN0ZXIpOyB9
CkBAIC0xMTQsNyArMTE0LDcgQEAgcHJpdmF0ZToKICAgICBpbnQ4X3QgbV9zcGlsbEFjdGlvbjsK
ICAgICBpbnQ4X3QgbV9maWxsQWN0aW9uOwogICAgIGludDhfdCBtX3JlZ2lzdGVyOwotICAgIE5v
ZGVJbmRleCBtX25vZGVJbmRleDsKKyAgICBOb2RlKiBtX25vZGU7CiB9OwogCiB9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6REZHCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nsb3dQ
YXRoR2VuZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTbG93UGF0aEdlbmVyYXRvci5oCShyZXZpc2lvbiAxNDA5MDQpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1Nsb3dQYXRoR2VuZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTQy
LDcgKzQyLDcgQEAgY2xhc3MgU2xvd1BhdGhHZW5lcmF0b3IgewogICAgIFdURl9NQUtFX0ZBU1Rf
QUxMT0NBVEVEOwogcHVibGljOgogICAgIFNsb3dQYXRoR2VuZXJhdG9yKFNwZWN1bGF0aXZlSklU
KiBqaXQpCi0gICAgICAgIDogbV9jb21waWxlSW5kZXgoaml0LT5tX2NvbXBpbGVJbmRleCkKKyAg
ICAgICAgOiBtX2N1cnJlbnROb2RlKGppdC0+bV9jdXJyZW50Tm9kZSkKICAgICB7CiAgICAgfQog
ICAgIHZpcnR1YWwgflNsb3dQYXRoR2VuZXJhdG9yKCkgeyB9CkBAIC01Miw3ICs1Miw3IEBAIHB1
YmxpYzoKICAgICAgICAgZGF0YUxvZ0YoIkdlbmVyYXRpbmcgc2xvdyBwYXRoICVwIGF0IG9mZnNl
dCAweCV4XG4iLCB0aGlzLCBqaXQtPm1faml0LmRlYnVnT2Zmc2V0KCkpOwogI2VuZGlmCiAgICAg
ICAgIG1fbGFiZWwgPSBqaXQtPm1faml0LmxhYmVsKCk7Ci0gICAgICAgIGppdC0+bV9jb21waWxl
SW5kZXggPSBtX2NvbXBpbGVJbmRleDsKKyAgICAgICAgaml0LT5tX2N1cnJlbnROb2RlID0gbV9j
dXJyZW50Tm9kZTsKICAgICAgICAgZ2VuZXJhdGVJbnRlcm5hbChqaXQpOwogI2lmICFBU1NFUlRf
RElTQUJMRUQKICAgICAgICAgaml0LT5tX2ppdC5icmVha3BvaW50KCk7IC8vIG1ha2Ugc3VyZSB0
aGF0IHRoZSBnZW5lcmF0b3IganVtcHMgYmFjayB0byBzb21ld2hlcmUKQEAgLTY3LDcgKzY3LDcg
QEAgcHVibGljOgogcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgdm9pZCBnZW5lcmF0ZUludGVybmFs
KFNwZWN1bGF0aXZlSklUKikgPSAwOwogICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBtX2xhYmVs
OwotICAgIE5vZGVJbmRleCBtX2NvbXBpbGVJbmRleDsKKyAgICBOb2RlKiBtX2N1cnJlbnROb2Rl
OwogfTsKIAogdGVtcGxhdGU8dHlwZW5hbWUgSnVtcFR5cGU+CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHJldmlzaW9uIDE0
MDkwNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTM5LDI5ICszOSwyOCBAQCBuYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIERGRyB7CiAKICNpZiBVU0UoSlNWQUxVRTY0KQogCi1HUFJSZWcgU3BlY3VsYXRpdmVK
SVQ6OmZpbGxJbnRlZ2VyKE5vZGVJbmRleCBub2RlSW5kZXgsIERhdGFGb3JtYXQmIHJldHVybkZv
cm1hdCkKK0dQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbEludGVnZXIoTm9kZSogbm9kZSwgRGF0
YUZvcm1hdCYgcmV0dXJuRm9ybWF0KQogewotICAgIE5vZGUmIG5vZGUgPSBhdChub2RlSW5kZXgp
OwotICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIgPSBub2RlLnZpcnR1YWxSZWdp
c3RlcigpOworICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIgPSBub2RlLT52aXJ0
dWFsUmVnaXN0ZXIoKTsKICAgICBHZW5lcmF0aW9uSW5mbyYgaW5mbyA9IG1fZ2VuZXJhdGlvbklu
Zm9bdmlydHVhbFJlZ2lzdGVyXTsKIAogICAgIGlmIChpbmZvLnJlZ2lzdGVyRm9ybWF0KCkgPT0g
RGF0YUZvcm1hdE5vbmUpIHsKICAgICAgICAgR1BSUmVnIGdwciA9IGFsbG9jYXRlKCk7CiAKLSAg
ICAgICAgaWYgKG5vZGUuaGFzQ29uc3RhbnQoKSkgeworICAgICAgICBpZiAobm9kZS0+aGFzQ29u
c3RhbnQoKSkgewogICAgICAgICAgICAgbV9ncHJzLnJldGFpbihncHIsIHZpcnR1YWxSZWdpc3Rl
ciwgU3BpbGxPcmRlckNvbnN0YW50KTsKLSAgICAgICAgICAgIGlmIChpc0ludDMyQ29uc3RhbnQo
bm9kZUluZGV4KSkgewotICAgICAgICAgICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6
OkltbTMyKHZhbHVlT2ZJbnQzMkNvbnN0YW50KG5vZGVJbmRleCkpLCBncHIpOworICAgICAgICAg
ICAgaWYgKGlzSW50MzJDb25zdGFudChub2RlKSkgeworICAgICAgICAgICAgICAgIG1faml0Lm1v
dmUoTWFjcm9Bc3NlbWJsZXI6OkltbTMyKHZhbHVlT2ZJbnQzMkNvbnN0YW50KG5vZGUpKSwgZ3By
KTsKICAgICAgICAgICAgICAgICBpbmZvLmZpbGxJbnRlZ2VyKCptX3N0cmVhbSwgZ3ByKTsKICAg
ICAgICAgICAgICAgICByZXR1cm5Gb3JtYXQgPSBEYXRhRm9ybWF0SW50ZWdlcjsKICAgICAgICAg
ICAgICAgICByZXR1cm4gZ3ByOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGlzTnVt
YmVyQ29uc3RhbnQobm9kZUluZGV4KSkgewotICAgICAgICAgICAgICAgIEpTVmFsdWUganNWYWx1
ZSA9IGpzTnVtYmVyKHZhbHVlT2ZOdW1iZXJDb25zdGFudChub2RlSW5kZXgpKTsKKyAgICAgICAg
ICAgIGlmIChpc051bWJlckNvbnN0YW50KG5vZGUpKSB7CisgICAgICAgICAgICAgICAgSlNWYWx1
ZSBqc1ZhbHVlID0ganNOdW1iZXIodmFsdWVPZk51bWJlckNvbnN0YW50KG5vZGUpKTsKICAgICAg
ICAgICAgICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpJbW02NChKU1ZhbHVlOjplbmNv
ZGUoanNWYWx1ZSkpLCBncHIpOwogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAg
ICBBU1NFUlQoaXNKU0NvbnN0YW50KG5vZGVJbmRleCkpOwotICAgICAgICAgICAgICAgIEpTVmFs
dWUganNWYWx1ZSA9IHZhbHVlT2ZKU0NvbnN0YW50KG5vZGVJbmRleCk7CisgICAgICAgICAgICAg
ICAgQVNTRVJUKGlzSlNDb25zdGFudChub2RlKSk7CisgICAgICAgICAgICAgICAgSlNWYWx1ZSBq
c1ZhbHVlID0gdmFsdWVPZkpTQ29uc3RhbnQobm9kZSk7CiAgICAgICAgICAgICAgICAgbV9qaXQu
bW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc1ZhbHVl
KSksIGdwcik7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSBpZiAoaW5mby5zcGlsbEZv
cm1hdCgpID09IERhdGFGb3JtYXRJbnRlZ2VyKSB7CkBAIC0xMTgsMjUgKzExNywyNCBAQCBHUFJS
ZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxJbnRlZ2VyKE5vZGVJCiAgICAgfQogfQogCi1GUFJSZWcg
U3BlY3VsYXRpdmVKSVQ6OmZpbGxEb3VibGUoTm9kZUluZGV4IG5vZGVJbmRleCkKK0ZQUlJlZyBT
cGVjdWxhdGl2ZUpJVDo6ZmlsbERvdWJsZShOb2RlKiBub2RlKQogewotICAgIE5vZGUmIG5vZGUg
PSBhdChub2RlSW5kZXgpOwotICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIgPSBu
b2RlLnZpcnR1YWxSZWdpc3RlcigpOworICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0
ZXIgPSBub2RlLT52aXJ0dWFsUmVnaXN0ZXIoKTsKICAgICBHZW5lcmF0aW9uSW5mbyYgaW5mbyA9
IG1fZ2VuZXJhdGlvbkluZm9bdmlydHVhbFJlZ2lzdGVyXTsKIAogICAgIGlmIChpbmZvLnJlZ2lz
dGVyRm9ybWF0KCkgPT0gRGF0YUZvcm1hdE5vbmUpIHsKLSAgICAgICAgaWYgKG5vZGUuaGFzQ29u
c3RhbnQoKSkgeworICAgICAgICBpZiAobm9kZS0+aGFzQ29uc3RhbnQoKSkgewogICAgICAgICAg
ICAgR1BSUmVnIGdwciA9IGFsbG9jYXRlKCk7CiAgICAgICAgIAotICAgICAgICAgICAgaWYgKGlz
SW50MzJDb25zdGFudChub2RlSW5kZXgpKSB7CisgICAgICAgICAgICBpZiAoaXNJbnQzMkNvbnN0
YW50KG5vZGUpKSB7CiAgICAgICAgICAgICAgICAgLy8gRklYTUU6IHNob3VsZCBub3QgYmUgcmVh
Y2hhYmxlPwotICAgICAgICAgICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OkltbTMy
KHZhbHVlT2ZJbnQzMkNvbnN0YW50KG5vZGVJbmRleCkpLCBncHIpOworICAgICAgICAgICAgICAg
IG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OkltbTMyKHZhbHVlT2ZJbnQzMkNvbnN0YW50KG5v
ZGUpKSwgZ3ByKTsKICAgICAgICAgICAgICAgICBtX2dwcnMucmV0YWluKGdwciwgdmlydHVhbFJl
Z2lzdGVyLCBTcGlsbE9yZGVyQ29uc3RhbnQpOwogICAgICAgICAgICAgICAgIGluZm8uZmlsbElu
dGVnZXIoKm1fc3RyZWFtLCBncHIpOwogICAgICAgICAgICAgICAgIHVubG9jayhncHIpOwotICAg
ICAgICAgICAgfSBlbHNlIGlmIChpc051bWJlckNvbnN0YW50KG5vZGVJbmRleCkpIHsKKyAgICAg
ICAgICAgIH0gZWxzZSBpZiAoaXNOdW1iZXJDb25zdGFudChub2RlKSkgewogICAgICAgICAgICAg
ICAgIEZQUlJlZyBmcHIgPSBmcHJBbGxvY2F0ZSgpOwotICAgICAgICAgICAgICAgIG1faml0Lm1v
dmUoTWFjcm9Bc3NlbWJsZXI6OkltbTY0KHJlaW50ZXJwcmV0RG91YmxlVG9JbnQ2NCh2YWx1ZU9m
TnVtYmVyQ29uc3RhbnQobm9kZUluZGV4KSkpLCBncHIpOworICAgICAgICAgICAgICAgIG1faml0
Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OkltbTY0KHJlaW50ZXJwcmV0RG91YmxlVG9JbnQ2NCh2YWx1
ZU9mTnVtYmVyQ29uc3RhbnQobm9kZSkpKSwgZ3ByKTsKICAgICAgICAgICAgICAgICBtX2ppdC5t
b3ZlNjRUb0RvdWJsZShncHIsIGZwcik7CiAgICAgICAgICAgICAgICAgdW5sb2NrKGdwcik7CiAK
QEAgLTE0NSw4ICsxNDMsOCBAQCBGUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxEb3VibGUoTm9k
ZUluCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZwcjsKICAgICAgICAgICAgIH0gZWxzZSB7CiAg
ICAgICAgICAgICAgICAgLy8gRklYTUU6IHNob3VsZCBub3QgYmUgcmVhY2hhYmxlPwotICAgICAg
ICAgICAgICAgIEFTU0VSVChpc0pTQ29uc3RhbnQobm9kZUluZGV4KSk7Ci0gICAgICAgICAgICAg
ICAgSlNWYWx1ZSBqc1ZhbHVlID0gdmFsdWVPZkpTQ29uc3RhbnQobm9kZUluZGV4KTsKKyAgICAg
ICAgICAgICAgICBBU1NFUlQoaXNKU0NvbnN0YW50KG5vZGUpKTsKKyAgICAgICAgICAgICAgICBK
U1ZhbHVlIGpzVmFsdWUgPSB2YWx1ZU9mSlNDb25zdGFudChub2RlKTsKICAgICAgICAgICAgICAg
ICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2Rl
KGpzVmFsdWUpKSwgZ3ByKTsKICAgICAgICAgICAgICAgICBtX2dwcnMucmV0YWluKGdwciwgdmly
dHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVyQ29uc3RhbnQpOwogICAgICAgICAgICAgICAgIGluZm8u
ZmlsbEpTVmFsdWUoKm1fc3RyZWFtLCBncHIsIERhdGFGb3JtYXRKUyk7CkBAIC0yNjgsMjggKzI2
NiwyNyBAQCBGUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxEb3VibGUoTm9kZUluCiAgICAgfQog
fQogCi1HUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxKU1ZhbHVlKE5vZGVJbmRleCBub2RlSW5k
ZXgpCitHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxKU1ZhbHVlKE5vZGUqIG5vZGUpCiB7Ci0g
ICAgTm9kZSYgbm9kZSA9IGF0KG5vZGVJbmRleCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1
YWxSZWdpc3RlciA9IG5vZGUudmlydHVhbFJlZ2lzdGVyKCk7CisgICAgVmlydHVhbFJlZ2lzdGVy
IHZpcnR1YWxSZWdpc3RlciA9IG5vZGUtPnZpcnR1YWxSZWdpc3RlcigpOwogICAgIEdlbmVyYXRp
b25JbmZvJiBpbmZvID0gbV9nZW5lcmF0aW9uSW5mb1t2aXJ0dWFsUmVnaXN0ZXJdOwogICAgIAog
ICAgIHN3aXRjaCAoaW5mby5yZWdpc3RlckZvcm1hdCgpKSB7CiAgICAgY2FzZSBEYXRhRm9ybWF0
Tm9uZTogewogICAgICAgICBHUFJSZWcgZ3ByID0gYWxsb2NhdGUoKTsKIAotICAgICAgICBpZiAo
bm9kZS5oYXNDb25zdGFudCgpKSB7Ci0gICAgICAgICAgICBpZiAoaXNJbnQzMkNvbnN0YW50KG5v
ZGVJbmRleCkpIHsKKyAgICAgICAgaWYgKG5vZGUtPmhhc0NvbnN0YW50KCkpIHsKKyAgICAgICAg
ICAgIGlmIChpc0ludDMyQ29uc3RhbnQobm9kZSkpIHsKICAgICAgICAgICAgICAgICBpbmZvLmZp
bGxKU1ZhbHVlKCptX3N0cmVhbSwgZ3ByLCBEYXRhRm9ybWF0SlNJbnRlZ2VyKTsKLSAgICAgICAg
ICAgICAgICBKU1ZhbHVlIGpzVmFsdWUgPSBqc051bWJlcih2YWx1ZU9mSW50MzJDb25zdGFudChu
b2RlSW5kZXgpKTsKKyAgICAgICAgICAgICAgICBKU1ZhbHVlIGpzVmFsdWUgPSBqc051bWJlcih2
YWx1ZU9mSW50MzJDb25zdGFudChub2RlKSk7CiAgICAgICAgICAgICAgICAgbV9qaXQubW92ZShN
YWNyb0Fzc2VtYmxlcjo6SW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzVmFsdWUpKSwgZ3ByKTsKLSAg
ICAgICAgICAgIH0gZWxzZSBpZiAoaXNOdW1iZXJDb25zdGFudChub2RlSW5kZXgpKSB7CisgICAg
ICAgICAgICB9IGVsc2UgaWYgKGlzTnVtYmVyQ29uc3RhbnQobm9kZSkpIHsKICAgICAgICAgICAg
ICAgICBpbmZvLmZpbGxKU1ZhbHVlKCptX3N0cmVhbSwgZ3ByLCBEYXRhRm9ybWF0SlNEb3VibGUp
OwotICAgICAgICAgICAgICAgIEpTVmFsdWUganNWYWx1ZShKU1ZhbHVlOjpFbmNvZGVBc0RvdWJs
ZSwgdmFsdWVPZk51bWJlckNvbnN0YW50KG5vZGVJbmRleCkpOworICAgICAgICAgICAgICAgIEpT
VmFsdWUganNWYWx1ZShKU1ZhbHVlOjpFbmNvZGVBc0RvdWJsZSwgdmFsdWVPZk51bWJlckNvbnN0
YW50KG5vZGUpKTsKICAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpJ
bW02NChKU1ZhbHVlOjplbmNvZGUoanNWYWx1ZSkpLCBncHIpOwogICAgICAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgICAgICBBU1NFUlQoaXNKU0NvbnN0YW50KG5vZGVJbmRleCkpOwotICAg
ICAgICAgICAgICAgIEpTVmFsdWUganNWYWx1ZSA9IHZhbHVlT2ZKU0NvbnN0YW50KG5vZGVJbmRl
eCk7CisgICAgICAgICAgICAgICAgQVNTRVJUKGlzSlNDb25zdGFudChub2RlKSk7CisgICAgICAg
ICAgICAgICAgSlNWYWx1ZSBqc1ZhbHVlID0gdmFsdWVPZkpTQ29uc3RhbnQobm9kZSk7CiAgICAg
ICAgICAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTY0KEpTVmFs
dWU6OmVuY29kZShqc1ZhbHVlKSksIGdwcik7CiAgICAgICAgICAgICAgICAgaW5mby5maWxsSlNW
YWx1ZSgqbV9zdHJlYW0sIGdwciwgRGF0YUZvcm1hdEpTKTsKICAgICAgICAgICAgIH0KQEAgLTM5
MSwyMSArMzg4LDIxIEBAIHByaXZhdGU6CiAgICAgR1BSUmVnIG1fanNWYWx1ZUdQUjsKIH07CiAK
LXZvaWQgU3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlVmFsdWVUb051bWJlcihOb2RlJiBu
b2RlKQordm9pZCBTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVWYWx1ZVRvTnVtYmVyKE5v
ZGUqIG5vZGUpCiB7Ci0gICAgaWYgKGlzS25vd25OdW1lcmljKG5vZGUuY2hpbGQxKCkuaW5kZXgo
KSkpIHsKLSAgICAgICAgSlNWYWx1ZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwor
ICAgIGlmIChpc0tub3duTnVtZXJpYyhub2RlLT5jaGlsZDEoKS5ub2RlKCkpKSB7CisgICAgICAg
IEpTVmFsdWVPcGVyYW5kIG9wMSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgIEdQUlRl
bXBvcmFyeSByZXN1bHQodGhpcywgb3AxKTsKICAgICAgICAgbV9qaXQubW92ZShvcDEuZ3ByKCks
IHJlc3VsdC5ncHIoKSk7Ci0gICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0LmdwcigpLCBtX2Nv
bXBpbGVJbmRleCk7CisgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0LmdwcigpLCBtX2N1cnJl
bnROb2RlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIEpTVmFsdWVPcGVyYW5kIG9w
MSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKKyAgICBKU1ZhbHVlT3BlcmFuZCBvcDEodGhpcywgbm9k
ZS0+Y2hpbGQxKCkpOwogICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CiAgICAgCi0gICAg
QVNTRVJUKCFpc0ludDMyQ29uc3RhbnQobm9kZS5jaGlsZDEoKS5pbmRleCgpKSk7Ci0gICAgQVNT
RVJUKCFpc051bWJlckNvbnN0YW50KG5vZGUuY2hpbGQxKCkuaW5kZXgoKSkpOworICAgIEFTU0VS
VCghaXNJbnQzMkNvbnN0YW50KG5vZGUtPmNoaWxkMSgpLm5vZGUoKSkpOworICAgIEFTU0VSVCgh
aXNOdW1iZXJDb25zdGFudChub2RlLT5jaGlsZDEoKS5ub2RlKCkpKTsKICAgICAKICAgICBHUFJS
ZWcganNWYWx1ZUdwciA9IG9wMS5ncHIoKTsKICAgICBHUFJSZWcgZ3ByID0gcmVzdWx0Lmdwcigp
OwpAQCAtNDI1LDI0ICs0MjIsMjQgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRp
dmVWYWx1ZQogICAgIAogICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKGFkb3B0UHRyKG5ldyBWYWx1
ZVRvTnVtYmVyU2xvd1BhdGhHZW5lcmF0b3Iobm9uTnVtZXJpYywgdGhpcywgZ3ByLCBqc1ZhbHVl
R3ByKSkpOwogICAgIAotICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0LmdwcigpLCBtX2NvbXBpbGVJ
bmRleCwgVXNlQ2hpbGRyZW5DYWxsZWRFeHBsaWNpdGx5KTsKKyAgICBqc1ZhbHVlUmVzdWx0KHJl
c3VsdC5ncHIoKSwgbV9jdXJyZW50Tm9kZSwgVXNlQ2hpbGRyZW5DYWxsZWRFeHBsaWNpdGx5KTsK
IH0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVWYWx1ZVRvSW50MzIoTm9k
ZSYgbm9kZSkKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlVmFsdWVUb0ludDMy
KE5vZGUqIG5vZGUpCiB7Ci0gICAgQVNTRVJUKCFpc0ludDMyQ29uc3RhbnQobm9kZS5jaGlsZDEo
KS5pbmRleCgpKSk7CisgICAgQVNTRVJUKCFpc0ludDMyQ29uc3RhbnQobm9kZS0+Y2hpbGQxKCku
bm9kZSgpKSk7CiAgICAgCi0gICAgaWYgKGlzS25vd25JbnRlZ2VyKG5vZGUuY2hpbGQxKCkuaW5k
ZXgoKSkpIHsKLSAgICAgICAgSW50ZWdlck9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKCkp
OworICAgIGlmIChpc0tub3duSW50ZWdlcihub2RlLT5jaGlsZDEoKS5ub2RlKCkpKSB7CisgICAg
ICAgIEludGVnZXJPcGVyYW5kIG9wMSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgIEdQ
UlRlbXBvcmFyeSByZXN1bHQodGhpcywgb3AxKTsKICAgICAgICAgbV9qaXQuemVyb0V4dGVuZDMy
VG9QdHIob3AxLmdwcigpLCByZXN1bHQuZ3ByKCkpOwotICAgICAgICBpbnRlZ2VyUmVzdWx0KHJl
c3VsdC5ncHIoKSwgbV9jb21waWxlSW5kZXgpOworICAgICAgICBpbnRlZ2VyUmVzdWx0KHJlc3Vs
dC5ncHIoKSwgbV9jdXJyZW50Tm9kZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCi0g
ICAgR2VuZXJhdGlvbkluZm8mIGNoaWxkSW5mbyA9IG1fZ2VuZXJhdGlvbkluZm9bYXQobm9kZS5j
aGlsZDEoKSkudmlydHVhbFJlZ2lzdGVyKCldOworICAgIEdlbmVyYXRpb25JbmZvJiBjaGlsZElu
Zm8gPSBtX2dlbmVyYXRpb25JbmZvW25vZGUtPmNoaWxkMSgpLT52aXJ0dWFsUmVnaXN0ZXIoKV07
CiAgICAgaWYgKGNoaWxkSW5mby5pc0pTRG91YmxlKCkpIHsKLSAgICAgICAgRG91YmxlT3BlcmFu
ZCBvcDEodGhpcywgbm9kZS5jaGlsZDEoKSk7CisgICAgICAgIERvdWJsZU9wZXJhbmQgb3AxKHRo
aXMsIG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsK
ICAgICAgICAgRlBSUmVnIGZwciA9IG9wMS5mcHIoKTsKICAgICAgICAgR1BSUmVnIGdwciA9IHJl
c3VsdC5ncHIoKTsKQEAgLTQ1MiwxMSArNDQ5LDExIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6Om5v
blNwZWN1bGF0aXZlVmFsdWUKICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCiAgICAgICAg
ICAgICBzbG93UGF0aENhbGwobm90VHJ1bmNhdGVkVG9JbnRlZ2VyLCB0aGlzLCB0b0ludDMyLCBn
cHIsIGZwcikpOwogCi0gICAgICAgIGludGVnZXJSZXN1bHQoZ3ByLCBtX2NvbXBpbGVJbmRleCwg
VXNlQ2hpbGRyZW5DYWxsZWRFeHBsaWNpdGx5KTsKKyAgICAgICAgaW50ZWdlclJlc3VsdChncHIs
IG1fY3VycmVudE5vZGUsIFVzZUNoaWxkcmVuQ2FsbGVkRXhwbGljaXRseSk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAgICAgCi0gICAgSlNWYWx1ZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hp
bGQxKCkpOworICAgIEpTVmFsdWVPcGVyYW5kIG9wMSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CiAg
ICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBvcDEpOwogICAgIEdQUlJlZyBqc1ZhbHVlR3By
ID0gb3AxLmdwcigpOwogICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CkBAIC00
NjksMTIgKzQ2NiwxMiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZVZhbHVl
CiAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCiAgICAgICAgIHNsb3dQYXRoQ2FsbChpc05vdElu
dGVnZXIsIHRoaXMsIGRmZ0NvbnZlcnRKU1ZhbHVlVG9JbnQzMiwgcmVzdWx0R1BSLCBqc1ZhbHVl
R3ByKSk7CiAKLSAgICBpbnRlZ2VyUmVzdWx0KHJlc3VsdEdQUiwgbV9jb21waWxlSW5kZXgsIFVz
ZUNoaWxkcmVuQ2FsbGVkRXhwbGljaXRseSk7CisgICAgaW50ZWdlclJlc3VsdChyZXN1bHRHUFIs
IG1fY3VycmVudE5vZGUsIFVzZUNoaWxkcmVuQ2FsbGVkRXhwbGljaXRseSk7CiB9CiAKLXZvaWQg
U3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlVUludDMyVG9OdW1iZXIoTm9kZSYgbm9kZSkK
K3ZvaWQgU3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlVUludDMyVG9OdW1iZXIoTm9kZSog
bm9kZSkKIHsKLSAgICBJbnRlZ2VyT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEoKSk7Cisg
ICAgSW50ZWdlck9wZXJhbmQgb3AxKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKICAgICBGUFJUZW1w
b3JhcnkgYm94ZXIodGhpcyk7CiAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBvcDEpOwog
ICAgIApAQCAtNDkzLDcgKzQ5MCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0
aXZlVUludDMKICAgICAKICAgICBkb25lLmxpbmsoJm1faml0KTsKICAgICAKLSAgICBqc1ZhbHVl
UmVzdWx0KHJlc3VsdC5ncHIoKSwgbV9jb21waWxlSW5kZXgpOworICAgIGpzVmFsdWVSZXN1bHQo
cmVzdWx0LmdwcigpLCBtX2N1cnJlbnROb2RlKTsKIH0KIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y2FjaGVkR2V0QnlJZChDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIEdQUlJlZyBiYXNlR1BSLCBHUFJS
ZWcgcmVzdWx0R1BSLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBKSVRDb21waWxlcjo6SnVt
cCBzbG93UGF0aFRhcmdldCwgU3BpbGxSZWdpc3RlcnNNb2RlIHNwaWxsTW9kZSkKQEAgLTU0NCw3
ICs1NDEsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjYWNoZWRQdXRCeUlkKENvZGVPCiAgICAg
SklUQ29tcGlsZXI6OkxhYmVsIGRvbmVMYWJlbCA9IG1faml0LmxhYmVsKCk7CiAgICAgCiAgICAg
Vl9ERkdPcGVyYXRpb25fRUpDSSBvcHRpbWl6ZWRDYWxsOwotICAgIGlmIChtX2ppdC5zdHJpY3RN
b2RlRm9yKGF0KG1fY29tcGlsZUluZGV4KS5jb2RlT3JpZ2luKSkgeworICAgIGlmIChtX2ppdC5z
dHJpY3RNb2RlRm9yKG1fY3VycmVudE5vZGUtPmNvZGVPcmlnaW4pKSB7CiAgICAgICAgIGlmIChw
dXRLaW5kID09IERpcmVjdCkKICAgICAgICAgICAgIG9wdGltaXplZENhbGwgPSBvcGVyYXRpb25Q
dXRCeUlkRGlyZWN0U3RyaWN0T3B0aW1pemU7CiAgICAgICAgIGVsc2UKQEAgLTYzMCwxNCArNjI3
LDEzIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlTm9uUGUKICAgICBub3RN
YXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsoJm1faml0KTsKICAKICAgICBtX2ppdC5vcjMyKFRy
dXN0ZWRJbW0zMihWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKLSAgICBqc1ZhbHVlUmVzdWx0KHJl
c3VsdEdQUiwgbV9jb21waWxlSW5kZXgsIERhdGFGb3JtYXRKU0Jvb2xlYW4pOworICAgIGpzVmFs
dWVSZXN1bHQocmVzdWx0R1BSLCBtX2N1cnJlbnROb2RlLCBEYXRhRm9ybWF0SlNCb29sZWFuKTsK
IH0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVQZWVwaG9sZUJyYW5jaE51
bGwoRWRnZSBvcGVyYW5kLCBOb2RlSW5kZXggYnJhbmNoTm9kZUluZGV4LCBib29sIGludmVydCkK
K3ZvaWQgU3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlUGVlcGhvbGVCcmFuY2hOdWxsKEVk
Z2Ugb3BlcmFuZCwgTm9kZSogYnJhbmNoTm9kZSwgYm9vbCBpbnZlcnQpCiB7Ci0gICAgTm9kZSYg
YnJhbmNoTm9kZSA9IGF0KGJyYW5jaE5vZGVJbmRleCk7Ci0gICAgQmxvY2tJbmRleCB0YWtlbiA9
IGJyYW5jaE5vZGUudGFrZW5CbG9ja0luZGV4KCk7Ci0gICAgQmxvY2tJbmRleCBub3RUYWtlbiA9
IGJyYW5jaE5vZGUubm90VGFrZW5CbG9ja0luZGV4KCk7CisgICAgQmxvY2tJbmRleCB0YWtlbiA9
IGJyYW5jaE5vZGUtPnRha2VuQmxvY2tJbmRleCgpOworICAgIEJsb2NrSW5kZXggbm90VGFrZW4g
PSBicmFuY2hOb2RlLT5ub3RUYWtlbkJsb2NrSW5kZXgoKTsKICAgICAKICAgICBpZiAodGFrZW4g
PT0gbmV4dEJsb2NrKCkpIHsKICAgICAgICAgaW52ZXJ0ID0gIWludmVydDsKQEAgLTY4NiwyMCAr
NjgyLDIwIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlUGVlcGgKICAgICBq
dW1wKG5vdFRha2VuKTsKIH0KIAotYm9vbCBTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVD
b21wYXJlTnVsbChOb2RlJiBub2RlLCBFZGdlIG9wZXJhbmQsIGJvb2wgaW52ZXJ0KQorYm9vbCBT
cGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVDb21wYXJlTnVsbChOb2RlKiBub2RlLCBFZGdl
IG9wZXJhbmQsIGJvb2wgaW52ZXJ0KQogewogICAgIHVuc2lnbmVkIGJyYW5jaEluZGV4SW5CbG9j
ayA9IGRldGVjdFBlZXBIb2xlQnJhbmNoKCk7CiAgICAgaWYgKGJyYW5jaEluZGV4SW5CbG9jayAh
PSBVSU5UX01BWCkgewotICAgICAgICBOb2RlSW5kZXggYnJhbmNoTm9kZUluZGV4ID0gbV9qaXQu
Z3JhcGgoKS5tX2Jsb2Nrc1ttX2Jsb2NrXS0+YXQoYnJhbmNoSW5kZXhJbkJsb2NrKTsKKyAgICAg
ICAgTm9kZSogYnJhbmNoTm9kZSA9IG1faml0LmdyYXBoKCkubV9ibG9ja3NbbV9ibG9ja10tPmF0
KGJyYW5jaEluZGV4SW5CbG9jayk7CiAKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQobm9kZS5hZGp1
c3RlZFJlZkNvdW50KCkgPT0gMSk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKG5vZGUtPmFkanVz
dGVkUmVmQ291bnQoKSA9PSAxKTsKICAgICAgICAgCi0gICAgICAgIG5vblNwZWN1bGF0aXZlUGVl
cGhvbGVCcmFuY2hOdWxsKG9wZXJhbmQsIGJyYW5jaE5vZGVJbmRleCwgaW52ZXJ0KTsKKyAgICAg
ICAgbm9uU3BlY3VsYXRpdmVQZWVwaG9sZUJyYW5jaE51bGwob3BlcmFuZCwgYnJhbmNoTm9kZSwg
aW52ZXJ0KTsKICAgICAKLSAgICAgICAgdXNlKG5vZGUuY2hpbGQxKCkpOwotICAgICAgICB1c2Uo
bm9kZS5jaGlsZDIoKSk7CisgICAgICAgIHVzZShub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIHVz
ZShub2RlLT5jaGlsZDIoKSk7CiAgICAgICAgIG1faW5kZXhJbkJsb2NrID0gYnJhbmNoSW5kZXhJ
bkJsb2NrOwotICAgICAgICBtX2NvbXBpbGVJbmRleCA9IGJyYW5jaE5vZGVJbmRleDsKKyAgICAg
ICAgbV9jdXJyZW50Tm9kZSA9IGJyYW5jaE5vZGU7CiAgICAgICAgIAogICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICB9CkBAIC03MDksMTEgKzcwNSwxMCBAQCBib29sIFNwZWN1bGF0aXZlSklUOjpu
b25TcGVjdWxhdGl2ZUNvbXBhCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIFNwZWN1bGF0
aXZlSklUOjpub25TcGVjdWxhdGl2ZVBlZXBob2xlQnJhbmNoKE5vZGUmIG5vZGUsIE5vZGVJbmRl
eCBicmFuY2hOb2RlSW5kZXgsIE1hY3JvQXNzZW1ibGVyOjpSZWxhdGlvbmFsQ29uZGl0aW9uIGNv
bmQsIFNfREZHT3BlcmF0aW9uX0VKSiBoZWxwZXJGdW5jdGlvbikKK3ZvaWQgU3BlY3VsYXRpdmVK
SVQ6Om5vblNwZWN1bGF0aXZlUGVlcGhvbGVCcmFuY2goTm9kZSogbm9kZSwgTm9kZSogYnJhbmNo
Tm9kZSwgTWFjcm9Bc3NlbWJsZXI6OlJlbGF0aW9uYWxDb25kaXRpb24gY29uZCwgU19ERkdPcGVy
YXRpb25fRUpKIGhlbHBlckZ1bmN0aW9uKQogewotICAgIE5vZGUmIGJyYW5jaE5vZGUgPSBhdChi
cmFuY2hOb2RlSW5kZXgpOwotICAgIEJsb2NrSW5kZXggdGFrZW4gPSBicmFuY2hOb2RlLnRha2Vu
QmxvY2tJbmRleCgpOwotICAgIEJsb2NrSW5kZXggbm90VGFrZW4gPSBicmFuY2hOb2RlLm5vdFRh
a2VuQmxvY2tJbmRleCgpOworICAgIEJsb2NrSW5kZXggdGFrZW4gPSBicmFuY2hOb2RlLT50YWtl
bkJsb2NrSW5kZXgoKTsKKyAgICBCbG9ja0luZGV4IG5vdFRha2VuID0gYnJhbmNoTm9kZS0+bm90
VGFrZW5CbG9ja0luZGV4KCk7CiAKICAgICBKSVRDb21waWxlcjo6UmVzdWx0Q29uZGl0aW9uIGNh
bGxSZXN1bHRDb25kaXRpb24gPSBKSVRDb21waWxlcjo6Tm9uWmVybzsKIApAQCAtNzI3LDE0ICs3
MjIsMTQgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVQZWVwaAogICAgICAg
ICBub3RUYWtlbiA9IHRtcDsKICAgICB9CiAKLSAgICBKU1ZhbHVlT3BlcmFuZCBhcmcxKHRoaXMs
IG5vZGUuY2hpbGQxKCkpOwotICAgIEpTVmFsdWVPcGVyYW5kIGFyZzIodGhpcywgbm9kZS5jaGls
ZDIoKSk7CisgICAgSlNWYWx1ZU9wZXJhbmQgYXJnMSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7Cisg
ICAgSlNWYWx1ZU9wZXJhbmQgYXJnMih0aGlzLCBub2RlLT5jaGlsZDIoKSk7CiAgICAgR1BSUmVn
IGFyZzFHUFIgPSBhcmcxLmdwcigpOwogICAgIEdQUlJlZyBhcmcyR1BSID0gYXJnMi5ncHIoKTsK
ICAgICAKICAgICBKSVRDb21waWxlcjo6SnVtcExpc3Qgc2xvd1BhdGg7CiAgICAgCi0gICAgaWYg
KGlzS25vd25Ob3RJbnRlZ2VyKG5vZGUuY2hpbGQxKCkuaW5kZXgoKSkgfHwgaXNLbm93bk5vdElu
dGVnZXIobm9kZS5jaGlsZDIoKS5pbmRleCgpKSkgeworICAgIGlmIChpc0tub3duTm90SW50ZWdl
cihub2RlLT5jaGlsZDEoKS5ub2RlKCkpIHx8IGlzS25vd25Ob3RJbnRlZ2VyKG5vZGUtPmNoaWxk
MigpLm5vZGUoKSkpIHsKICAgICAgICAgR1BSUmVzdWx0IHJlc3VsdCh0aGlzKTsKICAgICAgICAg
R1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKICAgICAKQEAgLTc1MiwxNCArNzQ3LDE0
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlUGVlcGgKICAgICAgICAgYXJn
MS51c2UoKTsKICAgICAgICAgYXJnMi51c2UoKTsKICAgICAKLSAgICAgICAgaWYgKCFpc0tub3du
SW50ZWdlcihub2RlLmNoaWxkMSgpLmluZGV4KCkpKQorICAgICAgICBpZiAoIWlzS25vd25JbnRl
Z2VyKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSkpCiAgICAgICAgICAgICBzbG93UGF0aC5hcHBlbmQo
bV9qaXQuYnJhbmNoNjQoTWFjcm9Bc3NlbWJsZXI6OkJlbG93LCBhcmcxR1BSLCBHUFJJbmZvOjp0
YWdUeXBlTnVtYmVyUmVnaXN0ZXIpKTsKLSAgICAgICAgaWYgKCFpc0tub3duSW50ZWdlcihub2Rl
LmNoaWxkMigpLmluZGV4KCkpKQorICAgICAgICBpZiAoIWlzS25vd25JbnRlZ2VyKG5vZGUtPmNo
aWxkMigpLm5vZGUoKSkpCiAgICAgICAgICAgICBzbG93UGF0aC5hcHBlbmQobV9qaXQuYnJhbmNo
NjQoTWFjcm9Bc3NlbWJsZXI6OkJlbG93LCBhcmcyR1BSLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVy
UmVnaXN0ZXIpKTsKICAgICAKICAgICAgICAgYnJhbmNoMzIoY29uZCwgYXJnMUdQUiwgYXJnMkdQ
UiwgdGFrZW4pOwogICAgIAotICAgICAgICBpZiAoIWlzS25vd25JbnRlZ2VyKG5vZGUuY2hpbGQx
KCkuaW5kZXgoKSkgfHwgIWlzS25vd25JbnRlZ2VyKG5vZGUuY2hpbGQyKCkuaW5kZXgoKSkpIHsK
KyAgICAgICAgaWYgKCFpc0tub3duSW50ZWdlcihub2RlLT5jaGlsZDEoKS5ub2RlKCkpIHx8ICFp
c0tub3duSW50ZWdlcihub2RlLT5jaGlsZDIoKS5ub2RlKCkpKSB7CiAgICAgICAgICAgICBqdW1w
KG5vdFRha2VuLCBGb3JjZUp1bXApOwogICAgIAogICAgICAgICAgICAgc2xvd1BhdGgubGluaygm
bV9qaXQpOwpAQCAtNzc1LDcgKzc3MCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1
bGF0aXZlUGVlcGgKICAgICBqdW1wKG5vdFRha2VuKTsKIAogICAgIG1faW5kZXhJbkJsb2NrID0g
bV9qaXQuZ3JhcGgoKS5tX2Jsb2Nrc1ttX2Jsb2NrXS0+c2l6ZSgpIC0gMTsKLSAgICBtX2NvbXBp
bGVJbmRleCA9IGJyYW5jaE5vZGVJbmRleDsKKyAgICBtX2N1cnJlbnROb2RlID0gYnJhbmhOb2Rl
OwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBKdW1wVHlwZT4KQEAgLTgwNywxNiArODAyLDE2IEBA
IHByaXZhdGU6CiAgICAgR1BSUmVnIG1fYXJnMjsKIH07CiAKLXZvaWQgU3BlY3VsYXRpdmVKSVQ6
Om5vblNwZWN1bGF0aXZlTm9uUGVlcGhvbGVDb21wYXJlKE5vZGUmIG5vZGUsIE1hY3JvQXNzZW1i
bGVyOjpSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmQsIFNfREZHT3BlcmF0aW9uX0VKSiBoZWxwZXJG
dW5jdGlvbikKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlTm9uUGVlcGhvbGVD
b21wYXJlKE5vZGUqIG5vZGUsIE1hY3JvQXNzZW1ibGVyOjpSZWxhdGlvbmFsQ29uZGl0aW9uIGNv
bmQsIFNfREZHT3BlcmF0aW9uX0VKSiBoZWxwZXJGdW5jdGlvbikKIHsKLSAgICBKU1ZhbHVlT3Bl
cmFuZCBhcmcxKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwotICAgIEpTVmFsdWVPcGVyYW5kIGFyZzIo
dGhpcywgbm9kZS5jaGlsZDIoKSk7CisgICAgSlNWYWx1ZU9wZXJhbmQgYXJnMSh0aGlzLCBub2Rl
LT5jaGlsZDEoKSk7CisgICAgSlNWYWx1ZU9wZXJhbmQgYXJnMih0aGlzLCBub2RlLT5jaGlsZDIo
KSk7CiAgICAgR1BSUmVnIGFyZzFHUFIgPSBhcmcxLmdwcigpOwogICAgIEdQUlJlZyBhcmcyR1BS
ID0gYXJnMi5ncHIoKTsKICAgICAKICAgICBKSVRDb21waWxlcjo6SnVtcExpc3Qgc2xvd1BhdGg7
CiAgICAgCi0gICAgaWYgKGlzS25vd25Ob3RJbnRlZ2VyKG5vZGUuY2hpbGQxKCkuaW5kZXgoKSkg
fHwgaXNLbm93bk5vdEludGVnZXIobm9kZS5jaGlsZDIoKS5pbmRleCgpKSkgeworICAgIGlmIChp
c0tub3duTm90SW50ZWdlcihub2RlLT5jaGlsZDEoKS5ub2RlKCkpIHx8IGlzS25vd25Ob3RJbnRl
Z2VyKG5vZGUtPmNoaWxkMigpLm5vZGUoKSkpIHsKICAgICAgICAgR1BSUmVzdWx0IHJlc3VsdCh0
aGlzKTsKICAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKICAgICAKQEAg
LTgyNyw3ICs4MjIsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZU5vblBl
CiAgICAgICAgIGNhbGxPcGVyYXRpb24oaGVscGVyRnVuY3Rpb24sIHJlc3VsdEdQUiwgYXJnMUdQ
UiwgYXJnMkdQUik7CiAgICAgICAgIAogICAgICAgICBtX2ppdC5vcjMyKFRydXN0ZWRJbW0zMihW
YWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKLSAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRHUFIs
IG1fY29tcGlsZUluZGV4LCBEYXRhRm9ybWF0SlNCb29sZWFuLCBVc2VDaGlsZHJlbkNhbGxlZEV4
cGxpY2l0bHkpOworICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdEdQUiwgbV9jdXJyZW50Tm9k
ZSwgRGF0YUZvcm1hdEpTQm9vbGVhbiwgVXNlQ2hpbGRyZW5DYWxsZWRFeHBsaWNpdGx5KTsKICAg
ICB9IGVsc2UgewogICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIGFyZzIpOwogICAg
ICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwpAQCAtODM1LDI5ICs4MzAsMjgg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVOb25QZQogICAgICAgICBhcmcx
LnVzZSgpOwogICAgICAgICBhcmcyLnVzZSgpOwogICAgIAotICAgICAgICBpZiAoIWlzS25vd25J
bnRlZ2VyKG5vZGUuY2hpbGQxKCkuaW5kZXgoKSkpCisgICAgICAgIGlmICghaXNLbm93bkludGVn
ZXIobm9kZS0+Y2hpbGQxKCkubm9kZSgpKSkKICAgICAgICAgICAgIHNsb3dQYXRoLmFwcGVuZCht
X2ppdC5icmFuY2g2NChNYWNyb0Fzc2VtYmxlcjo6QmVsb3csIGFyZzFHUFIsIEdQUkluZm86OnRh
Z1R5cGVOdW1iZXJSZWdpc3RlcikpOwotICAgICAgICBpZiAoIWlzS25vd25JbnRlZ2VyKG5vZGUu
Y2hpbGQyKCkuaW5kZXgoKSkpCisgICAgICAgIGlmICghaXNLbm93bkludGVnZXIobm9kZS0+Y2hp
bGQyKCkubm9kZSgpKSkKICAgICAgICAgICAgIHNsb3dQYXRoLmFwcGVuZChtX2ppdC5icmFuY2g2
NChNYWNyb0Fzc2VtYmxlcjo6QmVsb3csIGFyZzJHUFIsIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJS
ZWdpc3RlcikpOwogICAgIAogICAgICAgICBtX2ppdC5jb21wYXJlMzIoY29uZCwgYXJnMUdQUiwg
YXJnMkdQUiwgcmVzdWx0R1BSKTsKICAgICAgICAgbV9qaXQub3IzMihUcnVzdGVkSW1tMzIoVmFs
dWVGYWxzZSksIHJlc3VsdEdQUik7CiAgICAgICAgIAotICAgICAgICBpZiAoIWlzS25vd25JbnRl
Z2VyKG5vZGUuY2hpbGQxKCkuaW5kZXgoKSkgfHwgIWlzS25vd25JbnRlZ2VyKG5vZGUuY2hpbGQy
KCkuaW5kZXgoKSkpIHsKKyAgICAgICAgaWYgKCFpc0tub3duSW50ZWdlcihub2RlLT5jaGlsZDEo
KS5ub2RlKCkpIHx8ICFpc0tub3duSW50ZWdlcihub2RlLT5jaGlsZDIoKS5ub2RlKCkpKSB7CiAg
ICAgICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcihhZG9wdFB0cigKICAgICAgICAgICAgICAg
ICBuZXcgQ29tcGFyZUFuZEJveEJvb2xlYW5TbG93UGF0aEdlbmVyYXRvcjxKSVRDb21waWxlcjo6
SnVtcExpc3Q+KAogICAgICAgICAgICAgICAgICAgICBzbG93UGF0aCwgdGhpcywgaGVscGVyRnVu
Y3Rpb24sIHJlc3VsdEdQUiwgYXJnMUdQUiwgYXJnMkdQUikpKTsKICAgICAgICAgfQogCi0gICAg
ICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0R1BSLCBtX2NvbXBpbGVJbmRleCwgRGF0YUZvcm1hdEpT
Qm9vbGVhbiwgVXNlQ2hpbGRyZW5DYWxsZWRFeHBsaWNpdGx5KTsKKyAgICAgICAganNWYWx1ZVJl
c3VsdChyZXN1bHRHUFIsIG1fY3VycmVudE5vZGUsIERhdGFGb3JtYXRKU0Jvb2xlYW4sIFVzZUNo
aWxkcmVuQ2FsbGVkRXhwbGljaXRseSk7CiAgICAgfQogfQogCi12b2lkIFNwZWN1bGF0aXZlSklU
Ojpub25TcGVjdWxhdGl2ZVBlZXBob2xlU3RyaWN0RXEoTm9kZSYgbm9kZSwgTm9kZUluZGV4IGJy
YW5jaE5vZGVJbmRleCwgYm9vbCBpbnZlcnQpCit2b2lkIFNwZWN1bGF0aXZlSklUOjpub25TcGVj
dWxhdGl2ZVBlZXBob2xlU3RyaWN0RXEoTm9kZSogbm9kZSwgTm9kZSogYnJhbmNoTm9kZSwgYm9v
bCBpbnZlcnQpCiB7Ci0gICAgTm9kZSYgYnJhbmNoTm9kZSA9IGF0KGJyYW5jaE5vZGVJbmRleCk7
Ci0gICAgQmxvY2tJbmRleCB0YWtlbiA9IGJyYW5jaE5vZGUudGFrZW5CbG9ja0luZGV4KCk7Ci0g
ICAgQmxvY2tJbmRleCBub3RUYWtlbiA9IGJyYW5jaE5vZGUubm90VGFrZW5CbG9ja0luZGV4KCk7
CisgICAgQmxvY2tJbmRleCB0YWtlbiA9IGJyYW5jaE5vZGUtPnRha2VuQmxvY2tJbmRleCgpOwor
ICAgIEJsb2NrSW5kZXggbm90VGFrZW4gPSBicmFuY2hOb2RlLT5ub3RUYWtlbkJsb2NrSW5kZXgo
KTsKIAogICAgIC8vIFRoZSBicmFuY2ggaW5zdHJ1Y3Rpb24gd2lsbCBicmFuY2ggdG8gdGhlIHRh
a2VuIGJsb2NrLgogICAgIC8vIElmIHRha2VuIGlzIG5leHQsIHN3aXRjaCB0YWtlbiB3aXRoIG5v
dFRha2VuICYgaW52ZXJ0IHRoZSBicmFuY2ggY29uZGl0aW9uIHNvIHdlIGNhbiBmYWxsIHRocm91
Z2guCkBAIC04NjgsOCArODYyLDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRp
dmVQZWVwaAogICAgICAgICBub3RUYWtlbiA9IHRtcDsKICAgICB9CiAgICAgCi0gICAgSlNWYWx1
ZU9wZXJhbmQgYXJnMSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKLSAgICBKU1ZhbHVlT3BlcmFuZCBh
cmcyKHRoaXMsIG5vZGUuY2hpbGQyKCkpOworICAgIEpTVmFsdWVPcGVyYW5kIGFyZzEodGhpcywg
bm9kZS0+Y2hpbGQxKCkpOworICAgIEpTVmFsdWVPcGVyYW5kIGFyZzIodGhpcywgbm9kZS0+Y2hp
bGQyKCkpOwogICAgIEdQUlJlZyBhcmcxR1BSID0gYXJnMS5ncHIoKTsKICAgICBHUFJSZWcgYXJn
MkdQUiA9IGFyZzIuZ3ByKCk7CiAgICAgCkBAIC04NzksNyArODczLDcgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVQZWVwaAogICAgIGFyZzEudXNlKCk7CiAgICAgYXJnMi51
c2UoKTsKICAgICAKLSAgICBpZiAoaXNLbm93bkNlbGwobm9kZS5jaGlsZDEoKS5pbmRleCgpKSAm
JiBpc0tub3duQ2VsbChub2RlLmNoaWxkMigpLmluZGV4KCkpKSB7CisgICAgaWYgKGlzS25vd25D
ZWxsKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSkgJiYgaXNLbm93bkNlbGwobm9kZS0+Y2hpbGQyKCku
bm9kZSgpKSkgewogICAgICAgICAvLyBzZWUgaWYgd2UgZ2V0IGx1Y2t5OiBpZiB0aGUgYXJndW1l
bnRzIGFyZSBjZWxscyBhbmQgdGhleSByZWZlcmVuY2UgdGhlIHNhbWUKICAgICAgICAgLy8gY2Vs
bCwgdGhlbiB0aGV5IG11c3QgYmUgc3RyaWN0bHkgZXF1YWwuCiAgICAgICAgIGJyYW5jaDY0KEpJ
VENvbXBpbGVyOjpFcXVhbCwgYXJnMUdQUiwgYXJnMkdQUiwgaW52ZXJ0ID8gbm90VGFrZW4gOiB0
YWtlbik7CkBAIC05MjAsMTAgKzkxNCwxMCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpub25TcGVj
dWxhdGl2ZVBlZXBoCiAgICAganVtcChub3RUYWtlbik7CiB9CiAKLXZvaWQgU3BlY3VsYXRpdmVK
SVQ6Om5vblNwZWN1bGF0aXZlTm9uUGVlcGhvbGVTdHJpY3RFcShOb2RlJiBub2RlLCBib29sIGlu
dmVydCkKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlTm9uUGVlcGhvbGVTdHJp
Y3RFcShOb2RlKiBub2RlLCBib29sIGludmVydCkKIHsKLSAgICBKU1ZhbHVlT3BlcmFuZCBhcmcx
KHRoaXMsIG5vZGUuY2hpbGQxKCkpOwotICAgIEpTVmFsdWVPcGVyYW5kIGFyZzIodGhpcywgbm9k
ZS5jaGlsZDIoKSk7CisgICAgSlNWYWx1ZU9wZXJhbmQgYXJnMSh0aGlzLCBub2RlLT5jaGlsZDEo
KSk7CisgICAgSlNWYWx1ZU9wZXJhbmQgYXJnMih0aGlzLCBub2RlLT5jaGlsZDIoKSk7CiAgICAg
R1BSUmVnIGFyZzFHUFIgPSBhcmcxLmdwcigpOwogICAgIEdQUlJlZyBhcmcyR1BSID0gYXJnMi5n
cHIoKTsKICAgICAKQEAgLTkzMyw3ICs5MjcsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpub25T
cGVjdWxhdGl2ZU5vblBlCiAgICAgYXJnMS51c2UoKTsKICAgICBhcmcyLnVzZSgpOwogICAgIAot
ICAgIGlmIChpc0tub3duQ2VsbChub2RlLmNoaWxkMSgpLmluZGV4KCkpICYmIGlzS25vd25DZWxs
KG5vZGUuY2hpbGQyKCkuaW5kZXgoKSkpIHsKKyAgICBpZiAoaXNLbm93bkNlbGwobm9kZS0+Y2hp
bGQxKCkubm9kZSgpKSAmJiBpc0tub3duQ2VsbChub2RlLT5jaGlsZDIoKS5ub2RlKCkpKSB7CiAg
ICAgICAgIC8vIHNlZSBpZiB3ZSBnZXQgbHVja3k6IGlmIHRoZSBhcmd1bWVudHMgYXJlIGNlbGxz
IGFuZCB0aGV5IHJlZmVyZW5jZSB0aGUgc2FtZQogICAgICAgICAvLyBjZWxsLCB0aGVuIHRoZXkg
bXVzdCBiZSBzdHJpY3RseSBlcXVhbC4KICAgICAgICAgLy8gRklYTUU6IHRoaXMgc2hvdWxkIGZs
dXNoIHJlZ2lzdGVycyBpbnN0ZWFkIG9mIHNpbGVudCBzcGlsbC9maWxsLgpAQCAtOTg2LDM1ICs5
ODAsMzUgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVOb25QZQogICAgICAg
ICBkb25lLmxpbmsoJm1faml0KTsKICAgICB9CiAgICAgCi0gICAganNWYWx1ZVJlc3VsdChyZXN1
bHRHUFIsIG1fY29tcGlsZUluZGV4LCBEYXRhRm9ybWF0SlNCb29sZWFuLCBVc2VDaGlsZHJlbkNh
bGxlZEV4cGxpY2l0bHkpOworICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0R1BSLCBtX2N1cnJlbnRO
b2RlLCBEYXRhRm9ybWF0SlNCb29sZWFuLCBVc2VDaGlsZHJlbkNhbGxlZEV4cGxpY2l0bHkpOwog
fQogCi12b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbChOb2RlJiBub2RlKQordm9pZCBTcGVj
dWxhdGl2ZUpJVDo6ZW1pdENhbGwoTm9kZSogbm9kZSkKIHsKLSAgICBpZiAobm9kZS5vcCgpICE9
IENhbGwpCi0gICAgICAgIFJFTEVBU0VfQVNTRVJUKG5vZGUub3AoKSA9PSBDb25zdHJ1Y3QpOwor
ICAgIGlmIChub2RlLT5vcCgpICE9IENhbGwpCisgICAgICAgIFJFTEVBU0VfQVNTRVJUKG5vZGUt
Pm9wKCkgPT0gQ29uc3RydWN0KTsKIAogICAgIC8vIEZvciBjb25zdHJ1Y3RvcnMsIHRoZSB0aGlz
IGFyZ3VtZW50IGlzIG5vdCBwYXNzZWQgYnV0IHdlIGhhdmUgdG8gbWFrZSBzcGFjZQogICAgIC8v
IGZvciBpdC4KLSAgICBpbnQgZHVtbXlUaGlzQXJndW1lbnQgPSBub2RlLm9wKCkgPT0gQ2FsbCA/
IDAgOiAxOworICAgIGludCBkdW1teVRoaXNBcmd1bWVudCA9IG5vZGUtPm9wKCkgPT0gQ2FsbCA/
IDAgOiAxOwogICAgIAotICAgIENhbGxMaW5rSW5mbzo6Q2FsbFR5cGUgY2FsbFR5cGUgPSBub2Rl
Lm9wKCkgPT0gQ2FsbCA/IENhbGxMaW5rSW5mbzo6Q2FsbCA6IENhbGxMaW5rSW5mbzo6Q29uc3Ry
dWN0OworICAgIENhbGxMaW5rSW5mbzo6Q2FsbFR5cGUgY2FsbFR5cGUgPSBub2RlLT5vcCgpID09
IENhbGwgPyBDYWxsTGlua0luZm86OkNhbGwgOiBDYWxsTGlua0luZm86OkNvbnN0cnVjdDsKICAg
ICAKLSAgICBFZGdlIGNhbGxlZUVkZ2UgPSBtX2ppdC5ncmFwaCgpLm1fdmFyQXJnQ2hpbGRyZW5b
bm9kZS5maXJzdENoaWxkKCldOworICAgIEVkZ2UgY2FsbGVlRWRnZSA9IG1faml0LmdyYXBoKCku
bV92YXJBcmdDaGlsZHJlbltub2RlLT5maXJzdENoaWxkKCldOwogICAgIEpTVmFsdWVPcGVyYW5k
IGNhbGxlZSh0aGlzLCBjYWxsZWVFZGdlKTsKICAgICBHUFJSZWcgY2FsbGVlR1BSID0gY2FsbGVl
LmdwcigpOwogICAgIHVzZShjYWxsZWVFZGdlKTsKICAgICAKICAgICAvLyBUaGUgY2FsbCBpbnN0
cnVjdGlvbidzIGZpcnN0IGNoaWxkIGlzIHRoZSBmdW5jdGlvbjsgdGhlIHN1YnNlcXVlbnQgY2hp
bGRyZW4gYXJlIHRoZQogICAgIC8vIGFyZ3VtZW50cy4KLSAgICBpbnQgbnVtUGFzc2VkQXJncyA9
IG5vZGUubnVtQ2hpbGRyZW4oKSAtIDE7CisgICAgaW50IG51bVBhc3NlZEFyZ3MgPSBub2RlLT5u
dW1DaGlsZHJlbigpIC0gMTsKICAgICAKICAgICBtX2ppdC5zdG9yZTMyKE1hY3JvQXNzZW1ibGVy
OjpUcnVzdGVkSW1tMzIobnVtUGFzc2VkQXJncyArIGR1bW15VGhpc0FyZ3VtZW50KSwgY2FsbEZy
YW1lUGF5bG9hZFNsb3QoSlNTdGFjazo6QXJndW1lbnRDb3VudCkpOwogICAgIG1faml0LnN0b3Jl
NjQoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIGNhbGxGcmFtZVNsb3QoSlNTdGFjazo6Q2Fs
bGVyRnJhbWUpKTsKICAgICBtX2ppdC5zdG9yZTY0KGNhbGxlZUdQUiwgY2FsbEZyYW1lU2xvdChK
U1N0YWNrOjpDYWxsZWUpKTsKICAgICAKICAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bVBhc3Nl
ZEFyZ3M7IGkrKykgewotICAgICAgICBFZGdlIGFyZ0VkZ2UgPSBtX2ppdC5ncmFwaCgpLm1fdmFy
QXJnQ2hpbGRyZW5bbm9kZS5maXJzdENoaWxkKCkgKyAxICsgaV07CisgICAgICAgIEVkZ2UgYXJn
RWRnZSA9IG1faml0LmdyYXBoKCkubV92YXJBcmdDaGlsZHJlbltub2RlLT5maXJzdENoaWxkKCkg
KyAxICsgaV07CiAgICAgICAgIEpTVmFsdWVPcGVyYW5kIGFyZyh0aGlzLCBhcmdFZGdlKTsKICAg
ICAgICAgR1BSUmVnIGFyZ0dQUiA9IGFyZy5ncHIoKTsKICAgICAgICAgdXNlKGFyZ0VkZ2UpOwpA
QCAtMTAzMSw3ICsxMDI1LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwoTm9kZSYg
bm9kZQogICAgIEpJVENvbXBpbGVyOjpKdW1wTGlzdCBzbG93UGF0aDsKIAogICAgIENhbGxCZWdp
blRva2VuIHRva2VuOwotICAgIG1faml0LmJlZ2luQ2FsbChub2RlLmNvZGVPcmlnaW4sIHRva2Vu
KTsKKyAgICBtX2ppdC5iZWdpbkNhbGwobm9kZS0+Y29kZU9yaWdpbiwgdG9rZW4pOwogICAgIAog
ICAgIG1faml0LmFkZFB0cihUcnVzdGVkSW1tMzIobV9qaXQuY29kZUJsb2NrKCktPm1fbnVtQ2Fs
bGVlUmVnaXN0ZXJzICogc2l6ZW9mKFJlZ2lzdGVyKSksIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lz
dGVyKTsKICAgICAKQEAgLTEwNDAsNyArMTAzNCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVt
aXRDYWxsKE5vZGUmIG5vZGUKICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKGNhbGxlZUdQUiwgT0JKRUNUX09GRlNFVE9GKEpTRnVuY3Rpb24sIG1fc2NvcGUpKSwgcmVz
dWx0R1BSKTsKICAgICBtX2ppdC5zdG9yZTY0KHJlc3VsdEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIHN0YXRpY19jYXN0PHB0cmRpZmZfdD4o
c2l6ZW9mKFJlZ2lzdGVyKSkgKiBKU1N0YWNrOjpTY29wZUNoYWluKSk7CiAKLSAgICBDb2RlT3Jp
Z2luIGNvZGVPcmlnaW4gPSBhdChtX2NvbXBpbGVJbmRleCkuY29kZU9yaWdpbjsKKyAgICBDb2Rl
T3JpZ2luIGNvZGVPcmlnaW4gPSBtX2N1cnJlbnROb2RlLT5jb2RlT3JpZ2luOwogICAgIEpJVENv
bXBpbGVyOjpDYWxsIGZhc3RDYWxsID0gbV9qaXQubmVhckNhbGwoKTsKICAgICBtX2ppdC5ub3Rp
ZnlDYWxsKGZhc3RDYWxsLCBjb2RlT3JpZ2luLCB0b2tlbik7CiAgICAgCkBAIC0xMDU3LDM2ICsx
MDUxLDM1IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKE5vZGUmIG5vZGUKICAgICAK
ICAgICBtX2ppdC5tb3ZlKEdQUkluZm86OnJldHVyblZhbHVlR1BSLCByZXN1bHRHUFIpOwogICAg
IAotICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0R1BSLCBtX2NvbXBpbGVJbmRleCwgRGF0YUZvcm1h
dEpTLCBVc2VDaGlsZHJlbkNhbGxlZEV4cGxpY2l0bHkpOworICAgIGpzVmFsdWVSZXN1bHQocmVz
dWx0R1BSLCBtX2N1cnJlbnROb2RlLCBEYXRhRm9ybWF0SlMsIFVzZUNoaWxkcmVuQ2FsbGVkRXhw
bGljaXRseSk7CiAgICAgCi0gICAgbV9qaXQuYWRkSlNDYWxsKGZhc3RDYWxsLCBzbG93Q2FsbCwg
dGFyZ2V0VG9DaGVjaywgY2FsbFR5cGUsIGNhbGxlZUdQUiwgYXQobV9jb21waWxlSW5kZXgpLmNv
ZGVPcmlnaW4pOworICAgIG1faml0LmFkZEpTQ2FsbChmYXN0Q2FsbCwgc2xvd0NhbGwsIHRhcmdl
dFRvQ2hlY2ssIGNhbGxUeXBlLCBjYWxsZWVHUFIsIG1fY3VycmVudE5vZGUtPmNvZGVPcmlnaW4p
OwogfQogCiB0ZW1wbGF0ZTxib29sIHN0cmljdD4KLUdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6Zmls
bFNwZWN1bGF0ZUludEludGVybmFsKE5vZGVJbmRleCBub2RlSW5kZXgsIERhdGFGb3JtYXQmIHJl
dHVybkZvcm1hdCwgU3BlY3VsYXRpb25EaXJlY3Rpb24gZGlyZWN0aW9uKQorR1BSUmVnIFNwZWN1
bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlSW50SW50ZXJuYWwoTm9kZSogbm9kZSwgRGF0YUZvcm1h
dCYgcmV0dXJuRm9ybWF0LCBTcGVjdWxhdGlvbkRpcmVjdGlvbiBkaXJlY3Rpb24pCiB7CiAjaWYg
REZHX0VOQUJMRShERUJVR19WRVJCT1NFKQotICAgIGRhdGFMb2dGKCJTcGVjSW50QCVkICAgIiwg
bm9kZUluZGV4KTsKKyAgICBkYXRhTG9nRigiU3BlY0ludEAlZCAgICIsIG5vZGUtPmluZGV4KCkp
OwogI2VuZGlmCi0gICAgU3BlY3VsYXRlZFR5cGUgdHlwZSA9IG1fc3RhdGUuZm9yTm9kZShub2Rl
SW5kZXgpLm1fdHlwZTsKLSAgICBOb2RlJiBub2RlID0gYXQobm9kZUluZGV4KTsKLSAgICBWaXJ0
dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyID0gbm9kZS52aXJ0dWFsUmVnaXN0ZXIoKTsKKyAg
ICBTcGVjdWxhdGVkVHlwZSB0eXBlID0gbV9zdGF0ZS5mb3JOb2RlKG5vZGUpLm1fdHlwZTsKKyAg
ICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyID0gbm9kZS0+dmlydHVhbFJlZ2lzdGVy
KCk7CiAgICAgR2VuZXJhdGlvbkluZm8mIGluZm8gPSBtX2dlbmVyYXRpb25JbmZvW3ZpcnR1YWxS
ZWdpc3Rlcl07CiAKICAgICBzd2l0Y2ggKGluZm8ucmVnaXN0ZXJGb3JtYXQoKSkgewogICAgIGNh
c2UgRGF0YUZvcm1hdE5vbmU6IHsKLSAgICAgICAgaWYgKChub2RlLmhhc0NvbnN0YW50KCkgJiYg
IWlzSW50MzJDb25zdGFudChub2RlSW5kZXgpKSB8fCBpbmZvLnNwaWxsRm9ybWF0KCkgPT0gRGF0
YUZvcm1hdERvdWJsZSkgewotICAgICAgICAgICAgdGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRp
b24oVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgZGlyZWN0aW9uKTsKKyAgICAg
ICAgaWYgKChub2RlLT5oYXNDb25zdGFudCgpICYmICFpc0ludDMyQ29uc3RhbnQobm9kZSkpIHx8
IGluZm8uc3BpbGxGb3JtYXQoKSA9PSBEYXRhRm9ybWF0RG91YmxlKSB7CisgICAgICAgICAgICB0
ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwg
MCwgZGlyZWN0aW9uKTsKICAgICAgICAgICAgIHJldHVybkZvcm1hdCA9IERhdGFGb3JtYXRJbnRl
Z2VyOwogICAgICAgICAgICAgcmV0dXJuIGFsbG9jYXRlKCk7CiAgICAgICAgIH0KICAgICAgICAg
CiAgICAgICAgIEdQUlJlZyBncHIgPSBhbGxvY2F0ZSgpOwogCi0gICAgICAgIGlmIChub2RlLmhh
c0NvbnN0YW50KCkpIHsKKyAgICAgICAgaWYgKG5vZGUtPmhhc0NvbnN0YW50KCkpIHsKICAgICAg
ICAgICAgIG1fZ3Bycy5yZXRhaW4oZ3ByLCB2aXJ0dWFsUmVnaXN0ZXIsIFNwaWxsT3JkZXJDb25z
dGFudCk7Ci0gICAgICAgICAgICBBU1NFUlQoaXNJbnQzMkNvbnN0YW50KG5vZGVJbmRleCkpOwot
ICAgICAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6SW1tMzIodmFsdWVPZkludDMy
Q29uc3RhbnQobm9kZUluZGV4KSksIGdwcik7CisgICAgICAgICAgICBBU1NFUlQoaXNJbnQzMkNv
bnN0YW50KG5vZGUpKTsKKyAgICAgICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6Oklt
bTMyKHZhbHVlT2ZJbnQzMkNvbnN0YW50KG5vZGUpKSwgZ3ByKTsKICAgICAgICAgICAgIGluZm8u
ZmlsbEludGVnZXIoKm1fc3RyZWFtLCBncHIpOwogICAgICAgICAgICAgcmV0dXJuRm9ybWF0ID0g
RGF0YUZvcm1hdEludGVnZXI7CiAgICAgICAgICAgICByZXR1cm4gZ3ByOwpAQCAtMTEyNyw3ICsx
MTIwLDcgQEAgR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlSW50SQogICAgICAg
ICBHUFJSZWcgZ3ByID0gaW5mby5ncHIoKTsKICAgICAgICAgbV9ncHJzLmxvY2soZ3ByKTsKICAg
ICAgICAgaWYgKCFpc0ludDMyU3BlY3VsYXRpb24odHlwZSkpCi0gICAgICAgICAgICBzcGVjdWxh
dGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKGdwciksIG5vZGVJbmRleCwgbV9qaXQuYnJh
bmNoNjQoTWFjcm9Bc3NlbWJsZXI6OkJlbG93LCBncHIsIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJS
ZWdpc3RlciksIGRpcmVjdGlvbik7CisgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5
cGUsIEpTVmFsdWVSZWdzKGdwciksIG5vZGUsIG1faml0LmJyYW5jaDY0KE1hY3JvQXNzZW1ibGVy
OjpCZWxvdywgZ3ByLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpLCBkaXJlY3Rpb24p
OwogICAgICAgICBpbmZvLmZpbGxKU1ZhbHVlKCptX3N0cmVhbSwgZ3ByLCBEYXRhRm9ybWF0SlNJ
bnRlZ2VyKTsKICAgICAgICAgLy8gSWYgIXN0cmljdCB3ZSdyZSBkb25lLCByZXR1cm4uCiAgICAg
ICAgIGlmICghc3RyaWN0KSB7CkBAIC0xMTcyLDEwICsxMTY1LDEwIEBAIEdQUlJlZyBTcGVjdWxh
dGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUludEkKIAogICAgIGNhc2UgRGF0YUZvcm1hdERvdWJsZToK
ICAgICBjYXNlIERhdGFGb3JtYXRKU0RvdWJsZTogewotICAgICAgICBpZiAobm9kZS5oYXNDb25z
dGFudCgpICYmIGlzSW50MzJDb25zdGFudChub2RlSW5kZXgpKSB7CisgICAgICAgIGlmIChub2Rl
LT5oYXNDb25zdGFudCgpICYmIGlzSW50MzJDb25zdGFudChub2RlKSkgewogICAgICAgICAgICAg
R1BSUmVnIGdwciA9IGFsbG9jYXRlKCk7Ci0gICAgICAgICAgICBBU1NFUlQoaXNJbnQzMkNvbnN0
YW50KG5vZGVJbmRleCkpOwotICAgICAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6
SW1tMzIodmFsdWVPZkludDMyQ29uc3RhbnQobm9kZUluZGV4KSksIGdwcik7CisgICAgICAgICAg
ICBBU1NFUlQoaXNJbnQzMkNvbnN0YW50KG5vZGUpKTsKKyAgICAgICAgICAgIG1faml0Lm1vdmUo
TWFjcm9Bc3NlbWJsZXI6OkltbTMyKHZhbHVlT2ZJbnQzMkNvbnN0YW50KG5vZGUpKSwgZ3ByKTsK
ICAgICAgICAgICAgIHJldHVybkZvcm1hdCA9IERhdGFGb3JtYXRJbnRlZ2VyOwogICAgICAgICAg
ICAgcmV0dXJuIGdwcjsKICAgICAgICAgfQpAQCAtMTE4NCw3ICsxMTc3LDcgQEAgR1BSUmVnIFNw
ZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlSW50SQogICAgIGNhc2UgRGF0YUZvcm1hdEJvb2xl
YW46CiAgICAgY2FzZSBEYXRhRm9ybWF0SlNDZWxsOgogICAgIGNhc2UgRGF0YUZvcm1hdEpTQm9v
bGVhbjogewotICAgICAgICB0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihVbmNvdW50YWJs
ZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBkaXJlY3Rpb24pOworICAgICAgICB0ZXJtaW5hdGVT
cGVjdWxhdGl2ZUV4ZWN1dGlvbihVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgMCwgZGlyZWN0
aW9uKTsKICAgICAgICAgcmV0dXJuRm9ybWF0ID0gRGF0YUZvcm1hdEludGVnZXI7CiAgICAgICAg
IHJldHVybiBhbGxvY2F0ZSgpOwogICAgIH0KQEAgLTExOTgsMzYgKzExOTEsMzUgQEAgR1BSUmVn
IFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlSW50SQogICAgIH0KIH0KIAotR1BSUmVnIFNw
ZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlSW50KE5vZGVJbmRleCBub2RlSW5kZXgsIERhdGFG
b3JtYXQmIHJldHVybkZvcm1hdCwgU3BlY3VsYXRpb25EaXJlY3Rpb24gZGlyZWN0aW9uKQorR1BS
UmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlSW50KE5vZGUqIG5vZGUsIERhdGFGb3Jt
YXQmIHJldHVybkZvcm1hdCwgU3BlY3VsYXRpb25EaXJlY3Rpb24gZGlyZWN0aW9uKQogewotICAg
IHJldHVybiBmaWxsU3BlY3VsYXRlSW50SW50ZXJuYWw8ZmFsc2U+KG5vZGVJbmRleCwgcmV0dXJu
Rm9ybWF0LCBkaXJlY3Rpb24pOworICAgIHJldHVybiBmaWxsU3BlY3VsYXRlSW50SW50ZXJuYWw8
ZmFsc2U+KG5vZGUsIHJldHVybkZvcm1hdCwgZGlyZWN0aW9uKTsKIH0KIAotR1BSUmVnIFNwZWN1
bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlSW50U3RyaWN0KE5vZGVJbmRleCBub2RlSW5kZXgpCitH
UFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVJbnRTdHJpY3QoTm9kZSogbm9kZSkK
IHsKICAgICBEYXRhRm9ybWF0IG11c3RCZURhdGFGb3JtYXRJbnRlZ2VyOwotICAgIEdQUlJlZyBy
ZXN1bHQgPSBmaWxsU3BlY3VsYXRlSW50SW50ZXJuYWw8dHJ1ZT4obm9kZUluZGV4LCBtdXN0QmVE
YXRhRm9ybWF0SW50ZWdlciwgQmFja3dhcmRTcGVjdWxhdGlvbik7CisgICAgR1BSUmVnIHJlc3Vs
dCA9IGZpbGxTcGVjdWxhdGVJbnRJbnRlcm5hbDx0cnVlPihub2RlLCBtdXN0QmVEYXRhRm9ybWF0
SW50ZWdlciwgQmFja3dhcmRTcGVjdWxhdGlvbik7CiAgICAgUkVMRUFTRV9BU1NFUlQobXVzdEJl
RGF0YUZvcm1hdEludGVnZXIgPT0gRGF0YUZvcm1hdEludGVnZXIpOwogICAgIHJldHVybiByZXN1
bHQ7CiB9CiAKLUZQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZURvdWJsZShOb2Rl
SW5kZXggbm9kZUluZGV4LCBTcGVjdWxhdGlvbkRpcmVjdGlvbiBkaXJlY3Rpb24pCitGUFJSZWcg
U3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVEb3VibGUoTm9kZSogbm9kZSwgU3BlY3VsYXRp
b25EaXJlY3Rpb24gZGlyZWN0aW9uKQogewogI2lmIERGR19FTkFCTEUoREVCVUdfVkVSQk9TRSkK
LSAgICBkYXRhTG9nRigiU3BlY0RvdWJsZUAlZCAgICIsIG5vZGVJbmRleCk7CisgICAgZGF0YUxv
Z0YoIlNwZWNEb3VibGVAJWQgICAiLCBub2RlLT5pbmRleCgpKTsKICNlbmRpZgotICAgIFNwZWN1
bGF0ZWRUeXBlIHR5cGUgPSBtX3N0YXRlLmZvck5vZGUobm9kZUluZGV4KS5tX3R5cGU7Ci0gICAg
Tm9kZSYgbm9kZSA9IGF0KG5vZGVJbmRleCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxS
ZWdpc3RlciA9IG5vZGUudmlydHVhbFJlZ2lzdGVyKCk7CisgICAgU3BlY3VsYXRlZFR5cGUgdHlw
ZSA9IG1fc3RhdGUuZm9yTm9kZShub2RlKS5tX3R5cGU7CisgICAgVmlydHVhbFJlZ2lzdGVyIHZp
cnR1YWxSZWdpc3RlciA9IG5vZGUtPnZpcnR1YWxSZWdpc3RlcigpOwogICAgIEdlbmVyYXRpb25J
bmZvJiBpbmZvID0gbV9nZW5lcmF0aW9uSW5mb1t2aXJ0dWFsUmVnaXN0ZXJdOwogCiAgICAgaWYg
KGluZm8ucmVnaXN0ZXJGb3JtYXQoKSA9PSBEYXRhRm9ybWF0Tm9uZSkgewotICAgICAgICBpZiAo
bm9kZS5oYXNDb25zdGFudCgpKSB7CisgICAgICAgIGlmIChub2RlLT5oYXNDb25zdGFudCgpKSB7
CiAgICAgICAgICAgICBHUFJSZWcgZ3ByID0gYWxsb2NhdGUoKTsKIAotICAgICAgICAgICAgaWYg
KGlzSW50MzJDb25zdGFudChub2RlSW5kZXgpKSB7CisgICAgICAgICAgICBpZiAoaXNJbnQzMkNv
bnN0YW50KG5vZGUpKSB7CiAgICAgICAgICAgICAgICAgRlBSUmVnIGZwciA9IGZwckFsbG9jYXRl
KCk7Ci0gICAgICAgICAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6SW1tNjQocmVp
bnRlcnByZXREb3VibGVUb0ludDY0KHN0YXRpY19jYXN0PGRvdWJsZT4odmFsdWVPZkludDMyQ29u
c3RhbnQobm9kZUluZGV4KSkpKSwgZ3ByKTsKKyAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKE1h
Y3JvQXNzZW1ibGVyOjpJbW02NChyZWludGVycHJldERvdWJsZVRvSW50NjQoc3RhdGljX2Nhc3Q8
ZG91YmxlPih2YWx1ZU9mSW50MzJDb25zdGFudChub2RlKSkpKSwgZ3ByKTsKICAgICAgICAgICAg
ICAgICBtX2ppdC5tb3ZlNjRUb0RvdWJsZShncHIsIGZwcik7CiAgICAgICAgICAgICAgICAgdW5s
b2NrKGdwcik7CiAKQEAgLTEyMzUsOSArMTIyNyw5IEBAIEZQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6
ZmlsbFNwZWN1bGF0ZURvdWIKICAgICAgICAgICAgICAgICBpbmZvLmZpbGxEb3VibGUoKm1fc3Ry
ZWFtLCBmcHIpOwogICAgICAgICAgICAgICAgIHJldHVybiBmcHI7CiAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBpZiAoaXNOdW1iZXJDb25zdGFudChub2RlSW5kZXgpKSB7CisgICAgICAgICAg
ICBpZiAoaXNOdW1iZXJDb25zdGFudChub2RlKSkgewogICAgICAgICAgICAgICAgIEZQUlJlZyBm
cHIgPSBmcHJBbGxvY2F0ZSgpOwotICAgICAgICAgICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3Nl
bWJsZXI6OkltbTY0KHJlaW50ZXJwcmV0RG91YmxlVG9JbnQ2NCh2YWx1ZU9mTnVtYmVyQ29uc3Rh
bnQobm9kZUluZGV4KSkpLCBncHIpOworICAgICAgICAgICAgICAgIG1faml0Lm1vdmUoTWFjcm9B
c3NlbWJsZXI6OkltbTY0KHJlaW50ZXJwcmV0RG91YmxlVG9JbnQ2NCh2YWx1ZU9mTnVtYmVyQ29u
c3RhbnQobm9kZSkpKSwgZ3ByKTsKICAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlNjRUb0RvdWJs
ZShncHIsIGZwcik7CiAgICAgICAgICAgICAgICAgdW5sb2NrKGdwcik7CiAKQEAgLTEyNDUsNyAr
MTIzNyw3IEBAIEZQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZURvdWIKICAgICAg
ICAgICAgICAgICBpbmZvLmZpbGxEb3VibGUoKm1fc3RyZWFtLCBmcHIpOwogICAgICAgICAgICAg
ICAgIHJldHVybiBmcHI7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB0ZXJtaW5hdGVTcGVj
dWxhdGl2ZUV4ZWN1dGlvbihVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBkaXJl
Y3Rpb24pOworICAgICAgICAgICAgdGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oVW5jb3Vu
dGFibGUsIEpTVmFsdWVSZWdzKCksIDAsIGRpcmVjdGlvbik7CiAgICAgICAgICAgICByZXR1cm4g
ZnByQWxsb2NhdGUoKTsKICAgICAgICAgfQogICAgICAgICAKQEAgLTEyODgsNyArMTI4MCw3IEBA
IEZQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZURvdWIKICAgICAgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKIAogICAgIGNhc2UgRGF0YUZvcm1hdENlbGw6Ci0gICAg
ICAgIHRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVn
cygpLCBOb05vZGUsIGRpcmVjdGlvbik7CisgICAgICAgIHRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhl
Y3V0aW9uKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCAwLCBkaXJlY3Rpb24pOwogICAgICAg
ICByZXR1cm4gZnByQWxsb2NhdGUoKTsKIAogICAgIGNhc2UgRGF0YUZvcm1hdEpTQ2VsbDoKQEAg
LTEzMDIsNyArMTI5NCw3IEBAIEZQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZURv
dWIKICAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgaXNJbnRlZ2VyID0gbV9qaXQuYnJhbmNoNjQo
TWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwganNWYWx1ZUdwciwgR1BSSW5mbzo6dGFnVHlw
ZU51bWJlclJlZ2lzdGVyKTsKIAogICAgICAgICBpZiAoIWlzTnVtYmVyU3BlY3VsYXRpb24odHlw
ZSkpCi0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKGpz
VmFsdWVHcHIpLCBub2RlSW5kZXgsIG1faml0LmJyYW5jaFRlc3Q2NChNYWNyb0Fzc2VtYmxlcjo6
WmVybywganNWYWx1ZUdwciwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKSwgZGlyZWN0
aW9uKTsKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3Mo
anNWYWx1ZUdwciksIG5vZGUsIG1faml0LmJyYW5jaFRlc3Q2NChNYWNyb0Fzc2VtYmxlcjo6WmVy
bywganNWYWx1ZUdwciwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKSwgZGlyZWN0aW9u
KTsKIAogICAgICAgICAvLyBGaXJzdCwgaWYgd2UgZ2V0IGhlcmUgd2UgaGF2ZSBhIGRvdWJsZSBl
bmNvZGVkIGFzIGEgSlNWYWx1ZQogICAgICAgICBtX2ppdC5tb3ZlKGpzVmFsdWVHcHIsIHRlbXBH
cHIpOwpAQCAtMTM2NSwzNCArMTM1NywzMyBAQCBGUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxT
cGVjdWxhdGVEb3ViCiAgICAgfQogfQogCi1HUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVj
dWxhdGVDZWxsKE5vZGVJbmRleCBub2RlSW5kZXgsIFNwZWN1bGF0aW9uRGlyZWN0aW9uIGRpcmVj
dGlvbikKK0dQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUNlbGwoTm9kZSogbm9k
ZSwgU3BlY3VsYXRpb25EaXJlY3Rpb24gZGlyZWN0aW9uKQogewogI2lmIERGR19FTkFCTEUoREVC
VUdfVkVSQk9TRSkKLSAgICBkYXRhTG9nRigiU3BlY0NlbGxAJWQgICAiLCBub2RlSW5kZXgpOwor
ICAgIGRhdGFMb2dGKCJTcGVjQ2VsbEAlZCAgICIsIG5vZGUtPmluZGV4KCkpOwogI2VuZGlmCi0g
ICAgU3BlY3VsYXRlZFR5cGUgdHlwZSA9IG1fc3RhdGUuZm9yTm9kZShub2RlSW5kZXgpLm1fdHlw
ZTsKLSAgICBOb2RlJiBub2RlID0gYXQobm9kZUluZGV4KTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIg
dmlydHVhbFJlZ2lzdGVyID0gbm9kZS52aXJ0dWFsUmVnaXN0ZXIoKTsKKyAgICBTcGVjdWxhdGVk
VHlwZSB0eXBlID0gbV9zdGF0ZS5mb3JOb2RlKG5vZGUpLm1fdHlwZTsKKyAgICBWaXJ0dWFsUmVn
aXN0ZXIgdmlydHVhbFJlZ2lzdGVyID0gbm9kZS0+dmlydHVhbFJlZ2lzdGVyKCk7CiAgICAgR2Vu
ZXJhdGlvbkluZm8mIGluZm8gPSBtX2dlbmVyYXRpb25JbmZvW3ZpcnR1YWxSZWdpc3Rlcl07CiAK
ICAgICBzd2l0Y2ggKGluZm8ucmVnaXN0ZXJGb3JtYXQoKSkgewogICAgIGNhc2UgRGF0YUZvcm1h
dE5vbmU6IHsKICAgICAgICAgaWYgKGluZm8uc3BpbGxGb3JtYXQoKSA9PSBEYXRhRm9ybWF0SW50
ZWdlciB8fCBpbmZvLnNwaWxsRm9ybWF0KCkgPT0gRGF0YUZvcm1hdERvdWJsZSkgewotICAgICAg
ICAgICAgdGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oVW5jb3VudGFibGUsIEpTVmFsdWVS
ZWdzKCksIE5vTm9kZSwgZGlyZWN0aW9uKTsKKyAgICAgICAgICAgIHRlcm1pbmF0ZVNwZWN1bGF0
aXZlRXhlY3V0aW9uKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCAwLCBkaXJlY3Rpb24pOwog
ICAgICAgICAgICAgcmV0dXJuIGFsbG9jYXRlKCk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAg
ICAgIEdQUlJlZyBncHIgPSBhbGxvY2F0ZSgpOwogCi0gICAgICAgIGlmIChub2RlLmhhc0NvbnN0
YW50KCkpIHsKLSAgICAgICAgICAgIEpTVmFsdWUganNWYWx1ZSA9IHZhbHVlT2ZKU0NvbnN0YW50
KG5vZGVJbmRleCk7CisgICAgICAgIGlmIChub2RlLT5oYXNDb25zdGFudCgpKSB7CisgICAgICAg
ICAgICBKU1ZhbHVlIGpzVmFsdWUgPSB2YWx1ZU9mSlNDb25zdGFudChub2RlKTsKICAgICAgICAg
ICAgIGlmIChqc1ZhbHVlLmlzQ2VsbCgpKSB7CiAgICAgICAgICAgICAgICAgbV9ncHJzLnJldGFp
bihncHIsIHZpcnR1YWxSZWdpc3RlciwgU3BpbGxPcmRlckNvbnN0YW50KTsKICAgICAgICAgICAg
ICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5j
b2RlKGpzVmFsdWUpKSwgZ3ByKTsKICAgICAgICAgICAgICAgICBpbmZvLmZpbGxKU1ZhbHVlKCpt
X3N0cmVhbSwgZ3ByLCBEYXRhRm9ybWF0SlNDZWxsKTsKICAgICAgICAgICAgICAgICByZXR1cm4g
Z3ByOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgdGVybWluYXRlU3BlY3VsYXRpdmVFeGVj
dXRpb24oVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgZGlyZWN0aW9uKTsKKyAg
ICAgICAgICAgIHRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKFVuY291bnRhYmxlLCBKU1Zh
bHVlUmVncygpLCAwLCBkaXJlY3Rpb24pOwogICAgICAgICAgICAgcmV0dXJuIGdwcjsKICAgICAg
ICAgfQogICAgICAgICBSRUxFQVNFX0FTU0VSVChpbmZvLnNwaWxsRm9ybWF0KCkgJiBEYXRhRm9y
bWF0SlMpOwpAQCAtMTQwMSw3ICsxMzkyLDcgQEAgR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxs
U3BlY3VsYXRlQ2VsbAogCiAgICAgICAgIGluZm8uZmlsbEpTVmFsdWUoKm1fc3RyZWFtLCBncHIs
IERhdGFGb3JtYXRKUyk7CiAgICAgICAgIGlmICghaXNDZWxsU3BlY3VsYXRpb24odHlwZSkpCi0g
ICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKGdwciksIG5v
ZGVJbmRleCwgbV9qaXQuYnJhbmNoVGVzdDY0KE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCBncHIs
IEdQUkluZm86OnRhZ01hc2tSZWdpc3RlciksIGRpcmVjdGlvbik7CisgICAgICAgICAgICBzcGVj
dWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKGdwciksIG5vZGUsIG1faml0LmJyYW5j
aFRlc3Q2NChNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgZ3ByLCBHUFJJbmZvOjp0YWdNYXNrUmVn
aXN0ZXIpLCBkaXJlY3Rpb24pOwogICAgICAgICBpbmZvLmZpbGxKU1ZhbHVlKCptX3N0cmVhbSwg
Z3ByLCBEYXRhRm9ybWF0SlNDZWxsKTsKICAgICAgICAgcmV0dXJuIGdwcjsKICAgICB9CkBAIC0x
NDE3LDcgKzE0MDgsNyBAQCBHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVDZWxs
CiAgICAgICAgIEdQUlJlZyBncHIgPSBpbmZvLmdwcigpOwogICAgICAgICBtX2dwcnMubG9jayhn
cHIpOwogICAgICAgICBpZiAoIWlzQ2VsbFNwZWN1bGF0aW9uKHR5cGUpKQotICAgICAgICAgICAg
c3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyhncHIpLCBub2RlSW5kZXgsIG1f
aml0LmJyYW5jaFRlc3Q2NChNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgZ3ByLCBHUFJJbmZvOjp0
YWdNYXNrUmVnaXN0ZXIpLCBkaXJlY3Rpb24pOworICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVj
ayhCYWRUeXBlLCBKU1ZhbHVlUmVncyhncHIpLCBub2RlLCBtX2ppdC5icmFuY2hUZXN0NjQoTWFj
cm9Bc3NlbWJsZXI6Ok5vblplcm8sIGdwciwgR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKSwgZGly
ZWN0aW9uKTsKICAgICAgICAgaW5mby5maWxsSlNWYWx1ZSgqbV9zdHJlYW0sIGdwciwgRGF0YUZv
cm1hdEpTQ2VsbCk7CiAgICAgICAgIHJldHVybiBncHI7CiAgICAgfQpAQCAtMTQyOCw3ICsxNDE5
LDcgQEAgR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlQ2VsbAogICAgIGNhc2Ug
RGF0YUZvcm1hdERvdWJsZToKICAgICBjYXNlIERhdGFGb3JtYXRKU0Jvb2xlYW46CiAgICAgY2Fz
ZSBEYXRhRm9ybWF0Qm9vbGVhbjogewotICAgICAgICB0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1
dGlvbihVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBkaXJlY3Rpb24pOworICAg
ICAgICB0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihVbmNvdW50YWJsZSwgSlNWYWx1ZVJl
Z3MoKSwgMCwgZGlyZWN0aW9uKTsKICAgICAgICAgcmV0dXJuIGFsbG9jYXRlKCk7CiAgICAgfQog
CkBAIC0xNDQxLDM0ICsxNDMyLDMzIEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1
bGF0ZUNlbGwKICAgICB9CiB9CiAKLUdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0
ZUJvb2xlYW4oTm9kZUluZGV4IG5vZGVJbmRleCwgU3BlY3VsYXRpb25EaXJlY3Rpb24gZGlyZWN0
aW9uKQorR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlQm9vbGVhbihOb2RlKiBu
b2RlLCBTcGVjdWxhdGlvbkRpcmVjdGlvbiBkaXJlY3Rpb24pCiB7CiAjaWYgREZHX0VOQUJMRShE
RUJVR19WRVJCT1NFKQotICAgIGRhdGFMb2dGKCJTcGVjQm9vbEAlZCAgICIsIG5vZGVJbmRleCk7
CisgICAgZGF0YUxvZ0YoIlNwZWNCb29sQCVkICAgIiwgbm9kZS0+aW5kZXgoKSk7CiAjZW5kaWYK
LSAgICBTcGVjdWxhdGVkVHlwZSB0eXBlID0gbV9zdGF0ZS5mb3JOb2RlKG5vZGVJbmRleCkubV90
eXBlOwotICAgIE5vZGUmIG5vZGUgPSBhdChub2RlSW5kZXgpOwotICAgIFZpcnR1YWxSZWdpc3Rl
ciB2aXJ0dWFsUmVnaXN0ZXIgPSBub2RlLnZpcnR1YWxSZWdpc3RlcigpOworICAgIFNwZWN1bGF0
ZWRUeXBlIHR5cGUgPSBtX3N0YXRlLmZvck5vZGUobm9kZSkubV90eXBlOworICAgIFZpcnR1YWxS
ZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIgPSBub2RlLT52aXJ0dWFsUmVnaXN0ZXIoKTsKICAgICBH
ZW5lcmF0aW9uSW5mbyYgaW5mbyA9IG1fZ2VuZXJhdGlvbkluZm9bdmlydHVhbFJlZ2lzdGVyXTsK
IAogICAgIHN3aXRjaCAoaW5mby5yZWdpc3RlckZvcm1hdCgpKSB7CiAgICAgY2FzZSBEYXRhRm9y
bWF0Tm9uZTogewogICAgICAgICBpZiAoaW5mby5zcGlsbEZvcm1hdCgpID09IERhdGFGb3JtYXRJ
bnRlZ2VyIHx8IGluZm8uc3BpbGxGb3JtYXQoKSA9PSBEYXRhRm9ybWF0RG91YmxlKSB7Ci0gICAg
ICAgICAgICB0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihVbmNvdW50YWJsZSwgSlNWYWx1
ZVJlZ3MoKSwgTm9Ob2RlLCBkaXJlY3Rpb24pOworICAgICAgICAgICAgdGVybWluYXRlU3BlY3Vs
YXRpdmVFeGVjdXRpb24oVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIDAsIGRpcmVjdGlvbik7
CiAgICAgICAgICAgICByZXR1cm4gYWxsb2NhdGUoKTsKICAgICAgICAgfQogICAgICAgICAKICAg
ICAgICAgR1BSUmVnIGdwciA9IGFsbG9jYXRlKCk7CiAKLSAgICAgICAgaWYgKG5vZGUuaGFzQ29u
c3RhbnQoKSkgewotICAgICAgICAgICAgSlNWYWx1ZSBqc1ZhbHVlID0gdmFsdWVPZkpTQ29uc3Rh
bnQobm9kZUluZGV4KTsKKyAgICAgICAgaWYgKG5vZGUtPmhhc0NvbnN0YW50KCkpIHsKKyAgICAg
ICAgICAgIEpTVmFsdWUganNWYWx1ZSA9IHZhbHVlT2ZKU0NvbnN0YW50KG5vZGUpOwogICAgICAg
ICAgICAgaWYgKGpzVmFsdWUuaXNCb29sZWFuKCkpIHsKICAgICAgICAgICAgICAgICBtX2dwcnMu
cmV0YWluKGdwciwgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVyQ29uc3RhbnQpOwogICAgICAg
ICAgICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW02NChKU1ZhbHVl
OjplbmNvZGUoanNWYWx1ZSkpLCBncHIpOwogICAgICAgICAgICAgICAgIGluZm8uZmlsbEpTVmFs
dWUoKm1fc3RyZWFtLCBncHIsIERhdGFGb3JtYXRKU0Jvb2xlYW4pOwogICAgICAgICAgICAgICAg
IHJldHVybiBncHI7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB0ZXJtaW5hdGVTcGVjdWxh
dGl2ZUV4ZWN1dGlvbihVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBkaXJlY3Rp
b24pOworICAgICAgICAgICAgdGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oVW5jb3VudGFi
bGUsIEpTVmFsdWVSZWdzKCksIDAsIGRpcmVjdGlvbik7CiAgICAgICAgICAgICByZXR1cm4gZ3By
OwogICAgICAgICB9CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGluZm8uc3BpbGxGb3JtYXQoKSAm
IERhdGFGb3JtYXRKUyk7CkBAIC0xNDc4LDcgKzE0NjgsNyBAQCBHUFJSZWcgU3BlY3VsYXRpdmVK
SVQ6OmZpbGxTcGVjdWxhdGVCb29sCiAgICAgICAgIGluZm8uZmlsbEpTVmFsdWUoKm1fc3RyZWFt
LCBncHIsIERhdGFGb3JtYXRKUyk7CiAgICAgICAgIGlmICghaXNCb29sZWFuU3BlY3VsYXRpb24o
dHlwZSkpIHsKICAgICAgICAgICAgIG1faml0LnhvcjY0KFRydXN0ZWRJbW0zMihzdGF0aWNfY2Fz
dDxpbnQzMl90PihWYWx1ZUZhbHNlKSksIGdwcik7Ci0gICAgICAgICAgICBzcGVjdWxhdGlvbkNo
ZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKGdwciksIG5vZGVJbmRleCwgbV9qaXQuYnJhbmNoVGVz
dDY0KE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCBncHIsIFRydXN0ZWRJbW0zMihzdGF0aWNfY2Fz
dDxpbnQzMl90Pih+MSkpKSwgU3BlY3VsYXRpb25SZWNvdmVyeShCb29sZWFuU3BlY3VsYXRpb25D
aGVjaywgZ3ByLCBJbnZhbGlkR1BSUmVnKSwgZGlyZWN0aW9uKTsKKyAgICAgICAgICAgIHNwZWN1
bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3MoZ3ByKSwgbm9kZSwgbV9qaXQuYnJhbmNo
VGVzdDY0KE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCBncHIsIFRydXN0ZWRJbW0zMihzdGF0aWNf
Y2FzdDxpbnQzMl90Pih+MSkpKSwgU3BlY3VsYXRpb25SZWNvdmVyeShCb29sZWFuU3BlY3VsYXRp
b25DaGVjaywgZ3ByLCBJbnZhbGlkR1BSUmVnKSwgZGlyZWN0aW9uKTsKICAgICAgICAgICAgIG1f
aml0LnhvcjY0KFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90PihWYWx1ZUZhbHNlKSks
IGdwcik7CiAgICAgICAgIH0KICAgICAgICAgaW5mby5maWxsSlNWYWx1ZSgqbV9zdHJlYW0sIGdw
ciwgRGF0YUZvcm1hdEpTQm9vbGVhbik7CkBAIC0xNDk3LDcgKzE0ODcsNyBAQCBHUFJSZWcgU3Bl
Y3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVCb29sCiAgICAgICAgIG1fZ3Bycy5sb2NrKGdwcik7
CiAgICAgICAgIGlmICghaXNCb29sZWFuU3BlY3VsYXRpb24odHlwZSkpIHsKICAgICAgICAgICAg
IG1faml0LnhvcjY0KFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90PihWYWx1ZUZhbHNl
KSksIGdwcik7Ci0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVS
ZWdzKGdwciksIG5vZGVJbmRleCwgbV9qaXQuYnJhbmNoVGVzdDY0KE1hY3JvQXNzZW1ibGVyOjpO
b25aZXJvLCBncHIsIFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90Pih+MSkpKSwgU3Bl
Y3VsYXRpb25SZWNvdmVyeShCb29sZWFuU3BlY3VsYXRpb25DaGVjaywgZ3ByLCBJbnZhbGlkR1BS
UmVnKSwgZGlyZWN0aW9uKTsKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwg
SlNWYWx1ZVJlZ3MoZ3ByKSwgbm9kZSwgbV9qaXQuYnJhbmNoVGVzdDY0KE1hY3JvQXNzZW1ibGVy
OjpOb25aZXJvLCBncHIsIFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90Pih+MSkpKSwg
U3BlY3VsYXRpb25SZWNvdmVyeShCb29sZWFuU3BlY3VsYXRpb25DaGVjaywgZ3ByLCBJbnZhbGlk
R1BSUmVnKSwgZGlyZWN0aW9uKTsKICAgICAgICAgICAgIG1faml0LnhvcjY0KFRydXN0ZWRJbW0z
MihzdGF0aWNfY2FzdDxpbnQzMl90PihWYWx1ZUZhbHNlKSksIGdwcik7CiAgICAgICAgIH0KICAg
ICAgICAgaW5mby5maWxsSlNWYWx1ZSgqbV9zdHJlYW0sIGdwciwgRGF0YUZvcm1hdEpTQm9vbGVh
bik7CkBAIC0xNTEwLDcgKzE1MDAsNyBAQCBHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVj
dWxhdGVCb29sCiAgICAgY2FzZSBEYXRhRm9ybWF0RG91YmxlOgogICAgIGNhc2UgRGF0YUZvcm1h
dEpTQ2VsbDoKICAgICBjYXNlIERhdGFGb3JtYXRDZWxsOiB7Ci0gICAgICAgIHRlcm1pbmF0ZVNw
ZWN1bGF0aXZlRXhlY3V0aW9uKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIGRp
cmVjdGlvbik7CisgICAgICAgIHRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKFVuY291bnRh
YmxlLCBKU1ZhbHVlUmVncygpLCAwLCBkaXJlY3Rpb24pOwogICAgICAgICByZXR1cm4gYWxsb2Nh
dGUoKTsKICAgICB9CiAgICAgICAgIApAQCAtMTU0MywyNCArMTUzMywyNCBAQCBKSVRDb21waWxl
cjo6SnVtcCBTcGVjdWxhdGl2ZUpJVDo6Y29udmVyCiAgICAgcmV0dXJuIG5vdE51bWJlcjsKIH0K
IAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU9iamVjdEVxdWFsaXR5KE5vZGUmIG5vZGUp
Cit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlT2JqZWN0RXF1YWxpdHkoTm9kZSogbm9kZSkK
IHsKLSAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEoKSk7Ci0g
ICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgb3AyKHRoaXMsIG5vZGUuY2hpbGQyKCkpOworICAgIFNw
ZWN1bGF0ZUNlbGxPcGVyYW5kIG9wMSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CisgICAgU3BlY3Vs
YXRlQ2VsbE9wZXJhbmQgb3AyKHRoaXMsIG5vZGUtPmNoaWxkMigpKTsKICAgICBHUFJUZW1wb3Jh
cnkgcmVzdWx0KHRoaXMsIG9wMSk7CiAgICAgCiAgICAgR1BSUmVnIG9wMUdQUiA9IG9wMS5ncHIo
KTsKICAgICBHUFJSZWcgb3AyR1BSID0gb3AyLmdwcigpOwogICAgIEdQUlJlZyByZXN1bHRHUFIg
PSByZXN1bHQuZ3ByKCk7CiAgICAKLSAgICBpZiAobV9qaXQuZ3JhcGgoKS5nbG9iYWxPYmplY3RG
b3Iobm9kZS5jb2RlT3JpZ2luKS0+bWFzcXVlcmFkZXNBc1VuZGVmaW5lZFdhdGNocG9pbnQoKS0+
aXNTdGlsbFZhbGlkKCkpIHsKLSAgICAgICAgbV9qaXQuZ3JhcGgoKS5nbG9iYWxPYmplY3RGb3Io
bm9kZS5jb2RlT3JpZ2luKS0+bWFzcXVlcmFkZXNBc1VuZGVmaW5lZFdhdGNocG9pbnQoKS0+YWRk
KHNwZWN1bGF0aW9uV2F0Y2hwb2ludCgpKTsgCi0gICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFk
VHlwZSwgSlNWYWx1ZVJlZ3Mob3AxR1BSKSwgbm9kZS5jaGlsZDEoKS5pbmRleCgpLCAKKyAgICBp
ZiAobV9qaXQuZ3JhcGgoKS5nbG9iYWxPYmplY3RGb3Iobm9kZS0+Y29kZU9yaWdpbiktPm1hc3F1
ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50KCktPmlzU3RpbGxWYWxpZCgpKSB7CisgICAgICAg
IG1faml0LmdyYXBoKCkuZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPmNvZGVPcmlnaW4pLT5tYXNxdWVy
YWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2ludCgpLT5hZGQoc3BlY3VsYXRpb25XYXRjaHBvaW50KCkp
OyAKKyAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyhvcDFHUFIp
LCBub2RlLT5jaGlsZDEoKSwKICAgICAgICAgICAgIG1faml0LmJyYW5jaFB0cigKICAgICAgICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIAogICAgICAgICAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKG9wMUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIAogICAg
ICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERh
dGEoKS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOwotICAgICAgICBzcGVjdWxhdGlvbkNoZWNr
KEJhZFR5cGUsIEpTVmFsdWVSZWdzKG9wMkdQUiksIG5vZGUuY2hpbGQyKCkuaW5kZXgoKSwgCisg
ICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3Mob3AyR1BSKSwgbm9k
ZS0+Y2hpbGQyKCksCiAgICAgICAgICAgICBtX2ppdC5icmFuY2hQdHIoCiAgICAgICAgICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCAKICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhvcDJHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCAKQEAgLTE1NzAs
MjQgKzE1NjAsMjQgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU9iamVjdEVxdWFsaQog
ICAgICAgICBHUFJSZWcgc3RydWN0dXJlR1BSID0gc3RydWN0dXJlLmdwcigpOwogCiAgICAgICAg
IG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mob3AxR1BSLCBKU0NlbGw6OnN0
cnVjdHVyZU9mZnNldCgpKSwgc3RydWN0dXJlR1BSKTsKLSAgICAgICAgc3BlY3VsYXRpb25DaGVj
ayhCYWRUeXBlLCBKU1ZhbHVlUmVncyhvcDFHUFIpLCBub2RlLmNoaWxkMSgpLmluZGV4KCksIAor
ICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKG9wMUdQUiksIG5v
ZGUtPmNoaWxkMSgpLAogICAgICAgICAgICAgbV9qaXQuYnJhbmNoUHRyKAogICAgICAgICAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgCiAgICAgICAgICAgICAgICAgc3RydWN0dXJlR1BS
LCAKICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5n
bG9iYWxEYXRhKCktPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpKTsKLSAgICAgICAgc3BlY3VsYXRp
b25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyhvcDFHUFIpLCBub2RlLmNoaWxkMSgpLmluZGV4
KCksIAorICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKG9wMUdQ
UiksIG5vZGUtPmNoaWxkMSgpLAogICAgICAgICAgICAgbV9qaXQuYnJhbmNoVGVzdDgoCiAgICAg
ICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIAogICAgICAgICAgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0cnVjdHVyZUdQUiwgU3RydWN0dXJlOjp0eXBlSW5mb0Zs
YWdzT2Zmc2V0KCkpLCAKICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZElt
bTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKSk7CiAKICAgICAgICAgbV9qaXQubG9hZFB0cihN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhvcDJHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkp
LCBzdHJ1Y3R1cmVHUFIpOwotICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFs
dWVSZWdzKG9wMkdQUiksIG5vZGUuY2hpbGQyKCkuaW5kZXgoKSwgCisgICAgICAgIHNwZWN1bGF0
aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3Mob3AyR1BSKSwgbm9kZS0+Y2hpbGQyKCksCiAg
ICAgICAgICAgICBtX2ppdC5icmFuY2hQdHIoCiAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6OkVxdWFsLCAKICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmVHUFIsIAogICAgICAgICAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+c3Ry
aW5nU3RydWN0dXJlLmdldCgpKSkpOwotICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUs
IEpTVmFsdWVSZWdzKG9wMkdQUiksIG5vZGUuY2hpbGQyKCkuaW5kZXgoKSwgCisgICAgICAgIHNw
ZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3Mob3AyR1BSKSwgbm9kZS0+Y2hpbGQy
KCksCiAgICAgICAgICAgICBtX2ppdC5icmFuY2hUZXN0OCgKICAgICAgICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6Tm9uWmVybywgCiAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3Moc3RydWN0dXJlR1BSLCBTdHJ1Y3R1cmU6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIApA
QCAtMTYwMSwxMiArMTU5MSwxMSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlT2JqZWN0
RXF1YWxpCiAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tMzIoVmFsdWVGYWxzZSksIHJlc3VsdEdQ
Uik7CiAgICAgZG9uZS5saW5rKCZtX2ppdCk7CiAKLSAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdEdQ
UiwgbV9jb21waWxlSW5kZXgsIERhdGFGb3JtYXRKU0Jvb2xlYW4pOworICAgIGpzVmFsdWVSZXN1
bHQocmVzdWx0R1BSLCBtX2N1cnJlbnROb2RlLCBEYXRhRm9ybWF0SlNCb29sZWFuKTsKIH0KIAog
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU9iamVjdFRvT2JqZWN0T3JPdGhlckVxdWFsaXR5
KEVkZ2UgbGVmdENoaWxkLCBFZGdlIHJpZ2h0Q2hpbGQpCiB7Ci0gICAgTm9kZSYgbGVmdE5vZGUg
PSBtX2ppdC5ncmFwaCgpW2xlZnRDaGlsZC5pbmRleCgpXTsKICAgICBTcGVjdWxhdGVDZWxsT3Bl
cmFuZCBvcDEodGhpcywgbGVmdENoaWxkKTsKICAgICBKU1ZhbHVlT3BlcmFuZCBvcDIodGhpcywg
cmlnaHRDaGlsZCk7CiAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKQEAgLTE2MTUsOSAr
MTYwNCw5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVPYmplY3RUb09iamUKICAgICBH
UFJSZWcgb3AyR1BSID0gb3AyLmdwcigpOwogICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQu
Z3ByKCk7CiAgICAKLSAgICBpZiAobV9qaXQuZ3JhcGgoKS5nbG9iYWxPYmplY3RGb3IobGVmdE5v
ZGUuY29kZU9yaWdpbiktPm1hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50KCktPmlzU3Rp
bGxWYWxpZCgpKSB7IAotICAgICAgICBtX2ppdC5ncmFwaCgpLmdsb2JhbE9iamVjdEZvcihsZWZ0
Tm9kZS5jb2RlT3JpZ2luKS0+bWFzcXVlcmFkZXNBc1VuZGVmaW5lZFdhdGNocG9pbnQoKS0+YWRk
KHNwZWN1bGF0aW9uV2F0Y2hwb2ludCgpKTsKLSAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRU
eXBlLCBKU1ZhbHVlUmVncyhvcDFHUFIpLCBsZWZ0Q2hpbGQuaW5kZXgoKSwgCisgICAgaWYgKG1f
aml0LmdyYXBoKCkuZ2xvYmFsT2JqZWN0Rm9yKG1fY3VycmVudE5vZGUtPmNvZGVPcmlnaW4pLT5t
YXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2ludCgpLT5pc1N0aWxsVmFsaWQoKSkgeyAKKyAg
ICAgICAgbV9qaXQuZ3JhcGgoKS5nbG9iYWxPYmplY3RGb3IobV9jdXJyZW50Tm9kZS0+Y29kZU9y
aWdpbiktPm1hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50KCktPmFkZChzcGVjdWxhdGlv
bldhdGNocG9pbnQoKSk7CisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1
ZVJlZ3Mob3AxR1BSKSwgbGVmdENoaWxkLCAKICAgICAgICAgICAgIG1faml0LmJyYW5jaFB0cigK
ICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIAogICAgICAgICAgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKG9wMUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQo
KSksIApAQCAtMTYyNywxMiArMTYxNiwxMiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
T2JqZWN0VG9PYmplCiAgICAgICAgIEdQUlJlZyBzdHJ1Y3R1cmVHUFIgPSBzdHJ1Y3R1cmUuZ3By
KCk7CiAKICAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhvcDFH
UFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBzdHJ1Y3R1cmVHUFIpOwotICAgICAgICBz
cGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKG9wMUdQUiksIGxlZnRDaGlsZC5p
bmRleCgpLCAKKyAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyhv
cDFHUFIpLCBsZWZ0Q2hpbGQsIAogICAgICAgICAgICAgbV9qaXQuYnJhbmNoUHRyKAogICAgICAg
ICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwKICAgICAgICAgICAgICAgICBzdHJ1Y3R1
cmVHUFIsCiAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9q
aXQuZ2xvYmFsRGF0YSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7Ci0gICAgICAgIHNwZWN1
bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3Mob3AxR1BSKSwgbGVmdENoaWxkLmluZGV4
KCksIAorICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKG9wMUdQ
UiksIGxlZnRDaGlsZCwKICAgICAgICAgICAgIG1faml0LmJyYW5jaFRlc3Q4KAogICAgICAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCAKICAgICAgICAgICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhzdHJ1Y3R1cmVHUFIsIFN0cnVjdHVyZTo6dHlwZUluZm9GbGFnc09m
ZnNldCgpKSwgCkBAIC0xNjQ1LDkgKzE2MzQsOSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlT2JqZWN0VG9PYmplCiAgICAgICAgIG1faml0LmJyYW5jaFRlc3Q2NChNYWNyb0Fzc2VtYmxl
cjo6Tm9uWmVybywgb3AyR1BSLCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpOwogICAgIAogICAg
IC8vIFdlIGtub3cgdGhhdCB3aXRoaW4gdGhpcyBicmFuY2gsIHJpZ2h0Q2hpbGQgbXVzdCBiZSBh
IGNlbGwuIAotICAgIGlmIChtX2ppdC5ncmFwaCgpLmdsb2JhbE9iamVjdEZvcihsZWZ0Tm9kZS5j
b2RlT3JpZ2luKS0+bWFzcXVlcmFkZXNBc1VuZGVmaW5lZFdhdGNocG9pbnQoKS0+aXNTdGlsbFZh
bGlkKCkpIHsgCi0gICAgICAgIG1faml0LmdyYXBoKCkuZ2xvYmFsT2JqZWN0Rm9yKGxlZnROb2Rl
LmNvZGVPcmlnaW4pLT5tYXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2ludCgpLT5hZGQoc3Bl
Y3VsYXRpb25XYXRjaHBvaW50KCkpOwotICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUs
IEpTVmFsdWVSZWdzKG9wMkdQUiksIHJpZ2h0Q2hpbGQuaW5kZXgoKSwgCisgICAgaWYgKG1faml0
LmdyYXBoKCkuZ2xvYmFsT2JqZWN0Rm9yKG1fY3VycmVudE5vZGUtPmNvZGVPcmlnaW4pLT5tYXNx
dWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2ludCgpLT5pc1N0aWxsVmFsaWQoKSkgeyAKKyAgICAg
ICAgbV9qaXQuZ3JhcGgoKS5nbG9iYWxPYmplY3RGb3IobV9jdXJyZW50Tm9kZS0+Y29kZU9yaWdp
biktPm1hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50KCktPmFkZChzcGVjdWxhdGlvbldh
dGNocG9pbnQoKSk7CisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJl
Z3Mob3AyR1BSKSwgcmlnaHRDaGlsZCwKICAgICAgICAgICAgIG1faml0LmJyYW5jaFB0cigKICAg
ICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIAogICAgICAgICAgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKG9wMkdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSks
IApAQCAtMTY1NywxMiArMTY0NiwxMiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlT2Jq
ZWN0VG9PYmplCiAgICAgICAgIEdQUlJlZyBzdHJ1Y3R1cmVHUFIgPSBzdHJ1Y3R1cmUuZ3ByKCk7
CiAKICAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhvcDJHUFIs
IEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBzdHJ1Y3R1cmVHUFIpOwotICAgICAgICBzcGVj
dWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKG9wMkdQUiksIHJpZ2h0Q2hpbGQuaW5k
ZXgoKSwgCisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3Mob3Ay
R1BSKSwgcmlnaHRDaGlsZCwKICAgICAgICAgICAgIG1faml0LmJyYW5jaFB0cigKICAgICAgICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsCiAgICAgICAgICAgICAgICAgc3RydWN0dXJl
R1BSLAogICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0
Lmdsb2JhbERhdGEoKS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOwotICAgICAgICBzcGVjdWxh
dGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKG9wMkdQUiksIHJpZ2h0Q2hpbGQuaW5kZXgo
KSwgCisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3Mob3AyR1BS
KSwgcmlnaHRDaGlsZCwKICAgICAgICAgICAgIG1faml0LmJyYW5jaFRlc3Q4KAogICAgICAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCAKICAgICAgICAgICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhzdHJ1Y3R1cmVHUFIsIFN0cnVjdHVyZTo6dHlwZUluZm9GbGFnc09m
ZnNldCgpKSwgCkBAIC0xNjk3LDE0ICsxNjg2LDEzIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGVPYmplY3RUb09iamUKICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW0zMihWYWx1ZVRydWUp
LCByZXN1bHRHUFIpOwogICAgIGRvbmUubGluaygmbV9qaXQpOwogICAgIAotICAgIGpzVmFsdWVS
ZXN1bHQocmVzdWx0R1BSLCBtX2NvbXBpbGVJbmRleCwgRGF0YUZvcm1hdEpTQm9vbGVhbik7Cisg
ICAganNWYWx1ZVJlc3VsdChyZXN1bHRHUFIsIG1fY3VycmVudE5vZGUsIERhdGFGb3JtYXRKU0Jv
b2xlYW4pOwogfQogCi12b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUGVlcEhvbGVPYmplY3RU
b09iamVjdE9yT3RoZXJFcXVhbGl0eShFZGdlIGxlZnRDaGlsZCwgRWRnZSByaWdodENoaWxkLCBO
b2RlSW5kZXggYnJhbmNoTm9kZUluZGV4KQordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVBl
ZXBIb2xlT2JqZWN0VG9PYmplY3RPck90aGVyRXF1YWxpdHkoRWRnZSBsZWZ0Q2hpbGQsIEVkZ2Ug
cmlnaHRDaGlsZCwgTm9kZSogYnJhbmNoTm9kZSkKIHsKLSAgICBOb2RlJiBicmFuY2hOb2RlID0g
YXQoYnJhbmNoTm9kZUluZGV4KTsKLSAgICBCbG9ja0luZGV4IHRha2VuID0gYnJhbmNoTm9kZS50
YWtlbkJsb2NrSW5kZXgoKTsKLSAgICBCbG9ja0luZGV4IG5vdFRha2VuID0gYnJhbmNoTm9kZS5u
b3RUYWtlbkJsb2NrSW5kZXgoKTsKKyAgICBCbG9ja0luZGV4IHRha2VuID0gYnJhbmNoTm9kZS0+
dGFrZW5CbG9ja0luZGV4KCk7CisgICAgQmxvY2tJbmRleCBub3RUYWtlbiA9IGJyYW5jaE5vZGUt
Pm5vdFRha2VuQmxvY2tJbmRleCgpOwogICAgIAogICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIG9w
MSh0aGlzLCBsZWZ0Q2hpbGQpOwogICAgIEpTVmFsdWVPcGVyYW5kIG9wMih0aGlzLCByaWdodENo
aWxkKTsKQEAgLTE3MTQsOSArMTcwMiw5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQ
ZWVwSG9sZU9iamUKICAgICBHUFJSZWcgb3AyR1BSID0gb3AyLmdwcigpOwogICAgIEdQUlJlZyBy
ZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CiAgICAgCi0gICAgaWYgKG1faml0LmdyYXBoKCkuZ2xv
YmFsT2JqZWN0Rm9yKGJyYW5jaE5vZGUuY29kZU9yaWdpbiktPm1hc3F1ZXJhZGVzQXNVbmRlZmlu
ZWRXYXRjaHBvaW50KCktPmlzU3RpbGxWYWxpZCgpKSB7Ci0gICAgICAgIG1faml0LmdyYXBoKCku
Z2xvYmFsT2JqZWN0Rm9yKGJyYW5jaE5vZGUuY29kZU9yaWdpbiktPm1hc3F1ZXJhZGVzQXNVbmRl
ZmluZWRXYXRjaHBvaW50KCktPmFkZChzcGVjdWxhdGlvbldhdGNocG9pbnQoKSk7Ci0gICAgICAg
IHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3Mob3AxR1BSKSwgbGVmdENoaWxk
LmluZGV4KCksIAorICAgIGlmIChtX2ppdC5ncmFwaCgpLmdsb2JhbE9iamVjdEZvcihtX2N1cnJl
bnROb2RlLT5jb2RlT3JpZ2luKS0+bWFzcXVlcmFkZXNBc1VuZGVmaW5lZFdhdGNocG9pbnQoKS0+
aXNTdGlsbFZhbGlkKCkpIHsKKyAgICAgICAgbV9qaXQuZ3JhcGgoKS5nbG9iYWxPYmplY3RGb3Io
bV9jdXJyZW50Tm9kZS0+Y29kZU9yaWdpbiktPm1hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBv
aW50KCktPmFkZChzcGVjdWxhdGlvbldhdGNocG9pbnQoKSk7CisgICAgICAgIHNwZWN1bGF0aW9u
Q2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3Mob3AxR1BSKSwgbGVmdENoaWxkLCAKICAgICAgICAg
ICAgIG1faml0LmJyYW5jaFB0cigKICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RXF1
YWwsIAogICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKG9wMUdQUiwgSlND
ZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIApAQCAtMTcyNiwxMiArMTcxNCwxMiBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlUGVlcEhvbGVPYmplCiAgICAgICAgIEdQUlJlZyBzdHJ1Y3R1
cmVHUFIgPSBzdHJ1Y3R1cmUuZ3ByKCk7CiAKICAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhvcDFHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBzdHJ1
Y3R1cmVHUFIpOwotICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdz
KG9wMUdQUiksIGxlZnRDaGlsZC5pbmRleCgpLCAKKyAgICAgICAgc3BlY3VsYXRpb25DaGVjayhC
YWRUeXBlLCBKU1ZhbHVlUmVncyhvcDFHUFIpLCBsZWZ0Q2hpbGQsIAogICAgICAgICAgICAgbV9q
aXQuYnJhbmNoUHRyKAogICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgCiAg
ICAgICAgICAgICAgICAgc3RydWN0dXJlR1BSLCAKICAgICAgICAgICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPnN0cmluZ1N0cnVjdHVyZS5n
ZXQoKSkpKTsKLSAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyhv
cDFHUFIpLCBsZWZ0Q2hpbGQuaW5kZXgoKSwgCisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFk
VHlwZSwgSlNWYWx1ZVJlZ3Mob3AxR1BSKSwgbGVmdENoaWxkLCAKICAgICAgICAgICAgIG1faml0
LmJyYW5jaFRlc3Q4KAogICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCAK
ICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdHJ1Y3R1cmVHUFIsIFN0
cnVjdHVyZTo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgCkBAIC0xNzQ0LDkgKzE3MzIsOSBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUGVlcEhvbGVPYmplCiAgICAgICAgIG1faml0LmJy
YW5jaFRlc3Q2NChNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgb3AyR1BSLCBHUFJJbmZvOjp0YWdN
YXNrUmVnaXN0ZXIpOwogICAgIAogICAgIC8vIFdlIGtub3cgdGhhdCB3aXRoaW4gdGhpcyBicmFu
Y2gsIHJpZ2h0Q2hpbGQgbXVzdCBiZSBhIGNlbGwuIAotICAgIGlmIChtX2ppdC5ncmFwaCgpLmds
b2JhbE9iamVjdEZvcihicmFuY2hOb2RlLmNvZGVPcmlnaW4pLT5tYXNxdWVyYWRlc0FzVW5kZWZp
bmVkV2F0Y2hwb2ludCgpLT5pc1N0aWxsVmFsaWQoKSkgewotICAgICAgICBtX2ppdC5ncmFwaCgp
Lmdsb2JhbE9iamVjdEZvcihicmFuY2hOb2RlLmNvZGVPcmlnaW4pLT5tYXNxdWVyYWRlc0FzVW5k
ZWZpbmVkV2F0Y2hwb2ludCgpLT5hZGQoc3BlY3VsYXRpb25XYXRjaHBvaW50KCkpOwotICAgICAg
ICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKG9wMkdQUiksIHJpZ2h0Q2hp
bGQuaW5kZXgoKSwgCisgICAgaWYgKG1faml0LmdyYXBoKCkuZ2xvYmFsT2JqZWN0Rm9yKG1fY3Vy
cmVudE5vZGUtPmNvZGVPcmlnaW4pLT5tYXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2ludCgp
LT5pc1N0aWxsVmFsaWQoKSkgeworICAgICAgICBtX2ppdC5ncmFwaCgpLmdsb2JhbE9iamVjdEZv
cihtX2N1cnJlbnROb2RlLT5jb2RlT3JpZ2luKS0+bWFzcXVlcmFkZXNBc1VuZGVmaW5lZFdhdGNo
cG9pbnQoKS0+YWRkKHNwZWN1bGF0aW9uV2F0Y2hwb2ludCgpKTsKKyAgICAgICAgc3BlY3VsYXRp
b25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyhvcDJHUFIpLCByaWdodENoaWxkLAogICAgICAg
ICAgICAgbV9qaXQuYnJhbmNoUHRyKAogICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpF
cXVhbCwgCiAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mob3AyR1BSLCBK
U0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgCkBAIC0xNzU2LDEyICsxNzQ0LDEyIEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQZWVwSG9sZU9iamUKICAgICAgICAgR1BSUmVnIHN0cnVj
dHVyZUdQUiA9IHN0cnVjdHVyZS5ncHIoKTsKIAogICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKG9wMkdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIHN0
cnVjdHVyZUdQUik7Ci0gICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJl
Z3Mob3AyR1BSKSwgcmlnaHRDaGlsZC5pbmRleCgpLCAKKyAgICAgICAgc3BlY3VsYXRpb25DaGVj
ayhCYWRUeXBlLCBKU1ZhbHVlUmVncyhvcDJHUFIpLCByaWdodENoaWxkLAogICAgICAgICAgICAg
bV9qaXQuYnJhbmNoUHRyKAogICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwg
CiAgICAgICAgICAgICAgICAgc3RydWN0dXJlR1BSLCAKICAgICAgICAgICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPnN0cmluZ1N0cnVjdHVy
ZS5nZXQoKSkpKTsKLSAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVn
cyhvcDJHUFIpLCByaWdodENoaWxkLmluZGV4KCksIAorICAgICAgICBzcGVjdWxhdGlvbkNoZWNr
KEJhZFR5cGUsIEpTVmFsdWVSZWdzKG9wMkdQUiksIHJpZ2h0Q2hpbGQsCiAgICAgICAgICAgICBt
X2ppdC5icmFuY2hUZXN0OCgKICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVy
bywgCiAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RydWN0dXJlR1BS
LCBTdHJ1Y3R1cmU6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIApAQCAtMTc4NSw3ICsxNzczLDcg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVBlZXBIb2xlT2JqZQogICAgICAgICBtX2pp
dC5hbmQ2NChNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKH5UYWdCaXRVbmRlZmluZWQpLCBy
ZXN1bHRHUFIpOwogICAgICAgICAKICAgICAgICAgc3BlY3VsYXRpb25DaGVjaygKLSAgICAgICAg
ICAgIEJhZFR5cGUsIEpTVmFsdWVSZWdzKG9wMkdQUiksIHJpZ2h0Q2hpbGQuaW5kZXgoKSwKKyAg
ICAgICAgICAgIEJhZFR5cGUsIEpTVmFsdWVSZWdzKG9wMkdQUiksIHJpZ2h0Q2hpbGQsCiAgICAg
ICAgICAgICBtX2ppdC5icmFuY2g2NCgKICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
Tm90RXF1YWwsIHJlc3VsdEdQUiwKICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1
c3RlZEltbTY0KFZhbHVlTnVsbCkpKTsKQEAgLTE3OTQsMjMgKzE3ODIsMjMgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZVBlZXBIb2xlT2JqZQogICAgIGp1bXAobm90VGFrZW4pOwogfQog
Ci12b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlSW50ZWdlckNvbXBhcmUoTm9kZSYgbm9kZSwg
TWFjcm9Bc3NlbWJsZXI6OlJlbGF0aW9uYWxDb25kaXRpb24gY29uZGl0aW9uKQordm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZUludGVnZXJDb21wYXJlKE5vZGUqIG5vZGUsIE1hY3JvQXNzZW1i
bGVyOjpSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbikKIHsKLSAgICBTcGVjdWxhdGVJbnRl
Z2VyT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEoKSk7Ci0gICAgU3BlY3VsYXRlSW50ZWdl
ck9wZXJhbmQgb3AyKHRoaXMsIG5vZGUuY2hpbGQyKCkpOworICAgIFNwZWN1bGF0ZUludGVnZXJP
cGVyYW5kIG9wMSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CisgICAgU3BlY3VsYXRlSW50ZWdlck9w
ZXJhbmQgb3AyKHRoaXMsIG5vZGUtPmNoaWxkMigpKTsKICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0
KHRoaXMsIG9wMSwgb3AyKTsKICAgICAKICAgICBtX2ppdC5jb21wYXJlMzIoY29uZGl0aW9uLCBv
cDEuZ3ByKCksIG9wMi5ncHIoKSwgcmVzdWx0LmdwcigpKTsKICAgICAKICAgICAvLyBJZiB3ZSBh
ZGQgYSBEYXRhRm9ybWF0Qm9vbCwgd2Ugc2hvdWxkIHVzZSBpdCBoZXJlLgogICAgIG1faml0Lm9y
MzIoVHJ1c3RlZEltbTMyKFZhbHVlRmFsc2UpLCByZXN1bHQuZ3ByKCkpOwotICAgIGpzVmFsdWVS
ZXN1bHQocmVzdWx0LmdwcigpLCBtX2NvbXBpbGVJbmRleCwgRGF0YUZvcm1hdEpTQm9vbGVhbik7
CisgICAganNWYWx1ZVJlc3VsdChyZXN1bHQuZ3ByKCksIG1fY3VycmVudE5vZGUsIERhdGFGb3Jt
YXRKU0Jvb2xlYW4pOwogfQogCi12b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlRG91YmxlQ29t
cGFyZShOb2RlJiBub2RlLCBNYWNyb0Fzc2VtYmxlcjo6RG91YmxlQ29uZGl0aW9uIGNvbmRpdGlv
bikKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVEb3VibGVDb21wYXJlKE5vZGUqIG5vZGUs
IE1hY3JvQXNzZW1ibGVyOjpEb3VibGVDb25kaXRpb24gY29uZGl0aW9uKQogewotICAgIFNwZWN1
bGF0ZURvdWJsZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwotICAgIFNwZWN1bGF0
ZURvdWJsZU9wZXJhbmQgb3AyKHRoaXMsIG5vZGUuY2hpbGQyKCkpOworICAgIFNwZWN1bGF0ZURv
dWJsZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKKyAgICBTcGVjdWxhdGVEb3Vi
bGVPcGVyYW5kIG9wMih0aGlzLCBub2RlLT5jaGlsZDIoKSk7CiAgICAgR1BSVGVtcG9yYXJ5IHJl
c3VsdCh0aGlzKTsKICAgICAKICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW0zMihWYWx1ZVRydWUp
LCByZXN1bHQuZ3ByKCkpOwpAQCAtMTgxOCwxMyArMTgwNiwxMyBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlRG91YmxlQ29tcGFyCiAgICAgbV9qaXQueG9yNjQoVHJ1c3RlZEltbTMyKHRy
dWUpLCByZXN1bHQuZ3ByKCkpOwogICAgIHRydWVDYXNlLmxpbmsoJm1faml0KTsKICAgICAKLSAg
ICBqc1ZhbHVlUmVzdWx0KHJlc3VsdC5ncHIoKSwgbV9jb21waWxlSW5kZXgsIERhdGFGb3JtYXRK
U0Jvb2xlYW4pOworICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0LmdwcigpLCBub2RlLCBEYXRhRm9y
bWF0SlNCb29sZWFuKTsKIH0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVZhbHVlQWRk
KE5vZGUmIG5vZGUpCit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlVmFsdWVBZGQoTm9kZSog
bm9kZSkKIHsKLSAgICBKU1ZhbHVlT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEoKSk7Ci0g
ICAgSlNWYWx1ZU9wZXJhbmQgb3AyKHRoaXMsIG5vZGUuY2hpbGQyKCkpOworICAgIEpTVmFsdWVP
cGVyYW5kIG9wMSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CisgICAgSlNWYWx1ZU9wZXJhbmQgb3Ay
KHRoaXMsIG5vZGUtPmNoaWxkMigpKTsKICAgICAKICAgICBHUFJSZWcgb3AxR1BSID0gb3AxLmdw
cigpOwogICAgIEdQUlJlZyBvcDJHUFIgPSBvcDIuZ3ByKCk7CkBAIC0xODMyLDEyICsxODIwLDEy
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVWYWx1ZUFkZChOb2QKICAgICBmbHVzaFJl
Z2lzdGVycygpOwogICAgIAogICAgIEdQUlJlc3VsdCByZXN1bHQodGhpcyk7Ci0gICAgaWYgKGlz
S25vd25Ob3ROdW1iZXIobm9kZS5jaGlsZDEoKS5pbmRleCgpKSB8fCBpc0tub3duTm90TnVtYmVy
KG5vZGUuY2hpbGQyKCkuaW5kZXgoKSkpCisgICAgaWYgKGlzS25vd25Ob3ROdW1iZXIobm9kZS0+
Y2hpbGQxKCkubm9kZSgpKSB8fCBpc0tub3duTm90TnVtYmVyKG5vZGUtPmNoaWxkMigpLm5vZGUo
KSkpCiAgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVmFsdWVBZGROb3ROdW1iZXIsIHJl
c3VsdC5ncHIoKSwgb3AxR1BSLCBvcDJHUFIpOwogICAgIGVsc2UKICAgICAgICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25WYWx1ZUFkZCwgcmVzdWx0LmdwcigpLCBvcDFHUFIsIG9wMkdQUik7CiAg
ICAgCi0gICAganNWYWx1ZVJlc3VsdChyZXN1bHQuZ3ByKCksIG1fY29tcGlsZUluZGV4KTsKKyAg
ICBqc1ZhbHVlUmVzdWx0KHJlc3VsdC5ncHIoKSwgbm9kZSk7CiB9CiAKIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVOb25TdHJpbmdDZWxsT3JPdGhlckxvZ2ljYWxOb3QoRWRnZSBub2RlVXNl
LCBib29sIG5lZWRTcGVjdWxhdGlvbkNoZWNrKQpAQCAtMTg0OCw4ICsxODM2LDggQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU5vblN0cmluZ0NlbAogICAgIEdQUlJlZyByZXN1bHRHUFIg
PSByZXN1bHQuZ3ByKCk7CiAgICAgCiAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbm90Q2VsbCA9
IG1faml0LmJyYW5jaFRlc3Q2NChNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgdmFsdWVHUFIsIEdQ
UkluZm86OnRhZ01hc2tSZWdpc3Rlcik7Ci0gICAgaWYgKG1faml0LmdyYXBoKCkuZ2xvYmFsT2Jq
ZWN0Rm9yKG1faml0LmdyYXBoKClbbm9kZVVzZS5pbmRleCgpXS5jb2RlT3JpZ2luKS0+bWFzcXVl
cmFkZXNBc1VuZGVmaW5lZFdhdGNocG9pbnQoKS0+aXNTdGlsbFZhbGlkKCkpIHsKLSAgICAgICAg
bV9qaXQuZ3JhcGgoKS5nbG9iYWxPYmplY3RGb3IobV9qaXQuZ3JhcGgoKVtub2RlVXNlLmluZGV4
KCldLmNvZGVPcmlnaW4pLT5tYXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2ludCgpLT5hZGQo
c3BlY3VsYXRpb25XYXRjaHBvaW50KCkpOworICAgIGlmIChtX2ppdC5ncmFwaCgpLmdsb2JhbE9i
amVjdEZvcihtX2N1cnJlbnROb2RlLT5jb2RlT3JpZ2luKS0+bWFzcXVlcmFkZXNBc1VuZGVmaW5l
ZFdhdGNocG9pbnQoKS0+aXNTdGlsbFZhbGlkKCkpIHsKKyAgICAgICAgbV9qaXQuZ3JhcGgoKS5n
bG9iYWxPYmplY3RGb3IobV9jdXJyZW50Tm9kZS0+Y29kZU9yaWdpbiktPm1hc3F1ZXJhZGVzQXNV
bmRlZmluZWRXYXRjaHBvaW50KCktPmFkZChzcGVjdWxhdGlvbldhdGNocG9pbnQoKSk7CiAKICAg
ICAgICAgaWYgKG5lZWRTcGVjdWxhdGlvbkNoZWNrKSB7CiAgICAgICAgICAgICBzcGVjdWxhdGlv
bkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwgbm9kZVVzZSwKQEAgLTE4ODIs
NyArMTg3MCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVOb25TdHJpbmdDZWwKICAg
ICAgICAgICAgIG1faml0LmJyYW5jaFB0cigKICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6RXF1YWwsIAogICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0cnVj
dHVyZUdQUiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIAotICAgICAgICAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0LmdyYXBoKCkuZ2xvYmFsT2Jq
ZWN0Rm9yKG1faml0LmdyYXBoKClbbm9kZVVzZS5pbmRleCgpXS5jb2RlT3JpZ2luKSkpKTsKKyAg
ICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5ncmFwaCgp
Lmdsb2JhbE9iamVjdEZvcihtX2N1cnJlbnROb2RlLT5jb2RlT3JpZ2luKSkpKTsKIAogICAgICAg
ICBpc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluaygmbV9qaXQpOwogICAgIH0KQEAgLTE5
MDQsNjMgKzE4OTIsNjMgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU5vblN0cmluZ0Nl
bAogICAgIAogICAgIGRvbmUubGluaygmbV9qaXQpOwogICAgIAotICAgIGpzVmFsdWVSZXN1bHQo
cmVzdWx0R1BSLCBtX2NvbXBpbGVJbmRleCwgRGF0YUZvcm1hdEpTQm9vbGVhbik7CisgICAganNW
YWx1ZVJlc3VsdChyZXN1bHRHUFIsIG1fY3VycmVudE5vZGUsIERhdGFGb3JtYXRKU0Jvb2xlYW4p
OwogfQogCi12b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlTG9naWNhbE5vdChOb2RlJiBub2Rl
KQordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUxvZ2ljYWxOb3QoTm9kZSogbm9kZSkKIHsK
LSAgICBpZiAoYXQobm9kZS5jaGlsZDEoKSkuc2hvdWxkU3BlY3VsYXRlTm9uU3RyaW5nQ2VsbE9y
T3RoZXIoKSkgewotICAgICAgICBjb21waWxlTm9uU3RyaW5nQ2VsbE9yT3RoZXJMb2dpY2FsTm90
KG5vZGUuY2hpbGQxKCksCi0gICAgICAgICAgICAhaXNOb25TdHJpbmdDZWxsT3JPdGhlclNwZWN1
bGF0aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKTsKKyAgICBpZiAo
bm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZU5vblN0cmluZ0NlbGxPck90aGVyKCkpIHsK
KyAgICAgICAgY29tcGlsZU5vblN0cmluZ0NlbGxPck90aGVyTG9naWNhbE5vdChub2RlLT5jaGls
ZDEoKSwKKyAgICAgICAgICAgICFpc05vblN0cmluZ0NlbGxPck90aGVyU3BlY3VsYXRpb24obV9z
dGF0ZS5mb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX3R5cGUpKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KLSAgICBpZiAoYXQobm9kZS5jaGlsZDEoKSkuc2hvdWxkU3BlY3VsYXRlSW50ZWdlcigp
KSB7Ci0gICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUuY2hp
bGQxKCkpOworICAgIGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlSW50ZWdlcigp
KSB7CisgICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUtPmNo
aWxkMSgpKTsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCB2YWx1ZSk7CiAgICAg
ICAgIG1faml0LmNvbXBhcmUzMihNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIHZhbHVlLmdwcigpLCBN
YWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDApLCByZXN1bHQuZ3ByKCkpOwogICAgICAgICBt
X2ppdC5vcjMyKFRydXN0ZWRJbW0zMihWYWx1ZUZhbHNlKSwgcmVzdWx0LmdwcigpKTsKLSAgICAg
ICAganNWYWx1ZVJlc3VsdChyZXN1bHQuZ3ByKCksIG1fY29tcGlsZUluZGV4LCBEYXRhRm9ybWF0
SlNCb29sZWFuKTsKKyAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHQuZ3ByKCksIG5vZGUsIERh
dGFGb3JtYXRKU0Jvb2xlYW4pOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGlmIChhdChu
b2RlLmNoaWxkMSgpKS5zaG91bGRTcGVjdWxhdGVOdW1iZXIoKSkgewotICAgICAgICBTcGVjdWxh
dGVEb3VibGVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOworICAgIGlmIChub2Rl
LT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlTnVtYmVyKCkpIHsKKyAgICAgICAgU3BlY3VsYXRl
RG91YmxlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgIEZQUlRl
bXBvcmFyeSBzY3JhdGNoKHRoaXMpOwogICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMp
OwogICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW0zMihWYWx1ZUZhbHNlKSwgcmVzdWx0Lmdw
cigpKTsKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbm9uWmVybyA9IG1faml0LmJyYW5j
aERvdWJsZU5vblplcm8odmFsdWUuZnByKCksIHNjcmF0Y2guZnByKCkpOwogICAgICAgICBtX2pp
dC54b3IzMihUcnVzdGVkSW1tMzIodHJ1ZSksIHJlc3VsdC5ncHIoKSk7CiAgICAgICAgIG5vblpl
cm8ubGluaygmbV9qaXQpOwotICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdC5ncHIoKSwgbV9j
b21waWxlSW5kZXgsIERhdGFGb3JtYXRKU0Jvb2xlYW4pOworICAgICAgICBqc1ZhbHVlUmVzdWx0
KHJlc3VsdC5ncHIoKSwgbm9kZSwgRGF0YUZvcm1hdEpTQm9vbGVhbik7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAgICAgCi0gICAgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiA9IGF0KG5vZGUu
Y2hpbGQxKCkpLnByZWRpY3Rpb24oKTsKKyAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uID0g
bm9kZS0+Y2hpbGQxKCktPnByZWRpY3Rpb24oKTsKICAgICBpZiAoaXNCb29sZWFuU3BlY3VsYXRp
b24ocHJlZGljdGlvbikpIHsKLSAgICAgICAgaWYgKGlzQm9vbGVhblNwZWN1bGF0aW9uKG1fc3Rh
dGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKSB7Ci0gICAgICAgICAgICBTcGVjdWxh
dGVCb29sZWFuT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKKyAgICAgICAgaWYg
KGlzQm9vbGVhblNwZWN1bGF0aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLT5jaGlsZDEoKSkubV90
eXBlKSkgeworICAgICAgICAgICAgU3BlY3VsYXRlQm9vbGVhbk9wZXJhbmQgdmFsdWUodGhpcywg
bm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCB2
YWx1ZSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIG1faml0Lm1vdmUodmFsdWUuZ3ByKCks
IHJlc3VsdC5ncHIoKSk7CiAgICAgICAgICAgICBtX2ppdC54b3I2NChUcnVzdGVkSW1tMzIodHJ1
ZSksIHJlc3VsdC5ncHIoKSk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGpzVmFsdWVSZXN1
bHQocmVzdWx0LmdwcigpLCBtX2NvbXBpbGVJbmRleCwgRGF0YUZvcm1hdEpTQm9vbGVhbik7Cisg
ICAgICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdC5ncHIoKSwgbm9kZSwgRGF0YUZvcm1hdEpT
Qm9vbGVhbik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgCi0gICAg
ICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOworICAgICAgICBK
U1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgIEdQUlRl
bXBvcmFyeSByZXN1bHQodGhpcyk7IC8vIEZJWE1FOiBXZSBjb3VsZCByZXVzZSwgYnV0IG9uIHNw
ZWN1bGF0aW9uIGZhaWwgd291bGQgbmVlZCByZWNvdmVyeSB0byByZXN0b3JlIHRhZyAoYWtpbiB0
byBhZGQpLgogICAgICAgICAKICAgICAgICAgbV9qaXQubW92ZSh2YWx1ZS5ncHIoKSwgcmVzdWx0
LmdwcigpKTsKICAgICAgICAgbV9qaXQueG9yNjQoVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGlu
dDMyX3Q+KFZhbHVlRmFsc2UpKSwgcmVzdWx0LmdwcigpKTsKLSAgICAgICAgc3BlY3VsYXRpb25D
aGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyh2YWx1ZS5ncHIoKSksIG5vZGUuY2hpbGQxKCksIG1f
aml0LmJyYW5jaFRlc3Q2NChKSVRDb21waWxlcjo6Tm9uWmVybywgcmVzdWx0LmdwcigpLCBUcnVz
dGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4ofjEpKSkpOworICAgICAgICBzcGVjdWxhdGlv
bkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKHZhbHVlLmdwcigpKSwgbm9kZS0+Y2hpbGQxKCks
IG1faml0LmJyYW5jaFRlc3Q2NChKSVRDb21waWxlcjo6Tm9uWmVybywgcmVzdWx0LmdwcigpLCBU
cnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4ofjEpKSkpOwogICAgICAgICBtX2ppdC54
b3I2NChUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4oVmFsdWVUcnVlKSksIHJlc3Vs
dC5ncHIoKSk7CiAgICAgICAgIAogICAgICAgICAvLyBJZiB3ZSBhZGQgYSBEYXRhRm9ybWF0Qm9v
bCwgd2Ugc2hvdWxkIHVzZSBpdCBoZXJlLgotICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdC5n
cHIoKSwgbV9jb21waWxlSW5kZXgsIERhdGFGb3JtYXRKU0Jvb2xlYW4pOworICAgICAgICBqc1Zh
bHVlUmVzdWx0KHJlc3VsdC5ncHIoKSwgbm9kZSwgRGF0YUZvcm1hdEpTQm9vbGVhbik7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAgICAgCi0gICAgSlNWYWx1ZU9wZXJhbmQgYXJnMSh0aGlzLCBu
b2RlLmNoaWxkMSgpKTsKKyAgICBKU1ZhbHVlT3BlcmFuZCBhcmcxKHRoaXMsIG5vZGUtPmNoaWxk
MSgpKTsKICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwogICAgIAogICAgIEdQUlJlZyBh
cmcxR1BSID0gYXJnMS5ncHIoKTsKQEAgLTE5NzYsNyArMTk2NCw3IEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVMb2dpY2FsTm90KE4KICAgICAgICAgc2xvd1BhdGhDYWxsKHNsb3dDYXNl
LCB0aGlzLCBkZmdDb252ZXJ0SlNWYWx1ZVRvQm9vbGVhbiwgcmVzdWx0R1BSLCBhcmcxR1BSKSk7
CiAgICAgCiAgICAgbV9qaXQueG9yNjQoVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+
KFZhbHVlVHJ1ZSkpLCByZXN1bHRHUFIpOwotICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0R1BSLCBt
X2NvbXBpbGVJbmRleCwgRGF0YUZvcm1hdEpTQm9vbGVhbiwgVXNlQ2hpbGRyZW5DYWxsZWRFeHBs
aWNpdGx5KTsKKyAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSwgRGF0YUZvcm1hdEpT
Qm9vbGVhbiwgVXNlQ2hpbGRyZW5DYWxsZWRFeHBsaWNpdGx5KTsKIH0KIAogdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6ZW1pdE5vblN0cmluZ0NlbGxPck90aGVyQnJhbmNoKEVkZ2Ugbm9kZVVzZSwgQmxv
Y2tJbmRleCB0YWtlbiwgQmxvY2tJbmRleCBub3RUYWtlbiwgYm9vbCBuZWVkU3BlY3VsYXRpb25D
aGVjaykKQEAgLTE5ODcsMTEgKzE5NzUsMTEgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdE5v
blN0cmluZ0NlbGxPcgogICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKICAg
ICAKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBub3RDZWxsID0gbV9qaXQuYnJhbmNoVGVzdDY0
KE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCB2YWx1ZUdQUiwgR1BSSW5mbzo6dGFnTWFza1JlZ2lz
dGVyKTsKLSAgICBpZiAobV9qaXQuZ3JhcGgoKS5nbG9iYWxPYmplY3RGb3IobV9qaXQuZ3JhcGgo
KVtub2RlVXNlLmluZGV4KCldLmNvZGVPcmlnaW4pLT5tYXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0
Y2hwb2ludCgpLT5pc1N0aWxsVmFsaWQoKSkgewotICAgICAgICBtX2ppdC5ncmFwaCgpLmdsb2Jh
bE9iamVjdEZvcihtX2ppdC5ncmFwaCgpW25vZGVVc2UuaW5kZXgoKV0uY29kZU9yaWdpbiktPm1h
c3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50KCktPmFkZChzcGVjdWxhdGlvbldhdGNocG9p
bnQoKSk7CisgICAgaWYgKG1faml0LmdyYXBoKCkuZ2xvYmFsT2JqZWN0Rm9yKG1fY3VycmVudE5v
ZGUtPmNvZGVPcmlnaW4pLT5tYXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2ludCgpLT5pc1N0
aWxsVmFsaWQoKSkgeworICAgICAgICBtX2ppdC5ncmFwaCgpLmdsb2JhbE9iamVjdEZvcihtX2N1
cnJlbnROb2RlLT5jb2RlT3JpZ2luKS0+bWFzcXVlcmFkZXNBc1VuZGVmaW5lZFdhdGNocG9pbnQo
KS0+YWRkKHNwZWN1bGF0aW9uV2F0Y2hwb2ludCgpKTsKIAogICAgICAgICBpZiAobmVlZFNwZWN1
bGF0aW9uQ2hlY2spIHsKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNW
YWx1ZVJlZ3ModmFsdWVHUFIpLCBub2RlVXNlLmluZGV4KCksIAorICAgICAgICAgICAgc3BlY3Vs
YXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyh2YWx1ZUdQUiksIG5vZGVVc2UsCiAgICAg
ICAgICAgICAgICAgbV9qaXQuYnJhbmNoUHRyKAogICAgICAgICAgICAgICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6RXF1YWwsIAogICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyh2YWx1ZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksCkBAIC0yMDAxLDcgKzE5
ODksNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0Tm9uU3RyaW5nQ2VsbE9yCiAgICAgICAg
IG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3ModmFsdWVHUFIsIEpTQ2VsbDo6
c3RydWN0dXJlT2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKIAogICAgICAgICBpZiAobmVlZFNwZWN1
bGF0aW9uQ2hlY2spIHsKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNW
YWx1ZVJlZ3ModmFsdWVHUFIpLCBub2RlVXNlLmluZGV4KCksIAorICAgICAgICAgICAgc3BlY3Vs
YXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyh2YWx1ZUdQUiksIG5vZGVVc2UsCiAgICAg
ICAgICAgICAgICAgbV9qaXQuYnJhbmNoUHRyKAogICAgICAgICAgICAgICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6RXF1YWwsIAogICAgICAgICAgICAgICAgICAgICBzY3JhdGNoR1BSLApAQCAtMjAx
MCwxMSArMTk5OCwxMSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0Tm9uU3RyaW5nQ2VsbE9y
CiAKICAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgaXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVk
ID0gbV9qaXQuYnJhbmNoVGVzdDgoSklUQ29tcGlsZXI6Olplcm8sIE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKHNjcmF0Y2hHUFIsIFN0cnVjdHVyZTo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1
c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsKIAotICAgICAgICBzcGVjdWxhdGlv
bkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwgbm9kZVVzZS5pbmRleCgpLCAK
KyAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyh2YWx1ZUdQUiks
IG5vZGVVc2UsCiAgICAgICAgICAgICBtX2ppdC5icmFuY2hQdHIoCiAgICAgICAgICAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCAKICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhzY3JhdGNoR1BSLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgCi0g
ICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ3JhcGgo
KS5nbG9iYWxPYmplY3RGb3IobV9qaXQuZ3JhcGgoKVtub2RlVXNlLmluZGV4KCldLmNvZGVPcmln
aW4pKSkpOworICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1f
aml0LmdyYXBoKCkuZ2xvYmFsT2JqZWN0Rm9yKG1fY3VycmVudE5vZGUtPmNvZGVPcmlnaW4pKSkp
OwogCiAgICAgICAgIGlzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKCZtX2ppdCk7CiAg
ICAgfQpAQCAtMjAyNSwyMyArMjAxMywyNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0Tm9u
U3RyaW5nQ2VsbE9yCiAgICAgaWYgKG5lZWRTcGVjdWxhdGlvbkNoZWNrKSB7CiAgICAgICAgIG1f
aml0Lm1vdmUodmFsdWVHUFIsIHNjcmF0Y2hHUFIpOwogICAgICAgICBtX2ppdC5hbmQ2NChNYWNy
b0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKH5UYWdCaXRVbmRlZmluZWQpLCBzY3JhdGNoR1BSKTsK
LSAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyh2YWx1ZUdQUiks
IG5vZGVVc2UuaW5kZXgoKSwgbV9qaXQuYnJhbmNoNjQoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFs
LCBzY3JhdGNoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTY0KFZhbHVlTnVsbCkpKTsK
KyAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyh2YWx1ZUdQUiks
IG5vZGVVc2UsIG1faml0LmJyYW5jaDY0KE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgc2NyYXRj
aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW02NChWYWx1ZU51bGwpKSk7CiAgICAgfQog
ICAgIGp1bXAobm90VGFrZW4pOwogICAgIAotICAgIG5vUmVzdWx0KG1fY29tcGlsZUluZGV4KTsK
KyAgICBub1Jlc3VsdChub2RlKTsKIH0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdEJyYW5j
aChOb2RlJiBub2RlKQordm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdEJyYW5jaChOb2RlKiBub2Rl
KQogewotICAgIEJsb2NrSW5kZXggdGFrZW4gPSBub2RlLnRha2VuQmxvY2tJbmRleCgpOwotICAg
IEJsb2NrSW5kZXggbm90VGFrZW4gPSBub2RlLm5vdFRha2VuQmxvY2tJbmRleCgpOworICAgIEJs
b2NrSW5kZXggdGFrZW4gPSBub2RlLT50YWtlbkJsb2NrSW5kZXgoKTsKKyAgICBCbG9ja0luZGV4
IG5vdFRha2VuID0gbm9kZS0+bm90VGFrZW5CbG9ja0luZGV4KCk7CisgICAgCisgICAgaWYgKG5v
ZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVOb25TdHJpbmdDZWxsT3JPdGhlcigpKSB7Cisg
ICAgICAgIGVtaXROb25TdHJpbmdDZWxsT3JPdGhlckJyYW5jaChub2RlLT5jaGlsZDEoKSwgdGFr
ZW4sIG5vdFRha2VuLCAKKyAgICAgICAgICAgICFpc05vblN0cmluZ0NlbGxPck90aGVyU3BlY3Vs
YXRpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX3R5cGUpKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KICAgICAKLSAgICBpZiAoYXQobm9kZS5jaGlsZDEoKSkuc2hvdWxkU3Bl
Y3VsYXRlTm9uU3RyaW5nQ2VsbE9yT3RoZXIoKSkgewotICAgICAgICBlbWl0Tm9uU3RyaW5nQ2Vs
bE9yT3RoZXJCcmFuY2gobm9kZS5jaGlsZDEoKSwgdGFrZW4sIG5vdFRha2VuLCAKLSAgICAgICAg
ICAgICFpc05vblN0cmluZ0NlbGxPck90aGVyU3BlY3VsYXRpb24obV9zdGF0ZS5mb3JOb2RlKG5v
ZGUuY2hpbGQxKCkpLm1fdHlwZSkpOwotICAgIH0gZWxzZSBpZiAoYXQobm9kZS5jaGlsZDEoKSku
c2hvdWxkU3BlY3VsYXRlTnVtYmVyKCkpIHsKLSAgICAgICAgaWYgKGF0KG5vZGUuY2hpbGQxKCkp
LnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKSkgeworICAgIGlmIChub2RlLT5jaGlsZDEoKS0+c2hv
dWxkU3BlY3VsYXRlTnVtYmVyKCkpIHsKKyAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91
bGRTcGVjdWxhdGVJbnRlZ2VyKCkpIHsKICAgICAgICAgICAgIGJvb2wgaW52ZXJ0ID0gZmFsc2U7
CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlmICh0YWtlbiA9PSBuZXh0QmxvY2soKSkgewpA
QCAtMjA1MSwxNDcgKzIwNDIsMTQ4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRCcmFuY2go
Tm9kZSYgbm8KICAgICAgICAgICAgICAgICBub3RUYWtlbiA9IHRtcDsKICAgICAgICAgICAgIH0K
IAotICAgICAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS5j
aGlsZDEoKSk7CisgICAgICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCB2YWx1ZSh0aGlz
LCBub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgICAgICBicmFuY2hUZXN0MzIoaW52ZXJ0ID8gTWFj
cm9Bc3NlbWJsZXI6Olplcm8gOiBNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgdmFsdWUuZ3ByKCks
IHRha2VuKTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIFNwZWN1bGF0ZURvdWJsZU9w
ZXJhbmQgdmFsdWUodGhpcywgbm9kZS5jaGlsZDEoKSk7CisgICAgICAgICAgICBTcGVjdWxhdGVE
b3VibGVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgICAgIEZQ
UlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOwogICAgICAgICAgICAgYnJhbmNoRG91YmxlTm9uWmVy
byh2YWx1ZS5mcHIoKSwgc2NyYXRjaC5mcHIoKSwgdGFrZW4pOwogICAgICAgICB9CiAgICAgICAg
IAogICAgICAgICBqdW1wKG5vdFRha2VuKTsKICAgICAgICAgCi0gICAgICAgIG5vUmVzdWx0KG1f
Y29tcGlsZUluZGV4KTsKLSAgICB9IGVsc2UgewotICAgICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1
ZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKLSAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWUu
Z3ByKCk7CisgICAgICAgIG5vUmVzdWx0KG5vZGUpOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS0+Y2hpbGQxKCkpOworICAgIEdQ
UlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOwogICAgICAgICAKLSAgICAgICAgYm9vbCBwcmVk
aWN0Qm9vbGVhbiA9IGlzQm9vbGVhblNwZWN1bGF0aW9uKGF0KG5vZGUuY2hpbGQxKCkpLnByZWRp
Y3Rpb24oKSk7CisgICAgYm9vbCBwcmVkaWN0Qm9vbGVhbiA9IGlzQm9vbGVhblNwZWN1bGF0aW9u
KG5vZGUtPmNoaWxkMSgpLT5wcmVkaWN0aW9uKCkpOwogICAgIAotICAgICAgICBpZiAocHJlZGlj
dEJvb2xlYW4pIHsKLSAgICAgICAgICAgIGlmIChpc0Jvb2xlYW5TcGVjdWxhdGlvbihtX3N0YXRl
LmZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSkgewotICAgICAgICAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpSZXN1bHRDb25kaXRpb24gY29uZGl0aW9uID0gTWFjcm9Bc3NlbWJsZXI6Ok5v
blplcm87Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYgKHRha2VuID09IG5l
eHRCbG9jaygpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbmRpdGlvbiA9IE1hY3JvQXNzZW1i
bGVyOjpaZXJvOwotICAgICAgICAgICAgICAgICAgICBCbG9ja0luZGV4IHRtcCA9IHRha2VuOwot
ICAgICAgICAgICAgICAgICAgICB0YWtlbiA9IG5vdFRha2VuOwotICAgICAgICAgICAgICAgICAg
ICBub3RUYWtlbiA9IHRtcDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgCi0g
ICAgICAgICAgICAgICAgYnJhbmNoVGVzdDMyKGNvbmRpdGlvbiwgdmFsdWVHUFIsIFRydXN0ZWRJ
bW0zMih0cnVlKSwgdGFrZW4pOwotICAgICAgICAgICAgICAgIGp1bXAobm90VGFrZW4pOwotICAg
ICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBicmFuY2g2NChNYWNyb0Fzc2VtYmxl
cjo6RXF1YWwsIHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTY0KEpTVmFsdWU6
OmVuY29kZShqc0Jvb2xlYW4oZmFsc2UpKSksIG5vdFRha2VuKTsKLSAgICAgICAgICAgICAgICBi
cmFuY2g2NChNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6
VHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4odHJ1ZSkpKSwgdGFrZW4pOwor
ICAgIGlmIChwcmVkaWN0Qm9vbGVhbikgeworICAgICAgICBpZiAoaXNCb29sZWFuU3BlY3VsYXRp
b24obV9zdGF0ZS5mb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX3R5cGUpKSB7CisgICAgICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6UmVzdWx0Q29uZGl0aW9uIGNvbmRpdGlvbiA9IE1hY3JvQXNzZW1i
bGVyOjpOb25aZXJvOwogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIHNwZWN1bGF0
aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCBub2RlLmNoaWxkMSgpLCBt
X2ppdC5qdW1wKCkpOworICAgICAgICAgICAgaWYgKHRha2VuID09IG5leHRCbG9jaygpKSB7Cisg
ICAgICAgICAgICAgICAgY29uZGl0aW9uID0gTWFjcm9Bc3NlbWJsZXI6Olplcm87CisgICAgICAg
ICAgICAgICAgQmxvY2tJbmRleCB0bXAgPSB0YWtlbjsKKyAgICAgICAgICAgICAgICB0YWtlbiA9
IG5vdFRha2VuOworICAgICAgICAgICAgICAgIG5vdFRha2VuID0gdG1wOwogICAgICAgICAgICAg
fQotICAgICAgICAgICAgdmFsdWUudXNlKCk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAg
ICBicmFuY2hUZXN0MzIoY29uZGl0aW9uLCB2YWx1ZUdQUiwgVHJ1c3RlZEltbTMyKHRydWUpLCB0
YWtlbik7CisgICAgICAgICAgICBqdW1wKG5vdFRha2VuKTsKICAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7Ci0gICAgICAgICAgICBHUFJSZWcg
cmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgICAgICAgICAgYnJhbmNoNjQoTWFjcm9Bc3Nl
bWJsZXI6OkVxdWFsLCB2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW02NChKU1Zh
bHVlOjplbmNvZGUoanNCb29sZWFuKGZhbHNlKSkpLCBub3RUYWtlbik7CisgICAgICAgICAgICBi
cmFuY2g2NChNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6
VHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4odHJ1ZSkpKSwgdGFrZW4pOwor
ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBK
U1ZhbHVlUmVncyh2YWx1ZUdQUiksIG5vZGUtPmNoaWxkMSgpLCBtX2ppdC5qdW1wKCkpOworICAg
ICAgICB9CisgICAgICAgIHZhbHVlLnVzZSgpOworICAgIH0gZWxzZSB7CisgICAgICAgIEdQUlRl
bXBvcmFyeSByZXN1bHQodGhpcyk7CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQu
Z3ByKCk7CiAgICAgICAgIAotICAgICAgICAgICAgYnJhbmNoNjQoTWFjcm9Bc3NlbWJsZXI6OkVx
dWFsLCB2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNv
ZGUoanNOdW1iZXIoMCkpKSwgbm90VGFrZW4pOwotICAgICAgICAgICAgYnJhbmNoNjQoTWFjcm9B
c3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgdmFsdWVHUFIsIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJS
ZWdpc3RlciwgdGFrZW4pOworICAgICAgICBicmFuY2g2NChNYWNyb0Fzc2VtYmxlcjo6RXF1YWws
IHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShq
c051bWJlcigwKSkpLCBub3RUYWtlbik7CisgICAgICAgIGJyYW5jaDY0KE1hY3JvQXNzZW1ibGVy
OjpBYm92ZU9yRXF1YWwsIHZhbHVlR1BSLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIs
IHRha2VuKTsKICAgICAKLSAgICAgICAgICAgIGlmICghcHJlZGljdEJvb2xlYW4pIHsKLSAgICAg
ICAgICAgICAgICBicmFuY2g2NChNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIHZhbHVlR1BSLCBNYWNy
b0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oZmFsc2Up
KSksIG5vdFRha2VuKTsKLSAgICAgICAgICAgICAgICBicmFuY2g2NChNYWNyb0Fzc2VtYmxlcjo6
RXF1YWwsIHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVu
Y29kZShqc0Jvb2xlYW4odHJ1ZSkpKSwgdGFrZW4pOwotICAgICAgICAgICAgfQorICAgICAgICBp
ZiAoIXByZWRpY3RCb29sZWFuKSB7CisgICAgICAgICAgICBicmFuY2g2NChNYWNyb0Fzc2VtYmxl
cjo6RXF1YWwsIHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTY0KEpTVmFsdWU6
OmVuY29kZShqc0Jvb2xlYW4oZmFsc2UpKSksIG5vdFRha2VuKTsKKyAgICAgICAgICAgIGJyYW5j
aDY0KE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgdmFsdWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVz
dGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbih0cnVlKSkpLCB0YWtlbik7CisgICAg
ICAgIH0KICAgICAKLSAgICAgICAgICAgIHZhbHVlLnVzZSgpOworICAgICAgICB2YWx1ZS51c2Uo
KTsKICAgICAKLSAgICAgICAgICAgIHNpbGVudFNwaWxsQWxsUmVnaXN0ZXJzKHJlc3VsdEdQUik7
Ci0gICAgICAgICAgICBjYWxsT3BlcmF0aW9uKGRmZ0NvbnZlcnRKU1ZhbHVlVG9Cb29sZWFuLCBy
ZXN1bHRHUFIsIHZhbHVlR1BSKTsKLSAgICAgICAgICAgIHNpbGVudEZpbGxBbGxSZWdpc3RlcnMo
cmVzdWx0R1BSKTsKKyAgICAgICAgc2lsZW50U3BpbGxBbGxSZWdpc3RlcnMocmVzdWx0R1BSKTsK
KyAgICAgICAgY2FsbE9wZXJhdGlvbihkZmdDb252ZXJ0SlNWYWx1ZVRvQm9vbGVhbiwgcmVzdWx0
R1BSLCB2YWx1ZUdQUik7CisgICAgICAgIHNpbGVudEZpbGxBbGxSZWdpc3RlcnMocmVzdWx0R1BS
KTsKICAgICAKLSAgICAgICAgICAgIGJyYW5jaFRlc3QzMihNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVy
bywgcmVzdWx0R1BSLCB0YWtlbik7Ci0gICAgICAgICAgICBqdW1wKG5vdFRha2VuKTsKLSAgICAg
ICAgfQotICAgICAgICAKLSAgICAgICAgbm9SZXN1bHQobV9jb21waWxlSW5kZXgsIFVzZUNoaWxk
cmVuQ2FsbGVkRXhwbGljaXRseSk7CisgICAgICAgIGJyYW5jaFRlc3QzMihNYWNyb0Fzc2VtYmxl
cjo6Tm9uWmVybywgcmVzdWx0R1BSLCB0YWtlbik7CisgICAgICAgIGp1bXAobm90VGFrZW4pOwog
ICAgIH0KKyAgICAgICAgCisgICAgbm9SZXN1bHQobm9kZSwgVXNlQ2hpbGRyZW5DYWxsZWRFeHBs
aWNpdGx5KTsKIH0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQor
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogewotICAgIE5vZGVUeXBl
IG9wID0gbm9kZS5vcCgpOworICAgIE5vZGVUeXBlIG9wID0gbm9kZS0+b3AoKTsKICAgICAKICAg
ICBzd2l0Y2ggKG9wKSB7CiAgICAgY2FzZSBKU0NvbnN0YW50OgotICAgICAgICBpbml0Q29uc3Rh
bnRJbmZvKG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAgaW5pdENvbnN0YW50SW5mbyhub2RlKTsK
ICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIFBoYW50b21Bcmd1bWVudHM6Ci0gICAgICAgIGlu
aXRDb25zdGFudEluZm8obV9jb21waWxlSW5kZXgpOworICAgICAgICBpbml0Q29uc3RhbnRJbmZv
KG5vZGUpOwogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgV2Vha0pTQ29uc3RhbnQ6Ci0gICAg
ICAgIG1faml0LmFkZFdlYWtSZWZlcmVuY2Uobm9kZS53ZWFrQ29uc3RhbnQoKSk7Ci0gICAgICAg
IGluaXRDb25zdGFudEluZm8obV9jb21waWxlSW5kZXgpOworICAgICAgICBtX2ppdC5hZGRXZWFr
UmVmZXJlbmNlKG5vZGUtPndlYWtDb25zdGFudCgpKTsKKyAgICAgICAgaW5pdENvbnN0YW50SW5m
byhub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgIAogICAgIGNhc2UgSWRlbnRpdHk6IHsK
ICAgICAgICAgLy8gVGhpcyBjb3VsZCBiZSBkb25lIGEgbG90IGJldHRlci4gV2UgdGFrZSB0aGUg
Y2hlYXAgd2F5IG91dCBiZWNhdXNlIElkZW50aXR5CiAgICAgICAgIC8vIGlzIG9ubHkgZ29pbmcg
dG8gc3RpY2sgYXJvdW5kIGFmdGVyIENTRSBpZiB3ZSBoYWQgcHJlZGljdGlvbiB3ZWlyZG5lc3Mu
Ci0gICAgICAgIEpTVmFsdWVPcGVyYW5kIG9wZXJhbmQodGhpcywgbm9kZS5jaGlsZDEoKSk7Cisg
ICAgICAgIEpTVmFsdWVPcGVyYW5kIG9wZXJhbmQodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwogICAg
ICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIG9wZXJhbmQpOwogICAgICAgICBtX2ppdC5t
b3ZlKG9wZXJhbmQuZ3ByKCksIHJlc3VsdC5ncHIoKSk7Ci0gICAgICAgIGpzVmFsdWVSZXN1bHQo
cmVzdWx0LmdwcigpLCBtX2NvbXBpbGVJbmRleCk7CisgICAgICAgIGpzVmFsdWVSZXN1bHQocmVz
dWx0LmdwcigpLCBub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAgY2FzZSBHZXRM
b2NhbDogewotICAgICAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uID0gbm9kZS52YXJpYWJs
ZUFjY2Vzc0RhdGEoKS0+cHJlZGljdGlvbigpOwotICAgICAgICBBYnN0cmFjdFZhbHVlJiB2YWx1
ZSA9IGJsb2NrKCktPnZhbHVlc0F0SGVhZC5vcGVyYW5kKG5vZGUubG9jYWwoKSk7CisgICAgICAg
IFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24gPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+
cHJlZGljdGlvbigpOworICAgICAgICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSA9IGJsb2NrKCktPnZh
bHVlc0F0SGVhZC5vcGVyYW5kKG5vZGUtPmxvY2FsKCkpOwogCiAgICAgICAgIC8vIElmIHdlIGhh
dmUgbm8gcHJlZGljdGlvbiBmb3IgdGhpcyBsb2NhbCwgdGhlbiBkb24ndCBhdHRlbXB0IHRvIGNv
bXBpbGUuCiAgICAgICAgIGlmIChwcmVkaWN0aW9uID09IFNwZWNOb25lKSB7Ci0gICAgICAgICAg
ICB0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihJbmFkZXF1YXRlQ292ZXJhZ2UsIEpTVmFs
dWVSZWdzKCksIE5vTm9kZSk7CisgICAgICAgICAgICB0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1
dGlvbihJbmFkZXF1YXRlQ292ZXJhZ2UsIEpTVmFsdWVSZWdzKCksIDApOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIGlmICghbm9kZS52YXJpYWJsZUFj
Y2Vzc0RhdGEoKS0+aXNDYXB0dXJlZCgpKSB7CisgICAgICAgIGlmICghbm9kZS0+dmFyaWFibGVB
Y2Nlc3NEYXRhKCktPmlzQ2FwdHVyZWQoKSkgewogICAgICAgICAgICAgLy8gSWYgdGhlIENGQSBp
cyB0cmFja2luZyB0aGlzIHZhcmlhYmxlIGFuZCBpdCBmb3VuZCB0aGF0IHRoZSB2YXJpYWJsZQog
ICAgICAgICAgICAgLy8gY2Fubm90IGhhdmUgYmVlbiBhc3NpZ25lZCwgdGhlbiBkb24ndCBhdHRl
bXB0IHRvIHByb2NlZWQuCiAgICAgICAgICAgICBpZiAodmFsdWUuaXNDbGVhcigpKSB7Ci0gICAg
ICAgICAgICAgICAgdGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oSW5hZGVxdWF0ZUNvdmVy
YWdlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUpOworICAgICAgICAgICAgICAgIHRlcm1pbmF0ZVNw
ZWN1bGF0aXZlRXhlY3V0aW9uKEluYWRlcXVhdGVDb3ZlcmFnZSwgSlNWYWx1ZVJlZ3MoKSwgMCk7
CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKLSAg
ICAgICAgICAgIGlmIChub2RlLnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5zaG91bGRVc2VEb3VibGVG
b3JtYXQoKSkgeworICAgICAgICAgICAgaWYgKG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5z
aG91bGRVc2VEb3VibGVGb3JtYXQoKSkgewogICAgICAgICAgICAgICAgIEZQUlRlbXBvcmFyeSBy
ZXN1bHQodGhpcyk7Ci0gICAgICAgICAgICAgICAgbV9qaXQubG9hZERvdWJsZShKSVRDb21waWxl
cjo6YWRkcmVzc0Zvcihub2RlLmxvY2FsKCkpLCByZXN1bHQuZnByKCkpOwotICAgICAgICAgICAg
ICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIgPSBub2RlLnZpcnR1YWxSZWdpc3Rl
cigpOworICAgICAgICAgICAgICAgIG1faml0LmxvYWREb3VibGUoSklUQ29tcGlsZXI6OmFkZHJl
c3NGb3Iobm9kZS0+bG9jYWwoKSksIHJlc3VsdC5mcHIoKSk7CisgICAgICAgICAgICAgICAgVmly
dHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciA9IG5vZGUtPnZpcnR1YWxSZWdpc3RlcigpOwog
ICAgICAgICAgICAgICAgIG1fZnBycy5yZXRhaW4ocmVzdWx0LmZwcigpLCB2aXJ0dWFsUmVnaXN0
ZXIsIFNwaWxsT3JkZXJEb3VibGUpOwotICAgICAgICAgICAgICAgIG1fZ2VuZXJhdGlvbkluZm9b
dmlydHVhbFJlZ2lzdGVyXS5pbml0RG91YmxlKG1fY29tcGlsZUluZGV4LCBub2RlLnJlZkNvdW50
KCksIHJlc3VsdC5mcHIoKSk7CisgICAgICAgICAgICAgICAgbV9nZW5lcmF0aW9uSW5mb1t2aXJ0
dWFsUmVnaXN0ZXJdLmluaXREb3VibGUobm9kZSwgbm9kZS0+cmVmQ291bnQoKSwgcmVzdWx0LmZw
cigpKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IAogICAgICAgICAgICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbih2YWx1ZS5tX3R5cGUpKSB7CiAg
ICAgICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKLSAgICAgICAgICAgICAg
ICBtX2ppdC5sb2FkMzIoSklUQ29tcGlsZXI6OnBheWxvYWRGb3Iobm9kZS5sb2NhbCgpKSwgcmVz
dWx0LmdwcigpKTsKKyAgICAgICAgICAgICAgICBtX2ppdC5sb2FkMzIoSklUQ29tcGlsZXI6OnBh
eWxvYWRGb3Iobm9kZS0+bG9jYWwoKSksIHJlc3VsdC5ncHIoKSk7CiAgICAgICAgICAgICAgICAg
CiAgICAgICAgICAgICAgICAgLy8gTGlrZSBpbnRlZ2VyUmVzdWx0LCBidXQgZG9uJ3QgdXNlQ2hp
bGRyZW4gLSBvdXIgY2hpbGRyZW4gYXJlIHBoaSBub2RlcywKICAgICAgICAgICAgICAgICAvLyBh
bmQgZG9uJ3QgcmVwcmVzZW50IHZhbHVlcyB3aXRoaW4gdGhpcyBkYXRhZmxvdyB3aXRoIHZpcnR1
YWwgcmVnaXN0ZXJzLgotICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVn
aXN0ZXIgPSBub2RlLnZpcnR1YWxSZWdpc3RlcigpOworICAgICAgICAgICAgICAgIFZpcnR1YWxS
ZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIgPSBub2RlLT52aXJ0dWFsUmVnaXN0ZXIoKTsKICAgICAg
ICAgICAgICAgICBtX2dwcnMucmV0YWluKHJlc3VsdC5ncHIoKSwgdmlydHVhbFJlZ2lzdGVyLCBT
cGlsbE9yZGVySW50ZWdlcik7Ci0gICAgICAgICAgICAgICAgbV9nZW5lcmF0aW9uSW5mb1t2aXJ0
dWFsUmVnaXN0ZXJdLmluaXRJbnRlZ2VyKG1fY29tcGlsZUluZGV4LCBub2RlLnJlZkNvdW50KCks
IHJlc3VsdC5ncHIoKSk7CisgICAgICAgICAgICAgICAgbV9nZW5lcmF0aW9uSW5mb1t2aXJ0dWFs
UmVnaXN0ZXJdLmluaXRJbnRlZ2VyKG5vZGUsIG5vZGUtPnJlZkNvdW50KCksIHJlc3VsdC5ncHIo
KSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAog
ICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwotICAgICAgICBtX2ppdC5sb2FkNjQo
SklUQ29tcGlsZXI6OmFkZHJlc3NGb3Iobm9kZS5sb2NhbCgpKSwgcmVzdWx0LmdwcigpKTsKKyAg
ICAgICAgbV9qaXQubG9hZDY0KEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKG5vZGUtPmxvY2FsKCkp
LCByZXN1bHQuZ3ByKCkpOwogCiAgICAgICAgIC8vIExpa2UganNWYWx1ZVJlc3VsdCwgYnV0IGRv
bid0IHVzZUNoaWxkcmVuIC0gb3VyIGNoaWxkcmVuIGFyZSBwaGkgbm9kZXMsCiAgICAgICAgIC8v
IGFuZCBkb24ndCByZXByZXNlbnQgdmFsdWVzIHdpdGhpbiB0aGlzIGRhdGFmbG93IHdpdGggdmly
dHVhbCByZWdpc3RlcnMuCi0gICAgICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIg
PSBub2RlLnZpcnR1YWxSZWdpc3RlcigpOworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVh
bFJlZ2lzdGVyID0gbm9kZS0+dmlydHVhbFJlZ2lzdGVyKCk7CiAgICAgICAgIG1fZ3Bycy5yZXRh
aW4ocmVzdWx0LmdwcigpLCB2aXJ0dWFsUmVnaXN0ZXIsIFNwaWxsT3JkZXJKUyk7CiAKICAgICAg
ICAgRGF0YUZvcm1hdCBmb3JtYXQ7Ci0gICAgICAgIGlmIChub2RlLnZhcmlhYmxlQWNjZXNzRGF0
YSgpLT5pc0NhcHR1cmVkKCkpCisgICAgICAgIGlmIChub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEo
KS0+aXNDYXB0dXJlZCgpKQogICAgICAgICAgICAgZm9ybWF0ID0gRGF0YUZvcm1hdEpTOwogICAg
ICAgICBlbHNlIGlmIChpc0NlbGxTcGVjdWxhdGlvbih2YWx1ZS5tX3R5cGUpKQogICAgICAgICAg
ICAgZm9ybWF0ID0gRGF0YUZvcm1hdEpTQ2VsbDsKQEAgLTIyMDAsMTYgKzIxOTIsMTYgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICBlbHNlCiAgICAg
ICAgICAgICBmb3JtYXQgPSBEYXRhRm9ybWF0SlM7CiAKLSAgICAgICAgbV9nZW5lcmF0aW9uSW5m
b1t2aXJ0dWFsUmVnaXN0ZXJdLmluaXRKU1ZhbHVlKG1fY29tcGlsZUluZGV4LCBub2RlLnJlZkNv
dW50KCksIHJlc3VsdC5ncHIoKSwgZm9ybWF0KTsKKyAgICAgICAgbV9nZW5lcmF0aW9uSW5mb1t2
aXJ0dWFsUmVnaXN0ZXJdLmluaXRKU1ZhbHVlKG5vZGUsIG5vZGUtPnJlZkNvdW50KCksIHJlc3Vs
dC5ncHIoKSwgZm9ybWF0KTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAgY2FzZSBHZXRM
b2NhbFVubGlua2VkOiB7CiAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CiAgICAg
ICAgIAotICAgICAgICBtX2ppdC5sb2FkNjQoSklUQ29tcGlsZXI6OmFkZHJlc3NGb3Iobm9kZS51
bmxpbmtlZExvY2FsKCkpLCByZXN1bHQuZ3ByKCkpOworICAgICAgICBtX2ppdC5sb2FkNjQoSklU
Q29tcGlsZXI6OmFkZHJlc3NGb3Iobm9kZS0+dW5saW5rZWRMb2NhbCgpKSwgcmVzdWx0Lmdwcigp
KTsKICAgICAgICAgCi0gICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0LmdwcigpLCBtX2NvbXBp
bGVJbmRleCk7CisgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0LmdwcigpLCBub2RlKTsKICAg
ICAgICAgYnJlYWs7CiAgICAgfQogCkBAIC0yMjIwLDU1ICsyMjEyLDU1IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgLy8gc3RhY2suCiAgICAgICAg
IGNvbXBpbGVNb3ZIaW50KG5vZGUpOwogICAgICAgICAKLSAgICAgICAgaWYgKCFub2RlLnZhcmlh
YmxlQWNjZXNzRGF0YSgpLT5pc0NhcHR1cmVkKCkgJiYgIW1faml0LmdyYXBoKCkuaXNDcmVhdGVk
VGhpc0FyZ3VtZW50KG5vZGUubG9jYWwoKSkpIHsKLSAgICAgICAgICAgIGlmIChub2RlLnZhcmlh
YmxlQWNjZXNzRGF0YSgpLT5zaG91bGRVc2VEb3VibGVGb3JtYXQoKSkgewotICAgICAgICAgICAg
ICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS5jaGlsZDEoKSwgRm9y
d2FyZFNwZWN1bGF0aW9uKTsKLSAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZURvdWJsZSh2YWx1
ZS5mcHIoKSwgSklUQ29tcGlsZXI6OmFkZHJlc3NGb3Iobm9kZS5sb2NhbCgpKSk7Ci0gICAgICAg
ICAgICAgICAgbm9SZXN1bHQobV9jb21waWxlSW5kZXgpOworICAgICAgICBpZiAoIW5vZGUtPnZh
cmlhYmxlQWNjZXNzRGF0YSgpLT5pc0NhcHR1cmVkKCkgJiYgIW1faml0LmdyYXBoKCkuaXNDcmVh
dGVkVGhpc0FyZ3VtZW50KG5vZGUtPmxvY2FsKCkpKSB7CisgICAgICAgICAgICBpZiAobm9kZS0+
dmFyaWFibGVBY2Nlc3NEYXRhKCktPnNob3VsZFVzZURvdWJsZUZvcm1hdCgpKSB7CisgICAgICAg
ICAgICAgICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLT5jaGlsZDEo
KSwgRm9yd2FyZFNwZWN1bGF0aW9uKTsKKyAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZURvdWJs
ZSh2YWx1ZS5mcHIoKSwgSklUQ29tcGlsZXI6OmFkZHJlc3NGb3Iobm9kZS0+bG9jYWwoKSkpOwor
ICAgICAgICAgICAgICAgIG5vUmVzdWx0KG5vZGUpOwogICAgICAgICAgICAgICAgIC8vIEluZGlj
YXRlIHRoYXQgaXQncyBubyBsb25nZXIgbmVjZXNzYXJ5IHRvIHJldHJpZXZlIHRoZSB2YWx1ZSBv
ZgogICAgICAgICAgICAgICAgIC8vIHRoaXMgYnl0ZWNvZGUgdmFyaWFibGUgZnJvbSByZWdpc3Rl
cnMgb3Igb3RoZXIgbG9jYXRpb25zIGluIHRoZSBzdGFjaywKICAgICAgICAgICAgICAgICAvLyBi
dXQgdGhhdCBpdCBpcyBzdG9yZWQgYXMgYSBkb3VibGUuCi0gICAgICAgICAgICAgICAgcmVjb3Jk
U2V0TG9jYWwobm9kZS5sb2NhbCgpLCBWYWx1ZVNvdXJjZShEb3VibGVJbkpTU3RhY2spKTsKKyAg
ICAgICAgICAgICAgICByZWNvcmRTZXRMb2NhbChub2RlLT5sb2NhbCgpLCBWYWx1ZVNvdXJjZShE
b3VibGVJbkpTU3RhY2spKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0K
ICAgICAgICAgCi0gICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0ZWRUeXBlID0gbm9k
ZS52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+YXJndW1lbnRBd2FyZVByZWRpY3Rpb24oKTsKKyAgICAg
ICAgICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3RlZFR5cGUgPSBub2RlLT52YXJpYWJsZUFjY2Vz
c0RhdGEoKS0+YXJndW1lbnRBd2FyZVByZWRpY3Rpb24oKTsKICAgICAgICAgICAgIGlmIChpc0lu
dDMyU3BlY3VsYXRpb24ocHJlZGljdGVkVHlwZSkpIHsKLSAgICAgICAgICAgICAgICBTcGVjdWxh
dGVJbnRlZ2VyT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLmNoaWxkMSgpLCBGb3J3YXJkU3BlY3Vs
YXRpb24pOwotICAgICAgICAgICAgICAgIG1faml0LnN0b3JlMzIodmFsdWUuZ3ByKCksIEpJVENv
bXBpbGVyOjpwYXlsb2FkRm9yKG5vZGUubG9jYWwoKSkpOwotICAgICAgICAgICAgICAgIG5vUmVz
dWx0KG1fY29tcGlsZUluZGV4KTsKLSAgICAgICAgICAgICAgICByZWNvcmRTZXRMb2NhbChub2Rl
LmxvY2FsKCksIFZhbHVlU291cmNlKEludDMySW5KU1N0YWNrKSk7CisgICAgICAgICAgICAgICAg
U3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS0+Y2hpbGQxKCksIEZvcndh
cmRTcGVjdWxhdGlvbik7CisgICAgICAgICAgICAgICAgbV9qaXQuc3RvcmUzMih2YWx1ZS5ncHIo
KSwgSklUQ29tcGlsZXI6OnBheWxvYWRGb3Iobm9kZS0+bG9jYWwoKSkpOworICAgICAgICAgICAg
ICAgIG5vUmVzdWx0KG5vZGUpOworICAgICAgICAgICAgICAgIHJlY29yZFNldExvY2FsKG5vZGUt
PmxvY2FsKCksIFZhbHVlU291cmNlKEludDMySW5KU1N0YWNrKSk7CiAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoaXNDZWxsU3BlY3VsYXRpb24o
cHJlZGljdGVkVHlwZSkpIHsKLSAgICAgICAgICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBj
ZWxsKHRoaXMsIG5vZGUuY2hpbGQxKCksIEZvcndhcmRTcGVjdWxhdGlvbik7CisgICAgICAgICAg
ICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgY2VsbCh0aGlzLCBub2RlLT5jaGlsZDEoKSwgRm9y
d2FyZFNwZWN1bGF0aW9uKTsKICAgICAgICAgICAgICAgICBHUFJSZWcgY2VsbEdQUiA9IGNlbGwu
Z3ByKCk7Ci0gICAgICAgICAgICAgICAgbV9qaXQuc3RvcmU2NChjZWxsR1BSLCBKSVRDb21waWxl
cjo6YWRkcmVzc0Zvcihub2RlLmxvY2FsKCkpKTsKLSAgICAgICAgICAgICAgICBub1Jlc3VsdCht
X2NvbXBpbGVJbmRleCk7Ci0gICAgICAgICAgICAgICAgcmVjb3JkU2V0TG9jYWwobm9kZS5sb2Nh
bCgpLCBWYWx1ZVNvdXJjZShDZWxsSW5KU1N0YWNrKSk7CisgICAgICAgICAgICAgICAgbV9qaXQu
c3RvcmU2NChjZWxsR1BSLCBKSVRDb21waWxlcjo6YWRkcmVzc0Zvcihub2RlLT5sb2NhbCgpKSk7
CisgICAgICAgICAgICAgICAgbm9SZXN1bHQobm9kZSk7CisgICAgICAgICAgICAgICAgcmVjb3Jk
U2V0TG9jYWwobm9kZS0+bG9jYWwoKSwgVmFsdWVTb3VyY2UoQ2VsbEluSlNTdGFjaykpOwogICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKGlzQm9v
bGVhblNwZWN1bGF0aW9uKHByZWRpY3RlZFR5cGUpKSB7Ci0gICAgICAgICAgICAgICAgU3BlY3Vs
YXRlQm9vbGVhbk9wZXJhbmQgYm9vbGVhbih0aGlzLCBub2RlLmNoaWxkMSgpLCBGb3J3YXJkU3Bl
Y3VsYXRpb24pOwotICAgICAgICAgICAgICAgIG1faml0LnN0b3JlNjQoYm9vbGVhbi5ncHIoKSwg
SklUQ29tcGlsZXI6OmFkZHJlc3NGb3Iobm9kZS5sb2NhbCgpKSk7Ci0gICAgICAgICAgICAgICAg
bm9SZXN1bHQobV9jb21waWxlSW5kZXgpOwotICAgICAgICAgICAgICAgIHJlY29yZFNldExvY2Fs
KG5vZGUubG9jYWwoKSwgVmFsdWVTb3VyY2UoQm9vbGVhbkluSlNTdGFjaykpOworICAgICAgICAg
ICAgICAgIFNwZWN1bGF0ZUJvb2xlYW5PcGVyYW5kIGJvb2xlYW4odGhpcywgbm9kZS0+Y2hpbGQx
KCksIEZvcndhcmRTcGVjdWxhdGlvbik7CisgICAgICAgICAgICAgICAgbV9qaXQuc3RvcmU2NChi
b29sZWFuLmdwcigpLCBKSVRDb21waWxlcjo6YWRkcmVzc0Zvcihub2RlLT5sb2NhbCgpKSk7Cisg
ICAgICAgICAgICAgICAgbm9SZXN1bHQobm9kZSk7CisgICAgICAgICAgICAgICAgcmVjb3JkU2V0
TG9jYWwobm9kZS0+bG9jYWwoKSwgVmFsdWVTb3VyY2UoQm9vbGVhbkluSlNTdGFjaykpOwogICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIAot
ICAgICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKLSAgICAg
ICAgbV9qaXQuc3RvcmU2NCh2YWx1ZS5ncHIoKSwgSklUQ29tcGlsZXI6OmFkZHJlc3NGb3Iobm9k
ZS5sb2NhbCgpKSk7Ci0gICAgICAgIG5vUmVzdWx0KG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAg
SlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBtX2pp
dC5zdG9yZTY0KHZhbHVlLmdwcigpLCBKSVRDb21waWxlcjo6YWRkcmVzc0Zvcihub2RlLT5sb2Nh
bCgpKSk7CisgICAgICAgIG5vUmVzdWx0KG5vZGUpOwogCi0gICAgICAgIHJlY29yZFNldExvY2Fs
KG5vZGUubG9jYWwoKSwgVmFsdWVTb3VyY2UoVmFsdWVJbkpTU3RhY2spKTsKKyAgICAgICAgcmVj
b3JkU2V0TG9jYWwobm9kZS0+bG9jYWwoKSwgVmFsdWVTb3VyY2UoVmFsdWVJbkpTU3RhY2spKTsK
IAogICAgICAgICAvLyBJZiB3ZSdyZSBzdG9yaW5nIGFuIGFyZ3VtZW50cyBvYmplY3QgdGhhdCBo
YXMgYmVlbiBvcHRpbWl6ZWQgYXdheSwKICAgICAgICAgLy8gb3VyIHZhcmlhYmxlIGV2ZW50IHN0
cmVhbSBmb3IgT1NSIGV4aXQgbm93IHJlZmxlY3RzIHRoZSBvcHRpbWl6ZWQKICAgICAgICAgLy8g
dmFsdWUgKEpTVmFsdWUoKSkuIE9uIHRoZSBzbG93IHBhdGgsIHdlIHdhbnQgYW4gYXJndW1lbnRz
IG9iamVjdAogICAgICAgICAvLyBpbnN0ZWFkLiBXZSBhZGQgYW4gYWRkaXRpb25hbCBtb3ZlIGhp
bnQgdG8gc2hvdyBPU1IgZXhpdCB0aGF0IGl0CiAgICAgICAgIC8vIG5lZWRzIHRvIHJlY29uc3Ry
dWN0IHRoZSBhcmd1bWVudHMgb2JqZWN0LgotICAgICAgICBpZiAoYXQobm9kZS5jaGlsZDEoKSku
b3AoKSA9PSBQaGFudG9tQXJndW1lbnRzKQorICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPm9w
KCkgPT0gUGhhbnRvbUFyZ3VtZW50cykKICAgICAgICAgICAgIGNvbXBpbGVNb3ZIaW50KG5vZGUp
OwogCiAgICAgICAgIGJyZWFrOwpAQCAtMjI4NCw1NCArMjI3Niw1NCBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgY2FzZSBCaXRBbmQ6CiAgICAgY2FzZSBC
aXRPcjoKICAgICBjYXNlIEJpdFhvcjoKLSAgICAgICAgaWYgKGlzSW50MzJDb25zdGFudChub2Rl
LmNoaWxkMSgpLmluZGV4KCkpKSB7Ci0gICAgICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFu
ZCBvcDIodGhpcywgbm9kZS5jaGlsZDIoKSk7CisgICAgICAgIGlmIChpc0ludDMyQ29uc3RhbnQo
bm9kZS0+Y2hpbGQxKCkubm9kZSgpKSkgeworICAgICAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9w
ZXJhbmQgb3AyKHRoaXMsIG5vZGUtPmNoaWxkMigpKTsKICAgICAgICAgICAgIEdQUlRlbXBvcmFy
eSByZXN1bHQodGhpcywgb3AyKTsKIAotICAgICAgICAgICAgYml0T3Aob3AsIHZhbHVlT2ZJbnQz
MkNvbnN0YW50KG5vZGUuY2hpbGQxKCkuaW5kZXgoKSksIG9wMi5ncHIoKSwgcmVzdWx0Lmdwcigp
KTsKKyAgICAgICAgICAgIGJpdE9wKG9wLCB2YWx1ZU9mSW50MzJDb25zdGFudChub2RlLT5jaGls
ZDEoKS5ub2RlKCkpLCBvcDIuZ3ByKCksIHJlc3VsdC5ncHIoKSk7CiAKLSAgICAgICAgICAgIGlu
dGVnZXJSZXN1bHQocmVzdWx0LmdwcigpLCBtX2NvbXBpbGVJbmRleCk7Ci0gICAgICAgIH0gZWxz
ZSBpZiAoaXNJbnQzMkNvbnN0YW50KG5vZGUuY2hpbGQyKCkuaW5kZXgoKSkpIHsKLSAgICAgICAg
ICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKKyAg
ICAgICAgICAgIGludGVnZXJSZXN1bHQocmVzdWx0LmdwcigpLCBub2RlKTsKKyAgICAgICAgfSBl
bHNlIGlmIChpc0ludDMyQ29uc3RhbnQobm9kZS0+Y2hpbGQyKCkubm9kZSgpKSkgeworICAgICAg
ICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AxKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsK
ICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgb3AxKTsKIAotICAgICAgICAg
ICAgYml0T3Aob3AsIHZhbHVlT2ZJbnQzMkNvbnN0YW50KG5vZGUuY2hpbGQyKCkuaW5kZXgoKSks
IG9wMS5ncHIoKSwgcmVzdWx0LmdwcigpKTsKKyAgICAgICAgICAgIGJpdE9wKG9wLCB2YWx1ZU9m
SW50MzJDb25zdGFudChub2RlLT5jaGlsZDIoKS5ub2RlKCkpLCBvcDEuZ3ByKCksIHJlc3VsdC5n
cHIoKSk7CiAKLSAgICAgICAgICAgIGludGVnZXJSZXN1bHQocmVzdWx0LmdwcigpLCBtX2NvbXBp
bGVJbmRleCk7CisgICAgICAgICAgICBpbnRlZ2VyUmVzdWx0KHJlc3VsdC5ncHIoKSwgbm9kZSk7
CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBv
cDEodGhpcywgbm9kZS5jaGlsZDEoKSk7Ci0gICAgICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3Bl
cmFuZCBvcDIodGhpcywgbm9kZS5jaGlsZDIoKSk7CisgICAgICAgICAgICBTcGVjdWxhdGVJbnRl
Z2VyT3BlcmFuZCBvcDEodGhpcywgbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgU3BlY3Vs
YXRlSW50ZWdlck9wZXJhbmQgb3AyKHRoaXMsIG5vZGUtPmNoaWxkMigpKTsKICAgICAgICAgICAg
IEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgb3AxLCBvcDIpOwogCiAgICAgICAgICAgICBHUFJS
ZWcgcmVnMSA9IG9wMS5ncHIoKTsKICAgICAgICAgICAgIEdQUlJlZyByZWcyID0gb3AyLmdwcigp
OwogICAgICAgICAgICAgYml0T3Aob3AsIHJlZzEsIHJlZzIsIHJlc3VsdC5ncHIoKSk7CiAKLSAg
ICAgICAgICAgIGludGVnZXJSZXN1bHQocmVzdWx0LmdwcigpLCBtX2NvbXBpbGVJbmRleCk7Cisg
ICAgICAgICAgICBpbnRlZ2VyUmVzdWx0KHJlc3VsdC5ncHIoKSwgbm9kZSk7CiAgICAgICAgIH0K
ICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIEJpdFJTaGlmdDoKICAgICBjYXNlIEJpdExTaGlm
dDoKICAgICBjYXNlIEJpdFVSU2hpZnQ6Ci0gICAgICAgIGlmIChpc0ludDMyQ29uc3RhbnQobm9k
ZS5jaGlsZDIoKS5pbmRleCgpKSkgewotICAgICAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJh
bmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKCkpOworICAgICAgICBpZiAoaXNJbnQzMkNvbnN0YW50
KG5vZGUtPmNoaWxkMigpLm5vZGUoKSkpIHsKKyAgICAgICAgICAgIFNwZWN1bGF0ZUludGVnZXJP
cGVyYW5kIG9wMSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgICAgICBHUFJUZW1wb3Jh
cnkgcmVzdWx0KHRoaXMsIG9wMSk7CiAKLSAgICAgICAgICAgIHNoaWZ0T3Aob3AsIG9wMS5ncHIo
KSwgdmFsdWVPZkludDMyQ29uc3RhbnQobm9kZS5jaGlsZDIoKS5pbmRleCgpKSAmIDB4MWYsIHJl
c3VsdC5ncHIoKSk7CisgICAgICAgICAgICBzaGlmdE9wKG9wLCBvcDEuZ3ByKCksIHZhbHVlT2ZJ
bnQzMkNvbnN0YW50KG5vZGUtPmNoaWxkMigpLm5vZGUoKSkgJiAweDFmLCByZXN1bHQuZ3ByKCkp
OwogCi0gICAgICAgICAgICBpbnRlZ2VyUmVzdWx0KHJlc3VsdC5ncHIoKSwgbV9jb21waWxlSW5k
ZXgpOworICAgICAgICAgICAgaW50ZWdlclJlc3VsdChyZXN1bHQuZ3ByKCksIG5vZGUpOwogICAg
ICAgICB9IGVsc2UgewogICAgICAgICAgICAgLy8gRG8gbm90IGFsbG93IHNoaWZ0IGFtb3VudCB0
byBiZSB1c2VkIGFzIHRoZSByZXN1bHQsIE1hY3JvQXNzZW1ibGVyIGRvZXMgbm90IHBlcm1pdCB0
aGlzLgotICAgICAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AxKHRoaXMsIG5vZGUu
Y2hpbGQxKCkpOwotICAgICAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AyKHRoaXMs
IG5vZGUuY2hpbGQyKCkpOworICAgICAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3Ax
KHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVy
YW5kIG9wMih0aGlzLCBub2RlLT5jaGlsZDIoKSk7CiAgICAgICAgICAgICBHUFJUZW1wb3Jhcnkg
cmVzdWx0KHRoaXMsIG9wMSk7CiAKICAgICAgICAgICAgIEdQUlJlZyByZWcxID0gb3AxLmdwcigp
OwogICAgICAgICAgICAgR1BSUmVnIHJlZzIgPSBvcDIuZ3ByKCk7CiAgICAgICAgICAgICBzaGlm
dE9wKG9wLCByZWcxLCByZWcyLCByZXN1bHQuZ3ByKCkpOwogCi0gICAgICAgICAgICBpbnRlZ2Vy
UmVzdWx0KHJlc3VsdC5ncHIoKSwgbV9jb21waWxlSW5kZXgpOworICAgICAgICAgICAgaW50ZWdl
clJlc3VsdChyZXN1bHQuZ3ByKCksIG5vZGUpOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwog
CkBAIC0yMzU2LDE1ICsyMzQ4LDE1IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9k
ZSYgbm9kZSkKICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgQ2hlY2tOdW1iZXI6IHsKLSAgICAg
ICAgaWYgKCFpc051bWJlclNwZWN1bGF0aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgp
KS5tX3R5cGUpKSB7Ci0gICAgICAgICAgICBKU1ZhbHVlT3BlcmFuZCBvcDEodGhpcywgbm9kZS5j
aGlsZDEoKSk7CisgICAgICAgIGlmICghaXNOdW1iZXJTcGVjdWxhdGlvbihtX3N0YXRlLmZvck5v
ZGUobm9kZS0+Y2hpbGQxKCkpLm1fdHlwZSkpIHsKKyAgICAgICAgICAgIEpTVmFsdWVPcGVyYW5k
IG9wMSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgICAgICBKSVRDb21waWxlcjo6SnVt
cCBpc0ludGVnZXIgPSBtX2ppdC5icmFuY2g2NChNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFs
LCBvcDEuZ3ByKCksIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlcik7CiAgICAgICAgICAg
ICBzcGVjdWxhdGlvbkNoZWNrKAotICAgICAgICAgICAgICAgIEJhZFR5cGUsIEpTVmFsdWVSZWdz
KG9wMS5ncHIoKSksIG5vZGUuY2hpbGQxKCkuaW5kZXgoKSwKKyAgICAgICAgICAgICAgICBCYWRU
eXBlLCBKU1ZhbHVlUmVncyhvcDEuZ3ByKCkpLCBub2RlLT5jaGlsZDEoKS5ub2RlKCksCiAgICAg
ICAgICAgICAgICAgbV9qaXQuYnJhbmNoVGVzdDY0KE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBvcDEu
Z3ByKCksIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlcikpOwogICAgICAgICAgICAgaXNJ
bnRlZ2VyLmxpbmsoJm1faml0KTsKICAgICAgICAgfQotICAgICAgICBub1Jlc3VsdChtX2NvbXBp
bGVJbmRleCk7CisgICAgICAgIG5vUmVzdWx0KG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9
CiAKQEAgLTIzODYsMjEgKzIzNzgsMjEgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShO
b2RlJiBub2RlKQogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgQXJpdGhEaXY6IHsKLSAgICAg
ICAgaWYgKE5vZGU6OnNob3VsZFNwZWN1bGF0ZUludGVnZXJGb3JBcml0aG1ldGljKGF0KG5vZGUu
Y2hpbGQxKCkpLCBhdChub2RlLmNoaWxkMigpKSkKKyAgICAgICAgaWYgKE5vZGU6OnNob3VsZFNw
ZWN1bGF0ZUludGVnZXJGb3JBcml0aG1ldGljKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgbm9kZS0+
Y2hpbGQyKCkubm9kZSgpKQogICAgICAgICAgICAgJiYgbm9kZS5jYW5TcGVjdWxhdGVJbnRlZ2Vy
KCkpIHsKICAgICAgICAgICAgIGNvbXBpbGVJbnRlZ2VyQXJpdGhEaXZGb3JYODYobm9kZSk7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgU3BlY3VsYXRl
RG91YmxlT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEoKSk7Ci0gICAgICAgIFNwZWN1bGF0
ZURvdWJsZU9wZXJhbmQgb3AyKHRoaXMsIG5vZGUuY2hpbGQyKCkpOworICAgICAgICBTcGVjdWxh
dGVEb3VibGVPcGVyYW5kIG9wMSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIFNwZWN1
bGF0ZURvdWJsZU9wZXJhbmQgb3AyKHRoaXMsIG5vZGUtPmNoaWxkMigpKTsKICAgICAgICAgRlBS
VGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBvcDEpOwogCiAgICAgICAgIEZQUlJlZyByZWcxID0gb3Ax
LmZwcigpOwogICAgICAgICBGUFJSZWcgcmVnMiA9IG9wMi5mcHIoKTsKICAgICAgICAgbV9qaXQu
ZGl2RG91YmxlKHJlZzEsIHJlZzIsIHJlc3VsdC5mcHIoKSk7CiAKLSAgICAgICAgZG91YmxlUmVz
dWx0KHJlc3VsdC5mcHIoKSwgbV9jb21waWxlSW5kZXgpOworICAgICAgICBkb3VibGVSZXN1bHQo
cmVzdWx0LmZwcigpLCBub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCkBAIC0yNDEwLDkg
KzI0MDIsOSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAg
fQogCiAgICAgY2FzZSBBcml0aEFiczogewotICAgICAgICBpZiAoYXQobm9kZS5jaGlsZDEoKSku
c2hvdWxkU3BlY3VsYXRlSW50ZWdlckZvckFyaXRobWV0aWMoKQotICAgICAgICAgICAgJiYgbm9k
ZS5jYW5TcGVjdWxhdGVJbnRlZ2VyKCkpIHsKLSAgICAgICAgICAgIFNwZWN1bGF0ZUludGVnZXJP
cGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKKyAgICAgICAgaWYgKG5vZGUtPmNoaWxk
MSgpLT5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyRm9yQXJpdGhtZXRpYygpCisgICAgICAgICAgICAm
JiBub2RlLT5jYW5TcGVjdWxhdGVJbnRlZ2VyKCkpIHsKKyAgICAgICAgICAgIFNwZWN1bGF0ZUlu
dGVnZXJPcGVyYW5kIG9wMSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgICAgICBHUFJU
ZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwogICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2go
dGhpcyk7CiAgICAgICAgICAgICAKQEAgLTI0MjAsMjUgKzI0MTIsMjUgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAgICAgbV9qaXQucnNoaWZ0MzIo
cmVzdWx0LmdwcigpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDMxKSwgc2NyYXRjaC5n
cHIoKSk7CiAgICAgICAgICAgICBtX2ppdC5hZGQzMihzY3JhdGNoLmdwcigpLCByZXN1bHQuZ3By
KCkpOwogICAgICAgICAgICAgbV9qaXQueG9yMzIoc2NyYXRjaC5ncHIoKSwgcmVzdWx0Lmdwcigp
KTsKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soT3ZlcmZsb3csIEpTVmFsdWVSZWdzKCks
IE5vTm9kZSwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCByZXN1bHQuZ3By
KCksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoMSA8PCAzMSkpKTsKLSAgICAgICAgICAg
IGludGVnZXJSZXN1bHQocmVzdWx0LmdwcigpLCBtX2NvbXBpbGVJbmRleCk7CisgICAgICAgICAg
ICBzcGVjdWxhdGlvbkNoZWNrKE92ZXJmbG93LCBKU1ZhbHVlUmVncygpLCAwLCBtX2ppdC5icmFu
Y2gzMihNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIHJlc3VsdC5ncHIoKSwgTWFjcm9Bc3NlbWJsZXI6
OlRydXN0ZWRJbW0zMigxIDw8IDMxKSkpOworICAgICAgICAgICAgaW50ZWdlclJlc3VsdChyZXN1
bHQuZ3ByKCksIG5vZGUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAg
Ci0gICAgICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKCkp
OworICAgICAgICBTcGVjdWxhdGVEb3VibGVPcGVyYW5kIG9wMSh0aGlzLCBub2RlLT5jaGlsZDEo
KSk7CiAgICAgICAgIEZQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CiAgICAgICAgIAogICAgICAg
ICBtX2ppdC5hYnNEb3VibGUob3AxLmZwcigpLCByZXN1bHQuZnByKCkpOwotICAgICAgICBkb3Vi
bGVSZXN1bHQocmVzdWx0LmZwcigpLCBtX2NvbXBpbGVJbmRleCk7CisgICAgICAgIGRvdWJsZVJl
c3VsdChyZXN1bHQuZnByKCksIG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAg
IAogICAgIGNhc2UgQXJpdGhNaW46CiAgICAgY2FzZSBBcml0aE1heDogewotICAgICAgICBpZiAo
Tm9kZTo6c2hvdWxkU3BlY3VsYXRlSW50ZWdlckZvckFyaXRobWV0aWMoYXQobm9kZS5jaGlsZDEo
KSksIGF0KG5vZGUuY2hpbGQyKCkpKQotICAgICAgICAgICAgJiYgbm9kZS5jYW5TcGVjdWxhdGVJ
bnRlZ2VyKCkpIHsKLSAgICAgICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBvcDEo
dGhpcywgbm9kZS5jaGlsZDEoKSk7Ci0gICAgICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9w
ZXJhbmQgb3AyKHRoaXMsIG5vZGUuY2hpbGQyKCkpOworICAgICAgICBpZiAoTm9kZTo6c2hvdWxk
U3BlY3VsYXRlSW50ZWdlckZvckFyaXRobWV0aWMobm9kZS0+Y2hpbGQxKCkubm9kZSgpLCBub2Rl
LT5jaGlsZDIoKS5ub2RlKCkpCisgICAgICAgICAgICAmJiBub2RlLT5jYW5TcGVjdWxhdGVJbnRl
Z2VyKCkpIHsKKyAgICAgICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBvcDEodGhp
cywgbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVy
YW5kIG9wMih0aGlzLCBub2RlLT5jaGlsZDIoKSk7CiAgICAgICAgICAgICBHUFJUZW1wb3Jhcnkg
cmVzdWx0KHRoaXMsIG9wMSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpKdW1wIG9wMUxlc3MgPSBtX2ppdC5icmFuY2gzMihvcCA9PSBBcml0aE1pbiA/IE1hY3Jv
QXNzZW1ibGVyOjpMZXNzVGhhbiA6IE1hY3JvQXNzZW1ibGVyOjpHcmVhdGVyVGhhbiwgb3AxLmdw
cigpLCBvcDIuZ3ByKCkpOwpAQCAtMjQ1MSwxMiArMjQ0MywxMiBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAg
ICAgICBvcDFMZXNzLmxpbmsoJm1faml0KTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgaW50
ZWdlclJlc3VsdChyZXN1bHQuZ3ByKCksIG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAgICAgIGlu
dGVnZXJSZXN1bHQocmVzdWx0LmdwcigpLCBub2RlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICB9CiAgICAgICAgIAotICAgICAgICBTcGVjdWxhdGVEb3VibGVPcGVyYW5kIG9wMSh0aGlz
LCBub2RlLmNoaWxkMSgpKTsKLSAgICAgICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCBvcDIodGhp
cywgbm9kZS5jaGlsZDIoKSk7CisgICAgICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgb3AxKHRo
aXMsIG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCBvcDIo
dGhpcywgbm9kZS0+Y2hpbGQyKCkpOwogICAgICAgICBGUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMs
IG9wMSk7CiAgICAgICAgIAogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZG9uZTsK
QEAgLTI0ODQsMTcgKzI0NzYsMTcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2Rl
JiBub2RlKQogICAgICAgICAKICAgICAgICAgZG9uZS5saW5rKCZtX2ppdCk7CiAgICAgICAgIAot
ICAgICAgICBkb3VibGVSZXN1bHQocmVzdWx0LmZwcigpLCBtX2NvbXBpbGVJbmRleCk7CisgICAg
ICAgIGRvdWJsZVJlc3VsdChyZXN1bHQuZnByKCksIG5vZGUpOwogICAgICAgICBicmVhazsKICAg
ICB9CiAgICAgICAgIAogICAgIGNhc2UgQXJpdGhTcXJ0OiB7Ci0gICAgICAgIFNwZWN1bGF0ZURv
dWJsZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKCkpOworICAgICAgICBTcGVjdWxhdGVE
b3VibGVPcGVyYW5kIG9wMSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgIEZQUlRlbXBv
cmFyeSByZXN1bHQodGhpcywgb3AxKTsKICAgICAgICAgCiAgICAgICAgIG1faml0LnNxcnREb3Vi
bGUob3AxLmZwcigpLCByZXN1bHQuZnByKCkpOwogICAgICAgICAKLSAgICAgICAgZG91YmxlUmVz
dWx0KHJlc3VsdC5mcHIoKSwgbV9jb21waWxlSW5kZXgpOworICAgICAgICBkb3VibGVSZXN1bHQo
cmVzdWx0LmZwcigpLCBub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCkBAIC0yNTIzLDEz
ICsyNTE1LDEzIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAg
ICAgICAgYnJlYWs7CiAKICAgICBjYXNlIENvbXBhcmVFcToKLSAgICAgICAgaWYgKGlzTnVsbENv
bnN0YW50KG5vZGUuY2hpbGQxKCkuaW5kZXgoKSkpIHsKLSAgICAgICAgICAgIGlmIChub25TcGVj
dWxhdGl2ZUNvbXBhcmVOdWxsKG5vZGUsIG5vZGUuY2hpbGQyKCkpKQorICAgICAgICBpZiAoaXNO
dWxsQ29uc3RhbnQobm9kZS0+Y2hpbGQxKCkubm9kZSgpKSkgeworICAgICAgICAgICAgaWYgKG5v
blNwZWN1bGF0aXZlQ29tcGFyZU51bGwobm9kZSwgbm9kZS0+Y2hpbGQyKCkpKQogICAgICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIGlm
IChpc051bGxDb25zdGFudChub2RlLmNoaWxkMigpLmluZGV4KCkpKSB7Ci0gICAgICAgICAgICBp
ZiAobm9uU3BlY3VsYXRpdmVDb21wYXJlTnVsbChub2RlLCBub2RlLmNoaWxkMSgpKSkKKyAgICAg
ICAgaWYgKGlzTnVsbENvbnN0YW50KG5vZGUtPmNoaWxkMigpLm5vZGUoKSkpIHsKKyAgICAgICAg
ICAgIGlmIChub25TcGVjdWxhdGl2ZUNvbXBhcmVOdWxsKG5vZGUsIG5vZGUtPmNoaWxkMigpKSkK
ICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpA
QCAtMjU2NSwxNSArMjU1NywxNSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUm
IG5vZGUpCiAgICAgfQogCiAgICAgY2FzZSBHZXRCeVZhbDogewotICAgICAgICBzd2l0Y2ggKG5v
ZGUuYXJyYXlNb2RlKCkudHlwZSgpKSB7CisgICAgICAgIHN3aXRjaCAobm9kZS0+YXJyYXlNb2Rl
KCkudHlwZSgpKSB7CiAgICAgICAgIGNhc2UgQXJyYXk6OlNlbGVjdFVzaW5nUHJlZGljdGlvbnM6
CiAgICAgICAgIGNhc2UgQXJyYXk6OkZvcmNlRXhpdDoKICAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICB0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1
dGlvbihJbmFkZXF1YXRlQ292ZXJhZ2UsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSk7CisgICAgICAg
ICAgICB0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihJbmFkZXF1YXRlQ292ZXJhZ2UsIEpT
VmFsdWVSZWdzKCksIDApOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6
OkdlbmVyaWM6IHsKLSAgICAgICAgICAgIEpTVmFsdWVPcGVyYW5kIGJhc2UodGhpcywgbm9kZS5j
aGlsZDEoKSk7Ci0gICAgICAgICAgICBKU1ZhbHVlT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBub2Rl
LmNoaWxkMigpKTsKKyAgICAgICAgICAgIEpTVmFsdWVPcGVyYW5kIGJhc2UodGhpcywgbm9kZS0+
Y2hpbGQxKCkpOworICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgcHJvcGVydHkodGhpcywgbm9k
ZS0+Y2hpbGQyKCkpOwogICAgICAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOwog
ICAgICAgICAgICAgR1BSUmVnIHByb3BlcnR5R1BSID0gcHJvcGVydHkuZ3ByKCk7CiAgICAgICAg
ICAgICAKQEAgLTI1ODEsMTQgKzI1NzMsMTQgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZShOb2RlJiBub2RlKQogICAgICAgICAgICAgR1BSUmVzdWx0IHJlc3VsdCh0aGlzKTsKICAgICAg
ICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uR2V0QnlWYWwsIHJlc3VsdC5ncHIoKSwgYmFz
ZUdQUiwgcHJvcGVydHlHUFIpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBqc1ZhbHVlUmVz
dWx0KHJlc3VsdC5ncHIoKSwgbV9jb21waWxlSW5kZXgpOworICAgICAgICAgICAganNWYWx1ZVJl
c3VsdChyZXN1bHQuZ3ByKCksIG5vZGUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0K
ICAgICAgICAgY2FzZSBBcnJheTo6SW50MzI6CiAgICAgICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3Vv
dXM6IHsKLSAgICAgICAgICAgIGlmIChub2RlLmFycmF5TW9kZSgpLmlzSW5Cb3VuZHMoKSkgewot
ICAgICAgICAgICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBwcm9wZXJ0eSh0aGlz
LCBub2RlLmNoaWxkMigpKTsKLSAgICAgICAgICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdl
KHRoaXMsIG5vZGUuY2hpbGQzKCkpOworICAgICAgICAgICAgaWYgKG5vZGUtPmFycmF5TW9kZSgp
LmlzSW5Cb3VuZHMoKSkgeworICAgICAgICAgICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3Bl
cmFuZCBwcm9wZXJ0eSh0aGlzLCBub2RlLT5jaGlsZDIoKSk7CisgICAgICAgICAgICAgICAgU3Rv
cmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBub2RlLT5jaGlsZDMoKSk7CiAgICAgICAgICAgICAg
ICAgCiAgICAgICAgICAgICAgICAgR1BSUmVnIHByb3BlcnR5UmVnID0gcHJvcGVydHkuZ3ByKCk7
CiAgICAgICAgICAgICAgICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigpOwpAQCAt
MjU5NiwxOCArMjU4OCwxOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5v
ZGUpCiAgICAgICAgICAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQogICAgICAgICAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgc3BlY3VsYXRp
b25DaGVjayhPdXRPZkJvdW5kcywgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2gz
MihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgp
KSkpOworICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soT3V0T2ZCb3VuZHMsIEpTVmFs
dWVSZWdzKCksIDAsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWws
IHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBCdXR0ZXJm
bHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpKSk7CiAgICAgICAgICAgICAgICAgCiAgICAgICAg
ICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKICAgICAgICAgICAgICAgICBtX2pp
dC5sb2FkNjQoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJl
ZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQpLCByZXN1bHQuZ3ByKCkpOwotICAgICAgICAg
ICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soTG9hZEZyb21Ib2xlLCBKU1ZhbHVlUmVncygpLCBOb05v
ZGUsIG1faml0LmJyYW5jaFRlc3Q2NChNYWNyb0Fzc2VtYmxlcjo6WmVybywgcmVzdWx0Lmdwcigp
KSk7Ci0gICAgICAgICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHQuZ3ByKCksIG1fY29tcGls
ZUluZGV4LCBub2RlLmFycmF5TW9kZSgpLnR5cGUoKSA9PSBBcnJheTo6SW50MzIgPyBEYXRhRm9y
bWF0SlNJbnRlZ2VyIDogRGF0YUZvcm1hdEpTKTsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGlv
bkNoZWNrKExvYWRGcm9tSG9sZSwgSlNWYWx1ZVJlZ3MoKSwgMCwgbV9qaXQuYnJhbmNoVGVzdDY0
KE1hY3JvQXNzZW1ibGVyOjpaZXJvLCByZXN1bHQuZ3ByKCkpKTsKKyAgICAgICAgICAgICAgICBq
c1ZhbHVlUmVzdWx0KHJlc3VsdC5ncHIoKSwgbm9kZSwgbm9kZS0+YXJyYXlNb2RlKCkudHlwZSgp
ID09IEFycmF5OjpJbnQzMiA/IERhdGFGb3JtYXRKU0ludGVnZXIgOiBEYXRhRm9ybWF0SlMpOwog
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgCi0gICAg
ICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwot
ICAgICAgICAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG5v
ZGUuY2hpbGQyKCkpOwotICAgICAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBu
b2RlLmNoaWxkMygpKTsKKyAgICAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhp
cywgbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVy
YW5kIHByb3BlcnR5KHRoaXMsIG5vZGUtPmNoaWxkMigpKTsKKyAgICAgICAgICAgIFN0b3JhZ2VP
cGVyYW5kIHN0b3JhZ2UodGhpcywgbm9kZS0+Y2hpbGQzKCkpOwogICAgICAgICAgICAgCiAgICAg
ICAgICAgICBHUFJSZWcgYmFzZVJlZyA9IGJhc2UuZ3ByKCk7CiAgICAgICAgICAgICBHUFJSZWcg
cHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIoKTsKQEAgLTI2MzEsMjEgKzI2MjMsMjEgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAgICAgICAgICAg
ICBzbG93Q2FzZXMsIHRoaXMsIG9wZXJhdGlvbkdldEJ5VmFsQXJyYXlJbnQsCiAgICAgICAgICAg
ICAgICAgICAgIHJlc3VsdC5ncHIoKSwgYmFzZVJlZywgcHJvcGVydHlSZWcpKTsKICAgICAgICAg
ICAgIAotICAgICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRSZWcsIG1fY29tcGlsZUluZGV4
KTsKKyAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0UmVnLCBub2RlKTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBBcnJheTo6RG91YmxlOiB7Ci0g
ICAgICAgICAgICBpZiAobm9kZS5hcnJheU1vZGUoKS5pc0luQm91bmRzKCkpIHsKLSAgICAgICAg
ICAgICAgICBpZiAobm9kZS5hcnJheU1vZGUoKS5pc1NhbmVDaGFpbigpKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBtX2ppdC5nbG9iYWxPYmpl
Y3RGb3Iobm9kZS5jb2RlT3JpZ2luKTsKKyAgICAgICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUo
KS5pc0luQm91bmRzKCkpIHsKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+YXJyYXlNb2RlKCku
aXNTYW5lQ2hhaW4oKSkgeworICAgICAgICAgICAgICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0ID0gbV9qaXQuZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPmNvZGVPcmlnaW4pOwogICAg
ICAgICAgICAgICAgICAgICBBU1NFUlQoZ2xvYmFsT2JqZWN0LT5hcnJheVByb3RvdHlwZUNoYWlu
SXNTYW5lKCkpOwogICAgICAgICAgICAgICAgICAgICBnbG9iYWxPYmplY3QtPmFycmF5UHJvdG90
eXBlKCktPnN0cnVjdHVyZSgpLT5hZGRUcmFuc2l0aW9uV2F0Y2hwb2ludChzcGVjdWxhdGlvbldh
dGNocG9pbnQoKSk7CiAgICAgICAgICAgICAgICAgICAgIGdsb2JhbE9iamVjdC0+b2JqZWN0UHJv
dG90eXBlKCktPnN0cnVjdHVyZSgpLT5hZGRUcmFuc2l0aW9uV2F0Y2hwb2ludChzcGVjdWxhdGlv
bldhdGNocG9pbnQoKSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIAotICAg
ICAgICAgICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBu
b2RlLmNoaWxkMigpKTsKLSAgICAgICAgICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRo
aXMsIG5vZGUuY2hpbGQzKCkpOworICAgICAgICAgICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMy
T3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBub2RlLT5jaGlsZDIoKSk7CisgICAgICAgICAgICAgICAg
U3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBub2RlLT5jaGlsZDMoKSk7CiAgICAgICAgICAg
ICAKICAgICAgICAgICAgICAgICBHUFJSZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIoKTsK
ICAgICAgICAgICAgICAgICBHUFJSZWcgc3RvcmFnZVJlZyA9IHN0b3JhZ2UuZ3ByKCk7CkBAIC0y
NjUzLDE5ICsyNjQ1LDE5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9k
ZSkKICAgICAgICAgICAgICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCiAgICAgICAgICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hl
Y2soT3V0T2ZCb3VuZHMsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoMzIoTWFj
cm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKHN0b3JhZ2VSZWcsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpKTsK
KyAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE91dE9mQm91bmRzLCBKU1ZhbHVlUmVn
cygpLCAwLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9w
ZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQnV0dGVyZmx5Ojpv
ZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSkpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAg
RlBSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKICAgICAgICAgICAgICAgICBtX2ppdC5sb2FkRG91
YmxlKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1h
Y3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0KSwgcmVzdWx0LmZwcigpKTsKLSAgICAgICAgICAgICAg
ICBpZiAoIW5vZGUuYXJyYXlNb2RlKCkuaXNTYW5lQ2hhaW4oKSkKLSAgICAgICAgICAgICAgICAg
ICAgc3BlY3VsYXRpb25DaGVjayhMb2FkRnJvbUhvbGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwg
bV9qaXQuYnJhbmNoRG91YmxlKE1hY3JvQXNzZW1ibGVyOjpEb3VibGVOb3RFcXVhbE9yVW5vcmRl
cmVkLCByZXN1bHQuZnByKCksIHJlc3VsdC5mcHIoKSkpOwotICAgICAgICAgICAgICAgIGRvdWJs
ZVJlc3VsdChyZXN1bHQuZnByKCksIG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAgICAgICAgICBp
ZiAoIW5vZGUtPmFycmF5TW9kZSgpLmlzU2FuZUNoYWluKCkpCisgICAgICAgICAgICAgICAgICAg
IHNwZWN1bGF0aW9uQ2hlY2soTG9hZEZyb21Ib2xlLCBKU1ZhbHVlUmVncygpLCAwLCBtX2ppdC5i
cmFuY2hEb3VibGUoTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZU5vdEVxdWFsT3JVbm9yZGVyZWQsIHJl
c3VsdC5mcHIoKSwgcmVzdWx0LmZwcigpKSk7CisgICAgICAgICAgICAgICAgZG91YmxlUmVzdWx0
KHJlc3VsdC5mcHIoKSwgbm9kZSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICB9CiAKLSAgICAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS5j
aGlsZDEoKSk7Ci0gICAgICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVy
dHkodGhpcywgbm9kZS5jaGlsZDIoKSk7Ci0gICAgICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9y
YWdlKHRoaXMsIG5vZGUuY2hpbGQzKCkpOworICAgICAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJh
bmQgYmFzZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICBTcGVjdWxhdGVTdHJp
Y3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhpcywgbm9kZS0+Y2hpbGQyKCkpOworICAgICAgICAg
ICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBub2RlLT5jaGlsZDMoKSk7CiAgICAgICAg
ICAgICAKICAgICAgICAgICAgIEdQUlJlZyBiYXNlUmVnID0gYmFzZS5ncHIoKTsKICAgICAgICAg
ICAgIEdQUlJlZyBwcm9wZXJ0eVJlZyA9IHByb3BlcnR5LmdwcigpOwpAQCAtMjY5MiwxNSArMjY4
NCwxNSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAg
ICAgICAgICAgICAgIHNsb3dDYXNlcywgdGhpcywgb3BlcmF0aW9uR2V0QnlWYWxBcnJheUludCwK
ICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmdwcigpLCBiYXNlUmVnLCBwcm9wZXJ0eVJlZykp
OwogICAgICAgICAgICAgCi0gICAgICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFJlZywgbV9j
b21waWxlSW5kZXgpOworICAgICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRSZWcsIG5vZGUp
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIEFycmF5OjpB
cnJheVN0b3JhZ2U6CiAgICAgICAgIGNhc2UgQXJyYXk6OlNsb3dQdXRBcnJheVN0b3JhZ2U6IHsK
LSAgICAgICAgICAgIGlmIChub2RlLmFycmF5TW9kZSgpLmlzSW5Cb3VuZHMoKSkgewotICAgICAg
ICAgICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBub2Rl
LmNoaWxkMigpKTsKLSAgICAgICAgICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMs
IG5vZGUuY2hpbGQzKCkpOworICAgICAgICAgICAgaWYgKG5vZGUtPmFycmF5TW9kZSgpLmlzSW5C
b3VuZHMoKSkgeworICAgICAgICAgICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBw
cm9wZXJ0eSh0aGlzLCBub2RlLT5jaGlsZDIoKSk7CisgICAgICAgICAgICAgICAgU3RvcmFnZU9w
ZXJhbmQgc3RvcmFnZSh0aGlzLCBub2RlLT5jaGlsZDMoKSk7CiAgICAgICAgICAgICAKICAgICAg
ICAgICAgICAgICBHUFJSZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIoKTsKICAgICAgICAg
ICAgICAgICBHUFJSZWcgc3RvcmFnZVJlZyA9IHN0b3JhZ2UuZ3ByKCk7CkBAIC0yNzA4LDE5ICsy
NzAwLDE5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAg
ICAgICAgICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soT3V0T2ZC
b3VuZHMsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJs
ZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0
b3JhZ2VSZWcsIEFycmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKSk7CisgICAgICAg
ICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhPdXRPZkJvdW5kcywgSlNWYWx1ZVJlZ3MoKSwgMCwg
bV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcs
IE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEFycmF5U3RvcmFnZTo6dmVjdG9y
TGVuZ3RoT2Zmc2V0KCkpKSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBHUFJUZW1w
b3JhcnkgcmVzdWx0KHRoaXMpOwogICAgICAgICAgICAgICAgIG1faml0LmxvYWQ2NChNYWNyb0Fz
c2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxl
cjo6VGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0p
KSwgcmVzdWx0LmdwcigpKTsKLSAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKExvYWRG
cm9tSG9sZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2hUZXN0NjQoTWFjcm9B
c3NlbWJsZXI6Olplcm8sIHJlc3VsdC5ncHIoKSkpOworICAgICAgICAgICAgICAgIHNwZWN1bGF0
aW9uQ2hlY2soTG9hZEZyb21Ib2xlLCBKU1ZhbHVlUmVncygpLCAwLCBtX2ppdC5icmFuY2hUZXN0
NjQoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHJlc3VsdC5ncHIoKSkpOwogICAgICAgICAgICAgCi0g
ICAgICAgICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHQuZ3ByKCksIG1fY29tcGlsZUluZGV4
KTsKKyAgICAgICAgICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdC5ncHIoKSwgbm9kZSk7CiAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIFNwZWN1
bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS5jaGlsZDEoKSk7Ci0gICAgICAgICAgICBT
cGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhpcywgbm9kZS5jaGlsZDIoKSk7
Ci0gICAgICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG5vZGUuY2hpbGQzKCkp
OworICAgICAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLT5jaGls
ZDEoKSk7CisgICAgICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVydHko
dGhpcywgbm9kZS0+Y2hpbGQyKCkpOworICAgICAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFn
ZSh0aGlzLCBub2RlLT5jaGlsZDMoKSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIEdQUlJl
ZyBiYXNlUmVnID0gYmFzZS5ncHIoKTsKICAgICAgICAgICAgIEdQUlJlZyBwcm9wZXJ0eVJlZyA9
IHByb3BlcnR5LmdwcigpOwpAQCAtMjc0NCw3ICsyNzM2LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAgICAgICAgICAgICBzbG93Q2FzZXMsIHRo
aXMsIG9wZXJhdGlvbkdldEJ5VmFsQXJyYXlJbnQsCiAgICAgICAgICAgICAgICAgICAgIHJlc3Vs
dC5ncHIoKSwgYmFzZVJlZywgcHJvcGVydHlSZWcpKTsKICAgICAgICAgICAgIAotICAgICAgICAg
ICAganNWYWx1ZVJlc3VsdChyZXN1bHRSZWcsIG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAgICAg
IGpzVmFsdWVSZXN1bHQocmVzdWx0UmVnLCBub2RlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICB9CiAgICAgICAgIGNhc2UgQXJyYXk6OlN0cmluZzoKQEAgLTI3OTQsMTggKzI3ODYsMTgg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICBFZGdl
IGNoaWxkMyA9IG1faml0LmdyYXBoKCkudmFyQXJnQ2hpbGQobm9kZSwgMik7CiAgICAgICAgIEVk
Z2UgY2hpbGQ0ID0gbV9qaXQuZ3JhcGgoKS52YXJBcmdDaGlsZChub2RlLCAzKTsKICAgICAgICAg
Ci0gICAgICAgIEFycmF5TW9kZSBhcnJheU1vZGUgPSBub2RlLmFycmF5TW9kZSgpLm1vZGVGb3JQ
dXQoKTsKKyAgICAgICAgQXJyYXlNb2RlIGFycmF5TW9kZSA9IG5vZGUtPmFycmF5TW9kZSgpLm1v
ZGVGb3JQdXQoKTsKICAgICAgICAgYm9vbCBhbHJlYWR5SGFuZGxlZCA9IGZhbHNlOwogICAgICAg
ICAKICAgICAgICAgc3dpdGNoIChhcnJheU1vZGUudHlwZSgpKSB7CiAgICAgICAgIGNhc2UgQXJy
YXk6OlNlbGVjdFVzaW5nUHJlZGljdGlvbnM6CiAgICAgICAgIGNhc2UgQXJyYXk6OkZvcmNlRXhp
dDoKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAg
ICB0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihJbmFkZXF1YXRlQ292ZXJhZ2UsIEpTVmFs
dWVSZWdzKCksIE5vTm9kZSk7CisgICAgICAgICAgICB0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1
dGlvbihJbmFkZXF1YXRlQ292ZXJhZ2UsIEpTVmFsdWVSZWdzKCksIDApOwogICAgICAgICAgICAg
YWxyZWFkeUhhbmRsZWQgPSB0cnVlOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2Ug
QXJyYXk6OkdlbmVyaWM6IHsKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKG5vZGUub3AoKSA9
PSBQdXRCeVZhbCk7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChub2RlLT5vcCgpID09IFB1
dEJ5VmFsKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgYXJnMSh0
aGlzLCBjaGlsZDEpOwogICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgYXJnMih0aGlzLCBjaGls
ZDIpOwpAQCAtMjgxNSw5ICsyODA3LDkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShO
b2RlJiBub2RlKQogICAgICAgICAgICAgR1BSUmVnIGFyZzNHUFIgPSBhcmczLmdwcigpOwogICAg
ICAgICAgICAgZmx1c2hSZWdpc3RlcnMoKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgY2Fs
bE9wZXJhdGlvbihtX2ppdC5zdHJpY3RNb2RlRm9yKG5vZGUuY29kZU9yaWdpbikgPyBvcGVyYXRp
b25QdXRCeVZhbFN0cmljdCA6IG9wZXJhdGlvblB1dEJ5VmFsTm9uU3RyaWN0LCBhcmcxR1BSLCBh
cmcyR1BSLCBhcmczR1BSKTsKKyAgICAgICAgICAgIGNhbGxPcGVyYXRpb24obV9qaXQuc3RyaWN0
TW9kZUZvcihub2RlLT5jb2RlT3JpZ2luKSA/IG9wZXJhdGlvblB1dEJ5VmFsU3RyaWN0IDogb3Bl
cmF0aW9uUHV0QnlWYWxOb25TdHJpY3QsIGFyZzFHUFIsIGFyZzJHUFIsIGFyZzNHUFIpOwogICAg
ICAgICAgICAgCi0gICAgICAgICAgICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCk7CisgICAgICAg
ICAgICBub1Jlc3VsdChub2RlKTsKICAgICAgICAgICAgIGFscmVhZHlIYW5kbGVkID0gdHJ1ZTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkBAIC0yODYyLDEzICsyODU0LDEzIEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgICAgIFN0b3Jh
Z2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgY2hpbGQ0KTsKICAgICAgICAgICAgIEdQUlJlZyBzdG9y
YWdlUmVnID0gc3RvcmFnZS5ncHIoKTsKIAotICAgICAgICAgICAgaWYgKG5vZGUub3AoKSA9PSBQ
dXRCeVZhbEFsaWFzKSB7CisgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBQdXRCeVZhbEFs
aWFzKSB7CiAgICAgICAgICAgICAgICAgLy8gU3RvcmUgdGhlIHZhbHVlIHRvIHRoZSBhcnJheS4K
ICAgICAgICAgICAgICAgICBHUFJSZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIoKTsKICAg
ICAgICAgICAgICAgICBHUFJSZWcgdmFsdWVSZWcgPSB2YWx1ZS5ncHIoKTsKICAgICAgICAgICAg
ICAgICBtX2ppdC5zdG9yZTY0KHZhbHVlUmVnLCBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0
b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCkpOwogICAg
ICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIG5vUmVzdWx0KG1fY29tcGlsZUluZGV4KTsK
KyAgICAgICAgICAgICAgICBub1Jlc3VsdChub2RlKTsKICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIApAQCAtMjg3OSw3ICsyODcxLDcgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAgICAgCiAgICAgICAg
ICAgICBpZiAoYXJyYXlNb2RlLmlzSW5Cb3VuZHMoKSkgewogICAgICAgICAgICAgICAgIHNwZWN1
bGF0aW9uQ2hlY2soCi0gICAgICAgICAgICAgICAgICAgIFN0b3JlVG9Ib2xlT3JPdXRPZkJvdW5k
cywgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLAorICAgICAgICAgICAgICAgICAgICBTdG9yZVRvSG9s
ZU9yT3V0T2ZCb3VuZHMsIEpTVmFsdWVSZWdzKCksIDAsCiAgICAgICAgICAgICAgICAgICAgIG1f
aml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVi
bGljTGVuZ3RoKCkpKSk7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpKdW1wIGluQm91bmRzID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJs
ZXI6OkJlbG93LCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJl
ZywgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSk7CkBAIC0yODg3LDcgKzI4Nzks
NyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgICAg
ICAgICAgc2xvd0Nhc2UgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVx
dWFsLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQnV0
dGVyZmx5OjpvZmZzZXRPZlZlY3Rvckxlbmd0aCgpKSk7CiAgICAgICAgICAgICAgICAgCiAgICAg
ICAgICAgICAgICAgaWYgKCFhcnJheU1vZGUuaXNPdXRPZkJvdW5kcygpKQotICAgICAgICAgICAg
ICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE91dE9mQm91bmRzLCBKU1ZhbHVlUmVncygpLCBOb05v
ZGUsIHNsb3dDYXNlKTsKKyAgICAgICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhPdXRP
ZkJvdW5kcywgSlNWYWx1ZVJlZ3MoKSwgMCwgc2xvd0Nhc2UpOwogICAgICAgICAgICAgICAgIAog
ICAgICAgICAgICAgICAgIG1faml0LmFkZDMyKFRydXN0ZWRJbW0zMigxKSwgcHJvcGVydHlSZWcs
IHRlbXBvcmFyeVJlZyk7CiAgICAgICAgICAgICAgICAgbV9qaXQuc3RvcmUzMih0ZW1wb3JhcnlS
ZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEJ1dHRlcmZseTo6b2Zmc2V0
T2ZQdWJsaWNMZW5ndGgoKSkpOwpAQCAtMjkxMCw3ICsyOTAyLDcgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAgICAgICAgICAgICAgICAgTm9SZXN1
bHQsIGJhc2VSZWcsIHByb3BlcnR5UmVnLCB2YWx1ZVJlZykpOwogICAgICAgICAgICAgfQogCi0g
ICAgICAgICAgICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCwgVXNlQ2hpbGRyZW5DYWxsZWRFeHBs
aWNpdGx5KTsKKyAgICAgICAgICAgIG5vUmVzdWx0KG5vZGUsIFVzZUNoaWxkcmVuQ2FsbGVkRXhw
bGljaXRseSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCkBA
IC0yOTM2LDEzICsyOTI4LDEzIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYg
bm9kZSkKICAgICAgICAgICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgY2hpbGQ0KTsK
ICAgICAgICAgICAgIEdQUlJlZyBzdG9yYWdlUmVnID0gc3RvcmFnZS5ncHIoKTsKIAotICAgICAg
ICAgICAgaWYgKG5vZGUub3AoKSA9PSBQdXRCeVZhbEFsaWFzKSB7CisgICAgICAgICAgICBpZiAo
bm9kZS0+b3AoKSA9PSBQdXRCeVZhbEFsaWFzKSB7CiAgICAgICAgICAgICAgICAgLy8gU3RvcmUg
dGhlIHZhbHVlIHRvIHRoZSBhcnJheS4KICAgICAgICAgICAgICAgICBHUFJSZWcgcHJvcGVydHlS
ZWcgPSBwcm9wZXJ0eS5ncHIoKTsKICAgICAgICAgICAgICAgICBHUFJSZWcgdmFsdWVSZWcgPSB2
YWx1ZS5ncHIoKTsKICAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZTY0KHZhbHVlUmVnLCBNYWNy
b0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2Vt
Ymxlcjo6VGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3Jb
MF0pKSk7CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgbm9SZXN1bHQobV9jb21w
aWxlSW5kZXgpOworICAgICAgICAgICAgICAgIG5vUmVzdWx0KG5vZGUpOwogICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgCkBAIC0yOTUzLDE0ICsyOTQ1
LDE0IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKIAogICAgICAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgYmV5b25kQXJyYXlCb3VuZHMgPSBtX2ppdC5icmFu
Y2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQXJyYXlTdG9yYWdlOjp2ZWN0b3JMZW5ndGhPZmZz
ZXQoKSkpOwogICAgICAgICAgICAgaWYgKCFhcnJheU1vZGUuaXNPdXRPZkJvdW5kcygpKQotICAg
ICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soT3V0T2ZCb3VuZHMsIEpTVmFsdWVSZWdzKCks
IE5vTm9kZSwgYmV5b25kQXJyYXlCb3VuZHMpOworICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9u
Q2hlY2soT3V0T2ZCb3VuZHMsIEpTVmFsdWVSZWdzKCksIDAsIGJleW9uZEFycmF5Qm91bmRzKTsK
ICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKGJleW9u
ZEFycmF5Qm91bmRzKTsKIAogICAgICAgICAgICAgLy8gQ2hlY2sgaWYgd2UncmUgd3JpdGluZyB0
byBhIGhvbGU7IGlmIHNvIGluY3JlbWVudCBtX251bVZhbHVlc0luVmVjdG9yLgogICAgICAgICAg
ICAgaWYgKGFycmF5TW9kZS5pc0luQm91bmRzKCkpIHsKICAgICAgICAgICAgICAgICBzcGVjdWxh
dGlvbkNoZWNrKAotICAgICAgICAgICAgICAgICAgICBTdG9yZVRvSG9sZSwgSlNWYWx1ZVJlZ3Mo
KSwgTm9Ob2RlLAorICAgICAgICAgICAgICAgICAgICBTdG9yZVRvSG9sZSwgSlNWYWx1ZVJlZ3Mo
KSwgMCwKICAgICAgICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoVGVzdDY0KE1hY3JvQXNzZW1i
bGVyOjpaZXJvLCBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5
UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3Rv
cmFnZSwgbV92ZWN0b3JbMF0pKSkpOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBub3RIb2xlVmFsdWUgPSBtX2ppdC5icmFuY2hUZXN0
NjQoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3Rv
cmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBPQkpFQ1Rf
T0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkpKTsKQEAgLTI5OTgsNyArMjk5MCw3
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgICAg
ICAgICAgICAgICAgIE5vUmVzdWx0LCBiYXNlUmVnLCBwcm9wZXJ0eVJlZywgdmFsdWVSZWcpKTsK
ICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgbm9SZXN1bHQobV9jb21waWxlSW5kZXgsIFVz
ZUNoaWxkcmVuQ2FsbGVkRXhwbGljaXRseSk7CisgICAgICAgICAgICBub1Jlc3VsdChub2RlLCBV
c2VDaGlsZHJlbkNhbGxlZEV4cGxpY2l0bHkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IH0KICAgICAgICAgICAgIApAQCAtMzAxNiwxMiArMzAwOCwxMiBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAKICAgICAgICAgICAgIC8vIFR3byByZWFsbHkgbGFt
ZSBjaGVja3MuCiAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAotICAgICAgICAgICAgICAg
IFVuY291bnRhYmxlLCBKU1ZhbHVlU291cmNlKCksIE5vTm9kZSwKKyAgICAgICAgICAgICAgICBV
bmNvdW50YWJsZSwgSlNWYWx1ZVNvdXJjZSgpLCAwLAogICAgICAgICAgICAgICAgIG1faml0LmJy
YW5jaFB0cigKICAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVh
bCwgcHJvcGVydHlSZWcsCiAgICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKGJhc2VSZWcsIE9CSkVDVF9PRkZTRVRPRihBcmd1bWVudHMsIG1fbnVtQXJndW1lbnRzKSkp
KTsKICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCi0gICAgICAgICAgICAgICAgVW5jb3Vu
dGFibGUsIEpTVmFsdWVTb3VyY2UoKSwgTm9Ob2RlLAorICAgICAgICAgICAgICAgIFVuY291bnRh
YmxlLCBKU1ZhbHVlU291cmNlKCksIDAsCiAgICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoVGVz
dFB0cigKICAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sCiAgICAg
ICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKApAQCAtMzA0MCw3ICszMDMy
LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAg
ICAgICAgICAgICBzY3JhdGNoUmVnLCBzY3JhdGNoMlJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVz
RWlnaHQsCiAgICAgICAgICAgICAgICAgICAgIENhbGxGcmFtZTo6dGhpc0FyZ3VtZW50T2Zmc2V0
KCkgKiBzaXplb2YoUmVnaXN0ZXIpIC0gc2l6ZW9mKFJlZ2lzdGVyKSkpOwogICAgICAgICAgICAg
Ci0gICAgICAgICAgICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCk7CisgICAgICAgICAgICBub1Jl
c3VsdChub2RlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAK
QEAgLTMwOTEsOSArMzA4Myw5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYg
bm9kZSkKICAgICBjYXNlIFJlZ0V4cEV4ZWM6IHsKICAgICAgICAgaWYgKGNvbXBpbGVSZWdFeHBF
eGVjKG5vZGUpKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBpZiAoIW5vZGUuYWRqdXN0
ZWRSZWZDb3VudCgpKSB7Ci0gICAgICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRo
aXMsIG5vZGUuY2hpbGQxKCkpOwotICAgICAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYXJn
dW1lbnQodGhpcywgbm9kZS5jaGlsZDIoKSk7CisgICAgICAgIGlmICghbm9kZS0+YWRqdXN0ZWRS
ZWZDb3VudCgpKSB7CisgICAgICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMs
IG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGFyZ3Vt
ZW50KHRoaXMsIG5vZGUtPmNoaWxkMigpKTsKICAgICAgICAgICAgIEdQUlJlZyBiYXNlR1BSID0g
YmFzZS5ncHIoKTsKICAgICAgICAgICAgIEdQUlJlZyBhcmd1bWVudEdQUiA9IGFyZ3VtZW50Lmdw
cigpOwogICAgICAgICAgICAgCkBAIC0zMTAzLDEyICszMDk1LDEyIEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgICAgIAogICAgICAgICAgICAgLy8g
TXVzdCB1c2UganNWYWx1ZVJlc3VsdCBiZWNhdXNlIG90aGVyd2lzZSB3ZSBzY3JldyB1cCByZWdp
c3RlcgogICAgICAgICAgICAgLy8gYWxsb2NhdGlvbiwgd2hpY2ggdGhpbmtzIHRoYXQgdGhpcyBu
b2RlIGhhcyBhIHJlc3VsdC4KLSAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0Lmdwcigp
LCBtX2NvbXBpbGVJbmRleCk7CisgICAgICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdC5ncHIo
KSwgbm9kZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCi0gICAgICAgIFNwZWN1
bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS5jaGlsZDEoKSk7Ci0gICAgICAgIFNwZWN1
bGF0ZUNlbGxPcGVyYW5kIGFyZ3VtZW50KHRoaXMsIG5vZGUuY2hpbGQyKCkpOworICAgICAgICBT
cGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAg
U3BlY3VsYXRlQ2VsbE9wZXJhbmQgYXJndW1lbnQodGhpcywgbm9kZS0+Y2hpbGQyKCkpOwogICAg
ICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7CiAgICAgICAgIEdQUlJlZyBhcmd1bWVu
dEdQUiA9IGFyZ3VtZW50LmdwcigpOwogICAgICAgICAKQEAgLTMxMTYsMTMgKzMxMDgsMTMgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICBHUFJSZXN1
bHQgcmVzdWx0KHRoaXMpOwogICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblJlZ0V4cEV4
ZWMsIHJlc3VsdC5ncHIoKSwgYmFzZUdQUiwgYXJndW1lbnRHUFIpOwogICAgICAgICAKLSAgICAg
ICAganNWYWx1ZVJlc3VsdChyZXN1bHQuZ3ByKCksIG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAg
anNWYWx1ZVJlc3VsdChyZXN1bHQuZ3ByKCksIG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9
CiAKICAgICBjYXNlIFJlZ0V4cFRlc3Q6IHsKLSAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQg
YmFzZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKLSAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQg
YXJndW1lbnQodGhpcywgbm9kZS5jaGlsZDIoKSk7CisgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVy
YW5kIGJhc2UodGhpcywgbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBTcGVjdWxhdGVDZWxsT3Bl
cmFuZCBhcmd1bWVudCh0aGlzLCBub2RlLT5jaGlsZDIoKSk7CiAgICAgICAgIEdQUlJlZyBiYXNl
R1BSID0gYmFzZS5ncHIoKTsKICAgICAgICAgR1BSUmVnIGFyZ3VtZW50R1BSID0gYXJndW1lbnQu
Z3ByKCk7CiAgICAgICAgIApAQCAtMzEzMiwzNyArMzEyNCwzNyBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIAogICAgICAgICAvLyBJZiB3ZSBhZGQg
YSBEYXRhRm9ybWF0Qm9vbCwgd2Ugc2hvdWxkIHVzZSBpdCBoZXJlLgogICAgICAgICBtX2ppdC5v
cjMyKFRydXN0ZWRJbW0zMihWYWx1ZUZhbHNlKSwgcmVzdWx0LmdwcigpKTsKLSAgICAgICAganNW
YWx1ZVJlc3VsdChyZXN1bHQuZ3ByKCksIG1fY29tcGlsZUluZGV4LCBEYXRhRm9ybWF0SlNCb29s
ZWFuKTsKKyAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHQuZ3ByKCksIG5vZGUsIERhdGFGb3Jt
YXRKU0Jvb2xlYW4pOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIAogICAgIGNhc2Ug
QXJyYXlQdXNoOiB7Ci0gICAgICAgIEFTU0VSVChub2RlLmFycmF5TW9kZSgpLmlzSlNBcnJheSgp
KTsKKyAgICAgICAgQVNTRVJUKG5vZGUtPmFycmF5TW9kZSgpLmlzSlNBcnJheSgpKTsKICAgICAg
ICAgCi0gICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS5jaGlsZDEo
KSk7CisgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS0+Y2hpbGQx
KCkpOwogICAgICAgICBHUFJUZW1wb3Jhcnkgc3RvcmFnZUxlbmd0aCh0aGlzKTsKICAgICAgICAg
CiAgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKICAgICAgICAgR1BSUmVnIHN0
b3JhZ2VMZW5ndGhHUFIgPSBzdG9yYWdlTGVuZ3RoLmdwcigpOwogICAgICAgICAKLSAgICAgICAg
U3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBub2RlLmNoaWxkMygpKTsKKyAgICAgICAgU3Rv
cmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBub2RlLT5jaGlsZDMoKSk7CiAgICAgICAgIEdQUlJl
ZyBzdG9yYWdlR1BSID0gc3RvcmFnZS5ncHIoKTsKIAotICAgICAgICBzd2l0Y2ggKG5vZGUuYXJy
YXlNb2RlKCkudHlwZSgpKSB7CisgICAgICAgIHN3aXRjaCAobm9kZS0+YXJyYXlNb2RlKCkudHlw
ZSgpKSB7CiAgICAgICAgIGNhc2UgQXJyYXk6OkludDMyOgogICAgICAgICBjYXNlIEFycmF5OjpD
b250aWd1b3VzOiB7Ci0gICAgICAgICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2Rl
LmNoaWxkMigpKTsKKyAgICAgICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUt
PmNoaWxkMigpKTsKICAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOwog
Ci0gICAgICAgICAgICBpZiAobm9kZS5hcnJheU1vZGUoKS50eXBlKCkgPT0gQXJyYXk6OkludDMy
ICYmICFpc0ludDMyU3BlY3VsYXRpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQyKCkpLm1f
dHlwZSkpIHsKKyAgICAgICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS50eXBlKCkgPT0gQXJy
YXk6OkludDMyICYmICFpc0ludDMyU3BlY3VsYXRpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUtPmNo
aWxkMigpKS5tX3R5cGUpKSB7CiAgICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjaygKLSAg
ICAgICAgICAgICAgICAgICAgQmFkVHlwZSwgSlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCBub2RlLmNo
aWxkMigpLAorICAgICAgICAgICAgICAgICAgICBCYWRUeXBlLCBKU1ZhbHVlUmVncyh2YWx1ZUdQ
UiksIG5vZGUtPmNoaWxkMigpLAogICAgICAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2g2NChN
YWNyb0Fzc2VtYmxlcjo6QmVsb3csIHZhbHVlR1BSLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVn
aXN0ZXIpKTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgaWYgKG5vZGUuYXJyYXlNb2Rl
KCkudHlwZSgpICE9IEFycmF5OjpJbnQzMiAmJiBIZWFwOjppc1dyaXRlQmFycmllckVuYWJsZWQo
KSkgeworICAgICAgICAgICAgaWYgKG5vZGUtPmFycmF5TW9kZSgpLnR5cGUoKSAhPSBBcnJheTo6
SW50MzIgJiYgSGVhcDo6aXNXcml0ZUJhcnJpZXJFbmFibGVkKCkpIHsKICAgICAgICAgICAgICAg
ICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKLSAgICAgICAgICAgICAgICB3cml0ZUJhcnJp
ZXIoYmFzZUdQUiwgdmFsdWVHUFIsIG5vZGUuY2hpbGQyKCksIFdyaXRlQmFycmllckZvclByb3Bl
cnR5QWNjZXNzLCBzY3JhdGNoLmdwcigpLCBzdG9yYWdlTGVuZ3RoR1BSKTsKKyAgICAgICAgICAg
ICAgICB3cml0ZUJhcnJpZXIoYmFzZUdQUiwgdmFsdWVHUFIsIG5vZGUtPmNoaWxkMigpLCBXcml0
ZUJhcnJpZXJGb3JQcm9wZXJ0eUFjY2Vzcywgc2NyYXRjaC5ncHIoKSwgc3RvcmFnZUxlbmd0aEdQ
Uik7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgICAgIG1faml0LmxvYWQz
MihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBCdXR0ZXJmbHk6Om9mZnNldE9m
UHVibGljTGVuZ3RoKCkpLCBzdG9yYWdlTGVuZ3RoR1BSKTsKQEAgLTMxNzcsMTkgKzMxNjksMTkg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAgICAg
ICAgICAgICBzbG93UGF0aCwgdGhpcywgb3BlcmF0aW9uQXJyYXlQdXNoLCBOb1Jlc3VsdCwgc3Rv
cmFnZUxlbmd0aEdQUiwKICAgICAgICAgICAgICAgICAgICAgdmFsdWVHUFIsIGJhc2VHUFIpKTsK
ICAgICAgICAgCi0gICAgICAgICAgICBqc1ZhbHVlUmVzdWx0KHN0b3JhZ2VMZW5ndGhHUFIsIG1f
Y29tcGlsZUluZGV4KTsKKyAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQoc3RvcmFnZUxlbmd0aEdQ
Uiwgbm9kZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCiAg
ICAgICAgIGNhc2UgQXJyYXk6OkRvdWJsZTogewotICAgICAgICAgICAgU3BlY3VsYXRlRG91Ymxl
T3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLmNoaWxkMigpKTsKKyAgICAgICAgICAgIFNwZWN1bGF0
ZURvdWJsZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS0+Y2hpbGQyKCkpOwogICAgICAgICAgICAg
RlBSUmVnIHZhbHVlRlBSID0gdmFsdWUuZnByKCk7CiAKLSAgICAgICAgICAgIGlmICghaXNSZWFs
TnVtYmVyU3BlY3VsYXRpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQyKCkpLm1fdHlwZSkp
IHsKKyAgICAgICAgICAgIGlmICghaXNSZWFsTnVtYmVyU3BlY3VsYXRpb24obV9zdGF0ZS5mb3JO
b2RlKG5vZGUtPmNoaWxkMigpKS5tX3R5cGUpKSB7CiAgICAgICAgICAgICAgICAgLy8gRklYTUU6
IFdlIG5lZWQgYSB3YXkgb2YgcHJvZmlsaW5nIHRoZXNlLCBhbmQgd2UgbmVlZCB0byBob2lzdCB0
aGVtIGludG8KICAgICAgICAgICAgICAgICAvLyBTcGVjdWxhdGVEb3VibGVPcGVyYW5kLgogICAg
ICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCi0gICAgICAgICAgICAgICAgICAgIEJhZFR5
cGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwKKyAgICAgICAgICAgICAgICAgICAgQmFkVHlwZSwg
SlNWYWx1ZVJlZ3MoKSwgMCwKICAgICAgICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoRG91Ymxl
KE1hY3JvQXNzZW1ibGVyOjpEb3VibGVOb3RFcXVhbE9yVW5vcmRlcmVkLCB2YWx1ZUZQUiwgdmFs
dWVGUFIpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIApAQCAtMzIwNSwyMyArMzE5Nywy
MyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgICAg
ICAgICAgICAgIHNsb3dQYXRoLCB0aGlzLCBvcGVyYXRpb25BcnJheVB1c2hEb3VibGUsIE5vUmVz
dWx0LCBzdG9yYWdlTGVuZ3RoR1BSLAogICAgICAgICAgICAgICAgICAgICB2YWx1ZUZQUiwgYmFz
ZUdQUikpOwogICAgICAgICAKLSAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQoc3RvcmFnZUxlbmd0
aEdQUiwgbV9jb21waWxlSW5kZXgpOworICAgICAgICAgICAganNWYWx1ZVJlc3VsdChzdG9yYWdl
TGVuZ3RoR1BSLCBub2RlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAg
ICAgICAKICAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlTdG9yYWdlOiB7Ci0gICAgICAgICAgICBK
U1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLmNoaWxkMigpKTsKKyAgICAgICAgICAgIEpT
VmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUtPmNoaWxkMigpKTsKICAgICAgICAgICAgIEdQ
UlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOwogCiAgICAgICAgICAgICBpZiAoSGVhcDo6aXNX
cml0ZUJhcnJpZXJFbmFibGVkKCkpIHsKICAgICAgICAgICAgICAgICBHUFJUZW1wb3Jhcnkgc2Ny
YXRjaCh0aGlzKTsKLSAgICAgICAgICAgICAgICB3cml0ZUJhcnJpZXIoYmFzZUdQUiwgdmFsdWVH
UFIsIG5vZGUuY2hpbGQyKCksIFdyaXRlQmFycmllckZvclByb3BlcnR5QWNjZXNzLCBzY3JhdGNo
LmdwcigpLCBzdG9yYWdlTGVuZ3RoR1BSKTsKKyAgICAgICAgICAgICAgICB3cml0ZUJhcnJpZXIo
YmFzZUdQUiwgdmFsdWVHUFIsIG5vZGUtPmNoaWxkMigpLCBXcml0ZUJhcnJpZXJGb3JQcm9wZXJ0
eUFjY2Vzcywgc2NyYXRjaC5ncHIoKSwgc3RvcmFnZUxlbmd0aEdQUik7CiAgICAgICAgICAgICB9
CiAKICAgICAgICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9y
YWdlR1BSLCBBcnJheVN0b3JhZ2U6Omxlbmd0aE9mZnNldCgpKSwgc3RvcmFnZUxlbmd0aEdQUik7
CiAgICAgICAgIAogICAgICAgICAgICAgLy8gUmVmdXNlIHRvIGhhbmRsZSBiaXphcnJlIGxlbmd0
aHMuCi0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVn
cygpLCBOb05vZGUsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZSwgc3RvcmFn
ZUxlbmd0aEdQUiwgVHJ1c3RlZEltbTMyKDB4N2ZmZmZmZmUpKSk7CisgICAgICAgICAgICBzcGVj
dWxhdGlvbkNoZWNrKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCAwLCBtX2ppdC5icmFuY2gz
MihNYWNyb0Fzc2VtYmxlcjo6QWJvdmUsIHN0b3JhZ2VMZW5ndGhHUFIsIFRydXN0ZWRJbW0zMigw
eDdmZmZmZmZlKSkpOwogICAgICAgICAKICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1w
IHNsb3dQYXRoID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwg
c3RvcmFnZUxlbmd0aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgQXJy
YXlTdG9yYWdlOjp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpOwogICAgICAgICAKQEAgLTMyMzcsNyAr
MzIyOSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAg
ICAgICAgICAgICAgICAgc2xvd1BhdGgsIHRoaXMsIG9wZXJhdGlvbkFycmF5UHVzaCwgTm9SZXN1
bHQsIHN0b3JhZ2VMZW5ndGhHUFIsCiAgICAgICAgICAgICAgICAgICAgIHZhbHVlR1BSLCBiYXNl
R1BSKSk7CiAgICAgICAgIAotICAgICAgICAgICAganNWYWx1ZVJlc3VsdChzdG9yYWdlTGVuZ3Ro
R1BSLCBtX2NvbXBpbGVJbmRleCk7CisgICAgICAgICAgICBqc1ZhbHVlUmVzdWx0KHN0b3JhZ2VM
ZW5ndGhHUFIsIG5vZGUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAg
ICAgIApAQCAtMzI0OSwxMCArMzI0MSwxMCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
KE5vZGUmIG5vZGUpCiAgICAgfQogICAgICAgICAKICAgICBjYXNlIEFycmF5UG9wOiB7Ci0gICAg
ICAgIEFTU0VSVChub2RlLmFycmF5TW9kZSgpLmlzSlNBcnJheSgpKTsKKyAgICAgICAgQVNTRVJU
KG5vZGUtPmFycmF5TW9kZSgpLmlzSlNBcnJheSgpKTsKIAotICAgICAgICBTcGVjdWxhdGVDZWxs
T3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwotICAgICAgICBTdG9yYWdlT3BlcmFu
ZCBzdG9yYWdlKHRoaXMsIG5vZGUuY2hpbGQyKCkpOworICAgICAgICBTcGVjdWxhdGVDZWxsT3Bl
cmFuZCBiYXNlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgU3RvcmFnZU9wZXJhbmQg
c3RvcmFnZSh0aGlzLCBub2RlLT5jaGlsZDIoKSk7CiAgICAgICAgIEdQUlRlbXBvcmFyeSB2YWx1
ZSh0aGlzKTsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHN0b3JhZ2VMZW5ndGgodGhpcyk7CiAgICAg
ICAgIEZQUlRlbXBvcmFyeSB0ZW1wKHRoaXMpOyAvLyBUaGlzIGlzIGtpbmQgb2YgbGFtZSwgc2lu
Y2Ugd2UgZG9uJ3QgYWx3YXlzIG5lZWQgaXQuIEknbSByZWx5aW5nIG9uIHRoZSBmYWN0IHRoYXQg
d2UgZG9uJ3QgaGF2ZSBGUFIgcHJlc3N1cmUsIGVzcGVjaWFsbHkgaW4gY29kZSB0aGF0IHVzZXMg
cG9wKCkuCkBAIC0zMjYzLDcgKzMyNTUsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
KE5vZGUmIG5vZGUpCiAgICAgICAgIEdQUlJlZyBzdG9yYWdlTGVuZ3RoR1BSID0gc3RvcmFnZUxl
bmd0aC5ncHIoKTsKICAgICAgICAgRlBSUmVnIHRlbXBGUFIgPSB0ZW1wLmZwcigpOwogICAgICAg
ICAKLSAgICAgICAgc3dpdGNoIChub2RlLmFycmF5TW9kZSgpLnR5cGUoKSkgeworICAgICAgICBz
d2l0Y2ggKG5vZGUtPmFycmF5TW9kZSgpLnR5cGUoKSkgewogICAgICAgICBjYXNlIEFycmF5OjpJ
bnQzMjoKICAgICAgICAgY2FzZSBBcnJheTo6RG91YmxlOgogICAgICAgICBjYXNlIEFycmF5OjpD
b250aWd1b3VzOiB7CkBAIC0zMjc1LDcgKzMyNjcsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgICAgICBtX2ppdC5zdG9yZTMyKAogICAgICAgICAg
ICAgICAgIHN0b3JhZ2VMZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VH
UFIsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpOwogICAgICAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6Okp1bXAgc2xvd0Nhc2U7Ci0gICAgICAgICAgICBpZiAobm9kZS5hcnJheU1v
ZGUoKS50eXBlKCkgPT0gQXJyYXk6OkRvdWJsZSkgeworICAgICAgICAgICAgaWYgKG5vZGUtPmFy
cmF5TW9kZSgpLnR5cGUoKSA9PSBBcnJheTo6RG91YmxlKSB7CiAgICAgICAgICAgICAgICAgbV9q
aXQubG9hZERvdWJsZSgKICAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJ
bmRleChzdG9yYWdlR1BSLCBzdG9yYWdlTGVuZ3RoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNF
aWdodCksCiAgICAgICAgICAgICAgICAgICAgIHRlbXBGUFIpOwpAQCAtMzMwNSw3ICszMjk3LDcg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAgICAg
ICAgICAgICBzbG93Q2FzZSwgdGhpcywgb3BlcmF0aW9uQXJyYXlQb3BBbmRSZWNvdmVyTGVuZ3Ro
LCB2YWx1ZUdQUiwgYmFzZUdQUikpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICAvLyBXZSBj
YW4ndCBrbm93IGZvciBzdXJlIHRoYXQgdGhlIHJlc3VsdCBpcyBhbiBpbnQgYmVjYXVzZSBvZiB0
aGUgc2xvdyBwYXRocy4gOi0vCi0gICAgICAgICAgICBqc1ZhbHVlUmVzdWx0KHZhbHVlR1BSLCBt
X2NvbXBpbGVJbmRleCk7CisgICAgICAgICAgICBqc1ZhbHVlUmVzdWx0KHZhbHVlR1BSLCBub2Rl
KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKQEAgLTMzMzcs
NyArMzMyOSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAg
ICAgICAgICAgICAgICBzbG93UGF0aENhbGwoCiAgICAgICAgICAgICAgICAgICAgIHNsb3dDYXNl
cywgdGhpcywgb3BlcmF0aW9uQXJyYXlQb3AsIHZhbHVlR1BSLCBiYXNlR1BSKSk7CiAKLSAgICAg
ICAgICAgIGpzVmFsdWVSZXN1bHQodmFsdWVHUFIsIG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAg
ICAgIGpzVmFsdWVSZXN1bHQodmFsdWVHUFIsIG5vZGUpOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIH0KICAgICAgICAgICAgIApAQCAtMzM0OSwxOCArMzM0MSwxOCBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgfQogCiAgICAgY2FzZSBERkc6Okp1
bXA6IHsKLSAgICAgICAgQmxvY2tJbmRleCB0YWtlbiA9IG5vZGUudGFrZW5CbG9ja0luZGV4KCk7
CisgICAgICAgIEJsb2NrSW5kZXggdGFrZW4gPSBub2RlLT50YWtlbkJsb2NrSW5kZXgoKTsKICAg
ICAgICAganVtcCh0YWtlbik7Ci0gICAgICAgIG5vUmVzdWx0KG1fY29tcGlsZUluZGV4KTsKKyAg
ICAgICAgbm9SZXN1bHQobm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIAogICAgIGNhc2Ug
QnJhbmNoOgotICAgICAgICBpZiAoYXQobm9kZS5jaGlsZDEoKSkuc2hvdWxkU3BlY3VsYXRlSW50
ZWdlcigpKSB7Ci0gICAgICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcCh0aGlzLCBu
b2RlLmNoaWxkMSgpKTsKKyAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxh
dGVJbnRlZ2VyKCkpIHsKKyAgICAgICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wKHRo
aXMsIG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgQmxvY2tJbmRl
eCB0YWtlbiA9IG5vZGUudGFrZW5CbG9ja0luZGV4KCk7Ci0gICAgICAgICAgICBCbG9ja0luZGV4
IG5vdFRha2VuID0gbm9kZS5ub3RUYWtlbkJsb2NrSW5kZXgoKTsKKyAgICAgICAgICAgIEJsb2Nr
SW5kZXggdGFrZW4gPSBub2RlLT50YWtlbkJsb2NrSW5kZXgoKTsKKyAgICAgICAgICAgIEJsb2Nr
SW5kZXggbm90VGFrZW4gPSBub2RlLT5ub3RUYWtlbkJsb2NrSW5kZXgoKTsKICAgICAgICAgICAg
IAogICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlJlc3VsdENvbmRpdGlvbiBjb25kaXRpb24g
PSBNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybzsKICAgICAgICAgICAgIApAQCAtMzM3NCw3ICszMzY2
LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAg
ICAgYnJhbmNoVGVzdDMyKGNvbmRpdGlvbiwgb3AuZ3ByKCksIHRha2VuKTsKICAgICAgICAgICAg
IGp1bXAobm90VGFrZW4pOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBub1Jlc3VsdChtX2Nv
bXBpbGVJbmRleCk7CisgICAgICAgICAgICBub1Jlc3VsdChub2RlKTsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICB9CiAgICAgICAgIGVtaXRCcmFuY2gobm9kZSk7CkBAIC0zMzkxLDcgKzMz
ODMsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAjZW5kaWYK
IAogICAgICAgICAvLyBSZXR1cm4gdGhlIHJlc3VsdCBpbiByZXR1cm5WYWx1ZUdQUi4KLSAgICAg
ICAgSlNWYWx1ZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKCkpOworICAgICAgICBKU1Zh
bHVlT3BlcmFuZCBvcDEodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICBtX2ppdC5tb3Zl
KG9wMS5ncHIoKSwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOwogCiAgICAgICAgIC8vIEdyYWIg
dGhlIHJldHVybiBhZGRyZXNzLgpAQCAtMzQwMiw3ICszMzk0LDcgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICBtX2ppdC5yZXN0b3JlUmV0dXJuQWRk
cmVzc0JlZm9yZVJldHVybihHUFJJbmZvOjpyZWdUMSk7CiAgICAgICAgIG1faml0LnJldCgpOwog
ICAgICAgICAKLSAgICAgICAgbm9SZXN1bHQobV9jb21waWxlSW5kZXgpOworICAgICAgICBub1Jl
c3VsdChub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKQEAgLTM0MTAsMjkg
KzM0MDIsMjkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAg
IGNhc2UgVGhyb3dSZWZlcmVuY2VFcnJvcjogewogICAgICAgICAvLyBXZSBleHBlY3QgdGhhdCB0
aHJvdyBzdGF0ZW1lbnRzIGFyZSByYXJlIGFuZCBhcmUgaW50ZW5kZWQgdG8gZXhpdCB0aGUgY29k
ZSBibG9jawogICAgICAgICAvLyBhbnl3YXksIHNvIHdlIGp1c3QgT1NSIGJhY2sgdG8gdGhlIG9s
ZCBKSVQgZm9yIG5vdy4KLSAgICAgICAgdGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oVW5j
b3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSk7CisgICAgICAgIHRlcm1pbmF0ZVNwZWN1
bGF0aXZlRXhlY3V0aW9uKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCAwKTsKICAgICAgICAg
YnJlYWs7CiAgICAgfQogICAgICAgICAKICAgICBjYXNlIFRvUHJpbWl0aXZlOiB7Ci0gICAgICAg
IGlmIChhdChub2RlLmNoaWxkMSgpKS5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpIHsKKyAgICAg
ICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpIHsKICAgICAg
ICAgICAgIC8vIEl0J3MgcmVhbGx5IHByb2ZpdGFibGUgdG8gc3BlY3VsYXRlIGludGVnZXIsIHNp
bmNlIGl0J3MgcmVhbGx5IGNoZWFwLAogICAgICAgICAgICAgLy8gaXQgbWVhbnMgd2UgZG9uJ3Qg
aGF2ZSB0byBkbyBhbnkgcmVhbCB3b3JrLCBhbmQgd2UgZW1pdCBhIGxvdCBsZXNzIGNvZGUuCiAg
ICAgICAgICAgICAKLSAgICAgICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMSh0aGlz
LCBub2RlLmNoaWxkMSgpKTsKKyAgICAgICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9w
MSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0
KHRoaXMsIG9wMSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIG1faml0Lm1vdmUob3AxLmdw
cigpLCByZXN1bHQuZ3ByKCkpOwogICAgICAgICAgICAgaWYgKG9wMS5mb3JtYXQoKSA9PSBEYXRh
Rm9ybWF0SW50ZWdlcikKICAgICAgICAgICAgICAgICBtX2ppdC5vcjY0KEdQUkluZm86OnRhZ1R5
cGVOdW1iZXJSZWdpc3RlciwgcmVzdWx0LmdwcigpKTsKICAgICAgICAgICAgIAotICAgICAgICAg
ICAganNWYWx1ZVJlc3VsdChyZXN1bHQuZ3ByKCksIG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAg
ICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0LmdwcigpLCBub2RlKTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICAvLyBGSVhNRTogQWRkIHN0cmluZyBzcGVj
dWxhdGlvbiBoZXJlLgogICAgICAgICAKLSAgICAgICAgSlNWYWx1ZU9wZXJhbmQgb3AxKHRoaXMs
IG5vZGUuY2hpbGQxKCkpOworICAgICAgICBKU1ZhbHVlT3BlcmFuZCBvcDEodGhpcywgbm9kZS0+
Y2hpbGQxKCkpOwogICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIG9wMSk7CiAgICAg
ICAgIAogICAgICAgICBHUFJSZWcgb3AxR1BSID0gb3AxLmdwcigpOwpAQCAtMzQ0MCw3ICszNDMy
LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAK
ICAgICAgICAgb3AxLnVzZSgpOwogICAgICAgICAKLSAgICAgICAgaWYgKCEobV9zdGF0ZS5mb3JO
b2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSAmIH4oU3BlY051bWJlciB8IFNwZWNCb29sZWFuKSkp
CisgICAgICAgIGlmICghKG1fc3RhdGUuZm9yTm9kZShub2RlLT5jaGlsZDEoKSkubV90eXBlICYg
fihTcGVjTnVtYmVyIHwgU3BlY0Jvb2xlYW4pKSkKICAgICAgICAgICAgIG1faml0Lm1vdmUob3Ax
R1BSLCByZXN1bHRHUFIpOwogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpKdW1wIGFscmVhZHlQcmltaXRpdmUgPSBtX2ppdC5icmFuY2hUZXN0NjQoTWFjcm9Bc3Nl
bWJsZXI6Ok5vblplcm8sIG9wMUdQUiwgR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKTsKQEAgLTM0
NTMsMjQgKzM0NDUsMjQgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2Rl
KQogICAgICAgICAgICAgICAgIHNsb3dQYXRoQ2FsbChub3RQcmltaXRpdmUsIHRoaXMsIG9wZXJh
dGlvblRvUHJpbWl0aXZlLCByZXN1bHRHUFIsIG9wMUdQUikpOwogICAgICAgICB9CiAgICAgICAg
IAotICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdEdQUiwgbV9jb21waWxlSW5kZXgsIFVzZUNo
aWxkcmVuQ2FsbGVkRXhwbGljaXRseSk7CisgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0R1BS
LCBub2RlLCBVc2VDaGlsZHJlbkNhbGxlZEV4cGxpY2l0bHkpOwogICAgICAgICBicmVhazsKICAg
ICB9CiAgICAgICAgIAogICAgIGNhc2UgTmV3QXJyYXk6IHsKLSAgICAgICAgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCA9IG1faml0LmdyYXBoKCkuZ2xvYmFsT2JqZWN0Rm9yKG5vZGUuY29k
ZU9yaWdpbik7Ci0gICAgICAgIGlmICghZ2xvYmFsT2JqZWN0LT5pc0hhdmluZ0FCYWRUaW1lKCkg
JiYgIWhhc0FycmF5U3RvcmFnZShub2RlLmluZGV4aW5nVHlwZSgpKSkgeworICAgICAgICBKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbV9qaXQuZ3JhcGgoKS5nbG9iYWxPYmplY3RGb3Io
bm9kZS0+Y29kZU9yaWdpbik7CisgICAgICAgIGlmICghZ2xvYmFsT2JqZWN0LT5pc0hhdmluZ0FC
YWRUaW1lKCkgJiYgIWhhc0FycmF5U3RvcmFnZShub2RlLT5pbmRleGluZ1R5cGUoKSkpIHsKICAg
ICAgICAgICAgIGdsb2JhbE9iamVjdC0+aGF2aW5nQUJhZFRpbWVXYXRjaHBvaW50KCktPmFkZChz
cGVjdWxhdGlvbldhdGNocG9pbnQoKSk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIFN0cnVj
dHVyZSogc3RydWN0dXJlID0gZ2xvYmFsT2JqZWN0LT5hcnJheVN0cnVjdHVyZUZvckluZGV4aW5n
VHlwZUR1cmluZ0FsbG9jYXRpb24obm9kZS5pbmRleGluZ1R5cGUoKSk7Ci0gICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVChzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpID09IG5vZGUuaW5kZXhpbmdU
eXBlKCkpOworICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBnbG9iYWxPYmplY3Qt
PmFycmF5U3RydWN0dXJlRm9ySW5kZXhpbmdUeXBlRHVyaW5nQWxsb2NhdGlvbihub2RlLT5pbmRl
eGluZ1R5cGUoKSk7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChzdHJ1Y3R1cmUtPmluZGV4
aW5nVHlwZSgpID09IG5vZGUtPmluZGV4aW5nVHlwZSgpKTsKICAgICAgICAgICAgIEFTU0VSVCgK
ICAgICAgICAgICAgICAgICBoYXNVbmRlY2lkZWQoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSkK
ICAgICAgICAgICAgICAgICB8fCBoYXNJbnQzMihzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKQog
ICAgICAgICAgICAgICAgIHx8IGhhc0RvdWJsZShzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKQog
ICAgICAgICAgICAgICAgIHx8IGhhc0NvbnRpZ3VvdXMoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUo
KSkpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICB1bnNpZ25lZCBudW1FbGVtZW50cyA9IG5v
ZGUubnVtQ2hpbGRyZW4oKTsKKyAgICAgICAgICAgIHVuc2lnbmVkIG51bUVsZW1lbnRzID0gbm9k
ZS0+bnVtQ2hpbGRyZW4oKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgR1BSVGVtcG9yYXJ5
IHJlc3VsdCh0aGlzKTsKICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSBzdG9yYWdlKHRoaXMpOwpA
QCAtMzQ4MywxMSArMzQ3NSwxMSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUm
IG5vZGUpCiAgICAgICAgICAgICAvLyBBdCB0aGlzIHBvaW50LCBvbmUgd2F5IG9yIGFub3RoZXIs
IHJlc3VsdEdQUiBhbmQgc3RvcmFnZUdQUiBoYXZlIHBvaW50ZXJzIHRvCiAgICAgICAgICAgICAv
LyB0aGUgSlNBcnJheSBhbmQgdGhlIEJ1dHRlcmZseSwgcmVzcGVjdGl2ZWx5LgogICAgICAgICAg
ICAgCi0gICAgICAgICAgICBBU1NFUlQoIWhhc1VuZGVjaWRlZChzdHJ1Y3R1cmUtPmluZGV4aW5n
VHlwZSgpKSB8fCAhbm9kZS5udW1DaGlsZHJlbigpKTsKKyAgICAgICAgICAgIEFTU0VSVCghaGFz
VW5kZWNpZGVkKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpIHx8ICFub2RlLT5udW1DaGlsZHJl
bigpKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBvcGVyYW5kSWR4
ID0gMDsgb3BlcmFuZElkeCA8IG5vZGUubnVtQ2hpbGRyZW4oKTsgKytvcGVyYW5kSWR4KSB7Ci0g
ICAgICAgICAgICAgICAgRWRnZSB1c2UgPSBtX2ppdC5ncmFwaCgpLm1fdmFyQXJnQ2hpbGRyZW5b
bm9kZS5maXJzdENoaWxkKCkgKyBvcGVyYW5kSWR4XTsKLSAgICAgICAgICAgICAgICBzd2l0Y2gg
KG5vZGUuaW5kZXhpbmdUeXBlKCkpIHsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgb3BlcmFu
ZElkeCA9IDA7IG9wZXJhbmRJZHggPCBub2RlLT5udW1DaGlsZHJlbigpOyArK29wZXJhbmRJZHgp
IHsKKyAgICAgICAgICAgICAgICBFZGdlIHVzZSA9IG1faml0LmdyYXBoKCkubV92YXJBcmdDaGls
ZHJlbltub2RlLT5maXJzdENoaWxkKCkgKyBvcGVyYW5kSWR4XTsKKyAgICAgICAgICAgICAgICBz
d2l0Y2ggKG5vZGUtPmluZGV4aW5nVHlwZSgpKSB7CiAgICAgICAgICAgICAgICAgY2FzZSBBTExf
QkxBTktfSU5ERVhJTkdfVFlQRVM6CiAgICAgICAgICAgICAgICAgY2FzZSBBTExfVU5ERUNJREVE
X0lOREVYSU5HX1RZUEVTOgogICAgICAgICAgICAgICAgICAgICBDUkFTSCgpOwpAQCAtMzQ5OSw3
ICszNDkxLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IFdlIG5lZWQgYSB3YXkgb2YgcHJvZmlsaW5n
IHRoZXNlLCBhbmQgd2UgbmVlZCB0byBob2lzdCB0aGVtIGludG8KICAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQuCiAgICAgICAgICAgICAgICAgICAgICAg
ICBzcGVjdWxhdGlvbkNoZWNrKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJhZFR5cGUs
IEpTVmFsdWVSZWdzKCksIE5vTm9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBCYWRU
eXBlLCBKU1ZhbHVlUmVncygpLCAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1faml0
LmJyYW5jaERvdWJsZShNYWNyb0Fzc2VtYmxlcjo6RG91YmxlTm90RXF1YWxPclVub3JkZXJlZCwg
b3BGUFIsIG9wRlBSKSk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgCkBAIC0zNTEw
LDcgKzM1MDIsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAg
ICAgICAgICAgICAgICAgY2FzZSBBTExfQ09OVElHVU9VU19JTkRFWElOR19UWVBFUzogewogICAg
ICAgICAgICAgICAgICAgICBKU1ZhbHVlT3BlcmFuZCBvcGVyYW5kKHRoaXMsIHVzZSk7CiAgICAg
ICAgICAgICAgICAgICAgIEdQUlJlZyBvcEdQUiA9IG9wZXJhbmQuZ3ByKCk7Ci0gICAgICAgICAg
ICAgICAgICAgIGlmIChoYXNJbnQzMihub2RlLmluZGV4aW5nVHlwZSgpKSAmJiAhaXNJbnQzMlNw
ZWN1bGF0aW9uKG1fc3RhdGUuZm9yTm9kZSh1c2UpLm1fdHlwZSkpIHsKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKGhhc0ludDMyKG5vZGUtPmluZGV4aW5nVHlwZSgpKSAmJiAhaXNJbnQzMlNwZWN1
bGF0aW9uKG1fc3RhdGUuZm9yTm9kZSh1c2UpLm1fdHlwZSkpIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQmFk
VHlwZSwgSlNWYWx1ZVJlZ3Mob3BHUFIpLCB1c2UuaW5kZXgoKSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBtX2ppdC5icmFuY2g2NChNYWNyb0Fzc2VtYmxlcjo6QmVsb3csIG9wR1BSLCBH
UFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpKTsKQEAgLTM1MzEsMjkgKzM1MjMsMjkgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAgICAgLy8g
YmlnZ2VyIHByb2JsZW0gd2lsbCBhbHNvIGxpa2VseSBmaXggdGhlIHJlZHVuZGFuY3kgaW4gcmVs
b2FkaW5nIHRoZSBzdG9yYWdlCiAgICAgICAgICAgICAvLyBwb2ludGVyIHRoYXQgd2UgY3VycmVu
dGx5IGhhdmUuCiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGNlbGxSZXN1bHQocmVzdWx0R1BS
LCBtX2NvbXBpbGVJbmRleCk7CisgICAgICAgICAgICBjZWxsUmVzdWx0KHJlc3VsdEdQUiwgbm9k
ZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgaWYg
KCFub2RlLm51bUNoaWxkcmVuKCkpIHsKKyAgICAgICAgaWYgKCFub2RlLT5udW1DaGlsZHJlbigp
KSB7CiAgICAgICAgICAgICBmbHVzaFJlZ2lzdGVycygpOwogICAgICAgICAgICAgR1BSUmVzdWx0
IHJlc3VsdCh0aGlzKTsKLSAgICAgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3RW1w
dHlBcnJheSwgcmVzdWx0LmdwcigpLCBnbG9iYWxPYmplY3QtPmFycmF5U3RydWN0dXJlRm9ySW5k
ZXhpbmdUeXBlRHVyaW5nQWxsb2NhdGlvbihub2RlLmluZGV4aW5nVHlwZSgpKSk7Ci0gICAgICAg
ICAgICBjZWxsUmVzdWx0KHJlc3VsdC5ncHIoKSwgbV9jb21waWxlSW5kZXgpOworICAgICAgICAg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdFbXB0eUFycmF5LCByZXN1bHQuZ3ByKCksIGds
b2JhbE9iamVjdC0+YXJyYXlTdHJ1Y3R1cmVGb3JJbmRleGluZ1R5cGVEdXJpbmdBbGxvY2F0aW9u
KG5vZGUtPmluZGV4aW5nVHlwZSgpKSk7CisgICAgICAgICAgICBjZWxsUmVzdWx0KHJlc3VsdC5n
cHIoKSwgbm9kZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAKLSAg
ICAgICAgc2l6ZV90IHNjcmF0Y2hTaXplID0gc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSAqIG5vZGUu
bnVtQ2hpbGRyZW4oKTsKKyAgICAgICAgc2l6ZV90IHNjcmF0Y2hTaXplID0gc2l6ZW9mKEVuY29k
ZWRKU1ZhbHVlKSAqIG5vZGUtPm51bUNoaWxkcmVuKCk7CiAgICAgICAgIFNjcmF0Y2hCdWZmZXIq
IHNjcmF0Y2hCdWZmZXIgPSBtX2ppdC5nbG9iYWxEYXRhKCktPnNjcmF0Y2hCdWZmZXJGb3JTaXpl
KHNjcmF0Y2hTaXplKTsKICAgICAgICAgRW5jb2RlZEpTVmFsdWUqIGJ1ZmZlciA9IHNjcmF0Y2hC
dWZmZXIgPyBzdGF0aWNfY2FzdDxFbmNvZGVkSlNWYWx1ZSo+KHNjcmF0Y2hCdWZmZXItPmRhdGFC
dWZmZXIoKSkgOiAwOwogICAgICAgICAKLSAgICAgICAgZm9yICh1bnNpZ25lZCBvcGVyYW5kSWR4
ID0gMDsgb3BlcmFuZElkeCA8IG5vZGUubnVtQ2hpbGRyZW4oKTsgKytvcGVyYW5kSWR4KSB7Cisg
ICAgICAgIGZvciAodW5zaWduZWQgb3BlcmFuZElkeCA9IDA7IG9wZXJhbmRJZHggPCBub2RlLT5u
dW1DaGlsZHJlbigpOyArK29wZXJhbmRJZHgpIHsKICAgICAgICAgICAgIC8vIE5lZWQgdG8gcGVy
Zm9ybSB0aGUgc3BlY3VsYXRpb25zIHRoYXQgdGhpcyBub2RlIHByb21pc2VzIHRvIHBlcmZvcm0u
IElmIHdlJ3JlCiAgICAgICAgICAgICAvLyBlbWl0dGluZyBjb2RlIGhlcmUgYW5kIHRoZSBpbmRl
eGluZyB0eXBlIGlzIG5vdCBhcnJheSBzdG9yYWdlIHRoZW4gdGhlcmUgaXMKICAgICAgICAgICAg
IC8vIHByb2JhYmx5IHNvbWV0aGluZyBoaWxhcmlvdXMgZ29pbmcgb24gYW5kIHdlJ3JlIGFscmVh
ZHkgZmFpbGluZyBhdCBhbGwgdGhlCiAgICAgICAgICAgICAvLyB0aGluZ3MsIGJ1dCBhdCBsZWFz
dCB3ZSdyZSBnb2luZyB0byBiZSBzb3VuZC4KLSAgICAgICAgICAgIEVkZ2UgdXNlID0gbV9qaXQu
Z3JhcGgoKS5tX3ZhckFyZ0NoaWxkcmVuW25vZGUuZmlyc3RDaGlsZCgpICsgb3BlcmFuZElkeF07
Ci0gICAgICAgICAgICBzd2l0Y2ggKG5vZGUuaW5kZXhpbmdUeXBlKCkpIHsKKyAgICAgICAgICAg
IEVkZ2UgdXNlID0gbV9qaXQuZ3JhcGgoKS5tX3ZhckFyZ0NoaWxkcmVuW25vZGUtPmZpcnN0Q2hp
bGQoKSArIG9wZXJhbmRJZHhdOworICAgICAgICAgICAgc3dpdGNoIChub2RlLT5pbmRleGluZ1R5
cGUoKSkgewogICAgICAgICAgICAgY2FzZSBBTExfQkxBTktfSU5ERVhJTkdfVFlQRVM6CiAgICAg
ICAgICAgICBjYXNlIEFMTF9VTkRFQ0lERURfSU5ERVhJTkdfVFlQRVM6CiAgICAgICAgICAgICAg
ICAgQ1JBU0goKTsKQEAgLTM1NjcsNyArMzU1OSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IFdlIG5lZWQg
YSB3YXkgb2YgcHJvZmlsaW5nIHRoZXNlLCBhbmQgd2UgbmVlZCB0byBob2lzdCB0aGVtIGludG8K
ICAgICAgICAgICAgICAgICAgICAgLy8gU3BlY3VsYXRlRG91YmxlT3BlcmFuZC4KICAgICAgICAg
ICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjaygKLSAgICAgICAgICAgICAgICAgICAgICAgIEJh
ZFR5cGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIEJh
ZFR5cGUsIEpTVmFsdWVSZWdzKCksIDAsCiAgICAgICAgICAgICAgICAgICAgICAgICBtX2ppdC5i
cmFuY2hEb3VibGUoTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZU5vdEVxdWFsT3JVbm9yZGVyZWQsIG9w
RlBSLCBvcEZQUikpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKQEAgLTM1
NzgsNyArMzU3MCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkK
ICAgICAgICAgICAgIGNhc2UgQUxMX0lOVDMyX0lOREVYSU5HX1RZUEVTOiB7CiAgICAgICAgICAg
ICAgICAgSlNWYWx1ZU9wZXJhbmQgb3BlcmFuZCh0aGlzLCB1c2UpOwogICAgICAgICAgICAgICAg
IEdQUlJlZyBvcEdQUiA9IG9wZXJhbmQuZ3ByKCk7Ci0gICAgICAgICAgICAgICAgaWYgKGhhc0lu
dDMyKG5vZGUuaW5kZXhpbmdUeXBlKCkpICYmICFpc0ludDMyU3BlY3VsYXRpb24obV9zdGF0ZS5m
b3JOb2RlKHVzZSkubV90eXBlKSkgeworICAgICAgICAgICAgICAgIGlmIChoYXNJbnQzMihub2Rl
LT5pbmRleGluZ1R5cGUoKSkgJiYgIWlzSW50MzJTcGVjdWxhdGlvbihtX3N0YXRlLmZvck5vZGUo
dXNlKS5tX3R5cGUpKSB7CiAgICAgICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCiAg
ICAgICAgICAgICAgICAgICAgICAgICBCYWRUeXBlLCBKU1ZhbHVlUmVncyhvcEdQUiksIHVzZS5p
bmRleCgpLAogICAgICAgICAgICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoNjQoTWFjcm9Bc3Nl
bWJsZXI6OkJlbG93LCBvcEdQUiwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKSk7CkBA
IC0zNjAwLDcgKzM1OTIsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5v
ZGUpCiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIHN3aXRjaCAo
bm9kZS5pbmRleGluZ1R5cGUoKSkgeworICAgICAgICBzd2l0Y2ggKG5vZGUtPmluZGV4aW5nVHlw
ZSgpKSB7CiAgICAgICAgIGNhc2UgQUxMX0RPVUJMRV9JTkRFWElOR19UWVBFUzoKICAgICAgICAg
Y2FzZSBBTExfSU5UMzJfSU5ERVhJTkdfVFlQRVM6CiAgICAgICAgICAgICB1c2VDaGlsZHJlbihu
b2RlKTsKQEAgLTM2MjIsOCArMzYxNCw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUo
Tm9kZSYgbm9kZSkKICAgICAgICAgR1BSUmVzdWx0IHJlc3VsdCh0aGlzKTsKICAgICAgICAgCiAg
ICAgICAgIGNhbGxPcGVyYXRpb24oCi0gICAgICAgICAgICBvcGVyYXRpb25OZXdBcnJheSwgcmVz
dWx0LmdwcigpLCBnbG9iYWxPYmplY3QtPmFycmF5U3RydWN0dXJlRm9ySW5kZXhpbmdUeXBlRHVy
aW5nQWxsb2NhdGlvbihub2RlLmluZGV4aW5nVHlwZSgpKSwKLSAgICAgICAgICAgIHN0YXRpY19j
YXN0PHZvaWQqPihidWZmZXIpLCBub2RlLm51bUNoaWxkcmVuKCkpOworICAgICAgICAgICAgb3Bl
cmF0aW9uTmV3QXJyYXksIHJlc3VsdC5ncHIoKSwgZ2xvYmFsT2JqZWN0LT5hcnJheVN0cnVjdHVy
ZUZvckluZGV4aW5nVHlwZUR1cmluZ0FsbG9jYXRpb24obm9kZS0+aW5kZXhpbmdUeXBlKCkpLAor
ICAgICAgICAgICAgc3RhdGljX2Nhc3Q8dm9pZCo+KGJ1ZmZlciksIG5vZGUtPm51bUNoaWxkcmVu
KCkpOwogCiAgICAgICAgIGlmIChzY3JhdGNoU2l6ZSkgewogICAgICAgICAgICAgR1BSVGVtcG9y
YXJ5IHNjcmF0Y2godGhpcyk7CkBAIC0zNjMyLDE2ICszNjI0LDE2IEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgICAgIG1faml0LnN0b3JlUHRyKFRy
dXN0ZWRJbW1QdHIoMCksIHNjcmF0Y2guZ3ByKCkpOwogICAgICAgICB9CiAKLSAgICAgICAgY2Vs
bFJlc3VsdChyZXN1bHQuZ3ByKCksIG1fY29tcGlsZUluZGV4LCBVc2VDaGlsZHJlbkNhbGxlZEV4
cGxpY2l0bHkpOworICAgICAgICBjZWxsUmVzdWx0KHJlc3VsdC5ncHIoKSwgbm9kZSwgVXNlQ2hp
bGRyZW5DYWxsZWRFeHBsaWNpdGx5KTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAK
ICAgICBjYXNlIE5ld0FycmF5V2l0aFNpemU6IHsKLSAgICAgICAgSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCA9IG1faml0LmdyYXBoKCkuZ2xvYmFsT2JqZWN0Rm9yKG5vZGUuY29kZU9yaWdp
bik7Ci0gICAgICAgIGlmICghZ2xvYmFsT2JqZWN0LT5pc0hhdmluZ0FCYWRUaW1lKCkgJiYgIWhh
c0FycmF5U3RvcmFnZShub2RlLmluZGV4aW5nVHlwZSgpKSkgeworICAgICAgICBKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0ID0gbV9qaXQuZ3JhcGgoKS5nbG9iYWxPYmplY3RGb3Iobm9kZS0+
Y29kZU9yaWdpbik7CisgICAgICAgIGlmICghZ2xvYmFsT2JqZWN0LT5pc0hhdmluZ0FCYWRUaW1l
KCkgJiYgIWhhc0FycmF5U3RvcmFnZShub2RlLT5pbmRleGluZ1R5cGUoKSkpIHsKICAgICAgICAg
ICAgIGdsb2JhbE9iamVjdC0+aGF2aW5nQUJhZFRpbWVXYXRjaHBvaW50KCktPmFkZChzcGVjdWxh
dGlvbldhdGNocG9pbnQoKSk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIFNwZWN1bGF0ZVN0
cmljdEludDMyT3BlcmFuZCBzaXplKHRoaXMsIG5vZGUuY2hpbGQxKCkpOworICAgICAgICAgICAg
U3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIHNpemUodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwog
ICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKICAgICAgICAgICAgIEdQUlRl
bXBvcmFyeSBzdG9yYWdlKHRoaXMpOwogICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2go
dGhpcyk7CkBAIC0zNjUzLDcgKzM2NDUsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
KE5vZGUmIG5vZGUpCiAgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3By
KCk7CiAgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaDJHUFIgPSBJbnZhbGlkR1BSUmVnOwogICAg
ICAgICAgICAgCi0gICAgICAgICAgICBpZiAoaGFzRG91YmxlKG5vZGUuaW5kZXhpbmdUeXBlKCkp
KSB7CisgICAgICAgICAgICBpZiAoaGFzRG91YmxlKG5vZGUtPmluZGV4aW5nVHlwZSgpKSkgewog
ICAgICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZWFsU2NyYXRjaDIodGhpcywgc2l6ZSk7CiAg
ICAgICAgICAgICAgICAgc2NyYXRjaDIuYWRvcHQocmVhbFNjcmF0Y2gyKTsKICAgICAgICAgICAg
ICAgICBzY3JhdGNoMkdQUiA9IHNjcmF0Y2gyLmdwcigpOwpAQCAtMzY3MCwxMyArMzY2MiwxMyBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgICAgICAg
ICAgZW1pdEFsbG9jYXRlQmFzaWNTdG9yYWdlKHJlc3VsdEdQUiwgc3RvcmFnZUdQUikpOwogICAg
ICAgICAgICAgbV9qaXQuc3ViUHRyKHNjcmF0Y2hHUFIsIHN0b3JhZ2VHUFIpOwogICAgICAgICAg
ICAgZW1pdEFsbG9jYXRlQmFzaWNKU09iamVjdDxKU0FycmF5LCBNYXJrZWRCbG9jazo6Tm9uZT4o
Ci0gICAgICAgICAgICAgICAgVHJ1c3RlZEltbVB0cihnbG9iYWxPYmplY3QtPmFycmF5U3RydWN0
dXJlRm9ySW5kZXhpbmdUeXBlRHVyaW5nQWxsb2NhdGlvbihub2RlLmluZGV4aW5nVHlwZSgpKSks
IHJlc3VsdEdQUiwgc2NyYXRjaEdQUiwKKyAgICAgICAgICAgICAgICBUcnVzdGVkSW1tUHRyKGds
b2JhbE9iamVjdC0+YXJyYXlTdHJ1Y3R1cmVGb3JJbmRleGluZ1R5cGVEdXJpbmdBbGxvY2F0aW9u
KG5vZGUtPmluZGV4aW5nVHlwZSgpKSksIHJlc3VsdEdQUiwgc2NyYXRjaEdQUiwKICAgICAgICAg
ICAgICAgICBzdG9yYWdlR1BSLCBzaXplb2YoSlNBcnJheSksIHNsb3dDYXNlcyk7CiAgICAgICAg
ICAgICAKICAgICAgICAgICAgIG1faml0LnN0b3JlMzIoc2l6ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3Moc3RvcmFnZUdQUiwgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSk7
CiAgICAgICAgICAgICBtX2ppdC5zdG9yZTMyKHNpemVHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKHN0b3JhZ2VHUFIsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZWZWN0b3JMZW5ndGgoKSkpOwogICAg
ICAgICAgICAgCi0gICAgICAgICAgICBpZiAoaGFzRG91YmxlKG5vZGUuaW5kZXhpbmdUeXBlKCkp
KSB7CisgICAgICAgICAgICBpZiAoaGFzRG91YmxlKG5vZGUtPmluZGV4aW5nVHlwZSgpKSkgewog
ICAgICAgICAgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbTY0KGJpdHdpc2VfY2FzdDxpbnQ2
NF90PihRTmFOKSksIHNjcmF0Y2hHUFIpOwogICAgICAgICAgICAgICAgIG1faml0Lm1vdmUoc2l6
ZUdQUiwgc2NyYXRjaDJHUFIpOwogICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1w
IGRvbmUgPSBtX2ppdC5icmFuY2hUZXN0MzIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHNjcmF0Y2gy
R1BSKTsKQEAgLTM2OTAsMzggKzM2ODIsMzggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZShOb2RlJiBub2RlKQogICAgICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoYWRvcHRQdHIo
CiAgICAgICAgICAgICAgICAgbmV3IENhbGxBcnJheUFsbG9jYXRvcldpdGhWYXJpYWJsZVNpemVT
bG93UGF0aEdlbmVyYXRvcigKICAgICAgICAgICAgICAgICAgICAgc2xvd0Nhc2VzLCB0aGlzLCBv
cGVyYXRpb25OZXdBcnJheVdpdGhTaXplLCByZXN1bHRHUFIsCi0gICAgICAgICAgICAgICAgICAg
IGdsb2JhbE9iamVjdC0+YXJyYXlTdHJ1Y3R1cmVGb3JJbmRleGluZ1R5cGVEdXJpbmdBbGxvY2F0
aW9uKG5vZGUuaW5kZXhpbmdUeXBlKCkpLAorICAgICAgICAgICAgICAgICAgICBnbG9iYWxPYmpl
Y3QtPmFycmF5U3RydWN0dXJlRm9ySW5kZXhpbmdUeXBlRHVyaW5nQWxsb2NhdGlvbihub2RlLT5p
bmRleGluZ1R5cGUoKSksCiAgICAgICAgICAgICAgICAgICAgIGdsb2JhbE9iamVjdC0+YXJyYXlT
dHJ1Y3R1cmVGb3JJbmRleGluZ1R5cGVEdXJpbmdBbGxvY2F0aW9uKEFycmF5V2l0aEFycmF5U3Rv
cmFnZSksCiAgICAgICAgICAgICAgICAgICAgIHNpemVHUFIpKSk7CiAgICAgICAgICAgICAKLSAg
ICAgICAgICAgIGNlbGxSZXN1bHQocmVzdWx0R1BSLCBtX2NvbXBpbGVJbmRleCk7CisgICAgICAg
ICAgICBjZWxsUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgfQogICAgICAgICAKLSAgICAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIHNp
emUodGhpcywgbm9kZS5jaGlsZDEoKSk7CisgICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3Bl
cmFuZCBzaXplKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgR1BSUmVnIHNpemVHUFIg
PSBzaXplLmdwcigpOwogICAgICAgICBmbHVzaFJlZ2lzdGVycygpOwogICAgICAgICBHUFJSZXN1
bHQgcmVzdWx0KHRoaXMpOwogICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0Lmdwcigp
OwogICAgICAgICBHUFJSZWcgc3RydWN0dXJlR1BSID0gc2VsZWN0U2NyYXRjaEdQUihzaXplR1BS
KTsKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgYmlnTGVuZ3RoID0gbV9qaXQuYnJhbmNo
MzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgc2l6ZUdQUiwgVHJ1c3RlZEltbTMyKE1J
Tl9TUEFSU0VfQVJSQVlfSU5ERVgpKTsKLSAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRy
KGdsb2JhbE9iamVjdC0+YXJyYXlTdHJ1Y3R1cmVGb3JJbmRleGluZ1R5cGVEdXJpbmdBbGxvY2F0
aW9uKG5vZGUuaW5kZXhpbmdUeXBlKCkpKSwgc3RydWN0dXJlR1BSKTsKKyAgICAgICAgbV9qaXQu
bW92ZShUcnVzdGVkSW1tUHRyKGdsb2JhbE9iamVjdC0+YXJyYXlTdHJ1Y3R1cmVGb3JJbmRleGlu
Z1R5cGVEdXJpbmdBbGxvY2F0aW9uKG5vZGUtPmluZGV4aW5nVHlwZSgpKSksIHN0cnVjdHVyZUdQ
Uik7CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGRvbmUgPSBtX2ppdC5qdW1wKCk7CiAg
ICAgICAgIGJpZ0xlbmd0aC5saW5rKCZtX2ppdCk7CiAgICAgICAgIG1faml0Lm1vdmUoVHJ1c3Rl
ZEltbVB0cihnbG9iYWxPYmplY3QtPmFycmF5U3RydWN0dXJlRm9ySW5kZXhpbmdUeXBlRHVyaW5n
QWxsb2NhdGlvbihBcnJheVdpdGhBcnJheVN0b3JhZ2UpKSwgc3RydWN0dXJlR1BSKTsKICAgICAg
ICAgZG9uZS5saW5rKCZtX2ppdCk7CiAgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3
QXJyYXlXaXRoU2l6ZSwgcmVzdWx0R1BSLCBzdHJ1Y3R1cmVHUFIsIHNpemVHUFIpOwotICAgICAg
ICBjZWxsUmVzdWx0KHJlc3VsdEdQUiwgbV9jb21waWxlSW5kZXgpOworICAgICAgICBjZWxsUmVz
dWx0KHJlc3VsdEdQUiwgbm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCiAg
ICAgY2FzZSBTdHJDYXQ6IHsKLSAgICAgICAgc2l6ZV90IHNjcmF0Y2hTaXplID0gc2l6ZW9mKEVu
Y29kZWRKU1ZhbHVlKSAqIG5vZGUubnVtQ2hpbGRyZW4oKTsKKyAgICAgICAgc2l6ZV90IHNjcmF0
Y2hTaXplID0gc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSAqIG5vZGUtPm51bUNoaWxkcmVuKCk7CiAg
ICAgICAgIFNjcmF0Y2hCdWZmZXIqIHNjcmF0Y2hCdWZmZXIgPSBtX2ppdC5nbG9iYWxEYXRhKCkt
PnNjcmF0Y2hCdWZmZXJGb3JTaXplKHNjcmF0Y2hTaXplKTsKICAgICAgICAgRW5jb2RlZEpTVmFs
dWUqIGJ1ZmZlciA9IHNjcmF0Y2hCdWZmZXIgPyBzdGF0aWNfY2FzdDxFbmNvZGVkSlNWYWx1ZSo+
KHNjcmF0Y2hCdWZmZXItPmRhdGFCdWZmZXIoKSkgOiAwOwogICAgICAgICAKLSAgICAgICAgZm9y
ICh1bnNpZ25lZCBvcGVyYW5kSWR4ID0gMDsgb3BlcmFuZElkeCA8IG5vZGUubnVtQ2hpbGRyZW4o
KTsgKytvcGVyYW5kSWR4KSB7Ci0gICAgICAgICAgICBKU1ZhbHVlT3BlcmFuZCBvcGVyYW5kKHRo
aXMsIG1faml0LmdyYXBoKCkubV92YXJBcmdDaGlsZHJlbltub2RlLmZpcnN0Q2hpbGQoKSArIG9w
ZXJhbmRJZHhdKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBvcGVyYW5kSWR4ID0gMDsgb3BlcmFu
ZElkeCA8IG5vZGUtPm51bUNoaWxkcmVuKCk7ICsrb3BlcmFuZElkeCkgeworICAgICAgICAgICAg
SlNWYWx1ZU9wZXJhbmQgb3BlcmFuZCh0aGlzLCBtX2ppdC5ncmFwaCgpLm1fdmFyQXJnQ2hpbGRy
ZW5bbm9kZS0+Zmlyc3RDaGlsZCgpICsgb3BlcmFuZElkeF0pOwogICAgICAgICAgICAgR1BSUmVn
IG9wR1BSID0gb3BlcmFuZC5ncHIoKTsKICAgICAgICAgICAgIG9wZXJhbmQudXNlKCk7CiAgICAg
ICAgICAgICAKQEAgLTM3NDAsNyArMzczMiw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGUoTm9kZSYgbm9kZSkKIAogICAgICAgICBHUFJSZXN1bHQgcmVzdWx0KHRoaXMpOwogICAgICAg
ICAKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25TdHJDYXQsIHJlc3VsdC5ncHIoKSwg
c3RhdGljX2Nhc3Q8dm9pZCAqPihidWZmZXIpLCBub2RlLm51bUNoaWxkcmVuKCkpOworICAgICAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblN0ckNhdCwgcmVzdWx0LmdwcigpLCBzdGF0aWNfY2Fz
dDx2b2lkICo+KGJ1ZmZlciksIG5vZGUtPm51bUNoaWxkcmVuKCkpOwogCiAgICAgICAgIGlmIChz
Y3JhdGNoU2l6ZSkgewogICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7CkBA
IC0zNzQ5LDE3ICszNzQxLDE3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYg
bm9kZSkKICAgICAgICAgICAgIG1faml0LnN0b3JlUHRyKFRydXN0ZWRJbW1QdHIoMCksIHNjcmF0
Y2guZ3ByKCkpOwogICAgICAgICB9CiAKLSAgICAgICAgY2VsbFJlc3VsdChyZXN1bHQuZ3ByKCks
IG1fY29tcGlsZUluZGV4LCBVc2VDaGlsZHJlbkNhbGxlZEV4cGxpY2l0bHkpOworICAgICAgICBj
ZWxsUmVzdWx0KHJlc3VsdC5ncHIoKSwgbm9kZSwgVXNlQ2hpbGRyZW5DYWxsZWRFeHBsaWNpdGx5
KTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKICAgICBjYXNlIE5ld0FycmF5QnVm
ZmVyOiB7Ci0gICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBtX2ppdC5ncmFw
aCgpLmdsb2JhbE9iamVjdEZvcihub2RlLmNvZGVPcmlnaW4pOwotICAgICAgICBJbmRleGluZ1R5
cGUgaW5kZXhpbmdUeXBlID0gbm9kZS5pbmRleGluZ1R5cGUoKTsKKyAgICAgICAgSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCA9IG1faml0LmdyYXBoKCkuZ2xvYmFsT2JqZWN0Rm9yKG5vZGUt
PmNvZGVPcmlnaW4pOworICAgICAgICBJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlID0gbm9kZS0+
aW5kZXhpbmdUeXBlKCk7CiAgICAgICAgIGlmICghZ2xvYmFsT2JqZWN0LT5pc0hhdmluZ0FCYWRU
aW1lKCkgJiYgIWhhc0FycmF5U3RvcmFnZShpbmRleGluZ1R5cGUpKSB7CiAgICAgICAgICAgICBn
bG9iYWxPYmplY3QtPmhhdmluZ0FCYWRUaW1lV2F0Y2hwb2ludCgpLT5hZGQoc3BlY3VsYXRpb25X
YXRjaHBvaW50KCkpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICB1bnNpZ25lZCBudW1FbGVt
ZW50cyA9IG5vZGUubnVtQ29uc3RhbnRzKCk7CisgICAgICAgICAgICB1bnNpZ25lZCBudW1FbGVt
ZW50cyA9IG5vZGUtPm51bUNvbnN0YW50cygpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBH
UFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwogICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHN0b3Jh
Z2UodGhpcyk7CkBAIC0zNzcwLDMyICszNzYyLDMyIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgICAgIGVtaXRBbGxvY2F0ZUpTQXJyYXkoZ2xvYmFs
T2JqZWN0LT5hcnJheVN0cnVjdHVyZUZvckluZGV4aW5nVHlwZUR1cmluZ0FsbG9jYXRpb24oaW5k
ZXhpbmdUeXBlKSwgcmVzdWx0R1BSLCBzdG9yYWdlR1BSLCBudW1FbGVtZW50cyk7CiAgICAgICAg
ICAgICAKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGluZGV4aW5nVHlwZSAmIElzQXJyYXkp
OwotICAgICAgICAgICAgSlNWYWx1ZSogZGF0YSA9IG1faml0LmNvZGVCbG9jaygpLT5jb25zdGFu
dEJ1ZmZlcihub2RlLnN0YXJ0Q29uc3RhbnQoKSk7CisgICAgICAgICAgICBKU1ZhbHVlKiBkYXRh
ID0gbV9qaXQuY29kZUJsb2NrKCktPmNvbnN0YW50QnVmZmVyKG5vZGUtPnN0YXJ0Q29uc3RhbnQo
KSk7CiAgICAgICAgICAgICBpZiAoaW5kZXhpbmdUeXBlID09IEFycmF5V2l0aERvdWJsZSkgewot
ICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW5kZXggPSAwOyBpbmRleCA8IG5vZGUubnVt
Q29uc3RhbnRzKCk7ICsraW5kZXgpIHsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGlu
ZGV4ID0gMDsgaW5kZXggPCBub2RlLT5udW1Db25zdGFudHMoKTsgKytpbmRleCkgewogICAgICAg
ICAgICAgICAgICAgICBkb3VibGUgdmFsdWUgPSBkYXRhW2luZGV4XS5hc051bWJlcigpOwogICAg
ICAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZTY0KAogICAgICAgICAgICAgICAgICAgICAgICAg
SW1tNjQoYml0d2lzZV9jYXN0PGludDY0X3Q+KHZhbHVlKSksCiAgICAgICAgICAgICAgICAgICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBzaXplb2YoZG91YmxlKSAq
IGluZGV4KSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGluZGV4ID0gMDsgaW5kZXggPCBub2RlLm51bUNvbnN0
YW50cygpOyArK2luZGV4KSB7CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbmRleCA9
IDA7IGluZGV4IDwgbm9kZS0+bnVtQ29uc3RhbnRzKCk7ICsraW5kZXgpIHsKICAgICAgICAgICAg
ICAgICAgICAgbV9qaXQuc3RvcmU2NCgKICAgICAgICAgICAgICAgICAgICAgICAgIEltbTY0KEpT
VmFsdWU6OmVuY29kZShkYXRhW2luZGV4XSkpLAogICAgICAgICAgICAgICAgICAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgc2l6ZW9mKEpTVmFsdWUpICogaW5kZXgp
KTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAg
ICAgICAgIGNlbGxSZXN1bHQocmVzdWx0R1BSLCBtX2NvbXBpbGVJbmRleCk7CisgICAgICAgICAg
ICBjZWxsUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgfQogICAgICAgICAKICAgICAgICAgZmx1c2hSZWdpc3RlcnMoKTsKICAgICAgICAgR1BSUmVz
dWx0IHJlc3VsdCh0aGlzKTsKICAgICAgICAgCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uTmV3QXJyYXlCdWZmZXIsIHJlc3VsdC5ncHIoKSwgZ2xvYmFsT2JqZWN0LT5hcnJheVN0cnVj
dHVyZUZvckluZGV4aW5nVHlwZUR1cmluZ0FsbG9jYXRpb24obm9kZS5pbmRleGluZ1R5cGUoKSks
IG5vZGUuc3RhcnRDb25zdGFudCgpLCBub2RlLm51bUNvbnN0YW50cygpKTsKKyAgICAgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25OZXdBcnJheUJ1ZmZlciwgcmVzdWx0LmdwcigpLCBnbG9iYWxP
YmplY3QtPmFycmF5U3RydWN0dXJlRm9ySW5kZXhpbmdUeXBlRHVyaW5nQWxsb2NhdGlvbihub2Rl
LT5pbmRleGluZ1R5cGUoKSksIG5vZGUtPnN0YXJ0Q29uc3RhbnQoKSwgbm9kZS0+bnVtQ29uc3Rh
bnRzKCkpOwogICAgICAgICAKLSAgICAgICAgY2VsbFJlc3VsdChyZXN1bHQuZ3ByKCksIG1fY29t
cGlsZUluZGV4KTsKKyAgICAgICAgY2VsbFJlc3VsdChyZXN1bHQuZ3ByKCksIG5vZGUpOwogICAg
ICAgICBicmVhazsKICAgICB9CiAgICAgICAgIApAQCAtMzgwMyw1NCArMzc5NSw1NCBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIGZsdXNoUmVnaXN0
ZXJzKCk7CiAgICAgICAgIEdQUlJlc3VsdCByZXN1bHQodGhpcyk7CiAgICAgICAgIAotICAgICAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld1JlZ2V4cCwgcmVzdWx0LmdwcigpLCBtX2ppdC5j
b2RlQmxvY2soKS0+cmVnZXhwKG5vZGUucmVnZXhwSW5kZXgoKSkpOworICAgICAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvbk5ld1JlZ2V4cCwgcmVzdWx0LmdwcigpLCBtX2ppdC5jb2RlQmxvY2so
KS0+cmVnZXhwKG5vZGUtPnJlZ2V4cEluZGV4KCkpKTsKICAgICAgICAgCi0gICAgICAgIGNlbGxS
ZXN1bHQocmVzdWx0LmdwcigpLCBtX2NvbXBpbGVJbmRleCk7CisgICAgICAgIGNlbGxSZXN1bHQo
cmVzdWx0LmdwcigpLCBub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKICAg
ICBjYXNlIENvbnZlcnRUaGlzOiB7Ci0gICAgICAgIGlmIChpc09iamVjdFNwZWN1bGF0aW9uKG1f
c3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKSB7Ci0gICAgICAgICAgICBTcGVj
dWxhdGVDZWxsT3BlcmFuZCB0aGlzVmFsdWUodGhpcywgbm9kZS5jaGlsZDEoKSk7CisgICAgICAg
IGlmIChpc09iamVjdFNwZWN1bGF0aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLT5jaGlsZDEoKSku
bV90eXBlKSkgeworICAgICAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgdGhpc1ZhbHVlKHRo
aXMsIG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhp
cywgdGhpc1ZhbHVlKTsKICAgICAgICAgICAgIG1faml0Lm1vdmUodGhpc1ZhbHVlLmdwcigpLCBy
ZXN1bHQuZ3ByKCkpOwotICAgICAgICAgICAgY2VsbFJlc3VsdChyZXN1bHQuZ3ByKCksIG1fY29t
cGlsZUluZGV4KTsKKyAgICAgICAgICAgIGNlbGxSZXN1bHQocmVzdWx0LmdwcigpLCBub2RlKTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBpZiAoaXNP
dGhlclNwZWN1bGF0aW9uKGF0KG5vZGUuY2hpbGQxKCkpLnByZWRpY3Rpb24oKSkpIHsKLSAgICAg
ICAgICAgIEpTVmFsdWVPcGVyYW5kIHRoaXNWYWx1ZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKKyAg
ICAgICAgaWYgKGlzT3RoZXJTcGVjdWxhdGlvbihub2RlLT5jaGlsZDEoKS0+cHJlZGljdGlvbigp
KSkgeworICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdGhpc1ZhbHVlKHRoaXMsIG5vZGUtPmNo
aWxkMSgpKTsKICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMsIHRoaXNWYWx1
ZSk7CiAgICAgICAgICAgICBHUFJSZWcgdGhpc1ZhbHVlR1BSID0gdGhpc1ZhbHVlLmdwcigpOwog
ICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOwogICAgICAgICAg
ICAgCi0gICAgICAgICAgICBpZiAoIWlzT3RoZXJTcGVjdWxhdGlvbihtX3N0YXRlLmZvck5vZGUo
bm9kZS5jaGlsZDEoKSkubV90eXBlKSkgeworICAgICAgICAgICAgaWYgKCFpc090aGVyU3BlY3Vs
YXRpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX3R5cGUpKSB7CiAgICAgICAg
ICAgICAgICAgbV9qaXQubW92ZSh0aGlzVmFsdWVHUFIsIHNjcmF0Y2hHUFIpOwogICAgICAgICAg
ICAgICAgIG1faml0LmFuZDY0KE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoflRhZ0JpdFVu
ZGVmaW5lZCksIHNjcmF0Y2hHUFIpOwotICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2so
QmFkVHlwZSwgSlNWYWx1ZVJlZ3ModGhpc1ZhbHVlR1BSKSwgbm9kZS5jaGlsZDEoKSwgbV9qaXQu
YnJhbmNoNjQoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBzY3JhdGNoR1BSLCBNYWNyb0Fzc2Vt
Ymxlcjo6VHJ1c3RlZEltbTY0KFZhbHVlTnVsbCkpKTsKKyAgICAgICAgICAgICAgICBzcGVjdWxh
dGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKHRoaXNWYWx1ZUdQUiksIG5vZGUtPmNoaWxk
MSgpLCBtX2ppdC5icmFuY2g2NChNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIHNjcmF0Y2hHUFIs
IE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQoVmFsdWVOdWxsKSkpOwogICAgICAgICAgICAg
fQogICAgICAgICAgICAgCi0gICAgICAgICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpU
cnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbFRoaXNPYmplY3RGb3Iobm9kZS5jb2RlT3JpZ2luKSks
IHNjcmF0Y2hHUFIpOwotICAgICAgICAgICAgY2VsbFJlc3VsdChzY3JhdGNoR1BSLCBtX2NvbXBp
bGVJbmRleCk7CisgICAgICAgICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVk
SW1tUHRyKG1faml0Lmdsb2JhbFRoaXNPYmplY3RGb3Iobm9kZS0+Y29kZU9yaWdpbikpLCBzY3Jh
dGNoR1BSKTsKKyAgICAgICAgICAgIGNlbGxSZXN1bHQoc2NyYXRjaEdQUiwgbm9kZSk7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgaWYgKGlzT2JqZWN0
U3BlY3VsYXRpb24oYXQobm9kZS5jaGlsZDEoKSkucHJlZGljdGlvbigpKSkgewotICAgICAgICAg
ICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgdGhpc1ZhbHVlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwor
ICAgICAgICBpZiAoaXNPYmplY3RTcGVjdWxhdGlvbihub2RlLT5jaGlsZDEoKS0+cHJlZGljdGlv
bigpKSkgeworICAgICAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgdGhpc1ZhbHVlKHRoaXMs
IG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywg
dGhpc1ZhbHVlKTsKICAgICAgICAgICAgIEdQUlJlZyB0aGlzVmFsdWVHUFIgPSB0aGlzVmFsdWUu
Z3ByKCk7CiAgICAgICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwogICAg
ICAgICAgICAgCi0gICAgICAgICAgICBpZiAoIWlzT2JqZWN0U3BlY3VsYXRpb24obV9zdGF0ZS5m
b3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpCi0gICAgICAgICAgICAgICAgc3BlY3VsYXRp
b25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyh0aGlzVmFsdWVHUFIpLCBub2RlLmNoaWxkMSgp
LCBtX2ppdC5icmFuY2hQdHIoSklUQ29tcGlsZXI6OkVxdWFsLCBKSVRDb21waWxlcjo6QWRkcmVz
cyh0aGlzVmFsdWVHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBKSVRDb21waWxlcjo6
VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkp
KTsKKyAgICAgICAgICAgIGlmICghaXNPYmplY3RTcGVjdWxhdGlvbihtX3N0YXRlLmZvck5vZGUo
bm9kZS0+Y2hpbGQxKCkpLm1fdHlwZSkpCisgICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVj
ayhCYWRUeXBlLCBKU1ZhbHVlUmVncyh0aGlzVmFsdWVHUFIpLCBub2RlLT5jaGlsZDEoKSwgbV9q
aXQuYnJhbmNoUHRyKEpJVENvbXBpbGVyOjpFcXVhbCwgSklUQ29tcGlsZXI6OkFkZHJlc3ModGhp
c1ZhbHVlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgSklUQ29tcGlsZXI6OlRydXN0
ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7CiAg
ICAgICAgICAgICAKICAgICAgICAgICAgIG1faml0Lm1vdmUodGhpc1ZhbHVlR1BSLCByZXN1bHRH
UFIpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBjZWxsUmVzdWx0KHJlc3VsdEdQUiwgbV9j
b21waWxlSW5kZXgpOworICAgICAgICAgICAgY2VsbFJlc3VsdChyZXN1bHRHUFIsIG5vZGUpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIEpTVmFsdWVP
cGVyYW5kIHRoaXNWYWx1ZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKKyAgICAgICAgSlNWYWx1ZU9w
ZXJhbmQgdGhpc1ZhbHVlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgR1BSUmVnIHRo
aXNWYWx1ZUdQUiA9IHRoaXNWYWx1ZS5ncHIoKTsKICAgICAgICAgCiAgICAgICAgIGZsdXNoUmVn
aXN0ZXJzKCk7CkBAIC0zODU4LDcgKzM4NTAsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIEdQUlJlc3VsdCByZXN1bHQodGhpcyk7CiAgICAgICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29udmVydFRoaXMsIHJlc3VsdC5ncHIoKSwgdGhpc1Zh
bHVlR1BSKTsKICAgICAgICAgCi0gICAgICAgIGNlbGxSZXN1bHQocmVzdWx0LmdwcigpLCBtX2Nv
bXBpbGVJbmRleCk7CisgICAgICAgIGNlbGxSZXN1bHQocmVzdWx0LmdwcigpLCBub2RlKTsKICAg
ICAgICAgYnJlYWs7CiAgICAgfQogCkBAIC0zODY5LDcgKzM4NjEsNyBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIC8vIHRoZW4gd2Ugc3BlY3VsYXRl
IGJlY2F1c2Ugd2Ugd2FudCB0byBnZXQgcmVjb21waWxlZCBpZiBpdCBpc24ndCAoc2luY2UKICAg
ICAgICAgLy8gb3RoZXJ3aXNlIHdlJ2Qgc3RhcnQgdGFraW5nIHNsb3cgcGF0aCBhIGxvdCkuCiAg
ICAgICAgIAotICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBjYWxsZWUodGhpcywgbm9kZS5j
aGlsZDEoKSk7CisgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGNhbGxlZSh0aGlzLCBub2Rl
LT5jaGlsZDEoKSk7CiAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CiAgICAgICAg
IEdQUlRlbXBvcmFyeSBzdHJ1Y3R1cmUodGhpcyk7CiAgICAgICAgIEdQUlRlbXBvcmFyeSBzY3Jh
dGNoKHRoaXMpOwpAQCAtMzg4OCwxMyArMzg4MCwxMyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIAogICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRv
cihzbG93UGF0aENhbGwoc2xvd1BhdGgsIHRoaXMsIG9wZXJhdGlvbkNyZWF0ZVRoaXMsIHJlc3Vs
dEdQUiwgY2FsbGVlR1BSKSk7CiAgICAgICAgIAotICAgICAgICBjZWxsUmVzdWx0KHJlc3VsdEdQ
UiwgbV9jb21waWxlSW5kZXgpOworICAgICAgICBjZWxsUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7
CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBJbmhlcml0b3JJRFdh
dGNocG9pbnQ6IHsKLSAgICAgICAganNDYXN0PEpTRnVuY3Rpb24qPihub2RlLmZ1bmN0aW9uKCkp
LT5hZGRJbmhlcml0b3JJRFdhdGNocG9pbnQoc3BlY3VsYXRpb25XYXRjaHBvaW50KCkpOwotICAg
ICAgICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCk7CisgICAgICAgIGpzQ2FzdDxKU0Z1bmN0aW9u
Kj4obm9kZS0+ZnVuY3Rpb24oKSktPmFkZEluaGVyaXRvcklEV2F0Y2hwb2ludChzcGVjdWxhdGlv
bldhdGNocG9pbnQoKSk7CisgICAgICAgIG5vUmVzdWx0KG5vZGUpOwogICAgICAgICBicmVhazsK
ICAgICB9CiAKQEAgLTM5MDcsMzMgKzM4OTksMzMgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZShOb2RlJiBub2RlKQogICAgICAgICAKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBM
aXN0IHNsb3dQYXRoOwogICAgICAgICAKLSAgICAgICAgZW1pdEFsbG9jYXRlSlNGaW5hbE9iamVj
dChNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihub2RlLnN0cnVjdHVyZSgpKSwgcmVzdWx0
R1BSLCBzY3JhdGNoR1BSLCBzbG93UGF0aCk7CisgICAgICAgIGVtaXRBbGxvY2F0ZUpTRmluYWxP
YmplY3QoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobm9kZS0+c3RydWN0dXJlKCkpLCBy
ZXN1bHRHUFIsIHNjcmF0Y2hHUFIsIHNsb3dQYXRoKTsKICAgICAgICAgCi0gICAgICAgIGFkZFNs
b3dQYXRoR2VuZXJhdG9yKHNsb3dQYXRoQ2FsbChzbG93UGF0aCwgdGhpcywgb3BlcmF0aW9uTmV3
T2JqZWN0LCByZXN1bHRHUFIsIG5vZGUuc3RydWN0dXJlKCkpKTsKKyAgICAgICAgYWRkU2xvd1Bh
dGhHZW5lcmF0b3Ioc2xvd1BhdGhDYWxsKHNsb3dQYXRoLCB0aGlzLCBvcGVyYXRpb25OZXdPYmpl
Y3QsIHJlc3VsdEdQUiwgbm9kZS0+c3RydWN0dXJlKCkpKTsKICAgICAgICAgCi0gICAgICAgIGNl
bGxSZXN1bHQocmVzdWx0R1BSLCBtX2NvbXBpbGVJbmRleCk7CisgICAgICAgIGNlbGxSZXN1bHQo
cmVzdWx0R1BSLCBub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAgY2FzZSBHZXRD
YWxsZWU6IHsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKLSAgICAgICAgbV9q
aXQubG9hZFB0cihKSVRDb21waWxlcjo6YWRkcmVzc0ZvcihzdGF0aWNfY2FzdDxWaXJ0dWFsUmVn
aXN0ZXI+KG5vZGUuY29kZU9yaWdpbi5zdGFja09mZnNldCgpICsgc3RhdGljX2Nhc3Q8aW50PihK
U1N0YWNrOjpDYWxsZWUpKSksIHJlc3VsdC5ncHIoKSk7Ci0gICAgICAgIGNlbGxSZXN1bHQocmVz
dWx0LmdwcigpLCBtX2NvbXBpbGVJbmRleCk7CisgICAgICAgIG1faml0LmxvYWRQdHIoSklUQ29t
cGlsZXI6OmFkZHJlc3NGb3Ioc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihub2RlLT5jb2Rl
T3JpZ2luLnN0YWNrT2Zmc2V0KCkgKyBzdGF0aWNfY2FzdDxpbnQ+KEpTU3RhY2s6OkNhbGxlZSkp
KSwgcmVzdWx0LmdwcigpKTsKKyAgICAgICAgY2VsbFJlc3VsdChyZXN1bHQuZ3ByKCksIG5vZGUp
OwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgU2V0Q2FsbGVlOiB7
Ci0gICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGNhbGxlZSh0aGlzLCBub2RlLmNoaWxkMSgp
KTsKLSAgICAgICAgbV9qaXQuc3RvcmVQdHIoY2FsbGVlLmdwcigpLCBKSVRDb21waWxlcjo6YWRk
cmVzc0ZvcihzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KG5vZGUuY29kZU9yaWdpbi5zdGFj
a09mZnNldCgpICsgc3RhdGljX2Nhc3Q8aW50PihKU1N0YWNrOjpDYWxsZWUpKSkpOwotICAgICAg
ICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCk7CisgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5k
IGNhbGxlZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIG1faml0LnN0b3JlUHRyKGNh
bGxlZS5ncHIoKSwgSklUQ29tcGlsZXI6OmFkZHJlc3NGb3Ioc3RhdGljX2Nhc3Q8VmlydHVhbFJl
Z2lzdGVyPihub2RlLT5jb2RlT3JpZ2luLnN0YWNrT2Zmc2V0KCkgKyBzdGF0aWNfY2FzdDxpbnQ+
KEpTU3RhY2s6OkNhbGxlZSkpKSk7CisgICAgICAgIG5vUmVzdWx0KG5vZGUpOwogICAgICAgICBi
cmVhazsKICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgR2V0U2NvcGU6IHsKLSAgICAgICAgU3Bl
Y3VsYXRlQ2VsbE9wZXJhbmQgZnVuY3Rpb24odGhpcywgbm9kZS5jaGlsZDEoKSk7CisgICAgICAg
IFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGZ1bmN0aW9uKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKICAg
ICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBmdW5jdGlvbik7CiAgICAgICAgIG1faml0
LmxvYWRQdHIoSklUQ29tcGlsZXI6OkFkZHJlc3MoZnVuY3Rpb24uZ3ByKCksIEpTRnVuY3Rpb246
Om9mZnNldE9mU2NvcGVDaGFpbigpKSwgcmVzdWx0LmdwcigpKTsKLSAgICAgICAgY2VsbFJlc3Vs
dChyZXN1bHQuZ3ByKCksIG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAgY2VsbFJlc3VsdChyZXN1
bHQuZ3ByKCksIG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIApAQCAtMzk0
MSwyMCArMzkzMywyMCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUp
CiAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CiAgICAgICAgIEdQUlJlZyByZXN1
bHRHUFIgPSByZXN1bHQuZ3ByKCk7CiAKLSAgICAgICAgbV9qaXQubG9hZFB0cihKSVRDb21waWxl
cjo6YWRkcmVzc0ZvcihzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KG5vZGUuY29kZU9yaWdp
bi5zdGFja09mZnNldCgpICsgc3RhdGljX2Nhc3Q8aW50PihKU1N0YWNrOjpTY29wZUNoYWluKSkp
LCByZXN1bHRHUFIpOwotICAgICAgICBjZWxsUmVzdWx0KHJlc3VsdEdQUiwgbV9jb21waWxlSW5k
ZXgpOworICAgICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKHN0YXRp
Y19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4obm9kZS0+Y29kZU9yaWdpbi5zdGFja09mZnNldCgpICsg
c3RhdGljX2Nhc3Q8aW50PihKU1N0YWNrOjpTY29wZUNoYWluKSkpLCByZXN1bHRHUFIpOworICAg
ICAgICBjZWxsUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0K
ICAgICAgICAgCiAgICAgY2FzZSBTZXRNeVNjb3BlOiB7Ci0gICAgICAgIFNwZWN1bGF0ZUNlbGxP
cGVyYW5kIGNhbGxlZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKLSAgICAgICAgbV9qaXQuc3RvcmVQ
dHIoY2FsbGVlLmdwcigpLCBKSVRDb21waWxlcjo6YWRkcmVzc0ZvcihzdGF0aWNfY2FzdDxWaXJ0
dWFsUmVnaXN0ZXI+KG5vZGUuY29kZU9yaWdpbi5zdGFja09mZnNldCgpICsgc3RhdGljX2Nhc3Q8
aW50PihKU1N0YWNrOjpTY29wZUNoYWluKSkpKTsKLSAgICAgICAgbm9SZXN1bHQobV9jb21waWxl
SW5kZXgpOworICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBjYWxsZWUodGhpcywgbm9kZS0+
Y2hpbGQxKCkpOworICAgICAgICBtX2ppdC5zdG9yZVB0cihjYWxsZWUuZ3ByKCksIEpJVENvbXBp
bGVyOjphZGRyZXNzRm9yKHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4obm9kZS0+Y29kZU9y
aWdpbi5zdGFja09mZnNldCgpICsgc3RhdGljX2Nhc3Q8aW50PihKU1N0YWNrOjpTY29wZUNoYWlu
KSkpKTsKKyAgICAgICAgbm9SZXN1bHQobm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAg
ICAgICAgCiAgICAgY2FzZSBTa2lwVG9wU2NvcGU6IHsKLSAgICAgICAgU3BlY3VsYXRlQ2VsbE9w
ZXJhbmQgc2NvcGUodGhpcywgbm9kZS5jaGlsZDEoKSk7CisgICAgICAgIFNwZWN1bGF0ZUNlbGxP
cGVyYW5kIHNjb3BlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgR1BSVGVtcG9yYXJ5
IHJlc3VsdCh0aGlzLCBzY29wZSk7CiAgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQu
Z3ByKCk7CiAgICAgICAgIG1faml0Lm1vdmUoc2NvcGUuZ3ByKCksIHJlc3VsdEdQUik7CkBAIC0z
OTY1LDQyICszOTU3LDQyIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9k
ZSkKICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihtX2pp
dC5jb2RlQmxvY2soKS0+YWN0aXZhdGlvblJlZ2lzdGVyKCkpKSk7CiAgICAgICAgIG1faml0Lmxv
YWRQdHIoSklUQ29tcGlsZXI6OkFkZHJlc3MocmVzdWx0R1BSLCBKU1Njb3BlOjpvZmZzZXRPZk5l
eHQoKSksIHJlc3VsdEdQUik7CiAgICAgICAgIGFjdGl2YXRpb25Ob3RDcmVhdGVkLmxpbmsoJm1f
aml0KTsKLSAgICAgICAgY2VsbFJlc3VsdChyZXN1bHRHUFIsIG1fY29tcGlsZUluZGV4KTsKKyAg
ICAgICAgY2VsbFJlc3VsdChyZXN1bHRHUFIsIG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9
CiAgICAgICAgIAogICAgIGNhc2UgU2tpcFNjb3BlOiB7Ci0gICAgICAgIFNwZWN1bGF0ZUNlbGxP
cGVyYW5kIHNjb3BlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOworICAgICAgICBTcGVjdWxhdGVDZWxs
T3BlcmFuZCBzY29wZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgIEdQUlRlbXBvcmFy
eSByZXN1bHQodGhpcywgc2NvcGUpOwogICAgICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVy
OjpBZGRyZXNzKHNjb3BlLmdwcigpLCBKU1Njb3BlOjpvZmZzZXRPZk5leHQoKSksIHJlc3VsdC5n
cHIoKSk7Ci0gICAgICAgIGNlbGxSZXN1bHQocmVzdWx0LmdwcigpLCBtX2NvbXBpbGVJbmRleCk7
CisgICAgICAgIGNlbGxSZXN1bHQocmVzdWx0LmdwcigpLCBub2RlKTsKICAgICAgICAgYnJlYWs7
CiAgICAgfQogICAgICAgICAKICAgICBjYXNlIEdldFNjb3BlUmVnaXN0ZXJzOiB7Ci0gICAgICAg
IFNwZWN1bGF0ZUNlbGxPcGVyYW5kIHNjb3BlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOworICAgICAg
ICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBzY29wZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CiAgICAg
ICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CiAgICAgICAgIEdQUlJlZyBzY29wZUdQUiA9
IHNjb3BlLmdwcigpOwogICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwog
CiAgICAgICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OkFkZHJlc3Moc2NvcGVHUFIsIEpT
VmFyaWFibGVPYmplY3Q6Om9mZnNldE9mUmVnaXN0ZXJzKCkpLCByZXN1bHRHUFIpOwotICAgICAg
ICBzdG9yYWdlUmVzdWx0KHJlc3VsdEdQUiwgbV9jb21waWxlSW5kZXgpOworICAgICAgICBzdG9y
YWdlUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBj
YXNlIEdldFNjb3BlZFZhcjogewotICAgICAgICBTdG9yYWdlT3BlcmFuZCByZWdpc3RlcnModGhp
cywgbm9kZS5jaGlsZDEoKSk7CisgICAgICAgIFN0b3JhZ2VPcGVyYW5kIHJlZ2lzdGVycyh0aGlz
LCBub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CiAg
ICAgICAgIEdQUlJlZyByZWdpc3RlcnNHUFIgPSByZWdpc3RlcnMuZ3ByKCk7CiAgICAgICAgIEdQ
UlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CiAKLSAgICAgICAgbV9qaXQubG9hZDY0KEpJ
VENvbXBpbGVyOjpBZGRyZXNzKHJlZ2lzdGVyc0dQUiwgbm9kZS52YXJOdW1iZXIoKSAqIHNpemVv
ZihSZWdpc3RlcikpLCByZXN1bHRHUFIpOwotICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdEdQ
UiwgbV9jb21waWxlSW5kZXgpOworICAgICAgICBtX2ppdC5sb2FkNjQoSklUQ29tcGlsZXI6OkFk
ZHJlc3MocmVnaXN0ZXJzR1BSLCBub2RlLT52YXJOdW1iZXIoKSAqIHNpemVvZihSZWdpc3Rlcikp
LCByZXN1bHRHUFIpOworICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7CiAg
ICAgICAgIGJyZWFrOwogICAgIH0KICAgICBjYXNlIFB1dFNjb3BlZFZhcjogewotICAgICAgICBT
cGVjdWxhdGVDZWxsT3BlcmFuZCBzY29wZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKLSAgICAgICAg
U3RvcmFnZU9wZXJhbmQgcmVnaXN0ZXJzKHRoaXMsIG5vZGUuY2hpbGQyKCkpOwotICAgICAgICBK
U1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLmNoaWxkMygpKTsKKyAgICAgICAgU3BlY3Vs
YXRlQ2VsbE9wZXJhbmQgc2NvcGUodGhpcywgbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBTdG9y
YWdlT3BlcmFuZCByZWdpc3RlcnModGhpcywgbm9kZS0+Y2hpbGQyKCkpOworICAgICAgICBKU1Zh
bHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLT5jaGlsZDMoKSk7CiAgICAgICAgIEdQUlRlbXBv
cmFyeSBzY3JhdGNoUmVnaXN0ZXIodGhpcyk7CiAKICAgICAgICAgR1BSUmVnIHNjb3BlR1BSID0g
c2NvcGUuZ3ByKCk7CkBAIC00MDA4LDE5ICs0MDAwLDE5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWUuZ3By
KCk7CiAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaFJlZ2lzdGVyLmdwcigpOwog
Ci0gICAgICAgIG1faml0LnN0b3JlNjQodmFsdWVHUFIsIEpJVENvbXBpbGVyOjpBZGRyZXNzKHJl
Z2lzdGVyc0dQUiwgbm9kZS52YXJOdW1iZXIoKSAqIHNpemVvZihSZWdpc3RlcikpKTsKLSAgICAg
ICAgd3JpdGVCYXJyaWVyKHNjb3BlR1BSLCB2YWx1ZUdQUiwgbm9kZS5jaGlsZDMoKSwgV3JpdGVC
YXJyaWVyRm9yVmFyaWFibGVBY2Nlc3MsIHNjcmF0Y2hHUFIpOwotICAgICAgICBub1Jlc3VsdCht
X2NvbXBpbGVJbmRleCk7CisgICAgICAgIG1faml0LnN0b3JlNjQodmFsdWVHUFIsIEpJVENvbXBp
bGVyOjpBZGRyZXNzKHJlZ2lzdGVyc0dQUiwgbm9kZS0+dmFyTnVtYmVyKCkgKiBzaXplb2YoUmVn
aXN0ZXIpKSk7CisgICAgICAgIHdyaXRlQmFycmllcihzY29wZUdQUiwgdmFsdWVHUFIsIG5vZGUt
PmNoaWxkMygpLCBXcml0ZUJhcnJpZXJGb3JWYXJpYWJsZUFjY2Vzcywgc2NyYXRjaEdQUik7Cisg
ICAgICAgIG5vUmVzdWx0KG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgY2FzZSBH
ZXRCeUlkOiB7Ci0gICAgICAgIGlmICghbm9kZS5wcmVkaWN0aW9uKCkpIHsKLSAgICAgICAgICAg
IHRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKEluYWRlcXVhdGVDb3ZlcmFnZSwgSlNWYWx1
ZVJlZ3MoKSwgTm9Ob2RlKTsKKyAgICAgICAgaWYgKCFub2RlLT5wcmVkaWN0aW9uKCkpIHsKKyAg
ICAgICAgICAgIHRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKEluYWRlcXVhdGVDb3ZlcmFn
ZSwgSlNWYWx1ZVJlZ3MoKSwgMCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAg
ICAgICAKLSAgICAgICAgaWYgKGlzQ2VsbFNwZWN1bGF0aW9uKGF0KG5vZGUuY2hpbGQxKCkpLnBy
ZWRpY3Rpb24oKSkpIHsKLSAgICAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhp
cywgbm9kZS5jaGlsZDEoKSk7CisgICAgICAgIGlmIChpc0NlbGxTcGVjdWxhdGlvbihub2RlLT5j
aGlsZDEoKS0+cHJlZGljdGlvbigpKSkgeworICAgICAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJh
bmQgYmFzZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgICAgICBHUFJUZW1wb3Jhcnkg
cmVzdWx0KHRoaXMsIGJhc2UpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBHUFJSZWcgYmFz
ZUdQUiA9IGJhc2UuZ3ByKCk7CkBAIC00MDI4LDEzICs0MDIwLDEzIEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgICAgIAogICAgICAgICAgICAgYmFz
ZS51c2UoKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgY2FjaGVkR2V0QnlJZChub2RlLmNv
ZGVPcmlnaW4sIGJhc2VHUFIsIHJlc3VsdEdQUiwgbm9kZS5pZGVudGlmaWVyTnVtYmVyKCkpOwor
ICAgICAgICAgICAgY2FjaGVkR2V0QnlJZChub2RlLT5jb2RlT3JpZ2luLCBiYXNlR1BSLCByZXN1
bHRHUFIsIG5vZGUtPmlkZW50aWZpZXJOdW1iZXIoKSk7CiAgICAgICAgICAgICAKLSAgICAgICAg
ICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0R1BSLCBtX2NvbXBpbGVJbmRleCwgVXNlQ2hpbGRyZW5D
YWxsZWRFeHBsaWNpdGx5KTsKKyAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0R1BSLCBu
b2RlLCBVc2VDaGlsZHJlbkNhbGxlZEV4cGxpY2l0bHkpOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIEpTVmFsdWVPcGVyYW5kIGJhc2UodGhpcywgbm9k
ZS5jaGlsZDEoKSk7CisgICAgICAgIEpTVmFsdWVPcGVyYW5kIGJhc2UodGhpcywgbm9kZS0+Y2hp
bGQxKCkpOwogICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIGJhc2UpOwogICAgICAg
ICAKICAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOwpAQCAtNDA0NCwyMSArNDAz
NiwyMSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAg
IAogICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBub3RDZWxsID0gbV9qaXQuYnJhbmNoVGVzdDY0
KEpJVENvbXBpbGVyOjpOb25aZXJvLCBiYXNlR1BSLCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIp
OwogICAgICAgICAKLSAgICAgICAgY2FjaGVkR2V0QnlJZChub2RlLmNvZGVPcmlnaW4sIGJhc2VH
UFIsIHJlc3VsdEdQUiwgbm9kZS5pZGVudGlmaWVyTnVtYmVyKCksIG5vdENlbGwpOworICAgICAg
ICBjYWNoZWRHZXRCeUlkKG5vZGUtPmNvZGVPcmlnaW4sIGJhc2VHUFIsIHJlc3VsdEdQUiwgbm9k
ZS0+aWRlbnRpZmllck51bWJlcigpLCBub3RDZWxsKTsKICAgICAgICAgCi0gICAgICAgIGpzVmFs
dWVSZXN1bHQocmVzdWx0R1BSLCBtX2NvbXBpbGVJbmRleCwgVXNlQ2hpbGRyZW5DYWxsZWRFeHBs
aWNpdGx5KTsKKyAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRHUFIsIG5vZGUsIFVzZUNoaWxk
cmVuQ2FsbGVkRXhwbGljaXRseSk7CiAgICAgICAgIAogICAgICAgICBicmVhazsKICAgICB9CiAK
ICAgICBjYXNlIEdldEJ5SWRGbHVzaDogewotICAgICAgICBpZiAoIW5vZGUucHJlZGljdGlvbigp
KSB7Ci0gICAgICAgICAgICB0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihJbmFkZXF1YXRl
Q292ZXJhZ2UsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSk7CisgICAgICAgIGlmICghbm9kZS0+cHJl
ZGljdGlvbigpKSB7CisgICAgICAgICAgICB0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihJ
bmFkZXF1YXRlQ292ZXJhZ2UsIEpTVmFsdWVSZWdzKCksIDApOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIGlmIChpc0NlbGxTcGVjdWxhdGlvbihhdChu
b2RlLmNoaWxkMSgpKS5wcmVkaWN0aW9uKCkpKSB7Ci0gICAgICAgICAgICBTcGVjdWxhdGVDZWxs
T3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOworICAgICAgICBpZiAoaXNDZWxsU3Bl
Y3VsYXRpb24obm9kZS0+Y2hpbGQxKCktPnByZWRpY3Rpb24oKSkpIHsKKyAgICAgICAgICAgIFNw
ZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICAg
ICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOwogCiAgICAgICAgICAgICBHUFJSZXN1bHQg
cmVzdWx0KHRoaXMpOwpAQCAtNDA2OSwxMyArNDA2MSwxMyBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgICAgICAKICAgICAgICAgICAgIGZsdXNoUmVn
aXN0ZXJzKCk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGNhY2hlZEdldEJ5SWQobm9kZS5j
b2RlT3JpZ2luLCBiYXNlR1BSLCByZXN1bHRHUFIsIG5vZGUuaWRlbnRpZmllck51bWJlcigpLCBK
SVRDb21waWxlcjo6SnVtcCgpLCBEb250U3BpbGwpOworICAgICAgICAgICAgY2FjaGVkR2V0QnlJ
ZChub2RlLT5jb2RlT3JpZ2luLCBiYXNlR1BSLCByZXN1bHRHUFIsIG5vZGUtPmlkZW50aWZpZXJO
dW1iZXIoKSwgSklUQ29tcGlsZXI6Okp1bXAoKSwgRG9udFNwaWxsKTsKICAgICAgICAgICAgIAot
ICAgICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRHUFIsIG1fY29tcGlsZUluZGV4LCBVc2VD
aGlsZHJlbkNhbGxlZEV4cGxpY2l0bHkpOworICAgICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1
bHRHUFIsIG5vZGUsIFVzZUNoaWxkcmVuQ2FsbGVkRXhwbGljaXRseSk7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgSlNWYWx1ZU9wZXJhbmQgYmFzZSh0
aGlzLCBub2RlLmNoaWxkMSgpKTsKKyAgICAgICAgSlNWYWx1ZU9wZXJhbmQgYmFzZSh0aGlzLCBu
b2RlLT5jaGlsZDEoKSk7CiAgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKIAog
ICAgICAgICBHUFJSZXN1bHQgcmVzdWx0KHRoaXMpOwpAQCAtNDA4Niw5ICs0MDc4LDkgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAKICAgICAgICAg
SklUQ29tcGlsZXI6Okp1bXAgbm90Q2VsbCA9IG1faml0LmJyYW5jaFRlc3Q2NChKSVRDb21waWxl
cjo6Tm9uWmVybywgYmFzZUdQUiwgR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKTsKICAgICAgICAg
Ci0gICAgICAgIGNhY2hlZEdldEJ5SWQobm9kZS5jb2RlT3JpZ2luLCBiYXNlR1BSLCByZXN1bHRH
UFIsIG5vZGUuaWRlbnRpZmllck51bWJlcigpLCBub3RDZWxsLCBEb250U3BpbGwpOworICAgICAg
ICBjYWNoZWRHZXRCeUlkKG5vZGUtPmNvZGVPcmlnaW4sIGJhc2VHUFIsIHJlc3VsdEdQUiwgbm9k
ZS0+aWRlbnRpZmllck51bWJlcigpLCBub3RDZWxsLCBEb250U3BpbGwpOwogICAgICAgICAKLSAg
ICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRHUFIsIG1fY29tcGlsZUluZGV4LCBVc2VDaGlsZHJl
bkNhbGxlZEV4cGxpY2l0bHkpOworICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdEdQUiwgbm9k
ZSwgVXNlQ2hpbGRyZW5DYWxsZWRFeHBsaWNpdGx5KTsKIAogICAgICAgICBicmVhazsKICAgICB9
CkBAIC00MDk4LDQ2ICs0MDkwLDQ2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9k
ZSYgbm9kZSkKICAgICAgICAgYnJlYWs7CiAgICAgICAgIAogICAgIGNhc2UgQ2hlY2tGdW5jdGlv
bjogewotICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBmdW5jdGlvbih0aGlzLCBub2RlLmNo
aWxkMSgpKTsKLSAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRGdW5jdGlvbiwgSlNWYWx1ZVJl
Z3MoZnVuY3Rpb24uZ3ByKCkpLCBub2RlLmNoaWxkMSgpLCBtX2ppdC5icmFuY2hXZWFrUHRyKEpJ
VENvbXBpbGVyOjpOb3RFcXVhbCwgZnVuY3Rpb24uZ3ByKCksIG5vZGUuZnVuY3Rpb24oKSkpOwot
ICAgICAgICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCk7CisgICAgICAgIFNwZWN1bGF0ZUNlbGxP
cGVyYW5kIGZ1bmN0aW9uKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgc3BlY3VsYXRp
b25DaGVjayhCYWRGdW5jdGlvbiwgSlNWYWx1ZVJlZ3MoZnVuY3Rpb24uZ3ByKCkpLCBub2RlLT5j
aGlsZDEoKSwgbV9qaXQuYnJhbmNoV2Vha1B0cihKSVRDb21waWxlcjo6Tm90RXF1YWwsIGZ1bmN0
aW9uLmdwcigpLCBub2RlLT5mdW5jdGlvbigpKSk7CisgICAgICAgIG5vUmVzdWx0KG5vZGUpOwog
ICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgQ2hlY2tFeGVjdXRhYmxl
OiB7Ci0gICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGZ1bmN0aW9uKHRoaXMsIG5vZGUuY2hp
bGQxKCkpOwotICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZEV4ZWN1dGFibGUsIEpTVmFsdWVS
ZWdzKGZ1bmN0aW9uLmdwcigpKSwgbm9kZS5jaGlsZDEoKSwgbV9qaXQuYnJhbmNoV2Vha1B0cihK
SVRDb21waWxlcjo6Tm90RXF1YWwsIEpJVENvbXBpbGVyOjpBZGRyZXNzKGZ1bmN0aW9uLmdwcigp
LCBKU0Z1bmN0aW9uOjpvZmZzZXRPZkV4ZWN1dGFibGUoKSksIG5vZGUuZXhlY3V0YWJsZSgpKSk7
Ci0gICAgICAgIG5vUmVzdWx0KG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAgU3BlY3VsYXRlQ2Vs
bE9wZXJhbmQgZnVuY3Rpb24odGhpcywgbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBzcGVjdWxh
dGlvbkNoZWNrKEJhZEV4ZWN1dGFibGUsIEpTVmFsdWVSZWdzKGZ1bmN0aW9uLmdwcigpKSwgbm9k
ZS0+Y2hpbGQxKCksIG1faml0LmJyYW5jaFdlYWtQdHIoSklUQ29tcGlsZXI6Ok5vdEVxdWFsLCBK
SVRDb21waWxlcjo6QWRkcmVzcyhmdW5jdGlvbi5ncHIoKSwgSlNGdW5jdGlvbjo6b2Zmc2V0T2ZF
eGVjdXRhYmxlKCkpLCBub2RlLT5leGVjdXRhYmxlKCkpKTsKKyAgICAgICAgbm9SZXN1bHQobm9k
ZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBDaGVja1N0cnVj
dHVyZToKICAgICBjYXNlIEZvcndhcmRDaGVja1N0cnVjdHVyZTogewotICAgICAgICBBYnN0cmFj
dFZhbHVlJiB2YWx1ZSA9IG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKTsKLSAgICAgICAg
aWYgKHZhbHVlLm1fY3VycmVudEtub3duU3RydWN0dXJlLmlzU3Vic2V0T2Yobm9kZS5zdHJ1Y3R1
cmVTZXQoKSkKKyAgICAgICAgQWJzdHJhY3RWYWx1ZSYgdmFsdWUgPSBtX3N0YXRlLmZvck5vZGUo
bm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBpZiAodmFsdWUubV9jdXJyZW50S25vd25TdHJ1Y3R1
cmUuaXNTdWJzZXRPZihub2RlLT5zdHJ1Y3R1cmVTZXQoKSkKICAgICAgICAgICAgICYmIGlzQ2Vs
bFNwZWN1bGF0aW9uKHZhbHVlLm1fdHlwZSkpIHsKLSAgICAgICAgICAgIG5vUmVzdWx0KG1fY29t
cGlsZUluZGV4KTsKKyAgICAgICAgICAgIG5vUmVzdWx0KG5vZGUpOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIFNwZWN1bGF0aW9uRGlyZWN0aW9uIGRp
cmVjdGlvbiA9IG5vZGUub3AoKSA9PSBGb3J3YXJkQ2hlY2tTdHJ1Y3R1cmUgPyBGb3J3YXJkU3Bl
Y3VsYXRpb24gOiBCYWNrd2FyZFNwZWN1bGF0aW9uOwotICAgICAgICBTcGVjdWxhdGVDZWxsT3Bl
cmFuZCBiYXNlKHRoaXMsIG5vZGUuY2hpbGQxKCksIGRpcmVjdGlvbik7CisgICAgICAgIFNwZWN1
bGF0aW9uRGlyZWN0aW9uIGRpcmVjdGlvbiA9IG5vZGUtPm9wKCkgPT0gRm9yd2FyZENoZWNrU3Ry
dWN0dXJlID8gRm9yd2FyZFNwZWN1bGF0aW9uIDogQmFja3dhcmRTcGVjdWxhdGlvbjsKKyAgICAg
ICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLT5jaGlsZDEoKSwgZGlyZWN0
aW9uKTsKICAgICAgICAgCi0gICAgICAgIEFTU0VSVChub2RlLnN0cnVjdHVyZVNldCgpLnNpemUo
KSk7CisgICAgICAgIEFTU0VSVChub2RlLT5zdHJ1Y3R1cmVTZXQoKS5zaXplKCkpOwogICAgICAg
ICAKICAgICAgICAgRXhpdEtpbmQgZXhpdEtpbmQ7Ci0gICAgICAgIGlmIChtX2ppdC5ncmFwaCgp
W25vZGUuY2hpbGQxKCldLm9wKCkgPT0gV2Vha0pTQ29uc3RhbnQpCisgICAgICAgIGlmIChub2Rl
LT5jaGlsZDEoKS0+b3AoKSA9PSBXZWFrSlNDb25zdGFudCkKICAgICAgICAgICAgIGV4aXRLaW5k
ID0gQmFkV2Vha0NvbnN0YW50Q2FjaGU7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGV4aXRL
aW5kID0gQmFkQ2FjaGU7CiAgICAgICAgIAotICAgICAgICBpZiAobm9kZS5zdHJ1Y3R1cmVTZXQo
KS5zaXplKCkgPT0gMSkgeworICAgICAgICBpZiAobm9kZS0+c3RydWN0dXJlU2V0KCkuc2l6ZSgp
ID09IDEpIHsKICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCi0gICAgICAgICAgICAgICAg
ZXhpdEtpbmQsIEpTVmFsdWVSZWdzKGJhc2UuZ3ByKCkpLCBOb05vZGUsCisgICAgICAgICAgICAg
ICAgZXhpdEtpbmQsIEpTVmFsdWVSZWdzKGJhc2UuZ3ByKCkpLCAwLAogICAgICAgICAgICAgICAg
IG1faml0LmJyYW5jaFdlYWtQdHIoCiAgICAgICAgICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpO
b3RFcXVhbCwKICAgICAgICAgICAgICAgICAgICAgSklUQ29tcGlsZXI6OkFkZHJlc3MoYmFzZS5n
cHIoKSwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksCi0gICAgICAgICAgICAgICAgICAgIG5v
ZGUuc3RydWN0dXJlU2V0KClbMF0pLAorICAgICAgICAgICAgICAgICAgICBub2RlLT5zdHJ1Y3R1
cmVTZXQoKVswXSksCiAgICAgICAgICAgICAgICAgZGlyZWN0aW9uKTsKICAgICAgICAgfSBlbHNl
IHsKICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSBzdHJ1Y3R1cmUodGhpcyk7CkBAIC00MTQ2LDE5
ICs0MTM4LDE5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAg
ICAgICAgICAgIAogICAgICAgICAgICAgSklUQ29tcGlsZXI6Okp1bXBMaXN0IGRvbmU7CiAgICAg
ICAgICAgICAKLSAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbm9kZS5zdHJ1Y3R1
cmVTZXQoKS5zaXplKCkgLSAxOyArK2kpCi0gICAgICAgICAgICAgICAgZG9uZS5hcHBlbmQobV9q
aXQuYnJhbmNoV2Vha1B0cihKSVRDb21waWxlcjo6RXF1YWwsIHN0cnVjdHVyZS5ncHIoKSwgbm9k
ZS5zdHJ1Y3R1cmVTZXQoKVtpXSkpOworICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBub2RlLT5zdHJ1Y3R1cmVTZXQoKS5zaXplKCkgLSAxOyArK2kpCisgICAgICAgICAgICAgICAg
ZG9uZS5hcHBlbmQobV9qaXQuYnJhbmNoV2Vha1B0cihKSVRDb21waWxlcjo6RXF1YWwsIHN0cnVj
dHVyZS5ncHIoKSwgbm9kZS0+c3RydWN0dXJlU2V0KClbaV0pKTsKICAgICAgICAgICAgIAogICAg
ICAgICAgICAgc3BlY3VsYXRpb25DaGVjaygKLSAgICAgICAgICAgICAgICBleGl0S2luZCwgSlNW
YWx1ZVJlZ3MoYmFzZS5ncHIoKSksIE5vTm9kZSwKKyAgICAgICAgICAgICAgICBleGl0S2luZCwg
SlNWYWx1ZVJlZ3MoYmFzZS5ncHIoKSksIDAsCiAgICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNo
V2Vha1B0cigKLSAgICAgICAgICAgICAgICAgICAgSklUQ29tcGlsZXI6Ok5vdEVxdWFsLCBzdHJ1
Y3R1cmUuZ3ByKCksIG5vZGUuc3RydWN0dXJlU2V0KCkubGFzdCgpKSwKKyAgICAgICAgICAgICAg
ICAgICAgSklUQ29tcGlsZXI6Ok5vdEVxdWFsLCBzdHJ1Y3R1cmUuZ3ByKCksIG5vZGUtPnN0cnVj
dHVyZVNldCgpLmxhc3QoKSksCiAgICAgICAgICAgICAgICAgZGlyZWN0aW9uKTsKICAgICAgICAg
ICAgIAogICAgICAgICAgICAgZG9uZS5saW5rKCZtX2ppdCk7CiAgICAgICAgIH0KICAgICAgICAg
Ci0gICAgICAgIG5vUmVzdWx0KG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAgbm9SZXN1bHQobm9k
ZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCkBAIC00MTcxLDU0ICs0MTYzLDU0
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgLy8g
d2UnbGwganVzdCByZWx5IG9uIHRoZSBmYWN0IHRoYXQgd2hlbiBhIHdhdGNocG9pbnQgZmlyZXMg
dGhlbiB0aGF0J3MKICAgICAgICAgLy8gcXVpdGUgYSBoaW50IGFscmVhZHkuCiAgICAgICAgIAot
ICAgICAgICBTcGVjdWxhdGlvbkRpcmVjdGlvbiBkaXJlY3Rpb24gPSBub2RlLm9wKCkgPT0gRm9y
d2FyZFN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50ID8gRm9yd2FyZFNwZWN1bGF0aW9uIDog
QmFja3dhcmRTcGVjdWxhdGlvbjsKKyAgICAgICAgU3BlY3VsYXRpb25EaXJlY3Rpb24gZGlyZWN0
aW9uID0gbm9kZS0+b3AoKSA9PSBGb3J3YXJkU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnQg
PyBGb3J3YXJkU3BlY3VsYXRpb24gOiBCYWNrd2FyZFNwZWN1bGF0aW9uOwogCi0gICAgICAgIG1f
aml0LmFkZFdlYWtSZWZlcmVuY2Uobm9kZS5zdHJ1Y3R1cmUoKSk7Ci0gICAgICAgIG5vZGUuc3Ry
dWN0dXJlKCktPmFkZFRyYW5zaXRpb25XYXRjaHBvaW50KAorICAgICAgICBtX2ppdC5hZGRXZWFr
UmVmZXJlbmNlKG5vZGUtPnN0cnVjdHVyZSgpKTsKKyAgICAgICAgbm9kZS0+c3RydWN0dXJlKCkt
PmFkZFRyYW5zaXRpb25XYXRjaHBvaW50KAogICAgICAgICAgICAgc3BlY3VsYXRpb25XYXRjaHBv
aW50KAotICAgICAgICAgICAgICAgIG1faml0LmdyYXBoKClbbm9kZS5jaGlsZDEoKV0ub3AoKSA9
PSBXZWFrSlNDb25zdGFudCA/IEJhZFdlYWtDb25zdGFudENhY2hlIDogQmFkQ2FjaGUsCisgICAg
ICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCktPm9wKCkgPT0gV2Vha0pTQ29uc3RhbnQgPyBCYWRX
ZWFrQ29uc3RhbnRDYWNoZSA6IEJhZENhY2hlLAogICAgICAgICAgICAgICAgIGRpcmVjdGlvbikp
OwogCiAjaWYgIUFTU0VSVF9ESVNBQkxFRAotICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBv
cDEodGhpcywgbm9kZS5jaGlsZDEoKSwgZGlyZWN0aW9uKTsKLSAgICAgICAgSklUQ29tcGlsZXI6
Okp1bXAgaXNPSyA9IG1faml0LmJyYW5jaFB0cihKSVRDb21waWxlcjo6RXF1YWwsIEpJVENvbXBp
bGVyOjpBZGRyZXNzKG9wMS5ncHIoKSwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIFRydXN0
ZWRJbW1QdHIobm9kZS5zdHJ1Y3R1cmUoKSkpOworICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFu
ZCBvcDEodGhpcywgbm9kZS0+Y2hpbGQxKCksIGRpcmVjdGlvbik7CisgICAgICAgIEpJVENvbXBp
bGVyOjpKdW1wIGlzT0sgPSBtX2ppdC5icmFuY2hQdHIoSklUQ29tcGlsZXI6OkVxdWFsLCBKSVRD
b21waWxlcjo6QWRkcmVzcyhvcDEuZ3ByKCksIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBU
cnVzdGVkSW1tUHRyKG5vZGUtPnN0cnVjdHVyZSgpKSk7CiAgICAgICAgIG1faml0LmJyZWFrcG9p
bnQoKTsKICAgICAgICAgaXNPSy5saW5rKCZtX2ppdCk7CiAjZW5kaWYKICAgICAgICAgCi0gICAg
ICAgIG5vUmVzdWx0KG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAgbm9SZXN1bHQobm9kZSk7CiAg
ICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBQaGFudG9tUHV0U3RydWN0
dXJlOiB7Ci0gICAgICAgIEFTU0VSVChub2RlLnN0cnVjdHVyZVRyYW5zaXRpb25EYXRhKCkucHJl
dmlvdXNTdHJ1Y3R1cmUtPnRyYW5zaXRpb25XYXRjaHBvaW50U2V0SGFzQmVlbkludmFsaWRhdGVk
KCkpOworICAgICAgICBBU1NFUlQobm9kZS0+c3RydWN0dXJlVHJhbnNpdGlvbkRhdGEoKS5wcmV2
aW91c1N0cnVjdHVyZS0+dHJhbnNpdGlvbldhdGNocG9pbnRTZXRIYXNCZWVuSW52YWxpZGF0ZWQo
KSk7CiAgICAgICAgIG1faml0LmFkZFdlYWtSZWZlcmVuY2VUcmFuc2l0aW9uKAotICAgICAgICAg
ICAgbm9kZS5jb2RlT3JpZ2luLmNvZGVPcmlnaW5Pd25lcigpLAotICAgICAgICAgICAgbm9kZS5z
dHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSgpLnByZXZpb3VzU3RydWN0dXJlLAotICAgICAgICAgICAg
bm9kZS5zdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSgpLm5ld1N0cnVjdHVyZSk7Ci0gICAgICAgIG5v
UmVzdWx0KG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAgICAgIG5vZGUtPmNvZGVPcmlnaW4uY29k
ZU9yaWdpbk93bmVyKCksCisgICAgICAgICAgICBub2RlLT5zdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0
YSgpLnByZXZpb3VzU3RydWN0dXJlLAorICAgICAgICAgICAgbm9kZS0+c3RydWN0dXJlVHJhbnNp
dGlvbkRhdGEoKS5uZXdTdHJ1Y3R1cmUpOworICAgICAgICBub1Jlc3VsdChub2RlKTsKICAgICAg
ICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKICAgICBjYXNlIFB1dFN0cnVjdHVyZTogewotICAg
ICAgICBBU1NFUlQobm9kZS5zdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSgpLnByZXZpb3VzU3RydWN0
dXJlLT50cmFuc2l0aW9uV2F0Y2hwb2ludFNldEhhc0JlZW5JbnZhbGlkYXRlZCgpKTsKKyAgICAg
ICAgQVNTRVJUKG5vZGUtPnN0cnVjdHVyZVRyYW5zaXRpb25EYXRhKCkucHJldmlvdXNTdHJ1Y3R1
cmUtPnRyYW5zaXRpb25XYXRjaHBvaW50U2V0SGFzQmVlbkludmFsaWRhdGVkKCkpOwogCi0gICAg
ICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS5jaGlsZDEoKSk7CisgICAg
ICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwogICAg
ICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7CiAgICAgICAgIAogICAgICAgICBtX2pp
dC5hZGRXZWFrUmVmZXJlbmNlVHJhbnNpdGlvbigKLSAgICAgICAgICAgIG5vZGUuY29kZU9yaWdp
bi5jb2RlT3JpZ2luT3duZXIoKSwKLSAgICAgICAgICAgIG5vZGUuc3RydWN0dXJlVHJhbnNpdGlv
bkRhdGEoKS5wcmV2aW91c1N0cnVjdHVyZSwKLSAgICAgICAgICAgIG5vZGUuc3RydWN0dXJlVHJh
bnNpdGlvbkRhdGEoKS5uZXdTdHJ1Y3R1cmUpOworICAgICAgICAgICAgbm9kZS0+Y29kZU9yaWdp
bi5jb2RlT3JpZ2luT3duZXIoKSwKKyAgICAgICAgICAgIG5vZGUtPnN0cnVjdHVyZVRyYW5zaXRp
b25EYXRhKCkucHJldmlvdXNTdHJ1Y3R1cmUsCisgICAgICAgICAgICBub2RlLT5zdHJ1Y3R1cmVU
cmFuc2l0aW9uRGF0YSgpLm5ld1N0cnVjdHVyZSk7CiAgICAgICAgIAogI2lmIEVOQUJMRShHR0Mp
IHx8IEVOQUJMRShXUklURV9CQVJSSUVSX1BST0ZJTElORykKICAgICAgICAgLy8gTXVzdCBhbHdh
eXMgZW1pdCB0aGlzIHdyaXRlIGJhcnJpZXIgYXMgdGhlIHN0cnVjdHVyZSB0cmFuc2l0aW9uIGl0
c2VsZiByZXF1aXJlcyBpdAotICAgICAgICB3cml0ZUJhcnJpZXIoYmFzZUdQUiwgbm9kZS5zdHJ1
Y3R1cmVUcmFuc2l0aW9uRGF0YSgpLm5ld1N0cnVjdHVyZSwgV3JpdGVCYXJyaWVyRm9yR2VuZXJp
Y0FjY2Vzcyk7CisgICAgICAgIHdyaXRlQmFycmllcihiYXNlR1BSLCBub2RlLT5zdHJ1Y3R1cmVU
cmFuc2l0aW9uRGF0YSgpLm5ld1N0cnVjdHVyZSwgV3JpdGVCYXJyaWVyRm9yR2VuZXJpY0FjY2Vz
cyk7CiAjZW5kaWYKICAgICAgICAgCi0gICAgICAgIG1faml0LnN0b3JlUHRyKE1hY3JvQXNzZW1i
bGVyOjpUcnVzdGVkSW1tUHRyKG5vZGUuc3RydWN0dXJlVHJhbnNpdGlvbkRhdGEoKS5uZXdTdHJ1
Y3R1cmUpLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OnN0cnVjdHVy
ZU9mZnNldCgpKSk7CisgICAgICAgIG1faml0LnN0b3JlUHRyKE1hY3JvQXNzZW1ibGVyOjpUcnVz
dGVkSW1tUHRyKG5vZGUtPnN0cnVjdHVyZVRyYW5zaXRpb25EYXRhKCkubmV3U3RydWN0dXJlKSwg
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQo
KSkpOwogICAgICAgICAKLSAgICAgICAgbm9SZXN1bHQobV9jb21waWxlSW5kZXgpOworICAgICAg
ICBub1Jlc3VsdChub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKQEAgLTQy
MzEsNyArNDIyMyw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkK
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIAogICAgIGNhc2UgR2V0QnV0dGVyZmx5OiB7Ci0gICAg
ICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS5jaGlsZDEoKSk7CisgICAg
ICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwogICAg
ICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIGJhc2UpOwogICAgICAgICAKICAgICAgICAg
R1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOwpAQCAtNDIzOSw3ICs0MjMxLDcgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAKICAgICAgICAgbV9q
aXQubG9hZFB0cihKSVRDb21waWxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVy
Zmx5T2Zmc2V0KCkpLCByZXN1bHRHUFIpOwogICAgICAgICAKLSAgICAgICAgc3RvcmFnZVJlc3Vs
dChyZXN1bHRHUFIsIG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAgc3RvcmFnZVJlc3VsdChyZXN1
bHRHUFIsIG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9CiAKQEAgLTQyNDksNDUgKzQyNDEs
NDUgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgIH0KICAg
ICAgICAgCiAgICAgY2FzZSBHZXRCeU9mZnNldDogewotICAgICAgICBTdG9yYWdlT3BlcmFuZCBz
dG9yYWdlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOworICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9y
YWdlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0
aGlzLCBzdG9yYWdlKTsKICAgICAgICAgCiAgICAgICAgIEdQUlJlZyBzdG9yYWdlR1BSID0gc3Rv
cmFnZS5ncHIoKTsKICAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKICAg
ICAgICAgCi0gICAgICAgIFN0b3JhZ2VBY2Nlc3NEYXRhJiBzdG9yYWdlQWNjZXNzRGF0YSA9IG1f
aml0LmdyYXBoKCkubV9zdG9yYWdlQWNjZXNzRGF0YVtub2RlLnN0b3JhZ2VBY2Nlc3NEYXRhSW5k
ZXgoKV07CisgICAgICAgIFN0b3JhZ2VBY2Nlc3NEYXRhJiBzdG9yYWdlQWNjZXNzRGF0YSA9IG1f
aml0LmdyYXBoKCkubV9zdG9yYWdlQWNjZXNzRGF0YVtub2RlLT5zdG9yYWdlQWNjZXNzRGF0YUlu
ZGV4KCldOwogICAgICAgICAKICAgICAgICAgbV9qaXQubG9hZDY0KEpJVENvbXBpbGVyOjpBZGRy
ZXNzKHN0b3JhZ2VHUFIsIHN0b3JhZ2VBY2Nlc3NEYXRhLm9mZnNldCAqIHNpemVvZihFbmNvZGVk
SlNWYWx1ZSkpLCByZXN1bHRHUFIpOwogICAgICAgICAKLSAgICAgICAganNWYWx1ZVJlc3VsdChy
ZXN1bHRHUFIsIG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRH
UFIsIG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgUHV0
QnlPZmZzZXQ6IHsKICNpZiBFTkFCTEUoR0dDKSB8fCBFTkFCTEUoV1JJVEVfQkFSUklFUl9QUk9G
SUxJTkcpCi0gICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS5jaGls
ZDIoKSk7CisgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS0+Y2hp
bGQyKCkpOwogI2VuZGlmCi0gICAgICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgbm9k
ZS5jaGlsZDEoKSk7Ci0gICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUuY2hp
bGQzKCkpOworICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG5vZGUtPmNoaWxk
MSgpKTsKKyAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS0+Y2hpbGQzKCkp
OwogCiAgICAgICAgIEdQUlJlZyBzdG9yYWdlR1BSID0gc3RvcmFnZS5ncHIoKTsKICAgICAgICAg
R1BSUmVnIHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7CiAgICAgICAgIAogI2lmIEVOQUJMRShHR0Mp
IHx8IEVOQUJMRShXUklURV9CQVJSSUVSX1BST0ZJTElORykKLSAgICAgICAgd3JpdGVCYXJyaWVy
KGJhc2UuZ3ByKCksIHZhbHVlLmdwcigpLCBub2RlLmNoaWxkMygpLCBXcml0ZUJhcnJpZXJGb3JQ
cm9wZXJ0eUFjY2Vzcyk7CisgICAgICAgIHdyaXRlQmFycmllcihiYXNlLmdwcigpLCB2YWx1ZS5n
cHIoKSwgbm9kZS0+Y2hpbGQzKCksIFdyaXRlQmFycmllckZvclByb3BlcnR5QWNjZXNzKTsKICNl
bmRpZgogCi0gICAgICAgIFN0b3JhZ2VBY2Nlc3NEYXRhJiBzdG9yYWdlQWNjZXNzRGF0YSA9IG1f
aml0LmdyYXBoKCkubV9zdG9yYWdlQWNjZXNzRGF0YVtub2RlLnN0b3JhZ2VBY2Nlc3NEYXRhSW5k
ZXgoKV07CisgICAgICAgIFN0b3JhZ2VBY2Nlc3NEYXRhJiBzdG9yYWdlQWNjZXNzRGF0YSA9IG1f
aml0LmdyYXBoKCkubV9zdG9yYWdlQWNjZXNzRGF0YVtub2RlLT5zdG9yYWdlQWNjZXNzRGF0YUlu
ZGV4KCldOwogICAgICAgICAKICAgICAgICAgbV9qaXQuc3RvcmU2NCh2YWx1ZUdQUiwgSklUQ29t
cGlsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgc3RvcmFnZUFjY2Vzc0RhdGEub2Zmc2V0ICogc2l6
ZW9mKEVuY29kZWRKU1ZhbHVlKSkpOwogICAgICAgICAKLSAgICAgICAgbm9SZXN1bHQobV9jb21w
aWxlSW5kZXgpOworICAgICAgICBub1Jlc3VsdChub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAg
fQogICAgICAgICAKICAgICBjYXNlIFB1dEJ5SWQ6IHsKLSAgICAgICAgU3BlY3VsYXRlQ2VsbE9w
ZXJhbmQgYmFzZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKLSAgICAgICAgSlNWYWx1ZU9wZXJhbmQg
dmFsdWUodGhpcywgbm9kZS5jaGlsZDIoKSk7CisgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5k
IGJhc2UodGhpcywgbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1
ZSh0aGlzLCBub2RlLT5jaGlsZDIoKSk7CiAgICAgICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoKHRo
aXMpOwogICAgICAgICAKICAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOwpAQCAt
NDI5NywxNSArNDI4OSwxNSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5v
ZGUpCiAgICAgICAgIGJhc2UudXNlKCk7CiAgICAgICAgIHZhbHVlLnVzZSgpOwogCi0gICAgICAg
IGNhY2hlZFB1dEJ5SWQobm9kZS5jb2RlT3JpZ2luLCBiYXNlR1BSLCB2YWx1ZUdQUiwgbm9kZS5j
aGlsZDIoKSwgc2NyYXRjaEdQUiwgbm9kZS5pZGVudGlmaWVyTnVtYmVyKCksIE5vdERpcmVjdCk7
CisgICAgICAgIGNhY2hlZFB1dEJ5SWQobm9kZS0+Y29kZU9yaWdpbiwgYmFzZUdQUiwgdmFsdWVH
UFIsIG5vZGUtPmNoaWxkMigpLCBzY3JhdGNoR1BSLCBub2RlLT5pZGVudGlmaWVyTnVtYmVyKCks
IE5vdERpcmVjdCk7CiAgICAgICAgIAotICAgICAgICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCwg
VXNlQ2hpbGRyZW5DYWxsZWRFeHBsaWNpdGx5KTsKKyAgICAgICAgbm9SZXN1bHQobm9kZSwgVXNl
Q2hpbGRyZW5DYWxsZWRFeHBsaWNpdGx5KTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAg
Y2FzZSBQdXRCeUlkRGlyZWN0OiB7Ci0gICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2Uo
dGhpcywgbm9kZS5jaGlsZDEoKSk7Ci0gICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMs
IG5vZGUuY2hpbGQyKCkpOworICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMs
IG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9k
ZS0+Y2hpbGQyKCkpOwogICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKICAgICAg
ICAgCiAgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKQEAgLTQzMTUsNDMgKzQz
MDcsNDMgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAg
ICBiYXNlLnVzZSgpOwogICAgICAgICB2YWx1ZS51c2UoKTsKIAotICAgICAgICBjYWNoZWRQdXRC
eUlkKG5vZGUuY29kZU9yaWdpbiwgYmFzZUdQUiwgdmFsdWVHUFIsIG5vZGUuY2hpbGQyKCksIHNj
cmF0Y2hHUFIsIG5vZGUuaWRlbnRpZmllck51bWJlcigpLCBEaXJlY3QpOworICAgICAgICBjYWNo
ZWRQdXRCeUlkKG5vZGUtPmNvZGVPcmlnaW4sIGJhc2VHUFIsIHZhbHVlR1BSLCBub2RlLT5jaGls
ZDIoKSwgc2NyYXRjaEdQUiwgbm9kZS0+aWRlbnRpZmllck51bWJlcigpLCBEaXJlY3QpOwogCi0g
ICAgICAgIG5vUmVzdWx0KG1fY29tcGlsZUluZGV4LCBVc2VDaGlsZHJlbkNhbGxlZEV4cGxpY2l0
bHkpOworICAgICAgICBub1Jlc3VsdChub2RlLCBVc2VDaGlsZHJlbkNhbGxlZEV4cGxpY2l0bHkp
OwogICAgICAgICBicmVhazsKICAgICB9CiAKICAgICBjYXNlIEdldEdsb2JhbFZhcjogewogICAg
ICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwogCi0gICAgICAgIG1faml0LmxvYWQ2NChu
b2RlLnJlZ2lzdGVyUG9pbnRlcigpLCByZXN1bHQuZ3ByKCkpOworICAgICAgICBtX2ppdC5sb2Fk
NjQobm9kZS0+cmVnaXN0ZXJQb2ludGVyKCksIHJlc3VsdC5ncHIoKSk7CiAKLSAgICAgICAganNW
YWx1ZVJlc3VsdChyZXN1bHQuZ3ByKCksIG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAganNWYWx1
ZVJlc3VsdChyZXN1bHQuZ3ByKCksIG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9CiAKICAg
ICBjYXNlIFB1dEdsb2JhbFZhcjogewotICAgICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlz
LCBub2RlLmNoaWxkMSgpKTsKKyAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9k
ZS0+Y2hpbGQxKCkpOwogICAgICAgICAKICAgICAgICAgaWYgKEhlYXA6OmlzV3JpdGVCYXJyaWVy
RW5hYmxlZCgpKSB7CiAgICAgICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKICAg
ICAgICAgICAgIEdQUlJlZyBzY3JhdGNoUmVnID0gc2NyYXRjaC5ncHIoKTsKICAgICAgICAgICAg
IAotICAgICAgICAgICAgd3JpdGVCYXJyaWVyKG1faml0Lmdsb2JhbE9iamVjdEZvcihub2RlLmNv
ZGVPcmlnaW4pLCB2YWx1ZS5ncHIoKSwgbm9kZS5jaGlsZDEoKSwgV3JpdGVCYXJyaWVyRm9yVmFy
aWFibGVBY2Nlc3MsIHNjcmF0Y2hSZWcpOworICAgICAgICAgICAgd3JpdGVCYXJyaWVyKG1faml0
Lmdsb2JhbE9iamVjdEZvcihub2RlLT5jb2RlT3JpZ2luKSwgdmFsdWUuZ3ByKCksIG5vZGUtPmNo
aWxkMSgpLCBXcml0ZUJhcnJpZXJGb3JWYXJpYWJsZUFjY2Vzcywgc2NyYXRjaFJlZyk7CiAgICAg
ICAgIH0KICAgICAgICAgCi0gICAgICAgIG1faml0LnN0b3JlNjQodmFsdWUuZ3ByKCksIG5vZGUu
cmVnaXN0ZXJQb2ludGVyKCkpOworICAgICAgICBtX2ppdC5zdG9yZTY0KHZhbHVlLmdwcigpLCBu
b2RlLT5yZWdpc3RlclBvaW50ZXIoKSk7CiAKLSAgICAgICAgbm9SZXN1bHQobV9jb21waWxlSW5k
ZXgpOworICAgICAgICBub1Jlc3VsdChub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCiAg
ICAgY2FzZSBQdXRHbG9iYWxWYXJDaGVjazogewotICAgICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1
ZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKKyAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhp
cywgbm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICAKICAgICAgICAgV2F0Y2hwb2ludFNldCogd2F0
Y2hwb2ludFNldCA9Ci0gICAgICAgICAgICBtX2ppdC5nbG9iYWxPYmplY3RGb3Iobm9kZS5jb2Rl
T3JpZ2luKS0+c3ltYm9sVGFibGUoKS0+Z2V0KAotICAgICAgICAgICAgICAgIGlkZW50aWZpZXIo
bm9kZS5pZGVudGlmaWVyTnVtYmVyRm9yQ2hlY2soKSktPmltcGwoKSkud2F0Y2hwb2ludFNldCgp
OworICAgICAgICAgICAgbV9qaXQuZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPmNvZGVPcmlnaW4pLT5z
eW1ib2xUYWJsZSgpLT5nZXQoCisgICAgICAgICAgICAgICAgaWRlbnRpZmllcihub2RlLT5pZGVu
dGlmaWVyTnVtYmVyRm9yQ2hlY2soKSktPmltcGwoKSkud2F0Y2hwb2ludFNldCgpOwogICAgICAg
ICBhZGRTbG93UGF0aEdlbmVyYXRvcigKICAgICAgICAgICAgIHNsb3dQYXRoQ2FsbCgKICAgICAg
ICAgICAgICAgICBtX2ppdC5icmFuY2hUZXN0OCgKQEAgLTQzNjMsNDQgKzQzNTUsNDQgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAgICAgR1BSVGVt
cG9yYXJ5IHNjcmF0Y2godGhpcyk7CiAgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaFJlZyA9IHNj
cmF0Y2guZ3ByKCk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIHdyaXRlQmFycmllcihtX2pp
dC5nbG9iYWxPYmplY3RGb3Iobm9kZS5jb2RlT3JpZ2luKSwgdmFsdWUuZ3ByKCksIG5vZGUuY2hp
bGQxKCksIFdyaXRlQmFycmllckZvclZhcmlhYmxlQWNjZXNzLCBzY3JhdGNoUmVnKTsKKyAgICAg
ICAgICAgIHdyaXRlQmFycmllcihtX2ppdC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+Y29kZU9yaWdp
biksIHZhbHVlLmdwcigpLCBub2RlLT5jaGlsZDEoKSwgV3JpdGVCYXJyaWVyRm9yVmFyaWFibGVB
Y2Nlc3MsIHNjcmF0Y2hSZWcpOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBtX2ppdC5z
dG9yZTY0KHZhbHVlLmdwcigpLCBub2RlLnJlZ2lzdGVyUG9pbnRlcigpKTsKKyAgICAgICAgbV9q
aXQuc3RvcmU2NCh2YWx1ZS5ncHIoKSwgbm9kZS0+cmVnaXN0ZXJQb2ludGVyKCkpOwogCi0gICAg
ICAgIG5vUmVzdWx0KG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAgbm9SZXN1bHQobm9kZSk7CiAg
ICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBHbG9iYWxWYXJXYXRjaHBv
aW50OiB7Ci0gICAgICAgIG1faml0Lmdsb2JhbE9iamVjdEZvcihub2RlLmNvZGVPcmlnaW4pLT5z
eW1ib2xUYWJsZSgpLT5nZXQoCi0gICAgICAgICAgICBpZGVudGlmaWVyKG5vZGUuaWRlbnRpZmll
ck51bWJlckZvckNoZWNrKCkpLT5pbXBsKCkpLmFkZFdhdGNocG9pbnQoCisgICAgICAgIG1faml0
Lmdsb2JhbE9iamVjdEZvcihub2RlLT5jb2RlT3JpZ2luKS0+c3ltYm9sVGFibGUoKS0+Z2V0KAor
ICAgICAgICAgICAgaWRlbnRpZmllcihub2RlLT5pZGVudGlmaWVyTnVtYmVyRm9yQ2hlY2soKSkt
PmltcGwoKSkuYWRkV2F0Y2hwb2ludCgKICAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbldhdGNo
cG9pbnQoKSk7CiAgICAgICAgIAogI2lmIERGR19FTkFCTEUoSklUX0FTU0VSVCkKICAgICAgICAg
R1BSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7CiAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0g
c2NyYXRjaC5ncHIoKTsKLSAgICAgICAgbV9qaXQubG9hZDY0KG5vZGUucmVnaXN0ZXJQb2ludGVy
KCksIHNjcmF0Y2hHUFIpOworICAgICAgICBtX2ppdC5sb2FkNjQobm9kZS0+cmVnaXN0ZXJQb2lu
dGVyKCksIHNjcmF0Y2hHUFIpOwogICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBvayA9IG1faml0
LmJyYW5jaDY0KAogICAgICAgICAgICAgSklUQ29tcGlsZXI6OkVxdWFsLCBzY3JhdGNoR1BSLAot
ICAgICAgICAgICAgVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShub2RlLnJlZ2lzdGVyUG9p
bnRlcigpLT5nZXQoKSkpKTsKKyAgICAgICAgICAgIFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNv
ZGUobm9kZS0+cmVnaXN0ZXJQb2ludGVyKCktPmdldCgpKSkpOwogICAgICAgICBtX2ppdC5icmVh
a3BvaW50KCk7CiAgICAgICAgIG9rLmxpbmsoJm1faml0KTsKICNlbmRpZgogICAgICAgICAKLSAg
ICAgICAgbm9SZXN1bHQobV9jb21waWxlSW5kZXgpOworICAgICAgICBub1Jlc3VsdChub2RlKTsK
ICAgICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAgY2FzZSBDaGVja0hhc0luc3RhbmNlOiB7Ci0g
ICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS5jaGlsZDEoKSk7Cisg
ICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwog
ICAgICAgICBHUFJUZW1wb3Jhcnkgc3RydWN0dXJlKHRoaXMpOwogCiAgICAgICAgIC8vIFNwZWN1
bGF0ZSB0aGF0IGJhc2UgJ0ltcGxlbWVudHNEZWZhdWx0SGFzSW5zdGFuY2UnLgogICAgICAgICBt
X2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2UuZ3ByKCksIEpTQ2VsbDo6
c3RydWN0dXJlT2Zmc2V0KCkpLCBzdHJ1Y3R1cmUuZ3ByKCkpOwotICAgICAgICBzcGVjdWxhdGlv
bkNoZWNrKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaFRl
c3Q4KE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdHJ1Y3R1
cmUuZ3ByKCksIFN0cnVjdHVyZTo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgTWFjcm9Bc3NlbWJs
ZXI6OlRydXN0ZWRJbW0zMihJbXBsZW1lbnRzRGVmYXVsdEhhc0luc3RhbmNlKSkpOworICAgICAg
ICBzcGVjdWxhdGlvbkNoZWNrKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCAwLCBtX2ppdC5i
cmFuY2hUZXN0OChNYWNyb0Fzc2VtYmxlcjo6WmVybywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
c3RydWN0dXJlLmdwcigpLCBTdHJ1Y3R1cmU6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIE1hY3Jv
QXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoSW1wbGVtZW50c0RlZmF1bHRIYXNJbnN0YW5jZSkpKTsK
IAotICAgICAgICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCk7CisgICAgICAgIG5vUmVzdWx0KG5v
ZGUpOwogICAgICAgICBicmVhazsKICAgICB9CiAKQEAgLTQ0MTAsNyArNDQwMiw3IEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICB9CiAgICAgICAgIAogICAg
IGNhc2UgSXNVbmRlZmluZWQ6IHsKLSAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywg
bm9kZS5jaGlsZDEoKSk7CisgICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUt
PmNoaWxkMSgpKTsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKICAgICAgICAg
CiAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIGlzQ2VsbCA9IG1faml0LmJyYW5jaFRlc3Q2NChK
SVRDb21waWxlcjo6WmVybywgdmFsdWUuZ3ByKCksIEdQUkluZm86OnRhZ01hc2tSZWdpc3Rlcik7
CkBAIC00NDIwLDggKzQ0MTIsOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUm
IG5vZGUpCiAgICAgICAgIAogICAgICAgICBpc0NlbGwubGluaygmbV9qaXQpOwogICAgICAgICBK
SVRDb21waWxlcjo6SnVtcCBub3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkOwotICAgICAgICBpZiAo
bV9qaXQuZ3JhcGgoKS5nbG9iYWxPYmplY3RGb3Iobm9kZS5jb2RlT3JpZ2luKS0+bWFzcXVlcmFk
ZXNBc1VuZGVmaW5lZFdhdGNocG9pbnQoKS0+aXNTdGlsbFZhbGlkKCkpIHsKLSAgICAgICAgICAg
IG1faml0LmdyYXBoKCkuZ2xvYmFsT2JqZWN0Rm9yKG5vZGUuY29kZU9yaWdpbiktPm1hc3F1ZXJh
ZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50KCktPmFkZChzcGVjdWxhdGlvbldhdGNocG9pbnQoKSk7
CisgICAgICAgIGlmIChtX2ppdC5ncmFwaCgpLmdsb2JhbE9iamVjdEZvcihub2RlLT5jb2RlT3Jp
Z2luKS0+bWFzcXVlcmFkZXNBc1VuZGVmaW5lZFdhdGNocG9pbnQoKS0+aXNTdGlsbFZhbGlkKCkp
IHsKKyAgICAgICAgICAgIG1faml0LmdyYXBoKCkuZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPmNvZGVP
cmlnaW4pLT5tYXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2ludCgpLT5hZGQoc3BlY3VsYXRp
b25XYXRjaHBvaW50KCkpOwogICAgICAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tMzIoMCks
IHJlc3VsdC5ncHIoKSk7CiAgICAgICAgICAgICBub3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0g
bV9qaXQuanVtcCgpOwogICAgICAgICB9IGVsc2UgewpAQCAtNDQzNSw3ICs0NDI3LDcgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAgICAgR1BSVGVt
cG9yYXJ5IHJlbW90ZUdsb2JhbE9iamVjdCh0aGlzKTsKICAgICAgICAgICAgIEdQUlJlZyBsb2Nh
bEdsb2JhbE9iamVjdEdQUiA9IGxvY2FsR2xvYmFsT2JqZWN0LmdwcigpOwogICAgICAgICAgICAg
R1BSUmVnIHJlbW90ZUdsb2JhbE9iamVjdEdQUiA9IHJlbW90ZUdsb2JhbE9iamVjdC5ncHIoKTsK
LSAgICAgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxPYmplY3RG
b3Iobm9kZS5jb2RlT3JpZ2luKSksIGxvY2FsR2xvYmFsT2JqZWN0R1BSKTsKKyAgICAgICAgICAg
IG1faml0Lm1vdmUoVHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+Y29k
ZU9yaWdpbikpLCBsb2NhbEdsb2JhbE9iamVjdEdQUik7CiAgICAgICAgICAgICBtX2ppdC5sb2Fk
UHRyKEpJVENvbXBpbGVyOjpBZGRyZXNzKHJlc3VsdC5ncHIoKSwgU3RydWN0dXJlOjpnbG9iYWxP
YmplY3RPZmZzZXQoKSksIHJlbW90ZUdsb2JhbE9iamVjdEdQUik7IAogICAgICAgICAgICAgbV9q
aXQuY29tcGFyZVB0cihKSVRDb21waWxlcjo6RXF1YWwsIGxvY2FsR2xvYmFsT2JqZWN0R1BSLCBy
ZW1vdGVHbG9iYWxPYmplY3RHUFIsIHJlc3VsdC5ncHIoKSk7CiAgICAgICAgIH0KQEAgLTQ0NDMs
MzQgKzQ0MzUsMzQgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQog
ICAgICAgICBub3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsoJm1faml0KTsKICAgICAgICAg
ZG9uZS5saW5rKCZtX2ppdCk7CiAgICAgICAgIG1faml0Lm9yMzIoVHJ1c3RlZEltbTMyKFZhbHVl
RmFsc2UpLCByZXN1bHQuZ3ByKCkpOwotICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdC5ncHIo
KSwgbV9jb21waWxlSW5kZXgsIERhdGFGb3JtYXRKU0Jvb2xlYW4pOworICAgICAgICBqc1ZhbHVl
UmVzdWx0KHJlc3VsdC5ncHIoKSwgbm9kZSwgRGF0YUZvcm1hdEpTQm9vbGVhbik7CiAgICAgICAg
IGJyZWFrOwogICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBJc0Jvb2xlYW46IHsKLSAgICAgICAg
SlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS5jaGlsZDEoKSk7CisgICAgICAgIEpTVmFs
dWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgR1BSVGVtcG9y
YXJ5IHJlc3VsdCh0aGlzLCB2YWx1ZSk7CiAgICAgICAgIAogICAgICAgICBtX2ppdC5tb3ZlKHZh
bHVlLmdwcigpLCByZXN1bHQuZ3ByKCkpOwogICAgICAgICBtX2ppdC54b3I2NChKSVRDb21waWxl
cjo6VHJ1c3RlZEltbTMyKFZhbHVlRmFsc2UpLCByZXN1bHQuZ3ByKCkpOwogICAgICAgICBtX2pp
dC50ZXN0NjQoSklUQ29tcGlsZXI6Olplcm8sIHJlc3VsdC5ncHIoKSwgSklUQ29tcGlsZXI6OlRy
dXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90Pih+MSkpLCByZXN1bHQuZ3ByKCkpOwogICAg
ICAgICBtX2ppdC5vcjMyKFRydXN0ZWRJbW0zMihWYWx1ZUZhbHNlKSwgcmVzdWx0LmdwcigpKTsK
LSAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHQuZ3ByKCksIG1fY29tcGlsZUluZGV4LCBEYXRh
Rm9ybWF0SlNCb29sZWFuKTsKKyAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHQuZ3ByKCksIG5k
b2UsIERhdGFGb3JtYXRKU0Jvb2xlYW4pOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAg
IAogICAgIGNhc2UgSXNOdW1iZXI6IHsKLSAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhp
cywgbm9kZS5jaGlsZDEoKSk7CisgICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5v
ZGUtPmNoaWxkMSgpKTsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCB2YWx1ZSk7
CiAgICAgICAgIAogICAgICAgICBtX2ppdC50ZXN0NjQoSklUQ29tcGlsZXI6Ok5vblplcm8sIHZh
bHVlLmdwcigpLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIHJlc3VsdC5ncHIoKSk7
CiAgICAgICAgIG1faml0Lm9yMzIoVHJ1c3RlZEltbTMyKFZhbHVlRmFsc2UpLCByZXN1bHQuZ3By
KCkpOwotICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdC5ncHIoKSwgbV9jb21waWxlSW5kZXgs
IERhdGFGb3JtYXRKU0Jvb2xlYW4pOworICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdC5ncHIo
KSwgbm9kZSwgRGF0YUZvcm1hdEpTQm9vbGVhbik7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAg
ICAgICAgCiAgICAgY2FzZSBJc1N0cmluZzogewotICAgICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1
ZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKKyAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhp
cywgbm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIHZh
bHVlKTsKICAgICAgICAgCiAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIGlzTm90Q2VsbCA9IG1f
aml0LmJyYW5jaFRlc3Q2NChKSVRDb21waWxlcjo6Tm9uWmVybywgdmFsdWUuZ3ByKCksIEdQUklu
Zm86OnRhZ01hc2tSZWdpc3Rlcik7CkBAIC00NDg0LDM2ICs0NDc2LDM2IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgbV9qaXQubW92ZShUcnVzdGVk
SW1tMzIoVmFsdWVGYWxzZSksIHJlc3VsdC5ncHIoKSk7CiAgICAgICAgIAogICAgICAgICBkb25l
LmxpbmsoJm1faml0KTsKLSAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHQuZ3ByKCksIG1fY29t
cGlsZUluZGV4LCBEYXRhRm9ybWF0SlNCb29sZWFuKTsKKyAgICAgICAganNWYWx1ZVJlc3VsdChy
ZXN1bHQuZ3ByKCksIG5vZGUsIERhdGFGb3JtYXRKU0Jvb2xlYW4pOwogICAgICAgICBicmVhazsK
ICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgSXNPYmplY3Q6IHsKLSAgICAgICAgSlNWYWx1ZU9w
ZXJhbmQgdmFsdWUodGhpcywgbm9kZS5jaGlsZDEoKSk7CisgICAgICAgIEpTVmFsdWVPcGVyYW5k
IHZhbHVlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0g
dmFsdWUuZ3ByKCk7CiAgICAgICAgIEdQUlJlc3VsdCByZXN1bHQodGhpcyk7CiAgICAgICAgIEdQ
UlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CiAgICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7
CiAgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSXNPYmplY3QsIHJlc3VsdEdQUiwgdmFs
dWVHUFIpOwogICAgICAgICBtX2ppdC5vcjMyKFRydXN0ZWRJbW0zMihWYWx1ZUZhbHNlKSwgcmVz
dWx0R1BSKTsKLSAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHQuZ3ByKCksIG1fY29tcGlsZUlu
ZGV4LCBEYXRhRm9ybWF0SlNCb29sZWFuKTsKKyAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHQu
Z3ByKCksIG5vZGUsIERhdGFGb3JtYXRKU0Jvb2xlYW4pOwogICAgICAgICBicmVhazsKICAgICB9
CiAKICAgICBjYXNlIElzRnVuY3Rpb246IHsKLSAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUo
dGhpcywgbm9kZS5jaGlsZDEoKSk7CisgICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMs
IG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7
CiAgICAgICAgIEdQUlJlc3VsdCByZXN1bHQodGhpcyk7CiAgICAgICAgIEdQUlJlZyByZXN1bHRH
UFIgPSByZXN1bHQuZ3ByKCk7CiAgICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7CiAgICAgICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uSXNGdW5jdGlvbiwgcmVzdWx0R1BSLCB2YWx1ZUdQUik7CiAg
ICAgICAgIG1faml0Lm9yMzIoVHJ1c3RlZEltbTMyKFZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOwot
ICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdC5ncHIoKSwgbV9jb21waWxlSW5kZXgsIERhdGFG
b3JtYXRKU0Jvb2xlYW4pOworICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdC5ncHIoKSwgbm9k
ZSwgRGF0YUZvcm1hdEpTQm9vbGVhbik7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIAogICAgIGNh
c2UgVHlwZU9mOiB7Ci0gICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUuY2hp
bGQxKCkpOworICAgICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLT5jaGlsZDEo
KSk7CiAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOwogICAgICAgICBHUFJU
ZW1wb3JhcnkgdGVtcCh0aGlzKTsKICAgICAgICAgR1BSUmVnIHRlbXBHUFIgPSB0ZW1wLmdwcigp
OwpAQCAtNDUyNCwxOCArNDUxNiwxNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5v
ZGUmIG5vZGUpCiAgICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7CiAKICAgICAgICAgSklUQ29tcGls
ZXI6Okp1bXAgaXNOb3RDZWxsID0gbV9qaXQuYnJhbmNoVGVzdDY0KEpJVENvbXBpbGVyOjpOb25a
ZXJvLCB2YWx1ZUdQUiwgR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKTsKLSAgICAgICAgTm9kZSYg
Y2hpbGQgPSBtX2ppdC5ncmFwaCgpW25vZGUuY2hpbGQxKCldOwotICAgICAgICBpZiAoY2hpbGQu
c2hvdWxkU3BlY3VsYXRlQ2VsbCgpKQotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRU
eXBlLCBKU1ZhbHVlU291cmNlKHZhbHVlR1BSKSwgbm9kZS5jaGlsZDEoKSwgaXNOb3RDZWxsKTsK
KyAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVDZWxsKCkpCisgICAg
ICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVTb3VyY2UodmFsdWVHUFIp
LCBub2RlLT5jaGlsZDEoKSwgaXNOb3RDZWxsKTsKIAotICAgICAgICBpZiAoIWNoaWxkLnNob3Vs
ZFNwZWN1bGF0ZU5vblN0cmluZ0NlbGwoKSkgeworICAgICAgICBpZiAoIW5vZGUtPmNoaWxkMSgp
LT5zaG91bGRTcGVjdWxhdGVOb25TdHJpbmdDZWxsKCkpIHsKICAgICAgICAgICAgIG1faml0Lmxv
YWRQdHIoSklUQ29tcGlsZXI6OkFkZHJlc3ModmFsdWVHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zm
c2V0KCkpLCB0ZW1wR1BSKTsKICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIG5vdFN0cmlu
ZyA9IG1faml0LmJyYW5jaDgoSklUQ29tcGlsZXI6Ok5vdEVxdWFsLCBKSVRDb21waWxlcjo6QWRk
cmVzcyh0ZW1wR1BSLCBTdHJ1Y3R1cmU6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1c3RlZElt
bTMyKFN0cmluZ1R5cGUpKTsKLSAgICAgICAgICAgIGlmIChjaGlsZC5zaG91bGRTcGVjdWxhdGVT
dHJpbmcoKSkKLSAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFs
dWVTb3VyY2UodmFsdWVHUFIpLCBub2RlLmNoaWxkMSgpLCBub3RTdHJpbmcpOworICAgICAgICAg
ICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVTdHJpbmcoKSkKKyAgICAgICAg
ICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVTb3VyY2UodmFsdWVHUFIp
LCBub2RlLT5jaGlsZDEoKSwgbm90U3RyaW5nKTsKICAgICAgICAgICAgIG1faml0Lm1vdmUoVHJ1
c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPnNtYWxsU3RyaW5ncy5zdHJpbmdTdHJpbmco
KSksIHJlc3VsdEdQUik7CiAgICAgICAgICAgICBkb25lSnVtcHMuYXBwZW5kKG1faml0Lmp1bXAo
KSk7Ci0gICAgICAgICAgICBpZiAoIWNoaWxkLnNob3VsZFNwZWN1bGF0ZVN0cmluZygpKSB7Cisg
ICAgICAgICAgICBpZiAoIW5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVTdHJpbmcoKSkg
ewogICAgICAgICAgICAgICAgIG5vdFN0cmluZy5saW5rKCZtX2ppdCk7CiAgICAgICAgICAgICAg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25UeXBlT2YsIHJlc3VsdEdQUiwgdmFsdWVHUFIpOwog
ICAgICAgICAgICAgICAgIGRvbmVKdW1wcy5hcHBlbmQobV9qaXQuanVtcCgpKTsKQEAgLTQ1NDUs
NyArNDUzNiw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAg
ICAgICAgICAgIGRvbmVKdW1wcy5hcHBlbmQobV9qaXQuanVtcCgpKTsKICAgICAgICAgfQogCi0g
ICAgICAgIGlmICghY2hpbGQuc2hvdWxkU3BlY3VsYXRlQ2VsbCgpKSB7CisgICAgICAgIGlmICgh
bm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZUNlbGwoKSkgewogICAgICAgICAgICAgaXNO
b3RDZWxsLmxpbmsoJm1faml0KTsKICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIG5vdE51
bWJlciA9IG1faml0LmJyYW5jaFRlc3Q2NChKSVRDb21waWxlcjo6WmVybywgdmFsdWVHUFIsIEdQ
UkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlcik7CiAgICAgICAgICAgICBtX2ppdC5tb3ZlKFRy
dXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5zbWFsbFN0cmluZ3MubnVtYmVyU3RyaW5n
KCkpLCByZXN1bHRHUFIpOwpAQCAtNDU2Niw3ICs0NTU3LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1t
UHRyKG1faml0Lmdsb2JhbERhdGEoKS0+c21hbGxTdHJpbmdzLmJvb2xlYW5TdHJpbmcoKSksIHJl
c3VsdEdQUik7CiAgICAgICAgIH0KICAgICAgICAgZG9uZUp1bXBzLmxpbmsoJm1faml0KTsKLSAg
ICAgICAgY2VsbFJlc3VsdChyZXN1bHRHUFIsIG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAgY2Vs
bFJlc3VsdChyZXN1bHRHUFIsIG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9CiAKQEAgLTQ1
OTAsMjcgKzQ1ODEsMjcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2Rl
KQogICAgIGNhc2UgUmVzb2x2ZTogewogICAgICAgICBmbHVzaFJlZ2lzdGVycygpOwogICAgICAg
ICBHUFJSZXN1bHQgcmVzdWx0KHRoaXMpOwotICAgICAgICBSZXNvbHZlT3BlcmF0aW9uRGF0YSYg
ZGF0YSA9IG1faml0LmdyYXBoKCkubV9yZXNvbHZlT3BlcmF0aW9uc0RhdGFbbm9kZS5yZXNvbHZl
T3BlcmF0aW9uc0RhdGFJbmRleCgpXTsKKyAgICAgICAgUmVzb2x2ZU9wZXJhdGlvbkRhdGEmIGRh
dGEgPSBtX2ppdC5ncmFwaCgpLm1fcmVzb2x2ZU9wZXJhdGlvbnNEYXRhW25vZGUtPnJlc29sdmVP
cGVyYXRpb25zRGF0YUluZGV4KCldOwogICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblJl
c29sdmUsIHJlc3VsdC5ncHIoKSwgaWRlbnRpZmllcihkYXRhLmlkZW50aWZpZXJOdW1iZXIpLCBy
ZXNvbHZlT3BlcmF0aW9ucyhkYXRhLnJlc29sdmVPcGVyYXRpb25zSW5kZXgpKTsKLSAgICAgICAg
anNWYWx1ZVJlc3VsdChyZXN1bHQuZ3ByKCksIG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAganNW
YWx1ZVJlc3VsdChyZXN1bHQuZ3ByKCksIG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9CiAK
ICAgICBjYXNlIFJlc29sdmVCYXNlOiB7CiAgICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7CiAgICAg
ICAgIEdQUlJlc3VsdCByZXN1bHQodGhpcyk7Ci0gICAgICAgIFJlc29sdmVPcGVyYXRpb25EYXRh
JiBkYXRhID0gbV9qaXQuZ3JhcGgoKS5tX3Jlc29sdmVPcGVyYXRpb25zRGF0YVtub2RlLnJlc29s
dmVPcGVyYXRpb25zRGF0YUluZGV4KCldOworICAgICAgICBSZXNvbHZlT3BlcmF0aW9uRGF0YSYg
ZGF0YSA9IG1faml0LmdyYXBoKCkubV9yZXNvbHZlT3BlcmF0aW9uc0RhdGFbbm9kZS0+cmVzb2x2
ZU9wZXJhdGlvbnNEYXRhSW5kZXgoKV07CiAgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
UmVzb2x2ZUJhc2UsIHJlc3VsdC5ncHIoKSwgaWRlbnRpZmllcihkYXRhLmlkZW50aWZpZXJOdW1i
ZXIpLCByZXNvbHZlT3BlcmF0aW9ucyhkYXRhLnJlc29sdmVPcGVyYXRpb25zSW5kZXgpLCBwdXRU
b0Jhc2VPcGVyYXRpb24oZGF0YS5wdXRUb0Jhc2VPcGVyYXRpb25JbmRleCkpOwotICAgICAgICBq
c1ZhbHVlUmVzdWx0KHJlc3VsdC5ncHIoKSwgbV9jb21waWxlSW5kZXgpOworICAgICAgICBqc1Zh
bHVlUmVzdWx0KHJlc3VsdC5ncHIoKSwgbm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIAog
ICAgIGNhc2UgUmVzb2x2ZUJhc2VTdHJpY3RQdXQ6IHsKICAgICAgICAgZmx1c2hSZWdpc3RlcnMo
KTsKICAgICAgICAgR1BSUmVzdWx0IHJlc3VsdCh0aGlzKTsKLSAgICAgICAgUmVzb2x2ZU9wZXJh
dGlvbkRhdGEmIGRhdGEgPSBtX2ppdC5ncmFwaCgpLm1fcmVzb2x2ZU9wZXJhdGlvbnNEYXRhW25v
ZGUucmVzb2x2ZU9wZXJhdGlvbnNEYXRhSW5kZXgoKV07CisgICAgICAgIFJlc29sdmVPcGVyYXRp
b25EYXRhJiBkYXRhID0gbV9qaXQuZ3JhcGgoKS5tX3Jlc29sdmVPcGVyYXRpb25zRGF0YVtub2Rl
LT5yZXNvbHZlT3BlcmF0aW9uc0RhdGFJbmRleCgpXTsKICAgICAgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25SZXNvbHZlQmFzZVN0cmljdFB1dCwgcmVzdWx0LmdwcigpLCBpZGVudGlmaWVyKGRh
dGEuaWRlbnRpZmllck51bWJlciksIHJlc29sdmVPcGVyYXRpb25zKGRhdGEucmVzb2x2ZU9wZXJh
dGlvbnNJbmRleCksIHB1dFRvQmFzZU9wZXJhdGlvbihkYXRhLnB1dFRvQmFzZU9wZXJhdGlvbklu
ZGV4KSk7Ci0gICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0LmdwcigpLCBtX2NvbXBpbGVJbmRl
eCk7CisgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0LmdwcigpLCBub2RlKTsKICAgICAgICAg
YnJlYWs7CiAgICAgfQogCkBAIC00NjIzLDExICs0NjE0LDExIEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgR1BSUmVnIHJlc29sdmVJbmZvR1BSID0g
cmVzb2x2ZUluZm8uZ3ByKCk7CiAgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3By
KCk7CiAKLSAgICAgICAgUmVzb2x2ZUdsb2JhbERhdGEmIGRhdGEgPSBtX2ppdC5ncmFwaCgpLm1f
cmVzb2x2ZUdsb2JhbERhdGFbbm9kZS5yZXNvbHZlR2xvYmFsRGF0YUluZGV4KCldOworICAgICAg
ICBSZXNvbHZlR2xvYmFsRGF0YSYgZGF0YSA9IG1faml0LmdyYXBoKCkubV9yZXNvbHZlR2xvYmFs
RGF0YVtub2RlLT5yZXNvbHZlR2xvYmFsRGF0YUluZGV4KCldOwogICAgICAgICBSZXNvbHZlT3Bl
cmF0aW9uKiByZXNvbHZlT3BlcmF0aW9uQWRkcmVzcyA9ICYobV9qaXQuY29kZUJsb2NrKCktPnJl
c29sdmVPcGVyYXRpb25zKGRhdGEucmVzb2x2ZU9wZXJhdGlvbnNJbmRleCktPmRhdGEoKVtkYXRh
LnJlc29sdmVQcm9wZXJ0eUluZGV4XSk7CiAKICAgICAgICAgLy8gQ2hlY2sgU3RydWN0dXJlIG9m
IGdsb2JhbCBvYmplY3QKLSAgICAgICAgbV9qaXQubW92ZShKSVRDb21waWxlcjo6VHJ1c3RlZElt
bVB0cihtX2ppdC5nbG9iYWxPYmplY3RGb3Iobm9kZS5jb2RlT3JpZ2luKSksIGdsb2JhbE9iamVj
dEdQUik7CisgICAgICAgIG1faml0Lm1vdmUoSklUQ29tcGlsZXI6OlRydXN0ZWRJbW1QdHIobV9q
aXQuZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPmNvZGVPcmlnaW4pKSwgZ2xvYmFsT2JqZWN0R1BSKTsK
ICAgICAgICAgbV9qaXQubW92ZShKSVRDb21waWxlcjo6VHJ1c3RlZEltbVB0cihyZXNvbHZlT3Bl
cmF0aW9uQWRkcmVzcyksIHJlc29sdmVJbmZvR1BSKTsKICAgICAgICAgbV9qaXQubG9hZFB0cihK
SVRDb21waWxlcjo6QWRkcmVzcyhyZXNvbHZlSW5mb0dQUiwgT0JKRUNUX09GRlNFVE9GKFJlc29s
dmVPcGVyYXRpb24sIG1fc3RydWN0dXJlKSksIHJlc3VsdEdQUik7CiAgICAgICAgIEpJVENvbXBp
bGVyOjpKdW1wIHN0cnVjdHVyZXNEb250TWF0Y2ggPSBtX2ppdC5icmFuY2hQdHIoSklUQ29tcGls
ZXI6Ok5vdEVxdWFsLCByZXN1bHRHUFIsIEpJVENvbXBpbGVyOjpBZGRyZXNzKGdsb2JhbE9iamVj
dEdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSkpOwpAQCAtNDY1MCwxNCArNDY0MSwxNCBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgICAgICAg
ICAgcmVzdWx0R1BSLCByZXNvbHZlSW5mb0dQUiwgZ2xvYmFsT2JqZWN0R1BSLAogICAgICAgICAg
ICAgICAgICZtX2ppdC5jb2RlQmxvY2soKS0+aWRlbnRpZmllcihkYXRhLmlkZW50aWZpZXJOdW1i
ZXIpKSk7CiAKLSAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRHUFIsIG1fY29tcGlsZUluZGV4
KTsKKyAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRHUFIsIG5vZGUpOwogICAgICAgICBicmVh
azsKICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgQ3JlYXRlQWN0aXZhdGlvbjogewotICAgICAg
ICBSRUxFQVNFX0FTU0VSVCghbm9kZS5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSk7CisgICAg
ICAgIFJFTEVBU0VfQVNTRVJUKCFub2RlLT5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSk7CiAg
ICAgICAgIAotICAgICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLmNoaWxkMSgp
KTsKKyAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwog
ICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIHZhbHVlKTsKICAgICAgICAgCiAgICAg
ICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOwpAQCAtNDY3MCwxMiArNDY2MSwxMiBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIGFkZFNs
b3dQYXRoR2VuZXJhdG9yKAogICAgICAgICAgICAgc2xvd1BhdGhDYWxsKG5vdENyZWF0ZWQsIHRo
aXMsIG9wZXJhdGlvbkNyZWF0ZUFjdGl2YXRpb24sIHJlc3VsdEdQUikpOwogICAgICAgICAKLSAg
ICAgICAgY2VsbFJlc3VsdChyZXN1bHRHUFIsIG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAgY2Vs
bFJlc3VsdChyZXN1bHRHUFIsIG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAg
IAogICAgIGNhc2UgQ3JlYXRlQXJndW1lbnRzOiB7Ci0gICAgICAgIEpTVmFsdWVPcGVyYW5kIHZh
bHVlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOworICAgICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0
aGlzLCBub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywg
dmFsdWUpOwogICAgICAgICAKICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7
CkBAIC00Njg1LDMxICs0Njc2LDMxIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9k
ZSYgbm9kZSkKICAgICAgICAgCiAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIG5vdENyZWF0ZWQg
PSBtX2ppdC5icmFuY2hUZXN0NjQoSklUQ29tcGlsZXI6Olplcm8sIHJlc3VsdEdQUik7CiAgICAg
ICAgIAotICAgICAgICBpZiAobm9kZS5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSkgeworICAg
ICAgICBpZiAobm9kZS0+Y29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpIHsKICAgICAgICAgICAg
IGFkZFNsb3dQYXRoR2VuZXJhdG9yKAogICAgICAgICAgICAgICAgIHNsb3dQYXRoQ2FsbCgKICAg
ICAgICAgICAgICAgICAgICAgbm90Q3JlYXRlZCwgdGhpcywgb3BlcmF0aW9uQ3JlYXRlSW5saW5l
ZEFyZ3VtZW50cywgcmVzdWx0R1BSLAotICAgICAgICAgICAgICAgICAgICBub2RlLmNvZGVPcmln
aW4uaW5saW5lQ2FsbEZyYW1lKSk7CisgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNvZGVPcmln
aW4uaW5saW5lQ2FsbEZyYW1lKSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBhZGRT
bG93UGF0aEdlbmVyYXRvcigKICAgICAgICAgICAgICAgICBzbG93UGF0aENhbGwobm90Q3JlYXRl
ZCwgdGhpcywgb3BlcmF0aW9uQ3JlYXRlQXJndW1lbnRzLCByZXN1bHRHUFIpKTsKICAgICAgICAg
fQogICAgICAgICAKLSAgICAgICAgY2VsbFJlc3VsdChyZXN1bHRHUFIsIG1fY29tcGlsZUluZGV4
KTsKKyAgICAgICAgY2VsbFJlc3VsdChyZXN1bHRHUFIsIG5vZGUpOwogICAgICAgICBicmVhazsK
ICAgICB9CiAKICAgICBjYXNlIFRlYXJPZmZBY3RpdmF0aW9uOiB7Ci0gICAgICAgIFJFTEVBU0Vf
QVNTRVJUKCFub2RlLmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKTsKKyAgICAgICAgUkVMRUFT
RV9BU1NFUlQoIW5vZGUtPmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKTsKIAotICAgICAgICBK
U1ZhbHVlT3BlcmFuZCBhY3RpdmF0aW9uVmFsdWUodGhpcywgbm9kZS5jaGlsZDEoKSk7CisgICAg
ICAgIEpTVmFsdWVPcGVyYW5kIGFjdGl2YXRpb25WYWx1ZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7
CiAgICAgICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOwogICAgICAgICBHUFJSZWcgYWN0
aXZhdGlvblZhbHVlR1BSID0gYWN0aXZhdGlvblZhbHVlLmdwcigpOwogICAgICAgICBHUFJSZWcg
c2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CiAKICAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAg
bm90Q3JlYXRlZCA9IG1faml0LmJyYW5jaFRlc3Q2NChKSVRDb21waWxlcjo6WmVybywgYWN0aXZh
dGlvblZhbHVlR1BSKTsKIAotICAgICAgICBTaGFyZWRTeW1ib2xUYWJsZSogc3ltYm9sVGFibGUg
PSBtX2ppdC5zeW1ib2xUYWJsZUZvcihub2RlLmNvZGVPcmlnaW4pOworICAgICAgICBTaGFyZWRT
eW1ib2xUYWJsZSogc3ltYm9sVGFibGUgPSBtX2ppdC5zeW1ib2xUYWJsZUZvcihub2RlLT5jb2Rl
T3JpZ2luKTsKICAgICAgICAgaW50IHJlZ2lzdGVyc09mZnNldCA9IEpTQWN0aXZhdGlvbjo6cmVn
aXN0ZXJzT2Zmc2V0KHN5bWJvbFRhYmxlKTsKIAogICAgICAgICBpbnQgY2FwdHVyZUVuZCA9IHN5
bWJvbFRhYmxlLT5jYXB0dXJlRW5kKCk7CkBAIC00NzI1LDMwICs0NzE2LDMwIEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgbV9qaXQuc3RvcmVQdHIo
c2NyYXRjaEdQUiwgSklUQ29tcGlsZXI6OkFkZHJlc3MoYWN0aXZhdGlvblZhbHVlR1BSLCBKU0Fj
dGl2YXRpb246Om9mZnNldE9mUmVnaXN0ZXJzKCkpKTsKIAogICAgICAgICBub3RDcmVhdGVkLmxp
bmsoJm1faml0KTsKLSAgICAgICAgbm9SZXN1bHQobV9jb21waWxlSW5kZXgpOworICAgICAgICBu
b1Jlc3VsdChub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAgY2FzZSBUZWFyT2Zm
QXJndW1lbnRzOiB7Ci0gICAgICAgIEpTVmFsdWVPcGVyYW5kIHVubW9kaWZpZWRBcmd1bWVudHNW
YWx1ZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKLSAgICAgICAgSlNWYWx1ZU9wZXJhbmQgYWN0aXZh
dGlvblZhbHVlKHRoaXMsIG5vZGUuY2hpbGQyKCkpOworICAgICAgICBKU1ZhbHVlT3BlcmFuZCB1
bm1vZGlmaWVkQXJndW1lbnRzVmFsdWUodGhpcywgbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBK
U1ZhbHVlT3BlcmFuZCBhY3RpdmF0aW9uVmFsdWUodGhpcywgbm9kZS0+Y2hpbGQyKCkpOwogICAg
ICAgICBHUFJSZWcgdW5tb2RpZmllZEFyZ3VtZW50c1ZhbHVlR1BSID0gdW5tb2RpZmllZEFyZ3Vt
ZW50c1ZhbHVlLmdwcigpOwogICAgICAgICBHUFJSZWcgYWN0aXZhdGlvblZhbHVlR1BSID0gYWN0
aXZhdGlvblZhbHVlLmdwcigpOwogCiAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIGNyZWF0ZWQg
PSBtX2ppdC5icmFuY2hUZXN0NjQoSklUQ29tcGlsZXI6Ok5vblplcm8sIHVubW9kaWZpZWRBcmd1
bWVudHNWYWx1ZUdQUik7CiAKLSAgICAgICAgaWYgKG5vZGUuY29kZU9yaWdpbi5pbmxpbmVDYWxs
RnJhbWUpIHsKKyAgICAgICAgaWYgKG5vZGUtPmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKSB7
CiAgICAgICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKICAgICAgICAgICAgICAgICBzbG93
UGF0aENhbGwoCiAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZWQsIHRoaXMsIG9wZXJhdGlvblRl
YXJPZmZJbmxpbmVkQXJndW1lbnRzLCBOb1Jlc3VsdCwKLSAgICAgICAgICAgICAgICAgICAgdW5t
b2RpZmllZEFyZ3VtZW50c1ZhbHVlR1BSLCBhY3RpdmF0aW9uVmFsdWVHUFIsIG5vZGUuY29kZU9y
aWdpbi5pbmxpbmVDYWxsRnJhbWUpKTsKKyAgICAgICAgICAgICAgICAgICAgdW5tb2RpZmllZEFy
Z3VtZW50c1ZhbHVlR1BSLCBhY3RpdmF0aW9uVmFsdWVHUFIsIG5vZGUtPmNvZGVPcmlnaW4uaW5s
aW5lQ2FsbEZyYW1lKSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBhZGRTbG93UGF0
aEdlbmVyYXRvcigKICAgICAgICAgICAgICAgICBzbG93UGF0aENhbGwoCiAgICAgICAgICAgICAg
ICAgICAgIGNyZWF0ZWQsIHRoaXMsIG9wZXJhdGlvblRlYXJPZmZBcmd1bWVudHMsIE5vUmVzdWx0
LCB1bm1vZGlmaWVkQXJndW1lbnRzVmFsdWVHUFIsIGFjdGl2YXRpb25WYWx1ZUdQUikpOwogICAg
ICAgICB9CiAgICAgICAgIAotICAgICAgICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCk7CisgICAg
ICAgIG5vUmVzdWx0KG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIApAQCAt
NDc1OCwxOSArNDc0OSwxOSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5v
ZGUpCiAgICAgICAgIAogICAgICAgICBpZiAoIWlzRW1wdHlTcGVjdWxhdGlvbigKICAgICAgICAg
ICAgICAgICBtX3N0YXRlLnZhcmlhYmxlcygpLm9wZXJhbmQoCi0gICAgICAgICAgICAgICAgICAg
IG1faml0LmdyYXBoKCkuYXJndW1lbnRzUmVnaXN0ZXJGb3Iobm9kZS5jb2RlT3JpZ2luKSkubV90
eXBlKSkgeworICAgICAgICAgICAgICAgICAgICBtX2ppdC5ncmFwaCgpLmFyZ3VtZW50c1JlZ2lz
dGVyRm9yKG5vZGUtPmNvZGVPcmlnaW4pKS5tX3R5cGUpKSB7CiAgICAgICAgICAgICBzcGVjdWxh
dGlvbkNoZWNrKAotICAgICAgICAgICAgICAgIEFyZ3VtZW50c0VzY2FwZWQsIEpTVmFsdWVSZWdz
KCksIE5vTm9kZSwKKyAgICAgICAgICAgICAgICBBcmd1bWVudHNFc2NhcGVkLCBKU1ZhbHVlUmVn
cygpLCAwLAogICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaFRlc3Q2NCgKICAgICAgICAgICAg
ICAgICAgICAgSklUQ29tcGlsZXI6Ok5vblplcm8sCiAgICAgICAgICAgICAgICAgICAgIEpJVENv
bXBpbGVyOjphZGRyZXNzRm9yKAotICAgICAgICAgICAgICAgICAgICAgICAgbV9qaXQuYXJndW1l
bnRzUmVnaXN0ZXJGb3Iobm9kZS5jb2RlT3JpZ2luKSkpKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIG1faml0LmFyZ3VtZW50c1JlZ2lzdGVyRm9yKG5vZGUtPmNvZGVPcmlnaW4pKSkpOwogICAg
ICAgICB9CiAgICAgICAgIAotICAgICAgICBSRUxFQVNFX0FTU0VSVCghbm9kZS5jb2RlT3JpZ2lu
LmlubGluZUNhbGxGcmFtZSk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFub2RlLT5jb2RlT3Jp
Z2luLmlubGluZUNhbGxGcmFtZSk7CiAgICAgICAgIG1faml0LmxvYWQzMihKSVRDb21waWxlcjo6
cGF5bG9hZEZvcihKU1N0YWNrOjpBcmd1bWVudENvdW50KSwgcmVzdWx0R1BSKTsKICAgICAgICAg
bV9qaXQuc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCByZXN1bHRHUFIpOwotICAgICAgICBpbnRlZ2Vy
UmVzdWx0KHJlc3VsdEdQUiwgbV9jb21waWxlSW5kZXgpOworICAgICAgICBpbnRlZ2VyUmVzdWx0
KHJlc3VsdEdQUiwgbm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCkBAIC00
NzgxLDExICs0NzcyLDExIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9k
ZSkKICAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgY3JlYXRlZCA9IG1faml0LmJyYW5jaFRlc3Q2
NCgKICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpOb25aZXJvLAogICAgICAgICAgICAgSklUQ29t
cGlsZXI6OmFkZHJlc3NGb3IoCi0gICAgICAgICAgICAgICAgbV9qaXQuYXJndW1lbnRzUmVnaXN0
ZXJGb3Iobm9kZS5jb2RlT3JpZ2luKSkpOworICAgICAgICAgICAgICAgIG1faml0LmFyZ3VtZW50
c1JlZ2lzdGVyRm9yKG5vZGUtPmNvZGVPcmlnaW4pKSk7CiAgICAgICAgIAotICAgICAgICBpZiAo
bm9kZS5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSkgeworICAgICAgICBpZiAobm9kZS0+Y29k
ZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpIHsKICAgICAgICAgICAgIG1faml0Lm1vdmUoCi0gICAg
ICAgICAgICAgICAgSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKG5vZGUuY29kZU9yaWdp
bi5pbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50cy5zaXplKCkgLSAxKSkpLAorICAgICAgICAgICAg
ICAgIEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bWJlcihub2RlLT5jb2RlT3JpZ2luLmlubGlu
ZUNhbGxGcmFtZS0+YXJndW1lbnRzLnNpemUoKSAtIDEpKSksCiAgICAgICAgICAgICAgICAgcmVz
dWx0R1BSKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIG1faml0LmxvYWQzMihKSVRD
b21waWxlcjo6cGF5bG9hZEZvcihKU1N0YWNrOjpBcmd1bWVudENvdW50KSwgcmVzdWx0R1BSKTsK
QEAgLTQ4MDAsNDAgKzQ3OTEsNDAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2Rl
JiBub2RlKQogICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKICAgICAgICAgICAgIHNsb3dQ
YXRoQ2FsbCgKICAgICAgICAgICAgICAgICBjcmVhdGVkLCB0aGlzLCBvcGVyYXRpb25HZXRBcmd1
bWVudHNMZW5ndGgsIHJlc3VsdEdQUiwKLSAgICAgICAgICAgICAgICBtX2ppdC5hcmd1bWVudHNS
ZWdpc3RlckZvcihub2RlLmNvZGVPcmlnaW4pKSk7CisgICAgICAgICAgICAgICAgbV9qaXQuYXJn
dW1lbnRzUmVnaXN0ZXJGb3Iobm9kZS0+Y29kZU9yaWdpbikpKTsKICAgICAgICAgCi0gICAgICAg
IGpzVmFsdWVSZXN1bHQocmVzdWx0R1BSLCBtX2NvbXBpbGVJbmRleCk7CisgICAgICAgIGpzVmFs
dWVSZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAg
ICAKICAgICBjYXNlIEdldE15QXJndW1lbnRCeVZhbDogewotICAgICAgICBTcGVjdWxhdGVTdHJp
Y3RJbnQzMk9wZXJhbmQgaW5kZXgodGhpcywgbm9kZS5jaGlsZDEoKSk7CisgICAgICAgIFNwZWN1
bGF0ZVN0cmljdEludDMyT3BlcmFuZCBpbmRleCh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CiAgICAg
ICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CiAgICAgICAgIEdQUlJlZyBpbmRleEdQUiA9
IGluZGV4LmdwcigpOwogICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwog
CiAgICAgICAgIGlmICghaXNFbXB0eVNwZWN1bGF0aW9uKAogICAgICAgICAgICAgICAgIG1fc3Rh
dGUudmFyaWFibGVzKCkub3BlcmFuZCgKLSAgICAgICAgICAgICAgICAgICAgbV9qaXQuZ3JhcGgo
KS5hcmd1bWVudHNSZWdpc3RlckZvcihub2RlLmNvZGVPcmlnaW4pKS5tX3R5cGUpKSB7CisgICAg
ICAgICAgICAgICAgICAgIG1faml0LmdyYXBoKCkuYXJndW1lbnRzUmVnaXN0ZXJGb3Iobm9kZS0+
Y29kZU9yaWdpbikpLm1fdHlwZSkpIHsKICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCi0g
ICAgICAgICAgICAgICAgQXJndW1lbnRzRXNjYXBlZCwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLAor
ICAgICAgICAgICAgICAgIEFyZ3VtZW50c0VzY2FwZWQsIEpTVmFsdWVSZWdzKCksIDAsCiAgICAg
ICAgICAgICAgICAgbV9qaXQuYnJhbmNoVGVzdDY0KAogICAgICAgICAgICAgICAgICAgICBKSVRD
b21waWxlcjo6Tm9uWmVybywKICAgICAgICAgICAgICAgICAgICAgSklUQ29tcGlsZXI6OmFkZHJl
c3NGb3IoCi0gICAgICAgICAgICAgICAgICAgICAgICBtX2ppdC5hcmd1bWVudHNSZWdpc3RlckZv
cihub2RlLmNvZGVPcmlnaW4pKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgbV9qaXQuYXJn
dW1lbnRzUmVnaXN0ZXJGb3Iobm9kZS0+Y29kZU9yaWdpbikpKSk7CiAgICAgICAgIH0KIAogICAg
ICAgICBtX2ppdC5hZGQzMihUcnVzdGVkSW1tMzIoMSksIGluZGV4R1BSLCByZXN1bHRHUFIpOwot
ICAgICAgICBpZiAobm9kZS5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSkgeworICAgICAgICBp
ZiAobm9kZS0+Y29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpIHsKICAgICAgICAgICAgIHNwZWN1
bGF0aW9uQ2hlY2soCi0gICAgICAgICAgICAgICAgVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCks
IE5vTm9kZSwKKyAgICAgICAgICAgICAgICBVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgMCwK
ICAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2gzMigKICAgICAgICAgICAgICAgICAgICAgSklU
Q29tcGlsZXI6OkFib3ZlT3JFcXVhbCwKICAgICAgICAgICAgICAgICAgICAgcmVzdWx0R1BSLAot
ICAgICAgICAgICAgICAgICAgICBJbW0zMihub2RlLmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1l
LT5hcmd1bWVudHMuc2l6ZSgpKSkpOworICAgICAgICAgICAgICAgICAgICBJbW0zMihub2RlLT5j
b2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzLnNpemUoKSkpKTsKICAgICAgICAg
fSBlbHNlIHsKICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCi0gICAgICAgICAgICAgICAg
VW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwKKyAgICAgICAgICAgICAgICBVbmNv
dW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgMCwKICAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2gz
MigKICAgICAgICAgICAgICAgICAgICAgSklUQ29tcGlsZXI6OkFib3ZlT3JFcXVhbCwKICAgICAg
ICAgICAgICAgICAgICAgcmVzdWx0R1BSLApAQCAtNDg0MiwxMSArNDgzMywxMSBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAKICAgICAgICAgSklUQ29tcGlsZXI6
Okp1bXBMaXN0IHNsb3dBcmd1bWVudDsKICAgICAgICAgSklUQ29tcGlsZXI6Okp1bXBMaXN0IHNs
b3dBcmd1bWVudE91dE9mQm91bmRzOwotICAgICAgICBpZiAoY29uc3QgU2xvd0FyZ3VtZW50KiBz
bG93QXJndW1lbnRzID0gbV9qaXQuc3ltYm9sVGFibGVGb3Iobm9kZS5jb2RlT3JpZ2luKS0+c2xv
d0FyZ3VtZW50cygpKSB7CisgICAgICAgIGlmIChjb25zdCBTbG93QXJndW1lbnQqIHNsb3dBcmd1
bWVudHMgPSBtX2ppdC5zeW1ib2xUYWJsZUZvcihub2RlLT5jb2RlT3JpZ2luKS0+c2xvd0FyZ3Vt
ZW50cygpKSB7CiAgICAgICAgICAgICBzbG93QXJndW1lbnRPdXRPZkJvdW5kcy5hcHBlbmQoCiAg
ICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoMzIoCiAgICAgICAgICAgICAgICAgICAgIEpJVENv
bXBpbGVyOjpBYm92ZU9yRXF1YWwsIGluZGV4R1BSLAotICAgICAgICAgICAgICAgICAgICBJbW0z
MihtX2ppdC5zeW1ib2xUYWJsZUZvcihub2RlLmNvZGVPcmlnaW4pLT5wYXJhbWV0ZXJDb3VudCgp
KSkpOworICAgICAgICAgICAgICAgICAgICBJbW0zMihtX2ppdC5zeW1ib2xUYWJsZUZvcihub2Rl
LT5jb2RlT3JpZ2luKS0+cGFyYW1ldGVyQ291bnQoKSkpKTsKIAogICAgICAgICAgICAgQ09NUElM
RV9BU1NFUlQoc2l6ZW9mKFNsb3dBcmd1bWVudCkgPT0gOCwgU2xvd0FyZ3VtZW50X3NpemVfaXNf
ZWlnaHRfYnl0ZXMpOwogICAgICAgICAgICAgbV9qaXQubW92ZShJbW1QdHIoc2xvd0FyZ3VtZW50
cyksIHJlc3VsdEdQUik7CkBAIC00ODU4LDcgKzQ4NDksNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgICAgICBtX2ppdC5zaWduRXh0ZW5kMzJUb1B0
cihyZXN1bHRHUFIsIHJlc3VsdEdQUik7CiAgICAgICAgICAgICBtX2ppdC5sb2FkNjQoCiAgICAg
ICAgICAgICAgICAgSklUQ29tcGlsZXI6OkJhc2VJbmRleCgKLSAgICAgICAgICAgICAgICAgICAg
R1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIHJlc3VsdEdQUiwgSklUQ29tcGlsZXI6OlRpbWVz
RWlnaHQsIG1faml0Lm9mZnNldE9mTG9jYWxzKG5vZGUuY29kZU9yaWdpbikpLAorICAgICAgICAg
ICAgICAgICAgICBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgcmVzdWx0R1BSLCBKSVRDb21w
aWxlcjo6VGltZXNFaWdodCwgbV9qaXQub2Zmc2V0T2ZMb2NhbHMobm9kZS0+Y29kZU9yaWdpbikp
LAogICAgICAgICAgICAgICAgIHJlc3VsdEdQUik7CiAgICAgICAgICAgICBzbG93QXJndW1lbnQu
YXBwZW5kKG1faml0Lmp1bXAoKSk7CiAgICAgICAgIH0KQEAgLTQ4NjksMTYgKzQ4NjAsMTYgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAgICAgCiAg
ICAgICAgIG1faml0LmxvYWQ2NCgKICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpCYXNlSW5kZXgo
Ci0gICAgICAgICAgICAgICAgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIHJlc3VsdEdQUiwg
SklUQ29tcGlsZXI6OlRpbWVzRWlnaHQsIG1faml0Lm9mZnNldE9mQXJndW1lbnRzSW5jbHVkaW5n
VGhpcyhub2RlLmNvZGVPcmlnaW4pKSwKKyAgICAgICAgICAgICAgICBHUFJJbmZvOjpjYWxsRnJh
bWVSZWdpc3RlciwgcmVzdWx0R1BSLCBKSVRDb21waWxlcjo6VGltZXNFaWdodCwgbV9qaXQub2Zm
c2V0T2ZBcmd1bWVudHNJbmNsdWRpbmdUaGlzKG5vZGUtPmNvZGVPcmlnaW4pKSwKICAgICAgICAg
ICAgIHJlc3VsdEdQUik7CiAKICAgICAgICAgc2xvd0FyZ3VtZW50LmxpbmsoJm1faml0KTsKLSAg
ICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRHUFIsIG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAg
anNWYWx1ZVJlc3VsdChyZXN1bHRHUFIsIG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9CiAg
ICAgICAgIAogICAgIGNhc2UgR2V0TXlBcmd1bWVudEJ5VmFsU2FmZTogewotICAgICAgICBTcGVj
dWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgaW5kZXgodGhpcywgbm9kZS5jaGlsZDEoKSk7CisgICAg
ICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBpbmRleCh0aGlzLCBub2RlLT5jaGlsZDEo
KSk7CiAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CiAgICAgICAgIEdQUlJlZyBp
bmRleEdQUiA9IGluZGV4LmdwcigpOwogICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0
LmdwcigpOwpAQCAtNDg4OCwxNSArNDg3OSwxNSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlKE5vZGUmIG5vZGUpCiAgICAgICAgICAgICBtX2ppdC5icmFuY2hUZXN0NjQoCiAgICAgICAg
ICAgICAgICAgSklUQ29tcGlsZXI6Ok5vblplcm8sCiAgICAgICAgICAgICAgICAgSklUQ29tcGls
ZXI6OmFkZHJlc3NGb3IoCi0gICAgICAgICAgICAgICAgICAgIG1faml0LmFyZ3VtZW50c1JlZ2lz
dGVyRm9yKG5vZGUuY29kZU9yaWdpbikpKSk7CisgICAgICAgICAgICAgICAgICAgIG1faml0LmFy
Z3VtZW50c1JlZ2lzdGVyRm9yKG5vZGUtPmNvZGVPcmlnaW4pKSkpOwogICAgICAgICAKICAgICAg
ICAgbV9qaXQuYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBpbmRleEdQUiwgcmVzdWx0R1BSKTsKLSAg
ICAgICAgaWYgKG5vZGUuY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpIHsKKyAgICAgICAgaWYg
KG5vZGUtPmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKSB7CiAgICAgICAgICAgICBzbG93UGF0
aC5hcHBlbmQoCiAgICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoMzIoCiAgICAgICAgICAgICAg
ICAgICAgIEpJVENvbXBpbGVyOjpBYm92ZU9yRXF1YWwsCiAgICAgICAgICAgICAgICAgICAgIHJl
c3VsdEdQUiwKLSAgICAgICAgICAgICAgICAgICAgSW1tMzIobm9kZS5jb2RlT3JpZ2luLmlubGlu
ZUNhbGxGcmFtZS0+YXJndW1lbnRzLnNpemUoKSkpKTsKKyAgICAgICAgICAgICAgICAgICAgSW1t
MzIobm9kZS0+Y29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50cy5zaXplKCkpKSk7
CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBzbG93UGF0aC5hcHBlbmQoCiAgICAgICAg
ICAgICAgICAgbV9qaXQuYnJhbmNoMzIoCkBAIC00OTA3LDExICs0ODk4LDExIEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgCiAgICAgICAgIEpJVENv
bXBpbGVyOjpKdW1wTGlzdCBzbG93QXJndW1lbnQ7CiAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1w
TGlzdCBzbG93QXJndW1lbnRPdXRPZkJvdW5kczsKLSAgICAgICAgaWYgKGNvbnN0IFNsb3dBcmd1
bWVudCogc2xvd0FyZ3VtZW50cyA9IG1faml0LnN5bWJvbFRhYmxlRm9yKG5vZGUuY29kZU9yaWdp
biktPnNsb3dBcmd1bWVudHMoKSkgeworICAgICAgICBpZiAoY29uc3QgU2xvd0FyZ3VtZW50KiBz
bG93QXJndW1lbnRzID0gbV9qaXQuc3ltYm9sVGFibGVGb3Iobm9kZS0+Y29kZU9yaWdpbiktPnNs
b3dBcmd1bWVudHMoKSkgewogICAgICAgICAgICAgc2xvd0FyZ3VtZW50T3V0T2ZCb3VuZHMuYXBw
ZW5kKAogICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaDMyKAogICAgICAgICAgICAgICAgICAg
ICBKSVRDb21waWxlcjo6QWJvdmVPckVxdWFsLCBpbmRleEdQUiwKLSAgICAgICAgICAgICAgICAg
ICAgSW1tMzIobV9qaXQuc3ltYm9sVGFibGVGb3Iobm9kZS5jb2RlT3JpZ2luKS0+cGFyYW1ldGVy
Q291bnQoKSkpKTsKKyAgICAgICAgICAgICAgICAgICAgSW1tMzIobV9qaXQuc3ltYm9sVGFibGVG
b3Iobm9kZS0+Y29kZU9yaWdpbiktPnBhcmFtZXRlckNvdW50KCkpKSk7CiAKICAgICAgICAgICAg
IENPTVBJTEVfQVNTRVJUKHNpemVvZihTbG93QXJndW1lbnQpID09IDgsIFNsb3dBcmd1bWVudF9z
aXplX2lzX2VpZ2h0X2J5dGVzKTsKICAgICAgICAgICAgIG1faml0Lm1vdmUoSW1tUHRyKHNsb3dB
cmd1bWVudHMpLCByZXN1bHRHUFIpOwpAQCAtNDkyMyw3ICs0OTE0LDcgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAgICAgbV9qaXQuc2lnbkV4dGVu
ZDMyVG9QdHIocmVzdWx0R1BSLCByZXN1bHRHUFIpOwogICAgICAgICAgICAgbV9qaXQubG9hZDY0
KAogICAgICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpCYXNlSW5kZXgoCi0gICAgICAgICAgICAg
ICAgICAgIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCByZXN1bHRHUFIsIEpJVENvbXBpbGVy
OjpUaW1lc0VpZ2h0LCBtX2ppdC5vZmZzZXRPZkxvY2Fscyhub2RlLmNvZGVPcmlnaW4pKSwKKyAg
ICAgICAgICAgICAgICAgICAgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIHJlc3VsdEdQUiwg
SklUQ29tcGlsZXI6OlRpbWVzRWlnaHQsIG1faml0Lm9mZnNldE9mTG9jYWxzKG5vZGUtPmNvZGVP
cmlnaW4pKSwKICAgICAgICAgICAgICAgICByZXN1bHRHUFIpOwogICAgICAgICAgICAgc2xvd0Fy
Z3VtZW50LmFwcGVuZChtX2ppdC5qdW1wKCkpOwogICAgICAgICB9CkBAIC00OTM0LDQwICs0OTI1
LDQwIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAg
CiAgICAgICAgIG1faml0LmxvYWQ2NCgKICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpCYXNlSW5k
ZXgoCi0gICAgICAgICAgICAgICAgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIHJlc3VsdEdQ
UiwgSklUQ29tcGlsZXI6OlRpbWVzRWlnaHQsIG1faml0Lm9mZnNldE9mQXJndW1lbnRzSW5jbHVk
aW5nVGhpcyhub2RlLmNvZGVPcmlnaW4pKSwKKyAgICAgICAgICAgICAgICBHUFJJbmZvOjpjYWxs
RnJhbWVSZWdpc3RlciwgcmVzdWx0R1BSLCBKSVRDb21waWxlcjo6VGltZXNFaWdodCwgbV9qaXQu
b2Zmc2V0T2ZBcmd1bWVudHNJbmNsdWRpbmdUaGlzKG5vZGUtPmNvZGVPcmlnaW4pKSwKICAgICAg
ICAgICAgIHJlc3VsdEdQUik7CiAgICAgICAgIAotICAgICAgICBpZiAobm9kZS5jb2RlT3JpZ2lu
LmlubGluZUNhbGxGcmFtZSkgeworICAgICAgICBpZiAobm9kZS0+Y29kZU9yaWdpbi5pbmxpbmVD
YWxsRnJhbWUpIHsKICAgICAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAogICAgICAgICAg
ICAgICAgIHNsb3dQYXRoQ2FsbCgKICAgICAgICAgICAgICAgICAgICAgc2xvd1BhdGgsIHRoaXMs
IG9wZXJhdGlvbkdldElubGluZWRBcmd1bWVudEJ5VmFsLCByZXN1bHRHUFIsIAotICAgICAgICAg
ICAgICAgICAgICBtX2ppdC5hcmd1bWVudHNSZWdpc3RlckZvcihub2RlLmNvZGVPcmlnaW4pLAot
ICAgICAgICAgICAgICAgICAgICBub2RlLmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lLAorICAg
ICAgICAgICAgICAgICAgICBtX2ppdC5hcmd1bWVudHNSZWdpc3RlckZvcihub2RlLT5jb2RlT3Jp
Z2luKSwKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y29kZU9yaWdpbi5pbmxpbmVDYWxsRnJh
bWUsCiAgICAgICAgICAgICAgICAgICAgIGluZGV4R1BSKSk7CiAgICAgICAgIH0gZWxzZSB7CiAg
ICAgICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKICAgICAgICAgICAgICAgICBzbG93UGF0
aENhbGwoCiAgICAgICAgICAgICAgICAgICAgIHNsb3dQYXRoLCB0aGlzLCBvcGVyYXRpb25HZXRB
cmd1bWVudEJ5VmFsLCByZXN1bHRHUFIsIAotICAgICAgICAgICAgICAgICAgICBtX2ppdC5hcmd1
bWVudHNSZWdpc3RlckZvcihub2RlLmNvZGVPcmlnaW4pLAorICAgICAgICAgICAgICAgICAgICBt
X2ppdC5hcmd1bWVudHNSZWdpc3RlckZvcihub2RlLT5jb2RlT3JpZ2luKSwKICAgICAgICAgICAg
ICAgICAgICAgaW5kZXhHUFIpKTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgc2xvd0Fy
Z3VtZW50LmxpbmsoJm1faml0KTsKLSAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRHUFIsIG1f
Y29tcGlsZUluZGV4KTsKKyAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRHUFIsIG5vZGUpOwog
ICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgQ2hlY2tBcmd1bWVudHNO
b3RDcmVhdGVkOiB7CiAgICAgICAgIEFTU0VSVCghaXNFbXB0eVNwZWN1bGF0aW9uKAogICAgICAg
ICAgICAgbV9zdGF0ZS52YXJpYWJsZXMoKS5vcGVyYW5kKAotICAgICAgICAgICAgICAgIG1faml0
LmdyYXBoKCkuYXJndW1lbnRzUmVnaXN0ZXJGb3Iobm9kZS5jb2RlT3JpZ2luKSkubV90eXBlKSk7
CisgICAgICAgICAgICAgICAgbV9qaXQuZ3JhcGgoKS5hcmd1bWVudHNSZWdpc3RlckZvcihub2Rl
LT5jb2RlT3JpZ2luKSkubV90eXBlKSk7CiAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCi0gICAg
ICAgICAgICBBcmd1bWVudHNFc2NhcGVkLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsCisgICAgICAg
ICAgICBBcmd1bWVudHNFc2NhcGVkLCBKU1ZhbHVlUmVncygpLCAwLAogICAgICAgICAgICAgbV9q
aXQuYnJhbmNoVGVzdDY0KAogICAgICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpOb25aZXJvLAog
ICAgICAgICAgICAgICAgIEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKAotICAgICAgICAgICAgICAg
ICAgICBtX2ppdC5hcmd1bWVudHNSZWdpc3RlckZvcihub2RlLmNvZGVPcmlnaW4pKSkpOwotICAg
ICAgICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCk7CisgICAgICAgICAgICAgICAgICAgIG1faml0
LmFyZ3VtZW50c1JlZ2lzdGVyRm9yKG5vZGUtPmNvZGVPcmlnaW4pKSkpOworICAgICAgICBub1Jl
c3VsdChub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKQEAgLTQ5NzYsNyAr
NDk2Nyw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIAogICAgIGNhc2UgTmV3RnVuY3Rpb246IHsKLSAgICAgICAgSlNW
YWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS5jaGlsZDEoKSk7CisgICAgICAgIEpTVmFsdWVP
cGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgR1BSVGVtcG9yYXJ5
IHJlc3VsdCh0aGlzLCB2YWx1ZSk7CiAgICAgICAgIAogICAgICAgICBHUFJSZWcgdmFsdWVHUFIg
PSB2YWx1ZS5ncHIoKTsKQEAgLTQ5ODksOSArNDk4MCw5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCiAgICAg
ICAgICAgICBzbG93UGF0aENhbGwoCiAgICAgICAgICAgICAgICAgbm90Q3JlYXRlZCwgdGhpcywg
b3BlcmF0aW9uTmV3RnVuY3Rpb24sCi0gICAgICAgICAgICAgICAgcmVzdWx0R1BSLCBtX2ppdC5j
b2RlQmxvY2soKS0+ZnVuY3Rpb25EZWNsKG5vZGUuZnVuY3Rpb25EZWNsSW5kZXgoKSkpKTsKKyAg
ICAgICAgICAgICAgICByZXN1bHRHUFIsIG1faml0LmNvZGVCbG9jaygpLT5mdW5jdGlvbkRlY2wo
bm9kZS0+ZnVuY3Rpb25EZWNsSW5kZXgoKSkpKTsKICAgICAgICAgCi0gICAgICAgIGNlbGxSZXN1
bHQocmVzdWx0R1BSLCBtX2NvbXBpbGVJbmRleCk7CisgICAgICAgIGNlbGxSZXN1bHQocmVzdWx0
R1BSLCBub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKQEAgLTUwMDAsNyAr
NDk5MSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIAogICAgIGNhc2UgQ291bnRFeGVjdXRpb246Ci0gICAgICAgIG1f
aml0LmFkZDY0KFRydXN0ZWRJbW0zMigxKSwgTWFjcm9Bc3NlbWJsZXI6OkFic29sdXRlQWRkcmVz
cyhub2RlLmV4ZWN1dGlvbkNvdW50ZXIoKS0+YWRkcmVzcygpKSk7CisgICAgICAgIG1faml0LmFk
ZDY0KFRydXN0ZWRJbW0zMigxKSwgTWFjcm9Bc3NlbWJsZXI6OkFic29sdXRlQWRkcmVzcyhub2Rl
LT5leGVjdXRpb25Db3VudGVyKCktPmFkZHJlc3MoKSkpOwogICAgICAgICBicmVhazsKIAogICAg
IGNhc2UgR2FyYmFnZVZhbHVlOgpAQCAtNTAwOSwxMyArNTAwMCwxMyBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBG
b3JjZU9TUkV4aXQ6IHsKLSAgICAgICAgdGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oSW5h
ZGVxdWF0ZUNvdmVyYWdlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUpOworICAgICAgICB0ZXJtaW5h
dGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihJbmFkZXF1YXRlQ292ZXJhZ2UsIEpTVmFsdWVSZWdzKCks
IDApOwogICAgICAgICBicmVhazsKICAgICB9CiAKICAgICBjYXNlIFBoYW50b206CiAgICAgICAg
IC8vIFRoaXMgaXMgYSBuby1vcC4KLSAgICAgICAgbm9SZXN1bHQobV9jb21waWxlSW5kZXgpOwor
ICAgICAgICBub1Jlc3VsdChub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgIAogICAgIGNh
c2UgSW5saW5lU3RhcnQ6CkBAIC01MDMxLDggKzUwMjIsOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQogICAgICAgICBy
ZXR1cm47CiAgICAgCi0gICAgaWYgKG5vZGUuaGFzUmVzdWx0KCkgJiYgbm9kZS5tdXN0R2VuZXJh
dGUoKSkKLSAgICAgICAgdXNlKG1fY29tcGlsZUluZGV4KTsKKyAgICBpZiAobm9kZS0+aGFzUmVz
dWx0KCkgJiYgbm9kZS0+bXVzdEdlbmVyYXRlKCkpCisgICAgICAgIHVzZShub2RlKTsKIH0KIAog
I2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklU
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0
aXZlSklULmNwcAkocmV2aXNpb24gMTQwOTA0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMiwgMjAxMyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQwLDcg
KzQwLDcgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogU3BlY3VsYXRpdmVKSVQ6
OlNwZWN1bGF0aXZlSklUKEpJVENvbXBpbGVyJiBqaXQpCiAgICAgOiBtX2NvbXBpbGVPa2F5KHRy
dWUpCiAgICAgLCBtX2ppdChqaXQpCi0gICAgLCBtX2NvbXBpbGVJbmRleCgwKQorICAgICwgbV9j
dXJyZW50Tm9kZSgwKQogICAgICwgbV9pbmRleEluQmxvY2soMCkKICAgICAsIG1fZ2VuZXJhdGlv
bkluZm8obV9qaXQuY29kZUJsb2NrKCktPm1fbnVtQ2FsbGVlUmVnaXN0ZXJzKQogICAgICwgbV9i
bG9ja0hlYWRzKGppdC5ncmFwaCgpLm1fYmxvY2tzLnNpemUoKSkKQEAgLTEwNiw4NiArMTA2LDg2
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRBbGxvY2F0ZUpTQXJyYXkKICAgICAgICAgICAg
IHN0cnVjdHVyZSwgbnVtRWxlbWVudHMpKSk7CiB9CiAKLXZvaWQgU3BlY3VsYXRpdmVKSVQ6OnNw
ZWN1bGF0aW9uQ2hlY2soRXhpdEtpbmQga2luZCwgSlNWYWx1ZVNvdXJjZSBqc1ZhbHVlU291cmNl
LCBOb2RlSW5kZXggbm9kZUluZGV4LCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBqdW1wVG9GYWlsKQor
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRpb25DaGVjayhFeGl0S2luZCBraW5kLCBKU1Zh
bHVlU291cmNlIGpzVmFsdWVTb3VyY2UsIE5vZGUqIG5vZGUsIE1hY3JvQXNzZW1ibGVyOjpKdW1w
IGp1bXBUb0ZhaWwpCiB7CiAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQogICAgICAgICByZXR1cm47
Ci0gICAgQVNTRVJUKGF0KG1fY29tcGlsZUluZGV4KS5jYW5FeGl0KCkgfHwgbV9pc0NoZWNraW5n
QXJndW1lbnRUeXBlcyk7CisgICAgQVNTRVJUKG5vZGUtPmNhbkV4aXQoKSB8fCBtX2lzQ2hlY2tp
bmdBcmd1bWVudFR5cGVzKTsKICAgICBtX2ppdC5hcHBlbmRFeGl0SW5mbyhqdW1wVG9GYWlsKTsK
LSAgICBtX2ppdC5jb2RlQmxvY2soKS0+YXBwZW5kT1NSRXhpdChPU1JFeGl0KGtpbmQsIGpzVmFs
dWVTb3VyY2UsIG1faml0LmdyYXBoKCkubWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZUZvcihu
b2RlSW5kZXgpLCB0aGlzLCBtX3N0cmVhbS0+c2l6ZSgpKSk7CisgICAgbV9qaXQuY29kZUJsb2Nr
KCktPmFwcGVuZE9TUkV4aXQoT1NSRXhpdChraW5kLCBqc1ZhbHVlU291cmNlLCBtX2ppdC5ncmFw
aCgpLm1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGVGb3Iobm9kZSksIHRoaXMsIG1fc3RyZWFt
LT5zaXplKCkpKTsKIH0KIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRpb25DaGVjayhF
eGl0S2luZCBraW5kLCBKU1ZhbHVlU291cmNlIGpzVmFsdWVTb3VyY2UsIEVkZ2Ugbm9kZVVzZSwg
TWFjcm9Bc3NlbWJsZXI6Okp1bXAganVtcFRvRmFpbCkKIHsKLSAgICBBU1NFUlQoYXQobV9jb21w
aWxlSW5kZXgpLmNhbkV4aXQoKSB8fCBtX2lzQ2hlY2tpbmdBcmd1bWVudFR5cGVzKTsKLSAgICBz
cGVjdWxhdGlvbkNoZWNrKGtpbmQsIGpzVmFsdWVTb3VyY2UsIG5vZGVVc2UuaW5kZXgoKSwganVt
cFRvRmFpbCk7CisgICAgQVNTRVJUKG1fY3VycmVudE5vZGUtPmNhbkV4aXQoKSB8fCBtX2lzQ2hl
Y2tpbmdBcmd1bWVudFR5cGVzKTsKKyAgICBzcGVjdWxhdGlvbkNoZWNrKGtpbmQsIGpzVmFsdWVT
b3VyY2UsIG5vZGVVc2Uubm9kZSgpLCBqdW1wVG9GYWlsKTsKIH0KIAotT1NSRXhpdEp1bXBQbGFj
ZWhvbGRlciBTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRpb25DaGVjayhFeGl0S2luZCBraW5kLCBK
U1ZhbHVlU291cmNlIGpzVmFsdWVTb3VyY2UsIE5vZGVJbmRleCBub2RlSW5kZXgpCitPU1JFeGl0
SnVtcFBsYWNlaG9sZGVyIFNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGlvbkNoZWNrKEV4aXRLaW5k
IGtpbmQsIEpTVmFsdWVTb3VyY2UganNWYWx1ZVNvdXJjZSwgTm9kZSogbm9kZSkKIHsKICAgICBp
ZiAoIW1fY29tcGlsZU9rYXkpCiAgICAgICAgIHJldHVybiBPU1JFeGl0SnVtcFBsYWNlaG9sZGVy
KCk7Ci0gICAgQVNTRVJUKGF0KG1fY29tcGlsZUluZGV4KS5jYW5FeGl0KCkgfHwgbV9pc0NoZWNr
aW5nQXJndW1lbnRUeXBlcyk7CisgICAgQVNTRVJUKG1fY3VycmVudE5vZGUtPmNhbkV4aXQoKSB8
fCBtX2lzQ2hlY2tpbmdBcmd1bWVudFR5cGVzKTsKICAgICB1bnNpZ25lZCBpbmRleCA9IG1faml0
LmNvZGVCbG9jaygpLT5udW1iZXJPZk9TUkV4aXRzKCk7CiAgICAgbV9qaXQuYXBwZW5kRXhpdElu
Zm8oKTsKLSAgICBtX2ppdC5jb2RlQmxvY2soKS0+YXBwZW5kT1NSRXhpdChPU1JFeGl0KGtpbmQs
IGpzVmFsdWVTb3VyY2UsIG1faml0LmdyYXBoKCkubWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmls
ZUZvcihub2RlSW5kZXgpLCB0aGlzLCBtX3N0cmVhbS0+c2l6ZSgpKSk7CisgICAgbV9qaXQuY29k
ZUJsb2NrKCktPmFwcGVuZE9TUkV4aXQoT1NSRXhpdChraW5kLCBqc1ZhbHVlU291cmNlLCBtX2pp
dC5ncmFwaCgpLm1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGVGb3Iobm9kZSksIHRoaXMsIG1f
c3RyZWFtLT5zaXplKCkpKTsKICAgICByZXR1cm4gT1NSRXhpdEp1bXBQbGFjZWhvbGRlcihpbmRl
eCk7CiB9CiAKIE9TUkV4aXRKdW1wUGxhY2Vob2xkZXIgU3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0
aW9uQ2hlY2soRXhpdEtpbmQga2luZCwgSlNWYWx1ZVNvdXJjZSBqc1ZhbHVlU291cmNlLCBFZGdl
IG5vZGVVc2UpCiB7Ci0gICAgQVNTRVJUKGF0KG1fY29tcGlsZUluZGV4KS5jYW5FeGl0KCkgfHwg
bV9pc0NoZWNraW5nQXJndW1lbnRUeXBlcyk7Ci0gICAgcmV0dXJuIHNwZWN1bGF0aW9uQ2hlY2so
a2luZCwganNWYWx1ZVNvdXJjZSwgbm9kZVVzZS5pbmRleCgpKTsKKyAgICBBU1NFUlQobV9jdXJy
ZW50Tm9kZS0+Y2FuRXhpdCgpIHx8IG1faXNDaGVja2luZ0FyZ3VtZW50VHlwZXMpOworICAgIHJl
dHVybiBzcGVjdWxhdGlvbkNoZWNrKGtpbmQsIGpzVmFsdWVTb3VyY2UsIG5vZGVVc2Uubm9kZSgp
KTsKIH0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRpb25DaGVjayhFeGl0S2luZCBr
aW5kLCBKU1ZhbHVlU291cmNlIGpzVmFsdWVTb3VyY2UsIE5vZGVJbmRleCBub2RlSW5kZXgsIGNv
bnN0IE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCYganVtcHNUb0ZhaWwpCit2b2lkIFNwZWN1bGF0
aXZlSklUOjpzcGVjdWxhdGlvbkNoZWNrKEV4aXRLaW5kIGtpbmQsIEpTVmFsdWVTb3VyY2UganNW
YWx1ZVNvdXJjZSwgTm9kZSogbm9kZSwgY29uc3QgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0JiBq
dW1wc1RvRmFpbCkKIHsKICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCiAgICAgICAgIHJldHVybjsK
LSAgICBBU1NFUlQoYXQobV9jb21waWxlSW5kZXgpLmNhbkV4aXQoKSB8fCBtX2lzQ2hlY2tpbmdB
cmd1bWVudFR5cGVzKTsKKyAgICBBU1NFUlQobV9jdXJyZW50Tm9kZS0+Y2FuRXhpdCgpIHx8IG1f
aXNDaGVja2luZ0FyZ3VtZW50VHlwZXMpOwogICAgIG1faml0LmFwcGVuZEV4aXRJbmZvKGp1bXBz
VG9GYWlsKTsKLSAgICBtX2ppdC5jb2RlQmxvY2soKS0+YXBwZW5kT1NSRXhpdChPU1JFeGl0KGtp
bmQsIGpzVmFsdWVTb3VyY2UsIG1faml0LmdyYXBoKCkubWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJv
ZmlsZUZvcihub2RlSW5kZXgpLCB0aGlzLCBtX3N0cmVhbS0+c2l6ZSgpKSk7CisgICAgbV9qaXQu
Y29kZUJsb2NrKCktPmFwcGVuZE9TUkV4aXQoT1NSRXhpdChraW5kLCBqc1ZhbHVlU291cmNlLCBt
X2ppdC5ncmFwaCgpLm1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGVGb3Iobm9kZSksIHRoaXMs
IG1fc3RyZWFtLT5zaXplKCkpKTsKIH0KIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRp
b25DaGVjayhFeGl0S2luZCBraW5kLCBKU1ZhbHVlU291cmNlIGpzVmFsdWVTb3VyY2UsIEVkZ2Ug
bm9kZVVzZSwgY29uc3QgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0JiBqdW1wc1RvRmFpbCkKIHsK
LSAgICBBU1NFUlQoYXQobV9jb21waWxlSW5kZXgpLmNhbkV4aXQoKSB8fCBtX2lzQ2hlY2tpbmdB
cmd1bWVudFR5cGVzKTsKLSAgICBzcGVjdWxhdGlvbkNoZWNrKGtpbmQsIGpzVmFsdWVTb3VyY2Us
IG5vZGVVc2UuaW5kZXgoKSwganVtcHNUb0ZhaWwpOworICAgIEFTU0VSVChtX2N1cnJlbnROb2Rl
LT5jYW5FeGl0KCkgfHwgbV9pc0NoZWNraW5nQXJndW1lbnRUeXBlcyk7CisgICAgc3BlY3VsYXRp
b25DaGVjayhraW5kLCBqc1ZhbHVlU291cmNlLCBub2RlVXNlLm5vZGUoKSwganVtcHNUb0ZhaWwp
OwogfQogCi12b2lkIFNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGlvbkNoZWNrKEV4aXRLaW5kIGtp
bmQsIEpTVmFsdWVTb3VyY2UganNWYWx1ZVNvdXJjZSwgTm9kZUluZGV4IG5vZGVJbmRleCwgTWFj
cm9Bc3NlbWJsZXI6Okp1bXAganVtcFRvRmFpbCwgY29uc3QgU3BlY3VsYXRpb25SZWNvdmVyeSYg
cmVjb3ZlcnkpCit2b2lkIFNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGlvbkNoZWNrKEV4aXRLaW5k
IGtpbmQsIEpTVmFsdWVTb3VyY2UganNWYWx1ZVNvdXJjZSwgTm9kZSogbm9kZSwgTWFjcm9Bc3Nl
bWJsZXI6Okp1bXAganVtcFRvRmFpbCwgY29uc3QgU3BlY3VsYXRpb25SZWNvdmVyeSYgcmVjb3Zl
cnkpCiB7CiAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQogICAgICAgICByZXR1cm47Ci0gICAgQVNT
RVJUKGF0KG1fY29tcGlsZUluZGV4KS5jYW5FeGl0KCkgfHwgbV9pc0NoZWNraW5nQXJndW1lbnRU
eXBlcyk7CisgICAgQVNTRVJUKG1fY3VycmVudE5vZGUtPmNhbkV4aXQoKSB8fCBtX2lzQ2hlY2tp
bmdBcmd1bWVudFR5cGVzKTsKICAgICBtX2ppdC5jb2RlQmxvY2soKS0+YXBwZW5kU3BlY3VsYXRp
b25SZWNvdmVyeShyZWNvdmVyeSk7CiAgICAgbV9qaXQuYXBwZW5kRXhpdEluZm8oanVtcFRvRmFp
bCk7Ci0gICAgbV9qaXQuY29kZUJsb2NrKCktPmFwcGVuZE9TUkV4aXQoT1NSRXhpdChraW5kLCBq
c1ZhbHVlU291cmNlLCBtX2ppdC5ncmFwaCgpLm1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGVG
b3Iobm9kZUluZGV4KSwgdGhpcywgbV9zdHJlYW0tPnNpemUoKSwgbV9qaXQuY29kZUJsb2NrKCkt
Pm51bWJlck9mU3BlY3VsYXRpb25SZWNvdmVyaWVzKCkpKTsKKyAgICBtX2ppdC5jb2RlQmxvY2so
KS0+YXBwZW5kT1NSRXhpdChPU1JFeGl0KGtpbmQsIGpzVmFsdWVTb3VyY2UsIG1faml0LmdyYXBo
KCkubWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZUZvcihub2RlKSwgdGhpcywgbV9zdHJlYW0t
PnNpemUoKSwgbV9qaXQuY29kZUJsb2NrKCktPm51bWJlck9mU3BlY3VsYXRpb25SZWNvdmVyaWVz
KCkpKTsKIH0KIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRpb25DaGVjayhFeGl0S2lu
ZCBraW5kLCBKU1ZhbHVlU291cmNlIGpzVmFsdWVTb3VyY2UsIEVkZ2Ugbm9kZVVzZSwgTWFjcm9B
c3NlbWJsZXI6Okp1bXAganVtcFRvRmFpbCwgY29uc3QgU3BlY3VsYXRpb25SZWNvdmVyeSYgcmVj
b3ZlcnkpCiB7Ci0gICAgQVNTRVJUKGF0KG1fY29tcGlsZUluZGV4KS5jYW5FeGl0KCkgfHwgbV9p
c0NoZWNraW5nQXJndW1lbnRUeXBlcyk7Ci0gICAgc3BlY3VsYXRpb25DaGVjayhraW5kLCBqc1Zh
bHVlU291cmNlLCBub2RlVXNlLmluZGV4KCksIGp1bXBUb0ZhaWwsIHJlY292ZXJ5KTsKKyAgICBB
U1NFUlQobV9jdXJyZW50Tm9kZS0+Y2FuRXhpdCgpIHx8IG1faXNDaGVja2luZ0FyZ3VtZW50VHlw
ZXMpOworICAgIHNwZWN1bGF0aW9uQ2hlY2soa2luZCwganNWYWx1ZVNvdXJjZSwgbm9kZVVzZS5u
b2RlKCksIGp1bXBUb0ZhaWwsIHJlY292ZXJ5KTsKIH0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
c3BlY3VsYXRpb25DaGVjayhFeGl0S2luZCBraW5kLCBKU1ZhbHVlU291cmNlIGpzVmFsdWVTb3Vy
Y2UsIE5vZGVJbmRleCBub2RlSW5kZXgsIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGp1bXBUb0ZhaWws
IGNvbnN0IFNwZWN1bGF0aW9uUmVjb3ZlcnkmIHJlY292ZXJ5LCBTcGVjdWxhdGlvbkRpcmVjdGlv
biBkaXJlY3Rpb24pCit2b2lkIFNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGlvbkNoZWNrKEV4aXRL
aW5kIGtpbmQsIEpTVmFsdWVTb3VyY2UganNWYWx1ZVNvdXJjZSwgTm9kZUluZGV4IE5vZGUqIG5v
ZGUsIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGp1bXBUb0ZhaWwsIGNvbnN0IFNwZWN1bGF0aW9uUmVj
b3ZlcnkmIHJlY292ZXJ5LCBTcGVjdWxhdGlvbkRpcmVjdGlvbiBkaXJlY3Rpb24pCiB7Ci0gICAg
c3BlY3VsYXRpb25DaGVjayhraW5kLCBqc1ZhbHVlU291cmNlLCBub2RlSW5kZXgsIGp1bXBUb0Zh
aWwsIHJlY292ZXJ5KTsKKyAgICBzcGVjdWxhdGlvbkNoZWNrKGtpbmQsIGpzVmFsdWVTb3VyY2Us
IG5vZGUsIGp1bXBUb0ZhaWwsIHJlY292ZXJ5KTsKICAgICBpZiAoZGlyZWN0aW9uID09IEZvcndh
cmRTcGVjdWxhdGlvbikKICAgICAgICAgY29udmVydExhc3RPU1JFeGl0VG9Gb3J3YXJkKCk7CiB9
CiAKLUp1bXBSZXBsYWNlbWVudFdhdGNocG9pbnQqIFNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGlv
bldhdGNocG9pbnQoRXhpdEtpbmQga2luZCwgSlNWYWx1ZVNvdXJjZSBqc1ZhbHVlU291cmNlLCBO
b2RlSW5kZXggbm9kZUluZGV4KQorSnVtcFJlcGxhY2VtZW50V2F0Y2hwb2ludCogU3BlY3VsYXRp
dmVKSVQ6OnNwZWN1bGF0aW9uV2F0Y2hwb2ludChFeGl0S2luZCBraW5kLCBKU1ZhbHVlU291cmNl
IGpzVmFsdWVTb3VyY2UsIE5vZGUqIG5vZGUpCiB7CiAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQog
ICAgICAgICByZXR1cm4gMDsKLSAgICBBU1NFUlQoYXQobV9jb21waWxlSW5kZXgpLmNhbkV4aXQo
KSB8fCBtX2lzQ2hlY2tpbmdBcmd1bWVudFR5cGVzKTsKKyAgICBBU1NFUlQobV9jdXJyZW50Tm9k
ZS0+Y2FuRXhpdCgpIHx8IG1faXNDaGVja2luZ0FyZ3VtZW50VHlwZXMpOwogICAgIG1faml0LmFw
cGVuZEV4aXRJbmZvKEpJVENvbXBpbGVyOjpKdW1wTGlzdCgpKTsKICAgICBPU1JFeGl0JiBleGl0
ID0gbV9qaXQuY29kZUJsb2NrKCktPm9zckV4aXQoCiAgICAgICAgIG1faml0LmNvZGVCbG9jaygp
LT5hcHBlbmRPU1JFeGl0KAogICAgICAgICAgICAgT1NSRXhpdChraW5kLCBqc1ZhbHVlU291cmNl
LAotICAgICAgICAgICAgICAgICAgICBtX2ppdC5ncmFwaCgpLm1ldGhvZE9mR2V0dGluZ0FWYWx1
ZVByb2ZpbGVGb3Iobm9kZUluZGV4KSwKKyAgICAgICAgICAgICAgICAgICAgbV9qaXQuZ3JhcGgo
KS5tZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlRm9yKG5vZGUpLAogICAgICAgICAgICAgICAg
ICAgICB0aGlzLCBtX3N0cmVhbS0+c2l6ZSgpKSkpOwogICAgIGV4aXQubV93YXRjaHBvaW50SW5k
ZXggPSBtX2ppdC5jb2RlQmxvY2soKS0+YXBwZW5kV2F0Y2hwb2ludCgKICAgICAgICAgSnVtcFJl
cGxhY2VtZW50V2F0Y2hwb2ludChtX2ppdC53YXRjaHBvaW50TGFiZWwoKSkpOwpAQCAtMTk0LDcg
KzE5NCw3IEBAIEp1bXBSZXBsYWNlbWVudFdhdGNocG9pbnQqIFNwZWN1bGF0aXZlSkkKIAogSnVt
cFJlcGxhY2VtZW50V2F0Y2hwb2ludCogU3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0aW9uV2F0Y2hw
b2ludChFeGl0S2luZCBraW5kKQogewotICAgIHJldHVybiBzcGVjdWxhdGlvbldhdGNocG9pbnQo
a2luZCwgSlNWYWx1ZVNvdXJjZSgpLCBOb05vZGUpOworICAgIHJldHVybiBzcGVjdWxhdGlvbldh
dGNocG9pbnQoa2luZCwgSlNWYWx1ZVNvdXJjZSgpLCAwKTsKIH0KIAogdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29udmVydExhc3RPU1JFeGl0VG9Gb3J3YXJkKGNvbnN0IFZhbHVlUmVjb3ZlcnkmIHZh
bHVlUmVjb3ZlcnkpCkBAIC0yMDIsMTAgKzIwMiwxMCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b252ZXJ0TGFzdE9TUkV4aXRUCiAgICAgaWYgKCF2YWx1ZVJlY292ZXJ5KSB7CiAgICAgICAgIC8v
IENoZWNrIHRoYXQgZWl0aGVyIHRoZSBjdXJyZW50IG5vZGUgaXMgYSBTZXRMb2NhbCwgb3IgdGhl
IHByZWNlZGluZyBub2RlIHdhcyBhCiAgICAgICAgIC8vIFNldExvY2FsIHdpdGggdGhlIHNhbWUg
Y29kZSBvcmlnaW4uCi0gICAgICAgIGlmIChhdChtX2NvbXBpbGVJbmRleCkub3AoKSAhPSBTZXRM
b2NhbCkgewotICAgICAgICAgICAgTm9kZSogc2V0TG9jYWwgPSAmYXQobV9qaXQuZ3JhcGgoKS5t
X2Jsb2Nrc1ttX2Jsb2NrXS0+YXQobV9pbmRleEluQmxvY2sgLSAxKSk7CisgICAgICAgIGlmICht
X2N1cnJlbnROb2RlLT5vcCgpICE9IFNldExvY2FsKSB7CisgICAgICAgICAgICBOb2RlKiBzZXRM
b2NhbCA9IG1faml0LmdyYXBoKCkubV9ibG9ja3NbbV9ibG9ja10tPmF0KG1faW5kZXhJbkJsb2Nr
IC0gMSk7CiAgICAgICAgICAgICBBU1NFUlRfVU5VU0VEKHNldExvY2FsLCBzZXRMb2NhbC0+b3Ao
KSA9PSBTZXRMb2NhbCk7Ci0gICAgICAgICAgICBBU1NFUlRfVU5VU0VEKHNldExvY2FsLCBzZXRM
b2NhbC0+Y29kZU9yaWdpbiA9PSBhdChtX2NvbXBpbGVJbmRleCkuY29kZU9yaWdpbik7CisgICAg
ICAgICAgICBBU1NFUlRfVU5VU0VEKHNldExvY2FsLCBzZXRMb2NhbC0+Y29kZU9yaWdpbiA9PSBt
X2N1cnJlbnROb2RlLT5jb2RlT3JpZ2luKTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAg
Ly8gRmluZCB0aGUgbmV4dCBub2RlLgpAQCAtMjE5LDEzICsyMTksMTMgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29udmVydExhc3RPU1JFeGl0VAogICAgICAgICAgICAgICAgIEFTU0VSVChub2Rl
LT5vcCgpID09IEp1bXApOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIG5vZGUgPSAmYXQobV9qaXQuZ3JhcGgoKS5tX2Jsb2Nrc1ttX2Jsb2NrXS0+
YXQoaW5kZXhJbkJsb2NrKSk7Ci0gICAgICAgICAgICBpZiAobm9kZS0+Y29kZU9yaWdpbiAhPSBh
dChtX2NvbXBpbGVJbmRleCkuY29kZU9yaWdpbikKKyAgICAgICAgICAgIG5vZGUgPSBtX2ppdC5n
cmFwaCgpLm1fYmxvY2tzW21fYmxvY2tdLT5hdChpbmRleEluQmxvY2spOworICAgICAgICAgICAg
aWYgKG5vZGUtPmNvZGVPcmlnaW4gIT0gbV9jdXJyZW50Tm9kZS0+Y29kZU9yaWdpbikKICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGluZGV4SW5CbG9jaysrOwogICAgICAgICB9
CiAgICAgICAgIAotICAgICAgICBBU1NFUlQobm9kZS0+Y29kZU9yaWdpbiAhPSBhdChtX2NvbXBp
bGVJbmRleCkuY29kZU9yaWdpbik7CisgICAgICAgIEFTU0VSVChub2RlLT5jb2RlT3JpZ2luICE9
IG1fY3VycmVudE5vZGUtPmNvZGVPcmlnaW4pOwogICAgICAgICBPU1JFeGl0JiBleGl0ID0gbV9q
aXQuY29kZUJsb2NrKCktPmxhc3RPU1JFeGl0KCk7CiAgICAgICAgIGV4aXQubV9jb2RlT3JpZ2lu
ID0gbm9kZS0+Y29kZU9yaWdpbjsKICAgICAgICAgcmV0dXJuOwpAQCAtMjMzLDI5ICsyMzMsMjkg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29udmVydExhc3RPU1JFeGl0VAogICAgIAogICAgIHVu
c2lnbmVkIHNldExvY2FsSW5kZXhJbkJsb2NrID0gbV9pbmRleEluQmxvY2sgKyAxOwogICAgIAot
ICAgIE5vZGUqIHNldExvY2FsID0gJmF0KG1faml0LmdyYXBoKCkubV9ibG9ja3NbbV9ibG9ja10t
PmF0KHNldExvY2FsSW5kZXhJbkJsb2NrKSk7CisgICAgTm9kZSogc2V0TG9jYWwgPSBtX2ppdC5n
cmFwaCgpLm1fYmxvY2tzW21fYmxvY2tdLT5hdChzZXRMb2NhbEluZGV4SW5CbG9jayk7CiAgICAg
Ym9vbCBoYWRJbnQzMlRvRG91YmxlID0gZmFsc2U7CiAgICAgCiAgICAgaWYgKHNldExvY2FsLT5v
cCgpID09IEludDMyVG9Eb3VibGUpIHsKLSAgICAgICAgc2V0TG9jYWwgPSAmYXQobV9qaXQuZ3Jh
cGgoKS5tX2Jsb2Nrc1ttX2Jsb2NrXS0+YXQoKytzZXRMb2NhbEluZGV4SW5CbG9jaykpOworICAg
ICAgICBzZXRMb2NhbCA9IG1faml0LmdyYXBoKCkubV9ibG9ja3NbbV9ibG9ja10tPmF0KCsrc2V0
TG9jYWxJbmRleEluQmxvY2spOwogICAgICAgICBoYWRJbnQzMlRvRG91YmxlID0gdHJ1ZTsKICAg
ICB9CiAgICAgaWYgKHNldExvY2FsLT5vcCgpID09IEZsdXNoIHx8IHNldExvY2FsLT5vcCgpID09
IFBoYW50b20pCi0gICAgICAgIHNldExvY2FsID0gJmF0KG1faml0LmdyYXBoKCkubV9ibG9ja3Nb
bV9ibG9ja10tPmF0KCsrc2V0TG9jYWxJbmRleEluQmxvY2spKTsKKyAgICAgICAgc2V0TG9jYWwg
PSBtX2ppdC5ncmFwaCgpLm1fYmxvY2tzW21fYmxvY2tdLT5hdCgrK3NldExvY2FsSW5kZXhJbkJs
b2NrKTsKICAgICAgICAgCiAgICAgaWYgKGhhZEludDMyVG9Eb3VibGUpCi0gICAgICAgIEFTU0VS
VChhdChzZXRMb2NhbC0+Y2hpbGQxKCkpLmNoaWxkMSgpID09IG1fY29tcGlsZUluZGV4KTsKKyAg
ICAgICAgQVNTRVJUKHNldExvY2FsLT5jaGlsZDEoKS0+Y2hpbGQxKCkgPT0gbV9jb21waWxlTm9k
ZSk7CiAgICAgZWxzZQotICAgICAgICBBU1NFUlQoc2V0TG9jYWwtPmNoaWxkMSgpID09IG1fY29t
cGlsZUluZGV4KTsKKyAgICAgICAgQVNTRVJUKHNldExvY2FsLT5jaGlsZDEoKSA9PSBtX2NvbXBp
bGVOb2RlKTsKICAgICBBU1NFUlQoc2V0TG9jYWwtPm9wKCkgPT0gU2V0TG9jYWwpOwotICAgIEFT
U0VSVChzZXRMb2NhbC0+Y29kZU9yaWdpbiA9PSBhdChtX2NvbXBpbGVJbmRleCkuY29kZU9yaWdp
bik7CisgICAgQVNTRVJUKHNldExvY2FsLT5jb2RlT3JpZ2luID09IG1fY3VycmVudE5vZGUtPmNv
ZGVPcmlnaW4pOwogCi0gICAgTm9kZSogbmV4dE5vZGUgPSAmYXQobV9qaXQuZ3JhcGgoKS5tX2Js
b2Nrc1ttX2Jsb2NrXS0+YXQoc2V0TG9jYWxJbmRleEluQmxvY2sgKyAxKSk7Ci0gICAgaWYgKG5l
eHROb2RlLT5vcCgpID09IEp1bXAgJiYgbmV4dE5vZGUtPmNvZGVPcmlnaW4gPT0gYXQobV9jb21w
aWxlSW5kZXgpLmNvZGVPcmlnaW4pIHsKKyAgICBOb2RlKiBuZXh0Tm9kZSA9IG1faml0LmdyYXBo
KCkubV9ibG9ja3NbbV9ibG9ja10tPmF0KHNldExvY2FsSW5kZXhJbkJsb2NrICsgMSk7CisgICAg
aWYgKG5leHROb2RlLT5vcCgpID09IEp1bXAgJiYgbmV4dE5vZGUtPmNvZGVPcmlnaW4gPT0gbV9j
dXJyZW50Tm9kZS0+Y29kZU9yaWdpbikgewogICAgICAgICAvLyBXZSdyZSBhdCBhbiBpbmxpbmVk
IHJldHVybi4gVXNlIGEgYmFja3dhcmQgc3BlY3VsYXRpb24gaW5zdGVhZC4KICAgICAgICAgcmV0
dXJuOwogICAgIH0KLSAgICBBU1NFUlQobmV4dE5vZGUtPmNvZGVPcmlnaW4gIT0gYXQobV9jb21w
aWxlSW5kZXgpLmNvZGVPcmlnaW4pOworICAgIEFTU0VSVChuZXh0Tm9kZS0+Y29kZU9yaWdpbiAh
PSBtX2N1cnJlbnROb2RlLT5jb2RlT3JpZ2luKTsKICAgICAgICAgCiAgICAgT1NSRXhpdCYgZXhp
dCA9IG1faml0LmNvZGVCbG9jaygpLT5sYXN0T1NSRXhpdCgpOwogICAgIGV4aXQubV9jb2RlT3Jp
Z2luID0gbmV4dE5vZGUtPmNvZGVPcmlnaW47CkBAIC0yODAsNTUgKzI4MCw1NSBAQCBKdW1wUmVw
bGFjZW1lbnRXYXRjaHBvaW50KiBTcGVjdWxhdGl2ZUpJCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0K
IAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Zm9yd2FyZFNwZWN1bGF0aW9uQ2hlY2soRXhpdEtpbmQg
a2luZCwgSlNWYWx1ZVNvdXJjZSBqc1ZhbHVlU291cmNlLCBOb2RlSW5kZXggbm9kZUluZGV4LCBN
YWNyb0Fzc2VtYmxlcjo6SnVtcCBqdW1wVG9GYWlsLCBjb25zdCBWYWx1ZVJlY292ZXJ5JiB2YWx1
ZVJlY292ZXJ5KQordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Zm9yd2FyZFNwZWN1bGF0aW9uQ2hlY2so
RXhpdEtpbmQga2luZCwgSlNWYWx1ZVNvdXJjZSBqc1ZhbHVlU291cmNlLCBOb2RlKiBub2RlLCBN
YWNyb0Fzc2VtYmxlcjo6SnVtcCBqdW1wVG9GYWlsLCBjb25zdCBWYWx1ZVJlY292ZXJ5JiB2YWx1
ZVJlY292ZXJ5KQogewotICAgIEFTU0VSVChhdChtX2NvbXBpbGVJbmRleCkuY2FuRXhpdCgpIHx8
IG1faXNDaGVja2luZ0FyZ3VtZW50VHlwZXMpOwotICAgIHNwZWN1bGF0aW9uQ2hlY2soa2luZCwg
anNWYWx1ZVNvdXJjZSwgbm9kZUluZGV4LCBqdW1wVG9GYWlsKTsKKyAgICBBU1NFUlQobV9jdXJy
ZW50Tm9kZS0+Y2FuRXhpdCgpIHx8IG1faXNDaGVja2luZ0FyZ3VtZW50VHlwZXMpOworICAgIHNw
ZWN1bGF0aW9uQ2hlY2soa2luZCwganNWYWx1ZVNvdXJjZSwgbm9kZSwganVtcFRvRmFpbCk7CiAg
ICAgY29udmVydExhc3RPU1JFeGl0VG9Gb3J3YXJkKHZhbHVlUmVjb3ZlcnkpOwogfQogCi12b2lk
IFNwZWN1bGF0aXZlSklUOjpmb3J3YXJkU3BlY3VsYXRpb25DaGVjayhFeGl0S2luZCBraW5kLCBK
U1ZhbHVlU291cmNlIGpzVmFsdWVTb3VyY2UsIE5vZGVJbmRleCBub2RlSW5kZXgsIGNvbnN0IE1h
Y3JvQXNzZW1ibGVyOjpKdW1wTGlzdCYganVtcHNUb0ZhaWwsIGNvbnN0IFZhbHVlUmVjb3Zlcnkm
IHZhbHVlUmVjb3ZlcnkpCit2b2lkIFNwZWN1bGF0aXZlSklUOjpmb3J3YXJkU3BlY3VsYXRpb25D
aGVjayhFeGl0S2luZCBraW5kLCBKU1ZhbHVlU291cmNlIGpzVmFsdWVTb3VyY2UsIE5vZGUqIG5v
ZGUsIGNvbnN0IE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCYganVtcHNUb0ZhaWwsIGNvbnN0IFZh
bHVlUmVjb3ZlcnkmIHZhbHVlUmVjb3ZlcnkpCiB7Ci0gICAgQVNTRVJUKGF0KG1fY29tcGlsZUlu
ZGV4KS5jYW5FeGl0KCkgfHwgbV9pc0NoZWNraW5nQXJndW1lbnRUeXBlcyk7Ci0gICAgc3BlY3Vs
YXRpb25DaGVjayhraW5kLCBqc1ZhbHVlU291cmNlLCBub2RlSW5kZXgsIGp1bXBzVG9GYWlsKTsK
KyAgICBBU1NFUlQobV9jdXJyZW50Tm9kZS0+Y2FuRXhpdCgpIHx8IG1faXNDaGVja2luZ0FyZ3Vt
ZW50VHlwZXMpOworICAgIHNwZWN1bGF0aW9uQ2hlY2soa2luZCwganNWYWx1ZVNvdXJjZSwgbm9k
ZSwganVtcHNUb0ZhaWwpOwogICAgIGNvbnZlcnRMYXN0T1NSRXhpdFRvRm9yd2FyZCh2YWx1ZVJl
Y292ZXJ5KTsKIH0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRpb25DaGVjayhFeGl0
S2luZCBraW5kLCBKU1ZhbHVlU291cmNlIGpzVmFsdWVTb3VyY2UsIE5vZGVJbmRleCBub2RlSW5k
ZXgsIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGp1bXBUb0ZhaWwsIFNwZWN1bGF0aW9uRGlyZWN0aW9u
IGRpcmVjdGlvbikKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0aW9uQ2hlY2soRXhpdEtp
bmQga2luZCwgSlNWYWx1ZVNvdXJjZSBqc1ZhbHVlU291cmNlLCBOb2RlKiBub2RlLCBNYWNyb0Fz
c2VtYmxlcjo6SnVtcCBqdW1wVG9GYWlsLCBTcGVjdWxhdGlvbkRpcmVjdGlvbiBkaXJlY3Rpb24p
CiB7CiAgICAgaWYgKGRpcmVjdGlvbiA9PSBGb3J3YXJkU3BlY3VsYXRpb24pCi0gICAgICAgIGZv
cndhcmRTcGVjdWxhdGlvbkNoZWNrKGtpbmQsIGpzVmFsdWVTb3VyY2UsIG5vZGVJbmRleCwganVt
cFRvRmFpbCk7CisgICAgICAgIGZvcndhcmRTcGVjdWxhdGlvbkNoZWNrKGtpbmQsIGpzVmFsdWVT
b3VyY2UsIG5vZGUsIGp1bXBUb0ZhaWwpOwogICAgIGVsc2UKLSAgICAgICAgc3BlY3VsYXRpb25D
aGVjayhraW5kLCBqc1ZhbHVlU291cmNlLCBub2RlSW5kZXgsIGp1bXBUb0ZhaWwpOworICAgICAg
ICBzcGVjdWxhdGlvbkNoZWNrKGtpbmQsIGpzVmFsdWVTb3VyY2UsIG5vZGUsIGp1bXBUb0ZhaWwp
OwogfQogCi12b2lkIFNwZWN1bGF0aXZlSklUOjp0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlv
bihFeGl0S2luZCBraW5kLCBKU1ZhbHVlUmVncyBqc1ZhbHVlUmVncywgTm9kZUluZGV4IG5vZGVJ
bmRleCkKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OnRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9u
KEV4aXRLaW5kIGtpbmQsIEpTVmFsdWVSZWdzIGpzVmFsdWVSZWdzLCBOb2RlKiBub2RlKQogewot
ICAgIEFTU0VSVChhdChtX2NvbXBpbGVJbmRleCkuY2FuRXhpdCgpIHx8IG1faXNDaGVja2luZ0Fy
Z3VtZW50VHlwZXMpOworICAgIEFTU0VSVChtX2N1cnJlbnROb2RlLT5jYW5FeGl0KCkgfHwgbV9p
c0NoZWNraW5nQXJndW1lbnRUeXBlcyk7CiAjaWYgREZHX0VOQUJMRShERUJVR19WRVJCT1NFKQog
ICAgIGRhdGFMb2dGKCJTcGVjdWxhdGl2ZUpJVCB3YXMgdGVybWluYXRlZC5cbiIpOwogI2VuZGlm
CiAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQogICAgICAgICByZXR1cm47Ci0gICAgc3BlY3VsYXRp
b25DaGVjayhraW5kLCBqc1ZhbHVlUmVncywgbm9kZUluZGV4LCBtX2ppdC5qdW1wKCkpOworICAg
IHNwZWN1bGF0aW9uQ2hlY2soa2luZCwganNWYWx1ZVJlZ3MsIG5vZGUsIG1faml0Lmp1bXAoKSk7
CiAgICAgbV9jb21waWxlT2theSA9IGZhbHNlOwogfQogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjp0
ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihFeGl0S2luZCBraW5kLCBKU1ZhbHVlUmVncyBq
c1ZhbHVlUmVncywgRWRnZSBub2RlVXNlKQogewotICAgIEFTU0VSVChhdChtX2NvbXBpbGVJbmRl
eCkuY2FuRXhpdCgpIHx8IG1faXNDaGVja2luZ0FyZ3VtZW50VHlwZXMpOwotICAgIHRlcm1pbmF0
ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKGtpbmQsIGpzVmFsdWVSZWdzLCBub2RlVXNlLmluZGV4KCkp
OworICAgIEFTU0VSVChtX2N1cnJlbnROb2RlLT5jYW5FeGl0KCkgfHwgbV9pc0NoZWNraW5nQXJn
dW1lbnRUeXBlcyk7CisgICAgdGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oa2luZCwganNW
YWx1ZVJlZ3MsIG5vZGVVc2Uubm9kZSgpKTsKIH0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6dGVy
bWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oRXhpdEtpbmQga2luZCwgSlNWYWx1ZVJlZ3MganNW
YWx1ZVJlZ3MsIE5vZGVJbmRleCBub2RlSW5kZXgsIFNwZWN1bGF0aW9uRGlyZWN0aW9uIGRpcmVj
dGlvbikKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OnRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9u
KEV4aXRLaW5kIGtpbmQsIEpTVmFsdWVSZWdzIGpzVmFsdWVSZWdzLCBOb2RlKiBub2RlLCBTcGVj
dWxhdGlvbkRpcmVjdGlvbiBkaXJlY3Rpb24pCiB7Ci0gICAgQVNTRVJUKGF0KG1fY29tcGlsZUlu
ZGV4KS5jYW5FeGl0KCkgfHwgbV9pc0NoZWNraW5nQXJndW1lbnRUeXBlcyk7CisgICAgQVNTRVJU
KG1fY3VycmVudE5vZGUtPmNhbkV4aXQoKSB8fCBtX2lzQ2hlY2tpbmdBcmd1bWVudFR5cGVzKTsK
ICNpZiBERkdfRU5BQkxFKERFQlVHX1ZFUkJPU0UpCiAgICAgZGF0YUxvZ0YoIlNwZWN1bGF0aXZl
SklUIHdhcyB0ZXJtaW5hdGVkLlxuIik7CiAjZW5kaWYKICAgICBpZiAoIW1fY29tcGlsZU9rYXkp
CiAgICAgICAgIHJldHVybjsKLSAgICBzcGVjdWxhdGlvbkNoZWNrKGtpbmQsIGpzVmFsdWVSZWdz
LCBub2RlSW5kZXgsIG1faml0Lmp1bXAoKSwgZGlyZWN0aW9uKTsKKyAgICBzcGVjdWxhdGlvbkNo
ZWNrKGtpbmQsIGpzVmFsdWVSZWdzLCBub2RlLCBtX2ppdC5qdW1wKCksIGRpcmVjdGlvbik7CiAg
ICAgbV9jb21waWxlT2theSA9IGZhbHNlOwogfQogCkBAIC0zNjgsOCArMzY4LDcgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y2xlYXJHZW5lcmF0aW9uSW5mbwogU2lsZW50UmVnaXN0ZXJTYXZlUGxh
biBTcGVjdWxhdGl2ZUpJVDo6c2lsZW50U2F2ZVBsYW5Gb3JHUFIoVmlydHVhbFJlZ2lzdGVyIHNw
aWxsTWUsIEdQUlJlZyBzb3VyY2UpCiB7CiAgICAgR2VuZXJhdGlvbkluZm8mIGluZm8gPSBtX2dl
bmVyYXRpb25JbmZvW3NwaWxsTWVdOwotICAgIE5vZGVJbmRleCBub2RlSW5kZXggPSBpbmZvLm5v
ZGVJbmRleCgpOwotICAgIE5vZGUmIG5vZGUgPSBhdChub2RlSW5kZXgpOworICAgIE5vZGUqIG5v
ZGUgPSBpbmZvLm5vZGUoKTsKICAgICBEYXRhRm9ybWF0IHJlZ2lzdGVyRm9ybWF0ID0gaW5mby5y
ZWdpc3RlckZvcm1hdCgpOwogICAgIEFTU0VSVChyZWdpc3RlckZvcm1hdCAhPSBEYXRhRm9ybWF0
Tm9uZSk7CiAgICAgQVNTRVJUKHJlZ2lzdGVyRm9ybWF0ICE9IERhdGFGb3JtYXREb3VibGUpOwpA
QCAtNDA0LDggKzQwMyw4IEBAIFNpbGVudFJlZ2lzdGVyU2F2ZVBsYW4gU3BlY3VsYXRpdmVKSVQ6
OnMKICAgICBpZiAocmVnaXN0ZXJGb3JtYXQgPT0gRGF0YUZvcm1hdEludGVnZXIpIHsKICAgICAg
ICAgQVNTRVJUKGluZm8uZ3ByKCkgPT0gc291cmNlKTsKICAgICAgICAgQVNTRVJUKGlzSlNJbnRl
Z2VyKGluZm8ucmVnaXN0ZXJGb3JtYXQoKSkpOwotICAgICAgICBpZiAobm9kZS5oYXNDb25zdGFu
dCgpKSB7Ci0gICAgICAgICAgICBBU1NFUlQoaXNJbnQzMkNvbnN0YW50KG5vZGVJbmRleCkpOwor
ICAgICAgICBpZiAobm9kZS0+aGFzQ29uc3RhbnQoKSkgeworICAgICAgICAgICAgQVNTRVJUKGlz
SW50MzJDb25zdGFudChub2RlKSk7CiAgICAgICAgICAgICBmaWxsQWN0aW9uID0gU2V0SW50MzJD
b25zdGFudDsKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICBmaWxsQWN0aW9uID0gTG9hZDMy
UGF5bG9hZDsKQEAgLTQxNSwxNiArNDE0LDE2IEBAIFNpbGVudFJlZ2lzdGVyU2F2ZVBsYW4gU3Bl
Y3VsYXRpdmVKSVQ6OnMKICAgICAgICAgZmlsbEFjdGlvbiA9IERvTm90aGluZ0ZvckZpbGw7CiAj
ZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQogICAgICAgICBBU1NFUlQoaW5mby5ncHIoKSA9PSBzb3Vy
Y2UpOwotICAgICAgICBpZiAobm9kZS5oYXNDb25zdGFudCgpKSB7Ci0gICAgICAgICAgICBBU1NF
UlQoaXNCb29sZWFuQ29uc3RhbnQobm9kZUluZGV4KSk7CisgICAgICAgIGlmIChub2RlLT5oYXND
b25zdGFudCgpKSB7CisgICAgICAgICAgICBBU1NFUlQoaXNCb29sZWFuQ29uc3RhbnQobm9kZSkp
OwogICAgICAgICAgICAgZmlsbEFjdGlvbiA9IFNldEJvb2xlYW5Db25zdGFudDsKICAgICAgICAg
fSBlbHNlCiAgICAgICAgICAgICBmaWxsQWN0aW9uID0gTG9hZDMyUGF5bG9hZDsKICNlbmRpZgog
ICAgIH0gZWxzZSBpZiAocmVnaXN0ZXJGb3JtYXQgPT0gRGF0YUZvcm1hdENlbGwpIHsKICAgICAg
ICAgQVNTRVJUKGluZm8uZ3ByKCkgPT0gc291cmNlKTsKLSAgICAgICAgaWYgKG5vZGUuaGFzQ29u
c3RhbnQoKSkgewotICAgICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IHZhbHVlT2ZKU0NvbnN0YW50
KG5vZGVJbmRleCk7CisgICAgICAgIGlmIChub2RlLT5oYXNDb25zdGFudCgpKSB7CisgICAgICAg
ICAgICBKU1ZhbHVlIHZhbHVlID0gdmFsdWVPZkpTQ29uc3RhbnQobm9kZSk7CiAgICAgICAgICAg
ICBBU1NFUlRfVU5VU0VEKHZhbHVlLCB2YWx1ZS5pc0NlbGwoKSk7CiAgICAgICAgICAgICBmaWxs
QWN0aW9uID0gU2V0Q2VsbENvbnN0YW50OwogICAgICAgICB9IGVsc2UgewpAQCAtNDQxLDggKzQ0
MCw4IEBAIFNpbGVudFJlZ2lzdGVyU2F2ZVBsYW4gU3BlY3VsYXRpdmVKSVQ6OnMKICAgICAgICAg
QVNTRVJUKHJlZ2lzdGVyRm9ybWF0ICYgRGF0YUZvcm1hdEpTKTsKICNpZiBVU0UoSlNWQUxVRTY0
KQogICAgICAgICBBU1NFUlQoaW5mby5ncHIoKSA9PSBzb3VyY2UpOwotICAgICAgICBpZiAobm9k
ZS5oYXNDb25zdGFudCgpKSB7Ci0gICAgICAgICAgICBpZiAodmFsdWVPZkpTQ29uc3RhbnQobm9k
ZUluZGV4KS5pc0NlbGwoKSkKKyAgICAgICAgaWYgKG5vZGUtPmhhc0NvbnN0YW50KCkpIHsKKyAg
ICAgICAgICAgIGlmICh2YWx1ZU9mSlNDb25zdGFudChub2RlKS5pc0NlbGwoKSkKICAgICAgICAg
ICAgICAgICBmaWxsQWN0aW9uID0gU2V0VHJ1c3RlZEpTQ29uc3RhbnQ7CiAgICAgICAgICAgICBl
bHNlCiAgICAgICAgICAgICAgICAgZmlsbEFjdGlvbiA9IFNldEpTQ29uc3RhbnQ7CkBAIC00NTYs
NyArNDU1LDcgQEAgU2lsZW50UmVnaXN0ZXJTYXZlUGxhbiBTcGVjdWxhdGl2ZUpJVDo6cwogICAg
ICAgICAgICAgZmlsbEFjdGlvbiA9IExvYWQ2NDsKICNlbHNlCiAgICAgICAgIEFTU0VSVChpbmZv
LnRhZ0dQUigpID09IHNvdXJjZSB8fCBpbmZvLnBheWxvYWRHUFIoKSA9PSBzb3VyY2UpOwotICAg
ICAgICBpZiAobm9kZS5oYXNDb25zdGFudCgpKQorICAgICAgICBpZiAobm9kZS0+aGFzQ29uc3Rh
bnQoKSkKICAgICAgICAgICAgIGZpbGxBY3Rpb24gPSBpbmZvLnRhZ0dQUigpID09IHNvdXJjZSA/
IFNldEpTQ29uc3RhbnRUYWcgOiBTZXRKU0NvbnN0YW50UGF5bG9hZDsKICAgICAgICAgZWxzZSBp
ZiAoaW5mby5wYXlsb2FkR1BSKCkgPT0gc291cmNlKQogICAgICAgICAgICAgZmlsbEFjdGlvbiA9
IExvYWQzMlBheWxvYWQ7CkBAIC00ODIsMTQgKzQ4MSwxMyBAQCBTaWxlbnRSZWdpc3RlclNhdmVQ
bGFuIFNwZWN1bGF0aXZlSklUOjpzCiAjZW5kaWYKICAgICB9CiAgICAgICAgIAotICAgIHJldHVy
biBTaWxlbnRSZWdpc3RlclNhdmVQbGFuKHNwaWxsQWN0aW9uLCBmaWxsQWN0aW9uLCBub2RlSW5k
ZXgsIHNvdXJjZSk7CisgICAgcmV0dXJuIFNpbGVudFJlZ2lzdGVyU2F2ZVBsYW4oc3BpbGxBY3Rp
b24sIGZpbGxBY3Rpb24sIG5vZGUsIHNvdXJjZSk7CiB9CiAgICAgCiBTaWxlbnRSZWdpc3RlclNh
dmVQbGFuIFNwZWN1bGF0aXZlSklUOjpzaWxlbnRTYXZlUGxhbkZvckZQUihWaXJ0dWFsUmVnaXN0
ZXIgc3BpbGxNZSwgRlBSUmVnIHNvdXJjZSkKIHsKICAgICBHZW5lcmF0aW9uSW5mbyYgaW5mbyA9
IG1fZ2VuZXJhdGlvbkluZm9bc3BpbGxNZV07Ci0gICAgTm9kZUluZGV4IG5vZGVJbmRleCA9IGlu
Zm8ubm9kZUluZGV4KCk7Ci0gICAgTm9kZSYgbm9kZSA9IGF0KG5vZGVJbmRleCk7CisgICAgTm9k
ZSogbm9kZSA9IGluZm8ubm9kZSgpOwogICAgIEFTU0VSVChpbmZvLnJlZ2lzdGVyRm9ybWF0KCkg
PT0gRGF0YUZvcm1hdERvdWJsZSk7CiAKICAgICBTaWxlbnRTcGlsbEFjdGlvbiBzcGlsbEFjdGlv
bjsKQEAgLTQ5OCwxNSArNDk2LDE1IEBAIFNpbGVudFJlZ2lzdGVyU2F2ZVBsYW4gU3BlY3VsYXRp
dmVKSVQ6OnMKICAgICBpZiAoIWluZm8ubmVlZHNTcGlsbCgpKQogICAgICAgICBzcGlsbEFjdGlv
biA9IERvTm90aGluZ0ZvclNwaWxsOwogICAgIGVsc2UgewotICAgICAgICBBU1NFUlQoIWF0KGlu
Zm8ubm9kZUluZGV4KCkpLmhhc0NvbnN0YW50KCkpOworICAgICAgICBBU1NFUlQobm9kZS0+aGFz
Q29uc3RhbnQoKSk7CiAgICAgICAgIEFTU0VSVChpbmZvLnNwaWxsRm9ybWF0KCkgPT0gRGF0YUZv
cm1hdE5vbmUpOwogICAgICAgICBBU1NFUlQoaW5mby5mcHIoKSA9PSBzb3VyY2UpOwogICAgICAg
ICBzcGlsbEFjdGlvbiA9IFN0b3JlRG91YmxlOwogICAgIH0KICAgICAgICAgCiAjaWYgVVNFKEpT
VkFMVUU2NCkKLSAgICBpZiAobm9kZS5oYXNDb25zdGFudCgpKSB7Ci0gICAgICAgIEFTU0VSVChp
c051bWJlckNvbnN0YW50KG5vZGVJbmRleCkpOworICAgIGlmIChub2RlLT5oYXNDb25zdGFudCgp
KSB7CisgICAgICAgIEFTU0VSVChpc051bWJlckNvbnN0YW50KG5vZGUpKTsKICAgICAgICAgZmls
bEFjdGlvbiA9IFNldERvdWJsZUNvbnN0YW50OwogICAgIH0gZWxzZSBpZiAoaW5mby5zcGlsbEZv
cm1hdCgpICE9IERhdGFGb3JtYXROb25lICYmIGluZm8uc3BpbGxGb3JtYXQoKSAhPSBEYXRhRm9y
bWF0RG91YmxlKSB7CiAgICAgICAgIC8vIGl0IHdhcyBhbHJlYWR5IHNwaWxsZWQgcHJldmlvdXNs
eSBhbmQgbm90IGFzIGEgZG91YmxlLCB3aGljaCBtZWFucyB3ZSBuZWVkIHVuYm94aW5nLgpAQCAt
NTE2LDE0ICs1MTQsMTQgQEAgU2lsZW50UmVnaXN0ZXJTYXZlUGxhbiBTcGVjdWxhdGl2ZUpJVDo6
cwogICAgICAgICBmaWxsQWN0aW9uID0gTG9hZERvdWJsZTsKICNlbGlmIFVTRShKU1ZBTFVFMzJf
NjQpCiAgICAgQVNTRVJUKGluZm8ucmVnaXN0ZXJGb3JtYXQoKSA9PSBEYXRhRm9ybWF0RG91Ymxl
IHx8IGluZm8ucmVnaXN0ZXJGb3JtYXQoKSA9PSBEYXRhRm9ybWF0SlNEb3VibGUpOwotICAgIGlm
IChub2RlLmhhc0NvbnN0YW50KCkpIHsKLSAgICAgICAgQVNTRVJUKGlzTnVtYmVyQ29uc3RhbnQo
bm9kZUluZGV4KSk7CisgICAgaWYgKG5vZGUtPmhhc0NvbnN0YW50KCkpIHsKKyAgICAgICAgQVNT
RVJUKGlzTnVtYmVyQ29uc3RhbnQobm9kZSkpOwogICAgICAgICBmaWxsQWN0aW9uID0gU2V0RG91
YmxlQ29uc3RhbnQ7CiAgICAgfSBlbHNlCiAgICAgICAgIGZpbGxBY3Rpb24gPSBMb2FkRG91Ymxl
OwogI2VuZGlmCiAKLSAgICByZXR1cm4gU2lsZW50UmVnaXN0ZXJTYXZlUGxhbihzcGlsbEFjdGlv
biwgZmlsbEFjdGlvbiwgbm9kZUluZGV4LCBzb3VyY2UpOworICAgIHJldHVybiBTaWxlbnRSZWdp
c3RlclNhdmVQbGFuKHNwaWxsQWN0aW9uLCBmaWxsQWN0aW9uLCBub2RlLCBzb3VyY2UpOwogfQog
ICAgIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6c2lsZW50U3BpbGwoY29uc3QgU2lsZW50UmVnaXN0
ZXJTYXZlUGxhbiYgcGxhbikKQEAgLTUzMiwyMSArNTMwLDIxIEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OnNpbGVudFNwaWxsKGNvbnN0IFMKICAgICBjYXNlIERvTm90aGluZ0ZvclNwaWxsOgogICAg
ICAgICBicmVhazsKICAgICBjYXNlIFN0b3JlMzJUYWc6Ci0gICAgICAgIG1faml0LnN0b3JlMzIo
cGxhbi5ncHIoKSwgSklUQ29tcGlsZXI6OnRhZ0ZvcihhdChwbGFuLm5vZGVJbmRleCgpKS52aXJ0
dWFsUmVnaXN0ZXIoKSkpOworICAgICAgICBtX2ppdC5zdG9yZTMyKHBsYW4uZ3ByKCksIEpJVENv
bXBpbGVyOjp0YWdGb3IocGxhbi5ub2RlKCktPnZpcnR1YWxSZWdpc3RlcigpKSk7CiAgICAgICAg
IGJyZWFrOwogICAgIGNhc2UgU3RvcmUzMlBheWxvYWQ6Ci0gICAgICAgIG1faml0LnN0b3JlMzIo
cGxhbi5ncHIoKSwgSklUQ29tcGlsZXI6OnBheWxvYWRGb3IoYXQocGxhbi5ub2RlSW5kZXgoKSku
dmlydHVhbFJlZ2lzdGVyKCkpKTsKKyAgICAgICAgbV9qaXQuc3RvcmUzMihwbGFuLmdwcigpLCBK
SVRDb21waWxlcjo6cGF5bG9hZEZvcihwbGFuLm5vZGUoKS0+dmlydHVhbFJlZ2lzdGVyKCkpKTsK
ICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBTdG9yZVB0cjoKLSAgICAgICAgbV9qaXQuc3RvcmVQ
dHIocGxhbi5ncHIoKSwgSklUQ29tcGlsZXI6OmFkZHJlc3NGb3IoYXQocGxhbi5ub2RlSW5kZXgo
KSkudmlydHVhbFJlZ2lzdGVyKCkpKTsKKyAgICAgICAgbV9qaXQuc3RvcmVQdHIocGxhbi5ncHIo
KSwgSklUQ29tcGlsZXI6OmFkZHJlc3NGb3IocGxhbi5ub2RlKCktPnZpcnR1YWxSZWdpc3Rlcigp
KSk7CiAgICAgICAgIGJyZWFrOwogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgY2FzZSBTdG9yZTY0
OgotICAgICAgICBtX2ppdC5zdG9yZTY0KHBsYW4uZ3ByKCksIEpJVENvbXBpbGVyOjphZGRyZXNz
Rm9yKGF0KHBsYW4ubm9kZUluZGV4KCkpLnZpcnR1YWxSZWdpc3RlcigpKSk7CisgICAgICAgIG1f
aml0LnN0b3JlNjQocGxhbi5ncHIoKSwgSklUQ29tcGlsZXI6OmFkZHJlc3NGb3IocGxhbi5ub2Rl
KCktPnZpcnR1YWxSZWdpc3RlcigpKSk7CiAgICAgICAgIGJyZWFrOwogI2VuZGlmCiAgICAgY2Fz
ZSBTdG9yZURvdWJsZToKLSAgICAgICAgbV9qaXQuc3RvcmVEb3VibGUocGxhbi5mcHIoKSwgSklU
Q29tcGlsZXI6OmFkZHJlc3NGb3IoYXQocGxhbi5ub2RlSW5kZXgoKSkudmlydHVhbFJlZ2lzdGVy
KCkpKTsKKyAgICAgICAgbV9qaXQuc3RvcmVEb3VibGUocGxhbi5mcHIoKSwgSklUQ29tcGlsZXI6
OmFkZHJlc3NGb3IocGxhbi5ub2RlKCktPnZpcnR1YWxSZWdpc3RlcigpKSk7CiAgICAgICAgIGJy
ZWFrOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
CkBAIC01NjIsNDMgKzU2MCw0MyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpzaWxlbnRGaWxsKGNv
bnN0IFNpCiAgICAgY2FzZSBEb05vdGhpbmdGb3JGaWxsOgogICAgICAgICBicmVhazsKICAgICBj
YXNlIFNldEludDMyQ29uc3RhbnQ6Ci0gICAgICAgIG1faml0Lm1vdmUoSW1tMzIodmFsdWVPZklu
dDMyQ29uc3RhbnQocGxhbi5ub2RlSW5kZXgoKSkpLCBwbGFuLmdwcigpKTsKKyAgICAgICAgbV9q
aXQubW92ZShJbW0zMih2YWx1ZU9mSW50MzJDb25zdGFudChwbGFuLm5vZGUoKSkpLCBwbGFuLmdw
cigpKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBTZXRCb29sZWFuQ29uc3RhbnQ6Ci0gICAg
ICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbTMyKHZhbHVlT2ZCb29sZWFuQ29uc3RhbnQocGxhbi5u
b2RlSW5kZXgoKSkpLCBwbGFuLmdwcigpKTsKKyAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1t
MzIodmFsdWVPZkJvb2xlYW5Db25zdGFudChwbGFuLm5vZGUoKSkpLCBwbGFuLmdwcigpKTsKICAg
ICAgICAgYnJlYWs7CiAgICAgY2FzZSBTZXRDZWxsQ29uc3RhbnQ6Ci0gICAgICAgIG1faml0Lm1v
dmUoVHJ1c3RlZEltbVB0cih2YWx1ZU9mSlNDb25zdGFudChwbGFuLm5vZGVJbmRleCgpKS5hc0Nl
bGwoKSksIHBsYW4uZ3ByKCkpOworICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIodmFs
dWVPZkpTQ29uc3RhbnQocGxhbi5ub2RlKCkpLmFzQ2VsbCgpKSwgcGxhbi5ncHIoKSk7CiAgICAg
ICAgIGJyZWFrOwogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgY2FzZSBTZXRUcnVzdGVkSlNDb25z
dGFudDoKLSAgICAgICAgbV9qaXQubW92ZSh2YWx1ZU9mSlNDb25zdGFudEFzSW1tNjQocGxhbi5u
b2RlSW5kZXgoKSkuYXNUcnVzdGVkSW1tNjQoKSwgcGxhbi5ncHIoKSk7CisgICAgICAgIG1faml0
Lm1vdmUodmFsdWVPZkpTQ29uc3RhbnRBc0ltbTY0KHBsYW4ubm9kZSgpKS5hc1RydXN0ZWRJbW02
NCgpLCBwbGFuLmdwcigpKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBTZXRKU0NvbnN0YW50
OgotICAgICAgICBtX2ppdC5tb3ZlKHZhbHVlT2ZKU0NvbnN0YW50QXNJbW02NChwbGFuLm5vZGVJ
bmRleCgpKSwgcGxhbi5ncHIoKSk7CisgICAgICAgIG1faml0Lm1vdmUodmFsdWVPZkpTQ29uc3Rh
bnRBc0ltbTY0KHBsYW4ubm9kZSgpKSwgcGxhbi5ncHIoKSk7CiAgICAgICAgIGJyZWFrOwogICAg
IGNhc2UgU2V0RG91YmxlQ29uc3RhbnQ6Ci0gICAgICAgIG1faml0Lm1vdmUoSW1tNjQocmVpbnRl
cnByZXREb3VibGVUb0ludDY0KHZhbHVlT2ZOdW1iZXJDb25zdGFudChwbGFuLm5vZGVJbmRleCgp
KSkpLCBjYW5UcmFtcGxlKTsKKyAgICAgICAgbV9qaXQubW92ZShJbW02NChyZWludGVycHJldERv
dWJsZVRvSW50NjQodmFsdWVPZk51bWJlckNvbnN0YW50KHBsYW4ubm9kZSgpKSkpLCBjYW5UcmFt
cGxlKTsKICAgICAgICAgbV9qaXQubW92ZTY0VG9Eb3VibGUoY2FuVHJhbXBsZSwgcGxhbi5mcHIo
KSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgTG9hZDMyUGF5bG9hZEJveEludDoKLSAgICAg
ICAgbV9qaXQubG9hZDMyKEpJVENvbXBpbGVyOjpwYXlsb2FkRm9yKGF0KHBsYW4ubm9kZUluZGV4
KCkpLnZpcnR1YWxSZWdpc3RlcigpKSwgcGxhbi5ncHIoKSk7CisgICAgICAgIG1faml0LmxvYWQz
MihKSVRDb21waWxlcjo6cGF5bG9hZEZvcihwbGFuLm5vZGUoKS0+dmlydHVhbFJlZ2lzdGVyKCkp
LCBwbGFuLmdwcigpKTsKICAgICAgICAgbV9qaXQub3I2NChHUFJJbmZvOjp0YWdUeXBlTnVtYmVy
UmVnaXN0ZXIsIHBsYW4uZ3ByKCkpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIExvYWREb3Vi
bGVCb3hEb3VibGU6Ci0gICAgICAgIG1faml0LmxvYWQ2NChKSVRDb21waWxlcjo6YWRkcmVzc0Zv
cihhdChwbGFuLm5vZGVJbmRleCgpKS52aXJ0dWFsUmVnaXN0ZXIoKSksIHBsYW4uZ3ByKCkpOwor
ICAgICAgICBtX2ppdC5sb2FkNjQoSklUQ29tcGlsZXI6OmFkZHJlc3NGb3IocGxhbi5ub2RlKCkt
PnZpcnR1YWxSZWdpc3RlcigpKSwgcGxhbi5ncHIoKSk7CiAgICAgICAgIG1faml0LnN1YjY0KEdQ
UkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlciwgcGxhbi5ncHIoKSk7CiAgICAgICAgIGJyZWFr
OwogICAgIGNhc2UgTG9hZEpTVW5ib3hEb3VibGU6Ci0gICAgICAgIG1faml0LmxvYWQ2NChKSVRD
b21waWxlcjo6YWRkcmVzc0ZvcihhdChwbGFuLm5vZGVJbmRleCgpKS52aXJ0dWFsUmVnaXN0ZXIo
KSksIGNhblRyYW1wbGUpOworICAgICAgICBtX2ppdC5sb2FkNjQoSklUQ29tcGlsZXI6OmFkZHJl
c3NGb3IocGxhbi5ub2RlKCktPnZpcnR1YWxSZWdpc3RlcigpKSwgY2FuVHJhbXBsZSk7CiAgICAg
ICAgIHVuYm94RG91YmxlKGNhblRyYW1wbGUsIHBsYW4uZnByKCkpOwogICAgICAgICBicmVhazsK
ICNlbHNlCiAgICAgY2FzZSBTZXRKU0NvbnN0YW50VGFnOgotICAgICAgICBtX2ppdC5tb3ZlKElt
bTMyKHZhbHVlT2ZKU0NvbnN0YW50KHBsYW4ubm9kZUluZGV4KCkpLnRhZygpKSwgcGxhbi5ncHIo
KSk7CisgICAgICAgIG1faml0Lm1vdmUoSW1tMzIodmFsdWVPZkpTQ29uc3RhbnQocGxhbi5ub2Rl
KCkpLnRhZygpKSwgcGxhbi5ncHIoKSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgU2V0SlND
b25zdGFudFBheWxvYWQ6Ci0gICAgICAgIG1faml0Lm1vdmUoSW1tMzIodmFsdWVPZkpTQ29uc3Rh
bnQocGxhbi5ub2RlSW5kZXgoKSkucGF5bG9hZCgpKSwgcGxhbi5ncHIoKSk7CisgICAgICAgIG1f
aml0Lm1vdmUoSW1tMzIodmFsdWVPZkpTQ29uc3RhbnQocGxhbi5ub2RlKCkpLnBheWxvYWQoKSks
IHBsYW4uZ3ByKCkpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIFNldEludDMyVGFnOgogICAg
ICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZyksIHBsYW4uZ3By
KCkpOwpAQCAtNjEwLDI1ICs2MDgsMjUgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6c2lsZW50Rmls
bChjb25zdCBTaQogICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpCb29s
ZWFuVGFnKSwgcGxhbi5ncHIoKSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgU2V0RG91Ymxl
Q29uc3RhbnQ6Ci0gICAgICAgIG1faml0LmxvYWREb3VibGUoYWRkcmVzc09mRG91YmxlQ29uc3Rh
bnQocGxhbi5ub2RlSW5kZXgoKSksIHBsYW4uZnByKCkpOworICAgICAgICBtX2ppdC5sb2FkRG91
YmxlKGFkZHJlc3NPZkRvdWJsZUNvbnN0YW50KHBsYW4ubm9kZSgpKSwgcGxhbi5mcHIoKSk7CiAg
ICAgICAgIGJyZWFrOwogI2VuZGlmCiAgICAgY2FzZSBMb2FkMzJUYWc6Ci0gICAgICAgIG1faml0
LmxvYWQzMihKSVRDb21waWxlcjo6dGFnRm9yKGF0KHBsYW4ubm9kZUluZGV4KCkpLnZpcnR1YWxS
ZWdpc3RlcigpKSwgcGxhbi5ncHIoKSk7CisgICAgICAgIG1faml0LmxvYWQzMihKSVRDb21waWxl
cjo6dGFnRm9yKHBsYW4ubm9kZSgpLT52aXJ0dWFsUmVnaXN0ZXIoKSksIHBsYW4uZ3ByKCkpOwog
ICAgICAgICBicmVhazsKICAgICBjYXNlIExvYWQzMlBheWxvYWQ6Ci0gICAgICAgIG1faml0Lmxv
YWQzMihKSVRDb21waWxlcjo6cGF5bG9hZEZvcihhdChwbGFuLm5vZGVJbmRleCgpKS52aXJ0dWFs
UmVnaXN0ZXIoKSksIHBsYW4uZ3ByKCkpOworICAgICAgICBtX2ppdC5sb2FkMzIoSklUQ29tcGls
ZXI6OnBheWxvYWRGb3IocGxhbi5ub2RlKCktPnZpcnR1YWxSZWdpc3RlcigpKSwgcGxhbi5ncHIo
KSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgTG9hZFB0cjoKLSAgICAgICAgbV9qaXQubG9h
ZFB0cihKSVRDb21waWxlcjo6YWRkcmVzc0ZvcihhdChwbGFuLm5vZGVJbmRleCgpKS52aXJ0dWFs
UmVnaXN0ZXIoKSksIHBsYW4uZ3ByKCkpOworICAgICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBp
bGVyOjphZGRyZXNzRm9yKHBsYW4ubm9kZSgpLT52aXJ0dWFsUmVnaXN0ZXIoKSksIHBsYW4uZ3By
KCkpOwogICAgICAgICBicmVhazsKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIGNhc2UgTG9hZDY0
OgotICAgICAgICBtX2ppdC5sb2FkNjQoSklUQ29tcGlsZXI6OmFkZHJlc3NGb3IoYXQocGxhbi5u
b2RlSW5kZXgoKSkudmlydHVhbFJlZ2lzdGVyKCkpLCBwbGFuLmdwcigpKTsKKyAgICAgICAgbV9q
aXQubG9hZDY0KEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKHBsYW4ubm9kZSgpLT52aXJ0dWFsUmVn
aXN0ZXIoKSksIHBsYW4uZ3ByKCkpOwogICAgICAgICBicmVhazsKICNlbmRpZgogICAgIGNhc2Ug
TG9hZERvdWJsZToKLSAgICAgICAgbV9qaXQubG9hZERvdWJsZShKSVRDb21waWxlcjo6YWRkcmVz
c0ZvcihhdChwbGFuLm5vZGVJbmRleCgpKS52aXJ0dWFsUmVnaXN0ZXIoKSksIHBsYW4uZnByKCkp
OworICAgICAgICBtX2ppdC5sb2FkRG91YmxlKEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKHBsYW4u
bm9kZSgpLT52aXJ0dWFsUmVnaXN0ZXIoKSksIHBsYW4uZnByKCkpOwogICAgICAgICBicmVhazsK
ICAgICBkZWZhdWx0OgogICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAt
NzUxLDI0ICs3NDksMjQgQEAgSklUQ29tcGlsZXI6Okp1bXBMaXN0IFNwZWN1bGF0aXZlSklUOjpq
dQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNoZWNrQXJy
YXkoTm9kZSYgbm9kZSkKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNoZWNrQXJyYXkoTm9kZSogbm9k
ZSkKIHsKLSAgICBBU1NFUlQobm9kZS5hcnJheU1vZGUoKS5pc1NwZWNpZmljKCkpOwotICAgIEFT
U0VSVCghbm9kZS5hcnJheU1vZGUoKS5kb2VzQ29udmVyc2lvbigpKTsKKyAgICBBU1NFUlQobm9k
ZS0+YXJyYXlNb2RlKCkuaXNTcGVjaWZpYygpKTsKKyAgICBBU1NFUlQoIW5vZGUtPmFycmF5TW9k
ZSgpLmRvZXNDb252ZXJzaW9uKCkpOwogICAgIAotICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJh
c2UodGhpcywgbm9kZS5jaGlsZDEoKSk7CisgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0
aGlzLCBub2RlLT5jaGlsZDEoKSk7CiAgICAgR1BSUmVnIGJhc2VSZWcgPSBiYXNlLmdwcigpOwog
ICAgIAotICAgIGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yKiByZXN1bHQgPSB0eXBlZEFycmF5
RGVzY3JpcHRvcihub2RlLmFycmF5TW9kZSgpKTsKKyAgICBjb25zdCBUeXBlZEFycmF5RGVzY3Jp
cHRvciogcmVzdWx0ID0gdHlwZWRBcnJheURlc2NyaXB0b3Iobm9kZS0+YXJyYXlNb2RlKCkpOwog
ICAgIAotICAgIGlmIChub2RlLmFycmF5TW9kZSgpLmFscmVhZHlDaGVja2VkKG1faml0LmdyYXBo
KCksIG5vZGUsIG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKSkpIHsKLSAgICAgICAgbm9S
ZXN1bHQobV9jb21waWxlSW5kZXgpOworICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS5hbHJlYWR5
Q2hlY2tlZChtX2ppdC5ncmFwaCgpLCBub2RlLCBtX3N0YXRlLmZvck5vZGUobm9kZS0+Y2hpbGQx
KCkpKSkgeworICAgICAgICBub1Jlc3VsdChtX2N1cnJlbnROb2RlKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KICAgICAKICAgICBjb25zdCBDbGFzc0luZm8qIGV4cGVjdGVkQ2xhc3NJbmZvID0g
MDsKICAgICAKLSAgICBzd2l0Y2ggKG5vZGUuYXJyYXlNb2RlKCkudHlwZSgpKSB7CisgICAgc3dp
dGNoIChub2RlLT5hcnJheU1vZGUoKS50eXBlKCkpIHsKICAgICBjYXNlIEFycmF5OjpTdHJpbmc6
CiAgICAgICAgIGV4cGVjdGVkQ2xhc3NJbmZvID0gJkpTU3RyaW5nOjpzX2luZm87CiAgICAgICAg
IGJyZWFrOwpAQCAtNzgzLDEwICs3ODEsMTAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y2hlY2tB
cnJheShOb2RlJiBubwogICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJl
ZywgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIHRlbXBHUFIpOwogICAgICAgICBtX2ppdC5s
b2FkOChNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyh0ZW1wR1BSLCBTdHJ1Y3R1cmU6OmluZGV4aW5n
VHlwZU9mZnNldCgpKSwgdGVtcEdQUik7CiAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCi0gICAg
ICAgICAgICBCYWRJbmRleGluZ1R5cGUsIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKGJhc2VS
ZWcpLCBOb05vZGUsCi0gICAgICAgICAgICBqdW1wU2xvd0ZvclVud2FudGVkQXJyYXlNb2RlKHRl
bXBHUFIsIG5vZGUuYXJyYXlNb2RlKCkpKTsKKyAgICAgICAgICAgIEJhZEluZGV4aW5nVHlwZSwg
SlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwoYmFzZVJlZyksIDAsCisgICAgICAgICAgICBqdW1w
U2xvd0ZvclVud2FudGVkQXJyYXlNb2RlKHRlbXBHUFIsIG5vZGUtPmFycmF5TW9kZSgpKSk7CiAg
ICAgICAgIAotICAgICAgICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCk7CisgICAgICAgIG5vUmVz
dWx0KG1fY3VycmVudE5vZGUpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGNhc2UgQXJy
YXk6OkFyZ3VtZW50czoKQEAgLTgxMiwyNSArODEwLDI1IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNoZWNrQXJyYXkoTm9kZSYgbm8KICAgICBtX2ppdC5sb2FkUHRyKAogICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgdGVt
cC5ncHIoKSk7CiAgICAgc3BlY3VsYXRpb25DaGVjaygKLSAgICAgICAgVW5jb3VudGFibGUsIEpT
VmFsdWVSZWdzKCksIE5vTm9kZSwKKyAgICAgICAgVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCks
IDAsCiAgICAgICAgIG1faml0LmJyYW5jaFB0cigKICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpOb3RFcXVhbCwKICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHRlbXAuZ3By
KCksIFN0cnVjdHVyZTo6Y2xhc3NJbmZvT2Zmc2V0KCkpLAogICAgICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6OlRydXN0ZWRJbW1QdHIoZXhwZWN0ZWRDbGFzc0luZm8pKSk7CiAgICAgCi0gICAgbm9S
ZXN1bHQobV9jb21waWxlSW5kZXgpOworICAgIG5vUmVzdWx0KG1fY3VycmVudE5vZGUpOwogfQog
Ci12b2lkIFNwZWN1bGF0aXZlSklUOjphcnJheWlmeShOb2RlJiBub2RlLCBHUFJSZWcgYmFzZVJl
ZywgR1BSUmVnIHByb3BlcnR5UmVnKQordm9pZCBTcGVjdWxhdGl2ZUpJVDo6YXJyYXlpZnkoTm9k
ZSogbm9kZSwgR1BSUmVnIGJhc2VSZWcsIEdQUlJlZyBwcm9wZXJ0eVJlZykKIHsKLSAgICBBU1NF
UlQobm9kZS5hcnJheU1vZGUoKS5kb2VzQ29udmVyc2lvbigpKTsKKyAgICBBU1NFUlQobm9kZS0+
YXJyYXlNb2RlKCkuZG9lc0NvbnZlcnNpb24oKSk7CiAgICAgCiAgICAgR1BSVGVtcG9yYXJ5IHRl
bXAodGhpcyk7CiAgICAgR1BSVGVtcG9yYXJ5IHN0cnVjdHVyZTsKICAgICBHUFJSZWcgdGVtcEdQ
UiA9IHRlbXAuZ3ByKCk7CiAgICAgR1BSUmVnIHN0cnVjdHVyZUdQUiA9IEludmFsaWRHUFJSZWc7
CiAgICAgCi0gICAgaWYgKG5vZGUub3AoKSAhPSBBcnJheWlmeVRvU3RydWN0dXJlKSB7CisgICAg
aWYgKG5vZGUtPm9wKCkgIT0gQXJyYXlpZnlUb1N0cnVjdHVyZSkgewogICAgICAgICBHUFJUZW1w
b3JhcnkgcmVhbFN0cnVjdHVyZSh0aGlzKTsKICAgICAgICAgc3RydWN0dXJlLmFkb3B0KHJlYWxT
dHJ1Y3R1cmUpOwogICAgICAgICBzdHJ1Y3R1cmVHUFIgPSBzdHJ1Y3R1cmUuZ3ByKCk7CkBAIC04
MzksMTEgKzgzNywxMSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjphcnJheWlmeShOb2RlJiBub2Rl
CiAgICAgLy8gV2UgY2FuIHNraXAgYWxsIHRoYXQgY29tZXMgbmV4dCBpZiB3ZSBhbHJlYWR5IGhh
dmUgYXJyYXkgc3RvcmFnZS4KICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgc2xvd1BhdGg7
CiAgICAgCi0gICAgaWYgKG5vZGUub3AoKSA9PSBBcnJheWlmeVRvU3RydWN0dXJlKSB7CisgICAg
aWYgKG5vZGUtPm9wKCkgPT0gQXJyYXlpZnlUb1N0cnVjdHVyZSkgewogICAgICAgICBzbG93UGF0
aC5hcHBlbmQobV9qaXQuYnJhbmNoV2Vha1B0cigKICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpO
b3RFcXVhbCwKICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpBZGRyZXNzKGJhc2VSZWcsIEpTQ2Vs
bDo6c3RydWN0dXJlT2Zmc2V0KCkpLAotICAgICAgICAgICAgbm9kZS5zdHJ1Y3R1cmUoKSkpOwor
ICAgICAgICAgICAgbm9kZS0+c3RydWN0dXJlKCkpKTsKICAgICB9IGVsc2UgewogICAgICAgICBt
X2ppdC5sb2FkUHRyKAogICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJl
ZywgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIHN0cnVjdHVyZUdQUik7CkBAIC04NTEsMzUg
Kzg0OSwzNCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjphcnJheWlmeShOb2RlJiBub2RlCiAgICAg
ICAgIG1faml0LmxvYWQ4KAogICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3Ry
dWN0dXJlR1BSLCBTdHJ1Y3R1cmU6OmluZGV4aW5nVHlwZU9mZnNldCgpKSwgdGVtcEdQUik7CiAg
ICAgICAgIAotICAgICAgICBzbG93UGF0aC5hcHBlbmQoanVtcFNsb3dGb3JVbndhbnRlZEFycmF5
TW9kZSh0ZW1wR1BSLCBub2RlLmFycmF5TW9kZSgpKSk7CisgICAgICAgIHNsb3dQYXRoLmFwcGVu
ZChqdW1wU2xvd0ZvclVud2FudGVkQXJyYXlNb2RlKHRlbXBHUFIsIG5vZGUtPmFycmF5TW9kZSgp
KSk7CiAgICAgfQogICAgIAogICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKGFkb3B0UHRyKG5ldyBB
cnJheWlmeVNsb3dQYXRoR2VuZXJhdG9yKAogICAgICAgICBzbG93UGF0aCwgdGhpcywgbm9kZSwg
YmFzZVJlZywgcHJvcGVydHlSZWcsIHRlbXBHUFIsIHN0cnVjdHVyZUdQUikpKTsKICAgICAKLSAg
ICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCk7CisgICAgbm9SZXN1bHQobV9jdXJyZW50Tm9kZSk7
CiB9CiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmFycmF5aWZ5KE5vZGUmIG5vZGUpCiB7Ci0gICAg
QVNTRVJUKG5vZGUuYXJyYXlNb2RlKCkuaXNTcGVjaWZpYygpKTsKKyAgICBBU1NFUlQobm9kZS0+
YXJyYXlNb2RlKCkuaXNTcGVjaWZpYygpKTsKICAgICAKLSAgICBTcGVjdWxhdGVDZWxsT3BlcmFu
ZCBiYXNlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOworICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJh
c2UodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwogICAgIAotICAgIGlmICghbm9kZS5jaGlsZDIoKSkg
eworICAgIGlmICghbm9kZS0+Y2hpbGQyKCkpIHsKICAgICAgICAgYXJyYXlpZnkobm9kZSwgYmFz
ZS5ncHIoKSwgSW52YWxpZEdQUlJlZyk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCi0g
ICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgcHJvcGVydHkodGhpcywgbm9kZS5jaGlsZDIoKSk7
CisgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgcHJvcGVydHkodGhpcywgbm9kZS0+Y2hpbGQy
KCkpOwogICAgIAogICAgIGFycmF5aWZ5KG5vZGUsIGJhc2UuZ3ByKCksIHByb3BlcnR5Lmdwcigp
KTsKIH0KIAotR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3RvcmFnZShOb2RlSW5kZXggbm9k
ZUluZGV4KQorR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3RvcmFnZShOb2RlKiBub2RlKQog
ewotICAgIE5vZGUmIG5vZGUgPSBtX2ppdC5ncmFwaCgpW25vZGVJbmRleF07Ci0gICAgVmlydHVh
bFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciA9IG5vZGUudmlydHVhbFJlZ2lzdGVyKCk7CisgICAg
VmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciA9IG5vZGUtPnZpcnR1YWxSZWdpc3Rlcigp
OwogICAgIEdlbmVyYXRpb25JbmZvJiBpbmZvID0gbV9nZW5lcmF0aW9uSW5mb1t2aXJ0dWFsUmVn
aXN0ZXJdOwogICAgIAogICAgIHN3aXRjaCAoaW5mby5yZWdpc3RlckZvcm1hdCgpKSB7CkBAIC04
OTMsNyArODkwLDcgQEAgR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3RvcmFnZShOb2RlSQog
ICAgICAgICB9CiAgICAgICAgIAogICAgICAgICAvLyBNdXN0IGJlIGEgY2VsbDsgZmlsbCBpdCBh
cyBhIGNlbGwgYW5kIHRoZW4gcmV0dXJuIHRoZSBwb2ludGVyLgotICAgICAgICByZXR1cm4gZmls
bFNwZWN1bGF0ZUNlbGwobm9kZUluZGV4LCBCYWNrd2FyZFNwZWN1bGF0aW9uKTsKKyAgICAgICAg
cmV0dXJuIGZpbGxTcGVjdWxhdGVDZWxsKG5vZGUsIEJhY2t3YXJkU3BlY3VsYXRpb24pOwogICAg
IH0KICAgICAgICAgCiAgICAgY2FzZSBEYXRhRm9ybWF0U3RvcmFnZTogewpAQCAtOTAzLDExMyAr
OTAwLDEwNSBAQCBHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTdG9yYWdlKE5vZGVJCiAgICAg
fQogICAgICAgICAKICAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gZmlsbFNwZWN1bGF0ZUNl
bGwobm9kZUluZGV4LCBCYWNrd2FyZFNwZWN1bGF0aW9uKTsKKyAgICAgICAgcmV0dXJuIGZpbGxT
cGVjdWxhdGVDZWxsKG5vZGUsIEJhY2t3YXJkU3BlY3VsYXRpb24pOwogICAgIH0KIH0KIAotdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6dXNlQ2hpbGRyZW4oTm9kZSYgbm9kZSkKK3ZvaWQgU3BlY3VsYXRp
dmVKSVQ6OnVzZUNoaWxkcmVuKE5vZGUqIG5vZGUpCiB7Ci0gICAgaWYgKG5vZGUuZmxhZ3MoKSAm
IE5vZGVIYXNWYXJBcmdzKSB7Ci0gICAgICAgIGZvciAodW5zaWduZWQgY2hpbGRJZHggPSBub2Rl
LmZpcnN0Q2hpbGQoKTsgY2hpbGRJZHggPCBub2RlLmZpcnN0Q2hpbGQoKSArIG5vZGUubnVtQ2hp
bGRyZW4oKTsgY2hpbGRJZHgrKykgeworICAgIGlmIChub2RlLT5mbGFncygpICYgTm9kZUhhc1Zh
ckFyZ3MpIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBjaGlsZElkeCA9IG5vZGUtPmZpcnN0Q2hp
bGQoKTsgY2hpbGRJZHggPCBub2RlLT5maXJzdENoaWxkKCkgKyBub2RlLT5udW1DaGlsZHJlbigp
OyBjaGlsZElkeCsrKSB7CiAgICAgICAgICAgICBpZiAoISFtX2ppdC5ncmFwaCgpLm1fdmFyQXJn
Q2hpbGRyZW5bY2hpbGRJZHhdKQogICAgICAgICAgICAgICAgIHVzZShtX2ppdC5ncmFwaCgpLm1f
dmFyQXJnQ2hpbGRyZW5bY2hpbGRJZHhdKTsKICAgICAgICAgfQogICAgIH0gZWxzZSB7Ci0gICAg
ICAgIEVkZ2UgY2hpbGQxID0gbm9kZS5jaGlsZDEoKTsKKyAgICAgICAgRWRnZSBjaGlsZDEgPSBu
b2RlLT5jaGlsZDEoKTsKICAgICAgICAgaWYgKCFjaGlsZDEpIHsKLSAgICAgICAgICAgIEFTU0VS
VCghbm9kZS5jaGlsZDIoKSAmJiAhbm9kZS5jaGlsZDMoKSk7CisgICAgICAgICAgICBBU1NFUlQo
IW5vZGUtPmNoaWxkMigpICYmICFub2RlLT5jaGlsZDMoKSk7CiAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgIH0KICAgICAgICAgdXNlKGNoaWxkMSk7CiAgICAgICAgIAotICAgICAgICBFZGdl
IGNoaWxkMiA9IG5vZGUuY2hpbGQyKCk7CisgICAgICAgIEVkZ2UgY2hpbGQyID0gbm9kZS0+Y2hp
bGQyKCk7CiAgICAgICAgIGlmICghY2hpbGQyKSB7Ci0gICAgICAgICAgICBBU1NFUlQoIW5vZGUu
Y2hpbGQzKCkpOworICAgICAgICAgICAgQVNTRVJUKCFub2RlLT5jaGlsZDMoKSk7CiAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgdXNlKGNoaWxkMik7CiAgICAgICAgIAot
ICAgICAgICBFZGdlIGNoaWxkMyA9IG5vZGUuY2hpbGQzKCk7CisgICAgICAgIEVkZ2UgY2hpbGQz
ID0gbm9kZS0+Y2hpbGQzKCk7CiAgICAgICAgIGlmICghY2hpbGQzKQogICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICB1c2UoY2hpbGQzKTsKICAgICB9CiB9CiAKLWJvb2wgU3BlY3VsYXRpdmVK
SVQ6OmlzU3RyaWN0SW50MzIoTm9kZUluZGV4IG5vZGVJbmRleCkKK2Jvb2wgU3BlY3VsYXRpdmVK
SVQ6OmlzU3RyaWN0SW50MzIoTm9kZSogbm9kZSkKIHsKLSAgICBpZiAoaXNJbnQzMkNvbnN0YW50
KG5vZGVJbmRleCkpCisgICAgaWYgKGlzSW50MzJDb25zdGFudChub2RlKSkKICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgCi0gICAgTm9kZSYgbm9kZSA9IG1faml0LmdyYXBoKClbbm9kZUluZGV4
XTsKLSAgICBHZW5lcmF0aW9uSW5mbyYgaW5mbyA9IG1fZ2VuZXJhdGlvbkluZm9bbm9kZS52aXJ0
dWFsUmVnaXN0ZXIoKV07CisgICAgR2VuZXJhdGlvbkluZm8mIGluZm8gPSBtX2dlbmVyYXRpb25J
bmZvW25vZGUtPnZpcnR1YWxSZWdpc3RlcigpXTsKICAgICAKICAgICByZXR1cm4gaW5mby5yZWdp
c3RlckZvcm1hdCgpID09IERhdGFGb3JtYXRJbnRlZ2VyOwogfQogCi1ib29sIFNwZWN1bGF0aXZl
SklUOjppc0tub3duSW50ZWdlcihOb2RlSW5kZXggbm9kZUluZGV4KQorYm9vbCBTcGVjdWxhdGl2
ZUpJVDo6aXNLbm93bkludGVnZXIoTm9kZSogbm9kZSkKIHsKLSAgICBpZiAoaXNJbnQzMkNvbnN0
YW50KG5vZGVJbmRleCkpCisgICAgaWYgKGlzSW50MzJDb25zdGFudChub2RlKSkKICAgICAgICAg
cmV0dXJuIHRydWU7CiAKLSAgICBOb2RlJiBub2RlID0gbV9qaXQuZ3JhcGgoKVtub2RlSW5kZXhd
OwotICAgIAotICAgIGlmIChub2RlLmhhc0ludDMyUmVzdWx0KCkpCisgICAgaWYgKG5vZGUtPmhh
c0ludDMyUmVzdWx0KCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIAotICAgIEdlbmVyYXRp
b25JbmZvJiBpbmZvID0gbV9nZW5lcmF0aW9uSW5mb1tub2RlLnZpcnR1YWxSZWdpc3RlcigpXTsK
KyAgICBHZW5lcmF0aW9uSW5mbyYgaW5mbyA9IG1fZ2VuZXJhdGlvbkluZm9bbm9kZS0+dmlydHVh
bFJlZ2lzdGVyKCldOwogCiAgICAgcmV0dXJuIGluZm8uaXNKU0ludGVnZXIoKTsKIH0KIAotYm9v
bCBTcGVjdWxhdGl2ZUpJVDo6aXNLbm93bk51bWVyaWMoTm9kZUluZGV4IG5vZGVJbmRleCkKK2Jv
b2wgU3BlY3VsYXRpdmVKSVQ6OmlzS25vd25OdW1lcmljKE5vZGUqIG5vZGUpCiB7Ci0gICAgaWYg
KGlzSW50MzJDb25zdGFudChub2RlSW5kZXgpIHx8IGlzTnVtYmVyQ29uc3RhbnQobm9kZUluZGV4
KSkKKyAgICBpZiAoaXNJbnQzMkNvbnN0YW50KG5vZGUpIHx8IGlzTnVtYmVyQ29uc3RhbnQobm9k
ZSkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgTm9kZSYgbm9kZSA9IG1faml0LmdyYXBo
KClbbm9kZUluZGV4XTsKLSAgICAKLSAgICBpZiAobm9kZS5oYXNOdW1iZXJSZXN1bHQoKSkKKyAg
ICBpZiAobm9kZS0+aGFzTnVtYmVyUmVzdWx0KCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogICAg
IAotICAgIEdlbmVyYXRpb25JbmZvJiBpbmZvID0gbV9nZW5lcmF0aW9uSW5mb1tub2RlLnZpcnR1
YWxSZWdpc3RlcigpXTsKKyAgICBHZW5lcmF0aW9uSW5mbyYgaW5mbyA9IG1fZ2VuZXJhdGlvbklu
Zm9bbm9kZS0+dmlydHVhbFJlZ2lzdGVyKCldOwogCiAgICAgcmV0dXJuIGluZm8uaXNKU0ludGVn
ZXIoKSB8fCBpbmZvLmlzSlNEb3VibGUoKTsKIH0KIAotYm9vbCBTcGVjdWxhdGl2ZUpJVDo6aXNL
bm93bkNlbGwoTm9kZUluZGV4IG5vZGVJbmRleCkKK2Jvb2wgU3BlY3VsYXRpdmVKSVQ6OmlzS25v
d25DZWxsKE5vZGUqIG5vZGUpCiB7Ci0gICAgcmV0dXJuIG1fZ2VuZXJhdGlvbkluZm9bbV9qaXQu
Z3JhcGgoKVtub2RlSW5kZXhdLnZpcnR1YWxSZWdpc3RlcigpXS5pc0pTQ2VsbCgpOworICAgIHJl
dHVybiBtX2dlbmVyYXRpb25JbmZvW25vZGUtPnZpcnR1YWxSZWdpc3RlcigpXS5pc0pTQ2VsbCgp
OwogfQogCi1ib29sIFNwZWN1bGF0aXZlSklUOjppc0tub3duTm90Q2VsbChOb2RlSW5kZXggbm9k
ZUluZGV4KQorYm9vbCBTcGVjdWxhdGl2ZUpJVDo6aXNLbm93bk5vdENlbGwoTm9kZSogbm9kZSkK
IHsKLSAgICBOb2RlJiBub2RlID0gbV9qaXQuZ3JhcGgoKVtub2RlSW5kZXhdOwotICAgIFZpcnR1
YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIgPSBub2RlLnZpcnR1YWxSZWdpc3RlcigpOworICAg
IFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIgPSBub2RlLT52aXJ0dWFsUmVnaXN0ZXIo
KTsKICAgICBHZW5lcmF0aW9uSW5mbyYgaW5mbyA9IG1fZ2VuZXJhdGlvbkluZm9bdmlydHVhbFJl
Z2lzdGVyXTsKLSAgICBpZiAobm9kZS5oYXNDb25zdGFudCgpICYmICF2YWx1ZU9mSlNDb25zdGFu
dChub2RlSW5kZXgpLmlzQ2VsbCgpKQorICAgIGlmIChub2RlLT5oYXNDb25zdGFudCgpICYmICF2
YWx1ZU9mSlNDb25zdGFudChub2RlKS5pc0NlbGwoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgcmV0dXJuICEoaW5mby5pc0pTQ2VsbCgpIHx8IGluZm8uaXNVbmtub3duSlMoKSk7CiB9CiAK
LWJvb2wgU3BlY3VsYXRpdmVKSVQ6OmlzS25vd25Ob3RJbnRlZ2VyKE5vZGVJbmRleCBub2RlSW5k
ZXgpCitib29sIFNwZWN1bGF0aXZlSklUOjppc0tub3duTm90SW50ZWdlcihOb2RlKiBub2RlKQog
ewotICAgIE5vZGUmIG5vZGUgPSBtX2ppdC5ncmFwaCgpW25vZGVJbmRleF07Ci0gICAgVmlydHVh
bFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciA9IG5vZGUudmlydHVhbFJlZ2lzdGVyKCk7CisgICAg
VmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciA9IG5vZGUtPnZpcnR1YWxSZWdpc3Rlcigp
OwogICAgIEdlbmVyYXRpb25JbmZvJiBpbmZvID0gbV9nZW5lcmF0aW9uSW5mb1t2aXJ0dWFsUmVn
aXN0ZXJdOwogICAgIAogICAgIHJldHVybiBpbmZvLmlzSlNEb3VibGUoKSB8fCBpbmZvLmlzSlND
ZWxsKCkgfHwgaW5mby5pc0pTQm9vbGVhbigpCi0gICAgICAgIHx8IChub2RlLmhhc0NvbnN0YW50
KCkgJiYgIXZhbHVlT2ZKU0NvbnN0YW50KG5vZGVJbmRleCkuaXNJbnQzMigpKTsKKyAgICAgICAg
fHwgKG5vZGUtPmhhc0NvbnN0YW50KCkgJiYgIXZhbHVlT2ZKU0NvbnN0YW50KG5vZGUpLmlzSW50
MzIoKSk7CiB9CiAKLWJvb2wgU3BlY3VsYXRpdmVKSVQ6OmlzS25vd25Ob3ROdW1iZXIoTm9kZUlu
ZGV4IG5vZGVJbmRleCkKK2Jvb2wgU3BlY3VsYXRpdmVKSVQ6OmlzS25vd25Ob3ROdW1iZXIoTm9k
ZSogbm9kZSkKIHsKLSAgICBOb2RlJiBub2RlID0gbV9qaXQuZ3JhcGgoKVtub2RlSW5kZXhdOwot
ICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIgPSBub2RlLnZpcnR1YWxSZWdpc3Rl
cigpOworICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIgPSBub2RlLT52aXJ0dWFs
UmVnaXN0ZXIoKTsKICAgICBHZW5lcmF0aW9uSW5mbyYgaW5mbyA9IG1fZ2VuZXJhdGlvbkluZm9b
dmlydHVhbFJlZ2lzdGVyXTsKICAgICAKICAgICByZXR1cm4gKCFpbmZvLmlzSlNEb3VibGUoKSAm
JiAhaW5mby5pc0pTSW50ZWdlcigpICYmICFpbmZvLmlzVW5rbm93bkpTKCkpCi0gICAgICAgIHx8
IChub2RlLmhhc0NvbnN0YW50KCkgJiYgIWlzTnVtYmVyQ29uc3RhbnQobm9kZUluZGV4KSk7Cisg
ICAgICAgIHx8IChub2RlLT5oYXNDb25zdGFudCgpICYmICFpc051bWJlckNvbnN0YW50KG5vZGUp
KTsKIH0KIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6d3JpdGVCYXJyaWVyKE1hY3JvQXNzZW1ibGVy
JiBqaXQsIEdQUlJlZyBvd25lciwgR1BSUmVnIHNjcmF0Y2gxLCBHUFJSZWcgc2NyYXRjaDIsIFdy
aXRlQmFycmllclVzZUtpbmQgdXNlS2luZCkKQEAgLTEwNjAsNyArMTA0OSw3IEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OndyaXRlQmFycmllcihHUFJSZWcKICAgICBVTlVTRURfUEFSQU0oc2NyYXRj
aDIpOwogICAgIFVOVVNFRF9QQVJBTSh1c2VLaW5kKTsKIAotICAgIGlmIChpc0tub3duTm90Q2Vs
bCh2YWx1ZVVzZS5pbmRleCgpKSkKKyAgICBpZiAoaXNLbm93bk5vdENlbGwodmFsdWVVc2Uubm9k
ZSgpKSkKICAgICAgICAgcmV0dXJuOwogCiAjaWYgRU5BQkxFKFdSSVRFX0JBUlJJRVJfUFJPRklM
SU5HKQpAQCAtMTA4Myw3ICsxMDcyLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6d3JpdGVCYXJy
aWVyKEdQUlJlZwogICAgIAogICAgIEpJVENvbXBpbGVyOjpKdW1wIHJoc05vdENlbGw7CiAgICAg
Ym9vbCBoYWRDZWxsQ2hlY2sgPSBmYWxzZTsKLSAgICBpZiAoIWlzS25vd25DZWxsKHZhbHVlVXNl
LmluZGV4KCkpICYmICFpc0NlbGxTcGVjdWxhdGlvbihtX2ppdC5nZXRTcGVjdWxhdGlvbih2YWx1
ZVVzZS5pbmRleCgpKSkpIHsKKyAgICBpZiAoIWlzS25vd25DZWxsKHZhbHVlVXNlLm5vZGUoKSkg
JiYgIWlzQ2VsbFNwZWN1bGF0aW9uKG1faml0LmdldFNwZWN1bGF0aW9uKHZhbHVlVXNlLm5vZGUo
KSkpKSB7CiAgICAgICAgIGhhZENlbGxDaGVjayA9IHRydWU7CiAgICAgICAgIHJoc05vdENlbGwg
PSBtX2ppdC5icmFuY2hJZk5vdENlbGwodmFsdWVHUFIpOwogICAgIH0KQEAgLTExMzUsNyArMTEy
NCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OndyaXRlQmFycmllcihKU0NlbGwKICAgICBVTlVT
RURfUEFSQU0oc2NyYXRjaCk7CiAgICAgVU5VU0VEX1BBUkFNKHVzZUtpbmQpOwogCi0gICAgaWYg
KGlzS25vd25Ob3RDZWxsKHZhbHVlVXNlLmluZGV4KCkpKQorICAgIGlmIChpc0tub3duTm90Q2Vs
bCh2YWx1ZVVzZS5ub2RlKCkpKQogICAgICAgICByZXR1cm47CiAKICNpZiBFTkFCTEUoV1JJVEVf
QkFSUklFUl9QUk9GSUxJTkcpCkBAIC0xMTQ1LDcgKzExMzQsNyBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjp3cml0ZUJhcnJpZXIoSlNDZWxsCiAjaWYgRU5BQkxFKEdHQykKICAgICBKSVRDb21waWxl
cjo6SnVtcCByaHNOb3RDZWxsOwogICAgIGJvb2wgaGFkQ2VsbENoZWNrID0gZmFsc2U7Ci0gICAg
aWYgKCFpc0tub3duQ2VsbCh2YWx1ZVVzZS5pbmRleCgpKSAmJiAhaXNDZWxsU3BlY3VsYXRpb24o
bV9qaXQuZ2V0U3BlY3VsYXRpb24odmFsdWVVc2UuaW5kZXgoKSkpKSB7CisgICAgaWYgKCFpc0tu
b3duQ2VsbCh2YWx1ZVVzZS5ub2RlKCkpICYmICFpc0NlbGxTcGVjdWxhdGlvbihtX2ppdC5nZXRT
cGVjdWxhdGlvbih2YWx1ZVVzZS5ub2RlKCkpKSkgewogICAgICAgICBoYWRDZWxsQ2hlY2sgPSB0
cnVlOwogICAgICAgICByaHNOb3RDZWxsID0gbV9qaXQuYnJhbmNoSWZOb3RDZWxsKHZhbHVlR1BS
KTsKICAgICB9CkBAIC0xMTY2LDE4ICsxMTU1LDE4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6Ondy
aXRlQmFycmllcihKU0NlbGwKICNlbmRpZgogfQogCi1ib29sIFNwZWN1bGF0aXZlSklUOjpub25T
cGVjdWxhdGl2ZUNvbXBhcmUoTm9kZSYgbm9kZSwgTWFjcm9Bc3NlbWJsZXI6OlJlbGF0aW9uYWxD
b25kaXRpb24gY29uZCwgU19ERkdPcGVyYXRpb25fRUpKIGhlbHBlckZ1bmN0aW9uKQorYm9vbCBT
cGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVDb21wYXJlKE5vZGUqIG5vZGUsIE1hY3JvQXNz
ZW1ibGVyOjpSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmQsIFNfREZHT3BlcmF0aW9uX0VKSiBoZWxw
ZXJGdW5jdGlvbikKIHsKICAgICB1bnNpZ25lZCBicmFuY2hJbmRleEluQmxvY2sgPSBkZXRlY3RQ
ZWVwSG9sZUJyYW5jaCgpOwogICAgIGlmIChicmFuY2hJbmRleEluQmxvY2sgIT0gVUlOVF9NQVgp
IHsKLSAgICAgICAgTm9kZUluZGV4IGJyYW5jaE5vZGVJbmRleCA9IG1faml0LmdyYXBoKCkubV9i
bG9ja3NbbV9ibG9ja10tPmF0KGJyYW5jaEluZGV4SW5CbG9jayk7CisgICAgICAgIE5vZGUqIGJy
YW5jaE5vZGUgPSBtX2ppdC5ncmFwaCgpLm1fYmxvY2tzW21fYmxvY2tdLT5hdChicmFuY2hJbmRl
eEluQmxvY2spOwogCi0gICAgICAgIEFTU0VSVChub2RlLmFkanVzdGVkUmVmQ291bnQoKSA9PSAx
KTsKKyAgICAgICAgQVNTRVJUKG5vZGUtPmFkanVzdGVkUmVmQ291bnQoKSA9PSAxKTsKICAgICAg
ICAgCi0gICAgICAgIG5vblNwZWN1bGF0aXZlUGVlcGhvbGVCcmFuY2gobm9kZSwgYnJhbmNoTm9k
ZUluZGV4LCBjb25kLCBoZWxwZXJGdW5jdGlvbik7CisgICAgICAgIG5vblNwZWN1bGF0aXZlUGVl
cGhvbGVCcmFuY2gobm9kZSwgYnJhbmNoTm9kZSwgY29uZCwgaGVscGVyRnVuY3Rpb24pOwogICAg
IAogICAgICAgICBtX2luZGV4SW5CbG9jayA9IGJyYW5jaEluZGV4SW5CbG9jazsKLSAgICAgICAg
bV9jb21waWxlSW5kZXggPSBicmFuY2hOb2RlSW5kZXg7CisgICAgICAgIG1fY3VycmVudE5vZGUg
PSBicmFuY2hOb2RlOwogICAgICAgICAKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpAQCAt
MTE4NywxOCArMTE3NiwxOCBAQCBib29sIFNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZUNv
bXBhCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIFNwZWN1bGF0aXZlSklUOjpub25TcGVj
dWxhdGl2ZVN0cmljdEVxKE5vZGUmIG5vZGUsIGJvb2wgaW52ZXJ0KQorYm9vbCBTcGVjdWxhdGl2
ZUpJVDo6bm9uU3BlY3VsYXRpdmVTdHJpY3RFcShOb2RlKiBub2RlLCBib29sIGludmVydCkKIHsK
ICAgICB1bnNpZ25lZCBicmFuY2hJbmRleEluQmxvY2sgPSBkZXRlY3RQZWVwSG9sZUJyYW5jaCgp
OwogICAgIGlmIChicmFuY2hJbmRleEluQmxvY2sgIT0gVUlOVF9NQVgpIHsKLSAgICAgICAgTm9k
ZUluZGV4IGJyYW5jaE5vZGVJbmRleCA9IG1faml0LmdyYXBoKCkubV9ibG9ja3NbbV9ibG9ja10t
PmF0KGJyYW5jaEluZGV4SW5CbG9jayk7CisgICAgICAgIE5vZGVJbmRleCBicmFuY2hOb2RlID0g
bV9qaXQuZ3JhcGgoKS5tX2Jsb2Nrc1ttX2Jsb2NrXS0+YXQoYnJhbmNoSW5kZXhJbkJsb2NrKTsK
IAotICAgICAgICBBU1NFUlQobm9kZS5hZGp1c3RlZFJlZkNvdW50KCkgPT0gMSk7CisgICAgICAg
IEFTU0VSVChub2RlLT5hZGp1c3RlZFJlZkNvdW50KCkgPT0gMSk7CiAgICAgICAgIAotICAgICAg
ICBub25TcGVjdWxhdGl2ZVBlZXBob2xlU3RyaWN0RXEobm9kZSwgYnJhbmNoTm9kZUluZGV4LCBp
bnZlcnQpOworICAgICAgICBub25TcGVjdWxhdGl2ZVBlZXBob2xlU3RyaWN0RXEobm9kZSwgYnJh
bmNoTm9kZSwgaW52ZXJ0KTsKICAgICAKICAgICAgICAgbV9pbmRleEluQmxvY2sgPSBicmFuY2hJ
bmRleEluQmxvY2s7Ci0gICAgICAgIG1fY29tcGlsZUluZGV4ID0gYnJhbmNoTm9kZUluZGV4Owor
ICAgICAgICBtX2N1cnJlbnROb2RlID0gYnJhbmNoTm9kZTsKICAgICAgICAgCiAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgIH0KQEAgLTE1NzEsMjQgKzE1NjAsMjIgQEAgRlBSVGVtcG9yYXJ5OjpG
UFJUZW1wb3JhcnkoU3BlY3VsYXRpdmVKSQogfQogI2VuZGlmCiAKLXZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVQZWVwSG9sZURvdWJsZUJyYW5jaChOb2RlJiBub2RlLCBOb2RlSW5kZXggYnJh
bmNoTm9kZUluZGV4LCBKSVRDb21waWxlcjo6RG91YmxlQ29uZGl0aW9uIGNvbmRpdGlvbikKK3Zv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQZWVwSG9sZURvdWJsZUJyYW5jaChOb2RlKiBub2Rl
LCBOb2RlKiBicmFuY2hOb2RlLCBKSVRDb21waWxlcjo6RG91YmxlQ29uZGl0aW9uIGNvbmRpdGlv
bikKIHsKLSAgICBOb2RlJiBicmFuY2hOb2RlID0gYXQoYnJhbmNoTm9kZUluZGV4KTsKLSAgICBC
bG9ja0luZGV4IHRha2VuID0gYnJhbmNoTm9kZS50YWtlbkJsb2NrSW5kZXgoKTsKLSAgICBCbG9j
a0luZGV4IG5vdFRha2VuID0gYnJhbmNoTm9kZS5ub3RUYWtlbkJsb2NrSW5kZXgoKTsKKyAgICBC
bG9ja0luZGV4IHRha2VuID0gYnJhbmNoTm9kZS0+dGFrZW5CbG9ja0luZGV4KCk7CisgICAgQmxv
Y2tJbmRleCBub3RUYWtlbiA9IGJyYW5jaE5vZGUtPm5vdFRha2VuQmxvY2tJbmRleCgpOwogICAg
IAotICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwot
ICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgb3AyKHRoaXMsIG5vZGUuY2hpbGQyKCkpOworICAg
IFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKKyAgICBT
cGVjdWxhdGVEb3VibGVPcGVyYW5kIG9wMih0aGlzLCBub2RlLT5jaGlsZDIoKSk7CiAgICAgCiAg
ICAgYnJhbmNoRG91YmxlKGNvbmRpdGlvbiwgb3AxLmZwcigpLCBvcDIuZnByKCksIHRha2VuKTsK
ICAgICBqdW1wKG5vdFRha2VuKTsKIH0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVBl
ZXBIb2xlT2JqZWN0RXF1YWxpdHkoTm9kZSYgbm9kZSwgTm9kZUluZGV4IGJyYW5jaE5vZGVJbmRl
eCkKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQZWVwSG9sZU9iamVjdEVxdWFsaXR5KE5v
ZGUqIG5vZGUsIE5vZGUqIGJyYW5jaE5vZGUpCiB7Ci0gICAgTm9kZSYgYnJhbmNoTm9kZSA9IGF0
KGJyYW5jaE5vZGVJbmRleCk7Ci0gICAgQmxvY2tJbmRleCB0YWtlbiA9IGJyYW5jaE5vZGUudGFr
ZW5CbG9ja0luZGV4KCk7Ci0gICAgQmxvY2tJbmRleCBub3RUYWtlbiA9IGJyYW5jaE5vZGUubm90
VGFrZW5CbG9ja0luZGV4KCk7CisgICAgQmxvY2tJbmRleCB0YWtlbiA9IGJyYW5jaE5vZGUtPnRh
a2VuQmxvY2tJbmRleCgpOworICAgIEJsb2NrSW5kZXggbm90VGFrZW4gPSBicmFuY2hOb2RlLT5u
b3RUYWtlbkJsb2NrSW5kZXgoKTsKIAogICAgIE1hY3JvQXNzZW1ibGVyOjpSZWxhdGlvbmFsQ29u
ZGl0aW9uIGNvbmRpdGlvbiA9IE1hY3JvQXNzZW1ibGVyOjpFcXVhbDsKICAgICAKQEAgLTE1OTks
MjAgKzE1ODYsMjAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVBlZXBIb2xlT2JqZQog
ICAgICAgICBub3RUYWtlbiA9IHRtcDsKICAgICB9CiAKLSAgICBTcGVjdWxhdGVDZWxsT3BlcmFu
ZCBvcDEodGhpcywgbm9kZS5jaGlsZDEoKSk7Ci0gICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgb3Ay
KHRoaXMsIG5vZGUuY2hpbGQyKCkpOworICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIG9wMSh0aGlz
LCBub2RlLT5jaGlsZDEoKSk7CisgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgb3AyKHRoaXMsIG5v
ZGUtPmNoaWxkMigpKTsKICAgICAKICAgICBHUFJSZWcgb3AxR1BSID0gb3AxLmdwcigpOwogICAg
IEdQUlJlZyBvcDJHUFIgPSBvcDIuZ3ByKCk7CiAgICAgCi0gICAgaWYgKG1faml0LmdyYXBoKCku
Z2xvYmFsT2JqZWN0Rm9yKG5vZGUuY29kZU9yaWdpbiktPm1hc3F1ZXJhZGVzQXNVbmRlZmluZWRX
YXRjaHBvaW50KCktPmlzU3RpbGxWYWxpZCgpKSB7Ci0gICAgICAgIG1faml0LmdyYXBoKCkuZ2xv
YmFsT2JqZWN0Rm9yKG5vZGUuY29kZU9yaWdpbiktPm1hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRj
aHBvaW50KCktPmFkZChzcGVjdWxhdGlvbldhdGNocG9pbnQoKSk7Ci0gICAgICAgIHNwZWN1bGF0
aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwob3AxR1BSKSwgbm9k
ZS5jaGlsZDEoKS5pbmRleCgpLCAKKyAgICBpZiAobV9qaXQuZ3JhcGgoKS5nbG9iYWxPYmplY3RG
b3Iobm9kZS0+Y29kZU9yaWdpbiktPm1hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50KCkt
PmlzU3RpbGxWYWxpZCgpKSB7CisgICAgICAgIG1faml0LmdyYXBoKCkuZ2xvYmFsT2JqZWN0Rm9y
KG5vZGUtPmNvZGVPcmlnaW4pLT5tYXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2ludCgpLT5h
ZGQoc3BlY3VsYXRpb25XYXRjaHBvaW50KCkpOworICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJh
ZFR5cGUsIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKG9wMUdQUiksIG5vZGUtPmNoaWxkMSgp
LCAKICAgICAgICAgICAgIG1faml0LmJyYW5jaFB0cigKICAgICAgICAgICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6RXF1YWwsIAogICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KG9wMUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIAogICAgICAgICAgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+c3RyaW5nU3Ry
dWN0dXJlLmdldCgpKSkpOwotICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFs
dWVTb3VyY2U6OnVuYm94ZWRDZWxsKG9wMkdQUiksIG5vZGUuY2hpbGQyKCkuaW5kZXgoKSwgCisg
ICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENl
bGwob3AyR1BSKSwgbm9kZS0+Y2hpbGQyKCksCiAgICAgICAgICAgICBtX2ppdC5icmFuY2hQdHIo
CiAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCAKICAgICAgICAgICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhvcDJHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0
KCkpLCAKQEAgLTE2MjIsMjQgKzE2MDksMjQgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZVBlZXBIb2xlT2JqZQogICAgICAgICBHUFJSZWcgc3RydWN0dXJlR1BSID0gc3RydWN0dXJlLmdw
cigpOwogCiAgICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mob3Ax
R1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgc3RydWN0dXJlR1BSKTsKLSAgICAgICAg
c3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChvcDFH
UFIpLCBub2RlLmNoaWxkMSgpLmluZGV4KCksIAorICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJh
ZFR5cGUsIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKG9wMUdQUiksIG5vZGUtPmNoaWxkMSgp
LAogICAgICAgICAgICAgbV9qaXQuYnJhbmNoUHRyKAogICAgICAgICAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpFcXVhbCwgCiAgICAgICAgICAgICAgICAgc3RydWN0dXJlR1BSLCAKICAgICAgICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCkt
PnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpKTsKLSAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRU
eXBlLCBKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChvcDFHUFIpLCBub2RlLmNoaWxkMSgpLmlu
ZGV4KCksIAorICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVTb3VyY2U6
OnVuYm94ZWRDZWxsKG9wMUdQUiksIG5vZGUtPmNoaWxkMSgpLAogICAgICAgICAgICAgbV9qaXQu
YnJhbmNoVGVzdDgoCiAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIAog
ICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0cnVjdHVyZUdQUiwgU3Ry
dWN0dXJlOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCAKICAgICAgICAgICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6VHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKSk7CiAKICAgICAg
ICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhvcDJHUFIsIEpTQ2VsbDo6
c3RydWN0dXJlT2Zmc2V0KCkpLCBzdHJ1Y3R1cmVHUFIpOwotICAgICAgICBzcGVjdWxhdGlvbkNo
ZWNrKEJhZFR5cGUsIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKG9wMkdQUiksIG5vZGUuY2hp
bGQyKCkuaW5kZXgoKSwgCisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1
ZVNvdXJjZTo6dW5ib3hlZENlbGwob3AyR1BSKSwgbm9kZS0+Y2hpbGQyKCksCiAgICAgICAgICAg
ICBtX2ppdC5icmFuY2hQdHIoCiAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkVxdWFs
LCAKICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmVHUFIsIAogICAgICAgICAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+c3RyaW5nU3RydWN0
dXJlLmdldCgpKSkpOwotICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVT
b3VyY2U6OnVuYm94ZWRDZWxsKG9wMkdQUiksIG5vZGUuY2hpbGQyKCkuaW5kZXgoKSwgCisgICAg
ICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwo
b3AyR1BSKSwgbm9kZS0+Y2hpbGQyKCksCiAgICAgICAgICAgICBtX2ppdC5icmFuY2hUZXN0OCgK
ICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgCiAgICAgICAgICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RydWN0dXJlR1BSLCBTdHJ1Y3R1cmU6OnR5cGVJ
bmZvRmxhZ3NPZmZzZXQoKSksIApAQCAtMTY1MCwxMSArMTYzNywxMCBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlUGVlcEhvbGVPYmplCiAgICAganVtcChub3RUYWtlbik7CiB9CiAKLXZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQZWVwSG9sZUludGVnZXJCcmFuY2goTm9kZSYgbm9k
ZSwgTm9kZUluZGV4IGJyYW5jaE5vZGVJbmRleCwgSklUQ29tcGlsZXI6OlJlbGF0aW9uYWxDb25k
aXRpb24gY29uZGl0aW9uKQordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVBlZXBIb2xlSW50
ZWdlckJyYW5jaChOb2RlKiBub2RlLCBOb2RlKiBicmFuY2hOb2RlLCBKSVRDb21waWxlcjo6UmVs
YXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24pCiB7Ci0gICAgTm9kZSYgYnJhbmNoTm9kZSA9IGF0
KGJyYW5jaE5vZGVJbmRleCk7Ci0gICAgQmxvY2tJbmRleCB0YWtlbiA9IGJyYW5jaE5vZGUudGFr
ZW5CbG9ja0luZGV4KCk7Ci0gICAgQmxvY2tJbmRleCBub3RUYWtlbiA9IGJyYW5jaE5vZGUubm90
VGFrZW5CbG9ja0luZGV4KCk7CisgICAgQmxvY2tJbmRleCB0YWtlbiA9IGJyYW5jaE5vZGUtPnRh
a2VuQmxvY2tJbmRleCgpOworICAgIEJsb2NrSW5kZXggbm90VGFrZW4gPSBicmFuY2hOb2RlLT5u
b3RUYWtlbkJsb2NrSW5kZXgoKTsKIAogICAgIC8vIFRoZSBicmFuY2ggaW5zdHJ1Y3Rpb24gd2ls
bCBicmFuY2ggdG8gdGhlIHRha2VuIGJsb2NrLgogICAgIC8vIElmIHRha2VuIGlzIG5leHQsIHN3
aXRjaCB0YWtlbiB3aXRoIG5vdFRha2VuICYgaW52ZXJ0IHRoZSBicmFuY2ggY29uZGl0aW9uIHNv
IHdlIGNhbiBmYWxsIHRocm91Z2guCkBAIC0xNjY1LDE3ICsxNjUxLDE3IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVQZWVwSG9sZUludGUKICAgICAgICAgbm90VGFrZW4gPSB0bXA7CiAg
ICAgfQogCi0gICAgaWYgKGlzSW50MzJDb25zdGFudChub2RlLmNoaWxkMSgpLmluZGV4KCkpKSB7
Ci0gICAgICAgIGludDMyX3QgaW1tID0gdmFsdWVPZkludDMyQ29uc3RhbnQobm9kZS5jaGlsZDEo
KS5pbmRleCgpKTsKLSAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AyKHRoaXMsIG5v
ZGUuY2hpbGQyKCkpOworICAgIGlmIChpc0ludDMyQ29uc3RhbnQobm9kZS0+Y2hpbGQxKCkubm9k
ZSgpKSkgeworICAgICAgICBpbnQzMl90IGltbSA9IHZhbHVlT2ZJbnQzMkNvbnN0YW50KG5vZGUt
PmNoaWxkMSgpLm5vZGUoKSk7CisgICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMih0
aGlzLCBub2RlLT5jaGlsZDIoKSk7CiAgICAgICAgIGJyYW5jaDMyKGNvbmRpdGlvbiwgSklUQ29t
cGlsZXI6OkltbTMyKGltbSksIG9wMi5ncHIoKSwgdGFrZW4pOwotICAgIH0gZWxzZSBpZiAoaXNJ
bnQzMkNvbnN0YW50KG5vZGUuY2hpbGQyKCkuaW5kZXgoKSkpIHsKLSAgICAgICAgU3BlY3VsYXRl
SW50ZWdlck9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwotICAgICAgICBpbnQzMl90
IGltbSA9IHZhbHVlT2ZJbnQzMkNvbnN0YW50KG5vZGUuY2hpbGQyKCkuaW5kZXgoKSk7CisgICAg
fSBlbHNlIGlmIChpc0ludDMyQ29uc3RhbnQobm9kZS0+Y2hpbGQyKCkubm9kZSgpKSkgeworICAg
ICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDEodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwor
ICAgICAgICBpbnQzMl90IGltbSA9IHZhbHVlT2ZJbnQzMkNvbnN0YW50KG5vZGUtPmNoaWxkMigp
Lm5vZGUoKSk7CiAgICAgICAgIGJyYW5jaDMyKGNvbmRpdGlvbiwgb3AxLmdwcigpLCBKSVRDb21w
aWxlcjo6SW1tMzIoaW1tKSwgdGFrZW4pOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIFNwZWN1bGF0
ZUludGVnZXJPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKLSAgICAgICAgU3BlY3Vs
YXRlSW50ZWdlck9wZXJhbmQgb3AyKHRoaXMsIG5vZGUuY2hpbGQyKCkpOworICAgICAgICBTcGVj
dWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDEodGhpcywgbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBT
cGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDIodGhpcywgbm9kZS0+Y2hpbGQyKCkpOwogICAgICAg
ICBicmFuY2gzMihjb25kaXRpb24sIG9wMS5ncHIoKSwgb3AyLmdwcigpLCB0YWtlbik7CiAgICAg
fQogCkBAIC0xNjgzLDc0ICsxNjY5LDc0IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQ
ZWVwSG9sZUludGUKIH0KIAogLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBjb21wYXJlIGlzIGZ1c2Vk
IHdpdGggYSBzdWJzZXF1ZW50IGJyYW5jaC4KLWJvb2wgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQ
ZWVwSG9sZUJyYW5jaChOb2RlJiBub2RlLCBNYWNyb0Fzc2VtYmxlcjo6UmVsYXRpb25hbENvbmRp
dGlvbiBjb25kaXRpb24sIE1hY3JvQXNzZW1ibGVyOjpEb3VibGVDb25kaXRpb24gZG91YmxlQ29u
ZGl0aW9uLCBTX0RGR09wZXJhdGlvbl9FSkogb3BlcmF0aW9uKQorYm9vbCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZVBlZXBIb2xlQnJhbmNoKE5vZGUqIG5vZGUsIE1hY3JvQXNzZW1ibGVyOjpSZWxh
dGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbiwgTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUNvbmRpdGlv
biBkb3VibGVDb25kaXRpb24sIFNfREZHT3BlcmF0aW9uX0VKSiBvcGVyYXRpb24pCiB7CiAgICAg
Ly8gRnVzZWQgY29tcGFyZSAmIGJyYW5jaC4KICAgICB1bnNpZ25lZCBicmFuY2hJbmRleEluQmxv
Y2sgPSBkZXRlY3RQZWVwSG9sZUJyYW5jaCgpOwogICAgIGlmIChicmFuY2hJbmRleEluQmxvY2sg
IT0gVUlOVF9NQVgpIHsKLSAgICAgICAgTm9kZUluZGV4IGJyYW5jaE5vZGVJbmRleCA9IG1faml0
LmdyYXBoKCkubV9ibG9ja3NbbV9ibG9ja10tPmF0KGJyYW5jaEluZGV4SW5CbG9jayk7CisgICAg
ICAgIE5vZGUqIGJyYW5jaE5vZGUgPSBtX2ppdC5ncmFwaCgpLm1fYmxvY2tzW21fYmxvY2tdLT5h
dChicmFuY2hJbmRleEluQmxvY2spOwogCiAgICAgICAgIC8vIGRldGVjdFBlZXBIb2xlQnJhbmNo
IGN1cnJlbnRseSBvbmx5IHBlcm1pdHMgdGhlIGJyYW5jaCB0byBiZSB0aGUgdmVyeSBuZXh0IG5v
ZGUsCiAgICAgICAgIC8vIHNvIGNhbiBiZSBubyBpbnRlcnZlbmluZyBub2RlcyB0byBhbHNvIHJl
ZmVyZW5jZSB0aGUgY29tcGFyZS4gCi0gICAgICAgIEFTU0VSVChub2RlLmFkanVzdGVkUmVmQ291
bnQoKSA9PSAxKTsKKyAgICAgICAgQVNTRVJUKG5vZGUtPmFkanVzdGVkUmVmQ291bnQoKSA9PSAx
KTsKIAotICAgICAgICBpZiAoTm9kZTo6c2hvdWxkU3BlY3VsYXRlSW50ZWdlcihhdChub2RlLmNo
aWxkMSgpKSwgYXQobm9kZS5jaGlsZDIoKSkpKQotICAgICAgICAgICAgY29tcGlsZVBlZXBIb2xl
SW50ZWdlckJyYW5jaChub2RlLCBicmFuY2hOb2RlSW5kZXgsIGNvbmRpdGlvbik7Ci0gICAgICAg
IGVsc2UgaWYgKE5vZGU6OnNob3VsZFNwZWN1bGF0ZU51bWJlcihhdChub2RlLmNoaWxkMSgpKSwg
YXQobm9kZS5jaGlsZDIoKSkpKQotICAgICAgICAgICAgY29tcGlsZVBlZXBIb2xlRG91YmxlQnJh
bmNoKG5vZGUsIGJyYW5jaE5vZGVJbmRleCwgZG91YmxlQ29uZGl0aW9uKTsKLSAgICAgICAgZWxz
ZSBpZiAobm9kZS5vcCgpID09IENvbXBhcmVFcSkgewotICAgICAgICAgICAgaWYgKGF0KG5vZGUu
Y2hpbGQxKCkpLnNob3VsZFNwZWN1bGF0ZVN0cmluZygpIHx8IGF0KG5vZGUuY2hpbGQyKCkpLnNo
b3VsZFNwZWN1bGF0ZVN0cmluZygpKSB7Ci0gICAgICAgICAgICAgICAgbm9uU3BlY3VsYXRpdmVQ
ZWVwaG9sZUJyYW5jaChub2RlLCBicmFuY2hOb2RlSW5kZXgsIGNvbmRpdGlvbiwgb3BlcmF0aW9u
KTsKKyAgICAgICAgaWYgKE5vZGU6OnNob3VsZFNwZWN1bGF0ZUludGVnZXIobm9kZS0+Y2hpbGQx
KCkubm9kZSgpLCBub2RlLT5jaGlsZDIoKS5ub2RlKCkpKQorICAgICAgICAgICAgY29tcGlsZVBl
ZXBIb2xlSW50ZWdlckJyYW5jaChub2RlLCBicmFuY2hOb2RlLCBjb25kaXRpb24pOworICAgICAg
ICBlbHNlIGlmIChOb2RlOjpzaG91bGRTcGVjdWxhdGVOdW1iZXIobm9kZS0+Y2hpbGQxKCkubm9k
ZSgpLCBub2RlLT5jaGlsZDIoKS5ub2RlKCkpKQorICAgICAgICAgICAgY29tcGlsZVBlZXBIb2xl
RG91YmxlQnJhbmNoKG5vZGUsIGJyYW5jaE5vZGUsIGRvdWJsZUNvbmRpdGlvbik7CisgICAgICAg
IGVsc2UgaWYgKG5vZGUtPm9wKCkgPT0gQ29tcGFyZUVxKSB7CisgICAgICAgICAgICBpZiAobm9k
ZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZVN0cmluZygpIHx8IG5vZGUtPmNoaWxkMigpLT5z
aG91bGRTcGVjdWxhdGVTdHJpbmcoKSkgeworICAgICAgICAgICAgICAgIG5vblNwZWN1bGF0aXZl
UGVlcGhvbGVCcmFuY2gobm9kZSwgYnJhbmNoTm9kZSwgY29uZGl0aW9uLCBvcGVyYXRpb24pOwog
ICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgfQotICAgICAgICAgICAg
aWYgKGF0KG5vZGUuY2hpbGQxKCkpLnNob3VsZFNwZWN1bGF0ZU5vblN0cmluZ0NlbGwoKSAmJiBh
dChub2RlLmNoaWxkMigpKS5zaG91bGRTcGVjdWxhdGVOb25TdHJpbmdDZWxsT3JPdGhlcigpKQot
ICAgICAgICAgICAgICAgIGNvbXBpbGVQZWVwSG9sZU9iamVjdFRvT2JqZWN0T3JPdGhlckVxdWFs
aXR5KG5vZGUuY2hpbGQxKCksIG5vZGUuY2hpbGQyKCksIGJyYW5jaE5vZGVJbmRleCk7Ci0gICAg
ICAgICAgICBlbHNlIGlmIChhdChub2RlLmNoaWxkMSgpKS5zaG91bGRTcGVjdWxhdGVOb25TdHJp
bmdDZWxsT3JPdGhlcigpICYmIGF0KG5vZGUuY2hpbGQyKCkpLnNob3VsZFNwZWN1bGF0ZU5vblN0
cmluZ0NlbGwoKSkKLSAgICAgICAgICAgICAgICBjb21waWxlUGVlcEhvbGVPYmplY3RUb09iamVj
dE9yT3RoZXJFcXVhbGl0eShub2RlLmNoaWxkMigpLCBub2RlLmNoaWxkMSgpLCBicmFuY2hOb2Rl
SW5kZXgpOwotICAgICAgICAgICAgZWxzZSBpZiAoYXQobm9kZS5jaGlsZDEoKSkuc2hvdWxkU3Bl
Y3VsYXRlTm9uU3RyaW5nQ2VsbCgpICYmIGF0KG5vZGUuY2hpbGQyKCkpLnNob3VsZFNwZWN1bGF0
ZU5vblN0cmluZ0NlbGwoKSkKLSAgICAgICAgICAgICAgICBjb21waWxlUGVlcEhvbGVPYmplY3RF
cXVhbGl0eShub2RlLCBicmFuY2hOb2RlSW5kZXgpOworICAgICAgICAgICAgaWYgKG5vZGUtPmNo
aWxkMSgpLT5zaG91bGRTcGVjdWxhdGVOb25TdHJpbmdDZWxsKCkgJiYgbm9kZS0+Y2hpbGQyKCkt
PnNob3VsZFNwZWN1bGF0ZU5vblN0cmluZ0NlbGxPck90aGVyKCkpCisgICAgICAgICAgICAgICAg
Y29tcGlsZVBlZXBIb2xlT2JqZWN0VG9PYmplY3RPck90aGVyRXF1YWxpdHkobm9kZS0+Y2hpbGQx
KCkubm9kZSgpLCBub2RlLT5jaGlsZDIoKS5ub2RlKCksIGJyYW5jaE5vZGUpOworICAgICAgICAg
ICAgZWxzZSBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZU5vblN0cmluZ0NlbGxP
ck90aGVyKCkgJiYgbm9kZS0+Y2hpbGQyKCktPnNob3VsZFNwZWN1bGF0ZU5vblN0cmluZ0NlbGwo
KSkKKyAgICAgICAgICAgICAgICBjb21waWxlUGVlcEhvbGVPYmplY3RUb09iamVjdE9yT3RoZXJF
cXVhbGl0eShub2RlLT5jaGlsZDIoKS5ub2RlKCksIG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgYnJh
bmNoTm9kZSk7CisgICAgICAgICAgICBlbHNlIGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3Bl
Y3VsYXRlTm9uU3RyaW5nQ2VsbCgpICYmIG5vZGUtPmNoaWxkMigpLT5zaG91bGRTcGVjdWxhdGVO
b25TdHJpbmdDZWxsKCkpCisgICAgICAgICAgICAgICAgY29tcGlsZVBlZXBIb2xlT2JqZWN0RXF1
YWxpdHkobm9kZSwgYnJhbmNoTm9kZSk7CiAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAg
ICAgICBub25TcGVjdWxhdGl2ZVBlZXBob2xlQnJhbmNoKG5vZGUsIGJyYW5jaE5vZGVJbmRleCwg
Y29uZGl0aW9uLCBvcGVyYXRpb24pOworICAgICAgICAgICAgICAgIG5vblNwZWN1bGF0aXZlUGVl
cGhvbGVCcmFuY2gobm9kZSwgYnJhbmNoTm9kZSwgY29uZGl0aW9uLCBvcGVyYXRpb24pOwogICAg
ICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgbm9uU3BlY3VsYXRpdmVQZWVwaG9sZUJyYW5jaChub2RlLCBicmFuY2hO
b2RlSW5kZXgsIGNvbmRpdGlvbiwgb3BlcmF0aW9uKTsKKyAgICAgICAgICAgIG5vblNwZWN1bGF0
aXZlUGVlcGhvbGVCcmFuY2gobm9kZSwgYnJhbmNoTm9kZSwgY29uZGl0aW9uLCBvcGVyYXRpb24p
OwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KIAotICAgICAgICB1c2Uobm9k
ZS5jaGlsZDEoKSk7Ci0gICAgICAgIHVzZShub2RlLmNoaWxkMigpKTsKKyAgICAgICAgdXNlKG5v
ZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgdXNlKG5vZGUtPmNoaWxkMigpKTsKICAgICAgICAgbV9p
bmRleEluQmxvY2sgPSBicmFuY2hJbmRleEluQmxvY2s7Ci0gICAgICAgIG1fY29tcGlsZUluZGV4
ID0gYnJhbmNoTm9kZUluZGV4OworICAgICAgICBtX2N1cnJlbnROb2RlID0gYnJhbmNoTm9kZTsK
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6bm90aWNlT1NSQmlydGgoTm9kZUluZGV4IG5vZGVJbmRleCwgTm9k
ZSYgbm9kZSkKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6Om5vdGljZU9TUkJpcnRoKE5vZGUqIG5vZGUp
CiB7Ci0gICAgaWYgKCFub2RlLmhhc1ZpcnR1YWxSZWdpc3RlcigpKQorICAgIGlmICghbm9kZS0+
aGFzVmlydHVhbFJlZ2lzdGVyKCkpCiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBWaXJ0dWFs
UmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyID0gbm9kZS52aXJ0dWFsUmVnaXN0ZXIoKTsKKyAgICBW
aXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyID0gbm9kZS0+dmlydHVhbFJlZ2lzdGVyKCk7
CiAgICAgR2VuZXJhdGlvbkluZm8mIGluZm8gPSBtX2dlbmVyYXRpb25JbmZvW3ZpcnR1YWxSZWdp
c3Rlcl07CiAgICAgCi0gICAgaW5mby5ub3RpY2VPU1JCaXJ0aCgqbV9zdHJlYW0sIG5vZGVJbmRl
eCwgdmlydHVhbFJlZ2lzdGVyKTsKKyAgICBpbmZvLm5vdGljZU9TUkJpcnRoKCptX3N0cmVhbSwg
bm9kZSwgdmlydHVhbFJlZ2lzdGVyKTsKIH0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZU1vdkhpbnQoTm9kZSYgbm9kZSkKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVNb3ZIaW50
KE5vZGUqIG5vZGUpCiB7Ci0gICAgQVNTRVJUKG5vZGUub3AoKSA9PSBTZXRMb2NhbCk7Ci0gICAg
Ci0gICAgbV9sYXN0U2V0T3BlcmFuZCA9IG5vZGUubG9jYWwoKTsKKyAgICBBU1NFUlQobm9kZS0+
b3AoKSA9PSBTZXRMb2NhbCk7CiAgICAgCi0gICAgTm9kZSYgY2hpbGQgPSBhdChub2RlLmNoaWxk
MSgpKTsKLSAgICBub3RpY2VPU1JCaXJ0aChub2RlLmNoaWxkMSgpLmluZGV4KCksIGNoaWxkKTsK
KyAgICBtX2xhc3RTZXRPcGVyYW5kID0gbm9kZS0+bG9jYWwoKTsKKworICAgIE5vZGUqIGNoaWxk
ID0gbm9kZS0+Y2hpbGQxKCkubm9kZSgpOworICAgIG5vdGljZU9TUkJpcnRoKGNoaWxkKTsKICAg
ICAKLSAgICBpZiAoY2hpbGQub3AoKSA9PSBVSW50MzJUb051bWJlcikKLSAgICAgICAgbm90aWNl
T1NSQmlydGgoY2hpbGQuY2hpbGQxKCkuaW5kZXgoKSwgYXQoY2hpbGQuY2hpbGQxKCkpKTsKKyAg
ICBpZiAoY2hpbGQtPm9wKCkgPT0gVUludDMyVG9OdW1iZXIpCisgICAgICAgIG5vdGljZU9TUkJp
cnRoKGNoaWxkLT5jaGlsZDEoKS5ub2RlKCkpOwogICAgIAotICAgIG1fc3RyZWFtLT5hcHBlbmRB
bmRMb2coVmFyaWFibGVFdmVudDo6bW92SGludChNaW5pZmllZElEKG5vZGUuY2hpbGQxKCkuaW5k
ZXgoKSksIG5vZGUubG9jYWwoKSkpOworICAgIG1fc3RyZWFtLT5hcHBlbmRBbmRMb2coVmFyaWFi
bGVFdmVudDo6bW92SGludChNaW5pZmllZElEKGNoaWxkKSwgbm9kZS0+bG9jYWwoKSkpOwogfQog
CiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKEJhc2ljQmxvY2smIGJsb2NrKQpAQCAtMTgx
MCw2ICsxNzk2LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShCYXNpY0Jsb2NrJgog
ICAgICAgICBlbHNlCiAgICAgICAgICAgICB2YWx1ZVNvdXJjZSA9IFZhbHVlU291cmNlOjpmb3JT
cGVjdWxhdGlvbihhdChub2RlSW5kZXgpLnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5hcmd1bWVudEF3
YXJlUHJlZGljdGlvbigpKTsKICAgICAgICAgbV92YXJpYWJsZXNbaV0gPSB2YWx1ZVNvdXJjZTsK
KyAgICAgICAgLy8gRklYTUU6IERvbid0IGVtaXQgU2V0TG9jYWwoRGVhZCkuIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDgwMTkKICAgICAgICAgbV9zdHJlYW0tPmFw
cGVuZEFuZExvZyhWYXJpYWJsZUV2ZW50OjpzZXRMb2NhbChpLCB2YWx1ZVNvdXJjZS5kYXRhRm9y
bWF0KCkpKTsKICAgICB9CiAgICAgCkBAIC0xODI4LDMyICsxODE1LDMxIEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGUoQmFzaWNCbG9jayYKICNlbmRpZgogCiAgICAgZm9yIChtX2luZGV4
SW5CbG9jayA9IDA7IG1faW5kZXhJbkJsb2NrIDwgYmxvY2suc2l6ZSgpOyArK21faW5kZXhJbkJs
b2NrKSB7Ci0gICAgICAgIG1fY29tcGlsZUluZGV4ID0gYmxvY2tbbV9pbmRleEluQmxvY2tdOwot
ICAgICAgICBtX2ppdC5zZXRGb3JOb2RlKG1fY29tcGlsZUluZGV4KTsKLSAgICAgICAgTm9kZSYg
bm9kZSA9IGF0KG1fY29tcGlsZUluZGV4KTsKLSAgICAgICAgbV9jb2RlT3JpZ2luRm9yT1NSID0g
bm9kZS5jb2RlT3JpZ2luOworICAgICAgICBtX2N1cnJlbnROb2RlID0gYmxvY2tbbV9pbmRleElu
QmxvY2tdOworICAgICAgICBtX2ppdC5zZXRGb3JOb2RlKG1fY3VycmVudE5vZGUpOworICAgICAg
ICBtX2NvZGVPcmlnaW5Gb3JPU1IgPSBtX2N1cnJlbnROb2RlLT5jb2RlT3JpZ2luOwogICAgICAg
ICBpZiAoIW5vZGUuc2hvdWxkR2VuZXJhdGUoKSkgewogI2lmIERGR19FTkFCTEUoREVCVUdfVkVS
Qk9TRSkKLSAgICAgICAgICAgIGRhdGFMb2dGKCJTcGVjdWxhdGl2ZUpJVCBza2lwcGluZyBOb2Rl
IEAlZCAoYmMjJXUpIGF0IEpJVCBvZmZzZXQgMHgleCAgICAgIiwgKGludCltX2NvbXBpbGVJbmRl
eCwgbm9kZS5jb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgsIG1faml0LmRlYnVnT2Zmc2V0KCkpOwor
ICAgICAgICAgICAgZGF0YUxvZ0YoIlNwZWN1bGF0aXZlSklUIHNraXBwaW5nIE5vZGUgQCVkIChi
YyMldSkgYXQgSklUIG9mZnNldCAweCV4ICAgICAiLCBtX2N1cnJlbnROb2RlLT5pbmRleCgpLCBt
X2N1cnJlbnROb2RlLT5jb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgsIG1faml0LmRlYnVnT2Zmc2V0
KCkpOwogI2VuZGlmCiAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUub3AoKSkgewogICAgICAgICAg
ICAgY2FzZSBKU0NvbnN0YW50OgotICAgICAgICAgICAgICAgIG1fbWluaWZpZWRHcmFwaC0+YXBw
ZW5kKE1pbmlmaWVkTm9kZTo6ZnJvbU5vZGUobV9jb21waWxlSW5kZXgsIG5vZGUpKTsKKyAgICAg
ICAgICAgICAgICBtX21pbmlmaWVkR3JhcGgtPmFwcGVuZChNaW5pZmllZE5vZGU6OmZyb21Ob2Rl
KG1fY3VycmVudE5vZGUpKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAg
ICAKICAgICAgICAgICAgIGNhc2UgV2Vha0pTQ29uc3RhbnQ6Ci0gICAgICAgICAgICAgICAgbV9q
aXQuYWRkV2Vha1JlZmVyZW5jZShub2RlLndlYWtDb25zdGFudCgpKTsKLSAgICAgICAgICAgICAg
ICBtX21pbmlmaWVkR3JhcGgtPmFwcGVuZChNaW5pZmllZE5vZGU6OmZyb21Ob2RlKG1fY29tcGls
ZUluZGV4LCBub2RlKSk7CisgICAgICAgICAgICAgICAgbV9qaXQuYWRkV2Vha1JlZmVyZW5jZSht
X2N1cnJlbnROb2RlLT53ZWFrQ29uc3RhbnQoKSk7CisgICAgICAgICAgICAgICAgbV9taW5pZmll
ZEdyYXBoLT5hcHBlbmQoTWluaWZpZWROb2RlOjpmcm9tTm9kZShtX2N1cnJlbnROb2RlKSk7CiAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBjYXNl
IFNldExvY2FsOgotICAgICAgICAgICAgICAgIGNvbXBpbGVNb3ZIaW50KG5vZGUpOworICAgICAg
ICAgICAgICAgIGNvbXBpbGVNb3ZIaW50KG1fY3VycmVudE5vZGUpOwogICAgICAgICAgICAgICAg
IGJyZWFrOwogCiAgICAgICAgICAgICBjYXNlIElubGluZVN0YXJ0OiB7Ci0gICAgICAgICAgICAg
ICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUgPSBub2RlLmNvZGVPcmlnaW4uaW5s
aW5lQ2FsbEZyYW1lOworICAgICAgICAgICAgICAgIElubGluZUNhbGxGcmFtZSogaW5saW5lQ2Fs
bEZyYW1lID0gbV9jdXJyZW50Tm9kZS0+Y29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWU7CiAgICAg
ICAgICAgICAgICAgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzID0gaW5saW5lQ2FsbEZy
YW1lLT5hcmd1bWVudHMuc2l6ZSgpOwotICAgICAgICAgICAgICAgIHVuc2lnbmVkIGFyZ3VtZW50
UG9zaXRpb25TdGFydCA9IG5vZGUuYXJndW1lbnRQb3NpdGlvblN0YXJ0KCk7CisgICAgICAgICAg
ICAgICAgdW5zaWduZWQgYXJndW1lbnRQb3NpdGlvblN0YXJ0ID0gbV9jdXJyZW50Tm9kZS0+YXJn
dW1lbnRQb3NpdGlvblN0YXJ0KCk7CiAgICAgICAgICAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxv
Y2sgPSBiYXNlbGluZUNvZGVCbG9ja0ZvcklubGluZUNhbGxGcmFtZShpbmxpbmVDYWxsRnJhbWUp
OwogICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYXJndW1lbnRDb3VudEluY2x1
ZGluZ1RoaXM7ICsraSkgewogICAgICAgICAgICAgICAgICAgICBWYWx1ZVJlY292ZXJ5IHJlY292
ZXJ5OwpAQCAtMTg5MCwzOSArMTg3NiwzOSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
KEJhc2ljQmxvY2smCiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAg
ICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIGlmIChiZWxvbmdzSW5NaW5pZmllZEdyYXBoKG5v
ZGUub3AoKSkpCi0gICAgICAgICAgICAgICAgICAgIG1fbWluaWZpZWRHcmFwaC0+YXBwZW5kKE1p
bmlmaWVkTm9kZTo6ZnJvbU5vZGUobV9jb21waWxlSW5kZXgsIG5vZGUpKTsKKyAgICAgICAgICAg
ICAgICBpZiAoYmVsb25nc0luTWluaWZpZWRHcmFwaChtX2N1cnJlbnROb2RlLT5vcCgpKSkKKyAg
ICAgICAgICAgICAgICAgICAgbV9taW5pZmllZEdyYXBoLT5hcHBlbmQoTWluaWZpZWROb2RlOjpm
cm9tTm9kZShtX2N1cnJlbnROb2RlKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICB9CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAKICNpZiBERkdfRU5BQkxFKERF
QlVHX1ZFUkJPU0UpCi0gICAgICAgICAgICBkYXRhTG9nRigiU3BlY3VsYXRpdmVKSVQgZ2VuZXJh
dGluZyBOb2RlIEAlZCAoYmMjJXUpIGF0IEpJVCBvZmZzZXQgMHgleCAgICIsIChpbnQpbV9jb21w
aWxlSW5kZXgsIG5vZGUuY29kZU9yaWdpbi5ieXRlY29kZUluZGV4LCBtX2ppdC5kZWJ1Z09mZnNl
dCgpKTsKKyAgICAgICAgICAgIGRhdGFMb2dGKCJTcGVjdWxhdGl2ZUpJVCBnZW5lcmF0aW5nIE5v
ZGUgQCVkIChiYyMldSkgYXQgSklUIG9mZnNldCAweCV4ICAgIiwgKGludCltX2N1cnJlbnROb2Rl
LT5pbmRleCgpLCBtX2N1cnJldE5vZGUtPmNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCwgbV9qaXQu
ZGVidWdPZmZzZXQoKSk7CiAjZW5kaWYKICNpZiBERkdfRU5BQkxFKEpJVF9CUkVBS19PTl9FVkVS
WV9OT0RFKQogICAgICAgICAgICAgbV9qaXQuYnJlYWtwb2ludCgpOwogI2VuZGlmCiAjaWYgREZH
X0VOQUJMRShYT1JfREVCVUdfQUlEKQotICAgICAgICAgICAgbV9qaXQueG9yUHRyKEpJVENvbXBp
bGVyOjpUcnVzdGVkSW1tMzIobV9jb21waWxlSW5kZXgpLCBHUFJJbmZvOjpyZWdUMCk7Ci0gICAg
ICAgICAgICBtX2ppdC54b3JQdHIoSklUQ29tcGlsZXI6OlRydXN0ZWRJbW0zMihtX2NvbXBpbGVJ
bmRleCksIEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAgICAgIG1faml0LnhvclB0cihKSVRDb21w
aWxlcjo6VHJ1c3RlZEltbTMyKG1fY3VycmVudE5vZGUtPmluZGV4KCkpLCBHUFJJbmZvOjpyZWdU
MCk7CisgICAgICAgICAgICBtX2ppdC54b3JQdHIoSklUQ29tcGlsZXI6OlRydXN0ZWRJbW0zMiht
X2N1cnJlbnROb2RlLT5pbmRleCgpKSwgR1BSSW5mbzo6cmVnVDApOwogI2VuZGlmCiAgICAgICAg
ICAgICBjaGVja0NvbnNpc3RlbmN5KCk7Ci0gICAgICAgICAgICBjb21waWxlKG5vZGUpOworICAg
ICAgICAgICAgY29tcGlsZShtX2N1cnJlbnROb2RlKTsKICAgICAgICAgICAgIGlmICghbV9jb21w
aWxlT2theSkgewogICAgICAgICAgICAgICAgIG1fY29tcGlsZU9rYXkgPSB0cnVlOwogICAgICAg
ICAgICAgICAgIGNsZWFyR2VuZXJhdGlvbkluZm8oKTsKICAgICAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChiZWxvbmdzSW5N
aW5pZmllZEdyYXBoKG5vZGUub3AoKSkpIHsKLSAgICAgICAgICAgICAgICBtX21pbmlmaWVkR3Jh
cGgtPmFwcGVuZChNaW5pZmllZE5vZGU6OmZyb21Ob2RlKG1fY29tcGlsZUluZGV4LCBub2RlKSk7
Ci0gICAgICAgICAgICAgICAgbm90aWNlT1NSQmlydGgobV9jb21waWxlSW5kZXgsIG5vZGUpOwor
ICAgICAgICAgICAgaWYgKGJlbG9uZ3NJbk1pbmlmaWVkR3JhcGgobV9jdXJyZW50Tm9kZS0+b3Ao
KSkpIHsKKyAgICAgICAgICAgICAgICBtX21pbmlmaWVkR3JhcGgtPmFwcGVuZChNaW5pZmllZE5v
ZGU6OmZyb21Ob2RlKG1fY3VycmVudE5vZGUpKTsKKyAgICAgICAgICAgICAgICBub3RpY2VPU1JC
aXJ0aChtX2N1cnJlbnROb2RlKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAogI2lmIERG
R19FTkFCTEUoREVCVUdfVkVSQk9TRSkKLSAgICAgICAgICAgIGlmIChub2RlLmhhc1Jlc3VsdCgp
KSB7Ci0gICAgICAgICAgICAgICAgR2VuZXJhdGlvbkluZm8mIGluZm8gPSBtX2dlbmVyYXRpb25J
bmZvW25vZGUudmlydHVhbFJlZ2lzdGVyKCldOwotICAgICAgICAgICAgICAgIGRhdGFMb2dGKCIt
PiAlcywgdnIjJWQiLCBkYXRhRm9ybWF0VG9TdHJpbmcoaW5mby5yZWdpc3RlckZvcm1hdCgpKSwg
KGludClub2RlLnZpcnR1YWxSZWdpc3RlcigpKTsKKyAgICAgICAgICAgIGlmIChtX2N1cnJlbnRO
b2RlLT5oYXNSZXN1bHQoKSkgeworICAgICAgICAgICAgICAgIEdlbmVyYXRpb25JbmZvJiBpbmZv
ID0gbV9nZW5lcmF0aW9uSW5mb1ttX2N1cnJlbnROb2RlLT52aXJ0dWFsUmVnaXN0ZXIoKV07Cisg
ICAgICAgICAgICAgICAgZGF0YUxvZ0YoIi0+ICVzLCB2ciMlZCIsIGRhdGFGb3JtYXRUb1N0cmlu
ZyhpbmZvLnJlZ2lzdGVyRm9ybWF0KCkpLCAoaW50KW1fY3VycmVudE5vZGUtPnZpcnR1YWxSZWdp
c3RlcigpKTsKICAgICAgICAgICAgICAgICBpZiAoaW5mby5yZWdpc3RlckZvcm1hdCgpICE9IERh
dGFGb3JtYXROb25lKSB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChpbmZvLnJlZ2lzdGVyRm9y
bWF0KCkgPT0gRGF0YUZvcm1hdERvdWJsZSkKICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFM
b2dGKCIsICVzIiwgRlBSSW5mbzo6ZGVidWdOYW1lKGluZm8uZnByKCkpKTsKQEAgLTE5NDYsNyAr
MTkzMiw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoQmFzaWNCbG9jayYKICAgICAg
ICAgLy8gTWFrZSBzdXJlIHRoYXQgdGhlIGFic3RyYWN0IHN0YXRlIGlzIHJlbWF0ZXJpYWxpemVk
IGZvciB0aGUgbmV4dCBub2RlLgogICAgICAgICBtX3N0YXRlLmV4ZWN1dGUobV9pbmRleEluQmxv
Y2spOwogICAgICAgICAKLSAgICAgICAgaWYgKG5vZGUuc2hvdWxkR2VuZXJhdGUoKSkKKyAgICAg
ICAgaWYgKG1fY3VycmVudE5vZGUtPnNob3VsZEdlbmVyYXRlKCkpCiAgICAgICAgICAgICBjaGVj
a0NvbnNpc3RlbmN5KCk7CiAgICAgfQogICAgIApAQCAtMTk2Myw3ICsxOTQ5LDcgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShCYXNpY0Jsb2NrJgogLy8gd2UgbmVlZCB0byBjaGVjayB0
aGF0IHRoZXkgYXJlIGNvcnJlY3Qgb24gZnVuY3Rpb24gZW50cnkuCiB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjaGVja0FyZ3VtZW50VHlwZXMoKQogewotICAgIEFTU0VSVCghbV9jb21waWxlSW5kZXgp
OworICAgIEFTU0VSVCghbV9jdXJyZW50Tm9kZSk7CiAgICAgbV9pc0NoZWNraW5nQXJndW1lbnRU
eXBlcyA9IHRydWU7CiAgICAgbV9jb2RlT3JpZ2luRm9yT1NSID0gQ29kZU9yaWdpbigwKTsKIApA
QCAtMTk3MywxNSArMTk1OSwxNCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjaGVja0FyZ3VtZW50
VHlwZXMoCiAgICAgICAgIG1fdmFyaWFibGVzW2ldID0gVmFsdWVTb3VyY2UoVmFsdWVJbkpTU3Rh
Y2spOwogICAgIAogICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbV9qaXQuY29kZUJsb2NrKCktPm51
bVBhcmFtZXRlcnMoKTsgKytpKSB7Ci0gICAgICAgIE5vZGVJbmRleCBub2RlSW5kZXggPSBtX2pp
dC5ncmFwaCgpLm1fYXJndW1lbnRzW2ldOwotICAgICAgICBOb2RlJiBub2RlID0gYXQobm9kZUlu
ZGV4KTsKLSAgICAgICAgQVNTRVJUKG5vZGUub3AoKSA9PSBTZXRBcmd1bWVudCk7Ci0gICAgICAg
IGlmICghbm9kZS5zaG91bGRHZW5lcmF0ZSgpKSB7CisgICAgICAgIE5vZGUqIG5vZGUgPSBtX2pp
dC5ncmFwaCgpLm1fYXJndW1lbnRzW2ldOworICAgICAgICBBU1NFUlQobm9kZS0+b3AoKSA9PSBT
ZXRBcmd1bWVudCk7CisgICAgICAgIGlmICghbm9kZS0+c2hvdWxkR2VuZXJhdGUoKSkgewogICAg
ICAgICAgICAgLy8gVGhlIGFyZ3VtZW50IGlzIGRlYWQuIFdlIGRvbid0IGRvIGFueSBjaGVja3Mg
Zm9yIHN1Y2ggYXJndW1lbnRzLgogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KICAg
ICAgICAgCi0gICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhID0g
bm9kZS52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKKyAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2
YXJpYWJsZUFjY2Vzc0RhdGEgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKICAgICAgICAg
VmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciA9IHZhcmlhYmxlQWNjZXNzRGF0YS0+bG9j
YWwoKTsKICAgICAgICAgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGVkVHlwZSA9IHZhcmlhYmxlQWNj
ZXNzRGF0YS0+cHJlZGljdGlvbigpOwogCkBAIC0xOTg5LDIxICsxOTc0LDIxIEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNoZWNrQXJndW1lbnRUeXBlcygKICAgICAgICAgCiAjaWYgVVNFKEpTVkFM
VUU2NCkKICAgICAgICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbihwcmVkaWN0ZWRUeXBlKSkKLSAg
ICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgdmFsdWVTb3VyY2UsIG5vZGVJbmRl
eCwgbV9qaXQuYnJhbmNoNjQoTWFjcm9Bc3NlbWJsZXI6OkJlbG93LCBKSVRDb21waWxlcjo6YWRk
cmVzc0Zvcih2aXJ0dWFsUmVnaXN0ZXIpLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIp
KTsKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgdmFsdWVTb3VyY2UsIG5v
ZGUsIG1faml0LmJyYW5jaDY0KE1hY3JvQXNzZW1ibGVyOjpCZWxvdywgSklUQ29tcGlsZXI6OmFk
ZHJlc3NGb3IodmlydHVhbFJlZ2lzdGVyKSwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVy
KSk7CiAgICAgICAgIGVsc2UgaWYgKGlzQm9vbGVhblNwZWN1bGF0aW9uKHByZWRpY3RlZFR5cGUp
KSB7CiAgICAgICAgICAgICBHUFJUZW1wb3JhcnkgdGVtcCh0aGlzKTsKICAgICAgICAgICAgIG1f
aml0LmxvYWQ2NChKSVRDb21waWxlcjo6YWRkcmVzc0Zvcih2aXJ0dWFsUmVnaXN0ZXIpLCB0ZW1w
LmdwcigpKTsKICAgICAgICAgICAgIG1faml0LnhvcjY0KFRydXN0ZWRJbW0zMihzdGF0aWNfY2Fz
dDxpbnQzMl90PihWYWx1ZUZhbHNlKSksIHRlbXAuZ3ByKCkpOwotICAgICAgICAgICAgc3BlY3Vs
YXRpb25DaGVjayhCYWRUeXBlLCB2YWx1ZVNvdXJjZSwgbm9kZUluZGV4LCBtX2ppdC5icmFuY2hU
ZXN0NjQoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIHRlbXAuZ3ByKCksIFRydXN0ZWRJbW0zMihz
dGF0aWNfY2FzdDxpbnQzMl90Pih+MSkpKSk7CisgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNr
KEJhZFR5cGUsIHZhbHVlU291cmNlLCBub2RlLCBtX2ppdC5icmFuY2hUZXN0NjQoTWFjcm9Bc3Nl
bWJsZXI6Ok5vblplcm8sIHRlbXAuZ3ByKCksIFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQz
Ml90Pih+MSkpKSk7CiAgICAgICAgIH0gZWxzZSBpZiAoaXNDZWxsU3BlY3VsYXRpb24ocHJlZGlj
dGVkVHlwZSkpCi0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIHZhbHVlU291
cmNlLCBub2RlSW5kZXgsIG1faml0LmJyYW5jaFRlc3Q2NChNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVy
bywgSklUQ29tcGlsZXI6OmFkZHJlc3NGb3IodmlydHVhbFJlZ2lzdGVyKSwgR1BSSW5mbzo6dGFn
TWFza1JlZ2lzdGVyKSk7CisgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIHZh
bHVlU291cmNlLCBub2RlLCBtX2ppdC5icmFuY2hUZXN0NjQoTWFjcm9Bc3NlbWJsZXI6Ok5vblpl
cm8sIEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3RlciksIEdQUkluZm86OnRh
Z01hc2tSZWdpc3RlcikpOwogI2Vsc2UKICAgICAgICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbihw
cmVkaWN0ZWRUeXBlKSkKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgdmFs
dWVTb3VyY2UsIG5vZGVJbmRleCwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVx
dWFsLCBKSVRDb21waWxlcjo6dGFnRm9yKHZpcnR1YWxSZWdpc3RlciksIFRydXN0ZWRJbW0zMihK
U1ZhbHVlOjpJbnQzMlRhZykpKTsKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlw
ZSwgdmFsdWVTb3VyY2UsIG5vZGUsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpOb3RF
cXVhbCwgSklUQ29tcGlsZXI6OnRhZ0Zvcih2aXJ0dWFsUmVnaXN0ZXIpLCBUcnVzdGVkSW1tMzIo
SlNWYWx1ZTo6SW50MzJUYWcpKSk7CiAgICAgICAgIGVsc2UgaWYgKGlzQm9vbGVhblNwZWN1bGF0
aW9uKHByZWRpY3RlZFR5cGUpKQotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBl
LCB2YWx1ZVNvdXJjZSwgbm9kZUluZGV4LCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6
Tm90RXF1YWwsIEpJVENvbXBpbGVyOjp0YWdGb3IodmlydHVhbFJlZ2lzdGVyKSwgVHJ1c3RlZElt
bTMyKEpTVmFsdWU6OkJvb2xlYW5UYWcpKSk7CisgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNr
KEJhZFR5cGUsIHZhbHVlU291cmNlLCBub2RlLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxl
cjo6Tm90RXF1YWwsIEpJVENvbXBpbGVyOjp0YWdGb3IodmlydHVhbFJlZ2lzdGVyKSwgVHJ1c3Rl
ZEltbTMyKEpTVmFsdWU6OkJvb2xlYW5UYWcpKSk7CiAgICAgICAgIGVsc2UgaWYgKGlzQ2VsbFNw
ZWN1bGF0aW9uKHByZWRpY3RlZFR5cGUpKQotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhC
YWRUeXBlLCB2YWx1ZVNvdXJjZSwgbm9kZUluZGV4LCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2Vt
Ymxlcjo6Tm90RXF1YWwsIEpJVENvbXBpbGVyOjp0YWdGb3IodmlydHVhbFJlZ2lzdGVyKSwgVHJ1
c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpKSk7CisgICAgICAgICAgICBzcGVjdWxhdGlvbkNo
ZWNrKEJhZFR5cGUsIHZhbHVlU291cmNlLCBub2RlLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2Vt
Ymxlcjo6Tm90RXF1YWwsIEpJVENvbXBpbGVyOjp0YWdGb3IodmlydHVhbFJlZ2lzdGVyKSwgVHJ1
c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpKSk7CiAjZW5kaWYKICAgICB9CiAgICAgbV9pc0No
ZWNraW5nQXJndW1lbnRUeXBlcyA9IGZhbHNlOwpAQCAtMjAxNiw3ICsyMDAxLDcgQEAgYm9vbCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSgpCiAgICAgaWYgKERGR19FTkFCTEVfRURHRV9DT0RFX1ZF
UklGSUNBVElPTikKICAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tMzIoMCksIEdQUkluZm86
OnJlZ1QwKTsKIAotICAgIEFTU0VSVCghbV9jb21waWxlSW5kZXgpOworICAgIEFTU0VSVCghbV9j
dXJyZW50Tm9kZSk7CiAgICAgZm9yIChtX2Jsb2NrID0gMDsgbV9ibG9jayA8IG1faml0LmdyYXBo
KCkubV9ibG9ja3Muc2l6ZSgpOyArK21fYmxvY2spIHsKICAgICAgICAgbV9qaXQuc2V0Rm9yQmxv
Y2sobV9ibG9jayk7CiAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9qaXQuZ3JhcGgoKS5t
X2Jsb2Nrc1ttX2Jsb2NrXS5nZXQoKTsKQEAgLTIwNzEsMTkgKzIwNTYsMTkgQEAgVmFsdWVSZWNv
dmVyeSBTcGVjdWxhdGl2ZUpJVDo6Y29tcHV0ZVZhbAogICAgICAgICByZXR1cm4gdmFsdWVTb3Vy
Y2UudmFsdWVSZWNvdmVyeSgpOwogICAgICAgICAKICAgICBBU1NFUlQodmFsdWVTb3VyY2Uua2lu
ZCgpID09IEhhdmVOb2RlKTsKLSAgICBOb2RlSW5kZXggbm9kZUluZGV4ID0gdmFsdWVTb3VyY2Uu
aWQoKS5ub2RlSW5kZXgobV9qaXQuZ3JhcGgoKSk7Ci0gICAgaWYgKGlzQ29uc3RhbnQobm9kZUlu
ZGV4KSkKLSAgICAgICAgcmV0dXJuIFZhbHVlUmVjb3Zlcnk6OmNvbnN0YW50KHZhbHVlT2ZKU0Nv
bnN0YW50KG5vZGVJbmRleCkpOworICAgIE5vZGUqIG5vZGUgPSB2YWx1ZVNvdXJjZS5pZCgpLm5v
ZGUobV9qaXQuZ3JhcGgoKSk7CisgICAgaWYgKGlzQ29uc3RhbnQobm9kZSkpCisgICAgICAgIHJl
dHVybiBWYWx1ZVJlY292ZXJ5Ojpjb25zdGFudCh2YWx1ZU9mSlNDb25zdGFudChub2RlKSk7CiAg
ICAgCiAgICAgcmV0dXJuIFZhbHVlUmVjb3ZlcnkoKTsKIH0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZURvdWJsZVB1dEJ5VmFsKE5vZGUmIG5vZGUsIFNwZWN1bGF0ZUNlbGxPcGVyYW5k
JiBiYXNlLCBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQmIHByb3BlcnR5KQordm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZURvdWJsZVB1dEJ5VmFsKE5vZGUqIG5vZGUsIFNwZWN1bGF0ZUNl
bGxPcGVyYW5kJiBiYXNlLCBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQmIHByb3BlcnR5KQog
ewogICAgIEVkZ2UgY2hpbGQzID0gbV9qaXQuZ3JhcGgoKS52YXJBcmdDaGlsZChub2RlLCAyKTsK
ICAgICBFZGdlIGNoaWxkNCA9IG1faml0LmdyYXBoKCkudmFyQXJnQ2hpbGQobm9kZSwgMyk7CiAK
LSAgICBBcnJheU1vZGUgYXJyYXlNb2RlID0gbm9kZS5hcnJheU1vZGUoKTsKKyAgICBBcnJheU1v
ZGUgYXJyYXlNb2RlID0gbm9kZS0+YXJyYXlNb2RlKCk7CiAgICAgCiAgICAgR1BSUmVnIGJhc2VS
ZWcgPSBiYXNlLmdwcigpOwogICAgIEdQUlJlZyBwcm9wZXJ0eVJlZyA9IHByb3BlcnR5Lmdwcigp
OwpAQCAtMjA5Niw3ICsyMDgxLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZURvdWJs
ZVB1dEJ5VgogICAgICAgICAvLyBGSVhNRTogV2UgbmVlZCBhIHdheSBvZiBwcm9maWxpbmcgdGhl
c2UsIGFuZCB3ZSBuZWVkIHRvIGhvaXN0IHRoZW0gaW50bwogICAgICAgICAvLyBTcGVjdWxhdGVE
b3VibGVPcGVyYW5kLgogICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAotICAgICAgICAgICAgQmFk
VHlwZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLAorICAgICAgICAgICAgQmFkVHlwZSwgSlNWYWx1
ZVJlZ3MoKSwgMCwKICAgICAgICAgICAgIG1faml0LmJyYW5jaERvdWJsZShNYWNyb0Fzc2VtYmxl
cjo6RG91YmxlTm90RXF1YWxPclVub3JkZXJlZCwgdmFsdWVSZWcsIHZhbHVlUmVnKSk7CiAgICAg
fQogICAgIApAQCAtMjEwNiwxMyArMjA5MSwxMyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlRG91YmxlUHV0QnlWCiAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBjaGlsZDQp
OwogICAgIEdQUlJlZyBzdG9yYWdlUmVnID0gc3RvcmFnZS5ncHIoKTsKIAotICAgIGlmIChub2Rl
Lm9wKCkgPT0gUHV0QnlWYWxBbGlhcykgeworICAgIGlmIChub2RlLT5vcCgpID09IFB1dEJ5VmFs
QWxpYXMpIHsKICAgICAgICAgLy8gU3RvcmUgdGhlIHZhbHVlIHRvIHRoZSBhcnJheS4KICAgICAg
ICAgR1BSUmVnIHByb3BlcnR5UmVnID0gcHJvcGVydHkuZ3ByKCk7CiAgICAgICAgIEZQUlJlZyB2
YWx1ZVJlZyA9IHZhbHVlLmZwcigpOwogICAgICAgICBtX2ppdC5zdG9yZURvdWJsZSh2YWx1ZVJl
ZywgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFj
cm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQpKTsKICAgICAgICAgCi0gICAgICAgIG5vUmVzdWx0KG1f
Y29tcGlsZUluZGV4KTsKKyAgICAgICAgbm9SZXN1bHQobV9jdXJyZW50Tm9kZSk7CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAgICAgCkBAIC0yMTIzLDcgKzIxMDgsNyBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlRG91YmxlUHV0QnlWCiAgICAgCiAgICAgaWYgKGFycmF5TW9kZS5pc0lu
Qm91bmRzKCkpIHsKICAgICAgICAgc3BlY3VsYXRpb25DaGVjaygKLSAgICAgICAgICAgIFN0b3Jl
VG9Ib2xlT3JPdXRPZkJvdW5kcywgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLAorICAgICAgICAgICAg
U3RvcmVUb0hvbGVPck91dE9mQm91bmRzLCBKU1ZhbHVlUmVncygpLCAwLAogICAgICAgICAgICAg
bV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcs
IE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQ
dWJsaWNMZW5ndGgoKSkpKTsKICAgICB9IGVsc2UgewogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
SnVtcCBpbkJvdW5kcyA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpCZWxvdywgcHJv
cGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEJ1dHRlcmZseTo6
b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpOwpAQCAtMjEzMSw3ICsyMTE2LDcgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZURvdWJsZVB1dEJ5VgogICAgICAgICBzbG93Q2FzZSA9IG1faml0
LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBCdXR0ZXJmbHk6Om9mZnNldE9mVmVjdG9y
TGVuZ3RoKCkpKTsKICAgICAgICAgCiAgICAgICAgIGlmICghYXJyYXlNb2RlLmlzT3V0T2ZCb3Vu
ZHMoKSkKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soT3V0T2ZCb3VuZHMsIEpTVmFsdWVS
ZWdzKCksIE5vTm9kZSwgc2xvd0Nhc2UpOworICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhP
dXRPZkJvdW5kcywgSlNWYWx1ZVJlZ3MoKSwgMCwgc2xvd0Nhc2UpOwogICAgICAgICAKICAgICAg
ICAgbV9qaXQuYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBwcm9wZXJ0eVJlZywgdGVtcG9yYXJ5UmVn
KTsKICAgICAgICAgbV9qaXQuc3RvcmUzMih0ZW1wb3JhcnlSZWcsIE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKHN0b3JhZ2VSZWcsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpOwpA
QCAtMjE1NCwyMyArMjEzOSwyMyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlRG91Ymxl
UHV0QnlWCiAgICAgICAgICAgICAgICAgTm9SZXN1bHQsIGJhc2VSZWcsIHByb3BlcnR5UmVnLCB2
YWx1ZVJlZykpOwogICAgIH0KIAotICAgIG5vUmVzdWx0KG1fY29tcGlsZUluZGV4LCBVc2VDaGls
ZHJlbkNhbGxlZEV4cGxpY2l0bHkpOworICAgIG5vUmVzdWx0KG1fY3VycmVudE5vZGUsIFVzZUNo
aWxkcmVuQ2FsbGVkRXhwbGljaXRseSk7CiB9CiAKLXZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVHZXRDaGFyQ29kZUF0KE5vZGUmIG5vZGUpCit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
R2V0Q2hhckNvZGVBdChOb2RlKiBub2RlKQogewotICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIHN0
cmluZyh0aGlzLCBub2RlLmNoaWxkMSgpKTsKLSAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJh
bmQgaW5kZXgodGhpcywgbm9kZS5jaGlsZDIoKSk7Ci0gICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFn
ZSh0aGlzLCBub2RlLmNoaWxkMygpKTsKKyAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBzdHJpbmco
dGhpcywgbm9kZS0+Y2hpbGQxKCkpOworICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBp
bmRleCh0aGlzLCBub2RlLT5jaGlsZDIoKSk7CisgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0
aGlzLCBub2RlLT5jaGlsZDMoKSk7CiAKICAgICBHUFJSZWcgc3RyaW5nUmVnID0gc3RyaW5nLmdw
cigpOwogICAgIEdQUlJlZyBpbmRleFJlZyA9IGluZGV4LmdwcigpOwogICAgIEdQUlJlZyBzdG9y
YWdlUmVnID0gc3RvcmFnZS5ncHIoKTsKICAgICAKLSAgICBBU1NFUlQoc3BlY3VsYXRpb25DaGVj
a2VkKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUsIFNwZWNTdHJpbmcpKTsK
KyAgICBBU1NFUlQoc3BlY3VsYXRpb25DaGVja2VkKG1fc3RhdGUuZm9yTm9kZShub2RlLT5jaGls
ZDEoKSkubV90eXBlLCBTcGVjU3RyaW5nKSk7CiAKICAgICAvLyB1bnNpZ25lZCBjb21wYXJpc29u
IHNvIHdlIGNhbiBmaWx0ZXIgb3V0IG5lZ2F0aXZlIGluZGljZXMgYW5kIGluZGljZXMgdGhhdCBh
cmUgdG9vIGxhcmdlCi0gICAgc3BlY3VsYXRpb25DaGVjayhVbmNvdW50YWJsZSwgSlNWYWx1ZVJl
Z3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFs
LCBpbmRleFJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RyaW5nUmVnLCBKU1N0cmluZzo6
b2Zmc2V0T2ZMZW5ndGgoKSkpKTsKKyAgICBzcGVjdWxhdGlvbkNoZWNrKFVuY291bnRhYmxlLCBK
U1ZhbHVlUmVncygpLCAwLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVx
dWFsLCBpbmRleFJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RyaW5nUmVnLCBKU1N0cmlu
Zzo6b2Zmc2V0T2ZMZW5ndGgoKSkpKTsKIAogICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMp
OwogICAgIEdQUlJlZyBzY3JhdGNoUmVnID0gc2NyYXRjaC5ncHIoKTsKQEAgLTIxODksMjIgKzIx
NzQsMjIgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldENoYXJDb2RlQQogCiAgICAg
Y29udDhCaXQubGluaygmbV9qaXQpOwogCi0gICAgaW50ZWdlclJlc3VsdChzY3JhdGNoUmVnLCBt
X2NvbXBpbGVJbmRleCk7CisgICAgaW50ZWdlclJlc3VsdChzY3JhdGNoUmVnLCBtX2N1cnJlbnRO
b2RlKTsKIH0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25TdHJpbmco
Tm9kZSYgbm9kZSkKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uU3RyaW5n
KE5vZGUqIG5vZGUpCiB7Ci0gICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2Rl
LmNoaWxkMSgpKTsKLSAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhp
cywgbm9kZS5jaGlsZDIoKSk7Ci0gICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBub2Rl
LmNoaWxkMygpKTsKKyAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUtPmNo
aWxkMSgpKTsKKyAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhpcywg
bm9kZS0+Y2hpbGQyKCkpOworICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgbm9kZS0+
Y2hpbGQzKCkpOwogICAgIEdQUlJlZyBiYXNlUmVnID0gYmFzZS5ncHIoKTsKICAgICBHUFJSZWcg
cHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIoKTsKICAgICBHUFJSZWcgc3RvcmFnZVJlZyA9IHN0
b3JhZ2UuZ3ByKCk7CiAKLSAgICBBU1NFUlQoQXJyYXlNb2RlKEFycmF5OjpTdHJpbmcpLmFscmVh
ZHlDaGVja2VkKG1faml0LmdyYXBoKCksIG5vZGUsIG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxk
MSgpKSkpOworICAgIEFTU0VSVChBcnJheU1vZGUoQXJyYXk6OlN0cmluZykuYWxyZWFkeUNoZWNr
ZWQobV9qaXQuZ3JhcGgoKSwgbm9kZSwgbV9zdGF0ZS5mb3JOb2RlKG5vZGUtPmNoaWxkMSgpKSkp
OwogCiAgICAgLy8gdW5zaWduZWQgY29tcGFyaXNvbiBzbyB3ZSBjYW4gZmlsdGVyIG91dCBuZWdh
dGl2ZSBpbmRpY2VzIGFuZCBpbmRpY2VzIHRoYXQgYXJlIHRvbyBsYXJnZQotICAgIHNwZWN1bGF0
aW9uQ2hlY2soVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNo
MzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKGJhc2VSZWcsIEpTU3RyaW5nOjpvZmZzZXRPZkxlbmd0aCgpKSkpOworICAg
IHNwZWN1bGF0aW9uQ2hlY2soVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIDAsIG1faml0LmJy
YW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBKU1N0cmluZzo6b2Zmc2V0T2ZMZW5ndGgoKSkpKTsK
IAogICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOwogICAgIEdQUlJlZyBzY3JhdGNoUmVn
ID0gc2NyYXRjaC5ncHIoKTsKQEAgLTIyMjIsNyArMjIwNyw3IEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVHZXRCeVZhbE9uU3QKICAgICBtX2ppdC5sb2FkMTYoTWFjcm9Bc3NlbWJsZXI6
OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVz
VHdvLCAwKSwgc2NyYXRjaFJlZyk7CiAKICAgICAvLyBXZSBvbmx5IHN1cHBvcnQgYXNjaWkgY2hh
cmFjdGVycwotICAgIHNwZWN1bGF0aW9uQ2hlY2soVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCks
IE5vTm9kZSwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgc2Ny
YXRjaFJlZywgVHJ1c3RlZEltbTMyKDB4MTAwKSkpOworICAgIHNwZWN1bGF0aW9uQ2hlY2soVW5j
b3VudGFibGUsIEpTVmFsdWVSZWdzKCksIDAsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVy
OjpBYm92ZU9yRXF1YWwsIHNjcmF0Y2hSZWcsIFRydXN0ZWRJbW0zMigweDEwMCkpKTsKIAogICAg
IC8vIDggYml0IHN0cmluZyB2YWx1ZXMgZG9uJ3QgbmVlZCB0aGUgaXNBU0NJSSBjaGVjay4KICAg
ICBjb250OEJpdC5saW5rKCZtX2ppdCk7CkBAIC0yMjMxLDI4ICsyMjE2LDI3IEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uU3QKICAgICBHUFJSZWcgc21hbGxTdHJpbmdz
UmVnID0gc21hbGxTdHJpbmdzLmdwcigpOwogICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6
OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5zbWFsbFN0cmluZ3Muc2luZ2xlQ2hh
cmFjdGVyU3RyaW5ncygpKSwgc21hbGxTdHJpbmdzUmVnKTsKICAgICBtX2ppdC5sb2FkUHRyKE1h
Y3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc21hbGxTdHJpbmdzUmVnLCBzY3JhdGNoUmVnLCBNYWNy
b0Fzc2VtYmxlcjo6U2NhbGVQdHIsIDApLCBzY3JhdGNoUmVnKTsKLSAgICBzcGVjdWxhdGlvbkNo
ZWNrKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaFRlc3Qz
MihNYWNyb0Fzc2VtYmxlcjo6WmVybywgc2NyYXRjaFJlZykpOwotICAgIGNlbGxSZXN1bHQoc2Ny
YXRjaFJlZywgbV9jb21waWxlSW5kZXgpOworICAgIHNwZWN1bGF0aW9uQ2hlY2soVW5jb3VudGFi
bGUsIEpTVmFsdWVSZWdzKCksIDAsIG1faml0LmJyYW5jaFRlc3QzMihNYWNyb0Fzc2VtYmxlcjo6
WmVybywgc2NyYXRjaFJlZykpOworICAgIGNlbGxSZXN1bHQoc2NyYXRjaFJlZywgbV9jdXJyZW50
Tm9kZSk7CiB9CiAKLUdlbmVyYXRlZE9wZXJhbmRUeXBlIFNwZWN1bGF0aXZlSklUOjpjaGVja0dl
bmVyYXRlZFR5cGVGb3JUb0ludDMyKE5vZGVJbmRleCBub2RlSW5kZXgpCitHZW5lcmF0ZWRPcGVy
YW5kVHlwZSBTcGVjdWxhdGl2ZUpJVDo6Y2hlY2tHZW5lcmF0ZWRUeXBlRm9yVG9JbnQzMihOb2Rl
KiBub2RlKQogewogI2lmIERGR19FTkFCTEUoREVCVUdfVkVSQk9TRSkKLSAgICBkYXRhTG9nRigi
Y2hlY2tHZW5lcmF0ZWRUeXBlRm9yVG9JbnQzMkAlZCAgICIsIG5vZGVJbmRleCk7CisgICAgZGF0
YUxvZ0YoImNoZWNrR2VuZXJhdGVkVHlwZUZvclRvSW50MzJAJWQgICAiLCBub2RlLT5pbmRleCgp
KTsKICNlbmRpZgotICAgIE5vZGUmIG5vZGUgPSBhdChub2RlSW5kZXgpOwotICAgIFZpcnR1YWxS
ZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIgPSBub2RlLnZpcnR1YWxSZWdpc3RlcigpOworICAgIFZp
cnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIgPSBub2RlLT52aXJ0dWFsUmVnaXN0ZXIoKTsK
ICAgICBHZW5lcmF0aW9uSW5mbyYgaW5mbyA9IG1fZ2VuZXJhdGlvbkluZm9bdmlydHVhbFJlZ2lz
dGVyXTsKIAogICAgIGlmIChpbmZvLnJlZ2lzdGVyRm9ybWF0KCkgPT0gRGF0YUZvcm1hdE5vbmUp
IHsKLSAgICAgICAgaWYgKG5vZGUuaGFzQ29uc3RhbnQoKSkgewotICAgICAgICAgICAgaWYgKGlz
SW50MzJDb25zdGFudChub2RlSW5kZXgpKQorICAgICAgICBpZiAobm9kZS0+aGFzQ29uc3RhbnQo
KSkgeworICAgICAgICAgICAgaWYgKGlzSW50MzJDb25zdGFudChub2RlKSkKICAgICAgICAgICAg
ICAgICByZXR1cm4gR2VuZXJhdGVkT3BlcmFuZEludGVnZXI7CiAKLSAgICAgICAgICAgIGlmIChp
c051bWJlckNvbnN0YW50KG5vZGVJbmRleCkpCisgICAgICAgICAgICBpZiAoaXNOdW1iZXJDb25z
dGFudChub2RlKSkKICAgICAgICAgICAgICAgICByZXR1cm4gR2VuZXJhdGVkT3BlcmFuZERvdWJs
ZTsKIAotICAgICAgICAgICAgdGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oVW5jb3VudGFi
bGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSk7CisgICAgICAgICAgICB0ZXJtaW5hdGVTcGVjdWxh
dGl2ZUV4ZWN1dGlvbihVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgMCk7CiAgICAgICAgICAg
ICByZXR1cm4gR2VuZXJhdGVkT3BlcmFuZFR5cGVVbmtub3duOwogICAgICAgICB9CiAKQEAgLTIy
NjYsNyArMjI1MCw3IEBAIEdlbmVyYXRlZE9wZXJhbmRUeXBlIFNwZWN1bGF0aXZlSklUOjpjaGUK
ICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKIAogICAgIGNhc2UgRGF0YUZv
cm1hdENlbGw6Ci0gICAgICAgIHRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKFVuY291bnRh
YmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUpOworICAgICAgICB0ZXJtaW5hdGVTcGVjdWxhdGl2
ZUV4ZWN1dGlvbihVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgMCk7CiAgICAgICAgIHJldHVy
biBHZW5lcmF0ZWRPcGVyYW5kVHlwZVVua25vd247CiAKICAgICBjYXNlIERhdGFGb3JtYXROb25l
OgpAQCAtMjI4OSw0MSArMjI3Myw0MSBAQCBHZW5lcmF0ZWRPcGVyYW5kVHlwZSBTcGVjdWxhdGl2
ZUpJVDo6Y2hlCiAgICAgfQogfQogCi12b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlVmFsdWVU
b0ludDMyKE5vZGUmIG5vZGUpCit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlVmFsdWVUb0lu
dDMyKE5vZGUqIG5vZGUpCiB7Ci0gICAgaWYgKGF0KG5vZGUuY2hpbGQxKCkpLnNob3VsZFNwZWN1
bGF0ZUludGVnZXIoKSkgewotICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDEodGhp
cywgbm9kZS5jaGlsZDEoKSk7CisgICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxh
dGVJbnRlZ2VyKCkpIHsKKyAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AxKHRoaXMs
IG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBvcDEp
OwogICAgICAgICBtX2ppdC5tb3ZlKG9wMS5ncHIoKSwgcmVzdWx0LmdwcigpKTsKLSAgICAgICAg
aW50ZWdlclJlc3VsdChyZXN1bHQuZ3ByKCksIG1fY29tcGlsZUluZGV4LCBvcDEuZm9ybWF0KCkp
OworICAgICAgICBpbnRlZ2VyUmVzdWx0KHJlc3VsdC5ncHIoKSwgbm9kZSwgb3AxLmZvcm1hdCgp
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKLSAgICBpZiAoYXQobm9kZS5jaGlsZDEo
KSkuc2hvdWxkU3BlY3VsYXRlTnVtYmVyKCkpIHsKLSAgICAgICAgc3dpdGNoIChjaGVja0dlbmVy
YXRlZFR5cGVGb3JUb0ludDMyKG5vZGUuY2hpbGQxKCkuaW5kZXgoKSkpIHsKKyAgICBpZiAobm9k
ZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZU51bWJlcigpKSB7CisgICAgICAgIHN3aXRjaCAo
Y2hlY2tHZW5lcmF0ZWRUeXBlRm9yVG9JbnQzMihub2RlLT5jaGlsZDEoKS5ub2RlKCkpKSB7CiAg
ICAgICAgIGNhc2UgR2VuZXJhdGVkT3BlcmFuZEludGVnZXI6IHsKLSAgICAgICAgICAgIFNwZWN1
bGF0ZUludGVnZXJPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKKyAgICAgICAgICAg
IFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CiAgICAg
ICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIG9wMSk7CiAgICAgICAgICAgICBtX2pp
dC5tb3ZlKG9wMS5ncHIoKSwgcmVzdWx0LmdwcigpKTsKLSAgICAgICAgICAgIGludGVnZXJSZXN1
bHQocmVzdWx0LmdwcigpLCBtX2NvbXBpbGVJbmRleCwgb3AxLmZvcm1hdCgpKTsKKyAgICAgICAg
ICAgIGludGVnZXJSZXN1bHQocmVzdWx0LmdwcigpLCBub2RlLCBvcDEuZm9ybWF0KCkpOwogICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgR2VuZXJhdGVkT3BlcmFu
ZERvdWJsZTogewogICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKLSAgICAg
ICAgICAgIERvdWJsZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKCkpOworICAgICAgICAg
ICAgRG91YmxlT3BlcmFuZCBvcDEodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICAgICAg
RlBSUmVnIGZwciA9IG9wMS5mcHIoKTsKICAgICAgICAgICAgIEdQUlJlZyBncHIgPSByZXN1bHQu
Z3ByKCk7CiAgICAgICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBub3RUcnVuY2F0ZWRUb0ludGVn
ZXIgPSBtX2ppdC5icmFuY2hUcnVuY2F0ZURvdWJsZVRvSW50MzIoZnByLCBncHIsIEpJVENvbXBp
bGVyOjpCcmFuY2hJZlRydW5jYXRlRmFpbGVkKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAg
YWRkU2xvd1BhdGhHZW5lcmF0b3Ioc2xvd1BhdGhDYWxsKG5vdFRydW5jYXRlZFRvSW50ZWdlciwg
dGhpcywgdG9JbnQzMiwgZ3ByLCBmcHIpKTsKIAotICAgICAgICAgICAgaW50ZWdlclJlc3VsdChn
cHIsIG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAgICAgIGludGVnZXJSZXN1bHQoZ3ByLCBub2Rl
KTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICBjYXNlIEdlbmVyYXRl
ZE9wZXJhbmRKU1ZhbHVlOiB7CiAgICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMp
OwogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgICAgICBKU1ZhbHVlT3BlcmFuZCBvcDEodGhp
cywgbm9kZS5jaGlsZDEoKSk7CisgICAgICAgICAgICBKU1ZhbHVlT3BlcmFuZCBvcDEodGhpcywg
bm9kZS0+Y2hpbGQxKCkpOwogCiAgICAgICAgICAgICBHUFJSZWcgZ3ByID0gb3AxLmdwcigpOwog
ICAgICAgICAgICAgR1BSUmVnIHJlc3VsdEdwciA9IHJlc3VsdC5ncHIoKTsKQEAgLTIzMzIsOCAr
MjMxNiw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVWYWx1ZVRvSW50MzIKIAogICAg
ICAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgaXNJbnRlZ2VyID0gbV9qaXQuYnJhbmNoNjQoTWFj
cm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgZ3ByLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVn
aXN0ZXIpOwogCi0gICAgICAgICAgICBpZiAoIWlzTnVtYmVyU3BlY3VsYXRpb24obV9zdGF0ZS5m
b3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpCi0gICAgICAgICAgICAgICAgc3BlY3VsYXRp
b25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyhncHIpLCBub2RlLmNoaWxkMSgpLmluZGV4KCks
IG1faml0LmJyYW5jaFRlc3Q2NChNYWNyb0Fzc2VtYmxlcjo6WmVybywgZ3ByLCBHUFJJbmZvOjp0
YWdUeXBlTnVtYmVyUmVnaXN0ZXIpKTsKKyAgICAgICAgICAgIGlmICghaXNOdW1iZXJTcGVjdWxh
dGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fdHlwZSkpCisgICAgICAgICAg
ICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyhncHIpLCBub2RlLT5j
aGlsZDEoKSwgbV9qaXQuYnJhbmNoVGVzdDY0KE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBncHIsIEdQ
UkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlcikpOwogCiAgICAgICAgICAgICAvLyBGaXJzdCwg
aWYgd2UgZ2V0IGhlcmUgd2UgaGF2ZSBhIGRvdWJsZSBlbmNvZGVkIGFzIGEgSlNWYWx1ZQogICAg
ICAgICAgICAgbV9qaXQubW92ZShncHIsIHJlc3VsdEdwcik7CkBAIC0yMzUwLDExICsyMzM0LDEx
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVWYWx1ZVRvSW50MzIKIAogICAgICAgICAg
ICAgY29udmVydGVkLmxpbmsoJm1faml0KTsKICNlbHNlCi0gICAgICAgICAgICBOb2RlJiBjaGls
ZE5vZGUgPSBhdChub2RlLmNoaWxkMSgpLmluZGV4KCkpOwotICAgICAgICAgICAgVmlydHVhbFJl
Z2lzdGVyIHZpcnR1YWxSZWdpc3RlciA9IGNoaWxkTm9kZS52aXJ0dWFsUmVnaXN0ZXIoKTsKKyAg
ICAgICAgICAgIE5vZGUqIGNoaWxkTm9kZSA9IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKKyAgICAg
ICAgICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIgPSBjaGlsZE5vZGUtPnZpcnR1
YWxSZWdpc3RlcigpOwogICAgICAgICAgICAgR2VuZXJhdGlvbkluZm8mIGluZm8gPSBtX2dlbmVy
YXRpb25JbmZvW3ZpcnR1YWxSZWdpc3Rlcl07CiAKLSAgICAgICAgICAgIEpTVmFsdWVPcGVyYW5k
IG9wMSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKKyAgICAgICAgICAgIEpTVmFsdWVPcGVyYW5kIG9w
MSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CiAKICAgICAgICAgICAgIEdQUlJlZyBwYXlsb2FkR1BS
ID0gb3AxLnBheWxvYWRHUFIoKTsKICAgICAgICAgICAgIEdQUlJlZyByZXN1bHRHcHIgPSByZXN1
bHQuZ3ByKCk7CkBAIC0yMzY5LDggKzIzNTMsOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlVmFsdWVUb0ludDMyCiAKICAgICAgICAgICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBpc0lu
dGVnZXIgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIHRhZ0dQUiwgVHJ1
c3RlZEltbTMyKEpTVmFsdWU6OkludDMyVGFnKSk7CiAKLSAgICAgICAgICAgICAgICBpZiAoIWlz
TnVtYmVyU3BlY3VsYXRpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkp
Ci0gICAgICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJl
Z3ModGFnR1BSLCBwYXlsb2FkR1BSKSwgbm9kZS5jaGlsZDEoKS5pbmRleCgpLCBtX2ppdC5icmFu
Y2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCB0YWdHUFIsIFRydXN0ZWRJbW0zMihK
U1ZhbHVlOjpMb3dlc3RUYWcpKSk7CisgICAgICAgICAgICAgICAgaWYgKCFpc051bWJlclNwZWN1
bGF0aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLT5jaGlsZDEoKSkubV90eXBlKSkKKyAgICAgICAg
ICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyh0YWdHUFIs
IHBheWxvYWRHUFIpLCBub2RlLT5jaGlsZDEoKSwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJs
ZXI6OkFib3ZlT3JFcXVhbCwgdGFnR1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6TG93ZXN0VGFn
KSkpOwogCiAgICAgICAgICAgICAgICAgdW5ib3hEb3VibGUodGFnR1BSLCBwYXlsb2FkR1BSLCBm
cHIsIHNjcmF0Y2guZnByKCkpOwogCkBAIC0yMzg2LDcgKzIzNzAsNyBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlVmFsdWVUb0ludDMyCiAgICAgICAgICAgICAgICAgY29udmVydGVkLmxp
bmsoJm1faml0KTsKICAgICAgICAgICAgIH0KICNlbmRpZgotICAgICAgICAgICAgaW50ZWdlclJl
c3VsdChyZXN1bHRHcHIsIG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAgICAgIGludGVnZXJSZXN1
bHQocmVzdWx0R3ByLCBub2RlKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAg
ICAgICBjYXNlIEdlbmVyYXRlZE9wZXJhbmRUeXBlVW5rbm93bjoKQEAgLTIzOTUsMTQgKzIzNzks
MTQgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVZhbHVlVG9JbnQzMgogICAgICAgICB9
CiAgICAgfQogICAgIAotICAgIGlmIChhdChub2RlLmNoaWxkMSgpKS5zaG91bGRTcGVjdWxhdGVC
b29sZWFuKCkpIHsKLSAgICAgICAgU3BlY3VsYXRlQm9vbGVhbk9wZXJhbmQgb3AxKHRoaXMsIG5v
ZGUuY2hpbGQxKCkpOworICAgIGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlQm9v
bGVhbigpKSB7CisgICAgICAgIFNwZWN1bGF0ZUJvb2xlYW5PcGVyYW5kIG9wMSh0aGlzLCBub2Rl
LT5jaGlsZDEoKSk7CiAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgb3AxKTsKICAg
ICAgICAgCiAgICAgICAgIG1faml0Lm1vdmUob3AxLmdwcigpLCByZXN1bHQuZ3ByKCkpOwogICAg
ICAgICBtX2ppdC5hbmQzMihKSVRDb21waWxlcjo6VHJ1c3RlZEltbTMyKDEpLCByZXN1bHQuZ3By
KCkpOwogICAgICAgICAKLSAgICAgICAgaW50ZWdlclJlc3VsdChyZXN1bHQuZ3ByKCksIG1fY29t
cGlsZUluZGV4KTsKKyAgICAgICAgaW50ZWdlclJlc3VsdChyZXN1bHQuZ3ByKCksIG5vZGUpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQogICAgIApAQCAtMjQxMSwxMyArMjM5NSwxMyBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlVmFsdWVUb0ludDMyCiAgICAgcmV0dXJuOwogfQogCi12
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlVUludDMyVG9OdW1iZXIoTm9kZSYgbm9kZSkKK3Zv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVVSW50MzJUb051bWJlcihOb2RlKiBub2RlKQogewot
ICAgIGlmICghbm9kZUNhblNwZWN1bGF0ZUludGVnZXIobm9kZS5hcml0aE5vZGVGbGFncygpKSkg
eworICAgIGlmICghbm9kZUNhblNwZWN1bGF0ZUludGVnZXIobm9kZS0+YXJpdGhOb2RlRmxhZ3Mo
KSkpIHsKICAgICAgICAgLy8gV2Uga25vdyB0aGF0IHRoaXMgc29tZXRpbWVzIHByb2R1Y2VzIGRv
dWJsZXMuIFNvIHByb2R1Y2UgYSBkb3VibGUgZXZlcnkKICAgICAgICAgLy8gdGltZS4gVGhpcyBh
dCBsZWFzdCBhbGxvd3Mgc3Vic2VxdWVudCBjb2RlIHRvIG5vdCBoYXZlIHdlaXJkIGNvbmRpdGlv
bmFscy4KICAgICAgICAgICAgIAotICAgICAgICBJbnRlZ2VyT3BlcmFuZCBvcDEodGhpcywgbm9k
ZS5jaGlsZDEoKSk7CisgICAgICAgIEludGVnZXJPcGVyYW5kIG9wMSh0aGlzLCBub2RlLT5jaGls
ZDEoKSk7CiAgICAgICAgIEZQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CiAgICAgICAgICAgICAK
ICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gb3AxLmdwcigpOwpAQCAtMjQyOSwxMSArMjQxMywx
MSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlVUludDMyVG9OdW1iCiAgICAgICAgIG1f
aml0LmFkZERvdWJsZShKSVRDb21waWxlcjo6QWJzb2x1dGVBZGRyZXNzKCZBc3NlbWJseUhlbHBl
cnM6OnR3b1RvVGhlMzIpLCBvdXRwdXRGUFIpOwogICAgICAgICBwb3NpdGl2ZS5saW5rKCZtX2pp
dCk7CiAgICAgICAgICAgICAKLSAgICAgICAgZG91YmxlUmVzdWx0KG91dHB1dEZQUiwgbV9jb21w
aWxlSW5kZXgpOworICAgICAgICBkb3VibGVSZXN1bHQob3V0cHV0RlBSLCBub2RlKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIAotICAgIEludGVnZXJPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNo
aWxkMSgpKTsKKyAgICBJbnRlZ2VyT3BlcmFuZCBvcDEodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwog
ICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7IC8vIEZvciB0aGUgYmVuZWZpdCBvZiBPU1Ig
ZXhpdCwgZm9yY2UgdGhlc2UgdG8gYmUgaW4gZGlmZmVyZW50IHJlZ2lzdGVycy4gSW4gcmVhbGl0
eSB0aGUgT1NSIGV4aXQgY29tcGlsZXIgY291bGQgZmluZCBjYXNlcyB3aGVyZSB5b3UgaGF2ZSB1
aW50MzIoJXIxKSBmb2xsb3dlZCBieSBpbnQzMiglcjEpIGFuZCB0aGVuIHVzZSBkaWZmZXJlbnQg
cmVnaXN0ZXJzLCBidXQgdGhhdCBzZWVtcyBsaWtlIHRvbyBtdWNoIGVmZm9ydC4KIAogICAgIG1f
aml0Lm1vdmUob3AxLmdwcigpLCByZXN1bHQuZ3ByKCkpOwpAQCAtMjQ0MywxNCArMjQyNywxNCBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlVUludDMyVG9OdW1iCiAgICAgLy8gaW5zdHJ1
Y3Rpb24gdGhhdCBmb2xsb3dzIHVzLCByYXRoZXIgdGhhbiB0aGUgb25lIHdlJ3JlIGV4ZWN1dGlu
ZyByaWdodCBub3cuIFdlIGhhdmUKICAgICAvLyB0byBkbyB0aGlzIGJlY2F1c2UgYnkgdGhpcyBw
b2ludCwgdGhlIG9yaWdpbmFsIHZhbHVlcyBuZWNlc3NhcnkgdG8gY29tcGlsZSB3aGF0ZXZlcgog
ICAgIC8vIG9wZXJhdGlvbiB0aGUgVUludDMyVG9OdW1iZXIgb3JpZ2luYXRlZCBmcm9tIG1pZ2h0
IGJlIGRlYWQuCi0gICAgZm9yd2FyZFNwZWN1bGF0aW9uQ2hlY2soT3ZlcmZsb3csIEpTVmFsdWVS
ZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Okxlc3NUaGFuLCBy
ZXN1bHQuZ3ByKCksIFRydXN0ZWRJbW0zMigwKSksIFZhbHVlUmVjb3Zlcnk6OnVpbnQzMkluR1BS
KHJlc3VsdC5ncHIoKSkpOworICAgIGZvcndhcmRTcGVjdWxhdGlvbkNoZWNrKE92ZXJmbG93LCBK
U1ZhbHVlUmVncygpLCAwLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6TGVzc1RoYW4s
IHJlc3VsdC5ncHIoKSwgVHJ1c3RlZEltbTMyKDApKSwgVmFsdWVSZWNvdmVyeTo6dWludDMySW5H
UFIocmVzdWx0LmdwcigpKSk7CiAKLSAgICBpbnRlZ2VyUmVzdWx0KHJlc3VsdC5ncHIoKSwgbV9j
b21waWxlSW5kZXgsIG9wMS5mb3JtYXQoKSk7CisgICAgaW50ZWdlclJlc3VsdChyZXN1bHQuZ3By
KCksIG5vZGUsIG9wMS5mb3JtYXQoKSk7CiB9CiAKLXZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVEb3VibGVBc0ludDMyKE5vZGUmIG5vZGUpCit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
RG91YmxlQXNJbnQzMihOb2RlKiBub2RlKQogewotICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQg
b3AxKHRoaXMsIG5vZGUuY2hpbGQxKCkpOworICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgb3Ax
KHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKICAgICBGUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsK
ICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwogICAgIApAQCAtMjQ2MCwzNyArMjQ0NCwz
NyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlRG91YmxlQXNJbnQzCiAKICAgICBKSVRD
b21waWxlcjo6SnVtcExpc3QgZmFpbHVyZUNhc2VzOwogICAgIG1faml0LmJyYW5jaENvbnZlcnRE
b3VibGVUb0ludDMyKHZhbHVlRlBSLCByZXN1bHRHUFIsIGZhaWx1cmVDYXNlcywgc2NyYXRjaEZQ
Uik7Ci0gICAgZm9yd2FyZFNwZWN1bGF0aW9uQ2hlY2soT3ZlcmZsb3csIEpTVmFsdWVSZWdzKCks
IE5vTm9kZSwgZmFpbHVyZUNhc2VzLCBWYWx1ZVJlY292ZXJ5OjppbkZQUih2YWx1ZUZQUikpOwor
ICAgIGZvcndhcmRTcGVjdWxhdGlvbkNoZWNrKE92ZXJmbG93LCBKU1ZhbHVlUmVncygpLCAwLCBm
YWlsdXJlQ2FzZXMsIFZhbHVlUmVjb3Zlcnk6OmluRlBSKHZhbHVlRlBSKSk7CiAKLSAgICBpbnRl
Z2VyUmVzdWx0KHJlc3VsdEdQUiwgbV9jb21waWxlSW5kZXgpOworICAgIGludGVnZXJSZXN1bHQo
cmVzdWx0R1BSLCBub2RlKTsKIH0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUludDMy
VG9Eb3VibGUoTm9kZSYgbm9kZSkKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVJbnQzMlRv
RG91YmxlKE5vZGUqIG5vZGUpCiB7CiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICAvLyBPbiBKU1ZB
TFVFNjQgd2UgaGF2ZSBhIHdheSBvZiBsb2FkaW5nIGRvdWJsZSBjb25zdGFudHMgaW4gYSBtb3Jl
IGRpcmVjdCBtYW5uZXIKICAgICAvLyB0aGFuIGEgaW50LT5kb3VibGUgY29udmVyc2lvbi4gT24g
MzJfNjQsIHVuZm9ydHVuYXRlbHksIHdlIGN1cnJlbnRseSBkb24ndCBoYXZlCiAgICAgLy8gYW55
IHN1Y2ggbWVjaGFuaXNtIC0gdGhvdWdoIHdlIGNvdWxkIGhhdmUgaXQsIGlmIHdlIGp1c3QgcHJv
dmlzaW9uZWQgc29tZSBtZW1vcnkKICAgICAvLyBpbiBDb2RlQmxvY2sgZm9yIHRoZSBkb3VibGUg
Zm9ybSBvZiBpbnRlZ2VyIGNvbnN0YW50cy4KLSAgICBpZiAoaXNJbnQzMkNvbnN0YW50KG5vZGUu
Y2hpbGQxKCkuaW5kZXgoKSkpIHsKKyAgICBpZiAoaXNJbnQzMkNvbnN0YW50KG5vZGUtPmNoaWxk
MSgpLm5vZGUoKSkpIHsKICAgICAgICAgRlBSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKICAgICAg
ICAgR1BSVGVtcG9yYXJ5IHRlbXAodGhpcyk7Ci0gICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3Nl
bWJsZXI6OkltbTY0KHJlaW50ZXJwcmV0RG91YmxlVG9JbnQ2NCh2YWx1ZU9mTnVtYmVyQ29uc3Rh
bnQobm9kZS5jaGlsZDEoKS5pbmRleCgpKSkpLCB0ZW1wLmdwcigpKTsKKyAgICAgICAgbV9qaXQu
bW92ZShNYWNyb0Fzc2VtYmxlcjo6SW1tNjQocmVpbnRlcnByZXREb3VibGVUb0ludDY0KHZhbHVl
T2ZOdW1iZXJDb25zdGFudChub2RlLT5jaGlsZDEoKS5pbmRleCgpKSkpLCB0ZW1wLmdwcigpKTsK
ICAgICAgICAgbV9qaXQubW92ZTY0VG9Eb3VibGUodGVtcC5ncHIoKSwgcmVzdWx0LmZwcigpKTsK
LSAgICAgICAgZG91YmxlUmVzdWx0KHJlc3VsdC5mcHIoKSwgbV9jb21waWxlSW5kZXgpOworICAg
ICAgICBkb3VibGVSZXN1bHQocmVzdWx0LmZwcigpLCBub2RlKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KICNlbmRpZgogICAgIAotICAgIGlmIChpc0ludDMyU3BlY3VsYXRpb24obV9zdGF0ZS5m
b3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpIHsKLSAgICAgICAgU3BlY3VsYXRlSW50ZWdl
ck9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKCkpOworICAgIGlmIChpc0ludDMyU3BlY3Vs
YXRpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX3R5cGUpKSB7CisgICAgICAg
IFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CiAgICAg
ICAgIEZQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CiAgICAgICAgIG1faml0LmNvbnZlcnRJbnQz
MlRvRG91YmxlKG9wMS5ncHIoKSwgcmVzdWx0LmZwcigpKTsKLSAgICAgICAgZG91YmxlUmVzdWx0
KHJlc3VsdC5mcHIoKSwgbV9jb21waWxlSW5kZXgpOworICAgICAgICBkb3VibGVSZXN1bHQocmVz
dWx0LmZwcigpLCBub2RlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKLSAgICBKU1Zh
bHVlT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEoKSk7CisgICAgSlNWYWx1ZU9wZXJhbmQg
b3AxKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKICAgICBGUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMp
OwogICAgIAogI2lmIFVTRShKU1ZBTFVFNjQpCkBAIC0yNTAzLDkgKzI0ODcsOSBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlSW50MzJUb0RvdWJsCiAgICAgSklUQ29tcGlsZXI6Okp1bXAg
aXNJbnRlZ2VyID0gbV9qaXQuYnJhbmNoNjQoCiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBYm92
ZU9yRXF1YWwsIG9wMUdQUiwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKTsKICAgICAK
LSAgICBpZiAoIWlzTnVtYmVyU3BlY3VsYXRpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQx
KCkpLm1fdHlwZSkpIHsKKyAgICBpZiAoIWlzTnVtYmVyU3BlY3VsYXRpb24obV9zdGF0ZS5mb3JO
b2RlKG5vZGUtPmNoaWxkMSgpKS5tX3R5cGUpKSB7CiAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2so
Ci0gICAgICAgICAgICBCYWRUeXBlLCBKU1ZhbHVlUmVncyhvcDFHUFIpLCBub2RlLmNoaWxkMSgp
LAorICAgICAgICAgICAgQmFkVHlwZSwgSlNWYWx1ZVJlZ3Mob3AxR1BSKSwgbm9kZS0+Y2hpbGQx
KCksCiAgICAgICAgICAgICBtX2ppdC5icmFuY2hUZXN0NjQoTWFjcm9Bc3NlbWJsZXI6Olplcm8s
IG9wMUdQUiwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKSk7CiAgICAgfQogICAgIApA
QCAtMjUyNyw5ICsyNTExLDkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUludDMyVG9E
b3VibAogICAgIEpJVENvbXBpbGVyOjpKdW1wIGlzSW50ZWdlciA9IG1faml0LmJyYW5jaDMyKAog
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIG9wMVRhZ0dQUiwgVHJ1c3RlZEltbTMyKEpT
VmFsdWU6OkludDMyVGFnKSk7CiAgICAgCi0gICAgaWYgKCFpc051bWJlclNwZWN1bGF0aW9uKG1f
c3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKSB7CisgICAgaWYgKCFpc051bWJl
clNwZWN1bGF0aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLT5jaGlsZDEoKSkubV90eXBlKSkgewog
ICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAotICAgICAgICAgICAgQmFkVHlwZSwgSlNWYWx1ZVJl
Z3Mob3AxVGFnR1BSLCBvcDFQYXlsb2FkR1BSKSwgbm9kZS5jaGlsZDEoKSwKKyAgICAgICAgICAg
IEJhZFR5cGUsIEpTVmFsdWVSZWdzKG9wMVRhZ0dQUiwgb3AxUGF5bG9hZEdQUiksIG5vZGUtPmNo
aWxkMSgpLAogICAgICAgICAgICAgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3Zl
T3JFcXVhbCwgb3AxVGFnR1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6TG93ZXN0VGFnKSkpOwog
ICAgIH0KICAgICAKQEAgLTI1NDEsNyArMjUyNSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGVJbnQzMlRvRG91YmwKICAgICBkb25lLmxpbmsoJm1faml0KTsKICNlbmRpZgogICAgIAot
ICAgIGRvdWJsZVJlc3VsdChyZXN1bHRGUFIsIG1fY29tcGlsZUluZGV4KTsKKyAgICBkb3VibGVS
ZXN1bHQocmVzdWx0RlBSLCBub2RlKTsKIH0KIAogc3RhdGljIGRvdWJsZSBjbGFtcERvdWJsZVRv
Qnl0ZShkb3VibGUgZCkKQEAgLTI1OTYsMTEgKzI1ODAsMTEgQEAgc3RhdGljIHZvaWQgY29tcGls
ZUNsYW1wRG91YmxlVG9CeXRlKEpJVAogCiB9CiAKLXZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVHZXRCeVZhbE9uSW50VHlwZWRBcnJheShjb25zdCBUeXBlZEFycmF5RGVzY3JpcHRvciYgZGVz
Y3JpcHRvciwgTm9kZSYgbm9kZSwgc2l6ZV90IGVsZW1lbnRTaXplLCBUeXBlZEFycmF5U2lnbmVk
bmVzcyBzaWduZWRuZXNzKQordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25J
bnRUeXBlZEFycmF5KGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBOb2Rl
KiBub2RlLCBzaXplX3QgZWxlbWVudFNpemUsIFR5cGVkQXJyYXlTaWduZWRuZXNzIHNpZ25lZG5l
c3MpCiB7Ci0gICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLmNoaWxkMSgp
KTsKLSAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhpcywgbm9kZS5j
aGlsZDIoKSk7Ci0gICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBub2RlLmNoaWxkMygp
KTsKKyAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsK
KyAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhpcywgbm9kZS0+Y2hp
bGQyKCkpOworICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgbm9kZS0+Y2hpbGQzKCkp
OwogCiAgICAgR1BSUmVnIGJhc2VSZWcgPSBiYXNlLmdwcigpOwogICAgIEdQUlJlZyBwcm9wZXJ0
eVJlZyA9IHByb3BlcnR5LmdwcigpOwpAQCAtMjYwOSwxMCArMjU5MywxMCBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxPbkluCiAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0
aGlzKTsKICAgICBHUFJSZWcgcmVzdWx0UmVnID0gcmVzdWx0LmdwcigpOwogCi0gICAgQVNTRVJU
KG5vZGUuYXJyYXlNb2RlKCkuYWxyZWFkeUNoZWNrZWQobV9qaXQuZ3JhcGgoKSwgbm9kZSwgbV9z
dGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpKSk7CisgICAgQVNTRVJUKG5vZGUtPmFycmF5TW9k
ZSgpLmFscmVhZHlDaGVja2VkKG1faml0LmdyYXBoKCksIG5vZGUsIG1fc3RhdGUuZm9yTm9kZShu
b2RlLT5jaGlsZDEoKSkpKTsKIAogICAgIHNwZWN1bGF0aW9uQ2hlY2soCi0gICAgICAgIFVuY291
bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsCisgICAgICAgIFVuY291bnRhYmxlLCBKU1Zh
bHVlUmVncygpLCAwLAogICAgICAgICBtX2ppdC5icmFuY2gzMigKICAgICAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhiYXNlUmVnLCBkZXNjcmlwdG9yLm1fbGVuZ3RoT2Zmc2V0KSkpOwogICAgIHN3aXRjaCAo
ZWxlbWVudFNpemUpIHsKQEAgLTI2MzUsMTQgKzI2MTksMTQgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZUdldEJ5VmFsT25JbgogICAgICAgICBDUkFTSCgpOwogICAgIH0KICAgICBpZiAo
ZWxlbWVudFNpemUgPCA0IHx8IHNpZ25lZG5lc3MgPT0gU2lnbmVkVHlwZWRBcnJheSkgewotICAg
ICAgICBpbnRlZ2VyUmVzdWx0KHJlc3VsdFJlZywgbV9jb21waWxlSW5kZXgpOworICAgICAgICBp
bnRlZ2VyUmVzdWx0KHJlc3VsdFJlZywgbm9kZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAg
ICAgCiAgICAgQVNTRVJUKGVsZW1lbnRTaXplID09IDQgJiYgc2lnbmVkbmVzcyA9PSBVbnNpZ25l
ZFR5cGVkQXJyYXkpOwotICAgIGlmIChub2RlLnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKSkgewot
ICAgICAgICBmb3J3YXJkU3BlY3VsYXRpb25DaGVjayhPdmVyZmxvdywgSlNWYWx1ZVJlZ3MoKSwg
Tm9Ob2RlLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6TGVzc1RoYW4sIHJlc3VsdFJl
ZywgVHJ1c3RlZEltbTMyKDApKSwgVmFsdWVSZWNvdmVyeTo6dWludDMySW5HUFIocmVzdWx0UmVn
KSk7Ci0gICAgICAgIGludGVnZXJSZXN1bHQocmVzdWx0UmVnLCBtX2NvbXBpbGVJbmRleCk7Cisg
ICAgaWYgKG5vZGUtPnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKSkgeworICAgICAgICBmb3J3YXJk
U3BlY3VsYXRpb25DaGVjayhPdmVyZmxvdywgSlNWYWx1ZVJlZ3MoKSwgMCwgbV9qaXQuYnJhbmNo
MzIoTWFjcm9Bc3NlbWJsZXI6Okxlc3NUaGFuLCByZXN1bHRSZWcsIFRydXN0ZWRJbW0zMigwKSks
IFZhbHVlUmVjb3Zlcnk6OnVpbnQzMkluR1BSKHJlc3VsdFJlZykpOworICAgICAgICBpbnRlZ2Vy
UmVzdWx0KHJlc3VsdFJlZywgbm9kZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCkBA
IC0yNjUxLDEwICsyNjM1LDEwIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZh
bE9uSW4KICAgICBKSVRDb21waWxlcjo6SnVtcCBwb3NpdGl2ZSA9IG1faml0LmJyYW5jaDMyKE1h
Y3JvQXNzZW1ibGVyOjpHcmVhdGVyVGhhbk9yRXF1YWwsIHJlc3VsdFJlZywgVHJ1c3RlZEltbTMy
KDApKTsKICAgICBtX2ppdC5hZGREb3VibGUoSklUQ29tcGlsZXI6OkFic29sdXRlQWRkcmVzcygm
QXNzZW1ibHlIZWxwZXJzOjp0d29Ub1RoZTMyKSwgZnJlc3VsdC5mcHIoKSk7CiAgICAgcG9zaXRp
dmUubGluaygmbV9qaXQpOwotICAgIGRvdWJsZVJlc3VsdChmcmVzdWx0LmZwcigpLCBtX2NvbXBp
bGVJbmRleCk7CisgICAgZG91YmxlUmVzdWx0KGZyZXN1bHQuZnByKCksIG5vZGUpOwogfQogCi12
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUHV0QnlWYWxGb3JJbnRUeXBlZEFycmF5KGNvbnN0
IFR5cGVkQXJyYXlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBHUFJSZWcgYmFzZSwgR1BSUmVnIHBy
b3BlcnR5LCBOb2RlJiBub2RlLCBzaXplX3QgZWxlbWVudFNpemUsIFR5cGVkQXJyYXlTaWduZWRu
ZXNzIHNpZ25lZG5lc3MsIFR5cGVkQXJyYXlSb3VuZGluZyByb3VuZGluZykKK3ZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVQdXRCeVZhbEZvckludFR5cGVkQXJyYXkoY29uc3QgVHlwZWRBcnJh
eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IsIEdQUlJlZyBiYXNlLCBHUFJSZWcgcHJvcGVydHksIE5v
ZGUqIG5vZGUsIHNpemVfdCBlbGVtZW50U2l6ZSwgVHlwZWRBcnJheVNpZ25lZG5lc3Mgc2lnbmVk
bmVzcywgVHlwZWRBcnJheVJvdW5kaW5nIHJvdW5kaW5nKQogewogICAgIFN0b3JhZ2VPcGVyYW5k
IHN0b3JhZ2UodGhpcywgbV9qaXQuZ3JhcGgoKS52YXJBcmdDaGlsZChub2RlLCAzKSk7CiAgICAg
R1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigpOwpAQCAtMjY2Nyw4ICsyNjUxLDggQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVB1dEJ5VmFsRm9ySQogICAgIGlmIChhdCh2YWx1
ZVVzZSkuaXNDb25zdGFudCgpKSB7CiAgICAgICAgIEpTVmFsdWUganNWYWx1ZSA9IHZhbHVlT2ZK
U0NvbnN0YW50KHZhbHVlVXNlLmluZGV4KCkpOwogICAgICAgICBpZiAoIWpzVmFsdWUuaXNOdW1i
ZXIoKSkgewotICAgICAgICAgICAgdGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oVW5jb3Vu
dGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSk7Ci0gICAgICAgICAgICBub1Jlc3VsdChtX2Nv
bXBpbGVJbmRleCk7CisgICAgICAgICAgICB0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihV
bmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgMCk7CisgICAgICAgICAgICBub1Jlc3VsdChub2Rl
KTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICBkb3VibGUgZCA9IGpz
VmFsdWUuYXNOdW1iZXIoKTsKQEAgLTI3MjgsNyArMjcxMiw3IEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVQdXRCeVZhbEZvckkKICAgICBBU1NFUlQodmFsdWVHUFIgIT0gYmFzZSk7CiAg
ICAgQVNTRVJUKHZhbHVlR1BSICE9IHN0b3JhZ2VSZWcpOwogICAgIE1hY3JvQXNzZW1ibGVyOjpK
dW1wIG91dE9mQm91bmRzOwotICAgIGlmIChub2RlLm9wKCkgPT0gUHV0QnlWYWwpCisgICAgaWYg
KG5vZGUtPm9wKCkgPT0gUHV0QnlWYWwpCiAgICAgICAgIG91dE9mQm91bmRzID0gbV9qaXQuYnJh
bmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHksIE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKGJhc2UsIGRlc2NyaXB0b3IubV9sZW5ndGhPZmZzZXQpKTsKIAogICAgIHN3
aXRjaCAoZWxlbWVudFNpemUpIHsKQEAgLTI3NDQsMjcgKzI3MjgsMjcgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZVB1dEJ5VmFsRm9ySQogICAgIGRlZmF1bHQ6CiAgICAgICAgIENSQVNI
KCk7CiAgICAgfQotICAgIGlmIChub2RlLm9wKCkgPT0gUHV0QnlWYWwpCisgICAgaWYgKG5vZGUt
Pm9wKCkgPT0gUHV0QnlWYWwpCiAgICAgICAgIG91dE9mQm91bmRzLmxpbmsoJm1faml0KTsKLSAg
ICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCk7CisgICAgbm9SZXN1bHQobm9kZSk7CiB9CiAKLXZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uRmxvYXRUeXBlZEFycmF5KGNvbnN0
IFR5cGVkQXJyYXlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBOb2RlJiBub2RlLCBzaXplX3QgZWxl
bWVudFNpemUpCit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxPbkZsb2F0VHlw
ZWRBcnJheShjb25zdCBUeXBlZEFycmF5RGVzY3JpcHRvciYgZGVzY3JpcHRvciwgTm9kZSogbm9k
ZSwgc2l6ZV90IGVsZW1lbnRTaXplKQogewotICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2Uo
dGhpcywgbm9kZS5jaGlsZDEoKSk7Ci0gICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIHBy
b3BlcnR5KHRoaXMsIG5vZGUuY2hpbGQyKCkpOwotICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2Uo
dGhpcywgbm9kZS5jaGlsZDMoKSk7CisgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlz
LCBub2RlLT5jaGlsZDEoKSk7CisgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIHByb3Bl
cnR5KHRoaXMsIG5vZGUtPmNoaWxkMigpKTsKKyAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRo
aXMsIG5vZGUtPmNoaWxkMygpKTsKIAogICAgIEdQUlJlZyBiYXNlUmVnID0gYmFzZS5ncHIoKTsK
ICAgICBHUFJSZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIoKTsKICAgICBHUFJSZWcgc3Rv
cmFnZVJlZyA9IHN0b3JhZ2UuZ3ByKCk7CiAKLSAgICBBU1NFUlQobm9kZS5hcnJheU1vZGUoKS5h
bHJlYWR5Q2hlY2tlZChtX2ppdC5ncmFwaCgpLCBub2RlLCBtX3N0YXRlLmZvck5vZGUobm9kZS5j
aGlsZDEoKSkpKTsKKyAgICBBU1NFUlQobm9kZS0+YXJyYXlNb2RlKCkuYWxyZWFkeUNoZWNrZWQo
bV9qaXQuZ3JhcGgoKSwgbm9kZSwgbV9zdGF0ZS5mb3JOb2RlKG5vZGUtPmNoaWxkMSgpKSkpOwog
CiAgICAgRlBSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKICAgICBGUFJSZWcgcmVzdWx0UmVnID0g
cmVzdWx0LmZwcigpOwogICAgIHNwZWN1bGF0aW9uQ2hlY2soCi0gICAgICAgIFVuY291bnRhYmxl
LCBKU1ZhbHVlUmVncygpLCBOb05vZGUsCisgICAgICAgIFVuY291bnRhYmxlLCBKU1ZhbHVlUmVn
cygpLCAwLAogICAgICAgICBtX2ppdC5icmFuY2gzMigKICAgICAgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhi
YXNlUmVnLCBkZXNjcmlwdG9yLm1fbGVuZ3RoT2Zmc2V0KSkpOwogICAgIHN3aXRjaCAoZWxlbWVu
dFNpemUpIHsKQEAgLTI3ODMsMTAgKzI3NjcsMTAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZUdldEJ5VmFsT25GbAogICAgIGRlZmF1bHQ6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7CiAgICAgfQotICAgIGRvdWJsZVJlc3VsdChyZXN1bHRSZWcsIG1fY29tcGls
ZUluZGV4KTsKKyAgICBkb3VibGVSZXN1bHQocmVzdWx0UmVnLCBub2RlKTsKIH0KIAotdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVB1dEJ5VmFsRm9yRmxvYXRUeXBlZEFycmF5KGNvbnN0IFR5
cGVkQXJyYXlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBHUFJSZWcgYmFzZSwgR1BSUmVnIHByb3Bl
cnR5LCBOb2RlJiBub2RlLCBzaXplX3QgZWxlbWVudFNpemUpCit2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlUHV0QnlWYWxGb3JGbG9hdFR5cGVkQXJyYXkoY29uc3QgVHlwZWRBcnJheURlc2Ny
aXB0b3ImIGRlc2NyaXB0b3IsIEdQUlJlZyBiYXNlLCBHUFJSZWcgcHJvcGVydHksIE5vZGUqIG5v
ZGUsIHNpemVfdCBlbGVtZW50U2l6ZSkKIHsKICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRo
aXMsIG1faml0LmdyYXBoKCkudmFyQXJnQ2hpbGQobm9kZSwgMykpOwogICAgIEdQUlJlZyBzdG9y
YWdlUmVnID0gc3RvcmFnZS5ncHIoKTsKQEAgLTI3OTYsMTIgKzI3ODAsMTIgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZVB1dEJ5VmFsRm9yRgogICAgIAogICAgIFNwZWN1bGF0ZURvdWJs
ZU9wZXJhbmQgdmFsdWVPcCh0aGlzLCB2YWx1ZVVzZSk7CiAgICAgCi0gICAgQVNTRVJUX1VOVVNF
RChiYXNlVXNlLCBub2RlLmFycmF5TW9kZSgpLmFscmVhZHlDaGVja2VkKG1faml0LmdyYXBoKCks
IG1faml0LmdyYXBoKClbbV9jb21waWxlSW5kZXhdLCBtX3N0YXRlLmZvck5vZGUoYmFzZVVzZSkp
KTsKKyAgICBBU1NFUlRfVU5VU0VEKGJhc2VVc2UsIG5vZGUtPmFycmF5TW9kZSgpLmFscmVhZHlD
aGVja2VkKG1faml0LmdyYXBoKCksIG5vZGUsIG1fc3RhdGUuZm9yTm9kZShiYXNlVXNlKSkpOwog
ICAgIAogICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CiAgICAgCiAgICAgTWFjcm9Bc3Nl
bWJsZXI6Okp1bXAgb3V0T2ZCb3VuZHM7Ci0gICAgaWYgKG5vZGUub3AoKSA9PSBQdXRCeVZhbCkK
KyAgICBpZiAobm9kZS0+b3AoKSA9PSBQdXRCeVZhbCkKICAgICAgICAgb3V0T2ZCb3VuZHMgPSBt
X2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eSwgTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZSwgZGVzY3JpcHRvci5tX2xlbmd0aE9mZnNldCkpOwog
ICAgIAogICAgIHN3aXRjaCAoZWxlbWVudFNpemUpIHsKQEAgLTI4MTgsMTYgKzI4MDIsMTYgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVB1dEJ5VmFsRm9yRgogICAgIGRlZmF1bHQ6CiAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgfQotICAgIGlmIChub2Rl
Lm9wKCkgPT0gUHV0QnlWYWwpCisgICAgaWYgKG5vZGUtPm9wKCkgPT0gUHV0QnlWYWwpCiAgICAg
ICAgIG91dE9mQm91bmRzLmxpbmsoJm1faml0KTsKLSAgICBub1Jlc3VsdChtX2NvbXBpbGVJbmRl
eCk7CisgICAgbm9SZXN1bHQobm9kZSk7CiB9CiAKLXZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVJbnN0YW5jZU9mRm9yT2JqZWN0KE5vZGUmLCBHUFJSZWcgdmFsdWVSZWcsIEdQUlJlZyBwcm90
b3R5cGVSZWcsIEdQUlJlZyBzY3JhdGNoUmVnKQordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZUluc3RhbmNlT2ZGb3JPYmplY3QoTm9kZSosIEdQUlJlZyB2YWx1ZVJlZywgR1BSUmVnIHByb3Rv
dHlwZVJlZywgR1BSUmVnIHNjcmF0Y2hSZWcpCiB7CiAgICAgLy8gQ2hlY2sgdGhhdCBwcm90b3R5
cGUgaXMgYW4gb2JqZWN0LgogICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3MocHJvdG90eXBlUmVnLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgc2NyYXRjaFJlZyk7
Ci0gICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1f
aml0LmJyYW5jaElmTm90T2JqZWN0KHNjcmF0Y2hSZWcpKTsKKyAgICBzcGVjdWxhdGlvbkNoZWNr
KEJhZFR5cGUsIEpTVmFsdWVSZWdzKCksIDAsIG1faml0LmJyYW5jaElmTm90T2JqZWN0KHNjcmF0
Y2hSZWcpKTsKICAgICAKICAgICAvLyBJbml0aWFsaXplIHNjcmF0Y2hSZWcgd2l0aCB0aGUgdmFs
dWUgYmVpbmcgY2hlY2tlZC4KICAgICBtX2ppdC5tb3ZlKHZhbHVlUmVnLCBzY3JhdGNoUmVnKTsK
QEAgLTI4NjMsMTcgKzI4NDcsMTcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUluc3Rh
bmNlT2ZGbwogICAgIHB1dFJlc3VsdC5saW5rKCZtX2ppdCk7CiB9CiAKLXZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVJbnN0YW5jZU9mKE5vZGUmIG5vZGUpCit2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlSW5zdGFuY2VPZihOb2RlKiBub2RlKQogewotICAgIGlmICgoISEoYXQobm9kZS5j
aGlsZDEoKSkucHJlZGljdGlvbigpICYgflNwZWNDZWxsKQotICAgICAgICAgJiYgISEobV9zdGF0
ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSAmIH5TcGVjQ2VsbCkpCi0gICAgICAgIHx8
IGF0KG5vZGUuY2hpbGQxKCkpLmFkanVzdGVkUmVmQ291bnQoKSA9PSAxKSB7CisgICAgaWYgKCgh
IShub2RlLT5jaGlsZDEoKS0+cHJlZGljdGlvbigpICYgflNwZWNDZWxsKQorICAgICAgICAgJiYg
ISEobV9zdGF0ZS5mb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX3R5cGUgJiB+U3BlY0NlbGwpKQor
ICAgICAgICB8fCBub2RlLT5jaGlsZDEoKS0+YWRqdXN0ZWRSZWZDb3VudCgpID09IDEpIHsKICAg
ICAgICAgLy8gSXQgbWlnaHQgbm90IGJlIGEgY2VsbC4gU3BlY3VsYXRlIGxlc3MgYWdncmVzc2l2
ZWx5LgogICAgICAgICAvLyBPcjogaXQgbWlnaHQgb25seSBiZSB1c2VkIG9uY2UgKGkuZS4gYnkg
dXMpLCBzbyB3ZSBnZXQgemVybyBiZW5lZml0CiAgICAgICAgIC8vIGZyb20gc3BlY3VsYXRpbmcg
YW55IG1vcmUgYWdncmVzc2l2ZWx5IHRoYW4gd2UgYWJzb2x1dGVseSBuZWVkIHRvLgogICAgICAg
ICAKLSAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS5jaGlsZDEoKSk7Ci0g
ICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIHByb3RvdHlwZSh0aGlzLCBub2RlLmNoaWxkMigp
KTsKKyAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwor
ICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBwcm90b3R5cGUodGhpcywgbm9kZS0+Y2hpbGQy
KCkpOwogICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKICAgICAgICAgCiAgICAg
ICAgIEdQUlJlZyBwcm90b3R5cGVSZWcgPSBwcm90b3R5cGUuZ3ByKCk7CkBAIC0yODk5LDE1ICsy
ODgzLDE1IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVJbnN0YW5jZU9mKE4KICAgICAg
ICAgZG9uZS5saW5rKCZtX2ppdCk7CiAKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICBqc1Zh
bHVlUmVzdWx0KHNjcmF0Y2hSZWcsIG1fY29tcGlsZUluZGV4LCBEYXRhRm9ybWF0SlNCb29sZWFu
KTsKKyAgICAgICAganNWYWx1ZVJlc3VsdChzY3JhdGNoUmVnLCBub2RlLCBEYXRhRm9ybWF0SlNC
b29sZWFuKTsKICNlbHNlCi0gICAgICAgIGJvb2xlYW5SZXN1bHQoc2NyYXRjaFJlZywgbV9jb21w
aWxlSW5kZXgpOworICAgICAgICBib29sZWFuUmVzdWx0KHNjcmF0Y2hSZWcsIG5vZGUpOwogI2Vu
ZGlmCiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCi0gICAgU3BlY3VsYXRlQ2VsbE9wZXJh
bmQgdmFsdWUodGhpcywgbm9kZS5jaGlsZDEoKSk7Ci0gICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQg
cHJvdG90eXBlKHRoaXMsIG5vZGUuY2hpbGQyKCkpOworICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5k
IHZhbHVlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKKyAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBw
cm90b3R5cGUodGhpcywgbm9kZS0+Y2hpbGQyKCkpOwogICAgIAogICAgIEdQUlRlbXBvcmFyeSBz
Y3JhdGNoKHRoaXMpOwogICAgIApAQCAtMjkxOCwyMCArMjkwMiwyMCBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlSW5zdGFuY2VPZihOCiAgICAgY29tcGlsZUluc3RhbmNlT2ZGb3JPYmpl
Y3Qobm9kZSwgdmFsdWVSZWcsIHByb3RvdHlwZVJlZywgc2NyYXRjaFJlZyk7CiAKICNpZiBVU0Uo
SlNWQUxVRTY0KQotICAgIGpzVmFsdWVSZXN1bHQoc2NyYXRjaFJlZywgbV9jb21waWxlSW5kZXgs
IERhdGFGb3JtYXRKU0Jvb2xlYW4pOworICAgIGpzVmFsdWVSZXN1bHQoc2NyYXRjaFJlZywgbm9k
ZSwgRGF0YUZvcm1hdEpTQm9vbGVhbik7CiAjZWxzZQotICAgIGJvb2xlYW5SZXN1bHQoc2NyYXRj
aFJlZywgbV9jb21waWxlSW5kZXgpOworICAgIGJvb2xlYW5SZXN1bHQoc2NyYXRjaFJlZywgbm9k
ZSk7CiAjZW5kaWYKIH0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVNvZnRNb2R1bG8o
Tm9kZSYgbm9kZSkKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVTb2Z0TW9kdWxvKE5vZGUq
IG5vZGUpCiB7CiAgICAgLy8gSW4gdGhlIGZhc3QgcGF0aCwgdGhlIGRpdmlkZW5kIHZhbHVlIGNv
dWxkIGJlIHRoZSBmaW5hbCByZXN1bHQKICAgICAvLyAoaW4gY2FzZSBvZiB8ZGl2aWRlbmR8IDwg
fGRpdmlzb3J8KSwgc28gd2Ugc3BlY3VsYXRlIGl0IGFzIHN0cmljdCBpbnQzMi4KLSAgICBTcGVj
dWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKCkpOworICAgIFNw
ZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBvcDEodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwogI2lm
IENQVShYODYpIHx8IENQVShYODZfNjQpCi0gICAgaWYgKGlzSW50MzJDb25zdGFudChub2RlLmNo
aWxkMigpLmluZGV4KCkpKSB7Ci0gICAgICAgIGludDMyX3QgZGl2aXNvciA9IHZhbHVlT2ZJbnQz
MkNvbnN0YW50KG5vZGUuY2hpbGQyKCkuaW5kZXgoKSk7CisgICAgaWYgKGlzSW50MzJDb25zdGFu
dChub2RlLT5jaGlsZDIoKS5ub2RlKCkpKSB7CisgICAgICAgIGludDMyX3QgZGl2aXNvciA9IHZh
bHVlT2ZJbnQzMkNvbnN0YW50KG5vZGUtPmNoaWxkMigpLm5vZGUoKSk7CiAgICAgICAgIGlmIChk
aXZpc29yKSB7CiAgICAgICAgICAgICBHUFJSZWcgb3AxR3ByID0gb3AxLmdwcigpOwogCkBAIC0y
OTUzLDI1ICsyOTM3LDI1IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVTb2Z0TW9kdWxv
KE4KICAgICAgICAgICAgIG1faml0Lm1vdmUob3AxR3ByLCBlYXguZ3ByKCkpOwogICAgICAgICAg
ICAgbV9qaXQubW92ZShUcnVzdGVkSW1tMzIoZGl2aXNvciksIHNjcmF0Y2hHUFIpOwogICAgICAg
ICAgICAgaWYgKGRpdmlzb3IgPT0gLTEpCi0gICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVj
ayhPdmVyZmxvdywgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2gzMihKSVRDb21w
aWxlcjo6RXF1YWwsIGVheC5ncHIoKSwgVHJ1c3RlZEltbTMyKC0yMTQ3NDgzNjQ3LTEpKSk7Cisg
ICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhPdmVyZmxvdywgSlNWYWx1ZVJlZ3MoKSwg
MCwgbV9qaXQuYnJhbmNoMzIoSklUQ29tcGlsZXI6OkVxdWFsLCBlYXguZ3ByKCksIFRydXN0ZWRJ
bW0zMigtMjE0NzQ4MzY0Ny0xKSkpOwogICAgICAgICAgICAgbV9qaXQuYXNzZW1ibGVyKCkuY2Rx
KCk7CiAgICAgICAgICAgICBtX2ppdC5hc3NlbWJsZXIoKS5pZGl2bF9yKHNjcmF0Y2hHUFIpOwog
ICAgICAgICAgICAgLy8gQ2hlY2sgdGhhdCB3ZSdyZSBub3QgYWJvdXQgdG8gY3JlYXRlIG5lZ2F0
aXZlIHplcm8uCiAgICAgICAgICAgICAvLyBGSVhNRTogaWYgdGhlIG5vZGUgdXNlIGRvZXNuJ3Qg
Y2FyZSBhYm91dCBuZWcgemVybywgd2UgY2FuIGRvIHRoaXMgbW9yZSBlYXNpbHkuCiAgICAgICAg
ICAgICBKSVRDb21waWxlcjo6SnVtcCBudW1lcmF0b3JQb3NpdGl2ZSA9IG1faml0LmJyYW5jaDMy
KEpJVENvbXBpbGVyOjpHcmVhdGVyVGhhbk9yRXF1YWwsIG9wMVNhdmVHUFIsIFRydXN0ZWRJbW0z
MigwKSk7Ci0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE92ZXJmbG93LCBKU1ZhbHVlUmVn
cygpLCBOb05vZGUsIG1faml0LmJyYW5jaFRlc3QzMihKSVRDb21waWxlcjo6WmVybywgZWR4Lmdw
cigpKSk7CisgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE92ZXJmbG93LCBKU1ZhbHVlUmVn
cygpLCAwLCBtX2ppdC5icmFuY2hUZXN0MzIoSklUQ29tcGlsZXI6Olplcm8sIGVkeC5ncHIoKSkp
OwogICAgICAgICAgICAgbnVtZXJhdG9yUG9zaXRpdmUubGluaygmbV9qaXQpOwogICAgICAgICAg
ICAgCiAgICAgICAgICAgICBpZiAob3AxU2F2ZUdQUiAhPSBvcDFHcHIpCiAgICAgICAgICAgICAg
ICAgdW5sb2NrKG9wMVNhdmVHUFIpOwogCi0gICAgICAgICAgICBpbnRlZ2VyUmVzdWx0KGVkeC5n
cHIoKSwgbV9jb21waWxlSW5kZXgpOworICAgICAgICAgICAgaW50ZWdlclJlc3VsdChlZHguZ3By
KCksIG5vZGUpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgfQogI2VuZGlm
CiAKLSAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDIodGhpcywgbm9kZS5jaGlsZDIoKSk7
CisgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AyKHRoaXMsIG5vZGUtPmNoaWxkMigpKTsK
ICNpZiBDUFUoWDg2KSB8fCBDUFUoWDg2XzY0KQogICAgIEdQUlRlbXBvcmFyeSBlYXgodGhpcywg
WDg2UmVnaXN0ZXJzOjplYXgpOwogICAgIEdQUlRlbXBvcmFyeSBlZHgodGhpcywgWDg2UmVnaXN0
ZXJzOjplZHgpOwpAQCAtMzAxMSw4ICsyOTk1LDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZVNvZnRNb2R1bG8oTgogICAgIAogICAgIEpJVENvbXBpbGVyOjpKdW1wIGRvbmU7CiAgICAg
Ly8gRklYTUU6IGlmIHRoZSBub2RlIGlzIG5vdCB1c2VkIGFzIG51bWJlciB0aGVuIHdlIGNhbiBk
byB0aGlzIG1vcmUgZWFzaWx5LgotICAgIHNwZWN1bGF0aW9uQ2hlY2soT3ZlcmZsb3csIEpTVmFs
dWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoVGVzdDMyKEpJVENvbXBpbGVyOjpaZXJvLCBv
cDJHUFIpKTsKLSAgICBzcGVjdWxhdGlvbkNoZWNrKE92ZXJmbG93LCBKU1ZhbHVlUmVncygpLCBO
b05vZGUsIG1faml0LmJyYW5jaDMyKEpJVENvbXBpbGVyOjpFcXVhbCwgb3AxR1BSLCBUcnVzdGVk
SW1tMzIoLTIxNDc0ODM2NDctMSkpKTsKKyAgICBzcGVjdWxhdGlvbkNoZWNrKE92ZXJmbG93LCBK
U1ZhbHVlUmVncygpLCAwLCBtX2ppdC5icmFuY2hUZXN0MzIoSklUQ29tcGlsZXI6Olplcm8sIG9w
MkdQUikpOworICAgIHNwZWN1bGF0aW9uQ2hlY2soT3ZlcmZsb3csIEpTVmFsdWVSZWdzKCksIDAs
IG1faml0LmJyYW5jaDMyKEpJVENvbXBpbGVyOjpFcXVhbCwgb3AxR1BSLCBUcnVzdGVkSW1tMzIo
LTIxNDc0ODM2NDctMSkpKTsKICAgICAKICAgICBzYWZlRGVub21pbmF0b3IubGluaygmbV9qaXQp
OwogICAgICAgICAgICAgCkBAIC0zMDMxLDEzICszMDE1LDEzIEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVTb2Z0TW9kdWxvKE4KICAgICAvLyBDaGVjayB0aGF0IHdlJ3JlIG5vdCBhYm91
dCB0byBjcmVhdGUgbmVnYXRpdmUgemVyby4KICAgICAvLyBGSVhNRTogaWYgdGhlIG5vZGUgdXNl
IGRvZXNuJ3QgY2FyZSBhYm91dCBuZWcgemVybywgd2UgY2FuIGRvIHRoaXMgbW9yZSBlYXNpbHku
CiAgICAgSklUQ29tcGlsZXI6Okp1bXAgbnVtZXJhdG9yUG9zaXRpdmUgPSBtX2ppdC5icmFuY2gz
MihKSVRDb21waWxlcjo6R3JlYXRlclRoYW5PckVxdWFsLCBvcDFTYXZlR1BSLCBUcnVzdGVkSW1t
MzIoMCkpOwotICAgIHNwZWN1bGF0aW9uQ2hlY2soT3ZlcmZsb3csIEpTVmFsdWVSZWdzKCksIE5v
Tm9kZSwgbV9qaXQuYnJhbmNoVGVzdDMyKEpJVENvbXBpbGVyOjpaZXJvLCBlZHguZ3ByKCkpKTsK
KyAgICBzcGVjdWxhdGlvbkNoZWNrKE92ZXJmbG93LCBKU1ZhbHVlUmVncygpLCAwLCBtX2ppdC5i
cmFuY2hUZXN0MzIoSklUQ29tcGlsZXI6Olplcm8sIGVkeC5ncHIoKSkpOwogICAgIG51bWVyYXRv
clBvc2l0aXZlLmxpbmsoJm1faml0KTsKICAgICAKICAgICBpZiAob3AxU2F2ZUdQUiAhPSBvcDFH
UFIpCiAgICAgICAgIHVubG9jayhvcDFTYXZlR1BSKTsKICAgICAgICAgICAgIAotICAgIGludGVn
ZXJSZXN1bHQoZWR4LmdwcigpLCBtX2NvbXBpbGVJbmRleCk7CisgICAgaW50ZWdlclJlc3VsdChl
ZHguZ3ByKCksIG5vZGUpOwogI2Vsc2UgLy8gQ1BVKFg4NikgfHwgQ1BVKFg4Nl82NCkgLS0+IHNv
IG5vdCBYODYKICAgICAvLyBEbyB0aGlzIHRoZSAqc2FmZXN0KiB3YXkgcG9zc2libGU6IGNhbGwg
b3V0IHRvIGEgQyBmdW5jdGlvbiB0aGF0IHdpbGwgZG8gdGhlIG1vZHVsbywKICAgICAvLyBhbmQg
dGhlbiBhdHRlbXB0IHRvIGNvbnZlcnQgYmFjay4KQEAgLTMwNTMsNTQgKzMwMzcsNTQgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVNvZnRNb2R1bG8oTgogICAgIEdQUlRlbXBvcmFyeSBp
bnRSZXN1bHQodGhpcyk7CiAgICAgSklUQ29tcGlsZXI6Okp1bXBMaXN0IGZhaWx1cmVDYXNlczsK
ICAgICBtX2ppdC5icmFuY2hDb252ZXJ0RG91YmxlVG9JbnQzMihyZXN1bHQuZnByKCksIGludFJl
c3VsdC5ncHIoKSwgZmFpbHVyZUNhc2VzLCBzY3JhdGNoLmZwcigpKTsKLSAgICBzcGVjdWxhdGlv
bkNoZWNrKE92ZXJmbG93LCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIGZhaWx1cmVDYXNlcyk7Cisg
ICAgc3BlY3VsYXRpb25DaGVjayhPdmVyZmxvdywgSlNWYWx1ZVJlZ3MoKSwgMCwgZmFpbHVyZUNh
c2VzKTsKICAgICAKLSAgICBpbnRlZ2VyUmVzdWx0KGludFJlc3VsdC5ncHIoKSwgbV9jb21waWxl
SW5kZXgpOworICAgIGludGVnZXJSZXN1bHQoaW50UmVzdWx0LmdwcigpLCBub2RlKTsKICNlbmRp
ZiAvLyBDUFUoWDg2KSB8fCBDUFUoWDg2XzY0KQogfQogCi12b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlQWRkKE5vZGUmIG5vZGUpCit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQWRkKE5v
ZGUqIG5vZGUpCiB7CiAgICAgaWYgKG1faml0LmdyYXBoKCkuYWRkU2hvdWxkU3BlY3VsYXRlSW50
ZWdlcihub2RlKSkgewotICAgICAgICBpZiAoaXNOdW1iZXJDb25zdGFudChub2RlLmNoaWxkMSgp
LmluZGV4KCkpKSB7Ci0gICAgICAgICAgICBpbnQzMl90IGltbTEgPSB2YWx1ZU9mTnVtYmVyQ29u
c3RhbnRBc0ludDMyKG5vZGUuY2hpbGQxKCkuaW5kZXgoKSk7Ci0gICAgICAgICAgICBTcGVjdWxh
dGVJbnRlZ2VyT3BlcmFuZCBvcDIodGhpcywgbm9kZS5jaGlsZDIoKSk7CisgICAgICAgIGlmIChp
c051bWJlckNvbnN0YW50KG5vZGUtPmNoaWxkMSgpLm5vZGUoKSkpIHsKKyAgICAgICAgICAgIGlu
dDMyX3QgaW1tMSA9IHZhbHVlT2ZOdW1iZXJDb25zdGFudEFzSW50MzIobm9kZS0+Y2hpbGQxKCku
bm9kZSgpKTsKKyAgICAgICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMih0aGlzLCBu
b2RlLT5jaGlsZDIoKSk7CiAgICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwog
Ci0gICAgICAgICAgICBpZiAobm9kZUNhblRydW5jYXRlSW50ZWdlcihub2RlLmFyaXRoTm9kZUZs
YWdzKCkpKSB7CisgICAgICAgICAgICBpZiAobm9kZUNhblRydW5jYXRlSW50ZWdlcihub2RlLT5h
cml0aE5vZGVGbGFncygpKSkgewogICAgICAgICAgICAgICAgIG1faml0Lm1vdmUob3AyLmdwcigp
LCByZXN1bHQuZ3ByKCkpOwogICAgICAgICAgICAgICAgIG1faml0LmFkZDMyKEltbTMyKGltbTEp
LCByZXN1bHQuZ3ByKCkpOwogICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgc3Bl
Y3VsYXRpb25DaGVjayhPdmVyZmxvdywgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFu
Y2hBZGQzMihNYWNyb0Fzc2VtYmxlcjo6T3ZlcmZsb3csIG9wMi5ncHIoKSwgSW1tMzIoaW1tMSks
IHJlc3VsdC5ncHIoKSkpOworICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soT3ZlcmZs
b3csIEpTVmFsdWVSZWdzKCksIDAsIG1faml0LmJyYW5jaEFkZDMyKE1hY3JvQXNzZW1ibGVyOjpP
dmVyZmxvdywgb3AyLmdwcigpLCBJbW0zMihpbW0xKSwgcmVzdWx0LmdwcigpKSk7CiAKLSAgICAg
ICAgICAgIGludGVnZXJSZXN1bHQocmVzdWx0LmdwcigpLCBtX2NvbXBpbGVJbmRleCk7CisgICAg
ICAgICAgICBpbnRlZ2VyUmVzdWx0KHJlc3VsdC5ncHIoKSwgbm9kZSk7CiAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKLSAgICAgICAgaWYgKGlzTnVtYmVy
Q29uc3RhbnQobm9kZS5jaGlsZDIoKS5pbmRleCgpKSkgewotICAgICAgICAgICAgU3BlY3VsYXRl
SW50ZWdlck9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwotICAgICAgICAgICAgaW50
MzJfdCBpbW0yID0gdmFsdWVPZk51bWJlckNvbnN0YW50QXNJbnQzMihub2RlLmNoaWxkMigpLmlu
ZGV4KCkpOworICAgICAgICBpZiAoaXNOdW1iZXJDb25zdGFudChub2RlLT5jaGlsZDIoKS5ub2Rl
KCkpKSB7CisgICAgICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDEodGhpcywgbm9k
ZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgaW50MzJfdCBpbW0yID0gdmFsdWVPZk51bWJlckNv
bnN0YW50QXNJbnQzMihub2RlLT5jaGlsZDIoKS5ub2RlKCkpOwogICAgICAgICAgICAgR1BSVGVt
cG9yYXJ5IHJlc3VsdCh0aGlzKTsKICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChu
b2RlQ2FuVHJ1bmNhdGVJbnRlZ2VyKG5vZGUuYXJpdGhOb2RlRmxhZ3MoKSkpIHsKKyAgICAgICAg
ICAgIGlmIChub2RlQ2FuVHJ1bmNhdGVJbnRlZ2VyKG5vZGUtPmFyaXRoTm9kZUZsYWdzKCkpKSB7
CiAgICAgICAgICAgICAgICAgbV9qaXQubW92ZShvcDEuZ3ByKCksIHJlc3VsdC5ncHIoKSk7CiAg
ICAgICAgICAgICAgICAgbV9qaXQuYWRkMzIoSW1tMzIoaW1tMiksIHJlc3VsdC5ncHIoKSk7CiAg
ICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE92ZXJm
bG93LCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaEFkZDMyKE1hY3JvQXNzZW1i
bGVyOjpPdmVyZmxvdywgb3AxLmdwcigpLCBJbW0zMihpbW0yKSwgcmVzdWx0LmdwcigpKSk7Cisg
ICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhPdmVyZmxvdywgSlNWYWx1ZVJlZ3MoKSwg
MCwgbV9qaXQuYnJhbmNoQWRkMzIoTWFjcm9Bc3NlbWJsZXI6Ok92ZXJmbG93LCBvcDEuZ3ByKCks
IEltbTMyKGltbTIpLCByZXN1bHQuZ3ByKCkpKTsKIAotICAgICAgICAgICAgaW50ZWdlclJlc3Vs
dChyZXN1bHQuZ3ByKCksIG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAgICAgIGludGVnZXJSZXN1
bHQocmVzdWx0LmdwcigpLCBub2RlKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQog
ICAgICAgICAgICAgICAgIAotICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDEodGhp
cywgbm9kZS5jaGlsZDEoKSk7Ci0gICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMih0
aGlzLCBub2RlLmNoaWxkMigpKTsKKyAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3Ax
KHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQg
b3AyKHRoaXMsIG5vZGUtPmNoaWxkMigpKTsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0
aGlzLCBvcDEsIG9wMik7CiAKICAgICAgICAgR1BSUmVnIGdwcjEgPSBvcDEuZ3ByKCk7CiAgICAg
ICAgIEdQUlJlZyBncHIyID0gb3AyLmdwcigpOwogICAgICAgICBHUFJSZWcgZ3ByUmVzdWx0ID0g
cmVzdWx0LmdwcigpOwogCi0gICAgICAgIGlmIChub2RlQ2FuVHJ1bmNhdGVJbnRlZ2VyKG5vZGUu
YXJpdGhOb2RlRmxhZ3MoKSkpIHsKKyAgICAgICAgaWYgKG5vZGVDYW5UcnVuY2F0ZUludGVnZXIo
bm9kZS0+YXJpdGhOb2RlRmxhZ3MoKSkpIHsKICAgICAgICAgICAgIGlmIChncHIxID09IGdwclJl
c3VsdCkKICAgICAgICAgICAgICAgICBtX2ppdC5hZGQzMihncHIyLCBncHJSZXN1bHQpOwogICAg
ICAgICAgICAgZWxzZSB7CkBAIC0zMTExLDEzNiArMzA5NSwxMzYgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZUFkZChOb2RlJiBubwogICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1
bXAgY2hlY2sgPSBtX2ppdC5icmFuY2hBZGQzMihNYWNyb0Fzc2VtYmxlcjo6T3ZlcmZsb3csIGdw
cjEsIGdwcjIsIGdwclJlc3VsdCk7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAo
Z3ByMSA9PSBncHJSZXN1bHQpCi0gICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhPdmVy
ZmxvdywgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBjaGVjaywgU3BlY3VsYXRpb25SZWNvdmVyeShT
cGVjdWxhdGl2ZUFkZCwgZ3ByUmVzdWx0LCBncHIyKSk7CisgICAgICAgICAgICAgICAgc3BlY3Vs
YXRpb25DaGVjayhPdmVyZmxvdywgSlNWYWx1ZVJlZ3MoKSwgMCwgY2hlY2ssIFNwZWN1bGF0aW9u
UmVjb3ZlcnkoU3BlY3VsYXRpdmVBZGQsIGdwclJlc3VsdCwgZ3ByMikpOwogICAgICAgICAgICAg
ZWxzZSBpZiAoZ3ByMiA9PSBncHJSZXN1bHQpCi0gICAgICAgICAgICAgICAgc3BlY3VsYXRpb25D
aGVjayhPdmVyZmxvdywgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBjaGVjaywgU3BlY3VsYXRpb25S
ZWNvdmVyeShTcGVjdWxhdGl2ZUFkZCwgZ3ByUmVzdWx0LCBncHIxKSk7CisgICAgICAgICAgICAg
ICAgc3BlY3VsYXRpb25DaGVjayhPdmVyZmxvdywgSlNWYWx1ZVJlZ3MoKSwgMCwgY2hlY2ssIFNw
ZWN1bGF0aW9uUmVjb3ZlcnkoU3BlY3VsYXRpdmVBZGQsIGdwclJlc3VsdCwgZ3ByMSkpOwogICAg
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soT3ZlcmZsb3cs
IEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgY2hlY2spOworICAgICAgICAgICAgICAgIHNwZWN1bGF0
aW9uQ2hlY2soT3ZlcmZsb3csIEpTVmFsdWVSZWdzKCksIDAsIGNoZWNrKTsKICAgICAgICAgfQog
Ci0gICAgICAgIGludGVnZXJSZXN1bHQoZ3ByUmVzdWx0LCBtX2NvbXBpbGVJbmRleCk7CisgICAg
ICAgIGludGVnZXJSZXN1bHQoZ3ByUmVzdWx0LCBub2RlKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KICAgICAgICAgCi0gICAgaWYgKE5vZGU6OnNob3VsZFNwZWN1bGF0ZU51bWJlckV4cGVjdGlu
Z0RlZmluZWQoYXQobm9kZS5jaGlsZDEoKSksIGF0KG5vZGUuY2hpbGQyKCkpKSkgewotICAgICAg
ICBTcGVjdWxhdGVEb3VibGVPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKLSAgICAg
ICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCBvcDIodGhpcywgbm9kZS5jaGlsZDIoKSk7CisgICAg
aWYgKE5vZGU6OnNob3VsZFNwZWN1bGF0ZU51bWJlckV4cGVjdGluZ0RlZmluZWQobm9kZS0+Y2hp
bGQxKCkubm9kZSgpLCBub2RlLT5jaGlsZDIoKS5ub2RlKCkpKSB7CisgICAgICAgIFNwZWN1bGF0
ZURvdWJsZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgU3BlY3Vs
YXRlRG91YmxlT3BlcmFuZCBvcDIodGhpcywgbm9kZS0+Y2hpbGQyKCkpOwogICAgICAgICBGUFJU
ZW1wb3JhcnkgcmVzdWx0KHRoaXMsIG9wMSwgb3AyKTsKIAogICAgICAgICBGUFJSZWcgcmVnMSA9
IG9wMS5mcHIoKTsKICAgICAgICAgRlBSUmVnIHJlZzIgPSBvcDIuZnByKCk7CiAgICAgICAgIG1f
aml0LmFkZERvdWJsZShyZWcxLCByZWcyLCByZXN1bHQuZnByKCkpOwogCi0gICAgICAgIGRvdWJs
ZVJlc3VsdChyZXN1bHQuZnByKCksIG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAgZG91YmxlUmVz
dWx0KHJlc3VsdC5mcHIoKSwgbm9kZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBp
ZiAobm9kZS5vcCgpID09IFZhbHVlQWRkKSB7CisgICAgaWYgKG5vZGUtPm9wKCkgPT0gVmFsdWVB
ZGQpIHsKICAgICAgICAgY29tcGlsZVZhbHVlQWRkKG5vZGUpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQogICAgIAogICAgIC8vIFdlIGRvbid0IGhhbmRsZSB0aGlzIHlldC4gOi0oCi0gICAgdGVy
bWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5v
Tm9kZSk7CisgICAgdGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oVW5jb3VudGFibGUsIEpT
VmFsdWVSZWdzKCksIDApOwogfQogCi12b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQXJpdGhT
dWIoTm9kZSYgbm9kZSkKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBcml0aFN1YihOb2Rl
KiBub2RlKQogewogICAgIGlmIChtX2ppdC5ncmFwaCgpLmFkZFNob3VsZFNwZWN1bGF0ZUludGVn
ZXIobm9kZSkpIHsKLSAgICAgICAgaWYgKGlzTnVtYmVyQ29uc3RhbnQobm9kZS5jaGlsZDIoKS5p
bmRleCgpKSkgewotICAgICAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AxKHRoaXMs
IG5vZGUuY2hpbGQxKCkpOwotICAgICAgICAgICAgaW50MzJfdCBpbW0yID0gdmFsdWVPZk51bWJl
ckNvbnN0YW50QXNJbnQzMihub2RlLmNoaWxkMigpLmluZGV4KCkpOworICAgICAgICBpZiAoaXNO
dW1iZXJDb25zdGFudChub2RlLT5jaGlsZDIoKS5ub2RlKCkpKSB7CisgICAgICAgICAgICBTcGVj
dWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDEodGhpcywgbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAg
ICAgaW50MzJfdCBpbW0yID0gdmFsdWVPZk51bWJlckNvbnN0YW50QXNJbnQzMihub2RlLT5jaGls
ZDIoKS5ub2RlKCkpOwogICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKIAot
ICAgICAgICAgICAgaWYgKG5vZGVDYW5UcnVuY2F0ZUludGVnZXIobm9kZS5hcml0aE5vZGVGbGFn
cygpKSkgeworICAgICAgICAgICAgaWYgKG5vZGVDYW5UcnVuY2F0ZUludGVnZXIobm9kZS0+YXJp
dGhOb2RlRmxhZ3MoKSkpIHsKICAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKG9wMS5ncHIoKSwg
cmVzdWx0LmdwcigpKTsKICAgICAgICAgICAgICAgICBtX2ppdC5zdWIzMihJbW0zMihpbW0yKSwg
cmVzdWx0LmdwcigpKTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAjaWYgRU5BQkxFKEpJVF9DT05T
VEFOVF9CTElORElORykKICAgICAgICAgICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlz
KTsKLSAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE92ZXJmbG93LCBKU1ZhbHVlUmVn
cygpLCBOb05vZGUsIG1faml0LmJyYW5jaFN1YjMyKE1hY3JvQXNzZW1ibGVyOjpPdmVyZmxvdywg
b3AxLmdwcigpLCBJbW0zMihpbW0yKSwgcmVzdWx0LmdwcigpLCBzY3JhdGNoLmdwcigpKSk7Cisg
ICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhPdmVyZmxvdywgSlNWYWx1ZVJlZ3MoKSwg
MCwgbV9qaXQuYnJhbmNoU3ViMzIoTWFjcm9Bc3NlbWJsZXI6Ok92ZXJmbG93LCBvcDEuZ3ByKCks
IEltbTMyKGltbTIpLCByZXN1bHQuZ3ByKCksIHNjcmF0Y2guZ3ByKCkpKTsKICNlbHNlCi0gICAg
ICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhPdmVyZmxvdywgSlNWYWx1ZVJlZ3MoKSwgTm9O
b2RlLCBtX2ppdC5icmFuY2hTdWIzMihNYWNyb0Fzc2VtYmxlcjo6T3ZlcmZsb3csIG9wMS5ncHIo
KSwgSW1tMzIoaW1tMiksIHJlc3VsdC5ncHIoKSkpOworICAgICAgICAgICAgICAgIHNwZWN1bGF0
aW9uQ2hlY2soT3ZlcmZsb3csIEpTVmFsdWVSZWdzKCksIDAsIG1faml0LmJyYW5jaFN1YjMyKE1h
Y3JvQXNzZW1ibGVyOjpPdmVyZmxvdywgb3AxLmdwcigpLCBJbW0zMihpbW0yKSwgcmVzdWx0Lmdw
cigpKSk7CiAjZW5kaWYKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgaW50ZWdlclJlc3Vs
dChyZXN1bHQuZ3ByKCksIG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAgICAgIGludGVnZXJSZXN1
bHQocmVzdWx0LmdwcigpLCBub2RlKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQog
ICAgICAgICAgICAgCi0gICAgICAgIGlmIChpc051bWJlckNvbnN0YW50KG5vZGUuY2hpbGQxKCku
aW5kZXgoKSkpIHsKLSAgICAgICAgICAgIGludDMyX3QgaW1tMSA9IHZhbHVlT2ZOdW1iZXJDb25z
dGFudEFzSW50MzIobm9kZS5jaGlsZDEoKS5pbmRleCgpKTsKLSAgICAgICAgICAgIFNwZWN1bGF0
ZUludGVnZXJPcGVyYW5kIG9wMih0aGlzLCBub2RlLmNoaWxkMigpKTsKKyAgICAgICAgaWYgKGlz
TnVtYmVyQ29uc3RhbnQobm9kZS0+Y2hpbGQxKCkubm9kZSgpKSkgeworICAgICAgICAgICAgaW50
MzJfdCBpbW0xID0gdmFsdWVPZk51bWJlckNvbnN0YW50QXNJbnQzMihub2RlLT5jaGlsZDEoKS5u
b2RlKCkpOworICAgICAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AyKHRoaXMsIG5v
ZGUtPmNoaWxkMigpKTsKICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CiAg
ICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBtX2ppdC5tb3ZlKEltbTMyKGltbTEpLCByZXN1
bHQuZ3ByKCkpOwotICAgICAgICAgICAgaWYgKG5vZGVDYW5UcnVuY2F0ZUludGVnZXIobm9kZS5h
cml0aE5vZGVGbGFncygpKSkKKyAgICAgICAgICAgIGlmIChub2RlQ2FuVHJ1bmNhdGVJbnRlZ2Vy
KG5vZGUtPmFyaXRoTm9kZUZsYWdzKCkpKQogICAgICAgICAgICAgICAgIG1faml0LnN1YjMyKG9w
Mi5ncHIoKSwgcmVzdWx0LmdwcigpKTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAg
ICBzcGVjdWxhdGlvbkNoZWNrKE92ZXJmbG93LCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0
LmJyYW5jaFN1YjMyKE1hY3JvQXNzZW1ibGVyOjpPdmVyZmxvdywgb3AyLmdwcigpLCByZXN1bHQu
Z3ByKCkpKTsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE92ZXJmbG93LCBKU1Zh
bHVlUmVncygpLCAwLCBtX2ppdC5icmFuY2hTdWIzMihNYWNyb0Fzc2VtYmxlcjo6T3ZlcmZsb3cs
IG9wMi5ncHIoKSwgcmVzdWx0LmdwcigpKSk7CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAg
ICBpbnRlZ2VyUmVzdWx0KHJlc3VsdC5ncHIoKSwgbV9jb21waWxlSW5kZXgpOworICAgICAgICAg
ICAgaW50ZWdlclJlc3VsdChyZXN1bHQuZ3ByKCksIG5vZGUpOwogICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJh
bmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwotICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3Bl
cmFuZCBvcDIodGhpcywgbm9kZS5jaGlsZDIoKSk7CisgICAgICAgIFNwZWN1bGF0ZUludGVnZXJP
cGVyYW5kIG9wMSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIFNwZWN1bGF0ZUludGVn
ZXJPcGVyYW5kIG9wMih0aGlzLCBub2RlLT5jaGlsZDIoKSk7CiAgICAgICAgIEdQUlRlbXBvcmFy
eSByZXN1bHQodGhpcyk7CiAKLSAgICAgICAgaWYgKG5vZGVDYW5UcnVuY2F0ZUludGVnZXIobm9k
ZS5hcml0aE5vZGVGbGFncygpKSkgeworICAgICAgICBpZiAobm9kZUNhblRydW5jYXRlSW50ZWdl
cihub2RlLT5hcml0aE5vZGVGbGFncygpKSkgewogICAgICAgICAgICAgbV9qaXQubW92ZShvcDEu
Z3ByKCksIHJlc3VsdC5ncHIoKSk7CiAgICAgICAgICAgICBtX2ppdC5zdWIzMihvcDIuZ3ByKCks
IHJlc3VsdC5ncHIoKSk7CiAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgc3BlY3VsYXRpb25D
aGVjayhPdmVyZmxvdywgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2hTdWIzMihN
YWNyb0Fzc2VtYmxlcjo6T3ZlcmZsb3csIG9wMS5ncHIoKSwgb3AyLmdwcigpLCByZXN1bHQuZ3By
KCkpKTsKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soT3ZlcmZsb3csIEpTVmFsdWVSZWdz
KCksIDAsIG1faml0LmJyYW5jaFN1YjMyKE1hY3JvQXNzZW1ibGVyOjpPdmVyZmxvdywgb3AxLmdw
cigpLCBvcDIuZ3ByKCksIHJlc3VsdC5ncHIoKSkpOwogCi0gICAgICAgIGludGVnZXJSZXN1bHQo
cmVzdWx0LmdwcigpLCBtX2NvbXBpbGVJbmRleCk7CisgICAgICAgIGludGVnZXJSZXN1bHQocmVz
dWx0LmdwcigpLCBub2RlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAgICAgCi0gICAg
U3BlY3VsYXRlRG91YmxlT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEoKSk7Ci0gICAgU3Bl
Y3VsYXRlRG91YmxlT3BlcmFuZCBvcDIodGhpcywgbm9kZS5jaGlsZDIoKSk7CisgICAgU3BlY3Vs
YXRlRG91YmxlT3BlcmFuZCBvcDEodGhpcywgbm9kZS0+Y2hpbGQxKCkpOworICAgIFNwZWN1bGF0
ZURvdWJsZU9wZXJhbmQgb3AyKHRoaXMsIG5vZGUtPmNoaWxkMigpKTsKICAgICBGUFJUZW1wb3Jh
cnkgcmVzdWx0KHRoaXMsIG9wMSk7CiAKICAgICBGUFJSZWcgcmVnMSA9IG9wMS5mcHIoKTsKICAg
ICBGUFJSZWcgcmVnMiA9IG9wMi5mcHIoKTsKICAgICBtX2ppdC5zdWJEb3VibGUocmVnMSwgcmVn
MiwgcmVzdWx0LmZwcigpKTsKIAotICAgIGRvdWJsZVJlc3VsdChyZXN1bHQuZnByKCksIG1fY29t
cGlsZUluZGV4KTsKKyAgICBkb3VibGVSZXN1bHQocmVzdWx0LmZwcigpLCBub2RlKTsKIH0KIAot
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFyaXRoTmVnYXRlKE5vZGUmIG5vZGUpCit2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlQXJpdGhOZWdhdGUoTm9kZSogbm9kZSkKIHsKICAgICBp
ZiAobV9qaXQuZ3JhcGgoKS5uZWdhdGVTaG91bGRTcGVjdWxhdGVJbnRlZ2VyKG5vZGUpKSB7Ci0g
ICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSgpKTsK
KyAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AxKHRoaXMsIG5vZGUtPmNoaWxkMSgp
KTsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKIAogICAgICAgICBtX2ppdC5t
b3ZlKG9wMS5ncHIoKSwgcmVzdWx0LmdwcigpKTsKIAotICAgICAgICBpZiAobm9kZUNhblRydW5j
YXRlSW50ZWdlcihub2RlLmFyaXRoTm9kZUZsYWdzKCkpKQorICAgICAgICBpZiAobm9kZUNhblRy
dW5jYXRlSW50ZWdlcihub2RlLT5hcml0aE5vZGVGbGFncygpKSkKICAgICAgICAgICAgIG1faml0
Lm5lZzMyKHJlc3VsdC5ncHIoKSk7CiAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgc3BlY3Vs
YXRpb25DaGVjayhPdmVyZmxvdywgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2hO
ZWczMihNYWNyb0Fzc2VtYmxlcjo6T3ZlcmZsb3csIHJlc3VsdC5ncHIoKSkpOwotICAgICAgICAg
ICAgaWYgKCFub2RlQ2FuSWdub3JlTmVnYXRpdmVaZXJvKG5vZGUuYXJpdGhOb2RlRmxhZ3MoKSkp
Ci0gICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhPdmVyZmxvdywgSlNWYWx1ZVJlZ3Mo
KSwgTm9Ob2RlLCBtX2ppdC5icmFuY2hUZXN0MzIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHJlc3Vs
dC5ncHIoKSkpOworICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhPdmVyZmxvdywgSlNWYWx1
ZVJlZ3MoKSwgMCwgbV9qaXQuYnJhbmNoTmVnMzIoTWFjcm9Bc3NlbWJsZXI6Ok92ZXJmbG93LCBy
ZXN1bHQuZ3ByKCkpKTsKKyAgICAgICAgICAgIGlmICghbm9kZUNhbklnbm9yZU5lZ2F0aXZlWmVy
byhub2RlLT5hcml0aE5vZGVGbGFncygpKSkKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNo
ZWNrKE92ZXJmbG93LCBKU1ZhbHVlUmVncygpLCAwLCBtX2ppdC5icmFuY2hUZXN0MzIoTWFjcm9B
c3NlbWJsZXI6Olplcm8sIHJlc3VsdC5ncHIoKSkpOwogICAgICAgICB9CiAKLSAgICAgICAgaW50
ZWdlclJlc3VsdChyZXN1bHQuZ3ByKCksIG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAgaW50ZWdl
clJlc3VsdChyZXN1bHQuZ3ByKCksIG5vZGUpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAg
ICAgICAKLSAgICBTcGVjdWxhdGVEb3VibGVPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSgp
KTsKKyAgICBTcGVjdWxhdGVEb3VibGVPcGVyYW5kIG9wMSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7
CiAgICAgRlBSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKIAogICAgIG1faml0Lm5lZ2F0ZURvdWJs
ZShvcDEuZnByKCksIHJlc3VsdC5mcHIoKSk7CiAKLSAgICBkb3VibGVSZXN1bHQocmVzdWx0LmZw
cigpLCBtX2NvbXBpbGVJbmRleCk7CisgICAgZG91YmxlUmVzdWx0KHJlc3VsdC5mcHIoKSwgbm9k
ZSk7CiB9CiAKLXZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBcml0aE11bChOb2RlJiBub2Rl
KQordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFyaXRoTXVsKE5vZGUqIG5vZGUpCiB7CiAg
ICAgaWYgKG1faml0LmdyYXBoKCkubXVsU2hvdWxkU3BlY3VsYXRlSW50ZWdlcihub2RlKSkgewot
ICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEoKSk7
Ci0gICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMih0aGlzLCBub2RlLmNoaWxkMigp
KTsKKyAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AxKHRoaXMsIG5vZGUtPmNoaWxk
MSgpKTsKKyAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AyKHRoaXMsIG5vZGUtPmNo
aWxkMigpKTsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKIAogICAgICAgICBH
UFJSZWcgcmVnMSA9IG9wMS5ncHIoKTsKQEAgLTMyNDksMjkgKzMyMzMsMjkgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZUFyaXRoTXVsKE5vZAogICAgICAgICAvLyBXZSBjYW4gcGVyZm9y
bSB0cnVuY2F0ZWQgbXVsdGlwbGljYXRpb25zIGlmIHdlIGdldCB0byB0aGlzIHBvaW50LCBiZWNh
dXNlIGlmIHRoZQogICAgICAgICAvLyBmaXh1cCBwaGFzZSBjb3VsZCBub3QgcHJvdmUgdGhhdCBp
dCB3b3VsZCBiZSBzYWZlLCBpdCB3b3VsZCBoYXZlIHR1cm5lZCB1cyBpbnRvCiAgICAgICAgIC8v
IGEgZG91YmxlIG11bHRpcGxpY2F0aW9uLgotICAgICAgICBpZiAobm9kZUNhblRydW5jYXRlSW50
ZWdlcihub2RlLmFyaXRoTm9kZUZsYWdzKCkpKSB7CisgICAgICAgIGlmIChub2RlQ2FuVHJ1bmNh
dGVJbnRlZ2VyKG5vZGUtPmFyaXRoTm9kZUZsYWdzKCkpKSB7CiAgICAgICAgICAgICBtX2ppdC5t
b3ZlKHJlZzEsIHJlc3VsdC5ncHIoKSk7CiAgICAgICAgICAgICBtX2ppdC5tdWwzMihyZWcyLCBy
ZXN1bHQuZ3ByKCkpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgc3BlY3VsYXRpb25D
aGVjaygKLSAgICAgICAgICAgICAgICBPdmVyZmxvdywgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLAor
ICAgICAgICAgICAgICAgIE92ZXJmbG93LCBKU1ZhbHVlUmVncygpLCAwLAogICAgICAgICAgICAg
ICAgIG1faml0LmJyYW5jaE11bDMyKE1hY3JvQXNzZW1ibGVyOjpPdmVyZmxvdywgcmVnMSwgcmVn
MiwgcmVzdWx0LmdwcigpKSk7CiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICAvLyBD
aGVjayBmb3IgbmVnYXRpdmUgemVybywgaWYgdGhlIHVzZXJzIG9mIHRoaXMgbm9kZSBjYXJlIGFi
b3V0IHN1Y2ggdGhpbmdzLgotICAgICAgICBpZiAoIW5vZGVDYW5JZ25vcmVOZWdhdGl2ZVplcm8o
bm9kZS5hcml0aE5vZGVGbGFncygpKSkgeworICAgICAgICBpZiAoIW5vZGVDYW5JZ25vcmVOZWdh
dGl2ZVplcm8obm9kZS0+YXJpdGhOb2RlRmxhZ3MoKSkpIHsKICAgICAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wIHJlc3VsdE5vblplcm8gPSBtX2ppdC5icmFuY2hUZXN0MzIoTWFjcm9Bc3Nl
bWJsZXI6Ok5vblplcm8sIHJlc3VsdC5ncHIoKSk7Ci0gICAgICAgICAgICBzcGVjdWxhdGlvbkNo
ZWNrKE5lZ2F0aXZlWmVybywgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2gzMihN
YWNyb0Fzc2VtYmxlcjo6TGVzc1RoYW4sIHJlZzEsIFRydXN0ZWRJbW0zMigwKSkpOwotICAgICAg
ICAgICAgc3BlY3VsYXRpb25DaGVjayhOZWdhdGl2ZVplcm8sIEpTVmFsdWVSZWdzKCksIE5vTm9k
ZSwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Okxlc3NUaGFuLCByZWcyLCBUcnVzdGVk
SW1tMzIoMCkpKTsKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soTmVnYXRpdmVaZXJvLCBK
U1ZhbHVlUmVncygpLCAwLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6TGVzc1RoYW4s
IHJlZzEsIFRydXN0ZWRJbW0zMigwKSkpOworICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhO
ZWdhdGl2ZVplcm8sIEpTVmFsdWVSZWdzKCksIDAsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1i
bGVyOjpMZXNzVGhhbiwgcmVnMiwgVHJ1c3RlZEltbTMyKDApKSk7CiAgICAgICAgICAgICByZXN1
bHROb25aZXJvLmxpbmsoJm1faml0KTsKICAgICAgICAgfQogCi0gICAgICAgIGludGVnZXJSZXN1
bHQocmVzdWx0LmdwcigpLCBtX2NvbXBpbGVJbmRleCk7CisgICAgICAgIGludGVnZXJSZXN1bHQo
cmVzdWx0LmdwcigpLCBub2RlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIFNwZWN1
bGF0ZURvdWJsZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwotICAgIFNwZWN1bGF0
ZURvdWJsZU9wZXJhbmQgb3AyKHRoaXMsIG5vZGUuY2hpbGQyKCkpOworICAgIFNwZWN1bGF0ZURv
dWJsZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKKyAgICBTcGVjdWxhdGVEb3Vi
bGVPcGVyYW5kIG9wMih0aGlzLCBub2RlLT5jaGlsZDIoKSk7CiAgICAgRlBSVGVtcG9yYXJ5IHJl
c3VsdCh0aGlzLCBvcDEsIG9wMik7CiAKICAgICBGUFJSZWcgcmVnMSA9IG9wMS5mcHIoKTsKQEAg
LTMyNzksMTQgKzMyNjMsMTQgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFyaXRoTXVs
KE5vZAogICAgICAgICAKICAgICBtX2ppdC5tdWxEb3VibGUocmVnMSwgcmVnMiwgcmVzdWx0LmZw
cigpKTsKICAgICAgICAgCi0gICAgZG91YmxlUmVzdWx0KHJlc3VsdC5mcHIoKSwgbV9jb21waWxl
SW5kZXgpOworICAgIGRvdWJsZVJlc3VsdChyZXN1bHQuZnByKCksIG5vZGUpOwogfQogCiAjaWYg
Q1BVKFg4NikgfHwgQ1BVKFg4Nl82NCkKLXZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVJbnRl
Z2VyQXJpdGhEaXZGb3JYODYoTm9kZSYgbm9kZSkKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVJbnRlZ2VyQXJpdGhEaXZGb3JYODYoTm9kZSogbm9kZSkKIHsKLSAgICBTcGVjdWxhdGVJbnRl
Z2VyT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEoKSk7Ci0gICAgU3BlY3VsYXRlSW50ZWdl
ck9wZXJhbmQgb3AyKHRoaXMsIG5vZGUuY2hpbGQyKCkpOworICAgIFNwZWN1bGF0ZUludGVnZXJP
cGVyYW5kIG9wMSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CisgICAgU3BlY3VsYXRlSW50ZWdlck9w
ZXJhbmQgb3AyKHRoaXMsIG5vZGUtPmNoaWxkMigpKTsKICAgICBHUFJUZW1wb3JhcnkgZWF4KHRo
aXMsIFg4NlJlZ2lzdGVyczo6ZWF4KTsKICAgICBHUFJUZW1wb3JhcnkgZWR4KHRoaXMsIFg4NlJl
Z2lzdGVyczo6ZWR4KTsKICAgICBHUFJSZWcgb3AxR1BSID0gb3AxLmdwcigpOwpAQCAtMzMxMyw5
ICszMjk3LDkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUludGVnZXJBcml0aAogICAg
IEpJVENvbXBpbGVyOjpKdW1wIHNhZmVEZW5vbWluYXRvciA9IG1faml0LmJyYW5jaDMyKEpJVENv
bXBpbGVyOjpBYm92ZSwgdGVtcCwgSklUQ29tcGlsZXI6OlRydXN0ZWRJbW0zMigxKSk7CiAgICAg
CiAgICAgSklUQ29tcGlsZXI6Okp1bXAgZG9uZTsKLSAgICBpZiAobm9kZVVzZWRBc051bWJlcihu
b2RlLmFyaXRoTm9kZUZsYWdzKCkpKSB7Ci0gICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soT3ZlcmZs
b3csIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoVGVzdDMyKEpJVENvbXBpbGVy
OjpaZXJvLCBvcDJHUFIpKTsKLSAgICAgICAgc3BlY3VsYXRpb25DaGVjayhPdmVyZmxvdywgSlNW
YWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2gzMihKSVRDb21waWxlcjo6RXF1YWwsIG9w
MUdQUiwgVHJ1c3RlZEltbTMyKC0yMTQ3NDgzNjQ3LTEpKSk7CisgICAgaWYgKG5vZGVVc2VkQXNO
dW1iZXIobm9kZS0+YXJpdGhOb2RlRmxhZ3MoKSkpIHsKKyAgICAgICAgc3BlY3VsYXRpb25DaGVj
ayhPdmVyZmxvdywgSlNWYWx1ZVJlZ3MoKSwgMCwgbV9qaXQuYnJhbmNoVGVzdDMyKEpJVENvbXBp
bGVyOjpaZXJvLCBvcDJHUFIpKTsKKyAgICAgICAgc3BlY3VsYXRpb25DaGVjayhPdmVyZmxvdywg
SlNWYWx1ZVJlZ3MoKSwgMCwgbV9qaXQuYnJhbmNoMzIoSklUQ29tcGlsZXI6OkVxdWFsLCBvcDFH
UFIsIFRydXN0ZWRJbW0zMigtMjE0NzQ4MzY0Ny0xKSkpOwogICAgIH0gZWxzZSB7CiAgICAgICAg
IEpJVENvbXBpbGVyOjpKdW1wIHplcm8gPSBtX2ppdC5icmFuY2hUZXN0MzIoSklUQ29tcGlsZXI6
Olplcm8sIG9wMkdQUik7CiAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIGlzTmVnMlRvVGhlMzEg
PSBtX2ppdC5icmFuY2gzMihKSVRDb21waWxlcjo6RXF1YWwsIG9wMUdQUiwgVHJ1c3RlZEltbTMy
KC0yMTQ3NDgzNjQ3LTEpKTsKQEAgLTMzMjksOSArMzMxMyw5IEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVJbnRlZ2VyQXJpdGgKICAgICAgICAgICAgIAogICAgIC8vIElmIHRoZSB1c2Vy
IGNhcmVzIGFib3V0IG5lZ2F0aXZlIHplcm8sIHRoZW4gc3BlY3VsYXRlIHRoYXQgd2UncmUgbm90
IGFib3V0CiAgICAgLy8gdG8gcHJvZHVjZSBuZWdhdGl2ZSB6ZXJvLgotICAgIGlmICghbm9kZUNh
bklnbm9yZU5lZ2F0aXZlWmVybyhub2RlLmFyaXRoTm9kZUZsYWdzKCkpKSB7CisgICAgaWYgKCFu
b2RlQ2FuSWdub3JlTmVnYXRpdmVaZXJvKG5vZGUtPmFyaXRoTm9kZUZsYWdzKCkpKSB7CiAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG51bWVyYXRvck5vblplcm8gPSBtX2ppdC5icmFuY2hU
ZXN0MzIoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIG9wMUdQUik7Ci0gICAgICAgIHNwZWN1bGF0
aW9uQ2hlY2soTmVnYXRpdmVaZXJvLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5j
aDMyKE1hY3JvQXNzZW1ibGVyOjpMZXNzVGhhbiwgb3AyR1BSLCBUcnVzdGVkSW1tMzIoMCkpKTsK
KyAgICAgICAgc3BlY3VsYXRpb25DaGVjayhOZWdhdGl2ZVplcm8sIEpTVmFsdWVSZWdzKCksIDAs
IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpMZXNzVGhhbiwgb3AyR1BSLCBUcnVzdGVk
SW1tMzIoMCkpKTsKICAgICAgICAgbnVtZXJhdG9yTm9uWmVyby5saW5rKCZtX2ppdCk7CiAgICAg
fQogICAgIApAQCAtMzM0OSwyNSArMzMzMywyNSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlSW50ZWdlckFyaXRoCiAKICAgICAvLyBDaGVjayB0aGF0IHRoZXJlIHdhcyBubyByZW1haW5k
ZXIuIElmIHRoZXJlIGhhZCBiZWVuLCB0aGVuIHdlJ2QgYmUgb2JsaWdhdGVkIHRvCiAgICAgLy8g
cHJvZHVjZSBhIGRvdWJsZSByZXN1bHQgaW5zdGVhZC4KLSAgICBpZiAobm9kZVVzZWRBc051bWJl
cihub2RlLmFyaXRoTm9kZUZsYWdzKCkpKQotICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE92ZXJm
bG93LCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaFRlc3QzMihKSVRDb21waWxl
cjo6Tm9uWmVybywgZWR4LmdwcigpKSk7CisgICAgaWYgKG5vZGVVc2VkQXNOdW1iZXIobm9kZS0+
YXJpdGhOb2RlRmxhZ3MoKSkpCisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soT3ZlcmZsb3csIEpT
VmFsdWVSZWdzKCksIDAsIG1faml0LmJyYW5jaFRlc3QzMihKSVRDb21waWxlcjo6Tm9uWmVybywg
ZWR4LmdwcigpKSk7CiAgICAgZWxzZQogICAgICAgICBkb25lLmxpbmsoJm1faml0KTsKICAgICAg
ICAgICAgIAotICAgIGludGVnZXJSZXN1bHQoZWF4LmdwcigpLCBtX2NvbXBpbGVJbmRleCk7Cisg
ICAgaW50ZWdlclJlc3VsdChlYXguZ3ByKCksIG5vZGUpOwogfQogI2VuZGlmIC8vIENQVShYODYp
IHx8IENQVShYODZfNjQpCiAKLXZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBcml0aE1vZChO
b2RlJiBub2RlKQordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFyaXRoTW9kKE5vZGUqIG5v
ZGUpCiB7Ci0gICAgaWYgKE5vZGU6OnNob3VsZFNwZWN1bGF0ZUludGVnZXJGb3JBcml0aG1ldGlj
KGF0KG5vZGUuY2hpbGQxKCkpLCBhdChub2RlLmNoaWxkMigpKSkKLSAgICAgICAgJiYgbm9kZS5j
YW5TcGVjdWxhdGVJbnRlZ2VyKCkpIHsKKyAgICBpZiAoTm9kZTo6c2hvdWxkU3BlY3VsYXRlSW50
ZWdlckZvckFyaXRobWV0aWMobm9kZS0+Y2hpbGQxKCkubm9kZSgpLCBub2RlLT5jaGlsZDIoKS5u
b2RlKCkpCisgICAgICAgICYmIG5vZGUtPmNhblNwZWN1bGF0ZUludGVnZXIoKSkgewogICAgICAg
ICBjb21waWxlU29mdE1vZHVsbyhub2RlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAg
ICAgCi0gICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEoKSk7
Ci0gICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCBvcDIodGhpcywgbm9kZS5jaGlsZDIoKSk7Cisg
ICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCBvcDEodGhpcywgbm9kZS0+Y2hpbGQxKCkpOworICAg
IFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgb3AyKHRoaXMsIG5vZGUtPmNoaWxkMigpKTsKICAgICAg
ICAgCiAgICAgRlBSUmVnIG9wMUZQUiA9IG9wMS5mcHIoKTsKICAgICBGUFJSZWcgb3AyRlBSID0g
b3AyLmZwcigpOwpAQCAtMzM3OCw0MiArMzM2Miw0MiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlQXJpdGhNb2QoTm9kCiAKICAgICBjYWxsT3BlcmF0aW9uKGZtb2RBc0RGR09wZXJhdGlv
biwgcmVzdWx0LmZwcigpLCBvcDFGUFIsIG9wMkZQUik7CiAgICAgICAgIAotICAgIGRvdWJsZVJl
c3VsdChyZXN1bHQuZnByKCksIG1fY29tcGlsZUluZGV4KTsKKyAgICBkb3VibGVSZXN1bHQocmVz
dWx0LmZwcigpLCBub2RlKTsKIH0KIAogLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBjb21wYXJlIGlz
IGZ1c2VkIHdpdGggYSBzdWJzZXF1ZW50IGJyYW5jaC4KLWJvb2wgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBhcmUoTm9kZSYgbm9kZSwgTWFjcm9Bc3NlbWJsZXI6OlJlbGF0aW9uYWxDb25kaXRpb24gY29u
ZGl0aW9uLCBNYWNyb0Fzc2VtYmxlcjo6RG91YmxlQ29uZGl0aW9uIGRvdWJsZUNvbmRpdGlvbiwg
U19ERkdPcGVyYXRpb25fRUpKIG9wZXJhdGlvbikKK2Jvb2wgU3BlY3VsYXRpdmVKSVQ6OmNvbXBh
cmUoTm9kZSogbm9kZSwgTWFjcm9Bc3NlbWJsZXI6OlJlbGF0aW9uYWxDb25kaXRpb24gY29uZGl0
aW9uLCBNYWNyb0Fzc2VtYmxlcjo6RG91YmxlQ29uZGl0aW9uIGRvdWJsZUNvbmRpdGlvbiwgU19E
RkdPcGVyYXRpb25fRUpKIG9wZXJhdGlvbikKIHsKICAgICBpZiAoY29tcGlsZVBlZXBIb2xlQnJh
bmNoKG5vZGUsIGNvbmRpdGlvbiwgZG91YmxlQ29uZGl0aW9uLCBvcGVyYXRpb24pKQogICAgICAg
ICByZXR1cm4gdHJ1ZTsKIAotICAgIGlmIChOb2RlOjpzaG91bGRTcGVjdWxhdGVJbnRlZ2VyKGF0
KG5vZGUuY2hpbGQxKCkpLCBhdChub2RlLmNoaWxkMigpKSkpIHsKKyAgICBpZiAoTm9kZTo6c2hv
dWxkU3BlY3VsYXRlSW50ZWdlcihub2RlLT5jaGlsZDEoKS5ub2RlKCksIG5vZGUtPmNoaWxkMigp
Lm5vZGUoKSkpIHsKICAgICAgICAgY29tcGlsZUludGVnZXJDb21wYXJlKG5vZGUsIGNvbmRpdGlv
bik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgCi0gICAgaWYgKE5vZGU6OnNo
b3VsZFNwZWN1bGF0ZU51bWJlcihhdChub2RlLmNoaWxkMSgpKSwgYXQobm9kZS5jaGlsZDIoKSkp
KSB7CisgICAgaWYgKE5vZGU6OnNob3VsZFNwZWN1bGF0ZU51bWJlcihub2RlLT5jaGlsZDEoKS5u
b2RlKCksIG5vZGUtPmNoaWxkMigpLm5vZGUoKSkpIHsKICAgICAgICAgY29tcGlsZURvdWJsZUNv
bXBhcmUobm9kZSwgZG91YmxlQ29uZGl0aW9uKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
IH0KICAgICAKLSAgICBpZiAobm9kZS5vcCgpID09IENvbXBhcmVFcSkgewotICAgICAgICBpZiAo
YXQobm9kZS5jaGlsZDEoKSkuc2hvdWxkU3BlY3VsYXRlU3RyaW5nKCkgfHwgYXQobm9kZS5jaGls
ZDIoKSkuc2hvdWxkU3BlY3VsYXRlU3RyaW5nKCkpIHsKKyAgICBpZiAobm9kZS0+b3AoKSA9PSBD
b21wYXJlRXEpIHsKKyAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVT
dHJpbmcoKSB8fCBub2RlLT5jaGlsZDIoKS0+c2hvdWxkU3BlY3VsYXRlU3RyaW5nKCkpIHsKICAg
ICAgICAgICAgIG5vblNwZWN1bGF0aXZlTm9uUGVlcGhvbGVDb21wYXJlKG5vZGUsIGNvbmRpdGlv
biwgb3BlcmF0aW9uKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAg
ICAgICAKLSAgICAgICAgaWYgKGF0KG5vZGUuY2hpbGQxKCkpLnNob3VsZFNwZWN1bGF0ZU5vblN0
cmluZ0NlbGwoKSAmJiBhdChub2RlLmNoaWxkMigpKS5zaG91bGRTcGVjdWxhdGVOb25TdHJpbmdD
ZWxsT3JPdGhlcigpKSB7Ci0gICAgICAgICAgICBjb21waWxlT2JqZWN0VG9PYmplY3RPck90aGVy
RXF1YWxpdHkobm9kZS5jaGlsZDEoKSwgbm9kZS5jaGlsZDIoKSk7CisgICAgICAgIGlmIChub2Rl
LT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlTm9uU3RyaW5nQ2VsbCgpICYmIG5vZGUtPmNoaWxk
MigpLT5zaG91bGRTcGVjdWxhdGVOb25TdHJpbmdDZWxsT3JPdGhlcigpKSB7CisgICAgICAgICAg
ICBjb21waWxlT2JqZWN0VG9PYmplY3RPck90aGVyRXF1YWxpdHkobm9kZS0+Y2hpbGQxKCksIG5v
ZGUtPmNoaWxkMigpKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAg
ICAgICAKLSAgICAgICAgaWYgKGF0KG5vZGUuY2hpbGQxKCkpLnNob3VsZFNwZWN1bGF0ZU5vblN0
cmluZ0NlbGxPck90aGVyKCkgJiYgYXQobm9kZS5jaGlsZDIoKSkuc2hvdWxkU3BlY3VsYXRlTm9u
U3RyaW5nQ2VsbCgpKSB7Ci0gICAgICAgICAgICBjb21waWxlT2JqZWN0VG9PYmplY3RPck90aGVy
RXF1YWxpdHkobm9kZS5jaGlsZDIoKSwgbm9kZS5jaGlsZDEoKSk7CisgICAgICAgIGlmIChub2Rl
LT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlTm9uU3RyaW5nQ2VsbE9yT3RoZXIoKSAmJiBub2Rl
LT5jaGlsZDIoKS0+c2hvdWxkU3BlY3VsYXRlTm9uU3RyaW5nQ2VsbCgpKSB7CisgICAgICAgICAg
ICBjb21waWxlT2JqZWN0VG9PYmplY3RPck90aGVyRXF1YWxpdHkobm9kZS0+Y2hpbGQyKCksIG5v
ZGUtPmNoaWxkMSgpKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogCi0g
ICAgICAgIGlmIChhdChub2RlLmNoaWxkMSgpKS5zaG91bGRTcGVjdWxhdGVOb25TdHJpbmdDZWxs
KCkgJiYgYXQobm9kZS5jaGlsZDIoKSkuc2hvdWxkU3BlY3VsYXRlTm9uU3RyaW5nQ2VsbCgpKSB7
CisgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlTm9uU3RyaW5nQ2Vs
bCgpICYmIG5vZGUtPmNoaWxkMigpLT5zaG91bGRTcGVjdWxhdGVOb25TdHJpbmdDZWxsKCkpIHsK
ICAgICAgICAgICAgIGNvbXBpbGVPYmplY3RFcXVhbGl0eShub2RlKTsKICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICAgICAgfQpAQCAtMzQyMywxNiArMzQwNywxNSBAQCBib29sIFNwZWN1
bGF0aXZlSklUOjpjb21wYXJlKE5vZGUmIG5vZGUsCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1i
b29sIFNwZWN1bGF0aXZlSklUOjpjb21waWxlU3RyaWN0RXFGb3JDb25zdGFudChOb2RlJiBub2Rl
LCBFZGdlIHZhbHVlLCBKU1ZhbHVlIGNvbnN0YW50KQorYm9vbCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZVN0cmljdEVxRm9yQ29uc3RhbnQoTm9kZSogbm9kZSwgRWRnZSB2YWx1ZSwgSlNWYWx1ZSBj
b25zdGFudCkKIHsKICAgICBKU1ZhbHVlT3BlcmFuZCBvcDEodGhpcywgdmFsdWUpOwogICAgIAog
ICAgIHVuc2lnbmVkIGJyYW5jaEluZGV4SW5CbG9jayA9IGRldGVjdFBlZXBIb2xlQnJhbmNoKCk7
CiAgICAgaWYgKGJyYW5jaEluZGV4SW5CbG9jayAhPSBVSU5UX01BWCkgewotICAgICAgICBOb2Rl
SW5kZXggYnJhbmNoTm9kZUluZGV4ID0gbV9qaXQuZ3JhcGgoKS5tX2Jsb2Nrc1ttX2Jsb2NrXS0+
YXQoYnJhbmNoSW5kZXhJbkJsb2NrKTsKLSAgICAgICAgTm9kZSYgYnJhbmNoTm9kZSA9IGF0KGJy
YW5jaE5vZGVJbmRleCk7Ci0gICAgICAgIEJsb2NrSW5kZXggdGFrZW4gPSBicmFuY2hOb2RlLnRh
a2VuQmxvY2tJbmRleCgpOwotICAgICAgICBCbG9ja0luZGV4IG5vdFRha2VuID0gYnJhbmNoTm9k
ZS5ub3RUYWtlbkJsb2NrSW5kZXgoKTsKKyAgICAgICAgTm9kZSogYnJhbmNoTm9kZSA9IG1faml0
LmdyYXBoKCkubV9ibG9ja3NbbV9ibG9ja10tPmF0KGJyYW5jaEluZGV4SW5CbG9jayk7CisgICAg
ICAgIEJsb2NrSW5kZXggdGFrZW4gPSBicmFuY2hOb2RlLT50YWtlbkJsb2NrSW5kZXgoKTsKKyAg
ICAgICAgQmxvY2tJbmRleCBub3RUYWtlbiA9IGJyYW5jaE5vZGUtPm5vdFRha2VuQmxvY2tJbmRl
eCgpOwogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6UmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRp
b24gPSBNYWNyb0Fzc2VtYmxlcjo6RXF1YWw7CiAgICAgICAgIAogICAgICAgICAvLyBUaGUgYnJh
bmNoIGluc3RydWN0aW9uIHdpbGwgYnJhbmNoIHRvIHRoZSB0YWtlbiBibG9jay4KQEAgLTM0NjMs
MTAgKzM0NDYsMTAgQEAgYm9vbCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVN0cmljdEVxRm9yQwog
ICAgICAgICAKICAgICAgICAganVtcChub3RUYWtlbik7CiAgICAgICAgIAotICAgICAgICB1c2Uo
bm9kZS5jaGlsZDEoKSk7Ci0gICAgICAgIHVzZShub2RlLmNoaWxkMigpKTsKKyAgICAgICAgdXNl
KG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgdXNlKG5vZGUtPmNoaWxkMigpKTsKICAgICAgICAg
bV9pbmRleEluQmxvY2sgPSBicmFuY2hJbmRleEluQmxvY2s7Ci0gICAgICAgIG1fY29tcGlsZUlu
ZGV4ID0gYnJhbmNoTm9kZUluZGV4OworICAgICAgICBtX2N1cnJlbnROb2RlID0gYnJhbmNoTm9k
ZTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIApAQCAtMzQ3OSw3ICszNDYyLDcg
QEAgYm9vbCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVN0cmljdEVxRm9yQwogICAgIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wIG5vdEVxdWFsID0gbV9qaXQuYnJhbmNoNjQoTWFjcm9Bc3NlbWJsZXI6Ok5v
dEVxdWFsLCBvcDFHUFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5j
b2RlKGNvbnN0YW50KSkpOwogICAgIG1faml0Lm9yMzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJ
bW0zMigxKSwgcmVzdWx0R1BSKTsKICAgICBub3RFcXVhbC5saW5rKCZtX2ppdCk7Ci0gICAganNW
YWx1ZVJlc3VsdChyZXN1bHRHUFIsIG1fY29tcGlsZUluZGV4LCBEYXRhRm9ybWF0SlNCb29sZWFu
KTsKKyAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSwgRGF0YUZvcm1hdEpTQm9vbGVh
bik7CiAjZWxzZQogICAgIEdQUlJlZyBvcDFQYXlsb2FkR1BSID0gb3AxLnBheWxvYWRHUFIoKTsK
ICAgICBHUFJSZWcgb3AxVGFnR1BSID0gb3AxLnRhZ0dQUigpOwpAQCAtMzQ5MCw0MCArMzQ3Myw0
MCBAQCBib29sIFNwZWN1bGF0aXZlSklUOjpjb21waWxlU3RyaWN0RXFGb3JDCiAgICAgbm90RXF1
YWwuYXBwZW5kKG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgb3AxUGF5
bG9hZEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkltbTMyKGNvbnN0YW50LnBheWxvYWQoKSkpKTsKICAg
ICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW0zMigxKSwgcmVzdWx0R1BSKTsKICAgICBub3RFcXVhbC5s
aW5rKCZtX2ppdCk7Ci0gICAgYm9vbGVhblJlc3VsdChyZXN1bHRHUFIsIG1fY29tcGlsZUluZGV4
KTsKKyAgICBib29sZWFuUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7CiAjZW5kaWYKICAgICAKICAg
ICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVTdHJpY3RF
cShOb2RlJiBub2RlKQorYm9vbCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVN0cmljdEVxKE5vZGUq
IG5vZGUpCiB7CiAgICAgLy8gMSkgSWYgZWl0aGVyIG9wZXJhbmQgaXMgYSBjb25zdGFudCBhbmQg
dGhhdCBjb25zdGFudCBpcyBub3QgYSBkb3VibGUsIGludGVnZXIsCiAgICAgLy8gICAgb3Igc3Ry
aW5nLCB0aGVuIGRvIGEgSlNWYWx1ZSBjb21wYXJpc29uLgogICAgIAotICAgIGlmIChpc0pTQ29u
c3RhbnQobm9kZS5jaGlsZDEoKS5pbmRleCgpKSkgewotICAgICAgICBKU1ZhbHVlIHZhbHVlID0g
dmFsdWVPZkpTQ29uc3RhbnQobm9kZS5jaGlsZDEoKS5pbmRleCgpKTsKKyAgICBpZiAoaXNKU0Nv
bnN0YW50KG5vZGUtPmNoaWxkMSgpLm5vZGUoKSkpIHsKKyAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9
IHZhbHVlT2ZKU0NvbnN0YW50KG5vZGUtPmNoaWxkMSgpLm5vZGUoKSk7CiAgICAgICAgIGlmICgh
dmFsdWUuaXNOdW1iZXIoKSAmJiAhdmFsdWUuaXNTdHJpbmcoKSkKLSAgICAgICAgICAgIHJldHVy
biBjb21waWxlU3RyaWN0RXFGb3JDb25zdGFudChub2RlLCBub2RlLmNoaWxkMigpLCB2YWx1ZSk7
CisgICAgICAgICAgICByZXR1cm4gY29tcGlsZVN0cmljdEVxRm9yQ29uc3RhbnQobm9kZSwgbm9k
ZS0+Y2hpbGQyKCksIHZhbHVlKTsKICAgICB9CiAgICAgCi0gICAgaWYgKGlzSlNDb25zdGFudChu
b2RlLmNoaWxkMigpLmluZGV4KCkpKSB7Ci0gICAgICAgIEpTVmFsdWUgdmFsdWUgPSB2YWx1ZU9m
SlNDb25zdGFudChub2RlLmNoaWxkMigpLmluZGV4KCkpOworICAgIGlmIChpc0pTQ29uc3RhbnQo
bm9kZS0+Y2hpbGQyKCkubm9kZSgpKSkgeworICAgICAgICBKU1ZhbHVlIHZhbHVlID0gdmFsdWVP
ZkpTQ29uc3RhbnQobm9kZS0+Y2hpbGQyKCkubm9kZSgpKTsKICAgICAgICAgaWYgKCF2YWx1ZS5p
c051bWJlcigpICYmICF2YWx1ZS5pc1N0cmluZygpKQotICAgICAgICAgICAgcmV0dXJuIGNvbXBp
bGVTdHJpY3RFcUZvckNvbnN0YW50KG5vZGUsIG5vZGUuY2hpbGQxKCksIHZhbHVlKTsKKyAgICAg
ICAgICAgIHJldHVybiBjb21waWxlU3RyaWN0RXFGb3JDb25zdGFudChub2RlLCBub2RlLT5jaGls
ZDEoKSwgdmFsdWUpOwogICAgIH0KICAgICAKICAgICAvLyAyKSBJZiB0aGUgb3BlcmFuZHMgYXJl
IHByZWRpY3RlZCBpbnRlZ2VyLCBkbyBhbiBpbnRlZ2VyIGNvbXBhcmlzb24uCiAgICAgCi0gICAg
aWYgKE5vZGU6OnNob3VsZFNwZWN1bGF0ZUludGVnZXIoYXQobm9kZS5jaGlsZDEoKSksIGF0KG5v
ZGUuY2hpbGQyKCkpKSkgeworICAgIGlmIChOb2RlOjpzaG91bGRTcGVjdWxhdGVJbnRlZ2VyKG5v
ZGUtPmNoaWxkMSgpLm5vZGUoKSwgbm9kZS0+Y2hpbGQyKCkubm9kZSgpKSkgewogICAgICAgICB1
bnNpZ25lZCBicmFuY2hJbmRleEluQmxvY2sgPSBkZXRlY3RQZWVwSG9sZUJyYW5jaCgpOwogICAg
ICAgICBpZiAoYnJhbmNoSW5kZXhJbkJsb2NrICE9IFVJTlRfTUFYKSB7Ci0gICAgICAgICAgICBO
b2RlSW5kZXggYnJhbmNoTm9kZUluZGV4ID0gbV9qaXQuZ3JhcGgoKS5tX2Jsb2Nrc1ttX2Jsb2Nr
XS0+YXQoYnJhbmNoSW5kZXhJbkJsb2NrKTsKLSAgICAgICAgICAgIGNvbXBpbGVQZWVwSG9sZUlu
dGVnZXJCcmFuY2gobm9kZSwgYnJhbmNoTm9kZUluZGV4LCBNYWNyb0Fzc2VtYmxlcjo6RXF1YWwp
OwotICAgICAgICAgICAgdXNlKG5vZGUuY2hpbGQxKCkpOwotICAgICAgICAgICAgdXNlKG5vZGUu
Y2hpbGQyKCkpOworICAgICAgICAgICAgTm9kZSogYnJhbmNoTm9kZSA9IG1faml0LmdyYXBoKCku
bV9ibG9ja3NbbV9ibG9ja10tPmF0KGJyYW5jaEluZGV4SW5CbG9jayk7CisgICAgICAgICAgICBj
b21waWxlUGVlcEhvbGVJbnRlZ2VyQnJhbmNoKG5vZGUsIGJyYW5jaE5vZGUsIE1hY3JvQXNzZW1i
bGVyOjpFcXVhbCk7CisgICAgICAgICAgICB1c2Uobm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAg
ICAgdXNlKG5vZGUtPmNoaWxkMigpKTsKICAgICAgICAgICAgIG1faW5kZXhJbkJsb2NrID0gYnJh
bmNoSW5kZXhJbkJsb2NrOwotICAgICAgICAgICAgbV9jb21waWxlSW5kZXggPSBicmFuY2hOb2Rl
SW5kZXg7CisgICAgICAgICAgICBtX2N1cnJlbnROb2RlID0gYnJhbmNoTm9kZTsKICAgICAgICAg
ICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAgICAgIGNvbXBpbGVJbnRlZ2VyQ29tcGFy
ZShub2RlLCBNYWNyb0Fzc2VtYmxlcjo6RXF1YWwpOwpAQCAtMzUzMiwzMiArMzUxNSwzMiBAQCBi
b29sIFNwZWN1bGF0aXZlSklUOjpjb21waWxlU3RyaWN0RXEoTm9kCiAgICAgCiAgICAgLy8gMykg
SWYgdGhlIG9wZXJhbmRzIGFyZSBwcmVkaWN0ZWQgZG91YmxlLCBkbyBhIGRvdWJsZSBjb21wYXJp
c29uLgogICAgIAotICAgIGlmIChOb2RlOjpzaG91bGRTcGVjdWxhdGVOdW1iZXIoYXQobm9kZS5j
aGlsZDEoKSksIGF0KG5vZGUuY2hpbGQyKCkpKSkgeworICAgIGlmIChOb2RlOjpzaG91bGRTcGVj
dWxhdGVOdW1iZXIobm9kZS0+Y2hpbGQxKCkubm9kZSgpLCBub2RlLT5jaGlsZDIoKS5ub2RlKCkp
KSB7CiAgICAgICAgIHVuc2lnbmVkIGJyYW5jaEluZGV4SW5CbG9jayA9IGRldGVjdFBlZXBIb2xl
QnJhbmNoKCk7CiAgICAgICAgIGlmIChicmFuY2hJbmRleEluQmxvY2sgIT0gVUlOVF9NQVgpIHsK
LSAgICAgICAgICAgIE5vZGVJbmRleCBicmFuY2hOb2RlSW5kZXggPSBtX2ppdC5ncmFwaCgpLm1f
YmxvY2tzW21fYmxvY2tdLT5hdChicmFuY2hJbmRleEluQmxvY2spOwotICAgICAgICAgICAgY29t
cGlsZVBlZXBIb2xlRG91YmxlQnJhbmNoKG5vZGUsIGJyYW5jaE5vZGVJbmRleCwgTWFjcm9Bc3Nl
bWJsZXI6OkRvdWJsZUVxdWFsKTsKLSAgICAgICAgICAgIHVzZShub2RlLmNoaWxkMSgpKTsKLSAg
ICAgICAgICAgIHVzZShub2RlLmNoaWxkMigpKTsKKyAgICAgICAgICAgIE5vZGUqIGJyYW5jaE5v
ZGUgPSBtX2ppdC5ncmFwaCgpLm1fYmxvY2tzW21fYmxvY2tdLT5hdChicmFuY2hJbmRleEluQmxv
Y2spOworICAgICAgICAgICAgY29tcGlsZVBlZXBIb2xlRG91YmxlQnJhbmNoKG5vZGUsIGJyYW5j
aE5vZGUsIE1hY3JvQXNzZW1ibGVyOjpEb3VibGVFcXVhbCk7CisgICAgICAgICAgICB1c2Uobm9k
ZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgdXNlKG5vZGUtPmNoaWxkMigpKTsKICAgICAgICAg
ICAgIG1faW5kZXhJbkJsb2NrID0gYnJhbmNoSW5kZXhJbkJsb2NrOwotICAgICAgICAgICAgbV9j
b21waWxlSW5kZXggPSBicmFuY2hOb2RlSW5kZXg7CisgICAgICAgICAgICBtX2N1cnJlbnROb2Rl
ID0gYnJhbmNoTm9kZTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAg
ICAgIGNvbXBpbGVEb3VibGVDb21wYXJlKG5vZGUsIE1hY3JvQXNzZW1ibGVyOjpEb3VibGVFcXVh
bCk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgCi0gICAgaWYgKGF0KG5vZGUu
Y2hpbGQxKCkpLnNob3VsZFNwZWN1bGF0ZVN0cmluZygpIHx8IGF0KG5vZGUuY2hpbGQyKCkpLnNo
b3VsZFNwZWN1bGF0ZVN0cmluZygpKQorICAgIGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3Bl
Y3VsYXRlU3RyaW5nKCkgfHwgbm9kZS0+Y2hpbGQyKCktPnNob3VsZFNwZWN1bGF0ZVN0cmluZygp
KQogICAgICAgICByZXR1cm4gbm9uU3BlY3VsYXRpdmVTdHJpY3RFcShub2RlKTsKLSAgICBpZiAo
YXQobm9kZS5jaGlsZDEoKSkuc2hvdWxkU3BlY3VsYXRlTm9uU3RyaW5nQ2VsbCgpICYmIGF0KG5v
ZGUuY2hpbGQyKCkpLnNob3VsZFNwZWN1bGF0ZU5vblN0cmluZ0NlbGwoKSkgeworICAgIGlmIChu
b2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlTm9uU3RyaW5nQ2VsbCgpICYmIG5vZGUtPmNo
aWxkMigpLT5zaG91bGRTcGVjdWxhdGVOb25TdHJpbmdDZWxsKCkpIHsKICAgICAgICAgdW5zaWdu
ZWQgYnJhbmNoSW5kZXhJbkJsb2NrID0gZGV0ZWN0UGVlcEhvbGVCcmFuY2goKTsKICAgICAgICAg
aWYgKGJyYW5jaEluZGV4SW5CbG9jayAhPSBVSU5UX01BWCkgewotICAgICAgICAgICAgTm9kZUlu
ZGV4IGJyYW5jaE5vZGVJbmRleCA9IG1faml0LmdyYXBoKCkubV9ibG9ja3NbbV9ibG9ja10tPmF0
KGJyYW5jaEluZGV4SW5CbG9jayk7Ci0gICAgICAgICAgICBjb21waWxlUGVlcEhvbGVPYmplY3RF
cXVhbGl0eShub2RlLCBicmFuY2hOb2RlSW5kZXgpOworICAgICAgICAgICAgTm9kZSogYnJhbmNo
Tm9kZSA9IG1faml0LmdyYXBoKCkubV9ibG9ja3NbbV9ibG9ja10tPmF0KGJyYW5jaEluZGV4SW5C
bG9jayk7CisgICAgICAgICAgICBjb21waWxlUGVlcEhvbGVPYmplY3RFcXVhbGl0eShub2RlLCBi
cmFuY2hOb2RlKTsKICAgICAgICAgICAgIHVzZShub2RlLmNoaWxkMSgpKTsKICAgICAgICAgICAg
IHVzZShub2RlLmNoaWxkMigpKTsKICAgICAgICAgICAgIG1faW5kZXhJbkJsb2NrID0gYnJhbmNo
SW5kZXhJbkJsb2NrOwotICAgICAgICAgICAgbV9jb21waWxlSW5kZXggPSBicmFuY2hOb2RlSW5k
ZXg7CisgICAgICAgICAgICBtX2N1cnJlbnROb2RlID0gYnJhbmNoTm9kZTsKICAgICAgICAgICAg
IHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAgICAgIGNvbXBpbGVPYmplY3RFcXVhbGl0eShu
b2RlKTsKQEAgLTM1NjksMTcgKzM1NTIsMTcgQEAgYm9vbCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZVN0cmljdEVxKE5vZAogICAgIHJldHVybiBub25TcGVjdWxhdGl2ZVN0cmljdEVxKG5vZGUpOwog
fQogCi12b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0SW5kZXhlZFByb3BlcnR5U3RvcmFn
ZShOb2RlJiBub2RlKQordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEluZGV4ZWRQcm9w
ZXJ0eVN0b3JhZ2UoTm9kZSogbm9kZSkKIHsKLSAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNl
KHRoaXMsIG5vZGUuY2hpbGQxKCkpOworICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhp
cywgbm9kZS0+Y2hpbGQxKCkpOwogICAgIEdQUlJlZyBiYXNlUmVnID0gYmFzZS5ncHIoKTsKICAg
ICAKICAgICBHUFJUZW1wb3Jhcnkgc3RvcmFnZSh0aGlzKTsKICAgICBHUFJSZWcgc3RvcmFnZVJl
ZyA9IHN0b3JhZ2UuZ3ByKCk7CiAgICAgCi0gICAgY29uc3QgVHlwZWRBcnJheURlc2NyaXB0b3Iq
IGRlc2NyaXB0b3IgPSB0eXBlZEFycmF5RGVzY3JpcHRvcihub2RlLmFycmF5TW9kZSgpKTsKKyAg
ICBjb25zdCBUeXBlZEFycmF5RGVzY3JpcHRvciogZGVzY3JpcHRvciA9IHR5cGVkQXJyYXlEZXNj
cmlwdG9yKG5vZGUtPmFycmF5TW9kZSgpKTsKICAgICAKLSAgICBzd2l0Y2ggKG5vZGUuYXJyYXlN
b2RlKCkudHlwZSgpKSB7CisgICAgc3dpdGNoIChub2RlLT5hcnJheU1vZGUoKS50eXBlKCkpIHsK
ICAgICBjYXNlIEFycmF5OjpTdHJpbmc6CiAgICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgSlNTdHJpbmc6Om9mZnNldE9mVmFsdWUoKSksIHN0b3Jh
Z2VSZWcpOwogICAgICAgICAKQEAgLTM1OTcsMTMgKzM1ODAsMTMgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZUdldEluZGV4ZWRQcgogICAgICAgICBicmVhazsKICAgICB9CiAgICAgCi0g
ICAgc3RvcmFnZVJlc3VsdChzdG9yYWdlUmVnLCBtX2NvbXBpbGVJbmRleCk7CisgICAgc3RvcmFn
ZVJlc3VsdChzdG9yYWdlUmVnLCBub2RlKTsKIH0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZUdldEJ5VmFsT25Bcmd1bWVudHMoTm9kZSYgbm9kZSkKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGVHZXRCeVZhbE9uQXJndW1lbnRzKE5vZGUqIG5vZGUpCiB7Ci0gICAgU3BlY3VsYXRl
Q2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKLSAgICBTcGVjdWxhdGVTdHJp
Y3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhpcywgbm9kZS5jaGlsZDIoKSk7CisgICAgU3BlY3Vs
YXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CisgICAgU3BlY3VsYXRl
U3RyaWN0SW50MzJPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG5vZGUtPmNoaWxkMigpKTsKICAgICBH
UFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwogI2lmIFVTRShKU1ZBTFVFMzJfNjQpCiAgICAgR1BS
VGVtcG9yYXJ5IHJlc3VsdFRhZyh0aGlzKTsKQEAgLTM2MjEsMTYgKzM2MDQsMTYgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25BcgogICAgIGlmICghbV9jb21waWxlT2th
eSkKICAgICAgICAgcmV0dXJuOwogICAKLSAgICBBU1NFUlQoQXJyYXlNb2RlKEFycmF5OjpBcmd1
bWVudHMpLmFscmVhZHlDaGVja2VkKG1faml0LmdyYXBoKCksIG5vZGUsIG1fc3RhdGUuZm9yTm9k
ZShub2RlLmNoaWxkMSgpKSkpOworICAgIEFTU0VSVChBcnJheU1vZGUoQXJyYXk6OkFyZ3VtZW50
cykuYWxyZWFkeUNoZWNrZWQobV9qaXQuZ3JhcGgoKSwgbm9kZSwgbV9zdGF0ZS5mb3JOb2RlKG5v
ZGUtPmNoaWxkMSgpKSkpOwogICAgIAogICAgIC8vIFR3byByZWFsbHkgbGFtZSBjaGVja3MuCiAg
ICAgc3BlY3VsYXRpb25DaGVjaygKLSAgICAgICAgVW5jb3VudGFibGUsIEpTVmFsdWVTb3VyY2Uo
KSwgTm9Ob2RlLAorICAgICAgICBVbmNvdW50YWJsZSwgSlNWYWx1ZVNvdXJjZSgpLCAwLAogICAg
ICAgICBtX2ppdC5icmFuY2hQdHIoCiAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWJvdmVP
ckVxdWFsLCBwcm9wZXJ0eVJlZywKICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KGJhc2VSZWcsIE9CSkVDVF9PRkZTRVRPRihBcmd1bWVudHMsIG1fbnVtQXJndW1lbnRzKSkpKTsK
ICAgICBzcGVjdWxhdGlvbkNoZWNrKAotICAgICAgICBVbmNvdW50YWJsZSwgSlNWYWx1ZVNvdXJj
ZSgpLCBOb05vZGUsCisgICAgICAgIFVuY291bnRhYmxlLCBKU1ZhbHVlU291cmNlKCksIDAsCiAg
ICAgICAgIG1faml0LmJyYW5jaFRlc3RQdHIoCiAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
Tm9uWmVybywKICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKApAQCAtMzY1Niwy
MCArMzYzOSwyMCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxPbkFyCiAg
ICAgICAgICAgICBDYWxsRnJhbWU6OnRoaXNBcmd1bWVudE9mZnNldCgpICogc2l6ZW9mKFJlZ2lz
dGVyKSAtIHNpemVvZihSZWdpc3RlcikgKwogICAgICAgICAgICAgT0JKRUNUX09GRlNFVE9GKEpT
VmFsdWUsIHUuYXNCaXRzLnBheWxvYWQpKSwKICAgICAgICAgcmVzdWx0UmVnKTsKLSAgICBqc1Zh
bHVlUmVzdWx0KHJlc3VsdFRhZ1JlZywgcmVzdWx0UmVnLCBtX2NvbXBpbGVJbmRleCk7CisgICAg
anNWYWx1ZVJlc3VsdChyZXN1bHRUYWdSZWcsIHJlc3VsdFJlZywgbm9kZSk7CiAjZWxzZQogICAg
IG1faml0LmxvYWQ2NCgKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleCgKICAgICAg
ICAgICAgIHNjcmF0Y2hSZWcsIHJlc3VsdFJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQs
CiAgICAgICAgICAgICBDYWxsRnJhbWU6OnRoaXNBcmd1bWVudE9mZnNldCgpICogc2l6ZW9mKFJl
Z2lzdGVyKSAtIHNpemVvZihSZWdpc3RlcikpLAogICAgICAgICByZXN1bHRSZWcpOwotICAgIGpz
VmFsdWVSZXN1bHQocmVzdWx0UmVnLCBtX2NvbXBpbGVJbmRleCk7CisgICAganNWYWx1ZVJlc3Vs
dChyZXN1bHRSZWcsIG5vZGUpOwogI2VuZGlmCiB9CiAKLXZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGVHZXRBcmd1bWVudHNMZW5ndGgoTm9kZSYgbm9kZSkKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGVHZXRBcmd1bWVudHNMZW5ndGgoTm9kZSogbm9kZSkKIHsKLSAgICBTcGVjdWxhdGVD
ZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOworICAgIFNwZWN1bGF0ZUNlbGxP
cGVyYW5kIGJhc2UodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwogICAgIEdQUlRlbXBvcmFyeSByZXN1
bHQodGhpcywgYmFzZSk7CiAgICAgCiAgICAgR1BSUmVnIGJhc2VSZWcgPSBiYXNlLmdwcigpOwpA
QCAtMzY3OCwxMCArMzY2MSwxMCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QXJn
dW1lbnRzCiAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQogICAgICAgICByZXR1cm47CiAgICAgCi0g
ICAgQVNTRVJUKEFycmF5TW9kZShBcnJheTo6QXJndW1lbnRzKS5hbHJlYWR5Q2hlY2tlZChtX2pp
dC5ncmFwaCgpLCBub2RlLCBtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSkpKTsKKyAgICBB
U1NFUlQoQXJyYXlNb2RlKEFycmF5OjpBcmd1bWVudHMpLmFscmVhZHlDaGVja2VkKG1faml0Lmdy
YXBoKCksIG5vZGUsIG1fc3RhdGUuZm9yTm9kZShub2RlLT5jaGlsZDEoKSkpKTsKICAgICAKICAg
ICBzcGVjdWxhdGlvbkNoZWNrKAotICAgICAgICBVbmNvdW50YWJsZSwgSlNWYWx1ZVNvdXJjZSgp
LCBOb05vZGUsCisgICAgICAgIFVuY291bnRhYmxlLCBKU1ZhbHVlU291cmNlKCksIDAsCiAgICAg
ICAgIG1faml0LmJyYW5jaFRlc3Q4KAogICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Ok5vblpl
cm8sCiAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBPQkpFQ1Rf
T0ZGU0VUT0YoQXJndW1lbnRzLCBtX292ZXJyb2RlTGVuZ3RoKSkpKTsKQEAgLTM2ODksNDYgKzM2
NzIsNDYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEFyZ3VtZW50cwogICAgIG1f
aml0LmxvYWQzMigKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgT0JK
RUNUX09GRlNFVE9GKEFyZ3VtZW50cywgbV9udW1Bcmd1bWVudHMpKSwKICAgICAgICAgcmVzdWx0
UmVnKTsKLSAgICBpbnRlZ2VyUmVzdWx0KHJlc3VsdFJlZywgbV9jb21waWxlSW5kZXgpOworICAg
IGludGVnZXJSZXN1bHQocmVzdWx0UmVnLCBub2RlKTsKIH0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZUdldEFycmF5TGVuZ3RoKE5vZGUmIG5vZGUpCit2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlR2V0QXJyYXlMZW5ndGgoTm9kZSogbm9kZSkKIHsKLSAgICBjb25zdCBUeXBlZEFy
cmF5RGVzY3JpcHRvciogZGVzY3JpcHRvciA9IHR5cGVkQXJyYXlEZXNjcmlwdG9yKG5vZGUuYXJy
YXlNb2RlKCkpOworICAgIGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yKiBkZXNjcmlwdG9yID0g
dHlwZWRBcnJheURlc2NyaXB0b3Iobm9kZS0+YXJyYXlNb2RlKCkpOwogCi0gICAgc3dpdGNoIChu
b2RlLmFycmF5TW9kZSgpLnR5cGUoKSkgeworICAgIHN3aXRjaCAobm9kZS0+YXJyYXlNb2RlKCku
dHlwZSgpKSB7CiAgICAgY2FzZSBBcnJheTo6SW50MzI6CiAgICAgY2FzZSBBcnJheTo6RG91Ymxl
OgogICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3VvdXM6IHsKLSAgICAgICAgU3RvcmFnZU9wZXJhbmQg
c3RvcmFnZSh0aGlzLCBub2RlLmNoaWxkMigpKTsKKyAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3Rv
cmFnZSh0aGlzLCBub2RlLT5jaGlsZDIoKSk7CiAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQo
dGhpcywgc3RvcmFnZSk7CiAgICAgICAgIEdQUlJlZyBzdG9yYWdlUmVnID0gc3RvcmFnZS5ncHIo
KTsKICAgICAgICAgR1BSUmVnIHJlc3VsdFJlZyA9IHJlc3VsdC5ncHIoKTsKICAgICAgICAgbV9q
aXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEJ1dHRlcmZseTo6
b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSksIHJlc3VsdFJlZyk7CiAgICAgICAgICAgICAKLSAgICAg
ICAgaW50ZWdlclJlc3VsdChyZXN1bHRSZWcsIG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAgaW50
ZWdlclJlc3VsdChyZXN1bHRSZWcsIG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAg
Y2FzZSBBcnJheTo6QXJyYXlTdG9yYWdlOgogICAgIGNhc2UgQXJyYXk6OlNsb3dQdXRBcnJheVN0
b3JhZ2U6IHsKLSAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBub2RlLmNoaWxk
MigpKTsKKyAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBub2RlLT5jaGlsZDIo
KSk7CiAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgc3RvcmFnZSk7CiAgICAgICAg
IEdQUlJlZyBzdG9yYWdlUmVnID0gc3RvcmFnZS5ncHIoKTsKICAgICAgICAgR1BSUmVnIHJlc3Vs
dFJlZyA9IHJlc3VsdC5ncHIoKTsKICAgICAgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSks
IHJlc3VsdFJlZyk7CiAgICAgICAgICAgICAKLSAgICAgICAgc3BlY3VsYXRpb25DaGVjayhVbmNv
dW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2Vt
Ymxlcjo6TGVzc1RoYW4sIHJlc3VsdFJlZywgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigw
KSkpOworICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygp
LCAwLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6TGVzc1RoYW4sIHJlc3VsdFJlZywg
TWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigwKSkpOwogICAgICAgICAgICAgCi0gICAgICAg
IGludGVnZXJSZXN1bHQocmVzdWx0UmVnLCBtX2NvbXBpbGVJbmRleCk7CisgICAgICAgIGludGVn
ZXJSZXN1bHQocmVzdWx0UmVnLCBub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGNh
c2UgQXJyYXk6OlN0cmluZzogewotICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRo
aXMsIG5vZGUuY2hpbGQxKCkpOworICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRo
aXMsIG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBi
YXNlKTsKICAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOwogICAgICAgICBHUFJS
ZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwogICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNTdHJpbmc6Om9mZnNldE9mTGVuZ3RoKCkpLCBy
ZXN1bHRHUFIpOwotICAgICAgICBpbnRlZ2VyUmVzdWx0KHJlc3VsdEdQUiwgbV9jb21waWxlSW5k
ZXgpOworICAgICAgICBpbnRlZ2VyUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7CiAgICAgICAgIGJy
ZWFrOwogICAgIH0KICAgICBjYXNlIEFycmF5OjpBcmd1bWVudHM6IHsKQEAgLTM3MzYsMjggKzM3
MTksMjggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEFycmF5TGVuZwogICAgICAg
ICBicmVhazsKICAgICB9CiAgICAgZGVmYXVsdDoKLSAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJh
bmQgYmFzZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKKyAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJh
bmQgYmFzZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1
bHQodGhpcywgYmFzZSk7CiAgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKICAg
ICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKICAgICAgICAgQVNTRVJUKGRl
c2NyaXB0b3IpOwogICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
YmFzZUdQUiwgZGVzY3JpcHRvci0+bV9sZW5ndGhPZmZzZXQpLCByZXN1bHRHUFIpOwotICAgICAg
ICBpbnRlZ2VyUmVzdWx0KHJlc3VsdEdQUiwgbV9jb21waWxlSW5kZXgpOworICAgICAgICBpbnRl
Z2VyUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIH0KIAot
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU5ld0Z1bmN0aW9uTm9DaGVjayhOb2RlJiBub2Rl
KQordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU5ld0Z1bmN0aW9uTm9DaGVjayhOb2RlKiBu
b2RlKQogewogICAgIEdQUlJlc3VsdCByZXN1bHQodGhpcyk7CiAgICAgR1BSUmVnIHJlc3VsdEdQ
UiA9IHJlc3VsdC5ncHIoKTsKICAgICBmbHVzaFJlZ2lzdGVycygpOwogICAgIGNhbGxPcGVyYXRp
b24oCi0gICAgICAgIG9wZXJhdGlvbk5ld0Z1bmN0aW9uLCByZXN1bHRHUFIsIG1faml0LmNvZGVC
bG9jaygpLT5mdW5jdGlvbkRlY2wobm9kZS5mdW5jdGlvbkRlY2xJbmRleCgpKSk7Ci0gICAgY2Vs
bFJlc3VsdChyZXN1bHRHUFIsIG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAgb3BlcmF0aW9uTmV3
RnVuY3Rpb24sIHJlc3VsdEdQUiwgbV9qaXQuY29kZUJsb2NrKCktPmZ1bmN0aW9uRGVjbChub2Rl
LT5mdW5jdGlvbkRlY2xJbmRleCgpKSk7CisgICAgY2VsbFJlc3VsdChyZXN1bHRHUFIsIG5vZGUp
OwogfQogCi12b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlTmV3RnVuY3Rpb25FeHByZXNzaW9u
KE5vZGUmIG5vZGUpCit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlTmV3RnVuY3Rpb25FeHBy
ZXNzaW9uKE5vZGUqIG5vZGUpCiB7CiAgICAgR1BSUmVzdWx0IHJlc3VsdCh0aGlzKTsKICAgICBH
UFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwpAQCAtMzc2NSwyMSArMzc0OCwyMCBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlTmV3RnVuY3Rpb25FCiAgICAgY2FsbE9wZXJhdGlv
bigKICAgICAgICAgb3BlcmF0aW9uTmV3RnVuY3Rpb25FeHByZXNzaW9uLAogICAgICAgICByZXN1
bHRHUFIsCi0gICAgICAgIG1faml0LmNvZGVCbG9jaygpLT5mdW5jdGlvbkV4cHIobm9kZS5mdW5j
dGlvbkV4cHJJbmRleCgpKSk7Ci0gICAgY2VsbFJlc3VsdChyZXN1bHRHUFIsIG1fY29tcGlsZUlu
ZGV4KTsKKyAgICAgICAgbV9qaXQuY29kZUJsb2NrKCktPmZ1bmN0aW9uRXhwcihub2RlLT5mdW5j
dGlvbkV4cHJJbmRleCgpKSk7CisgICAgY2VsbFJlc3VsdChyZXN1bHRHUFIsIG5vZGUpOwogfQog
Ci1ib29sIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUmVnRXhwRXhlYyhOb2RlJiBub2RlKQorYm9v
bCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVJlZ0V4cEV4ZWMoTm9kZSogbm9kZSkKIHsKICAgICB1
bnNpZ25lZCBicmFuY2hJbmRleEluQmxvY2sgPSBkZXRlY3RQZWVwSG9sZUJyYW5jaCgpOwogICAg
IGlmIChicmFuY2hJbmRleEluQmxvY2sgPT0gVUlOVF9NQVgpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICBOb2RlSW5kZXggYnJhbmNoTm9kZUluZGV4ID0gbV9qaXQuZ3JhcGgoKS5tX2Jsb2Nr
c1ttX2Jsb2NrXS0+YXQoYnJhbmNoSW5kZXhJbkJsb2NrKTsKKyAgICBOb2RlKiBicmFuY2hOb2Rl
ID0gbV9qaXQuZ3JhcGgoKS5tX2Jsb2Nrc1ttX2Jsb2NrXS0+YXQoYnJhbmNoSW5kZXhJbkJsb2Nr
KTsKICAgICBBU1NFUlQobm9kZS5hZGp1c3RlZFJlZkNvdW50KCkgPT0gMSk7CiAKLSAgICBOb2Rl
JiBicmFuY2hOb2RlID0gYXQoYnJhbmNoTm9kZUluZGV4KTsKLSAgICBCbG9ja0luZGV4IHRha2Vu
ID0gYnJhbmNoTm9kZS50YWtlbkJsb2NrSW5kZXgoKTsKLSAgICBCbG9ja0luZGV4IG5vdFRha2Vu
ID0gYnJhbmNoTm9kZS5ub3RUYWtlbkJsb2NrSW5kZXgoKTsKKyAgICBCbG9ja0luZGV4IHRha2Vu
ID0gYnJhbmNoTm9kZS0+dGFrZW5CbG9ja0luZGV4KCk7CisgICAgQmxvY2tJbmRleCBub3RUYWtl
biA9IGJyYW5jaE5vZGUtPm5vdFRha2VuQmxvY2tJbmRleCgpOwogICAgIAogICAgIGJvb2wgaW52
ZXJ0ID0gZmFsc2U7CiAgICAgaWYgKHRha2VuID09IG5leHRCbG9jaygpKSB7CkBAIC0zNzg5LDgg
KzM3NzEsOCBAQCBib29sIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUmVnRXhwRXhlYyhOCiAgICAg
ICAgIG5vdFRha2VuID0gdG1wOwogICAgIH0KIAotICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJh
c2UodGhpcywgbm9kZS5jaGlsZDEoKSk7Ci0gICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYXJndW1l
bnQodGhpcywgbm9kZS5jaGlsZDIoKSk7CisgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0
aGlzLCBub2RlLT5jaGlsZDEoKSk7CisgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYXJndW1lbnQo
dGhpcywgbm9kZS0+Y2hpbGQyKCkpOwogICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsK
ICAgICBHUFJSZWcgYXJndW1lbnRHUFIgPSBhcmd1bWVudC5ncHIoKTsKICAgICAKQEAgLTM4MDEs
MTggKzM3ODMsMTggQEAgYm9vbCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVJlZ0V4cEV4ZWMoTgog
ICAgIGJyYW5jaFRlc3QzMihpbnZlcnQgPyBKSVRDb21waWxlcjo6WmVybyA6IEpJVENvbXBpbGVy
OjpOb25aZXJvLCByZXN1bHQuZ3ByKCksIHRha2VuKTsKICAgICBqdW1wKG5vdFRha2VuKTsKIAot
ICAgIHVzZShub2RlLmNoaWxkMSgpKTsKLSAgICB1c2Uobm9kZS5jaGlsZDIoKSk7CisgICAgdXNl
KG5vZGUtPmNoaWxkMSgpKTsKKyAgICB1c2Uobm9kZS0+Y2hpbGQyKCkpOwogICAgIG1faW5kZXhJ
bkJsb2NrID0gYnJhbmNoSW5kZXhJbkJsb2NrOwotICAgIG1fY29tcGlsZUluZGV4ID0gYnJhbmNo
Tm9kZUluZGV4OworICAgIG1fY3VycmVudE5vZGUgPSBicmFuY2hOb2RlOwogCiAgICAgcmV0dXJu
IHRydWU7CiB9CiAKLXZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBbGxvY2F0ZVByb3BlcnR5
U3RvcmFnZShOb2RlJiBub2RlKQordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFsbG9jYXRl
UHJvcGVydHlTdG9yYWdlKE5vZGUqIG5vZGUpCiB7Ci0gICAgaWYgKGhhc0luZGV4aW5nSGVhZGVy
KG5vZGUuc3RydWN0dXJlVHJhbnNpdGlvbkRhdGEoKS5wcmV2aW91c1N0cnVjdHVyZS0+aW5kZXhp
bmdUeXBlKCkpKSB7Ci0gICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9k
ZS5jaGlsZDEoKSk7CisgICAgaWYgKGhhc0luZGV4aW5nSGVhZGVyKG5vZGUtPnN0cnVjdHVyZVRy
YW5zaXRpb25EYXRhKCkucHJldmlvdXNTdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSkgeworICAg
ICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKICAg
ICAgICAgCiAgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKICAgICAgICAgCkBA
IC0zODIxLDE4ICszODAzLDE4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBbGxvY2F0
ZVByb3AKICAgICAgICAgR1BSUmVzdWx0IHJlc3VsdCh0aGlzKTsKICAgICAgICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25SZWFsbG9jYXRlQnV0dGVyZmx5VG9IYXZlUHJvcGVydHlTdG9yYWdlV2l0
aEluaXRpYWxDYXBhY2l0eSwgcmVzdWx0LmdwcigpLCBiYXNlR1BSKTsKICAgICAgICAgCi0gICAg
ICAgIHN0b3JhZ2VSZXN1bHQocmVzdWx0LmdwcigpLCBtX2NvbXBpbGVJbmRleCk7CisgICAgICAg
IHN0b3JhZ2VSZXN1bHQocmVzdWx0LmdwcigpLCBub2RlKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KICAgICAKLSAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUuY2hpbGQx
KCkpOworICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS0+Y2hpbGQxKCkp
OwogICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOwogICAgICAgICAKICAgICBHUFJSZWcg
YmFzZUdQUiA9IGJhc2UuZ3ByKCk7CiAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdw
cigpOwogICAgICAgICAKLSAgICBBU1NFUlQoIW5vZGUuc3RydWN0dXJlVHJhbnNpdGlvbkRhdGEo
KS5wcmV2aW91c1N0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7Ci0gICAgQVNTRVJUKGlu
aXRpYWxPdXRPZkxpbmVDYXBhY2l0eSA9PSBub2RlLnN0cnVjdHVyZVRyYW5zaXRpb25EYXRhKCku
bmV3U3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpKTsKKyAgICBBU1NFUlQoIW5vZGUtPnN0
cnVjdHVyZVRyYW5zaXRpb25EYXRhKCkucHJldmlvdXNTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFj
aXR5KCkpOworICAgIEFTU0VSVChpbml0aWFsT3V0T2ZMaW5lQ2FwYWNpdHkgPT0gbm9kZS0+c3Ry
dWN0dXJlVHJhbnNpdGlvbkRhdGEoKS5uZXdTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkp
OwogICAgIAogICAgIEpJVENvbXBpbGVyOjpKdW1wIHNsb3dQYXRoID0KICAgICAgICAgZW1pdEFs
bG9jYXRlQmFzaWNTdG9yYWdlKApAQCAtMzg0NSwxNyArMzgyNywxNyBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlQWxsb2NhdGVQcm9wCiAgICAgICAgIAogICAgIG1faml0LnN0b3JlUHRy
KHNjcmF0Y2hHUFIsIEpJVENvbXBpbGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0
ZXJmbHlPZmZzZXQoKSkpOwogICAgICAgICAKLSAgICBzdG9yYWdlUmVzdWx0KHNjcmF0Y2hHUFIs
IG1fY29tcGlsZUluZGV4KTsKKyAgICBzdG9yYWdlUmVzdWx0KHNjcmF0Y2hHUFIsIG5vZGUpOwog
fQogCi12b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUmVhbGxvY2F0ZVByb3BlcnR5U3RvcmFn
ZShOb2RlJiBub2RlKQordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVJlYWxsb2NhdGVQcm9w
ZXJ0eVN0b3JhZ2UoTm9kZSogbm9kZSkKIHsKLSAgICBzaXplX3Qgb2xkU2l6ZSA9IG5vZGUuc3Ry
dWN0dXJlVHJhbnNpdGlvbkRhdGEoKS5wcmV2aW91c1N0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNp
dHkoKSAqIHNpemVvZihKU1ZhbHVlKTsKKyAgICBzaXplX3Qgb2xkU2l6ZSA9IG5vZGUtPnN0cnVj
dHVyZVRyYW5zaXRpb25EYXRhKCkucHJldmlvdXNTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5
KCkgKiBzaXplb2YoSlNWYWx1ZSk7CiAgICAgc2l6ZV90IG5ld1NpemUgPSBvbGRTaXplICogb3V0
T2ZMaW5lR3Jvd3RoRmFjdG9yOwotICAgIEFTU0VSVChuZXdTaXplID09IG5vZGUuc3RydWN0dXJl
VHJhbnNpdGlvbkRhdGEoKS5uZXdTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkgKiBzaXpl
b2YoSlNWYWx1ZSkpOworICAgIEFTU0VSVChuZXdTaXplID09IG5vZGUtPnN0cnVjdHVyZVRyYW5z
aXRpb25EYXRhKCkubmV3U3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpICogc2l6ZW9mKEpT
VmFsdWUpKTsKIAotICAgIGlmIChoYXNJbmRleGluZ0hlYWRlcihub2RlLnN0cnVjdHVyZVRyYW5z
aXRpb25EYXRhKCkucHJldmlvdXNTdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSkgewotICAgICAg
ICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOworICAgIGlm
IChoYXNJbmRleGluZ0hlYWRlcihub2RlLT5zdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSgpLnByZXZp
b3VzU3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSkpIHsKKyAgICAgICAgU3BlY3VsYXRlQ2VsbE9w
ZXJhbmQgYmFzZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgIAogICAgICAgICBHUFJS
ZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7CiAgICAgICAgIApAQCAtMzg2NCwxMiArMzg0NiwxMiBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUmVhbGxvY2F0ZVByCiAgICAgICAgIEdQUlJl
c3VsdCByZXN1bHQodGhpcyk7CiAgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUmVhbGxv
Y2F0ZUJ1dHRlcmZseVRvR3Jvd1Byb3BlcnR5U3RvcmFnZSwgcmVzdWx0LmdwcigpLCBiYXNlR1BS
LCBuZXdTaXplIC8gc2l6ZW9mKEpTVmFsdWUpKTsKICAgICAgICAgCi0gICAgICAgIHN0b3JhZ2VS
ZXN1bHQocmVzdWx0LmdwcigpLCBtX2NvbXBpbGVJbmRleCk7CisgICAgICAgIHN0b3JhZ2VSZXN1
bHQocmVzdWx0LmdwcigpLCBub2RlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKLSAg
ICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwotICAgIFN0
b3JhZ2VPcGVyYW5kIG9sZFN0b3JhZ2UodGhpcywgbm9kZS5jaGlsZDIoKSk7CisgICAgU3BlY3Vs
YXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CisgICAgU3RvcmFnZU9w
ZXJhbmQgb2xkU3RvcmFnZSh0aGlzLCBub2RlLT5jaGlsZDIoKSk7CiAgICAgR1BSVGVtcG9yYXJ5
IHNjcmF0Y2gxKHRoaXMpOwogICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoMih0aGlzKTsKICAgICAg
ICAgCkBAIC0zODkyLDcgKzM4NzQsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUmVh
bGxvY2F0ZVByCiAgICAgfQogICAgIG1faml0LnN0b3JlUHRyKHNjcmF0Y2hHUFIyLCBKSVRDb21w
aWxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpKTsKICAg
ICAKLSAgICBzdG9yYWdlUmVzdWx0KHNjcmF0Y2hHUFIyLCBtX2NvbXBpbGVJbmRleCk7CisgICAg
c3RvcmFnZVJlc3VsdChzY3JhdGNoR1BSMiwgbm9kZSk7CiB9CiAKIEdQUlJlZyBTcGVjdWxhdGl2
ZUpJVDo6dGVtcG9yYXJ5UmVnaXN0ZXJGb3JQdXRCeVZhbChHUFJUZW1wb3JhcnkmIHRlbXBvcmFy
eSwgQXJyYXlNb2RlIGFycmF5TW9kZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHJldmlzaW9uIDE0MDkwNCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTIgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEyLCAyMDEzIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtMTEyLDE1ICsxMTIsNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBjcmVhdGVPU1JFbnRyaWVz
KCk7CiAgICAgdm9pZCBsaW5rT1NSRW50cmllcyhMaW5rQnVmZmVyJik7CiAKLSAgICBOb2RlJiBh
dChOb2RlSW5kZXggbm9kZUluZGV4KQotICAgIHsKLSAgICAgICAgcmV0dXJuIG1faml0LmdyYXBo
KClbbm9kZUluZGV4XTsKLSAgICB9Ci0gICAgTm9kZSYgYXQoRWRnZSBub2RlVXNlKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIGF0KG5vZGVVc2UuaW5kZXgoKSk7Ci0gICAgfQotICAgIAogICAgIEJs
b2NrSW5kZXggbmV4dEJsb2NrKCkKICAgICB7CiAgICAgICAgIGZvciAoQmxvY2tJbmRleCByZXN1
bHQgPSBtX2Jsb2NrICsgMTsgOyByZXN1bHQrKykgewpAQCAtMTMxLDE0ICsxMjIsMTQgQEAgcHVi
bGljOgogICAgICAgICB9CiAgICAgfQogICAgIAotICAgIEdQUlJlZyBmaWxsSW50ZWdlcihOb2Rl
SW5kZXgsIERhdGFGb3JtYXQmIHJldHVybkZvcm1hdCk7Ci0gICAgRlBSUmVnIGZpbGxEb3VibGUo
Tm9kZUluZGV4KTsKKyAgICBHUFJSZWcgZmlsbEludGVnZXIoTm9kZSosIERhdGFGb3JtYXQmIHJl
dHVybkZvcm1hdCk7CisgICAgRlBSUmVnIGZpbGxEb3VibGUoTm9kZSopOwogI2lmIFVTRShKU1ZB
TFVFNjQpCi0gICAgR1BSUmVnIGZpbGxKU1ZhbHVlKE5vZGVJbmRleCk7CisgICAgR1BSUmVnIGZp
bGxKU1ZhbHVlKE5vZGUqKTsKICNlbGlmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgYm9vbCBmaWxs
SlNWYWx1ZShOb2RlSW5kZXgsIEdQUlJlZyYsIEdQUlJlZyYsIEZQUlJlZyYpOworICAgIGJvb2wg
ZmlsbEpTVmFsdWUoTm9kZSosIEdQUlJlZyYsIEdQUlJlZyYsIEZQUlJlZyYpOwogI2VuZGlmCi0g
ICAgR1BSUmVnIGZpbGxTdG9yYWdlKE5vZGVJbmRleCk7CisgICAgR1BSUmVnIGZpbGxTdG9yYWdl
KE5vZGUqKTsKIAogICAgIC8vIGxvY2sgYW5kIHVubG9jayBHUFIgJiBGUFIgcmVnaXN0ZXJzLgog
ICAgIHZvaWQgbG9jayhHUFJSZWcgcmVnKQpAQCAtMTYwLDE1ICsxNTEsMTUgQEAgcHVibGljOgog
CiAgICAgLy8gVXNlZCB0byBjaGVjayB3aGV0aGVyIGEgY2hpbGQgbm9kZSBpcyBvbiBpdHMgbGFz
dCB1c2UsCiAgICAgLy8gYW5kIGl0cyBtYWNoaW5lIHJlZ2lzdGVycyBtYXkgYmUgcmV1c2VkLgot
ICAgIGJvb2wgY2FuUmV1c2UoTm9kZUluZGV4IG5vZGVJbmRleCkKKyAgICBib29sIGNhblJldXNl
KE5vZGUqIG5vZGUpCiAgICAgewotICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lz
dGVyID0gYXQobm9kZUluZGV4KS52aXJ0dWFsUmVnaXN0ZXIoKTsKKyAgICAgICAgVmlydHVhbFJl
Z2lzdGVyIHZpcnR1YWxSZWdpc3RlciA9IG5vZGUtPnZpcnR1YWxSZWdpc3RlcigpOwogICAgICAg
ICBHZW5lcmF0aW9uSW5mbyYgaW5mbyA9IG1fZ2VuZXJhdGlvbkluZm9bdmlydHVhbFJlZ2lzdGVy
XTsKICAgICAgICAgcmV0dXJuIGluZm8uY2FuUmV1c2UoKTsKICAgICB9CiAgICAgYm9vbCBjYW5S
ZXVzZShFZGdlIG5vZGVVc2UpCiAgICAgewotICAgICAgICByZXR1cm4gY2FuUmV1c2Uobm9kZVVz
ZS5pbmRleCgpKTsKKyAgICAgICAgcmV0dXJuIGNhblJldXNlKG5vZGVVc2Uubm9kZSgpKTsKICAg
ICB9CiAgICAgR1BSUmVnIHJldXNlKEdQUlJlZyByZWcpCiAgICAgewpAQCAtMjI5LDI2ICsyMjAs
MjUgQEAgcHVibGljOgogICAgIC8vIG1hY2hpbmUgcmVnaXN0ZXJzIGZpcnN0IChieSBsb2NraW5n
IFZpcnR1YWxSZWdzaXRlcnMgdGhhdCBhcmUgYWxyZWFkeQogICAgIC8vIGluIG1hY2hpbmUgcmVn
aXN0ZXIgYmVmb3JlIGZpbGxpbmcgdGhvc2UgdGhhdCBhcmUgbm90IHdlIGF0dGVtcHQgdG8KICAg
ICAvLyBhdm9pZCBzcGlsbGluZyB2YWx1ZXMgd2Ugd2lsbCBuZWVkIGltbWVkaWF0ZWx5KS4KLSAg
ICBib29sIGlzRmlsbGVkKE5vZGVJbmRleCBub2RlSW5kZXgpCisgICAgYm9vbCBpc0ZpbGxlZChO
b2RlKiBub2RlKQogICAgIHsKLSAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3Rl
ciA9IGF0KG5vZGVJbmRleCkudmlydHVhbFJlZ2lzdGVyKCk7CisgICAgICAgIFZpcnR1YWxSZWdp
c3RlciB2aXJ0dWFsUmVnaXN0ZXIgPSBub2RlLT52aXJ0dWFsUmVnaXN0ZXIoKTsKICAgICAgICAg
R2VuZXJhdGlvbkluZm8mIGluZm8gPSBtX2dlbmVyYXRpb25JbmZvW3ZpcnR1YWxSZWdpc3Rlcl07
CiAgICAgICAgIHJldHVybiBpbmZvLnJlZ2lzdGVyRm9ybWF0KCkgIT0gRGF0YUZvcm1hdE5vbmU7
CiAgICAgfQotICAgIGJvb2wgaXNGaWxsZWREb3VibGUoTm9kZUluZGV4IG5vZGVJbmRleCkKKyAg
ICBib29sIGlzRmlsbGVkRG91YmxlKE5vZGUqIG5vZGUpCiAgICAgewotICAgICAgICBWaXJ0dWFs
UmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyID0gYXQobm9kZUluZGV4KS52aXJ0dWFsUmVnaXN0ZXIo
KTsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciA9IG5vZGUtPnZpcnR1
YWxSZWdpc3RlcigpOwogICAgICAgICBHZW5lcmF0aW9uSW5mbyYgaW5mbyA9IG1fZ2VuZXJhdGlv
bkluZm9bdmlydHVhbFJlZ2lzdGVyXTsKICAgICAgICAgcmV0dXJuIGluZm8ucmVnaXN0ZXJGb3Jt
YXQoKSA9PSBEYXRhRm9ybWF0RG91YmxlOwogICAgIH0KIAogICAgIC8vIENhbGxlZCBvbiBhbiBv
cGVyYW5kIG9uY2UgaXQgaGFzIGJlZW4gY29uc3VtZWQgYnkgYSBwYXJlbnQgbm9kZS4KLSAgICB2
b2lkIHVzZShOb2RlSW5kZXggbm9kZUluZGV4KQorICAgIHZvaWQgdXNlKE5vZGUqIG5vZGUpCiAg
ICAgewotICAgICAgICBOb2RlJiBub2RlID0gYXQobm9kZUluZGV4KTsKLSAgICAgICAgaWYgKCFu
b2RlLmhhc1Jlc3VsdCgpKQorICAgICAgICBpZiAoIW5vZGUtPmhhc1Jlc3VsdCgpKQogICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyID0g
bm9kZS52aXJ0dWFsUmVnaXN0ZXIoKTsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxS
ZWdpc3RlciA9IG5vZGUtPnZpcnR1YWxSZWdpc3RlcigpOwogICAgICAgICBHZW5lcmF0aW9uSW5m
byYgaW5mbyA9IG1fZ2VuZXJhdGlvbkluZm9bdmlydHVhbFJlZ2lzdGVyXTsKIAogICAgICAgICAv
LyB1c2UoKSByZXR1cm5zIHRydWUgd2hlbiB0aGUgdmFsdWUgYmVjb21lcyBkZWFkLCBhbmQgYW55
CkBAIC0yNzUsNyArMjY1LDcgQEAgcHVibGljOgogICAgIH0KICAgICB2b2lkIHVzZShFZGdlIG5v
ZGVVc2UpCiAgICAgewotICAgICAgICB1c2Uobm9kZVVzZS5pbmRleCgpKTsKKyAgICAgICAgdXNl
KG5vZGVVc2Uubm9kZSgpKTsKICAgICB9CiAgICAgCiAgICAgUmVnaXN0ZXJTZXQgdXNlZFJlZ2lz
dGVycygpCkBAIC0zMDgsMTkgKzI5OCwxOSBAQCBwdWJsaWM6CiAKICAgICAvLyBDYWxsZWQgYnkg
dGhlIHNwZWN1bGF0aXZlIG9wZXJhbmQgdHlwZXMsIGJlbG93LCB0byBmaWxsIG9wZXJhbmQgdG8K
ICAgICAvLyBtYWNoaW5lIHJlZ2lzdGVycywgaW1wbGljaXRseSBnZW5lcmF0aW5nIHNwZWN1bGF0
aW9uIGNoZWNrcyBhcyBuZWVkZWQuCi0gICAgR1BSUmVnIGZpbGxTcGVjdWxhdGVJbnQoTm9kZUlu
ZGV4LCBEYXRhRm9ybWF0JiByZXR1cm5Gb3JtYXQsIFNwZWN1bGF0aW9uRGlyZWN0aW9uKTsKLSAg
ICBHUFJSZWcgZmlsbFNwZWN1bGF0ZUludFN0cmljdChOb2RlSW5kZXgpOwotICAgIEZQUlJlZyBm
aWxsU3BlY3VsYXRlRG91YmxlKE5vZGVJbmRleCwgU3BlY3VsYXRpb25EaXJlY3Rpb24pOwotICAg
IEdQUlJlZyBmaWxsU3BlY3VsYXRlQ2VsbChOb2RlSW5kZXgsIFNwZWN1bGF0aW9uRGlyZWN0aW9u
KTsKLSAgICBHUFJSZWcgZmlsbFNwZWN1bGF0ZUJvb2xlYW4oTm9kZUluZGV4LCBTcGVjdWxhdGlv
bkRpcmVjdGlvbik7Ci0gICAgR2VuZXJhdGVkT3BlcmFuZFR5cGUgY2hlY2tHZW5lcmF0ZWRUeXBl
Rm9yVG9JbnQzMihOb2RlSW5kZXgpOworICAgIEdQUlJlZyBmaWxsU3BlY3VsYXRlSW50KE5vZGUq
LCBEYXRhRm9ybWF0JiByZXR1cm5Gb3JtYXQsIFNwZWN1bGF0aW9uRGlyZWN0aW9uKTsKKyAgICBH
UFJSZWcgZmlsbFNwZWN1bGF0ZUludFN0cmljdChOb2RlKik7CisgICAgRlBSUmVnIGZpbGxTcGVj
dWxhdGVEb3VibGUoTm9kZSosIFNwZWN1bGF0aW9uRGlyZWN0aW9uKTsKKyAgICBHUFJSZWcgZmls
bFNwZWN1bGF0ZUNlbGwoTm9kZSosIFNwZWN1bGF0aW9uRGlyZWN0aW9uKTsKKyAgICBHUFJSZWcg
ZmlsbFNwZWN1bGF0ZUJvb2xlYW4oTm9kZSosIFNwZWN1bGF0aW9uRGlyZWN0aW9uKTsKKyAgICBH
ZW5lcmF0ZWRPcGVyYW5kVHlwZSBjaGVja0dlbmVyYXRlZFR5cGVGb3JUb0ludDMyKE5vZGUqKTsK
IAogICAgIHZvaWQgYWRkU2xvd1BhdGhHZW5lcmF0b3IoUGFzc093blB0cjxTbG93UGF0aEdlbmVy
YXRvcj4pOwogICAgIHZvaWQgcnVuU2xvd1BhdGhHZW5lcmF0b3JzKCk7CiAgICAgCi0gICAgdm9p
ZCBjb21waWxlKE5vZGUmKTsKLSAgICB2b2lkIG5vdGljZU9TUkJpcnRoKE5vZGVJbmRleCwgTm9k
ZSYpOwotICAgIHZvaWQgY29tcGlsZU1vdkhpbnQoTm9kZSYpOworICAgIHZvaWQgY29tcGlsZShO
b2RlKik7CisgICAgdm9pZCBub3RpY2VPU1JCaXJ0aChOb2RlKik7CisgICAgdm9pZCBjb21waWxl
TW92SGludChOb2RlKik7CiAgICAgdm9pZCBjb21waWxlKEJhc2ljQmxvY2smKTsKIAogICAgIHZv
aWQgY2hlY2tBcmd1bWVudFR5cGVzKCk7CkBAIC01MzYsNDQgKzUyNiw0NCBAQCBwdWJsaWM6CiAg
ICAgICAgIH0KICAgICB9CiAgICAgCi0gICAgYm9vbCBpc1N0cmljdEludDMyKE5vZGVJbmRleCk7
CisgICAgYm9vbCBpc1N0cmljdEludDMyKE5vZGUqKTsKICAgICAKLSAgICBib29sIGlzS25vd25J
bnRlZ2VyKE5vZGVJbmRleCk7Ci0gICAgYm9vbCBpc0tub3duTnVtZXJpYyhOb2RlSW5kZXgpOwot
ICAgIGJvb2wgaXNLbm93bkNlbGwoTm9kZUluZGV4KTsKKyAgICBib29sIGlzS25vd25JbnRlZ2Vy
KE5vZGUqKTsKKyAgICBib29sIGlzS25vd25OdW1lcmljKE5vZGUqKTsKKyAgICBib29sIGlzS25v
d25DZWxsKE5vZGUqKTsKICAgICAKLSAgICBib29sIGlzS25vd25Ob3RJbnRlZ2VyKE5vZGVJbmRl
eCk7Ci0gICAgYm9vbCBpc0tub3duTm90TnVtYmVyKE5vZGVJbmRleCk7CisgICAgYm9vbCBpc0tu
b3duTm90SW50ZWdlcihOb2RlKik7CisgICAgYm9vbCBpc0tub3duTm90TnVtYmVyKE5vZGUqKTsK
IAotICAgIGJvb2wgaXNLbm93bk5vdENlbGwoTm9kZUluZGV4KTsKKyAgICBib29sIGlzS25vd25O
b3RDZWxsKE5vZGUqKTsKICAgICAKICAgICAvLyBDaGVja3MvYWNjZXNzb3JzIGZvciBjb25zdGFu
dCB2YWx1ZXMuCi0gICAgYm9vbCBpc0NvbnN0YW50KE5vZGVJbmRleCBub2RlSW5kZXgpIHsgcmV0
dXJuIG1faml0LmdyYXBoKCkuaXNDb25zdGFudChub2RlSW5kZXgpOyB9Ci0gICAgYm9vbCBpc0pT
Q29uc3RhbnQoTm9kZUluZGV4IG5vZGVJbmRleCkgeyByZXR1cm4gbV9qaXQuZ3JhcGgoKS5pc0pT
Q29uc3RhbnQobm9kZUluZGV4KTsgfQotICAgIGJvb2wgaXNJbnQzMkNvbnN0YW50KE5vZGVJbmRl
eCBub2RlSW5kZXgpIHsgcmV0dXJuIG1faml0LmdyYXBoKCkuaXNJbnQzMkNvbnN0YW50KG5vZGVJ
bmRleCk7IH0KLSAgICBib29sIGlzRG91YmxlQ29uc3RhbnQoTm9kZUluZGV4IG5vZGVJbmRleCkg
eyByZXR1cm4gbV9qaXQuZ3JhcGgoKS5pc0RvdWJsZUNvbnN0YW50KG5vZGVJbmRleCk7IH0KLSAg
ICBib29sIGlzTnVtYmVyQ29uc3RhbnQoTm9kZUluZGV4IG5vZGVJbmRleCkgeyByZXR1cm4gbV9q
aXQuZ3JhcGgoKS5pc051bWJlckNvbnN0YW50KG5vZGVJbmRleCk7IH0KLSAgICBib29sIGlzQm9v
bGVhbkNvbnN0YW50KE5vZGVJbmRleCBub2RlSW5kZXgpIHsgcmV0dXJuIG1faml0LmdyYXBoKCku
aXNCb29sZWFuQ29uc3RhbnQobm9kZUluZGV4KTsgfQotICAgIGJvb2wgaXNGdW5jdGlvbkNvbnN0
YW50KE5vZGVJbmRleCBub2RlSW5kZXgpIHsgcmV0dXJuIG1faml0LmdyYXBoKCkuaXNGdW5jdGlv
bkNvbnN0YW50KG5vZGVJbmRleCk7IH0KLSAgICBpbnQzMl90IHZhbHVlT2ZJbnQzMkNvbnN0YW50
KE5vZGVJbmRleCBub2RlSW5kZXgpIHsgcmV0dXJuIG1faml0LmdyYXBoKCkudmFsdWVPZkludDMy
Q29uc3RhbnQobm9kZUluZGV4KTsgfQotICAgIGRvdWJsZSB2YWx1ZU9mTnVtYmVyQ29uc3RhbnQo
Tm9kZUluZGV4IG5vZGVJbmRleCkgeyByZXR1cm4gbV9qaXQuZ3JhcGgoKS52YWx1ZU9mTnVtYmVy
Q29uc3RhbnQobm9kZUluZGV4KTsgfQotICAgIGludDMyX3QgdmFsdWVPZk51bWJlckNvbnN0YW50
QXNJbnQzMihOb2RlSW5kZXggbm9kZUluZGV4KQotICAgIHsKLSAgICAgICAgaWYgKGlzSW50MzJD
b25zdGFudChub2RlSW5kZXgpKQotICAgICAgICAgICAgcmV0dXJuIHZhbHVlT2ZJbnQzMkNvbnN0
YW50KG5vZGVJbmRleCk7Ci0gICAgICAgIHJldHVybiBKU0M6OnRvSW50MzIodmFsdWVPZk51bWJl
ckNvbnN0YW50KG5vZGVJbmRleCkpOworICAgIGJvb2wgaXNDb25zdGFudChOb2RlKiBub2RlKSB7
IHJldHVybiBtX2ppdC5ncmFwaCgpLmlzQ29uc3RhbnQobm9kZSk7IH0KKyAgICBib29sIGlzSlND
b25zdGFudChOb2RlKiBub2RlKSB7IHJldHVybiBtX2ppdC5ncmFwaCgpLmlzSlNDb25zdGFudChu
b2RlKTsgfQorICAgIGJvb2wgaXNJbnQzMkNvbnN0YW50KE5vZGUqIG5vZGUpIHsgcmV0dXJuIG1f
aml0LmdyYXBoKCkuaXNJbnQzMkNvbnN0YW50KG5vZGUpOyB9CisgICAgYm9vbCBpc0RvdWJsZUNv
bnN0YW50KE5vZGUqIG5vZGUpIHsgcmV0dXJuIG1faml0LmdyYXBoKCkuaXNEb3VibGVDb25zdGFu
dChub2RlKTsgfQorICAgIGJvb2wgaXNOdW1iZXJDb25zdGFudChOb2RlKiBub2RlKSB7IHJldHVy
biBtX2ppdC5ncmFwaCgpLmlzTnVtYmVyQ29uc3RhbnQobm9kZSk7IH0KKyAgICBib29sIGlzQm9v
bGVhbkNvbnN0YW50KE5vZGUqIG5vZGUpIHsgcmV0dXJuIG1faml0LmdyYXBoKCkuaXNCb29sZWFu
Q29uc3RhbnQobm9kZSk7IH0KKyAgICBib29sIGlzRnVuY3Rpb25Db25zdGFudChOb2RlKiBub2Rl
KSB7IHJldHVybiBtX2ppdC5ncmFwaCgpLmlzRnVuY3Rpb25Db25zdGFudChub2RlKTsgfQorICAg
IGludDMyX3QgdmFsdWVPZkludDMyQ29uc3RhbnQoTm9kZSogbm9kZSkgeyByZXR1cm4gbV9qaXQu
Z3JhcGgoKS52YWx1ZU9mSW50MzJDb25zdGFudChub2RlKTsgfQorICAgIGRvdWJsZSB2YWx1ZU9m
TnVtYmVyQ29uc3RhbnQoTm9kZSogbm9kZSkgeyByZXR1cm4gbV9qaXQuZ3JhcGgoKS52YWx1ZU9m
TnVtYmVyQ29uc3RhbnQobm9kZSk7IH0KKyAgICBpbnQzMl90IHZhbHVlT2ZOdW1iZXJDb25zdGFu
dEFzSW50MzIoTm9kZSogbm9kZSkKKyAgICB7CisgICAgICAgIGlmIChpc0ludDMyQ29uc3RhbnQo
bm9kZSkpCisgICAgICAgICAgICByZXR1cm4gdmFsdWVPZkludDMyQ29uc3RhbnQobm9kZSk7Cisg
ICAgICAgIHJldHVybiBKU0M6OnRvSW50MzIodmFsdWVPZk51bWJlckNvbnN0YW50KG5vZGUpKTsK
ICAgICB9CiAjaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICB2b2lkKiBhZGRyZXNzT2ZEb3VibGVD
b25zdGFudChOb2RlSW5kZXggbm9kZUluZGV4KSB7IHJldHVybiBtX2ppdC5hZGRyZXNzT2ZEb3Vi
bGVDb25zdGFudChub2RlSW5kZXgpOyB9CisgICAgdm9pZCogYWRkcmVzc09mRG91YmxlQ29uc3Rh
bnQoTm9kZSogbm9kZSkgeyByZXR1cm4gbV9qaXQuYWRkcmVzc09mRG91YmxlQ29uc3RhbnQobm9k
ZSk7IH0KICNlbmRpZgotICAgIEpTVmFsdWUgdmFsdWVPZkpTQ29uc3RhbnQoTm9kZUluZGV4IG5v
ZGVJbmRleCkgeyByZXR1cm4gbV9qaXQuZ3JhcGgoKS52YWx1ZU9mSlNDb25zdGFudChub2RlSW5k
ZXgpOyB9Ci0gICAgYm9vbCB2YWx1ZU9mQm9vbGVhbkNvbnN0YW50KE5vZGVJbmRleCBub2RlSW5k
ZXgpIHsgcmV0dXJuIG1faml0LmdyYXBoKCkudmFsdWVPZkJvb2xlYW5Db25zdGFudChub2RlSW5k
ZXgpOyB9Ci0gICAgSlNGdW5jdGlvbiogdmFsdWVPZkZ1bmN0aW9uQ29uc3RhbnQoTm9kZUluZGV4
IG5vZGVJbmRleCkgeyByZXR1cm4gbV9qaXQuZ3JhcGgoKS52YWx1ZU9mRnVuY3Rpb25Db25zdGFu
dChub2RlSW5kZXgpOyB9Ci0gICAgYm9vbCBpc051bGxDb25zdGFudChOb2RlSW5kZXggbm9kZUlu
ZGV4KQorICAgIEpTVmFsdWUgdmFsdWVPZkpTQ29uc3RhbnQoTm9kZSogbm9kZSkgeyByZXR1cm4g
bV9qaXQuZ3JhcGgoKS52YWx1ZU9mSlNDb25zdGFudChub2RlKTsgfQorICAgIGJvb2wgdmFsdWVP
ZkJvb2xlYW5Db25zdGFudChOb2RlKiBub2RlKSB7IHJldHVybiBtX2ppdC5ncmFwaCgpLnZhbHVl
T2ZCb29sZWFuQ29uc3RhbnQobm9kZSk7IH0KKyAgICBKU0Z1bmN0aW9uKiB2YWx1ZU9mRnVuY3Rp
b25Db25zdGFudChOb2RlKiBub2RlKSB7IHJldHVybiBtX2ppdC5ncmFwaCgpLnZhbHVlT2ZGdW5j
dGlvbkNvbnN0YW50KG5vZGUpOyB9CisgICAgYm9vbCBpc051bGxDb25zdGFudChOb2RlKiBub2Rl
KQogICAgIHsKLSAgICAgICAgaWYgKCFpc0NvbnN0YW50KG5vZGVJbmRleCkpCisgICAgICAgIGlm
ICghaXNDb25zdGFudChub2RlKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAg
cmV0dXJuIHZhbHVlT2ZKU0NvbnN0YW50KG5vZGVJbmRleCkuaXNOdWxsKCk7CisgICAgICAgIHJl
dHVybiB2YWx1ZU9mSlNDb25zdGFudChub2RlKS5pc051bGwoKTsKICAgICB9CiAKICAgICBJZGVu
dGlmaWVyKiBpZGVudGlmaWVyKHVuc2lnbmVkIGluZGV4KQpAQCAtNjI2LDkgKzYxNiw5IEBAIHB1
YmxpYzoKICNlbmRpZgogCiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBNYWNyb0Fzc2VtYmxlcjo6
SW1tNjQgdmFsdWVPZkpTQ29uc3RhbnRBc0ltbTY0KE5vZGVJbmRleCBub2RlSW5kZXgpCisgICAg
TWFjcm9Bc3NlbWJsZXI6OkltbTY0IHZhbHVlT2ZKU0NvbnN0YW50QXNJbW02NChOb2RlKiBub2Rl
KQogICAgIHsKLSAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyOjpJbW02NChKU1ZhbHVlOjpl
bmNvZGUodmFsdWVPZkpTQ29uc3RhbnQobm9kZUluZGV4KSkpOworICAgICAgICByZXR1cm4gTWFj
cm9Bc3NlbWJsZXI6OkltbTY0KEpTVmFsdWU6OmVuY29kZSh2YWx1ZU9mSlNDb25zdGFudChub2Rl
KSkpOwogICAgIH0KICNlbmRpZgogCkBAIC03MDUsMTkgKzY5NSwxOSBAQCBwdWJsaWM6CiAKICAg
ICAgICAgLy8gQ2hlY2sgdGhhdCBubyBpbnRlcnZlbmluZyBub2RlcyB3aWxsIGJlIGdlbmVyYXRl
ZC4KICAgICAgICAgZm9yICh1bnNpZ25lZCBpbmRleCA9IG1faW5kZXhJbkJsb2NrICsgMTsgaW5k
ZXggPCBibG9jay0+c2l6ZSgpIC0gMTsgKytpbmRleCkgewotICAgICAgICAgICAgTm9kZUluZGV4
IG5vZGVJbmRleCA9IGJsb2NrLT5hdChpbmRleCk7Ci0gICAgICAgICAgICBpZiAoYXQobm9kZUlu
ZGV4KS5zaG91bGRHZW5lcmF0ZSgpKQorICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5h
dChpbmRleCk7CisgICAgICAgICAgICBpZiAobm9kZS0+c2hvdWxkR2VuZXJhdGUoKSkKICAgICAg
ICAgICAgICAgICByZXR1cm4gVUlOVF9NQVg7CiAgICAgICAgIH0KIAogICAgICAgICAvLyBDaGVj
ayBpZiB0aGUgbGFzdE5vZGUgaXMgYSBicmFuY2ggb24gdGhpcyBub2RlLgotICAgICAgICBOb2Rl
JiBsYXN0Tm9kZSA9IGF0KGJsb2NrLT5sYXN0KCkpOwotICAgICAgICByZXR1cm4gbGFzdE5vZGUu
b3AoKSA9PSBCcmFuY2ggJiYgbGFzdE5vZGUuY2hpbGQxKCkuaW5kZXgoKSA9PSBtX2NvbXBpbGVJ
bmRleCA/IGJsb2NrLT5zaXplKCkgLSAxIDogVUlOVF9NQVg7CisgICAgICAgIE5vZGUqIGxhc3RO
b2RlID0gYmxvY2stPmxhc3QoKTsKKyAgICAgICAgcmV0dXJuIGxhc3ROb2RlLT5vcCgpID09IEJy
YW5jaCAmJiBsYXN0Tm9kZS0+Y2hpbGQxKCkgPT0gbV9jdXJyZW50Tm9kZSA/IGJsb2NrLT5zaXpl
KCkgLSAxIDogVUlOVF9NQVg7CiAgICAgfQogICAgIAotICAgIHZvaWQgbm9uU3BlY3VsYXRpdmVW
YWx1ZVRvTnVtYmVyKE5vZGUmKTsKLSAgICB2b2lkIG5vblNwZWN1bGF0aXZlVmFsdWVUb0ludDMy
KE5vZGUmKTsKLSAgICB2b2lkIG5vblNwZWN1bGF0aXZlVUludDMyVG9OdW1iZXIoTm9kZSYpOwor
ICAgIHZvaWQgbm9uU3BlY3VsYXRpdmVWYWx1ZVRvTnVtYmVyKE5vZGUqKTsKKyAgICB2b2lkIG5v
blNwZWN1bGF0aXZlVmFsdWVUb0ludDMyKE5vZGUqKTsKKyAgICB2b2lkIG5vblNwZWN1bGF0aXZl
VUludDMyVG9OdW1iZXIoTm9kZSopOwogCiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICB2b2lkIGNh
Y2hlZEdldEJ5SWQoQ29kZU9yaWdpbiwgR1BSUmVnIGJhc2VHUFIsIEdQUlJlZyByZXN1bHRHUFIs
IHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIEpJVENvbXBpbGVyOjpKdW1wIHNsb3dQYXRoVGFy
Z2V0ID0gSklUQ29tcGlsZXI6Okp1bXAoKSwgU3BpbGxSZWdpc3RlcnNNb2RlID0gTmVlZFRvU3Bp
bGwpOwpAQCAtNzI4LDE5ICs3MTgsMTkgQEAgcHVibGljOgogI2VuZGlmCiAKICAgICB2b2lkIG5v
blNwZWN1bGF0aXZlTm9uUGVlcGhvbGVDb21wYXJlTnVsbChFZGdlIG9wZXJhbmQsIGJvb2wgaW52
ZXJ0ID0gZmFsc2UpOwotICAgIHZvaWQgbm9uU3BlY3VsYXRpdmVQZWVwaG9sZUJyYW5jaE51bGwo
RWRnZSBvcGVyYW5kLCBOb2RlSW5kZXggYnJhbmNoTm9kZUluZGV4LCBib29sIGludmVydCA9IGZh
bHNlKTsKLSAgICBib29sIG5vblNwZWN1bGF0aXZlQ29tcGFyZU51bGwoTm9kZSYsIEVkZ2Ugb3Bl
cmFuZCwgYm9vbCBpbnZlcnQgPSBmYWxzZSk7CisgICAgdm9pZCBub25TcGVjdWxhdGl2ZVBlZXBo
b2xlQnJhbmNoTnVsbChFZGdlIG9wZXJhbmQsIE5vZGUqIGJyYW5jaE5vZGUsIGJvb2wgaW52ZXJ0
ID0gZmFsc2UpOworICAgIGJvb2wgbm9uU3BlY3VsYXRpdmVDb21wYXJlTnVsbChOb2RlKiwgRWRn
ZSBvcGVyYW5kLCBib29sIGludmVydCA9IGZhbHNlKTsKICAgICAKLSAgICB2b2lkIG5vblNwZWN1
bGF0aXZlUGVlcGhvbGVCcmFuY2goTm9kZSYsIE5vZGVJbmRleCBicmFuY2hOb2RlSW5kZXgsIE1h
Y3JvQXNzZW1ibGVyOjpSZWxhdGlvbmFsQ29uZGl0aW9uLCBTX0RGR09wZXJhdGlvbl9FSkogaGVs
cGVyRnVuY3Rpb24pOwotICAgIHZvaWQgbm9uU3BlY3VsYXRpdmVOb25QZWVwaG9sZUNvbXBhcmUo
Tm9kZSYsIE1hY3JvQXNzZW1ibGVyOjpSZWxhdGlvbmFsQ29uZGl0aW9uLCBTX0RGR09wZXJhdGlv
bl9FSkogaGVscGVyRnVuY3Rpb24pOwotICAgIGJvb2wgbm9uU3BlY3VsYXRpdmVDb21wYXJlKE5v
ZGUmLCBNYWNyb0Fzc2VtYmxlcjo6UmVsYXRpb25hbENvbmRpdGlvbiwgU19ERkdPcGVyYXRpb25f
RUpKIGhlbHBlckZ1bmN0aW9uKTsKLSAgICAKLSAgICB2b2lkIG5vblNwZWN1bGF0aXZlUGVlcGhv
bGVTdHJpY3RFcShOb2RlJiwgTm9kZUluZGV4IGJyYW5jaE5vZGVJbmRleCwgYm9vbCBpbnZlcnQg
PSBmYWxzZSk7Ci0gICAgdm9pZCBub25TcGVjdWxhdGl2ZU5vblBlZXBob2xlU3RyaWN0RXEoTm9k
ZSYsIGJvb2wgaW52ZXJ0ID0gZmFsc2UpOwotICAgIGJvb2wgbm9uU3BlY3VsYXRpdmVTdHJpY3RF
cShOb2RlJiwgYm9vbCBpbnZlcnQgPSBmYWxzZSk7CisgICAgdm9pZCBub25TcGVjdWxhdGl2ZVBl
ZXBob2xlQnJhbmNoKE5vZGUqLCBOb2RlKiBicmFuY2hOb2RlLCBNYWNyb0Fzc2VtYmxlcjo6UmVs
YXRpb25hbENvbmRpdGlvbiwgU19ERkdPcGVyYXRpb25fRUpKIGhlbHBlckZ1bmN0aW9uKTsKKyAg
ICB2b2lkIG5vblNwZWN1bGF0aXZlTm9uUGVlcGhvbGVDb21wYXJlKE5vZGUqLCBNYWNyb0Fzc2Vt
Ymxlcjo6UmVsYXRpb25hbENvbmRpdGlvbiwgU19ERkdPcGVyYXRpb25fRUpKIGhlbHBlckZ1bmN0
aW9uKTsKKyAgICBib29sIG5vblNwZWN1bGF0aXZlQ29tcGFyZShOb2RlKiwgTWFjcm9Bc3NlbWJs
ZXI6OlJlbGF0aW9uYWxDb25kaXRpb24sIFNfREZHT3BlcmF0aW9uX0VKSiBoZWxwZXJGdW5jdGlv
bik7CisgICAgCisgICAgdm9pZCBub25TcGVjdWxhdGl2ZVBlZXBob2xlU3RyaWN0RXEoTm9kZSos
IE5vZGUqIGJyYW5jaE5vZGUsIGJvb2wgaW52ZXJ0ID0gZmFsc2UpOworICAgIHZvaWQgbm9uU3Bl
Y3VsYXRpdmVOb25QZWVwaG9sZVN0cmljdEVxKE5vZGUqLCBib29sIGludmVydCA9IGZhbHNlKTsK
KyAgICBib29sIG5vblNwZWN1bGF0aXZlU3RyaWN0RXEoTm9kZSosIGJvb2wgaW52ZXJ0ID0gZmFs
c2UpOwogICAgIAotICAgIHZvaWQgY29tcGlsZUluc3RhbmNlT2ZGb3JPYmplY3QoTm9kZSYsIEdQ
UlJlZyB2YWx1ZVJlZywgR1BSUmVnIHByb3RvdHlwZVJlZywgR1BSUmVnIHNjcmF0Y2hBbmRSZXN1
bHRSZWcpOwotICAgIHZvaWQgY29tcGlsZUluc3RhbmNlT2YoTm9kZSYpOworICAgIHZvaWQgY29t
cGlsZUluc3RhbmNlT2ZGb3JPYmplY3QoTm9kZSosIEdQUlJlZyB2YWx1ZVJlZywgR1BSUmVnIHBy
b3RvdHlwZVJlZywgR1BSUmVnIHNjcmF0Y2hBbmRSZXN1bHRSZWcpOworICAgIHZvaWQgY29tcGls
ZUluc3RhbmNlT2YoTm9kZSopOwogICAgIAogICAgIC8vIEFjY2VzcyB0byBvdXIgZml4ZWQgY2Fs
bGVlIENhbGxGcmFtZS4KICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyBjYWxsRnJhbWVTbG90
KGludCBzbG90KQpAQCAtNzc0LDEzNyArNzY0LDEyOCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVy
biBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgKG1f
aml0LmNvZGVCbG9jaygpLT5tX251bUNhbGxlZVJlZ2lzdGVycyArIGFyZ3VtZW50VG9PcGVyYW5k
KGFyZ3VtZW50KSkgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpICsgT0JKRUNU
X09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy5wYXlsb2FkKSk7CiAgICAg
fQogCi0gICAgdm9pZCBlbWl0Q2FsbChOb2RlJik7CisgICAgdm9pZCBlbWl0Q2FsbChOb2RlKik7
CiAgICAgCiAgICAgLy8gQ2FsbGVkIG9uY2UgYSBub2RlIGhhcyBjb21wbGV0ZWQgY29kZSBnZW5l
cmF0aW9uIGJ1dCBwcmlvciB0byBzZXR0aW5nCiAgICAgLy8gaXRzIHJlc3VsdCwgdG8gZnJlZSB1
cCBpdHMgY2hpbGRyZW4uIChUaGlzIG11c3QgaGFwcGVuIHByaW9yIHRvIHNldHRpbmcKICAgICAv
LyB0aGUgbm9kZXMgcmVzdWx0LCBzaW5jZSB0aGUgbm9kZSBtYXkgaGF2ZSB0aGUgc2FtZSBWaXJ0
dWFsUmVnaXN0ZXIgYXMKICAgICAvLyBhIGNoaWxkLCBhbmQgYXMgc3VjaCB3aWxsIHVzZSB0aGUg
c2FtZSBHZW5lcmF0aW9JbmZvKS4KLSAgICB2b2lkIHVzZUNoaWxkcmVuKE5vZGUmKTsKKyAgICB2
b2lkIHVzZUNoaWxkcmVuKE5vZGUqKTsKIAogICAgIC8vIFRoZXNlIG1ldGhvZCBjYWxsZWQgdG8g
aW5pdGlhbGl6ZSB0aGUgdGhlIEdlbmVyYXRpb25JbmZvCiAgICAgLy8gdG8gZGVzY3JpYmUgdGhl
IHJlc3VsdCBvZiBhbiBvcGVyYXRpb24uCi0gICAgdm9pZCBpbnRlZ2VyUmVzdWx0KEdQUlJlZyBy
ZWcsIE5vZGVJbmRleCBub2RlSW5kZXgsIERhdGFGb3JtYXQgZm9ybWF0ID0gRGF0YUZvcm1hdElu
dGVnZXIsIFVzZUNoaWxkcmVuTW9kZSBtb2RlID0gQ2FsbFVzZUNoaWxkcmVuKQorICAgIHZvaWQg
aW50ZWdlclJlc3VsdChHUFJSZWcgcmVnLCBOb2RlKiBub2RlLCBEYXRhRm9ybWF0IGZvcm1hdCA9
IERhdGFGb3JtYXRJbnRlZ2VyLCBVc2VDaGlsZHJlbk1vZGUgbW9kZSA9IENhbGxVc2VDaGlsZHJl
bikKICAgICB7Ci0gICAgICAgIE5vZGUmIG5vZGUgPSBhdChub2RlSW5kZXgpOwogICAgICAgICBp
ZiAobW9kZSA9PSBDYWxsVXNlQ2hpbGRyZW4pCiAgICAgICAgICAgICB1c2VDaGlsZHJlbihub2Rl
KTsKIAotICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyID0gbm9kZS52aXJ0
dWFsUmVnaXN0ZXIoKTsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciA9
IG5vZGUtPnZpcnR1YWxSZWdpc3RlcigpOwogICAgICAgICBHZW5lcmF0aW9uSW5mbyYgaW5mbyA9
IG1fZ2VuZXJhdGlvbkluZm9bdmlydHVhbFJlZ2lzdGVyXTsKIAogICAgICAgICBpZiAoZm9ybWF0
ID09IERhdGFGb3JtYXRJbnRlZ2VyKSB7CiAgICAgICAgICAgICBtX2ppdC5qaXRBc3NlcnRJc0lu
dDMyKHJlZyk7CiAgICAgICAgICAgICBtX2dwcnMucmV0YWluKHJlZywgdmlydHVhbFJlZ2lzdGVy
LCBTcGlsbE9yZGVySW50ZWdlcik7Ci0gICAgICAgICAgICBpbmZvLmluaXRJbnRlZ2VyKG5vZGVJ
bmRleCwgbm9kZS5yZWZDb3VudCgpLCByZWcpOworICAgICAgICAgICAgaW5mby5pbml0SW50ZWdl
cihub2RlLCBub2RlLT5yZWZDb3VudCgpLCByZWcpOwogICAgICAgICB9IGVsc2UgewogI2lmIFVT
RShKU1ZBTFVFNjQpCiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChmb3JtYXQgPT0gRGF0YUZv
cm1hdEpTSW50ZWdlcik7CiAgICAgICAgICAgICBtX2ppdC5qaXRBc3NlcnRJc0pTSW50MzIocmVn
KTsKICAgICAgICAgICAgIG1fZ3Bycy5yZXRhaW4ocmVnLCB2aXJ0dWFsUmVnaXN0ZXIsIFNwaWxs
T3JkZXJKUyk7Ci0gICAgICAgICAgICBpbmZvLmluaXRKU1ZhbHVlKG5vZGVJbmRleCwgbm9kZS5y
ZWZDb3VudCgpLCByZWcsIGZvcm1hdCk7CisgICAgICAgICAgICBpbmZvLmluaXRKU1ZhbHVlKG5v
ZGUsIG5vZGUtPnJlZkNvdW50KCksIHJlZywgZm9ybWF0KTsKICNlbGlmIFVTRShKU1ZBTFVFMzJf
NjQpCiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogI2VuZGlmCiAg
ICAgICAgIH0KICAgICB9Ci0gICAgdm9pZCBpbnRlZ2VyUmVzdWx0KEdQUlJlZyByZWcsIE5vZGVJ
bmRleCBub2RlSW5kZXgsIFVzZUNoaWxkcmVuTW9kZSBtb2RlKQorICAgIHZvaWQgaW50ZWdlclJl
c3VsdChHUFJSZWcgcmVnLCBOb2RlKiBub2RlLCBVc2VDaGlsZHJlbk1vZGUgbW9kZSkKICAgICB7
Ci0gICAgICAgIGludGVnZXJSZXN1bHQocmVnLCBub2RlSW5kZXgsIERhdGFGb3JtYXRJbnRlZ2Vy
LCBtb2RlKTsKKyAgICAgICAgaW50ZWdlclJlc3VsdChyZWcsIG5vZGUsIERhdGFGb3JtYXRJbnRl
Z2VyLCBtb2RlKTsKICAgICB9Ci0gICAgdm9pZCBub1Jlc3VsdChOb2RlSW5kZXggbm9kZUluZGV4
LCBVc2VDaGlsZHJlbk1vZGUgbW9kZSA9IENhbGxVc2VDaGlsZHJlbikKKyAgICB2b2lkIG5vUmVz
dWx0KE5vZGUqIG5vZGUsIFVzZUNoaWxkcmVuTW9kZSBtb2RlID0gQ2FsbFVzZUNoaWxkcmVuKQog
ICAgIHsKICAgICAgICAgaWYgKG1vZGUgPT0gVXNlQ2hpbGRyZW5DYWxsZWRFeHBsaWNpdGx5KQog
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBOb2RlJiBub2RlID0gYXQobm9kZUluZGV4KTsK
ICAgICAgICAgdXNlQ2hpbGRyZW4obm9kZSk7CiAgICAgfQotICAgIHZvaWQgY2VsbFJlc3VsdChH
UFJSZWcgcmVnLCBOb2RlSW5kZXggbm9kZUluZGV4LCBVc2VDaGlsZHJlbk1vZGUgbW9kZSA9IENh
bGxVc2VDaGlsZHJlbikKKyAgICB2b2lkIGNlbGxSZXN1bHQoR1BSUmVnIHJlZywgTm9kZSogbm9k
ZSwgVXNlQ2hpbGRyZW5Nb2RlIG1vZGUgPSBDYWxsVXNlQ2hpbGRyZW4pCiAgICAgewotICAgICAg
ICBOb2RlJiBub2RlID0gYXQobm9kZUluZGV4KTsKICAgICAgICAgaWYgKG1vZGUgPT0gQ2FsbFVz
ZUNoaWxkcmVuKQogICAgICAgICAgICAgdXNlQ2hpbGRyZW4obm9kZSk7CiAKLSAgICAgICAgVmly
dHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciA9IG5vZGUudmlydHVhbFJlZ2lzdGVyKCk7Cisg
ICAgICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIgPSBub2RlLT52aXJ0dWFsUmVn
aXN0ZXIoKTsKICAgICAgICAgbV9ncHJzLnJldGFpbihyZWcsIHZpcnR1YWxSZWdpc3RlciwgU3Bp
bGxPcmRlckNlbGwpOwogICAgICAgICBHZW5lcmF0aW9uSW5mbyYgaW5mbyA9IG1fZ2VuZXJhdGlv
bkluZm9bdmlydHVhbFJlZ2lzdGVyXTsKLSAgICAgICAgaW5mby5pbml0Q2VsbChub2RlSW5kZXgs
IG5vZGUucmVmQ291bnQoKSwgcmVnKTsKKyAgICAgICAgaW5mby5pbml0Q2VsbChub2RlLCBub2Rl
LT5yZWZDb3VudCgpLCByZWcpOwogICAgIH0KLSAgICB2b2lkIGJvb2xlYW5SZXN1bHQoR1BSUmVn
IHJlZywgTm9kZUluZGV4IG5vZGVJbmRleCwgVXNlQ2hpbGRyZW5Nb2RlIG1vZGUgPSBDYWxsVXNl
Q2hpbGRyZW4pCisgICAgdm9pZCBib29sZWFuUmVzdWx0KEdQUlJlZyByZWcsIE5vZGUqIG5vZGUs
IFVzZUNoaWxkcmVuTW9kZSBtb2RlID0gQ2FsbFVzZUNoaWxkcmVuKQogICAgIHsKLSAgICAgICAg
Tm9kZSYgbm9kZSA9IGF0KG5vZGVJbmRleCk7CiAgICAgICAgIGlmIChtb2RlID09IENhbGxVc2VD
aGlsZHJlbikKICAgICAgICAgICAgIHVzZUNoaWxkcmVuKG5vZGUpOwogCi0gICAgICAgIFZpcnR1
YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIgPSBub2RlLnZpcnR1YWxSZWdpc3RlcigpOworICAg
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyID0gbm9kZS0+dmlydHVhbFJlZ2lz
dGVyKCk7CiAgICAgICAgIG1fZ3Bycy5yZXRhaW4ocmVnLCB2aXJ0dWFsUmVnaXN0ZXIsIFNwaWxs
T3JkZXJCb29sZWFuKTsKICAgICAgICAgR2VuZXJhdGlvbkluZm8mIGluZm8gPSBtX2dlbmVyYXRp
b25JbmZvW3ZpcnR1YWxSZWdpc3Rlcl07Ci0gICAgICAgIGluZm8uaW5pdEJvb2xlYW4obm9kZUlu
ZGV4LCBub2RlLnJlZkNvdW50KCksIHJlZyk7CisgICAgICAgIGluZm8uaW5pdEJvb2xlYW4obm9k
ZSwgbm9kZS0+cmVmQ291bnQoKSwgcmVnKTsKICAgICB9CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAg
ICB2b2lkIGpzVmFsdWVSZXN1bHQoR1BSUmVnIHJlZywgTm9kZUluZGV4IG5vZGVJbmRleCwgRGF0
YUZvcm1hdCBmb3JtYXQgPSBEYXRhRm9ybWF0SlMsIFVzZUNoaWxkcmVuTW9kZSBtb2RlID0gQ2Fs
bFVzZUNoaWxkcmVuKQorICAgIHZvaWQganNWYWx1ZVJlc3VsdChHUFJSZWcgcmVnLCBOb2RlKiBu
b2RlLCBEYXRhRm9ybWF0IGZvcm1hdCA9IERhdGFGb3JtYXRKUywgVXNlQ2hpbGRyZW5Nb2RlIG1v
ZGUgPSBDYWxsVXNlQ2hpbGRyZW4pCiAgICAgewogICAgICAgICBpZiAoZm9ybWF0ID09IERhdGFG
b3JtYXRKU0ludGVnZXIpCiAgICAgICAgICAgICBtX2ppdC5qaXRBc3NlcnRJc0pTSW50MzIocmVn
KTsKICAgICAgICAgCi0gICAgICAgIE5vZGUmIG5vZGUgPSBhdChub2RlSW5kZXgpOwogICAgICAg
ICBpZiAobW9kZSA9PSBDYWxsVXNlQ2hpbGRyZW4pCiAgICAgICAgICAgICB1c2VDaGlsZHJlbihu
b2RlKTsKIAotICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyID0gbm9kZS52
aXJ0dWFsUmVnaXN0ZXIoKTsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3Rl
ciA9IG5vZGUtPnZpcnR1YWxSZWdpc3RlcigpOwogICAgICAgICBtX2dwcnMucmV0YWluKHJlZywg
dmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVySlMpOwogICAgICAgICBHZW5lcmF0aW9uSW5mbyYg
aW5mbyA9IG1fZ2VuZXJhdGlvbkluZm9bdmlydHVhbFJlZ2lzdGVyXTsKLSAgICAgICAgaW5mby5p
bml0SlNWYWx1ZShub2RlSW5kZXgsIG5vZGUucmVmQ291bnQoKSwgcmVnLCBmb3JtYXQpOworICAg
ICAgICBpbmZvLmluaXRKU1ZhbHVlKG5vZGUsIG5vZGUtPnJlZkNvdW50KCksIHJlZywgZm9ybWF0
KTsKICAgICB9Ci0gICAgdm9pZCBqc1ZhbHVlUmVzdWx0KEdQUlJlZyByZWcsIE5vZGVJbmRleCBu
b2RlSW5kZXgsIFVzZUNoaWxkcmVuTW9kZSBtb2RlKQorICAgIHZvaWQganNWYWx1ZVJlc3VsdChH
UFJSZWcgcmVnLCBOb2RlKiBub2RlLCBVc2VDaGlsZHJlbk1vZGUgbW9kZSkKICAgICB7Ci0gICAg
ICAgIGpzVmFsdWVSZXN1bHQocmVnLCBub2RlSW5kZXgsIERhdGFGb3JtYXRKUywgbW9kZSk7Cisg
ICAgICAgIGpzVmFsdWVSZXN1bHQocmVnLCBub2RlLCBEYXRhRm9ybWF0SlMsIG1vZGUpOwogICAg
IH0KICNlbGlmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgdm9pZCBqc1ZhbHVlUmVzdWx0KEdQUlJl
ZyB0YWcsIEdQUlJlZyBwYXlsb2FkLCBOb2RlSW5kZXggbm9kZUluZGV4LCBEYXRhRm9ybWF0IGZv
cm1hdCA9IERhdGFGb3JtYXRKUywgVXNlQ2hpbGRyZW5Nb2RlIG1vZGUgPSBDYWxsVXNlQ2hpbGRy
ZW4pCisgICAgdm9pZCBqc1ZhbHVlUmVzdWx0KEdQUlJlZyB0YWcsIEdQUlJlZyBwYXlsb2FkLCBO
b2RlKiBub2RlLCBEYXRhRm9ybWF0IGZvcm1hdCA9IERhdGFGb3JtYXRKUywgVXNlQ2hpbGRyZW5N
b2RlIG1vZGUgPSBDYWxsVXNlQ2hpbGRyZW4pCiAgICAgewotICAgICAgICBOb2RlJiBub2RlID0g
YXQobm9kZUluZGV4KTsKICAgICAgICAgaWYgKG1vZGUgPT0gQ2FsbFVzZUNoaWxkcmVuKQogICAg
ICAgICAgICAgdXNlQ2hpbGRyZW4obm9kZSk7CiAKLSAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHZp
cnR1YWxSZWdpc3RlciA9IG5vZGUudmlydHVhbFJlZ2lzdGVyKCk7CisgICAgICAgIFZpcnR1YWxS
ZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIgPSBub2RlLT52aXJ0dWFsUmVnaXN0ZXIoKTsKICAgICAg
ICAgbV9ncHJzLnJldGFpbih0YWcsIHZpcnR1YWxSZWdpc3RlciwgU3BpbGxPcmRlckpTKTsKICAg
ICAgICAgbV9ncHJzLnJldGFpbihwYXlsb2FkLCB2aXJ0dWFsUmVnaXN0ZXIsIFNwaWxsT3JkZXJK
Uyk7CiAgICAgICAgIEdlbmVyYXRpb25JbmZvJiBpbmZvID0gbV9nZW5lcmF0aW9uSW5mb1t2aXJ0
dWFsUmVnaXN0ZXJdOwotICAgICAgICBpbmZvLmluaXRKU1ZhbHVlKG5vZGVJbmRleCwgbm9kZS5y
ZWZDb3VudCgpLCB0YWcsIHBheWxvYWQsIGZvcm1hdCk7CisgICAgICAgIGluZm8uaW5pdEpTVmFs
dWUobm9kZSwgbm9kZS0+cmVmQ291bnQoKSwgdGFnLCBwYXlsb2FkLCBmb3JtYXQpOwogICAgIH0K
LSAgICB2b2lkIGpzVmFsdWVSZXN1bHQoR1BSUmVnIHRhZywgR1BSUmVnIHBheWxvYWQsIE5vZGVJ
bmRleCBub2RlSW5kZXgsIFVzZUNoaWxkcmVuTW9kZSBtb2RlKQorICAgIHZvaWQganNWYWx1ZVJl
c3VsdChHUFJSZWcgdGFnLCBHUFJSZWcgcGF5bG9hZCwgTm9kZSogbm9kZSwgVXNlQ2hpbGRyZW5N
b2RlIG1vZGUpCiAgICAgewotICAgICAgICBqc1ZhbHVlUmVzdWx0KHRhZywgcGF5bG9hZCwgbm9k
ZUluZGV4LCBEYXRhRm9ybWF0SlMsIG1vZGUpOworICAgICAgICBqc1ZhbHVlUmVzdWx0KHRhZywg
cGF5bG9hZCwgbm9kZSwgRGF0YUZvcm1hdEpTLCBtb2RlKTsKICAgICB9CiAjZW5kaWYKLSAgICB2
b2lkIHN0b3JhZ2VSZXN1bHQoR1BSUmVnIHJlZywgTm9kZUluZGV4IG5vZGVJbmRleCwgVXNlQ2hp
bGRyZW5Nb2RlIG1vZGUgPSBDYWxsVXNlQ2hpbGRyZW4pCisgICAgdm9pZCBzdG9yYWdlUmVzdWx0
KEdQUlJlZyByZWcsIE5vZGUqIG5vZGUsIFVzZUNoaWxkcmVuTW9kZSBtb2RlID0gQ2FsbFVzZUNo
aWxkcmVuKQogICAgIHsKLSAgICAgICAgTm9kZSYgbm9kZSA9IGF0KG5vZGVJbmRleCk7CiAgICAg
ICAgIGlmIChtb2RlID09IENhbGxVc2VDaGlsZHJlbikKICAgICAgICAgICAgIHVzZUNoaWxkcmVu
KG5vZGUpOwogICAgICAgICAKLSAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3Rl
ciA9IG5vZGUudmlydHVhbFJlZ2lzdGVyKCk7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0
dWFsUmVnaXN0ZXIgPSBub2RlLT52aXJ0dWFsUmVnaXN0ZXIoKTsKICAgICAgICAgbV9ncHJzLnJl
dGFpbihyZWcsIHZpcnR1YWxSZWdpc3RlciwgU3BpbGxPcmRlclN0b3JhZ2UpOwogICAgICAgICBH
ZW5lcmF0aW9uSW5mbyYgaW5mbyA9IG1fZ2VuZXJhdGlvbkluZm9bdmlydHVhbFJlZ2lzdGVyXTsK
LSAgICAgICAgaW5mby5pbml0U3RvcmFnZShub2RlSW5kZXgsIG5vZGUucmVmQ291bnQoKSwgcmVn
KTsKKyAgICAgICAgaW5mby5pbml0U3RvcmFnZShub2RlLCBub2RlLT5yZWZDb3VudCgpLCByZWcp
OwogICAgIH0KLSAgICB2b2lkIGRvdWJsZVJlc3VsdChGUFJSZWcgcmVnLCBOb2RlSW5kZXggbm9k
ZUluZGV4LCBVc2VDaGlsZHJlbk1vZGUgbW9kZSA9IENhbGxVc2VDaGlsZHJlbikKKyAgICB2b2lk
IGRvdWJsZVJlc3VsdChGUFJSZWcgcmVnLCBOb2RlKiBub2RlLCBVc2VDaGlsZHJlbk1vZGUgbW9k
ZSA9IENhbGxVc2VDaGlsZHJlbikKICAgICB7Ci0gICAgICAgIE5vZGUmIG5vZGUgPSBhdChub2Rl
SW5kZXgpOwogICAgICAgICBpZiAobW9kZSA9PSBDYWxsVXNlQ2hpbGRyZW4pCiAgICAgICAgICAg
ICB1c2VDaGlsZHJlbihub2RlKTsKIAotICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJl
Z2lzdGVyID0gbm9kZS52aXJ0dWFsUmVnaXN0ZXIoKTsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVy
IHZpcnR1YWxSZWdpc3RlciA9IG5vZGUtPnZpcnR1YWxSZWdpc3RlcigpOwogICAgICAgICBtX2Zw
cnMucmV0YWluKHJlZywgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVyRG91YmxlKTsKICAgICAg
ICAgR2VuZXJhdGlvbkluZm8mIGluZm8gPSBtX2dlbmVyYXRpb25JbmZvW3ZpcnR1YWxSZWdpc3Rl
cl07Ci0gICAgICAgIGluZm8uaW5pdERvdWJsZShub2RlSW5kZXgsIG5vZGUucmVmQ291bnQoKSwg
cmVnKTsKKyAgICAgICAgaW5mby5pbml0RG91YmxlKG5vZGUsIG5vZGUtPnJlZkNvdW50KCksIHJl
Zyk7CiAgICAgfQotICAgIHZvaWQgaW5pdENvbnN0YW50SW5mbyhOb2RlSW5kZXggbm9kZUluZGV4
KQorICAgIHZvaWQgaW5pdENvbnN0YW50SW5mbyhOb2RlKiBub2RlKQogICAgIHsKLSAgICAgICAg
QVNTRVJUKGlzSW50MzJDb25zdGFudChub2RlSW5kZXgpIHx8IGlzTnVtYmVyQ29uc3RhbnQobm9k
ZUluZGV4KSB8fCBpc0pTQ29uc3RhbnQobm9kZUluZGV4KSk7Ci0gICAgICAgIE5vZGUmIG5vZGUg
PSBhdChub2RlSW5kZXgpOwotICAgICAgICBtX2dlbmVyYXRpb25JbmZvW25vZGUudmlydHVhbFJl
Z2lzdGVyKCldLmluaXRDb25zdGFudChub2RlSW5kZXgsIG5vZGUucmVmQ291bnQoKSk7CisgICAg
ICAgIEFTU0VSVChpc0ludDMyQ29uc3RhbnQobm9kZSkgfHwgaXNOdW1iZXJDb25zdGFudChub2Rl
KSB8fCBpc0pTQ29uc3RhbnQobm9kZSkpOworICAgICAgICBtX2dlbmVyYXRpb25JbmZvW25vZGUt
PnZpcnR1YWxSZWdpc3RlcigpXS5pbml0Q29uc3RhbnQobm9kZSwgbm9kZS0+cmVmQ291bnQoKSk7
CiAgICAgfQogICAgIAogICAgIC8vIFRoZXNlIG1ldGhvZHMgYWRkIGNhbGxzIHRvIEMrKyBoZWxw
ZXIgZnVuY3Rpb25zLgpAQCAtMjAyOCw4OSArMjAwOSw4OCBAQCBwdWJsaWM6CiAgICAgdm9pZCBj
aGVja0NvbnNpc3RlbmN5KCkgeyB9CiAjZW5kaWYKIAotICAgIGJvb2wgaXNJbnRlZ2VyKE5vZGVJ
bmRleCBub2RlSW5kZXgpCisgICAgYm9vbCBpc0ludGVnZXIoTm9kZSogbm9kZSkKICAgICB7Ci0g
ICAgICAgIE5vZGUmIG5vZGUgPSBhdChub2RlSW5kZXgpOwotICAgICAgICBpZiAobm9kZS5oYXNJ
bnQzMlJlc3VsdCgpKQorICAgICAgICBpZiAobm9kZS0+aGFzSW50MzJSZXN1bHQoKSkKICAgICAg
ICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgICAgIGlmIChpc0ludDMyQ29uc3RhbnQobm9kZUlu
ZGV4KSkKKyAgICAgICAgaWYgKGlzSW50MzJDb25zdGFudChub2RlKSkKICAgICAgICAgICAgIHJl
dHVybiB0cnVlOwogCi0gICAgICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIgPSBu
b2RlLnZpcnR1YWxSZWdpc3RlcigpOworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJl
Z2lzdGVyID0gbm9kZS0+dmlydHVhbFJlZ2lzdGVyKCk7CiAgICAgICAgIEdlbmVyYXRpb25JbmZv
JiBpbmZvID0gbV9nZW5lcmF0aW9uSW5mb1t2aXJ0dWFsUmVnaXN0ZXJdOwogICAgICAgICAKICAg
ICAgICAgcmV0dXJuIGluZm8uaXNKU0ludGVnZXIoKTsKICAgICB9CiAgICAgCi0gICAgYm9vbCBj
b21wYXJlKE5vZGUmLCBNYWNyb0Fzc2VtYmxlcjo6UmVsYXRpb25hbENvbmRpdGlvbiwgTWFjcm9B
c3NlbWJsZXI6OkRvdWJsZUNvbmRpdGlvbiwgU19ERkdPcGVyYXRpb25fRUpKKTsKLSAgICBib29s
IGNvbXBpbGVQZWVwSG9sZUJyYW5jaChOb2RlJiwgTWFjcm9Bc3NlbWJsZXI6OlJlbGF0aW9uYWxD
b25kaXRpb24sIE1hY3JvQXNzZW1ibGVyOjpEb3VibGVDb25kaXRpb24sIFNfREZHT3BlcmF0aW9u
X0VKSik7Ci0gICAgdm9pZCBjb21waWxlUGVlcEhvbGVJbnRlZ2VyQnJhbmNoKE5vZGUmLCBOb2Rl
SW5kZXggYnJhbmNoTm9kZUluZGV4LCBKSVRDb21waWxlcjo6UmVsYXRpb25hbENvbmRpdGlvbik7
Ci0gICAgdm9pZCBjb21waWxlUGVlcEhvbGVEb3VibGVCcmFuY2goTm9kZSYsIE5vZGVJbmRleCBi
cmFuY2hOb2RlSW5kZXgsIEpJVENvbXBpbGVyOjpEb3VibGVDb25kaXRpb24pOwotICAgIHZvaWQg
Y29tcGlsZVBlZXBIb2xlT2JqZWN0RXF1YWxpdHkoTm9kZSYsIE5vZGVJbmRleCBicmFuY2hOb2Rl
SW5kZXgpOwotICAgIHZvaWQgY29tcGlsZVBlZXBIb2xlT2JqZWN0VG9PYmplY3RPck90aGVyRXF1
YWxpdHkoRWRnZSBsZWZ0Q2hpbGQsIEVkZ2UgcmlnaHRDaGlsZCwgTm9kZUluZGV4IGJyYW5jaE5v
ZGVJbmRleCk7Ci0gICAgdm9pZCBjb21waWxlT2JqZWN0RXF1YWxpdHkoTm9kZSYpOworICAgIGJv
b2wgY29tcGFyZShOb2RlKiwgTWFjcm9Bc3NlbWJsZXI6OlJlbGF0aW9uYWxDb25kaXRpb24sIE1h
Y3JvQXNzZW1ibGVyOjpEb3VibGVDb25kaXRpb24sIFNfREZHT3BlcmF0aW9uX0VKSik7CisgICAg
Ym9vbCBjb21waWxlUGVlcEhvbGVCcmFuY2goTm9kZSosIE1hY3JvQXNzZW1ibGVyOjpSZWxhdGlv
bmFsQ29uZGl0aW9uLCBNYWNyb0Fzc2VtYmxlcjo6RG91YmxlQ29uZGl0aW9uLCBTX0RGR09wZXJh
dGlvbl9FSkopOworICAgIHZvaWQgY29tcGlsZVBlZXBIb2xlSW50ZWdlckJyYW5jaChOb2RlKiwg
Tm9kZSogYnJhbmNoTm9kZSwgSklUQ29tcGlsZXI6OlJlbGF0aW9uYWxDb25kaXRpb24pOworICAg
IHZvaWQgY29tcGlsZVBlZXBIb2xlRG91YmxlQnJhbmNoKE5vZGUqLCBOb2RlKiBicmFuY2hOb2Rl
LCBKSVRDb21waWxlcjo6RG91YmxlQ29uZGl0aW9uKTsKKyAgICB2b2lkIGNvbXBpbGVQZWVwSG9s
ZU9iamVjdEVxdWFsaXR5KE5vZGUqLCBOb2RlKiBicmFuY2hOb2RlKTsKKyAgICB2b2lkIGNvbXBp
bGVQZWVwSG9sZU9iamVjdFRvT2JqZWN0T3JPdGhlckVxdWFsaXR5KEVkZ2UgbGVmdENoaWxkLCBF
ZGdlIHJpZ2h0Q2hpbGQsIE5vZGUqIGJyYW5jaE5vZGUpOworICAgIHZvaWQgY29tcGlsZU9iamVj
dEVxdWFsaXR5KE5vZGUqKTsKICAgICB2b2lkIGNvbXBpbGVPYmplY3RUb09iamVjdE9yT3RoZXJF
cXVhbGl0eShFZGdlIGxlZnRDaGlsZCwgRWRnZSByaWdodENoaWxkKTsKLSAgICB2b2lkIGNvbXBp
bGVWYWx1ZUFkZChOb2RlJik7CisgICAgdm9pZCBjb21waWxlVmFsdWVBZGQoTm9kZSopOwogICAg
IHZvaWQgY29tcGlsZU5vblN0cmluZ0NlbGxPck90aGVyTG9naWNhbE5vdChFZGdlIHZhbHVlLCBi
b29sIG5lZWRTcGVjdWxhdGlvbkNoZWNrKTsKLSAgICB2b2lkIGNvbXBpbGVMb2dpY2FsTm90KE5v
ZGUmKTsKKyAgICB2b2lkIGNvbXBpbGVMb2dpY2FsTm90KE5vZGUqKTsKICAgICB2b2lkIGVtaXRO
b25TdHJpbmdDZWxsT3JPdGhlckJyYW5jaChFZGdlIHZhbHVlLCBCbG9ja0luZGV4IHRha2VuLCBC
bG9ja0luZGV4IG5vdFRha2VuLCBib29sIG5lZWRTcGVjdWxhdGlvbkNoZWNrKTsKLSAgICB2b2lk
IGVtaXRCcmFuY2goTm9kZSYpOworICAgIHZvaWQgZW1pdEJyYW5jaChOb2RlKik7CiAgICAgCi0g
ICAgdm9pZCBjb21waWxlSW50ZWdlckNvbXBhcmUoTm9kZSYsIE1hY3JvQXNzZW1ibGVyOjpSZWxh
dGlvbmFsQ29uZGl0aW9uKTsKLSAgICB2b2lkIGNvbXBpbGVEb3VibGVDb21wYXJlKE5vZGUmLCBN
YWNyb0Fzc2VtYmxlcjo6RG91YmxlQ29uZGl0aW9uKTsKKyAgICB2b2lkIGNvbXBpbGVJbnRlZ2Vy
Q29tcGFyZShOb2RlKiwgTWFjcm9Bc3NlbWJsZXI6OlJlbGF0aW9uYWxDb25kaXRpb24pOworICAg
IHZvaWQgY29tcGlsZURvdWJsZUNvbXBhcmUoTm9kZSosIE1hY3JvQXNzZW1ibGVyOjpEb3VibGVD
b25kaXRpb24pOwogICAgIAotICAgIGJvb2wgY29tcGlsZVN0cmljdEVxRm9yQ29uc3RhbnQoTm9k
ZSYsIEVkZ2UgdmFsdWUsIEpTVmFsdWUgY29uc3RhbnQpOworICAgIGJvb2wgY29tcGlsZVN0cmlj
dEVxRm9yQ29uc3RhbnQoTm9kZSosIEVkZ2UgdmFsdWUsIEpTVmFsdWUgY29uc3RhbnQpOwogICAg
IAotICAgIGJvb2wgY29tcGlsZVN0cmljdEVxKE5vZGUmKTsKKyAgICBib29sIGNvbXBpbGVTdHJp
Y3RFcShOb2RlKik7CiAgICAgCi0gICAgdm9pZCBjb21waWxlQWxsb2NhdGVQcm9wZXJ0eVN0b3Jh
Z2UoTm9kZSYpOwotICAgIHZvaWQgY29tcGlsZVJlYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UoTm9k
ZSYpOworICAgIHZvaWQgY29tcGlsZUFsbG9jYXRlUHJvcGVydHlTdG9yYWdlKE5vZGUqKTsKKyAg
ICB2b2lkIGNvbXBpbGVSZWFsbG9jYXRlUHJvcGVydHlTdG9yYWdlKE5vZGUqKTsKICAgICAKICNp
ZiBVU0UoSlNWQUxVRTMyXzY0KQogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEJhc2VPcGVyYW5kVHlw
ZSwgdHlwZW5hbWUgUHJvcGVydHlPcGVyYW5kVHlwZSwgdHlwZW5hbWUgVmFsdWVPcGVyYW5kVHlw
ZSwgdHlwZW5hbWUgVGFnVHlwZT4KLSAgICB2b2lkIGNvbXBpbGVDb250aWd1b3VzUHV0QnlWYWwo
Tm9kZSYsIEJhc2VPcGVyYW5kVHlwZSYsIFByb3BlcnR5T3BlcmFuZFR5cGUmLCBWYWx1ZU9wZXJh
bmRUeXBlJiwgR1BSUmVnIHZhbHVlUGF5bG9hZFJlZywgVGFnVHlwZSB2YWx1ZVRhZyk7CisgICAg
dm9pZCBjb21waWxlQ29udGlndW91c1B1dEJ5VmFsKE5vZGUqLCBCYXNlT3BlcmFuZFR5cGUmLCBQ
cm9wZXJ0eU9wZXJhbmRUeXBlJiwgVmFsdWVPcGVyYW5kVHlwZSYsIEdQUlJlZyB2YWx1ZVBheWxv
YWRSZWcsIFRhZ1R5cGUgdmFsdWVUYWcpOwogI2VuZGlmCi0gICAgdm9pZCBjb21waWxlRG91Ymxl
UHV0QnlWYWwoTm9kZSYsIFNwZWN1bGF0ZUNlbGxPcGVyYW5kJiBiYXNlLCBTcGVjdWxhdGVTdHJp
Y3RJbnQzMk9wZXJhbmQmIHByb3BlcnR5KTsKKyAgICB2b2lkIGNvbXBpbGVEb3VibGVQdXRCeVZh
bChOb2RlKiwgU3BlY3VsYXRlQ2VsbE9wZXJhbmQmIGJhc2UsIFNwZWN1bGF0ZVN0cmljdEludDMy
T3BlcmFuZCYgcHJvcGVydHkpOwogICAgIGJvb2wgcHV0QnlWYWxXaWxsTmVlZEV4dHJhUmVnaXN0
ZXIoQXJyYXlNb2RlIGFycmF5TW9kZSkKICAgICB7CiAgICAgICAgIHJldHVybiBhcnJheU1vZGUu
bWF5U3RvcmVUb0hvbGUoKTsKICAgICB9CiAgICAgR1BSUmVnIHRlbXBvcmFyeVJlZ2lzdGVyRm9y
UHV0QnlWYWwoR1BSVGVtcG9yYXJ5JiwgQXJyYXlNb2RlKTsKLSAgICBHUFJSZWcgdGVtcG9yYXJ5
UmVnaXN0ZXJGb3JQdXRCeVZhbChHUFJUZW1wb3JhcnkmIHRlbXBvcmFyeSwgTm9kZSYgbm9kZSkK
KyAgICBHUFJSZWcgdGVtcG9yYXJ5UmVnaXN0ZXJGb3JQdXRCeVZhbChHUFJUZW1wb3JhcnkmIHRl
bXBvcmFyeSwgTm9kZSogbm9kZSkKICAgICB7CiAgICAgICAgIHJldHVybiB0ZW1wb3JhcnlSZWdp
c3RlckZvclB1dEJ5VmFsKHRlbXBvcmFyeSwgbm9kZS5hcnJheU1vZGUoKSk7CiAgICAgfQogICAg
IAotICAgIHZvaWQgY29tcGlsZUdldENoYXJDb2RlQXQoTm9kZSYpOwotICAgIHZvaWQgY29tcGls
ZUdldEJ5VmFsT25TdHJpbmcoTm9kZSYpOworICAgIHZvaWQgY29tcGlsZUdldENoYXJDb2RlQXQo
Tm9kZSopOworICAgIHZvaWQgY29tcGlsZUdldEJ5VmFsT25TdHJpbmcoTm9kZSopOwogCi0gICAg
dm9pZCBjb21waWxlR2V0QnlWYWxPbkFyZ3VtZW50cyhOb2RlJik7Ci0gICAgdm9pZCBjb21waWxl
R2V0QXJndW1lbnRzTGVuZ3RoKE5vZGUmKTsKKyAgICB2b2lkIGNvbXBpbGVHZXRCeVZhbE9uQXJn
dW1lbnRzKE5vZGUqKTsKKyAgICB2b2lkIGNvbXBpbGVHZXRBcmd1bWVudHNMZW5ndGgoTm9kZSop
OwogICAgIAotICAgIHZvaWQgY29tcGlsZUdldEFycmF5TGVuZ3RoKE5vZGUmKTsKKyAgICB2b2lk
IGNvbXBpbGVHZXRBcnJheUxlbmd0aChOb2RlKik7CiAgICAgCi0gICAgdm9pZCBjb21waWxlVmFs
dWVUb0ludDMyKE5vZGUmKTsKLSAgICB2b2lkIGNvbXBpbGVVSW50MzJUb051bWJlcihOb2RlJik7
Ci0gICAgdm9pZCBjb21waWxlRG91YmxlQXNJbnQzMihOb2RlJik7Ci0gICAgdm9pZCBjb21waWxl
SW50MzJUb0RvdWJsZShOb2RlJik7Ci0gICAgdm9pZCBjb21waWxlQWRkKE5vZGUmKTsKLSAgICB2
b2lkIGNvbXBpbGVBcml0aFN1YihOb2RlJik7Ci0gICAgdm9pZCBjb21waWxlQXJpdGhOZWdhdGUo
Tm9kZSYpOwotICAgIHZvaWQgY29tcGlsZUFyaXRoTXVsKE5vZGUmKTsKKyAgICB2b2lkIGNvbXBp
bGVWYWx1ZVRvSW50MzIoTm9kZSopOworICAgIHZvaWQgY29tcGlsZVVJbnQzMlRvTnVtYmVyKE5v
ZGUqKTsKKyAgICB2b2lkIGNvbXBpbGVEb3VibGVBc0ludDMyKE5vZGUqKTsKKyAgICB2b2lkIGNv
bXBpbGVJbnQzMlRvRG91YmxlKE5vZGUqKTsKKyAgICB2b2lkIGNvbXBpbGVBZGQoTm9kZSopOwor
ICAgIHZvaWQgY29tcGlsZUFyaXRoU3ViKE5vZGUqKTsKKyAgICB2b2lkIGNvbXBpbGVBcml0aE5l
Z2F0ZShOb2RlKik7CisgICAgdm9pZCBjb21waWxlQXJpdGhNdWwoTm9kZSopOwogI2lmIENQVShY
ODYpIHx8IENQVShYODZfNjQpCi0gICAgdm9pZCBjb21waWxlSW50ZWdlckFyaXRoRGl2Rm9yWDg2
KE5vZGUmKTsKKyAgICB2b2lkIGNvbXBpbGVJbnRlZ2VyQXJpdGhEaXZGb3JYODYoTm9kZSopOwog
I2VuZGlmCi0gICAgdm9pZCBjb21waWxlQXJpdGhNb2QoTm9kZSYpOwotICAgIHZvaWQgY29tcGls
ZVNvZnRNb2R1bG8oTm9kZSYpOwotICAgIHZvaWQgY29tcGlsZUdldEluZGV4ZWRQcm9wZXJ0eVN0
b3JhZ2UoTm9kZSYpOwotICAgIHZvaWQgY29tcGlsZUdldEJ5VmFsT25JbnRUeXBlZEFycmF5KGNv
bnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yJiwgTm9kZSYsIHNpemVfdCBlbGVtZW50U2l6ZSwgVHlw
ZWRBcnJheVNpZ25lZG5lc3MpOwotICAgIHZvaWQgY29tcGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRB
cnJheShjb25zdCBUeXBlZEFycmF5RGVzY3JpcHRvciYsIEdQUlJlZyBiYXNlLCBHUFJSZWcgcHJv
cGVydHksIE5vZGUmLCBzaXplX3QgZWxlbWVudFNpemUsIFR5cGVkQXJyYXlTaWduZWRuZXNzLCBU
eXBlZEFycmF5Um91bmRpbmcgPSBUcnVuY2F0ZVJvdW5kaW5nKTsKLSAgICB2b2lkIGNvbXBpbGVH
ZXRCeVZhbE9uRmxvYXRUeXBlZEFycmF5KGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yJiwgTm9k
ZSYsIHNpemVfdCBlbGVtZW50U2l6ZSk7Ci0gICAgdm9pZCBjb21waWxlUHV0QnlWYWxGb3JGbG9h
dFR5cGVkQXJyYXkoY29uc3QgVHlwZWRBcnJheURlc2NyaXB0b3ImLCBHUFJSZWcgYmFzZSwgR1BS
UmVnIHByb3BlcnR5LCBOb2RlJiwgc2l6ZV90IGVsZW1lbnRTaXplKTsKLSAgICB2b2lkIGNvbXBp
bGVOZXdGdW5jdGlvbk5vQ2hlY2soTm9kZSYpOwotICAgIHZvaWQgY29tcGlsZU5ld0Z1bmN0aW9u
RXhwcmVzc2lvbihOb2RlJik7Ci0gICAgYm9vbCBjb21waWxlUmVnRXhwRXhlYyhOb2RlJik7Cisg
ICAgdm9pZCBjb21waWxlQXJpdGhNb2QoTm9kZSopOworICAgIHZvaWQgY29tcGlsZVNvZnRNb2R1
bG8oTm9kZSopOworICAgIHZvaWQgY29tcGlsZUdldEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2UoTm9k
ZSopOworICAgIHZvaWQgY29tcGlsZUdldEJ5VmFsT25JbnRUeXBlZEFycmF5KGNvbnN0IFR5cGVk
QXJyYXlEZXNjcmlwdG9yJiwgTm9kZSosIHNpemVfdCBlbGVtZW50U2l6ZSwgVHlwZWRBcnJheVNp
Z25lZG5lc3MpOworICAgIHZvaWQgY29tcGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJheShjb25z
dCBUeXBlZEFycmF5RGVzY3JpcHRvciYsIEdQUlJlZyBiYXNlLCBHUFJSZWcgcHJvcGVydHksIE5v
ZGUqLCBzaXplX3QgZWxlbWVudFNpemUsIFR5cGVkQXJyYXlTaWduZWRuZXNzLCBUeXBlZEFycmF5
Um91bmRpbmcgPSBUcnVuY2F0ZVJvdW5kaW5nKTsKKyAgICB2b2lkIGNvbXBpbGVHZXRCeVZhbE9u
RmxvYXRUeXBlZEFycmF5KGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yJiwgTm9kZSosIHNpemVf
dCBlbGVtZW50U2l6ZSk7CisgICAgdm9pZCBjb21waWxlUHV0QnlWYWxGb3JGbG9hdFR5cGVkQXJy
YXkoY29uc3QgVHlwZWRBcnJheURlc2NyaXB0b3ImLCBHUFJSZWcgYmFzZSwgR1BSUmVnIHByb3Bl
cnR5LCBOb2RlKiwgc2l6ZV90IGVsZW1lbnRTaXplKTsKKyAgICB2b2lkIGNvbXBpbGVOZXdGdW5j
dGlvbk5vQ2hlY2soTm9kZSopOworICAgIHZvaWQgY29tcGlsZU5ld0Z1bmN0aW9uRXhwcmVzc2lv
bihOb2RlKik7CisgICAgYm9vbCBjb21waWxlUmVnRXhwRXhlYyhOb2RlKik7CiAgICAgCiAgICAg
Ly8gc2l6ZSBjYW4gYmUgYW4gaW1tZWRpYXRlIG9yIGEgcmVnaXN0ZXIsIGFuZCBtdXN0IGJlIGlu
IGJ5dGVzLiBJZiBzaXplIGlzIGEgcmVnaXN0ZXIsCiAgICAgLy8gaXQgbXVzdCBiZSBhIGRpZmZl
cmVudCByZWdpc3RlciB0aGFuIHJlc3VsdEdQUi4gRW1pdHMgY29kZSB0aGF0IHBsYWNlIGEgcG9p
bnRlciB0bwpAQCAtMjEyMiwxMyArMjEwMiw2IEBAIHB1YmxpYzoKICAgICAgICAgCiAgICAgICAg
IG1faml0LmxvYWRQdHIoJmNvcGllZEFsbG9jYXRvci0+bV9jdXJyZW50UmVtYWluaW5nLCByZXN1
bHRHUFIpOwogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBzbG93UGF0aCA9IG1faml0LmJy
YW5jaFN1YlB0cihKSVRDb21waWxlcjo6U2lnbmVkLCBzaXplLCByZXN1bHRHUFIpOwotI2lmIDAK
LSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZG9uZSA9IG1faml0Lmp1bXAoKTsKLSAgICAg
ICAgc2xvd1BhdGgxLmxpbmsoJm1faml0KTsKLSAgICAgICAgbV9qaXQuYnJlYWtwb2ludCgpOwot
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBzbG93UGF0aCA9IG1faml0Lmp1bXAoKTsKLSAg
ICAgICAgZG9uZS5saW5rKCZtX2ppdCk7Ci0jZW5kaWYKICAgICAgICAgbV9qaXQuc3RvcmVQdHIo
cmVzdWx0R1BSLCAmY29waWVkQWxsb2NhdG9yLT5tX2N1cnJlbnRSZW1haW5pbmcpOwogICAgICAg
ICBtX2ppdC5uZWdQdHIocmVzdWx0R1BSKTsKICAgICAgICAgbV9qaXQuYWRkUHRyKEpJVENvbXBp
bGVyOjpBYnNvbHV0ZUFkZHJlc3MoJmNvcGllZEFsbG9jYXRvci0+bV9jdXJyZW50UGF5bG9hZEVu
ZCksIHJlc3VsdEdQUik7CkBAIC0yMTc5LDIzICsyMTUyLDIzIEBAIHB1YmxpYzoKICNlbmRpZgog
CiAgICAgLy8gQWRkIGEgc3BlY3VsYXRpb24gY2hlY2sgd2l0aG91dCBhZGRpdGlvbmFsIHJlY292
ZXJ5LgotICAgIHZvaWQgc3BlY3VsYXRpb25DaGVjayhFeGl0S2luZCwgSlNWYWx1ZVNvdXJjZSwg
Tm9kZUluZGV4LCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBqdW1wVG9GYWlsKTsKKyAgICB2b2lkIHNw
ZWN1bGF0aW9uQ2hlY2soRXhpdEtpbmQsIEpTVmFsdWVTb3VyY2UsIE5vZGUqLCBNYWNyb0Fzc2Vt
Ymxlcjo6SnVtcCBqdW1wVG9GYWlsKTsKICAgICB2b2lkIHNwZWN1bGF0aW9uQ2hlY2soRXhpdEtp
bmQsIEpTVmFsdWVTb3VyY2UsIEVkZ2UsIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGp1bXBUb0ZhaWwp
OwogICAgIC8vIEFkZCBhIHNwZWN1bGF0aW9uIGNoZWNrIHdpdGhvdXQgYWRkaXRpb25hbCByZWNv
dmVyeSwgYW5kIHdpdGggYSBwcm9taXNlIHRvIHN1cHBseSBhIGp1bXAgbGF0ZXIuCi0gICAgT1NS
RXhpdEp1bXBQbGFjZWhvbGRlciBzcGVjdWxhdGlvbkNoZWNrKEV4aXRLaW5kLCBKU1ZhbHVlU291
cmNlLCBOb2RlSW5kZXgpOworICAgIE9TUkV4aXRKdW1wUGxhY2Vob2xkZXIgc3BlY3VsYXRpb25D
aGVjayhFeGl0S2luZCwgSlNWYWx1ZVNvdXJjZSwgTm9kZSopOwogICAgIE9TUkV4aXRKdW1wUGxh
Y2Vob2xkZXIgc3BlY3VsYXRpb25DaGVjayhFeGl0S2luZCwgSlNWYWx1ZVNvdXJjZSwgRWRnZSk7
CiAgICAgLy8gQWRkIGEgc2V0IG9mIHNwZWN1bGF0aW9uIGNoZWNrcyB3aXRob3V0IGFkZGl0aW9u
YWwgcmVjb3ZlcnkuCi0gICAgdm9pZCBzcGVjdWxhdGlvbkNoZWNrKEV4aXRLaW5kLCBKU1ZhbHVl
U291cmNlLCBOb2RlSW5kZXgsIGNvbnN0IE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCYganVtcHNU
b0ZhaWwpOworICAgIHZvaWQgc3BlY3VsYXRpb25DaGVjayhFeGl0S2luZCwgSlNWYWx1ZVNvdXJj
ZSwgTm9kZSosIGNvbnN0IE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCYganVtcHNUb0ZhaWwpOwog
ICAgIHZvaWQgc3BlY3VsYXRpb25DaGVjayhFeGl0S2luZCwgSlNWYWx1ZVNvdXJjZSwgRWRnZSwg
Y29uc3QgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0JiBqdW1wc1RvRmFpbCk7CiAgICAgLy8gQWRk
IGEgc3BlY3VsYXRpb24gY2hlY2sgd2l0aCBhZGRpdGlvbmFsIHJlY292ZXJ5LgotICAgIHZvaWQg
c3BlY3VsYXRpb25DaGVjayhFeGl0S2luZCwgSlNWYWx1ZVNvdXJjZSwgTm9kZUluZGV4LCBNYWNy
b0Fzc2VtYmxlcjo6SnVtcCBqdW1wVG9GYWlsLCBjb25zdCBTcGVjdWxhdGlvblJlY292ZXJ5Jik7
CisgICAgdm9pZCBzcGVjdWxhdGlvbkNoZWNrKEV4aXRLaW5kLCBKU1ZhbHVlU291cmNlLCBOb2Rl
KiwgTWFjcm9Bc3NlbWJsZXI6Okp1bXAganVtcFRvRmFpbCwgY29uc3QgU3BlY3VsYXRpb25SZWNv
dmVyeSYpOwogICAgIHZvaWQgc3BlY3VsYXRpb25DaGVjayhFeGl0S2luZCwgSlNWYWx1ZVNvdXJj
ZSwgRWRnZSwgTWFjcm9Bc3NlbWJsZXI6Okp1bXAganVtcFRvRmFpbCwgY29uc3QgU3BlY3VsYXRp
b25SZWNvdmVyeSYpOwogICAgIC8vIFVzZSB0aGlzIGxpa2UgeW91IHdvdWxkIHVzZSBzcGVjdWxh
dGlvbkNoZWNrKCksIGV4Y2VwdCB0aGF0IHlvdSBkb24ndCBwYXNzIGl0IGEganVtcAogICAgIC8v
IChiZWNhdXNlIHlvdSBkb24ndCBoYXZlIHRvIGV4ZWN1dGUgYSBicmFuY2g7IHRoYXQncyBraW5k
IG9mIHRoZSB3aG9sZSBwb2ludCksIGFuZCB5b3UKICAgICAvLyBtdXN0IHJlZ2lzdGVyIHRoZSBy
ZXR1cm5lZCBXYXRjaHBvaW50IHdpdGggc29tZXRoaW5nIHJlbGV2YW50LiBJbiBnZW5lcmFsLCB0
aGlzIHNob3VsZAogICAgIC8vIGJlIHVzZWQgd2l0aCBleHRyZW1lIGNhcmUuIFVzZSBzcGVjdWxh
dGlvbkNoZWNrKCkgdW5sZXNzIHlvdSd2ZSBnb3QgYW4gYW1hemluZyByZWFzb24KICAgICAvLyBu
b3QgdG8uCi0gICAgSnVtcFJlcGxhY2VtZW50V2F0Y2hwb2ludCogc3BlY3VsYXRpb25XYXRjaHBv
aW50KEV4aXRLaW5kLCBKU1ZhbHVlU291cmNlLCBOb2RlSW5kZXgpOworICAgIEp1bXBSZXBsYWNl
bWVudFdhdGNocG9pbnQqIHNwZWN1bGF0aW9uV2F0Y2hwb2ludChFeGl0S2luZCwgSlNWYWx1ZVNv
dXJjZSwgTm9kZSopOwogICAgIC8vIFRoZSBkZWZhdWx0IGZvciBzcGVjdWxhdGlvbiB3YXRjaHBv
aW50cyBpcyB0aGF0IHRoZXkncmUgdW5jb3VudGVkLCBiZWNhdXNlIHRoZQogICAgIC8vIGFjdCBv
ZiBmaXJpbmcgYSB3YXRjaHBvaW50IGludmFsaWRhdGVzIGl0LiBTbywgZnV0dXJlIHJlY29tcGls
YXRpb25zIHdpbGwgbm90CiAgICAgLy8gYXR0ZW1wdCB0byBzZXQgdGhpcyB3YXRjaHBvaW50IGFn
YWluLgpAQCAtMjIwNiwxNCArMjE3OSwxNCBAQCBwdWJsaWM6CiAgICAgCiAgICAgLy8gTm90ZTog
bm90IHNwZWNpZnlpbmcgdGhlIHZhbHVlUmVjb3ZlcnkgYXJndW1lbnQgKGxlYXZpbmcgaXQgYXMg
VmFsdWVSZWNvdmVyeSgpKSBpbXBsaWVzCiAgICAgLy8gdGhhdCB5b3UndmUgZW5zdXJlZCB0aGF0
IHRoZXJlIGV4aXN0cyBhIE1vdkhpbnQgcHJpb3IgdG8geW91ciB1c2Ugb2YgZm9yd2FyZFNwZWN1
bGF0aW9uQ2hlY2soKS4KLSAgICB2b2lkIGZvcndhcmRTcGVjdWxhdGlvbkNoZWNrKEV4aXRLaW5k
LCBKU1ZhbHVlU291cmNlLCBOb2RlSW5kZXgsIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGp1bXBUb0Zh
aWwsIGNvbnN0IFZhbHVlUmVjb3ZlcnkmID0gVmFsdWVSZWNvdmVyeSgpKTsKLSAgICB2b2lkIGZv
cndhcmRTcGVjdWxhdGlvbkNoZWNrKEV4aXRLaW5kLCBKU1ZhbHVlU291cmNlLCBOb2RlSW5kZXgs
IGNvbnN0IE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCYganVtcHNUb0ZhaWwsIGNvbnN0IFZhbHVl
UmVjb3ZlcnkmID0gVmFsdWVSZWNvdmVyeSgpKTsKLSAgICB2b2lkIHNwZWN1bGF0aW9uQ2hlY2so
RXhpdEtpbmQsIEpTVmFsdWVTb3VyY2UsIE5vZGVJbmRleCwgTWFjcm9Bc3NlbWJsZXI6Okp1bXAg
anVtcFRvRmFpbCwgU3BlY3VsYXRpb25EaXJlY3Rpb24pOwotICAgIHZvaWQgc3BlY3VsYXRpb25D
aGVjayhFeGl0S2luZCwgSlNWYWx1ZVNvdXJjZSwgTm9kZUluZGV4LCBNYWNyb0Fzc2VtYmxlcjo6
SnVtcCBqdW1wVG9GYWlsLCBjb25zdCBTcGVjdWxhdGlvblJlY292ZXJ5JiwgU3BlY3VsYXRpb25E
aXJlY3Rpb24pOworICAgIHZvaWQgZm9yd2FyZFNwZWN1bGF0aW9uQ2hlY2soRXhpdEtpbmQsIEpT
VmFsdWVTb3VyY2UsIE5vZGUqLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBqdW1wVG9GYWlsLCBjb25z
dCBWYWx1ZVJlY292ZXJ5JiA9IFZhbHVlUmVjb3ZlcnkoKSk7CisgICAgdm9pZCBmb3J3YXJkU3Bl
Y3VsYXRpb25DaGVjayhFeGl0S2luZCwgSlNWYWx1ZVNvdXJjZSwgTm9kZSosIGNvbnN0IE1hY3Jv
QXNzZW1ibGVyOjpKdW1wTGlzdCYganVtcHNUb0ZhaWwsIGNvbnN0IFZhbHVlUmVjb3ZlcnkmID0g
VmFsdWVSZWNvdmVyeSgpKTsKKyAgICB2b2lkIHNwZWN1bGF0aW9uQ2hlY2soRXhpdEtpbmQsIEpT
VmFsdWVTb3VyY2UsIE5vZGUqLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBqdW1wVG9GYWlsLCBTcGVj
dWxhdGlvbkRpcmVjdGlvbik7CisgICAgdm9pZCBzcGVjdWxhdGlvbkNoZWNrKEV4aXRLaW5kLCBK
U1ZhbHVlU291cmNlLCBOb2RlKiwgTWFjcm9Bc3NlbWJsZXI6Okp1bXAganVtcFRvRmFpbCwgY29u
c3QgU3BlY3VsYXRpb25SZWNvdmVyeSYsIFNwZWN1bGF0aW9uRGlyZWN0aW9uKTsKICAgICAvLyBD
YWxsZWQgd2hlbiB3ZSBzdGF0aWNhbGx5IGRldGVybWluZSB0aGF0IGEgc3BlY3VsYXRpb24gd2ls
bCBmYWlsLgotICAgIHZvaWQgdGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oRXhpdEtpbmQs
IEpTVmFsdWVSZWdzLCBOb2RlSW5kZXgpOworICAgIHZvaWQgdGVybWluYXRlU3BlY3VsYXRpdmVF
eGVjdXRpb24oRXhpdEtpbmQsIEpTVmFsdWVSZWdzLCBOb2RlKik7CiAgICAgdm9pZCB0ZXJtaW5h
dGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihFeGl0S2luZCwgSlNWYWx1ZVJlZ3MsIEVkZ2UpOwotICAg
IHZvaWQgdGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oRXhpdEtpbmQsIEpTVmFsdWVSZWdz
LCBOb2RlSW5kZXgsIFNwZWN1bGF0aW9uRGlyZWN0aW9uKTsKKyAgICB2b2lkIHRlcm1pbmF0ZVNw
ZWN1bGF0aXZlRXhlY3V0aW9uKEV4aXRLaW5kLCBKU1ZhbHVlUmVncywgTm9kZSosIFNwZWN1bGF0
aW9uRGlyZWN0aW9uKTsKICAgICAvLyBJc3N1ZSBhIGZvcndhcmQgc3BlY3VsYXRpb24gd2F0Y2hw
b2ludCwgd2hpY2ggd2lsbCBleGl0IHRvIHRoZSBuZXh0IGluc3RydWN0aW9uIHJhdGhlcgogICAg
IC8vIHRoYW4gdGhlIGN1cnJlbnQgb25lLgogICAgIEp1bXBSZXBsYWNlbWVudFdhdGNocG9pbnQq
IGZvcndhcmRTcGVjdWxhdGlvbldhdGNocG9pbnQoRXhpdEtpbmQgPSBVbmNvdW50YWJsZVdhdGNo
cG9pbnQpOwpAQCAtMjIyMywxMiArMjE5NiwxMiBAQCBwdWJsaWM6CiAgICAgCiAgICAgSklUQ29t
cGlsZXI6Okp1bXAganVtcFNsb3dGb3JVbndhbnRlZEFycmF5TW9kZShHUFJSZWcgdGVtcFdpdGhJ
bmRleGluZ1R5cGVSZWcsIEFycmF5TW9kZSwgSW5kZXhpbmdUeXBlLCBib29sIGludmVydCk7CiAg
ICAgSklUQ29tcGlsZXI6Okp1bXBMaXN0IGp1bXBTbG93Rm9yVW53YW50ZWRBcnJheU1vZGUoR1BS
UmVnIHRlbXBXaXRoSW5kZXhpbmdUeXBlUmVnLCBBcnJheU1vZGUsIGJvb2wgaW52ZXJ0ID0gZmFs
c2UpOwotICAgIHZvaWQgY2hlY2tBcnJheShOb2RlJik7Ci0gICAgdm9pZCBhcnJheWlmeShOb2Rl
JiwgR1BSUmVnIGJhc2VSZWcsIEdQUlJlZyBwcm9wZXJ0eVJlZyk7Ci0gICAgdm9pZCBhcnJheWlm
eShOb2RlJik7CisgICAgdm9pZCBjaGVja0FycmF5KE5vZGUqKTsKKyAgICB2b2lkIGFycmF5aWZ5
KE5vZGUqLCBHUFJSZWcgYmFzZVJlZywgR1BSUmVnIHByb3BlcnR5UmVnKTsKKyAgICB2b2lkIGFy
cmF5aWZ5KE5vZGUqKTsKICAgICAKICAgICB0ZW1wbGF0ZTxib29sIHN0cmljdD4KLSAgICBHUFJS
ZWcgZmlsbFNwZWN1bGF0ZUludEludGVybmFsKE5vZGVJbmRleCwgRGF0YUZvcm1hdCYgcmV0dXJu
Rm9ybWF0LCBTcGVjdWxhdGlvbkRpcmVjdGlvbik7CisgICAgR1BSUmVnIGZpbGxTcGVjdWxhdGVJ
bnRJbnRlcm5hbChOb2RlKiwgRGF0YUZvcm1hdCYgcmV0dXJuRm9ybWF0LCBTcGVjdWxhdGlvbkRp
cmVjdGlvbik7CiAgICAgCiAgICAgLy8gSXQgaXMgcG9zc2libGUsIGR1cmluZyBzcGVjdWxhdGl2
ZSBnZW5lcmF0aW9uLCB0byByZWFjaCBhIHNpdHVhdGlvbiBpbiB3aGljaCB3ZQogICAgIC8vIGNh
biBzdGF0aWNhbGx5IGRldGVybWluZSBhIHNwZWN1bGF0aW9uIHdpbGwgZmFpbCAoZm9yIGV4YW1w
bGUsIHdoZW4gdHdvIG5vZGVzCkBAIC0yMjQ0LDkgKzIyMTcsOSBAQCBwdWJsaWM6CiAgICAgICAg
IHJldHVybiB2YWx1ZVNvdXJjZVJlZmVyZW5jZUZvck9wZXJhbmQob3BlcmFuZCk7CiAgICAgfQog
ICAgIAotICAgIHZvaWQgc2V0Tm9kZUluZGV4Rm9yT3BlcmFuZChOb2RlSW5kZXggbm9kZUluZGV4
LCBpbnQgb3BlcmFuZCkKKyAgICB2b2lkIHNldE5vZGVGb3JPcGVyYW5kKE5vZGUqIG5vZGUsIGlu
dCBvcGVyYW5kKQogICAgIHsKLSAgICAgICAgdmFsdWVTb3VyY2VSZWZlcmVuY2VGb3JPcGVyYW5k
KG9wZXJhbmQpID0gVmFsdWVTb3VyY2UoTWluaWZpZWRJRChub2RlSW5kZXgpKTsKKyAgICAgICAg
dmFsdWVTb3VyY2VSZWZlcmVuY2VGb3JPcGVyYW5kKG9wZXJhbmQpID0gVmFsdWVTb3VyY2UoTWlu
aWZpZWRJRChub2RlKSk7CiAgICAgfQogICAgIAogICAgIC8vIENhbGwgdGhpcyB3aXRoIGNhcmUs
IHNpbmNlIGl0IGJvdGggcmV0dXJucyBhIHJlZmVyZW5jZSBpbnRvIGFuIGFycmF5CkBAIC0yMjc3
LDcgKzIyNTAsNyBAQCBwdWJsaWM6CiAKICAgICAvLyBUaGUgY3VycmVudCBub2RlIGJlaW5nIGdl
bmVyYXRlZC4KICAgICBCbG9ja0luZGV4IG1fYmxvY2s7Ci0gICAgTm9kZUluZGV4IG1fY29tcGls
ZUluZGV4OworICAgIE5vZGUqIG1fY3VycmVudE5vZGU7CiAgICAgdW5zaWduZWQgbV9pbmRleElu
QmxvY2s7CiAgICAgLy8gVmlydHVhbCBhbmQgcGh5c2ljYWwgcmVnaXN0ZXIgbWFwcy4KICAgICBW
ZWN0b3I8R2VuZXJhdGlvbkluZm8sIDMyPiBtX2dlbmVyYXRpb25JbmZvOwpAQCAtMjMzOCw3ICsy
MzExLDcgQEAgY2xhc3MgSW50ZWdlck9wZXJhbmQgewogcHVibGljOgogICAgIGV4cGxpY2l0IElu
dGVnZXJPcGVyYW5kKFNwZWN1bGF0aXZlSklUKiBqaXQsIEVkZ2UgdXNlKQogICAgICAgICA6IG1f
aml0KGppdCkKLSAgICAgICAgLCBtX2luZGV4KHVzZS5pbmRleCgpKQorICAgICAgICAsIG1fbm9k
ZSh1c2Uubm9kZSgpKQogICAgICAgICAsIG1fZ3ByT3JJbnZhbGlkKEludmFsaWRHUFJSZWcpCiAj
aWZuZGVmIE5ERUJVRwogICAgICAgICAsIG1fZm9ybWF0KERhdGFGb3JtYXROb25lKQpAQCAtMjM0
Niw3ICsyMzE5LDcgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgQVNTRVJUKG1faml0KTsKICAg
ICAgICAgQVNTRVJUKHVzZS51c2VLaW5kKCkgIT0gRG91YmxlVXNlKTsKLSAgICAgICAgaWYgKGpp
dC0+aXNGaWxsZWQobV9pbmRleCkpCisgICAgICAgIGlmIChqaXQtPmlzRmlsbGVkKG1fbm9kZSkp
CiAgICAgICAgICAgICBncHIoKTsKICAgICB9CiAKQEAgLTIzNTYsOSArMjMyOSw5IEBAIHB1Ymxp
YzoKICAgICAgICAgbV9qaXQtPnVubG9jayhtX2dwck9ySW52YWxpZCk7CiAgICAgfQogCi0gICAg
Tm9kZUluZGV4IGluZGV4KCkgY29uc3QKKyAgICBOb2RlKiBub2RlKCkgY29uc3QKICAgICB7Ci0g
ICAgICAgIHJldHVybiBtX2luZGV4OworICAgICAgICByZXR1cm4gbV9ub2RlOwogICAgIH0KIAog
ICAgIERhdGFGb3JtYXQgZm9ybWF0KCkKQEAgLTIzNzEsMTggKzIzNDQsMTggQEAgcHVibGljOgog
ICAgIEdQUlJlZyBncHIoKQogICAgIHsKICAgICAgICAgaWYgKG1fZ3ByT3JJbnZhbGlkID09IElu
dmFsaWRHUFJSZWcpCi0gICAgICAgICAgICBtX2dwck9ySW52YWxpZCA9IG1faml0LT5maWxsSW50
ZWdlcihpbmRleCgpLCBtX2Zvcm1hdCk7CisgICAgICAgICAgICBtX2dwck9ySW52YWxpZCA9IG1f
aml0LT5maWxsSW50ZWdlcihub2RlKCksIG1fZm9ybWF0KTsKICAgICAgICAgcmV0dXJuIG1fZ3By
T3JJbnZhbGlkOwogICAgIH0KICAgICAKICAgICB2b2lkIHVzZSgpCiAgICAgewotICAgICAgICBt
X2ppdC0+dXNlKG1faW5kZXgpOworICAgICAgICBtX2ppdC0+dXNlKG1fbm9kZSk7CiAgICAgfQog
CiBwcml2YXRlOgogICAgIFNwZWN1bGF0aXZlSklUKiBtX2ppdDsKLSAgICBOb2RlSW5kZXggbV9p
bmRleDsKKyAgICBOb2RlKiBtX25vZGU7CiAgICAgR1BSUmVnIG1fZ3ByT3JJbnZhbGlkOwogICAg
IERhdGFGb3JtYXQgbV9mb3JtYXQ7CiB9OwpAQCAtMjM5MSw3ICsyMzY0LDcgQEAgY2xhc3MgRG91
YmxlT3BlcmFuZCB7CiBwdWJsaWM6CiAgICAgZXhwbGljaXQgRG91YmxlT3BlcmFuZChTcGVjdWxh
dGl2ZUpJVCogaml0LCBFZGdlIHVzZSkKICAgICAgICAgOiBtX2ppdChqaXQpCi0gICAgICAgICwg
bV9pbmRleCh1c2UuaW5kZXgoKSkKKyAgICAgICAgLCBtX25vZGUodXNlLm5vZGUoKSkKICAgICAg
ICAgLCBtX2Zwck9ySW52YWxpZChJbnZhbGlkRlBSUmVnKQogICAgIHsKICAgICAgICAgQVNTRVJU
KG1faml0KTsKQEAgLTI0MDQsNyArMjM3Nyw3IEBAIHB1YmxpYzoKICAgICAgICAgLy8gaXMgbm90
IG9uZSBhbHJlYWR5LgogICAgICAgICBBU1NFUlQodXNlLnVzZUtpbmQoKSAhPSBEb3VibGVVc2Up
OwogICAgICAgICAKLSAgICAgICAgaWYgKGppdC0+aXNGaWxsZWREb3VibGUobV9pbmRleCkpCisg
ICAgICAgIGlmIChqaXQtPmlzRmlsbGVkRG91YmxlKG1fbm9kZSkpCiAgICAgICAgICAgICBmcHIo
KTsKICAgICB9CiAKQEAgLTI0MTQsMjYgKzIzODcsMjYgQEAgcHVibGljOgogICAgICAgICBtX2pp
dC0+dW5sb2NrKG1fZnByT3JJbnZhbGlkKTsKICAgICB9CiAKLSAgICBOb2RlSW5kZXggaW5kZXgo
KSBjb25zdAorICAgIE5vZGUqIG5vZGUoKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIG1f
aW5kZXg7CisgICAgICAgIHJldHVybiBtX25vZGU7CiAgICAgfQogCiAgICAgRlBSUmVnIGZwcigp
CiAgICAgewogICAgICAgICBpZiAobV9mcHJPckludmFsaWQgPT0gSW52YWxpZEZQUlJlZykKLSAg
ICAgICAgICAgIG1fZnByT3JJbnZhbGlkID0gbV9qaXQtPmZpbGxEb3VibGUoaW5kZXgoKSk7Cisg
ICAgICAgICAgICBtX2Zwck9ySW52YWxpZCA9IG1faml0LT5maWxsRG91YmxlKG5vZGUoKSk7CiAg
ICAgICAgIHJldHVybiBtX2Zwck9ySW52YWxpZDsKICAgICB9CiAgICAgCiAgICAgdm9pZCB1c2Uo
KQogICAgIHsKLSAgICAgICAgbV9qaXQtPnVzZShtX2luZGV4KTsKKyAgICAgICAgbV9qaXQtPnVz
ZShtX25vZGUpOwogICAgIH0KIAogcHJpdmF0ZToKICAgICBTcGVjdWxhdGl2ZUpJVCogbV9qaXQ7
Ci0gICAgTm9kZUluZGV4IG1faW5kZXg7CisgICAgTm9kZSogbV9ub2RlOwogICAgIEZQUlJlZyBt
X2Zwck9ySW52YWxpZDsKIH07CiAKQEAgLTI0NDEsNyArMjQxNCw3IEBAIGNsYXNzIEpTVmFsdWVP
cGVyYW5kIHsKIHB1YmxpYzoKICAgICBleHBsaWNpdCBKU1ZhbHVlT3BlcmFuZChTcGVjdWxhdGl2
ZUpJVCogaml0LCBFZGdlIHVzZSkKICAgICAgICAgOiBtX2ppdChqaXQpCi0gICAgICAgICwgbV9p
bmRleCh1c2UuaW5kZXgoKSkKKyAgICAgICAgLCBtX25vZGUodXNlLm5vZGUoKSkKICNpZiBVU0Uo
SlNWQUxVRTY0KQogICAgICAgICAsIG1fZ3ByT3JJbnZhbGlkKEludmFsaWRHUFJSZWcpCiAjZWxp
ZiBVU0UoSlNWQUxVRTMyXzY0KQpAQCAtMjQ1MSwxMiArMjQyNCwxMiBAQCBwdWJsaWM6CiAgICAg
ICAgIEFTU0VSVChtX2ppdCk7CiAgICAgICAgIEFTU0VSVCh1c2UudXNlS2luZCgpICE9IERvdWJs
ZVVzZSk7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgaWYgKGppdC0+aXNGaWxsZWQobV9p
bmRleCkpCisgICAgICAgIGlmIChqaXQtPmlzRmlsbGVkKG1fbm9kZSkpCiAgICAgICAgICAgICBn
cHIoKTsKICNlbGlmIFVTRShKU1ZBTFVFMzJfNjQpCiAgICAgICAgIG1fcmVnaXN0ZXIucGFpci50
YWdHUFIgPSBJbnZhbGlkR1BSUmVnOwogICAgICAgICBtX3JlZ2lzdGVyLnBhaXIucGF5bG9hZEdQ
UiA9IEludmFsaWRHUFJSZWc7Ci0gICAgICAgIGlmIChqaXQtPmlzRmlsbGVkKG1faW5kZXgpKQor
ICAgICAgICBpZiAoaml0LT5pc0ZpbGxlZChtX25vZGUpKQogICAgICAgICAgICAgZmlsbCgpOwog
I2VuZGlmCiAgICAgfQpAQCAtMjQ3OCwxNiArMjQ1MSwxNiBAQCBwdWJsaWM6CiAjZW5kaWYKICAg
ICB9CiAKLSAgICBOb2RlSW5kZXggaW5kZXgoKSBjb25zdAorICAgIE5vZGUqIG5vZGUoKSBjb25z
dAogICAgIHsKLSAgICAgICAgcmV0dXJuIG1faW5kZXg7CisgICAgICAgIHJldHVybiBtX25vZGU7
CiAgICAgfQogCiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICBHUFJSZWcgZ3ByKCkKICAgICB7CiAg
ICAgICAgIGlmIChtX2dwck9ySW52YWxpZCA9PSBJbnZhbGlkR1BSUmVnKQotICAgICAgICAgICAg
bV9ncHJPckludmFsaWQgPSBtX2ppdC0+ZmlsbEpTVmFsdWUoaW5kZXgoKSk7CisgICAgICAgICAg
ICBtX2dwck9ySW52YWxpZCA9IG1faml0LT5maWxsSlNWYWx1ZShub2RlKCkpOwogICAgICAgICBy
ZXR1cm4gbV9ncHJPckludmFsaWQ7CiAgICAgfQogICAgIEpTVmFsdWVSZWdzIGpzVmFsdWVSZWdz
KCkKQEAgLTI1MDAsNyArMjQ3Myw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGZpbGwoKQogICAgIHsK
ICAgICAgICAgaWYgKG1fcmVnaXN0ZXIucGFpci50YWdHUFIgPT0gSW52YWxpZEdQUlJlZyAmJiBt
X3JlZ2lzdGVyLnBhaXIucGF5bG9hZEdQUiA9PSBJbnZhbGlkR1BSUmVnKQotICAgICAgICAgICAg
bV9pc0RvdWJsZSA9ICFtX2ppdC0+ZmlsbEpTVmFsdWUoaW5kZXgoKSwgbV9yZWdpc3Rlci5wYWly
LnRhZ0dQUiwgbV9yZWdpc3Rlci5wYWlyLnBheWxvYWRHUFIsIG1fcmVnaXN0ZXIuZnByKTsKKyAg
ICAgICAgICAgIG1faXNEb3VibGUgPSAhbV9qaXQtPmZpbGxKU1ZhbHVlKG5vZGUoKSwgbV9yZWdp
c3Rlci5wYWlyLnRhZ0dQUiwgbV9yZWdpc3Rlci5wYWlyLnBheWxvYWRHUFIsIG1fcmVnaXN0ZXIu
ZnByKTsKICAgICB9CiAKICAgICBHUFJSZWcgdGFnR1BSKCkKQEAgLTI1MzIsMTIgKzI1MDUsMTIg
QEAgcHVibGljOgogCiAgICAgdm9pZCB1c2UoKQogICAgIHsKLSAgICAgICAgbV9qaXQtPnVzZSht
X2luZGV4KTsKKyAgICAgICAgbV9qaXQtPnVzZShtX25vZGUpOwogICAgIH0KIAogcHJpdmF0ZToK
ICAgICBTcGVjdWxhdGl2ZUpJVCogbV9qaXQ7Ci0gICAgTm9kZUluZGV4IG1faW5kZXg7CisgICAg
Tm9kZSogbV9ub2RlOwogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgR1BSUmVnIG1fZ3ByT3JJbnZh
bGlkOwogI2VsaWYgVVNFKEpTVkFMVUUzMl82NCkKQEAgLTI1NTYsMTIgKzI1MjksMTIgQEAgY2xh
c3MgU3RvcmFnZU9wZXJhbmQgewogcHVibGljOgogICAgIGV4cGxpY2l0IFN0b3JhZ2VPcGVyYW5k
KFNwZWN1bGF0aXZlSklUKiBqaXQsIEVkZ2UgdXNlKQogICAgICAgICA6IG1faml0KGppdCkKLSAg
ICAgICAgLCBtX2luZGV4KHVzZS5pbmRleCgpKQorICAgICAgICAsIG1fbm9kZSh1c2Uubm9kZSgp
KQogICAgICAgICAsIG1fZ3ByT3JJbnZhbGlkKEludmFsaWRHUFJSZWcpCiAgICAgewogICAgICAg
ICBBU1NFUlQobV9qaXQpOwogICAgICAgICBBU1NFUlQodXNlLnVzZUtpbmQoKSAhPSBEb3VibGVV
c2UpOwotICAgICAgICBpZiAoaml0LT5pc0ZpbGxlZChtX2luZGV4KSkKKyAgICAgICAgaWYgKGpp
dC0+aXNGaWxsZWQobV9ub2RlKSkKICAgICAgICAgICAgIGdwcigpOwogICAgIH0KICAgICAKQEAg
LTI1NzEsMjYgKzI1NDQsMjYgQEAgcHVibGljOgogICAgICAgICBtX2ppdC0+dW5sb2NrKG1fZ3By
T3JJbnZhbGlkKTsKICAgICB9CiAgICAgCi0gICAgTm9kZUluZGV4IGluZGV4KCkgY29uc3QKKyAg
ICBOb2RlKiBub2RlKCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBtX2luZGV4OworICAg
ICAgICByZXR1cm4gbV9ub2RlOwogICAgIH0KICAgICAKICAgICBHUFJSZWcgZ3ByKCkKICAgICB7
CiAgICAgICAgIGlmIChtX2dwck9ySW52YWxpZCA9PSBJbnZhbGlkR1BSUmVnKQotICAgICAgICAg
ICAgbV9ncHJPckludmFsaWQgPSBtX2ppdC0+ZmlsbFN0b3JhZ2UoaW5kZXgoKSk7CisgICAgICAg
ICAgICBtX2dwck9ySW52YWxpZCA9IG1faml0LT5maWxsU3RvcmFnZShub2RlKCkpOwogICAgICAg
ICByZXR1cm4gbV9ncHJPckludmFsaWQ7CiAgICAgfQogICAgIAogICAgIHZvaWQgdXNlKCkKICAg
ICB7Ci0gICAgICAgIG1faml0LT51c2UobV9pbmRleCk7CisgICAgICAgIG1faml0LT51c2UobV9u
b2RlKTsKICAgICB9CiAgICAgCiBwcml2YXRlOgogICAgIFNwZWN1bGF0aXZlSklUKiBtX2ppdDsK
LSAgICBOb2RlSW5kZXggbV9pbmRleDsKKyAgICBOb2RlKiBtX25vZGU7CiAgICAgR1BSUmVnIG1f
Z3ByT3JJbnZhbGlkOwogfTsKIApAQCAtMjcyNiw3ICsyNjk5LDcgQEAgY2xhc3MgU3BlY3VsYXRl
SW50ZWdlck9wZXJhbmQgewogcHVibGljOgogICAgIGV4cGxpY2l0IFNwZWN1bGF0ZUludGVnZXJP
cGVyYW5kKFNwZWN1bGF0aXZlSklUKiBqaXQsIEVkZ2UgdXNlLCBTcGVjdWxhdGlvbkRpcmVjdGlv
biBkaXJlY3Rpb24gPSBCYWNrd2FyZFNwZWN1bGF0aW9uKQogICAgICAgICA6IG1faml0KGppdCkK
LSAgICAgICAgLCBtX2luZGV4KHVzZS5pbmRleCgpKQorICAgICAgICAsIG1fbm9kZSh1c2Uubm9k
ZSgpKQogICAgICAgICAsIG1fZ3ByT3JJbnZhbGlkKEludmFsaWRHUFJSZWcpCiAjaWZuZGVmIE5E
RUJVRwogICAgICAgICAsIG1fZm9ybWF0KERhdGFGb3JtYXROb25lKQpAQCAtMjczNSw3ICsyNzA4
LDcgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgQVNTRVJUKG1faml0KTsKICAgICAgICAgQVNT
RVJUKHVzZS51c2VLaW5kKCkgIT0gRG91YmxlVXNlKTsKLSAgICAgICAgaWYgKGppdC0+aXNGaWxs
ZWQobV9pbmRleCkpCisgICAgICAgIGlmIChqaXQtPmlzRmlsbGVkKG1fbm9kZSkpCiAgICAgICAg
ICAgICBncHIoKTsKICAgICB9CiAKQEAgLTI3NDUsOSArMjcxOCw5IEBAIHB1YmxpYzoKICAgICAg
ICAgbV9qaXQtPnVubG9jayhtX2dwck9ySW52YWxpZCk7CiAgICAgfQogCi0gICAgTm9kZUluZGV4
IGluZGV4KCkgY29uc3QKKyAgICBOb2RlKiBub2RlKCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJl
dHVybiBtX2luZGV4OworICAgICAgICByZXR1cm4gbV9ub2RlOwogICAgIH0KIAogICAgIERhdGFG
b3JtYXQgZm9ybWF0KCkKQEAgLTI3NjAsMTggKzI3MzMsMTggQEAgcHVibGljOgogICAgIEdQUlJl
ZyBncHIoKQogICAgIHsKICAgICAgICAgaWYgKG1fZ3ByT3JJbnZhbGlkID09IEludmFsaWRHUFJS
ZWcpCi0gICAgICAgICAgICBtX2dwck9ySW52YWxpZCA9IG1faml0LT5maWxsU3BlY3VsYXRlSW50
KGluZGV4KCksIG1fZm9ybWF0LCBtX2RpcmVjdGlvbik7CisgICAgICAgICAgICBtX2dwck9ySW52
YWxpZCA9IG1faml0LT5maWxsU3BlY3VsYXRlSW50KG5vZGUoKSwgbV9mb3JtYXQsIG1fZGlyZWN0
aW9uKTsKICAgICAgICAgcmV0dXJuIG1fZ3ByT3JJbnZhbGlkOwogICAgIH0KICAgICAKICAgICB2
b2lkIHVzZSgpCiAgICAgewotICAgICAgICBtX2ppdC0+dXNlKG1faW5kZXgpOworICAgICAgICBt
X2ppdC0+dXNlKG1fbm9kZSk7CiAgICAgfQogCiBwcml2YXRlOgogICAgIFNwZWN1bGF0aXZlSklU
KiBtX2ppdDsKLSAgICBOb2RlSW5kZXggbV9pbmRleDsKKyAgICBOb2RlKiBtX25vZGU7CiAgICAg
R1BSUmVnIG1fZ3ByT3JJbnZhbGlkOwogICAgIERhdGFGb3JtYXQgbV9mb3JtYXQ7CiAgICAgU3Bl
Y3VsYXRpb25EaXJlY3Rpb24gbV9kaXJlY3Rpb247CkBAIC0yNzgxLDEyICsyNzU0LDEyIEBAIGNs
YXNzIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCB7CiBwdWJsaWM6CiAgICAgZXhwbGljaXQg
U3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kKFNwZWN1bGF0aXZlSklUKiBqaXQsIEVkZ2UgdXNl
KQogICAgICAgICA6IG1faml0KGppdCkKLSAgICAgICAgLCBtX2luZGV4KHVzZS5pbmRleCgpKQor
ICAgICAgICAsIG1fbm9kZSh1c2Uubm9kZSgpKQogICAgICAgICAsIG1fZ3ByT3JJbnZhbGlkKElu
dmFsaWRHUFJSZWcpCiAgICAgewogICAgICAgICBBU1NFUlQobV9qaXQpOwogICAgICAgICBBU1NF
UlQodXNlLnVzZUtpbmQoKSAhPSBEb3VibGVVc2UpOwotICAgICAgICBpZiAoaml0LT5pc0ZpbGxl
ZChtX2luZGV4KSkKKyAgICAgICAgaWYgKGppdC0+aXNGaWxsZWQobV9ub2RlKSkKICAgICAgICAg
ICAgIGdwcigpOwogICAgIH0KIApAQCAtMjc5NiwyNiArMjc2OSwyNiBAQCBwdWJsaWM6CiAgICAg
ICAgIG1faml0LT51bmxvY2sobV9ncHJPckludmFsaWQpOwogICAgIH0KIAotICAgIE5vZGVJbmRl
eCBpbmRleCgpIGNvbnN0CisgICAgTm9kZSogbm9kZSgpIGNvbnN0CiAgICAgewotICAgICAgICBy
ZXR1cm4gbV9pbmRleDsKKyAgICAgICAgcmV0dXJuIG1fbm9kZTsKICAgICB9CiAKICAgICBHUFJS
ZWcgZ3ByKCkKICAgICB7CiAgICAgICAgIGlmIChtX2dwck9ySW52YWxpZCA9PSBJbnZhbGlkR1BS
UmVnKQotICAgICAgICAgICAgbV9ncHJPckludmFsaWQgPSBtX2ppdC0+ZmlsbFNwZWN1bGF0ZUlu
dFN0cmljdChpbmRleCgpKTsKKyAgICAgICAgICAgIG1fZ3ByT3JJbnZhbGlkID0gbV9qaXQtPmZp
bGxTcGVjdWxhdGVJbnRTdHJpY3Qobm9kZSgpKTsKICAgICAgICAgcmV0dXJuIG1fZ3ByT3JJbnZh
bGlkOwogICAgIH0KICAgICAKICAgICB2b2lkIHVzZSgpCiAgICAgewotICAgICAgICBtX2ppdC0+
dXNlKG1faW5kZXgpOworICAgICAgICBtX2ppdC0+dXNlKG1fbm9kZSk7CiAgICAgfQogCiBwcml2
YXRlOgogICAgIFNwZWN1bGF0aXZlSklUKiBtX2ppdDsKLSAgICBOb2RlSW5kZXggbV9pbmRleDsK
KyAgICBOb2RlKiBtX25vZGU7CiAgICAgR1BSUmVnIG1fZ3ByT3JJbnZhbGlkOwogfTsKIApAQCAt
MjgyMywxMyArMjc5NiwxMyBAQCBjbGFzcyBTcGVjdWxhdGVEb3VibGVPcGVyYW5kIHsKIHB1Ymxp
YzoKICAgICBleHBsaWNpdCBTcGVjdWxhdGVEb3VibGVPcGVyYW5kKFNwZWN1bGF0aXZlSklUKiBq
aXQsIEVkZ2UgdXNlLCBTcGVjdWxhdGlvbkRpcmVjdGlvbiBkaXJlY3Rpb24gPSBCYWNrd2FyZFNw
ZWN1bGF0aW9uKQogICAgICAgICA6IG1faml0KGppdCkKLSAgICAgICAgLCBtX2luZGV4KHVzZS5p
bmRleCgpKQorICAgICAgICAsIG1fbm9kZSh1c2Uubm9kZSgpKQogICAgICAgICAsIG1fZnByT3JJ
bnZhbGlkKEludmFsaWRGUFJSZWcpCiAgICAgICAgICwgbV9kaXJlY3Rpb24oZGlyZWN0aW9uKQog
ICAgIHsKICAgICAgICAgQVNTRVJUKG1faml0KTsKICAgICAgICAgQVNTRVJUKHVzZS51c2VLaW5k
KCkgPT0gRG91YmxlVXNlKTsKLSAgICAgICAgaWYgKGppdC0+aXNGaWxsZWQobV9pbmRleCkpCisg
ICAgICAgIGlmIChqaXQtPmlzRmlsbGVkKG1fbm9kZSkpCiAgICAgICAgICAgICBmcHIoKTsKICAg
ICB9CiAKQEAgLTI4MzksMjYgKzI4MTIsMjYgQEAgcHVibGljOgogICAgICAgICBtX2ppdC0+dW5s
b2NrKG1fZnByT3JJbnZhbGlkKTsKICAgICB9CiAKLSAgICBOb2RlSW5kZXggaW5kZXgoKSBjb25z
dAorICAgIE5vZGUqIG5vZGUoKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIG1faW5kZXg7
CisgICAgICAgIHJldHVybiBtX25vZGU7CiAgICAgfQogCiAgICAgRlBSUmVnIGZwcigpCiAgICAg
ewogICAgICAgICBpZiAobV9mcHJPckludmFsaWQgPT0gSW52YWxpZEZQUlJlZykKLSAgICAgICAg
ICAgIG1fZnByT3JJbnZhbGlkID0gbV9qaXQtPmZpbGxTcGVjdWxhdGVEb3VibGUoaW5kZXgoKSwg
bV9kaXJlY3Rpb24pOworICAgICAgICAgICAgbV9mcHJPckludmFsaWQgPSBtX2ppdC0+ZmlsbFNw
ZWN1bGF0ZURvdWJsZShub2RlKCksIG1fZGlyZWN0aW9uKTsKICAgICAgICAgcmV0dXJuIG1fZnBy
T3JJbnZhbGlkOwogICAgIH0KICAgICAKICAgICB2b2lkIHVzZSgpCiAgICAgewotICAgICAgICBt
X2ppdC0+dXNlKG1faW5kZXgpOworICAgICAgICBtX2ppdC0+dXNlKG1fbm9kZSk7CiAgICAgfQog
CiBwcml2YXRlOgogICAgIFNwZWN1bGF0aXZlSklUKiBtX2ppdDsKLSAgICBOb2RlSW5kZXggbV9p
bmRleDsKKyAgICBOb2RlKiBtX25vZGU7CiAgICAgRlBSUmVnIG1fZnByT3JJbnZhbGlkOwogICAg
IFNwZWN1bGF0aW9uRGlyZWN0aW9uIG1fZGlyZWN0aW9uOwogfTsKQEAgLTI4NjcsMTMgKzI4NDAs
MTMgQEAgY2xhc3MgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgewogcHVibGljOgogICAgIGV4cGxpY2l0
IFNwZWN1bGF0ZUNlbGxPcGVyYW5kKFNwZWN1bGF0aXZlSklUKiBqaXQsIEVkZ2UgdXNlLCBTcGVj
dWxhdGlvbkRpcmVjdGlvbiBkaXJlY3Rpb24gPSBCYWNrd2FyZFNwZWN1bGF0aW9uKQogICAgICAg
ICA6IG1faml0KGppdCkKLSAgICAgICAgLCBtX2luZGV4KHVzZS5pbmRleCgpKQorICAgICAgICAs
IG1fbm9kZSh1c2Uubm9kZSgpKQogICAgICAgICAsIG1fZ3ByT3JJbnZhbGlkKEludmFsaWRHUFJS
ZWcpCiAgICAgICAgICwgbV9kaXJlY3Rpb24oZGlyZWN0aW9uKQogICAgIHsKICAgICAgICAgQVNT
RVJUKG1faml0KTsKICAgICAgICAgQVNTRVJUKHVzZS51c2VLaW5kKCkgIT0gRG91YmxlVXNlKTsK
LSAgICAgICAgaWYgKGppdC0+aXNGaWxsZWQobV9pbmRleCkpCisgICAgICAgIGlmIChqaXQtPmlz
RmlsbGVkKG1fbm9kZSkpCiAgICAgICAgICAgICBncHIoKTsKICAgICB9CiAKQEAgLTI4ODMsMjYg
KzI4NTYsMjYgQEAgcHVibGljOgogICAgICAgICBtX2ppdC0+dW5sb2NrKG1fZ3ByT3JJbnZhbGlk
KTsKICAgICB9CiAKLSAgICBOb2RlSW5kZXggaW5kZXgoKSBjb25zdAorICAgIE5vZGUqIG5vZGUo
KSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIG1faW5kZXg7CisgICAgICAgIHJldHVybiBt
X25vZGU7CiAgICAgfQogCiAgICAgR1BSUmVnIGdwcigpCiAgICAgewogICAgICAgICBpZiAobV9n
cHJPckludmFsaWQgPT0gSW52YWxpZEdQUlJlZykKLSAgICAgICAgICAgIG1fZ3ByT3JJbnZhbGlk
ID0gbV9qaXQtPmZpbGxTcGVjdWxhdGVDZWxsKGluZGV4KCksIG1fZGlyZWN0aW9uKTsKKyAgICAg
ICAgICAgIG1fZ3ByT3JJbnZhbGlkID0gbV9qaXQtPmZpbGxTcGVjdWxhdGVDZWxsKG5vZGUoKSwg
bV9kaXJlY3Rpb24pOwogICAgICAgICByZXR1cm4gbV9ncHJPckludmFsaWQ7CiAgICAgfQogICAg
IAogICAgIHZvaWQgdXNlKCkKICAgICB7Ci0gICAgICAgIG1faml0LT51c2UobV9pbmRleCk7Cisg
ICAgICAgIG1faml0LT51c2UobV9ub2RlKTsKICAgICB9CiAKIHByaXZhdGU6CiAgICAgU3BlY3Vs
YXRpdmVKSVQqIG1faml0OwotICAgIE5vZGVJbmRleCBtX2luZGV4OworICAgIE5vZGUqIG1fbm9k
ZTsKICAgICBHUFJSZWcgbV9ncHJPckludmFsaWQ7CiAgICAgU3BlY3VsYXRpb25EaXJlY3Rpb24g
bV9kaXJlY3Rpb247CiB9OwpAQCAtMjkxMSwxMyArMjg4NCwxMyBAQCBjbGFzcyBTcGVjdWxhdGVC
b29sZWFuT3BlcmFuZCB7CiBwdWJsaWM6CiAgICAgZXhwbGljaXQgU3BlY3VsYXRlQm9vbGVhbk9w
ZXJhbmQoU3BlY3VsYXRpdmVKSVQqIGppdCwgRWRnZSB1c2UsIFNwZWN1bGF0aW9uRGlyZWN0aW9u
IGRpcmVjdGlvbiA9IEJhY2t3YXJkU3BlY3VsYXRpb24pCiAgICAgICAgIDogbV9qaXQoaml0KQot
ICAgICAgICAsIG1faW5kZXgodXNlLmluZGV4KCkpCisgICAgICAgICwgbV9ub2RlKHVzZS5ub2Rl
KCkpCiAgICAgICAgICwgbV9ncHJPckludmFsaWQoSW52YWxpZEdQUlJlZykKICAgICAgICAgLCBt
X2RpcmVjdGlvbihkaXJlY3Rpb24pCiAgICAgewogICAgICAgICBBU1NFUlQobV9qaXQpOwogICAg
ICAgICBBU1NFUlQodXNlLnVzZUtpbmQoKSAhPSBEb3VibGVVc2UpOwotICAgICAgICBpZiAoaml0
LT5pc0ZpbGxlZChtX2luZGV4KSkKKyAgICAgICAgaWYgKGppdC0+aXNGaWxsZWQobV9ub2RlKSkK
ICAgICAgICAgICAgIGdwcigpOwogICAgIH0KICAgICAKQEAgLTI5MjcsMjYgKzI5MDAsMjYgQEAg
cHVibGljOgogICAgICAgICBtX2ppdC0+dW5sb2NrKG1fZ3ByT3JJbnZhbGlkKTsKICAgICB9CiAg
ICAgCi0gICAgTm9kZUluZGV4IGluZGV4KCkgY29uc3QKKyAgICBOb2RlKiBub2RlKCkgY29uc3QK
ICAgICB7Ci0gICAgICAgIHJldHVybiBtX2luZGV4OworICAgICAgICByZXR1cm4gbV9ub2RlOwog
ICAgIH0KICAgICAKICAgICBHUFJSZWcgZ3ByKCkKICAgICB7CiAgICAgICAgIGlmIChtX2dwck9y
SW52YWxpZCA9PSBJbnZhbGlkR1BSUmVnKQotICAgICAgICAgICAgbV9ncHJPckludmFsaWQgPSBt
X2ppdC0+ZmlsbFNwZWN1bGF0ZUJvb2xlYW4oaW5kZXgoKSwgbV9kaXJlY3Rpb24pOworICAgICAg
ICAgICAgbV9ncHJPckludmFsaWQgPSBtX2ppdC0+ZmlsbFNwZWN1bGF0ZUJvb2xlYW4obm9kZSgp
LCBtX2RpcmVjdGlvbik7CiAgICAgICAgIHJldHVybiBtX2dwck9ySW52YWxpZDsKICAgICB9CiAg
ICAgCiAgICAgdm9pZCB1c2UoKQogICAgIHsKLSAgICAgICAgbV9qaXQtPnVzZShtX2luZGV4KTsK
KyAgICAgICAgbV9qaXQtPnVzZShtX25vZGUpOwogICAgIH0KIAogcHJpdmF0ZToKICAgICBTcGVj
dWxhdGl2ZUpJVCogbV9qaXQ7Ci0gICAgTm9kZUluZGV4IG1faW5kZXg7CisgICAgTm9kZSogbV9u
b2RlOwogICAgIEdQUlJlZyBtX2dwck9ySW52YWxpZDsKICAgICBTcGVjdWxhdGlvbkRpcmVjdGlv
biBtX2RpcmVjdGlvbjsKIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0
cnVjdHVyZUFic3RyYWN0VmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1N0cnVjdHVyZUFic3RyYWN0VmFsdWUuaAkocmV2aXNpb24gMTQwOTA0KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExLCAy
MDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
MSwgMjAxMiwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMxNCw2ICszMTQsOCBAQCBwdWJsaWM6CiBwcml2YXRl
OgogICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIHRvcFZhbHVlKCkgeyByZXR1cm4gcmVpbnRlcnByZXRf
Y2FzdDxTdHJ1Y3R1cmUqPigxKTsgfQogICAgIAorICAgIC8vIE5CLiBUaGlzIG11c3QgaGF2ZSBh
IHRyaXZpYWwgZGVzdHJ1Y3Rvci4KKyAgICAKICAgICAvLyBUaGlzIGNhbiBvbmx5IHJlbWVtYmVy
IG9uZSBzdHJ1Y3R1cmUgYXQgYSB0aW1lLgogICAgIFN0cnVjdHVyZSogbV9zdHJ1Y3R1cmU7CiB9
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJ1Y3R1cmVDaGVja0hvaXN0
aW5nUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3RydWN0dXJlQ2hlY2tIb2lzdGluZ1BoYXNlLmNwcAkocmV2aXNpb24gMTQwOTA0KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJ1Y3R1cmVDaGVja0hvaXN0aW5nUGhhc2UuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC02NCwyMyArNjQsMjIgQEAgcHVibGljOgogICAgICAgICAgICAg
aWYgKCFibG9jaykKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgaW5kZXhJbkJsb2NrID0gMDsgaW5kZXhJbkJsb2NrIDwgYmxvY2stPnNpemUoKTsg
KytpbmRleEluQmxvY2spIHsKLSAgICAgICAgICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4ID0g
YmxvY2stPmF0KGluZGV4SW5CbG9jayk7Ci0gICAgICAgICAgICAgICAgTm9kZSYgbm9kZSA9IG1f
Z3JhcGhbbm9kZUluZGV4XTsKLSAgICAgICAgICAgICAgICBpZiAoIW5vZGUuc2hvdWxkR2VuZXJh
dGUoKSkKKyAgICAgICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPmF0KGluZGV4SW5CbG9j
ayk7CisgICAgICAgICAgICAgICAgaWYgKCFub2RlLT5zaG91bGRHZW5lcmF0ZSgpKQogICAgICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUub3Ao
KSkgeworICAgICAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewogICAgICAgICAgICAg
ICAgIGNhc2UgQ2hlY2tTdHJ1Y3R1cmU6CiAgICAgICAgICAgICAgICAgY2FzZSBTdHJ1Y3R1cmVU
cmFuc2l0aW9uV2F0Y2hwb2ludDogewotICAgICAgICAgICAgICAgICAgICBOb2RlJiBjaGlsZCA9
IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV07Ci0gICAgICAgICAgICAgICAgICAgIGlmIChjaGlsZC5v
cCgpICE9IEdldExvY2FsKQorICAgICAgICAgICAgICAgICAgICBOb2RlKiBjaGlsZCA9IG5vZGUt
PmNoaWxkMSgpLm5vZGUoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkLT5vcCgpICE9
IEdldExvY2FsKQogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAg
ICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBjaGlsZC52YXJpYWJsZUFjY2Vz
c0RhdGEoKTsKKyAgICAgICAgICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJs
ZSA9IGNoaWxkLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKICAgICAgICAgICAgICAgICAgICAgdmFy
aWFibGUtPnZvdGUoVm90ZVN0cnVjdHVyZUNoZWNrKTsKICAgICAgICAgICAgICAgICAgICAgaWYg
KHZhcmlhYmxlLT5pc0NhcHR1cmVkKCkgfHwgdmFyaWFibGUtPnN0cnVjdHVyZUNoZWNrSG9pc3Rp
bmdGYWlsZWQoKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
ICAgICAgICBpZiAoIWlzQ2VsbFNwZWN1bGF0aW9uKHZhcmlhYmxlLT5wcmVkaWN0aW9uKCkpKQog
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIG5vdGlj
ZVN0cnVjdHVyZUNoZWNrKHZhcmlhYmxlLCBub2RlLnN0cnVjdHVyZVNldCgpKTsKKyAgICAgICAg
ICAgICAgICAgICAgbm90aWNlU3RydWN0dXJlQ2hlY2sodmFyaWFibGUsIG5vZGUtPnN0cnVjdHVy
ZVNldCgpKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgICAgICAKQEAgLTEwOSwxMyArMTA4LDEzIEBAIHB1YmxpYzoKICAgICAg
ICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgY2FzZSBBcnJheWlmeVRvU3RydWN0dXJl
OgogICAgICAgICAgICAgICAgIGNhc2UgQXJyYXlpZnk6Ci0gICAgICAgICAgICAgICAgICAgIGlm
IChub2RlLmFycmF5TW9kZSgpLmNvbnZlcnNpb24oKSA9PSBBcnJheTo6UmFnZUNvbnZlcnQpIHsK
KyAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmFycmF5TW9kZSgpLmNvbnZlcnNpb24oKSA9
PSBBcnJheTo6UmFnZUNvbnZlcnQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJhZ2Ug
Y29udmVyc2lvbiBjaGFuZ2VzIHN0cnVjdHVyZXMuIFdlIHNob3VsZCBhdm9pZCB0eWluZyB0byBk
bwogICAgICAgICAgICAgICAgICAgICAgICAgLy8gYW55IGtpbmQgb2YgaG9pc3Rpbmcgd2hlbiBy
YWdlIGNvbnZlcnNpb24gaXMgaW4gcGxheS4KLSAgICAgICAgICAgICAgICAgICAgICAgIE5vZGUm
IGNoaWxkID0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChjaGlsZC5vcCgpICE9IEdldExvY2FsKQorICAgICAgICAgICAgICAgICAgICAgICAgTm9k
ZSogY2hpbGQgPSBub2RlLT5jaGlsZDEoKS5ub2RleCgpOworICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKGNoaWxkLT5vcCgpICE9IEdldExvY2FsKQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2
YXJpYWJsZSA9IGNoaWxkLnZhcmlhYmxlQWNjZXNzRGF0YSgpOworICAgICAgICAgICAgICAgICAg
ICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IGNoaWxkLT52YXJpYWJsZUFjY2Vz
c0RhdGEoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLT52b3RlKFZvdGVPdGhl
cik7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFyaWFibGUtPmlzQ2FwdHVyZWQoKSB8
fCB2YXJpYWJsZS0+c3RydWN0dXJlQ2hlY2tIb2lzdGluZ0ZhaWxlZCgpKQogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTMwLDMwICsxMjksMjkgQEAgcHVibGljOgogICAg
ICAgICAgICAgICAgICAgICAvLyBraW5kIG9mIENoZWNrU3RydWN0dXJlLCB0aGVuIHdlIHNob3Vs
ZCBub3RpY2UgdGhlbSB0byBlbnN1cmUgdGhhdAogICAgICAgICAgICAgICAgICAgICAvLyB3ZSdy
ZSBub3QgaG9pc3RpbmcgYSBjaGVjayB0aGF0IHdvdWxkIGNvbnRyYXZlbmUgY2hlY2tzIHRoYXQg
YXJlCiAgICAgICAgICAgICAgICAgICAgIC8vIGFscmVhZHkgYmVpbmcgcGVyZm9ybWVkLgotICAg
ICAgICAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbm9kZS52YXJp
YWJsZUFjY2Vzc0RhdGEoKTsKKyAgICAgICAgICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRh
KiB2YXJpYWJsZSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOwogICAgICAgICAgICAgICAg
ICAgICBpZiAodmFyaWFibGUtPmlzQ2FwdHVyZWQoKSB8fCB2YXJpYWJsZS0+c3RydWN0dXJlQ2hl
Y2tIb2lzdGluZ0ZhaWxlZCgpKQogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICAgICAgICAgIGlmICghaXNDZWxsU3BlY3VsYXRpb24odmFyaWFibGUtPnByZWRpY3Rp
b24oKSkpCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAg
ICAgTm9kZUluZGV4IHNvdXJjZSA9IG5vZGUuY2hpbGQxKCkuaW5kZXgoKTsKKyAgICAgICAgICAg
ICAgICAgICAgTm9kZSogc291cmNlID0gbm9kZS0+Y2hpbGQxKCkubm9kZSgpOwogICAgICAgICAg
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIHN1YkluZGV4SW5CbG9jayA9IDA7IHN1YkluZGV4SW5C
bG9jayA8IGJsb2NrLT5zaXplKCk7ICsrc3ViSW5kZXhJbkJsb2NrKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBOb2RlSW5kZXggc3ViTm9kZUluZGV4ID0gYmxvY2stPmF0KHN1YkluZGV4SW5C
bG9jayk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBOb2RlJiBzdWJOb2RlID0gbV9ncmFwaFtz
dWJOb2RlSW5kZXhdOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFzdWJOb2RlLnNob3Vs
ZEdlbmVyYXRlKCkpCisgICAgICAgICAgICAgICAgICAgICAgICBOb2RlKiBzdWJOb2RlID0gYmxv
Y2stPmF0KHN1YkluZGV4SW5CbG9jayk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXN1
Yk5vZGUtPnNob3VsZEdlbmVyYXRlKCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
dGludWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHN1Yk5vZGUub3AoKSkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChzdWJOb2RlLT5vcCgpKSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICBjYXNlIENoZWNrU3RydWN0dXJlOiB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKHN1Yk5vZGUuY2hpbGQxKCkuaW5kZXgoKSAhPSBzb3VyY2UpCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN1Yk5vZGUtPmNoaWxkMSgpICE9IHNvdXJjZSkK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbm90aWNlU3RydWN0dXJl
Q2hlY2sodmFyaWFibGUsIHN1Yk5vZGUuc3RydWN0dXJlU2V0KCkpOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG5vdGljZVN0cnVjdHVyZUNoZWNrKHZhcmlhYmxlLCBzdWJOb2RlLT5zdHJ1
Y3R1cmVTZXQoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFN0cnVjdHVy
ZVRyYW5zaXRpb25XYXRjaHBvaW50OiB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KHN1Yk5vZGUuY2hpbGQxKCkuaW5kZXgoKSAhPSBzb3VyY2UpCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKHN1Yk5vZGUtPmNoaWxkMSgpICE9IHNvdXJjZSkKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbm90aWNlU3RydWN0dXJlQ2hlY2sodmFyaWFibGUs
IHN1Yk5vZGUuc3RydWN0dXJlKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vdGlj
ZVN0cnVjdHVyZUNoZWNrKHZhcmlhYmxlLCBzdWJOb2RlLT5zdHJ1Y3R1cmUoKSk7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgpAQCAtMTYxLDE0ICsxNTksMTQgQEAgcHVi
bGljOgogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLnZvdGUobm9k
ZSwgVm90ZU90aGVyKTsKKyAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC52b3RlQ2hpbGRyZW4o
bm9kZSwgVm90ZU90aGVyKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgIGNhc2UgR2FyYmFnZVZhbHVlOgogICAgICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgZGVm
YXVsdDoKLSAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC52b3RlKG5vZGUsIFZvdGVPdGhlcik7
CisgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgudm90ZUNoaWxkcmVuKG5vZGUsIFZvdGVPdGhl
cik7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIH0KQEAgLTIwOSwxMCArMjA3LDEwIEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBj
b250aW51ZTsKICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9ncmFwaC5tX211
c3RIYW5kbGVWYWx1ZXMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgICAgICAgICBpbnQgb3BlcmFu
ZCA9IG1fZ3JhcGgubV9tdXN0SGFuZGxlVmFsdWVzLm9wZXJhbmRGb3JJbmRleChpKTsKLSAgICAg
ICAgICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4ID0gYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5v
cGVyYW5kKG9wZXJhbmQpOwotICAgICAgICAgICAgICAgIGlmIChub2RlSW5kZXggPT0gTm9Ob2Rl
KQorICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+dmFyaWFibGVzQXRIZWFkLm9w
ZXJhbmQob3BlcmFuZCk7CisgICAgICAgICAgICAgICAgaWYgKCFub2RlKQogICAgICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZh
cmlhYmxlID0gbV9ncmFwaFtub2RlSW5kZXhdLnZhcmlhYmxlQWNjZXNzRGF0YSgpOworICAgICAg
ICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBub2RlLT52YXJpYWJsZUFj
Y2Vzc0RhdGEoKTsKICAgICAgICAgICAgICAgICBIYXNoTWFwPFZhcmlhYmxlQWNjZXNzRGF0YSos
IENoZWNrRGF0YT46Oml0ZXJhdG9yIGl0ZXIgPSBtX21hcC5maW5kKHZhcmlhYmxlKTsKICAgICAg
ICAgICAgICAgICBpZiAoaXRlciA9PSBtX21hcC5lbmQoKSkKICAgICAgICAgICAgICAgICAgICAg
Y29udGludWU7CkBAIC0yNjUsNDggKzI2Myw0NyBAQCBwdWJsaWM6CiAgICAgICAgICAgICBpZiAo
IWJsb2NrKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBpbmRleEluQmxvY2sgPSAwOyBpbmRleEluQmxvY2sgPCBibG9jay0+c2l6ZSgpOyArK2lu
ZGV4SW5CbG9jaykgewotICAgICAgICAgICAgICAgIE5vZGVJbmRleCBub2RlSW5kZXggPSBibG9j
ay0+YXQoaW5kZXhJbkJsb2NrKTsKLSAgICAgICAgICAgICAgICBOb2RlJiBub2RlID0gbV9ncmFw
aFtub2RlSW5kZXhdOworICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+YXQoaW5k
ZXhJbkJsb2NrKTsKICAgICAgICAgICAgICAgICAvLyBCZSBjYXJlZnVsIG5vdCB0byB1c2UgJ25v
ZGUnIGFmdGVyIGFwcGVuZGluZyB0byB0aGUgZ3JhcGguIEluIHRob3NlIHN3aXRjaAogICAgICAg
ICAgICAgICAgIC8vIGNhc2VzIHdoZXJlIHdlIG5lZWQgdG8gYXBwZW5kLCB3ZSBmaXJzdCBjYXJl
ZnVsbHkgZXh0cmFjdCBldmVyeXRoaW5nIHdlIG5lZWQKICAgICAgICAgICAgICAgICAvLyBmcm9t
IHRoZSBub2RlLCBiZWZvcmUgZG9pbmcgYW55IGFwcGVuZGluZy4KLSAgICAgICAgICAgICAgICBp
ZiAoIW5vZGUuc2hvdWxkR2VuZXJhdGUoKSkKKyAgICAgICAgICAgICAgICBpZiAoIW5vZGUtPnNo
b3VsZEdlbmVyYXRlKCkpCiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAg
ICAgICAgIHN3aXRjaCAobm9kZS5vcCgpKSB7CisgICAgICAgICAgICAgICAgc3dpdGNoIChub2Rl
LT5vcCgpKSB7CiAgICAgICAgICAgICAgICAgY2FzZSBTZXRBcmd1bWVudDogewogICAgICAgICAg
ICAgICAgICAgICBBU1NFUlQoIWJsb2NrSW5kZXgpOwogICAgICAgICAgICAgICAgICAgICAvLyBJ
bnNlcnQgYSBHZXRMb2NhbCBhbmQgYSBDaGVja1N0cnVjdHVyZSBpbW1lZGlhdGVseSBmb2xsb3dp
bmcgdGhpcwogICAgICAgICAgICAgICAgICAgICAvLyBTZXRBcmd1bWVudCwgaWYgdGhlIHZhcmlh
YmxlIHdhcyBhIGNhbmRpZGF0ZSBmb3Igc3RydWN0dXJlIGhvaXN0aW5nLgogICAgICAgICAgICAg
ICAgICAgICAvLyBJZiB0aGUgYmFzaWMgYmxvY2sgcHJldmlvdXNseSBvbmx5IGhhZCB0aGUgU2V0
QXJndW1lbnQgYXMgaXRzCiAgICAgICAgICAgICAgICAgICAgIC8vIHZhcmlhYmxlLWF0LXRhaWws
IHRoZW4gcmVwbGFjZSBpdCB3aXRoIHRoaXMgR2V0TG9jYWwuCi0gICAgICAgICAgICAgICAgICAg
IFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBub2RlLnZhcmlhYmxlQWNjZXNzRGF0YSgp
OworICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbm9k
ZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CiAgICAgICAgICAgICAgICAgICAgIEhhc2hNYXA8VmFy
aWFibGVBY2Nlc3NEYXRhKiwgQ2hlY2tEYXRhPjo6aXRlcmF0b3IgaXRlciA9IG1fbWFwLmZpbmQo
dmFyaWFibGUpOwogICAgICAgICAgICAgICAgICAgICBpZiAoaXRlciA9PSBtX21hcC5lbmQoKSkK
ICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICBpZiAo
IWl0ZXItPnZhbHVlLm1fc3RydWN0dXJlKQogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBDb2RlT3JpZ2luIGNv
ZGVPcmlnaW4gPSBub2RlLmNvZGVPcmlnaW47CisgICAgICAgICAgICAgICAgICAgIENvZGVPcmln
aW4gY29kZU9yaWdpbiA9IG5vZGUtPmNvZGVPcmlnaW47CiAgICAgICAgICAgICAgICAgICAgIAot
ICAgICAgICAgICAgICAgICAgICBOb2RlSW5kZXggZ2V0TG9jYWxJbmRleCA9IGluc2VydGlvblNl
dC5pbnNlcnROb2RlKAorICAgICAgICAgICAgICAgICAgICBOb2RlKiBnZXRMb2NhbCA9IGluc2Vy
dGlvblNldC5pbnNlcnROb2RlKAogICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhJbkJsb2Nr
ICsgMSwgRG9udFJlZkNoaWxkcmVuLCBEb250UmVmTm9kZSwgdmFyaWFibGUtPnByZWRpY3Rpb24o
KSwKLSAgICAgICAgICAgICAgICAgICAgICAgIEdldExvY2FsLCBjb2RlT3JpZ2luLCBPcEluZm8o
dmFyaWFibGUpLCBub2RlSW5kZXgpOworICAgICAgICAgICAgICAgICAgICAgICAgR2V0TG9jYWws
IGNvZGVPcmlnaW4sIE9wSW5mbyh2YXJpYWJsZSksIG5vZGUpOwogICAgICAgICAgICAgICAgICAg
ICBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4
SW5CbG9jayArIDEsIFJlZkNoaWxkcmVuLCBEb250UmVmTm9kZSwgU3BlY05vbmUsIENoZWNrU3Ry
dWN0dXJlLAogICAgICAgICAgICAgICAgICAgICAgICAgY29kZU9yaWdpbiwgT3BJbmZvKG1fZ3Jh
cGguYWRkU3RydWN0dXJlU2V0KGl0ZXItPnZhbHVlLm1fc3RydWN0dXJlKSksCiAgICAgICAgICAg
ICAgICAgICAgICAgICBnZXRMb2NhbEluZGV4KTsKIAotICAgICAgICAgICAgICAgICAgICBpZiAo
YmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSA9PSBub2Rl
SW5kZXgpCi0gICAgICAgICAgICAgICAgICAgICAgICBibG9jay0+dmFyaWFibGVzQXRUYWlsLm9w
ZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpID0gZ2V0TG9jYWxJbmRleDsKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKGJsb2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwo
KSkgPT0gbm9kZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrLT52YXJpYWJsZXNBdFRh
aWwub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkgPSBnZXRMb2NhbDsKICAgICAgICAgICAgICAg
ICAgICAgCi0gICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguc3Vic3RpdHV0ZUdldExvY2FsKCpi
bG9jaywgaW5kZXhJbkJsb2NrLCB2YXJpYWJsZSwgZ2V0TG9jYWxJbmRleCk7CisgICAgICAgICAg
ICAgICAgICAgIG1fZ3JhcGguc3Vic3RpdHV0ZUdldExvY2FsKCpibG9jaywgaW5kZXhJbkJsb2Nr
LCB2YXJpYWJsZSwgZ2V0TG9jYWwpOwogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAg
ICAgICAgICAgY2hhbmdlZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgY2Fz
ZSBTZXRMb2NhbDogewotICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZh
cmlhYmxlID0gbm9kZS52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKKyAgICAgICAgICAgICAgICAgICAg
VmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgp
OwogICAgICAgICAgICAgICAgICAgICBIYXNoTWFwPFZhcmlhYmxlQWNjZXNzRGF0YSosIENoZWNr
RGF0YT46Oml0ZXJhdG9yIGl0ZXIgPSBtX21hcC5maW5kKHZhcmlhYmxlKTsKICAgICAgICAgICAg
ICAgICAgICAgaWYgKGl0ZXIgPT0gbV9tYXAuZW5kKCkpCiAgICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKQEAgLTMxNyw4ICszMTQsOCBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAg
IC8vIGJlIGRyb3BwZWQgaW50byB0aGlzIGJ5dGVjb2RlIHZhcmlhYmxlIGlmIHRoZSBDaGVja1N0
cnVjdHVyZSBkZWNpZGVzCiAgICAgICAgICAgICAgICAgICAgIC8vIHRvIGV4aXQuCiAgICAgICAg
ICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBDb2RlT3JpZ2luIGNvZGVPcmlnaW4g
PSBub2RlLmNvZGVPcmlnaW47Ci0gICAgICAgICAgICAgICAgICAgIE5vZGVJbmRleCBjaGlsZDEg
PSBub2RlLmNoaWxkMSgpLmluZGV4KCk7CisgICAgICAgICAgICAgICAgICAgIENvZGVPcmlnaW4g
Y29kZU9yaWdpbiA9IG5vZGUtPmNvZGVPcmlnaW47CisgICAgICAgICAgICAgICAgICAgIE5vZGUq
IGNoaWxkMSA9IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKICAgICAgICAgICAgICAgICAgICAgCiAg
ICAgICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnROb2RlKAogICAgICAgICAgICAg
ICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBEb250UmVmQ2hpbGRyZW4sIERvbnRSZWZOb2RlLCBT
cGVjTm9uZSwgU2V0TG9jYWwsIGNvZGVPcmlnaW4sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1ZhbGlkYXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1ZhbGlkYXRlLmNwcAkocmV2aXNpb24gMTQwOTA0KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdWYWxpZGF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgwLDQwICs4
MCw0MyBAQCBwdWJsaWM6CiAgICAgICAgIC8vIFZhbGlkYXRlIHRoYXQgYWxsIGxvY2FsIHZhcmlh
YmxlcyBhdCB0aGUgaGVhZCBvZiB0aGUgcm9vdCBibG9jayBhcmUgZGVhZC4KICAgICAgICAgQmFz
aWNCbG9jayogcm9vdCA9IG1fZ3JhcGgubV9ibG9ja3NbMF0uZ2V0KCk7CiAgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCByb290LT52YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZMb2NhbHMo
KTsgKytpKQotICAgICAgICAgICAgVl9FUVVBTCgoc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVy
PihpKSwgMCksIE5vTm9kZSwgcm9vdC0+dmFyaWFibGVzQXRIZWFkLmxvY2FsKGkpKTsKKyAgICAg
ICAgICAgIFZfRVFVQUwoKHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4oaSksIDApLCAwLCBy
b290LT52YXJpYWJsZXNBdEhlYWQubG9jYWwoaSkpOwogICAgICAgICAKICAgICAgICAgLy8gVmFs
aWRhdGUgcmVmIGNvdW50cyBhbmQgdXNlcy4KLSAgICAgICAgVmVjdG9yPHVuc2lnbmVkPiBteVJl
ZkNvdW50czsKLSAgICAgICAgbXlSZWZDb3VudHMuZmlsbCgwLCBtX2dyYXBoLnNpemUoKSk7Ci0g
ICAgICAgIEJpdFZlY3RvciBhY2NlcHRhYmxlTm9kZUluZGljZXM7CisgICAgICAgIEhhc2hNYXA8
Tm9kZSosIHVuc2lnbmVkPiBteVJlZkNvdW50czsKICAgICAgICAgZm9yIChCbG9ja0luZGV4IGJs
b2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9ncmFwaC5tX2Jsb2Nrcy5zaXplKCk7ICsrYmxv
Y2tJbmRleCkgewogICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLm1fYmxv
Y2tzW2Jsb2NrSW5kZXhdLmdldCgpOwotICAgICAgICAgICAgaWYgKCFibG9jaykKKyAgICAgICAg
ICAgIGlmICghYmxvY2sgfHwgIWJsb2NrLT5pc1JlYWNoYWJsZSkKICAgICAgICAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgICAgIGlmICghYmxvY2stPmlzUmVhY2hhYmxlKQorICAgICAgICAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBibG9jay0+bnVtTm9kZXMoKTsgKytpKQorICAgICAg
ICAgICAgICAgIG15UmVmQ291bnRzLmFkZChibG9jay0+bm9kZShpKSwgMCk7CisgICAgICAgIH0K
KyAgICAgICAgSGFzaFNldDxOb2RlKj4gYWNjZXB0YWJsZU5vZGVzOworICAgICAgICBmb3IgKEJs
b2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2dyYXBoLm1fYmxvY2tzLnNp
emUoKTsgKytibG9ja0luZGV4KSB7CisgICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1f
Z3JhcGgubV9ibG9ja3NbYmxvY2tJbmRleF0uZ2V0KCk7CisgICAgICAgICAgICBpZiAoIWJsb2Nr
IHx8ICFibG9jay0+aXNSZWFjaGFibGUpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAg
ICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGJsb2NrLT5udW1Ob2RlcygpOyArK2kpIHsK
LSAgICAgICAgICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4ID0gYmxvY2stPm5vZGVJbmRleChp
KTsKLSAgICAgICAgICAgICAgICBhY2NlcHRhYmxlTm9kZUluZGljZXMuc2V0KG5vZGVJbmRleCk7
Ci0gICAgICAgICAgICAgICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhbbm9kZUluZGV4XTsKLSAgICAg
ICAgICAgICAgICBpZiAoIW5vZGUuc2hvdWxkR2VuZXJhdGUoKSkKKyAgICAgICAgICAgICAgICBO
b2RlKiBub2RlID0gYmxvY2stPm5vZGUoaSk7CisgICAgICAgICAgICAgICAgYWNjZXB0YWJsZU5v
ZGVzLmFkZChub2RlKTsKKyAgICAgICAgICAgICAgICBpZiAoIW5vZGUtPnNob3VsZEdlbmVyYXRl
KCkpCiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgaiA9IDA7IGogPCBtX2dyYXBoLm51bUNoaWxkcmVuKG5vZGUpOyArK2opIHsKICAg
ICAgICAgICAgICAgICAgICAgRWRnZSBlZGdlID0gbV9ncmFwaC5jaGlsZChub2RlLCBqKTsKICAg
ICAgICAgICAgICAgICAgICAgaWYgKCFlZGdlKQogICAgICAgICAgICAgICAgICAgICAgICAgY29u
dGludWU7CiAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBteVJlZkNv
dW50c1tlZGdlLmluZGV4KCldKys7CisgICAgICAgICAgICAgICAgICAgIG15UmVmQ291bnRzLmZp
bmQoZWRnZS5ub2RlKCkpLT52YWx1ZSsrOwogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAg
ICAgICAgICAgICAgLy8gVW5sZXNzIEknbSBhIEZsdXNoLCBQaGFudG9tLCBHZXRMb2NhbCwgb3Ig
UGhpLCBteSBjaGlsZHJlbiBzaG91bGQgaGFzUmVzdWx0KCkuCi0gICAgICAgICAgICAgICAgICAg
IHN3aXRjaCAobm9kZS5vcCgpKSB7CisgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+
b3AoKSkgewogICAgICAgICAgICAgICAgICAgICBjYXNlIEZsdXNoOgogICAgICAgICAgICAgICAg
ICAgICBjYXNlIFBoYW50b206CiAgICAgICAgICAgICAgICAgICAgIGNhc2UgR2V0TG9jYWw6CiAg
ICAgICAgICAgICAgICAgICAgIGNhc2UgUGhpOgogICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBWQUxJREFURSgobm9kZUluZGV4LCBlZGdlKSwgbV9ncmFwaFtlZGdlXS5oYXNSZXN1bHQoKSk7
CisgICAgICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgobm9kZSwgZWRnZSksIGVkZ2UtPmhh
c1Jlc3VsdCgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQpAQCAtMTIxLDU0ICsxMjQsNTAgQEAgcHVibGlj
OgogICAgICAgICB9CiAgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gMDsgYmxv
Y2tJbmRleCA8IG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgpOyArK2Jsb2NrSW5kZXgpIHsKICAgICAg
ICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5tX2Jsb2Nrc1tibG9ja0luZGV4XS5n
ZXQoKTsKLSAgICAgICAgICAgIGlmICghYmxvY2spCi0gICAgICAgICAgICAgICAgY29udGludWU7
Ci0gICAgICAgICAgICBpZiAoIWJsb2NrLT5pc1JlYWNoYWJsZSkKKyAgICAgICAgICAgIGlmICgh
YmxvY2sgfHwgIWJsb2NrLT5pc1JlYWNoYWJsZSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsK
ICAgICAgICAgICAgIAotICAgICAgICAgICAgQml0VmVjdG9yIHBoaXNJblRoaXNCbG9jazsKLSAg
ICAgICAgICAgIEJpdFZlY3RvciBub2Rlc0luVGhpc0Jsb2NrOworICAgICAgICAgICAgSGFzaFNl
dDxOb2RlKj4gcGhpc0luVGhpc0Jsb2NrOworICAgICAgICAgICAgSGFzaFNldDxOb2RlKj4gbm9k
ZXNJblRoaXNCbG9jazsKICAgICAgICAgICAgIAogICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBibG9jay0+bnVtTm9kZXMoKTsgKytpKSB7Ci0gICAgICAgICAgICAgICAgTm9kZUlu
ZGV4IG5vZGVJbmRleCA9IGJsb2NrLT5ub2RlSW5kZXgoaSk7Ci0gICAgICAgICAgICAgICAgTm9k
ZSYgbm9kZSA9IG1fZ3JhcGhbbm9kZUluZGV4XTsKLSAgICAgICAgICAgICAgICBub2Rlc0luVGhp
c0Jsb2NrLnNldChub2RlSW5kZXgpOworICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9j
ay0+bm9kZShpKTsKKyAgICAgICAgICAgICAgICBub2Rlc0luVGhpc0Jsb2NrLmFkZChub2RlKTsK
ICAgICAgICAgICAgICAgICBpZiAoYmxvY2stPmlzUGhpSW5kZXgoaSkpCi0gICAgICAgICAgICAg
ICAgICAgIHBoaXNJblRoaXNCbG9jay5zZXQobm9kZUluZGV4KTsKLSAgICAgICAgICAgICAgICBW
X0VRVUFMKChub2RlSW5kZXgpLCBteVJlZkNvdW50c1tub2RlSW5kZXhdLCBub2RlLmFkanVzdGVk
UmVmQ291bnQoKSk7CisgICAgICAgICAgICAgICAgICAgIHBoaXNJblRoaXNCbG9jay5hZGQobm9k
ZSk7CisgICAgICAgICAgICAgICAgVl9FUVVBTCgobm9kZSksIG15UmVmQ291bnRzLmdldChub2Rl
SW5kZXgpLCBub2RlLmFkanVzdGVkUmVmQ291bnQoKSk7CiAgICAgICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBqID0gMDsgaiA8IG1fZ3JhcGgubnVtQ2hpbGRyZW4obm9kZSk7ICsraikgewogICAg
ICAgICAgICAgICAgICAgICBFZGdlIGVkZ2UgPSBtX2dyYXBoLmNoaWxkKG5vZGUsIGopOwogICAg
ICAgICAgICAgICAgICAgICBpZiAoIWVkZ2UpCiAgICAgICAgICAgICAgICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKG5vZGVJbmRleCwgZWRnZSksIGFj
Y2VwdGFibGVOb2RlSW5kaWNlcy5nZXQoZWRnZS5pbmRleCgpKSk7CisgICAgICAgICAgICAgICAg
ICAgIFZBTElEQVRFKChub2RlLCBlZGdlKSwgYWNjZXB0YWJsZU5vZGVJbmRpY2VzLmNvbnRhaW5z
KGVkZ2Uubm9kZSgpKSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAg
ICAgICAgCiAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGJsb2NrLT5waGlzLnNp
emUoKTsgKytpKSB7Ci0gICAgICAgICAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRleCA9IGJsb2Nr
LT5waGlzW2ldOwotICAgICAgICAgICAgICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW25vZGVJbmRl
eF07Ci0gICAgICAgICAgICAgICAgQVNTRVJUKHBoaXNJblRoaXNCbG9jay5nZXQobm9kZUluZGV4
KSk7Ci0gICAgICAgICAgICAgICAgVkFMSURBVEUoKG5vZGVJbmRleCksIG5vZGUub3AoKSA9PSBQ
aGkpOwotICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBsb2NhbCA9IG5vZGUubG9jYWwo
KTsKKyAgICAgICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPnBoaXNbaV07CisgICAgICAg
ICAgICAgICAgQVNTRVJUKHBoaXNJblRoaXNCbG9jay5jb250YWlucyhub2RlKSk7CisgICAgICAg
ICAgICAgICAgVkFMSURBVEUoKG5vZGUpLCBub2RlLT5vcCgpID09IFBoaSk7CisgICAgICAgICAg
ICAgICAgVmlydHVhbFJlZ2lzdGVyIGxvY2FsID0gbm9kZS0+bG9jYWwoKTsKICAgICAgICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGogPSAwOyBqIDwgbV9ncmFwaC5udW1DaGlsZHJlbihub2RlKTsg
KytqKSB7CiAgICAgICAgICAgICAgICAgICAgIEVkZ2UgZWRnZSA9IG1fZ3JhcGguY2hpbGQobm9k
ZSwgaik7CiAgICAgICAgICAgICAgICAgICAgIGlmICghZWRnZSkKICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAg
ICAgVkFMSURBVEUoKG5vZGVJbmRleCwgZWRnZSksCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG1fZ3JhcGhbZWRnZV0ub3AoKSA9PSBTZXRMb2NhbAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB8fCBtX2dyYXBoW2VkZ2VdLm9wKCkgPT0gU2V0QXJndW1lbnQKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfHwgbV9ncmFwaFtlZGdlXS5vcCgpID09IEZsdXNoCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHx8IG1fZ3JhcGhbZWRnZV0ub3AoKSA9PSBQaGkpOworICAg
ICAgICAgICAgICAgICAgICBWQUxJREFURSgobm9kZSwgZWRnZSksCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGVkZ2UtPm9wKCkgPT0gU2V0TG9jYWwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfHwgZWRnZS0+b3AoKSA9PSBTZXRBcmd1bWVudAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB8fCBlZGdlLT5vcCgpID09IEZsdXNoCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHx8IGVkZ2UtPm9wKCkgPT0gUGhpKTsKICAgICAgICAgICAgICAgICAgICAgCi0gICAg
ICAgICAgICAgICAgICAgIGlmIChwaGlzSW5UaGlzQmxvY2suZ2V0KGVkZ2UuaW5kZXgoKSkpCisg
ICAgICAgICAgICAgICAgICAgIGlmIChwaGlzSW5UaGlzQmxvY2suY29udGFpbnMoZWRnZS5ub2Rl
KCkpKQogICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAg
ICAgIAotICAgICAgICAgICAgICAgICAgICBpZiAobm9kZXNJblRoaXNCbG9jay5nZXQoZWRnZS5p
bmRleCgpKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKG5vZGVJbmRleCwg
ZWRnZSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoW2VkZ2VdLm9w
KCkgPT0gU2V0TG9jYWwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IG1fZ3Jh
cGhbZWRnZV0ub3AoKSA9PSBTZXRBcmd1bWVudAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfHwgbV9ncmFwaFtlZGdlXS5vcCgpID09IEZsdXNoKTsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKG5vZGVzSW5UaGlzQmxvY2suY29udGFpbnMoZWRnZS5ub2RlKCkpKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBWQUxJREFURSgobm9kZSwgZWRnZSksCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBlZGdlLT5vcCgpID09IFNldExvY2FsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB8fCBlZGdlLT5vcCgpID09IFNldEFyZ3VtZW50CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB8fCBlZGdlLT5vcCgpID09IEZsdXNoKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAg
ICAgICAgICAgICAgICAgIH0KQEAgLTE4MCwzMyArMTc5LDMwIEBAIHB1YmxpYzoKICAgICAgICAg
ICAgICAgICAgICAgICAgIEJhc2ljQmxvY2sqIHByZXZCbG9jayA9IG1fZ3JhcGgubV9ibG9ja3Nb
YmxvY2stPm1fcHJlZGVjZXNzb3JzW2tdXS5nZXQoKTsKICAgICAgICAgICAgICAgICAgICAgICAg
IFZBTElEQVRFKChCbG9jaywgYmxvY2stPm1fcHJlZGVjZXNzb3JzW2tdKSwgcHJldkJsb2NrKTsK
ICAgICAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChCbG9jaywgYmxvY2stPm1fcHJlZGVj
ZXNzb3JzW2tdKSwgcHJldkJsb2NrLT5pc1JlYWNoYWJsZSk7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBOb2RlSW5kZXggcHJldk5vZGVJbmRleCA9IHByZXZCbG9jay0+dmFyaWFibGVzQXRUYWls
Lm9wZXJhbmQobG9jYWwpOworICAgICAgICAgICAgICAgICAgICAgICAgTm9kZSogcHJldk5vZGUg
PSBwcmV2QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKGxvY2FsKTsKICAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIElmIHdlIGhhdmUgYSBQaGkgdGhhdCBpcyBub3QgcmVmZXJyaW5nIHRv
ICp0aGlzKiBibG9jayB0aGVuIGFsbCBwcmVkZWNlc3NvcnMKICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIG11c3QgaGF2ZSB0aGF0IGxvY2FsIGF2YWlsYWJsZS4KLSAgICAgICAgICAgICAgICAg
ICAgICAgIFZBTElEQVRFKChsb2NhbCwgYmxvY2tJbmRleCwgQmxvY2ssIGJsb2NrLT5tX3ByZWRl
Y2Vzc29yc1trXSksIHByZXZOb2RlSW5kZXggIT0gTm9Ob2RlKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIE5vZGUqIHByZXZOb2RlID0gJm1fZ3JhcGhbcHJldk5vZGVJbmRleF07Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBpZiAocHJldk5vZGUtPm9wKCkgPT0gR2V0TG9jYWwpIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBwcmV2Tm9kZUluZGV4ID0gcHJldk5vZGUtPmNoaWxkMSgp
LmluZGV4KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldk5vZGUgPSAmbV9ncmFw
aFtwcmV2Tm9kZUluZGV4XTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIChub2RlLnNob3VsZEdlbmVyYXRlKCkpIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBWQUxJREFURSgobG9jYWwsIGJsb2NrLT5tX3ByZWRlY2Vzc29yc1trXSwg
cHJldk5vZGVJbmRleCksCisgICAgICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgobG9jYWws
IGJsb2NrSW5kZXgsIEJsb2NrLCBibG9jay0+bV9wcmVkZWNlc3NvcnNba10pLCBwcmV2Tm9kZSk7
CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJldk5vZGUtPm9wKCkgPT0gR2V0TG9jYWwp
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldk5vZGUgPSBwcmV2Tm9kZS0+Y2hpbGQx
KCkubm9kZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPnNob3VsZEdlbmVy
YXRlKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgobG9jYWwsIGJs
b2NrLT5tX3ByZWRlY2Vzc29yc1trXSwgcHJldk5vZGUpLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHByZXZOb2RlLT5zaG91bGRHZW5lcmF0ZSgpKTsKICAgICAgICAgICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChsb2NhbCwg
YmxvY2stPm1fcHJlZGVjZXNzb3JzW2tdLCBwcmV2Tm9kZUluZGV4KSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgIFZBTElEQVRFKChsb2NhbCwgYmxvY2stPm1fcHJlZGVjZXNzb3JzW2tdLCBwcmV2
Tm9kZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2Tm9kZS0+b3AoKSA9
PSBTZXRMb2NhbAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgcHJldk5vZGUt
Pm9wKCkgPT0gU2V0QXJndW1lbnQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8
IHByZXZOb2RlLT5vcCgpID09IEZsdXNoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB8fCBwcmV2Tm9kZS0+b3AoKSA9PSBQaGkpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KHByZXZOb2RlSW5kZXggPT0gZWRnZS5pbmRleCgpKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAocHJldk5vZGUgPT0gZWRnZS5ub2RlKCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBmb3VuZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBBdCB0
aGlzIHBvaW50IGl0IGNhbm5vdCByZWZlciBpbnRvIHRoaXMgYmxvY2suCi0gICAgICAgICAgICAg
ICAgICAgICAgICBWQUxJREFURSgobG9jYWwsIGJsb2NrLT5tX3ByZWRlY2Vzc29yc1trXSwgcHJl
dk5vZGVJbmRleCksICFwcmV2QmxvY2stPmlzSW5CbG9jayhlZGdlLmluZGV4KCkpKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChsb2NhbCwgYmxvY2stPm1fcHJlZGVjZXNzb3Jz
W2tdLCBwcmV2Tm9kZSksICFwcmV2QmxvY2stPmlzSW5CbG9jayhlZGdlLm5vZGUoKSkpOwogICAg
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAg
ICAgICBWQUxJREFURSgobm9kZUluZGV4LCBlZGdlKSwgZm91bmQpOworICAgICAgICAgICAgICAg
ICAgICBWQUxJREFURSgobm9kZSwgZWRnZSksIGZvdW5kKTsKICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAKQEAgLTIyNywzNCArMjIzLDMzIEBAIHB1YmxpYzoK
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBibG9jay0+c2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgICAgICBOb2RlSW5kZXgg
bm9kZUluZGV4ID0gYmxvY2stPmF0KGkpOwotICAgICAgICAgICAgICAgIE5vZGUmIG5vZGUgPSBt
X2dyYXBoW25vZGVJbmRleF07Ci0gICAgICAgICAgICAgICAgQVNTRVJUKG5vZGVzSW5UaGlzQmxv
Y2suZ2V0KG5vZGVJbmRleCkpOwotICAgICAgICAgICAgICAgIFZBTElEQVRFKChub2RlSW5kZXgp
LCBub2RlLm9wKCkgIT0gUGhpKTsKKyAgICAgICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2st
PmF0KGkpOworICAgICAgICAgICAgICAgIEFTU0VSVChub2Rlc0luVGhpc0Jsb2NrLmNvbnRhaW5z
KG5vZGUpKTsKKyAgICAgICAgICAgICAgICBWQUxJREFURSgobm9kZSksIG5vZGUtPm9wKCkgIT0g
UGhpKTsKICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSAwOyBqIDwgbV9ncmFwaC5u
dW1DaGlsZHJlbihub2RlKTsgKytqKSB7CiAgICAgICAgICAgICAgICAgICAgIEVkZ2UgZWRnZSA9
IG1fZ3JhcGguY2hpbGQobm9kZSwgaik7CiAgICAgICAgICAgICAgICAgICAgIGlmICghZWRnZSkK
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAgICBW
QUxJREFURSgobm9kZUluZGV4LCBlZGdlKSwgbm9kZXNJblRoaXNCbG9jay5nZXQobm9kZUluZGV4
KSk7CisgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChub2RlLCBlZGdlKSwgbm9kZXNJblRo
aXNCbG9jay5jb250YWlucyhlZGdlLm5vZGUoKSkpOwogICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBpZiAoIW5vZGUuc2hvdWxkR2VuZXJhdGUoKSkK
KyAgICAgICAgICAgICAgICBpZiAoIW5vZGUtPnNob3VsZEdlbmVyYXRlKCkpCiAgICAgICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIHN3aXRjaCAobm9kZS5vcCgpKSB7
CisgICAgICAgICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CiAgICAgICAgICAgICAgICAg
Y2FzZSBHZXRMb2NhbDoKLSAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUudmFyaWFibGVBY2Nl
c3NEYXRhKCktPmlzQ2FwdHVyZWQoKSkKKyAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPnZh
cmlhYmxlQWNjZXNzRGF0YSgpLT5pc0NhcHR1cmVkKCkpCiAgICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKG5vZGVJbmRleCwgYmxvY2tJ
bmRleCksIGdldExvY2FsUG9zaXRpb25zLm9wZXJhbmQobm9kZS5sb2NhbCgpKSA9PSBub3RTZXQp
OwotICAgICAgICAgICAgICAgICAgICBnZXRMb2NhbFBvc2l0aW9ucy5vcGVyYW5kKG5vZGUubG9j
YWwoKSkgPSBpOworICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgobm9kZSwgYmxvY2tJbmRl
eCksIGdldExvY2FsUG9zaXRpb25zLm9wZXJhbmQobm9kZS0+bG9jYWwoKSkgPT0gbm90U2V0KTsK
KyAgICAgICAgICAgICAgICAgICAgZ2V0TG9jYWxQb3NpdGlvbnMub3BlcmFuZChub2RlLT5sb2Nh
bCgpKSA9IGk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIGNh
c2UgU2V0TG9jYWw6Ci0gICAgICAgICAgICAgICAgICAgIGlmIChub2RlLnZhcmlhYmxlQWNjZXNz
RGF0YSgpLT5pc0NhcHR1cmVkKCkpCisgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT52YXJp
YWJsZUFjY2Vzc0RhdGEoKS0+aXNDYXB0dXJlZCgpKQogICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIC8vIE9ubHkgcmVjb3JkIHRoZSBmaXJzdCBTZXRM
b2NhbC4gVGhlcmUgbWF5IGJlIG11bHRpcGxlIFNldExvY2FscwogICAgICAgICAgICAgICAgICAg
ICAvLyBiZWNhdXNlIG9mIGZsdXNoaW5nLgotICAgICAgICAgICAgICAgICAgICBpZiAoc2V0TG9j
YWxQb3NpdGlvbnMub3BlcmFuZChub2RlLmxvY2FsKCkpICE9IG5vdFNldCkKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKHNldExvY2FsUG9zaXRpb25zLm9wZXJhbmQobm9kZS0+bG9jYWwoKSkgIT0g
bm90U2V0KQogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAg
ICAgIHNldExvY2FsUG9zaXRpb25zLm9wZXJhbmQobm9kZS5sb2NhbCgpKSA9IGk7CisgICAgICAg
ICAgICAgICAgICAgIHNldExvY2FsUG9zaXRpb25zLm9wZXJhbmQobm9kZS0+bG9jYWwoKSkgPSBp
OwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICBkZWZhdWx0Ogog
ICAgICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTI5NCw5ICsyODksOSBAQCBwcml2YXRlOgog
ICAgICAgICAgICAgZ2V0TG9jYWxQb3NpdGlvbnMub3BlcmFuZChvcGVyYW5kKSA8IHNldExvY2Fs
UG9zaXRpb25zLm9wZXJhbmQob3BlcmFuZCkpOwogICAgIH0KICAgICAKLSAgICB2b2lkIHJlcG9y
dFZhbGlkYXRpb25Db250ZXh0KE5vZGVJbmRleCBub2RlSW5kZXgpCisgICAgdm9pZCByZXBvcnRW
YWxpZGF0aW9uQ29udGV4dChOb2RlKiBub2RlKQogICAgIHsKLSAgICAgICAgZGF0YUxvZ0YoIkAl
dSIsIG5vZGVJbmRleCk7CisgICAgICAgIGRhdGFMb2dGKCJAJXUiLCBub2RlLT5pbmRleCgpKTsK
ICAgICB9CiAgICAgCiAgICAgZW51bSBCbG9ja1RhZyB7IEJsb2NrIH07CkBAIC0zMDUsOSArMzAw
LDkgQEAgcHJpdmF0ZToKICAgICAgICAgZGF0YUxvZ0YoIkJsb2NrICMldSIsIGJsb2NrSW5kZXgp
OwogICAgIH0KICAgICAKLSAgICB2b2lkIHJlcG9ydFZhbGlkYXRpb25Db250ZXh0KE5vZGVJbmRl
eCBub2RlSW5kZXgsIEVkZ2UgZWRnZSkKKyAgICB2b2lkIHJlcG9ydFZhbGlkYXRpb25Db250ZXh0
KE5vZGUqIG5vZGUsIEVkZ2UgZWRnZSkKICAgICB7Ci0gICAgICAgIGRhdGFMb2dGKCJAJXUgLT4g
JXNAJXUiLCBub2RlSW5kZXgsIHVzZUtpbmRUb1N0cmluZyhlZGdlLnVzZUtpbmQoKSksIGVkZ2Uu
aW5kZXgoKSk7CisgICAgICAgIGRhdGFMb2dGKCJAJXUgLT4gJXNAJXUiLCBub2RlLT5pbmRleCgp
LCB1c2VLaW5kVG9TdHJpbmcoZWRnZS51c2VLaW5kKCkpLCBlZGdlLmluZGV4KCkpOwogICAgIH0K
ICAgICAKICAgICB2b2lkIHJlcG9ydFZhbGlkYXRpb25Db250ZXh0KFZpcnR1YWxSZWdpc3RlciBs
b2NhbCwgQmxvY2tJbmRleCBibG9ja0luZGV4KQpAQCAtMzIyLDI3ICszMTcsMjcgQEAgcHJpdmF0
ZToKICAgICB9CiAgICAgCiAgICAgdm9pZCByZXBvcnRWYWxpZGF0aW9uQ29udGV4dCgKLSAgICAg
ICAgVmlydHVhbFJlZ2lzdGVyIGxvY2FsLCBCbG9ja0luZGV4IHNvdXJjZUJsb2NrSW5kZXgsIE5v
ZGVJbmRleCBwcmV2Tm9kZUluZGV4KQorICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgbG9jYWwsIEJs
b2NrSW5kZXggc291cmNlQmxvY2tJbmRleCwgTm9kZSogcHJldk5vZGUpCiAgICAgewotICAgICAg
ICBkYXRhTG9nRigiQCV1IGZvciByJWQgaW4gQmxvY2sgIyV1IiwgcHJldk5vZGVJbmRleCwgbG9j
YWwsIHNvdXJjZUJsb2NrSW5kZXgpOworICAgICAgICBkYXRhTG9nRigiQCV1IGZvciByJWQgaW4g
QmxvY2sgIyV1IiwgcHJldk5vZGUtPmluZGV4KCksIGxvY2FsLCBzb3VyY2VCbG9ja0luZGV4KTsK
ICAgICB9CiAgICAgCiAgICAgdm9pZCByZXBvcnRWYWxpZGF0aW9uQ29udGV4dCgKLSAgICAgICAg
Tm9kZUluZGV4IG5vZGVJbmRleCwgQmxvY2tJbmRleCBibG9ja0luZGV4KQorICAgICAgICBOb2Rl
KiBub2RlLCBCbG9ja0luZGV4IGJsb2NrSW5kZXgpCiAgICAgewotICAgICAgICBkYXRhTG9nRigi
QCV1IGluIEJsb2NrICMldSIsIG5vZGVJbmRleCwgYmxvY2tJbmRleCk7CisgICAgICAgIGRhdGFM
b2dGKCJAJXUgaW4gQmxvY2sgIyV1Iiwgbm9kZS0+aW5kZXgoKSwgYmxvY2tJbmRleCk7CiAgICAg
fQogICAgIAogICAgIHZvaWQgcmVwb3J0VmFsaWRhdGlvbkNvbnRleHQoCi0gICAgICAgIE5vZGVJ
bmRleCBub2RlSW5kZXgsIE5vZGVJbmRleCBub2RlSW5kZXgyLCBCbG9ja0luZGV4IGJsb2NrSW5k
ZXgpCisgICAgICAgIE5vZGUqIG5vZGUsIE5vZGUqIG5vZGUyLCBCbG9ja0luZGV4IGJsb2NrSW5k
ZXgpCiAgICAgewotICAgICAgICBkYXRhTG9nRigiQCV1IGFuZCBAJXUgaW4gQmxvY2sgIyV1Iiwg
bm9kZUluZGV4LCBub2RlSW5kZXgyLCBibG9ja0luZGV4KTsKKyAgICAgICAgZGF0YUxvZ0YoIkAl
dSBhbmQgQCV1IGluIEJsb2NrICMldSIsIG5vZGUtPmluZGV4KCksIG5vZGUyLT5pbmRleCgpLCBi
bG9ja0luZGV4KTsKICAgICB9CiAgICAgCiAgICAgdm9pZCByZXBvcnRWYWxpZGF0aW9uQ29udGV4
dCgKLSAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRleCwgQmxvY2tJbmRleCBibG9ja0luZGV4LCBO
b2RlSW5kZXggZXhwZWN0ZWROb2RlSW5kZXgsIEVkZ2UgaW5jb21pbmdFZGdlKQorICAgICAgICBO
b2RlKiBub2RlLCBCbG9ja0luZGV4IGJsb2NrSW5kZXgsIE5vZGUqIGV4cGVjdGVkTm9kZSwgRWRn
ZSBpbmNvbWluZ0VkZ2UpCiAgICAgewotICAgICAgICBkYXRhTG9nRigiQCV1IGluIEJsb2NrICMl
dSwgc2VhcmNoaW5nIGZvciBAJXUgZnJvbSBAJXUiLCBub2RlSW5kZXgsIGJsb2NrSW5kZXgsIGV4
cGVjdGVkTm9kZUluZGV4LCBpbmNvbWluZ0VkZ2UuaW5kZXgoKSk7CisgICAgICAgIGRhdGFMb2dG
KCJAJXUgaW4gQmxvY2sgIyV1LCBzZWFyY2hpbmcgZm9yIEAldSBmcm9tIEAldSIsIG5vZGUtPmlu
ZGV4KCksIGJsb2NrSW5kZXgsIGV4cGVjdGVkTm9kZS0+aW5kZXgoKSwgaW5jb21pbmdFZGdlLmlu
ZGV4KCkpOwogICAgIH0KICAgICAKICAgICB2b2lkIGR1bXBEYXRhKHVuc2lnbmVkIHZhbHVlKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYWx1ZVNvdXJjZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYWx1ZVNvdXJjZS5jcHAJKHJl
dmlzaW9uIDE0MDkwNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsdWVTb3Vy
Y2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MCw2ICs2MCw5IEBAIHZvaWQgVmFsdWVTb3VyY2U6
OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkKICAgICBjYXNlIEhhdmVOb2RlOgogICAgICAgICBvdXQu
cHJpbnQoIk5vZGUoIiwgbV92YWx1ZSwgIikiKTsKICAgICAgICAgYnJlYWs7CisgICAgZGVmYXVs
dDoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgYnJlYWs7
CiAgICAgfQogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZpcnR1YWxS
ZWdpc3RlckFsbG9jYXRpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdWaXJ0dWFsUmVnaXN0ZXJBbGxvY2F0aW9uUGhhc2UuY3BwCShyZXZpc2lv
biAxNDA5MDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZpcnR1YWxSZWdpc3Rl
ckFsbG9jYXRpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDcgKzQ4LDcgQEAgcHVi
bGljOgogICAgICAgICBtX2dyYXBoLm1fcHJlc2VydmVkVmFycy5kdW1wKFdURjo6ZGF0YUZpbGUo
KSk7CiAgICAgICAgIGRhdGFMb2dGKCJcbiIpOwogI2VuZGlmCi0gICAgICAgIFNjb3JlQm9hcmQg
c2NvcmVCb2FyZChtX2dyYXBoLCBtX2dyYXBoLm1fcHJlc2VydmVkVmFycyk7CisgICAgICAgIFNj
b3JlQm9hcmQgc2NvcmVCb2FyZChtX2dyYXBoLm1fcHJlc2VydmVkVmFycyk7CiAgICAgICAgIHNj
b3JlQm9hcmQuYXNzZXJ0Q2xlYXIoKTsKICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9O
X1ZFUkJPU0UpCiAgICAgICAgIGJvb2wgbmVlZHNOZXdMaW5lID0gZmFsc2U7CkBAIC02MCw0NyAr
NjAsNDcgQEAgcHVibGljOgogICAgICAgICAgICAgaWYgKCFibG9jay0+aXNSZWFjaGFibGUpCiAg
ICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICBmb3IgKHNpemVfdCBpbmRleElu
QmxvY2sgPSAwOyBpbmRleEluQmxvY2sgPCBibG9jay0+c2l6ZSgpOyArK2luZGV4SW5CbG9jaykg
ewotICAgICAgICAgICAgICAgIE5vZGVJbmRleCBub2RlSW5kZXggPSBibG9jay0+YXQoaW5kZXhJ
bkJsb2NrKTsKKyAgICAgICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPmF0KGluZGV4SW5C
bG9jayk7CiAjaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQogICAgICAg
ICAgICAgICAgIGlmIChuZWVkc05ld0xpbmUpCiAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2dG
KCJcbiIpOwotICAgICAgICAgICAgICAgIGRhdGFMb2dGKCIgICBAJXU6Iiwgbm9kZUluZGV4KTsK
KyAgICAgICAgICAgICAgICBkYXRhTG9nRigiICAgQCV1OiIsIG5vZGUtPmluZGV4KCkpOwogICAg
ICAgICAgICAgICAgIG5lZWRzTmV3TGluZSA9IHRydWU7CiAjZW5kaWYKLSAgICAgICAgICAgICAg
ICBOb2RlJiBub2RlID0gbV9ncmFwaFtub2RlSW5kZXhdOwogICAgICAgICAKLSAgICAgICAgICAg
ICAgICBpZiAoIW5vZGUuc2hvdWxkR2VuZXJhdGUoKSB8fCBub2RlLm9wKCkgPT0gUGhpIHx8IG5v
ZGUub3AoKSA9PSBGbHVzaCkKKyAgICAgICAgICAgICAgICBpZiAoIW5vZGUtPnNob3VsZEdlbmVy
YXRlKCkgfHwgbm9kZS0+b3AoKSA9PSBQaGkgfHwgbm9kZS0+b3AoKSA9PSBGbHVzaCkKICAgICAg
ICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAg
ICAgaWYgKG5vZGUub3AoKSA9PSBHZXRMb2NhbCkKLSAgICAgICAgICAgICAgICAgICAgQVNTRVJU
KCFtX2dyYXBoW25vZGUuY2hpbGQxKCldLmhhc1Jlc3VsdCgpKTsKKyAgICAgICAgICAgICAgICBp
ZiAobm9kZS0+b3AoKSA9PSBHZXRMb2NhbCkKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKCFu
b2RlLT5jaGlsZDEoKS0+aGFzUmVzdWx0KCkpOwogICAgICAgICAgICAgICAgIAogICAgICAgICAg
ICAgICAgIC8vIEZpcnN0LCBjYWxsIHVzZSBvbiBhbGwgb2YgdGhlIGN1cnJlbnQgbm9kZSdzIGNo
aWxkcmVuLCB0aGVuCiAgICAgICAgICAgICAgICAgLy8gYWxsb2NhdGUgYSBWaXJ0dWFsUmVnaXN0
ZXIgZm9yIHRoaXMgbm9kZS4gV2UgZG8gc28gaW4gdGhpcwogICAgICAgICAgICAgICAgIC8vIG9y
ZGVyIHNvIHRoYXQgaWYgYSBjaGlsZCBpcyBvbiBpdHMgbGFzdCB1c2UsIGFuZCBhCiAgICAgICAg
ICAgICAgICAgLy8gVmlydHVhbFJlZ2lzdGVyIGlzIGZyZWVkLCB0aGVuIGl0IG1heSBiZSByZXVz
ZWQgZm9yIG5vZGUuCi0gICAgICAgICAgICAgICAgaWYgKG5vZGUuZmxhZ3MoKSAmIE5vZGVIYXNW
YXJBcmdzKSB7Ci0gICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgY2hpbGRJZHggPSBu
b2RlLmZpcnN0Q2hpbGQoKTsgY2hpbGRJZHggPCBub2RlLmZpcnN0Q2hpbGQoKSArIG5vZGUubnVt
Q2hpbGRyZW4oKTsgY2hpbGRJZHgrKykKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+ZmxhZ3Mo
KSAmIE5vZGVIYXNWYXJBcmdzKSB7CisgICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQg
Y2hpbGRJZHggPSBub2RlLT5maXJzdENoaWxkKCk7IGNoaWxkSWR4IDwgbm9kZS0+Zmlyc3RDaGls
ZCgpICsgbm9kZS0+bnVtQ2hpbGRyZW4oKTsgY2hpbGRJZHgrKykKICAgICAgICAgICAgICAgICAg
ICAgICAgIHNjb3JlQm9hcmQudXNlSWZIYXNSZXN1bHQobV9ncmFwaC5tX3ZhckFyZ0NoaWxkcmVu
W2NoaWxkSWR4XSk7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAg
ICAgc2NvcmVCb2FyZC51c2VJZkhhc1Jlc3VsdChub2RlLmNoaWxkMSgpKTsKLSAgICAgICAgICAg
ICAgICAgICAgc2NvcmVCb2FyZC51c2VJZkhhc1Jlc3VsdChub2RlLmNoaWxkMigpKTsKLSAgICAg
ICAgICAgICAgICAgICAgc2NvcmVCb2FyZC51c2VJZkhhc1Jlc3VsdChub2RlLmNoaWxkMygpKTsK
KyAgICAgICAgICAgICAgICAgICAgc2NvcmVCb2FyZC51c2VJZkhhc1Jlc3VsdChub2RlLT5jaGls
ZDEoKSk7CisgICAgICAgICAgICAgICAgICAgIHNjb3JlQm9hcmQudXNlSWZIYXNSZXN1bHQobm9k
ZS0+Y2hpbGQyKCkpOworICAgICAgICAgICAgICAgICAgICBzY29yZUJvYXJkLnVzZUlmSGFzUmVz
dWx0KG5vZGUtPmNoaWxkMygpKTsKICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAg
ICBpZiAoIW5vZGUuaGFzUmVzdWx0KCkpCisgICAgICAgICAgICAgICAgaWYgKCFub2RlLT5oYXNS
ZXN1bHQoKSkKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgICAgICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyID0gc2NvcmVCb2FyZC5hbGxvY2F0ZSgp
OwogI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKLSAgICAgICAgICAg
ICAgICBkYXRhTG9nRigiIEFzc2lnbmluZyB2aXJ0dWFsIHJlZ2lzdGVyICV1IHRvIG5vZGUgJXUu
IiwKLSAgICAgICAgICAgICAgICAgICAgICAgIHZpcnR1YWxSZWdpc3Rlciwgbm9kZUluZGV4KTsK
KyAgICAgICAgICAgICAgICBkYXRhTG9nRigKKyAgICAgICAgICAgICAgICAgICAgIiBBc3NpZ25p
bmcgdmlydHVhbCByZWdpc3RlciAldSB0byBub2RlICV1LiIsCisgICAgICAgICAgICAgICAgICAg
IHZpcnR1YWxSZWdpc3Rlciwgbm9kZS0+aW5kZXgoKSk7CiAjZW5kaWYKLSAgICAgICAgICAgICAg
ICBub2RlLnNldFZpcnR1YWxSZWdpc3Rlcih2aXJ0dWFsUmVnaXN0ZXIpOworICAgICAgICAgICAg
ICAgIG5vZGUtPnNldFZpcnR1YWxSZWdpc3Rlcih2aXJ0dWFsUmVnaXN0ZXIpOwogICAgICAgICAg
ICAgICAgIC8vICdtdXN0R2VuZXJhdGUnIG5vZGVzIGhhdmUgdGhlaXIgdXNlQ291bnQgYXJ0aWZp
Y2lhbGx5IGVsZXZhdGVkLAogICAgICAgICAgICAgICAgIC8vIGNhbGwgdXNlIG5vdyB0byBhY2Nv
dW50IGZvciB0aGlzLgotICAgICAgICAgICAgICAgIGlmIChub2RlLm11c3RHZW5lcmF0ZSgpKQot
ICAgICAgICAgICAgICAgICAgICBzY29yZUJvYXJkLnVzZShub2RlSW5kZXgpOworICAgICAgICAg
ICAgICAgIGlmIChub2RlLT5tdXN0R2VuZXJhdGUoKSkKKyAgICAgICAgICAgICAgICAgICAgc2Nv
cmVCb2FyZC51c2Uobm9kZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBzY29yZUJvYXJk
LmFzc2VydENsZWFyKCk7CiAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0Z1bmN0aW9uRXhlY3V0YWJsZUR1bXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uRXhlY3V0YWJsZUR1bXAuY3BwCShyZXZpc2lv
biAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25FeGVjdXRhYmxl
RHVtcC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzcgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIkZ1bmN0aW9uRXhlY3V0YWJsZUR1bXAuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK3ZvaWQg
RnVuY3Rpb25FeGVjdXRhYmxlRHVtcDo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAorewor
ICAgIG91dC5wcmludChtX2V4ZWN1dGFibGUtPmluZmVycmVkTmFtZSgpLnN0cmluZygpLCAiIyIs
IG1fZXhlY3V0YWJsZS0+aGFzaEZvcihDb2RlRm9yQ2FsbCksICIvIiwgbV9leGVjdXRhYmxlLT5o
YXNoRm9yKENvZGVGb3JDb25zdHJ1Y3QpLCAiOlsiLCBSYXdQb2ludGVyKG1fZXhlY3V0YWJsZSks
ICJdIik7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9GdW5jdGlvbkV4ZWN1dGFibGVEdW1wLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25FeGVjdXRhYmxlRHVtcC5oCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25FeGVjdXRh
YmxlRHVtcC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ5IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgRnVuY3Rpb25FeGVjdXRhYmxl
RHVtcF9oCisjZGVmaW5lIEZ1bmN0aW9uRXhlY3V0YWJsZUR1bXBfaAorCisjaW5jbHVkZSAiRXhl
Y3V0YWJsZS5oIgorI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgorCituYW1lc3BhY2UgSlND
IHsKKworY2xhc3MgRnVuY3Rpb25FeGVjdXRhYmxlRHVtcCB7CitwdWJsaWM6CisgICAgZXhwbGlj
aXQgRnVuY3Rpb25FeGVjdXRhYmxlRHVtcChGdW5jdGlvbkV4ZWN1dGFibGUqIGV4ZWN1dGFibGUp
CisgICAgICAgIDogbV9leGVjdXRhYmxlKGV4ZWN1dGFibGUpCisgICAgeworICAgIH0KKyAgICAK
KyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKK3ByaXZhdGU6CisgICAgRnVuY3Rp
b25FeGVjdXRhYmxlKiBtX2V4ZWN1dGFibGU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKwor
I2VuZGlmIC8vIEZ1bmN0aW9uRXhlY3V0YWJsZUR1bXBfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5jcHAJKHJldmlzaW9uIDE0MDkwNCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJBcmdMaXN0LmgiCiAjaW5jbHVk
ZSAiQ29kZUNhY2hlLmgiCiAjaW5jbHVkZSAiQ29tbW9uSWRlbnRpZmllcnMuaCIKKyNpbmNsdWRl
ICJERkdMb25nTGl2ZWRTdGF0ZS5oIgogI2luY2x1ZGUgIkRlYnVnZ2VyQWN0aXZhdGlvbi5oIgog
I2luY2x1ZGUgIkZ1bmN0aW9uQ29uc3RydWN0b3IuaCIKICNpbmNsdWRlICJHQ0FjdGl2aXR5Q2Fs
bGJhY2suaCIKQEAgLTI1MSw2ICsyNTIsMTEgQEAgSlNHbG9iYWxEYXRhOjpKU0dsb2JhbERhdGEo
R2xvYmFsRGF0YVR5cAogICAgIAogICAgIGlmIChPcHRpb25zOjplbmFibGVQcm9maWxlcigpKQog
ICAgICAgICBtX3BlckJ5dGVjb2RlUHJvZmlsZXIgPSBhZG9wdFB0cihuZXcgUHJvZmlsZXI6OkRh
dGFiYXNlKCp0aGlzKSk7CisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKyAgICBpZiAoY2FuVXNlSklU
KCkpCisgICAgICAgIG1fZGZnU3RhdGUgPSBhZG9wdFB0cihuZXcgREZHOjpMb25nTGl2ZWRTdGF0
ZSgpKTsKKyNlbmRpZgogfQogCiBKU0dsb2JhbERhdGE6On5KU0dsb2JhbERhdGEoKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmgJKHJldmlzaW9u
IDE0MDkwNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5o
CSh3b3JraW5nIGNvcHkpCkBAIC05MSw2ICs5MSwxMiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBj
bGFzcyBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTsKICAgICBjbGFzcyBVbmxpbmtlZFByb2dy
YW1Db2RlQmxvY2s7CiAKKyNpZiBFTkFCTEUoREZHX0pJVCkKKyAgICBuYW1lc3BhY2UgREZHIHsK
KyAgICBjbGFzcyBMb25nTGl2ZWRTdGF0ZTsKKyAgICB9CisjZW5kaWYgLy8gRU5BQkxFKERGR19K
SVQpCisKICAgICBzdHJ1Y3QgSGFzaFRhYmxlOwogICAgIHN0cnVjdCBJbnN0cnVjdGlvbjsKIApA
QCAtMTg5LDYgKzE5NSwxMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgLy8gVGhlIGhlYXAg
c2hvdWxkIGJlIGp1c3QgYWZ0ZXIgZXhlY3V0YWJsZUFsbG9jYXRvciBhbmQgYmVmb3JlIG90aGVy
IG1lbWJlcnMgdG8gZW5zdXJlIHRoYXQgaXQncwogICAgICAgICAvLyBkZXN0cnVjdGVkIGFmdGVy
IGFsbCB0aGUgb2JqZWN0cyB0aGF0IHJlZmVyZW5jZSBpdC4KICAgICAgICAgSGVhcCBoZWFwOwor
ICAgICAgICAKKyNpZiBFTkFCTEUoREZHX0pJVCkKKyAgICAgICAgT3duUHRyPERGRzo6TG9uZ0xp
dmVkU3RhdGU+IG1fZGZnU3RhdGU7CisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCiAKICAgICAg
ICAgR2xvYmFsRGF0YVR5cGUgZ2xvYmFsRGF0YVR5cGU7CiAgICAgICAgIENsaWVudERhdGEqIGNs
aWVudERhdGE7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>185058</attachid>
            <date>2013-01-28 14:05:34 -0800</date>
            <delta_ts>2013-01-28 15:15:17 -0800</delta_ts>
            <desc>it compiles</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>0</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64"></data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>185080</attachid>
            <date>2013-01-28 15:15:17 -0800</date>
            <delta_ts>2013-01-28 16:36:21 -0800</delta_ts>
            <desc>it runs things</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>0</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64"></data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>185099</attachid>
            <date>2013-01-28 16:36:21 -0800</date>
            <delta_ts>2013-01-28 18:24:50 -0800</delta_ts>
            <desc>1% SunSpider speed-up so far</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>0</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64"></data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>185127</attachid>
            <date>2013-01-28 18:24:50 -0800</date>
            <delta_ts>2013-01-28 21:36:39 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>0</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64"></data>
<flag name="review"
          id="204072"
          type_id="1"
          status="+"
          setter="oliver"
    />
    <flag name="commit-queue"
          id="204080"
          type_id="3"
          status="-"
          setter="buildbot"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>185150</attachid>
            <date>2013-01-28 21:36:39 -0800</date>
            <delta_ts>2013-01-28 22:53:43 -0800</delta_ts>
            <desc>patch for landing</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>0</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64"></data>
<flag name="commit-queue"
          id="204111"
          type_id="3"
          status="-"
          setter="buildbot"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>185166</attachid>
            <date>2013-01-28 22:53:43 -0800</date>
            <delta_ts>2013-01-28 22:53:43 -0800</delta_ts>
            <desc>patch for landing</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>1262450</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTQxMDUyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY3MyBA
QAorMjAxMy0wMS0yOCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IERGRyBzaG91bGQgbm90IHVzZSBhIGdyYXBoIHRoYXQgaXMgYSB2ZWN0b3IsIE5vZGVzIHNob3Vs
ZG4ndCBtb3ZlIGFmdGVyIGFsbG9jYXRpb24sIGFuZCB3ZSBzaG91bGQgYWx3YXlzIHJlZmVyIHRv
IG5vZGVzIGJ5IE5vZGUqCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xMDY4NjgKKworICAgICAgICBSZXZpZXdlZCBieSBPbGl2ZXIgSHVudC4KKyAgICAg
ICAgCisgICAgICAgIFRoaXMgYWRkcyBhIHBvb2wgYWxsb2NhdG9yIGZvciBOb2RlcywgYW5kIHVz
ZXMgdGhhdCBpbnN0ZWFkIG9mIGEgVmVjdG9yLiBDaGFuZ2VzIGFsbAorICAgICAgICB1c2VzIG9m
IE5vZGUmIGFuZCBOb2RlSW5kZXggd2l0aCBzaW1wbHkgTm9kZSouIE5vZGVzIG5vIGxvbmdlciBo
YXZlIGFuIGluZGV4IGV4Y2VwdAorICAgICAgICBmb3IgZGVidWdnaW5nIChOb2RlOjppbmRleCgp
LCB3aGljaCBpcyBub3QgZ3VhcmFudGVlZCB0byBiZSBPKDEpKS4KKyAgICAgICAgCisgICAgICAg
IDElIHNwZWVkLXVwIG9uIFN1blNwaWRlciwgcHJlc3VtYWJseSBiZWNhdXNlIHRoaXMgaW1wcm92
ZXMgY29tcGlsZSB0aW1lcy4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAq
IEdOVW1ha2VmaWxlLmxpc3QuYW06CisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBUYXJnZXQucHJpOgorICAgICAgICAqIGJ5dGVj
b2RlL0RhdGFGb3JtYXQuaDoKKyAgICAgICAgKEpTQzo6ZGF0YUZvcm1hdFRvU3RyaW5nKToKKyAg
ICAgICAgKiBkZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6QWJz
dHJhY3RTdGF0ZTo6aW5pdGlhbGl6ZSk6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RTdGF0
ZTo6Ym9vbGVhblJlc3VsdCk6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RTdGF0ZTo6ZXhl
Y3V0ZSk6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RTdGF0ZTo6bWVyZ2VTdGF0ZUF0VGFp
bCk6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RTdGF0ZTo6bWVyZ2VUb1N1Y2Nlc3NvcnMp
OgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0U3RhdGU6Om1lcmdlVmFyaWFibGVCZXR3ZWVu
QmxvY2tzKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFN0YXRlOjpkdW1wKToKKyAgICAg
ICAgKiBkZmcvREZHQWJzdHJhY3RTdGF0ZS5oOgorICAgICAgICAoREZHKToKKyAgICAgICAgKEpT
Qzo6REZHOjpBYnN0cmFjdFN0YXRlOjpmb3JOb2RlKToKKyAgICAgICAgKEFic3RyYWN0U3RhdGUp
OgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0U3RhdGU6OnNwZWN1bGF0ZUludDMyVW5hcnkp
OgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0U3RhdGU6OnNwZWN1bGF0ZU51bWJlclVuYXJ5
KToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFN0YXRlOjpzcGVjdWxhdGVCb29sZWFuVW5h
cnkpOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0U3RhdGU6OnNwZWN1bGF0ZUludDMyQmlu
YXJ5KToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFN0YXRlOjpzcGVjdWxhdGVOdW1iZXJC
aW5hcnkpOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0U3RhdGU6OnRyeVNldENvbnN0YW50
KToKKyAgICAgICAgKiBkZmcvREZHQWJzdHJhY3RWYWx1ZS5oOgorICAgICAgICAoQWJzdHJhY3RW
YWx1ZSk6CisgICAgICAgICogZGZnL0RGR0FkamFjZW5jeUxpc3QuaDoKKyAgICAgICAgKEpTQzo6
REZHOjpBZGphY2VuY3lMaXN0OjpBZGphY2VuY3lMaXN0KToKKyAgICAgICAgKEpTQzo6REZHOjpB
ZGphY2VuY3lMaXN0Ojppbml0aWFsaXplKToKKyAgICAgICAgKiBkZmcvREZHQWxsb2NhdG9yLmg6
IEFkZGVkLgorICAgICAgICAoREZHKToKKyAgICAgICAgKEFsbG9jYXRvcik6CisgICAgICAgIChK
U0M6OkRGRzo6QWxsb2NhdG9yOjpSZWdpb246OnNpemUpOgorICAgICAgICAoSlNDOjpERkc6OkFs
bG9jYXRvcjo6UmVnaW9uOjpoZWFkZXJTaXplKToKKyAgICAgICAgKEpTQzo6REZHOjpBbGxvY2F0
b3I6OlJlZ2lvbjo6bnVtYmVyT2ZUaGluZ3NQZXJSZWdpb24pOgorICAgICAgICAoSlNDOjpERkc6
OkFsbG9jYXRvcjo6UmVnaW9uOjpkYXRhKToKKyAgICAgICAgKEpTQzo6REZHOjpBbGxvY2F0b3I6
OlJlZ2lvbjo6aXNJblRoaXNSZWdpb24pOgorICAgICAgICAoSlNDOjpERkc6OkFsbG9jYXRvcjo6
UmVnaW9uOjpyZWdpb25Gb3IpOgorICAgICAgICAoUmVnaW9uKToKKyAgICAgICAgKEpTQzo6REZH
Ojo6OkFsbG9jYXRvcik6CisgICAgICAgIChKU0M6OkRGRzo6Ojp+QWxsb2NhdG9yKToKKyAgICAg
ICAgKEpTQzo6REZHOjo6OmFsbG9jYXRlKToKKyAgICAgICAgKEpTQzo6REZHOjo6OmZyZWUpOgor
ICAgICAgICAoSlNDOjpERkc6Ojo6ZnJlZUFsbCk6CisgICAgICAgIChKU0M6OkRGRzo6OjpyZXNl
dCk6CisgICAgICAgIChKU0M6OkRGRzo6OjppbmRleE9mKToKKyAgICAgICAgKEpTQzo6REZHOjo6
OmFsbG9jYXRvck9mKToKKyAgICAgICAgKEpTQzo6REZHOjo6OmJ1bXBBbGxvY2F0ZSk6CisgICAg
ICAgIChKU0M6OkRGRzo6OjpmcmVlTGlzdEFsbG9jYXRlKToKKyAgICAgICAgKEpTQzo6REZHOjo6
OmFsbG9jYXRlU2xvdyk6CisgICAgICAgIChKU0M6OkRGRzo6OjpmcmVlUmVnaW9uc1N0YXJ0aW5n
QXQpOgorICAgICAgICAoSlNDOjpERkc6Ojo6c3RhcnRCdW1waW5nSW4pOgorICAgICAgICAqIGRm
Zy9ERkdBcmd1bWVudHNTaW1wbGlmaWNhdGlvblBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZH
OjpBcmd1bWVudHNTaW1wbGlmaWNhdGlvblBoYXNlOjpydW4pOgorICAgICAgICAoSlNDOjpERkc6
OkFyZ3VtZW50c1NpbXBsaWZpY2F0aW9uUGhhc2U6Om9ic2VydmVCYWRBcmd1bWVudHNVc2UpOgor
ICAgICAgICAoSlNDOjpERkc6OkFyZ3VtZW50c1NpbXBsaWZpY2F0aW9uUGhhc2U6Om9ic2VydmVC
YWRBcmd1bWVudHNVc2VzKToKKyAgICAgICAgKEpTQzo6REZHOjpBcmd1bWVudHNTaW1wbGlmaWNh
dGlvblBoYXNlOjpvYnNlcnZlUHJvcGVyQXJndW1lbnRzVXNlKToKKyAgICAgICAgKEpTQzo6REZH
OjpBcmd1bWVudHNTaW1wbGlmaWNhdGlvblBoYXNlOjppc09LVG9PcHRpbWl6ZSk6CisgICAgICAg
IChKU0M6OkRGRzo6QXJndW1lbnRzU2ltcGxpZmljYXRpb25QaGFzZTo6cmVtb3ZlQXJndW1lbnRz
UmVmZXJlbmNpbmdQaGFudG9tQ2hpbGQpOgorICAgICAgICAqIGRmZy9ERkdBcnJheU1vZGUuY3Bw
OgorICAgICAgICAoSlNDOjpERkc6OkFycmF5TW9kZTo6b3JpZ2luYWxBcnJheVN0cnVjdHVyZSk6
CisgICAgICAgIChKU0M6OkRGRzo6QXJyYXlNb2RlOjphbHJlYWR5Q2hlY2tlZCk6CisgICAgICAg
ICogZGZnL0RGR0FycmF5TW9kZS5oOgorICAgICAgICAoQXJyYXlNb2RlKToKKyAgICAgICAgKiBk
ZmcvREZHQXJyYXlpZnlTbG93UGF0aEdlbmVyYXRvci5oOgorICAgICAgICAoSlNDOjpERkc6OkFy
cmF5aWZ5U2xvd1BhdGhHZW5lcmF0b3I6OkFycmF5aWZ5U2xvd1BhdGhHZW5lcmF0b3IpOgorICAg
ICAgICAqIGRmZy9ERkdCYXNpY0Jsb2NrLmg6CisgICAgICAgIChKU0M6OkRGRzo6QmFzaWNCbG9j
azo6bm9kZSk6CisgICAgICAgIChKU0M6OkRGRzo6QmFzaWNCbG9jazo6aXNJblBoaXMpOgorICAg
ICAgICAoSlNDOjpERkc6OkJhc2ljQmxvY2s6OmlzSW5CbG9jayk6CisgICAgICAgIChCYXNpY0Js
b2NrKToKKyAgICAgICAgKiBkZmcvREZHQmFzaWNCbG9ja0lubGluZXMuaDoKKyAgICAgICAgKERG
Ryk6CisgICAgICAgICogZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcDoKKyAgICAgICAgKEJ5dGVD
b2RlUGFyc2VyKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6Z2V0RGlyZWN0
KToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6Z2V0KToKKyAgICAgICAgKEpT
Qzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6c2V0RGlyZWN0KToKKyAgICAgICAgKEpTQzo6REZHOjpC
eXRlQ29kZVBhcnNlcjo6c2V0KToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6
c2V0UGFpcik6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmluamVjdExhenlP
cGVyYW5kU3BlY3VsYXRpb24pOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpn
ZXRMb2NhbCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OnNldExvY2FsKToK
KyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6Z2V0QXJndW1lbnQpOgorICAgICAg
ICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpzZXRBcmd1bWVudCk6CisgICAgICAgIChKU0M6
OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmZsdXNoRGlyZWN0KToKKyAgICAgICAgKEpTQzo6REZHOjpC
eXRlQ29kZVBhcnNlcjo6Z2V0VG9JbnQzMik6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQ
YXJzZXI6OnRvSW50MzIpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpnZXRK
U0NvbnN0YW50Rm9yVmFsdWUpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpn
ZXRKU0NvbnN0YW50KToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6Z2V0Q2Fs
bGVlKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6Z2V0VGhpcyk6CisgICAg
ICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OnNldFRoaXMpOgorICAgICAgICAoSlNDOjpE
Rkc6OkJ5dGVDb2RlUGFyc2VyOjppc0pTQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpERkc6OkJ5
dGVDb2RlUGFyc2VyOjppc0ludDMyQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVD
b2RlUGFyc2VyOjp2YWx1ZU9mSlNDb25zdGFudCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNv
ZGVQYXJzZXI6OnZhbHVlT2ZJbnQzMkNvbnN0YW50KToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRl
Q29kZVBhcnNlcjo6Y29uc3RhbnRVbmRlZmluZWQpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVD
b2RlUGFyc2VyOjpjb25zdGFudE51bGwpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFy
c2VyOjpvbmUpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpjb25zdGFudE5h
Tik6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmNlbGxDb25zdGFudCk6Cisg
ICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmFkZFRvR3JhcGgpOgorICAgICAgICAo
SlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjppbnNlcnRQaGlOb2RlKToKKyAgICAgICAgKEpTQzo6
REZHOjpCeXRlQ29kZVBhcnNlcjo6YWRkVmFyQXJnQ2hpbGQpOgorICAgICAgICAoSlNDOjpERkc6
OkJ5dGVDb2RlUGFyc2VyOjphZGRDYWxsKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBh
cnNlcjo6YWRkU3RydWN0dXJlVHJhbnNpdGlvbkNoZWNrKToKKyAgICAgICAgKEpTQzo6REZHOjpC
eXRlQ29kZVBhcnNlcjo6Z2V0UHJlZGljdGlvbldpdGhvdXRPU1JFeGl0KToKKyAgICAgICAgKEpT
Qzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6Z2V0UHJlZGljdGlvbik6CisgICAgICAgIChKU0M6OkRG
Rzo6Qnl0ZUNvZGVQYXJzZXI6OmdldEFycmF5TW9kZUFuZEVtaXRDaGVja3MpOgorICAgICAgICAo
SlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjptYWtlU2FmZSk6CisgICAgICAgIChKU0M6OkRGRzo6
Qnl0ZUNvZGVQYXJzZXI6Om1ha2VEaXZTYWZlKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29k
ZVBhcnNlcjo6Q29uc3RhbnRSZWNvcmQ6OkNvbnN0YW50UmVjb3JkKToKKyAgICAgICAgKENvbnN0
YW50UmVjb3JkKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6UGhpU3RhY2tF
bnRyeTo6UGhpU3RhY2tFbnRyeSk6CisgICAgICAgIChQaGlTdGFja0VudHJ5KToKKyAgICAgICAg
KEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6aGFuZGxlQ2FsbCk6CisgICAgICAgIChKU0M6OkRG
Rzo6Qnl0ZUNvZGVQYXJzZXI6OmVtaXRGdW5jdGlvbkNoZWNrcyk6CisgICAgICAgIChKU0M6OkRG
Rzo6Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUlubGluaW5nKToKKyAgICAgICAgKEpTQzo6REZHOjpC
eXRlQ29kZVBhcnNlcjo6c2V0SW50cmluc2ljUmVzdWx0KToKKyAgICAgICAgKEpTQzo6REZHOjpC
eXRlQ29kZVBhcnNlcjo6aGFuZGxlTWluTWF4KToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29k
ZVBhcnNlcjo6aGFuZGxlSW50cmluc2ljKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBh
cnNlcjo6aGFuZGxlR2V0QnlPZmZzZXQpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFy
c2VyOjpoYW5kbGVHZXRCeUlkKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6
Z2V0U2NvcGUpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpwYXJzZVJlc29s
dmVPcGVyYXRpb25zKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6cGFyc2VC
bG9jayk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OnByb2Nlc3NQaGlTdGFj
ayk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmxpbmtCbG9jayk6CisgICAg
ICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OnBhcnNlQ29kZUJsb2NrKToKKyAgICAgICAg
KEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6cGFyc2UpOgorICAgICAgICAqIGRmZy9ERkdDRkFQ
aGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Q0ZBUGhhc2U6OnBlcmZvcm1CbG9ja0NGQSk6
CisgICAgICAgICogZGZnL0RGR0NGR1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwOgorICAgICAgICAo
SlNDOjpERkc6OkNGR1NpbXBsaWZpY2F0aW9uUGhhc2U6OnJ1bik6CisgICAgICAgIChKU0M6OkRG
Rzo6Q0ZHU2ltcGxpZmljYXRpb25QaGFzZTo6a2VlcE9wZXJhbmRBbGl2ZSk6CisgICAgICAgIChK
U0M6OkRGRzo6Q0ZHU2ltcGxpZmljYXRpb25QaGFzZTo6Zml4UG9zc2libGVHZXRMb2NhbCk6Cisg
ICAgICAgIChKU0M6OkRGRzo6Q0ZHU2ltcGxpZmljYXRpb25QaGFzZTo6Zml4UGhpcyk6CisgICAg
ICAgIChKU0M6OkRGRzo6Q0ZHU2ltcGxpZmljYXRpb25QaGFzZTo6cmVtb3ZlUG90ZW50aWFsbHlE
ZWFkUGhpUmVmZXJlbmNlKToKKyAgICAgICAgKEpTQzo6REZHOjpDRkdTaW1wbGlmaWNhdGlvblBo
YXNlOjpPcGVyYW5kU3Vic3RpdHV0aW9uOjpPcGVyYW5kU3Vic3RpdHV0aW9uKToKKyAgICAgICAg
KEpTQzo6REZHOjpDRkdTaW1wbGlmaWNhdGlvblBoYXNlOjpPcGVyYW5kU3Vic3RpdHV0aW9uOjpk
dW1wKToKKyAgICAgICAgKE9wZXJhbmRTdWJzdGl0dXRpb24pOgorICAgICAgICAoSlNDOjpERkc6
OkNGR1NpbXBsaWZpY2F0aW9uUGhhc2U6OnNraXBHZXRMb2NhbCk6CisgICAgICAgIChKU0M6OkRG
Rzo6Q0ZHU2ltcGxpZmljYXRpb25QaGFzZTo6cmVjb3JkTmV3VGFyZ2V0KToKKyAgICAgICAgKEpT
Qzo6REZHOjpDRkdTaW1wbGlmaWNhdGlvblBoYXNlOjpmaXhUYWlsT3BlcmFuZCk6CisgICAgICAg
IChKU0M6OkRGRzo6Q0ZHU2ltcGxpZmljYXRpb25QaGFzZTo6bWVyZ2VCbG9ja3MpOgorICAgICAg
ICAqIGRmZy9ERkdDU0VQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Q1NFUGhhc2U6OmNh
bm9uaWNhbGl6ZSk6CisgICAgICAgIChKU0M6OkRGRzo6Q1NFUGhhc2U6OmVuZEluZGV4Rm9yUHVy
ZUNTRSk6CisgICAgICAgIChKU0M6OkRGRzo6Q1NFUGhhc2U6OnB1cmVDU0UpOgorICAgICAgICAo
SlNDOjpERkc6OkNTRVBoYXNlOjpjb25zdGFudENTRSk6CisgICAgICAgIChKU0M6OkRGRzo6Q1NF
UGhhc2U6OndlYWtDb25zdGFudENTRSk6CisgICAgICAgIChKU0M6OkRGRzo6Q1NFUGhhc2U6Omdl
dENhbGxlZUxvYWRFbGltaW5hdGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6Q1NFUGhhc2U6Omdl
dEFycmF5TGVuZ3RoRWxpbWluYXRpb24pOgorICAgICAgICAoSlNDOjpERkc6OkNTRVBoYXNlOjpn
bG9iYWxWYXJMb2FkRWxpbWluYXRpb24pOgorICAgICAgICAoSlNDOjpERkc6OkNTRVBoYXNlOjpz
Y29wZWRWYXJMb2FkRWxpbWluYXRpb24pOgorICAgICAgICAoSlNDOjpERkc6OkNTRVBoYXNlOjpn
bG9iYWxWYXJXYXRjaHBvaW50RWxpbWluYXRpb24pOgorICAgICAgICAoSlNDOjpERkc6OkNTRVBo
YXNlOjpnbG9iYWxWYXJTdG9yZUVsaW1pbmF0aW9uKToKKyAgICAgICAgKEpTQzo6REZHOjpDU0VQ
aGFzZTo6c2NvcGVkVmFyU3RvcmVFbGltaW5hdGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6Q1NF
UGhhc2U6OmdldEJ5VmFsTG9hZEVsaW1pbmF0aW9uKToKKyAgICAgICAgKEpTQzo6REZHOjpDU0VQ
aGFzZTo6Y2hlY2tGdW5jdGlvbkVsaW1pbmF0aW9uKToKKyAgICAgICAgKEpTQzo6REZHOjpDU0VQ
aGFzZTo6Y2hlY2tFeGVjdXRhYmxlRWxpbWluYXRpb24pOgorICAgICAgICAoSlNDOjpERkc6OkNT
RVBoYXNlOjpjaGVja1N0cnVjdHVyZUVsaW1pbmF0aW9uKToKKyAgICAgICAgKEpTQzo6REZHOjpD
U0VQaGFzZTo6c3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnRFbGltaW5hdGlvbik6CisgICAg
ICAgIChKU0M6OkRGRzo6Q1NFUGhhc2U6OnB1dFN0cnVjdHVyZVN0b3JlRWxpbWluYXRpb24pOgor
ICAgICAgICAoSlNDOjpERkc6OkNTRVBoYXNlOjpnZXRCeU9mZnNldExvYWRFbGltaW5hdGlvbik6
CisgICAgICAgIChKU0M6OkRGRzo6Q1NFUGhhc2U6OnB1dEJ5T2Zmc2V0U3RvcmVFbGltaW5hdGlv
bik6CisgICAgICAgIChKU0M6OkRGRzo6Q1NFUGhhc2U6OmdldFByb3BlcnR5U3RvcmFnZUxvYWRF
bGltaW5hdGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6Q1NFUGhhc2U6OmNoZWNrQXJyYXlFbGlt
aW5hdGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6Q1NFUGhhc2U6OmdldEluZGV4ZWRQcm9wZXJ0
eVN0b3JhZ2VMb2FkRWxpbWluYXRpb24pOgorICAgICAgICAoSlNDOjpERkc6OkNTRVBoYXNlOjpn
ZXRNeVNjb3BlTG9hZEVsaW1pbmF0aW9uKToKKyAgICAgICAgKEpTQzo6REZHOjpDU0VQaGFzZTo6
Z2V0TG9jYWxMb2FkRWxpbWluYXRpb24pOgorICAgICAgICAoSlNDOjpERkc6OkNTRVBoYXNlOjpz
ZXRMb2NhbFN0b3JlRWxpbWluYXRpb24pOgorICAgICAgICAoSlNDOjpERkc6OkNTRVBoYXNlOjpw
ZXJmb3JtU3Vic3RpdHV0aW9uKToKKyAgICAgICAgKEpTQzo6REZHOjpDU0VQaGFzZTo6ZWxpbWlu
YXRlSXJyZWxldmFudFBoYW50b21DaGlsZHJlbik6CisgICAgICAgIChKU0M6OkRGRzo6Q1NFUGhh
c2U6OnNldFJlcGxhY2VtZW50KToKKyAgICAgICAgKEpTQzo6REZHOjpDU0VQaGFzZTo6ZWxpbWlu
YXRlKToKKyAgICAgICAgKEpTQzo6REZHOjpDU0VQaGFzZTo6cGVyZm9ybU5vZGVDU0UpOgorICAg
ICAgICAoSlNDOjpERkc6OkNTRVBoYXNlOjpwZXJmb3JtQmxvY2tDU0UpOgorICAgICAgICAoQ1NF
UGhhc2UpOgorICAgICAgICAqIGRmZy9ERkdDb21tb24uY3BwOiBBZGRlZC4KKyAgICAgICAgKERG
Ryk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZVBvaW50ZXJUcmFpdHM6OmR1bXApOgorICAgICAg
ICAqIGRmZy9ERkdDb21tb24uaDoKKyAgICAgICAgKERGRyk6CisgICAgICAgIChKU0M6OkRGRzo6
Tm9kZVBvaW50ZXJUcmFpdHM6OmRlZmF1bHRWYWx1ZSk6CisgICAgICAgIChOb2RlUG9pbnRlclRy
YWl0cyk6CisgICAgICAgIChKU0M6OkRGRzo6dmVyYm9zZUNvbXBpbGF0aW9uRW5hYmxlZCk6Cisg
ICAgICAgIChKU0M6OkRGRzo6c2hvdWxkRHVtcEdyYXBoQXRFYWNoUGhhc2UpOgorICAgICAgICAo
SlNDOjpERkc6OnZhbGlkYXRpb25FbmFibGVkKToKKyAgICAgICAgKiBkZmcvREZHQ29uc3RhbnRG
b2xkaW5nUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkNvbnN0YW50Rm9sZGluZ1BoYXNl
Ojpmb2xkQ29uc3RhbnRzKToKKyAgICAgICAgKEpTQzo6REZHOjpDb25zdGFudEZvbGRpbmdQaGFz
ZTo6aXNDYXB0dXJlZEF0T3JBZnRlcik6CisgICAgICAgIChKU0M6OkRGRzo6Q29uc3RhbnRGb2xk
aW5nUGhhc2U6OmFkZFN0cnVjdHVyZVRyYW5zaXRpb25DaGVjayk6CisgICAgICAgIChKU0M6OkRG
Rzo6Q29uc3RhbnRGb2xkaW5nUGhhc2U6OnBhaW50VW5yZWFjaGFibGVDb2RlKToKKyAgICAgICAg
KiBkZmcvREZHRGlzYXNzZW1ibGVyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpEaXNhc3NlbWJs
ZXI6OkRpc2Fzc2VtYmxlcik6CisgICAgICAgIChKU0M6OkRGRzo6RGlzYXNzZW1ibGVyOjpjcmVh
dGVEdW1wTGlzdCk6CisgICAgICAgIChKU0M6OkRGRzo6RGlzYXNzZW1ibGVyOjpkdW1wRGlzYXNz
ZW1ibHkpOgorICAgICAgICAqIGRmZy9ERkdEaXNhc3NlbWJsZXIuaDoKKyAgICAgICAgKEpTQzo6
REZHOjpEaXNhc3NlbWJsZXI6OnNldEZvck5vZGUpOgorICAgICAgICAoRGlzYXNzZW1ibGVyKToK
KyAgICAgICAgKiBkZmcvREZHRHJpdmVyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpjb21waWxl
KToKKyAgICAgICAgKiBkZmcvREZHRWRnZS5jcHA6IEFkZGVkLgorICAgICAgICAoREZHKToKKyAg
ICAgICAgKEpTQzo6REZHOjpFZGdlOjpkdW1wKToKKyAgICAgICAgKiBkZmcvREZHRWRnZS5oOgor
ICAgICAgICAoSlNDOjpERkc6OkVkZ2U6OkVkZ2UpOgorICAgICAgICAoSlNDOjpERkc6OkVkZ2U6
Om5vZGUpOgorICAgICAgICAoSlNDOjpERkc6OkVkZ2U6Om9wZXJhdG9yKik6CisgICAgICAgIChK
U0M6OkRGRzo6RWRnZTo6b3BlcmF0b3ItPik6CisgICAgICAgIChFZGdlKToKKyAgICAgICAgKEpT
Qzo6REZHOjpFZGdlOjpzZXROb2RlKToKKyAgICAgICAgKEpTQzo6REZHOjpFZGdlOjp1c2VLaW5k
KToKKyAgICAgICAgKEpTQzo6REZHOjpFZGdlOjpzZXRVc2VLaW5kKToKKyAgICAgICAgKEpTQzo6
REZHOjpFZGdlOjppc1NldCk6CisgICAgICAgIChKU0M6OkRGRzo6RWRnZTo6c2hpZnQpOgorICAg
ICAgICAoSlNDOjpERkc6OkVkZ2U6Om1ha2VXb3JkKToKKyAgICAgICAgKEpTQzo6REZHOjpvcGVy
YXRvcj09KToKKyAgICAgICAgKEpTQzo6REZHOjpvcGVyYXRvciE9KToKKyAgICAgICAgKiBkZmcv
REZHRml4dXBQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Rml4dXBQaGFzZTo6Zml4dXBC
bG9jayk6CisgICAgICAgIChKU0M6OkRGRzo6Rml4dXBQaGFzZTo6Zml4dXBOb2RlKToKKyAgICAg
ICAgKEpTQzo6REZHOjpGaXh1cFBoYXNlOjpjaGVja0FycmF5KToKKyAgICAgICAgKEpTQzo6REZH
OjpGaXh1cFBoYXNlOjpibGVzc0FycmF5T3BlcmF0aW9uKToKKyAgICAgICAgKEpTQzo6REZHOjpG
aXh1cFBoYXNlOjpmaXhJbnRFZGdlKToKKyAgICAgICAgKEpTQzo6REZHOjpGaXh1cFBoYXNlOjpm
aXhEb3VibGVFZGdlKToKKyAgICAgICAgKEpTQzo6REZHOjpGaXh1cFBoYXNlOjppbmplY3RJbnQz
MlRvRG91YmxlTm9kZSk6CisgICAgICAgIChGaXh1cFBoYXNlKToKKyAgICAgICAgKiBkZmcvREZH
R2VuZXJhdGlvbkluZm8uaDoKKyAgICAgICAgKEpTQzo6REZHOjpHZW5lcmF0aW9uSW5mbzo6R2Vu
ZXJhdGlvbkluZm8pOgorICAgICAgICAoSlNDOjpERkc6OkdlbmVyYXRpb25JbmZvOjppbml0Q29u
c3RhbnQpOgorICAgICAgICAoSlNDOjpERkc6OkdlbmVyYXRpb25JbmZvOjppbml0SW50ZWdlcik6
CisgICAgICAgIChKU0M6OkRGRzo6R2VuZXJhdGlvbkluZm86OmluaXRKU1ZhbHVlKToKKyAgICAg
ICAgKEpTQzo6REZHOjpHZW5lcmF0aW9uSW5mbzo6aW5pdENlbGwpOgorICAgICAgICAoSlNDOjpE
Rkc6OkdlbmVyYXRpb25JbmZvOjppbml0Qm9vbGVhbik6CisgICAgICAgIChKU0M6OkRGRzo6R2Vu
ZXJhdGlvbkluZm86OmluaXREb3VibGUpOgorICAgICAgICAoSlNDOjpERkc6OkdlbmVyYXRpb25J
bmZvOjppbml0U3RvcmFnZSk6CisgICAgICAgIChHZW5lcmF0aW9uSW5mbyk6CisgICAgICAgIChK
U0M6OkRGRzo6R2VuZXJhdGlvbkluZm86Om5vZGUpOgorICAgICAgICAoSlNDOjpERkc6OkdlbmVy
YXRpb25JbmZvOjpub3RpY2VPU1JCaXJ0aCk6CisgICAgICAgIChKU0M6OkRGRzo6R2VuZXJhdGlv
bkluZm86OnVzZSk6CisgICAgICAgIChKU0M6OkRGRzo6R2VuZXJhdGlvbkluZm86OmFwcGVuZEZp
bGwpOgorICAgICAgICAoSlNDOjpERkc6OkdlbmVyYXRpb25JbmZvOjphcHBlbmRTcGlsbCk6Cisg
ICAgICAgICogZGZnL0RGR0dyYXBoLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6R3Jh
cGgpOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjp+R3JhcGgpOgorICAgICAgICAoREZHKToK
KyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6ZHVtcENvZGVPcmlnaW4pOgorICAgICAgICAoSlND
OjpERkc6OkdyYXBoOjphbW91bnRPZk5vZGVXaGl0ZVNwYWNlKToKKyAgICAgICAgKEpTQzo6REZH
OjpHcmFwaDo6cHJpbnROb2RlV2hpdGVTcGFjZSk6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6
OmR1bXApOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpkdW1wQmxvY2tIZWFkZXIpOgorICAg
ICAgICAoSlNDOjpERkc6OkdyYXBoOjpyZWZDaGlsZHJlbik6CisgICAgICAgIChKU0M6OkRGRzo6
R3JhcGg6OmRlcmVmQ2hpbGRyZW4pOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpwcmVkaWN0
QXJndW1lbnRUeXBlcyk6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmNvbGxlY3RHYXJiYWdl
KToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6ZGV0ZXJtaW5lUmVhY2hhYmlsaXR5KToKKyAg
ICAgICAgKEpTQzo6REZHOjpHcmFwaDo6cmVzZXRFeGl0U3RhdGVzKToKKyAgICAgICAgKiBkZmcv
REZHR3JhcGguaDoKKyAgICAgICAgKEdyYXBoKToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6
cmVmKToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6ZGVyZWYpOgorICAgICAgICAoSlNDOjpE
Rkc6OkdyYXBoOjpjaGFuZ2VDaGlsZCk6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmNvbXBh
cmVBbmRTd2FwKToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6Y2xlYXJBbmREZXJlZkNoaWxk
KToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6Y2xlYXJBbmREZXJlZkNoaWxkMSk6CisgICAg
ICAgIChKU0M6OkRGRzo6R3JhcGg6OmNsZWFyQW5kRGVyZWZDaGlsZDIpOgorICAgICAgICAoSlND
OjpERkc6OkdyYXBoOjpjbGVhckFuZERlcmVmQ2hpbGQzKToKKyAgICAgICAgKEpTQzo6REZHOjpH
cmFwaDo6Y29udmVydFRvQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpnZXRK
U0NvbnN0YW50U3BlY3VsYXRpb24pOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjphZGRTcGVj
dWxhdGlvbk1vZGUpOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjp2YWx1ZUFkZFNwZWN1bGF0
aW9uTW9kZSk6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmFyaXRoQWRkU3BlY3VsYXRpb25N
b2RlKToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6YWRkU2hvdWxkU3BlY3VsYXRlSW50ZWdl
cik6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6Om11bFNob3VsZFNwZWN1bGF0ZUludGVnZXIp
OgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpuZWdhdGVTaG91bGRTcGVjdWxhdGVJbnRlZ2Vy
KToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6aXNDb25zdGFudCk6CisgICAgICAgIChKU0M6
OkRGRzo6R3JhcGg6OmlzSlNDb25zdGFudCk6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6Omlz
SW50MzJDb25zdGFudCk6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmlzRG91YmxlQ29uc3Rh
bnQpOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjppc051bWJlckNvbnN0YW50KToKKyAgICAg
ICAgKEpTQzo6REZHOjpHcmFwaDo6aXNCb29sZWFuQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpE
Rkc6OkdyYXBoOjppc0NlbGxDb25zdGFudCk6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6Omlz
RnVuY3Rpb25Db25zdGFudCk6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmlzSW50ZXJuYWxG
dW5jdGlvbkNvbnN0YW50KToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6dmFsdWVPZkpTQ29u
c3RhbnQpOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjp2YWx1ZU9mSW50MzJDb25zdGFudCk6
CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OnZhbHVlT2ZOdW1iZXJDb25zdGFudCk6CisgICAg
ICAgIChKU0M6OkRGRzo6R3JhcGg6OnZhbHVlT2ZCb29sZWFuQ29uc3RhbnQpOgorICAgICAgICAo
SlNDOjpERkc6OkdyYXBoOjp2YWx1ZU9mRnVuY3Rpb25Db25zdGFudCk6CisgICAgICAgIChKU0M6
OkRGRzo6R3JhcGg6OnZhbHVlUHJvZmlsZUZvcik6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6
Om1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGVGb3IpOgorICAgICAgICAoSlNDOjpERkc6Okdy
YXBoOjpudW1TdWNjZXNzb3JzKToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6c3VjY2Vzc29y
KToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6c3VjY2Vzc29yRm9yQ29uZGl0aW9uKToKKyAg
ICAgICAgKEpTQzo6REZHOjpHcmFwaDo6aXNQcmVkaWN0ZWROdW1lcmljYWwpOgorICAgICAgICAo
SlNDOjpERkc6OkdyYXBoOjpieVZhbElzUHVyZSk6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6
OmNsb2JiZXJzV29ybGQpOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjp2YXJBcmdOdW1DaGls
ZHJlbik6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6Om51bUNoaWxkcmVuKToKKyAgICAgICAg
KEpTQzo6REZHOjpHcmFwaDo6dmFyQXJnQ2hpbGQpOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBo
OjpjaGlsZCk6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OnZvdGVOb2RlKToKKyAgICAgICAg
KEpTQzo6REZHOjpHcmFwaDo6dm90ZUNoaWxkcmVuKToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFw
aDo6c3Vic3RpdHV0ZSk6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OnN1YnN0aXR1dGVHZXRM
b2NhbCk6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmFkZEltbWVkaWF0ZVNob3VsZFNwZWN1
bGF0ZUludGVnZXIpOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjptdWxJbW1lZGlhdGVTaG91
bGRTcGVjdWxhdGVJbnRlZ2VyKToKKyAgICAgICAgKiBkZmcvREZHSW5zZXJ0aW9uU2V0Lmg6Cisg
ICAgICAgIChKU0M6OkRGRzo6SW5zZXJ0aW9uOjpJbnNlcnRpb24pOgorICAgICAgICAoSlNDOjpE
Rkc6Okluc2VydGlvbjo6ZWxlbWVudCk6CisgICAgICAgIChJbnNlcnRpb24pOgorICAgICAgICAo
SlNDOjpERkc6Okluc2VydGlvblNldDo6aW5zZXJ0KToKKyAgICAgICAgKEluc2VydGlvblNldCk6
CisgICAgICAgICogZGZnL0RGR0pJVENvbXBpbGVyLmNwcDoKKyAgICAgICAgKiBkZmcvREZHSklU
Q29tcGlsZXIuaDoKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6c2V0Rm9yTm9kZSk6
CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6OmFkZHJlc3NPZkRvdWJsZUNvbnN0YW50
KToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6bm90aWNlT1NSRW50cnkpOgorICAg
ICAgICAqIGRmZy9ERkdMb25nTGl2ZWRTdGF0ZS5jcHA6IEFkZGVkLgorICAgICAgICAoREZHKToK
KyAgICAgICAgKEpTQzo6REZHOjpMb25nTGl2ZWRTdGF0ZTo6TG9uZ0xpdmVkU3RhdGUpOgorICAg
ICAgICAoSlNDOjpERkc6OkxvbmdMaXZlZFN0YXRlOjp+TG9uZ0xpdmVkU3RhdGUpOgorICAgICAg
ICAoSlNDOjpERkc6OkxvbmdMaXZlZFN0YXRlOjpzaHJpbmtUb0ZpdCk6CisgICAgICAgICogZGZn
L0RGR0xvbmdMaXZlZFN0YXRlLmg6IEFkZGVkLgorICAgICAgICAoREZHKToKKyAgICAgICAgKExv
bmdMaXZlZFN0YXRlKToKKyAgICAgICAgKiBkZmcvREZHTWluaWZpZWRJRC5oOgorICAgICAgICAo
SlNDOjpERkc6Ok1pbmlmaWVkSUQ6Ok1pbmlmaWVkSUQpOgorICAgICAgICAoSlNDOjpERkc6Ok1p
bmlmaWVkSUQ6Om5vZGUpOgorICAgICAgICAqIGRmZy9ERkdNaW5pZmllZE5vZGUuY3BwOgorICAg
ICAgICAoSlNDOjpERkc6Ok1pbmlmaWVkTm9kZTo6ZnJvbU5vZGUpOgorICAgICAgICAqIGRmZy9E
RkdNaW5pZmllZE5vZGUuaDoKKyAgICAgICAgKE1pbmlmaWVkTm9kZSk6CisgICAgICAgICogZGZn
L0RGR05vZGUuY3BwOiBBZGRlZC4KKyAgICAgICAgKERGRyk6CisgICAgICAgIChKU0M6OkRGRzo6
Tm9kZTo6aW5kZXgpOgorICAgICAgICAoV1RGKToKKyAgICAgICAgKFdURjo6cHJpbnRJbnRlcm5h
bCk6CisgICAgICAgICogZGZnL0RGR05vZGUuaDoKKyAgICAgICAgKERGRyk6CisgICAgICAgIChK
U0M6OkRGRzo6Tm9kZTo6Tm9kZSk6CisgICAgICAgIChOb2RlKToKKyAgICAgICAgKEpTQzo6REZH
OjpOb2RlOjpjb252ZXJ0VG9HZXRCeU9mZnNldCk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6
Y29udmVydFRvUHV0QnlPZmZzZXQpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OnJlZik6Cisg
ICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6c2hvdWxkU3BlY3VsYXRlSW50ZWdlcik6CisgICAgICAg
IChKU0M6OkRGRzo6Tm9kZTo6c2hvdWxkU3BlY3VsYXRlSW50ZWdlckZvckFyaXRobWV0aWMpOgor
ICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OnNob3VsZFNwZWN1bGF0ZUludGVnZXJFeHBlY3RpbmdE
ZWZpbmVkKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpzaG91bGRTcGVjdWxhdGVEb3VibGVG
b3JBcml0aG1ldGljKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpzaG91bGRTcGVjdWxhdGVO
dW1iZXIpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OnNob3VsZFNwZWN1bGF0ZU51bWJlckV4
cGVjdGluZ0RlZmluZWQpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OnNob3VsZFNwZWN1bGF0
ZUZpbmFsT2JqZWN0KToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpzaG91bGRTcGVjdWxhdGVB
cnJheSk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6ZHVtcENoaWxkcmVuKToKKyAgICAgICAg
KFdURik6CisgICAgICAgICogZGZnL0RGR05vZGVBbGxvY2F0b3IuaDogQWRkZWQuCisgICAgICAg
IChERkcpOgorICAgICAgICAob3BlcmF0b3IgbmV3ICk6CisgICAgICAgICogZGZnL0RGR09TUkV4
aXQuY3BwOgorICAgICAgICAoSlNDOjpERkc6Ok9TUkV4aXQ6Ok9TUkV4aXQpOgorICAgICAgICAq
IGRmZy9ERkdPU1JFeGl0Lmg6CisgICAgICAgIChPU1JFeGl0KToKKyAgICAgICAgKFNwZWN1bGF0
aW9uRmFpbHVyZURlYnVnSW5mbyk6CisgICAgICAgICogZGZnL0RGR09TUkV4aXRDb21waWxlci5j
cHA6CisgICAgICAgICogZGZnL0RGR09TUkV4aXRDb21waWxlcjMyXzY0LmNwcDoKKyAgICAgICAg
KEpTQzo6REZHOjpPU1JFeGl0Q29tcGlsZXI6OmNvbXBpbGVFeGl0KToKKyAgICAgICAgKiBkZmcv
REZHT1NSRXhpdENvbXBpbGVyNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6Ok9TUkV4aXRDb21w
aWxlcjo6Y29tcGlsZUV4aXQpOgorICAgICAgICAqIGRmZy9ERkdPcGVyYXRpb25zLmNwcDoKKyAg
ICAgICAgKiBkZmcvREZHUGhhc2UuY3BwOgorICAgICAgICAoREZHKToKKyAgICAgICAgKEpTQzo6
REZHOjpQaGFzZTo6YmVnaW5QaGFzZSk6CisgICAgICAgIChKU0M6OkRGRzo6UGhhc2U6OmVuZFBo
YXNlKToKKyAgICAgICAgKiBkZmcvREZHUGhhc2UuaDoKKyAgICAgICAgKFBoYXNlKToKKyAgICAg
ICAgKEpTQzo6REZHOjpydW5BbmRMb2cpOgorICAgICAgICAqIGRmZy9ERkdQcmVkaWN0aW9uUHJv
cGFnYXRpb25QaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6UHJlZGljdGlvblByb3BhZ2F0
aW9uUGhhc2U6OnNldFByZWRpY3Rpb24pOgorICAgICAgICAoSlNDOjpERkc6OlByZWRpY3Rpb25Q
cm9wYWdhdGlvblBoYXNlOjptZXJnZVByZWRpY3Rpb24pOgorICAgICAgICAoSlNDOjpERkc6OlBy
ZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlOjppc05vdE5lZ1plcm8pOgorICAgICAgICAoSlNDOjpE
Rkc6OlByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlOjppc05vdFplcm8pOgorICAgICAgICAoSlND
OjpERkc6OlByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlOjppc1dpdGhpblBvd2VyT2ZUd29Gb3JD
b25zdGFudCk6CisgICAgICAgIChKU0M6OkRGRzo6UHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2U6
OmlzV2l0aGluUG93ZXJPZlR3b05vblJlY3Vyc2l2ZSk6CisgICAgICAgIChKU0M6OkRGRzo6UHJl
ZGljdGlvblByb3BhZ2F0aW9uUGhhc2U6OmlzV2l0aGluUG93ZXJPZlR3byk6CisgICAgICAgIChK
U0M6OkRGRzo6UHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2U6OnByb3BhZ2F0ZSk6CisgICAgICAg
IChKU0M6OkRGRzo6UHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2U6Om1lcmdlRGVmYXVsdEZsYWdz
KToKKyAgICAgICAgKEpTQzo6REZHOjpQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZTo6cHJvcGFn
YXRlRm9yd2FyZCk6CisgICAgICAgIChKU0M6OkRGRzo6UHJlZGljdGlvblByb3BhZ2F0aW9uUGhh
c2U6OnByb3BhZ2F0ZUJhY2t3YXJkKToKKyAgICAgICAgKEpTQzo6REZHOjpQcmVkaWN0aW9uUHJv
cGFnYXRpb25QaGFzZTo6ZG9Eb3VibGVWb3RpbmcpOgorICAgICAgICAoUHJlZGljdGlvblByb3Bh
Z2F0aW9uUGhhc2UpOgorICAgICAgICAoSlNDOjpERkc6OlByZWRpY3Rpb25Qcm9wYWdhdGlvblBo
YXNlOjpkb1JvdW5kT2ZEb3VibGVWb3RpbmcpOgorICAgICAgICAqIGRmZy9ERkdTY29yZUJvYXJk
Lmg6CisgICAgICAgIChKU0M6OkRGRzo6U2NvcmVCb2FyZDo6U2NvcmVCb2FyZCk6CisgICAgICAg
IChKU0M6OkRGRzo6U2NvcmVCb2FyZDo6dXNlKToKKyAgICAgICAgKEpTQzo6REZHOjpTY29yZUJv
YXJkOjp1c2VJZkhhc1Jlc3VsdCk6CisgICAgICAgIChTY29yZUJvYXJkKToKKyAgICAgICAgKiBk
ZmcvREZHU2lsZW50UmVnaXN0ZXJTYXZlUGxhbi5oOgorICAgICAgICAoSlNDOjpERkc6OlNpbGVu
dFJlZ2lzdGVyU2F2ZVBsYW46OlNpbGVudFJlZ2lzdGVyU2F2ZVBsYW4pOgorICAgICAgICAoSlND
OjpERkc6OlNpbGVudFJlZ2lzdGVyU2F2ZVBsYW46Om5vZGUpOgorICAgICAgICAoU2lsZW50UmVn
aXN0ZXJTYXZlUGxhbik6CisgICAgICAgICogZGZnL0RGR1Nsb3dQYXRoR2VuZXJhdG9yLmg6Cisg
ICAgICAgIChKU0M6OkRGRzo6U2xvd1BhdGhHZW5lcmF0b3I6OlNsb3dQYXRoR2VuZXJhdG9yKToK
KyAgICAgICAgKEpTQzo6REZHOjpTbG93UGF0aEdlbmVyYXRvcjo6Z2VuZXJhdGUpOgorICAgICAg
ICAoU2xvd1BhdGhHZW5lcmF0b3IpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5j
cHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OlNwZWN1bGF0aXZlSklUKToK
KyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRpb25DaGVjayk6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0aW9uV2F0Y2hwb2ludCk6
CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbnZlcnRMYXN0T1NSRXhpdFRv
Rm9yd2FyZCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmZvcndhcmRTcGVj
dWxhdGlvbkNoZWNrKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6dGVybWlu
YXRlU3BlY3VsYXRpdmVFeGVjdXRpb24pOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZl
SklUOjpzaWxlbnRTYXZlUGxhbkZvckdQUik6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRp
dmVKSVQ6OnNpbGVudFNhdmVQbGFuRm9yRlBSKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxh
dGl2ZUpJVDo6c2lsZW50U3BpbGwpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklU
OjpzaWxlbnRGaWxsKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y2hlY2tB
cnJheSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmFycmF5aWZ5KToKKyAg
ICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZmlsbFN0b3JhZ2UpOgorICAgICAgICAo
SlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjp1c2VDaGlsZHJlbik6CisgICAgICAgIChKU0M6OkRG
Rzo6U3BlY3VsYXRpdmVKSVQ6OmlzU3RyaWN0SW50MzIpOgorICAgICAgICAoSlNDOjpERkc6OlNw
ZWN1bGF0aXZlSklUOjppc0tub3duSW50ZWdlcik6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3Vs
YXRpdmVKSVQ6OmlzS25vd25OdW1lcmljKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2
ZUpJVDo6aXNLbm93bkNlbGwpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpp
c0tub3duTm90Q2VsbCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmlzS25v
d25Ob3RJbnRlZ2VyKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6aXNLbm93
bk5vdE51bWJlcik6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OndyaXRlQmFy
cmllcik6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZl
Q29tcGFyZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0
aXZlU3RyaWN0RXEpOgorICAgICAgICAoSlNDOjpERkc6OkdQUlRlbXBvcmFyeTo6R1BSVGVtcG9y
YXJ5KToKKyAgICAgICAgKEpTQzo6REZHOjpGUFJUZW1wb3Jhcnk6OkZQUlRlbXBvcmFyeSk6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQZWVwSG9sZURvdWJsZUJy
YW5jaCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQZWVwSG9s
ZU9iamVjdEVxdWFsaXR5KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZVBlZXBIb2xlSW50ZWdlckJyYW5jaCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVQZWVwSG9sZUJyYW5jaCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3Vs
YXRpdmVKSVQ6Om5vdGljZU9TUkJpcnRoKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZU1vdkhpbnQpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklU
Ojpjb21waWxlKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y2hlY2tBcmd1
bWVudFR5cGVzKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcHV0ZVZh
bHVlUmVjb3ZlcnlGb3IpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21w
aWxlRG91YmxlUHV0QnlWYWwpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpj
b21waWxlR2V0Q2hhckNvZGVBdCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGVHZXRCeVZhbE9uU3RyaW5nKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2
ZUpJVDo6Y2hlY2tHZW5lcmF0ZWRUeXBlRm9yVG9JbnQzMik6CisgICAgICAgIChKU0M6OkRGRzo6
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVWYWx1ZVRvSW50MzIpOgorICAgICAgICAoSlNDOjpERkc6
OlNwZWN1bGF0aXZlSklUOjpjb21waWxlVUludDMyVG9OdW1iZXIpOgorICAgICAgICAoSlNDOjpE
Rkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlRG91YmxlQXNJbnQzMik6CisgICAgICAgIChKU0M6
OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVJbnQzMlRvRG91YmxlKToKKyAgICAgICAgKEpT
Qzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25JbnRUeXBlZEFycmF5KToK
KyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVB1dEJ5VmFsRm9ySW50
VHlwZWRBcnJheSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVH
ZXRCeVZhbE9uRmxvYXRUeXBlZEFycmF5KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZVB1dEJ5VmFsRm9yRmxvYXRUeXBlZEFycmF5KToKKyAgICAgICAgKEpTQzo6
REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUluc3RhbmNlT2ZGb3JPYmplY3QpOgorICAgICAg
ICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlSW5zdGFuY2VPZik6CisgICAgICAg
IChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVTb2Z0TW9kdWxvKToKKyAgICAgICAg
KEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFkZCk6CisgICAgICAgIChKU0M6OkRG
Rzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBcml0aFN1Yik6CisgICAgICAgIChKU0M6OkRGRzo6
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBcml0aE5lZ2F0ZSk6CisgICAgICAgIChKU0M6OkRGRzo6
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBcml0aE11bCk6CisgICAgICAgIChKU0M6OkRGRzo6U3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGVJbnRlZ2VyQXJpdGhEaXZGb3JYODYpOgorICAgICAgICAoSlND
OjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlQXJpdGhNb2QpOgorICAgICAgICAoSlNDOjpE
Rkc6OlNwZWN1bGF0aXZlSklUOjpjb21wYXJlKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZVN0cmljdEVxRm9yQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpERkc6
OlNwZWN1bGF0aXZlSklUOjpjb21waWxlU3RyaWN0RXEpOgorICAgICAgICAoSlNDOjpERkc6OlNw
ZWN1bGF0aXZlSklUOjpjb21waWxlR2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZSk6CisgICAgICAg
IChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uQXJndW1lbnRzKToK
KyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEFyZ3VtZW50c0xl
bmd0aCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRBcnJh
eUxlbmd0aCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVOZXdG
dW5jdGlvbk5vQ2hlY2spOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21w
aWxlTmV3RnVuY3Rpb25FeHByZXNzaW9uKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZVJlZ0V4cEV4ZWMpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZl
SklUOjpjb21waWxlQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpERkc6
OlNwZWN1bGF0aXZlSklUOjpjb21waWxlUmVhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZSk6CisgICAg
ICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmg6CisgICAgICAgIChTcGVjdWxhdGl2ZUpJVCk6
CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNhblJldXNlKToKKyAgICAgICAg
KEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6aXNGaWxsZWQpOgorICAgICAgICAoSlNDOjpERkc6
OlNwZWN1bGF0aXZlSklUOjppc0ZpbGxlZERvdWJsZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3Bl
Y3VsYXRpdmVKSVQ6OnVzZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6Omlz
Q29uc3RhbnQpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjppc0pTQ29uc3Rh
bnQpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjppc0ludDMyQ29uc3RhbnQp
OgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjppc0RvdWJsZUNvbnN0YW50KToK
KyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6aXNOdW1iZXJDb25zdGFudCk6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmlzQm9vbGVhbkNvbnN0YW50KToKKyAg
ICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6aXNGdW5jdGlvbkNvbnN0YW50KToKKyAg
ICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6dmFsdWVPZkludDMyQ29uc3RhbnQpOgor
ICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjp2YWx1ZU9mTnVtYmVyQ29uc3RhbnQp
OgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjp2YWx1ZU9mTnVtYmVyQ29uc3Rh
bnRBc0ludDMyKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6YWRkcmVzc09m
RG91YmxlQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjp2YWx1
ZU9mSlNDb25zdGFudCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OnZhbHVl
T2ZCb29sZWFuQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjp2
YWx1ZU9mRnVuY3Rpb25Db25zdGFudCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVK
SVQ6OmlzTnVsbENvbnN0YW50KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6
dmFsdWVPZkpTQ29uc3RhbnRBc0ltbTY0KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2
ZUpJVDo6ZGV0ZWN0UGVlcEhvbGVCcmFuY2gpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0
aXZlSklUOjppbnRlZ2VyUmVzdWx0KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJ
VDo6bm9SZXN1bHQpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjZWxsUmVz
dWx0KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Ym9vbGVhblJlc3VsdCk6
CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmpzVmFsdWVSZXN1bHQpOgorICAg
ICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpzdG9yYWdlUmVzdWx0KToKKyAgICAgICAg
KEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZG91YmxlUmVzdWx0KToKKyAgICAgICAgKEpTQzo6
REZHOjpTcGVjdWxhdGl2ZUpJVDo6aW5pdENvbnN0YW50SW5mbyk6CisgICAgICAgIChKU0M6OkRG
Rzo6U3BlY3VsYXRpdmVKSVQ6OmFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2spOgorICAgICAg
ICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjppc0ludGVnZXIpOgorICAgICAgICAoSlNDOjpE
Rkc6OlNwZWN1bGF0aXZlSklUOjp0ZW1wb3JhcnlSZWdpc3RlckZvclB1dEJ5VmFsKToKKyAgICAg
ICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZW1pdEFsbG9jYXRlQmFzaWNTdG9yYWdlKToK
KyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6c2V0Tm9kZUZvck9wZXJhbmQpOgor
ICAgICAgICAoSlNDOjpERkc6OkludGVnZXJPcGVyYW5kOjpJbnRlZ2VyT3BlcmFuZCk6CisgICAg
ICAgIChKU0M6OkRGRzo6SW50ZWdlck9wZXJhbmQ6Om5vZGUpOgorICAgICAgICAoSlNDOjpERkc6
OkludGVnZXJPcGVyYW5kOjpncHIpOgorICAgICAgICAoSlNDOjpERkc6OkludGVnZXJPcGVyYW5k
Ojp1c2UpOgorICAgICAgICAoSW50ZWdlck9wZXJhbmQpOgorICAgICAgICAoSlNDOjpERkc6OkRv
dWJsZU9wZXJhbmQ6OkRvdWJsZU9wZXJhbmQpOgorICAgICAgICAoSlNDOjpERkc6OkRvdWJsZU9w
ZXJhbmQ6Om5vZGUpOgorICAgICAgICAoSlNDOjpERkc6OkRvdWJsZU9wZXJhbmQ6OmZwcik6Cisg
ICAgICAgIChKU0M6OkRGRzo6RG91YmxlT3BlcmFuZDo6dXNlKToKKyAgICAgICAgKERvdWJsZU9w
ZXJhbmQpOgorICAgICAgICAoSlNDOjpERkc6OkpTVmFsdWVPcGVyYW5kOjpKU1ZhbHVlT3BlcmFu
ZCk6CisgICAgICAgIChKU0M6OkRGRzo6SlNWYWx1ZU9wZXJhbmQ6Om5vZGUpOgorICAgICAgICAo
SlNDOjpERkc6OkpTVmFsdWVPcGVyYW5kOjpncHIpOgorICAgICAgICAoSlNDOjpERkc6OkpTVmFs
dWVPcGVyYW5kOjpmaWxsKToKKyAgICAgICAgKEpTQzo6REZHOjpKU1ZhbHVlT3BlcmFuZDo6dXNl
KToKKyAgICAgICAgKEpTVmFsdWVPcGVyYW5kKToKKyAgICAgICAgKEpTQzo6REZHOjpTdG9yYWdl
T3BlcmFuZDo6U3RvcmFnZU9wZXJhbmQpOgorICAgICAgICAoSlNDOjpERkc6OlN0b3JhZ2VPcGVy
YW5kOjpub2RlKToKKyAgICAgICAgKEpTQzo6REZHOjpTdG9yYWdlT3BlcmFuZDo6Z3ByKToKKyAg
ICAgICAgKEpTQzo6REZHOjpTdG9yYWdlT3BlcmFuZDo6dXNlKToKKyAgICAgICAgKFN0b3JhZ2VP
cGVyYW5kKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZDo6U3Bl
Y3VsYXRlSW50ZWdlck9wZXJhbmQpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0ZUludGVn
ZXJPcGVyYW5kOjpub2RlKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGVJbnRlZ2VyT3Bl
cmFuZDo6Z3ByKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZDo6
dXNlKToKKyAgICAgICAgKFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kKToKKyAgICAgICAgKEpTQzo6
REZHOjpTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQ6OlNwZWN1bGF0ZVN0cmljdEludDMyT3Bl
cmFuZCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kOjpu
b2RlKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQ6Omdw
cik6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kOjp1c2Up
OgorICAgICAgICAoU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kKToKKyAgICAgICAgKEpTQzo6
REZHOjpTcGVjdWxhdGVEb3VibGVPcGVyYW5kOjpTcGVjdWxhdGVEb3VibGVPcGVyYW5kKToKKyAg
ICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGVEb3VibGVPcGVyYW5kOjpub2RlKToKKyAgICAgICAg
KEpTQzo6REZHOjpTcGVjdWxhdGVEb3VibGVPcGVyYW5kOjpmcHIpOgorICAgICAgICAoSlNDOjpE
Rkc6OlNwZWN1bGF0ZURvdWJsZU9wZXJhbmQ6OnVzZSk6CisgICAgICAgIChTcGVjdWxhdGVEb3Vi
bGVPcGVyYW5kKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGVDZWxsT3BlcmFuZDo6U3Bl
Y3VsYXRlQ2VsbE9wZXJhbmQpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0ZUNlbGxPcGVy
YW5kOjpub2RlKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGVDZWxsT3BlcmFuZDo6Z3By
KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGVDZWxsT3BlcmFuZDo6dXNlKToKKyAgICAg
ICAgKFNwZWN1bGF0ZUNlbGxPcGVyYW5kKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGVC
b29sZWFuT3BlcmFuZDo6U3BlY3VsYXRlQm9vbGVhbk9wZXJhbmQpOgorICAgICAgICAoSlNDOjpE
Rkc6OlNwZWN1bGF0ZUJvb2xlYW5PcGVyYW5kOjpub2RlKToKKyAgICAgICAgKEpTQzo6REZHOjpT
cGVjdWxhdGVCb29sZWFuT3BlcmFuZDo6Z3ByKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxh
dGVCb29sZWFuT3BlcmFuZDo6dXNlKToKKyAgICAgICAgKFNwZWN1bGF0ZUJvb2xlYW5PcGVyYW5k
KToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHA6CisgICAgICAgIChK
U0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmZpbGxJbnRlZ2VyKToKKyAgICAgICAgKEpTQzo6REZH
OjpTcGVjdWxhdGl2ZUpJVDo6ZmlsbERvdWJsZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3Vs
YXRpdmVKSVQ6OmZpbGxKU1ZhbHVlKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJ
VDo6bm9uU3BlY3VsYXRpdmVWYWx1ZVRvTnVtYmVyKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVj
dWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVWYWx1ZVRvSW50MzIpOgorICAgICAgICAoSlNDOjpE
Rkc6OlNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZVVJbnQzMlRvTnVtYmVyKToKKyAgICAg
ICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y2FjaGVkUHV0QnlJZCk6CisgICAgICAgIChK
U0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlTm9uUGVlcGhvbGVDb21wYXJl
TnVsbCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZl
UGVlcGhvbGVCcmFuY2hOdWxsKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6
bm9uU3BlY3VsYXRpdmVDb21wYXJlTnVsbCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRp
dmVKSVQ6Om5vblNwZWN1bGF0aXZlUGVlcGhvbGVCcmFuY2gpOgorICAgICAgICAoSlNDOjpERkc6
OlNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZU5vblBlZXBob2xlQ29tcGFyZSk6CisgICAg
ICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlUGVlcGhvbGVTdHJp
Y3RFcSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZl
Tm9uUGVlcGhvbGVTdHJpY3RFcSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6
OmVtaXRDYWxsKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1
bGF0ZUludEludGVybmFsKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Zmls
bFNwZWN1bGF0ZUludCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmZpbGxT
cGVjdWxhdGVJbnRTdHJpY3QpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpm
aWxsU3BlY3VsYXRlRG91YmxlKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6
ZmlsbFNwZWN1bGF0ZUNlbGwpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpm
aWxsU3BlY3VsYXRlQm9vbGVhbik6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGVPYmplY3RFcXVhbGl0eSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVPYmplY3RUb09iamVjdE9yT3RoZXJFcXVhbGl0eSk6CisgICAgICAgIChKU0M6
OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQZWVwSG9sZU9iamVjdFRvT2JqZWN0T3JPdGhl
ckVxdWFsaXR5KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUlu
dGVnZXJDb21wYXJlKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZURvdWJsZUNvbXBhcmUpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21w
aWxlVmFsdWVBZGQpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxl
Tm9uU3RyaW5nQ2VsbE9yT3RoZXJMb2dpY2FsTm90KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZUxvZ2ljYWxOb3QpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1
bGF0aXZlSklUOjplbWl0Tm9uU3RyaW5nQ2VsbE9yT3RoZXJCcmFuY2gpOgorICAgICAgICAoSlND
OjpERkc6OlNwZWN1bGF0aXZlSklUOjplbWl0QnJhbmNoKToKKyAgICAgICAgKEpTQzo6REZHOjpT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUNvbnRpZ3VvdXNQdXRCeVZhbCk6CisgICAgICAgIChKU0M6
OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxh
dGl2ZUpJVDY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZmlsbElu
dGVnZXIpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpmaWxsRG91YmxlKToK
KyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZmlsbEpTVmFsdWUpOgorICAgICAg
ICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZVZhbHVlVG9OdW1iZXIp
OgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZVZhbHVl
VG9JbnQzMik6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0
aXZlVUludDMyVG9OdW1iZXIpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpj
YWNoZWRQdXRCeUlkKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6bm9uU3Bl
Y3VsYXRpdmVOb25QZWVwaG9sZUNvbXBhcmVOdWxsKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVj
dWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVQZWVwaG9sZUJyYW5jaE51bGwpOgorICAgICAgICAo
SlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZUNvbXBhcmVOdWxsKToKKyAg
ICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVQZWVwaG9sZUJy
YW5jaCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZl
Tm9uUGVlcGhvbGVDb21wYXJlKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6
bm9uU3BlY3VsYXRpdmVQZWVwaG9sZVN0cmljdEVxKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVj
dWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVOb25QZWVwaG9sZVN0cmljdEVxKToKKyAgICAgICAg
KEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwpOgorICAgICAgICAoSlNDOjpERkc6
OlNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlSW50SW50ZXJuYWwpOgorICAgICAgICAoSlND
OjpERkc6OlNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlSW50KToKKyAgICAgICAgKEpTQzo6
REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUludFN0cmljdCk6CisgICAgICAgIChK
U0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVEb3VibGUpOgorICAgICAgICAo
SlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlQ2VsbCk6CisgICAgICAgIChK
U0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVCb29sZWFuKToKKyAgICAgICAg
KEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU9iamVjdEVxdWFsaXR5KToKKyAgICAg
ICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU9iamVjdFRvT2JqZWN0T3JPdGhl
ckVxdWFsaXR5KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVBl
ZXBIb2xlT2JqZWN0VG9PYmplY3RPck90aGVyRXF1YWxpdHkpOgorICAgICAgICAoSlNDOjpERkc6
OlNwZWN1bGF0aXZlSklUOjpjb21waWxlSW50ZWdlckNvbXBhcmUpOgorICAgICAgICAoSlNDOjpE
Rkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlRG91YmxlQ29tcGFyZSk6CisgICAgICAgIChKU0M6
OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVWYWx1ZUFkZCk6CisgICAgICAgIChKU0M6OkRG
Rzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVOb25TdHJpbmdDZWxsT3JPdGhlckxvZ2ljYWxOb3Qp
OgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlTG9naWNhbE5vdCk6
CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmVtaXROb25TdHJpbmdDZWxsT3JP
dGhlckJyYW5jaCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmVtaXRCcmFu
Y2gpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlKToKKyAgICAg
ICAgKiBkZmcvREZHU3RydWN0dXJlQWJzdHJhY3RWYWx1ZS5oOgorICAgICAgICAoU3RydWN0dXJl
QWJzdHJhY3RWYWx1ZSk6CisgICAgICAgICogZGZnL0RGR1N0cnVjdHVyZUNoZWNrSG9pc3RpbmdQ
aGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJlQ2hlY2tIb2lzdGluZ1BoYXNl
OjpydW4pOgorICAgICAgICAqIGRmZy9ERkdWYWxpZGF0ZS5jcHA6CisgICAgICAgIChERkcpOgor
ICAgICAgICAoVmFsaWRhdGUpOgorICAgICAgICAoSlNDOjpERkc6OlZhbGlkYXRlOjp2YWxpZGF0
ZSk6CisgICAgICAgIChKU0M6OkRGRzo6VmFsaWRhdGU6OnJlcG9ydFZhbGlkYXRpb25Db250ZXh0
KToKKyAgICAgICAgKiBkZmcvREZHVmFsaWRhdGUuaDoKKyAgICAgICAgKiBkZmcvREZHVmFsdWVT
b3VyY2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlZhbHVlU291cmNlOjpkdW1wKToKKyAgICAg
ICAgKiBkZmcvREZHVmFsdWVTb3VyY2UuaDoKKyAgICAgICAgKEpTQzo6REZHOjpWYWx1ZVNvdXJj
ZTo6VmFsdWVTb3VyY2UpOgorICAgICAgICAqIGRmZy9ERkdWaXJ0dWFsUmVnaXN0ZXJBbGxvY2F0
aW9uUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlZpcnR1YWxSZWdpc3RlckFsbG9jYXRp
b25QaGFzZTo6cnVuKToKKyAgICAgICAgKiBydW50aW1lL0Z1bmN0aW9uRXhlY3V0YWJsZUR1bXAu
Y3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQyk6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uRXhlY3V0
YWJsZUR1bXA6OmR1bXApOgorICAgICAgICAqIHJ1bnRpbWUvRnVuY3Rpb25FeGVjdXRhYmxlRHVt
cC5oOiBBZGRlZC4KKyAgICAgICAgKEpTQyk6CisgICAgICAgIChGdW5jdGlvbkV4ZWN1dGFibGVE
dW1wKToKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25FeGVjdXRhYmxlRHVtcDo6RnVuY3Rpb25FeGVj
dXRhYmxlRHVtcCk6CisgICAgICAgICogcnVudGltZS9KU0dsb2JhbERhdGEuY3BwOgorICAgICAg
ICAoSlNDOjpKU0dsb2JhbERhdGE6OkpTR2xvYmFsRGF0YSk6CisgICAgICAgICogcnVudGltZS9K
U0dsb2JhbERhdGEuaDoKKyAgICAgICAgKEpTQyk6CisgICAgICAgIChERkcpOgorICAgICAgICAo
SlNHbG9iYWxEYXRhKToKKyAgICAgICAgKiBydW50aW1lL09wdGlvbnMuaDoKKyAgICAgICAgKEpT
Qyk6CisKIDIwMTMtMDEtMjggIEdlb2ZmcmV5IEdhcmVuICA8Z2dhcmVuQGFwcGxlLmNvbT4KIAog
ICAgICAgICBTdGF0aWMgc2l6ZSBpbmZlcmVuY2UgZm9yIEphdmFTY3JpcHQgb2JqZWN0cwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gMTQxMDUyKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC03
OCw2ICs3OCw3IEBAIHNldChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgZGZnL0RGR0Fzc2Vt
Ymx5SGVscGVycy5jcHAKICAgICBkZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCiAgICAgZGZnL0RG
R0NhcGFiaWxpdGllcy5jcHAKKyAgICBkZmcvREZHQ29tbW9uLmNwcAogICAgIGRmZy9ERkdDRkFQ
aGFzZS5jcHAKICAgICBkZmcvREZHQ0ZHU2ltcGxpZmljYXRpb25QaGFzZS5jcHAKICAgICBkZmcv
REZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwCkBAIC04NSwxMCArODYsMTMgQEAgc2V0KEphdmFT
Y3JpcHRDb3JlX1NPVVJDRVMKICAgICBkZmcvREZHRGlzYXNzZW1ibGVyLmNwcAogICAgIGRmZy9E
RkdEb21pbmF0b3JzLmNwcAogICAgIGRmZy9ERkdEcml2ZXIuY3BwCisgICAgZGZnL0RGR0VkZ2Uu
Y3BwCiAgICAgZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCiAgICAgZGZnL0RGR0dyYXBoLmNwcAogICAg
IGRmZy9ERkdKSVRDb21waWxlci5jcHAKKyAgICBkZmcvREZHTG9uZ0xpdmVkU3RhdGUuY3BwCiAg
ICAgZGZnL0RGR01pbmlmaWVkTm9kZS5jcHAKKyAgICBkZmcvREZHTm9kZS5jcHAKICAgICBkZmcv
REZHTm9kZUZsYWdzLmNwcAogICAgIGRmZy9ERkdPU1JFbnRyeS5jcHAKICAgICBkZmcvREZHT1NS
RXhpdC5jcHAKQEAgLTIxNyw2ICsyMjEsNyBAQCBzZXQoSmF2YVNjcmlwdENvcmVfU09VUkNFUwog
ICAgIHJ1bnRpbWUvRXhjZXB0aW9uSGVscGVycy5jcHAKICAgICBydW50aW1lL0V4ZWN1dGFibGUu
Y3BwCiAgICAgcnVudGltZS9GdW5jdGlvbkNvbnN0cnVjdG9yLmNwcAorICAgIHJ1bnRpbWUvRnVu
Y3Rpb25FeGVjdXRhYmxlRHVtcC5jcHAKICAgICBydW50aW1lL0Z1bmN0aW9uUHJvdG90eXBlLmNw
cAogICAgIHJ1bnRpbWUvR0NBY3Rpdml0eUNhbGxiYWNrLmNwcAogICAgIHJ1bnRpbWUvR2V0dGVy
U2V0dGVyLmNwcApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3Qu
YW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3Qu
YW0JKHJldmlzaW9uIDE0MTA1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmls
ZS5saXN0LmFtCSh3b3JraW5nIGNvcHkpCkBAIC0xNjgsNiArMTY4LDcgQEAgamF2YXNjcmlwdGNv
cmVfc291cmNlcyArPSBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0
YXRlLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RWYWx1ZS5oIFwK
IAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FkamFjZW5jeUxpc3QuaCBcCisJU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBbGxvY2F0b3IuaCBcCiAJU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdBcmd1bWVudFBvc2l0aW9uLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQXJndW1lbnRzU2ltcGxpZmljYXRpb25QaGFzZS5jcHAgXAogCVNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQXJndW1lbnRzU2ltcGxpZmljYXRpb25QaGFzZS5oIFwKQEAgLTE4OSw2
ICsxOTAsNyBAQCBqYXZhc2NyaXB0Y29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0NhcGFiaWxpdGllcy5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0NGQVBoYXNlLmNwcCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDRkFQaGFz
ZS5oIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbi5jcHAgXAogCVNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmggXApAQCAtMjAxLDYgKzIwMyw3IEBAIGph
dmFzY3JpcHRjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
RG91YmxlRm9ybWF0U3RhdGUuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2
ZXIuY3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZlci5oIFwKKwlTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0VkZ2UuY3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0VkZ2UuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGUFJJbmZv
LmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAgXApAQCAt
MjEyLDExICsyMTUsMTUgQEAgamF2YXNjcmlwdGNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdJbnNlcnRpb25TZXQuaCBcCiAJU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAgXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHSklUQ29tcGlsZXIuaCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdMb25nTGl2
ZWRTdGF0ZS5jcHAgXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTG9uZ0xpdmVkU3Rh
dGUuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdNaW5pZmllZEdyYXBoLmggXAog
CVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTWluaWZpZWRJRC5oIFwKIAlTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR01pbmlmaWVkTm9kZS5jcHAgXAogCVNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHTWluaWZpZWROb2RlLmggXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHTm9kZS5jcHAgXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oIFwKKwlT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVBbGxvY2F0b3IuaCBcCiAJU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlRmxhZ3MuY3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR05vZGVGbGFncy5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05v
ZGVUeXBlLmggXApAQCAtNTgwLDYgKzU4Nyw4IEBAIGphdmFzY3JpcHRjb3JlX3NvdXJjZXMgKz0g
XAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGlvbkhhcm5lc3MuaCBcCiAJ
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25Db25zdHJ1Y3Rvci5jcHAgXAog
CVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uQ29uc3RydWN0b3IuaCBcCisJ
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25FeGVjdXRhYmxlRHVtcC5jcHAg
XAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uRXhlY3V0YWJsZUR1bXAu
aCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25Qcm90b3R5cGUuY3Bw
IFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvblByb3RvdHlwZS5oIFwK
IAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HQ0FjdGl2aXR5Q2FsbGJhY2suY3BwIFwK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9UYXJnZXQucHJpCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9UYXJnZXQucHJpCShyZXZpc2lvbiAxNDEwNTIpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvVGFyZ2V0LnByaQkod29ya2luZyBjb3B5KQpAQCAtMTE0LDYgKzEx
NCw3IEBAIFNPVVJDRVMgKz0gXAogICAgIGRmZy9ERkdBc3NlbWJseUhlbHBlcnMuY3BwIFwKICAg
ICBkZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwIFwKICAgICBkZmcvREZHQ2FwYWJpbGl0aWVzLmNw
cCBcCisgICAgZGZnL0RGR0NvbW1vbi5jcHAgXAogICAgIGRmZy9ERkdDRkFQaGFzZS5jcHAgXAog
ICAgIGRmZy9ERkdDRkdTaW1wbGlmaWNhdGlvblBoYXNlLmNwcCBcCiAgICAgZGZnL0RGR0NvbnN0
YW50Rm9sZGluZ1BoYXNlLmNwcCBcCkBAIC0xMjEsMTAgKzEyMiwxMyBAQCBTT1VSQ0VTICs9IFwK
ICAgICBkZmcvREZHRGlzYXNzZW1ibGVyLmNwcCBcCiAgICAgZGZnL0RGR0RvbWluYXRvcnMuY3Bw
IFwKICAgICBkZmcvREZHRHJpdmVyLmNwcCBcCisgICAgZGZnL0RGR0VkZ2UuY3BwIFwKICAgICBk
ZmcvREZHRml4dXBQaGFzZS5jcHAgXAogICAgIGRmZy9ERkdHcmFwaC5jcHAgXAogICAgIGRmZy9E
RkdKSVRDb21waWxlci5jcHAgXAorICAgIGRmZy9ERkdMb25nTGl2ZWRTdGF0ZS5jcHAgXAogICAg
IGRmZy9ERkdNaW5pZmllZE5vZGUuY3BwIFwKKyAgICBkZmcvREZHTm9kZS5jcHAgXAogICAgIGRm
Zy9ERkdOb2RlRmxhZ3MuY3BwIFwKICAgICBkZmcvREZHT3BlcmF0aW9ucy5jcHAgXAogICAgIGRm
Zy9ERkdPU1JFbnRyeS5jcHAgXApAQCAtMjM1LDYgKzIzOSw3IEBAIFNPVVJDRVMgKz0gXAogICAg
IHJ1bnRpbWUvRXhjZXB0aW9uSGVscGVycy5jcHAgXAogICAgIHJ1bnRpbWUvRXhlY3V0YWJsZS5j
cHAgXAogICAgIHJ1bnRpbWUvRnVuY3Rpb25Db25zdHJ1Y3Rvci5jcHAgXAorICAgIHJ1bnRpbWUv
RnVuY3Rpb25FeGVjdXRhYmxlRHVtcC5jcHAgXAogICAgIHJ1bnRpbWUvRnVuY3Rpb25Qcm90b3R5
cGUuY3BwIFwKICAgICBydW50aW1lL0dDQWN0aXZpdHlDYWxsYmFjay5jcHAgXAogICAgIHJ1bnRp
bWUvR2V0dGVyU2V0dGVyLmNwcCBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNj
cmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagko
cmV2aXNpb24gMTQxMDUyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTI2NCw2ICsyNjQs
MTMgQEAKIAkJMEZFQjNFQ0YxNjIzN0Y2QzAwQUI2N0FEIC8qIE1hY3JvQXNzZW1ibGVyLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUIzRUNFMTYy
MzdGNjcwMEFCNjdBRCAvKiBNYWNyb0Fzc2VtYmxlci5jcHAgKi87IH07CiAJCTBGRUZDOUFBMTY4
MUEzQjMwMDU2N0Y1MyAvKiBERkdPU1JFeGl0SnVtcFBsYWNlaG9sZGVyLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUZDOUE3MTY4MUEzQjAwMDU2
N0Y1MyAvKiBERkdPU1JFeGl0SnVtcFBsYWNlaG9sZGVyLmNwcCAqLzsgfTsKIAkJMEZFRkM5QUIx
NjgxQTNCNjAwNTY3RjUzIC8qIERGR09TUkV4aXRKdW1wUGxhY2Vob2xkZXIuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUZDOUE4MTY4MUEzQjAwMDU2
N0Y1MyAvKiBERkdPU1JFeGl0SnVtcFBsYWNlaG9sZGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZGMEYxOTkxNkI3MjlGNjAwNURGOTVCIC8q
IERGR0xvbmdMaXZlZFN0YXRlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGQjRCNTFDMTZCNjI3NzIwMDNGNjk2QiAvKiBERkdMb25nTGl2ZWRTdGF0
ZS5jcHAgKi87IH07CisJCTBGRjBGMTlCMTZCNzI5RkEwMDVERjk1QiAvKiBERkdMb25nTGl2ZWRT
dGF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZC
NEI1MUQxNkI2Mjc3MjAwM0Y2OTZCIC8qIERGR0xvbmdMaXZlZFN0YXRlLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZGMEYxOUMxNkI3MkEwMzAw
NURGOTVCIC8qIERGR05vZGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZCNEI1MUUxNkI2Mjc3MjAwM0Y2OTZCIC8qIERGR05vZGUuY3BwICovOyB9
OworCQkwRkYwRjE5RDE2QjcyQTA4MDA1REY5NUIgLyogREZHQ29tbW9uLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQjRCNTFBMTZCNjI3NzIwMDNG
Njk2QiAvKiBERkdDb21tb24uY3BwICovOyB9OworCQkwRkYwRjE5RTE2QjcyQTBCMDA1REY5NUIg
LyogREZHRWRnZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRkI0QjUxQjE2QjYyNzcyMDAzRjY5NkIgLyogREZHRWRnZS5jcHAgKi87IH07CisJCTBG
RjBGMTlGMTZCNzJBMTcwMDVERjk1QiAvKiBGdW5jdGlvbkV4ZWN1dGFibGVEdW1wLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQjRCNTIxMTZCNjI3
OEQwMDNGNjk2QiAvKiBGdW5jdGlvbkV4ZWN1dGFibGVEdW1wLmNwcCAqLzsgfTsKKwkJMEZGMEYx
QTAxNkI3MkExQTAwNURGOTVCIC8qIEZ1bmN0aW9uRXhlY3V0YWJsZUR1bXAuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQjRCNTIyMTZCNjI3OEQwMDNG
Njk2QiAvKiBGdW5jdGlvbkV4ZWN1dGFibGVEdW1wLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZGNDI3MzExNThFQkQ1NDAwNENCOUZGIC8qIERp
c2Fzc2VtYmxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEZGNDI3MkYxNThFQkQ0NDAwNENCOUZGIC8qIERpc2Fzc2VtYmxlci5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGRjQyNzMyMTU4RUJENTgw
MDRDQjlGRiAvKiBVRGlzODZEaXNhc3NlbWJsZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZGNDI3MzAxNThFQkQ0NDAwNENCOUZGIC8qIFVEaXM4
NkRpc2Fzc2VtYmxlci5jcHAgKi87IH07CiAJCTBGRjQyNzQwMTU4RUJFOEIwMDRDQjlGRiAvKiB1
ZGlzODZfZGVjb2RlLmMgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRkY0MjczNDE1OEVCRDk0MDA0Q0I5RkYgLyogdWRpczg2X2RlY29kZS5jICovOyB9OwpA
QCAtMTA4MCw2ICsxMDg3LDE1IEBACiAJCTBGQjEwNTg5MTY3NTQ4MkUwMEY4QUI2RSAvKiBQcm9m
aWxlck9TUkV4aXRTaXRlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9
IFByb2ZpbGVyT1NSRXhpdFNpdGUuY3BwOyBwYXRoID0gcHJvZmlsZXIvUHJvZmlsZXJPU1JFeGl0
U2l0ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQjEwNThBMTY3NTQ4MkUw
MEY4QUI2RSAvKiBQcm9maWxlck9TUkV4aXRTaXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IFByb2ZpbGVyT1NSRXhpdFNpdGUuaDsgcGF0aCA9IHByb2ZpbGVyL1Byb2ZpbGVy
T1NSRXhpdFNpdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZCNEI1MTAxNkIz
QTk2NDAwM0Y2OTZCIC8qIERGR01pbmlmaWVkSUQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gREZHTWluaWZpZWRJRC5oOyBwYXRoID0gZGZnL0RGR01pbmlmaWVkSUQuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZCNEI1MTkxNkI2Mjc3MjAwM0Y2OTZCIC8qIERG
R0FsbG9jYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdBbGxvY2F0
b3IuaDsgcGF0aCA9IGRmZy9ERkdBbGxvY2F0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMEZCNEI1MUExNkI2Mjc3MjAwM0Y2OTZCIC8qIERGR0NvbW1vbi5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdDb21tb24uY3BwOyBwYXRoID0gZGZnL0RG
R0NvbW1vbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGQjRCNTFCMTZCNjI3
NzIwMDNGNjk2QiAvKiBERkdFZGdlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
bmFtZSA9IERGR0VkZ2UuY3BwOyBwYXRoID0gZGZnL0RGR0VkZ2UuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkwRkI0QjUxQzE2QjYyNzcyMDAzRjY5NkIgLyogREZHTG9uZ0xpdmVk
U3RhdGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHTG9uZ0xp
dmVkU3RhdGUuY3BwOyBwYXRoID0gZGZnL0RGR0xvbmdMaXZlZFN0YXRlLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZCNEI1MUQxNkI2Mjc3MjAwM0Y2OTZCIC8qIERGR0xvbmdM
aXZlZFN0YXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0xvbmdMaXZl
ZFN0YXRlLmg7IHBhdGggPSBkZmcvREZHTG9uZ0xpdmVkU3RhdGUuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMEZCNEI1MUUxNkI2Mjc3MjAwM0Y2OTZCIC8qIERGR05vZGUuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHTm9kZS5jcHA7IHBhdGggPSBk
ZmcvREZHTm9kZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGQjRCNTFGMTZC
NjI3NzIwMDNGNjk2QiAvKiBERkdOb2RlQWxsb2NhdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgbmFtZSA9IERGR05vZGVBbGxvY2F0b3IuaDsgcGF0aCA9IGRmZy9ERkdOb2RlQWxsb2Nh
dG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGQjRCNTIxMTZCNjI3OEQwMDNG
Njk2QiAvKiBGdW5jdGlvbkV4ZWN1dGFibGVEdW1wLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IEZ1bmN0aW9uRXhlY3V0YWJsZUR1bXAuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkwRkI0QjUyMjE2QjYyNzhEMDAzRjY5NkIgLyogRnVuY3Rpb25FeGVj
dXRhYmxlRHVtcC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGdW5jdGlvbkV4
ZWN1dGFibGVEdW1wLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQjU0Njc2MTRG
NTlBRDEwMDJDMjk4OSAvKiBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRkI1NDY3ODE0RjVDNDY4MDAyQzI5ODkgLyogTGF6eU9wZXJh
bmRWYWx1ZVByb2ZpbGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
TGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRkI1NDY3QTE0RjVDN0Q0MDAyQzI5ODkgLyogTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmls
ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNZXRob2RPZkdldHRpbmdBVmFs
dWVQcm9maWxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yMzMzLDYgKzIzNDks
OCBAQAogCQkJCTBGMjFDMjdBMTRCRTcyNzMwMEFEQzY0QiAvKiBFeGVjdXRpb25IYXJuZXNzLmgg
Ki8sCiAJCQkJQkMyNjgwQzAwRTE2RDRFOTAwQTA2RTkyIC8qIEZ1bmN0aW9uQ29uc3RydWN0b3Iu
Y3BwICovLAogCQkJCUJDMjY4MEMxMEUxNkQ0RTkwMEEwNkU5MiAvKiBGdW5jdGlvbkNvbnN0cnVj
dG9yLmggKi8sCisJCQkJMEZCNEI1MjExNkI2Mjc4RDAwM0Y2OTZCIC8qIEZ1bmN0aW9uRXhlY3V0
YWJsZUR1bXAuY3BwICovLAorCQkJCTBGQjRCNTIyMTZCNjI3OEQwMDNGNjk2QiAvKiBGdW5jdGlv
bkV4ZWN1dGFibGVEdW1wLmggKi8sCiAJCQkJRjY5MkE4NUMwMjU1NTk3RDAxRkY2MEY3IC8qIEZ1
bmN0aW9uUHJvdG90eXBlLmNwcCAqLywKIAkJCQlGNjkyQTg1RDAyNTU1OTdEMDFGRjYwRjcgLyog
RnVuY3Rpb25Qcm90b3R5cGUuaCAqLywKIAkJCQlDMkQ1OEMzMzE1OTEyRkVFMDAyMUE4NDQgLyog
R0NBY3Rpdml0eUNhbGxiYWNrLmNwcCAqLywKQEAgLTIzNTksNiArMjM3Nyw5IEBACiAJCQkJQkM3
RjhGQkEwRTE5RDFFRjAwODYzMkMwIC8qIEpTQ2VsbC5jcHAgKi8sCiAJCQkJQkMxMTY3RDgwRTE5
QkNDOTAwODA2NkREIC8qIEpTQ2VsbC5oICovLAogCQkJCTBGOTc0OTZGMTY4N0FERTIwMEE0RkY2
QSAvKiBKU0NlbGxJbmxpbmVzLmggKi8sCisJCQkJRjY5MkE4ODcwMjU1NTk3RDAxRkY2MEY3IC8q
IEpTQ0pTVmFsdWUuY3BwICovLAorCQkJCTE0QUJCMzZFMDk5QzA3NjQwMEUyQTI0RiAvKiBKU0NK
U1ZhbHVlLmggKi8sCisJCQkJODY1QTMwRjAxMzUwMDdFMTAwQ0RCNDlFIC8qIEpTQ0pTVmFsdWVJ
bmxpbmVzLmggKi8sCiAJCQkJOTc4OEZDMjIxNDcxQUQwQzAwNjhDRTJEIC8qIEpTRGF0ZU1hdGgu
Y3BwICovLAogCQkJCTk3ODhGQzIzMTQ3MUFEMEMwMDY4Q0UyRCAvKiBKU0RhdGVNYXRoLmggKi8s
CiAJCQkJQzJBN0Y2ODcxNjA0MzJENDAwRjc2Qjk4IC8qIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0Lmgg
Ki8sCkBAIC0yMzk4LDkgKzI0MTksNiBAQAogCQkJCTBGOTE5RDBBMTU3RUUwOUQwMDRBNEU3RCAv
KiBKU1N5bWJvbFRhYmxlT2JqZWN0LmggKi8sCiAJCQkJMTRBQkI0NTQwOTlDMkEwRjAwRTJBMjRG
IC8qIEpTVHlwZS5oICovLAogCQkJCTY1MDdEMjk3MEU4NzFFNEEwMEQ3RDg5NiAvKiBKU1R5cGVJ
bmZvLmggKi8sCi0JCQkJRjY5MkE4ODcwMjU1NTk3RDAxRkY2MEY3IC8qIEpTQ0pTVmFsdWUuY3Bw
ICovLAotCQkJCTE0QUJCMzZFMDk5QzA3NjQwMEUyQTI0RiAvKiBKU0NKU1ZhbHVlLmggKi8sCi0J
CQkJODY1QTMwRjAxMzUwMDdFMTAwQ0RCNDlFIC8qIEpTQ0pTVmFsdWVJbmxpbmVzLmggKi8sCiAJ
CQkJQkMyMkEzOUEwRTE2RTE0ODAwQUYyMUM4IC8qIEpTVmFyaWFibGVPYmplY3QuY3BwICovLAog
CQkJCTE0RjI1MjU2MEQwOEREOEQwMDRFQ0ZGRiAvKiBKU1ZhcmlhYmxlT2JqZWN0LmggKi8sCiAJ
CQkJMTQ0MjU2NUYxNUVERTk4RDAwNjZBNDlCIC8qIEpTV2l0aFNjb3BlLmNwcCAqLywKQEAgLTI1
NTEsNiArMjU2OSw3IEBACiAJCQkJMEY2MjAxNkUxNDNGQ0QyRjAwNjhCNzdDIC8qIERGR0Fic3Ry
YWN0U3RhdGUuaCAqLywKIAkJCQkwRjYyMDE2RjE0M0ZDRDJGMDA2OEI3N0MgLyogREZHQWJzdHJh
Y3RWYWx1ZS5oICovLAogCQkJCTBGNjZFMTY4MTRERjNGMTMwMEI3QjJFNCAvKiBERkdBZGphY2Vu
Y3lMaXN0LmggKi8sCisJCQkJMEZCNEI1MTkxNkI2Mjc3MjAwM0Y2OTZCIC8qIERGR0FsbG9jYXRv
ci5oICovLAogCQkJCTBGMUUzQTQzMTUzNENCQUQwMDBGOTQ1NiAvKiBERkdBcmd1bWVudFBvc2l0
aW9uLmggKi8sCiAJCQkJMEYxNjAxNUExNTYxOThCRjAwQzI1ODdDIC8qIERGR0FyZ3VtZW50c1Np
bXBsaWZpY2F0aW9uUGhhc2UuY3BwICovLAogCQkJCTBGMTYwMTVCMTU2MTk4QkYwMEMyNTg3QyAv
KiBERkdBcmd1bWVudHNTaW1wbGlmaWNhdGlvblBoYXNlLmggKi8sCkBAIC0yNTcyLDYgKzI1OTEs
NyBAQAogCQkJCTBGRkZDOTRDMTRFRjkwOTUwMEM3MjUzMiAvKiBERkdDRkFQaGFzZS5oICovLAog
CQkJCTBGM0IzQTI0MTU0NEM5OTEwMDNFRDBGRiAvKiBERkdDRkdTaW1wbGlmaWNhdGlvblBoYXNl
LmNwcCAqLywKIAkJCQkwRjNCM0EyNTE1NDRDOTkxMDAzRUQwRkYgLyogREZHQ0ZHU2ltcGxpZmlj
YXRpb25QaGFzZS5oICovLAorCQkJCTBGQjRCNTFBMTZCNjI3NzIwMDNGNjk2QiAvKiBERkdDb21t
b24uY3BwICovLAogCQkJCTBGQzA5NzdFMTQ2OUVCQzQwMENGMjQ0MiAvKiBERkdDb21tb24uaCAq
LywKIAkJCQkwRjNCM0ExNzE1M0U2OEVGMDAzRUQwRkYgLyogREZHQ29uc3RhbnRGb2xkaW5nUGhh
c2UuY3BwICovLAogCQkJCTBGM0IzQTE4MTUzRTY4RUYwMDNFRDBGRiAvKiBERkdDb25zdGFudEZv
bGRpbmdQaGFzZS5oICovLApAQCAtMjU4NCw2ICsyNjA0LDcgQEAKIAkJCQkwRjFFM0E0NDE1MzRD
QkFEMDAwRjk0NTYgLyogREZHRG91YmxlRm9ybWF0U3RhdGUuaCAqLywKIAkJCQkwRkQzQzgyMDE0
MTE1Q0Y4MDBGRDgxQ0IgLyogREZHRHJpdmVyLmNwcCAqLywKIAkJCQkwRkQzQzgyMjE0MTE1RDBF
MDBGRDgxQ0IgLyogREZHRHJpdmVyLmggKi8sCisJCQkJMEZCNEI1MUIxNkI2Mjc3MjAwM0Y2OTZC
IC8qIERGR0VkZ2UuY3BwICovLAogCQkJCTBGNjZFMTY5MTRERjNGMTMwMEI3QjJFNCAvKiBERkdF
ZGdlLmggKi8sCiAJCQkJMEYyQkRDMTIxNTFDNUQ0QTAwQ0Q4OTEwIC8qIERGR0ZpeHVwUGhhc2Uu
Y3BwICovLAogCQkJCTBGMkJEQzEzMTUxQzVENEEwMENEODkxMCAvKiBERkdGaXh1cFBoYXNlLmgg
Ki8sCkBAIC0yNTk1LDExICsyNjE2LDE1IEBACiAJCQkJMEYyQkRDMUYxNTFFODAzODAwQ0Q4OTEw
IC8qIERGR0luc2VydGlvblNldC5oICovLAogCQkJCTg2RUM5REJCMTMyOERGODIwMDJCMkFENyAv
KiBERkdKSVRDb21waWxlci5jcHAgKi8sCiAJCQkJODZFQzlEQkMxMzI4REY4MjAwMkIyQUQ3IC8q
IERGR0pJVENvbXBpbGVyLmggKi8sCisJCQkJMEZCNEI1MUMxNkI2Mjc3MjAwM0Y2OTZCIC8qIERG
R0xvbmdMaXZlZFN0YXRlLmNwcCAqLywKKwkJCQkwRkI0QjUxRDE2QjYyNzcyMDAzRjY5NkIgLyog
REZHTG9uZ0xpdmVkU3RhdGUuaCAqLywKIAkJCQkwRjJCREMzRDE1MjI4MDE3MDBDRDg5MTAgLyog
REZHTWluaWZpZWRHcmFwaC5oICovLAogCQkJCTBGQjRCNTEwMTZCM0E5NjQwMDNGNjk2QiAvKiBE
RkdNaW5pZmllZElELmggKi8sCiAJCQkJMEYyQkRDNEMxNTIyODE4MzAwQ0Q4OTEwIC8qIERGR01p
bmlmaWVkTm9kZS5jcHAgKi8sCiAJCQkJMEYyQkRDM0UxNTIyODAxNzAwQ0Q4OTEwIC8qIERGR01p
bmlmaWVkTm9kZS5oICovLAorCQkJCTBGQjRCNTFFMTZCNjI3NzIwMDNGNjk2QiAvKiBERkdOb2Rl
LmNwcCAqLywKIAkJCQk4NkVDQTNFOTEzMkRFRjFDMDAyQjJBRDcgLyogREZHTm9kZS5oICovLAor
CQkJCTBGQjRCNTFGMTZCNjI3NzIwMDNGNjk2QiAvKiBERkdOb2RlQWxsb2NhdG9yLmggKi8sCiAJ
CQkJMEZBNTgxQjcxNTBFOTUyQTAwQjlBMkQ5IC8qIERGR05vZGVGbGFncy5jcHAgKi8sCiAJCQkJ
MEZBNTgxQjgxNTBFOTUyQTAwQjlBMkQ5IC8qIERGR05vZGVGbGFncy5oICovLAogCQkJCTBGQTU4
MUI5MTUwRTk1MkEwMEI5QTJEOSAvKiBERkdOb2RlVHlwZS5oICovLApAQCAtMzI5Miw2ICszMzE3
LDggQEAKIAkJCQk4NjcwNEI0MzEyREI4QTgxMDBBOUZFN0IgLyogWWFyclN5bnRheENoZWNrZXIu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGOTc0OTcxMTY4N0FERTQwMEE0RkY2QSAvKiBKU0NlbGxJ
bmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDc0QzMzQjE2QUEyRDk1MDA2MkYwMUQgLyog
UHJvdG90eXBlTWFwLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkYwRjE5QjE2QjcyOUZBMDA1REY5
NUIgLyogREZHTG9uZ0xpdmVkU3RhdGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRjBGMUEwMTZC
NzJBMUEwMDVERjk1QiAvKiBGdW5jdGlvbkV4ZWN1dGFibGVEdW1wLmggaW4gSGVhZGVycyAqLywK
IAkJCQkxNENBOTU4QjE2QUI1MERFMDA5MzhBMDYgLyogU3RhdGljUHJvcGVydHlBbmFseXplci5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMTRDQTk1OEQxNkFCNTBGQTAwOTM4QTA2IC8qIE9iamVjdEFs
bG9jYXRpb25Qcm9maWxlLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNERGMDREQTE2QjM5OTZEMDAx
NkE1MTMgLyogU3RhdGljUHJvcGVydHlBbmFseXNpcy5oIGluIEhlYWRlcnMgKi8sCkBAIC0zOTIz
LDYgKzM5NTAsMTEgQEAKIAkJCQk4NjcwNEI4OTEyREJBMzM3MDBBOUZFN0IgLyogWWFyclBhdHRl
cm4uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODY3MDRCNDIxMkRCOEE4MTAwQTlGRTdCIC8qIFlh
cnJTeW50YXhDaGVja2VyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0NzRDMzNDMTZBQTJEOUIw
MDYyRjAxRCAvKiBQcm90b3R5cGVNYXAuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZGMEYxOTkx
NkI3MjlGNjAwNURGOTVCIC8qIERGR0xvbmdMaXZlZFN0YXRlLmNwcCBpbiBTb3VyY2VzICovLAor
CQkJCTBGRjBGMTlDMTZCNzJBMDMwMDVERjk1QiAvKiBERkdOb2RlLmNwcCBpbiBTb3VyY2VzICov
LAorCQkJCTBGRjBGMTlEMTZCNzJBMDgwMDVERjk1QiAvKiBERkdDb21tb24uY3BwIGluIFNvdXJj
ZXMgKi8sCisJCQkJMEZGMEYxOUUxNkI3MkEwQjAwNURGOTVCIC8qIERGR0VkZ2UuY3BwIGluIFNv
dXJjZXMgKi8sCisJCQkJMEZGMEYxOUYxNkI3MkExNzAwNURGOTVCIC8qIEZ1bmN0aW9uRXhlY3V0
YWJsZUR1bXAuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1l
bnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvRGF0YUZvcm1hdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9EYXRhRm9ybWF0LmgJKHJldmlzaW9uIDE0MTA1MikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9EYXRhRm9ybWF0LmgJKHdvcmtpbmcgY29weSkKQEAgLTgyLDcg
KzgyLDEyIEBAIGlubGluZSBjb25zdCBjaGFyKiBkYXRhRm9ybWF0VG9TdHJpbmcoRGEKICAgICAg
ICAgcmV0dXJuICJKU0NlbGwiOwogICAgIGNhc2UgRGF0YUZvcm1hdEpTQm9vbGVhbjoKICAgICAg
ICAgcmV0dXJuICJKU0Jvb2xlYW4iOworICAgIGNhc2UgRGF0YUZvcm1hdERlYWQ6CisgICAgICAg
IHJldHVybiAiRGVhZCI7CisgICAgY2FzZSBEYXRhRm9ybWF0QXJndW1lbnRzOgorICAgICAgICBy
ZXR1cm4gIkFyZ3VtZW50cyI7CiAgICAgZGVmYXVsdDoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKICAgICAgICAgcmV0dXJuICJVbmtub3duIjsKICAgICB9CiB9CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHAJKHJl
dmlzaW9uIDE0MTA1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RT
dGF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDExLCAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMSwgMjAxMiwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTg3LDIxICs4NywyMSBAQCB2b2lk
IEFic3RyYWN0U3RhdGU6OmluaXRpYWxpemUoR3JhcGgmIGdyCiAgICAgcm9vdC0+Y2ZhSGFzVmlz
aXRlZCA9IGZhbHNlOwogICAgIHJvb3QtPmNmYUZvdW5kQ29uc3RhbnRzID0gZmFsc2U7CiAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCByb290LT52YWx1ZXNBdEhlYWQubnVtYmVyT2ZBcmd1bWVu
dHMoKTsgKytpKSB7Ci0gICAgICAgIE5vZGUmIG5vZGUgPSBncmFwaFtyb290LT52YXJpYWJsZXNB
dEhlYWQuYXJndW1lbnQoaSldOwotICAgICAgICBBU1NFUlQobm9kZS5vcCgpID09IFNldEFyZ3Vt
ZW50KTsKLSAgICAgICAgaWYgKCFub2RlLnNob3VsZEdlbmVyYXRlKCkpIHsKKyAgICAgICAgTm9k
ZSogbm9kZSA9IHJvb3QtPnZhcmlhYmxlc0F0SGVhZC5hcmd1bWVudChpKTsKKyAgICAgICAgQVNT
RVJUKG5vZGUtPm9wKCkgPT0gU2V0QXJndW1lbnQpOworICAgICAgICBpZiAoIW5vZGUtPnNob3Vs
ZEdlbmVyYXRlKCkpIHsKICAgICAgICAgICAgIC8vIFRoZSBhcmd1bWVudCBpcyBkZWFkLiBXZSBk
b24ndCBkbyBhbnkgY2hlY2tzIGZvciBzdWNoIGFyZ3VtZW50cywgYW5kIHNvCiAgICAgICAgICAg
ICAvLyBmb3IgdGhlIHB1cnBvc2Ugb2YgdGhlIGFuYWx5c2lzLCB0aGV5IGNvbnRhaW4gbm8gdmFs
dWUuCiAgICAgICAgICAgICByb290LT52YWx1ZXNBdEhlYWQuYXJndW1lbnQoaSkuY2xlYXIoKTsK
ICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBpZiAo
bm9kZS52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+aXNDYXB0dXJlZCgpKSB7CisgICAgICAgIGlmIChu
b2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+aXNDYXB0dXJlZCgpKSB7CiAgICAgICAgICAgICBy
b290LT52YWx1ZXNBdEhlYWQuYXJndW1lbnQoaSkubWFrZVRvcCgpOwogICAgICAgICAgICAgY29u
dGludWU7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRp
Y3Rpb24gPSBub2RlLnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5wcmVkaWN0aW9uKCk7CisgICAgICAg
IFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24gPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+
cHJlZGljdGlvbigpOwogICAgICAgICBpZiAoaXNJbnQzMlNwZWN1bGF0aW9uKHByZWRpY3Rpb24p
KQogICAgICAgICAgICAgcm9vdC0+dmFsdWVzQXRIZWFkLmFyZ3VtZW50KGkpLnNldChTcGVjSW50
MzIpOwogICAgICAgICBlbHNlIGlmIChpc0Jvb2xlYW5TcGVjdWxhdGlvbihwcmVkaWN0aW9uKSkK
QEAgLTExNCw4ICsxMTQsOCBAQCB2b2lkIEFic3RyYWN0U3RhdGU6OmluaXRpYWxpemUoR3JhcGgm
IGdyCiAgICAgICAgIHJvb3QtPnZhbHVlc0F0VGFpbC5hcmd1bWVudChpKS5jbGVhcigpOwogICAg
IH0KICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHJvb3QtPnZhbHVlc0F0SGVhZC5udW1iZXJP
ZkxvY2FscygpOyArK2kpIHsKLSAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRleCA9IHJvb3QtPnZh
cmlhYmxlc0F0SGVhZC5sb2NhbChpKTsKLSAgICAgICAgaWYgKG5vZGVJbmRleCAhPSBOb05vZGUg
JiYgZ3JhcGhbbm9kZUluZGV4XS52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+aXNDYXB0dXJlZCgpKQor
ICAgICAgICBOb2RlKiBub2RlID0gcm9vdC0+dmFyaWFibGVzQXRIZWFkLmxvY2FsKGkpOworICAg
ICAgICBpZiAobm9kZSAmJiBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+aXNDYXB0dXJlZCgp
KQogICAgICAgICAgICAgcm9vdC0+dmFsdWVzQXRIZWFkLmxvY2FsKGkpLm1ha2VUb3AoKTsKICAg
ICAgICAgZWxzZQogICAgICAgICAgICAgcm9vdC0+dmFsdWVzQXRIZWFkLmxvY2FsKGkpLmNsZWFy
KCk7CkBAIC0yMTMsMTEgKzIxMywxMSBAQCB2b2lkIEFic3RyYWN0U3RhdGU6OnJlc2V0KCkKICAg
ICBtX2JyYW5jaERpcmVjdGlvbiA9IEludmFsaWRCcmFuY2hEaXJlY3Rpb247CiB9CiAKLUFic3Ry
YWN0U3RhdGU6OkJvb2xlYW5SZXN1bHQgQWJzdHJhY3RTdGF0ZTo6Ym9vbGVhblJlc3VsdChOb2Rl
JiBub2RlLCBBYnN0cmFjdFZhbHVlJiB2YWx1ZSkKK0Fic3RyYWN0U3RhdGU6OkJvb2xlYW5SZXN1
bHQgQWJzdHJhY3RTdGF0ZTo6Ym9vbGVhblJlc3VsdChOb2RlKiBub2RlLCBBYnN0cmFjdFZhbHVl
JiB2YWx1ZSkKIHsKICAgICBKU1ZhbHVlIGNoaWxkQ29uc3QgPSB2YWx1ZS52YWx1ZSgpOwogICAg
IGlmIChjaGlsZENvbnN0KSB7Ci0gICAgICAgIGlmIChjaGlsZENvbnN0LnRvQm9vbGVhbihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0Rm9yKG5vZGUuY29kZU9yaWdpbiktPmdsb2JhbEV4ZWMoKSkp
CisgICAgICAgIGlmIChjaGlsZENvbnN0LnRvQm9vbGVhbihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0Rm9yKG5vZGUtPmNvZGVPcmlnaW4pLT5nbG9iYWxFeGVjKCkpKQogICAgICAgICAgICAgcmV0
dXJuIERlZmluaXRlbHlUcnVlOwogICAgICAgICByZXR1cm4gRGVmaW5pdGVseUZhbHNlOwogICAg
IH0KQEAgLTIyNiw3ICsyMjYsNyBAQCBBYnN0cmFjdFN0YXRlOjpCb29sZWFuUmVzdWx0IEFic3Ry
YWN0U3RhCiAgICAgaWYgKGlzQ2VsbFNwZWN1bGF0aW9uKHZhbHVlLm1fdHlwZSkKICAgICAgICAg
JiYgdmFsdWUubV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuaGFzU2luZ2xldG9uKCkpIHsKICAgICAg
ICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSB2YWx1ZS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5z
aW5nbGV0b24oKTsKLSAgICAgICAgaWYgKCFzdHJ1Y3R1cmUtPm1hc3F1ZXJhZGVzQXNVbmRlZmlu
ZWQobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdEZvcihub2RlLmNvZGVPcmlnaW4pKQorICAgICAg
ICBpZiAoIXN0cnVjdHVyZS0+bWFzcXVlcmFkZXNBc1VuZGVmaW5lZChtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0Rm9yKG5vZGUtPmNvZGVPcmlnaW4pKQogICAgICAgICAgICAgJiYgc3RydWN0dXJl
LT50eXBlSW5mbygpLnR5cGUoKSAhPSBTdHJpbmdUeXBlKQogICAgICAgICAgICAgcmV0dXJuIERl
ZmluaXRlbHlUcnVlOwogICAgIH0KQEAgLTI0MSwzMiArMjQxLDMxIEBAIGJvb2wgQWJzdHJhY3RT
dGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAKICAgICBtX2RpZENsb2JiZXIgPSBmYWxz
ZTsKICAgICAKLSAgICBOb2RlSW5kZXggbm9kZUluZGV4ID0gbV9ibG9jay0+YXQoaW5kZXhJbkJs
b2NrKTsKLSAgICBOb2RlJiBub2RlID0gbV9ncmFwaFtub2RlSW5kZXhdOworICAgIE5vZGUqIG5v
ZGUgPSBtX2Jsb2NrLT5hdChpbmRleEluQmxvY2spOwogICAgICAgICAKLSAgICBpZiAoIW5vZGUu
c2hvdWxkR2VuZXJhdGUoKSkKKyAgICBpZiAoIW5vZGUtPnNob3VsZEdlbmVyYXRlKCkpCiAgICAg
ICAgIHJldHVybiB0cnVlOwogICAgICAgICAKLSAgICBzd2l0Y2ggKG5vZGUub3AoKSkgeworICAg
IHN3aXRjaCAobm9kZS0+b3AoKSkgewogICAgIGNhc2UgSlNDb25zdGFudDoKICAgICBjYXNlIFdl
YWtKU0NvbnN0YW50OgogICAgIGNhc2UgUGhhbnRvbUFyZ3VtZW50czogewotICAgICAgICBmb3JO
b2RlKG5vZGVJbmRleCkuc2V0KG1fZ3JhcGgudmFsdWVPZkpTQ29uc3RhbnQobm9kZUluZGV4KSk7
Ci0gICAgICAgIG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7CisgICAgICAgIGZvck5vZGUobm9kZSku
c2V0KG1fZ3JhcGgudmFsdWVPZkpTQ29uc3RhbnQobm9kZSkpOworICAgICAgICBub2RlLT5zZXRD
YW5FeGl0KGZhbHNlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKICAgICBjYXNl
IElkZW50aXR5OiB7Ci0gICAgICAgIGZvck5vZGUobm9kZUluZGV4KSA9IGZvck5vZGUobm9kZS5j
aGlsZDEoKSk7Ci0gICAgICAgIG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7CisgICAgICAgIGZvck5v
ZGUobm9kZSkgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgbm9kZS0+c2V0Q2Fu
RXhpdChmYWxzZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgICAgIAogICAgIGNh
c2UgR2V0TG9jYWw6IHsKLSAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vz
c0RhdGEgPSBub2RlLnZhcmlhYmxlQWNjZXNzRGF0YSgpOworICAgICAgICBWYXJpYWJsZUFjY2Vz
c0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOwog
ICAgICAgICBpZiAodmFyaWFibGVBY2Nlc3NEYXRhLT5wcmVkaWN0aW9uKCkgPT0gU3BlY05vbmUp
IHsKICAgICAgICAgICAgIG1faXNWYWxpZCA9IGZhbHNlOwotICAgICAgICAgICAgbm9kZS5zZXRD
YW5FeGl0KHRydWUpOworICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGJvb2wgY2FuRXhpdCA9IGZhbHNlOwpA
QCAtMjc3LDUzICsyNzYsNTMgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVk
IGluZAogICAgICAgICB9CiAgICAgICAgIGlmICh2YWx1ZS52YWx1ZSgpKQogICAgICAgICAgICAg
bV9mb3VuZENvbnN0YW50cyA9IHRydWU7Ci0gICAgICAgIGZvck5vZGUobm9kZUluZGV4KSA9IHZh
bHVlOwotICAgICAgICBub2RlLnNldENhbkV4aXQoY2FuRXhpdCk7CisgICAgICAgIGZvck5vZGUo
bm9kZSkgPSB2YWx1ZTsKKyAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChjYW5FeGl0KTsKICAgICAg
ICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKICAgICBjYXNlIEdldExvY2FsVW5saW5rZWQ6IHsK
LSAgICAgICAgQWJzdHJhY3RWYWx1ZSB2YWx1ZSA9IG1fdmFyaWFibGVzLm9wZXJhbmQobm9kZS51
bmxpbmtlZExvY2FsKCkpOworICAgICAgICBBYnN0cmFjdFZhbHVlIHZhbHVlID0gbV92YXJpYWJs
ZXMub3BlcmFuZChub2RlLT51bmxpbmtlZExvY2FsKCkpOwogICAgICAgICBpZiAodmFsdWUudmFs
dWUoKSkKICAgICAgICAgICAgIG1fZm91bmRDb25zdGFudHMgPSB0cnVlOwotICAgICAgICBmb3JO
b2RlKG5vZGVJbmRleCkgPSB2YWx1ZTsKLSAgICAgICAgbm9kZS5zZXRDYW5FeGl0KGZhbHNlKTsK
KyAgICAgICAgZm9yTm9kZShub2RlKSA9IHZhbHVlOworICAgICAgICBub2RlLT5zZXRDYW5FeGl0
KGZhbHNlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKICAgICBjYXNlIFNldExv
Y2FsOiB7Ci0gICAgICAgIGlmIChub2RlLnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5pc0NhcHR1cmVk
KCkKLSAgICAgICAgICAgIHx8IG1fZ3JhcGguaXNDcmVhdGVkVGhpc0FyZ3VtZW50KG5vZGUubG9j
YWwoKSkpIHsKLSAgICAgICAgICAgIG1fdmFyaWFibGVzLm9wZXJhbmQobm9kZS5sb2NhbCgpKSA9
IGZvck5vZGUobm9kZS5jaGlsZDEoKSk7Ci0gICAgICAgICAgICBub2RlLnNldENhbkV4aXQoZmFs
c2UpOworICAgICAgICBpZiAobm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCktPmlzQ2FwdHVyZWQo
KQorICAgICAgICAgICAgfHwgbV9ncmFwaC5pc0NyZWF0ZWRUaGlzQXJndW1lbnQobm9kZS0+bG9j
YWwoKSkpIHsKKyAgICAgICAgICAgIG1fdmFyaWFibGVzLm9wZXJhbmQobm9kZS0+bG9jYWwoKSkg
PSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQo
ZmFsc2UpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAg
IGlmIChub2RlLnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5zaG91bGRVc2VEb3VibGVGb3JtYXQoKSkg
eworICAgICAgICBpZiAobm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCktPnNob3VsZFVzZURvdWJs
ZUZvcm1hdCgpKSB7CiAgICAgICAgICAgICBzcGVjdWxhdGVOdW1iZXJVbmFyeShub2RlKTsKLSAg
ICAgICAgICAgIG1fdmFyaWFibGVzLm9wZXJhbmQobm9kZS5sb2NhbCgpKS5zZXQoU3BlY0RvdWJs
ZSk7CisgICAgICAgICAgICBtX3ZhcmlhYmxlcy5vcGVyYW5kKG5vZGUtPmxvY2FsKCkpLnNldChT
cGVjRG91YmxlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIAotICAg
ICAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0ZWRUeXBlID0gbm9kZS52YXJpYWJsZUFjY2Vzc0Rh
dGEoKS0+YXJndW1lbnRBd2FyZVByZWRpY3Rpb24oKTsKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUg
cHJlZGljdGVkVHlwZSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5hcmd1bWVudEF3YXJl
UHJlZGljdGlvbigpOwogICAgICAgICBpZiAoaXNJbnQzMlNwZWN1bGF0aW9uKHByZWRpY3RlZFR5
cGUpKQogICAgICAgICAgICAgc3BlY3VsYXRlSW50MzJVbmFyeShub2RlKTsKICAgICAgICAgZWxz
ZSBpZiAoaXNDZWxsU3BlY3VsYXRpb24ocHJlZGljdGVkVHlwZSkpIHsKLSAgICAgICAgICAgIG5v
ZGUuc2V0Q2FuRXhpdCghaXNDZWxsU3BlY3VsYXRpb24oZm9yTm9kZShub2RlLmNoaWxkMSgpKS5t
X3R5cGUpKTsKLSAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWND
ZWxsKTsKKyAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQoIWlzQ2VsbFNwZWN1bGF0aW9uKGZv
ck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fdHlwZSkpOworICAgICAgICAgICAgZm9yTm9kZShub2Rl
LT5jaGlsZDEoKSkuZmlsdGVyKFNwZWNDZWxsKTsKICAgICAgICAgfSBlbHNlIGlmIChpc0Jvb2xl
YW5TcGVjdWxhdGlvbihwcmVkaWN0ZWRUeXBlKSkKICAgICAgICAgICAgIHNwZWN1bGF0ZUJvb2xl
YW5VbmFyeShub2RlKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgbm9kZS5zZXRDYW5FeGl0
KGZhbHNlKTsKKyAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICAK
LSAgICAgICAgbV92YXJpYWJsZXMub3BlcmFuZChub2RlLmxvY2FsKCkpID0gZm9yTm9kZShub2Rl
LmNoaWxkMSgpKTsKKyAgICAgICAgbV92YXJpYWJsZXMub3BlcmFuZChub2RlLT5sb2NhbCgpKSA9
IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAg
ICAgICAKICAgICBjYXNlIFNldEFyZ3VtZW50OgogICAgICAgICAvLyBBc3NlcnQgdGhhdCB0aGUg
c3RhdGUgb2YgYXJndW1lbnRzIGhhcyBiZWVuIHNldC4KLSAgICAgICAgQVNTRVJUKCFtX2Jsb2Nr
LT52YWx1ZXNBdEhlYWQub3BlcmFuZChub2RlLmxvY2FsKCkpLmlzQ2xlYXIoKSk7Ci0gICAgICAg
IG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7CisgICAgICAgIEFTU0VSVCghbV9ibG9jay0+dmFsdWVz
QXRIZWFkLm9wZXJhbmQobm9kZS0+bG9jYWwoKSkuaXNDbGVhcigpKTsKKyAgICAgICAgbm9kZS0+
c2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAgY2Fz
ZSBCaXRBbmQ6CkBAIC0zMzIsMzAgKzMzMSwzMCBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1
dGUodW5zaWduZWQgaW5kCiAgICAgY2FzZSBCaXRSU2hpZnQ6CiAgICAgY2FzZSBCaXRMU2hpZnQ6
CiAgICAgY2FzZSBCaXRVUlNoaWZ0OiB7Ci0gICAgICAgIEpTVmFsdWUgbGVmdCA9IGZvck5vZGUo
bm9kZS5jaGlsZDEoKSkudmFsdWUoKTsKLSAgICAgICAgSlNWYWx1ZSByaWdodCA9IGZvck5vZGUo
bm9kZS5jaGlsZDIoKSkudmFsdWUoKTsKKyAgICAgICAgSlNWYWx1ZSBsZWZ0ID0gZm9yTm9kZShu
b2RlLT5jaGlsZDEoKSkudmFsdWUoKTsKKyAgICAgICAgSlNWYWx1ZSByaWdodCA9IGZvck5vZGUo
bm9kZS0+Y2hpbGQyKCkpLnZhbHVlKCk7CiAgICAgICAgIGlmIChsZWZ0ICYmIHJpZ2h0ICYmIGxl
ZnQuaXNJbnQzMigpICYmIHJpZ2h0LmlzSW50MzIoKSkgewogICAgICAgICAgICAgaW50MzJfdCBh
ID0gbGVmdC5hc0ludDMyKCk7CiAgICAgICAgICAgICBpbnQzMl90IGIgPSByaWdodC5hc0ludDMy
KCk7CiAgICAgICAgICAgICBib29sIGNvbnN0YW50V2FzU2V0OwotICAgICAgICAgICAgc3dpdGNo
IChub2RlLm9wKCkpIHsKKyAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewogICAgICAg
ICAgICAgY2FzZSBCaXRBbmQ6Ci0gICAgICAgICAgICAgICAgY29uc3RhbnRXYXNTZXQgPSB0cnlT
ZXRDb25zdGFudChub2RlSW5kZXgsIEpTVmFsdWUoYSAmIGIpKTsKKyAgICAgICAgICAgICAgICBj
b25zdGFudFdhc1NldCA9IHRyeVNldENvbnN0YW50KG5vZGUsIEpTVmFsdWUoYSAmIGIpKTsKICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgQml0T3I6Ci0gICAgICAgICAg
ICAgICAgY29uc3RhbnRXYXNTZXQgPSB0cnlTZXRDb25zdGFudChub2RlSW5kZXgsIEpTVmFsdWUo
YSB8IGIpKTsKKyAgICAgICAgICAgICAgICBjb25zdGFudFdhc1NldCA9IHRyeVNldENvbnN0YW50
KG5vZGUsIEpTVmFsdWUoYSB8IGIpKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgIGNhc2UgQml0WG9yOgotICAgICAgICAgICAgICAgIGNvbnN0YW50V2FzU2V0ID0gdHJ5U2V0
Q29uc3RhbnQobm9kZUluZGV4LCBKU1ZhbHVlKGEgXiBiKSk7CisgICAgICAgICAgICAgICAgY29u
c3RhbnRXYXNTZXQgPSB0cnlTZXRDb25zdGFudChub2RlLCBKU1ZhbHVlKGEgXiBiKSk7CiAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIEJpdFJTaGlmdDoKLSAgICAgICAg
ICAgICAgICBjb25zdGFudFdhc1NldCA9IHRyeVNldENvbnN0YW50KG5vZGVJbmRleCwgSlNWYWx1
ZShhID4+IHN0YXRpY19jYXN0PHVpbnQzMl90PihiKSkpOworICAgICAgICAgICAgICAgIGNvbnN0
YW50V2FzU2V0ID0gdHJ5U2V0Q29uc3RhbnQobm9kZSwgSlNWYWx1ZShhID4+IHN0YXRpY19jYXN0
PHVpbnQzMl90PihiKSkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2Fz
ZSBCaXRMU2hpZnQ6Ci0gICAgICAgICAgICAgICAgY29uc3RhbnRXYXNTZXQgPSB0cnlTZXRDb25z
dGFudChub2RlSW5kZXgsIEpTVmFsdWUoYSA8PCBzdGF0aWNfY2FzdDx1aW50MzJfdD4oYikpKTsK
KyAgICAgICAgICAgICAgICBjb25zdGFudFdhc1NldCA9IHRyeVNldENvbnN0YW50KG5vZGUsIEpT
VmFsdWUoYSA8PCBzdGF0aWNfY2FzdDx1aW50MzJfdD4oYikpKTsKICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgIGNhc2UgQml0VVJTaGlmdDoKLSAgICAgICAgICAgICAgICBjb25z
dGFudFdhc1NldCA9IHRyeVNldENvbnN0YW50KG5vZGVJbmRleCwgSlNWYWx1ZShzdGF0aWNfY2Fz
dDx1aW50MzJfdD4oYSkgPj4gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGIpKSk7CisgICAgICAgICAg
ICAgICAgY29uc3RhbnRXYXNTZXQgPSB0cnlTZXRDb25zdGFudChub2RlLCBKU1ZhbHVlKHN0YXRp
Y19jYXN0PHVpbnQzMl90PihhKSA+PiBzdGF0aWNfY2FzdDx1aW50MzJfdD4oYikpKTsKICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTM2MywxOTkgKzM2MiwxOTkgQEAgYm9v
bCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICAgICAgfQogICAg
ICAgICAgICAgaWYgKGNvbnN0YW50V2FzU2V0KSB7CiAgICAgICAgICAgICAgICAgbV9mb3VuZENv
bnN0YW50cyA9IHRydWU7Ci0gICAgICAgICAgICAgICAgbm9kZS5zZXRDYW5FeGl0KGZhbHNlKTsK
KyAgICAgICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBzcGVjdWxhdGVJbnQz
MkJpbmFyeShub2RlKTsKLSAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChTcGVjSW50MzIp
OworICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjSW50MzIpOwogICAgICAgICBicmVhazsK
ICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgVUludDMyVG9OdW1iZXI6IHsKLSAgICAgICAgSlNW
YWx1ZSBjaGlsZCA9IGZvck5vZGUobm9kZS5jaGlsZDEoKSkudmFsdWUoKTsKKyAgICAgICAgSlNW
YWx1ZSBjaGlsZCA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLnZhbHVlKCk7CiAgICAgICAgIGlm
IChjaGlsZCAmJiBjaGlsZC5pc051bWJlcigpKSB7CiAgICAgICAgICAgICBBU1NFUlQoY2hpbGQu
aXNJbnQzMigpKTsKLSAgICAgICAgICAgIGlmICh0cnlTZXRDb25zdGFudChub2RlSW5kZXgsIEpT
VmFsdWUoY2hpbGQuYXNVSW50MzIoKSkpKSB7CisgICAgICAgICAgICBpZiAodHJ5U2V0Q29uc3Rh
bnQobm9kZSwgSlNWYWx1ZShjaGlsZC5hc1VJbnQzMigpKSkpIHsKICAgICAgICAgICAgICAgICBt
X2ZvdW5kQ29uc3RhbnRzID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBub2RlLnNldENhbkV4aXQo
ZmFsc2UpOworICAgICAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwogICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIGlmICgh
bm9kZS5jYW5TcGVjdWxhdGVJbnRlZ2VyKCkpIHsKLSAgICAgICAgICAgIGZvck5vZGUobm9kZUlu
ZGV4KS5zZXQoU3BlY0RvdWJsZSk7Ci0gICAgICAgICAgICBub2RlLnNldENhbkV4aXQoZmFsc2Up
OworICAgICAgICBpZiAoIW5vZGUtPmNhblNwZWN1bGF0ZUludGVnZXIoKSkgeworICAgICAgICAg
ICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0RvdWJsZSk7CisgICAgICAgICAgICBub2RlLT5zZXRD
YW5FeGl0KGZhbHNlKTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGZvck5vZGUobm9k
ZUluZGV4KS5zZXQoU3BlY0ludDMyKTsKLSAgICAgICAgICAgIG5vZGUuc2V0Q2FuRXhpdCh0cnVl
KTsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNJbnQzMik7CisgICAgICAgICAg
ICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAg
IH0KICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAKICAgICBjYXNlIERvdWJsZUFzSW50MzI6
IHsKLSAgICAgICAgSlNWYWx1ZSBjaGlsZCA9IGZvck5vZGUobm9kZS5jaGlsZDEoKSkudmFsdWUo
KTsKKyAgICAgICAgSlNWYWx1ZSBjaGlsZCA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLnZhbHVl
KCk7CiAgICAgICAgIGlmIChjaGlsZCAmJiBjaGlsZC5pc051bWJlcigpKSB7CiAgICAgICAgICAg
ICBkb3VibGUgYXNEb3VibGUgPSBjaGlsZC5hc051bWJlcigpOwogICAgICAgICAgICAgaW50MzJf
dCBhc0ludCA9IEpTQzo6dG9JbnQzMihhc0RvdWJsZSk7CiAgICAgICAgICAgICBpZiAoYml0d2lz
ZV9jYXN0PGludDY0X3Q+KHN0YXRpY19jYXN0PGRvdWJsZT4oYXNJbnQpKSA9PSBiaXR3aXNlX2Nh
c3Q8aW50NjRfdD4oYXNEb3VibGUpCi0gICAgICAgICAgICAgICAgJiYgdHJ5U2V0Q29uc3RhbnQo
bm9kZUluZGV4LCBKU1ZhbHVlKGFzSW50KSkpIHsKKyAgICAgICAgICAgICAgICAmJiB0cnlTZXRD
b25zdGFudChub2RlLCBKU1ZhbHVlKGFzSW50KSkpIHsKICAgICAgICAgICAgICAgICBtX2ZvdW5k
Q29uc3RhbnRzID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0K
ICAgICAgICAgfQotICAgICAgICBub2RlLnNldENhbkV4aXQodHJ1ZSk7Ci0gICAgICAgIGZvck5v
ZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNOdW1iZXIpOwotICAgICAgICBmb3JOb2RlKG5v
ZGVJbmRleCkuc2V0KFNwZWNJbnQzMik7CisgICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7
CisgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRlcihTcGVjTnVtYmVyKTsKKyAg
ICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0ludDMyKTsKICAgICAgICAgYnJlYWs7CiAgICAg
fQogICAgICAgICAgICAgCiAgICAgY2FzZSBWYWx1ZVRvSW50MzI6IHsKLSAgICAgICAgSlNWYWx1
ZSBjaGlsZCA9IGZvck5vZGUobm9kZS5jaGlsZDEoKSkudmFsdWUoKTsKKyAgICAgICAgSlNWYWx1
ZSBjaGlsZCA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLnZhbHVlKCk7CiAgICAgICAgIGlmIChj
aGlsZCAmJiBjaGlsZC5pc051bWJlcigpKSB7CiAgICAgICAgICAgICBib29sIGNvbnN0YW50V2Fz
U2V0OwogICAgICAgICAgICAgaWYgKGNoaWxkLmlzSW50MzIoKSkKLSAgICAgICAgICAgICAgICBj
b25zdGFudFdhc1NldCA9IHRyeVNldENvbnN0YW50KG5vZGVJbmRleCwgY2hpbGQpOworICAgICAg
ICAgICAgICAgIGNvbnN0YW50V2FzU2V0ID0gdHJ5U2V0Q29uc3RhbnQobm9kZSwgY2hpbGQpOwog
ICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGNvbnN0YW50V2FzU2V0ID0gdHJ5U2V0
Q29uc3RhbnQobm9kZUluZGV4LCBKU1ZhbHVlKEpTQzo6dG9JbnQzMihjaGlsZC5hc0RvdWJsZSgp
KSkpOworICAgICAgICAgICAgICAgIGNvbnN0YW50V2FzU2V0ID0gdHJ5U2V0Q29uc3RhbnQobm9k
ZSwgSlNWYWx1ZShKU0M6OnRvSW50MzIoY2hpbGQuYXNEb3VibGUoKSkpKTsKICAgICAgICAgICAg
IGlmIChjb25zdGFudFdhc1NldCkgewogICAgICAgICAgICAgICAgIG1fZm91bmRDb25zdGFudHMg
PSB0cnVlOwotICAgICAgICAgICAgICAgIG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7CisgICAgICAg
ICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgaWYgKG1fZ3JhcGhbbm9kZS5jaGls
ZDEoKV0uc2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKQorICAgICAgICBpZiAobm9kZS0+Y2hpbGQx
KCktPnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKSkKICAgICAgICAgICAgIHNwZWN1bGF0ZUludDMy
VW5hcnkobm9kZSk7Ci0gICAgICAgIGVsc2UgaWYgKG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0uc2hv
dWxkU3BlY3VsYXRlTnVtYmVyKCkpCisgICAgICAgIGVsc2UgaWYgKG5vZGUtPmNoaWxkMSgpLT5z
aG91bGRTcGVjdWxhdGVOdW1iZXIoKSkKICAgICAgICAgICAgIHNwZWN1bGF0ZU51bWJlclVuYXJ5
KG5vZGUpOwotICAgICAgICBlbHNlIGlmIChtX2dyYXBoW25vZGUuY2hpbGQxKCldLnNob3VsZFNw
ZWN1bGF0ZUJvb2xlYW4oKSkKKyAgICAgICAgZWxzZSBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3Vs
ZFNwZWN1bGF0ZUJvb2xlYW4oKSkKICAgICAgICAgICAgIHNwZWN1bGF0ZUJvb2xlYW5VbmFyeShu
b2RlKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgbm9kZS5zZXRDYW5FeGl0KGZhbHNlKTsK
KyAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICAKLSAgICAgICAg
Zm9yTm9kZShub2RlSW5kZXgpLnNldChTcGVjSW50MzIpOworICAgICAgICBmb3JOb2RlKG5vZGUp
LnNldChTcGVjSW50MzIpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIAogICAgIGNh
c2UgSW50MzJUb0RvdWJsZTogewotICAgICAgICBKU1ZhbHVlIGNoaWxkID0gZm9yTm9kZShub2Rl
LmNoaWxkMSgpKS52YWx1ZSgpOworICAgICAgICBKU1ZhbHVlIGNoaWxkID0gZm9yTm9kZShub2Rl
LT5jaGlsZDEoKSkudmFsdWUoKTsKICAgICAgICAgaWYgKGNoaWxkICYmIGNoaWxkLmlzTnVtYmVy
KCkKLSAgICAgICAgICAgICYmIHRyeVNldENvbnN0YW50KG5vZGVJbmRleCwgSlNWYWx1ZShKU1Zh
bHVlOjpFbmNvZGVBc0RvdWJsZSwgY2hpbGQuYXNOdW1iZXIoKSkpKSB7CisgICAgICAgICAgICAm
JiB0cnlTZXRDb25zdGFudChub2RlLCBKU1ZhbHVlKEpTVmFsdWU6OkVuY29kZUFzRG91YmxlLCBj
aGlsZC5hc051bWJlcigpKSkpIHsKICAgICAgICAgICAgIG1fZm91bmRDb25zdGFudHMgPSB0cnVl
OwotICAgICAgICAgICAgbm9kZS5zZXRDYW5FeGl0KGZhbHNlKTsKKyAgICAgICAgICAgIG5vZGUt
PnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAg
ICAgc3BlY3VsYXRlTnVtYmVyVW5hcnkobm9kZSk7Ci0gICAgICAgIGlmIChpc0ludDMyU3BlY3Vs
YXRpb24oZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKQotICAgICAgICAgICAgZm9yTm9k
ZShub2RlSW5kZXgpLnNldChTcGVjRG91YmxlUmVhbCk7CisgICAgICAgIGlmIChpc0ludDMyU3Bl
Y3VsYXRpb24oZm9yTm9kZShub2RlLT5jaGlsZDEoKSkubV90eXBlKSkKKyAgICAgICAgICAgIGZv
ck5vZGUobm9kZSkuc2V0KFNwZWNEb3VibGVSZWFsKTsKICAgICAgICAgZWxzZQotICAgICAgICAg
ICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChTcGVjRG91YmxlKTsKKyAgICAgICAgICAgIGZvck5v
ZGUobm9kZSkuc2V0KFNwZWNEb3VibGUpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAg
IAogICAgIGNhc2UgQ2hlY2tOdW1iZXI6Ci0gICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSku
ZmlsdGVyKFNwZWNOdW1iZXIpOworICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5maWx0
ZXIoU3BlY051bWJlcik7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAgY2FzZSBW
YWx1ZUFkZDoKICAgICBjYXNlIEFyaXRoQWRkOiB7Ci0gICAgICAgIEpTVmFsdWUgbGVmdCA9IGZv
ck5vZGUobm9kZS5jaGlsZDEoKSkudmFsdWUoKTsKLSAgICAgICAgSlNWYWx1ZSByaWdodCA9IGZv
ck5vZGUobm9kZS5jaGlsZDIoKSkudmFsdWUoKTsKKyAgICAgICAgSlNWYWx1ZSBsZWZ0ID0gZm9y
Tm9kZShub2RlLT5jaGlsZDEoKSkudmFsdWUoKTsKKyAgICAgICAgSlNWYWx1ZSByaWdodCA9IGZv
ck5vZGUobm9kZS0+Y2hpbGQyKCkpLnZhbHVlKCk7CiAgICAgICAgIGlmIChsZWZ0ICYmIHJpZ2h0
ICYmIGxlZnQuaXNOdW1iZXIoKSAmJiByaWdodC5pc051bWJlcigpCi0gICAgICAgICAgICAmJiB0
cnlTZXRDb25zdGFudChub2RlSW5kZXgsIEpTVmFsdWUobGVmdC5hc051bWJlcigpICsgcmlnaHQu
YXNOdW1iZXIoKSkpKSB7CisgICAgICAgICAgICAmJiB0cnlTZXRDb25zdGFudChub2RlLCBKU1Zh
bHVlKGxlZnQuYXNOdW1iZXIoKSArIHJpZ2h0LmFzTnVtYmVyKCkpKSkgewogICAgICAgICAgICAg
bV9mb3VuZENvbnN0YW50cyA9IHRydWU7Ci0gICAgICAgICAgICBub2RlLnNldENhbkV4aXQoZmFs
c2UpOworICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQogICAgICAgICBpZiAobV9ncmFwaC5hZGRTaG91bGRTcGVjdWxhdGVJ
bnRlZ2VyKG5vZGUpKSB7CiAgICAgICAgICAgICBzcGVjdWxhdGVJbnQzMkJpbmFyeSgKLSAgICAg
ICAgICAgICAgICBub2RlLCAhbm9kZUNhblRydW5jYXRlSW50ZWdlcihub2RlLmFyaXRoTm9kZUZs
YWdzKCkpKTsKLSAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoU3BlY0ludDMyKTsK
KyAgICAgICAgICAgICAgICBub2RlLCAhbm9kZUNhblRydW5jYXRlSW50ZWdlcihub2RlLT5hcml0
aE5vZGVGbGFncygpKSk7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjSW50MzIp
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKE5vZGU6OnNob3Vs
ZFNwZWN1bGF0ZU51bWJlckV4cGVjdGluZ0RlZmluZWQobV9ncmFwaFtub2RlLmNoaWxkMSgpXSwg
bV9ncmFwaFtub2RlLmNoaWxkMigpXSkpIHsKKyAgICAgICAgaWYgKE5vZGU6OnNob3VsZFNwZWN1
bGF0ZU51bWJlckV4cGVjdGluZ0RlZmluZWQobm9kZS0+Y2hpbGQxKCkubm9kZSgpLCBub2RlLT5j
aGlsZDIoKS5ub2RlKCkpKSB7CiAgICAgICAgICAgICBzcGVjdWxhdGVOdW1iZXJCaW5hcnkobm9k
ZSk7Ci0gICAgICAgICAgICBpZiAoaXNSZWFsTnVtYmVyU3BlY3VsYXRpb24oZm9yTm9kZShub2Rl
LmNoaWxkMSgpKS5tX3R5cGUpCi0gICAgICAgICAgICAgICAgJiYgaXNSZWFsTnVtYmVyU3BlY3Vs
YXRpb24oZm9yTm9kZShub2RlLmNoaWxkMigpKS5tX3R5cGUpKQotICAgICAgICAgICAgICAgIGZv
ck5vZGUobm9kZUluZGV4KS5zZXQoU3BlY0RvdWJsZVJlYWwpOworICAgICAgICAgICAgaWYgKGlz
UmVhbE51bWJlclNwZWN1bGF0aW9uKGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fdHlwZSkKKyAg
ICAgICAgICAgICAgICAmJiBpc1JlYWxOdW1iZXJTcGVjdWxhdGlvbihmb3JOb2RlKG5vZGUtPmNo
aWxkMigpKS5tX3R5cGUpKQorICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNE
b3VibGVSZWFsKTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBmb3JOb2RlKG5v
ZGVJbmRleCkuc2V0KFNwZWNEb3VibGUpOworICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZSku
c2V0KFNwZWNEb3VibGUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAg
aWYgKG5vZGUub3AoKSA9PSBWYWx1ZUFkZCkgewotICAgICAgICAgICAgY2xvYmJlcldvcmxkKG5v
ZGUuY29kZU9yaWdpbiwgaW5kZXhJbkJsb2NrKTsKLSAgICAgICAgICAgIGZvck5vZGUobm9kZUlu
ZGV4KS5zZXQoU3BlY1N0cmluZyB8IFNwZWNJbnQzMiB8IFNwZWNOdW1iZXIpOwotICAgICAgICAg
ICAgbm9kZS5zZXRDYW5FeGl0KGZhbHNlKTsKKyAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gVmFs
dWVBZGQpIHsKKyAgICAgICAgICAgIGNsb2JiZXJXb3JsZChub2RlLT5jb2RlT3JpZ2luLCBpbmRl
eEluQmxvY2spOworICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY1N0cmluZyB8IFNw
ZWNJbnQzMiB8IFNwZWNOdW1iZXIpOworICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxz
ZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAvLyBXZSBkb24ndCBo
YW5kbGUgdGhpcyB5ZXQuIDotKAogICAgICAgICBtX2lzVmFsaWQgPSBmYWxzZTsKLSAgICAgICAg
bm9kZS5zZXRDYW5FeGl0KHRydWUpOworICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOwog
ICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgICAgICAKICAgICBjYXNlIEFyaXRoU3ViOiB7
Ci0gICAgICAgIEpTVmFsdWUgbGVmdCA9IGZvck5vZGUobm9kZS5jaGlsZDEoKSkudmFsdWUoKTsK
LSAgICAgICAgSlNWYWx1ZSByaWdodCA9IGZvck5vZGUobm9kZS5jaGlsZDIoKSkudmFsdWUoKTsK
KyAgICAgICAgSlNWYWx1ZSBsZWZ0ID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSkudmFsdWUoKTsK
KyAgICAgICAgSlNWYWx1ZSByaWdodCA9IGZvck5vZGUobm9kZS0+Y2hpbGQyKCkpLnZhbHVlKCk7
CiAgICAgICAgIGlmIChsZWZ0ICYmIHJpZ2h0ICYmIGxlZnQuaXNOdW1iZXIoKSAmJiByaWdodC5p
c051bWJlcigpCi0gICAgICAgICAgICAmJiB0cnlTZXRDb25zdGFudChub2RlSW5kZXgsIEpTVmFs
dWUobGVmdC5hc051bWJlcigpIC0gcmlnaHQuYXNOdW1iZXIoKSkpKSB7CisgICAgICAgICAgICAm
JiB0cnlTZXRDb25zdGFudChub2RlLCBKU1ZhbHVlKGxlZnQuYXNOdW1iZXIoKSAtIHJpZ2h0LmFz
TnVtYmVyKCkpKSkgewogICAgICAgICAgICAgbV9mb3VuZENvbnN0YW50cyA9IHRydWU7Ci0gICAg
ICAgICAgICBub2RlLnNldENhbkV4aXQoZmFsc2UpOworICAgICAgICAgICAgbm9kZS0+c2V0Q2Fu
RXhpdChmYWxzZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBpZiAo
bV9ncmFwaC5hZGRTaG91bGRTcGVjdWxhdGVJbnRlZ2VyKG5vZGUpKSB7CiAgICAgICAgICAgICBz
cGVjdWxhdGVJbnQzMkJpbmFyeSgKLSAgICAgICAgICAgICAgICBub2RlLCAhbm9kZUNhblRydW5j
YXRlSW50ZWdlcihub2RlLmFyaXRoTm9kZUZsYWdzKCkpKTsKLSAgICAgICAgICAgIGZvck5vZGUo
bm9kZUluZGV4KS5zZXQoU3BlY0ludDMyKTsKKyAgICAgICAgICAgICAgICBub2RlLCAhbm9kZUNh
blRydW5jYXRlSW50ZWdlcihub2RlLT5hcml0aE5vZGVGbGFncygpKSk7CisgICAgICAgICAgICBm
b3JOb2RlKG5vZGUpLnNldChTcGVjSW50MzIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IH0KICAgICAgICAgc3BlY3VsYXRlTnVtYmVyQmluYXJ5KG5vZGUpOwotICAgICAgICBmb3JOb2Rl
KG5vZGVJbmRleCkuc2V0KFNwZWNEb3VibGUpOworICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChT
cGVjRG91YmxlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKICAgICBjYXNlIEFy
aXRoTmVnYXRlOiB7Ci0gICAgICAgIEpTVmFsdWUgY2hpbGQgPSBmb3JOb2RlKG5vZGUuY2hpbGQx
KCkpLnZhbHVlKCk7CisgICAgICAgIEpTVmFsdWUgY2hpbGQgPSBmb3JOb2RlKG5vZGUtPmNoaWxk
MSgpKS52YWx1ZSgpOwogICAgICAgICBpZiAoY2hpbGQgJiYgY2hpbGQuaXNOdW1iZXIoKQotICAg
ICAgICAgICAgJiYgdHJ5U2V0Q29uc3RhbnQobm9kZUluZGV4LCBKU1ZhbHVlKC1jaGlsZC5hc051
bWJlcigpKSkpIHsKKyAgICAgICAgICAgICYmIHRyeVNldENvbnN0YW50KG5vZGUsIEpTVmFsdWUo
LWNoaWxkLmFzTnVtYmVyKCkpKSkgewogICAgICAgICAgICAgbV9mb3VuZENvbnN0YW50cyA9IHRy
dWU7Ci0gICAgICAgICAgICBub2RlLnNldENhbkV4aXQoZmFsc2UpOworICAgICAgICAgICAgbm9k
ZS0+c2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAg
ICAgICBpZiAobV9ncmFwaC5uZWdhdGVTaG91bGRTcGVjdWxhdGVJbnRlZ2VyKG5vZGUpKSB7CiAg
ICAgICAgICAgICBzcGVjdWxhdGVJbnQzMlVuYXJ5KAotICAgICAgICAgICAgICAgIG5vZGUsICFu
b2RlQ2FuVHJ1bmNhdGVJbnRlZ2VyKG5vZGUuYXJpdGhOb2RlRmxhZ3MoKSkpOwotICAgICAgICAg
ICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChTcGVjSW50MzIpOworICAgICAgICAgICAgICAgIG5v
ZGUsICFub2RlQ2FuVHJ1bmNhdGVJbnRlZ2VyKG5vZGUtPmFyaXRoTm9kZUZsYWdzKCkpKTsKKyAg
ICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNJbnQzMik7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgfQogICAgICAgICBzcGVjdWxhdGVOdW1iZXJVbmFyeShub2RlKTsKLSAgICAg
ICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChTcGVjRG91YmxlKTsKKyAgICAgICAgZm9yTm9kZShu
b2RlKS5zZXQoU3BlY0RvdWJsZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCiAg
ICAgY2FzZSBBcml0aE11bDogewotICAgICAgICBKU1ZhbHVlIGxlZnQgPSBmb3JOb2RlKG5vZGUu
Y2hpbGQxKCkpLnZhbHVlKCk7Ci0gICAgICAgIEpTVmFsdWUgcmlnaHQgPSBmb3JOb2RlKG5vZGUu
Y2hpbGQyKCkpLnZhbHVlKCk7CisgICAgICAgIEpTVmFsdWUgbGVmdCA9IGZvck5vZGUobm9kZS0+
Y2hpbGQxKCkpLnZhbHVlKCk7CisgICAgICAgIEpTVmFsdWUgcmlnaHQgPSBmb3JOb2RlKG5vZGUt
PmNoaWxkMigpKS52YWx1ZSgpOwogICAgICAgICBpZiAobGVmdCAmJiByaWdodCAmJiBsZWZ0Lmlz
TnVtYmVyKCkgJiYgcmlnaHQuaXNOdW1iZXIoKQotICAgICAgICAgICAgJiYgdHJ5U2V0Q29uc3Rh
bnQobm9kZUluZGV4LCBKU1ZhbHVlKGxlZnQuYXNOdW1iZXIoKSAqIHJpZ2h0LmFzTnVtYmVyKCkp
KSkgeworICAgICAgICAgICAgJiYgdHJ5U2V0Q29uc3RhbnQobm9kZSwgSlNWYWx1ZShsZWZ0LmFz
TnVtYmVyKCkgKiByaWdodC5hc051bWJlcigpKSkpIHsKICAgICAgICAgICAgIG1fZm91bmRDb25z
dGFudHMgPSB0cnVlOwotICAgICAgICAgICAgbm9kZS5zZXRDYW5FeGl0KGZhbHNlKTsKKyAgICAg
ICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIH0KICAgICAgICAgaWYgKG1fZ3JhcGgubXVsU2hvdWxkU3BlY3VsYXRlSW50ZWdlcihub2Rl
KSkgewogICAgICAgICAgICAgc3BlY3VsYXRlSW50MzJCaW5hcnkoCiAgICAgICAgICAgICAgICAg
bm9kZSwKLSAgICAgICAgICAgICAgICAhbm9kZUNhblRydW5jYXRlSW50ZWdlcihub2RlLmFyaXRo
Tm9kZUZsYWdzKCkpCi0gICAgICAgICAgICAgICAgfHwgIW5vZGVDYW5JZ25vcmVOZWdhdGl2ZVpl
cm8obm9kZS5hcml0aE5vZGVGbGFncygpKSk7Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRl
eCkuc2V0KFNwZWNJbnQzMik7CisgICAgICAgICAgICAgICAgIW5vZGVDYW5UcnVuY2F0ZUludGVn
ZXIobm9kZS0+YXJpdGhOb2RlRmxhZ3MoKSkKKyAgICAgICAgICAgICAgICB8fCAhbm9kZUNhbkln
bm9yZU5lZ2F0aXZlWmVybyhub2RlLT5hcml0aE5vZGVGbGFncygpKSk7CisgICAgICAgICAgICBm
b3JOb2RlKG5vZGUpLnNldChTcGVjSW50MzIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IH0KICAgICAgICAgc3BlY3VsYXRlTnVtYmVyQmluYXJ5KG5vZGUpOwotICAgICAgICBpZiAoaXNS
ZWFsTnVtYmVyU3BlY3VsYXRpb24oZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpCi0gICAg
ICAgICAgICB8fCBpc1JlYWxOdW1iZXJTcGVjdWxhdGlvbihmb3JOb2RlKG5vZGUuY2hpbGQyKCkp
Lm1fdHlwZSkpCi0gICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFNwZWNEb3VibGVS
ZWFsKTsKKyAgICAgICAgaWYgKGlzUmVhbE51bWJlclNwZWN1bGF0aW9uKGZvck5vZGUobm9kZS0+
Y2hpbGQxKCkpLm1fdHlwZSkKKyAgICAgICAgICAgIHx8IGlzUmVhbE51bWJlclNwZWN1bGF0aW9u
KGZvck5vZGUobm9kZS0+Y2hpbGQyKCkpLm1fdHlwZSkpCisgICAgICAgICAgICBmb3JOb2RlKG5v
ZGUpLnNldChTcGVjRG91YmxlUmVhbCk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGZvck5v
ZGUobm9kZUluZGV4KS5zZXQoU3BlY0RvdWJsZSk7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUp
LnNldChTcGVjRG91YmxlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKQEAgLTU2
MywyNCArNTYyLDI0IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQK
ICAgICBjYXNlIEFyaXRoTWluOgogICAgIGNhc2UgQXJpdGhNYXg6CiAgICAgY2FzZSBBcml0aE1v
ZDogewotICAgICAgICBKU1ZhbHVlIGxlZnQgPSBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLnZhbHVl
KCk7Ci0gICAgICAgIEpTVmFsdWUgcmlnaHQgPSBmb3JOb2RlKG5vZGUuY2hpbGQyKCkpLnZhbHVl
KCk7CisgICAgICAgIEpTVmFsdWUgbGVmdCA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLnZhbHVl
KCk7CisgICAgICAgIEpTVmFsdWUgcmlnaHQgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMigpKS52YWx1
ZSgpOwogICAgICAgICBpZiAobGVmdCAmJiByaWdodCAmJiBsZWZ0LmlzTnVtYmVyKCkgJiYgcmln
aHQuaXNOdW1iZXIoKSkgewogICAgICAgICAgICAgZG91YmxlIGEgPSBsZWZ0LmFzTnVtYmVyKCk7
CiAgICAgICAgICAgICBkb3VibGUgYiA9IHJpZ2h0LmFzTnVtYmVyKCk7CiAgICAgICAgICAgICBi
b29sIGNvbnN0YW50V2FzU2V0OwotICAgICAgICAgICAgc3dpdGNoIChub2RlLm9wKCkpIHsKKyAg
ICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewogICAgICAgICAgICAgY2FzZSBBcml0aERp
djoKLSAgICAgICAgICAgICAgICBjb25zdGFudFdhc1NldCA9IHRyeVNldENvbnN0YW50KG5vZGVJ
bmRleCwgSlNWYWx1ZShhIC8gYikpOworICAgICAgICAgICAgICAgIGNvbnN0YW50V2FzU2V0ID0g
dHJ5U2V0Q29uc3RhbnQobm9kZSwgSlNWYWx1ZShhIC8gYikpOwogICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgY2FzZSBBcml0aE1pbjoKLSAgICAgICAgICAgICAgICBjb25zdGFu
dFdhc1NldCA9IHRyeVNldENvbnN0YW50KG5vZGVJbmRleCwgSlNWYWx1ZShhIDwgYiA/IGEgOiAo
YiA8PSBhID8gYiA6IGEgKyBiKSkpOworICAgICAgICAgICAgICAgIGNvbnN0YW50V2FzU2V0ID0g
dHJ5U2V0Q29uc3RhbnQobm9kZSwgSlNWYWx1ZShhIDwgYiA/IGEgOiAoYiA8PSBhID8gYiA6IGEg
KyBiKSkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBBcml0aE1h
eDoKLSAgICAgICAgICAgICAgICBjb25zdGFudFdhc1NldCA9IHRyeVNldENvbnN0YW50KG5vZGVJ
bmRleCwgSlNWYWx1ZShhID4gYiA/IGEgOiAoYiA+PSBhID8gYiA6IGEgKyBiKSkpOworICAgICAg
ICAgICAgICAgIGNvbnN0YW50V2FzU2V0ID0gdHJ5U2V0Q29uc3RhbnQobm9kZSwgSlNWYWx1ZShh
ID4gYiA/IGEgOiAoYiA+PSBhID8gYiA6IGEgKyBiKSkpOwogICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgY2FzZSBBcml0aE1vZDoKLSAgICAgICAgICAgICAgICBjb25zdGFudFdh
c1NldCA9IHRyeVNldENvbnN0YW50KG5vZGVJbmRleCwgSlNWYWx1ZShmbW9kKGEsIGIpKSk7Cisg
ICAgICAgICAgICAgICAgY29uc3RhbnRXYXNTZXQgPSB0cnlTZXRDb25zdGFudChub2RlLCBKU1Zh
bHVlKGZtb2QoYSwgYikpKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGRl
ZmF1bHQ6CiAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAg
LTU4OSw4NCArNTg4LDgzIEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBp
bmQKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChjb25zdGFudFdhc1NldCkgewogICAg
ICAgICAgICAgICAgIG1fZm91bmRDb25zdGFudHMgPSB0cnVlOwotICAgICAgICAgICAgICAgIG5v
ZGUuc2V0Q2FuRXhpdChmYWxzZSk7CisgICAgICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChm
YWxzZSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0K
LSAgICAgICAgaWYgKE5vZGU6OnNob3VsZFNwZWN1bGF0ZUludGVnZXJGb3JBcml0aG1ldGljKAot
ICAgICAgICAgICAgICAgIG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0sIG1fZ3JhcGhbbm9kZS5jaGls
ZDIoKV0pCi0gICAgICAgICAgICAmJiBub2RlLmNhblNwZWN1bGF0ZUludGVnZXIoKSkgeworICAg
ICAgICBpZiAoTm9kZTo6c2hvdWxkU3BlY3VsYXRlSW50ZWdlckZvckFyaXRobWV0aWMobm9kZS0+
Y2hpbGQxKCkubm9kZSgpLCBub2RlLT5jaGlsZDIoKS5ub2RlKCkpCisgICAgICAgICAgICAmJiBu
b2RlLT5jYW5TcGVjdWxhdGVJbnRlZ2VyKCkpIHsKICAgICAgICAgICAgIHNwZWN1bGF0ZUludDMy
QmluYXJ5KG5vZGUsIHRydWUpOyAvLyBmb3JjaW5nIGNhbi1leGl0LCB3aGljaCBpcyBhIGJpdCBv
biB0aGUgY29uc2VydmF0aXZlIHNpZGUuCi0gICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCku
c2V0KFNwZWNJbnQzMik7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjSW50MzIp
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgc3BlY3VsYXRlTnVtYmVy
QmluYXJ5KG5vZGUpOwotICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFNwZWNEb3VibGUp
OworICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjRG91YmxlKTsKICAgICAgICAgYnJlYWs7
CiAgICAgfQogICAgICAgICAgICAgCiAgICAgY2FzZSBBcml0aEFiczogewotICAgICAgICBKU1Zh
bHVlIGNoaWxkID0gZm9yTm9kZShub2RlLmNoaWxkMSgpKS52YWx1ZSgpOworICAgICAgICBKU1Zh
bHVlIGNoaWxkID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSkudmFsdWUoKTsKICAgICAgICAgaWYg
KGNoaWxkICYmIGNoaWxkLmlzTnVtYmVyKCkKLSAgICAgICAgICAgICYmIHRyeVNldENvbnN0YW50
KG5vZGVJbmRleCwgSlNWYWx1ZShmYWJzKGNoaWxkLmFzTnVtYmVyKCkpKSkpIHsKKyAgICAgICAg
ICAgICYmIHRyeVNldENvbnN0YW50KG5vZGUsIEpTVmFsdWUoZmFicyhjaGlsZC5hc051bWJlcigp
KSkpKSB7CiAgICAgICAgICAgICBtX2ZvdW5kQ29uc3RhbnRzID0gdHJ1ZTsKLSAgICAgICAgICAg
IG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7CisgICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZh
bHNlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIGlmIChtX2dyYXBo
W25vZGUuY2hpbGQxKCldLnNob3VsZFNwZWN1bGF0ZUludGVnZXJGb3JBcml0aG1ldGljKCkKLSAg
ICAgICAgICAgICYmIG5vZGUuY2FuU3BlY3VsYXRlSW50ZWdlcigpKSB7CisgICAgICAgIGlmIChu
b2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlSW50ZWdlckZvckFyaXRobWV0aWMoKQorICAg
ICAgICAgICAgJiYgbm9kZS0+Y2FuU3BlY3VsYXRlSW50ZWdlcigpKSB7CiAgICAgICAgICAgICBz
cGVjdWxhdGVJbnQzMlVuYXJ5KG5vZGUsIHRydWUpOwotICAgICAgICAgICAgZm9yTm9kZShub2Rl
SW5kZXgpLnNldChTcGVjSW50MzIpOworICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3Bl
Y0ludDMyKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIHNwZWN1bGF0
ZU51bWJlclVuYXJ5KG5vZGUpOwotICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFNwZWNE
b3VibGUpOworICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjRG91YmxlKTsKICAgICAgICAg
YnJlYWs7CiAgICAgfQogICAgICAgICAgICAgCiAgICAgY2FzZSBBcml0aFNxcnQ6IHsKLSAgICAg
ICAgSlNWYWx1ZSBjaGlsZCA9IGZvck5vZGUobm9kZS5jaGlsZDEoKSkudmFsdWUoKTsKKyAgICAg
ICAgSlNWYWx1ZSBjaGlsZCA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLnZhbHVlKCk7CiAgICAg
ICAgIGlmIChjaGlsZCAmJiBjaGlsZC5pc051bWJlcigpCi0gICAgICAgICAgICAmJiB0cnlTZXRD
b25zdGFudChub2RlSW5kZXgsIEpTVmFsdWUoc3FydChjaGlsZC5hc051bWJlcigpKSkpKSB7Cisg
ICAgICAgICAgICAmJiB0cnlTZXRDb25zdGFudChub2RlLCBKU1ZhbHVlKHNxcnQoY2hpbGQuYXNO
dW1iZXIoKSkpKSkgewogICAgICAgICAgICAgbV9mb3VuZENvbnN0YW50cyA9IHRydWU7Ci0gICAg
ICAgICAgICBub2RlLnNldENhbkV4aXQoZmFsc2UpOworICAgICAgICAgICAgbm9kZS0+c2V0Q2Fu
RXhpdChmYWxzZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBzcGVj
dWxhdGVOdW1iZXJVbmFyeShub2RlKTsKLSAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChT
cGVjRG91YmxlKTsKKyAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0RvdWJsZSk7CiAgICAg
ICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgICAgIAogICAgIGNhc2UgTG9naWNhbE5vdDogewog
ICAgICAgICBib29sIGRpZFNldENvbnN0YW50ID0gZmFsc2U7Ci0gICAgICAgIHN3aXRjaCAoYm9v
bGVhblJlc3VsdChub2RlLCBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpKSkgeworICAgICAgICBzd2l0
Y2ggKGJvb2xlYW5SZXN1bHQobm9kZSwgZm9yTm9kZShub2RlLT5jaGlsZDEoKSkpKSB7CiAgICAg
ICAgIGNhc2UgRGVmaW5pdGVseVRydWU6Ci0gICAgICAgICAgICBkaWRTZXRDb25zdGFudCA9IHRy
eVNldENvbnN0YW50KG5vZGVJbmRleCwganNCb29sZWFuKGZhbHNlKSk7CisgICAgICAgICAgICBk
aWRTZXRDb25zdGFudCA9IHRyeVNldENvbnN0YW50KG5vZGUsIGpzQm9vbGVhbihmYWxzZSkpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgRGVmaW5pdGVseUZhbHNlOgotICAgICAg
ICAgICAgZGlkU2V0Q29uc3RhbnQgPSB0cnlTZXRDb25zdGFudChub2RlSW5kZXgsIGpzQm9vbGVh
bih0cnVlKSk7CisgICAgICAgICAgICBkaWRTZXRDb25zdGFudCA9IHRyeVNldENvbnN0YW50KG5v
ZGUsIGpzQm9vbGVhbih0cnVlKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgZGVmYXVs
dDoKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGlmIChkaWRTZXRDb25z
dGFudCkgewogICAgICAgICAgICAgbV9mb3VuZENvbnN0YW50cyA9IHRydWU7Ci0gICAgICAgICAg
ICBub2RlLnNldENhbkV4aXQoZmFsc2UpOworICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChm
YWxzZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICBOb2RlJiBjaGls
ZCA9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV07Ci0gICAgICAgIGlmIChpc0Jvb2xlYW5TcGVjdWxh
dGlvbihjaGlsZC5wcmVkaWN0aW9uKCkpKQorICAgICAgICBOb2RlKiBjaGlsZCA9IG5vZGUtPmNo
aWxkMSgpLm5vZGUoKTsKKyAgICAgICAgaWYgKGlzQm9vbGVhblNwZWN1bGF0aW9uKGNoaWxkLT5w
cmVkaWN0aW9uKCkpKQogICAgICAgICAgICAgc3BlY3VsYXRlQm9vbGVhblVuYXJ5KG5vZGUpOwot
ICAgICAgICBlbHNlIGlmIChjaGlsZC5zaG91bGRTcGVjdWxhdGVOb25TdHJpbmdDZWxsT3JPdGhl
cigpKSB7Ci0gICAgICAgICAgICBub2RlLnNldENhbkV4aXQodHJ1ZSk7Ci0gICAgICAgICAgICBm
b3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcigoU3BlY0NlbGwgJiB+U3BlY1N0cmluZykgfCBT
cGVjT3RoZXIpOwotICAgICAgICB9IGVsc2UgaWYgKGNoaWxkLnNob3VsZFNwZWN1bGF0ZUludGVn
ZXIoKSkKKyAgICAgICAgZWxzZSBpZiAoY2hpbGQtPnNob3VsZFNwZWN1bGF0ZU5vblN0cmluZ0Nl
bGxPck90aGVyKCkpIHsKKyAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7CisgICAg
ICAgICAgICBmb3JOb2RlKGNoaWxkKS5maWx0ZXIoKFNwZWNDZWxsICYgflNwZWNTdHJpbmcpIHwg
U3BlY090aGVyKTsKKyAgICAgICAgfSBlbHNlIGlmIChjaGlsZC0+c2hvdWxkU3BlY3VsYXRlSW50
ZWdlcigpKQogICAgICAgICAgICAgc3BlY3VsYXRlSW50MzJVbmFyeShub2RlKTsKLSAgICAgICAg
ZWxzZSBpZiAoY2hpbGQuc2hvdWxkU3BlY3VsYXRlTnVtYmVyKCkpCisgICAgICAgIGVsc2UgaWYg
KGNoaWxkLT5zaG91bGRTcGVjdWxhdGVOdW1iZXIoKSkKICAgICAgICAgICAgIHNwZWN1bGF0ZU51
bWJlclVuYXJ5KG5vZGUpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBub2RlLnNldENhbkV4
aXQoZmFsc2UpOwotICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFNwZWNCb29sZWFuKTsK
KyAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOworICAgICAgICBmb3JOb2RlKG5v
ZGUpLnNldChTcGVjQm9vbGVhbik7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCkBA
IC02NzYsMzYgKzY3NCwzNiBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQg
aW5kCiAgICAgY2FzZSBJc1N0cmluZzoKICAgICBjYXNlIElzT2JqZWN0OgogICAgIGNhc2UgSXNG
dW5jdGlvbjogewotICAgICAgICBub2RlLnNldENhbkV4aXQobm9kZS5vcCgpID09IElzVW5kZWZp
bmVkICYmIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3RGb3Iobm9kZS5jb2RlT3JpZ2luKS0+bWFz
cXVlcmFkZXNBc1VuZGVmaW5lZFdhdGNocG9pbnQoKS0+aXNTdGlsbFZhbGlkKCkpOwotICAgICAg
ICBKU1ZhbHVlIGNoaWxkID0gZm9yTm9kZShub2RlLmNoaWxkMSgpKS52YWx1ZSgpOworICAgICAg
ICBub2RlLT5zZXRDYW5FeGl0KG5vZGUtPm9wKCkgPT0gSXNVbmRlZmluZWQgJiYgbV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdEZvcihub2RlLT5jb2RlT3JpZ2luKS0+bWFzcXVlcmFkZXNBc1VuZGVm
aW5lZFdhdGNocG9pbnQoKS0+aXNTdGlsbFZhbGlkKCkpOworICAgICAgICBKU1ZhbHVlIGNoaWxk
ID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSkudmFsdWUoKTsKICAgICAgICAgaWYgKGNoaWxkKSB7
CiAgICAgICAgICAgICBib29sIGNvbnN0YW50V2FzU2V0OwotICAgICAgICAgICAgc3dpdGNoIChu
b2RlLm9wKCkpIHsKKyAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewogICAgICAgICAg
ICAgY2FzZSBJc1VuZGVmaW5lZDoKLSAgICAgICAgICAgICAgICBpZiAobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdEZvcihub2RlLmNvZGVPcmlnaW4pLT5tYXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0
Y2hwb2ludCgpLT5pc1N0aWxsVmFsaWQoKSkgewotICAgICAgICAgICAgICAgICAgICBjb25zdGFu
dFdhc1NldCA9IHRyeVNldENvbnN0YW50KG5vZGVJbmRleCwganNCb29sZWFuKAorICAgICAgICAg
ICAgICAgIGlmIChtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0Rm9yKG5vZGUtPmNvZGVPcmlnaW4p
LT5tYXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2ludCgpLT5pc1N0aWxsVmFsaWQoKSkgewor
ICAgICAgICAgICAgICAgICAgICBjb25zdGFudFdhc1NldCA9IHRyeVNldENvbnN0YW50KG5vZGUs
IGpzQm9vbGVhbigKICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkLmlzQ2VsbCgpCiAgICAg
ICAgICAgICAgICAgICAgICAgICA/IGZhbHNlIAogICAgICAgICAgICAgICAgICAgICAgICAgOiBj
aGlsZC5pc1VuZGVmaW5lZCgpKSk7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgICAgICAgICAgY29uc3RhbnRXYXNTZXQgPSB0cnlTZXRDb25zdGFudChub2RlSW5kZXgsIGpz
Qm9vbGVhbigKKyAgICAgICAgICAgICAgICAgICAgY29uc3RhbnRXYXNTZXQgPSB0cnlTZXRDb25z
dGFudChub2RlLCBqc0Jvb2xlYW4oCiAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZC5pc0Nl
bGwoKQotICAgICAgICAgICAgICAgICAgICAgICAgPyBjaGlsZC5hc0NlbGwoKS0+c3RydWN0dXJl
KCktPm1hc3F1ZXJhZGVzQXNVbmRlZmluZWQobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdEZvcihu
b2RlLmNvZGVPcmlnaW4pKQorICAgICAgICAgICAgICAgICAgICAgICAgPyBjaGlsZC5hc0NlbGwo
KS0+c3RydWN0dXJlKCktPm1hc3F1ZXJhZGVzQXNVbmRlZmluZWQobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdEZvcihub2RlLT5jb2RlT3JpZ2luKSkKICAgICAgICAgICAgICAgICAgICAgICAgIDog
Y2hpbGQuaXNVbmRlZmluZWQoKSkpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgIGNhc2UgSXNCb29sZWFuOgotICAgICAgICAgICAgICAgIGNv
bnN0YW50V2FzU2V0ID0gdHJ5U2V0Q29uc3RhbnQobm9kZUluZGV4LCBqc0Jvb2xlYW4oY2hpbGQu
aXNCb29sZWFuKCkpKTsKKyAgICAgICAgICAgICAgICBjb25zdGFudFdhc1NldCA9IHRyeVNldENv
bnN0YW50KG5vZGUsIGpzQm9vbGVhbihjaGlsZC5pc0Jvb2xlYW4oKSkpOwogICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBJc051bWJlcjoKLSAgICAgICAgICAgICAgICBj
b25zdGFudFdhc1NldCA9IHRyeVNldENvbnN0YW50KG5vZGVJbmRleCwganNCb29sZWFuKGNoaWxk
LmlzTnVtYmVyKCkpKTsKKyAgICAgICAgICAgICAgICBjb25zdGFudFdhc1NldCA9IHRyeVNldENv
bnN0YW50KG5vZGUsIGpzQm9vbGVhbihjaGlsZC5pc051bWJlcigpKSk7CiAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIElzU3RyaW5nOgotICAgICAgICAgICAgICAgIGNv
bnN0YW50V2FzU2V0ID0gdHJ5U2V0Q29uc3RhbnQobm9kZUluZGV4LCBqc0Jvb2xlYW4oaXNKU1N0
cmluZyhjaGlsZCkpKTsKKyAgICAgICAgICAgICAgICBjb25zdGFudFdhc1NldCA9IHRyeVNldENv
bnN0YW50KG5vZGUsIGpzQm9vbGVhbihpc0pTU3RyaW5nKGNoaWxkKSkpOwogICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBJc09iamVjdDoKICAgICAgICAgICAgICAgICBp
ZiAoY2hpbGQuaXNOdWxsKCkgfHwgIWNoaWxkLmlzT2JqZWN0KCkpIHsKLSAgICAgICAgICAgICAg
ICAgICAgY29uc3RhbnRXYXNTZXQgPSB0cnlTZXRDb25zdGFudChub2RlSW5kZXgsIGpzQm9vbGVh
bihjaGlsZC5pc051bGwoKSkpOworICAgICAgICAgICAgICAgICAgICBjb25zdGFudFdhc1NldCA9
IHRyeVNldENvbnN0YW50KG5vZGUsIGpzQm9vbGVhbihjaGlsZC5pc051bGwoKSkpOwogICAgICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICBkZWZh
dWx0OgpAQCAtNzE4LDYxICs3MTYsNjEgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVu
c2lnbmVkIGluZAogICAgICAgICAgICAgfQogICAgICAgICB9CiAKLSAgICAgICAgZm9yTm9kZShu
b2RlSW5kZXgpLnNldChTcGVjQm9vbGVhbik7CisgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNw
ZWNCb29sZWFuKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAgY2FzZSBUeXBlT2Y6IHsK
ICAgICAgICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gbV9jb2RlQmxvY2stPmdsb2JhbERh
dGEoKTsKLSAgICAgICAgSlNWYWx1ZSBjaGlsZCA9IGZvck5vZGUobm9kZS5jaGlsZDEoKSkudmFs
dWUoKTsKLSAgICAgICAgQWJzdHJhY3RWYWx1ZSYgYWJzdHJhY3RDaGlsZCA9IGZvck5vZGUobm9k
ZS5jaGlsZDEoKSk7CisgICAgICAgIEpTVmFsdWUgY2hpbGQgPSBmb3JOb2RlKG5vZGUtPmNoaWxk
MSgpKS52YWx1ZSgpOworICAgICAgICBBYnN0cmFjdFZhbHVlJiBhYnN0cmFjdENoaWxkID0gZm9y
Tm9kZShub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgIGlmIChjaGlsZCkgewotICAgICAgICAgICAg
SlNWYWx1ZSB0eXBlU3RyaW5nID0ganNUeXBlU3RyaW5nRm9yVmFsdWUoKmdsb2JhbERhdGEsIG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3RGb3Iobm9kZS5jb2RlT3JpZ2luKSwgY2hpbGQpOwotICAg
ICAgICAgICAgaWYgKHRyeVNldENvbnN0YW50KG5vZGVJbmRleCwgdHlwZVN0cmluZykpIHsKKyAg
ICAgICAgICAgIEpTVmFsdWUgdHlwZVN0cmluZyA9IGpzVHlwZVN0cmluZ0ZvclZhbHVlKCpnbG9i
YWxEYXRhLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0Rm9yKG5vZGUtPmNvZGVPcmlnaW4pLCBj
aGlsZCk7CisgICAgICAgICAgICBpZiAodHJ5U2V0Q29uc3RhbnQobm9kZSwgdHlwZVN0cmluZykp
IHsKICAgICAgICAgICAgICAgICBtX2ZvdW5kQ29uc3RhbnRzID0gdHJ1ZTsKICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIGlmIChpc051bWJlclNw
ZWN1bGF0aW9uKGFic3RyYWN0Q2hpbGQubV90eXBlKSkgewotICAgICAgICAgICAgaWYgKHRyeVNl
dENvbnN0YW50KG5vZGVJbmRleCwgZ2xvYmFsRGF0YS0+c21hbGxTdHJpbmdzLm51bWJlclN0cmlu
ZygpKSkgewotICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNw
ZWNOdW1iZXIpOworICAgICAgICAgICAgaWYgKHRyeVNldENvbnN0YW50KG5vZGUsIGdsb2JhbERh
dGEtPnNtYWxsU3RyaW5ncy5udW1iZXJTdHJpbmcoKSkpIHsKKyAgICAgICAgICAgICAgICBmb3JO
b2RlKG5vZGUtPmNoaWxkMSgpKS5maWx0ZXIoU3BlY051bWJlcik7CiAgICAgICAgICAgICAgICAg
bV9mb3VuZENvbnN0YW50cyA9IHRydWU7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICB9CiAgICAgICAgIH0gZWxzZSBpZiAoaXNTdHJpbmdTcGVjdWxhdGlvbihhYnN0cmFjdENo
aWxkLm1fdHlwZSkpIHsKLSAgICAgICAgICAgIGlmICh0cnlTZXRDb25zdGFudChub2RlSW5kZXgs
IGdsb2JhbERhdGEtPnNtYWxsU3RyaW5ncy5zdHJpbmdTdHJpbmcoKSkpIHsKLSAgICAgICAgICAg
ICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjU3RyaW5nKTsKKyAgICAgICAg
ICAgIGlmICh0cnlTZXRDb25zdGFudChub2RlLCBnbG9iYWxEYXRhLT5zbWFsbFN0cmluZ3Muc3Ry
aW5nU3RyaW5nKCkpKSB7CisgICAgICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDEoKSku
ZmlsdGVyKFNwZWNTdHJpbmcpOwogICAgICAgICAgICAgICAgIG1fZm91bmRDb25zdGFudHMgPSB0
cnVlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICB9IGVs
c2UgaWYgKGlzRmluYWxPYmplY3RTcGVjdWxhdGlvbihhYnN0cmFjdENoaWxkLm1fdHlwZSkgfHwg
aXNBcnJheVNwZWN1bGF0aW9uKGFic3RyYWN0Q2hpbGQubV90eXBlKSB8fCBpc0FyZ3VtZW50c1Nw
ZWN1bGF0aW9uKGFic3RyYWN0Q2hpbGQubV90eXBlKSkgewotICAgICAgICAgICAgaWYgKHRyeVNl
dENvbnN0YW50KG5vZGVJbmRleCwgZ2xvYmFsRGF0YS0+c21hbGxTdHJpbmdzLm9iamVjdFN0cmlu
ZygpKSkgewotICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNw
ZWNGaW5hbE9iamVjdCB8IFNwZWNBcnJheSB8IFNwZWNBcmd1bWVudHMpOworICAgICAgICAgICAg
aWYgKHRyeVNldENvbnN0YW50KG5vZGUsIGdsb2JhbERhdGEtPnNtYWxsU3RyaW5ncy5vYmplY3RT
dHJpbmcoKSkpIHsKKyAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5maWx0
ZXIoU3BlY0ZpbmFsT2JqZWN0IHwgU3BlY0FycmF5IHwgU3BlY0FyZ3VtZW50cyk7CiAgICAgICAg
ICAgICAgICAgbV9mb3VuZENvbnN0YW50cyA9IHRydWU7CiAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSBpZiAoaXNGdW5jdGlvblNwZWN1bGF0aW9u
KGFic3RyYWN0Q2hpbGQubV90eXBlKSkgewotICAgICAgICAgICAgaWYgKHRyeVNldENvbnN0YW50
KG5vZGVJbmRleCwgZ2xvYmFsRGF0YS0+c21hbGxTdHJpbmdzLmZ1bmN0aW9uU3RyaW5nKCkpKSB7
Ci0gICAgICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY0Z1bmN0
aW9uKTsKKyAgICAgICAgICAgIGlmICh0cnlTZXRDb25zdGFudChub2RlLCBnbG9iYWxEYXRhLT5z
bWFsbFN0cmluZ3MuZnVuY3Rpb25TdHJpbmcoKSkpIHsKKyAgICAgICAgICAgICAgICBmb3JOb2Rl
KG5vZGUtPmNoaWxkMSgpKS5maWx0ZXIoU3BlY0Z1bmN0aW9uKTsKICAgICAgICAgICAgICAgICBt
X2ZvdW5kQ29uc3RhbnRzID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgIH0KICAgICAgICAgfSBlbHNlIGlmIChpc0Jvb2xlYW5TcGVjdWxhdGlvbihhYnN0cmFjdENo
aWxkLm1fdHlwZSkpIHsKLSAgICAgICAgICAgIGlmICh0cnlTZXRDb25zdGFudChub2RlSW5kZXgs
IGdsb2JhbERhdGEtPnNtYWxsU3RyaW5ncy5ib29sZWFuU3RyaW5nKCkpKSB7Ci0gICAgICAgICAg
ICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY0Jvb2xlYW4pOworICAgICAg
ICAgICAgaWYgKHRyeVNldENvbnN0YW50KG5vZGUsIGdsb2JhbERhdGEtPnNtYWxsU3RyaW5ncy5i
b29sZWFuU3RyaW5nKCkpKSB7CisgICAgICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDEo
KSkuZmlsdGVyKFNwZWNCb29sZWFuKTsKICAgICAgICAgICAgICAgICBtX2ZvdW5kQ29uc3RhbnRz
ID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICAgIE5vZGUmIGNoaWxkTm9kZSA9IG1fZ3JhcGhbbm9kZS5jaGls
ZDEoKV07Ci0gICAgICAgICAgICBpZiAoaXNDZWxsU3BlY3VsYXRpb24oY2hpbGROb2RlLnByZWRp
Y3Rpb24oKSkpIHsKLSAgICAgICAgICAgICAgICBpZiAoaXNTdHJpbmdTcGVjdWxhdGlvbihjaGls
ZE5vZGUucHJlZGljdGlvbigpKSkKLSAgICAgICAgICAgICAgICAgICAgZm9yTm9kZShub2RlLmNo
aWxkMSgpKS5maWx0ZXIoU3BlY1N0cmluZyk7CisgICAgICAgICAgICBOb2RlKiBjaGlsZE5vZGUg
PSBub2RlLT5jaGlsZDEoKS5ub2RlKCk7CisgICAgICAgICAgICBpZiAoaXNDZWxsU3BlY3VsYXRp
b24oY2hpbGROb2RlLT5wcmVkaWN0aW9uKCkpKSB7CisgICAgICAgICAgICAgICAgaWYgKGlzU3Ry
aW5nU3BlY3VsYXRpb24oY2hpbGROb2RlLT5wcmVkaWN0aW9uKCkpKQorICAgICAgICAgICAgICAg
ICAgICBmb3JOb2RlKGNoaWxkTm9kZSkuZmlsdGVyKFNwZWNTdHJpbmcpOwogICAgICAgICAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0
ZXIoU3BlY0NlbGwpOwotICAgICAgICAgICAgICAgIG5vZGUuc2V0Q2FuRXhpdCh0cnVlKTsKKyAg
ICAgICAgICAgICAgICAgICAgZm9yTm9kZShjaGlsZE5vZGUpLmZpbHRlcihTcGVjQ2VsbCk7Cisg
ICAgICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKICAgICAgICAgICAgIH0KICAg
ICAgICAgfQotICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFNwZWNTdHJpbmcpOworICAg
ICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjU3RyaW5nKTsKICAgICAgICAgYnJlYWs7CiAgICAg
fQogICAgICAgICAgICAgCkBAIC03ODMsMjYgKzc4MSwyNiBAQCBib29sIEFic3RyYWN0U3RhdGU6
OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgY2FzZSBDb21wYXJlRXE6IHsKICAgICAgICAgYm9v
bCBjb25zdGFudFdhc1NldCA9IGZhbHNlOwogCi0gICAgICAgIEpTVmFsdWUgbGVmdENvbnN0ID0g
Zm9yTm9kZShub2RlLmNoaWxkMSgpKS52YWx1ZSgpOwotICAgICAgICBKU1ZhbHVlIHJpZ2h0Q29u
c3QgPSBmb3JOb2RlKG5vZGUuY2hpbGQyKCkpLnZhbHVlKCk7CisgICAgICAgIEpTVmFsdWUgbGVm
dENvbnN0ID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSkudmFsdWUoKTsKKyAgICAgICAgSlNWYWx1
ZSByaWdodENvbnN0ID0gZm9yTm9kZShub2RlLT5jaGlsZDIoKSkudmFsdWUoKTsKICAgICAgICAg
aWYgKGxlZnRDb25zdCAmJiByaWdodENvbnN0ICYmIGxlZnRDb25zdC5pc051bWJlcigpICYmIHJp
Z2h0Q29uc3QuaXNOdW1iZXIoKSkgewogICAgICAgICAgICAgZG91YmxlIGEgPSBsZWZ0Q29uc3Qu
YXNOdW1iZXIoKTsKICAgICAgICAgICAgIGRvdWJsZSBiID0gcmlnaHRDb25zdC5hc051bWJlcigp
OwotICAgICAgICAgICAgc3dpdGNoIChub2RlLm9wKCkpIHsKKyAgICAgICAgICAgIHN3aXRjaCAo
bm9kZS0+b3AoKSkgewogICAgICAgICAgICAgY2FzZSBDb21wYXJlTGVzczoKLSAgICAgICAgICAg
ICAgICBjb25zdGFudFdhc1NldCA9IHRyeVNldENvbnN0YW50KG5vZGVJbmRleCwganNCb29sZWFu
KGEgPCBiKSk7CisgICAgICAgICAgICAgICAgY29uc3RhbnRXYXNTZXQgPSB0cnlTZXRDb25zdGFu
dChub2RlLCBqc0Jvb2xlYW4oYSA8IGIpKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgIGNhc2UgQ29tcGFyZUxlc3NFcToKLSAgICAgICAgICAgICAgICBjb25zdGFudFdhc1Nl
dCA9IHRyeVNldENvbnN0YW50KG5vZGVJbmRleCwganNCb29sZWFuKGEgPD0gYikpOworICAgICAg
ICAgICAgICAgIGNvbnN0YW50V2FzU2V0ID0gdHJ5U2V0Q29uc3RhbnQobm9kZSwganNCb29sZWFu
KGEgPD0gYikpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBDb21w
YXJlR3JlYXRlcjoKLSAgICAgICAgICAgICAgICBjb25zdGFudFdhc1NldCA9IHRyeVNldENvbnN0
YW50KG5vZGVJbmRleCwganNCb29sZWFuKGEgPiBiKSk7CisgICAgICAgICAgICAgICAgY29uc3Rh
bnRXYXNTZXQgPSB0cnlTZXRDb25zdGFudChub2RlLCBqc0Jvb2xlYW4oYSA+IGIpKTsKICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgQ29tcGFyZUdyZWF0ZXJFcToKLSAg
ICAgICAgICAgICAgICBjb25zdGFudFdhc1NldCA9IHRyeVNldENvbnN0YW50KG5vZGVJbmRleCwg
anNCb29sZWFuKGEgPj0gYikpOworICAgICAgICAgICAgICAgIGNvbnN0YW50V2FzU2V0ID0gdHJ5
U2V0Q29uc3RhbnQobm9kZSwganNCb29sZWFuKGEgPj0gYikpOwogICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgY2FzZSBDb21wYXJlRXE6Ci0gICAgICAgICAgICAgICAgY29uc3Rh
bnRXYXNTZXQgPSB0cnlTZXRDb25zdGFudChub2RlSW5kZXgsIGpzQm9vbGVhbihhID09IGIpKTsK
KyAgICAgICAgICAgICAgICBjb25zdGFudFdhc1NldCA9IHRyeVNldENvbnN0YW50KG5vZGUsIGpz
Qm9vbGVhbihhID09IGIpKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGRl
ZmF1bHQ6CiAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAg
LTgxMSwyNCArODA5LDI0IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBp
bmQKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgaWYgKCFjb25z
dGFudFdhc1NldCAmJiBub2RlLm9wKCkgPT0gQ29tcGFyZUVxKSB7Ci0gICAgICAgICAgICBTcGVj
dWxhdGVkVHlwZSBsZWZ0VHlwZSA9IGZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlOwotICAg
ICAgICAgICAgU3BlY3VsYXRlZFR5cGUgcmlnaHRUeXBlID0gZm9yTm9kZShub2RlLmNoaWxkMigp
KS5tX3R5cGU7CisgICAgICAgIGlmICghY29uc3RhbnRXYXNTZXQgJiYgbm9kZS0+b3AoKSA9PSBD
b21wYXJlRXEpIHsKKyAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIGxlZnRUeXBlID0gZm9yTm9k
ZShub2RlLT5jaGlsZDEoKSkubV90eXBlOworICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgcmln
aHRUeXBlID0gZm9yTm9kZShub2RlLT5jaGlsZDIoKSkubV90eXBlOwogICAgICAgICAgICAgaWYg
KChpc0ludDMyU3BlY3VsYXRpb24obGVmdFR5cGUpICYmIGlzT3RoZXJTcGVjdWxhdGlvbihyaWdo
dFR5cGUpKQogICAgICAgICAgICAgICAgIHx8IChpc090aGVyU3BlY3VsYXRpb24obGVmdFR5cGUp
ICYmIGlzSW50MzJTcGVjdWxhdGlvbihyaWdodFR5cGUpKSkKLSAgICAgICAgICAgICAgICBjb25z
dGFudFdhc1NldCA9IHRyeVNldENvbnN0YW50KG5vZGVJbmRleCwganNCb29sZWFuKGZhbHNlKSk7
CisgICAgICAgICAgICAgICAgY29uc3RhbnRXYXNTZXQgPSB0cnlTZXRDb25zdGFudChub2RlLCBq
c0Jvb2xlYW4oZmFsc2UpKTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgaWYgKGNvbnN0
YW50V2FzU2V0KSB7CiAgICAgICAgICAgICBtX2ZvdW5kQ29uc3RhbnRzID0gdHJ1ZTsKLSAgICAg
ICAgICAgIG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7CisgICAgICAgICAgICBub2RlLT5zZXRDYW5F
eGl0KGZhbHNlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIAotICAg
ICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFNwZWNCb29sZWFuKTsKKyAgICAgICAgZm9yTm9k
ZShub2RlKS5zZXQoU3BlY0Jvb2xlYW4pOwogICAgICAgICAKLSAgICAgICAgTm9kZSYgbGVmdCA9
IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV07Ci0gICAgICAgIE5vZGUmIHJpZ2h0ID0gbV9ncmFwaFtu
b2RlLmNoaWxkMigpXTsKKyAgICAgICAgTm9kZSogbGVmdCA9IG5vZGUtPmNoaWxkMSgpLm5vZGUo
KTsKKyAgICAgICAgTm9kZSogcmlnaHQgPSBub2RlLT5jaGlsZDIoKS5ub2RlKCk7CiAgICAgICAg
IFNwZWN1bGF0ZWRUeXBlIGZpbHRlcjsKICAgICAgICAgU3BlY3VsYXRlZFR5cGVDaGVja2VyIGNo
ZWNrZXI7CiAgICAgICAgIGlmIChOb2RlOjpzaG91bGRTcGVjdWxhdGVJbnRlZ2VyKGxlZnQsIHJp
Z2h0KSkgewpAQCAtODM3LDEyMiArODM1LDExOCBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1
dGUodW5zaWduZWQgaW5kCiAgICAgICAgIH0gZWxzZSBpZiAoTm9kZTo6c2hvdWxkU3BlY3VsYXRl
TnVtYmVyKGxlZnQsIHJpZ2h0KSkgewogICAgICAgICAgICAgZmlsdGVyID0gU3BlY051bWJlcjsK
ICAgICAgICAgICAgIGNoZWNrZXIgPSBpc051bWJlclNwZWN1bGF0aW9uOwotICAgICAgICB9IGVs
c2UgaWYgKG5vZGUub3AoKSA9PSBDb21wYXJlRXEpIHsKLSAgICAgICAgICAgIGlmICgobV9ncmFw
aC5pc0NvbnN0YW50KG5vZGUuY2hpbGQxKCkuaW5kZXgoKSkKLSAgICAgICAgICAgICAgICAgJiYg
bV9ncmFwaC52YWx1ZU9mSlNDb25zdGFudChub2RlLmNoaWxkMSgpLmluZGV4KCkpLmlzTnVsbCgp
KQotICAgICAgICAgICAgICAgIHx8IChtX2dyYXBoLmlzQ29uc3RhbnQobm9kZS5jaGlsZDIoKS5p
bmRleCgpKQotICAgICAgICAgICAgICAgICAgICAmJiBtX2dyYXBoLnZhbHVlT2ZKU0NvbnN0YW50
KG5vZGUuY2hpbGQyKCkuaW5kZXgoKSkuaXNOdWxsKCkpKSB7CisgICAgICAgIH0gZWxzZSBpZiAo
bm9kZS0+b3AoKSA9PSBDb21wYXJlRXEpIHsKKyAgICAgICAgICAgIGlmICgobV9ncmFwaC5pc0Nv
bnN0YW50KGxlZnQpICYmIG1fZ3JhcGgudmFsdWVPZkpTQ29uc3RhbnQobGVmdCkuaXNOdWxsKCkp
CisgICAgICAgICAgICAgICAgfHwgKG1fZ3JhcGguaXNDb25zdGFudChyaWdodCkgJiYgbV9ncmFw
aC52YWx1ZU9mSlNDb25zdGFudChyaWdodCkuaXNOdWxsKCkpKSB7CiAgICAgICAgICAgICAgICAg
Ly8gV2UgY2FuIGV4aXQgaWYgd2UgaGF2ZW4ndCBmaXJlZCB0aGUgTWFzcXVlcmFkZXNBc1VuZGVm
aW5kIHdhdGNocG9pbnQgeWV0LgotICAgICAgICAgICAgICAgIG5vZGUuc2V0Q2FuRXhpdChtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0Rm9yKG5vZGUuY29kZU9yaWdpbiktPm1hc3F1ZXJhZGVzQXNV
bmRlZmluZWRXYXRjaHBvaW50KCktPmlzU3RpbGxWYWxpZCgpKTsKKyAgICAgICAgICAgICAgICBu
b2RlLT5zZXRDYW5FeGl0KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3RGb3Iobm9kZS0+Y29kZU9y
aWdpbiktPm1hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50KCktPmlzU3RpbGxWYWxpZCgp
KTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAot
ICAgICAgICAgICAgaWYgKGxlZnQuc2hvdWxkU3BlY3VsYXRlU3RyaW5nKCkgfHwgcmlnaHQuc2hv
dWxkU3BlY3VsYXRlU3RyaW5nKCkpIHsKLSAgICAgICAgICAgICAgICBub2RlLnNldENhbkV4aXQo
ZmFsc2UpOworICAgICAgICAgICAgaWYgKGxlZnQtPnNob3VsZFNwZWN1bGF0ZVN0cmluZygpIHx8
IHJpZ2h0LT5zaG91bGRTcGVjdWxhdGVTdHJpbmcoKSkgeworICAgICAgICAgICAgICAgIG5vZGUt
PnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
fSAKLSAgICAgICAgICAgIGlmIChsZWZ0LnNob3VsZFNwZWN1bGF0ZU5vblN0cmluZ0NlbGwoKSAm
JiByaWdodC5zaG91bGRTcGVjdWxhdGVOb25TdHJpbmdDZWxsT3JPdGhlcigpKSB7Ci0gICAgICAg
ICAgICAgICAgbm9kZS5zZXRDYW5FeGl0KHRydWUpOwotICAgICAgICAgICAgICAgIGZvck5vZGUo
bm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNDZWxsICYgflNwZWNTdHJpbmcpOwotICAgICAgICAg
ICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKChTcGVjQ2VsbCAmIH5TcGVjU3Ry
aW5nKSB8IFNwZWNPdGhlcik7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICBpZiAobGVmdC5zaG91bGRTcGVjdWxhdGVOb25TdHJpbmdDZWxsT3JPdGhl
cigpICYmIHJpZ2h0LnNob3VsZFNwZWN1bGF0ZU5vblN0cmluZ0NlbGwoKSkgewotICAgICAgICAg
ICAgICAgIG5vZGUuc2V0Q2FuRXhpdCh0cnVlKTsKLSAgICAgICAgICAgICAgICBmb3JOb2RlKG5v
ZGUuY2hpbGQxKCkpLmZpbHRlcigoU3BlY0NlbGwgJiB+U3BlY1N0cmluZykgfCBTcGVjT3RoZXIp
OwotICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKFNwZWNDZWxs
ICYgflNwZWNTdHJpbmcpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgaWYgKGxlZnQuc2hvdWxkU3BlY3VsYXRlTm9uU3RyaW5nQ2VsbCgpICYmIHJp
Z2h0LnNob3VsZFNwZWN1bGF0ZU5vblN0cmluZ0NlbGwoKSkgewotICAgICAgICAgICAgICAgIG5v
ZGUuc2V0Q2FuRXhpdCh0cnVlKTsKLSAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQx
KCkpLmZpbHRlcihTcGVjQ2VsbCAmIH5TcGVjU3RyaW5nKTsKLSAgICAgICAgICAgICAgICBmb3JO
b2RlKG5vZGUuY2hpbGQyKCkpLmZpbHRlcihTcGVjQ2VsbCAmIH5TcGVjU3RyaW5nKTsKKyAgICAg
ICAgICAgIGlmIChsZWZ0LT5zaG91bGRTcGVjdWxhdGVOb25TdHJpbmdDZWxsKCkgJiYgcmlnaHQt
PnNob3VsZFNwZWN1bGF0ZU5vblN0cmluZ0NlbGxPck90aGVyKCkpIHsKKyAgICAgICAgICAgICAg
ICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOworICAgICAgICAgICAgICAgIGZvck5vZGUobGVmdCku
ZmlsdGVyKFNwZWNDZWxsICYgflNwZWNTdHJpbmcpOworICAgICAgICAgICAgICAgIGZvck5vZGUo
cmlnaHQpLmZpbHRlcigoU3BlY0NlbGwgJiB+U3BlY1N0cmluZykgfCBTcGVjT3RoZXIpOworICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGxlZnQt
PnNob3VsZFNwZWN1bGF0ZU5vblN0cmluZ0NlbGxPck90aGVyKCkgJiYgcmlnaHQtPnNob3VsZFNw
ZWN1bGF0ZU5vblN0cmluZ0NlbGwoKSkgeworICAgICAgICAgICAgICAgIG5vZGUtPnNldENhbkV4
aXQodHJ1ZSk7CisgICAgICAgICAgICAgICAgZm9yTm9kZShsZWZ0KS5maWx0ZXIoKFNwZWNDZWxs
ICYgflNwZWNTdHJpbmcpIHwgU3BlY090aGVyKTsKKyAgICAgICAgICAgICAgICBmb3JOb2RlKHJp
Z2h0KS5maWx0ZXIoU3BlY0NlbGwgJiB+U3BlY1N0cmluZyk7CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAobGVmdC0+c2hvdWxkU3BlY3VsYXRl
Tm9uU3RyaW5nQ2VsbCgpICYmIHJpZ2h0LT5zaG91bGRTcGVjdWxhdGVOb25TdHJpbmdDZWxsKCkp
IHsKKyAgICAgICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOworICAgICAgICAgICAg
ICAgIGZvck5vZGUobGVmdCkuZmlsdGVyKFNwZWNDZWxsICYgflNwZWNTdHJpbmcpOworICAgICAg
ICAgICAgICAgIGZvck5vZGUocmlnaHQpLmZpbHRlcihTcGVjQ2VsbCAmIH5TcGVjU3RyaW5nKTsK
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAKICAgICAgICAgICAgIGZp
bHRlciA9IFNwZWNUb3A7CiAgICAgICAgICAgICBjaGVja2VyID0gaXNBbnlTcGVjdWxhdGlvbjsK
LSAgICAgICAgICAgIGNsb2JiZXJXb3JsZChub2RlLmNvZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7
CisgICAgICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+Y29kZU9yaWdpbiwgaW5kZXhJbkJsb2Nr
KTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGZpbHRlciA9IFNwZWNUb3A7CiAgICAg
ICAgICAgICBjaGVja2VyID0gaXNBbnlTcGVjdWxhdGlvbjsKLSAgICAgICAgICAgIGNsb2JiZXJX
b3JsZChub2RlLmNvZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7CisgICAgICAgICAgICBjbG9iYmVy
V29ybGQobm9kZS0+Y29kZU9yaWdpbiwgaW5kZXhJbkJsb2NrKTsKICAgICAgICAgfQotICAgICAg
ICBub2RlLnNldENhbkV4aXQoCi0gICAgICAgICAgICAhY2hlY2tlcihmb3JOb2RlKG5vZGUuY2hp
bGQxKCkpLm1fdHlwZSkKLSAgICAgICAgICAgIHx8ICFjaGVja2VyKGZvck5vZGUobm9kZS5jaGls
ZDIoKSkubV90eXBlKSk7Ci0gICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKGZp
bHRlcik7Ci0gICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKGZpbHRlcik7Cisg
ICAgICAgIG5vZGUtPnNldENhbkV4aXQoCisgICAgICAgICAgICAhY2hlY2tlcihmb3JOb2RlKGxl
ZnQpLm1fdHlwZSkKKyAgICAgICAgICAgIHx8ICFjaGVja2VyKGZvck5vZGUocmlnaHQpLm1fdHlw
ZSkpOworICAgICAgICBmb3JOb2RlKGxlZnQpLmZpbHRlcihmaWx0ZXIpOworICAgICAgICBmb3JO
b2RlKHJpZ2h0KS5maWx0ZXIoZmlsdGVyKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAg
ICAgICAgCiAgICAgY2FzZSBDb21wYXJlU3RyaWN0RXE6IHsKLSAgICAgICAgSlNWYWx1ZSBsZWZ0
ID0gZm9yTm9kZShub2RlLmNoaWxkMSgpKS52YWx1ZSgpOwotICAgICAgICBKU1ZhbHVlIHJpZ2h0
ID0gZm9yTm9kZShub2RlLmNoaWxkMigpKS52YWx1ZSgpOworICAgICAgICBOb2RlKiBsZWZ0Tm9k
ZSA9IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKKyAgICAgICAgTm9kZSogcmlnaHROb2RlID0gbm9k
ZS0+Y2hpbGQyKCkubm9kZSgpOworICAgICAgICBKU1ZhbHVlIGxlZnQgPSBmb3JOb2RlKGxlZnRO
b2RlKS52YWx1ZSgpOworICAgICAgICBKU1ZhbHVlIHJpZ2h0ID0gZm9yTm9kZShyaWdodE5vZGUp
LnZhbHVlKCk7CiAgICAgICAgIGlmIChsZWZ0ICYmIHJpZ2h0ICYmIGxlZnQuaXNOdW1iZXIoKSAm
JiByaWdodC5pc051bWJlcigpCi0gICAgICAgICAgICAmJiB0cnlTZXRDb25zdGFudChub2RlSW5k
ZXgsIGpzQm9vbGVhbihsZWZ0LmFzTnVtYmVyKCkgPT0gcmlnaHQuYXNOdW1iZXIoKSkpKSB7Cisg
ICAgICAgICAgICAmJiB0cnlTZXRDb25zdGFudChub2RlLCBqc0Jvb2xlYW4obGVmdC5hc051bWJl
cigpID09IHJpZ2h0LmFzTnVtYmVyKCkpKSkgewogICAgICAgICAgICAgbV9mb3VuZENvbnN0YW50
cyA9IHRydWU7Ci0gICAgICAgICAgICBub2RlLnNldENhbkV4aXQoZmFsc2UpOworICAgICAgICAg
ICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
fQotICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFNwZWNCb29sZWFuKTsKLSAgICAgICAg
aWYgKG1fZ3JhcGguaXNKU0NvbnN0YW50KG5vZGUuY2hpbGQxKCkuaW5kZXgoKSkpIHsKLSAgICAg
ICAgICAgIEpTVmFsdWUgdmFsdWUgPSBtX2dyYXBoLnZhbHVlT2ZKU0NvbnN0YW50KG5vZGUuY2hp
bGQxKCkuaW5kZXgoKSk7CisgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNCb29sZWFuKTsK
KyAgICAgICAgaWYgKG1fZ3JhcGguaXNKU0NvbnN0YW50KGxlZnROb2RlKSkgeworICAgICAgICAg
ICAgSlNWYWx1ZSB2YWx1ZSA9IG1fZ3JhcGgudmFsdWVPZkpTQ29uc3RhbnQobGVmdE5vZGUpOwog
ICAgICAgICAgICAgaWYgKCF2YWx1ZS5pc051bWJlcigpICYmICF2YWx1ZS5pc1N0cmluZygpKSB7
Ci0gICAgICAgICAgICAgICAgbm9kZS5zZXRDYW5FeGl0KGZhbHNlKTsKKyAgICAgICAgICAgICAg
ICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgIH0KICAgICAgICAgfQotICAgICAgICBpZiAobV9ncmFwaC5pc0pTQ29uc3RhbnQobm9k
ZS5jaGlsZDIoKS5pbmRleCgpKSkgewotICAgICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IG1fZ3Jh
cGgudmFsdWVPZkpTQ29uc3RhbnQobm9kZS5jaGlsZDIoKS5pbmRleCgpKTsKKyAgICAgICAgaWYg
KG1fZ3JhcGguaXNKU0NvbnN0YW50KHJpZ2h0Tm9kZSkpIHsKKyAgICAgICAgICAgIEpTVmFsdWUg
dmFsdWUgPSBtX2dyYXBoLnZhbHVlT2ZKU0NvbnN0YW50KHJpZ2h0Tm9kZSk7CiAgICAgICAgICAg
ICBpZiAoIXZhbHVlLmlzTnVtYmVyKCkgJiYgIXZhbHVlLmlzU3RyaW5nKCkpIHsKLSAgICAgICAg
ICAgICAgICBub2RlLnNldENhbkV4aXQoZmFsc2UpOworICAgICAgICAgICAgICAgIG5vZGUtPnNl
dENhbkV4aXQoZmFsc2UpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQog
ICAgICAgICB9Ci0gICAgICAgIGlmIChOb2RlOjpzaG91bGRTcGVjdWxhdGVJbnRlZ2VyKAotICAg
ICAgICAgICAgICAgIG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0sIG1fZ3JhcGhbbm9kZS5jaGlsZDIo
KV0pKSB7CisgICAgICAgIGlmIChOb2RlOjpzaG91bGRTcGVjdWxhdGVJbnRlZ2VyKGxlZnROb2Rl
LCByaWdodE5vZGUpKSB7CiAgICAgICAgICAgICBzcGVjdWxhdGVJbnQzMkJpbmFyeShub2RlKTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIGlmIChOb2RlOjpzaG91bGRT
cGVjdWxhdGVOdW1iZXIoCi0gICAgICAgICAgICAgICAgbV9ncmFwaFtub2RlLmNoaWxkMSgpXSwg
bV9ncmFwaFtub2RlLmNoaWxkMigpXSkpIHsKKyAgICAgICAgaWYgKE5vZGU6OnNob3VsZFNwZWN1
bGF0ZU51bWJlcihsZWZ0Tm9kZSwgcmlnaHROb2RlKSkgewogICAgICAgICAgICAgc3BlY3VsYXRl
TnVtYmVyQmluYXJ5KG5vZGUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAg
ICAgTm9kZSYgbGVmdE5vZGUgPSBtX2dyYXBoW25vZGUuY2hpbGQxKCldOwotICAgICAgICBOb2Rl
JiByaWdodE5vZGUgPSBtX2dyYXBoW25vZGUuY2hpbGQyKCldOwotICAgICAgICBpZiAobGVmdE5v
ZGUuc2hvdWxkU3BlY3VsYXRlU3RyaW5nKCkgfHwgcmlnaHROb2RlLnNob3VsZFNwZWN1bGF0ZVN0
cmluZygpKSB7Ci0gICAgICAgICAgICBub2RlLnNldENhbkV4aXQoZmFsc2UpOworICAgICAgICBp
ZiAobGVmdE5vZGUtPnNob3VsZFNwZWN1bGF0ZVN0cmluZygpIHx8IHJpZ2h0Tm9kZS0+c2hvdWxk
U3BlY3VsYXRlU3RyaW5nKCkpIHsKKyAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2Up
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKGxlZnROb2RlLnNo
b3VsZFNwZWN1bGF0ZU5vblN0cmluZ0NlbGwoKSAmJiByaWdodE5vZGUuc2hvdWxkU3BlY3VsYXRl
Tm9uU3RyaW5nQ2VsbCgpKSB7Ci0gICAgICAgICAgICBub2RlLnNldENhbkV4aXQodHJ1ZSk7Ci0g
ICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcigoU3BlY0NlbGwgJiB+U3Bl
Y1N0cmluZykgfCBTcGVjT3RoZXIpOwotICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMigp
KS5maWx0ZXIoKFNwZWNDZWxsICYgflNwZWNTdHJpbmcpIHwgU3BlY090aGVyKTsKKyAgICAgICAg
aWYgKGxlZnROb2RlLT5zaG91bGRTcGVjdWxhdGVOb25TdHJpbmdDZWxsKCkgJiYgcmlnaHROb2Rl
LT5zaG91bGRTcGVjdWxhdGVOb25TdHJpbmdDZWxsKCkpIHsKKyAgICAgICAgICAgIG5vZGUtPnNl
dENhbkV4aXQodHJ1ZSk7CisgICAgICAgICAgICBmb3JOb2RlKGxlZnROb2RlKS5maWx0ZXIoKFNw
ZWNDZWxsICYgflNwZWNTdHJpbmcpIHwgU3BlY090aGVyKTsKKyAgICAgICAgICAgIGZvck5vZGUo
cmlnaHROb2RlKS5maWx0ZXIoKFNwZWNDZWxsICYgflNwZWNTdHJpbmcpIHwgU3BlY090aGVyKTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIG5vZGUuc2V0Q2FuRXhpdChm
YWxzZSk7CisgICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICBicmVhazsK
ICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgU3RyaW5nQ2hhckNvZGVBdDoKLSAgICAgICAgbm9k
ZS5zZXRDYW5FeGl0KHRydWUpOwotICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRl
cihTcGVjU3RyaW5nKTsKLSAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMigpKS5maWx0ZXIoU3Bl
Y0ludDMyKTsKLSAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChTcGVjSW50MzIpOworICAg
ICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOworICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxk
MSgpKS5maWx0ZXIoU3BlY1N0cmluZyk7CisgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQyKCkp
LmZpbHRlcihTcGVjSW50MzIpOworICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjSW50MzIp
OwogICAgICAgICBicmVhazsKICAgICAgICAgCiAgICAgY2FzZSBTdHJpbmdDaGFyQXQ6Ci0gICAg
ICAgIG5vZGUuc2V0Q2FuRXhpdCh0cnVlKTsKLSAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgp
KS5maWx0ZXIoU3BlY1N0cmluZyk7Ci0gICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDIoKSkuZmls
dGVyKFNwZWNJbnQzMik7Ci0gICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoU3BlY1N0cmlu
Zyk7CisgICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7CisgICAgICAgIGZvck5vZGUobm9k
ZS0+Y2hpbGQxKCkpLmZpbHRlcihTcGVjU3RyaW5nKTsKKyAgICAgICAgZm9yTm9kZShub2RlLT5j
aGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7CisgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNw
ZWNTdHJpbmcpOwogICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgIGNhc2UgR2V0QnlW
YWw6IHsKLSAgICAgICAgbm9kZS5zZXRDYW5FeGl0KHRydWUpOwotICAgICAgICBzd2l0Y2ggKG5v
ZGUuYXJyYXlNb2RlKCkudHlwZSgpKSB7CisgICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7
CisgICAgICAgIHN3aXRjaCAobm9kZS0+YXJyYXlNb2RlKCkudHlwZSgpKSB7CiAgICAgICAgIGNh
c2UgQXJyYXk6OlNlbGVjdFVzaW5nUHJlZGljdGlvbnM6CiAgICAgICAgIGNhc2UgQXJyYXk6OlVu
cHJvZmlsZWQ6CiAgICAgICAgIGNhc2UgQXJyYXk6OlVuZGVjaWRlZDoKQEAgLTk2Miw4MSArOTU2
LDgxIEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAg
ICAgIG1faXNWYWxpZCA9IGZhbHNlOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2Ug
QXJyYXk6OkdlbmVyaWM6Ci0gICAgICAgICAgICBjbG9iYmVyV29ybGQobm9kZS5jb2RlT3JpZ2lu
LCBpbmRleEluQmxvY2spOwotICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLm1ha2VUb3Ao
KTsKKyAgICAgICAgICAgIGNsb2JiZXJXb3JsZChub2RlLT5jb2RlT3JpZ2luLCBpbmRleEluQmxv
Y2spOworICAgICAgICAgICAgZm9yTm9kZShub2RlKS5tYWtlVG9wKCk7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6U3RyaW5nOgotICAgICAgICAgICAgZm9yTm9kZShu
b2RlLmNoaWxkMigpKS5maWx0ZXIoU3BlY0ludDMyKTsKLSAgICAgICAgICAgIGZvck5vZGUobm9k
ZUluZGV4KS5zZXQoU3BlY1N0cmluZyk7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxk
MigpKS5maWx0ZXIoU3BlY0ludDMyKTsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNw
ZWNTdHJpbmcpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OkFyZ3Vt
ZW50czoKLSAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQz
Mik7Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkubWFrZVRvcCgpOworICAgICAgICAg
ICAgZm9yTm9kZShub2RlLT5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7CisgICAgICAgICAg
ICBmb3JOb2RlKG5vZGUpLm1ha2VUb3AoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBj
YXNlIEFycmF5OjpJbnQzMjoKLSAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDIoKSkuZmls
dGVyKFNwZWNJbnQzMik7Ci0gICAgICAgICAgICBpZiAobm9kZS5hcnJheU1vZGUoKS5pc091dE9m
Qm91bmRzKCkpIHsKLSAgICAgICAgICAgICAgICBjbG9iYmVyV29ybGQobm9kZS5jb2RlT3JpZ2lu
LCBpbmRleEluQmxvY2spOwotICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5tYWtl
VG9wKCk7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMigpKS5maWx0ZXIoU3BlY0lu
dDMyKTsKKyAgICAgICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS5pc091dE9mQm91bmRzKCkp
IHsKKyAgICAgICAgICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+Y29kZU9yaWdpbiwgaW5kZXhJ
bkJsb2NrKTsKKyAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLm1ha2VUb3AoKTsKICAgICAg
ICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoU3Bl
Y0ludDMyKTsKKyAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjSW50MzIpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OkRvdWJsZToKLSAgICAgICAg
ICAgIGZvck5vZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7Ci0gICAgICAgICAg
ICBpZiAobm9kZS5hcnJheU1vZGUoKS5pc091dE9mQm91bmRzKCkpIHsKLSAgICAgICAgICAgICAg
ICBjbG9iYmVyV29ybGQobm9kZS5jb2RlT3JpZ2luLCBpbmRleEluQmxvY2spOwotICAgICAgICAg
ICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5tYWtlVG9wKCk7Ci0gICAgICAgICAgICB9IGVsc2Ug
aWYgKG5vZGUuYXJyYXlNb2RlKCkuaXNTYW5lQ2hhaW4oKSkKLSAgICAgICAgICAgICAgICBmb3JO
b2RlKG5vZGVJbmRleCkuc2V0KFNwZWNEb3VibGUpOworICAgICAgICAgICAgZm9yTm9kZShub2Rl
LT5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7CisgICAgICAgICAgICBpZiAobm9kZS0+YXJy
YXlNb2RlKCkuaXNPdXRPZkJvdW5kcygpKSB7CisgICAgICAgICAgICAgICAgY2xvYmJlcldvcmxk
KG5vZGUtPmNvZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7CisgICAgICAgICAgICAgICAgZm9yTm9k
ZShub2RlKS5tYWtlVG9wKCk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKG5vZGUtPmFycmF5TW9k
ZSgpLmlzU2FuZUNoYWluKCkpCisgICAgICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3Bl
Y0RvdWJsZSk7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZm9yTm9kZShub2Rl
SW5kZXgpLnNldChTcGVjRG91YmxlUmVhbCk7CisgICAgICAgICAgICAgICAgZm9yTm9kZShub2Rl
KS5zZXQoU3BlY0RvdWJsZVJlYWwpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2Ug
QXJyYXk6OkNvbnRpZ3VvdXM6CiAgICAgICAgIGNhc2UgQXJyYXk6OkFycmF5U3RvcmFnZToKICAg
ICAgICAgY2FzZSBBcnJheTo6U2xvd1B1dEFycmF5U3RvcmFnZToKLSAgICAgICAgICAgIGZvck5v
ZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7Ci0gICAgICAgICAgICBpZiAobm9k
ZS5hcnJheU1vZGUoKS5pc091dE9mQm91bmRzKCkpCi0gICAgICAgICAgICAgICAgY2xvYmJlcldv
cmxkKG5vZGUuY29kZU9yaWdpbiwgaW5kZXhJbkJsb2NrKTsKLSAgICAgICAgICAgIGZvck5vZGUo
bm9kZUluZGV4KS5tYWtlVG9wKCk7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMigp
KS5maWx0ZXIoU3BlY0ludDMyKTsKKyAgICAgICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS5p
c091dE9mQm91bmRzKCkpCisgICAgICAgICAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUtPmNvZGVP
cmlnaW4sIGluZGV4SW5CbG9jayk7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLm1ha2VUb3Ao
KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEFycmF5OjpJbnQ4QXJyYXk6Ci0g
ICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQyKCkpLmZpbHRlcihTcGVjSW50MzIpOwotICAg
ICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChTcGVjSW50MzIpOworICAgICAgICAgICAg
Zm9yTm9kZShub2RlLT5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7CisgICAgICAgICAgICBm
b3JOb2RlKG5vZGUpLnNldChTcGVjSW50MzIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IGNhc2UgQXJyYXk6OkludDE2QXJyYXk6Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQy
KCkpLmZpbHRlcihTcGVjSW50MzIpOwotICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNl
dChTcGVjSW50MzIpOworICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDIoKSkuZmlsdGVy
KFNwZWNJbnQzMik7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjSW50MzIpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OkludDMyQXJyYXk6Ci0gICAg
ICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQyKCkpLmZpbHRlcihTcGVjSW50MzIpOwotICAgICAg
ICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChTcGVjSW50MzIpOworICAgICAgICAgICAgZm9y
Tm9kZShub2RlLT5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7CisgICAgICAgICAgICBmb3JO
b2RlKG5vZGUpLnNldChTcGVjSW50MzIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNh
c2UgQXJyYXk6OlVpbnQ4QXJyYXk6Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQyKCkp
LmZpbHRlcihTcGVjSW50MzIpOwotICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChT
cGVjSW50MzIpOworICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDIoKSkuZmlsdGVyKFNw
ZWNJbnQzMik7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjSW50MzIpOwogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OlVpbnQ4Q2xhbXBlZEFycmF5Ogot
ICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMigpKS5maWx0ZXIoU3BlY0ludDMyKTsKLSAg
ICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoU3BlY0ludDMyKTsKKyAgICAgICAgICAg
IGZvck5vZGUobm9kZS0+Y2hpbGQyKCkpLmZpbHRlcihTcGVjSW50MzIpOworICAgICAgICAgICAg
Zm9yTm9kZShub2RlKS5zZXQoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICBjYXNlIEFycmF5OjpVaW50MTZBcnJheToKLSAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGls
ZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCku
c2V0KFNwZWNJbnQzMik7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMigpKS5maWx0
ZXIoU3BlY0ludDMyKTsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNJbnQzMik7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6VWludDMyQXJyYXk6Ci0g
ICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQyKCkpLmZpbHRlcihTcGVjSW50MzIpOwotICAg
ICAgICAgICAgaWYgKG5vZGUuc2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKQotICAgICAgICAgICAg
ICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoU3BlY0ludDMyKTsKKyAgICAgICAgICAgIGZvck5v
ZGUobm9kZS0+Y2hpbGQyKCkpLmZpbHRlcihTcGVjSW50MzIpOworICAgICAgICAgICAgaWYgKG5v
ZGUtPnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKSkKKyAgICAgICAgICAgICAgICBmb3JOb2RlKG5v
ZGUpLnNldChTcGVjSW50MzIpOwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGZv
ck5vZGUobm9kZUluZGV4KS5zZXQoU3BlY0RvdWJsZSk7CisgICAgICAgICAgICAgICAgZm9yTm9k
ZShub2RlKS5zZXQoU3BlY0RvdWJsZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2Fz
ZSBBcnJheTo6RmxvYXQzMkFycmF5OgotICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMigp
KS5maWx0ZXIoU3BlY0ludDMyKTsKLSAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQo
U3BlY0RvdWJsZSk7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMigpKS5maWx0ZXIo
U3BlY0ludDMyKTsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNEb3VibGUpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OkZsb2F0NjRBcnJheToKLSAg
ICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7Ci0gICAg
ICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFNwZWNEb3VibGUpOworICAgICAgICAgICAg
Zm9yTm9kZShub2RlLT5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7CisgICAgICAgICAgICBm
b3JOb2RlKG5vZGUpLnNldChTcGVjRG91YmxlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICBkZWZhdWx0OgogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAg
LTEwNDcsNDMgKzEwNDEsNDMgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVk
IGluZAogICAgICAgICAgICAgCiAgICAgY2FzZSBQdXRCeVZhbDoKICAgICBjYXNlIFB1dEJ5VmFs
QWxpYXM6IHsKLSAgICAgICAgbm9kZS5zZXRDYW5FeGl0KHRydWUpOworICAgICAgICBub2RlLT5z
ZXRDYW5FeGl0KHRydWUpOwogICAgICAgICBFZGdlIGNoaWxkMSA9IG1fZ3JhcGgudmFyQXJnQ2hp
bGQobm9kZSwgMCk7CiAgICAgICAgIEVkZ2UgY2hpbGQyID0gbV9ncmFwaC52YXJBcmdDaGlsZChu
b2RlLCAxKTsKICAgICAgICAgRWRnZSBjaGlsZDMgPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUs
IDIpOwotICAgICAgICBzd2l0Y2ggKG5vZGUuYXJyYXlNb2RlKCkubW9kZUZvclB1dCgpLnR5cGUo
KSkgeworICAgICAgICBzd2l0Y2ggKG5vZGUtPmFycmF5TW9kZSgpLm1vZGVGb3JQdXQoKS50eXBl
KCkpIHsKICAgICAgICAgY2FzZSBBcnJheTo6Rm9yY2VFeGl0OgogICAgICAgICAgICAgbV9pc1Zh
bGlkID0gZmFsc2U7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6R2Vu
ZXJpYzoKLSAgICAgICAgICAgIGNsb2JiZXJXb3JsZChub2RlLmNvZGVPcmlnaW4sIGluZGV4SW5C
bG9jayk7CisgICAgICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+Y29kZU9yaWdpbiwgaW5kZXhJ
bkJsb2NrKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEFycmF5OjpJbnQzMjoK
ICAgICAgICAgICAgIGZvck5vZGUoY2hpbGQxKS5maWx0ZXIoU3BlY0NlbGwpOwogICAgICAgICAg
ICAgZm9yTm9kZShjaGlsZDIpLmZpbHRlcihTcGVjSW50MzIpOwogICAgICAgICAgICAgZm9yTm9k
ZShjaGlsZDMpLmZpbHRlcihTcGVjSW50MzIpOwotICAgICAgICAgICAgaWYgKG5vZGUuYXJyYXlN
b2RlKCkuaXNPdXRPZkJvdW5kcygpKQotICAgICAgICAgICAgICAgIGNsb2JiZXJXb3JsZChub2Rl
LmNvZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7CisgICAgICAgICAgICBpZiAobm9kZS0+YXJyYXlN
b2RlKCkuaXNPdXRPZkJvdW5kcygpKQorICAgICAgICAgICAgICAgIGNsb2JiZXJXb3JsZChub2Rl
LT5jb2RlT3JpZ2luLCBpbmRleEluQmxvY2spOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IGNhc2UgQXJyYXk6OkRvdWJsZToKICAgICAgICAgICAgIGZvck5vZGUoY2hpbGQxKS5maWx0ZXIo
U3BlY0NlbGwpOwogICAgICAgICAgICAgZm9yTm9kZShjaGlsZDIpLmZpbHRlcihTcGVjSW50MzIp
OwogICAgICAgICAgICAgZm9yTm9kZShjaGlsZDMpLmZpbHRlcihTcGVjUmVhbE51bWJlcik7Ci0g
ICAgICAgICAgICBpZiAobm9kZS5hcnJheU1vZGUoKS5pc091dE9mQm91bmRzKCkpCi0gICAgICAg
ICAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUuY29kZU9yaWdpbiwgaW5kZXhJbkJsb2NrKTsKKyAg
ICAgICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS5pc091dE9mQm91bmRzKCkpCisgICAgICAg
ICAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUtPmNvZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6Q29udGlndW91czoKICAgICAg
ICAgY2FzZSBBcnJheTo6QXJyYXlTdG9yYWdlOgogICAgICAgICAgICAgZm9yTm9kZShjaGlsZDEp
LmZpbHRlcihTcGVjQ2VsbCk7CiAgICAgICAgICAgICBmb3JOb2RlKGNoaWxkMikuZmlsdGVyKFNw
ZWNJbnQzMik7Ci0gICAgICAgICAgICBpZiAobm9kZS5hcnJheU1vZGUoKS5pc091dE9mQm91bmRz
KCkpCi0gICAgICAgICAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUuY29kZU9yaWdpbiwgaW5kZXhJ
bkJsb2NrKTsKKyAgICAgICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS5pc091dE9mQm91bmRz
KCkpCisgICAgICAgICAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUtPmNvZGVPcmlnaW4sIGluZGV4
SW5CbG9jayk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6U2xvd1B1
dEFycmF5U3RvcmFnZToKICAgICAgICAgICAgIGZvck5vZGUoY2hpbGQxKS5maWx0ZXIoU3BlY0Nl
bGwpOwogICAgICAgICAgICAgZm9yTm9kZShjaGlsZDIpLmZpbHRlcihTcGVjSW50MzIpOwotICAg
ICAgICAgICAgaWYgKG5vZGUuYXJyYXlNb2RlKCkubWF5U3RvcmVUb0hvbGUoKSkKLSAgICAgICAg
ICAgICAgICBjbG9iYmVyV29ybGQobm9kZS5jb2RlT3JpZ2luLCBpbmRleEluQmxvY2spOworICAg
ICAgICAgICAgaWYgKG5vZGUtPmFycmF5TW9kZSgpLm1heVN0b3JlVG9Ib2xlKCkpCisgICAgICAg
ICAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUtPmNvZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6QXJndW1lbnRzOgogICAgICAg
ICAgICAgZm9yTm9kZShjaGlsZDEpLmZpbHRlcihTcGVjQ2VsbCk7CkBAIC0xMDkyLDcgKzEwODYs
NyBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgIGNh
c2UgQXJyYXk6OkludDhBcnJheToKICAgICAgICAgICAgIGZvck5vZGUoY2hpbGQxKS5maWx0ZXIo
U3BlY0NlbGwpOwogICAgICAgICAgICAgZm9yTm9kZShjaGlsZDIpLmZpbHRlcihTcGVjSW50MzIp
OwotICAgICAgICAgICAgaWYgKG1fZ3JhcGhbY2hpbGQzXS5zaG91bGRTcGVjdWxhdGVJbnRlZ2Vy
KCkpCisgICAgICAgICAgICBpZiAoY2hpbGQzLT5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpCiAg
ICAgICAgICAgICAgICAgZm9yTm9kZShjaGlsZDMpLmZpbHRlcihTcGVjSW50MzIpOwogICAgICAg
ICAgICAgZWxzZQogICAgICAgICAgICAgICAgIGZvck5vZGUoY2hpbGQzKS5maWx0ZXIoU3BlY051
bWJlcik7CkBAIC0xMTAwLDcgKzEwOTQsNyBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUo
dW5zaWduZWQgaW5kCiAgICAgICAgIGNhc2UgQXJyYXk6OkludDE2QXJyYXk6CiAgICAgICAgICAg
ICBmb3JOb2RlKGNoaWxkMSkuZmlsdGVyKFNwZWNDZWxsKTsKICAgICAgICAgICAgIGZvck5vZGUo
Y2hpbGQyKS5maWx0ZXIoU3BlY0ludDMyKTsKLSAgICAgICAgICAgIGlmIChtX2dyYXBoW2NoaWxk
M10uc2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKQorICAgICAgICAgICAgaWYgKGNoaWxkMy0+c2hv
dWxkU3BlY3VsYXRlSW50ZWdlcigpKQogICAgICAgICAgICAgICAgIGZvck5vZGUoY2hpbGQzKS5m
aWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBmb3JO
b2RlKGNoaWxkMykuZmlsdGVyKFNwZWNOdW1iZXIpOwpAQCAtMTEwOCw3ICsxMTAyLDcgQEAgYm9v
bCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICBjYXNlIEFycmF5
OjpJbnQzMkFycmF5OgogICAgICAgICAgICAgZm9yTm9kZShjaGlsZDEpLmZpbHRlcihTcGVjQ2Vs
bCk7CiAgICAgICAgICAgICBmb3JOb2RlKGNoaWxkMikuZmlsdGVyKFNwZWNJbnQzMik7Ci0gICAg
ICAgICAgICBpZiAobV9ncmFwaFtjaGlsZDNdLnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKSkKKyAg
ICAgICAgICAgIGlmIChjaGlsZDMtPnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKSkKICAgICAgICAg
ICAgICAgICBmb3JOb2RlKGNoaWxkMykuZmlsdGVyKFNwZWNJbnQzMik7CiAgICAgICAgICAgICBl
bHNlCiAgICAgICAgICAgICAgICAgZm9yTm9kZShjaGlsZDMpLmZpbHRlcihTcGVjTnVtYmVyKTsK
QEAgLTExMTYsNyArMTExMCw3IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25l
ZCBpbmQKICAgICAgICAgY2FzZSBBcnJheTo6VWludDhBcnJheToKICAgICAgICAgICAgIGZvck5v
ZGUoY2hpbGQxKS5maWx0ZXIoU3BlY0NlbGwpOwogICAgICAgICAgICAgZm9yTm9kZShjaGlsZDIp
LmZpbHRlcihTcGVjSW50MzIpOwotICAgICAgICAgICAgaWYgKG1fZ3JhcGhbY2hpbGQzXS5zaG91
bGRTcGVjdWxhdGVJbnRlZ2VyKCkpCisgICAgICAgICAgICBpZiAoY2hpbGQzLT5zaG91bGRTcGVj
dWxhdGVJbnRlZ2VyKCkpCiAgICAgICAgICAgICAgICAgZm9yTm9kZShjaGlsZDMpLmZpbHRlcihT
cGVjSW50MzIpOwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIGZvck5vZGUoY2hp
bGQzKS5maWx0ZXIoU3BlY051bWJlcik7CkBAIC0xMTI0LDcgKzExMTgsNyBAQCBib29sIEFic3Ry
YWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgIGNhc2UgQXJyYXk6OlVpbnQ4
Q2xhbXBlZEFycmF5OgogICAgICAgICAgICAgZm9yTm9kZShjaGlsZDEpLmZpbHRlcihTcGVjQ2Vs
bCk7CiAgICAgICAgICAgICBmb3JOb2RlKGNoaWxkMikuZmlsdGVyKFNwZWNJbnQzMik7Ci0gICAg
ICAgICAgICBpZiAobV9ncmFwaFtjaGlsZDNdLnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKSkKKyAg
ICAgICAgICAgIGlmIChjaGlsZDMtPnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKSkKICAgICAgICAg
ICAgICAgICBmb3JOb2RlKGNoaWxkMykuZmlsdGVyKFNwZWNJbnQzMik7CiAgICAgICAgICAgICBl
bHNlCiAgICAgICAgICAgICAgICAgZm9yTm9kZShjaGlsZDMpLmZpbHRlcihTcGVjTnVtYmVyKTsK
QEAgLTExMzIsNyArMTEyNiw3IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25l
ZCBpbmQKICAgICAgICAgY2FzZSBBcnJheTo6VWludDE2QXJyYXk6CiAgICAgICAgICAgICBmb3JO
b2RlKGNoaWxkMSkuZmlsdGVyKFNwZWNDZWxsKTsKICAgICAgICAgICAgIGZvck5vZGUoY2hpbGQy
KS5maWx0ZXIoU3BlY0ludDMyKTsKLSAgICAgICAgICAgIGlmIChtX2dyYXBoW2NoaWxkM10uc2hv
dWxkU3BlY3VsYXRlSW50ZWdlcigpKQorICAgICAgICAgICAgaWYgKGNoaWxkMy0+c2hvdWxkU3Bl
Y3VsYXRlSW50ZWdlcigpKQogICAgICAgICAgICAgICAgIGZvck5vZGUoY2hpbGQzKS5maWx0ZXIo
U3BlY0ludDMyKTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBmb3JOb2RlKGNo
aWxkMykuZmlsdGVyKFNwZWNOdW1iZXIpOwpAQCAtMTE0MCw3ICsxMTM0LDcgQEAgYm9vbCBBYnN0
cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICBjYXNlIEFycmF5OjpVaW50
MzJBcnJheToKICAgICAgICAgICAgIGZvck5vZGUoY2hpbGQxKS5maWx0ZXIoU3BlY0NlbGwpOwog
ICAgICAgICAgICAgZm9yTm9kZShjaGlsZDIpLmZpbHRlcihTcGVjSW50MzIpOwotICAgICAgICAg
ICAgaWYgKG1fZ3JhcGhbY2hpbGQzXS5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpCisgICAgICAg
ICAgICBpZiAoY2hpbGQzLT5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpCiAgICAgICAgICAgICAg
ICAgZm9yTm9kZShjaGlsZDMpLmZpbHRlcihTcGVjSW50MzIpOwogICAgICAgICAgICAgZWxzZQog
ICAgICAgICAgICAgICAgIGZvck5vZGUoY2hpbGQzKS5maWx0ZXIoU3BlY051bWJlcik7CkBAIC0x
MTYzLDE2NiArMTE1NywxODggQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVk
IGluZAogICAgIH0KICAgICAgICAgICAgIAogICAgIGNhc2UgQXJyYXlQdXNoOgotICAgICAgICBu
b2RlLnNldENhbkV4aXQodHJ1ZSk7Ci0gICAgICAgIHN3aXRjaCAobm9kZS5hcnJheU1vZGUoKS50
eXBlKCkpIHsKKyAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKKyAgICAgICAgc3dpdGNo
IChub2RlLT5hcnJheU1vZGUoKS50eXBlKCkpIHsKICAgICAgICAgY2FzZSBBcnJheTo6SW50MzI6
Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQyKCkpLmZpbHRlcihTcGVjSW50MzIpOwor
ICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6RG91YmxlOgotICAgICAgICAg
ICAgZm9yTm9kZShub2RlLmNoaWxkMigpKS5maWx0ZXIoU3BlY1JlYWxOdW1iZXIpOworICAgICAg
ICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDIoKSkuZmlsdGVyKFNwZWNSZWFsTnVtYmVyKTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIH0KLSAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUuY29kZU9yaWdpbiwgaW5kZXhJbkJs
b2NrKTsKLSAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChTcGVjTnVtYmVyKTsKKyAgICAg
ICAgY2xvYmJlcldvcmxkKG5vZGUtPmNvZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7CisgICAgICAg
IGZvck5vZGUobm9kZSkuc2V0KFNwZWNOdW1iZXIpOwogICAgICAgICBicmVhazsKICAgICAgICAg
ICAgIAogICAgIGNhc2UgQXJyYXlQb3A6Ci0gICAgICAgIG5vZGUuc2V0Q2FuRXhpdCh0cnVlKTsK
LSAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUuY29kZU9yaWdpbiwgaW5kZXhJbkJsb2NrKTsKLSAg
ICAgICAgZm9yTm9kZShub2RlSW5kZXgpLm1ha2VUb3AoKTsKKyAgICAgICAgbm9kZS0+c2V0Q2Fu
RXhpdCh0cnVlKTsKKyAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUtPmNvZGVPcmlnaW4sIGluZGV4
SW5CbG9jayk7CisgICAgICAgIGZvck5vZGUobm9kZSkubWFrZVRvcCgpOwogICAgICAgICBicmVh
azsKICAgICAgICAgICAgIAogICAgIGNhc2UgUmVnRXhwRXhlYzoKICAgICBjYXNlIFJlZ0V4cFRl
c3Q6Ci0gICAgICAgIG5vZGUuc2V0Q2FuRXhpdCgKLSAgICAgICAgICAgICFpc0NlbGxTcGVjdWxh
dGlvbihmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkKLSAgICAgICAgICAgIHx8ICFpc0Nl
bGxTcGVjdWxhdGlvbihmb3JOb2RlKG5vZGUuY2hpbGQyKCkpLm1fdHlwZSkpOwotICAgICAgICBm
b3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjQ2VsbCk7Ci0gICAgICAgIGZvck5vZGUo
bm9kZS5jaGlsZDIoKSkuZmlsdGVyKFNwZWNDZWxsKTsKLSAgICAgICAgZm9yTm9kZShub2RlSW5k
ZXgpLm1ha2VUb3AoKTsKKyAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCgKKyAgICAgICAgICAgICFp
c0NlbGxTcGVjdWxhdGlvbihmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX3R5cGUpCisgICAgICAg
ICAgICB8fCAhaXNDZWxsU3BlY3VsYXRpb24oZm9yTm9kZShub2RlLT5jaGlsZDIoKSkubV90eXBl
KSk7CisgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRlcihTcGVjQ2VsbCk7Cisg
ICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQyKCkpLmZpbHRlcihTcGVjQ2VsbCk7CisgICAgICAg
IGZvck5vZGUobm9kZSkubWFrZVRvcCgpOwogICAgICAgICBicmVhazsKICAgICAgICAgICAgIAog
ICAgIGNhc2UgSnVtcDoKLSAgICAgICAgbm9kZS5zZXRDYW5FeGl0KGZhbHNlKTsKKyAgICAgICAg
bm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAg
ICAgY2FzZSBCcmFuY2g6IHsKLSAgICAgICAgQm9vbGVhblJlc3VsdCByZXN1bHQgPSBib29sZWFu
UmVzdWx0KG5vZGUsIGZvck5vZGUobm9kZS5jaGlsZDEoKSkpOworICAgICAgICBOb2RlKiBjaGls
ZCA9IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKKyAgICAgICAgQm9vbGVhblJlc3VsdCByZXN1bHQg
PSBib29sZWFuUmVzdWx0KG5vZGUsIGZvck5vZGUoY2hpbGQpKTsKICAgICAgICAgaWYgKHJlc3Vs
dCA9PSBEZWZpbml0ZWx5VHJ1ZSkgewogICAgICAgICAgICAgbV9icmFuY2hEaXJlY3Rpb24gPSBU
YWtlVHJ1ZTsKLSAgICAgICAgICAgIG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7CisgICAgICAgICAg
ICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9
CiAgICAgICAgIGlmIChyZXN1bHQgPT0gRGVmaW5pdGVseUZhbHNlKSB7CiAgICAgICAgICAgICBt
X2JyYW5jaERpcmVjdGlvbiA9IFRha2VGYWxzZTsKLSAgICAgICAgICAgIG5vZGUuc2V0Q2FuRXhp
dChmYWxzZSk7CisgICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIC8vIEZJWE1FOiBUaGUgYWJvdmUgaGFuZGxl
cyB0aGUgdHJpdmlhbCBjYXNlcyBvZiBzcGFyc2UgY29uZGl0aW9uYWwKICAgICAgICAgLy8gY29u
c3RhbnQgcHJvcGFnYXRpb24sIGJ1dCB3ZSBjYW4gZG8gYmV0dGVyOgogICAgICAgICAvLyBXZSBj
YW4gc3BlY2lhbGl6ZSB0aGUgc291cmNlIHZhcmlhYmxlJ3MgdmFsdWUgb24gZWFjaCBkaXJlY3Rp
b24gb2YKICAgICAgICAgLy8gdGhlIGJyYW5jaC4KLSAgICAgICAgTm9kZSYgY2hpbGQgPSBtX2dy
YXBoW25vZGUuY2hpbGQxKCldOwotICAgICAgICBpZiAoY2hpbGQuc2hvdWxkU3BlY3VsYXRlQm9v
bGVhbigpKQorICAgICAgICBpZiAoY2hpbGQtPnNob3VsZFNwZWN1bGF0ZUJvb2xlYW4oKSkKICAg
ICAgICAgICAgIHNwZWN1bGF0ZUJvb2xlYW5VbmFyeShub2RlKTsKLSAgICAgICAgZWxzZSBpZiAo
Y2hpbGQuc2hvdWxkU3BlY3VsYXRlTm9uU3RyaW5nQ2VsbE9yT3RoZXIoKSkgewotICAgICAgICAg
ICAgbm9kZS5zZXRDYW5FeGl0KHRydWUpOwotICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxk
MSgpKS5maWx0ZXIoKFNwZWNDZWxsICYgflNwZWNTdHJpbmcpIHwgU3BlY090aGVyKTsKLSAgICAg
ICAgfSBlbHNlIGlmIChjaGlsZC5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpCisgICAgICAgIGVs
c2UgaWYgKGNoaWxkLT5zaG91bGRTcGVjdWxhdGVOb25TdHJpbmdDZWxsT3JPdGhlcigpKSB7Cisg
ICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOworICAgICAgICAgICAgZm9yTm9kZShj
aGlsZCkuZmlsdGVyKChTcGVjQ2VsbCAmIH5TcGVjU3RyaW5nKSB8IFNwZWNPdGhlcik7CisgICAg
ICAgIH0gZWxzZSBpZiAoY2hpbGQtPnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKSkKICAgICAgICAg
ICAgIHNwZWN1bGF0ZUludDMyVW5hcnkobm9kZSk7Ci0gICAgICAgIGVsc2UgaWYgKGNoaWxkLnNo
b3VsZFNwZWN1bGF0ZU51bWJlcigpKQorICAgICAgICBlbHNlIGlmIChjaGlsZC0+c2hvdWxkU3Bl
Y3VsYXRlTnVtYmVyKCkpCiAgICAgICAgICAgICBzcGVjdWxhdGVOdW1iZXJVbmFyeShub2RlKTsK
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgbm9kZS5zZXRDYW5FeGl0KGZhbHNlKTsKKyAgICAg
ICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICBtX2JyYW5jaERpcmVjdGlv
biA9IFRha2VCb3RoOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgICAgICAKICAgICBj
YXNlIFJldHVybjoKICAgICAgICAgbV9pc1ZhbGlkID0gZmFsc2U7Ci0gICAgICAgIG5vZGUuc2V0
Q2FuRXhpdChmYWxzZSk7CisgICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwogICAgICAg
ICBicmVhazsKICAgICAgICAgCiAgICAgY2FzZSBUaHJvdzoKICAgICBjYXNlIFRocm93UmVmZXJl
bmNlRXJyb3I6CiAgICAgICAgIG1faXNWYWxpZCA9IGZhbHNlOwotICAgICAgICBub2RlLnNldENh
bkV4aXQodHJ1ZSk7CisgICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7CiAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgCiAgICAgY2FzZSBUb1ByaW1pdGl2ZTogewotICAgICAgICBKU1Zh
bHVlIGNoaWxkQ29uc3QgPSBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLnZhbHVlKCk7Ci0gICAgICAg
IGlmIChjaGlsZENvbnN0ICYmIGNoaWxkQ29uc3QuaXNOdW1iZXIoKSAmJiB0cnlTZXRDb25zdGFu
dChub2RlSW5kZXgsIGNoaWxkQ29uc3QpKSB7CisgICAgICAgIE5vZGUqIGNoaWxkID0gbm9kZS0+
Y2hpbGQxKCkubm9kZSgpOworICAgICAgICAKKyAgICAgICAgSlNWYWx1ZSBjaGlsZENvbnN0ID0g
Zm9yTm9kZShjaGlsZCkudmFsdWUoKTsKKyAgICAgICAgaWYgKGNoaWxkQ29uc3QgJiYgY2hpbGRD
b25zdC5pc051bWJlcigpICYmIHRyeVNldENvbnN0YW50KG5vZGUsIGNoaWxkQ29uc3QpKSB7CiAg
ICAgICAgICAgICBtX2ZvdW5kQ29uc3RhbnRzID0gdHJ1ZTsKLSAgICAgICAgICAgIG5vZGUuc2V0
Q2FuRXhpdChmYWxzZSk7CisgICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBOb2RlJiBjaGls
ZCA9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV07Ci0gICAgICAgIGlmIChjaGlsZC5zaG91bGRTcGVj
dWxhdGVJbnRlZ2VyKCkpIHsKKyAgICAgICAgaWYgKGNoaWxkLT5zaG91bGRTcGVjdWxhdGVJbnRl
Z2VyKCkpIHsKICAgICAgICAgICAgIHNwZWN1bGF0ZUludDMyVW5hcnkobm9kZSk7Ci0gICAgICAg
ICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFNwZWNJbnQzMik7CisgICAgICAgICAgICBmb3JO
b2RlKG5vZGUpLnNldChTcGVjSW50MzIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0K
IAotICAgICAgICBBYnN0cmFjdFZhbHVlJiBzb3VyY2UgPSBmb3JOb2RlKG5vZGUuY2hpbGQxKCkp
OwotICAgICAgICBBYnN0cmFjdFZhbHVlJiBkZXN0aW5hdGlvbiA9IGZvck5vZGUobm9kZUluZGV4
KTsKLSAgICAgICAgICAgIAorICAgICAgICBBYnN0cmFjdFZhbHVlJiBzb3VyY2UgPSBmb3JOb2Rl
KGNoaWxkKTsKKyAgICAgICAgQWJzdHJhY3RWYWx1ZSYgZGVzdGluYXRpb24gPSBmb3JOb2RlKG5v
ZGUpOworICAgICAgICAKKyAgICAgICAgLy8gTkIuIFRoZSBtb3JlIGNhbm9uaWNhbCB3YXkgb2Yg
d3JpdGluZyB0aGlzIHdvdWxkIGhhdmUgYmVlbjoKKyAgICAgICAgLy8KKyAgICAgICAgLy8gZGVz
dGluYXRpb24gPSBzb3VyY2U7CisgICAgICAgIC8vIGlmIChkZXN0aW5hdGlvbi5tX3R5cGUgJiAh
KFNwZWNOdW1iZXIgfCBTcGVjU3RyaW5nIHwgU3BlY0Jvb2xlYW4pKSB7CisgICAgICAgIC8vICAg
ICBkZXN0aW5hdGlvbi5maWx0ZXIoU3BlY051bWJlciB8IFNwZWNTdHJpbmcgfCBTcGVjQm9vbGVh
bik7CisgICAgICAgIC8vICAgICBBYnN0cmFjdFZhbHVlIHN0cmluZzsKKyAgICAgICAgLy8gICAg
IHN0cmluZy5zZXQoZ2xvYmFsRGF0YS0+c3RyaW5nU3RydWN0dXJlKTsKKyAgICAgICAgLy8gICAg
IGRlc3RpbmF0aW9uLm1lcmdlKHN0cmluZyk7CisgICAgICAgIC8vIH0KKyAgICAgICAgLy8KKyAg
ICAgICAgLy8gVGhlIHJlYXNvbiB3aHkgdGhpcyB3b3VsZCwgaW4gbW9zdCBvdGhlciBjYXNlcywg
aGF2ZSBiZWVuIGJldHRlciBpcyB0aGF0CisgICAgICAgIC8vIHRoZW4gZGVzdGluYXRpb24gd291
bGQgcHJlc2VydmUgYW55IG5vbi1TcGVjdWxhdGVkVHlwZSBrbm93bGVkZ2Ugb2Ygc291cmNlLgor
ICAgICAgICAvLyBBcyBpdCBzdGFuZHMsIHRoZSBjb2RlIGJlbG93IGZvcmdldHMgYW55IG5vbi1T
cGVjdWxhdGVkVHlwZSBrbm93bGVkZ2UgdGhhdAorICAgICAgICAvLyBzb3VyY2Ugd291bGQgaGF2
ZSBoYWQuIEZvcnR1bmF0ZWx5LCB0aG91Z2gsIGZvciB0aGluZ3MgbGlrZSBzdHJpbmdzIGFuZAor
ICAgICAgICAvLyBudW1iZXJzIGFuZCBib29sZWFucywgd2UgZG9uJ3QgY2FyZSBhYm91dCB0aGUg
bm9uLVNwZWN1bGF0ZWRUeXBlIGtub3dlZGdlOgorICAgICAgICAvLyB0aGUgc3RydWN0dXJlIHdv
bid0IHRlbGwgdXMgYW55dGhpbmcgd2UgZG9uJ3QgYWxyZWFkeSBrbm93LCBhbmQgbmVpdGhlcgor
ICAgICAgICAvLyB3aWxsIEFycmF5TW9kZXMuIEFuZCBpZiB0aGUgc291cmNlIHdhcyBhIG1lYW5p
bmdmdWwgY29uc3RhbnQgdGhlbiB3ZQorICAgICAgICAvLyB3b3VsZCBoYXZlIGhhbmRsZWQgdGhh
dCBhYm92ZS4gVW5mb3J0dW5hdGVseSwgdGhpcyBkb2VzIG1lYW4gdGhhdAorICAgICAgICAvLyBU
b1ByaW1pdGl2ZSB3aWxsIGN1cnJlbnRseSBmb3JnZXQgc3RyaW5nIGNvbnN0YW50cy4gQnV0IHRo
YXQncyBub3QgYSBiaWcKKyAgICAgICAgLy8gZGVhbCBzaW5jZSB3ZSBkb24ndCBkbyBhbnkgb3B0
aW1pemF0aW9uIG9uIHRob3NlIGN1cnJlbnRseS4KKyAgICAgICAgCiAgICAgICAgIFNwZWN1bGF0
ZWRUeXBlIHR5cGUgPSBzb3VyY2UubV90eXBlOwogICAgICAgICBpZiAodHlwZSAmIH4oU3BlY051
bWJlciB8IFNwZWNTdHJpbmcgfCBTcGVjQm9vbGVhbikpIHsKICAgICAgICAgICAgIHR5cGUgJj0g
KFNwZWNOdW1iZXIgfCBTcGVjU3RyaW5nIHwgU3BlY0Jvb2xlYW4pOwogICAgICAgICAgICAgdHlw
ZSB8PSBTcGVjU3RyaW5nOwogICAgICAgICB9CiAgICAgICAgIGRlc3RpbmF0aW9uLnNldCh0eXBl
KTsKLSAgICAgICAgbm9kZS5zZXRDYW5FeGl0KGZhbHNlKTsKKyAgICAgICAgbm9kZS0+c2V0Q2Fu
RXhpdChmYWxzZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgICAgIAogICAgIGNh
c2UgU3RyQ2F0OgotICAgICAgICBub2RlLnNldENhbkV4aXQoZmFsc2UpOwotICAgICAgICBmb3JO
b2RlKG5vZGVJbmRleCkuc2V0KFNwZWNTdHJpbmcpOworICAgICAgICBub2RlLT5zZXRDYW5FeGl0
KGZhbHNlKTsKKyAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY1N0cmluZyk7CiAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgCiAgICAgY2FzZSBOZXdBcnJheToKLSAgICAgICAgbm9kZS5z
ZXRDYW5FeGl0KHRydWUpOwotICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KG1fZ3JhcGgu
Z2xvYmFsT2JqZWN0Rm9yKG5vZGUuY29kZU9yaWdpbiktPmFycmF5U3RydWN0dXJlRm9ySW5kZXhp
bmdUeXBlRHVyaW5nQWxsb2NhdGlvbihub2RlLmluZGV4aW5nVHlwZSgpKSk7CisgICAgICAgIG5v
ZGUtPnNldENhbkV4aXQodHJ1ZSk7CisgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KG1fZ3JhcGgu
Z2xvYmFsT2JqZWN0Rm9yKG5vZGUtPmNvZGVPcmlnaW4pLT5hcnJheVN0cnVjdHVyZUZvckluZGV4
aW5nVHlwZUR1cmluZ0FsbG9jYXRpb24obm9kZS0+aW5kZXhpbmdUeXBlKCkpKTsKICAgICAgICAg
bV9oYXZlU3RydWN0dXJlcyA9IHRydWU7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAKICAgICBj
YXNlIE5ld0FycmF5QnVmZmVyOgotICAgICAgICBub2RlLnNldENhbkV4aXQodHJ1ZSk7Ci0gICAg
ICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQobV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS5j
b2RlT3JpZ2luKS0+YXJyYXlTdHJ1Y3R1cmVGb3JJbmRleGluZ1R5cGVEdXJpbmdBbGxvY2F0aW9u
KG5vZGUuaW5kZXhpbmdUeXBlKCkpKTsKKyAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsK
KyAgICAgICAgZm9yTm9kZShub2RlKS5zZXQobV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+
Y29kZU9yaWdpbiktPmFycmF5U3RydWN0dXJlRm9ySW5kZXhpbmdUeXBlRHVyaW5nQWxsb2NhdGlv
bihub2RlLT5pbmRleGluZ1R5cGUoKSkpOwogICAgICAgICBtX2hhdmVTdHJ1Y3R1cmVzID0gdHJ1
ZTsKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIE5ld0FycmF5V2l0aFNpemU6Ci0gICAgICAg
IG5vZGUuc2V0Q2FuRXhpdCh0cnVlKTsKLSAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5m
aWx0ZXIoU3BlY0ludDMyKTsKLSAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChTcGVjQXJy
YXkpOworICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOworICAgICAgICBmb3JOb2RlKG5v
ZGUtPmNoaWxkMSgpKS5maWx0ZXIoU3BlY0ludDMyKTsKKyAgICAgICAgZm9yTm9kZShub2RlKS5z
ZXQoU3BlY0FycmF5KTsKICAgICAgICAgbV9oYXZlU3RydWN0dXJlcyA9IHRydWU7CiAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgCiAgICAgY2FzZSBOZXdSZWdleHA6Ci0gICAgICAgIG5vZGUu
c2V0Q2FuRXhpdChmYWxzZSk7Ci0gICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQobV9ncmFw
aC5nbG9iYWxPYmplY3RGb3Iobm9kZS5jb2RlT3JpZ2luKS0+cmVnRXhwU3RydWN0dXJlKCkpOwor
ICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKKyAgICAgICAgZm9yTm9kZShub2RlKS5z
ZXQobV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+Y29kZU9yaWdpbiktPnJlZ0V4cFN0cnVj
dHVyZSgpKTsKICAgICAgICAgbV9oYXZlU3RydWN0dXJlcyA9IHRydWU7CiAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgCiAgICAgY2FzZSBDb252ZXJ0VGhpczogewotICAgICAgICBOb2RlJiBj
aGlsZCA9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV07Ci0gICAgICAgIEFic3RyYWN0VmFsdWUmIHNv
dXJjZSA9IGZvck5vZGUobm9kZS5jaGlsZDEoKSk7Ci0gICAgICAgIEFic3RyYWN0VmFsdWUmIGRl
c3RpbmF0aW9uID0gZm9yTm9kZShub2RlSW5kZXgpOworICAgICAgICBOb2RlKiBjaGlsZCA9IG5v
ZGUtPmNoaWxkMSgpLm5vZGUoKTsKKyAgICAgICAgQWJzdHJhY3RWYWx1ZSYgc291cmNlID0gZm9y
Tm9kZShub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIEFic3RyYWN0VmFsdWUmIGRlc3RpbmF0aW9u
ID0gZm9yTm9kZShub2RlKTsKICAgICAgICAgICAgIAogICAgICAgICBpZiAoaXNPYmplY3RTcGVj
dWxhdGlvbihzb3VyY2UubV90eXBlKSkgewogICAgICAgICAgICAgLy8gVGhpcyBpcyB0aGUgc2lt
cGxlIGNhc2UuIFdlIGFscmVhZHkga25vdyB0aGF0IHRoZSBzb3VyY2UgaXMgYW4KICAgICAgICAg
ICAgIC8vIG9iamVjdCwgc28gdGhlcmUncyBub3RoaW5nIHRvIGRvLiBJIGRvbid0IHRoaW5rIHRo
aXMgY2FzZSB3aWxsCiAgICAgICAgICAgICAvLyBiZSBoaXQsIGJ1dCB0aGVuIGFnYWluLCB5b3Ug
bmV2ZXIga25vdy4KICAgICAgICAgICAgIGRlc3RpbmF0aW9uID0gc291cmNlOwotICAgICAgICAg
ICAgbm9kZS5zZXRDYW5FeGl0KGZhbHNlKTsKKyAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQo
ZmFsc2UpOwogICAgICAgICAgICAgbV9mb3VuZENvbnN0YW50cyA9IHRydWU7IC8vIFRlbGwgdGhl
IGNvbnN0YW50IGZvbGRlciB0byB0dXJuIHRoaXMgaW50byBJZGVudGl0eS4KICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBub2RlLnNldENhbkV4aXQodHJ1
ZSk7CisgICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7CiAgICAgICAgIAotICAgICAgICBp
ZiAoaXNPdGhlclNwZWN1bGF0aW9uKGNoaWxkLnByZWRpY3Rpb24oKSkpIHsKKyAgICAgICAgaWYg
KGlzT3RoZXJTcGVjdWxhdGlvbihjaGlsZC0+cHJlZGljdGlvbigpKSkgewogICAgICAgICAgICAg
c291cmNlLmZpbHRlcihTcGVjT3RoZXIpOwogICAgICAgICAgICAgZGVzdGluYXRpb24uc2V0KFNw
ZWNPYmplY3RPdGhlcik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAK
LSAgICAgICAgaWYgKGlzT2JqZWN0U3BlY3VsYXRpb24oY2hpbGQucHJlZGljdGlvbigpKSkgewor
ICAgICAgICBpZiAoaXNPYmplY3RTcGVjdWxhdGlvbihjaGlsZC0+cHJlZGljdGlvbigpKSkgewog
ICAgICAgICAgICAgc291cmNlLmZpbHRlcihTcGVjT2JqZWN0TWFzayk7CiAgICAgICAgICAgICBk
ZXN0aW5hdGlvbiA9IHNvdXJjZTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTMzNCwxMCArMTM1
MCwxMCBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgfQog
CiAgICAgY2FzZSBDcmVhdGVUaGlzOiB7Ci0gICAgICAgIEFic3RyYWN0VmFsdWUmIHNvdXJjZSA9
IGZvck5vZGUobm9kZS5jaGlsZDEoKSk7Ci0gICAgICAgIEFic3RyYWN0VmFsdWUmIGRlc3RpbmF0
aW9uID0gZm9yTm9kZShub2RlSW5kZXgpOworICAgICAgICBBYnN0cmFjdFZhbHVlJiBzb3VyY2Ug
PSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgQWJzdHJhY3RWYWx1ZSYgZGVzdGlu
YXRpb24gPSBmb3JOb2RlKG5vZGUpOwogICAgICAgICAKLSAgICAgICAgbm9kZS5zZXRDYW5FeGl0
KCFpc0NlbGxTcGVjdWxhdGlvbihzb3VyY2UubV90eXBlKSk7CisgICAgICAgIG5vZGUtPnNldENh
bkV4aXQoIWlzQ2VsbFNwZWN1bGF0aW9uKHNvdXJjZS5tX3R5cGUpKTsKICAgICAgICAgICAgIAog
ICAgICAgICBzb3VyY2UuZmlsdGVyKFNwZWNGdW5jdGlvbik7CiAgICAgICAgIGRlc3RpbmF0aW9u
LnNldChTcGVjRmluYWxPYmplY3QpOwpAQCAtMTM0NSw0MSArMTM2MSw0MSBAQCBib29sIEFic3Ry
YWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgfQogICAgICAgICAKICAgICBjYXNl
IEFsbG9jYXRpb25Qcm9maWxlV2F0Y2hwb2ludDoKLSAgICAgICAgbm9kZS5zZXRDYW5FeGl0KHRy
dWUpOworICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOwogICAgICAgICBicmVhazsKIAog
ICAgIGNhc2UgTmV3T2JqZWN0OgotICAgICAgICBub2RlLnNldENhbkV4aXQoZmFsc2UpOwotICAg
ICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KG5vZGUuc3RydWN0dXJlKCkpOworICAgICAgICBu
b2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKKyAgICAgICAgZm9yTm9kZShub2RlKS5zZXQobm9kZS0+
c3RydWN0dXJlKCkpOwogICAgICAgICBtX2hhdmVTdHJ1Y3R1cmVzID0gdHJ1ZTsKICAgICAgICAg
YnJlYWs7CiAgICAgICAgIAogICAgIGNhc2UgQ3JlYXRlQWN0aXZhdGlvbjoKLSAgICAgICAgbm9k
ZS5zZXRDYW5FeGl0KGZhbHNlKTsKLSAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0Rm9yKG5vZGUuY29kZU9yaWdpbiktPmFjdGl2YXRpb25TdHJ1
Y3R1cmUoKSk7CisgICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOworICAgICAgICBmb3JO
b2RlKG5vZGUpLnNldChtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0Rm9yKG5vZGUtPmNvZGVPcmln
aW4pLT5hY3RpdmF0aW9uU3RydWN0dXJlKCkpOwogICAgICAgICBtX2hhdmVTdHJ1Y3R1cmVzID0g
dHJ1ZTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgIAogICAgIGNhc2UgQ3JlYXRlQXJndW1lbnRz
OgotICAgICAgICBub2RlLnNldENhbkV4aXQoZmFsc2UpOwotICAgICAgICBmb3JOb2RlKG5vZGVJ
bmRleCkuc2V0KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3RGb3Iobm9kZS5jb2RlT3JpZ2luKS0+
YXJndW1lbnRzU3RydWN0dXJlKCkpOworICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsK
KyAgICAgICAgZm9yTm9kZShub2RlKS5zZXQobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdEZvcihu
b2RlLT5jb2RlT3JpZ2luKS0+YXJndW1lbnRzU3RydWN0dXJlKCkpOwogICAgICAgICBtX2hhdmVT
dHJ1Y3R1cmVzID0gdHJ1ZTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgIAogICAgIGNhc2UgVGVh
ck9mZkFjdGl2YXRpb246CiAgICAgY2FzZSBUZWFyT2ZmQXJndW1lbnRzOgotICAgICAgICBub2Rl
LnNldENhbkV4aXQoZmFsc2UpOworICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKICAg
ICAgICAgLy8gRG9lcyBub3RoaW5nIHRoYXQgaXMgdXNlci12aXNpYmxlLgogICAgICAgICBicmVh
azsKIAogICAgIGNhc2UgQ2hlY2tBcmd1bWVudHNOb3RDcmVhdGVkOgogICAgICAgICBpZiAoaXNF
bXB0eVNwZWN1bGF0aW9uKAogICAgICAgICAgICAgICAgIG1fdmFyaWFibGVzLm9wZXJhbmQoCi0g
ICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguYXJndW1lbnRzUmVnaXN0ZXJGb3Iobm9kZS5jb2Rl
T3JpZ2luKSkubV90eXBlKSkgewotICAgICAgICAgICAgbm9kZS5zZXRDYW5FeGl0KGZhbHNlKTsK
KyAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5hcmd1bWVudHNSZWdpc3RlckZvcihub2RlLT5j
b2RlT3JpZ2luKSkubV90eXBlKSkgeworICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxz
ZSk7CiAgICAgICAgICAgICBtX2ZvdW5kQ29uc3RhbnRzID0gdHJ1ZTsKICAgICAgICAgfSBlbHNl
Ci0gICAgICAgICAgICBub2RlLnNldENhbkV4aXQodHJ1ZSk7CisgICAgICAgICAgICBub2RlLT5z
ZXRDYW5FeGl0KHRydWUpOwogICAgICAgICBicmVhazsKICAgICAgICAgCiAgICAgY2FzZSBHZXRN
eUFyZ3VtZW50c0xlbmd0aDoKQEAgLTEzODcsMTExICsxNDAzLDExMSBAQCBib29sIEFic3RyYWN0
U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgIC8vIHRoZSBhcmd1bWVudHMgYSBi
aXQuIE5vdGUgdGhhdCB0aGlzIGlzIG5vdCBzdWZmaWNpZW50IHRvIGZvcmNlIGNvbnN0YW50IGZv
bGRpbmcKICAgICAgICAgLy8gb2YgR2V0TXlBcmd1bWVudHNMZW5ndGgsIGJlY2F1c2UgR2V0TXlB
cmd1bWVudHNMZW5ndGggaXMgYSBjbG9iYmVyaW5nIG9wZXJhdGlvbi4KICAgICAgICAgLy8gV2Ug
cGVyZm9ybSBmdXJ0aGVyIG9wdGltaXphdGlvbnMgb24gdGhpcyBsYXRlciBvbi4KLSAgICAgICAg
aWYgKG5vZGUuY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpCi0gICAgICAgICAgICBmb3JOb2Rl
KG5vZGVJbmRleCkuc2V0KGpzTnVtYmVyKG5vZGUuY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUt
PmFyZ3VtZW50cy5zaXplKCkgLSAxKSk7CisgICAgICAgIGlmIChub2RlLT5jb2RlT3JpZ2luLmlu
bGluZUNhbGxGcmFtZSkKKyAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KGpzTnVtYmVyKG5v
ZGUtPmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgpIC0gMSkpOwog
ICAgICAgICBlbHNlCi0gICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFNwZWNJbnQz
Mik7Ci0gICAgICAgIG5vZGUuc2V0Q2FuRXhpdCgKKyAgICAgICAgICAgIGZvck5vZGUobm9kZSku
c2V0KFNwZWNJbnQzMik7CisgICAgICAgIG5vZGUtPnNldENhbkV4aXQoCiAgICAgICAgICAgICAh
aXNFbXB0eVNwZWN1bGF0aW9uKAogICAgICAgICAgICAgICAgIG1fdmFyaWFibGVzLm9wZXJhbmQo
Ci0gICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguYXJndW1lbnRzUmVnaXN0ZXJGb3Iobm9kZS5j
b2RlT3JpZ2luKSkubV90eXBlKSk7CisgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguYXJndW1l
bnRzUmVnaXN0ZXJGb3Iobm9kZS0+Y29kZU9yaWdpbikpLm1fdHlwZSkpOwogICAgICAgICBicmVh
azsKICAgICAgICAgCiAgICAgY2FzZSBHZXRNeUFyZ3VtZW50c0xlbmd0aFNhZmU6Ci0gICAgICAg
IG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7CisgICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2Up
OwogICAgICAgICAvLyBUaGlzIHBvdGVudGlhbGx5IGNsb2JiZXJzIGFsbCBzdHJ1Y3R1cmVzIGlm
IHRoZSBhcmd1bWVudHMgb2JqZWN0IGhhZCBhIGdldHRlcgogICAgICAgICAvLyBpbnN0YWxsZWQg
b24gdGhlIGxlbmd0aCBwcm9wZXJ0eS4KLSAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUuY29kZU9y
aWdpbiwgaW5kZXhJbkJsb2NrKTsKKyAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUtPmNvZGVPcmln
aW4sIGluZGV4SW5CbG9jayk7CiAgICAgICAgIC8vIFdlIGN1cnJlbnRseSBtYWtlIG5vIGd1YXJh
bnRlZSBhYm91dCB3aGF0IHRoaXMgcmV0dXJucyBiZWNhdXNlIGl0IGRvZXMgbm90CiAgICAgICAg
IC8vIHNwZWN1bGF0ZSB0aGF0IHRoZSBsZW5ndGggcHJvcGVydHkgaXMgYWN0dWFsbHkgYSBsZW5n
dGguCi0gICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5tYWtlVG9wKCk7CisgICAgICAgIGZvck5v
ZGUobm9kZSkubWFrZVRvcCgpOwogICAgICAgICBicmVhazsKICAgICAgICAgCiAgICAgY2FzZSBH
ZXRNeUFyZ3VtZW50QnlWYWw6Ci0gICAgICAgIG5vZGUuc2V0Q2FuRXhpdCh0cnVlKTsKKyAgICAg
ICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKICAgICAgICAgLy8gV2Uga25vdyB0aGF0IHRoaXMg
ZXhlY3V0YWJsZSBkb2VzIG5vdCBlc2NhcGUgaXRzIGFyZ3VtZW50cywgc28gd2UgY2FuIG9wdGlt
aXplCiAgICAgICAgIC8vIHRoZSBhcmd1bWVudHMgYSBiaXQuIE5vdGUgdGhhdCB0aGlzIGVuZHMg
dXAgYmVpbmcgZnVydGhlciBvcHRpbWl6ZWQgYnkgdGhlCiAgICAgICAgIC8vIEFyZ3VtZW50c1Np
bXBsaWZpY2F0aW9uUGhhc2UuCi0gICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVy
KFNwZWNJbnQzMik7Ci0gICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5tYWtlVG9wKCk7CisgICAg
ICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRlcihTcGVjSW50MzIpOworICAgICAgICBm
b3JOb2RlKG5vZGUpLm1ha2VUb3AoKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgIAogICAgIGNh
c2UgR2V0TXlBcmd1bWVudEJ5VmFsU2FmZToKLSAgICAgICAgbm9kZS5zZXRDYW5FeGl0KHRydWUp
OworICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOwogICAgICAgICAvLyBUaGlzIHBvdGVu
dGlhbGx5IGNsb2JiZXJzIGFsbCBzdHJ1Y3R1cmVzIGlmIHRoZSBwcm9wZXJ0eSB3ZSdyZSBhY2Nl
c3NpbmcgaGFzCiAgICAgICAgIC8vIGEgZ2V0dGVyLiBXZSBkb24ndCBzcGVjdWxhdGUgYWdhaW5z
dCB0aGlzLgotICAgICAgICBjbG9iYmVyV29ybGQobm9kZS5jb2RlT3JpZ2luLCBpbmRleEluQmxv
Y2spOworICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+Y29kZU9yaWdpbiwgaW5kZXhJbkJsb2Nr
KTsKICAgICAgICAgLy8gQnV0IHdlIGRvIHNwZWN1bGF0ZSB0aGF0IHRoZSBpbmRleCBpcyBhbiBp
bnRlZ2VyLgotICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjSW50MzIp
OworICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5maWx0ZXIoU3BlY0ludDMyKTsKICAg
ICAgICAgLy8gQW5kIHRoZSByZXN1bHQgaXMgdW5rbm93bi4KLSAgICAgICAgZm9yTm9kZShub2Rl
SW5kZXgpLm1ha2VUb3AoKTsKKyAgICAgICAgZm9yTm9kZShub2RlKS5tYWtlVG9wKCk7CiAgICAg
ICAgIGJyZWFrOwogICAgICAgICAKICAgICBjYXNlIE5ld0Z1bmN0aW9uOgogICAgIGNhc2UgTmV3
RnVuY3Rpb25FeHByZXNzaW9uOgogICAgIGNhc2UgTmV3RnVuY3Rpb25Ob0NoZWNrOgotICAgICAg
ICBub2RlLnNldENhbkV4aXQoZmFsc2UpOwotICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3RGb3Iobm9kZS5jb2RlT3JpZ2luKS0+ZnVuY3Rpb25T
dHJ1Y3R1cmUoKSk7CisgICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOworICAgICAgICBm
b3JOb2RlKG5vZGUpLnNldChtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0Rm9yKG5vZGUtPmNvZGVP
cmlnaW4pLT5mdW5jdGlvblN0cnVjdHVyZSgpKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgIAog
ICAgIGNhc2UgR2V0Q2FsbGVlOgotICAgICAgICBub2RlLnNldENhbkV4aXQoZmFsc2UpOwotICAg
ICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFNwZWNGdW5jdGlvbik7CisgICAgICAgIG5vZGUt
PnNldENhbkV4aXQoZmFsc2UpOworICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjRnVuY3Rp
b24pOwogICAgICAgICBicmVhazsKICAgICAgICAgCiAgICAgY2FzZSBTZXRDYWxsZWU6CiAgICAg
Y2FzZSBTZXRNeVNjb3BlOgotICAgICAgICBub2RlLnNldENhbkV4aXQoZmFsc2UpOworICAgICAg
ICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAK
ICAgICBjYXNlIEdldFNjb3BlOiAvLyBGSVhNRTogV2UgY291bGQgZ2V0IHJpZCBvZiB0aGVzZSBp
ZiB3ZSBrbm93IHRoYXQgdGhlIEpTRnVuY3Rpb24gaXMgYSBjb25zdGFudC4gaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwNjIwMgogICAgIGNhc2UgR2V0TXlTY29wZToK
ICAgICBjYXNlIFNraXBUb3BTY29wZToKLSAgICAgICAgbm9kZS5zZXRDYW5FeGl0KGZhbHNlKTsK
LSAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChTcGVjQ2VsbE90aGVyKTsKKyAgICAgICAg
bm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CisgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWND
ZWxsT3RoZXIpOwogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgU2tpcFNjb3BlOiB7Ci0gICAg
ICAgIG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7Ci0gICAgICAgIEpTVmFsdWUgY2hpbGQgPSBmb3JO
b2RlKG5vZGUuY2hpbGQxKCkpLnZhbHVlKCk7Ci0gICAgICAgIGlmIChjaGlsZCAmJiB0cnlTZXRD
b25zdGFudChub2RlSW5kZXgsIEpTVmFsdWUoanNDYXN0PEpTU2NvcGUqPihjaGlsZC5hc0NlbGwo
KSktPm5leHQoKSkpKSB7CisgICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOworICAgICAg
ICBKU1ZhbHVlIGNoaWxkID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSkudmFsdWUoKTsKKyAgICAg
ICAgaWYgKGNoaWxkICYmIHRyeVNldENvbnN0YW50KG5vZGUsIEpTVmFsdWUoanNDYXN0PEpTU2Nv
cGUqPihjaGlsZC5hc0NlbGwoKSktPm5leHQoKSkpKSB7CiAgICAgICAgICAgICBtX2ZvdW5kQ29u
c3RhbnRzID0gdHJ1ZTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIGZv
ck5vZGUobm9kZUluZGV4KS5zZXQoU3BlY0NlbGxPdGhlcik7CisgICAgICAgIGZvck5vZGUobm9k
ZSkuc2V0KFNwZWNDZWxsT3RoZXIpOwogICAgICAgICBicmVhazsKICAgICB9CiAKICAgICBjYXNl
IEdldFNjb3BlUmVnaXN0ZXJzOgotICAgICAgICBub2RlLnNldENhbkV4aXQoZmFsc2UpOwotICAg
ICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjQ2VsbCk7Ci0gICAgICAgIGZv
ck5vZGUobm9kZUluZGV4KS5jbGVhcigpOyAvLyBUaGUgcmVzdWx0IGlzIG5vdCBhIEpTIHZhbHVl
LgorICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKKyAgICAgICAgZm9yTm9kZShub2Rl
LT5jaGlsZDEoKSkuZmlsdGVyKFNwZWNDZWxsKTsKKyAgICAgICAgZm9yTm9kZShub2RlKS5jbGVh
cigpOyAvLyBUaGUgcmVzdWx0IGlzIG5vdCBhIEpTIHZhbHVlLgogICAgICAgICBicmVhazsKIAog
ICAgIGNhc2UgR2V0U2NvcGVkVmFyOgotICAgICAgICBub2RlLnNldENhbkV4aXQoZmFsc2UpOwot
ICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkubWFrZVRvcCgpOworICAgICAgICBub2RlLT5zZXRD
YW5FeGl0KGZhbHNlKTsKKyAgICAgICAgZm9yTm9kZShub2RlKS5tYWtlVG9wKCk7CiAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgCiAgICAgY2FzZSBQdXRTY29wZWRWYXI6Ci0gICAgICAgIG5v
ZGUuc2V0Q2FuRXhpdChmYWxzZSk7Ci0gICAgICAgIGNsb2JiZXJDYXB0dXJlZFZhcnMobm9kZS5j
b2RlT3JpZ2luKTsKKyAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CisgICAgICAgIGNs
b2JiZXJDYXB0dXJlZFZhcnMobm9kZS0+Y29kZU9yaWdpbik7CiAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgCiAgICAgY2FzZSBHZXRCeUlkOgogICAgIGNhc2UgR2V0QnlJZEZsdXNoOgotICAg
ICAgICBub2RlLnNldENhbkV4aXQodHJ1ZSk7Ci0gICAgICAgIGlmICghbm9kZS5wcmVkaWN0aW9u
KCkpIHsKKyAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKKyAgICAgICAgaWYgKCFub2Rl
LT5wcmVkaWN0aW9uKCkpIHsKICAgICAgICAgICAgIG1faXNWYWxpZCA9IGZhbHNlOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKGlzQ2VsbFNwZWN1bGF0aW9uKG1f
Z3JhcGhbbm9kZS5jaGlsZDEoKV0ucHJlZGljdGlvbigpKSkgewotICAgICAgICAgICAgZm9yTm9k
ZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY0NlbGwpOworICAgICAgICBpZiAoaXNDZWxsU3Bl
Y3VsYXRpb24obm9kZS0+Y2hpbGQxKCktPnByZWRpY3Rpb24oKSkpIHsKKyAgICAgICAgICAgIGZv
ck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRlcihTcGVjQ2VsbCk7CiAKLSAgICAgICAgICAgIGlm
IChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGZvck5vZGUobm9kZS5jaGlsZDEoKSkuYmVzdFByb3Zl
blN0cnVjdHVyZSgpKSB7CisgICAgICAgICAgICBpZiAoU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBm
b3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5iZXN0UHJvdmVuU3RydWN0dXJlKCkpIHsKICAgICAgICAg
ICAgICAgICBHZXRCeUlkU3RhdHVzIHN0YXR1cyA9IEdldEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3Io
CiAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgubV9nbG9iYWxEYXRhLCBzdHJ1Y3R1cmUsCi0g
ICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgubV9jb2RlQmxvY2stPmlkZW50aWZpZXIobm9kZS5p
ZGVudGlmaWVyTnVtYmVyKCkpKTsKKyAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5tX2NvZGVC
bG9jay0+aWRlbnRpZmllcihub2RlLT5pZGVudGlmaWVyTnVtYmVyKCkpKTsKICAgICAgICAgICAg
ICAgICBpZiAoc3RhdHVzLmlzU2ltcGxlKCkpIHsKICAgICAgICAgICAgICAgICAgICAgLy8gQXNz
ZXJ0IHRoaW5ncyB0aGF0IHdlIGNhbid0IGhhbmRsZSBhbmQgdGhhdCB0aGUgY29tcHV0ZUZvcigp
IG1ldGhvZAogICAgICAgICAgICAgICAgICAgICAvLyBhYm92ZSB3b24ndCBiZSBhYmxlIHRvIHJl
dHVybi4KQEAgLTE0OTksMjMgKzE1MTUsMjMgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRl
KHVuc2lnbmVkIGluZAogICAgICAgICAgICAgICAgICAgICBBU1NFUlQoc3RhdHVzLmNoYWluKCku
aXNFbXB0eSgpKTsKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIGlm
IChzdGF0dXMuc3BlY2lmaWNWYWx1ZSgpKQotICAgICAgICAgICAgICAgICAgICAgICAgZm9yTm9k
ZShub2RlSW5kZXgpLnNldChzdGF0dXMuc3BlY2lmaWNWYWx1ZSgpKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KHN0YXR1cy5zcGVjaWZpY1ZhbHVlKCkpOwogICAg
ICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICBmb3JOb2RlKG5v
ZGVJbmRleCkubWFrZVRvcCgpOwotICAgICAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hp
bGQxKCkpLmZpbHRlcihzdGF0dXMuc3RydWN0dXJlU2V0KCkpOworICAgICAgICAgICAgICAgICAg
ICAgICAgZm9yTm9kZShub2RlKS5tYWtlVG9wKCk7CisgICAgICAgICAgICAgICAgICAgIGZvck5v
ZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRlcihzdGF0dXMuc3RydWN0dXJlU2V0KCkpOwogICAgICAg
ICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgbV9mb3VuZENvbnN0YW50cyA9IHRy
dWU7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIH0KICAgICAgICAgfQotICAgICAgICBjbG9iYmVyV29ybGQobm9kZS5jb2RlT3JpZ2lu
LCBpbmRleEluQmxvY2spOwotICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkubWFrZVRvcCgpOwor
ICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+Y29kZU9yaWdpbiwgaW5kZXhJbkJsb2NrKTsKKyAg
ICAgICAgZm9yTm9kZShub2RlKS5tYWtlVG9wKCk7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgCiAgICAgY2FzZSBHZXRBcnJheUxlbmd0aDoKLSAgICAgICAgbm9kZS5zZXRDYW5FeGl0KHRy
dWUpOyAvLyBMaWVzLCBidXQgaXQncyB0cnVlIGZvciB0aGUgY29tbW9uIGNhc2Ugb2YgSlNBcnJh
eSwgc28gaXQncyBnb29kIGVub3VnaC4KLSAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChT
cGVjSW50MzIpOworICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOyAvLyBMaWVzLCBidXQg
aXQncyB0cnVlIGZvciB0aGUgY29tbW9uIGNhc2Ugb2YgSlNBcnJheSwgc28gaXQncyBnb29kIGVu
b3VnaC4KKyAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0ludDMyKTsKICAgICAgICAgYnJl
YWs7CiAgICAgICAgIAogICAgIGNhc2UgQ2hlY2tFeGVjdXRhYmxlOiB7CkBAIC0xNTIzLDIzICsx
NTM5LDIzIEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAg
ICAgLy8gbW9yZSB0aG9yb3VnaGx5LiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTA2MjAwCiAgICAgICAgIC8vIEZJWE1FOiBXZSBjb3VsZCBlbGltaW5hdGUgdGhlc2Ug
ZW50aXJlbHkgaWYgd2Uga25vdyB0aGUgZXhhY3QgdmFsdWUgdGhhdCBmbG93cyBpbnRvIHRoaXMu
CiAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDYy
MDEKLSAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY0NlbGwpOwotICAg
ICAgICBub2RlLnNldENhbkV4aXQodHJ1ZSk7CisgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQx
KCkpLmZpbHRlcihTcGVjQ2VsbCk7CisgICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7CiAg
ICAgICAgIGJyZWFrOwogICAgIH0KIAogICAgIGNhc2UgQ2hlY2tTdHJ1Y3R1cmU6CiAgICAgY2Fz
ZSBGb3J3YXJkQ2hlY2tTdHJ1Y3R1cmU6IHsKICAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBi
ZSBhYmxlIHRvIHByb3BhZ2F0ZSB0aGUgc3RydWN0dXJlIHNldHMgb2YgY29uc3RhbnRzIChpLmUu
IHByb3RvdHlwZXMpLgotICAgICAgICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSA9IGZvck5vZGUobm9k
ZS5jaGlsZDEoKSk7CisgICAgICAgIEFic3RyYWN0VmFsdWUmIHZhbHVlID0gZm9yTm9kZShub2Rl
LT5jaGlsZDEoKSk7CiAgICAgICAgIC8vIElmIHRoaXMgc3RydWN0dXJlIGNoZWNrIGlzIGF0dGVt
cHRpbmcgdG8gcHJvdmUga25vd2xlZGdlIGFscmVhZHkgaGVsZCBpbgogICAgICAgICAvLyB0aGUg
ZnV0dXJlUG9zc2libGVTdHJ1Y3R1cmUgc2V0IHRoZW4gdGhlIGNvbnN0YW50IGZvbGRpbmcgcGhh
c2Ugc2hvdWxkCiAgICAgICAgIC8vIHR1cm4gdGhpcyBpbnRvIGEgd2F0Y2hwb2ludCBpbnN0ZWFk
LgotICAgICAgICBTdHJ1Y3R1cmVTZXQmIHNldCA9IG5vZGUuc3RydWN0dXJlU2V0KCk7CisgICAg
ICAgIFN0cnVjdHVyZVNldCYgc2V0ID0gbm9kZS0+c3RydWN0dXJlU2V0KCk7CiAgICAgICAgIGlm
ICh2YWx1ZS5tX2Z1dHVyZVBvc3NpYmxlU3RydWN0dXJlLmlzU3Vic2V0T2Yoc2V0KQogICAgICAg
ICAgICAgfHwgdmFsdWUubV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuaXNTdWJzZXRPZihzZXQpKQog
ICAgICAgICAgICAgbV9mb3VuZENvbnN0YW50cyA9IHRydWU7Ci0gICAgICAgIG5vZGUuc2V0Q2Fu
RXhpdCgKKyAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCgKICAgICAgICAgICAgICF2YWx1ZS5tX2N1
cnJlbnRLbm93blN0cnVjdHVyZS5pc1N1YnNldE9mKHNldCkKICAgICAgICAgICAgIHx8ICFpc0Nl
bGxTcGVjdWxhdGlvbih2YWx1ZS5tX3R5cGUpKTsKICAgICAgICAgdmFsdWUuZmlsdGVyKHNldCk7
CkBAIC0xNTQ5LDcgKzE1NjUsNyBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWdu
ZWQgaW5kCiAgICAgICAgIAogICAgIGNhc2UgU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnQ6
CiAgICAgY2FzZSBGb3J3YXJkU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnQ6IHsKLSAgICAg
ICAgQWJzdHJhY3RWYWx1ZSYgdmFsdWUgPSBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpOworICAgICAg
ICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpOwogCiAgICAg
ICAgIC8vIEl0J3Mgb25seSB2YWxpZCB0byBpc3N1ZSBhIHN0cnVjdHVyZSB0cmFuc2l0aW9uIHdh
dGNocG9pbnQgaWYgd2UgYWxyZWFkeQogICAgICAgICAvLyBrbm93IHRoYXQgdGhlIHdhdGNocG9p
bnQgY292ZXJzIGEgc3VwZXJzZXQgb2YgdGhlIHN0cnVjdHVyZXMga25vd24gdG8KQEAgLTE1NTcs
MTU0ICsxNTczLDE1NCBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5k
CiAgICAgICAgIC8vIEN1cnJlbnRseSwgd2Ugb25seSBpc3N1ZSBzaW5nbGV0b24gd2F0Y2hwb2lu
dHMgKHRoYXQgY2hlY2sgb25lIHN0cnVjdHVyZSkKICAgICAgICAgLy8gYW5kIG91ciBmdXR1cmVQ
b3NzaWJsZVN0cnVjdHVyZSBzZXQgY2FuIG9ubHkgY29udGFpbiB6ZXJvLCBvbmUsIG9yIGFuCiAg
ICAgICAgIC8vIGluZmluaXR5IG9mIHN0cnVjdHVyZXMuCi0gICAgICAgIEFTU0VSVCh2YWx1ZS5t
X2Z1dHVyZVBvc3NpYmxlU3RydWN0dXJlLmlzU3Vic2V0T2YoU3RydWN0dXJlU2V0KG5vZGUuc3Ry
dWN0dXJlKCkpKSk7CisgICAgICAgIEFTU0VSVCh2YWx1ZS5tX2Z1dHVyZVBvc3NpYmxlU3RydWN0
dXJlLmlzU3Vic2V0T2YoU3RydWN0dXJlU2V0KG5vZGUtPnN0cnVjdHVyZSgpKSkpOwogICAgICAg
ICAKICAgICAgICAgQVNTRVJUKHZhbHVlLmlzQ2xlYXIoKSB8fCBpc0NlbGxTcGVjdWxhdGlvbih2
YWx1ZS5tX3R5cGUpKTsgLy8gVmFsdWUgY291bGQgYmUgY2xlYXIgaWYgd2UndmUgcHJvdmVuIG11
c3QtZXhpdCBkdWUgdG8gYSBzcGVjdWxhdGlvbiBzdGF0aWNhbGx5IGtub3duIHRvIGJlIGJhZC4K
LSAgICAgICAgdmFsdWUuZmlsdGVyKG5vZGUuc3RydWN0dXJlKCkpOworICAgICAgICB2YWx1ZS5m
aWx0ZXIobm9kZS0+c3RydWN0dXJlKCkpOwogICAgICAgICBtX2hhdmVTdHJ1Y3R1cmVzID0gdHJ1
ZTsKLSAgICAgICAgbm9kZS5zZXRDYW5FeGl0KHRydWUpOworICAgICAgICBub2RlLT5zZXRDYW5F
eGl0KHRydWUpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgICAgICAKICAgICBjYXNl
IFB1dFN0cnVjdHVyZToKICAgICBjYXNlIFBoYW50b21QdXRTdHJ1Y3R1cmU6Ci0gICAgICAgIG5v
ZGUuc2V0Q2FuRXhpdChmYWxzZSk7Ci0gICAgICAgIGlmICghZm9yTm9kZShub2RlLmNoaWxkMSgp
KS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5pc0NsZWFyKCkpIHsKKyAgICAgICAgbm9kZS0+c2V0
Q2FuRXhpdChmYWxzZSk7CisgICAgICAgIGlmICghZm9yTm9kZShub2RlLT5jaGlsZDEoKSkubV9j
dXJyZW50S25vd25TdHJ1Y3R1cmUuaXNDbGVhcigpKSB7CiAgICAgICAgICAgICBjbG9iYmVyU3Ry
dWN0dXJlcyhpbmRleEluQmxvY2spOwotICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgp
KS5zZXQobm9kZS5zdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSgpLm5ld1N0cnVjdHVyZSk7CisgICAg
ICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5zZXQobm9kZS0+c3RydWN0dXJlVHJhbnNp
dGlvbkRhdGEoKS5uZXdTdHJ1Y3R1cmUpOwogICAgICAgICAgICAgbV9oYXZlU3RydWN0dXJlcyA9
IHRydWU7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBHZXRCdXR0ZXJmbHk6
CiAgICAgY2FzZSBBbGxvY2F0ZVByb3BlcnR5U3RvcmFnZToKICAgICBjYXNlIFJlYWxsb2NhdGVQ
cm9wZXJ0eVN0b3JhZ2U6Ci0gICAgICAgIG5vZGUuc2V0Q2FuRXhpdCghaXNDZWxsU3BlY3VsYXRp
b24oZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKTsKLSAgICAgICAgZm9yTm9kZShub2Rl
LmNoaWxkMSgpKS5maWx0ZXIoU3BlY0NlbGwpOwotICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCku
Y2xlYXIoKTsgLy8gVGhlIHJlc3VsdCBpcyBub3QgYSBKUyB2YWx1ZS4KKyAgICAgICAgbm9kZS0+
c2V0Q2FuRXhpdCghaXNDZWxsU3BlY3VsYXRpb24oZm9yTm9kZShub2RlLT5jaGlsZDEoKSkubV90
eXBlKSk7CisgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRlcihTcGVjQ2VsbCk7
CisgICAgICAgIGZvck5vZGUobm9kZSkuY2xlYXIoKTsgLy8gVGhlIHJlc3VsdCBpcyBub3QgYSBK
UyB2YWx1ZS4KICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBDaGVja0FycmF5OiB7Ci0gICAgICAg
IGlmIChub2RlLmFycmF5TW9kZSgpLmFscmVhZHlDaGVja2VkKG1fZ3JhcGgsIG5vZGUsIGZvck5v
ZGUobm9kZS5jaGlsZDEoKSkpKSB7CisgICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS5hbHJl
YWR5Q2hlY2tlZChtX2dyYXBoLCBub2RlLCBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKSkpIHsKICAg
ICAgICAgICAgIG1fZm91bmRDb25zdGFudHMgPSB0cnVlOwotICAgICAgICAgICAgbm9kZS5zZXRD
YW5FeGl0KGZhbHNlKTsKKyAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgbm9kZS5zZXRDYW5FeGl0KHRydWUp
OyAvLyBMaWVzLCBidXQgdGhpcyBpcyBmb2xsb3dlZCBieSBvcGVyYXRpb25zIChsaWtlIEdldEJ5
VmFsKSB0aGF0IGFsd2F5cyBleGl0LCBzbyB0aGVyZSBpcyBubyBwb2ludCBpbiB1cyB0cnlpbmcg
dG8gYmUgY2xldmVyIGhlcmUuCi0gICAgICAgIHN3aXRjaCAobm9kZS5hcnJheU1vZGUoKS50eXBl
KCkpIHsKKyAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsgLy8gTGllcywgYnV0IHRoaXMg
aXMgZm9sbG93ZWQgYnkgb3BlcmF0aW9ucyAobGlrZSBHZXRCeVZhbCkgdGhhdCBhbHdheXMgZXhp
dCwgc28gdGhlcmUgaXMgbm8gcG9pbnQgaW4gdXMgdHJ5aW5nIHRvIGJlIGNsZXZlciBoZXJlLgor
ICAgICAgICBzd2l0Y2ggKG5vZGUtPmFycmF5TW9kZSgpLnR5cGUoKSkgewogICAgICAgICBjYXNl
IEFycmF5OjpTdHJpbmc6Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRl
cihTcGVjU3RyaW5nKTsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRl
cihTcGVjU3RyaW5nKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEFycmF5OjpJ
bnQzMjoKICAgICAgICAgY2FzZSBBcnJheTo6RG91YmxlOgogICAgICAgICBjYXNlIEFycmF5OjpD
b250aWd1b3VzOgogICAgICAgICBjYXNlIEFycmF5OjpBcnJheVN0b3JhZ2U6CiAgICAgICAgIGNh
c2UgQXJyYXk6OlNsb3dQdXRBcnJheVN0b3JhZ2U6Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUu
Y2hpbGQxKCkpLmZpbHRlcihTcGVjQ2VsbCk7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNo
aWxkMSgpKS5maWx0ZXIoU3BlY0NlbGwpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNh
c2UgQXJyYXk6OkFyZ3VtZW50czoKLSAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSku
ZmlsdGVyKFNwZWNBcmd1bWVudHMpOworICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDEo
KSkuZmlsdGVyKFNwZWNBcmd1bWVudHMpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNh
c2UgQXJyYXk6OkludDhBcnJheToKLSAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSku
ZmlsdGVyKFNwZWNJbnQ4QXJyYXkpOworICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDEo
KSkuZmlsdGVyKFNwZWNJbnQ4QXJyYXkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNh
c2UgQXJyYXk6OkludDE2QXJyYXk6Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkp
LmZpbHRlcihTcGVjSW50MTZBcnJheSk7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxk
MSgpKS5maWx0ZXIoU3BlY0ludDE2QXJyYXkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IGNhc2UgQXJyYXk6OkludDMyQXJyYXk6Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQx
KCkpLmZpbHRlcihTcGVjSW50MzJBcnJheSk7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNo
aWxkMSgpKS5maWx0ZXIoU3BlY0ludDMyQXJyYXkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIGNhc2UgQXJyYXk6OlVpbnQ4QXJyYXk6Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hp
bGQxKCkpLmZpbHRlcihTcGVjVWludDhBcnJheSk7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUt
PmNoaWxkMSgpKS5maWx0ZXIoU3BlY1VpbnQ4QXJyYXkpOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIGNhc2UgQXJyYXk6OlVpbnQ4Q2xhbXBlZEFycmF5OgotICAgICAgICAgICAgZm9yTm9k
ZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY1VpbnQ4Q2xhbXBlZEFycmF5KTsKKyAgICAgICAg
ICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRlcihTcGVjVWludDhDbGFtcGVkQXJyYXkp
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OlVpbnQxNkFycmF5Ogot
ICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY1VpbnQxNkFycmF5
KTsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRlcihTcGVjVWludDE2
QXJyYXkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OlVpbnQzMkFy
cmF5OgotICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY1VpbnQz
MkFycmF5KTsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRlcihTcGVj
VWludDMyQXJyYXkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OkZs
b2F0MzJBcnJheToKLSAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNw
ZWNGbG9hdDMyQXJyYXkpOworICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDEoKSkuZmls
dGVyKFNwZWNGbG9hdDMyQXJyYXkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2Ug
QXJyYXk6OkZsb2F0NjRBcnJheToKLSAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSku
ZmlsdGVyKFNwZWNGbG9hdDY0QXJyYXkpOworICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGls
ZDEoKSkuZmlsdGVyKFNwZWNGbG9hdDY0QXJyYXkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgZm9yTm9kZShub2RlLmNoaWxk
MSgpKS5maWx0ZXJBcnJheU1vZGVzKG5vZGUuYXJyYXlNb2RlKCkuYXJyYXlNb2Rlc1RoYXRQYXNz
RmlsdGVyaW5nKCkpOworICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5maWx0ZXJBcnJh
eU1vZGVzKG5vZGUtPmFycmF5TW9kZSgpLmFycmF5TW9kZXNUaGF0UGFzc0ZpbHRlcmluZygpKTsK
ICAgICAgICAgbV9oYXZlU3RydWN0dXJlcyA9IHRydWU7CiAgICAgICAgIGJyZWFrOwogICAgIH0K
ICAgICBjYXNlIEFycmF5aWZ5OiB7Ci0gICAgICAgIGlmIChub2RlLmFycmF5TW9kZSgpLmFscmVh
ZHlDaGVja2VkKG1fZ3JhcGgsIG5vZGUsIGZvck5vZGUobm9kZS5jaGlsZDEoKSkpKSB7CisgICAg
ICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS5hbHJlYWR5Q2hlY2tlZChtX2dyYXBoLCBub2RlLCBm
b3JOb2RlKG5vZGUtPmNoaWxkMSgpKSkpIHsKICAgICAgICAgICAgIG1fZm91bmRDb25zdGFudHMg
PSB0cnVlOwotICAgICAgICAgICAgbm9kZS5zZXRDYW5FeGl0KGZhbHNlKTsKKyAgICAgICAgICAg
IG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0K
LSAgICAgICAgQVNTRVJUKG5vZGUuYXJyYXlNb2RlKCkuY29udmVyc2lvbigpID09IEFycmF5OjpD
b252ZXJ0Ci0gICAgICAgICAgICB8fCBub2RlLmFycmF5TW9kZSgpLmNvbnZlcnNpb24oKSA9PSBB
cnJheTo6UmFnZUNvbnZlcnQpOwotICAgICAgICBub2RlLnNldENhbkV4aXQodHJ1ZSk7Ci0gICAg
ICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNDZWxsKTsKLSAgICAgICAgaWYg
KG5vZGUuY2hpbGQyKCkpCi0gICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQyKCkpLmZpbHRl
cihTcGVjSW50MzIpOworICAgICAgICBBU1NFUlQobm9kZS0+YXJyYXlNb2RlKCkuY29udmVyc2lv
bigpID09IEFycmF5OjpDb252ZXJ0CisgICAgICAgICAgICB8fCBub2RlLT5hcnJheU1vZGUoKS5j
b252ZXJzaW9uKCkgPT0gQXJyYXk6OlJhZ2VDb252ZXJ0KTsKKyAgICAgICAgbm9kZS0+c2V0Q2Fu
RXhpdCh0cnVlKTsKKyAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDEoKSkuZmlsdGVyKFNwZWND
ZWxsKTsKKyAgICAgICAgaWYgKG5vZGUtPmNoaWxkMigpKQorICAgICAgICAgICAgZm9yTm9kZShu
b2RlLT5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7CiAgICAgICAgIGNsb2JiZXJTdHJ1Y3R1
cmVzKGluZGV4SW5CbG9jayk7Ci0gICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVy
QXJyYXlNb2Rlcyhub2RlLmFycmF5TW9kZSgpLmFycmF5TW9kZXNUaGF0UGFzc0ZpbHRlcmluZygp
KTsKKyAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDEoKSkuZmlsdGVyQXJyYXlNb2Rlcyhub2Rl
LT5hcnJheU1vZGUoKS5hcnJheU1vZGVzVGhhdFBhc3NGaWx0ZXJpbmcoKSk7CiAgICAgICAgIG1f
aGF2ZVN0cnVjdHVyZXMgPSB0cnVlOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgY2FzZSBB
cnJheWlmeVRvU3RydWN0dXJlOiB7Ci0gICAgICAgIEFic3RyYWN0VmFsdWUmIHZhbHVlID0gZm9y
Tm9kZShub2RlLmNoaWxkMSgpKTsKLSAgICAgICAgU3RydWN0dXJlU2V0IHNldCA9IG5vZGUuc3Ry
dWN0dXJlKCk7CisgICAgICAgIEFic3RyYWN0VmFsdWUmIHZhbHVlID0gZm9yTm9kZShub2RlLT5j
aGlsZDEoKSk7CisgICAgICAgIFN0cnVjdHVyZVNldCBzZXQgPSBub2RlLT5zdHJ1Y3R1cmUoKTsK
ICAgICAgICAgaWYgKHZhbHVlLm1fZnV0dXJlUG9zc2libGVTdHJ1Y3R1cmUuaXNTdWJzZXRPZihz
ZXQpCiAgICAgICAgICAgICB8fCB2YWx1ZS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5pc1N1YnNl
dE9mKHNldCkpCiAgICAgICAgICAgICBtX2ZvdW5kQ29uc3RhbnRzID0gdHJ1ZTsKLSAgICAgICAg
bm9kZS5zZXRDYW5FeGl0KHRydWUpOwotICAgICAgICBpZiAobm9kZS5jaGlsZDIoKSkKLSAgICAg
ICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7CisgICAgICAg
IG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7CisgICAgICAgIGlmIChub2RlLT5jaGlsZDIoKSkKKyAg
ICAgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQyKCkpLmZpbHRlcihTcGVjSW50MzIpOwogICAg
ICAgICBjbG9iYmVyU3RydWN0dXJlcyhpbmRleEluQmxvY2spOwogICAgICAgICB2YWx1ZS5maWx0
ZXIoc2V0KTsKICAgICAgICAgbV9oYXZlU3RydWN0dXJlcyA9IHRydWU7CiAgICAgICAgIGJyZWFr
OwogICAgIH0KICAgICBjYXNlIEdldEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2U6IHsKLSAgICAgICAg
bm9kZS5zZXRDYW5FeGl0KGZhbHNlKTsKLSAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLmNsZWFy
KCk7CisgICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOworICAgICAgICBmb3JOb2RlKG5v
ZGUpLmNsZWFyKCk7CiAgICAgICAgIGJyZWFrOyAKICAgICB9CiAgICAgY2FzZSBHZXRCeU9mZnNl
dDoKLSAgICAgICAgaWYgKCFtX2dyYXBoW25vZGUuY2hpbGQxKCldLmhhc1N0b3JhZ2VSZXN1bHQo
KSkgewotICAgICAgICAgICAgbm9kZS5zZXRDYW5FeGl0KCFpc0NlbGxTcGVjdWxhdGlvbihmb3JO
b2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpOwotICAgICAgICAgICAgZm9yTm9kZShub2RlLmNo
aWxkMSgpKS5maWx0ZXIoU3BlY0NlbGwpOworICAgICAgICBpZiAoIW5vZGUtPmNoaWxkMSgpLT5o
YXNTdG9yYWdlUmVzdWx0KCkpIHsKKyAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQoIWlzQ2Vs
bFNwZWN1bGF0aW9uKGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fdHlwZSkpOworICAgICAgICAg
ICAgZm9yTm9kZShub2RlLT5jaGlsZDEoKSkuZmlsdGVyKFNwZWNDZWxsKTsKICAgICAgICAgfQot
ICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkubWFrZVRvcCgpOworICAgICAgICBmb3JOb2RlKG5v
ZGUpLm1ha2VUb3AoKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICBjYXNlIFB1
dEJ5T2Zmc2V0OiB7CiAgICAgICAgIGJvb2wgY2FuRXhpdCA9IGZhbHNlOwotICAgICAgICBpZiAo
IW1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0uaGFzU3RvcmFnZVJlc3VsdCgpKSB7Ci0gICAgICAgICAg
ICBjYW5FeGl0IHw9ICFpc0NlbGxTcGVjdWxhdGlvbihmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1f
dHlwZSk7Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjQ2Vs
bCk7Ci0gICAgICAgIH0KLSAgICAgICAgY2FuRXhpdCB8PSAhaXNDZWxsU3BlY3VsYXRpb24oZm9y
Tm9kZShub2RlLmNoaWxkMigpKS5tX3R5cGUpOwotICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQy
KCkpLmZpbHRlcihTcGVjQ2VsbCk7Ci0gICAgICAgIG5vZGUuc2V0Q2FuRXhpdChjYW5FeGl0KTsK
KyAgICAgICAgaWYgKCFub2RlLT5jaGlsZDEoKS0+aGFzU3RvcmFnZVJlc3VsdCgpKSB7CisgICAg
ICAgICAgICBjYW5FeGl0IHw9ICFpc0NlbGxTcGVjdWxhdGlvbihmb3JOb2RlKG5vZGUtPmNoaWxk
MSgpKS5tX3R5cGUpOworICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDEoKSkuZmlsdGVy
KFNwZWNDZWxsKTsKKyAgICAgICAgfQorICAgICAgICBjYW5FeGl0IHw9ICFpc0NlbGxTcGVjdWxh
dGlvbihmb3JOb2RlKG5vZGUtPmNoaWxkMigpKS5tX3R5cGUpOworICAgICAgICBmb3JOb2RlKG5v
ZGUtPmNoaWxkMigpKS5maWx0ZXIoU3BlY0NlbGwpOworICAgICAgICBub2RlLT5zZXRDYW5FeGl0
KGNhbkV4aXQpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgICAgICAKICAgICBjYXNl
IENoZWNrRnVuY3Rpb246IHsKLSAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IGZvck5vZGUobm9kZS5j
aGlsZDEoKSkudmFsdWUoKTsKLSAgICAgICAgaWYgKHZhbHVlID09IG5vZGUuZnVuY3Rpb24oKSkg
eworICAgICAgICBKU1ZhbHVlIHZhbHVlID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSkudmFsdWUo
KTsKKyAgICAgICAgaWYgKHZhbHVlID09IG5vZGUtPmZ1bmN0aW9uKCkpIHsKICAgICAgICAgICAg
IG1fZm91bmRDb25zdGFudHMgPSB0cnVlOwogICAgICAgICAgICAgQVNTRVJUKHZhbHVlKTsKLSAg
ICAgICAgICAgIG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7CisgICAgICAgICAgICBub2RlLT5zZXRD
YW5FeGl0KGZhbHNlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIAot
ICAgICAgICBub2RlLnNldENhbkV4aXQodHJ1ZSk7IC8vIExpZXMhIFdlIGNhbiBkbyBiZXR0ZXIu
Ci0gICAgICAgIGlmICghZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXJCeVZhbHVlKG5vZGUu
ZnVuY3Rpb24oKSkpIHsKKyAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsgLy8gTGllcyEg
V2UgY2FuIGRvIGJldHRlci4KKyAgICAgICAgaWYgKCFmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5m
aWx0ZXJCeVZhbHVlKG5vZGUtPmZ1bmN0aW9uKCkpKSB7CiAgICAgICAgICAgICBtX2lzVmFsaWQg
PSBmYWxzZTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkBAIC0xNzEzLDY3ICsxNzI5
LDY5IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAg
CiAgICAgY2FzZSBQdXRCeUlkOgogICAgIGNhc2UgUHV0QnlJZERpcmVjdDoKLSAgICAgICAgbm9k
ZS5zZXRDYW5FeGl0KHRydWUpOwotICAgICAgICBpZiAoU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBm
b3JOb2RlKG5vZGUuY2hpbGQxKCkpLmJlc3RQcm92ZW5TdHJ1Y3R1cmUoKSkgeworICAgICAgICBu
b2RlLT5zZXRDYW5FeGl0KHRydWUpOworICAgICAgICBpZiAoU3RydWN0dXJlKiBzdHJ1Y3R1cmUg
PSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5iZXN0UHJvdmVuU3RydWN0dXJlKCkpIHsKICAgICAg
ICAgICAgIFB1dEJ5SWRTdGF0dXMgc3RhdHVzID0gUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvcigK
ICAgICAgICAgICAgICAgICBtX2dyYXBoLm1fZ2xvYmFsRGF0YSwKLSAgICAgICAgICAgICAgICBt
X2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLmNvZGVPcmlnaW4pLAorICAgICAgICAgICAgICAg
IG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPmNvZGVPcmlnaW4pLAogICAgICAgICAgICAg
ICAgIHN0cnVjdHVyZSwKLSAgICAgICAgICAgICAgICBtX2dyYXBoLm1fY29kZUJsb2NrLT5pZGVu
dGlmaWVyKG5vZGUuaWRlbnRpZmllck51bWJlcigpKSwKLSAgICAgICAgICAgICAgICBub2RlLm9w
KCkgPT0gUHV0QnlJZERpcmVjdCk7CisgICAgICAgICAgICAgICAgbV9ncmFwaC5tX2NvZGVCbG9j
ay0+aWRlbnRpZmllcihub2RlLT5pZGVudGlmaWVyTnVtYmVyKCkpLAorICAgICAgICAgICAgICAg
IG5vZGUtPm9wKCkgPT0gUHV0QnlJZERpcmVjdCk7CiAgICAgICAgICAgICBpZiAoc3RhdHVzLmlz
U2ltcGxlUmVwbGFjZSgpKSB7Ci0gICAgICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgp
KS5maWx0ZXIoc3RydWN0dXJlKTsKKyAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxk
MSgpKS5maWx0ZXIoc3RydWN0dXJlKTsKICAgICAgICAgICAgICAgICBtX2ZvdW5kQ29uc3RhbnRz
ID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIGlmIChzdGF0dXMuaXNTaW1wbGVUcmFuc2l0aW9uKCkpIHsKICAgICAgICAgICAgICAgICBj
bG9iYmVyU3RydWN0dXJlcyhpbmRleEluQmxvY2spOwotICAgICAgICAgICAgICAgIGZvck5vZGUo
bm9kZS5jaGlsZDEoKSkuc2V0KHN0YXR1cy5uZXdTdHJ1Y3R1cmUoKSk7CisgICAgICAgICAgICAg
ICAgZm9yTm9kZShub2RlLT5jaGlsZDEoKSkuc2V0KHN0YXR1cy5uZXdTdHJ1Y3R1cmUoKSk7CiAg
ICAgICAgICAgICAgICAgbV9oYXZlU3RydWN0dXJlcyA9IHRydWU7CiAgICAgICAgICAgICAgICAg
bV9mb3VuZENvbnN0YW50cyA9IHRydWU7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIo
U3BlY0NlbGwpOwotICAgICAgICBjbG9iYmVyV29ybGQobm9kZS5jb2RlT3JpZ2luLCBpbmRleElu
QmxvY2spOworICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5maWx0ZXIoU3BlY0NlbGwp
OworICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+Y29kZU9yaWdpbiwgaW5kZXhJbkJsb2NrKTsK
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICBjYXNlIEdldEdsb2JhbFZhcjoKLSAg
ICAgICAgbm9kZS5zZXRDYW5FeGl0KGZhbHNlKTsKLSAgICAgICAgZm9yTm9kZShub2RlSW5kZXgp
Lm1ha2VUb3AoKTsKKyAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CisgICAgICAgIGZv
ck5vZGUobm9kZSkubWFrZVRvcCgpOwogICAgICAgICBicmVhazsKICAgICAgICAgCiAgICAgY2Fz
ZSBHbG9iYWxWYXJXYXRjaHBvaW50OgotICAgICAgICBub2RlLnNldENhbkV4aXQodHJ1ZSk7Cisg
ICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgCiAgICAgY2FzZSBQdXRHbG9iYWxWYXI6CiAgICAgY2FzZSBQdXRHbG9iYWxWYXJDaGVjazoK
LSAgICAgICAgbm9kZS5zZXRDYW5FeGl0KGZhbHNlKTsKKyAgICAgICAgbm9kZS0+c2V0Q2FuRXhp
dChmYWxzZSk7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAgY2FzZSBDaGVja0hh
c0luc3RhbmNlOgotICAgICAgICBub2RlLnNldENhbkV4aXQodHJ1ZSk7Ci0gICAgICAgIGZvck5v
ZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNDZWxsKTsKKyAgICAgICAgbm9kZS0+c2V0Q2Fu
RXhpdCh0cnVlKTsKKyAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDEoKSkuZmlsdGVyKFNwZWND
ZWxsKTsKICAgICAgICAgLy8gU2FkbHksIHdlIGRvbid0IHByb3BhZ2F0ZSB0aGUgZmFjdCB0aGF0
IHdlJ3ZlIGRvbmUgQ2hlY2tIYXNJbnN0YW5jZQogICAgICAgICBicmVhazsKICAgICAgICAgICAg
IAogICAgIGNhc2UgSW5zdGFuY2VPZjoKLSAgICAgICAgbm9kZS5zZXRDYW5FeGl0KHRydWUpOwor
ICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOwogICAgICAgICAvLyBBZ2Fpbiwgc2FkbHks
IHdlIGRvbid0IHByb3BhZ2F0ZSB0aGUgZmFjdCB0aGF0IHdlJ3ZlIGRvbmUgSW5zdGFuY2VPZgot
ICAgICAgICBpZiAoIShtX2dyYXBoW25vZGUuY2hpbGQxKCldLnByZWRpY3Rpb24oKSAmIH5TcGVj
Q2VsbCkgJiYgIShmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSAmIH5TcGVjQ2VsbCkpCi0g
ICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjQ2VsbCk7Ci0gICAg
ICAgIGZvck5vZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKFNwZWNDZWxsKTsKLSAgICAgICAgZm9y
Tm9kZShub2RlSW5kZXgpLnNldChTcGVjQm9vbGVhbik7CisgICAgICAgIC8vIEZJWE1FOiBUaGlz
IGFwcGVhcnMgYnJva2VuOiBDaGVja0hhc0luc3RhbmNlIGFscmVhZHkgZG9lcyBhbiB1bmNvbmRp
dGlvbmFsIGNlbGwKKyAgICAgICAgLy8gY2hlY2suIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xMDc0NzkKKyAgICAgICAgaWYgKCEobm9kZS0+Y2hpbGQxKCktPnByZWRp
Y3Rpb24oKSAmIH5TcGVjQ2VsbCkgJiYgIShmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX3R5cGUg
JiB+U3BlY0NlbGwpKQorICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDEoKSkuZmlsdGVy
KFNwZWNDZWxsKTsKKyAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDIoKSkuZmlsdGVyKFNwZWND
ZWxsKTsKKyAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0Jvb2xlYW4pOwogICAgICAgICBi
cmVhazsKICAgICAgICAgICAgIAogICAgIGNhc2UgUGhpOgogICAgIGNhc2UgRmx1c2g6Ci0gICAg
ICAgIG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7CisgICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFs
c2UpOwogICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgIGNhc2UgQnJlYWtwb2ludDoK
LSAgICAgICAgbm9kZS5zZXRDYW5FeGl0KGZhbHNlKTsKKyAgICAgICAgbm9kZS0+c2V0Q2FuRXhp
dChmYWxzZSk7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAgY2FzZSBDYWxsOgpA
QCAtMTc4MiwxOCArMTgwMCwxOCBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWdu
ZWQgaW5kCiAgICAgY2FzZSBSZXNvbHZlQmFzZToKICAgICBjYXNlIFJlc29sdmVCYXNlU3RyaWN0
UHV0OgogICAgIGNhc2UgUmVzb2x2ZUdsb2JhbDoKLSAgICAgICAgbm9kZS5zZXRDYW5FeGl0KHRy
dWUpOwotICAgICAgICBjbG9iYmVyV29ybGQobm9kZS5jb2RlT3JpZ2luLCBpbmRleEluQmxvY2sp
OwotICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkubWFrZVRvcCgpOworICAgICAgICBub2RlLT5z
ZXRDYW5FeGl0KHRydWUpOworICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+Y29kZU9yaWdpbiwg
aW5kZXhJbkJsb2NrKTsKKyAgICAgICAgZm9yTm9kZShub2RlKS5tYWtlVG9wKCk7CiAgICAgICAg
IGJyZWFrOwogCiAgICAgY2FzZSBHYXJiYWdlVmFsdWU6Ci0gICAgICAgIGNsb2JiZXJXb3JsZChu
b2RlLmNvZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7Ci0gICAgICAgIGZvck5vZGUobm9kZUluZGV4
KS5tYWtlVG9wKCk7CisgICAgICAgIGNsb2JiZXJXb3JsZChub2RlLT5jb2RlT3JpZ2luLCBpbmRl
eEluQmxvY2spOworICAgICAgICBmb3JOb2RlKG5vZGUpLm1ha2VUb3AoKTsKICAgICAgICAgYnJl
YWs7CiAKICAgICBjYXNlIEZvcmNlT1NSRXhpdDoKLSAgICAgICAgbm9kZS5zZXRDYW5FeGl0KHRy
dWUpOworICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOwogICAgICAgICBtX2lzVmFsaWQg
PSBmYWxzZTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKQEAgLTE4MDEsNyArMTgxOSw3
IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICBjYXNlIElu
bGluZVN0YXJ0OgogICAgIGNhc2UgTm9wOgogICAgIGNhc2UgQ291bnRFeGVjdXRpb246Ci0gICAg
ICAgIG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7CisgICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFs
c2UpOwogICAgICAgICBicmVhazsKICAgICAgICAgCiAgICAgY2FzZSBMYXN0Tm9kZVR5cGU6CkBA
IC0xODU0LDE1ICsxODcyLDE0IEBAIGlubGluZSB2b2lkIEFic3RyYWN0U3RhdGU6OmNsb2JiZXJT
dHJ1Y3QKICAgICBtX2RpZENsb2JiZXIgPSB0cnVlOwogfQogCi1pbmxpbmUgYm9vbCBBYnN0cmFj
dFN0YXRlOjptZXJnZVN0YXRlQXRUYWlsKEFic3RyYWN0VmFsdWUmIGRlc3RpbmF0aW9uLCBBYnN0
cmFjdFZhbHVlJiBpblZhcmlhYmxlLCBOb2RlSW5kZXggbm9kZUluZGV4KQoraW5saW5lIGJvb2wg
QWJzdHJhY3RTdGF0ZTo6bWVyZ2VTdGF0ZUF0VGFpbChBYnN0cmFjdFZhbHVlJiBkZXN0aW5hdGlv
biwgQWJzdHJhY3RWYWx1ZSYgaW5WYXJpYWJsZSwgTm9kZSogbm9kZSkKIHsKLSAgICBpZiAobm9k
ZUluZGV4ID09IE5vTm9kZSkKKyAgICBpZiAoIW5vZGUpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICAgICAgCiAgICAgQWJzdHJhY3RWYWx1ZSBzb3VyY2U7CiAgICAgCi0gICAgTm9kZSYgdGFp
bE5vZGUgPSBtX2dyYXBoW25vZGVJbmRleF07Ci0gICAgaWYgKHRhaWxOb2RlLnZhcmlhYmxlQWNj
ZXNzRGF0YSgpLT5pc0NhcHR1cmVkKCkpIHsKKyAgICBpZiAobm9kZS0+dmFyaWFibGVBY2Nlc3NE
YXRhKCktPmlzQ2FwdHVyZWQoKSkgewogICAgICAgICAvLyBJZiBpdCdzIGNhcHR1cmVkIHRoZW4g
d2Uga25vdyB0aGF0IHdoYXRldmVyIHZhbHVlIHdhcyBzdG9yZWQgaW50byB0aGUgdmFyaWFibGUg
bGFzdCBpcyB0aGUKICAgICAgICAgLy8gb25lIHdlIGNhcmUgYWJvdXQuIFRoaXMgaXMgdHJ1ZSBl
dmVuIGlmIHRoZSB2YXJpYWJsZSBhdCB0YWlsIGlzIGRlYWQsIHdoaWNoIG1pZ2h0IGhhcHBlbiBp
ZgogICAgICAgICAvLyB0aGUgbGFzdCB0aGluZyB3ZSBkaWQgdG8gdGhlIHZhcmlhYmxlIHdhcyBh
IEdldExvY2FsIGFuZCB0aGVuIGVuZGVkIHVwIG5vdyB1c2luZyB0aGUKQEAgLTE4NzUsMjYgKzE4
OTIsMjUgQEAgaW5saW5lIGJvb2wgQWJzdHJhY3RTdGF0ZTo6bWVyZ2VTdGF0ZUF0VAogICAgICAg
ICBkYXRhTG9nRigiIGZyb20gbGFzdCBhY2Nlc3MgZHVlIHRvIGNhcHR1cmVkIHZhcmlhYmxlLlxu
Iik7CiAjZW5kaWYKICAgICB9IGVsc2UgewotICAgICAgICBpZiAoIXRhaWxOb2RlLnNob3VsZEdl
bmVyYXRlKCkpIHsKKyAgICAgICAgaWYgKCFub2RlLT5zaG91bGRHZW5lcmF0ZSgpKSB7CiAgICAg
ICAgICAgICAvLyBJZiB0aGUgbm9kZSBhdCB0YWlsIGlzIGEgR2V0TG9jYWwgdGhhdCBpcyBkZWFk
LCB0aGVuIHNraXAgaXQgdG8gZ2V0IHRvIHRoZSBQaGkuCiAgICAgICAgICAgICAvLyBUaGUgUGhp
IG1heSBiZSBsaXZlLgotICAgICAgICAgICAgaWYgKHRhaWxOb2RlLm9wKCkgIT0gR2V0TG9jYWwp
CisgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSAhPSBHZXRMb2NhbCkKICAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIG5vZGVJbmRleCA9IHRh
aWxOb2RlLmNoaWxkMSgpLmluZGV4KCk7Ci0gICAgICAgICAgICBBU1NFUlQobV9ncmFwaFtub2Rl
SW5kZXhdLm9wKCkgPT0gUGhpKTsKLSAgICAgICAgICAgIGlmICghbV9ncmFwaFtub2RlSW5kZXhd
LnNob3VsZEdlbmVyYXRlKCkpCisgICAgICAgICAgICBub2RlID0gbm9kZS0+Y2hpbGQxKCkubm9k
ZSgpOworICAgICAgICAgICAgQVNTRVJUKG5vZGUtPm9wKCkgPT0gUGhpKTsKKyAgICAgICAgICAg
IGlmICghbm9kZS0+c2hvdWxkR2VuZXJhdGUoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW25v
ZGVJbmRleF07Ci0gICAgICAgIEFTU0VSVChub2RlLnNob3VsZEdlbmVyYXRlKCkpOworICAgICAg
ICBBU1NFUlQobm9kZS0+c2hvdWxkR2VuZXJhdGUoKSk7CiAKICNpZiBERkdfRU5BQkxFKERFQlVH
X1BST1BBR0FUSU9OX1ZFUkJPU0UpCi0gICAgICAgIGRhdGFMb2dGKCIgICAgICAgICAgSXQncyBs
aXZlLCBub2RlIEAldS5cbiIsIG5vZGVJbmRleCk7CisgICAgICAgIGRhdGFMb2dGKCIgICAgICAg
ICAgSXQncyBsaXZlLCBub2RlIEAldS5cbiIsIG5vZGUtPmluZGV4KCkpOwogI2VuZGlmCiAgICAg
Ci0gICAgICAgIHN3aXRjaCAobm9kZS5vcCgpKSB7CisgICAgICAgIHN3aXRjaCAobm9kZS0+b3Ao
KSkgewogICAgICAgICBjYXNlIFBoaToKICAgICAgICAgY2FzZSBTZXRBcmd1bWVudDoKICAgICAg
ICAgY2FzZSBGbHVzaDoKQEAgLTE5MDksNyArMTkyNSw3IEBAIGlubGluZSBib29sIEFic3RyYWN0
U3RhdGU6Om1lcmdlU3RhdGVBdFQKICAgICAgICAgICAgIAogICAgICAgICBjYXNlIEdldExvY2Fs
OgogICAgICAgICAgICAgLy8gVGhlIGJsb2NrIHJlZmluZXMgdGhlIHZhbHVlIHdpdGggYWRkaXRp
b25hbCBzcGVjdWxhdGlvbnMuCi0gICAgICAgICAgICBzb3VyY2UgPSBmb3JOb2RlKG5vZGVJbmRl
eCk7CisgICAgICAgICAgICBzb3VyY2UgPSBmb3JOb2RlKG5vZGUpOwogI2lmIERGR19FTkFCTEUo
REVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKICAgICAgICAgICAgIGRhdGFMb2dGKCIgICAgICAg
ICAgUmVmaW5pbmcgdG8gIik7CiAgICAgICAgICAgICBzb3VyY2UuZHVtcChXVEY6OmRhdGFGaWxl
KCkpOwpAQCAtMTkyMCwxMSArMTkzNiwxMSBAQCBpbmxpbmUgYm9vbCBBYnN0cmFjdFN0YXRlOjpt
ZXJnZVN0YXRlQXRUCiAgICAgICAgIGNhc2UgU2V0TG9jYWw6CiAgICAgICAgICAgICAvLyBUaGUg
YmxvY2sgc2V0cyB0aGUgdmFyaWFibGUsIGFuZCBwb3RlbnRpYWxseSByZWZpbmVzIGl0LCBib3Ro
CiAgICAgICAgICAgICAvLyBiZWZvcmUgYW5kIGFmdGVyIHNldHRpbmcgaXQuCi0gICAgICAgICAg
ICBpZiAobm9kZS52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+c2hvdWxkVXNlRG91YmxlRm9ybWF0KCkp
IHsKKyAgICAgICAgICAgIGlmIChub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+c2hvdWxkVXNl
RG91YmxlRm9ybWF0KCkpIHsKICAgICAgICAgICAgICAgICAvLyBGSVhNRTogVGhpcyB1bm5lY2Vz
c2FyaWx5IGxvc2VzIHByZWNpc2lvbi4KICAgICAgICAgICAgICAgICBzb3VyY2Uuc2V0KFNwZWNE
b3VibGUpOwogICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgc291cmNlID0gZm9y
Tm9kZShub2RlLmNoaWxkMSgpKTsKKyAgICAgICAgICAgICAgICBzb3VyY2UgPSBmb3JOb2RlKG5v
ZGUtPmNoaWxkMSgpKTsKICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0Up
CiAgICAgICAgICAgICBkYXRhTG9nRigiICAgICAgICAgIFNldHRpbmcgdG8gIik7CiAgICAgICAg
ICAgICBzb3VyY2UuZHVtcChXVEY6OmRhdGFGaWxlKCkpOwpAQCAtMTk4MiwzNSArMTk5OCwzNCBA
QCBpbmxpbmUgYm9vbCBBYnN0cmFjdFN0YXRlOjptZXJnZShCYXNpY0JsCiAgICAgcmV0dXJuIGNo
YW5nZWQ7CiB9CiAKLWlubGluZSBib29sIEFic3RyYWN0U3RhdGU6Om1lcmdlVG9TdWNjZXNzb3Jz
KAotICAgIEdyYXBoJiBncmFwaCwgQmFzaWNCbG9jayogYmFzaWNCbG9jaykKK2lubGluZSBib29s
IEFic3RyYWN0U3RhdGU6Om1lcmdlVG9TdWNjZXNzb3JzKEdyYXBoJiBncmFwaCwgQmFzaWNCbG9j
ayogYmFzaWNCbG9jaykKIHsKLSAgICBOb2RlJiB0ZXJtaW5hbCA9IGdyYXBoW2Jhc2ljQmxvY2st
Pmxhc3QoKV07CisgICAgTm9kZSogdGVybWluYWwgPSBiYXNpY0Jsb2NrLT5sYXN0KCk7CiAgICAg
Ci0gICAgQVNTRVJUKHRlcm1pbmFsLmlzVGVybWluYWwoKSk7CisgICAgQVNTRVJUKHRlcm1pbmFs
LT5pc1Rlcm1pbmFsKCkpOwogICAgIAotICAgIHN3aXRjaCAodGVybWluYWwub3AoKSkgeworICAg
IHN3aXRjaCAodGVybWluYWwtPm9wKCkpIHsKICAgICBjYXNlIEp1bXA6IHsKICAgICAgICAgQVNT
RVJUKGJhc2ljQmxvY2stPmNmYUJyYW5jaERpcmVjdGlvbiA9PSBJbnZhbGlkQnJhbmNoRGlyZWN0
aW9uKTsKICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCiAgICAgICAg
IGRhdGFMb2dGKCIgICAgICAgIE1lcmdpbmcgdG8gYmxvY2sgIyV1LlxuIiwgdGVybWluYWwudGFr
ZW5CbG9ja0luZGV4KCkpOwogI2VuZGlmCi0gICAgICAgIHJldHVybiBtZXJnZShiYXNpY0Jsb2Nr
LCBncmFwaC5tX2Jsb2Nrc1t0ZXJtaW5hbC50YWtlbkJsb2NrSW5kZXgoKV0uZ2V0KCkpOworICAg
ICAgICByZXR1cm4gbWVyZ2UoYmFzaWNCbG9jaywgZ3JhcGgubV9ibG9ja3NbdGVybWluYWwtPnRh
a2VuQmxvY2tJbmRleCgpXS5nZXQoKSk7CiAgICAgfQogICAgICAgICAKICAgICBjYXNlIEJyYW5j
aDogewogICAgICAgICBBU1NFUlQoYmFzaWNCbG9jay0+Y2ZhQnJhbmNoRGlyZWN0aW9uICE9IElu
dmFsaWRCcmFuY2hEaXJlY3Rpb24pOwogICAgICAgICBib29sIGNoYW5nZWQgPSBmYWxzZTsKICNp
ZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCi0gICAgICAgIGRhdGFMb2dG
KCIgICAgICAgIE1lcmdpbmcgdG8gYmxvY2sgIyV1LlxuIiwgdGVybWluYWwudGFrZW5CbG9ja0lu
ZGV4KCkpOworICAgICAgICBkYXRhTG9nRigiICAgICAgICBNZXJnaW5nIHRvIGJsb2NrICMldS5c
biIsIHRlcm1pbmFsLT50YWtlbkJsb2NrSW5kZXgoKSk7CiAjZW5kaWYKICAgICAgICAgaWYgKGJh
c2ljQmxvY2stPmNmYUJyYW5jaERpcmVjdGlvbiAhPSBUYWtlRmFsc2UpCi0gICAgICAgICAgICBj
aGFuZ2VkIHw9IG1lcmdlKGJhc2ljQmxvY2ssIGdyYXBoLm1fYmxvY2tzW3Rlcm1pbmFsLnRha2Vu
QmxvY2tJbmRleCgpXS5nZXQoKSk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlKGJhc2lj
QmxvY2ssIGdyYXBoLm1fYmxvY2tzW3Rlcm1pbmFsLT50YWtlbkJsb2NrSW5kZXgoKV0uZ2V0KCkp
OwogI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKICAgICAgICAgZGF0
YUxvZ0YoIiAgICAgICAgTWVyZ2luZyB0byBibG9jayAjJXUuXG4iLCB0ZXJtaW5hbC5ub3RUYWtl
bkJsb2NrSW5kZXgoKSk7CiAjZW5kaWYKICAgICAgICAgaWYgKGJhc2ljQmxvY2stPmNmYUJyYW5j
aERpcmVjdGlvbiAhPSBUYWtlVHJ1ZSkKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2UoYmFz
aWNCbG9jaywgZ3JhcGgubV9ibG9ja3NbdGVybWluYWwubm90VGFrZW5CbG9ja0luZGV4KCldLmdl
dCgpKTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2UoYmFzaWNCbG9jaywgZ3JhcGgubV9i
bG9ja3NbdGVybWluYWwtPm5vdFRha2VuQmxvY2tJbmRleCgpXS5nZXQoKSk7CiAgICAgICAgIHJl
dHVybiBjaGFuZ2VkOwogICAgIH0KICAgICAgICAgCkBAIC0yMDI2LDEyICsyMDQxLDEyIEBAIGlu
bGluZSBib29sIEFic3RyYWN0U3RhdGU6Om1lcmdlVG9TdWNjZXMKICAgICB9CiB9CiAKLWlubGlu
ZSBib29sIEFic3RyYWN0U3RhdGU6Om1lcmdlVmFyaWFibGVCZXR3ZWVuQmxvY2tzKEFic3RyYWN0
VmFsdWUmIGRlc3RpbmF0aW9uLCBBYnN0cmFjdFZhbHVlJiBzb3VyY2UsIE5vZGVJbmRleCBkZXN0
aW5hdGlvbk5vZGVJbmRleCwgTm9kZUluZGV4IHNvdXJjZU5vZGVJbmRleCkKK2lubGluZSBib29s
IEFic3RyYWN0U3RhdGU6Om1lcmdlVmFyaWFibGVCZXR3ZWVuQmxvY2tzKEFic3RyYWN0VmFsdWUm
IGRlc3RpbmF0aW9uLCBBYnN0cmFjdFZhbHVlJiBzb3VyY2UsIE5vZGUqIGRlc3RpbmF0aW9uTm9k
ZSwgTm9kZSogc291cmNlTm9kZSkKIHsKLSAgICBpZiAoZGVzdGluYXRpb25Ob2RlSW5kZXggPT0g
Tm9Ob2RlKQorICAgIGlmICghZGVzdGluYXRpb25Ob2RlKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgCi0gICAgQVNTRVJUX1VOVVNFRChzb3VyY2VOb2RlSW5kZXgsIHNvdXJjZU5vZGVJbmRl
eCAhPSBOb05vZGUpOworICAgIEFTU0VSVF9VTlVTRUQoc291cmNlTm9kZSwgc291cmNlTm9kZSk7
CiAgICAgCiAgICAgLy8gRklYTUU6IFdlIGNvdWxkIGRvIHNvbWUgc3BhcnNlIGNvbmRpdGlvbmFs
IHByb3BhZ2F0aW9uIGhlcmUhCiAgICAgCkBAIC0yMDQyLDE1ICsyMDU3LDE1IEBAIHZvaWQgQWJz
dHJhY3RTdGF0ZTo6ZHVtcChQcmludFN0cmVhbSYgb3UKIHsKICAgICBib29sIGZpcnN0ID0gdHJ1
ZTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fYmxvY2stPnNpemUoKTsgKytpKSB7Ci0g
ICAgICAgIE5vZGVJbmRleCBpbmRleCA9IG1fYmxvY2stPmF0KGkpOwotICAgICAgICBBYnN0cmFj
dFZhbHVlJiB2YWx1ZSA9IGZvck5vZGUoaW5kZXgpOworICAgICAgICBOb2RlKiBub2RlID0gbV9i
bG9jay0+YXQoaSk7CisgICAgICAgIEFic3RyYWN0VmFsdWUmIHZhbHVlID0gZm9yTm9kZShub2Rl
KTsKICAgICAgICAgaWYgKHZhbHVlLmlzQ2xlYXIoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwog
ICAgICAgICBpZiAoZmlyc3QpCiAgICAgICAgICAgICBmaXJzdCA9IGZhbHNlOwogICAgICAgICBl
bHNlCiAgICAgICAgICAgICBvdXQucHJpbnRmKCIgIik7Ci0gICAgICAgIG91dC5wcmludGYoIkAl
bHU6Iiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4oaW5kZXgpKTsKKyAgICAgICAgb3V0LnBy
aW50ZigiQCVsdToiLCBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nPihub2RlLT5pbmRleCgpKSk7
CiAgICAgICAgIHZhbHVlLmR1bXAob3V0KTsKICAgICB9CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuaAkocmV2aXNpb24gMTQxMDUyKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEyIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMiwg
MjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTcyLDggKzcyLDggQEAgc3RydWN0IEJhc2ljQmxvY2s7CiAvLyBBYnN0
cmFjdFN0YXRlIHN0YXRlKGNvZGVCbG9jaywgZ3JhcGgpOwogLy8gc3RhdGUuYmVnaW5CYXNpY0Js
b2NrKGJhc2ljQmxvY2spOwogLy8gYm9vbCBlbmRSZWFjaGVkID0gdHJ1ZTsKLS8vIGZvciAoTm9k
ZUluZGV4IGlkeCA9IGJhc2ljQmxvY2suYmVnaW47IGlkeCA8IGJhc2ljQmxvY2suZW5kOyArK2lk
eCkgewotLy8gICAgIGlmICghc3RhdGUuZXhlY3V0ZShpZHgpKQorLy8gZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IGJhc2ljQmxvY2stPnNpemUoKTsgKytpKSB7CisvLyAgICAgaWYgKCFzdGF0ZS5l
eGVjdXRlKGkpKQogLy8gICAgICAgICBicmVhazsKIC8vIH0KIC8vIGJvb2wgcmVzdWx0ID0gc3Rh
dGUuZW5kQmFzaWNCbG9jayg8ZWl0aGVyIE1lcmdlIG9yIERvbnRNZXJnZT4pOwpAQCAtOTcsMTQg
Kzk3LDE0IEBAIHB1YmxpYzoKICAgICAKICAgICB+QWJzdHJhY3RTdGF0ZSgpOwogICAgIAotICAg
IEFic3RyYWN0VmFsdWUmIGZvck5vZGUoTm9kZUluZGV4IG5vZGVJbmRleCkKKyAgICBBYnN0cmFj
dFZhbHVlJiBmb3JOb2RlKE5vZGUqIG5vZGUpCiAgICAgewotICAgICAgICByZXR1cm4gbV9ncmFw
aFtub2RlSW5kZXhdLnZhbHVlOworICAgICAgICByZXR1cm4gbm9kZS0+dmFsdWU7CiAgICAgfQog
ICAgIAotICAgIEFic3RyYWN0VmFsdWUmIGZvck5vZGUoRWRnZSBub2RlVXNlKQorICAgIEFic3Ry
YWN0VmFsdWUmIGZvck5vZGUoRWRnZSBlZGdlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGZvck5v
ZGUobm9kZVVzZS5pbmRleCgpKTsKKyAgICAgICAgcmV0dXJuIGZvck5vZGUoZWRnZS5ub2RlKCkp
OwogICAgIH0KICAgICAKICAgICBPcGVyYW5kczxBYnN0cmFjdFZhbHVlPiYgdmFyaWFibGVzKCkK
QEAgLTE4NywzNiArMTg3LDM2IEBAIHByaXZhdGU6CiAgICAgdm9pZCBjbG9iYmVyQ2FwdHVyZWRW
YXJzKGNvbnN0IENvZGVPcmlnaW4mKTsKICAgICB2b2lkIGNsb2JiZXJTdHJ1Y3R1cmVzKHVuc2ln
bmVkIGluZGV4SW5CbG9jayk7CiAgICAgCi0gICAgYm9vbCBtZXJnZVN0YXRlQXRUYWlsKEFic3Ry
YWN0VmFsdWUmIGRlc3RpbmF0aW9uLCBBYnN0cmFjdFZhbHVlJiBpblZhcmlhYmxlLCBOb2RlSW5k
ZXgpOworICAgIGJvb2wgbWVyZ2VTdGF0ZUF0VGFpbChBYnN0cmFjdFZhbHVlJiBkZXN0aW5hdGlv
biwgQWJzdHJhY3RWYWx1ZSYgaW5WYXJpYWJsZSwgTm9kZSopOwogICAgIAotICAgIHN0YXRpYyBi
b29sIG1lcmdlVmFyaWFibGVCZXR3ZWVuQmxvY2tzKEFic3RyYWN0VmFsdWUmIGRlc3RpbmF0aW9u
LCBBYnN0cmFjdFZhbHVlJiBzb3VyY2UsIE5vZGVJbmRleCBkZXN0aW5hdGlvbk5vZGVJbmRleCwg
Tm9kZUluZGV4IHNvdXJjZU5vZGVJbmRleCk7CisgICAgc3RhdGljIGJvb2wgbWVyZ2VWYXJpYWJs
ZUJldHdlZW5CbG9ja3MoQWJzdHJhY3RWYWx1ZSYgZGVzdGluYXRpb24sIEFic3RyYWN0VmFsdWUm
IHNvdXJjZSwgTm9kZSogZGVzdGluYXRpb25Ob2RlLCBOb2RlKiBzb3VyY2VOb2RlKTsKICAgICAK
LSAgICB2b2lkIHNwZWN1bGF0ZUludDMyVW5hcnkoTm9kZSYgbm9kZSwgYm9vbCBmb3JjZUNhbkV4
aXQgPSBmYWxzZSkKKyAgICB2b2lkIHNwZWN1bGF0ZUludDMyVW5hcnkoTm9kZSogbm9kZSwgYm9v
bCBmb3JjZUNhbkV4aXQgPSBmYWxzZSkKICAgICB7Ci0gICAgICAgIEFic3RyYWN0VmFsdWUmIGNo
aWxkVmFsdWUgPSBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpOwotICAgICAgICBub2RlLnNldENhbkV4
aXQoZm9yY2VDYW5FeGl0IHx8ICFpc0ludDMyU3BlY3VsYXRpb24oY2hpbGRWYWx1ZS5tX3R5cGUp
KTsKKyAgICAgICAgQWJzdHJhY3RWYWx1ZSYgY2hpbGRWYWx1ZSA9IGZvck5vZGUobm9kZS0+Y2hp
bGQxKCkpOworICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZvcmNlQ2FuRXhpdCB8fCAhaXNJbnQz
MlNwZWN1bGF0aW9uKGNoaWxkVmFsdWUubV90eXBlKSk7CiAgICAgICAgIGNoaWxkVmFsdWUuZmls
dGVyKFNwZWNJbnQzMik7CiAgICAgfQogICAgIAotICAgIHZvaWQgc3BlY3VsYXRlTnVtYmVyVW5h
cnkoTm9kZSYgbm9kZSkKKyAgICB2b2lkIHNwZWN1bGF0ZU51bWJlclVuYXJ5KE5vZGUqIG5vZGUp
CiAgICAgewotICAgICAgICBBYnN0cmFjdFZhbHVlJiBjaGlsZFZhbHVlID0gZm9yTm9kZShub2Rl
LmNoaWxkMSgpKTsKLSAgICAgICAgbm9kZS5zZXRDYW5FeGl0KCFpc051bWJlclNwZWN1bGF0aW9u
KGNoaWxkVmFsdWUubV90eXBlKSk7CisgICAgICAgIEFic3RyYWN0VmFsdWUmIGNoaWxkVmFsdWUg
PSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCghaXNO
dW1iZXJTcGVjdWxhdGlvbihjaGlsZFZhbHVlLm1fdHlwZSkpOwogICAgICAgICBjaGlsZFZhbHVl
LmZpbHRlcihTcGVjTnVtYmVyKTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBzcGVjdWxhdGVCb29s
ZWFuVW5hcnkoTm9kZSYgbm9kZSkKKyAgICB2b2lkIHNwZWN1bGF0ZUJvb2xlYW5VbmFyeShOb2Rl
KiBub2RlKQogICAgIHsKLSAgICAgICAgQWJzdHJhY3RWYWx1ZSYgY2hpbGRWYWx1ZSA9IGZvck5v
ZGUobm9kZS5jaGlsZDEoKSk7Ci0gICAgICAgIG5vZGUuc2V0Q2FuRXhpdCghaXNCb29sZWFuU3Bl
Y3VsYXRpb24oY2hpbGRWYWx1ZS5tX3R5cGUpKTsKKyAgICAgICAgQWJzdHJhY3RWYWx1ZSYgY2hp
bGRWYWx1ZSA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBub2RlLT5zZXRDYW5F
eGl0KCFpc0Jvb2xlYW5TcGVjdWxhdGlvbihjaGlsZFZhbHVlLm1fdHlwZSkpOwogICAgICAgICBj
aGlsZFZhbHVlLmZpbHRlcihTcGVjQm9vbGVhbik7CiAgICAgfQogICAgIAotICAgIHZvaWQgc3Bl
Y3VsYXRlSW50MzJCaW5hcnkoTm9kZSYgbm9kZSwgYm9vbCBmb3JjZUNhbkV4aXQgPSBmYWxzZSkK
KyAgICB2b2lkIHNwZWN1bGF0ZUludDMyQmluYXJ5KE5vZGUqIG5vZGUsIGJvb2wgZm9yY2VDYW5F
eGl0ID0gZmFsc2UpCiAgICAgewotICAgICAgICBBYnN0cmFjdFZhbHVlJiBjaGlsZFZhbHVlMSA9
IGZvck5vZGUobm9kZS5jaGlsZDEoKSk7Ci0gICAgICAgIEFic3RyYWN0VmFsdWUmIGNoaWxkVmFs
dWUyID0gZm9yTm9kZShub2RlLmNoaWxkMigpKTsKLSAgICAgICAgbm9kZS5zZXRDYW5FeGl0KAor
ICAgICAgICBBYnN0cmFjdFZhbHVlJiBjaGlsZFZhbHVlMSA9IGZvck5vZGUobm9kZS0+Y2hpbGQx
KCkpOworICAgICAgICBBYnN0cmFjdFZhbHVlJiBjaGlsZFZhbHVlMiA9IGZvck5vZGUobm9kZS0+
Y2hpbGQyKCkpOworICAgICAgICBub2RlLT5zZXRDYW5FeGl0KAogICAgICAgICAgICAgZm9yY2VD
YW5FeGl0CiAgICAgICAgICAgICB8fCAhaXNJbnQzMlNwZWN1bGF0aW9uKGNoaWxkVmFsdWUxLm1f
dHlwZSkKICAgICAgICAgICAgIHx8ICFpc0ludDMyU3BlY3VsYXRpb24oY2hpbGRWYWx1ZTIubV90
eXBlKSk7CkBAIC0yMjQsMTEgKzIyNCwxMSBAQCBwcml2YXRlOgogICAgICAgICBjaGlsZFZhbHVl
Mi5maWx0ZXIoU3BlY0ludDMyKTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBzcGVjdWxhdGVOdW1i
ZXJCaW5hcnkoTm9kZSYgbm9kZSkKKyAgICB2b2lkIHNwZWN1bGF0ZU51bWJlckJpbmFyeShOb2Rl
KiBub2RlKQogICAgIHsKLSAgICAgICAgQWJzdHJhY3RWYWx1ZSYgY2hpbGRWYWx1ZTEgPSBmb3JO
b2RlKG5vZGUuY2hpbGQxKCkpOwotICAgICAgICBBYnN0cmFjdFZhbHVlJiBjaGlsZFZhbHVlMiA9
IGZvck5vZGUobm9kZS5jaGlsZDIoKSk7Ci0gICAgICAgIG5vZGUuc2V0Q2FuRXhpdCgKKyAgICAg
ICAgQWJzdHJhY3RWYWx1ZSYgY2hpbGRWYWx1ZTEgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKTsK
KyAgICAgICAgQWJzdHJhY3RWYWx1ZSYgY2hpbGRWYWx1ZTIgPSBmb3JOb2RlKG5vZGUtPmNoaWxk
MigpKTsKKyAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCgKICAgICAgICAgICAgICFpc051bWJlclNw
ZWN1bGF0aW9uKGNoaWxkVmFsdWUxLm1fdHlwZSkKICAgICAgICAgICAgIHx8ICFpc051bWJlclNw
ZWN1bGF0aW9uKGNoaWxkVmFsdWUyLm1fdHlwZSkpOwogICAgICAgICBjaGlsZFZhbHVlMS5maWx0
ZXIoU3BlY051bWJlcik7CkBAIC0yNDAsOSArMjQwLDkgQEAgcHJpdmF0ZToKICAgICAgICAgRGVm
aW5pdGVseUZhbHNlLAogICAgICAgICBEZWZpbml0ZWx5VHJ1ZQogICAgIH07Ci0gICAgQm9vbGVh
blJlc3VsdCBib29sZWFuUmVzdWx0KE5vZGUmLCBBYnN0cmFjdFZhbHVlJik7CisgICAgQm9vbGVh
blJlc3VsdCBib29sZWFuUmVzdWx0KE5vZGUqLCBBYnN0cmFjdFZhbHVlJik7CiAgICAgCi0gICAg
Ym9vbCB0cnlTZXRDb25zdGFudChOb2RlSW5kZXggbm9kZUluZGV4LCBKU1ZhbHVlIHZhbHVlKQor
ICAgIGJvb2wgdHJ5U2V0Q29uc3RhbnQoTm9kZSogbm9kZSwgSlNWYWx1ZSB2YWx1ZSkKICAgICB7
CiAgICAgICAgIC8vIE1ha2Ugc3VyZSB3ZSBkb24ndCBjb25zdGFudCBmb2xkIHNvbWV0aGluZyB0
aGF0IHdpbGwgcHJvZHVjZSB2YWx1ZXMgdGhhdCBjb250cmF2ZW5lCiAgICAgICAgIC8vIHByZWRp
Y3Rpb25zLiBJZiB0aGF0IGhhcHBlbnMgdGhlbiB3ZSBrbm93IHRoYXQgdGhlIGNvZGUgd2lsbCBP
U1IgZXhpdCwgZm9yY2luZwpAQCAtMjUxLDExICsyNTEsMTEgQEAgcHJpdmF0ZToKICAgICAgICAg
Ly8gbG90IG9mIHN1YnRsZSBjb2RlIHRoYXQgYXNzdW1lcyB0aGF0CiAgICAgICAgIC8vIHNwZWN1
bGF0aW9uRnJvbVZhbHVlKGpzQ29uc3RhbnQpID09IGpzQ29uc3RhbnQucHJlZGljdGlvbigpLiAi
SGFyZGVuaW5nIiB0aGF0IGNvZGUKICAgICAgICAgLy8gaXMgcHJvYmFibHkgbGVzcyBzYW5lIHRo
YW4ganVzdCBwdWxsaW5nIGJhY2sgb24gY29uc3RhbnQgZm9sZGluZy4KLSAgICAgICAgU3BlY3Vs
YXRlZFR5cGUgb2xkVHlwZSA9IG1fZ3JhcGhbbm9kZUluZGV4XS5wcmVkaWN0aW9uKCk7CisgICAg
ICAgIFNwZWN1bGF0ZWRUeXBlIG9sZFR5cGUgPSBub2RlLT5wcmVkaWN0aW9uKCk7CiAgICAgICAg
IGlmIChtZXJnZVNwZWN1bGF0aW9ucyhzcGVjdWxhdGlvbkZyb21WYWx1ZSh2YWx1ZSksIG9sZFR5
cGUpICE9IG9sZFR5cGUpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIAotICAg
ICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KHZhbHVlKTsKKyAgICAgICAgZm9yTm9kZShub2Rl
KS5zZXQodmFsdWUpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0VmFsdWUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0VmFsdWUuaAkocmV2aXNpb24g
MTQxMDUyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFZhbHVlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEx
LCAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMSwgMjAxMiwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQxOCw2ICs0MTgsOCBAQCBzdHJ1Y3QgQWJzdHJh
Y3RWYWx1ZSB7CiAgICAgLy8gICAgY2hhbmdlIHgncyBzdHJ1Y3R1cmUgYW5kIHdlIGhhdmUgbm8g
d2F5IG9mIHByb3Zpbmcgb3RoZXJ3aXNlLCBidXQKICAgICAvLyAgICB4J3MgbV9mdXR1cmVQb3Nz
aWJsZVN0cnVjdHVyZSB3aWxsIGJlIHdoYXRldmVyIHN0cnVjdHVyZSB3ZSBoYWQgY2hlY2tlZAog
ICAgIC8vICAgIHdoZW4gZ2V0dGluZyBwcm9wZXJ0eSAnZicuCisgICAgCisgICAgLy8gTkIuIEFs
bCBmaWVsZHMgaW4gdGhpcyBzdHJ1Y3QgbXVzdCBoYXZlIHRyaXZpYWwgZGVzdHJ1Y3RvcnMuCiAK
ICAgICAvLyBUaGlzIGlzIGEgcHJvdmVuIGNvbnN0cmFpbnQgb24gdGhlIHN0cnVjdHVyZXMgdGhh
dCB0aGlzIHZhbHVlIGNhbiBoYXZlIHJpZ2h0CiAgICAgLy8gbm93LiBUaGUgc3RydWN0dXJlIG9m
IHRoZSBjdXJyZW50IHZhbHVlIG11c3QgYmVsb25nIHRvIHRoaXMgc2V0LiBUaGUgc2V0IG1heQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBZGphY2VuY3lMaXN0LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBZGphY2VuY3lMaXN0LmgJKHJl
dmlzaW9uIDE0MTA1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWRqYWNlbmN5
TGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTEsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC01Nyw3ICs1Nyw3IEBAIHB1YmxpYzoKICAgICAgICAgfQog
ICAgIH0KICAgICAKLSAgICBBZGphY2VuY3lMaXN0KEtpbmQga2luZCwgTm9kZUluZGV4IGNoaWxk
MSwgTm9kZUluZGV4IGNoaWxkMiwgTm9kZUluZGV4IGNoaWxkMykKKyAgICBBZGphY2VuY3lMaXN0
KEtpbmQga2luZCwgTm9kZSogY2hpbGQxLCBOb2RlKiBjaGlsZDIsIE5vZGUqIGNoaWxkMykKICNp
ZiAhQVNTRVJUX0RJU0FCTEVECiAgICAgICAgIDogbV9raW5kKEZpeGVkKQogI2VuZGlmCkBAIC0x
MTgsNyArMTE4LDcgQEAgcHVibGljOgogICAgICAgICBjaGlsZCgyKSA9IGNoaWxkMzsKICAgICB9
CiAgICAgCi0gICAgdm9pZCBpbml0aWFsaXplKE5vZGVJbmRleCBjaGlsZDEgPSBOb05vZGUsIE5v
ZGVJbmRleCBjaGlsZDIgPSBOb05vZGUsIE5vZGVJbmRleCBjaGlsZDMgPSBOb05vZGUpCisgICAg
dm9pZCBpbml0aWFsaXplKE5vZGUqIGNoaWxkMSA9IDAsIE5vZGUqIGNoaWxkMiA9IDAsIE5vZGUq
IGNoaWxkMyA9IDApCiAgICAgewogICAgICAgICBpbml0aWFsaXplKEVkZ2UoY2hpbGQxKSwgRWRn
ZShjaGlsZDIpLCBFZGdlKGNoaWxkMykpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQWxsb2NhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdBbGxvY2F0b3IuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQWxsb2NhdG9yLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjM3IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZH
QWxsb2NhdG9yX2gKKyNkZWZpbmUgREZHQWxsb2NhdG9yX2gKKworI2luY2x1ZGUgPHd0Zi9QbGF0
Zm9ybS5oPgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlIDx3dGYvUGFnZUFsbG9j
YXRpb25BbGlnbmVkLmg+CisjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgorCituYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKKy8vIEN1c3RvbSBwb29sIGFsbG9jYXRvciBmb3Ig
ZXhhY3RseSBvbmUgdHlwZSAodHlwZSBUKS4gSXQgaGFzIGZhc3QgKE8oMSksIG9ubHkgYSBmZXcK
Ky8vIGluc3RydWN0aW9ucykgYWxsb2NhdG9yLCBhbmQgYSBzaW1pbGFybHkgZmFzdCBmcmVlKCku
IFJlY3ljbGluZyB3b3JrcyBpZiBlaXRoZXIgb2YKKy8vIHRoZSBmb2xsb3dpbmcgaXMgdHJ1ZToK
Ky8vIC0gVCBoYXMgYSB0cml2aWFsIGRlc3RydWN0b3IuIEluIHRoYXQgY2FzZSB5b3UgZG9uJ3Qg
aGF2ZSB0byBldmVyIGNhbGwgZnJlZSgpIG9uCisvLyAgIGFueXRoaW5nLiBZb3UgY2FuIGp1c3Qg
Y2FsbCBmcmVlQWxsKCkgaW5zdGVhZC4KKy8vIC0gWW91IGNhbGwgZnJlZSgpIG9uIGFsbCBUJ3Mg
dGhhdCB5b3UgYWxsb2NhdGVkLCBhbmQgbmV2ZXIgdXNlIGZyZWVBbGwoKS4KKwordGVtcGxhdGU8
dHlwZW5hbWUgVD4KK2NsYXNzIEFsbG9jYXRvciB7CitwdWJsaWM6CisgICAgQWxsb2NhdG9yKCk7
CisgICAgfkFsbG9jYXRvcigpOworICAgIAorICAgIHZvaWQqIGFsbG9jYXRlKCk7IC8vIFVzZSBw
bGFjZW1lbnQgbmV3IHRvIGFsbG9jYXRlLCBhbmQgYXZvaWQgdXNpbmcgdGhpcyBtZXRob2QuCisg
ICAgdm9pZCBmcmVlKFQqKTsgLy8gQ2FsbCB0aGlzIG1ldGhvZCB0byBkZWxldGU7IG5ldmVyIHVz
ZSAnZGVsZXRlJyBkaXJlY3RseS4KKyAgICAKKyAgICB2b2lkIGZyZWVBbGwoKTsgLy8gT25seSBj
YWxsIHRoaXMgaWYgVCBoYXMgYSB0cml2aWFsIGRlc3RydWN0b3IuCisgICAgdm9pZCByZXNldCgp
OyAvLyBMaWtlIGZyZWVBbGwoKSwgYnV0IGFsc28gcmV0dXJucyBhbGwgbWVtb3J5IHRvIHRoZSBP
Uy4KKyAgICAKKyAgICB1bnNpZ25lZCBpbmRleE9mKGNvbnN0IFQqKTsKKyAgICAKKyAgICBzdGF0
aWMgQWxsb2NhdG9yKiBhbGxvY2F0b3JPZihjb25zdCBUKik7CisgICAgCitwcml2YXRlOgorICAg
IHZvaWQqIGJ1bXBBbGxvY2F0ZSgpOworICAgIHZvaWQqIGZyZWVMaXN0QWxsb2NhdGUoKTsKKyAg
ICB2b2lkKiBhbGxvY2F0ZVNsb3coKTsKKworICAgIHN0cnVjdCBSZWdpb24geworICAgICAgICBz
dGF0aWMgc2l6ZV90IHNpemUoKSB7IHJldHVybiA2NCAqIEtCOyB9CisgICAgICAgIHN0YXRpYyBz
aXplX3QgaGVhZGVyU2l6ZSgpIHsgcmV0dXJuIHN0ZDo6bWF4KHNpemVvZihSZWdpb24pLCBzaXpl
b2YoVCkpOyB9CisgICAgICAgIHN0YXRpYyB1bnNpZ25lZCBudW1iZXJPZlRoaW5nc1BlclJlZ2lv
bigpIHsgcmV0dXJuIChzaXplKCkgLSBoZWFkZXJTaXplKCkpIC8gc2l6ZW9mKFQpOyB9CisgICAg
ICAgIFQqIGRhdGEoKSB7IHJldHVybiBiaXR3aXNlX2Nhc3Q8VCo+KGJpdHdpc2VfY2FzdDxjaGFy
Kj4odGhpcykgKyBoZWFkZXJTaXplKCkpOyB9CisgICAgICAgIGJvb2wgaXNJblRoaXNSZWdpb24o
Y29uc3QgVCogcG9pbnRlcikgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHBvaW50ZXIg
LSBkYXRhKCkpIDwgbnVtYmVyT2ZUaGluZ3NQZXJSZWdpb24oKTsgfQorICAgICAgICBzdGF0aWMg
UmVnaW9uKiByZWdpb25Gb3IoY29uc3QgVCogcG9pbnRlcikgeyByZXR1cm4gYml0d2lzZV9jYXN0
PFJlZ2lvbio+KGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KHBvaW50ZXIpICYgfihzaXplKCkgLSAx
KSk7IH0KKyAgICAgICAgCisgICAgICAgIFBhZ2VBbGxvY2F0aW9uQWxpZ25lZCBtX2FsbG9jYXRp
b247CisgICAgICAgIEFsbG9jYXRvciogbV9hbGxvY2F0b3I7CisgICAgICAgIFJlZ2lvbiogbV9u
ZXh0OworICAgIH07CisgICAgCisgICAgdm9pZCBmcmVlUmVnaW9uc1N0YXJ0aW5nQXQoQWxsb2Nh
dG9yOjpSZWdpb24qKTsKKyAgICB2b2lkIHN0YXJ0QnVtcGluZ0luKEFsbG9jYXRvcjo6UmVnaW9u
Kik7CisgICAgCisgICAgUmVnaW9uKiBtX3JlZ2lvbkhlYWQ7CisgICAgdm9pZCoqIG1fZnJlZUxp
c3RIZWFkOworICAgIFQqIG1fYnVtcEVuZDsKKyAgICB1bnNpZ25lZCBtX2J1bXBSZW1haW5pbmc7
Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgoraW5saW5lIEFsbG9jYXRvcjxUPjo6QWxsb2Nh
dG9yKCkKKyAgICA6IG1fcmVnaW9uSGVhZCgwKQorICAgICwgbV9mcmVlTGlzdEhlYWQoMCkKKyAg
ICAsIG1fYnVtcFJlbWFpbmluZygwKQoreworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgoraW5s
aW5lIEFsbG9jYXRvcjxUPjo6fkFsbG9jYXRvcigpCit7CisgICAgcmVzZXQoKTsKK30KKwordGVt
cGxhdGU8dHlwZW5hbWUgVD4KK0FMV0FZU19JTkxJTkUgdm9pZCogQWxsb2NhdG9yPFQ+OjphbGxv
Y2F0ZSgpCit7CisgICAgdm9pZCogcmVzdWx0ID0gYnVtcEFsbG9jYXRlKCk7CisgICAgaWYgKExJ
S0VMWSghIXJlc3VsdCkpCisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgcmV0dXJuIGZyZWVM
aXN0QWxsb2NhdGUoKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK3ZvaWQgQWxsb2NhdG9y
PFQ+OjpmcmVlKFQqIG9iamVjdCkKK3sKKyAgICBvYmplY3QtPn5UKCk7CisgICAgCisgICAgdm9p
ZCoqIGNlbGwgPSBiaXR3aXNlX2Nhc3Q8dm9pZCoqPihvYmplY3QpOworICAgICpjZWxsID0gbV9m
cmVlTGlzdEhlYWQ7CisgICAgbV9mcmVlTGlzdEhlYWQgPSBjZWxsOworfQorCit0ZW1wbGF0ZTx0
eXBlbmFtZSBUPgordm9pZCBBbGxvY2F0b3I8VD46OmZyZWVBbGwoKQoreworICAgIGlmICghbV9y
ZWdpb25IZWFkKSB7CisgICAgICAgIEFTU0VSVCghbV9idW1wUmVtYWluaW5nKTsKKyAgICAgICAg
QVNTRVJUKCFtX2ZyZWVMaXN0SGVhZCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisg
ICAgLy8gU2luY2UgdGhlIGNhbGxlciBpcyBvcHRpbmcgb3V0IG9mIGNhbGxpbmcgdGhlIGRlc3Ry
dWN0b3IgZm9yIGFueSBhbGxvY2F0ZWQgdGhpbmcsCisgICAgLy8gd2UgaGF2ZSB0d28gY2hvaWNl
cywgcGx1cyBhIGNvbnRpbnV1bSBiZXR3ZWVuOiB3ZSBjYW4gZWl0aGVyIGp1c3QgZGVsZXRlIGFs
bCByZWdpb25zCisgICAgLy8gKGkuZS4gY2FsbCByZXNldCgpKSwgb3Igd2UgY2FuIG1ha2UgYWxs
IHJlZ2lvbnMgYXZhaWxhYmxlIGZvciByZXVzZS4gV2UgZG8gc29tZXRoaW5nCisgICAgLy8gdGhh
dCBvcHRpbWl6ZXMgZm9yIChhKSBzcGVlZCBvZiBmcmVlQWxsKCksIChiKSB0aGUgYXNzdW1wdGlv
biB0aGF0IGlmIHRoZSB1c2VyIGNhbGxzCisgICAgLy8gZnJlZUFsbCgpIHRoZW4gdGhleSB3aWxs
IHByb2JhYmx5IGJlIGNhbGxpbmcgYWxsb2NhdGUoKSBpbiB0aGUgbmVhciBmdXR1cmUuIE5hbWVs
eSwKKyAgICAvLyB3ZSBmcmVlIGFsbCBidXQgb25lIHJlZ2lvbiwgYW5kIG1ha2UgdGhlIHJlbWFp
bmluZyByZWdpb24gYSBidW1wIGFsbG9jYXRpb24gcmVnaW9uLgorICAgIAorICAgIGZyZWVSZWdp
b25zU3RhcnRpbmdBdChtX3JlZ2lvbkhlYWQtPm1fbmV4dCk7CisgICAgCisgICAgbV9yZWdpb25I
ZWFkLT5tX25leHQgPSAwOworICAgIG1fZnJlZUxpc3RIZWFkID0gMDsKKyAgICBzdGFydEJ1bXBp
bmdJbihtX3JlZ2lvbkhlYWQpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgordm9pZCBBbGxv
Y2F0b3I8VD46OnJlc2V0KCkKK3sKKyAgICBmcmVlUmVnaW9uc1N0YXJ0aW5nQXQobV9yZWdpb25I
ZWFkKTsKKyAgICAKKyAgICBtX3JlZ2lvbkhlYWQgPSAwOworICAgIG1fZnJlZUxpc3RIZWFkID0g
MDsKKyAgICBtX2J1bXBSZW1haW5pbmcgPSAwOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgor
dW5zaWduZWQgQWxsb2NhdG9yPFQ+OjppbmRleE9mKGNvbnN0IFQqIG9iamVjdCkKK3sKKyAgICB1
bnNpZ25lZCBiYXNlSW5kZXggPSAwOworICAgIGZvciAoUmVnaW9uKiByZWdpb24gPSBtX3JlZ2lv
bkhlYWQ7IHJlZ2lvbjsgcmVnaW9uID0gcmVnaW9uLT5tX25leHQpIHsKKyAgICAgICAgaWYgKHJl
Z2lvbi0+aXNJblRoaXNSZWdpb24ob2JqZWN0KSkKKyAgICAgICAgICAgIHJldHVybiBiYXNlSW5k
ZXggKyAob2JqZWN0IC0gcmVnaW9uLT5kYXRhKCkpOworICAgICAgICBiYXNlSW5kZXggKz0gUmVn
aW9uOjpudW1iZXJPZlRoaW5nc1BlclJlZ2lvbigpOworICAgIH0KKyAgICBDUkFTSCgpOworICAg
IHJldHVybiAwOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorQWxsb2NhdG9yPFQ+KiBBbGxv
Y2F0b3I8VD46OmFsbG9jYXRvck9mKGNvbnN0IFQqIG9iamVjdCkKK3sKKyAgICByZXR1cm4gUmVn
aW9uOjpyZWdpb25Gb3Iob2JqZWN0KS0+bV9hbGxvY2F0b3I7Cit9CisKK3RlbXBsYXRlPHR5cGVu
YW1lIFQ+CitBTFdBWVNfSU5MSU5FIHZvaWQqIEFsbG9jYXRvcjxUPjo6YnVtcEFsbG9jYXRlKCkK
K3sKKyAgICBpZiAodW5zaWduZWQgcmVtYWluaW5nID0gbV9idW1wUmVtYWluaW5nKSB7CisgICAg
ICAgIHJlbWFpbmluZy0tOworICAgICAgICBtX2J1bXBSZW1haW5pbmcgPSByZW1haW5pbmc7Cisg
ICAgICAgIHJldHVybiBtX2J1bXBFbmQgLSAocmVtYWluaW5nICsgMSk7CisgICAgfQorICAgIHJl
dHVybiAwOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgordm9pZCogQWxsb2NhdG9yPFQ+Ojpm
cmVlTGlzdEFsbG9jYXRlKCkKK3sKKyAgICB2b2lkKiogcmVzdWx0ID0gbV9mcmVlTGlzdEhlYWQ7
CisgICAgaWYgKFVOTElLRUxZKCFyZXN1bHQpKQorICAgICAgICByZXR1cm4gYWxsb2NhdGVTbG93
KCk7CisgICAgbV9mcmVlTGlzdEhlYWQgPSBiaXR3aXNlX2Nhc3Q8dm9pZCoqPigqcmVzdWx0KTsK
KyAgICByZXR1cm4gcmVzdWx0OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgordm9pZCogQWxs
b2NhdG9yPFQ+OjphbGxvY2F0ZVNsb3coKQoreworICAgIEFTU0VSVCghbV9mcmVlTGlzdEhlYWQp
OworICAgIEFTU0VSVCghbV9idW1wUmVtYWluaW5nKTsKKyAgICAKKyAgICBQYWdlQWxsb2NhdGlv
bkFsaWduZWQgYWxsb2NhdGlvbiA9IFBhZ2VBbGxvY2F0aW9uQWxpZ25lZDo6YWxsb2NhdGUoUmVn
aW9uOjpzaXplKCksIFJlZ2lvbjo6c2l6ZSgpLCBPU0FsbG9jYXRvcjo6SlNHQ0hlYXBQYWdlcyk7
CisgICAgaWYgKCFzdGF0aWNfY2FzdDxib29sPihhbGxvY2F0aW9uKSkKKyAgICAgICAgQ1JBU0go
KTsKKyAgICBSZWdpb24qIHJlZ2lvbiA9IHN0YXRpY19jYXN0PFJlZ2lvbio+KGFsbG9jYXRpb24u
YmFzZSgpKTsKKyAgICByZWdpb24tPm1fYWxsb2NhdGlvbiA9IGFsbG9jYXRpb247CisgICAgcmVn
aW9uLT5tX2FsbG9jYXRvciA9IHRoaXM7CisgICAgc3RhcnRCdW1waW5nSW4ocmVnaW9uKTsKKyAg
ICByZWdpb24tPm1fbmV4dCA9IG1fcmVnaW9uSGVhZDsKKyAgICBtX3JlZ2lvbkhlYWQgPSByZWdp
b247CisgICAgCisgICAgdm9pZCogcmVzdWx0ID0gYnVtcEFsbG9jYXRlKCk7CisgICAgQVNTRVJU
KHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4K
K3ZvaWQgQWxsb2NhdG9yPFQ+OjpmcmVlUmVnaW9uc1N0YXJ0aW5nQXQodHlwZW5hbWUgQWxsb2Nh
dG9yPFQ+OjpSZWdpb24qIHJlZ2lvbikKK3sKKyAgICB3aGlsZSAocmVnaW9uKSB7CisgICAgICAg
IFJlZ2lvbiogbmV4dFJlZ2lvbiA9IHJlZ2lvbi0+bV9uZXh0OworICAgICAgICByZWdpb24tPm1f
YWxsb2NhdGlvbi5kZWFsbG9jYXRlKCk7CisgICAgICAgIHJlZ2lvbiA9IG5leHRSZWdpb247Cisg
ICAgfQorfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgordm9pZCBBbGxvY2F0b3I8VD46OnN0YXJ0
QnVtcGluZ0luKHR5cGVuYW1lIEFsbG9jYXRvcjxUPjo6UmVnaW9uKiByZWdpb24pCit7CisgICAg
bV9idW1wRW5kID0gcmVnaW9uLT5kYXRhKCkgKyBSZWdpb246Om51bWJlck9mVGhpbmdzUGVyUmVn
aW9uKCk7CisgICAgbV9idW1wUmVtYWluaW5nID0gUmVnaW9uOjpudW1iZXJPZlRoaW5nc1BlclJl
Z2lvbigpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFC
TEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR0FsbG9jYXRvcl9oCisKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRzU2ltcGxpZmljYXRpb25QaGFzZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVudHNTaW1wbGlm
aWNhdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMTQxMDUyKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdBcmd1bWVudHNTaW1wbGlmaWNhdGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDEzIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtMTQ5LDExICsxNDksMTAgQEAgcHVibGljOgogICAgICAgICAgICAgaWYgKCFibG9jaykKICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW5kZXhJ
bkJsb2NrID0gMDsgaW5kZXhJbkJsb2NrIDwgYmxvY2stPnNpemUoKTsgKytpbmRleEluQmxvY2sp
IHsKLSAgICAgICAgICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4ID0gYmxvY2stPmF0KGluZGV4
SW5CbG9jayk7Ci0gICAgICAgICAgICAgICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhbbm9kZUluZGV4
XTsKLSAgICAgICAgICAgICAgICBpZiAoIW5vZGUuc2hvdWxkR2VuZXJhdGUoKSkKKyAgICAgICAg
ICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPmF0KGluZGV4SW5CbG9jayk7CisgICAgICAgICAg
ICAgICAgaWYgKCFub2RlLT5zaG91bGRHZW5lcmF0ZSgpKQogICAgICAgICAgICAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUub3AoKSkgeworICAgICAgICAg
ICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewogICAgICAgICAgICAgICAgIGNhc2UgQ3JlYXRl
QXJndW1lbnRzOiB7CiAgICAgICAgICAgICAgICAgICAgIC8vIElnbm9yZSB0aGlzIG9wLiBJZiB3
ZSBzZWUgYSBsb25lIENyZWF0ZUFyZ3VtZW50cyB0aGVuIHdlIHdhbnQgdG8KICAgICAgICAgICAg
ICAgICAgICAgLy8gY29tcGxldGVseSBpZ25vcmUgaXQgYmVjYXVzZToKQEAgLTE3MywxNiArMTcy
LDE2IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIAog
ICAgICAgICAgICAgICAgIGNhc2UgU2V0TG9jYWw6IHsKLSAgICAgICAgICAgICAgICAgICAgTm9k
ZSYgc291cmNlID0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXTsKLSAgICAgICAgICAgICAgICAgICAg
VmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBub2RlLnZhcmlhYmxlQWNj
ZXNzRGF0YSgpOworICAgICAgICAgICAgICAgICAgICBOb2RlKiBzb3VyY2UgPSBub2RlLT5jaGls
ZDEoKS5ub2RlKCk7CisgICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFy
aWFibGVBY2Nlc3NEYXRhID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CiAgICAgICAgICAg
ICAgICAgICAgIGludCBhcmd1bWVudHNSZWdpc3RlciA9Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBtX2dyYXBoLnVuY2hlY2tlZEFyZ3VtZW50c1JlZ2lzdGVyRm9yKG5vZGUuY29kZU9yaWdpbik7
Ci0gICAgICAgICAgICAgICAgICAgIGlmIChzb3VyY2Uub3AoKSAhPSBDcmVhdGVBcmd1bWVudHMg
JiYgc291cmNlLm9wKCkgIT0gUGhhbnRvbUFyZ3VtZW50cykgeworICAgICAgICAgICAgICAgICAg
ICAgICAgbV9ncmFwaC51bmNoZWNrZWRBcmd1bWVudHNSZWdpc3RlckZvcihub2RlLT5jb2RlT3Jp
Z2luKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHNvdXJjZS0+b3AoKSAhPSBDcmVhdGVBcmd1
bWVudHMgJiYgc291cmNlLT5vcCgpICE9IFBoYW50b21Bcmd1bWVudHMpIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHRoZSBzb3VyY2Ugb2YgdGhlIFNldExvY2Fs
IGtub3dzIHRoYXQgaWYgaXQncwogICAgICAgICAgICAgICAgICAgICAgICAgLy8gYSB2YXJpYWJs
ZSB0aGF0IHdlIHRoaW5rIGlzIGFsaWFzZWQgdG8gdGhlIGFyZ3VtZW50cywgdGhlbiBpdAogICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gbWF5IGVzY2FwZSBhdCB0aGlzIHBvaW50LiBJbiBmdXR1
cmUsIHdlIGNvdWxkIHRyYWNrIHRyYW5zaXRpdmUKICAgICAgICAgICAgICAgICAgICAgICAgIC8v
IGFsaWFzaW5nLiBCdXQgbm90IHlldC4KLSAgICAgICAgICAgICAgICAgICAgICAgIG9ic2VydmVC
YWRBcmd1bWVudHNVc2Uobm9kZS5jaGlsZDEoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBv
YnNlcnZlQmFkQXJndW1lbnRzVXNlKHNvdXJjZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAK
ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIHRoaXMgaXMgYW4gYXNzaWdubWVudCB0byB0
aGUgYXJndW1lbnRzIHJlZ2lzdGVyLCB0aGVuCiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBw
cmV0ZW5kIGFzIGlmIHRoZSBhcmd1bWVudHMgd2VyZSBjcmVhdGVkLiBXZSBkb24ndCB3YW50IHRv
CkBAIC0xOTUsMTQgKzE5NCwxNCBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgICAgICAv
LyBpbml0X2xhenlfcmVnIHNpbmNlIGl0IHRyZWF0cyBDcmVhdGVBcmd1bWVudHMgYXMgcmVhZGlu
ZwogICAgICAgICAgICAgICAgICAgICAgICAgLy8gbG9jYWwgdmFyaWFibGVzLiBUaGF0IGNvdWxk
IGJlIGZpeGVkLCBidXQgaXQncyBlYXNpZXIgdG8KICAgICAgICAgICAgICAgICAgICAgICAgIC8v
IHdvcmsgYXJvdW5kIHRoaXMgaGVyZS4KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzb3Vy
Y2Uub3AoKSA9PSBKU0NvbnN0YW50Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgIXNv
dXJjZS52YWx1ZU9mSlNDb25zdGFudChjb2RlQmxvY2soKSkpCisgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoc291cmNlLT5vcCgpID09IEpTQ29uc3RhbnQKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAmJiAhc291cmNlLT52YWx1ZU9mSlNDb25zdGFudChjb2RlQmxvY2soKSkpCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAK
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhcmd1bWVudHNSZWdpc3RlciAhPSBJbnZhbGlk
VmlydHVhbFJlZ2lzdGVyCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgKHZhcmlhYmxl
QWNjZXNzRGF0YS0+bG9jYWwoKSA9PSBhcmd1bWVudHNSZWdpc3RlcgogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB8fCB2YXJpYWJsZUFjY2Vzc0RhdGEtPmxvY2FsKCkgPT0gdW5tb2Rp
ZmllZEFyZ3VtZW50c1JlZ2lzdGVyKGFyZ3VtZW50c1JlZ2lzdGVyKSkpIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBtX2NyZWF0ZXNBcmd1bWVudHMuYWRkKG5vZGUuY29kZU9yaWdpbi5p
bmxpbmVDYWxsRnJhbWUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fY3JlYXRlc0Fy
Z3VtZW50cy5hZGQobm9kZS0+Y29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpOwogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgfQogCkBA
IC0yMTQsMTkgKzIxMywxOSBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgICAgICBBcmd1
bWVudHNBbGlhc2luZ0RhdGEmIGRhdGEgPQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1f
YXJndW1lbnRzQWxpYXNpbmcuZmluZCh2YXJpYWJsZUFjY2Vzc0RhdGEpLT52YWx1ZTsKICAgICAg
ICAgICAgICAgICAgICAgICAgIGRhdGEubWVyZ2VOb25Bcmd1bWVudHNBc3NpZ25tZW50KCk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBkYXRhLm1lcmdlQ2FsbENvbnRleHQobm9kZS5jb2RlT3Jp
Z2luLmlubGluZUNhbGxGcmFtZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLm1lcmdl
Q2FsbENvbnRleHQobm9kZS0+Y29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpOwogICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICAgICAgaWYgKGFyZ3VtZW50c1JlZ2lzdGVyICE9IEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIK
ICAgICAgICAgICAgICAgICAgICAgICAgICYmICh2YXJpYWJsZUFjY2Vzc0RhdGEtPmxvY2FsKCkg
PT0gYXJndW1lbnRzUmVnaXN0ZXIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCB2YXJp
YWJsZUFjY2Vzc0RhdGEtPmxvY2FsKCkgPT0gdW5tb2RpZmllZEFyZ3VtZW50c1JlZ2lzdGVyKGFy
Z3VtZW50c1JlZ2lzdGVyKSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLmNv
ZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lID09IHNvdXJjZS5jb2RlT3JpZ2luLmlubGluZUNhbGxG
cmFtZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5jb2RlT3JpZ2luLmlubGlu
ZUNhbGxGcmFtZSA9PSBzb3VyY2UtPmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgbV9j
cmVhdGVzQXJndW1lbnRzLmFkZChzb3VyY2UuY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgbV9jcmVhdGVzQXJndW1lbnRzLmFkZChzb3VyY2UtPmNv
ZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIGlmICh2YXJpYWJs
ZUFjY2Vzc0RhdGEtPmlzQ2FwdHVyZWQoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgbV9j
cmVhdGVzQXJndW1lbnRzLmFkZChzb3VyY2UuY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgbV9jcmVhdGVzQXJndW1lbnRzLmFkZChzb3VyY2UtPmNv
ZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIEFyZ3VtZW50c0Fs
aWFzaW5nRGF0YSYgZGF0YSA9CkBAIC0yMzQsMjkgKzIzMywyOSBAQCBwdWJsaWM6CiAgICAgICAg
ICAgICAgICAgICAgIGRhdGEubWVyZ2VBcmd1bWVudHNBc3NpZ25tZW50KCk7CiAgICAgICAgICAg
ICAgICAgICAgIC8vIFRoaXMgZW5zdXJlcyB0aGF0IHRoZSB2YXJpYWJsZSdzIHVzZXMgYXJlIGlu
IHRoZSBzYW1lIGNvbnRleHQgYXMKICAgICAgICAgICAgICAgICAgICAgLy8gdGhlIGFyZ3VtZW50
cyBpdCBpcyBhbGlhc2luZy4KLSAgICAgICAgICAgICAgICAgICAgZGF0YS5tZXJnZUNhbGxDb250
ZXh0KG5vZGUuY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpOwotICAgICAgICAgICAgICAgICAg
ICBkYXRhLm1lcmdlQ2FsbENvbnRleHQoc291cmNlLmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1l
KTsKKyAgICAgICAgICAgICAgICAgICAgZGF0YS5tZXJnZUNhbGxDb250ZXh0KG5vZGUtPmNvZGVP
cmlnaW4uaW5saW5lQ2FsbEZyYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgZGF0YS5tZXJnZUNh
bGxDb250ZXh0KHNvdXJjZS0+Y29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpOwogICAgICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAg
IAogICAgICAgICAgICAgICAgIGNhc2UgR2V0TG9jYWw6CiAgICAgICAgICAgICAgICAgY2FzZSBQ
aGk6IHsKLSAgICAgICAgICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFj
Y2Vzc0RhdGEgPSBub2RlLnZhcmlhYmxlQWNjZXNzRGF0YSgpOworICAgICAgICAgICAgICAgICAg
ICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9IG5vZGUtPnZhcmlhYmxl
QWNjZXNzRGF0YSgpOwogICAgICAgICAgICAgICAgICAgICBpZiAodmFyaWFibGVBY2Nlc3NEYXRh
LT5pc0NhcHR1cmVkKCkpCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgICAgICAgICAgQXJndW1lbnRzQWxpYXNpbmdEYXRhJiBkYXRhID0KICAgICAgICAgICAgICAg
ICAgICAgICAgIG1fYXJndW1lbnRzQWxpYXNpbmcuZmluZCh2YXJpYWJsZUFjY2Vzc0RhdGEpLT52
YWx1ZTsKLSAgICAgICAgICAgICAgICAgICAgZGF0YS5tZXJnZUNhbGxDb250ZXh0KG5vZGUuY29k
ZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpOworICAgICAgICAgICAgICAgICAgICBkYXRhLm1lcmdl
Q2FsbENvbnRleHQobm9kZS0+Y29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpOwogICAgICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAg
IAogICAgICAgICAgICAgICAgIGNhc2UgRmx1c2g6IHsKLSAgICAgICAgICAgICAgICAgICAgVmFy
aWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBub2RlLnZhcmlhYmxlQWNjZXNz
RGF0YSgpOworICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxl
QWNjZXNzRGF0YSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOwogICAgICAgICAgICAgICAg
ICAgICBpZiAodmFyaWFibGVBY2Nlc3NEYXRhLT5pc0NhcHR1cmVkKCkpCiAgICAgICAgICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgQXJndW1lbnRzQWxpYXNpbmdE
YXRhJiBkYXRhID0KICAgICAgICAgICAgICAgICAgICAgICAgIG1fYXJndW1lbnRzQWxpYXNpbmcu
ZmluZCh2YXJpYWJsZUFjY2Vzc0RhdGEpLT52YWx1ZTsKLSAgICAgICAgICAgICAgICAgICAgZGF0
YS5tZXJnZUNhbGxDb250ZXh0KG5vZGUuY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpOworICAg
ICAgICAgICAgICAgICAgICBkYXRhLm1lcmdlQ2FsbENvbnRleHQobm9kZS0+Y29kZU9yaWdpbi5p
bmxpbmVDYWxsRnJhbWUpOwogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAg
ICAgLy8gSWYgYSB2YXJpYWJsZSBpcyB1c2VkIGluIGEgZmx1c2ggdGhlbiBieSBkZWZpbml0aW9u
IGl0IGVzY2FwZXMuCiAgICAgICAgICAgICAgICAgICAgIGRhdGEuZXNjYXBlcyA9IHRydWU7CkBA
IC0yNjQsMTggKzI2MywxOCBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgICAgICAKICAgICAgICAgICAgICAgICBjYXNlIFNldEFyZ3VtZW50OiB7Ci0gICAgICAg
ICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhID0gbm9k
ZS52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKKyAgICAgICAgICAgICAgICAgICAgVmFyaWFibGVBY2Nl
c3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsK
ICAgICAgICAgICAgICAgICAgICAgaWYgKHZhcmlhYmxlQWNjZXNzRGF0YS0+aXNDYXB0dXJlZCgp
KQogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIEFy
Z3VtZW50c0FsaWFzaW5nRGF0YSYgZGF0YSA9CiAgICAgICAgICAgICAgICAgICAgICAgICBtX2Fy
Z3VtZW50c0FsaWFzaW5nLmZpbmQodmFyaWFibGVBY2Nlc3NEYXRhKS0+dmFsdWU7CiAgICAgICAg
ICAgICAgICAgICAgIGRhdGEubWVyZ2VOb25Bcmd1bWVudHNBc3NpZ25tZW50KCk7Ci0gICAgICAg
ICAgICAgICAgICAgIGRhdGEubWVyZ2VDYWxsQ29udGV4dChub2RlLmNvZGVPcmlnaW4uaW5saW5l
Q2FsbEZyYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgZGF0YS5tZXJnZUNhbGxDb250ZXh0KG5v
ZGUtPmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKTsKICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAg
ICAgICBjYXNlIEdldEJ5VmFsOiB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChub2RlLmFycmF5
TW9kZSgpLnR5cGUoKSAhPSBBcnJheTo6QXJndW1lbnRzKSB7CisgICAgICAgICAgICAgICAgICAg
IGlmIChub2RlLT5hcnJheU1vZGUoKS50eXBlKCkgIT0gQXJyYXk6OkFyZ3VtZW50cykgewogICAg
ICAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZUJhZEFyZ3VtZW50c1VzZXMobm9kZSk7CiAgICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgfQpAQCAtMjgz
LDE4ICsyODIsMTggQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICAvLyBUaGF0J3Mgc28g
YXdmdWwgYW5kIHByZXR0eSBtdWNoIGltcG9zc2libGUgc2luY2UgaXQgd291bGQKICAgICAgICAg
ICAgICAgICAgICAgLy8gaW1wbHkgdGhhdCB0aGUgYXJndW1lbnRzIHdlcmUgcHJlZGljdGVkIGlu
dGVnZXIsIGJ1dCBpdCdzCiAgICAgICAgICAgICAgICAgICAgIC8vIGdvb2QgdG8gYmUgZGVmZW5z
aXZlIGFuZCB0aG9yb3VnaC4KLSAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZUJhZEFyZ3VtZW50
c1VzZShub2RlLmNoaWxkMigpKTsKLSAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZVByb3BlckFy
Z3VtZW50c1VzZShub2RlLCBub2RlLmNoaWxkMSgpKTsKKyAgICAgICAgICAgICAgICAgICAgb2Jz
ZXJ2ZUJhZEFyZ3VtZW50c1VzZShub2RlLT5jaGlsZDIoKS5ub2RlKCkpOworICAgICAgICAgICAg
ICAgICAgICBvYnNlcnZlUHJvcGVyQXJndW1lbnRzVXNlKG5vZGUsIG5vZGUtPmNoaWxkMSgpKTsK
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgICAgICAKICAgICAgICAgICAgICAgICBjYXNlIEdldEFycmF5TGVuZ3RoOiB7Ci0gICAg
ICAgICAgICAgICAgICAgIGlmIChub2RlLmFycmF5TW9kZSgpLnR5cGUoKSAhPSBBcnJheTo6QXJn
dW1lbnRzKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS50eXBl
KCkgIT0gQXJyYXk6OkFyZ3VtZW50cykgewogICAgICAgICAgICAgICAgICAgICAgICAgb2JzZXJ2
ZUJhZEFyZ3VtZW50c1VzZXMobm9kZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAg
ICAgICAgICAgICAgIG9ic2VydmVQcm9wZXJBcmd1bWVudHNVc2Uobm9kZSwgbm9kZS5jaGlsZDEo
KSk7CisgICAgICAgICAgICAgICAgICAgIG9ic2VydmVQcm9wZXJBcmd1bWVudHNVc2Uobm9kZSwg
bm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICAgICAgIApAQCAtMzM1LDE2ICszMzQsMTUgQEAgcHVibGlj
OgogICAgICAgICAgICAgaWYgKCFibG9jaykKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgaW5kZXhJbkJsb2NrID0gMDsgaW5kZXhJbkJsb2NrIDwg
YmxvY2stPnNpemUoKTsgKytpbmRleEluQmxvY2spIHsKLSAgICAgICAgICAgICAgICBOb2RlSW5k
ZXggbm9kZUluZGV4ID0gYmxvY2stPmF0KGluZGV4SW5CbG9jayk7Ci0gICAgICAgICAgICAgICAg
Tm9kZSYgbm9kZSA9IG1fZ3JhcGhbbm9kZUluZGV4XTsKLSAgICAgICAgICAgICAgICBpZiAoIW5v
ZGUuc2hvdWxkR2VuZXJhdGUoKSkKKyAgICAgICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2st
PmF0KGluZGV4SW5CbG9jayk7CisgICAgICAgICAgICAgICAgaWYgKCFub2RlLT5zaG91bGRHZW5l
cmF0ZSgpKQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICBp
ZiAobm9kZS5vcCgpICE9IFNldExvY2FsKQorICAgICAgICAgICAgICAgIGlmIChub2RlLT5vcCgp
ICE9IFNldExvY2FsKQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAg
ICAgICBOb2RlJiBzb3VyY2UgPSBtX2dyYXBoW25vZGUuY2hpbGQxKCldOwotICAgICAgICAgICAg
ICAgIGlmIChzb3VyY2Uub3AoKSAhPSBDcmVhdGVBcmd1bWVudHMpCisgICAgICAgICAgICAgICAg
Tm9kZSogc291cmNlID0gbm9kZS0+Y2hpbGQxKCkubm9kZSgpOworICAgICAgICAgICAgICAgIGlm
IChzb3VyY2UtPm9wKCkgIT0gQ3JlYXRlQXJndW1lbnRzKQogICAgICAgICAgICAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNj
ZXNzRGF0YSA9IG5vZGUudmFyaWFibGVBY2Nlc3NEYXRhKCk7CisgICAgICAgICAgICAgICAgVmFy
aWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBub2RlLT52YXJpYWJsZUFjY2Vz
c0RhdGEoKTsKICAgICAgICAgICAgICAgICBpZiAodmFyaWFibGVBY2Nlc3NEYXRhLT5pc0NhcHR1
cmVkKCkpIHsKICAgICAgICAgICAgICAgICAgICAgLy8gVGhlIGNhcHR1cmVkIGNhc2Ugd291bGQg
aGF2ZSBhbHJlYWR5IGJlZW4gdGFrZW4gY2FyZSBvZiBpbiB0aGUKICAgICAgICAgICAgICAgICAg
ICAgLy8gcHJldmlvdXMgcGFzcy4KQEAgLTM1Niw3ICszNTQsNyBAQCBwdWJsaWM6CiAgICAgICAg
ICAgICAgICAgaWYgKGRhdGEuaXNWYWxpZCgpKQogICAgICAgICAgICAgICAgICAgICBjb250aW51
ZTsKICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBtX2NyZWF0ZXNBcmd1bWVudHMu
YWRkKHNvdXJjZS5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSk7CisgICAgICAgICAgICAgICAg
bV9jcmVhdGVzQXJndW1lbnRzLmFkZChzb3VyY2UtPmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1l
KTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICAKQEAgLTQxNCwyNCArNDEyLDIz
IEBAIHB1YmxpYzoKICAgICAgICAgICAgIGlmICghYmxvY2spCiAgICAgICAgICAgICAgICAgY29u
dGludWU7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGluZGV4SW5CbG9jayA9IDA7IGluZGV4
SW5CbG9jayA8IGJsb2NrLT5zaXplKCk7ICsraW5kZXhJbkJsb2NrKSB7Ci0gICAgICAgICAgICAg
ICAgTm9kZUluZGV4IG5vZGVJbmRleCA9IGJsb2NrLT5hdChpbmRleEluQmxvY2spOwotICAgICAg
ICAgICAgICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW25vZGVJbmRleF07Ci0gICAgICAgICAgICAg
ICAgaWYgKCFub2RlLnNob3VsZEdlbmVyYXRlKCkpCisgICAgICAgICAgICAgICAgTm9kZSogbm9k
ZSA9IGJsb2NrLT5hdChpbmRleEluQmxvY2spOworICAgICAgICAgICAgICAgIGlmICghbm9kZS0+
c2hvdWxkR2VuZXJhdGUoKSkKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAg
ICAgICAgICAgCi0gICAgICAgICAgICAgICAgc3dpdGNoIChub2RlLm9wKCkpIHsKKyAgICAgICAg
ICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKICAgICAgICAgICAgICAgICBjYXNlIFNldExv
Y2FsOiB7Ci0gICAgICAgICAgICAgICAgICAgIE5vZGUmIHNvdXJjZSA9IG1fZ3JhcGhbbm9kZS5j
aGlsZDEoKV07Ci0gICAgICAgICAgICAgICAgICAgIGlmIChzb3VyY2Uub3AoKSAhPSBDcmVhdGVB
cmd1bWVudHMpCisgICAgICAgICAgICAgICAgICAgIE5vZGUqIHNvdXJjZSA9IG5vZGUtPmNoaWxk
MSgpLm5vZGUoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHNvdXJjZS0+b3AoKSAhPSBDcmVh
dGVBcmd1bWVudHMpCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
ICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIGlmIChtX2NyZWF0ZXNBcmd1bWVudHMuY29u
dGFpbnMoc291cmNlLmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKSkKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKG1fY3JlYXRlc0FyZ3VtZW50cy5jb250YWlucyhzb3VyY2UtPmNvZGVPcmlnaW4u
aW5saW5lQ2FsbEZyYW1lKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2
YXJpYWJsZUFjY2Vzc0RhdGEgPSBub2RlLnZhcmlhYmxlQWNjZXNzRGF0YSgpOworICAgICAgICAg
ICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9IG5vZGUt
PnZhcmlhYmxlQWNjZXNzRGF0YSgpOwogICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAg
ICAgICAgICAgaWYgKG1fZ3JhcGguYXJndW1lbnRzUmVnaXN0ZXJGb3Iobm9kZS5jb2RlT3JpZ2lu
KSA9PSB2YXJpYWJsZUFjY2Vzc0RhdGEtPmxvY2FsKCkKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHx8IHVubW9kaWZpZWRBcmd1bWVudHNSZWdpc3RlcihtX2dyYXBoLmFyZ3VtZW50c1JlZ2lz
dGVyRm9yKG5vZGUuY29kZU9yaWdpbikpID09IHZhcmlhYmxlQWNjZXNzRGF0YS0+bG9jYWwoKSkK
KyAgICAgICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGguYXJndW1lbnRzUmVnaXN0ZXJGb3Iobm9k
ZS0+Y29kZU9yaWdpbikgPT0gdmFyaWFibGVBY2Nlc3NEYXRhLT5sb2NhbCgpCisgICAgICAgICAg
ICAgICAgICAgICAgICB8fCB1bm1vZGlmaWVkQXJndW1lbnRzUmVnaXN0ZXIobV9ncmFwaC5hcmd1
bWVudHNSZWdpc3RlckZvcihub2RlLT5jb2RlT3JpZ2luKSkgPT0gdmFyaWFibGVBY2Nlc3NEYXRh
LT5sb2NhbCgpKQogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgICAg
ICAgICAgICAgQVNTRVJUKCF2YXJpYWJsZUFjY2Vzc0RhdGEtPmlzQ2FwdHVyZWQoKSk7CkBAIC00
NjksMTYgKzQ2NiwxNiBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgY2FzZSBGb3J3YXJkU3Ry
dWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnQ6CiAgICAgICAgICAgICAgICAgY2FzZSBDaGVja0Fy
cmF5OiB7CiAgICAgICAgICAgICAgICAgICAgIC8vIFdlIGNhbiBqdXN0IGdldCByaWQgb2YgdGhp
cyBub2RlLCBpZiBpdCByZWZlcmVuY2VzIGEgcGhhbnRvbSBhcmd1bWVudC4KLSAgICAgICAgICAg
ICAgICAgICAgaWYgKCFpc09LVG9PcHRpbWl6ZShtX2dyYXBoW25vZGUuY2hpbGQxKCldKSkKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKCFpc09LVG9PcHRpbWl6ZShub2RlLT5jaGlsZDEoKS5ub2Rl
KCkpKQogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAg
IG1fZ3JhcGguZGVyZWYobm9kZS5jaGlsZDEoKSk7Ci0gICAgICAgICAgICAgICAgICAgIG5vZGUu
c2V0T3BBbmREZWZhdWx0RmxhZ3MoUGhhbnRvbSk7Ci0gICAgICAgICAgICAgICAgICAgIG5vZGUu
Y2hpbGRyZW4uc2V0Q2hpbGQxKEVkZ2UoKSk7CisgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgu
ZGVyZWYobm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgICAgICAgICBub2RlLT5zZXRPcEFu
ZERlZmF1bHRGbGFncyhQaGFudG9tKTsKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGRy
ZW4uc2V0Q2hpbGQxKEVkZ2UoKSk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgY2FzZSBH
ZXRCeVZhbDogewotICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS5hcnJheU1vZGUoKS50eXBl
KCkgIT0gQXJyYXk6OkFyZ3VtZW50cykKKyAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmFy
cmF5TW9kZSgpLnR5cGUoKSAhPSBBcnJheTo6QXJndW1lbnRzKQogICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAKICAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBjYW4gYmUgc2ltcGxp
ZmllZCB0byBHZXRNeUFyZ3VtZW50QnlWYWwgaWYgd2Uga25vdyB0aGF0CkBAIC00ODgsMjggKzQ4
NSwyOCBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgIC8vIDIpIEl0cyBmaXJzdCBjaGls
ZCBpcyBDcmVhdGVBcmd1bWVudHMgYW5kIGl0cyBJbmxpbmVDYWxsRnJhbWUqCiAgICAgICAgICAg
ICAgICAgICAgIC8vICAgIGlzIG5vdCBtYXJrZWQgYXMgY3JlYXRpbmcgYXJndW1lbnRzLgogICAg
ICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFpc09LVG9PcHRpbWl6
ZShtX2dyYXBoW25vZGUuY2hpbGQxKCldKSkKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFpc09L
VG9PcHRpbWl6ZShub2RlLT5jaGlsZDEoKS5ub2RlKCkpKQogICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBtX2dy
YXBoLmRlcmVmKG5vZGUuY2hpbGQxKCkpOwotICAgICAgICAgICAgICAgICAgICBub2RlLmNoaWxk
cmVuLmNoaWxkMSgpID0gbm9kZS5jaGlsZHJlbi5jaGlsZDIoKTsKLSAgICAgICAgICAgICAgICAg
ICAgbm9kZS5jaGlsZHJlbi5jaGlsZDIoKSA9IEVkZ2UoKTsKLSAgICAgICAgICAgICAgICAgICAg
bm9kZS5zZXRPcEFuZERlZmF1bHRGbGFncyhHZXRNeUFyZ3VtZW50QnlWYWwpOworICAgICAgICAg
ICAgICAgICAgICBtX2dyYXBoLmRlcmVmKG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgICAg
ICAgICAgbm9kZS0+Y2hpbGRyZW4uY2hpbGQxKCkgPSBub2RlLT5jaGlsZHJlbi5jaGlsZDIoKTsK
KyAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGRyZW4uY2hpbGQyKCkgPSBFZGdlKCk7Cisg
ICAgICAgICAgICAgICAgICAgIG5vZGUtPnNldE9wQW5kRGVmYXVsdEZsYWdzKEdldE15QXJndW1l
bnRCeVZhbCk7CiAgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgPSB0cnVlOwogICAgICAgICAg
ICAgICAgICAgICAtLWluZGV4SW5CbG9jazsgLy8gRm9yY2UgcmVjb25zaWRlcmF0aW9uIG9mIHRo
aXMgb3Agbm93IHRoYXQgaXQncyBhIEdldE15QXJndW1lbnRCeVZhbC4KICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAKICAg
ICAgICAgICAgICAgICBjYXNlIEdldEFycmF5TGVuZ3RoOiB7Ci0gICAgICAgICAgICAgICAgICAg
IGlmIChub2RlLmFycmF5TW9kZSgpLnR5cGUoKSAhPSBBcnJheTo6QXJndW1lbnRzKQorICAgICAg
ICAgICAgICAgICAgICBpZiAobm9kZS0+YXJyYXlNb2RlKCkudHlwZSgpICE9IEFycmF5OjpBcmd1
bWVudHMpCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAg
ICAgCi0gICAgICAgICAgICAgICAgICAgIGlmICghaXNPS1RvT3B0aW1pemUobV9ncmFwaFtub2Rl
LmNoaWxkMSgpXSkpCisgICAgICAgICAgICAgICAgICAgIGlmICghaXNPS1RvT3B0aW1pemUobm9k
ZS0+Y2hpbGQxKCkubm9kZSgpKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5kZXJlZihub2Rl
LmNoaWxkMSgpKTsKLSAgICAgICAgICAgICAgICAgICAgbm9kZS5jaGlsZHJlbi5jaGlsZDEoKSA9
IEVkZ2UoKTsKLSAgICAgICAgICAgICAgICAgICAgbm9kZS5zZXRPcEFuZERlZmF1bHRGbGFncyhH
ZXRNeUFyZ3VtZW50c0xlbmd0aCk7CisgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguZGVyZWYo
bm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgICAgICAgICBub2RlLT5jaGlsZHJlbi5jaGls
ZDEoKSA9IEVkZ2UoKTsKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+c2V0T3BBbmREZWZhdWx0
RmxhZ3MoR2V0TXlBcmd1bWVudHNMZW5ndGgpOwogICAgICAgICAgICAgICAgICAgICBjaGFuZ2Vk
ID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgLS1pbmRleEluQmxvY2s7IC8vIEZvcmNlIHJl
Y29uc2lkZXJhdGlvbiBvZiB0aGlzIG9wIG5vZXcgdGhhdCBpdCdzIGEgR2V0TXlBcmd1bWVudHNM
ZW5ndGguCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtNTE3LDE2ICs1MTQsMTYgQEAg
cHVibGljOgogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBjYXNlIEdldE15
QXJndW1lbnRzTGVuZ3RoOgogICAgICAgICAgICAgICAgIGNhc2UgR2V0TXlBcmd1bWVudHNMZW5n
dGhTYWZlOiB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChtX2NyZWF0ZXNBcmd1bWVudHMuY29u
dGFpbnMobm9kZS5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSkpIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIEFTU0VSVChub2RlLm9wKCkgPT0gR2V0TXlBcmd1bWVudHNMZW5ndGhTYWZlKTsK
KyAgICAgICAgICAgICAgICAgICAgaWYgKG1fY3JlYXRlc0FyZ3VtZW50cy5jb250YWlucyhub2Rl
LT5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IEFTU0VSVChub2RlLT5vcCgpID09IEdldE15QXJndW1lbnRzTGVuZ3RoU2FmZSk7CiAgICAgICAg
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgICAgICBpZiAobm9kZS5vcCgpID09IEdldE15QXJndW1lbnRzTGVuZ3RoU2FmZSkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS5zZXRPcChHZXRNeUFyZ3VtZW50c0xlbmd0aCk7
CisgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5vcCgpID09IEdldE15QXJndW1lbnRzTGVu
Z3RoU2FmZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+c2V0T3AoR2V0TXlBcmd1
bWVudHNMZW5ndGgpOwogICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCA9IHRydWU7CiAg
ICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAg
ICAgICAgIENvZGVPcmlnaW4gY29kZU9yaWdpbiA9IG5vZGUuY29kZU9yaWdpbjsKKyAgICAgICAg
ICAgICAgICAgICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2luID0gbm9kZS0+Y29kZU9yaWdpbjsKICAg
ICAgICAgICAgICAgICAgICAgaWYgKCFjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSkKICAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAKQEAgLTUzNywz
MiArNTM0LDMyIEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgICAgIENoZWNrQXJndW1l
bnRzTm90Q3JlYXRlZCwgY29kZU9yaWdpbik7CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAg
ICAgICAgICAgICAgICBtX2dyYXBoLmNvbnZlcnRUb0NvbnN0YW50KAotICAgICAgICAgICAgICAg
ICAgICAgICAgbm9kZUluZGV4LCBqc051bWJlcihjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZS0+
YXJndW1lbnRzLnNpemUoKSAtIDEpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUsIGpz
TnVtYmVyKGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgpIC0gMSkp
OwogICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAKICAgICAg
ICAgICAgICAgICBjYXNlIEdldE15QXJndW1lbnRCeVZhbDoKICAgICAgICAgICAgICAgICBjYXNl
IEdldE15QXJndW1lbnRCeVZhbFNhZmU6IHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG1fY3Jl
YXRlc0FyZ3VtZW50cy5jb250YWlucyhub2RlLmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKSkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKG5vZGUub3AoKSA9PSBHZXRNeUFyZ3Vt
ZW50QnlWYWxTYWZlKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1fY3JlYXRlc0FyZ3VtZW50
cy5jb250YWlucyhub2RlLT5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSkpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIEFTU0VSVChub2RlLT5vcCgpID09IEdldE15QXJndW1lbnRCeVZhbFNh
ZmUpOwogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUub3AoKSA9PSBHZXRNeUFyZ3VtZW50QnlW
YWxTYWZlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBub2RlLnNldE9wKEdldE15QXJndW1l
bnRCeVZhbCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5vcCgpID09IEdldE15QXJn
dW1lbnRCeVZhbFNhZmUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPnNldE9wKEdl
dE15QXJndW1lbnRCeVZhbCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkID0gdHJ1
ZTsKICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBpZiAoIW5vZGUu
Y29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpCisgICAgICAgICAgICAgICAgICAgIGlmICghbm9k
ZS0+Y29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpCiAgICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFtX2dyYXBoW25vZGUuY2hpbGQxKCldLmhh
c0NvbnN0YW50KCkpCisgICAgICAgICAgICAgICAgICAgIGlmICghbm9kZS0+Y2hpbGQxKCktPmhh
c0NvbnN0YW50KCkpCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
ICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0udmFsdWVPZkpT
Q29uc3RhbnQoY29kZUJsb2NrKCkpOworICAgICAgICAgICAgICAgICAgICBKU1ZhbHVlIHZhbHVl
ID0gbm9kZS0+Y2hpbGQxKCktPnZhbHVlT2ZKU0NvbnN0YW50KGNvZGVCbG9jaygpKTsKICAgICAg
ICAgICAgICAgICAgICAgaWYgKCF2YWx1ZS5pc0ludDMyKCkpCiAgICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCBpbmRleCA9IHZhbHVlLmFz
SW50MzIoKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKGluZGV4IDwgMAogICAgICAgICAgICAg
ICAgICAgICAgICAgfHwgc3RhdGljX2Nhc3Q8c2l6ZV90PihpbmRleCArIDEpID49Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbm9kZS5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZS0+YXJn
dW1lbnRzLnNpemUoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5jb2RlT3Jp
Z2luLmlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzLnNpemUoKSkKICAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAg
Ly8gV2Uga25vdyB3aGljaCBhcmd1bWVudCB0aGlzIGlzIGFjY2Vzc2luZy4gQnV0IG9ubHkgYWZ0
ZXIgd2UgaGF2ZSBjaGVja2VkCkBAIC01NzQsMTMgKzU3MSwxMyBAQCBwdWJsaWM6CiAgICAgICAg
ICAgICAgICAgICAgIC8vIGhhcyBydW4gLSB0aGVyZWZvcmUgaXQgbWFrZXMgbGl0dGxlIHNlbnNl
IHRvIGxpbmsgdGhlIEdldExvY2FsIG9wZXJhdGlvbgogICAgICAgICAgICAgICAgICAgICAvLyBp
bnRvIHRoZSBWYXJpYWJsZUFjY2Vzc0RhdGEgYW5kIFBoaSBncmFwaHMuCiAKLSAgICAgICAgICAg
ICAgICAgICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2luID0gbm9kZS5jb2RlT3JpZ2luOwotICAgICAg
ICAgICAgICAgICAgICBBZGphY2VuY3lMaXN0IGNoaWxkcmVuID0gbm9kZS5jaGlsZHJlbjsKKyAg
ICAgICAgICAgICAgICAgICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2luID0gbm9kZS0+Y29kZU9yaWdp
bjsKKyAgICAgICAgICAgICAgICAgICAgQWRqYWNlbmN5TGlzdCBjaGlsZHJlbiA9IG5vZGUtPmNo
aWxkcmVuOwogICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgbm9kZS5j
b252ZXJ0VG9HZXRMb2NhbFVubGlua2VkKAorICAgICAgICAgICAgICAgICAgICBub2RlLT5jb252
ZXJ0VG9HZXRMb2NhbFVubGlua2VkKAogICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nh
c3Q8VmlydHVhbFJlZ2lzdGVyPigKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlLmNv
ZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbV9ncmFwaC5iYXNlbGluZUNvZGVCbG9ja0Zvcihub2RlLmNvZGVPcmlnaW4p
LT5hcmd1bWVudEluZGV4QWZ0ZXJDYXB0dXJlKGluZGV4KSkpOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG5vZGUtPmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCAr
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5iYXNlbGluZUNvZGVCbG9ja0Zv
cihub2RlLT5jb2RlT3JpZ2luKS0+YXJndW1lbnRJbmRleEFmdGVyQ2FwdHVyZShpbmRleCkpKTsK
IAogICAgICAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKICAgICAgICAg
ICAgICAgICAgICAgICAgIGluZGV4SW5CbG9jaywgRG9udFJlZkNoaWxkcmVuLCBEb250UmVmTm9k
ZSwgU3BlY05vbmUsIENoZWNrQXJndW1lbnRzTm90Q3JlYXRlZCwKQEAgLTU5NCwxMyArNTkxLDEz
IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIAogICAg
ICAgICAgICAgICAgIGNhc2UgVGVhck9mZkFyZ3VtZW50czogewotICAgICAgICAgICAgICAgICAg
ICBpZiAobV9jcmVhdGVzQXJndW1lbnRzLmNvbnRhaW5zKG5vZGUuY29kZU9yaWdpbi5pbmxpbmVD
YWxsRnJhbWUpKQorICAgICAgICAgICAgICAgICAgICBpZiAobV9jcmVhdGVzQXJndW1lbnRzLmNv
bnRhaW5zKG5vZGUtPmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKSkKICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAg
ICAgICAgbm9kZS5zZXRPcEFuZERlZmF1bHRGbGFncyhOb3ApOworICAgICAgICAgICAgICAgICAg
ICBub2RlLT5zZXRPcEFuZERlZmF1bHRGbGFncyhOb3ApOwogICAgICAgICAgICAgICAgICAgICBt
X2dyYXBoLmNsZWFyQW5kRGVyZWZDaGlsZDEobm9kZSk7CiAgICAgICAgICAgICAgICAgICAgIG1f
Z3JhcGguY2xlYXJBbmREZXJlZkNoaWxkMihub2RlKTsKLSAgICAgICAgICAgICAgICAgICAgbm9k
ZS5zZXRSZWZDb3VudCgwKTsKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+c2V0UmVmQ291bnQo
MCk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICAgICAgCkBAIC02MTYsMjUgKzYxMywyMyBAQCBwdWJsaWM6CiAgICAgICAgICAg
ICBpZiAoIWJsb2NrKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpbmRleEluQmxvY2sgPSAwOyBpbmRleEluQmxvY2sgPCBibG9jay0+c2l6ZSgp
OyArK2luZGV4SW5CbG9jaykgewotICAgICAgICAgICAgICAgIE5vZGVJbmRleCBub2RlSW5kZXgg
PSBibG9jay0+YXQoaW5kZXhJbkJsb2NrKTsKLSAgICAgICAgICAgICAgICBOb2RlKiBub2RlUHRy
ID0gJm1fZ3JhcGhbbm9kZUluZGV4XTsKLSAgICAgICAgICAgICAgICBpZiAobm9kZVB0ci0+b3Ao
KSAhPSBDcmVhdGVBcmd1bWVudHMpCisgICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2Nr
LT5hdChpbmRleEluQmxvY2spOworICAgICAgICAgICAgICAgIGlmIChub2RlLT5vcCgpICE9IENy
ZWF0ZUFyZ3VtZW50cykKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAg
ICAgICAgLy8gSWYgdGhpcyBpcyBhIENyZWF0ZUFyZ3VtZW50cyBmb3IgYW4gSW5saW5lQ2FsbEZy
YW1lKiB0aGF0IGRvZXMKICAgICAgICAgICAgICAgICAvLyBub3QgY3JlYXRlIGFyZ3VtZW50cywg
dGhlbiByZXBsYWNlIGl0IHdpdGggYSBQaGFudG9tQXJndW1lbnRzLgogICAgICAgICAgICAgICAg
IC8vIFBoYW50b21Bcmd1bWVudHMgaXMgYSBub24tZXhlY3V0aW5nIG5vZGUgdGhhdCBqdXN0IGlu
ZGljYXRlcwogICAgICAgICAgICAgICAgIC8vIHRoYXQgdGhlIG5vZGUgc2hvdWxkIGJlIHJlaWZp
ZWQgYXMgYW4gYXJndW1lbnRzIG9iamVjdCBvbiBPU1IKICAgICAgICAgICAgICAgICAvLyBleGl0
LgotICAgICAgICAgICAgICAgIGlmIChtX2NyZWF0ZXNBcmd1bWVudHMuY29udGFpbnMobm9kZVB0
ci0+Y29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpKQorICAgICAgICAgICAgICAgIGlmIChtX2Ny
ZWF0ZXNBcmd1bWVudHMuY29udGFpbnMobm9kZS0+Y29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUp
KQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICBpZiAobm9k
ZVB0ci0+c2hvdWxkR2VuZXJhdGUoKSkgeworICAgICAgICAgICAgICAgIGlmIChub2RlLT5zaG91
bGRHZW5lcmF0ZSgpKSB7CiAgICAgICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnRO
b2RlKAogICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBEb250UmVmQ2hpbGRy
ZW4sIERvbnRSZWZOb2RlLCBTcGVjTm9uZSwgUGhhbnRvbSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgIG5vZGVQdHItPmNvZGVPcmlnaW4sIG5vZGVQdHItPmNoaWxkcmVuKTsKLSAgICAgICAgICAg
ICAgICAgICAgbm9kZVB0ciA9ICZtX2dyYXBoW25vZGVJbmRleF07CisgICAgICAgICAgICAgICAg
ICAgICAgICBub2RlLT5jb2RlT3JpZ2luLCBub2RlLT5jaGlsZHJlbik7CiAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIG5vZGVQdHItPnNldE9wQW5kRGVmYXVsdEZsYWdzKFBoYW50
b21Bcmd1bWVudHMpOwotICAgICAgICAgICAgICAgIG5vZGVQdHItPmNoaWxkcmVuLnJlc2V0KCk7
CisgICAgICAgICAgICAgICAgbm9kZS0+c2V0T3BBbmREZWZhdWx0RmxhZ3MoUGhhbnRvbUFyZ3Vt
ZW50cyk7CisgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGRyZW4ucmVzZXQoKTsKICAgICAgICAg
ICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGluc2Vy
dGlvblNldC5leGVjdXRlKGJsb2NrKTsKQEAgLTY1NCwyOCArNjQ5LDI3IEBAIHByaXZhdGU6CiAg
ICAgICAgICAgICBEZWZhdWx0SGFzaDxWYXJpYWJsZUFjY2Vzc0RhdGEqPjo6SGFzaCwKICAgICAg
ICAgICAgIE51bGxhYmxlSGFzaFRyYWl0czxWYXJpYWJsZUFjY2Vzc0RhdGEqPiA+IG1fYXJndW1l
bnRzQWxpYXNpbmc7CiAKLSAgICB2b2lkIG9ic2VydmVCYWRBcmd1bWVudHNVc2UoRWRnZSBlZGdl
KQorICAgIHZvaWQgb2JzZXJ2ZUJhZEFyZ3VtZW50c1VzZShOb2RlKiBub2RlKQogICAgIHsKLSAg
ICAgICAgaWYgKCFlZGdlKQorICAgICAgICBpZiAoIW5vZGUpCiAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgIAotICAgICAgICBOb2RlJiBjaGlsZCA9IG1fZ3JhcGhbZWRnZV07Ci0gICAgICAg
IHN3aXRjaCAoY2hpbGQub3AoKSkgeworICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKICAg
ICAgICAgY2FzZSBDcmVhdGVBcmd1bWVudHM6IHsKLSAgICAgICAgICAgIG1fY3JlYXRlc0FyZ3Vt
ZW50cy5hZGQoY2hpbGQuY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpOworICAgICAgICAgICAg
bV9jcmVhdGVzQXJndW1lbnRzLmFkZChub2RlLT5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSk7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgIGNh
c2UgR2V0TG9jYWw6IHsKLSAgICAgICAgICAgIGludCBhcmd1bWVudHNSZWdpc3RlciA9IG1fZ3Jh
cGgudW5jaGVja2VkQXJndW1lbnRzUmVnaXN0ZXJGb3IoY2hpbGQuY29kZU9yaWdpbik7CisgICAg
ICAgICAgICBpbnQgYXJndW1lbnRzUmVnaXN0ZXIgPSBtX2dyYXBoLnVuY2hlY2tlZEFyZ3VtZW50
c1JlZ2lzdGVyRm9yKG5vZGUtPmNvZGVPcmlnaW4pOwogICAgICAgICAgICAgaWYgKGFyZ3VtZW50
c1JlZ2lzdGVyICE9IEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIKLSAgICAgICAgICAgICAgICAmJiAo
Y2hpbGQubG9jYWwoKSA9PSBhcmd1bWVudHNSZWdpc3RlcgotICAgICAgICAgICAgICAgICAgICB8
fCBjaGlsZC5sb2NhbCgpID09IHVubW9kaWZpZWRBcmd1bWVudHNSZWdpc3Rlcihhcmd1bWVudHNS
ZWdpc3RlcikpKSB7Ci0gICAgICAgICAgICAgICAgbV9jcmVhdGVzQXJndW1lbnRzLmFkZChjaGls
ZC5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSk7CisgICAgICAgICAgICAgICAgJiYgKG5vZGUt
PmxvY2FsKCkgPT0gYXJndW1lbnRzUmVnaXN0ZXIKKyAgICAgICAgICAgICAgICAgICAgfHwgbm9k
ZS0+bG9jYWwoKSA9PSB1bm1vZGlmaWVkQXJndW1lbnRzUmVnaXN0ZXIoYXJndW1lbnRzUmVnaXN0
ZXIpKSkgeworICAgICAgICAgICAgICAgIG1fY3JlYXRlc0FyZ3VtZW50cy5hZGQobm9kZS0+Y29k
ZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZh
cmlhYmxlQWNjZXNzRGF0YSA9IGNoaWxkLnZhcmlhYmxlQWNjZXNzRGF0YSgpOworICAgICAgICAg
ICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBub2RlLT52YXJpYWJs
ZUFjY2Vzc0RhdGEoKTsKICAgICAgICAgICAgIGlmICh2YXJpYWJsZUFjY2Vzc0RhdGEtPmlzQ2Fw
dHVyZWQoKSkKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIApAQCAtNjg5LDE2
ICs2ODMsMTUgQEAgcHJpdmF0ZToKICAgICAgICAgfQogICAgIH0KICAgICAKLSAgICB2b2lkIG9i
c2VydmVCYWRBcmd1bWVudHNVc2VzKE5vZGUmIG5vZGUpCisgICAgdm9pZCBvYnNlcnZlQmFkQXJn
dW1lbnRzVXNlcyhOb2RlKiBub2RlKQogICAgIHsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
bV9ncmFwaC5udW1DaGlsZHJlbihub2RlKTsgaS0tOykKLSAgICAgICAgICAgIG9ic2VydmVCYWRB
cmd1bWVudHNVc2UobV9ncmFwaC5jaGlsZChub2RlLCBpKSk7CisgICAgICAgICAgICBvYnNlcnZl
QmFkQXJndW1lbnRzVXNlKG1fZ3JhcGguY2hpbGQobm9kZSwgaSkubm9kZSgpKTsKICAgICB9CiAg
ICAgCi0gICAgdm9pZCBvYnNlcnZlUHJvcGVyQXJndW1lbnRzVXNlKE5vZGUmIG5vZGUsIEVkZ2Ug
ZWRnZSkKKyAgICB2b2lkIG9ic2VydmVQcm9wZXJBcmd1bWVudHNVc2UoTm9kZSogbm9kZSwgRWRn
ZSBlZGdlKQogICAgIHsKLSAgICAgICAgTm9kZSYgY2hpbGQgPSBtX2dyYXBoW2VkZ2VdOwotICAg
ICAgICBpZiAoY2hpbGQub3AoKSAhPSBHZXRMb2NhbCkgeworICAgICAgICBpZiAoZWRnZS0+b3Ao
KSAhPSBHZXRMb2NhbCkgewogICAgICAgICAgICAgLy8gV2hlbiBjYW4gdGhpcyBoYXBwZW4/IEF0
IGxlYXN0IHR3byBjYXNlcyB0aGF0IEkgY2FuIHRoaW5rCiAgICAgICAgICAgICAvLyBvZjoKICAg
ICAgICAgICAgIC8vCkBAIC03MTAsMTggKzcwMywxOCBAQCBwcml2YXRlOgogICAgICAgICAgICAg
Ly8KICAgICAgICAgICAgIC8vIDIpIElmIHdlJ3JlIGFjY2Vzc2luZyBhcmd1bWVudHMgd2UgZ290
IGZyb20gdGhlIGhlYXAhCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAg
ICBpZiAoY2hpbGQub3AoKSA9PSBDcmVhdGVBcmd1bWVudHMKLSAgICAgICAgICAgICAgICAmJiBu
b2RlLmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lCi0gICAgICAgICAgICAgICAgICAgIT0gY2hp
bGQuY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpCi0gICAgICAgICAgICAgICAgbV9jcmVhdGVz
QXJndW1lbnRzLmFkZChjaGlsZC5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSk7CisgICAgICAg
ICAgICBpZiAoZWRnZS0+b3AoKSA9PSBDcmVhdGVBcmd1bWVudHMKKyAgICAgICAgICAgICAgICAm
JiBub2RlLT5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZQorICAgICAgICAgICAgICAgICAgICAh
PSBlZGdlLT5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSkKKyAgICAgICAgICAgICAgICBtX2Ny
ZWF0ZXNBcmd1bWVudHMuYWRkKGVkZ2UtPmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKTsKICAg
ICAgICAgICAgIAogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgICAgICAg
ICAgICAgICAgICAKLSAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0Rh
dGEgPSBjaGlsZC52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKLSAgICAgICAgaWYgKGNoaWxkLmxvY2Fs
KCkgPT0gbV9ncmFwaC51bmNoZWNrZWRBcmd1bWVudHNSZWdpc3RlckZvcihjaGlsZC5jb2RlT3Jp
Z2luKQotICAgICAgICAgICAgJiYgbm9kZS5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSAhPSBj
aGlsZC5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSkgewotICAgICAgICAgICAgbV9jcmVhdGVz
QXJndW1lbnRzLmFkZChjaGlsZC5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSk7CisgICAgICAg
IFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhID0gZWRnZS0+dmFyaWFibGVB
Y2Nlc3NEYXRhKCk7CisgICAgICAgIGlmIChlZGdlLT5sb2NhbCgpID09IG1fZ3JhcGgudW5jaGVj
a2VkQXJndW1lbnRzUmVnaXN0ZXJGb3IoZWRnZS0+Y29kZU9yaWdpbikKKyAgICAgICAgICAgICYm
IG5vZGUtPmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lICE9IGVkZ2UtPmNvZGVPcmlnaW4uaW5s
aW5lQ2FsbEZyYW1lKSB7CisgICAgICAgICAgICBtX2NyZWF0ZXNBcmd1bWVudHMuYWRkKGVkZ2Ut
PmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgfQogCkBAIC03MjksMTggKzcyMiwxOCBAQCBwcml2YXRlOgogICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICAKICAgICAgICAgQXJndW1lbnRzQWxpYXNpbmdEYXRhJiBkYXRhID0gbV9hcmd1
bWVudHNBbGlhc2luZy5maW5kKHZhcmlhYmxlQWNjZXNzRGF0YSktPnZhbHVlOwotICAgICAgICBk
YXRhLm1lcmdlQ2FsbENvbnRleHQobm9kZS5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSk7Cisg
ICAgICAgIGRhdGEubWVyZ2VDYWxsQ29udGV4dChub2RlLT5jb2RlT3JpZ2luLmlubGluZUNhbGxG
cmFtZSk7CiAgICAgfQogICAgIAotICAgIGJvb2wgaXNPS1RvT3B0aW1pemUoTm9kZSYgc291cmNl
KQorICAgIGJvb2wgaXNPS1RvT3B0aW1pemUoTm9kZSogc291cmNlKQogICAgIHsKLSAgICAgICAg
aWYgKG1fY3JlYXRlc0FyZ3VtZW50cy5jb250YWlucyhzb3VyY2UuY29kZU9yaWdpbi5pbmxpbmVD
YWxsRnJhbWUpKQorICAgICAgICBpZiAobV9jcmVhdGVzQXJndW1lbnRzLmNvbnRhaW5zKHNvdXJj
ZS0+Y29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgICAgICAKLSAgICAgICAgc3dpdGNoIChzb3VyY2Uub3AoKSkgeworICAgICAgICBzd2l0
Y2ggKHNvdXJjZS0+b3AoKSkgewogICAgICAgICBjYXNlIEdldExvY2FsOiB7Ci0gICAgICAgICAg
ICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9IHNvdXJjZS52YXJpYWJs
ZUFjY2Vzc0RhdGEoKTsKLSAgICAgICAgICAgIGludCBhcmd1bWVudHNSZWdpc3RlciA9IG1fZ3Jh
cGgudW5jaGVja2VkQXJndW1lbnRzUmVnaXN0ZXJGb3Ioc291cmNlLmNvZGVPcmlnaW4pOworICAg
ICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBzb3VyY2Ut
PnZhcmlhYmxlQWNjZXNzRGF0YSgpOworICAgICAgICAgICAgaW50IGFyZ3VtZW50c1JlZ2lzdGVy
ID0gbV9ncmFwaC51bmNoZWNrZWRBcmd1bWVudHNSZWdpc3RlckZvcihzb3VyY2UtPmNvZGVPcmln
aW4pOwogICAgICAgICAgICAgaWYgKGFyZ3VtZW50c1JlZ2lzdGVyID09IEludmFsaWRWaXJ0dWFs
UmVnaXN0ZXIpCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBpZiAoYXJndW1l
bnRzUmVnaXN0ZXIgPT0gdmFyaWFibGVBY2Nlc3NEYXRhLT5sb2NhbCgpKQpAQCAtNzY4LDM4ICs3
NjEsMzcgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICAKLSAg
ICB2b2lkIHJlbW92ZUFyZ3VtZW50c1JlZmVyZW5jaW5nUGhhbnRvbUNoaWxkKE5vZGUmIG5vZGUs
IHVuc2lnbmVkIGVkZ2VJbmRleCkKKyAgICB2b2lkIHJlbW92ZUFyZ3VtZW50c1JlZmVyZW5jaW5n
UGhhbnRvbUNoaWxkKE5vZGUqIG5vZGUsIHVuc2lnbmVkIGVkZ2VJbmRleCkKICAgICB7Ci0gICAg
ICAgIEVkZ2UgZWRnZSA9IG5vZGUuY2hpbGRyZW4uY2hpbGQoZWRnZUluZGV4KTsKKyAgICAgICAg
RWRnZSBlZGdlID0gbm9kZS0+Y2hpbGRyZW4uY2hpbGQoZWRnZUluZGV4KTsKICAgICAgICAgaWYg
KCFlZGdlKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAKLSAgICAgICAgTm9kZSYgY2hp
bGQgPSBtX2dyYXBoW2VkZ2VdOwotICAgICAgICBzd2l0Y2ggKGNoaWxkLm9wKCkpIHsKKyAgICAg
ICAgc3dpdGNoIChlZGdlLT5vcCgpKSB7CiAgICAgICAgIGNhc2UgUGhpOiAvLyBBcmlzZXMgaWYg
d2UgaGFkIENTRSBvbiBhIEdldExvY2FsIG9mIHRoZSBhcmd1bWVudHMgcmVnaXN0ZXIuCiAgICAg
ICAgIGNhc2UgR2V0TG9jYWw6IC8vIEFyaXNlcyBpZiB3ZSBoYWQgQ1NFIG9uIGFuIGFyZ3VtZW50
cyBhY2Nlc3MgdG8gYSB2YXJpYWJsZSBhbGlhc2VkIHRvIHRoZSBhcmd1bWVudHMuCiAgICAgICAg
IGNhc2UgU2V0TG9jYWw6IHsgLy8gQXJpc2VzIGlmIHdlIGhhZCBDU0Ugb24gYSBHZXRMb2NhbCBv
ZiB0aGUgYXJndW1lbnRzIHJlZ2lzdGVyLgotICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRh
KiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBjaGlsZC52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKKyAgICAg
ICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhID0gZWRnZS0+dmFy
aWFibGVBY2Nlc3NEYXRhKCk7CiAgICAgICAgICAgICBib29sIGlzRGVhZEFyZ3VtZW50c1JlZ2lz
dGVyID0KICAgICAgICAgICAgICAgICB2YXJpYWJsZUFjY2Vzc0RhdGEtPmxvY2FsKCkgPT0KLSAg
ICAgICAgICAgICAgICAgICAgbV9ncmFwaC51bmNoZWNrZWRBcmd1bWVudHNSZWdpc3RlckZvcihj
aGlsZC5jb2RlT3JpZ2luKQotICAgICAgICAgICAgICAgICYmICFtX2NyZWF0ZXNBcmd1bWVudHMu
Y29udGFpbnMoY2hpbGQuY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpOworICAgICAgICAgICAg
ICAgICAgICBtX2dyYXBoLnVuY2hlY2tlZEFyZ3VtZW50c1JlZ2lzdGVyRm9yKGVkZ2UtPmNvZGVP
cmlnaW4pCisgICAgICAgICAgICAgICAgJiYgIW1fY3JlYXRlc0FyZ3VtZW50cy5jb250YWlucyhl
ZGdlLT5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSk7CiAgICAgICAgICAgICBib29sIGlzQWxp
YXNlZEFyZ3VtZW50c1JlZ2lzdGVyID0KICAgICAgICAgICAgICAgICAhdmFyaWFibGVBY2Nlc3NE
YXRhLT5pc0NhcHR1cmVkKCkKICAgICAgICAgICAgICAgICAmJiBtX2FyZ3VtZW50c0FsaWFzaW5n
LmZpbmQodmFyaWFibGVBY2Nlc3NEYXRhKS0+dmFsdWUuaXNWYWxpZCgpCi0gICAgICAgICAgICAg
ICAgJiYgIW1fY3JlYXRlc0FyZ3VtZW50cy5jb250YWlucyhjaGlsZC5jb2RlT3JpZ2luLmlubGlu
ZUNhbGxGcmFtZSk7CisgICAgICAgICAgICAgICAgJiYgIW1fY3JlYXRlc0FyZ3VtZW50cy5jb250
YWlucyhlZGdlLT5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSk7CiAgICAgICAgICAgICBpZiAo
IWlzRGVhZEFyZ3VtZW50c1JlZ2lzdGVyICYmICFpc0FsaWFzZWRBcmd1bWVudHNSZWdpc3RlcikK
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIG1fZ3JhcGguZGVyZWYoZWRnZSk7
Ci0gICAgICAgICAgICBub2RlLmNoaWxkcmVuLnJlbW92ZUVkZ2VGcm9tQmFnKGVkZ2VJbmRleCk7
CisgICAgICAgICAgICBub2RlLT5jaGlsZHJlbi5yZW1vdmVFZGdlRnJvbUJhZyhlZGdlSW5kZXgp
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBj
YXNlIENyZWF0ZUFyZ3VtZW50czogeyAvLyBBcmlzZXMgaWYgd2UgQ1NFIHR3byBHZXRMb2NhbHMg
dG8gdGhlIGFyZ3VtZW50cyByZWdpc3RlciBhbmQgdGhlbiBDU0UgdGhlIHNlY29uZCB1c2Ugb2Yg
dGhlIEdldExvY2FsIHRvIHRoZSBmaXJzdC4KLSAgICAgICAgICAgIGlmIChtX2NyZWF0ZXNBcmd1
bWVudHMuY29udGFpbnMoY2hpbGQuY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpKQorICAgICAg
ICAgICAgaWYgKG1fY3JlYXRlc0FyZ3VtZW50cy5jb250YWlucyhlZGdlLT5jb2RlT3JpZ2luLmlu
bGluZUNhbGxGcmFtZSkpCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBtX2dy
YXBoLmRlcmVmKGVkZ2UpOwotICAgICAgICAgICAgbm9kZS5jaGlsZHJlbi5yZW1vdmVFZGdlRnJv
bUJhZyhlZGdlSW5kZXgpOworICAgICAgICAgICAgbm9kZS0+Y2hpbGRyZW4ucmVtb3ZlRWRnZUZy
b21CYWcoZWRnZUluZGV4KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAg
ICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlNb2RlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FycmF5TW9kZS5jcHAJ
KHJldmlzaW9uIDE0MTA1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlN
b2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQxLDE5ICsyNDEsMTkgQEAgU3RydWN0dXJlKiBB
cnJheU1vZGU6Om9yaWdpbmFsQXJyYXlTdHJ1YwogICAgIH0KIH0KIAotU3RydWN0dXJlKiBBcnJh
eU1vZGU6Om9yaWdpbmFsQXJyYXlTdHJ1Y3R1cmUoR3JhcGgmIGdyYXBoLCBOb2RlJiBub2RlKSBj
b25zdAorU3RydWN0dXJlKiBBcnJheU1vZGU6Om9yaWdpbmFsQXJyYXlTdHJ1Y3R1cmUoR3JhcGgm
IGdyYXBoLCBOb2RlKiBub2RlKSBjb25zdAogewotICAgIHJldHVybiBvcmlnaW5hbEFycmF5U3Ry
dWN0dXJlKGdyYXBoLCBub2RlLmNvZGVPcmlnaW4pOworICAgIHJldHVybiBvcmlnaW5hbEFycmF5
U3RydWN0dXJlKGdyYXBoLCBub2RlLT5jb2RlT3JpZ2luKTsKIH0KIAotYm9vbCBBcnJheU1vZGU6
OmFscmVhZHlDaGVja2VkKEdyYXBoJiBncmFwaCwgTm9kZSYgbm9kZSwgQWJzdHJhY3RWYWx1ZSYg
dmFsdWUsIEluZGV4aW5nVHlwZSBzaGFwZSkgY29uc3QKK2Jvb2wgQXJyYXlNb2RlOjphbHJlYWR5
Q2hlY2tlZChHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUsIEFic3RyYWN0VmFsdWUmIHZhbHVlLCBJ
bmRleGluZ1R5cGUgc2hhcGUpIGNvbnN0CiB7CiAgICAgc3dpdGNoIChhcnJheUNsYXNzKCkpIHsK
ICAgICBjYXNlIEFycmF5OjpPcmlnaW5hbEFycmF5OgogICAgICAgICByZXR1cm4gdmFsdWUubV9j
dXJyZW50S25vd25TdHJ1Y3R1cmUuaGFzU2luZ2xldG9uKCkKICAgICAgICAgICAgICYmICh2YWx1
ZS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5zaW5nbGV0b24oKS0+aW5kZXhpbmdUeXBlKCkgJiBJ
bmRleGluZ1NoYXBlTWFzaykgPT0gc2hhcGUKICAgICAgICAgICAgICYmICh2YWx1ZS5tX2N1cnJl
bnRLbm93blN0cnVjdHVyZS5zaW5nbGV0b24oKS0+aW5kZXhpbmdUeXBlKCkgJiBJc0FycmF5KQot
ICAgICAgICAgICAgJiYgZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUuY29kZU9yaWdpbiktPmlz
T3JpZ2luYWxBcnJheVN0cnVjdHVyZSh2YWx1ZS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5zaW5n
bGV0b24oKSk7CisgICAgICAgICAgICAmJiBncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+Y29k
ZU9yaWdpbiktPmlzT3JpZ2luYWxBcnJheVN0cnVjdHVyZSh2YWx1ZS5tX2N1cnJlbnRLbm93blN0
cnVjdHVyZS5zaW5nbGV0b24oKSk7CiAgICAgICAgIAogICAgIGNhc2UgQXJyYXk6OkFycmF5Ogog
ICAgICAgICBpZiAoYXJyYXlNb2Rlc0FscmVhZHlDaGVja2VkKHZhbHVlLm1fYXJyYXlNb2Rlcywg
YXNBcnJheU1vZGVzKHNoYXBlIHwgSXNBcnJheSkpKQpAQCAtMjcwLDcgKzI3MCw3IEBAIGJvb2wg
QXJyYXlNb2RlOjphbHJlYWR5Q2hlY2tlZChHcmFwaCYgZ3IKICAgICB9CiB9CiAKLWJvb2wgQXJy
YXlNb2RlOjphbHJlYWR5Q2hlY2tlZChHcmFwaCYgZ3JhcGgsIE5vZGUmIG5vZGUsIEFic3RyYWN0
VmFsdWUmIHZhbHVlKSBjb25zdAorYm9vbCBBcnJheU1vZGU6OmFscmVhZHlDaGVja2VkKEdyYXBo
JiBncmFwaCwgTm9kZSogbm9kZSwgQWJzdHJhY3RWYWx1ZSYgdmFsdWUpIGNvbnN0CiB7CiAgICAg
c3dpdGNoICh0eXBlKCkpIHsKICAgICBjYXNlIEFycmF5OjpHZW5lcmljOgpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJheU1vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0FycmF5TW9kZS5oCShyZXZpc2lvbiAxNDEwNTIpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FycmF5TW9kZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xOTcsNyArMTk3LDcgQEAgcHVibGljOgogICAgIAogICAgIEFycmF5TW9kZSByZWZpbmUoU3Bl
Y3VsYXRlZFR5cGUgYmFzZSwgU3BlY3VsYXRlZFR5cGUgaW5kZXgsIFNwZWN1bGF0ZWRUeXBlIHZh
bHVlID0gU3BlY05vbmUsIE5vZGVGbGFncyA9IDApIGNvbnN0OwogICAgIAotICAgIGJvb2wgYWxy
ZWFkeUNoZWNrZWQoR3JhcGgmLCBOb2RlJiwgQWJzdHJhY3RWYWx1ZSYpIGNvbnN0OworICAgIGJv
b2wgYWxyZWFkeUNoZWNrZWQoR3JhcGgmLCBOb2RlKiwgQWJzdHJhY3RWYWx1ZSYpIGNvbnN0Owog
ICAgIAogICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwogICAgIApAQCAtMzQzLDcg
KzM0Myw3IEBAIHB1YmxpYzoKICAgICAKICAgICAvLyBSZXR1cm5zIDAgaWYgdGhpcyBpcyBub3Qg
T3JpZ2luYWxBcnJheS4KICAgICBTdHJ1Y3R1cmUqIG9yaWdpbmFsQXJyYXlTdHJ1Y3R1cmUoR3Jh
cGgmLCBjb25zdCBDb2RlT3JpZ2luJikgY29uc3Q7Ci0gICAgU3RydWN0dXJlKiBvcmlnaW5hbEFy
cmF5U3RydWN0dXJlKEdyYXBoJiwgTm9kZSYpIGNvbnN0OworICAgIFN0cnVjdHVyZSogb3JpZ2lu
YWxBcnJheVN0cnVjdHVyZShHcmFwaCYsIE5vZGUqKSBjb25zdDsKICAgICAKICAgICBib29sIGJl
bmVmaXRzRnJvbVN0cnVjdHVyZUNoZWNrKCkgY29uc3QKICAgICB7CkBAIC00MjIsNyArNDIyLDcg
QEAgcHJpdmF0ZToKICAgICAgICAgfQogICAgIH0KICAgICAKLSAgICBib29sIGFscmVhZHlDaGVj
a2VkKEdyYXBoJiwgTm9kZSYsIEFic3RyYWN0VmFsdWUmLCBJbmRleGluZ1R5cGUgc2hhcGUpIGNv
bnN0OworICAgIGJvb2wgYWxyZWFkeUNoZWNrZWQoR3JhcGgmLCBOb2RlKiwgQWJzdHJhY3RWYWx1
ZSYsIEluZGV4aW5nVHlwZSBzaGFwZSkgY29uc3Q7CiAgICAgCiAgICAgdW5pb24gewogICAgICAg
ICBzdHJ1Y3QgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJheWlmeVNs
b3dQYXRoR2VuZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdBcnJheWlmeVNsb3dQYXRoR2VuZXJhdG9yLmgJKHJldmlzaW9uIDE0MTA1MikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlpZnlTbG93UGF0aEdlbmVyYXRvci5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIw
MTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC00MywxMiArNDMsMTIgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBE
RkcgewogY2xhc3MgQXJyYXlpZnlTbG93UGF0aEdlbmVyYXRvciA6IHB1YmxpYyBKdW1waW5nU2xv
d1BhdGhHZW5lcmF0b3I8TWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0PiB7CiBwdWJsaWM6CiAgICAg
QXJyYXlpZnlTbG93UGF0aEdlbmVyYXRvcigKLSAgICAgICAgY29uc3QgTWFjcm9Bc3NlbWJsZXI6
Okp1bXBMaXN0JiBmcm9tLCBTcGVjdWxhdGl2ZUpJVCogaml0LCBOb2RlJiBub2RlLCBHUFJSZWcg
YmFzZUdQUiwKKyAgICAgICAgY29uc3QgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0JiBmcm9tLCBT
cGVjdWxhdGl2ZUpJVCogaml0LCBOb2RlKiBub2RlLCBHUFJSZWcgYmFzZUdQUiwKICAgICAgICAg
R1BSUmVnIHByb3BlcnR5R1BSLCBHUFJSZWcgdGVtcEdQUiwgR1BSUmVnIHN0cnVjdHVyZUdQUikK
ICAgICAgICAgOiBKdW1waW5nU2xvd1BhdGhHZW5lcmF0b3I8TWFjcm9Bc3NlbWJsZXI6Okp1bXBM
aXN0Pihmcm9tLCBqaXQpCi0gICAgICAgICwgbV9vcChub2RlLm9wKCkpCi0gICAgICAgICwgbV9h
cnJheU1vZGUobm9kZS5hcnJheU1vZGUoKSkKLSAgICAgICAgLCBtX3N0cnVjdHVyZShub2RlLm9w
KCkgPT0gQXJyYXlpZnlUb1N0cnVjdHVyZSA/IG5vZGUuc3RydWN0dXJlKCkgOiAwKQorICAgICAg
ICAsIG1fb3Aobm9kZS0+b3AoKSkKKyAgICAgICAgLCBtX2FycmF5TW9kZShub2RlLT5hcnJheU1v
ZGUoKSkKKyAgICAgICAgLCBtX3N0cnVjdHVyZShub2RlLT5vcCgpID09IEFycmF5aWZ5VG9TdHJ1
Y3R1cmUgPyBub2RlLT5zdHJ1Y3R1cmUoKSA6IDApCiAgICAgICAgICwgbV9iYXNlR1BSKGJhc2VH
UFIpCiAgICAgICAgICwgbV9wcm9wZXJ0eUdQUihwcm9wZXJ0eUdQUikKICAgICAgICAgLCBtX3Rl
bXBHUFIodGVtcEdQUikKQEAgLTYzLDEzICs2MywxMyBAQCBwdWJsaWM6CiAgICAgICAgICAgICBj
YXNlIEFycmF5OjpJbnQzMjoKICAgICAgICAgICAgIGNhc2UgQXJyYXk6OkRvdWJsZToKICAgICAg
ICAgICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3VvdXM6Ci0gICAgICAgICAgICAgICAgbV9iYWRQcm9w
ZXJ0eUp1bXAgPSBqaXQtPnNwZWN1bGF0aW9uQ2hlY2soVW5jb3VudGFibGUsIEpTVmFsdWVSZWdz
KCksIE5vTm9kZSk7CisgICAgICAgICAgICAgICAgbV9iYWRQcm9wZXJ0eUp1bXAgPSBqaXQtPnNw
ZWN1bGF0aW9uQ2hlY2soVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIDApOwogICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICBtX2JhZEluZGV4aW5nVHlwZUp1
bXAgPSBqaXQtPnNwZWN1bGF0aW9uQ2hlY2soQmFkSW5kZXhpbmdUeXBlLCBKU1ZhbHVlU291cmNl
Ojp1bmJveGVkQ2VsbChtX2Jhc2VHUFIpLCBOb05vZGUpOworICAgICAgICBtX2JhZEluZGV4aW5n
VHlwZUp1bXAgPSBqaXQtPnNwZWN1bGF0aW9uQ2hlY2soQmFkSW5kZXhpbmdUeXBlLCBKU1ZhbHVl
U291cmNlOjp1bmJveGVkQ2VsbChtX2Jhc2VHUFIpLCAwKTsKICAgICB9CiAgICAgCiBwcm90ZWN0
ZWQ6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suaAkocmV2
aXNpb24gMTQxMDUyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2Nr
LmgJKHdvcmtpbmcgY29weSkKQEAgLTQyLDcgKzQyLDcgQEAgY2xhc3MgR3JhcGg7CiAKIHR5cGVk
ZWYgVmVjdG9yIDxCbG9ja0luZGV4LCAyPiBQcmVkZWNlc3Nvckxpc3Q7CiAKLXN0cnVjdCBCYXNp
Y0Jsb2NrIDogVmVjdG9yPE5vZGVJbmRleCwgOD4geworc3RydWN0IEJhc2ljQmxvY2sgOiBWZWN0
b3I8Tm9kZSosIDg+IHsKICAgICBCYXNpY0Jsb2NrKHVuc2lnbmVkIGJ5dGVjb2RlQmVnaW4sIHVu
c2lnbmVkIG51bUFyZ3VtZW50cywgdW5zaWduZWQgbnVtTG9jYWxzKQogICAgICAgICA6IGJ5dGVj
b2RlQmVnaW4oYnl0ZWNvZGVCZWdpbikKICAgICAgICAgLCBpc09TUlRhcmdldChmYWxzZSkKQEAg
LTc1LDcgKzc1LDcgQEAgc3RydWN0IEJhc2ljQmxvY2sgOiBWZWN0b3I8Tm9kZUluZGV4LCA4Pgog
ICAgIH0KICAgICAKICAgICBzaXplX3QgbnVtTm9kZXMoKSBjb25zdCB7IHJldHVybiBwaGlzLnNp
emUoKSArIHNpemUoKTsgfQotICAgIE5vZGVJbmRleCBub2RlSW5kZXgoc2l6ZV90IGkpIGNvbnN0
CisgICAgTm9kZSogbm9kZShzaXplX3QgaSkgY29uc3QKICAgICB7CiAgICAgICAgIGlmIChpIDwg
cGhpcy5zaXplKCkpCiAgICAgICAgICAgICByZXR1cm4gcGhpc1tpXTsKQEAgLTgzLDI2ICs4Mywy
NiBAQCBzdHJ1Y3QgQmFzaWNCbG9jayA6IFZlY3RvcjxOb2RlSW5kZXgsIDg+CiAgICAgfQogICAg
IGJvb2wgaXNQaGlJbmRleChzaXplX3QgaSkgY29uc3QgeyByZXR1cm4gaSA8IHBoaXMuc2l6ZSgp
OyB9CiAgICAgCi0gICAgYm9vbCBpc0luUGhpcyhOb2RlSW5kZXggbm9kZUluZGV4KSBjb25zdAor
ICAgIGJvb2wgaXNJblBoaXMoTm9kZSogbm9kZSkgY29uc3QKICAgICB7CiAgICAgICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgcGhpcy5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgaWYgKHBo
aXNbaV0gPT0gbm9kZUluZGV4KQorICAgICAgICAgICAgaWYgKHBoaXNbaV0gPT0gbm9kZSkKICAg
ICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgfQogICAgIAotICAgIGJvb2wgaXNJbkJsb2NrKE5vZGVJbmRleCBpbmRleCkgY29u
c3QKKyAgICBib29sIGlzSW5CbG9jayhOb2RlKiBteU5vZGUpIGNvbnN0CiAgICAgewogICAgICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bU5vZGVzKCk7ICsraSkgewotICAgICAgICAgICAg
aWYgKG5vZGVJbmRleChpKSA9PSBpbmRleCkKKyAgICAgICAgICAgIGlmIChub2RlKGkpID09IG15
Tm9kZSkKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIAogI2RlZmluZSBERkdfREVGSU5FX0FQUEVORF9OT0RF
KHRlbXBsYXRlUHJlLCB0ZW1wbGF0ZVBvc3QsIHR5cGVQYXJhbXMsIHZhbHVlUGFyYW1zQ29tbWEs
IHZhbHVlUGFyYW1zLCB2YWx1ZUFyZ3MpIFwKLSAgICB0ZW1wbGF0ZVByZSB0eXBlUGFyYW1zIHRl
bXBsYXRlUG9zdCBOb2RlSW5kZXggYXBwZW5kTm9kZShHcmFwaCYsIFJlZkNoaWxkcmVuTW9kZSwg
UmVmTm9kZU1vZGUsIFNwZWN1bGF0ZWRUeXBlIHZhbHVlUGFyYW1zQ29tbWEgdmFsdWVQYXJhbXMp
OworICAgIHRlbXBsYXRlUHJlIHR5cGVQYXJhbXMgdGVtcGxhdGVQb3N0IE5vZGUqIGFwcGVuZE5v
ZGUoR3JhcGgmLCBSZWZDaGlsZHJlbk1vZGUsIFJlZk5vZGVNb2RlLCBTcGVjdWxhdGVkVHlwZSB2
YWx1ZVBhcmFtc0NvbW1hIHZhbHVlUGFyYW1zKTsKICAgICBERkdfVkFSSUFESUNfVEVNUExBVEVf
RlVOQ1RJT04oREZHX0RFRklORV9BUFBFTkRfTk9ERSkKICN1bmRlZiBERkdfREVGSU5FX0FQUEVO
RF9OT0RFCiAgICAgCkBAIC0xMjEsMTEgKzEyMSwxMSBAQCBzdHJ1Y3QgQmFzaWNCbG9jayA6IFZl
Y3RvcjxOb2RlSW5kZXgsIDg+CiAjZW5kaWYKICAgICBib29sIGlzUmVhY2hhYmxlOwogICAgIAot
ICAgIFZlY3RvcjxOb2RlSW5kZXg+IHBoaXM7CisgICAgVmVjdG9yPE5vZGUqPiBwaGlzOwogICAg
IFByZWRlY2Vzc29yTGlzdCBtX3ByZWRlY2Vzc29yczsKICAgICAKLSAgICBPcGVyYW5kczxOb2Rl
SW5kZXgsIE5vZGVJbmRleFRyYWl0cz4gdmFyaWFibGVzQXRIZWFkOwotICAgIE9wZXJhbmRzPE5v
ZGVJbmRleCwgTm9kZUluZGV4VHJhaXRzPiB2YXJpYWJsZXNBdFRhaWw7CisgICAgT3BlcmFuZHM8
Tm9kZSosIE5vZGVQb2ludGVyVHJhaXRzPiB2YXJpYWJsZXNBdEhlYWQ7CisgICAgT3BlcmFuZHM8
Tm9kZSosIE5vZGVQb2ludGVyVHJhaXRzPiB2YXJpYWJsZXNBdFRhaWw7CiAgICAgCiAgICAgT3Bl
cmFuZHM8QWJzdHJhY3RWYWx1ZT4gdmFsdWVzQXRIZWFkOwogICAgIE9wZXJhbmRzPEFic3RyYWN0
VmFsdWU+IHZhbHVlc0F0VGFpbDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
QmFzaWNCbG9ja0lubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0Jhc2ljQmxvY2tJbmxpbmVzLmgJKHJldmlzaW9uIDE0MTA1MikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9ja0lubGluZXMuaAkod29ya2luZyBjb3B5KQpA
QCAtMzQsOSArMzQsOSBAQAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCiAjZGVm
aW5lIERGR19ERUZJTkVfQVBQRU5EX05PREUodGVtcGxhdGVQcmUsIHRlbXBsYXRlUG9zdCwgdHlw
ZVBhcmFtcywgdmFsdWVQYXJhbXNDb21tYSwgdmFsdWVQYXJhbXMsIHZhbHVlQXJncykgXAotICAg
IHRlbXBsYXRlUHJlIHR5cGVQYXJhbXMgdGVtcGxhdGVQb3N0IE5vZGVJbmRleCBCYXNpY0Jsb2Nr
OjphcHBlbmROb2RlKEdyYXBoJiBncmFwaCwgUmVmQ2hpbGRyZW5Nb2RlIHJlZkNoaWxkcmVuTW9k
ZSwgUmVmTm9kZU1vZGUgcmVmTm9kZU1vZGUsIFNwZWN1bGF0ZWRUeXBlIHR5cGUgdmFsdWVQYXJh
bXNDb21tYSB2YWx1ZVBhcmFtcykgXAorICAgIHRlbXBsYXRlUHJlIHR5cGVQYXJhbXMgdGVtcGxh
dGVQb3N0IE5vZGUqIEJhc2ljQmxvY2s6OmFwcGVuZE5vZGUoR3JhcGgmIGdyYXBoLCBSZWZDaGls
ZHJlbk1vZGUgcmVmQ2hpbGRyZW5Nb2RlLCBSZWZOb2RlTW9kZSByZWZOb2RlTW9kZSwgU3BlY3Vs
YXRlZFR5cGUgdHlwZSB2YWx1ZVBhcmFtc0NvbW1hIHZhbHVlUGFyYW1zKSBcCiAgICAgeyBcCi0g
ICAgICAgIE5vZGVJbmRleCByZXN1bHQgPSBncmFwaC5hZGROb2RlKHJlZkNoaWxkcmVuTW9kZSwg
cmVmTm9kZU1vZGUsIHR5cGUgdmFsdWVQYXJhbXNDb21tYSB2YWx1ZUFyZ3MpOyBcCisgICAgICAg
IE5vZGUqIHJlc3VsdCA9IGdyYXBoLmFkZE5vZGUocmVmQ2hpbGRyZW5Nb2RlLCByZWZOb2RlTW9k
ZSwgdHlwZSB2YWx1ZVBhcmFtc0NvbW1hIHZhbHVlQXJncyk7IFwKICAgICAgICAgYXBwZW5kKHJl
c3VsdCk7IFwKICAgICAgICAgcmV0dXJuIHJlc3VsdDsgXAogICAgIH0KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCShyZXZpc2lvbiAx
NDEwNTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTYxLDI2ICsxNjEsMjYgQEAgcHJpdmF0ZToKICAgICAKICAg
ICAvLyBIYW5kbGUgY2FsbHMuIFRoaXMgcmVzb2x2ZXMgaXNzdWVzIHN1cnJvdW5kaW5nIGlubGlu
aW5nIGFuZCBpbnRyaW5zaWNzLgogICAgIHZvaWQgaGFuZGxlQ2FsbChJbnRlcnByZXRlciosIElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIE5vZGVUeXBlIG9wLCBDb2RlU3BlY2lhbGl6
YXRpb25LaW5kKTsKLSAgICB2b2lkIGVtaXRGdW5jdGlvbkNoZWNrcyhjb25zdCBDYWxsTGlua1N0
YXR1cyYsIE5vZGVJbmRleCBjYWxsVGFyZ2V0LCBpbnQgcmVnaXN0ZXJPZmZzZXQsIENvZGVTcGVj
aWFsaXphdGlvbktpbmQpOworICAgIHZvaWQgZW1pdEZ1bmN0aW9uQ2hlY2tzKGNvbnN0IENhbGxM
aW5rU3RhdHVzJiwgTm9kZSogY2FsbFRhcmdldCwgaW50IHJlZ2lzdGVyT2Zmc2V0LCBDb2RlU3Bl
Y2lhbGl6YXRpb25LaW5kKTsKICAgICAvLyBIYW5kbGUgaW5saW5pbmcuIFJldHVybiB0cnVlIGlm
IGl0IHN1Y2NlZWRlZCwgZmFsc2UgaWYgd2UgbmVlZCB0byBwbGFudCBhIGNhbGwuCi0gICAgYm9v
bCBoYW5kbGVJbmxpbmluZyhib29sIHVzZXNSZXN1bHQsIE5vZGVJbmRleCBjYWxsVGFyZ2V0Tm9k
ZUluZGV4LCBpbnQgcmVzdWx0T3BlcmFuZCwgY29uc3QgQ2FsbExpbmtTdGF0dXMmLCBpbnQgcmVn
aXN0ZXJPZmZzZXQsIGludCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgdW5zaWduZWQgbmV4
dE9mZnNldCwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCk7CisgICAgYm9vbCBoYW5kbGVJbmxpbmlu
Zyhib29sIHVzZXNSZXN1bHQsIE5vZGUqIGNhbGxUYXJnZXROb2RlLCBpbnQgcmVzdWx0T3BlcmFu
ZCwgY29uc3QgQ2FsbExpbmtTdGF0dXMmLCBpbnQgcmVnaXN0ZXJPZmZzZXQsIGludCBhcmd1bWVu
dENvdW50SW5jbHVkaW5nVGhpcywgdW5zaWduZWQgbmV4dE9mZnNldCwgQ29kZVNwZWNpYWxpemF0
aW9uS2luZCk7CiAgICAgLy8gSGFuZGxlIHNldHRpbmcgdGhlIHJlc3VsdCBvZiBhbiBpbnRyaW5z
aWMuCi0gICAgdm9pZCBzZXRJbnRyaW5zaWNSZXN1bHQoYm9vbCB1c2VzUmVzdWx0LCBpbnQgcmVz
dWx0T3BlcmFuZCwgTm9kZUluZGV4KTsKKyAgICB2b2lkIHNldEludHJpbnNpY1Jlc3VsdChib29s
IHVzZXNSZXN1bHQsIGludCByZXN1bHRPcGVyYW5kLCBOb2RlKik7CiAgICAgLy8gSGFuZGxlIGlu
dHJpbnNpYyBmdW5jdGlvbnMuIFJldHVybiB0cnVlIGlmIGl0IHN1Y2NlZWRlZCwgZmFsc2UgaWYg
d2UgbmVlZCB0byBwbGFudCBhIGNhbGwuCiAgICAgYm9vbCBoYW5kbGVJbnRyaW5zaWMoYm9vbCB1
c2VzUmVzdWx0LCBpbnQgcmVzdWx0T3BlcmFuZCwgSW50cmluc2ljLCBpbnQgcmVnaXN0ZXJPZmZz
ZXQsIGludCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgU3BlY3VsYXRlZFR5cGUgcHJlZGlj
dGlvbik7CiAgICAgYm9vbCBoYW5kbGVDb25zdGFudEludGVybmFsRnVuY3Rpb24oYm9vbCB1c2Vz
UmVzdWx0LCBpbnQgcmVzdWx0T3BlcmFuZCwgSW50ZXJuYWxGdW5jdGlvbiosIGludCByZWdpc3Rl
ck9mZnNldCwgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBTcGVjdWxhdGVkVHlwZSBw
cmVkaWN0aW9uLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kKTsKLSAgICBOb2RlSW5kZXggaGFuZGxl
R2V0QnlPZmZzZXQoU3BlY3VsYXRlZFR5cGUsIE5vZGVJbmRleCBiYXNlLCB1bnNpZ25lZCBpZGVu
dGlmaWVyTnVtYmVyLCBQcm9wZXJ0eU9mZnNldCk7CisgICAgTm9kZSogaGFuZGxlR2V0QnlPZmZz
ZXQoU3BlY3VsYXRlZFR5cGUsIE5vZGUqIGJhc2UsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIs
IFByb3BlcnR5T2Zmc2V0KTsKICAgICB2b2lkIGhhbmRsZUdldEJ5T2Zmc2V0KAotICAgICAgICBp
bnQgZGVzdGluYXRpb25PcGVyYW5kLCBTcGVjdWxhdGVkVHlwZSwgTm9kZUluZGV4IGJhc2UsIHVu
c2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsCisgICAgICAgIGludCBkZXN0aW5hdGlvbk9wZXJhbmQs
IFNwZWN1bGF0ZWRUeXBlLCBOb2RlKiBiYXNlLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLAog
ICAgICAgICBQcm9wZXJ0eU9mZnNldCk7CiAgICAgdm9pZCBoYW5kbGVHZXRCeUlkKAotICAgICAg
ICBpbnQgZGVzdGluYXRpb25PcGVyYW5kLCBTcGVjdWxhdGVkVHlwZSwgTm9kZUluZGV4IGJhc2Us
IHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsCisgICAgICAgIGludCBkZXN0aW5hdGlvbk9wZXJh
bmQsIFNwZWN1bGF0ZWRUeXBlLCBOb2RlKiBiYXNlLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVy
LAogICAgICAgICBjb25zdCBHZXRCeUlkU3RhdHVzJik7CiAKLSAgICBOb2RlSW5kZXggZ2V0U2Nv
cGUoYm9vbCBza2lwVG9wLCB1bnNpZ25lZCBza2lwQ291bnQpOworICAgIE5vZGUqIGdldFNjb3Bl
KGJvb2wgc2tpcFRvcCwgdW5zaWduZWQgc2tpcENvdW50KTsKICAgICAKICAgICAvLyBDb252ZXJ0
IGEgc2V0IG9mIFJlc29sdmVPcGVyYXRpb25zIGludG8gZ3JhcGggbm9kZXMKLSAgICBib29sIHBh
cnNlUmVzb2x2ZU9wZXJhdGlvbnMoU3BlY3VsYXRlZFR5cGUsIHVuc2lnbmVkIGlkZW50aWZpZXJO
dW1iZXIsIHVuc2lnbmVkIG9wZXJhdGlvbnMsIHVuc2lnbmVkIHB1dFRvQmFzZU9wZXJhdGlvbiwg
Tm9kZUluZGV4KiBiYXNlLCBOb2RlSW5kZXgqIHZhbHVlKTsKKyAgICBib29sIHBhcnNlUmVzb2x2
ZU9wZXJhdGlvbnMoU3BlY3VsYXRlZFR5cGUsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIHVu
c2lnbmVkIG9wZXJhdGlvbnMsIHVuc2lnbmVkIHB1dFRvQmFzZU9wZXJhdGlvbiwgTm9kZSoqIGJh
c2UsIE5vZGUqKiB2YWx1ZSk7CiAKICAgICAvLyBQcmVwYXJlIHRvIHBhcnNlIGEgYmxvY2suCiAg
ICAgdm9pZCBwcmVwYXJlVG9QYXJzZUJsb2NrKCk7CkBAIC0yMTAsNyArMjEwLDcgQEAgcHJpdmF0
ZToKICAgICB9CiAgICAgCiAgICAgLy8gR2V0L1NldCB0aGUgb3BlcmFuZHMvcmVzdWx0IG9mIGEg
Ynl0ZWNvZGUgaW5zdHJ1Y3Rpb24uCi0gICAgTm9kZUluZGV4IGdldERpcmVjdChpbnQgb3BlcmFu
ZCkKKyAgICBOb2RlKiBnZXREaXJlY3QoaW50IG9wZXJhbmQpCiAgICAgewogICAgICAgICAvLyBJ
cyB0aGlzIGEgY29uc3RhbnQ/CiAgICAgICAgIGlmIChvcGVyYW5kID49IEZpcnN0Q29uc3RhbnRS
ZWdpc3RlckluZGV4KSB7CkBAIC0yMjgsNyArMjI4LDcgQEAgcHJpdmF0ZToKICAgICAgICAgLy8g
TXVzdCBiZSBhIGxvY2FsLgogICAgICAgICByZXR1cm4gZ2V0TG9jYWwoKHVuc2lnbmVkKW9wZXJh
bmQpOwogICAgIH0KLSAgICBOb2RlSW5kZXggZ2V0KGludCBvcGVyYW5kKQorICAgIE5vZGUqIGdl
dChpbnQgb3BlcmFuZCkKICAgICB7CiAgICAgICAgIGlmIChvcGVyYW5kID09IEpTU3RhY2s6OkNh
bGxlZSkgewogICAgICAgICAgICAgaWYgKG1faW5saW5lU3RhY2tUb3AtPm1faW5saW5lQ2FsbEZy
YW1lICYmIG1faW5saW5lU3RhY2tUb3AtPm1faW5saW5lQ2FsbEZyYW1lLT5jYWxsZWUpCkBAIC0y
NDAsNyArMjQwLDcgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIGdldERpcmVjdChtX2lubGlu
ZVN0YWNrVG9wLT5yZW1hcE9wZXJhbmQob3BlcmFuZCkpOwogICAgIH0KICAgICBlbnVtIFNldE1v
ZGUgeyBOb3JtYWxTZXQsIFNldE9uRW50cnkgfTsKLSAgICB2b2lkIHNldERpcmVjdChpbnQgb3Bl
cmFuZCwgTm9kZUluZGV4IHZhbHVlLCBTZXRNb2RlIHNldE1vZGUgPSBOb3JtYWxTZXQpCisgICAg
dm9pZCBzZXREaXJlY3QoaW50IG9wZXJhbmQsIE5vZGUqIHZhbHVlLCBTZXRNb2RlIHNldE1vZGUg
PSBOb3JtYWxTZXQpCiAgICAgewogICAgICAgICAvLyBJcyB0aGlzIGFuIGFyZ3VtZW50PwogICAg
ICAgICBpZiAob3BlcmFuZElzQXJndW1lbnQob3BlcmFuZCkpIHsKQEAgLTI1MSwxMiArMjUxLDEy
IEBAIHByaXZhdGU6CiAgICAgICAgIC8vIE11c3QgYmUgYSBsb2NhbC4KICAgICAgICAgc2V0TG9j
YWwoKHVuc2lnbmVkKW9wZXJhbmQsIHZhbHVlLCBzZXRNb2RlKTsKICAgICB9Ci0gICAgdm9pZCBz
ZXQoaW50IG9wZXJhbmQsIE5vZGVJbmRleCB2YWx1ZSwgU2V0TW9kZSBzZXRNb2RlID0gTm9ybWFs
U2V0KQorICAgIHZvaWQgc2V0KGludCBvcGVyYW5kLCBOb2RlKiB2YWx1ZSwgU2V0TW9kZSBzZXRN
b2RlID0gTm9ybWFsU2V0KQogICAgIHsKICAgICAgICAgc2V0RGlyZWN0KG1faW5saW5lU3RhY2tU
b3AtPnJlbWFwT3BlcmFuZChvcGVyYW5kKSwgdmFsdWUsIHNldE1vZGUpOwogICAgIH0KICAgICAK
LSAgICB2b2lkIHNldFBhaXIoaW50IG9wZXJhbmQxLCBOb2RlSW5kZXggdmFsdWUxLCBpbnQgb3Bl
cmFuZDIsIE5vZGVJbmRleCB2YWx1ZTIpCisgICAgdm9pZCBzZXRQYWlyKGludCBvcGVyYW5kMSwg
Tm9kZSogdmFsdWUxLCBpbnQgb3BlcmFuZDIsIE5vZGUqIHZhbHVlMikKICAgICB7CiAgICAgICAg
IC8vIEZpcnN0IGVtaXQgZGVhZCBTZXRMb2NhbHMgZm9yIHRoZSBiZW5lZml0IG9mIE9TUi4KICAg
ICAgICAgc2V0KG9wZXJhbmQxLCB2YWx1ZTEpOwpAQCAtMjY3LDQ5ICsyNjcsNDQgQEAgcHJpdmF0
ZToKICAgICAgICAgc2V0KG9wZXJhbmQyLCB2YWx1ZTIpOwogICAgIH0KICAgICAKLSAgICBOb2Rl
SW5kZXggaW5qZWN0TGF6eU9wZXJhbmRTcGVjdWxhdGlvbihOb2RlSW5kZXggbm9kZUluZGV4KQor
ICAgIE5vZGUqIGluamVjdExhenlPcGVyYW5kU3BlY3VsYXRpb24oTm9kZSogbm9kZSkKICAgICB7
Ci0gICAgICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW25vZGVJbmRleF07Ci0gICAgICAgIEFTU0VS
VChub2RlLm9wKCkgPT0gR2V0TG9jYWwpOwotICAgICAgICBBU1NFUlQobm9kZS5jb2RlT3JpZ2lu
LmJ5dGVjb2RlSW5kZXggPT0gbV9jdXJyZW50SW5kZXgpOworICAgICAgICBBU1NFUlQobm9kZS0+
b3AoKSA9PSBHZXRMb2NhbCk7CisgICAgICAgIEFTU0VSVChub2RlLT5jb2RlT3JpZ2luLmJ5dGVj
b2RlSW5kZXggPT0gbV9jdXJyZW50SW5kZXgpOwogICAgICAgICBTcGVjdWxhdGVkVHlwZSBwcmVk
aWN0aW9uID0gCiAgICAgICAgICAgICBtX2lubGluZVN0YWNrVG9wLT5tX2xhenlPcGVyYW5kcy5w
cmVkaWN0aW9uKAotICAgICAgICAgICAgICAgIExhenlPcGVyYW5kVmFsdWVQcm9maWxlS2V5KG1f
Y3VycmVudEluZGV4LCBub2RlLmxvY2FsKCkpKTsKKyAgICAgICAgICAgICAgICBMYXp5T3BlcmFu
ZFZhbHVlUHJvZmlsZUtleShtX2N1cnJlbnRJbmRleCwgbm9kZS0+bG9jYWwoKSkpOwogI2lmIERG
R19FTkFCTEUoREVCVUdfVkVSQk9TRSkKLSAgICAgICAgZGF0YUxvZygiTGF6eSBvcGVyYW5kIFtA
Iiwgbm9kZUluZGV4LCAiLCBiYyMiLCBtX2N1cnJlbnRJbmRleCwgIiwgciIsIG5vZGUubG9jYWwo
KSwgIl0gcHJlZGljdGlvbjogIiwgU3BlY3VsYXRpb25EdW1wKHByZWRpY3Rpb24pLCAiXG4iKTsK
KyAgICAgICAgZGF0YUxvZygiTGF6eSBvcGVyYW5kIFtAIiwgbm9kZS0+aW5kZXgoKSwgIiwgYmMj
IiwgbV9jdXJyZW50SW5kZXgsICIsIHIiLCBub2RlLT5sb2NhbCgpLCAiXSBwcmVkaWN0aW9uOiAi
LCBTcGVjdWxhdGlvbkR1bXAocHJlZGljdGlvbiksICJcbiIpOwogI2VuZGlmCi0gICAgICAgIG5v
ZGUudmFyaWFibGVBY2Nlc3NEYXRhKCktPnByZWRpY3QocHJlZGljdGlvbik7Ci0gICAgICAgIHJl
dHVybiBub2RlSW5kZXg7CisgICAgICAgIG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5wcmVk
aWN0KHByZWRpY3Rpb24pOworICAgICAgICByZXR1cm4gbm9kZTsKICAgICB9CiAKICAgICAvLyBV
c2VkIGluIGltcGxlbWVudGluZyBnZXQvc2V0LCBhYm92ZSwgd2hlcmUgdGhlIG9wZXJhbmQgaXMg
YSBsb2NhbCB2YXJpYWJsZS4KLSAgICBOb2RlSW5kZXggZ2V0TG9jYWwodW5zaWduZWQgb3BlcmFu
ZCkKKyAgICBOb2RlKiBnZXRMb2NhbCh1bnNpZ25lZCBvcGVyYW5kKQogICAgIHsKLSAgICAgICAg
Tm9kZUluZGV4IG5vZGVJbmRleCA9IG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwubG9j
YWwob3BlcmFuZCk7CisgICAgICAgIE5vZGUqIG5vZGUgPSBtX2N1cnJlbnRCbG9jay0+dmFyaWFi
bGVzQXRUYWlsLmxvY2FsKG9wZXJhbmQpOwogICAgICAgICBib29sIGlzQ2FwdHVyZWQgPSBtX2Nv
ZGVCbG9jay0+aXNDYXB0dXJlZChvcGVyYW5kLCBtX2lubGluZVN0YWNrVG9wLT5tX2lubGluZUNh
bGxGcmFtZSk7CiAgICAgICAgIAotICAgICAgICBpZiAobm9kZUluZGV4ICE9IE5vTm9kZSkgewot
ICAgICAgICAgICAgTm9kZSogbm9kZVB0ciA9ICZtX2dyYXBoW25vZGVJbmRleF07Ci0gICAgICAg
ICAgICBpZiAobm9kZVB0ci0+b3AoKSA9PSBGbHVzaCkgeworICAgICAgICBpZiAobm9kZSkgewor
ICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gRmx1c2gpIHsKICAgICAgICAgICAgICAgICAv
LyBUd28gcG9zc2liaWxpdGllczogZWl0aGVyIHRoZSBibG9jayB3YW50cyB0aGUgbG9jYWwgdG8g
YmUgbGl2ZQogICAgICAgICAgICAgICAgIC8vIGJ1dCBoYXMgbm90IGxvYWRlZCBpdHMgdmFsdWUs
IG9yIGl0IGhhcyBsb2FkZWQgaXRzIHZhbHVlLCBpbgogICAgICAgICAgICAgICAgIC8vIHdoaWNo
IGNhc2Ugd2UncmUgZG9uZS4KLSAgICAgICAgICAgICAgICBub2RlSW5kZXggPSBub2RlUHRyLT5j
aGlsZDEoKS5pbmRleCgpOwotICAgICAgICAgICAgICAgIE5vZGUmIGZsdXNoQ2hpbGQgPSBtX2dy
YXBoW25vZGVJbmRleF07Ci0gICAgICAgICAgICAgICAgaWYgKGZsdXNoQ2hpbGQub3AoKSA9PSBQ
aGkpIHsKLSAgICAgICAgICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFj
Y2Vzc0RhdGEgPSBmbHVzaENoaWxkLnZhcmlhYmxlQWNjZXNzRGF0YSgpOworICAgICAgICAgICAg
ICAgIG5vZGUgPSBub2RlLT5jaGlsZDEoKS5ub2RlKCk7CisgICAgICAgICAgICAgICAgaWYgKG5v
ZGUtPm9wKCkgPT0gUGhpKSB7CisgICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0
YSogdmFyaWFibGVBY2Nlc3NEYXRhID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CiAgICAg
ICAgICAgICAgICAgICAgIHZhcmlhYmxlQWNjZXNzRGF0YS0+bWVyZ2VJc0NhcHR1cmVkKGlzQ2Fw
dHVyZWQpOwotICAgICAgICAgICAgICAgICAgICBub2RlSW5kZXggPSBpbmplY3RMYXp5T3BlcmFu
ZFNwZWN1bGF0aW9uKGFkZFRvR3JhcGgoR2V0TG9jYWwsIE9wSW5mbyh2YXJpYWJsZUFjY2Vzc0Rh
dGEpLCBub2RlSW5kZXgpKTsKLSAgICAgICAgICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPnZh
cmlhYmxlc0F0VGFpbC5sb2NhbChvcGVyYW5kKSA9IG5vZGVJbmRleDsKLSAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIG5vZGVJbmRleDsKKyAgICAgICAgICAgICAgICAgICAgbm9kZSA9IGluamVj
dExhenlPcGVyYW5kU3BlY3VsYXRpb24oYWRkVG9HcmFwaChHZXRMb2NhbCwgT3BJbmZvKHZhcmlh
YmxlQWNjZXNzRGF0YSksIG5vZGUpKTsKKyAgICAgICAgICAgICAgICAgICAgbV9jdXJyZW50Qmxv
Y2stPnZhcmlhYmxlc0F0VGFpbC5sb2NhbChvcGVyYW5kKSA9IG5vZGU7CisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBub2RlOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBu
b2RlUHRyID0gJmZsdXNoQ2hpbGQ7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAg
ICAgICAgIEFTU0VSVCgmbV9ncmFwaFtub2RlSW5kZXhdID09IG5vZGVQdHIpOwotICAgICAgICAg
ICAgQVNTRVJUKG5vZGVQdHItPm9wKCkgIT0gRmx1c2gpOworICAgICAgICAgICAgQVNTRVJUKG5v
ZGUtPm9wKCkgIT0gRmx1c2gpOwogCi0gICAgICAgICAgICBub2RlUHRyLT52YXJpYWJsZUFjY2Vz
c0RhdGEoKS0+bWVyZ2VJc0NhcHR1cmVkKGlzQ2FwdHVyZWQpOworICAgICAgICAgICAgbm9kZS0+
dmFyaWFibGVBY2Nlc3NEYXRhKCktPm1lcmdlSXNDYXB0dXJlZChpc0NhcHR1cmVkKTsKICAgICAg
ICAgICAgICAgICAKICAgICAgICAgICAgIGlmIChpc0NhcHR1cmVkKSB7CiAgICAgICAgICAgICAg
ICAgLy8gV2Ugd2lzaCB0byB1c2UgdGhlIHNhbWUgdmFyaWFibGUgYWNjZXNzIGRhdGEgYXMgdGhl
IHByZXZpb3VzIGFjY2VzcywKQEAgLTMxNywxOSArMzEyLDE5IEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICAgICAgLy8ga25vdywgYXQgdGhpcyBzdGFnZSBvZiBjb21waWxhdGlvbiwgdGhlIGxvY2Fs
IGhhcyBiZWVuIGNsb2JiZXJlZC4KICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAv
LyBNYWtlIHN1cmUgd2UgbGluayB0byB0aGUgUGhpIG5vZGUsIG5vdCB0byB0aGUgR2V0TG9jYWwu
Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGVQdHItPm9wKCkgPT0gR2V0TG9jYWwpCi0gICAgICAg
ICAgICAgICAgICAgIG5vZGVJbmRleCA9IG5vZGVQdHItPmNoaWxkMSgpLmluZGV4KCk7CisgICAg
ICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gR2V0TG9jYWwpCisgICAgICAgICAgICAgICAg
ICAgIG5vZGUgPSBub2RlLT5jaGlsZDEoKS5ub2RlKCk7CiAgICAgICAgICAgICAgICAgCi0gICAg
ICAgICAgICAgICAgTm9kZUluZGV4IG5ld0dldExvY2FsID0gaW5qZWN0TGF6eU9wZXJhbmRTcGVj
dWxhdGlvbigKLSAgICAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChHZXRMb2NhbCwgT3BJbmZv
KG5vZGVQdHItPnZhcmlhYmxlQWNjZXNzRGF0YSgpKSwgbm9kZUluZGV4KSk7CisgICAgICAgICAg
ICAgICAgTm9kZSogbmV3R2V0TG9jYWwgPSBpbmplY3RMYXp5T3BlcmFuZFNwZWN1bGF0aW9uKAor
ICAgICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKEdldExvY2FsLCBPcEluZm8obm9kZS0+dmFy
aWFibGVBY2Nlc3NEYXRhKCkpLCBub2RlKSk7CiAgICAgICAgICAgICAgICAgbV9jdXJyZW50Qmxv
Y2stPnZhcmlhYmxlc0F0VGFpbC5sb2NhbChvcGVyYW5kKSA9IG5ld0dldExvY2FsOwogICAgICAg
ICAgICAgICAgIHJldHVybiBuZXdHZXRMb2NhbDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IAotICAgICAgICAgICAgaWYgKG5vZGVQdHItPm9wKCkgPT0gR2V0TG9jYWwpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIG5vZGVJbmRleDsKLSAgICAgICAgICAgIEFTU0VSVChub2RlUHRyLT5vcCgp
ID09IFNldExvY2FsKTsKLSAgICAgICAgICAgIHJldHVybiBub2RlUHRyLT5jaGlsZDEoKS5pbmRl
eCgpOworICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gR2V0TG9jYWwpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIG5vZGU7CisgICAgICAgICAgICBBU1NFUlQobm9kZS0+b3AoKSA9PSBTZXRM
b2NhbCk7CisgICAgICAgICAgICByZXR1cm4gbm9kZS0+Y2hpbGQxKCkubm9kZSgpOwogICAgICAg
ICB9CiAKICAgICAgICAgLy8gQ2hlY2sgZm9yIHJlYWRzIG9mIHRlbXBvcmFyaWVzIGZyb20gcHJp
b3IgYmxvY2tzLApAQCAtMzM4LDE2ICszMzMsMTYgQEAgcHJpdmF0ZToKICAgICAgICAgCiAgICAg
ICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhID0gbmV3VmFyaWFibGVB
Y2Nlc3NEYXRhKG9wZXJhbmQsIGlzQ2FwdHVyZWQpOwogICAgICAgICAKLSAgICAgICAgTm9kZUlu
ZGV4IHBoaSA9IGFkZFRvR3JhcGgoUGhpLCBPcEluZm8odmFyaWFibGVBY2Nlc3NEYXRhKSk7Cisg
ICAgICAgIE5vZGUqIHBoaSA9IGFkZFRvR3JhcGgoUGhpLCBPcEluZm8odmFyaWFibGVBY2Nlc3NE
YXRhKSk7CiAgICAgICAgIG1fbG9jYWxQaGlTdGFjay5hcHBlbmQoUGhpU3RhY2tFbnRyeShtX2N1
cnJlbnRCbG9jaywgcGhpLCBvcGVyYW5kKSk7Ci0gICAgICAgIG5vZGVJbmRleCA9IGluamVjdExh
enlPcGVyYW5kU3BlY3VsYXRpb24oYWRkVG9HcmFwaChHZXRMb2NhbCwgT3BJbmZvKHZhcmlhYmxl
QWNjZXNzRGF0YSksIHBoaSkpOwotICAgICAgICBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRU
YWlsLmxvY2FsKG9wZXJhbmQpID0gbm9kZUluZGV4OworICAgICAgICBub2RlID0gaW5qZWN0TGF6
eU9wZXJhbmRTcGVjdWxhdGlvbihhZGRUb0dyYXBoKEdldExvY2FsLCBPcEluZm8odmFyaWFibGVB
Y2Nlc3NEYXRhKSwgcGhpKSk7CisgICAgICAgIG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRh
aWwubG9jYWwob3BlcmFuZCkgPSBub2RlOwogICAgICAgICAKLSAgICAgICAgbV9jdXJyZW50Qmxv
Y2stPnZhcmlhYmxlc0F0SGVhZC5zZXRMb2NhbEZpcnN0VGltZShvcGVyYW5kLCBub2RlSW5kZXgp
OworICAgICAgICBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRIZWFkLnNldExvY2FsRmlyc3RU
aW1lKG9wZXJhbmQsIG5vZGUpOwogICAgICAgICAKLSAgICAgICAgcmV0dXJuIG5vZGVJbmRleDsK
KyAgICAgICAgcmV0dXJuIG5vZGU7CiAgICAgfQotICAgIHZvaWQgc2V0TG9jYWwodW5zaWduZWQg
b3BlcmFuZCwgTm9kZUluZGV4IHZhbHVlLCBTZXRNb2RlIHNldE1vZGUgPSBOb3JtYWxTZXQpCisg
ICAgdm9pZCBzZXRMb2NhbCh1bnNpZ25lZCBvcGVyYW5kLCBOb2RlKiB2YWx1ZSwgU2V0TW9kZSBz
ZXRNb2RlID0gTm9ybWFsU2V0KQogICAgIHsKICAgICAgICAgYm9vbCBpc0NhcHR1cmVkID0gbV9j
b2RlQmxvY2stPmlzQ2FwdHVyZWQob3BlcmFuZCwgbV9pbmxpbmVTdGFja1RvcC0+bV9pbmxpbmVD
YWxsRnJhbWUpOwogICAgICAgICAKQEAgLTM2MCw3NyArMzU1LDczIEBAIHByaXZhdGU6CiAgICAg
ICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhID0gbmV3VmFyaWFibGVB
Y2Nlc3NEYXRhKG9wZXJhbmQsIGlzQ2FwdHVyZWQpOwogICAgICAgICB2YXJpYWJsZUFjY2Vzc0Rh
dGEtPm1lcmdlU3RydWN0dXJlQ2hlY2tIb2lzdGluZ0ZhaWxlZCgKICAgICAgICAgICAgIG1faW5s
aW5lU3RhY2tUb3AtPm1fZXhpdFByb2ZpbGUuaGFzRXhpdFNpdGUobV9jdXJyZW50SW5kZXgsIEJh
ZENhY2hlKSk7Ci0gICAgICAgIE5vZGVJbmRleCBub2RlSW5kZXggPSBhZGRUb0dyYXBoKFNldExv
Y2FsLCBPcEluZm8odmFyaWFibGVBY2Nlc3NEYXRhKSwgdmFsdWUpOwotICAgICAgICBtX2N1cnJl
bnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLmxvY2FsKG9wZXJhbmQpID0gbm9kZUluZGV4OworICAg
ICAgICBOb2RlKiBub2RlID0gYWRkVG9HcmFwaChTZXRMb2NhbCwgT3BJbmZvKHZhcmlhYmxlQWNj
ZXNzRGF0YSksIHZhbHVlKTsKKyAgICAgICAgbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFp
bC5sb2NhbChvcGVyYW5kKSA9IG5vZGU7CiAgICAgfQogCiAgICAgLy8gVXNlZCBpbiBpbXBsZW1l
bnRpbmcgZ2V0L3NldCwgYWJvdmUsIHdoZXJlIHRoZSBvcGVyYW5kIGlzIGFuIGFyZ3VtZW50Lgot
ICAgIE5vZGVJbmRleCBnZXRBcmd1bWVudCh1bnNpZ25lZCBvcGVyYW5kKQorICAgIE5vZGUqIGdl
dEFyZ3VtZW50KHVuc2lnbmVkIG9wZXJhbmQpCiAgICAgewogICAgICAgICB1bnNpZ25lZCBhcmd1
bWVudCA9IG9wZXJhbmRUb0FyZ3VtZW50KG9wZXJhbmQpOwogICAgICAgICBBU1NFUlQoYXJndW1l
bnQgPCBtX251bUFyZ3VtZW50cyk7CiAgICAgICAgIAotICAgICAgICBOb2RlSW5kZXggbm9kZUlu
ZGV4ID0gbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5hcmd1bWVudChhcmd1bWVudCk7
CisgICAgICAgIE5vZGUqIG5vZGUgPSBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLmFy
Z3VtZW50KGFyZ3VtZW50KTsKICAgICAgICAgYm9vbCBpc0NhcHR1cmVkID0gbV9jb2RlQmxvY2st
PmlzQ2FwdHVyZWQob3BlcmFuZCk7CiAKLSAgICAgICAgaWYgKG5vZGVJbmRleCAhPSBOb05vZGUp
IHsKLSAgICAgICAgICAgIE5vZGUqIG5vZGVQdHIgPSAmbV9ncmFwaFtub2RlSW5kZXhdOwotICAg
ICAgICAgICAgaWYgKG5vZGVQdHItPm9wKCkgPT0gRmx1c2gpIHsKKyAgICAgICAgaWYgKG5vZGUp
IHsKKyAgICAgICAgICAgIGlmIChub2RlLT5vcCgpID09IEZsdXNoKSB7CiAgICAgICAgICAgICAg
ICAgLy8gVHdvIHBvc3NpYmlsaXRpZXM6IGVpdGhlciB0aGUgYmxvY2sgd2FudHMgdGhlIGxvY2Fs
IHRvIGJlIGxpdmUKICAgICAgICAgICAgICAgICAvLyBidXQgaGFzIG5vdCBsb2FkZWQgaXRzIHZh
bHVlLCBvciBpdCBoYXMgbG9hZGVkIGl0cyB2YWx1ZSwgaW4KICAgICAgICAgICAgICAgICAvLyB3
aGljaCBjYXNlIHdlJ3JlIGRvbmUuCi0gICAgICAgICAgICAgICAgbm9kZUluZGV4ID0gbm9kZVB0
ci0+Y2hpbGQxKCkuaW5kZXgoKTsKLSAgICAgICAgICAgICAgICBOb2RlJiBmbHVzaENoaWxkID0g
bV9ncmFwaFtub2RlSW5kZXhdOwotICAgICAgICAgICAgICAgIGlmIChmbHVzaENoaWxkLm9wKCkg
PT0gUGhpKSB7Ci0gICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFi
bGVBY2Nlc3NEYXRhID0gZmx1c2hDaGlsZC52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKKyAgICAgICAg
ICAgICAgICBub2RlID0gbm9kZS0+Y2hpbGQxKCkubm9kZSgpOworICAgICAgICAgICAgICAgIGlm
IChub2RlLT5vcCgpID09IFBoaSkgeworICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vz
c0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOwog
ICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZUFjY2Vzc0RhdGEtPm1lcmdlSXNDYXB0dXJlZChp
c0NhcHR1cmVkKTsKLSAgICAgICAgICAgICAgICAgICAgbm9kZUluZGV4ID0gaW5qZWN0TGF6eU9w
ZXJhbmRTcGVjdWxhdGlvbihhZGRUb0dyYXBoKEdldExvY2FsLCBPcEluZm8odmFyaWFibGVBY2Nl
c3NEYXRhKSwgbm9kZUluZGV4KSk7Ci0gICAgICAgICAgICAgICAgICAgIG1fY3VycmVudEJsb2Nr
LT52YXJpYWJsZXNBdFRhaWwuYXJndW1lbnQoYXJndW1lbnQpID0gbm9kZUluZGV4OwotICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gbm9kZUluZGV4OworICAgICAgICAgICAgICAgICAgICBub2Rl
ID0gaW5qZWN0TGF6eU9wZXJhbmRTcGVjdWxhdGlvbihhZGRUb0dyYXBoKEdldExvY2FsLCBPcElu
Zm8odmFyaWFibGVBY2Nlc3NEYXRhKSwgbm9kZSkpOworICAgICAgICAgICAgICAgICAgICBtX2N1
cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLmFyZ3VtZW50KGFyZ3VtZW50KSA9IG5vZGU7Cisg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBub2RlOwogICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICBub2RlUHRyID0gJmZsdXNoQ2hpbGQ7CiAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAKLSAgICAgICAgICAgIEFTU0VSVCgmbV9ncmFwaFtub2RlSW5kZXhdID09IG5vZGVQdHIp
OwotICAgICAgICAgICAgQVNTRVJUKG5vZGVQdHItPm9wKCkgIT0gRmx1c2gpOworICAgICAgICAg
ICAgQVNTRVJUKG5vZGUtPm9wKCkgIT0gRmx1c2gpOwogICAgICAgICAgICAgCi0gICAgICAgICAg
ICBub2RlUHRyLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+bWVyZ2VJc0NhcHR1cmVkKGlzQ2FwdHVy
ZWQpOworICAgICAgICAgICAgbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCktPm1lcmdlSXNDYXB0
dXJlZChpc0NhcHR1cmVkKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKG5vZGVQdHIt
Pm9wKCkgPT0gU2V0QXJndW1lbnQpIHsKKyAgICAgICAgICAgIGlmIChub2RlLT5vcCgpID09IFNl
dEFyZ3VtZW50KSB7CiAgICAgICAgICAgICAgICAgLy8gV2UncmUgZ2V0dGluZyBhbiBhcmd1bWVu
dCBpbiB0aGUgZmlyc3QgYmFzaWMgYmxvY2s7IGxpbmsKICAgICAgICAgICAgICAgICAvLyB0aGUg
R2V0TG9jYWwgdG8gdGhlIFNldEFyZ3VtZW50LgotICAgICAgICAgICAgICAgIEFTU0VSVChub2Rl
UHRyLT5sb2NhbCgpID09IHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4ob3BlcmFuZCkpOwot
ICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBub2RlUHRyLT52
YXJpYWJsZUFjY2Vzc0RhdGEoKTsKLSAgICAgICAgICAgICAgICBub2RlSW5kZXggPSBpbmplY3RM
YXp5T3BlcmFuZFNwZWN1bGF0aW9uKGFkZFRvR3JhcGgoR2V0TG9jYWwsIE9wSW5mbyh2YXJpYWJs
ZSksIG5vZGVJbmRleCkpOwotICAgICAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT52YXJpYWJs
ZXNBdFRhaWwuYXJndW1lbnQoYXJndW1lbnQpID0gbm9kZUluZGV4OwotICAgICAgICAgICAgICAg
IHJldHVybiBub2RlSW5kZXg7CisgICAgICAgICAgICAgICAgQVNTRVJUKG5vZGUtPmxvY2FsKCkg
PT0gc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihvcGVyYW5kKSk7CisgICAgICAgICAgICAg
ICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0
YSgpOworICAgICAgICAgICAgICAgIG5vZGUgPSBpbmplY3RMYXp5T3BlcmFuZFNwZWN1bGF0aW9u
KGFkZFRvR3JhcGgoR2V0TG9jYWwsIE9wSW5mbyh2YXJpYWJsZSksIG5vZGUpKTsKKyAgICAgICAg
ICAgICAgICBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLmFyZ3VtZW50KGFyZ3VtZW50
KSA9IG5vZGU7CisgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGU7CiAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAKICAgICAgICAgICAgIGlmIChpc0NhcHR1cmVkKSB7Ci0gICAgICAgICAgICAg
ICAgaWYgKG5vZGVQdHItPm9wKCkgPT0gR2V0TG9jYWwpCi0gICAgICAgICAgICAgICAgICAgIG5v
ZGVJbmRleCA9IG5vZGVQdHItPmNoaWxkMSgpLmluZGV4KCk7Ci0gICAgICAgICAgICAgICAgcmV0
dXJuIGluamVjdExhenlPcGVyYW5kU3BlY3VsYXRpb24oYWRkVG9HcmFwaChHZXRMb2NhbCwgT3BJ
bmZvKG5vZGVQdHItPnZhcmlhYmxlQWNjZXNzRGF0YSgpKSwgbm9kZUluZGV4KSk7CisgICAgICAg
ICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gR2V0TG9jYWwpCisgICAgICAgICAgICAgICAgICAg
IG5vZGUgPSBub2RlLT5jaGlsZDEoKS5ub2RlKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGlu
amVjdExhenlPcGVyYW5kU3BlY3VsYXRpb24oYWRkVG9HcmFwaChHZXRMb2NhbCwgT3BJbmZvKG5v
ZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpKSwgbm9kZSkpOwogICAgICAgICAgICAgfQogICAgICAg
ICAgICAgCi0gICAgICAgICAgICBpZiAobm9kZVB0ci0+b3AoKSA9PSBHZXRMb2NhbCkKLSAgICAg
ICAgICAgICAgICByZXR1cm4gbm9kZUluZGV4OworICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkg
PT0gR2V0TG9jYWwpCisgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGU7CiAgICAgICAgICAgICAK
LSAgICAgICAgICAgIEFTU0VSVChub2RlUHRyLT5vcCgpID09IFNldExvY2FsKTsKLSAgICAgICAg
ICAgIHJldHVybiBub2RlUHRyLT5jaGlsZDEoKS5pbmRleCgpOworICAgICAgICAgICAgQVNTRVJU
KG5vZGUtPm9wKCkgPT0gU2V0TG9jYWwpOworICAgICAgICAgICAgcmV0dXJuIG5vZGUtPmNoaWxk
MSgpLm5vZGUoKTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgVmFyaWFibGVBY2Nlc3NE
YXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBuZXdWYXJpYWJsZUFjY2Vzc0RhdGEob3BlcmFuZCwg
aXNDYXB0dXJlZCk7CiAKLSAgICAgICAgTm9kZUluZGV4IHBoaSA9IGFkZFRvR3JhcGgoUGhpLCBP
cEluZm8odmFyaWFibGVBY2Nlc3NEYXRhKSk7CisgICAgICAgIE5vZGUqIHBoaSA9IGFkZFRvR3Jh
cGgoUGhpLCBPcEluZm8odmFyaWFibGVBY2Nlc3NEYXRhKSk7CiAgICAgICAgIG1fYXJndW1lbnRQ
aGlTdGFjay5hcHBlbmQoUGhpU3RhY2tFbnRyeShtX2N1cnJlbnRCbG9jaywgcGhpLCBhcmd1bWVu
dCkpOwotICAgICAgICBub2RlSW5kZXggPSBpbmplY3RMYXp5T3BlcmFuZFNwZWN1bGF0aW9uKGFk
ZFRvR3JhcGgoR2V0TG9jYWwsIE9wSW5mbyh2YXJpYWJsZUFjY2Vzc0RhdGEpLCBwaGkpKTsKLSAg
ICAgICAgbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5hcmd1bWVudChhcmd1bWVudCkg
PSBub2RlSW5kZXg7CisgICAgICAgIG5vZGUgPSBpbmplY3RMYXp5T3BlcmFuZFNwZWN1bGF0aW9u
KGFkZFRvR3JhcGgoR2V0TG9jYWwsIE9wSW5mbyh2YXJpYWJsZUFjY2Vzc0RhdGEpLCBwaGkpKTsK
KyAgICAgICAgbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5hcmd1bWVudChhcmd1bWVu
dCkgPSBub2RlOwogICAgICAgICAKLSAgICAgICAgbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0
SGVhZC5zZXRBcmd1bWVudEZpcnN0VGltZShhcmd1bWVudCwgbm9kZUluZGV4KTsKKyAgICAgICAg
bV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0SGVhZC5zZXRBcmd1bWVudEZpcnN0VGltZShhcmd1
bWVudCwgbm9kZSk7CiAgICAgICAgIAotICAgICAgICByZXR1cm4gbm9kZUluZGV4OworICAgICAg
ICByZXR1cm4gbm9kZTsKICAgICB9Ci0gICAgdm9pZCBzZXRBcmd1bWVudChpbnQgb3BlcmFuZCwg
Tm9kZUluZGV4IHZhbHVlLCBTZXRNb2RlIHNldE1vZGUgPSBOb3JtYWxTZXQpCisgICAgdm9pZCBz
ZXRBcmd1bWVudChpbnQgb3BlcmFuZCwgTm9kZSogdmFsdWUsIFNldE1vZGUgc2V0TW9kZSA9IE5v
cm1hbFNldCkKICAgICB7CiAgICAgICAgIHVuc2lnbmVkIGFyZ3VtZW50ID0gb3BlcmFuZFRvQXJn
dW1lbnQob3BlcmFuZCk7CiAgICAgICAgIEFTU0VSVChhcmd1bWVudCA8IG1fbnVtQXJndW1lbnRz
KTsKQEAgLTQ0NCw4ICs0MzUsOCBAQCBwcml2YXRlOgogICAgICAgICBWYXJpYWJsZUFjY2Vzc0Rh
dGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9IG5ld1ZhcmlhYmxlQWNjZXNzRGF0YShvcGVyYW5kLCBp
c0NhcHR1cmVkKTsKICAgICAgICAgdmFyaWFibGVBY2Nlc3NEYXRhLT5tZXJnZVN0cnVjdHVyZUNo
ZWNrSG9pc3RpbmdGYWlsZWQoCiAgICAgICAgICAgICBtX2lubGluZVN0YWNrVG9wLT5tX2V4aXRQ
cm9maWxlLmhhc0V4aXRTaXRlKG1fY3VycmVudEluZGV4LCBCYWRDYWNoZSkpOwotICAgICAgICBO
b2RlSW5kZXggbm9kZUluZGV4ID0gYWRkVG9HcmFwaChTZXRMb2NhbCwgT3BJbmZvKHZhcmlhYmxl
QWNjZXNzRGF0YSksIHZhbHVlKTsKLSAgICAgICAgbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0
VGFpbC5hcmd1bWVudChhcmd1bWVudCkgPSBub2RlSW5kZXg7CisgICAgICAgIE5vZGUqIG5vZGUg
PSBhZGRUb0dyYXBoKFNldExvY2FsLCBPcEluZm8odmFyaWFibGVBY2Nlc3NEYXRhKSwgdmFsdWUp
OworICAgICAgICBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLmFyZ3VtZW50KGFyZ3Vt
ZW50KSA9IG5vZGU7CiAgICAgfQogICAgIAogICAgIEFyZ3VtZW50UG9zaXRpb24qIGZpbmRBcmd1
bWVudFBvc2l0aW9uRm9yQXJndW1lbnQoaW50IGFyZ3VtZW50KQpAQCAtNTAwLDU1ICs0OTEsNTMg
QEAgcHJpdmF0ZToKICAgICAgICAgCiAgICAgICAgIEFTU0VSVChvcGVyYW5kIDwgRmlyc3RDb25z
dGFudFJlZ2lzdGVySW5kZXgpOwogICAgICAgICAKLSAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRl
eDsKKyAgICAgICAgTm9kZSogbm9kZTsKICAgICAgICAgaW50IGluZGV4OwogICAgICAgICBpZiAo
b3BlcmFuZElzQXJndW1lbnQob3BlcmFuZCkpIHsKICAgICAgICAgICAgIGluZGV4ID0gb3BlcmFu
ZFRvQXJndW1lbnQob3BlcmFuZCk7Ci0gICAgICAgICAgICBub2RlSW5kZXggPSBtX2N1cnJlbnRC
bG9jay0+dmFyaWFibGVzQXRUYWlsLmFyZ3VtZW50KGluZGV4KTsKKyAgICAgICAgICAgIG5vZGUg
PSBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLmFyZ3VtZW50KGluZGV4KTsKICAgICAg
ICAgfSBlbHNlIHsKICAgICAgICAgICAgIGluZGV4ID0gb3BlcmFuZDsKLSAgICAgICAgICAgIG5v
ZGVJbmRleCA9IG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwubG9jYWwoaW5kZXgpOwor
ICAgICAgICAgICAgbm9kZSA9IG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwubG9jYWwo
aW5kZXgpOwogICAgICAgICAgICAgbV9wcmVzZXJ2ZWRWYXJzLnNldChvcGVyYW5kKTsKICAgICAg
ICAgfQogICAgICAgICAKLSAgICAgICAgaWYgKG5vZGVJbmRleCAhPSBOb05vZGUpIHsKLSAgICAg
ICAgICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW25vZGVJbmRleF07Ci0gICAgICAgICAgICBzd2l0
Y2ggKG5vZGUub3AoKSkgeworICAgICAgICBpZiAobm9kZSkgeworICAgICAgICAgICAgc3dpdGNo
IChub2RlLT5vcCgpKSB7CiAgICAgICAgICAgICBjYXNlIEZsdXNoOgotICAgICAgICAgICAgICAg
IG5vZGVJbmRleCA9IG5vZGUuY2hpbGQxKCkuaW5kZXgoKTsKKyAgICAgICAgICAgICAgICBub2Rl
ID0gbm9kZS0+Y2hpbGQxKCkubm9kZSgpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgY2FzZSBHZXRMb2NhbDoKLSAgICAgICAgICAgICAgICBub2RlSW5kZXggPSBub2RlLmNo
aWxkMSgpLmluZGV4KCk7CisgICAgICAgICAgICAgICAgbm9kZSA9IG5vZGUtPmNoaWxkMSgpLm5v
ZGUoKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAg
ICAgIEFTU0VSVChtX2dyYXBoW25vZGVJbmRleF0ub3AoKSAhPSBGbHVzaAotICAgICAgICAgICAg
ICAgICAgICYmIG1fZ3JhcGhbbm9kZUluZGV4XS5vcCgpICE9IEdldExvY2FsKTsKKyAgICAgICAg
ICAgIEFTU0VSVChub2RlLT5vcCgpICE9IEZsdXNoICYmIG5vZGUtPm9wKCkgIT0gR2V0TG9jYWwp
OwogICAgICAgICAgICAgCiAgICAgICAgICAgICAvLyBFbWl0IGEgRmx1c2ggcmVnYXJkbGVzcyBv
ZiB3aGV0aGVyIHdlIGFscmVhZHkgZmx1c2hlZCBpdC4KICAgICAgICAgICAgIC8vIFRoaXMgZ2l2
ZXMgdXMgZ3VpZGFuY2UgdG8gc2VlIHRoYXQgdGhlIHZhcmlhYmxlIGFsc28gbmVlZHMgdG8gYmUg
Zmx1c2hlZAogICAgICAgICAgICAgLy8gZm9yIGFyZ3VtZW50cywgZXZlbiBpZiBpdCBhbHJlYWR5
IGhhZCB0byBiZSBmbHVzaGVkIGZvciBvdGhlciByZWFzb25zLgotICAgICAgICAgICAgVmFyaWFi
bGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBub2RlLnZhcmlhYmxlQWNjZXNzRGF0
YSgpOworICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEg
PSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKICAgICAgICAgICAgIHZhcmlhYmxlQWNjZXNz
RGF0YS0+bWVyZ2VJc0NhcHR1cmVkKGlzQ2FwdHVyZWQpOwotICAgICAgICAgICAgYWRkVG9HcmFw
aChGbHVzaCwgT3BJbmZvKHZhcmlhYmxlQWNjZXNzRGF0YSksIG5vZGVJbmRleCk7CisgICAgICAg
ICAgICBhZGRUb0dyYXBoKEZsdXNoLCBPcEluZm8odmFyaWFibGVBY2Nlc3NEYXRhKSwgbm9kZSk7
CiAgICAgICAgICAgICBpZiAoYXJndW1lbnRQb3NpdGlvbikKICAgICAgICAgICAgICAgICBhcmd1
bWVudFBvc2l0aW9uLT5hZGRWYXJpYWJsZSh2YXJpYWJsZUFjY2Vzc0RhdGEpOwogICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBWYXJpYWJsZUFjY2Vzc0Rh
dGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9IG5ld1ZhcmlhYmxlQWNjZXNzRGF0YShvcGVyYW5kLCBp
c0NhcHR1cmVkKTsKLSAgICAgICAgTm9kZUluZGV4IHBoaSA9IGFkZFRvR3JhcGgoUGhpLCBPcElu
Zm8odmFyaWFibGVBY2Nlc3NEYXRhKSk7Ci0gICAgICAgIG5vZGVJbmRleCA9IGFkZFRvR3JhcGgo
Rmx1c2gsIE9wSW5mbyh2YXJpYWJsZUFjY2Vzc0RhdGEpLCBwaGkpOworICAgICAgICBOb2RlKiBw
aGkgPSBhZGRUb0dyYXBoKFBoaSwgT3BJbmZvKHZhcmlhYmxlQWNjZXNzRGF0YSkpOworICAgICAg
ICBub2RlID0gYWRkVG9HcmFwaChGbHVzaCwgT3BJbmZvKHZhcmlhYmxlQWNjZXNzRGF0YSksIHBo
aSk7CiAgICAgICAgIGlmIChvcGVyYW5kSXNBcmd1bWVudChvcGVyYW5kKSkgewogICAgICAgICAg
ICAgbV9hcmd1bWVudFBoaVN0YWNrLmFwcGVuZChQaGlTdGFja0VudHJ5KG1fY3VycmVudEJsb2Nr
LCBwaGksIGluZGV4KSk7Ci0gICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRU
YWlsLmFyZ3VtZW50KGluZGV4KSA9IG5vZGVJbmRleDsKLSAgICAgICAgICAgIG1fY3VycmVudEJs
b2NrLT52YXJpYWJsZXNBdEhlYWQuc2V0QXJndW1lbnRGaXJzdFRpbWUoaW5kZXgsIG5vZGVJbmRl
eCk7CisgICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLmFyZ3VtZW50
KGluZGV4KSA9IG5vZGU7CisgICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRI
ZWFkLnNldEFyZ3VtZW50Rmlyc3RUaW1lKGluZGV4LCBub2RlKTsKICAgICAgICAgfSBlbHNlIHsK
ICAgICAgICAgICAgIG1fbG9jYWxQaGlTdGFjay5hcHBlbmQoUGhpU3RhY2tFbnRyeShtX2N1cnJl
bnRCbG9jaywgcGhpLCBpbmRleCkpOwotICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPnZhcmlh
Ymxlc0F0VGFpbC5sb2NhbChpbmRleCkgPSBub2RlSW5kZXg7Ci0gICAgICAgICAgICBtX2N1cnJl
bnRCbG9jay0+dmFyaWFibGVzQXRIZWFkLnNldExvY2FsRmlyc3RUaW1lKGluZGV4LCBub2RlSW5k
ZXgpOworICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5sb2NhbChp
bmRleCkgPSBub2RlOworICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0SGVh
ZC5zZXRMb2NhbEZpcnN0VGltZShpbmRleCwgbm9kZSk7CiAgICAgICAgIH0KICAgICAgICAgaWYg
KGFyZ3VtZW50UG9zaXRpb24pCiAgICAgICAgICAgICBhcmd1bWVudFBvc2l0aW9uLT5hZGRWYXJp
YWJsZSh2YXJpYWJsZUFjY2Vzc0RhdGEpOwpAQCAtNTcxLDM1ICs1NjAsMzMgQEAgcHJpdmF0ZToK
ICAgICB9CiAKICAgICAvLyBHZXQgYW4gb3BlcmFuZCwgYW5kIHBlcmZvcm0gYSBUb0ludDMyL1Rv
TnVtYmVyIGNvbnZlcnNpb24gb24gaXQuCi0gICAgTm9kZUluZGV4IGdldFRvSW50MzIoaW50IG9w
ZXJhbmQpCisgICAgTm9kZSogZ2V0VG9JbnQzMihpbnQgb3BlcmFuZCkKICAgICB7CiAgICAgICAg
IHJldHVybiB0b0ludDMyKGdldChvcGVyYW5kKSk7CiAgICAgfQogCiAgICAgLy8gUGVyZm9ybSBh
biBFUzUgVG9JbnQzMiBvcGVyYXRpb24gLSByZXR1cm5zIGEgbm9kZSBvZiB0eXBlIE5vZGVSZXN1
bHRJbnQzMi4KLSAgICBOb2RlSW5kZXggdG9JbnQzMihOb2RlSW5kZXggaW5kZXgpCisgICAgTm9k
ZSogdG9JbnQzMihOb2RlKiBub2RlKQogICAgIHsKLSAgICAgICAgTm9kZSYgbm9kZSA9IG1fZ3Jh
cGhbaW5kZXhdOworICAgICAgICBpZiAobm9kZS0+aGFzSW50MzJSZXN1bHQoKSkKKyAgICAgICAg
ICAgIHJldHVybiBub2RlOwogCi0gICAgICAgIGlmIChub2RlLmhhc0ludDMyUmVzdWx0KCkpCi0g
ICAgICAgICAgICByZXR1cm4gaW5kZXg7Ci0KLSAgICAgICAgaWYgKG5vZGUub3AoKSA9PSBVSW50
MzJUb051bWJlcikKLSAgICAgICAgICAgIHJldHVybiBub2RlLmNoaWxkMSgpLmluZGV4KCk7Cisg
ICAgICAgIGlmIChub2RlLT5vcCgpID09IFVJbnQzMlRvTnVtYmVyKQorICAgICAgICAgICAgcmV0
dXJuIG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKIAogICAgICAgICAvLyBDaGVjayBmb3IgbnVtZXJp
YyBjb25zdGFudHMgYm94ZWQgYXMgSlNWYWx1ZXMuCi0gICAgICAgIGlmIChub2RlLm9wKCkgPT0g
SlNDb25zdGFudCkgewotICAgICAgICAgICAgSlNWYWx1ZSB2ID0gdmFsdWVPZkpTQ29uc3RhbnQo
aW5kZXgpOworICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBKU0NvbnN0YW50KSB7CisgICAgICAg
ICAgICBKU1ZhbHVlIHYgPSB2YWx1ZU9mSlNDb25zdGFudChub2RlKTsKICAgICAgICAgICAgIGlm
ICh2LmlzSW50MzIoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZ2V0SlNDb25zdGFudChub2Rl
LmNvbnN0YW50TnVtYmVyKCkpOworICAgICAgICAgICAgICAgIHJldHVybiBnZXRKU0NvbnN0YW50
KG5vZGUtPmNvbnN0YW50TnVtYmVyKCkpOwogICAgICAgICAgICAgaWYgKHYuaXNOdW1iZXIoKSkK
ICAgICAgICAgICAgICAgICByZXR1cm4gZ2V0SlNDb25zdGFudEZvclZhbHVlKEpTVmFsdWUoSlND
Ojp0b0ludDMyKHYuYXNOdW1iZXIoKSkpKTsKICAgICAgICAgfQogCi0gICAgICAgIHJldHVybiBh
ZGRUb0dyYXBoKFZhbHVlVG9JbnQzMiwgaW5kZXgpOworICAgICAgICByZXR1cm4gYWRkVG9HcmFw
aChWYWx1ZVRvSW50MzIsIG5vZGUpOwogICAgIH0KIAotICAgIE5vZGVJbmRleCBnZXRKU0NvbnN0
YW50Rm9yVmFsdWUoSlNWYWx1ZSBjb25zdGFudFZhbHVlKQorICAgIE5vZGUqIGdldEpTQ29uc3Rh
bnRGb3JWYWx1ZShKU1ZhbHVlIGNvbnN0YW50VmFsdWUpCiAgICAgewogICAgICAgICB1bnNpZ25l
ZCBjb25zdGFudEluZGV4ID0gbV9jb2RlQmxvY2stPmFkZE9yRmluZENvbnN0YW50KGNvbnN0YW50
VmFsdWUpOwogICAgICAgICBpZiAoY29uc3RhbnRJbmRleCA+PSBtX2NvbnN0YW50cy5zaXplKCkp
CkBAIC02MTAsNTUgKzU5Nyw1NSBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4gZ2V0SlNDb25z
dGFudChjb25zdGFudEluZGV4KTsKICAgICB9CiAKLSAgICBOb2RlSW5kZXggZ2V0SlNDb25zdGFu
dCh1bnNpZ25lZCBjb25zdGFudCkKKyAgICBOb2RlKiBnZXRKU0NvbnN0YW50KHVuc2lnbmVkIGNv
bnN0YW50KQogICAgIHsKLSAgICAgICAgTm9kZUluZGV4IGluZGV4ID0gbV9jb25zdGFudHNbY29u
c3RhbnRdLmFzSlNWYWx1ZTsKLSAgICAgICAgaWYgKGluZGV4ICE9IE5vTm9kZSkKLSAgICAgICAg
ICAgIHJldHVybiBpbmRleDsKKyAgICAgICAgTm9kZSogbm9kZSA9IG1fY29uc3RhbnRzW2NvbnN0
YW50XS5hc0pTVmFsdWU7CisgICAgICAgIGlmIChub2RlKQorICAgICAgICAgICAgcmV0dXJuIG5v
ZGU7CiAKLSAgICAgICAgTm9kZUluZGV4IHJlc3VsdEluZGV4ID0gYWRkVG9HcmFwaChKU0NvbnN0
YW50LCBPcEluZm8oY29uc3RhbnQpKTsKLSAgICAgICAgbV9jb25zdGFudHNbY29uc3RhbnRdLmFz
SlNWYWx1ZSA9IHJlc3VsdEluZGV4OwotICAgICAgICByZXR1cm4gcmVzdWx0SW5kZXg7CisgICAg
ICAgIE5vZGUqIHJlc3VsdCA9IGFkZFRvR3JhcGgoSlNDb25zdGFudCwgT3BJbmZvKGNvbnN0YW50
KSk7CisgICAgICAgIG1fY29uc3RhbnRzW2NvbnN0YW50XS5hc0pTVmFsdWUgPSByZXN1bHQ7Cisg
ICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCi0gICAgTm9kZUluZGV4IGdldENhbGxlZSgp
CisgICAgTm9kZSogZ2V0Q2FsbGVlKCkKICAgICB7CiAgICAgICAgIHJldHVybiBhZGRUb0dyYXBo
KEdldENhbGxlZSk7CiAgICAgfQogCiAgICAgLy8gSGVscGVyIGZ1bmN0aW9ucyB0byBnZXQvc2V0
IHRoZSB0aGlzIHZhbHVlLgotICAgIE5vZGVJbmRleCBnZXRUaGlzKCkKKyAgICBOb2RlKiBnZXRU
aGlzKCkKICAgICB7CiAgICAgICAgIHJldHVybiBnZXQobV9pbmxpbmVTdGFja1RvcC0+bV9jb2Rl
QmxvY2stPnRoaXNSZWdpc3RlcigpKTsKICAgICB9Ci0gICAgdm9pZCBzZXRUaGlzKE5vZGVJbmRl
eCB2YWx1ZSkKKyAgICB2b2lkIHNldFRoaXMoTm9kZSogdmFsdWUpCiAgICAgewogICAgICAgICBz
ZXQobV9pbmxpbmVTdGFja1RvcC0+bV9jb2RlQmxvY2stPnRoaXNSZWdpc3RlcigpLCB2YWx1ZSk7
CiAgICAgfQogCiAgICAgLy8gQ29udmVuaWVuY2UgbWV0aG9kcyBmb3IgY2hlY2tpbmcgbm9kZXMg
Zm9yIGNvbnN0YW50cy4KLSAgICBib29sIGlzSlNDb25zdGFudChOb2RlSW5kZXggaW5kZXgpCisg
ICAgYm9vbCBpc0pTQ29uc3RhbnQoTm9kZSogbm9kZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBt
X2dyYXBoW2luZGV4XS5vcCgpID09IEpTQ29uc3RhbnQ7CisgICAgICAgIHJldHVybiBub2RlLT5v
cCgpID09IEpTQ29uc3RhbnQ7CiAgICAgfQotICAgIGJvb2wgaXNJbnQzMkNvbnN0YW50KE5vZGVJ
bmRleCBub2RlSW5kZXgpCisgICAgYm9vbCBpc0ludDMyQ29uc3RhbnQoTm9kZSogbm9kZSkKICAg
ICB7Ci0gICAgICAgIHJldHVybiBpc0pTQ29uc3RhbnQobm9kZUluZGV4KSAmJiB2YWx1ZU9mSlND
b25zdGFudChub2RlSW5kZXgpLmlzSW50MzIoKTsKKyAgICAgICAgcmV0dXJuIGlzSlNDb25zdGFu
dChub2RlKSAmJiB2YWx1ZU9mSlNDb25zdGFudChub2RlKS5pc0ludDMyKCk7CiAgICAgfQogICAg
IC8vIENvbnZlbmllbmNlIG1ldGhvZHMgZm9yIGdldHRpbmcgY29uc3RhbnQgdmFsdWVzLgotICAg
IEpTVmFsdWUgdmFsdWVPZkpTQ29uc3RhbnQoTm9kZUluZGV4IGluZGV4KQorICAgIEpTVmFsdWUg
dmFsdWVPZkpTQ29uc3RhbnQoTm9kZSogbm9kZSkKICAgICB7Ci0gICAgICAgIEFTU0VSVChpc0pT
Q29uc3RhbnQoaW5kZXgpKTsKLSAgICAgICAgcmV0dXJuIG1fY29kZUJsb2NrLT5nZXRDb25zdGFu
dChGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleCArIG1fZ3JhcGhbaW5kZXhdLmNvbnN0YW50TnVt
YmVyKCkpOworICAgICAgICBBU1NFUlQoaXNKU0NvbnN0YW50KG5vZGUpKTsKKyAgICAgICAgcmV0
dXJuIG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleCAr
IG5vZGUtPmNvbnN0YW50TnVtYmVyKCkpOwogICAgIH0KLSAgICBpbnQzMl90IHZhbHVlT2ZJbnQz
MkNvbnN0YW50KE5vZGVJbmRleCBub2RlSW5kZXgpCisgICAgaW50MzJfdCB2YWx1ZU9mSW50MzJD
b25zdGFudChOb2RlKiBub2RlKQogICAgIHsKLSAgICAgICAgQVNTRVJUKGlzSW50MzJDb25zdGFu
dChub2RlSW5kZXgpKTsKLSAgICAgICAgcmV0dXJuIHZhbHVlT2ZKU0NvbnN0YW50KG5vZGVJbmRl
eCkuYXNJbnQzMigpOworICAgICAgICBBU1NFUlQoaXNJbnQzMkNvbnN0YW50KG5vZGUpKTsKKyAg
ICAgICAgcmV0dXJuIHZhbHVlT2ZKU0NvbnN0YW50KG5vZGUpLmFzSW50MzIoKTsKICAgICB9CiAg
ICAgCiAgICAgLy8gVGhpcyBtZXRob2QgcmV0dXJucyBhIEpTQ29uc3RhbnQgd2l0aCB0aGUgdmFs
dWUgJ3VuZGVmaW5lZCcuCi0gICAgTm9kZUluZGV4IGNvbnN0YW50VW5kZWZpbmVkKCkKKyAgICBO
b2RlKiBjb25zdGFudFVuZGVmaW5lZCgpCiAgICAgewogICAgICAgICAvLyBIYXMgbV9jb25zdGFu
dFVuZGVmaW5lZCBiZWVuIHNldCB1cCB5ZXQ/CiAgICAgICAgIGlmIChtX2NvbnN0YW50VW5kZWZp
bmVkID09IFVJTlRfTUFYKSB7CkBAIC02ODMsNyArNjcwLDcgQEAgcHJpdmF0ZToKICAgICB9CiAK
ICAgICAvLyBUaGlzIG1ldGhvZCByZXR1cm5zIGEgSlNDb25zdGFudCB3aXRoIHRoZSB2YWx1ZSAn
bnVsbCcuCi0gICAgTm9kZUluZGV4IGNvbnN0YW50TnVsbCgpCisgICAgTm9kZSogY29uc3RhbnRO
dWxsKCkKICAgICB7CiAgICAgICAgIC8vIEhhcyBtX2NvbnN0YW50TnVsbCBiZWVuIHNldCB1cCB5
ZXQ/CiAgICAgICAgIGlmIChtX2NvbnN0YW50TnVsbCA9PSBVSU5UX01BWCkgewpAQCAtNzA4LDcg
KzY5NSw3IEBAIHByaXZhdGU6CiAgICAgfQogCiAgICAgLy8gVGhpcyBtZXRob2QgcmV0dXJucyBh
IERvdWJsZUNvbnN0YW50IHdpdGggdGhlIHZhbHVlIDEuCi0gICAgTm9kZUluZGV4IG9uZSgpCisg
ICAgTm9kZSogb25lKCkKICAgICB7CiAgICAgICAgIC8vIEhhcyBtX2NvbnN0YW50MSBiZWVuIHNl
dCB1cCB5ZXQ/CiAgICAgICAgIGlmIChtX2NvbnN0YW50MSA9PSBVSU5UX01BWCkgewpAQCAtNzM0
LDcgKzcyMSw3IEBAIHByaXZhdGU6CiAgICAgfQogICAgIAogICAgIC8vIFRoaXMgbWV0aG9kIHJl
dHVybnMgYSBEb3VibGVDb25zdGFudCB3aXRoIHRoZSB2YWx1ZSBOYU4uCi0gICAgTm9kZUluZGV4
IGNvbnN0YW50TmFOKCkKKyAgICBOb2RlKiBjb25zdGFudE5hTigpCiAgICAgewogICAgICAgICBK
U1ZhbHVlIG5hbiA9IGpzTmFOKCk7CiAgICAgICAgIApAQCAtNzYxLDkgKzc0OCw5IEBAIHByaXZh
dGU6CiAgICAgICAgIHJldHVybiBnZXRKU0NvbnN0YW50KG1fY29uc3RhbnROYU4pOwogICAgIH0K
ICAgICAKLSAgICBOb2RlSW5kZXggY2VsbENvbnN0YW50KEpTQ2VsbCogY2VsbCkKKyAgICBOb2Rl
KiBjZWxsQ29uc3RhbnQoSlNDZWxsKiBjZWxsKQogICAgIHsKLSAgICAgICAgSGFzaE1hcDxKU0Nl
bGwqLCBOb2RlSW5kZXg+OjpBZGRSZXN1bHQgcmVzdWx0ID0gbV9jZWxsQ29uc3RhbnROb2Rlcy5h
ZGQoY2VsbCwgTm9Ob2RlKTsKKyAgICAgICAgSGFzaE1hcDxKU0NlbGwqLCBOb2RlKj46OkFkZFJl
c3VsdCByZXN1bHQgPSBtX2NlbGxDb25zdGFudE5vZGVzLmFkZChjZWxsLCAwKTsKICAgICAgICAg
aWYgKHJlc3VsdC5pc05ld0VudHJ5KQogICAgICAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1
ZSA9IGFkZFRvR3JhcGgoV2Vha0pTQ29uc3RhbnQsIE9wSW5mbyhjZWxsKSk7CiAgICAgICAgIApA
QCAtNzc3LDcyICs3NjQsNzggQEAgcHJpdmF0ZToKIAogICAgIC8vIFRoZXNlIG1ldGhvZHMgY3Jl
YXRlIGEgbm9kZSBhbmQgYWRkIGl0IHRvIHRoZSBncmFwaC4gSWYgbm9kZXMgb2YgdGhpcyB0eXBl
IGFyZQogICAgIC8vICdtdXN0R2VuZXJhdGUnIHRoZW4gdGhlIG5vZGUgIHdpbGwgaW1wbGljaXRs
eSBiZSByZWYnZWQgdG8gZW5zdXJlIGdlbmVyYXRpb24uCi0gICAgTm9kZUluZGV4IGFkZFRvR3Jh
cGgoTm9kZVR5cGUgb3AsIE5vZGVJbmRleCBjaGlsZDEgPSBOb05vZGUsIE5vZGVJbmRleCBjaGls
ZDIgPSBOb05vZGUsIE5vZGVJbmRleCBjaGlsZDMgPSBOb05vZGUpCisgICAgTm9kZSogYWRkVG9H
cmFwaChOb2RlVHlwZSBvcCwgTm9kZSogY2hpbGQxID0gMCwgTm9kZSogY2hpbGQyID0gMCwgTm9k
ZSogY2hpbGQzID0gMCkKICAgICB7Ci0gICAgICAgIE5vZGVJbmRleCByZXN1bHRJbmRleCA9IChO
b2RlSW5kZXgpbV9ncmFwaC5zaXplKCk7Ci0gICAgICAgIG1fZ3JhcGguYXBwZW5kKE5vZGUob3As
IGN1cnJlbnRDb2RlT3JpZ2luKCksIGNoaWxkMSwgY2hpbGQyLCBjaGlsZDMpKTsKKyAgICAgICAg
Tm9kZSogcmVzdWx0ID0gbV9ncmFwaC5hZGROb2RlKAorICAgICAgICAgICAgRG9udFJlZkNoaWxk
cmVuLCBEb250UmVmTm9kZSwgU3BlY05vbmUsCisgICAgICAgICAgICBvcCwgY3VycmVudENvZGVP
cmlnaW4oKSwgY2hpbGQxLCBjaGlsZDIsIGNoaWxkMyk7CiAgICAgICAgIEFTU0VSVChvcCAhPSBQ
aGkpOwotICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kKHJlc3VsdEluZGV4KTsKKyAgICAg
ICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZChyZXN1bHQpOwogCiAgICAgICAgIGlmIChkZWZhdWx0
RmxhZ3Mob3ApICYgTm9kZU11c3RHZW5lcmF0ZSkKLSAgICAgICAgICAgIG1fZ3JhcGgucmVmKHJl
c3VsdEluZGV4KTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdEluZGV4OworICAgICAgICAgICAgbV9n
cmFwaC5yZWZDaGlsZHJlbihyZXN1bHQpOworICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0K
LSAgICBOb2RlSW5kZXggYWRkVG9HcmFwaChOb2RlVHlwZSBvcCwgT3BJbmZvIGluZm8sIE5vZGVJ
bmRleCBjaGlsZDEgPSBOb05vZGUsIE5vZGVJbmRleCBjaGlsZDIgPSBOb05vZGUsIE5vZGVJbmRl
eCBjaGlsZDMgPSBOb05vZGUpCisgICAgTm9kZSogYWRkVG9HcmFwaChOb2RlVHlwZSBvcCwgT3BJ
bmZvIGluZm8sIE5vZGUqIGNoaWxkMSA9IDAsIE5vZGUqIGNoaWxkMiA9IDAsIE5vZGUqIGNoaWxk
MyA9IDApCiAgICAgewotICAgICAgICBOb2RlSW5kZXggcmVzdWx0SW5kZXggPSAoTm9kZUluZGV4
KW1fZ3JhcGguc2l6ZSgpOwotICAgICAgICBtX2dyYXBoLmFwcGVuZChOb2RlKG9wLCBjdXJyZW50
Q29kZU9yaWdpbigpLCBpbmZvLCBjaGlsZDEsIGNoaWxkMiwgY2hpbGQzKSk7CisgICAgICAgIE5v
ZGUqIHJlc3VsdCA9IG1fZ3JhcGguYWRkTm9kZSgKKyAgICAgICAgICAgIERvbnRSZWZDaGlsZHJl
biwgRG9udFJlZk5vZGUsIFNwZWNOb25lLAorICAgICAgICAgICAgb3AsIGN1cnJlbnRDb2RlT3Jp
Z2luKCksIGluZm8sIGNoaWxkMSwgY2hpbGQyLCBjaGlsZDMpOwogICAgICAgICBpZiAob3AgPT0g
UGhpKQotICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPnBoaXMuYXBwZW5kKHJlc3VsdEluZGV4
KTsKKyAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT5waGlzLmFwcGVuZChyZXN1bHQpOwogICAg
ICAgICBlbHNlCi0gICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kKHJlc3VsdEluZGV4
KTsKKyAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmQocmVzdWx0KTsKIAogICAgICAg
ICBpZiAoZGVmYXVsdEZsYWdzKG9wKSAmIE5vZGVNdXN0R2VuZXJhdGUpCi0gICAgICAgICAgICBt
X2dyYXBoLnJlZihyZXN1bHRJbmRleCk7Ci0gICAgICAgIHJldHVybiByZXN1bHRJbmRleDsKKyAg
ICAgICAgICAgIG1fZ3JhcGgucmVmQ2hpbGRyZW4ocmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIHJl
c3VsdDsKICAgICB9Ci0gICAgTm9kZUluZGV4IGFkZFRvR3JhcGgoTm9kZVR5cGUgb3AsIE9wSW5m
byBpbmZvMSwgT3BJbmZvIGluZm8yLCBOb2RlSW5kZXggY2hpbGQxID0gTm9Ob2RlLCBOb2RlSW5k
ZXggY2hpbGQyID0gTm9Ob2RlLCBOb2RlSW5kZXggY2hpbGQzID0gTm9Ob2RlKQorICAgIE5vZGUq
IGFkZFRvR3JhcGgoTm9kZVR5cGUgb3AsIE9wSW5mbyBpbmZvMSwgT3BJbmZvIGluZm8yLCBOb2Rl
KiBjaGlsZDEgPSAwLCBOb2RlKiBjaGlsZDIgPSAwLCBOb2RlKiBjaGlsZDMgPSAwKQogICAgIHsK
LSAgICAgICAgTm9kZUluZGV4IHJlc3VsdEluZGV4ID0gKE5vZGVJbmRleCltX2dyYXBoLnNpemUo
KTsKLSAgICAgICAgbV9ncmFwaC5hcHBlbmQoTm9kZShvcCwgY3VycmVudENvZGVPcmlnaW4oKSwg
aW5mbzEsIGluZm8yLCBjaGlsZDEsIGNoaWxkMiwgY2hpbGQzKSk7CisgICAgICAgIE5vZGUqIHJl
c3VsdCA9IG1fZ3JhcGguYWRkTm9kZSgKKyAgICAgICAgICAgIERvbnRSZWZDaGlsZHJlbiwgRG9u
dFJlZk5vZGUsIFNwZWNOb25lLAorICAgICAgICAgICAgb3AsIGN1cnJlbnRDb2RlT3JpZ2luKCks
IGluZm8xLCBpbmZvMiwgY2hpbGQxLCBjaGlsZDIsIGNoaWxkMyk7CiAgICAgICAgIEFTU0VSVChv
cCAhPSBQaGkpOwotICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kKHJlc3VsdEluZGV4KTsK
KyAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZChyZXN1bHQpOwogCiAgICAgICAgIGlmIChk
ZWZhdWx0RmxhZ3Mob3ApICYgTm9kZU11c3RHZW5lcmF0ZSkKLSAgICAgICAgICAgIG1fZ3JhcGgu
cmVmKHJlc3VsdEluZGV4KTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdEluZGV4OworICAgICAgICAg
ICAgbV9ncmFwaC5yZWZDaGlsZHJlbihyZXN1bHQpOworICAgICAgICByZXR1cm4gcmVzdWx0Owog
ICAgIH0KICAgICAKLSAgICBOb2RlSW5kZXggYWRkVG9HcmFwaChOb2RlOjpWYXJBcmdUYWcsIE5v
ZGVUeXBlIG9wLCBPcEluZm8gaW5mbzEsIE9wSW5mbyBpbmZvMikKKyAgICBOb2RlKiBhZGRUb0dy
YXBoKE5vZGU6OlZhckFyZ1RhZywgTm9kZVR5cGUgb3AsIE9wSW5mbyBpbmZvMSwgT3BJbmZvIGlu
Zm8yKQogICAgIHsKLSAgICAgICAgTm9kZUluZGV4IHJlc3VsdEluZGV4ID0gKE5vZGVJbmRleClt
X2dyYXBoLnNpemUoKTsKLSAgICAgICAgbV9ncmFwaC5hcHBlbmQoTm9kZShOb2RlOjpWYXJBcmcs
IG9wLCBjdXJyZW50Q29kZU9yaWdpbigpLCBpbmZvMSwgaW5mbzIsIG1fZ3JhcGgubV92YXJBcmdD
aGlsZHJlbi5zaXplKCkgLSBtX251bVBhc3NlZFZhckFyZ3MsIG1fbnVtUGFzc2VkVmFyQXJncykp
OworICAgICAgICBOb2RlKiByZXN1bHQgPSBtX2dyYXBoLmFkZE5vZGUoCisgICAgICAgICAgICBE
b250UmVmQ2hpbGRyZW4sIERvbnRSZWZOb2RlLCBTcGVjTm9uZSwKKyAgICAgICAgICAgIE5vZGU6
OlZhckFyZywgb3AsIGN1cnJlbnRDb2RlT3JpZ2luKCksIGluZm8xLCBpbmZvMiwKKyAgICAgICAg
ICAgIG1fZ3JhcGgubV92YXJBcmdDaGlsZHJlbi5zaXplKCkgLSBtX251bVBhc3NlZFZhckFyZ3Ms
IG1fbnVtUGFzc2VkVmFyQXJncyk7CiAgICAgICAgIEFTU0VSVChvcCAhPSBQaGkpOwotICAgICAg
ICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kKHJlc3VsdEluZGV4KTsKKyAgICAgICAgbV9jdXJyZW50
QmxvY2stPmFwcGVuZChyZXN1bHQpOwogICAgICAgICAKICAgICAgICAgbV9udW1QYXNzZWRWYXJB
cmdzID0gMDsKICAgICAgICAgCiAgICAgICAgIGlmIChkZWZhdWx0RmxhZ3Mob3ApICYgTm9kZU11
c3RHZW5lcmF0ZSkKLSAgICAgICAgICAgIG1fZ3JhcGgucmVmKHJlc3VsdEluZGV4KTsKLSAgICAg
ICAgcmV0dXJuIHJlc3VsdEluZGV4OworICAgICAgICAgICAgbV9ncmFwaC5yZWZDaGlsZHJlbihy
ZXN1bHQpOworICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIAotICAgIE5vZGVJbmRleCBp
bnNlcnRQaGlOb2RlKE9wSW5mbyBpbmZvLCBCYXNpY0Jsb2NrKiBibG9jaykKKyAgICBOb2RlKiBp
bnNlcnRQaGlOb2RlKE9wSW5mbyBpbmZvLCBCYXNpY0Jsb2NrKiBibG9jaykKICAgICB7Ci0gICAg
ICAgIE5vZGVJbmRleCByZXN1bHRJbmRleCA9IChOb2RlSW5kZXgpbV9ncmFwaC5zaXplKCk7Ci0g
ICAgICAgIG1fZ3JhcGguYXBwZW5kKE5vZGUoUGhpLCBjdXJyZW50Q29kZU9yaWdpbigpLCBpbmZv
KSk7Ci0gICAgICAgIGJsb2NrLT5waGlzLmFwcGVuZChyZXN1bHRJbmRleCk7CisgICAgICAgIE5v
ZGUqIHJlc3VsdCA9IG1fZ3JhcGguYWRkTm9kZSgKKyAgICAgICAgICAgIERvbnRSZWZDaGlsZHJl
biwgRG9udFJlZk5vZGUsIFNwZWNOb25lLAorICAgICAgICAgICAgUGhpLCBjdXJyZW50Q29kZU9y
aWdpbigpLCBpbmZvKTsKKyAgICAgICAgYmxvY2stPnBoaXMuYXBwZW5kKHJlc3VsdCk7CiAKLSAg
ICAgICAgcmV0dXJuIHJlc3VsdEluZGV4OworICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0K
IAotICAgIHZvaWQgYWRkVmFyQXJnQ2hpbGQoTm9kZUluZGV4IGNoaWxkKQorICAgIHZvaWQgYWRk
VmFyQXJnQ2hpbGQoTm9kZSogY2hpbGQpCiAgICAgewogICAgICAgICBtX2dyYXBoLm1fdmFyQXJn
Q2hpbGRyZW4uYXBwZW5kKEVkZ2UoY2hpbGQpKTsKICAgICAgICAgbV9udW1QYXNzZWRWYXJBcmdz
Kys7CiAgICAgfQogICAgIAotICAgIE5vZGVJbmRleCBhZGRDYWxsKEludGVycHJldGVyKiBpbnRl
cnByZXRlciwgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgTm9kZVR5cGUgb3ApCisg
ICAgTm9kZSogYWRkQ2FsbChJbnRlcnByZXRlciogaW50ZXJwcmV0ZXIsIEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24sIE5vZGVUeXBlIG9wKQogICAgIHsKICAgICAgICAgSW5zdHJ1Y3Rp
b24qIHB1dEluc3RydWN0aW9uID0gY3VycmVudEluc3RydWN0aW9uICsgT1BDT0RFX0xFTkdUSChv
cF9jYWxsKTsKIApAQCAtODYyLDQ4ICs4NTUsNDEgQEAgcHJpdmF0ZToKICAgICAgICAgZm9yIChp
bnQgaSA9IDAgKyBkdW1teVRoaXNBcmd1bWVudDsgaSA8IGFyZ0NvdW50OyArK2kpCiAgICAgICAg
ICAgICBhZGRWYXJBcmdDaGlsZChnZXQocmVnaXN0ZXJPZmZzZXQgKyBhcmd1bWVudFRvT3BlcmFu
ZChpKSkpOwogCi0gICAgICAgIE5vZGVJbmRleCBjYWxsID0gYWRkVG9HcmFwaChOb2RlOjpWYXJB
cmcsIG9wLCBPcEluZm8oMCksIE9wSW5mbyhwcmVkaWN0aW9uKSk7CisgICAgICAgIE5vZGUqIGNh
bGwgPSBhZGRUb0dyYXBoKE5vZGU6OlZhckFyZywgb3AsIE9wSW5mbygwKSwgT3BJbmZvKHByZWRp
Y3Rpb24pKTsKICAgICAgICAgaWYgKGludGVycHJldGVyLT5nZXRPcGNvZGVJRChwdXRJbnN0cnVj
dGlvbi0+dS5vcGNvZGUpID09IG9wX2NhbGxfcHV0X3Jlc3VsdCkKICAgICAgICAgICAgIHNldChw
dXRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsIGNhbGwpOwogICAgICAgICByZXR1cm4gY2FsbDsK
ICAgICB9CiAgICAgCi0gICAgTm9kZUluZGV4IGFkZFN0cnVjdHVyZVRyYW5zaXRpb25DaGVjayhK
U0NlbGwqIG9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgTm9kZSogYWRkU3RydWN0
dXJlVHJhbnNpdGlvbkNoZWNrKEpTQ2VsbCogb2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkK
ICAgICB7CiAgICAgICAgIC8vIEFkZCBhIHdlYWsgSlMgY29uc3RhbnQgZm9yIHRoZSBvYmplY3Qg
cmVnYXJkbGVzcywgc2luY2UgdGhlIGNvZGUgc2hvdWxkCiAgICAgICAgIC8vIGJlIGpldHRpc29u
ZWQgaWYgdGhlIG9iamVjdCBldmVyIGRpZXMuCi0gICAgICAgIE5vZGVJbmRleCBvYmplY3RJbmRl
eCA9IGNlbGxDb25zdGFudChvYmplY3QpOworICAgICAgICBOb2RlKiBvYmplY3ROb2RlID0gY2Vs
bENvbnN0YW50KG9iamVjdCk7CiAgICAgICAgIAogICAgICAgICBpZiAob2JqZWN0LT5zdHJ1Y3R1
cmUoKSA9PSBzdHJ1Y3R1cmUgJiYgc3RydWN0dXJlLT50cmFuc2l0aW9uV2F0Y2hwb2ludFNldElz
U3RpbGxWYWxpZCgpKSB7Ci0gICAgICAgICAgICBhZGRUb0dyYXBoKFN0cnVjdHVyZVRyYW5zaXRp
b25XYXRjaHBvaW50LCBPcEluZm8oc3RydWN0dXJlKSwgb2JqZWN0SW5kZXgpOwotICAgICAgICAg
ICAgcmV0dXJuIG9iamVjdEluZGV4OworICAgICAgICAgICAgYWRkVG9HcmFwaChTdHJ1Y3R1cmVU
cmFuc2l0aW9uV2F0Y2hwb2ludCwgT3BJbmZvKHN0cnVjdHVyZSksIG9iamVjdE5vZGUpOworICAg
ICAgICAgICAgcmV0dXJuIG9iamVjdE5vZGU7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAg
IGFkZFRvR3JhcGgoQ2hlY2tTdHJ1Y3R1cmUsIE9wSW5mbyhtX2dyYXBoLmFkZFN0cnVjdHVyZVNl
dChzdHJ1Y3R1cmUpKSwgb2JqZWN0SW5kZXgpOworICAgICAgICBhZGRUb0dyYXBoKENoZWNrU3Ry
dWN0dXJlLCBPcEluZm8obV9ncmFwaC5hZGRTdHJ1Y3R1cmVTZXQoc3RydWN0dXJlKSksIG9iamVj
dE5vZGUpOwogICAgICAgICAKLSAgICAgICAgcmV0dXJuIG9iamVjdEluZGV4OworICAgICAgICBy
ZXR1cm4gb2JqZWN0Tm9kZTsKICAgICB9CiAgICAgCi0gICAgTm9kZUluZGV4IGFkZFN0cnVjdHVy
ZVRyYW5zaXRpb25DaGVjayhKU0NlbGwqIG9iamVjdCkKKyAgICBOb2RlKiBhZGRTdHJ1Y3R1cmVU
cmFuc2l0aW9uQ2hlY2soSlNDZWxsKiBvYmplY3QpCiAgICAgewogICAgICAgICByZXR1cm4gYWRk
U3RydWN0dXJlVHJhbnNpdGlvbkNoZWNrKG9iamVjdCwgb2JqZWN0LT5zdHJ1Y3R1cmUoKSk7CiAg
ICAgfQogICAgIAotICAgIFNwZWN1bGF0ZWRUeXBlIGdldFByZWRpY3Rpb25XaXRob3V0T1NSRXhp
dChOb2RlSW5kZXggbm9kZUluZGV4LCB1bnNpZ25lZCBieXRlY29kZUluZGV4KQorICAgIFNwZWN1
bGF0ZWRUeXBlIGdldFByZWRpY3Rpb25XaXRob3V0T1NSRXhpdCh1bnNpZ25lZCBieXRlY29kZUlu
ZGV4KQogICAgIHsKLSAgICAgICAgVU5VU0VEX1BBUkFNKG5vZGVJbmRleCk7Ci0gICAgICAgIAot
ICAgICAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uID0gbV9pbmxpbmVTdGFja1RvcC0+bV9w
cm9maWxlZEJsb2NrLT52YWx1ZVByb2ZpbGVQcmVkaWN0aW9uRm9yQnl0ZWNvZGVPZmZzZXQoYnl0
ZWNvZGVJbmRleCk7Ci0jaWYgREZHX0VOQUJMRShERUJVR19WRVJCT1NFKQotICAgICAgICBkYXRh
TG9nKCJEeW5hbWljIFtAIiwgbm9kZUluZGV4LCAiLCBiYyMiLCBieXRlY29kZUluZGV4LCAiXSBw
cmVkaWN0aW9uOiAiLCBTcGVjdWxhdGlvbkR1bXAocHJlZGljdGlvbiksICJcbiIpOwotI2VuZGlm
Ci0gICAgICAgIAotICAgICAgICByZXR1cm4gcHJlZGljdGlvbjsKKyAgICAgICAgcmV0dXJuIG1f
aW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jay0+dmFsdWVQcm9maWxlUHJlZGljdGlvbkZv
ckJ5dGVjb2RlT2Zmc2V0KGJ5dGVjb2RlSW5kZXgpOwogICAgIH0KIAotICAgIFNwZWN1bGF0ZWRU
eXBlIGdldFByZWRpY3Rpb24oTm9kZUluZGV4IG5vZGVJbmRleCwgdW5zaWduZWQgYnl0ZWNvZGVJ
bmRleCkKKyAgICBTcGVjdWxhdGVkVHlwZSBnZXRQcmVkaWN0aW9uKHVuc2lnbmVkIGJ5dGVjb2Rl
SW5kZXgpCiAgICAgewotICAgICAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uID0gZ2V0UHJl
ZGljdGlvbldpdGhvdXRPU1JFeGl0KG5vZGVJbmRleCwgYnl0ZWNvZGVJbmRleCk7CisgICAgICAg
IFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24gPSBnZXRQcmVkaWN0aW9uV2l0aG91dE9TUkV4aXQo
Ynl0ZWNvZGVJbmRleCk7CiAgICAgICAgIAogICAgICAgICBpZiAocHJlZGljdGlvbiA9PSBTcGVj
Tm9uZSkgewogICAgICAgICAgICAgLy8gV2UgaGF2ZSBubyBpbmZvcm1hdGlvbiBhYm91dCB3aGF0
IHZhbHVlcyB0aGlzIG5vZGUgZ2VuZXJhdGVzLiBHaXZlIHVwCkBAIC05MTYsMTIgKzkwMiwxMiBA
QCBwcml2YXRlOgogICAgIAogICAgIFNwZWN1bGF0ZWRUeXBlIGdldFByZWRpY3Rpb25XaXRob3V0
T1NSRXhpdCgpCiAgICAgewotICAgICAgICByZXR1cm4gZ2V0UHJlZGljdGlvbldpdGhvdXRPU1JF
eGl0KG1fZ3JhcGguc2l6ZSgpLCBtX2N1cnJlbnRQcm9maWxpbmdJbmRleCk7CisgICAgICAgIHJl
dHVybiBnZXRQcmVkaWN0aW9uV2l0aG91dE9TUkV4aXQobV9jdXJyZW50UHJvZmlsaW5nSW5kZXgp
OwogICAgIH0KICAgICAKICAgICBTcGVjdWxhdGVkVHlwZSBnZXRQcmVkaWN0aW9uKCkKICAgICB7
Ci0gICAgICAgIHJldHVybiBnZXRQcmVkaWN0aW9uKG1fZ3JhcGguc2l6ZSgpLCBtX2N1cnJlbnRQ
cm9maWxpbmdJbmRleCk7CisgICAgICAgIHJldHVybiBnZXRQcmVkaWN0aW9uKG1fY3VycmVudFBy
b2ZpbGluZ0luZGV4KTsKICAgICB9CiAgICAgCiAgICAgQXJyYXlNb2RlIGdldEFycmF5TW9kZShB
cnJheVByb2ZpbGUqIHByb2ZpbGUsIEFycmF5OjpBY3Rpb24gYWN0aW9uKQpAQCAtOTM1LDcgKzky
MSw3IEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiBnZXRBcnJheU1vZGUocHJvZmlsZSwgQXJy
YXk6OlJlYWQpOwogICAgIH0KICAgICAKLSAgICBBcnJheU1vZGUgZ2V0QXJyYXlNb2RlQW5kRW1p
dENoZWNrcyhBcnJheVByb2ZpbGUqIHByb2ZpbGUsIEFycmF5OjpBY3Rpb24gYWN0aW9uLCBOb2Rl
SW5kZXggYmFzZSkKKyAgICBBcnJheU1vZGUgZ2V0QXJyYXlNb2RlQW5kRW1pdENoZWNrcyhBcnJh
eVByb2ZpbGUqIHByb2ZpbGUsIEFycmF5OjpBY3Rpb24gYWN0aW9uLCBOb2RlKiBiYXNlKQogICAg
IHsKICAgICAgICAgcHJvZmlsZS0+Y29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKG1faW5saW5lU3Rh
Y2tUb3AtPm1fY29kZUJsb2NrKTsKICAgICAgICAgCkBAIC05NTksMTIgKzk0NSwxMCBAQCBwcml2
YXRlOgogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KICAgICAKLSAgICBOb2RlSW5kZXgg
bWFrZVNhZmUoTm9kZUluZGV4IG5vZGVJbmRleCkKKyAgICBOb2RlKiBtYWtlU2FmZShOb2RlKiBu
b2RlKQogICAgIHsKLSAgICAgICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhbbm9kZUluZGV4XTsKLSAg
ICAgICAgCiAgICAgICAgIGJvb2wgbGlrZWx5VG9UYWtlU2xvd0Nhc2U7Ci0gICAgICAgIGlmICgh
aXNYODYoKSAmJiBub2RlLm9wKCkgPT0gQXJpdGhNb2QpCisgICAgICAgIGlmICghaXNYODYoKSAm
JiBub2RlLT5vcCgpID09IEFyaXRoTW9kKQogICAgICAgICAgICAgbGlrZWx5VG9UYWtlU2xvd0Nh
c2UgPSBmYWxzZTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgbGlrZWx5VG9UYWtlU2xvd0Nh
c2UgPSBtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2stPmxpa2VseVRvVGFrZVNsb3dD
YXNlKG1fY3VycmVudEluZGV4KTsKQEAgLTk3MiwzMSArOTU2LDMxIEBAIHByaXZhdGU6CiAgICAg
ICAgIGlmICghbGlrZWx5VG9UYWtlU2xvd0Nhc2UKICAgICAgICAgICAgICYmICFtX2lubGluZVN0
YWNrVG9wLT5tX2V4aXRQcm9maWxlLmhhc0V4aXRTaXRlKG1fY3VycmVudEluZGV4LCBPdmVyZmxv
dykKICAgICAgICAgICAgICYmICFtX2lubGluZVN0YWNrVG9wLT5tX2V4aXRQcm9maWxlLmhhc0V4
aXRTaXRlKG1fY3VycmVudEluZGV4LCBOZWdhdGl2ZVplcm8pKQotICAgICAgICAgICAgcmV0dXJu
IG5vZGVJbmRleDsKKyAgICAgICAgICAgIHJldHVybiBub2RlOwogICAgICAgICAKLSAgICAgICAg
c3dpdGNoIChtX2dyYXBoW25vZGVJbmRleF0ub3AoKSkgeworICAgICAgICBzd2l0Y2ggKG5vZGUt
Pm9wKCkpIHsKICAgICAgICAgY2FzZSBVSW50MzJUb051bWJlcjoKICAgICAgICAgY2FzZSBBcml0
aEFkZDoKICAgICAgICAgY2FzZSBBcml0aFN1YjoKICAgICAgICAgY2FzZSBBcml0aE5lZ2F0ZToK
ICAgICAgICAgY2FzZSBWYWx1ZUFkZDoKICAgICAgICAgY2FzZSBBcml0aE1vZDogLy8gZm9yIEFy
aXRoTW9kICJNYXlPdmVyZmxvdyIgbWVhbnMgd2UgdHJpZWQgdG8gZGl2aWRlIGJ5IHplcm8sIG9y
IHdlIHNhdyBkb3VibGUuCi0gICAgICAgICAgICBtX2dyYXBoW25vZGVJbmRleF0ubWVyZ2VGbGFn
cyhOb2RlTWF5T3ZlcmZsb3cpOworICAgICAgICAgICAgbm9kZS0+bWVyZ2VGbGFncyhOb2RlTWF5
T3ZlcmZsb3cpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICAgICAgY2Fz
ZSBBcml0aE11bDoKICAgICAgICAgICAgIGlmIChtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVk
QmxvY2stPmxpa2VseVRvVGFrZURlZXBlc3RTbG93Q2FzZShtX2N1cnJlbnRJbmRleCkKICAgICAg
ICAgICAgICAgICB8fCBtX2lubGluZVN0YWNrVG9wLT5tX2V4aXRQcm9maWxlLmhhc0V4aXRTaXRl
KG1fY3VycmVudEluZGV4LCBPdmVyZmxvdykpIHsKICNpZiBERkdfRU5BQkxFKERFQlVHX1ZFUkJP
U0UpCi0gICAgICAgICAgICAgICAgZGF0YUxvZ0YoIk1ha2luZyBBcml0aE11bCBAJXUgdGFrZSBk
ZWVwZXN0IHNsb3cgY2FzZS5cbiIsIG5vZGVJbmRleCk7CisgICAgICAgICAgICAgICAgZGF0YUxv
Z0YoIk1ha2luZyBBcml0aE11bCBAJXUgdGFrZSBkZWVwZXN0IHNsb3cgY2FzZS5cbiIsIG5vZGUt
PmluZGV4KCkpOwogI2VuZGlmCi0gICAgICAgICAgICAgICAgbV9ncmFwaFtub2RlSW5kZXhdLm1l
cmdlRmxhZ3MoTm9kZU1heU92ZXJmbG93IHwgTm9kZU1heU5lZ1plcm8pOworICAgICAgICAgICAg
ICAgIG5vZGUtPm1lcmdlRmxhZ3MoTm9kZU1heU92ZXJmbG93IHwgTm9kZU1heU5lZ1plcm8pOwog
ICAgICAgICAgICAgfSBlbHNlIGlmIChtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2st
Pmxpa2VseVRvVGFrZVNsb3dDYXNlKG1fY3VycmVudEluZGV4KQogICAgICAgICAgICAgICAgICAg
ICAgICB8fCBtX2lubGluZVN0YWNrVG9wLT5tX2V4aXRQcm9maWxlLmhhc0V4aXRTaXRlKG1fY3Vy
cmVudEluZGV4LCBOZWdhdGl2ZVplcm8pKSB7CiAjaWYgREZHX0VOQUJMRShERUJVR19WRVJCT1NF
KQotICAgICAgICAgICAgICAgIGRhdGFMb2dGKCJNYWtpbmcgQXJpdGhNdWwgQCV1IHRha2UgZmFz
dGVyIHNsb3cgY2FzZS5cbiIsIG5vZGVJbmRleCk7CisgICAgICAgICAgICAgICAgZGF0YUxvZ0Yo
Ik1ha2luZyBBcml0aE11bCBAJXUgdGFrZSBmYXN0ZXIgc2xvdyBjYXNlLlxuIiwgbm9kZS0+aW5k
ZXgoKSk7CiAjZW5kaWYKLSAgICAgICAgICAgICAgICBtX2dyYXBoW25vZGVJbmRleF0ubWVyZ2VG
bGFncyhOb2RlTWF5TmVnWmVybyk7CisgICAgICAgICAgICAgICAgbm9kZS0+bWVyZ2VGbGFncyhO
b2RlTWF5TmVnWmVybyk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgIApAQCAtMTAwNSwxMiArOTg5LDEyIEBAIHByaXZhdGU6CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgcmV0dXJuIG5vZGVJbmRleDsKKyAgICAg
ICAgcmV0dXJuIG5vZGU7CiAgICAgfQogICAgIAotICAgIE5vZGVJbmRleCBtYWtlRGl2U2FmZShO
b2RlSW5kZXggbm9kZUluZGV4KQorICAgIE5vZGUqIG1ha2VEaXZTYWZlKE5vZGUqIG5vZGUpCiAg
ICAgewotICAgICAgICBBU1NFUlQobV9ncmFwaFtub2RlSW5kZXhdLm9wKCkgPT0gQXJpdGhEaXYp
OworICAgICAgICBBU1NFUlQobm9kZS0+b3AoKSA9PSBBcml0aERpdik7CiAgICAgICAgIAogICAg
ICAgICAvLyBUaGUgbWFpbiBzbG93IGNhc2UgY291bnRlciBmb3Igb3BfZGl2IGluIHRoZSBvbGQg
SklUIGNvdW50cyBvbmx5IHdoZW4KICAgICAgICAgLy8gdGhlIG9wZXJhbmRzIGFyZSBub3QgbnVt
YmVycy4gV2UgZG9uJ3QgY2FyZSBhYm91dCB0aGF0IHNpbmNlIHdlIGFscmVhZHkKQEAgLTEwMjEs
NDAgKzEwMDUsMTcgQEAgcHJpdmF0ZToKICAgICAgICAgaWYgKCFtX2lubGluZVN0YWNrVG9wLT5t
X3Byb2ZpbGVkQmxvY2stPmNvdWxkVGFrZVNwZWNpYWxGYXN0Q2FzZShtX2N1cnJlbnRJbmRleCkK
ICAgICAgICAgICAgICYmICFtX2lubGluZVN0YWNrVG9wLT5tX2V4aXRQcm9maWxlLmhhc0V4aXRT
aXRlKG1fY3VycmVudEluZGV4LCBPdmVyZmxvdykKICAgICAgICAgICAgICYmICFtX2lubGluZVN0
YWNrVG9wLT5tX2V4aXRQcm9maWxlLmhhc0V4aXRTaXRlKG1fY3VycmVudEluZGV4LCBOZWdhdGl2
ZVplcm8pKQotICAgICAgICAgICAgcmV0dXJuIG5vZGVJbmRleDsKKyAgICAgICAgICAgIHJldHVy
biBub2RlOwogICAgICAgICAKICNpZiBERkdfRU5BQkxFKERFQlVHX1ZFUkJPU0UpCi0gICAgICAg
IGRhdGFMb2dGKCJNYWtpbmcgJXMgQCV1IHNhZmUgYXQgYmMjJXUgYmVjYXVzZSBzcGVjaWFsIGZh
c3QtY2FzZSBjb3VudGVyIGlzIGF0ICV1IGFuZCBleGl0IHByb2ZpbGVzIHNheSAlZCwgJWRcbiIs
IEdyYXBoOjpvcE5hbWUobV9ncmFwaFtub2RlSW5kZXhdLm9wKCkpLCBub2RlSW5kZXgsIG1fY3Vy
cmVudEluZGV4LCBtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2stPnNwZWNpYWxGYXN0
Q2FzZVByb2ZpbGVGb3JCeXRlY29kZU9mZnNldChtX2N1cnJlbnRJbmRleCktPm1fY291bnRlciwg
bV9pbmxpbmVTdGFja1RvcC0+bV9leGl0UHJvZmlsZS5oYXNFeGl0U2l0ZShtX2N1cnJlbnRJbmRl
eCwgT3ZlcmZsb3cpLCBtX2lubGluZVN0YWNrVG9wLT5tX2V4aXRQcm9maWxlLmhhc0V4aXRTaXRl
KG1fY3VycmVudEluZGV4LCBOZWdhdGl2ZVplcm8pKTsKKyAgICAgICAgZGF0YUxvZ0YoIk1ha2lu
ZyAlcyBAJXUgc2FmZSBhdCBiYyMldSBiZWNhdXNlIHNwZWNpYWwgZmFzdC1jYXNlIGNvdW50ZXIg
aXMgYXQgJXUgYW5kIGV4aXQgcHJvZmlsZXMgc2F5ICVkLCAlZFxuIiwgR3JhcGg6Om9wTmFtZShu
b2RlLT5vcCgpKSwgbm9kZS0+aW5kZXgoKSwgbV9jdXJyZW50SW5kZXgsIG1faW5saW5lU3RhY2tU
b3AtPm1fcHJvZmlsZWRCbG9jay0+c3BlY2lhbEZhc3RDYXNlUHJvZmlsZUZvckJ5dGVjb2RlT2Zm
c2V0KG1fY3VycmVudEluZGV4KS0+bV9jb3VudGVyLCBtX2lubGluZVN0YWNrVG9wLT5tX2V4aXRQ
cm9maWxlLmhhc0V4aXRTaXRlKG1fY3VycmVudEluZGV4LCBPdmVyZmxvdyksIG1faW5saW5lU3Rh
Y2tUb3AtPm1fZXhpdFByb2ZpbGUuaGFzRXhpdFNpdGUobV9jdXJyZW50SW5kZXgsIE5lZ2F0aXZl
WmVybykpOwogI2VuZGlmCiAgICAgICAgIAogICAgICAgICAvLyBGSVhNRTogSXQgbWlnaHQgYmUg
cG9zc2libGUgdG8gbWFrZSB0aGlzIG1vcmUgZ3JhbnVsYXIuIFRoZSBERkcgY2VydGFpbmx5IGNh
bgogICAgICAgICAvLyBkaXN0aW5ndWlzaCBiZXR3ZWVuIG5lZ2F0aXZlIHplcm8gYW5kIG92ZXJm
bG93IGluIGl0cyBleGl0IHByb2ZpbGVzLgotICAgICAgICBtX2dyYXBoW25vZGVJbmRleF0ubWVy
Z2VGbGFncyhOb2RlTWF5T3ZlcmZsb3cgfCBOb2RlTWF5TmVnWmVybyk7CisgICAgICAgIG5vZGUt
Pm1lcmdlRmxhZ3MoTm9kZU1heU92ZXJmbG93IHwgTm9kZU1heU5lZ1plcm8pOwogICAgICAgICAK
LSAgICAgICAgcmV0dXJuIG5vZGVJbmRleDsKLSAgICB9Ci0gICAgCi0gICAgYm9vbCB3aWxsTmVl
ZEZsdXNoKFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKLSAgICB7Ci0gICAgICAgIFBvbHlt
b3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdCogbGlzdDsKLSAgICAgICAgaW50IGxpc3RTaXplOwot
ICAgICAgICBzd2l0Y2ggKHN0dWJJbmZvLmFjY2Vzc1R5cGUpIHsKLSAgICAgICAgY2FzZSBhY2Nl
c3NfZ2V0X2J5X2lkX3NlbGZfbGlzdDoKLSAgICAgICAgICAgIGxpc3QgPSBzdHViSW5mby51Lmdl
dEJ5SWRTZWxmTGlzdC5zdHJ1Y3R1cmVMaXN0OwotICAgICAgICAgICAgbGlzdFNpemUgPSBzdHVi
SW5mby51LmdldEJ5SWRTZWxmTGlzdC5saXN0U2l6ZTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBjYXNlIGFjY2Vzc19nZXRfYnlfaWRfcHJvdG9fbGlzdDoKLSAgICAgICAgICAgIGxpc3Qg
PSBzdHViSW5mby51LmdldEJ5SWRQcm90b0xpc3Quc3RydWN0dXJlTGlzdDsKLSAgICAgICAgICAg
IGxpc3RTaXplID0gc3R1YkluZm8udS5nZXRCeUlkUHJvdG9MaXN0Lmxpc3RTaXplOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgICAgIH0KLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsaXN0U2l6ZTsgKytpKSB7
Ci0gICAgICAgICAgICBpZiAoIWxpc3QtPmxpc3RbaV0uaXNEaXJlY3QpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICByZXR1cm4gbm9kZTsKICAgICB9CiAgICAgCiAgICAgYm9vbCBzdHJ1Y3R1cmVDaGFpbklzU3Rp
bGxWYWxpZChib29sIGRpcmVjdCwgU3RydWN0dXJlKiBwcmV2aW91c1N0cnVjdHVyZSwgU3RydWN0
dXJlQ2hhaW4qIGNoYWluKQpAQCAtMTA5OCwyMSArMTA1OSwyMSBAQCBwcml2YXRlOgogICAgIHVu
c2lnbmVkIG1fY29uc3RhbnROYU47CiAgICAgdW5zaWduZWQgbV9jb25zdGFudDE7CiAgICAgSGFz
aE1hcDxKU0NlbGwqLCB1bnNpZ25lZD4gbV9jZWxsQ29uc3RhbnRzOwotICAgIEhhc2hNYXA8SlND
ZWxsKiwgTm9kZUluZGV4PiBtX2NlbGxDb25zdGFudE5vZGVzOworICAgIEhhc2hNYXA8SlNDZWxs
KiwgTm9kZSo+IG1fY2VsbENvbnN0YW50Tm9kZXM7CiAKICAgICAvLyBBIGNvbnN0YW50IGluIHRo
ZSBjb25zdGFudCBwb29sIG1heSBiZSByZXByZXNlbnRlZCBieSBtb3JlIHRoYW4gb25lCiAgICAg
Ly8gbm9kZSBpbiB0aGUgZ3JhcGgsIGRlcGVuZGluZyBvbiB0aGUgY29udGV4dCBpbiB3aGljaCBp
dCBpcyBiZWluZyB1c2VkLgogICAgIHN0cnVjdCBDb25zdGFudFJlY29yZCB7CiAgICAgICAgIENv
bnN0YW50UmVjb3JkKCkKLSAgICAgICAgICAgIDogYXNJbnQzMihOb05vZGUpCi0gICAgICAgICAg
ICAsIGFzTnVtZXJpYyhOb05vZGUpCi0gICAgICAgICAgICAsIGFzSlNWYWx1ZShOb05vZGUpCisg
ICAgICAgICAgICA6IGFzSW50MzIoMCkKKyAgICAgICAgICAgICwgYXNOdW1lcmljKDApCisgICAg
ICAgICAgICAsIGFzSlNWYWx1ZSgwKQogICAgICAgICB7CiAgICAgICAgIH0KIAotICAgICAgICBO
b2RlSW5kZXggYXNJbnQzMjsKLSAgICAgICAgTm9kZUluZGV4IGFzTnVtZXJpYzsKLSAgICAgICAg
Tm9kZUluZGV4IGFzSlNWYWx1ZTsKKyAgICAgICAgTm9kZSogYXNJbnQzMjsKKyAgICAgICAgTm9k
ZSogYXNOdW1lcmljOworICAgICAgICBOb2RlKiBhc0pTVmFsdWU7CiAgICAgfTsKIAogICAgIC8v
IFRyYWNrIHRoZSBpbmRleCBvZiB0aGUgbm9kZSB3aG9zZSByZXN1bHQgaXMgdGhlIGN1cnJlbnQg
dmFsdWUgZm9yIGV2ZXJ5CkBAIC0xMTM4LDcgKzEwOTksNyBAQCBwcml2YXRlOgogICAgIHVuc2ln
bmVkIG1fZ2xvYmFsUmVzb2x2ZU51bWJlcjsKIAogICAgIHN0cnVjdCBQaGlTdGFja0VudHJ5IHsK
LSAgICAgICAgUGhpU3RhY2tFbnRyeShCYXNpY0Jsb2NrKiBibG9jaywgTm9kZUluZGV4IHBoaSwg
dW5zaWduZWQgdmFyTm8pCisgICAgICAgIFBoaVN0YWNrRW50cnkoQmFzaWNCbG9jayogYmxvY2ss
IE5vZGUqIHBoaSwgdW5zaWduZWQgdmFyTm8pCiAgICAgICAgICAgICA6IG1fYmxvY2soYmxvY2sp
CiAgICAgICAgICAgICAsIG1fcGhpKHBoaSkKICAgICAgICAgICAgICwgbV92YXJObyh2YXJObykK
QEAgLTExNDYsNyArMTEwNyw3IEBAIHByaXZhdGU6CiAgICAgICAgIH0KIAogICAgICAgICBCYXNp
Y0Jsb2NrKiBtX2Jsb2NrOwotICAgICAgICBOb2RlSW5kZXggbV9waGk7CisgICAgICAgIE5vZGUq
IG1fcGhpOwogICAgICAgICB1bnNpZ25lZCBtX3Zhck5vOwogICAgIH07CiAgICAgVmVjdG9yPFBo
aVN0YWNrRW50cnksIDE2PiBtX2FyZ3VtZW50UGhpU3RhY2s7CkBAIC0xMjgwLDcgKzEyNDEsNyBA
QCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVDYWxsKEludGVycHJlCiB7CiAgICAgQVNTRVJU
KE9QQ09ERV9MRU5HVEgob3BfY2FsbCkgPT0gT1BDT0RFX0xFTkdUSChvcF9jb25zdHJ1Y3QpKTsK
ICAgICAKLSAgICBOb2RlSW5kZXggY2FsbFRhcmdldCA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25b
MV0udS5vcGVyYW5kKTsKKyAgICBOb2RlKiBjYWxsVGFyZ2V0ID0gZ2V0KGN1cnJlbnRJbnN0cnVj
dGlvblsxXS51Lm9wZXJhbmQpOwogICAgIAogICAgIENhbGxMaW5rU3RhdHVzIGNhbGxMaW5rU3Rh
dHVzOwogCkBAIC0xMjk0LDcgKzEyNTUsNyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVD
YWxsKEludGVycHJlCiAgICAgfQogICAgIAogI2lmIERGR19FTkFCTEUoREVCVUdfVkVSQk9TRSkK
LSAgICBkYXRhTG9nKCJGb3IgY2FsbCBhdCBAIiwgbV9ncmFwaC5zaXplKCksICIgYmMjIiwgbV9j
dXJyZW50SW5kZXgsICI6ICIsIGNhbGxMaW5rU3RhdHVzLCAiXG4iKTsKKyAgICBkYXRhTG9nKCJG
b3IgY2FsbCBhdCBiYyMiLCBtX2N1cnJlbnRJbmRleCwgIjogIiwgY2FsbExpbmtTdGF0dXMsICJc
biIpOwogI2VuZGlmCiAgICAgCiAgICAgaWYgKCFjYWxsTGlua1N0YXR1cy5jYW5PcHRpbWl6ZSgp
KSB7CkBAIC0xMzUyLDE4ICsxMzEzLDE4IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUNh
bGwoSW50ZXJwcmUKICAgICBhZGRDYWxsKGludGVycHJldGVyLCBjdXJyZW50SW5zdHJ1Y3Rpb24s
IG9wKTsKIH0KIAotdm9pZCBCeXRlQ29kZVBhcnNlcjo6ZW1pdEZ1bmN0aW9uQ2hlY2tzKGNvbnN0
IENhbGxMaW5rU3RhdHVzJiBjYWxsTGlua1N0YXR1cywgTm9kZUluZGV4IGNhbGxUYXJnZXQsIGlu
dCByZWdpc3Rlck9mZnNldCwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQordm9pZCBCeXRl
Q29kZVBhcnNlcjo6ZW1pdEZ1bmN0aW9uQ2hlY2tzKGNvbnN0IENhbGxMaW5rU3RhdHVzJiBjYWxs
TGlua1N0YXR1cywgTm9kZSogY2FsbFRhcmdldCwgaW50IHJlZ2lzdGVyT2Zmc2V0LCBDb2RlU3Bl
Y2lhbGl6YXRpb25LaW5kIGtpbmQpCiB7CiAgICAgaWYgKGNhbGxMaW5rU3RhdHVzLmlzUHJvdmVk
KCkpCiAgICAgICAgIHJldHVybjsKICAgICAKICAgICBBU1NFUlQoY2FsbExpbmtTdGF0dXMuY2Fu
T3B0aW1pemUoKSk7CiAgICAgCi0gICAgTm9kZUluZGV4IHRoaXNBcmd1bWVudDsKKyAgICBOb2Rl
KiB0aGlzQXJndW1lbnQ7CiAgICAgaWYgKGtpbmQgPT0gQ29kZUZvckNhbGwpCiAgICAgICAgIHRo
aXNBcmd1bWVudCA9IGdldChyZWdpc3Rlck9mZnNldCArIGFyZ3VtZW50VG9PcGVyYW5kKDApKTsK
ICAgICBlbHNlCi0gICAgICAgIHRoaXNBcmd1bWVudCA9IE5vTm9kZTsKKyAgICAgICAgdGhpc0Fy
Z3VtZW50ID0gMDsKIAogICAgIGlmIChKU0Z1bmN0aW9uKiBmdW5jdGlvbiA9IGNhbGxMaW5rU3Rh
dHVzLmZ1bmN0aW9uKCkpCiAgICAgICAgIGFkZFRvR3JhcGgoQ2hlY2tGdW5jdGlvbiwgT3BJbmZv
KGZ1bmN0aW9uKSwgY2FsbFRhcmdldCwgdGhpc0FyZ3VtZW50KTsKQEAgLTEzNzYsNyArMTMzNyw3
IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmVtaXRGdW5jdGlvbkNoZWNrcygKICAgICB9CiB9CiAK
LWJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUlubGluaW5nKGJvb2wgdXNlc1Jlc3VsdCwgTm9k
ZUluZGV4IGNhbGxUYXJnZXROb2RlSW5kZXgsIGludCByZXN1bHRPcGVyYW5kLCBjb25zdCBDYWxs
TGlua1N0YXR1cyYgY2FsbExpbmtTdGF0dXMsIGludCByZWdpc3Rlck9mZnNldCwgaW50IGFyZ3Vt
ZW50Q291bnRJbmNsdWRpbmdUaGlzLCB1bnNpZ25lZCBuZXh0T2Zmc2V0LCBDb2RlU3BlY2lhbGl6
YXRpb25LaW5kIGtpbmQpCitib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbmxpbmluZyhib29s
IHVzZXNSZXN1bHQsIE5vZGUqIGNhbGxUYXJnZXROb2RlLCBpbnQgcmVzdWx0T3BlcmFuZCwgY29u
c3QgQ2FsbExpbmtTdGF0dXMmIGNhbGxMaW5rU3RhdHVzLCBpbnQgcmVnaXN0ZXJPZmZzZXQsIGlu
dCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgdW5zaWduZWQgbmV4dE9mZnNldCwgQ29kZVNw
ZWNpYWxpemF0aW9uS2luZCBraW5kKQogewogICAgIC8vIEZpcnN0LCB0aGUgcmVhbGx5IHNpbXBs
ZSBjaGVja3M6IGRvIHdlIGhhdmUgYW4gYWN0dWFsIEpTIGZ1bmN0aW9uPwogICAgIGlmICghY2Fs
bExpbmtTdGF0dXMuZXhlY3V0YWJsZSgpKQpAQCAtMTQyMyw3ICsxMzg0LDcgQEAgYm9vbCBCeXRl
Q29kZVBhcnNlcjo6aGFuZGxlSW5saW5pbmcoYm9vbAogICAgIC8vIE5vdyB3ZSBrbm93IHdpdGhv
dXQgYSBkb3VidCB0aGF0IHdlIGFyZSBjb21taXR0ZWQgdG8gaW5saW5pbmcuIFNvIGJlZ2luIHRo
ZSBwcm9jZXNzCiAgICAgLy8gYnkgY2hlY2tpbmcgdGhlIGNhbGxlZSAoaWYgbmVjZXNzYXJ5KSBh
bmQgbWFraW5nIHN1cmUgdGhhdCBhcmd1bWVudHMgYW5kIHRoZSBjYWxsZWUKICAgICAvLyBhcmUg
Zmx1c2hlZC4KLSAgICBlbWl0RnVuY3Rpb25DaGVja3MoY2FsbExpbmtTdGF0dXMsIGNhbGxUYXJn
ZXROb2RlSW5kZXgsIHJlZ2lzdGVyT2Zmc2V0LCBraW5kKTsKKyAgICBlbWl0RnVuY3Rpb25DaGVj
a3MoY2FsbExpbmtTdGF0dXMsIGNhbGxUYXJnZXROb2RlLCByZWdpc3Rlck9mZnNldCwga2luZCk7
CiAgICAgCiAgICAgLy8gRklYTUU6IERvbid0IGZsdXNoIGNvbnN0YW50cyEKICAgICAKQEAgLTE0
NTcsOCArMTQxOCw4IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUlubGluaW5nKGJvb2wK
IAogICAgIGFkZFRvR3JhcGgoSW5saW5lU3RhcnQsIE9wSW5mbyhhcmd1bWVudFBvc2l0aW9uU3Rh
cnQpKTsKICAgICBpZiAoY2FsbExpbmtTdGF0dXMuaXNDbG9zdXJlQ2FsbCgpKSB7Ci0gICAgICAg
IGFkZFRvR3JhcGgoU2V0Q2FsbGVlLCBjYWxsVGFyZ2V0Tm9kZUluZGV4KTsKLSAgICAgICAgYWRk
VG9HcmFwaChTZXRNeVNjb3BlLCBhZGRUb0dyYXBoKEdldFNjb3BlLCBjYWxsVGFyZ2V0Tm9kZUlu
ZGV4KSk7CisgICAgICAgIGFkZFRvR3JhcGgoU2V0Q2FsbGVlLCBjYWxsVGFyZ2V0Tm9kZSk7Cisg
ICAgICAgIGFkZFRvR3JhcGgoU2V0TXlTY29wZSwgYWRkVG9HcmFwaChHZXRTY29wZSwgY2FsbFRh
cmdldE5vZGUpKTsKICAgICB9CiAgICAgCiAgICAgcGFyc2VDb2RlQmxvY2soKTsKQEAgLTE0OTQs
MTEgKzE0NTUsMTEgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW5saW5pbmcoYm9vbAog
ICAgIH0gZWxzZQogICAgICAgICBBU1NFUlQoaW5saW5lU3RhY2tFbnRyeS5tX3VubGlua2VkQmxv
Y2tzLmlzRW1wdHkoKSk7CiAgICAgCisgICAgQmFzaWNCbG9jayogbGFzdEJsb2NrID0gbV9ncmFw
aC5tX2Jsb2Nrcy5sYXN0KCkuZ2V0KCk7CiAgICAgLy8gSWYgdGhlcmUgd2FzIGEgcmV0dXJuLCBi
dXQgbm8gZWFybHkgcmV0dXJucywgdGhlbiB3ZSdyZSBkb25lLiBXZSBhbGxvdyBwYXJzaW5nIG9m
CiAgICAgLy8gdGhlIGNhbGxlciB0byBjb250aW51ZSBpbiB3aGF0ZXZlciBiYXNpYyBibG9jayB3
ZSdyZSBpbiByaWdodCBub3cuCiAgICAgaWYgKCFpbmxpbmVTdGFja0VudHJ5Lm1fZGlkRWFybHlS
ZXR1cm4gJiYgaW5saW5lU3RhY2tFbnRyeS5tX2RpZFJldHVybikgewotICAgICAgICBCYXNpY0Js
b2NrKiBsYXN0QmxvY2sgPSBtX2dyYXBoLm1fYmxvY2tzLmxhc3QoKS5nZXQoKTsKLSAgICAgICAg
QVNTRVJUKGxhc3RCbG9jay0+aXNFbXB0eSgpIHx8ICFtX2dyYXBoLmxhc3QoKS5pc1Rlcm1pbmFs
KCkpOworICAgICAgICBBU1NFUlQobGFzdEJsb2NrLT5pc0VtcHR5KCkgfHwgIWxhc3RCbG9jay0+
bGFzdCgpLT5pc1Rlcm1pbmFsKCkpOwogICAgICAgICAKICAgICAgICAgLy8gSWYgd2UgY3JlYXRl
ZCBuZXcgYmxvY2tzIHRoZW4gdGhlIGxhc3QgYmxvY2sgbmVlZHMgbGlua2luZywgYnV0IGluIHRo
ZQogICAgICAgICAvLyBjYWxsZXIuIEl0IGRvZXNuJ3QgbmVlZCB0byBiZSBsaW5rZWQgdG8sIGJ1
dCBpdCBuZWVkcyBvdXRnb2luZyBsaW5rcy4KQEAgLTE1MjIsNyArMTQ4Myw3IEBAIGJvb2wgQnl0
ZUNvZGVQYXJzZXI6OmhhbmRsZUlubGluaW5nKGJvb2wKICAgICB9CiAgICAgCiAgICAgLy8gSWYg
d2UgZ2V0IHRvIHRoaXMgcG9pbnQgdGhlbiBhbGwgYmxvY2tzIG11c3QgZW5kIGluIHNvbWUgc29y
dCBvZiB0ZXJtaW5hbHMuCi0gICAgQVNTRVJUKG1fZ3JhcGgubGFzdCgpLmlzVGVybWluYWwoKSk7
CisgICAgQVNTRVJUKGxhc3RCbG9jay0+bGFzdCgpLT5pc1Rlcm1pbmFsKCkpOwogICAgIAogICAg
IC8vIExpbmsgdGhlIGVhcmx5IHJldHVybnMgdG8gdGhlIGJhc2ljIGJsb2NrIHdlJ3JlIGFib3V0
IHRvIGNyZWF0ZS4KICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGlubGluZVN0YWNrRW50cnku
bV91bmxpbmtlZEJsb2Nrcy5zaXplKCk7ICsraSkgewpAQCAtMTUzMCwxMCArMTQ5MSwxMCBAQCBi
b29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbmxpbmluZyhib29sCiAgICAgICAgICAgICBjb250
aW51ZTsKICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLm1fYmxvY2tzW2lubGlu
ZVN0YWNrRW50cnkubV91bmxpbmtlZEJsb2Nrc1tpXS5tX2Jsb2NrSW5kZXhdLmdldCgpOwogICAg
ICAgICBBU1NFUlQoIWJsb2NrLT5pc0xpbmtlZCk7Ci0gICAgICAgIE5vZGUmIG5vZGUgPSBtX2dy
YXBoW2Jsb2NrLT5sYXN0KCldOwotICAgICAgICBBU1NFUlQobm9kZS5vcCgpID09IEp1bXApOwot
ICAgICAgICBBU1NFUlQobm9kZS50YWtlbkJsb2NrSW5kZXgoKSA9PSBOb0Jsb2NrKTsKLSAgICAg
ICAgbm9kZS5zZXRUYWtlbkJsb2NrSW5kZXgobV9ncmFwaC5tX2Jsb2Nrcy5zaXplKCkpOworICAg
ICAgICBOb2RlKiBub2RlID0gYmxvY2stPmxhc3QoKTsKKyAgICAgICAgQVNTRVJUKG5vZGUtPm9w
KCkgPT0gSnVtcCk7CisgICAgICAgIEFTU0VSVChub2RlLT50YWtlbkJsb2NrSW5kZXgoKSA9PSBO
b0Jsb2NrKTsKKyAgICAgICAgbm9kZS0+c2V0VGFrZW5CbG9ja0luZGV4KG1fZ3JhcGgubV9ibG9j
a3Muc2l6ZSgpKTsKICAgICAgICAgaW5saW5lU3RhY2tFbnRyeS5tX3VubGlua2VkQmxvY2tzW2ld
Lm1fbmVlZHNFYXJseVJldHVybkxpbmtpbmcgPSBmYWxzZTsKICNpZiAhQVNTRVJUX0RJU0FCTEVE
CiAgICAgICAgIGJsb2NrLT5pc0xpbmtlZCA9IHRydWU7CkBAIC0xNTYwLDExICsxNTIxLDExIEBA
IGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUlubGluaW5nKGJvb2wKICAgICByZXR1cm4gdHJ1
ZTsKIH0KIAotdm9pZCBCeXRlQ29kZVBhcnNlcjo6c2V0SW50cmluc2ljUmVzdWx0KGJvb2wgdXNl
c1Jlc3VsdCwgaW50IHJlc3VsdE9wZXJhbmQsIE5vZGVJbmRleCBub2RlSW5kZXgpCit2b2lkIEJ5
dGVDb2RlUGFyc2VyOjpzZXRJbnRyaW5zaWNSZXN1bHQoYm9vbCB1c2VzUmVzdWx0LCBpbnQgcmVz
dWx0T3BlcmFuZCwgTm9kZSogbm9kZSkKIHsKICAgICBpZiAoIXVzZXNSZXN1bHQpCiAgICAgICAg
IHJldHVybjsKLSAgICBzZXQocmVzdWx0T3BlcmFuZCwgbm9kZUluZGV4KTsKKyAgICBzZXQocmVz
dWx0T3BlcmFuZCwgbm9kZSk7CiB9CiAKIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZU1pbk1h
eChib29sIHVzZXNSZXN1bHQsIGludCByZXN1bHRPcGVyYW5kLCBOb2RlVHlwZSBvcCwgaW50IHJl
Z2lzdGVyT2Zmc2V0LCBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpCkBAIC0xNTc2LDcg
KzE1MzcsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVNaW5NYXgoYm9vbCB1CiAgICAg
IAogICAgIGlmIChhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA9PSAyKSB7IC8vIE1hdGgubWlu
KHgpCiAgICAgICAgIC8vIEZJWE1FOiB3aGF0IHdlJ2QgcmVhbGx5IGxpa2UgaXMgYSBWYWx1ZVRv
TnVtYmVyLCBleGNlcHQgd2UgZG9uJ3Qgc3VwcG9ydCB0aGF0IHJpZ2h0IG5vdy4gT2ggd2VsbC4K
LSAgICAgICAgTm9kZUluZGV4IHJlc3VsdCA9IGdldChyZWdpc3Rlck9mZnNldCArIGFyZ3VtZW50
VG9PcGVyYW5kKDEpKTsKKyAgICAgICAgTm9kZSogcmVzdWx0ID0gZ2V0KHJlZ2lzdGVyT2Zmc2V0
ICsgYXJndW1lbnRUb09wZXJhbmQoMSkpOwogICAgICAgICBhZGRUb0dyYXBoKENoZWNrTnVtYmVy
LCByZXN1bHQpOwogICAgICAgICBzZXRJbnRyaW5zaWNSZXN1bHQodXNlc1Jlc3VsdCwgcmVzdWx0
T3BlcmFuZCwgcmVzdWx0KTsKICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0xNjA1LDEwICsxNTY2
LDEwIEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUludHJpbnNpYyhib28KICAgICAgICAg
aWYgKCFNYWNyb0Fzc2VtYmxlcjo6c3VwcG9ydHNGbG9hdGluZ1BvaW50QWJzKCkpCiAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRleCA9IGFkZFRv
R3JhcGgoQXJpdGhBYnMsIGdldChyZWdpc3Rlck9mZnNldCArIGFyZ3VtZW50VG9PcGVyYW5kKDEp
KSk7CisgICAgICAgIE5vZGUqIG5vZGUgPSBhZGRUb0dyYXBoKEFyaXRoQWJzLCBnZXQocmVnaXN0
ZXJPZmZzZXQgKyBhcmd1bWVudFRvT3BlcmFuZCgxKSkpOwogICAgICAgICBpZiAobV9pbmxpbmVT
dGFja1RvcC0+bV9leGl0UHJvZmlsZS5oYXNFeGl0U2l0ZShtX2N1cnJlbnRJbmRleCwgT3ZlcmZs
b3cpKQotICAgICAgICAgICAgbV9ncmFwaFtub2RlSW5kZXhdLm1lcmdlRmxhZ3MoTm9kZU1heU92
ZXJmbG93KTsKLSAgICAgICAgc2V0SW50cmluc2ljUmVzdWx0KHVzZXNSZXN1bHQsIHJlc3VsdE9w
ZXJhbmQsIG5vZGVJbmRleCk7CisgICAgICAgICAgICBub2RlLT5tZXJnZUZsYWdzKE5vZGVNYXlP
dmVyZmxvdyk7CisgICAgICAgIHNldEludHJpbnNpY1Jlc3VsdCh1c2VzUmVzdWx0LCByZXN1bHRP
cGVyYW5kLCBub2RlKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCkBAIC0xNjQ0LDcg
KzE2MDUsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbnRyaW5zaWMoYm9vCiAgICAg
ICAgIGNhc2UgQXJyYXk6OkRvdWJsZToKICAgICAgICAgY2FzZSBBcnJheTo6Q29udGlndW91czoK
ICAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlTdG9yYWdlOiB7Ci0gICAgICAgICAgICBOb2RlSW5k
ZXggYXJyYXlQdXNoID0gYWRkVG9HcmFwaChBcnJheVB1c2gsIE9wSW5mbyhhcnJheU1vZGUuYXNX
b3JkKCkpLCBPcEluZm8ocHJlZGljdGlvbiksIGdldChyZWdpc3Rlck9mZnNldCArIGFyZ3VtZW50
VG9PcGVyYW5kKDApKSwgZ2V0KHJlZ2lzdGVyT2Zmc2V0ICsgYXJndW1lbnRUb09wZXJhbmQoMSkp
KTsKKyAgICAgICAgICAgIE5vZGUqIGFycmF5UHVzaCA9IGFkZFRvR3JhcGgoQXJyYXlQdXNoLCBP
cEluZm8oYXJyYXlNb2RlLmFzV29yZCgpKSwgT3BJbmZvKHByZWRpY3Rpb24pLCBnZXQocmVnaXN0
ZXJPZmZzZXQgKyBhcmd1bWVudFRvT3BlcmFuZCgwKSksIGdldChyZWdpc3Rlck9mZnNldCArIGFy
Z3VtZW50VG9PcGVyYW5kKDEpKSk7CiAgICAgICAgICAgICBpZiAodXNlc1Jlc3VsdCkKICAgICAg
ICAgICAgICAgICBzZXQocmVzdWx0T3BlcmFuZCwgYXJyYXlQdXNoKTsKICAgICAgICAgICAgIApA
QCAtMTY2OCw3ICsxNjI5LDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW50cmluc2lj
KGJvbwogICAgICAgICBjYXNlIEFycmF5OjpEb3VibGU6CiAgICAgICAgIGNhc2UgQXJyYXk6OkNv
bnRpZ3VvdXM6CiAgICAgICAgIGNhc2UgQXJyYXk6OkFycmF5U3RvcmFnZTogewotICAgICAgICAg
ICAgTm9kZUluZGV4IGFycmF5UG9wID0gYWRkVG9HcmFwaChBcnJheVBvcCwgT3BJbmZvKGFycmF5
TW9kZS5hc1dvcmQoKSksIE9wSW5mbyhwcmVkaWN0aW9uKSwgZ2V0KHJlZ2lzdGVyT2Zmc2V0ICsg
YXJndW1lbnRUb09wZXJhbmQoMCkpKTsKKyAgICAgICAgICAgIE5vZGUqIGFycmF5UG9wID0gYWRk
VG9HcmFwaChBcnJheVBvcCwgT3BJbmZvKGFycmF5TW9kZS5hc1dvcmQoKSksIE9wSW5mbyhwcmVk
aWN0aW9uKSwgZ2V0KHJlZ2lzdGVyT2Zmc2V0ICsgYXJndW1lbnRUb09wZXJhbmQoMCkpKTsKICAg
ICAgICAgICAgIGlmICh1c2VzUmVzdWx0KQogICAgICAgICAgICAgICAgIHNldChyZXN1bHRPcGVy
YW5kLCBhcnJheVBvcCk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTE2ODUsNyArMTY0
Niw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUludHJpbnNpYyhib28KIAogICAgICAg
ICBpbnQgdGhpc09wZXJhbmQgPSByZWdpc3Rlck9mZnNldCArIGFyZ3VtZW50VG9PcGVyYW5kKDAp
OwogICAgICAgICBpbnQgaW5kZXhPcGVyYW5kID0gcmVnaXN0ZXJPZmZzZXQgKyBhcmd1bWVudFRv
T3BlcmFuZCgxKTsKLSAgICAgICAgTm9kZUluZGV4IGNoYXJDb2RlID0gYWRkVG9HcmFwaChTdHJp
bmdDaGFyQ29kZUF0LCBPcEluZm8oQXJyYXlNb2RlKEFycmF5OjpTdHJpbmcpLmFzV29yZCgpKSwg
Z2V0KHRoaXNPcGVyYW5kKSwgZ2V0VG9JbnQzMihpbmRleE9wZXJhbmQpKTsKKyAgICAgICAgTm9k
ZSogY2hhckNvZGUgPSBhZGRUb0dyYXBoKFN0cmluZ0NoYXJDb2RlQXQsIE9wSW5mbyhBcnJheU1v
ZGUoQXJyYXk6OlN0cmluZykuYXNXb3JkKCkpLCBnZXQodGhpc09wZXJhbmQpLCBnZXRUb0ludDMy
KGluZGV4T3BlcmFuZCkpOwogCiAgICAgICAgIGlmICh1c2VzUmVzdWx0KQogICAgICAgICAgICAg
c2V0KHJlc3VsdE9wZXJhbmQsIGNoYXJDb2RlKTsKQEAgLTE2OTgsNyArMTY1OSw3IEBAIGJvb2wg
Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUludHJpbnNpYyhib28KIAogICAgICAgICBpbnQgdGhpc09w
ZXJhbmQgPSByZWdpc3Rlck9mZnNldCArIGFyZ3VtZW50VG9PcGVyYW5kKDApOwogICAgICAgICBp
bnQgaW5kZXhPcGVyYW5kID0gcmVnaXN0ZXJPZmZzZXQgKyBhcmd1bWVudFRvT3BlcmFuZCgxKTsK
LSAgICAgICAgTm9kZUluZGV4IGNoYXJDb2RlID0gYWRkVG9HcmFwaChTdHJpbmdDaGFyQXQsIE9w
SW5mbyhBcnJheU1vZGUoQXJyYXk6OlN0cmluZykuYXNXb3JkKCkpLCBnZXQodGhpc09wZXJhbmQp
LCBnZXRUb0ludDMyKGluZGV4T3BlcmFuZCkpOworICAgICAgICBOb2RlKiBjaGFyQ29kZSA9IGFk
ZFRvR3JhcGgoU3RyaW5nQ2hhckF0LCBPcEluZm8oQXJyYXlNb2RlKEFycmF5OjpTdHJpbmcpLmFz
V29yZCgpKSwgZ2V0KHRoaXNPcGVyYW5kKSwgZ2V0VG9JbnQzMihpbmRleE9wZXJhbmQpKTsKIAog
ICAgICAgICBpZiAodXNlc1Jlc3VsdCkKICAgICAgICAgICAgIHNldChyZXN1bHRPcGVyYW5kLCBj
aGFyQ29kZSk7CkBAIC0xNzA5LDcgKzE2NzAsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5k
bGVJbnRyaW5zaWMoYm9vCiAgICAgICAgIGlmIChhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAh
PSAyKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAKLSAgICAgICAgTm9kZUlu
ZGV4IHJlZ0V4cEV4ZWMgPSBhZGRUb0dyYXBoKFJlZ0V4cEV4ZWMsIE9wSW5mbygwKSwgT3BJbmZv
KHByZWRpY3Rpb24pLCBnZXQocmVnaXN0ZXJPZmZzZXQgKyBhcmd1bWVudFRvT3BlcmFuZCgwKSks
IGdldChyZWdpc3Rlck9mZnNldCArIGFyZ3VtZW50VG9PcGVyYW5kKDEpKSk7CisgICAgICAgIE5v
ZGUqIHJlZ0V4cEV4ZWMgPSBhZGRUb0dyYXBoKFJlZ0V4cEV4ZWMsIE9wSW5mbygwKSwgT3BJbmZv
KHByZWRpY3Rpb24pLCBnZXQocmVnaXN0ZXJPZmZzZXQgKyBhcmd1bWVudFRvT3BlcmFuZCgwKSks
IGdldChyZWdpc3Rlck9mZnNldCArIGFyZ3VtZW50VG9PcGVyYW5kKDEpKSk7CiAgICAgICAgIGlm
ICh1c2VzUmVzdWx0KQogICAgICAgICAgICAgc2V0KHJlc3VsdE9wZXJhbmQsIHJlZ0V4cEV4ZWMp
OwogICAgICAgICAKQEAgLTE3MjAsNyArMTY4MSw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6Omhh
bmRsZUludHJpbnNpYyhib28KICAgICAgICAgaWYgKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlz
ICE9IDIpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIAotICAgICAgICBOb2Rl
SW5kZXggcmVnRXhwRXhlYyA9IGFkZFRvR3JhcGgoUmVnRXhwVGVzdCwgT3BJbmZvKDApLCBPcElu
Zm8ocHJlZGljdGlvbiksIGdldChyZWdpc3Rlck9mZnNldCArIGFyZ3VtZW50VG9PcGVyYW5kKDAp
KSwgZ2V0KHJlZ2lzdGVyT2Zmc2V0ICsgYXJndW1lbnRUb09wZXJhbmQoMSkpKTsKKyAgICAgICAg
Tm9kZSogcmVnRXhwRXhlYyA9IGFkZFRvR3JhcGgoUmVnRXhwVGVzdCwgT3BJbmZvKDApLCBPcElu
Zm8ocHJlZGljdGlvbiksIGdldChyZWdpc3Rlck9mZnNldCArIGFyZ3VtZW50VG9PcGVyYW5kKDAp
KSwgZ2V0KHJlZ2lzdGVyT2Zmc2V0ICsgYXJndW1lbnRUb09wZXJhbmQoMSkpKTsKICAgICAgICAg
aWYgKHVzZXNSZXN1bHQpCiAgICAgICAgICAgICBzZXQocmVzdWx0T3BlcmFuZCwgcmVnRXhwRXhl
Yyk7CiAgICAgICAgIApAQCAtMTc2NSw5ICsxNzI2LDkgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6
aGFuZGxlQ29uc3RhbnRJbnRlcgogICAgIHJldHVybiBmYWxzZTsKIH0KIAotTm9kZUluZGV4IEJ5
dGVDb2RlUGFyc2VyOjpoYW5kbGVHZXRCeU9mZnNldChTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9u
LCBOb2RlSW5kZXggYmFzZSwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgUHJvcGVydHlPZmZz
ZXQgb2Zmc2V0KQorTm9kZSogQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUdldEJ5T2Zmc2V0KFNwZWN1
bGF0ZWRUeXBlIHByZWRpY3Rpb24sIE5vZGUqIGJhc2UsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1i
ZXIsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKIHsKLSAgICBOb2RlSW5kZXggcHJvcGVydHlTdG9y
YWdlOworICAgIE5vZGUqIHByb3BlcnR5U3RvcmFnZTsKICAgICBpZiAoaXNJbmxpbmVPZmZzZXQo
b2Zmc2V0KSkKICAgICAgICAgcHJvcGVydHlTdG9yYWdlID0gYmFzZTsKICAgICBlbHNlCkBAIC0x
Nzc2LDcgKzE3MzcsNyBAQCBOb2RlSW5kZXggQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUdldEJ5T2Zm
CiAgICAgLy8gYW4gT1NSIHN0YW5kcG9pbnQpIGlmIEdldEJ5T2Zmc2V0IGFsc28gcmVmZXJlbmNl
ZCB0aGUgb2JqZWN0IHdlIHdlcmUgbG9hZGluZwogICAgIC8vIGZyb20sIGFuZCBpZiB3ZSBjb3Vs
ZCBsb2FkIGVsaW1pbmF0ZSBhIEdldEJ5T2Zmc2V0IGV2ZW4gaWYgdGhlIGJ1dHRlcmZseQogICAg
IC8vIGhhZCBjaGFuZ2VkLiBUaGF0IHdvdWxkIGJlIGEgZ3JlYXQgc3VjY2Vzcy4KLSAgICBOb2Rl
SW5kZXggZ2V0QnlPZmZzZXQgPSBhZGRUb0dyYXBoKEdldEJ5T2Zmc2V0LCBPcEluZm8obV9ncmFw
aC5tX3N0b3JhZ2VBY2Nlc3NEYXRhLnNpemUoKSksIE9wSW5mbyhwcmVkaWN0aW9uKSwgcHJvcGVy
dHlTdG9yYWdlKTsKKyAgICBOb2RlKiBnZXRCeU9mZnNldCA9IGFkZFRvR3JhcGgoR2V0QnlPZmZz
ZXQsIE9wSW5mbyhtX2dyYXBoLm1fc3RvcmFnZUFjY2Vzc0RhdGEuc2l6ZSgpKSwgT3BJbmZvKHBy
ZWRpY3Rpb24pLCBwcm9wZXJ0eVN0b3JhZ2UpOwogCiAgICAgU3RvcmFnZUFjY2Vzc0RhdGEgc3Rv
cmFnZUFjY2Vzc0RhdGE7CiAgICAgc3RvcmFnZUFjY2Vzc0RhdGEub2Zmc2V0ID0gaW5kZXhSZWxh
dGl2ZVRvQmFzZShvZmZzZXQpOwpAQCAtMTc4NywxNCArMTc0OCwxNCBAQCBOb2RlSW5kZXggQnl0
ZUNvZGVQYXJzZXI6OmhhbmRsZUdldEJ5T2ZmCiB9CiAKIHZvaWQgQnl0ZUNvZGVQYXJzZXI6Omhh
bmRsZUdldEJ5T2Zmc2V0KAotICAgIGludCBkZXN0aW5hdGlvbk9wZXJhbmQsIFNwZWN1bGF0ZWRU
eXBlIHByZWRpY3Rpb24sIE5vZGVJbmRleCBiYXNlLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVy
LAorICAgIGludCBkZXN0aW5hdGlvbk9wZXJhbmQsIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24s
IE5vZGUqIGJhc2UsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsCiAgICAgUHJvcGVydHlPZmZz
ZXQgb2Zmc2V0KQogewogICAgIHNldChkZXN0aW5hdGlvbk9wZXJhbmQsIGhhbmRsZUdldEJ5T2Zm
c2V0KHByZWRpY3Rpb24sIGJhc2UsIGlkZW50aWZpZXJOdW1iZXIsIG9mZnNldCkpOwogfQogCiB2
b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVHZXRCeUlkKAotICAgIGludCBkZXN0aW5hdGlvbk9w
ZXJhbmQsIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24sIE5vZGVJbmRleCBiYXNlLCB1bnNpZ25l
ZCBpZGVudGlmaWVyTnVtYmVyLAorICAgIGludCBkZXN0aW5hdGlvbk9wZXJhbmQsIFNwZWN1bGF0
ZWRUeXBlIHByZWRpY3Rpb24sIE5vZGUqIGJhc2UsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIs
CiAgICAgY29uc3QgR2V0QnlJZFN0YXR1cyYgZ2V0QnlJZFN0YXR1cykKIHsKICAgICBpZiAoIWdl
dEJ5SWRTdGF0dXMuaXNTaW1wbGUoKQpAQCAtMTgxMyw3ICsxNzc0LDcgQEAgdm9pZCBCeXRlQ29k
ZVBhcnNlcjo6aGFuZGxlR2V0QnlJZCgKICAgICBpZiAocHJlZGljdGlvbiA9PSBTcGVjTm9uZSkK
ICAgICAgICAgYWRkVG9HcmFwaChGb3JjZU9TUkV4aXQpOwogICAgIAotICAgIE5vZGVJbmRleCBv
cmlnaW5hbEJhc2VGb3JCYXNlbGluZUpJVCA9IGJhc2U7CisgICAgTm9kZSogb3JpZ2luYWxCYXNl
Rm9yQmFzZWxpbmVKSVQgPSBiYXNlOwogICAgICAgICAgICAgICAgIAogICAgIGFkZFRvR3JhcGgo
Q2hlY2tTdHJ1Y3R1cmUsIE9wSW5mbyhtX2dyYXBoLmFkZFN0cnVjdHVyZVNldChnZXRCeUlkU3Rh
dHVzLnN0cnVjdHVyZVNldCgpKSksIGJhc2UpOwogICAgIApAQCAtMTg1NCw5ICsxODE1LDkgQEAg
dm9pZCBCeXRlQ29kZVBhcnNlcjo6cHJlcGFyZVRvUGFyc2VCbG9jawogICAgIG1fY2VsbENvbnN0
YW50Tm9kZXMuY2xlYXIoKTsKIH0KIAotTm9kZUluZGV4IEJ5dGVDb2RlUGFyc2VyOjpnZXRTY29w
ZShib29sIHNraXBUb3AsIHVuc2lnbmVkIHNraXBDb3VudCkKK05vZGUqIEJ5dGVDb2RlUGFyc2Vy
OjpnZXRTY29wZShib29sIHNraXBUb3AsIHVuc2lnbmVkIHNraXBDb3VudCkKIHsKLSAgICBOb2Rl
SW5kZXggbG9jYWxCYXNlOworICAgIE5vZGUqIGxvY2FsQmFzZTsKICAgICBpZiAobV9pbmxpbmVT
dGFja1RvcC0+bV9pbmxpbmVDYWxsRnJhbWUgJiYgIW1faW5saW5lU3RhY2tUb3AtPm1faW5saW5l
Q2FsbEZyYW1lLT5pc0Nsb3N1cmVDYWxsKCkpIHsKICAgICAgICAgQVNTRVJUKG1faW5saW5lU3Rh
Y2tUb3AtPm1faW5saW5lQ2FsbEZyYW1lLT5jYWxsZWUpOwogICAgICAgICBsb2NhbEJhc2UgPSBj
ZWxsQ29uc3RhbnQobV9pbmxpbmVTdGFja1RvcC0+bV9pbmxpbmVDYWxsRnJhbWUtPmNhbGxlZS0+
c2NvcGUoKSk7CkBAIC0xODcxLDcgKzE4MzIsNyBAQCBOb2RlSW5kZXggQnl0ZUNvZGVQYXJzZXI6
OmdldFNjb3BlKGJvb2wgCiAgICAgcmV0dXJuIGxvY2FsQmFzZTsKIH0KIAotYm9vbCBCeXRlQ29k
ZVBhcnNlcjo6cGFyc2VSZXNvbHZlT3BlcmF0aW9ucyhTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9u
LCB1bnNpZ25lZCBpZGVudGlmaWVyLCB1bnNpZ25lZCBvcGVyYXRpb25zLCB1bnNpZ25lZCBwdXRU
b0Jhc2VPcGVyYXRpb24sIE5vZGVJbmRleCogYmFzZSwgTm9kZUluZGV4KiB2YWx1ZSkKK2Jvb2wg
Qnl0ZUNvZGVQYXJzZXI6OnBhcnNlUmVzb2x2ZU9wZXJhdGlvbnMoU3BlY3VsYXRlZFR5cGUgcHJl
ZGljdGlvbiwgdW5zaWduZWQgaWRlbnRpZmllciwgdW5zaWduZWQgb3BlcmF0aW9ucywgdW5zaWdu
ZWQgcHV0VG9CYXNlT3BlcmF0aW9uLCBOb2RlKiogYmFzZSwgTm9kZSoqIHZhbHVlKQogewogICAg
IFJlc29sdmVPcGVyYXRpb25zKiByZXNvbHZlT3BlcmF0aW9ucyA9IG1fY29kZUJsb2NrLT5yZXNv
bHZlT3BlcmF0aW9ucyhvcGVyYXRpb25zKTsKICAgICBpZiAocmVzb2x2ZU9wZXJhdGlvbnMtPmlz
RW1wdHkoKSkgewpAQCAtMTg4NCw3ICsxODQ1LDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFy
c2VSZXNvbHZlT3BlcmF0aQogICAgIGJvb2wgc2tpcHBlZFNjb3BlcyA9IGZhbHNlOwogICAgIGJv
b2wgc2V0QmFzZSA9IGZhbHNlOwogICAgIFJlc29sdmVPcGVyYXRpb24qIHBjID0gcmVzb2x2ZU9w
ZXJhdGlvbnMtPmRhdGEoKTsKLSAgICBOb2RlSW5kZXggbG9jYWxCYXNlID0gMDsKKyAgICBOb2Rl
KiBsb2NhbEJhc2UgPSAwOwogICAgIGJvb2wgcmVzb2x2aW5nQmFzZSA9IHRydWU7CiAgICAgd2hp
bGUgKHJlc29sdmluZ0Jhc2UpIHsKICAgICAgICAgc3dpdGNoIChwYy0+bV9vcGVyYXRpb24pIHsK
QEAgLTE5NjAsNyArMTkyMSw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlUmVzb2x2ZU9w
ZXJhdGkKICAgICAgICAgaWYgKHN0YXR1cy5pc1NpbXBsZSgpKSB7CiAgICAgICAgICAgICBBU1NF
UlQoc3RhdHVzLnN0cnVjdHVyZSgpKTsKIAotICAgICAgICAgICAgTm9kZUluZGV4IGdsb2JhbE9i
amVjdE5vZGUgPSBhZGRTdHJ1Y3R1cmVUcmFuc2l0aW9uQ2hlY2soZ2xvYmFsT2JqZWN0LCBzdGF0
dXMuc3RydWN0dXJlKCkpOworICAgICAgICAgICAgTm9kZSogZ2xvYmFsT2JqZWN0Tm9kZSA9IGFk
ZFN0cnVjdHVyZVRyYW5zaXRpb25DaGVjayhnbG9iYWxPYmplY3QsIHN0YXR1cy5zdHJ1Y3R1cmUo
KSk7CiAKICAgICAgICAgICAgIGlmIChzdGF0dXMuc3BlY2lmaWNWYWx1ZSgpKSB7CiAgICAgICAg
ICAgICAgICAgQVNTRVJUKHN0YXR1cy5zcGVjaWZpY1ZhbHVlKCkuaXNDZWxsKCkpOwpAQCAtMTk3
MCw3ICsxOTMxLDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VSZXNvbHZlT3BlcmF0aQog
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KIAotICAgICAgICBOb2RlSW5kZXgg
cmVzb2x2ZSA9IGFkZFRvR3JhcGgoUmVzb2x2ZUdsb2JhbCwgT3BJbmZvKG1fZ3JhcGgubV9yZXNv
bHZlR2xvYmFsRGF0YS5zaXplKCkpLCBPcEluZm8ocHJlZGljdGlvbikpOworICAgICAgICBOb2Rl
KiByZXNvbHZlID0gYWRkVG9HcmFwaChSZXNvbHZlR2xvYmFsLCBPcEluZm8obV9ncmFwaC5tX3Jl
c29sdmVHbG9iYWxEYXRhLnNpemUoKSksIE9wSW5mbyhwcmVkaWN0aW9uKSk7CiAgICAgICAgIG1f
Z3JhcGgubV9yZXNvbHZlR2xvYmFsRGF0YS5hcHBlbmQoUmVzb2x2ZUdsb2JhbERhdGEoKSk7CiAg
ICAgICAgIFJlc29sdmVHbG9iYWxEYXRhJiBkYXRhID0gbV9ncmFwaC5tX3Jlc29sdmVHbG9iYWxE
YXRhLmxhc3QoKTsKICAgICAgICAgZGF0YS5pZGVudGlmaWVyTnVtYmVyID0gaWRlbnRpZmllcjsK
QEAgLTE5ODEsOSArMTk0MiwxMCBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZVJlc29sdmVP
cGVyYXRpCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICBjYXNlIFJlc29sdmVPcGVy
YXRpb246OkdldEFuZFJldHVybkdsb2JhbFZhcjogewotICAgICAgICAqdmFsdWUgPSBhZGRUb0dy
YXBoKEdldEdsb2JhbFZhciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcEluZm8oZ2xv
YmFsT2JqZWN0LT5hc3NlcnRSZWdpc3RlcklzSW5UaGlzT2JqZWN0KHBjLT5tX3JlZ2lzdGVyQWRk
cmVzcykpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9wSW5mbyhwcmVkaWN0aW9uKSk7
CisgICAgICAgICp2YWx1ZSA9IGFkZFRvR3JhcGgoCisgICAgICAgICAgICBHZXRHbG9iYWxWYXIs
CisgICAgICAgICAgICBPcEluZm8oZ2xvYmFsT2JqZWN0LT5hc3NlcnRSZWdpc3RlcklzSW5UaGlz
T2JqZWN0KHBjLT5tX3JlZ2lzdGVyQWRkcmVzcykpLAorICAgICAgICAgICAgT3BJbmZvKHByZWRp
Y3Rpb24pKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIGNhc2UgUmVzb2x2ZU9w
ZXJhdGlvbjo6R2V0QW5kUmV0dXJuR2xvYmFsVmFyV2F0Y2hhYmxlOiB7CkBAIC0yMDIyLDcgKzE5
ODQsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZVJlc29sdmVPcGVyYXRpCiAgICAgICAg
IHJldHVybiB0cnVlOwogICAgIH0KICAgICBjYXNlIFJlc29sdmVPcGVyYXRpb246OkdldEFuZFJl
dHVyblNjb3BlZFZhcjogewotICAgICAgICBOb2RlSW5kZXggZ2V0U2NvcGVSZWdpc3RlcnMgPSBh
ZGRUb0dyYXBoKEdldFNjb3BlUmVnaXN0ZXJzLCBsb2NhbEJhc2UpOworICAgICAgICBOb2RlKiBn
ZXRTY29wZVJlZ2lzdGVycyA9IGFkZFRvR3JhcGgoR2V0U2NvcGVSZWdpc3RlcnMsIGxvY2FsQmFz
ZSk7CiAgICAgICAgICp2YWx1ZSA9IGFkZFRvR3JhcGgoR2V0U2NvcGVkVmFyLCBPcEluZm8ocmVz
b2x2ZVZhbHVlT3BlcmF0aW9uLT5tX29mZnNldCksIE9wSW5mbyhwcmVkaWN0aW9uKSwgZ2V0U2Nv
cGVSZWdpc3RlcnMpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CkBAIC0yMDUxLDcgKzIw
MTMsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAg
ICAgICAgICAgYXJndW1lbnRUb09wZXJhbmQoYXJndW1lbnQpLCBtX2NvZGVCbG9jay0+aXNDYXB0
dXJlZChhcmd1bWVudFRvT3BlcmFuZChhcmd1bWVudCkpKTsKICAgICAgICAgICAgIHZhcmlhYmxl
LT5tZXJnZVN0cnVjdHVyZUNoZWNrSG9pc3RpbmdGYWlsZWQoCiAgICAgICAgICAgICAgICAgbV9p
bmxpbmVTdGFja1RvcC0+bV9leGl0UHJvZmlsZS5oYXNFeGl0U2l0ZShtX2N1cnJlbnRJbmRleCwg
QmFkQ2FjaGUpKTsKLSAgICAgICAgICAgIE5vZGVJbmRleCBzZXRBcmd1bWVudCA9IGFkZFRvR3Jh
cGgoU2V0QXJndW1lbnQsIE9wSW5mbyh2YXJpYWJsZSkpOworICAgICAgICAgICAgTm9kZSogc2V0
QXJndW1lbnQgPSBhZGRUb0dyYXBoKFNldEFyZ3VtZW50LCBPcEluZm8odmFyaWFibGUpKTsKICAg
ICAgICAgICAgIG1fZ3JhcGgubV9hcmd1bWVudHNbYXJndW1lbnRdID0gc2V0QXJndW1lbnQ7CiAg
ICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRIZWFkLnNldEFyZ3VtZW50Rmly
c3RUaW1lKGFyZ3VtZW50LCBzZXRBcmd1bWVudCk7CiAgICAgICAgICAgICBtX2N1cnJlbnRCbG9j
ay0+dmFyaWFibGVzQXRUYWlsLnNldEFyZ3VtZW50Rmlyc3RUaW1lKGFyZ3VtZW50LCBzZXRBcmd1
bWVudCk7CkBAIC0yMTAxLDEzICsyMDYzLDEzIEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNl
QmxvY2sodW5zaWduZWQKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2VudGVyKTsKIAogICAg
ICAgICBjYXNlIG9wX2NvbnZlcnRfdGhpczogewotICAgICAgICAgICAgTm9kZUluZGV4IG9wMSA9
IGdldFRoaXMoKTsKLSAgICAgICAgICAgIGlmIChtX2dyYXBoW29wMV0ub3AoKSAhPSBDb252ZXJ0
VGhpcykgeworICAgICAgICAgICAgTm9kZSogb3AxID0gZ2V0VGhpcygpOworICAgICAgICAgICAg
aWYgKG9wMS0+b3AoKSAhPSBDb252ZXJ0VGhpcykgewogICAgICAgICAgICAgICAgIFZhbHVlUHJv
ZmlsZSogcHJvZmlsZSA9CiAgICAgICAgICAgICAgICAgICAgIG1faW5saW5lU3RhY2tUb3AtPm1f
cHJvZmlsZWRCbG9jay0+dmFsdWVQcm9maWxlRm9yQnl0ZWNvZGVPZmZzZXQobV9jdXJyZW50UHJv
ZmlsaW5nSW5kZXgpOwogICAgICAgICAgICAgICAgIHByb2ZpbGUtPmNvbXB1dGVVcGRhdGVkUHJl
ZGljdGlvbigpOwogI2lmIERGR19FTkFCTEUoREVCVUdfVkVSQk9TRSkKLSAgICAgICAgICAgICAg
ICBkYXRhTG9nRigiW0AlbHUgYmMjJXVdOiBwcm9maWxlICVwOiAiLCBtX2dyYXBoLnNpemUoKSwg
bV9jdXJyZW50UHJvZmlsaW5nSW5kZXgsIHByb2ZpbGUpOworICAgICAgICAgICAgICAgIGRhdGFM
b2dGKCJbYmMjJXVdOiBwcm9maWxlICVwOiAiLCBtX2N1cnJlbnRQcm9maWxpbmdJbmRleCwgcHJv
ZmlsZSk7CiAgICAgICAgICAgICAgICAgcHJvZmlsZS0+ZHVtcChXVEY6OmRhdGFGaWxlKCkpOwog
ICAgICAgICAgICAgICAgIGRhdGFMb2dGKCJcbiIpOwogI2VuZGlmCkBAIC0yMTI4LDEwICsyMDkw
LDEwIEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKIAogICAgICAg
ICBjYXNlIG9wX2NyZWF0ZV90aGlzOiB7CiAgICAgICAgICAgICBpbnQgY2FsbGVlT3BlcmFuZCA9
IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBOb2RlSW5kZXgg
Y2FsbGVlID0gZ2V0KGNhbGxlZU9wZXJhbmQpOworICAgICAgICAgICAgTm9kZSogY2FsbGVlID0g
Z2V0KGNhbGxlZU9wZXJhbmQpOwogICAgICAgICAgICAgYm9vbCBhbHJlYWR5RW1pdHRlZCA9IGZh
bHNlOwotICAgICAgICAgICAgaWYgKG1fZ3JhcGhbY2FsbGVlXS5vcCgpID09IFdlYWtKU0NvbnN0
YW50KSB7Ci0gICAgICAgICAgICAgICAgSlNDZWxsKiBjZWxsID0gbV9ncmFwaFtjYWxsZWVdLndl
YWtDb25zdGFudCgpOworICAgICAgICAgICAgaWYgKGNhbGxlZS0+b3AoKSA9PSBXZWFrSlNDb25z
dGFudCkgeworICAgICAgICAgICAgICAgIEpTQ2VsbCogY2VsbCA9IGNhbGxlZS0+d2Vha0NvbnN0
YW50KCk7CiAgICAgICAgICAgICAgICAgQVNTRVJUKGNlbGwtPmluaGVyaXRzKCZKU0Z1bmN0aW9u
OjpzX2luZm8pKTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBKU0Z1bmN0aW9u
KiBmdW5jdGlvbiA9IGpzQ2FzdDxKU0Z1bmN0aW9uKj4oY2VsbCk7CkBAIC0yMjA5LDcgKzIxNzEs
NyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAg
ICAgICAgc2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsIGdldChKU1N0YWNrOjpD
YWxsZWUpKTsKICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgIEFTU0VSVChwcm9m
aWxlLT5tX3NpbmdsZXRvblZhbHVlLmFzQ2VsbCgpLT5pbmhlcml0cygmSlNGdW5jdGlvbjo6c19p
bmZvKSk7Ci0gICAgICAgICAgICAgICAgTm9kZUluZGV4IGFjdHVhbENhbGxlZSA9IGdldChKU1N0
YWNrOjpDYWxsZWUpOworICAgICAgICAgICAgICAgIE5vZGUqIGFjdHVhbENhbGxlZSA9IGdldChK
U1N0YWNrOjpDYWxsZWUpOwogICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoQ2hlY2tGdW5jdGlv
biwgT3BJbmZvKHByb2ZpbGUtPm1fc2luZ2xldG9uVmFsdWUuYXNDZWxsKCkpLCBhY3R1YWxDYWxs
ZWUpOwogICAgICAgICAgICAgICAgIHNldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5k
LCBhZGRUb0dyYXBoKFdlYWtKU0NvbnN0YW50LCBPcEluZm8ocHJvZmlsZS0+bV9zaW5nbGV0b25W
YWx1ZS5hc0NlbGwoKSkpKTsKICAgICAgICAgICAgIH0KQEAgLTIyMTksMzAgKzIxODEsMzAgQEAg
Ym9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAvLyA9PT0g
Qml0d2lzZSBvcGVyYXRpb25zID09PQogCiAgICAgICAgIGNhc2Ugb3BfYml0YW5kOiB7Ci0gICAg
ICAgICAgICBOb2RlSW5kZXggb3AxID0gZ2V0VG9JbnQzMihjdXJyZW50SW5zdHJ1Y3Rpb25bMl0u
dS5vcGVyYW5kKTsKLSAgICAgICAgICAgIE5vZGVJbmRleCBvcDIgPSBnZXRUb0ludDMyKGN1cnJl
bnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpOworICAgICAgICAgICAgTm9kZSogb3AxID0gZ2V0
VG9JbnQzMihjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKKyAgICAgICAgICAgIE5v
ZGUqIG9wMiA9IGdldFRvSW50MzIoY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZCk7CiAg
ICAgICAgICAgICBzZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwgYWRkVG9HcmFw
aChCaXRBbmQsIG9wMSwgb3AyKSk7CiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9iaXRhbmQp
OwogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBvcF9iaXRvcjogewotICAgICAgICAgICAgTm9k
ZUluZGV4IG9wMSA9IGdldFRvSW50MzIoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7
Ci0gICAgICAgICAgICBOb2RlSW5kZXggb3AyID0gZ2V0VG9JbnQzMihjdXJyZW50SW5zdHJ1Y3Rp
b25bM10udS5vcGVyYW5kKTsKKyAgICAgICAgICAgIE5vZGUqIG9wMSA9IGdldFRvSW50MzIoY3Vy
cmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7CisgICAgICAgICAgICBOb2RlKiBvcDIgPSBn
ZXRUb0ludDMyKGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpOwogICAgICAgICAgICAg
c2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsIGFkZFRvR3JhcGgoQml0T3IsIG9w
MSwgb3AyKSk7CiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9iaXRvcik7CiAgICAgICAgIH0K
IAogICAgICAgICBjYXNlIG9wX2JpdHhvcjogewotICAgICAgICAgICAgTm9kZUluZGV4IG9wMSA9
IGdldFRvSW50MzIoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7Ci0gICAgICAgICAg
ICBOb2RlSW5kZXggb3AyID0gZ2V0VG9JbnQzMihjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVy
YW5kKTsKKyAgICAgICAgICAgIE5vZGUqIG9wMSA9IGdldFRvSW50MzIoY3VycmVudEluc3RydWN0
aW9uWzJdLnUub3BlcmFuZCk7CisgICAgICAgICAgICBOb2RlKiBvcDIgPSBnZXRUb0ludDMyKGN1
cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpOwogICAgICAgICAgICAgc2V0KGN1cnJlbnRJ
bnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsIGFkZFRvR3JhcGgoQml0WG9yLCBvcDEsIG9wMikpOwog
ICAgICAgICAgICAgTkVYVF9PUENPREUob3BfYml0eG9yKTsKICAgICAgICAgfQogCiAgICAgICAg
IGNhc2Ugb3BfcnNoaWZ0OiB7Ci0gICAgICAgICAgICBOb2RlSW5kZXggb3AxID0gZ2V0VG9JbnQz
MihjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKLSAgICAgICAgICAgIE5vZGVJbmRl
eCBvcDIgPSBnZXRUb0ludDMyKGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpOwotICAg
ICAgICAgICAgTm9kZUluZGV4IHJlc3VsdDsKKyAgICAgICAgICAgIE5vZGUqIG9wMSA9IGdldFRv
SW50MzIoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7CisgICAgICAgICAgICBOb2Rl
KiBvcDIgPSBnZXRUb0ludDMyKGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpOworICAg
ICAgICAgICAgTm9kZSogcmVzdWx0OwogICAgICAgICAgICAgLy8gT3B0aW1pemUgb3V0IHNoaWZ0
cyBieSB6ZXJvLgogICAgICAgICAgICAgaWYgKGlzSW50MzJDb25zdGFudChvcDIpICYmICEodmFs
dWVPZkludDMyQ29uc3RhbnQob3AyKSAmIDB4MWYpKQogICAgICAgICAgICAgICAgIHJlc3VsdCA9
IG9wMTsKQEAgLTIyNTMsOSArMjIxNSw5IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxv
Y2sodW5zaWduZWQKICAgICAgICAgfQogCiAgICAgICAgIGNhc2Ugb3BfbHNoaWZ0OiB7Ci0gICAg
ICAgICAgICBOb2RlSW5kZXggb3AxID0gZ2V0VG9JbnQzMihjdXJyZW50SW5zdHJ1Y3Rpb25bMl0u
dS5vcGVyYW5kKTsKLSAgICAgICAgICAgIE5vZGVJbmRleCBvcDIgPSBnZXRUb0ludDMyKGN1cnJl
bnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpOwotICAgICAgICAgICAgTm9kZUluZGV4IHJlc3Vs
dDsKKyAgICAgICAgICAgIE5vZGUqIG9wMSA9IGdldFRvSW50MzIoY3VycmVudEluc3RydWN0aW9u
WzJdLnUub3BlcmFuZCk7CisgICAgICAgICAgICBOb2RlKiBvcDIgPSBnZXRUb0ludDMyKGN1cnJl
bnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpOworICAgICAgICAgICAgTm9kZSogcmVzdWx0Owog
ICAgICAgICAgICAgLy8gT3B0aW1pemUgb3V0IHNoaWZ0cyBieSB6ZXJvLgogICAgICAgICAgICAg
aWYgKGlzSW50MzJDb25zdGFudChvcDIpICYmICEodmFsdWVPZkludDMyQ29uc3RhbnQob3AyKSAm
IDB4MWYpKQogICAgICAgICAgICAgICAgIHJlc3VsdCA9IG9wMTsKQEAgLTIyNjYsOSArMjIyOCw5
IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgfQog
CiAgICAgICAgIGNhc2Ugb3BfdXJzaGlmdDogewotICAgICAgICAgICAgTm9kZUluZGV4IG9wMSA9
IGdldFRvSW50MzIoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7Ci0gICAgICAgICAg
ICBOb2RlSW5kZXggb3AyID0gZ2V0VG9JbnQzMihjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVy
YW5kKTsKLSAgICAgICAgICAgIE5vZGVJbmRleCByZXN1bHQ7CisgICAgICAgICAgICBOb2RlKiBv
cDEgPSBnZXRUb0ludDMyKGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOworICAgICAg
ICAgICAgTm9kZSogb3AyID0gZ2V0VG9JbnQzMihjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVy
YW5kKTsKKyAgICAgICAgICAgIE5vZGUqIHJlc3VsdDsKICAgICAgICAgICAgIC8vIFRoZSByZXN1
bHQgb2YgYSB6ZXJvLWV4dGVuZGluZyByaWdodCBzaGlmdCBpcyB0cmVhdGVkIGFzIGFuIHVuc2ln
bmVkIHZhbHVlLgogICAgICAgICAgICAgLy8gVGhpcyBtZWFucyB0aGF0IGlmIHRoZSB0b3AgYml0
IGlzIHNldCwgdGhlIHJlc3VsdCBpcyBub3QgaW4gdGhlIGludDMyIHJhbmdlLAogICAgICAgICAg
ICAgLy8gYW5kIGFzIHN1Y2ggbXVzdCBiZSBzdG9yZWQgYXMgYSBkb3VibGUuIElmIHRoZSBzaGlm
dCBhbW91bnQgaXMgYSBjb25zdGFudCwKQEAgLTIyOTYsNyArMjI1OCw3IEBAIGJvb2wgQnl0ZUNv
ZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKIAogICAgICAgICBjYXNlIG9wX3ByZV9pbmM6
IHsKICAgICAgICAgICAgIHVuc2lnbmVkIHNyY0RzdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51
Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBOb2RlSW5kZXggb3AgPSBnZXQoc3JjRHN0KTsKKyAgICAg
ICAgICAgIE5vZGUqIG9wID0gZ2V0KHNyY0RzdCk7CiAgICAgICAgICAgICBzZXQoc3JjRHN0LCBt
YWtlU2FmZShhZGRUb0dyYXBoKEFyaXRoQWRkLCBvcCwgb25lKCkpKSk7CiAgICAgICAgICAgICBO
RVhUX09QQ09ERShvcF9wcmVfaW5jKTsKICAgICAgICAgfQpAQCAtMjMwNSwxNCArMjI2NywxNCBA
QCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICB1
bnNpZ25lZCByZXN1bHQgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwogICAgICAg
ICAgICAgdW5zaWduZWQgc3JjRHN0ID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsK
ICAgICAgICAgICAgIEFTU0VSVChyZXN1bHQgIT0gc3JjRHN0KTsgLy8gUmVxdWlyZWQgZm9yIGFz
c3VtcHRpb25zIHdlIG1ha2UgZHVyaW5nIE9TUi4KLSAgICAgICAgICAgIE5vZGVJbmRleCBvcCA9
IGdldChzcmNEc3QpOworICAgICAgICAgICAgTm9kZSogb3AgPSBnZXQoc3JjRHN0KTsKICAgICAg
ICAgICAgIHNldFBhaXIocmVzdWx0LCBvcCwgc3JjRHN0LCBtYWtlU2FmZShhZGRUb0dyYXBoKEFy
aXRoQWRkLCBvcCwgb25lKCkpKSk7CiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9wb3N0X2lu
Yyk7CiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIG9wX3ByZV9kZWM6IHsKICAgICAgICAgICAg
IHVuc2lnbmVkIHNyY0RzdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7Ci0gICAg
ICAgICAgICBOb2RlSW5kZXggb3AgPSBnZXQoc3JjRHN0KTsKKyAgICAgICAgICAgIE5vZGUqIG9w
ID0gZ2V0KHNyY0RzdCk7CiAgICAgICAgICAgICBzZXQoc3JjRHN0LCBtYWtlU2FmZShhZGRUb0dy
YXBoKEFyaXRoU3ViLCBvcCwgb25lKCkpKSk7CiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9w
cmVfZGVjKTsKICAgICAgICAgfQpAQCAtMjMyMCw3ICsyMjgyLDcgQEAgYm9vbCBCeXRlQ29kZVBh
cnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICBjYXNlIG9wX3Bvc3RfZGVjOiB7CiAg
ICAgICAgICAgICB1bnNpZ25lZCByZXN1bHQgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVy
YW5kOwogICAgICAgICAgICAgdW5zaWduZWQgc3JjRHN0ID0gY3VycmVudEluc3RydWN0aW9uWzJd
LnUub3BlcmFuZDsKLSAgICAgICAgICAgIE5vZGVJbmRleCBvcCA9IGdldChzcmNEc3QpOworICAg
ICAgICAgICAgTm9kZSogb3AgPSBnZXQoc3JjRHN0KTsKICAgICAgICAgICAgIHNldFBhaXIocmVz
dWx0LCBvcCwgc3JjRHN0LCBtYWtlU2FmZShhZGRUb0dyYXBoKEFyaXRoU3ViLCBvcCwgb25lKCkp
KSk7CiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9wb3N0X2RlYyk7CiAgICAgICAgIH0KQEAg
LTIzMjgsOSArMjI5MCw5IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWdu
ZWQKICAgICAgICAgLy8gPT09IEFyaXRobWV0aWMgb3BlcmF0aW9ucyA9PT0KIAogICAgICAgICBj
YXNlIG9wX2FkZDogewotICAgICAgICAgICAgTm9kZUluZGV4IG9wMSA9IGdldChjdXJyZW50SW5z
dHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKLSAgICAgICAgICAgIE5vZGVJbmRleCBvcDIgPSBnZXQo
Y3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZCk7Ci0gICAgICAgICAgICBpZiAobV9ncmFw
aFtvcDFdLmhhc051bWJlclJlc3VsdCgpICYmIG1fZ3JhcGhbb3AyXS5oYXNOdW1iZXJSZXN1bHQo
KSkKKyAgICAgICAgICAgIE5vZGUqIG9wMSA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5v
cGVyYW5kKTsKKyAgICAgICAgICAgIE5vZGUqIG9wMiA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25b
M10udS5vcGVyYW5kKTsKKyAgICAgICAgICAgIGlmIChvcDEtPmhhc051bWJlclJlc3VsdCgpICYm
IG9wMi0+aGFzTnVtYmVyUmVzdWx0KCkpCiAgICAgICAgICAgICAgICAgc2V0KGN1cnJlbnRJbnN0
cnVjdGlvblsxXS51Lm9wZXJhbmQsIG1ha2VTYWZlKGFkZFRvR3JhcGgoQXJpdGhBZGQsIG9wMSwg
b3AyKSkpOwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIHNldChjdXJyZW50SW5z
dHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCBtYWtlU2FmZShhZGRUb0dyYXBoKFZhbHVlQWRkLCBvcDEs
IG9wMikpKTsKQEAgLTIzMzgsMzYgKzIzMDAsMzYgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFy
c2VCbG9jayh1bnNpZ25lZAogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBvcF9zdWI6IHsKLSAg
ICAgICAgICAgIE5vZGVJbmRleCBvcDEgPSBnZXQoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3Bl
cmFuZCk7Ci0gICAgICAgICAgICBOb2RlSW5kZXggb3AyID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlv
blszXS51Lm9wZXJhbmQpOworICAgICAgICAgICAgTm9kZSogb3AxID0gZ2V0KGN1cnJlbnRJbnN0
cnVjdGlvblsyXS51Lm9wZXJhbmQpOworICAgICAgICAgICAgTm9kZSogb3AyID0gZ2V0KGN1cnJl
bnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpOwogICAgICAgICAgICAgc2V0KGN1cnJlbnRJbnN0
cnVjdGlvblsxXS51Lm9wZXJhbmQsIG1ha2VTYWZlKGFkZFRvR3JhcGgoQXJpdGhTdWIsIG9wMSwg
b3AyKSkpOwogICAgICAgICAgICAgTkVYVF9PUENPREUob3Bfc3ViKTsKICAgICAgICAgfQogCiAg
ICAgICAgIGNhc2Ugb3BfbmVnYXRlOiB7Ci0gICAgICAgICAgICBOb2RlSW5kZXggb3AxID0gZ2V0
KGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOworICAgICAgICAgICAgTm9kZSogb3Ax
ID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOwogICAgICAgICAgICAgc2V0
KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsIG1ha2VTYWZlKGFkZFRvR3JhcGgoQXJp
dGhOZWdhdGUsIG9wMSkpKTsKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX25lZ2F0ZSk7CiAg
ICAgICAgIH0KIAogICAgICAgICBjYXNlIG9wX211bDogewogICAgICAgICAgICAgLy8gTXVsdGlw
bHkgcmVxdWlyZXMgdGhhdCB0aGUgaW5wdXRzIGFyZSBub3QgdHJ1bmNhdGVkLCB1bmZvcnR1bmF0
ZWx5LgotICAgICAgICAgICAgTm9kZUluZGV4IG9wMSA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25b
Ml0udS5vcGVyYW5kKTsKLSAgICAgICAgICAgIE5vZGVJbmRleCBvcDIgPSBnZXQoY3VycmVudElu
c3RydWN0aW9uWzNdLnUub3BlcmFuZCk7CisgICAgICAgICAgICBOb2RlKiBvcDEgPSBnZXQoY3Vy
cmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7CisgICAgICAgICAgICBOb2RlKiBvcDIgPSBn
ZXQoY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZCk7CiAgICAgICAgICAgICBzZXQoY3Vy
cmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwgbWFrZVNhZmUoYWRkVG9HcmFwaChBcml0aE11
bCwgb3AxLCBvcDIpKSk7CiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9tdWwpOwogICAgICAg
ICB9CiAKICAgICAgICAgY2FzZSBvcF9tb2Q6IHsKLSAgICAgICAgICAgIE5vZGVJbmRleCBvcDEg
PSBnZXQoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7Ci0gICAgICAgICAgICBOb2Rl
SW5kZXggb3AyID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpOworICAgICAg
ICAgICAgTm9kZSogb3AxID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOwor
ICAgICAgICAgICAgTm9kZSogb3AyID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJh
bmQpOwogICAgICAgICAgICAgc2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsIG1h
a2VTYWZlKGFkZFRvR3JhcGgoQXJpdGhNb2QsIG9wMSwgb3AyKSkpOwogICAgICAgICAgICAgTkVY
VF9PUENPREUob3BfbW9kKTsKICAgICAgICAgfQogCiAgICAgICAgIGNhc2Ugb3BfZGl2OiB7Ci0g
ICAgICAgICAgICBOb2RlSW5kZXggb3AxID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9w
ZXJhbmQpOwotICAgICAgICAgICAgTm9kZUluZGV4IG9wMiA9IGdldChjdXJyZW50SW5zdHJ1Y3Rp
b25bM10udS5vcGVyYW5kKTsKKyAgICAgICAgICAgIE5vZGUqIG9wMSA9IGdldChjdXJyZW50SW5z
dHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKKyAgICAgICAgICAgIE5vZGUqIG9wMiA9IGdldChjdXJy
ZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKTsKICAgICAgICAgICAgIHNldChjdXJyZW50SW5z
dHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCBtYWtlRGl2U2FmZShhZGRUb0dyYXBoKEFyaXRoRGl2LCBv
cDEsIG9wMikpKTsKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2Rpdik7CiAgICAgICAgIH0K
QEAgLTIzODAsNyArMjM0Miw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5z
aWduZWQKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2RlYnVnKTsKICNlbmRpZgogICAgICAg
ICBjYXNlIG9wX21vdjogewotICAgICAgICAgICAgTm9kZUluZGV4IG9wID0gZ2V0KGN1cnJlbnRJ
bnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOworICAgICAgICAgICAgTm9kZSogb3AgPSBnZXQoY3Vy
cmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7CiAgICAgICAgICAgICBzZXQoY3VycmVudElu
c3RydWN0aW9uWzFdLnUub3BlcmFuZCwgb3ApOwogICAgICAgICAgICAgTkVYVF9PUENPREUob3Bf
bW92KTsKICAgICAgICAgfQpAQCAtMjM5MCw1NiArMjM1Miw1NiBAQCBib29sIEJ5dGVDb2RlUGFy
c2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9jaGVj
a19oYXNfaW5zdGFuY2UpOwogCiAgICAgICAgIGNhc2Ugb3BfaW5zdGFuY2VvZjogewotICAgICAg
ICAgICAgTm9kZUluZGV4IHZhbHVlID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJh
bmQpOwotICAgICAgICAgICAgTm9kZUluZGV4IHByb3RvdHlwZSA9IGdldChjdXJyZW50SW5zdHJ1
Y3Rpb25bM10udS5vcGVyYW5kKTsKKyAgICAgICAgICAgIE5vZGUqIHZhbHVlID0gZ2V0KGN1cnJl
bnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOworICAgICAgICAgICAgTm9kZSogcHJvdG90eXBl
ID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpOwogICAgICAgICAgICAgc2V0
KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsIGFkZFRvR3JhcGgoSW5zdGFuY2VPZiwg
dmFsdWUsIHByb3RvdHlwZSkpOwogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfaW5zdGFuY2Vv
Zik7CiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBjYXNlIG9wX2lzX3VuZGVmaW5l
ZDogewotICAgICAgICAgICAgTm9kZUluZGV4IHZhbHVlID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlv
blsyXS51Lm9wZXJhbmQpOworICAgICAgICAgICAgTm9kZSogdmFsdWUgPSBnZXQoY3VycmVudElu
c3RydWN0aW9uWzJdLnUub3BlcmFuZCk7CiAgICAgICAgICAgICBzZXQoY3VycmVudEluc3RydWN0
aW9uWzFdLnUub3BlcmFuZCwgYWRkVG9HcmFwaChJc1VuZGVmaW5lZCwgdmFsdWUpKTsKICAgICAg
ICAgICAgIE5FWFRfT1BDT0RFKG9wX2lzX3VuZGVmaW5lZCk7CiAgICAgICAgIH0KIAogICAgICAg
ICBjYXNlIG9wX2lzX2Jvb2xlYW46IHsKLSAgICAgICAgICAgIE5vZGVJbmRleCB2YWx1ZSA9IGdl
dChjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKKyAgICAgICAgICAgIE5vZGUqIHZh
bHVlID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOwogICAgICAgICAgICAg
c2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsIGFkZFRvR3JhcGgoSXNCb29sZWFu
LCB2YWx1ZSkpOwogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfaXNfYm9vbGVhbik7CiAgICAg
ICAgIH0KIAogICAgICAgICBjYXNlIG9wX2lzX251bWJlcjogewotICAgICAgICAgICAgTm9kZUlu
ZGV4IHZhbHVlID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOworICAgICAg
ICAgICAgTm9kZSogdmFsdWUgPSBnZXQoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7
CiAgICAgICAgICAgICBzZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwgYWRkVG9H
cmFwaChJc051bWJlciwgdmFsdWUpKTsKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2lzX251
bWJlcik7CiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIG9wX2lzX3N0cmluZzogewotICAgICAg
ICAgICAgTm9kZUluZGV4IHZhbHVlID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJh
bmQpOworICAgICAgICAgICAgTm9kZSogdmFsdWUgPSBnZXQoY3VycmVudEluc3RydWN0aW9uWzJd
LnUub3BlcmFuZCk7CiAgICAgICAgICAgICBzZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3Bl
cmFuZCwgYWRkVG9HcmFwaChJc1N0cmluZywgdmFsdWUpKTsKICAgICAgICAgICAgIE5FWFRfT1BD
T0RFKG9wX2lzX3N0cmluZyk7CiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIG9wX2lzX29iamVj
dDogewotICAgICAgICAgICAgTm9kZUluZGV4IHZhbHVlID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlv
blsyXS51Lm9wZXJhbmQpOworICAgICAgICAgICAgTm9kZSogdmFsdWUgPSBnZXQoY3VycmVudElu
c3RydWN0aW9uWzJdLnUub3BlcmFuZCk7CiAgICAgICAgICAgICBzZXQoY3VycmVudEluc3RydWN0
aW9uWzFdLnUub3BlcmFuZCwgYWRkVG9HcmFwaChJc09iamVjdCwgdmFsdWUpKTsKICAgICAgICAg
ICAgIE5FWFRfT1BDT0RFKG9wX2lzX29iamVjdCk7CiAgICAgICAgIH0KIAogICAgICAgICBjYXNl
IG9wX2lzX2Z1bmN0aW9uOiB7Ci0gICAgICAgICAgICBOb2RlSW5kZXggdmFsdWUgPSBnZXQoY3Vy
cmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7CisgICAgICAgICAgICBOb2RlKiB2YWx1ZSA9
IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKICAgICAgICAgICAgIHNldChj
dXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCBhZGRUb0dyYXBoKElzRnVuY3Rpb24sIHZh
bHVlKSk7CiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9pc19mdW5jdGlvbik7CiAgICAgICAg
IH0KIAogICAgICAgICBjYXNlIG9wX25vdDogewotICAgICAgICAgICAgTm9kZUluZGV4IHZhbHVl
ID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOworICAgICAgICAgICAgTm9k
ZSogdmFsdWUgPSBnZXQoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7CiAgICAgICAg
ICAgICBzZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwgYWRkVG9HcmFwaChMb2dp
Y2FsTm90LCB2YWx1ZSkpOwogICAgICAgICAgICAgTkVYVF9PUENPREUob3Bfbm90KTsKICAgICAg
ICAgfQogICAgICAgICAgICAgCiAgICAgICAgIGNhc2Ugb3BfdG9fcHJpbWl0aXZlOiB7Ci0gICAg
ICAgICAgICBOb2RlSW5kZXggdmFsdWUgPSBnZXQoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3Bl
cmFuZCk7CisgICAgICAgICAgICBOb2RlKiB2YWx1ZSA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25b
Ml0udS5vcGVyYW5kKTsKICAgICAgICAgICAgIHNldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5v
cGVyYW5kLCBhZGRUb0dyYXBoKFRvUHJpbWl0aXZlLCB2YWx1ZSkpOwogICAgICAgICAgICAgTkVY
VF9PUENPREUob3BfdG9fcHJpbWl0aXZlKTsKICAgICAgICAgfQpAQCAtMjQ1NCw2OSArMjQxNiw2
OSBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgIH0K
IAogICAgICAgICBjYXNlIG9wX2xlc3M6IHsKLSAgICAgICAgICAgIE5vZGVJbmRleCBvcDEgPSBn
ZXQoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7Ci0gICAgICAgICAgICBOb2RlSW5k
ZXggb3AyID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpOworICAgICAgICAg
ICAgTm9kZSogb3AxID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOworICAg
ICAgICAgICAgTm9kZSogb3AyID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQp
OwogICAgICAgICAgICAgc2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsIGFkZFRv
R3JhcGgoQ29tcGFyZUxlc3MsIG9wMSwgb3AyKSk7CiAgICAgICAgICAgICBORVhUX09QQ09ERShv
cF9sZXNzKTsKICAgICAgICAgfQogCiAgICAgICAgIGNhc2Ugb3BfbGVzc2VxOiB7Ci0gICAgICAg
ICAgICBOb2RlSW5kZXggb3AxID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQp
OwotICAgICAgICAgICAgTm9kZUluZGV4IG9wMiA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bM10u
dS5vcGVyYW5kKTsKKyAgICAgICAgICAgIE5vZGUqIG9wMSA9IGdldChjdXJyZW50SW5zdHJ1Y3Rp
b25bMl0udS5vcGVyYW5kKTsKKyAgICAgICAgICAgIE5vZGUqIG9wMiA9IGdldChjdXJyZW50SW5z
dHJ1Y3Rpb25bM10udS5vcGVyYW5kKTsKICAgICAgICAgICAgIHNldChjdXJyZW50SW5zdHJ1Y3Rp
b25bMV0udS5vcGVyYW5kLCBhZGRUb0dyYXBoKENvbXBhcmVMZXNzRXEsIG9wMSwgb3AyKSk7CiAg
ICAgICAgICAgICBORVhUX09QQ09ERShvcF9sZXNzZXEpOwogICAgICAgICB9CiAKICAgICAgICAg
Y2FzZSBvcF9ncmVhdGVyOiB7Ci0gICAgICAgICAgICBOb2RlSW5kZXggb3AxID0gZ2V0KGN1cnJl
bnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOwotICAgICAgICAgICAgTm9kZUluZGV4IG9wMiA9
IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKTsKKyAgICAgICAgICAgIE5vZGUq
IG9wMSA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKKyAgICAgICAgICAg
IE5vZGUqIG9wMiA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKTsKICAgICAg
ICAgICAgIHNldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCBhZGRUb0dyYXBoKENv
bXBhcmVHcmVhdGVyLCBvcDEsIG9wMikpOwogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfZ3Jl
YXRlcik7CiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIG9wX2dyZWF0ZXJlcTogewotICAgICAg
ICAgICAgTm9kZUluZGV4IG9wMSA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5k
KTsKLSAgICAgICAgICAgIE5vZGVJbmRleCBvcDIgPSBnZXQoY3VycmVudEluc3RydWN0aW9uWzNd
LnUub3BlcmFuZCk7CisgICAgICAgICAgICBOb2RlKiBvcDEgPSBnZXQoY3VycmVudEluc3RydWN0
aW9uWzJdLnUub3BlcmFuZCk7CisgICAgICAgICAgICBOb2RlKiBvcDIgPSBnZXQoY3VycmVudElu
c3RydWN0aW9uWzNdLnUub3BlcmFuZCk7CiAgICAgICAgICAgICBzZXQoY3VycmVudEluc3RydWN0
aW9uWzFdLnUub3BlcmFuZCwgYWRkVG9HcmFwaChDb21wYXJlR3JlYXRlckVxLCBvcDEsIG9wMikp
OwogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfZ3JlYXRlcmVxKTsKICAgICAgICAgfQogCiAg
ICAgICAgIGNhc2Ugb3BfZXE6IHsKLSAgICAgICAgICAgIE5vZGVJbmRleCBvcDEgPSBnZXQoY3Vy
cmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7Ci0gICAgICAgICAgICBOb2RlSW5kZXggb3Ay
ID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpOworICAgICAgICAgICAgTm9k
ZSogb3AxID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOworICAgICAgICAg
ICAgTm9kZSogb3AyID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpOwogICAg
ICAgICAgICAgc2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsIGFkZFRvR3JhcGgo
Q29tcGFyZUVxLCBvcDEsIG9wMikpOwogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfZXEpOwog
ICAgICAgICB9CiAKICAgICAgICAgY2FzZSBvcF9lcV9udWxsOiB7Ci0gICAgICAgICAgICBOb2Rl
SW5kZXggdmFsdWUgPSBnZXQoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7CisgICAg
ICAgICAgICBOb2RlKiB2YWx1ZSA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5k
KTsKICAgICAgICAgICAgIHNldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCBhZGRU
b0dyYXBoKENvbXBhcmVFcSwgdmFsdWUsIGNvbnN0YW50TnVsbCgpKSk7CiAgICAgICAgICAgICBO
RVhUX09QQ09ERShvcF9lcV9udWxsKTsKICAgICAgICAgfQogCiAgICAgICAgIGNhc2Ugb3Bfc3Ry
aWN0ZXE6IHsKLSAgICAgICAgICAgIE5vZGVJbmRleCBvcDEgPSBnZXQoY3VycmVudEluc3RydWN0
aW9uWzJdLnUub3BlcmFuZCk7Ci0gICAgICAgICAgICBOb2RlSW5kZXggb3AyID0gZ2V0KGN1cnJl
bnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpOworICAgICAgICAgICAgTm9kZSogb3AxID0gZ2V0
KGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOworICAgICAgICAgICAgTm9kZSogb3Ay
ID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpOwogICAgICAgICAgICAgc2V0
KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsIGFkZFRvR3JhcGgoQ29tcGFyZVN0cmlj
dEVxLCBvcDEsIG9wMikpOwogICAgICAgICAgICAgTkVYVF9PUENPREUob3Bfc3RyaWN0ZXEpOwog
ICAgICAgICB9CiAKICAgICAgICAgY2FzZSBvcF9uZXE6IHsKLSAgICAgICAgICAgIE5vZGVJbmRl
eCBvcDEgPSBnZXQoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7Ci0gICAgICAgICAg
ICBOb2RlSW5kZXggb3AyID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpOwor
ICAgICAgICAgICAgTm9kZSogb3AxID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJh
bmQpOworICAgICAgICAgICAgTm9kZSogb3AyID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblszXS51
Lm9wZXJhbmQpOwogICAgICAgICAgICAgc2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJh
bmQsIGFkZFRvR3JhcGgoTG9naWNhbE5vdCwgYWRkVG9HcmFwaChDb21wYXJlRXEsIG9wMSwgb3Ay
KSkpOwogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfbmVxKTsKICAgICAgICAgfQogCiAgICAg
ICAgIGNhc2Ugb3BfbmVxX251bGw6IHsKLSAgICAgICAgICAgIE5vZGVJbmRleCB2YWx1ZSA9IGdl
dChjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKKyAgICAgICAgICAgIE5vZGUqIHZh
bHVlID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOwogICAgICAgICAgICAg
c2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsIGFkZFRvR3JhcGgoTG9naWNhbE5v
dCwgYWRkVG9HcmFwaChDb21wYXJlRXEsIHZhbHVlLCBjb25zdGFudE51bGwoKSkpKTsKICAgICAg
ICAgICAgIE5FWFRfT1BDT0RFKG9wX25lcV9udWxsKTsKICAgICAgICAgfQogCiAgICAgICAgIGNh
c2Ugb3BfbnN0cmljdGVxOiB7Ci0gICAgICAgICAgICBOb2RlSW5kZXggb3AxID0gZ2V0KGN1cnJl
bnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOwotICAgICAgICAgICAgTm9kZUluZGV4IG9wMiA9
IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKTsKKyAgICAgICAgICAgIE5vZGUq
IG9wMSA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKKyAgICAgICAgICAg
IE5vZGUqIG9wMiA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKTsKICAgICAg
ICAgICAgIHNldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCBhZGRUb0dyYXBoKExv
Z2ljYWxOb3QsIGFkZFRvR3JhcGgoQ29tcGFyZVN0cmljdEVxLCBvcDEsIG9wMikpKTsKICAgICAg
ICAgICAgIE5FWFRfT1BDT0RFKG9wX25zdHJpY3RlcSk7CiAgICAgICAgIH0KQEAgLTI1MjYsMjcg
KzI0ODgsMjcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAg
ICAgICBjYXNlIG9wX2dldF9ieV92YWw6IHsKICAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHBy
ZWRpY3Rpb24gPSBnZXRQcmVkaWN0aW9uKCk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIE5v
ZGVJbmRleCBiYXNlID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOworICAg
ICAgICAgICAgTm9kZSogYmFzZSA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5k
KTsKICAgICAgICAgICAgIEFycmF5TW9kZSBhcnJheU1vZGUgPSBnZXRBcnJheU1vZGVBbmRFbWl0
Q2hlY2tzKGN1cnJlbnRJbnN0cnVjdGlvbls0XS51LmFycmF5UHJvZmlsZSwgQXJyYXk6OlJlYWQs
IGJhc2UpOwotICAgICAgICAgICAgTm9kZUluZGV4IHByb3BlcnR5ID0gZ2V0KGN1cnJlbnRJbnN0
cnVjdGlvblszXS51Lm9wZXJhbmQpOwotICAgICAgICAgICAgTm9kZUluZGV4IGdldEJ5VmFsID0g
YWRkVG9HcmFwaChHZXRCeVZhbCwgT3BJbmZvKGFycmF5TW9kZS5hc1dvcmQoKSksIE9wSW5mbyhw
cmVkaWN0aW9uKSwgYmFzZSwgcHJvcGVydHkpOworICAgICAgICAgICAgTm9kZSogcHJvcGVydHkg
PSBnZXQoY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZCk7CisgICAgICAgICAgICBOb2Rl
KiBnZXRCeVZhbCA9IGFkZFRvR3JhcGgoR2V0QnlWYWwsIE9wSW5mbyhhcnJheU1vZGUuYXNXb3Jk
KCkpLCBPcEluZm8ocHJlZGljdGlvbiksIGJhc2UsIHByb3BlcnR5KTsKICAgICAgICAgICAgIHNl
dChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCBnZXRCeVZhbCk7CiAKICAgICAgICAg
ICAgIE5FWFRfT1BDT0RFKG9wX2dldF9ieV92YWwpOwogICAgICAgICB9CiAKICAgICAgICAgY2Fz
ZSBvcF9wdXRfYnlfdmFsOiB7Ci0gICAgICAgICAgICBOb2RlSW5kZXggYmFzZSA9IGdldChjdXJy
ZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKTsKKyAgICAgICAgICAgIE5vZGUqIGJhc2UgPSBn
ZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCk7CiAKICAgICAgICAgICAgIEFycmF5
TW9kZSBhcnJheU1vZGUgPSBnZXRBcnJheU1vZGVBbmRFbWl0Q2hlY2tzKGN1cnJlbnRJbnN0cnVj
dGlvbls0XS51LmFycmF5UHJvZmlsZSwgQXJyYXk6OldyaXRlLCBiYXNlKTsKICAgICAgICAgICAg
IAotICAgICAgICAgICAgTm9kZUluZGV4IHByb3BlcnR5ID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlv
blsyXS51Lm9wZXJhbmQpOwotICAgICAgICAgICAgTm9kZUluZGV4IHZhbHVlID0gZ2V0KGN1cnJl
bnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpOworICAgICAgICAgICAgTm9kZSogcHJvcGVydHkg
PSBnZXQoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7CisgICAgICAgICAgICBOb2Rl
KiB2YWx1ZSA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKTsKICAgICAgICAg
ICAgIAogICAgICAgICAgICAgYWRkVmFyQXJnQ2hpbGQoYmFzZSk7CiAgICAgICAgICAgICBhZGRW
YXJBcmdDaGlsZChwcm9wZXJ0eSk7CiAgICAgICAgICAgICBhZGRWYXJBcmdDaGlsZCh2YWx1ZSk7
Ci0gICAgICAgICAgICBhZGRWYXJBcmdDaGlsZChOb05vZGUpOyAvLyBMZWF2ZSByb29tIGZvciBw
cm9wZXJ0eSBzdG9yYWdlLgorICAgICAgICAgICAgYWRkVmFyQXJnQ2hpbGQoMCk7IC8vIExlYXZl
IHJvb20gZm9yIHByb3BlcnR5IHN0b3JhZ2UuCiAgICAgICAgICAgICBhZGRUb0dyYXBoKE5vZGU6
OlZhckFyZywgUHV0QnlWYWwsIE9wSW5mbyhhcnJheU1vZGUuYXNXb3JkKCkpLCBPcEluZm8oMCkp
OwogCiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9wdXRfYnlfdmFsKTsKQEAgLTI1NTcsNyAr
MjUxOSw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAg
ICAgY2FzZSBvcF9nZXRfYXJyYXlfbGVuZ3RoOiB7CiAgICAgICAgICAgICBTcGVjdWxhdGVkVHlw
ZSBwcmVkaWN0aW9uID0gZ2V0UHJlZGljdGlvbigpOwogICAgICAgICAgICAgCi0gICAgICAgICAg
ICBOb2RlSW5kZXggYmFzZSA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsK
KyAgICAgICAgICAgIE5vZGUqIGJhc2UgPSBnZXQoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3Bl
cmFuZCk7CiAgICAgICAgICAgICB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyID0gbV9pbmxpbmVT
dGFja1RvcC0+bV9pZGVudGlmaWVyUmVtYXBbY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFu
ZF07CiAgICAgICAgICAgICAKICAgICAgICAgICAgIElkZW50aWZpZXIgaWRlbnRpZmllciA9IG1f
Y29kZUJsb2NrLT5pZGVudGlmaWVyKGlkZW50aWZpZXJOdW1iZXIpOwpAQCAtMjU3NSw4ICsyNTM3
LDggQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICBj
YXNlIG9wX3B1dF9ieV9pZF90cmFuc2l0aW9uX25vcm1hbDoKICAgICAgICAgY2FzZSBvcF9wdXRf
YnlfaWRfdHJhbnNpdGlvbl9kaXJlY3Rfb3V0X29mX2xpbmU6CiAgICAgICAgIGNhc2Ugb3BfcHV0
X2J5X2lkX3RyYW5zaXRpb25fbm9ybWFsX291dF9vZl9saW5lOiB7Ci0gICAgICAgICAgICBOb2Rl
SW5kZXggdmFsdWUgPSBnZXQoY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZCk7Ci0gICAg
ICAgICAgICBOb2RlSW5kZXggYmFzZSA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVy
YW5kKTsKKyAgICAgICAgICAgIE5vZGUqIHZhbHVlID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsz
XS51Lm9wZXJhbmQpOworICAgICAgICAgICAgTm9kZSogYmFzZSA9IGdldChjdXJyZW50SW5zdHJ1
Y3Rpb25bMV0udS5vcGVyYW5kKTsKICAgICAgICAgICAgIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1i
ZXIgPSBtX2lubGluZVN0YWNrVG9wLT5tX2lkZW50aWZpZXJSZW1hcFtjdXJyZW50SW5zdHJ1Y3Rp
b25bMl0udS5vcGVyYW5kXTsKICAgICAgICAgICAgIGJvb2wgZGlyZWN0ID0gY3VycmVudEluc3Ry
dWN0aW9uWzhdLnUub3BlcmFuZDsKIApAQCAtMjU5MSw3ICsyNTUzLDcgQEAgYm9vbCBCeXRlQ29k
ZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgCiAgICAgICAgICAgICBp
ZiAoIWhhc0V4aXRTaXRlICYmIHB1dEJ5SWRTdGF0dXMuaXNTaW1wbGVSZXBsYWNlKCkpIHsKICAg
ICAgICAgICAgICAgICBhZGRUb0dyYXBoKENoZWNrU3RydWN0dXJlLCBPcEluZm8obV9ncmFwaC5h
ZGRTdHJ1Y3R1cmVTZXQocHV0QnlJZFN0YXR1cy5vbGRTdHJ1Y3R1cmUoKSkpLCBiYXNlKTsKLSAg
ICAgICAgICAgICAgICBOb2RlSW5kZXggcHJvcGVydHlTdG9yYWdlOworICAgICAgICAgICAgICAg
IE5vZGUqIHByb3BlcnR5U3RvcmFnZTsKICAgICAgICAgICAgICAgICBpZiAoaXNJbmxpbmVPZmZz
ZXQocHV0QnlJZFN0YXR1cy5vZmZzZXQoKSkpCiAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5
U3RvcmFnZSA9IGJhc2U7CiAgICAgICAgICAgICAgICAgZWxzZQpAQCAtMjYyNiw3ICsyNTg4LDcg
QEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICBBU1NFUlQocHV0QnlJZFN0YXR1cy5vbGRTdHJ1Y3R1cmUo
KS0+dHJhbnNpdGlvbldhdGNocG9pbnRTZXRIYXNCZWVuSW52YWxpZGF0ZWQoKSk7CiAgICAgICAg
ICAgICAgICAgCi0gICAgICAgICAgICAgICAgTm9kZUluZGV4IHByb3BlcnR5U3RvcmFnZTsKKyAg
ICAgICAgICAgICAgICBOb2RlKiBwcm9wZXJ0eVN0b3JhZ2U7CiAgICAgICAgICAgICAgICAgU3Ry
dWN0dXJlVHJhbnNpdGlvbkRhdGEqIHRyYW5zaXRpb25EYXRhID0KICAgICAgICAgICAgICAgICAg
ICAgbV9ncmFwaC5hZGRTdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSgKICAgICAgICAgICAgICAgICAg
ICAgICAgIFN0cnVjdHVyZVRyYW5zaXRpb25EYXRhKApAQCAtMjY4Myw3ICsyNjQ1LDcgQEAgYm9v
bCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICB9CiAKICAgICAg
ICAgY2FzZSBvcF9pbml0X2dsb2JhbF9jb25zdDogewotICAgICAgICAgICAgTm9kZUluZGV4IHZh
bHVlID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOworICAgICAgICAgICAg
Tm9kZSogdmFsdWUgPSBnZXQoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7CiAgICAg
ICAgICAgICBhZGRUb0dyYXBoKAogICAgICAgICAgICAgICAgIFB1dEdsb2JhbFZhciwKICAgICAg
ICAgICAgICAgICBPcEluZm8obV9pbmxpbmVTdGFja1RvcC0+bV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpLT5hc3NlcnRSZWdpc3RlcklzSW5UaGlzT2JqZWN0KGN1cnJlbnRJbnN0cnVjdGlvblsx
XS51LnJlZ2lzdGVyUG9pbnRlcikpLApAQCAtMjY5Miw3ICsyNjU0LDcgQEAgYm9vbCBCeXRlQ29k
ZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBv
cF9pbml0X2dsb2JhbF9jb25zdF9jaGVjazogewotICAgICAgICAgICAgTm9kZUluZGV4IHZhbHVl
ID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOworICAgICAgICAgICAgTm9k
ZSogdmFsdWUgPSBnZXQoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7CiAgICAgICAg
ICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IG1faW5saW5lU3RhY2tUb3AtPm1fY29kZUJsb2Nr
OwogICAgICAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGNvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCk7CiAgICAgICAgICAgICB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyID0g
bV9pbmxpbmVTdGFja1RvcC0+bV9pZGVudGlmaWVyUmVtYXBbY3VycmVudEluc3RydWN0aW9uWzRd
LnUub3BlcmFuZF07CkBAIC0yNzMwLDE1MiArMjY5MiwxNTIgQEAgYm9vbCBCeXRlQ29kZVBhcnNl
cjo6cGFyc2VCbG9jayh1bnNpZ25lZAogCiAgICAgICAgIGNhc2Ugb3BfanRydWU6IHsKICAgICAg
ICAgICAgIHVuc2lnbmVkIHJlbGF0aXZlT2Zmc2V0ID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUu
b3BlcmFuZDsKLSAgICAgICAgICAgIE5vZGVJbmRleCBjb25kaXRpb24gPSBnZXQoY3VycmVudElu
c3RydWN0aW9uWzFdLnUub3BlcmFuZCk7CisgICAgICAgICAgICBOb2RlKiBjb25kaXRpb24gPSBn
ZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCk7CiAgICAgICAgICAgICBhZGRUb0dy
YXBoKEJyYW5jaCwgT3BJbmZvKG1fY3VycmVudEluZGV4ICsgcmVsYXRpdmVPZmZzZXQpLCBPcElu
Zm8obV9jdXJyZW50SW5kZXggKyBPUENPREVfTEVOR1RIKG9wX2p0cnVlKSksIGNvbmRpdGlvbik7
CiAgICAgICAgICAgICBMQVNUX09QQ09ERShvcF9qdHJ1ZSk7CiAgICAgICAgIH0KIAogICAgICAg
ICBjYXNlIG9wX2pmYWxzZTogewogICAgICAgICAgICAgdW5zaWduZWQgcmVsYXRpdmVPZmZzZXQg
PSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwotICAgICAgICAgICAgTm9kZUluZGV4
IGNvbmRpdGlvbiA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKTsKKyAgICAg
ICAgICAgIE5vZGUqIGNvbmRpdGlvbiA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVy
YW5kKTsKICAgICAgICAgICAgIGFkZFRvR3JhcGgoQnJhbmNoLCBPcEluZm8obV9jdXJyZW50SW5k
ZXggKyBPUENPREVfTEVOR1RIKG9wX2pmYWxzZSkpLCBPcEluZm8obV9jdXJyZW50SW5kZXggKyBy
ZWxhdGl2ZU9mZnNldCksIGNvbmRpdGlvbik7CiAgICAgICAgICAgICBMQVNUX09QQ09ERShvcF9q
ZmFsc2UpOwogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBvcF9sb29wX2lmX3RydWU6IHsKICAg
ICAgICAgICAgIHVuc2lnbmVkIHJlbGF0aXZlT2Zmc2V0ID0gY3VycmVudEluc3RydWN0aW9uWzJd
LnUub3BlcmFuZDsKLSAgICAgICAgICAgIE5vZGVJbmRleCBjb25kaXRpb24gPSBnZXQoY3VycmVu
dEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCk7CisgICAgICAgICAgICBOb2RlKiBjb25kaXRpb24g
PSBnZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCk7CiAgICAgICAgICAgICBhZGRU
b0dyYXBoKEJyYW5jaCwgT3BJbmZvKG1fY3VycmVudEluZGV4ICsgcmVsYXRpdmVPZmZzZXQpLCBP
cEluZm8obV9jdXJyZW50SW5kZXggKyBPUENPREVfTEVOR1RIKG9wX2xvb3BfaWZfdHJ1ZSkpLCBj
b25kaXRpb24pOwogICAgICAgICAgICAgTEFTVF9PUENPREUob3BfbG9vcF9pZl90cnVlKTsKICAg
ICAgICAgfQogCiAgICAgICAgIGNhc2Ugb3BfbG9vcF9pZl9mYWxzZTogewogICAgICAgICAgICAg
dW5zaWduZWQgcmVsYXRpdmVPZmZzZXQgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5k
OwotICAgICAgICAgICAgTm9kZUluZGV4IGNvbmRpdGlvbiA9IGdldChjdXJyZW50SW5zdHJ1Y3Rp
b25bMV0udS5vcGVyYW5kKTsKKyAgICAgICAgICAgIE5vZGUqIGNvbmRpdGlvbiA9IGdldChjdXJy
ZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKTsKICAgICAgICAgICAgIGFkZFRvR3JhcGgoQnJh
bmNoLCBPcEluZm8obV9jdXJyZW50SW5kZXggKyBPUENPREVfTEVOR1RIKG9wX2xvb3BfaWZfZmFs
c2UpKSwgT3BJbmZvKG1fY3VycmVudEluZGV4ICsgcmVsYXRpdmVPZmZzZXQpLCBjb25kaXRpb24p
OwogICAgICAgICAgICAgTEFTVF9PUENPREUob3BfbG9vcF9pZl9mYWxzZSk7CiAgICAgICAgIH0K
IAogICAgICAgICBjYXNlIG9wX2plcV9udWxsOiB7CiAgICAgICAgICAgICB1bnNpZ25lZCByZWxh
dGl2ZU9mZnNldCA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7Ci0gICAgICAgICAg
ICBOb2RlSW5kZXggdmFsdWUgPSBnZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCk7
Ci0gICAgICAgICAgICBOb2RlSW5kZXggY29uZGl0aW9uID0gYWRkVG9HcmFwaChDb21wYXJlRXEs
IHZhbHVlLCBjb25zdGFudE51bGwoKSk7CisgICAgICAgICAgICBOb2RlKiB2YWx1ZSA9IGdldChj
dXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKTsKKyAgICAgICAgICAgIE5vZGUqIGNvbmRp
dGlvbiA9IGFkZFRvR3JhcGgoQ29tcGFyZUVxLCB2YWx1ZSwgY29uc3RhbnROdWxsKCkpOwogICAg
ICAgICAgICAgYWRkVG9HcmFwaChCcmFuY2gsIE9wSW5mbyhtX2N1cnJlbnRJbmRleCArIHJlbGF0
aXZlT2Zmc2V0KSwgT3BJbmZvKG1fY3VycmVudEluZGV4ICsgT1BDT0RFX0xFTkdUSChvcF9qZXFf
bnVsbCkpLCBjb25kaXRpb24pOwogICAgICAgICAgICAgTEFTVF9PUENPREUob3BfamVxX251bGwp
OwogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBvcF9qbmVxX251bGw6IHsKICAgICAgICAgICAg
IHVuc2lnbmVkIHJlbGF0aXZlT2Zmc2V0ID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFu
ZDsKLSAgICAgICAgICAgIE5vZGVJbmRleCB2YWx1ZSA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25b
MV0udS5vcGVyYW5kKTsKLSAgICAgICAgICAgIE5vZGVJbmRleCBjb25kaXRpb24gPSBhZGRUb0dy
YXBoKENvbXBhcmVFcSwgdmFsdWUsIGNvbnN0YW50TnVsbCgpKTsKKyAgICAgICAgICAgIE5vZGUq
IHZhbHVlID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpOworICAgICAgICAg
ICAgTm9kZSogY29uZGl0aW9uID0gYWRkVG9HcmFwaChDb21wYXJlRXEsIHZhbHVlLCBjb25zdGFu
dE51bGwoKSk7CiAgICAgICAgICAgICBhZGRUb0dyYXBoKEJyYW5jaCwgT3BJbmZvKG1fY3VycmVu
dEluZGV4ICsgT1BDT0RFX0xFTkdUSChvcF9qbmVxX251bGwpKSwgT3BJbmZvKG1fY3VycmVudElu
ZGV4ICsgcmVsYXRpdmVPZmZzZXQpLCBjb25kaXRpb24pOwogICAgICAgICAgICAgTEFTVF9PUENP
REUob3Bfam5lcV9udWxsKTsKICAgICAgICAgfQogCiAgICAgICAgIGNhc2Ugb3Bfamxlc3M6IHsK
ICAgICAgICAgICAgIHVuc2lnbmVkIHJlbGF0aXZlT2Zmc2V0ID0gY3VycmVudEluc3RydWN0aW9u
WzNdLnUub3BlcmFuZDsKLSAgICAgICAgICAgIE5vZGVJbmRleCBvcDEgPSBnZXQoY3VycmVudElu
c3RydWN0aW9uWzFdLnUub3BlcmFuZCk7Ci0gICAgICAgICAgICBOb2RlSW5kZXggb3AyID0gZ2V0
KGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOwotICAgICAgICAgICAgTm9kZUluZGV4
IGNvbmRpdGlvbiA9IGFkZFRvR3JhcGgoQ29tcGFyZUxlc3MsIG9wMSwgb3AyKTsKKyAgICAgICAg
ICAgIE5vZGUqIG9wMSA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKTsKKyAg
ICAgICAgICAgIE5vZGUqIG9wMiA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5k
KTsKKyAgICAgICAgICAgIE5vZGUqIGNvbmRpdGlvbiA9IGFkZFRvR3JhcGgoQ29tcGFyZUxlc3Ms
IG9wMSwgb3AyKTsKICAgICAgICAgICAgIGFkZFRvR3JhcGgoQnJhbmNoLCBPcEluZm8obV9jdXJy
ZW50SW5kZXggKyByZWxhdGl2ZU9mZnNldCksIE9wSW5mbyhtX2N1cnJlbnRJbmRleCArIE9QQ09E
RV9MRU5HVEgob3Bfamxlc3MpKSwgY29uZGl0aW9uKTsKICAgICAgICAgICAgIExBU1RfT1BDT0RF
KG9wX2psZXNzKTsKICAgICAgICAgfQogCiAgICAgICAgIGNhc2Ugb3Bfamxlc3NlcTogewogICAg
ICAgICAgICAgdW5zaWduZWQgcmVsYXRpdmVPZmZzZXQgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10u
dS5vcGVyYW5kOwotICAgICAgICAgICAgTm9kZUluZGV4IG9wMSA9IGdldChjdXJyZW50SW5zdHJ1
Y3Rpb25bMV0udS5vcGVyYW5kKTsKLSAgICAgICAgICAgIE5vZGVJbmRleCBvcDIgPSBnZXQoY3Vy
cmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7Ci0gICAgICAgICAgICBOb2RlSW5kZXggY29u
ZGl0aW9uID0gYWRkVG9HcmFwaChDb21wYXJlTGVzc0VxLCBvcDEsIG9wMik7CisgICAgICAgICAg
ICBOb2RlKiBvcDEgPSBnZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCk7CisgICAg
ICAgICAgICBOb2RlKiBvcDIgPSBnZXQoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7
CisgICAgICAgICAgICBOb2RlKiBjb25kaXRpb24gPSBhZGRUb0dyYXBoKENvbXBhcmVMZXNzRXEs
IG9wMSwgb3AyKTsKICAgICAgICAgICAgIGFkZFRvR3JhcGgoQnJhbmNoLCBPcEluZm8obV9jdXJy
ZW50SW5kZXggKyByZWxhdGl2ZU9mZnNldCksIE9wSW5mbyhtX2N1cnJlbnRJbmRleCArIE9QQ09E
RV9MRU5HVEgob3Bfamxlc3NlcSkpLCBjb25kaXRpb24pOwogICAgICAgICAgICAgTEFTVF9PUENP
REUob3Bfamxlc3NlcSk7CiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIG9wX2pncmVhdGVyOiB7
CiAgICAgICAgICAgICB1bnNpZ25lZCByZWxhdGl2ZU9mZnNldCA9IGN1cnJlbnRJbnN0cnVjdGlv
blszXS51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBOb2RlSW5kZXggb3AxID0gZ2V0KGN1cnJlbnRJ
bnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpOwotICAgICAgICAgICAgTm9kZUluZGV4IG9wMiA9IGdl
dChjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKLSAgICAgICAgICAgIE5vZGVJbmRl
eCBjb25kaXRpb24gPSBhZGRUb0dyYXBoKENvbXBhcmVHcmVhdGVyLCBvcDEsIG9wMik7CisgICAg
ICAgICAgICBOb2RlKiBvcDEgPSBnZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCk7
CisgICAgICAgICAgICBOb2RlKiBvcDIgPSBnZXQoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3Bl
cmFuZCk7CisgICAgICAgICAgICBOb2RlKiBjb25kaXRpb24gPSBhZGRUb0dyYXBoKENvbXBhcmVH
cmVhdGVyLCBvcDEsIG9wMik7CiAgICAgICAgICAgICBhZGRUb0dyYXBoKEJyYW5jaCwgT3BJbmZv
KG1fY3VycmVudEluZGV4ICsgcmVsYXRpdmVPZmZzZXQpLCBPcEluZm8obV9jdXJyZW50SW5kZXgg
KyBPUENPREVfTEVOR1RIKG9wX2pncmVhdGVyKSksIGNvbmRpdGlvbik7CiAgICAgICAgICAgICBM
QVNUX09QQ09ERShvcF9qZ3JlYXRlcik7CiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIG9wX2pn
cmVhdGVyZXE6IHsKICAgICAgICAgICAgIHVuc2lnbmVkIHJlbGF0aXZlT2Zmc2V0ID0gY3VycmVu
dEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKLSAgICAgICAgICAgIE5vZGVJbmRleCBvcDEgPSBn
ZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCk7Ci0gICAgICAgICAgICBOb2RlSW5k
ZXggb3AyID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOwotICAgICAgICAg
ICAgTm9kZUluZGV4IGNvbmRpdGlvbiA9IGFkZFRvR3JhcGgoQ29tcGFyZUdyZWF0ZXJFcSwgb3Ax
LCBvcDIpOworICAgICAgICAgICAgTm9kZSogb3AxID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsx
XS51Lm9wZXJhbmQpOworICAgICAgICAgICAgTm9kZSogb3AyID0gZ2V0KGN1cnJlbnRJbnN0cnVj
dGlvblsyXS51Lm9wZXJhbmQpOworICAgICAgICAgICAgTm9kZSogY29uZGl0aW9uID0gYWRkVG9H
cmFwaChDb21wYXJlR3JlYXRlckVxLCBvcDEsIG9wMik7CiAgICAgICAgICAgICBhZGRUb0dyYXBo
KEJyYW5jaCwgT3BJbmZvKG1fY3VycmVudEluZGV4ICsgcmVsYXRpdmVPZmZzZXQpLCBPcEluZm8o
bV9jdXJyZW50SW5kZXggKyBPUENPREVfTEVOR1RIKG9wX2pncmVhdGVyZXEpKSwgY29uZGl0aW9u
KTsKICAgICAgICAgICAgIExBU1RfT1BDT0RFKG9wX2pncmVhdGVyZXEpOwogICAgICAgICB9CiAK
ICAgICAgICAgY2FzZSBvcF9qbmxlc3M6IHsKICAgICAgICAgICAgIHVuc2lnbmVkIHJlbGF0aXZl
T2Zmc2V0ID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKLSAgICAgICAgICAgIE5v
ZGVJbmRleCBvcDEgPSBnZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCk7Ci0gICAg
ICAgICAgICBOb2RlSW5kZXggb3AyID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJh
bmQpOwotICAgICAgICAgICAgTm9kZUluZGV4IGNvbmRpdGlvbiA9IGFkZFRvR3JhcGgoQ29tcGFy
ZUxlc3MsIG9wMSwgb3AyKTsKKyAgICAgICAgICAgIE5vZGUqIG9wMSA9IGdldChjdXJyZW50SW5z
dHJ1Y3Rpb25bMV0udS5vcGVyYW5kKTsKKyAgICAgICAgICAgIE5vZGUqIG9wMiA9IGdldChjdXJy
ZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKKyAgICAgICAgICAgIE5vZGUqIGNvbmRpdGlv
biA9IGFkZFRvR3JhcGgoQ29tcGFyZUxlc3MsIG9wMSwgb3AyKTsKICAgICAgICAgICAgIGFkZFRv
R3JhcGgoQnJhbmNoLCBPcEluZm8obV9jdXJyZW50SW5kZXggKyBPUENPREVfTEVOR1RIKG9wX2pu
bGVzcykpLCBPcEluZm8obV9jdXJyZW50SW5kZXggKyByZWxhdGl2ZU9mZnNldCksIGNvbmRpdGlv
bik7CiAgICAgICAgICAgICBMQVNUX09QQ09ERShvcF9qbmxlc3MpOwogICAgICAgICB9CiAKICAg
ICAgICAgY2FzZSBvcF9qbmxlc3NlcTogewogICAgICAgICAgICAgdW5zaWduZWQgcmVsYXRpdmVP
ZmZzZXQgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOwotICAgICAgICAgICAgTm9k
ZUluZGV4IG9wMSA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKTsKLSAgICAg
ICAgICAgIE5vZGVJbmRleCBvcDIgPSBnZXQoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFu
ZCk7Ci0gICAgICAgICAgICBOb2RlSW5kZXggY29uZGl0aW9uID0gYWRkVG9HcmFwaChDb21wYXJl
TGVzc0VxLCBvcDEsIG9wMik7CisgICAgICAgICAgICBOb2RlKiBvcDEgPSBnZXQoY3VycmVudElu
c3RydWN0aW9uWzFdLnUub3BlcmFuZCk7CisgICAgICAgICAgICBOb2RlKiBvcDIgPSBnZXQoY3Vy
cmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7CisgICAgICAgICAgICBOb2RlKiBjb25kaXRp
b24gPSBhZGRUb0dyYXBoKENvbXBhcmVMZXNzRXEsIG9wMSwgb3AyKTsKICAgICAgICAgICAgIGFk
ZFRvR3JhcGgoQnJhbmNoLCBPcEluZm8obV9jdXJyZW50SW5kZXggKyBPUENPREVfTEVOR1RIKG9w
X2pubGVzc2VxKSksIE9wSW5mbyhtX2N1cnJlbnRJbmRleCArIHJlbGF0aXZlT2Zmc2V0KSwgY29u
ZGl0aW9uKTsKICAgICAgICAgICAgIExBU1RfT1BDT0RFKG9wX2pubGVzc2VxKTsKICAgICAgICAg
fQogCiAgICAgICAgIGNhc2Ugb3Bfam5ncmVhdGVyOiB7CiAgICAgICAgICAgICB1bnNpZ25lZCBy
ZWxhdGl2ZU9mZnNldCA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7Ci0gICAgICAg
ICAgICBOb2RlSW5kZXggb3AxID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQp
OwotICAgICAgICAgICAgTm9kZUluZGV4IG9wMiA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMl0u
dS5vcGVyYW5kKTsKLSAgICAgICAgICAgIE5vZGVJbmRleCBjb25kaXRpb24gPSBhZGRUb0dyYXBo
KENvbXBhcmVHcmVhdGVyLCBvcDEsIG9wMik7CisgICAgICAgICAgICBOb2RlKiBvcDEgPSBnZXQo
Y3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCk7CisgICAgICAgICAgICBOb2RlKiBvcDIg
PSBnZXQoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7CisgICAgICAgICAgICBOb2Rl
KiBjb25kaXRpb24gPSBhZGRUb0dyYXBoKENvbXBhcmVHcmVhdGVyLCBvcDEsIG9wMik7CiAgICAg
ICAgICAgICBhZGRUb0dyYXBoKEJyYW5jaCwgT3BJbmZvKG1fY3VycmVudEluZGV4ICsgT1BDT0RF
X0xFTkdUSChvcF9qbmdyZWF0ZXIpKSwgT3BJbmZvKG1fY3VycmVudEluZGV4ICsgcmVsYXRpdmVP
ZmZzZXQpLCBjb25kaXRpb24pOwogICAgICAgICAgICAgTEFTVF9PUENPREUob3Bfam5ncmVhdGVy
KTsKICAgICAgICAgfQogCiAgICAgICAgIGNhc2Ugb3Bfam5ncmVhdGVyZXE6IHsKICAgICAgICAg
ICAgIHVuc2lnbmVkIHJlbGF0aXZlT2Zmc2V0ID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3Bl
cmFuZDsKLSAgICAgICAgICAgIE5vZGVJbmRleCBvcDEgPSBnZXQoY3VycmVudEluc3RydWN0aW9u
WzFdLnUub3BlcmFuZCk7Ci0gICAgICAgICAgICBOb2RlSW5kZXggb3AyID0gZ2V0KGN1cnJlbnRJ
bnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOwotICAgICAgICAgICAgTm9kZUluZGV4IGNvbmRpdGlv
biA9IGFkZFRvR3JhcGgoQ29tcGFyZUdyZWF0ZXJFcSwgb3AxLCBvcDIpOworICAgICAgICAgICAg
Tm9kZSogb3AxID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpOworICAgICAg
ICAgICAgTm9kZSogb3AyID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOwor
ICAgICAgICAgICAgTm9kZSogY29uZGl0aW9uID0gYWRkVG9HcmFwaChDb21wYXJlR3JlYXRlckVx
LCBvcDEsIG9wMik7CiAgICAgICAgICAgICBhZGRUb0dyYXBoKEJyYW5jaCwgT3BJbmZvKG1fY3Vy
cmVudEluZGV4ICsgT1BDT0RFX0xFTkdUSChvcF9qbmdyZWF0ZXJlcSkpLCBPcEluZm8obV9jdXJy
ZW50SW5kZXggKyByZWxhdGl2ZU9mZnNldCksIGNvbmRpdGlvbik7CiAgICAgICAgICAgICBMQVNU
X09QQ09ERShvcF9qbmdyZWF0ZXJlcSk7CiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIG9wX2xv
b3BfaWZfbGVzczogewogICAgICAgICAgICAgdW5zaWduZWQgcmVsYXRpdmVPZmZzZXQgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOwotICAgICAgICAgICAgTm9kZUluZGV4IG9wMSA9
IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKTsKLSAgICAgICAgICAgIE5vZGVJ
bmRleCBvcDIgPSBnZXQoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7Ci0gICAgICAg
ICAgICBOb2RlSW5kZXggY29uZGl0aW9uID0gYWRkVG9HcmFwaChDb21wYXJlTGVzcywgb3AxLCBv
cDIpOworICAgICAgICAgICAgTm9kZSogb3AxID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51
Lm9wZXJhbmQpOworICAgICAgICAgICAgTm9kZSogb3AyID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlv
blsyXS51Lm9wZXJhbmQpOworICAgICAgICAgICAgTm9kZSogY29uZGl0aW9uID0gYWRkVG9HcmFw
aChDb21wYXJlTGVzcywgb3AxLCBvcDIpOwogICAgICAgICAgICAgYWRkVG9HcmFwaChCcmFuY2gs
IE9wSW5mbyhtX2N1cnJlbnRJbmRleCArIHJlbGF0aXZlT2Zmc2V0KSwgT3BJbmZvKG1fY3VycmVu
dEluZGV4ICsgT1BDT0RFX0xFTkdUSChvcF9sb29wX2lmX2xlc3MpKSwgY29uZGl0aW9uKTsKICAg
ICAgICAgICAgIExBU1RfT1BDT0RFKG9wX2xvb3BfaWZfbGVzcyk7CiAgICAgICAgIH0KIAogICAg
ICAgICBjYXNlIG9wX2xvb3BfaWZfbGVzc2VxOiB7CiAgICAgICAgICAgICB1bnNpZ25lZCByZWxh
dGl2ZU9mZnNldCA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7Ci0gICAgICAgICAg
ICBOb2RlSW5kZXggb3AxID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpOwot
ICAgICAgICAgICAgTm9kZUluZGV4IG9wMiA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5v
cGVyYW5kKTsKLSAgICAgICAgICAgIE5vZGVJbmRleCBjb25kaXRpb24gPSBhZGRUb0dyYXBoKENv
bXBhcmVMZXNzRXEsIG9wMSwgb3AyKTsKKyAgICAgICAgICAgIE5vZGUqIG9wMSA9IGdldChjdXJy
ZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKTsKKyAgICAgICAgICAgIE5vZGUqIG9wMiA9IGdl
dChjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKKyAgICAgICAgICAgIE5vZGUqIGNv
bmRpdGlvbiA9IGFkZFRvR3JhcGgoQ29tcGFyZUxlc3NFcSwgb3AxLCBvcDIpOwogICAgICAgICAg
ICAgYWRkVG9HcmFwaChCcmFuY2gsIE9wSW5mbyhtX2N1cnJlbnRJbmRleCArIHJlbGF0aXZlT2Zm
c2V0KSwgT3BJbmZvKG1fY3VycmVudEluZGV4ICsgT1BDT0RFX0xFTkdUSChvcF9sb29wX2lmX2xl
c3NlcSkpLCBjb25kaXRpb24pOwogICAgICAgICAgICAgTEFTVF9PUENPREUob3BfbG9vcF9pZl9s
ZXNzZXEpOwogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBvcF9sb29wX2lmX2dyZWF0ZXI6IHsK
ICAgICAgICAgICAgIHVuc2lnbmVkIHJlbGF0aXZlT2Zmc2V0ID0gY3VycmVudEluc3RydWN0aW9u
WzNdLnUub3BlcmFuZDsKLSAgICAgICAgICAgIE5vZGVJbmRleCBvcDEgPSBnZXQoY3VycmVudElu
c3RydWN0aW9uWzFdLnUub3BlcmFuZCk7Ci0gICAgICAgICAgICBOb2RlSW5kZXggb3AyID0gZ2V0
KGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOwotICAgICAgICAgICAgTm9kZUluZGV4
IGNvbmRpdGlvbiA9IGFkZFRvR3JhcGgoQ29tcGFyZUdyZWF0ZXIsIG9wMSwgb3AyKTsKKyAgICAg
ICAgICAgIE5vZGUqIG9wMSA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKTsK
KyAgICAgICAgICAgIE5vZGUqIG9wMiA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVy
YW5kKTsKKyAgICAgICAgICAgIE5vZGUqIGNvbmRpdGlvbiA9IGFkZFRvR3JhcGgoQ29tcGFyZUdy
ZWF0ZXIsIG9wMSwgb3AyKTsKICAgICAgICAgICAgIGFkZFRvR3JhcGgoQnJhbmNoLCBPcEluZm8o
bV9jdXJyZW50SW5kZXggKyByZWxhdGl2ZU9mZnNldCksIE9wSW5mbyhtX2N1cnJlbnRJbmRleCAr
IE9QQ09ERV9MRU5HVEgob3BfbG9vcF9pZl9ncmVhdGVyKSksIGNvbmRpdGlvbik7CiAgICAgICAg
ICAgICBMQVNUX09QQ09ERShvcF9sb29wX2lmX2dyZWF0ZXIpOwogICAgICAgICB9CiAKICAgICAg
ICAgY2FzZSBvcF9sb29wX2lmX2dyZWF0ZXJlcTogewogICAgICAgICAgICAgdW5zaWduZWQgcmVs
YXRpdmVPZmZzZXQgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOwotICAgICAgICAg
ICAgTm9kZUluZGV4IG9wMSA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKTsK
LSAgICAgICAgICAgIE5vZGVJbmRleCBvcDIgPSBnZXQoY3VycmVudEluc3RydWN0aW9uWzJdLnUu
b3BlcmFuZCk7Ci0gICAgICAgICAgICBOb2RlSW5kZXggY29uZGl0aW9uID0gYWRkVG9HcmFwaChD
b21wYXJlR3JlYXRlckVxLCBvcDEsIG9wMik7CisgICAgICAgICAgICBOb2RlKiBvcDEgPSBnZXQo
Y3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCk7CisgICAgICAgICAgICBOb2RlKiBvcDIg
PSBnZXQoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7CisgICAgICAgICAgICBOb2Rl
KiBjb25kaXRpb24gPSBhZGRUb0dyYXBoKENvbXBhcmVHcmVhdGVyRXEsIG9wMSwgb3AyKTsKICAg
ICAgICAgICAgIGFkZFRvR3JhcGgoQnJhbmNoLCBPcEluZm8obV9jdXJyZW50SW5kZXggKyByZWxh
dGl2ZU9mZnNldCksIE9wSW5mbyhtX2N1cnJlbnRJbmRleCArIE9QQ09ERV9MRU5HVEgob3BfbG9v
cF9pZl9ncmVhdGVyZXEpKSwgY29uZGl0aW9uKTsKICAgICAgICAgICAgIExBU1RfT1BDT0RFKG9w
X2xvb3BfaWZfZ3JlYXRlcmVxKTsKICAgICAgICAgfQpAQCAtMjk2MCw3ICsyOTIyLDcgQEAgYm9v
bCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBhcmd1bWVudCA9IDE7IGFyZ3VtZW50IDwgYXJnQ291bnQ7ICsrYXJndW1lbnQpCiAg
ICAgICAgICAgICAgICAgYWRkVmFyQXJnQ2hpbGQoZ2V0KGFyZ3VtZW50VG9PcGVyYW5kKGFyZ3Vt
ZW50KSkpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBOb2RlSW5kZXggY2FsbCA9IGFkZFRv
R3JhcGgoTm9kZTo6VmFyQXJnLCBDYWxsLCBPcEluZm8oMCksIE9wSW5mbyhwcmVkaWN0aW9uKSk7
CisgICAgICAgICAgICBOb2RlKiBjYWxsID0gYWRkVG9HcmFwaChOb2RlOjpWYXJBcmcsIENhbGws
IE9wSW5mbygwKSwgT3BJbmZvKHByZWRpY3Rpb24pKTsKICAgICAgICAgICAgIGlmIChpbnRlcnBy
ZXRlci0+Z2V0T3Bjb2RlSUQocHV0SW5zdHJ1Y3Rpb24tPnUub3Bjb2RlKSA9PSBvcF9jYWxsX3B1
dF9yZXN1bHQpCiAgICAgICAgICAgICAgICAgc2V0KHB1dEluc3RydWN0aW9uWzFdLnUub3BlcmFu
ZCwgY2FsbCk7CiAgICAgICAgICAgICAKQEAgLTI5OTIsMTMgKzI5NTQsMTMgQEAgYm9vbCBCeXRl
Q29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgCiAgICAgICAgICAg
ICB1bnNpZ25lZCBpZGVudGlmaWVyID0gbV9pbmxpbmVTdGFja1RvcC0+bV9pZGVudGlmaWVyUmVt
YXBbY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZF07CiAgICAgICAgICAgICB1bnNpZ25l
ZCBvcGVyYXRpb25zID0gbV9pbmxpbmVTdGFja1RvcC0+bV9yZXNvbHZlT3BlcmF0aW9uUmVtYXBb
Y3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZF07Ci0gICAgICAgICAgICBOb2RlSW5kZXgg
dmFsdWUgPSAwOworICAgICAgICAgICAgTm9kZSogdmFsdWUgPSAwOwogICAgICAgICAgICAgaWYg
KHBhcnNlUmVzb2x2ZU9wZXJhdGlvbnMocHJlZGljdGlvbiwgaWRlbnRpZmllciwgb3BlcmF0aW9u
cywgMCwgMCwgJnZhbHVlKSkgewogICAgICAgICAgICAgICAgIHNldChjdXJyZW50SW5zdHJ1Y3Rp
b25bMV0udS5vcGVyYW5kLCB2YWx1ZSk7CiAgICAgICAgICAgICAgICAgTkVYVF9PUENPREUob3Bf
cmVzb2x2ZSk7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIE5vZGVJbmRleCByZXNvbHZl
ID0gYWRkVG9HcmFwaChSZXNvbHZlLCBPcEluZm8obV9ncmFwaC5tX3Jlc29sdmVPcGVyYXRpb25z
RGF0YS5zaXplKCkpLCBPcEluZm8ocHJlZGljdGlvbikpOworICAgICAgICAgICAgTm9kZSogcmVz
b2x2ZSA9IGFkZFRvR3JhcGgoUmVzb2x2ZSwgT3BJbmZvKG1fZ3JhcGgubV9yZXNvbHZlT3BlcmF0
aW9uc0RhdGEuc2l6ZSgpKSwgT3BJbmZvKHByZWRpY3Rpb24pKTsKICAgICAgICAgICAgIG1fZ3Jh
cGgubV9yZXNvbHZlT3BlcmF0aW9uc0RhdGEuYXBwZW5kKFJlc29sdmVPcGVyYXRpb25EYXRhKCkp
OwogICAgICAgICAgICAgUmVzb2x2ZU9wZXJhdGlvbkRhdGEmIGRhdGEgPSBtX2dyYXBoLm1fcmVz
b2x2ZU9wZXJhdGlvbnNEYXRhLmxhc3QoKTsKICAgICAgICAgICAgIGRhdGEuaWRlbnRpZmllck51
bWJlciA9IGlkZW50aWZpZXI7CkBAIC0zMDQ2LDggKzMwMDgsOCBAQCBib29sIEJ5dGVDb2RlUGFy
c2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXQo
dmFsdWUpKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgUHV0VG9C
YXNlT3BlcmF0aW9uOjpWYXJpYWJsZVB1dDogewotICAgICAgICAgICAgICAgIE5vZGVJbmRleCBz
Y29wZSA9IGdldChiYXNlKTsKLSAgICAgICAgICAgICAgICBOb2RlSW5kZXggc2NvcGVSZWdpc3Rl
cnMgPSBhZGRUb0dyYXBoKEdldFNjb3BlUmVnaXN0ZXJzLCBzY29wZSk7CisgICAgICAgICAgICAg
ICAgTm9kZSogc2NvcGUgPSBnZXQoYmFzZSk7CisgICAgICAgICAgICAgICAgTm9kZSogc2NvcGVS
ZWdpc3RlcnMgPSBhZGRUb0dyYXBoKEdldFNjb3BlUmVnaXN0ZXJzLCBzY29wZSk7CiAgICAgICAg
ICAgICAgICAgYWRkVG9HcmFwaChQdXRTY29wZWRWYXIsIE9wSW5mbyhwdXRUb0Jhc2UtPm1fb2Zm
c2V0KSwgc2NvcGUsIHNjb3BlUmVnaXN0ZXJzLCBnZXQodmFsdWUpKTsKICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgIH0KQEAgLTMwNTcsOSArMzAxOSw5IEBAIGJvb2wgQnl0ZUNv
ZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAgICAgICAgICAgYWRkVG9H
cmFwaChQaGFudG9tLCBnZXQoYmFzZSkpOwogICAgICAgICAgICAgICAgICAgICBORVhUX09QQ09E
RShvcF9wdXRfdG9fYmFzZSk7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIE5v
ZGVJbmRleCBiYXNlTm9kZSA9IGdldChiYXNlKTsKKyAgICAgICAgICAgICAgICBOb2RlKiBiYXNl
Tm9kZSA9IGdldChiYXNlKTsKICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKENoZWNrU3RydWN0
dXJlLCBPcEluZm8obV9ncmFwaC5hZGRTdHJ1Y3R1cmVTZXQocHV0VG9CYXNlLT5tX3N0cnVjdHVy
ZS5nZXQoKSkpLCBiYXNlTm9kZSk7Ci0gICAgICAgICAgICAgICAgTm9kZUluZGV4IHByb3BlcnR5
U3RvcmFnZTsKKyAgICAgICAgICAgICAgICBOb2RlKiBwcm9wZXJ0eVN0b3JhZ2U7CiAgICAgICAg
ICAgICAgICAgaWYgKGlzSW5saW5lT2Zmc2V0KHB1dFRvQmFzZS0+bV9vZmZzZXQpKQogICAgICAg
ICAgICAgICAgICAgICBwcm9wZXJ0eVN0b3JhZ2UgPSBiYXNlTm9kZTsKICAgICAgICAgICAgICAg
ICBlbHNlCkBAIC0zMDkwLDEzICszMDUyLDEzIEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNl
QmxvY2sodW5zaWduZWQKICAgICAgICAgICAgIHVuc2lnbmVkIG9wZXJhdGlvbnMgPSBtX2lubGlu
ZVN0YWNrVG9wLT5tX3Jlc29sdmVPcGVyYXRpb25SZW1hcFtjdXJyZW50SW5zdHJ1Y3Rpb25bNF0u
dS5vcGVyYW5kXTsKICAgICAgICAgICAgIHVuc2lnbmVkIHB1dFRvQmFzZU9wZXJhdGlvbiA9IG1f
aW5saW5lU3RhY2tUb3AtPm1fcHV0VG9CYXNlT3BlcmF0aW9uUmVtYXBbY3VycmVudEluc3RydWN0
aW9uWzVdLnUub3BlcmFuZF07CiAKLSAgICAgICAgICAgIE5vZGVJbmRleCBiYXNlID0gMDsKKyAg
ICAgICAgICAgIE5vZGUqIGJhc2UgPSAwOwogICAgICAgICAgICAgaWYgKHBhcnNlUmVzb2x2ZU9w
ZXJhdGlvbnMocHJlZGljdGlvbiwgaWRlbnRpZmllciwgb3BlcmF0aW9ucywgMCwgJmJhc2UsIDAp
KSB7CiAgICAgICAgICAgICAgICAgc2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQs
IGJhc2UpOwogICAgICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX3Jlc29sdmVfYmFzZSk7CiAg
ICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIE5vZGVJbmRleCByZXNvbHZlID0gYWRkVG9HcmFw
aChjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kID8gUmVzb2x2ZUJhc2VTdHJpY3RQdXQg
OiBSZXNvbHZlQmFzZSwgT3BJbmZvKG1fZ3JhcGgubV9yZXNvbHZlT3BlcmF0aW9uc0RhdGEuc2l6
ZSgpKSwgT3BJbmZvKHByZWRpY3Rpb24pKTsKKyAgICAgICAgICAgIE5vZGUqIHJlc29sdmUgPSBh
ZGRUb0dyYXBoKGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQgPyBSZXNvbHZlQmFzZVN0
cmljdFB1dCA6IFJlc29sdmVCYXNlLCBPcEluZm8obV9ncmFwaC5tX3Jlc29sdmVPcGVyYXRpb25z
RGF0YS5zaXplKCkpLCBPcEluZm8ocHJlZGljdGlvbikpOwogICAgICAgICAgICAgbV9ncmFwaC5t
X3Jlc29sdmVPcGVyYXRpb25zRGF0YS5hcHBlbmQoUmVzb2x2ZU9wZXJhdGlvbkRhdGEoKSk7CiAg
ICAgICAgICAgICBSZXNvbHZlT3BlcmF0aW9uRGF0YSYgZGF0YSA9IG1fZ3JhcGgubV9yZXNvbHZl
T3BlcmF0aW9uc0RhdGEubGFzdCgpOwogICAgICAgICAgICAgZGF0YS5pZGVudGlmaWVyTnVtYmVy
ID0gaWRlbnRpZmllcjsKQEAgLTMxMTUsOCArMzA3Nyw4IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6
OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAgIHVuc2lnbmVkIG9wZXJhdGlvbnMgPSBt
X2lubGluZVN0YWNrVG9wLT5tX3Jlc29sdmVPcGVyYXRpb25SZW1hcFtjdXJyZW50SW5zdHJ1Y3Rp
b25bNF0udS5vcGVyYW5kXTsKICAgICAgICAgICAgIHVuc2lnbmVkIHB1dFRvQmFzZU9wZXJhdGlv
biA9IG1faW5saW5lU3RhY2tUb3AtPm1fcHV0VG9CYXNlT3BlcmF0aW9uUmVtYXBbY3VycmVudElu
c3RydWN0aW9uWzVdLnUub3BlcmFuZF07CiAKLSAgICAgICAgICAgIE5vZGVJbmRleCBiYXNlID0g
MDsKLSAgICAgICAgICAgIE5vZGVJbmRleCB2YWx1ZSA9IDA7CisgICAgICAgICAgICBOb2RlKiBi
YXNlID0gMDsKKyAgICAgICAgICAgIE5vZGUqIHZhbHVlID0gMDsKICAgICAgICAgICAgIGlmIChw
YXJzZVJlc29sdmVPcGVyYXRpb25zKHByZWRpY3Rpb24sIGlkZW50aWZpZXIsIG9wZXJhdGlvbnMs
IHB1dFRvQmFzZU9wZXJhdGlvbiwgJmJhc2UsICZ2YWx1ZSkpCiAgICAgICAgICAgICAgICAgc2V0
UGFpcihiYXNlRHN0LCBiYXNlLCB2YWx1ZURzdCwgdmFsdWUpOwogICAgICAgICAgICAgZWxzZSB7
CkBAIC0zMTMzLDggKzMwOTUsOCBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVu
c2lnbmVkCiAgICAgICAgICAgICB1bnNpZ25lZCBpZGVudGlmaWVyID0gbV9pbmxpbmVTdGFja1Rv
cC0+bV9pZGVudGlmaWVyUmVtYXBbY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZF07CiAg
ICAgICAgICAgICB1bnNpZ25lZCBvcGVyYXRpb25zID0gbV9pbmxpbmVTdGFja1RvcC0+bV9yZXNv
bHZlT3BlcmF0aW9uUmVtYXBbY3VycmVudEluc3RydWN0aW9uWzRdLnUub3BlcmFuZF07CiAKLSAg
ICAgICAgICAgIE5vZGVJbmRleCBiYXNlID0gMDsKLSAgICAgICAgICAgIE5vZGVJbmRleCB2YWx1
ZSA9IDA7CisgICAgICAgICAgICBOb2RlKiBiYXNlID0gMDsKKyAgICAgICAgICAgIE5vZGUqIHZh
bHVlID0gMDsKICAgICAgICAgICAgIGlmIChwYXJzZVJlc29sdmVPcGVyYXRpb25zKHByZWRpY3Rp
b24sIGlkZW50aWZpZXIsIG9wZXJhdGlvbnMsIDAsICZiYXNlLCAmdmFsdWUpKQogICAgICAgICAg
ICAgICAgIHNldFBhaXIoYmFzZURzdCwgYmFzZSwgdmFsdWVEc3QsIHZhbHVlKTsKICAgICAgICAg
ICAgIGVsc2UgewpAQCAtMzE3NSw3ICszMTM3LDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFy
c2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgCiAgICAgICAgIGNhc2Ugb3BfY3JlYXRlX2Fy
Z3VtZW50czogewogICAgICAgICAgICAgbV9ncmFwaC5tX2hhc0FyZ3VtZW50cyA9IHRydWU7Ci0g
ICAgICAgICAgICBOb2RlSW5kZXggY3JlYXRlQXJndW1lbnRzID0gYWRkVG9HcmFwaChDcmVhdGVB
cmd1bWVudHMsIGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKSk7CisgICAgICAg
ICAgICBOb2RlKiBjcmVhdGVBcmd1bWVudHMgPSBhZGRUb0dyYXBoKENyZWF0ZUFyZ3VtZW50cywg
Z2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpKTsKICAgICAgICAgICAgIHNldChj
dXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCBjcmVhdGVBcmd1bWVudHMpOwogICAgICAg
ICAgICAgc2V0KHVubW9kaWZpZWRBcmd1bWVudHNSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25b
MV0udS5vcGVyYW5kKSwgY3JlYXRlQXJndW1lbnRzKTsKICAgICAgICAgICAgIE5FWFRfT1BDT0RF
KG9wX2NyZWF0ZV9hcmd1bWVudHMpOwpAQCAtMzI1NCwxMiArMzIxNiw5IEBAIHZvaWQgQnl0ZUNv
ZGVQYXJzZXI6OnByb2Nlc3NQaGlTdGFjaygpCiAgICAgICAgIGlmICghZW50cnkubV9ibG9jay0+
aXNSZWFjaGFibGUpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgCi0gICAgICAgIGlm
ICghZW50cnkubV9ibG9jay0+aXNSZWFjaGFibGUpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAg
ICAgICAgCiAgICAgICAgIFByZWRlY2Vzc29yTGlzdCYgcHJlZGVjZXNzb3JzID0gZW50cnkubV9i
bG9jay0+bV9wcmVkZWNlc3NvcnM7CiAgICAgICAgIHVuc2lnbmVkIHZhck5vID0gZW50cnkubV92
YXJObzsKLSAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiBkYXRhRm9yUGhpID0gbV9ncmFwaFtl
bnRyeS5tX3BoaV0udmFyaWFibGVBY2Nlc3NEYXRhKCk7CisgICAgICAgIFZhcmlhYmxlQWNjZXNz
RGF0YSogZGF0YUZvclBoaSA9IGVudHJ5Lm1fcGhpLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKIAog
I2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKICAgICAgICAgZGF0YUxv
Z0YoIiAgIEhhbmRsaW5nIHBoaSBlbnRyeSBmb3IgdmFyICV1LCBwaGkgQCV1LlxuIiwgZW50cnku
bV92YXJObywgZW50cnkubV9waGkpOwpAQCAtMzI3MiwxMCArMzIzMSwxMCBAQCB2b2lkIEJ5dGVD
b2RlUGFyc2VyOjpwcm9jZXNzUGhpU3RhY2soKQogICAgICAgICAgICAgCiAgICAgICAgICAgICBC
YXNpY0Jsb2NrKiBwcmVkZWNlc3NvckJsb2NrID0gbV9ncmFwaC5tX2Jsb2Nrc1twcmVkZWNlc3Nv
cnNbaV1dLmdldCgpOwogCi0gICAgICAgICAgICBOb2RlSW5kZXgmIHZhciA9IChzdGFja1R5cGUg
PT0gQXJndW1lbnRQaGlTdGFjaykgPyBwcmVkZWNlc3NvckJsb2NrLT52YXJpYWJsZXNBdFRhaWwu
YXJndW1lbnQodmFyTm8pIDogcHJlZGVjZXNzb3JCbG9jay0+dmFyaWFibGVzQXRUYWlsLmxvY2Fs
KHZhck5vKTsKKyAgICAgICAgICAgIE5vZGUqJiB2YXIgPSAoc3RhY2tUeXBlID09IEFyZ3VtZW50
UGhpU3RhY2spID8gcHJlZGVjZXNzb3JCbG9jay0+dmFyaWFibGVzQXRUYWlsLmFyZ3VtZW50KHZh
ck5vKSA6IHByZWRlY2Vzc29yQmxvY2stPnZhcmlhYmxlc0F0VGFpbC5sb2NhbCh2YXJObyk7CiAg
ICAgICAgICAgICAKLSAgICAgICAgICAgIE5vZGVJbmRleCB2YWx1ZUluUHJlZGVjZXNzb3IgPSB2
YXI7Ci0gICAgICAgICAgICBpZiAodmFsdWVJblByZWRlY2Vzc29yID09IE5vTm9kZSkgeworICAg
ICAgICAgICAgTm9kZSogdmFsdWVJblByZWRlY2Vzc29yID0gdmFyOworICAgICAgICAgICAgaWYg
KCF2YWx1ZUluUHJlZGVjZXNzb3IpIHsKICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9O
X1ZFUkJPU0UpCiAgICAgICAgICAgICAgICAgZGF0YUxvZ0YoIiAgICAgIERpZCBub3QgZmluZCBu
b2RlLCBhZGRpbmcgcGhpLlxuIik7CiAjZW5kaWYKQEAgLTMyODcsMzYgKzMyNDYsMzYgQEAgdm9p
ZCBCeXRlQ29kZVBhcnNlcjo6cHJvY2Vzc1BoaVN0YWNrKCkKICAgICAgICAgICAgICAgICBlbHNl
CiAgICAgICAgICAgICAgICAgICAgIHByZWRlY2Vzc29yQmxvY2stPnZhcmlhYmxlc0F0SGVhZC5z
ZXRMb2NhbEZpcnN0VGltZSh2YXJObywgdmFsdWVJblByZWRlY2Vzc29yKTsKICAgICAgICAgICAg
ICAgICBwaGlTdGFjay5hcHBlbmQoUGhpU3RhY2tFbnRyeShwcmVkZWNlc3NvckJsb2NrLCB2YWx1
ZUluUHJlZGVjZXNzb3IsIHZhck5vKSk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKG1fZ3JhcGhb
dmFsdWVJblByZWRlY2Vzc29yXS5vcCgpID09IEdldExvY2FsKSB7CisgICAgICAgICAgICB9IGVs
c2UgaWYgKHZhbHVlSW5QcmVkZWNlc3Nvci0+b3AoKSA9PSBHZXRMb2NhbCkgewogI2lmIERGR19F
TkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKLSAgICAgICAgICAgICAgICBkYXRhTG9n
RigiICAgICAgRm91bmQgR2V0TG9jYWwgQCV1LlxuIiwgdmFsdWVJblByZWRlY2Vzc29yKTsKKyAg
ICAgICAgICAgICAgICBkYXRhTG9nRigiICAgICAgRm91bmQgR2V0TG9jYWwgQCV1LlxuIiwgdmFs
dWVJblByZWRlY2Vzc29yLT5pbmRleCgpKTsKICNlbmRpZgogCiAgICAgICAgICAgICAgICAgLy8g
V2Ugd2FudCB0byBlbnN1cmUgdGhhdCB0aGUgVmFyaWFibGVBY2Nlc3NEYXRhcyBhcmUgaWRlbnRp
Y2FsIGJldHdlZW4gdGhlCiAgICAgICAgICAgICAgICAgLy8gR2V0TG9jYWwgYW5kIGl0cyBibG9j
ay1sb2NhbCBQaGkuIFN0cmljdGx5IHNwZWFraW5nIHdlIG9ubHkgbmVlZCB0aGUgdHdvCiAgICAg
ICAgICAgICAgICAgLy8gdG8gYmUgdW5pZmllZC4gQnV0IGZvciBlZmZpY2llbmN5LCB3ZSB3YW50
IHRoZSBjb2RlIHRoYXQgY3JlYXRlcyBHZXRMb2NhbHMKICAgICAgICAgICAgICAgICAvLyBhbmQg
UGhpcyB0byB0cnkgdG8gcmV1c2UgVmFyaWFibGVBY2Nlc3NEYXRhcyBhcyBtdWNoIGFzIHBvc3Np
YmxlLgotICAgICAgICAgICAgICAgIEFTU0VSVChtX2dyYXBoW3ZhbHVlSW5QcmVkZWNlc3Nvcl0u
dmFyaWFibGVBY2Nlc3NEYXRhKCkgPT0gbV9ncmFwaFttX2dyYXBoW3ZhbHVlSW5QcmVkZWNlc3Nv
cl0uY2hpbGQxKCkuaW5kZXgoKV0udmFyaWFibGVBY2Nlc3NEYXRhKCkpOworICAgICAgICAgICAg
ICAgIEFTU0VSVCh2YWx1ZUluUHJlZGVjZXNzb3ItPnZhcmlhYmxlQWNjZXNzRGF0YSgpID09IHZh
bHVlSW5QcmVkZWNlc3Nvci0+Y2hpbGQxKCktPnZhcmlhYmxlQWNjZXNzRGF0YSgpKTsKICAgICAg
ICAgICAgICAgICAKLSAgICAgICAgICAgICAgICB2YWx1ZUluUHJlZGVjZXNzb3IgPSBtX2dyYXBo
W3ZhbHVlSW5QcmVkZWNlc3Nvcl0uY2hpbGQxKCkuaW5kZXgoKTsKKyAgICAgICAgICAgICAgICB2
YWx1ZUluUHJlZGVjZXNzb3IgPSB2YWx1ZUluUHJlZGVjZXNzb3ItPmNoaWxkMSgpLm5vZGUoKTsK
ICAgICAgICAgICAgIH0gZWxzZSB7CiAjaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9W
RVJCT1NFKQotICAgICAgICAgICAgICAgIGRhdGFMb2dGKCIgICAgICBGb3VuZCBAJXUuXG4iLCB2
YWx1ZUluUHJlZGVjZXNzb3IpOworICAgICAgICAgICAgICAgIGRhdGFMb2dGKCIgICAgICBGb3Vu
ZCBAJXUuXG4iLCB2YWx1ZUluUHJlZGVjZXNzb3ItPmluZGV4KCkpOwogI2VuZGlmCiAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICBBU1NFUlQobV9ncmFwaFt2YWx1ZUluUHJlZGVjZXNzb3JdLm9w
KCkgPT0gU2V0TG9jYWwKLSAgICAgICAgICAgICAgICAgICB8fCBtX2dyYXBoW3ZhbHVlSW5QcmVk
ZWNlc3Nvcl0ub3AoKSA9PSBQaGkKLSAgICAgICAgICAgICAgICAgICB8fCBtX2dyYXBoW3ZhbHVl
SW5QcmVkZWNlc3Nvcl0ub3AoKSA9PSBGbHVzaAotICAgICAgICAgICAgICAgICAgIHx8IChtX2dy
YXBoW3ZhbHVlSW5QcmVkZWNlc3Nvcl0ub3AoKSA9PSBTZXRBcmd1bWVudAotICAgICAgICAgICAg
ICAgICAgICAgICAmJiBzdGFja1R5cGUgPT0gQXJndW1lbnRQaGlTdGFjaykpOworICAgICAgICAg
ICAgQVNTRVJUKAorICAgICAgICAgICAgICAgIHZhbHVlSW5QcmVkZWNlc3Nvci0+b3AoKSA9PSBT
ZXRMb2NhbAorICAgICAgICAgICAgICAgIHx8IHZhbHVlSW5QcmVkZWNlc3Nvci0+b3AoKSA9PSBQ
aGkKKyAgICAgICAgICAgICAgICB8fCB2YWx1ZUluUHJlZGVjZXNzb3ItPm9wKCkgPT0gRmx1c2gK
KyAgICAgICAgICAgICAgICB8fCAodmFsdWVJblByZWRlY2Vzc29yLT5vcCgpID09IFNldEFyZ3Vt
ZW50ICYmIHN0YWNrVHlwZSA9PSBBcmd1bWVudFBoaVN0YWNrKSk7CiAgICAgICAgICAgICAKLSAg
ICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogZGF0YUZvclByZWRlY2Vzc29yID0gbV9ncmFw
aFt2YWx1ZUluUHJlZGVjZXNzb3JdLnZhcmlhYmxlQWNjZXNzRGF0YSgpOworICAgICAgICAgICAg
VmFyaWFibGVBY2Nlc3NEYXRhKiBkYXRhRm9yUHJlZGVjZXNzb3IgPSB2YWx1ZUluUHJlZGVjZXNz
b3ItPnZhcmlhYmxlQWNjZXNzRGF0YSgpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBkYXRh
Rm9yUHJlZGVjZXNzb3ItPnVuaWZ5KGRhdGFGb3JQaGkpOwogCi0gICAgICAgICAgICBOb2RlKiBw
aGlOb2RlID0gJm1fZ3JhcGhbZW50cnkubV9waGldOworICAgICAgICAgICAgTm9kZSogcGhpTm9k
ZSA9IGVudHJ5Lm1fcGhpOwogI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9T
RSkKLSAgICAgICAgICAgIGRhdGFMb2dGKCIgICAgICBSZWYgY291bnQgb2YgQCV1ID0gJXUuXG4i
LCBlbnRyeS5tX3BoaSwgcGhpTm9kZS0+cmVmQ291bnQoKSk7CisgICAgICAgICAgICBkYXRhTG9n
RigiICAgICAgUmVmIGNvdW50IG9mIEAldSA9ICV1LlxuIiwgcGhpTm9kZS0+aW5kZXgoKSwgcGhp
Tm9kZS0+cmVmQ291bnQoKSk7CiAjZW5kaWYKICAgICAgICAgICAgIGlmIChwaGlOb2RlLT5yZWZD
b3VudCgpKSB7CiAjaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQpAQCAt
MzMyNywxMSArMzI4NiwxMSBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwcm9jZXNzUGhpU3RhY2so
KQogCiAgICAgICAgICAgICBpZiAoIXBoaU5vZGUtPmNoaWxkMSgpKSB7CiAjaWYgREZHX0VOQUJM
RShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQotICAgICAgICAgICAgICAgIGRhdGFMb2dGKCIg
ICAgICBTZXR0aW5nIEAldS0+Y2hpbGQxID0gQCV1LlxuIiwgZW50cnkubV9waGksIHZhbHVlSW5Q
cmVkZWNlc3Nvcik7CisgICAgICAgICAgICAgICAgZGF0YUxvZ0YoIiAgICAgIFNldHRpbmcgQCV1
LT5jaGlsZDEgPSBAJXUuXG4iLCBwaGlOb2RlLT5pbmRleCgpLCB2YWx1ZUluUHJlZGVjZXNzb3Ip
OwogI2VuZGlmCiAgICAgICAgICAgICAgICAgcGhpTm9kZS0+Y2hpbGRyZW4uc2V0Q2hpbGQxKEVk
Z2UodmFsdWVJblByZWRlY2Vzc29yKSk7CiAjaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElP
Tl9WRVJCT1NFKQotICAgICAgICAgICAgICAgIGRhdGFMb2dGKCIgICAgICBDaGlsZHJlbiBvZiBA
JXU6ICIsIGVudHJ5Lm1fcGhpKTsKKyAgICAgICAgICAgICAgICBkYXRhTG9nRigiICAgICAgQ2hp
bGRyZW4gb2YgQCV1OiAiLCBwaGlOb2RlLT5pbmRleCgpKTsKICAgICAgICAgICAgICAgICBwaGlO
b2RlLT5kdW1wQ2hpbGRyZW4oV1RGOjpkYXRhRmlsZSgpKTsKICAgICAgICAgICAgICAgICBkYXRh
TG9nRigiLlxuIik7CiAjZW5kaWYKQEAgLTMzMzksMTEgKzMyOTgsMTEgQEAgdm9pZCBCeXRlQ29k
ZVBhcnNlcjo6cHJvY2Vzc1BoaVN0YWNrKCkKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlm
ICghcGhpTm9kZS0+Y2hpbGQyKCkpIHsKICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9O
X1ZFUkJPU0UpCi0gICAgICAgICAgICAgICAgZGF0YUxvZ0YoIiAgICAgIFNldHRpbmcgQCV1LT5j
aGlsZDIgPSBAJXUuXG4iLCBlbnRyeS5tX3BoaSwgdmFsdWVJblByZWRlY2Vzc29yKTsKKyAgICAg
ICAgICAgICAgICBkYXRhTG9nRigiICAgICAgU2V0dGluZyBAJXUtPmNoaWxkMiA9IEAldS5cbiIs
IHBoaU5vZGUtPmluZGV4KCksIHZhbHVlSW5QcmVkZWNlc3Nvcik7CiAjZW5kaWYKICAgICAgICAg
ICAgICAgICBwaGlOb2RlLT5jaGlsZHJlbi5zZXRDaGlsZDIoRWRnZSh2YWx1ZUluUHJlZGVjZXNz
b3IpKTsKICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCi0gICAgICAg
ICAgICAgICAgZGF0YUxvZ0YoIiAgICAgIENoaWxkcmVuIG9mIEAldTogIiwgZW50cnkubV9waGkp
OworICAgICAgICAgICAgICAgIGRhdGFMb2dGKCIgICAgICBDaGlsZHJlbiBvZiBAJXU6ICIsIHBo
aU5vZGUtPmluZGV4KCkpOwogICAgICAgICAgICAgICAgIHBoaU5vZGUtPmR1bXBDaGlsZHJlbihX
VEY6OmRhdGFGaWxlKCkpOwogICAgICAgICAgICAgICAgIGRhdGFMb2dGKCIuXG4iKTsKICNlbmRp
ZgpAQCAtMzM1MSw0MCArMzMxMCwzOCBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwcm9jZXNzUGhp
U3RhY2soKQogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKCFwaGlOb2RlLT5jaGlsZDMo
KSkgewogI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKLSAgICAgICAg
ICAgICAgICBkYXRhTG9nRigiICAgICAgU2V0dGluZyBAJXUtPmNoaWxkMyA9IEAldS5cbiIsIGVu
dHJ5Lm1fcGhpLCB2YWx1ZUluUHJlZGVjZXNzb3IpOworICAgICAgICAgICAgICAgIGRhdGFMb2dG
KCIgICAgICBTZXR0aW5nIEAldS0+Y2hpbGQzID0gQCV1LlxuIiwgcGhpTm9kZS0+aW5kZXgoKSwg
dmFsdWVJblByZWRlY2Vzc29yKTsKICNlbmRpZgogICAgICAgICAgICAgICAgIHBoaU5vZGUtPmNo
aWxkcmVuLnNldENoaWxkMyhFZGdlKHZhbHVlSW5QcmVkZWNlc3NvcikpOwogI2lmIERGR19FTkFC
TEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKLSAgICAgICAgICAgICAgICBkYXRhTG9nRigi
ICAgICAgQ2hpbGRyZW4gb2YgQCV1OiAiLCBlbnRyeS5tX3BoaSk7CisgICAgICAgICAgICAgICAg
ZGF0YUxvZ0YoIiAgICAgIENoaWxkcmVuIG9mIEAldTogIiwgcGhpTm9kZS0+aW5kZXgoKSk7CiAg
ICAgICAgICAgICAgICAgcGhpTm9kZS0+ZHVtcENoaWxkcmVuKFdURjo6ZGF0YUZpbGUoKSk7CiAg
ICAgICAgICAgICAgICAgZGF0YUxvZ0YoIi5cbiIpOwogI2VuZGlmCiAgICAgICAgICAgICAgICAg
Y29udGludWU7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIE5vZGVJ
bmRleCBuZXdQaGkgPSBpbnNlcnRQaGlOb2RlKE9wSW5mbyhkYXRhRm9yUGhpKSwgZW50cnkubV9i
bG9jayk7CisgICAgICAgICAgICBOb2RlKiBuZXdQaGkgPSBpbnNlcnRQaGlOb2RlKE9wSW5mbyhk
YXRhRm9yUGhpKSwgZW50cnkubV9ibG9jayk7CiAgICAgICAgICAgICAKICNpZiBERkdfRU5BQkxF
KERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCi0gICAgICAgICAgICBkYXRhTG9nRigiICAgICAg
U3BsaXR0aW5nIEAldSwgY3JlYXRlZCBAJXUuXG4iLCBlbnRyeS5tX3BoaSwgbmV3UGhpKTsKKyAg
ICAgICAgICAgIGRhdGFMb2dGKCIgICAgICBTcGxpdHRpbmcgQCV1LCBjcmVhdGVkIEAldS5cbiIs
IHBoaU5vZGUtPmluZGV4KCksIG5ld1BoaS0+aW5kZXgoKSk7CiAjZW5kaWYKIAotICAgICAgICAg
ICAgcGhpTm9kZSA9ICZtX2dyYXBoW2VudHJ5Lm1fcGhpXTsgLy8gcmVsb2FkIGFmdGVyIHZlY3Rv
ciByZXNpemUKLSAgICAgICAgICAgIE5vZGUmIG5ld1BoaU5vZGUgPSBtX2dyYXBoW25ld1BoaV07
CiAgICAgICAgICAgICBpZiAocGhpTm9kZS0+cmVmQ291bnQoKSkKICAgICAgICAgICAgICAgICBt
X2dyYXBoLnJlZihuZXdQaGkpOwogCi0gICAgICAgICAgICBuZXdQaGlOb2RlLmNoaWxkcmVuID0g
cGhpTm9kZS0+Y2hpbGRyZW47CisgICAgICAgICAgICBuZXdQaGktPmNoaWxkcmVuID0gcGhpTm9k
ZS0+Y2hpbGRyZW47CiAKICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0Up
Ci0gICAgICAgICAgICBkYXRhTG9nRigiICAgICAgQ2hpbGRyZW4gb2YgQCV1OiAiLCBuZXdQaGkp
OwotICAgICAgICAgICAgbmV3UGhpTm9kZS5kdW1wQ2hpbGRyZW4oV1RGOjpkYXRhRmlsZSgpKTsK
KyAgICAgICAgICAgIGRhdGFMb2dGKCIgICAgICBDaGlsZHJlbiBvZiBAJXU6ICIsIG5ld1BoaS0+
aW5kZXgoKSk7CisgICAgICAgICAgICBuZXdQaGktPmR1bXBDaGlsZHJlbihXVEY6OmRhdGFGaWxl
KCkpOwogICAgICAgICAgICAgZGF0YUxvZ0YoIi5cbiIpOwogI2VuZGlmCiAKLSAgICAgICAgICAg
IHBoaU5vZGUtPmNoaWxkcmVuLmluaXRpYWxpemUobmV3UGhpLCB2YWx1ZUluUHJlZGVjZXNzb3Is
IE5vTm9kZSk7CisgICAgICAgICAgICBwaGlOb2RlLT5jaGlsZHJlbi5pbml0aWFsaXplKG5ld1Bo
aSwgdmFsdWVJblByZWRlY2Vzc29yLCAwKTsKIAogI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFH
QVRJT05fVkVSQk9TRSkKLSAgICAgICAgICAgIGRhdGFMb2dGKCIgICAgICBDaGlsZHJlbiBvZiBA
JXU6ICIsIGVudHJ5Lm1fcGhpKTsKKyAgICAgICAgICAgIGRhdGFMb2dGKCIgICAgICBDaGlsZHJl
biBvZiBAJXU6ICIsIHBoaU5vZGUtPmluZGV4KCkpOwogICAgICAgICAgICAgcGhpTm9kZS0+ZHVt
cENoaWxkcmVuKFdURjo6ZGF0YUZpbGUoKSk7CiAgICAgICAgICAgICBkYXRhTG9nRigiLlxuIik7
CiAjZW5kaWYKQEAgLTM0MDYsMjIgKzMzNjMsMjIgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6bGlu
a0Jsb2NrKEJhc2ljQmxvYwogewogICAgIEFTU0VSVCghYmxvY2stPmlzTGlua2VkKTsKICAgICBB
U1NFUlQoIWJsb2NrLT5pc0VtcHR5KCkpOwotICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW2Jsb2Nr
LT5sYXN0KCldOwotICAgIEFTU0VSVChub2RlLmlzVGVybWluYWwoKSk7CisgICAgTm9kZSogbm9k
ZSA9IGJsb2NrLT5sYXN0KCk7CisgICAgQVNTRVJUKG5vZGUtPmlzVGVybWluYWwoKSk7CiAgICAg
Ci0gICAgc3dpdGNoIChub2RlLm9wKCkpIHsKKyAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKICAg
ICBjYXNlIEp1bXA6Ci0gICAgICAgIG5vZGUuc2V0VGFrZW5CbG9ja0luZGV4KG1fZ3JhcGguYmxv
Y2tJbmRleEZvckJ5dGVjb2RlT2Zmc2V0KHBvc3NpYmxlVGFyZ2V0cywgbm9kZS50YWtlbkJ5dGVj
b2RlT2Zmc2V0RHVyaW5nUGFyc2luZygpKSk7CisgICAgICAgIG5vZGUtPnNldFRha2VuQmxvY2tJ
bmRleChtX2dyYXBoLmJsb2NrSW5kZXhGb3JCeXRlY29kZU9mZnNldChwb3NzaWJsZVRhcmdldHMs
IG5vZGUtPnRha2VuQnl0ZWNvZGVPZmZzZXREdXJpbmdQYXJzaW5nKCkpKTsKICNpZiBERkdfRU5B
QkxFKERFQlVHX1ZFUkJPU0UpCi0gICAgICAgIGRhdGFMb2dGKCJMaW5rZWQgYmFzaWMgYmxvY2sg
JXAgdG8gJXAsICMldS5cbiIsIGJsb2NrLCBtX2dyYXBoLm1fYmxvY2tzW25vZGUudGFrZW5CbG9j
a0luZGV4KCldLmdldCgpLCBub2RlLnRha2VuQmxvY2tJbmRleCgpKTsKKyAgICAgICAgZGF0YUxv
Z0YoIkxpbmtlZCBiYXNpYyBibG9jayAlcCB0byAlcCwgIyV1LlxuIiwgYmxvY2ssIG1fZ3JhcGgu
bV9ibG9ja3Nbbm9kZS0+dGFrZW5CbG9ja0luZGV4KCldLmdldCgpLCBub2RlLT50YWtlbkJsb2Nr
SW5kZXgoKSk7CiAjZW5kaWYKICAgICAgICAgYnJlYWs7CiAgICAgICAgIAogICAgIGNhc2UgQnJh
bmNoOgotICAgICAgICBub2RlLnNldFRha2VuQmxvY2tJbmRleChtX2dyYXBoLmJsb2NrSW5kZXhG
b3JCeXRlY29kZU9mZnNldChwb3NzaWJsZVRhcmdldHMsIG5vZGUudGFrZW5CeXRlY29kZU9mZnNl
dER1cmluZ1BhcnNpbmcoKSkpOwotICAgICAgICBub2RlLnNldE5vdFRha2VuQmxvY2tJbmRleCht
X2dyYXBoLmJsb2NrSW5kZXhGb3JCeXRlY29kZU9mZnNldChwb3NzaWJsZVRhcmdldHMsIG5vZGUu
bm90VGFrZW5CeXRlY29kZU9mZnNldER1cmluZ1BhcnNpbmcoKSkpOworICAgICAgICBub2RlLT5z
ZXRUYWtlbkJsb2NrSW5kZXgobV9ncmFwaC5ibG9ja0luZGV4Rm9yQnl0ZWNvZGVPZmZzZXQocG9z
c2libGVUYXJnZXRzLCBub2RlLT50YWtlbkJ5dGVjb2RlT2Zmc2V0RHVyaW5nUGFyc2luZygpKSk7
CisgICAgICAgIG5vZGUtPnNldE5vdFRha2VuQmxvY2tJbmRleChtX2dyYXBoLmJsb2NrSW5kZXhG
b3JCeXRlY29kZU9mZnNldChwb3NzaWJsZVRhcmdldHMsIG5vZGUtPm5vdFRha2VuQnl0ZWNvZGVP
ZmZzZXREdXJpbmdQYXJzaW5nKCkpKTsKICNpZiBERkdfRU5BQkxFKERFQlVHX1ZFUkJPU0UpCi0g
ICAgICAgIGRhdGFMb2dGKCJMaW5rZWQgYmFzaWMgYmxvY2sgJXAgdG8gJXAsICMldSBhbmQgJXAs
ICMldS5cbiIsIGJsb2NrLCBtX2dyYXBoLm1fYmxvY2tzW25vZGUudGFrZW5CbG9ja0luZGV4KCld
LmdldCgpLCBub2RlLnRha2VuQmxvY2tJbmRleCgpLCBtX2dyYXBoLm1fYmxvY2tzW25vZGUubm90
VGFrZW5CbG9ja0luZGV4KCldLmdldCgpLCBub2RlLm5vdFRha2VuQmxvY2tJbmRleCgpKTsKKyAg
ICAgICAgZGF0YUxvZ0YoIkxpbmtlZCBiYXNpYyBibG9jayAlcCB0byAlcCwgIyV1IGFuZCAlcCwg
IyV1LlxuIiwgYmxvY2ssIG1fZ3JhcGgubV9ibG9ja3Nbbm9kZS0+dGFrZW5CbG9ja0luZGV4KCld
LmdldCgpLCBub2RlLT50YWtlbkJsb2NrSW5kZXgoKSwgbV9ncmFwaC5tX2Jsb2Nrc1tub2RlLT5u
b3RUYWtlbkJsb2NrSW5kZXgoKV0uZ2V0KCksIG5vZGUtPm5vdFRha2VuQmxvY2tJbmRleCgpKTsK
ICNlbmRpZgogICAgICAgICBicmVhazsKICAgICAgICAgCkBAIC0zNzI5LDcgKzM2ODYsNyBAQCB2
b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUNvZGVCbG9jaygpCiAgICAgICAgICAgICAvLyBhcmUg
YXQgdGhlIGVuZCBvZiBhbiBpbmxpbmUgZnVuY3Rpb24sIG9yIHdlIHJlYWxpemVkIHRoYXQgd2UK
ICAgICAgICAgICAgIC8vIHNob3VsZCBzdG9wIHBhcnNpbmcgYmVjYXVzZSB0aGVyZSB3YXMgYSBy
ZXR1cm4gaW4gdGhlIGZpcnN0CiAgICAgICAgICAgICAvLyBiYXNpYyBibG9jay4KLSAgICAgICAg
ICAgIEFTU0VSVChtX2N1cnJlbnRCbG9jay0+aXNFbXB0eSgpIHx8IG1fZ3JhcGgubGFzdCgpLmlz
VGVybWluYWwoKSB8fCAobV9jdXJyZW50SW5kZXggPT0gY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMo
KS5zaXplKCkgJiYgbV9pbmxpbmVTdGFja1RvcC0+bV9pbmxpbmVDYWxsRnJhbWUpIHx8ICFzaG91
bGRDb250aW51ZVBhcnNpbmcpOworICAgICAgICAgICAgQVNTRVJUKG1fY3VycmVudEJsb2NrLT5p
c0VtcHR5KCkgfHwgbV9jdXJyZW50QmxvY2stPmxhc3QoKS0+aXNUZXJtaW5hbCgpIHx8IChtX2N1
cnJlbnRJbmRleCA9PSBjb2RlQmxvY2stPmluc3RydWN0aW9ucygpLnNpemUoKSAmJiBtX2lubGlu
ZVN0YWNrVG9wLT5tX2lubGluZUNhbGxGcmFtZSkgfHwgIXNob3VsZENvbnRpbnVlUGFyc2luZyk7
CiAKICAgICAgICAgICAgIGlmICghc2hvdWxkQ29udGludWVQYXJzaW5nKQogICAgICAgICAgICAg
ICAgIHJldHVybjsKQEAgLTM3OTAsMTMgKzM3NDcsMTIgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6
cGFyc2UoKQogICAgICAgICBpZiAoYmxvY2stPmJ5dGVjb2RlQmVnaW4gIT0gbV9ncmFwaC5tX29z
ckVudHJ5Qnl0ZWNvZGVJbmRleCkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IG1fZ3JhcGgubV9tdXN0SGFuZGxlVmFsdWVzLnNpemUoKTsgKytp
KSB7Ci0gICAgICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4ID0gYmxvY2stPnZhcmlhYmxlc0F0
SGVhZC5vcGVyYW5kKAorICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT52YXJpYWJsZXNB
dEhlYWQub3BlcmFuZCgKICAgICAgICAgICAgICAgICBtX2dyYXBoLm1fbXVzdEhhbmRsZVZhbHVl
cy5vcGVyYW5kRm9ySW5kZXgoaSkpOwotICAgICAgICAgICAgaWYgKG5vZGVJbmRleCA9PSBOb05v
ZGUpCisgICAgICAgICAgICBpZiAoIW5vZGUpCiAgICAgICAgICAgICAgICAgY29udGludWU7Ci0g
ICAgICAgICAgICBOb2RlJiBub2RlID0gbV9ncmFwaFtub2RlSW5kZXhdOwotICAgICAgICAgICAg
QVNTRVJUKG5vZGUuaGFzTG9jYWwoKSk7Ci0gICAgICAgICAgICBub2RlLnZhcmlhYmxlQWNjZXNz
RGF0YSgpLT5wcmVkaWN0KAorICAgICAgICAgICAgQVNTRVJUKG5vZGUtPmhhc0xvY2FsKCkpOwor
ICAgICAgICAgICAgbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCktPnByZWRpY3QoCiAgICAgICAg
ICAgICAgICAgc3BlY3VsYXRpb25Gcm9tVmFsdWUobV9ncmFwaC5tX211c3RIYW5kbGVWYWx1ZXNb
aV0pKTsKICAgICAgICAgfQogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQ0ZBUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQ0ZBUGhhc2UuY3BwCShyZXZpc2lvbiAxNDEwNTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0NGQVBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtODgsMTEgKzg4LDExIEBAIHBy
aXZhdGU6CiAgICAgICAgIGRhdGFMb2dGKCJcbiIpOwogI2VuZGlmCiAgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBibG9jay0+c2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIE5vZGVJ
bmRleCBub2RlSW5kZXggPSBibG9jay0+YXQoaSk7Ci0gICAgICAgICAgICBpZiAoIW1fZ3JhcGhb
bm9kZUluZGV4XS5zaG91bGRHZW5lcmF0ZSgpKQorICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJs
b2NrLT5hdChpKTsKKyAgICAgICAgICAgIGlmICghbm9kZS0+c2hvdWxkR2VuZXJhdGUoKSkKICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9O
X1ZFUkJPU0UpCi0gICAgICAgICAgICBkYXRhTG9nRigiICAgICAgJXMgQCV1OiAiLCBHcmFwaDo6
b3BOYW1lKG1fZ3JhcGhbbm9kZUluZGV4XS5vcCgpKSwgbm9kZUluZGV4KTsKKyAgICAgICAgICAg
IGRhdGFMb2dGKCIgICAgICAlcyBAJXU6ICIsIEdyYXBoOjpvcE5hbWUobV9ncmFwaFtub2RlSW5k
ZXhdLm9wKCkpLCBub2RlLT5pbmRleCgpKTsKICAgICAgICAgICAgIG1fc3RhdGUuZHVtcChXVEY6
OmRhdGFGaWxlKCkpOwogICAgICAgICAgICAgZGF0YUxvZ0YoIlxuIik7CiAjZW5kaWYKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ0ZHU2ltcGxpZmljYXRpb25QaGFzZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDRkdTaW1wbGlmaWNh
dGlvblBoYXNlLmNwcAkocmV2aXNpb24gMTQxMDUyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdDRkdTaW1wbGlmaWNhdGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjAsNyAr
NjAsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAg
ICAgICAgIEFTU0VSVChibG9jay0+aXNSZWFjaGFibGUpOwogICAgICAgICAgICAgCi0gICAgICAg
ICAgICAgICAgc3dpdGNoIChtX2dyYXBoW2Jsb2NrLT5sYXN0KCldLm9wKCkpIHsKKyAgICAgICAg
ICAgICAgICBzd2l0Y2ggKGJsb2NrLT5sYXN0KCktPm9wKCkpIHsKICAgICAgICAgICAgICAgICBj
YXNlIEp1bXA6IHsKICAgICAgICAgICAgICAgICAgICAgLy8gU3VjY2Vzc29yIHdpdGggb25lIHBy
ZWRlY2Vzc29yIC0+IG1lcmdlLgogICAgICAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC5tX2Js
b2Nrc1ttX2dyYXBoLnN1Y2Nlc3NvcihibG9jaywgMCldLT5tX3ByZWRlY2Vzc29ycy5zaXplKCkg
PT0gMSkgewpAQCAtMTI5LDEwICsxMjksMTAgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEJsb2NrSW5kZXggdGFrZW5CbG9ja0luZGV4ID0gbV9ncmFwaC5zdWNjZXNzb3JG
b3JDb25kaXRpb24oYmxvY2ssIGNvbmRpdGlvbik7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgQmxvY2tJbmRleCBub3RUYWtlbkJsb2NrSW5kZXggPSBtX2dyYXBoLnN1Y2Nlc3NvckZvckNv
bmRpdGlvbihibG9jaywgIWNvbmRpdGlvbik7CiAgICAgICAgICAgICAgICAgICAgICAgICAKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQobV9ncmFwaFtibG9jay0+bGFzdCgpXS5p
c1Rlcm1pbmFsKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvZGVPcmlnaW4gYm91
bmRhcnlDb2RlT3JpZ2luID0gbV9ncmFwaFtibG9jay0+bGFzdCgpXS5jb2RlT3JpZ2luOwotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGhbYmxvY2stPmxhc3QoKV0uc2V0T3BBbmRE
ZWZhdWx0RmxhZ3MoUGhhbnRvbSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJU
KG1fZ3JhcGhbYmxvY2stPmxhc3QoKV0ucmVmQ291bnQoKSA9PSAxKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBBU1NFUlQoYmxvY2stPmxhc3QoKS0+aXNUZXJtaW5hbCgpKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBDb2RlT3JpZ2luIGJvdW5kYXJ5Q29kZU9yaWdpbiA9IGJs
b2NrLT5sYXN0KCktPmNvZGVPcmlnaW47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxv
Y2stPmxhc3QoKS0+c2V0T3BBbmREZWZhdWx0RmxhZ3MoUGhhbnRvbSk7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgQVNTRVJUKGJsb2NrLT5sYXN0KCktPnJlZkNvdW50KCkgPT0gMSk7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqZXR0
aXNvbkJsb2NrKGJsb2NrSW5kZXgsIG5vdFRha2VuQmxvY2tJbmRleCwgYm91bmRhcnlDb2RlT3Jp
Z2luKTsKICAgICAgICAgICAgICAgICAgICAgICAgIApAQCAtMTYwLDE2ICsxNjAsMTUgQEAgcHVi
bGljOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2dGKCJDRkdTaW1wbGlmeTog
QnJhbmNoLT5qdW1wIGNvbnZlcnNpb24gdG8gc2FtZSBzdWNjZXNzb3Igb24gQmxvY2sgIyV1IHRv
IEJsb2NrICMldS5cbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBibG9j
a0luZGV4LCB0YXJnZXRCbG9ja0luZGV4KTsKICNlbmRpZgotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEFTU0VSVChtX2dyYXBoW2Jsb2NrLT5sYXN0KCldLmlzVGVybWluYWwoKSk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgTm9kZSYgYnJhbmNoID0gbV9ncmFwaFtibG9jay0+bGFz
dCgpXTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQoYnJhbmNoLmlzVGVybWlu
YWwoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGJyYW5jaC5vcCgpID09
IEJyYW5jaCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJhbmNoLnNldE9wQW5kRGVm
YXVsdEZsYWdzKFBoYW50b20pOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChi
cmFuY2gucmVmQ291bnQoKSA9PSAxKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb2Rl
KiBicmFuY2ggPSBibG9jay0+bGFzdCgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFT
U0VSVChicmFuY2gtPmlzVGVybWluYWwoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
QVNTRVJUKGJyYW5jaC0+b3AoKSA9PSBCcmFuY2gpOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGJyYW5jaC0+c2V0T3BBbmREZWZhdWx0RmxhZ3MoUGhhbnRvbSk7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgQVNTRVJUKGJyYW5jaC0+cmVmQ291bnQoKSA9PSAxKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBibG9jay0+
YXBwZW5kTm9kZSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaCwgRG9u
dFJlZkNoaWxkcmVuLCBEb250UmVmTm9kZSwgU3BlY05vbmUsIEp1bXAsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGJyYW5jaC5jb2RlT3JpZ2luLCBPcEluZm8odGFyZ2V0QmxvY2tJ
bmRleCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmFuY2gtPmNvZGVPcmln
aW4sIE9wSW5mbyh0YXJnZXRCbG9ja0luZGV4KSk7CiAgICAgICAgICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgICAgICAgICBpbm5lckNoYW5nZWQgPSBvdXRlckNoYW5nZWQgPSB0
cnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0yMzYsNyArMjM1LDggQEAg
cHVibGljOgogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAot
ICAgICAgICAgICAgdmFsaWRhdGUobV9ncmFwaCk7CisgICAgICAgICAgICBpZiAoT3B0aW9uczo6
dmFsaWRhdGVHcmFwaEF0RWFjaFBoYXNlKCkpCisgICAgICAgICAgICAgICAgdmFsaWRhdGUobV9n
cmFwaCk7CiAgICAgICAgIH0gd2hpbGUgKGlubmVyQ2hhbmdlZCk7CiAgICAgICAgIAogICAgICAg
ICByZXR1cm4gb3V0ZXJDaGFuZ2VkOwpAQCAtMjYwLDQ1ICsyNjAsNDMgQEAgcHJpdmF0ZToKICAg
ICAKICAgICB2b2lkIGtlZXBPcGVyYW5kQWxpdmUoQmFzaWNCbG9jayogYmxvY2ssIENvZGVPcmln
aW4gY29kZU9yaWdpbiwgaW50IG9wZXJhbmQpCiAgICAgewotICAgICAgICBOb2RlSW5kZXggbm9k
ZUluZGV4ID0gYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKG9wZXJhbmQpOwotICAgICAg
ICBpZiAobm9kZUluZGV4ID09IE5vTm9kZSkKKyAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT52
YXJpYWJsZXNBdFRhaWwub3BlcmFuZChvcGVyYW5kKTsKKyAgICAgICAgaWYgKCFub2RlKQogICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICBpZiAobV9ncmFwaFtub2RlSW5kZXhdLnZhcmlhYmxl
QWNjZXNzRGF0YSgpLT5pc0NhcHR1cmVkKCkpCisgICAgICAgIGlmIChub2RlLT52YXJpYWJsZUFj
Y2Vzc0RhdGEoKS0+aXNDYXB0dXJlZCgpKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBp
ZiAobV9ncmFwaFtub2RlSW5kZXhdLm9wKCkgPT0gU2V0TG9jYWwpCi0gICAgICAgICAgICBub2Rl
SW5kZXggPSBtX2dyYXBoW25vZGVJbmRleF0uY2hpbGQxKCkuaW5kZXgoKTsKLSAgICAgICAgTm9k
ZSYgbm9kZSA9IG1fZ3JhcGhbbm9kZUluZGV4XTsKLSAgICAgICAgaWYgKCFub2RlLnNob3VsZEdl
bmVyYXRlKCkpCisgICAgICAgIGlmIChub2RlLT5vcCgpID09IFNldExvY2FsKQorICAgICAgICAg
ICAgbm9kZSA9IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKKyAgICAgICAgaWYgKCFub2RlLT5zaG91
bGRHZW5lcmF0ZSgpKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBBU1NFUlQobV9ncmFw
aFtub2RlSW5kZXhdLm9wKCkgIT0gU2V0TG9jYWwpOworICAgICAgICBBU1NFUlQobm9kZS0+b3Ao
KSAhPSBTZXRMb2NhbCk7CiAgICAgICAgIGJsb2NrLT5hcHBlbmROb2RlKAotICAgICAgICAgICAg
bV9ncmFwaCwgUmVmQ2hpbGRyZW4sIERvbnRSZWZOb2RlLCBTcGVjTm9uZSwgUGhhbnRvbSwgY29k
ZU9yaWdpbiwgbm9kZUluZGV4KTsKKyAgICAgICAgICAgIG1fZ3JhcGgsIFJlZkNoaWxkcmVuLCBE
b250UmVmTm9kZSwgU3BlY05vbmUsIFBoYW50b20sIGNvZGVPcmlnaW4sIG5vZGUpOwogICAgIH0K
ICAgICAKICAgICB2b2lkIGZpeFBvc3NpYmxlR2V0TG9jYWwoQmFzaWNCbG9jayogYmxvY2ssIEVk
Z2UmIGVkZ2UsIGJvb2wgY2hhbmdlUmVmKQogICAgIHsKLSAgICAgICAgTm9kZSYgY2hpbGQgPSBt
X2dyYXBoW2VkZ2VdOwotICAgICAgICBpZiAoY2hpbGQub3AoKSAhPSBHZXRMb2NhbCkKKyAgICAg
ICAgTm9kZSogY2hpbGQgPSBlZGdlLm5vZGUoKTsKKyAgICAgICAgaWYgKGNoaWxkLT5vcCgpICE9
IEdldExvY2FsKQogICAgICAgICAgICAgcmV0dXJuOwogI2lmIERGR19FTkFCTEUoREVCVUdfUFJP
UEFHQVRJT05fVkVSQk9TRSkKLSAgICAgICAgZGF0YUxvZ0YoIiAgICBDb25zaWRlcmluZyBHZXRM
b2NhbCBhdCBAJXUsIGxvY2FsIHIlZC5cbiIsIGVkZ2UuaW5kZXgoKSwgY2hpbGQubG9jYWwoKSk7
CisgICAgICAgIGRhdGFMb2dGKCIgICAgQ29uc2lkZXJpbmcgR2V0TG9jYWwgYXQgQCV1LCBsb2Nh
bCByJWQuXG4iLCBub2RlLT5pbmRleCgpLCBjaGlsZC0+bG9jYWwoKSk7CiAjZW5kaWYKLSAgICAg
ICAgaWYgKGNoaWxkLnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5pc0NhcHR1cmVkKCkpIHsKKyAgICAg
ICAgaWYgKGNoaWxkLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+aXNDYXB0dXJlZCgpKSB7CiAjaWYg
REZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQogICAgICAgICAgICAgZGF0YUxv
Z0YoIiAgICAgICAgSXQncyBjYXB0dXJlZC5cbiIpOwogI2VuZGlmCiAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgIH0KLSAgICAgICAgTm9kZUluZGV4IG9yaWdpbmFsTm9kZUluZGV4ID0gYmxv
Y2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKGNoaWxkLmxvY2FsKCkpOworICAgICAgICBOb2Rl
KiBvcmlnaW5hbE5vZGUgPSBibG9jay0+dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQoY2hpbGQtPmxv
Y2FsKCkpOwogI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKLSAgICAg
ICAgZGF0YUxvZ0YoIiAgICAgICAgRGVhbGluZyB3aXRoIG9yaWdpbmFsIEAldS5cbiIsIG9yaWdp
bmFsTm9kZUluZGV4KTsKKyAgICAgICAgZGF0YUxvZ0YoIiAgICAgICAgRGVhbGluZyB3aXRoIG9y
aWdpbmFsIEAldS5cbiIsIG9yaWdpbmFsTm9kZS0+aW5kZXgoKSk7CiAjZW5kaWYKLSAgICAgICAg
QVNTRVJUKG9yaWdpbmFsTm9kZUluZGV4ICE9IE5vTm9kZSk7Ci0gICAgICAgIE5vZGUqIG9yaWdp
bmFsTm9kZSA9ICZtX2dyYXBoW29yaWdpbmFsTm9kZUluZGV4XTsKKyAgICAgICAgQVNTRVJUKG9y
aWdpbmFsTm9kZSk7CiAjaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQog
ICAgICAgICBkYXRhTG9nRigiICAgICAgICBPcmlnaW5hbCBoYXMgbG9jYWwgciVkLlxuIiwgb3Jp
Z2luYWxOb2RlLT5sb2NhbCgpKTsKICNlbmRpZgotICAgICAgICBBU1NFUlQoY2hpbGQubG9jYWwo
KSA9PSBvcmlnaW5hbE5vZGUtPmxvY2FsKCkpOworICAgICAgICBBU1NFUlQoY2hpbGQtPmxvY2Fs
KCkgPT0gb3JpZ2luYWxOb2RlLT5sb2NhbCgpKTsKICAgICAgICAgLy8gUG9zc2liaWxpdGllczoK
ICAgICAgICAgLy8gU2V0TG9jYWwgLT4gdGhlIHNlY29uZEJsb2NrIGlzIGdldHRpbmcgdGhlIHZh
bHVlIG9mIHNvbWV0aGluZyB0aGF0IGlzIGltbWVkaWF0ZWx5CiAgICAgICAgIC8vICAgICBhdmFp
bGFibGUgaW4gdGhlIGZpcnN0IGJsb2NrIHdpdGggYSBrbm93biBOb2RlSW5kZXguCkBAIC0zMTIs
MTAgKzMxMCw4IEBAIHByaXZhdGU6CiAgICAgICAgIC8vIEZsdXNoIC0+IHRoZSBzZWNvbmRCbG9j
ayBpcyBhc2tpbmcgZm9yIGtlZXAtYWxpdmUgb24gYW4gb3BlcmFuZCB0aGF0IHRoZSBmaXJzdAog
ICAgICAgICAvLyAgICAgYmxvY2sgd2FzIGZvcmNpbmcgdG8gYmUgYWxpdmUsIHNvIHRoZSBzZWNv
bmQgYmxvY2sgc2hvdWxkIHJlZmVyIGNoaWxkIG9mCiAgICAgICAgIC8vICAgICB0aGUgZmx1c2gu
Ci0gICAgICAgIGlmIChvcmlnaW5hbE5vZGUtPm9wKCkgPT0gRmx1c2gpIHsKLSAgICAgICAgICAg
IG9yaWdpbmFsTm9kZUluZGV4ID0gb3JpZ2luYWxOb2RlLT5jaGlsZDEoKS5pbmRleCgpOwotICAg
ICAgICAgICAgb3JpZ2luYWxOb2RlID0gJm1fZ3JhcGhbb3JpZ2luYWxOb2RlSW5kZXhdOwotICAg
ICAgICB9CisgICAgICAgIGlmIChvcmlnaW5hbE5vZGUtPm9wKCkgPT0gRmx1c2gpCisgICAgICAg
ICAgICBvcmlnaW5hbE5vZGUgPSBvcmlnaW5hbE5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKICAgICAg
ICAgc3dpdGNoIChvcmlnaW5hbE5vZGUtPm9wKCkpIHsKICAgICAgICAgY2FzZSBTZXRMb2NhbDog
ewogICAgICAgICAgICAgaWYgKGNoYW5nZVJlZikKQEAgLTMyMyw3ICszMTksNyBAQCBwcml2YXRl
OgogI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKICAgICAgICAgICAg
IGRhdGFMb2dGKCIgICAgICAgIEl0J3MgYSBTZXRMb2NhbC5cbiIpOwogI2VuZGlmCi0gICAgICAg
ICAgICBtX2dyYXBoLmNoYW5nZUluZGV4KGVkZ2UsIG9yaWdpbmFsTm9kZS0+Y2hpbGQxKCkuaW5k
ZXgoKSwgY2hhbmdlUmVmKTsKKyAgICAgICAgICAgIG1fZ3JhcGguY2hhbmdlQ2hpbGQoZWRnZSwg
b3JpZ2luYWxOb2RlLT5jaGlsZDEoKS5ub2RlKCksIGNoYW5nZVJlZik7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIEdldExvY2FsOiB7CkBAIC0zMzEsNyArMzI3
LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGRhdGFMb2dGKCIgICAgICAgIEl0J3MgYSBHZXRM
b2NhbC5cbiIpOwogI2VuZGlmCiAgICAgICAgICAgICBpZiAob3JpZ2luYWxOb2RlLT5zaG91bGRH
ZW5lcmF0ZSgpKQotICAgICAgICAgICAgICAgIG1fZ3JhcGguY2hhbmdlSW5kZXgoZWRnZSwgb3Jp
Z2luYWxOb2RlSW5kZXgsIGNoYW5nZVJlZik7CisgICAgICAgICAgICAgICAgbV9ncmFwaC5jaGFu
Z2VDaGlsZChlZGdlLCBvcmlnaW5hbE5vZGUsIGNoYW5nZVJlZik7CiAgICAgICAgICAgICAvLyBJ
ZiB3ZSBoYXZlIGEgR2V0TG9jYWwgdGhhdCBwb2ludHMgdG8gYSBjaGlsZCBHZXRMb2NhbCB0aGF0
IGlzIGRlYWQsIHRoZW4KICAgICAgICAgICAgIC8vIHdlIGhhdmUgbm8gbmVlZCB0byBkbyBhbnl0
aGluZzogdGhpcyBvcmlnaW5hbCBHZXRMb2NhbCBpcyBzdGlsbCB2YWxpZC4KICAgICAgICAgICAg
IGJyZWFrOwpAQCAtMzc1LDIzICszNzEsMjIgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgfQogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGRlc3RpbmF0aW9u
QmxvY2stPnBoaXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIE5vZGVJbmRleCBwaGlOb2Rl
SW5kZXggPSBkZXN0aW5hdGlvbkJsb2NrLT5waGlzW2ldOwotICAgICAgICAgICAgTm9kZSYgcGhp
Tm9kZSA9IG1fZ3JhcGhbcGhpTm9kZUluZGV4XTsKLSAgICAgICAgICAgIE5vZGVJbmRleCBteU5v
ZGVJbmRleCA9IHNvdXJjZUJsb2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZChwaGlOb2RlLmxv
Y2FsKCkpOwotI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKLSAgICAg
ICAgICAgIGRhdGFMb2dGKCJDb25zaWRlcmluZyByZW1vdmluZyByZWZlcmVuY2UgZnJvbSBwaGkg
QCV1IHRvIEAldSBvbiBsb2NhbCByJWQ6IiwKLSAgICAgICAgICAgICAgICAgICAgcGhpTm9kZUlu
ZGV4LCBteU5vZGVJbmRleCwgcGhpTm9kZS5sb2NhbCgpKTsKLSNlbmRpZgotICAgICAgICAgICAg
aWYgKG15Tm9kZUluZGV4ID09IE5vTm9kZSkgeworICAgICAgICAgICAgTm9kZSogcGhpTm9kZSA9
IGRlc3RpbmF0aW9uQmxvY2stPnBoaXNbaV07CisgICAgICAgICAgICBOb2RlKiBteU5vZGUgPSBz
b3VyY2VCbG9jay0+dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQocGhpTm9kZS0+bG9jYWwoKSk7Cisg
ICAgICAgICAgICBpZiAoIW15Tm9kZSkgewogICAgICAgICAgICAgICAgIC8vIFRoaXMgd2lsbCBo
YXBwZW4gaWYgdGhlcmUgaXMgYSBwaGkgaW4gdGhlIGRlc3RpbmF0aW9uIHRoYXQgcmVmZXJzIGlu
dG8KICAgICAgICAgICAgICAgICAvLyB0aGUgZGVzdGluYXRpb24gaXRzZWxmLgogICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgTm9kZSYgbXlOb2Rl
ID0gbV9ncmFwaFtteU5vZGVJbmRleF07Ci0gICAgICAgICAgICBpZiAobXlOb2RlLm9wKCkgPT0g
R2V0TG9jYWwpCi0gICAgICAgICAgICAgICAgbXlOb2RlSW5kZXggPSBteU5vZGUuY2hpbGQxKCku
aW5kZXgoKTsKKyNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCisgICAg
ICAgICAgICBkYXRhTG9nRigKKyAgICAgICAgICAgICAgICAiQ29uc2lkZXJpbmcgcmVtb3Zpbmcg
cmVmZXJlbmNlIGZyb20gcGhpIEAldSB0byBAJXUgb24gbG9jYWwgciVkOiIsCisgICAgICAgICAg
ICAgICAgcGhpTm9kZS0+aW5kZXgoKSwgbXlOb2RlLT5pbmRleCgpLCBwaGlOb2RlLT5sb2NhbCgp
KTsKKyNlbmRpZgorICAgICAgICAgICAgaWYgKG15Tm9kZS0+b3AoKSA9PSBHZXRMb2NhbCkKKyAg
ICAgICAgICAgICAgICBteU5vZGUgPSBteU5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKICAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgaiA9IDA7IGogPCBBZGphY2VuY3lMaXN0OjpTaXplOyArK2opCi0g
ICAgICAgICAgICAgICAgcmVtb3ZlUG90ZW50aWFsbHlEZWFkUGhpUmVmZXJlbmNlKG15Tm9kZUlu
ZGV4LCBwaGlOb2RlLCBqLCBzb3VyY2VCbG9jay0+aXNSZWFjaGFibGUpOworICAgICAgICAgICAg
ICAgIHJlbW92ZVBvdGVudGlhbGx5RGVhZFBoaVJlZmVyZW5jZShteU5vZGUsIHBoaU5vZGUsIGos
IHNvdXJjZUJsb2NrLT5pc1JlYWNoYWJsZSk7CiAjaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdB
VElPTl9WRVJCT1NFKQogICAgICAgICAgICAgZGF0YUxvZ0YoIlxuIik7CiAjZW5kaWYKQEAgLTQx
Niw1OCArNDExLDU3IEBAIHByaXZhdGU6CiAgICAgICAgIGZpeFBoaXMoYmxvY2tJbmRleCwgamV0
dGlzb25lZEJsb2NrSW5kZXgpOwogICAgIH0KICAgICAKLSAgICB2b2lkIHJlbW92ZVBvdGVudGlh
bGx5RGVhZFBoaVJlZmVyZW5jZShOb2RlSW5kZXggbXlOb2RlSW5kZXgsIE5vZGUmIHBoaU5vZGUs
IHVuc2lnbmVkIGVkZ2VJbmRleCwgYm9vbCBjaGFuZ2VSZWYpCisgICAgdm9pZCByZW1vdmVQb3Rl
bnRpYWxseURlYWRQaGlSZWZlcmVuY2UoTm9kZSogbXlOb2RlLCBOb2RlKiBwaGlOb2RlLCB1bnNp
Z25lZCBlZGdlSW5kZXgsIGJvb2wgY2hhbmdlUmVmKQogICAgIHsKLSAgICAgICAgaWYgKHBoaU5v
ZGUuY2hpbGRyZW4uY2hpbGQoZWRnZUluZGV4KS5pbmRleFVuY2hlY2tlZCgpICE9IG15Tm9kZUlu
ZGV4KQorICAgICAgICBpZiAocGhpTm9kZS0+Y2hpbGRyZW4uY2hpbGQoZWRnZUluZGV4KS5ub2Rl
KCkgIT0gbXlOb2RlKQogICAgICAgICAgICAgcmV0dXJuOwogI2lmIERGR19FTkFCTEUoREVCVUdf
UFJPUEFHQVRJT05fVkVSQk9TRSkKICAgICAgICAgZGF0YUxvZ0YoIiBSZW1vdmluZyByZWZlcmVu
Y2UgYXQgY2hpbGQgJXUuIiwgZWRnZUluZGV4KTsKICNlbmRpZgotICAgICAgICBpZiAoY2hhbmdl
UmVmICYmIHBoaU5vZGUuc2hvdWxkR2VuZXJhdGUoKSkKLSAgICAgICAgICAgIG1fZ3JhcGguZGVy
ZWYobXlOb2RlSW5kZXgpOwotICAgICAgICBwaGlOb2RlLmNoaWxkcmVuLnJlbW92ZUVkZ2VGcm9t
QmFnKGVkZ2VJbmRleCk7CisgICAgICAgIGlmIChjaGFuZ2VSZWYgJiYgcGhpTm9kZS0+c2hvdWxk
R2VuZXJhdGUoKSkKKyAgICAgICAgICAgIG1fZ3JhcGguZGVyZWYobXlOb2RlKTsKKyAgICAgICAg
cGhpTm9kZS0+Y2hpbGRyZW4ucmVtb3ZlRWRnZUZyb21CYWcoZWRnZUluZGV4KTsKICAgICB9CiAg
ICAgCiAgICAgc3RydWN0IE9wZXJhbmRTdWJzdGl0dXRpb24gewogICAgICAgICBPcGVyYW5kU3Vi
c3RpdHV0aW9uKCkKLSAgICAgICAgICAgIDogb2xkQ2hpbGQoTm9Ob2RlKQotICAgICAgICAgICAg
LCBuZXdDaGlsZChOb05vZGUpCisgICAgICAgICAgICA6IG9sZENoaWxkKDApCisgICAgICAgICAg
ICAsIG5ld0NoaWxkKDApCiAgICAgICAgIHsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAg
ZXhwbGljaXQgT3BlcmFuZFN1YnN0aXR1dGlvbihOb2RlSW5kZXggb2xkQ2hpbGQpCisgICAgICAg
IGV4cGxpY2l0IE9wZXJhbmRTdWJzdGl0dXRpb24oTm9kZSogb2xkQ2hpbGQpCiAgICAgICAgICAg
ICA6IG9sZENoaWxkKG9sZENoaWxkKQogICAgICAgICAgICAgLCBuZXdDaGlsZChvbGRDaGlsZCkK
ICAgICAgICAgewogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBPcGVyYW5kU3Vic3RpdHV0
aW9uKE5vZGVJbmRleCBvbGRDaGlsZCwgTm9kZUluZGV4IG5ld0NoaWxkKQorICAgICAgICBPcGVy
YW5kU3Vic3RpdHV0aW9uKE5vZGUqIG9sZENoaWxkLCBOb2RlKiBuZXdDaGlsZCkKICAgICAgICAg
ICAgIDogb2xkQ2hpbGQob2xkQ2hpbGQpCiAgICAgICAgICAgICAsIG5ld0NoaWxkKG5ld0NoaWxk
KQogICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQoKG9sZENoaWxkID09IE5vTm9kZSkgPT0g
KG5ld0NoaWxkID09IE5vTm9kZSkpOworICAgICAgICAgICAgQVNTRVJUKCghb2xkQ2hpbGQpID09
ICghbmV3Q2hpbGQpKTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgdm9pZCBkdW1wKEZJ
TEUqIG91dCkKKyAgICAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiAgICAg
ICAgIHsKLSAgICAgICAgICAgIGlmIChvbGRDaGlsZCA9PSBOb05vZGUpCi0gICAgICAgICAgICAg
ICAgZnByaW50ZihvdXQsICItIik7CisgICAgICAgICAgICBpZiAoIW9sZENoaWxkKQorICAgICAg
ICAgICAgICAgIG91dC5wcmludGYoIi0iKTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAg
ICAgICBmcHJpbnRmKG91dCwgIkAldSAtPiBAJXUiLCBvbGRDaGlsZCwgbmV3Q2hpbGQpOworICAg
ICAgICAgICAgICAgIG91dC5wcmludGYoIkAldSAtPiBAJXUiLCBvbGRDaGlsZC0+aW5kZXgoKSwg
bmV3Q2hpbGQtPmluZGV4KCkpOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBOb2RlSW5k
ZXggb2xkQ2hpbGQ7Ci0gICAgICAgIE5vZGVJbmRleCBuZXdDaGlsZDsKKyAgICAgICAgTm9kZSog
b2xkQ2hpbGQ7CisgICAgICAgIE5vZGUqIG5ld0NoaWxkOwogICAgIH07CiAgICAgCi0gICAgTm9k
ZUluZGV4IHNraXBHZXRMb2NhbChOb2RlSW5kZXggbm9kZUluZGV4KQorICAgIE5vZGUqIHNraXBH
ZXRMb2NhbChOb2RlKiBub2RlKQogICAgIHsKLSAgICAgICAgaWYgKG5vZGVJbmRleCA9PSBOb05v
ZGUpCi0gICAgICAgICAgICByZXR1cm4gTm9Ob2RlOwotICAgICAgICBOb2RlJiBub2RlID0gbV9n
cmFwaFtub2RlSW5kZXhdOwotICAgICAgICBpZiAobm9kZS5vcCgpID09IEdldExvY2FsKQotICAg
ICAgICAgICAgcmV0dXJuIG5vZGUuY2hpbGQxKCkuaW5kZXgoKTsKLSAgICAgICAgcmV0dXJuIG5v
ZGVJbmRleDsKKyAgICAgICAgaWYgKCFub2RlKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAg
ICAgIGlmIChub2RlLT5vcCgpID09IEdldExvY2FsKQorICAgICAgICAgICAgcmV0dXJuIG5vZGUt
PmNoaWxkMSgpLm5vZGUoKTsKKyAgICAgICAgcmV0dXJuIG5vZGU7CiAgICAgfQogICAgIAogICAg
IHZvaWQgcmVjb3JkUG9zc2libGVJbmNvbWluZ1JlZmVyZW5jZSgKQEAgLTQ3NywzMCArNDcxLDI5
IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBza2lwR2V0TG9jYWwoc2Vjb25kQmxvY2stPnZhcmlh
Ymxlc0F0VGFpbC5vcGVyYW5kKG9wZXJhbmQpKSk7CiAgICAgfQogICAgIAotICAgIHZvaWQgcmVj
b3JkTmV3VGFyZ2V0KE9wZXJhbmRzPE9wZXJhbmRTdWJzdGl0dXRpb24+JiBzdWJzdGl0dXRpb25z
LCBpbnQgb3BlcmFuZCwgTm9kZUluZGV4IG5vZGVJbmRleCkKKyAgICB2b2lkIHJlY29yZE5ld1Rh
cmdldChPcGVyYW5kczxPcGVyYW5kU3Vic3RpdHV0aW9uPiYgc3Vic3RpdHV0aW9ucywgaW50IG9w
ZXJhbmQsIE5vZGUqIG5vZGUpCiAgICAgewotICAgICAgICBBU1NFUlQobV9ncmFwaFtub2RlSW5k
ZXhdLm9wKCkgPT0gU2V0TG9jYWwKLSAgICAgICAgICAgICAgIHx8IG1fZ3JhcGhbbm9kZUluZGV4
XS5vcCgpID09IFNldEFyZ3VtZW50Ci0gICAgICAgICAgICAgICB8fCBtX2dyYXBoW25vZGVJbmRl
eF0ub3AoKSA9PSBGbHVzaAotICAgICAgICAgICAgICAgfHwgbV9ncmFwaFtub2RlSW5kZXhdLm9w
KCkgPT0gUGhpKTsKLSAgICAgICAgc3Vic3RpdHV0aW9ucy5vcGVyYW5kKG9wZXJhbmQpLm5ld0No
aWxkID0gbm9kZUluZGV4OworICAgICAgICBBU1NFUlQoCisgICAgICAgICAgICBub2RlLT5vcCgp
ID09IFNldExvY2FsCisgICAgICAgICAgICB8fCBub2RlLT5vcCgpID09IFNldEFyZ3VtZW50Cisg
ICAgICAgICAgICB8fCBub2RlLT5vcCgpID09IEZsdXNoCisgICAgICAgICAgICB8fCBub2RlLT5v
cCgpID09IFBoaSk7CisgICAgICAgIHN1YnN0aXR1dGlvbnMub3BlcmFuZChvcGVyYW5kKS5uZXdD
aGlsZCA9IG5vZGU7CiAgICAgfQogICAgIAogICAgIHZvaWQgZml4VGFpbE9wZXJhbmQoCiAgICAg
ICAgIEJhc2ljQmxvY2sqIGZpcnN0QmxvY2ssIEJhc2ljQmxvY2sqIHNlY29uZEJsb2NrLCBpbnQg
b3BlcmFuZCwKICAgICAgICAgT3BlcmFuZHM8T3BlcmFuZFN1YnN0aXR1dGlvbj4mIHN1YnN0aXR1
dGlvbnMpCiAgICAgewotICAgICAgICBOb2RlSW5kZXggYXRTZWNvbmRUYWlsID0gc2Vjb25kQmxv
Y2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKG9wZXJhbmQpOworICAgICAgICBOb2RlKiBhdFNl
Y29uZFRhaWwgPSBzZWNvbmRCbG9jay0+dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQob3BlcmFuZCk7
CiAgICAgICAgIAotICAgICAgICBpZiAoYXRTZWNvbmRUYWlsID09IE5vTm9kZSkgeworICAgICAg
ICBpZiAoIWF0U2Vjb25kVGFpbCkgewogICAgICAgICAgICAgLy8gSWYgdGhlIHZhcmlhYmxlIGlz
IGRlYWQgYXQgdGhlIGVuZCBvZiB0aGUgc2Vjb25kIGJsb2NrLCB0aGVuIGRvIG5vdGhpbmc7IGVz
c2VudGlhbGx5CiAgICAgICAgICAgICAvLyB0aGlzIG1lYW5zIHRoYXQgd2Ugd2FudCB0aGUgdGFp
bCBzdGF0ZSB0byByZWZsZWN0IHdoYXRldmVyIHRoZSBmaXJzdCBibG9jayBkaWQuCiAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgIH0KIAotICAgICAgICBOb2RlJiBzZWNvbmROb2RlID0gbV9n
cmFwaFthdFNlY29uZFRhaWxdOwotICAgICAgICAKLSAgICAgICAgc3dpdGNoIChzZWNvbmROb2Rl
Lm9wKCkpIHsKKyAgICAgICAgc3dpdGNoIChhdFNlY29uZFRhaWwtPm9wKCkpIHsKICAgICAgICAg
Y2FzZSBTZXRMb2NhbDoKICAgICAgICAgY2FzZSBGbHVzaDogewogICAgICAgICAgICAgLy8gVGhl
IHNlY29uZCBibG9jayBkaWQgaW50ZXJlc3RpbmcgdGhpbmdzIHRvIHRoZSB2YXJpYWJsZXMsIHNv
IHVwZGF0ZSB0aGUgdGFpbApAQCAtNTExLDcgKzUwNCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAg
ICAKICAgICAgICAgY2FzZSBQaGk6IHsKICAgICAgICAgICAgIC8vIEtlZXAgd2hhdCB3YXMgaW4g
dGhlIGZpcnN0IGJsb2NrLgotICAgICAgICAgICAgQVNTRVJUKGZpcnN0QmxvY2stPnZhcmlhYmxl
c0F0VGFpbC5vcGVyYW5kKG9wZXJhbmQpICE9IE5vTm9kZSk7CisgICAgICAgICAgICBBU1NFUlQo
Zmlyc3RCbG9jay0+dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQob3BlcmFuZCkpOwogICAgICAgICAg
ICAgcmVjb3JkTmV3VGFyZ2V0KHN1YnN0aXR1dGlvbnMsIG9wZXJhbmQsIHNraXBHZXRMb2NhbChm
aXJzdEJsb2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZChvcGVyYW5kKSkpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTUyMCwyOCArNTEzLDI4IEBAIHByaXZhdGU6CiAgICAg
ICAgICAgICAvLyBJZiBpdCdzIGEgR2V0TG9jYWwgb24gYSBjYXB0dXJlZCB2YXIsIHRoZW4gZGVm
aW5pdGVseSBrZWVwIHdoYXQgd2FzCiAgICAgICAgICAgICAvLyBpbiB0aGUgc2Vjb25kIGJsb2Nr
LiBJbiBwYXJ0aWN1bGFyLCBpdCdzIHBvc3NpYmxlIHRoYXQgdGhlIGZpcnN0CiAgICAgICAgICAg
ICAvLyBibG9jayBkb2Vzbid0IGV2ZW4ga25vdyBhYm91dCB0aGlzIHZhcmlhYmxlLgotICAgICAg
ICAgICAgaWYgKHNlY29uZE5vZGUudmFyaWFibGVBY2Nlc3NEYXRhKCktPmlzQ2FwdHVyZWQoKSkg
eworICAgICAgICAgICAgaWYgKGF0U2Vjb25kVGFpbC0+dmFyaWFibGVBY2Nlc3NEYXRhKCktPmlz
Q2FwdHVyZWQoKSkgewogICAgICAgICAgICAgICAgIGZpcnN0QmxvY2stPnZhcmlhYmxlc0F0VGFp
bC5vcGVyYW5kKG9wZXJhbmQpID0gYXRTZWNvbmRUYWlsOwotICAgICAgICAgICAgICAgIHJlY29y
ZE5ld1RhcmdldChzdWJzdGl0dXRpb25zLCBvcGVyYW5kLCBzZWNvbmROb2RlLmNoaWxkMSgpLmlu
ZGV4KCkpOworICAgICAgICAgICAgICAgIHJlY29yZE5ld1RhcmdldChzdWJzdGl0dXRpb25zLCBv
cGVyYW5kLCBhdFNlY29uZFRhaWwtPmNoaWxkMSgpLm5vZGUoKSk7CiAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgICAgIC8vIEl0J3Mg
cG9zc2libGUgdGhhdCB0aGUgc2Vjb25kIGJsb2NrIGhhZCBhIEdldExvY2FsIGFuZCB0aGUgZmly
c3QgYmxvY2sKICAgICAgICAgICAgIC8vIGhhZCBhIFNldEFyZ3VtZW50IG9yIGEgUGhpLiBUaGVu
IHVwZGF0ZSB0aGUgdGFpbC4gT3RoZXJ3aXNlIGtlZXAgd2hhdCB3YXMgaW4gdGhlCiAgICAgICAg
ICAgICAvLyBmaXJzdCBibG9jay4KLSAgICAgICAgICAgIE5vZGVJbmRleCBhdEZpcnN0VGFpbCA9
IGZpcnN0QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKG9wZXJhbmQpOwotICAgICAgICAg
ICAgQVNTRVJUKGF0Rmlyc3RUYWlsICE9IE5vTm9kZSk7Ci0gICAgICAgICAgICBzd2l0Y2ggKG1f
Z3JhcGhbYXRGaXJzdFRhaWxdLm9wKCkpIHsKKyAgICAgICAgICAgIE5vZGUqIGF0Rmlyc3RUYWls
ID0gZmlyc3RCbG9jay0+dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQob3BlcmFuZCk7CisgICAgICAg
ICAgICBBU1NFUlQoYXRGaXJzdFRhaWwpOworICAgICAgICAgICAgc3dpdGNoIChhdEZpcnN0VGFp
bC0+b3AoKSkgewogICAgICAgICAgICAgY2FzZSBTZXRBcmd1bWVudDoKICAgICAgICAgICAgIGNh
c2UgUGhpOgogICAgICAgICAgICAgICAgIGZpcnN0QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVy
YW5kKG9wZXJhbmQpID0gYXRTZWNvbmRUYWlsOwotICAgICAgICAgICAgICAgIHJlY29yZE5ld1Rh
cmdldChzdWJzdGl0dXRpb25zLCBvcGVyYW5kLCBzZWNvbmROb2RlLmNoaWxkMSgpLmluZGV4KCkp
OworICAgICAgICAgICAgICAgIHJlY29yZE5ld1RhcmdldChzdWJzdGl0dXRpb25zLCBvcGVyYW5k
LCBhdFNlY29uZFRhaWwtPmNoaWxkMSgpLm5vZGUoKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7
CiAKICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgLy8gS2VlcCB3aGF0IHdh
cyBpbiB0aGUgZmlyc3QgYmxvY2ssIGFuZCBhZGp1c3QgdGhlIHN1YnN0aXR1dGlvbiB0byBhY2Nv
dW50IGZvcgogICAgICAgICAgICAgICAgIC8vIHRoZSBmYWN0IHRoYXQgc3VjY2Vzc29ycyB3aWxs
IHJlZmVyIHRvIHRoZSBjaGlsZCBvZiB0aGUgR2V0TG9jYWwuCi0gICAgICAgICAgICAgICAgQVNT
RVJUKGZpcnN0QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKG9wZXJhbmQpICE9IE5vTm9k
ZSk7CisgICAgICAgICAgICAgICAgQVNTRVJUKGZpcnN0QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5v
cGVyYW5kKG9wZXJhbmQpKTsKICAgICAgICAgICAgICAgICByZWNvcmROZXdUYXJnZXQoc3Vic3Rp
dHV0aW9ucywgb3BlcmFuZCwgc2tpcEdldExvY2FsKGZpcnN0QmxvY2stPnZhcmlhYmxlc0F0VGFp
bC5vcGVyYW5kKG9wZXJhbmQpKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICB9CkBAIC01NjcsMTAgKzU2MCwxMCBAQCBwcml2YXRlOgogICAgICAgICAKICAgICAgICAgLy8g
UmVtb3ZlIHRoZSB0ZXJtaW5hbCBvZiBmaXJzdEJsb2NrIHNpbmNlIHdlIGRvbid0IG5lZWQgaXQg
YW55bW9yZS4gV2VsbCwgd2UgZG9uJ3QKICAgICAgICAgLy8gcmVhbGx5IHJlbW92ZSBpdDsgd2Ug
YWN0dWFsbHkgdHVybiBpdCBpbnRvIGEgUGhhbnRvbS4KLSAgICAgICAgQVNTRVJUKG1fZ3JhcGhb
Zmlyc3RCbG9jay0+bGFzdCgpXS5pc1Rlcm1pbmFsKCkpOwotICAgICAgICBDb2RlT3JpZ2luIGJv
dW5kYXJ5Q29kZU9yaWdpbiA9IG1fZ3JhcGhbZmlyc3RCbG9jay0+bGFzdCgpXS5jb2RlT3JpZ2lu
OwotICAgICAgICBtX2dyYXBoW2ZpcnN0QmxvY2stPmxhc3QoKV0uc2V0T3BBbmREZWZhdWx0Rmxh
Z3MoUGhhbnRvbSk7Ci0gICAgICAgIEFTU0VSVChtX2dyYXBoW2ZpcnN0QmxvY2stPmxhc3QoKV0u
cmVmQ291bnQoKSA9PSAxKTsKKyAgICAgICAgQVNTRVJUKGZpcnN0QmxvY2stPmxhc3QoKS0+aXNU
ZXJtaW5hbCgpKTsKKyAgICAgICAgQ29kZU9yaWdpbiBib3VuZGFyeUNvZGVPcmlnaW4gPSBmaXJz
dEJsb2NrLT5sYXN0KCktPmNvZGVPcmlnaW47CisgICAgICAgIGZpcnN0QmxvY2stPmxhc3QoKS0+
c2V0T3BBbmREZWZhdWx0RmxhZ3MoUGhhbnRvbSk7CisgICAgICAgIEFTU0VSVChmaXJzdEJsb2Nr
LT5sYXN0KCktPnJlZkNvdW50KCkgPT0gMSk7CiAgICAgICAgIAogICAgICAgICBpZiAoamV0dGlz
b25lZEJsb2NrSW5kZXggIT0gTm9CbG9jaykgewogICAgICAgICAgICAgQmFzaWNCbG9jayogamV0
dGlzb25lZEJsb2NrID0gbV9ncmFwaC5tX2Jsb2Nrc1tqZXR0aXNvbmVkQmxvY2tJbmRleF0uZ2V0
KCk7CkBAIC01OTksMjggKzU5MiwyNSBAQCBwcml2YXRlOgogICAgICAgICAgICAgcmVjb3JkUG9z
c2libGVJbmNvbWluZ1JlZmVyZW5jZShzZWNvbmRCbG9jaywgc3Vic3RpdHV0aW9ucywgaSk7CiAK
ICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzZWNvbmRCbG9jay0+c2l6ZSgpOyArK2kp
IHsKLSAgICAgICAgICAgIE5vZGVJbmRleCBub2RlSW5kZXggPSBzZWNvbmRCbG9jay0+YXQoaSk7
Ci0gICAgICAgICAgICBOb2RlJiBub2RlID0gbV9ncmFwaFtub2RlSW5kZXhdOworICAgICAgICAg
ICAgTm9kZSogbm9kZSA9IHNlY29uZEJsb2NrLT5hdChpKTsKICAgICAgICAgICAgIAogICAgICAg
ICAgICAgYm9vbCBjaGlsZHJlbkFscmVhZHlGaXhlZCA9IGZhbHNlOwogICAgICAgICAgICAgCi0g
ICAgICAgICAgICBzd2l0Y2ggKG5vZGUub3AoKSkgeworICAgICAgICAgICAgc3dpdGNoIChub2Rl
LT5vcCgpKSB7CiAgICAgICAgICAgICBjYXNlIFBoYW50b206IHsKLSAgICAgICAgICAgICAgICBp
ZiAoIW5vZGUuY2hpbGQxKCkpCisgICAgICAgICAgICAgICAgaWYgKCFub2RlLT5jaGlsZDEoKSkK
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAg
ICAgICAgQVNTRVJUKG5vZGUuc2hvdWxkR2VuZXJhdGUoKSk7Ci0gICAgICAgICAgICAgICAgTm9k
ZSYgcG9zc2libGVMb2NhbE9wID0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXTsKLSAgICAgICAgICAg
ICAgICBpZiAocG9zc2libGVMb2NhbE9wLm9wKCkgIT0gR2V0TG9jYWwKLSAgICAgICAgICAgICAg
ICAgICAgJiYgcG9zc2libGVMb2NhbE9wLmhhc0xvY2FsKCkKLSAgICAgICAgICAgICAgICAgICAg
JiYgIXBvc3NpYmxlTG9jYWxPcC52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+aXNDYXB0dXJlZCgpKSB7
Ci0gICAgICAgICAgICAgICAgICAgIE5vZGVJbmRleCBzZXRMb2NhbEluZGV4ID0KLSAgICAgICAg
ICAgICAgICAgICAgICAgIGZpcnN0QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKHBvc3Np
YmxlTG9jYWxPcC5sb2NhbCgpKTsKLSAgICAgICAgICAgICAgICAgICAgTm9kZSYgc2V0TG9jYWwg
PSBtX2dyYXBoW3NldExvY2FsSW5kZXhdOwotICAgICAgICAgICAgICAgICAgICBpZiAoc2V0TG9j
YWwub3AoKSA9PSBTZXRMb2NhbCkgewotICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5j
aGFuZ2VFZGdlKG5vZGUuY2hpbGRyZW4uY2hpbGQxKCksIHNldExvY2FsLmNoaWxkMSgpKTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVCghbm9kZS5jaGlsZDIoKSk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBBU1NFUlQoIW5vZGUuY2hpbGQzKCkpOworICAgICAgICAgICAgICAgIEFT
U0VSVChub2RlLT5zaG91bGRHZW5lcmF0ZSgpKTsKKyAgICAgICAgICAgICAgICBOb2RlKiBwb3Nz
aWJsZUxvY2FsT3AgPSBub2RlLT5jaGlsZDEoKS5ub2RlKCk7CisgICAgICAgICAgICAgICAgaWYg
KHBvc3NpYmxlTG9jYWxPcC0+b3AoKSAhPSBHZXRMb2NhbAorICAgICAgICAgICAgICAgICAgICAm
JiBwb3NzaWJsZUxvY2FsT3AtPmhhc0xvY2FsKCkKKyAgICAgICAgICAgICAgICAgICAgJiYgIXBv
c3NpYmxlTG9jYWxPcC0+dmFyaWFibGVBY2Nlc3NEYXRhKCktPmlzQ2FwdHVyZWQoKSkgeworICAg
ICAgICAgICAgICAgICAgICBOb2RlKiBzZXRMb2NhbCA9IGZpcnN0QmxvY2stPnZhcmlhYmxlc0F0
VGFpbC5vcGVyYW5kKHBvc3NpYmxlTG9jYWxPcC0+bG9jYWwoKSk7CisgICAgICAgICAgICAgICAg
ICAgIGlmIChzZXRMb2NhbC0+b3AoKSA9PSBTZXRMb2NhbCkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgbV9ncmFwaC5jaGFuZ2VFZGdlKG5vZGUtPmNoaWxkcmVuLmNoaWxkMSgpLCBzZXRMb2Nh
bC0+Y2hpbGQxKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKCFub2RlLT5jaGls
ZDIoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQoIW5vZGUtPmNoaWxkMygpKTsK
ICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuQWxyZWFkeUZpeGVkID0gdHJ1ZTsKICAg
ICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KQEAgLTYzNywxMSArNjI3LDEx
IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgLy8gU2ltaWxhcmx5IGZvciBHZXRMb2NhbDsg
aXQgY291bGQgdXNlIGFueSBvZiB0aG9zZSBleGNlcHQgZm9yCiAgICAgICAgICAgICAgICAgLy8g
R2V0TG9jYWwuIElmIGl0IHVzZXMgYSBQaGkgdGhlbiBpdCBzaG91bGQgYmUgcmVkaXJlY3RlZCB0
byB1c2UgYQogICAgICAgICAgICAgICAgIC8vIFBoaSBmcm9tIHRoZSB0YWlsIG9wZXJhbmQuCi0g
ICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ub3AoKSAhPSBQaGkpCisg
ICAgICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5vcCgpICE9IFBoaSkKICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgTm9k
ZUluZGV4IGF0Rmlyc3RJbmRleCA9IGZpcnN0QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5k
KG5vZGUubG9jYWwoKSk7Ci0gICAgICAgICAgICAgICAgbV9ncmFwaC5jaGFuZ2VFZGdlKG5vZGUu
Y2hpbGRyZW4uY2hpbGQxKCksIEVkZ2Uoc2tpcEdldExvY2FsKGF0Rmlyc3RJbmRleCkpLCBub2Rl
LnNob3VsZEdlbmVyYXRlKCkpOworICAgICAgICAgICAgICAgIE5vZGUqIGF0Rmlyc3QgPSBmaXJz
dEJsb2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZChub2RlLT5sb2NhbCgpKTsKKyAgICAgICAg
ICAgICAgICBtX2dyYXBoLmNoYW5nZUVkZ2Uobm9kZS0+Y2hpbGRyZW4uY2hpbGQxKCksIEVkZ2Uo
c2tpcEdldExvY2FsKGF0Rmlyc3QpKSwgbm9kZS0+c2hvdWxkR2VuZXJhdGUoKSk7CiAgICAgICAg
ICAgICAgICAgY2hpbGRyZW5BbHJlYWR5Rml4ZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgfQpAQCAtNjUxLDMwICs2NDEsMzAgQEAgcHJpdmF0ZToKICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKCFjaGlsZHJlbkFscmVhZHlG
aXhlZCkgewotICAgICAgICAgICAgICAgIGJvb2wgY2hhbmdlUmVmID0gbm9kZS5zaG91bGRHZW5l
cmF0ZSgpOworICAgICAgICAgICAgICAgIGJvb2wgY2hhbmdlUmVmID0gbm9kZS0+c2hvdWxkR2Vu
ZXJhdGUoKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIC8vIElmIHRoZSBjaGlsZCBp
cyBhIEdldExvY2FsLCB0aGVuIHdlIG1pZ2h0IGxpa2UgdG8gZml4IGl0LgotICAgICAgICAgICAg
ICAgIGlmIChub2RlLmZsYWdzKCkgJiBOb2RlSGFzVmFyQXJncykgewotICAgICAgICAgICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGNoaWxkSWR4ID0gbm9kZS5maXJzdENoaWxkKCk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgY2hpbGRJZHggPCBub2RlLmZpcnN0Q2hpbGQoKSArIG5vZGUubnVt
Q2hpbGRyZW4oKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICArK2NoaWxkSWR4KSB7CisgICAg
ICAgICAgICAgICAgaWYgKG5vZGUtPmZsYWdzKCkgJiBOb2RlSGFzVmFyQXJncykgeworICAgICAg
ICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGNoaWxkSWR4ID0gbm9kZS0+Zmlyc3RDaGlsZCgp
OworICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRJZHggPCBub2RlLT5maXJzdENoaWxkKCkg
KyBub2RlLT5udW1DaGlsZHJlbigpOworICAgICAgICAgICAgICAgICAgICAgICAgKytjaGlsZElk
eCkgewogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEhbV9ncmFwaC5tX3ZhckFyZ0NoaWxk
cmVuW2NoaWxkSWR4XSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXhQb3NzaWJsZUdl
dExvY2FsKGZpcnN0QmxvY2ssIG1fZ3JhcGgubV92YXJBcmdDaGlsZHJlbltjaGlsZElkeF0sIGNo
YW5nZVJlZik7CiAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9IGVsc2Ug
aWYgKCEhbm9kZS5jaGlsZDEoKSkgewotICAgICAgICAgICAgICAgICAgICBmaXhQb3NzaWJsZUdl
dExvY2FsKGZpcnN0QmxvY2ssIG5vZGUuY2hpbGRyZW4uY2hpbGQxKCksIGNoYW5nZVJlZik7Ci0g
ICAgICAgICAgICAgICAgICAgIGlmICghIW5vZGUuY2hpbGQyKCkpIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGZpeFBvc3NpYmxlR2V0TG9jYWwoZmlyc3RCbG9jaywgbm9kZS5jaGlsZHJlbi5j
aGlsZDIoKSwgY2hhbmdlUmVmKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICghIW5vZGUu
Y2hpbGQzKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZml4UG9zc2libGVHZXRMb2Nh
bChmaXJzdEJsb2NrLCBub2RlLmNoaWxkcmVuLmNoaWxkMygpLCBjaGFuZ2VSZWYpOworICAgICAg
ICAgICAgICAgIH0gZWxzZSBpZiAoISFub2RlLT5jaGlsZDEoKSkgeworICAgICAgICAgICAgICAg
ICAgICBmaXhQb3NzaWJsZUdldExvY2FsKGZpcnN0QmxvY2ssIG5vZGUtPmNoaWxkcmVuLmNoaWxk
MSgpLCBjaGFuZ2VSZWYpOworICAgICAgICAgICAgICAgICAgICBpZiAoISFub2RlLT5jaGlsZDIo
KSkgeworICAgICAgICAgICAgICAgICAgICAgICAgZml4UG9zc2libGVHZXRMb2NhbChmaXJzdEJs
b2NrLCBub2RlLT5jaGlsZHJlbi5jaGlsZDIoKSwgY2hhbmdlUmVmKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICghIW5vZGUtPmNoaWxkMygpKQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGZpeFBvc3NpYmxlR2V0TG9jYWwoZmlyc3RCbG9jaywgbm9kZS0+Y2hpbGRyZW4uY2hpbGQz
KCksIGNoYW5nZVJlZik7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGZpcnN0QmxvY2stPmFwcGVuZChub2RlSW5k
ZXgpOworICAgICAgICAgICAgZmlyc3RCbG9jay0+YXBwZW5kKG5vZGUpOwogICAgICAgICB9CiAg
ICAgICAgIAotICAgICAgICBBU1NFUlQobV9ncmFwaFtmaXJzdEJsb2NrLT5sYXN0KCldLmlzVGVy
bWluYWwoKSk7CisgICAgICAgIEFTU0VSVChmaXJzdEJsb2NrLT5sYXN0KCktPmlzVGVybWluYWwo
KSk7CiAgICAgICAgIAogICAgICAgICAvLyBGaXggdGhlIHByZWRlY2Vzc29ycyBvZiBteSBuZXcg
c3VjY2Vzc29ycy4gVGhpcyBpcyB0cmlja3ksIHNpbmNlIHdlIGFyZSBnb2luZyB0byByZXNldAog
ICAgICAgICAvLyBhbGwgcHJlZGVjZXNzb3JzIGFueXdheSBkdWUgdG8gcmVhY2hhYmlsaXR5IGFu
YWx5c2lzLiBCdXQgd2UgbmVlZCB0byBmaXggdGhlCkBAIC03MDQsMjYgKzY5NCwyNCBAQCBwcml2
YXRlOgogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2dyYXBoLm51bVN1Y2Nlc3NvcnMoZmly
c3RCbG9jayk7IGktLTspIHsKICAgICAgICAgICAgIEJhc2ljQmxvY2sqIHN1Y2Nlc3NvciA9IG1f
Z3JhcGgubV9ibG9ja3NbbV9ncmFwaC5zdWNjZXNzb3IoZmlyc3RCbG9jaywgaSldLmdldCgpOwog
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gMDsgaiA8IHN1Y2Nlc3Nvci0+cGhpcy5zaXpl
KCk7ICsraikgewotICAgICAgICAgICAgICAgIE5vZGVJbmRleCBwaGlOb2RlSW5kZXggPSBzdWNj
ZXNzb3ItPnBoaXNbal07Ci0gICAgICAgICAgICAgICAgTm9kZSYgcGhpTm9kZSA9IG1fZ3JhcGhb
cGhpTm9kZUluZGV4XTsKLSAgICAgICAgICAgICAgICBib29sIGNoYW5nZVJlZiA9IHBoaU5vZGUu
c2hvdWxkR2VuZXJhdGUoKTsKLSAgICAgICAgICAgICAgICBPcGVyYW5kU3Vic3RpdHV0aW9uIHN1
YnN0aXR1dGlvbiA9IHN1YnN0aXR1dGlvbnMub3BlcmFuZChwaGlOb2RlLmxvY2FsKCkpOworICAg
ICAgICAgICAgICAgIE5vZGUqIHBoaU5vZGUgPSBzdWNjZXNzb3ItPnBoaXNbal07CisgICAgICAg
ICAgICAgICAgYm9vbCBjaGFuZ2VSZWYgPSBwaGlOb2RlLT5zaG91bGRHZW5lcmF0ZSgpOworICAg
ICAgICAgICAgICAgIE9wZXJhbmRTdWJzdGl0dXRpb24gc3Vic3RpdHV0aW9uID0gc3Vic3RpdHV0
aW9ucy5vcGVyYW5kKHBoaU5vZGUtPmxvY2FsKCkpOwogI2lmIERGR19FTkFCTEUoREVCVUdfUFJP
UEFHQVRJT05fVkVSQk9TRSkKLSAgICAgICAgICAgICAgICBkYXRhTG9nRigiICAgIFBlcmZvcm1p
bmcgb3BlcmFuZCBzdWJzdGl0dXRpb24gQCV1IC0+IEAldS5cbiIsCi0gICAgICAgICAgICAgICAg
ICAgICAgICBzdWJzdGl0dXRpb24ub2xkQ2hpbGQsIHN1YnN0aXR1dGlvbi5uZXdDaGlsZCk7Cisg
ICAgICAgICAgICAgICAgZGF0YUxvZygiICAgIFBlcmZvcm1pbmcgb3BlcmFuZCBzdWJzdGl0dXRp
b24gIiwgc3Vic3RpdHV0aW9uLCAiLlxuIik7CiAjZW5kaWYKLSAgICAgICAgICAgICAgICBpZiAo
IXBoaU5vZGUuY2hpbGQxKCkpCisgICAgICAgICAgICAgICAgaWYgKCFwaGlOb2RlLT5jaGlsZDEo
KSkKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgaWYgKHBo
aU5vZGUuY2hpbGQxKCkuaW5kZXgoKSA9PSBzdWJzdGl0dXRpb24ub2xkQ2hpbGQpCi0gICAgICAg
ICAgICAgICAgICAgIG1fZ3JhcGguY2hhbmdlSW5kZXgocGhpTm9kZS5jaGlsZHJlbi5jaGlsZDEo
KSwgc3Vic3RpdHV0aW9uLm5ld0NoaWxkLCBjaGFuZ2VSZWYpOwotICAgICAgICAgICAgICAgIGlm
ICghcGhpTm9kZS5jaGlsZDIoKSkKKyAgICAgICAgICAgICAgICBpZiAocGhpTm9kZS0+Y2hpbGQx
KCkgPT0gc3Vic3RpdHV0aW9uLm9sZENoaWxkKQorICAgICAgICAgICAgICAgICAgICBtX2dyYXBo
LmNoYW5nZUNoaWxkKHBoaU5vZGUtPmNoaWxkcmVuLmNoaWxkMSgpLCBzdWJzdGl0dXRpb24ubmV3
Q2hpbGQsIGNoYW5nZVJlZik7CisgICAgICAgICAgICAgICAgaWYgKCFwaGlOb2RlLT5jaGlsZDIo
KSkKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgaWYgKHBo
aU5vZGUuY2hpbGQyKCkuaW5kZXgoKSA9PSBzdWJzdGl0dXRpb24ub2xkQ2hpbGQpCi0gICAgICAg
ICAgICAgICAgICAgIG1fZ3JhcGguY2hhbmdlSW5kZXgocGhpTm9kZS5jaGlsZHJlbi5jaGlsZDIo
KSwgc3Vic3RpdHV0aW9uLm5ld0NoaWxkLCBjaGFuZ2VSZWYpOwotICAgICAgICAgICAgICAgIGlm
ICghcGhpTm9kZS5jaGlsZDMoKSkKKyAgICAgICAgICAgICAgICBpZiAocGhpTm9kZS0+Y2hpbGQy
KCkgPT0gc3Vic3RpdHV0aW9uLm9sZENoaWxkKQorICAgICAgICAgICAgICAgICAgICBtX2dyYXBo
LmNoYW5nZUNoaWxkKHBoaU5vZGUtPmNoaWxkcmVuLmNoaWxkMigpLCBzdWJzdGl0dXRpb24ubmV3
Q2hpbGQsIGNoYW5nZVJlZik7CisgICAgICAgICAgICAgICAgaWYgKCFwaGlOb2RlLT5jaGlsZDMo
KSkKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgaWYgKHBo
aU5vZGUuY2hpbGQzKCkuaW5kZXgoKSA9PSBzdWJzdGl0dXRpb24ub2xkQ2hpbGQpCi0gICAgICAg
ICAgICAgICAgICAgIG1fZ3JhcGguY2hhbmdlSW5kZXgocGhpTm9kZS5jaGlsZHJlbi5jaGlsZDMo
KSwgc3Vic3RpdHV0aW9uLm5ld0NoaWxkLCBjaGFuZ2VSZWYpOworICAgICAgICAgICAgICAgIGlm
IChwaGlOb2RlLT5jaGlsZDMoKSA9PSBzdWJzdGl0dXRpb24ub2xkQ2hpbGQpCisgICAgICAgICAg
ICAgICAgICAgIG1fZ3JhcGguY2hhbmdlQ2hpbGQocGhpTm9kZS0+Y2hpbGRyZW4uY2hpbGQzKCks
IHN1YnN0aXR1dGlvbi5uZXdDaGlsZCwgY2hhbmdlUmVmKTsKICAgICAgICAgICAgIH0KICAgICAg
ICAgfQogICAgICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1NFUGhh
c2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1NFUGhh
c2UuY3BwCShyZXZpc2lvbiAxNDEwNTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0NTRVBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTQsMjQgKzU0LDI0IEBAIHB1YmxpYzoK
ICAgICAKIHByaXZhdGU6CiAgICAgCi0gICAgTm9kZUluZGV4IGNhbm9uaWNhbGl6ZShOb2RlSW5k
ZXggbm9kZUluZGV4KQorICAgIE5vZGUqIGNhbm9uaWNhbGl6ZShOb2RlKiBub2RlKQogICAgIHsK
LSAgICAgICAgaWYgKG5vZGVJbmRleCA9PSBOb05vZGUpCi0gICAgICAgICAgICByZXR1cm4gTm9O
b2RlOworICAgICAgICBpZiAoIW5vZGUpCisgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAg
Ci0gICAgICAgIGlmIChtX2dyYXBoW25vZGVJbmRleF0ub3AoKSA9PSBWYWx1ZVRvSW50MzIpCi0g
ICAgICAgICAgICBub2RlSW5kZXggPSBtX2dyYXBoW25vZGVJbmRleF0uY2hpbGQxKCkuaW5kZXgo
KTsKKyAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gVmFsdWVUb0ludDMyKQorICAgICAgICAgICAg
bm9kZSA9IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKICAgICAgICAgCi0gICAgICAgIHJldHVybiBu
b2RlSW5kZXg7CisgICAgICAgIHJldHVybiBub2RlOwogICAgIH0KLSAgICBOb2RlSW5kZXggY2Fu
b25pY2FsaXplKEVkZ2Ugbm9kZVVzZSkKKyAgICBOb2RlKiBjYW5vbmljYWxpemUoRWRnZSBlZGdl
KQogICAgIHsKLSAgICAgICAgcmV0dXJuIGNhbm9uaWNhbGl6ZShub2RlVXNlLmluZGV4VW5jaGVj
a2VkKCkpOworICAgICAgICByZXR1cm4gY2Fub25pY2FsaXplKGVkZ2Uubm9kZSgpKTsKICAgICB9
CiAgICAgCiAgICAgdW5zaWduZWQgZW5kSW5kZXhGb3JQdXJlQ1NFKCkKICAgICB7Ci0gICAgICAg
IHVuc2lnbmVkIHJlc3VsdCA9IG1fbGFzdFNlZW5bbV9ncmFwaFttX2NvbXBpbGVJbmRleF0ub3Ao
KV07CisgICAgICAgIHVuc2lnbmVkIHJlc3VsdCA9IG1fbGFzdFNlZW5bbV9jdXJyZW50Tm9kZS0+
b3AoKV07CiAgICAgICAgIGlmIChyZXN1bHQgPT0gVUlOVF9NQVgpCiAgICAgICAgICAgICByZXN1
bHQgPSAwOwogICAgICAgICBlbHNlCkBAIC04MywzMDggKzgzLDMwMyBAQCBwcml2YXRlOgogICAg
ICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIAotICAgIE5vZGVJbmRleCBwdXJlQ1NFKE5vZGUm
IG5vZGUpCisgICAgTm9kZSogcHVyZUNTRShOb2RlKiBub2RlKQogICAgIHsKLSAgICAgICAgTm9k
ZUluZGV4IGNoaWxkMSA9IGNhbm9uaWNhbGl6ZShub2RlLmNoaWxkMSgpKTsKLSAgICAgICAgTm9k
ZUluZGV4IGNoaWxkMiA9IGNhbm9uaWNhbGl6ZShub2RlLmNoaWxkMigpKTsKLSAgICAgICAgTm9k
ZUluZGV4IGNoaWxkMyA9IGNhbm9uaWNhbGl6ZShub2RlLmNoaWxkMygpKTsKKyAgICAgICAgTm9k
ZSogY2hpbGQxID0gY2Fub25pY2FsaXplKG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgTm9kZSog
Y2hpbGQyID0gY2Fub25pY2FsaXplKG5vZGUtPmNoaWxkMigpKTsKKyAgICAgICAgTm9kZSogY2hp
bGQzID0gY2Fub25pY2FsaXplKG5vZGUtPmNoaWxkMygpKTsKICAgICAgICAgCiAgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IGVuZEluZGV4Rm9yUHVyZUNTRSgpOyBpLS07KSB7Ci0gICAgICAgICAg
ICBOb2RlSW5kZXggaW5kZXggPSBtX2N1cnJlbnRCbG9jay0+YXQoaSk7Ci0gICAgICAgICAgICBp
ZiAoaW5kZXggPT0gY2hpbGQxIHx8IGluZGV4ID09IGNoaWxkMiB8fCBpbmRleCA9PSBjaGlsZDMp
CisgICAgICAgICAgICBOb2RlKiBvdGhlck5vZGUgPSBtX2N1cnJlbnRCbG9jay0+YXQoaSk7Cisg
ICAgICAgICAgICBpZiAob3RoZXJOb2RlID09IGNoaWxkMSB8fCBvdGhlck5vZGUgPT0gY2hpbGQy
IHx8IG90aGVyTm9kZSA9PSBjaGlsZDMpCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAg
ICAgICAgIE5vZGUmIG90aGVyTm9kZSA9IG1fZ3JhcGhbaW5kZXhdOwotICAgICAgICAgICAgaWYg
KCFvdGhlck5vZGUuc2hvdWxkR2VuZXJhdGUoKSkKKyAgICAgICAgICAgIGlmICghb3RoZXJOb2Rl
LT5zaG91bGRHZW5lcmF0ZSgpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAg
ICAgCi0gICAgICAgICAgICBpZiAobm9kZS5vcCgpICE9IG90aGVyTm9kZS5vcCgpKQorICAgICAg
ICAgICAgaWYgKG5vZGUtPm9wKCkgIT0gb3RoZXJOb2RlLT5vcCgpKQogICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAobm9kZS5hcml0aE5vZGVG
bGFncygpICE9IG90aGVyTm9kZS5hcml0aE5vZGVGbGFncygpKQorICAgICAgICAgICAgaWYgKG5v
ZGUtPmFyaXRoTm9kZUZsYWdzKCkgIT0gb3RoZXJOb2RlLT5hcml0aE5vZGVGbGFncygpKQogICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBOb2RlSW5k
ZXggb3RoZXJDaGlsZCA9IGNhbm9uaWNhbGl6ZShvdGhlck5vZGUuY2hpbGQxKCkpOwotICAgICAg
ICAgICAgaWYgKG90aGVyQ2hpbGQgPT0gTm9Ob2RlKQotICAgICAgICAgICAgICAgIHJldHVybiBp
bmRleDsKKyAgICAgICAgICAgIE5vZGUqIG90aGVyQ2hpbGQgPSBjYW5vbmljYWxpemUob3RoZXJO
b2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICBpZiAoIW90aGVyQ2hpbGQpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIG90aGVyTm9kZTsKICAgICAgICAgICAgIGlmIChvdGhlckNoaWxkICE9IGNo
aWxkMSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIAotICAgICAgICAg
ICAgb3RoZXJDaGlsZCA9IGNhbm9uaWNhbGl6ZShvdGhlck5vZGUuY2hpbGQyKCkpOwotICAgICAg
ICAgICAgaWYgKG90aGVyQ2hpbGQgPT0gTm9Ob2RlKQotICAgICAgICAgICAgICAgIHJldHVybiBp
bmRleDsKKyAgICAgICAgICAgIG90aGVyQ2hpbGQgPSBjYW5vbmljYWxpemUob3RoZXJOb2RlLT5j
aGlsZDIoKSk7CisgICAgICAgICAgICBpZiAoIW90aGVyQ2hpbGQpCisgICAgICAgICAgICAgICAg
cmV0dXJuIG90aGVyTm9kZTsKICAgICAgICAgICAgIGlmIChvdGhlckNoaWxkICE9IGNoaWxkMikK
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgb3Ro
ZXJDaGlsZCA9IGNhbm9uaWNhbGl6ZShvdGhlck5vZGUuY2hpbGQzKCkpOwotICAgICAgICAgICAg
aWYgKG90aGVyQ2hpbGQgPT0gTm9Ob2RlKQotICAgICAgICAgICAgICAgIHJldHVybiBpbmRleDsK
KyAgICAgICAgICAgIG90aGVyQ2hpbGQgPSBjYW5vbmljYWxpemUob3RoZXJOb2RlLT5jaGlsZDMo
KSk7CisgICAgICAgICAgICBpZiAoIW90aGVyQ2hpbGQpCisgICAgICAgICAgICAgICAgcmV0dXJu
IG90aGVyTm9kZTsKICAgICAgICAgICAgIGlmIChvdGhlckNoaWxkICE9IGNoaWxkMykKICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgcmV0dXJuIGlu
ZGV4OworICAgICAgICAgICAgcmV0dXJuIG90aGVyTm9kZTsKICAgICAgICAgfQotICAgICAgICBy
ZXR1cm4gTm9Ob2RlOworICAgICAgICByZXR1cm4gMDsKICAgICB9CiAgICAgCi0gICAgTm9kZUlu
ZGV4IGNvbnN0YW50Q1NFKE5vZGUmIG5vZGUpCisgICAgTm9kZSogY29uc3RhbnRDU0UoTm9kZSog
bm9kZSkKICAgICB7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGVuZEluZGV4Rm9yUHVyZUNT
RSgpOyBpLS07KSB7Ci0gICAgICAgICAgICBOb2RlSW5kZXggaW5kZXggPSBtX2N1cnJlbnRCbG9j
ay0+YXQoaSk7Ci0gICAgICAgICAgICBOb2RlJiBvdGhlck5vZGUgPSBtX2dyYXBoW2luZGV4XTsK
LSAgICAgICAgICAgIGlmIChvdGhlck5vZGUub3AoKSAhPSBKU0NvbnN0YW50KQorICAgICAgICAg
ICAgTm9kZSogb3RoZXJOb2RlID0gbV9jdXJyZW50QmxvY2stPmF0KGkpOworICAgICAgICAgICAg
aWYgKG90aGVyTm9kZS0+b3AoKSAhPSBKU0NvbnN0YW50KQogICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAob3RoZXJOb2RlLmNvbnN0YW50TnVt
YmVyKCkgIT0gbm9kZS5jb25zdGFudE51bWJlcigpKQorICAgICAgICAgICAgaWYgKCFvdGhlck5v
ZGUtPnNob3VsZEdlbmVyYXRlKCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAg
ICAgICAKLSAgICAgICAgICAgIHJldHVybiBpbmRleDsKKyAgICAgICAgICAgIGlmIChvdGhlck5v
ZGUtPmNvbnN0YW50TnVtYmVyKCkgIT0gbm9kZS0+Y29uc3RhbnROdW1iZXIoKSkKKyAgICAgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgcmV0dXJuIG90aGVy
Tm9kZTsKICAgICAgICAgfQotICAgICAgICByZXR1cm4gTm9Ob2RlOworICAgICAgICByZXR1cm4g
MDsKICAgICB9CiAgICAgCi0gICAgTm9kZUluZGV4IHdlYWtDb25zdGFudENTRShOb2RlJiBub2Rl
KQorICAgIE5vZGUqIHdlYWtDb25zdGFudENTRShOb2RlKiBub2RlKQogICAgIHsKICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gZW5kSW5kZXhGb3JQdXJlQ1NFKCk7IGktLTspIHsKLSAgICAgICAg
ICAgIE5vZGVJbmRleCBpbmRleCA9IG1fY3VycmVudEJsb2NrLT5hdChpKTsKLSAgICAgICAgICAg
IE5vZGUmIG90aGVyTm9kZSA9IG1fZ3JhcGhbaW5kZXhdOwotICAgICAgICAgICAgaWYgKG90aGVy
Tm9kZS5vcCgpICE9IFdlYWtKU0NvbnN0YW50KQorICAgICAgICAgICAgTm9kZSogb3RoZXJOb2Rl
ID0gbV9jdXJyZW50QmxvY2stPmF0KGkpOworICAgICAgICAgICAgaWYgKG90aGVyTm9kZS0+b3Ao
KSAhPSBXZWFrSlNDb25zdGFudCkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgaWYgKCFvdGhlck5vZGUtPnNob3VsZEdlbmVyYXRlKCkpCiAgICAg
ICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChvdGhl
ck5vZGUud2Vha0NvbnN0YW50KCkgIT0gbm9kZS53ZWFrQ29uc3RhbnQoKSkKKyAgICAgICAgICAg
IGlmIChvdGhlck5vZGUtPndlYWtDb25zdGFudCgpICE9IG5vZGUtPndlYWtDb25zdGFudCgpKQog
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgCi0gICAgICAgICAgICByZXR1
cm4gaW5kZXg7CisgICAgICAgICAgICByZXR1cm4gb3RoZXJOb2RlOwogICAgICAgICB9Ci0gICAg
ICAgIHJldHVybiBOb05vZGU7CisgICAgICAgIHJldHVybiAwOwogICAgIH0KICAgICAKLSAgICBO
b2RlSW5kZXggZ2V0Q2FsbGVlTG9hZEVsaW1pbmF0aW9uKElubGluZUNhbGxGcmFtZSogaW5saW5l
Q2FsbEZyYW1lKQorICAgIE5vZGUqIGdldENhbGxlZUxvYWRFbGltaW5hdGlvbihJbmxpbmVDYWxs
RnJhbWUqIGlubGluZUNhbGxGcmFtZSkKICAgICB7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IG1faW5kZXhJbkJsb2NrOyBpLS07KSB7Ci0gICAgICAgICAgICBOb2RlSW5kZXggaW5kZXggPSBt
X2N1cnJlbnRCbG9jay0+YXQoaSk7Ci0gICAgICAgICAgICBOb2RlJiBub2RlID0gbV9ncmFwaFtp
bmRleF07Ci0gICAgICAgICAgICBpZiAoIW5vZGUuc2hvdWxkR2VuZXJhdGUoKSkKKyAgICAgICAg
ICAgIE5vZGUqIG5vZGUgPSBtX2N1cnJlbnRCbG9jay0+YXQoaSk7CisgICAgICAgICAgICBpZiAo
IW5vZGUtPnNob3VsZEdlbmVyYXRlKCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgICAgICBpZiAobm9kZS5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSAhPSBpbmxpbmVDYWxs
RnJhbWUpCisgICAgICAgICAgICBpZiAobm9kZS0+Y29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUg
IT0gaW5saW5lQ2FsbEZyYW1lKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAg
ICAgc3dpdGNoIChub2RlLm9wKCkpIHsKKyAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkg
ewogICAgICAgICAgICAgY2FzZSBHZXRDYWxsZWU6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGlu
ZGV4OworICAgICAgICAgICAgICAgIHJldHVybiBub2RlOwogICAgICAgICAgICAgY2FzZSBTZXRD
YWxsZWU6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG5vZGUuY2hpbGQxKCkuaW5kZXgoKTsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gbm9kZS0+Y2hpbGQxKCkubm9kZSgpOwogICAgICAgICAgICAg
ZGVmYXVsdDoKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAg
fQotICAgICAgICByZXR1cm4gTm9Ob2RlOworICAgICAgICByZXR1cm4gMDsKICAgICB9CiAgICAg
Ci0gICAgTm9kZUluZGV4IGdldEFycmF5TGVuZ3RoRWxpbWluYXRpb24oTm9kZUluZGV4IGFycmF5
KQorICAgIE5vZGUqIGdldEFycmF5TGVuZ3RoRWxpbWluYXRpb24oTm9kZSogYXJyYXkpCiAgICAg
ewogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2luZGV4SW5CbG9jazsgaS0tOykgewotICAg
ICAgICAgICAgTm9kZUluZGV4IGluZGV4ID0gbV9jdXJyZW50QmxvY2stPmF0KGkpOwotICAgICAg
ICAgICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhbaW5kZXhdOwotICAgICAgICAgICAgaWYgKCFub2Rl
LnNob3VsZEdlbmVyYXRlKCkpCisgICAgICAgICAgICBOb2RlKiBub2RlID0gbV9jdXJyZW50Qmxv
Y2stPmF0KGkpOworICAgICAgICAgICAgaWYgKCFub2RlLT5zaG91bGRHZW5lcmF0ZSgpKQogICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgc3dpdGNoIChub2RlLm9wKCkpIHsK
KyAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewogICAgICAgICAgICAgY2FzZSBHZXRB
cnJheUxlbmd0aDoKLSAgICAgICAgICAgICAgICBpZiAobm9kZS5jaGlsZDEoKSA9PSBhcnJheSkK
LSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGluZGV4OworICAgICAgICAgICAgICAgIGlmIChu
b2RlLT5jaGlsZDEoKSA9PSBhcnJheSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGU7
CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBj
YXNlIFB1dEJ5VmFsOgogICAgICAgICAgICAgICAgIGlmICghbV9ncmFwaC5ieVZhbElzUHVyZShu
b2RlKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5vTm9kZTsKLSAgICAgICAgICAgICAg
ICBpZiAobm9kZS5hcnJheU1vZGUoKS5tYXlTdG9yZVRvSG9sZSgpKQotICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gTm9Ob2RlOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAg
ICAgICAgICAgICBpZiAobm9kZS0+YXJyYXlNb2RlKCkubWF5U3RvcmVUb0hvbGUoKSkKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICAgICAgCiAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIGlmIChtX2dy
YXBoLmNsb2JiZXJzV29ybGQoaW5kZXgpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gTm9O
b2RlOworICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLmNsb2JiZXJzV29ybGQobm9kZSkpCisg
ICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0g
ICAgICAgIHJldHVybiBOb05vZGU7CisgICAgICAgIHJldHVybiAwOwogICAgIH0KICAgICAKLSAg
ICBOb2RlSW5kZXggZ2xvYmFsVmFyTG9hZEVsaW1pbmF0aW9uKFdyaXRlQmFycmllcjxVbmtub3du
PiogcmVnaXN0ZXJQb2ludGVyKQorICAgIE5vZGUqIGdsb2JhbFZhckxvYWRFbGltaW5hdGlvbihX
cml0ZUJhcnJpZXI8VW5rbm93bj4qIHJlZ2lzdGVyUG9pbnRlcikKICAgICB7CiAgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IG1faW5kZXhJbkJsb2NrOyBpLS07KSB7Ci0gICAgICAgICAgICBOb2Rl
SW5kZXggaW5kZXggPSBtX2N1cnJlbnRCbG9jay0+YXQoaSk7Ci0gICAgICAgICAgICBOb2RlJiBu
b2RlID0gbV9ncmFwaFtpbmRleF07Ci0gICAgICAgICAgICBpZiAoIW5vZGUuc2hvdWxkR2VuZXJh
dGUoKSkKKyAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBtX2N1cnJlbnRCbG9jay0+YXQoaSk7Cisg
ICAgICAgICAgICBpZiAoIW5vZGUtPnNob3VsZEdlbmVyYXRlKCkpCiAgICAgICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgICAgICBzd2l0Y2ggKG5vZGUub3AoKSkgeworICAgICAgICAgICAg
c3dpdGNoIChub2RlLT5vcCgpKSB7CiAgICAgICAgICAgICBjYXNlIEdldEdsb2JhbFZhcjoKLSAg
ICAgICAgICAgICAgICBpZiAobm9kZS5yZWdpc3RlclBvaW50ZXIoKSA9PSByZWdpc3RlclBvaW50
ZXIpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBpbmRleDsKKyAgICAgICAgICAgICAgICBp
ZiAobm9kZS0+cmVnaXN0ZXJQb2ludGVyKCkgPT0gcmVnaXN0ZXJQb2ludGVyKQorICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gbm9kZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgIGNhc2UgUHV0R2xvYmFsVmFyOgotICAgICAgICAgICAgICAgIGlmIChub2RlLnJlZ2lzdGVy
UG9pbnRlcigpID09IHJlZ2lzdGVyUG9pbnRlcikKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IG5vZGUuY2hpbGQxKCkuaW5kZXgoKTsKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+cmVnaXN0
ZXJQb2ludGVyKCkgPT0gcmVnaXN0ZXJQb2ludGVyKQorICAgICAgICAgICAgICAgICAgICByZXR1
cm4gbm9kZS0+Y2hpbGQxKCkubm9kZSgpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIGlmIChtX2dyYXBoLmNsb2JiZXJzV29ybGQoaW5kZXgpKQorICAgICAgICAgICAg
aWYgKG1fZ3JhcGguY2xvYmJlcnNXb3JsZChub2RlKSkKICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgfQotICAgICAgICByZXR1cm4gTm9Ob2RlOworICAgICAgICByZXR1cm4gMDsKICAg
ICB9CiAgICAgCi0gICAgTm9kZUluZGV4IHNjb3BlZFZhckxvYWRFbGltaW5hdGlvbihOb2RlSW5k
ZXggcmVnaXN0ZXJzLCB1bnNpZ25lZCB2YXJOdW1iZXIpCisgICAgTm9kZSogc2NvcGVkVmFyTG9h
ZEVsaW1pbmF0aW9uKE5vZGUqIHJlZ2lzdGVycywgdW5zaWduZWQgdmFyTnVtYmVyKQogICAgIHsK
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9pbmRleEluQmxvY2s7IGktLTspIHsKLSAgICAg
ICAgICAgIE5vZGVJbmRleCBpbmRleCA9IG1fY3VycmVudEJsb2NrLT5hdChpKTsKLSAgICAgICAg
ICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW2luZGV4XTsKLSAgICAgICAgICAgIGlmICghbm9kZS5z
aG91bGRHZW5lcmF0ZSgpKQorICAgICAgICAgICAgTm9kZSogbm9kZSA9IG1fY3VycmVudEJsb2Nr
LT5hdChpKTsKKyAgICAgICAgICAgIGlmICghbm9kZS0+c2hvdWxkR2VuZXJhdGUoKSkKICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIHN3aXRjaCAobm9kZS5vcCgpKSB7Cisg
ICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKICAgICAgICAgICAgIGNhc2UgR2V0U2Nv
cGVkVmFyOiB7Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGUuY2hpbGQxKCkgPT0gcmVnaXN0ZXJz
ICYmIG5vZGUudmFyTnVtYmVyKCkgPT0gdmFyTnVtYmVyKQotICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gaW5kZXg7CisgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpID09IHJlZ2lz
dGVycyAmJiBub2RlLT52YXJOdW1iZXIoKSA9PSB2YXJOdW1iZXIpCisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBub2RlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfSAK
ICAgICAgICAgICAgIGNhc2UgUHV0U2NvcGVkVmFyOiB7Ci0gICAgICAgICAgICAgICAgaWYgKG5v
ZGUuY2hpbGQyKCkgPT0gcmVnaXN0ZXJzICYmIG5vZGUudmFyTnVtYmVyKCkgPT0gdmFyTnVtYmVy
KQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gbm9kZS5jaGlsZDMoKS5pbmRleCgpOworICAg
ICAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDIoKSA9PSByZWdpc3RlcnMgJiYgbm9kZS0+dmFy
TnVtYmVyKCkgPT0gdmFyTnVtYmVyKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gbm9kZS0+
Y2hpbGQzKCkubm9kZSgpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQog
ICAgICAgICAgICAgY2FzZSBTZXRMb2NhbDogewotICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNj
ZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhID0gbm9kZS52YXJpYWJsZUFjY2Vzc0RhdGEoKTsK
KyAgICAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9
IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOwogICAgICAgICAgICAgICAgIGlmICh2YXJpYWJs
ZUFjY2Vzc0RhdGEtPmlzQ2FwdHVyZWQoKQogICAgICAgICAgICAgICAgICAgICAmJiB2YXJpYWJs
ZUFjY2Vzc0RhdGEtPmxvY2FsKCkgPT0gc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPih2YXJO
dW1iZXIpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gTm9Ob2RlOworICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBpZiAobV9ncmFwaC5jbG9iYmVyc1dvcmxkKGluZGV4KSkKKyAgICAg
ICAgICAgIGlmIChtX2dyYXBoLmNsb2JiZXJzV29ybGQobm9kZSkpCiAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIE5vTm9kZTsKKyAgICAgICAgcmV0dXJu
IDA7CiAgICAgfQogICAgIAogICAgIGJvb2wgZ2xvYmFsVmFyV2F0Y2hwb2ludEVsaW1pbmF0aW9u
KFdyaXRlQmFycmllcjxVbmtub3duPiogcmVnaXN0ZXJQb2ludGVyKQogICAgIHsKICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gbV9pbmRleEluQmxvY2s7IGktLTspIHsKLSAgICAgICAgICAgIE5v
ZGVJbmRleCBpbmRleCA9IG1fY3VycmVudEJsb2NrLT5hdChpKTsKLSAgICAgICAgICAgIE5vZGUm
IG5vZGUgPSBtX2dyYXBoW2luZGV4XTsKLSAgICAgICAgICAgIGlmICghbm9kZS5zaG91bGRHZW5l
cmF0ZSgpKQorICAgICAgICAgICAgTm9kZSogbm9kZSA9IG1fY3VycmVudEJsb2NrLT5hdChpKTsK
KyAgICAgICAgICAgIGlmICghbm9kZS0+c2hvdWxkR2VuZXJhdGUoKSkKICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKLSAgICAgICAgICAgIHN3aXRjaCAobm9kZS5vcCgpKSB7CisgICAgICAgICAg
ICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKICAgICAgICAgICAgIGNhc2UgR2xvYmFsVmFyV2F0Y2hw
b2ludDoKLSAgICAgICAgICAgICAgICBpZiAobm9kZS5yZWdpc3RlclBvaW50ZXIoKSA9PSByZWdp
c3RlclBvaW50ZXIpCisgICAgICAgICAgICAgICAgaWYgKG5vZGUtPnJlZ2lzdGVyUG9pbnRlcigp
ID09IHJlZ2lzdGVyUG9pbnRlcikKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIFB1dEdsb2JhbFZhcjoKLSAg
ICAgICAgICAgICAgICBpZiAobm9kZS5yZWdpc3RlclBvaW50ZXIoKSA9PSByZWdpc3RlclBvaW50
ZXIpCisgICAgICAgICAgICAgICAgaWYgKG5vZGUtPnJlZ2lzdGVyUG9pbnRlcigpID09IHJlZ2lz
dGVyUG9pbnRlcikKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChtX2dyYXBoLmNsb2JiZXJzV29ybGQo
aW5kZXgpKQorICAgICAgICAgICAgaWYgKG1fZ3JhcGguY2xvYmJlcnNXb3JsZChub2RlKSkKICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgfQogICAgIAotICAgIE5vZGVJbmRleCBnbG9iYWxWYXJTdG9yZUVsaW1pbmF0aW9uKFdyaXRl
QmFycmllcjxVbmtub3duPiogcmVnaXN0ZXJQb2ludGVyKQorICAgIE5vZGUqIGdsb2JhbFZhclN0
b3JlRWxpbWluYXRpb24oV3JpdGVCYXJyaWVyPFVua25vd24+KiByZWdpc3RlclBvaW50ZXIpCiAg
ICAgewogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2luZGV4SW5CbG9jazsgaS0tOykgewot
ICAgICAgICAgICAgTm9kZUluZGV4IGluZGV4ID0gbV9jdXJyZW50QmxvY2stPmF0KGkpOwotICAg
ICAgICAgICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhbaW5kZXhdOwotICAgICAgICAgICAgaWYgKCFu
b2RlLnNob3VsZEdlbmVyYXRlKCkpCisgICAgICAgICAgICBOb2RlKiBub2RlID0gbV9jdXJyZW50
QmxvY2stPmF0KGkpOworICAgICAgICAgICAgaWYgKCFub2RlLT5zaG91bGRHZW5lcmF0ZSgpKQog
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgc3dpdGNoIChub2RlLm9wKCkp
IHsKKyAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewogICAgICAgICAgICAgY2FzZSBQ
dXRHbG9iYWxWYXI6CiAgICAgICAgICAgICBjYXNlIFB1dEdsb2JhbFZhckNoZWNrOgotICAgICAg
ICAgICAgICAgIGlmIChub2RlLnJlZ2lzdGVyUG9pbnRlcigpID09IHJlZ2lzdGVyUG9pbnRlcikK
LSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGluZGV4OworICAgICAgICAgICAgICAgIGlmIChu
b2RlLT5yZWdpc3RlclBvaW50ZXIoKSA9PSByZWdpc3RlclBvaW50ZXIpCisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBub2RlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
ICAgIAogICAgICAgICAgICAgY2FzZSBHZXRHbG9iYWxWYXI6Ci0gICAgICAgICAgICAgICAgaWYg
KG5vZGUucmVnaXN0ZXJQb2ludGVyKCkgPT0gcmVnaXN0ZXJQb2ludGVyKQotICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gTm9Ob2RlOworICAgICAgICAgICAgICAgIGlmIChub2RlLT5yZWdpc3Rl
clBvaW50ZXIoKSA9PSByZWdpc3RlclBvaW50ZXIpCisgICAgICAgICAgICAgICAgICAgIHJldHVy
biAwOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIAogICAgICAgICAg
ICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIGlmIChtX2dyYXBoLmNsb2JiZXJzV29ybGQoaW5kZXgpIHx8IG5vZGUuY2FuRXhpdCgp
KQotICAgICAgICAgICAgICAgIHJldHVybiBOb05vZGU7CisgICAgICAgICAgICBpZiAobV9ncmFw
aC5jbG9iYmVyc1dvcmxkKG5vZGUpIHx8IG5vZGUtPmNhbkV4aXQoKSkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gMDsKICAgICAgICAgfQotICAgICAgICByZXR1cm4gTm9Ob2RlOworICAgICAgICBy
ZXR1cm4gMDsKICAgICB9CiAgICAgCi0gICAgTm9kZUluZGV4IHNjb3BlZFZhclN0b3JlRWxpbWlu
YXRpb24oTm9kZUluZGV4IHNjb3BlLCBOb2RlSW5kZXggcmVnaXN0ZXJzLCB1bnNpZ25lZCB2YXJO
dW1iZXIpCisgICAgTm9kZSogc2NvcGVkVmFyU3RvcmVFbGltaW5hdGlvbihOb2RlKiBzY29wZSwg
Tm9kZSogcmVnaXN0ZXJzLCB1bnNpZ25lZCB2YXJOdW1iZXIpCiAgICAgewogICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSBtX2luZGV4SW5CbG9jazsgaS0tOykgewotICAgICAgICAgICAgTm9kZUlu
ZGV4IGluZGV4ID0gbV9jdXJyZW50QmxvY2stPmF0KGkpOwotICAgICAgICAgICAgTm9kZSYgbm9k
ZSA9IG1fZ3JhcGhbaW5kZXhdOwotICAgICAgICAgICAgaWYgKCFub2RlLnNob3VsZEdlbmVyYXRl
KCkpCisgICAgICAgICAgICBOb2RlKiBub2RlID0gbV9jdXJyZW50QmxvY2stPmF0KGkpOworICAg
ICAgICAgICAgaWYgKCFub2RlLT5zaG91bGRHZW5lcmF0ZSgpKQogICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwotICAgICAgICAgICAgc3dpdGNoIChub2RlLm9wKCkpIHsKKyAgICAgICAgICAgIHN3
aXRjaCAobm9kZS0+b3AoKSkgewogICAgICAgICAgICAgY2FzZSBQdXRTY29wZWRWYXI6IHsKLSAg
ICAgICAgICAgICAgICBpZiAobm9kZS5jaGlsZDEoKSA9PSBzY29wZSAmJiBub2RlLmNoaWxkMigp
ID09IHJlZ2lzdGVycyAmJiBub2RlLnZhck51bWJlcigpID09IHZhck51bWJlcikKLSAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGluZGV4OworICAgICAgICAgICAgICAgIGlmIChub2RlLT5jaGls
ZDEoKSA9PSBzY29wZSAmJiBub2RlLT5jaGlsZDIoKSA9PSByZWdpc3RlcnMgJiYgbm9kZS0+dmFy
TnVtYmVyKCkgPT0gdmFyTnVtYmVyKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gbm9kZTsK
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAK
ICAgICAgICAgICAgIGNhc2UgR2V0U2NvcGVkVmFyOiB7CiAgICAgICAgICAgICAgICAgLy8gTGV0
J3MgYmUgY29uc2VydmF0aXZlLgotICAgICAgICAgICAgICAgIGlmIChub2RlLnZhck51bWJlcigp
ID09IHZhck51bWJlcikKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5vTm9kZTsKKyAgICAg
ICAgICAgICAgICBpZiAobm9kZS0+dmFyTnVtYmVyKCkgPT0gdmFyTnVtYmVyKQorICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGNhc2UgR2V0TG9jYWw6IHsKLSAgICAg
ICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9IG5vZGUu
dmFyaWFibGVBY2Nlc3NEYXRhKCk7CisgICAgICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRh
KiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKICAgICAg
ICAgICAgICAgICBpZiAodmFyaWFibGVBY2Nlc3NEYXRhLT5pc0NhcHR1cmVkKCkKICAgICAgICAg
ICAgICAgICAgICAgJiYgdmFyaWFibGVBY2Nlc3NEYXRhLT5sb2NhbCgpID09IHN0YXRpY19jYXN0
PFZpcnR1YWxSZWdpc3Rlcj4odmFyTnVtYmVyKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IE5vTm9kZTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAobV9ncmFwaC5jbG9i
YmVyc1dvcmxkKGluZGV4KSB8fCBub2RlLmNhbkV4aXQoKSkKLSAgICAgICAgICAgICAgICByZXR1
cm4gTm9Ob2RlOworICAgICAgICAgICAgaWYgKG1fZ3JhcGguY2xvYmJlcnNXb3JsZChub2RlKSB8
fCBub2RlLT5jYW5FeGl0KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIH0K
LSAgICAgICAgcmV0dXJuIE5vTm9kZTsKKyAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogICAgIAot
ICAgIE5vZGVJbmRleCBnZXRCeVZhbExvYWRFbGltaW5hdGlvbihOb2RlSW5kZXggY2hpbGQxLCBO
b2RlSW5kZXggY2hpbGQyKQorICAgIE5vZGUqIGdldEJ5VmFsTG9hZEVsaW1pbmF0aW9uKE5vZGUq
IGNoaWxkMSwgTm9kZSogY2hpbGQyKQogICAgIHsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
bV9pbmRleEluQmxvY2s7IGktLTspIHsKLSAgICAgICAgICAgIE5vZGVJbmRleCBpbmRleCA9IG1f
Y3VycmVudEJsb2NrLT5hdChpKTsKLSAgICAgICAgICAgIGlmIChpbmRleCA9PSBjaGlsZDEgfHwg
aW5kZXggPT0gY2Fub25pY2FsaXplKGNoaWxkMikpIAorICAgICAgICAgICAgTm9kZSogbm9kZSA9
IG1fY3VycmVudEJsb2NrLT5hdChpKTsKKyAgICAgICAgICAgIGlmIChub2RlID09IGNoaWxkMSB8
fCBub2RlID09IGNhbm9uaWNhbGl6ZShjaGlsZDIpKSAKICAgICAgICAgICAgICAgICBicmVhazsK
IAotICAgICAgICAgICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhbaW5kZXhdOwotICAgICAgICAgICAg
aWYgKCFub2RlLnNob3VsZEdlbmVyYXRlKCkpCisgICAgICAgICAgICBpZiAoIW5vZGUtPnNob3Vs
ZEdlbmVyYXRlKCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBzd2l0
Y2ggKG5vZGUub3AoKSkgeworICAgICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CiAgICAg
ICAgICAgICBjYXNlIEdldEJ5VmFsOgogICAgICAgICAgICAgICAgIGlmICghbV9ncmFwaC5ieVZh
bElzUHVyZShub2RlKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5vTm9kZTsKLSAgICAg
ICAgICAgICAgICBpZiAobm9kZS5jaGlsZDEoKSA9PSBjaGlsZDEgJiYgY2Fub25pY2FsaXplKG5v
ZGUuY2hpbGQyKCkpID09IGNhbm9uaWNhbGl6ZShjaGlsZDIpKQotICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gaW5kZXg7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAg
ICAgICAgIGlmIChub2RlLT5jaGlsZDEoKSA9PSBjaGlsZDEgJiYgY2Fub25pY2FsaXplKG5vZGUt
PmNoaWxkMigpKSA9PSBjYW5vbmljYWxpemUoY2hpbGQyKSkKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIG5vZGU7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIFB1
dEJ5VmFsOgogICAgICAgICAgICAgY2FzZSBQdXRCeVZhbEFsaWFzOiB7CiAgICAgICAgICAgICAg
ICAgaWYgKCFtX2dyYXBoLmJ5VmFsSXNQdXJlKG5vZGUpKQotICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gTm9Ob2RlOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAg
ICAgICBpZiAobV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKSA9PSBjaGlsZDEgJiYgY2Fub25p
Y2FsaXplKG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkpID09IGNhbm9uaWNhbGl6ZShjaGls
ZDIpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gbV9ncmFwaC52YXJBcmdDaGlsZChub2Rl
LCAyKS5pbmRleCgpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gbV9ncmFwaC52YXJBcmdD
aGlsZChub2RlLCAyKS5ub2RlKCk7CiAgICAgICAgICAgICAgICAgLy8gV2UgbXVzdCBhc3N1bWUg
dGhhdCB0aGUgUHV0QnlWYWwgd2lsbCBjbG9iYmVyIHRoZSBsb2NhdGlvbiB3ZSdyZSBnZXR0aW5n
IGZyb20uCiAgICAgICAgICAgICAgICAgLy8gRklYTUU6IFdlIGNhbiBkbyBiZXR0ZXI7IGlmIHdl
IGtub3cgdGhhdCB0aGUgUHV0QnlWYWwgaXMgYWNjZXNzaW5nIGFuIGFycmF5IG9mIGEKICAgICAg
ICAgICAgICAgICAvLyBkaWZmZXJlbnQgdHlwZSB0aGFuIHRoZSBHZXRCeVZhbCwgdGhlbiB3ZSBr
bm93IHRoYXQgdGhleSB3b24ndCBjbG9iYmVyIGVhY2ggb3RoZXIuCi0gICAgICAgICAgICAgICAg
cmV0dXJuIE5vTm9kZTsKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIGNhc2UgUHV0U3RydWN0dXJlOgogICAgICAgICAgICAgY2FzZSBQdXRCeU9m
ZnNldDoKQEAgLTM5NCw3MiArMzg5LDY5IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgLy8g
dGhlIEdldEJ5VmFsLgogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgZGVmYXVs
dDoKLSAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC5jbG9iYmVyc1dvcmxkKGluZGV4KSkKLSAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIE5vTm9kZTsKKyAgICAgICAgICAgICAgICBpZiAobV9n
cmFwaC5jbG9iYmVyc1dvcmxkKG5vZGUpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsK
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAg
ICByZXR1cm4gTm9Ob2RlOworICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKLSAgICBib29sIGNo
ZWNrRnVuY3Rpb25FbGltaW5hdGlvbihKU0NlbGwqIGZ1bmN0aW9uLCBOb2RlSW5kZXggY2hpbGQx
KQorICAgIGJvb2wgY2hlY2tGdW5jdGlvbkVsaW1pbmF0aW9uKEpTQ2VsbCogZnVuY3Rpb24sIE5v
ZGUqIGNoaWxkMSkKICAgICB7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGVuZEluZGV4Rm9y
UHVyZUNTRSgpOyBpLS07KSB7Ci0gICAgICAgICAgICBOb2RlSW5kZXggaW5kZXggPSBtX2N1cnJl
bnRCbG9jay0+YXQoaSk7Ci0gICAgICAgICAgICBpZiAoaW5kZXggPT0gY2hpbGQxKSAKKyAgICAg
ICAgICAgIE5vZGUqIG5vZGUgPSBtX2N1cnJlbnRCbG9jay0+YXQoaSk7CisgICAgICAgICAgICBp
ZiAobm9kZSA9PSBjaGlsZDEpIAogICAgICAgICAgICAgICAgIGJyZWFrOwogCi0gICAgICAgICAg
ICBOb2RlJiBub2RlID0gbV9ncmFwaFtpbmRleF07Ci0gICAgICAgICAgICBpZiAobm9kZS5vcCgp
ID09IENoZWNrRnVuY3Rpb24gJiYgbm9kZS5jaGlsZDEoKSA9PSBjaGlsZDEgJiYgbm9kZS5mdW5j
dGlvbigpID09IGZ1bmN0aW9uKQorICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gQ2hlY2tG
dW5jdGlvbiAmJiBub2RlLT5jaGlsZDEoKSA9PSBjaGlsZDEgJiYgbm9kZS0+ZnVuY3Rpb24oKSA9
PSBmdW5jdGlvbikKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIAotICAgIGJvb2wgY2hlY2tFeGVjdXRhYmxl
RWxpbWluYXRpb24oRXhlY3V0YWJsZUJhc2UqIGV4ZWN1dGFibGUsIE5vZGVJbmRleCBjaGlsZDEp
CisgICAgYm9vbCBjaGVja0V4ZWN1dGFibGVFbGltaW5hdGlvbihFeGVjdXRhYmxlQmFzZSogZXhl
Y3V0YWJsZSwgTm9kZSogY2hpbGQxKQogICAgIHsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
ZW5kSW5kZXhGb3JQdXJlQ1NFKCk7IGktLTspIHsKLSAgICAgICAgICAgIE5vZGVJbmRleCBpbmRl
eCA9IG1fY3VycmVudEJsb2NrLT5hdChpKTsKLSAgICAgICAgICAgIGlmIChpbmRleCA9PSBjaGls
ZDEpCisgICAgICAgICAgICBOb2RlKiBub2RlID0gbV9jdXJyZW50QmxvY2stPmF0KGkpOworICAg
ICAgICAgICAgaWYgKG5vZGUgPT0gY2hpbGQxKQogICAgICAgICAgICAgICAgIGJyZWFrOwogCi0g
ICAgICAgICAgICBOb2RlJiBub2RlID0gbV9ncmFwaFtpbmRleF07Ci0gICAgICAgICAgICBpZiAo
bm9kZS5vcCgpID09IENoZWNrRXhlY3V0YWJsZSAmJiBub2RlLmNoaWxkMSgpID09IGNoaWxkMSAm
JiBub2RlLmV4ZWN1dGFibGUoKSA9PSBleGVjdXRhYmxlKQorICAgICAgICAgICAgaWYgKG5vZGUt
Pm9wKCkgPT0gQ2hlY2tFeGVjdXRhYmxlICYmIG5vZGUtPmNoaWxkMSgpID09IGNoaWxkMSAmJiBu
b2RlLT5leGVjdXRhYmxlKCkgPT0gZXhlY3V0YWJsZSkKICAgICAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgYm9v
bCBjaGVja1N0cnVjdHVyZUVsaW1pbmF0aW9uKGNvbnN0IFN0cnVjdHVyZVNldCYgc3RydWN0dXJl
U2V0LCBOb2RlSW5kZXggY2hpbGQxKQorICAgIGJvb2wgY2hlY2tTdHJ1Y3R1cmVFbGltaW5hdGlv
bihjb25zdCBTdHJ1Y3R1cmVTZXQmIHN0cnVjdHVyZVNldCwgTm9kZSogY2hpbGQxKQogICAgIHsK
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9pbmRleEluQmxvY2s7IGktLTspIHsKLSAgICAg
ICAgICAgIE5vZGVJbmRleCBpbmRleCA9IG1fY3VycmVudEJsb2NrLT5hdChpKTsKLSAgICAgICAg
ICAgIGlmIChpbmRleCA9PSBjaGlsZDEpIAorICAgICAgICAgICAgTm9kZSogbm9kZSA9IG1fY3Vy
cmVudEJsb2NrLT5hdChpKTsKKyAgICAgICAgICAgIGlmIChub2RlID09IGNoaWxkMSkgCiAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW2lu
ZGV4XTsKLSAgICAgICAgICAgIGlmICghbm9kZS5zaG91bGRHZW5lcmF0ZSgpKQorICAgICAgICAg
ICAgaWYgKCFub2RlLT5zaG91bGRHZW5lcmF0ZSgpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwotICAgICAgICAgICAgc3dpdGNoIChub2RlLm9wKCkpIHsKKyAgICAgICAgICAgIHN3aXRjaCAo
bm9kZS0+b3AoKSkgewogICAgICAgICAgICAgY2FzZSBDaGVja1N0cnVjdHVyZToKICAgICAgICAg
ICAgIGNhc2UgRm9yd2FyZENoZWNrU3RydWN0dXJlOgotICAgICAgICAgICAgICAgIGlmIChub2Rl
LmNoaWxkMSgpID09IGNoaWxkMQotICAgICAgICAgICAgICAgICAgICAmJiBzdHJ1Y3R1cmVTZXQu
aXNTdXBlcnNldE9mKG5vZGUuc3RydWN0dXJlU2V0KCkpKQorICAgICAgICAgICAgICAgIGlmIChu
b2RlLT5jaGlsZDEoKSA9PSBjaGlsZDEKKyAgICAgICAgICAgICAgICAgICAgJiYgc3RydWN0dXJl
U2V0LmlzU3VwZXJzZXRPZihub2RlLT5zdHJ1Y3R1cmVTZXQoKSkpCiAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAg
IAogICAgICAgICAgICAgY2FzZSBTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludDoKICAgICAg
ICAgICAgIGNhc2UgRm9yd2FyZFN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50OgotICAgICAg
ICAgICAgICAgIGlmIChub2RlLmNoaWxkMSgpID09IGNoaWxkMQotICAgICAgICAgICAgICAgICAg
ICAmJiBzdHJ1Y3R1cmVTZXQuY29udGFpbnMobm9kZS5zdHJ1Y3R1cmUoKSkpCisgICAgICAgICAg
ICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpID09IGNoaWxkMQorICAgICAgICAgICAgICAgICAgICAm
JiBzdHJ1Y3R1cmVTZXQuY29udGFpbnMobm9kZS0+c3RydWN0dXJlKCkpKQogICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
ICAgICAKICAgICAgICAgICAgIGNhc2UgUHV0U3RydWN0dXJlOgotICAgICAgICAgICAgICAgIGlm
IChub2RlLmNoaWxkMSgpID09IGNoaWxkMQotICAgICAgICAgICAgICAgICAgICAmJiBzdHJ1Y3R1
cmVTZXQuY29udGFpbnMobm9kZS5zdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSgpLm5ld1N0cnVjdHVy
ZSkpCisgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpID09IGNoaWxkMQorICAgICAg
ICAgICAgICAgICAgICAmJiBzdHJ1Y3R1cmVTZXQuY29udGFpbnMobm9kZS0+c3RydWN0dXJlVHJh
bnNpdGlvbkRhdGEoKS5uZXdTdHJ1Y3R1cmUpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICAgICAgICAgICAgICBpZiAoc3RydWN0dXJlU2V0LmNvbnRhaW5zKG5vZGUuc3Ry
dWN0dXJlVHJhbnNpdGlvbkRhdGEoKS5wcmV2aW91c1N0cnVjdHVyZSkpCisgICAgICAgICAgICAg
ICAgaWYgKHN0cnVjdHVyZVNldC5jb250YWlucyhub2RlLT5zdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0
YSgpLnByZXZpb3VzU3RydWN0dXJlKSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIApAQCAtNDg0LDcgKzQ3
Niw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAg
ICAgICAgIAogICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBpZiAobV9ncmFw
aC5jbG9iYmVyc1dvcmxkKGluZGV4KSkKKyAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC5jbG9i
YmVyc1dvcmxkKG5vZGUpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CkBAIC00OTIsMjYgKzQ4NCwyNSBAQCBw
cml2YXRlOgogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIAotICAgIGJvb2wgc3Ry
dWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnRFbGltaW5hdGlvbihTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSwgTm9kZUluZGV4IGNoaWxkMSkKKyAgICBib29sIHN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBv
aW50RWxpbWluYXRpb24oU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIE5vZGUqIGNoaWxkMSkKICAgICB7
CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1faW5kZXhJbkJsb2NrOyBpLS07KSB7Ci0gICAg
ICAgICAgICBOb2RlSW5kZXggaW5kZXggPSBtX2N1cnJlbnRCbG9jay0+YXQoaSk7Ci0gICAgICAg
ICAgICBpZiAoaW5kZXggPT0gY2hpbGQxKSAKKyAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBtX2N1
cnJlbnRCbG9jay0+YXQoaSk7CisgICAgICAgICAgICBpZiAobm9kZSA9PSBjaGlsZDEpIAogICAg
ICAgICAgICAgICAgIGJyZWFrOwogCi0gICAgICAgICAgICBOb2RlJiBub2RlID0gbV9ncmFwaFtp
bmRleF07Ci0gICAgICAgICAgICBpZiAoIW5vZGUuc2hvdWxkR2VuZXJhdGUoKSkKKyAgICAgICAg
ICAgIGlmICghbm9kZS0+c2hvdWxkR2VuZXJhdGUoKSkKICAgICAgICAgICAgICAgICBjb250aW51
ZTsKLSAgICAgICAgICAgIHN3aXRjaCAobm9kZS5vcCgpKSB7CisgICAgICAgICAgICBzd2l0Y2gg
KG5vZGUtPm9wKCkpIHsKICAgICAgICAgICAgIGNhc2UgQ2hlY2tTdHJ1Y3R1cmU6CiAgICAgICAg
ICAgICBjYXNlIEZvcndhcmRDaGVja1N0cnVjdHVyZToKLSAgICAgICAgICAgICAgICBpZiAobm9k
ZS5jaGlsZDEoKSA9PSBjaGlsZDEKLSAgICAgICAgICAgICAgICAgICAgJiYgbm9kZS5zdHJ1Y3R1
cmVTZXQoKS5jb250YWluc09ubHkoc3RydWN0dXJlKSkKKyAgICAgICAgICAgICAgICBpZiAobm9k
ZS0+Y2hpbGQxKCkgPT0gY2hpbGQxCisgICAgICAgICAgICAgICAgICAgICYmIG5vZGUtPnN0cnVj
dHVyZVNldCgpLmNvbnRhaW5zT25seShzdHJ1Y3R1cmUpKQogICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAKICAg
ICAgICAgICAgIGNhc2UgUHV0U3RydWN0dXJlOgotICAgICAgICAgICAgICAgIEFTU0VSVChub2Rl
LnN0cnVjdHVyZVRyYW5zaXRpb25EYXRhKCkucHJldmlvdXNTdHJ1Y3R1cmUgIT0gc3RydWN0dXJl
KTsKKyAgICAgICAgICAgICAgICBBU1NFUlQobm9kZS0+c3RydWN0dXJlVHJhbnNpdGlvbkRhdGEo
KS5wcmV2aW91c1N0cnVjdHVyZSAhPSBzdHJ1Y3R1cmUpOwogICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgY2FzZSBQdXRCeU9mZnNldDoKQEAgLTUz
MCw3ICs1MjEsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgY2Fz
ZSBTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludDoKICAgICAgICAgICAgIGNhc2UgRm9yd2Fy
ZFN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50OgotICAgICAgICAgICAgICAgIGlmIChub2Rl
LnN0cnVjdHVyZSgpID09IHN0cnVjdHVyZSAmJiBub2RlLmNoaWxkMSgpID09IGNoaWxkMSkKKyAg
ICAgICAgICAgICAgICBpZiAobm9kZS0+c3RydWN0dXJlKCkgPT0gc3RydWN0dXJlICYmIG5vZGUt
PmNoaWxkMSgpID09IGNoaWxkMSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgCkBAIC01NDEsNyArNTMyLDcg
QEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAg
ICAgCiAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLmNs
b2JiZXJzV29ybGQoaW5kZXgpKQorICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLmNsb2JiZXJz
V29ybGQobm9kZSkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KQEAgLTU0OSwyOCArNTQwLDI3IEBAIHByaXZh
dGU6CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgCi0gICAgTm9kZUluZGV4IHB1
dFN0cnVjdHVyZVN0b3JlRWxpbWluYXRpb24oTm9kZUluZGV4IGNoaWxkMSkKKyAgICBOb2RlKiBw
dXRTdHJ1Y3R1cmVTdG9yZUVsaW1pbmF0aW9uKE5vZGUqIGNoaWxkMSkKICAgICB7CiAgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IG1faW5kZXhJbkJsb2NrOyBpLS07KSB7Ci0gICAgICAgICAgICBO
b2RlSW5kZXggaW5kZXggPSBtX2N1cnJlbnRCbG9jay0+YXQoaSk7Ci0gICAgICAgICAgICBpZiAo
aW5kZXggPT0gY2hpbGQxKQorICAgICAgICAgICAgTm9kZSogbm9kZSA9IG1fY3VycmVudEJsb2Nr
LT5hdChpKTsKKyAgICAgICAgICAgIGlmIChub2RlID09IGNoaWxkMSkKICAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW2luZGV4XTsKLSAgICAg
ICAgICAgIGlmICghbm9kZS5zaG91bGRHZW5lcmF0ZSgpKQorICAgICAgICAgICAgaWYgKCFub2Rl
LT5zaG91bGRHZW5lcmF0ZSgpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAg
ICAgc3dpdGNoIChub2RlLm9wKCkpIHsKKyAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkg
ewogICAgICAgICAgICAgY2FzZSBDaGVja1N0cnVjdHVyZToKICAgICAgICAgICAgIGNhc2UgRm9y
d2FyZENoZWNrU3RydWN0dXJlOgotICAgICAgICAgICAgICAgIHJldHVybiBOb05vZGU7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBjYXNl
IFBoYW50b21QdXRTdHJ1Y3R1cmU6Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGUuY2hpbGQxKCkg
PT0gY2hpbGQxKSAvLyBObyBuZWVkIHRvIHJldHJhY2Ugb3VyIHN0ZXBzLgotICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gTm9Ob2RlOworICAgICAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEo
KSA9PSBjaGlsZDEpIC8vIE5vIG5lZWQgdG8gcmV0cmFjZSBvdXIgc3RlcHMuCisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
ICAgIAogICAgICAgICAgICAgY2FzZSBQdXRTdHJ1Y3R1cmU6Ci0gICAgICAgICAgICAgICAgaWYg
KG5vZGUuY2hpbGQxKCkgPT0gY2hpbGQxKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW5k
ZXg7CisgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpID09IGNoaWxkMSkKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIG5vZGU7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICAgICAgCiAgICAgICAgICAgICAvLyBQdXRTdHJ1Y3R1cmUgbmVlZHMgdG8gZXhlY3V0
ZSBpZiB3ZSBHQy4gSGVuY2UgdGhpcyBuZWVkcyB0bwpAQCAtNTkyLDQ0ICs1ODIsNDMgQEAgcHJp
dmF0ZToKICAgICAgICAgICAgIGNhc2UgQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2U6CiAgICAgICAg
ICAgICBjYXNlIFJlYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2U6CiAgICAgICAgICAgICBjYXNlIFR5
cGVPZjoKLSAgICAgICAgICAgICAgICByZXR1cm4gTm9Ob2RlOworICAgICAgICAgICAgICAgIHJl
dHVybiAwOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgY2FzZSBHZXRJbmRleGVkUHJv
cGVydHlTdG9yYWdlOgotICAgICAgICAgICAgICAgIGlmIChub2RlLmFycmF5TW9kZSgpLmdldElu
ZGV4ZWRQcm9wZXJ0eVN0b3JhZ2VNYXlUcmlnZ2VyR0MoKSkKLSAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIE5vTm9kZTsKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+YXJyYXlNb2RlKCkuZ2V0
SW5kZXhlZFByb3BlcnR5U3RvcmFnZU1heVRyaWdnZXJHQygpKQorICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gMDsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAKICAg
ICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICBpZiAobV9ncmFwaC5jbG9iYmVyc1dvcmxkKGluZGV4KSB8fCBub2RlLmNh
bkV4aXQoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gTm9Ob2RlOworICAgICAgICAgICAgaWYg
KG1fZ3JhcGguY2xvYmJlcnNXb3JsZChub2RlKSB8fCBub2RlLT5jYW5FeGl0KCkpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIE5vTm9kZTsKKyAg
ICAgICAgcmV0dXJuIDA7CiAgICAgfQogICAgIAotICAgIE5vZGVJbmRleCBnZXRCeU9mZnNldExv
YWRFbGltaW5hdGlvbih1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBOb2RlSW5kZXggY2hpbGQx
KQorICAgIE5vZGUqIGdldEJ5T2Zmc2V0TG9hZEVsaW1pbmF0aW9uKHVuc2lnbmVkIGlkZW50aWZp
ZXJOdW1iZXIsIE5vZGUqIGNoaWxkMSkKICAgICB7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IG1faW5kZXhJbkJsb2NrOyBpLS07KSB7Ci0gICAgICAgICAgICBOb2RlSW5kZXggaW5kZXggPSBt
X2N1cnJlbnRCbG9jay0+YXQoaSk7Ci0gICAgICAgICAgICBpZiAoaW5kZXggPT0gY2hpbGQxKQor
ICAgICAgICAgICAgTm9kZSogbm9kZSA9IG1fY3VycmVudEJsb2NrLT5hdChpKTsKKyAgICAgICAg
ICAgIGlmIChub2RlID09IGNoaWxkMSkKICAgICAgICAgICAgICAgICBicmVhazsKIAotICAgICAg
ICAgICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhbaW5kZXhdOwotICAgICAgICAgICAgaWYgKCFub2Rl
LnNob3VsZEdlbmVyYXRlKCkpCisgICAgICAgICAgICBpZiAoIW5vZGUtPnNob3VsZEdlbmVyYXRl
KCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBzd2l0Y2ggKG5vZGUu
b3AoKSkgeworICAgICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CiAgICAgICAgICAgICBj
YXNlIEdldEJ5T2Zmc2V0OgotICAgICAgICAgICAgICAgIGlmIChub2RlLmNoaWxkMSgpID09IGNo
aWxkMQotICAgICAgICAgICAgICAgICAgICAmJiBtX2dyYXBoLm1fc3RvcmFnZUFjY2Vzc0RhdGFb
bm9kZS5zdG9yYWdlQWNjZXNzRGF0YUluZGV4KCldLmlkZW50aWZpZXJOdW1iZXIgPT0gaWRlbnRp
Zmllck51bWJlcikKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGluZGV4OworICAgICAgICAg
ICAgICAgIGlmIChub2RlLT5jaGlsZDEoKSA9PSBjaGlsZDEKKyAgICAgICAgICAgICAgICAgICAg
JiYgbV9ncmFwaC5tX3N0b3JhZ2VBY2Nlc3NEYXRhW25vZGUtPnN0b3JhZ2VBY2Nlc3NEYXRhSW5k
ZXgoKV0uaWRlbnRpZmllck51bWJlciA9PSBpZGVudGlmaWVyTnVtYmVyKQorICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gbm9kZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
ICAgICAKICAgICAgICAgICAgIGNhc2UgUHV0QnlPZmZzZXQ6Ci0gICAgICAgICAgICAgICAgaWYg
KG1fZ3JhcGgubV9zdG9yYWdlQWNjZXNzRGF0YVtub2RlLnN0b3JhZ2VBY2Nlc3NEYXRhSW5kZXgo
KV0uaWRlbnRpZmllck51bWJlciA9PSBpZGVudGlmaWVyTnVtYmVyKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIGlmIChub2RlLmNoaWxkMSgpID09IGNoaWxkMSkgLy8gTXVzdCBiZSBzYW1lIHByb3Bl
cnR5IHN0b3JhZ2UuCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbm9kZS5jaGlsZDMo
KS5pbmRleCgpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gTm9Ob2RlOworICAgICAgICAg
ICAgICAgIGlmIChtX2dyYXBoLm1fc3RvcmFnZUFjY2Vzc0RhdGFbbm9kZS0+c3RvcmFnZUFjY2Vz
c0RhdGFJbmRleCgpXS5pZGVudGlmaWVyTnVtYmVyID09IGlkZW50aWZpZXJOdW1iZXIpIHsKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpID09IGNoaWxkMSkgLy8gTXVzdCBi
ZSBzYW1lIHByb3BlcnR5IHN0b3JhZ2UuCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
bm9kZS0+Y2hpbGQzKCkubm9kZSgpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAg
CkBAIC02NDUsMzggKzYzNCwzNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICAvLyBj
aGFuZ2UuCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICByZXR1cm4gTm9Ob2RlOworICAgICAgICAgICAgICAgIHJldHVybiAwOwog
ICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBp
ZiAobV9ncmFwaC5jbG9iYmVyc1dvcmxkKGluZGV4KSkKLSAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIE5vTm9kZTsKKyAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC5jbG9iYmVyc1dvcmxkKG5v
ZGUpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICByZXR1cm4gTm9Ob2RlOworICAg
ICAgICByZXR1cm4gMDsKICAgICB9CiAgICAgCi0gICAgTm9kZUluZGV4IHB1dEJ5T2Zmc2V0U3Rv
cmVFbGltaW5hdGlvbih1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBOb2RlSW5kZXggY2hpbGQx
KQorICAgIE5vZGUqIHB1dEJ5T2Zmc2V0U3RvcmVFbGltaW5hdGlvbih1bnNpZ25lZCBpZGVudGlm
aWVyTnVtYmVyLCBOb2RlKiBjaGlsZDEpCiAgICAgewogICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSBtX2luZGV4SW5CbG9jazsgaS0tOykgewotICAgICAgICAgICAgTm9kZUluZGV4IGluZGV4ID0g
bV9jdXJyZW50QmxvY2stPmF0KGkpOwotICAgICAgICAgICAgaWYgKGluZGV4ID09IGNoaWxkMSkK
KyAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBtX2N1cnJlbnRCbG9jay0+YXQoaSk7CisgICAgICAg
ICAgICBpZiAobm9kZSA9PSBjaGlsZDEpCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAg
ICAgICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW2luZGV4XTsKLSAgICAgICAgICAgIGlmICghbm9k
ZS5zaG91bGRHZW5lcmF0ZSgpKQorICAgICAgICAgICAgaWYgKCFub2RlLT5zaG91bGRHZW5lcmF0
ZSgpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgc3dpdGNoIChub2Rl
Lm9wKCkpIHsKKyAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewogICAgICAgICAgICAg
Y2FzZSBHZXRCeU9mZnNldDoKLSAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC5tX3N0b3JhZ2VB
Y2Nlc3NEYXRhW25vZGUuc3RvcmFnZUFjY2Vzc0RhdGFJbmRleCgpXS5pZGVudGlmaWVyTnVtYmVy
ID09IGlkZW50aWZpZXJOdW1iZXIpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBOb05vZGU7
CisgICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGgubV9zdG9yYWdlQWNjZXNzRGF0YVtub2RlLT5z
dG9yYWdlQWNjZXNzRGF0YUluZGV4KCldLmlkZW50aWZpZXJOdW1iZXIgPT0gaWRlbnRpZmllck51
bWJlcikKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBjYXNlIFB1dEJ5T2Zmc2V0OgotICAg
ICAgICAgICAgICAgIGlmIChtX2dyYXBoLm1fc3RvcmFnZUFjY2Vzc0RhdGFbbm9kZS5zdG9yYWdl
QWNjZXNzRGF0YUluZGV4KCldLmlkZW50aWZpZXJOdW1iZXIgPT0gaWRlbnRpZmllck51bWJlcikg
ewotICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS5jaGlsZDEoKSA9PSBjaGlsZDEpIC8vIE11
c3QgYmUgc2FtZSBwcm9wZXJ0eSBzdG9yYWdlLgotICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGluZGV4OwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gTm9Ob2RlOworICAgICAgICAg
ICAgICAgIGlmIChtX2dyYXBoLm1fc3RvcmFnZUFjY2Vzc0RhdGFbbm9kZS0+c3RvcmFnZUFjY2Vz
c0RhdGFJbmRleCgpXS5pZGVudGlmaWVyTnVtYmVyID09IGlkZW50aWZpZXJOdW1iZXIpIHsKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpID09IGNoaWxkMSkgLy8gTXVzdCBi
ZSBzYW1lIHByb3BlcnR5IHN0b3JhZ2UuCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
bm9kZTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIApAQCAtNjg5LDQ1ICs2Nzcs
NDQgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgLy8gY2hhbmdlLgogICAgICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0
dXJuIE5vTm9kZTsKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgICAgICAK
ICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGguY2xvYmJl
cnNXb3JsZChpbmRleCkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBOb05vZGU7CisgICAg
ICAgICAgICAgICAgaWYgKG1fZ3JhcGguY2xvYmJlcnNXb3JsZChub2RlKSkKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICBpZiAobm9kZS5jYW5FeGl0KCkpCi0gICAgICAgICAgICAgICAgcmV0dXJu
IE5vTm9kZTsKKyAgICAgICAgICAgIGlmIChub2RlLT5jYW5FeGl0KCkpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIDA7CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIE5vTm9kZTsKKyAgICAgICAg
cmV0dXJuIDA7CiAgICAgfQogICAgIAotICAgIE5vZGVJbmRleCBnZXRQcm9wZXJ0eVN0b3JhZ2VM
b2FkRWxpbWluYXRpb24oTm9kZUluZGV4IGNoaWxkMSkKKyAgICBOb2RlKiBnZXRQcm9wZXJ0eVN0
b3JhZ2VMb2FkRWxpbWluYXRpb24oTm9kZSogY2hpbGQxKQogICAgIHsKICAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gbV9pbmRleEluQmxvY2s7IGktLTspIHsKLSAgICAgICAgICAgIE5vZGVJbmRl
eCBpbmRleCA9IG1fY3VycmVudEJsb2NrLT5hdChpKTsKLSAgICAgICAgICAgIGlmIChpbmRleCA9
PSBjaGlsZDEpIAorICAgICAgICAgICAgTm9kZSogbm9kZSA9IG1fY3VycmVudEJsb2NrLT5hdChp
KTsKKyAgICAgICAgICAgIGlmIChub2RlID09IGNoaWxkMSkgCiAgICAgICAgICAgICAgICAgYnJl
YWs7CiAKLSAgICAgICAgICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW2luZGV4XTsKLSAgICAgICAg
ICAgIGlmICghbm9kZS5zaG91bGRHZW5lcmF0ZSgpKQorICAgICAgICAgICAgaWYgKCFub2RlLT5z
aG91bGRHZW5lcmF0ZSgpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAg
c3dpdGNoIChub2RlLm9wKCkpIHsKKyAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewog
ICAgICAgICAgICAgY2FzZSBHZXRCdXR0ZXJmbHk6Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGUu
Y2hpbGQxKCkgPT0gY2hpbGQxKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW5kZXg7Cisg
ICAgICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpID09IGNoaWxkMSkKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIG5vZGU7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAg
ICAgIGNhc2UgQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2U6CiAgICAgICAgICAgICBjYXNlIFJlYWxs
b2NhdGVQcm9wZXJ0eVN0b3JhZ2U6CiAgICAgICAgICAgICAgICAgLy8gSWYgd2UgY2FuIGNoZWFw
bHkgcHJvdmUgdGhpcyBpcyBhIGNoYW5nZSB0byBvdXIgb2JqZWN0J3Mgc3RvcmFnZSwgd2UKICAg
ICAgICAgICAgICAgICAvLyBjYW4gb3B0aW1pemUgYW5kIHVzZSBpdHMgcmVzdWx0LgotICAgICAg
ICAgICAgICAgIGlmIChub2RlLmNoaWxkMSgpID09IGNoaWxkMSkKLSAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGluZGV4OworICAgICAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKSA9PSBj
aGlsZDEpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBub2RlOwogICAgICAgICAgICAgICAg
IC8vIE90aGVyd2lzZSwgd2UgY3VycmVudGx5IGNhbid0IHByb3ZlIHRoYXQgdGhpcyBkb2Vzbid0
IGNoYW5nZSBvdXIgb2JqZWN0J3MKICAgICAgICAgICAgICAgICAvLyBzdG9yYWdlLCBzbyB3ZSBj
b25zZXJ2YXRpdmVseSBhc3N1bWUgdGhhdCBpdCBtYXkgY2hhbmdlIHRoZSBzdG9yYWdlCiAgICAg
ICAgICAgICAgICAgLy8gcG9pbnRlciBvZiBhbnkgb2JqZWN0LCBpbmNsdWRpbmcgb3Vycy4KLSAg
ICAgICAgICAgICAgICByZXR1cm4gTm9Ob2RlOworICAgICAgICAgICAgICAgIHJldHVybiAwOwog
ICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgY2FzZSBQdXRCeU9mZnNldDoKICAgICAgICAg
ICAgIGNhc2UgUHV0U3RydWN0dXJlOgpAQCAtNzQzLDM0ICs3MzAsMzMgQEAgcHJpdmF0ZToKICAg
ICAgICAgICAgICAgICAgICAgLy8gY2hhbmdlLgogICAgICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJuIE5vTm9kZTsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGNhc2Ug
QXJyYXlpZnk6CiAgICAgICAgICAgICBjYXNlIEFycmF5aWZ5VG9TdHJ1Y3R1cmU6CiAgICAgICAg
ICAgICAgICAgLy8gV2UgY291bGQgY2hlY2sgaWYgdGhlIGFycmF5aWZpY2F0aW9uIGNvdWxkIGFm
ZmVjdCBvdXIgYnV0dGVyZmx5LgogICAgICAgICAgICAgICAgIC8vIEJ1dCB0aGF0IHNlZW1zIGxp
a2UgaXQgd291bGQgdGFrZSBFZmZvcnQuCi0gICAgICAgICAgICAgICAgcmV0dXJuIE5vTm9kZTsK
KyAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAg
IGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGguY2xvYmJlcnNXb3JsZChpbmRl
eCkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBOb05vZGU7CisgICAgICAgICAgICAgICAg
aWYgKG1fZ3JhcGguY2xvYmJlcnNXb3JsZChub2RlKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIDA7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0K
LSAgICAgICAgcmV0dXJuIE5vTm9kZTsKKyAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogICAgIAot
ICAgIGJvb2wgY2hlY2tBcnJheUVsaW1pbmF0aW9uKE5vZGVJbmRleCBjaGlsZDEsIEFycmF5TW9k
ZSBhcnJheU1vZGUpCisgICAgYm9vbCBjaGVja0FycmF5RWxpbWluYXRpb24oTm9kZSogY2hpbGQx
LCBBcnJheU1vZGUgYXJyYXlNb2RlKQogICAgIHsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
bV9pbmRleEluQmxvY2s7IGktLTspIHsKLSAgICAgICAgICAgIE5vZGVJbmRleCBpbmRleCA9IG1f
Y3VycmVudEJsb2NrLT5hdChpKTsKLSAgICAgICAgICAgIGlmIChpbmRleCA9PSBjaGlsZDEpIAor
ICAgICAgICAgICAgTm9kZSogbm9kZSA9IG1fY3VycmVudEJsb2NrLT5hdChpKTsKKyAgICAgICAg
ICAgIGlmIChub2RlID09IGNoaWxkMSkgCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAg
ICAgICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW2luZGV4XTsKLSAgICAgICAgICAgIGlmICghbm9k
ZS5zaG91bGRHZW5lcmF0ZSgpKQorICAgICAgICAgICAgaWYgKCFub2RlLT5zaG91bGRHZW5lcmF0
ZSgpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgc3dpdGNoIChub2Rl
Lm9wKCkpIHsKKyAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewogICAgICAgICAgICAg
Y2FzZSBQdXRCeU9mZnNldDoKICAgICAgICAgICAgIGNhc2UgUHV0U3RydWN0dXJlOgogICAgICAg
ICAgICAgICAgIC8vIENoYW5naW5nIHRoZSBzdHJ1Y3R1cmUgb3IgcHV0dGluZyB0byB0aGUgc3Rv
cmFnZSBjYW5ub3QKQEAgLTc3OCw3ICs3NjQsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgY2FzZSBDaGVja0FycmF5Ogot
ICAgICAgICAgICAgICAgIGlmIChub2RlLmNoaWxkMSgpID09IGNoaWxkMSAmJiBub2RlLmFycmF5
TW9kZSgpID09IGFycmF5TW9kZSkKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCkg
PT0gY2hpbGQxICYmIG5vZGUtPmFycmF5TW9kZSgpID09IGFycmF5TW9kZSkKICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICAgICAgCkBAIC03ODksNyArNzc1LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAg
ICAgICAgICAgIGlmIChtX2dyYXBoLmNsb2JiZXJzV29ybGQoaW5kZXgpKQorICAgICAgICAgICAg
ICAgIGlmIChtX2dyYXBoLmNsb2JiZXJzV29ybGQobm9kZSkpCiAgICAgICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KQEAg
LTc5NywyMCArNzgzLDE5IEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9
CiAKLSAgICBOb2RlSW5kZXggZ2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZUxvYWRFbGltaW5hdGlv
bihOb2RlSW5kZXggY2hpbGQxLCBBcnJheU1vZGUgYXJyYXlNb2RlKQorICAgIE5vZGUqIGdldElu
ZGV4ZWRQcm9wZXJ0eVN0b3JhZ2VMb2FkRWxpbWluYXRpb24oTm9kZSogY2hpbGQxLCBBcnJheU1v
ZGUgYXJyYXlNb2RlKQogICAgIHsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9pbmRleElu
QmxvY2s7IGktLTspIHsKLSAgICAgICAgICAgIE5vZGVJbmRleCBpbmRleCA9IG1fY3VycmVudEJs
b2NrLT5hdChpKTsKLSAgICAgICAgICAgIGlmIChpbmRleCA9PSBjaGlsZDEpIAorICAgICAgICAg
ICAgTm9kZSogbm9kZSA9IG1fY3VycmVudEJsb2NrLT5hdChpKTsKKyAgICAgICAgICAgIGlmIChu
b2RlID09IGNoaWxkMSkgCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgICAgIE5v
ZGUmIG5vZGUgPSBtX2dyYXBoW2luZGV4XTsKLSAgICAgICAgICAgIGlmICghbm9kZS5zaG91bGRH
ZW5lcmF0ZSgpKQorICAgICAgICAgICAgaWYgKCFub2RlLT5zaG91bGRHZW5lcmF0ZSgpKQogICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgc3dpdGNoIChub2RlLm9wKCkpIHsK
KyAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewogICAgICAgICAgICAgY2FzZSBHZXRJ
bmRleGVkUHJvcGVydHlTdG9yYWdlOiB7Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGUuY2hpbGQx
KCkgPT0gY2hpbGQxICYmIG5vZGUuYXJyYXlNb2RlKCkgPT0gYXJyYXlNb2RlKQotICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gaW5kZXg7CisgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxk
MSgpID09IGNoaWxkMSAmJiBub2RlLT5hcnJheU1vZGUoKSA9PSBhcnJheU1vZGUpCisgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBub2RlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgfQogCkBAIC04MjEsODEgKzgwNiw3OSBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAg
ICAgICAgICBpZiAobV9ncmFwaC5jbG9iYmVyc1dvcmxkKGluZGV4KSkKLSAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIE5vTm9kZTsKKyAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC5jbG9iYmVy
c1dvcmxkKG5vZGUpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICByZXR1cm4gTm9O
b2RlOworICAgICAgICByZXR1cm4gMDsKICAgICB9CiAgICAgCi0gICAgTm9kZUluZGV4IGdldE15
U2NvcGVMb2FkRWxpbWluYXRpb24oSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUpCisg
ICAgTm9kZSogZ2V0TXlTY29wZUxvYWRFbGltaW5hdGlvbihJbmxpbmVDYWxsRnJhbWUqIGlubGlu
ZUNhbGxGcmFtZSkKICAgICB7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1faW5kZXhJbkJs
b2NrOyBpLS07KSB7Ci0gICAgICAgICAgICBOb2RlSW5kZXggaW5kZXggPSBtX2N1cnJlbnRCbG9j
ay0+YXQoaSk7Ci0gICAgICAgICAgICBOb2RlJiBub2RlID0gbV9ncmFwaFtpbmRleF07Ci0gICAg
ICAgICAgICBpZiAoIW5vZGUuc2hvdWxkR2VuZXJhdGUoKSkKKyAgICAgICAgICAgIE5vZGUqIG5v
ZGUgPSBtX2N1cnJlbnRCbG9jay0+YXQoaSk7CisgICAgICAgICAgICBpZiAoIW5vZGUtPnNob3Vs
ZEdlbmVyYXRlKCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBpZiAo
bm9kZS5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSAhPSBpbmxpbmVDYWxsRnJhbWUpCisgICAg
ICAgICAgICBpZiAobm9kZS0+Y29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUgIT0gaW5saW5lQ2Fs
bEZyYW1lKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgc3dpdGNoIChu
b2RlLm9wKCkpIHsKKyAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewogICAgICAgICAg
ICAgY2FzZSBDcmVhdGVBY3RpdmF0aW9uOgogICAgICAgICAgICAgICAgIC8vIFRoaXMgbWF5IGNh
dXNlIHVzIHRvIHJldHVybiBhIGRpZmZlcmVudCBzY29wZS4KLSAgICAgICAgICAgICAgICByZXR1
cm4gTm9Ob2RlOworICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAgY2FzZSBH
ZXRNeVNjb3BlOgotICAgICAgICAgICAgICAgIHJldHVybiBpbmRleDsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gbm9kZTsKICAgICAgICAgICAgIGNhc2UgU2V0TXlTY29wZToKLSAgICAgICAgICAg
ICAgICByZXR1cm4gbm9kZS5jaGlsZDEoKS5pbmRleCgpOworICAgICAgICAgICAgICAgIHJldHVy
biBub2RlLT5jaGlsZDEoKS5ub2RlKCk7CiAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIHJldHVybiBO
b05vZGU7CisgICAgICAgIHJldHVybiAwOwogICAgIH0KICAgICAKLSAgICBOb2RlSW5kZXggZ2V0
TG9jYWxMb2FkRWxpbWluYXRpb24oVmlydHVhbFJlZ2lzdGVyIGxvY2FsLCBOb2RlSW5kZXgmIHJl
bGV2YW50TG9jYWxPcCwgYm9vbCBjYXJlQWJvdXRDbG9iYmVyaW5nKQorICAgIE5vZGUqIGdldExv
Y2FsTG9hZEVsaW1pbmF0aW9uKFZpcnR1YWxSZWdpc3RlciBsb2NhbCwgTm9kZSomIHJlbGV2YW50
TG9jYWxPcCwgYm9vbCBjYXJlQWJvdXRDbG9iYmVyaW5nKQogICAgIHsKLSAgICAgICAgcmVsZXZh
bnRMb2NhbE9wID0gTm9Ob2RlOworICAgICAgICByZWxldmFudExvY2FsT3AgPSAwOwogICAgICAg
ICAKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9pbmRleEluQmxvY2s7IGktLTspIHsKLSAg
ICAgICAgICAgIE5vZGVJbmRleCBpbmRleCA9IG1fY3VycmVudEJsb2NrLT5hdChpKTsKLSAgICAg
ICAgICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW2luZGV4XTsKLSAgICAgICAgICAgIGlmICghbm9k
ZS5zaG91bGRHZW5lcmF0ZSgpKQorICAgICAgICAgICAgTm9kZSogbm9kZSA9IG1fY3VycmVudEJs
b2NrLT5hdChpKTsKKyAgICAgICAgICAgIGlmICghbm9kZS0+c2hvdWxkR2VuZXJhdGUoKSkKICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIHN3aXRjaCAobm9kZS5vcCgpKSB7
CisgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKICAgICAgICAgICAgIGNhc2UgR2V0
TG9jYWw6Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGUubG9jYWwoKSA9PSBsb2NhbCkgewotICAg
ICAgICAgICAgICAgICAgICByZWxldmFudExvY2FsT3AgPSBpbmRleDsKLSAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGluZGV4OworICAgICAgICAgICAgICAgIGlmIChub2RlLT5sb2NhbCgpID09
IGxvY2FsKSB7CisgICAgICAgICAgICAgICAgICAgIHJlbGV2YW50TG9jYWxPcCA9IG5vZGU7Cisg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBub2RlOwogICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGNhc2UgR2V0
TG9jYWxVbmxpbmtlZDoKLSAgICAgICAgICAgICAgICBpZiAobm9kZS51bmxpbmtlZExvY2FsKCkg
PT0gbG9jYWwpIHsKLSAgICAgICAgICAgICAgICAgICAgcmVsZXZhbnRMb2NhbE9wID0gaW5kZXg7
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBpbmRleDsKKyAgICAgICAgICAgICAgICBpZiAo
bm9kZS0+dW5saW5rZWRMb2NhbCgpID09IGxvY2FsKSB7CisgICAgICAgICAgICAgICAgICAgIHJl
bGV2YW50TG9jYWxPcCA9IG5vZGU7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBub2RlOwog
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAg
ICAKICAgICAgICAgICAgIGNhc2UgU2V0TG9jYWw6Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGUu
bG9jYWwoKSA9PSBsb2NhbCkgewotICAgICAgICAgICAgICAgICAgICByZWxldmFudExvY2FsT3Ag
PSBpbmRleDsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGUuY2hpbGQxKCkuaW5kZXgo
KTsKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+bG9jYWwoKSA9PSBsb2NhbCkgeworICAgICAg
ICAgICAgICAgICAgICByZWxldmFudExvY2FsT3AgPSBub2RlOworICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gbm9kZS0+Y2hpbGQxKCkubm9kZSgpOwogICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGNhc2UgUHV0
U2NvcGVkVmFyOgotICAgICAgICAgICAgICAgIGlmIChzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0
ZXI+KG5vZGUudmFyTnVtYmVyKCkpID09IGxvY2FsKQotICAgICAgICAgICAgICAgICAgICByZXR1
cm4gTm9Ob2RlOworICAgICAgICAgICAgICAgIGlmIChzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0
ZXI+KG5vZGUtPnZhck51bWJlcigpKSA9PSBsb2NhbCkKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIDA7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgCiAgICAgICAg
ICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIGlmIChjYXJlQWJvdXRDbG9iYmVyaW5nICYm
IG1fZ3JhcGguY2xvYmJlcnNXb3JsZChpbmRleCkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVy
biBOb05vZGU7CisgICAgICAgICAgICAgICAgaWYgKGNhcmVBYm91dENsb2JiZXJpbmcgJiYgbV9n
cmFwaC5jbG9iYmVyc1dvcmxkKG5vZGUpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsK
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAg
ICByZXR1cm4gTm9Ob2RlOworICAgICAgICByZXR1cm4gMDsKICAgICB9CiAgICAgCiAgICAgc3Ry
dWN0IFNldExvY2FsU3RvcmVFbGltaW5hdGlvblJlc3VsdCB7CkBAIC05MTEsNTEgKzg5NCw1MCBA
QCBwcml2YXRlOgogICAgICAgICBib29sIG1heUNsb2JiZXJXb3JsZDsKICAgICB9OwogICAgIFNl
dExvY2FsU3RvcmVFbGltaW5hdGlvblJlc3VsdCBzZXRMb2NhbFN0b3JlRWxpbWluYXRpb24oCi0g
ICAgICAgIFZpcnR1YWxSZWdpc3RlciBsb2NhbCwgTm9kZUluZGV4IGV4cGVjdGVkTm9kZUluZGV4
KQorICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgbG9jYWwsIE5vZGUqIGV4cGVjdGVkTm9kZSkKICAg
ICB7CiAgICAgICAgIFNldExvY2FsU3RvcmVFbGltaW5hdGlvblJlc3VsdCByZXN1bHQ7CiAgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IG1faW5kZXhJbkJsb2NrOyBpLS07KSB7Ci0gICAgICAgICAg
ICBOb2RlSW5kZXggaW5kZXggPSBtX2N1cnJlbnRCbG9jay0+YXQoaSk7Ci0gICAgICAgICAgICBO
b2RlJiBub2RlID0gbV9ncmFwaFtpbmRleF07Ci0gICAgICAgICAgICBpZiAoIW5vZGUuc2hvdWxk
R2VuZXJhdGUoKSkKKyAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBtX2N1cnJlbnRCbG9jay0+YXQo
aSk7CisgICAgICAgICAgICBpZiAoIW5vZGUtPnNob3VsZEdlbmVyYXRlKCkpCiAgICAgICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBzd2l0Y2ggKG5vZGUub3AoKSkgeworICAgICAg
ICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CiAgICAgICAgICAgICBjYXNlIEdldExvY2FsOgog
ICAgICAgICAgICAgY2FzZSBGbHVzaDoKLSAgICAgICAgICAgICAgICBpZiAobm9kZS5sb2NhbCgp
ID09IGxvY2FsKQorICAgICAgICAgICAgICAgIGlmIChub2RlLT5sb2NhbCgpID09IGxvY2FsKQog
ICAgICAgICAgICAgICAgICAgICByZXN1bHQubWF5QmVBY2Nlc3NlZCA9IHRydWU7CiAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBjYXNlIEdldExv
Y2FsVW5saW5rZWQ6Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGUudW5saW5rZWRMb2NhbCgpID09
IGxvY2FsKQorICAgICAgICAgICAgICAgIGlmIChub2RlLT51bmxpbmtlZExvY2FsKCkgPT0gbG9j
YWwpCiAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5tYXlCZUFjY2Vzc2VkID0gdHJ1ZTsKICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGNhc2Ug
U2V0TG9jYWw6IHsKLSAgICAgICAgICAgICAgICBpZiAobm9kZS5sb2NhbCgpICE9IGxvY2FsKQor
ICAgICAgICAgICAgICAgIGlmIChub2RlLT5sb2NhbCgpICE9IGxvY2FsKQogICAgICAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBpZiAoaW5kZXggIT0gZXhwZWN0ZWROb2Rl
SW5kZXgpCisgICAgICAgICAgICAgICAgaWYgKG5vZGUgIT0gZXhwZWN0ZWROb2RlKQogICAgICAg
ICAgICAgICAgICAgICByZXN1bHQubWF5QmVBY2Nlc3NlZCA9IHRydWU7Ci0gICAgICAgICAgICAg
ICAgaWYgKG1fZ3JhcGhbaW5kZXhdLnJlZkNvdW50KCkgPiAxKQorICAgICAgICAgICAgICAgIGlm
IChub2RlLT5yZWZDb3VudCgpID4gMSkKICAgICAgICAgICAgICAgICAgICAgcmVzdWx0Lm1heUJl
QWNjZXNzZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBjYXNlIEdldFNjb3BlZFZhcjoK
LSAgICAgICAgICAgICAgICBpZiAoc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihub2RlLnZh
ck51bWJlcigpKSA9PSBsb2NhbCkKKyAgICAgICAgICAgICAgICBpZiAoc3RhdGljX2Nhc3Q8Vmly
dHVhbFJlZ2lzdGVyPihub2RlLT52YXJOdW1iZXIoKSkgPT0gbG9jYWwpCiAgICAgICAgICAgICAg
ICAgICAgIHJlc3VsdC5tYXlCZUFjY2Vzc2VkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGNhc2UgR2V0TXlTY29wZToKICAgICAg
ICAgICAgIGNhc2UgU2tpcFRvcFNjb3BlOgotICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLnVu
Y2hlY2tlZEFjdGl2YXRpb25SZWdpc3RlckZvcihub2RlLmNvZGVPcmlnaW4pID09IGxvY2FsKQor
ICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLnVuY2hlY2tlZEFjdGl2YXRpb25SZWdpc3RlckZv
cihub2RlLT5jb2RlT3JpZ2luKSA9PSBsb2NhbCkKICAgICAgICAgICAgICAgICAgICAgcmVzdWx0
Lm1heUJlQWNjZXNzZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgICAgIAogICAgICAgICAgICAgY2FzZSBDaGVja0FyZ3VtZW50c05vdENyZWF0ZWQ6CiAgICAg
ICAgICAgICBjYXNlIEdldE15QXJndW1lbnRzTGVuZ3RoOgogICAgICAgICAgICAgY2FzZSBHZXRN
eUFyZ3VtZW50c0xlbmd0aFNhZmU6Ci0gICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGgudW5jaGVj
a2VkQXJndW1lbnRzUmVnaXN0ZXJGb3Iobm9kZS5jb2RlT3JpZ2luKSA9PSBsb2NhbCkKKyAgICAg
ICAgICAgICAgICBpZiAobV9ncmFwaC51bmNoZWNrZWRBcmd1bWVudHNSZWdpc3RlckZvcihub2Rl
LT5jb2RlT3JpZ2luKSA9PSBsb2NhbCkKICAgICAgICAgICAgICAgICAgICAgcmVzdWx0Lm1heUJl
QWNjZXNzZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAg
IApAQCAtOTY2LDcgKzk0OCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgCiAgICAgICAg
ICAgICBjYXNlIEdldEJ5VmFsOgogICAgICAgICAgICAgICAgIC8vIElmIHRoaXMgaXMgYWNjZXNz
aW5nIGFyZ3VtZW50cyB0aGVuIGl0J3MgcG90ZW50aWFsbHkgYWNjZXNzaW5nIGxvY2Fscy4KLSAg
ICAgICAgICAgICAgICBpZiAobV9ncmFwaFtub2RlLmNoaWxkMSgpXS5zaG91bGRTcGVjdWxhdGVB
cmd1bWVudHMoKSkKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNw
ZWN1bGF0ZUFyZ3VtZW50cygpKQogICAgICAgICAgICAgICAgICAgICByZXN1bHQubWF5QmVBY2Nl
c3NlZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgCkBA
IC05ODMsOCArOTY1LDggQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXN1bHQubWF5RXhp
dCB8PSBub2RlLmNhbkV4aXQoKTsKLSAgICAgICAgICAgIHJlc3VsdC5tYXlDbG9iYmVyV29ybGQg
fD0gbV9ncmFwaC5jbG9iYmVyc1dvcmxkKGluZGV4KTsKKyAgICAgICAgICAgIHJlc3VsdC5tYXlF
eGl0IHw9IG5vZGUtPmNhbkV4aXQoKTsKKyAgICAgICAgICAgIHJlc3VsdC5tYXlDbG9iYmVyV29y
bGQgfD0gbV9ncmFwaC5jbG9iYmVyc1dvcmxkKG5vZGUpOwogICAgICAgICB9CiAgICAgICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIC8vIEJlIHNhZmUgaW4gcmVsZWFz
ZSBtb2RlLgpAQCAtOTk5LDYyICs5ODEsNjEgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgCiAgICAgICAgIC8vIENoZWNrIGlmIHRoZXJlIGlzIGFueSByZXBsYWNlbWVu
dC4KLSAgICAgICAgTm9kZUluZGV4IHJlcGxhY2VtZW50ID0gbV9ncmFwaFtjaGlsZC5pbmRleCgp
XS5yZXBsYWNlbWVudDsKLSAgICAgICAgaWYgKHJlcGxhY2VtZW50ID09IE5vTm9kZSkKKyAgICAg
ICAgTm9kZSogcmVwbGFjZW1lbnQgPSBjaGlsZC0+cmVwbGFjZW1lbnQ7CisgICAgICAgIGlmICgh
cmVwbGFjZW1lbnQpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIAotICAgICAgICBjaGls
ZC5zZXRJbmRleChyZXBsYWNlbWVudCk7CisgICAgICAgIGNoaWxkLnNldE5vZGUocmVwbGFjZW1l
bnQpOwogICAgICAgICAKICAgICAgICAgLy8gVGhlcmUgaXMgZGVmaW5pdGVseSBhIHJlcGxhY2Vt
ZW50LiBBc3NlcnQgdGhhdCB0aGUgcmVwbGFjZW1lbnQgZG9lcyBub3QKICAgICAgICAgLy8gaGF2
ZSBhIHJlcGxhY2VtZW50LgotICAgICAgICBBU1NFUlQobV9ncmFwaFtjaGlsZC5pbmRleCgpXS5y
ZXBsYWNlbWVudCA9PSBOb05vZGUpOworICAgICAgICBBU1NFUlQoIWNoaWxkLT5yZXBsYWNlbWVu
dCk7CiAgICAgICAgIAogICAgICAgICBpZiAoYWRkUmVmKQogICAgICAgICAgICAgbV9ncmFwaC5y
ZWYoY2hpbGQpOwogICAgIH0KICAgICAKLSAgICB2b2lkIGVsaW1pbmF0ZUlycmVsZXZhbnRQaGFu
dG9tQ2hpbGRyZW4oTm9kZSYgbm9kZSkKKyAgICB2b2lkIGVsaW1pbmF0ZUlycmVsZXZhbnRQaGFu
dG9tQ2hpbGRyZW4oTm9kZSogbm9kZSkKICAgICB7Ci0gICAgICAgIEFTU0VSVChub2RlLm9wKCkg
PT0gUGhhbnRvbSk7CisgICAgICAgIEFTU0VSVChub2RlLT5vcCgpID09IFBoYW50b20pOwogICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgQWRqYWNlbmN5TGlzdDo6U2l6ZTsgKytpKSB7
Ci0gICAgICAgICAgICBFZGdlIGVkZ2UgPSBub2RlLmNoaWxkcmVuLmNoaWxkKGkpOworICAgICAg
ICAgICAgRWRnZSBlZGdlID0gbm9kZS0+Y2hpbGRyZW4uY2hpbGQoaSk7CiAgICAgICAgICAgICBp
ZiAoIWVkZ2UpCiAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBpZiAobV9n
cmFwaFtlZGdlXS5mbGFncygpICYgTm9kZVJlbGV2YW50VG9PU1IpCisgICAgICAgICAgICBpZiAo
ZWRnZS0+ZmxhZ3MoKSAmIE5vZGVSZWxldmFudFRvT1NSKQogICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwogICAgICAgICAgICAgCiAjaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJC
T1NFKQotICAgICAgICAgICAgZGF0YUxvZygiICAgRWxpbWluYXRpbmcgZWRnZSBAIiwgbV9jb21w
aWxlSW5kZXgsICIgLT4gQCIsIGVkZ2UuaW5kZXgoKSk7CisgICAgICAgICAgICBkYXRhTG9nKCIg
ICBFbGltaW5hdGluZyBlZGdlIEAiLCBtX2N1cnJlbnROb2RlLT5pbmRleCgpLCAiIC0+IEAiLCBl
ZGdlLT5pbmRleCgpKTsKICNlbmRpZgogICAgICAgICAgICAgbV9ncmFwaC5kZXJlZihlZGdlKTsK
LSAgICAgICAgICAgIG5vZGUuY2hpbGRyZW4ucmVtb3ZlRWRnZUZyb21CYWcoaS0tKTsKKyAgICAg
ICAgICAgIG5vZGUtPmNoaWxkcmVuLnJlbW92ZUVkZ2VGcm9tQmFnKGktLSk7CiAgICAgICAgICAg
ICBtX2NoYW5nZWQgPSB0cnVlOwogICAgICAgICB9CiAgICAgfQogICAgIAogICAgIGVudW0gUHJl
ZGljdGlvbkhhbmRsaW5nTW9kZSB7IFJlcXVpcmVTYW1lUHJlZGljdGlvbiwgQWxsb3dQcmVkaWN0
aW9uTWlzbWF0Y2ggfTsKLSAgICBib29sIHNldFJlcGxhY2VtZW50KE5vZGVJbmRleCByZXBsYWNl
bWVudCwgUHJlZGljdGlvbkhhbmRsaW5nTW9kZSBwcmVkaWN0aW9uSGFuZGxpbmdNb2RlID0gUmVx
dWlyZVNhbWVQcmVkaWN0aW9uKQorICAgIGJvb2wgc2V0UmVwbGFjZW1lbnQoTm9kZSogcmVwbGFj
ZW1lbnQsIFByZWRpY3Rpb25IYW5kbGluZ01vZGUgcHJlZGljdGlvbkhhbmRsaW5nTW9kZSA9IFJl
cXVpcmVTYW1lUHJlZGljdGlvbikKICAgICB7Ci0gICAgICAgIGlmIChyZXBsYWNlbWVudCA9PSBO
b05vZGUpCisgICAgICAgIGlmICghcmVwbGFjZW1lbnQpCiAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgICAgIAogICAgICAgICAvLyBCZSBzYWZlLiBEb24ndCB0cnkgdG8gcGVyZm9ybSBy
ZXBsYWNlbWVudHMgaWYgdGhlIHByZWRpY3Rpb25zIGRvbid0CiAgICAgICAgIC8vIGFncmVlLgog
ICAgICAgICBpZiAocHJlZGljdGlvbkhhbmRsaW5nTW9kZSA9PSBSZXF1aXJlU2FtZVByZWRpY3Rp
b24KLSAgICAgICAgICAgICYmIG1fZ3JhcGhbbV9jb21waWxlSW5kZXhdLnByZWRpY3Rpb24oKSAh
PSBtX2dyYXBoW3JlcGxhY2VtZW50XS5wcmVkaWN0aW9uKCkpCisgICAgICAgICAgICAmJiBtX2N1
cnJlbnROb2RlLT5wcmVkaWN0aW9uKCkgIT0gcmVwbGFjZW1lbnQtPnByZWRpY3Rpb24oKSkKICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgCiAjaWYgREZHX0VOQUJMRShERUJVR19Q
Uk9QQUdBVElPTl9WRVJCT1NFKQotICAgICAgICBkYXRhTG9nRigiICAgUmVwbGFjaW5nIEAldSAt
PiBAJXUiLCBtX2NvbXBpbGVJbmRleCwgcmVwbGFjZW1lbnQpOworICAgICAgICBkYXRhTG9nRigi
ICAgUmVwbGFjaW5nIEAldSAtPiBAJXUiLCBtX2NvbXBpbGVOb2RlLT5pbmRleCgpLCByZXBsYWNl
bWVudC0+aW5kZXgoKSk7CiAjZW5kaWYKICAgICAgICAgCi0gICAgICAgIE5vZGUmIG5vZGUgPSBt
X2dyYXBoW21fY29tcGlsZUluZGV4XTsKLSAgICAgICAgbm9kZS5zZXRPcEFuZERlZmF1bHRGbGFn
cyhQaGFudG9tKTsKLSAgICAgICAgbm9kZS5zZXRSZWZDb3VudCgxKTsKLSAgICAgICAgZWxpbWlu
YXRlSXJyZWxldmFudFBoYW50b21DaGlsZHJlbihub2RlKTsKKyAgICAgICAgbV9jdXJyZW50Tm9k
ZS0+c2V0T3BBbmREZWZhdWx0RmxhZ3MoUGhhbnRvbSk7CisgICAgICAgIG1fY3VycmVudE5vZGUt
PnNldFJlZkNvdW50KDEpOworICAgICAgICBlbGltaW5hdGVJcnJlbGV2YW50UGhhbnRvbUNoaWxk
cmVuKG1fY3VycmVudE5vZGUpOwogICAgICAgICAKICAgICAgICAgLy8gQXQgdGhpcyBwb2ludCB3
ZSB3aWxsIGVsaW1pbmF0ZSBhbGwgcmVmZXJlbmNlcyB0byB0aGlzIG5vZGUuCi0gICAgICAgIG1f
Z3JhcGhbbV9jb21waWxlSW5kZXhdLnJlcGxhY2VtZW50ID0gcmVwbGFjZW1lbnQ7CisgICAgICAg
IG1fY3VycmVudE5vZGUtPnJlcGxhY2VtZW50ID0gcmVwbGFjZW1lbnQ7CiAgICAgICAgIAogICAg
ICAgICBtX2NoYW5nZWQgPSB0cnVlOwogICAgICAgICAKQEAgLTEwNjcsNTEgKzEwNDgsNDkgQEAg
cHJpdmF0ZToKICAgICAgICAgZGF0YUxvZ0YoIiAgIEVsaW1pbmF0aW5nIEAldSIsIG1fY29tcGls
ZUluZGV4KTsKICNlbmRpZgogICAgICAgICAKLSAgICAgICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhb
bV9jb21waWxlSW5kZXhdOwotICAgICAgICBBU1NFUlQobm9kZS5yZWZDb3VudCgpID09IDEpOwot
ICAgICAgICBBU1NFUlQobm9kZS5tdXN0R2VuZXJhdGUoKSk7Ci0gICAgICAgIG5vZGUuc2V0T3BB
bmREZWZhdWx0RmxhZ3MoUGhhbnRvbSk7Ci0gICAgICAgIGVsaW1pbmF0ZUlycmVsZXZhbnRQaGFu
dG9tQ2hpbGRyZW4obm9kZSk7CisgICAgICAgIEFTU0VSVChtX2N1cnJlbnROb2RlLT5yZWZDb3Vu
dCgpID09IDEpOworICAgICAgICBBU1NFUlQobV9jdXJyZW50Tm9kZS0+bXVzdEdlbmVyYXRlKCkp
OworICAgICAgICBtX2N1cnJlbnROb2RlLT5zZXRPcEFuZERlZmF1bHRGbGFncyhQaGFudG9tKTsK
KyAgICAgICAgZWxpbWluYXRlSXJyZWxldmFudFBoYW50b21DaGlsZHJlbihtX2N1cnJlbnROb2Rl
KTsKICAgICAgICAgCiAgICAgICAgIG1fY2hhbmdlZCA9IHRydWU7CiAgICAgfQogICAgIAotICAg
IHZvaWQgZWxpbWluYXRlKE5vZGVJbmRleCBub2RlSW5kZXgsIE5vZGVUeXBlIHBoYW50b21UeXBl
ID0gUGhhbnRvbSkKKyAgICB2b2lkIGVsaW1pbmF0ZShOb2RlKiBub2RlLCBOb2RlVHlwZSBwaGFu
dG9tVHlwZSA9IFBoYW50b20pCiAgICAgewotICAgICAgICBpZiAobm9kZUluZGV4ID09IE5vTm9k
ZSkKKyAgICAgICAgaWYgKCFub2RlKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBOb2Rl
JiBub2RlID0gbV9ncmFwaFtub2RlSW5kZXhdOwotICAgICAgICBpZiAobm9kZS5yZWZDb3VudCgp
ICE9IDEpCisgICAgICAgIGlmIChub2RlLT5yZWZDb3VudCgpICE9IDEpCiAgICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgIEFTU0VSVChub2RlLm11c3RHZW5lcmF0ZSgpKTsKLSAgICAgICAgbm9k
ZS5zZXRPcEFuZERlZmF1bHRGbGFncyhwaGFudG9tVHlwZSk7CisgICAgICAgIEFTU0VSVChub2Rl
LT5tdXN0R2VuZXJhdGUoKSk7CisgICAgICAgIG5vZGUtPnNldE9wQW5kRGVmYXVsdEZsYWdzKHBo
YW50b21UeXBlKTsKICAgICAgICAgaWYgKHBoYW50b21UeXBlID09IFBoYW50b20pCiAgICAgICAg
ICAgICBlbGltaW5hdGVJcnJlbGV2YW50UGhhbnRvbUNoaWxkcmVuKG5vZGUpOwogICAgICAgICAK
ICAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBwZXJmb3Jt
Tm9kZUNTRShOb2RlJiBub2RlKQorICAgIHZvaWQgcGVyZm9ybU5vZGVDU0UoTm9kZSogbm9kZSkK
ICAgICB7Ci0gICAgICAgIGJvb2wgc2hvdWxkR2VuZXJhdGUgPSBub2RlLnNob3VsZEdlbmVyYXRl
KCk7CisgICAgICAgIGJvb2wgc2hvdWxkR2VuZXJhdGUgPSBub2RlLT5zaG91bGRHZW5lcmF0ZSgp
OwogCi0gICAgICAgIGlmIChub2RlLmZsYWdzKCkgJiBOb2RlSGFzVmFyQXJncykgewotICAgICAg
ICAgICAgZm9yICh1bnNpZ25lZCBjaGlsZElkeCA9IG5vZGUuZmlyc3RDaGlsZCgpOyBjaGlsZElk
eCA8IG5vZGUuZmlyc3RDaGlsZCgpICsgbm9kZS5udW1DaGlsZHJlbigpOyBjaGlsZElkeCsrKQor
ICAgICAgICBpZiAobm9kZS0+ZmxhZ3MoKSAmIE5vZGVIYXNWYXJBcmdzKSB7CisgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGNoaWxkSWR4ID0gbm9kZS0+Zmlyc3RDaGlsZCgpOyBjaGlsZElkeCA8
IG5vZGUtPmZpcnN0Q2hpbGQoKSArIG5vZGUtPm51bUNoaWxkcmVuKCk7IGNoaWxkSWR4KyspCiAg
ICAgICAgICAgICAgICAgcGVyZm9ybVN1YnN0aXR1dGlvbihtX2dyYXBoLm1fdmFyQXJnQ2hpbGRy
ZW5bY2hpbGRJZHhdLCBzaG91bGRHZW5lcmF0ZSk7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICBwZXJmb3JtU3Vic3RpdHV0aW9uKG5vZGUuY2hpbGRyZW4uY2hpbGQxKCksIHNob3VsZEdl
bmVyYXRlKTsKLSAgICAgICAgICAgIHBlcmZvcm1TdWJzdGl0dXRpb24obm9kZS5jaGlsZHJlbi5j
aGlsZDIoKSwgc2hvdWxkR2VuZXJhdGUpOwotICAgICAgICAgICAgcGVyZm9ybVN1YnN0aXR1dGlv
bihub2RlLmNoaWxkcmVuLmNoaWxkMygpLCBzaG91bGRHZW5lcmF0ZSk7CisgICAgICAgICAgICBw
ZXJmb3JtU3Vic3RpdHV0aW9uKG5vZGUtPmNoaWxkcmVuLmNoaWxkMSgpLCBzaG91bGRHZW5lcmF0
ZSk7CisgICAgICAgICAgICBwZXJmb3JtU3Vic3RpdHV0aW9uKG5vZGUtPmNoaWxkcmVuLmNoaWxk
MigpLCBzaG91bGRHZW5lcmF0ZSk7CisgICAgICAgICAgICBwZXJmb3JtU3Vic3RpdHV0aW9uKG5v
ZGUtPmNoaWxkcmVuLmNoaWxkMygpLCBzaG91bGRHZW5lcmF0ZSk7CiAgICAgICAgIH0KICAgICAg
ICAgCi0gICAgICAgIGlmIChub2RlLm9wKCkgPT0gU2V0TG9jYWwpCi0gICAgICAgICAgICBtX2dy
YXBoW25vZGUuY2hpbGQxKCldLm1lcmdlRmxhZ3MoTm9kZVJlbGV2YW50VG9PU1IpOworICAgICAg
ICBpZiAobm9kZS0+b3AoKSA9PSBTZXRMb2NhbCkKKyAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgp
LT5tZXJnZUZsYWdzKE5vZGVSZWxldmFudFRvT1NSKTsKICAgICAgICAgCiAgICAgICAgIGlmICgh
c2hvdWxkR2VuZXJhdGUpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIAogI2lmIERGR19F
TkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKLSAgICAgICAgZGF0YUxvZ0YoIiAgICVz
IEAldTogIiwgR3JhcGg6Om9wTmFtZShtX2dyYXBoW21fY29tcGlsZUluZGV4XS5vcCgpKSwgbV9j
b21waWxlSW5kZXgpOworICAgICAgICBkYXRhTG9nRigiICAgJXMgQCV1OiAiLCBHcmFwaDo6b3BO
YW1lKG5vZGUtPm9wKCkpLCBub2RlLT5pbmRleCgpKTsKICNlbmRpZgogICAgICAgICAKICAgICAg
ICAgLy8gTk9URTogdGhlcmUgYXJlIHNvbWUgbm9kZXMgdGhhdCB3ZSBkZWxpYmVyYXRlbHkgZG9u
J3QgQ1NFIGV2ZW4gdGhvdWdoIHdlCkBAIC0xMTIzLDEwICsxMTAyLDEwIEBAIHByaXZhdGU6CiAg
ICAgICAgIC8vIFRvUHJpbWl0aXZlLCBidXQgd2UgY291bGQgY2hhbmdlIHRoYXQgd2l0aCBzb21l
IHNwZWN1bGF0aW9ucyBpZiB3ZSByZWFsbHkKICAgICAgICAgLy8gbmVlZGVkIHRvLgogICAgICAg
ICAKLSAgICAgICAgc3dpdGNoIChub2RlLm9wKCkpIHsKKyAgICAgICAgc3dpdGNoIChub2RlLT5v
cCgpKSB7CiAgICAgICAgIAogICAgICAgICBjYXNlIElkZW50aXR5OgotICAgICAgICAgICAgc2V0
UmVwbGFjZW1lbnQobm9kZS5jaGlsZDEoKS5pbmRleCgpKTsKKyAgICAgICAgICAgIHNldFJlcGxh
Y2VtZW50KG5vZGUtPmNoaWxkMSgpLm5vZGUoKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgIAogICAgICAgICAvLyBIYW5kbGUgdGhlIHB1cmUgbm9kZXMuIFRoZXNlIG5vZGVzIG5l
dmVyIGhhdmUgYW55IHNpZGUtZWZmZWN0cy4KQEAgLTExNjYsNDEgKzExNDUsNDEgQEAgcHJpdmF0
ZToKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgR2V0Q2Fs
bGVlOgotICAgICAgICAgICAgc2V0UmVwbGFjZW1lbnQoZ2V0Q2FsbGVlTG9hZEVsaW1pbmF0aW9u
KG5vZGUuY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpKTsKKyAgICAgICAgICAgIHNldFJlcGxh
Y2VtZW50KGdldENhbGxlZUxvYWRFbGltaW5hdGlvbihub2RlLT5jb2RlT3JpZ2luLmlubGluZUNh
bGxGcmFtZSkpOwogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSBHZXRMb2NhbDog
ewotICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBu
b2RlLnZhcmlhYmxlQWNjZXNzRGF0YSgpOworICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRh
KiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKICAgICAg
ICAgICAgIGlmICghdmFyaWFibGVBY2Nlc3NEYXRhLT5pc0NhcHR1cmVkKCkpCiAgICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBOb2RlSW5kZXggcmVsZXZhbnRMb2NhbE9wOwotICAg
ICAgICAgICAgTm9kZUluZGV4IHBvc3NpYmxlUmVwbGFjZW1lbnQgPSBnZXRMb2NhbExvYWRFbGlt
aW5hdGlvbih2YXJpYWJsZUFjY2Vzc0RhdGEtPmxvY2FsKCksIHJlbGV2YW50TG9jYWxPcCwgdmFy
aWFibGVBY2Nlc3NEYXRhLT5pc0NhcHR1cmVkKCkpOwotICAgICAgICAgICAgaWYgKHJlbGV2YW50
TG9jYWxPcCA9PSBOb05vZGUpCisgICAgICAgICAgICBOb2RlKiByZWxldmFudExvY2FsT3A7Cisg
ICAgICAgICAgICBOb2RlKiBwb3NzaWJsZVJlcGxhY2VtZW50ID0gZ2V0TG9jYWxMb2FkRWxpbWlu
YXRpb24odmFyaWFibGVBY2Nlc3NEYXRhLT5sb2NhbCgpLCByZWxldmFudExvY2FsT3AsIHZhcmlh
YmxlQWNjZXNzRGF0YS0+aXNDYXB0dXJlZCgpKTsKKyAgICAgICAgICAgIGlmICghcmVsZXZhbnRM
b2NhbE9wKQogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgaWYgKG1fZ3JhcGhb
cmVsZXZhbnRMb2NhbE9wXS5vcCgpICE9IEdldExvY2FsVW5saW5rZWQKLSAgICAgICAgICAgICAg
ICAmJiBtX2dyYXBoW3JlbGV2YW50TG9jYWxPcF0udmFyaWFibGVBY2Nlc3NEYXRhKCkgIT0gdmFy
aWFibGVBY2Nlc3NEYXRhKQorICAgICAgICAgICAgaWYgKHJlbGV2YW50TG9jYWxPcC0+b3AoKSAh
PSBHZXRMb2NhbFVubGlua2VkCisgICAgICAgICAgICAgICAgJiYgcmVsZXZhbnRMb2NhbE9wLT52
YXJpYWJsZUFjY2Vzc0RhdGEoKSAhPSB2YXJpYWJsZUFjY2Vzc0RhdGEpCiAgICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICBOb2RlSW5kZXggcGhpSW5kZXggPSBub2RlLmNoaWxkMSgp
LmluZGV4KCk7CisgICAgICAgICAgICBOb2RlKiBwaGkgPSBub2RlLT5jaGlsZDEoKS5ub2RlKCk7
CiAgICAgICAgICAgICBpZiAoIXNldFJlcGxhY2VtZW50KHBvc3NpYmxlUmVwbGFjZW1lbnQpKQog
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgLy8gSWYgdGhlIEdldExvY2FsIHdl
IHJlcGxhY2VkIHVzZWQgdG8gcmVmZXIgdG8gYSBTZXRMb2NhbCwgdGhlbiBpdCBub3cKICAgICAg
ICAgICAgIC8vIHNob3VsZCByZWZlciB0byB0aGUgY2hpbGQgb2YgdGhlIFNldExvY2FsIGluc3Rl
YWQuCi0gICAgICAgICAgICBpZiAobV9ncmFwaFtwaGlJbmRleF0ub3AoKSA9PSBTZXRMb2NhbCkg
ewotICAgICAgICAgICAgICAgIEFTU0VSVChub2RlLmNoaWxkMSgpLmluZGV4KCkgPT0gcGhpSW5k
ZXgpOwotICAgICAgICAgICAgICAgIG1fZ3JhcGguY2hhbmdlRWRnZShub2RlLmNoaWxkcmVuLmNo
aWxkMSgpLCBtX2dyYXBoW3BoaUluZGV4XS5jaGlsZDEoKSk7CisgICAgICAgICAgICBpZiAocGhp
LT5vcCgpID09IFNldExvY2FsKSB7CisgICAgICAgICAgICAgICAgQVNTRVJUKG5vZGUtPmNoaWxk
MSgpID09IHBoaSk7CisgICAgICAgICAgICAgICAgbV9ncmFwaC5jaGFuZ2VFZGdlKG5vZGUtPmNo
aWxkcmVuLmNoaWxkMSgpLCBwaGktPmNoaWxkMSgpKTsKICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIE5vZGVJbmRleCBvbGRUYWlsSW5kZXggPSBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRU
YWlsLm9wZXJhbmQoCisgICAgICAgICAgICBOb2RlKiBvbGRUYWlsID0gbV9jdXJyZW50QmxvY2st
PnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKAogICAgICAgICAgICAgICAgIHZhcmlhYmxlQWNjZXNz
RGF0YS0+bG9jYWwoKSk7Ci0gICAgICAgICAgICBpZiAob2xkVGFpbEluZGV4ID09IG1fY29tcGls
ZUluZGV4KSB7CisgICAgICAgICAgICBpZiAob2xkVGFpbCA9PSBub2RlKSB7CiAgICAgICAgICAg
ICAgICAgbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKHZhcmlhYmxlQWNj
ZXNzRGF0YS0+bG9jYWwoKSkgPQogICAgICAgICAgICAgICAgICAgICByZWxldmFudExvY2FsT3A7
CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgLy8gTWFpbnRhaW4gZ3JhcGggaW50
ZWdyaXR5OiBzaW5jZSB3ZSdyZSByZXBsYWNpbmcgYSBHZXRMb2NhbCB3aXRoIGEgR2V0TG9jYWxV
bmxpbmtlZCwKICAgICAgICAgICAgICAgICAvLyBtYWtlIHN1cmUgdGhhdCB0aGUgR2V0TG9jYWxV
bmxpbmtlZCBpcyBub3cgbGlua2VkLgotICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoW3JlbGV2
YW50TG9jYWxPcF0ub3AoKSA9PSBHZXRMb2NhbFVubGlua2VkKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIG1fZ3JhcGhbcmVsZXZhbnRMb2NhbE9wXS5zZXRPcChHZXRMb2NhbCk7Ci0gICAgICAgICAg
ICAgICAgICAgIG1fZ3JhcGhbcmVsZXZhbnRMb2NhbE9wXS5jaGlsZHJlbi5jaGlsZDEoKSA9IEVk
Z2UocGhpSW5kZXgpOwotICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLnJlZihwaGlJbmRleCk7
CisgICAgICAgICAgICAgICAgaWYgKHJlbGV2YW50TG9jYWxPcC0+b3AoKSA9PSBHZXRMb2NhbFVu
bGlua2VkKSB7CisgICAgICAgICAgICAgICAgICAgIHJlbGV2YW50TG9jYWxPcC0+c2V0T3AoR2V0
TG9jYWwpOworICAgICAgICAgICAgICAgICAgICByZWxldmFudExvY2FsT3AtPmNoaWxkcmVuLmNo
aWxkMSgpID0gRWRnZShwaGkpOworICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLnJlZihwaGkp
OwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIG1fY2hhbmdl
ZCA9IHRydWU7CkBAIC0xMjA4LDE5ICsxMTg3LDE4IEBAIHByaXZhdGU6CiAgICAgICAgIH0KICAg
ICAgICAgICAgIAogICAgICAgICBjYXNlIEdldExvY2FsVW5saW5rZWQ6IHsKLSAgICAgICAgICAg
IE5vZGVJbmRleCByZWxldmFudExvY2FsT3BJZ25vcmVkOwotICAgICAgICAgICAgc2V0UmVwbGFj
ZW1lbnQoZ2V0TG9jYWxMb2FkRWxpbWluYXRpb24obm9kZS51bmxpbmtlZExvY2FsKCksIHJlbGV2
YW50TG9jYWxPcElnbm9yZWQsIHRydWUpKTsKKyAgICAgICAgICAgIE5vZGUqIHJlbGV2YW50TG9j
YWxPcElnbm9yZWQ7CisgICAgICAgICAgICBzZXRSZXBsYWNlbWVudChnZXRMb2NhbExvYWRFbGlt
aW5hdGlvbihub2RlLT51bmxpbmtlZExvY2FsKCksIHJlbGV2YW50TG9jYWxPcElnbm9yZWQsIHRy
dWUpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAg
ICAgY2FzZSBGbHVzaDogewotICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJs
ZUFjY2Vzc0RhdGEgPSBub2RlLnZhcmlhYmxlQWNjZXNzRGF0YSgpOworICAgICAgICAgICAgVmFy
aWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBub2RlLT52YXJpYWJsZUFjY2Vz
c0RhdGEoKTsKICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBsb2NhbCA9IHZhcmlhYmxlQWNj
ZXNzRGF0YS0+bG9jYWwoKTsKLSAgICAgICAgICAgIE5vZGVJbmRleCByZXBsYWNlbWVudEluZGV4
ID0gbm9kZS5jaGlsZDEoKS5pbmRleCgpOwotICAgICAgICAgICAgTm9kZSYgcmVwbGFjZW1lbnQg
PSBtX2dyYXBoW3JlcGxhY2VtZW50SW5kZXhdOwotICAgICAgICAgICAgaWYgKHJlcGxhY2VtZW50
Lm9wKCkgIT0gU2V0TG9jYWwpCisgICAgICAgICAgICBOb2RlKiByZXBsYWNlbWVudCA9IG5vZGUt
PmNoaWxkMSgpLm5vZGUoKTsKKyAgICAgICAgICAgIGlmIChyZXBsYWNlbWVudC0+b3AoKSAhPSBT
ZXRMb2NhbCkKICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIEFTU0VSVChyZXBs
YWNlbWVudC52YXJpYWJsZUFjY2Vzc0RhdGEoKSA9PSB2YXJpYWJsZUFjY2Vzc0RhdGEpOworICAg
ICAgICAgICAgQVNTRVJUKHJlcGxhY2VtZW50LT52YXJpYWJsZUFjY2Vzc0RhdGEoKSA9PSB2YXJp
YWJsZUFjY2Vzc0RhdGEpOwogICAgICAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBiZSBhYmxl
IHRvIHJlbW92ZSBTZXRMb2NhbHMgdGhhdCBjYW4gZXhpdDsgd2UganVzdCBuZWVkCiAgICAgICAg
ICAgICAvLyB0byByZXBsYWNlIHRoZW0gd2l0aCBhcHByb3ByaWF0ZSB0eXBlIGNoZWNrcy4KICAg
ICAgICAgICAgIGlmIChtX2dyYXBoLm1fZml4cG9pbnRTdGF0ZSA9PSBGaXhwb2ludE5vdENvbnZl
cmdlZCkgewpAQCAtMTI0MCwyNiArMTIxOCwyNiBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgICAgICBpZiAocmVwbGFjZW1lbnQuY2FuRXhpdCgpKQorICAgICAgICAgICAg
ICAgIGlmIChyZXBsYWNlbWVudC0+Y2FuRXhpdCgpKQogICAgICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIFNldExvY2FsU3RvcmVFbGltaW5hdGlvblJl
c3VsdCByZXN1bHQgPQotICAgICAgICAgICAgICAgIHNldExvY2FsU3RvcmVFbGltaW5hdGlvbihs
b2NhbCwgcmVwbGFjZW1lbnRJbmRleCk7CisgICAgICAgICAgICAgICAgc2V0TG9jYWxTdG9yZUVs
aW1pbmF0aW9uKGxvY2FsLCByZXBsYWNlbWVudCk7CiAgICAgICAgICAgICBpZiAocmVzdWx0Lm1h
eUJlQWNjZXNzZWQgfHwgcmVzdWx0Lm1heUNsb2JiZXJXb3JsZCkKICAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgIEFTU0VSVChyZXBsYWNlbWVudC5vcCgpID09IFNldExvY2FsKTsK
LSAgICAgICAgICAgIEFTU0VSVChyZXBsYWNlbWVudC5yZWZDb3VudCgpID09IDEpOwotICAgICAg
ICAgICAgQVNTRVJUKHJlcGxhY2VtZW50LnNob3VsZEdlbmVyYXRlKCkpOworICAgICAgICAgICAg
QVNTRVJUKHJlcGxhY2VtZW50LT5vcCgpID09IFNldExvY2FsKTsKKyAgICAgICAgICAgIEFTU0VS
VChyZXBsYWNlbWVudC0+cmVmQ291bnQoKSA9PSAxKTsKKyAgICAgICAgICAgIEFTU0VSVChyZXBs
YWNlbWVudC0+c2hvdWxkR2VuZXJhdGUoKSk7CiAgICAgICAgICAgICAvLyBGSVhNRTogSW52ZXN0
aWdhdGUgdXNpbmcgbWF5RXhpdCBhcyBhIGZ1cnRoZXIgb3B0aW1pemF0aW9uLgotICAgICAgICAg
ICAgbm9kZS5zZXRPcEFuZERlZmF1bHRGbGFncyhQaGFudG9tKTsKLSAgICAgICAgICAgIE5vZGVJ
bmRleCBkYXRhTm9kZUluZGV4ID0gcmVwbGFjZW1lbnQuY2hpbGQxKCkuaW5kZXgoKTsKLSAgICAg
ICAgICAgIEFTU0VSVChtX2dyYXBoW2RhdGFOb2RlSW5kZXhdLmhhc1Jlc3VsdCgpKTsKKyAgICAg
ICAgICAgIG5vZGUtPnNldE9wQW5kRGVmYXVsdEZsYWdzKFBoYW50b20pOworICAgICAgICAgICAg
Tm9kZSogZGF0YU5vZGUgPSByZXBsYWNlbWVudC0+Y2hpbGQxKCkubm9kZSgpOworICAgICAgICAg
ICAgQVNTRVJUKGRhdGFOb2RlLT5oYXNSZXN1bHQoKSk7CiAgICAgICAgICAgICBtX2dyYXBoLmNs
ZWFyQW5kRGVyZWZDaGlsZDEobm9kZSk7Ci0gICAgICAgICAgICBub2RlLmNoaWxkcmVuLmNoaWxk
MSgpID0gRWRnZShkYXRhTm9kZUluZGV4KTsKLSAgICAgICAgICAgIG1fZ3JhcGgucmVmKGRhdGFO
b2RlSW5kZXgpOwotICAgICAgICAgICAgTm9kZUluZGV4IG9sZFRhaWxJbmRleCA9IG1fY3VycmVu
dEJsb2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZChsb2NhbCk7Ci0gICAgICAgICAgICBpZiAo
b2xkVGFpbEluZGV4ID09IG1fY29tcGlsZUluZGV4KQotICAgICAgICAgICAgICAgIG1fY3VycmVu
dEJsb2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZChsb2NhbCkgPSByZXBsYWNlbWVudEluZGV4
OworICAgICAgICAgICAgbm9kZS0+Y2hpbGRyZW4uY2hpbGQxKCkgPSBFZGdlKGRhdGFOb2RlKTsK
KyAgICAgICAgICAgIG1fZ3JhcGgucmVmKGRhdGFOb2RlKTsKKyAgICAgICAgICAgIE5vZGUqIG9s
ZFRhaWwgPSBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQobG9jYWwpOwor
ICAgICAgICAgICAgaWYgKG9sZFRhaWwgPT0gbm9kZSkKKyAgICAgICAgICAgICAgICBtX2N1cnJl
bnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQobG9jYWwpID0gcmVwbGFjZW1lbnQ7CiAg
ICAgICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IH0KQEAgLTEyNzYsMTEgKzEyNTQsMTEgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgR2V0QXJyYXlMZW5ndGg6Ci0gICAgICAgICAgICBz
ZXRSZXBsYWNlbWVudChnZXRBcnJheUxlbmd0aEVsaW1pbmF0aW9uKG5vZGUuY2hpbGQxKCkuaW5k
ZXgoKSkpOworICAgICAgICAgICAgc2V0UmVwbGFjZW1lbnQoZ2V0QXJyYXlMZW5ndGhFbGltaW5h
dGlvbihub2RlLT5jaGlsZDEoKS5ub2RlKCkpKTsKICAgICAgICAgICAgIGJyZWFrOwogCiAgICAg
ICAgIGNhc2UgR2V0TXlTY29wZToKLSAgICAgICAgICAgIHNldFJlcGxhY2VtZW50KGdldE15U2Nv
cGVMb2FkRWxpbWluYXRpb24obm9kZS5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSkpOworICAg
ICAgICAgICAgc2V0UmVwbGFjZW1lbnQoZ2V0TXlTY29wZUxvYWRFbGltaW5hdGlvbihub2RlLT5j
b2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICAKICAgICAgICAgLy8gSGFuZGxlIG5vZGVzIHRoYXQgYXJlIGNvbmRpdGlvbmFsbHkgcHVy
ZTogdGhlc2UgYXJlIHB1cmUsIGFuZCBjYW4KQEAgLTEyOTIsOSArMTI3MCw5IEBAIHByaXZhdGU6
CiAgICAgICAgIGNhc2UgQ29tcGFyZUdyZWF0ZXJFcToKICAgICAgICAgY2FzZSBDb21wYXJlRXE6
IHsKICAgICAgICAgICAgIGlmIChtX2dyYXBoLmlzUHJlZGljdGVkTnVtZXJpY2FsKG5vZGUpKSB7
Ci0gICAgICAgICAgICAgICAgTm9kZUluZGV4IHJlcGxhY2VtZW50SW5kZXggPSBwdXJlQ1NFKG5v
ZGUpOwotICAgICAgICAgICAgICAgIGlmIChyZXBsYWNlbWVudEluZGV4ICE9IE5vTm9kZSAmJiBt
X2dyYXBoLmlzUHJlZGljdGVkTnVtZXJpY2FsKG1fZ3JhcGhbcmVwbGFjZW1lbnRJbmRleF0pKQot
ICAgICAgICAgICAgICAgICAgICBzZXRSZXBsYWNlbWVudChyZXBsYWNlbWVudEluZGV4KTsKKyAg
ICAgICAgICAgICAgICBOb2RlKiByZXBsYWNlbWVudCA9IHB1cmVDU0Uobm9kZSk7CisgICAgICAg
ICAgICAgICAgaWYgKHJlcGxhY2VtZW50ICYmIG1fZ3JhcGguaXNQcmVkaWN0ZWROdW1lcmljYWwo
cmVwbGFjZW1lbnQpKQorICAgICAgICAgICAgICAgICAgICBzZXRSZXBsYWNlbWVudChyZXBsYWNl
bWVudCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAt
MTMwMiwxNiArMTI4MCwxNiBAQCBwcml2YXRlOgogICAgICAgICAvLyBGaW5hbGx5IGhhbmRsZSBo
ZWFwIGFjY2Vzc2VzLiBUaGVzZSBhcmUgbm90IHF1aXRlIHB1cmUsIGJ1dCB3ZSBjYW4gc3RpbGwK
ICAgICAgICAgLy8gb3B0aW1pemUgdGhlbSBwcm92aWRlZCB0aGF0IHNvbWUgc3VidGxlIGNvbmRp
dGlvbnMgYXJlIG1ldC4KICAgICAgICAgY2FzZSBHZXRHbG9iYWxWYXI6Ci0gICAgICAgICAgICBz
ZXRSZXBsYWNlbWVudChnbG9iYWxWYXJMb2FkRWxpbWluYXRpb24obm9kZS5yZWdpc3RlclBvaW50
ZXIoKSkpOworICAgICAgICAgICAgc2V0UmVwbGFjZW1lbnQoZ2xvYmFsVmFyTG9hZEVsaW1pbmF0
aW9uKG5vZGUtPnJlZ2lzdGVyUG9pbnRlcigpKSk7CiAgICAgICAgICAgICBicmVhazsKIAogICAg
ICAgICBjYXNlIEdldFNjb3BlZFZhcjogewotICAgICAgICAgICAgc2V0UmVwbGFjZW1lbnQoc2Nv
cGVkVmFyTG9hZEVsaW1pbmF0aW9uKG5vZGUuY2hpbGQxKCkuaW5kZXgoKSwgbm9kZS52YXJOdW1i
ZXIoKSkpOworICAgICAgICAgICAgc2V0UmVwbGFjZW1lbnQoc2NvcGVkVmFyTG9hZEVsaW1pbmF0
aW9uKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgbm9kZS0+dmFyTnVtYmVyKCkpKTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBHbG9iYWxWYXJXYXRjaHBvaW50
OgotICAgICAgICAgICAgaWYgKGdsb2JhbFZhcldhdGNocG9pbnRFbGltaW5hdGlvbihub2RlLnJl
Z2lzdGVyUG9pbnRlcigpKSkKKyAgICAgICAgICAgIGlmIChnbG9iYWxWYXJXYXRjaHBvaW50RWxp
bWluYXRpb24obm9kZS0+cmVnaXN0ZXJQb2ludGVyKCkpKQogICAgICAgICAgICAgICAgIGVsaW1p
bmF0ZSgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKQEAgLTEzMTksODMgKzEy
OTcsODMgQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBQdXRHbG9iYWxWYXJDaGVjazoKICAgICAg
ICAgICAgIGlmIChtX2dyYXBoLm1fZml4cG9pbnRTdGF0ZSA9PSBGaXhwb2ludE5vdENvbnZlcmdl
ZCkKICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGVsaW1pbmF0ZShnbG9iYWxW
YXJTdG9yZUVsaW1pbmF0aW9uKG5vZGUucmVnaXN0ZXJQb2ludGVyKCkpKTsKKyAgICAgICAgICAg
IGVsaW1pbmF0ZShnbG9iYWxWYXJTdG9yZUVsaW1pbmF0aW9uKG5vZGUtPnJlZ2lzdGVyUG9pbnRl
cigpKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgICAgICBjYXNlIFB1
dFNjb3BlZFZhcjogewogICAgICAgICAgICAgaWYgKG1fZ3JhcGgubV9maXhwb2ludFN0YXRlID09
IEZpeHBvaW50Tm90Q29udmVyZ2VkKQogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgZWxpbWluYXRlKHNjb3BlZFZhclN0b3JlRWxpbWluYXRpb24obm9kZS5jaGlsZDEoKS5pbmRl
eCgpLCBub2RlLmNoaWxkMigpLmluZGV4KCksIG5vZGUudmFyTnVtYmVyKCkpKTsKKyAgICAgICAg
ICAgIGVsaW1pbmF0ZShzY29wZWRWYXJTdG9yZUVsaW1pbmF0aW9uKG5vZGUtPmNoaWxkMSgpLm5v
ZGUoKSwgbm9kZS0+Y2hpbGQyKCkubm9kZSgpLCBub2RlLT52YXJOdW1iZXIoKSkpOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIEdldEJ5VmFsOgogICAgICAg
ICAgICAgaWYgKG1fZ3JhcGguYnlWYWxJc1B1cmUobm9kZSkpCi0gICAgICAgICAgICAgICAgc2V0
UmVwbGFjZW1lbnQoZ2V0QnlWYWxMb2FkRWxpbWluYXRpb24obm9kZS5jaGlsZDEoKS5pbmRleCgp
LCBub2RlLmNoaWxkMigpLmluZGV4KCkpKTsKKyAgICAgICAgICAgICAgICBzZXRSZXBsYWNlbWVu
dChnZXRCeVZhbExvYWRFbGltaW5hdGlvbihub2RlLT5jaGlsZDEoKS5ub2RlKCksIG5vZGUtPmNo
aWxkMigpLm5vZGUoKSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICAg
ICAgY2FzZSBQdXRCeVZhbDogewogICAgICAgICAgICAgRWRnZSBjaGlsZDEgPSBtX2dyYXBoLnZh
ckFyZ0NoaWxkKG5vZGUsIDApOwogICAgICAgICAgICAgRWRnZSBjaGlsZDIgPSBtX2dyYXBoLnZh
ckFyZ0NoaWxkKG5vZGUsIDEpOwotICAgICAgICAgICAgaWYgKG5vZGUuYXJyYXlNb2RlKCkuY2Fu
Q1NFU3RvcmFnZSgpKSB7Ci0gICAgICAgICAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRleCA9IGdl
dEJ5VmFsTG9hZEVsaW1pbmF0aW9uKGNoaWxkMS5pbmRleCgpLCBjaGlsZDIuaW5kZXgoKSk7Ci0g
ICAgICAgICAgICAgICAgaWYgKG5vZGVJbmRleCA9PSBOb05vZGUpCisgICAgICAgICAgICBpZiAo
bm9kZS0+YXJyYXlNb2RlKCkuY2FuQ1NFU3RvcmFnZSgpKSB7CisgICAgICAgICAgICAgICAgTm9k
ZSogcmVwbGFjZW1lbnQgPSBnZXRCeVZhbExvYWRFbGltaW5hdGlvbihjaGlsZDEubm9kZSgpLCBj
aGlsZDIubm9kZSgpKTsKKyAgICAgICAgICAgICAgICBpZiAoIXJlcGxhY2VtZW50KQogICAgICAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBub2RlLnNldE9wKFB1dEJ5VmFs
QWxpYXMpOworICAgICAgICAgICAgICAgIG5vZGUtPnNldE9wKFB1dEJ5VmFsQWxpYXMpOwogICAg
ICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIAog
ICAgICAgICBjYXNlIENoZWNrU3RydWN0dXJlOgogICAgICAgICBjYXNlIEZvcndhcmRDaGVja1N0
cnVjdHVyZToKLSAgICAgICAgICAgIGlmIChjaGVja1N0cnVjdHVyZUVsaW1pbmF0aW9uKG5vZGUu
c3RydWN0dXJlU2V0KCksIG5vZGUuY2hpbGQxKCkuaW5kZXgoKSkpCisgICAgICAgICAgICBpZiAo
Y2hlY2tTdHJ1Y3R1cmVFbGltaW5hdGlvbihub2RlLT5zdHJ1Y3R1cmVTZXQoKSwgbm9kZS0+Y2hp
bGQxKCkubm9kZSgpKSkKICAgICAgICAgICAgICAgICBlbGltaW5hdGUoKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgU3RydWN0dXJlVHJhbnNpdGlvbldh
dGNocG9pbnQ6CiAgICAgICAgIGNhc2UgRm9yd2FyZFN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBv
aW50OgotICAgICAgICAgICAgaWYgKHN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50RWxpbWlu
YXRpb24obm9kZS5zdHJ1Y3R1cmUoKSwgbm9kZS5jaGlsZDEoKS5pbmRleCgpKSkKKyAgICAgICAg
ICAgIGlmIChzdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludEVsaW1pbmF0aW9uKG5vZGUtPnN0
cnVjdHVyZSgpLCBub2RlLT5jaGlsZDEoKS5ub2RlKCkpKQogICAgICAgICAgICAgICAgIGVsaW1p
bmF0ZSgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBQ
dXRTdHJ1Y3R1cmU6CiAgICAgICAgICAgICBpZiAobV9ncmFwaC5tX2ZpeHBvaW50U3RhdGUgPT0g
Rml4cG9pbnROb3RDb252ZXJnZWQpCiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICBlbGltaW5hdGUocHV0U3RydWN0dXJlU3RvcmVFbGltaW5hdGlvbihub2RlLmNoaWxkMSgpLmlu
ZGV4KCkpLCBQaGFudG9tUHV0U3RydWN0dXJlKTsKKyAgICAgICAgICAgIGVsaW1pbmF0ZShwdXRT
dHJ1Y3R1cmVTdG9yZUVsaW1pbmF0aW9uKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSksIFBoYW50b21Q
dXRTdHJ1Y3R1cmUpOwogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSBDaGVja0Z1
bmN0aW9uOgotICAgICAgICAgICAgaWYgKGNoZWNrRnVuY3Rpb25FbGltaW5hdGlvbihub2RlLmZ1
bmN0aW9uKCksIG5vZGUuY2hpbGQxKCkuaW5kZXgoKSkpCisgICAgICAgICAgICBpZiAoY2hlY2tG
dW5jdGlvbkVsaW1pbmF0aW9uKG5vZGUtPmZ1bmN0aW9uKCksIG5vZGUtPmNoaWxkMSgpLm5vZGUo
KSkpCiAgICAgICAgICAgICAgICAgZWxpbWluYXRlKCk7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBDaGVja0V4ZWN1dGFibGU6Ci0gICAgICAgICAg
ICBpZiAoY2hlY2tFeGVjdXRhYmxlRWxpbWluYXRpb24obm9kZS5leGVjdXRhYmxlKCksIG5vZGUu
Y2hpbGQxKCkuaW5kZXgoKSkpCisgICAgICAgICAgICBpZiAoY2hlY2tFeGVjdXRhYmxlRWxpbWlu
YXRpb24obm9kZS0+ZXhlY3V0YWJsZSgpLCBub2RlLT5jaGlsZDEoKS5ub2RlKCkpKQogICAgICAg
ICAgICAgICAgIGVsaW1pbmF0ZSgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAg
ICAgCiAgICAgICAgIGNhc2UgQ2hlY2tBcnJheToKLSAgICAgICAgICAgIGlmIChjaGVja0FycmF5
RWxpbWluYXRpb24obm9kZS5jaGlsZDEoKS5pbmRleCgpLCBub2RlLmFycmF5TW9kZSgpKSkKKyAg
ICAgICAgICAgIGlmIChjaGVja0FycmF5RWxpbWluYXRpb24obm9kZS0+Y2hpbGQxKCkubm9kZSgp
LCBub2RlLT5hcnJheU1vZGUoKSkpCiAgICAgICAgICAgICAgICAgZWxpbWluYXRlKCk7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgICAgICBjYXNlIEdldEluZGV4ZWRQcm9w
ZXJ0eVN0b3JhZ2U6IHsKLSAgICAgICAgICAgIHNldFJlcGxhY2VtZW50KGdldEluZGV4ZWRQcm9w
ZXJ0eVN0b3JhZ2VMb2FkRWxpbWluYXRpb24obm9kZS5jaGlsZDEoKS5pbmRleCgpLCBub2RlLmFy
cmF5TW9kZSgpKSk7CisgICAgICAgICAgICBzZXRSZXBsYWNlbWVudChnZXRJbmRleGVkUHJvcGVy
dHlTdG9yYWdlTG9hZEVsaW1pbmF0aW9uKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgbm9kZS0+YXJy
YXlNb2RlKCkpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKICAgICAgICAgY2Fz
ZSBHZXRCdXR0ZXJmbHk6Ci0gICAgICAgICAgICBzZXRSZXBsYWNlbWVudChnZXRQcm9wZXJ0eVN0
b3JhZ2VMb2FkRWxpbWluYXRpb24obm9kZS5jaGlsZDEoKS5pbmRleCgpKSk7CisgICAgICAgICAg
ICBzZXRSZXBsYWNlbWVudChnZXRQcm9wZXJ0eVN0b3JhZ2VMb2FkRWxpbWluYXRpb24obm9kZS0+
Y2hpbGQxKCkubm9kZSgpKSk7CiAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICBjYXNlIEdl
dEJ5T2Zmc2V0OgotICAgICAgICAgICAgc2V0UmVwbGFjZW1lbnQoZ2V0QnlPZmZzZXRMb2FkRWxp
bWluYXRpb24obV9ncmFwaC5tX3N0b3JhZ2VBY2Nlc3NEYXRhW25vZGUuc3RvcmFnZUFjY2Vzc0Rh
dGFJbmRleCgpXS5pZGVudGlmaWVyTnVtYmVyLCBub2RlLmNoaWxkMSgpLmluZGV4KCkpKTsKKyAg
ICAgICAgICAgIHNldFJlcGxhY2VtZW50KGdldEJ5T2Zmc2V0TG9hZEVsaW1pbmF0aW9uKG1fZ3Jh
cGgubV9zdG9yYWdlQWNjZXNzRGF0YVtub2RlLT5zdG9yYWdlQWNjZXNzRGF0YUluZGV4KCldLmlk
ZW50aWZpZXJOdW1iZXIsIG5vZGUtPmNoaWxkMSgpLm5vZGUoKSkpOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBQdXRCeU9mZnNldDoKICAgICAgICAgICAg
IGlmIChtX2dyYXBoLm1fZml4cG9pbnRTdGF0ZSA9PSBGaXhwb2ludE5vdENvbnZlcmdlZCkKICAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGVsaW1pbmF0ZShwdXRCeU9mZnNldFN0
b3JlRWxpbWluYXRpb24obV9ncmFwaC5tX3N0b3JhZ2VBY2Nlc3NEYXRhW25vZGUuc3RvcmFnZUFj
Y2Vzc0RhdGFJbmRleCgpXS5pZGVudGlmaWVyTnVtYmVyLCBub2RlLmNoaWxkMSgpLmluZGV4KCkp
KTsKKyAgICAgICAgICAgIGVsaW1pbmF0ZShwdXRCeU9mZnNldFN0b3JlRWxpbWluYXRpb24obV9n
cmFwaC5tX3N0b3JhZ2VBY2Nlc3NEYXRhW25vZGUtPnN0b3JhZ2VBY2Nlc3NEYXRhSW5kZXgoKV0u
aWRlbnRpZmllck51bWJlciwgbm9kZS0+Y2hpbGQxKCkubm9kZSgpKSk7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgIAogICAgICAgICBjYXNlIFBoYW50b206CkBAIC0xNDA5LDcgKzEz
ODcsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAg
Ci0gICAgICAgIG1fbGFzdFNlZW5bbm9kZS5vcCgpXSA9IG1faW5kZXhJbkJsb2NrOworICAgICAg
ICBtX2xhc3RTZWVuW25vZGUtPm9wKCldID0gbV9pbmRleEluQmxvY2s7CiAjaWYgREZHX0VOQUJM
RShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQogICAgICAgICBkYXRhTG9nRigiXG4iKTsKICNl
bmRpZgpAQCAtMTQzMCwzNyArMTQwOCwzNiBAQCBwcml2YXRlOgogICAgICAgICAvLyByZXBsYWNl
bWVudHMgY2xlYXJlZCwgc28gd2UgZG9uJ3QgZ2V0IGNvbmZ1c2VkIHdoaWxlIGRvaW5nIHN1YnN0
aXR1dGlvbnMgb24KICAgICAgICAgLy8gR2V0TG9jYWwncy4KICAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IGJsb2NrLT5waGlzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICBBU1NF
UlQobV9ncmFwaFtibG9jay0+cGhpc1tpXV0uZmxhZ3MoKSAmIE5vZGVSZWxldmFudFRvT1NSKTsK
LSAgICAgICAgICAgIG1fZ3JhcGhbYmxvY2stPnBoaXNbaV1dLnJlcGxhY2VtZW50ID0gTm9Ob2Rl
OworICAgICAgICAgICAgQVNTRVJUKGJsb2NrLT5waGlzW2ldLT5mbGFncygpICYgTm9kZVJlbGV2
YW50VG9PU1IpOworICAgICAgICAgICAgYmxvY2stPnBoaXNbaV0tPnJlcGxhY2VtZW50ID0gMDsK
ICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgLy8gTWFrZSBhbGwgb2YgbXkgU2V0TG9jYWwg
YW5kIEdldExvY2FsIG5vZGVzIHJlbGV2YW50IHRvIE9TUiwgYW5kIGRvIHNvbWUgb3RoZXIKICAg
ICAgICAgLy8gbmVjZXNzYXJ5IGJvb2trZWVwaW5nLgogICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgYmxvY2stPnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICBOb2RlSW5kZXggbm9k
ZUluZGV4ID0gYmxvY2stPmF0KGkpOwotICAgICAgICAgICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhb
bm9kZUluZGV4XTsKKyAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+YXQoaSk7CiAgICAg
ICAgICAgICAKLSAgICAgICAgICAgIG5vZGUucmVwbGFjZW1lbnQgPSBOb05vZGU7CisgICAgICAg
ICAgICBub2RlLT5yZXBsYWNlbWVudCA9IDA7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIHN3
aXRjaCAobm9kZS5vcCgpKSB7CisgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKICAg
ICAgICAgICAgIGNhc2UgU2V0TG9jYWw6CiAgICAgICAgICAgICBjYXNlIEdldExvY2FsOiAvLyBG
SVhNRTogVGhlIEdldExvY2FsIGNhc2UgaXMgb25seSBuZWNlc3NhcnkgdW50aWwgd2UgZG8gaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwNjcwNy4KLSAgICAgICAgICAg
ICAgICBub2RlLm1lcmdlRmxhZ3MoTm9kZVJlbGV2YW50VG9PU1IpOworICAgICAgICAgICAgICAg
IG5vZGUtPm1lcmdlRmxhZ3MoTm9kZVJlbGV2YW50VG9PU1IpOwogICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBub2RlLmNsZWFyRmxh
Z3MoTm9kZVJlbGV2YW50VG9PU1IpOworICAgICAgICAgICAgICAgIG5vZGUtPmNsZWFyRmxhZ3Mo
Tm9kZVJlbGV2YW50VG9PU1IpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
fQogICAgICAgICB9CiAKICAgICAgICAgZm9yIChtX2luZGV4SW5CbG9jayA9IDA7IG1faW5kZXhJ
bkJsb2NrIDwgYmxvY2stPnNpemUoKTsgKyttX2luZGV4SW5CbG9jaykgewotICAgICAgICAgICAg
bV9jb21waWxlSW5kZXggPSBibG9jay0+YXQobV9pbmRleEluQmxvY2spOwotICAgICAgICAgICAg
cGVyZm9ybU5vZGVDU0UobV9ncmFwaFttX2NvbXBpbGVJbmRleF0pOworICAgICAgICAgICAgbV9j
dXJyZW50Tm9kZSA9IGJsb2NrLT5hdChtX2luZGV4SW5CbG9jayk7CisgICAgICAgICAgICBwZXJm
b3JtTm9kZUNTRShtX2N1cnJlbnROb2RlKTsKICAgICAgICAgfQogICAgIH0KICAgICAKICAgICBC
YXNpY0Jsb2NrKiBtX2N1cnJlbnRCbG9jazsKLSAgICBOb2RlSW5kZXggbV9jb21waWxlSW5kZXg7
CisgICAgTm9kZSogbV9jdXJyZW50Tm9kZTsKICAgICB1bnNpZ25lZCBtX2luZGV4SW5CbG9jazsK
ICAgICBGaXhlZEFycmF5PHVuc2lnbmVkLCBMYXN0Tm9kZVR5cGU+IG1fbGFzdFNlZW47CiAgICAg
Ym9vbCBtX2NoYW5nZWQ7IC8vIE9ubHkgdHJhY2tzIGNoYW5nZXMgdGhhdCBoYXZlIGEgc3Vic3Rh
bnRpdmUgZWZmZWN0IG9uIG90aGVyIG9wdGltaXphdGlvbnMuCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0NvbW1vbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdDb21tb24uY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdDb21tb24uY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQzIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJERkdDb21tb24uaCIKKworI2lmIEVOQUJMRShERkdfSklUKQor
CisjaW5jbHVkZSAiREZHTm9kZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7
CisKK3ZvaWQgTm9kZVBvaW50ZXJUcmFpdHM6OmR1bXAoTm9kZSogdmFsdWUsIFByaW50U3RyZWFt
JiBvdXQpCit7CisgICAgb3V0LnByaW50KHZhbHVlKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdDb21tb24uaAkocmV2aXNpb24gMTQxMDUyKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdDb21tb24uaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEyLCAyMDEzIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzUs
NyArMzUsNyBAQAogI2luY2x1ZGUgIlZpcnR1YWxSZWdpc3Rlci5oIgogCiAvKiBERkdfRU5BQkxF
KCkgLSB0dXJuIG9uIGEgc3BlY2lmaWMgZmVhdHVyZXMgaW4gdGhlIERGRyBKSVQgKi8KLSNkZWZp
bmUgREZHX0VOQUJMRShERkdfRkVBVFVSRSkgKGRlZmluZWQgREZHX0VOQUJMRV8jI0RGR19GRUFU
VVJFICYmIERGR19FTkFCTEVfIyNERkdfRkVBVFVSRSkKKyNkZWZpbmUgREZHX0VOQUJMRShERkdf
RkVBVFVSRSkgKGRlZmluZWQgREZHX0VOQUJMRV8jI0RGR19GRUFUVVJFICAmJiBERkdfRU5BQkxF
XyMjREZHX0ZFQVRVUkUpCiAKIC8vIEVtaXQgdmFyaW91cyBsb2dnaW5nIGluZm9ybWF0aW9uIGZv
ciBkZWJ1Z2dpbmcsIGluY2x1ZGluZyBkdW1waW5nIHRoZSBkYXRhZmxvdyBncmFwaHMuCiAjZGVm
aW5lIERGR19FTkFCTEVfREVCVUdfVkVSQk9TRSAwCkBAIC01MCwxNCArNTAsNiBAQAogI2Vsc2UK
ICNkZWZpbmUgREZHX0VOQUJMRV9KSVRfQVNTRVJUIDAKICNlbmRpZgotLy8gRW5hYmxlIHZhbGlk
YXRpb24gb2YgdGhlIGdyYXBoLgotI2lmICFBU1NFUlRfRElTQUJMRUQKLSNkZWZpbmUgREZHX0VO
QUJMRV9WQUxJREFUSU9OIDEKLSNlbHNlCi0jZGVmaW5lIERGR19FTkFCTEVfVkFMSURBVElPTiAw
Ci0jZW5kaWYKLS8vIEVuYWJsZSB2YWxpZGF0aW9uIG9uIGNvbXBsZXRpb24gb2YgZWFjaCBwaGFz
ZS4KLSNkZWZpbmUgREZHX0VOQUJMRV9QRVJfUEhBU0VfVkFMSURBVElPTiAwCiAvLyBDb25zaXN0
ZW5jeSBjaGVjayBjb250ZW50cyBjb21waWxlciBkYXRhIHN0cnVjdHVyZXMuCiAjZGVmaW5lIERG
R19FTkFCTEVfQ09OU0lTVEVOQ1lfQ0hFQ0sgMAogLy8gRW1pdCBhIGJyZWFrcG9pbnQgaW50byB0
aGUgaGVhZCBvZiBldmVyeSBnZW5lcmF0ZWQgZnVuY3Rpb24sIHRvIGFpZCBkZWJ1Z2dpbmcgaW4g
R0RCLgpAQCAtODEsMjIgKzczLDE0IEBACiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZH
IHsKIAotLy8gVHlwZSBmb3IgYSByZWZlcmVuY2UgdG8gYW5vdGhlciBub2RlIGluIHRoZSBncmFw
aC4KLXR5cGVkZWYgdWludDMyX3QgTm9kZUluZGV4Owotc3RhdGljIGNvbnN0IE5vZGVJbmRleCBO
b05vZGUgPSBVSU5UX01BWDsKK3N0cnVjdCBOb2RlOwogCiB0eXBlZGVmIHVpbnQzMl90IEJsb2Nr
SW5kZXg7CiBzdGF0aWMgY29uc3QgQmxvY2tJbmRleCBOb0Jsb2NrID0gVUlOVF9NQVg7CiAKLXN0
cnVjdCBOb2RlSW5kZXhUcmFpdHMgewotICAgIHN0YXRpYyBOb2RlSW5kZXggZGVmYXVsdFZhbHVl
KCkgeyByZXR1cm4gTm9Ob2RlOyB9Ci0gICAgc3RhdGljIHZvaWQgZHVtcChOb2RlSW5kZXggdmFs
dWUsIFByaW50U3RyZWFtJiBvdXQpCi0gICAgewotICAgICAgICBpZiAodmFsdWUgPT0gTm9Ob2Rl
KQotICAgICAgICAgICAgb3V0LnByaW50ZigiLSIpOwotICAgICAgICBlbHNlCi0gICAgICAgICAg
ICBvdXQucHJpbnRmKCJAJXUiLCB2YWx1ZSk7Ci0gICAgfQorc3RydWN0IE5vZGVQb2ludGVyVHJh
aXRzIHsKKyAgICBzdGF0aWMgTm9kZSogZGVmYXVsdFZhbHVlKCkgeyByZXR1cm4gMDsgfQorICAg
IHN0YXRpYyB2b2lkIGR1bXAoTm9kZSogdmFsdWUsIFByaW50U3RyZWFtJiBvdXQpOwogfTsKIAog
ZW51bSBVc2VLaW5kIHsKQEAgLTE0NCw2ICsxMjgsMjkgQEAgaW5saW5lIGJvb2wgaXNYODYoKQog
I2VuZGlmCiB9CiAKK2lubGluZSBib29sIHZlcmJvc2VDb21waWxhdGlvbkVuYWJsZWQoKQorewor
I2lmIERGR19FTkFCTEUoREVCVUdfVkVSQk9TRSkKKyAgICByZXR1cm4gdHJ1ZTsKKyNlbHNlCisg
ICAgcmV0dXJuIE9wdGlvbnM6OnZlcmJvc2VDb21waWxhdGlvbigpIHx8IE9wdGlvbnM6OmR1bXBH
cmFwaEF0RWFjaFBoYXNlKCk7CisjZW5kaWYKK30KKworaW5saW5lIGJvb2wgc2hvdWxkRHVtcEdy
YXBoQXRFYWNoUGhhc2UoKQoreworI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVS
Qk9TRSkKKyAgICByZXR1cm4gdHJ1ZTsKKyNlbHNlCisgICAgcmV0dXJuIE9wdGlvbnM6OmR1bXBH
cmFwaEF0RWFjaFBoYXNlKCk7CisjZW5kaWYKK30KKworaW5saW5lIGJvb2wgdmFsaWRhdGlvbkVu
YWJsZWQoKQoreworICAgIHJldHVybiBPcHRpb25zOjp2YWxpZGF0ZUdyYXBoKCkgfHwgT3B0aW9u
czo6dmFsaWRhdGVHcmFwaEF0RWFjaFBoYXNlKCk7Cit9CisKIGVudW0gU3BpbGxSZWdpc3RlcnNN
b2RlIHsgTmVlZFRvU3BpbGwsIERvbnRTcGlsbCB9OwogCiBlbnVtIE5vUmVzdWx0VGFnIHsgTm9S
ZXN1bHQgfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xk
aW5nUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Q29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwCShyZXZpc2lvbiAxNDEwNTIpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDEzIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtNzUsMjIgKzc1LDIxIEBAIHByaXZhdGU6CiAgICAgICAgIGJvb2wgY2hhbmdlZCA9IGZhbHNl
OwogICAgICAgICBtX3N0YXRlLmJlZ2luQmFzaWNCbG9jayhibG9jayk7CiAgICAgICAgIGZvciAo
dW5zaWduZWQgaW5kZXhJbkJsb2NrID0gMDsgaW5kZXhJbkJsb2NrIDwgYmxvY2stPnNpemUoKTsg
KytpbmRleEluQmxvY2spIHsKLSAgICAgICAgICAgIE5vZGVJbmRleCBub2RlSW5kZXggPSBibG9j
ay0+YXQoaW5kZXhJbkJsb2NrKTsKLSAgICAgICAgICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW25v
ZGVJbmRleF07Ci0gICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAoIW1fc3RhdGUuaXNW
YWxpZCgpKQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCisgICAgICAgICAg
ICBOb2RlKiBub2RlID0gYmxvY2stPmF0KGluZGV4SW5CbG9jayk7CisKICAgICAgICAgICAgIGJv
b2wgZWxpbWluYXRlZCA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAg
IHN3aXRjaCAobm9kZS5vcCgpKSB7CisgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsK
ICAgICAgICAgICAgIGNhc2UgQ2hlY2tBcmd1bWVudHNOb3RDcmVhdGVkOiB7CiAgICAgICAgICAg
ICAgICAgaWYgKCFpc0VtcHR5U3BlY3VsYXRpb24oCiAgICAgICAgICAgICAgICAgICAgICAgICBt
X3N0YXRlLnZhcmlhYmxlcygpLm9wZXJhbmQoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
bV9ncmFwaC5hcmd1bWVudHNSZWdpc3RlckZvcihub2RlLmNvZGVPcmlnaW4pKS5tX3R5cGUpKQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguYXJndW1lbnRzUmVnaXN0ZXJGb3Io
bm9kZS0+Y29kZU9yaWdpbikpLm1fdHlwZSkpCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgICAgIEFTU0VSVChub2RlLnJlZkNvdW50KCkgPT0gMSk7Ci0gICAgICAgICAg
ICAgICAgbm9kZS5zZXRPcEFuZERlZmF1bHRGbGFncyhQaGFudG9tKTsKKyAgICAgICAgICAgICAg
ICBBU1NFUlQobm9kZS0+cmVmQ291bnQoKSA9PSAxKTsKKyAgICAgICAgICAgICAgICBub2RlLT5z
ZXRPcEFuZERlZmF1bHRGbGFncyhQaGFudG9tKTsKICAgICAgICAgICAgICAgICBlbGltaW5hdGVk
ID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KQEAgLTk4LDI0
ICs5NywyNCBAQCBwcml2YXRlOgogICAgICAgICAgICAgY2FzZSBDaGVja1N0cnVjdHVyZToKICAg
ICAgICAgICAgIGNhc2UgRm9yd2FyZENoZWNrU3RydWN0dXJlOgogICAgICAgICAgICAgY2FzZSBB
cnJheWlmeVRvU3RydWN0dXJlOiB7Ci0gICAgICAgICAgICAgICAgQWJzdHJhY3RWYWx1ZSYgdmFs
dWUgPSBtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSk7CisgICAgICAgICAgICAgICAgQWJz
dHJhY3RWYWx1ZSYgdmFsdWUgPSBtX3N0YXRlLmZvck5vZGUobm9kZS0+Y2hpbGQxKCkpOwogICAg
ICAgICAgICAgICAgIFN0cnVjdHVyZVNldCBzZXQ7Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGUu
b3AoKSA9PSBBcnJheWlmeVRvU3RydWN0dXJlKQotICAgICAgICAgICAgICAgICAgICBzZXQgPSBu
b2RlLnN0cnVjdHVyZSgpOworICAgICAgICAgICAgICAgIGlmIChub2RlLT5vcCgpID09IEFycmF5
aWZ5VG9TdHJ1Y3R1cmUpCisgICAgICAgICAgICAgICAgICAgIHNldCA9IG5vZGUtPnN0cnVjdHVy
ZSgpOwogICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgc2V0ID0gbm9k
ZS5zdHJ1Y3R1cmVTZXQoKTsKKyAgICAgICAgICAgICAgICAgICAgc2V0ID0gbm9kZS0+c3RydWN0
dXJlU2V0KCk7CiAgICAgICAgICAgICAgICAgaWYgKCFpc0NlbGxTcGVjdWxhdGlvbih2YWx1ZS5t
X3R5cGUpKQogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICBpZiAo
dmFsdWUubV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuaXNTdWJzZXRPZihzZXQpKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIEFTU0VSVChub2RlLnJlZkNvdW50KCkgPT0gMSk7Ci0gICAgICAgICAgICAg
ICAgICAgIG5vZGUuc2V0T3BBbmREZWZhdWx0RmxhZ3MoUGhhbnRvbSk7CisgICAgICAgICAgICAg
ICAgICAgIEFTU0VSVChub2RlLT5yZWZDb3VudCgpID09IDEpOworICAgICAgICAgICAgICAgICAg
ICBub2RlLT5zZXRPcEFuZERlZmF1bHRGbGFncyhQaGFudG9tKTsKICAgICAgICAgICAgICAgICAg
ICAgZWxpbWluYXRlZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlJiBzdHJ1
Y3R1cmVWYWx1ZSA9IHZhbHVlLm1fZnV0dXJlUG9zc2libGVTdHJ1Y3R1cmU7CiAgICAgICAgICAg
ICAgICAgaWYgKHN0cnVjdHVyZVZhbHVlLmlzU3Vic2V0T2Yoc2V0KQogICAgICAgICAgICAgICAg
ICAgICAmJiBzdHJ1Y3R1cmVWYWx1ZS5oYXNTaW5nbGV0b24oKSkgewotICAgICAgICAgICAgICAg
ICAgICBub2RlLmNvbnZlcnRUb1N0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50KHN0cnVjdHVy
ZVZhbHVlLnNpbmdsZXRvbigpKTsKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y29udmVydFRv
U3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnQoc3RydWN0dXJlVmFsdWUuc2luZ2xldG9uKCkp
OwogICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0xMjMsMzcgKzEyMiwzNyBAQCBwcml2YXRlOgog
ICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgY2FzZSBDaGVja0FycmF5OgogICAgICAgICAg
ICAgY2FzZSBBcnJheWlmeTogewotICAgICAgICAgICAgICAgIGlmICghbm9kZS5hcnJheU1vZGUo
KS5hbHJlYWR5Q2hlY2tlZChtX2dyYXBoLCBub2RlLCBtX3N0YXRlLmZvck5vZGUobm9kZS5jaGls
ZDEoKSkpKQorICAgICAgICAgICAgICAgIGlmICghbm9kZS0+YXJyYXlNb2RlKCkuYWxyZWFkeUNo
ZWNrZWQobV9ncmFwaCwgbm9kZSwgbV9zdGF0ZS5mb3JOb2RlKG5vZGUtPmNoaWxkMSgpKSkpCiAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIEFTU0VSVChub2RlLnJl
ZkNvdW50KCkgPT0gMSk7Ci0gICAgICAgICAgICAgICAgbm9kZS5zZXRPcEFuZERlZmF1bHRGbGFn
cyhQaGFudG9tKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQobm9kZS0+cmVmQ291bnQoKSA9PSAx
KTsKKyAgICAgICAgICAgICAgICBub2RlLT5zZXRPcEFuZERlZmF1bHRGbGFncyhQaGFudG9tKTsK
ICAgICAgICAgICAgICAgICBlbGltaW5hdGVkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGNhc2UgQ2hl
Y2tGdW5jdGlvbjogewotICAgICAgICAgICAgICAgIGlmIChtX3N0YXRlLmZvck5vZGUobm9kZS5j
aGlsZDEoKSkudmFsdWUoKSAhPSBub2RlLmZ1bmN0aW9uKCkpCisgICAgICAgICAgICAgICAgaWYg
KG1fc3RhdGUuZm9yTm9kZShub2RlLT5jaGlsZDEoKSkudmFsdWUoKSAhPSBub2RlLT5mdW5jdGlv
bigpKQogICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBub2RlLnNl
dE9wQW5kRGVmYXVsdEZsYWdzKFBoYW50b20pOworICAgICAgICAgICAgICAgIG5vZGUtPnNldE9w
QW5kRGVmYXVsdEZsYWdzKFBoYW50b20pOwogICAgICAgICAgICAgICAgIGVsaW1pbmF0ZWQgPSB0
cnVlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgIAogICAgICAgICAgICAgY2FzZSBDb252ZXJ0VGhpczogewotICAgICAgICAgICAgICAgIGlm
ICghaXNPYmplY3RTcGVjdWxhdGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90
eXBlKSkKKyAgICAgICAgICAgICAgICBpZiAoIWlzT2JqZWN0U3BlY3VsYXRpb24obV9zdGF0ZS5m
b3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX3R5cGUpKQogICAgICAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgICAgICBub2RlLnNldE9wQW5kRGVmYXVsdEZsYWdzKElkZW50aXR5KTsK
KyAgICAgICAgICAgICAgICBub2RlLT5zZXRPcEFuZERlZmF1bHRGbGFncyhJZGVudGl0eSk7CiAg
ICAgICAgICAgICAgICAgY2hhbmdlZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBjYXNlIEdldEJ5SWQ6
CiAgICAgICAgICAgICBjYXNlIEdldEJ5SWRGbHVzaDogewotICAgICAgICAgICAgICAgIENvZGVP
cmlnaW4gY29kZU9yaWdpbiA9IG5vZGUuY29kZU9yaWdpbjsKLSAgICAgICAgICAgICAgICBOb2Rl
SW5kZXggY2hpbGQgPSBub2RlLmNoaWxkMSgpLmluZGV4KCk7Ci0gICAgICAgICAgICAgICAgdW5z
aWduZWQgaWRlbnRpZmllck51bWJlciA9IG5vZGUuaWRlbnRpZmllck51bWJlcigpOworICAgICAg
ICAgICAgICAgIENvZGVPcmlnaW4gY29kZU9yaWdpbiA9IG5vZGUtPmNvZGVPcmlnaW47CisgICAg
ICAgICAgICAgICAgTm9kZSogY2hpbGQgPSBub2RlLT5jaGlsZDEoKS5ub2RlKCk7CisgICAgICAg
ICAgICAgICAgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciA9IG5vZGUtPmlkZW50aWZpZXJOdW1i
ZXIoKTsKICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBpZiAoIWlzQ2VsbFNwZWN1
bGF0aW9uKG1fZ3JhcGhbY2hpbGRdLnByZWRpY3Rpb24oKSkpCisgICAgICAgICAgICAgICAgaWYg
KCFpc0NlbGxTcGVjdWxhdGlvbihjaGlsZC0+cHJlZGljdGlvbigpKSkKICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUgPSBtX3N0YXRlLmZvck5vZGUoY2hpbGQpLmJlc3RQcm92ZW5TdHJ1Y3R1cmUo
KTsKQEAgLTE4NSwxOCArMTg0LDE4IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgICAg
ICBTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludCwgY29kZU9yaWdpbiwgT3BJbmZvKHN0cnVj
dHVyZSksIGNoaWxkKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCi0gICAg
ICAgICAgICAgICAgTm9kZUluZGV4IHByb3BlcnR5U3RvcmFnZUluZGV4OworICAgICAgICAgICAg
ICAgIE5vZGUqIHByb3BlcnR5U3RvcmFnZTsKICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAg
ICAgICBtX2dyYXBoW2NoaWxkXS5yZWYoKTsKKyAgICAgICAgICAgICAgICBjaGlsZC0+cmVmKCk7
CiAgICAgICAgICAgICAgICAgaWYgKGlzSW5saW5lT2Zmc2V0KHN0YXR1cy5vZmZzZXQoKSkpCi0g
ICAgICAgICAgICAgICAgICAgIHByb3BlcnR5U3RvcmFnZUluZGV4ID0gY2hpbGQ7CisgICAgICAg
ICAgICAgICAgICAgIHByb3BlcnR5U3RvcmFnZSA9IGNoaWxkOwogICAgICAgICAgICAgICAgIGVs
c2UgewotICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eVN0b3JhZ2VJbmRleCA9IG1faW5zZXJ0
aW9uU2V0Lmluc2VydE5vZGUoCisgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5U3RvcmFnZSA9
IG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCiAgICAgICAgICAgICAgICAgICAgICAgICBpbmRl
eEluQmxvY2ssIERvbnRSZWZDaGlsZHJlbiwgUmVmTm9kZSwgU3BlY05vbmUsIEdldEJ1dHRlcmZs
eSwgY29kZU9yaWdpbiwKICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkKTsKICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgbV9ncmFwaFtub2Rl
SW5kZXhdLmNvbnZlcnRUb0dldEJ5T2Zmc2V0KG1fZ3JhcGgubV9zdG9yYWdlQWNjZXNzRGF0YS5z
aXplKCksIHByb3BlcnR5U3RvcmFnZUluZGV4KTsKKyAgICAgICAgICAgICAgICBub2RlLT5jb252
ZXJ0VG9HZXRCeU9mZnNldChtX2dyYXBoLm1fc3RvcmFnZUFjY2Vzc0RhdGEuc2l6ZSgpLCBwcm9w
ZXJ0eVN0b3JhZ2UpOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIFN0b3JhZ2VB
Y2Nlc3NEYXRhIHN0b3JhZ2VBY2Nlc3NEYXRhOwogICAgICAgICAgICAgICAgIHN0b3JhZ2VBY2Nl
c3NEYXRhLm9mZnNldCA9IGluZGV4UmVsYXRpdmVUb0Jhc2Uoc3RhdHVzLm9mZnNldCgpKTsKQEAg
LTIwNyw5ICsyMDYsOSBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAg
Y2FzZSBQdXRCeUlkOgogICAgICAgICAgICAgY2FzZSBQdXRCeUlkRGlyZWN0OiB7Ci0gICAgICAg
ICAgICAgICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2luID0gbm9kZS5jb2RlT3JpZ2luOwotICAgICAg
ICAgICAgICAgIE5vZGVJbmRleCBjaGlsZCA9IG5vZGUuY2hpbGQxKCkuaW5kZXgoKTsKLSAgICAg
ICAgICAgICAgICB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyID0gbm9kZS5pZGVudGlmaWVyTnVt
YmVyKCk7CisgICAgICAgICAgICAgICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2luID0gbm9kZS0+Y29k
ZU9yaWdpbjsKKyAgICAgICAgICAgICAgICBOb2RlKiBjaGlsZCA9IG5vZGUtPmNoaWxkMSgpLm5v
ZGUoKTsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyID0gbm9kZS0+
aWRlbnRpZmllck51bWJlcigpOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIFN0
cnVjdHVyZSogc3RydWN0dXJlID0gbV9zdGF0ZS5mb3JOb2RlKGNoaWxkKS5iZXN0UHJvdmVuU3Ry
dWN0dXJlKCk7CiAgICAgICAgICAgICAgICAgaWYgKCFzdHJ1Y3R1cmUpCkBAIC0yMjIsNyArMjIx
LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5nbG9iYWxPYmplY3RG
b3IoY29kZU9yaWdpbiksCiAgICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZSwKICAgICAgICAg
ICAgICAgICAgICAgY29kZUJsb2NrKCktPmlkZW50aWZpZXIoaWRlbnRpZmllck51bWJlciksCi0g
ICAgICAgICAgICAgICAgICAgIG5vZGUub3AoKSA9PSBQdXRCeUlkRGlyZWN0KTsKKyAgICAgICAg
ICAgICAgICAgICAgbm9kZS0+b3AoKSA9PSBQdXRCeUlkRGlyZWN0KTsKICAgICAgICAgICAgICAg
ICAKICAgICAgICAgICAgICAgICBpZiAoIXN0YXR1cy5pc1NpbXBsZVJlcGxhY2UoKSAmJiAhc3Rh
dHVzLmlzU2ltcGxlVHJhbnNpdGlvbigpKQogICAgICAgICAgICAgICAgICAgICBicmVhazsKQEAg
LTI0Nyw3ICsyNDYsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICB0cmFuc2l0aW9u
RGF0YSA9IG1fZ3JhcGguYWRkU3RydWN0dXJlVHJhbnNpdGlvbkRhdGEoCiAgICAgICAgICAgICAg
ICAgICAgICAgICBTdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YShzdHJ1Y3R1cmUsIHN0YXR1cy5uZXdT
dHJ1Y3R1cmUoKSkpOwogICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAg
aWYgKG5vZGUub3AoKSA9PSBQdXRCeUlkKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChub2Rl
LT5vcCgpID09IFB1dEJ5SWQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghc3RydWN0
dXJlLT5zdG9yZWRQcm90b3R5cGUoKS5pc051bGwoKSkgewogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGFkZFN0cnVjdHVyZVRyYW5zaXRpb25DaGVjaygKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29kZU9yaWdpbiwgaW5kZXhJbkJsb2NrLApAQCAtMjY1LDE4ICsyNjQsMTgg
QEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KIAot
ICAgICAgICAgICAgICAgIE5vZGVJbmRleCBwcm9wZXJ0eVN0b3JhZ2VJbmRleDsKKyAgICAgICAg
ICAgICAgICBOb2RlKiBwcm9wZXJ0eVN0b3JhZ2U7CiAgICAgICAgICAgICAgICAgCiAgICAgICAg
ICAgICAgICAgaWYgKGlzSW5saW5lT2Zmc2V0KHN0YXR1cy5vZmZzZXQoKSkpIHsKLSAgICAgICAg
ICAgICAgICAgICAgbV9ncmFwaFtjaGlsZF0ucmVmKCk7IC8vIFRoZSBjaGlsZCB3aWxsIGJlIHVz
ZWQgYXMgdGhlIHByb3BlcnR5IGluZGV4LCBzbyByZWYgaXQgdG8gcmVmbGVjdCB0aGUgZG91Ymxl
IHVzZS4KLSAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlTdG9yYWdlSW5kZXggPSBjaGlsZDsK
KyAgICAgICAgICAgICAgICAgICAgY2hpbGQtPnJlZigpOyAvLyBUaGUgY2hpbGQgd2lsbCBiZSB1
c2VkIGFzIHRoZSBwcm9wZXJ0eSBpbmRleCwgc28gcmVmIGl0IHRvIHJlZmxlY3QgdGhlIGRvdWJs
ZSB1c2UuCisgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5U3RvcmFnZSA9IGNoaWxkOwogICAg
ICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RhdHVzLmlzU2ltcGxlUmVwbGFjZSgpIHx8IHN0cnVj
dHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSA9PSBzdGF0dXMubmV3U3RydWN0dXJlKCktPm91dE9m
TGluZUNhcGFjaXR5KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlTdG9yYWdlSW5k
ZXggPSBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAorICAgICAgICAgICAgICAgICAgICBwcm9w
ZXJ0eVN0b3JhZ2UgPSBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAogICAgICAgICAgICAgICAg
ICAgICAgICAgaW5kZXhJbkJsb2NrLCBSZWZDaGlsZHJlbiwgUmVmTm9kZSwgU3BlY05vbmUsIEdl
dEJ1dHRlcmZseSwgY29kZU9yaWdpbiwgY2hpbGQpOwogICAgICAgICAgICAgICAgIH0gZWxzZSBp
ZiAoIXN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSkgewogICAgICAgICAgICAgICAgICAg
ICBBU1NFUlQoc3RhdHVzLm5ld1N0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpKTsKICAg
ICAgICAgICAgICAgICAgICAgQVNTRVJUKCFpc0lubGluZU9mZnNldChzdGF0dXMub2Zmc2V0KCkp
KTsKLSAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlTdG9yYWdlSW5kZXggPSBtX2luc2VydGlv
blNldC5pbnNlcnROb2RlKAorICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eVN0b3JhZ2UgPSBt
X2luc2VydGlvblNldC5pbnNlcnROb2RlKAogICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhJ
bkJsb2NrLCBSZWZDaGlsZHJlbiwgUmVmTm9kZSwgU3BlY05vbmUsIEFsbG9jYXRlUHJvcGVydHlT
dG9yYWdlLAogICAgICAgICAgICAgICAgICAgICAgICAgY29kZU9yaWdpbiwgT3BJbmZvKHRyYW5z
aXRpb25EYXRhKSwgY2hpbGQpOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7CkBAIC0yODQsNyAr
MjgzLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKHN0YXR1cy5uZXdT
dHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSA+IHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2Fw
YWNpdHkoKSk7CiAgICAgICAgICAgICAgICAgICAgIEFTU0VSVCghaXNJbmxpbmVPZmZzZXQoc3Rh
dHVzLm9mZnNldCgpKSk7CiAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAg
ICBwcm9wZXJ0eVN0b3JhZ2VJbmRleCA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCisgICAg
ICAgICAgICAgICAgICAgIHByb3BlcnR5U3RvcmFnZSA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydE5v
ZGUoCiAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleEluQmxvY2ssIFJlZkNoaWxkcmVuLCBS
ZWZOb2RlLCBTcGVjTm9uZSwgUmVhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZSwKICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvZGVPcmlnaW4sIE9wSW5mbyh0cmFuc2l0aW9uRGF0YSksCiAgICAgICAg
ICAgICAgICAgICAgICAgICBjaGlsZCwKQEAgLTI5OSw3ICsyOTgsNyBAQCBwcml2YXRlOgogICAg
ICAgICAgICAgICAgICAgICAgICAgT3BJbmZvKHRyYW5zaXRpb25EYXRhKSwgY2hpbGQpOwogICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBtX2dyYXBo
W25vZGVJbmRleF0uY29udmVydFRvUHV0QnlPZmZzZXQobV9ncmFwaC5tX3N0b3JhZ2VBY2Nlc3NE
YXRhLnNpemUoKSwgcHJvcGVydHlTdG9yYWdlSW5kZXgpOworICAgICAgICAgICAgICAgIG5vZGUt
PmNvbnZlcnRUb1B1dEJ5T2Zmc2V0KG1fZ3JhcGgubV9zdG9yYWdlQWNjZXNzRGF0YS5zaXplKCks
IHByb3BlcnR5U3RvcmFnZSk7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgU3Rv
cmFnZUFjY2Vzc0RhdGEgc3RvcmFnZUFjY2Vzc0RhdGE7CiAgICAgICAgICAgICAgICAgc3RvcmFn
ZUFjY2Vzc0RhdGEub2Zmc2V0ID0gaW5kZXhSZWxhdGl2ZVRvQmFzZShzdGF0dXMub2Zmc2V0KCkp
OwpAQCAtMzE4LDc1ICszMTcsNzMgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICAKICAgICAgICAgICAgIG1fc3RhdGUuZXhlY3V0ZShpbmRleEluQmxvY2spOwotICAg
ICAgICAgICAgaWYgKCFub2RlLnNob3VsZEdlbmVyYXRlKCkgfHwgbV9zdGF0ZS5kaWRDbG9iYmVy
KCkgfHwgbm9kZS5oYXNDb25zdGFudCgpKQorICAgICAgICAgICAgaWYgKCFub2RlLT5zaG91bGRH
ZW5lcmF0ZSgpIHx8IG1fc3RhdGUuZGlkQ2xvYmJlcigpIHx8IG5vZGUtPmhhc0NvbnN0YW50KCkp
CiAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBKU1ZhbHVlIHZhbHVlID0g
bV9zdGF0ZS5mb3JOb2RlKG5vZGVJbmRleCkudmFsdWUoKTsKKyAgICAgICAgICAgIEpTVmFsdWUg
dmFsdWUgPSBtX3N0YXRlLmZvck5vZGUobm9kZSkudmFsdWUoKTsKICAgICAgICAgICAgIGlmICgh
dmFsdWUpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgCi0gICAg
ICAgICAgICBpZiAobm9kZS5vcCgpID09IEdldExvY2FsKSB7Ci0gICAgICAgICAgICAgICAgTm9k
ZUluZGV4IHByZXZpb3VzTG9jYWxBY2Nlc3MgPSBOb05vZGU7Ci0gICAgICAgICAgICAgICAgaWYg
KGJsb2NrLT52YXJpYWJsZXNBdEhlYWQub3BlcmFuZChub2RlLmxvY2FsKCkpID09IG5vZGVJbmRl
eAotICAgICAgICAgICAgICAgICAgICAmJiBtX2dyYXBoW25vZGUuY2hpbGQxKCldLm9wKCkgPT0g
UGhpKSB7CisgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBHZXRMb2NhbCkgeworICAgICAg
ICAgICAgICAgIE5vZGUqIHByZXZpb3VzTG9jYWxBY2Nlc3MgPSAwOworICAgICAgICAgICAgICAg
IGlmIChibG9jay0+dmFyaWFibGVzQXRIZWFkLm9wZXJhbmQobm9kZS0+bG9jYWwoKSkgPT0gbm9k
ZQorICAgICAgICAgICAgICAgICAgICAmJiBub2RlLT5jaGlsZDEoKS0+b3AoKSA9PSBQaGkpIHsK
ICAgICAgICAgICAgICAgICAgICAgLy8gV2UgZXhwZWN0IHRoaXMgdG8gYmUgdGhlIGNvbW1vbiBj
YXNlLgotICAgICAgICAgICAgICAgICAgICBBU1NFUlQoYmxvY2stPmlzSW5QaGlzKG5vZGUuY2hp
bGQxKCkuaW5kZXgoKSkpOwotICAgICAgICAgICAgICAgICAgICBwcmV2aW91c0xvY2FsQWNjZXNz
ID0gbm9kZS5jaGlsZDEoKS5pbmRleCgpOwotICAgICAgICAgICAgICAgICAgICBibG9jay0+dmFy
aWFibGVzQXRIZWFkLm9wZXJhbmQobm9kZS5sb2NhbCgpKSA9IHByZXZpb3VzTG9jYWxBY2Nlc3M7
CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVChibG9jay0+aXNJblBoaXMobm9kZS0+Y2hpbGQx
KCkubm9kZSgpKSk7CisgICAgICAgICAgICAgICAgICAgIHByZXZpb3VzTG9jYWxBY2Nlc3MgPSBu
b2RlLT5jaGlsZDEoKS5ub2RlKCk7CisgICAgICAgICAgICAgICAgICAgIGJsb2NrLT52YXJpYWJs
ZXNBdEhlYWQub3BlcmFuZChub2RlLT5sb2NhbCgpKSA9IHByZXZpb3VzTG9jYWxBY2Nlc3M7CiAg
ICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGluZGV4
SW5CbG9jayA+IDApOwogICAgICAgICAgICAgICAgICAgICAvLyBNdXN0IHNlYXJjaCBmb3IgdGhl
IHByZXZpb3VzIGFjY2VzcyB0byB0aGlzIGxvY2FsLgogICAgICAgICAgICAgICAgICAgICBmb3Ig
KEJsb2NrSW5kZXggc3ViSW5kZXhJbkJsb2NrID0gaW5kZXhJbkJsb2NrOyBzdWJJbmRleEluQmxv
Y2stLTspIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIE5vZGVJbmRleCBzdWJOb2RlSW5kZXgg
PSBibG9jay0+YXQoc3ViSW5kZXhJbkJsb2NrKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIE5v
ZGUmIHN1Yk5vZGUgPSBtX2dyYXBoW3N1Yk5vZGVJbmRleF07Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoIXN1Yk5vZGUuc2hvdWxkR2VuZXJhdGUoKSkKKyAgICAgICAgICAgICAgICAgICAg
ICAgIE5vZGUqIHN1Yk5vZGUgPSBibG9jay0+YXQoc3ViSW5kZXhJbkJsb2NrKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICghc3ViTm9kZS0+c2hvdWxkR2VuZXJhdGUoKSkKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICghc3ViTm9kZS5oYXNWYXJpYWJsZUFjY2Vzc0RhdGEoKSkKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICghc3ViTm9kZS0+aGFzVmFyaWFibGVBY2Nlc3NEYXRhKCkpCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3Vi
Tm9kZS5sb2NhbCgpICE9IG5vZGUubG9jYWwoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChzdWJOb2RlLT5sb2NhbCgpICE9IG5vZGUtPmxvY2FsKCkpCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGUgdHdvIG11
c3QgaGF2ZSBiZWVuIHVuaWZpZWQuCi0gICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQoc3Vi
Tm9kZS52YXJpYWJsZUFjY2Vzc0RhdGEoKSA9PSBub2RlLnZhcmlhYmxlQWNjZXNzRGF0YSgpKTsK
LSAgICAgICAgICAgICAgICAgICAgICAgIHByZXZpb3VzTG9jYWxBY2Nlc3MgPSBzdWJOb2RlSW5k
ZXg7CisgICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQoc3ViTm9kZS0+dmFyaWFibGVBY2Nl
c3NEYXRhKCkgPT0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCkpOworICAgICAgICAgICAgICAg
ICAgICAgICAgcHJldmlvdXNMb2NhbEFjY2VzcyA9IHN1Yk5vZGU7CiAgICAgICAgICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAg
ICBpZiAocHJldmlvdXNMb2NhbEFjY2VzcyA9PSBOb05vZGUpIHsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKCFwcmV2aW91c0xvY2FsQWNjZXNzKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAv
LyBUaGUgcHJldmlvdXMgYWNjZXNzIG11c3QgaGF2ZSBiZWVuIGEgUGhpLgogICAgICAgICAgICAg
ICAgICAgICAgICAgZm9yIChCbG9ja0luZGV4IHBoaUluZGV4SW5CbG9jayA9IGJsb2NrLT5waGlz
LnNpemUoKTsgcGhpSW5kZXhJbkJsb2NrLS07KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgTm9kZUluZGV4IHBoaU5vZGVJbmRleCA9IGJsb2NrLT5waGlzW3BoaUluZGV4SW5CbG9ja107
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgTm9kZSYgcGhpTm9kZSA9IG1fZ3JhcGhbcGhp
Tm9kZUluZGV4XTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXBoaU5vZGUuc2hv
dWxkR2VuZXJhdGUoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb2RlKiBwaGlOb2Rl
ID0gYmxvY2stPnBoaXNbcGhpSW5kZXhJbkJsb2NrXTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoIXBoaU5vZGUtPnNob3VsZEdlbmVyYXRlKCkpCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChw
aGlOb2RlLmxvY2FsKCkgIT0gbm9kZS5sb2NhbCgpKQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChwaGlOb2RlLT5sb2NhbCgpICE9IG5vZGUtPmxvY2FsKCkpCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC8vIFRoZSB0d28gbXVzdCBoYXZlIGJlZW4gdW5pZmllZC4KLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBBU1NFUlQocGhpTm9kZS52YXJpYWJsZUFjY2Vzc0RhdGEoKSA9PSBub2RlLnZhcmlh
YmxlQWNjZXNzRGF0YSgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2aW91c0xv
Y2FsQWNjZXNzID0gcGhpTm9kZUluZGV4OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFT
U0VSVChwaGlOb2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKSA9PSBub2RlLT52YXJpYWJsZUFjY2Vz
c0RhdGEoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldmlvdXNMb2NhbEFjY2Vz
cyA9IHBoaU5vZGU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQocHJldmlv
dXNMb2NhbEFjY2VzcyAhPSBOb05vZGUpOworICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJU
KHByZXZpb3VzTG9jYWxBY2Nlc3MpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBBU1NFUlQocHJl
dmlvdXNMb2NhbEFjY2VzcyAhPSBOb05vZGUpOworICAgICAgICAgICAgICAgIEFTU0VSVChwcmV2
aW91c0xvY2FsQWNjZXNzKTsKICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBOb2Rl
SW5kZXggdGFpbE5vZGVJbmRleCA9IGJsb2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZChub2Rl
LmxvY2FsKCkpOwotICAgICAgICAgICAgICAgIGlmICh0YWlsTm9kZUluZGV4ID09IG5vZGVJbmRl
eCkKLSAgICAgICAgICAgICAgICAgICAgYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKG5v
ZGUubG9jYWwoKSkgPSBwcmV2aW91c0xvY2FsQWNjZXNzOworICAgICAgICAgICAgICAgIE5vZGUq
IHRhaWxOb2RlID0gYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKG5vZGUtPmxvY2FsKCkp
OworICAgICAgICAgICAgICAgIGlmICh0YWlsTm9kZSA9PSBub2RlKQorICAgICAgICAgICAgICAg
ICAgICBibG9jay0+dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQobm9kZS0+bG9jYWwoKSkgPSBwcmV2
aW91c0xvY2FsQWNjZXNzOwogICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAg
ICAgICBBU1NFUlQoCi0gICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoW3RhaWxOb2RlSW5k
ZXhdLm9wKCkgPT0gRmx1c2gKLSAgICAgICAgICAgICAgICAgICAgICAgIHx8IG1fZ3JhcGhbdGFp
bE5vZGVJbmRleF0ub3AoKSA9PSBTZXRMb2NhbAotICAgICAgICAgICAgICAgICAgICAgICAgfHwg
aXNDYXB0dXJlZEF0T3JBZnRlcihibG9jaywgaW5kZXhJbkJsb2NrLCBub2RlLmxvY2FsKCkpKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIHRhaWxOb2RlLT5vcCgpID09IEZsdXNoCisgICAgICAg
ICAgICAgICAgICAgICAgICB8fCB0YWlsTm9kZS0+b3AoKSA9PSBTZXRMb2NhbAorICAgICAgICAg
ICAgICAgICAgICAgICAgfHwgaXNDYXB0dXJlZEF0T3JBZnRlcihibG9jaywgaW5kZXhJbkJsb2Nr
LCBub2RlLT5sb2NhbCgpKSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAg
ICAgICAgICAgCi0gICAgICAgICAgICBDb2RlT3JpZ2luIGNvZGVPcmlnaW4gPSBub2RlLmNvZGVP
cmlnaW47Ci0gICAgICAgICAgICBBZGphY2VuY3lMaXN0IGNoaWxkcmVuID0gbm9kZS5jaGlsZHJl
bjsKKyAgICAgICAgICAgIENvZGVPcmlnaW4gY29kZU9yaWdpbiA9IG5vZGUtPmNvZGVPcmlnaW47
CisgICAgICAgICAgICBBZGphY2VuY3lMaXN0IGNoaWxkcmVuID0gbm9kZS0+Y2hpbGRyZW47CiAg
ICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBtX2dyYXBoLmNvbnZlcnRUb0NvbnN0YW50KG5v
ZGVJbmRleCwgdmFsdWUpOworICAgICAgICAgICAgbV9ncmFwaC5jb252ZXJ0VG9Db25zdGFudChu
b2RlLCB2YWx1ZSk7CiAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAogICAg
ICAgICAgICAgICAgIGluZGV4SW5CbG9jaywgRG9udFJlZkNoaWxkcmVuLCBEb250UmVmTm9kZSwg
U3BlY05vbmUsIFBoYW50b20sIGNvZGVPcmlnaW4sIGNoaWxkcmVuKTsKLSAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgIAogICAgICAgICAgICAgY2hhbmdlZCA9IHRydWU7CiAgICAgICAgIH0K
ICAgICAgICAgbV9zdGF0ZS5yZXNldCgpOwpAQCAtMzk5LDEyICszOTYsMTIgQEAgcHJpdmF0ZToK
ICAgICBib29sIGlzQ2FwdHVyZWRBdE9yQWZ0ZXIoQmFzaWNCbG9jayogYmxvY2ssIHVuc2lnbmVk
IGluZGV4SW5CbG9jaywgaW50IG9wZXJhbmQpCiAgICAgewogICAgICAgICBmb3IgKDsgaW5kZXhJ
bkJsb2NrIDwgYmxvY2stPnNpemUoKTsgKytpbmRleEluQmxvY2spIHsKLSAgICAgICAgICAgIE5v
ZGUmIG5vZGUgPSBtX2dyYXBoW2Jsb2NrLT5hdChpbmRleEluQmxvY2spXTsKLSAgICAgICAgICAg
IGlmICghbm9kZS5oYXNMb2NhbCgpKQorICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5h
dChpbmRleEluQmxvY2spOworICAgICAgICAgICAgaWYgKCFub2RlLT5oYXNMb2NhbCgpKQogICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgaWYgKG5vZGUubG9jYWwoKSAhPSBv
cGVyYW5kKQorICAgICAgICAgICAgaWYgKG5vZGUtPmxvY2FsKCkgIT0gb3BlcmFuZCkKICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGlmIChub2RlLnZhcmlhYmxlQWNjZXNz
RGF0YSgpLT5pc0NhcHR1cmVkKCkpCisgICAgICAgICAgICBpZiAobm9kZS0+dmFyaWFibGVBY2Nl
c3NEYXRhKCktPmlzQ2FwdHVyZWQoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICAgICAgfQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC00MTMsMjAgKzQxMCwyMCBAQCBwcml2
YXRlOgogICAgIAogICAgIHZvaWQgYWRkU3RydWN0dXJlVHJhbnNpdGlvbkNoZWNrKENvZGVPcmln
aW4gY29kZU9yaWdpbiwgdW5zaWduZWQgaW5kZXhJbkJsb2NrLCBKU0NlbGwqIGNlbGwpCiAgICAg
ewotICAgICAgICBOb2RlSW5kZXggd2Vha0NvbnN0YW50SW5kZXggPSBtX2luc2VydGlvblNldC5p
bnNlcnROb2RlKAorICAgICAgICBOb2RlKiB3ZWFrQ29uc3RhbnQgPSBtX2luc2VydGlvblNldC5p
bnNlcnROb2RlKAogICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBEb250UmVmQ2hpbGRyZW4sIERv
bnRSZWZOb2RlLCBzcGVjdWxhdGlvbkZyb21WYWx1ZShjZWxsKSwKICAgICAgICAgICAgIFdlYWtK
U0NvbnN0YW50LCBjb2RlT3JpZ2luLCBPcEluZm8oY2VsbCkpOwogICAgICAgICAKICAgICAgICAg
aWYgKGNlbGwtPnN0cnVjdHVyZSgpLT50cmFuc2l0aW9uV2F0Y2hwb2ludFNldElzU3RpbGxWYWxp
ZCgpKSB7CiAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAogICAgICAgICAg
ICAgICAgIGluZGV4SW5CbG9jaywgUmVmQ2hpbGRyZW4sIERvbnRSZWZOb2RlLCBTcGVjTm9uZSwg
U3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnQsCi0gICAgICAgICAgICAgICAgY29kZU9yaWdp
biwgT3BJbmZvKGNlbGwtPnN0cnVjdHVyZSgpKSwgd2Vha0NvbnN0YW50SW5kZXgpOworICAgICAg
ICAgICAgICAgIGNvZGVPcmlnaW4sIE9wSW5mbyhjZWxsLT5zdHJ1Y3R1cmUoKSksIHdlYWtDb25z
dGFudCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAogICAgICAgICBtX2luc2Vy
dGlvblNldC5pbnNlcnROb2RlKAogICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBSZWZDaGlsZHJl
biwgRG9udFJlZk5vZGUsIFNwZWNOb25lLCBDaGVja1N0cnVjdHVyZSwgY29kZU9yaWdpbiwKLSAg
ICAgICAgICAgIE9wSW5mbyhtX2dyYXBoLmFkZFN0cnVjdHVyZVNldChjZWxsLT5zdHJ1Y3R1cmUo
KSkpLCB3ZWFrQ29uc3RhbnRJbmRleCk7CisgICAgICAgICAgICBPcEluZm8obV9ncmFwaC5hZGRT
dHJ1Y3R1cmVTZXQoY2VsbC0+c3RydWN0dXJlKCkpKSwgd2Vha0NvbnN0YW50KTsKICAgICB9CiAg
ICAgCiAgICAgLy8gVGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVzZSB0aGUgQ0ZBIG1heSByZWFjaCBj
b25jbHVzaW9ucyBhYm91dCBjb25zdGFudHMgYmFzZWQgb24gaXRzCkBAIC00NTEsOSArNDQ4LDgg
QEAgcHJpdmF0ZToKICAgICAgICAgICAgIGlmIChtX3N0YXRlLmlzVmFsaWQoKSkKICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgTm9kZUluZGV4IG5v
ZGVJbmRleCA9IGJsb2NrLT5hdChpbmRleEluQmxvY2spOwotICAgICAgICAgICAgTm9kZSYgbm9k
ZSA9IG1fZ3JhcGhbbm9kZUluZGV4XTsKLSAgICAgICAgICAgIHN3aXRjaCAobm9kZS5vcCgpKSB7
CisgICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPmF0KGluZGV4SW5CbG9jayk7CisgICAg
ICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKICAgICAgICAgICAgIGNhc2UgUmV0dXJuOgog
ICAgICAgICAgICAgY2FzZSBUaHJvdzoKICAgICAgICAgICAgIGNhc2UgVGhyb3dSZWZlcmVuY2VF
cnJvcjoKQEAgLTQ2NCw3ICs0NjAsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgZGVmYXVsdDoK
ICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAogICAgICAgICAgICAg
ICAgICAgICBpbmRleEluQmxvY2ssIERvbnRSZWZDaGlsZHJlbiwgRG9udFJlZk5vZGUsIFNwZWNO
b25lLCBGb3JjZU9TUkV4aXQsCi0gICAgICAgICAgICAgICAgICAgIG5vZGUuY29kZU9yaWdpbik7
CisgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNvZGVPcmlnaW4pOwogICAgICAgICAgICAgICAg
IGNoYW5nZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEaXNhc3NlbWJsZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGlzYXNzZW1ibGVyLmNwcAko
cmV2aXNpb24gMTQxMDUyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEaXNhc3Nl
bWJsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTIsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNyw3ICszNyw2IEBAIERpc2Fzc2VtYmxlcjo6RGlz
YXNzZW1ibGVyKEdyYXBoJiBncmFwaCkKICAgICA6IG1fZ3JhcGgoZ3JhcGgpCiB7CiAgICAgbV9s
YWJlbEZvckJsb2NrSW5kZXgucmVzaXplKGdyYXBoLm1fYmxvY2tzLnNpemUoKSk7Ci0gICAgbV9s
YWJlbEZvck5vZGVJbmRleC5yZXNpemUoZ3JhcGguc2l6ZSgpKTsKIH0KIAogdm9pZCBEaXNhc3Nl
bWJsZXI6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCwgTGlua0J1ZmZlciYgbGlua0J1ZmZlcikKQEAg
LTk1LDIzICs5NCwyNCBAQCBWZWN0b3I8RGlzYXNzZW1ibGVyOjpEdW1wZWRPcD4gRGlzYXNzZW1i
CiAgICAgY29uc3QgY2hhciogcHJlZml4ID0gIiAgICAiOwogICAgIGNvbnN0IGNoYXIqIGRpc2Fz
c2VtYmx5UHJlZml4ID0gIiAgICAgICAgIjsKICAgICAKLSAgICBOb2RlSW5kZXggbGFzdE5vZGVJ
bmRleCA9IE5vTm9kZTsKKyAgICBOb2RlKiBsYXN0Tm9kZSA9IDA7CiAgICAgTWFjcm9Bc3NlbWJs
ZXI6OkxhYmVsIHByZXZpb3VzTGFiZWwgPSBtX3N0YXJ0T2ZDb2RlOwogICAgIGZvciAoc2l6ZV90
IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9ncmFwaC5tX2Jsb2Nrcy5zaXplKCk7ICsr
YmxvY2tJbmRleCkgewogICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGgubV9ibG9j
a3NbYmxvY2tJbmRleF0uZ2V0KCk7CiAgICAgICAgIGlmICghYmxvY2spCiAgICAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgZHVtcERpc2Fzc2VtYmx5KG91dCwgZGlzYXNzZW1ibHlQcmVmaXgs
IGxpbmtCdWZmZXIsIHByZXZpb3VzTGFiZWwsIG1fbGFiZWxGb3JCbG9ja0luZGV4W2Jsb2NrSW5k
ZXhdLCBsYXN0Tm9kZUluZGV4KTsKKyAgICAgICAgZHVtcERpc2Fzc2VtYmx5KG91dCwgZGlzYXNz
ZW1ibHlQcmVmaXgsIGxpbmtCdWZmZXIsIHByZXZpb3VzTGFiZWwsIG1fbGFiZWxGb3JCbG9ja0lu
ZGV4W2Jsb2NrSW5kZXhdLCBsYXN0Tm9kZSk7CiAgICAgICAgIGFwcGVuZChyZXN1bHQsIG91dCwg
cHJldmlvdXNPcmlnaW4pOwogICAgICAgICBtX2dyYXBoLmR1bXBCbG9ja0hlYWRlcihvdXQsIHBy
ZWZpeCwgYmxvY2tJbmRleCwgR3JhcGg6OkR1bXBMaXZlUGhpc09ubHkpOwogICAgICAgICBhcHBl
bmQocmVzdWx0LCBvdXQsIHByZXZpb3VzT3JpZ2luKTsKLSAgICAgICAgTm9kZUluZGV4IGxhc3RO
b2RlSW5kZXhGb3JEaXNhc3NlbWJseSA9IGJsb2NrLT5hdCgwKTsKKyAgICAgICAgTm9kZSogbGFz
dE5vZGVGb3JEaXNhc3NlbWJseSA9IGJsb2NrLT5hdCgwKTsKICAgICAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBibG9jay0+c2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIGlmICghbV9ncmFw
aFtibG9jay0+YXQoaSldLndpbGxIYXZlQ29kZUdlbk9yT1NSKCkgJiYgIU9wdGlvbnM6OnNob3dB
bGxERkdOb2RlcygpKQorICAgICAgICAgICAgaWYgKCFibG9jay0+YXQoaSktPndpbGxIYXZlQ29k
ZUdlbk9yT1NSKCkgJiYgIU9wdGlvbnM6OnNob3dBbGxERkdOb2RlcygpKQogICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIGN1cnJlbnRM
YWJlbDsKLSAgICAgICAgICAgIGlmIChtX2xhYmVsRm9yTm9kZUluZGV4W2Jsb2NrLT5hdChpKV0u
aXNTZXQoKSkKLSAgICAgICAgICAgICAgICBjdXJyZW50TGFiZWwgPSBtX2xhYmVsRm9yTm9kZUlu
ZGV4W2Jsb2NrLT5hdChpKV07CisgICAgICAgICAgICBIYXNoTWFwPE5vZGUqLCBNYWNyb0Fzc2Vt
Ymxlcjo6TGFiZWw+OjppdGVyYXRvciBpdGVyID0gbV9sYWJlbEZvck5vZGUuZmluZChibG9jay0+
YXQoaSkpOworICAgICAgICAgICAgaWYgKGl0ZXIgIT0gbV9sYWJlbEZvck5vZGUuZW5kKCkpCisg
ICAgICAgICAgICAgICAgY3VycmVudExhYmVsID0gaXRlci0+dmFsdWU7CiAgICAgICAgICAgICBl
bHNlIHsKICAgICAgICAgICAgICAgICAvLyBEdW1wIHRoZSBsYXN0IGluc3RydWN0aW9uIGJ5IHVz
aW5nIHRoZSBmaXJzdCBsYWJlbCBvZiB0aGUgbmV4dCBibG9jawogICAgICAgICAgICAgICAgIC8v
IGFzIHRoZSBlbmQgcG9pbnQuIFRoaXMgY2FzZSBpcyBoaXQgZWl0aGVyIGR1cmluZyBwZWVwaG9s
ZSBjb21wYXJlCkBAIC0xMjIsMzYgKzEyMiwzNiBAQCBWZWN0b3I8RGlzYXNzZW1ibGVyOjpEdW1w
ZWRPcD4gRGlzYXNzZW1iCiAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAg
ICBjdXJyZW50TGFiZWwgPSBtX2VuZE9mTWFpblBhdGg7CiAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBkdW1wRGlzYXNzZW1ibHkob3V0LCBkaXNhc3NlbWJseVByZWZpeCwgbGlua0J1ZmZlciwg
cHJldmlvdXNMYWJlbCwgY3VycmVudExhYmVsLCBsYXN0Tm9kZUluZGV4Rm9yRGlzYXNzZW1ibHkp
OworICAgICAgICAgICAgZHVtcERpc2Fzc2VtYmx5KG91dCwgZGlzYXNzZW1ibHlQcmVmaXgsIGxp
bmtCdWZmZXIsIHByZXZpb3VzTGFiZWwsIGN1cnJlbnRMYWJlbCwgbGFzdE5vZGVGb3JEaXNhc3Nl
bWJseSk7CiAgICAgICAgICAgICBhcHBlbmQocmVzdWx0LCBvdXQsIHByZXZpb3VzT3JpZ2luKTsK
LSAgICAgICAgICAgIHByZXZpb3VzT3JpZ2luID0gbV9ncmFwaFtibG9jay0+YXQoaSldLmNvZGVP
cmlnaW47Ci0gICAgICAgICAgICBpZiAobV9ncmFwaC5kdW1wQ29kZU9yaWdpbihvdXQsIHByZWZp
eCwgbGFzdE5vZGVJbmRleCwgYmxvY2stPmF0KGkpKSkgeworICAgICAgICAgICAgcHJldmlvdXNP
cmlnaW4gPSBibG9jay0+YXQoaSktPmNvZGVPcmlnaW47CisgICAgICAgICAgICBpZiAobV9ncmFw
aC5kdW1wQ29kZU9yaWdpbihvdXQsIHByZWZpeCwgbGFzdE5vZGUsIGJsb2NrLT5hdChpKSkpIHsK
ICAgICAgICAgICAgICAgICBhcHBlbmQocmVzdWx0LCBvdXQsIHByZXZpb3VzT3JpZ2luKTsKLSAg
ICAgICAgICAgICAgICBwcmV2aW91c09yaWdpbiA9IG1fZ3JhcGhbYmxvY2stPmF0KGkpXS5jb2Rl
T3JpZ2luOworICAgICAgICAgICAgICAgIHByZXZpb3VzT3JpZ2luID0gYmxvY2stPmF0KGkpLT5j
b2RlT3JpZ2luOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgbV9ncmFwaC5kdW1wKG91dCwg
cHJlZml4LCBibG9jay0+YXQoaSkpOwotICAgICAgICAgICAgbGFzdE5vZGVJbmRleCA9IGJsb2Nr
LT5hdChpKTsKLSAgICAgICAgICAgIGxhc3ROb2RlSW5kZXhGb3JEaXNhc3NlbWJseSA9IGJsb2Nr
LT5hdChpKTsKKyAgICAgICAgICAgIGxhc3ROb2RlID0gYmxvY2stPmF0KGkpOworICAgICAgICAg
ICAgbGFzdE5vZGVGb3JEaXNhc3NlbWJseSA9IGJsb2NrLT5hdChpKTsKICAgICAgICAgfQogICAg
IH0KLSAgICBkdW1wRGlzYXNzZW1ibHkob3V0LCBkaXNhc3NlbWJseVByZWZpeCwgbGlua0J1ZmZl
ciwgcHJldmlvdXNMYWJlbCwgbV9lbmRPZk1haW5QYXRoLCBsYXN0Tm9kZUluZGV4KTsKKyAgICBk
dW1wRGlzYXNzZW1ibHkob3V0LCBkaXNhc3NlbWJseVByZWZpeCwgbGlua0J1ZmZlciwgcHJldmlv
dXNMYWJlbCwgbV9lbmRPZk1haW5QYXRoLCBsYXN0Tm9kZSk7CiAgICAgYXBwZW5kKHJlc3VsdCwg
b3V0LCBwcmV2aW91c09yaWdpbik7CiAgICAgb3V0LnByaW50KHByZWZpeCwgIihFbmQgT2YgTWFp
biBQYXRoKVxuIik7CiAgICAgYXBwZW5kKHJlc3VsdCwgb3V0LCBwcmV2aW91c09yaWdpbik7Ci0g
ICAgZHVtcERpc2Fzc2VtYmx5KG91dCwgZGlzYXNzZW1ibHlQcmVmaXgsIGxpbmtCdWZmZXIsIHBy
ZXZpb3VzTGFiZWwsIG1fZW5kT2ZDb2RlLCBOb05vZGUpOworICAgIGR1bXBEaXNhc3NlbWJseShv
dXQsIGRpc2Fzc2VtYmx5UHJlZml4LCBsaW5rQnVmZmVyLCBwcmV2aW91c0xhYmVsLCBtX2VuZE9m
Q29kZSwgMCk7CiAgICAgYXBwZW5kKHJlc3VsdCwgb3V0LCBwcmV2aW91c09yaWdpbik7CiAgICAg
CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotdm9pZCBEaXNhc3NlbWJsZXI6OmR1bXBEaXNhc3Nl
bWJseShQcmludFN0cmVhbSYgb3V0LCBjb25zdCBjaGFyKiBwcmVmaXgsIExpbmtCdWZmZXImIGxp
bmtCdWZmZXIsIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCYgcHJldmlvdXNMYWJlbCwgTWFjcm9Bc3Nl
bWJsZXI6OkxhYmVsIGN1cnJlbnRMYWJlbCwgTm9kZUluZGV4IGNvbnRleHQpCit2b2lkIERpc2Fz
c2VtYmxlcjo6ZHVtcERpc2Fzc2VtYmx5KFByaW50U3RyZWFtJiBvdXQsIGNvbnN0IGNoYXIqIHBy
ZWZpeCwgTGlua0J1ZmZlciYgbGlua0J1ZmZlciwgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsJiBwcmV2
aW91c0xhYmVsLCBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgY3VycmVudExhYmVsLCBOb2RlKiBjb250
ZXh0KQogewogICAgIHNpemVfdCBwcmVmaXhMZW5ndGggPSBzdHJsZW4ocHJlZml4KTsKICAgICBp
bnQgYW1vdW50T2ZOb2RlV2hpdGVTcGFjZTsKLSAgICBpZiAoY29udGV4dCA9PSBOb05vZGUpCisg
ICAgaWYgKCFjb250ZXh0KQogICAgICAgICBhbW91bnRPZk5vZGVXaGl0ZVNwYWNlID0gMDsKICAg
ICBlbHNlCi0gICAgICAgIGFtb3VudE9mTm9kZVdoaXRlU3BhY2UgPSBHcmFwaDo6YW1vdW50T2ZO
b2RlV2hpdGVTcGFjZShtX2dyYXBoW2NvbnRleHRdKTsKKyAgICAgICAgYW1vdW50T2ZOb2RlV2hp
dGVTcGFjZSA9IEdyYXBoOjphbW91bnRPZk5vZGVXaGl0ZVNwYWNlKGNvbnRleHQpOwogICAgIE93
bkFycmF5UHRyPGNoYXI+IHByZWZpeEJ1ZmZlciA9IGFkb3B0QXJyYXlQdHIobmV3IGNoYXJbcHJl
Zml4TGVuZ3RoICsgYW1vdW50T2ZOb2RlV2hpdGVTcGFjZSArIDFdKTsKICAgICBzdHJjcHkocHJl
Zml4QnVmZmVyLmdldCgpLCBwcmVmaXgpOwogICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYW1vdW50
T2ZOb2RlV2hpdGVTcGFjZTsgKytpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdEaXNhc3NlbWJsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0Rpc2Fzc2VtYmxlci5oCShyZXZpc2lvbiAxNDEwNTIpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0Rpc2Fzc2VtYmxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMyw2ICszMyw3IEBA
CiAjaW5jbHVkZSAiREZHQ29tbW9uLmgiCiAjaW5jbHVkZSAiTGlua0J1ZmZlci5oIgogI2luY2x1
ZGUgIk1hY3JvQXNzZW1ibGVyLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRl
IDx3dGYvU3RyaW5nUHJpbnRTdHJlYW0uaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKQEAg
LTUwLDkgKzUxLDEwIEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIG1fbGFiZWxGb3JCbG9ja0lu
ZGV4W2Jsb2NrSW5kZXhdID0gbGFiZWw7CiAgICAgfQotICAgIHZvaWQgc2V0Rm9yTm9kZShOb2Rl
SW5kZXggbm9kZUluZGV4LCBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbGFiZWwpCisgICAgdm9pZCBz
ZXRGb3JOb2RlKE5vZGUqIG5vZGUsIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBsYWJlbCkKICAgICB7
Ci0gICAgICAgIG1fbGFiZWxGb3JOb2RlSW5kZXhbbm9kZUluZGV4XSA9IGxhYmVsOworICAgICAg
ICBBU1NFUlQobGFiZWwuaXNTZXQoKSk7CisgICAgICAgIG1fbGFiZWxGb3JOb2RlLmFkZChub2Rl
LCBsYWJlbCk7CiAgICAgfQogICAgIHZvaWQgc2V0RW5kT2ZNYWluUGF0aChNYWNyb0Fzc2VtYmxl
cjo6TGFiZWwgbGFiZWwpCiAgICAgewpAQCAtODMsMTIgKzg1LDEyIEBAIHByaXZhdGU6CiAgICAg
dm9pZCBhcHBlbmQoVmVjdG9yPER1bXBlZE9wPiYsIFN0cmluZ1ByaW50U3RyZWFtJiwgQ29kZU9y
aWdpbiYpOwogICAgIFZlY3RvcjxEdW1wZWRPcD4gY3JlYXRlRHVtcExpc3QoTGlua0J1ZmZlciYp
OwogICAgIAotICAgIHZvaWQgZHVtcERpc2Fzc2VtYmx5KFByaW50U3RyZWFtJiwgY29uc3QgY2hh
ciogcHJlZml4LCBMaW5rQnVmZmVyJiwgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsJiBwcmV2aW91c0xh
YmVsLCBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgY3VycmVudExhYmVsLCBOb2RlSW5kZXggY29udGV4
dCk7CisgICAgdm9pZCBkdW1wRGlzYXNzZW1ibHkoUHJpbnRTdHJlYW0mLCBjb25zdCBjaGFyKiBw
cmVmaXgsIExpbmtCdWZmZXImLCBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwmIHByZXZpb3VzTGFiZWws
IE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBjdXJyZW50TGFiZWwsIE5vZGUqIGNvbnRleHQpOwogICAg
IAogICAgIEdyYXBoJiBtX2dyYXBoOwogICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBtX3N0YXJ0
T2ZDb2RlOwogICAgIFZlY3RvcjxNYWNyb0Fzc2VtYmxlcjo6TGFiZWw+IG1fbGFiZWxGb3JCbG9j
a0luZGV4OwotICAgIFZlY3RvcjxNYWNyb0Fzc2VtYmxlcjo6TGFiZWw+IG1fbGFiZWxGb3JOb2Rl
SW5kZXg7CisgICAgSGFzaE1hcDxOb2RlKiwgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsPiBtX2xhYmVs
Rm9yTm9kZTsKICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbV9lbmRPZk1haW5QYXRoOwogICAg
IE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBtX2VuZE9mQ29kZTsKIH07CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuY3BwCShyZXZpc2lvbiAxNDEwNTIpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEyIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMiwgMjAxMyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTcyLDkgKzcyLDggQEAgaW5saW5lIGJvb2wgY29tcGlsZShDb21waWxlTW9kZSBjb21waWxl
TQogICAgIGlmICghT3B0aW9uczo6dXNlREZHSklUKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICAKLSNpZiBERkdfRU5BQkxFKERFQlVHX1ZFUkJPU0UpCi0gICAgZGF0YUxvZygiREZHIGNv
bXBpbGluZyAiLCAqY29kZUJsb2NrLCAiLCBudW1iZXIgb2YgaW5zdHJ1Y3Rpb25zID0gIiwgY29k
ZUJsb2NrLT5pbnN0cnVjdGlvbkNvdW50KCksICJcbiIpOwotI2VuZGlmCisgICAgaWYgKHZlcmJv
c2VDb21waWxhdGlvbkVuYWJsZWQoKSkKKyAgICAgICAgZGF0YUxvZygiREZHIGNvbXBpbGluZyAi
LCAqY29kZUJsb2NrLCAiLCBudW1iZXIgb2YgaW5zdHJ1Y3Rpb25zID0gIiwgY29kZUJsb2NrLT5p
bnN0cnVjdGlvbkNvdW50KCksICJcbiIpOwogICAgIAogICAgIC8vIERlcml2ZSBvdXIgc2V0IG9m
IG11c3QtaGFuZGxlIHZhbHVlcy4gVGhlIGNvbXBpbGF0aW9uIG11c3QgYmUgYXQgbGVhc3QgY29u
c2VydmF0aXZlCiAgICAgLy8gZW5vdWdoIHRvIGFsbG93IGZvciBPU1IgZW50cnkgd2l0aCB0aGVz
ZSB2YWx1ZXMuCkBAIC0xMTIsMTYgKzExMSwxNiBAQCBpbmxpbmUgYm9vbCBjb21waWxlKENvbXBp
bGVNb2RlIGNvbXBpbGVNCiAgICAgLy8gdGhhdCByZWZlcmVuY2VzIGFueSBvZiB0aGUgdGFibGVz
IGRpcmVjdGx5LCB5ZXQuCiAgICAgY29kZUJsb2NrLT5zaHJpbmtUb0ZpdChDb2RlQmxvY2s6OkVh
cmx5U2hyaW5rKTsKIAotICAgIHZhbGlkYXRlKGRmZyk7CisgICAgaWYgKHZhbGlkYXRpb25FbmFi
bGVkKCkpCisgICAgICAgIHZhbGlkYXRlKGRmZyk7CiAgICAgcGVyZm9ybVByZWRpY3Rpb25Qcm9w
YWdhdGlvbihkZmcpOwogICAgIHBlcmZvcm1GaXh1cChkZmcpOwogICAgIHBlcmZvcm1TdHJ1Y3R1
cmVDaGVja0hvaXN0aW5nKGRmZyk7CiAgICAgdW5zaWduZWQgY250ID0gMTsKICAgICBkZmcubV9m
aXhwb2ludFN0YXRlID0gRml4cG9pbnROb3RDb252ZXJnZWQ7CiAgICAgZm9yICg7OyArK2NudCkg
ewotI2lmIERGR19FTkFCTEUoREVCVUdfVkVSQk9TRSkKLSAgICAgICAgZGF0YUxvZ0YoIkRGRyBi
ZWdpbm5pbmcgb3B0aW1pemF0aW9uIGZpeHBvaW50IGl0ZXJhdGlvbiAjJXUuXG4iLCBjbnQpOwot
I2VuZGlmCisgICAgICAgIGlmICh2ZXJib3NlQ29tcGlsYXRpb25FbmFibGVkKCkpCisgICAgICAg
ICAgICBkYXRhTG9nRigiREZHIGJlZ2lubmluZyBvcHRpbWl6YXRpb24gZml4cG9pbnQgaXRlcmF0
aW9uICMldS5cbiIsIGNudCk7CiAgICAgICAgIGJvb2wgY2hhbmdlZCA9IGZhbHNlOwogICAgICAg
ICBwZXJmb3JtQ0ZBKGRmZyk7CiAgICAgICAgIGNoYW5nZWQgfD0gcGVyZm9ybUNvbnN0YW50Rm9s
ZGluZyhkZmcpOwpAQCAtMTM1LDE4ICsxMzQsMTggQEAgaW5saW5lIGJvb2wgY29tcGlsZShDb21w
aWxlTW9kZSBjb21waWxlTQogICAgIH0KICAgICBkZmcubV9maXhwb2ludFN0YXRlID0gRml4cG9p
bnRDb252ZXJnZWQ7CiAgICAgcGVyZm9ybUNTRShkZmcpOwotI2lmIERGR19FTkFCTEUoREVCVUdf
VkVSQk9TRSkKLSAgICBkYXRhTG9nRigiREZHIG9wdGltaXphdGlvbiBmaXhwb2ludCBjb252ZXJn
ZWQgaW4gJXUgaXRlcmF0aW9ucy5cbiIsIGNudCk7Ci0jZW5kaWYKKyAgICBpZiAodmVyYm9zZUNv
bXBpbGF0aW9uRW5hYmxlZCgpKQorICAgICAgICBkYXRhTG9nRigiREZHIG9wdGltaXphdGlvbiBm
aXhwb2ludCBjb252ZXJnZWQgaW4gJXUgaXRlcmF0aW9ucy5cbiIsIGNudCk7CiAgICAgcGVyZm9y
bVZpcnR1YWxSZWdpc3RlckFsbG9jYXRpb24oZGZnKTsKIAogICAgIEdyYXBoRHVtcE1vZGUgbW9k
ZUZvckZpbmFsVmFsaWRhdGUgPSBEdW1wR3JhcGg7Ci0jaWYgREZHX0VOQUJMRShERUJVR19WRVJC
T1NFKQotICAgIGRhdGFMb2dGKCJHcmFwaCBhZnRlciBvcHRpbWl6YXRpb246XG4iKTsKLSAgICBk
ZmcuZHVtcCgpOwotICAgIG1vZGVGb3JGaW5hbFZhbGlkYXRlID0gRG9udER1bXBHcmFwaDsKLSNl
bmRpZgotICAgIHZhbGlkYXRlKGRmZywgbW9kZUZvckZpbmFsVmFsaWRhdGUpOworICAgIGlmICh2
ZXJib3NlQ29tcGlsYXRpb25FbmFibGVkKCkpIHsKKyAgICAgICAgZGF0YUxvZ0YoIkdyYXBoIGFm
dGVyIG9wdGltaXphdGlvbjpcbiIpOworICAgICAgICBkZmcuZHVtcCgpOworICAgICAgICBtb2Rl
Rm9yRmluYWxWYWxpZGF0ZSA9IERvbnREdW1wR3JhcGg7CisgICAgfQorICAgIGlmICh2YWxpZGF0
aW9uRW5hYmxlZCgpKQorICAgICAgICB2YWxpZGF0ZShkZmcsIG1vZGVGb3JGaW5hbFZhbGlkYXRl
KTsKICAgICAKICAgICBKSVRDb21waWxlciBkYXRhRmxvd0pJVChkZmcpOwogICAgIGJvb2wgcmVz
dWx0OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdFZGdlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0VkZ2UuY3BwCShyZXZpc2lvbiAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdFZGdlLmNwcAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSw0MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZHRWRnZS5oIgorCisjaWYg
RU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJERkdOb2RlLmgiCisKK25hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgREZHIHsKKwordm9pZCBFZGdlOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNv
bnN0Cit7CisgICAgb3V0LnByaW50KHVzZUtpbmRUb1N0cmluZyh1c2VLaW5kKCkpLCBub2RlKCkp
OworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZH
X0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdFZGdlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdFZGdlLmgJKHJldmlzaW9uIDE0
MTA1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRWRnZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTMgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC0zOSw0NSArMzksNDMgQEAgY2xhc3MgQWRqYWNlbmN5TGlzdDsKIGNsYXNzIEVkZ2Ugewog
cHVibGljOgogICAgIEVkZ2UoKQotICAgICAgICA6IG1fZW5jb2RlZFdvcmQobWFrZVdvcmQoTm9O
b2RlLCBVbnR5cGVkVXNlKSkKKyAgICAgICAgOiBtX2VuY29kZWRXb3JkKG1ha2VXb3JkKDAsIFVu
dHlwZWRVc2UpKQogICAgIHsKICAgICB9CiAgICAgCi0gICAgZXhwbGljaXQgRWRnZShOb2RlSW5k
ZXggbm9kZUluZGV4KQotICAgICAgICA6IG1fZW5jb2RlZFdvcmQobWFrZVdvcmQobm9kZUluZGV4
LCBVbnR5cGVkVXNlKSkKKyAgICBleHBsaWNpdCBFZGdlKE5vZGUqIG5vZGUpCisgICAgICAgIDog
bV9lbmNvZGVkV29yZChtYWtlV29yZChub2RlLCBVbnR5cGVkVXNlKSkKICAgICB7CiAgICAgfQog
ICAgIAotICAgIEVkZ2UoTm9kZUluZGV4IG5vZGVJbmRleCwgVXNlS2luZCB1c2VLaW5kKQotICAg
ICAgICA6IG1fZW5jb2RlZFdvcmQobWFrZVdvcmQobm9kZUluZGV4LCB1c2VLaW5kKSkKKyAgICBF
ZGdlKE5vZGUqIG5vZGUsIFVzZUtpbmQgdXNlS2luZCkKKyAgICAgICAgOiBtX2VuY29kZWRXb3Jk
KG1ha2VXb3JkKG5vZGUsIHVzZUtpbmQpKQogICAgIHsKICAgICB9CiAgICAgCi0gICAgTm9kZUlu
ZGV4IGluZGV4VW5jaGVja2VkKCkgY29uc3QgeyByZXR1cm4gbV9lbmNvZGVkV29yZCA+PiBzaGlm
dCgpOyB9Ci0gICAgTm9kZUluZGV4IGluZGV4KCkgY29uc3QKLSAgICB7Ci0gICAgICAgIEFTU0VS
VChpc1NldCgpKTsKLSAgICAgICAgcmV0dXJuIG1fZW5jb2RlZFdvcmQgPj4gc2hpZnQoKTsKLSAg
ICB9Ci0gICAgdm9pZCBzZXRJbmRleChOb2RlSW5kZXggbm9kZUluZGV4KQorICAgIE5vZGUqIG5v
ZGUoKSBjb25zdCB7IHJldHVybiBiaXR3aXNlX2Nhc3Q8Tm9kZSo+KG1fZW5jb2RlZFdvcmQgJiB+
KCgxIDw8IHNoaWZ0KCkpIC0gMSkpOyB9CisgICAgTm9kZSYgb3BlcmF0b3IqKCkgY29uc3QgeyBy
ZXR1cm4gKm5vZGUoKTsgfQorICAgIE5vZGUqIG9wZXJhdG9yLT4oKSBjb25zdCB7IHJldHVybiBu
b2RlKCk7IH0KKyAgICAKKyAgICB2b2lkIHNldE5vZGUoTm9kZSogbm9kZSkKICAgICB7Ci0gICAg
ICAgIG1fZW5jb2RlZFdvcmQgPSBtYWtlV29yZChub2RlSW5kZXgsIHVzZUtpbmQoKSk7CisgICAg
ICAgIG1fZW5jb2RlZFdvcmQgPSBtYWtlV29yZChub2RlLCB1c2VLaW5kKCkpOwogICAgIH0KICAg
ICAKICAgICBVc2VLaW5kIHVzZUtpbmQoKSBjb25zdAogICAgIHsKLSAgICAgICAgQVNTRVJUKGlz
U2V0KCkpOworICAgICAgICBBU1NFUlQobm9kZSgpKTsKICAgICAgICAgdW5zaWduZWQgbWFza2Vk
ID0gbV9lbmNvZGVkV29yZCAmICgoKDEgPDwgc2hpZnQoKSkgLSAxKSk7CiAgICAgICAgIEFTU0VS
VChtYXNrZWQgPCBMYXN0VXNlS2luZCk7CiAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxVc2VL
aW5kPihtYXNrZWQpOwogICAgIH0KICAgICB2b2lkIHNldFVzZUtpbmQoVXNlS2luZCB1c2VLaW5k
KQogICAgIHsKLSAgICAgICAgQVNTRVJUKGlzU2V0KCkpOwotICAgICAgICBtX2VuY29kZWRXb3Jk
ID0gbWFrZVdvcmQoaW5kZXgoKSwgdXNlS2luZCk7CisgICAgICAgIEFTU0VSVChub2RlKCkpOwor
ICAgICAgICBtX2VuY29kZWRXb3JkID0gbWFrZVdvcmQobm9kZSgpLCB1c2VLaW5kKTsKICAgICB9
CiAgICAgCi0gICAgYm9vbCBpc1NldCgpIGNvbnN0IHsgcmV0dXJuIGluZGV4VW5jaGVja2VkKCkg
IT0gTm9Ob2RlOyB9CisgICAgYm9vbCBpc1NldCgpIGNvbnN0IHsgcmV0dXJuICEhbm9kZSgpOyB9
CiAgICAgCiAgICAgdHlwZWRlZiB2b2lkKiBFZGdlOjoqVW5zcGVjaWZpZWRCb29sVHlwZTsKICAg
ICBvcGVyYXRvciBVbnNwZWNpZmllZEJvb2xUeXBlKigpIGNvbnN0IHsgcmV0dXJuIHJlaW50ZXJw
cmV0X2Nhc3Q8VW5zcGVjaWZpZWRCb29sVHlwZSo+KGlzU2V0KCkpOyB9CkBAIC05MiwzOCArOTAs
NDEgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgcmV0dXJuIG1fZW5jb2RlZFdvcmQgIT0gb3Ro
ZXIubV9lbmNvZGVkV29yZDsKICAgICB9CisgICAgCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFt
JikgY29uc3Q7CiAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIEFkamFjZW5jeUxpc3Q7CiAg
ICAgCi0gICAgc3RhdGljIHVpbnQzMl90IHNoaWZ0KCkgeyByZXR1cm4gNDsgfQorICAgIHN0YXRp
YyB1aW50MzJfdCBzaGlmdCgpIHsgcmV0dXJuIDI7IH0KICAgICAKLSAgICBzdGF0aWMgaW50MzJf
dCBtYWtlV29yZChOb2RlSW5kZXggbm9kZUluZGV4LCBVc2VLaW5kIHVzZUtpbmQpCisgICAgc3Rh
dGljIHVpbnRwdHJfdCBtYWtlV29yZChOb2RlKiBub2RlLCBVc2VLaW5kIHVzZUtpbmQpCiAgICAg
ewotICAgICAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8dWludDMyX3Q+KCgoc3RhdGljX2Nhc3Q8aW50
MzJfdD4obm9kZUluZGV4KSA8PCBzaGlmdCgpKSA+PiBzaGlmdCgpKSkgPT0gbm9kZUluZGV4KTsK
KyAgICAgICAgdWludHB0cl90IHZhbHVlID0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4obm9kZSk7
CisgICAgICAgIEFTU0VSVCghKHZhbHVlICYgKCgxIDw8IHNoaWZ0KCkpIC0gMSkpKTsKICAgICAg
ICAgQVNTRVJUKHVzZUtpbmQgPj0gMCAmJiB1c2VLaW5kIDwgTGFzdFVzZUtpbmQpOwogICAgICAg
ICBBU1NFUlQoTGFzdFVzZUtpbmQgPD0gKDEgPDwgc2hpZnQoKSkpOwotICAgICAgICByZXR1cm4g
KG5vZGVJbmRleCA8PCBzaGlmdCgpKSB8IHVzZUtpbmQ7CisgICAgICAgIHJldHVybiB2YWx1ZSB8
IHN0YXRpY19jYXN0PHVpbnRwdHJfdD4odXNlS2luZCk7CiAgICAgfQogICAgIAotICAgIGludDMy
X3QgbV9lbmNvZGVkV29yZDsKKyAgICB1aW50cHRyX3QgbV9lbmNvZGVkV29yZDsKIH07CiAKLWlu
bGluZSBib29sIG9wZXJhdG9yPT0oRWRnZSBub2RlVXNlLCBOb2RlSW5kZXggbm9kZUluZGV4KQor
aW5saW5lIGJvb2wgb3BlcmF0b3I9PShFZGdlIGVkZ2UsIE5vZGUqIG5vZGUpCiB7Ci0gICAgcmV0
dXJuIG5vZGVVc2UuaW5kZXhVbmNoZWNrZWQoKSA9PSBub2RlSW5kZXg7CisgICAgcmV0dXJuIGVk
Z2Uubm9kZSgpID09IG5vZGU7CiB9Ci1pbmxpbmUgYm9vbCBvcGVyYXRvcj09KE5vZGVJbmRleCBu
b2RlSW5kZXgsIEVkZ2Ugbm9kZVVzZSkKK2lubGluZSBib29sIG9wZXJhdG9yPT0oTm9kZSogbm9k
ZSwgRWRnZSBlZGdlKQogewotICAgIHJldHVybiBub2RlVXNlLmluZGV4VW5jaGVja2VkKCkgPT0g
bm9kZUluZGV4OworICAgIHJldHVybiBlZGdlLm5vZGUoKSA9PSBub2RlOwogfQotaW5saW5lIGJv
b2wgb3BlcmF0b3IhPShFZGdlIG5vZGVVc2UsIE5vZGVJbmRleCBub2RlSW5kZXgpCitpbmxpbmUg
Ym9vbCBvcGVyYXRvciE9KEVkZ2UgZWRnZSwgTm9kZSogbm9kZSkKIHsKLSAgICByZXR1cm4gbm9k
ZVVzZS5pbmRleFVuY2hlY2tlZCgpICE9IG5vZGVJbmRleDsKKyAgICByZXR1cm4gZWRnZS5ub2Rl
KCkgIT0gbm9kZTsKIH0KLWlubGluZSBib29sIG9wZXJhdG9yIT0oTm9kZUluZGV4IG5vZGVJbmRl
eCwgRWRnZSBub2RlVXNlKQoraW5saW5lIGJvb2wgb3BlcmF0b3IhPShOb2RlKiBub2RlLCBFZGdl
IGVkZ2UpCiB7Ci0gICAgcmV0dXJuIG5vZGVVc2UuaW5kZXhVbmNoZWNrZWQoKSAhPSBub2RlSW5k
ZXg7CisgICAgcmV0dXJuIGVkZ2Uubm9kZSgpICE9IG5vZGU7CiB9CiAKIH0gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpERkcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFz
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBo
YXNlLmNwcAkocmV2aXNpb24gMTQxMDUyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdGaXh1cFBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDEyLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTgsMjEgKzU4LDIxIEBAIHByaXZhdGU6
CiAgICAgICAgIEFTU0VSVChibG9jay0+aXNSZWFjaGFibGUpOwogICAgICAgICBtX2Jsb2NrID0g
YmxvY2s7CiAgICAgICAgIGZvciAobV9pbmRleEluQmxvY2sgPSAwOyBtX2luZGV4SW5CbG9jayA8
IGJsb2NrLT5zaXplKCk7ICsrbV9pbmRleEluQmxvY2spIHsKLSAgICAgICAgICAgIG1fY29tcGls
ZUluZGV4ID0gYmxvY2stPmF0KG1faW5kZXhJbkJsb2NrKTsKLSAgICAgICAgICAgIGZpeHVwTm9k
ZShtX2dyYXBoW21fY29tcGlsZUluZGV4XSk7CisgICAgICAgICAgICBtX2N1cnJlbnROb2RlID0g
YmxvY2stPmF0KG1faW5kZXhJbkJsb2NrKTsKKyAgICAgICAgICAgIGZpeHVwTm9kZShtX2N1cnJl
bnROb2RlKTsKICAgICAgICAgfQogICAgICAgICBtX2luc2VydGlvblNldC5leGVjdXRlKGJsb2Nr
KTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBmaXh1cE5vZGUoTm9kZSYgbm9kZSkKKyAgICB2b2lk
IGZpeHVwTm9kZShOb2RlKiBub2RlKQogICAgIHsKLSAgICAgICAgaWYgKCFub2RlLnNob3VsZEdl
bmVyYXRlKCkpCisgICAgICAgIGlmICghbm9kZS0+c2hvdWxkR2VuZXJhdGUoKSkKICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgCi0gICAgICAgIE5vZGVUeXBlIG9wID0gbm9kZS5vcCgpOwor
ICAgICAgICBOb2RlVHlwZSBvcCA9IG5vZGUtPm9wKCk7CiAKICNpZiBERkdfRU5BQkxFKERFQlVH
X1BST1BBR0FUSU9OX1ZFUkJPU0UpCi0gICAgICAgIGRhdGFMb2dGKCIgICAlcyBAJXU6ICIsIEdy
YXBoOjpvcE5hbWUob3ApLCBtX2NvbXBpbGVJbmRleCk7CisgICAgICAgIGRhdGFMb2dGKCIgICAl
cyBAJXU6ICIsIEdyYXBoOjpvcE5hbWUob3ApLCBub2RlLT5pbmRleCgpKTsKICNlbmRpZgogICAg
ICAgICAKICAgICAgICAgc3dpdGNoIChvcCkgewpAQCAtODAsODAgKzgwLDcxIEBAIHByaXZhdGU6
CiAgICAgICAgICAgICBpZiAobV9ncmFwaC5tX2ZpeHBvaW50U3RhdGUgPiBCZWZvcmVGaXhwb2lu
dCkKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIAotICAgICAgICAgICAgTm9k
ZSogbm9kZVB0ciA9ICZub2RlOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoIWlzSW50
MzJTcGVjdWxhdGlvbihtX2dyYXBoW21fY29tcGlsZUluZGV4XS5wcmVkaWN0aW9uKCkpKQorICAg
ICAgICAgICAgaWYgKCFpc0ludDMyU3BlY3VsYXRpb24obm9kZS0+cHJlZGljdGlvbigpKSkKICAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGlmIChjb2RlQmxvY2soKS0+aWRlbnRp
Zmllcihub2RlUHRyLT5pZGVudGlmaWVyTnVtYmVyKCkpICE9IGdsb2JhbERhdGEoKS5wcm9wZXJ0
eU5hbWVzLT5sZW5ndGgpCisgICAgICAgICAgICBpZiAoY29kZUJsb2NrKCktPmlkZW50aWZpZXIo
bm9kZS0+aWRlbnRpZmllck51bWJlcigpKSAhPSBnbG9iYWxEYXRhKCkucHJvcGVydHlOYW1lcy0+
bGVuZ3RoKQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgQXJyYXlQcm9maWxl
KiBhcnJheVByb2ZpbGUgPSAKLSAgICAgICAgICAgICAgICBtX2dyYXBoLmJhc2VsaW5lQ29kZUJs
b2NrRm9yKG5vZGVQdHItPmNvZGVPcmlnaW4pLT5nZXRBcnJheVByb2ZpbGUoCi0gICAgICAgICAg
ICAgICAgICAgIG5vZGVQdHItPmNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCk7CisgICAgICAgICAg
ICAgICAgbV9ncmFwaC5iYXNlbGluZUNvZGVCbG9ja0Zvcihub2RlLT5jb2RlT3JpZ2luKS0+Z2V0
QXJyYXlQcm9maWxlKAorICAgICAgICAgICAgICAgICAgICBub2RlLT5jb2RlT3JpZ2luLmJ5dGVj
b2RlSW5kZXgpOwogICAgICAgICAgICAgQXJyYXlNb2RlIGFycmF5TW9kZSA9IEFycmF5TW9kZShB
cnJheTo6U2VsZWN0VXNpbmdQcmVkaWN0aW9ucyk7CiAgICAgICAgICAgICBpZiAoYXJyYXlQcm9m
aWxlKSB7Ci0gICAgICAgICAgICAgICAgYXJyYXlQcm9maWxlLT5jb21wdXRlVXBkYXRlZFByZWRp
Y3Rpb24obV9ncmFwaC5iYXNlbGluZUNvZGVCbG9ja0Zvcihub2RlLmNvZGVPcmlnaW4pKTsKKyAg
ICAgICAgICAgICAgICBhcnJheVByb2ZpbGUtPmNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbihtX2dy
YXBoLmJhc2VsaW5lQ29kZUJsb2NrRm9yKG5vZGUtPmNvZGVPcmlnaW4pKTsKICAgICAgICAgICAg
ICAgICBhcnJheU1vZGUgPSBBcnJheU1vZGU6OmZyb21PYnNlcnZlZChhcnJheVByb2ZpbGUsIEFy
cmF5OjpSZWFkLCBmYWxzZSk7CiAgICAgICAgICAgICAgICAgYXJyYXlNb2RlID0gYXJyYXlNb2Rl
LnJlZmluZSgKLSAgICAgICAgICAgICAgICAgICAgbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5wcmVk
aWN0aW9uKCksCi0gICAgICAgICAgICAgICAgICAgIG1fZ3JhcGhbbV9jb21waWxlSW5kZXhdLnBy
ZWRpY3Rpb24oKSk7CisgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLT5wcmVkaWN0
aW9uKCksIG5vZGUtPnByZWRpY3Rpb24oKSk7CiAgICAgICAgICAgICAgICAgaWYgKGFycmF5TW9k
ZS5zdXBwb3J0c0xlbmd0aCgpICYmIGFycmF5UHJvZmlsZS0+aGFzRGVmaW5pdGVTdHJ1Y3R1cmUo
KSkgewogICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAogICAg
ICAgICAgICAgICAgICAgICAgICAgbV9pbmRleEluQmxvY2ssIFJlZkNoaWxkcmVuLCBEb250UmVm
Tm9kZSwgU3BlY05vbmUsIENoZWNrU3RydWN0dXJlLAotICAgICAgICAgICAgICAgICAgICAgICAg
bm9kZVB0ci0+Y29kZU9yaWdpbiwgT3BJbmZvKG1fZ3JhcGguYWRkU3RydWN0dXJlU2V0KGFycmF5
UHJvZmlsZS0+ZXhwZWN0ZWRTdHJ1Y3R1cmUoKSkpLAotICAgICAgICAgICAgICAgICAgICAgICAg
bm9kZVB0ci0+Y2hpbGQxKCkuaW5kZXgoKSk7Ci0gICAgICAgICAgICAgICAgICAgIG5vZGVQdHIg
PSAmbV9ncmFwaFttX2NvbXBpbGVJbmRleF07CisgICAgICAgICAgICAgICAgICAgICAgICBub2Rl
LT5jb2RlT3JpZ2luLCBPcEluZm8obV9ncmFwaC5hZGRTdHJ1Y3R1cmVTZXQoYXJyYXlQcm9maWxl
LT5leHBlY3RlZFN0cnVjdHVyZSgpKSksCisgICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5j
aGlsZDEoKS5ub2RlKCkpOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICAgICAgYXJyYXlNb2RlID0gYXJyYXlNb2RlLnJlZmluZSgKLSAgICAgICAg
ICAgICAgICAgICAgbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5wcmVkaWN0aW9uKCksCi0gICAgICAg
ICAgICAgICAgICAgIG1fZ3JhcGhbbV9jb21waWxlSW5kZXhdLnByZWRpY3Rpb24oKSk7Ci0gICAg
ICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICBhcnJheU1vZGUg
PSBhcnJheU1vZGUucmVmaW5lKG5vZGUtPmNoaWxkMSgpLT5wcmVkaWN0aW9uKCksIG5vZGUtPnBy
ZWRpY3Rpb24oKSk7CiAgICAgICAgICAgICBpZiAoIWFycmF5TW9kZS5zdXBwb3J0c0xlbmd0aCgp
KQogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgbm9kZVB0ci0+c2V0T3AoR2V0
QXJyYXlMZW5ndGgpOwotICAgICAgICAgICAgQVNTRVJUKG5vZGVQdHItPmZsYWdzKCkgJiBOb2Rl
TXVzdEdlbmVyYXRlKTsKLSAgICAgICAgICAgIG5vZGVQdHItPmNsZWFyRmxhZ3MoTm9kZU11c3RH
ZW5lcmF0ZSB8IE5vZGVDbG9iYmVyc1dvcmxkKTsKLSAgICAgICAgICAgIG1fZ3JhcGguZGVyZWYo
bV9jb21waWxlSW5kZXgpOwotICAgICAgICAgICAgbm9kZVB0ci0+c2V0QXJyYXlNb2RlKGFycmF5
TW9kZSk7CisgICAgICAgICAgICBub2RlLT5zZXRPcChHZXRBcnJheUxlbmd0aCk7CisgICAgICAg
ICAgICBBU1NFUlQobm9kZS0+ZmxhZ3MoKSAmIE5vZGVNdXN0R2VuZXJhdGUpOworICAgICAgICAg
ICAgbm9kZS0+Y2xlYXJGbGFncyhOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZUNsb2JiZXJzV29ybGQp
OworICAgICAgICAgICAgbV9ncmFwaC5kZXJlZihub2RlKTsKKyAgICAgICAgICAgIG5vZGUtPnNl
dEFycmF5TW9kZShhcnJheU1vZGUpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBOb2RlSW5k
ZXggc3RvcmFnZSA9IGNoZWNrQXJyYXkoYXJyYXlNb2RlLCBub2RlUHRyLT5jb2RlT3JpZ2luLCBu
b2RlUHRyLT5jaGlsZDEoKS5pbmRleCgpLCBOb05vZGUsIGxlbmd0aE5lZWRzU3RvcmFnZSwgbm9k
ZVB0ci0+c2hvdWxkR2VuZXJhdGUoKSk7Ci0gICAgICAgICAgICBpZiAoc3RvcmFnZSA9PSBOb05v
ZGUpCisgICAgICAgICAgICBOb2RlKiBzdG9yYWdlID0gY2hlY2tBcnJheShhcnJheU1vZGUsIG5v
ZGUtPmNvZGVPcmlnaW4sIG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgMCwgbGVuZ3RoTmVlZHNTdG9y
YWdlLCBub2RlLT5zaG91bGRHZW5lcmF0ZSgpKTsKKyAgICAgICAgICAgIGlmICghc3RvcmFnZSkK
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIAotICAgICAgICAgICAgbm9kZVB0
ciA9ICZtX2dyYXBoW21fY29tcGlsZUluZGV4XTsKLSAgICAgICAgICAgIG5vZGVQdHItPmNoaWxk
cmVuLmNoaWxkMigpID0gRWRnZShzdG9yYWdlKTsKKyAgICAgICAgICAgIG5vZGUtPmNoaWxkcmVu
LmNoaWxkMigpID0gRWRnZShzdG9yYWdlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9
CiAgICAgICAgIGNhc2UgR2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZTogewotICAgICAgICAgICAg
QVNTRVJUKG5vZGUuYXJyYXlNb2RlKCkuY2FuQ1NFU3RvcmFnZSgpKTsKKyAgICAgICAgICAgIEFT
U0VSVChub2RlLT5hcnJheU1vZGUoKS5jYW5DU0VTdG9yYWdlKCkpOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBHZXRCeVZhbDogewotICAgICAgICAgICAgbm9k
ZS5zZXRBcnJheU1vZGUoCi0gICAgICAgICAgICAgICAgbm9kZS5hcnJheU1vZGUoKS5yZWZpbmUo
Ci0gICAgICAgICAgICAgICAgICAgIG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ucHJlZGljdGlvbigp
LAotICAgICAgICAgICAgICAgICAgICBtX2dyYXBoW25vZGUuY2hpbGQyKCldLnByZWRpY3Rpb24o
KSwKLSAgICAgICAgICAgICAgICAgICAgU3BlY05vbmUsIG5vZGUuZmxhZ3MoKSkpOworICAgICAg
ICAgICAgbm9kZS0+c2V0QXJyYXlNb2RlKAorICAgICAgICAgICAgICAgIG5vZGUtPmFycmF5TW9k
ZSgpLnJlZmluZSgKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCktPnByZWRpY3Rp
b24oKSwKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQyKCktPnByZWRpY3Rpb24oKSwK
KyAgICAgICAgICAgICAgICAgICAgU3BlY05vbmUsIG5vZGUtPmZsYWdzKCkpKTsKICAgICAgICAg
ICAgIAotICAgICAgICAgICAgYmxlc3NBcnJheU9wZXJhdGlvbihub2RlLmNoaWxkMSgpLCBub2Rl
LmNoaWxkMigpLCAyKTsKKyAgICAgICAgICAgIGJsZXNzQXJyYXlPcGVyYXRpb24obm9kZS0+Y2hp
bGQxKCksIG5vZGUtPmNoaWxkMigpLCAyKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgTm9k
ZSogbm9kZVB0ciA9ICZtX2dyYXBoW21fY29tcGlsZUluZGV4XTsKLSAgICAgICAgICAgIEFycmF5
TW9kZSBhcnJheU1vZGUgPSBub2RlUHRyLT5hcnJheU1vZGUoKTsKKyAgICAgICAgICAgIEFycmF5
TW9kZSBhcnJheU1vZGUgPSBub2RlLT5hcnJheU1vZGUoKTsKICAgICAgICAgICAgIGlmIChhcnJh
eU1vZGUudHlwZSgpID09IEFycmF5OjpEb3VibGUKICAgICAgICAgICAgICAgICAmJiBhcnJheU1v
ZGUuYXJyYXlDbGFzcygpID09IEFycmF5OjpPcmlnaW5hbEFycmF5CiAgICAgICAgICAgICAgICAg
JiYgYXJyYXlNb2RlLnNwZWN1bGF0aW9uKCkgPT0gQXJyYXk6OkluQm91bmRzCiAgICAgICAgICAg
ICAgICAgJiYgYXJyYXlNb2RlLmNvbnZlcnNpb24oKSA9PSBBcnJheTo6QXNJcwotICAgICAgICAg
ICAgICAgICYmIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGVQdHItPmNvZGVPcmlnaW4pLT5h
cnJheVByb3RvdHlwZUNoYWluSXNTYW5lKCkKLSAgICAgICAgICAgICAgICAmJiAhKG5vZGVQdHIt
PmZsYWdzKCkgJiBOb2RlVXNlZEFzT3RoZXIpKQotICAgICAgICAgICAgICAgIG5vZGVQdHItPnNl
dEFycmF5TW9kZShhcnJheU1vZGUud2l0aFNwZWN1bGF0aW9uKEFycmF5OjpTYW5lQ2hhaW4pKTsK
KyAgICAgICAgICAgICAgICAmJiBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5jb2RlT3Jp
Z2luKS0+YXJyYXlQcm90b3R5cGVDaGFpbklzU2FuZSgpCisgICAgICAgICAgICAgICAgJiYgIShu
b2RlLT5mbGFncygpICYgTm9kZVVzZWRBc090aGVyKSkKKyAgICAgICAgICAgICAgICBub2RlLT5z
ZXRBcnJheU1vZGUoYXJyYXlNb2RlLndpdGhTcGVjdWxhdGlvbihBcnJheTo6U2FuZUNoYWluKSk7
CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNh
c2UgU3RyaW5nQ2hhckF0OgogICAgICAgICBjYXNlIFN0cmluZ0NoYXJDb2RlQXQ6IHsKICAgICAg
ICAgICAgIC8vIEN1cnJlbnRseSB3ZSBoYXZlIG5vIGdvb2Qgd2F5IG9mIHJlZmluaW5nIHRoZXNl
LgotICAgICAgICAgICAgQVNTRVJUKG5vZGUuYXJyYXlNb2RlKCkgPT0gQXJyYXlNb2RlKEFycmF5
OjpTdHJpbmcpKTsKLSAgICAgICAgICAgIGJsZXNzQXJyYXlPcGVyYXRpb24obm9kZS5jaGlsZDEo
KSwgbm9kZS5jaGlsZDIoKSwgMik7CisgICAgICAgICAgICBBU1NFUlQobm9kZS0+YXJyYXlNb2Rl
KCkgPT0gQXJyYXlNb2RlKEFycmF5OjpTdHJpbmcpKTsKKyAgICAgICAgICAgIGJsZXNzQXJyYXlP
cGVyYXRpb24obm9kZS0+Y2hpbGQxKCksIG5vZGUtPmNoaWxkMigpLCAyKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKQEAgLTE2NywxNSArMTU4LDE0IEBAIHBy
aXZhdGU6CiAgICAgICAgICAgICAvLyBpZ25vcmVkLiBUaGF0J3MgYmVjYXVzZSBBcnJheVB1c2gg
Y2FuJ3QgaGFuZGxlIGFueSBhcnJheSBtb2RlcyB0aGF0IGFyZW4ndAogICAgICAgICAgICAgLy8g
YXJyYXktcmVsYXRlZCAtIHNvIGlmIHJlZmluZSgpIHR1cm5lZCB0aGlzIGludG8gYSAiR2VuZXJp
YyIgQXJyYXlQdXNoIHRoZW4KICAgICAgICAgICAgIC8vIHRoYXQgd291bGQgYnJlYWsgdGhpbmdz
LgotICAgICAgICAgICAgbm9kZS5zZXRBcnJheU1vZGUoCi0gICAgICAgICAgICAgICAgbm9kZS5h
cnJheU1vZGUoKS5yZWZpbmUoCi0gICAgICAgICAgICAgICAgICAgIG1fZ3JhcGhbbm9kZS5jaGls
ZDEoKV0ucHJlZGljdGlvbigpICYgU3BlY0NlbGwsCisgICAgICAgICAgICBub2RlLT5zZXRBcnJh
eU1vZGUoCisgICAgICAgICAgICAgICAgbm9kZS0+YXJyYXlNb2RlKCkucmVmaW5lKAorICAgICAg
ICAgICAgICAgICAgICBub2RlLT5jaGlsZDEoKS0+cHJlZGljdGlvbigpICYgU3BlY0NlbGwsCiAg
ICAgICAgICAgICAgICAgICAgIFNwZWNJbnQzMiwKLSAgICAgICAgICAgICAgICAgICAgbV9ncmFw
aFtub2RlLmNoaWxkMigpXS5wcmVkaWN0aW9uKCkpKTsKLSAgICAgICAgICAgIGJsZXNzQXJyYXlP
cGVyYXRpb24obm9kZS5jaGlsZDEoKSwgRWRnZSgpLCAyKTsKKyAgICAgICAgICAgICAgICAgICAg
bm9kZS0+Y2hpbGQyKCktPnByZWRpY3Rpb24oKSkpOworICAgICAgICAgICAgYmxlc3NBcnJheU9w
ZXJhdGlvbihub2RlLT5jaGlsZDEoKSwgRWRnZSgpLCAyKTsKICAgICAgICAgICAgIAotICAgICAg
ICAgICAgTm9kZSogbm9kZVB0ciA9ICZtX2dyYXBoW21fY29tcGlsZUluZGV4XTsKLSAgICAgICAg
ICAgIHN3aXRjaCAobm9kZVB0ci0+YXJyYXlNb2RlKCkudHlwZSgpKSB7CisgICAgICAgICAgICBz
d2l0Y2ggKG5vZGUtPmFycmF5TW9kZSgpLnR5cGUoKSkgewogICAgICAgICAgICAgY2FzZSBBcnJh
eTo6RG91YmxlOgogICAgICAgICAgICAgICAgIGZpeERvdWJsZUVkZ2UoMSk7CiAgICAgICAgICAg
ICAgICAgYnJlYWs7CkBAIC0xODYsMTUgKzE3NiwxNSBAQCBwcml2YXRlOgogICAgICAgICB9CiAg
ICAgICAgICAgICAKICAgICAgICAgY2FzZSBBcnJheVBvcDogewotICAgICAgICAgICAgYmxlc3NB
cnJheU9wZXJhdGlvbihub2RlLmNoaWxkMSgpLCBFZGdlKCksIDEpOworICAgICAgICAgICAgYmxl
c3NBcnJheU9wZXJhdGlvbihub2RlLT5jaGlsZDEoKSwgRWRnZSgpLCAxKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBWYWx1ZVRvSW50
MzI6IHsKLSAgICAgICAgICAgIGlmIChtX2dyYXBoW25vZGUuY2hpbGQxKCldLnNob3VsZFNwZWN1
bGF0ZU51bWJlcigpCi0gICAgICAgICAgICAgICAgJiYgbm9kZS5tdXN0R2VuZXJhdGUoKSkgewot
ICAgICAgICAgICAgICAgIG5vZGUuY2xlYXJGbGFncyhOb2RlTXVzdEdlbmVyYXRlKTsKLSAgICAg
ICAgICAgICAgICBtX2dyYXBoLmRlcmVmKG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAgICAgIGlm
IChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlTnVtYmVyKCkKKyAgICAgICAgICAgICAg
ICAmJiBub2RlLT5tdXN0R2VuZXJhdGUoKSkgeworICAgICAgICAgICAgICAgIG5vZGUtPmNsZWFy
RmxhZ3MoTm9kZU11c3RHZW5lcmF0ZSk7CisgICAgICAgICAgICAgICAgbV9ncmFwaC5kZXJlZihu
b2RlKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkBAIC0y
MDUsOCArMTk1LDggQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBCaXRSU2hpZnQ6CiAgICAgICAg
IGNhc2UgQml0TFNoaWZ0OgogICAgICAgICBjYXNlIEJpdFVSU2hpZnQ6IHsKLSAgICAgICAgICAg
IGZpeEludEVkZ2Uobm9kZS5jaGlsZHJlbi5jaGlsZDEoKSk7Ci0gICAgICAgICAgICBmaXhJbnRF
ZGdlKG5vZGUuY2hpbGRyZW4uY2hpbGQyKCkpOworICAgICAgICAgICAgZml4SW50RWRnZShub2Rl
LT5jaGlsZHJlbi5jaGlsZDEoKSk7CisgICAgICAgICAgICBmaXhJbnRFZGdlKG5vZGUtPmNoaWxk
cmVuLmNoaWxkMigpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAg
ICAKQEAgLTIxNiw5ICsyMDYsOSBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIENvbXBhcmVHcmVh
dGVyOgogICAgICAgICBjYXNlIENvbXBhcmVHcmVhdGVyRXE6CiAgICAgICAgIGNhc2UgQ29tcGFy
ZVN0cmljdEVxOiB7Ci0gICAgICAgICAgICBpZiAoTm9kZTo6c2hvdWxkU3BlY3VsYXRlSW50ZWdl
cihtX2dyYXBoW25vZGUuY2hpbGQxKCldLCBtX2dyYXBoW25vZGUuY2hpbGQyKCldKSkKKyAgICAg
ICAgICAgIGlmIChOb2RlOjpzaG91bGRTcGVjdWxhdGVJbnRlZ2VyKG5vZGUtPmNoaWxkMSgpLm5v
ZGUoKSwgbm9kZS0+Y2hpbGQyKCkubm9kZSgpKSkKICAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgIGlmICghTm9kZTo6c2hvdWxkU3BlY3VsYXRlTnVtYmVyKG1fZ3JhcGhbbm9kZS5j
aGlsZDEoKV0sIG1fZ3JhcGhbbm9kZS5jaGlsZDIoKV0pKQorICAgICAgICAgICAgaWYgKCFOb2Rl
OjpzaG91bGRTcGVjdWxhdGVOdW1iZXIobm9kZS0+Y2hpbGQxKCkubm9kZSgpLCBub2RlLT5jaGls
ZDIoKS5ub2RlKCkpKQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgZml4RG91
YmxlRWRnZSgwKTsKICAgICAgICAgICAgIGZpeERvdWJsZUVkZ2UoMSk7CkBAIC0yMjYsNDMgKzIx
Niw0MSBAQCBwcml2YXRlOgogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBM
b2dpY2FsTm90OiB7Ci0gICAgICAgICAgICBpZiAobV9ncmFwaFtub2RlLmNoaWxkMSgpXS5zaG91
bGRTcGVjdWxhdGVJbnRlZ2VyKCkpCisgICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnNo
b3VsZFNwZWN1bGF0ZUludGVnZXIoKSkKICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgIGlmICghbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5zaG91bGRTcGVjdWxhdGVOdW1iZXIoKSkK
KyAgICAgICAgICAgIGlmICghbm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZU51bWJlcigp
KQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgZml4RG91YmxlRWRnZSgwKTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2Fz
ZSBCcmFuY2g6IHsKLSAgICAgICAgICAgIGlmICghbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5zaG91
bGRTcGVjdWxhdGVJbnRlZ2VyKCkKLSAgICAgICAgICAgICAgICAmJiBtX2dyYXBoW25vZGUuY2hp
bGQxKCldLnNob3VsZFNwZWN1bGF0ZU51bWJlcigpKQorICAgICAgICAgICAgaWYgKCFub2RlLT5j
aGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpCisgICAgICAgICAgICAgICAgJiYgbm9k
ZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZU51bWJlcigpKQogICAgICAgICAgICAgICAgIGZp
eERvdWJsZUVkZ2UoMCk7CiAKLSAgICAgICAgICAgIE5vZGUmIG15Tm9kZSA9IG1fZ3JhcGhbbV9j
b21waWxlSW5kZXhdOyAvLyByZWxvYWQgYmVjYXVzZSB0aGUgZ3JhcGggbWF5IGhhdmUgY2hhbmdl
ZAotICAgICAgICAgICAgRWRnZSBsb2dpY2FsTm90RWRnZSA9IG15Tm9kZS5jaGlsZDEoKTsKLSAg
ICAgICAgICAgIE5vZGUmIGxvZ2ljYWxOb3QgPSBtX2dyYXBoW2xvZ2ljYWxOb3RFZGdlXTsKLSAg
ICAgICAgICAgIGlmIChsb2dpY2FsTm90Lm9wKCkgPT0gTG9naWNhbE5vdAotICAgICAgICAgICAg
ICAgICYmIGxvZ2ljYWxOb3QuYWRqdXN0ZWRSZWZDb3VudCgpID09IDEpIHsKLSAgICAgICAgICAg
ICAgICBFZGdlIG5ld0NoaWxkRWRnZSA9IGxvZ2ljYWxOb3QuY2hpbGQxKCk7Ci0gICAgICAgICAg
ICAgICAgaWYgKG1fZ3JhcGhbbmV3Q2hpbGRFZGdlXS5oYXNCb29sZWFuUmVzdWx0KCkpIHsKKyAg
ICAgICAgICAgIE5vZGUqIGxvZ2ljYWxOb3QgPSBub2RlLT5jaGlsZDEoKS5ub2RlKCk7CisgICAg
ICAgICAgICBpZiAobG9naWNhbE5vdC0+b3AoKSA9PSBMb2dpY2FsTm90CisgICAgICAgICAgICAg
ICAgJiYgbG9naWNhbE5vdC0+YWRqdXN0ZWRSZWZDb3VudCgpID09IDEpIHsKKyAgICAgICAgICAg
ICAgICBFZGdlIG5ld0NoaWxkRWRnZSA9IGxvZ2ljYWxOb3QtPmNoaWxkMSgpOworICAgICAgICAg
ICAgICAgIGlmIChuZXdDaGlsZEVkZ2UtPmhhc0Jvb2xlYW5SZXN1bHQoKSkgewogICAgICAgICAg
ICAgICAgICAgICBtX2dyYXBoLnJlZihuZXdDaGlsZEVkZ2UpOwotICAgICAgICAgICAgICAgICAg
ICBtX2dyYXBoLmRlcmVmKGxvZ2ljYWxOb3RFZGdlKTsKLSAgICAgICAgICAgICAgICAgICAgbXlO
b2RlLmNoaWxkcmVuLnNldENoaWxkMShuZXdDaGlsZEVkZ2UpOworICAgICAgICAgICAgICAgICAg
ICBtX2dyYXBoLmRlcmVmKGxvZ2ljYWxOb3QpOworICAgICAgICAgICAgICAgICAgICBub2RlLT5j
aGlsZHJlbi5zZXRDaGlsZDEobmV3Q2hpbGRFZGdlKTsKICAgICAgICAgICAgICAgICAgICAgCi0g
ICAgICAgICAgICAgICAgICAgIEJsb2NrSW5kZXggdG9CZVRha2VuID0gbXlOb2RlLm5vdFRha2Vu
QmxvY2tJbmRleCgpOwotICAgICAgICAgICAgICAgICAgICBCbG9ja0luZGV4IHRvQmVOb3RUYWtl
biA9IG15Tm9kZS50YWtlbkJsb2NrSW5kZXgoKTsKLSAgICAgICAgICAgICAgICAgICAgbXlOb2Rl
LnNldFRha2VuQmxvY2tJbmRleCh0b0JlVGFrZW4pOwotICAgICAgICAgICAgICAgICAgICBteU5v
ZGUuc2V0Tm90VGFrZW5CbG9ja0luZGV4KHRvQmVOb3RUYWtlbik7CisgICAgICAgICAgICAgICAg
ICAgIEJsb2NrSW5kZXggdG9CZVRha2VuID0gbm9kZS0+bm90VGFrZW5CbG9ja0luZGV4KCk7Cisg
ICAgICAgICAgICAgICAgICAgIEJsb2NrSW5kZXggdG9CZU5vdFRha2VuID0gbm9kZS0+dGFrZW5C
bG9ja0luZGV4KCk7CisgICAgICAgICAgICAgICAgICAgIG5vZGUtPnNldFRha2VuQmxvY2tJbmRl
eCh0b0JlVGFrZW4pOworICAgICAgICAgICAgICAgICAgICBub2RlLT5zZXROb3RUYWtlbkJsb2Nr
SW5kZXgodG9CZU5vdFRha2VuKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgIGNhc2Ug
U2V0TG9jYWw6IHsKLSAgICAgICAgICAgIGlmIChub2RlLnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5p
c0NhcHR1cmVkKCkpCisgICAgICAgICAgICBpZiAobm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCkt
PmlzQ2FwdHVyZWQoKSkKICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGlmICgh
bm9kZS52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+c2hvdWxkVXNlRG91YmxlRm9ybWF0KCkpCisgICAg
ICAgICAgICBpZiAoIW5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5zaG91bGRVc2VEb3VibGVG
b3JtYXQoKSkKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGZpeERvdWJsZUVk
Z2UoMCk7CiAgICAgICAgICAgICBicmVhazsKQEAgLTI3Miw3ICsyNjAsNyBAQCBwcml2YXRlOgog
ICAgICAgICBjYXNlIFZhbHVlQWRkOiB7CiAgICAgICAgICAgICBpZiAobV9ncmFwaC5hZGRTaG91
bGRTcGVjdWxhdGVJbnRlZ2VyKG5vZGUpKQogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgaWYgKCFOb2RlOjpzaG91bGRTcGVjdWxhdGVOdW1iZXJFeHBlY3RpbmdEZWZpbmVkKG1f
Z3JhcGhbbm9kZS5jaGlsZDEoKV0sIG1fZ3JhcGhbbm9kZS5jaGlsZDIoKV0pKQorICAgICAgICAg
ICAgaWYgKCFOb2RlOjpzaG91bGRTcGVjdWxhdGVOdW1iZXJFeHBlY3RpbmdEZWZpbmVkKG5vZGUt
PmNoaWxkMSgpLm5vZGUoKSwgbm9kZS0+Y2hpbGQyKCkubm9kZSgpKSkKICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgIGZpeERvdWJsZUVkZ2UoMCk7CiAgICAgICAgICAgICBmaXhE
b3VibGVFZGdlKDEpOwpAQCAtMjgxLDcgKzI2OSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAK
ICAgICAgICAgY2FzZSBBcml0aFN1YjogewogICAgICAgICAgICAgaWYgKG1fZ3JhcGguYWRkU2hv
dWxkU3BlY3VsYXRlSW50ZWdlcihub2RlKQotICAgICAgICAgICAgICAgICYmIG5vZGUuY2FuU3Bl
Y3VsYXRlSW50ZWdlcigpKQorICAgICAgICAgICAgICAgICYmIG5vZGUtPmNhblNwZWN1bGF0ZUlu
dGVnZXIoKSkKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGZpeERvdWJsZUVk
Z2UoMCk7CiAgICAgICAgICAgICBmaXhEb3VibGVFZGdlKDEpOwpAQCAtMjk4LDggKzI4Niw4IEBA
IHByaXZhdGU6CiAgICAgICAgIGNhc2UgQXJpdGhNaW46CiAgICAgICAgIGNhc2UgQXJpdGhNYXg6
CiAgICAgICAgIGNhc2UgQXJpdGhNb2Q6IHsKLSAgICAgICAgICAgIGlmIChOb2RlOjpzaG91bGRT
cGVjdWxhdGVJbnRlZ2VyRm9yQXJpdGhtZXRpYyhtX2dyYXBoW25vZGUuY2hpbGQxKCldLCBtX2dy
YXBoW25vZGUuY2hpbGQyKCldKQotICAgICAgICAgICAgICAgICYmIG5vZGUuY2FuU3BlY3VsYXRl
SW50ZWdlcigpKQorICAgICAgICAgICAgaWYgKE5vZGU6OnNob3VsZFNwZWN1bGF0ZUludGVnZXJG
b3JBcml0aG1ldGljKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgbm9kZS0+Y2hpbGQyKCkubm9kZSgp
KQorICAgICAgICAgICAgICAgICYmIG5vZGUtPmNhblNwZWN1bGF0ZUludGVnZXIoKSkKICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGZpeERvdWJsZUVkZ2UoMCk7CiAgICAgICAg
ICAgICBmaXhEb3VibGVFZGdlKDEpOwpAQCAtMzE1LDggKzMwMyw4IEBAIHByaXZhdGU6CiAgICAg
ICAgIH0KIAogICAgICAgICBjYXNlIEFyaXRoRGl2OiB7Ci0gICAgICAgICAgICBpZiAoTm9kZTo6
c2hvdWxkU3BlY3VsYXRlSW50ZWdlckZvckFyaXRobWV0aWMobV9ncmFwaFtub2RlLmNoaWxkMSgp
XSwgbV9ncmFwaFtub2RlLmNoaWxkMigpXSkKLSAgICAgICAgICAgICAgICAmJiBub2RlLmNhblNw
ZWN1bGF0ZUludGVnZXIoKSkgeworICAgICAgICAgICAgaWYgKE5vZGU6OnNob3VsZFNwZWN1bGF0
ZUludGVnZXJGb3JBcml0aG1ldGljKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgbm9kZS0+Y2hpbGQy
KCkubm9kZSgpKQorICAgICAgICAgICAgICAgICYmIG5vZGUtPmNhblNwZWN1bGF0ZUludGVnZXIo
KSkgewogICAgICAgICAgICAgICAgIGlmIChpc1g4NigpKQogICAgICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgICAgICBpbmplY3RJbnQzMlRvRG91YmxlTm9kZSgwKTsKQEAgLTMy
NCwxMiArMzEyLDExIEBAIHByaXZhdGU6CiAKICAgICAgICAgICAgICAgICAvLyBXZSBkb24ndCBu
ZWVkIHRvIGRvIHJlZidpbmcgb24gdGhlIGNoaWxkcmVuIGJlY2F1c2Ugd2UncmUgc3RlYWxpbmcg
dGhlbSBmcm9tCiAgICAgICAgICAgICAgICAgLy8gdGhlIG9yaWdpbmFsIGRpdmlzaW9uLgotICAg
ICAgICAgICAgICAgIE5vZGVJbmRleCBuZXdEaXZpc2lvbkluZGV4ID0gbV9pbnNlcnRpb25TZXQu
aW5zZXJ0Tm9kZSgKLSAgICAgICAgICAgICAgICAgICAgbV9pbmRleEluQmxvY2ssIERvbnRSZWZD
aGlsZHJlbiwgUmVmTm9kZSwgU3BlY0RvdWJsZSwgbV9ncmFwaFttX2NvbXBpbGVJbmRleF0pOwot
ICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIG1fZ3JhcGhbbV9jb21waWxlSW5kZXhd
LnNldE9wKERvdWJsZUFzSW50MzIpOwotICAgICAgICAgICAgICAgIG1fZ3JhcGhbbV9jb21waWxl
SW5kZXhdLmNoaWxkcmVuLmluaXRpYWxpemUoRWRnZShuZXdEaXZpc2lvbkluZGV4LCBEb3VibGVV
c2UpLCBFZGdlKCksIEVkZ2UoKSk7CisgICAgICAgICAgICAgICAgTm9kZSogbmV3RGl2aXNpb24g
PSBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAorICAgICAgICAgICAgICAgICAgICBtX2luZGV4
SW5CbG9jaywgRG9udFJlZkNoaWxkcmVuLCBSZWZOb2RlLCBTcGVjRG91YmxlLCAqbm9kZSk7CiAg
ICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgbm9kZS0+c2V0T3AoRG91YmxlQXNJbnQz
Mik7CisgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGRyZW4uaW5pdGlhbGl6ZShFZGdlKG5ld0Rp
dmlzaW9uLCBEb3VibGVVc2UpLCBFZGdlKCksIEVkZ2UoKSk7CiAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBmaXhEb3VibGVFZGdlKDApOwpAQCAtMzM4
LDggKzMyNSw4IEBAIHByaXZhdGU6CiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBj
YXNlIEFyaXRoQWJzOiB7Ci0gICAgICAgICAgICBpZiAobV9ncmFwaFtub2RlLmNoaWxkMSgpXS5z
aG91bGRTcGVjdWxhdGVJbnRlZ2VyRm9yQXJpdGhtZXRpYygpCi0gICAgICAgICAgICAgICAgJiYg
bm9kZS5jYW5TcGVjdWxhdGVJbnRlZ2VyKCkpCisgICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQx
KCktPnNob3VsZFNwZWN1bGF0ZUludGVnZXJGb3JBcml0aG1ldGljKCkKKyAgICAgICAgICAgICAg
ICAmJiBub2RlLT5jYW5TcGVjdWxhdGVJbnRlZ2VyKCkpCiAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICBmaXhEb3VibGVFZGdlKDApOwogICAgICAgICAgICAgYnJlYWs7CkBAIC0z
NTYsMTcgKzM0MywxNSBAQCBwcml2YXRlOgogICAgICAgICAgICAgRWRnZSBjaGlsZDIgPSBtX2dy
YXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpOwogICAgICAgICAgICAgRWRnZSBjaGlsZDMgPSBtX2dy
YXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpOwogCi0gICAgICAgICAgICBub2RlLnNldEFycmF5TW9k
ZSgKLSAgICAgICAgICAgICAgICBub2RlLmFycmF5TW9kZSgpLnJlZmluZSgKLSAgICAgICAgICAg
ICAgICAgICAgbV9ncmFwaFtjaGlsZDFdLnByZWRpY3Rpb24oKSwKLSAgICAgICAgICAgICAgICAg
ICAgbV9ncmFwaFtjaGlsZDJdLnByZWRpY3Rpb24oKSwKLSAgICAgICAgICAgICAgICAgICAgbV9n
cmFwaFtjaGlsZDNdLnByZWRpY3Rpb24oKSkpOworICAgICAgICAgICAgbm9kZS0+c2V0QXJyYXlN
b2RlKAorICAgICAgICAgICAgICAgIG5vZGUtPmFycmF5TW9kZSgpLnJlZmluZSgKKyAgICAgICAg
ICAgICAgICAgICAgY2hpbGQxLT5wcmVkaWN0aW9uKCksCisgICAgICAgICAgICAgICAgICAgIGNo
aWxkMi0+cHJlZGljdGlvbigpLAorICAgICAgICAgICAgICAgICAgICBjaGlsZDMtPnByZWRpY3Rp
b24oKSkpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBibGVzc0FycmF5T3BlcmF0aW9uKGNo
aWxkMSwgY2hpbGQyLCAzKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgTm9kZSogbm9kZVB0
ciA9ICZtX2dyYXBoW21fY29tcGlsZUluZGV4XTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAg
c3dpdGNoIChub2RlUHRyLT5hcnJheU1vZGUoKS5tb2RlRm9yUHV0KCkudHlwZSgpKSB7CisgICAg
ICAgICAgICBzd2l0Y2ggKG5vZGUtPmFycmF5TW9kZSgpLm1vZGVGb3JQdXQoKS50eXBlKCkpIHsK
ICAgICAgICAgICAgIGNhc2UgQXJyYXk6OkRvdWJsZToKICAgICAgICAgICAgICAgICBmaXhEb3Vi
bGVFZGdlKDIpOwogICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMzc3LDcgKzM2Miw3IEBAIHBy
aXZhdGU6CiAgICAgICAgICAgICBjYXNlIEFycmF5OjpVaW50OENsYW1wZWRBcnJheToKICAgICAg
ICAgICAgIGNhc2UgQXJyYXk6OlVpbnQxNkFycmF5OgogICAgICAgICAgICAgY2FzZSBBcnJheTo6
VWludDMyQXJyYXk6Ci0gICAgICAgICAgICAgICAgaWYgKCFtX2dyYXBoW2NoaWxkM10uc2hvdWxk
U3BlY3VsYXRlSW50ZWdlcigpKQorICAgICAgICAgICAgICAgIGlmICghY2hpbGQzLT5zaG91bGRT
cGVjdWxhdGVJbnRlZ2VyKCkpCiAgICAgICAgICAgICAgICAgICAgIGZpeERvdWJsZUVkZ2UoMik7
CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIEFycmF5OjpGbG9hdDMy
QXJyYXk6CkBAIC0zOTIsMTEgKzM3NywxMSBAQCBwcml2YXRlOgogICAgICAgICAgICAgCiAgICAg
ICAgIGNhc2UgTmV3QXJyYXk6IHsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1fZ3Jh
cGgudmFyQXJnTnVtQ2hpbGRyZW4obm9kZSk7IGktLTspIHsKLSAgICAgICAgICAgICAgICBub2Rl
LnNldEluZGV4aW5nVHlwZSgKKyAgICAgICAgICAgICAgICBub2RlLT5zZXRJbmRleGluZ1R5cGUo
CiAgICAgICAgICAgICAgICAgICAgIGxlYXN0VXBwZXJCb3VuZE9mSW5kZXhpbmdUeXBlQW5kVHlw
ZSgKLSAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUuaW5kZXhpbmdUeXBlKCksIG1fZ3JhcGhb
bV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCBpKV0ucHJlZGljdGlvbigpKSk7CisgICAgICAgICAg
ICAgICAgICAgICAgICBub2RlLT5pbmRleGluZ1R5cGUoKSwgbV9ncmFwaC52YXJBcmdDaGlsZChu
b2RlLCBpKS0+cHJlZGljdGlvbigpKSk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAo
bm9kZS5pbmRleGluZ1R5cGUoKSA9PSBBcnJheVdpdGhEb3VibGUpIHsKKyAgICAgICAgICAgIGlm
IChub2RlLT5pbmRleGluZ1R5cGUoKSA9PSBBcnJheVdpdGhEb3VibGUpIHsKICAgICAgICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2dyYXBoLnZhckFyZ051bUNoaWxkcmVuKG5vZGUpOyBp
LS07KQogICAgICAgICAgICAgICAgICAgICBmaXhEb3VibGVFZGdlKGkpOwogICAgICAgICAgICAg
fQpAQCAtNDA4LDE2ICszOTMsMTUgQEAgcHJpdmF0ZToKICAgICAgICAgfQogCiAjaWYgREZHX0VO
QUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQotICAgICAgICBOb2RlKiBub2RlUHRyID0g
Jm1fZ3JhcGhbbV9jb21waWxlSW5kZXhdOwotICAgICAgICBpZiAoIShub2RlUHRyLT5mbGFncygp
ICYgTm9kZUhhc1ZhckFyZ3MpKSB7CisgICAgICAgIGlmICghKG5vZGUtPmZsYWdzKCkgJiBOb2Rl
SGFzVmFyQXJncykpIHsKICAgICAgICAgICAgIGRhdGFMb2dGKCJuZXcgY2hpbGRyZW46ICIpOwot
ICAgICAgICAgICAgbm9kZVB0ci0+ZHVtcENoaWxkcmVuKFdURjo6ZGF0YUZpbGUoKSk7CisgICAg
ICAgICAgICBub2RlLT5kdW1wQ2hpbGRyZW4oV1RGOjpkYXRhRmlsZSgpKTsKICAgICAgICAgfQog
ICAgICAgICBkYXRhTG9nRigiXG4iKTsKICNlbmRpZgogICAgIH0KICAgICAKLSAgICBOb2RlSW5k
ZXggY2hlY2tBcnJheShBcnJheU1vZGUgYXJyYXlNb2RlLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4s
IE5vZGVJbmRleCBhcnJheSwgTm9kZUluZGV4IGluZGV4LCBib29sICgqc3RvcmFnZUNoZWNrKShj
b25zdCBBcnJheU1vZGUmKSA9IGNhbkNTRVN0b3JhZ2UsIGJvb2wgc2hvdWxkR2VuZXJhdGUgPSB0
cnVlKQorICAgIE5vZGUqIGNoZWNrQXJyYXkoQXJyYXlNb2RlIGFycmF5TW9kZSwgQ29kZU9yaWdp
biBjb2RlT3JpZ2luLCBOb2RlKiBhcnJheSwgTm9kZSogaW5kZXgsIGJvb2wgKCpzdG9yYWdlQ2hl
Y2spKGNvbnN0IEFycmF5TW9kZSYpID0gY2FuQ1NFU3RvcmFnZSwgYm9vbCBzaG91bGRHZW5lcmF0
ZSA9IHRydWUpCiAgICAgewogICAgICAgICBBU1NFUlQoYXJyYXlNb2RlLmlzU3BlY2lmaWMoKSk7
CiAgICAgICAgIApAQCAtNDI4LDExICs0MTIsMTEgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAg
ICBpZiAobV9pbmRleEluQmxvY2sgPiAwKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIElmIHRo
ZSBwcmV2aW91cyBub2RlIHdhcyBhIENoZWNrU3RydWN0dXJlIGluc2VydGVkIGJlY2F1c2Ugb2Yg
c3R1ZmYKICAgICAgICAgICAgICAgICAgICAgLy8gdGhhdCB0aGUgYXJyYXkgcHJvZmlsZSB0b2xk
IHVzLCB0aGVuIHJlbW92ZSBpdC4KLSAgICAgICAgICAgICAgICAgICAgTm9kZSYgcHJldmlvdXNO
b2RlID0gbV9ncmFwaFttX2Jsb2NrLT5hdChtX2luZGV4SW5CbG9jayAtIDEpXTsKLSAgICAgICAg
ICAgICAgICAgICAgaWYgKHByZXZpb3VzTm9kZS5vcCgpID09IENoZWNrU3RydWN0dXJlCi0gICAg
ICAgICAgICAgICAgICAgICAgICAmJiBwcmV2aW91c05vZGUuY2hpbGQxKCkgPT0gYXJyYXkKLSAg
ICAgICAgICAgICAgICAgICAgICAgICYmIHByZXZpb3VzTm9kZS5jb2RlT3JpZ2luID09IGNvZGVP
cmlnaW4pCi0gICAgICAgICAgICAgICAgICAgICAgICBwcmV2aW91c05vZGUuc2V0T3BBbmREZWZh
dWx0RmxhZ3MoUGhhbnRvbSk7CisgICAgICAgICAgICAgICAgICAgIE5vZGUqIHByZXZpb3VzTm9k
ZSA9IG1fYmxvY2stPmF0KG1faW5kZXhJbkJsb2NrIC0gMSk7CisgICAgICAgICAgICAgICAgICAg
IGlmIChwcmV2aW91c05vZGUtPm9wKCkgPT0gQ2hlY2tTdHJ1Y3R1cmUKKyAgICAgICAgICAgICAg
ICAgICAgICAgICYmIHByZXZpb3VzTm9kZS0+Y2hpbGQxKCkgPT0gYXJyYXkKKyAgICAgICAgICAg
ICAgICAgICAgICAgICYmIHByZXZpb3VzTm9kZS0+Y29kZU9yaWdpbiA9PSBjb2RlT3JpZ2luKQor
ICAgICAgICAgICAgICAgICAgICAgICAgcHJldmlvdXNOb2RlLT5zZXRPcEFuZERlZmF1bHRGbGFn
cyhQaGFudG9tKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCiAgICAgICAg
ICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKQEAgLTQ1Niw3ICs0NDAsNyBAQCBw
cml2YXRlOgogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBpZiAoIXN0b3JhZ2VDaGVjayhh
cnJheU1vZGUpKQotICAgICAgICAgICAgcmV0dXJuIE5vTm9kZTsKKyAgICAgICAgICAgIHJldHVy
biAwOwogICAgICAgICAKICAgICAgICAgaWYgKGFycmF5TW9kZS51c2VzQnV0dGVyZmx5KCkpIHsK
ICAgICAgICAgICAgIHJldHVybiBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKApAQCAtNDc3LDE0
ICs0NjEsMTQgQEAgcHJpdmF0ZToKICAgICB7CiAgICAgICAgIGlmIChtX2dyYXBoLm1fZml4cG9p
bnRTdGF0ZSA+IEJlZm9yZUZpeHBvaW50KQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAg
ICAgCi0gICAgICAgIE5vZGUqIG5vZGVQdHIgPSAmbV9ncmFwaFttX2NvbXBpbGVJbmRleF07CiAg
ICAgICAgIAotICAgICAgICBzd2l0Y2ggKG5vZGVQdHItPmFycmF5TW9kZSgpLnR5cGUoKSkgewor
ICAgICAgICBOb2RlKiBub2RlID0gbV9jdXJyZW50Tm9kZTsKKyAgICAgICAgCisgICAgICAgIHN3
aXRjaCAobm9kZS0+YXJyYXlNb2RlKCkudHlwZSgpKSB7CiAgICAgICAgIGNhc2UgQXJyYXk6OkZv
cmNlRXhpdDogewogICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKICAgICAg
ICAgICAgICAgICBtX2luZGV4SW5CbG9jaywgRG9udFJlZkNoaWxkcmVuLCBEb250UmVmTm9kZSwg
U3BlY05vbmUsIEZvcmNlT1NSRXhpdCwKLSAgICAgICAgICAgICAgICBub2RlUHRyLT5jb2RlT3Jp
Z2luKTsKKyAgICAgICAgICAgICAgICBub2RlLT5jb2RlT3JpZ2luKTsKICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgfQogICAgICAgICAgICAgCkBAIC00OTcsMjYgKzQ4MSwyNiBAQCBwcml2
YXRlOgogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgCiAgICAgICAgIGRlZmF1bHQ6
IHsKLSAgICAgICAgICAgIE5vZGVJbmRleCBzdG9yYWdlID0gY2hlY2tBcnJheShub2RlUHRyLT5h
cnJheU1vZGUoKSwgbm9kZVB0ci0+Y29kZU9yaWdpbiwgYmFzZS5pbmRleCgpLCBpbmRleC5pbmRl
eFVuY2hlY2tlZCgpKTsKLSAgICAgICAgICAgIGlmIChzdG9yYWdlID09IE5vTm9kZSkKKyAgICAg
ICAgICAgIE5vZGUqIHN0b3JhZ2UgPSBjaGVja0FycmF5KG5vZGUtPmFycmF5TW9kZSgpLCBub2Rl
LT5jb2RlT3JpZ2luLCBiYXNlLm5vZGUoKSwgaW5kZXgubm9kZSgpKTsKKyAgICAgICAgICAgIGlm
ICghc3RvcmFnZSkKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAKLSAgICAg
ICAgICAgIG1fZ3JhcGguY2hpbGQobV9ncmFwaFttX2NvbXBpbGVJbmRleF0sIHN0b3JhZ2VDaGls
ZElkeCkgPSBFZGdlKHN0b3JhZ2UpOworICAgICAgICAgICAgbV9ncmFwaC5jaGlsZChub2RlLCBz
dG9yYWdlQ2hpbGRJZHgpID0gRWRnZShzdG9yYWdlKTsKICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgfSB9CiAgICAgfQogICAgIAogICAgIHZvaWQgZml4SW50RWRnZShFZGdlJiBlZGdlKQog
ICAgIHsKLSAgICAgICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhbZWRnZV07Ci0gICAgICAgIGlmIChu
b2RlLm9wKCkgIT0gVmFsdWVUb0ludDMyKQorICAgICAgICBOb2RlKiBub2RlID0gZWRnZS5ub2Rl
KCk7CisgICAgICAgIGlmIChub2RlLT5vcCgpICE9IFZhbHVlVG9JbnQzMikKICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgCi0gICAgICAgIGlmICghbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5z
aG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpCisgICAgICAgIGlmICghbm9kZS0+Y2hpbGQxKCktPnNo
b3VsZFNwZWN1bGF0ZUludGVnZXIoKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgCiAg
ICAgICAgIEVkZ2Ugb2xkRWRnZSA9IGVkZ2U7Ci0gICAgICAgIEVkZ2UgbmV3RWRnZSA9IG5vZGUu
Y2hpbGQxKCk7CisgICAgICAgIEVkZ2UgbmV3RWRnZSA9IG5vZGUtPmNoaWxkMSgpOwogICAgICAg
ICAKICAgICAgICAgbV9ncmFwaC5yZWYobmV3RWRnZSk7CiAgICAgICAgIG1fZ3JhcGguZGVyZWYo
b2xkRWRnZSk7CkBAIC01MjYsMTAgKzUxMCwxMCBAQCBwcml2YXRlOgogICAgIAogICAgIHZvaWQg
Zml4RG91YmxlRWRnZSh1bnNpZ25lZCBjaGlsZEluZGV4KQogICAgIHsKLSAgICAgICAgTm9kZSYg
c291cmNlID0gbV9ncmFwaFttX2NvbXBpbGVJbmRleF07CisgICAgICAgIE5vZGUqIHNvdXJjZSA9
IG1fY3VycmVudE5vZGU7CiAgICAgICAgIEVkZ2UmIGVkZ2UgPSBtX2dyYXBoLmNoaWxkKHNvdXJj
ZSwgY2hpbGRJbmRleCk7CiAgICAgICAgIAotICAgICAgICBpZiAobV9ncmFwaFtlZGdlXS5wcmVk
aWN0aW9uKCkgJiBTcGVjRG91YmxlKSB7CisgICAgICAgIGlmIChlZGdlLT5wcmVkaWN0aW9uKCkg
JiBTcGVjRG91YmxlKSB7CiAgICAgICAgICAgICBlZGdlLnNldFVzZUtpbmQoRG91YmxlVXNlKTsK
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQpAQCAtNTM5LDIzICs1MjMsMjIgQEAgcHJp
dmF0ZToKIAogICAgIHZvaWQgaW5qZWN0SW50MzJUb0RvdWJsZU5vZGUodW5zaWduZWQgY2hpbGRJ
bmRleCkKICAgICB7Ci0gICAgICAgIE5vZGVJbmRleCByZXN1bHRJbmRleCA9IG1faW5zZXJ0aW9u
U2V0Lmluc2VydE5vZGUoCisgICAgICAgIE5vZGUqIHJlc3VsdCA9IG1faW5zZXJ0aW9uU2V0Lmlu
c2VydE5vZGUoCiAgICAgICAgICAgICBtX2luZGV4SW5CbG9jaywgRG9udFJlZkNoaWxkcmVuLCBS
ZWZOb2RlLCBTcGVjRG91YmxlLCBJbnQzMlRvRG91YmxlLAotICAgICAgICAgICAgbV9ncmFwaFtt
X2NvbXBpbGVJbmRleF0uY29kZU9yaWdpbiwKLSAgICAgICAgICAgIG1fZ3JhcGguY2hpbGQobV9n
cmFwaFttX2NvbXBpbGVJbmRleF0sIGNoaWxkSW5kZXgpLmluZGV4KCkpOworICAgICAgICAgICAg
bV9jdXJyZW50Tm9kZS0+Y29kZU9yaWdpbiwgbV9ncmFwaC5jaGlsZChtX2N1cnJlbnROb2RlLCBj
aGlsZEluZGV4KS5ub2RlKCkpOwogICAgICAgICAKICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BB
R0FUSU9OX1ZFUkJPU0UpCiAgICAgICAgIGRhdGFMb2dGKAogICAgICAgICAgICAgIihyZXBsYWNp
bmcgQCV1LT5AJXUgd2l0aCBAJXUtPkAldSkgIiwKLSAgICAgICAgICAgIG1fY29tcGlsZUluZGV4
LCBtX2dyYXBoLmNoaWxkKG1fZ3JhcGhbbV9jb21waWxlSW5kZXhdLCBjaGlsZEluZGV4KS5pbmRl
eCgpLCBtX2NvbXBpbGVJbmRleCwgcmVzdWx0SW5kZXgpOworICAgICAgICAgICAgbV9jdXJyZW50
Tm9kZS0+aW5kZXgoKSwgbV9ncmFwaC5jaGlsZChtX2N1cnJlbnROb2RlLCBjaGlsZEluZGV4KS0+
aW5kZXgoKSwgbV9jdXJyZW50Tm9kZS0+aW5kZXgoKSwgcmVzdWx0LT5pbmRleCgpKTsKICNlbmRp
ZgogCi0gICAgICAgIG1fZ3JhcGguY2hpbGQobV9ncmFwaFttX2NvbXBpbGVJbmRleF0sIGNoaWxk
SW5kZXgpID0gRWRnZShyZXN1bHRJbmRleCwgRG91YmxlVXNlKTsKKyAgICAgICAgbV9ncmFwaC5j
aGlsZChtX2N1cnJlbnROb2RlLCBjaGlsZEluZGV4KSA9IEVkZ2UocmVzdWx0LCBEb3VibGVVc2Up
OwogICAgIH0KIAogICAgIEJhc2ljQmxvY2sqIG1fYmxvY2s7CiAgICAgdW5zaWduZWQgbV9pbmRl
eEluQmxvY2s7Ci0gICAgTm9kZUluZGV4IG1fY29tcGlsZUluZGV4OworICAgIE5vZGUqIG1fY3Vy
cmVudE5vZGU7CiAgICAgSW5zZXJ0aW9uU2V0IG1faW5zZXJ0aW9uU2V0OwogfTsKICAgICAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR2VuZXJhdGlvbkluZm8uaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dlbmVyYXRpb25JbmZvLmgJKHJl
dmlzaW9uIDE0MTA1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR2VuZXJhdGlv
bkluZm8uaAkod29ya2luZyBjb3B5KQpAQCAtNDgsNyArNDgsNyBAQCBuYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIERGRyB7CiBjbGFzcyBHZW5lcmF0aW9uSW5mbyB7CiBwdWJsaWM6CiAgICAgR2Vu
ZXJhdGlvbkluZm8oKQotICAgICAgICA6IG1fbm9kZUluZGV4KE5vTm9kZSkKKyAgICAgICAgOiBt
X25vZGUoMCkKICAgICAgICAgLCBtX3VzZUNvdW50KDApCiAgICAgICAgICwgbV9yZWdpc3RlckZv
cm1hdChEYXRhRm9ybWF0Tm9uZSkKICAgICAgICAgLCBtX3NwaWxsRm9ybWF0KERhdGFGb3JtYXRO
b25lKQpAQCAtNTgsOSArNTgsOSBAQCBwdWJsaWM6CiAgICAgewogICAgIH0KIAotICAgIHZvaWQg
aW5pdENvbnN0YW50KE5vZGVJbmRleCBub2RlSW5kZXgsIHVpbnQzMl90IHVzZUNvdW50KQorICAg
IHZvaWQgaW5pdENvbnN0YW50KE5vZGUqIG5vZGUsIHVpbnQzMl90IHVzZUNvdW50KQogICAgIHsK
LSAgICAgICAgbV9ub2RlSW5kZXggPSBub2RlSW5kZXg7CisgICAgICAgIG1fbm9kZSA9IG5vZGU7
CiAgICAgICAgIG1fdXNlQ291bnQgPSB1c2VDb3VudDsKICAgICAgICAgbV9yZWdpc3RlckZvcm1h
dCA9IERhdGFGb3JtYXROb25lOwogICAgICAgICBtX3NwaWxsRm9ybWF0ID0gRGF0YUZvcm1hdE5v
bmU7CkBAIC02OSw5ICs2OSw5IEBAIHB1YmxpYzoKICAgICAgICAgbV9pc0NvbnN0YW50ID0gdHJ1
ZTsKICAgICAgICAgQVNTRVJUKG1fdXNlQ291bnQpOwogICAgIH0KLSAgICB2b2lkIGluaXRJbnRl
Z2VyKE5vZGVJbmRleCBub2RlSW5kZXgsIHVpbnQzMl90IHVzZUNvdW50LCBHUFJSZWcgZ3ByKQor
ICAgIHZvaWQgaW5pdEludGVnZXIoTm9kZSogbm9kZSwgdWludDMyX3QgdXNlQ291bnQsIEdQUlJl
ZyBncHIpCiAgICAgewotICAgICAgICBtX25vZGVJbmRleCA9IG5vZGVJbmRleDsKKyAgICAgICAg
bV9ub2RlID0gbm9kZTsKICAgICAgICAgbV91c2VDb3VudCA9IHVzZUNvdW50OwogICAgICAgICBt
X3JlZ2lzdGVyRm9ybWF0ID0gRGF0YUZvcm1hdEludGVnZXI7CiAgICAgICAgIG1fc3BpbGxGb3Jt
YXQgPSBEYXRhRm9ybWF0Tm9uZTsKQEAgLTgyLDExICs4MiwxMSBAQCBwdWJsaWM6CiAgICAgICAg
IEFTU0VSVChtX3VzZUNvdW50KTsKICAgICB9CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICB2b2lk
IGluaXRKU1ZhbHVlKE5vZGVJbmRleCBub2RlSW5kZXgsIHVpbnQzMl90IHVzZUNvdW50LCBHUFJS
ZWcgZ3ByLCBEYXRhRm9ybWF0IGZvcm1hdCA9IERhdGFGb3JtYXRKUykKKyAgICB2b2lkIGluaXRK
U1ZhbHVlKE5vZGUqIG5vZGUsIHVpbnQzMl90IHVzZUNvdW50LCBHUFJSZWcgZ3ByLCBEYXRhRm9y
bWF0IGZvcm1hdCA9IERhdGFGb3JtYXRKUykKICAgICB7CiAgICAgICAgIEFTU0VSVChmb3JtYXQg
JiBEYXRhRm9ybWF0SlMpOwogCi0gICAgICAgIG1fbm9kZUluZGV4ID0gbm9kZUluZGV4OworICAg
ICAgICBtX25vZGUgPSBub2RlOwogICAgICAgICBtX3VzZUNvdW50ID0gdXNlQ291bnQ7CiAgICAg
ICAgIG1fcmVnaXN0ZXJGb3JtYXQgPSBmb3JtYXQ7CiAgICAgICAgIG1fc3BpbGxGb3JtYXQgPSBE
YXRhRm9ybWF0Tm9uZTsKQEAgLTk3LDExICs5NywxMSBAQCBwdWJsaWM6CiAgICAgICAgIEFTU0VS
VChtX3VzZUNvdW50KTsKICAgICB9CiAjZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAgIHZvaWQg
aW5pdEpTVmFsdWUoTm9kZUluZGV4IG5vZGVJbmRleCwgdWludDMyX3QgdXNlQ291bnQsIEdQUlJl
ZyB0YWdHUFIsIEdQUlJlZyBwYXlsb2FkR1BSLCBEYXRhRm9ybWF0IGZvcm1hdCA9IERhdGFGb3Jt
YXRKUykKKyAgICB2b2lkIGluaXRKU1ZhbHVlKE5vZGUqIG5vZGUsIHVpbnQzMl90IHVzZUNvdW50
LCBHUFJSZWcgdGFnR1BSLCBHUFJSZWcgcGF5bG9hZEdQUiwgRGF0YUZvcm1hdCBmb3JtYXQgPSBE
YXRhRm9ybWF0SlMpCiAgICAgewogICAgICAgICBBU1NFUlQoZm9ybWF0ICYgRGF0YUZvcm1hdEpT
KTsKIAotICAgICAgICBtX25vZGVJbmRleCA9IG5vZGVJbmRleDsKKyAgICAgICAgbV9ub2RlID0g
bm9kZTsKICAgICAgICAgbV91c2VDb3VudCA9IHVzZUNvdW50OwogICAgICAgICBtX3JlZ2lzdGVy
Rm9ybWF0ID0gZm9ybWF0OwogICAgICAgICBtX3NwaWxsRm9ybWF0ID0gRGF0YUZvcm1hdE5vbmU7
CkBAIC0xMTMsOSArMTEzLDkgQEAgcHVibGljOgogICAgICAgICBBU1NFUlQobV91c2VDb3VudCk7
CiAgICAgfQogI2VuZGlmCi0gICAgdm9pZCBpbml0Q2VsbChOb2RlSW5kZXggbm9kZUluZGV4LCB1
aW50MzJfdCB1c2VDb3VudCwgR1BSUmVnIGdwcikKKyAgICB2b2lkIGluaXRDZWxsKE5vZGUqIG5v
ZGUsIHVpbnQzMl90IHVzZUNvdW50LCBHUFJSZWcgZ3ByKQogICAgIHsKLSAgICAgICAgbV9ub2Rl
SW5kZXggPSBub2RlSW5kZXg7CisgICAgICAgIG1fbm9kZSA9IG5vZGU7CiAgICAgICAgIG1fdXNl
Q291bnQgPSB1c2VDb3VudDsKICAgICAgICAgbV9yZWdpc3RlckZvcm1hdCA9IERhdGFGb3JtYXRD
ZWxsOwogICAgICAgICBtX3NwaWxsRm9ybWF0ID0gRGF0YUZvcm1hdE5vbmU7CkBAIC0xMjUsOSAr
MTI1LDkgQEAgcHVibGljOgogICAgICAgICBtX2lzQ29uc3RhbnQgPSBmYWxzZTsKICAgICAgICAg
QVNTRVJUKG1fdXNlQ291bnQpOwogICAgIH0KLSAgICB2b2lkIGluaXRCb29sZWFuKE5vZGVJbmRl
eCBub2RlSW5kZXgsIHVpbnQzMl90IHVzZUNvdW50LCBHUFJSZWcgZ3ByKQorICAgIHZvaWQgaW5p
dEJvb2xlYW4oTm9kZSogbm9kZSwgdWludDMyX3QgdXNlQ291bnQsIEdQUlJlZyBncHIpCiAgICAg
ewotICAgICAgICBtX25vZGVJbmRleCA9IG5vZGVJbmRleDsKKyAgICAgICAgbV9ub2RlID0gbm9k
ZTsKICAgICAgICAgbV91c2VDb3VudCA9IHVzZUNvdW50OwogICAgICAgICBtX3JlZ2lzdGVyRm9y
bWF0ID0gRGF0YUZvcm1hdEJvb2xlYW47CiAgICAgICAgIG1fc3BpbGxGb3JtYXQgPSBEYXRhRm9y
bWF0Tm9uZTsKQEAgLTEzNywxMCArMTM3LDEwIEBAIHB1YmxpYzoKICAgICAgICAgbV9pc0NvbnN0
YW50ID0gZmFsc2U7CiAgICAgICAgIEFTU0VSVChtX3VzZUNvdW50KTsKICAgICB9Ci0gICAgdm9p
ZCBpbml0RG91YmxlKE5vZGVJbmRleCBub2RlSW5kZXgsIHVpbnQzMl90IHVzZUNvdW50LCBGUFJS
ZWcgZnByKQorICAgIHZvaWQgaW5pdERvdWJsZShOb2RlKiBub2RlLCB1aW50MzJfdCB1c2VDb3Vu
dCwgRlBSUmVnIGZwcikKICAgICB7CiAgICAgICAgIEFTU0VSVChmcHIgIT0gSW52YWxpZEZQUlJl
Zyk7Ci0gICAgICAgIG1fbm9kZUluZGV4ID0gbm9kZUluZGV4OworICAgICAgICBtX25vZGUgPSBu
b2RlOwogICAgICAgICBtX3VzZUNvdW50ID0gdXNlQ291bnQ7CiAgICAgICAgIG1fcmVnaXN0ZXJG
b3JtYXQgPSBEYXRhRm9ybWF0RG91YmxlOwogICAgICAgICBtX3NwaWxsRm9ybWF0ID0gRGF0YUZv
cm1hdE5vbmU7CkBAIC0xNTAsOSArMTUwLDkgQEAgcHVibGljOgogICAgICAgICBtX2lzQ29uc3Rh
bnQgPSBmYWxzZTsKICAgICAgICAgQVNTRVJUKG1fdXNlQ291bnQpOwogICAgIH0KLSAgICB2b2lk
IGluaXRTdG9yYWdlKE5vZGVJbmRleCBub2RlSW5kZXgsIHVpbnQzMl90IHVzZUNvdW50LCBHUFJS
ZWcgZ3ByKQorICAgIHZvaWQgaW5pdFN0b3JhZ2UoTm9kZSogbm9kZSwgdWludDMyX3QgdXNlQ291
bnQsIEdQUlJlZyBncHIpCiAgICAgewotICAgICAgICBtX25vZGVJbmRleCA9IG5vZGVJbmRleDsK
KyAgICAgICAgbV9ub2RlID0gbm9kZTsKICAgICAgICAgbV91c2VDb3VudCA9IHVzZUNvdW50Owog
ICAgICAgICBtX3JlZ2lzdGVyRm9ybWF0ID0gRGF0YUZvcm1hdFN0b3JhZ2U7CiAgICAgICAgIG1f
c3BpbGxGb3JtYXQgPSBEYXRhRm9ybWF0Tm9uZTsKQEAgLTE2MywxNCArMTYzLDE0IEBAIHB1Ymxp
YzoKICAgICAgICAgQVNTRVJUKG1fdXNlQ291bnQpOwogICAgIH0KIAotICAgIC8vIEdldCB0aGUg
aW5kZXggb2YgdGhlIG5vZGUgdGhhdCBwcm9kdWNlZCB0aGlzIHZhbHVlLgotICAgIE5vZGVJbmRl
eCBub2RlSW5kZXgoKSB7IHJldHVybiBtX25vZGVJbmRleDsgfQorICAgIC8vIEdldCB0aGUgbm9k
ZSB0aGF0IHByb2R1Y2VkIHRoaXMgdmFsdWUuCisgICAgTm9kZSogbm9kZSgpIHsgcmV0dXJuIG1f
bm9kZTsgfQogICAgIAotICAgIHZvaWQgbm90aWNlT1NSQmlydGgoVmFyaWFibGVFdmVudFN0cmVh
bSYgc3RyZWFtLCBOb2RlSW5kZXggbm9kZUluZGV4LCBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJl
Z2lzdGVyKQorICAgIHZvaWQgbm90aWNlT1NSQmlydGgoVmFyaWFibGVFdmVudFN0cmVhbSYgc3Ry
ZWFtLCBOb2RlKiBub2RlLCBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyKQogICAgIHsK
ICAgICAgICAgaWYgKG1faXNDb25zdGFudCkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
aWYgKG1fbm9kZUluZGV4ICE9IG5vZGVJbmRleCkKKyAgICAgICAgaWYgKG1fbm9kZSAhPSBub2Rl
KQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBpZiAoIWFsaXZlKCkpCiAgICAgICAgICAg
ICByZXR1cm47CkBAIC0xOTQsOCArMTk0LDggQEAgcHVibGljOgogICAgICAgICBib29sIHJlc3Vs
dCA9ICEtLW1fdXNlQ291bnQ7CiAgICAgICAgIAogICAgICAgICBpZiAocmVzdWx0ICYmIG1fYm9y
bkZvck9TUikgewotICAgICAgICAgICAgQVNTRVJUKG1fbm9kZUluZGV4ICE9IE5vTm9kZSk7Ci0g
ICAgICAgICAgICBzdHJlYW0uYXBwZW5kQW5kTG9nKFZhcmlhYmxlRXZlbnQ6OmRlYXRoKE1pbmlm
aWVkSUQobV9ub2RlSW5kZXgpKSk7CisgICAgICAgICAgICBBU1NFUlQobV9ub2RlKTsKKyAgICAg
ICAgICAgIHN0cmVhbS5hcHBlbmRBbmRMb2coVmFyaWFibGVFdmVudDo6ZGVhdGgoTWluaWZpZWRJ
RChtX25vZGUpKSk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIHJldHVybiByZXN1bHQ7
CkBAIC0zODIsMjUgKzM4MiwyNSBAQCBwcml2YXRlOgogICAgICAgICBBU1NFUlQobV9ib3JuRm9y
T1NSKTsKICAgICAgICAgCiAgICAgICAgIGlmIChtX3JlZ2lzdGVyRm9ybWF0ID09IERhdGFGb3Jt
YXREb3VibGUpIHsKLSAgICAgICAgICAgIHN0cmVhbS5hcHBlbmRBbmRMb2coVmFyaWFibGVFdmVu
dDo6ZmlsbEZQUihraW5kLCBNaW5pZmllZElEKG1fbm9kZUluZGV4KSwgdS5mcHIpKTsKKyAgICAg
ICAgICAgIHN0cmVhbS5hcHBlbmRBbmRMb2coVmFyaWFibGVFdmVudDo6ZmlsbEZQUihraW5kLCBN
aW5pZmllZElEKG1fbm9kZSksIHUuZnByKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
IH0KICNpZiBVU0UoSlNWQUxVRTMyXzY0KQogICAgICAgICBpZiAobV9yZWdpc3RlckZvcm1hdCAm
IERhdGFGb3JtYXRKUykgewotICAgICAgICAgICAgc3RyZWFtLmFwcGVuZEFuZExvZyhWYXJpYWJs
ZUV2ZW50OjpmaWxsUGFpcihraW5kLCBNaW5pZmllZElEKG1fbm9kZUluZGV4KSwgdS52LnRhZ0dQ
UiwgdS52LnBheWxvYWRHUFIpKTsKKyAgICAgICAgICAgIHN0cmVhbS5hcHBlbmRBbmRMb2coVmFy
aWFibGVFdmVudDo6ZmlsbFBhaXIoa2luZCwgTWluaWZpZWRJRChtX25vZGUpLCB1LnYudGFnR1BS
LCB1LnYucGF5bG9hZEdQUikpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAjZW5k
aWYKLSAgICAgICAgc3RyZWFtLmFwcGVuZEFuZExvZyhWYXJpYWJsZUV2ZW50OjpmaWxsR1BSKGtp
bmQsIE1pbmlmaWVkSUQobV9ub2RlSW5kZXgpLCB1LmdwciwgbV9yZWdpc3RlckZvcm1hdCkpOwor
ICAgICAgICBzdHJlYW0uYXBwZW5kQW5kTG9nKFZhcmlhYmxlRXZlbnQ6OmZpbGxHUFIoa2luZCwg
TWluaWZpZWRJRChtX25vZGUpLCB1LmdwciwgbV9yZWdpc3RlckZvcm1hdCkpOwogICAgIH0KICAg
ICAKICAgICB2b2lkIGFwcGVuZFNwaWxsKFZhcmlhYmxlRXZlbnRLaW5kIGtpbmQsIFZhcmlhYmxl
RXZlbnRTdHJlYW0mIHN0cmVhbSwgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlcikKICAg
ICB7Ci0gICAgICAgIHN0cmVhbS5hcHBlbmRBbmRMb2coVmFyaWFibGVFdmVudDo6c3BpbGwoa2lu
ZCwgTWluaWZpZWRJRChtX25vZGVJbmRleCksIHZpcnR1YWxSZWdpc3RlciwgbV9zcGlsbEZvcm1h
dCkpOworICAgICAgICBzdHJlYW0uYXBwZW5kQW5kTG9nKFZhcmlhYmxlRXZlbnQ6OnNwaWxsKGtp
bmQsIE1pbmlmaWVkSUQobV9ub2RlKSwgdmlydHVhbFJlZ2lzdGVyLCBtX3NwaWxsRm9ybWF0KSk7
CiAgICAgfQogICAgIAotICAgIC8vIFRoZSBpbmRleCBvZiB0aGUgbm9kZSB3aG9zZSByZXN1bHQg
aXMgc3RvcmVkIGluIHRoaXMgdmlydHVhbCByZWdpc3Rlci4KLSAgICBOb2RlSW5kZXggbV9ub2Rl
SW5kZXg7CisgICAgLy8gVGhlIG5vZGUgd2hvc2UgcmVzdWx0IGlzIHN0b3JlZCBpbiB0aGlzIHZp
cnR1YWwgcmVnaXN0ZXIuCisgICAgTm9kZSogbV9ub2RlOwogICAgIHVpbnQzMl90IG1fdXNlQ291
bnQ7CiAgICAgRGF0YUZvcm1hdCBtX3JlZ2lzdGVyRm9ybWF0OwogICAgIERhdGFGb3JtYXQgbV9z
cGlsbEZvcm1hdDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCShy
ZXZpc2lvbiAxNDEwNTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjgsNyArMjgsOSBAQAogCiAjaW5jbHVkZSAiQ29kZUJsb2Nr
LmgiCiAjaW5jbHVkZSAiREZHVmFyaWFibGVBY2Nlc3NEYXRhRHVtcC5oIgorI2luY2x1ZGUgIkZ1
bmN0aW9uRXhlY3V0YWJsZUR1bXAuaCIKICNpbmNsdWRlICJPcGVyYXRpb25zLmgiCisjaW5jbHVk
ZSA8d3RmL0NvbW1hUHJpbnRlci5oPgogCiAjaWYgRU5BQkxFKERGR19KSVQpCiAKQEAgLTQ2LDYg
KzQ4LDcgQEAgR3JhcGg6OkdyYXBoKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgQwogICAgICwg
bV9jb2RlQmxvY2soY29kZUJsb2NrKQogICAgICwgbV9jb21waWxhdGlvbihnbG9iYWxEYXRhLm1f
cGVyQnl0ZWNvZGVQcm9maWxlciA/IGdsb2JhbERhdGEubV9wZXJCeXRlY29kZVByb2ZpbGVyLT5u
ZXdDb21waWxhdGlvbihjb2RlQmxvY2ssIFByb2ZpbGVyOjpERkcpIDogMCkKICAgICAsIG1fcHJv
ZmlsZWRCbG9jayhjb2RlQmxvY2stPmFsdGVybmF0aXZlKCkpCisgICAgLCBtX2FsbG9jYXRvcihn
bG9iYWxEYXRhLm1fZGZnU3RhdGUtPm1fYWxsb2NhdG9yKQogICAgICwgbV9oYXNBcmd1bWVudHMo
ZmFsc2UpCiAgICAgLCBtX29zckVudHJ5Qnl0ZWNvZGVJbmRleChvc3JFbnRyeUJ5dGVjb2RlSW5k
ZXgpCiAgICAgLCBtX211c3RIYW5kbGVWYWx1ZXMobXVzdEhhbmRsZVZhbHVlcykKQEAgLTU0LDYg
KzU3LDExIEBAIEdyYXBoOjpHcmFwaChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEMKICAgICBB
U1NFUlQobV9wcm9maWxlZEJsb2NrKTsKIH0KIAorR3JhcGg6On5HcmFwaCgpCit7CisgICAgbV9h
bGxvY2F0b3IuZnJlZUFsbCgpOworfQorCiBjb25zdCBjaGFyICpHcmFwaDo6b3BOYW1lKE5vZGVU
eXBlIG9wKQogewogICAgIHJldHVybiBkZmdPcE5hbWVzW29wXTsKQEAgLTY1LDE4ICs3MywxNiBA
QCBzdGF0aWMgdm9pZCBwcmludFdoaXRlU3BhY2UoUHJpbnRTdHJlYW0mCiAgICAgICAgIG91dC5w
cmludCgiICIpOwogfQogCi1ib29sIEdyYXBoOjpkdW1wQ29kZU9yaWdpbihQcmludFN0cmVhbSYg
b3V0LCBjb25zdCBjaGFyKiBwcmVmaXgsIE5vZGVJbmRleCBwcmV2Tm9kZUluZGV4LCBOb2RlSW5k
ZXggbm9kZUluZGV4KQorYm9vbCBHcmFwaDo6ZHVtcENvZGVPcmlnaW4oUHJpbnRTdHJlYW0mIG91
dCwgY29uc3QgY2hhciogcHJlZml4LCBOb2RlKiBwcmV2aW91c05vZGUsIE5vZGUqIGN1cnJlbnRO
b2RlKQogewotICAgIGlmIChwcmV2Tm9kZUluZGV4ID09IE5vTm9kZSkKKyAgICBpZiAoIXByZXZp
b3VzTm9kZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAotICAgIE5vZGUmIGN1cnJlbnRO
b2RlID0gYXQobm9kZUluZGV4KTsKLSAgICBOb2RlJiBwcmV2aW91c05vZGUgPSBhdChwcmV2Tm9k
ZUluZGV4KTsKLSAgICBpZiAocHJldmlvdXNOb2RlLmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1l
ID09IGN1cnJlbnROb2RlLmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKQorICAgIGlmIChwcmV2
aW91c05vZGUtPmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lID09IGN1cnJlbnROb2RlLT5jb2Rl
T3JpZ2luLmlubGluZUNhbGxGcmFtZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAotICAg
IFZlY3RvcjxDb2RlT3JpZ2luPiBwcmV2aW91c0lubGluZVN0YWNrID0gcHJldmlvdXNOb2RlLmNv
ZGVPcmlnaW4uaW5saW5lU3RhY2soKTsKLSAgICBWZWN0b3I8Q29kZU9yaWdpbj4gY3VycmVudElu
bGluZVN0YWNrID0gY3VycmVudE5vZGUuY29kZU9yaWdpbi5pbmxpbmVTdGFjaygpOworICAgIFZl
Y3RvcjxDb2RlT3JpZ2luPiBwcmV2aW91c0lubGluZVN0YWNrID0gcHJldmlvdXNOb2RlLT5jb2Rl
T3JpZ2luLmlubGluZVN0YWNrKCk7CisgICAgVmVjdG9yPENvZGVPcmlnaW4+IGN1cnJlbnRJbmxp
bmVTdGFjayA9IGN1cnJlbnROb2RlLT5jb2RlT3JpZ2luLmlubGluZVN0YWNrKCk7CiAgICAgdW5z
aWduZWQgY29tbW9uU2l6ZSA9IHN0ZDo6bWluKHByZXZpb3VzSW5saW5lU3RhY2suc2l6ZSgpLCBj
dXJyZW50SW5saW5lU3RhY2suc2l6ZSgpKTsKICAgICB1bnNpZ25lZCBpbmRleE9mRGl2ZXJnZW5j
ZSA9IGNvbW1vblNpemU7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNvbW1vblNpemU7
ICsraSkgewpAQCAtMTA3LDMyICsxMTMsMjMgQEAgYm9vbCBHcmFwaDo6ZHVtcENvZGVPcmlnaW4o
UHJpbnRTdHJlYW0mIAogICAgIHJldHVybiBoYXNQcmludGVkOwogfQogCi1pbnQgR3JhcGg6OmFt
b3VudE9mTm9kZVdoaXRlU3BhY2UoTm9kZSYgbm9kZSkKK2ludCBHcmFwaDo6YW1vdW50T2ZOb2Rl
V2hpdGVTcGFjZShOb2RlKiBub2RlKQogewotICAgIHJldHVybiAobm9kZS5jb2RlT3JpZ2luLmlu
bGluZURlcHRoKCkgLSAxKSAqIDI7CisgICAgcmV0dXJuIChub2RlLT5jb2RlT3JpZ2luLmlubGlu
ZURlcHRoKCkgLSAxKSAqIDI7CiB9CiAKLXZvaWQgR3JhcGg6OnByaW50Tm9kZVdoaXRlU3BhY2Uo
UHJpbnRTdHJlYW0mIG91dCwgTm9kZSYgbm9kZSkKK3ZvaWQgR3JhcGg6OnByaW50Tm9kZVdoaXRl
U3BhY2UoUHJpbnRTdHJlYW0mIG91dCwgTm9kZSogbm9kZSkKIHsKICAgICBwcmludFdoaXRlU3Bh
Y2Uob3V0LCBhbW91bnRPZk5vZGVXaGl0ZVNwYWNlKG5vZGUpKTsKIH0KIAotdm9pZCBHcmFwaDo6
ZHVtcChQcmludFN0cmVhbSYgb3V0LCBFZGdlIGVkZ2UpCit2b2lkIEdyYXBoOjpkdW1wKFByaW50
U3RyZWFtJiBvdXQsIGNvbnN0IGNoYXIqIHByZWZpeCwgTm9kZSogbm9kZSkKIHsKLSAgICBvdXQu
cHJpbnQoCi0gICAgICAgIHVzZUtpbmRUb1N0cmluZyhlZGdlLnVzZUtpbmQoKSksCi0gICAgICAg
ICJAIiwgZWRnZS5pbmRleCgpLAotICAgICAgICBBYmJyZXZpYXRlZFNwZWN1bGF0aW9uRHVtcChh
dChlZGdlKS5wcmVkaWN0aW9uKCkpKTsKLX0KKyAgICBOb2RlVHlwZSBvcCA9IG5vZGUtPm9wKCk7
CiAKLXZvaWQgR3JhcGg6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCwgY29uc3QgY2hhciogcHJlZml4
LCBOb2RlSW5kZXggbm9kZUluZGV4KQotewotICAgIE5vZGUmIG5vZGUgPSBhdChub2RlSW5kZXgp
OwotICAgIE5vZGVUeXBlIG9wID0gbm9kZS5vcCgpOwotCi0gICAgdW5zaWduZWQgcmVmQ291bnQg
PSBub2RlLnJlZkNvdW50KCk7CisgICAgdW5zaWduZWQgcmVmQ291bnQgPSBub2RlLT5yZWZDb3Vu
dCgpOwogICAgIGJvb2wgc2tpcHBlZCA9ICFyZWZDb3VudDsKLSAgICBib29sIG11c3RHZW5lcmF0
ZSA9IG5vZGUubXVzdEdlbmVyYXRlKCk7CisgICAgYm9vbCBtdXN0R2VuZXJhdGUgPSBub2RlLT5t
dXN0R2VuZXJhdGUoKTsKICAgICBpZiAobXVzdEdlbmVyYXRlKQogICAgICAgICAtLXJlZkNvdW50
OwogCkBAIC0xNTYsMTUwICsxNTMsMTA2IEBAIHZvaWQgR3JhcGg6OmR1bXAoUHJpbnRTdHJlYW0m
IG91dCwgY29uc3QKICAgICAvLyAgICAgICAgICQjICAgLSB0aGUgaW5kZXggaW4gdGhlIENvZGVC
bG9jayBvZiBhIGNvbnN0YW50IHsgZm9yIG51bWVyaWMgY29uc3RhbnRzIHRoZSB2YWx1ZSBpcyBk
aXNwbGF5ZWQgfCBmb3IgaW50ZWdlcnMsIGluIGJvdGggZGVjaW1hbCBhbmQgaGV4IH0uCiAgICAg
Ly8gICAgICAgICBpZCMgIC0gdGhlIGluZGV4IGluIHRoZSBDb2RlQmxvY2sgb2YgYW4gaWRlbnRp
ZmllciB7IGlmIGNvZGVCbG9jayBpcyBwYXNzZWQgdG8gZHVtcCgpLCB0aGUgc3RyaW5nIHJlcHJl
c2VudGF0aW9uIGlzIGRpc3BsYXllZCB9LgogICAgIC8vICAgICAgICAgdmFyIyAtIHRoZSBpbmRl
eCBvZiBhIHZhciBvbiB0aGUgZ2xvYmFsIG9iamVjdCwgdXNlZCBieSBHZXRHbG9iYWxWYXIvUHV0
R2xvYmFsVmFyIG9wZXJhdGlvbnMuCi0gICAgb3V0LnByaW50ZigiJSA0ZDolczwlYyV1OiIsIChp
bnQpbm9kZUluZGV4LCBza2lwcGVkID8gIiAgc2tpcHBlZCAgIiA6ICIgICAgICAgICAgICIsIG11
c3RHZW5lcmF0ZSA/ICchJyA6ICcgJywgcmVmQ291bnQpOwotICAgIGlmIChub2RlLmhhc1Jlc3Vs
dCgpICYmICFza2lwcGVkICYmIG5vZGUuaGFzVmlydHVhbFJlZ2lzdGVyKCkpCi0gICAgICAgIG91
dC5wcmludChub2RlLnZpcnR1YWxSZWdpc3RlcigpKTsKKyAgICBvdXQucHJpbnRmKCIlIDRkOiVz
PCVjJXU6IiwgKGludClub2RlLT5pbmRleCgpLCBza2lwcGVkID8gIiAgc2tpcHBlZCAgIiA6ICIg
ICAgICAgICAgICIsIG11c3RHZW5lcmF0ZSA/ICchJyA6ICcgJywgcmVmQ291bnQpOworICAgIGlm
IChub2RlLT5oYXNSZXN1bHQoKSAmJiAhc2tpcHBlZCAmJiBub2RlLT5oYXNWaXJ0dWFsUmVnaXN0
ZXIoKSkKKyAgICAgICAgb3V0LnByaW50KG5vZGUtPnZpcnR1YWxSZWdpc3RlcigpKTsKICAgICBl
bHNlCiAgICAgICAgIG91dC5wcmludCgiLSIpOwogICAgIG91dC5wcmludCgiPlx0Iiwgb3BOYW1l
KG9wKSwgIigiKTsKLSAgICBib29sIGhhc1ByaW50ZWQgPSBmYWxzZTsKLSAgICBpZiAobm9kZS5m
bGFncygpICYgTm9kZUhhc1ZhckFyZ3MpIHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBjaGlsZElk
eCA9IG5vZGUuZmlyc3RDaGlsZCgpOyBjaGlsZElkeCA8IG5vZGUuZmlyc3RDaGlsZCgpICsgbm9k
ZS5udW1DaGlsZHJlbigpOyBjaGlsZElkeCsrKSB7Ci0gICAgICAgICAgICBpZiAoaGFzUHJpbnRl
ZCkKLSAgICAgICAgICAgICAgICBvdXQucHJpbnQoIiwgIik7Ci0gICAgICAgICAgICBlbHNlCi0g
ICAgICAgICAgICAgICAgaGFzUHJpbnRlZCA9IHRydWU7CisgICAgQ29tbWFQcmludGVyIGNvbW1h
OworICAgIGlmIChub2RlLT5mbGFncygpICYgTm9kZUhhc1ZhckFyZ3MpIHsKKyAgICAgICAgZm9y
ICh1bnNpZ25lZCBjaGlsZElkeCA9IG5vZGUtPmZpcnN0Q2hpbGQoKTsgY2hpbGRJZHggPCBub2Rl
LT5maXJzdENoaWxkKCkgKyBub2RlLT5udW1DaGlsZHJlbigpOyBjaGlsZElkeCsrKSB7CiAgICAg
ICAgICAgICBpZiAoIW1fdmFyQXJnQ2hpbGRyZW5bY2hpbGRJZHhdKQogICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwotICAgICAgICAgICAgZHVtcChvdXQsIG1fdmFyQXJnQ2hpbGRyZW5bY2hpbGRJ
ZHhdKTsKKyAgICAgICAgICAgIG91dC5wcmludChjb21tYSwgbV92YXJBcmdDaGlsZHJlbltjaGls
ZElkeF0pOwogICAgICAgICB9CiAgICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKCEhbm9kZS5jaGls
ZDEoKSkgewotICAgICAgICAgICAgZHVtcChvdXQsIG5vZGUuY2hpbGQxKCkpOwotICAgICAgICAg
ICAgaGFzUHJpbnRlZCA9IHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCEhbm9kZS5jaGls
ZDIoKSkgewotICAgICAgICAgICAgb3V0LnByaW50KCIsICIpOyAvLyBXaGV0aGVyIG9yIG5vdCB0
aGVyZSBpcyBhIGZpcnN0IGNoaWxkLCB3ZSBwcmludCBhIGNvbW1hIHRvIGVuc3VyZSB0aGF0IHdl
IHNlZSBhIGJsYW5rIGVudHJ5IGlmIHRoZXJlIHdhc24ndCBvbmUuCi0gICAgICAgICAgICBkdW1w
KG91dCwgbm9kZS5jaGlsZDIoKSk7Ci0gICAgICAgICAgICBoYXNQcmludGVkID0gdHJ1ZTsKLSAg
ICAgICAgfQotICAgICAgICBpZiAoISFub2RlLmNoaWxkMygpKSB7Ci0gICAgICAgICAgICBpZiAo
IW5vZGUuY2hpbGQxKCkgJiYgIW5vZGUuY2hpbGQyKCkpCi0gICAgICAgICAgICAgICAgb3V0LnBy
aW50KCIsICIpOyAvLyBJZiB0aGUgdGhpcmQgY2hpbGQgaXMgdGhlIGZpcnN0IG5vbi1lbXB0eSBv
bmUgdGhlbiBtYWtlIHN1cmUgd2UgaGF2ZSB0d28gYmxhbmtzIHByZWNlZGluZyBpdC4KLSAgICAg
ICAgICAgIG91dC5wcmludCgiLCAiKTsKLSAgICAgICAgICAgIGR1bXAob3V0LCBub2RlLmNoaWxk
MygpKTsKLSAgICAgICAgICAgIGhhc1ByaW50ZWQgPSB0cnVlOwotICAgICAgICB9Ci0gICAgfQot
Ci0gICAgaWYgKHN0cmxlbihub2RlRmxhZ3NBc1N0cmluZyhub2RlLmZsYWdzKCkpKSkgewotICAg
ICAgICBvdXQucHJpbnQoaGFzUHJpbnRlZCA/ICIsICIgOiAiIiwgbm9kZUZsYWdzQXNTdHJpbmco
bm9kZS5mbGFncygpKSk7Ci0gICAgICAgIGhhc1ByaW50ZWQgPSB0cnVlOwotICAgIH0KLSAgICBp
ZiAobm9kZS5oYXNBcnJheU1vZGUoKSkgewotICAgICAgICBvdXQucHJpbnQoaGFzUHJpbnRlZCA/
ICIsICIgOiAiIiwgbm9kZS5hcnJheU1vZGUoKSk7Ci0gICAgICAgIGhhc1ByaW50ZWQgPSB0cnVl
OwotICAgIH0KLSAgICBpZiAobm9kZS5oYXNWYXJOdW1iZXIoKSkgewotICAgICAgICBvdXQucHJp
bnQoaGFzUHJpbnRlZCA/ICIsICIgOiAiIiwgInZhciIsIG5vZGUudmFyTnVtYmVyKCkpOwotICAg
ICAgICBoYXNQcmludGVkID0gdHJ1ZTsKLSAgICB9Ci0gICAgaWYgKG5vZGUuaGFzUmVnaXN0ZXJQ
b2ludGVyKCkpIHsKLSAgICAgICAgb3V0LnByaW50KGhhc1ByaW50ZWQgPyAiLCAiIDogIiIsICJn
bG9iYWwiLCBnbG9iYWxPYmplY3RGb3Iobm9kZS5jb2RlT3JpZ2luKS0+ZmluZFJlZ2lzdGVySW5k
ZXgobm9kZS5yZWdpc3RlclBvaW50ZXIoKSksICIoIiwgUmF3UG9pbnRlcihub2RlLnJlZ2lzdGVy
UG9pbnRlcigpKSwgIikiKTsKLSAgICAgICAgaGFzUHJpbnRlZCA9IHRydWU7Ci0gICAgfQotICAg
IGlmIChub2RlLmhhc0lkZW50aWZpZXIoKSkgewotICAgICAgICBvdXQucHJpbnQoaGFzUHJpbnRl
ZCA/ICIsICIgOiAiIiwgImlkIiwgbm9kZS5pZGVudGlmaWVyTnVtYmVyKCksICJ7IiwgbV9jb2Rl
QmxvY2stPmlkZW50aWZpZXIobm9kZS5pZGVudGlmaWVyTnVtYmVyKCkpLnN0cmluZygpLCAifSIp
OwotICAgICAgICBoYXNQcmludGVkID0gdHJ1ZTsKLSAgICB9Ci0gICAgaWYgKG5vZGUuaGFzU3Ry
dWN0dXJlU2V0KCkpIHsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBub2RlLnN0cnVj
dHVyZVNldCgpLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICBvdXQucHJpbnQoaGFzUHJpbnRl
ZCA/ICIsICIgOiAiIiwgInN0cnVjdCgiLCBSYXdQb2ludGVyKG5vZGUuc3RydWN0dXJlU2V0KClb
aV0pLCAiOiAiLCBJbmRleGluZ1R5cGVEdW1wKG5vZGUuc3RydWN0dXJlU2V0KClbaV0tPmluZGV4
aW5nVHlwZSgpKSwgIikiKTsKLSAgICAgICAgICAgIGhhc1ByaW50ZWQgPSB0cnVlOwotICAgICAg
ICB9Ci0gICAgfQotICAgIGlmIChub2RlLmhhc1N0cnVjdHVyZSgpKSB7Ci0gICAgICAgIG91dC5w
cmludChoYXNQcmludGVkID8gIiwgIiA6ICIiLCAic3RydWN0KCIsIFJhd1BvaW50ZXIobm9kZS5z
dHJ1Y3R1cmUoKSksICI6ICIsIEluZGV4aW5nVHlwZUR1bXAobm9kZS5zdHJ1Y3R1cmUoKS0+aW5k
ZXhpbmdUeXBlKCkpLCAiKSIpOwotICAgICAgICBoYXNQcmludGVkID0gdHJ1ZTsKLSAgICB9Ci0g
ICAgaWYgKG5vZGUuaGFzU3RydWN0dXJlVHJhbnNpdGlvbkRhdGEoKSkgewotICAgICAgICBvdXQu
cHJpbnQoaGFzUHJpbnRlZCA/ICIsICIgOiAiIiwgInN0cnVjdCgiLCBSYXdQb2ludGVyKG5vZGUu
c3RydWN0dXJlVHJhbnNpdGlvbkRhdGEoKS5wcmV2aW91c1N0cnVjdHVyZSksICIgLT4gIiwgUmF3
UG9pbnRlcihub2RlLnN0cnVjdHVyZVRyYW5zaXRpb25EYXRhKCkubmV3U3RydWN0dXJlKSwgIiki
KTsKLSAgICAgICAgaGFzUHJpbnRlZCA9IHRydWU7CisgICAgICAgIGlmICghIW5vZGUtPmNoaWxk
MSgpIHx8ICEhbm9kZS0+Y2hpbGQyKCkgfHwgISFub2RlLT5jaGlsZDMoKSkKKyAgICAgICAgICAg
IG91dC5wcmludChjb21tYSwgbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBpZiAoISFub2RlLT5j
aGlsZDIoKSB8fCAhIW5vZGUtPmNoaWxkMygpKQorICAgICAgICAgICAgb3V0LnByaW50KGNvbW1h
LCBub2RlLT5jaGlsZDIoKSk7CisgICAgICAgIGlmICghIW5vZGUtPmNoaWxkMygpKQorICAgICAg
ICAgICAgb3V0LnByaW50KGNvbW1hLCBub2RlLT5jaGlsZDMoKSk7CisgICAgfQorCisgICAgaWYg
KHN0cmxlbihub2RlRmxhZ3NBc1N0cmluZyhub2RlLT5mbGFncygpKSkpCisgICAgICAgIG91dC5w
cmludChjb21tYSwgbm9kZUZsYWdzQXNTdHJpbmcobm9kZS0+ZmxhZ3MoKSkpOworICAgIGlmIChu
b2RlLT5oYXNBcnJheU1vZGUoKSkKKyAgICAgICAgb3V0LnByaW50KGNvbW1hLCBub2RlLT5hcnJh
eU1vZGUoKSk7CisgICAgaWYgKG5vZGUtPmhhc1Zhck51bWJlcigpKQorICAgICAgICBvdXQucHJp
bnQoY29tbWEsIG5vZGUtPnZhck51bWJlcigpKTsKKyAgICBpZiAobm9kZS0+aGFzUmVnaXN0ZXJQ
b2ludGVyKCkpCisgICAgICAgIG91dC5wcmludChjb21tYSwgImdsb2JhbCIsIGdsb2JhbE9iamVj
dEZvcihub2RlLT5jb2RlT3JpZ2luKS0+ZmluZFJlZ2lzdGVySW5kZXgobm9kZS0+cmVnaXN0ZXJQ
b2ludGVyKCkpLCAiKCIsIFJhd1BvaW50ZXIobm9kZS0+cmVnaXN0ZXJQb2ludGVyKCkpLCAiKSIp
OworICAgIGlmIChub2RlLT5oYXNJZGVudGlmaWVyKCkpCisgICAgICAgIG91dC5wcmludChjb21t
YSwgImlkIiwgbm9kZS0+aWRlbnRpZmllck51bWJlcigpLCAieyIsIG1fY29kZUJsb2NrLT5pZGVu
dGlmaWVyKG5vZGUtPmlkZW50aWZpZXJOdW1iZXIoKSkuc3RyaW5nKCksICJ9Iik7CisgICAgaWYg
KG5vZGUtPmhhc1N0cnVjdHVyZVNldCgpKSB7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgbm9kZS0+c3RydWN0dXJlU2V0KCkuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICBvdXQucHJp
bnQoY29tbWEsICJzdHJ1Y3QoIiwgUmF3UG9pbnRlcihub2RlLT5zdHJ1Y3R1cmVTZXQoKVtpXSks
ICI6ICIsIEluZGV4aW5nVHlwZUR1bXAobm9kZS0+c3RydWN0dXJlU2V0KClbaV0tPmluZGV4aW5n
VHlwZSgpKSwgIikiKTsKKyAgICB9CisgICAgaWYgKG5vZGUtPmhhc1N0cnVjdHVyZSgpKQorICAg
ICAgICBvdXQucHJpbnQoY29tbWEsICJzdHJ1Y3QoIiwgUmF3UG9pbnRlcihub2RlLT5zdHJ1Y3R1
cmUoKSksICI6ICIsIEluZGV4aW5nVHlwZUR1bXAobm9kZS0+c3RydWN0dXJlKCktPmluZGV4aW5n
VHlwZSgpKSwgIikiKTsKKyAgICBpZiAobm9kZS0+aGFzU3RydWN0dXJlVHJhbnNpdGlvbkRhdGEo
KSkKKyAgICAgICAgb3V0LnByaW50KGNvbW1hLCAic3RydWN0KCIsIFJhd1BvaW50ZXIobm9kZS0+
c3RydWN0dXJlVHJhbnNpdGlvbkRhdGEoKS5wcmV2aW91c1N0cnVjdHVyZSksICIgLT4gIiwgUmF3
UG9pbnRlcihub2RlLT5zdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSgpLm5ld1N0cnVjdHVyZSksICIp
Iik7CisgICAgaWYgKG5vZGUtPmhhc0Z1bmN0aW9uKCkpIHsKKyAgICAgICAgb3V0LnByaW50KGNv
bW1hLCAiZnVuY3Rpb24oIiwgUmF3UG9pbnRlcihub2RlLT5mdW5jdGlvbigpKSwgIiwgIik7Cisg
ICAgICAgIGlmIChub2RlLT5mdW5jdGlvbigpLT5pbmhlcml0cygmSlNGdW5jdGlvbjo6c19pbmZv
KSkKKyAgICAgICAgICAgIG91dC5wcmludChGdW5jdGlvbkV4ZWN1dGFibGVEdW1wKGpzQ2FzdDxK
U0Z1bmN0aW9uKj4obm9kZS0+ZnVuY3Rpb24oKSktPmpzRXhlY3V0YWJsZSgpKSk7CisgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIG91dC5wcmludCgiPG5vdCBKU0Z1bmN0aW9uPiIpOworICAgICAg
ICBvdXQucHJpbnQoIikiKTsKICAgICB9Ci0gICAgaWYgKG5vZGUuaGFzRnVuY3Rpb24oKSkgewot
ICAgICAgICBvdXQucHJpbnQoaGFzUHJpbnRlZCA/ICIsICIgOiAiIiwgUmF3UG9pbnRlcihub2Rl
LmZ1bmN0aW9uKCkpKTsKLSAgICAgICAgaGFzUHJpbnRlZCA9IHRydWU7CisgICAgaWYgKG5vZGUt
Pmhhc0V4ZWN1dGFibGUoKSkgeworICAgICAgICBpZiAobm9kZS0+ZXhlY3V0YWJsZSgpLT5pbmhl
cml0cygmRnVuY3Rpb25FeGVjdXRhYmxlOjpzX2luZm8pKQorICAgICAgICAgICAgb3V0LnByaW50
KGNvbW1hLCAiZXhlY3V0YWJsZSgiLCBGdW5jdGlvbkV4ZWN1dGFibGVEdW1wKGpzQ2FzdDxGdW5j
dGlvbkV4ZWN1dGFibGUqPihub2RlLT5leGVjdXRhYmxlKCkpKSwgIikiKTsKKyAgICAgICAgZWxz
ZQorICAgICAgICAgICAgb3V0LnByaW50KGNvbW1hLCAiZXhlY3V0YWJsZShub3QgZnVuY3Rpb246
ICIsIFJhd1BvaW50ZXIobm9kZS0+ZXhlY3V0YWJsZSgpKSwgIikiKTsKICAgICB9Ci0gICAgaWYg
KG5vZGUuaGFzU3RvcmFnZUFjY2Vzc0RhdGEoKSkgewotICAgICAgICBTdG9yYWdlQWNjZXNzRGF0
YSYgc3RvcmFnZUFjY2Vzc0RhdGEgPSBtX3N0b3JhZ2VBY2Nlc3NEYXRhW25vZGUuc3RvcmFnZUFj
Y2Vzc0RhdGFJbmRleCgpXTsKLSAgICAgICAgb3V0LnByaW50KGhhc1ByaW50ZWQgPyAiLCAiIDog
IiIsICJpZCIsIHN0b3JhZ2VBY2Nlc3NEYXRhLmlkZW50aWZpZXJOdW1iZXIsICJ7IiwgbV9jb2Rl
QmxvY2stPmlkZW50aWZpZXIoc3RvcmFnZUFjY2Vzc0RhdGEuaWRlbnRpZmllck51bWJlcikuc3Ry
aW5nKCksICJ9Iik7CisgICAgaWYgKG5vZGUtPmhhc1N0b3JhZ2VBY2Nlc3NEYXRhKCkpIHsKKyAg
ICAgICAgU3RvcmFnZUFjY2Vzc0RhdGEmIHN0b3JhZ2VBY2Nlc3NEYXRhID0gbV9zdG9yYWdlQWNj
ZXNzRGF0YVtub2RlLT5zdG9yYWdlQWNjZXNzRGF0YUluZGV4KCldOworICAgICAgICBvdXQucHJp
bnQoY29tbWEsICJpZCIsIHN0b3JhZ2VBY2Nlc3NEYXRhLmlkZW50aWZpZXJOdW1iZXIsICJ7Iiwg
bV9jb2RlQmxvY2stPmlkZW50aWZpZXIoc3RvcmFnZUFjY2Vzc0RhdGEuaWRlbnRpZmllck51bWJl
cikuc3RyaW5nKCksICJ9Iik7CiAgICAgICAgIG91dC5wcmludCgiLCAiLCBzdGF0aWNfY2FzdDxw
dHJkaWZmX3Q+KHN0b3JhZ2VBY2Nlc3NEYXRhLm9mZnNldCkpOwotICAgICAgICBoYXNQcmludGVk
ID0gdHJ1ZTsKICAgICB9Ci0gICAgQVNTRVJUKG5vZGUuaGFzVmFyaWFibGVBY2Nlc3NEYXRhKCkg
PT0gbm9kZS5oYXNMb2NhbCgpKTsKLSAgICBpZiAobm9kZS5oYXNWYXJpYWJsZUFjY2Vzc0RhdGEo
KSkgewotICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9IG5v
ZGUudmFyaWFibGVBY2Nlc3NEYXRhKCk7CisgICAgQVNTRVJUKG5vZGUtPmhhc1ZhcmlhYmxlQWNj
ZXNzRGF0YSgpID09IG5vZGUtPmhhc0xvY2FsKCkpOworICAgIGlmIChub2RlLT5oYXNWYXJpYWJs
ZUFjY2Vzc0RhdGEoKSkgeworICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNj
ZXNzRGF0YSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOwogICAgICAgICBpbnQgb3BlcmFu
ZCA9IHZhcmlhYmxlQWNjZXNzRGF0YS0+b3BlcmFuZCgpOwogICAgICAgICBpZiAob3BlcmFuZElz
QXJndW1lbnQob3BlcmFuZCkpCi0gICAgICAgICAgICBvdXQucHJpbnQoaGFzUHJpbnRlZCA/ICIs
ICIgOiAiIiwgImFyZyIsIG9wZXJhbmRUb0FyZ3VtZW50KG9wZXJhbmQpLCAiKCIsIFZhcmlhYmxl
QWNjZXNzRGF0YUR1bXAoKnRoaXMsIHZhcmlhYmxlQWNjZXNzRGF0YSksICIpIik7CisgICAgICAg
ICAgICBvdXQucHJpbnQoY29tbWEsICJhcmciLCBvcGVyYW5kVG9Bcmd1bWVudChvcGVyYW5kKSwg
IigiLCBWYXJpYWJsZUFjY2Vzc0RhdGFEdW1wKCp0aGlzLCB2YXJpYWJsZUFjY2Vzc0RhdGEpLCAi
KSIpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBvdXQucHJpbnQoaGFzUHJpbnRlZCA/ICIs
ICIgOiAiIiwgInIiLCBvcGVyYW5kLCAiKCIsIFZhcmlhYmxlQWNjZXNzRGF0YUR1bXAoKnRoaXMs
IHZhcmlhYmxlQWNjZXNzRGF0YSksICIpIik7Ci0gICAgICAgIGhhc1ByaW50ZWQgPSB0cnVlOwor
ICAgICAgICAgICAgb3V0LnByaW50KGNvbW1hLCAiciIsIG9wZXJhbmQsICIoIiwgVmFyaWFibGVB
Y2Nlc3NEYXRhRHVtcCgqdGhpcywgdmFyaWFibGVBY2Nlc3NEYXRhKSwgIikiKTsKICAgICB9Ci0g
ICAgaWYgKG5vZGUuaGFzQ29uc3RhbnRCdWZmZXIoKSkgewotICAgICAgICBpZiAoaGFzUHJpbnRl
ZCkKLSAgICAgICAgICAgIG91dC5wcmludCgiLCAiKTsKLSAgICAgICAgb3V0LnByaW50KG5vZGUu
c3RhcnRDb25zdGFudCgpLCAiOlsiKTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IG5vZGUubnVtQ29uc3RhbnRzKCk7ICsraSkgewotICAgICAgICAgICAgaWYgKGkpCi0gICAgICAg
ICAgICAgICAgb3V0LnByaW50KCIsICIpOwotICAgICAgICAgICAgb3V0LnByaW50KG1fY29kZUJs
b2NrLT5jb25zdGFudEJ1ZmZlcihub2RlLnN0YXJ0Q29uc3RhbnQoKSlbaV0pOwotICAgICAgICB9
CisgICAgaWYgKG5vZGUtPmhhc0NvbnN0YW50QnVmZmVyKCkpIHsKKyAgICAgICAgb3V0LnByaW50
KGNvbW1hKTsKKyAgICAgICAgb3V0LnByaW50KG5vZGUtPnN0YXJ0Q29uc3RhbnQoKSwgIjpbIik7
CisgICAgICAgIENvbW1hUHJpbnRlciBhbm90aGVyQ29tbWE7CisgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBub2RlLT5udW1Db25zdGFudHMoKTsgKytpKQorICAgICAgICAgICAgb3V0
LnByaW50KGFub3RoZXJDb21tYSwgbV9jb2RlQmxvY2stPmNvbnN0YW50QnVmZmVyKG5vZGUtPnN0
YXJ0Q29uc3RhbnQoKSlbaV0pOwogICAgICAgICBvdXQucHJpbnQoIl0iKTsKLSAgICAgICAgaGFz
UHJpbnRlZCA9IHRydWU7Ci0gICAgfQotICAgIGlmIChub2RlLmhhc0luZGV4aW5nVHlwZSgpKSB7
Ci0gICAgICAgIGlmIChoYXNQcmludGVkKQotICAgICAgICAgICAgb3V0LnByaW50KCIsICIpOwot
ICAgICAgICBvdXQucHJpbnQoSW5kZXhpbmdUeXBlRHVtcChub2RlLmluZGV4aW5nVHlwZSgpKSk7
Ci0gICAgICAgIGhhc1ByaW50ZWQgPSB0cnVlOwotICAgIH0KLSAgICBpZiAobm9kZS5oYXNFeGVj
dXRpb25Db3VudGVyKCkpIHsKLSAgICAgICAgaWYgKGhhc1ByaW50ZWQpCi0gICAgICAgICAgICBv
dXQucHJpbnQoIiwgIik7Ci0gICAgICAgIG91dC5wcmludChSYXdQb2ludGVyKG5vZGUuZXhlY3V0
aW9uQ291bnRlcigpKSk7Ci0gICAgICAgIGhhc1ByaW50ZWQgPSB0cnVlOwogICAgIH0KKyAgICBp
ZiAobm9kZS0+aGFzSW5kZXhpbmdUeXBlKCkpCisgICAgICAgIG91dC5wcmludChjb21tYSwgSW5k
ZXhpbmdUeXBlRHVtcChub2RlLT5pbmRleGluZ1R5cGUoKSkpOworICAgIGlmIChub2RlLT5oYXNF
eGVjdXRpb25Db3VudGVyKCkpCisgICAgICAgIG91dC5wcmludChjb21tYSwgUmF3UG9pbnRlcihu
b2RlLT5leGVjdXRpb25Db3VudGVyKCkpKTsKICAgICBpZiAob3AgPT0gSlNDb25zdGFudCkgewot
ICAgICAgICBvdXQucHJpbnQoaGFzUHJpbnRlZCA/ICIsICIgOiAiIiwgIiQiLCBub2RlLmNvbnN0
YW50TnVtYmVyKCkpOwotICAgICAgICBKU1ZhbHVlIHZhbHVlID0gdmFsdWVPZkpTQ29uc3RhbnQo
bm9kZUluZGV4KTsKKyAgICAgICAgb3V0LnByaW50KGNvbW1hLCAiJCIsIG5vZGUtPmNvbnN0YW50
TnVtYmVyKCkpOworICAgICAgICBKU1ZhbHVlIHZhbHVlID0gdmFsdWVPZkpTQ29uc3RhbnQobm9k
ZSk7CiAgICAgICAgIG91dC5wcmludCgiID0gIiwgdmFsdWUpOwotICAgICAgICBoYXNQcmludGVk
ID0gdHJ1ZTsKLSAgICB9Ci0gICAgaWYgKG9wID09IFdlYWtKU0NvbnN0YW50KSB7Ci0gICAgICAg
IG91dC5wcmludChoYXNQcmludGVkID8gIiwgIiA6ICIiLCBSYXdQb2ludGVyKG5vZGUud2Vha0Nv
bnN0YW50KCkpKTsKLSAgICAgICAgaGFzUHJpbnRlZCA9IHRydWU7Ci0gICAgfQotICAgIGlmICAo
bm9kZS5pc0JyYW5jaCgpIHx8IG5vZGUuaXNKdW1wKCkpIHsKLSAgICAgICAgb3V0LnByaW50KGhh
c1ByaW50ZWQgPyAiLCAiIDogIiIsICJUOiMiLCBub2RlLnRha2VuQmxvY2tJbmRleCgpKTsKLSAg
ICAgICAgaGFzUHJpbnRlZCA9IHRydWU7Ci0gICAgfQotICAgIGlmICAobm9kZS5pc0JyYW5jaCgp
KSB7Ci0gICAgICAgIG91dC5wcmludChoYXNQcmludGVkID8gIiwgIiA6ICIiLCAiRjojIiwgbm9k
ZS5ub3RUYWtlbkJsb2NrSW5kZXgoKSk7Ci0gICAgICAgIGhhc1ByaW50ZWQgPSB0cnVlOwogICAg
IH0KLSAgICBvdXQucHJpbnQoaGFzUHJpbnRlZCA/ICIsICIgOiAiIiwgImJjIyIsIG5vZGUuY29k
ZU9yaWdpbi5ieXRlY29kZUluZGV4KTsKLSAgICBoYXNQcmludGVkID0gdHJ1ZTsKLSAgICAKLSAg
ICAodm9pZCloYXNQcmludGVkOworICAgIGlmIChvcCA9PSBXZWFrSlNDb25zdGFudCkKKyAgICAg
ICAgb3V0LnByaW50KGNvbW1hLCBSYXdQb2ludGVyKG5vZGUtPndlYWtDb25zdGFudCgpKSk7Cisg
ICAgaWYgKG5vZGUtPmlzQnJhbmNoKCkgfHwgbm9kZS0+aXNKdW1wKCkpCisgICAgICAgIG91dC5w
cmludChjb21tYSwgIlQ6IyIsIG5vZGUtPnRha2VuQmxvY2tJbmRleCgpKTsKKyAgICBpZiAobm9k
ZS0+aXNCcmFuY2goKSkKKyAgICAgICAgb3V0LnByaW50KGNvbW1hLCAiRjojIiwgbm9kZS0+bm90
VGFrZW5CbG9ja0luZGV4KCkpOworICAgIG91dC5wcmludChjb21tYSwgImJjIyIsIG5vZGUtPmNv
ZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCk7CiAgICAgCiAgICAgb3V0LnByaW50KCIpIik7CiAKICAg
ICBpZiAoIXNraXBwZWQpIHsKLSAgICAgICAgaWYgKG5vZGUuaGFzVmFyaWFibGVBY2Nlc3NEYXRh
KCkpCi0gICAgICAgICAgICBvdXQucHJpbnQoIiAgcHJlZGljdGluZyAiLCBTcGVjdWxhdGlvbkR1
bXAobm9kZS52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+cHJlZGljdGlvbigpKSwgbm9kZS52YXJpYWJs
ZUFjY2Vzc0RhdGEoKS0+c2hvdWxkVXNlRG91YmxlRm9ybWF0KCkgPyAiLCBmb3JjaW5nIGRvdWJs
ZSIgOiAiIik7Ci0gICAgICAgIGVsc2UgaWYgKG5vZGUuaGFzSGVhcFByZWRpY3Rpb24oKSkKLSAg
ICAgICAgICAgIG91dC5wcmludCgiICBwcmVkaWN0aW5nICIsIFNwZWN1bGF0aW9uRHVtcChub2Rl
LmdldEhlYXBQcmVkaWN0aW9uKCkpKTsKKyAgICAgICAgaWYgKG5vZGUtPmhhc1ZhcmlhYmxlQWNj
ZXNzRGF0YSgpKQorICAgICAgICAgICAgb3V0LnByaW50KCIgIHByZWRpY3RpbmcgIiwgU3BlY3Vs
YXRpb25EdW1wKG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5wcmVkaWN0aW9uKCkpLCBub2Rl
LT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+c2hvdWxkVXNlRG91YmxlRm9ybWF0KCkgPyAiLCBmb3Jj
aW5nIGRvdWJsZSIgOiAiIik7CisgICAgICAgIGVsc2UgaWYgKG5vZGUtPmhhc0hlYXBQcmVkaWN0
aW9uKCkpCisgICAgICAgICAgICBvdXQucHJpbnQoIiAgcHJlZGljdGluZyAiLCBTcGVjdWxhdGlv
bkR1bXAobm9kZS0+Z2V0SGVhcFByZWRpY3Rpb24oKSkpOwogICAgIH0KICAgICAKICAgICBvdXQu
cHJpbnQoIlxuIik7CkBAIC0zMDksNyArMjYyLDcgQEAgdm9pZCBHcmFwaDo6ZHVtcEJsb2NrSGVh
ZGVyKFByaW50U3RyZWFtJgogewogICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ibG9ja3NbYmxv
Y2tJbmRleF0uZ2V0KCk7CiAKLSAgICBvdXQucHJpbnQocHJlZml4LCAiQmxvY2sgIyIsIGJsb2Nr
SW5kZXgsICIgKCIsIGF0KGJsb2NrLT5hdCgwKSkuY29kZU9yaWdpbiwgIik6ICIsIGJsb2NrLT5p
c1JlYWNoYWJsZSA/ICIiIDogIihza2lwcGVkKSIsIGJsb2NrLT5pc09TUlRhcmdldCA/ICIgKE9T
UiB0YXJnZXQpIiA6ICIiLCAiXG4iKTsKKyAgICBvdXQucHJpbnQocHJlZml4LCAiQmxvY2sgIyIs
IGJsb2NrSW5kZXgsICIgKCIsIGJsb2NrLT5hdCgwKS0+Y29kZU9yaWdpbiwgIik6ICIsIGJsb2Nr
LT5pc1JlYWNoYWJsZSA/ICIiIDogIihza2lwcGVkKSIsIGJsb2NrLT5pc09TUlRhcmdldCA/ICIg
KE9TUiB0YXJnZXQpIiA6ICIiLCAiXG4iKTsKICAgICBvdXQucHJpbnQocHJlZml4LCAiICBQcmVk
ZWNlc3NvcnM6Iik7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBibG9jay0+bV9wcmVkZWNl
c3NvcnMuc2l6ZSgpOyArK2kpCiAgICAgICAgIG91dC5wcmludCgiICMiLCBibG9jay0+bV9wcmVk
ZWNlc3NvcnNbaV0pOwpAQCAtMzMyLDE3ICsyODUsMTYgQEAgdm9pZCBHcmFwaDo6ZHVtcEJsb2Nr
SGVhZGVyKFByaW50U3RyZWFtJgogICAgIH0KICAgICBvdXQucHJpbnQocHJlZml4LCAiICBQaGkg
Tm9kZXM6Iik7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBibG9jay0+cGhpcy5zaXplKCk7
ICsraSkgewotICAgICAgICBOb2RlSW5kZXggcGhpTm9kZUluZGV4ID0gYmxvY2stPnBoaXNbaV07
Ci0gICAgICAgIE5vZGUmIHBoaU5vZGUgPSBhdChwaGlOb2RlSW5kZXgpOwotICAgICAgICBpZiAo
IXBoaU5vZGUuc2hvdWxkR2VuZXJhdGUoKSAmJiBwaGlOb2RlRHVtcE1vZGUgPT0gRHVtcExpdmVQ
aGlzT25seSkKKyAgICAgICAgTm9kZSogcGhpTm9kZSA9IGJsb2NrLT5waGlzW2ldOworICAgICAg
ICBpZiAoIXBoaU5vZGUtPnNob3VsZEdlbmVyYXRlKCkgJiYgcGhpTm9kZUR1bXBNb2RlID09IER1
bXBMaXZlUGhpc09ubHkpCiAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgb3V0LnByaW50
KCIgQCIsIHBoaU5vZGVJbmRleCwgIjwiLCBwaGlOb2RlLnJlZkNvdW50KCksICI+LT4oIik7Ci0g
ICAgICAgIGlmIChwaGlOb2RlLmNoaWxkMSgpKSB7Ci0gICAgICAgICAgICBvdXQucHJpbnQoIkAi
LCBwaGlOb2RlLmNoaWxkMSgpLmluZGV4KCkpOwotICAgICAgICAgICAgaWYgKHBoaU5vZGUuY2hp
bGQyKCkpIHsKLSAgICAgICAgICAgICAgICBvdXQucHJpbnQoIiwgQCIsIHBoaU5vZGUuY2hpbGQy
KCkuaW5kZXgoKSk7Ci0gICAgICAgICAgICAgICAgaWYgKHBoaU5vZGUuY2hpbGQzKCkpCi0gICAg
ICAgICAgICAgICAgICAgIG91dC5wcmludCgiLCBAIiwgcGhpTm9kZS5jaGlsZDMoKS5pbmRleCgp
KTsKKyAgICAgICAgb3V0LnByaW50KCIgQCIsIHBoaU5vZGUtPmluZGV4KCksICI8IiwgcGhpTm9k
ZS0+cmVmQ291bnQoKSwgIj4tPigiKTsKKyAgICAgICAgaWYgKHBoaU5vZGUtPmNoaWxkMSgpKSB7
CisgICAgICAgICAgICBvdXQucHJpbnQoIkAiLCBwaGlOb2RlLT5jaGlsZDEoKS0+aW5kZXgoKSk7
CisgICAgICAgICAgICBpZiAocGhpTm9kZS0+Y2hpbGQyKCkpIHsKKyAgICAgICAgICAgICAgICBv
dXQucHJpbnQoIiwgQCIsIHBoaU5vZGUtPmNoaWxkMigpLT5pbmRleCgpKTsKKyAgICAgICAgICAg
ICAgICBpZiAocGhpTm9kZS0+Y2hpbGQzKCkpCisgICAgICAgICAgICAgICAgICAgIG91dC5wcmlu
dCgiLCBAIiwgcGhpTm9kZS0+Y2hpbGQzKCktPmluZGV4KCkpOwogICAgICAgICAgICAgfQogICAg
ICAgICB9CiAgICAgICAgIG91dC5wcmludCgiKSIsIGkgKyAxIDwgYmxvY2stPnBoaXMuc2l6ZSgp
ID8gIiwiIDogIiIpOwpAQCAtMzUyLDcgKzMwNCw3IEBAIHZvaWQgR3JhcGg6OmR1bXBCbG9ja0hl
YWRlcihQcmludFN0cmVhbSYKIAogdm9pZCBHcmFwaDo6ZHVtcChQcmludFN0cmVhbSYgb3V0KQog
ewotICAgIE5vZGVJbmRleCBsYXN0Tm9kZUluZGV4ID0gTm9Ob2RlOworICAgIE5vZGUqIGxhc3RO
b2RlID0gMDsKICAgICBmb3IgKHNpemVfdCBiID0gMDsgYiA8IG1fYmxvY2tzLnNpemUoKTsgKyti
KSB7CiAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ibG9ja3NbYl0uZ2V0KCk7CiAgICAg
ICAgIGlmICghYmxvY2spCkBAIC0zNjgsOSArMzIwLDkgQEAgdm9pZCBHcmFwaDo6ZHVtcChQcmlu
dFN0cmVhbSYgb3V0KQogICAgICAgICBkdW1wT3BlcmFuZHMoYmxvY2stPnZhcmlhYmxlc0F0SGVh
ZCwgb3V0KTsKICAgICAgICAgb3V0LnByaW50KCJcbiIpOwogICAgICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IGJsb2NrLT5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgZHVtcENvZGVPcmln
aW4ob3V0LCAiIiwgbGFzdE5vZGVJbmRleCwgYmxvY2stPmF0KGkpKTsKKyAgICAgICAgICAgIGR1
bXBDb2RlT3JpZ2luKG91dCwgIiIsIGxhc3ROb2RlLCBibG9jay0+YXQoaSkpOwogICAgICAgICAg
ICAgZHVtcChvdXQsICIiLCBibG9jay0+YXQoaSkpOwotICAgICAgICAgICAgbGFzdE5vZGVJbmRl
eCA9IGJsb2NrLT5hdChpKTsKKyAgICAgICAgICAgIGxhc3ROb2RlID0gYmxvY2stPmF0KGkpOwog
ICAgICAgICB9CiAgICAgICAgIG91dC5wcmludCgiICB2YXJzIGFmdGVyOiAiKTsKICAgICAgICAg
aWYgKGJsb2NrLT5jZmFIYXNWaXNpdGVkKQpAQCAtMzg2LDQyICszMzgsNDIgQEAgdm9pZCBHcmFw
aDo6ZHVtcChQcmludFN0cmVhbSYgb3V0KQogCiAvLyBGSVhNRTogQ29udmVydCB0aGlzIHRvIGJl
IGl0ZXJhdGl2ZSwgbm90IHJlY3Vyc2l2ZS4KICNkZWZpbmUgRE9fVE9fQ0hJTERSRU4obm9kZSwg
dGhpbmdUb0RvKSBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgTm9k
ZSYgX25vZGUgPSAobm9kZSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKLSAgICAgICAgaWYgKF9ub2RlLmZsYWdzKCkgJiBOb2RlSGFzVmFyQXJncykgeyAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgX2NoaWxk
SWR4ID0gX25vZGUuZmlyc3RDaGlsZCgpOyAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAg
ICAgX2NoaWxkSWR4IDwgX25vZGUuZmlyc3RDaGlsZCgpICsgX25vZGUubnVtQ2hpbGRyZW4oKTsg
IFwKLSAgICAgICAgICAgICAgICAgX2NoaWxkSWR4KyspIHsgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgTm9kZSogX25vZGUgPSAobm9kZSk7ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgaWYgKF9ub2Rl
LT5mbGFncygpICYgTm9kZUhhc1ZhckFyZ3MpIHsgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
KyAgICAgICAgICAgIGZvciAodW5zaWduZWQgX2NoaWxkSWR4ID0gX25vZGUtPmZpcnN0Q2hpbGQo
KTsgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBfY2hpbGRJZHggPCBfbm9kZS0+Zmly
c3RDaGlsZCgpICsgX25vZGUtPm51bUNoaWxkcmVuKCk7IFwKKyAgICAgICAgICAgICAgICBfY2hp
bGRJZHgrKykgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAg
ICAgICAgICAgICAgICBpZiAoISFtX3ZhckFyZ0NoaWxkcmVuW19jaGlsZElkeF0pICAgICAgICAg
ICAgICAgICAgICAgIFwKICAgICAgICAgICAgICAgICAgICAgdGhpbmdUb0RvKG1fdmFyQXJnQ2hp
bGRyZW5bX2NoaWxkSWR4XSk7ICAgICAgICAgICAgIFwKICAgICAgICAgICAgIH0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAg
ICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKLSAgICAgICAgICAgIGlmICghX25vZGUuY2hpbGQxKCkpIHsgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICBBU1NFUlQoIV9u
b2RlLmNoaWxkMigpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAg
ICAgICAgICAgICAgICAgJiYgIV9ub2RlLmNoaWxkMygpKTsgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKKyAgICAgICAgICAgIGlmICghX25vZGUtPmNoaWxkMSgpKSB7ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBBU1NFUlQoIV9ub2Rl
LT5jaGlsZDIoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAg
ICAgICAgICAgICAgJiYgIV9ub2RlLT5jaGlsZDMoKSk7ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKICAgICAgICAgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIHRo
aW5nVG9Ebyhfbm9kZS5jaGlsZDEoKSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKKyAgICAgICAgICAgIHRoaW5nVG9Ebyhfbm9kZS0+Y2hpbGQxKCkpOyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIGlmICgh
X25vZGUuY2hpbGQyKCkpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
LSAgICAgICAgICAgICAgICBBU1NFUlQoIV9ub2RlLmNoaWxkMygpKTsgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIGlmICghX25vZGUtPmNoaWxkMigpKSB7ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBBU1NF
UlQoIV9ub2RlLT5jaGlsZDMoKSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAg
ICAgICAgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKICAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIHRoaW5nVG9Ebyhf
bm9kZS5jaGlsZDIoKSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAg
ICAgICAgIHRoaW5nVG9Ebyhfbm9kZS0+Y2hpbGQyKCkpOyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIGlmICghX25vZGUuY2hp
bGQzKCkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAg
ICAgIGlmICghX25vZGUtPmNoaWxkMygpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKICAgICAgICAgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIHRoaW5nVG9Ebyhfbm9kZS5j
aGlsZDMoKSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAg
IHRoaW5nVG9Ebyhfbm9kZS0+Y2hpbGQzKCkpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKICAgICB9IHdoaWxlIChmYWxzZSkKIAotdm9pZCBHcmFw
aDo6cmVmQ2hpbGRyZW4oTm9kZUluZGV4IG9wKQordm9pZCBHcmFwaDo6cmVmQ2hpbGRyZW4oTm9k
ZSogb3ApCiB7Ci0gICAgRE9fVE9fQ0hJTERSRU4oYXQob3ApLCByZWYpOworICAgIERPX1RPX0NI
SUxEUkVOKG9wLCByZWYpOwogfQogCi12b2lkIEdyYXBoOjpkZXJlZkNoaWxkcmVuKE5vZGVJbmRl
eCBvcCkKK3ZvaWQgR3JhcGg6OmRlcmVmQ2hpbGRyZW4oTm9kZSogb3ApCiB7Ci0gICAgRE9fVE9f
Q0hJTERSRU4oYXQob3ApLCBkZXJlZik7CisgICAgRE9fVE9fQ0hJTERSRU4ob3AsIGRlcmVmKTsK
IH0KIAogdm9pZCBHcmFwaDo6cHJlZGljdEFyZ3VtZW50VHlwZXMoKQpAQCAtNDMyLDEyICszODQs
MTIgQEAgdm9pZCBHcmFwaDo6cHJlZGljdEFyZ3VtZW50VHlwZXMoKQogICAgICAgICBpZiAoIXBy
b2ZpbGUpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgCi0gICAgICAgIGF0KG1fYXJn
dW1lbnRzW2FyZ10pLnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5wcmVkaWN0KHByb2ZpbGUtPmNvbXB1
dGVVcGRhdGVkUHJlZGljdGlvbigpKTsKKyAgICAgICAgbV9hcmd1bWVudHNbYXJnXS0+dmFyaWFi
bGVBY2Nlc3NEYXRhKCktPnByZWRpY3QocHJvZmlsZS0+Y29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9u
KCkpOwogICAgICAgICAKICNpZiBERkdfRU5BQkxFKERFQlVHX1ZFUkJPU0UpCiAgICAgICAgIGRh
dGFMb2coCiAgICAgICAgICAgICAiQXJndW1lbnQgWyIsIGFyZywgIl0gcHJlZGljdGlvbjogIiwK
LSAgICAgICAgICAgIFNwZWN1bGF0aW9uRHVtcChhdChtX2FyZ3VtZW50c1thcmddKS52YXJpYWJs
ZUFjY2Vzc0RhdGEoKS0+cHJlZGljdGlvbigpKSwgIlxuIik7CisgICAgICAgICAgICBTcGVjdWxh
dGlvbkR1bXAobV9hcmd1bWVudHNbYXJnXS0+dmFyaWFibGVBY2Nlc3NEYXRhKCktPnByZWRpY3Rp
b24oKSksICJcbiIpOwogI2VuZGlmCiAgICAgfQogfQpAQCAtNDU2LDUxICs0MDgsNTYgQEAgdm9p
ZCBHcmFwaDo6aGFuZGxlU3VjY2Vzc29yKFZlY3RvcjxCbG9jawogdm9pZCBHcmFwaDo6Y29sbGVj
dEdhcmJhZ2UoKQogewogICAgIC8vIEZpcnN0IHJlc2V0IHRoZSBjb3VudHMgdG8gMCBmb3IgYWxs
IG5vZGVzLgotICAgIGZvciAodW5zaWduZWQgaSA9IHNpemUoKTsgaS0tOykKLSAgICAgICAgYXQo
aSkuc2V0UmVmQ291bnQoMCk7CisgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSAwOyBi
bG9ja0luZGV4IDwgbV9ibG9ja3Muc2l6ZSgpOyArK2Jsb2NrSW5kZXgpIHsKKyAgICAgICAgQmFz
aWNCbG9jayogYmxvY2sgPSBtX2Jsb2Nrc1tibG9ja0luZGV4XS5nZXQoKTsKKyAgICAgICAgaWYg
KCFibG9jaykKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBmb3IgKHVuc2lnbmVkIGlu
ZGV4SW5CbG9jayA9IGJsb2NrLT5zaXplKCk7IGluZGV4SW5CbG9jay0tOykKKyAgICAgICAgICAg
IGJsb2NrLT5hdChpbmRleEluQmxvY2spLT5zZXRSZWZDb3VudCgwKTsKKyAgICAgICAgZm9yICh1
bnNpZ25lZCBwaGlJbmRleCA9IGJsb2NrLT5waGlzLnNpemUoKTsgcGhpSW5kZXgtLTspCisgICAg
ICAgICAgICBibG9jay0+cGhpc1twaGlJbmRleF0tPnNldFJlZkNvdW50KDApOworICAgIH0KICAg
ICAKICAgICAvLyBOb3cgZmluZCB0aGUgcm9vdHM6IHRoZSBub2RlcyB0aGF0IGFyZSBtdXN0LWdl
bmVyYXRlLiBTZXQgdGhlaXIgcmVmIGNvdW50cyB0bwogICAgIC8vIDEgYW5kIHB1dCB0aGVtIG9u
IHRoZSB3b3JrbGlzdC4KLSAgICBWZWN0b3I8Tm9kZUluZGV4LCAxMjg+IHdvcmtsaXN0OworICAg
IFZlY3RvcjxOb2RlKiwgMTI4PiB3b3JrbGlzdDsKICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJ
bmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2Jsb2Nrcy5zaXplKCk7ICsrYmxvY2tJbmRleCkgewog
ICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fYmxvY2tzW2Jsb2NrSW5kZXhdLmdldCgpOwog
ICAgICAgICBpZiAoIWJsb2NrKQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIGZvciAo
dW5zaWduZWQgaW5kZXhJbkJsb2NrID0gYmxvY2stPnNpemUoKTsgaW5kZXhJbkJsb2NrLS07KSB7
Ci0gICAgICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4ID0gYmxvY2stPmF0KGluZGV4SW5CbG9j
ayk7Ci0gICAgICAgICAgICBOb2RlJiBub2RlID0gYXQobm9kZUluZGV4KTsKLSAgICAgICAgICAg
IGlmICghKG5vZGUuZmxhZ3MoKSAmIE5vZGVNdXN0R2VuZXJhdGUpKQorICAgICAgICAgICAgTm9k
ZSogbm9kZSA9IGJsb2NrLT5hdChpbmRleEluQmxvY2spOworICAgICAgICAgICAgaWYgKCEobm9k
ZS0+ZmxhZ3MoKSAmIE5vZGVNdXN0R2VuZXJhdGUpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwotICAgICAgICAgICAgbm9kZS5zZXRSZWZDb3VudCgxKTsKLSAgICAgICAgICAgIHdvcmtsaXN0
LmFwcGVuZChub2RlSW5kZXgpOworICAgICAgICAgICAgbm9kZS0+c2V0UmVmQ291bnQoMSk7Cisg
ICAgICAgICAgICB3b3JrbGlzdC5hcHBlbmQobm9kZSk7CiAgICAgICAgIH0KICAgICB9CiAgICAg
CiAgICAgd2hpbGUgKCF3b3JrbGlzdC5pc0VtcHR5KCkpIHsKLSAgICAgICAgTm9kZUluZGV4IG5v
ZGVJbmRleCA9IHdvcmtsaXN0Lmxhc3QoKTsKKyAgICAgICAgTm9kZSogbm9kZSA9IHdvcmtsaXN0
Lmxhc3QoKTsKICAgICAgICAgd29ya2xpc3QucmVtb3ZlTGFzdCgpOwotICAgICAgICBOb2RlJiBu
b2RlID0gYXQobm9kZUluZGV4KTsKLSAgICAgICAgQVNTRVJUKG5vZGUuc2hvdWxkR2VuZXJhdGUo
KSk7IC8vIEl0IHNob3VsZCBub3QgYmUgb24gdGhlIHdvcmtsaXN0IHVubGVzcyBpdCdzIHJlZidl
ZC4KLSAgICAgICAgaWYgKG5vZGUuZmxhZ3MoKSAmIE5vZGVIYXNWYXJBcmdzKSB7Ci0gICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGNoaWxkSWR4ID0gbm9kZS5maXJzdENoaWxkKCk7Ci0gICAgICAg
ICAgICAgICAgIGNoaWxkSWR4IDwgbm9kZS5maXJzdENoaWxkKCkgKyBub2RlLm51bUNoaWxkcmVu
KCk7Ci0gICAgICAgICAgICAgICAgICsrY2hpbGRJZHgpIHsKKyAgICAgICAgQVNTRVJUKG5vZGUt
PnNob3VsZEdlbmVyYXRlKCkpOyAvLyBJdCBzaG91bGQgbm90IGJlIG9uIHRoZSB3b3JrbGlzdCB1
bmxlc3MgaXQncyByZWYnZWQuCisgICAgICAgIGlmIChub2RlLT5mbGFncygpICYgTm9kZUhhc1Zh
ckFyZ3MpIHsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgY2hpbGRJZHggPSBub2RlLT5maXJz
dENoaWxkKCk7CisgICAgICAgICAgICAgICAgY2hpbGRJZHggPCBub2RlLT5maXJzdENoaWxkKCkg
KyBub2RlLT5udW1DaGlsZHJlbigpOworICAgICAgICAgICAgICAgICsrY2hpbGRJZHgpIHsKICAg
ICAgICAgICAgICAgICBpZiAoIW1fdmFyQXJnQ2hpbGRyZW5bY2hpbGRJZHhdKQogICAgICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICBOb2RlSW5kZXggY2hpbGROb2Rl
SW5kZXggPSBtX3ZhckFyZ0NoaWxkcmVuW2NoaWxkSWR4XS5pbmRleCgpOwotICAgICAgICAgICAg
ICAgIGlmIChhdChjaGlsZE5vZGVJbmRleCkucG9zdGZpeFJlZigpKQorICAgICAgICAgICAgICAg
IE5vZGUqIGNoaWxkTm9kZSA9IG1fdmFyQXJnQ2hpbGRyZW5bY2hpbGRJZHhdLm5vZGUoKTsKKyAg
ICAgICAgICAgICAgICBpZiAoY2hpbGROb2RlLT5wb3N0Zml4UmVmKCkpCiAgICAgICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIHdvcmtsaXN0LmFwcGVuZChjaGlsZE5v
ZGVJbmRleCk7CisgICAgICAgICAgICAgICAgd29ya2xpc3QuYXBwZW5kKGNoaWxkTm9kZSk7CiAg
ICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAobm9kZS5jaGlsZDEoKSkgewotICAgICAg
ICAgICAgaWYgKCFhdChub2RlLmNoaWxkMSgpKS5wb3N0Zml4UmVmKCkpCi0gICAgICAgICAgICAg
ICAgd29ya2xpc3QuYXBwZW5kKG5vZGUuY2hpbGQxKCkuaW5kZXgoKSk7Ci0gICAgICAgICAgICBp
ZiAobm9kZS5jaGlsZDIoKSkgewotICAgICAgICAgICAgICAgIGlmICghYXQobm9kZS5jaGlsZDIo
KSkucG9zdGZpeFJlZigpKQotICAgICAgICAgICAgICAgICAgICB3b3JrbGlzdC5hcHBlbmQobm9k
ZS5jaGlsZDIoKS5pbmRleCgpKTsKLSAgICAgICAgICAgICAgICBpZiAobm9kZS5jaGlsZDMoKSkg
ewotICAgICAgICAgICAgICAgICAgICBpZiAoIWF0KG5vZGUuY2hpbGQzKCkpLnBvc3RmaXhSZWYo
KSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtsaXN0LmFwcGVuZChub2RlLmNoaWxkMygp
LmluZGV4KCkpOworICAgICAgICB9IGVsc2UgaWYgKG5vZGUtPmNoaWxkMSgpKSB7CisgICAgICAg
ICAgICBpZiAoIW5vZGUtPmNoaWxkMSgpLT5wb3N0Zml4UmVmKCkpCisgICAgICAgICAgICAgICAg
d29ya2xpc3QuYXBwZW5kKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSk7CisgICAgICAgICAgICBpZiAo
bm9kZS0+Y2hpbGQyKCkpIHsKKyAgICAgICAgICAgICAgICBpZiAoIW5vZGUtPmNoaWxkMigpLT5w
b3N0Zml4UmVmKCkpCisgICAgICAgICAgICAgICAgICAgIHdvcmtsaXN0LmFwcGVuZChub2RlLT5j
aGlsZDIoKS5ub2RlKCkpOworICAgICAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDMoKSkgewor
ICAgICAgICAgICAgICAgICAgICBpZiAoIW5vZGUtPmNoaWxkMygpLT5wb3N0Zml4UmVmKCkpCisg
ICAgICAgICAgICAgICAgICAgICAgICB3b3JrbGlzdC5hcHBlbmQobm9kZS0+Y2hpbGQzKCkubm9k
ZSgpKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTUx
OSwxNCArNDc2LDE0IEBAIHZvaWQgR3JhcGg6OmRldGVybWluZVJlYWNoYWJpbGl0eSgpCiAgICAg
ICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ibG9ja3NbaW5kZXhdLmdldCgpOwogICAgICAgICBB
U1NFUlQoYmxvY2stPmlzTGlua2VkKTsKICAgICAgICAgCi0gICAgICAgIE5vZGUmIG5vZGUgPSBh
dChibG9jay0+bGFzdCgpKTsKLSAgICAgICAgQVNTRVJUKG5vZGUuaXNUZXJtaW5hbCgpKTsKKyAg
ICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5sYXN0KCk7CisgICAgICAgIEFTU0VSVChub2RlLT5p
c1Rlcm1pbmFsKCkpOwogICAgICAgICAKLSAgICAgICAgaWYgKG5vZGUuaXNKdW1wKCkpCi0gICAg
ICAgICAgICBoYW5kbGVTdWNjZXNzb3Iod29ya2xpc3QsIGluZGV4LCBub2RlLnRha2VuQmxvY2tJ
bmRleCgpKTsKLSAgICAgICAgZWxzZSBpZiAobm9kZS5pc0JyYW5jaCgpKSB7Ci0gICAgICAgICAg
ICBoYW5kbGVTdWNjZXNzb3Iod29ya2xpc3QsIGluZGV4LCBub2RlLnRha2VuQmxvY2tJbmRleCgp
KTsKLSAgICAgICAgICAgIGhhbmRsZVN1Y2Nlc3Nvcih3b3JrbGlzdCwgaW5kZXgsIG5vZGUubm90
VGFrZW5CbG9ja0luZGV4KCkpOworICAgICAgICBpZiAobm9kZS0+aXNKdW1wKCkpCisgICAgICAg
ICAgICBoYW5kbGVTdWNjZXNzb3Iod29ya2xpc3QsIGluZGV4LCBub2RlLT50YWtlbkJsb2NrSW5k
ZXgoKSk7CisgICAgICAgIGVsc2UgaWYgKG5vZGUtPmlzQnJhbmNoKCkpIHsKKyAgICAgICAgICAg
IGhhbmRsZVN1Y2Nlc3Nvcih3b3JrbGlzdCwgaW5kZXgsIG5vZGUtPnRha2VuQmxvY2tJbmRleCgp
KTsKKyAgICAgICAgICAgIGhhbmRsZVN1Y2Nlc3Nvcih3b3JrbGlzdCwgaW5kZXgsIG5vZGUtPm5v
dFRha2VuQmxvY2tJbmRleCgpKTsKICAgICAgICAgfQogICAgIH0KIH0KQEAgLTU0Niw4ICs1MDMs
MTMgQEAgdm9pZCBHcmFwaDo6cmVzZXRSZWFjaGFiaWxpdHkoKQogCiB2b2lkIEdyYXBoOjpyZXNl
dEV4aXRTdGF0ZXMoKQogewotICAgIGZvciAodW5zaWduZWQgaSA9IHNpemUoKTsgaS0tOykKLSAg
ICAgICAgYXQoaSkuc2V0Q2FuRXhpdCh0cnVlKTsKKyAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJ
bmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2Jsb2Nrcy5zaXplKCk7ICsrYmxvY2tJbmRleCkgewor
ICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fYmxvY2tzW2Jsb2NrSW5kZXhdLmdldCgpOwor
ICAgICAgICBpZiAoIWJsb2NrKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGZvciAo
dW5zaWduZWQgaW5kZXhJbkJsb2NrID0gYmxvY2stPnNpemUoKTsgaW5kZXhJbkJsb2NrLS07KQor
ICAgICAgICAgICAgYmxvY2stPmF0KGluZGV4SW5CbG9jayktPnNldENhbkV4aXQodHJ1ZSk7Cisg
ICAgfQogfQogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0dyYXBoLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdHcmFwaC5oCShyZXZpc2lvbiAxNDEwNTIpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0dyYXBoLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMSwgMjAxMiwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM1LDcgKzM1LDkgQEAK
ICNpbmNsdWRlICJERkdBc3NlbWJseUhlbHBlcnMuaCIKICNpbmNsdWRlICJERkdCYXNpY0Jsb2Nr
LmgiCiAjaW5jbHVkZSAiREZHRG9taW5hdG9ycy5oIgorI2luY2x1ZGUgIkRGR0xvbmdMaXZlZFN0
YXRlLmgiCiAjaW5jbHVkZSAiREZHTm9kZS5oIgorI2luY2x1ZGUgIkRGR05vZGVBbGxvY2F0b3Iu
aCIKICNpbmNsdWRlICJERkdWYXJpYWRpY0Z1bmN0aW9uLmgiCiAjaW5jbHVkZSAiSlNTdGFjay5o
IgogI2luY2x1ZGUgIk1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUuaCIKQEAgLTgzLDU0ICs4
NSw1MiBAQCBlbnVtIEFkZFNwZWN1bGF0aW9uTW9kZSB7CiAvLwogLy8gPT09IEdyYXBoID09PQog
Ly8KLS8vIFRoZSBkYXRhZmxvdyBncmFwaCBpcyBhbiBvcmRlcmVkIHZlY3RvciBvZiBub2Rlcy4K
IC8vIFRoZSBvcmRlciBtYXkgYmUgc2lnbmlmaWNhbnQgZm9yIG5vZGVzIHdpdGggc2lkZS1lZmZl
Y3RzIChwcm9wZXJ0eSBhY2Nlc3NlcywgdmFsdWUgY29udmVyc2lvbnMpLgogLy8gTm9kZXMgdGhh
dCBhcmUgJ2RlYWQnIHJlbWFpbiBpbiB0aGUgdmVjdG9yIHdpdGggcmVmQ291bnQgMC4KLWNsYXNz
IEdyYXBoIDogcHVibGljIFZlY3RvcjxOb2RlLCA2ND4geworY2xhc3MgR3JhcGggewogcHVibGlj
OgogICAgIEdyYXBoKEpTR2xvYmFsRGF0YSYsIENvZGVCbG9jayosIHVuc2lnbmVkIG9zckVudHJ5
Qnl0ZWNvZGVJbmRleCwgY29uc3QgT3BlcmFuZHM8SlNWYWx1ZT4mIG11c3RIYW5kbGVWYWx1ZXMp
OwotICAgIAotICAgIHVzaW5nIFZlY3RvcjxOb2RlLCA2ND46Om9wZXJhdG9yW107Ci0gICAgdXNp
bmcgVmVjdG9yPE5vZGUsIDY0Pjo6YXQ7Ci0gICAgCi0gICAgTm9kZSYgb3BlcmF0b3JbXShFZGdl
IG5vZGVVc2UpIHsgcmV0dXJuIGF0KG5vZGVVc2UuaW5kZXgoKSk7IH0KLSAgICBjb25zdCBOb2Rl
JiBvcGVyYXRvcltdKEVkZ2Ugbm9kZVVzZSkgY29uc3QgeyByZXR1cm4gYXQobm9kZVVzZS5pbmRl
eCgpKTsgfQotICAgIAotICAgIE5vZGUmIGF0KEVkZ2Ugbm9kZVVzZSkgeyByZXR1cm4gYXQobm9k
ZVVzZS5pbmRleCgpKTsgfQotICAgIGNvbnN0IE5vZGUmIGF0KEVkZ2Ugbm9kZVVzZSkgY29uc3Qg
eyByZXR1cm4gYXQobm9kZVVzZS5pbmRleCgpKTsgfQorICAgIH5HcmFwaCgpOwogICAgIAogICAg
IC8vIE1hcmsgYSBub2RlIGFzIGJlaW5nIHJlZmVyZW5jZWQuCi0gICAgTm9kZUluZGV4IHJlZihO
b2RlSW5kZXggbm9kZUluZGV4KQorICAgIE5vZGUqIHJlZihOb2RlKiBub2RlKQogICAgIHsKLSAg
ICAgICAgTm9kZSYgbm9kZSA9IGF0KG5vZGVJbmRleCk7CiAgICAgICAgIC8vIElmIHRoZSB2YWx1
ZSAoYmVmb3JlIGluY3JlbWVudGluZykgd2FzIGF0IHJlZkNvdW50IHplcm8gdGhlbiB3ZSBuZWVk
IHRvIHJlZiBpdHMgY2hpbGRyZW4uCi0gICAgICAgIGlmICghbm9kZS5wb3N0Zml4UmVmKCkpCi0g
ICAgICAgICAgICByZWZDaGlsZHJlbihub2RlSW5kZXgpOwotICAgICAgICByZXR1cm4gbm9kZUlu
ZGV4OworICAgICAgICBpZiAoIW5vZGUtPnBvc3RmaXhSZWYoKSkKKyAgICAgICAgICAgIHJlZkNo
aWxkcmVuKG5vZGUpOworICAgICAgICByZXR1cm4gbm9kZTsKICAgICB9CiAgICAgRWRnZSByZWYo
RWRnZSBub2RlVXNlKQogICAgIHsKLSAgICAgICAgcmVmKG5vZGVVc2UuaW5kZXgoKSk7CisgICAg
ICAgIHJlZihub2RlVXNlLm5vZGUoKSk7CiAgICAgICAgIHJldHVybiBub2RlVXNlOwogICAgIH0K
ICAgICAKLSAgICB2b2lkIGRlcmVmKE5vZGVJbmRleCBub2RlSW5kZXgpCisgICAgdm9pZCBkZXJl
ZihOb2RlKiBub2RlKQogICAgIHsKLSAgICAgICAgaWYgKGF0KG5vZGVJbmRleCkucG9zdGZpeERl
cmVmKCkgPT0gMSkKLSAgICAgICAgICAgIGRlcmVmQ2hpbGRyZW4obm9kZUluZGV4KTsKKyNpZiAh
QVNTRVJUX0RJU0FCTEVECisgICAgICAgIGlmICghbm9kZS0+cmVmQ291bnQoKSkKKyAgICAgICAg
ICAgIGR1bXAoKTsKKyNlbmRpZgorICAgICAgICBpZiAobm9kZS0+cG9zdGZpeERlcmVmKCkgPT0g
MSkKKyAgICAgICAgICAgIGRlcmVmQ2hpbGRyZW4obm9kZSk7CiAgICAgfQogICAgIHZvaWQgZGVy
ZWYoRWRnZSBub2RlVXNlKQogICAgIHsKLSAgICAgICAgZGVyZWYobm9kZVVzZS5pbmRleCgpKTsK
KyAgICAgICAgZGVyZWYobm9kZVVzZS5ub2RlKCkpOwogICAgIH0KICAgICAKLSAgICB2b2lkIGNo
YW5nZUluZGV4KEVkZ2UmIGVkZ2UsIE5vZGVJbmRleCBuZXdJbmRleCwgYm9vbCBjaGFuZ2VSZWYg
PSB0cnVlKQorICAgIC8vIFdoZW4gYSBub2RlJ3MgcmVmQ291bnQgZ29lcyBmcm9tIDAgdG8gMSwg
aXQgbXVzdCAobG9naWNhbGx5KSByZWN1cnNpdmVseSByZWYgYWxsIG9mIGl0cyBjaGlsZHJlbiwg
YW5kIHZpY2UgdmVyc2EuCisgICAgdm9pZCByZWZDaGlsZHJlbihOb2RlKik7CisgICAgdm9pZCBk
ZXJlZkNoaWxkcmVuKE5vZGUqKTsKKworICAgIHZvaWQgY2hhbmdlQ2hpbGQoRWRnZSYgZWRnZSwg
Tm9kZSogbmV3Tm9kZSwgYm9vbCBjaGFuZ2VSZWYgPSB0cnVlKQogICAgIHsKICAgICAgICAgaWYg
KGNoYW5nZVJlZikgewotICAgICAgICAgICAgcmVmKG5ld0luZGV4KTsKLSAgICAgICAgICAgIGRl
cmVmKGVkZ2UuaW5kZXgoKSk7CisgICAgICAgICAgICByZWYobmV3Tm9kZSk7CisgICAgICAgICAg
ICBkZXJlZihlZGdlLm5vZGUoKSk7CiAgICAgICAgIH0KLSAgICAgICAgZWRnZS5zZXRJbmRleChu
ZXdJbmRleCk7CisgICAgICAgIGVkZ2Uuc2V0Tm9kZShuZXdOb2RlKTsKICAgICB9CiAgICAgCiAg
ICAgdm9pZCBjaGFuZ2VFZGdlKEVkZ2UmIGVkZ2UsIEVkZ2UgbmV3RWRnZSwgYm9vbCBjaGFuZ2VS
ZWYgPSB0cnVlKQpAQCAtMTQyLDExICsxNDIsMTEgQEAgcHVibGljOgogICAgICAgICBlZGdlID0g
bmV3RWRnZTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBjb21wYXJlQW5kU3dhcChFZGdlJiBlZGdl
LCBOb2RlSW5kZXggb2xkSW5kZXgsIE5vZGVJbmRleCBuZXdJbmRleCwgYm9vbCBjaGFuZ2VSZWYp
CisgICAgdm9pZCBjb21wYXJlQW5kU3dhcChFZGdlJiBlZGdlLCBOb2RlKiBvbGROb2RlLCBOb2Rl
KiBuZXdOb2RlLCBib29sIGNoYW5nZVJlZikKICAgICB7Ci0gICAgICAgIGlmIChlZGdlLmluZGV4
KCkgIT0gb2xkSW5kZXgpCisgICAgICAgIGlmIChlZGdlLm5vZGUoKSAhPSBvbGROb2RlKQogICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICBjaGFuZ2VJbmRleChlZGdlLCBuZXdJbmRleCwgY2hh
bmdlUmVmKTsKKyAgICAgICAgY2hhbmdlQ2hpbGQoZWRnZSwgbmV3Tm9kZSwgY2hhbmdlUmVmKTsK
ICAgICB9CiAgICAgCiAgICAgdm9pZCBjb21wYXJlQW5kU3dhcChFZGdlJiBlZGdlLCBFZGdlIG9s
ZEVkZ2UsIEVkZ2UgbmV3RWRnZSwgYm9vbCBjaGFuZ2VSZWYpCkBAIC0xNTYsNDQgKzE1NiwyOSBA
QCBwdWJsaWM6CiAgICAgICAgIGNoYW5nZUVkZ2UoZWRnZSwgbmV3RWRnZSwgY2hhbmdlUmVmKTsK
ICAgICB9CiAgICAgCi0gICAgdm9pZCBjbGVhckFuZERlcmVmQ2hpbGQxKE5vZGUmIG5vZGUpCi0g
ICAgewotICAgICAgICBpZiAoIW5vZGUuY2hpbGQxKCkpCi0gICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIGRlcmVmKG5vZGUuY2hpbGQxKCkpOwotICAgICAgICBub2RlLmNoaWxkcmVuLmNoaWxk
MSgpID0gRWRnZSgpOwotICAgIH0KLQotICAgIHZvaWQgY2xlYXJBbmREZXJlZkNoaWxkMihOb2Rl
JiBub2RlKQotICAgIHsKLSAgICAgICAgaWYgKCFub2RlLmNoaWxkMigpKQotICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICBkZXJlZihub2RlLmNoaWxkMigpKTsKLSAgICAgICAgbm9kZS5jaGls
ZHJlbi5jaGlsZDIoKSA9IEVkZ2UoKTsKLSAgICB9Ci0KLSAgICB2b2lkIGNsZWFyQW5kRGVyZWZD
aGlsZDMoTm9kZSYgbm9kZSkKKyAgICB2b2lkIGNsZWFyQW5kRGVyZWZDaGlsZChOb2RlKiBub2Rl
LCB1bnNpZ25lZCBpbmRleCkKICAgICB7Ci0gICAgICAgIGlmICghbm9kZS5jaGlsZDMoKSkKKyAg
ICAgICAgaWYgKCFub2RlLT5jaGlsZHJlbi5jaGlsZChpbmRleCkpCiAgICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIGRlcmVmKG5vZGUuY2hpbGQzKCkpOwotICAgICAgICBub2RlLmNoaWxkcmVu
LmNoaWxkMygpID0gRWRnZSgpOworICAgICAgICBkZXJlZihub2RlLT5jaGlsZHJlbi5jaGlsZChp
bmRleCkpOworICAgICAgICBub2RlLT5jaGlsZHJlbi5zZXRDaGlsZChpbmRleCwgRWRnZSgpKTsK
ICAgICB9CisgICAgdm9pZCBjbGVhckFuZERlcmVmQ2hpbGQxKE5vZGUqIG5vZGUpIHsgY2xlYXJB
bmREZXJlZkNoaWxkKG5vZGUsIDApOyB9CisgICAgdm9pZCBjbGVhckFuZERlcmVmQ2hpbGQyKE5v
ZGUqIG5vZGUpIHsgY2xlYXJBbmREZXJlZkNoaWxkKG5vZGUsIDEpOyB9CisgICAgdm9pZCBjbGVh
ckFuZERlcmVmQ2hpbGQzKE5vZGUqIG5vZGUpIHsgY2xlYXJBbmREZXJlZkNoaWxkKG5vZGUsIDIp
OyB9CiAgICAgCiAjZGVmaW5lIERGR19ERUZJTkVfQUREX05PREUodGVtcGxhdGVQcmUsIHRlbXBs
YXRlUG9zdCwgdHlwZVBhcmFtcywgdmFsdWVQYXJhbXNDb21tYSwgdmFsdWVQYXJhbXMsIHZhbHVl
QXJncykgXAotICAgIHRlbXBsYXRlUHJlIHR5cGVQYXJhbXMgdGVtcGxhdGVQb3N0IE5vZGVJbmRl
eCBhZGROb2RlKFJlZkNoaWxkcmVuTW9kZSByZWZDaGlsZHJlbk1vZGUsIFJlZk5vZGVNb2RlIHJl
Zk5vZGVNb2RlLCBTcGVjdWxhdGVkVHlwZSB0eXBlIHZhbHVlUGFyYW1zQ29tbWEgdmFsdWVQYXJh
bXMpIFwKKyAgICB0ZW1wbGF0ZVByZSB0eXBlUGFyYW1zIHRlbXBsYXRlUG9zdCBOb2RlKiBhZGRO
b2RlKFJlZkNoaWxkcmVuTW9kZSByZWZDaGlsZHJlbk1vZGUsIFJlZk5vZGVNb2RlIHJlZk5vZGVN
b2RlLCBTcGVjdWxhdGVkVHlwZSB0eXBlIHZhbHVlUGFyYW1zQ29tbWEgdmFsdWVQYXJhbXMpIFwK
ICAgICB7IFwKLSAgICAgICAgTm9kZSBub2RlID0gTm9kZSh2YWx1ZUFyZ3MpOyBcCi0gICAgICAg
IG5vZGUucHJlZGljdCh0eXBlKTsgXAotICAgICAgICBpZiAobm9kZS5mbGFncygpICYgTm9kZU11
c3RHZW5lcmF0ZSkgXAotICAgICAgICAgICAgbm9kZS5yZWYoKTsgXAorICAgICAgICBOb2RlKiBu
b2RlID0gbmV3IChtX2FsbG9jYXRvcikgTm9kZSh2YWx1ZUFyZ3MpOyBcCisgICAgICAgIG5vZGUt
PnByZWRpY3QodHlwZSk7IFwKKyAgICAgICAgaWYgKG5vZGUtPmZsYWdzKCkgJiBOb2RlTXVzdEdl
bmVyYXRlKSBcCisgICAgICAgICAgICBub2RlLT5yZWYoKTsgXAogICAgICAgICBpZiAocmVmTm9k
ZU1vZGUgPT0gUmVmTm9kZSkgXAotICAgICAgICAgICAgbm9kZS5yZWYoKTsgXAotICAgICAgICBO
b2RlSW5kZXggcmVzdWx0ID0gc2l6ZSgpOyBcCi0gICAgICAgIGFwcGVuZChub2RlKTsgXAorICAg
ICAgICAgICAgbm9kZS0+cmVmKCk7IFwKICAgICAgICAgaWYgKHJlZkNoaWxkcmVuTW9kZSA9PSBS
ZWZDaGlsZHJlbikgXAotICAgICAgICAgICAgcmVmQ2hpbGRyZW4ocmVzdWx0KTsgXAotICAgICAg
ICByZXR1cm4gcmVzdWx0OyBcCisgICAgICAgICAgICByZWZDaGlsZHJlbihub2RlKTsgXAorICAg
ICAgICByZXR1cm4gbm9kZTsgXAogICAgIH0KICAgICBERkdfVkFSSUFESUNfVEVNUExBVEVfRlVO
Q1RJT04oREZHX0RFRklORV9BRERfTk9ERSkKICN1bmRlZiBERkdfREVGSU5FX0FERF9OT0RFCkBA
IC0yMDQsMTQgKzE4OSwxNCBAQCBwdWJsaWM6CiAgICAgLy8gcmVmZXJlbmNlIGNvdW50cyBhY2Nv
cmRpbmcgdG8gcmVhY2hhYmlsaXR5LgogICAgIHZvaWQgY29sbGVjdEdhcmJhZ2UoKTsKICAgICAK
LSAgICB2b2lkIGNvbnZlcnRUb0NvbnN0YW50KE5vZGVJbmRleCBub2RlSW5kZXgsIHVuc2lnbmVk
IGNvbnN0YW50TnVtYmVyKQorICAgIHZvaWQgY29udmVydFRvQ29uc3RhbnQoTm9kZSogbm9kZSwg
dW5zaWduZWQgY29uc3RhbnROdW1iZXIpCiAgICAgewotICAgICAgICBhdChub2RlSW5kZXgpLmNv
bnZlcnRUb0NvbnN0YW50KGNvbnN0YW50TnVtYmVyKTsKKyAgICAgICAgbm9kZS0+Y29udmVydFRv
Q29uc3RhbnQoY29uc3RhbnROdW1iZXIpOwogICAgIH0KICAgICAKLSAgICB2b2lkIGNvbnZlcnRU
b0NvbnN0YW50KE5vZGVJbmRleCBub2RlSW5kZXgsIEpTVmFsdWUgdmFsdWUpCisgICAgdm9pZCBj
b252ZXJ0VG9Db25zdGFudChOb2RlKiBub2RlLCBKU1ZhbHVlIHZhbHVlKQogICAgIHsKLSAgICAg
ICAgY29udmVydFRvQ29uc3RhbnQobm9kZUluZGV4LCBtX2NvZGVCbG9jay0+YWRkT3JGaW5kQ29u
c3RhbnQodmFsdWUpKTsKKyAgICAgICAgY29udmVydFRvQ29uc3RhbnQobm9kZSwgbV9jb2RlQmxv
Y2stPmFkZE9yRmluZENvbnN0YW50KHZhbHVlKSk7CiAgICAgfQogCiAgICAgLy8gQ29kZUJsb2Nr
IGlzIG9wdGlvbmFsLCBidXQgbWF5IGFsbG93IGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gdG8gYmUg
ZHVtcGVkIChlLmcuIElkZW50aWZpZXIgbmFtZXMpLgpAQCAtMjE5LDEyNSArMjA0LDEyMCBAQCBw
dWJsaWM6CiAgICAgZW51bSBQaGlOb2RlRHVtcE1vZGUgeyBEdW1wTGl2ZVBoaXNPbmx5LCBEdW1w
QWxsUGhpcyB9OwogICAgIHZvaWQgZHVtcEJsb2NrSGVhZGVyKFByaW50U3RyZWFtJiwgY29uc3Qg
Y2hhciogcHJlZml4LCBCbG9ja0luZGV4LCBQaGlOb2RlRHVtcE1vZGUpOwogICAgIHZvaWQgZHVt
cChQcmludFN0cmVhbSYsIEVkZ2UpOwotICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYsIGNvbnN0
IGNoYXIqIHByZWZpeCwgTm9kZUluZGV4KTsKLSAgICBzdGF0aWMgaW50IGFtb3VudE9mTm9kZVdo
aXRlU3BhY2UoTm9kZSYpOwotICAgIHN0YXRpYyB2b2lkIHByaW50Tm9kZVdoaXRlU3BhY2UoUHJp
bnRTdHJlYW0mLCBOb2RlJik7CisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiwgY29uc3QgY2hh
ciogcHJlZml4LCBOb2RlKik7CisgICAgc3RhdGljIGludCBhbW91bnRPZk5vZGVXaGl0ZVNwYWNl
KE5vZGUqKTsKKyAgICBzdGF0aWMgdm9pZCBwcmludE5vZGVXaGl0ZVNwYWNlKFByaW50U3RyZWFt
JiwgTm9kZSopOwogCiAgICAgLy8gRHVtcCB0aGUgY29kZSBvcmlnaW4gb2YgdGhlIGdpdmVuIG5v
ZGUgYXMgYSBkaWZmIGZyb20gdGhlIGNvZGUgb3JpZ2luIG9mIHRoZQogICAgIC8vIHByZWNlZGlu
ZyBub2RlLiBSZXR1cm5zIHRydWUgaWYgYW55dGhpbmcgd2FzIHByaW50ZWQuCi0gICAgYm9vbCBk
dW1wQ29kZU9yaWdpbihQcmludFN0cmVhbSYsIGNvbnN0IGNoYXIqIHByZWZpeCwgTm9kZUluZGV4
LCBOb2RlSW5kZXgpOworICAgIGJvb2wgZHVtcENvZGVPcmlnaW4oUHJpbnRTdHJlYW0mLCBjb25z
dCBjaGFyKiBwcmVmaXgsIE5vZGUqIHByZXZpb3VzTm9kZSwgTm9kZSogY3VycmVudE5vZGUpOwog
CiAgICAgQmxvY2tJbmRleCBibG9ja0luZGV4Rm9yQnl0ZWNvZGVPZmZzZXQoVmVjdG9yPEJsb2Nr
SW5kZXg+JiBibG9ja3MsIHVuc2lnbmVkIGJ5dGVjb2RlQmVnaW4pOwogCi0gICAgU3BlY3VsYXRl
ZFR5cGUgZ2V0SlNDb25zdGFudFNwZWN1bGF0aW9uKE5vZGUmIG5vZGUpCisgICAgU3BlY3VsYXRl
ZFR5cGUgZ2V0SlNDb25zdGFudFNwZWN1bGF0aW9uKE5vZGUqIG5vZGUpCiAgICAgewotICAgICAg
ICByZXR1cm4gc3BlY3VsYXRpb25Gcm9tVmFsdWUobm9kZS52YWx1ZU9mSlNDb25zdGFudChtX2Nv
ZGVCbG9jaykpOworICAgICAgICByZXR1cm4gc3BlY3VsYXRpb25Gcm9tVmFsdWUobm9kZS0+dmFs
dWVPZkpTQ29uc3RhbnQobV9jb2RlQmxvY2spKTsKICAgICB9CiAgICAgCi0gICAgQWRkU3BlY3Vs
YXRpb25Nb2RlIGFkZFNwZWN1bGF0aW9uTW9kZShOb2RlJiBhZGQsIGJvb2wgbGVmdFNob3VsZFNw
ZWN1bGF0ZUludGVnZXIsIGJvb2wgcmlnaHRTaG91bGRTcGVjdWxhdGVJbnRlZ2VyKQorICAgIEFk
ZFNwZWN1bGF0aW9uTW9kZSBhZGRTcGVjdWxhdGlvbk1vZGUoTm9kZSogYWRkLCBib29sIGxlZnRT
aG91bGRTcGVjdWxhdGVJbnRlZ2VyLCBib29sIHJpZ2h0U2hvdWxkU3BlY3VsYXRlSW50ZWdlcikK
ICAgICB7Ci0gICAgICAgIEFTU0VSVChhZGQub3AoKSA9PSBWYWx1ZUFkZCB8fCBhZGQub3AoKSA9
PSBBcml0aEFkZCB8fCBhZGQub3AoKSA9PSBBcml0aFN1Yik7CisgICAgICAgIEFTU0VSVChhZGQt
Pm9wKCkgPT0gVmFsdWVBZGQgfHwgYWRkLT5vcCgpID09IEFyaXRoQWRkIHx8IGFkZC0+b3AoKSA9
PSBBcml0aFN1Yik7CiAgICAgICAgIAotICAgICAgICBOb2RlJiBsZWZ0ID0gYXQoYWRkLmNoaWxk
MSgpKTsKLSAgICAgICAgTm9kZSYgcmlnaHQgPSBhdChhZGQuY2hpbGQyKCkpOworICAgICAgICBO
b2RlKiBsZWZ0ID0gYWRkLT5jaGlsZDEoKS5ub2RlKCk7CisgICAgICAgIE5vZGUqIHJpZ2h0ID0g
YWRkLT5jaGlsZDIoKS5ub2RlKCk7CiAgICAgICAgIAotICAgICAgICBpZiAobGVmdC5oYXNDb25z
dGFudCgpKQorICAgICAgICBpZiAobGVmdC0+aGFzQ29uc3RhbnQoKSkKICAgICAgICAgICAgIHJl
dHVybiBhZGRJbW1lZGlhdGVTaG91bGRTcGVjdWxhdGVJbnRlZ2VyKGFkZCwgcmlnaHRTaG91bGRT
cGVjdWxhdGVJbnRlZ2VyLCBsZWZ0KTsKLSAgICAgICAgaWYgKHJpZ2h0Lmhhc0NvbnN0YW50KCkp
CisgICAgICAgIGlmIChyaWdodC0+aGFzQ29uc3RhbnQoKSkKICAgICAgICAgICAgIHJldHVybiBh
ZGRJbW1lZGlhdGVTaG91bGRTcGVjdWxhdGVJbnRlZ2VyKGFkZCwgbGVmdFNob3VsZFNwZWN1bGF0
ZUludGVnZXIsIHJpZ2h0KTsKICAgICAgICAgCi0gICAgICAgIHJldHVybiAobGVmdFNob3VsZFNw
ZWN1bGF0ZUludGVnZXIgJiYgcmlnaHRTaG91bGRTcGVjdWxhdGVJbnRlZ2VyICYmIGFkZC5jYW5T
cGVjdWxhdGVJbnRlZ2VyKCkpID8gU3BlY3VsYXRlSW50ZWdlciA6IERvbnRTcGVjdWxhdGVJbnRl
Z2VyOworICAgICAgICByZXR1cm4gKGxlZnRTaG91bGRTcGVjdWxhdGVJbnRlZ2VyICYmIHJpZ2h0
U2hvdWxkU3BlY3VsYXRlSW50ZWdlciAmJiBhZGQtPmNhblNwZWN1bGF0ZUludGVnZXIoKSkgPyBT
cGVjdWxhdGVJbnRlZ2VyIDogRG9udFNwZWN1bGF0ZUludGVnZXI7CiAgICAgfQogICAgIAotICAg
IEFkZFNwZWN1bGF0aW9uTW9kZSB2YWx1ZUFkZFNwZWN1bGF0aW9uTW9kZShOb2RlJiBhZGQpCisg
ICAgQWRkU3BlY3VsYXRpb25Nb2RlIHZhbHVlQWRkU3BlY3VsYXRpb25Nb2RlKE5vZGUqIGFkZCkK
ICAgICB7Ci0gICAgICAgIHJldHVybiBhZGRTcGVjdWxhdGlvbk1vZGUoYWRkLCBhdChhZGQuY2hp
bGQxKCkpLnNob3VsZFNwZWN1bGF0ZUludGVnZXJFeHBlY3RpbmdEZWZpbmVkKCksIGF0KGFkZC5j
aGlsZDIoKSkuc2hvdWxkU3BlY3VsYXRlSW50ZWdlckV4cGVjdGluZ0RlZmluZWQoKSk7CisgICAg
ICAgIHJldHVybiBhZGRTcGVjdWxhdGlvbk1vZGUoYWRkLCBhZGQtPmNoaWxkMSgpLT5zaG91bGRT
cGVjdWxhdGVJbnRlZ2VyRXhwZWN0aW5nRGVmaW5lZCgpLCBhZGQtPmNoaWxkMigpLT5zaG91bGRT
cGVjdWxhdGVJbnRlZ2VyRXhwZWN0aW5nRGVmaW5lZCgpKTsKICAgICB9CiAgICAgCi0gICAgQWRk
U3BlY3VsYXRpb25Nb2RlIGFyaXRoQWRkU3BlY3VsYXRpb25Nb2RlKE5vZGUmIGFkZCkKKyAgICBB
ZGRTcGVjdWxhdGlvbk1vZGUgYXJpdGhBZGRTcGVjdWxhdGlvbk1vZGUoTm9kZSogYWRkKQogICAg
IHsKLSAgICAgICAgcmV0dXJuIGFkZFNwZWN1bGF0aW9uTW9kZShhZGQsIGF0KGFkZC5jaGlsZDEo
KSkuc2hvdWxkU3BlY3VsYXRlSW50ZWdlckZvckFyaXRobWV0aWMoKSwgYXQoYWRkLmNoaWxkMigp
KS5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyRm9yQXJpdGhtZXRpYygpKTsKKyAgICAgICAgcmV0dXJu
IGFkZFNwZWN1bGF0aW9uTW9kZShhZGQsIGFkZC0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZUlu
dGVnZXJGb3JBcml0aG1ldGljKCksIGFkZC0+Y2hpbGQyKCktPnNob3VsZFNwZWN1bGF0ZUludGVn
ZXJGb3JBcml0aG1ldGljKCkpOwogICAgIH0KICAgICAKLSAgICBBZGRTcGVjdWxhdGlvbk1vZGUg
YWRkU3BlY3VsYXRpb25Nb2RlKE5vZGUmIGFkZCkKKyAgICBBZGRTcGVjdWxhdGlvbk1vZGUgYWRk
U3BlY3VsYXRpb25Nb2RlKE5vZGUqIGFkZCkKICAgICB7Ci0gICAgICAgIGlmIChhZGQub3AoKSA9
PSBWYWx1ZUFkZCkKKyAgICAgICAgaWYgKGFkZC0+b3AoKSA9PSBWYWx1ZUFkZCkKICAgICAgICAg
ICAgIHJldHVybiB2YWx1ZUFkZFNwZWN1bGF0aW9uTW9kZShhZGQpOwogICAgICAgICAKICAgICAg
ICAgcmV0dXJuIGFyaXRoQWRkU3BlY3VsYXRpb25Nb2RlKGFkZCk7CiAgICAgfQogICAgIAotICAg
IGJvb2wgYWRkU2hvdWxkU3BlY3VsYXRlSW50ZWdlcihOb2RlJiBhZGQpCisgICAgYm9vbCBhZGRT
aG91bGRTcGVjdWxhdGVJbnRlZ2VyKE5vZGUqIGFkZCkKICAgICB7CiAgICAgICAgIHJldHVybiBh
ZGRTcGVjdWxhdGlvbk1vZGUoYWRkKSAhPSBEb250U3BlY3VsYXRlSW50ZWdlcjsKICAgICB9CiAg
ICAgCi0gICAgYm9vbCBtdWxTaG91bGRTcGVjdWxhdGVJbnRlZ2VyKE5vZGUmIG11bCkKKyAgICBi
b29sIG11bFNob3VsZFNwZWN1bGF0ZUludGVnZXIoTm9kZSogbXVsKQogICAgIHsKLSAgICAgICAg
QVNTRVJUKG11bC5vcCgpID09IEFyaXRoTXVsKTsKKyAgICAgICAgQVNTRVJUKG11bC0+b3AoKSA9
PSBBcml0aE11bCk7CiAgICAgICAgIAotICAgICAgICBOb2RlJiBsZWZ0ID0gYXQobXVsLmNoaWxk
MSgpKTsKLSAgICAgICAgTm9kZSYgcmlnaHQgPSBhdChtdWwuY2hpbGQyKCkpOworICAgICAgICBO
b2RlKiBsZWZ0ID0gbXVsLT5jaGlsZDEoKS5ub2RlKCk7CisgICAgICAgIE5vZGUqIHJpZ2h0ID0g
bXVsLT5jaGlsZDIoKS5ub2RlKCk7CiAgICAgICAgIAotICAgICAgICByZXR1cm4gTm9kZTo6c2hv
dWxkU3BlY3VsYXRlSW50ZWdlckZvckFyaXRobWV0aWMobGVmdCwgcmlnaHQpICYmIG11bC5jYW5T
cGVjdWxhdGVJbnRlZ2VyKCk7Ci0gICAgfQotICAgIAotICAgIGJvb2wgbmVnYXRlU2hvdWxkU3Bl
Y3VsYXRlSW50ZWdlcihOb2RlJiBuZWdhdGUpCi0gICAgewotICAgICAgICBBU1NFUlQobmVnYXRl
Lm9wKCkgPT0gQXJpdGhOZWdhdGUpOwotICAgICAgICByZXR1cm4gYXQobmVnYXRlLmNoaWxkMSgp
KS5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyRm9yQXJpdGhtZXRpYygpICYmIG5lZ2F0ZS5jYW5TcGVj
dWxhdGVJbnRlZ2VyKCk7CisgICAgICAgIHJldHVybiBOb2RlOjpzaG91bGRTcGVjdWxhdGVJbnRl
Z2VyRm9yQXJpdGhtZXRpYyhsZWZ0LCByaWdodCkgJiYgbXVsLT5jYW5TcGVjdWxhdGVJbnRlZ2Vy
KCk7CiAgICAgfQogICAgIAotICAgIGJvb2wgYWRkU2hvdWxkU3BlY3VsYXRlSW50ZWdlcihOb2Rl
SW5kZXggbm9kZUluZGV4KQorICAgIGJvb2wgbmVnYXRlU2hvdWxkU3BlY3VsYXRlSW50ZWdlcihO
b2RlKiBuZWdhdGUpCiAgICAgewotICAgICAgICByZXR1cm4gYWRkU2hvdWxkU3BlY3VsYXRlSW50
ZWdlcihhdChub2RlSW5kZXgpKTsKKyAgICAgICAgQVNTRVJUKG5lZ2F0ZS0+b3AoKSA9PSBBcml0
aE5lZ2F0ZSk7CisgICAgICAgIHJldHVybiBuZWdhdGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxh
dGVJbnRlZ2VyRm9yQXJpdGhtZXRpYygpICYmIG5lZ2F0ZS0+Y2FuU3BlY3VsYXRlSW50ZWdlcigp
OwogICAgIH0KICAgICAKICAgICAvLyBIZWxwZXIgbWV0aG9kcyB0byBjaGVjayBub2RlcyBmb3Ig
Y29uc3RhbnRzLgotICAgIGJvb2wgaXNDb25zdGFudChOb2RlSW5kZXggbm9kZUluZGV4KQorICAg
IGJvb2wgaXNDb25zdGFudChOb2RlKiBub2RlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGF0KG5v
ZGVJbmRleCkuaGFzQ29uc3RhbnQoKTsKKyAgICAgICAgcmV0dXJuIG5vZGUtPmhhc0NvbnN0YW50
KCk7CiAgICAgfQotICAgIGJvb2wgaXNKU0NvbnN0YW50KE5vZGVJbmRleCBub2RlSW5kZXgpCisg
ICAgYm9vbCBpc0pTQ29uc3RhbnQoTm9kZSogbm9kZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBh
dChub2RlSW5kZXgpLmhhc0NvbnN0YW50KCk7CisgICAgICAgIHJldHVybiBub2RlLT5oYXNDb25z
dGFudCgpOwogICAgIH0KLSAgICBib29sIGlzSW50MzJDb25zdGFudChOb2RlSW5kZXggbm9kZUlu
ZGV4KQorICAgIGJvb2wgaXNJbnQzMkNvbnN0YW50KE5vZGUqIG5vZGUpCiAgICAgewotICAgICAg
ICByZXR1cm4gYXQobm9kZUluZGV4KS5pc0ludDMyQ29uc3RhbnQobV9jb2RlQmxvY2spOworICAg
ICAgICByZXR1cm4gbm9kZS0+aXNJbnQzMkNvbnN0YW50KG1fY29kZUJsb2NrKTsKICAgICB9Ci0g
ICAgYm9vbCBpc0RvdWJsZUNvbnN0YW50KE5vZGVJbmRleCBub2RlSW5kZXgpCisgICAgYm9vbCBp
c0RvdWJsZUNvbnN0YW50KE5vZGUqIG5vZGUpCiAgICAgewotICAgICAgICByZXR1cm4gYXQobm9k
ZUluZGV4KS5pc0RvdWJsZUNvbnN0YW50KG1fY29kZUJsb2NrKTsKKyAgICAgICAgcmV0dXJuIG5v
ZGUtPmlzRG91YmxlQ29uc3RhbnQobV9jb2RlQmxvY2spOwogICAgIH0KLSAgICBib29sIGlzTnVt
YmVyQ29uc3RhbnQoTm9kZUluZGV4IG5vZGVJbmRleCkKKyAgICBib29sIGlzTnVtYmVyQ29uc3Rh
bnQoTm9kZSogbm9kZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBhdChub2RlSW5kZXgpLmlzTnVt
YmVyQ29uc3RhbnQobV9jb2RlQmxvY2spOworICAgICAgICByZXR1cm4gbm9kZS0+aXNOdW1iZXJD
b25zdGFudChtX2NvZGVCbG9jayk7CiAgICAgfQotICAgIGJvb2wgaXNCb29sZWFuQ29uc3RhbnQo
Tm9kZUluZGV4IG5vZGVJbmRleCkKKyAgICBib29sIGlzQm9vbGVhbkNvbnN0YW50KE5vZGUqIG5v
ZGUpCiAgICAgewotICAgICAgICByZXR1cm4gYXQobm9kZUluZGV4KS5pc0Jvb2xlYW5Db25zdGFu
dChtX2NvZGVCbG9jayk7CisgICAgICAgIHJldHVybiBub2RlLT5pc0Jvb2xlYW5Db25zdGFudCht
X2NvZGVCbG9jayk7CiAgICAgfQotICAgIGJvb2wgaXNDZWxsQ29uc3RhbnQoTm9kZUluZGV4IG5v
ZGVJbmRleCkKKyAgICBib29sIGlzQ2VsbENvbnN0YW50KE5vZGUqIG5vZGUpCiAgICAgewotICAg
ICAgICBpZiAoIWlzSlNDb25zdGFudChub2RlSW5kZXgpKQorICAgICAgICBpZiAoIWlzSlNDb25z
dGFudChub2RlKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgSlNWYWx1ZSB2
YWx1ZSA9IHZhbHVlT2ZKU0NvbnN0YW50KG5vZGVJbmRleCk7CisgICAgICAgIEpTVmFsdWUgdmFs
dWUgPSB2YWx1ZU9mSlNDb25zdGFudChub2RlKTsKICAgICAgICAgcmV0dXJuIHZhbHVlLmlzQ2Vs
bCgpICYmICEhdmFsdWU7CiAgICAgfQotICAgIGJvb2wgaXNGdW5jdGlvbkNvbnN0YW50KE5vZGVJ
bmRleCBub2RlSW5kZXgpCisgICAgYm9vbCBpc0Z1bmN0aW9uQ29uc3RhbnQoTm9kZSogbm9kZSkK
ICAgICB7Ci0gICAgICAgIGlmICghaXNKU0NvbnN0YW50KG5vZGVJbmRleCkpCisgICAgICAgIGlm
ICghaXNKU0NvbnN0YW50KG5vZGUpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
ICBpZiAoIWdldEpTRnVuY3Rpb24odmFsdWVPZkpTQ29uc3RhbnQobm9kZUluZGV4KSkpCisgICAg
ICAgIGlmICghZ2V0SlNGdW5jdGlvbih2YWx1ZU9mSlNDb25zdGFudChub2RlKSkpCiAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KLSAgICBib29s
IGlzSW50ZXJuYWxGdW5jdGlvbkNvbnN0YW50KE5vZGVJbmRleCBub2RlSW5kZXgpCisgICAgYm9v
bCBpc0ludGVybmFsRnVuY3Rpb25Db25zdGFudChOb2RlKiBub2RlKQogICAgIHsKLSAgICAgICAg
aWYgKCFpc0pTQ29uc3RhbnQobm9kZUluZGV4KSkKKyAgICAgICAgaWYgKCFpc0pTQ29uc3RhbnQo
bm9kZSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIEpTVmFsdWUgdmFsdWUg
PSB2YWx1ZU9mSlNDb25zdGFudChub2RlSW5kZXgpOworICAgICAgICBKU1ZhbHVlIHZhbHVlID0g
dmFsdWVPZkpTQ29uc3RhbnQobm9kZSk7CiAgICAgICAgIGlmICghdmFsdWUuaXNDZWxsKCkgfHwg
IXZhbHVlKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBKU0NlbGwqIGNlbGwg
PSB2YWx1ZS5hc0NlbGwoKTsKQEAgLTM0NiwyNSArMzI2LDI1IEBAIHB1YmxpYzoKICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgfQogICAgIC8vIEhlbHBlciBtZXRob2RzIGdldCBjb25zdGFudCB2
YWx1ZXMgZnJvbSBub2Rlcy4KLSAgICBKU1ZhbHVlIHZhbHVlT2ZKU0NvbnN0YW50KE5vZGVJbmRl
eCBub2RlSW5kZXgpCisgICAgSlNWYWx1ZSB2YWx1ZU9mSlNDb25zdGFudChOb2RlKiBub2RlKQog
ICAgIHsKLSAgICAgICAgcmV0dXJuIGF0KG5vZGVJbmRleCkudmFsdWVPZkpTQ29uc3RhbnQobV9j
b2RlQmxvY2spOworICAgICAgICByZXR1cm4gbm9kZS0+dmFsdWVPZkpTQ29uc3RhbnQobV9jb2Rl
QmxvY2spOwogICAgIH0KLSAgICBpbnQzMl90IHZhbHVlT2ZJbnQzMkNvbnN0YW50KE5vZGVJbmRl
eCBub2RlSW5kZXgpCisgICAgaW50MzJfdCB2YWx1ZU9mSW50MzJDb25zdGFudChOb2RlKiBub2Rl
KQogICAgIHsKLSAgICAgICAgcmV0dXJuIHZhbHVlT2ZKU0NvbnN0YW50KG5vZGVJbmRleCkuYXNJ
bnQzMigpOworICAgICAgICByZXR1cm4gdmFsdWVPZkpTQ29uc3RhbnQobm9kZSkuYXNJbnQzMigp
OwogICAgIH0KLSAgICBkb3VibGUgdmFsdWVPZk51bWJlckNvbnN0YW50KE5vZGVJbmRleCBub2Rl
SW5kZXgpCisgICAgZG91YmxlIHZhbHVlT2ZOdW1iZXJDb25zdGFudChOb2RlKiBub2RlKQogICAg
IHsKLSAgICAgICAgcmV0dXJuIHZhbHVlT2ZKU0NvbnN0YW50KG5vZGVJbmRleCkuYXNOdW1iZXIo
KTsKKyAgICAgICAgcmV0dXJuIHZhbHVlT2ZKU0NvbnN0YW50KG5vZGUpLmFzTnVtYmVyKCk7CiAg
ICAgfQotICAgIGJvb2wgdmFsdWVPZkJvb2xlYW5Db25zdGFudChOb2RlSW5kZXggbm9kZUluZGV4
KQorICAgIGJvb2wgdmFsdWVPZkJvb2xlYW5Db25zdGFudChOb2RlKiBub2RlKQogICAgIHsKLSAg
ICAgICAgcmV0dXJuIHZhbHVlT2ZKU0NvbnN0YW50KG5vZGVJbmRleCkuYXNCb29sZWFuKCk7Cisg
ICAgICAgIHJldHVybiB2YWx1ZU9mSlNDb25zdGFudChub2RlKS5hc0Jvb2xlYW4oKTsKICAgICB9
Ci0gICAgSlNGdW5jdGlvbiogdmFsdWVPZkZ1bmN0aW9uQ29uc3RhbnQoTm9kZUluZGV4IG5vZGVJ
bmRleCkKKyAgICBKU0Z1bmN0aW9uKiB2YWx1ZU9mRnVuY3Rpb25Db25zdGFudChOb2RlKiBub2Rl
KQogICAgIHsKLSAgICAgICAgSlNDZWxsKiBmdW5jdGlvbiA9IGdldEpTRnVuY3Rpb24odmFsdWVP
ZkpTQ29uc3RhbnQobm9kZUluZGV4KSk7CisgICAgICAgIEpTQ2VsbCogZnVuY3Rpb24gPSBnZXRK
U0Z1bmN0aW9uKHZhbHVlT2ZKU0NvbnN0YW50KG5vZGUpKTsKICAgICAgICAgQVNTRVJUKGZ1bmN0
aW9uKTsKICAgICAgICAgcmV0dXJuIGpzQ2FzdDxKU0Z1bmN0aW9uKj4oZnVuY3Rpb24pOwogICAg
IH0KQEAgLTQzOSw0NSArNDE5LDQzIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1fY29kZUJs
b2NrLT51bmNoZWNrZWRBY3RpdmF0aW9uUmVnaXN0ZXIoKTsKICAgICB9CiAgICAgCi0gICAgVmFs
dWVQcm9maWxlKiB2YWx1ZVByb2ZpbGVGb3IoTm9kZUluZGV4IG5vZGVJbmRleCkKKyAgICBWYWx1
ZVByb2ZpbGUqIHZhbHVlUHJvZmlsZUZvcihOb2RlKiBub2RlKQogICAgIHsKLSAgICAgICAgaWYg
KG5vZGVJbmRleCA9PSBOb05vZGUpCisgICAgICAgIGlmICghbm9kZSkKICAgICAgICAgICAgIHJl
dHVybiAwOwogICAgICAgICAKLSAgICAgICAgTm9kZSYgbm9kZSA9IGF0KG5vZGVJbmRleCk7Ci0g
ICAgICAgIENvZGVCbG9jayogcHJvZmlsZWRCbG9jayA9IGJhc2VsaW5lQ29kZUJsb2NrRm9yKG5v
ZGUuY29kZU9yaWdpbik7CisgICAgICAgIENvZGVCbG9jayogcHJvZmlsZWRCbG9jayA9IGJhc2Vs
aW5lQ29kZUJsb2NrRm9yKG5vZGUtPmNvZGVPcmlnaW4pOwogICAgICAgICAKLSAgICAgICAgaWYg
KG5vZGUuaGFzTG9jYWwoKSkgewotICAgICAgICAgICAgaWYgKCFvcGVyYW5kSXNBcmd1bWVudChu
b2RlLmxvY2FsKCkpKQorICAgICAgICBpZiAobm9kZS0+aGFzTG9jYWwoKSkgeworICAgICAgICAg
ICAgaWYgKCFvcGVyYW5kSXNBcmd1bWVudChub2RlLT5sb2NhbCgpKSkKICAgICAgICAgICAgICAg
ICByZXR1cm4gMDsKLSAgICAgICAgICAgIGludCBhcmd1bWVudCA9IG9wZXJhbmRUb0FyZ3VtZW50
KG5vZGUubG9jYWwoKSk7Ci0gICAgICAgICAgICBpZiAobm9kZS52YXJpYWJsZUFjY2Vzc0RhdGEo
KSAhPSBhdChtX2FyZ3VtZW50c1thcmd1bWVudF0pLnZhcmlhYmxlQWNjZXNzRGF0YSgpKQorICAg
ICAgICAgICAgaW50IGFyZ3VtZW50ID0gb3BlcmFuZFRvQXJndW1lbnQobm9kZS0+bG9jYWwoKSk7
CisgICAgICAgICAgICBpZiAobm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCkgIT0gbV9hcmd1bWVu
dHNbYXJndW1lbnRdLT52YXJpYWJsZUFjY2Vzc0RhdGEoKSkKICAgICAgICAgICAgICAgICByZXR1
cm4gMDsKICAgICAgICAgICAgIHJldHVybiBwcm9maWxlZEJsb2NrLT52YWx1ZVByb2ZpbGVGb3JB
cmd1bWVudChhcmd1bWVudCk7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIGlmIChub2Rl
Lmhhc0hlYXBQcmVkaWN0aW9uKCkpCi0gICAgICAgICAgICByZXR1cm4gcHJvZmlsZWRCbG9jay0+
dmFsdWVQcm9maWxlRm9yQnl0ZWNvZGVPZmZzZXQobm9kZS5jb2RlT3JpZ2luLmJ5dGVjb2RlSW5k
ZXhGb3JWYWx1ZVByb2ZpbGUoKSk7CisgICAgICAgIGlmIChub2RlLT5oYXNIZWFwUHJlZGljdGlv
bigpKQorICAgICAgICAgICAgcmV0dXJuIHByb2ZpbGVkQmxvY2stPnZhbHVlUHJvZmlsZUZvckJ5
dGVjb2RlT2Zmc2V0KG5vZGUtPmNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleEZvclZhbHVlUHJvZmls
ZSgpKTsKICAgICAgICAgCiAgICAgICAgIHJldHVybiAwOwogICAgIH0KICAgICAKLSAgICBNZXRo
b2RPZkdldHRpbmdBVmFsdWVQcm9maWxlIG1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGVGb3Io
Tm9kZUluZGV4IG5vZGVJbmRleCkKKyAgICBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlIG1l
dGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGVGb3IoTm9kZSogbm9kZSkKICAgICB7Ci0gICAgICAg
IGlmIChub2RlSW5kZXggPT0gTm9Ob2RlKQorICAgICAgICBpZiAoIW5vZGUpCiAgICAgICAgICAg
ICByZXR1cm4gTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZSgpOwogICAgICAgICAKLSAgICAg
ICAgTm9kZSYgbm9kZSA9IGF0KG5vZGVJbmRleCk7Ci0gICAgICAgIENvZGVCbG9jayogcHJvZmls
ZWRCbG9jayA9IGJhc2VsaW5lQ29kZUJsb2NrRm9yKG5vZGUuY29kZU9yaWdpbik7CisgICAgICAg
IENvZGVCbG9jayogcHJvZmlsZWRCbG9jayA9IGJhc2VsaW5lQ29kZUJsb2NrRm9yKG5vZGUtPmNv
ZGVPcmlnaW4pOwogICAgICAgICAKLSAgICAgICAgaWYgKG5vZGUub3AoKSA9PSBHZXRMb2NhbCkg
eworICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBHZXRMb2NhbCkgewogICAgICAgICAgICAgcmV0
dXJuIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGU6OmZyb21MYXp5T3BlcmFuZCgKICAgICAg
ICAgICAgICAgICBwcm9maWxlZEJsb2NrLAogICAgICAgICAgICAgICAgIExhenlPcGVyYW5kVmFs
dWVQcm9maWxlS2V5KAotICAgICAgICAgICAgICAgICAgICBub2RlLmNvZGVPcmlnaW4uYnl0ZWNv
ZGVJbmRleCwgbm9kZS5sb2NhbCgpKSk7CisgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNvZGVP
cmlnaW4uYnl0ZWNvZGVJbmRleCwgbm9kZS0+bG9jYWwoKSkpOwogICAgICAgICB9CiAgICAgICAg
IAotICAgICAgICByZXR1cm4gTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZSh2YWx1ZVByb2Zp
bGVGb3Iobm9kZUluZGV4KSk7CisgICAgICAgIHJldHVybiBNZXRob2RPZkdldHRpbmdBVmFsdWVQ
cm9maWxlKHZhbHVlUHJvZmlsZUZvcihub2RlKSk7CiAgICAgfQogICAgIAogICAgIGJvb2wgbmVl
ZHNBY3RpdmF0aW9uKCkgY29uc3QKQEAgLTUwMSwyMSArNDc5LDIxIEBAIHB1YmxpYzoKICAgICAK
ICAgICB1bnNpZ25lZCBudW1TdWNjZXNzb3JzKEJhc2ljQmxvY2sqIGJsb2NrKQogICAgIHsKLSAg
ICAgICAgcmV0dXJuIGF0KGJsb2NrLT5sYXN0KCkpLm51bVN1Y2Nlc3NvcnMoKTsKKyAgICAgICAg
cmV0dXJuIGJsb2NrLT5sYXN0KCktPm51bVN1Y2Nlc3NvcnMoKTsKICAgICB9CiAgICAgQmxvY2tJ
bmRleCBzdWNjZXNzb3IoQmFzaWNCbG9jayogYmxvY2ssIHVuc2lnbmVkIGluZGV4KQogICAgIHsK
LSAgICAgICAgcmV0dXJuIGF0KGJsb2NrLT5sYXN0KCkpLnN1Y2Nlc3NvcihpbmRleCk7CisgICAg
ICAgIHJldHVybiBibG9jay0+bGFzdCgpLT5zdWNjZXNzb3IoaW5kZXgpOwogICAgIH0KICAgICBC
bG9ja0luZGV4IHN1Y2Nlc3NvckZvckNvbmRpdGlvbihCYXNpY0Jsb2NrKiBibG9jaywgYm9vbCBj
b25kaXRpb24pCiAgICAgewotICAgICAgICByZXR1cm4gYXQoYmxvY2stPmxhc3QoKSkuc3VjY2Vz
c29yRm9yQ29uZGl0aW9uKGNvbmRpdGlvbik7CisgICAgICAgIHJldHVybiBibG9jay0+bGFzdCgp
LT5zdWNjZXNzb3JGb3JDb25kaXRpb24oY29uZGl0aW9uKTsKICAgICB9CiAgICAgCi0gICAgYm9v
bCBpc1ByZWRpY3RlZE51bWVyaWNhbChOb2RlJiBub2RlKQorICAgIGJvb2wgaXNQcmVkaWN0ZWRO
dW1lcmljYWwoTm9kZSogbm9kZSkKICAgICB7Ci0gICAgICAgIFNwZWN1bGF0ZWRUeXBlIGxlZnQg
PSBhdChub2RlLmNoaWxkMSgpKS5wcmVkaWN0aW9uKCk7Ci0gICAgICAgIFNwZWN1bGF0ZWRUeXBl
IHJpZ2h0ID0gYXQobm9kZS5jaGlsZDIoKSkucHJlZGljdGlvbigpOworICAgICAgICBTcGVjdWxh
dGVkVHlwZSBsZWZ0ID0gbm9kZS0+Y2hpbGQxKCktPnByZWRpY3Rpb24oKTsKKyAgICAgICAgU3Bl
Y3VsYXRlZFR5cGUgcmlnaHQgPSBub2RlLT5jaGlsZDIoKS0+cHJlZGljdGlvbigpOwogICAgICAg
ICByZXR1cm4gaXNOdW1iZXJTcGVjdWxhdGlvbihsZWZ0KSAmJiBpc051bWJlclNwZWN1bGF0aW9u
KHJpZ2h0KTsKICAgICB9CiAgICAgCkBAIC01MjUsMjMgKzUwMywyMyBAQCBwdWJsaWM6CiAgICAg
Ly8gLSBQdXRCeVZhbCBkZWZpbml0ZWx5IGNoYW5nZXMgdGhlIGFycmF5IGl0IHN0b3JlcyB0bywg
YW5kIG1heSBldmVuIGNoYW5nZSBpdHMgbGVuZ3RoLgogICAgIC8vIC0gUHV0QnlPZmZzZXQgZGVm
aW5pdGVseSBjaGFuZ2VzIHRoZSBvYmplY3QgaXQgc3RvcmVzIHRvLgogICAgIC8vIC0gYW5kIHNv
IG9uLgotICAgIGJvb2wgYnlWYWxJc1B1cmUoTm9kZSYgbm9kZSkKKyAgICBib29sIGJ5VmFsSXNQ
dXJlKE5vZGUqIG5vZGUpCiAgICAgewotICAgICAgICBzd2l0Y2ggKG5vZGUuYXJyYXlNb2RlKCku
dHlwZSgpKSB7CisgICAgICAgIHN3aXRjaCAobm9kZS0+YXJyYXlNb2RlKCkudHlwZSgpKSB7CiAg
ICAgICAgIGNhc2UgQXJyYXk6OkdlbmVyaWM6CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgICAgIGNhc2UgQXJyYXk6OkludDMyOgogICAgICAgICBjYXNlIEFycmF5OjpEb3VibGU6CiAg
ICAgICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3VvdXM6CiAgICAgICAgIGNhc2UgQXJyYXk6OkFycmF5
U3RvcmFnZToKLSAgICAgICAgICAgIHJldHVybiAhbm9kZS5hcnJheU1vZGUoKS5pc091dE9mQm91
bmRzKCk7CisgICAgICAgICAgICByZXR1cm4gIW5vZGUtPmFycmF5TW9kZSgpLmlzT3V0T2ZCb3Vu
ZHMoKTsKICAgICAgICAgY2FzZSBBcnJheTo6U2xvd1B1dEFycmF5U3RvcmFnZToKLSAgICAgICAg
ICAgIHJldHVybiAhbm9kZS5hcnJheU1vZGUoKS5tYXlTdG9yZVRvSG9sZSgpOworICAgICAgICAg
ICAgcmV0dXJuICFub2RlLT5hcnJheU1vZGUoKS5tYXlTdG9yZVRvSG9sZSgpOwogICAgICAgICBj
YXNlIEFycmF5OjpTdHJpbmc6Ci0gICAgICAgICAgICByZXR1cm4gbm9kZS5vcCgpID09IEdldEJ5
VmFsOworICAgICAgICAgICAgcmV0dXJuIG5vZGUtPm9wKCkgPT0gR2V0QnlWYWw7CiAjaWYgVVNF
KEpTVkFMVUUzMl82NCkKICAgICAgICAgY2FzZSBBcnJheTo6QXJndW1lbnRzOgotICAgICAgICAg
ICAgaWYgKG5vZGUub3AoKSA9PSBHZXRCeVZhbCkKKyAgICAgICAgICAgIGlmIChub2RlLT5vcCgp
ID09IEdldEJ5VmFsKQogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwogI2VuZGlmIC8vIFVTRShKU1ZBTFVFMzJfNjQpCkBAIC01NTAsMTMgKzUy
OCwxMyBAQCBwdWJsaWM6CiAgICAgICAgIH0KICAgICB9CiAgICAgCi0gICAgYm9vbCBjbG9iYmVy
c1dvcmxkKE5vZGUmIG5vZGUpCisgICAgYm9vbCBjbG9iYmVyc1dvcmxkKE5vZGUqIG5vZGUpCiAg
ICAgewotICAgICAgICBpZiAobm9kZS5mbGFncygpICYgTm9kZUNsb2JiZXJzV29ybGQpCisgICAg
ICAgIGlmIChub2RlLT5mbGFncygpICYgTm9kZUNsb2JiZXJzV29ybGQpCiAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICAgICAgaWYgKCEobm9kZS5mbGFncygpICYgTm9kZU1pZ2h0Q2xvYmJl
cikpCisgICAgICAgIGlmICghKG5vZGUtPmZsYWdzKCkgJiBOb2RlTWlnaHRDbG9iYmVyKSkKICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgc3dpdGNoIChub2RlLm9wKCkpIHsKKyAg
ICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CiAgICAgICAgIGNhc2UgVmFsdWVBZGQ6CiAgICAg
ICAgIGNhc2UgQ29tcGFyZUxlc3M6CiAgICAgICAgIGNhc2UgQ29tcGFyZUxlc3NFcToKQEAgLTU3
NCwxMDIgKzU1MiwxMDEgQEAgcHVibGljOgogICAgICAgICB9CiAgICAgfQogICAgIAotICAgIGJv
b2wgY2xvYmJlcnNXb3JsZChOb2RlSW5kZXggbm9kZUluZGV4KQotICAgIHsKLSAgICAgICAgcmV0
dXJuIGNsb2JiZXJzV29ybGQoYXQobm9kZUluZGV4KSk7Ci0gICAgfQotICAgIAogICAgIHZvaWQg
ZGV0ZXJtaW5lUmVhY2hhYmlsaXR5KCk7CiAgICAgdm9pZCByZXNldFJlYWNoYWJpbGl0eSgpOwog
ICAgIAogICAgIHZvaWQgcmVzZXRFeGl0U3RhdGVzKCk7CiAgICAgCi0gICAgdW5zaWduZWQgdmFy
QXJnTnVtQ2hpbGRyZW4oTm9kZSYgbm9kZSkKKyAgICB1bnNpZ25lZCB2YXJBcmdOdW1DaGlsZHJl
bihOb2RlKiBub2RlKQogICAgIHsKLSAgICAgICAgQVNTRVJUKG5vZGUuZmxhZ3MoKSAmIE5vZGVI
YXNWYXJBcmdzKTsKLSAgICAgICAgcmV0dXJuIG5vZGUubnVtQ2hpbGRyZW4oKTsKKyAgICAgICAg
QVNTRVJUKG5vZGUtPmZsYWdzKCkgJiBOb2RlSGFzVmFyQXJncyk7CisgICAgICAgIHJldHVybiBu
b2RlLT5udW1DaGlsZHJlbigpOwogICAgIH0KICAgICAKLSAgICB1bnNpZ25lZCBudW1DaGlsZHJl
bihOb2RlJiBub2RlKQorICAgIHVuc2lnbmVkIG51bUNoaWxkcmVuKE5vZGUqIG5vZGUpCiAgICAg
ewotICAgICAgICBpZiAobm9kZS5mbGFncygpICYgTm9kZUhhc1ZhckFyZ3MpCisgICAgICAgIGlm
IChub2RlLT5mbGFncygpICYgTm9kZUhhc1ZhckFyZ3MpCiAgICAgICAgICAgICByZXR1cm4gdmFy
QXJnTnVtQ2hpbGRyZW4obm9kZSk7CiAgICAgICAgIHJldHVybiBBZGphY2VuY3lMaXN0OjpTaXpl
OwogICAgIH0KICAgICAKLSAgICBFZGdlJiB2YXJBcmdDaGlsZChOb2RlJiBub2RlLCB1bnNpZ25l
ZCBpbmRleCkKKyAgICBFZGdlJiB2YXJBcmdDaGlsZChOb2RlKiBub2RlLCB1bnNpZ25lZCBpbmRl
eCkKICAgICB7Ci0gICAgICAgIEFTU0VSVChub2RlLmZsYWdzKCkgJiBOb2RlSGFzVmFyQXJncyk7
Ci0gICAgICAgIHJldHVybiBtX3ZhckFyZ0NoaWxkcmVuW25vZGUuZmlyc3RDaGlsZCgpICsgaW5k
ZXhdOworICAgICAgICBBU1NFUlQobm9kZS0+ZmxhZ3MoKSAmIE5vZGVIYXNWYXJBcmdzKTsKKyAg
ICAgICAgcmV0dXJuIG1fdmFyQXJnQ2hpbGRyZW5bbm9kZS0+Zmlyc3RDaGlsZCgpICsgaW5kZXhd
OwogICAgIH0KICAgICAKLSAgICBFZGdlJiBjaGlsZChOb2RlJiBub2RlLCB1bnNpZ25lZCBpbmRl
eCkKKyAgICBFZGdlJiBjaGlsZChOb2RlKiBub2RlLCB1bnNpZ25lZCBpbmRleCkKICAgICB7Ci0g
ICAgICAgIGlmIChub2RlLmZsYWdzKCkgJiBOb2RlSGFzVmFyQXJncykKKyAgICAgICAgaWYgKG5v
ZGUtPmZsYWdzKCkgJiBOb2RlSGFzVmFyQXJncykKICAgICAgICAgICAgIHJldHVybiB2YXJBcmdD
aGlsZChub2RlLCBpbmRleCk7Ci0gICAgICAgIHJldHVybiBub2RlLmNoaWxkcmVuLmNoaWxkKGlu
ZGV4KTsKKyAgICAgICAgcmV0dXJuIG5vZGUtPmNoaWxkcmVuLmNoaWxkKGluZGV4KTsKICAgICB9
CiAgICAgCi0gICAgdm9pZCB2b3RlKEVkZ2UgZWRnZSwgdW5zaWduZWQgYmFsbG90KQorICAgIHZv
aWQgdm90ZU5vZGUoTm9kZSogbm9kZSwgdW5zaWduZWQgYmFsbG90KQogICAgIHsKLSAgICAgICAg
c3dpdGNoIChhdChlZGdlKS5vcCgpKSB7CisgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewog
ICAgICAgICBjYXNlIFZhbHVlVG9JbnQzMjoKICAgICAgICAgY2FzZSBVSW50MzJUb051bWJlcjoK
LSAgICAgICAgICAgIGVkZ2UgPSBhdChlZGdlKS5jaGlsZDEoKTsKKyAgICAgICAgICAgIG5vZGUg
PSBub2RlLT5jaGlsZDEoKS5ub2RlKCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgZGVm
YXVsdDoKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBp
ZiAoYXQoZWRnZSkub3AoKSA9PSBHZXRMb2NhbCkKLSAgICAgICAgICAgIGF0KGVkZ2UpLnZhcmlh
YmxlQWNjZXNzRGF0YSgpLT52b3RlKGJhbGxvdCk7CisgICAgICAgIGlmIChub2RlLT5vcCgpID09
IEdldExvY2FsKQorICAgICAgICAgICAgbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCktPnZvdGUo
YmFsbG90KTsKICAgICB9CiAgICAgCi0gICAgdm9pZCB2b3RlKE5vZGUmIG5vZGUsIHVuc2lnbmVk
IGJhbGxvdCkKKyAgICB2b2lkIHZvdGVOb2RlKEVkZ2UgZWRnZSwgdW5zaWduZWQgYmFsbG90KQog
ICAgIHsKLSAgICAgICAgaWYgKG5vZGUuZmxhZ3MoKSAmIE5vZGVIYXNWYXJBcmdzKSB7Ci0gICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGNoaWxkSWR4ID0gbm9kZS5maXJzdENoaWxkKCk7Ci0gICAg
ICAgICAgICAgICAgIGNoaWxkSWR4IDwgbm9kZS5maXJzdENoaWxkKCkgKyBub2RlLm51bUNoaWxk
cmVuKCk7Ci0gICAgICAgICAgICAgICAgIGNoaWxkSWR4KyspIHsKKyAgICAgICAgdm90ZU5vZGUo
ZWRnZS5ub2RlKCksIGJhbGxvdCk7CisgICAgfQorICAgIAorICAgIHZvaWQgdm90ZUNoaWxkcmVu
KE5vZGUqIG5vZGUsIHVuc2lnbmVkIGJhbGxvdCkKKyAgICB7CisgICAgICAgIGlmIChub2RlLT5m
bGFncygpICYgTm9kZUhhc1ZhckFyZ3MpIHsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgY2hp
bGRJZHggPSBub2RlLT5maXJzdENoaWxkKCk7CisgICAgICAgICAgICAgICAgY2hpbGRJZHggPCBu
b2RlLT5maXJzdENoaWxkKCkgKyBub2RlLT5udW1DaGlsZHJlbigpOworICAgICAgICAgICAgICAg
IGNoaWxkSWR4KyspIHsKICAgICAgICAgICAgICAgICBpZiAoISFtX3ZhckFyZ0NoaWxkcmVuW2No
aWxkSWR4XSkKLSAgICAgICAgICAgICAgICAgICAgdm90ZShtX3ZhckFyZ0NoaWxkcmVuW2NoaWxk
SWR4XSwgYmFsbG90KTsKKyAgICAgICAgICAgICAgICAgICAgdm90ZU5vZGUobV92YXJBcmdDaGls
ZHJlbltjaGlsZElkeF0sIGJhbGxvdCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIGlmICghbm9kZS5jaGlsZDEoKSkKKyAg
ICAgICAgaWYgKCFub2RlLT5jaGlsZDEoKSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
dm90ZShub2RlLmNoaWxkMSgpLCBiYWxsb3QpOwotICAgICAgICBpZiAoIW5vZGUuY2hpbGQyKCkp
CisgICAgICAgIHZvdGVOb2RlKG5vZGUtPmNoaWxkMSgpLCBiYWxsb3QpOworICAgICAgICBpZiAo
IW5vZGUtPmNoaWxkMigpKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB2b3RlKG5vZGUu
Y2hpbGQyKCksIGJhbGxvdCk7Ci0gICAgICAgIGlmICghbm9kZS5jaGlsZDMoKSkKKyAgICAgICAg
dm90ZU5vZGUobm9kZS0+Y2hpbGQyKCksIGJhbGxvdCk7CisgICAgICAgIGlmICghbm9kZS0+Y2hp
bGQzKCkpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIHZvdGUobm9kZS5jaGlsZDMoKSwg
YmFsbG90KTsKKyAgICAgICAgdm90ZU5vZGUobm9kZS0+Y2hpbGQzKCksIGJhbGxvdCk7CiAgICAg
fQogICAgIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IC8vIFQgPSBOb2RlSW5kZXggb3IgRWRn
ZQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IC8vIFQgPSBOb2RlKiBvciBFZGdlCiAgICAgdm9p
ZCBzdWJzdGl0dXRlKEJhc2ljQmxvY2smIGJsb2NrLCB1bnNpZ25lZCBzdGFydEluZGV4SW5CbG9j
aywgVCBvbGRUaGluZywgVCBuZXdUaGluZykKICAgICB7CiAgICAgICAgIGZvciAodW5zaWduZWQg
aW5kZXhJbkJsb2NrID0gc3RhcnRJbmRleEluQmxvY2s7IGluZGV4SW5CbG9jayA8IGJsb2NrLnNp
emUoKTsgKytpbmRleEluQmxvY2spIHsKLSAgICAgICAgICAgIE5vZGVJbmRleCBub2RlSW5kZXgg
PSBibG9ja1tpbmRleEluQmxvY2tdOwotICAgICAgICAgICAgTm9kZSYgbm9kZSA9IGF0KG5vZGVJ
bmRleCk7Ci0gICAgICAgICAgICBpZiAobm9kZS5mbGFncygpICYgTm9kZUhhc1ZhckFyZ3MpIHsK
LSAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGNoaWxkSWR4ID0gbm9kZS5maXJzdENoaWxk
KCk7IGNoaWxkSWR4IDwgbm9kZS5maXJzdENoaWxkKCkgKyBub2RlLm51bUNoaWxkcmVuKCk7ICsr
Y2hpbGRJZHgpIHsKKyAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9ja1tpbmRleEluQmxvY2td
OworICAgICAgICAgICAgaWYgKG5vZGUtPmZsYWdzKCkgJiBOb2RlSGFzVmFyQXJncykgeworICAg
ICAgICAgICAgICAgIGZvciAodW5zaWduZWQgY2hpbGRJZHggPSBub2RlLT5maXJzdENoaWxkKCk7
IGNoaWxkSWR4IDwgbm9kZS0+Zmlyc3RDaGlsZCgpICsgbm9kZS0+bnVtQ2hpbGRyZW4oKTsgKytj
aGlsZElkeCkgewogICAgICAgICAgICAgICAgICAgICBpZiAoISFtX3ZhckFyZ0NoaWxkcmVuW2No
aWxkSWR4XSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBhcmVBbmRTd2FwKG1fdmFyQXJn
Q2hpbGRyZW5bY2hpbGRJZHhdLCBvbGRUaGluZywgbmV3VGhpbmcsIG5vZGUuc2hvdWxkR2VuZXJh
dGUoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBjb21wYXJlQW5kU3dhcChtX3ZhckFyZ0No
aWxkcmVuW2NoaWxkSWR4XSwgb2xkVGhpbmcsIG5ld1RoaW5nLCBub2RlLT5zaG91bGRHZW5lcmF0
ZSgpKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoIW5vZGUuY2hpbGQxKCkpCisgICAgICAgICAgICBp
ZiAoIW5vZGUtPmNoaWxkMSgpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAg
ICAgY29tcGFyZUFuZFN3YXAobm9kZS5jaGlsZHJlbi5jaGlsZDEoKSwgb2xkVGhpbmcsIG5ld1Ro
aW5nLCBub2RlLnNob3VsZEdlbmVyYXRlKCkpOwotICAgICAgICAgICAgaWYgKCFub2RlLmNoaWxk
MigpKQorICAgICAgICAgICAgY29tcGFyZUFuZFN3YXAobm9kZS0+Y2hpbGRyZW4uY2hpbGQxKCks
IG9sZFRoaW5nLCBuZXdUaGluZywgbm9kZS0+c2hvdWxkR2VuZXJhdGUoKSk7CisgICAgICAgICAg
ICBpZiAoIW5vZGUtPmNoaWxkMigpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAg
ICAgICAgY29tcGFyZUFuZFN3YXAobm9kZS5jaGlsZHJlbi5jaGlsZDIoKSwgb2xkVGhpbmcsIG5l
d1RoaW5nLCBub2RlLnNob3VsZEdlbmVyYXRlKCkpOwotICAgICAgICAgICAgaWYgKCFub2RlLmNo
aWxkMygpKQorICAgICAgICAgICAgY29tcGFyZUFuZFN3YXAobm9kZS0+Y2hpbGRyZW4uY2hpbGQy
KCksIG9sZFRoaW5nLCBuZXdUaGluZywgbm9kZS0+c2hvdWxkR2VuZXJhdGUoKSk7CisgICAgICAg
ICAgICBpZiAoIW5vZGUtPmNoaWxkMygpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAg
ICAgICAgICAgY29tcGFyZUFuZFN3YXAobm9kZS5jaGlsZHJlbi5jaGlsZDMoKSwgb2xkVGhpbmcs
IG5ld1RoaW5nLCBub2RlLnNob3VsZEdlbmVyYXRlKCkpOworICAgICAgICAgICAgY29tcGFyZUFu
ZFN3YXAobm9kZS0+Y2hpbGRyZW4uY2hpbGQzKCksIG9sZFRoaW5nLCBuZXdUaGluZywgbm9kZS0+
c2hvdWxkR2VuZXJhdGUoKSk7CiAgICAgICAgIH0KICAgICB9CiAgICAgCkBAIC02NzcsMjkgKzY1
NCwyOCBAQCBwdWJsaWM6CiAgICAgLy8gYW55IEdldExvY2FscyBpbiB0aGUgYmFzaWMgYmxvY2su
CiAgICAgLy8gRklYTUU6IGl0IG1heSBiZSBhcHByb3ByaWF0ZSwgaW4gdGhlIGZ1dHVyZSwgdG8g
Z2VuZXJhbGl6ZSB0aGlzIHRvIGhhbmRsZSBHZXRMb2NhbHMKICAgICAvLyBpbnRyb2R1Y2VkIGFu
eXdoZXJlIGluIHRoZSBiYXNpYyBibG9jay4KLSAgICB2b2lkIHN1YnN0aXR1dGVHZXRMb2NhbChC
YXNpY0Jsb2NrJiBibG9jaywgdW5zaWduZWQgc3RhcnRJbmRleEluQmxvY2ssIFZhcmlhYmxlQWNj
ZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhLCBOb2RlSW5kZXggbmV3R2V0TG9jYWwpCisgICAg
dm9pZCBzdWJzdGl0dXRlR2V0TG9jYWwoQmFzaWNCbG9jayYgYmxvY2ssIHVuc2lnbmVkIHN0YXJ0
SW5kZXhJbkJsb2NrLCBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSwgTm9k
ZSogbmV3R2V0TG9jYWwpCiAgICAgewogICAgICAgICBpZiAodmFyaWFibGVBY2Nlc3NEYXRhLT5p
c0NhcHR1cmVkKCkpIHsKICAgICAgICAgICAgIC8vIExldCBDU0Ugd29ycnkgYWJvdXQgdGhpcyBv
bmUuCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgZm9yICh1bnNpZ25l
ZCBpbmRleEluQmxvY2sgPSBzdGFydEluZGV4SW5CbG9jazsgaW5kZXhJbkJsb2NrIDwgYmxvY2su
c2l6ZSgpOyArK2luZGV4SW5CbG9jaykgewotICAgICAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRl
eCA9IGJsb2NrW2luZGV4SW5CbG9ja107Ci0gICAgICAgICAgICBOb2RlJiBub2RlID0gYXQobm9k
ZUluZGV4KTsKKyAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9ja1tpbmRleEluQmxvY2tdOwog
ICAgICAgICAgICAgYm9vbCBzaG91bGRDb250aW51ZSA9IHRydWU7Ci0gICAgICAgICAgICBzd2l0
Y2ggKG5vZGUub3AoKSkgeworICAgICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CiAgICAg
ICAgICAgICBjYXNlIFNldExvY2FsOiB7Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGUubG9jYWwo
KSA9PSB2YXJpYWJsZUFjY2Vzc0RhdGEtPmxvY2FsKCkpCisgICAgICAgICAgICAgICAgaWYgKG5v
ZGUtPmxvY2FsKCkgPT0gdmFyaWFibGVBY2Nlc3NEYXRhLT5sb2NhbCgpKQogICAgICAgICAgICAg
ICAgICAgICBzaG91bGRDb250aW51ZSA9IGZhbHNlOwogICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgY2FzZSBHZXRMb2Nh
bDogewotICAgICAgICAgICAgICAgIGlmIChub2RlLnZhcmlhYmxlQWNjZXNzRGF0YSgpICE9IHZh
cmlhYmxlQWNjZXNzRGF0YSkKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+dmFyaWFibGVBY2Nl
c3NEYXRhKCkgIT0gdmFyaWFibGVBY2Nlc3NEYXRhKQogICAgICAgICAgICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgICAgICAgICBzdWJzdGl0dXRlKGJsb2NrLCBpbmRleEluQmxvY2ssIG5v
ZGVJbmRleCwgbmV3R2V0TG9jYWwpOwotICAgICAgICAgICAgICAgIE5vZGVJbmRleCBvbGRUYWls
SW5kZXggPSBibG9jay52YXJpYWJsZXNBdFRhaWwub3BlcmFuZCh2YXJpYWJsZUFjY2Vzc0RhdGEt
PmxvY2FsKCkpOwotICAgICAgICAgICAgICAgIGlmIChvbGRUYWlsSW5kZXggPT0gbm9kZUluZGV4
KQorICAgICAgICAgICAgICAgIHN1YnN0aXR1dGUoYmxvY2ssIGluZGV4SW5CbG9jaywgbm9kZSwg
bmV3R2V0TG9jYWwpOworICAgICAgICAgICAgICAgIE5vZGUqIG9sZFRhaWxOb2RlID0gYmxvY2su
dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQodmFyaWFibGVBY2Nlc3NEYXRhLT5sb2NhbCgpKTsKKyAg
ICAgICAgICAgICAgICBpZiAob2xkVGFpbE5vZGUgPT0gbm9kZSkKICAgICAgICAgICAgICAgICAg
ICAgYmxvY2sudmFyaWFibGVzQXRUYWlsLm9wZXJhbmQodmFyaWFibGVBY2Nlc3NEYXRhLT5sb2Nh
bCgpKSA9IG5ld0dldExvY2FsOwogICAgICAgICAgICAgICAgIHNob3VsZENvbnRpbnVlID0gZmFs
c2U7CiAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC03MTcsNiArNjkzLDggQEAgcHVibGljOgog
ICAgIENvZGVCbG9jayogbV9jb2RlQmxvY2s7CiAgICAgUmVmUHRyPFByb2ZpbGVyOjpDb21waWxh
dGlvbj4gbV9jb21waWxhdGlvbjsKICAgICBDb2RlQmxvY2sqIG1fcHJvZmlsZWRCbG9jazsKKyAg
ICAKKyAgICBOb2RlQWxsb2NhdG9yJiBtX2FsbG9jYXRvcjsKIAogICAgIFZlY3RvcjwgT3duUHRy
PEJhc2ljQmxvY2s+ICwgOD4gbV9ibG9ja3M7CiAgICAgVmVjdG9yPEVkZ2UsIDE2PiBtX3ZhckFy
Z0NoaWxkcmVuOwpAQCAtNzI0LDcgKzcwMiw3IEBAIHB1YmxpYzoKICAgICBWZWN0b3I8UmVzb2x2
ZUdsb2JhbERhdGE+IG1fcmVzb2x2ZUdsb2JhbERhdGE7CiAgICAgVmVjdG9yPFJlc29sdmVPcGVy
YXRpb25EYXRhPiBtX3Jlc29sdmVPcGVyYXRpb25zRGF0YTsKICAgICBWZWN0b3I8UHV0VG9CYXNl
T3BlcmF0aW9uRGF0YT4gbV9wdXRUb0Jhc2VPcGVyYXRpb25EYXRhOwotICAgIFZlY3RvcjxOb2Rl
SW5kZXgsIDg+IG1fYXJndW1lbnRzOworICAgIFZlY3RvcjxOb2RlKiwgOD4gbV9hcmd1bWVudHM7
CiAgICAgU2VnbWVudGVkVmVjdG9yPFZhcmlhYmxlQWNjZXNzRGF0YSwgMTY+IG1fdmFyaWFibGVB
Y2Nlc3NEYXRhOwogICAgIFNlZ21lbnRlZFZlY3RvcjxBcmd1bWVudFBvc2l0aW9uLCA4PiBtX2Fy
Z3VtZW50UG9zaXRpb25zOwogICAgIFNlZ21lbnRlZFZlY3RvcjxTdHJ1Y3R1cmVTZXQsIDE2PiBt
X3N0cnVjdHVyZVNldDsKQEAgLTc0NCwxMSArNzIyLDExIEBAIHByaXZhdGU6CiAgICAgCiAgICAg
dm9pZCBoYW5kbGVTdWNjZXNzb3IoVmVjdG9yPEJsb2NrSW5kZXgsIDE2PiYgd29ya2xpc3QsIEJs
b2NrSW5kZXggYmxvY2tJbmRleCwgQmxvY2tJbmRleCBzdWNjZXNzb3JJbmRleCk7CiAgICAgCi0g
ICAgQWRkU3BlY3VsYXRpb25Nb2RlIGFkZEltbWVkaWF0ZVNob3VsZFNwZWN1bGF0ZUludGVnZXIo
Tm9kZSYgYWRkLCBib29sIHZhcmlhYmxlU2hvdWxkU3BlY3VsYXRlSW50ZWdlciwgTm9kZSYgaW1t
ZWRpYXRlKQorICAgIEFkZFNwZWN1bGF0aW9uTW9kZSBhZGRJbW1lZGlhdGVTaG91bGRTcGVjdWxh
dGVJbnRlZ2VyKE5vZGUqIGFkZCwgYm9vbCB2YXJpYWJsZVNob3VsZFNwZWN1bGF0ZUludGVnZXIs
IE5vZGUqIGltbWVkaWF0ZSkKICAgICB7Ci0gICAgICAgIEFTU0VSVChpbW1lZGlhdGUuaGFzQ29u
c3RhbnQoKSk7CisgICAgICAgIEFTU0VSVChpbW1lZGlhdGUtPmhhc0NvbnN0YW50KCkpOwogICAg
ICAgICAKLSAgICAgICAgSlNWYWx1ZSBpbW1lZGlhdGVWYWx1ZSA9IGltbWVkaWF0ZS52YWx1ZU9m
SlNDb25zdGFudChtX2NvZGVCbG9jayk7CisgICAgICAgIEpTVmFsdWUgaW1tZWRpYXRlVmFsdWUg
PSBpbW1lZGlhdGUtPnZhbHVlT2ZKU0NvbnN0YW50KG1fY29kZUJsb2NrKTsKICAgICAgICAgaWYg
KCFpbW1lZGlhdGVWYWx1ZS5pc051bWJlcigpKQogICAgICAgICAgICAgcmV0dXJuIERvbnRTcGVj
dWxhdGVJbnRlZ2VyOwogICAgICAgICAKQEAgLTc1NiwyNSArNzM0LDI1IEBAIHByaXZhdGU6CiAg
ICAgICAgICAgICByZXR1cm4gRG9udFNwZWN1bGF0ZUludGVnZXI7CiAgICAgICAgIAogICAgICAg
ICBpZiAoaW1tZWRpYXRlVmFsdWUuaXNJbnQzMigpKQotICAgICAgICAgICAgcmV0dXJuIGFkZC5j
YW5TcGVjdWxhdGVJbnRlZ2VyKCkgPyBTcGVjdWxhdGVJbnRlZ2VyIDogRG9udFNwZWN1bGF0ZUlu
dGVnZXI7CisgICAgICAgICAgICByZXR1cm4gYWRkLT5jYW5TcGVjdWxhdGVJbnRlZ2VyKCkgPyBT
cGVjdWxhdGVJbnRlZ2VyIDogRG9udFNwZWN1bGF0ZUludGVnZXI7CiAgICAgICAgIAogICAgICAg
ICBkb3VibGUgZG91YmxlSW1tZWRpYXRlID0gaW1tZWRpYXRlVmFsdWUuYXNEb3VibGUoKTsKICAg
ICAgICAgY29uc3QgZG91YmxlIHR3b1RvVGhlNDggPSAyODE0NzQ5NzY3MTA2NTYuMDsKICAgICAg
ICAgaWYgKGRvdWJsZUltbWVkaWF0ZSA8IC10d29Ub1RoZTQ4IHx8IGRvdWJsZUltbWVkaWF0ZSA+
IHR3b1RvVGhlNDgpCiAgICAgICAgICAgICByZXR1cm4gRG9udFNwZWN1bGF0ZUludGVnZXI7CiAg
ICAgICAgIAotICAgICAgICByZXR1cm4gbm9kZUNhblRydW5jYXRlSW50ZWdlcihhZGQuYXJpdGhO
b2RlRmxhZ3MoKSkgPyBTcGVjdWxhdGVJbnRlZ2VyQnV0QWx3YXlzV2F0Y2hPdmVyZmxvdyA6IERv
bnRTcGVjdWxhdGVJbnRlZ2VyOworICAgICAgICByZXR1cm4gbm9kZUNhblRydW5jYXRlSW50ZWdl
cihhZGQtPmFyaXRoTm9kZUZsYWdzKCkpID8gU3BlY3VsYXRlSW50ZWdlckJ1dEFsd2F5c1dhdGNo
T3ZlcmZsb3cgOiBEb250U3BlY3VsYXRlSW50ZWdlcjsKICAgICB9CiAgICAgCi0gICAgYm9vbCBt
dWxJbW1lZGlhdGVTaG91bGRTcGVjdWxhdGVJbnRlZ2VyKE5vZGUmIG11bCwgTm9kZSYgdmFyaWFi
bGUsIE5vZGUmIGltbWVkaWF0ZSkKKyAgICBib29sIG11bEltbWVkaWF0ZVNob3VsZFNwZWN1bGF0
ZUludGVnZXIoTm9kZSogbXVsLCBOb2RlKiB2YXJpYWJsZSwgTm9kZSogaW1tZWRpYXRlKQogICAg
IHsKLSAgICAgICAgQVNTRVJUKGltbWVkaWF0ZS5oYXNDb25zdGFudCgpKTsKKyAgICAgICAgQVNT
RVJUKGltbWVkaWF0ZS0+aGFzQ29uc3RhbnQoKSk7CiAgICAgICAgIAotICAgICAgICBKU1ZhbHVl
IGltbWVkaWF0ZVZhbHVlID0gaW1tZWRpYXRlLnZhbHVlT2ZKU0NvbnN0YW50KG1fY29kZUJsb2Nr
KTsKKyAgICAgICAgSlNWYWx1ZSBpbW1lZGlhdGVWYWx1ZSA9IGltbWVkaWF0ZS0+dmFsdWVPZkpT
Q29uc3RhbnQobV9jb2RlQmxvY2spOwogICAgICAgICBpZiAoIWltbWVkaWF0ZVZhbHVlLmlzSW50
MzIoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgCi0gICAgICAgIGlmICgh
dmFyaWFibGUuc2hvdWxkU3BlY3VsYXRlSW50ZWdlckZvckFyaXRobWV0aWMoKSkKKyAgICAgICAg
aWYgKCF2YXJpYWJsZS0+c2hvdWxkU3BlY3VsYXRlSW50ZWdlckZvckFyaXRobWV0aWMoKSkKICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgCiAgICAgICAgIGludDMyX3QgaW50SW1t
ZWRpYXRlID0gaW1tZWRpYXRlVmFsdWUuYXNJbnQzMigpOwpAQCAtNzg1LDE0ICs3NjMsMTAgQEAg
cHJpdmF0ZToKICAgICAgICAgLy8gY2FuU3BlY3VsYXRlSW50ZWdlcigpIGltcGxpZXMpLgogICAg
ICAgICBjb25zdCBpbnQzMl90IHR3b1RvVGhlMjIgPSAxIDw8IDIyOwogICAgICAgICBpZiAoaW50
SW1tZWRpYXRlIDw9IC10d29Ub1RoZTIyIHx8IGludEltbWVkaWF0ZSA+PSB0d29Ub1RoZTIyKQot
ICAgICAgICAgICAgcmV0dXJuIG11bC5jYW5TcGVjdWxhdGVJbnRlZ2VyKCkgJiYgIW5vZGVNYXlP
dmVyZmxvdyhtdWwuYXJpdGhOb2RlRmxhZ3MoKSk7CisgICAgICAgICAgICByZXR1cm4gbXVsLT5j
YW5TcGVjdWxhdGVJbnRlZ2VyKCkgJiYgIW5vZGVNYXlPdmVyZmxvdyhtdWwtPmFyaXRoTm9kZUZs
YWdzKCkpOwogCi0gICAgICAgIHJldHVybiBtdWwuY2FuU3BlY3VsYXRlSW50ZWdlcigpOworICAg
ICAgICByZXR1cm4gbXVsLT5jYW5TcGVjdWxhdGVJbnRlZ2VyKCk7CiAgICAgfQotICAgIAotICAg
IC8vIFdoZW4gYSBub2RlJ3MgcmVmQ291bnQgZ29lcyBmcm9tIDAgdG8gMSwgaXQgbXVzdCAobG9n
aWNhbGx5KSByZWN1cnNpdmVseSByZWYgYWxsIG9mIGl0cyBjaGlsZHJlbiwgYW5kIHZpY2UgdmVy
c2EuCi0gICAgdm9pZCByZWZDaGlsZHJlbihOb2RlSW5kZXgpOwotICAgIHZvaWQgZGVyZWZDaGls
ZHJlbihOb2RlSW5kZXgpOwogfTsKIAogY2xhc3MgR2V0Qnl0ZWNvZGVCZWdpbkZvckJsb2NrIHsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5zZXJ0aW9uU2V0LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJbnNlcnRpb25TZXQuaAkocmV2
aXNpb24gMTQxMDUyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJbnNlcnRpb25T
ZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMzksMTcgKzM5LDE3IEBAIGNsYXNzIEluc2VydGlvbiB7
CiBwdWJsaWM6CiAgICAgSW5zZXJ0aW9uKCkgeyB9CiAgICAgCi0gICAgSW5zZXJ0aW9uKHNpemVf
dCBpbmRleCwgTm9kZUluZGV4IGVsZW1lbnQpCisgICAgSW5zZXJ0aW9uKHNpemVfdCBpbmRleCwg
Tm9kZSogZWxlbWVudCkKICAgICAgICAgOiBtX2luZGV4KGluZGV4KQogICAgICAgICAsIG1fZWxl
bWVudChlbGVtZW50KQogICAgIHsKICAgICB9CiAgICAgCiAgICAgc2l6ZV90IGluZGV4KCkgY29u
c3QgeyByZXR1cm4gbV9pbmRleDsgfQotICAgIE5vZGVJbmRleCBlbGVtZW50KCkgY29uc3QgeyBy
ZXR1cm4gbV9lbGVtZW50OyB9CisgICAgTm9kZSogZWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIG1f
ZWxlbWVudDsgfQogcHJpdmF0ZToKICAgICBzaXplX3QgbV9pbmRleDsKLSAgICBOb2RlSW5kZXgg
bV9lbGVtZW50OworICAgIE5vZGUqIG1fZWxlbWVudDsKIH07CiAKIGNsYXNzIEluc2VydGlvblNl
dCB7CkBAIC01OSwyMCArNTksMjAgQEAgcHVibGljOgogICAgIHsKICAgICB9CiAgICAgCi0gICAg
Tm9kZUluZGV4IGluc2VydChjb25zdCBJbnNlcnRpb24mIGluc2VydGlvbikKKyAgICBOb2RlKiBp
bnNlcnQoY29uc3QgSW5zZXJ0aW9uJiBpbnNlcnRpb24pCiAgICAgewogICAgICAgICBBU1NFUlQo
IW1faW5zZXJ0aW9ucy5zaXplKCkgfHwgbV9pbnNlcnRpb25zLmxhc3QoKS5pbmRleCgpIDw9IGlu
c2VydGlvbi5pbmRleCgpKTsKICAgICAgICAgbV9pbnNlcnRpb25zLmFwcGVuZChpbnNlcnRpb24p
OwogICAgICAgICByZXR1cm4gaW5zZXJ0aW9uLmVsZW1lbnQoKTsKICAgICB9CiAgICAgCi0gICAg
Tm9kZUluZGV4IGluc2VydChzaXplX3QgaW5kZXgsIE5vZGVJbmRleCBlbGVtZW50KQorICAgIE5v
ZGUqIGluc2VydChzaXplX3QgaW5kZXgsIE5vZGUqIGVsZW1lbnQpCiAgICAgewogICAgICAgICBy
ZXR1cm4gaW5zZXJ0KEluc2VydGlvbihpbmRleCwgZWxlbWVudCkpOwogICAgIH0KIAogI2RlZmlu
ZSBERkdfREVGSU5FX0lOU0VSVF9OT0RFKHRlbXBsYXRlUHJlLCB0ZW1wbGF0ZVBvc3QsIHR5cGVQ
YXJhbXMsIHZhbHVlUGFyYW1zQ29tbWEsIHZhbHVlUGFyYW1zLCB2YWx1ZUFyZ3MpIFwKLSAgICB0
ZW1wbGF0ZVByZSB0eXBlUGFyYW1zIHRlbXBsYXRlUG9zdCBOb2RlSW5kZXggaW5zZXJ0Tm9kZShz
aXplX3QgaW5kZXgsIFJlZkNoaWxkcmVuTW9kZSByZWZDaGlsZHJlbk1vZGUsIFJlZk5vZGVNb2Rl
IHJlZk5vZGVNb2RlLCBTcGVjdWxhdGVkVHlwZSB0eXBlIHZhbHVlUGFyYW1zQ29tbWEgdmFsdWVQ
YXJhbXMpIFwKKyAgICB0ZW1wbGF0ZVByZSB0eXBlUGFyYW1zIHRlbXBsYXRlUG9zdCBOb2RlKiBp
bnNlcnROb2RlKHNpemVfdCBpbmRleCwgUmVmQ2hpbGRyZW5Nb2RlIHJlZkNoaWxkcmVuTW9kZSwg
UmVmTm9kZU1vZGUgcmVmTm9kZU1vZGUsIFNwZWN1bGF0ZWRUeXBlIHR5cGUgdmFsdWVQYXJhbXND
b21tYSB2YWx1ZVBhcmFtcykgXAogICAgIHsgXAogICAgICAgICByZXR1cm4gaW5zZXJ0KGluZGV4
LCBtX2dyYXBoLmFkZE5vZGUocmVmQ2hpbGRyZW5Nb2RlLCByZWZOb2RlTW9kZSwgdHlwZSB2YWx1
ZVBhcmFtc0NvbW1hIHZhbHVlQXJncykpOyBcCiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAJKHJldmlzaW9uIDE0MTA1MikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTMgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5oCShyZXZpc2lv
biAxNDEwNTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMSwg
MjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTI2NiwxMSArMjY2LDExIEBAIHB1YmxpYzoKICAgICAgICAgbV9kaXNh
c3NlbWJsZXItPnNldEZvckJsb2NrKGJsb2NrSW5kZXgsIGxhYmVsSWdub3JpbmdXYXRjaHBvaW50
cygpKTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBzZXRGb3JOb2RlKE5vZGVJbmRleCBub2RlSW5k
ZXgpCisgICAgdm9pZCBzZXRGb3JOb2RlKE5vZGUqIG5vZGUpCiAgICAgewogICAgICAgICBpZiAo
TElLRUxZKCFtX2Rpc2Fzc2VtYmxlcikpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIG1f
ZGlzYXNzZW1ibGVyLT5zZXRGb3JOb2RlKG5vZGVJbmRleCwgbGFiZWxJZ25vcmluZ1dhdGNocG9p
bnRzKCkpOworICAgICAgICBtX2Rpc2Fzc2VtYmxlci0+c2V0Rm9yTm9kZShub2RlLCBsYWJlbEln
bm9yaW5nV2F0Y2hwb2ludHMoKSk7CiAgICAgfQogICAgIAogICAgIHZvaWQgc2V0RW5kT2ZNYWlu
UGF0aCgpCkBAIC0zNDgsMTAgKzM0OCwxMCBAQCBwdWJsaWM6CiAgICAgfQogCiAjaWYgVVNFKEpT
VkFMVUUzMl82NCkKLSAgICB2b2lkKiBhZGRyZXNzT2ZEb3VibGVDb25zdGFudChOb2RlSW5kZXgg
bm9kZUluZGV4KQorICAgIHZvaWQqIGFkZHJlc3NPZkRvdWJsZUNvbnN0YW50KE5vZGUqIG5vZGUp
CiAgICAgewotICAgICAgICBBU1NFUlQobV9ncmFwaC5pc051bWJlckNvbnN0YW50KG5vZGVJbmRl
eCkpOwotICAgICAgICB1bnNpZ25lZCBjb25zdGFudEluZGV4ID0gZ3JhcGgoKVtub2RlSW5kZXhd
LmNvbnN0YW50TnVtYmVyKCk7CisgICAgICAgIEFTU0VSVChtX2dyYXBoLmlzTnVtYmVyQ29uc3Rh
bnQobm9kZSkpOworICAgICAgICB1bnNpZ25lZCBjb25zdGFudEluZGV4ID0gbm9kZS0+Y29uc3Rh
bnROdW1iZXIoKTsKICAgICAgICAgcmV0dXJuICYoY29kZUJsb2NrKCktPmNvbnN0YW50UmVnaXN0
ZXIoRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXggKyBjb25zdGFudEluZGV4KSk7CiAgICAgfQog
I2VuZGlmCkBAIC00MDUsMTUgKzQwNSwxNSBAQCBwdWJsaWM6CiAgICAgICAgIC8vIHZhbHVlIG9m
IChOb25lLCBbXSkuIEJ1dCB0aGUgb2xkIEpJVCBtYXkgc3Rhc2ggc29tZSB2YWx1ZXMgdGhlcmUu
IFNvIHdlIHJlYWxseQogICAgICAgICAvLyBuZWVkIChUb3AsIFRPUCkuCiAgICAgICAgIGZvciAo
c2l6ZV90IGFyZ3VtZW50ID0gMDsgYXJndW1lbnQgPCBiYXNpY0Jsb2NrLnZhcmlhYmxlc0F0SGVh
ZC5udW1iZXJPZkFyZ3VtZW50cygpOyArK2FyZ3VtZW50KSB7Ci0gICAgICAgICAgICBOb2RlSW5k
ZXggbm9kZUluZGV4ID0gYmFzaWNCbG9jay52YXJpYWJsZXNBdEhlYWQuYXJndW1lbnQoYXJndW1l
bnQpOwotICAgICAgICAgICAgaWYgKG5vZGVJbmRleCA9PSBOb05vZGUgfHwgIW1fZ3JhcGhbbm9k
ZUluZGV4XS5zaG91bGRHZW5lcmF0ZSgpKQorICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJhc2lj
QmxvY2sudmFyaWFibGVzQXRIZWFkLmFyZ3VtZW50KGFyZ3VtZW50KTsKKyAgICAgICAgICAgIGlm
ICghbm9kZSB8fCAhbm9kZS0+c2hvdWxkR2VuZXJhdGUoKSkKICAgICAgICAgICAgICAgICBlbnRy
eS0+bV9leHBlY3RlZFZhbHVlcy5hcmd1bWVudChhcmd1bWVudCkubWFrZVRvcCgpOwogICAgICAg
ICB9CiAgICAgICAgIGZvciAoc2l6ZV90IGxvY2FsID0gMDsgbG9jYWwgPCBiYXNpY0Jsb2NrLnZh
cmlhYmxlc0F0SGVhZC5udW1iZXJPZkxvY2FscygpOyArK2xvY2FsKSB7Ci0gICAgICAgICAgICBO
b2RlSW5kZXggbm9kZUluZGV4ID0gYmFzaWNCbG9jay52YXJpYWJsZXNBdEhlYWQubG9jYWwobG9j
YWwpOwotICAgICAgICAgICAgaWYgKG5vZGVJbmRleCA9PSBOb05vZGUgfHwgIW1fZ3JhcGhbbm9k
ZUluZGV4XS5zaG91bGRHZW5lcmF0ZSgpKQorICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJhc2lj
QmxvY2sudmFyaWFibGVzQXRIZWFkLmxvY2FsKGxvY2FsKTsKKyAgICAgICAgICAgIGlmICghbm9k
ZSB8fCAhbm9kZS0+c2hvdWxkR2VuZXJhdGUoKSkKICAgICAgICAgICAgICAgICBlbnRyeS0+bV9l
eHBlY3RlZFZhbHVlcy5sb2NhbChsb2NhbCkubWFrZVRvcCgpOwotICAgICAgICAgICAgZWxzZSBp
ZiAobV9ncmFwaFtub2RlSW5kZXhdLnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5zaG91bGRVc2VEb3Vi
bGVGb3JtYXQoKSkKKyAgICAgICAgICAgIGVsc2UgaWYgKG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0
YSgpLT5zaG91bGRVc2VEb3VibGVGb3JtYXQoKSkKICAgICAgICAgICAgICAgICBlbnRyeS0+bV9s
b2NhbHNGb3JjZWREb3VibGUuc2V0KGxvY2FsKTsKICAgICAgICAgfQogI2Vsc2UKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTG9uZ0xpdmVkU3RhdGUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTG9uZ0xpdmVkU3RhdGUuY3BwCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdMb25nTGl2ZWRTdGF0ZS5j
cHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRG
R0xvbmdMaXZlZFN0YXRlLmgiCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBERkcgeworCitMb25nTGl2ZWRTdGF0ZTo6TG9uZ0xpdmVkU3RhdGUoKQor
eworfQorCitMb25nTGl2ZWRTdGF0ZTo6fkxvbmdMaXZlZFN0YXRlKCkKK3sKK30KKwordm9pZCBM
b25nTGl2ZWRTdGF0ZTo6c2hyaW5rVG9GaXQoKQoreworICAgIG1fYWxsb2NhdG9yLnJlc2V0KCk7
Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdf
SklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0xvbmdMaXZlZFN0YXRl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdMb25nTGl2ZWRT
dGF0ZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdMb25n
TGl2ZWRTdGF0ZS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDU1IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHTG9uZ0xpdmVkU3Rh
dGVfaAorI2RlZmluZSBERkdMb25nTGl2ZWRTdGF0ZV9oCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZv
cm0uaD4KKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZHTm9kZUFsbG9jYXRv
ci5oIgorI2luY2x1ZGUgPHd0Zi9GYXN0QWxsb2NCYXNlLmg+CisjaW5jbHVkZSA8d3RmL05vbmNv
cHlhYmxlLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3MgTG9u
Z0xpdmVkU3RhdGUgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOyBXVEZfTUFLRV9OT05D
T1BZQUJMRShMb25nTGl2ZWRTdGF0ZSk7CitwdWJsaWM6CisgICAgTG9uZ0xpdmVkU3RhdGUoKTsK
KyAgICB+TG9uZ0xpdmVkU3RhdGUoKTsKKyAgICAKKyAgICB2b2lkIHNocmlua1RvRml0KCk7Cisg
ICAgCisgICAgTm9kZUFsbG9jYXRvciBtX2FsbG9jYXRvcjsKK307CisKK30gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZH
TG9uZ0xpdmVkU3RhdGVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01p
bmlmaWVkSUQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01p
bmlmaWVkSUQuaAkocmV2aXNpb24gMTQxMDUyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdNaW5pZmllZElELmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDE0ICs0NCwxNCBAQCBjbGFz
cyBNaW5pZmllZElEIHsKIHB1YmxpYzoKICAgICBNaW5pZmllZElEKCkgOiBtX2lkKGludmFsaWRJ
RCgpKSB7IH0KICAgICBNaW5pZmllZElEKFdURjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlVHlwZSkg
OiBtX2lkKG90aGVySW52YWxpZElEKCkpIHsgfQotICAgIGV4cGxpY2l0IE1pbmlmaWVkSUQoTm9k
ZUluZGV4IG5vZGVJbmRleCkgOiBtX2lkKG5vZGVJbmRleCkgeyB9CisgICAgZXhwbGljaXQgTWlu
aWZpZWRJRChOb2RlKiBub2RlKSA6IG1faWQoYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4obm9kZSkp
IHsgfQogICAgIAogICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4gbV9pZCA9PSBp
bnZhbGlkSUQoKTsgfQogICAgIAogICAgIC8vIFRoaXMgdGFrZXMgR3JhcGgmIHRvIHJlbWluZCB5
b3UsIHRoYXQgeW91IHNob3VsZCBvbmx5IGJlIGNhbGxpbmcgdGhpcyBtZXRob2QKICAgICAvLyB3
aGVuIHlvdSdyZSBpbiB0aGUgbWFpbiBjb21waWxhdGlvbiBwYXNzIChpLmUuIHlvdSBoYXZlIGEg
Z3JhcGgpIGFuZCBub3QgbGF0ZXIsCiAgICAgLy8gbGlrZSBkdXJpbmcgT1NSIGV4aXQgY29tcGls
YXRpb24uCi0gICAgTm9kZUluZGV4IG5vZGVJbmRleChjb25zdCBHcmFwaCYpIGNvbnN0IHsgcmV0
dXJuIHN0YXRpY19jYXN0PE5vZGVJbmRleD4obV9pZCk7IH0KKyAgICBOb2RlKiBub2RlKGNvbnN0
IEdyYXBoJikgY29uc3QgeyByZXR1cm4gYml0d2lzZV9jYXN0PE5vZGUqPihtX2lkKTsgfQogICAg
IAogICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBNaW5pZmllZElEJiBvdGhlcikgY29uc3QgeyBy
ZXR1cm4gbV9pZCA9PSBvdGhlci5tX2lkOyB9CiAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IE1p
bmlmaWVkSUQmIG90aGVyKSBjb25zdCB7IHJldHVybiBtX2lkICE9IG90aGVyLm1faWQ7IH0KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTWluaWZpZWROb2RlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01pbmlmaWVkTm9kZS5jcHAJKHJl
dmlzaW9uIDE0MTA1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTWluaWZpZWRO
b2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsMjAgKzMyLDIwIEBACiAKIG5hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgREZHIHsKIAotTWluaWZpZWROb2RlIE1pbmlmaWVkTm9kZTo6ZnJvbU5v
ZGUoTm9kZUluZGV4IG5vZGVJbmRleCwgTm9kZSYgbm9kZSkKK01pbmlmaWVkTm9kZSBNaW5pZmll
ZE5vZGU6OmZyb21Ob2RlKE5vZGUqIG5vZGUpCiB7Ci0gICAgQVNTRVJUKGJlbG9uZ3NJbk1pbmlm
aWVkR3JhcGgobm9kZS5vcCgpKSk7CisgICAgQVNTRVJUKGJlbG9uZ3NJbk1pbmlmaWVkR3JhcGgo
bm9kZS0+b3AoKSkpOwogICAgIE1pbmlmaWVkTm9kZSByZXN1bHQ7Ci0gICAgcmVzdWx0Lm1faWQg
PSBNaW5pZmllZElEKG5vZGVJbmRleCk7Ci0gICAgcmVzdWx0Lm1fb3AgPSBub2RlLm9wKCk7Ci0g
ICAgaWYgKGhhc0NoaWxkKG5vZGUub3AoKSkpCi0gICAgICAgIHJlc3VsdC5tX2NoaWxkT3JJbmZv
ID0gbm9kZS5jaGlsZDEoKS5pbmRleCgpOwotICAgIGVsc2UgaWYgKGhhc0NvbnN0YW50TnVtYmVy
KG5vZGUub3AoKSkpCi0gICAgICAgIHJlc3VsdC5tX2NoaWxkT3JJbmZvID0gbm9kZS5jb25zdGFu
dE51bWJlcigpOwotICAgIGVsc2UgaWYgKGhhc1dlYWtDb25zdGFudChub2RlLm9wKCkpKQotICAg
ICAgICByZXN1bHQubV9jaGlsZE9ySW5mbyA9IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KG5vZGUu
d2Vha0NvbnN0YW50KCkpOworICAgIHJlc3VsdC5tX2lkID0gTWluaWZpZWRJRChub2RlKTsKKyAg
ICByZXN1bHQubV9vcCA9IG5vZGUtPm9wKCk7CisgICAgaWYgKGhhc0NoaWxkKG5vZGUtPm9wKCkp
KQorICAgICAgICByZXN1bHQubV9jaGlsZE9ySW5mbyA9IE1pbmlmaWVkSUQobm9kZS0+Y2hpbGQx
KCkubm9kZSgpKS5tX2lkOworICAgIGVsc2UgaWYgKGhhc0NvbnN0YW50TnVtYmVyKG5vZGUtPm9w
KCkpKQorICAgICAgICByZXN1bHQubV9jaGlsZE9ySW5mbyA9IG5vZGUtPmNvbnN0YW50TnVtYmVy
KCk7CisgICAgZWxzZSBpZiAoaGFzV2Vha0NvbnN0YW50KG5vZGUtPm9wKCkpKQorICAgICAgICBy
ZXN1bHQubV9jaGlsZE9ySW5mbyA9IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KG5vZGUtPndlYWtD
b25zdGFudCgpKTsKICAgICBlbHNlIHsKLSAgICAgICAgQVNTRVJUKG5vZGUub3AoKSA9PSBQaGFu
dG9tQXJndW1lbnRzKTsKKyAgICAgICAgQVNTRVJUKG5vZGUtPm9wKCkgPT0gUGhhbnRvbUFyZ3Vt
ZW50cyk7CiAgICAgICAgIHJlc3VsdC5tX2NoaWxkT3JJbmZvID0gMDsKICAgICB9CiAgICAgcmV0
dXJuIHJlc3VsdDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTWluaWZpZWRO
b2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdNaW5pZmll
ZE5vZGUuaAkocmV2aXNpb24gMTQxMDUyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdNaW5pZmllZE5vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtNTgsNyArNTgsNyBAQCBjbGFzcyBN
aW5pZmllZE5vZGUgewogcHVibGljOgogICAgIE1pbmlmaWVkTm9kZSgpIHsgfQogICAgIAotICAg
IHN0YXRpYyBNaW5pZmllZE5vZGUgZnJvbU5vZGUoTm9kZUluZGV4LCBOb2RlJik7CisgICAgc3Rh
dGljIE1pbmlmaWVkTm9kZSBmcm9tTm9kZShOb2RlKik7CiAgICAgCiAgICAgTWluaWZpZWRJRCBp
ZCgpIGNvbnN0IHsgcmV0dXJuIG1faWQ7IH0KICAgICBOb2RlVHlwZSBvcCgpIGNvbnN0IHsgcmV0
dXJuIG1fb3A7IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmNwcAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5jcHAJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsNTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGR05vZGUuaCIK
KworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZHTm9kZUFsbG9jYXRvci5oIgor
CituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK3Vuc2lnbmVkIE5vZGU6OmluZGV4
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gTm9kZUFsbG9jYXRvcjo6YWxsb2NhdG9yT2YodGhpcykt
PmluZGV4T2YodGhpcyk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworbmFtZXNw
YWNlIFdURiB7CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBKU0M6OkRG
Rzo6Tm9kZSogbm9kZSkKK3sKKyAgICBpZiAoIW5vZGUpIHsKKyAgICAgICAgb3V0LnByaW50KCIt
Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgb3V0LnByaW50KCJAIiwgbm9kZS0+aW5k
ZXgoKSk7CisgICAgb3V0LnByaW50KEpTQzo6QWJicmV2aWF0ZWRTcGVjdWxhdGlvbkR1bXAobm9k
ZS0+cHJlZGljdGlvbigpKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8g
RU5BQkxFKERGR19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9k
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCShy
ZXZpc2lvbiAxNDEwNTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEs
IDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDExLCAyMDEyLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjgsNyArNjgsNyBAQCBzdHJ1Y3QgTmV3QXJyYXlC
dWZmZXJEYXRhIHsKIAogLy8gVGhpcyB0eXBlIHVzZWQgaW4gcGFzc2luZyBhbiBpbW1lZGlhdGUg
YXJndW1lbnQgdG8gTm9kZSBjb25zdHJ1Y3RvcjsKIC8vIGRpc3Rpbmd1aXNoZXMgYW4gaW1tZWRp
YXRlIHZhbHVlICh0eXBpY2FsbHkgYW4gaW5kZXggaW50byBhIENvZGVCbG9jayBkYXRhIHN0cnVj
dHVyZSAtIAotLy8gYSBjb25zdGFudCBpbmRleCwgYXJndW1lbnQsIG9yIGlkZW50aWZpZXIpIGZy
b20gYSBOb2RlSW5kZXguCisvLyBhIGNvbnN0YW50IGluZGV4LCBhcmd1bWVudCwgb3IgaWRlbnRp
ZmllcikgZnJvbSBhIE5vZGUqLgogc3RydWN0IE9wSW5mbyB7CiAgICAgZXhwbGljaXQgT3BJbmZv
KGludDMyX3QgdmFsdWUpIDogbV92YWx1ZShzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KHZhbHVlKSkg
eyB9CiAgICAgZXhwbGljaXQgT3BJbmZvKHVpbnQzMl90IHZhbHVlKSA6IG1fdmFsdWUoc3RhdGlj
X2Nhc3Q8dWludHB0cl90Pih2YWx1ZSkpIHsgfQpAQCAtOTksNyArOTksNyBAQCBzdHJ1Y3QgTm9k
ZSB7CiAgICAgfQogICAgIAogICAgIC8vIENvbnN0cnVjdCBhIG5vZGUgd2l0aCB1cCB0byAzIGNo
aWxkcmVuLCBubyBpbW1lZGlhdGUgdmFsdWUuCi0gICAgTm9kZShOb2RlVHlwZSBvcCwgQ29kZU9y
aWdpbiBjb2RlT3JpZ2luLCBOb2RlSW5kZXggY2hpbGQxID0gTm9Ob2RlLCBOb2RlSW5kZXggY2hp
bGQyID0gTm9Ob2RlLCBOb2RlSW5kZXggY2hpbGQzID0gTm9Ob2RlKQorICAgIE5vZGUoTm9kZVR5
cGUgb3AsIENvZGVPcmlnaW4gY29kZU9yaWdpbiwgTm9kZSogY2hpbGQxID0gMCwgTm9kZSogY2hp
bGQyID0gMCwgTm9kZSogY2hpbGQzID0gMCkKICAgICAgICAgOiBjb2RlT3JpZ2luKGNvZGVPcmln
aW4pCiAgICAgICAgICwgY2hpbGRyZW4oQWRqYWNlbmN5TGlzdDo6Rml4ZWQsIGNoaWxkMSwgY2hp
bGQyLCBjaGlsZDMpCiAgICAgICAgICwgbV92aXJ0dWFsUmVnaXN0ZXIoSW52YWxpZFZpcnR1YWxS
ZWdpc3RlcikKQEAgLTExMSw3ICsxMTEsNyBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgfQogCiAgICAg
Ly8gQ29uc3RydWN0IGEgbm9kZSB3aXRoIHVwIHRvIDMgY2hpbGRyZW4gYW5kIGFuIGltbWVkaWF0
ZSB2YWx1ZS4KLSAgICBOb2RlKE5vZGVUeXBlIG9wLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIE9w
SW5mbyBpbW0sIE5vZGVJbmRleCBjaGlsZDEgPSBOb05vZGUsIE5vZGVJbmRleCBjaGlsZDIgPSBO
b05vZGUsIE5vZGVJbmRleCBjaGlsZDMgPSBOb05vZGUpCisgICAgTm9kZShOb2RlVHlwZSBvcCwg
Q29kZU9yaWdpbiBjb2RlT3JpZ2luLCBPcEluZm8gaW1tLCBOb2RlKiBjaGlsZDEgPSAwLCBOb2Rl
KiBjaGlsZDIgPSAwLCBOb2RlKiBjaGlsZDMgPSAwKQogICAgICAgICA6IGNvZGVPcmlnaW4oY29k
ZU9yaWdpbikKICAgICAgICAgLCBjaGlsZHJlbihBZGphY2VuY3lMaXN0OjpGaXhlZCwgY2hpbGQx
LCBjaGlsZDIsIGNoaWxkMykKICAgICAgICAgLCBtX3ZpcnR1YWxSZWdpc3RlcihJbnZhbGlkVmly
dHVhbFJlZ2lzdGVyKQpAQCAtMTI0LDcgKzEyNCw3IEBAIHN0cnVjdCBOb2RlIHsKICAgICB9CiAK
ICAgICAvLyBDb25zdHJ1Y3QgYSBub2RlIHdpdGggdXAgdG8gMyBjaGlsZHJlbiBhbmQgdHdvIGlt
bWVkaWF0ZSB2YWx1ZXMuCi0gICAgTm9kZShOb2RlVHlwZSBvcCwgQ29kZU9yaWdpbiBjb2RlT3Jp
Z2luLCBPcEluZm8gaW1tMSwgT3BJbmZvIGltbTIsIE5vZGVJbmRleCBjaGlsZDEgPSBOb05vZGUs
IE5vZGVJbmRleCBjaGlsZDIgPSBOb05vZGUsIE5vZGVJbmRleCBjaGlsZDMgPSBOb05vZGUpCisg
ICAgTm9kZShOb2RlVHlwZSBvcCwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBPcEluZm8gaW1tMSwg
T3BJbmZvIGltbTIsIE5vZGUqIGNoaWxkMSA9IDAsIE5vZGUqIGNoaWxkMiA9IDAsIE5vZGUqIGNo
aWxkMyA9IDApCiAgICAgICAgIDogY29kZU9yaWdpbihjb2RlT3JpZ2luKQogICAgICAgICAsIGNo
aWxkcmVuKEFkamFjZW5jeUxpc3Q6OkZpeGVkLCBjaGlsZDEsIGNoaWxkMiwgY2hpbGQzKQogICAg
ICAgICAsIG1fdmlydHVhbFJlZ2lzdGVyKEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIpCkBAIC0xNTQs
NiArMTU0LDkgQEAgc3RydWN0IE5vZGUgewogICAgIE5vZGVUeXBlIG9wKCkgY29uc3QgeyByZXR1
cm4gc3RhdGljX2Nhc3Q8Tm9kZVR5cGU+KG1fb3ApOyB9CiAgICAgTm9kZUZsYWdzIGZsYWdzKCkg
Y29uc3QgeyByZXR1cm4gbV9mbGFnczsgfQogICAgIAorICAgIC8vIFRoaXMgaXMgbm90IGEgZmFz
dCBtZXRob2QuCisgICAgdW5zaWduZWQgaW5kZXgoKSBjb25zdDsKKyAgICAKICAgICB2b2lkIHNl
dE9wKE5vZGVUeXBlIG9wKQogICAgIHsKICAgICAgICAgbV9vcCA9IG9wOwpAQCAtMjgxLDcgKzI4
NCw3IEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAgY29udmVydFRvU3RydWN0dXJlVHJhbnNpdGlv
bldhdGNocG9pbnQoc3RydWN0dXJlU2V0KCkuc2luZ2xldG9uU3RydWN0dXJlKCkpOwogICAgIH0K
ICAgICAKLSAgICB2b2lkIGNvbnZlcnRUb0dldEJ5T2Zmc2V0KHVuc2lnbmVkIHN0b3JhZ2VBY2Nl
c3NEYXRhSW5kZXgsIE5vZGVJbmRleCBzdG9yYWdlKQorICAgIHZvaWQgY29udmVydFRvR2V0QnlP
ZmZzZXQodW5zaWduZWQgc3RvcmFnZUFjY2Vzc0RhdGFJbmRleCwgTm9kZSogc3RvcmFnZSkKICAg
ICB7CiAgICAgICAgIEFTU0VSVChtX29wID09IEdldEJ5SWQgfHwgbV9vcCA9PSBHZXRCeUlkRmx1
c2gpOwogICAgICAgICBtX29wSW5mbyA9IHN0b3JhZ2VBY2Nlc3NEYXRhSW5kZXg7CkBAIC0yOTAs
NyArMjkzLDcgQEAgc3RydWN0IE5vZGUgewogICAgICAgICBtX2ZsYWdzICY9IH5Ob2RlQ2xvYmJl
cnNXb3JsZDsKICAgICB9CiAgICAgCi0gICAgdm9pZCBjb252ZXJ0VG9QdXRCeU9mZnNldCh1bnNp
Z25lZCBzdG9yYWdlQWNjZXNzRGF0YUluZGV4LCBOb2RlSW5kZXggc3RvcmFnZSkKKyAgICB2b2lk
IGNvbnZlcnRUb1B1dEJ5T2Zmc2V0KHVuc2lnbmVkIHN0b3JhZ2VBY2Nlc3NEYXRhSW5kZXgsIE5v
ZGUqIHN0b3JhZ2UpCiAgICAgewogICAgICAgICBBU1NFUlQobV9vcCA9PSBQdXRCeUlkIHx8IG1f
b3AgPT0gUHV0QnlJZERpcmVjdCk7CiAgICAgICAgIG1fb3BJbmZvID0gc3RvcmFnZUFjY2Vzc0Rh
dGFJbmRleDsKQEAgLTkzMSw5ICs5MzQsMTAgQEAgc3RydWN0IE5vZGUgewogICAgICAgICByZXR1
cm4gbV9yZWZDb3VudDsKICAgICB9CiAKLSAgICB2b2lkIHJlZigpCisgICAgTm9kZSogcmVmKCkK
ICAgICB7CiAgICAgICAgIG1fcmVmQ291bnQrKzsKKyAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAg
fQogCiAgICAgdW5zaWduZWQgcG9zdGZpeFJlZigpCkBAIC0xMTQ2LDQ0ICsxMTUwLDQ0IEBAIHN0
cnVjdCBOb2RlIHsKICAgICAgICAgcmV0dXJuIGlzQ2VsbFNwZWN1bGF0aW9uKHByZWRpY3Rpb24o
KSk7CiAgICAgfQogICAgIAotICAgIHN0YXRpYyBib29sIHNob3VsZFNwZWN1bGF0ZUludGVnZXIo
Tm9kZSYgb3AxLCBOb2RlJiBvcDIpCisgICAgc3RhdGljIGJvb2wgc2hvdWxkU3BlY3VsYXRlSW50
ZWdlcihOb2RlKiBvcDEsIE5vZGUqIG9wMikKICAgICB7Ci0gICAgICAgIHJldHVybiBvcDEuc2hv
dWxkU3BlY3VsYXRlSW50ZWdlcigpICYmIG9wMi5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCk7Cisg
ICAgICAgIHJldHVybiBvcDEtPnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKSAmJiBvcDItPnNob3Vs
ZFNwZWN1bGF0ZUludGVnZXIoKTsKICAgICB9CiAgICAgCi0gICAgc3RhdGljIGJvb2wgc2hvdWxk
U3BlY3VsYXRlSW50ZWdlckZvckFyaXRobWV0aWMoTm9kZSYgb3AxLCBOb2RlJiBvcDIpCisgICAg
c3RhdGljIGJvb2wgc2hvdWxkU3BlY3VsYXRlSW50ZWdlckZvckFyaXRobWV0aWMoTm9kZSogb3Ax
LCBOb2RlKiBvcDIpCiAgICAgewotICAgICAgICByZXR1cm4gb3AxLnNob3VsZFNwZWN1bGF0ZUlu
dGVnZXJGb3JBcml0aG1ldGljKCkgJiYgb3AyLnNob3VsZFNwZWN1bGF0ZUludGVnZXJGb3JBcml0
aG1ldGljKCk7CisgICAgICAgIHJldHVybiBvcDEtPnNob3VsZFNwZWN1bGF0ZUludGVnZXJGb3JB
cml0aG1ldGljKCkgJiYgb3AyLT5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyRm9yQXJpdGhtZXRpYygp
OwogICAgIH0KICAgICAKLSAgICBzdGF0aWMgYm9vbCBzaG91bGRTcGVjdWxhdGVJbnRlZ2VyRXhw
ZWN0aW5nRGVmaW5lZChOb2RlJiBvcDEsIE5vZGUmIG9wMikKKyAgICBzdGF0aWMgYm9vbCBzaG91
bGRTcGVjdWxhdGVJbnRlZ2VyRXhwZWN0aW5nRGVmaW5lZChOb2RlKiBvcDEsIE5vZGUqIG9wMikK
ICAgICB7Ci0gICAgICAgIHJldHVybiBvcDEuc2hvdWxkU3BlY3VsYXRlSW50ZWdlckV4cGVjdGlu
Z0RlZmluZWQoKSAmJiBvcDIuc2hvdWxkU3BlY3VsYXRlSW50ZWdlckV4cGVjdGluZ0RlZmluZWQo
KTsKKyAgICAgICAgcmV0dXJuIG9wMS0+c2hvdWxkU3BlY3VsYXRlSW50ZWdlckV4cGVjdGluZ0Rl
ZmluZWQoKSAmJiBvcDItPnNob3VsZFNwZWN1bGF0ZUludGVnZXJFeHBlY3RpbmdEZWZpbmVkKCk7
CiAgICAgfQogICAgIAotICAgIHN0YXRpYyBib29sIHNob3VsZFNwZWN1bGF0ZURvdWJsZUZvckFy
aXRobWV0aWMoTm9kZSYgb3AxLCBOb2RlJiBvcDIpCisgICAgc3RhdGljIGJvb2wgc2hvdWxkU3Bl
Y3VsYXRlRG91YmxlRm9yQXJpdGhtZXRpYyhOb2RlKiBvcDEsIE5vZGUqIG9wMikKICAgICB7Ci0g
ICAgICAgIHJldHVybiBvcDEuc2hvdWxkU3BlY3VsYXRlRG91YmxlRm9yQXJpdGhtZXRpYygpICYm
IG9wMi5zaG91bGRTcGVjdWxhdGVEb3VibGVGb3JBcml0aG1ldGljKCk7CisgICAgICAgIHJldHVy
biBvcDEtPnNob3VsZFNwZWN1bGF0ZURvdWJsZUZvckFyaXRobWV0aWMoKSAmJiBvcDItPnNob3Vs
ZFNwZWN1bGF0ZURvdWJsZUZvckFyaXRobWV0aWMoKTsKICAgICB9CiAgICAgCi0gICAgc3RhdGlj
IGJvb2wgc2hvdWxkU3BlY3VsYXRlTnVtYmVyKE5vZGUmIG9wMSwgTm9kZSYgb3AyKQorICAgIHN0
YXRpYyBib29sIHNob3VsZFNwZWN1bGF0ZU51bWJlcihOb2RlKiBvcDEsIE5vZGUqIG9wMikKICAg
ICB7Ci0gICAgICAgIHJldHVybiBvcDEuc2hvdWxkU3BlY3VsYXRlTnVtYmVyKCkgJiYgb3AyLnNo
b3VsZFNwZWN1bGF0ZU51bWJlcigpOworICAgICAgICByZXR1cm4gb3AxLT5zaG91bGRTcGVjdWxh
dGVOdW1iZXIoKSAmJiBvcDItPnNob3VsZFNwZWN1bGF0ZU51bWJlcigpOwogICAgIH0KICAgICAK
LSAgICBzdGF0aWMgYm9vbCBzaG91bGRTcGVjdWxhdGVOdW1iZXJFeHBlY3RpbmdEZWZpbmVkKE5v
ZGUmIG9wMSwgTm9kZSYgb3AyKQorICAgIHN0YXRpYyBib29sIHNob3VsZFNwZWN1bGF0ZU51bWJl
ckV4cGVjdGluZ0RlZmluZWQoTm9kZSogb3AxLCBOb2RlKiBvcDIpCiAgICAgewotICAgICAgICBy
ZXR1cm4gb3AxLnNob3VsZFNwZWN1bGF0ZU51bWJlckV4cGVjdGluZ0RlZmluZWQoKSAmJiBvcDIu
c2hvdWxkU3BlY3VsYXRlTnVtYmVyRXhwZWN0aW5nRGVmaW5lZCgpOworICAgICAgICByZXR1cm4g
b3AxLT5zaG91bGRTcGVjdWxhdGVOdW1iZXJFeHBlY3RpbmdEZWZpbmVkKCkgJiYgb3AyLT5zaG91
bGRTcGVjdWxhdGVOdW1iZXJFeHBlY3RpbmdEZWZpbmVkKCk7CiAgICAgfQogICAgIAotICAgIHN0
YXRpYyBib29sIHNob3VsZFNwZWN1bGF0ZUZpbmFsT2JqZWN0KE5vZGUmIG9wMSwgTm9kZSYgb3Ay
KQorICAgIHN0YXRpYyBib29sIHNob3VsZFNwZWN1bGF0ZUZpbmFsT2JqZWN0KE5vZGUqIG9wMSwg
Tm9kZSogb3AyKQogICAgIHsKLSAgICAgICAgcmV0dXJuIG9wMS5zaG91bGRTcGVjdWxhdGVGaW5h
bE9iamVjdCgpICYmIG9wMi5zaG91bGRTcGVjdWxhdGVGaW5hbE9iamVjdCgpOworICAgICAgICBy
ZXR1cm4gb3AxLT5zaG91bGRTcGVjdWxhdGVGaW5hbE9iamVjdCgpICYmIG9wMi0+c2hvdWxkU3Bl
Y3VsYXRlRmluYWxPYmplY3QoKTsKICAgICB9CiAKLSAgICBzdGF0aWMgYm9vbCBzaG91bGRTcGVj
dWxhdGVBcnJheShOb2RlJiBvcDEsIE5vZGUmIG9wMikKKyAgICBzdGF0aWMgYm9vbCBzaG91bGRT
cGVjdWxhdGVBcnJheShOb2RlKiBvcDEsIE5vZGUqIG9wMikKICAgICB7Ci0gICAgICAgIHJldHVy
biBvcDEuc2hvdWxkU3BlY3VsYXRlQXJyYXkoKSAmJiBvcDIuc2hvdWxkU3BlY3VsYXRlQXJyYXko
KTsKKyAgICAgICAgcmV0dXJuIG9wMS0+c2hvdWxkU3BlY3VsYXRlQXJyYXkoKSAmJiBvcDItPnNo
b3VsZFNwZWN1bGF0ZUFycmF5KCk7CiAgICAgfQogICAgIAogICAgIGJvb2wgY2FuU3BlY3VsYXRl
SW50ZWdlcigpCkBAIC0xMTk1LDE1ICsxMTk5LDE3IEBAIHN0cnVjdCBOb2RlIHsKICAgICB7CiAg
ICAgICAgIGlmICghY2hpbGQxKCkpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIG91dC5w
cmludGYoIkAldSIsIGNoaWxkMSgpLmluZGV4KCkpOworICAgICAgICBvdXQucHJpbnRmKCJAJXUi
LCBjaGlsZDEoKS0+aW5kZXgoKSk7CiAgICAgICAgIGlmICghY2hpbGQyKCkpCiAgICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIG91dC5wcmludGYoIiwgQCV1IiwgY2hpbGQyKCkuaW5kZXgoKSk7
CisgICAgICAgIG91dC5wcmludGYoIiwgQCV1IiwgY2hpbGQyKCktPmluZGV4KCkpOwogICAgICAg
ICBpZiAoIWNoaWxkMygpKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBvdXQucHJpbnRm
KCIsIEAldSIsIGNoaWxkMygpLmluZGV4KCkpOworICAgICAgICBvdXQucHJpbnRmKCIsIEAldSIs
IGNoaWxkMygpLT5pbmRleCgpKTsKICAgICB9CiAgICAgCisgICAgLy8gTkIuIFRoaXMgY2xhc3Mg
bXVzdCBoYXZlIGEgdHJpdmlhbCBkZXN0cnVjdG9yLgorICAgIAogICAgIC8vIFVzZWQgdG8gbG9v
ayB1cCBleGNlcHRpb24gaGFuZGxpbmcgaW5mb3JtYXRpb24gKGN1cnJlbnRseSBpbXBsZW1lbnRl
ZCBhcyBhIGJ5dGVjb2RlIGluZGV4KS4KICAgICBDb2RlT3JpZ2luIGNvZGVPcmlnaW47CiAgICAg
Ly8gUmVmZXJlbmNlcyB0byB1cCB0byAzIGNoaWxkcmVuLCBvciBsaW5rcyB0byBhIHZhcmlhYmxl
IGxlbmd0aCBzZXQgb2YgY2hpbGRyZW4uCkBAIC0xMjI2LDEwICsxMjMyLDE2IEBAIHByaXZhdGU6
CiBwdWJsaWM6CiAgICAgLy8gRmllbGRzIHVzZWQgYnkgdmFyaW91cyBhbmFseXNlcy4KICAgICBB
YnN0cmFjdFZhbHVlIHZhbHVlOwotICAgIE5vZGVJbmRleCByZXBsYWNlbWVudDsKKyAgICBOb2Rl
KiByZXBsYWNlbWVudDsKIH07CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKIAorbmFtZXNw
YWNlIFdURiB7CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYsIEpTQzo6REZHOjpO
b2RlKik7CisKK30gLy8gbmFtZXNwYWNlIFdURgorCiAjZW5kaWYKICNlbmRpZgpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlQWxsb2NhdG9yLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlQWxsb2NhdG9yLmgJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVBbGxvY2F0b3IuaAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSw1MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaWZuZGVmIERGR05vZGVBbGxvY2F0b3JfaAorI2RlZmluZSBERkdOb2Rl
QWxsb2NhdG9yX2gKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKERG
R19KSVQpCisKKyNpbmNsdWRlICJERkdBbGxvY2F0b3IuaCIKKyNpbmNsdWRlICJERkdOb2RlLmgi
CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKwordHlwZWRlZiBBbGxvY2F0b3I8
Tm9kZT4gTm9kZUFsbG9jYXRvcjsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCitpbmxp
bmUgdm9pZCogb3BlcmF0b3IgbmV3IChzaXplX3Qgc2l6ZSwgSlNDOjpERkc6Ok5vZGVBbGxvY2F0
b3ImIGFsbG9jYXRvcikKK3sKKyAgICBBU1NFUlRfVU5VU0VEKHNpemUsIHNpemUgPT0gc2l6ZW9m
KEpTQzo6REZHOjpOb2RlKSk7CisgICAgcmV0dXJuIGFsbG9jYXRvci5hbGxvY2F0ZSgpOworfQor
CisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdOb2RlQWxsb2NhdG9y
X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQuY3BwCShyZXZp
c2lvbiAxNDEwNTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zOCw3ICszOCw2IEBAIE9TUkV4aXQ6Ok9TUkV4aXQoRXhpdEtp
bmQga2luZCwgSlNWYWx1ZVMKICAgICA6IG1fanNWYWx1ZVNvdXJjZShqc1ZhbHVlU291cmNlKQog
ICAgICwgbV92YWx1ZVByb2ZpbGUodmFsdWVQcm9maWxlKQogICAgICwgbV9wYXRjaGFibGVDb2Rl
T2Zmc2V0KDApCi0gICAgLCBtX25vZGVJbmRleChqaXQtPm1fY29tcGlsZUluZGV4KQogICAgICwg
bV9jb2RlT3JpZ2luKGppdC0+bV9jb2RlT3JpZ2luRm9yT1NSKQogICAgICwgbV9jb2RlT3JpZ2lu
Rm9yRXhpdFByb2ZpbGUobV9jb2RlT3JpZ2luKQogICAgICwgbV9yZWNvdmVyeUluZGV4KHJlY292
ZXJ5SW5kZXgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQuaAkocmV2
aXNpb24gMTQxMDUyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTkxLDcgKzkxLDYgQEAgc3RydWN0IE9TUkV4aXQgewogICAgIE1l
dGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUgbV92YWx1ZVByb2ZpbGU7CiAKICAgICB1bnNpZ25l
ZCBtX3BhdGNoYWJsZUNvZGVPZmZzZXQ7Ci0gICAgTm9kZUluZGV4IG1fbm9kZUluZGV4OwogICAg
IENvZGVPcmlnaW4gbV9jb2RlT3JpZ2luOwogICAgIENvZGVPcmlnaW4gbV9jb2RlT3JpZ2luRm9y
RXhpdFByb2ZpbGU7CiAgICAgCkBAIC0xMjQsNyArMTIzLDYgQEAgcHJpdmF0ZToKIAogc3RydWN0
IFNwZWN1bGF0aW9uRmFpbHVyZURlYnVnSW5mbyB7CiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2s7
Ci0gICAgTm9kZUluZGV4IG5vZGVJbmRleDsKIH07CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpE
RkcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyMzJf
NjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhp
dENvbXBpbGVyMzJfNjQuY3BwCShyZXZpc2lvbiAxNDEwNTIpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlcjMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzgsNyArMzgsNyBAQCB2b2lkIE9TUkV4aXRDb21waWxlcjo6Y29tcGlsZUV4aXQoY29uc3QgCiB7
CiAgICAgLy8gMSkgUHJvLWZvcm1hIHN0dWZmLgogI2lmIERGR19FTkFCTEUoREVCVUdfVkVSQk9T
RSkKLSAgICBkYXRhTG9nRigiT1NSIGV4aXQgZm9yIE5vZGUgQCVkICgiLCAoaW50KWV4aXQubV9u
b2RlSW5kZXgpOworICAgIGRhdGFMb2dGKCJPU1IgZXhpdCAoIik7CiAgICAgZm9yIChDb2RlT3Jp
Z2luIGNvZGVPcmlnaW4gPSBleGl0Lm1fY29kZU9yaWdpbjsgOyBjb2RlT3JpZ2luID0gY29kZU9y
aWdpbi5pbmxpbmVDYWxsRnJhbWUtPmNhbGxlcikgewogICAgICAgICBkYXRhTG9nRigiYmMjJXUi
LCBjb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgpOwogICAgICAgICBpZiAoIWNvZGVPcmlnaW4uaW5s
aW5lQ2FsbEZyYW1lKQpAQCAtNTIsNyArNTIsNiBAQCB2b2lkIE9TUkV4aXRDb21waWxlcjo6Y29t
cGlsZUV4aXQoY29uc3QgCiAgICAgaWYgKE9wdGlvbnM6OnByaW50RWFjaE9TUkV4aXQoKSkgewog
ICAgICAgICBTcGVjdWxhdGlvbkZhaWx1cmVEZWJ1Z0luZm8qIGRlYnVnSW5mbyA9IG5ldyBTcGVj
dWxhdGlvbkZhaWx1cmVEZWJ1Z0luZm87CiAgICAgICAgIGRlYnVnSW5mby0+Y29kZUJsb2NrID0g
bV9qaXQuY29kZUJsb2NrKCk7Ci0gICAgICAgIGRlYnVnSW5mby0+bm9kZUluZGV4ID0gZXhpdC5t
X25vZGVJbmRleDsKICAgICAgICAgCiAgICAgICAgIG1faml0LmRlYnVnQ2FsbChkZWJ1Z09wZXJh
dGlvblByaW50U3BlY3VsYXRpb25GYWlsdXJlLCBkZWJ1Z0luZm8pOwogICAgIH0KSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyNjQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyNjQuY3Bw
CShyZXZpc2lvbiAxNDEwNTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4
aXRDb21waWxlcjY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDExLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzgsNyArMzgsNyBAQCB2b2lkIE9TUkV4
aXRDb21waWxlcjo6Y29tcGlsZUV4aXQoY29uc3QgCiB7CiAgICAgLy8gMSkgUHJvLWZvcm1hIHN0
dWZmLgogI2lmIERGR19FTkFCTEUoREVCVUdfVkVSQk9TRSkKLSAgICBkYXRhTG9nRigiT1NSIGV4
aXQgZm9yIE5vZGUgQCVkICgiLCAoaW50KWV4aXQubV9ub2RlSW5kZXgpOworICAgIGRhdGFMb2dG
KCJPU1IgZXhpdCBmb3IgKCIpOwogICAgIGZvciAoQ29kZU9yaWdpbiBjb2RlT3JpZ2luID0gZXhp
dC5tX2NvZGVPcmlnaW47IDsgY29kZU9yaWdpbiA9IGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1l
LT5jYWxsZXIpIHsKICAgICAgICAgZGF0YUxvZ0YoImJjIyV1IiwgY29kZU9yaWdpbi5ieXRlY29k
ZUluZGV4KTsKICAgICAgICAgaWYgKCFjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSkKQEAgLTUy
LDcgKzUyLDYgQEAgdm9pZCBPU1JFeGl0Q29tcGlsZXI6OmNvbXBpbGVFeGl0KGNvbnN0IAogICAg
IGlmIChPcHRpb25zOjpwcmludEVhY2hPU1JFeGl0KCkpIHsKICAgICAgICAgU3BlY3VsYXRpb25G
YWlsdXJlRGVidWdJbmZvKiBkZWJ1Z0luZm8gPSBuZXcgU3BlY3VsYXRpb25GYWlsdXJlRGVidWdJ
bmZvOwogICAgICAgICBkZWJ1Z0luZm8tPmNvZGVCbG9jayA9IG1faml0LmNvZGVCbG9jaygpOwot
ICAgICAgICBkZWJ1Z0luZm8tPm5vZGVJbmRleCA9IGV4aXQubV9ub2RlSW5kZXg7CiAgICAgICAg
IAogICAgICAgICBtX2ppdC5kZWJ1Z0NhbGwoZGVidWdPcGVyYXRpb25QcmludFNwZWN1bGF0aW9u
RmFpbHVyZSwgZGVidWdJbmZvKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR09TUkV4aXRDb21waWxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXIuY3BwCShyZXZpc2lvbiAxNDEwNTIpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTg1LDcgKzg1LDcgQEAgdm9pZCBjb21waWxlT1NSRXhpdChFeGVjU3RhdGUqIGV4
ZWMpCiAjaWYgREZHX0VOQUJMRShERUJVR19WRVJCT1NFKQogICAgIGRhdGFMb2coCiAgICAgICAg
ICJHZW5lcmF0aW5nIE9TUiBleGl0ICMiLCBleGl0SW5kZXgsICIgKHNlcSMiLCBleGl0Lm1fc3Ry
ZWFtSW5kZXgsCi0gICAgICAgICIsIGJjIyIsIGV4aXQubV9jb2RlT3JpZ2luLmJ5dGVjb2RlSW5k
ZXgsICIsIEAiLCBleGl0Lm1fbm9kZUluZGV4LCAiLCAiLAorICAgICAgICAiLCBiYyMiLCBleGl0
Lm1fY29kZU9yaWdpbi5ieXRlY29kZUluZGV4LCAiLCAiLAogICAgICAgICBleGl0Lm1fa2luZCwg
IikgZm9yICIsICpjb2RlQmxvY2ssICIuXG4iKTsKICNlbmRpZgogCkBAIC0xMTIsOCArMTEyLDgg
QEAgdm9pZCBjb21waWxlT1NSRXhpdChFeGVjU3RhdGUqIGV4ZWMpCiAgICAgICAgIGV4aXQubV9j
b2RlID0gRklOQUxJWkVfQ09ERV9JRigKICAgICAgICAgICAgIHNob3VsZFNob3dEaXNhc3NlbWJs
eSgpLAogICAgICAgICAgICAgcGF0Y2hCdWZmZXIsCi0gICAgICAgICAgICAoIkRGRyBPU1IgZXhp
dCAjJXUgKGJjIyV1LCBAJXUsICVzKSBmcm9tICVzIiwKLSAgICAgICAgICAgICAgICBleGl0SW5k
ZXgsIGV4aXQubV9jb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgsIGV4aXQubV9ub2RlSW5kZXgsCisg
ICAgICAgICAgICAoIkRGRyBPU1IgZXhpdCAjJXUgKGJjIyV1LCAlcykgZnJvbSAlcyIsCisgICAg
ICAgICAgICAgICAgZXhpdEluZGV4LCBleGl0Lm1fY29kZU9yaWdpbi5ieXRlY29kZUluZGV4LAog
ICAgICAgICAgICAgICAgIGV4aXRLaW5kVG9TdHJpbmcoZXhpdC5tX2tpbmQpLCB0b0NTdHJpbmco
KmNvZGVCbG9jaykuZGF0YSgpKSk7CiAgICAgfQogICAgIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAxNDEwNTIpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xNjE3LDggKzE2MTcsNyBAQCB2b2lkIERGR19PUEVSQVRJT04gZGVidWdPcGVyYXRpb25Qcmlu
dFNwCiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBkZWJ1Z0luZm8tPmNvZGVCbG9jazsKICAg
ICBDb2RlQmxvY2sqIGFsdGVybmF0aXZlID0gY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpOwogICAg
IGRhdGFMb2coCi0gICAgICAgICJTcGVjdWxhdGlvbiBmYWlsdXJlIGluICIsICpjb2RlQmxvY2ss
ICIgYXQgQCIsIGRlYnVnSW5mby0+bm9kZUluZGV4LAotICAgICAgICAiIHdpdGggIik7CisgICAg
ICAgICJTcGVjdWxhdGlvbiBmYWlsdXJlIGluICIsICpjb2RlQmxvY2ssICIgd2l0aCAiKTsKICAg
ICBpZiAoYWx0ZXJuYXRpdmUpIHsKICAgICAgICAgZGF0YUxvZygKICAgICAgICAgICAgICJleGVj
dXRlQ291bnRlciA9ICIsIGFsdGVybmF0aXZlLT5qaXRFeGVjdXRlQ291bnRlcigpLApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQaGFzZS5jcHAJKHJldmlzaW9uIDE0MTA1MikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zMiwyMSArMzIsMjEgQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCi0j
aWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQogdm9pZCBQaGFzZTo6YmVn
aW5QaGFzZSgpCiB7CisgICAgaWYgKCFzaG91bGREdW1wR3JhcGhBdEVhY2hQaGFzZSgpKQorICAg
ICAgICByZXR1cm47CiAgICAgZGF0YUxvZ0YoIkJlZ2lubmluZyBERkcgcGhhc2UgJXMuXG4iLCBt
X25hbWUpOwogICAgIGRhdGFMb2dGKCJHcmFwaCBiZWZvcmUgJXM6XG4iLCBtX25hbWUpOwogICAg
IG1fZ3JhcGguZHVtcCgpOwogfQotI2VuZGlmCiAKLSNpZiBERkdfRU5BQkxFKFBFUl9QSEFTRV9W
QUxJREFUSU9OKQogdm9pZCBQaGFzZTo6ZW5kUGhhc2UoKQogeworICAgIGlmICghT3B0aW9uczo6
dmFsaWRhdGVHcmFwaEF0RWFjaFBoYXNlKCkpCisgICAgICAgIHJldHVybjsKICAgICB2YWxpZGF0
ZShtX2dyYXBoLCBEdW1wR3JhcGgpOwogfQotI2VuZGlmCiAKIH0gfSAvLyBuYW1lc3BhY2UgSlND
OjpERkcKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQaGFzZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGhhc2UuaAkocmV2aXNpb24g
MTQxMDUyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQaGFzZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC02NSwyNiArNjUsMTYgQEAgcHJvdGVjdGVkOgogICAgIAogcHJpdmF0ZToKICAg
ICAvLyBDYWxsIHRoZXNlIGhvb2tzIHdoZW4gc3RhcnRpbmcgYW5kIGZpbmlzaGluZy4KLSNpZiBE
RkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCiAgICAgdm9pZCBiZWdpblBoYXNl
KCk7Ci0jZWxzZQotICAgIHZvaWQgYmVnaW5QaGFzZSgpIHsgfQotI2VuZGlmCi0jaWYgREZHX0VO
QUJMRShQRVJfUEhBU0VfVkFMSURBVElPTikKICAgICB2b2lkIGVuZFBoYXNlKCk7Ci0jZWxzZQot
ICAgIHZvaWQgZW5kUGhhc2UoKSB7IH0KLSNlbmRpZgogfTsKIAogdGVtcGxhdGU8dHlwZW5hbWUg
UGhhc2VUeXBlPgogYm9vbCBydW5BbmRMb2coUGhhc2VUeXBlJiBwaGFzZSkKIHsKICAgICBib29s
IHJlc3VsdCA9IHBoYXNlLnJ1bigpOwotI2lmIERGR19FTkFCTEUoREVCVUdfVkVSQk9TRSkKLSAg
ICBpZiAocmVzdWx0KQorICAgIGlmIChPcHRpb25zOjpkdW1wR3JhcGhBdEVhY2hQaGFzZSgpKQog
ICAgICAgICBkYXRhTG9nRigiUGhhc2UgJXMgY2hhbmdlZCB0aGUgSVIuXG4iLCBwaGFzZS5uYW1l
KCkpOwotI2VuZGlmCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25Q
aGFzZS5jcHAJKHJldmlzaW9uIDE0MTA1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTIsIDIwMTMgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC04NSw3NSArODUsNzMgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBib29sIHNldFByZWRp
Y3Rpb24oU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbikKICAgICB7Ci0gICAgICAgIEFTU0VSVCht
X2dyYXBoW21fY29tcGlsZUluZGV4XS5oYXNSZXN1bHQoKSk7CisgICAgICAgIEFTU0VSVChtX2N1
cnJlbnROb2RlLT5oYXNSZXN1bHQoKSk7CiAgICAgICAgIAogICAgICAgICAvLyBzZXRQcmVkaWN0
aW9uKCkgaXMgdXNlZCB3aGVuIHdlIGtub3cgdGhhdCB0aGVyZSBpcyBubyB3YXkgdGhhdCB3ZSBj
YW4gY2hhbmdlCiAgICAgICAgIC8vIG91ciBtaW5kcyBhYm91dCB3aGF0IHRoZSBwcmVkaWN0aW9u
IGlzIGdvaW5nIHRvIGJlLiBUaGVyZSBpcyBubyBzZW1hbnRpYwogICAgICAgICAvLyBkaWZmZXJl
bmNlIGJldHdlZW4gc2V0UHJlZGljdGlvbigpIGFuZCBtZXJnZVNwZWN1bGF0aW9uKCkgb3RoZXIg
dGhhbiB0aGUKICAgICAgICAgLy8gaW5jcmVhc2VkIGNoZWNraW5nIHRvIHZhbGlkYXRlIHRoaXMg
cHJvcGVydHkuCi0gICAgICAgIEFTU0VSVChtX2dyYXBoW21fY29tcGlsZUluZGV4XS5wcmVkaWN0
aW9uKCkgPT0gU3BlY05vbmUgfHwgbV9ncmFwaFttX2NvbXBpbGVJbmRleF0ucHJlZGljdGlvbigp
ID09IHByZWRpY3Rpb24pOworICAgICAgICBBU1NFUlQobV9jdXJyZW50Tm9kZS0+cHJlZGljdGlv
bigpID09IFNwZWNOb25lIHx8IG1fY3VycmVudE5vZGUtPnByZWRpY3Rpb24oKSA9PSBwcmVkaWN0
aW9uKTsKICAgICAgICAgCi0gICAgICAgIHJldHVybiBtX2dyYXBoW21fY29tcGlsZUluZGV4XS5w
cmVkaWN0KHByZWRpY3Rpb24pOworICAgICAgICByZXR1cm4gbV9jdXJyZW50Tm9kZS0+cHJlZGlj
dChwcmVkaWN0aW9uKTsKICAgICB9CiAgICAgCiAgICAgYm9vbCBtZXJnZVByZWRpY3Rpb24oU3Bl
Y3VsYXRlZFR5cGUgcHJlZGljdGlvbikKICAgICB7Ci0gICAgICAgIEFTU0VSVChtX2dyYXBoW21f
Y29tcGlsZUluZGV4XS5oYXNSZXN1bHQoKSk7CisgICAgICAgIEFTU0VSVChtX2N1cnJlbnROb2Rl
LT5oYXNSZXN1bHQoKSk7CiAgICAgICAgIAotICAgICAgICByZXR1cm4gbV9ncmFwaFttX2NvbXBp
bGVJbmRleF0ucHJlZGljdChwcmVkaWN0aW9uKTsKKyAgICAgICAgcmV0dXJuIG1fY3VycmVudE5v
ZGUtPnByZWRpY3QocHJlZGljdGlvbik7CiAgICAgfQogICAgIAotICAgIGJvb2wgaXNOb3ROZWda
ZXJvKE5vZGVJbmRleCBub2RlSW5kZXgpCisgICAgYm9vbCBpc05vdE5lZ1plcm8oTm9kZSogbm9k
ZSkKICAgICB7Ci0gICAgICAgIGlmICghbV9ncmFwaC5pc051bWJlckNvbnN0YW50KG5vZGVJbmRl
eCkpCisgICAgICAgIGlmICghbV9ncmFwaC5pc051bWJlckNvbnN0YW50KG5vZGUpKQogICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBkb3VibGUgdmFsdWUgPSBtX2dyYXBoLnZhbHVl
T2ZOdW1iZXJDb25zdGFudChub2RlSW5kZXgpOworICAgICAgICBkb3VibGUgdmFsdWUgPSBtX2dy
YXBoLnZhbHVlT2ZOdW1iZXJDb25zdGFudChub2RlKTsKICAgICAgICAgcmV0dXJuICF2YWx1ZSAm
JiAxLjAgLyB2YWx1ZSA8IDAuMDsKICAgICB9CiAgICAgCi0gICAgYm9vbCBpc05vdFplcm8oTm9k
ZUluZGV4IG5vZGVJbmRleCkKKyAgICBib29sIGlzTm90WmVybyhOb2RlKiBub2RlKQogICAgIHsK
LSAgICAgICAgaWYgKCFtX2dyYXBoLmlzTnVtYmVyQ29uc3RhbnQobm9kZUluZGV4KSkKKyAgICAg
ICAgaWYgKCFtX2dyYXBoLmlzTnVtYmVyQ29uc3RhbnQobm9kZSkpCiAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgICAgIHJldHVybiAhIW1fZ3JhcGgudmFsdWVPZk51bWJlckNvbnN0YW50
KG5vZGVJbmRleCk7CisgICAgICAgIHJldHVybiAhIW1fZ3JhcGgudmFsdWVPZk51bWJlckNvbnN0
YW50KG5vZGUpOwogICAgIH0KICAgICAKLSAgICBib29sIGlzV2l0aGluUG93ZXJPZlR3b0ZvckNv
bnN0YW50KE5vZGUmIG5vZGUsIGludCBwb3dlcikKKyAgICBib29sIGlzV2l0aGluUG93ZXJPZlR3
b0ZvckNvbnN0YW50KE5vZGUqIG5vZGUsIGludCBwb3dlcikKICAgICB7Ci0gICAgICAgIEpTVmFs
dWUgaW1tZWRpYXRlVmFsdWUgPSBub2RlLnZhbHVlT2ZKU0NvbnN0YW50KGNvZGVCbG9jaygpKTsK
KyAgICAgICAgSlNWYWx1ZSBpbW1lZGlhdGVWYWx1ZSA9IG5vZGUtPnZhbHVlT2ZKU0NvbnN0YW50
KGNvZGVCbG9jaygpKTsKICAgICAgICAgaWYgKCFpbW1lZGlhdGVWYWx1ZS5pc0ludDMyKCkpCiAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGludDMyX3QgaW50SW1tZWRpYXRlID0g
aW1tZWRpYXRlVmFsdWUuYXNJbnQzMigpOwogICAgICAgICByZXR1cm4gaW50SW1tZWRpYXRlID4g
LSgxIDw8IHBvd2VyKSAmJiBpbnRJbW1lZGlhdGUgPCAoMSA8PCBwb3dlcik7CiAgICAgfQogICAg
IAotICAgIGJvb2wgaXNXaXRoaW5Qb3dlck9mVHdvTm9uUmVjdXJzaXZlKE5vZGVJbmRleCBub2Rl
SW5kZXgsIGludCBwb3dlcikKKyAgICBib29sIGlzV2l0aGluUG93ZXJPZlR3b05vblJlY3Vyc2l2
ZShOb2RlKiBub2RlLCBpbnQgcG93ZXIpCiAgICAgewotICAgICAgICBOb2RlJiBub2RlID0gbV9n
cmFwaFtub2RlSW5kZXhdOwotICAgICAgICBpZiAobm9kZS5vcCgpICE9IEpTQ29uc3RhbnQpCisg
ICAgICAgIGlmIChub2RlLT5vcCgpICE9IEpTQ29uc3RhbnQpCiAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgICAgIHJldHVybiBpc1dpdGhpblBvd2VyT2ZUd29Gb3JDb25zdGFudChub2Rl
LCBwb3dlcik7CiAgICAgfQogICAgIAotICAgIGJvb2wgaXNXaXRoaW5Qb3dlck9mVHdvKE5vZGVJ
bmRleCBub2RlSW5kZXgsIGludCBwb3dlcikKKyAgICBib29sIGlzV2l0aGluUG93ZXJPZlR3byhO
b2RlKiBub2RlLCBpbnQgcG93ZXIpCiAgICAgewotICAgICAgICBOb2RlJiBub2RlID0gbV9ncmFw
aFtub2RlSW5kZXhdOwotICAgICAgICBzd2l0Y2ggKG5vZGUub3AoKSkgeworICAgICAgICBzd2l0
Y2ggKG5vZGUtPm9wKCkpIHsKICAgICAgICAgY2FzZSBKU0NvbnN0YW50OiB7CiAgICAgICAgICAg
ICByZXR1cm4gaXNXaXRoaW5Qb3dlck9mVHdvRm9yQ29uc3RhbnQobm9kZSwgcG93ZXIpOwogICAg
ICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBCaXRBbmQ6IHsKLSAgICAgICAgICAg
IHJldHVybiBpc1dpdGhpblBvd2VyT2ZUd29Ob25SZWN1cnNpdmUobm9kZS5jaGlsZDEoKS5pbmRl
eCgpLCBwb3dlcikKLSAgICAgICAgICAgICAgICB8fCBpc1dpdGhpblBvd2VyT2ZUd29Ob25SZWN1
cnNpdmUobm9kZS5jaGlsZDIoKS5pbmRleCgpLCBwb3dlcik7CisgICAgICAgICAgICByZXR1cm4g
aXNXaXRoaW5Qb3dlck9mVHdvTm9uUmVjdXJzaXZlKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgcG93
ZXIpCisgICAgICAgICAgICAgICAgfHwgaXNXaXRoaW5Qb3dlck9mVHdvTm9uUmVjdXJzaXZlKG5v
ZGUtPmNoaWxkMigpLm5vZGUoKSwgcG93ZXIpOwogICAgICAgICB9CiAgICAgICAgICAgICAKICAg
ICAgICAgY2FzZSBCaXRSU2hpZnQ6CiAgICAgICAgIGNhc2UgQml0VVJTaGlmdDogewotICAgICAg
ICAgICAgTm9kZSYgc2hpZnRBbW91bnQgPSBtX2dyYXBoW25vZGUuY2hpbGQyKCldOwotICAgICAg
ICAgICAgaWYgKHNoaWZ0QW1vdW50Lm9wKCkgIT0gSlNDb25zdGFudCkKKyAgICAgICAgICAgIE5v
ZGUqIHNoaWZ0QW1vdW50ID0gbm9kZS0+Y2hpbGQyKCkubm9kZSgpOworICAgICAgICAgICAgaWYg
KHNoaWZ0QW1vdW50LT5vcCgpICE9IEpTQ29uc3RhbnQpCiAgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgICAgICAgSlNWYWx1ZSBpbW1lZGlhdGVWYWx1ZSA9IHNoaWZ0QW1vdW50
LnZhbHVlT2ZKU0NvbnN0YW50KGNvZGVCbG9jaygpKTsKKyAgICAgICAgICAgIEpTVmFsdWUgaW1t
ZWRpYXRlVmFsdWUgPSBzaGlmdEFtb3VudC0+dmFsdWVPZkpTQ29uc3RhbnQoY29kZUJsb2NrKCkp
OwogICAgICAgICAgICAgaWYgKCFpbW1lZGlhdGVWYWx1ZS5pc0ludDMyKCkpCiAgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgcmV0dXJuIGltbWVkaWF0ZVZhbHVlID4g
MzIgLSBwb3dlcjsKQEAgLTE3OCwxNiArMTc2LDE2IEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVy
biBzcGVjdWxhdGVkRG91YmxlVHlwZUZvclByZWRpY3Rpb24obWVyZ2VTcGVjdWxhdGlvbnMobGVm
dCwgcmlnaHQpKTsKICAgICB9CiAKLSAgICB2b2lkIHByb3BhZ2F0ZShOb2RlJiBub2RlKQorICAg
IHZvaWQgcHJvcGFnYXRlKE5vZGUqIG5vZGUpCiAgICAgewotICAgICAgICBpZiAoIW5vZGUuc2hv
dWxkR2VuZXJhdGUoKSkKKyAgICAgICAgaWYgKCFub2RlLT5zaG91bGRHZW5lcmF0ZSgpKQogICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICAKLSAgICAgICAgTm9kZVR5cGUgb3AgPSBub2RlLm9w
KCk7Ci0gICAgICAgIE5vZGVGbGFncyBmbGFncyA9IG5vZGUuZmxhZ3MoKSAmIE5vZGVCYWNrUHJv
cE1hc2s7CisgICAgICAgIE5vZGVUeXBlIG9wID0gbm9kZS0+b3AoKTsKKyAgICAgICAgTm9kZUZs
YWdzIGZsYWdzID0gbm9kZS0+ZmxhZ3MoKSAmIE5vZGVCYWNrUHJvcE1hc2s7CiAKICNpZiBERkdf
RU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCi0gICAgICAgIGRhdGFMb2dGKCIgICAl
cyBAJXU6ICVzICIsIEdyYXBoOjpvcE5hbWUob3ApLCBtX2NvbXBpbGVJbmRleCwgbm9kZUZsYWdz
QXNTdHJpbmcoZmxhZ3MpKTsKKyAgICAgICAgZGF0YUxvZygiICAgIiwgR3JhcGg6Om9wTmFtZShv
cCksICIgIiwgbV9jdXJyZW50Tm9kZSwgIjogIiwgbm9kZUZsYWdzQXNTdHJpbmcoZmxhZ3MpLCAi
ICIpOwogI2VuZGlmCiAgICAgICAgIAogICAgICAgICBib29sIGNoYW5nZWQgPSBmYWxzZTsKQEAg
LTE5NSwxMiArMTkzLDEyIEBAIHByaXZhdGU6CiAgICAgICAgIHN3aXRjaCAob3ApIHsKICAgICAg
ICAgY2FzZSBKU0NvbnN0YW50OgogICAgICAgICBjYXNlIFdlYWtKU0NvbnN0YW50OiB7Ci0gICAg
ICAgICAgICBjaGFuZ2VkIHw9IHNldFByZWRpY3Rpb24oc3BlY3VsYXRpb25Gcm9tVmFsdWUobV9n
cmFwaC52YWx1ZU9mSlNDb25zdGFudChtX2NvbXBpbGVJbmRleCkpKTsKKyAgICAgICAgICAgIGNo
YW5nZWQgfD0gc2V0UHJlZGljdGlvbihzcGVjdWxhdGlvbkZyb21WYWx1ZShtX2dyYXBoLnZhbHVl
T2ZKU0NvbnN0YW50KG5vZGUpKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAg
ICAgICAgICAgCiAgICAgICAgIGNhc2UgR2V0TG9jYWw6IHsKLSAgICAgICAgICAgIFZhcmlhYmxl
QWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhID0gbm9kZS52YXJpYWJsZUFjY2Vzc0RhdGEo
KTsKKyAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhID0g
bm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CiAgICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSBw
cmVkaWN0aW9uID0gdmFyaWFibGVBY2Nlc3NEYXRhLT5wcmVkaWN0aW9uKCk7CiAgICAgICAgICAg
ICBpZiAocHJlZGljdGlvbikKICAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGlj
dGlvbihwcmVkaWN0aW9uKTsKQEAgLTIxMCwyMSArMjA4LDIxIEBAIHByaXZhdGU6CiAgICAgICAg
IH0KICAgICAgICAgICAgIAogICAgICAgICBjYXNlIFNldExvY2FsOiB7Ci0gICAgICAgICAgICBW
YXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9IG5vZGUudmFyaWFibGVBY2Nl
c3NEYXRhKCk7Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IHZhcmlhYmxlQWNjZXNzRGF0YS0+cHJl
ZGljdChtX2dyYXBoW25vZGUuY2hpbGQxKCldLnByZWRpY3Rpb24oKSk7CisgICAgICAgICAgICBW
YXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9IG5vZGUtPnZhcmlhYmxlQWNj
ZXNzRGF0YSgpOworICAgICAgICAgICAgY2hhbmdlZCB8PSB2YXJpYWJsZUFjY2Vzc0RhdGEtPnBy
ZWRpY3Qobm9kZS0+Y2hpbGQxKCktPnByZWRpY3Rpb24oKSk7CiAKICAgICAgICAgICAgIC8vIEFz
c3VtZSBjb25zZXJ2YXRpdmVseSB0aGF0IGEgU2V0TG9jYWwgaW1wbGllcyB0aGF0IHRoZSB2YWx1
ZSBtYXkgZmxvdyB0aHJvdWdoIGEgbG9vcCwKICAgICAgICAgICAgIC8vIGFuZCBzbyB3ZSB3b3Vs
ZCBoYXZlIG92ZXJmbG93IGxlYWRpbmcgdG8gdGhlIHByb2dyYW0gIm9ic2VydmluZyIgbnVtYmVy
cyBldmVuIGlmIGFsbAogICAgICAgICAgICAgLy8gdXNlcnMgb2YgdGhlIHZhbHVlIGFyZSBkb2lu
ZyB0b0ludDMyLiBJdCBtaWdodCBiZSB3b3J0aHdoaWxlIHRvIHJldmlzaXQgdGhpcyBhdCBzb21l
CiAgICAgICAgICAgICAvLyBwb2ludCBhbmQgYWN0dWFsbHkgY2hlY2sgaWYgdGhlIGRhdGEgZmxv
dyBpbnZvbHZlcyBsb29wcywgYnV0IHJpZ2h0IG5vdyBJIGRvbid0IHRoaW5rCiAgICAgICAgICAg
ICAvLyB3ZSBoYXZlIGV2aWRlbmNlIHRoYXQgdGhpcyB3b3VsZCBiZSBiZW5lZmljaWFsIGZvciBi
ZW5jaG1hcmtzLgotICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQxKCld
Lm1lcmdlRmxhZ3ModmFyaWFibGVBY2Nlc3NEYXRhLT5mbGFncygpIHwgTm9kZVVzZWRBc051bWJl
cik7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG5vZGUtPmNoaWxkMSgpLT5tZXJnZUZsYWdzKHZh
cmlhYmxlQWNjZXNzRGF0YS0+ZmxhZ3MoKSB8IE5vZGVVc2VkQXNOdW1iZXIpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBjYXNlIEZsdXNoOiB7
CiAgICAgICAgICAgICAvLyBNYWtlIHN1cmUgdGhhdCB0aGUgYW5hbHlzaXMga25vd3MgdGhhdCBm
bHVzaGVkIGxvY2FscyBlc2NhcGUuCi0gICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZh
cmlhYmxlQWNjZXNzRGF0YSA9IG5vZGUudmFyaWFibGVBY2Nlc3NEYXRhKCk7CisgICAgICAgICAg
ICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9IG5vZGUtPnZhcmlhYmxl
QWNjZXNzRGF0YSgpOwogICAgICAgICAgICAgY2hhbmdlZCB8PSB2YXJpYWJsZUFjY2Vzc0RhdGEt
Pm1lcmdlRmxhZ3MoTm9kZVVzZWRBc1ZhbHVlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9CkBAIC0yMzgsOCArMjM2LDggQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGNoYW5nZWQgfD0g
c2V0UHJlZGljdGlvbihTcGVjSW50MzIpOwogICAgICAgICAgICAgZmxhZ3MgfD0gTm9kZVVzZWRB
c0ludCB8IE5vZGVVc2VkQXNJbnRMb2NhbGx5OwogICAgICAgICAgICAgZmxhZ3MgJj0gfihOb2Rl
VXNlZEFzTnVtYmVyIHwgTm9kZU5lZWRzTmVnWmVybyB8IE5vZGVVc2VkQXNPdGhlcik7Ci0gICAg
ICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ubWVyZ2VGbGFncyhmbGFn
cyk7Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbm9kZS5jaGlsZDIoKV0ubWVyZ2VG
bGFncyhmbGFncyk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG5vZGUtPmNoaWxkMSgpLT5tZXJn
ZUZsYWdzKGZsYWdzKTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbm9kZS0+Y2hpbGQyKCktPm1l
cmdlRmxhZ3MoZmxhZ3MpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAg
ICAgIApAQCAtMjQ3LDUwICsyNDUsNTAgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGNoYW5nZWQg
fD0gc2V0UHJlZGljdGlvbihTcGVjSW50MzIpOwogICAgICAgICAgICAgZmxhZ3MgfD0gTm9kZVVz
ZWRBc0ludCB8IE5vZGVVc2VkQXNJbnRMb2NhbGx5OwogICAgICAgICAgICAgZmxhZ3MgJj0gfihO
b2RlVXNlZEFzTnVtYmVyIHwgTm9kZU5lZWRzTmVnWmVybyB8IE5vZGVVc2VkQXNPdGhlcik7Ci0g
ICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ubWVyZ2VGbGFncyhm
bGFncyk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG5vZGUtPmNoaWxkMSgpLT5tZXJnZUZsYWdz
KGZsYWdzKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKICAg
ICAgICAgY2FzZSBBcnJheVBvcDogewotICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVByZWRp
Y3Rpb24obm9kZS5nZXRIZWFwUHJlZGljdGlvbigpKTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0g
bWVyZ2VQcmVkaWN0aW9uKG5vZGUtPmdldEhlYXBQcmVkaWN0aW9uKCkpOwogICAgICAgICAgICAg
Y2hhbmdlZCB8PSBtZXJnZURlZmF1bHRGbGFncyhub2RlKTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICB9CiAKICAgICAgICAgY2FzZSBBcnJheVB1c2g6IHsKLSAgICAgICAgICAgIGNoYW5n
ZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKG5vZGUuZ2V0SGVhcFByZWRpY3Rpb24oKSk7Ci0gICAgICAg
ICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ubWVyZ2VGbGFncyhOb2RlVXNl
ZEFzVmFsdWUpOwotICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQyKCld
Lm1lcmdlRmxhZ3MoTm9kZVVzZWRBc1ZhbHVlKTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVy
Z2VQcmVkaWN0aW9uKG5vZGUtPmdldEhlYXBQcmVkaWN0aW9uKCkpOworICAgICAgICAgICAgY2hh
bmdlZCB8PSBub2RlLT5jaGlsZDEoKS0+bWVyZ2VGbGFncyhOb2RlVXNlZEFzVmFsdWUpOworICAg
ICAgICAgICAgY2hhbmdlZCB8PSBub2RlLT5jaGlsZDIoKS0+bWVyZ2VGbGFncyhOb2RlVXNlZEFz
VmFsdWUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIFJl
Z0V4cEV4ZWM6CiAgICAgICAgIGNhc2UgUmVnRXhwVGVzdDogewotICAgICAgICAgICAgY2hhbmdl
ZCB8PSBtZXJnZVByZWRpY3Rpb24obm9kZS5nZXRIZWFwUHJlZGljdGlvbigpKTsKKyAgICAgICAg
ICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKG5vZGUtPmdldEhlYXBQcmVkaWN0aW9uKCkp
OwogICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZURlZmF1bHRGbGFncyhub2RlKTsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBTdHJpbmdDaGFyQ29kZUF0
OiB7CiAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbihTcGVjSW50MzIpOwot
ICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLm1lcmdlRmxhZ3Mo
Tm9kZVVzZWRBc1ZhbHVlKTsKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaFtub2RlLmNo
aWxkMigpXS5tZXJnZUZsYWdzKE5vZGVVc2VkQXNOdW1iZXIgfCBOb2RlVXNlZEFzT3RoZXIgfCBO
b2RlVXNlZEFzSW50IHwgTm9kZVVzZWRBc0ludExvY2FsbHkpOworICAgICAgICAgICAgY2hhbmdl
ZCB8PSBub2RlLT5jaGlsZDEoKS0+bWVyZ2VGbGFncyhOb2RlVXNlZEFzVmFsdWUpOworICAgICAg
ICAgICAgY2hhbmdlZCB8PSBub2RlLT5jaGlsZDIoKS0+bWVyZ2VGbGFncyhOb2RlVXNlZEFzTnVt
YmVyIHwgTm9kZVVzZWRBc090aGVyIHwgTm9kZVVzZWRBc0ludCB8IE5vZGVVc2VkQXNJbnRMb2Nh
bGx5KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBVSW50
MzJUb051bWJlcjogewotICAgICAgICAgICAgaWYgKG5vZGVDYW5TcGVjdWxhdGVJbnRlZ2VyKG5v
ZGUuYXJpdGhOb2RlRmxhZ3MoKSkpCisgICAgICAgICAgICBpZiAobm9kZUNhblNwZWN1bGF0ZUlu
dGVnZXIobm9kZS0+YXJpdGhOb2RlRmxhZ3MoKSkpCiAgICAgICAgICAgICAgICAgY2hhbmdlZCB8
PSBtZXJnZVByZWRpY3Rpb24oU3BlY0ludDMyKTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAg
ICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbihTcGVjTnVtYmVyKTsKICAgICAgICAg
ICAgIAotICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLm1lcmdl
RmxhZ3MoZmxhZ3MpOworICAgICAgICAgICAgY2hhbmdlZCB8PSBub2RlLT5jaGlsZDEoKS0+bWVy
Z2VGbGFncyhmbGFncyk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCiAgICAgICAg
IGNhc2UgVmFsdWVBZGQ6IHsKLSAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIGxlZnQgPSBtX2dy
YXBoW25vZGUuY2hpbGQxKCldLnByZWRpY3Rpb24oKTsKLSAgICAgICAgICAgIFNwZWN1bGF0ZWRU
eXBlIHJpZ2h0ID0gbV9ncmFwaFtub2RlLmNoaWxkMigpXS5wcmVkaWN0aW9uKCk7CisgICAgICAg
ICAgICBTcGVjdWxhdGVkVHlwZSBsZWZ0ID0gbm9kZS0+Y2hpbGQxKCktPnByZWRpY3Rpb24oKTsK
KyAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHJpZ2h0ID0gbm9kZS0+Y2hpbGQyKCktPnByZWRp
Y3Rpb24oKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgQWRkU3BlY3VsYXRpb25Nb2RlIG1v
ZGUgPSBEb250U3BlY3VsYXRlSW50ZWdlcjsKICAgICAgICAgICAgIApAQCAtMzA3LDIyICszMDUs
MjIgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVByZWRp
Y3Rpb24oU3BlY1N0cmluZyB8IFNwZWNJbnQzMiB8IFNwZWNEb3VibGUpOwogICAgICAgICAgICAg
fQogICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoaXNOb3ROZWdaZXJvKG5vZGUuY2hpbGQx
KCkuaW5kZXgoKSkgfHwgaXNOb3ROZWdaZXJvKG5vZGUuY2hpbGQyKCkuaW5kZXgoKSkpCisgICAg
ICAgICAgICBpZiAoaXNOb3ROZWdaZXJvKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSkgfHwgaXNOb3RO
ZWdaZXJvKG5vZGUtPmNoaWxkMigpLm5vZGUoKSkpCiAgICAgICAgICAgICAgICAgZmxhZ3MgJj0g
fk5vZGVOZWVkc05lZ1plcm87Ci0gICAgICAgICAgICBpZiAobV9ncmFwaFtub2RlLmNoaWxkMSgp
XS5oYXNOdW1iZXJSZXN1bHQoKSB8fCBtX2dyYXBoW25vZGUuY2hpbGQyKCldLmhhc051bWJlclJl
c3VsdCgpKQorICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5oYXNOdW1iZXJSZXN1bHQo
KSB8fCBub2RlLT5jaGlsZDIoKS0+aGFzTnVtYmVyUmVzdWx0KCkpCiAgICAgICAgICAgICAgICAg
ZmxhZ3MgJj0gfk5vZGVVc2VkQXNPdGhlcjsKICAgICAgICAgICAgIAogICAgICAgICAgICAgaWYg
KG1vZGUgIT0gU3BlY3VsYXRlSW50ZWdlcikKICAgICAgICAgICAgICAgICBmbGFncyB8PSBOb2Rl
VXNlZEFzTnVtYmVyOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3Jh
cGhbbm9kZS5jaGlsZDEoKV0ubWVyZ2VGbGFncyhmbGFncyk7Ci0gICAgICAgICAgICBjaGFuZ2Vk
IHw9IG1fZ3JhcGhbbm9kZS5jaGlsZDIoKV0ubWVyZ2VGbGFncyhmbGFncyk7CisgICAgICAgICAg
ICBjaGFuZ2VkIHw9IG5vZGUtPmNoaWxkMSgpLT5tZXJnZUZsYWdzKGZsYWdzKTsKKyAgICAgICAg
ICAgIGNoYW5nZWQgfD0gbm9kZS0+Y2hpbGQyKCktPm1lcmdlRmxhZ3MoZmxhZ3MpOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBjYXNlIEFyaXRo
QWRkOiB7Ci0gICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSBsZWZ0ID0gbV9ncmFwaFtub2RlLmNo
aWxkMSgpXS5wcmVkaWN0aW9uKCk7Ci0gICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSByaWdodCA9
IG1fZ3JhcGhbbm9kZS5jaGlsZDIoKV0ucHJlZGljdGlvbigpOworICAgICAgICAgICAgU3BlY3Vs
YXRlZFR5cGUgbGVmdCA9IG5vZGUtPmNoaWxkMSgpLT5wcmVkaWN0aW9uKCk7CisgICAgICAgICAg
ICBTcGVjdWxhdGVkVHlwZSByaWdodCA9IG5vZGUtPmNoaWxkMigpLT5wcmVkaWN0aW9uKCk7CiAg
ICAgICAgICAgICAKICAgICAgICAgICAgIEFkZFNwZWN1bGF0aW9uTW9kZSBtb2RlID0gRG9udFNw
ZWN1bGF0ZUludGVnZXI7CiAgICAgICAgICAgICAKQEAgLTMzMywyMSArMzMxLDIxIEBAIHByaXZh
dGU6CiAgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKHNwZWN1
bGF0ZWREb3VibGVUeXBlRm9yUHJlZGljdGlvbnMobGVmdCwgcmlnaHQpKTsKICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKGlzTm90TmVnWmVybyhub2RlLmNoaWxk
MSgpLmluZGV4KCkpIHx8IGlzTm90TmVnWmVybyhub2RlLmNoaWxkMigpLmluZGV4KCkpKQorICAg
ICAgICAgICAgaWYgKGlzTm90TmVnWmVybyhub2RlLT5jaGlsZDEoKS5ub2RlKCkpIHx8IGlzTm90
TmVnWmVybyhub2RlLT5jaGlsZDIoKS5ub2RlKCkpKQogICAgICAgICAgICAgICAgIGZsYWdzICY9
IH5Ob2RlTmVlZHNOZWdaZXJvOwogICAgICAgICAgICAgZmxhZ3MgJj0gfk5vZGVVc2VkQXNPdGhl
cjsKICAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKG1vZGUgIT0gU3BlY3VsYXRlSW50ZWdl
cikKICAgICAgICAgICAgICAgICBmbGFncyB8PSBOb2RlVXNlZEFzTnVtYmVyOwogICAgICAgICAg
ICAgCi0gICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ubWVyZ2VG
bGFncyhmbGFncyk7Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbm9kZS5jaGlsZDIo
KV0ubWVyZ2VGbGFncyhmbGFncyk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG5vZGUtPmNoaWxk
MSgpLT5tZXJnZUZsYWdzKGZsYWdzKTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbm9kZS0+Y2hp
bGQyKCktPm1lcmdlRmxhZ3MoZmxhZ3MpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0K
ICAgICAgICAgICAgIAogICAgICAgICBjYXNlIEFyaXRoU3ViOiB7Ci0gICAgICAgICAgICBTcGVj
dWxhdGVkVHlwZSBsZWZ0ID0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5wcmVkaWN0aW9uKCk7Ci0g
ICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSByaWdodCA9IG1fZ3JhcGhbbm9kZS5jaGlsZDIoKV0u
cHJlZGljdGlvbigpOworICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgbGVmdCA9IG5vZGUtPmNo
aWxkMSgpLT5wcmVkaWN0aW9uKCk7CisgICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSByaWdodCA9
IG5vZGUtPmNoaWxkMigpLT5wcmVkaWN0aW9uKCk7CiAgICAgICAgICAgICAKICAgICAgICAgICAg
IEFkZFNwZWN1bGF0aW9uTW9kZSBtb2RlID0gRG9udFNwZWN1bGF0ZUludGVnZXI7CiAgICAgICAg
ICAgICAKQEAgLTM1OCwzOSArMzU2LDM5IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAg
IGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKHNwZWN1bGF0ZWREb3VibGVUeXBlRm9yUHJlZGlj
dGlvbnMobGVmdCwgcmlnaHQpKTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgaWYgKGlz
Tm90WmVybyhub2RlLmNoaWxkMSgpLmluZGV4KCkpIHx8IGlzTm90WmVybyhub2RlLmNoaWxkMigp
LmluZGV4KCkpKQorICAgICAgICAgICAgaWYgKGlzTm90WmVybyhub2RlLT5jaGlsZDEoKS5ub2Rl
KCkpIHx8IGlzTm90WmVybyhub2RlLT5jaGlsZDIoKS5ub2RlKCkpKQogICAgICAgICAgICAgICAg
IGZsYWdzICY9IH5Ob2RlTmVlZHNOZWdaZXJvOwogICAgICAgICAgICAgZmxhZ3MgJj0gfk5vZGVV
c2VkQXNPdGhlcjsKICAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKG1vZGUgIT0gU3BlY3Vs
YXRlSW50ZWdlcikKICAgICAgICAgICAgICAgICBmbGFncyB8PSBOb2RlVXNlZEFzTnVtYmVyOwog
ICAgICAgICAgICAgCi0gICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbm9kZS5jaGlsZDEo
KV0ubWVyZ2VGbGFncyhmbGFncyk7Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbm9k
ZS5jaGlsZDIoKV0ubWVyZ2VGbGFncyhmbGFncyk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG5v
ZGUtPmNoaWxkMSgpLT5tZXJnZUZsYWdzKGZsYWdzKTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0g
bm9kZS0+Y2hpbGQyKCktPm1lcmdlRmxhZ3MoZmxhZ3MpOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBjYXNlIEFyaXRoTmVnYXRlOgotICAgICAg
ICAgICAgaWYgKG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ucHJlZGljdGlvbigpKSB7CisgICAgICAg
ICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnByZWRpY3Rpb24oKSkgewogICAgICAgICAgICAgICAg
IGlmIChtX2dyYXBoLm5lZ2F0ZVNob3VsZFNwZWN1bGF0ZUludGVnZXIobm9kZSkpCiAgICAgICAg
ICAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKFNwZWNJbnQzMik7CiAgICAg
ICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJl
ZGljdGlvbihzcGVjdWxhdGVkRG91YmxlVHlwZUZvclByZWRpY3Rpb24obV9ncmFwaFtub2RlLmNo
aWxkMSgpXS5wcmVkaWN0aW9uKCkpKTsKKyAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBt
ZXJnZVByZWRpY3Rpb24oc3BlY3VsYXRlZERvdWJsZVR5cGVGb3JQcmVkaWN0aW9uKG5vZGUtPmNo
aWxkMSgpLT5wcmVkaWN0aW9uKCkpKTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgZmxh
Z3MgJj0gfk5vZGVVc2VkQXNPdGhlcjsKIAotICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBo
W25vZGUuY2hpbGQxKCldLm1lcmdlRmxhZ3MoZmxhZ3MpOworICAgICAgICAgICAgY2hhbmdlZCB8
PSBub2RlLT5jaGlsZDEoKS0+bWVyZ2VGbGFncyhmbGFncyk7CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgIAogICAgICAgICBjYXNlIEFyaXRoTWluOgogICAgICAgICBjYXNlIEFyaXRo
TWF4OiB7Ci0gICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSBsZWZ0ID0gbV9ncmFwaFtub2RlLmNo
aWxkMSgpXS5wcmVkaWN0aW9uKCk7Ci0gICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSByaWdodCA9
IG1fZ3JhcGhbbm9kZS5jaGlsZDIoKV0ucHJlZGljdGlvbigpOworICAgICAgICAgICAgU3BlY3Vs
YXRlZFR5cGUgbGVmdCA9IG5vZGUtPmNoaWxkMSgpLT5wcmVkaWN0aW9uKCk7CisgICAgICAgICAg
ICBTcGVjdWxhdGVkVHlwZSByaWdodCA9IG5vZGUtPmNoaWxkMigpLT5wcmVkaWN0aW9uKCk7CiAg
ICAgICAgICAgICAKICAgICAgICAgICAgIGlmIChsZWZ0ICYmIHJpZ2h0KSB7Ci0gICAgICAgICAg
ICAgICAgaWYgKE5vZGU6OnNob3VsZFNwZWN1bGF0ZUludGVnZXJGb3JBcml0aG1ldGljKG1fZ3Jh
cGhbbm9kZS5jaGlsZDEoKV0sIG1fZ3JhcGhbbm9kZS5jaGlsZDIoKV0pCi0gICAgICAgICAgICAg
ICAgICAgICYmIG5vZGVDYW5TcGVjdWxhdGVJbnRlZ2VyKG5vZGUuYXJpdGhOb2RlRmxhZ3MoKSkp
CisgICAgICAgICAgICAgICAgaWYgKE5vZGU6OnNob3VsZFNwZWN1bGF0ZUludGVnZXJGb3JBcml0
aG1ldGljKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgbm9kZS0+Y2hpbGQyKCkubm9kZSgpKQorICAg
ICAgICAgICAgICAgICAgICAmJiBub2RlQ2FuU3BlY3VsYXRlSW50ZWdlcihub2RlLT5hcml0aE5v
ZGVGbGFncygpKSkKICAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVByZWRpY3Rp
b24oU3BlY0ludDMyKTsKICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAg
IGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKHNwZWN1bGF0ZWREb3VibGVUeXBlRm9yUHJlZGlj
dGlvbnMobGVmdCwgcmlnaHQpKTsKQEAgLTM5OSwxNCArMzk3LDE0IEBAIHByaXZhdGU6CiAgICAg
ICAgICAgICBmbGFncyB8PSBOb2RlVXNlZEFzTnVtYmVyOwogICAgICAgICAgICAgZmxhZ3MgJj0g
fk5vZGVVc2VkQXNPdGhlcjsKIAotICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW25vZGUu
Y2hpbGQxKCldLm1lcmdlRmxhZ3MoZmxhZ3MpOwotICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dy
YXBoW25vZGUuY2hpbGQyKCldLm1lcmdlRmxhZ3MoZmxhZ3MpOworICAgICAgICAgICAgY2hhbmdl
ZCB8PSBub2RlLT5jaGlsZDEoKS0+bWVyZ2VGbGFncyhmbGFncyk7CisgICAgICAgICAgICBjaGFu
Z2VkIHw9IG5vZGUtPmNoaWxkMigpLT5tZXJnZUZsYWdzKGZsYWdzKTsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBBcml0aE11bDogewotICAgICAgICAgICAg
U3BlY3VsYXRlZFR5cGUgbGVmdCA9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ucHJlZGljdGlvbigp
OwotICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgcmlnaHQgPSBtX2dyYXBoW25vZGUuY2hpbGQy
KCldLnByZWRpY3Rpb24oKTsKKyAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIGxlZnQgPSBub2Rl
LT5jaGlsZDEoKS0+cHJlZGljdGlvbigpOworICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgcmln
aHQgPSBub2RlLT5jaGlsZDIoKS0+cHJlZGljdGlvbigpOwogICAgICAgICAgICAgCiAgICAgICAg
ICAgICBpZiAobGVmdCAmJiByaWdodCkgewogICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLm11
bFNob3VsZFNwZWN1bGF0ZUludGVnZXIobm9kZSkpCkBAIC00MjIsMjcgKzQyMCwyNyBAQCBwcml2
YXRlOgogICAgICAgICAgICAgLy8gaXRzZWxmIHVubGVzcyB3ZSBjYW4gcHJvdmUgdGhhdCB0aGVy
ZSBpcyBubyB3YXkgZm9yIHRoZSB2YWx1ZXMKICAgICAgICAgICAgIC8vIHByb2R1Y2VkIHRvIGNh
dXNlIGRvdWJsZSByb3VuZGluZy4KICAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKCFpc1dp
dGhpblBvd2VyT2ZUd28obm9kZS5jaGlsZDEoKS5pbmRleCgpLCAyMikKLSAgICAgICAgICAgICAg
ICAmJiAhaXNXaXRoaW5Qb3dlck9mVHdvKG5vZGUuY2hpbGQyKCkuaW5kZXgoKSwgMjIpKQorICAg
ICAgICAgICAgaWYgKCFpc1dpdGhpblBvd2VyT2ZUd28obm9kZS0+Y2hpbGQxKCkubm9kZSgpLCAy
MikKKyAgICAgICAgICAgICAgICAmJiAhaXNXaXRoaW5Qb3dlck9mVHdvKG5vZGUtPmNoaWxkMigp
Lm5vZGUoKSwgMjIpKQogICAgICAgICAgICAgICAgIGZsYWdzIHw9IE5vZGVVc2VkQXNOdW1iZXI7
CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbm9kZS5tZXJnZUZsYWdzKGZs
YWdzKTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbm9kZS0+bWVyZ2VGbGFncyhmbGFncyk7CiAg
ICAgICAgICAgICAKICAgICAgICAgICAgIGZsYWdzIHw9IE5vZGVVc2VkQXNOdW1iZXIgfCBOb2Rl
TmVlZHNOZWdaZXJvOwogICAgICAgICAgICAgZmxhZ3MgJj0gfk5vZGVVc2VkQXNPdGhlcjsKIAot
ICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLm1lcmdlRmxhZ3Mo
ZmxhZ3MpOwotICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQyKCldLm1l
cmdlRmxhZ3MoZmxhZ3MpOworICAgICAgICAgICAgY2hhbmdlZCB8PSBub2RlLT5jaGlsZDEoKS0+
bWVyZ2VGbGFncyhmbGFncyk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG5vZGUtPmNoaWxkMigp
LT5tZXJnZUZsYWdzKGZsYWdzKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAg
ICAgICAgICAKICAgICAgICAgY2FzZSBBcml0aERpdjogewotICAgICAgICAgICAgU3BlY3VsYXRl
ZFR5cGUgbGVmdCA9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ucHJlZGljdGlvbigpOwotICAgICAg
ICAgICAgU3BlY3VsYXRlZFR5cGUgcmlnaHQgPSBtX2dyYXBoW25vZGUuY2hpbGQyKCldLnByZWRp
Y3Rpb24oKTsKKyAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIGxlZnQgPSBub2RlLT5jaGlsZDEo
KS0+cHJlZGljdGlvbigpOworICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgcmlnaHQgPSBub2Rl
LT5jaGlsZDIoKS0+cHJlZGljdGlvbigpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAo
bGVmdCAmJiByaWdodCkgewotICAgICAgICAgICAgICAgIGlmIChOb2RlOjpzaG91bGRTcGVjdWxh
dGVJbnRlZ2VyRm9yQXJpdGhtZXRpYyhtX2dyYXBoW25vZGUuY2hpbGQxKCldLCBtX2dyYXBoW25v
ZGUuY2hpbGQyKCldKQotICAgICAgICAgICAgICAgICAgICAmJiBub2RlQ2FuU3BlY3VsYXRlSW50
ZWdlcihub2RlLmFyaXRoTm9kZUZsYWdzKCkpKQorICAgICAgICAgICAgICAgIGlmIChOb2RlOjpz
aG91bGRTcGVjdWxhdGVJbnRlZ2VyRm9yQXJpdGhtZXRpYyhub2RlLT5jaGlsZDEoKS5ub2RlKCks
IG5vZGUtPmNoaWxkMigpLm5vZGUoKSkKKyAgICAgICAgICAgICAgICAgICAgJiYgbm9kZUNhblNw
ZWN1bGF0ZUludGVnZXIobm9kZS0+YXJpdGhOb2RlRmxhZ3MoKSkpCiAgICAgICAgICAgICAgICAg
ICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKFNwZWNJbnQzMik7CiAgICAgICAgICAgICAg
ICAgZWxzZQogICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbihT
cGVjRG91YmxlKTsKQEAgLTQ1NiwxOCArNDU0LDE4IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBm
bGFncyB8PSBOb2RlVXNlZEFzTnVtYmVyIHwgTm9kZU5lZWRzTmVnWmVybzsKICAgICAgICAgICAg
IGZsYWdzICY9IH5Ob2RlVXNlZEFzT3RoZXI7CiAKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9n
cmFwaFtub2RlLmNoaWxkMSgpXS5tZXJnZUZsYWdzKGZsYWdzKTsKLSAgICAgICAgICAgIGNoYW5n
ZWQgfD0gbV9ncmFwaFtub2RlLmNoaWxkMigpXS5tZXJnZUZsYWdzKGZsYWdzKTsKKyAgICAgICAg
ICAgIGNoYW5nZWQgfD0gbm9kZS0+Y2hpbGQxKCktPm1lcmdlRmxhZ3MoZmxhZ3MpOworICAgICAg
ICAgICAgY2hhbmdlZCB8PSBub2RlLT5jaGlsZDIoKS0+bWVyZ2VGbGFncyhmbGFncyk7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgQXJp
dGhNb2Q6IHsKLSAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIGxlZnQgPSBtX2dyYXBoW25vZGUu
Y2hpbGQxKCldLnByZWRpY3Rpb24oKTsKLSAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHJpZ2h0
ID0gbV9ncmFwaFtub2RlLmNoaWxkMigpXS5wcmVkaWN0aW9uKCk7CisgICAgICAgICAgICBTcGVj
dWxhdGVkVHlwZSBsZWZ0ID0gbm9kZS0+Y2hpbGQxKCktPnByZWRpY3Rpb24oKTsKKyAgICAgICAg
ICAgIFNwZWN1bGF0ZWRUeXBlIHJpZ2h0ID0gbm9kZS0+Y2hpbGQyKCktPnByZWRpY3Rpb24oKTsK
ICAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKGxlZnQgJiYgcmlnaHQpIHsKLSAgICAgICAg
ICAgICAgICBpZiAoTm9kZTo6c2hvdWxkU3BlY3VsYXRlSW50ZWdlckZvckFyaXRobWV0aWMobV9n
cmFwaFtub2RlLmNoaWxkMSgpXSwgbV9ncmFwaFtub2RlLmNoaWxkMigpXSkKLSAgICAgICAgICAg
ICAgICAgICAgJiYgbm9kZUNhblNwZWN1bGF0ZUludGVnZXIobm9kZS5hcml0aE5vZGVGbGFncygp
KSkKKyAgICAgICAgICAgICAgICBpZiAoTm9kZTo6c2hvdWxkU3BlY3VsYXRlSW50ZWdlckZvckFy
aXRobWV0aWMobm9kZS0+Y2hpbGQxKCkubm9kZSgpLCBub2RlLT5jaGlsZDIoKS5ub2RlKCkpCisg
ICAgICAgICAgICAgICAgICAgICYmIG5vZGVDYW5TcGVjdWxhdGVJbnRlZ2VyKG5vZGUtPmFyaXRo
Tm9kZUZsYWdzKCkpKQogICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGlj
dGlvbihTcGVjSW50MzIpOwogICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAg
ICAgY2hhbmdlZCB8PSBtZXJnZVByZWRpY3Rpb24oU3BlY0RvdWJsZSk7CkBAIC00NzYsOCArNDc0
LDggQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGZsYWdzIHw9IE5vZGVVc2VkQXNOdW1iZXIgfCBO
b2RlTmVlZHNOZWdaZXJvOwogICAgICAgICAgICAgZmxhZ3MgJj0gfk5vZGVVc2VkQXNPdGhlcjsK
IAotICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLm1lcmdlRmxh
Z3MoZmxhZ3MpOwotICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQyKCld
Lm1lcmdlRmxhZ3MoZmxhZ3MpOworICAgICAgICAgICAgY2hhbmdlZCB8PSBub2RlLT5jaGlsZDEo
KS0+bWVyZ2VGbGFncyhmbGFncyk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG5vZGUtPmNoaWxk
MigpLT5tZXJnZUZsYWdzKGZsYWdzKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAg
ICAgICAgICAgICAKQEAgLTQ4NSwxOSArNDgzLDE5IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBj
aGFuZ2VkIHw9IHNldFByZWRpY3Rpb24oU3BlY0RvdWJsZSk7CiAgICAgICAgICAgICBmbGFncyB8
PSBOb2RlVXNlZEFzTnVtYmVyIHwgTm9kZU5lZWRzTmVnWmVybzsKICAgICAgICAgICAgIGZsYWdz
ICY9IH5Ob2RlVXNlZEFzT3RoZXI7Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbm9k
ZS5jaGlsZDEoKV0ubWVyZ2VGbGFncyhmbGFncyk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG5v
ZGUtPmNoaWxkMSgpLT5tZXJnZUZsYWdzKGZsYWdzKTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBBcml0aEFiczogewotICAgICAgICAg
ICAgU3BlY3VsYXRlZFR5cGUgY2hpbGQgPSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLnByZWRpY3Rp
b24oKTsKKyAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIGNoaWxkID0gbm9kZS0+Y2hpbGQxKCkt
PnByZWRpY3Rpb24oKTsKICAgICAgICAgICAgIGlmIChpc0ludDMyU3BlY3VsYXRpb25Gb3JBcml0
aG1ldGljKGNoaWxkKQotICAgICAgICAgICAgICAgICYmIG5vZGVDYW5TcGVjdWxhdGVJbnRlZ2Vy
KG5vZGUuYXJpdGhOb2RlRmxhZ3MoKSkpCisgICAgICAgICAgICAgICAgJiYgbm9kZUNhblNwZWN1
bGF0ZUludGVnZXIobm9kZS0+YXJpdGhOb2RlRmxhZ3MoKSkpCiAgICAgICAgICAgICAgICAgY2hh
bmdlZCB8PSBtZXJnZVByZWRpY3Rpb24oU3BlY0ludDMyKTsKICAgICAgICAgICAgIGVsc2UKICAg
ICAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbihzcGVjdWxhdGVkRG91Ymxl
VHlwZUZvclByZWRpY3Rpb24oY2hpbGQpKTsKIAotICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dy
YXBoW25vZGUuY2hpbGQxKCldLm1lcmdlRmxhZ3MoZmxhZ3MpOworICAgICAgICAgICAgY2hhbmdl
ZCB8PSBub2RlLT5jaGlsZDEoKS0+bWVyZ2VGbGFncyhmbGFncyk7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgfQogICAgICAgICAgICAgCkBAIC01MjcsMzEgKzUyNSwzMSBAQCBwcml2YXRl
OgogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBHZXRCeUlkOiB7Ci0gICAgICAgICAgICBjaGFu
Z2VkIHw9IG1lcmdlUHJlZGljdGlvbihub2RlLmdldEhlYXBQcmVkaWN0aW9uKCkpOworICAgICAg
ICAgICAgY2hhbmdlZCB8PSBtZXJnZVByZWRpY3Rpb24obm9kZS0+Z2V0SGVhcFByZWRpY3Rpb24o
KSk7CiAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlRGVmYXVsdEZsYWdzKG5vZGUpOwogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBjYXNlIEdl
dEJ5SWRGbHVzaDoKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKG5vZGUu
Z2V0SGVhcFByZWRpY3Rpb24oKSk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGlj
dGlvbihub2RlLT5nZXRIZWFwUHJlZGljdGlvbigpKTsKICAgICAgICAgICAgIGNoYW5nZWQgfD0g
bWVyZ2VEZWZhdWx0RmxhZ3Mobm9kZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
IAogICAgICAgICBjYXNlIEdldEJ5VmFsOiB7Ci0gICAgICAgICAgICBpZiAobV9ncmFwaFtub2Rl
LmNoaWxkMSgpXS5zaG91bGRTcGVjdWxhdGVGbG9hdDMyQXJyYXkoKQotICAgICAgICAgICAgICAg
IHx8IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0uc2hvdWxkU3BlY3VsYXRlRmxvYXQ2NEFycmF5KCkp
CisgICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZUZsb2F0MzJB
cnJheSgpCisgICAgICAgICAgICAgICAgfHwgbm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0
ZUZsb2F0NjRBcnJheSgpKQogICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0
aW9uKFNwZWNEb3VibGUpOwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGNoYW5n
ZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKG5vZGUuZ2V0SGVhcFByZWRpY3Rpb24oKSk7CisgICAgICAg
ICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVByZWRpY3Rpb24obm9kZS0+Z2V0SGVhcFByZWRpY3Rp
b24oKSk7CiAKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5t
ZXJnZUZsYWdzKE5vZGVVc2VkQXNWYWx1ZSk7Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3Jh
cGhbbm9kZS5jaGlsZDIoKV0ubWVyZ2VGbGFncyhOb2RlVXNlZEFzTnVtYmVyIHwgTm9kZVVzZWRB
c090aGVyIHwgTm9kZVVzZWRBc0ludCB8IE5vZGVVc2VkQXNJbnRMb2NhbGx5KTsKKyAgICAgICAg
ICAgIGNoYW5nZWQgfD0gbm9kZS0+Y2hpbGQxKCktPm1lcmdlRmxhZ3MoTm9kZVVzZWRBc1ZhbHVl
KTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbm9kZS0+Y2hpbGQyKCktPm1lcmdlRmxhZ3MoTm9k
ZVVzZWRBc051bWJlciB8IE5vZGVVc2VkQXNPdGhlciB8IE5vZGVVc2VkQXNJbnQgfCBOb2RlVXNl
ZEFzSW50TG9jYWxseSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAg
ICAgCiAgICAgICAgIGNhc2UgR2V0TXlBcmd1bWVudEJ5VmFsU2FmZTogewotICAgICAgICAgICAg
Y2hhbmdlZCB8PSBtZXJnZVByZWRpY3Rpb24obm9kZS5nZXRIZWFwUHJlZGljdGlvbigpKTsKLSAg
ICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5tZXJnZUZsYWdzKE5v
ZGVVc2VkQXNOdW1iZXIgfCBOb2RlVXNlZEFzT3RoZXIgfCBOb2RlVXNlZEFzSW50IHwgTm9kZVVz
ZWRBc0ludExvY2FsbHkpOworICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVByZWRpY3Rpb24o
bm9kZS0+Z2V0SGVhcFByZWRpY3Rpb24oKSk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG5vZGUt
PmNoaWxkMSgpLT5tZXJnZUZsYWdzKE5vZGVVc2VkQXNOdW1iZXIgfCBOb2RlVXNlZEFzT3RoZXIg
fCBOb2RlVXNlZEFzSW50IHwgTm9kZVVzZWRBc0ludExvY2FsbHkpOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIApAQCAtNTcxLDI1ICs1NjksMjMgQEAgcHJpdmF0
ZToKICAgICAgICAgfQogCiAgICAgICAgIGNhc2UgR2V0QnlPZmZzZXQ6IHsKLSAgICAgICAgICAg
IGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKG5vZGUuZ2V0SGVhcFByZWRpY3Rpb24oKSk7Cisg
ICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbihub2RlLT5nZXRIZWFwUHJlZGlj
dGlvbigpKTsKICAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VEZWZhdWx0RmxhZ3Mobm9kZSk7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgIGNh
c2UgQ2FsbDoKICAgICAgICAgY2FzZSBDb25zdHJ1Y3Q6IHsKLSAgICAgICAgICAgIGNoYW5nZWQg
fD0gbWVyZ2VQcmVkaWN0aW9uKG5vZGUuZ2V0SGVhcFByZWRpY3Rpb24oKSk7Ci0gICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGNoaWxkSWR4ID0gbm9kZS5maXJzdENoaWxkKCk7Ci0gICAgICAgICAg
ICAgICAgIGNoaWxkSWR4IDwgbm9kZS5maXJzdENoaWxkKCkgKyBub2RlLm51bUNoaWxkcmVuKCk7
Ci0gICAgICAgICAgICAgICAgICsrY2hpbGRJZHgpIHsKLSAgICAgICAgICAgICAgICBFZGdlIGVk
Z2UgPSBtX2dyYXBoLm1fdmFyQXJnQ2hpbGRyZW5bY2hpbGRJZHhdOwotICAgICAgICAgICAgICAg
IGNoYW5nZWQgfD0gbV9ncmFwaFtlZGdlXS5tZXJnZUZsYWdzKE5vZGVVc2VkQXNWYWx1ZSk7Ci0g
ICAgICAgICAgICB9CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbihub2Rl
LT5nZXRIZWFwUHJlZGljdGlvbigpKTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgY2hpbGRJ
ZHggPSBub2RlLT5maXJzdENoaWxkKCk7CisgICAgICAgICAgICAgICAgY2hpbGRJZHggPCBub2Rl
LT5maXJzdENoaWxkKCkgKyBub2RlLT5udW1DaGlsZHJlbigpOworICAgICAgICAgICAgICAgICsr
Y2hpbGRJZHgpCisgICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoLm1fdmFyQXJnQ2hp
bGRyZW5bY2hpbGRJZHhdLT5tZXJnZUZsYWdzKE5vZGVVc2VkQXNWYWx1ZSk7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgQ29udmVydFRo
aXM6IHsKLSAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24gPSBtX2dyYXBoW25v
ZGUuY2hpbGQxKCldLnByZWRpY3Rpb24oKTsKKyAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHBy
ZWRpY3Rpb24gPSBub2RlLT5jaGlsZDEoKS0+cHJlZGljdGlvbigpOwogICAgICAgICAgICAgaWYg
KHByZWRpY3Rpb24pIHsKICAgICAgICAgICAgICAgICBpZiAocHJlZGljdGlvbiAmIH5TcGVjT2Jq
ZWN0TWFzaykgewogICAgICAgICAgICAgICAgICAgICBwcmVkaWN0aW9uICY9IFNwZWNPYmplY3RN
YXNrOwpAQCAtNjAyLDEzICs1OTgsMTMgQEAgcHJpdmF0ZToKICAgICAgICAgfQogICAgICAgICAg
ICAgCiAgICAgICAgIGNhc2UgR2V0R2xvYmFsVmFyOiB7Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9
IG1lcmdlUHJlZGljdGlvbihub2RlLmdldEhlYXBQcmVkaWN0aW9uKCkpOworICAgICAgICAgICAg
Y2hhbmdlZCB8PSBtZXJnZVByZWRpY3Rpb24obm9kZS0+Z2V0SGVhcFByZWRpY3Rpb24oKSk7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgIGNhc2Ug
UHV0R2xvYmFsVmFyOgogICAgICAgICBjYXNlIFB1dEdsb2JhbFZhckNoZWNrOiB7Ci0gICAgICAg
ICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ubWVyZ2VGbGFncyhOb2RlVXNl
ZEFzVmFsdWUpOworICAgICAgICAgICAgY2hhbmdlZCB8PSBub2RlLT5jaGlsZDEoKS0+bWVyZ2VG
bGFncyhOb2RlVXNlZEFzVmFsdWUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAg
ICAgICAgICAgIApAQCAtNjE3LDcgKzYxMyw3IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgUmVz
b2x2ZUJhc2U6CiAgICAgICAgIGNhc2UgUmVzb2x2ZUJhc2VTdHJpY3RQdXQ6CiAgICAgICAgIGNh
c2UgUmVzb2x2ZUdsb2JhbDogewotICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlv
biA9IG5vZGUuZ2V0SGVhcFByZWRpY3Rpb24oKTsKKyAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBl
IHByZWRpY3Rpb24gPSBub2RlLT5nZXRIZWFwUHJlZGljdGlvbigpOwogICAgICAgICAgICAgY2hh
bmdlZCB8PSBtZXJnZVByZWRpY3Rpb24ocHJlZGljdGlvbik7CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgfQpAQCAtNjQzLDE4ICs2MzksMTYgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIAog
ICAgICAgICBjYXNlIE5ld0FycmF5OiB7CiAgICAgICAgICAgICBjaGFuZ2VkIHw9IHNldFByZWRp
Y3Rpb24oU3BlY0FycmF5KTsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgY2hpbGRJZHggPSBu
b2RlLmZpcnN0Q2hpbGQoKTsKLSAgICAgICAgICAgICAgICAgY2hpbGRJZHggPCBub2RlLmZpcnN0
Q2hpbGQoKSArIG5vZGUubnVtQ2hpbGRyZW4oKTsKLSAgICAgICAgICAgICAgICAgKytjaGlsZElk
eCkgewotICAgICAgICAgICAgICAgIEVkZ2UgZWRnZSA9IG1fZ3JhcGgubV92YXJBcmdDaGlsZHJl
bltjaGlsZElkeF07Ci0gICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW2VkZ2VdLm1l
cmdlRmxhZ3MoTm9kZVVzZWRBc1ZhbHVlKTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgY2hpbGRJZHggPSBub2RlLT5maXJzdENoaWxkKCk7CisgICAgICAgICAgICAg
ICAgY2hpbGRJZHggPCBub2RlLT5maXJzdENoaWxkKCkgKyBub2RlLT5udW1DaGlsZHJlbigpOwor
ICAgICAgICAgICAgICAgICsrY2hpbGRJZHgpCisgICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBt
X2dyYXBoLm1fdmFyQXJnQ2hpbGRyZW5bY2hpbGRJZHhdLT5tZXJnZUZsYWdzKE5vZGVVc2VkQXNW
YWx1ZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAg
ICAgIGNhc2UgTmV3QXJyYXlXaXRoU2l6ZTogewogICAgICAgICAgICAgY2hhbmdlZCB8PSBzZXRQ
cmVkaWN0aW9uKFNwZWNBcnJheSk7Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbm9k
ZS5jaGlsZDEoKV0ubWVyZ2VGbGFncyhOb2RlVXNlZEFzVmFsdWUgfCBOb2RlVXNlZEFzSW50IHwg
Tm9kZVVzZWRBc0ludExvY2FsbHkpOworICAgICAgICAgICAgY2hhbmdlZCB8PSBub2RlLT5jaGls
ZDEoKS0+bWVyZ2VGbGFncyhOb2RlVXNlZEFzVmFsdWUgfCBOb2RlVXNlZEFzSW50IHwgTm9kZVVz
ZWRBc0ludExvY2FsbHkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAg
ICAgIApAQCAtNjcwLDIyICs2NjQsMjIgQEAgcHJpdmF0ZToKICAgICAgICAgCiAgICAgICAgIGNh
c2UgU3RyaW5nQ2hhckF0OiB7CiAgICAgICAgICAgICBjaGFuZ2VkIHw9IHNldFByZWRpY3Rpb24o
U3BlY1N0cmluZyk7Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbm9kZS5jaGlsZDEo
KV0ubWVyZ2VGbGFncyhOb2RlVXNlZEFzVmFsdWUpOwotICAgICAgICAgICAgY2hhbmdlZCB8PSBt
X2dyYXBoW25vZGUuY2hpbGQyKCldLm1lcmdlRmxhZ3MoTm9kZVVzZWRBc051bWJlciB8IE5vZGVV
c2VkQXNPdGhlciB8IE5vZGVVc2VkQXNJbnQgfCBOb2RlVXNlZEFzSW50TG9jYWxseSk7CisgICAg
ICAgICAgICBjaGFuZ2VkIHw9IG5vZGUtPmNoaWxkMSgpLT5tZXJnZUZsYWdzKE5vZGVVc2VkQXNW
YWx1ZSk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG5vZGUtPmNoaWxkMigpLT5tZXJnZUZsYWdz
KE5vZGVVc2VkQXNOdW1iZXIgfCBOb2RlVXNlZEFzT3RoZXIgfCBOb2RlVXNlZEFzSW50IHwgTm9k
ZVVzZWRBc0ludExvY2FsbHkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAg
ICAgICAgIAogICAgICAgICBjYXNlIFN0ckNhdDogewogICAgICAgICAgICAgY2hhbmdlZCB8PSBz
ZXRQcmVkaWN0aW9uKFNwZWNTdHJpbmcpOwotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBjaGls
ZElkeCA9IG5vZGUuZmlyc3RDaGlsZCgpOwotICAgICAgICAgICAgICAgICBjaGlsZElkeCA8IG5v
ZGUuZmlyc3RDaGlsZCgpICsgbm9kZS5udW1DaGlsZHJlbigpOwotICAgICAgICAgICAgICAgICAr
K2NoaWxkSWR4KQotICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaFttX2dyYXBoLm1f
dmFyQXJnQ2hpbGRyZW5bY2hpbGRJZHhdXS5tZXJnZUZsYWdzKE5vZGVVc2VkQXNOdW1iZXIgfCBO
b2RlVXNlZEFzT3RoZXIpOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBjaGlsZElkeCA9IG5v
ZGUtPmZpcnN0Q2hpbGQoKTsKKyAgICAgICAgICAgICAgICBjaGlsZElkeCA8IG5vZGUtPmZpcnN0
Q2hpbGQoKSArIG5vZGUtPm51bUNoaWxkcmVuKCk7CisgICAgICAgICAgICAgICAgKytjaGlsZElk
eCkKKyAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGgubV92YXJBcmdDaGlsZHJlbltj
aGlsZElkeF0tPm1lcmdlRmxhZ3MoTm9kZVVzZWRBc051bWJlciB8IE5vZGVVc2VkQXNPdGhlcik7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgIGNh
c2UgVG9QcmltaXRpdmU6IHsKLSAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIGNoaWxkID0gbV9n
cmFwaFtub2RlLmNoaWxkMSgpXS5wcmVkaWN0aW9uKCk7CisgICAgICAgICAgICBTcGVjdWxhdGVk
VHlwZSBjaGlsZCA9IG5vZGUtPmNoaWxkMSgpLT5wcmVkaWN0aW9uKCk7CiAgICAgICAgICAgICBp
ZiAoY2hpbGQpIHsKICAgICAgICAgICAgICAgICBpZiAoaXNPYmplY3RTcGVjdWxhdGlvbihjaGls
ZCkpIHsKICAgICAgICAgICAgICAgICAgICAgLy8gSSdkIGxvdmUgdG8gZm9sZCB0aGlzIGNhc2Ug
aW50byB0aGUgY2FzZSBiZWxvdywgYnV0IEkgY2FuJ3QsIGJlY2F1c2UKQEAgLTcwMiw3ICs2OTYs
NyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgICAgICAg
ICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbihjaGlsZCk7CiAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ubWVyZ2VGbGFncyhmbGFn
cyk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG5vZGUtPmNoaWxkMSgpLT5tZXJnZUZsYWdzKGZs
YWdzKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKQEAgLTc0
NSw0MiArNzM5LDQ1IEBAIHByaXZhdGU6CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIGNh
c2UgUHV0QnlWYWw6Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbV9ncmFwaC52YXJB
cmdDaGlsZChub2RlLCAwKV0ubWVyZ2VGbGFncyhOb2RlVXNlZEFzVmFsdWUpOwotICAgICAgICAg
ICAgY2hhbmdlZCB8PSBtX2dyYXBoW21fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSldLm1lcmdl
RmxhZ3MoTm9kZVVzZWRBc051bWJlciB8IE5vZGVVc2VkQXNPdGhlciB8IE5vZGVVc2VkQXNJbnQg
fCBOb2RlVXNlZEFzSW50TG9jYWxseSk7Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhb
bV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAyKV0ubWVyZ2VGbGFncyhOb2RlVXNlZEFzVmFsdWUp
OworICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApLT5t
ZXJnZUZsYWdzKE5vZGVVc2VkQXNWYWx1ZSk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3Jh
cGgudmFyQXJnQ2hpbGQobm9kZSwgMSktPm1lcmdlRmxhZ3MoTm9kZVVzZWRBc051bWJlciB8IE5v
ZGVVc2VkQXNPdGhlciB8IE5vZGVVc2VkQXNJbnQgfCBOb2RlVXNlZEFzSW50TG9jYWxseSk7Cisg
ICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMiktPm1lcmdl
RmxhZ3MoTm9kZVVzZWRBc1ZhbHVlKTsKICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGNh
c2UgUHV0U2NvcGVkVmFyOgotICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW25vZGUuY2hp
bGQxKCldLm1lcmdlRmxhZ3MoTm9kZVVzZWRBc1ZhbHVlKTsKLSAgICAgICAgICAgIGNoYW5nZWQg
fD0gbV9ncmFwaFtub2RlLmNoaWxkMygpXS5tZXJnZUZsYWdzKE5vZGVVc2VkQXNWYWx1ZSk7Cisg
ICAgICAgICAgICBjaGFuZ2VkIHw9IG5vZGUtPmNoaWxkMSgpLT5tZXJnZUZsYWdzKE5vZGVVc2Vk
QXNWYWx1ZSk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG5vZGUtPmNoaWxkMygpLT5tZXJnZUZs
YWdzKE5vZGVVc2VkQXNWYWx1ZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIAog
ICAgICAgICBjYXNlIFJldHVybjoKICAgICAgICAgY2FzZSBUaHJvdzoKLSAgICAgICAgICAgIGNo
YW5nZWQgfD0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5tZXJnZUZsYWdzKE5vZGVVc2VkQXNWYWx1
ZSk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG5vZGUtPmNoaWxkMSgpLT5tZXJnZUZsYWdzKE5v
ZGVVc2VkQXNWYWx1ZSk7CiAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICBjYXNlIFB1dEJ5
SWQ6CiAgICAgICAgIGNhc2UgUHV0QnlJZERpcmVjdDoKLSAgICAgICAgICAgIGNoYW5nZWQgfD0g
bV9ncmFwaFtub2RlLmNoaWxkMSgpXS5tZXJnZUZsYWdzKE5vZGVVc2VkQXNWYWx1ZSk7Ci0gICAg
ICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbm9kZS5jaGlsZDIoKV0ubWVyZ2VGbGFncyhOb2Rl
VXNlZEFzVmFsdWUpOworICAgICAgICAgICAgY2hhbmdlZCB8PSBub2RlLT5jaGlsZDEoKS0+bWVy
Z2VGbGFncyhOb2RlVXNlZEFzVmFsdWUpOworICAgICAgICAgICAgY2hhbmdlZCB8PSBub2RlLT5j
aGlsZDIoKS0+bWVyZ2VGbGFncyhOb2RlVXNlZEFzVmFsdWUpOwogICAgICAgICAgICAgYnJlYWs7
CiAKICAgICAgICAgY2FzZSBQdXRCeU9mZnNldDoKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9n
cmFwaFtub2RlLmNoaWxkMSgpXS5tZXJnZUZsYWdzKE5vZGVVc2VkQXNWYWx1ZSk7Ci0gICAgICAg
ICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbm9kZS5jaGlsZDMoKV0ubWVyZ2VGbGFncyhOb2RlVXNl
ZEFzVmFsdWUpOworICAgICAgICAgICAgY2hhbmdlZCB8PSBub2RlLT5jaGlsZDEoKS0+bWVyZ2VG
bGFncyhOb2RlVXNlZEFzVmFsdWUpOworICAgICAgICAgICAgY2hhbmdlZCB8PSBub2RlLT5jaGls
ZDMoKS0+bWVyZ2VGbGFncyhOb2RlVXNlZEFzVmFsdWUpOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICAKICAgICAgICAgY2FzZSBQaGk6CisgICAgICAgICAgICAvLyBQaGlzIHNob3Vs
ZCBub3QgYmUgdmlzaWJsZSBoZXJlIHNpbmNlIHdlJ3JlIGl0ZXJhdGluZyB0aGUgYWxsLWJ1dC1Q
aGkncworICAgICAgICAgICAgLy8gcGFydCBvZiBiYXNpYyBibG9ja3MuCisgICAgICAgICAgICBD
UkFTSCgpOwogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSBTZXRDYWxsZWU6CiAg
ICAgICAgIGNhc2UgU2V0TXlTY29wZToKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaFtu
b2RlLmNoaWxkMSgpXS5tZXJnZUZsYWdzKE5vZGVVc2VkQXNWYWx1ZSk7CisgICAgICAgICAgICBj
aGFuZ2VkIHw9IG5vZGUtPmNoaWxkMSgpLT5tZXJnZUZsYWdzKE5vZGVVc2VkQXNWYWx1ZSk7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgICAgICBjYXNlIEdldFNjb3BlOgot
ICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLm1lcmdlRmxhZ3Mo
Tm9kZVVzZWRBc1ZhbHVlKTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbm9kZS0+Y2hpbGQxKCkt
Pm1lcmdlRmxhZ3MoTm9kZVVzZWRBc1ZhbHVlKTsKICAgICAgICAgICAgIGNoYW5nZWQgfD0gc2V0
UHJlZGljdGlvbihTcGVjQ2VsbE90aGVyKTsKICAgICAgICAgICAgIGJyZWFrOwogCkBAIC04Mjgs
MzIgKzgyNSwzMiBAQCBwcml2YXRlOgogICAgICAgICB9CiAKICNpZiBERkdfRU5BQkxFKERFQlVH
X1BST1BBR0FUSU9OX1ZFUkJPU0UpCi0gICAgICAgIGRhdGFMb2coU3BlY3VsYXRpb25EdW1wKG1f
Z3JhcGhbbV9jb21waWxlSW5kZXhdLnByZWRpY3Rpb24oKSksICJcbiIpOworICAgICAgICBkYXRh
TG9nKFNwZWN1bGF0aW9uRHVtcChub2RlLT5wcmVkaWN0aW9uKCkpLCAiXG4iKTsKICNlbmRpZgog
ICAgICAgICAKICAgICAgICAgbV9jaGFuZ2VkIHw9IGNoYW5nZWQ7CiAgICAgfQogICAgICAgICAK
LSAgICBib29sIG1lcmdlRGVmYXVsdEZsYWdzKE5vZGUmIG5vZGUpCisgICAgYm9vbCBtZXJnZURl
ZmF1bHRGbGFncyhOb2RlKiBub2RlKQogICAgIHsKICAgICAgICAgYm9vbCBjaGFuZ2VkID0gZmFs
c2U7Ci0gICAgICAgIGlmIChub2RlLmZsYWdzKCkgJiBOb2RlSGFzVmFyQXJncykgewotICAgICAg
ICAgICAgZm9yICh1bnNpZ25lZCBjaGlsZElkeCA9IG5vZGUuZmlyc3RDaGlsZCgpOwotICAgICAg
ICAgICAgICAgICBjaGlsZElkeCA8IG5vZGUuZmlyc3RDaGlsZCgpICsgbm9kZS5udW1DaGlsZHJl
bigpOwotICAgICAgICAgICAgICAgICBjaGlsZElkeCsrKSB7CisgICAgICAgIGlmIChub2RlLT5m
bGFncygpICYgTm9kZUhhc1ZhckFyZ3MpIHsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgY2hp
bGRJZHggPSBub2RlLT5maXJzdENoaWxkKCk7CisgICAgICAgICAgICAgICAgY2hpbGRJZHggPCBu
b2RlLT5maXJzdENoaWxkKCkgKyBub2RlLT5udW1DaGlsZHJlbigpOworICAgICAgICAgICAgICAg
IGNoaWxkSWR4KyspIHsKICAgICAgICAgICAgICAgICBpZiAoISFtX2dyYXBoLm1fdmFyQXJnQ2hp
bGRyZW5bY2hpbGRJZHhdKQotICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhb
bV9ncmFwaC5tX3ZhckFyZ0NoaWxkcmVuW2NoaWxkSWR4XV0ubWVyZ2VGbGFncyhOb2RlVXNlZEFz
VmFsdWUpOworICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGgubV92YXJBcmdD
aGlsZHJlbltjaGlsZElkeF0tPm1lcmdlRmxhZ3MoTm9kZVVzZWRBc1ZhbHVlKTsKICAgICAgICAg
ICAgIH0KICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlmICghbm9kZS5jaGlsZDEoKSkK
KyAgICAgICAgICAgIGlmICghbm9kZS0+Y2hpbGQxKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJu
IGNoYW5nZWQ7Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0u
bWVyZ2VGbGFncyhOb2RlVXNlZEFzVmFsdWUpOwotICAgICAgICAgICAgaWYgKCFub2RlLmNoaWxk
MigpKQorICAgICAgICAgICAgY2hhbmdlZCB8PSBub2RlLT5jaGlsZDEoKS0+bWVyZ2VGbGFncyhO
b2RlVXNlZEFzVmFsdWUpOworICAgICAgICAgICAgaWYgKCFub2RlLT5jaGlsZDIoKSkKICAgICAg
ICAgICAgICAgICByZXR1cm4gY2hhbmdlZDsKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFw
aFtub2RlLmNoaWxkMigpXS5tZXJnZUZsYWdzKE5vZGVVc2VkQXNWYWx1ZSk7Ci0gICAgICAgICAg
ICBpZiAoIW5vZGUuY2hpbGQzKCkpCisgICAgICAgICAgICBjaGFuZ2VkIHw9IG5vZGUtPmNoaWxk
MigpLT5tZXJnZUZsYWdzKE5vZGVVc2VkQXNWYWx1ZSk7CisgICAgICAgICAgICBpZiAoIW5vZGUt
PmNoaWxkMygpKQogICAgICAgICAgICAgICAgIHJldHVybiBjaGFuZ2VkOwotICAgICAgICAgICAg
Y2hhbmdlZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQzKCldLm1lcmdlRmxhZ3MoTm9kZVVzZWRBc1Zh
bHVlKTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbm9kZS0+Y2hpbGQzKCktPm1lcmdlRmxhZ3Mo
Tm9kZVVzZWRBc1ZhbHVlKTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gY2hhbmdlZDsKICAg
ICB9CkBAIC04NjMsOCArODYwLDE2IEBAIHByaXZhdGU6CiAjaWYgREZHX0VOQUJMRShERUJVR19Q
Uk9QQUdBVElPTl9WRVJCT1NFKQogICAgICAgICBkYXRhTG9nRigiUHJvcGFnYXRpbmcgcHJlZGlj
dGlvbnMgZm9yd2FyZCBbJXVdXG4iLCArK21fY291bnQpOwogI2VuZGlmCi0gICAgICAgIGZvciAo
bV9jb21waWxlSW5kZXggPSAwOyBtX2NvbXBpbGVJbmRleCA8IG1fZ3JhcGguc2l6ZSgpOyArK21f
Y29tcGlsZUluZGV4KQotICAgICAgICAgICAgcHJvcGFnYXRlKG1fZ3JhcGhbbV9jb21waWxlSW5k
ZXhdKTsKKyAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4
IDwgbV9ncmFwaC5tX2Jsb2Nrcy5zaXplKCk7ICsrYmxvY2tJbmRleCkgeworICAgICAgICAgICAg
QmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLm1fYmxvY2tzW2Jsb2NrSW5kZXhdLmdldCgpOwor
ICAgICAgICAgICAgaWYgKCFibG9jaykKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgICAgIEFTU0VSVChibG9jay0+aXNSZWFjaGFibGUpOworICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IGJsb2NrLT5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgICAgIG1f
Y3VycmVudE5vZGUgPSBibG9jay0+YXQoaSk7CisgICAgICAgICAgICAgICAgcHJvcGFnYXRlKG1f
Y3VycmVudE5vZGUpOworICAgICAgICAgICAgfQorICAgICAgICB9CiAgICAgfQogICAgIAogICAg
IHZvaWQgcHJvcGFnYXRlQmFja3dhcmQoKQpAQCAtODcyLDEyMyArODc3LDE0MCBAQCBwcml2YXRl
OgogI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKICAgICAgICAgZGF0
YUxvZ0YoIlByb3BhZ2F0aW5nIHByZWRpY3Rpb25zIGJhY2t3YXJkIFsldV1cbiIsICsrbV9jb3Vu
dCk7CiAjZW5kaWYKLSAgICAgICAgZm9yIChtX2NvbXBpbGVJbmRleCA9IG1fZ3JhcGguc2l6ZSgp
OyBtX2NvbXBpbGVJbmRleC0tID4gMDspCi0gICAgICAgICAgICBwcm9wYWdhdGUobV9ncmFwaFtt
X2NvbXBpbGVJbmRleF0pOworICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IG1f
Z3JhcGgubV9ibG9ja3Muc2l6ZSgpOyBibG9ja0luZGV4LS07KSB7CisgICAgICAgICAgICBCYXNp
Y0Jsb2NrKiBibG9jayA9IG1fZ3JhcGgubV9ibG9ja3NbYmxvY2tJbmRleF0uZ2V0KCk7CisgICAg
ICAgICAgICBpZiAoIWJsb2NrKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAg
ICAgQVNTRVJUKGJsb2NrLT5pc1JlYWNoYWJsZSk7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSBibG9jay0+c2l6ZSgpOyBpLS07KSB7CisgICAgICAgICAgICAgICAgbV9jdXJyZW50Tm9k
ZSA9IGJsb2NrLT5hdChpKTsKKyAgICAgICAgICAgICAgICBwcm9wYWdhdGUobV9jdXJyZW50Tm9k
ZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KICAgICB9CiAgICAgCi0gICAgdm9pZCBkb1Jv
dW5kT2ZEb3VibGVWb3RpbmcoKQorICAgIHZvaWQgZG9Eb3VibGVWb3RpbmcoTm9kZSogbm9kZSkK
ICAgICB7Ci0jaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQotICAgICAg
ICBkYXRhTG9nRigiVm90aW5nIG9uIGRvdWJsZSB1c2VzIG9mIGxvY2FscyBbJXVdXG4iLCBtX2Nv
dW50KTsKLSNlbmRpZgotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9ncmFwaC5t
X3ZhcmlhYmxlQWNjZXNzRGF0YS5zaXplKCk7ICsraSkKLSAgICAgICAgICAgIG1fZ3JhcGgubV92
YXJpYWJsZUFjY2Vzc0RhdGFbaV0uZmluZCgpLT5jbGVhclZvdGVzKCk7Ci0gICAgICAgIGZvciAo
bV9jb21waWxlSW5kZXggPSAwOyBtX2NvbXBpbGVJbmRleCA8IG1fZ3JhcGguc2l6ZSgpOyArK21f
Y29tcGlsZUluZGV4KSB7Ci0gICAgICAgICAgICBOb2RlJiBub2RlID0gbV9ncmFwaFttX2NvbXBp
bGVJbmRleF07Ci0gICAgICAgICAgICBzd2l0Y2ggKG5vZGUub3AoKSkgewotICAgICAgICAgICAg
Y2FzZSBWYWx1ZUFkZDoKLSAgICAgICAgICAgIGNhc2UgQXJpdGhBZGQ6Ci0gICAgICAgICAgICBj
YXNlIEFyaXRoU3ViOiB7Ci0gICAgICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgbGVmdCA9IG1f
Z3JhcGhbbm9kZS5jaGlsZDEoKV0ucHJlZGljdGlvbigpOwotICAgICAgICAgICAgICAgIFNwZWN1
bGF0ZWRUeXBlIHJpZ2h0ID0gbV9ncmFwaFtub2RlLmNoaWxkMigpXS5wcmVkaWN0aW9uKCk7Cisg
ICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgeworICAgICAgICBjYXNlIFZhbHVlQWRkOgorICAg
ICAgICBjYXNlIEFyaXRoQWRkOgorICAgICAgICBjYXNlIEFyaXRoU3ViOiB7CisgICAgICAgICAg
ICBTcGVjdWxhdGVkVHlwZSBsZWZ0ID0gbm9kZS0+Y2hpbGQxKCktPnByZWRpY3Rpb24oKTsKKyAg
ICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHJpZ2h0ID0gbm9kZS0+Y2hpbGQyKCktPnByZWRpY3Rp
b24oKTsKICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBEb3VibGVCYWxsb3QgYmFs
bG90OworICAgICAgICAgICAgRG91YmxlQmFsbG90IGJhbGxvdDsKICAgICAgICAgICAgICAgICAK
LSAgICAgICAgICAgICAgICBpZiAoaXNOdW1iZXJTcGVjdWxhdGlvbkV4cGVjdGluZ0RlZmluZWQo
bGVmdCkgJiYgaXNOdW1iZXJTcGVjdWxhdGlvbkV4cGVjdGluZ0RlZmluZWQocmlnaHQpCi0gICAg
ICAgICAgICAgICAgICAgICYmICFtX2dyYXBoLmFkZFNob3VsZFNwZWN1bGF0ZUludGVnZXIobm9k
ZSkpCi0gICAgICAgICAgICAgICAgICAgIGJhbGxvdCA9IFZvdGVEb3VibGU7Ci0gICAgICAgICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBiYWxsb3QgPSBWb3RlVmFsdWU7CisgICAg
ICAgICAgICBpZiAoaXNOdW1iZXJTcGVjdWxhdGlvbkV4cGVjdGluZ0RlZmluZWQobGVmdCkgJiYg
aXNOdW1iZXJTcGVjdWxhdGlvbkV4cGVjdGluZ0RlZmluZWQocmlnaHQpCisgICAgICAgICAgICAg
ICAgJiYgIW1fZ3JhcGguYWRkU2hvdWxkU3BlY3VsYXRlSW50ZWdlcihub2RlKSkKKyAgICAgICAg
ICAgICAgICBiYWxsb3QgPSBWb3RlRG91YmxlOworICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgICAgIGJhbGxvdCA9IFZvdGVWYWx1ZTsKICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAg
ICAgICBtX2dyYXBoLnZvdGUobm9kZS5jaGlsZDEoKSwgYmFsbG90KTsKLSAgICAgICAgICAgICAg
ICBtX2dyYXBoLnZvdGUobm9kZS5jaGlsZDIoKSwgYmFsbG90KTsKLSAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1fZ3JhcGgudm90ZU5vZGUobm9kZS0+
Y2hpbGQxKCksIGJhbGxvdCk7CisgICAgICAgICAgICBtX2dyYXBoLnZvdGVOb2RlKG5vZGUtPmNo
aWxkMigpLCBiYWxsb3QpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KICAgICAgICAg
ICAgICAgICAKLSAgICAgICAgICAgIGNhc2UgQXJpdGhNdWw6IHsKLSAgICAgICAgICAgICAgICBT
cGVjdWxhdGVkVHlwZSBsZWZ0ID0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5wcmVkaWN0aW9uKCk7
Ci0gICAgICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgcmlnaHQgPSBtX2dyYXBoW25vZGUuY2hp
bGQyKCldLnByZWRpY3Rpb24oKTsKKyAgICAgICAgY2FzZSBBcml0aE11bDogeworICAgICAgICAg
ICAgU3BlY3VsYXRlZFR5cGUgbGVmdCA9IG5vZGUtPmNoaWxkMSgpLT5wcmVkaWN0aW9uKCk7Cisg
ICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSByaWdodCA9IG5vZGUtPmNoaWxkMigpLT5wcmVkaWN0
aW9uKCk7CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgRG91YmxlQmFsbG90IGJh
bGxvdDsKKyAgICAgICAgICAgIERvdWJsZUJhbGxvdCBiYWxsb3Q7CiAgICAgICAgICAgICAgICAg
Ci0gICAgICAgICAgICAgICAgaWYgKGlzTnVtYmVyU3BlY3VsYXRpb24obGVmdCkgJiYgaXNOdW1i
ZXJTcGVjdWxhdGlvbihyaWdodCkKLSAgICAgICAgICAgICAgICAgICAgJiYgIW1fZ3JhcGgubXVs
U2hvdWxkU3BlY3VsYXRlSW50ZWdlcihub2RlKSkKLSAgICAgICAgICAgICAgICAgICAgYmFsbG90
ID0gVm90ZURvdWJsZTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAg
IGJhbGxvdCA9IFZvdGVWYWx1ZTsKKyAgICAgICAgICAgIGlmIChpc051bWJlclNwZWN1bGF0aW9u
KGxlZnQpICYmIGlzTnVtYmVyU3BlY3VsYXRpb24ocmlnaHQpCisgICAgICAgICAgICAgICAgJiYg
IW1fZ3JhcGgubXVsU2hvdWxkU3BlY3VsYXRlSW50ZWdlcihub2RlKSkKKyAgICAgICAgICAgICAg
ICBiYWxsb3QgPSBWb3RlRG91YmxlOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAg
IGJhbGxvdCA9IFZvdGVWYWx1ZTsKICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBt
X2dyYXBoLnZvdGUobm9kZS5jaGlsZDEoKSwgYmFsbG90KTsKLSAgICAgICAgICAgICAgICBtX2dy
YXBoLnZvdGUobm9kZS5jaGlsZDIoKSwgYmFsbG90KTsKLSAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1fZ3JhcGgudm90ZU5vZGUobm9kZS0+Y2hpbGQx
KCksIGJhbGxvdCk7CisgICAgICAgICAgICBtX2dyYXBoLnZvdGVOb2RlKG5vZGUtPmNoaWxkMigp
LCBiYWxsb3QpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KIAotICAgICAgICAgICAg
Y2FzZSBBcml0aE1pbjoKLSAgICAgICAgICAgIGNhc2UgQXJpdGhNYXg6Ci0gICAgICAgICAgICBj
YXNlIEFyaXRoTW9kOgotICAgICAgICAgICAgY2FzZSBBcml0aERpdjogewotICAgICAgICAgICAg
ICAgIFNwZWN1bGF0ZWRUeXBlIGxlZnQgPSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLnByZWRpY3Rp
b24oKTsKLSAgICAgICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSByaWdodCA9IG1fZ3JhcGhbbm9k
ZS5jaGlsZDIoKV0ucHJlZGljdGlvbigpOworICAgICAgICBjYXNlIEFyaXRoTWluOgorICAgICAg
ICBjYXNlIEFyaXRoTWF4OgorICAgICAgICBjYXNlIEFyaXRoTW9kOgorICAgICAgICBjYXNlIEFy
aXRoRGl2OiB7CisgICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSBsZWZ0ID0gbm9kZS0+Y2hpbGQx
KCktPnByZWRpY3Rpb24oKTsKKyAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHJpZ2h0ID0gbm9k
ZS0+Y2hpbGQyKCktPnByZWRpY3Rpb24oKTsKICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAg
ICAgICBEb3VibGVCYWxsb3QgYmFsbG90OworICAgICAgICAgICAgRG91YmxlQmFsbG90IGJhbGxv
dDsKICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBpZiAoaXNOdW1iZXJTcGVjdWxh
dGlvbihsZWZ0KSAmJiBpc051bWJlclNwZWN1bGF0aW9uKHJpZ2h0KQotICAgICAgICAgICAgICAg
ICAgICAmJiAhKE5vZGU6OnNob3VsZFNwZWN1bGF0ZUludGVnZXJGb3JBcml0aG1ldGljKG1fZ3Jh
cGhbbm9kZS5jaGlsZDEoKV0sIG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0pCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgJiYgbm9kZS5jYW5TcGVjdWxhdGVJbnRlZ2VyKCkpKQotICAgICAgICAgICAg
ICAgICAgICBiYWxsb3QgPSBWb3RlRG91YmxlOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgICAgICAgICAgYmFsbG90ID0gVm90ZVZhbHVlOworICAgICAgICAgICAgaWYgKGlzTnVt
YmVyU3BlY3VsYXRpb24obGVmdCkgJiYgaXNOdW1iZXJTcGVjdWxhdGlvbihyaWdodCkKKyAgICAg
ICAgICAgICAgICAmJiAhKE5vZGU6OnNob3VsZFNwZWN1bGF0ZUludGVnZXJGb3JBcml0aG1ldGlj
KG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgbm9kZS0+Y2hpbGQyKCkubm9kZSgpKSAmJiBub2RlLT5j
YW5TcGVjdWxhdGVJbnRlZ2VyKCkpKQorICAgICAgICAgICAgICAgIGJhbGxvdCA9IFZvdGVEb3Vi
bGU7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgYmFsbG90ID0gVm90ZVZhbHVl
OwogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIG1fZ3JhcGgudm90ZShub2RlLmNo
aWxkMSgpLCBiYWxsb3QpOwotICAgICAgICAgICAgICAgIG1fZ3JhcGgudm90ZShub2RlLmNoaWxk
MigpLCBiYWxsb3QpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQorICAg
ICAgICAgICAgbV9ncmFwaC52b3RlTm9kZShub2RlLT5jaGlsZDEoKSwgYmFsbG90KTsKKyAgICAg
ICAgICAgIG1fZ3JhcGgudm90ZU5vZGUobm9kZS0+Y2hpbGQyKCksIGJhbGxvdCk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgY2Fz
ZSBBcml0aEFiczoKLSAgICAgICAgICAgICAgICBEb3VibGVCYWxsb3QgYmFsbG90OwotICAgICAg
ICAgICAgICAgIGlmICghKG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0uc2hvdWxkU3BlY3VsYXRlSW50
ZWdlckZvckFyaXRobWV0aWMoKQotICAgICAgICAgICAgICAgICAgICAgICYmIG5vZGUuY2FuU3Bl
Y3VsYXRlSW50ZWdlcigpKSkKLSAgICAgICAgICAgICAgICAgICAgYmFsbG90ID0gVm90ZURvdWJs
ZTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIGJhbGxvdCA9IFZv
dGVWYWx1ZTsKKyAgICAgICAgY2FzZSBBcml0aEFiczoKKyAgICAgICAgICAgIERvdWJsZUJhbGxv
dCBiYWxsb3Q7CisgICAgICAgICAgICBpZiAoIShub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3Vs
YXRlSW50ZWdlckZvckFyaXRobWV0aWMoKSAmJiBub2RlLT5jYW5TcGVjdWxhdGVJbnRlZ2VyKCkp
KQorICAgICAgICAgICAgICAgIGJhbGxvdCA9IFZvdGVEb3VibGU7CisgICAgICAgICAgICBlbHNl
CisgICAgICAgICAgICAgICAgYmFsbG90ID0gVm90ZVZhbHVlOwogICAgICAgICAgICAgICAgIAot
ICAgICAgICAgICAgICAgIG1fZ3JhcGgudm90ZShub2RlLmNoaWxkMSgpLCBiYWxsb3QpOwotICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgbV9ncmFwaC52b3RlTm9kZShub2RlLT5j
aGlsZDEoKSwgYmFsbG90KTsKKyAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIAot
ICAgICAgICAgICAgY2FzZSBBcml0aFNxcnQ6Ci0gICAgICAgICAgICAgICAgbV9ncmFwaC52b3Rl
KG5vZGUuY2hpbGQxKCksIFZvdGVEb3VibGUpOwotICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIEFyaXRoU3FydDoKKyAgICAgICAgICAgIG1fZ3JhcGgudm90ZU5vZGUobm9kZS0+
Y2hpbGQxKCksIFZvdGVEb3VibGUpOworICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAg
ICAgCi0gICAgICAgICAgICBjYXNlIFNldExvY2FsOiB7Ci0gICAgICAgICAgICAgICAgU3BlY3Vs
YXRlZFR5cGUgcHJlZGljdGlvbiA9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ucHJlZGljdGlvbigp
OwotICAgICAgICAgICAgICAgIGlmIChpc0RvdWJsZVNwZWN1bGF0aW9uKHByZWRpY3Rpb24pKQot
ICAgICAgICAgICAgICAgICAgICBub2RlLnZhcmlhYmxlQWNjZXNzRGF0YSgpLT52b3RlKFZvdGVE
b3VibGUpOwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKCFpc051bWJlclNwZWN1bGF0aW9uKHBy
ZWRpY3Rpb24pIHx8IGlzSW50MzJTcGVjdWxhdGlvbihwcmVkaWN0aW9uKSkKLSAgICAgICAgICAg
ICAgICAgICAgbm9kZS52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+dm90ZShWb3RlVmFsdWUpOwotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQorICAgICAgICBjYXNlIFNldExvY2Fs
OiB7CisgICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uID0gbm9kZS0+Y2hpbGQx
KCktPnByZWRpY3Rpb24oKTsKKyAgICAgICAgICAgIGlmIChpc0RvdWJsZVNwZWN1bGF0aW9uKHBy
ZWRpY3Rpb24pKQorICAgICAgICAgICAgICAgIG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT52
b3RlKFZvdGVEb3VibGUpOworICAgICAgICAgICAgZWxzZSBpZiAoIWlzTnVtYmVyU3BlY3VsYXRp
b24ocHJlZGljdGlvbikgfHwgaXNJbnQzMlNwZWN1bGF0aW9uKHByZWRpY3Rpb24pKQorICAgICAg
ICAgICAgICAgIG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT52b3RlKFZvdGVWYWx1ZSk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQogICAgICAgICAgICAgICAgIAotICAgICAgICAg
ICAgY2FzZSBQdXRCeVZhbDoKLSAgICAgICAgICAgIGNhc2UgUHV0QnlWYWxBbGlhczogewotICAg
ICAgICAgICAgICAgIEVkZ2UgY2hpbGQxID0gbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKTsK
LSAgICAgICAgICAgICAgICBFZGdlIGNoaWxkMiA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwg
MSk7Ci0gICAgICAgICAgICAgICAgRWRnZSBjaGlsZDMgPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG5v
ZGUsIDIpOwotICAgICAgICAgICAgICAgIG1fZ3JhcGgudm90ZShjaGlsZDEsIFZvdGVWYWx1ZSk7
Ci0gICAgICAgICAgICAgICAgbV9ncmFwaC52b3RlKGNoaWxkMiwgVm90ZVZhbHVlKTsKLSAgICAg
ICAgICAgICAgICBzd2l0Y2ggKG5vZGUuYXJyYXlNb2RlKCkudHlwZSgpKSB7Ci0gICAgICAgICAg
ICAgICAgY2FzZSBBcnJheTo6RG91YmxlOgotICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLnZv
dGUoY2hpbGQzLCBWb3RlRG91YmxlKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC52b3RlKGNo
aWxkMywgVm90ZVZhbHVlKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAgICAgfQorICAgICAgICBjYXNlIFB1dEJ5VmFsOgorICAgICAgICBjYXNlIFB1dEJ5VmFsQWxp
YXM6IHsKKyAgICAgICAgICAgIEVkZ2UgY2hpbGQxID0gbV9ncmFwaC52YXJBcmdDaGlsZChub2Rl
LCAwKTsKKyAgICAgICAgICAgIEVkZ2UgY2hpbGQyID0gbV9ncmFwaC52YXJBcmdDaGlsZChub2Rl
LCAxKTsKKyAgICAgICAgICAgIEVkZ2UgY2hpbGQzID0gbV9ncmFwaC52YXJBcmdDaGlsZChub2Rl
LCAyKTsKKyAgICAgICAgICAgIG1fZ3JhcGgudm90ZU5vZGUoY2hpbGQxLCBWb3RlVmFsdWUpOwor
ICAgICAgICAgICAgbV9ncmFwaC52b3RlTm9kZShjaGlsZDIsIFZvdGVWYWx1ZSk7CisgICAgICAg
ICAgICBzd2l0Y2ggKG5vZGUtPmFycmF5TW9kZSgpLnR5cGUoKSkgeworICAgICAgICAgICAgY2Fz
ZSBBcnJheTo6RG91YmxlOgorICAgICAgICAgICAgICAgIG1fZ3JhcGgudm90ZU5vZGUoY2hpbGQz
LCBWb3RlRG91YmxlKTsKICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICAKICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgbV9n
cmFwaC52b3RlKG5vZGUsIFZvdGVWYWx1ZSk7CisgICAgICAgICAgICAgICAgbV9ncmFwaC52b3Rl
Tm9kZShjaGlsZDMsIFZvdGVWYWx1ZSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAg
ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBtX2dyYXBoLnZvdGVDaGlsZHJlbihub2RlLCBWb3Rl
VmFsdWUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAg
dm9pZCBkb1JvdW5kT2ZEb3VibGVWb3RpbmcoKQorICAgIHsKKyNpZiBERkdfRU5BQkxFKERFQlVH
X1BST1BBR0FUSU9OX1ZFUkJPU0UpCisgICAgICAgIGRhdGFMb2dGKCJWb3Rpbmcgb24gZG91Ymxl
IHVzZXMgb2YgbG9jYWxzIFsldV1cbiIsIG1fY291bnQpOworI2VuZGlmCisgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBtX2dyYXBoLm1fdmFyaWFibGVBY2Nlc3NEYXRhLnNpemUoKTsg
KytpKQorICAgICAgICAgICAgbV9ncmFwaC5tX3ZhcmlhYmxlQWNjZXNzRGF0YVtpXS5maW5kKCkt
PmNsZWFyVm90ZXMoKTsKKyAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSAwOyBi
bG9ja0luZGV4IDwgbV9ncmFwaC5tX2Jsb2Nrcy5zaXplKCk7ICsrYmxvY2tJbmRleCkgeworICAg
ICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLm1fYmxvY2tzW2Jsb2NrSW5kZXhd
LmdldCgpOworICAgICAgICAgICAgaWYgKCFibG9jaykKKyAgICAgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgICAgIEFTU0VSVChibG9jay0+aXNSZWFjaGFibGUpOworICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGJsb2NrLT5zaXplKCk7ICsraSkgeworICAgICAgICAg
ICAgICAgIG1fY3VycmVudE5vZGUgPSBibG9jay0+YXQoaSk7CisgICAgICAgICAgICAgICAgZG9E
b3VibGVWb3RpbmcobV9jdXJyZW50Tm9kZSk7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fZ3JhcGgubV92YXJpYWJsZUFjY2Vzc0Rh
dGEuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFi
bGVBY2Nlc3NEYXRhID0gJm1fZ3JhcGgubV92YXJpYWJsZUFjY2Vzc0RhdGFbaV07CkBAIC0xMDEy
LDcgKzEwMzQsNyBAQCBwcml2YXRlOgogICAgICAgICB9CiAgICAgfQogICAgIAotICAgIE5vZGVJ
bmRleCBtX2NvbXBpbGVJbmRleDsKKyAgICBOb2RlKiBtX2N1cnJlbnROb2RlOwogICAgIGJvb2wg
bV9jaGFuZ2VkOwogCiAjaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTY29yZUJvYXJkLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTY29yZUJvYXJkLmgJKHJldmlzaW9u
IDE0MTA1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2NvcmVCb2FyZC5oCSh3
b3JraW5nIGNvcHkpCkBAIC00Myw5ICs0Myw4IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
REZHIHsKIC8vIGFub3RoZXIgbm9kZS4KIGNsYXNzIFNjb3JlQm9hcmQgewogcHVibGljOgotICAg
IFNjb3JlQm9hcmQoR3JhcGgmIGdyYXBoLCBjb25zdCBCaXRWZWN0b3ImIHVzZWRWYXJzKQotICAg
ICAgICA6IG1fZ3JhcGgoZ3JhcGgpCi0gICAgICAgICwgbV9oaWdoV2F0ZXJtYXJrKDApCisgICAg
U2NvcmVCb2FyZChjb25zdCBCaXRWZWN0b3ImIHVzZWRWYXJzKQorICAgICAgICA6IG1faGlnaFdh
dGVybWFyaygwKQogICAgIHsKICAgICAgICAgbV91c2VkLmZpbGwoMCwgdXNlZFZhcnMuc2l6ZSgp
KTsKICAgICAgICAgbV9mcmVlLnJlc2VydmVDYXBhY2l0eSh1c2VkVmFycy5zaXplKCkpOwpAQCAt
MTAyLDE2ICsxMDEsMTUgQEAgcHVibGljOgogCiAgICAgLy8gSW5jcmVtZW50IHRoZSB1c2Vjb3Vu
dCBmb3IgdGhlIFZpcnR1YWxSZWdzaXRlciBhc3NvY2lhdGVkIHdpdGggJ2NoaWxkJywKICAgICAv
LyBpZiBpdCByZWFjaGVzIHRoZSBub2RlJ3MgcmVmY291bnQsIGZyZWUgdGhlIFZpcnR1YWxSZWdz
aXRlci4KLSAgICB2b2lkIHVzZShOb2RlSW5kZXggY2hpbGQpCisgICAgdm9pZCB1c2UoTm9kZSog
Y2hpbGQpCiAgICAgewotICAgICAgICBpZiAoY2hpbGQgPT0gTm9Ob2RlKQorICAgICAgICBpZiAo
IWNoaWxkKQogICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIC8vIEZpbmQgdGhlIHZpcnR1
YWwgcmVnaXN0ZXIgbnVtYmVyIGZvciB0aGlzIGNoaWxkLCBpbmNyZW1lbnQgaXRzIHVzZSBjb3Vu
dC4KLSAgICAgICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhbY2hpbGRdOwotICAgICAgICB1aW50MzJf
dCBpbmRleCA9IG5vZGUudmlydHVhbFJlZ2lzdGVyKCk7CisgICAgICAgIHVpbnQzMl90IGluZGV4
ID0gY2hpbGQtPnZpcnR1YWxSZWdpc3RlcigpOwogICAgICAgICBBU1NFUlQobV91c2VkW2luZGV4
XSAhPSBtYXgoKSk7Ci0gICAgICAgIGlmIChub2RlLnJlZkNvdW50KCkgPT0gKyttX3VzZWRbaW5k
ZXhdKSB7CisgICAgICAgIGlmIChjaGlsZC0+cmVmQ291bnQoKSA9PSArK21fdXNlZFtpbmRleF0p
IHsKICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCiAgICAgICAgICAg
ICBkYXRhTG9nRigiIEZyZWVpbmcgdmlydHVhbCByZWdpc3RlciAldS4iLCBpbmRleCk7CiAjZW5k
aWYKQEAgLTEyMiwyMCArMTIwLDIwIEBAIHB1YmxpYzoKICAgICAgICAgICAgIG1fZnJlZS5hcHBl
bmQoaW5kZXgpOwogICAgICAgICB9IGVsc2UgewogI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFH
QVRJT05fVkVSQk9TRSkKLSAgICAgICAgICAgIGRhdGFMb2dGKCIgVmlydHVhbCByZWdpc3RlciAl
dSBpcyBhdCAldS8ldSB1c2VzLiIsIGluZGV4LCBtX3VzZWRbaW5kZXhdLCBub2RlLnJlZkNvdW50
KCkpOworICAgICAgICAgICAgZGF0YUxvZ0YoIiBWaXJ0dWFsIHJlZ2lzdGVyICV1IGlzIGF0ICV1
LyV1IHVzZXMuIiwgaW5kZXgsIG1fdXNlZFtpbmRleF0sIGNoaWxkLT5yZWZDb3VudCgpKTsKICNl
bmRpZgogICAgICAgICB9CiAgICAgfQogICAgIHZvaWQgdXNlKEVkZ2UgY2hpbGQpCiAgICAgewot
ICAgICAgICB1c2UoY2hpbGQuaW5kZXhVbmNoZWNrZWQoKSk7CisgICAgICAgIHVzZShjaGlsZC5u
b2RlKCkpOwogICAgIH0KICAgICAKICAgICB2b2lkIHVzZUlmSGFzUmVzdWx0KEVkZ2UgY2hpbGQp
CiAgICAgewogICAgICAgICBpZiAoIWNoaWxkKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICBpZiAoIW1fZ3JhcGhbY2hpbGRdLmhhc1Jlc3VsdCgpKQorICAgICAgICBpZiAoIWNoaWxkLT5o
YXNSZXN1bHQoKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgdXNlKGNoaWxkKTsKICAg
ICB9CkBAIC0xNzUsOSArMTczLDYgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBzdGF0aWMgdWlu
dDMyX3QgbWF4KCkgeyByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCgp
OyB9CiAgICAgCi0gICAgLy8gVGhlIGdyYXBoLCBzbyB3ZSBjYW4gZ2V0IHJlZkNvdW50cyBmb3Ig
bm9kZXMsIHRvIGRldGVybWluZSB3aGVuIHZhbHVlcyBhcmUgZGVhZC4KLSAgICBHcmFwaCYgbV9n
cmFwaDsKLSAgICAKICAgICAvLyBUaGUgc2l6ZSBvZiB0aGUgc3BhbiBvZiB2aXJ0dWFsIHJlZ2lz
dGVycyB0aGF0IHRoaXMgY29kZSBibG9jayB3aWxsIHVzZS4KICAgICB1bnNpZ25lZCBtX2hpZ2hX
YXRlcm1hcms7CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NpbGVu
dFJlZ2lzdGVyU2F2ZVBsYW4uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NpbGVudFJlZ2lzdGVyU2F2ZVBsYW4uaAkocmV2aXNpb24gMTQxMDUyKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTaWxlbnRSZWdpc3RlclNhdmVQbGFuLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxMyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTc0LDM4ICs3NCwzOCBAQCBwdWJsaWM6CiAgICAgICAgIDogbV9zcGlsbEFjdGlv
bihEb05vdGhpbmdGb3JTcGlsbCkKICAgICAgICAgLCBtX2ZpbGxBY3Rpb24oRG9Ob3RoaW5nRm9y
RmlsbCkKICAgICAgICAgLCBtX3JlZ2lzdGVyKC0xKQotICAgICAgICAsIG1fbm9kZUluZGV4KE5v
Tm9kZSkKKyAgICAgICAgLCBtX25vZGUoMCkKICAgICB7CiAgICAgfQogICAgIAogICAgIFNpbGVu
dFJlZ2lzdGVyU2F2ZVBsYW4oCiAgICAgICAgIFNpbGVudFNwaWxsQWN0aW9uIHNwaWxsQWN0aW9u
LAogICAgICAgICBTaWxlbnRGaWxsQWN0aW9uIGZpbGxBY3Rpb24sCi0gICAgICAgIE5vZGVJbmRl
eCBub2RlSW5kZXgsCisgICAgICAgIE5vZGUqIG5vZGUsCiAgICAgICAgIEdQUlJlZyBncHIpCiAg
ICAgICAgIDogbV9zcGlsbEFjdGlvbihzcGlsbEFjdGlvbikKICAgICAgICAgLCBtX2ZpbGxBY3Rp
b24oZmlsbEFjdGlvbikKICAgICAgICAgLCBtX3JlZ2lzdGVyKGdwcikKLSAgICAgICAgLCBtX25v
ZGVJbmRleChub2RlSW5kZXgpCisgICAgICAgICwgbV9ub2RlKG5vZGUpCiAgICAgewogICAgIH0K
ICAgICAKICAgICBTaWxlbnRSZWdpc3RlclNhdmVQbGFuKAogICAgICAgICBTaWxlbnRTcGlsbEFj
dGlvbiBzcGlsbEFjdGlvbiwKICAgICAgICAgU2lsZW50RmlsbEFjdGlvbiBmaWxsQWN0aW9uLAot
ICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4LAorICAgICAgICBOb2RlKiBub2RlLAogICAgICAg
ICBGUFJSZWcgZnByKQogICAgICAgICA6IG1fc3BpbGxBY3Rpb24oc3BpbGxBY3Rpb24pCiAgICAg
ICAgICwgbV9maWxsQWN0aW9uKGZpbGxBY3Rpb24pCiAgICAgICAgICwgbV9yZWdpc3RlcihmcHIp
Ci0gICAgICAgICwgbV9ub2RlSW5kZXgobm9kZUluZGV4KQorICAgICAgICAsIG1fbm9kZShub2Rl
KQogICAgIHsKICAgICB9CiAgICAgCiAgICAgU2lsZW50U3BpbGxBY3Rpb24gc3BpbGxBY3Rpb24o
KSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxTaWxlbnRTcGlsbEFjdGlvbj4obV9zcGlsbEFj
dGlvbik7IH0KICAgICBTaWxlbnRGaWxsQWN0aW9uIGZpbGxBY3Rpb24oKSBjb25zdCB7IHJldHVy
biBzdGF0aWNfY2FzdDxTaWxlbnRGaWxsQWN0aW9uPihtX2ZpbGxBY3Rpb24pOyB9CiAgICAgCi0g
ICAgTm9kZUluZGV4IG5vZGVJbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1fbm9kZUluZGV4OyB9Cisg
ICAgTm9kZSogbm9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fbm9kZTsgfQogICAgIAogICAgIEdQUlJl
ZyBncHIoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxHUFJSZWc+KG1fcmVnaXN0ZXIpOyB9
CiAgICAgRlBSUmVnIGZwcigpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PEZQUlJlZz4obV9y
ZWdpc3Rlcik7IH0KQEAgLTExNCw3ICsxMTQsNyBAQCBwcml2YXRlOgogICAgIGludDhfdCBtX3Nw
aWxsQWN0aW9uOwogICAgIGludDhfdCBtX2ZpbGxBY3Rpb247CiAgICAgaW50OF90IG1fcmVnaXN0
ZXI7Ci0gICAgTm9kZUluZGV4IG1fbm9kZUluZGV4OworICAgIE5vZGUqIG1fbm9kZTsKIH07CiAK
IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU2xvd1BhdGhHZW5lcmF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1Nsb3dQYXRoR2VuZXJhdG9yLmgJKHJldmlzaW9uIDE0MTA1MikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2xvd1BhdGhHZW5lcmF0b3IuaAkod29ya2luZyBj
b3B5KQpAQCAtNDIsNyArNDIsNyBAQCBjbGFzcyBTbG93UGF0aEdlbmVyYXRvciB7CiAgICAgV1RG
X01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CiAgICAgU2xvd1BhdGhHZW5lcmF0b3IoU3Bl
Y3VsYXRpdmVKSVQqIGppdCkKLSAgICAgICAgOiBtX2NvbXBpbGVJbmRleChqaXQtPm1fY29tcGls
ZUluZGV4KQorICAgICAgICA6IG1fY3VycmVudE5vZGUoaml0LT5tX2N1cnJlbnROb2RlKQogICAg
IHsKICAgICB9CiAgICAgdmlydHVhbCB+U2xvd1BhdGhHZW5lcmF0b3IoKSB7IH0KQEAgLTUyLDcg
KzUyLDcgQEAgcHVibGljOgogICAgICAgICBkYXRhTG9nRigiR2VuZXJhdGluZyBzbG93IHBhdGgg
JXAgYXQgb2Zmc2V0IDB4JXhcbiIsIHRoaXMsIGppdC0+bV9qaXQuZGVidWdPZmZzZXQoKSk7CiAj
ZW5kaWYKICAgICAgICAgbV9sYWJlbCA9IGppdC0+bV9qaXQubGFiZWwoKTsKLSAgICAgICAgaml0
LT5tX2NvbXBpbGVJbmRleCA9IG1fY29tcGlsZUluZGV4OworICAgICAgICBqaXQtPm1fY3VycmVu
dE5vZGUgPSBtX2N1cnJlbnROb2RlOwogICAgICAgICBnZW5lcmF0ZUludGVybmFsKGppdCk7CiAj
aWYgIUFTU0VSVF9ESVNBQkxFRAogICAgICAgICBqaXQtPm1faml0LmJyZWFrcG9pbnQoKTsgLy8g
bWFrZSBzdXJlIHRoYXQgdGhlIGdlbmVyYXRvciBqdW1wcyBiYWNrIHRvIHNvbWV3aGVyZQpAQCAt
NjcsNyArNjcsNyBAQCBwdWJsaWM6CiBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB2b2lkIGdlbmVy
YXRlSW50ZXJuYWwoU3BlY3VsYXRpdmVKSVQqKSA9IDA7CiAgICAgTWFjcm9Bc3NlbWJsZXI6Okxh
YmVsIG1fbGFiZWw7Ci0gICAgTm9kZUluZGV4IG1fY29tcGlsZUluZGV4OworICAgIE5vZGUqIG1f
Y3VycmVudE5vZGU7CiB9OwogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBKdW1wVHlwZT4KSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0
LmNwcAkocmV2aXNpb24gMTQxMDUyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
cGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsMjQgKzQwLDIzIEBA
IG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAogI2lmIFVTRShKU1ZBTFVFMzJfNjQp
CiAKLUdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbEludGVnZXIoTm9kZUluZGV4IG5vZGVJbmRl
eCwgRGF0YUZvcm1hdCYgcmV0dXJuRm9ybWF0KQorR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxs
SW50ZWdlcihOb2RlKiBub2RlLCBEYXRhRm9ybWF0JiByZXR1cm5Gb3JtYXQpCiB7Ci0gICAgTm9k
ZSYgbm9kZSA9IGF0KG5vZGVJbmRleCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdp
c3RlciA9IG5vZGUudmlydHVhbFJlZ2lzdGVyKCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1
YWxSZWdpc3RlciA9IG5vZGUtPnZpcnR1YWxSZWdpc3RlcigpOwogICAgIEdlbmVyYXRpb25JbmZv
JiBpbmZvID0gbV9nZW5lcmF0aW9uSW5mb1t2aXJ0dWFsUmVnaXN0ZXJdOwogCiAgICAgaWYgKGlu
Zm8ucmVnaXN0ZXJGb3JtYXQoKSA9PSBEYXRhRm9ybWF0Tm9uZSkgewogICAgICAgICBHUFJSZWcg
Z3ByID0gYWxsb2NhdGUoKTsKIAotICAgICAgICBpZiAobm9kZS5oYXNDb25zdGFudCgpKSB7Cisg
ICAgICAgIGlmIChub2RlLT5oYXNDb25zdGFudCgpKSB7CiAgICAgICAgICAgICBtX2dwcnMucmV0
YWluKGdwciwgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVyQ29uc3RhbnQpOwotICAgICAgICAg
ICAgaWYgKGlzSW50MzJDb25zdGFudChub2RlSW5kZXgpKQotICAgICAgICAgICAgICAgIG1faml0
Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OkltbTMyKHZhbHVlT2ZJbnQzMkNvbnN0YW50KG5vZGVJbmRl
eCkpLCBncHIpOwotICAgICAgICAgICAgZWxzZSBpZiAoaXNOdW1iZXJDb25zdGFudChub2RlSW5k
ZXgpKQorICAgICAgICAgICAgaWYgKGlzSW50MzJDb25zdGFudChub2RlKSkKKyAgICAgICAgICAg
ICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpJbW0zMih2YWx1ZU9mSW50MzJDb25zdGFu
dChub2RlKSksIGdwcik7CisgICAgICAgICAgICBlbHNlIGlmIChpc051bWJlckNvbnN0YW50KG5v
ZGUpKQogICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAg
ICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICBBU1NFUlQoaXNKU0NvbnN0YW50KG5vZGVJ
bmRleCkpOwotICAgICAgICAgICAgICAgIEpTVmFsdWUganNWYWx1ZSA9IHZhbHVlT2ZKU0NvbnN0
YW50KG5vZGVJbmRleCk7CisgICAgICAgICAgICAgICAgQVNTRVJUKGlzSlNDb25zdGFudChub2Rl
KSk7CisgICAgICAgICAgICAgICAgSlNWYWx1ZSBqc1ZhbHVlID0gdmFsdWVPZkpTQ29uc3RhbnQo
bm9kZSk7CiAgICAgICAgICAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6SW1tMzIo
anNWYWx1ZS5wYXlsb2FkKCkpLCBncHIpOwogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2Ug
ewpAQCAtMTE0LDI1ICsxMTMsMjQgQEAgR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsSW50ZWdl
cihOb2RlSQogICAgIH0KIH0KIAotRlBSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsRG91YmxlKE5v
ZGVJbmRleCBub2RlSW5kZXgpCitGUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxEb3VibGUoTm9k
ZSogbm9kZSkKIHsKLSAgICBOb2RlJiBub2RlID0gYXQobm9kZUluZGV4KTsKLSAgICBWaXJ0dWFs
UmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyID0gbm9kZS52aXJ0dWFsUmVnaXN0ZXIoKTsKKyAgICBW
aXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyID0gbm9kZS0+dmlydHVhbFJlZ2lzdGVyKCk7
CiAgICAgR2VuZXJhdGlvbkluZm8mIGluZm8gPSBtX2dlbmVyYXRpb25JbmZvW3ZpcnR1YWxSZWdp
c3Rlcl07CiAKICAgICBpZiAoaW5mby5yZWdpc3RlckZvcm1hdCgpID09IERhdGFGb3JtYXROb25l
KSB7CiAKLSAgICAgICAgaWYgKG5vZGUuaGFzQ29uc3RhbnQoKSkgewotICAgICAgICAgICAgaWYg
KGlzSW50MzJDb25zdGFudChub2RlSW5kZXgpKSB7CisgICAgICAgIGlmIChub2RlLT5oYXNDb25z
dGFudCgpKSB7CisgICAgICAgICAgICBpZiAoaXNJbnQzMkNvbnN0YW50KG5vZGUpKSB7CiAgICAg
ICAgICAgICAgICAgLy8gRklYTUU6IHNob3VsZCBub3QgYmUgcmVhY2hhYmxlPwogICAgICAgICAg
ICAgICAgIEdQUlJlZyBncHIgPSBhbGxvY2F0ZSgpOwotICAgICAgICAgICAgICAgIG1faml0Lm1v
dmUoTWFjcm9Bc3NlbWJsZXI6OkltbTMyKHZhbHVlT2ZJbnQzMkNvbnN0YW50KG5vZGVJbmRleCkp
LCBncHIpOworICAgICAgICAgICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OkltbTMy
KHZhbHVlT2ZJbnQzMkNvbnN0YW50KG5vZGUpKSwgZ3ByKTsKICAgICAgICAgICAgICAgICBtX2dw
cnMucmV0YWluKGdwciwgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVyQ29uc3RhbnQpOwogICAg
ICAgICAgICAgICAgIGluZm8uZmlsbEludGVnZXIoKm1fc3RyZWFtLCBncHIpOwogICAgICAgICAg
ICAgICAgIHVubG9jayhncHIpOwotICAgICAgICAgICAgfSBlbHNlIGlmIChpc051bWJlckNvbnN0
YW50KG5vZGVJbmRleCkpIHsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNOdW1iZXJDb25zdGFu
dChub2RlKSkgewogICAgICAgICAgICAgICAgIEZQUlJlZyBmcHIgPSBmcHJBbGxvY2F0ZSgpOwot
ICAgICAgICAgICAgICAgIG1faml0LmxvYWREb3VibGUoYWRkcmVzc09mRG91YmxlQ29uc3RhbnQo
bm9kZUluZGV4KSwgZnByKTsKKyAgICAgICAgICAgICAgICBtX2ppdC5sb2FkRG91YmxlKGFkZHJl
c3NPZkRvdWJsZUNvbnN0YW50KG5vZGUpLCBmcHIpOwogICAgICAgICAgICAgICAgIG1fZnBycy5y
ZXRhaW4oZnByLCB2aXJ0dWFsUmVnaXN0ZXIsIFNwaWxsT3JkZXJEb3VibGUpOwogICAgICAgICAg
ICAgICAgIGluZm8uZmlsbERvdWJsZSgqbV9zdHJlYW0sIGZwcik7CiAgICAgICAgICAgICAgICAg
cmV0dXJuIGZwcjsKQEAgLTIzOSwyNiArMjM3LDI1IEBAIEZQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6
ZmlsbERvdWJsZShOb2RlSW4KICAgICB9CiB9CiAKLWJvb2wgU3BlY3VsYXRpdmVKSVQ6OmZpbGxK
U1ZhbHVlKE5vZGVJbmRleCBub2RlSW5kZXgsIEdQUlJlZyYgdGFnR1BSLCBHUFJSZWcmIHBheWxv
YWRHUFIsIEZQUlJlZyYgZnByKQorYm9vbCBTcGVjdWxhdGl2ZUpJVDo6ZmlsbEpTVmFsdWUoTm9k
ZSogbm9kZSwgR1BSUmVnJiB0YWdHUFIsIEdQUlJlZyYgcGF5bG9hZEdQUiwgRlBSUmVnJiBmcHIp
CiB7CiAgICAgLy8gRklYTUU6IEZvciBkb3VibGUgd2UgY291bGQgZmlsbCB3aXRoIGEgRlBSLgog
ICAgIFVOVVNFRF9QQVJBTShmcHIpOwogCi0gICAgTm9kZSYgbm9kZSA9IGF0KG5vZGVJbmRleCk7
Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciA9IG5vZGUudmlydHVhbFJlZ2lz
dGVyKCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciA9IG5vZGUtPnZpcnR1
YWxSZWdpc3RlcigpOwogICAgIEdlbmVyYXRpb25JbmZvJiBpbmZvID0gbV9nZW5lcmF0aW9uSW5m
b1t2aXJ0dWFsUmVnaXN0ZXJdOwogCiAgICAgc3dpdGNoIChpbmZvLnJlZ2lzdGVyRm9ybWF0KCkp
IHsKICAgICBjYXNlIERhdGFGb3JtYXROb25lOiB7CiAKLSAgICAgICAgaWYgKG5vZGUuaGFzQ29u
c3RhbnQoKSkgeworICAgICAgICBpZiAobm9kZS0+aGFzQ29uc3RhbnQoKSkgewogICAgICAgICAg
ICAgdGFnR1BSID0gYWxsb2NhdGUoKTsKICAgICAgICAgICAgIHBheWxvYWRHUFIgPSBhbGxvY2F0
ZSgpOwotICAgICAgICAgICAgbV9qaXQubW92ZShJbW0zMih2YWx1ZU9mSlNDb25zdGFudChub2Rl
SW5kZXgpLnRhZygpKSwgdGFnR1BSKTsKLSAgICAgICAgICAgIG1faml0Lm1vdmUoSW1tMzIodmFs
dWVPZkpTQ29uc3RhbnQobm9kZUluZGV4KS5wYXlsb2FkKCkpLCBwYXlsb2FkR1BSKTsKKyAgICAg
ICAgICAgIG1faml0Lm1vdmUoSW1tMzIodmFsdWVPZkpTQ29uc3RhbnQobm9kZSkudGFnKCkpLCB0
YWdHUFIpOworICAgICAgICAgICAgbV9qaXQubW92ZShJbW0zMih2YWx1ZU9mSlNDb25zdGFudChu
b2RlKS5wYXlsb2FkKCkpLCBwYXlsb2FkR1BSKTsKICAgICAgICAgICAgIG1fZ3Bycy5yZXRhaW4o
dGFnR1BSLCB2aXJ0dWFsUmVnaXN0ZXIsIFNwaWxsT3JkZXJDb25zdGFudCk7CiAgICAgICAgICAg
ICBtX2dwcnMucmV0YWluKHBheWxvYWRHUFIsIHZpcnR1YWxSZWdpc3RlciwgU3BpbGxPcmRlckNv
bnN0YW50KTsKLSAgICAgICAgICAgIGluZm8uZmlsbEpTVmFsdWUoKm1fc3RyZWFtLCB0YWdHUFIs
IHBheWxvYWRHUFIsIGlzSW50MzJDb25zdGFudChub2RlSW5kZXgpID8gRGF0YUZvcm1hdEpTSW50
ZWdlciA6IERhdGFGb3JtYXRKUyk7CisgICAgICAgICAgICBpbmZvLmZpbGxKU1ZhbHVlKCptX3N0
cmVhbSwgdGFnR1BSLCBwYXlsb2FkR1BSLCBpc0ludDMyQ29uc3RhbnQobm9kZSkgPyBEYXRhRm9y
bWF0SlNJbnRlZ2VyIDogRGF0YUZvcm1hdEpTKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAg
ICAgIERhdGFGb3JtYXQgc3BpbGxGb3JtYXQgPSBpbmZvLnNwaWxsRm9ybWF0KCk7CiAgICAgICAg
ICAgICBBU1NFUlQoc3BpbGxGb3JtYXQgIT0gRGF0YUZvcm1hdE5vbmUgJiYgc3BpbGxGb3JtYXQg
IT0gRGF0YUZvcm1hdFN0b3JhZ2UpOwpAQCAtMzkzLDMxICszOTAsMzEgQEAgcHJpdmF0ZToKICAg
ICBHUFJSZWcgbV9qc1ZhbHVlUGF5bG9hZEdQUjsKIH07CiAKLXZvaWQgU3BlY3VsYXRpdmVKSVQ6
Om5vblNwZWN1bGF0aXZlVmFsdWVUb051bWJlcihOb2RlJiBub2RlKQordm9pZCBTcGVjdWxhdGl2
ZUpJVDo6bm9uU3BlY3VsYXRpdmVWYWx1ZVRvTnVtYmVyKE5vZGUqIG5vZGUpCiB7Ci0gICAgaWYg
KGlzS25vd25OdW1lcmljKG5vZGUuY2hpbGQxKCkuaW5kZXgoKSkpIHsKLSAgICAgICAgSlNWYWx1
ZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKCkpOworICAgIGlmIChpc0tub3duTnVtZXJp
Yyhub2RlLT5jaGlsZDEoKS5ub2RlKCkpKSB7CisgICAgICAgIEpTVmFsdWVPcGVyYW5kIG9wMSh0
aGlzLCBub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgIG9wMS5maWxsKCk7CiAgICAgICAgIGlmIChv
cDEuaXNEb3VibGUoKSkgewogICAgICAgICAgICAgRlBSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBv
cDEpOwogICAgICAgICAgICAgbV9qaXQubW92ZURvdWJsZShvcDEuZnByKCksIHJlc3VsdC5mcHIo
KSk7Ci0gICAgICAgICAgICBkb3VibGVSZXN1bHQocmVzdWx0LmZwcigpLCBtX2NvbXBpbGVJbmRl
eCk7CisgICAgICAgICAgICBkb3VibGVSZXN1bHQocmVzdWx0LmZwcigpLCBub2RlKTsKICAgICAg
ICAgfSBlbHNlIHsKICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHRUYWcodGhpcywgb3Ax
KTsKICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHRQYXlsb2FkKHRoaXMsIG9wMSwgZmFs
c2UpOwogICAgICAgICAgICAgbV9qaXQubW92ZShvcDEudGFnR1BSKCksIHJlc3VsdFRhZy5ncHIo
KSk7CiAgICAgICAgICAgICBtX2ppdC5tb3ZlKG9wMS5wYXlsb2FkR1BSKCksIHJlc3VsdFBheWxv
YWQuZ3ByKCkpOwotICAgICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRUYWcuZ3ByKCksIHJl
c3VsdFBheWxvYWQuZ3ByKCksIG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAgICAgIGpzVmFsdWVS
ZXN1bHQocmVzdWx0VGFnLmdwcigpLCByZXN1bHRQYXlsb2FkLmdwcigpLCBub2RlKTsKICAgICAg
ICAgfQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgSlNWYWx1ZU9wZXJhbmQgb3AxKHRo
aXMsIG5vZGUuY2hpbGQxKCkpOworICAgIEpTVmFsdWVPcGVyYW5kIG9wMSh0aGlzLCBub2RlLT5j
aGlsZDEoKSk7CiAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdFRhZyh0aGlzLCBvcDEpOwogICAgIEdQ
UlRlbXBvcmFyeSByZXN1bHRQYXlsb2FkKHRoaXMsIG9wMSwgZmFsc2UpOwogCi0gICAgQVNTRVJU
KCFpc0ludDMyQ29uc3RhbnQobm9kZS5jaGlsZDEoKS5pbmRleCgpKSk7Ci0gICAgQVNTRVJUKCFp
c051bWJlckNvbnN0YW50KG5vZGUuY2hpbGQxKCkuaW5kZXgoKSkpOworICAgIEFTU0VSVCghaXNJ
bnQzMkNvbnN0YW50KG5vZGUtPmNoaWxkMSgpLm5vZGUoKSkpOworICAgIEFTU0VSVCghaXNOdW1i
ZXJDb25zdGFudChub2RlLT5jaGlsZDEoKS5ub2RlKCkpKTsKIAogICAgIEdQUlJlZyB0YWdHUFIg
PSBvcDEudGFnR1BSKCk7CiAgICAgR1BSUmVnIHBheWxvYWRHUFIgPSBvcDEucGF5bG9hZEdQUigp
OwpAQCAtNDM0LDI0ICs0MzEsMjQgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRp
dmVWYWx1ZQogCiAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoYWRvcHRQdHIobmV3IFZhbHVlVG9O
dW1iZXJTbG93UGF0aEdlbmVyYXRvcihub25OdW1lcmljLCB0aGlzLCByZXN1bHRUYWdHUFIsIHJl
c3VsdFBheWxvYWRHUFIsIHRhZ0dQUiwgcGF5bG9hZEdQUikpKTsKIAotICAgIGpzVmFsdWVSZXN1
bHQocmVzdWx0VGFnR1BSLCByZXN1bHRQYXlsb2FkR1BSLCBtX2NvbXBpbGVJbmRleCwgVXNlQ2hp
bGRyZW5DYWxsZWRFeHBsaWNpdGx5KTsKKyAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFRhZ0dQUiwg
cmVzdWx0UGF5bG9hZEdQUiwgbm9kZSwgVXNlQ2hpbGRyZW5DYWxsZWRFeHBsaWNpdGx5KTsKIH0K
IAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVWYWx1ZVRvSW50MzIoTm9kZSYg
bm9kZSkKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlVmFsdWVUb0ludDMyKE5v
ZGUqIG5vZGUpCiB7Ci0gICAgQVNTRVJUKCFpc0ludDMyQ29uc3RhbnQobm9kZS5jaGlsZDEoKS5p
bmRleCgpKSk7CisgICAgQVNTRVJUKCFpc0ludDMyQ29uc3RhbnQobm9kZS0+Y2hpbGQxKCkubm9k
ZSgpKSk7CiAKLSAgICBpZiAoaXNLbm93bkludGVnZXIobm9kZS5jaGlsZDEoKS5pbmRleCgpKSkg
ewotICAgICAgICBJbnRlZ2VyT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEoKSk7CisgICAg
aWYgKGlzS25vd25JbnRlZ2VyKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSkpIHsKKyAgICAgICAgSW50
ZWdlck9wZXJhbmQgb3AxKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgR1BSVGVtcG9y
YXJ5IHJlc3VsdCh0aGlzLCBvcDEpOwogICAgICAgICBtX2ppdC5tb3ZlKG9wMS5ncHIoKSwgcmVz
dWx0LmdwcigpKTsKLSAgICAgICAgaW50ZWdlclJlc3VsdChyZXN1bHQuZ3ByKCksIG1fY29tcGls
ZUluZGV4KTsKKyAgICAgICAgaW50ZWdlclJlc3VsdChyZXN1bHQuZ3ByKCksIG5vZGUpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogCi0gICAgR2VuZXJhdGlvbkluZm8mIGNoaWxkSW5mbyA9IG1f
Z2VuZXJhdGlvbkluZm9bYXQobm9kZS5jaGlsZDEoKSkudmlydHVhbFJlZ2lzdGVyKCldOworICAg
IEdlbmVyYXRpb25JbmZvJiBjaGlsZEluZm8gPSBtX2dlbmVyYXRpb25JbmZvW25vZGUtPmNoaWxk
MSgpLT52aXJ0dWFsUmVnaXN0ZXIoKV07CiAgICAgaWYgKGNoaWxkSW5mby5pc0pTRG91YmxlKCkp
IHsKLSAgICAgICAgRG91YmxlT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEoKSk7CisgICAg
ICAgIERvdWJsZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgR1BS
VGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKICAgICAgICAgRlBSUmVnIGZwciA9IG9wMS5mcHIoKTsK
ICAgICAgICAgR1BSUmVnIGdwciA9IHJlc3VsdC5ncHIoKTsKQEAgLTQ2MCwxMSArNDU3LDExIEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlVmFsdWUKIAogICAgICAgICBhZGRT
bG93UGF0aEdlbmVyYXRvcihzbG93UGF0aENhbGwobm90VHJ1bmNhdGVkVG9JbnRlZ2VyLCB0aGlz
LCB0b0ludDMyLCBncHIsIGZwcikpOwogCi0gICAgICAgIGludGVnZXJSZXN1bHQoZ3ByLCBtX2Nv
bXBpbGVJbmRleCwgVXNlQ2hpbGRyZW5DYWxsZWRFeHBsaWNpdGx5KTsKKyAgICAgICAgaW50ZWdl
clJlc3VsdChncHIsIG5vZGUsIFVzZUNoaWxkcmVuQ2FsbGVkRXhwbGljaXRseSk7CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKLSAgICBKU1ZhbHVlT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGls
ZDEoKSk7CisgICAgSlNWYWx1ZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKICAg
ICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwogICAgIEdQUlJlZyB0YWdHUFIgPSBvcDEudGFn
R1BSKCk7CiAgICAgR1BSUmVnIHBheWxvYWRHUFIgPSBvcDEucGF5bG9hZEdQUigpOwpAQCAtNDc3
LDEyICs0NzQsMTIgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVWYWx1ZQog
ICAgIAogICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKHNsb3dQYXRoQ2FsbChpc05vdEludGVnZXIs
IHRoaXMsIGRmZ0NvbnZlcnRKU1ZhbHVlVG9JbnQzMiwgcmVzdWx0R1BSLCB0YWdHUFIsIHBheWxv
YWRHUFIpKTsKICAgICAKLSAgICBpbnRlZ2VyUmVzdWx0KHJlc3VsdEdQUiwgbV9jb21waWxlSW5k
ZXgsIFVzZUNoaWxkcmVuQ2FsbGVkRXhwbGljaXRseSk7CisgICAgaW50ZWdlclJlc3VsdChyZXN1
bHRHUFIsIG5vZGUsIFVzZUNoaWxkcmVuQ2FsbGVkRXhwbGljaXRseSk7CiB9CiAKLXZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlVUludDMyVG9OdW1iZXIoTm9kZSYgbm9kZSkKK3Zv
aWQgU3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlVUludDMyVG9OdW1iZXIoTm9kZSogbm9k
ZSkKIHsKLSAgICBJbnRlZ2VyT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEoKSk7CisgICAg
SW50ZWdlck9wZXJhbmQgb3AxKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKICAgICBGUFJUZW1wb3Jh
cnkgYm94ZXIodGhpcyk7CiAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdFRhZyh0aGlzLCBvcDEpOwog
ICAgIEdQUlRlbXBvcmFyeSByZXN1bHRQYXlsb2FkKHRoaXMpOwpAQCAtNTA0LDcgKzUwMSw3IEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlVUludDMKICAgICAgICAgCiAgICAg
ZG9uZS5saW5rKCZtX2ppdCk7CiAKLSAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFRhZy5ncHIoKSwg
cmVzdWx0UGF5bG9hZC5ncHIoKSwgbV9jb21waWxlSW5kZXgpOworICAgIGpzVmFsdWVSZXN1bHQo
cmVzdWx0VGFnLmdwcigpLCByZXN1bHRQYXlsb2FkLmdwcigpLCBub2RlKTsKIH0KIAogdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y2FjaGVkR2V0QnlJZChDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIEdQUlJl
ZyBiYXNlVGFnR1BST3JOb25lLCBHUFJSZWcgYmFzZVBheWxvYWRHUFIsIEdQUlJlZyByZXN1bHRU
YWdHUFIsIEdQUlJlZyByZXN1bHRQYXlsb2FkR1BSLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVy
LCBKSVRDb21waWxlcjo6SnVtcCBzbG93UGF0aFRhcmdldCwgU3BpbGxSZWdpc3RlcnNNb2RlIHNw
aWxsTW9kZSkKQEAgLTU3NSw3ICs1NzIsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjYWNoZWRQ
dXRCeUlkKENvZGVPCiAKICAgICBKSVRDb21waWxlcjo6TGFiZWwgZG9uZUxhYmVsID0gbV9qaXQu
bGFiZWwoKTsKICAgICBWX0RGR09wZXJhdGlvbl9FSkNJIG9wdGltaXplZENhbGw7Ci0gICAgaWYg
KG1faml0LnN0cmljdE1vZGVGb3IoYXQobV9jb21waWxlSW5kZXgpLmNvZGVPcmlnaW4pKSB7Cisg
ICAgaWYgKG1faml0LnN0cmljdE1vZGVGb3IobV9jdXJyZW50Tm9kZS0+Y29kZU9yaWdpbikpIHsK
ICAgICAgICAgaWYgKHB1dEtpbmQgPT0gRGlyZWN0KQogICAgICAgICAgICAgb3B0aW1pemVkQ2Fs
bCA9IG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3RPcHRpbWl6ZTsKICAgICAgICAgZWxzZQpA
QCAtNjI1LDEyICs2MjIsMTIgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVO
b25QZQogICAgIEdQUlJlZyByZXN1bHRQYXlsb2FkR1BSID0gcmVzdWx0UGF5bG9hZC5ncHIoKTsK
IAogICAgIEpJVENvbXBpbGVyOjpKdW1wIG5vdENlbGw7Ci0gICAgaWYgKCFpc0tub3duQ2VsbChv
cGVyYW5kLmluZGV4KCkpKQorICAgIGlmICghaXNLbm93bkNlbGwob3BlcmFuZC5ub2RlKCkpKQog
ICAgICAgICBub3RDZWxsID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFs
LCBhcmdUYWdHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSk7CiAKICAgICBKSVRD
b21waWxlcjo6SnVtcCBub3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkOyAgIAotICAgIGlmIChtX2pp
dC5ncmFwaCgpLmdsb2JhbE9iamVjdEZvcihtX2ppdC5ncmFwaCgpW29wZXJhbmRdLmNvZGVPcmln
aW4pLT5tYXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2ludCgpLT5pc1N0aWxsVmFsaWQoKSkg
ewotICAgICAgICBtX2ppdC5ncmFwaCgpLmdsb2JhbE9iamVjdEZvcihtX2ppdC5ncmFwaCgpW29w
ZXJhbmRdLmNvZGVPcmlnaW4pLT5tYXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2ludCgpLT5h
ZGQoc3BlY3VsYXRpb25XYXRjaHBvaW50KCkpOworICAgIGlmIChtX2ppdC5ncmFwaCgpLmdsb2Jh
bE9iamVjdEZvcihtX2N1cnJlbnROb2RlLT5jb2RlT3JpZ2luKS0+bWFzcXVlcmFkZXNBc1VuZGVm
aW5lZFdhdGNocG9pbnQoKS0+aXNTdGlsbFZhbGlkKCkpIHsKKyAgICAgICAgbV9qaXQuZ3JhcGgo
KS5nbG9iYWxPYmplY3RGb3IobV9jdXJyZW50Tm9kZS0+Y29kZU9yaWdpbiktPm1hc3F1ZXJhZGVz
QXNVbmRlZmluZWRXYXRjaHBvaW50KCktPmFkZChzcGVjdWxhdGlvbldhdGNocG9pbnQoKSk7CiAg
ICAgICAgIG1faml0Lm1vdmUoaW52ZXJ0ID8gVHJ1c3RlZEltbTMyKDEpIDogVHJ1c3RlZEltbTMy
KDApLCByZXN1bHRQYXlsb2FkR1BSKTsKICAgICAgICAgbm90TWFzcXVlcmFkZXNBc1VuZGVmaW5l
ZCA9IG1faml0Lmp1bXAoKTsKICAgICB9IGVsc2UgewpAQCAtNjQ1LDEyICs2NDIsMTIgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVOb25QZQogICAgICAgICBHUFJUZW1wb3Jh
cnkgcmVtb3RlR2xvYmFsT2JqZWN0KHRoaXMpOwogICAgICAgICBHUFJSZWcgbG9jYWxHbG9iYWxP
YmplY3RHUFIgPSBsb2NhbEdsb2JhbE9iamVjdC5ncHIoKTsKICAgICAgICAgR1BSUmVnIHJlbW90
ZUdsb2JhbE9iamVjdEdQUiA9IHJlbW90ZUdsb2JhbE9iamVjdC5ncHIoKTsKLSAgICAgICAgbV9q
aXQubW92ZShKSVRDb21waWxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5ncmFwaCgpLmdsb2JhbE9i
amVjdEZvcihtX2ppdC5ncmFwaCgpW29wZXJhbmRdLmNvZGVPcmlnaW4pKSwgbG9jYWxHbG9iYWxP
YmplY3RHUFIpOworICAgICAgICBtX2ppdC5tb3ZlKEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tUHRy
KG1faml0LmdyYXBoKCkuZ2xvYmFsT2JqZWN0Rm9yKG1fY3VycmVudE5vZGUtPmNvZGVPcmlnaW4p
KSwgbG9jYWxHbG9iYWxPYmplY3RHUFIpOwogICAgICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBp
bGVyOjpBZGRyZXNzKHJlc3VsdFBheWxvYWRHUFIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zm
c2V0KCkpLCByZW1vdGVHbG9iYWxPYmplY3RHUFIpOwogICAgICAgICBtX2ppdC5jb21wYXJlMzIo
aW52ZXJ0ID8gSklUQ29tcGlsZXI6Ok5vdEVxdWFsIDogSklUQ29tcGlsZXI6OkVxdWFsLCBsb2Nh
bEdsb2JhbE9iamVjdEdQUiwgcmVtb3RlR2xvYmFsT2JqZWN0R1BSLCByZXN1bHRQYXlsb2FkR1BS
KTsKICAgICB9CiAgCi0gICAgaWYgKCFpc0tub3duQ2VsbChvcGVyYW5kLmluZGV4KCkpKSB7Cisg
ICAgaWYgKCFpc0tub3duQ2VsbChvcGVyYW5kLm5vZGUoKSkpIHsKICAgICAgICAgSklUQ29tcGls
ZXI6Okp1bXAgZG9uZSA9IG1faml0Lmp1bXAoKTsKICAgICAgICAgCiAgICAgICAgIG5vdENlbGwu
bGluaygmbV9qaXQpOwpAQCAtNjY1LDE0ICs2NjIsMTMgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
bm9uU3BlY3VsYXRpdmVOb25QZQogICAgIAogICAgIG5vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQu
bGluaygmbV9qaXQpOwogIAotICAgIGJvb2xlYW5SZXN1bHQocmVzdWx0UGF5bG9hZEdQUiwgbV9j
b21waWxlSW5kZXgpOworICAgIGJvb2xlYW5SZXN1bHQocmVzdWx0UGF5bG9hZEdQUiwgbV9jdXJy
ZW50Tm9kZSk7CiB9CiAKLXZvaWQgU3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlUGVlcGhv
bGVCcmFuY2hOdWxsKEVkZ2Ugb3BlcmFuZCwgTm9kZUluZGV4IGJyYW5jaE5vZGVJbmRleCwgYm9v
bCBpbnZlcnQpCit2b2lkIFNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZVBlZXBob2xlQnJh
bmNoTnVsbChFZGdlIG9wZXJhbmQsIE5vZGUqIGJyYW5jaE5vZGUsIGJvb2wgaW52ZXJ0KQogewot
ICAgIE5vZGUmIGJyYW5jaE5vZGUgPSBhdChicmFuY2hOb2RlSW5kZXgpOwotICAgIEJsb2NrSW5k
ZXggdGFrZW4gPSBicmFuY2hOb2RlLnRha2VuQmxvY2tJbmRleCgpOwotICAgIEJsb2NrSW5kZXgg
bm90VGFrZW4gPSBicmFuY2hOb2RlLm5vdFRha2VuQmxvY2tJbmRleCgpOworICAgIEJsb2NrSW5k
ZXggdGFrZW4gPSBicmFuY2hOb2RlLT50YWtlbkJsb2NrSW5kZXgoKTsKKyAgICBCbG9ja0luZGV4
IG5vdFRha2VuID0gYnJhbmNoTm9kZS0+bm90VGFrZW5CbG9ja0luZGV4KCk7CiAgICAgCiAgICAg
aWYgKHRha2VuID09IG5leHRCbG9jaygpKSB7CiAgICAgICAgIGludmVydCA9ICFpbnZlcnQ7CkBA
IC02OTAsMTEgKzY4NiwxMSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZVBl
ZXBoCiAgICAgCiAgICAgSklUQ29tcGlsZXI6Okp1bXAgbm90Q2VsbDsKICAgICAKLSAgICBpZiAo
IWlzS25vd25DZWxsKG9wZXJhbmQuaW5kZXgoKSkpCisgICAgaWYgKCFpc0tub3duQ2VsbChvcGVy
YW5kLm5vZGUoKSkpCiAgICAgICAgIG5vdENlbGwgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2Vt
Ymxlcjo6Tm90RXF1YWwsIGFyZ1RhZ0dQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcp
KTsKICAgICAKLSAgICBpZiAobV9qaXQuZ3JhcGgoKS5nbG9iYWxPYmplY3RGb3IobV9qaXQuZ3Jh
cGgoKVtvcGVyYW5kXS5jb2RlT3JpZ2luKS0+bWFzcXVlcmFkZXNBc1VuZGVmaW5lZFdhdGNocG9p
bnQoKS0+aXNTdGlsbFZhbGlkKCkpIHsKLSAgICAgICAgbV9qaXQuZ3JhcGgoKS5nbG9iYWxPYmpl
Y3RGb3IobV9qaXQuZ3JhcGgoKVtvcGVyYW5kXS5jb2RlT3JpZ2luKS0+bWFzcXVlcmFkZXNBc1Vu
ZGVmaW5lZFdhdGNocG9pbnQoKS0+YWRkKHNwZWN1bGF0aW9uV2F0Y2hwb2ludCgpKTsKKyAgICBp
ZiAobV9qaXQuZ3JhcGgoKS5nbG9iYWxPYmplY3RGb3IobV9jdXJyZW50Tm9kZS0+Y29kZU9yaWdp
biktPm1hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50KCktPmlzU3RpbGxWYWxpZCgpKSB7
CisgICAgICAgIG1faml0LmdyYXBoKCkuZ2xvYmFsT2JqZWN0Rm9yKG1fY3VycmVudE5vZGUtPmNv
ZGVPcmlnaW4pLT5tYXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2ludCgpLT5hZGQoc3BlY3Vs
YXRpb25XYXRjaHBvaW50KCkpOwogICAgICAgICBqdW1wKGludmVydCA/IHRha2VuIDogbm90VGFr
ZW4sIEZvcmNlSnVtcCk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgbV9qaXQubG9hZFB0cihKSVRD
b21waWxlcjo6QWRkcmVzcyhhcmdQYXlsb2FkR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgp
KSwgcmVzdWx0R1BSKTsKQEAgLTcwNCwxMiArNzAwLDEyIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
Om5vblNwZWN1bGF0aXZlUGVlcGgKICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlbW90ZUdsb2JhbE9i
amVjdCh0aGlzKTsKICAgICAgICAgR1BSUmVnIGxvY2FsR2xvYmFsT2JqZWN0R1BSID0gbG9jYWxH
bG9iYWxPYmplY3QuZ3ByKCk7CiAgICAgICAgIEdQUlJlZyByZW1vdGVHbG9iYWxPYmplY3RHUFIg
PSByZW1vdGVHbG9iYWxPYmplY3QuZ3ByKCk7Ci0gICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZElt
bVB0cihtX2ppdC5ncmFwaCgpLmdsb2JhbE9iamVjdEZvcihtX2ppdC5ncmFwaCgpW29wZXJhbmRd
LmNvZGVPcmlnaW4pKSwgbG9jYWxHbG9iYWxPYmplY3RHUFIpOworICAgICAgICBtX2ppdC5tb3Zl
KFRydXN0ZWRJbW1QdHIobV9qaXQuZ3JhcGgoKS5nbG9iYWxPYmplY3RGb3IobV9jdXJyZW50Tm9k
ZS0+Y29kZU9yaWdpbikpLCBsb2NhbEdsb2JhbE9iamVjdEdQUik7CiAgICAgICAgIG1faml0Lmxv
YWRQdHIoSklUQ29tcGlsZXI6OkFkZHJlc3MocmVzdWx0R1BSLCBTdHJ1Y3R1cmU6Omdsb2JhbE9i
amVjdE9mZnNldCgpKSwgcmVtb3RlR2xvYmFsT2JqZWN0R1BSKTsKICAgICAgICAgYnJhbmNoUHRy
KEpJVENvbXBpbGVyOjpFcXVhbCwgbG9jYWxHbG9iYWxPYmplY3RHUFIsIHJlbW90ZUdsb2JhbE9i
amVjdEdQUiwgaW52ZXJ0ID8gbm90VGFrZW4gOiB0YWtlbik7CiAgICAgfQogIAotICAgIGlmICgh
aXNLbm93bkNlbGwob3BlcmFuZC5pbmRleCgpKSkgeworICAgIGlmICghaXNLbm93bkNlbGwob3Bl
cmFuZC5ub2RlKCkpKSB7CiAgICAgICAgIGp1bXAobm90VGFrZW4sIEZvcmNlSnVtcCk7CiAgICAg
ICAgIAogICAgICAgICBub3RDZWxsLmxpbmsoJm1faml0KTsKQEAgLTcyMywyMCArNzE5LDIwIEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlUGVlcGgKICAgICBqdW1wKG5vdFRh
a2VuKTsKIH0KIAotYm9vbCBTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVDb21wYXJlTnVs
bChOb2RlJiBub2RlLCBFZGdlIG9wZXJhbmQsIGJvb2wgaW52ZXJ0KQorYm9vbCBTcGVjdWxhdGl2
ZUpJVDo6bm9uU3BlY3VsYXRpdmVDb21wYXJlTnVsbChOb2RlKiBub2RlLCBFZGdlIG9wZXJhbmQs
IGJvb2wgaW52ZXJ0KQogewogICAgIHVuc2lnbmVkIGJyYW5jaEluZGV4SW5CbG9jayA9IGRldGVj
dFBlZXBIb2xlQnJhbmNoKCk7CiAgICAgaWYgKGJyYW5jaEluZGV4SW5CbG9jayAhPSBVSU5UX01B
WCkgewotICAgICAgICBOb2RlSW5kZXggYnJhbmNoTm9kZUluZGV4ID0gbV9qaXQuZ3JhcGgoKS5t
X2Jsb2Nrc1ttX2Jsb2NrXS0+YXQoYnJhbmNoSW5kZXhJbkJsb2NrKTsKKyAgICAgICAgTm9kZSog
YnJhbmNoTm9kZSA9IG1faml0LmdyYXBoKCkubV9ibG9ja3NbbV9ibG9ja10tPmF0KGJyYW5jaElu
ZGV4SW5CbG9jayk7CiAKLSAgICAgICAgQVNTRVJUKG5vZGUuYWRqdXN0ZWRSZWZDb3VudCgpID09
IDEpOworICAgICAgICBBU1NFUlQobm9kZS0+YWRqdXN0ZWRSZWZDb3VudCgpID09IDEpOwogICAg
ICAgICAKLSAgICAgICAgbm9uU3BlY3VsYXRpdmVQZWVwaG9sZUJyYW5jaE51bGwob3BlcmFuZCwg
YnJhbmNoTm9kZUluZGV4LCBpbnZlcnQpOworICAgICAgICBub25TcGVjdWxhdGl2ZVBlZXBob2xl
QnJhbmNoTnVsbChvcGVyYW5kLCBicmFuY2hOb2RlLCBpbnZlcnQpOwogICAgIAotICAgICAgICB1
c2Uobm9kZS5jaGlsZDEoKSk7Ci0gICAgICAgIHVzZShub2RlLmNoaWxkMigpKTsKKyAgICAgICAg
dXNlKG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgdXNlKG5vZGUtPmNoaWxkMigpKTsKICAgICAg
ICAgbV9pbmRleEluQmxvY2sgPSBicmFuY2hJbmRleEluQmxvY2s7Ci0gICAgICAgIG1fY29tcGls
ZUluZGV4ID0gYnJhbmNoTm9kZUluZGV4OworICAgICAgICBtX2N1cnJlbnROb2RlID0gYnJhbmNo
Tm9kZTsKICAgICAgICAgCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KQEAgLTc0NiwxMSAr
NzQyLDEwIEBAIGJvb2wgU3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlQ29tcGEKICAgICBy
ZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgU3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlUGVl
cGhvbGVCcmFuY2goTm9kZSYgbm9kZSwgTm9kZUluZGV4IGJyYW5jaE5vZGVJbmRleCwgTWFjcm9B
c3NlbWJsZXI6OlJlbGF0aW9uYWxDb25kaXRpb24gY29uZCwgU19ERkdPcGVyYXRpb25fRUpKIGhl
bHBlckZ1bmN0aW9uKQordm9pZCBTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVQZWVwaG9s
ZUJyYW5jaChOb2RlKiBub2RlLCBOb2RlKiBicmFuY2hOb2RlLCBNYWNyb0Fzc2VtYmxlcjo6UmVs
YXRpb25hbENvbmRpdGlvbiBjb25kLCBTX0RGR09wZXJhdGlvbl9FSkogaGVscGVyRnVuY3Rpb24p
CiB7Ci0gICAgTm9kZSYgYnJhbmNoTm9kZSA9IGF0KGJyYW5jaE5vZGVJbmRleCk7Ci0gICAgQmxv
Y2tJbmRleCB0YWtlbiA9IGJyYW5jaE5vZGUudGFrZW5CbG9ja0luZGV4KCk7Ci0gICAgQmxvY2tJ
bmRleCBub3RUYWtlbiA9IGJyYW5jaE5vZGUubm90VGFrZW5CbG9ja0luZGV4KCk7CisgICAgQmxv
Y2tJbmRleCB0YWtlbiA9IGJyYW5jaE5vZGUtPnRha2VuQmxvY2tJbmRleCgpOworICAgIEJsb2Nr
SW5kZXggbm90VGFrZW4gPSBicmFuY2hOb2RlLT5ub3RUYWtlbkJsb2NrSW5kZXgoKTsKIAogICAg
IEpJVENvbXBpbGVyOjpSZXN1bHRDb25kaXRpb24gY2FsbFJlc3VsdENvbmRpdGlvbiA9IEpJVENv
bXBpbGVyOjpOb25aZXJvOwogCkBAIC03NjQsOCArNzU5LDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6bm9uU3BlY3VsYXRpdmVQZWVwaAogICAgICAgICBub3RUYWtlbiA9IHRtcDsKICAgICB9CiAK
LSAgICBKU1ZhbHVlT3BlcmFuZCBhcmcxKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwotICAgIEpTVmFs
dWVPcGVyYW5kIGFyZzIodGhpcywgbm9kZS5jaGlsZDIoKSk7CisgICAgSlNWYWx1ZU9wZXJhbmQg
YXJnMSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CisgICAgSlNWYWx1ZU9wZXJhbmQgYXJnMih0aGlz
LCBub2RlLT5jaGlsZDIoKSk7CiAgICAgR1BSUmVnIGFyZzFUYWdHUFIgPSBhcmcxLnRhZ0dQUigp
OwogICAgIEdQUlJlZyBhcmcxUGF5bG9hZEdQUiA9IGFyZzEucGF5bG9hZEdQUigpOwogICAgIEdQ
UlJlZyBhcmcyVGFnR1BSID0gYXJnMi50YWdHUFIoKTsKQEAgLTc3Myw3ICs3NjgsNyBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZVBlZXBoCiAgICAgCiAgICAgSklUQ29tcGls
ZXI6Okp1bXBMaXN0IHNsb3dQYXRoOwogICAgIAotICAgIGlmIChpc0tub3duTm90SW50ZWdlcihu
b2RlLmNoaWxkMSgpLmluZGV4KCkpIHx8IGlzS25vd25Ob3RJbnRlZ2VyKG5vZGUuY2hpbGQyKCku
aW5kZXgoKSkpIHsKKyAgICBpZiAoaXNLbm93bk5vdEludGVnZXIobm9kZS0+Y2hpbGQxKCkubm9k
ZSgpKSB8fCBpc0tub3duTm90SW50ZWdlcihub2RlLT5jaGlsZDIoKS5ub2RlKCkpKSB7CiAgICAg
ICAgIEdQUlJlc3VsdCByZXN1bHQodGhpcyk7CiAgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSBy
ZXN1bHQuZ3ByKCk7CiAKQEAgLTc5MSwxNCArNzg2LDE0IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
Om5vblNwZWN1bGF0aXZlUGVlcGgKICAgICAgICAgYXJnMS51c2UoKTsKICAgICAgICAgYXJnMi51
c2UoKTsKIAotICAgICAgICBpZiAoIWlzS25vd25JbnRlZ2VyKG5vZGUuY2hpbGQxKCkuaW5kZXgo
KSkpCisgICAgICAgIGlmICghaXNLbm93bkludGVnZXIobm9kZS0+Y2hpbGQxKCkubm9kZSgpKSkK
ICAgICAgICAgICAgIHNsb3dQYXRoLmFwcGVuZChtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxl
cjo6Tm90RXF1YWwsIGFyZzFUYWdHUFIsIEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tMzIoSlNWYWx1
ZTo6SW50MzJUYWcpKSk7Ci0gICAgICAgIGlmICghaXNLbm93bkludGVnZXIobm9kZS5jaGlsZDIo
KS5pbmRleCgpKSkKKyAgICAgICAgaWYgKCFpc0tub3duSW50ZWdlcihub2RlLT5jaGlsZDIoKS5u
b2RlKCkpKQogICAgICAgICAgICAgc2xvd1BhdGguYXBwZW5kKG1faml0LmJyYW5jaDMyKE1hY3Jv
QXNzZW1ibGVyOjpOb3RFcXVhbCwgYXJnMlRhZ0dQUiwgSklUQ29tcGlsZXI6OlRydXN0ZWRJbW0z
MihKU1ZhbHVlOjpJbnQzMlRhZykpKTsKICAgICAKICAgICAgICAgYnJhbmNoMzIoY29uZCwgYXJn
MVBheWxvYWRHUFIsIGFyZzJQYXlsb2FkR1BSLCB0YWtlbik7CiAgICAgCi0gICAgICAgIGlmICgh
aXNLbm93bkludGVnZXIobm9kZS5jaGlsZDEoKS5pbmRleCgpKSB8fCAhaXNLbm93bkludGVnZXIo
bm9kZS5jaGlsZDIoKS5pbmRleCgpKSkgeworICAgICAgICBpZiAoIWlzS25vd25JbnRlZ2VyKG5v
ZGUtPmNoaWxkMSgpLm5vZGUoKSkgfHwgIWlzS25vd25JbnRlZ2VyKG5vZGUtPmNoaWxkMigpLm5v
ZGUoKSkpIHsKICAgICAgICAgICAgIGp1bXAobm90VGFrZW4sIEZvcmNlSnVtcCk7CiAgICAgCiAg
ICAgICAgICAgICBzbG93UGF0aC5saW5rKCZtX2ppdCk7CkBAIC04MTQsNyArODA5LDcgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVQZWVwaAogICAgIGp1bXAobm90VGFrZW4p
OwogICAgIAogICAgIG1faW5kZXhJbkJsb2NrID0gbV9qaXQuZ3JhcGgoKS5tX2Jsb2Nrc1ttX2Js
b2NrXS0+c2l6ZSgpIC0gMTsKLSAgICBtX2NvbXBpbGVJbmRleCA9IGJyYW5jaE5vZGVJbmRleDsK
KyAgICBtX2N1cnJlbnROb2RlID0gYnJhbmNoTm9kZTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUg
SnVtcFR5cGU+CkBAIC04NTMsMTAgKzg0OCwxMCBAQCBwcml2YXRlOgogICAgIEdQUlJlZyBtX2Fy
ZzJQYXlsb2FkOwogfTsKIAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVOb25Q
ZWVwaG9sZUNvbXBhcmUoTm9kZSYgbm9kZSwgTWFjcm9Bc3NlbWJsZXI6OlJlbGF0aW9uYWxDb25k
aXRpb24gY29uZCwgU19ERkdPcGVyYXRpb25fRUpKIGhlbHBlckZ1bmN0aW9uKQordm9pZCBTcGVj
dWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVOb25QZWVwaG9sZUNvbXBhcmUoTm9kZSogbm9kZSwg
TWFjcm9Bc3NlbWJsZXI6OlJlbGF0aW9uYWxDb25kaXRpb24gY29uZCwgU19ERkdPcGVyYXRpb25f
RUpKIGhlbHBlckZ1bmN0aW9uKQogewotICAgIEpTVmFsdWVPcGVyYW5kIGFyZzEodGhpcywgbm9k
ZS5jaGlsZDEoKSk7Ci0gICAgSlNWYWx1ZU9wZXJhbmQgYXJnMih0aGlzLCBub2RlLmNoaWxkMigp
KTsKKyAgICBKU1ZhbHVlT3BlcmFuZCBhcmcxKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKKyAgICBK
U1ZhbHVlT3BlcmFuZCBhcmcyKHRoaXMsIG5vZGUtPmNoaWxkMigpKTsKICAgICBHUFJSZWcgYXJn
MVRhZ0dQUiA9IGFyZzEudGFnR1BSKCk7CiAgICAgR1BSUmVnIGFyZzFQYXlsb2FkR1BSID0gYXJn
MS5wYXlsb2FkR1BSKCk7CiAgICAgR1BSUmVnIGFyZzJUYWdHUFIgPSBhcmcyLnRhZ0dQUigpOwpA
QCAtODY0LDcgKzg1OSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlTm9u
UGUKICAgICAKICAgICBKSVRDb21waWxlcjo6SnVtcExpc3Qgc2xvd1BhdGg7CiAgICAgCi0gICAg
aWYgKGlzS25vd25Ob3RJbnRlZ2VyKG5vZGUuY2hpbGQxKCkuaW5kZXgoKSkgfHwgaXNLbm93bk5v
dEludGVnZXIobm9kZS5jaGlsZDIoKS5pbmRleCgpKSkgeworICAgIGlmIChpc0tub3duTm90SW50
ZWdlcihub2RlLT5jaGlsZDEoKS5ub2RlKCkpIHx8IGlzS25vd25Ob3RJbnRlZ2VyKG5vZGUtPmNo
aWxkMigpLm5vZGUoKSkpIHsKICAgICAgICAgR1BSUmVzdWx0IHJlc3VsdCh0aGlzKTsKICAgICAg
ICAgR1BSUmVnIHJlc3VsdFBheWxvYWRHUFIgPSByZXN1bHQuZ3ByKCk7CiAgICAgCkBAIC04NzQs
NyArODY5LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVOb25QZQogICAg
ICAgICBmbHVzaFJlZ2lzdGVycygpOwogICAgICAgICBjYWxsT3BlcmF0aW9uKGhlbHBlckZ1bmN0
aW9uLCByZXN1bHRQYXlsb2FkR1BSLCBhcmcxVGFnR1BSLCBhcmcxUGF5bG9hZEdQUiwgYXJnMlRh
Z0dQUiwgYXJnMlBheWxvYWRHUFIpOwogICAgICAgICAKLSAgICAgICAgYm9vbGVhblJlc3VsdChy
ZXN1bHRQYXlsb2FkR1BSLCBtX2NvbXBpbGVJbmRleCwgVXNlQ2hpbGRyZW5DYWxsZWRFeHBsaWNp
dGx5KTsKKyAgICAgICAgYm9vbGVhblJlc3VsdChyZXN1bHRQYXlsb2FkR1BSLCBub2RlLCBVc2VD
aGlsZHJlbkNhbGxlZEV4cGxpY2l0bHkpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIEdQUlRlbXBv
cmFyeSByZXN1bHRQYXlsb2FkKHRoaXMsIGFyZzEsIGZhbHNlKTsKICAgICAgICAgR1BSUmVnIHJl
c3VsdFBheWxvYWRHUFIgPSByZXN1bHRQYXlsb2FkLmdwcigpOwpAQCAtODgyLDI5ICs4NzcsMjgg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVOb25QZQogICAgICAgICBhcmcx
LnVzZSgpOwogICAgICAgICBhcmcyLnVzZSgpOwogICAgIAotICAgICAgICBpZiAoIWlzS25vd25J
bnRlZ2VyKG5vZGUuY2hpbGQxKCkuaW5kZXgoKSkpCisgICAgICAgIGlmICghaXNLbm93bkludGVn
ZXIobm9kZS0+Y2hpbGQxKCkubm9kZSgpKSkKICAgICAgICAgICAgIHNsb3dQYXRoLmFwcGVuZCht
X2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIGFyZzFUYWdHUFIsIEpJVENv
bXBpbGVyOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpKSk7Ci0gICAgICAgIGlmICgh
aXNLbm93bkludGVnZXIobm9kZS5jaGlsZDIoKS5pbmRleCgpKSkKKyAgICAgICAgaWYgKCFpc0tu
b3duSW50ZWdlcihub2RlLT5jaGlsZDIoKS5ub2RlKCkpKQogICAgICAgICAgICAgc2xvd1BhdGgu
YXBwZW5kKG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgYXJnMlRhZ0dQ
UiwgSklUQ29tcGlsZXI6OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZykpKTsKIAogICAg
ICAgICBtX2ppdC5jb21wYXJlMzIoY29uZCwgYXJnMVBheWxvYWRHUFIsIGFyZzJQYXlsb2FkR1BS
LCByZXN1bHRQYXlsb2FkR1BSKTsKICAgICAKLSAgICAgICAgaWYgKCFpc0tub3duSW50ZWdlcihu
b2RlLmNoaWxkMSgpLmluZGV4KCkpIHx8ICFpc0tub3duSW50ZWdlcihub2RlLmNoaWxkMigpLmlu
ZGV4KCkpKSB7CisgICAgICAgIGlmICghaXNLbm93bkludGVnZXIobm9kZS0+Y2hpbGQxKCkubm9k
ZSgpKSB8fCAhaXNLbm93bkludGVnZXIobm9kZS0+Y2hpbGQyKCkubm9kZSgpKSkgewogICAgICAg
ICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoYWRvcHRQdHIoCiAgICAgICAgICAgICAgICAgbmV3
IENvbXBhcmVBbmRCb3hCb29sZWFuU2xvd1BhdGhHZW5lcmF0b3I8SklUQ29tcGlsZXI6Okp1bXBM
aXN0PigKICAgICAgICAgICAgICAgICAgICAgc2xvd1BhdGgsIHRoaXMsIGhlbHBlckZ1bmN0aW9u
LCByZXN1bHRQYXlsb2FkR1BSLCBhcmcxVGFnR1BSLAogICAgICAgICAgICAgICAgICAgICBhcmcx
UGF5bG9hZEdQUiwgYXJnMlRhZ0dQUiwgYXJnMlBheWxvYWRHUFIpKSk7CiAgICAgICAgIH0KICAg
ICAgICAgCi0gICAgICAgIGJvb2xlYW5SZXN1bHQocmVzdWx0UGF5bG9hZEdQUiwgbV9jb21waWxl
SW5kZXgsIFVzZUNoaWxkcmVuQ2FsbGVkRXhwbGljaXRseSk7CisgICAgICAgIGJvb2xlYW5SZXN1
bHQocmVzdWx0UGF5bG9hZEdQUiwgbm9kZSwgVXNlQ2hpbGRyZW5DYWxsZWRFeHBsaWNpdGx5KTsK
ICAgICB9CiB9CiAKLXZvaWQgU3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlUGVlcGhvbGVT
dHJpY3RFcShOb2RlJiBub2RlLCBOb2RlSW5kZXggYnJhbmNoTm9kZUluZGV4LCBib29sIGludmVy
dCkKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlUGVlcGhvbGVTdHJpY3RFcShO
b2RlKiBub2RlLCBOb2RlKiBicmFuY2hOb2RlLCBib29sIGludmVydCkKIHsKLSAgICBOb2RlJiBi
cmFuY2hOb2RlID0gYXQoYnJhbmNoTm9kZUluZGV4KTsKLSAgICBCbG9ja0luZGV4IHRha2VuID0g
YnJhbmNoTm9kZS50YWtlbkJsb2NrSW5kZXgoKTsKLSAgICBCbG9ja0luZGV4IG5vdFRha2VuID0g
YnJhbmNoTm9kZS5ub3RUYWtlbkJsb2NrSW5kZXgoKTsKKyAgICBCbG9ja0luZGV4IHRha2VuID0g
YnJhbmNoTm9kZS0+dGFrZW5CbG9ja0luZGV4KCk7CisgICAgQmxvY2tJbmRleCBub3RUYWtlbiA9
IGJyYW5jaE5vZGUtPm5vdFRha2VuQmxvY2tJbmRleCgpOwogCiAgICAgLy8gVGhlIGJyYW5jaCBp
bnN0cnVjdGlvbiB3aWxsIGJyYW5jaCB0byB0aGUgdGFrZW4gYmxvY2suCiAgICAgLy8gSWYgdGFr
ZW4gaXMgbmV4dCwgc3dpdGNoIHRha2VuIHdpdGggbm90VGFrZW4gJiBpbnZlcnQgdGhlIGJyYW5j
aCBjb25kaXRpb24gc28gd2UgY2FuIGZhbGwgdGhyb3VnaC4KQEAgLTkxNSw4ICs5MDksOCBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZVBlZXBoCiAgICAgICAgIG5vdFRha2Vu
ID0gdG1wOwogICAgIH0KICAgICAKLSAgICBKU1ZhbHVlT3BlcmFuZCBhcmcxKHRoaXMsIG5vZGUu
Y2hpbGQxKCkpOwotICAgIEpTVmFsdWVPcGVyYW5kIGFyZzIodGhpcywgbm9kZS5jaGlsZDIoKSk7
CisgICAgSlNWYWx1ZU9wZXJhbmQgYXJnMSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CisgICAgSlNW
YWx1ZU9wZXJhbmQgYXJnMih0aGlzLCBub2RlLT5jaGlsZDIoKSk7CiAgICAgR1BSUmVnIGFyZzFU
YWdHUFIgPSBhcmcxLnRhZ0dQUigpOwogICAgIEdQUlJlZyBhcmcxUGF5bG9hZEdQUiA9IGFyZzEu
cGF5bG9hZEdQUigpOwogICAgIEdQUlJlZyBhcmcyVGFnR1BSID0gYXJnMi50YWdHUFIoKTsKQEAg
LTkyOCw3ICs5MjIsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZVBlZXBo
CiAgICAgYXJnMS51c2UoKTsKICAgICBhcmcyLnVzZSgpOwogICAgIAotICAgIGlmIChpc0tub3du
Q2VsbChub2RlLmNoaWxkMSgpLmluZGV4KCkpICYmIGlzS25vd25DZWxsKG5vZGUuY2hpbGQyKCku
aW5kZXgoKSkpIHsKKyAgICBpZiAoaXNLbm93bkNlbGwobm9kZS0+Y2hpbGQxKCkubm9kZSgpKSAm
JiBpc0tub3duQ2VsbChub2RlLT5jaGlsZDIoKS5ub2RlKCkpKSB7CiAgICAgICAgIC8vIHNlZSBp
ZiB3ZSBnZXQgbHVja3k6IGlmIHRoZSBhcmd1bWVudHMgYXJlIGNlbGxzIGFuZCB0aGV5IHJlZmVy
ZW5jZSB0aGUgc2FtZQogICAgICAgICAvLyBjZWxsLCB0aGVuIHRoZXkgbXVzdCBiZSBzdHJpY3Rs
eSBlcXVhbC4KICAgICAgICAgYnJhbmNoUHRyKEpJVENvbXBpbGVyOjpFcXVhbCwgYXJnMVBheWxv
YWRHUFIsIGFyZzJQYXlsb2FkR1BSLCBpbnZlcnQgPyBub3RUYWtlbiA6IHRha2VuKTsKQEAgLTk1
MSwxMCArOTQ1LDEwIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlUGVlcGgK
ICAgICBqdW1wKG5vdFRha2VuKTsKIH0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3Vs
YXRpdmVOb25QZWVwaG9sZVN0cmljdEVxKE5vZGUmIG5vZGUsIGJvb2wgaW52ZXJ0KQordm9pZCBT
cGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVOb25QZWVwaG9sZVN0cmljdEVxKE5vZGUqIG5v
ZGUsIGJvb2wgaW52ZXJ0KQogewotICAgIEpTVmFsdWVPcGVyYW5kIGFyZzEodGhpcywgbm9kZS5j
aGlsZDEoKSk7Ci0gICAgSlNWYWx1ZU9wZXJhbmQgYXJnMih0aGlzLCBub2RlLmNoaWxkMigpKTsK
KyAgICBKU1ZhbHVlT3BlcmFuZCBhcmcxKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKKyAgICBKU1Zh
bHVlT3BlcmFuZCBhcmcyKHRoaXMsIG5vZGUtPmNoaWxkMigpKTsKICAgICBHUFJSZWcgYXJnMVRh
Z0dQUiA9IGFyZzEudGFnR1BSKCk7CiAgICAgR1BSUmVnIGFyZzFQYXlsb2FkR1BSID0gYXJnMS5w
YXlsb2FkR1BSKCk7CiAgICAgR1BSUmVnIGFyZzJUYWdHUFIgPSBhcmcyLnRhZ0dQUigpOwpAQCAt
OTY2LDcgKzk2MCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlTm9uUGUK
ICAgICBhcmcxLnVzZSgpOwogICAgIGFyZzIudXNlKCk7CiAgICAgCi0gICAgaWYgKGlzS25vd25D
ZWxsKG5vZGUuY2hpbGQxKCkuaW5kZXgoKSkgJiYgaXNLbm93bkNlbGwobm9kZS5jaGlsZDIoKS5p
bmRleCgpKSkgeworICAgIGlmIChpc0tub3duQ2VsbChub2RlLT5jaGlsZDEoKS5ub2RlKCkpICYm
IGlzS25vd25DZWxsKG5vZGUtPmNoaWxkMigpLm5vZGUoKSkpIHsKICAgICAgICAgLy8gc2VlIGlm
IHdlIGdldCBsdWNreTogaWYgdGhlIGFyZ3VtZW50cyBhcmUgY2VsbHMgYW5kIHRoZXkgcmVmZXJl
bmNlIHRoZSBzYW1lCiAgICAgICAgIC8vIGNlbGwsIHRoZW4gdGhleSBtdXN0IGJlIHN0cmljdGx5
IGVxdWFsLgogICAgICAgICAvLyBGSVhNRTogdGhpcyBzaG91bGQgZmx1c2ggcmVnaXN0ZXJzIGlu
c3RlYWQgb2Ygc2lsZW50IHNwaWxsL2ZpbGwuCkBAIC05OTQsMjEgKzk4OCwyMSBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZU5vblBlCiAgICAgICAgIG1faml0LmFuZFB0cihK
SVRDb21waWxlcjo6VHJ1c3RlZEltbTMyKDEpLCByZXN1bHRQYXlsb2FkR1BSKTsKICAgICB9CiAK
LSAgICBib29sZWFuUmVzdWx0KHJlc3VsdFBheWxvYWRHUFIsIG1fY29tcGlsZUluZGV4LCBVc2VD
aGlsZHJlbkNhbGxlZEV4cGxpY2l0bHkpOworICAgIGJvb2xlYW5SZXN1bHQocmVzdWx0UGF5bG9h
ZEdQUiwgbm9kZSwgVXNlQ2hpbGRyZW5DYWxsZWRFeHBsaWNpdGx5KTsKIH0KIAotdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6ZW1pdENhbGwoTm9kZSYgbm9kZSkKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVt
aXRDYWxsKE5vZGUqIG5vZGUpCiB7Ci0gICAgaWYgKG5vZGUub3AoKSAhPSBDYWxsKQotICAgICAg
ICBBU1NFUlQobm9kZS5vcCgpID09IENvbnN0cnVjdCk7CisgICAgaWYgKG5vZGUtPm9wKCkgIT0g
Q2FsbCkKKyAgICAgICAgQVNTRVJUKG5vZGUtPm9wKCkgPT0gQ29uc3RydWN0KTsKIAogICAgIC8v
IEZvciBjb25zdHJ1Y3RvcnMsIHRoZSB0aGlzIGFyZ3VtZW50IGlzIG5vdCBwYXNzZWQgYnV0IHdl
IGhhdmUgdG8gbWFrZSBzcGFjZQogICAgIC8vIGZvciBpdC4KLSAgICBpbnQgZHVtbXlUaGlzQXJn
dW1lbnQgPSBub2RlLm9wKCkgPT0gQ2FsbCA/IDAgOiAxOworICAgIGludCBkdW1teVRoaXNBcmd1
bWVudCA9IG5vZGUtPm9wKCkgPT0gQ2FsbCA/IDAgOiAxOwogCi0gICAgQ2FsbExpbmtJbmZvOjpD
YWxsVHlwZSBjYWxsVHlwZSA9IG5vZGUub3AoKSA9PSBDYWxsID8gQ2FsbExpbmtJbmZvOjpDYWxs
IDogQ2FsbExpbmtJbmZvOjpDb25zdHJ1Y3Q7CisgICAgQ2FsbExpbmtJbmZvOjpDYWxsVHlwZSBj
YWxsVHlwZSA9IG5vZGUtPm9wKCkgPT0gQ2FsbCA/IENhbGxMaW5rSW5mbzo6Q2FsbCA6IENhbGxM
aW5rSW5mbzo6Q29uc3RydWN0OwogCi0gICAgRWRnZSBjYWxsZWVFZGdlID0gbV9qaXQuZ3JhcGgo
KS5tX3ZhckFyZ0NoaWxkcmVuW25vZGUuZmlyc3RDaGlsZCgpXTsKKyAgICBFZGdlIGNhbGxlZUVk
Z2UgPSBtX2ppdC5ncmFwaCgpLm1fdmFyQXJnQ2hpbGRyZW5bbm9kZS0+Zmlyc3RDaGlsZCgpXTsK
ICAgICBKU1ZhbHVlT3BlcmFuZCBjYWxsZWUodGhpcywgY2FsbGVlRWRnZSk7CiAgICAgR1BSUmVn
IGNhbGxlZVRhZ0dQUiA9IGNhbGxlZS50YWdHUFIoKTsKICAgICBHUFJSZWcgY2FsbGVlUGF5bG9h
ZEdQUiA9IGNhbGxlZS5wYXlsb2FkR1BSKCk7CkBAIC0xMDE2LDcgKzEwMTAsNyBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjplbWl0Q2FsbChOb2RlJiBub2RlCiAKICAgICAvLyBUaGUgY2FsbCBpbnN0
cnVjdGlvbidzIGZpcnN0IGNoaWxkIGlzIGVpdGhlciB0aGUgZnVuY3Rpb24gKG5vcm1hbCBjYWxs
KSBvciB0aGUKICAgICAvLyByZWNlaXZlciAobWV0aG9kIGNhbGwpLiBzdWJzZXF1ZW50IGNoaWxk
cmVuIGFyZSB0aGUgYXJndW1lbnRzLgotICAgIGludCBudW1QYXNzZWRBcmdzID0gbm9kZS5udW1D
aGlsZHJlbigpIC0gMTsKKyAgICBpbnQgbnVtUGFzc2VkQXJncyA9IG5vZGUtPm51bUNoaWxkcmVu
KCkgLSAxOwogCiAgICAgbV9qaXQuc3RvcmUzMihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMy
KG51bVBhc3NlZEFyZ3MgKyBkdW1teVRoaXNBcmd1bWVudCksIGNhbGxGcmFtZVBheWxvYWRTbG90
KEpTU3RhY2s6OkFyZ3VtZW50Q291bnQpKTsKICAgICBtX2ppdC5zdG9yZVB0cihHUFJJbmZvOjpj
YWxsRnJhbWVSZWdpc3RlciwgY2FsbEZyYW1lUGF5bG9hZFNsb3QoSlNTdGFjazo6Q2FsbGVyRnJh
bWUpKTsKQEAgLTEwMjQsNyArMTAxOCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxs
KE5vZGUmIG5vZGUKICAgICBtX2ppdC5zdG9yZTMyKGNhbGxlZVRhZ0dQUiwgY2FsbEZyYW1lVGFn
U2xvdChKU1N0YWNrOjpDYWxsZWUpKTsKIAogICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtUGFz
c2VkQXJnczsgaSsrKSB7Ci0gICAgICAgIEVkZ2UgYXJnRWRnZSA9IG1faml0LmdyYXBoKCkubV92
YXJBcmdDaGlsZHJlbltub2RlLmZpcnN0Q2hpbGQoKSArIDEgKyBpXTsKKyAgICAgICAgRWRnZSBh
cmdFZGdlID0gbV9qaXQuZ3JhcGgoKS5tX3ZhckFyZ0NoaWxkcmVuW25vZGUtPmZpcnN0Q2hpbGQo
KSArIDEgKyBpXTsKICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgYXJnKHRoaXMsIGFyZ0VkZ2UpOwog
ICAgICAgICBHUFJSZWcgYXJnVGFnR1BSID0gYXJnLnRhZ0dQUigpOwogICAgICAgICBHUFJSZWcg
YXJnUGF5bG9hZEdQUiA9IGFyZy5wYXlsb2FkR1BSKCk7CkBAIC0xMDQ1LDcgKzEwMzksNyBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbChOb2RlJiBub2RlCiAgICAgSklUQ29tcGlsZXI6
Okp1bXBMaXN0IHNsb3dQYXRoOwogCiAgICAgQ2FsbEJlZ2luVG9rZW4gdG9rZW47Ci0gICAgbV9q
aXQuYmVnaW5DYWxsKG5vZGUuY29kZU9yaWdpbiwgdG9rZW4pOworICAgIG1faml0LmJlZ2luQ2Fs
bChub2RlLT5jb2RlT3JpZ2luLCB0b2tlbik7CiAgICAgCiAgICAgbV9qaXQuYWRkUHRyKFRydXN0
ZWRJbW0zMihtX2ppdC5jb2RlQmxvY2soKS0+bV9udW1DYWxsZWVSZWdpc3RlcnMgKiBzaXplb2Yo
UmVnaXN0ZXIpKSwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpOwogICAgIApAQCAtMTA1NSw3
ICsxMDQ5LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwoTm9kZSYgbm9kZQogICAg
IG1faml0LnN0b3JlUHRyKHJlc3VsdFBheWxvYWRHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBzdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHNpemVv
ZihSZWdpc3RlcikpICogSlNTdGFjazo6U2NvcGVDaGFpbiArIE9CSkVDVF9PRkZTRVRPRihFbmNv
ZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9hZCkpKTsKICAgICBtX2ppdC5zdG9yZTMy
KE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZyksIE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBzdGF0aWNfY2FzdDxw
dHJkaWZmX3Q+KHNpemVvZihSZWdpc3RlcikpICogSlNTdGFjazo6U2NvcGVDaGFpbiArIE9CSkVD
VF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMudGFnKSkpOwogCi0gICAg
Q29kZU9yaWdpbiBjb2RlT3JpZ2luID0gYXQobV9jb21waWxlSW5kZXgpLmNvZGVPcmlnaW47Cisg
ICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2luID0gbm9kZS0+Y29kZU9yaWdpbjsKICAgICBKSVRDb21w
aWxlcjo6Q2FsbCBmYXN0Q2FsbCA9IG1faml0Lm5lYXJDYWxsKCk7CiAgICAgbV9qaXQubm90aWZ5
Q2FsbChmYXN0Q2FsbCwgY29kZU9yaWdpbiwgdG9rZW4pOwogCkBAIC0xMDgyLDM1ICsxMDc2LDM0
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKE5vZGUmIG5vZGUKIAogICAgIG1faml0
LnNldHVwUmVzdWx0cyhyZXN1bHRQYXlsb2FkR1BSLCByZXN1bHRUYWdHUFIpOwogCi0gICAganNW
YWx1ZVJlc3VsdChyZXN1bHRUYWdHUFIsIHJlc3VsdFBheWxvYWRHUFIsIG1fY29tcGlsZUluZGV4
LCBEYXRhRm9ybWF0SlMsIFVzZUNoaWxkcmVuQ2FsbGVkRXhwbGljaXRseSk7CisgICAganNWYWx1
ZVJlc3VsdChyZXN1bHRUYWdHUFIsIHJlc3VsdFBheWxvYWRHUFIsIG5vZGUsIERhdGFGb3JtYXRK
UywgVXNlQ2hpbGRyZW5DYWxsZWRFeHBsaWNpdGx5KTsKIAotICAgIG1faml0LmFkZEpTQ2FsbChm
YXN0Q2FsbCwgc2xvd0NhbGwsIHRhcmdldFRvQ2hlY2ssIGNhbGxUeXBlLCBjYWxsZWVQYXlsb2Fk
R1BSLCBhdChtX2NvbXBpbGVJbmRleCkuY29kZU9yaWdpbik7CisgICAgbV9qaXQuYWRkSlNDYWxs
KGZhc3RDYWxsLCBzbG93Q2FsbCwgdGFyZ2V0VG9DaGVjaywgY2FsbFR5cGUsIGNhbGxlZVBheWxv
YWRHUFIsIG5vZGUtPmNvZGVPcmlnaW4pOwogfQogCiB0ZW1wbGF0ZTxib29sIHN0cmljdD4KLUdQ
UlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUludEludGVybmFsKE5vZGVJbmRleCBu
b2RlSW5kZXgsIERhdGFGb3JtYXQmIHJldHVybkZvcm1hdCwgU3BlY3VsYXRpb25EaXJlY3Rpb24g
ZGlyZWN0aW9uKQorR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlSW50SW50ZXJu
YWwoTm9kZSogbm9kZSwgRGF0YUZvcm1hdCYgcmV0dXJuRm9ybWF0LCBTcGVjdWxhdGlvbkRpcmVj
dGlvbiBkaXJlY3Rpb24pCiB7CiAjaWYgREZHX0VOQUJMRShERUJVR19WRVJCT1NFKQotICAgIGRh
dGFMb2dGKCJTcGVjSW50QCVkICAgIiwgbm9kZUluZGV4KTsKKyAgICBkYXRhTG9nRigiU3BlY0lu
dEAlZCAgICIsIG5vZGUtPmluZGV4KCkpOwogI2VuZGlmCi0gICAgaWYgKGlzS25vd25Ob3RJbnRl
Z2VyKG5vZGVJbmRleCkpIHsKLSAgICAgICAgdGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24o
VW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgZGlyZWN0aW9uKTsKKyAgICBpZiAo
aXNLbm93bk5vdEludGVnZXIobm9kZSkpIHsKKyAgICAgICAgdGVybWluYXRlU3BlY3VsYXRpdmVF
eGVjdXRpb24oVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIDAsIGRpcmVjdGlvbik7CiAgICAg
ICAgIHJldHVybkZvcm1hdCA9IERhdGFGb3JtYXRJbnRlZ2VyOwogICAgICAgICByZXR1cm4gYWxs
b2NhdGUoKTsKICAgICB9CiAKLSAgICBTcGVjdWxhdGVkVHlwZSB0eXBlID0gbV9zdGF0ZS5mb3JO
b2RlKG5vZGVJbmRleCkubV90eXBlOwotICAgIE5vZGUmIG5vZGUgPSBhdChub2RlSW5kZXgpOwot
ICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIgPSBub2RlLnZpcnR1YWxSZWdpc3Rl
cigpOworICAgIFNwZWN1bGF0ZWRUeXBlIHR5cGUgPSBtX3N0YXRlLmZvck5vZGUobm9kZSkubV90
eXBlOworICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIgPSBub2RlLT52aXJ0dWFs
UmVnaXN0ZXIoKTsKICAgICBHZW5lcmF0aW9uSW5mbyYgaW5mbyA9IG1fZ2VuZXJhdGlvbkluZm9b
dmlydHVhbFJlZ2lzdGVyXTsKIAogICAgIHN3aXRjaCAoaW5mby5yZWdpc3RlckZvcm1hdCgpKSB7
CiAgICAgY2FzZSBEYXRhRm9ybWF0Tm9uZTogewogCi0gICAgICAgIGlmIChub2RlLmhhc0NvbnN0
YW50KCkpIHsKLSAgICAgICAgICAgIEFTU0VSVChpc0ludDMyQ29uc3RhbnQobm9kZUluZGV4KSk7
CisgICAgICAgIGlmIChub2RlLT5oYXNDb25zdGFudCgpKSB7CisgICAgICAgICAgICBBU1NFUlQo
aXNJbnQzMkNvbnN0YW50KG5vZGUpKTsKICAgICAgICAgICAgIEdQUlJlZyBncHIgPSBhbGxvY2F0
ZSgpOwotICAgICAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6SW1tMzIodmFsdWVP
ZkludDMyQ29uc3RhbnQobm9kZUluZGV4KSksIGdwcik7CisgICAgICAgICAgICBtX2ppdC5tb3Zl
KE1hY3JvQXNzZW1ibGVyOjpJbW0zMih2YWx1ZU9mSW50MzJDb25zdGFudChub2RlKSksIGdwcik7
CiAgICAgICAgICAgICBtX2dwcnMucmV0YWluKGdwciwgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9y
ZGVyQ29uc3RhbnQpOwogICAgICAgICAgICAgaW5mby5maWxsSW50ZWdlcigqbV9zdHJlYW0sIGdw
cik7CiAgICAgICAgICAgICByZXR1cm5Gb3JtYXQgPSBEYXRhRm9ybWF0SW50ZWdlcjsKQEAgLTEx
MjIsNyArMTExNSw3IEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUludEkK
IAogICAgICAgICAvLyBJZiB3ZSBrbm93IHRoaXMgd2FzIHNwaWxsZWQgYXMgYW4gaW50ZWdlciB3
ZSBjYW4gZmlsbCB3aXRob3V0IGNoZWNraW5nLgogICAgICAgICBpZiAoIWlzSW50MzJTcGVjdWxh
dGlvbih0eXBlKSkKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1
ZVNvdXJjZShKSVRDb21waWxlcjo6YWRkcmVzc0Zvcih2aXJ0dWFsUmVnaXN0ZXIpKSwgbm9kZUlu
ZGV4LCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIEpJVENvbXBpbGVy
Ojp0YWdGb3IodmlydHVhbFJlZ2lzdGVyKSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkludDMyVGFn
KSksIGRpcmVjdGlvbik7CisgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpT
VmFsdWVTb3VyY2UoSklUQ29tcGlsZXI6OmFkZHJlc3NGb3IodmlydHVhbFJlZ2lzdGVyKSksIG5v
ZGUsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgSklUQ29tcGlsZXI6
OnRhZ0Zvcih2aXJ0dWFsUmVnaXN0ZXIpLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcp
KSwgZGlyZWN0aW9uKTsKIAogICAgICAgICBHUFJSZWcgZ3ByID0gYWxsb2NhdGUoKTsKICAgICAg
ICAgbV9qaXQubG9hZDMyKEpJVENvbXBpbGVyOjpwYXlsb2FkRm9yKHZpcnR1YWxSZWdpc3Rlciks
IGdwcik7CkBAIC0xMTQwLDcgKzExMzMsNyBAQCBHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxT
cGVjdWxhdGVJbnRJCiAgICAgICAgIG1fZ3Bycy5sb2NrKHRhZ0dQUik7CiAgICAgICAgIG1fZ3By
cy5sb2NrKHBheWxvYWRHUFIpOwogICAgICAgICBpZiAoIWlzSW50MzJTcGVjdWxhdGlvbih0eXBl
KSkKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3ModGFn
R1BSLCBwYXlsb2FkR1BSKSwgbm9kZUluZGV4LCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxl
cjo6Tm90RXF1YWwsIHRhZ0dQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkludDMyVGFnKSksIGRp
cmVjdGlvbik7CisgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVS
ZWdzKHRhZ0dQUiwgcGF5bG9hZEdQUiksIG5vZGUsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1i
bGVyOjpOb3RFcXVhbCwgdGFnR1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpKSwg
ZGlyZWN0aW9uKTsKICAgICAgICAgbV9ncHJzLnVubG9jayh0YWdHUFIpOwogICAgICAgICBtX2dw
cnMucmVsZWFzZSh0YWdHUFIpOwogICAgICAgICBtX2dwcnMucmVsZWFzZShwYXlsb2FkR1BSKTsK
QEAgLTExNzMsNDYgKzExNjYsNDUgQEAgR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3Vs
YXRlSW50SQogICAgIH0KIH0KIAotR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRl
SW50KE5vZGVJbmRleCBub2RlSW5kZXgsIERhdGFGb3JtYXQmIHJldHVybkZvcm1hdCwgU3BlY3Vs
YXRpb25EaXJlY3Rpb24gZGlyZWN0aW9uKQorR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3Bl
Y3VsYXRlSW50KE5vZGUqIG5vZGUsIERhdGFGb3JtYXQmIHJldHVybkZvcm1hdCwgU3BlY3VsYXRp
b25EaXJlY3Rpb24gZGlyZWN0aW9uKQogewotICAgIHJldHVybiBmaWxsU3BlY3VsYXRlSW50SW50
ZXJuYWw8ZmFsc2U+KG5vZGVJbmRleCwgcmV0dXJuRm9ybWF0LCBkaXJlY3Rpb24pOworICAgIHJl
dHVybiBmaWxsU3BlY3VsYXRlSW50SW50ZXJuYWw8ZmFsc2U+KG5vZGUsIHJldHVybkZvcm1hdCwg
ZGlyZWN0aW9uKTsKIH0KIAotR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlSW50
U3RyaWN0KE5vZGVJbmRleCBub2RlSW5kZXgpCitHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxT
cGVjdWxhdGVJbnRTdHJpY3QoTm9kZSogbm9kZSkKIHsKICAgICBEYXRhRm9ybWF0IG11c3RCZURh
dGFGb3JtYXRJbnRlZ2VyOwotICAgIEdQUlJlZyByZXN1bHQgPSBmaWxsU3BlY3VsYXRlSW50SW50
ZXJuYWw8dHJ1ZT4obm9kZUluZGV4LCBtdXN0QmVEYXRhRm9ybWF0SW50ZWdlciwgQmFja3dhcmRT
cGVjdWxhdGlvbik7CisgICAgR1BSUmVnIHJlc3VsdCA9IGZpbGxTcGVjdWxhdGVJbnRJbnRlcm5h
bDx0cnVlPihub2RlLCBtdXN0QmVEYXRhRm9ybWF0SW50ZWdlciwgQmFja3dhcmRTcGVjdWxhdGlv
bik7CiAgICAgQVNTRVJUKG11c3RCZURhdGFGb3JtYXRJbnRlZ2VyID09IERhdGFGb3JtYXRJbnRl
Z2VyKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1GUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZp
bGxTcGVjdWxhdGVEb3VibGUoTm9kZUluZGV4IG5vZGVJbmRleCwgU3BlY3VsYXRpb25EaXJlY3Rp
b24gZGlyZWN0aW9uKQorRlBSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlRG91Ymxl
KE5vZGUqIG5vZGUsIFNwZWN1bGF0aW9uRGlyZWN0aW9uIGRpcmVjdGlvbikKIHsKICNpZiBERkdf
RU5BQkxFKERFQlVHX1ZFUkJPU0UpCi0gICAgZGF0YUxvZ0YoIlNwZWNEb3VibGVAJWQgICAiLCBu
b2RlSW5kZXgpOworICAgIGRhdGFMb2dGKCJTcGVjRG91YmxlQCVkICAgIiwgbm9kZS0+aW5kZXgo
KSk7CiAjZW5kaWYKLSAgICBpZiAoaXNLbm93bk5vdE51bWJlcihub2RlSW5kZXgpKSB7Ci0gICAg
ICAgIHRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVn
cygpLCBOb05vZGUsIGRpcmVjdGlvbik7CisgICAgaWYgKGlzS25vd25Ob3ROdW1iZXIobm9kZSkp
IHsKKyAgICAgICAgdGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oVW5jb3VudGFibGUsIEpT
VmFsdWVSZWdzKCksIDAsIGRpcmVjdGlvbik7CiAgICAgICAgIHJldHVybiBmcHJBbGxvY2F0ZSgp
OwogICAgIH0KIAotICAgIFNwZWN1bGF0ZWRUeXBlIHR5cGUgPSBtX3N0YXRlLmZvck5vZGUobm9k
ZUluZGV4KS5tX3R5cGU7Ci0gICAgTm9kZSYgbm9kZSA9IGF0KG5vZGVJbmRleCk7Ci0gICAgVmly
dHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciA9IG5vZGUudmlydHVhbFJlZ2lzdGVyKCk7Cisg
ICAgU3BlY3VsYXRlZFR5cGUgdHlwZSA9IG1fc3RhdGUuZm9yTm9kZShub2RlKS5tX3R5cGU7Cisg
ICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciA9IG5vZGUtPnZpcnR1YWxSZWdpc3Rl
cigpOwogICAgIEdlbmVyYXRpb25JbmZvJiBpbmZvID0gbV9nZW5lcmF0aW9uSW5mb1t2aXJ0dWFs
UmVnaXN0ZXJdOwogCiAgICAgaWYgKGluZm8ucmVnaXN0ZXJGb3JtYXQoKSA9PSBEYXRhRm9ybWF0
Tm9uZSkgewogCi0gICAgICAgIGlmIChub2RlLmhhc0NvbnN0YW50KCkpIHsKLSAgICAgICAgICAg
IGlmIChpc0ludDMyQ29uc3RhbnQobm9kZUluZGV4KSkgeworICAgICAgICBpZiAobm9kZS0+aGFz
Q29uc3RhbnQoKSkgeworICAgICAgICAgICAgaWYgKGlzSW50MzJDb25zdGFudChub2RlKSkgewog
ICAgICAgICAgICAgICAgIEdQUlJlZyBncHIgPSBhbGxvY2F0ZSgpOwotICAgICAgICAgICAgICAg
IG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OkltbTMyKHZhbHVlT2ZJbnQzMkNvbnN0YW50KG5v
ZGVJbmRleCkpLCBncHIpOworICAgICAgICAgICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJs
ZXI6OkltbTMyKHZhbHVlT2ZJbnQzMkNvbnN0YW50KG5vZGUpKSwgZ3ByKTsKICAgICAgICAgICAg
ICAgICBtX2dwcnMucmV0YWluKGdwciwgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVyQ29uc3Rh
bnQpOwogICAgICAgICAgICAgICAgIGluZm8uZmlsbEludGVnZXIoKm1fc3RyZWFtLCBncHIpOwog
ICAgICAgICAgICAgICAgIHVubG9jayhncHIpOwotICAgICAgICAgICAgfSBlbHNlIGlmIChpc051
bWJlckNvbnN0YW50KG5vZGVJbmRleCkpIHsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNOdW1i
ZXJDb25zdGFudChub2RlKSkgewogICAgICAgICAgICAgICAgIEZQUlJlZyBmcHIgPSBmcHJBbGxv
Y2F0ZSgpOwotICAgICAgICAgICAgICAgIG1faml0LmxvYWREb3VibGUoYWRkcmVzc09mRG91Ymxl
Q29uc3RhbnQobm9kZUluZGV4KSwgZnByKTsKKyAgICAgICAgICAgICAgICBtX2ppdC5sb2FkRG91
YmxlKGFkZHJlc3NPZkRvdWJsZUNvbnN0YW50KG5vZGUpLCBmcHIpOwogICAgICAgICAgICAgICAg
IG1fZnBycy5yZXRhaW4oZnByLCB2aXJ0dWFsUmVnaXN0ZXIsIFNwaWxsT3JkZXJDb25zdGFudCk7
CiAgICAgICAgICAgICAgICAgaW5mby5maWxsRG91YmxlKCptX3N0cmVhbSwgZnByKTsKICAgICAg
ICAgICAgICAgICByZXR1cm4gZnByOwpAQCAtMTIzNSw3ICsxMjI3LDcgQEAgRlBSUmVnIFNwZWN1
bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlRG91YgogICAgICAgICAgICAgaWYgKHNwaWxsRm9ybWF0
ICE9IERhdGFGb3JtYXRKU0ludGVnZXIgJiYgc3BpbGxGb3JtYXQgIT0gRGF0YUZvcm1hdEludGVn
ZXIpIHsKICAgICAgICAgICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBpc0ludGVnZXIgPSBtX2pp
dC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIEpJVENvbXBpbGVyOjp0YWdGb3Iodmly
dHVhbFJlZ2lzdGVyKSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkludDMyVGFnKSk7CiAgICAgICAg
ICAgICAgICAgaWYgKCFpc051bWJlclNwZWN1bGF0aW9uKHR5cGUpKQotICAgICAgICAgICAgICAg
ICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVTb3VyY2UoSklUQ29tcGlsZXI6
OmFkZHJlc3NGb3IodmlydHVhbFJlZ2lzdGVyKSksIG5vZGVJbmRleCwgbV9qaXQuYnJhbmNoMzIo
TWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgSklUQ29tcGlsZXI6OnRhZ0Zvcih2aXJ0dWFs
UmVnaXN0ZXIpLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6TG93ZXN0VGFnKSksIGRpcmVjdGlvbik7
CisgICAgICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVNv
dXJjZShKSVRDb21waWxlcjo6YWRkcmVzc0Zvcih2aXJ0dWFsUmVnaXN0ZXIpKSwgbm9kZSwgbV9q
aXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgSklUQ29tcGlsZXI6OnRh
Z0Zvcih2aXJ0dWFsUmVnaXN0ZXIpLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6TG93ZXN0VGFnKSks
IGRpcmVjdGlvbik7CiAgICAgICAgICAgICAgICAgbV9qaXQubG9hZERvdWJsZShKSVRDb21waWxl
cjo6YWRkcmVzc0Zvcih2aXJ0dWFsUmVnaXN0ZXIpLCBmcHIpOwogICAgICAgICAgICAgICAgIGhh
c1VuYm94ZWREb3VibGUgPSBtX2ppdC5qdW1wKCk7CiAKQEAgLTEyNzAsNyArMTI2Miw3IEBAIEZQ
UlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZURvdWIKICAgICAgICAgICAgIEZQUlRl
bXBvcmFyeSBzY3JhdGNoKHRoaXMpOwogICAgICAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgaXNJ
bnRlZ2VyID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCB0YWdHUFIsIFRy
dXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZykpOwogICAgICAgICAgICAgaWYgKCFpc051bWJl
clNwZWN1bGF0aW9uKHR5cGUpKQotICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFk
VHlwZSwgSlNWYWx1ZVJlZ3ModGFnR1BSLCBwYXlsb2FkR1BSKSwgbm9kZUluZGV4LCBtX2ppdC5i
cmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCB0YWdHUFIsIFRydXN0ZWRJbW0z
MihKU1ZhbHVlOjpMb3dlc3RUYWcpKSwgZGlyZWN0aW9uKTsKKyAgICAgICAgICAgICAgICBzcGVj
dWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKHRhZ0dQUiwgcGF5bG9hZEdQUiksIG5v
ZGUsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHRhZ0dQUiwg
VHJ1c3RlZEltbTMyKEpTVmFsdWU6Okxvd2VzdFRhZykpLCBkaXJlY3Rpb24pOwogICAgICAgICAg
ICAgdW5ib3hEb3VibGUodGFnR1BSLCBwYXlsb2FkR1BSLCBmcHIsIHNjcmF0Y2guZnByKCkpOwog
ICAgICAgICAgICAgaGFzVW5ib3hlZERvdWJsZSA9IG1faml0Lmp1bXAoKTsKICAgICAgICAgICAg
IGlzSW50ZWdlci5saW5rKCZtX2ppdCk7CkBAIC0xMzIxLDI2ICsxMzEzLDI1IEBAIEZQUlJlZyBT
cGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZURvdWIKICAgICB9CiB9CiAKLUdQUlJlZyBTcGVj
dWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUNlbGwoTm9kZUluZGV4IG5vZGVJbmRleCwgU3BlY3Vs
YXRpb25EaXJlY3Rpb24gZGlyZWN0aW9uKQorR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3Bl
Y3VsYXRlQ2VsbChOb2RlKiBub2RlLCBTcGVjdWxhdGlvbkRpcmVjdGlvbiBkaXJlY3Rpb24pCiB7
CiAjaWYgREZHX0VOQUJMRShERUJVR19WRVJCT1NFKQotICAgIGRhdGFMb2dGKCJTcGVjQ2VsbEAl
ZCAgICIsIG5vZGVJbmRleCk7CisgICAgZGF0YUxvZ0YoIlNwZWNDZWxsQCVkICAgIiwgbm9kZS0+
aW5kZXgoKSk7CiAjZW5kaWYKLSAgICBpZiAoaXNLbm93bk5vdENlbGwobm9kZUluZGV4KSkgewot
ICAgICAgICB0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihVbmNvdW50YWJsZSwgSlNWYWx1
ZVJlZ3MoKSwgTm9Ob2RlLCBkaXJlY3Rpb24pOworICAgIGlmIChpc0tub3duTm90Q2VsbChub2Rl
KSkgeworICAgICAgICB0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihVbmNvdW50YWJsZSwg
SlNWYWx1ZVJlZ3MoKSwgMCwgZGlyZWN0aW9uKTsKICAgICAgICAgcmV0dXJuIGFsbG9jYXRlKCk7
CiAgICAgfQogCi0gICAgU3BlY3VsYXRlZFR5cGUgdHlwZSA9IG1fc3RhdGUuZm9yTm9kZShub2Rl
SW5kZXgpLm1fdHlwZTsKLSAgICBOb2RlJiBub2RlID0gYXQobm9kZUluZGV4KTsKLSAgICBWaXJ0
dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyID0gbm9kZS52aXJ0dWFsUmVnaXN0ZXIoKTsKKyAg
ICBTcGVjdWxhdGVkVHlwZSB0eXBlID0gbV9zdGF0ZS5mb3JOb2RlKG5vZGUpLm1fdHlwZTsKKyAg
ICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyID0gbm9kZS0+dmlydHVhbFJlZ2lzdGVy
KCk7CiAgICAgR2VuZXJhdGlvbkluZm8mIGluZm8gPSBtX2dlbmVyYXRpb25JbmZvW3ZpcnR1YWxS
ZWdpc3Rlcl07CiAKICAgICBzd2l0Y2ggKGluZm8ucmVnaXN0ZXJGb3JtYXQoKSkgewogICAgIGNh
c2UgRGF0YUZvcm1hdE5vbmU6IHsKIAotICAgICAgICBpZiAobm9kZS5oYXNDb25zdGFudCgpKSB7
Ci0gICAgICAgICAgICBKU1ZhbHVlIGpzVmFsdWUgPSB2YWx1ZU9mSlNDb25zdGFudChub2RlSW5k
ZXgpOworICAgICAgICBpZiAobm9kZS0+aGFzQ29uc3RhbnQoKSkgeworICAgICAgICAgICAgSlNW
YWx1ZSBqc1ZhbHVlID0gdmFsdWVPZkpTQ29uc3RhbnQobm9kZSk7CiAgICAgICAgICAgICBBU1NF
UlQoanNWYWx1ZS5pc0NlbGwoKSk7CiAgICAgICAgICAgICBHUFJSZWcgZ3ByID0gYWxsb2NhdGUo
KTsKICAgICAgICAgICAgIG1fZ3Bycy5yZXRhaW4oZ3ByLCB2aXJ0dWFsUmVnaXN0ZXIsIFNwaWxs
T3JkZXJDb25zdGFudCk7CkBAIC0xMzUxLDcgKzEzNDIsNyBAQCBHUFJSZWcgU3BlY3VsYXRpdmVK
SVQ6OmZpbGxTcGVjdWxhdGVDZWxsCiAKICAgICAgICAgQVNTRVJUKChpbmZvLnNwaWxsRm9ybWF0
KCkgJiBEYXRhRm9ybWF0SlMpIHx8IGluZm8uc3BpbGxGb3JtYXQoKSA9PSBEYXRhRm9ybWF0Q2Vs
bCk7CiAgICAgICAgIGlmICghaXNDZWxsU3BlY3VsYXRpb24odHlwZSkpCi0gICAgICAgICAgICBz
cGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVTb3VyY2UoSklUQ29tcGlsZXI6OmFkZHJl
c3NGb3IodmlydHVhbFJlZ2lzdGVyKSksIG5vZGVJbmRleCwgbV9qaXQuYnJhbmNoMzIoTWFjcm9B
c3NlbWJsZXI6Ok5vdEVxdWFsLCBKSVRDb21waWxlcjo6dGFnRm9yKHZpcnR1YWxSZWdpc3Rlciks
IFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSksIGRpcmVjdGlvbik7CisgICAgICAgICAg
ICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVTb3VyY2UoSklUQ29tcGlsZXI6OmFk
ZHJlc3NGb3IodmlydHVhbFJlZ2lzdGVyKSksIG5vZGUsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNz
ZW1ibGVyOjpOb3RFcXVhbCwgSklUQ29tcGlsZXI6OnRhZ0Zvcih2aXJ0dWFsUmVnaXN0ZXIpLCBU
cnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZykpLCBkaXJlY3Rpb24pOwogICAgICAgICBHUFJS
ZWcgZ3ByID0gYWxsb2NhdGUoKTsKICAgICAgICAgbV9qaXQubG9hZDMyKEpJVENvbXBpbGVyOjpw
YXlsb2FkRm9yKHZpcnR1YWxSZWdpc3RlciksIGdwcik7CiAgICAgICAgIG1fZ3Bycy5yZXRhaW4o
Z3ByLCB2aXJ0dWFsUmVnaXN0ZXIsIFNwaWxsT3JkZXJTcGlsbGVkKTsKQEAgLTEzNzIsNyArMTM2
Myw3IEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUNlbGwKICAgICAgICAg
bV9ncHJzLmxvY2sodGFnR1BSKTsKICAgICAgICAgbV9ncHJzLmxvY2socGF5bG9hZEdQUik7CiAg
ICAgICAgIGlmICghaXNDZWxsU3BlY3VsYXRpb24odHlwZSkpCi0gICAgICAgICAgICBzcGVjdWxh
dGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKHRhZ0dQUiwgcGF5bG9hZEdQUiksIG5vZGVJ
bmRleCwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCB0YWdHUFIsIFRy
dXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSksIGRpcmVjdGlvbik7CisgICAgICAgICAgICBz
cGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKHRhZ0dQUiwgcGF5bG9hZEdQUiks
IG5vZGUsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgdGFnR1BSLCBU
cnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZykpLCBkaXJlY3Rpb24pOwogICAgICAgICBtX2dw
cnMudW5sb2NrKHRhZ0dQUik7CiAgICAgICAgIG1fZ3Bycy5yZWxlYXNlKHRhZ0dQUik7CiAgICAg
ICAgIG1fZ3Bycy5yZWxlYXNlKHBheWxvYWRHUFIpOwpAQCAtMTM5NiwyNiArMTM4NywyNSBAQCBH
UFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVDZWxsCiAgICAgfQogfQogCi1HUFJS
ZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVCb29sZWFuKE5vZGVJbmRleCBub2RlSW5k
ZXgsIFNwZWN1bGF0aW9uRGlyZWN0aW9uIGRpcmVjdGlvbikKK0dQUlJlZyBTcGVjdWxhdGl2ZUpJ
VDo6ZmlsbFNwZWN1bGF0ZUJvb2xlYW4oTm9kZSogbm9kZSwgU3BlY3VsYXRpb25EaXJlY3Rpb24g
ZGlyZWN0aW9uKQogewogI2lmIERGR19FTkFCTEUoREVCVUdfVkVSQk9TRSkKLSAgICBkYXRhTG9n
RigiU3BlY0Jvb2xAJWQgICAiLCBub2RlSW5kZXgpOworICAgIGRhdGFMb2dGKCJTcGVjQm9vbEAl
ZCAgICIsIG5vZGUtPmluZGV4KCkpOwogI2VuZGlmCi0gICAgU3BlY3VsYXRlZFR5cGUgdHlwZSA9
IG1fc3RhdGUuZm9yTm9kZShub2RlSW5kZXgpLm1fdHlwZTsKLSAgICBOb2RlJiBub2RlID0gbV9q
aXQuZ3JhcGgoKVtub2RlSW5kZXhdOwotICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0
ZXIgPSBub2RlLnZpcnR1YWxSZWdpc3RlcigpOworICAgIFNwZWN1bGF0ZWRUeXBlIHR5cGUgPSBt
X3N0YXRlLmZvck5vZGUobm9kZSkubV90eXBlOworICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFs
UmVnaXN0ZXIgPSBub2RlLT52aXJ0dWFsUmVnaXN0ZXIoKTsKICAgICBHZW5lcmF0aW9uSW5mbyYg
aW5mbyA9IG1fZ2VuZXJhdGlvbkluZm9bdmlydHVhbFJlZ2lzdGVyXTsKLSAgICBpZiAoKG5vZGUu
aGFzQ29uc3RhbnQoKSAmJiAhdmFsdWVPZkpTQ29uc3RhbnQobm9kZUluZGV4KS5pc0Jvb2xlYW4o
KSkKKyAgICBpZiAoKG5vZGUtPmhhc0NvbnN0YW50KCkgJiYgIXZhbHVlT2ZKU0NvbnN0YW50KG5v
ZGUpLmlzQm9vbGVhbigpKQogICAgICAgICB8fCAhKGluZm8uaXNKU0Jvb2xlYW4oKSB8fCBpbmZv
LmlzVW5rbm93bkpTKCkpKSB7Ci0gICAgICAgIHRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9u
KFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIGRpcmVjdGlvbik7CisgICAgICAg
IHRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygp
LCAwLCBkaXJlY3Rpb24pOwogICAgICAgICByZXR1cm4gYWxsb2NhdGUoKTsKICAgICB9CiAKICAg
ICBzd2l0Y2ggKGluZm8ucmVnaXN0ZXJGb3JtYXQoKSkgewogICAgIGNhc2UgRGF0YUZvcm1hdE5v
bmU6IHsKIAotICAgICAgICBpZiAobm9kZS5oYXNDb25zdGFudCgpKSB7Ci0gICAgICAgICAgICBK
U1ZhbHVlIGpzVmFsdWUgPSB2YWx1ZU9mSlNDb25zdGFudChub2RlSW5kZXgpOworICAgICAgICBp
ZiAobm9kZS0+aGFzQ29uc3RhbnQoKSkgeworICAgICAgICAgICAgSlNWYWx1ZSBqc1ZhbHVlID0g
dmFsdWVPZkpTQ29uc3RhbnQobm9kZSk7CiAgICAgICAgICAgICBBU1NFUlQoanNWYWx1ZS5pc0Jv
b2xlYW4oKSk7CiAgICAgICAgICAgICBHUFJSZWcgZ3ByID0gYWxsb2NhdGUoKTsKICAgICAgICAg
ICAgIG1fZ3Bycy5yZXRhaW4oZ3ByLCB2aXJ0dWFsUmVnaXN0ZXIsIFNwaWxsT3JkZXJDb25zdGFu
dCk7CkBAIC0xNDI3LDcgKzE0MTcsNyBAQCBHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVj
dWxhdGVCb29sCiAgICAgICAgIEFTU0VSVCgoaW5mby5zcGlsbEZvcm1hdCgpICYgRGF0YUZvcm1h
dEpTKSB8fCBpbmZvLnNwaWxsRm9ybWF0KCkgPT0gRGF0YUZvcm1hdEJvb2xlYW4pOwogCiAgICAg
ICAgIGlmICghaXNCb29sZWFuU3BlY3VsYXRpb24odHlwZSkpCi0gICAgICAgICAgICBzcGVjdWxh
dGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVTb3VyY2UoSklUQ29tcGlsZXI6OmFkZHJlc3NGb3Io
dmlydHVhbFJlZ2lzdGVyKSksIG5vZGVJbmRleCwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJs
ZXI6Ok5vdEVxdWFsLCBKSVRDb21waWxlcjo6dGFnRm9yKHZpcnR1YWxSZWdpc3RlciksIFRydXN0
ZWRJbW0zMihKU1ZhbHVlOjpCb29sZWFuVGFnKSksIGRpcmVjdGlvbik7CisgICAgICAgICAgICBz
cGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVTb3VyY2UoSklUQ29tcGlsZXI6OmFkZHJl
c3NGb3IodmlydHVhbFJlZ2lzdGVyKSksIG5vZGUsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1i
bGVyOjpOb3RFcXVhbCwgSklUQ29tcGlsZXI6OnRhZ0Zvcih2aXJ0dWFsUmVnaXN0ZXIpLCBUcnVz
dGVkSW1tMzIoSlNWYWx1ZTo6Qm9vbGVhblRhZykpLCBkaXJlY3Rpb24pOwogCiAgICAgICAgIEdQ
UlJlZyBncHIgPSBhbGxvY2F0ZSgpOwogICAgICAgICBtX2ppdC5sb2FkMzIoSklUQ29tcGlsZXI6
OnBheWxvYWRGb3IodmlydHVhbFJlZ2lzdGVyKSwgZ3ByKTsKQEAgLTE0NDksNyArMTQzOSw3IEBA
IEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUJvb2wKICAgICAgICAgbV9ncHJz
LmxvY2sodGFnR1BSKTsKICAgICAgICAgbV9ncHJzLmxvY2socGF5bG9hZEdQUik7CiAgICAgICAg
IGlmICghaXNCb29sZWFuU3BlY3VsYXRpb24odHlwZSkpCi0gICAgICAgICAgICBzcGVjdWxhdGlv
bkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKHRhZ0dQUiwgcGF5bG9hZEdQUiksIG5vZGVJbmRl
eCwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCB0YWdHUFIsIFRydXN0
ZWRJbW0zMihKU1ZhbHVlOjpCb29sZWFuVGFnKSksIGRpcmVjdGlvbik7CisgICAgICAgICAgICBz
cGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKHRhZ0dQUiwgcGF5bG9hZEdQUiks
IG5vZGUsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgdGFnR1BSLCBU
cnVzdGVkSW1tMzIoSlNWYWx1ZTo6Qm9vbGVhblRhZykpLCBkaXJlY3Rpb24pOwogCiAgICAgICAg
IG1fZ3Bycy51bmxvY2sodGFnR1BSKTsKICAgICAgICAgbV9ncHJzLnJlbGVhc2UodGFnR1BSKTsK
QEAgLTE0OTIsMjEgKzE0ODIsMjEgQEAgSklUQ29tcGlsZXI6Okp1bXAgU3BlY3VsYXRpdmVKSVQ6
OmNvbnZlcgogICAgIHJldHVybiBub3ROdW1iZXI7CiB9CiAKLXZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGVPYmplY3RFcXVhbGl0eShOb2RlJiBub2RlKQordm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZU9iamVjdEVxdWFsaXR5KE5vZGUqIG5vZGUpCiB7Ci0gICAgU3BlY3VsYXRlQ2VsbE9w
ZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwotICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5k
IG9wMih0aGlzLCBub2RlLmNoaWxkMigpKTsKKyAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBvcDEo
dGhpcywgbm9kZS0+Y2hpbGQxKCkpOworICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIG9wMih0aGlz
LCBub2RlLT5jaGlsZDIoKSk7CiAgICAgR1BSUmVnIG9wMUdQUiA9IG9wMS5ncHIoKTsKICAgICBH
UFJSZWcgb3AyR1BSID0gb3AyLmdwcigpOwogICAgIAotICAgIGlmIChtX2ppdC5ncmFwaCgpLmds
b2JhbE9iamVjdEZvcihub2RlLmNvZGVPcmlnaW4pLT5tYXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0
Y2hwb2ludCgpLT5pc1N0aWxsVmFsaWQoKSkgewotICAgICAgICBtX2ppdC5ncmFwaCgpLmdsb2Jh
bE9iamVjdEZvcihub2RlLmNvZGVPcmlnaW4pLT5tYXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hw
b2ludCgpLT5hZGQoc3BlY3VsYXRpb25XYXRjaHBvaW50KCkpOyAKLSAgICAgICAgc3BlY3VsYXRp
b25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChvcDFHUFIpLCBub2Rl
LmNoaWxkMSgpLCAKKyAgICBpZiAobV9qaXQuZ3JhcGgoKS5nbG9iYWxPYmplY3RGb3Iobm9kZS0+
Y29kZU9yaWdpbiktPm1hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50KCktPmlzU3RpbGxW
YWxpZCgpKSB7CisgICAgICAgIG1faml0LmdyYXBoKCkuZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPmNv
ZGVPcmlnaW4pLT5tYXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2ludCgpLT5hZGQoc3BlY3Vs
YXRpb25XYXRjaHBvaW50KCkpOyAKKyAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBK
U1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChvcDFHUFIpLCBub2RlLT5jaGlsZDEoKSwgCiAgICAg
ICAgICAgICBtX2ppdC5icmFuY2hQdHIoCiAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
OkVxdWFsLCAKICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhvcDFHUFIs
IEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCAKICAgICAgICAgICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPnN0cmluZ1N0cnVjdHVyZS5n
ZXQoKSkpKTsKLSAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlU291cmNl
Ojp1bmJveGVkQ2VsbChvcDJHUFIpLCBub2RlLmNoaWxkMigpLCAKKyAgICAgICAgc3BlY3VsYXRp
b25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChvcDJHUFIpLCBub2Rl
LT5jaGlsZDIoKSwgCiAgICAgICAgICAgICBtX2ppdC5icmFuY2hQdHIoCiAgICAgICAgICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCAKICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhvcDJHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCAKQEAgLTE1MTYs
MjQgKzE1MDYsMjQgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU9iamVjdEVxdWFsaQog
ICAgICAgICBHUFJSZWcgc3RydWN0dXJlR1BSID0gc3RydWN0dXJlLmdwcigpOwogCiAgICAgICAg
IG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mob3AxR1BSLCBKU0NlbGw6OnN0
cnVjdHVyZU9mZnNldCgpKSwgc3RydWN0dXJlR1BSKTsKLSAgICAgICAgc3BlY3VsYXRpb25DaGVj
ayhCYWRUeXBlLCBKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChvcDFHUFIpLCBub2RlLmNoaWxk
MSgpLCAKKyAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlU291cmNlOjp1
bmJveGVkQ2VsbChvcDFHUFIpLCBub2RlLT5jaGlsZDEoKSwgCiAgICAgICAgICAgICBtX2ppdC5i
cmFuY2hQdHIoCiAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCAKICAgICAg
ICAgICAgICAgICBzdHJ1Y3R1cmVHUFIsIAogICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+c3RyaW5nU3RydWN0dXJlLmdldCgp
KSkpOwotICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVTb3VyY2U6OnVu
Ym94ZWRDZWxsKG9wMUdQUiksIG5vZGUuY2hpbGQxKCksIAorICAgICAgICBzcGVjdWxhdGlvbkNo
ZWNrKEJhZFR5cGUsIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKG9wMUdQUiksIG5vZGUtPmNo
aWxkMSgpLCAKICAgICAgICAgICAgIG1faml0LmJyYW5jaFRlc3Q4KAogICAgICAgICAgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCAKICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhzdHJ1Y3R1cmVHUFIsIFN0cnVjdHVyZTo6dHlwZUluZm9GbGFnc09mZnNldCgp
KSwgCiAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihNYXNxdWVy
YWRlc0FzVW5kZWZpbmVkKSkpOwogCiAgICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3Mob3AyR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgc3RydWN0dXJl
R1BSKTsKLSAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlU291cmNlOjp1
bmJveGVkQ2VsbChvcDJHUFIpLCBub2RlLmNoaWxkMigpLCAKKyAgICAgICAgc3BlY3VsYXRpb25D
aGVjayhCYWRUeXBlLCBKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChvcDJHUFIpLCBub2RlLT5j
aGlsZDIoKSwgCiAgICAgICAgICAgICBtX2ppdC5icmFuY2hQdHIoCiAgICAgICAgICAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCAKICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmVHUFIsIAog
ICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2Jh
bERhdGEoKS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOwotICAgICAgICBzcGVjdWxhdGlvbkNo
ZWNrKEJhZFR5cGUsIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKG9wMkdQUiksIG5vZGUuY2hp
bGQyKCksIAorICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVTb3VyY2U6
OnVuYm94ZWRDZWxsKG9wMkdQUiksIG5vZGUtPmNoaWxkMigpLCAKICAgICAgICAgICAgIG1faml0
LmJyYW5jaFRlc3Q4KAogICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCAK
ICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdHJ1Y3R1cmVHUFIsIFN0
cnVjdHVyZTo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgCkBAIC0xNTUwLDEyICsxNTQwLDExIEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVPYmplY3RFcXVhbGkKICAgICBtX2ppdC5tb3Zl
KFRydXN0ZWRJbW0zMigwKSwgcmVzdWx0UGF5bG9hZEdQUik7CiAgICAgZG9uZS5saW5rKCZtX2pp
dCk7CiAKLSAgICBib29sZWFuUmVzdWx0KHJlc3VsdFBheWxvYWRHUFIsIG1fY29tcGlsZUluZGV4
KTsKKyAgICBib29sZWFuUmVzdWx0KHJlc3VsdFBheWxvYWRHUFIsIG5vZGUpOwogfQogCiB2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlT2JqZWN0VG9PYmplY3RPck90aGVyRXF1YWxpdHkoRWRn
ZSBsZWZ0Q2hpbGQsIEVkZ2UgcmlnaHRDaGlsZCkKIHsKLSAgICBOb2RlJiBsZWZ0Tm9kZSA9IG1f
aml0LmdyYXBoKClbbGVmdENoaWxkLmluZGV4KCldOwogICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5k
IG9wMSh0aGlzLCBsZWZ0Q2hpbGQpOwogICAgIEpTVmFsdWVPcGVyYW5kIG9wMih0aGlzLCByaWdo
dENoaWxkKTsKICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwpAQCAtMTU2NSw5ICsxNTU0
LDkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU9iamVjdFRvT2JqZQogICAgIEdQUlJl
ZyBvcDJQYXlsb2FkR1BSID0gb3AyLnBheWxvYWRHUFIoKTsKICAgICBHUFJSZWcgcmVzdWx0R1BS
ID0gcmVzdWx0LmdwcigpOwogICAgIAotICAgIGlmIChtX2ppdC5ncmFwaCgpLmdsb2JhbE9iamVj
dEZvcihsZWZ0Tm9kZS5jb2RlT3JpZ2luKS0+bWFzcXVlcmFkZXNBc1VuZGVmaW5lZFdhdGNocG9p
bnQoKS0+aXNTdGlsbFZhbGlkKCkpIHsgCi0gICAgICAgIG1faml0LmdyYXBoKCkuZ2xvYmFsT2Jq
ZWN0Rm9yKGxlZnROb2RlLmNvZGVPcmlnaW4pLT5tYXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hw
b2ludCgpLT5hZGQoc3BlY3VsYXRpb25XYXRjaHBvaW50KCkpOwotICAgICAgICBzcGVjdWxhdGlv
bkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKG9wMUdQUiksIGxlZnRD
aGlsZC5pbmRleCgpLCAKKyAgICBpZiAobV9qaXQuZ3JhcGgoKS5nbG9iYWxPYmplY3RGb3IobV9j
dXJyZW50Tm9kZS0+Y29kZU9yaWdpbiktPm1hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50
KCktPmlzU3RpbGxWYWxpZCgpKSB7IAorICAgICAgICBtX2ppdC5ncmFwaCgpLmdsb2JhbE9iamVj
dEZvcihtX2N1cnJlbnROb2RlLT5jb2RlT3JpZ2luKS0+bWFzcXVlcmFkZXNBc1VuZGVmaW5lZFdh
dGNocG9pbnQoKS0+YWRkKHNwZWN1bGF0aW9uV2F0Y2hwb2ludCgpKTsKKyAgICAgICAgc3BlY3Vs
YXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChvcDFHUFIpLCBs
ZWZ0Q2hpbGQsIAogICAgICAgICAgICAgbV9qaXQuYnJhbmNoUHRyKAogICAgICAgICAgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgCiAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3Mob3AxR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgCkBAIC0xNTc3LDEy
ICsxNTY2LDEyIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVPYmplY3RUb09iamUKICAg
ICAgICAgR1BSUmVnIHN0cnVjdHVyZUdQUiA9IHN0cnVjdHVyZS5ncHIoKTsKIAogICAgICAgICBt
X2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKG9wMUdQUiwgSlNDZWxsOjpzdHJ1
Y3R1cmVPZmZzZXQoKSksIHN0cnVjdHVyZUdQUik7Ci0gICAgICAgIHNwZWN1bGF0aW9uQ2hlY2so
QmFkVHlwZSwgSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwob3AxR1BSKSwgbGVmdENoaWxkLmlu
ZGV4KCksIAorICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVTb3VyY2U6
OnVuYm94ZWRDZWxsKG9wMUdQUiksIGxlZnRDaGlsZCwgCiAgICAgICAgICAgICBtX2ppdC5icmFu
Y2hQdHIoCiAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLAogICAgICAgICAg
ICAgICAgIHN0cnVjdHVyZUdQUiwKICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1
c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpKTsK
LSAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlU291cmNlOjp1bmJveGVk
Q2VsbChvcDFHUFIpLCBsZWZ0Q2hpbGQuaW5kZXgoKSwgCisgICAgICAgIHNwZWN1bGF0aW9uQ2hl
Y2soQmFkVHlwZSwgSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwob3AxR1BSKSwgbGVmdENoaWxk
LCAKICAgICAgICAgICAgIG1faml0LmJyYW5jaFRlc3Q4KAogICAgICAgICAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpOb25aZXJvLCAKICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhzdHJ1Y3R1cmVHUFIsIFN0cnVjdHVyZTo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgCkBA
IC0xNTk2LDkgKzE1ODUsOSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlT2JqZWN0VG9P
YmplCiAgICAgICAgIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgb3Ay
VGFnR1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZykpOwogICAgIAogICAgIC8vIFdl
IGtub3cgdGhhdCB3aXRoaW4gdGhpcyBicmFuY2gsIHJpZ2h0Q2hpbGQgbXVzdCBiZSBhIGNlbGwu
Ci0gICAgaWYgKG1faml0LmdyYXBoKCkuZ2xvYmFsT2JqZWN0Rm9yKGxlZnROb2RlLmNvZGVPcmln
aW4pLT5tYXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2ludCgpLT5pc1N0aWxsVmFsaWQoKSkg
eyAKLSAgICAgICAgbV9qaXQuZ3JhcGgoKS5nbG9iYWxPYmplY3RGb3IobGVmdE5vZGUuY29kZU9y
aWdpbiktPm1hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50KCktPmFkZChzcGVjdWxhdGlv
bldhdGNocG9pbnQoKSk7Ci0gICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1
ZVJlZ3Mob3AyVGFnR1BSLCBvcDJQYXlsb2FkR1BSKSwgcmlnaHRDaGlsZC5pbmRleCgpLCAKKyAg
ICBpZiAobV9qaXQuZ3JhcGgoKS5nbG9iYWxPYmplY3RGb3IobV9jdXJyZW50Tm9kZS0+Y29kZU9y
aWdpbiktPm1hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50KCktPmlzU3RpbGxWYWxpZCgp
KSB7IAorICAgICAgICBtX2ppdC5ncmFwaCgpLmdsb2JhbE9iamVjdEZvcihtX2N1cnJlbnROb2Rl
LT5jb2RlT3JpZ2luKS0+bWFzcXVlcmFkZXNBc1VuZGVmaW5lZFdhdGNocG9pbnQoKS0+YWRkKHNw
ZWN1bGF0aW9uV2F0Y2hwb2ludCgpKTsKKyAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBl
LCBKU1ZhbHVlUmVncyhvcDJUYWdHUFIsIG9wMlBheWxvYWRHUFIpLCByaWdodENoaWxkLCAKICAg
ICAgICAgICAgIG1faml0LmJyYW5jaFB0cigKICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6RXF1YWwsIAogICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKG9wMlBh
eWxvYWRHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCAKQEAgLTE2MDgsMTIgKzE1OTcs
MTIgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU9iamVjdFRvT2JqZQogICAgICAgICBH
UFJSZWcgc3RydWN0dXJlR1BSID0gc3RydWN0dXJlLmdwcigpOwogCiAgICAgICAgIG1faml0Lmxv
YWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mob3AyUGF5bG9hZEdQUiwgSlNDZWxsOjpzdHJ1
Y3R1cmVPZmZzZXQoKSksIHN0cnVjdHVyZUdQUik7Ci0gICAgICAgIHNwZWN1bGF0aW9uQ2hlY2so
QmFkVHlwZSwgSlNWYWx1ZVJlZ3Mob3AyVGFnR1BSLCBvcDJQYXlsb2FkR1BSKSwgcmlnaHRDaGls
ZC5pbmRleCgpLCAKKyAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVn
cyhvcDJUYWdHUFIsIG9wMlBheWxvYWRHUFIpLCByaWdodENoaWxkLCAKICAgICAgICAgICAgIG1f
aml0LmJyYW5jaFB0cigKICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsCiAg
ICAgICAgICAgICAgICAgc3RydWN0dXJlR1BSLAogICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+c3RyaW5nU3RydWN0dXJlLmdl
dCgpKSkpOwotICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKG9w
MlRhZ0dQUiwgb3AyUGF5bG9hZEdQUiksIHJpZ2h0Q2hpbGQuaW5kZXgoKSwgCisgICAgICAgIHNw
ZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3Mob3AyVGFnR1BSLCBvcDJQYXlsb2Fk
R1BSKSwgcmlnaHRDaGlsZCwgCiAgICAgICAgICAgICBtX2ppdC5icmFuY2hUZXN0OCgKICAgICAg
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgCiAgICAgICAgICAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RydWN0dXJlR1BSLCBTdHJ1Y3R1cmU6OnR5cGVJbmZvRmxh
Z3NPZmZzZXQoKSksIApAQCAtMTYzNSw3ICsxNjI0LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZU9iamVjdFRvT2JqZQogICAgICAgICBtX2ppdC5vcjMyKFRydXN0ZWRJbW0zMigxKSwg
cmVzdWx0R1BSKTsKICAgICAgICAgCiAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCi0gICAgICAg
ICAgICBCYWRUeXBlLCBKU1ZhbHVlUmVncyhvcDJUYWdHUFIsIG9wMlBheWxvYWRHUFIpLCByaWdo
dENoaWxkLmluZGV4KCksCisgICAgICAgICAgICBCYWRUeXBlLCBKU1ZhbHVlUmVncyhvcDJUYWdH
UFIsIG9wMlBheWxvYWRHUFIpLCByaWdodENoaWxkLAogICAgICAgICAgICAgbV9qaXQuYnJhbmNo
MzIoCiAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCByZXN1bHRHUFIs
CiAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpO
dWxsVGFnKSkpOwpAQCAtMTY0OCwxNCArMTYzNywxMyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlT2JqZWN0VG9PYmplCiAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tMzIoMSksIHJlc3Vs
dEdQUik7CiAgICAgZG9uZS5saW5rKCZtX2ppdCk7CiAgICAgCi0gICAgYm9vbGVhblJlc3VsdChy
ZXN1bHRHUFIsIG1fY29tcGlsZUluZGV4KTsKKyAgICBib29sZWFuUmVzdWx0KHJlc3VsdEdQUiwg
bV9jdXJyZW50Tm9kZSk7CiB9CiAKLXZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQZWVwSG9s
ZU9iamVjdFRvT2JqZWN0T3JPdGhlckVxdWFsaXR5KEVkZ2UgbGVmdENoaWxkLCBFZGdlIHJpZ2h0
Q2hpbGQsIE5vZGVJbmRleCBicmFuY2hOb2RlSW5kZXgpCit2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlUGVlcEhvbGVPYmplY3RUb09iamVjdE9yT3RoZXJFcXVhbGl0eShFZGdlIGxlZnRDaGls
ZCwgRWRnZSByaWdodENoaWxkLCBOb2RlKiBicmFuY2hOb2RlKQogewotICAgIE5vZGUmIGJyYW5j
aE5vZGUgPSBhdChicmFuY2hOb2RlSW5kZXgpOwotICAgIEJsb2NrSW5kZXggdGFrZW4gPSBicmFu
Y2hOb2RlLnRha2VuQmxvY2tJbmRleCgpOwotICAgIEJsb2NrSW5kZXggbm90VGFrZW4gPSBicmFu
Y2hOb2RlLm5vdFRha2VuQmxvY2tJbmRleCgpOworICAgIEJsb2NrSW5kZXggdGFrZW4gPSBicmFu
Y2hOb2RlLT50YWtlbkJsb2NrSW5kZXgoKTsKKyAgICBCbG9ja0luZGV4IG5vdFRha2VuID0gYnJh
bmNoTm9kZS0+bm90VGFrZW5CbG9ja0luZGV4KCk7CiAgICAgCiAgICAgU3BlY3VsYXRlQ2VsbE9w
ZXJhbmQgb3AxKHRoaXMsIGxlZnRDaGlsZCk7CiAgICAgSlNWYWx1ZU9wZXJhbmQgb3AyKHRoaXMs
IHJpZ2h0Q2hpbGQpOwpAQCAtMTY2Niw5ICsxNjU0LDkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZVBlZXBIb2xlT2JqZQogICAgIEdQUlJlZyBvcDJQYXlsb2FkR1BSID0gb3AyLnBheWxv
YWRHUFIoKTsKICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwogICAgIAotICAg
IGlmIChtX2ppdC5ncmFwaCgpLmdsb2JhbE9iamVjdEZvcihicmFuY2hOb2RlLmNvZGVPcmlnaW4p
LT5tYXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2ludCgpLT5pc1N0aWxsVmFsaWQoKSkgewot
ICAgICAgICBtX2ppdC5ncmFwaCgpLmdsb2JhbE9iamVjdEZvcihicmFuY2hOb2RlLmNvZGVPcmln
aW4pLT5tYXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2ludCgpLT5hZGQoc3BlY3VsYXRpb25X
YXRjaHBvaW50KCkpOwotICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVT
b3VyY2U6OnVuYm94ZWRDZWxsKG9wMUdQUiksIGxlZnRDaGlsZC5pbmRleCgpLCAKKyAgICBpZiAo
bV9qaXQuZ3JhcGgoKS5nbG9iYWxPYmplY3RGb3IobV9jdXJyZW50Tm9kZS0+Y29kZU9yaWdpbikt
Pm1hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50KCktPmlzU3RpbGxWYWxpZCgpKSB7Cisg
ICAgICAgIG1faml0LmdyYXBoKCkuZ2xvYmFsT2JqZWN0Rm9yKG1fY3VycmVudE5vZGUtPmNvZGVP
cmlnaW4pLT5tYXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2ludCgpLT5hZGQoc3BlY3VsYXRp
b25XYXRjaHBvaW50KCkpOworICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFs
dWVTb3VyY2U6OnVuYm94ZWRDZWxsKG9wMUdQUiksIGxlZnRDaGlsZCwKICAgICAgICAgICAgIG1f
aml0LmJyYW5jaFB0cigKICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIAog
ICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKG9wMUdQUiwgSlNDZWxsOjpz
dHJ1Y3R1cmVPZmZzZXQoKSksIApAQCAtMTY3OCwxMiArMTY2NiwxMiBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlUGVlcEhvbGVPYmplCiAgICAgICAgIEdQUlJlZyBzdHJ1Y3R1cmVHUFIg
PSBzdHJ1Y3R1cmUuZ3ByKCk7CiAKICAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhvcDFHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBzdHJ1Y3R1cmVH
UFIpOwotICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVTb3VyY2U6OnVu
Ym94ZWRDZWxsKG9wMUdQUiksIGxlZnRDaGlsZC5pbmRleCgpLCAKKyAgICAgICAgc3BlY3VsYXRp
b25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChvcDFHUFIpLCBsZWZ0
Q2hpbGQsCiAgICAgICAgICAgICBtX2ppdC5icmFuY2hQdHIoCiAgICAgICAgICAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6OkVxdWFsLCAKICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmVHUFIsIAogICAg
ICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERh
dGEoKS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOwotICAgICAgICBzcGVjdWxhdGlvbkNoZWNr
KEJhZFR5cGUsIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKG9wMUdQUiksIGxlZnRDaGlsZC5p
bmRleCgpLCAKKyAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlU291cmNl
Ojp1bmJveGVkQ2VsbChvcDFHUFIpLCBsZWZ0Q2hpbGQsCiAgICAgICAgICAgICBtX2ppdC5icmFu
Y2hUZXN0OCgKICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgCiAgICAg
ICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RydWN0dXJlR1BSLCBTdHJ1Y3R1
cmU6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIApAQCAtMTY5Niw5ICsxNjg0LDkgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVBlZXBIb2xlT2JqZQogICAgICAgICBtX2ppdC5icmFuY2gz
MihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIG9wMlRhZ0dQUiwgVHJ1c3RlZEltbTMyKEpTVmFs
dWU6OkNlbGxUYWcpKTsKICAgICAKICAgICAvLyBXZSBrbm93IHRoYXQgd2l0aGluIHRoaXMgYnJh
bmNoLCByaWdodENoaWxkIG11c3QgYmUgYSBjZWxsLgotICAgIGlmIChtX2ppdC5ncmFwaCgpLmds
b2JhbE9iamVjdEZvcihicmFuY2hOb2RlLmNvZGVPcmlnaW4pLT5tYXNxdWVyYWRlc0FzVW5kZWZp
bmVkV2F0Y2hwb2ludCgpLT5pc1N0aWxsVmFsaWQoKSkgewotICAgICAgICBtX2ppdC5ncmFwaCgp
Lmdsb2JhbE9iamVjdEZvcihicmFuY2hOb2RlLmNvZGVPcmlnaW4pLT5tYXNxdWVyYWRlc0FzVW5k
ZWZpbmVkV2F0Y2hwb2ludCgpLT5hZGQoc3BlY3VsYXRpb25XYXRjaHBvaW50KCkpOwotICAgICAg
ICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKG9wMlRhZ0dQUiwgb3AyUGF5
bG9hZEdQUiksIHJpZ2h0Q2hpbGQuaW5kZXgoKSwgCisgICAgaWYgKG1faml0LmdyYXBoKCkuZ2xv
YmFsT2JqZWN0Rm9yKG1fY3VycmVudE5vZGUtPmNvZGVPcmlnaW4pLT5tYXNxdWVyYWRlc0FzVW5k
ZWZpbmVkV2F0Y2hwb2ludCgpLT5pc1N0aWxsVmFsaWQoKSkgeworICAgICAgICBtX2ppdC5ncmFw
aCgpLmdsb2JhbE9iamVjdEZvcihtX2N1cnJlbnROb2RlLT5jb2RlT3JpZ2luKS0+bWFzcXVlcmFk
ZXNBc1VuZGVmaW5lZFdhdGNocG9pbnQoKS0+YWRkKHNwZWN1bGF0aW9uV2F0Y2hwb2ludCgpKTsK
KyAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyhvcDJUYWdHUFIs
IG9wMlBheWxvYWRHUFIpLCByaWdodENoaWxkLAogICAgICAgICAgICAgbV9qaXQuYnJhbmNoUHRy
KAogICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgCiAgICAgICAgICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mob3AyUGF5bG9hZEdQUiwgSlNDZWxsOjpzdHJ1Y3R1
cmVPZmZzZXQoKSksIApAQCAtMTcwOCwxMiArMTY5NiwxMiBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlUGVlcEhvbGVPYmplCiAgICAgICAgIEdQUlJlZyBzdHJ1Y3R1cmVHUFIgPSBzdHJ1
Y3R1cmUuZ3ByKCk7CiAKICAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhvcDJQYXlsb2FkR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgc3RydWN0dXJl
R1BSKTsKLSAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyhvcDJU
YWdHUFIsIG9wMlBheWxvYWRHUFIpLCByaWdodENoaWxkLmluZGV4KCksIAorICAgICAgICBzcGVj
dWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKG9wMlRhZ0dQUiwgb3AyUGF5bG9hZEdQ
UiksIHJpZ2h0Q2hpbGQsCiAgICAgICAgICAgICBtX2ppdC5icmFuY2hQdHIoCiAgICAgICAgICAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCAKICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmVH
UFIsIAogICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0
Lmdsb2JhbERhdGEoKS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOwotICAgICAgICBzcGVjdWxh
dGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKG9wMlRhZ0dQUiwgb3AyUGF5bG9hZEdQUiks
IHJpZ2h0Q2hpbGQuaW5kZXgoKSwgCisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwg
SlNWYWx1ZVJlZ3Mob3AyVGFnR1BSLCBvcDJQYXlsb2FkR1BSKSwgcmlnaHRDaGlsZCwKICAgICAg
ICAgICAgIG1faml0LmJyYW5jaFRlc3Q4KAogICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpOb25aZXJvLCAKICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdHJ1
Y3R1cmVHUFIsIFN0cnVjdHVyZTo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgCkBAIC0xNzM3LDcg
KzE3MjUsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUGVlcEhvbGVPYmplCiAgICAg
ICAgIG1faml0Lm9yMzIoVHJ1c3RlZEltbTMyKDEpLCByZXN1bHRHUFIpOwogICAgICAgICAKICAg
ICAgICAgc3BlY3VsYXRpb25DaGVjaygKLSAgICAgICAgICAgIEJhZFR5cGUsIEpTVmFsdWVSZWdz
KG9wMlRhZ0dQUiwgb3AyUGF5bG9hZEdQUiksIHJpZ2h0Q2hpbGQuaW5kZXgoKSwKKyAgICAgICAg
ICAgIEJhZFR5cGUsIEpTVmFsdWVSZWdzKG9wMlRhZ0dQUiwgb3AyUGF5bG9hZEdQUiksIHJpZ2h0
Q2hpbGQsCiAgICAgICAgICAgICBtX2ppdC5icmFuY2gzMigKICAgICAgICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6Tm90RXF1YWwsIHJlc3VsdEdQUiwKICAgICAgICAgICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6VHJ1c3RlZEltbTMyKEpTVmFsdWU6Ok51bGxUYWcpKSk7CkBAIC0xNzQ2LDIyICsx
NzM0LDIyIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQZWVwSG9sZU9iamUKICAgICBq
dW1wKG5vdFRha2VuKTsKIH0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUludGVnZXJD
b21wYXJlKE5vZGUmIG5vZGUsIE1hY3JvQXNzZW1ibGVyOjpSZWxhdGlvbmFsQ29uZGl0aW9uIGNv
bmRpdGlvbikKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVJbnRlZ2VyQ29tcGFyZShOb2Rl
KiBub2RlLCBNYWNyb0Fzc2VtYmxlcjo6UmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24pCiB7
Ci0gICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwot
ICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMih0aGlzLCBub2RlLmNoaWxkMigpKTsKKyAg
ICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDEodGhpcywgbm9kZS0+Y2hpbGQxKCkpOworICAg
IFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMih0aGlzLCBub2RlLT5jaGlsZDIoKSk7CiAgICAg
R1BSVGVtcG9yYXJ5IHJlc3VsdFBheWxvYWQodGhpcyk7CiAgICAgCiAgICAgbV9qaXQuY29tcGFy
ZTMyKGNvbmRpdGlvbiwgb3AxLmdwcigpLCBvcDIuZ3ByKCksIHJlc3VsdFBheWxvYWQuZ3ByKCkp
OwogICAgIAogICAgIC8vIElmIHdlIGFkZCBhIERhdGFGb3JtYXRCb29sLCB3ZSBzaG91bGQgdXNl
IGl0IGhlcmUuCi0gICAgYm9vbGVhblJlc3VsdChyZXN1bHRQYXlsb2FkLmdwcigpLCBtX2NvbXBp
bGVJbmRleCk7CisgICAgYm9vbGVhblJlc3VsdChyZXN1bHRQYXlsb2FkLmdwcigpLCBub2RlKTsK
IH0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZURvdWJsZUNvbXBhcmUoTm9kZSYgbm9k
ZSwgTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUNvbmRpdGlvbiBjb25kaXRpb24pCit2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlRG91YmxlQ29tcGFyZShOb2RlKiBub2RlLCBNYWNyb0Fzc2VtYmxl
cjo6RG91YmxlQ29uZGl0aW9uIGNvbmRpdGlvbikKIHsKLSAgICBTcGVjdWxhdGVEb3VibGVPcGVy
YW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKLSAgICBTcGVjdWxhdGVEb3VibGVPcGVyYW5k
IG9wMih0aGlzLCBub2RlLmNoaWxkMigpKTsKKyAgICBTcGVjdWxhdGVEb3VibGVPcGVyYW5kIG9w
MSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CisgICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCBvcDIo
dGhpcywgbm9kZS0+Y2hpbGQyKCkpOwogICAgIEdQUlRlbXBvcmFyeSByZXN1bHRQYXlsb2FkKHRo
aXMpOwogICAgIAogICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbTMyKDEpLCByZXN1bHRQYXlsb2Fk
LmdwcigpKTsKQEAgLTE3NjksMTMgKzE3NTcsMTMgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZURvdWJsZUNvbXBhcgogICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbTMyKDApLCByZXN1bHRQ
YXlsb2FkLmdwcigpKTsKICAgICB0cnVlQ2FzZS5saW5rKCZtX2ppdCk7CiAgICAgCi0gICAgYm9v
bGVhblJlc3VsdChyZXN1bHRQYXlsb2FkLmdwcigpLCBtX2NvbXBpbGVJbmRleCk7CisgICAgYm9v
bGVhblJlc3VsdChyZXN1bHRQYXlsb2FkLmdwcigpLCBub2RlKTsKIH0KIAotdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZVZhbHVlQWRkKE5vZGUmIG5vZGUpCit2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlVmFsdWVBZGQoTm9kZSogbm9kZSkKIHsKLSAgICBKU1ZhbHVlT3BlcmFuZCBvcDEo
dGhpcywgbm9kZS5jaGlsZDEoKSk7Ci0gICAgSlNWYWx1ZU9wZXJhbmQgb3AyKHRoaXMsIG5vZGUu
Y2hpbGQyKCkpOworICAgIEpTVmFsdWVPcGVyYW5kIG9wMSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7
CisgICAgSlNWYWx1ZU9wZXJhbmQgb3AyKHRoaXMsIG5vZGUtPmNoaWxkMigpKTsKIAogICAgIEdQ
UlJlZyBvcDFUYWdHUFIgPSBvcDEudGFnR1BSKCk7CiAgICAgR1BSUmVnIG9wMVBheWxvYWRHUFIg
PSBvcDEucGF5bG9hZEdQUigpOwpAQCAtMTc4NiwxMiArMTc3NCwxMiBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlVmFsdWVBZGQoTm9kCiAgICAgCiAgICAgR1BSUmVzdWx0MiByZXN1bHRU
YWcodGhpcyk7CiAgICAgR1BSUmVzdWx0IHJlc3VsdFBheWxvYWQodGhpcyk7Ci0gICAgaWYgKGlz
S25vd25Ob3ROdW1iZXIobm9kZS5jaGlsZDEoKS5pbmRleCgpKSB8fCBpc0tub3duTm90TnVtYmVy
KG5vZGUuY2hpbGQyKCkuaW5kZXgoKSkpCisgICAgaWYgKGlzS25vd25Ob3ROdW1iZXIobm9kZS0+
Y2hpbGQxKCkubm9kZSgpKSB8fCBpc0tub3duTm90TnVtYmVyKG5vZGUtPmNoaWxkMigpLm5vZGUo
KSkpCiAgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVmFsdWVBZGROb3ROdW1iZXIsIHJl
c3VsdFRhZy5ncHIoKSwgcmVzdWx0UGF5bG9hZC5ncHIoKSwgb3AxVGFnR1BSLCBvcDFQYXlsb2Fk
R1BSLCBvcDJUYWdHUFIsIG9wMlBheWxvYWRHUFIpOwogICAgIGVsc2UKICAgICAgICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25WYWx1ZUFkZCwgcmVzdWx0VGFnLmdwcigpLCByZXN1bHRQYXlsb2Fk
LmdwcigpLCBvcDFUYWdHUFIsIG9wMVBheWxvYWRHUFIsIG9wMlRhZ0dQUiwgb3AyUGF5bG9hZEdQ
Uik7CiAgICAgCi0gICAganNWYWx1ZVJlc3VsdChyZXN1bHRUYWcuZ3ByKCksIHJlc3VsdFBheWxv
YWQuZ3ByKCksIG1fY29tcGlsZUluZGV4KTsKKyAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFRhZy5n
cHIoKSwgcmVzdWx0UGF5bG9hZC5ncHIoKSwgbm9kZSk7CiB9CiAKIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVOb25TdHJpbmdDZWxsT3JPdGhlckxvZ2ljYWxOb3QoRWRnZSBub2RlVXNlLCBi
b29sIG5lZWRTcGVjdWxhdGlvbkNoZWNrKQpAQCAtMTgwMyw4ICsxNzkxLDggQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZU5vblN0cmluZ0NlbAogICAgIEdQUlJlZyByZXN1bHRQYXlsb2Fk
R1BSID0gcmVzdWx0UGF5bG9hZC5ncHIoKTsKICAgICAKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVt
cCBub3RDZWxsID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCB2YWx1
ZVRhZ0dQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpKTsKLSAgICBpZiAobV9qaXQu
Z3JhcGgoKS5nbG9iYWxPYmplY3RGb3IobV9qaXQuZ3JhcGgoKVtub2RlVXNlLmluZGV4KCldLmNv
ZGVPcmlnaW4pLT5tYXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2ludCgpLT5pc1N0aWxsVmFs
aWQoKSkgewotICAgICAgICBtX2ppdC5ncmFwaCgpLmdsb2JhbE9iamVjdEZvcihtX2ppdC5ncmFw
aCgpW25vZGVVc2UuaW5kZXgoKV0uY29kZU9yaWdpbiktPm1hc3F1ZXJhZGVzQXNVbmRlZmluZWRX
YXRjaHBvaW50KCktPmFkZChzcGVjdWxhdGlvbldhdGNocG9pbnQoKSk7CisgICAgaWYgKG1faml0
LmdyYXBoKCkuZ2xvYmFsT2JqZWN0Rm9yKG1fY3VycmVudE5vZGUtPmNvZGVPcmlnaW4pLT5tYXNx
dWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2ludCgpLT5pc1N0aWxsVmFsaWQoKSkgeworICAgICAg
ICBtX2ppdC5ncmFwaCgpLmdsb2JhbE9iamVjdEZvcihtX2N1cnJlbnROb2RlLT5jb2RlT3JpZ2lu
KS0+bWFzcXVlcmFkZXNBc1VuZGVmaW5lZFdhdGNocG9pbnQoKS0+YWRkKHNwZWN1bGF0aW9uV2F0
Y2hwb2ludCgpKTsKIAogICAgICAgICBpZiAobmVlZFNwZWN1bGF0aW9uQ2hlY2spIHsKICAgICAg
ICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3ModmFsdWVUYWdHUFIs
IHZhbHVlUGF5bG9hZEdQUiksIG5vZGVVc2UsCkBAIC0xODM3LDcgKzE4MjUsNyBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlTm9uU3RyaW5nQ2VsCiAgICAgICAgICAgICBtX2ppdC5icmFu
Y2hQdHIoCiAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCAKICAgICAgICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdHJ1Y3R1cmVHUFIsIFN0cnVjdHVyZTo6
Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCAKLSAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
VHJ1c3RlZEltbVB0cihtX2ppdC5ncmFwaCgpLmdsb2JhbE9iamVjdEZvcihtX2ppdC5ncmFwaCgp
W25vZGVVc2UuaW5kZXgoKV0uY29kZU9yaWdpbikpKSk7CisgICAgICAgICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ3JhcGgoKS5nbG9iYWxPYmplY3RGb3IobV9j
dXJyZW50Tm9kZS0+Y29kZU9yaWdpbikpKSk7CiAKICAgICAgICAgaXNOb3RNYXNxdWVyYWRlc0Fz
VW5kZWZpbmVkLmxpbmsoJm1faml0KTsKICAgICB9CkBAIC0xODYwLDQzICsxODQ4LDQzIEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVOb25TdHJpbmdDZWwKICAgICAKICAgICBkb25lLmxp
bmsoJm1faml0KTsKICAgICAKLSAgICBib29sZWFuUmVzdWx0KHJlc3VsdFBheWxvYWRHUFIsIG1f
Y29tcGlsZUluZGV4KTsKKyAgICBib29sZWFuUmVzdWx0KHJlc3VsdFBheWxvYWRHUFIsIG1fY3Vy
cmVudE5vZGUpOwogfQogCi12b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlTG9naWNhbE5vdChO
b2RlJiBub2RlKQordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUxvZ2ljYWxOb3QoTm9kZSog
bm9kZSkKIHsKLSAgICBpZiAoYXQobm9kZS5jaGlsZDEoKSkuc2hvdWxkU3BlY3VsYXRlQm9vbGVh
bigpKSB7Ci0gICAgICAgIFNwZWN1bGF0ZUJvb2xlYW5PcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUu
Y2hpbGQxKCkpOworICAgIGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlQm9vbGVh
bigpKSB7CisgICAgICAgIFNwZWN1bGF0ZUJvb2xlYW5PcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUt
PmNoaWxkMSgpKTsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCB2YWx1ZSk7CiAg
ICAgICAgIG1faml0LnhvcjMyKFRydXN0ZWRJbW0zMigxKSwgdmFsdWUuZ3ByKCksIHJlc3VsdC5n
cHIoKSk7Ci0gICAgICAgIGJvb2xlYW5SZXN1bHQocmVzdWx0LmdwcigpLCBtX2NvbXBpbGVJbmRl
eCk7CisgICAgICAgIGJvb2xlYW5SZXN1bHQocmVzdWx0LmdwcigpLCBub2RlKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KLSAgICBpZiAoYXQobm9kZS5jaGlsZDEoKSkuc2hvdWxkU3BlY3VsYXRl
Tm9uU3RyaW5nQ2VsbE9yT3RoZXIoKSkgewotICAgICAgICBjb21waWxlTm9uU3RyaW5nQ2VsbE9y
T3RoZXJMb2dpY2FsTm90KG5vZGUuY2hpbGQxKCksIAotICAgICAgICAgICAgIWlzTm9uU3RyaW5n
Q2VsbE9yT3RoZXJTcGVjdWxhdGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90
eXBlKSk7CisgICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVOb25TdHJpbmdD
ZWxsT3JPdGhlcigpKSB7CisgICAgICAgIGNvbXBpbGVOb25TdHJpbmdDZWxsT3JPdGhlckxvZ2lj
YWxOb3Qobm9kZS0+Y2hpbGQxKCksIAorICAgICAgICAgICAgIWlzTm9uU3RyaW5nQ2VsbE9yT3Ro
ZXJTcGVjdWxhdGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fdHlwZSkpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGlmIChhdChub2RlLmNoaWxkMSgpKS5zaG91bGRT
cGVjdWxhdGVJbnRlZ2VyKCkpIHsKLSAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgdmFs
dWUodGhpcywgbm9kZS5jaGlsZDEoKSk7CisgICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91bGRT
cGVjdWxhdGVJbnRlZ2VyKCkpIHsKKyAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgdmFs
dWUodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0UGF5
bG9hZCh0aGlzLCB2YWx1ZSk7CiAgICAgICAgIG1faml0LmNvbXBhcmUzMihNYWNyb0Fzc2VtYmxl
cjo6RXF1YWwsIHZhbHVlLmdwcigpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDApLCBy
ZXN1bHRQYXlsb2FkLmdwcigpKTsKLSAgICAgICAgYm9vbGVhblJlc3VsdChyZXN1bHRQYXlsb2Fk
LmdwcigpLCBtX2NvbXBpbGVJbmRleCk7CisgICAgICAgIGJvb2xlYW5SZXN1bHQocmVzdWx0UGF5
bG9hZC5ncHIoKSwgbm9kZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgaWYgKGF0KG5v
ZGUuY2hpbGQxKCkpLnNob3VsZFNwZWN1bGF0ZU51bWJlcigpKSB7Ci0gICAgICAgIFNwZWN1bGF0
ZURvdWJsZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS5jaGlsZDEoKSk7CisgICAgaWYgKG5vZGUt
PmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVOdW1iZXIoKSkgeworICAgICAgICBTcGVjdWxhdGVE
b3VibGVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgRlBSVGVt
cG9yYXJ5IHNjcmF0Y2godGhpcyk7CiAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHRQYXlsb2Fk
KHRoaXMpOwogICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW0zMigwKSwgcmVzdWx0UGF5bG9h
ZC5ncHIoKSk7CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG5vblplcm8gPSBtX2ppdC5i
cmFuY2hEb3VibGVOb25aZXJvKHZhbHVlLmZwcigpLCBzY3JhdGNoLmZwcigpKTsKICAgICAgICAg
bV9qaXQubW92ZShUcnVzdGVkSW1tMzIoMSksIHJlc3VsdFBheWxvYWQuZ3ByKCkpOwogICAgICAg
ICBub25aZXJvLmxpbmsoJm1faml0KTsKLSAgICAgICAgYm9vbGVhblJlc3VsdChyZXN1bHRQYXls
b2FkLmdwcigpLCBtX2NvbXBpbGVJbmRleCk7CisgICAgICAgIGJvb2xlYW5SZXN1bHQocmVzdWx0
UGF5bG9hZC5ncHIoKSwgbm9kZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBKU1Zh
bHVlT3BlcmFuZCBhcmcxKHRoaXMsIG5vZGUuY2hpbGQxKCkpOworICAgIEpTVmFsdWVPcGVyYW5k
IGFyZzEodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwogICAgIEdQUlRlbXBvcmFyeSByZXN1bHRQYXls
b2FkKHRoaXMsIGFyZzEsIGZhbHNlKTsKICAgICBHUFJSZWcgYXJnMVRhZ0dQUiA9IGFyZzEudGFn
R1BSKCk7CiAgICAgR1BSUmVnIGFyZzFQYXlsb2FkR1BSID0gYXJnMS5wYXlsb2FkR1BSKCk7CkBA
IC0xOTE0LDcgKzE5MDIsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlTG9naWNhbE5v
dChOCiAgICAgICAgICAgICBhcmcxUGF5bG9hZEdQUikpOwogICAgIAogICAgIG1faml0LnhvcjMy
KFRydXN0ZWRJbW0zMigxKSwgcmVzdWx0UGF5bG9hZEdQUik7Ci0gICAgYm9vbGVhblJlc3VsdChy
ZXN1bHRQYXlsb2FkR1BSLCBtX2NvbXBpbGVJbmRleCwgVXNlQ2hpbGRyZW5DYWxsZWRFeHBsaWNp
dGx5KTsKKyAgICBib29sZWFuUmVzdWx0KHJlc3VsdFBheWxvYWRHUFIsIG5vZGUsIFVzZUNoaWxk
cmVuQ2FsbGVkRXhwbGljaXRseSk7CiB9CiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXROb25T
dHJpbmdDZWxsT3JPdGhlckJyYW5jaChFZGdlIG5vZGVVc2UsIEJsb2NrSW5kZXggdGFrZW4sIEJs
b2NrSW5kZXggbm90VGFrZW4sIGJvb2wgbmVlZFNwZWN1bGF0aW9uQ2hlY2spCkBAIC0xOTI2LDgg
KzE5MTQsOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0Tm9uU3RyaW5nQ2VsbE9yCiAgICAg
R1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOwogICAgIAogICAgIE1hY3JvQXNzZW1i
bGVyOjpKdW1wIG5vdENlbGwgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1
YWwsIHZhbHVlVGFnR1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZykpOwotICAgIGlm
IChtX2ppdC5ncmFwaCgpLmdsb2JhbE9iamVjdEZvcihtX2ppdC5ncmFwaCgpW25vZGVVc2UuaW5k
ZXgoKV0uY29kZU9yaWdpbiktPm1hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50KCktPmlz
U3RpbGxWYWxpZCgpKSB7Ci0gICAgICAgIG1faml0LmdyYXBoKCkuZ2xvYmFsT2JqZWN0Rm9yKG1f
aml0LmdyYXBoKClbbm9kZVVzZS5pbmRleCgpXS5jb2RlT3JpZ2luKS0+bWFzcXVlcmFkZXNBc1Vu
ZGVmaW5lZFdhdGNocG9pbnQoKS0+YWRkKHNwZWN1bGF0aW9uV2F0Y2hwb2ludCgpKTsKKyAgICBp
ZiAobV9qaXQuZ3JhcGgoKS5nbG9iYWxPYmplY3RGb3IobV9jdXJyZW50Tm9kZS0+Y29kZU9yaWdp
biktPm1hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50KCktPmlzU3RpbGxWYWxpZCgpKSB7
CisgICAgICAgIG1faml0LmdyYXBoKCkuZ2xvYmFsT2JqZWN0Rm9yKG1fY3VycmVudE5vZGUtPmNv
ZGVPcmlnaW4pLT5tYXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2ludCgpLT5hZGQoc3BlY3Vs
YXRpb25XYXRjaHBvaW50KCkpOwogCiAgICAgICAgIGlmIChuZWVkU3BlY3VsYXRpb25DaGVjaykg
ewogICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyh2YWx1
ZVRhZ0dQUiwgdmFsdWVQYXlsb2FkR1BSKSwgbm9kZVVzZSwgCkBAIC0xOTQwLDcgKzE5MjgsNyBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0Tm9uU3RyaW5nQ2VsbE9yCiAgICAgICAgIG1faml0
LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3ModmFsdWVQYXlsb2FkR1BSLCBKU0NlbGw6
OnN0cnVjdHVyZU9mZnNldCgpKSwgc2NyYXRjaEdQUik7CiAKICAgICAgICAgaWYgKG5lZWRTcGVj
dWxhdGlvbkNoZWNrKSB7Ci0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpT
VmFsdWVSZWdzKHZhbHVlVGFnR1BSLCB2YWx1ZVBheWxvYWRHUFIpLCBub2RlVXNlLmluZGV4KCks
IAorICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyh2YWx1
ZVRhZ0dQUiwgdmFsdWVQYXlsb2FkR1BSKSwgbm9kZVVzZSwgCiAgICAgICAgICAgICAgICAgbV9q
aXQuYnJhbmNoUHRyKAogICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RXF1YWws
IAogICAgICAgICAgICAgICAgICAgICBzY3JhdGNoR1BSLApAQCAtMTk0OSwxMSArMTkzNywxMSBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0Tm9uU3RyaW5nQ2VsbE9yCiAKICAgICAgICAgSklU
Q29tcGlsZXI6Okp1bXAgaXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gbV9qaXQuYnJhbmNo
VGVzdDgoSklUQ29tcGlsZXI6Olplcm8sIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hH
UFIsIFN0cnVjdHVyZTo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1
ZXJhZGVzQXNVbmRlZmluZWQpKTsKIAotICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUs
IEpTVmFsdWVSZWdzKHZhbHVlVGFnR1BSLCB2YWx1ZVBheWxvYWRHUFIpLCBub2RlVXNlLmluZGV4
KCksIAorICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKHZhbHVl
VGFnR1BSLCB2YWx1ZVBheWxvYWRHUFIpLCBub2RlVXNlLAogICAgICAgICAgICAgbV9qaXQuYnJh
bmNoUHRyKAogICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgCiAgICAgICAg
ICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUiwgU3RydWN0dXJlOjpn
bG9iYWxPYmplY3RPZmZzZXQoKSksIAotICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpU
cnVzdGVkSW1tUHRyKG1faml0LmdyYXBoKCkuZ2xvYmFsT2JqZWN0Rm9yKG1faml0LmdyYXBoKClb
bm9kZVVzZS5pbmRleCgpXS5jb2RlT3JpZ2luKSkpKTsKKyAgICAgICAgICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5ncmFwaCgpLmdsb2JhbE9iamVjdEZvcihtX2N1
cnJlbnROb2RlLT5jb2RlT3JpZ2luKSkpKTsKIAogICAgICAgICBpc05vdE1hc3F1ZXJhZGVzQXNV
bmRlZmluZWQubGluaygmbV9qaXQpOwogICAgIH0KQEAgLTE5NzAsMTYgKzE5NTgsMTYgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdE5vblN0cmluZ0NlbGxPcgogCiAgICAganVtcChub3RUYWtl
bik7CiAgICAgCi0gICAgbm9SZXN1bHQobV9jb21waWxlSW5kZXgpOworICAgIG5vUmVzdWx0KG1f
Y3VycmVudE5vZGUpOwogfQogCi12b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0QnJhbmNoKE5vZGUm
IG5vZGUpCit2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0QnJhbmNoKE5vZGUqIG5vZGUpCiB7Ci0g
ICAgQmxvY2tJbmRleCB0YWtlbiA9IG5vZGUudGFrZW5CbG9ja0luZGV4KCk7Ci0gICAgQmxvY2tJ
bmRleCBub3RUYWtlbiA9IG5vZGUubm90VGFrZW5CbG9ja0luZGV4KCk7CisgICAgQmxvY2tJbmRl
eCB0YWtlbiA9IG5vZGUtPnRha2VuQmxvY2tJbmRleCgpOworICAgIEJsb2NrSW5kZXggbm90VGFr
ZW4gPSBub2RlLT5ub3RUYWtlbkJsb2NrSW5kZXgoKTsKIAotICAgIGlmIChhdChub2RlLmNoaWxk
MSgpKS5zaG91bGRTcGVjdWxhdGVCb29sZWFuKCkpIHsKLSAgICAgICAgU3BlY3VsYXRlQm9vbGVh
bk9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS5jaGlsZDEoKSk7CisgICAgaWYgKG5vZGUtPnNob3Vs
ZFNwZWN1bGF0ZUJvb2xlYW4oKSkgeworICAgICAgICBTcGVjdWxhdGVCb29sZWFuT3BlcmFuZCB2
YWx1ZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpSZXN1
bHRDb25kaXRpb24gY29uZGl0aW9uID0gTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm87CiAKICAgICAg
ICAgaWYgKHRha2VuID09IG5leHRCbG9jaygpKSB7CkBAIC0xOTkyLDEyICsxOTgwLDE4IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRCcmFuY2goTm9kZSYgbm8KICAgICAgICAgYnJhbmNoVGVz
dDMyKGNvbmRpdGlvbiwgdmFsdWUuZ3ByKCksIFRydXN0ZWRJbW0zMigxKSwgdGFrZW4pOwogICAg
ICAgICBqdW1wKG5vdFRha2VuKTsKIAotICAgICAgICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCk7
Ci0gICAgfSBlbHNlIGlmIChhdChub2RlLmNoaWxkMSgpKS5zaG91bGRTcGVjdWxhdGVOb25TdHJp
bmdDZWxsT3JPdGhlcigpKSB7Ci0gICAgICAgIGVtaXROb25TdHJpbmdDZWxsT3JPdGhlckJyYW5j
aChub2RlLmNoaWxkMSgpLCB0YWtlbiwgbm90VGFrZW4sIAotICAgICAgICAgICAgIWlzTm9uU3Ry
aW5nQ2VsbE9yT3RoZXJTcGVjdWxhdGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSku
bV90eXBlKSk7Ci0gICAgfSBlbHNlIGlmIChhdChub2RlLmNoaWxkMSgpKS5zaG91bGRTcGVjdWxh
dGVOdW1iZXIoKSkgewotICAgICAgICBpZiAoYXQobm9kZS5jaGlsZDEoKSkuc2hvdWxkU3BlY3Vs
YXRlSW50ZWdlcigpKSB7CisgICAgICAgIG5vUmVzdWx0KG5vZGUpOworICAgICAgICByZXR1cm47
CisgICAgfQorICAgIAorICAgIGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlTm9u
U3RyaW5nQ2VsbE9yT3RoZXIoKSkgeworICAgICAgICBlbWl0Tm9uU3RyaW5nQ2VsbE9yT3RoZXJC
cmFuY2gobm9kZS0+Y2hpbGQxKCksIHRha2VuLCBub3RUYWtlbiwgCisgICAgICAgICAgICAhaXNO
b25TdHJpbmdDZWxsT3JPdGhlclNwZWN1bGF0aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLT5jaGls
ZDEoKSkubV90eXBlKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgaWYgKG5v
ZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVOdW1iZXIoKSkgeworICAgICAgICBpZiAobm9k
ZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKSkgewogICAgICAgICAgICAgYm9v
bCBpbnZlcnQgPSBmYWxzZTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKHRha2VuID09
IG5leHRCbG9jaygpKSB7CkBAIC0yMDA3LDUzICsyMDAxLDU0IEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmVtaXRCcmFuY2goTm9kZSYgbm8KICAgICAgICAgICAgICAgICBub3RUYWtlbiA9IHRtcDsK
ICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgdmFs
dWUodGhpcywgbm9kZS5jaGlsZDEoKSk7CisgICAgICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3Bl
cmFuZCB2YWx1ZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgICAgICBicmFuY2hUZXN0
MzIoaW52ZXJ0ID8gTWFjcm9Bc3NlbWJsZXI6Olplcm8gOiBNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVy
bywgdmFsdWUuZ3ByKCksIHRha2VuKTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIFNw
ZWN1bGF0ZURvdWJsZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS5jaGlsZDEoKSk7CisgICAgICAg
ICAgICBTcGVjdWxhdGVEb3VibGVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsK
ICAgICAgICAgICAgIEZQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOwogICAgICAgICAgICAgYnJh
bmNoRG91YmxlTm9uWmVybyh2YWx1ZS5mcHIoKSwgc2NyYXRjaC5mcHIoKSwgdGFrZW4pOwogICAg
ICAgICB9CiAgICAgICAgIAogICAgICAgICBqdW1wKG5vdFRha2VuKTsKICAgICAgICAgCi0gICAg
ICAgIG5vUmVzdWx0KG1fY29tcGlsZUluZGV4KTsKLSAgICB9IGVsc2UgewotICAgICAgICBKU1Zh
bHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKLSAgICAgICAgdmFsdWUuZmls
bCgpOwotICAgICAgICBHUFJSZWcgdmFsdWVUYWdHUFIgPSB2YWx1ZS50YWdHUFIoKTsKLSAgICAg
ICAgR1BSUmVnIHZhbHVlUGF5bG9hZEdQUiA9IHZhbHVlLnBheWxvYWRHUFIoKTsKKyAgICAgICAg
bm9SZXN1bHQobm9kZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgSlNWYWx1
ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS0+Y2hpbGQxKCkpOworICAgIHZhbHVlLmZpbGwoKTsK
KyAgICBHUFJSZWcgdmFsdWVUYWdHUFIgPSB2YWx1ZS50YWdHUFIoKTsKKyAgICBHUFJSZWcgdmFs
dWVQYXlsb2FkR1BSID0gdmFsdWUucGF5bG9hZEdQUigpOwogCi0gICAgICAgIEdQUlRlbXBvcmFy
eSByZXN1bHQodGhpcyk7Ci0gICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7
CisgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKKyAgICBHUFJSZWcgcmVzdWx0R1BSID0g
cmVzdWx0LmdwcigpOwogICAgIAotICAgICAgICB1c2Uobm9kZS5jaGlsZDEoKSk7CisgICAgdXNl
KG5vZGUtPmNoaWxkMSgpKTsKICAgICAKLSAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgZmFzdFBh
dGggPSBtX2ppdC5icmFuY2gzMihKSVRDb21waWxlcjo6RXF1YWwsIHZhbHVlVGFnR1BSLCBKSVRD
b21waWxlcjo6VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkludDMyVGFnKSk7Ci0gICAgICAgIEpJVENv
bXBpbGVyOjpKdW1wIHNsb3dQYXRoID0gbV9qaXQuYnJhbmNoMzIoSklUQ29tcGlsZXI6Ok5vdEVx
dWFsLCB2YWx1ZVRhZ0dQUiwgSklUQ29tcGlsZXI6OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpCb29s
ZWFuVGFnKSk7CisgICAgSklUQ29tcGlsZXI6Okp1bXAgZmFzdFBhdGggPSBtX2ppdC5icmFuY2gz
MihKSVRDb21waWxlcjo6RXF1YWwsIHZhbHVlVGFnR1BSLCBKSVRDb21waWxlcjo6VHJ1c3RlZElt
bTMyKEpTVmFsdWU6OkludDMyVGFnKSk7CisgICAgSklUQ29tcGlsZXI6Okp1bXAgc2xvd1BhdGgg
PSBtX2ppdC5icmFuY2gzMihKSVRDb21waWxlcjo6Tm90RXF1YWwsIHZhbHVlVGFnR1BSLCBKSVRD
b21waWxlcjo6VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkJvb2xlYW5UYWcpKTsKIAotICAgICAgICBm
YXN0UGF0aC5saW5rKCZtX2ppdCk7Ci0gICAgICAgIGJyYW5jaFRlc3QzMihKSVRDb21waWxlcjo6
WmVybywgdmFsdWVQYXlsb2FkR1BSLCBub3RUYWtlbik7Ci0gICAgICAgIGp1bXAodGFrZW4sIEZv
cmNlSnVtcCk7CisgICAgZmFzdFBhdGgubGluaygmbV9qaXQpOworICAgIGJyYW5jaFRlc3QzMihK
SVRDb21waWxlcjo6WmVybywgdmFsdWVQYXlsb2FkR1BSLCBub3RUYWtlbik7CisgICAganVtcCh0
YWtlbiwgRm9yY2VKdW1wKTsKIAotICAgICAgICBzbG93UGF0aC5saW5rKCZtX2ppdCk7Ci0gICAg
ICAgIHNpbGVudFNwaWxsQWxsUmVnaXN0ZXJzKHJlc3VsdEdQUik7Ci0gICAgICAgIGNhbGxPcGVy
YXRpb24oZGZnQ29udmVydEpTVmFsdWVUb0Jvb2xlYW4sIHJlc3VsdEdQUiwgdmFsdWVUYWdHUFIs
IHZhbHVlUGF5bG9hZEdQUik7Ci0gICAgICAgIHNpbGVudEZpbGxBbGxSZWdpc3RlcnMocmVzdWx0
R1BSKTsKKyAgICBzbG93UGF0aC5saW5rKCZtX2ppdCk7CisgICAgc2lsZW50U3BpbGxBbGxSZWdp
c3RlcnMocmVzdWx0R1BSKTsKKyAgICBjYWxsT3BlcmF0aW9uKGRmZ0NvbnZlcnRKU1ZhbHVlVG9C
b29sZWFuLCByZXN1bHRHUFIsIHZhbHVlVGFnR1BSLCB2YWx1ZVBheWxvYWRHUFIpOworICAgIHNp
bGVudEZpbGxBbGxSZWdpc3RlcnMocmVzdWx0R1BSKTsKICAgICAKLSAgICAgICAgYnJhbmNoVGVz
dDMyKEpJVENvbXBpbGVyOjpOb25aZXJvLCByZXN1bHRHUFIsIHRha2VuKTsKLSAgICAgICAganVt
cChub3RUYWtlbik7CisgICAgYnJhbmNoVGVzdDMyKEpJVENvbXBpbGVyOjpOb25aZXJvLCByZXN1
bHRHUFIsIHRha2VuKTsKKyAgICBqdW1wKG5vdFRha2VuKTsKICAgICAKLSAgICAgICAgbm9SZXN1
bHQobV9jb21waWxlSW5kZXgsIFVzZUNoaWxkcmVuQ2FsbGVkRXhwbGljaXRseSk7Ci0gICAgfQor
ICAgIG5vUmVzdWx0KG5vZGUsIFVzZUNoaWxkcmVuQ2FsbGVkRXhwbGljaXRseSk7CiB9CiAKIHRl
bXBsYXRlPHR5cGVuYW1lIEJhc2VPcGVyYW5kVHlwZSwgdHlwZW5hbWUgUHJvcGVydHlPcGVyYW5k
VHlwZSwgdHlwZW5hbWUgVmFsdWVPcGVyYW5kVHlwZSwgdHlwZW5hbWUgVGFnVHlwZT4KLXZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDb250aWd1b3VzUHV0QnlWYWwoTm9kZSYgbm9kZSwgQmFz
ZU9wZXJhbmRUeXBlJiBiYXNlLCBQcm9wZXJ0eU9wZXJhbmRUeXBlJiBwcm9wZXJ0eSwgVmFsdWVP
cGVyYW5kVHlwZSYgdmFsdWUsIEdQUlJlZyB2YWx1ZVBheWxvYWRSZWcsIFRhZ1R5cGUgdmFsdWVU
YWcpCit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQ29udGlndW91c1B1dEJ5VmFsKE5vZGUq
IG5vZGUsIEJhc2VPcGVyYW5kVHlwZSYgYmFzZSwgUHJvcGVydHlPcGVyYW5kVHlwZSYgcHJvcGVy
dHksIFZhbHVlT3BlcmFuZFR5cGUmIHZhbHVlLCBHUFJSZWcgdmFsdWVQYXlsb2FkUmVnLCBUYWdU
eXBlIHZhbHVlVGFnKQogewogICAgIEVkZ2UgY2hpbGQ0ID0gbV9qaXQuZ3JhcGgoKS52YXJBcmdD
aGlsZChub2RlLCAzKTsKIAotICAgIEFycmF5TW9kZSBhcnJheU1vZGUgPSBub2RlLmFycmF5TW9k
ZSgpOworICAgIEFycmF5TW9kZSBhcnJheU1vZGUgPSBub2RlLT5hcnJheU1vZGUoKTsKICAgICAK
ICAgICBHUFJSZWcgYmFzZVJlZyA9IGJhc2UuZ3ByKCk7CiAgICAgR1BSUmVnIHByb3BlcnR5UmVn
ID0gcHJvcGVydHkuZ3ByKCk7CkBAIC0yMDYxLDEzICsyMDU2LDEzIEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVDb250aWd1b3VzUHUKICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRo
aXMsIGNoaWxkNCk7CiAgICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigpOwogCi0g
ICAgaWYgKG5vZGUub3AoKSA9PSBQdXRCeVZhbEFsaWFzKSB7CisgICAgaWYgKG5vZGUtPm9wKCkg
PT0gUHV0QnlWYWxBbGlhcykgewogICAgICAgICAvLyBTdG9yZSB0aGUgdmFsdWUgdG8gdGhlIGFy
cmF5LgogICAgICAgICBHUFJSZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIoKTsKICAgICAg
ICAgbV9qaXQuc3RvcmUzMih2YWx1ZVRhZywgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9y
YWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsIE9CSkVDVF9P
RkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy50YWcpKSk7CiAgICAgICAgIG1faml0LnN0b3JlMzIo
dmFsdWVQYXlsb2FkUmVnLCBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHBy
b3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEpT
VmFsdWUsIHUuYXNCaXRzLnBheWxvYWQpKSk7CiAgICAgICAgIAotICAgICAgICBub1Jlc3VsdCht
X2NvbXBpbGVJbmRleCk7CisgICAgICAgIG5vUmVzdWx0KG5vZGUpOwogICAgICAgICByZXR1cm47
CiAgICAgfQogICAgIApAQCAtMjA3NSw3ICsyMDcwLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZUNvbnRpZ3VvdXNQdQogCiAgICAgaWYgKGFycmF5TW9kZS5pc0luQm91bmRzKCkpIHsK
ICAgICAgICAgc3BlY3VsYXRpb25DaGVjaygKLSAgICAgICAgICAgIFN0b3JlVG9Ib2xlT3JPdXRP
ZkJvdW5kcywgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLAorICAgICAgICAgICAgU3RvcmVUb0hvbGVP
ck91dE9mQm91bmRzLCBKU1ZhbHVlUmVncygpLCAwLAogICAgICAgICAgICAgbV9qaXQuYnJhbmNo
MzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgo
KSkpKTsKICAgICB9IGVsc2UgewogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBpbkJvdW5k
cyA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpCZWxvdywgcHJvcGVydHlSZWcsIE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJs
aWNMZW5ndGgoKSkpOwpAQCAtMjA4Myw3ICsyMDc4LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZUNvbnRpZ3VvdXNQdQogICAgICAgICBzbG93Q2FzZSA9IG1faml0LmJyYW5jaDMyKE1h
Y3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhzdG9yYWdlUmVnLCBCdXR0ZXJmbHk6Om9mZnNldE9mVmVjdG9yTGVuZ3RoKCkpKTsK
ICAgICAgICAgCiAgICAgICAgIGlmICghYXJyYXlNb2RlLmlzT3V0T2ZCb3VuZHMoKSkKLSAgICAg
ICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soT3V0T2ZCb3VuZHMsIEpTVmFsdWVSZWdzKCksIE5vTm9k
ZSwgc2xvd0Nhc2UpOworICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhPdXRPZkJvdW5kcywg
SlNWYWx1ZVJlZ3MoKSwgMCwgc2xvd0Nhc2UpOwogICAgICAgICAKICAgICAgICAgbV9qaXQuYWRk
MzIoVHJ1c3RlZEltbTMyKDEpLCBwcm9wZXJ0eVJlZyk7CiAgICAgICAgIG1faml0LnN0b3JlMzIo
cHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEJ1dHRlcmZs
eTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpOwpAQCAtMjEwOCwxMzAgKzIxMDMsMTMwIEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDb250aWd1b3VzUHUKICAgICAgICAgICAgICAgICBO
b1Jlc3VsdCwgYmFzZVJlZywgcHJvcGVydHlSZWcsIHZhbHVlVGFnLCB2YWx1ZVBheWxvYWRSZWcp
KTsKICAgICB9CiAKLSAgICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCwgVXNlQ2hpbGRyZW5DYWxs
ZWRFeHBsaWNpdGx5KTsgICAgCisgICAgbm9SZXN1bHQobm9kZSwgVXNlQ2hpbGRyZW5DYWxsZWRF
eHBsaWNpdGx5KTsgICAgCiB9CiAKLXZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYg
bm9kZSkKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKIHsKLSAgICBO
b2RlVHlwZSBvcCA9IG5vZGUub3AoKTsKKyAgICBOb2RlVHlwZSBvcCA9IG5vZGUtPm9wKCk7CiAK
ICAgICBzd2l0Y2ggKG9wKSB7CiAgICAgY2FzZSBKU0NvbnN0YW50OgotICAgICAgICBpbml0Q29u
c3RhbnRJbmZvKG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAgaW5pdENvbnN0YW50SW5mbyhub2Rl
KTsKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIFBoYW50b21Bcmd1bWVudHM6Ci0gICAgICAg
IGluaXRDb25zdGFudEluZm8obV9jb21waWxlSW5kZXgpOworICAgICAgICBpbml0Q29uc3RhbnRJ
bmZvKG5vZGUpOwogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgV2Vha0pTQ29uc3RhbnQ6Ci0g
ICAgICAgIG1faml0LmFkZFdlYWtSZWZlcmVuY2Uobm9kZS53ZWFrQ29uc3RhbnQoKSk7Ci0gICAg
ICAgIGluaXRDb25zdGFudEluZm8obV9jb21waWxlSW5kZXgpOworICAgICAgICBtX2ppdC5hZGRX
ZWFrUmVmZXJlbmNlKG5vZGUtPndlYWtDb25zdGFudCgpKTsKKyAgICAgICAgaW5pdENvbnN0YW50
SW5mbyhub2RlKTsKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIElkZW50aXR5OiB7CiAgICAg
ICAgIC8vIFRoaXMgY291bGQgYmUgZG9uZSBhIGxvdCBiZXR0ZXIuIFdlIHRha2UgdGhlIGNoZWFw
IHdheSBvdXQgYmVjYXVzZSBJZGVudGl0eQogICAgICAgICAvLyBpcyBvbmx5IGdvaW5nIHRvIHN0
aWNrIGFyb3VuZCBhZnRlciBDU0UgaWYgd2UgaGFkIHByZWRpY3Rpb24gd2VpcmRuZXNzLgotICAg
ICAgICBKU1ZhbHVlT3BlcmFuZCBvcGVyYW5kKHRoaXMsIG5vZGUuY2hpbGQxKCkpOworICAgICAg
ICBKU1ZhbHVlT3BlcmFuZCBvcGVyYW5kKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAg
R1BSVGVtcG9yYXJ5IHJlc3VsdFRhZyh0aGlzKTsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3Vs
dFBheWxvYWQodGhpcyk7CiAgICAgICAgIG1faml0Lm1vdmUob3BlcmFuZC50YWdHUFIoKSwgcmVz
dWx0VGFnLmdwcigpKTsKICAgICAgICAgbV9qaXQubW92ZShvcGVyYW5kLnBheWxvYWRHUFIoKSwg
cmVzdWx0UGF5bG9hZC5ncHIoKSk7Ci0gICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0VGFnLmdw
cigpLCByZXN1bHRQYXlsb2FkLmdwcigpLCBtX2NvbXBpbGVJbmRleCk7CisgICAgICAgIGpzVmFs
dWVSZXN1bHQocmVzdWx0VGFnLmdwcigpLCByZXN1bHRQYXlsb2FkLmdwcigpLCBub2RlKTsKICAg
ICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAgY2FzZSBHZXRMb2NhbDogewotICAgICAgICBTcGVj
dWxhdGVkVHlwZSBwcmVkaWN0aW9uID0gbm9kZS52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+cHJlZGlj
dGlvbigpOwotICAgICAgICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSA9IGJsb2NrKCktPnZhbHVlc0F0
SGVhZC5vcGVyYW5kKG5vZGUubG9jYWwoKSk7CisgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRp
Y3Rpb24gPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+cHJlZGljdGlvbigpOworICAgICAg
ICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSA9IGJsb2NrKCktPnZhbHVlc0F0SGVhZC5vcGVyYW5kKG5v
ZGUtPmxvY2FsKCkpOwogCiAgICAgICAgIC8vIElmIHdlIGhhdmUgbm8gcHJlZGljdGlvbiBmb3Ig
dGhpcyBsb2NhbCwgdGhlbiBkb24ndCBhdHRlbXB0IHRvIGNvbXBpbGUuCiAgICAgICAgIGlmIChw
cmVkaWN0aW9uID09IFNwZWNOb25lKSB7Ci0gICAgICAgICAgICB0ZXJtaW5hdGVTcGVjdWxhdGl2
ZUV4ZWN1dGlvbihJbmFkZXF1YXRlQ292ZXJhZ2UsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSk7Cisg
ICAgICAgICAgICB0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihJbmFkZXF1YXRlQ292ZXJh
Z2UsIEpTVmFsdWVSZWdzKCksIDApOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAg
ICAgICAgCi0gICAgICAgIGlmICghbm9kZS52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+aXNDYXB0dXJl
ZCgpKSB7CisgICAgICAgIGlmICghbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCktPmlzQ2FwdHVy
ZWQoKSkgewogICAgICAgICAgICAgLy8gSWYgdGhlIENGQSBpcyB0cmFja2luZyB0aGlzIHZhcmlh
YmxlIGFuZCBpdCBmb3VuZCB0aGF0IHRoZSB2YXJpYWJsZQogICAgICAgICAgICAgLy8gY2Fubm90
IGhhdmUgYmVlbiBhc3NpZ25lZCwgdGhlbiBkb24ndCBhdHRlbXB0IHRvIHByb2NlZWQuCiAgICAg
ICAgICAgICBpZiAodmFsdWUuaXNDbGVhcigpKSB7Ci0gICAgICAgICAgICAgICAgdGVybWluYXRl
U3BlY3VsYXRpdmVFeGVjdXRpb24oSW5hZGVxdWF0ZUNvdmVyYWdlLCBKU1ZhbHVlUmVncygpLCBO
b05vZGUpOworICAgICAgICAgICAgICAgIHRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKElu
YWRlcXVhdGVDb3ZlcmFnZSwgSlNWYWx1ZVJlZ3MoKSwgMCk7CiAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChub2RlLnZh
cmlhYmxlQWNjZXNzRGF0YSgpLT5zaG91bGRVc2VEb3VibGVGb3JtYXQoKSkgeworICAgICAgICAg
ICAgaWYgKG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5zaG91bGRVc2VEb3VibGVGb3JtYXQo
KSkgewogICAgICAgICAgICAgICAgIEZQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7Ci0gICAgICAg
ICAgICAgICAgbV9qaXQubG9hZERvdWJsZShKSVRDb21waWxlcjo6YWRkcmVzc0Zvcihub2RlLmxv
Y2FsKCkpLCByZXN1bHQuZnByKCkpOwotICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciB2
aXJ0dWFsUmVnaXN0ZXIgPSBub2RlLnZpcnR1YWxSZWdpc3RlcigpOworICAgICAgICAgICAgICAg
IG1faml0LmxvYWREb3VibGUoSklUQ29tcGlsZXI6OmFkZHJlc3NGb3Iobm9kZS0+bG9jYWwoKSks
IHJlc3VsdC5mcHIoKSk7CisgICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxS
ZWdpc3RlciA9IG5vZGUtPnZpcnR1YWxSZWdpc3RlcigpOwogICAgICAgICAgICAgICAgIG1fZnBy
cy5yZXRhaW4ocmVzdWx0LmZwcigpLCB2aXJ0dWFsUmVnaXN0ZXIsIFNwaWxsT3JkZXJEb3VibGUp
OwotICAgICAgICAgICAgICAgIG1fZ2VuZXJhdGlvbkluZm9bdmlydHVhbFJlZ2lzdGVyXS5pbml0
RG91YmxlKG1fY29tcGlsZUluZGV4LCBub2RlLnJlZkNvdW50KCksIHJlc3VsdC5mcHIoKSk7Cisg
ICAgICAgICAgICAgICAgbV9nZW5lcmF0aW9uSW5mb1t2aXJ0dWFsUmVnaXN0ZXJdLmluaXREb3Vi
bGUobm9kZSwgbm9kZS0+cmVmQ291bnQoKSwgcmVzdWx0LmZwcigpKTsKICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgICAgICBpZiAoaXNJbnQz
MlNwZWN1bGF0aW9uKHZhbHVlLm1fdHlwZSkpIHsKICAgICAgICAgICAgICAgICBHUFJUZW1wb3Jh
cnkgcmVzdWx0KHRoaXMpOwotICAgICAgICAgICAgICAgIG1faml0LmxvYWQzMihKSVRDb21waWxl
cjo6cGF5bG9hZEZvcihub2RlLmxvY2FsKCkpLCByZXN1bHQuZ3ByKCkpOworICAgICAgICAgICAg
ICAgIG1faml0LmxvYWQzMihKSVRDb21waWxlcjo6cGF5bG9hZEZvcihub2RlLT5sb2NhbCgpKSwg
cmVzdWx0LmdwcigpKTsKIAogICAgICAgICAgICAgICAgIC8vIExpa2UgaW50ZWdlclJlc3VsdCwg
YnV0IGRvbid0IHVzZUNoaWxkcmVuIC0gb3VyIGNoaWxkcmVuIGFyZSBwaGkgbm9kZXMsCiAgICAg
ICAgICAgICAgICAgLy8gYW5kIGRvbid0IHJlcHJlc2VudCB2YWx1ZXMgd2l0aGluIHRoaXMgZGF0
YWZsb3cgd2l0aCB2aXJ0dWFsIHJlZ2lzdGVycy4KLSAgICAgICAgICAgICAgICBWaXJ0dWFsUmVn
aXN0ZXIgdmlydHVhbFJlZ2lzdGVyID0gbm9kZS52aXJ0dWFsUmVnaXN0ZXIoKTsKKyAgICAgICAg
ICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyID0gbm9kZS0+dmlydHVhbFJl
Z2lzdGVyKCk7CiAgICAgICAgICAgICAgICAgbV9ncHJzLnJldGFpbihyZXN1bHQuZ3ByKCksIHZp
cnR1YWxSZWdpc3RlciwgU3BpbGxPcmRlckludGVnZXIpOwotICAgICAgICAgICAgICAgIG1fZ2Vu
ZXJhdGlvbkluZm9bdmlydHVhbFJlZ2lzdGVyXS5pbml0SW50ZWdlcihtX2NvbXBpbGVJbmRleCwg
bm9kZS5yZWZDb3VudCgpLCByZXN1bHQuZ3ByKCkpOworICAgICAgICAgICAgICAgIG1fZ2VuZXJh
dGlvbkluZm9bdmlydHVhbFJlZ2lzdGVyXS5pbml0SW50ZWdlcihub2RlLCBub2RlLT5yZWZDb3Vu
dCgpLCByZXN1bHQuZ3ByKCkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
fQogCiAgICAgICAgICAgICBpZiAoaXNDZWxsU3BlY3VsYXRpb24odmFsdWUubV90eXBlKSkgewog
ICAgICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7Ci0gICAgICAgICAgICAg
ICAgbV9qaXQubG9hZDMyKEpJVENvbXBpbGVyOjpwYXlsb2FkRm9yKG5vZGUubG9jYWwoKSksIHJl
c3VsdC5ncHIoKSk7CisgICAgICAgICAgICAgICAgbV9qaXQubG9hZDMyKEpJVENvbXBpbGVyOjpw
YXlsb2FkRm9yKG5vZGUtPmxvY2FsKCkpLCByZXN1bHQuZ3ByKCkpOwogCiAgICAgICAgICAgICAg
ICAgLy8gTGlrZSBjZWxsUmVzdWx0LCBidXQgZG9uJ3QgdXNlQ2hpbGRyZW4gLSBvdXIgY2hpbGRy
ZW4gYXJlIHBoaSBub2RlcywKICAgICAgICAgICAgICAgICAvLyBhbmQgZG9uJ3QgcmVwcmVzZW50
IHZhbHVlcyB3aXRoaW4gdGhpcyBkYXRhZmxvdyB3aXRoIHZpcnR1YWwgcmVnaXN0ZXJzLgotICAg
ICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIgPSBub2RlLnZpcnR1
YWxSZWdpc3RlcigpOworICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVn
aXN0ZXIgPSBub2RlLT52aXJ0dWFsUmVnaXN0ZXIoKTsKICAgICAgICAgICAgICAgICBtX2dwcnMu
cmV0YWluKHJlc3VsdC5ncHIoKSwgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVyQ2VsbCk7Ci0g
ICAgICAgICAgICAgICAgbV9nZW5lcmF0aW9uSW5mb1t2aXJ0dWFsUmVnaXN0ZXJdLmluaXRDZWxs
KG1fY29tcGlsZUluZGV4LCBub2RlLnJlZkNvdW50KCksIHJlc3VsdC5ncHIoKSk7CisgICAgICAg
ICAgICAgICAgbV9nZW5lcmF0aW9uSW5mb1t2aXJ0dWFsUmVnaXN0ZXJdLmluaXRDZWxsKG5vZGUs
IG5vZGUtPnJlZkNvdW50KCksIHJlc3VsdC5ncHIoKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGlmIChpc0Jvb2xlYW5TcGVjdWxhdGlvbih2
YWx1ZS5tX3R5cGUpKSB7CiAgICAgICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlz
KTsKLSAgICAgICAgICAgICAgICBtX2ppdC5sb2FkMzIoSklUQ29tcGlsZXI6OnBheWxvYWRGb3Io
bm9kZS5sb2NhbCgpKSwgcmVzdWx0LmdwcigpKTsKKyAgICAgICAgICAgICAgICBtX2ppdC5sb2Fk
MzIoSklUQ29tcGlsZXI6OnBheWxvYWRGb3Iobm9kZS0+bG9jYWwoKSksIHJlc3VsdC5ncHIoKSk7
CiAKICAgICAgICAgICAgICAgICAvLyBMaWtlIGJvb2xlYW5SZXN1bHQsIGJ1dCBkb24ndCB1c2VD
aGlsZHJlbiAtIG91ciBjaGlsZHJlbiBhcmUgcGhpIG5vZGVzLAogICAgICAgICAgICAgICAgIC8v
IGFuZCBkb24ndCByZXByZXNlbnQgdmFsdWVzIHdpdGhpbiB0aGlzIGRhdGFmbG93IHdpdGggdmly
dHVhbCByZWdpc3RlcnMuCi0gICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxS
ZWdpc3RlciA9IG5vZGUudmlydHVhbFJlZ2lzdGVyKCk7CisgICAgICAgICAgICAgICAgVmlydHVh
bFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciA9IG5vZGUtPnZpcnR1YWxSZWdpc3RlcigpOwogICAg
ICAgICAgICAgICAgIG1fZ3Bycy5yZXRhaW4ocmVzdWx0LmdwcigpLCB2aXJ0dWFsUmVnaXN0ZXIs
IFNwaWxsT3JkZXJCb29sZWFuKTsKLSAgICAgICAgICAgICAgICBtX2dlbmVyYXRpb25JbmZvW3Zp
cnR1YWxSZWdpc3Rlcl0uaW5pdEJvb2xlYW4obV9jb21waWxlSW5kZXgsIG5vZGUucmVmQ291bnQo
KSwgcmVzdWx0LmdwcigpKTsKKyAgICAgICAgICAgICAgICBtX2dlbmVyYXRpb25JbmZvW3ZpcnR1
YWxSZWdpc3Rlcl0uaW5pdEJvb2xlYW4obm9kZSwgbm9kZS0+cmVmQ291bnQoKSwgcmVzdWx0Lmdw
cigpKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgfQog
CiAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CiAgICAgICAgIEdQUlRlbXBvcmFy
eSB0YWcodGhpcyk7Ci0gICAgICAgIG1faml0LmxvYWQzMihKSVRDb21waWxlcjo6cGF5bG9hZEZv
cihub2RlLmxvY2FsKCkpLCByZXN1bHQuZ3ByKCkpOwotICAgICAgICBtX2ppdC5sb2FkMzIoSklU
Q29tcGlsZXI6OnRhZ0Zvcihub2RlLmxvY2FsKCkpLCB0YWcuZ3ByKCkpOworICAgICAgICBtX2pp
dC5sb2FkMzIoSklUQ29tcGlsZXI6OnBheWxvYWRGb3Iobm9kZS0+bG9jYWwoKSksIHJlc3VsdC5n
cHIoKSk7CisgICAgICAgIG1faml0LmxvYWQzMihKSVRDb21waWxlcjo6dGFnRm9yKG5vZGUtPmxv
Y2FsKCkpLCB0YWcuZ3ByKCkpOwogCiAgICAgICAgIC8vIExpa2UganNWYWx1ZVJlc3VsdCwgYnV0
IGRvbid0IHVzZUNoaWxkcmVuIC0gb3VyIGNoaWxkcmVuIGFyZSBwaGkgbm9kZXMsCiAgICAgICAg
IC8vIGFuZCBkb24ndCByZXByZXNlbnQgdmFsdWVzIHdpdGhpbiB0aGlzIGRhdGFmbG93IHdpdGgg
dmlydHVhbCByZWdpc3RlcnMuCi0gICAgICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0
ZXIgPSBub2RlLnZpcnR1YWxSZWdpc3RlcigpOworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmly
dHVhbFJlZ2lzdGVyID0gbm9kZS0+dmlydHVhbFJlZ2lzdGVyKCk7CiAgICAgICAgIG1fZ3Bycy5y
ZXRhaW4ocmVzdWx0LmdwcigpLCB2aXJ0dWFsUmVnaXN0ZXIsIFNwaWxsT3JkZXJKUyk7CiAgICAg
ICAgIG1fZ3Bycy5yZXRhaW4odGFnLmdwcigpLCB2aXJ0dWFsUmVnaXN0ZXIsIFNwaWxsT3JkZXJK
Uyk7CiAKICAgICAgICAgRGF0YUZvcm1hdCBmb3JtYXQ7CiAgICAgICAgIGlmIChpc0NlbGxTcGVj
dWxhdGlvbih2YWx1ZS5tX3R5cGUpCi0gICAgICAgICAgICAmJiAhbm9kZS52YXJpYWJsZUFjY2Vz
c0RhdGEoKS0+aXNDYXB0dXJlZCgpKQorICAgICAgICAgICAgJiYgIW5vZGUtPnZhcmlhYmxlQWNj
ZXNzRGF0YSgpLT5pc0NhcHR1cmVkKCkpCiAgICAgICAgICAgICBmb3JtYXQgPSBEYXRhRm9ybWF0
SlNDZWxsOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBmb3JtYXQgPSBEYXRhRm9ybWF0SlM7
Ci0gICAgICAgIG1fZ2VuZXJhdGlvbkluZm9bdmlydHVhbFJlZ2lzdGVyXS5pbml0SlNWYWx1ZSht
X2NvbXBpbGVJbmRleCwgbm9kZS5yZWZDb3VudCgpLCB0YWcuZ3ByKCksIHJlc3VsdC5ncHIoKSwg
Zm9ybWF0KTsKKyAgICAgICAgbV9nZW5lcmF0aW9uSW5mb1t2aXJ0dWFsUmVnaXN0ZXJdLmluaXRK
U1ZhbHVlKG5vZGUsIG5vZGUtPnJlZkNvdW50KCksIHRhZy5ncHIoKSwgcmVzdWx0LmdwcigpLCBm
b3JtYXQpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgR2V0TG9j
YWxVbmxpbmtlZDogewogICAgICAgICBHUFJUZW1wb3JhcnkgcGF5bG9hZCh0aGlzKTsKICAgICAg
ICAgR1BSVGVtcG9yYXJ5IHRhZyh0aGlzKTsKLSAgICAgICAgbV9qaXQubG9hZDMyKEpJVENvbXBp
bGVyOjpwYXlsb2FkRm9yKG5vZGUudW5saW5rZWRMb2NhbCgpKSwgcGF5bG9hZC5ncHIoKSk7Ci0g
ICAgICAgIG1faml0LmxvYWQzMihKSVRDb21waWxlcjo6dGFnRm9yKG5vZGUudW5saW5rZWRMb2Nh
bCgpKSwgdGFnLmdwcigpKTsKLSAgICAgICAganNWYWx1ZVJlc3VsdCh0YWcuZ3ByKCksIHBheWxv
YWQuZ3ByKCksIG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAgbV9qaXQubG9hZDMyKEpJVENvbXBp
bGVyOjpwYXlsb2FkRm9yKG5vZGUtPnVubGlua2VkTG9jYWwoKSksIHBheWxvYWQuZ3ByKCkpOwor
ICAgICAgICBtX2ppdC5sb2FkMzIoSklUQ29tcGlsZXI6OnRhZ0Zvcihub2RlLT51bmxpbmtlZExv
Y2FsKCkpLCB0YWcuZ3ByKCkpOworICAgICAgICBqc1ZhbHVlUmVzdWx0KHRhZy5ncHIoKSwgcGF5
bG9hZC5ncHIoKSwgbm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIApAQCAtMjI0Miw2MCAr
MjIzNyw2MCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAg
ICAgIC8vIHN0YWNrLgogICAgICAgICBjb21waWxlTW92SGludChub2RlKTsKICAgICAgICAgCi0g
ICAgICAgIGlmICghbm9kZS52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+aXNDYXB0dXJlZCgpICYmICFt
X2ppdC5ncmFwaCgpLmlzQ3JlYXRlZFRoaXNBcmd1bWVudChub2RlLmxvY2FsKCkpKSB7Ci0gICAg
ICAgICAgICBpZiAobm9kZS52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+c2hvdWxkVXNlRG91YmxlRm9y
bWF0KCkpIHsKLSAgICAgICAgICAgICAgICBTcGVjdWxhdGVEb3VibGVPcGVyYW5kIHZhbHVlKHRo
aXMsIG5vZGUuY2hpbGQxKCksIEZvcndhcmRTcGVjdWxhdGlvbik7Ci0gICAgICAgICAgICAgICAg
bV9qaXQuc3RvcmVEb3VibGUodmFsdWUuZnByKCksIEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKG5v
ZGUubG9jYWwoKSkpOwotICAgICAgICAgICAgICAgIG5vUmVzdWx0KG1fY29tcGlsZUluZGV4KTsK
KyAgICAgICAgaWYgKCFub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+aXNDYXB0dXJlZCgpICYm
ICFtX2ppdC5ncmFwaCgpLmlzQ3JlYXRlZFRoaXNBcmd1bWVudChub2RlLT5sb2NhbCgpKSkgewor
ICAgICAgICAgICAgaWYgKG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5zaG91bGRVc2VEb3Vi
bGVGb3JtYXQoKSkgeworICAgICAgICAgICAgICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgdmFs
dWUodGhpcywgbm9kZS0+Y2hpbGQxKCksIEZvcndhcmRTcGVjdWxhdGlvbik7CisgICAgICAgICAg
ICAgICAgbV9qaXQuc3RvcmVEb3VibGUodmFsdWUuZnByKCksIEpJVENvbXBpbGVyOjphZGRyZXNz
Rm9yKG5vZGUtPmxvY2FsKCkpKTsKKyAgICAgICAgICAgICAgICBub1Jlc3VsdChub2RlKTsKICAg
ICAgICAgICAgICAgICAvLyBJbmRpY2F0ZSB0aGF0IGl0J3Mgbm8gbG9uZ2VyIG5lY2Vzc2FyeSB0
byByZXRyaWV2ZSB0aGUgdmFsdWUgb2YKICAgICAgICAgICAgICAgICAvLyB0aGlzIGJ5dGVjb2Rl
IHZhcmlhYmxlIGZyb20gcmVnaXN0ZXJzIG9yIG90aGVyIGxvY2F0aW9ucyBpbiB0aGUgc3RhY2ss
CiAgICAgICAgICAgICAgICAgLy8gYnV0IHRoYXQgaXQgaXMgc3RvcmVkIGFzIGEgZG91YmxlLgot
ICAgICAgICAgICAgICAgIHJlY29yZFNldExvY2FsKG5vZGUubG9jYWwoKSwgVmFsdWVTb3VyY2Uo
RG91YmxlSW5KU1N0YWNrKSk7CisgICAgICAgICAgICAgICAgcmVjb3JkU2V0TG9jYWwobm9kZS0+
bG9jYWwoKSwgVmFsdWVTb3VyY2UoRG91YmxlSW5KU1N0YWNrKSk7CiAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0
ZWRUeXBlID0gbm9kZS52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+YXJndW1lbnRBd2FyZVByZWRpY3Rp
b24oKTsKLSAgICAgICAgICAgIGlmIChtX2dlbmVyYXRpb25JbmZvW2F0KG5vZGUuY2hpbGQxKCkp
LnZpcnR1YWxSZWdpc3RlcigpXS5yZWdpc3RlckZvcm1hdCgpID09IERhdGFGb3JtYXREb3VibGUp
IHsKLSAgICAgICAgICAgICAgICBEb3VibGVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUuY2hpbGQx
KCkpOwotICAgICAgICAgICAgICAgIG1faml0LnN0b3JlRG91YmxlKHZhbHVlLmZwcigpLCBKSVRD
b21waWxlcjo6YWRkcmVzc0Zvcihub2RlLmxvY2FsKCkpKTsKLSAgICAgICAgICAgICAgICBub1Jl
c3VsdChtX2NvbXBpbGVJbmRleCk7Ci0gICAgICAgICAgICAgICAgcmVjb3JkU2V0TG9jYWwobm9k
ZS5sb2NhbCgpLCBWYWx1ZVNvdXJjZShEb3VibGVJbkpTU3RhY2spKTsKKyAgICAgICAgICAgIFNw
ZWN1bGF0ZWRUeXBlIHByZWRpY3RlZFR5cGUgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+
YXJndW1lbnRBd2FyZVByZWRpY3Rpb24oKTsKKyAgICAgICAgICAgIGlmIChtX2dlbmVyYXRpb25J
bmZvW25vZGUtPmNoaWxkMSgpLT52aXJ0dWFsUmVnaXN0ZXIoKV0ucmVnaXN0ZXJGb3JtYXQoKSA9
PSBEYXRhRm9ybWF0RG91YmxlKSB7CisgICAgICAgICAgICAgICAgRG91YmxlT3BlcmFuZCB2YWx1
ZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICAgICAgbV9qaXQuc3RvcmVEb3Vi
bGUodmFsdWUuZnByKCksIEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKG5vZGUtPmxvY2FsKCkpKTsK
KyAgICAgICAgICAgICAgICBub1Jlc3VsdChub2RlKTsKKyAgICAgICAgICAgICAgICByZWNvcmRT
ZXRMb2NhbChub2RlLT5sb2NhbCgpLCBWYWx1ZVNvdXJjZShEb3VibGVJbkpTU3RhY2spKTsKICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChpc0lu
dDMyU3BlY3VsYXRpb24ocHJlZGljdGVkVHlwZSkpIHsKLSAgICAgICAgICAgICAgICBTcGVjdWxh
dGVJbnRlZ2VyT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLmNoaWxkMSgpLCBGb3J3YXJkU3BlY3Vs
YXRpb24pOwotICAgICAgICAgICAgICAgIG1faml0LnN0b3JlMzIodmFsdWUuZ3ByKCksIEpJVENv
bXBpbGVyOjpwYXlsb2FkRm9yKG5vZGUubG9jYWwoKSkpOwotICAgICAgICAgICAgICAgIG5vUmVz
dWx0KG1fY29tcGlsZUluZGV4KTsKLSAgICAgICAgICAgICAgICByZWNvcmRTZXRMb2NhbChub2Rl
LmxvY2FsKCksIFZhbHVlU291cmNlKEludDMySW5KU1N0YWNrKSk7CisgICAgICAgICAgICAgICAg
U3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS0+Y2hpbGQxKCksIEZvcndh
cmRTcGVjdWxhdGlvbik7CisgICAgICAgICAgICAgICAgbV9qaXQuc3RvcmUzMih2YWx1ZS5ncHIo
KSwgSklUQ29tcGlsZXI6OnBheWxvYWRGb3Iobm9kZS0+bG9jYWwoKSkpOworICAgICAgICAgICAg
ICAgIG5vUmVzdWx0KG5vZGUpOworICAgICAgICAgICAgICAgIHJlY29yZFNldExvY2FsKG5vZGUt
PmxvY2FsKCksIFZhbHVlU291cmNlKEludDMySW5KU1N0YWNrKSk7CiAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoaXNDZWxsU3BlY3VsYXRpb24o
cHJlZGljdGVkVHlwZSkpIHsKLSAgICAgICAgICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBj
ZWxsKHRoaXMsIG5vZGUuY2hpbGQxKCksIEZvcndhcmRTcGVjdWxhdGlvbik7CisgICAgICAgICAg
ICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgY2VsbCh0aGlzLCBub2RlLT5jaGlsZDEoKSwgRm9y
d2FyZFNwZWN1bGF0aW9uKTsKICAgICAgICAgICAgICAgICBHUFJSZWcgY2VsbEdQUiA9IGNlbGwu
Z3ByKCk7Ci0gICAgICAgICAgICAgICAgbV9qaXQuc3RvcmVQdHIoY2VsbEdQUiwgSklUQ29tcGls
ZXI6OnBheWxvYWRGb3Iobm9kZS5sb2NhbCgpKSk7Ci0gICAgICAgICAgICAgICAgbm9SZXN1bHQo
bV9jb21waWxlSW5kZXgpOwotICAgICAgICAgICAgICAgIHJlY29yZFNldExvY2FsKG5vZGUubG9j
YWwoKSwgVmFsdWVTb3VyY2UoQ2VsbEluSlNTdGFjaykpOworICAgICAgICAgICAgICAgIG1faml0
LnN0b3JlUHRyKGNlbGxHUFIsIEpJVENvbXBpbGVyOjpwYXlsb2FkRm9yKG5vZGUtPmxvY2FsKCkp
KTsKKyAgICAgICAgICAgICAgICBub1Jlc3VsdChub2RlKTsKKyAgICAgICAgICAgICAgICByZWNv
cmRTZXRMb2NhbChub2RlLT5sb2NhbCgpLCBWYWx1ZVNvdXJjZShDZWxsSW5KU1N0YWNrKSk7CiAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoaXNC
b29sZWFuU3BlY3VsYXRpb24ocHJlZGljdGVkVHlwZSkpIHsKLSAgICAgICAgICAgICAgICBTcGVj
dWxhdGVCb29sZWFuT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLmNoaWxkMSgpLCBGb3J3YXJkU3Bl
Y3VsYXRpb24pOwotICAgICAgICAgICAgICAgIG1faml0LnN0b3JlMzIodmFsdWUuZ3ByKCksIEpJ
VENvbXBpbGVyOjpwYXlsb2FkRm9yKG5vZGUubG9jYWwoKSkpOwotICAgICAgICAgICAgICAgIG5v
UmVzdWx0KG1fY29tcGlsZUluZGV4KTsKLSAgICAgICAgICAgICAgICByZWNvcmRTZXRMb2NhbChu
b2RlLmxvY2FsKCksIFZhbHVlU291cmNlKEJvb2xlYW5JbkpTU3RhY2spKTsKKyAgICAgICAgICAg
ICAgICBTcGVjdWxhdGVCb29sZWFuT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLT5jaGlsZDEoKSwg
Rm9yd2FyZFNwZWN1bGF0aW9uKTsKKyAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZTMyKHZhbHVl
LmdwcigpLCBKSVRDb21waWxlcjo6cGF5bG9hZEZvcihub2RlLT5sb2NhbCgpKSk7CisgICAgICAg
ICAgICAgICAgbm9SZXN1bHQobm9kZSk7CisgICAgICAgICAgICAgICAgcmVjb3JkU2V0TG9jYWwo
bm9kZS0+bG9jYWwoKSwgVmFsdWVTb3VyY2UoQm9vbGVhbkluSlNTdGFjaykpOwogICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIEpTVmFsdWVP
cGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwotICAgICAgICBtX2ppdC5zdG9yZTMy
KHZhbHVlLnBheWxvYWRHUFIoKSwgSklUQ29tcGlsZXI6OnBheWxvYWRGb3Iobm9kZS5sb2NhbCgp
KSk7Ci0gICAgICAgIG1faml0LnN0b3JlMzIodmFsdWUudGFnR1BSKCksIEpJVENvbXBpbGVyOjp0
YWdGb3Iobm9kZS5sb2NhbCgpKSk7Ci0gICAgICAgIG5vUmVzdWx0KG1fY29tcGlsZUluZGV4KTsK
LSAgICAgICAgcmVjb3JkU2V0TG9jYWwobm9kZS5sb2NhbCgpLCBWYWx1ZVNvdXJjZShWYWx1ZUlu
SlNTdGFjaykpOworICAgICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLT5jaGls
ZDEoKSk7CisgICAgICAgIG1faml0LnN0b3JlMzIodmFsdWUucGF5bG9hZEdQUigpLCBKSVRDb21w
aWxlcjo6cGF5bG9hZEZvcihub2RlLT5sb2NhbCgpKSk7CisgICAgICAgIG1faml0LnN0b3JlMzIo
dmFsdWUudGFnR1BSKCksIEpJVENvbXBpbGVyOjp0YWdGb3Iobm9kZS0+bG9jYWwoKSkpOworICAg
ICAgICBub1Jlc3VsdChub2RlKTsKKyAgICAgICAgcmVjb3JkU2V0TG9jYWwobm9kZS0+bG9jYWwo
KSwgVmFsdWVTb3VyY2UoVmFsdWVJbkpTU3RhY2spKTsKIAogICAgICAgICAvLyBJZiB3ZSdyZSBz
dG9yaW5nIGFuIGFyZ3VtZW50cyBvYmplY3QgdGhhdCBoYXMgYmVlbiBvcHRpbWl6ZWQgYXdheSwK
ICAgICAgICAgLy8gb3VyIHZhcmlhYmxlIGV2ZW50IHN0cmVhbSBmb3IgT1NSIGV4aXQgbm93IHJl
ZmxlY3RzIHRoZSBvcHRpbWl6ZWQKICAgICAgICAgLy8gdmFsdWUgKEpTVmFsdWUoKSkuIE9uIHRo
ZSBzbG93IHBhdGgsIHdlIHdhbnQgYW4gYXJndW1lbnRzIG9iamVjdAogICAgICAgICAvLyBpbnN0
ZWFkLiBXZSBhZGQgYW4gYWRkaXRpb25hbCBtb3ZlIGhpbnQgdG8gc2hvdyBPU1IgZXhpdCB0aGF0
IGl0CiAgICAgICAgIC8vIG5lZWRzIHRvIHJlY29uc3RydWN0IHRoZSBhcmd1bWVudHMgb2JqZWN0
LgotICAgICAgICBpZiAoYXQobm9kZS5jaGlsZDEoKSkub3AoKSA9PSBQaGFudG9tQXJndW1lbnRz
KQorICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPm9wKCkgPT0gUGhhbnRvbUFyZ3VtZW50cykK
ICAgICAgICAgICAgIGNvbXBpbGVNb3ZIaW50KG5vZGUpOwogCiAgICAgICAgIGJyZWFrOwpAQCAt
MjMxMSw1NCArMjMwNiw1NCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5v
ZGUpCiAgICAgY2FzZSBCaXRBbmQ6CiAgICAgY2FzZSBCaXRPcjoKICAgICBjYXNlIEJpdFhvcjoK
LSAgICAgICAgaWYgKGlzSW50MzJDb25zdGFudChub2RlLmNoaWxkMSgpLmluZGV4KCkpKSB7Ci0g
ICAgICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDIodGhpcywgbm9kZS5jaGlsZDIo
KSk7CisgICAgICAgIGlmIChpc0ludDMyQ29uc3RhbnQobm9kZS0+Y2hpbGQxKCkubm9kZSgpKSkg
eworICAgICAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AyKHRoaXMsIG5vZGUtPmNo
aWxkMigpKTsKICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgb3AyKTsKIAot
ICAgICAgICAgICAgYml0T3Aob3AsIHZhbHVlT2ZJbnQzMkNvbnN0YW50KG5vZGUuY2hpbGQxKCku
aW5kZXgoKSksIG9wMi5ncHIoKSwgcmVzdWx0LmdwcigpKTsKKyAgICAgICAgICAgIGJpdE9wKG9w
LCB2YWx1ZU9mSW50MzJDb25zdGFudChub2RlLT5jaGlsZDEoKS5ub2RlKCkpLCBvcDIuZ3ByKCks
IHJlc3VsdC5ncHIoKSk7CiAKLSAgICAgICAgICAgIGludGVnZXJSZXN1bHQocmVzdWx0Lmdwcigp
LCBtX2NvbXBpbGVJbmRleCk7Ci0gICAgICAgIH0gZWxzZSBpZiAoaXNJbnQzMkNvbnN0YW50KG5v
ZGUuY2hpbGQyKCkuaW5kZXgoKSkpIHsKLSAgICAgICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVy
YW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKKyAgICAgICAgICAgIGludGVnZXJSZXN1bHQo
cmVzdWx0LmdwcigpLCBub2RlKTsKKyAgICAgICAgfSBlbHNlIGlmIChpc0ludDMyQ29uc3RhbnQo
bm9kZS0+Y2hpbGQyKCkubm9kZSgpKSkgeworICAgICAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9w
ZXJhbmQgb3AxKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgICAgIEdQUlRlbXBvcmFy
eSByZXN1bHQodGhpcywgb3AxKTsKIAotICAgICAgICAgICAgYml0T3Aob3AsIHZhbHVlT2ZJbnQz
MkNvbnN0YW50KG5vZGUuY2hpbGQyKCkuaW5kZXgoKSksIG9wMS5ncHIoKSwgcmVzdWx0Lmdwcigp
KTsKKyAgICAgICAgICAgIGJpdE9wKG9wLCB2YWx1ZU9mSW50MzJDb25zdGFudChub2RlLT5jaGls
ZDIoKS5ub2RlKCkpLCBvcDEuZ3ByKCksIHJlc3VsdC5ncHIoKSk7CiAKLSAgICAgICAgICAgIGlu
dGVnZXJSZXN1bHQocmVzdWx0LmdwcigpLCBtX2NvbXBpbGVJbmRleCk7CisgICAgICAgICAgICBp
bnRlZ2VyUmVzdWx0KHJlc3VsdC5ncHIoKSwgbm9kZSk7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEoKSk7
Ci0gICAgICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDIodGhpcywgbm9kZS5jaGls
ZDIoKSk7CisgICAgICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDEodGhpcywgbm9k
ZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AyKHRo
aXMsIG5vZGUtPmNoaWxkMigpKTsKICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhp
cywgb3AxLCBvcDIpOwogCiAgICAgICAgICAgICBHUFJSZWcgcmVnMSA9IG9wMS5ncHIoKTsKICAg
ICAgICAgICAgIEdQUlJlZyByZWcyID0gb3AyLmdwcigpOwogICAgICAgICAgICAgYml0T3Aob3As
IHJlZzEsIHJlZzIsIHJlc3VsdC5ncHIoKSk7CiAKLSAgICAgICAgICAgIGludGVnZXJSZXN1bHQo
cmVzdWx0LmdwcigpLCBtX2NvbXBpbGVJbmRleCk7CisgICAgICAgICAgICBpbnRlZ2VyUmVzdWx0
KHJlc3VsdC5ncHIoKSwgbm9kZSk7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAKICAgICBj
YXNlIEJpdFJTaGlmdDoKICAgICBjYXNlIEJpdExTaGlmdDoKICAgICBjYXNlIEJpdFVSU2hpZnQ6
Ci0gICAgICAgIGlmIChpc0ludDMyQ29uc3RhbnQobm9kZS5jaGlsZDIoKS5pbmRleCgpKSkgewot
ICAgICAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQx
KCkpOworICAgICAgICBpZiAoaXNJbnQzMkNvbnN0YW50KG5vZGUtPmNoaWxkMigpLm5vZGUoKSkp
IHsKKyAgICAgICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMSh0aGlzLCBub2RlLT5j
aGlsZDEoKSk7CiAgICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIG9wMSk7CiAK
LSAgICAgICAgICAgIHNoaWZ0T3Aob3AsIG9wMS5ncHIoKSwgdmFsdWVPZkludDMyQ29uc3RhbnQo
bm9kZS5jaGlsZDIoKS5pbmRleCgpKSAmIDB4MWYsIHJlc3VsdC5ncHIoKSk7CisgICAgICAgICAg
ICBzaGlmdE9wKG9wLCBvcDEuZ3ByKCksIHZhbHVlT2ZJbnQzMkNvbnN0YW50KG5vZGUtPmNoaWxk
MigpLm5vZGUoKSkgJiAweDFmLCByZXN1bHQuZ3ByKCkpOwogCi0gICAgICAgICAgICBpbnRlZ2Vy
UmVzdWx0KHJlc3VsdC5ncHIoKSwgbV9jb21waWxlSW5kZXgpOworICAgICAgICAgICAgaW50ZWdl
clJlc3VsdChyZXN1bHQuZ3ByKCksIG5vZGUpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAg
ICAgLy8gRG8gbm90IGFsbG93IHNoaWZ0IGFtb3VudCB0byBiZSB1c2VkIGFzIHRoZSByZXN1bHQs
IE1hY3JvQXNzZW1ibGVyIGRvZXMgbm90IHBlcm1pdCB0aGlzLgotICAgICAgICAgICAgU3BlY3Vs
YXRlSW50ZWdlck9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwotICAgICAgICAgICAg
U3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AyKHRoaXMsIG5vZGUuY2hpbGQyKCkpOworICAgICAg
ICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AxKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsK
KyAgICAgICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMih0aGlzLCBub2RlLT5jaGls
ZDIoKSk7CiAgICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIG9wMSk7CiAKICAg
ICAgICAgICAgIEdQUlJlZyByZWcxID0gb3AxLmdwcigpOwogICAgICAgICAgICAgR1BSUmVnIHJl
ZzIgPSBvcDIuZ3ByKCk7CiAgICAgICAgICAgICBzaGlmdE9wKG9wLCByZWcxLCByZWcyLCByZXN1
bHQuZ3ByKCkpOwogCi0gICAgICAgICAgICBpbnRlZ2VyUmVzdWx0KHJlc3VsdC5ncHIoKSwgbV9j
b21waWxlSW5kZXgpOworICAgICAgICAgICAgaW50ZWdlclJlc3VsdChyZXN1bHQuZ3ByKCksIG5v
ZGUpOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogCkBAIC0yMzgzLDE1ICsyMzc4LDE1IEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICB9CiAgICAgICAg
IAogICAgIGNhc2UgQ2hlY2tOdW1iZXI6IHsKLSAgICAgICAgaWYgKCFpc051bWJlclNwZWN1bGF0
aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKSB7Ci0gICAgICAgICAg
ICBKU1ZhbHVlT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEoKSk7CisgICAgICAgIGlmICgh
aXNOdW1iZXJTcGVjdWxhdGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fdHlw
ZSkpIHsKKyAgICAgICAgICAgIEpTVmFsdWVPcGVyYW5kIG9wMSh0aGlzLCBub2RlLT5jaGlsZDEo
KSk7CiAgICAgICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBpc0ludGVnZXIgPSBtX2ppdC5icmFu
Y2gzMihNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIG9wMS50YWdHUFIoKSwgVHJ1c3RlZEltbTMyKEpT
VmFsdWU6OkludDMyVGFnKSk7CiAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAotICAgICAg
ICAgICAgICAgIEJhZFR5cGUsIEpTVmFsdWVSZWdzKG9wMS50YWdHUFIoKSwgb3AxLnBheWxvYWRH
UFIoKSksIG5vZGUuY2hpbGQxKCkuaW5kZXgoKSwKKyAgICAgICAgICAgICAgICBCYWRUeXBlLCBK
U1ZhbHVlUmVncyhvcDEudGFnR1BSKCksIG9wMS5wYXlsb2FkR1BSKCkpLCBub2RlLT5jaGlsZDEo
KSwKICAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVP
ckVxdWFsLCBvcDEudGFnR1BSKCksIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpMb3dlc3RUYWcpKSk7
CiAgICAgICAgICAgICBpc0ludGVnZXIubGluaygmbV9qaXQpOwogICAgICAgICB9Ci0gICAgICAg
IG5vUmVzdWx0KG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAgbm9SZXN1bHQobm9kZSk7CiAgICAg
ICAgIGJyZWFrOwogICAgIH0KIApAQCAtMjQxMyw4ICsyNDA4LDggQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgQXJp
dGhEaXY6IHsKLSAgICAgICAgaWYgKE5vZGU6OnNob3VsZFNwZWN1bGF0ZUludGVnZXJGb3JBcml0
aG1ldGljKGF0KG5vZGUuY2hpbGQxKCkpLCBhdChub2RlLmNoaWxkMigpKSkKLSAgICAgICAgICAg
ICYmIG5vZGUuY2FuU3BlY3VsYXRlSW50ZWdlcigpKSB7CisgICAgICAgIGlmIChOb2RlOjpzaG91
bGRTcGVjdWxhdGVJbnRlZ2VyRm9yQXJpdGhtZXRpYyhub2RlLT5jaGlsZDEoKS5ub2RlKCksIG5v
ZGUtPmNoaWxkMigpLm5vZGUoKSkKKyAgICAgICAgICAgICYmIG5vZGUtPmNhblNwZWN1bGF0ZUlu
dGVnZXIoKSkgewogI2lmIENQVShYODYpCiAgICAgICAgICAgICBjb21waWxlSW50ZWdlckFyaXRo
RGl2Rm9yWDg2KG5vZGUpOwogI2Vsc2UgLy8gQ1BVKFg4NikgLT4gc28gbm9uLVg4NiBjb2RlIGZv
bGxvd3MKQEAgLTI0MjMsMTUgKzI0MTgsMTUgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZShOb2RlJiBub2RlKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgCi0g
ICAgICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwot
ICAgICAgICBTcGVjdWxhdGVEb3VibGVPcGVyYW5kIG9wMih0aGlzLCBub2RlLmNoaWxkMigpKTsK
KyAgICAgICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCBvcDEodGhpcywgbm9kZS0+Y2hpbGQxKCkp
OworICAgICAgICBTcGVjdWxhdGVEb3VibGVPcGVyYW5kIG9wMih0aGlzLCBub2RlLT5jaGlsZDIo
KSk7CiAgICAgICAgIEZQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgb3AxKTsKIAogICAgICAgICBG
UFJSZWcgcmVnMSA9IG9wMS5mcHIoKTsKICAgICAgICAgRlBSUmVnIHJlZzIgPSBvcDIuZnByKCk7
CiAgICAgICAgIG1faml0LmRpdkRvdWJsZShyZWcxLCByZWcyLCByZXN1bHQuZnByKCkpOwogCi0g
ICAgICAgIGRvdWJsZVJlc3VsdChyZXN1bHQuZnByKCksIG1fY29tcGlsZUluZGV4KTsKKyAgICAg
ICAgZG91YmxlUmVzdWx0KHJlc3VsdC5mcHIoKSwgbm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAg
IH0KIApAQCAtMjQ0MSw5ICsyNDM2LDkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShO
b2RlJiBub2RlKQogICAgIH0KIAogICAgIGNhc2UgQXJpdGhBYnM6IHsKLSAgICAgICAgaWYgKGF0
KG5vZGUuY2hpbGQxKCkpLnNob3VsZFNwZWN1bGF0ZUludGVnZXJGb3JBcml0aG1ldGljKCkKLSAg
ICAgICAgICAgICYmIG5vZGUuY2FuU3BlY3VsYXRlSW50ZWdlcigpKSB7Ci0gICAgICAgICAgICBT
cGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEoKSk7CisgICAgICAg
IGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlSW50ZWdlckZvckFyaXRobWV0aWMo
KQorICAgICAgICAgICAgJiYgbm9kZS0+Y2FuU3BlY3VsYXRlSW50ZWdlcigpKSB7CisgICAgICAg
ICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDEodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwog
ICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBvcDEpOwogICAgICAgICAgICAg
R1BSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7CiAgICAgICAgICAgICAKQEAgLTI0NTEsMjUgKzI0
NDYsMjUgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAg
ICAgICAgbV9qaXQucnNoaWZ0MzIocmVzdWx0LmdwcigpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3Rl
ZEltbTMyKDMxKSwgc2NyYXRjaC5ncHIoKSk7CiAgICAgICAgICAgICBtX2ppdC5hZGQzMihzY3Jh
dGNoLmdwcigpLCByZXN1bHQuZ3ByKCkpOwogICAgICAgICAgICAgbV9qaXQueG9yMzIoc2NyYXRj
aC5ncHIoKSwgcmVzdWx0LmdwcigpKTsKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soT3Zl
cmZsb3csIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJs
ZXI6OkVxdWFsLCByZXN1bHQuZ3ByKCksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoMSA8
PCAzMSkpKTsKLSAgICAgICAgICAgIGludGVnZXJSZXN1bHQocmVzdWx0LmdwcigpLCBtX2NvbXBp
bGVJbmRleCk7CisgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE92ZXJmbG93LCBKU1ZhbHVl
UmVncygpLCAwLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIHJlc3VsdC5n
cHIoKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigxIDw8IDMxKSkpOworICAgICAgICAg
ICAgaW50ZWdlclJlc3VsdChyZXN1bHQuZ3ByKCksIG5vZGUpOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgb3Ax
KHRoaXMsIG5vZGUuY2hpbGQxKCkpOworICAgICAgICBTcGVjdWxhdGVEb3VibGVPcGVyYW5kIG9w
MSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgIEZQUlRlbXBvcmFyeSByZXN1bHQodGhp
cyk7CiAgICAgICAgIAogICAgICAgICBtX2ppdC5hYnNEb3VibGUob3AxLmZwcigpLCByZXN1bHQu
ZnByKCkpOwotICAgICAgICBkb3VibGVSZXN1bHQocmVzdWx0LmZwcigpLCBtX2NvbXBpbGVJbmRl
eCk7CisgICAgICAgIGRvdWJsZVJlc3VsdChyZXN1bHQuZnByKCksIG5vZGUpOwogICAgICAgICBi
cmVhazsKICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgQXJpdGhNaW46CiAgICAgY2FzZSBBcml0
aE1heDogewotICAgICAgICBpZiAoTm9kZTo6c2hvdWxkU3BlY3VsYXRlSW50ZWdlckZvckFyaXRo
bWV0aWMoYXQobm9kZS5jaGlsZDEoKSksIGF0KG5vZGUuY2hpbGQyKCkpKQotICAgICAgICAgICAg
JiYgbm9kZS5jYW5TcGVjdWxhdGVJbnRlZ2VyKCkpIHsKLSAgICAgICAgICAgIFNwZWN1bGF0ZVN0
cmljdEludDMyT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEoKSk7Ci0gICAgICAgICAgICBT
cGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgb3AyKHRoaXMsIG5vZGUuY2hpbGQyKCkpOworICAg
ICAgICBpZiAoTm9kZTo6c2hvdWxkU3BlY3VsYXRlSW50ZWdlckZvckFyaXRobWV0aWMobm9kZS0+
Y2hpbGQxKCkubm9kZSgpLCBub2RlLT5jaGlsZDIoKS5ub2RlKCkpCisgICAgICAgICAgICAmJiBu
b2RlLT5jYW5TcGVjdWxhdGVJbnRlZ2VyKCkpIHsKKyAgICAgICAgICAgIFNwZWN1bGF0ZVN0cmlj
dEludDMyT3BlcmFuZCBvcDEodGhpcywgbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgU3Bl
Y3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIG9wMih0aGlzLCBub2RlLT5jaGlsZDIoKSk7CiAgICAg
ICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIG9wMSk7CiAgICAgICAgICAgICAKICAg
ICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG9wMUxlc3MgPSBtX2ppdC5icmFuY2gzMihv
cCA9PSBBcml0aE1pbiA/IE1hY3JvQXNzZW1ibGVyOjpMZXNzVGhhbiA6IE1hY3JvQXNzZW1ibGVy
OjpHcmVhdGVyVGhhbiwgb3AxLmdwcigpLCBvcDIuZ3ByKCkpOwpAQCAtMjQ4MiwxMiArMjQ3Nywx
MiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgICAg
ICB9IGVsc2UKICAgICAgICAgICAgICAgICBvcDFMZXNzLmxpbmsoJm1faml0KTsKICAgICAgICAg
ICAgIAotICAgICAgICAgICAgaW50ZWdlclJlc3VsdChyZXN1bHQuZ3ByKCksIG1fY29tcGlsZUlu
ZGV4KTsKKyAgICAgICAgICAgIGludGVnZXJSZXN1bHQocmVzdWx0LmdwcigpLCBub2RlKTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBTcGVjdWxhdGVE
b3VibGVPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKLSAgICAgICAgU3BlY3VsYXRl
RG91YmxlT3BlcmFuZCBvcDIodGhpcywgbm9kZS5jaGlsZDIoKSk7CisgICAgICAgIFNwZWN1bGF0
ZURvdWJsZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgU3BlY3Vs
YXRlRG91YmxlT3BlcmFuZCBvcDIodGhpcywgbm9kZS0+Y2hpbGQyKCkpOwogICAgICAgICBGUFJU
ZW1wb3JhcnkgcmVzdWx0KHRoaXMsIG9wMSk7CiAgICAgICAgIAogICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6SnVtcExpc3QgZG9uZTsKQEAgLTI1MTUsMTcgKzI1MTAsMTcgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAKICAgICAgICAgZG9uZS5saW5r
KCZtX2ppdCk7CiAgICAgICAgIAotICAgICAgICBkb3VibGVSZXN1bHQocmVzdWx0LmZwcigpLCBt
X2NvbXBpbGVJbmRleCk7CisgICAgICAgIGRvdWJsZVJlc3VsdChyZXN1bHQuZnByKCksIG5vZGUp
OwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgQXJpdGhTcXJ0OiB7
Ci0gICAgICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKCkp
OworICAgICAgICBTcGVjdWxhdGVEb3VibGVPcGVyYW5kIG9wMSh0aGlzLCBub2RlLT5jaGlsZDEo
KSk7CiAgICAgICAgIEZQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgb3AxKTsKICAgICAgICAgCiAg
ICAgICAgIG1faml0LnNxcnREb3VibGUob3AxLmZwcigpLCByZXN1bHQuZnByKCkpOwogICAgICAg
ICAKLSAgICAgICAgZG91YmxlUmVzdWx0KHJlc3VsdC5mcHIoKSwgbV9jb21waWxlSW5kZXgpOwor
ICAgICAgICBkb3VibGVSZXN1bHQocmVzdWx0LmZwcigpLCBub2RlKTsKICAgICAgICAgYnJlYWs7
CiAgICAgfQogCkBAIC0yNTU0LDEzICsyNTQ5LDEzIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIENvbXBhcmVFcToK
LSAgICAgICAgaWYgKGlzTnVsbENvbnN0YW50KG5vZGUuY2hpbGQxKCkuaW5kZXgoKSkpIHsKLSAg
ICAgICAgICAgIGlmIChub25TcGVjdWxhdGl2ZUNvbXBhcmVOdWxsKG5vZGUsIG5vZGUuY2hpbGQy
KCkpKQorICAgICAgICBpZiAoaXNOdWxsQ29uc3RhbnQobm9kZS0+Y2hpbGQxKCkubm9kZSgpKSkg
eworICAgICAgICAgICAgaWYgKG5vblNwZWN1bGF0aXZlQ29tcGFyZU51bGwobm9kZSwgbm9kZS0+
Y2hpbGQyKCkpKQogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICB9Ci0gICAgICAgIGlmIChpc051bGxDb25zdGFudChub2RlLmNoaWxkMigpLmluZGV4
KCkpKSB7Ci0gICAgICAgICAgICBpZiAobm9uU3BlY3VsYXRpdmVDb21wYXJlTnVsbChub2RlLCBu
b2RlLmNoaWxkMSgpKSkKKyAgICAgICAgaWYgKGlzTnVsbENvbnN0YW50KG5vZGUtPmNoaWxkMigp
Lm5vZGUoKSkpIHsKKyAgICAgICAgICAgIGlmIChub25TcGVjdWxhdGl2ZUNvbXBhcmVOdWxsKG5v
ZGUsIG5vZGUtPmNoaWxkMSgpKSkKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgfQpAQCAtMjU5NiwxNSArMjU5MSwxNSBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgfQogCiAgICAgY2FzZSBHZXRCeVZhbDog
ewotICAgICAgICBzd2l0Y2ggKG5vZGUuYXJyYXlNb2RlKCkudHlwZSgpKSB7CisgICAgICAgIHN3
aXRjaCAobm9kZS0+YXJyYXlNb2RlKCkudHlwZSgpKSB7CiAgICAgICAgIGNhc2UgQXJyYXk6OlNl
bGVjdFVzaW5nUHJlZGljdGlvbnM6CiAgICAgICAgIGNhc2UgQXJyYXk6OkZvcmNlRXhpdDoKICAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICB0ZXJt
aW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihJbmFkZXF1YXRlQ292ZXJhZ2UsIEpTVmFsdWVSZWdz
KCksIE5vTm9kZSk7CisgICAgICAgICAgICB0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihJ
bmFkZXF1YXRlQ292ZXJhZ2UsIEpTVmFsdWVSZWdzKCksIDApOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIGNhc2UgQXJyYXk6OkdlbmVyaWM6IHsKLSAgICAgICAgICAgIFNwZWN1bGF0ZUNl
bGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS5jaGlsZDEoKSk7IC8vIFNhdmUgYSByZWdpc3Rlciwg
c3BlY3VsYXRlIGNlbGwuIFdlJ2xsIHByb2JhYmx5IGJlIHJpZ2h0LgotICAgICAgICAgICAgSlNW
YWx1ZU9wZXJhbmQgcHJvcGVydHkodGhpcywgbm9kZS5jaGlsZDIoKSk7CisgICAgICAgICAgICBT
cGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsgLy8gU2F2ZSBh
IHJlZ2lzdGVyLCBzcGVjdWxhdGUgY2VsbC4gV2UnbGwgcHJvYmFibHkgYmUgcmlnaHQuCisgICAg
ICAgICAgICBKU1ZhbHVlT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBub2RlLT5jaGlsZDIoKSk7CiAg
ICAgICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7CiAgICAgICAgICAgICBHUFJS
ZWcgcHJvcGVydHlUYWdHUFIgPSBwcm9wZXJ0eS50YWdHUFIoKTsKICAgICAgICAgICAgIEdQUlJl
ZyBwcm9wZXJ0eVBheWxvYWRHUFIgPSBwcm9wZXJ0eS5wYXlsb2FkR1BSKCk7CkBAIC0yNjE0LDE0
ICsyNjA5LDE0IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAg
ICAgICAgICAgIEdQUlJlc3VsdCByZXN1bHRQYXlsb2FkKHRoaXMpOwogICAgICAgICAgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25HZXRCeVZhbENlbGwsIHJlc3VsdFRhZy5ncHIoKSwgcmVzdWx0
UGF5bG9hZC5ncHIoKSwgYmFzZUdQUiwgcHJvcGVydHlUYWdHUFIsIHByb3BlcnR5UGF5bG9hZEdQ
Uik7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0VGFnLmdw
cigpLCByZXN1bHRQYXlsb2FkLmdwcigpLCBtX2NvbXBpbGVJbmRleCk7CisgICAgICAgICAgICBq
c1ZhbHVlUmVzdWx0KHJlc3VsdFRhZy5ncHIoKSwgcmVzdWx0UGF5bG9hZC5ncHIoKSwgbm9kZSk7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIEFycmF5OjpJbnQz
MjoKICAgICAgICAgY2FzZSBBcnJheTo6Q29udGlndW91czogewotICAgICAgICAgICAgaWYgKG5v
ZGUuYXJyYXlNb2RlKCkuaXNJbkJvdW5kcygpKSB7Ci0gICAgICAgICAgICAgICAgU3BlY3VsYXRl
U3RyaWN0SW50MzJPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG5vZGUuY2hpbGQyKCkpOwotICAgICAg
ICAgICAgICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgbm9kZS5jaGlsZDMoKSk7Cisg
ICAgICAgICAgICBpZiAobm9kZS0+YXJyYXlNb2RlKCkuaXNJbkJvdW5kcygpKSB7CisgICAgICAg
ICAgICAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG5vZGUt
PmNoaWxkMigpKTsKKyAgICAgICAgICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMs
IG5vZGUtPmNoaWxkMygpKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIEdQUlJlZyBw
cm9wZXJ0eVJlZyA9IHByb3BlcnR5LmdwcigpOwogICAgICAgICAgICAgICAgIEdQUlJlZyBzdG9y
YWdlUmVnID0gc3RvcmFnZS5ncHIoKTsKQEAgLTI2MjksMzIgKzI2MjQsMzIgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAgICAgICAgIGlmICghbV9j
b21waWxlT2theSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgCi0g
ICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhPdXRPZkJvdW5kcywgSlNWYWx1ZVJlZ3Mo
KSwgTm9Ob2RlLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBw
cm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQnV0dGVyZmx5
OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSkpOworICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9u
Q2hlY2soT3V0T2ZCb3VuZHMsIEpTVmFsdWVSZWdzKCksIDAsIG1faml0LmJyYW5jaDMyKE1hY3Jv
QXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhzdG9yYWdlUmVnLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpKSk7CiAg
ICAgICAgICAgICAKICAgICAgICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0UGF5bG9hZCh0
aGlzKTsKLSAgICAgICAgICAgICAgICBpZiAobm9kZS5hcnJheU1vZGUoKS50eXBlKCkgPT0gQXJy
YXk6OkludDMyKSB7CisgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmFycmF5TW9kZSgpLnR5cGUo
KSA9PSBBcnJheTo6SW50MzIpIHsKICAgICAgICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVj
aygKLSAgICAgICAgICAgICAgICAgICAgICAgIE91dE9mQm91bmRzLCBKU1ZhbHVlUmVncygpLCBO
b05vZGUsCisgICAgICAgICAgICAgICAgICAgICAgICBPdXRPZkJvdW5kcywgSlNWYWx1ZVJlZ3Mo
KSwgMCwKICAgICAgICAgICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaDMyKAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3Bl
cnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEpTVmFs
dWUsIHUuYXNCaXRzLnRhZykpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRydXN0ZWRJ
bW0zMihKU1ZhbHVlOjpFbXB0eVZhbHVlVGFnKSkpOwogICAgICAgICAgICAgICAgICAgICBtX2pp
dC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJl
ZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1
LmFzQml0cy5wYXlsb2FkKSksIHJlc3VsdFBheWxvYWQuZ3ByKCkpOwotICAgICAgICAgICAgICAg
ICAgICBpbnRlZ2VyUmVzdWx0KHJlc3VsdFBheWxvYWQuZ3ByKCksIG1fY29tcGlsZUluZGV4KTsK
KyAgICAgICAgICAgICAgICAgICAgaW50ZWdlclJlc3VsdChyZXN1bHRQYXlsb2FkLmdwcigpLCBu
b2RlKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHRUYWcodGhp
cyk7CiAgICAgICAgICAgICAgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5k
ZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBP
QkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSksIHJlc3VsdFRhZy5ncHIoKSk7
Ci0gICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhMb2FkRnJvbUhvbGUsIEpTVmFsdWVS
ZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCByZXN1
bHRUYWcuZ3ByKCksIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpFbXB0eVZhbHVlVGFnKSkpOworICAg
ICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soTG9hZEZyb21Ib2xlLCBKU1ZhbHVlUmVncygp
LCAwLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIHJlc3VsdFRhZy5ncHIo
KSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkVtcHR5VmFsdWVUYWcpKSk7CiAgICAgICAgICAgICAg
ICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJv
cGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBPQkpFQ1RfT0ZGU0VUT0YoSlNW
YWx1ZSwgdS5hc0JpdHMucGF5bG9hZCkpLCByZXN1bHRQYXlsb2FkLmdwcigpKTsKLSAgICAgICAg
ICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFRhZy5ncHIoKSwgcmVzdWx0UGF5bG9hZC5ncHIo
KSwgbV9jb21waWxlSW5kZXgpOworICAgICAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0
VGFnLmdwcigpLCByZXN1bHRQYXlsb2FkLmdwcigpLCBub2RlKTsKICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQg
YmFzZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKLSAgICAgICAgICAgIFNwZWN1bGF0ZVN0cmljdElu
dDMyT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBub2RlLmNoaWxkMigpKTsKLSAgICAgICAgICAgIFN0
b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgbm9kZS5jaGlsZDMoKSk7CisgICAgICAgICAgICBT
cGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAg
ICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBub2RlLT5jaGls
ZDIoKSk7CisgICAgICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG5vZGUtPmNo
aWxkMygpKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgR1BSUmVnIGJhc2VSZWcgPSBiYXNl
LmdwcigpOwogICAgICAgICAgICAgR1BSUmVnIHByb3BlcnR5UmVnID0gcHJvcGVydHkuZ3ByKCk7
CkBAIC0yNjgxLDIwICsyNjc2LDIwIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9k
ZSYgbm9kZSkKICAgICAgICAgICAgICAgICAgICAgc2xvd0Nhc2VzLCB0aGlzLCBvcGVyYXRpb25H
ZXRCeVZhbEFycmF5SW50LAogICAgICAgICAgICAgICAgICAgICBKU1ZhbHVlUmVncyhyZXN1bHRU
YWdSZWcsIHJlc3VsdFBheWxvYWRSZWcpLCBiYXNlUmVnLCBwcm9wZXJ0eVJlZykpOwogICAgICAg
ICAgICAgCi0gICAgICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFRhZ1JlZywgcmVzdWx0UGF5
bG9hZFJlZywgbV9jb21waWxlSW5kZXgpOworICAgICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1
bHRUYWdSZWcsIHJlc3VsdFBheWxvYWRSZWcsIG5vZGUpOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIH0KICAgICAgICAgY2FzZSBBcnJheTo6RG91YmxlOiB7Ci0gICAgICAgICAgICBpZiAo
bm9kZS5hcnJheU1vZGUoKS5pc0luQm91bmRzKCkpIHsKLSAgICAgICAgICAgICAgICBpZiAobm9k
ZS5hcnJheU1vZGUoKS5pc1NhbmVDaGFpbigpKSB7Ci0gICAgICAgICAgICAgICAgICAgIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBtX2ppdC5nbG9iYWxPYmplY3RGb3Iobm9kZS5jb2Rl
T3JpZ2luKTsKKyAgICAgICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS5pc0luQm91bmRzKCkp
IHsKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+YXJyYXlNb2RlKCkuaXNTYW5lQ2hhaW4oKSkg
eworICAgICAgICAgICAgICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbV9q
aXQuZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPmNvZGVPcmlnaW4pOwogICAgICAgICAgICAgICAgICAg
ICBBU1NFUlQoZ2xvYmFsT2JqZWN0LT5hcnJheVByb3RvdHlwZUNoYWluSXNTYW5lKCkpOwogICAg
ICAgICAgICAgICAgICAgICBnbG9iYWxPYmplY3QtPmFycmF5UHJvdG90eXBlKCktPnN0cnVjdHVy
ZSgpLT5hZGRUcmFuc2l0aW9uV2F0Y2hwb2ludChzcGVjdWxhdGlvbldhdGNocG9pbnQoKSk7CiAg
ICAgICAgICAgICAgICAgICAgIGdsb2JhbE9iamVjdC0+b2JqZWN0UHJvdG90eXBlKCktPnN0cnVj
dHVyZSgpLT5hZGRUcmFuc2l0aW9uV2F0Y2hwb2ludChzcGVjdWxhdGlvbldhdGNocG9pbnQoKSk7
CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIFNw
ZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBub2RlLmNoaWxkMigpKTsK
LSAgICAgICAgICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG5vZGUuY2hpbGQz
KCkpOworICAgICAgICAgICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBwcm9wZXJ0
eSh0aGlzLCBub2RlLT5jaGlsZDIoKSk7CisgICAgICAgICAgICAgICAgU3RvcmFnZU9wZXJhbmQg
c3RvcmFnZSh0aGlzLCBub2RlLT5jaGlsZDMoKSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAg
ICAgICBHUFJSZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIoKTsKICAgICAgICAgICAgICAg
ICBHUFJSZWcgc3RvcmFnZVJlZyA9IHN0b3JhZ2UuZ3ByKCk7CkBAIC0yNzAyLDE5ICsyNjk3LDE5
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgICAg
ICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgICAgIAotICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soT3V0T2ZCb3VuZHMs
IEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFi
b3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VS
ZWcsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpKTsKKyAgICAgICAgICAgICAg
ICBzcGVjdWxhdGlvbkNoZWNrKE91dE9mQm91bmRzLCBKU1ZhbHVlUmVncygpLCAwLCBtX2ppdC5i
cmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywgTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xl
bmd0aCgpKSkpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgRlBSVGVtcG9yYXJ5IHJl
c3VsdCh0aGlzKTsKICAgICAgICAgICAgICAgICBtX2ppdC5sb2FkRG91YmxlKE1hY3JvQXNzZW1i
bGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpU
aW1lc0VpZ2h0KSwgcmVzdWx0LmZwcigpKTsKLSAgICAgICAgICAgICAgICBpZiAoIW5vZGUuYXJy
YXlNb2RlKCkuaXNTYW5lQ2hhaW4oKSkKLSAgICAgICAgICAgICAgICAgICAgc3BlY3VsYXRpb25D
aGVjayhMb2FkRnJvbUhvbGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoRG91
YmxlKE1hY3JvQXNzZW1ibGVyOjpEb3VibGVOb3RFcXVhbE9yVW5vcmRlcmVkLCByZXN1bHQuZnBy
KCksIHJlc3VsdC5mcHIoKSkpOwotICAgICAgICAgICAgICAgIGRvdWJsZVJlc3VsdChyZXN1bHQu
ZnByKCksIG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAgICAgICAgICBpZiAoIW5vZGUtPmFycmF5
TW9kZSgpLmlzU2FuZUNoYWluKCkpCisgICAgICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hl
Y2soTG9hZEZyb21Ib2xlLCBKU1ZhbHVlUmVncygpLCAwLCBtX2ppdC5icmFuY2hEb3VibGUoTWFj
cm9Bc3NlbWJsZXI6OkRvdWJsZU5vdEVxdWFsT3JVbm9yZGVyZWQsIHJlc3VsdC5mcHIoKSwgcmVz
dWx0LmZwcigpKSk7CisgICAgICAgICAgICAgICAgZG91YmxlUmVzdWx0KHJlc3VsdC5mcHIoKSwg
bm9kZSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAg
ICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS5jaGlsZDEoKSk7Ci0gICAg
ICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhpcywgbm9kZS5j
aGlsZDIoKSk7Ci0gICAgICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG5vZGUu
Y2hpbGQzKCkpOworICAgICAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBu
b2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQg
cHJvcGVydHkodGhpcywgbm9kZS0+Y2hpbGQyKCkpOworICAgICAgICAgICAgU3RvcmFnZU9wZXJh
bmQgc3RvcmFnZSh0aGlzLCBub2RlLT5jaGlsZDMoKSk7CiAgICAgICAgICAgICAKICAgICAgICAg
ICAgIEdQUlJlZyBiYXNlUmVnID0gYmFzZS5ncHIoKTsKICAgICAgICAgICAgIEdQUlJlZyBwcm9w
ZXJ0eVJlZyA9IHByb3BlcnR5LmdwcigpOwpAQCAtMjc0MywzNiArMjczOCwzNiBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgICAgICAgICAgICAgIHNs
b3dDYXNlcywgdGhpcywgb3BlcmF0aW9uR2V0QnlWYWxBcnJheUludCwKICAgICAgICAgICAgICAg
ICAgICAgSlNWYWx1ZVJlZ3MocmVzdWx0VGFnUmVnLCByZXN1bHRQYXlsb2FkUmVnKSwgYmFzZVJl
ZywgcHJvcGVydHlSZWcpKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAganNWYWx1ZVJlc3Vs
dChyZXN1bHRUYWdSZWcsIHJlc3VsdFBheWxvYWRSZWcsIG1fY29tcGlsZUluZGV4KTsKKyAgICAg
ICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0VGFnUmVnLCByZXN1bHRQYXlsb2FkUmVnLCBub2Rl
KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgQXJyYXk6OkFy
cmF5U3RvcmFnZToKICAgICAgICAgY2FzZSBBcnJheTo6U2xvd1B1dEFycmF5U3RvcmFnZTogewot
ICAgICAgICAgICAgaWYgKG5vZGUuYXJyYXlNb2RlKCkuaXNJbkJvdW5kcygpKSB7Ci0gICAgICAg
ICAgICAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG5vZGUu
Y2hpbGQyKCkpOwotICAgICAgICAgICAgICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywg
bm9kZS5jaGlsZDMoKSk7CisgICAgICAgICAgICBpZiAobm9kZS0+YXJyYXlNb2RlKCkuaXNJbkJv
dW5kcygpKSB7CisgICAgICAgICAgICAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIHBy
b3BlcnR5KHRoaXMsIG5vZGUtPmNoaWxkMigpKTsKKyAgICAgICAgICAgICAgICBTdG9yYWdlT3Bl
cmFuZCBzdG9yYWdlKHRoaXMsIG5vZGUtPmNoaWxkMygpKTsKICAgICAgICAgICAgICAgICBHUFJS
ZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIoKTsKICAgICAgICAgICAgICAgICBHUFJSZWcg
c3RvcmFnZVJlZyA9IHN0b3JhZ2UuZ3ByKCk7CiAgICAgICAgIAogICAgICAgICAgICAgICAgIGlm
ICghbV9jb21waWxlT2theSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAg
ICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhPdXRPZkJvdW5kcywgSlNWYWx1ZVJlZ3MoKSwgTm9O
b2RlLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0
eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQXJyYXlTdG9yYWdlOjp2
ZWN0b3JMZW5ndGhPZmZzZXQoKSkpKTsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNr
KE91dE9mQm91bmRzLCBKU1ZhbHVlUmVncygpLCAwLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2Vt
Ymxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
c3RvcmFnZVJlZywgQXJyYXlTdG9yYWdlOjp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpKTsKIAogICAg
ICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHRUYWcodGhpcyk7CiAgICAgICAgICAgICAg
ICAgR1BSVGVtcG9yYXJ5IHJlc3VsdFBheWxvYWQodGhpcyk7CiAKICAgICAgICAgICAgICAgICBt
X2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0
eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0
b3JhZ2UsIG1fdmVjdG9yWzBdKSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy50
YWcpKSwgcmVzdWx0VGFnLmdwcigpKTsKLSAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNr
KExvYWRGcm9tSG9sZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2gzMihNYWNy
b0Fzc2VtYmxlcjo6RXF1YWwsIHJlc3VsdFRhZy5ncHIoKSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6
OkVtcHR5VmFsdWVUYWcpKSk7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhMb2Fk
RnJvbUhvbGUsIEpTVmFsdWVSZWdzKCksIDAsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVy
OjpFcXVhbCwgcmVzdWx0VGFnLmdwcigpLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6RW1wdHlWYWx1
ZVRhZykpKTsKICAgICAgICAgICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkJh
c2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWln
aHQsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSArIE9CSkVDVF9P
RkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy5wYXlsb2FkKSksIHJlc3VsdFBheWxvYWQuZ3ByKCkp
OwogICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRUYWcu
Z3ByKCksIHJlc3VsdFBheWxvYWQuZ3ByKCksIG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAgICAg
ICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFRhZy5ncHIoKSwgcmVzdWx0UGF5bG9hZC5ncHIoKSwg
bm9kZSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAg
ICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS5jaGlsZDEoKSk7Ci0gICAg
ICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhpcywgbm9kZS5j
aGlsZDIoKSk7Ci0gICAgICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG5vZGUu
Y2hpbGQzKCkpOworICAgICAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBu
b2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQg
cHJvcGVydHkodGhpcywgbm9kZS0+Y2hpbGQyKCkpOworICAgICAgICAgICAgU3RvcmFnZU9wZXJh
bmQgc3RvcmFnZSh0aGlzLCBub2RlLT5jaGlsZDMoKSk7CiAgICAgICAgICAgICBHUFJSZWcgcHJv
cGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIoKTsKICAgICAgICAgICAgIEdQUlJlZyBzdG9yYWdlUmVn
ID0gc3RvcmFnZS5ncHIoKTsKICAgICAgICAgICAgIEdQUlJlZyBiYXNlUmVnID0gYmFzZS5ncHIo
KTsKQEAgLTI4MDMsNyArMjc5OCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9k
ZSYgbm9kZSkKICAgICAgICAgICAgICAgICAgICAgSlNWYWx1ZVJlZ3MocmVzdWx0VGFnUmVnLCBy
ZXN1bHRQYXlsb2FkUmVnKSwKICAgICAgICAgICAgICAgICAgICAgYmFzZVJlZywgcHJvcGVydHlS
ZWcpKTsKIAotICAgICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRUYWdSZWcsIHJlc3VsdFBh
eWxvYWRSZWcsIG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVz
dWx0VGFnUmVnLCByZXN1bHRQYXlsb2FkUmVnLCBub2RlKTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICB9CiAgICAgICAgIGNhc2UgQXJyYXk6OlN0cmluZzoKQEAgLTI4NTMsMTggKzI4NDgs
MTggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICBF
ZGdlIGNoaWxkMyA9IG1faml0LmdyYXBoKCkudmFyQXJnQ2hpbGQobm9kZSwgMik7CiAgICAgICAg
IEVkZ2UgY2hpbGQ0ID0gbV9qaXQuZ3JhcGgoKS52YXJBcmdDaGlsZChub2RlLCAzKTsKICAgICAg
ICAgCi0gICAgICAgIEFycmF5TW9kZSBhcnJheU1vZGUgPSBub2RlLmFycmF5TW9kZSgpLm1vZGVG
b3JQdXQoKTsKKyAgICAgICAgQXJyYXlNb2RlIGFycmF5TW9kZSA9IG5vZGUtPmFycmF5TW9kZSgp
Lm1vZGVGb3JQdXQoKTsKICAgICAgICAgYm9vbCBhbHJlYWR5SGFuZGxlZCA9IGZhbHNlOwogICAg
ICAgICAKICAgICAgICAgc3dpdGNoIChhcnJheU1vZGUudHlwZSgpKSB7CiAgICAgICAgIGNhc2Ug
QXJyYXk6OlNlbGVjdFVzaW5nUHJlZGljdGlvbnM6CiAgICAgICAgIGNhc2UgQXJyYXk6OkZvcmNl
RXhpdDoKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAg
ICAgICB0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihJbmFkZXF1YXRlQ292ZXJhZ2UsIEpT
VmFsdWVSZWdzKCksIE5vTm9kZSk7CisgICAgICAgICAgICB0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4
ZWN1dGlvbihJbmFkZXF1YXRlQ292ZXJhZ2UsIEpTVmFsdWVSZWdzKCksIDApOwogICAgICAgICAg
ICAgYWxyZWFkeUhhbmRsZWQgPSB0cnVlOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNh
c2UgQXJyYXk6OkdlbmVyaWM6IHsKLSAgICAgICAgICAgIEFTU0VSVChub2RlLm9wKCkgPT0gUHV0
QnlWYWwpOworICAgICAgICAgICAgQVNTRVJUKG5vZGUtPm9wKCkgPT0gUHV0QnlWYWwpOwogICAg
ICAgICAgICAgCiAgICAgICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIGNo
aWxkMSk7IC8vIFNhdmUgYSByZWdpc3Rlciwgc3BlY3VsYXRlIGNlbGwuIFdlJ2xsIHByb2JhYmx5
IGJlIHJpZ2h0LgogICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgcHJvcGVydHkodGhpcywgY2hp
bGQyKTsKQEAgLTI4NzgsNyArMjg3Myw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUo
Tm9kZSYgbm9kZSkKICAgICAgICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7CiAgICAgICAgICAgICBj
YWxsT3BlcmF0aW9uKG1faml0LmNvZGVCbG9jaygpLT5pc1N0cmljdE1vZGUoKSA/IG9wZXJhdGlv
blB1dEJ5VmFsQ2VsbFN0cmljdCA6IG9wZXJhdGlvblB1dEJ5VmFsQ2VsbE5vblN0cmljdCwgYmFz
ZUdQUiwgcHJvcGVydHlUYWdHUFIsIHByb3BlcnR5UGF5bG9hZEdQUiwgdmFsdWVUYWdHUFIsIHZh
bHVlUGF5bG9hZEdQUik7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIG5vUmVzdWx0KG1fY29t
cGlsZUluZGV4KTsKKyAgICAgICAgICAgIG5vUmVzdWx0KG5vZGUpOwogICAgICAgICAgICAgYWxy
ZWFkeUhhbmRsZWQgPSB0cnVlOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTI5
NDcsMTMgKzI5NDIsMTMgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2Rl
KQogICAgICAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBjaGlsZDQpOwogICAg
ICAgICAgICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigpOwogCi0gICAgICAgICAg
ICBpZiAobm9kZS5vcCgpID09IFB1dEJ5VmFsQWxpYXMpIHsKKyAgICAgICAgICAgIGlmIChub2Rl
LT5vcCgpID09IFB1dEJ5VmFsQWxpYXMpIHsKICAgICAgICAgICAgICAgICAvLyBTdG9yZSB0aGUg
dmFsdWUgdG8gdGhlIGFycmF5LgogICAgICAgICAgICAgICAgIEdQUlJlZyBwcm9wZXJ0eVJlZyA9
IHByb3BlcnR5LmdwcigpOwogICAgICAgICAgICAgICAgIG1faml0LnN0b3JlMzIodmFsdWUudGFn
R1BSKCksIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcs
IE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdl
LCBtX3ZlY3RvclswXSkgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSkp
OwogICAgICAgICAgICAgICAgIG1faml0LnN0b3JlMzIodmFsdWUucGF5bG9hZEdQUigpLCBNYWNy
b0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2Vt
Ymxlcjo6VGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3Jb
MF0pICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBheWxvYWQpKSk7CiAgICAg
ICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgbm9SZXN1bHQobV9jb21waWxlSW5kZXgpOwor
ICAgICAgICAgICAgICAgIG5vUmVzdWx0KG5vZGUpOwogICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgfQogCkBAIC0yOTYxLDE0ICsyOTU2LDE0IEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKIAogICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1
bXAgYmV5b25kQXJyYXlCb3VuZHMgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJv
dmVPckVxdWFsLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJl
ZywgQXJyYXlTdG9yYWdlOjp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpOwogICAgICAgICAgICAgaWYg
KCFhcnJheU1vZGUuaXNPdXRPZkJvdW5kcygpKQotICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9u
Q2hlY2soT3V0T2ZCb3VuZHMsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgYmV5b25kQXJyYXlCb3Vu
ZHMpOworICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soT3V0T2ZCb3VuZHMsIEpTVmFs
dWVSZWdzKCksIDAsIGJleW9uZEFycmF5Qm91bmRzKTsKICAgICAgICAgICAgIGVsc2UKICAgICAg
ICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKGJleW9uZEFycmF5Qm91bmRzKTsKIAogICAgICAg
ICAgICAgLy8gQ2hlY2sgaWYgd2UncmUgd3JpdGluZyB0byBhIGhvbGU7IGlmIHNvIGluY3JlbWVu
dCBtX251bVZhbHVlc0luVmVjdG9yLgogICAgICAgICAgICAgaWYgKGFycmF5TW9kZS5pc0luQm91
bmRzKCkpIHsKICAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAotICAgICAgICAgICAg
ICAgICAgICBTdG9yZVRvSG9sZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLAorICAgICAgICAgICAg
ICAgICAgICBTdG9yZVRvSG9sZSwgSlNWYWx1ZVJlZ3MoKSwgMCwKICAgICAgICAgICAgICAgICAg
ICAgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6
QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNF
aWdodCwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pICsgT0JKRUNU
X09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6
RW1wdHlWYWx1ZVRhZykpKTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6Okp1bXAgbm90SG9sZVZhbHVlID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9B
c3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcs
IHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9G
KEFycmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUu
YXNCaXRzLnRhZykpLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6RW1wdHlWYWx1ZVRhZykpOwpAQCAt
MzAwOCw3ICszMDAzLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2Rl
KQogICAgICAgICAgICAgICAgICAgICAgICAgTm9SZXN1bHQsIGJhc2VSZWcsIHByb3BlcnR5UmVn
LCB2YWx1ZVRhZ1JlZywgdmFsdWVQYXlsb2FkUmVnKSk7CiAgICAgICAgICAgICB9CiAKLSAgICAg
ICAgICAgIG5vUmVzdWx0KG1fY29tcGlsZUluZGV4LCBVc2VDaGlsZHJlbkNhbGxlZEV4cGxpY2l0
bHkpOworICAgICAgICAgICAgbm9SZXN1bHQobm9kZSwgVXNlQ2hpbGRyZW5DYWxsZWRFeHBsaWNp
dGx5KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKQEAgLTMw
NjUsOSArMzA2MCw5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkK
ICAgICAgICAgaWYgKGNvbXBpbGVSZWdFeHBFeGVjKG5vZGUpKQogICAgICAgICAgICAgcmV0dXJu
OwogCi0gICAgICAgIGlmICghbm9kZS5hZGp1c3RlZFJlZkNvdW50KCkpIHsKLSAgICAgICAgICAg
IFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS5jaGlsZDEoKSk7Ci0gICAgICAg
ICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBhcmd1bWVudCh0aGlzLCBub2RlLmNoaWxkMigpKTsK
KyAgICAgICAgaWYgKCFub2RlLT5hZGp1c3RlZFJlZkNvdW50KCkpIHsKKyAgICAgICAgICAgIFNw
ZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAg
ICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYXJndW1lbnQodGhpcywgbm9kZS0+Y2hpbGQyKCkpOwog
ICAgICAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOwogICAgICAgICAgICAgR1BS
UmVnIGFyZ3VtZW50R1BSID0gYXJndW1lbnQuZ3ByKCk7CiAgICAgICAgICAgICAKQEAgLTMwNzcs
MTIgKzMwNzIsMTIgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQog
ICAgICAgICAgICAgCiAgICAgICAgICAgICAvLyBNdXN0IHVzZSBqc1ZhbHVlUmVzdWx0IGJlY2F1
c2Ugb3RoZXJ3aXNlIHdlIHNjcmV3IHVwIHJlZ2lzdGVyCiAgICAgICAgICAgICAvLyBhbGxvY2F0
aW9uLCB3aGljaCB0aGlua3MgdGhhdCB0aGlzIG5vZGUgaGFzIGEgcmVzdWx0LgotICAgICAgICAg
ICAgYm9vbGVhblJlc3VsdChyZXN1bHQuZ3ByKCksIG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAg
ICAgIGJvb2xlYW5SZXN1bHQocmVzdWx0LmdwcigpLCBub2RlKTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9CiAKLSAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBu
b2RlLmNoaWxkMSgpKTsKLSAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYXJndW1lbnQodGhp
cywgbm9kZS5jaGlsZDIoKSk7CisgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhp
cywgbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBhcmd1bWVu
dCh0aGlzLCBub2RlLT5jaGlsZDIoKSk7CiAgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5n
cHIoKTsKICAgICAgICAgR1BSUmVnIGFyZ3VtZW50R1BSID0gYXJndW1lbnQuZ3ByKCk7CiAgICAg
ICAgIApAQCAtMzA5MSwxMyArMzA4NiwxMyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
KE5vZGUmIG5vZGUpCiAgICAgICAgIEdQUlJlc3VsdCByZXN1bHRQYXlsb2FkKHRoaXMpOwogICAg
ICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblJlZ0V4cEV4ZWMsIHJlc3VsdFRhZy5ncHIoKSwg
cmVzdWx0UGF5bG9hZC5ncHIoKSwgYmFzZUdQUiwgYXJndW1lbnRHUFIpOwogICAgICAgICAKLSAg
ICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRUYWcuZ3ByKCksIHJlc3VsdFBheWxvYWQuZ3ByKCks
IG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRUYWcuZ3ByKCks
IHJlc3VsdFBheWxvYWQuZ3ByKCksIG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAg
ICAgIAogICAgIGNhc2UgUmVnRXhwVGVzdDogewotICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFu
ZCBiYXNlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwotICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFu
ZCBhcmd1bWVudCh0aGlzLCBub2RlLmNoaWxkMigpKTsKKyAgICAgICAgU3BlY3VsYXRlQ2VsbE9w
ZXJhbmQgYmFzZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIFNwZWN1bGF0ZUNlbGxP
cGVyYW5kIGFyZ3VtZW50KHRoaXMsIG5vZGUtPmNoaWxkMigpKTsKICAgICAgICAgR1BSUmVnIGJh
c2VHUFIgPSBiYXNlLmdwcigpOwogICAgICAgICBHUFJSZWcgYXJndW1lbnRHUFIgPSBhcmd1bWVu
dC5ncHIoKTsKICAgICAgICAgCkBAIC0zMTA2LDI1ICszMTAxLDI1IEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25SZWdFeHBUZXN0LCByZXN1bHQuZ3ByKCksIGJhc2VHUFIsIGFyZ3VtZW50R1BSKTsKICAgICAg
ICAgCiAgICAgICAgIC8vIElmIHdlIGFkZCBhIERhdGFGb3JtYXRCb29sLCB3ZSBzaG91bGQgdXNl
IGl0IGhlcmUuCi0gICAgICAgIGJvb2xlYW5SZXN1bHQocmVzdWx0LmdwcigpLCBtX2NvbXBpbGVJ
bmRleCk7CisgICAgICAgIGJvb2xlYW5SZXN1bHQocmVzdWx0LmdwcigpLCBub2RlKTsKICAgICAg
ICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKICAgICBjYXNlIEFycmF5UHVzaDogewotICAgICAg
ICBBU1NFUlQobm9kZS5hcnJheU1vZGUoKS5pc0pTQXJyYXkoKSk7CisgICAgICAgIEFTU0VSVChu
b2RlLT5hcnJheU1vZGUoKS5pc0pTQXJyYXkoKSk7CiAgICAgICAgIAotICAgICAgICBTcGVjdWxh
dGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOworICAgICAgICBTcGVjdWxh
dGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgR1BSVGVt
cG9yYXJ5IHN0b3JhZ2VMZW5ndGgodGhpcyk7CiAgICAgICAgIAogICAgICAgICBHUFJSZWcgYmFz
ZUdQUiA9IGJhc2UuZ3ByKCk7CiAgICAgICAgIEdQUlJlZyBzdG9yYWdlTGVuZ3RoR1BSID0gc3Rv
cmFnZUxlbmd0aC5ncHIoKTsKICAgICAgICAgCi0gICAgICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3Jh
Z2UodGhpcywgbm9kZS5jaGlsZDMoKSk7CisgICAgICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2Uo
dGhpcywgbm9kZS0+Y2hpbGQzKCkpOwogICAgICAgICBHUFJSZWcgc3RvcmFnZUdQUiA9IHN0b3Jh
Z2UuZ3ByKCk7CiAgICAgICAgIAotICAgICAgICBzd2l0Y2ggKG5vZGUuYXJyYXlNb2RlKCkudHlw
ZSgpKSB7CisgICAgICAgIHN3aXRjaCAobm9kZS0+YXJyYXlNb2RlKCkudHlwZSgpKSB7CiAgICAg
ICAgIGNhc2UgQXJyYXk6OkludDMyOiB7Ci0gICAgICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3Bl
cmFuZCB2YWx1ZSh0aGlzLCBub2RlLmNoaWxkMigpKTsKKyAgICAgICAgICAgIFNwZWN1bGF0ZUlu
dGVnZXJPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUtPmNoaWxkMigpKTsKICAgICAgICAgICAgIEdQ
UlJlZyB2YWx1ZVBheWxvYWRHUFIgPSB2YWx1ZS5ncHIoKTsKICAgICAgICAgICAgIAogICAgICAg
ICAgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIEJ1
dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSksIHN0b3JhZ2VMZW5ndGhHUFIpOwpAQCAt
MzE0MSwxOCArMzEzNiwxOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5v
ZGUpCiAgICAgICAgICAgICAgICAgICAgIEpTVmFsdWVSZWdzKHN0b3JhZ2VHUFIsIHN0b3JhZ2VM
ZW5ndGhHUFIpLAogICAgICAgICAgICAgICAgICAgICBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50
MzJUYWcpLCB2YWx1ZVBheWxvYWRHUFIsIGJhc2VHUFIpKTsKICAgICAgICAgCi0gICAgICAgICAg
ICBqc1ZhbHVlUmVzdWx0KHN0b3JhZ2VHUFIsIHN0b3JhZ2VMZW5ndGhHUFIsIG1fY29tcGlsZUlu
ZGV4KTsKKyAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQoc3RvcmFnZUdQUiwgc3RvcmFnZUxlbmd0
aEdQUiwgbm9kZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAg
CiAgICAgICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3VvdXM6IHsKLSAgICAgICAgICAgIEpTVmFsdWVP
cGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUuY2hpbGQyKCkpOworICAgICAgICAgICAgSlNWYWx1ZU9w
ZXJhbmQgdmFsdWUodGhpcywgbm9kZS0+Y2hpbGQyKCkpOwogICAgICAgICAgICAgR1BSUmVnIHZh
bHVlVGFnR1BSID0gdmFsdWUudGFnR1BSKCk7CiAgICAgICAgICAgICBHUFJSZWcgdmFsdWVQYXls
b2FkR1BSID0gdmFsdWUucGF5bG9hZEdQUigpOwogCiAgICAgICAgICAgICBpZiAoSGVhcDo6aXNX
cml0ZUJhcnJpZXJFbmFibGVkKCkpIHsKICAgICAgICAgICAgICAgICBHUFJUZW1wb3Jhcnkgc2Ny
YXRjaCh0aGlzKTsKLSAgICAgICAgICAgICAgICB3cml0ZUJhcnJpZXIoYmFzZUdQUiwgdmFsdWVU
YWdHUFIsIG5vZGUuY2hpbGQyKCksIFdyaXRlQmFycmllckZvclByb3BlcnR5QWNjZXNzLCBzY3Jh
dGNoLmdwcigpLCBzdG9yYWdlTGVuZ3RoR1BSKTsKKyAgICAgICAgICAgICAgICB3cml0ZUJhcnJp
ZXIoYmFzZUdQUiwgdmFsdWVUYWdHUFIsIG5vZGUtPmNoaWxkMigpLCBXcml0ZUJhcnJpZXJGb3JQ
cm9wZXJ0eUFjY2Vzcywgc2NyYXRjaC5ncHIoKSwgc3RvcmFnZUxlbmd0aEdQUik7CiAgICAgICAg
ICAgICB9CiAKICAgICAgICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhzdG9yYWdlR1BSLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpLCBzdG9yYWdl
TGVuZ3RoR1BSKTsKQEAgLTMxNjksMTkgKzMxNjQsMTkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAgICAgICAgICAgICBKU1ZhbHVlUmVncyhzdG9y
YWdlR1BSLCBzdG9yYWdlTGVuZ3RoR1BSKSwKICAgICAgICAgICAgICAgICAgICAgdmFsdWVUYWdH
UFIsIHZhbHVlUGF5bG9hZEdQUiwgYmFzZUdQUikpOwogICAgICAgICAKLSAgICAgICAgICAgIGpz
VmFsdWVSZXN1bHQoc3RvcmFnZUdQUiwgc3RvcmFnZUxlbmd0aEdQUiwgbV9jb21waWxlSW5kZXgp
OworICAgICAgICAgICAganNWYWx1ZVJlc3VsdChzdG9yYWdlR1BSLCBzdG9yYWdlTGVuZ3RoR1BS
LCBub2RlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKICAg
ICAgICAgY2FzZSBBcnJheTo6RG91YmxlOiB7Ci0gICAgICAgICAgICBTcGVjdWxhdGVEb3VibGVP
cGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUuY2hpbGQyKCkpOworICAgICAgICAgICAgU3BlY3VsYXRl
RG91YmxlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLT5jaGlsZDIoKSk7CiAgICAgICAgICAgICBG
UFJSZWcgdmFsdWVGUFIgPSB2YWx1ZS5mcHIoKTsKIAotICAgICAgICAgICAgaWYgKCFpc1JlYWxO
dW1iZXJTcGVjdWxhdGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDIoKSkubV90eXBlKSkg
eworICAgICAgICAgICAgaWYgKCFpc1JlYWxOdW1iZXJTcGVjdWxhdGlvbihtX3N0YXRlLmZvck5v
ZGUobm9kZS0+Y2hpbGQyKCkpLm1fdHlwZSkpIHsKICAgICAgICAgICAgICAgICAvLyBGSVhNRTog
V2UgbmVlZCBhIHdheSBvZiBwcm9maWxpbmcgdGhlc2UsIGFuZCB3ZSBuZWVkIHRvIGhvaXN0IHRo
ZW0gaW50bwogICAgICAgICAgICAgICAgIC8vIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQuCiAgICAg
ICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjaygKLSAgICAgICAgICAgICAgICAgICAgQmFkVHlw
ZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLAorICAgICAgICAgICAgICAgICAgICBCYWRUeXBlLCBK
U1ZhbHVlUmVncygpLCAwLAogICAgICAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2hEb3VibGUo
TWFjcm9Bc3NlbWJsZXI6OkRvdWJsZU5vdEVxdWFsT3JVbm9yZGVyZWQsIHZhbHVlRlBSLCB2YWx1
ZUZQUikpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgCkBAIC0zMTk4LDI0ICszMTkzLDI0
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgICAg
ICAgICAgICAgSlNWYWx1ZVJlZ3Moc3RvcmFnZUdQUiwgc3RvcmFnZUxlbmd0aEdQUiksCiAgICAg
ICAgICAgICAgICAgICAgIHZhbHVlRlBSLCBiYXNlR1BSKSk7CiAgICAgICAgIAotICAgICAgICAg
ICAganNWYWx1ZVJlc3VsdChzdG9yYWdlR1BSLCBzdG9yYWdlTGVuZ3RoR1BSLCBtX2NvbXBpbGVJ
bmRleCk7CisgICAgICAgICAgICBqc1ZhbHVlUmVzdWx0KHN0b3JhZ2VHUFIsIHN0b3JhZ2VMZW5n
dGhHUFIsIG5vZGUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAg
IAogICAgICAgICBjYXNlIEFycmF5OjpBcnJheVN0b3JhZ2U6IHsKLSAgICAgICAgICAgIEpTVmFs
dWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUuY2hpbGQyKCkpOworICAgICAgICAgICAgSlNWYWx1
ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS0+Y2hpbGQyKCkpOwogICAgICAgICAgICAgR1BSUmVn
IHZhbHVlVGFnR1BSID0gdmFsdWUudGFnR1BSKCk7CiAgICAgICAgICAgICBHUFJSZWcgdmFsdWVQ
YXlsb2FkR1BSID0gdmFsdWUucGF5bG9hZEdQUigpOwogCiAgICAgICAgICAgICBpZiAoSGVhcDo6
aXNXcml0ZUJhcnJpZXJFbmFibGVkKCkpIHsKICAgICAgICAgICAgICAgICBHUFJUZW1wb3Jhcnkg
c2NyYXRjaCh0aGlzKTsKLSAgICAgICAgICAgICAgICB3cml0ZUJhcnJpZXIoYmFzZUdQUiwgdmFs
dWVUYWdHUFIsIG5vZGUuY2hpbGQyKCksIFdyaXRlQmFycmllckZvclByb3BlcnR5QWNjZXNzLCBz
Y3JhdGNoLmdwcigpLCBzdG9yYWdlTGVuZ3RoR1BSKTsKKyAgICAgICAgICAgICAgICB3cml0ZUJh
cnJpZXIoYmFzZUdQUiwgdmFsdWVUYWdHUFIsIG5vZGUtPmNoaWxkMigpLCBXcml0ZUJhcnJpZXJG
b3JQcm9wZXJ0eUFjY2Vzcywgc2NyYXRjaC5ncHIoKSwgc3RvcmFnZUxlbmd0aEdQUik7CiAgICAg
ICAgICAgICB9CiAKICAgICAgICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhzdG9yYWdlR1BSLCBBcnJheVN0b3JhZ2U6Omxlbmd0aE9mZnNldCgpKSwgc3RvcmFnZUxl
bmd0aEdQUik7CiAgICAgICAgIAogICAgICAgICAgICAgLy8gUmVmdXNlIHRvIGhhbmRsZSBiaXph
cnJlIGxlbmd0aHMuCi0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKFVuY291bnRhYmxlLCBK
U1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92
ZSwgc3RvcmFnZUxlbmd0aEdQUiwgVHJ1c3RlZEltbTMyKDB4N2ZmZmZmZmUpKSk7CisgICAgICAg
ICAgICBzcGVjdWxhdGlvbkNoZWNrKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCAwLCBtX2pp
dC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmUsIHN0b3JhZ2VMZW5ndGhHUFIsIFRydXN0
ZWRJbW0zMigweDdmZmZmZmZlKSkpOwogICAgICAgICAKICAgICAgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpKdW1wIHNsb3dQYXRoID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3Zl
T3JFcXVhbCwgc3RvcmFnZUxlbmd0aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFn
ZUdQUiwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpOwogICAgICAgICAKQEAg
LTMyMjksNyArMzIyNCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9k
ZSkKICAgICAgICAgCiAgICAgICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcihzbG93UGF0aENh
bGwoc2xvd1BhdGgsIHRoaXMsIG9wZXJhdGlvbkFycmF5UHVzaCwgSlNWYWx1ZVJlZ3Moc3RvcmFn
ZUdQUiwgc3RvcmFnZUxlbmd0aEdQUiksIHZhbHVlVGFnR1BSLCB2YWx1ZVBheWxvYWRHUFIsIGJh
c2VHUFIpKTsKICAgICAgICAgCi0gICAgICAgICAgICBqc1ZhbHVlUmVzdWx0KHN0b3JhZ2VHUFIs
IHN0b3JhZ2VMZW5ndGhHUFIsIG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAgICAgIGpzVmFsdWVS
ZXN1bHQoc3RvcmFnZUdQUiwgc3RvcmFnZUxlbmd0aEdQUiwgbm9kZSk7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCkBAIC0zMjQxLDEwICszMjM2LDEwIEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICB9CiAgICAgICAgIAog
ICAgIGNhc2UgQXJyYXlQb3A6IHsKLSAgICAgICAgQVNTRVJUKG5vZGUuYXJyYXlNb2RlKCkuaXNK
U0FycmF5KCkpOworICAgICAgICBBU1NFUlQobm9kZS0+YXJyYXlNb2RlKCkuaXNKU0FycmF5KCkp
OwogICAgICAgICAKLSAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2Rl
LmNoaWxkMSgpKTsKLSAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBub2RlLmNo
aWxkMigpKTsKKyAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLT5j
aGlsZDEoKSk7CisgICAgICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgbm9kZS0+Y2hp
bGQyKCkpOwogICAgICAgICBHUFJUZW1wb3JhcnkgdmFsdWVUYWcodGhpcyk7CiAgICAgICAgIEdQ
UlRlbXBvcmFyeSB2YWx1ZVBheWxvYWQodGhpcyk7CiAgICAgICAgIApAQCAtMzI1Myw3ICszMjQ4
LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICBH
UFJSZWcgdmFsdWVQYXlsb2FkR1BSID0gdmFsdWVQYXlsb2FkLmdwcigpOwogICAgICAgICBHUFJS
ZWcgc3RvcmFnZUdQUiA9IHN0b3JhZ2UuZ3ByKCk7CiAgICAgICAgIAotICAgICAgICBzd2l0Y2gg
KG5vZGUuYXJyYXlNb2RlKCkudHlwZSgpKSB7CisgICAgICAgIHN3aXRjaCAobm9kZS0+YXJyYXlN
b2RlKCkudHlwZSgpKSB7CiAgICAgICAgIGNhc2UgQXJyYXk6OkludDMyOgogICAgICAgICBjYXNl
IEFycmF5OjpDb250aWd1b3VzOiB7CiAgICAgICAgICAgICBtX2ppdC5sb2FkMzIoCkBAIC0zMjg0
LDcgKzMyNzksNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAg
ICAgICAgICAgICAgICAgICAgIHNsb3dDYXNlLCB0aGlzLCBvcGVyYXRpb25BcnJheVBvcEFuZFJl
Y292ZXJMZW5ndGgsCiAgICAgICAgICAgICAgICAgICAgIEpTVmFsdWVSZWdzKHZhbHVlVGFnR1BS
LCB2YWx1ZVBheWxvYWRHUFIpLCBiYXNlR1BSKSk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAg
IGpzVmFsdWVSZXN1bHQodmFsdWVUYWdHUFIsIHZhbHVlUGF5bG9hZEdQUiwgbV9jb21waWxlSW5k
ZXgpOworICAgICAgICAgICAganNWYWx1ZVJlc3VsdCh2YWx1ZVRhZ0dQUiwgdmFsdWVQYXlsb2Fk
R1BSLCBub2RlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAK
QEAgLTMzMjIsNyArMzMxNyw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYg
bm9kZSkKICAgICAgICAgICAgICAgICAgICAgc2xvd0Nhc2UsIHRoaXMsIG9wZXJhdGlvbkFycmF5
UG9wQW5kUmVjb3Zlckxlbmd0aCwKICAgICAgICAgICAgICAgICAgICAgSlNWYWx1ZVJlZ3ModmFs
dWVUYWdHUFIsIHZhbHVlUGF5bG9hZEdQUiksIGJhc2VHUFIpKTsKICAgICAgICAgICAgIAotICAg
ICAgICAgICAganNWYWx1ZVJlc3VsdCh2YWx1ZVRhZ0dQUiwgdmFsdWVQYXlsb2FkR1BSLCBtX2Nv
bXBpbGVJbmRleCk7CisgICAgICAgICAgICBqc1ZhbHVlUmVzdWx0KHZhbHVlVGFnR1BSLCB2YWx1
ZVBheWxvYWRHUFIsIG5vZGUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIApAQCAt
MzM2MSw3ICszMzU2LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2Rl
KQogICAgICAgICAgICAgICAgICAgICBzbG93Q2FzZSwgdGhpcywgb3BlcmF0aW9uQXJyYXlQb3As
CiAgICAgICAgICAgICAgICAgICAgIEpTVmFsdWVSZWdzKHZhbHVlVGFnR1BSLCB2YWx1ZVBheWxv
YWRHUFIpLCBiYXNlR1BSKSk7CiAKLSAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQodmFsdWVUYWdH
UFIsIHZhbHVlUGF5bG9hZEdQUiwgbV9jb21waWxlSW5kZXgpOworICAgICAgICAgICAganNWYWx1
ZVJlc3VsdCh2YWx1ZVRhZ0dQUiwgdmFsdWVQYXlsb2FkR1BSLCBub2RlKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKQEAgLTMzNzMsMTggKzMzNjgsMTggQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgIH0KIAogICAgIGNh
c2UgREZHOjpKdW1wOiB7Ci0gICAgICAgIEJsb2NrSW5kZXggdGFrZW4gPSBub2RlLnRha2VuQmxv
Y2tJbmRleCgpOworICAgICAgICBCbG9ja0luZGV4IHRha2VuID0gbm9kZS0+dGFrZW5CbG9ja0lu
ZGV4KCk7CiAgICAgICAgIGp1bXAodGFrZW4pOwotICAgICAgICBub1Jlc3VsdChtX2NvbXBpbGVJ
bmRleCk7CisgICAgICAgIG5vUmVzdWx0KG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9CiAK
ICAgICBjYXNlIEJyYW5jaDoKLSAgICAgICAgaWYgKGF0KG5vZGUuY2hpbGQxKCkpLnNob3VsZFNw
ZWN1bGF0ZUludGVnZXIoKSkgewotICAgICAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQg
b3AodGhpcywgbm9kZS5jaGlsZDEoKSk7CisgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS0+c2hv
dWxkU3BlY3VsYXRlSW50ZWdlcigpKSB7CisgICAgICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3Bl
cmFuZCBvcCh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAg
IEJsb2NrSW5kZXggdGFrZW4gPSBub2RlLnRha2VuQmxvY2tJbmRleCgpOwotICAgICAgICAgICAg
QmxvY2tJbmRleCBub3RUYWtlbiA9IG5vZGUubm90VGFrZW5CbG9ja0luZGV4KCk7CisgICAgICAg
ICAgICBCbG9ja0luZGV4IHRha2VuID0gbm9kZS0+dGFrZW5CbG9ja0luZGV4KCk7CisgICAgICAg
ICAgICBCbG9ja0luZGV4IG5vdFRha2VuID0gbm9kZS0+bm90VGFrZW5CbG9ja0luZGV4KCk7CiAg
ICAgICAgICAgICAKICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpSZXN1bHRDb25kaXRpb24g
Y29uZGl0aW9uID0gTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm87CiAgICAgICAgICAgICAKQEAgLTMz
OTgsNyArMzM5Myw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkK
ICAgICAgICAgICAgIGJyYW5jaFRlc3QzMihjb25kaXRpb24sIG9wLmdwcigpLCB0YWtlbik7CiAg
ICAgICAgICAgICBqdW1wKG5vdFRha2VuKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgbm9S
ZXN1bHQobV9jb21waWxlSW5kZXgpOworICAgICAgICAgICAgbm9SZXN1bHQobm9kZSk7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBlbWl0QnJhbmNoKG5vZGUpOwpAQCAt
MzQxNSw3ICszNDEwLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2Rl
KQogI2VuZGlmCiAKICAgICAgICAgLy8gUmV0dXJuIHRoZSByZXN1bHQgaW4gcmV0dXJuVmFsdWVH
UFIuCi0gICAgICAgIEpTVmFsdWVPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKKyAg
ICAgICAgSlNWYWx1ZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAg
b3AxLmZpbGwoKTsKICAgICAgICAgaWYgKG9wMS5pc0RvdWJsZSgpKQogICAgICAgICAgICAgYm94
RG91YmxlKG9wMS5mcHIoKSwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIyLCBHUFJJbmZvOjpyZXR1
cm5WYWx1ZUdQUik7CkBAIC0zNDM5LDcgKzM0MzQsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIG1faml0LnJlc3RvcmVSZXR1cm5BZGRyZXNzQmVm
b3JlUmV0dXJuKEdQUkluZm86OnJlZ1QyKTsKICAgICAgICAgbV9qaXQucmV0KCk7CiAgICAgICAg
IAotICAgICAgICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCk7CisgICAgICAgIG5vUmVzdWx0KG5v
ZGUpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIApAQCAtMzQ0NywyOCArMzQ0Miwy
OCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgY2FzZSBU
aHJvd1JlZmVyZW5jZUVycm9yOiB7CiAgICAgICAgIC8vIFdlIGV4cGVjdCB0aGF0IHRocm93IHN0
YXRlbWVudHMgYXJlIHJhcmUgYW5kIGFyZSBpbnRlbmRlZCB0byBleGl0IHRoZSBjb2RlIGJsb2Nr
CiAgICAgICAgIC8vIGFueXdheSwgc28gd2UganVzdCBPU1IgYmFjayB0byB0aGUgb2xkIEpJVCBm
b3Igbm93LgotICAgICAgICB0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihVbmNvdW50YWJs
ZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlKTsKKyAgICAgICAgdGVybWluYXRlU3BlY3VsYXRpdmVF
eGVjdXRpb24oVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIDApOwogICAgICAgICBicmVhazsK
ICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgVG9QcmltaXRpdmU6IHsKLSAgICAgICAgaWYgKGF0
KG5vZGUuY2hpbGQxKCkpLnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKSkgeworICAgICAgICBpZiAo
bm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKSkgewogICAgICAgICAgICAg
Ly8gSXQncyByZWFsbHkgcHJvZml0YWJsZSB0byBzcGVjdWxhdGUgaW50ZWdlciwgc2luY2UgaXQn
cyByZWFsbHkgY2hlYXAsCiAgICAgICAgICAgICAvLyBpdCBtZWFucyB3ZSBkb24ndCBoYXZlIHRv
IGRvIGFueSByZWFsIHdvcmssIGFuZCB3ZSBlbWl0IGEgbG90IGxlc3MgY29kZS4KICAgICAgICAg
ICAgIAotICAgICAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AxKHRoaXMsIG5vZGUu
Y2hpbGQxKCkpOworICAgICAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AxKHRoaXMs
IG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywg
b3AxKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgQVNTRVJUKG9wMS5mb3JtYXQoKSA9PSBE
YXRhRm9ybWF0SW50ZWdlcik7CiAgICAgICAgICAgICBtX2ppdC5tb3ZlKG9wMS5ncHIoKSwgcmVz
dWx0LmdwcigpKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgaW50ZWdlclJlc3VsdChyZXN1
bHQuZ3ByKCksIG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAgICAgIGludGVnZXJSZXN1bHQocmVz
dWx0LmdwcigpLCBub2RlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAg
IAogICAgICAgICAvLyBGSVhNRTogQWRkIHN0cmluZyBzcGVjdWxhdGlvbiBoZXJlLgogICAgICAg
ICAKLSAgICAgICAgSlNWYWx1ZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKCkpOworICAg
ICAgICBKU1ZhbHVlT3BlcmFuZCBvcDEodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICBH
UFJUZW1wb3JhcnkgcmVzdWx0VGFnKHRoaXMsIG9wMSk7CiAgICAgICAgIEdQUlRlbXBvcmFyeSBy
ZXN1bHRQYXlsb2FkKHRoaXMsIG9wMSwgZmFsc2UpOwogICAgICAgICAKQEAgLTM0NzksNyArMzQ3
NCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAg
CiAgICAgICAgIG9wMS51c2UoKTsKICAgICAgICAgCi0gICAgICAgIGlmICghKG1fc3RhdGUuZm9y
Tm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUgJiB+KFNwZWNOdW1iZXIgfCBTcGVjQm9vbGVhbikp
KSB7CisgICAgICAgIGlmICghKG1fc3RhdGUuZm9yTm9kZShub2RlLT5jaGlsZDEoKSkubV90eXBl
ICYgfihTcGVjTnVtYmVyIHwgU3BlY0Jvb2xlYW4pKSkgewogICAgICAgICAgICAgbV9qaXQubW92
ZShvcDFUYWdHUFIsIHJlc3VsdFRhZ0dQUik7CiAgICAgICAgICAgICBtX2ppdC5tb3ZlKG9wMVBh
eWxvYWRHUFIsIHJlc3VsdFBheWxvYWRHUFIpOwogICAgICAgICB9IGVsc2UgewpAQCAtMzQ5Niwx
NyArMzQ5MSwxNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAg
ICAgICAgICAgICAgICAgICAgIEpTVmFsdWVSZWdzKHJlc3VsdFRhZ0dQUiwgcmVzdWx0UGF5bG9h
ZEdQUiksIG9wMVRhZ0dQUiwgb3AxUGF5bG9hZEdQUikpOwogICAgICAgICB9CiAgICAgICAgIAot
ICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFRhZ0dQUiwgcmVzdWx0UGF5bG9hZEdQUiwgbV9j
b21waWxlSW5kZXgsIFVzZUNoaWxkcmVuQ2FsbGVkRXhwbGljaXRseSk7CisgICAgICAgIGpzVmFs
dWVSZXN1bHQocmVzdWx0VGFnR1BSLCByZXN1bHRQYXlsb2FkR1BSLCBub2RlLCBVc2VDaGlsZHJl
bkNhbGxlZEV4cGxpY2l0bHkpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIAogICAg
IGNhc2UgU3RyQ2F0OiB7Ci0gICAgICAgIHNpemVfdCBzY3JhdGNoU2l6ZSA9IHNpemVvZihFbmNv
ZGVkSlNWYWx1ZSkgKiBub2RlLm51bUNoaWxkcmVuKCk7CisgICAgICAgIHNpemVfdCBzY3JhdGNo
U2l6ZSA9IHNpemVvZihFbmNvZGVkSlNWYWx1ZSkgKiBub2RlLT5udW1DaGlsZHJlbigpOwogICAg
ICAgICBTY3JhdGNoQnVmZmVyKiBzY3JhdGNoQnVmZmVyID0gbV9qaXQuZ2xvYmFsRGF0YSgpLT5z
Y3JhdGNoQnVmZmVyRm9yU2l6ZShzY3JhdGNoU2l6ZSk7CiAgICAgICAgIEVuY29kZWRKU1ZhbHVl
KiBidWZmZXIgPSBzY3JhdGNoQnVmZmVyID8gc3RhdGljX2Nhc3Q8RW5jb2RlZEpTVmFsdWUqPihz
Y3JhdGNoQnVmZmVyLT5kYXRhQnVmZmVyKCkpIDogMDsKICAgICAgICAgCi0gICAgICAgIGZvciAo
dW5zaWduZWQgb3BlcmFuZElkeCA9IDA7IG9wZXJhbmRJZHggPCBub2RlLm51bUNoaWxkcmVuKCk7
ICsrb3BlcmFuZElkeCkgewotICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgb3BlcmFuZCh0aGlz
LCBtX2ppdC5ncmFwaCgpLm1fdmFyQXJnQ2hpbGRyZW5bbm9kZS5maXJzdENoaWxkKCkgKyBvcGVy
YW5kSWR4XSk7CisgICAgICAgIGZvciAodW5zaWduZWQgb3BlcmFuZElkeCA9IDA7IG9wZXJhbmRJ
ZHggPCBub2RlLT5udW1DaGlsZHJlbigpOyArK29wZXJhbmRJZHgpIHsKKyAgICAgICAgICAgIEpT
VmFsdWVPcGVyYW5kIG9wZXJhbmQodGhpcywgbV9qaXQuZ3JhcGgoKS5tX3ZhckFyZ0NoaWxkcmVu
W25vZGUtPmZpcnN0Q2hpbGQoKSArIG9wZXJhbmRJZHhdKTsKICAgICAgICAgICAgIEdQUlJlZyBv
cFRhZ0dQUiA9IG9wZXJhbmQudGFnR1BSKCk7CiAgICAgICAgICAgICBHUFJSZWcgb3BQYXlsb2Fk
R1BSID0gb3BlcmFuZC5wYXlsb2FkR1BSKCk7CiAgICAgICAgICAgICBvcGVyYW5kLnVzZSgpOwpA
QCAtMzUyOCw3ICszNTIzLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBu
b2RlKQogICAgICAgICBHUFJSZXN1bHQgcmVzdWx0UGF5bG9hZCh0aGlzKTsKICAgICAgICAgR1BS
UmVzdWx0MiByZXN1bHRUYWcodGhpcyk7CiAgICAgICAgIAotICAgICAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvblN0ckNhdCwgcmVzdWx0VGFnLmdwcigpLCByZXN1bHRQYXlsb2FkLmdwcigpLCBz
dGF0aWNfY2FzdDx2b2lkICo+KGJ1ZmZlciksIG5vZGUubnVtQ2hpbGRyZW4oKSk7CisgICAgICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3RyQ2F0LCByZXN1bHRUYWcuZ3ByKCksIHJlc3VsdFBh
eWxvYWQuZ3ByKCksIHN0YXRpY19jYXN0PHZvaWQgKj4oYnVmZmVyKSwgbm9kZS0+bnVtQ2hpbGRy
ZW4oKSk7CiAKICAgICAgICAgaWYgKHNjcmF0Y2hTaXplKSB7CiAgICAgICAgICAgICBHUFJUZW1w
b3Jhcnkgc2NyYXRjaCh0aGlzKTsKQEAgLTM1MzgsMjQgKzM1MzMsMjQgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICB9CiAKICAgICAgICAgLy8gRklY
TUU6IG1ha2UgdGhlIGNhbGxPcGVyYXRpb24gYWJvdmUgZXhwbGljaXRseSByZXR1cm4gYSBjZWxs
IHJlc3VsdCwgb3Igaml0QXNzZXJ0IHRoZSB0YWcgaXMgYSBjZWxsIHRhZy4KLSAgICAgICAgY2Vs
bFJlc3VsdChyZXN1bHRQYXlsb2FkLmdwcigpLCBtX2NvbXBpbGVJbmRleCwgVXNlQ2hpbGRyZW5D
YWxsZWRFeHBsaWNpdGx5KTsKKyAgICAgICAgY2VsbFJlc3VsdChyZXN1bHRQYXlsb2FkLmdwcigp
LCBub2RlLCBVc2VDaGlsZHJlbkNhbGxlZEV4cGxpY2l0bHkpOwogICAgICAgICBicmVhazsKICAg
ICB9CiAKICAgICBjYXNlIE5ld0FycmF5OiB7Ci0gICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QgPSBtX2ppdC5ncmFwaCgpLmdsb2JhbE9iamVjdEZvcihub2RlLmNvZGVPcmlnaW4p
OwotICAgICAgICBpZiAoIWdsb2JhbE9iamVjdC0+aXNIYXZpbmdBQmFkVGltZSgpICYmICFoYXNB
cnJheVN0b3JhZ2Uobm9kZS5pbmRleGluZ1R5cGUoKSkpIHsKKyAgICAgICAgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCA9IG1faml0LmdyYXBoKCkuZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPmNv
ZGVPcmlnaW4pOworICAgICAgICBpZiAoIWdsb2JhbE9iamVjdC0+aXNIYXZpbmdBQmFkVGltZSgp
ICYmICFoYXNBcnJheVN0b3JhZ2Uobm9kZS0+aW5kZXhpbmdUeXBlKCkpKSB7CiAgICAgICAgICAg
ICBnbG9iYWxPYmplY3QtPmhhdmluZ0FCYWRUaW1lV2F0Y2hwb2ludCgpLT5hZGQoc3BlY3VsYXRp
b25XYXRjaHBvaW50KCkpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSA9IGdsb2JhbE9iamVjdC0+YXJyYXlTdHJ1Y3R1cmVGb3JJbmRleGluZ1R5cGVEdXJp
bmdBbGxvY2F0aW9uKG5vZGUuaW5kZXhpbmdUeXBlKCkpOwotICAgICAgICAgICAgQVNTRVJUKHN0
cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkgPT0gbm9kZS5pbmRleGluZ1R5cGUoKSk7CisgICAgICAg
ICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGdsb2JhbE9iamVjdC0+YXJyYXlTdHJ1Y3R1cmVG
b3JJbmRleGluZ1R5cGVEdXJpbmdBbGxvY2F0aW9uKG5vZGUtPmluZGV4aW5nVHlwZSgpKTsKKyAg
ICAgICAgICAgIEFTU0VSVChzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpID09IG5vZGUtPmluZGV4
aW5nVHlwZSgpKTsKICAgICAgICAgICAgIEFTU0VSVCgKICAgICAgICAgICAgICAgICBoYXNVbmRl
Y2lkZWQoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSkKICAgICAgICAgICAgICAgICB8fCBoYXNJ
bnQzMihzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKQogICAgICAgICAgICAgICAgIHx8IGhhc0Rv
dWJsZShzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKQogICAgICAgICAgICAgICAgIHx8IGhhc0Nv
bnRpZ3VvdXMoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSkpOwogCi0gICAgICAgICAgICB1bnNp
Z25lZCBudW1FbGVtZW50cyA9IG5vZGUubnVtQ2hpbGRyZW4oKTsKKyAgICAgICAgICAgIHVuc2ln
bmVkIG51bUVsZW1lbnRzID0gbm9kZS0+bnVtQ2hpbGRyZW4oKTsKICAgICAgICAgICAgIAogICAg
ICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKICAgICAgICAgICAgIEdQUlRlbXBv
cmFyeSBzdG9yYWdlKHRoaXMpOwpAQCAtMzU2OCwxMSArMzU2MywxMSBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgICAgICAvLyBBdCB0aGlzIHBvaW50
LCBvbmUgd2F5IG9yIGFub3RoZXIsIHJlc3VsdEdQUiBhbmQgc3RvcmFnZUdQUiBoYXZlIHBvaW50
ZXJzIHRvCiAgICAgICAgICAgICAvLyB0aGUgSlNBcnJheSBhbmQgdGhlIEJ1dHRlcmZseSwgcmVz
cGVjdGl2ZWx5LgogICAgICAgICAgICAgCi0gICAgICAgICAgICBBU1NFUlQoIWhhc1VuZGVjaWRl
ZChzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSB8fCAhbm9kZS5udW1DaGlsZHJlbigpKTsKKyAg
ICAgICAgICAgIEFTU0VSVCghaGFzVW5kZWNpZGVkKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkp
IHx8ICFub2RlLT5udW1DaGlsZHJlbigpKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBvcGVyYW5kSWR4ID0gMDsgb3BlcmFuZElkeCA8IG5vZGUubnVtQ2hpbGRyZW4o
KTsgKytvcGVyYW5kSWR4KSB7Ci0gICAgICAgICAgICAgICAgRWRnZSB1c2UgPSBtX2ppdC5ncmFw
aCgpLm1fdmFyQXJnQ2hpbGRyZW5bbm9kZS5maXJzdENoaWxkKCkgKyBvcGVyYW5kSWR4XTsKLSAg
ICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUuaW5kZXhpbmdUeXBlKCkpIHsKKyAgICAgICAgICAg
IGZvciAodW5zaWduZWQgb3BlcmFuZElkeCA9IDA7IG9wZXJhbmRJZHggPCBub2RlLT5udW1DaGls
ZHJlbigpOyArK29wZXJhbmRJZHgpIHsKKyAgICAgICAgICAgICAgICBFZGdlIHVzZSA9IG1faml0
LmdyYXBoKCkubV92YXJBcmdDaGlsZHJlbltub2RlLT5maXJzdENoaWxkKCkgKyBvcGVyYW5kSWR4
XTsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPmluZGV4aW5nVHlwZSgpKSB7CiAgICAg
ICAgICAgICAgICAgY2FzZSBBTExfQkxBTktfSU5ERVhJTkdfVFlQRVM6CiAgICAgICAgICAgICAg
ICAgY2FzZSBBTExfVU5ERUNJREVEX0lOREVYSU5HX1RZUEVTOgogICAgICAgICAgICAgICAgICAg
ICBDUkFTSCgpOwpAQCAtMzU4NCw3ICszNTc5LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZShOb2RlJiBub2RlKQogICAgICAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IFdlIG5l
ZWQgYSB3YXkgb2YgcHJvZmlsaW5nIHRoZXNlLCBhbmQgd2UgbmVlZCB0byBob2lzdCB0aGVtIGlu
dG8KICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQuCiAg
ICAgICAgICAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEJhZFR5cGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBCYWRUeXBlLCBKU1ZhbHVlUmVncygpLCAwLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaERvdWJsZShNYWNyb0Fzc2VtYmxlcjo6RG91Ymxl
Tm90RXF1YWxPclVub3JkZXJlZCwgb3BGUFIsIG9wRlBSKSk7CiAgICAgICAgICAgICAgICAgICAg
IH0KICAgICAgICAgCkBAIC0zNTk4LDcgKzM1OTMsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZ
UEVTOiB7Ci0gICAgICAgICAgICAgICAgICAgIEpTVmFsdWVPcGVyYW5kIG9wZXJhbmQodGhpcywg
bV9qaXQuZ3JhcGgoKS5tX3ZhckFyZ0NoaWxkcmVuW25vZGUuZmlyc3RDaGlsZCgpICsgb3BlcmFu
ZElkeF0pOworICAgICAgICAgICAgICAgICAgICBKU1ZhbHVlT3BlcmFuZCBvcGVyYW5kKHRoaXMs
IG1faml0LmdyYXBoKCkubV92YXJBcmdDaGlsZHJlbltub2RlLT5maXJzdENoaWxkKCkgKyBvcGVy
YW5kSWR4XSk7CiAgICAgICAgICAgICAgICAgICAgIEdQUlJlZyBvcFRhZ0dQUiA9IG9wZXJhbmQu
dGFnR1BSKCk7CiAgICAgICAgICAgICAgICAgICAgIEdQUlJlZyBvcFBheWxvYWRHUFIgPSBvcGVy
YW5kLnBheWxvYWRHUFIoKTsKICAgICAgICAgICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihvcFRh
Z0dQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgc2l6ZW9mKEpTVmFsdWUp
ICogb3BlcmFuZElkeCArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy50YWcpKSk7
CkBAIC0zNjE4LDMwICszNjEzLDMwIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9k
ZSYgbm9kZSkKICAgICAgICAgICAgIC8vIGJpZ2dlciBwcm9ibGVtIHdpbGwgYWxzbyBsaWtlbHkg
Zml4IHRoZSByZWR1bmRhbmN5IGluIHJlbG9hZGluZyB0aGUgc3RvcmFnZQogICAgICAgICAgICAg
Ly8gcG9pbnRlciB0aGF0IHdlIGN1cnJlbnRseSBoYXZlLgogICAgICAgICAgICAgCi0gICAgICAg
ICAgICBjZWxsUmVzdWx0KHJlc3VsdEdQUiwgbV9jb21waWxlSW5kZXgpOworICAgICAgICAgICAg
Y2VsbFJlc3VsdChyZXN1bHRHUFIsIG5vZGUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IH0KICAgICAgICAgCi0gICAgICAgIGlmICghbm9kZS5udW1DaGlsZHJlbigpKSB7CisgICAgICAg
IGlmICghbm9kZS0+bnVtQ2hpbGRyZW4oKSkgewogICAgICAgICAgICAgZmx1c2hSZWdpc3RlcnMo
KTsKICAgICAgICAgICAgIEdQUlJlc3VsdCByZXN1bHQodGhpcyk7CiAgICAgICAgICAgICBjYWxs
T3BlcmF0aW9uKAotICAgICAgICAgICAgICAgIG9wZXJhdGlvbk5ld0VtcHR5QXJyYXksIHJlc3Vs
dC5ncHIoKSwgZ2xvYmFsT2JqZWN0LT5hcnJheVN0cnVjdHVyZUZvckluZGV4aW5nVHlwZUR1cmlu
Z0FsbG9jYXRpb24obm9kZS5pbmRleGluZ1R5cGUoKSkpOwotICAgICAgICAgICAgY2VsbFJlc3Vs
dChyZXN1bHQuZ3ByKCksIG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAgICAgICAgICBvcGVyYXRp
b25OZXdFbXB0eUFycmF5LCByZXN1bHQuZ3ByKCksIGdsb2JhbE9iamVjdC0+YXJyYXlTdHJ1Y3R1
cmVGb3JJbmRleGluZ1R5cGVEdXJpbmdBbGxvY2F0aW9uKG5vZGUtPmluZGV4aW5nVHlwZSgpKSk7
CisgICAgICAgICAgICBjZWxsUmVzdWx0KHJlc3VsdC5ncHIoKSwgbm9kZSk7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgc2l6ZV90IHNjcmF0Y2hTaXpl
ID0gc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSAqIG5vZGUubnVtQ2hpbGRyZW4oKTsKKyAgICAgICAg
c2l6ZV90IHNjcmF0Y2hTaXplID0gc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSAqIG5vZGUtPm51bUNo
aWxkcmVuKCk7CiAgICAgICAgIFNjcmF0Y2hCdWZmZXIqIHNjcmF0Y2hCdWZmZXIgPSBtX2ppdC5n
bG9iYWxEYXRhKCktPnNjcmF0Y2hCdWZmZXJGb3JTaXplKHNjcmF0Y2hTaXplKTsKICAgICAgICAg
RW5jb2RlZEpTVmFsdWUqIGJ1ZmZlciA9IHNjcmF0Y2hCdWZmZXIgPyBzdGF0aWNfY2FzdDxFbmNv
ZGVkSlNWYWx1ZSo+KHNjcmF0Y2hCdWZmZXItPmRhdGFCdWZmZXIoKSkgOiAwOwogICAgICAgICAK
LSAgICAgICAgZm9yICh1bnNpZ25lZCBvcGVyYW5kSWR4ID0gMDsgb3BlcmFuZElkeCA8IG5vZGUu
bnVtQ2hpbGRyZW4oKTsgKytvcGVyYW5kSWR4KSB7CisgICAgICAgIGZvciAodW5zaWduZWQgb3Bl
cmFuZElkeCA9IDA7IG9wZXJhbmRJZHggPCBub2RlLT5udW1DaGlsZHJlbigpOyArK29wZXJhbmRJ
ZHgpIHsKICAgICAgICAgICAgIC8vIE5lZWQgdG8gcGVyZm9ybSB0aGUgc3BlY3VsYXRpb25zIHRo
YXQgdGhpcyBub2RlIHByb21pc2VzIHRvIHBlcmZvcm0uIElmIHdlJ3JlCiAgICAgICAgICAgICAv
LyBlbWl0dGluZyBjb2RlIGhlcmUgYW5kIHRoZSBpbmRleGluZyB0eXBlIGlzIG5vdCBhcnJheSBz
dG9yYWdlIHRoZW4gdGhlcmUgaXMKICAgICAgICAgICAgIC8vIHByb2JhYmx5IHNvbWV0aGluZyBo
aWxhcmlvdXMgZ29pbmcgb24gYW5kIHdlJ3JlIGFscmVhZHkgZmFpbGluZyBhdCBhbGwgdGhlCiAg
ICAgICAgICAgICAvLyB0aGluZ3MsIGJ1dCBhdCBsZWFzdCB3ZSdyZSBnb2luZyB0byBiZSBzb3Vu
ZC4KLSAgICAgICAgICAgIEVkZ2UgdXNlID0gbV9qaXQuZ3JhcGgoKS5tX3ZhckFyZ0NoaWxkcmVu
W25vZGUuZmlyc3RDaGlsZCgpICsgb3BlcmFuZElkeF07Ci0gICAgICAgICAgICBzd2l0Y2ggKG5v
ZGUuaW5kZXhpbmdUeXBlKCkpIHsKKyAgICAgICAgICAgIEVkZ2UgdXNlID0gbV9qaXQuZ3JhcGgo
KS5tX3ZhckFyZ0NoaWxkcmVuW25vZGUtPmZpcnN0Q2hpbGQoKSArIG9wZXJhbmRJZHhdOworICAg
ICAgICAgICAgc3dpdGNoIChub2RlLT5pbmRleGluZ1R5cGUoKSkgewogICAgICAgICAgICAgY2Fz
ZSBBTExfQkxBTktfSU5ERVhJTkdfVFlQRVM6CiAgICAgICAgICAgICBjYXNlIEFMTF9VTkRFQ0lE
RURfSU5ERVhJTkdfVFlQRVM6CiAgICAgICAgICAgICAgICAgQ1JBU0goKTsKQEAgLTM2NTMsNyAr
MzY0OCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAg
ICAgICAgICAgICAgICAgLy8gRklYTUU6IFdlIG5lZWQgYSB3YXkgb2YgcHJvZmlsaW5nIHRoZXNl
LCBhbmQgd2UgbmVlZCB0byBob2lzdCB0aGVtIGludG8KICAgICAgICAgICAgICAgICAgICAgLy8g
U3BlY3VsYXRlRG91YmxlT3BlcmFuZC4KICAgICAgICAgICAgICAgICAgICAgc3BlY3VsYXRpb25D
aGVjaygKLSAgICAgICAgICAgICAgICAgICAgICAgIEJhZFR5cGUsIEpTVmFsdWVSZWdzKCksIE5v
Tm9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIEJhZFR5cGUsIEpTVmFsdWVSZWdzKCksIDAs
CiAgICAgICAgICAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2hEb3VibGUoTWFjcm9Bc3NlbWJs
ZXI6OkRvdWJsZU5vdEVxdWFsT3JVbm9yZGVyZWQsIG9wRlBSLCBvcEZQUikpOwogICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICAKQEAgLTM2NjksNyArMzY2NCw3IEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6CiAgICAgICAgICAgICBjYXNl
IEFMTF9BUlJBWV9TVE9SQUdFX0lOREVYSU5HX1RZUEVTOiB7Ci0gICAgICAgICAgICAgICAgSlNW
YWx1ZU9wZXJhbmQgb3BlcmFuZCh0aGlzLCBtX2ppdC5ncmFwaCgpLm1fdmFyQXJnQ2hpbGRyZW5b
bm9kZS5maXJzdENoaWxkKCkgKyBvcGVyYW5kSWR4XSk7CisgICAgICAgICAgICAgICAgSlNWYWx1
ZU9wZXJhbmQgb3BlcmFuZCh0aGlzLCBtX2ppdC5ncmFwaCgpLm1fdmFyQXJnQ2hpbGRyZW5bbm9k
ZS0+Zmlyc3RDaGlsZCgpICsgb3BlcmFuZElkeF0pOwogICAgICAgICAgICAgICAgIEdQUlJlZyBv
cFRhZ0dQUiA9IG9wZXJhbmQudGFnR1BSKCk7CiAgICAgICAgICAgICAgICAgR1BSUmVnIG9wUGF5
bG9hZEdQUiA9IG9wZXJhbmQucGF5bG9hZEdQUigpOwogICAgICAgICAgICAgICAgIApAQCAtMzY4
NCw3ICszNjc5LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQog
ICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBzd2l0Y2ggKG5vZGUu
aW5kZXhpbmdUeXBlKCkpIHsKKyAgICAgICAgc3dpdGNoIChub2RlLT5pbmRleGluZ1R5cGUoKSkg
ewogICAgICAgICBjYXNlIEFMTF9ET1VCTEVfSU5ERVhJTkdfVFlQRVM6CiAgICAgICAgIGNhc2Ug
QUxMX0lOVDMyX0lOREVYSU5HX1RZUEVTOgogICAgICAgICAgICAgdXNlQ2hpbGRyZW4obm9kZSk7
CkBAIC0zNzA2LDggKzM3MDEsOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUm
IG5vZGUpCiAgICAgICAgIEdQUlJlc3VsdCByZXN1bHQodGhpcyk7CiAgICAgICAgIAogICAgICAg
ICBjYWxsT3BlcmF0aW9uKAotICAgICAgICAgICAgb3BlcmF0aW9uTmV3QXJyYXksIHJlc3VsdC5n
cHIoKSwgZ2xvYmFsT2JqZWN0LT5hcnJheVN0cnVjdHVyZUZvckluZGV4aW5nVHlwZUR1cmluZ0Fs
bG9jYXRpb24obm9kZS5pbmRleGluZ1R5cGUoKSksCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDx2
b2lkKj4oYnVmZmVyKSwgbm9kZS5udW1DaGlsZHJlbigpKTsKKyAgICAgICAgICAgIG9wZXJhdGlv
bk5ld0FycmF5LCByZXN1bHQuZ3ByKCksIGdsb2JhbE9iamVjdC0+YXJyYXlTdHJ1Y3R1cmVGb3JJ
bmRleGluZ1R5cGVEdXJpbmdBbGxvY2F0aW9uKG5vZGUtPmluZGV4aW5nVHlwZSgpKSwKKyAgICAg
ICAgICAgIHN0YXRpY19jYXN0PHZvaWQqPihidWZmZXIpLCBub2RlLT5udW1DaGlsZHJlbigpKTsK
IAogICAgICAgICBpZiAoc2NyYXRjaFNpemUpIHsKICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSBz
Y3JhdGNoKHRoaXMpOwpAQCAtMzcxNiwxNiArMzcxMSwxNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgICAgICBtX2ppdC5zdG9yZVB0cihUcnVzdGVk
SW1tUHRyKDApLCBzY3JhdGNoLmdwcigpKTsKICAgICAgICAgfQogCi0gICAgICAgIGNlbGxSZXN1
bHQocmVzdWx0LmdwcigpLCBtX2NvbXBpbGVJbmRleCwgVXNlQ2hpbGRyZW5DYWxsZWRFeHBsaWNp
dGx5KTsKKyAgICAgICAgY2VsbFJlc3VsdChyZXN1bHQuZ3ByKCksIG5vZGUsIFVzZUNoaWxkcmVu
Q2FsbGVkRXhwbGljaXRseSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIAogICAgIGNhc2UgTmV3
QXJyYXlXaXRoU2l6ZTogewotICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0g
bV9qaXQuZ3JhcGgoKS5nbG9iYWxPYmplY3RGb3Iobm9kZS5jb2RlT3JpZ2luKTsKLSAgICAgICAg
aWYgKCFnbG9iYWxPYmplY3QtPmlzSGF2aW5nQUJhZFRpbWUoKSAmJiAhaGFzQXJyYXlTdG9yYWdl
KG5vZGUuaW5kZXhpbmdUeXBlKCkpKSB7CisgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QgPSBtX2ppdC5ncmFwaCgpLmdsb2JhbE9iamVjdEZvcihub2RlLT5jb2RlT3JpZ2luKTsK
KyAgICAgICAgaWYgKCFnbG9iYWxPYmplY3QtPmlzSGF2aW5nQUJhZFRpbWUoKSAmJiAhaGFzQXJy
YXlTdG9yYWdlKG5vZGUtPmluZGV4aW5nVHlwZSgpKSkgewogICAgICAgICAgICAgZ2xvYmFsT2Jq
ZWN0LT5oYXZpbmdBQmFkVGltZVdhdGNocG9pbnQoKS0+YWRkKHNwZWN1bGF0aW9uV2F0Y2hwb2lu
dCgpKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVy
YW5kIHNpemUodGhpcywgbm9kZS5jaGlsZDEoKSk7CisgICAgICAgICAgICBTcGVjdWxhdGVTdHJp
Y3RJbnQzMk9wZXJhbmQgc2l6ZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgICAgICBH
UFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwogICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHN0b3Jh
Z2UodGhpcyk7CiAgICAgICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKQEAgLTM3
NDcsMTMgKzM3NDIsMTMgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2Rl
KQogICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZCgKICAgICAgICAgICAgICAgICBlbWl0QWxs
b2NhdGVCYXNpY1N0b3JhZ2UocmVzdWx0R1BSLCBzdG9yYWdlR1BSKSk7CiAgICAgICAgICAgICBt
X2ppdC5zdWJQdHIoc2NyYXRjaEdQUiwgc3RvcmFnZUdQUik7Ci0gICAgICAgICAgICBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSA9IGdsb2JhbE9iamVjdC0+YXJyYXlTdHJ1Y3R1cmVGb3JJbmRleGluZ1R5
cGVEdXJpbmdBbGxvY2F0aW9uKG5vZGUuaW5kZXhpbmdUeXBlKCkpOworICAgICAgICAgICAgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUgPSBnbG9iYWxPYmplY3QtPmFycmF5U3RydWN0dXJlRm9ySW5kZXhp
bmdUeXBlRHVyaW5nQWxsb2NhdGlvbihub2RlLT5pbmRleGluZ1R5cGUoKSk7CiAgICAgICAgICAg
ICBlbWl0QWxsb2NhdGVKU09iamVjdDxKU0FycmF5PihyZXN1bHRHUFIsIFRydXN0ZWRJbW1QdHIo
c3RydWN0dXJlKSwgc3RvcmFnZUdQUiwgc2NyYXRjaEdQUiwgc2NyYXRjaDJHUFIsIHNsb3dDYXNl
cyk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIG1faml0LnN0b3JlMzIoc2l6ZUdQUiwgTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgQnV0dGVyZmx5OjpvZmZzZXRPZlB1Ymxp
Y0xlbmd0aCgpKSk7CiAgICAgICAgICAgICBtX2ppdC5zdG9yZTMyKHNpemVHUFIsIE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZWZWN0b3JMZW5n
dGgoKSkpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoaGFzRG91YmxlKG5vZGUuaW5k
ZXhpbmdUeXBlKCkpKSB7CisgICAgICAgICAgICBpZiAoaGFzRG91YmxlKG5vZGUtPmluZGV4aW5n
VHlwZSgpKSkgewogICAgICAgICAgICAgICAgIEpTVmFsdWUgbmFuID0gSlNWYWx1ZShKU1ZhbHVl
OjpFbmNvZGVBc0RvdWJsZSwgUU5hTik7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAg
ICAgbV9qaXQubW92ZShzaXplR1BSLCBzY3JhdGNoR1BSKTsKQEAgLTM3NjksMzkgKzM3NjQsMzkg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAgICAg
YWRkU2xvd1BhdGhHZW5lcmF0b3IoYWRvcHRQdHIoCiAgICAgICAgICAgICAgICAgbmV3IENhbGxB
cnJheUFsbG9jYXRvcldpdGhWYXJpYWJsZVNpemVTbG93UGF0aEdlbmVyYXRvcigKICAgICAgICAg
ICAgICAgICAgICAgc2xvd0Nhc2VzLCB0aGlzLCBvcGVyYXRpb25OZXdBcnJheVdpdGhTaXplLCBy
ZXN1bHRHUFIsCi0gICAgICAgICAgICAgICAgICAgIGdsb2JhbE9iamVjdC0+YXJyYXlTdHJ1Y3R1
cmVGb3JJbmRleGluZ1R5cGVEdXJpbmdBbGxvY2F0aW9uKG5vZGUuaW5kZXhpbmdUeXBlKCkpLAor
ICAgICAgICAgICAgICAgICAgICBnbG9iYWxPYmplY3QtPmFycmF5U3RydWN0dXJlRm9ySW5kZXhp
bmdUeXBlRHVyaW5nQWxsb2NhdGlvbihub2RlLT5pbmRleGluZ1R5cGUoKSksCiAgICAgICAgICAg
ICAgICAgICAgIGdsb2JhbE9iamVjdC0+YXJyYXlTdHJ1Y3R1cmVGb3JJbmRleGluZ1R5cGVEdXJp
bmdBbGxvY2F0aW9uKEFycmF5V2l0aEFycmF5U3RvcmFnZSksCiAgICAgICAgICAgICAgICAgICAg
IHNpemVHUFIpKSk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGNlbGxSZXN1bHQocmVzdWx0
R1BSLCBtX2NvbXBpbGVJbmRleCk7CisgICAgICAgICAgICBjZWxsUmVzdWx0KHJlc3VsdEdQUiwg
bm9kZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAg
U3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIHNpemUodGhpcywgbm9kZS5jaGlsZDEoKSk7Cisg
ICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBzaXplKHRoaXMsIG5vZGUtPmNoaWxk
MSgpKTsKICAgICAgICAgR1BSUmVnIHNpemVHUFIgPSBzaXplLmdwcigpOwogICAgICAgICBmbHVz
aFJlZ2lzdGVycygpOwogICAgICAgICBHUFJSZXN1bHQgcmVzdWx0KHRoaXMpOwogICAgICAgICBH
UFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwogICAgICAgICBHUFJSZWcgc3RydWN0dXJl
R1BSID0gc2VsZWN0U2NyYXRjaEdQUihzaXplR1BSKTsKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
Okp1bXAgYmlnTGVuZ3RoID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JF
cXVhbCwgc2l6ZUdQUiwgVHJ1c3RlZEltbTMyKE1JTl9TUEFSU0VfQVJSQVlfSU5ERVgpKTsKLSAg
ICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyKGdsb2JhbE9iamVjdC0+YXJyYXlTdHJ1Y3R1
cmVGb3JJbmRleGluZ1R5cGVEdXJpbmdBbGxvY2F0aW9uKG5vZGUuaW5kZXhpbmdUeXBlKCkpKSwg
c3RydWN0dXJlR1BSKTsKKyAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyKGdsb2JhbE9i
amVjdC0+YXJyYXlTdHJ1Y3R1cmVGb3JJbmRleGluZ1R5cGVEdXJpbmdBbGxvY2F0aW9uKG5vZGUt
PmluZGV4aW5nVHlwZSgpKSksIHN0cnVjdHVyZUdQUik7CiAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpKdW1wIGRvbmUgPSBtX2ppdC5qdW1wKCk7CiAgICAgICAgIGJpZ0xlbmd0aC5saW5rKCZtX2pp
dCk7CiAgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbVB0cihnbG9iYWxPYmplY3QtPmFycmF5
U3RydWN0dXJlRm9ySW5kZXhpbmdUeXBlRHVyaW5nQWxsb2NhdGlvbihBcnJheVdpdGhBcnJheVN0
b3JhZ2UpKSwgc3RydWN0dXJlR1BSKTsKICAgICAgICAgZG9uZS5saW5rKCZtX2ppdCk7CiAgICAg
ICAgIGNhbGxPcGVyYXRpb24oCiAgICAgICAgICAgICBvcGVyYXRpb25OZXdBcnJheVdpdGhTaXpl
LCByZXN1bHRHUFIsIHN0cnVjdHVyZUdQUiwgc2l6ZUdQUik7Ci0gICAgICAgIGNlbGxSZXN1bHQo
cmVzdWx0R1BSLCBtX2NvbXBpbGVJbmRleCk7CisgICAgICAgIGNlbGxSZXN1bHQocmVzdWx0R1BS
LCBub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKICAgICBjYXNlIE5ld0Fy
cmF5QnVmZmVyOiB7Ci0gICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBtX2pp
dC5ncmFwaCgpLmdsb2JhbE9iamVjdEZvcihub2RlLmNvZGVPcmlnaW4pOwotICAgICAgICBJbmRl
eGluZ1R5cGUgaW5kZXhpbmdUeXBlID0gbm9kZS5pbmRleGluZ1R5cGUoKTsKKyAgICAgICAgSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IG1faml0LmdyYXBoKCkuZ2xvYmFsT2JqZWN0Rm9y
KG5vZGUtPmNvZGVPcmlnaW4pOworICAgICAgICBJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlID0g
bm9kZS0+aW5kZXhpbmdUeXBlKCk7CiAgICAgICAgIGlmICghZ2xvYmFsT2JqZWN0LT5pc0hhdmlu
Z0FCYWRUaW1lKCkgJiYgIWhhc0FycmF5U3RvcmFnZShpbmRleGluZ1R5cGUpKSB7CiAgICAgICAg
ICAgICBnbG9iYWxPYmplY3QtPmhhdmluZ0FCYWRUaW1lV2F0Y2hwb2ludCgpLT5hZGQoc3BlY3Vs
YXRpb25XYXRjaHBvaW50KCkpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICB1bnNpZ25lZCBu
dW1FbGVtZW50cyA9IG5vZGUubnVtQ29uc3RhbnRzKCk7CisgICAgICAgICAgICB1bnNpZ25lZCBu
dW1FbGVtZW50cyA9IG5vZGUtPm51bUNvbnN0YW50cygpOwogICAgICAgICAgICAgCiAgICAgICAg
ICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwogICAgICAgICAgICAgR1BSVGVtcG9yYXJ5
IHN0b3JhZ2UodGhpcyk7CkBAIC0zODExLDkgKzM4MDYsOSBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlKE5vZGUmIG5vZGUpCiAKICAgICAgICAgICAgIGVtaXRBbGxvY2F0ZUpTQXJyYXko
cmVzdWx0R1BSLCBnbG9iYWxPYmplY3QtPmFycmF5U3RydWN0dXJlRm9ySW5kZXhpbmdUeXBlRHVy
aW5nQWxsb2NhdGlvbihpbmRleGluZ1R5cGUpLCBzdG9yYWdlR1BSLCBudW1FbGVtZW50cyk7CiAg
ICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChub2RlLmluZGV4aW5nVHlwZSgpID09IEFycmF5
V2l0aERvdWJsZSkgewotICAgICAgICAgICAgICAgIEpTVmFsdWUqIGRhdGEgPSBtX2ppdC5jb2Rl
QmxvY2soKS0+Y29uc3RhbnRCdWZmZXIobm9kZS5zdGFydENvbnN0YW50KCkpOwotICAgICAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaW5kZXggPSAwOyBpbmRleCA8IG5vZGUubnVtQ29uc3RhbnRz
KCk7ICsraW5kZXgpIHsKKyAgICAgICAgICAgIGlmIChub2RlLT5pbmRleGluZ1R5cGUoKSA9PSBB
cnJheVdpdGhEb3VibGUpIHsKKyAgICAgICAgICAgICAgICBKU1ZhbHVlKiBkYXRhID0gbV9qaXQu
Y29kZUJsb2NrKCktPmNvbnN0YW50QnVmZmVyKG5vZGUtPnN0YXJ0Q29uc3RhbnQoKSk7CisgICAg
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbmRleCA9IDA7IGluZGV4IDwgbm9kZS0+bnVtQ29u
c3RhbnRzKCk7ICsraW5kZXgpIHsKICAgICAgICAgICAgICAgICAgICAgdW5pb24gewogICAgICAg
ICAgICAgICAgICAgICAgICAgaW50MzJfdCBoYWx2ZXNbMl07CiAgICAgICAgICAgICAgICAgICAg
ICAgICBkb3VibGUgdmFsdWU7CkBAIC0zODIzLDIzICszODE4LDIzIEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgICAgICAgICAgICAgbV9qaXQuc3Rv
cmUzMihJbW0zMih1LmhhbHZlc1sxXSksIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VH
UFIsIHNpemVvZihkb3VibGUpICogaW5kZXggKyBzaXplb2YoaW50MzJfdCkpKTsKICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGludDMyX3Qq
IGRhdGEgPSBiaXR3aXNlX2Nhc3Q8aW50MzJfdCo+KG1faml0LmNvZGVCbG9jaygpLT5jb25zdGFu
dEJ1ZmZlcihub2RlLnN0YXJ0Q29uc3RhbnQoKSkpOwotICAgICAgICAgICAgICAgIGZvciAodW5z
aWduZWQgaW5kZXggPSAwOyBpbmRleCA8IG5vZGUubnVtQ29uc3RhbnRzKCkgKiAyOyArK2luZGV4
KSB7CisgICAgICAgICAgICAgICAgaW50MzJfdCogZGF0YSA9IGJpdHdpc2VfY2FzdDxpbnQzMl90
Kj4obV9qaXQuY29kZUJsb2NrKCktPmNvbnN0YW50QnVmZmVyKG5vZGUtPnN0YXJ0Q29uc3RhbnQo
KSkpOworICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW5kZXggPSAwOyBpbmRleCA8IG5v
ZGUtPm51bUNvbnN0YW50cygpICogMjsgKytpbmRleCkgewogICAgICAgICAgICAgICAgICAgICBt
X2ppdC5zdG9yZTMyKAogICAgICAgICAgICAgICAgICAgICAgICAgSW1tMzIoZGF0YVtpbmRleF0p
LCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBzaXplb2YoaW50MzJfdCkgKiBp
bmRleCkpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAot
ICAgICAgICAgICAgY2VsbFJlc3VsdChyZXN1bHRHUFIsIG1fY29tcGlsZUluZGV4KTsKKyAgICAg
ICAgICAgIGNlbGxSZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBmbHVzaFJlZ2lzdGVycygpOwogICAgICAgICBH
UFJSZXN1bHQgcmVzdWx0KHRoaXMpOwogICAgICAgICAKLSAgICAgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25OZXdBcnJheUJ1ZmZlciwgcmVzdWx0LmdwcigpLCBnbG9iYWxPYmplY3QtPmFycmF5
U3RydWN0dXJlRm9ySW5kZXhpbmdUeXBlRHVyaW5nQWxsb2NhdGlvbihub2RlLmluZGV4aW5nVHlw
ZSgpKSwgbm9kZS5zdGFydENvbnN0YW50KCksIG5vZGUubnVtQ29uc3RhbnRzKCkpOworICAgICAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FycmF5QnVmZmVyLCByZXN1bHQuZ3ByKCksIGds
b2JhbE9iamVjdC0+YXJyYXlTdHJ1Y3R1cmVGb3JJbmRleGluZ1R5cGVEdXJpbmdBbGxvY2F0aW9u
KG5vZGUtPmluZGV4aW5nVHlwZSgpKSwgbm9kZS0+c3RhcnRDb25zdGFudCgpLCBub2RlLT5udW1D
b25zdGFudHMoKSk7CiAgICAgICAgIAotICAgICAgICBjZWxsUmVzdWx0KHJlc3VsdC5ncHIoKSwg
bV9jb21waWxlSW5kZXgpOworICAgICAgICBjZWxsUmVzdWx0KHJlc3VsdC5ncHIoKSwgbm9kZSk7
CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCkBAIC0zODQ4LDI0ICszODQzLDI0IEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgR1BSUmVz
dWx0IHJlc3VsdFBheWxvYWQodGhpcyk7CiAgICAgICAgIEdQUlJlc3VsdDIgcmVzdWx0VGFnKHRo
aXMpOwogICAgICAgICAKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdSZWdleHAs
IHJlc3VsdFRhZy5ncHIoKSwgcmVzdWx0UGF5bG9hZC5ncHIoKSwgbV9qaXQuY29kZUJsb2NrKCkt
PnJlZ2V4cChub2RlLnJlZ2V4cEluZGV4KCkpKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25OZXdSZWdleHAsIHJlc3VsdFRhZy5ncHIoKSwgcmVzdWx0UGF5bG9hZC5ncHIoKSwgbV9q
aXQuY29kZUJsb2NrKCktPnJlZ2V4cChub2RlLT5yZWdleHBJbmRleCgpKSk7CiAgICAgICAgIAog
ICAgICAgICAvLyBGSVhNRTogbWFrZSB0aGUgY2FsbE9wZXJhdGlvbiBhYm92ZSBleHBsaWNpdGx5
IHJldHVybiBhIGNlbGwgcmVzdWx0LCBvciBqaXRBc3NlcnQgdGhlIHRhZyBpcyBhIGNlbGwgdGFn
LgotICAgICAgICBjZWxsUmVzdWx0KHJlc3VsdFBheWxvYWQuZ3ByKCksIG1fY29tcGlsZUluZGV4
KTsKKyAgICAgICAgY2VsbFJlc3VsdChyZXN1bHRQYXlsb2FkLmdwcigpLCBub2RlKTsKICAgICAg
ICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKICAgICBjYXNlIENvbnZlcnRUaGlzOiB7Ci0gICAg
ICAgIGlmIChpc09iamVjdFNwZWN1bGF0aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgp
KS5tX3R5cGUpKSB7Ci0gICAgICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCB0aGlzVmFsdWUo
dGhpcywgbm9kZS5jaGlsZDEoKSk7CisgICAgICAgIGlmIChpc09iamVjdFNwZWN1bGF0aW9uKG1f
c3RhdGUuZm9yTm9kZShub2RlLT5jaGlsZDEoKSkubV90eXBlKSkgeworICAgICAgICAgICAgU3Bl
Y3VsYXRlQ2VsbE9wZXJhbmQgdGhpc1ZhbHVlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKICAgICAg
ICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgdGhpc1ZhbHVlKTsKICAgICAgICAgICAg
IG1faml0Lm1vdmUodGhpc1ZhbHVlLmdwcigpLCByZXN1bHQuZ3ByKCkpOwotICAgICAgICAgICAg
Y2VsbFJlc3VsdChyZXN1bHQuZ3ByKCksIG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAgICAgIGNl
bGxSZXN1bHQocmVzdWx0LmdwcigpLCBub2RlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9CiAgICAgICAgIAotICAgICAgICBpZiAoaXNPdGhlclNwZWN1bGF0aW9uKGF0KG5vZGUuY2hp
bGQxKCkpLnByZWRpY3Rpb24oKSkpIHsKLSAgICAgICAgICAgIEpTVmFsdWVPcGVyYW5kIHRoaXNW
YWx1ZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKKyAgICAgICAgaWYgKGlzT3RoZXJTcGVjdWxhdGlv
bihub2RlLT5jaGlsZDEoKS0+cHJlZGljdGlvbigpKSkgeworICAgICAgICAgICAgSlNWYWx1ZU9w
ZXJhbmQgdGhpc1ZhbHVlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgICAgIEdQUlRl
bXBvcmFyeSBzY3JhdGNoKHRoaXMpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBHUFJSZWcg
dGhpc1ZhbHVlVGFnR1BSID0gdGhpc1ZhbHVlLnRhZ0dQUigpOwpAQCAtMzg3NiwyOCArMzg3MSwy
OCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgICAg
ICBtX2ppdC5vcjMyKFRydXN0ZWRJbW0zMigxKSwgc2NyYXRjaEdQUik7CiAgICAgICAgICAgICAv
LyBUaGlzIGlzIGhhcmQuIEl0IHdvdWxkIGJlIGJldHRlciB0byBzYXZlIHRoZSB2YWx1ZSwgYnV0
IHdlIGNhbid0IHF1aXRlIGRvIGl0LAogICAgICAgICAgICAgLy8gc2luY2UgdGhpcyBvcGVyYXRp
b24gZG9lcyBub3Qgb3RoZXJ3aXNlIGdldCB0aGUgcGF5bG9hZC4KLSAgICAgICAgICAgIHNwZWN1
bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2gz
MihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIHNjcmF0Y2hHUFIsIFRydXN0ZWRJbW0zMihKU1Zh
bHVlOjpOdWxsVGFnKSkpOworICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBK
U1ZhbHVlUmVncygpLCAwLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWws
IHNjcmF0Y2hHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpOdWxsVGFnKSkpOwogICAgICAgICAg
ICAgCi0gICAgICAgICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRy
KG1faml0Lmdsb2JhbFRoaXNPYmplY3RGb3Iobm9kZS5jb2RlT3JpZ2luKSksIHNjcmF0Y2hHUFIp
OwotICAgICAgICAgICAgY2VsbFJlc3VsdChzY3JhdGNoR1BSLCBtX2NvbXBpbGVJbmRleCk7Cisg
ICAgICAgICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0
Lmdsb2JhbFRoaXNPYmplY3RGb3Iobm9kZS0+Y29kZU9yaWdpbikpLCBzY3JhdGNoR1BSKTsKKyAg
ICAgICAgICAgIGNlbGxSZXN1bHQoc2NyYXRjaEdQUiwgbm9kZSk7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgaWYgKGlzT2JqZWN0U3BlY3VsYXRpb24o
YXQobm9kZS5jaGlsZDEoKSkucHJlZGljdGlvbigpKSkgewotICAgICAgICAgICAgU3BlY3VsYXRl
Q2VsbE9wZXJhbmQgdGhpc1ZhbHVlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOworICAgICAgICBpZiAo
aXNPYmplY3RTcGVjdWxhdGlvbihub2RlLT5jaGlsZDEoKS0+cHJlZGljdGlvbigpKSkgeworICAg
ICAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgdGhpc1ZhbHVlKHRoaXMsIG5vZGUtPmNoaWxk
MSgpKTsKICAgICAgICAgICAgIEdQUlJlZyB0aGlzVmFsdWVHUFIgPSB0aGlzVmFsdWUuZ3ByKCk7
CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGlmICghaXNPYmplY3RTcGVjdWxhdGlvbihtX3N0
YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSkKLSAgICAgICAgICAgICAgICBzcGVj
dWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKHRoaXNWYWx1
ZUdQUiksIG5vZGUuY2hpbGQxKCksIG1faml0LmJyYW5jaFB0cihKSVRDb21waWxlcjo6RXF1YWws
IEpJVENvbXBpbGVyOjpBZGRyZXNzKHRoaXNWYWx1ZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZz
ZXQoKSksIEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+c3Ry
aW5nU3RydWN0dXJlLmdldCgpKSkpOworICAgICAgICAgICAgaWYgKCFpc09iamVjdFNwZWN1bGF0
aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLT5jaGlsZDEoKSkubV90eXBlKSkKKyAgICAgICAgICAg
ICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxs
KHRoaXNWYWx1ZUdQUiksIG5vZGUtPmNoaWxkMSgpLCBtX2ppdC5icmFuY2hQdHIoSklUQ29tcGls
ZXI6OkVxdWFsLCBKSVRDb21waWxlcjo6QWRkcmVzcyh0aGlzVmFsdWVHUFIsIEpTQ2VsbDo6c3Ry
dWN0dXJlT2Zmc2V0KCkpLCBKSVRDb21waWxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxE
YXRhKCktPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpKTsKICAgICAgICAgICAgIAogICAgICAgICAg
ICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCB0aGlzVmFsdWUpOwogICAgICAgICAgICAgR1BS
UmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKICAgICAgICAgICAgIG1faml0Lm1vdmUodGhp
c1ZhbHVlR1BSLCByZXN1bHRHUFIpOwotICAgICAgICAgICAgY2VsbFJlc3VsdChyZXN1bHRHUFIs
IG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAgICAgIGNlbGxSZXN1bHQocmVzdWx0R1BSLCBub2Rl
KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBKU1Zh
bHVlT3BlcmFuZCB0aGlzVmFsdWUodGhpcywgbm9kZS5jaGlsZDEoKSk7CisgICAgICAgIEpTVmFs
dWVPcGVyYW5kIHRoaXNWYWx1ZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgIEdQUlJl
ZyB0aGlzVmFsdWVUYWdHUFIgPSB0aGlzVmFsdWUudGFnR1BSKCk7CiAgICAgICAgIEdQUlJlZyB0
aGlzVmFsdWVQYXlsb2FkR1BSID0gdGhpc1ZhbHVlLnBheWxvYWRHUFIoKTsKICAgICAgICAgCkBA
IC0zOTA3LDcgKzM5MDIsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5v
ZGUpCiAgICAgICAgIEdQUlJlc3VsdCByZXN1bHRQYXlsb2FkKHRoaXMpOwogICAgICAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvbkNvbnZlcnRUaGlzLCByZXN1bHRUYWcuZ3ByKCksIHJlc3VsdFBh
eWxvYWQuZ3ByKCksIHRoaXNWYWx1ZVRhZ0dQUiwgdGhpc1ZhbHVlUGF5bG9hZEdQUik7CiAgICAg
ICAgIAotICAgICAgICBjZWxsUmVzdWx0KHJlc3VsdFBheWxvYWQuZ3ByKCksIG1fY29tcGlsZUlu
ZGV4KTsKKyAgICAgICAgY2VsbFJlc3VsdChyZXN1bHRQYXlsb2FkLmdwcigpLCBub2RlKTsKICAg
ICAgICAgYnJlYWs7CiAgICAgfQogCkBAIC0zOTE4LDcgKzM5MTMsNyBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIC8vIHRoZW4gd2Ugc3BlY3VsYXRl
IGJlY2F1c2Ugd2Ugd2FudCB0byBnZXQgcmVjb21waWxlZCBpZiBpdCBpc24ndCAoc2luY2UKICAg
ICAgICAgLy8gb3RoZXJ3aXNlIHdlJ2Qgc3RhcnQgdGFraW5nIHNsb3cgcGF0aCBhIGxvdCkuCiAg
ICAgICAgIAotICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBjYWxsZWUodGhpcywgbm9kZS5j
aGlsZDEoKSk7CisgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGNhbGxlZSh0aGlzLCBub2Rl
LT5jaGlsZDEoKSk7CiAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CiAgICAgICAg
IEdQUlRlbXBvcmFyeSBhbGxvY2F0b3IodGhpcyk7CiAgICAgICAgIEdQUlRlbXBvcmFyeSBzdHJ1
Y3R1cmUodGhpcyk7CkBAIC0zOTM3LDE1ICszOTMyLDE1IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgc2xvd1BhdGguYXBwZW5kKG1faml0LmJyYW5j
aFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIGFsbG9jYXRvckdQUikpOwogICAgICAgICBl
bWl0QWxsb2NhdGVKU09iamVjdChyZXN1bHRHUFIsIGFsbG9jYXRvckdQUiwgc3RydWN0dXJlR1BS
LCBUcnVzdGVkSW1tUHRyKDApLCBzY3JhdGNoR1BSLCBzbG93UGF0aCk7CiAKLSAgICAgICAgYWRk
U2xvd1BhdGhHZW5lcmF0b3Ioc2xvd1BhdGhDYWxsKHNsb3dQYXRoLCB0aGlzLCBvcGVyYXRpb25D
cmVhdGVUaGlzLCByZXN1bHRHUFIsIGNhbGxlZUdQUiwgbm9kZS5pbmxpbmVDYXBhY2l0eSgpKSk7
CisgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKHNsb3dQYXRoQ2FsbChzbG93UGF0aCwgdGhp
cywgb3BlcmF0aW9uQ3JlYXRlVGhpcywgcmVzdWx0R1BSLCBjYWxsZWVHUFIsIG5vZGUtPmlubGlu
ZUNhcGFjaXR5KCkpKTsKICAgICAgICAgCi0gICAgICAgIGNlbGxSZXN1bHQocmVzdWx0R1BSLCBt
X2NvbXBpbGVJbmRleCk7CisgICAgICAgIGNlbGxSZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKICAg
ICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAgY2FzZSBBbGxvY2F0aW9uUHJvZmlsZVdhdGNocG9p
bnQ6IHsKLSAgICAgICAganNDYXN0PEpTRnVuY3Rpb24qPihub2RlLmZ1bmN0aW9uKCkpLT5hZGRB
bGxvY2F0aW9uUHJvZmlsZVdhdGNocG9pbnQoc3BlY3VsYXRpb25XYXRjaHBvaW50KCkpOwotICAg
ICAgICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCk7CisgICAgICAgIGpzQ2FzdDxKU0Z1bmN0aW9u
Kj4obm9kZS0+ZnVuY3Rpb24oKSktPmFkZEFsbG9jYXRpb25Qcm9maWxlV2F0Y2hwb2ludChzcGVj
dWxhdGlvbldhdGNocG9pbnQoKSk7CisgICAgICAgIG5vUmVzdWx0KG5vZGUpOwogICAgICAgICBi
cmVhazsKICAgICB9CiAKQEAgLTM5NjAsNyArMzk1NSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgCiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpK
dW1wTGlzdCBzbG93UGF0aDsKICAgICAgICAgCi0gICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJl
ID0gbm9kZS5zdHJ1Y3R1cmUoKTsKKyAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBub2Rl
LT5zdHJ1Y3R1cmUoKTsKICAgICAgICAgc2l6ZV90IGFsbG9jYXRpb25TaXplID0gSlNPYmplY3Q6
OmFsbG9jYXRpb25TaXplKHN0cnVjdHVyZS0+aW5saW5lQ2FwYWNpdHkoKSk7CiAgICAgICAgIE1h
cmtlZEFsbG9jYXRvciogYWxsb2NhdG9yUHRyID0gJm1faml0Lmdsb2JhbERhdGEoKS0+aGVhcC5h
bGxvY2F0b3JGb3JPYmplY3RXaXRob3V0RGVzdHJ1Y3RvcihhbGxvY2F0aW9uU2l6ZSk7CiAKQEAg
LTM5NjksMjkgKzM5NjQsMjkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBu
b2RlKQogCiAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKHNsb3dQYXRoQ2FsbChzbG93UGF0
aCwgdGhpcywgb3BlcmF0aW9uTmV3T2JqZWN0LCByZXN1bHRHUFIsIHN0cnVjdHVyZSkpOwogICAg
ICAgICAKLSAgICAgICAgY2VsbFJlc3VsdChyZXN1bHRHUFIsIG1fY29tcGlsZUluZGV4KTsKKyAg
ICAgICAgY2VsbFJlc3VsdChyZXN1bHRHUFIsIG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9
CiAKICAgICBjYXNlIEdldENhbGxlZTogewogICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRo
aXMpOwotICAgICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjpwYXlsb2FkRm9yKHN0YXRp
Y19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4obm9kZS5jb2RlT3JpZ2luLnN0YWNrT2Zmc2V0KCkgKyBz
dGF0aWNfY2FzdDxpbnQ+KEpTU3RhY2s6OkNhbGxlZSkpKSwgcmVzdWx0LmdwcigpKTsKLSAgICAg
ICAgY2VsbFJlc3VsdChyZXN1bHQuZ3ByKCksIG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAgbV9q
aXQubG9hZFB0cihKSVRDb21waWxlcjo6cGF5bG9hZEZvcihzdGF0aWNfY2FzdDxWaXJ0dWFsUmVn
aXN0ZXI+KG5vZGUtPmNvZGVPcmlnaW4uc3RhY2tPZmZzZXQoKSArIHN0YXRpY19jYXN0PGludD4o
SlNTdGFjazo6Q2FsbGVlKSkpLCByZXN1bHQuZ3ByKCkpOworICAgICAgICBjZWxsUmVzdWx0KHJl
c3VsdC5ncHIoKSwgbm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCiAgICAg
Y2FzZSBTZXRDYWxsZWU6IHsKLSAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgY2FsbGVlKHRo
aXMsIG5vZGUuY2hpbGQxKCkpOwotICAgICAgICBtX2ppdC5zdG9yZVB0cihjYWxsZWUuZ3ByKCks
IEpJVENvbXBpbGVyOjpwYXlsb2FkRm9yKHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4obm9k
ZS5jb2RlT3JpZ2luLnN0YWNrT2Zmc2V0KCkgKyBzdGF0aWNfY2FzdDxpbnQ+KEpTU3RhY2s6OkNh
bGxlZSkpKSk7Ci0gICAgICAgIG5vUmVzdWx0KG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAgU3Bl
Y3VsYXRlQ2VsbE9wZXJhbmQgY2FsbGVlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAg
bV9qaXQuc3RvcmVQdHIoY2FsbGVlLmdwcigpLCBKSVRDb21waWxlcjo6cGF5bG9hZEZvcihzdGF0
aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KG5vZGUtPmNvZGVPcmlnaW4uc3RhY2tPZmZzZXQoKSAr
IHN0YXRpY19jYXN0PGludD4oSlNTdGFjazo6Q2FsbGVlKSkpKTsKKyAgICAgICAgbm9SZXN1bHQo
bm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBHZXRTY29w
ZTogewotICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBmdW5jdGlvbih0aGlzLCBub2RlLmNo
aWxkMSgpKTsKKyAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgZnVuY3Rpb24odGhpcywgbm9k
ZS0+Y2hpbGQxKCkpOwogICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIGZ1bmN0aW9u
KTsKICAgICAgICAgbV9qaXQubG9hZFB0cihKSVRDb21waWxlcjo6QWRkcmVzcyhmdW5jdGlvbi5n
cHIoKSwgSlNGdW5jdGlvbjo6b2Zmc2V0T2ZTY29wZUNoYWluKCkpLCByZXN1bHQuZ3ByKCkpOwot
ICAgICAgICBjZWxsUmVzdWx0KHJlc3VsdC5ncHIoKSwgbV9jb21waWxlSW5kZXgpOworICAgICAg
ICBjZWxsUmVzdWx0KHJlc3VsdC5ncHIoKSwgbm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0K
ICAgICAgICAgCkBAIC0zOTk5LDIwICszOTk0LDIwIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKICAg
ICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKIAotICAgICAgICBtX2ppdC5s
b2FkUHRyKEpJVENvbXBpbGVyOjpwYXlsb2FkRm9yKHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rl
cj4obm9kZS5jb2RlT3JpZ2luLnN0YWNrT2Zmc2V0KCkgKyBzdGF0aWNfY2FzdDxpbnQ+KEpTU3Rh
Y2s6OlNjb3BlQ2hhaW4pKSksIHJlc3VsdEdQUik7Ci0gICAgICAgIGNlbGxSZXN1bHQocmVzdWx0
R1BSLCBtX2NvbXBpbGVJbmRleCk7CisgICAgICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6
OnBheWxvYWRGb3Ioc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihub2RlLT5jb2RlT3JpZ2lu
LnN0YWNrT2Zmc2V0KCkgKyBzdGF0aWNfY2FzdDxpbnQ+KEpTU3RhY2s6OlNjb3BlQ2hhaW4pKSks
IHJlc3VsdEdQUik7CisgICAgICAgIGNlbGxSZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKICAgICAg
ICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKICAgICBjYXNlIFNldE15U2NvcGU6IHsKLSAgICAg
ICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgY2FsbGVlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwotICAg
ICAgICBtX2ppdC5zdG9yZVB0cihjYWxsZWUuZ3ByKCksIEpJVENvbXBpbGVyOjpwYXlsb2FkRm9y
KHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4obm9kZS5jb2RlT3JpZ2luLnN0YWNrT2Zmc2V0
KCkgKyBzdGF0aWNfY2FzdDxpbnQ+KEpTU3RhY2s6OlNjb3BlQ2hhaW4pKSkpOwotICAgICAgICBu
b1Jlc3VsdChtX2NvbXBpbGVJbmRleCk7CisgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGNh
bGxlZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIG1faml0LnN0b3JlUHRyKGNhbGxl
ZS5ncHIoKSwgSklUQ29tcGlsZXI6OnBheWxvYWRGb3Ioc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lz
dGVyPihub2RlLT5jb2RlT3JpZ2luLnN0YWNrT2Zmc2V0KCkgKyBzdGF0aWNfY2FzdDxpbnQ+KEpT
U3RhY2s6OlNjb3BlQ2hhaW4pKSkpOworICAgICAgICBub1Jlc3VsdChub2RlKTsKICAgICAgICAg
YnJlYWs7CiAgICAgfQogICAgICAgICAKICAgICBjYXNlIFNraXBUb3BTY29wZTogewotICAgICAg
ICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBzY29wZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKKyAgICAg
ICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgc2NvcGUodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwogICAg
ICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIHNjb3BlKTsKICAgICAgICAgR1BSUmVnIHJl
c3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKICAgICAgICAgbV9qaXQubW92ZShzY29wZS5ncHIoKSwg
cmVzdWx0R1BSKTsKQEAgLTQwMjMsNDQgKzQwMTgsNDQgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxWaXJ0
dWFsUmVnaXN0ZXI+KG1faml0LmNvZGVCbG9jaygpLT5hY3RpdmF0aW9uUmVnaXN0ZXIoKSkpKTsK
ICAgICAgICAgbV9qaXQubG9hZFB0cihKSVRDb21waWxlcjo6QWRkcmVzcyhyZXN1bHRHUFIsIEpT
U2NvcGU6Om9mZnNldE9mTmV4dCgpKSwgcmVzdWx0R1BSKTsKICAgICAgICAgYWN0aXZhdGlvbk5v
dENyZWF0ZWQubGluaygmbV9qaXQpOwotICAgICAgICBjZWxsUmVzdWx0KHJlc3VsdEdQUiwgbV9j
b21waWxlSW5kZXgpOworICAgICAgICBjZWxsUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7CiAgICAg
ICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBTa2lwU2NvcGU6IHsKLSAgICAg
ICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgc2NvcGUodGhpcywgbm9kZS5jaGlsZDEoKSk7CisgICAg
ICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIHNjb3BlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKICAg
ICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBzY29wZSk7CiAgICAgICAgIG1faml0Lmxv
YWRQdHIoSklUQ29tcGlsZXI6OkFkZHJlc3Moc2NvcGUuZ3ByKCksIEpTU2NvcGU6Om9mZnNldE9m
TmV4dCgpKSwgcmVzdWx0LmdwcigpKTsKLSAgICAgICAgY2VsbFJlc3VsdChyZXN1bHQuZ3ByKCks
IG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAgY2VsbFJlc3VsdChyZXN1bHQuZ3ByKCksIG5vZGUp
OwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgR2V0U2NvcGVSZWdp
c3RlcnM6IHsKLSAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgc2NvcGUodGhpcywgbm9kZS5j
aGlsZDEoKSk7CisgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIHNjb3BlKHRoaXMsIG5vZGUt
PmNoaWxkMSgpKTsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKICAgICAgICAg
R1BSUmVnIHNjb3BlR1BSID0gc2NvcGUuZ3ByKCk7CiAgICAgICAgIEdQUlJlZyByZXN1bHRHUFIg
PSByZXN1bHQuZ3ByKCk7CiAKICAgICAgICAgbV9qaXQubG9hZFB0cihKSVRDb21waWxlcjo6QWRk
cmVzcyhzY29wZUdQUiwgSlNWYXJpYWJsZU9iamVjdDo6b2Zmc2V0T2ZSZWdpc3RlcnMoKSksIHJl
c3VsdEdQUik7Ci0gICAgICAgIHN0b3JhZ2VSZXN1bHQocmVzdWx0R1BSLCBtX2NvbXBpbGVJbmRl
eCk7CisgICAgICAgIHN0b3JhZ2VSZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKICAgICAgICAgYnJl
YWs7CiAgICAgfQogICAgIGNhc2UgR2V0U2NvcGVkVmFyOiB7Ci0gICAgICAgIFN0b3JhZ2VPcGVy
YW5kIHJlZ2lzdGVycyh0aGlzLCBub2RlLmNoaWxkMSgpKTsKKyAgICAgICAgU3RvcmFnZU9wZXJh
bmQgcmVnaXN0ZXJzKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgR1BSVGVtcG9yYXJ5
IHJlc3VsdFRhZyh0aGlzKTsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdFBheWxvYWQodGhp
cyk7CiAgICAgICAgIEdQUlJlZyByZWdpc3RlcnNHUFIgPSByZWdpc3RlcnMuZ3ByKCk7CiAgICAg
ICAgIEdQUlJlZyByZXN1bHRUYWdHUFIgPSByZXN1bHRUYWcuZ3ByKCk7CiAgICAgICAgIEdQUlJl
ZyByZXN1bHRQYXlsb2FkR1BSID0gcmVzdWx0UGF5bG9hZC5ncHIoKTsKLSAgICAgICAgbV9qaXQu
bG9hZDMyKEpJVENvbXBpbGVyOjpBZGRyZXNzKHJlZ2lzdGVyc0dQUiwgbm9kZS52YXJOdW1iZXIo
KSAqIHNpemVvZihSZWdpc3RlcikgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3Jp
cHRvciwgYXNCaXRzLnRhZykpLCByZXN1bHRUYWdHUFIpOwotICAgICAgICBtX2ppdC5sb2FkMzIo
SklUQ29tcGlsZXI6OkFkZHJlc3MocmVnaXN0ZXJzR1BSLCBub2RlLnZhck51bWJlcigpICogc2l6
ZW9mKFJlZ2lzdGVyKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBh
c0JpdHMucGF5bG9hZCkpLCByZXN1bHRQYXlsb2FkR1BSKTsKLSAgICAgICAganNWYWx1ZVJlc3Vs
dChyZXN1bHRUYWdHUFIsIHJlc3VsdFBheWxvYWRHUFIsIG1fY29tcGlsZUluZGV4KTsKKyAgICAg
ICAgbV9qaXQubG9hZDMyKEpJVENvbXBpbGVyOjpBZGRyZXNzKHJlZ2lzdGVyc0dQUiwgbm9kZS0+
dmFyTnVtYmVyKCkgKiBzaXplb2YoUmVnaXN0ZXIpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRW
YWx1ZURlc2NyaXB0b3IsIGFzQml0cy50YWcpKSwgcmVzdWx0VGFnR1BSKTsKKyAgICAgICAgbV9q
aXQubG9hZDMyKEpJVENvbXBpbGVyOjpBZGRyZXNzKHJlZ2lzdGVyc0dQUiwgbm9kZS0+dmFyTnVt
YmVyKCkgKiBzaXplb2YoUmVnaXN0ZXIpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURl
c2NyaXB0b3IsIGFzQml0cy5wYXlsb2FkKSksIHJlc3VsdFBheWxvYWRHUFIpOworICAgICAgICBq
c1ZhbHVlUmVzdWx0KHJlc3VsdFRhZ0dQUiwgcmVzdWx0UGF5bG9hZEdQUiwgbm9kZSk7CiAgICAg
ICAgIGJyZWFrOwogICAgIH0KICAgICBjYXNlIFB1dFNjb3BlZFZhcjogewotICAgICAgICBTcGVj
dWxhdGVDZWxsT3BlcmFuZCBzY29wZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKLSAgICAgICAgU3Rv
cmFnZU9wZXJhbmQgcmVnaXN0ZXJzKHRoaXMsIG5vZGUuY2hpbGQyKCkpOwotICAgICAgICBKU1Zh
bHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLmNoaWxkMygpKTsKKyAgICAgICAgU3BlY3VsYXRl
Q2VsbE9wZXJhbmQgc2NvcGUodGhpcywgbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBTdG9yYWdl
T3BlcmFuZCByZWdpc3RlcnModGhpcywgbm9kZS0+Y2hpbGQyKCkpOworICAgICAgICBKU1ZhbHVl
T3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLT5jaGlsZDMoKSk7CiAgICAgICAgIEdQUlRlbXBvcmFy
eSBzY3JhdGNoUmVnaXN0ZXIodGhpcyk7CiAgICAgICAgIEdQUlJlZyBzY29wZUdQUiA9IHNjb3Bl
LmdwcigpOwogICAgICAgICBHUFJSZWcgcmVnaXN0ZXJzR1BSID0gcmVnaXN0ZXJzLmdwcigpOwpA
QCAtNDA2OCwyMSArNDA2MywyMSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUm
IG5vZGUpCiAgICAgICAgIEdQUlJlZyB2YWx1ZVBheWxvYWRHUFIgPSB2YWx1ZS5wYXlsb2FkR1BS
KCk7CiAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaFJlZ2lzdGVyLmdwcigpOwog
Ci0gICAgICAgIG1faml0LnN0b3JlMzIodmFsdWVUYWdHUFIsIEpJVENvbXBpbGVyOjpBZGRyZXNz
KHJlZ2lzdGVyc0dQUiwgbm9kZS52YXJOdW1iZXIoKSAqIHNpemVvZihSZWdpc3RlcikgKyBPQkpF
Q1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnRhZykpKTsKLSAgICAg
ICAgbV9qaXQuc3RvcmUzMih2YWx1ZVBheWxvYWRHUFIsIEpJVENvbXBpbGVyOjpBZGRyZXNzKHJl
Z2lzdGVyc0dQUiwgbm9kZS52YXJOdW1iZXIoKSAqIHNpemVvZihSZWdpc3RlcikgKyBPQkpFQ1Rf
T0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnBheWxvYWQpKSk7Ci0gICAg
ICAgIHdyaXRlQmFycmllcihzY29wZUdQUiwgdmFsdWVUYWdHUFIsIG5vZGUuY2hpbGQyKCksIFdy
aXRlQmFycmllckZvclZhcmlhYmxlQWNjZXNzLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgbm9SZXN1
bHQobV9jb21waWxlSW5kZXgpOworICAgICAgICBtX2ppdC5zdG9yZTMyKHZhbHVlVGFnR1BSLCBK
SVRDb21waWxlcjo6QWRkcmVzcyhyZWdpc3RlcnNHUFIsIG5vZGUtPnZhck51bWJlcigpICogc2l6
ZW9mKFJlZ2lzdGVyKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBh
c0JpdHMudGFnKSkpOworICAgICAgICBtX2ppdC5zdG9yZTMyKHZhbHVlUGF5bG9hZEdQUiwgSklU
Q29tcGlsZXI6OkFkZHJlc3MocmVnaXN0ZXJzR1BSLCBub2RlLT52YXJOdW1iZXIoKSAqIHNpemVv
ZihSZWdpc3RlcikgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNC
aXRzLnBheWxvYWQpKSk7CisgICAgICAgIHdyaXRlQmFycmllcihzY29wZUdQUiwgdmFsdWVUYWdH
UFIsIG5vZGUtPmNoaWxkMigpLCBXcml0ZUJhcnJpZXJGb3JWYXJpYWJsZUFjY2Vzcywgc2NyYXRj
aEdQUik7CisgICAgICAgIG5vUmVzdWx0KG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9CiAg
ICAgICAgIAogICAgIGNhc2UgR2V0QnlJZDogewotICAgICAgICBpZiAoIW5vZGUucHJlZGljdGlv
bigpKSB7Ci0gICAgICAgICAgICB0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihJbmFkZXF1
YXRlQ292ZXJhZ2UsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSk7CisgICAgICAgIGlmICghbm9kZS0+
cHJlZGljdGlvbigpKSB7CisgICAgICAgICAgICB0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlv
bihJbmFkZXF1YXRlQ292ZXJhZ2UsIEpTVmFsdWVSZWdzKCksIDApOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIGlmIChpc0NlbGxTcGVjdWxhdGlvbihh
dChub2RlLmNoaWxkMSgpKS5wcmVkaWN0aW9uKCkpKSB7Ci0gICAgICAgICAgICBTcGVjdWxhdGVD
ZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOworICAgICAgICBpZiAoaXNDZWxs
U3BlY3VsYXRpb24obm9kZS0+Y2hpbGQxKCktPnByZWRpY3Rpb24oKSkpIHsKKyAgICAgICAgICAg
IFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwogICAgICAg
ICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdFRhZyh0aGlzLCBiYXNlKTsKICAgICAgICAgICAgIEdQ
UlRlbXBvcmFyeSByZXN1bHRQYXlsb2FkKHRoaXMpOwogICAgICAgICAgICAgCkBAIC00MDkyLDEz
ICs0MDg3LDEzIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKIAog
ICAgICAgICAgICAgYmFzZS51c2UoKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgY2FjaGVk
R2V0QnlJZChub2RlLmNvZGVPcmlnaW4sIEludmFsaWRHUFJSZWcsIGJhc2VHUFIsIHJlc3VsdFRh
Z0dQUiwgcmVzdWx0UGF5bG9hZEdQUiwgbm9kZS5pZGVudGlmaWVyTnVtYmVyKCkpOworICAgICAg
ICAgICAgY2FjaGVkR2V0QnlJZChub2RlLT5jb2RlT3JpZ2luLCBJbnZhbGlkR1BSUmVnLCBiYXNl
R1BSLCByZXN1bHRUYWdHUFIsIHJlc3VsdFBheWxvYWRHUFIsIG5vZGUtPmlkZW50aWZpZXJOdW1i
ZXIoKSk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0VGFn
R1BSLCByZXN1bHRQYXlsb2FkR1BSLCBtX2NvbXBpbGVJbmRleCwgVXNlQ2hpbGRyZW5DYWxsZWRF
eHBsaWNpdGx5KTsKKyAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0VGFnR1BSLCByZXN1
bHRQYXlsb2FkR1BSLCBub2RlLCBVc2VDaGlsZHJlbkNhbGxlZEV4cGxpY2l0bHkpOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIEpTVmFsdWVPcGVyYW5k
IGJhc2UodGhpcywgbm9kZS5jaGlsZDEoKSk7CisgICAgICAgIEpTVmFsdWVPcGVyYW5kIGJhc2Uo
dGhpcywgbm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0VGFnKHRo
aXMsIGJhc2UpOwogICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0UGF5bG9hZCh0aGlzKTsKICAg
ICAgICAgCkBAIC00MTExLDIwICs0MTA2LDIwIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGUoTm9kZSYgbm9kZSkKICAgICAgICAgCiAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIG5vdENl
bGwgPSBtX2ppdC5icmFuY2gzMihKSVRDb21waWxlcjo6Tm90RXF1YWwsIGJhc2VUYWdHUFIsIFRy
dXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSk7CiAgICAgICAgIAotICAgICAgICBjYWNoZWRH
ZXRCeUlkKG5vZGUuY29kZU9yaWdpbiwgYmFzZVRhZ0dQUiwgYmFzZVBheWxvYWRHUFIsIHJlc3Vs
dFRhZ0dQUiwgcmVzdWx0UGF5bG9hZEdQUiwgbm9kZS5pZGVudGlmaWVyTnVtYmVyKCksIG5vdENl
bGwpOworICAgICAgICBjYWNoZWRHZXRCeUlkKG5vZGUtPmNvZGVPcmlnaW4sIGJhc2VUYWdHUFIs
IGJhc2VQYXlsb2FkR1BSLCByZXN1bHRUYWdHUFIsIHJlc3VsdFBheWxvYWRHUFIsIG5vZGUtPmlk
ZW50aWZpZXJOdW1iZXIoKSwgbm90Q2VsbCk7CiAgICAgICAgIAotICAgICAgICBqc1ZhbHVlUmVz
dWx0KHJlc3VsdFRhZ0dQUiwgcmVzdWx0UGF5bG9hZEdQUiwgbV9jb21waWxlSW5kZXgsIFVzZUNo
aWxkcmVuQ2FsbGVkRXhwbGljaXRseSk7CisgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0VGFn
R1BSLCByZXN1bHRQYXlsb2FkR1BSLCBub2RlLCBVc2VDaGlsZHJlbkNhbGxlZEV4cGxpY2l0bHkp
OwogICAgICAgICBicmVhazsKICAgICB9CiAKICAgICBjYXNlIEdldEJ5SWRGbHVzaDogewotICAg
ICAgICBpZiAoIW5vZGUucHJlZGljdGlvbigpKSB7Ci0gICAgICAgICAgICB0ZXJtaW5hdGVTcGVj
dWxhdGl2ZUV4ZWN1dGlvbihJbmFkZXF1YXRlQ292ZXJhZ2UsIEpTVmFsdWVSZWdzKCksIE5vTm9k
ZSk7CisgICAgICAgIGlmICghbm9kZS0+cHJlZGljdGlvbigpKSB7CisgICAgICAgICAgICB0ZXJt
aW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihJbmFkZXF1YXRlQ292ZXJhZ2UsIEpTVmFsdWVSZWdz
KCksIDApOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAg
IGlmIChpc0NlbGxTcGVjdWxhdGlvbihhdChub2RlLmNoaWxkMSgpKS5wcmVkaWN0aW9uKCkpKSB7
Ci0gICAgICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUuY2hpbGQx
KCkpOworICAgICAgICBpZiAoaXNDZWxsU3BlY3VsYXRpb24obm9kZS0+Y2hpbGQxKCktPnByZWRp
Y3Rpb24oKSkpIHsKKyAgICAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywg
bm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBHUFJSZWcgYmFzZUdQ
UiA9IGJhc2UuZ3ByKCk7CiAKQEAgLTQxMzcsMTMgKzQxMzIsMTMgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAgICAgCiAgICAgICAgICAgICBmbHVz
aFJlZ2lzdGVycygpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBjYWNoZWRHZXRCeUlkKG5v
ZGUuY29kZU9yaWdpbiwgSW52YWxpZEdQUlJlZywgYmFzZUdQUiwgcmVzdWx0VGFnR1BSLCByZXN1
bHRQYXlsb2FkR1BSLCBub2RlLmlkZW50aWZpZXJOdW1iZXIoKSwgSklUQ29tcGlsZXI6Okp1bXAo
KSwgRG9udFNwaWxsKTsKKyAgICAgICAgICAgIGNhY2hlZEdldEJ5SWQobm9kZS0+Y29kZU9yaWdp
biwgSW52YWxpZEdQUlJlZywgYmFzZUdQUiwgcmVzdWx0VGFnR1BSLCByZXN1bHRQYXlsb2FkR1BS
LCBub2RlLT5pZGVudGlmaWVyTnVtYmVyKCksIEpJVENvbXBpbGVyOjpKdW1wKCksIERvbnRTcGls
bCk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0VGFnR1BS
LCByZXN1bHRQYXlsb2FkR1BSLCBtX2NvbXBpbGVJbmRleCwgVXNlQ2hpbGRyZW5DYWxsZWRFeHBs
aWNpdGx5KTsKKyAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0VGFnR1BSLCByZXN1bHRQ
YXlsb2FkR1BSLCBub2RlLCBVc2VDaGlsZHJlbkNhbGxlZEV4cGxpY2l0bHkpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIEpTVmFsdWVPcGVyYW5kIGJh
c2UodGhpcywgbm9kZS5jaGlsZDEoKSk7CisgICAgICAgIEpTVmFsdWVPcGVyYW5kIGJhc2UodGhp
cywgbm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICBHUFJSZWcgYmFzZVRhZ0dQUiA9IGJhc2UudGFn
R1BSKCk7CiAgICAgICAgIEdQUlJlZyBiYXNlUGF5bG9hZEdQUiA9IGJhc2UucGF5bG9hZEdQUigp
OwogCkBAIC00MTU4LDkgKzQxNTMsOSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5v
ZGUmIG5vZGUpCiAgICAgICAgIAogICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBub3RDZWxsID0g
bV9qaXQuYnJhbmNoMzIoSklUQ29tcGlsZXI6Ok5vdEVxdWFsLCBiYXNlVGFnR1BSLCBUcnVzdGVk
SW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZykpOwogICAgICAgICAKLSAgICAgICAgY2FjaGVkR2V0QnlJ
ZChub2RlLmNvZGVPcmlnaW4sIGJhc2VUYWdHUFIsIGJhc2VQYXlsb2FkR1BSLCByZXN1bHRUYWdH
UFIsIHJlc3VsdFBheWxvYWRHUFIsIG5vZGUuaWRlbnRpZmllck51bWJlcigpLCBub3RDZWxsLCBE
b250U3BpbGwpOworICAgICAgICBjYWNoZWRHZXRCeUlkKG5vZGUtPmNvZGVPcmlnaW4sIGJhc2VU
YWdHUFIsIGJhc2VQYXlsb2FkR1BSLCByZXN1bHRUYWdHUFIsIHJlc3VsdFBheWxvYWRHUFIsIG5v
ZGUtPmlkZW50aWZpZXJOdW1iZXIoKSwgbm90Q2VsbCwgRG9udFNwaWxsKTsKICAgICAgICAgCi0g
ICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0VGFnR1BSLCByZXN1bHRQYXlsb2FkR1BSLCBtX2Nv
bXBpbGVJbmRleCwgVXNlQ2hpbGRyZW5DYWxsZWRFeHBsaWNpdGx5KTsKKyAgICAgICAganNWYWx1
ZVJlc3VsdChyZXN1bHRUYWdHUFIsIHJlc3VsdFBheWxvYWRHUFIsIG5vZGUsIFVzZUNoaWxkcmVu
Q2FsbGVkRXhwbGljaXRseSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIApAQCAtNDE2OSw0MCAr
NDE2NCw0MCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAg
ICAgIGJyZWFrOwogICAgICAgICAKICAgICBjYXNlIENoZWNrRnVuY3Rpb246IHsKLSAgICAgICAg
U3BlY3VsYXRlQ2VsbE9wZXJhbmQgZnVuY3Rpb24odGhpcywgbm9kZS5jaGlsZDEoKSk7Ci0gICAg
ICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkRnVuY3Rpb24sIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRD
ZWxsKGZ1bmN0aW9uLmdwcigpKSwgbm9kZS5jaGlsZDEoKSwgbV9qaXQuYnJhbmNoV2Vha1B0cihK
SVRDb21waWxlcjo6Tm90RXF1YWwsIGZ1bmN0aW9uLmdwcigpLCBub2RlLmZ1bmN0aW9uKCkpKTsK
LSAgICAgICAgbm9SZXN1bHQobV9jb21waWxlSW5kZXgpOworICAgICAgICBTcGVjdWxhdGVDZWxs
T3BlcmFuZCBmdW5jdGlvbih0aGlzLCBub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIHNwZWN1bGF0
aW9uQ2hlY2soQmFkRnVuY3Rpb24sIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKGZ1bmN0aW9u
LmdwcigpKSwgbm9kZS0+Y2hpbGQxKCksIG1faml0LmJyYW5jaFdlYWtQdHIoSklUQ29tcGlsZXI6
Ok5vdEVxdWFsLCBmdW5jdGlvbi5ncHIoKSwgbm9kZS0+ZnVuY3Rpb24oKSkpOworICAgICAgICBu
b1Jlc3VsdChub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAgY2FzZSBDaGVja0V4
ZWN1dGFibGU6IHsKLSAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgZnVuY3Rpb24odGhpcywg
bm9kZS5jaGlsZDEoKSk7Ci0gICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkRXhlY3V0YWJsZSwg
SlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwoZnVuY3Rpb24uZ3ByKCkpLCBub2RlLmNoaWxkMSgp
LCBtX2ppdC5icmFuY2hXZWFrUHRyKEpJVENvbXBpbGVyOjpOb3RFcXVhbCwgSklUQ29tcGlsZXI6
OkFkZHJlc3MoZnVuY3Rpb24uZ3ByKCksIEpTRnVuY3Rpb246Om9mZnNldE9mRXhlY3V0YWJsZSgp
KSwgbm9kZS5leGVjdXRhYmxlKCkpKTsKLSAgICAgICAgbm9SZXN1bHQobV9jb21waWxlSW5kZXgp
OworICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBmdW5jdGlvbih0aGlzLCBub2RlLT5jaGls
ZDEoKSk7CisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkRXhlY3V0YWJsZSwgSlNWYWx1ZVNv
dXJjZTo6dW5ib3hlZENlbGwoZnVuY3Rpb24uZ3ByKCkpLCBub2RlLT5jaGlsZDEoKSwgbV9qaXQu
YnJhbmNoV2Vha1B0cihKSVRDb21waWxlcjo6Tm90RXF1YWwsIEpJVENvbXBpbGVyOjpBZGRyZXNz
KGZ1bmN0aW9uLmdwcigpLCBKU0Z1bmN0aW9uOjpvZmZzZXRPZkV4ZWN1dGFibGUoKSksIG5vZGUt
PmV4ZWN1dGFibGUoKSkpOworICAgICAgICBub1Jlc3VsdChub2RlKTsKICAgICAgICAgYnJlYWs7
CiAgICAgfQogICAgICAgICAKICAgICBjYXNlIENoZWNrU3RydWN0dXJlOgogICAgIGNhc2UgRm9y
d2FyZENoZWNrU3RydWN0dXJlOiB7Ci0gICAgICAgIEFic3RyYWN0VmFsdWUmIHZhbHVlID0gbV9z
dGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpOwotICAgICAgICBpZiAodmFsdWUubV9jdXJyZW50
S25vd25TdHJ1Y3R1cmUuaXNTdWJzZXRPZihub2RlLnN0cnVjdHVyZVNldCgpKQorICAgICAgICBB
YnN0cmFjdFZhbHVlJiB2YWx1ZSA9IG1fc3RhdGUuZm9yTm9kZShub2RlLT5jaGlsZDEoKSk7Cisg
ICAgICAgIGlmICh2YWx1ZS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5pc1N1YnNldE9mKG5vZGUt
PnN0cnVjdHVyZVNldCgpKQogICAgICAgICAgICAgJiYgaXNDZWxsU3BlY3VsYXRpb24odmFsdWUu
bV90eXBlKSkgewotICAgICAgICAgICAgbm9SZXN1bHQobV9jb21waWxlSW5kZXgpOworICAgICAg
ICAgICAgbm9SZXN1bHQobm9kZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAg
ICAgICAKLSAgICAgICAgU3BlY3VsYXRpb25EaXJlY3Rpb24gZGlyZWN0aW9uID0gbm9kZS5vcCgp
ID09IEZvcndhcmRDaGVja1N0cnVjdHVyZSA/IEZvcndhcmRTcGVjdWxhdGlvbiA6IEJhY2t3YXJk
U3BlY3VsYXRpb247Ci0gICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9k
ZS5jaGlsZDEoKSwgZGlyZWN0aW9uKTsKKyAgICAgICAgU3BlY3VsYXRpb25EaXJlY3Rpb24gZGly
ZWN0aW9uID0gbm9kZS0+b3AoKSA9PSBGb3J3YXJkQ2hlY2tTdHJ1Y3R1cmUgPyBGb3J3YXJkU3Bl
Y3VsYXRpb24gOiBCYWNrd2FyZFNwZWN1bGF0aW9uOworICAgICAgICBTcGVjdWxhdGVDZWxsT3Bl
cmFuZCBiYXNlKHRoaXMsIG5vZGUtPmNoaWxkMSgpLCBkaXJlY3Rpb24pOwogICAgICAgICAKLSAg
ICAgICAgQVNTRVJUKG5vZGUuc3RydWN0dXJlU2V0KCkuc2l6ZSgpKTsKKyAgICAgICAgQVNTRVJU
KG5vZGUtPnN0cnVjdHVyZVNldCgpLnNpemUoKSk7CiAgICAgICAgIAotICAgICAgICBpZiAobm9k
ZS5zdHJ1Y3R1cmVTZXQoKS5zaXplKCkgPT0gMSkgeworICAgICAgICBpZiAobm9kZS0+c3RydWN0
dXJlU2V0KCkuc2l6ZSgpID09IDEpIHsKICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCi0g
ICAgICAgICAgICAgICAgQmFkQ2FjaGUsIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKGJhc2Uu
Z3ByKCkpLCBOb05vZGUsCisgICAgICAgICAgICAgICAgQmFkQ2FjaGUsIEpTVmFsdWVTb3VyY2U6
OnVuYm94ZWRDZWxsKGJhc2UuZ3ByKCkpLCAwLAogICAgICAgICAgICAgICAgIG1faml0LmJyYW5j
aFdlYWtQdHIoCiAgICAgICAgICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpOb3RFcXVhbCwKICAg
ICAgICAgICAgICAgICAgICAgSklUQ29tcGlsZXI6OkFkZHJlc3MoYmFzZS5ncHIoKSwgSlNDZWxs
OjpzdHJ1Y3R1cmVPZmZzZXQoKSksCi0gICAgICAgICAgICAgICAgICAgIG5vZGUuc3RydWN0dXJl
U2V0KClbMF0pLAorICAgICAgICAgICAgICAgICAgICBub2RlLT5zdHJ1Y3R1cmVTZXQoKVswXSks
CiAgICAgICAgICAgICAgICAgZGlyZWN0aW9uKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAg
ICAgIEdQUlRlbXBvcmFyeSBzdHJ1Y3R1cmUodGhpcyk7CkBAIC00MjExLDE5ICs0MjA2LDE5IEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgICAgIAog
ICAgICAgICAgICAgSklUQ29tcGlsZXI6Okp1bXBMaXN0IGRvbmU7CiAgICAgICAgICAgICAKLSAg
ICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbm9kZS5zdHJ1Y3R1cmVTZXQoKS5zaXpl
KCkgLSAxOyArK2kpCi0gICAgICAgICAgICAgICAgZG9uZS5hcHBlbmQobV9qaXQuYnJhbmNoV2Vh
a1B0cihKSVRDb21waWxlcjo6RXF1YWwsIHN0cnVjdHVyZS5ncHIoKSwgbm9kZS5zdHJ1Y3R1cmVT
ZXQoKVtpXSkpOworICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBub2RlLT5zdHJ1
Y3R1cmVTZXQoKS5zaXplKCkgLSAxOyArK2kpCisgICAgICAgICAgICAgICAgZG9uZS5hcHBlbmQo
bV9qaXQuYnJhbmNoV2Vha1B0cihKSVRDb21waWxlcjo6RXF1YWwsIHN0cnVjdHVyZS5ncHIoKSwg
bm9kZS0+c3RydWN0dXJlU2V0KClbaV0pKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgc3Bl
Y3VsYXRpb25DaGVjaygKLSAgICAgICAgICAgICAgICBCYWRDYWNoZSwgSlNWYWx1ZVNvdXJjZTo6
dW5ib3hlZENlbGwoYmFzZS5ncHIoKSksIE5vTm9kZSwKKyAgICAgICAgICAgICAgICBCYWRDYWNo
ZSwgSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwoYmFzZS5ncHIoKSksIDAsCiAgICAgICAgICAg
ICAgICAgbV9qaXQuYnJhbmNoV2Vha1B0cigKLSAgICAgICAgICAgICAgICAgICAgSklUQ29tcGls
ZXI6Ok5vdEVxdWFsLCBzdHJ1Y3R1cmUuZ3ByKCksIG5vZGUuc3RydWN0dXJlU2V0KCkubGFzdCgp
KSwKKyAgICAgICAgICAgICAgICAgICAgSklUQ29tcGlsZXI6Ok5vdEVxdWFsLCBzdHJ1Y3R1cmUu
Z3ByKCksIG5vZGUtPnN0cnVjdHVyZVNldCgpLmxhc3QoKSksCiAgICAgICAgICAgICAgICAgZGly
ZWN0aW9uKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgZG9uZS5saW5rKCZtX2ppdCk7CiAg
ICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIG5vUmVzdWx0KG1fY29tcGlsZUluZGV4KTsKKyAg
ICAgICAgbm9SZXN1bHQobm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCkBA
IC00MjM2LDU0ICs0MjMxLDU0IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYg
bm9kZSkKICAgICAgICAgLy8gd2UnbGwganVzdCByZWx5IG9uIHRoZSBmYWN0IHRoYXQgd2hlbiBh
IHdhdGNocG9pbnQgZmlyZXMgdGhlbiB0aGF0J3MKICAgICAgICAgLy8gcXVpdGUgYSBoaW50IGFs
cmVhZHkuCiAgICAgICAgIAotICAgICAgICBTcGVjdWxhdGlvbkRpcmVjdGlvbiBkaXJlY3Rpb24g
PSBub2RlLm9wKCkgPT0gRm9yd2FyZFN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50ID8gRm9y
d2FyZFNwZWN1bGF0aW9uIDogQmFja3dhcmRTcGVjdWxhdGlvbjsKKyAgICAgICAgU3BlY3VsYXRp
b25EaXJlY3Rpb24gZGlyZWN0aW9uID0gbm9kZS0+b3AoKSA9PSBGb3J3YXJkU3RydWN0dXJlVHJh
bnNpdGlvbldhdGNocG9pbnQgPyBGb3J3YXJkU3BlY3VsYXRpb24gOiBCYWNrd2FyZFNwZWN1bGF0
aW9uOwogCi0gICAgICAgIG1faml0LmFkZFdlYWtSZWZlcmVuY2Uobm9kZS5zdHJ1Y3R1cmUoKSk7
Ci0gICAgICAgIG5vZGUuc3RydWN0dXJlKCktPmFkZFRyYW5zaXRpb25XYXRjaHBvaW50KAorICAg
ICAgICBtX2ppdC5hZGRXZWFrUmVmZXJlbmNlKG5vZGUtPnN0cnVjdHVyZSgpKTsKKyAgICAgICAg
bm9kZS0+c3RydWN0dXJlKCktPmFkZFRyYW5zaXRpb25XYXRjaHBvaW50KAogICAgICAgICAgICAg
c3BlY3VsYXRpb25XYXRjaHBvaW50KAotICAgICAgICAgICAgICAgIG1faml0LmdyYXBoKClbbm9k
ZS5jaGlsZDEoKV0ub3AoKSA9PSBXZWFrSlNDb25zdGFudCA/IEJhZFdlYWtDb25zdGFudENhY2hl
IDogQmFkQ2FjaGUsCisgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCktPm9wKCkgPT0gV2Vh
a0pTQ29uc3RhbnQgPyBCYWRXZWFrQ29uc3RhbnRDYWNoZSA6IEJhZENhY2hlLAogICAgICAgICAg
ICAgICAgIGRpcmVjdGlvbikpOwogICAgICAgICAKICNpZiAhQVNTRVJUX0RJU0FCTEVECi0gICAg
ICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSgpLCBkaXJlY3Rp
b24pOwotICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBpc09LID0gbV9qaXQuYnJhbmNoUHRyKEpJ
VENvbXBpbGVyOjpFcXVhbCwgSklUQ29tcGlsZXI6OkFkZHJlc3Mob3AxLmdwcigpLCBKU0NlbGw6
OnN0cnVjdHVyZU9mZnNldCgpKSwgVHJ1c3RlZEltbVB0cihub2RlLnN0cnVjdHVyZSgpKSk7Cisg
ICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIG9wMSh0aGlzLCBub2RlLT5jaGlsZDEoKSwgZGly
ZWN0aW9uKTsKKyAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgaXNPSyA9IG1faml0LmJyYW5jaFB0
cihKSVRDb21waWxlcjo6RXF1YWwsIEpJVENvbXBpbGVyOjpBZGRyZXNzKG9wMS5ncHIoKSwgSlND
ZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIFRydXN0ZWRJbW1QdHIobm9kZS0+c3RydWN0dXJlKCkp
KTsKICAgICAgICAgbV9qaXQuYnJlYWtwb2ludCgpOwogICAgICAgICBpc09LLmxpbmsoJm1faml0
KTsKICNlbmRpZgogCi0gICAgICAgIG5vUmVzdWx0KG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAg
bm9SZXN1bHQobm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCiAgICAgY2Fz
ZSBQaGFudG9tUHV0U3RydWN0dXJlOiB7Ci0gICAgICAgIEFTU0VSVChub2RlLnN0cnVjdHVyZVRy
YW5zaXRpb25EYXRhKCkucHJldmlvdXNTdHJ1Y3R1cmUtPnRyYW5zaXRpb25XYXRjaHBvaW50U2V0
SGFzQmVlbkludmFsaWRhdGVkKCkpOworICAgICAgICBBU1NFUlQobm9kZS0+c3RydWN0dXJlVHJh
bnNpdGlvbkRhdGEoKS5wcmV2aW91c1N0cnVjdHVyZS0+dHJhbnNpdGlvbldhdGNocG9pbnRTZXRI
YXNCZWVuSW52YWxpZGF0ZWQoKSk7CiAgICAgICAgIG1faml0LmFkZFdlYWtSZWZlcmVuY2VUcmFu
c2l0aW9uKAotICAgICAgICAgICAgbm9kZS5jb2RlT3JpZ2luLmNvZGVPcmlnaW5Pd25lcigpLAot
ICAgICAgICAgICAgbm9kZS5zdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSgpLnByZXZpb3VzU3RydWN0
dXJlLAotICAgICAgICAgICAgbm9kZS5zdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSgpLm5ld1N0cnVj
dHVyZSk7Ci0gICAgICAgIG5vUmVzdWx0KG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAgICAgIG5v
ZGUtPmNvZGVPcmlnaW4uY29kZU9yaWdpbk93bmVyKCksCisgICAgICAgICAgICBub2RlLT5zdHJ1
Y3R1cmVUcmFuc2l0aW9uRGF0YSgpLnByZXZpb3VzU3RydWN0dXJlLAorICAgICAgICAgICAgbm9k
ZS0+c3RydWN0dXJlVHJhbnNpdGlvbkRhdGEoKS5uZXdTdHJ1Y3R1cmUpOworICAgICAgICBub1Jl
c3VsdChub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAgY2FzZSBQdXRTdHJ1Y3R1
cmU6IHsKLSAgICAgICAgQVNTRVJUKG5vZGUuc3RydWN0dXJlVHJhbnNpdGlvbkRhdGEoKS5wcmV2
aW91c1N0cnVjdHVyZS0+dHJhbnNpdGlvbldhdGNocG9pbnRTZXRIYXNCZWVuSW52YWxpZGF0ZWQo
KSk7CisgICAgICAgIEFTU0VSVChub2RlLT5zdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSgpLnByZXZp
b3VzU3RydWN0dXJlLT50cmFuc2l0aW9uV2F0Y2hwb2ludFNldEhhc0JlZW5JbnZhbGlkYXRlZCgp
KTsKIAotICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUuY2hpbGQx
KCkpOworICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUtPmNoaWxk
MSgpKTsKICAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOwogICAgICAgICAKICAg
ICAgICAgbV9qaXQuYWRkV2Vha1JlZmVyZW5jZVRyYW5zaXRpb24oCi0gICAgICAgICAgICBub2Rl
LmNvZGVPcmlnaW4uY29kZU9yaWdpbk93bmVyKCksCi0gICAgICAgICAgICBub2RlLnN0cnVjdHVy
ZVRyYW5zaXRpb25EYXRhKCkucHJldmlvdXNTdHJ1Y3R1cmUsCi0gICAgICAgICAgICBub2RlLnN0
cnVjdHVyZVRyYW5zaXRpb25EYXRhKCkubmV3U3RydWN0dXJlKTsKKyAgICAgICAgICAgIG5vZGUt
PmNvZGVPcmlnaW4uY29kZU9yaWdpbk93bmVyKCksCisgICAgICAgICAgICBub2RlLT5zdHJ1Y3R1
cmVUcmFuc2l0aW9uRGF0YSgpLnByZXZpb3VzU3RydWN0dXJlLAorICAgICAgICAgICAgbm9kZS0+
c3RydWN0dXJlVHJhbnNpdGlvbkRhdGEoKS5uZXdTdHJ1Y3R1cmUpOwogICAgICAgICAKICNpZiBF
TkFCTEUoR0dDKSB8fCBFTkFCTEUoV1JJVEVfQkFSUklFUl9QUk9GSUxJTkcpCiAgICAgICAgIC8v
IE11c3QgYWx3YXlzIGVtaXQgdGhpcyB3cml0ZSBiYXJyaWVyIGFzIHRoZSBzdHJ1Y3R1cmUgdHJh
bnNpdGlvbiBpdHNlbGYgcmVxdWlyZXMgaXQKLSAgICAgICAgd3JpdGVCYXJyaWVyKGJhc2VHUFIs
IG5vZGUuc3RydWN0dXJlVHJhbnNpdGlvbkRhdGEoKS5uZXdTdHJ1Y3R1cmUsIFdyaXRlQmFycmll
ckZvckdlbmVyaWNBY2Nlc3MpOworICAgICAgICB3cml0ZUJhcnJpZXIoYmFzZUdQUiwgbm9kZS0+
c3RydWN0dXJlVHJhbnNpdGlvbkRhdGEoKS5uZXdTdHJ1Y3R1cmUsIFdyaXRlQmFycmllckZvckdl
bmVyaWNBY2Nlc3MpOwogI2VuZGlmCiAgICAgICAgIAotICAgICAgICBtX2ppdC5zdG9yZVB0cihN
YWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihub2RlLnN0cnVjdHVyZVRyYW5zaXRpb25EYXRh
KCkubmV3U3RydWN0dXJlKSwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNDZWxs
OjpzdHJ1Y3R1cmVPZmZzZXQoKSkpOworICAgICAgICBtX2ppdC5zdG9yZVB0cihNYWNyb0Fzc2Vt
Ymxlcjo6VHJ1c3RlZEltbVB0cihub2RlLT5zdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSgpLm5ld1N0
cnVjdHVyZSksIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6c3RydWN0
dXJlT2Zmc2V0KCkpKTsKICAgICAgICAgCi0gICAgICAgIG5vUmVzdWx0KG1fY29tcGlsZUluZGV4
KTsKKyAgICAgICAgbm9SZXN1bHQobm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAg
ICAgCkBAIC00Mjk2LDcgKzQyOTEsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5v
ZGUmIG5vZGUpCiAgICAgICAgIGJyZWFrOwogICAgICAgICAKICAgICBjYXNlIEdldEJ1dHRlcmZs
eTogewotICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUuY2hpbGQx
KCkpOworICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUtPmNoaWxk
MSgpKTsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBiYXNlKTsKICAgICAgICAg
CiAgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKQEAgLTQzMDQsNyArNDI5OSw3
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgCiAg
ICAgICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmpl
Y3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVzdWx0R1BSKTsKICAgICAgICAgCi0gICAgICAgIHN0
b3JhZ2VSZXN1bHQocmVzdWx0R1BSLCBtX2NvbXBpbGVJbmRleCk7CisgICAgICAgIHN0b3JhZ2VS
ZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCkBAIC00MzE0
LDcgKzQzMDksNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAg
ICAgfQogCiAgICAgY2FzZSBHZXRCeU9mZnNldDogewotICAgICAgICBTdG9yYWdlT3BlcmFuZCBz
dG9yYWdlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOworICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9y
YWdlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdFRh
Zyh0aGlzLCBzdG9yYWdlKTsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdFBheWxvYWQodGhp
cyk7CiAgICAgICAgIApAQCAtNDMyMiw0MiArNDMxNyw0MiBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIEdQUlJlZyByZXN1bHRUYWdHUFIgPSByZXN1
bHRUYWcuZ3ByKCk7CiAgICAgICAgIEdQUlJlZyByZXN1bHRQYXlsb2FkR1BSID0gcmVzdWx0UGF5
bG9hZC5ncHIoKTsKICAgICAgICAgCi0gICAgICAgIFN0b3JhZ2VBY2Nlc3NEYXRhJiBzdG9yYWdl
QWNjZXNzRGF0YSA9IG1faml0LmdyYXBoKCkubV9zdG9yYWdlQWNjZXNzRGF0YVtub2RlLnN0b3Jh
Z2VBY2Nlc3NEYXRhSW5kZXgoKV07CisgICAgICAgIFN0b3JhZ2VBY2Nlc3NEYXRhJiBzdG9yYWdl
QWNjZXNzRGF0YSA9IG1faml0LmdyYXBoKCkubV9zdG9yYWdlQWNjZXNzRGF0YVtub2RlLT5zdG9y
YWdlQWNjZXNzRGF0YUluZGV4KCldOwogICAgICAgICAKICAgICAgICAgbV9qaXQubG9hZDMyKEpJ
VENvbXBpbGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIHN0b3JhZ2VBY2Nlc3NEYXRhLm9mZnNldCAq
IHNpemVvZihFbmNvZGVkSlNWYWx1ZSkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVz
Y3JpcHRvciwgYXNCaXRzLnBheWxvYWQpKSwgcmVzdWx0UGF5bG9hZEdQUik7CiAgICAgICAgIG1f
aml0LmxvYWQzMihKSVRDb21waWxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBzdG9yYWdlQWNjZXNz
RGF0YS5vZmZzZXQgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpICsgT0JKRUNUX09GRlNFVE9GKEVu
Y29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy50YWcpKSwgcmVzdWx0VGFnR1BSKTsKICAgICAg
ICAgCi0gICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0VGFnR1BSLCByZXN1bHRQYXlsb2FkR1BS
LCBtX2NvbXBpbGVJbmRleCk7CisgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0VGFnR1BSLCBy
ZXN1bHRQYXlsb2FkR1BSLCBub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAK
ICAgICBjYXNlIFB1dEJ5T2Zmc2V0OiB7CiAjaWYgRU5BQkxFKEdHQykgfHwgRU5BQkxFKFdSSVRF
X0JBUlJJRVJfUFJPRklMSU5HKQotICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRo
aXMsIG5vZGUuY2hpbGQyKCkpOworICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRo
aXMsIG5vZGUtPmNoaWxkMigpKTsKICNlbmRpZgotICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9y
YWdlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwotICAgICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0
aGlzLCBub2RlLmNoaWxkMygpKTsKKyAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlz
LCBub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5v
ZGUtPmNoaWxkMygpKTsKIAogICAgICAgICBHUFJSZWcgc3RvcmFnZUdQUiA9IHN0b3JhZ2UuZ3By
KCk7CiAgICAgICAgIEdQUlJlZyB2YWx1ZVRhZ0dQUiA9IHZhbHVlLnRhZ0dQUigpOwogICAgICAg
ICBHUFJSZWcgdmFsdWVQYXlsb2FkR1BSID0gdmFsdWUucGF5bG9hZEdQUigpOwogICAgICAgICAK
ICNpZiBFTkFCTEUoR0dDKSB8fCBFTkFCTEUoV1JJVEVfQkFSUklFUl9QUk9GSUxJTkcpCi0gICAg
ICAgIHdyaXRlQmFycmllcihiYXNlLmdwcigpLCB2YWx1ZVRhZ0dQUiwgbm9kZS5jaGlsZDMoKSwg
V3JpdGVCYXJyaWVyRm9yUHJvcGVydHlBY2Nlc3MpOworICAgICAgICB3cml0ZUJhcnJpZXIoYmFz
ZS5ncHIoKSwgdmFsdWVUYWdHUFIsIG5vZGUtPmNoaWxkMygpLCBXcml0ZUJhcnJpZXJGb3JQcm9w
ZXJ0eUFjY2Vzcyk7CiAjZW5kaWYKIAotICAgICAgICBTdG9yYWdlQWNjZXNzRGF0YSYgc3RvcmFn
ZUFjY2Vzc0RhdGEgPSBtX2ppdC5ncmFwaCgpLm1fc3RvcmFnZUFjY2Vzc0RhdGFbbm9kZS5zdG9y
YWdlQWNjZXNzRGF0YUluZGV4KCldOworICAgICAgICBTdG9yYWdlQWNjZXNzRGF0YSYgc3RvcmFn
ZUFjY2Vzc0RhdGEgPSBtX2ppdC5ncmFwaCgpLm1fc3RvcmFnZUFjY2Vzc0RhdGFbbm9kZS0+c3Rv
cmFnZUFjY2Vzc0RhdGFJbmRleCgpXTsKICAgICAgICAgCiAgICAgICAgIG1faml0LnN0b3JlUHRy
KHZhbHVlVGFnR1BSLCBKSVRDb21waWxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBzdG9yYWdlQWNj
ZXNzRGF0YS5vZmZzZXQgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpICsgT0JKRUNUX09GRlNFVE9G
KEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy50YWcpKSk7CiAgICAgICAgIG1faml0LnN0
b3JlUHRyKHZhbHVlUGF5bG9hZEdQUiwgSklUQ29tcGlsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwg
c3RvcmFnZUFjY2Vzc0RhdGEub2Zmc2V0ICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSArIE9CSkVD
VF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9hZCkpKTsKICAg
ICAgICAgCi0gICAgICAgIG5vUmVzdWx0KG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAgbm9SZXN1
bHQobm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBQdXRC
eUlkOiB7Ci0gICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS5jaGls
ZDEoKSk7Ci0gICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUuY2hpbGQyKCkp
OworICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUtPmNoaWxkMSgp
KTsKKyAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS0+Y2hpbGQyKCkpOwog
ICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKICAgICAgICAgCiAgICAgICAgIEdQ
UlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKQEAgLTQzNjgsMTUgKzQzNjMsMTUgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICBiYXNlLnVzZSgpOwog
ICAgICAgICB2YWx1ZS51c2UoKTsKIAotICAgICAgICBjYWNoZWRQdXRCeUlkKG5vZGUuY29kZU9y
aWdpbiwgYmFzZUdQUiwgdmFsdWVUYWdHUFIsIHZhbHVlUGF5bG9hZEdQUiwgbm9kZS5jaGlsZDIo
KSwgc2NyYXRjaEdQUiwgbm9kZS5pZGVudGlmaWVyTnVtYmVyKCksIE5vdERpcmVjdCk7CisgICAg
ICAgIGNhY2hlZFB1dEJ5SWQobm9kZS0+Y29kZU9yaWdpbiwgYmFzZUdQUiwgdmFsdWVUYWdHUFIs
IHZhbHVlUGF5bG9hZEdQUiwgbm9kZS0+Y2hpbGQyKCksIHNjcmF0Y2hHUFIsIG5vZGUtPmlkZW50
aWZpZXJOdW1iZXIoKSwgTm90RGlyZWN0KTsKICAgICAgICAgCi0gICAgICAgIG5vUmVzdWx0KG1f
Y29tcGlsZUluZGV4LCBVc2VDaGlsZHJlbkNhbGxlZEV4cGxpY2l0bHkpOworICAgICAgICBub1Jl
c3VsdChub2RlLCBVc2VDaGlsZHJlbkNhbGxlZEV4cGxpY2l0bHkpOwogICAgICAgICBicmVhazsK
ICAgICB9CiAKICAgICBjYXNlIFB1dEJ5SWREaXJlY3Q6IHsKLSAgICAgICAgU3BlY3VsYXRlQ2Vs
bE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKLSAgICAgICAgSlNWYWx1ZU9wZXJh
bmQgdmFsdWUodGhpcywgbm9kZS5jaGlsZDIoKSk7CisgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVy
YW5kIGJhc2UodGhpcywgbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBKU1ZhbHVlT3BlcmFuZCB2
YWx1ZSh0aGlzLCBub2RlLT5jaGlsZDIoKSk7CiAgICAgICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNo
KHRoaXMpOwogICAgICAgICAKICAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOwpA
QCAtNDM4Nyw5ICs0MzgyLDkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBu
b2RlKQogICAgICAgICBiYXNlLnVzZSgpOwogICAgICAgICB2YWx1ZS51c2UoKTsKIAotICAgICAg
ICBjYWNoZWRQdXRCeUlkKG5vZGUuY29kZU9yaWdpbiwgYmFzZUdQUiwgdmFsdWVUYWdHUFIsIHZh
bHVlUGF5bG9hZEdQUiwgbm9kZS5jaGlsZDIoKSwgc2NyYXRjaEdQUiwgbm9kZS5pZGVudGlmaWVy
TnVtYmVyKCksIERpcmVjdCk7CisgICAgICAgIGNhY2hlZFB1dEJ5SWQobm9kZS0+Y29kZU9yaWdp
biwgYmFzZUdQUiwgdmFsdWVUYWdHUFIsIHZhbHVlUGF5bG9hZEdQUiwgbm9kZS0+Y2hpbGQyKCks
IHNjcmF0Y2hHUFIsIG5vZGUtPmlkZW50aWZpZXJOdW1iZXIoKSwgRGlyZWN0KTsKIAotICAgICAg
ICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCwgVXNlQ2hpbGRyZW5DYWxsZWRFeHBsaWNpdGx5KTsK
KyAgICAgICAgbm9SZXN1bHQobm9kZSwgVXNlQ2hpbGRyZW5DYWxsZWRFeHBsaWNpdGx5KTsKICAg
ICAgICAgYnJlYWs7CiAgICAgfQogCkBAIC00Mzk3LDQwICs0MzkyLDQwIEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3Vs
dFBheWxvYWQodGhpcyk7CiAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHRUYWcodGhpcyk7CiAK
LSAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyKG5vZGUucmVnaXN0ZXJQb2ludGVyKCkp
LCByZXN1bHRQYXlsb2FkLmdwcigpKTsKKyAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRy
KG5vZGUtPnJlZ2lzdGVyUG9pbnRlcigpKSwgcmVzdWx0UGF5bG9hZC5ncHIoKSk7CiAgICAgICAg
IG1faml0LmxvYWQzMihKSVRDb21waWxlcjo6QWRkcmVzcyhyZXN1bHRQYXlsb2FkLmdwcigpLCBP
QkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnRhZykpLCByZXN1
bHRUYWcuZ3ByKCkpOwogICAgICAgICBtX2ppdC5sb2FkMzIoSklUQ29tcGlsZXI6OkFkZHJlc3Mo
cmVzdWx0UGF5bG9hZC5ncHIoKSwgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0
b3IsIGFzQml0cy5wYXlsb2FkKSksIHJlc3VsdFBheWxvYWQuZ3ByKCkpOwogCi0gICAgICAgIGpz
VmFsdWVSZXN1bHQocmVzdWx0VGFnLmdwcigpLCByZXN1bHRQYXlsb2FkLmdwcigpLCBtX2NvbXBp
bGVJbmRleCk7CisgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0VGFnLmdwcigpLCByZXN1bHRQ
YXlsb2FkLmdwcigpLCBub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAgY2FzZSBQ
dXRHbG9iYWxWYXI6IHsKLSAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS5j
aGlsZDEoKSk7CisgICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUtPmNoaWxk
MSgpKTsKICAgICAgICAgaWYgKEhlYXA6OmlzV3JpdGVCYXJyaWVyRW5hYmxlZCgpKSB7CiAgICAg
ICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKICAgICAgICAgICAgIEdQUlJlZyBz
Y3JhdGNoUmVnID0gc2NyYXRjaC5ncHIoKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgd3Jp
dGVCYXJyaWVyKG1faml0Lmdsb2JhbE9iamVjdEZvcihub2RlLmNvZGVPcmlnaW4pLCB2YWx1ZS50
YWdHUFIoKSwgbm9kZS5jaGlsZDEoKSwgV3JpdGVCYXJyaWVyRm9yVmFyaWFibGVBY2Nlc3MsIHNj
cmF0Y2hSZWcpOworICAgICAgICAgICAgd3JpdGVCYXJyaWVyKG1faml0Lmdsb2JhbE9iamVjdEZv
cihub2RlLT5jb2RlT3JpZ2luKSwgdmFsdWUudGFnR1BSKCksIG5vZGUtPmNoaWxkMSgpLCBXcml0
ZUJhcnJpZXJGb3JWYXJpYWJsZUFjY2Vzcywgc2NyYXRjaFJlZyk7CiAgICAgICAgIH0KIAogICAg
ICAgICAvLyBGSVhNRTogaWYgd2UgaGFwcGVuIHRvIGhhdmUgYSBzcGFyZSByZWdpc3RlciAtIGFu
ZCBfT05MWV8gaWYgd2UgaGFwcGVuIHRvIGhhdmUKICAgICAgICAgLy8gYSBzcGFyZSByZWdpc3Rl
ciAtIGEgZ29vZCBvcHRpbWl6YXRpb24gd291bGQgYmUgdG8gcHV0IHRoZSByZWdpc3RlciBwb2lu
dGVyIGludG8KICAgICAgICAgLy8gYSByZWdpc3RlciBhbmQgdGhlbiBkbyBhIHplcm8gb2Zmc2V0
IHN0b3JlIGZvbGxvd2VkIGJ5IGEgZm91ci1vZmZzZXQgc3RvcmUgKG9yCiAgICAgICAgIC8vIHZp
Y2UtdmVyc2EgZGVwZW5kaW5nIG9uIGVuZGlhbm5lc3MpLgotICAgICAgICBtX2ppdC5zdG9yZTMy
KHZhbHVlLnRhZ0dQUigpLCBub2RlLnJlZ2lzdGVyUG9pbnRlcigpLT50YWdQb2ludGVyKCkpOwot
ICAgICAgICBtX2ppdC5zdG9yZTMyKHZhbHVlLnBheWxvYWRHUFIoKSwgbm9kZS5yZWdpc3RlclBv
aW50ZXIoKS0+cGF5bG9hZFBvaW50ZXIoKSk7CisgICAgICAgIG1faml0LnN0b3JlMzIodmFsdWUu
dGFnR1BSKCksIG5vZGUtPnJlZ2lzdGVyUG9pbnRlcigpLT50YWdQb2ludGVyKCkpOworICAgICAg
ICBtX2ppdC5zdG9yZTMyKHZhbHVlLnBheWxvYWRHUFIoKSwgbm9kZS0+cmVnaXN0ZXJQb2ludGVy
KCktPnBheWxvYWRQb2ludGVyKCkpOwogCi0gICAgICAgIG5vUmVzdWx0KG1fY29tcGlsZUluZGV4
KTsKKyAgICAgICAgbm9SZXN1bHQobm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIAogICAg
IGNhc2UgUHV0R2xvYmFsVmFyQ2hlY2s6IHsKLSAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUo
dGhpcywgbm9kZS5jaGlsZDEoKSk7CisgICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMs
IG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgCiAgICAgICAgIFdhdGNocG9pbnRTZXQqIHdhdGNo
cG9pbnRTZXQgPQotICAgICAgICAgICAgbV9qaXQuZ2xvYmFsT2JqZWN0Rm9yKG5vZGUuY29kZU9y
aWdpbiktPnN5bWJvbFRhYmxlKCktPmdldCgKLSAgICAgICAgICAgICAgICBpZGVudGlmaWVyKG5v
ZGUuaWRlbnRpZmllck51bWJlckZvckNoZWNrKCkpLT5pbXBsKCkpLndhdGNocG9pbnRTZXQoKTsK
KyAgICAgICAgICAgIG1faml0Lmdsb2JhbE9iamVjdEZvcihub2RlLT5jb2RlT3JpZ2luKS0+c3lt
Ym9sVGFibGUoKS0+Z2V0KAorICAgICAgICAgICAgICAgIGlkZW50aWZpZXIobm9kZS0+aWRlbnRp
Zmllck51bWJlckZvckNoZWNrKCkpLT5pbXBsKCkpLndhdGNocG9pbnRTZXQoKTsKICAgICAgICAg
YWRkU2xvd1BhdGhHZW5lcmF0b3IoCiAgICAgICAgICAgICBzbG93UGF0aENhbGwoCiAgICAgICAg
ICAgICAgICAgbV9qaXQuYnJhbmNoVGVzdDgoCkBAIC00NDQyLDU0ICs0NDM3LDU0IEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgICAgIEdQUlRlbXBv
cmFyeSBzY3JhdGNoKHRoaXMpOwogICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hSZWcgPSBzY3Jh
dGNoLmdwcigpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICB3cml0ZUJhcnJpZXIobV9qaXQu
Z2xvYmFsT2JqZWN0Rm9yKG5vZGUuY29kZU9yaWdpbiksIHZhbHVlLnRhZ0dQUigpLCBub2RlLmNo
aWxkMSgpLCBXcml0ZUJhcnJpZXJGb3JWYXJpYWJsZUFjY2Vzcywgc2NyYXRjaFJlZyk7CisgICAg
ICAgICAgICB3cml0ZUJhcnJpZXIobV9qaXQuZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPmNvZGVPcmln
aW4pLCB2YWx1ZS50YWdHUFIoKSwgbm9kZS0+Y2hpbGQxKCksIFdyaXRlQmFycmllckZvclZhcmlh
YmxlQWNjZXNzLCBzY3JhdGNoUmVnKTsKICAgICAgICAgfQogCiAgICAgICAgIC8vIEZJWE1FOiBp
ZiB3ZSBoYXBwZW4gdG8gaGF2ZSBhIHNwYXJlIHJlZ2lzdGVyIC0gYW5kIF9PTkxZXyBpZiB3ZSBo
YXBwZW4gdG8gaGF2ZQogICAgICAgICAvLyBhIHNwYXJlIHJlZ2lzdGVyIC0gYSBnb29kIG9wdGlt
aXphdGlvbiB3b3VsZCBiZSB0byBwdXQgdGhlIHJlZ2lzdGVyIHBvaW50ZXIgaW50bwogICAgICAg
ICAvLyBhIHJlZ2lzdGVyIGFuZCB0aGVuIGRvIGEgemVybyBvZmZzZXQgc3RvcmUgZm9sbG93ZWQg
YnkgYSBmb3VyLW9mZnNldCBzdG9yZSAob3IKICAgICAgICAgLy8gdmljZS12ZXJzYSBkZXBlbmRp
bmcgb24gZW5kaWFubmVzcykuCi0gICAgICAgIG1faml0LnN0b3JlMzIodmFsdWUudGFnR1BSKCks
IG5vZGUucmVnaXN0ZXJQb2ludGVyKCktPnRhZ1BvaW50ZXIoKSk7Ci0gICAgICAgIG1faml0LnN0
b3JlMzIodmFsdWUucGF5bG9hZEdQUigpLCBub2RlLnJlZ2lzdGVyUG9pbnRlcigpLT5wYXlsb2Fk
UG9pbnRlcigpKTsKKyAgICAgICAgbV9qaXQuc3RvcmUzMih2YWx1ZS50YWdHUFIoKSwgbm9kZS0+
cmVnaXN0ZXJQb2ludGVyKCktPnRhZ1BvaW50ZXIoKSk7CisgICAgICAgIG1faml0LnN0b3JlMzIo
dmFsdWUucGF5bG9hZEdQUigpLCBub2RlLT5yZWdpc3RlclBvaW50ZXIoKS0+cGF5bG9hZFBvaW50
ZXIoKSk7CiAKLSAgICAgICAgbm9SZXN1bHQobV9jb21waWxlSW5kZXgpOworICAgICAgICBub1Jl
c3VsdChub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKICAgICBjYXNlIEds
b2JhbFZhcldhdGNocG9pbnQ6IHsKLSAgICAgICAgbV9qaXQuZ2xvYmFsT2JqZWN0Rm9yKG5vZGUu
Y29kZU9yaWdpbiktPnN5bWJvbFRhYmxlKCktPmdldCgKLSAgICAgICAgICAgIGlkZW50aWZpZXIo
bm9kZS5pZGVudGlmaWVyTnVtYmVyRm9yQ2hlY2soKSktPmltcGwoKSkuYWRkV2F0Y2hwb2ludCgK
KyAgICAgICAgbV9qaXQuZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPmNvZGVPcmlnaW4pLT5zeW1ib2xU
YWJsZSgpLT5nZXQoCisgICAgICAgICAgICBpZGVudGlmaWVyKG5vZGUtPmlkZW50aWZpZXJOdW1i
ZXJGb3JDaGVjaygpKS0+aW1wbCgpKS5hZGRXYXRjaHBvaW50KAogICAgICAgICAgICAgICAgIHNw
ZWN1bGF0aW9uV2F0Y2hwb2ludCgpKTsKICAgICAgICAgCiAjaWYgREZHX0VOQUJMRShKSVRfQVNT
RVJUKQogICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKICAgICAgICAgR1BSUmVn
IHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOwotICAgICAgICBtX2ppdC5sb2FkMzIobm9kZS5y
ZWdpc3RlclBvaW50ZXIoKS0+dGFnUG9pbnRlcigpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgbV9q
aXQubG9hZDMyKG5vZGUtPnJlZ2lzdGVyUG9pbnRlcigpLT50YWdQb2ludGVyKCksIHNjcmF0Y2hH
UFIpOwogICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBub3RPSyA9IG1faml0LmJyYW5jaDMyKAog
ICAgICAgICAgICAgSklUQ29tcGlsZXI6Ok5vdEVxdWFsLCBzY3JhdGNoR1BSLAotICAgICAgICAg
ICAgVHJ1c3RlZEltbTMyKG5vZGUucmVnaXN0ZXJQb2ludGVyKCktPmdldCgpLnRhZygpKSk7Ci0g
ICAgICAgIG1faml0LmxvYWQzMihub2RlLnJlZ2lzdGVyUG9pbnRlcigpLT5wYXlsb2FkUG9pbnRl
cigpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIFRydXN0ZWRJbW0zMihub2RlLT5yZWdpc3Rl
clBvaW50ZXIoKS0+Z2V0KCkudGFnKCkpKTsKKyAgICAgICAgbV9qaXQubG9hZDMyKG5vZGUtPnJl
Z2lzdGVyUG9pbnRlcigpLT5wYXlsb2FkUG9pbnRlcigpLCBzY3JhdGNoR1BSKTsKICAgICAgICAg
SklUQ29tcGlsZXI6Okp1bXAgb2sgPSBtX2ppdC5icmFuY2gzMigKICAgICAgICAgICAgIEpJVENv
bXBpbGVyOjpFcXVhbCwgc2NyYXRjaEdQUiwKLSAgICAgICAgICAgIFRydXN0ZWRJbW0zMihub2Rl
LnJlZ2lzdGVyUG9pbnRlcigpLT5nZXQoKS5wYXlsb2FkKCkpKTsKKyAgICAgICAgICAgIFRydXN0
ZWRJbW0zMihub2RlLT5yZWdpc3RlclBvaW50ZXIoKS0+Z2V0KCkucGF5bG9hZCgpKSk7CiAgICAg
ICAgIG5vdE9LLmxpbmsoJm1faml0KTsKICAgICAgICAgbV9qaXQuYnJlYWtwb2ludCgpOwogICAg
ICAgICBvay5saW5rKCZtX2ppdCk7CiAjZW5kaWYKICAgICAgICAgCi0gICAgICAgIG5vUmVzdWx0
KG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAgbm9SZXN1bHQobm9kZSk7CiAgICAgICAgIGJyZWFr
OwogICAgIH0KIAogICAgIGNhc2UgQ2hlY2tIYXNJbnN0YW5jZTogewotICAgICAgICBTcGVjdWxh
dGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOworICAgICAgICBTcGVjdWxh
dGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgR1BSVGVt
cG9yYXJ5IHN0cnVjdHVyZSh0aGlzKTsKIAogICAgICAgICAvLyBTcGVjdWxhdGUgdGhhdCBiYXNl
ICdJbXBsZW1lbnRzRGVmYXVsdEhhc0luc3RhbmNlJy4KICAgICAgICAgbV9qaXQubG9hZFB0cihN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlLmdwcigpLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNl
dCgpKSwgc3RydWN0dXJlLmdwcigpKTsKLSAgICAgICAgc3BlY3VsYXRpb25DaGVjayhVbmNvdW50
YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2hUZXN0OChNYWNyb0Fzc2Vt
Ymxlcjo6WmVybywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RydWN0dXJlLmdwcigpLCBTdHJ1
Y3R1cmU6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1t
MzIoSW1wbGVtZW50c0RlZmF1bHRIYXNJbnN0YW5jZSkpKTsKKyAgICAgICAgc3BlY3VsYXRpb25D
aGVjayhVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgMCwgbV9qaXQuYnJhbmNoVGVzdDgoTWFj
cm9Bc3NlbWJsZXI6Olplcm8sIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0cnVjdHVyZS5ncHIo
KSwgU3RydWN0dXJlOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1
c3RlZEltbTMyKEltcGxlbWVudHNEZWZhdWx0SGFzSW5zdGFuY2UpKSk7CiAKLSAgICAgICAgbm9S
ZXN1bHQobV9jb21waWxlSW5kZXgpOworICAgICAgICBub1Jlc3VsdChub2RlKTsKICAgICAgICAg
YnJlYWs7CiAgICAgfQogCkBAIC00NDk5LDcgKzQ0OTQsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgfQogCiAgICAgY2FzZSBJc1VuZGVmaW5lZDogewot
ICAgICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKKyAgICAg
ICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICBH
UFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwogICAgICAgICAKICAgICAgICAgSklUQ29tcGlsZXI6
Okp1bXAgaXNDZWxsID0gbV9qaXQuYnJhbmNoMzIoSklUQ29tcGlsZXI6OkVxdWFsLCB2YWx1ZS50
YWdHUFIoKSwgSklUQ29tcGlsZXI6OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSk7CkBA
IC00NTA5LDggKzQ1MDQsOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5v
ZGUpCiAgICAgICAgIAogICAgICAgICBpc0NlbGwubGluaygmbV9qaXQpOwogICAgICAgICBKSVRD
b21waWxlcjo6SnVtcCBub3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkOwotICAgICAgICBpZiAobV9q
aXQuZ3JhcGgoKS5nbG9iYWxPYmplY3RGb3Iobm9kZS5jb2RlT3JpZ2luKS0+bWFzcXVlcmFkZXNB
c1VuZGVmaW5lZFdhdGNocG9pbnQoKS0+aXNTdGlsbFZhbGlkKCkpIHsKLSAgICAgICAgICAgIG1f
aml0LmdyYXBoKCkuZ2xvYmFsT2JqZWN0Rm9yKG5vZGUuY29kZU9yaWdpbiktPm1hc3F1ZXJhZGVz
QXNVbmRlZmluZWRXYXRjaHBvaW50KCktPmFkZChzcGVjdWxhdGlvbldhdGNocG9pbnQoKSk7Cisg
ICAgICAgIGlmIChtX2ppdC5ncmFwaCgpLmdsb2JhbE9iamVjdEZvcihub2RlLT5jb2RlT3JpZ2lu
KS0+bWFzcXVlcmFkZXNBc1VuZGVmaW5lZFdhdGNocG9pbnQoKS0+aXNTdGlsbFZhbGlkKCkpIHsK
KyAgICAgICAgICAgIG1faml0LmdyYXBoKCkuZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPmNvZGVPcmln
aW4pLT5tYXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2ludCgpLT5hZGQoc3BlY3VsYXRpb25X
YXRjaHBvaW50KCkpOwogICAgICAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tMzIoMCksIHJl
c3VsdC5ncHIoKSk7CiAgICAgICAgICAgICBub3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gbV9q
aXQuanVtcCgpOwogICAgICAgICB9IGVsc2UgewpAQCAtNDUyNCwzOCArNDUxOSwzOCBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgICAgICBHUFJUZW1w
b3JhcnkgcmVtb3RlR2xvYmFsT2JqZWN0KHRoaXMpOwogICAgICAgICAgICAgR1BSUmVnIGxvY2Fs
R2xvYmFsT2JqZWN0R1BSID0gbG9jYWxHbG9iYWxPYmplY3QuZ3ByKCk7CiAgICAgICAgICAgICBH
UFJSZWcgcmVtb3RlR2xvYmFsT2JqZWN0R1BSID0gcmVtb3RlR2xvYmFsT2JqZWN0LmdwcigpOwot
ICAgICAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbE9iamVjdEZv
cihub2RlLmNvZGVPcmlnaW4pKSwgbG9jYWxHbG9iYWxPYmplY3RHUFIpOworICAgICAgICAgICAg
bV9qaXQubW92ZShUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbE9iamVjdEZvcihub2RlLT5jb2Rl
T3JpZ2luKSksIGxvY2FsR2xvYmFsT2JqZWN0R1BSKTsKICAgICAgICAgICAgIG1faml0LmxvYWRQ
dHIoSklUQ29tcGlsZXI6OkFkZHJlc3MocmVzdWx0LmdwcigpLCBTdHJ1Y3R1cmU6Omdsb2JhbE9i
amVjdE9mZnNldCgpKSwgcmVtb3RlR2xvYmFsT2JqZWN0R1BSKTsgCiAgICAgICAgICAgICBtX2pp
dC5jb21wYXJlMzIoSklUQ29tcGlsZXI6OkVxdWFsLCBsb2NhbEdsb2JhbE9iamVjdEdQUiwgcmVt
b3RlR2xvYmFsT2JqZWN0R1BSLCByZXN1bHQuZ3ByKCkpOwogICAgICAgICB9CiAKICAgICAgICAg
bm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKCZtX2ppdCk7CiAgICAgICAgIGRvbmUubGlu
aygmbV9qaXQpOwotICAgICAgICBib29sZWFuUmVzdWx0KHJlc3VsdC5ncHIoKSwgbV9jb21waWxl
SW5kZXgpOworICAgICAgICBib29sZWFuUmVzdWx0KHJlc3VsdC5ncHIoKSwgbm9kZSk7CiAgICAg
ICAgIGJyZWFrOwogICAgIH0KIAogICAgIGNhc2UgSXNCb29sZWFuOiB7Ci0gICAgICAgIEpTVmFs
dWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOworICAgICAgICBKU1ZhbHVlT3Bl
cmFuZCB2YWx1ZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgIEdQUlRlbXBvcmFyeSBy
ZXN1bHQodGhpcywgdmFsdWUpOwogICAgICAgICAKICAgICAgICAgbV9qaXQuY29tcGFyZTMyKEpJ
VENvbXBpbGVyOjpFcXVhbCwgdmFsdWUudGFnR1BSKCksIEpJVENvbXBpbGVyOjpUcnVzdGVkSW1t
MzIoSlNWYWx1ZTo6Qm9vbGVhblRhZyksIHJlc3VsdC5ncHIoKSk7Ci0gICAgICAgIGJvb2xlYW5S
ZXN1bHQocmVzdWx0LmdwcigpLCBtX2NvbXBpbGVJbmRleCk7CisgICAgICAgIGJvb2xlYW5SZXN1
bHQocmVzdWx0LmdwcigpLCBub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAgY2Fz
ZSBJc051bWJlcjogewotICAgICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLmNo
aWxkMSgpKTsKKyAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS0+Y2hpbGQx
KCkpOwogICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIHZhbHVlKTsKICAgICAgICAg
CiAgICAgICAgIG1faml0LmFkZDMyKFRydXN0ZWRJbW0zMigxKSwgdmFsdWUudGFnR1BSKCksIHJl
c3VsdC5ncHIoKSk7CiAgICAgICAgIG1faml0LmNvbXBhcmUzMihKSVRDb21waWxlcjo6QmVsb3cs
IHJlc3VsdC5ncHIoKSwgSklUQ29tcGlsZXI6OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpMb3dlc3RU
YWcgKyAxKSwgcmVzdWx0LmdwcigpKTsKLSAgICAgICAgYm9vbGVhblJlc3VsdChyZXN1bHQuZ3By
KCksIG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAgYm9vbGVhblJlc3VsdChyZXN1bHQuZ3ByKCks
IG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9CiAKICAgICBjYXNlIElzU3RyaW5nOiB7Ci0g
ICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOworICAgICAg
ICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgIEdQ
UlRlbXBvcmFyeSByZXN1bHQodGhpcywgdmFsdWUpOwogICAgICAgICAKICAgICAgICAgSklUQ29t
cGlsZXI6Okp1bXAgaXNOb3RDZWxsID0gbV9qaXQuYnJhbmNoMzIoSklUQ29tcGlsZXI6Ok5vdEVx
dWFsLCB2YWx1ZS50YWdHUFIoKSwgSklUQ29tcGlsZXI6OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpD
ZWxsVGFnKSk7CkBAIC00NTY4LDM1ICs0NTYzLDM1IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tMzIoMCksIHJl
c3VsdC5ncHIoKSk7CiAgICAgICAgIAogICAgICAgICBkb25lLmxpbmsoJm1faml0KTsKLSAgICAg
ICAgYm9vbGVhblJlc3VsdChyZXN1bHQuZ3ByKCksIG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAg
Ym9vbGVhblJlc3VsdChyZXN1bHQuZ3ByKCksIG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9
CiAKICAgICBjYXNlIElzT2JqZWN0OiB7Ci0gICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRo
aXMsIG5vZGUuY2hpbGQxKCkpOworICAgICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBu
b2RlLT5jaGlsZDEoKSk7CiAgICAgICAgIEdQUlJlZyB2YWx1ZVRhZ0dQUiA9IHZhbHVlLnRhZ0dQ
UigpOwogICAgICAgICBHUFJSZWcgdmFsdWVQYXlsb2FkR1BSID0gdmFsdWUucGF5bG9hZEdQUigp
OwogICAgICAgICBHUFJSZXN1bHQgcmVzdWx0KHRoaXMpOwogICAgICAgICBHUFJSZWcgcmVzdWx0
R1BSID0gcmVzdWx0LmdwcigpOwogICAgICAgICBmbHVzaFJlZ2lzdGVycygpOwogICAgICAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvbklzT2JqZWN0LCByZXN1bHRHUFIsIHZhbHVlVGFnR1BSLCB2
YWx1ZVBheWxvYWRHUFIpOwotICAgICAgICBib29sZWFuUmVzdWx0KHJlc3VsdC5ncHIoKSwgbV9j
b21waWxlSW5kZXgpOworICAgICAgICBib29sZWFuUmVzdWx0KHJlc3VsdC5ncHIoKSwgbm9kZSk7
CiAgICAgICAgIGJyZWFrOwogICAgIH0KIAogICAgIGNhc2UgSXNGdW5jdGlvbjogewotICAgICAg
ICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKKyAgICAgICAgSlNW
YWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICBHUFJSZWcg
dmFsdWVUYWdHUFIgPSB2YWx1ZS50YWdHUFIoKTsKICAgICAgICAgR1BSUmVnIHZhbHVlUGF5bG9h
ZEdQUiA9IHZhbHVlLnBheWxvYWRHUFIoKTsKICAgICAgICAgR1BSUmVzdWx0IHJlc3VsdCh0aGlz
KTsKICAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKICAgICAgICAgZmx1
c2hSZWdpc3RlcnMoKTsKICAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Jc0Z1bmN0aW9u
LCByZXN1bHRHUFIsIHZhbHVlVGFnR1BSLCB2YWx1ZVBheWxvYWRHUFIpOwotICAgICAgICBib29s
ZWFuUmVzdWx0KHJlc3VsdC5ncHIoKSwgbV9jb21waWxlSW5kZXgpOworICAgICAgICBib29sZWFu
UmVzdWx0KHJlc3VsdC5ncHIoKSwgbm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBj
YXNlIFR5cGVPZjogewotICAgICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLmNo
aWxkMSgpKTsKKyAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS0+Y2hpbGQx
KCkpOwogICAgICAgICBHUFJSZWcgdGFnR1BSID0gdmFsdWUudGFnR1BSKCk7CiAgICAgICAgIEdQ
UlJlZyBwYXlsb2FkR1BSID0gdmFsdWUucGF5bG9hZEdQUigpOwogICAgICAgICBHUFJUZW1wb3Jh
cnkgdGVtcCh0aGlzKTsKQEAgLTQ2MDgsMTggKzQ2MDMsMTcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICBmbHVzaFJlZ2lzdGVycygpOwogCiAgICAg
ICAgIEpJVENvbXBpbGVyOjpKdW1wIGlzTm90Q2VsbCA9IG1faml0LmJyYW5jaDMyKEpJVENvbXBp
bGVyOjpOb3RFcXVhbCwgdGFnR1BSLCBKSVRDb21waWxlcjo6VHJ1c3RlZEltbTMyKEpTVmFsdWU6
OkNlbGxUYWcpKTsKLSAgICAgICAgTm9kZSYgY2hpbGQgPSBtX2ppdC5ncmFwaCgpW25vZGUuY2hp
bGQxKCldOwotICAgICAgICBpZiAoY2hpbGQuc2hvdWxkU3BlY3VsYXRlQ2VsbCgpKQotICAgICAg
ICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyh0YWdHUFIsIHBheWxv
YWRHUFIpLCBub2RlLmNoaWxkMSgpLCBpc05vdENlbGwpOworICAgICAgICBpZiAobm9kZS0+Y2hp
bGQxKCktPnNob3VsZFNwZWN1bGF0ZUNlbGwoKSkKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hl
Y2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3ModGFnR1BSLCBwYXlsb2FkR1BSKSwgbm9kZS0+Y2hpbGQx
KCksIGlzTm90Q2VsbCk7CiAKLSAgICAgICAgaWYgKCFjaGlsZC5zaG91bGRTcGVjdWxhdGVOb25T
dHJpbmdDZWxsKCkpIHsKKyAgICAgICAgaWYgKCFub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3Vs
YXRlTm9uU3RyaW5nQ2VsbCgpKSB7CiAgICAgICAgICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBp
bGVyOjpBZGRyZXNzKHBheWxvYWRHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCB0ZW1w
R1BSKTsKICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIG5vdFN0cmluZyA9IG1faml0LmJy
YW5jaDgoSklUQ29tcGlsZXI6Ok5vdEVxdWFsLCBKSVRDb21waWxlcjo6QWRkcmVzcyh0ZW1wR1BS
LCBTdHJ1Y3R1cmU6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKFN0cmluZ1R5
cGUpKTsKLSAgICAgICAgICAgIGlmIChjaGlsZC5zaG91bGRTcGVjdWxhdGVTdHJpbmcoKSkKLSAg
ICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKHRhZ0dQ
UiwgcGF5bG9hZEdQUiksIG5vZGUuY2hpbGQxKCksIG5vdFN0cmluZyk7CisgICAgICAgICAgICBp
ZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZVN0cmluZygpKQorICAgICAgICAgICAg
ICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3ModGFnR1BSLCBwYXlsb2Fk
R1BSKSwgbm9kZS0+Y2hpbGQxKCksIG5vdFN0cmluZyk7CiAgICAgICAgICAgICBtX2ppdC5tb3Zl
KFRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5zbWFsbFN0cmluZ3Muc3RyaW5nU3Ry
aW5nKCkpLCByZXN1bHRHUFIpOwogICAgICAgICAgICAgZG9uZUp1bXBzLmFwcGVuZChtX2ppdC5q
dW1wKCkpOwotICAgICAgICAgICAgaWYgKCFjaGlsZC5zaG91bGRTcGVjdWxhdGVTdHJpbmcoKSkg
eworICAgICAgICAgICAgaWYgKCFub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlU3RyaW5n
KCkpIHsKICAgICAgICAgICAgICAgICBub3RTdHJpbmcubGluaygmbV9qaXQpOwogICAgICAgICAg
ICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVHlwZU9mLCByZXN1bHRHUFIsIHBheWxvYWRH
UFIpOwogICAgICAgICAgICAgICAgIGRvbmVKdW1wcy5hcHBlbmQobV9qaXQuanVtcCgpKTsKQEAg
LTQ2MjksNyArNDYyMyw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9k
ZSkKICAgICAgICAgICAgIGRvbmVKdW1wcy5hcHBlbmQobV9qaXQuanVtcCgpKTsKICAgICAgICAg
fQogCi0gICAgICAgIGlmICghY2hpbGQuc2hvdWxkU3BlY3VsYXRlQ2VsbCgpKSB7CisgICAgICAg
IGlmICghbm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZUNlbGwoKSkgewogICAgICAgICAg
ICAgaXNOb3RDZWxsLmxpbmsoJm1faml0KTsKIAogICAgICAgICAgICAgbV9qaXQuYWRkMzIoVHJ1
c3RlZEltbTMyKDEpLCB0YWdHUFIsIHRlbXBHUFIpOwpAQCAtNDY1Miw3ICs0NjQ2LDcgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAgICAgbV9qaXQu
bW92ZShUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+c21hbGxTdHJpbmdzLmJvb2xl
YW5TdHJpbmcoKSksIHJlc3VsdEdQUik7CiAgICAgICAgIH0KICAgICAgICAgZG9uZUp1bXBzLmxp
bmsoJm1faml0KTsKLSAgICAgICAgY2VsbFJlc3VsdChyZXN1bHRHUFIsIG1fY29tcGlsZUluZGV4
KTsKKyAgICAgICAgY2VsbFJlc3VsdChyZXN1bHRHUFIsIG5vZGUpOwogICAgICAgICBicmVhazsK
ICAgICB9CiAKQEAgLTQ2NzcsOSArNDY3MSw5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGUoTm9kZSYgbm9kZSkKICAgICAgICAgZmx1c2hSZWdpc3RlcnMoKTsKICAgICAgICAgR1BSUmVz
dWx0IHJlc3VsdFBheWxvYWQodGhpcyk7CiAgICAgICAgIEdQUlJlc3VsdDIgcmVzdWx0VGFnKHRo
aXMpOwotICAgICAgICBSZXNvbHZlT3BlcmF0aW9uRGF0YSYgZGF0YSA9IG1faml0LmdyYXBoKCku
bV9yZXNvbHZlT3BlcmF0aW9uc0RhdGFbbm9kZS5yZXNvbHZlT3BlcmF0aW9uc0RhdGFJbmRleCgp
XTsKKyAgICAgICAgUmVzb2x2ZU9wZXJhdGlvbkRhdGEmIGRhdGEgPSBtX2ppdC5ncmFwaCgpLm1f
cmVzb2x2ZU9wZXJhdGlvbnNEYXRhW25vZGUtPnJlc29sdmVPcGVyYXRpb25zRGF0YUluZGV4KCld
OwogICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblJlc29sdmUsIHJlc3VsdFRhZy5ncHIo
KSwgcmVzdWx0UGF5bG9hZC5ncHIoKSwgaWRlbnRpZmllcihkYXRhLmlkZW50aWZpZXJOdW1iZXIp
LCByZXNvbHZlT3BlcmF0aW9ucyhkYXRhLnJlc29sdmVPcGVyYXRpb25zSW5kZXgpKTsKLSAgICAg
ICAganNWYWx1ZVJlc3VsdChyZXN1bHRUYWcuZ3ByKCksIHJlc3VsdFBheWxvYWQuZ3ByKCksIG1f
Y29tcGlsZUluZGV4KTsKKyAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRUYWcuZ3ByKCksIHJl
c3VsdFBheWxvYWQuZ3ByKCksIG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9CiAKQEAgLTQ2
ODcsOSArNDY4MSw5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkK
ICAgICAgICAgZmx1c2hSZWdpc3RlcnMoKTsKICAgICAgICAgR1BSUmVzdWx0IHJlc3VsdFBheWxv
YWQodGhpcyk7CiAgICAgICAgIEdQUlJlc3VsdDIgcmVzdWx0VGFnKHRoaXMpOwotICAgICAgICBS
ZXNvbHZlT3BlcmF0aW9uRGF0YSYgZGF0YSA9IG1faml0LmdyYXBoKCkubV9yZXNvbHZlT3BlcmF0
aW9uc0RhdGFbbm9kZS5yZXNvbHZlT3BlcmF0aW9uc0RhdGFJbmRleCgpXTsKKyAgICAgICAgUmVz
b2x2ZU9wZXJhdGlvbkRhdGEmIGRhdGEgPSBtX2ppdC5ncmFwaCgpLm1fcmVzb2x2ZU9wZXJhdGlv
bnNEYXRhW25vZGUtPnJlc29sdmVPcGVyYXRpb25zRGF0YUluZGV4KCldOwogICAgICAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvblJlc29sdmVCYXNlLCByZXN1bHRUYWcuZ3ByKCksIHJlc3VsdFBh
eWxvYWQuZ3ByKCksIGlkZW50aWZpZXIoZGF0YS5pZGVudGlmaWVyTnVtYmVyKSwgcmVzb2x2ZU9w
ZXJhdGlvbnMoZGF0YS5yZXNvbHZlT3BlcmF0aW9uc0luZGV4KSwgcHV0VG9CYXNlT3BlcmF0aW9u
KGRhdGEucHV0VG9CYXNlT3BlcmF0aW9uSW5kZXgpKTsKLSAgICAgICAganNWYWx1ZVJlc3VsdChy
ZXN1bHRUYWcuZ3ByKCksIHJlc3VsdFBheWxvYWQuZ3ByKCksIG1fY29tcGlsZUluZGV4KTsKKyAg
ICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRUYWcuZ3ByKCksIHJlc3VsdFBheWxvYWQuZ3ByKCks
IG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9CiAKQEAgLTQ2OTcsOSArNDY5MSw5IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgZmx1c2hSZWdp
c3RlcnMoKTsKICAgICAgICAgR1BSUmVzdWx0IHJlc3VsdFBheWxvYWQodGhpcyk7CiAgICAgICAg
IEdQUlJlc3VsdDIgcmVzdWx0VGFnKHRoaXMpOwotICAgICAgICBSZXNvbHZlT3BlcmF0aW9uRGF0
YSYgZGF0YSA9IG1faml0LmdyYXBoKCkubV9yZXNvbHZlT3BlcmF0aW9uc0RhdGFbbm9kZS5yZXNv
bHZlT3BlcmF0aW9uc0RhdGFJbmRleCgpXTsKKyAgICAgICAgUmVzb2x2ZU9wZXJhdGlvbkRhdGEm
IGRhdGEgPSBtX2ppdC5ncmFwaCgpLm1fcmVzb2x2ZU9wZXJhdGlvbnNEYXRhW25vZGUtPnJlc29s
dmVPcGVyYXRpb25zRGF0YUluZGV4KCldOwogICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
blJlc29sdmVCYXNlU3RyaWN0UHV0LCByZXN1bHRUYWcuZ3ByKCksIHJlc3VsdFBheWxvYWQuZ3By
KCksIGlkZW50aWZpZXIoZGF0YS5pZGVudGlmaWVyTnVtYmVyKSwgcmVzb2x2ZU9wZXJhdGlvbnMo
ZGF0YS5yZXNvbHZlT3BlcmF0aW9uc0luZGV4KSwgcHV0VG9CYXNlT3BlcmF0aW9uKGRhdGEucHV0
VG9CYXNlT3BlcmF0aW9uSW5kZXgpKTsKLSAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRUYWcu
Z3ByKCksIHJlc3VsdFBheWxvYWQuZ3ByKCksIG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAganNW
YWx1ZVJlc3VsdChyZXN1bHRUYWcuZ3ByKCksIHJlc3VsdFBheWxvYWQuZ3ByKCksIG5vZGUpOwog
ICAgICAgICBicmVhazsKICAgICB9CiAKQEAgLTQ3MTQsMTEgKzQ3MDgsMTEgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICBHUFJSZWcgcmVzdWx0VGFn
R1BSID0gcmVzdWx0VGFnLmdwcigpOwogICAgICAgICBHUFJSZWcgcmVzdWx0UGF5bG9hZEdQUiA9
IHJlc3VsdFBheWxvYWQuZ3ByKCk7CiAKLSAgICAgICAgUmVzb2x2ZUdsb2JhbERhdGEmIGRhdGEg
PSBtX2ppdC5ncmFwaCgpLm1fcmVzb2x2ZUdsb2JhbERhdGFbbm9kZS5yZXNvbHZlR2xvYmFsRGF0
YUluZGV4KCldOworICAgICAgICBSZXNvbHZlR2xvYmFsRGF0YSYgZGF0YSA9IG1faml0LmdyYXBo
KCkubV9yZXNvbHZlR2xvYmFsRGF0YVtub2RlLT5yZXNvbHZlR2xvYmFsRGF0YUluZGV4KCldOwog
ICAgICAgICBSZXNvbHZlT3BlcmF0aW9uKiByZXNvbHZlT3BlcmF0aW9uQWRkcmVzcyA9ICYobV9q
aXQuY29kZUJsb2NrKCktPnJlc29sdmVPcGVyYXRpb25zKGRhdGEucmVzb2x2ZU9wZXJhdGlvbnNJ
bmRleCktPmRhdGEoKVtkYXRhLnJlc29sdmVQcm9wZXJ0eUluZGV4XSk7CiAKICAgICAgICAgLy8g
Q2hlY2sgU3RydWN0dXJlIG9mIGdsb2JhbCBvYmplY3QKLSAgICAgICAgbV9qaXQubW92ZShKSVRD
b21waWxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxPYmplY3RGb3Iobm9kZS5jb2RlT3Jp
Z2luKSksIGdsb2JhbE9iamVjdEdQUik7CisgICAgICAgIG1faml0Lm1vdmUoSklUQ29tcGlsZXI6
OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPmNvZGVPcmlnaW4pKSwg
Z2xvYmFsT2JqZWN0R1BSKTsKICAgICAgICAgbV9qaXQubW92ZShKSVRDb21waWxlcjo6VHJ1c3Rl
ZEltbVB0cihyZXNvbHZlT3BlcmF0aW9uQWRkcmVzcyksIHJlc29sdmVJbmZvR1BSKTsKICAgICAg
ICAgbV9qaXQubG9hZFB0cihKSVRDb21waWxlcjo6QWRkcmVzcyhyZXNvbHZlSW5mb0dQUiwgT0JK
RUNUX09GRlNFVE9GKFJlc29sdmVPcGVyYXRpb24sIG1fc3RydWN0dXJlKSksIHJlc3VsdFBheWxv
YWRHUFIpOwogCkBAIC00NzQzLDEyICs0NzM3LDEyIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgICAgICAgICBKU1ZhbHVlUmVncyhyZXN1bHRUYWdH
UFIsIHJlc3VsdFBheWxvYWRHUFIpLCByZXNvbHZlSW5mb0dQUiwgZ2xvYmFsT2JqZWN0R1BSLAog
ICAgICAgICAgICAgICAgICZtX2ppdC5jb2RlQmxvY2soKS0+aWRlbnRpZmllcihkYXRhLmlkZW50
aWZpZXJOdW1iZXIpKSk7CiAKLSAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRUYWdHUFIsIHJl
c3VsdFBheWxvYWRHUFIsIG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAganNWYWx1ZVJlc3VsdChy
ZXN1bHRUYWdHUFIsIHJlc3VsdFBheWxvYWRHUFIsIG5vZGUpOwogICAgICAgICBicmVhazsKICAg
ICB9CiAKICAgICBjYXNlIENyZWF0ZUFjdGl2YXRpb246IHsKLSAgICAgICAgSlNWYWx1ZU9wZXJh
bmQgdmFsdWUodGhpcywgbm9kZS5jaGlsZDEoKSk7CisgICAgICAgIEpTVmFsdWVPcGVyYW5kIHZh
bHVlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0
aGlzLCB2YWx1ZSwgZmFsc2UpOwogICAgICAgICAKICAgICAgICAgR1BSUmVnIHZhbHVlVGFnR1BS
ID0gdmFsdWUudGFnR1BSKCk7CkBAIC00NzYyLDEyICs0NzU2LDEyIEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3Io
CiAgICAgICAgICAgICBzbG93UGF0aENhbGwobm90Q3JlYXRlZCwgdGhpcywgb3BlcmF0aW9uQ3Jl
YXRlQWN0aXZhdGlvbiwgcmVzdWx0R1BSKSk7CiAgICAgICAgIAotICAgICAgICBjZWxsUmVzdWx0
KHJlc3VsdEdQUiwgbV9jb21waWxlSW5kZXgpOworICAgICAgICBjZWxsUmVzdWx0KHJlc3VsdEdQ
Uiwgbm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBDcmVh
dGVBcmd1bWVudHM6IHsKLSAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS5j
aGlsZDEoKSk7CisgICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUtPmNoaWxk
MSgpKTsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCB2YWx1ZSwgZmFsc2UpOwog
ICAgICAgICAKICAgICAgICAgR1BSUmVnIHZhbHVlVGFnR1BSID0gdmFsdWUudGFnR1BSKCk7CkBA
IC00Nzc4LDIyICs0NzcyLDIyIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYg
bm9kZSkKICAgICAgICAgCiAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIG5vdENyZWF0ZWQgPSBt
X2ppdC5icmFuY2gzMihKSVRDb21waWxlcjo6RXF1YWwsIHZhbHVlVGFnR1BSLCBUcnVzdGVkSW1t
MzIoSlNWYWx1ZTo6RW1wdHlWYWx1ZVRhZykpOwogICAgICAgICAKLSAgICAgICAgaWYgKG5vZGUu
Y29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpIHsKKyAgICAgICAgaWYgKG5vZGUtPmNvZGVPcmln
aW4uaW5saW5lQ2FsbEZyYW1lKSB7CiAgICAgICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigK
ICAgICAgICAgICAgICAgICBzbG93UGF0aENhbGwoCiAgICAgICAgICAgICAgICAgICAgIG5vdENy
ZWF0ZWQsIHRoaXMsIG9wZXJhdGlvbkNyZWF0ZUlubGluZWRBcmd1bWVudHMsIHJlc3VsdEdQUiwK
LSAgICAgICAgICAgICAgICAgICAgbm9kZS5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSkpOwor
ICAgICAgICAgICAgICAgICAgICBub2RlLT5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSkpOwog
ICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCiAgICAg
ICAgICAgICAgICAgc2xvd1BhdGhDYWxsKG5vdENyZWF0ZWQsIHRoaXMsIG9wZXJhdGlvbkNyZWF0
ZUFyZ3VtZW50cywgcmVzdWx0R1BSKSk7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIGNl
bGxSZXN1bHQocmVzdWx0R1BSLCBtX2NvbXBpbGVJbmRleCk7CisgICAgICAgIGNlbGxSZXN1bHQo
cmVzdWx0R1BSLCBub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKICAgICBj
YXNlIFRlYXJPZmZBY3RpdmF0aW9uOiB7Ci0gICAgICAgIEpTVmFsdWVPcGVyYW5kIGFjdGl2YXRp
b25WYWx1ZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKKyAgICAgICAgSlNWYWx1ZU9wZXJhbmQgYWN0
aXZhdGlvblZhbHVlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgR1BSVGVtcG9yYXJ5
IHNjcmF0Y2godGhpcyk7CiAgICAgICAgIAogICAgICAgICBHUFJSZWcgYWN0aXZhdGlvblZhbHVl
VGFnR1BSID0gYWN0aXZhdGlvblZhbHVlLnRhZ0dQUigpOwpAQCAtNDgwMiw3ICs0Nzk2LDcgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogCiAgICAgICAgIEpJVENv
bXBpbGVyOjpKdW1wIG5vdENyZWF0ZWQgPSBtX2ppdC5icmFuY2gzMihKSVRDb21waWxlcjo6RXF1
YWwsIGFjdGl2YXRpb25WYWx1ZVRhZ0dQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkVtcHR5VmFs
dWVUYWcpKTsKIAotICAgICAgICBTaGFyZWRTeW1ib2xUYWJsZSogc3ltYm9sVGFibGUgPSBtX2pp
dC5zeW1ib2xUYWJsZUZvcihub2RlLmNvZGVPcmlnaW4pOworICAgICAgICBTaGFyZWRTeW1ib2xU
YWJsZSogc3ltYm9sVGFibGUgPSBtX2ppdC5zeW1ib2xUYWJsZUZvcihub2RlLT5jb2RlT3JpZ2lu
KTsKICAgICAgICAgaW50IHJlZ2lzdGVyc09mZnNldCA9IEpTQWN0aXZhdGlvbjo6cmVnaXN0ZXJz
T2Zmc2V0KHN5bWJvbFRhYmxlKTsKIAogICAgICAgICBpbnQgY2FwdHVyZUVuZCA9IHN5bWJvbFRh
YmxlLT5jYXB0dXJlRW5kKCk7CkBAIC00ODI2LDI0ICs0ODIwLDI0IEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgbV9qaXQuc3RvcmVQdHIoc2NyYXRj
aEdQUiwgSklUQ29tcGlsZXI6OkFkZHJlc3MoYWN0aXZhdGlvblZhbHVlUGF5bG9hZEdQUiwgSlNB
Y3RpdmF0aW9uOjpvZmZzZXRPZlJlZ2lzdGVycygpKSk7CiAgICAgICAgIAogICAgICAgICBub3RD
cmVhdGVkLmxpbmsoJm1faml0KTsKLSAgICAgICAgbm9SZXN1bHQobV9jb21waWxlSW5kZXgpOwor
ICAgICAgICBub1Jlc3VsdChub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAK
ICAgICBjYXNlIFRlYXJPZmZBcmd1bWVudHM6IHsKLSAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdW5t
b2RpZmllZEFyZ3VtZW50c1ZhbHVlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwotICAgICAgICBKU1Zh
bHVlT3BlcmFuZCBhY3RpdmF0aW9uVmFsdWUodGhpcywgbm9kZS5jaGlsZDIoKSk7CisgICAgICAg
IEpTVmFsdWVPcGVyYW5kIHVubW9kaWZpZWRBcmd1bWVudHNWYWx1ZSh0aGlzLCBub2RlLT5jaGls
ZDEoKSk7CisgICAgICAgIEpTVmFsdWVPcGVyYW5kIGFjdGl2YXRpb25WYWx1ZSh0aGlzLCBub2Rl
LT5jaGlsZDIoKSk7CiAgICAgICAgIEdQUlJlZyB1bm1vZGlmaWVkQXJndW1lbnRzVmFsdWVQYXls
b2FkR1BSID0gdW5tb2RpZmllZEFyZ3VtZW50c1ZhbHVlLnBheWxvYWRHUFIoKTsKICAgICAgICAg
R1BSUmVnIGFjdGl2YXRpb25WYWx1ZVBheWxvYWRHUFIgPSBhY3RpdmF0aW9uVmFsdWUucGF5bG9h
ZEdQUigpOwogICAgICAgICAKICAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgY3JlYXRlZCA9IG1f
aml0LmJyYW5jaFRlc3QzMigKICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpOb25aZXJvLCB1bm1v
ZGlmaWVkQXJndW1lbnRzVmFsdWVQYXlsb2FkR1BSKTsKICAgICAgICAgCi0gICAgICAgIGlmIChu
b2RlLmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKSB7CisgICAgICAgIGlmIChub2RlLT5jb2Rl
T3JpZ2luLmlubGluZUNhbGxGcmFtZSkgewogICAgICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0
b3IoCiAgICAgICAgICAgICAgICAgc2xvd1BhdGhDYWxsKAogICAgICAgICAgICAgICAgICAgICBj
cmVhdGVkLCB0aGlzLCBvcGVyYXRpb25UZWFyT2ZmSW5saW5lZEFyZ3VtZW50cywgTm9SZXN1bHQs
Ci0gICAgICAgICAgICAgICAgICAgIHVubW9kaWZpZWRBcmd1bWVudHNWYWx1ZVBheWxvYWRHUFIs
IGFjdGl2YXRpb25WYWx1ZVBheWxvYWRHUFIsIG5vZGUuY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJh
bWUpKTsKKyAgICAgICAgICAgICAgICAgICAgdW5tb2RpZmllZEFyZ3VtZW50c1ZhbHVlUGF5bG9h
ZEdQUiwgYWN0aXZhdGlvblZhbHVlUGF5bG9hZEdQUiwgbm9kZS0+Y29kZU9yaWdpbi5pbmxpbmVD
YWxsRnJhbWUpKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGFkZFNsb3dQYXRoR2Vu
ZXJhdG9yKAogICAgICAgICAgICAgICAgIHNsb3dQYXRoQ2FsbCgKQEAgLTQ4NTEsMjEgKzQ4NDUs
MjEgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAg
ICAgICAgICAgICB1bm1vZGlmaWVkQXJndW1lbnRzVmFsdWVQYXlsb2FkR1BSLCBhY3RpdmF0aW9u
VmFsdWVQYXlsb2FkR1BSKSk7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIG5vUmVzdWx0
KG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAgbm9SZXN1bHQobm9kZSk7CiAgICAgICAgIGJyZWFr
OwogICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBDaGVja0FyZ3VtZW50c05vdENyZWF0ZWQ6IHsK
ICAgICAgICAgQVNTRVJUKCFpc0VtcHR5U3BlY3VsYXRpb24oCiAgICAgICAgICAgICBtX3N0YXRl
LnZhcmlhYmxlcygpLm9wZXJhbmQoCi0gICAgICAgICAgICAgICAgbV9qaXQuZ3JhcGgoKS5hcmd1
bWVudHNSZWdpc3RlckZvcihub2RlLmNvZGVPcmlnaW4pKS5tX3R5cGUpKTsKKyAgICAgICAgICAg
ICAgICBtX2ppdC5ncmFwaCgpLmFyZ3VtZW50c1JlZ2lzdGVyRm9yKG5vZGUtPmNvZGVPcmlnaW4p
KS5tX3R5cGUpKTsKICAgICAgICAgc3BlY3VsYXRpb25DaGVjaygKLSAgICAgICAgICAgIFVuY291
bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsCisgICAgICAgICAgICBVbmNvdW50YWJsZSwg
SlNWYWx1ZVJlZ3MoKSwgMCwKICAgICAgICAgICAgIG1faml0LmJyYW5jaDMyKAogICAgICAgICAg
ICAgICAgIEpJVENvbXBpbGVyOjpOb3RFcXVhbCwKLSAgICAgICAgICAgICAgICBKSVRDb21waWxl
cjo6dGFnRm9yKG1faml0LmFyZ3VtZW50c1JlZ2lzdGVyRm9yKG5vZGUuY29kZU9yaWdpbikpLAor
ICAgICAgICAgICAgICAgIEpJVENvbXBpbGVyOjp0YWdGb3IobV9qaXQuYXJndW1lbnRzUmVnaXN0
ZXJGb3Iobm9kZS0+Y29kZU9yaWdpbikpLAogICAgICAgICAgICAgICAgIFRydXN0ZWRJbW0zMihK
U1ZhbHVlOjpFbXB0eVZhbHVlVGFnKSkpOwotICAgICAgICBub1Jlc3VsdChtX2NvbXBpbGVJbmRl
eCk7CisgICAgICAgIG5vUmVzdWx0KG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAg
ICAgIApAQCAtNDg3NSwxOSArNDg2OSwxOSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
KE5vZGUmIG5vZGUpCiAgICAgICAgIAogICAgICAgICBpZiAoIWlzRW1wdHlTcGVjdWxhdGlvbigK
ICAgICAgICAgICAgICAgICBtX3N0YXRlLnZhcmlhYmxlcygpLm9wZXJhbmQoCi0gICAgICAgICAg
ICAgICAgICAgIG1faml0LmdyYXBoKCkuYXJndW1lbnRzUmVnaXN0ZXJGb3Iobm9kZS5jb2RlT3Jp
Z2luKSkubV90eXBlKSkgeworICAgICAgICAgICAgICAgICAgICBtX2ppdC5ncmFwaCgpLmFyZ3Vt
ZW50c1JlZ2lzdGVyRm9yKG5vZGUtPmNvZGVPcmlnaW4pKS5tX3R5cGUpKSB7CiAgICAgICAgICAg
ICBzcGVjdWxhdGlvbkNoZWNrKAotICAgICAgICAgICAgICAgIEFyZ3VtZW50c0VzY2FwZWQsIEpT
VmFsdWVSZWdzKCksIE5vTm9kZSwKKyAgICAgICAgICAgICAgICBBcmd1bWVudHNFc2NhcGVkLCBK
U1ZhbHVlUmVncygpLCAwLAogICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaDMyKAogICAgICAg
ICAgICAgICAgICAgICBKSVRDb21waWxlcjo6Tm90RXF1YWwsCi0gICAgICAgICAgICAgICAgICAg
IEpJVENvbXBpbGVyOjp0YWdGb3IobV9qaXQuYXJndW1lbnRzUmVnaXN0ZXJGb3Iobm9kZS5jb2Rl
T3JpZ2luKSksCisgICAgICAgICAgICAgICAgICAgIEpJVENvbXBpbGVyOjp0YWdGb3IobV9qaXQu
YXJndW1lbnRzUmVnaXN0ZXJGb3Iobm9kZS0+Y29kZU9yaWdpbikpLAogICAgICAgICAgICAgICAg
ICAgICBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6RW1wdHlWYWx1ZVRhZykpKTsKICAgICAgICAgfQog
ICAgICAgICAKLSAgICAgICAgQVNTRVJUKCFub2RlLmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1l
KTsKKyAgICAgICAgQVNTRVJUKCFub2RlLT5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSk7CiAg
ICAgICAgIG1faml0LmxvYWQzMihKSVRDb21waWxlcjo6cGF5bG9hZEZvcihKU1N0YWNrOjpBcmd1
bWVudENvdW50KSwgcmVzdWx0R1BSKTsKICAgICAgICAgbV9qaXQuc3ViMzIoVHJ1c3RlZEltbTMy
KDEpLCByZXN1bHRHUFIpOwotICAgICAgICBpbnRlZ2VyUmVzdWx0KHJlc3VsdEdQUiwgbV9jb21w
aWxlSW5kZXgpOworICAgICAgICBpbnRlZ2VyUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7CiAgICAg
ICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCkBAIC00ODk5LDEyICs0ODkzLDEyIEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgCiAgICAgICAgIEpJ
VENvbXBpbGVyOjpKdW1wIGNyZWF0ZWQgPSBtX2ppdC5icmFuY2gzMigKICAgICAgICAgICAgIEpJ
VENvbXBpbGVyOjpOb3RFcXVhbCwKLSAgICAgICAgICAgIEpJVENvbXBpbGVyOjp0YWdGb3IobV9q
aXQuYXJndW1lbnRzUmVnaXN0ZXJGb3Iobm9kZS5jb2RlT3JpZ2luKSksCisgICAgICAgICAgICBK
SVRDb21waWxlcjo6dGFnRm9yKG1faml0LmFyZ3VtZW50c1JlZ2lzdGVyRm9yKG5vZGUtPmNvZGVP
cmlnaW4pKSwKICAgICAgICAgICAgIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpFbXB0eVZhbHVlVGFn
KSk7CiAgICAgICAgIAotICAgICAgICBpZiAobm9kZS5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFt
ZSkgeworICAgICAgICBpZiAobm9kZS0+Y29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpIHsKICAg
ICAgICAgICAgIG1faml0Lm1vdmUoCi0gICAgICAgICAgICAgICAgSW1tMzIobm9kZS5jb2RlT3Jp
Z2luLmlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzLnNpemUoKSAtIDEpLAorICAgICAgICAgICAg
ICAgIEltbTMyKG5vZGUtPmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6
ZSgpIC0gMSksCiAgICAgICAgICAgICAgICAgcmVzdWx0UGF5bG9hZEdQUik7CiAgICAgICAgIH0g
ZWxzZSB7CiAgICAgICAgICAgICBtX2ppdC5sb2FkMzIoSklUQ29tcGlsZXI6OnBheWxvYWRGb3Io
SlNTdGFjazo6QXJndW1lbnRDb3VudCksIHJlc3VsdFBheWxvYWRHUFIpOwpAQCAtNDkyMCwxNCAr
NDkxNCwxNCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAg
ICAgICAgICBzbG93UGF0aENhbGwoCiAgICAgICAgICAgICAgICAgY3JlYXRlZCwgdGhpcywgb3Bl
cmF0aW9uR2V0QXJndW1lbnRzTGVuZ3RoLAogICAgICAgICAgICAgICAgIEpTVmFsdWVSZWdzKHJl
c3VsdFRhZ0dQUiwgcmVzdWx0UGF5bG9hZEdQUiksCi0gICAgICAgICAgICAgICAgbV9qaXQuYXJn
dW1lbnRzUmVnaXN0ZXJGb3Iobm9kZS5jb2RlT3JpZ2luKSkpOworICAgICAgICAgICAgICAgIG1f
aml0LmFyZ3VtZW50c1JlZ2lzdGVyRm9yKG5vZGUtPmNvZGVPcmlnaW4pKSk7CiAgICAgICAgIAot
ICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFRhZ0dQUiwgcmVzdWx0UGF5bG9hZEdQUiwgbV9j
b21waWxlSW5kZXgpOworICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFRhZ0dQUiwgcmVzdWx0
UGF5bG9hZEdQUiwgbm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCiAgICAg
Y2FzZSBHZXRNeUFyZ3VtZW50QnlWYWw6IHsKLSAgICAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJP
cGVyYW5kIGluZGV4KHRoaXMsIG5vZGUuY2hpbGQxKCkpOworICAgICAgICBTcGVjdWxhdGVTdHJp
Y3RJbnQzMk9wZXJhbmQgaW5kZXgodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICBHUFJU
ZW1wb3JhcnkgcmVzdWx0UGF5bG9hZCh0aGlzKTsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3Vs
dFRhZyh0aGlzKTsKICAgICAgICAgR1BSUmVnIGluZGV4R1BSID0gaW5kZXguZ3ByKCk7CkBAIC00
OTM2LDI3ICs0OTMwLDI3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9k
ZSkKICAgICAgICAgCiAgICAgICAgIGlmICghaXNFbXB0eVNwZWN1bGF0aW9uKAogICAgICAgICAg
ICAgICAgIG1fc3RhdGUudmFyaWFibGVzKCkub3BlcmFuZCgKLSAgICAgICAgICAgICAgICAgICAg
bV9qaXQuZ3JhcGgoKS5hcmd1bWVudHNSZWdpc3RlckZvcihub2RlLmNvZGVPcmlnaW4pKS5tX3R5
cGUpKSB7CisgICAgICAgICAgICAgICAgICAgIG1faml0LmdyYXBoKCkuYXJndW1lbnRzUmVnaXN0
ZXJGb3Iobm9kZS0+Y29kZU9yaWdpbikpLm1fdHlwZSkpIHsKICAgICAgICAgICAgIHNwZWN1bGF0
aW9uQ2hlY2soCi0gICAgICAgICAgICAgICAgQXJndW1lbnRzRXNjYXBlZCwgSlNWYWx1ZVJlZ3Mo
KSwgTm9Ob2RlLAorICAgICAgICAgICAgICAgIEFyZ3VtZW50c0VzY2FwZWQsIEpTVmFsdWVSZWdz
KCksIDAsCiAgICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoMzIoCiAgICAgICAgICAgICAgICAg
ICAgIEpJVENvbXBpbGVyOjpOb3RFcXVhbCwKLSAgICAgICAgICAgICAgICAgICAgSklUQ29tcGls
ZXI6OnRhZ0ZvcihtX2ppdC5hcmd1bWVudHNSZWdpc3RlckZvcihub2RlLmNvZGVPcmlnaW4pKSwK
KyAgICAgICAgICAgICAgICAgICAgSklUQ29tcGlsZXI6OnRhZ0ZvcihtX2ppdC5hcmd1bWVudHNS
ZWdpc3RlckZvcihub2RlLT5jb2RlT3JpZ2luKSksCiAgICAgICAgICAgICAgICAgICAgIFRydXN0
ZWRJbW0zMihKU1ZhbHVlOjpFbXB0eVZhbHVlVGFnKSkpOwogICAgICAgICB9CiAgICAgICAgICAg
ICAKICAgICAgICAgbV9qaXQuYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBpbmRleEdQUiwgcmVzdWx0
UGF5bG9hZEdQUik7CiAgICAgICAgICAgICAKLSAgICAgICAgaWYgKG5vZGUuY29kZU9yaWdpbi5p
bmxpbmVDYWxsRnJhbWUpIHsKKyAgICAgICAgaWYgKG5vZGUtPmNvZGVPcmlnaW4uaW5saW5lQ2Fs
bEZyYW1lKSB7CiAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAotICAgICAgICAgICAgICAg
IFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsCisgICAgICAgICAgICAgICAgVW5j
b3VudGFibGUsIEpTVmFsdWVSZWdzKCksIDAsCiAgICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNo
MzIoCiAgICAgICAgICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpBYm92ZU9yRXF1YWwsCiAgICAg
ICAgICAgICAgICAgICAgIHJlc3VsdFBheWxvYWRHUFIsCi0gICAgICAgICAgICAgICAgICAgIElt
bTMyKG5vZGUuY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50cy5zaXplKCkpKSk7
CisgICAgICAgICAgICAgICAgICAgIEltbTMyKG5vZGUtPmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZy
YW1lLT5hcmd1bWVudHMuc2l6ZSgpKSkpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAg
c3BlY3VsYXRpb25DaGVjaygKLSAgICAgICAgICAgICAgICBVbmNvdW50YWJsZSwgSlNWYWx1ZVJl
Z3MoKSwgTm9Ob2RlLAorICAgICAgICAgICAgICAgIFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygp
LCAwLAogICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaDMyKAogICAgICAgICAgICAgICAgICAg
ICBKSVRDb21waWxlcjo6QWJvdmVPckVxdWFsLAogICAgICAgICAgICAgICAgICAgICByZXN1bHRQ
YXlsb2FkR1BSLApAQCAtNDk2NSwxMSArNDk1OSwxMSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIAogICAgICAgICBKSVRDb21waWxlcjo6SnVtcExp
c3Qgc2xvd0FyZ3VtZW50OwogICAgICAgICBKSVRDb21waWxlcjo6SnVtcExpc3Qgc2xvd0FyZ3Vt
ZW50T3V0T2ZCb3VuZHM7Ci0gICAgICAgIGlmIChjb25zdCBTbG93QXJndW1lbnQqIHNsb3dBcmd1
bWVudHMgPSBtX2ppdC5zeW1ib2xUYWJsZUZvcihub2RlLmNvZGVPcmlnaW4pLT5zbG93QXJndW1l
bnRzKCkpIHsKKyAgICAgICAgaWYgKGNvbnN0IFNsb3dBcmd1bWVudCogc2xvd0FyZ3VtZW50cyA9
IG1faml0LnN5bWJvbFRhYmxlRm9yKG5vZGUtPmNvZGVPcmlnaW4pLT5zbG93QXJndW1lbnRzKCkp
IHsKICAgICAgICAgICAgIHNsb3dBcmd1bWVudE91dE9mQm91bmRzLmFwcGVuZCgKICAgICAgICAg
ICAgICAgICBtX2ppdC5icmFuY2gzMigKICAgICAgICAgICAgICAgICAgICAgSklUQ29tcGlsZXI6
OkFib3ZlT3JFcXVhbCwgaW5kZXhHUFIsCi0gICAgICAgICAgICAgICAgICAgIEltbTMyKG1faml0
LnN5bWJvbFRhYmxlRm9yKG5vZGUuY29kZU9yaWdpbiktPnBhcmFtZXRlckNvdW50KCkpKSk7Cisg
ICAgICAgICAgICAgICAgICAgIEltbTMyKG1faml0LnN5bWJvbFRhYmxlRm9yKG5vZGUtPmNvZGVP
cmlnaW4pLT5wYXJhbWV0ZXJDb3VudCgpKSkpOwogCiAgICAgICAgICAgICBDT01QSUxFX0FTU0VS
VChzaXplb2YoU2xvd0FyZ3VtZW50KSA9PSA4LCBTbG93QXJndW1lbnRfc2l6ZV9pc19laWdodF9i
eXRlcyk7CiAgICAgICAgICAgICBtX2ppdC5tb3ZlKEltbVB0cihzbG93QXJndW1lbnRzKSwgcmVz
dWx0UGF5bG9hZEdQUik7CkBAIC00OTgyLDEyICs0OTc2LDEyIEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgICAgIG1faml0LmxvYWQzMigKICAgICAg
ICAgICAgICAgICBKSVRDb21waWxlcjo6QmFzZUluZGV4KAogICAgICAgICAgICAgICAgICAgICBH
UFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgcmVzdWx0UGF5bG9hZEdQUiwgSklUQ29tcGlsZXI6
OlRpbWVzRWlnaHQsCi0gICAgICAgICAgICAgICAgICAgIG1faml0Lm9mZnNldE9mTG9jYWxzKG5v
ZGUuY29kZU9yaWdpbikgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwg
YXNCaXRzLnRhZykpLAorICAgICAgICAgICAgICAgICAgICBtX2ppdC5vZmZzZXRPZkxvY2Fscyhu
b2RlLT5jb2RlT3JpZ2luKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9y
LCBhc0JpdHMudGFnKSksCiAgICAgICAgICAgICAgICAgcmVzdWx0VGFnR1BSKTsKICAgICAgICAg
ICAgIG1faml0LmxvYWQzMigKICAgICAgICAgICAgICAgICBKSVRDb21waWxlcjo6QmFzZUluZGV4
KAogICAgICAgICAgICAgICAgICAgICBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgcmVzdWx0
UGF5bG9hZEdQUiwgSklUQ29tcGlsZXI6OlRpbWVzRWlnaHQsCi0gICAgICAgICAgICAgICAgICAg
IG1faml0Lm9mZnNldE9mTG9jYWxzKG5vZGUuY29kZU9yaWdpbikgKyBPQkpFQ1RfT0ZGU0VUT0Yo
RW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnBheWxvYWQpKSwKKyAgICAgICAgICAgICAg
ICAgICAgbV9qaXQub2Zmc2V0T2ZMb2NhbHMobm9kZS0+Y29kZU9yaWdpbikgKyBPQkpFQ1RfT0ZG
U0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnBheWxvYWQpKSwKICAgICAgICAg
ICAgICAgICByZXN1bHRQYXlsb2FkR1BSKTsKICAgICAgICAgICAgIHNsb3dBcmd1bWVudC5hcHBl
bmQobV9qaXQuanVtcCgpKTsKICAgICAgICAgfQpAQCAtNDk5OCwyMCArNDk5MiwyMCBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIG1faml0LmxvYWQz
MigKICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpCYXNlSW5kZXgoCiAgICAgICAgICAgICAgICAg
R1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIHJlc3VsdFBheWxvYWRHUFIsIEpJVENvbXBpbGVy
OjpUaW1lc0VpZ2h0LAotICAgICAgICAgICAgICAgIG1faml0Lm9mZnNldE9mQXJndW1lbnRzSW5j
bHVkaW5nVGhpcyhub2RlLmNvZGVPcmlnaW4pICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1
ZURlc2NyaXB0b3IsIGFzQml0cy50YWcpKSwKKyAgICAgICAgICAgICAgICBtX2ppdC5vZmZzZXRP
ZkFyZ3VtZW50c0luY2x1ZGluZ1RoaXMobm9kZS0+Y29kZU9yaWdpbikgKyBPQkpFQ1RfT0ZGU0VU
T0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnRhZykpLAogICAgICAgICAgICAgcmVz
dWx0VGFnR1BSKTsKICAgICAgICAgbV9qaXQubG9hZDMyKAogICAgICAgICAgICAgSklUQ29tcGls
ZXI6OkJhc2VJbmRleCgKICAgICAgICAgICAgICAgICBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rl
ciwgcmVzdWx0UGF5bG9hZEdQUiwgSklUQ29tcGlsZXI6OlRpbWVzRWlnaHQsCi0gICAgICAgICAg
ICAgICAgbV9qaXQub2Zmc2V0T2ZBcmd1bWVudHNJbmNsdWRpbmdUaGlzKG5vZGUuY29kZU9yaWdp
bikgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnBheWxv
YWQpKSwKKyAgICAgICAgICAgICAgICBtX2ppdC5vZmZzZXRPZkFyZ3VtZW50c0luY2x1ZGluZ1Ro
aXMobm9kZS0+Y29kZU9yaWdpbikgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3Jp
cHRvciwgYXNCaXRzLnBheWxvYWQpKSwKICAgICAgICAgICAgIHJlc3VsdFBheWxvYWRHUFIpOwog
ICAgICAgICAgICAgCiAgICAgICAgIHNsb3dBcmd1bWVudC5saW5rKCZtX2ppdCk7Ci0gICAgICAg
IGpzVmFsdWVSZXN1bHQocmVzdWx0VGFnR1BSLCByZXN1bHRQYXlsb2FkR1BSLCBtX2NvbXBpbGVJ
bmRleCk7CisgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0VGFnR1BSLCByZXN1bHRQYXlsb2Fk
R1BSLCBub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGNhc2UgR2V0TXlBcmd1bWVu
dEJ5VmFsU2FmZTogewotICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgaW5kZXgo
dGhpcywgbm9kZS5jaGlsZDEoKSk7CisgICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFu
ZCBpbmRleCh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1
bHRQYXlsb2FkKHRoaXMpOwogICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0VGFnKHRoaXMpOwog
ICAgICAgICBHUFJSZWcgaW5kZXhHUFIgPSBpbmRleC5ncHIoKTsKQEAgLTUwMjIsMTYgKzUwMTYs
MTYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICBz
bG93UGF0aC5hcHBlbmQoCiAgICAgICAgICAgICBtX2ppdC5icmFuY2gzMigKICAgICAgICAgICAg
ICAgICBKSVRDb21waWxlcjo6Tm90RXF1YWwsCi0gICAgICAgICAgICAgICAgSklUQ29tcGlsZXI6
OnRhZ0ZvcihtX2ppdC5hcmd1bWVudHNSZWdpc3RlckZvcihub2RlLmNvZGVPcmlnaW4pKSwKKyAg
ICAgICAgICAgICAgICBKSVRDb21waWxlcjo6dGFnRm9yKG1faml0LmFyZ3VtZW50c1JlZ2lzdGVy
Rm9yKG5vZGUtPmNvZGVPcmlnaW4pKSwKICAgICAgICAgICAgICAgICBUcnVzdGVkSW1tMzIoSlNW
YWx1ZTo6RW1wdHlWYWx1ZVRhZykpKTsKICAgICAgICAgCiAgICAgICAgIG1faml0LmFkZDMyKFRy
dXN0ZWRJbW0zMigxKSwgaW5kZXhHUFIsIHJlc3VsdFBheWxvYWRHUFIpOwotICAgICAgICBpZiAo
bm9kZS5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSkgeworICAgICAgICBpZiAobm9kZS0+Y29k
ZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpIHsKICAgICAgICAgICAgIHNsb3dQYXRoLmFwcGVuZCgK
ICAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2gzMigKICAgICAgICAgICAgICAgICAgICAgSklU
Q29tcGlsZXI6OkFib3ZlT3JFcXVhbCwKICAgICAgICAgICAgICAgICAgICAgcmVzdWx0UGF5bG9h
ZEdQUiwKLSAgICAgICAgICAgICAgICAgICAgSW1tMzIobm9kZS5jb2RlT3JpZ2luLmlubGluZUNh
bGxGcmFtZS0+YXJndW1lbnRzLnNpemUoKSkpKTsKKyAgICAgICAgICAgICAgICAgICAgSW1tMzIo
bm9kZS0+Y29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50cy5zaXplKCkpKSk7CiAg
ICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBzbG93UGF0aC5hcHBlbmQoCiAgICAgICAgICAg
ICAgICAgbV9qaXQuYnJhbmNoMzIoCkBAIC01MDQyLDExICs1MDM2LDExIEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgCiAgICAgICAgIEpJVENvbXBp
bGVyOjpKdW1wTGlzdCBzbG93QXJndW1lbnQ7CiAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wTGlz
dCBzbG93QXJndW1lbnRPdXRPZkJvdW5kczsKLSAgICAgICAgaWYgKGNvbnN0IFNsb3dBcmd1bWVu
dCogc2xvd0FyZ3VtZW50cyA9IG1faml0LnN5bWJvbFRhYmxlRm9yKG5vZGUuY29kZU9yaWdpbikt
PnNsb3dBcmd1bWVudHMoKSkgeworICAgICAgICBpZiAoY29uc3QgU2xvd0FyZ3VtZW50KiBzbG93
QXJndW1lbnRzID0gbV9qaXQuc3ltYm9sVGFibGVGb3Iobm9kZS0+Y29kZU9yaWdpbiktPnNsb3dB
cmd1bWVudHMoKSkgewogICAgICAgICAgICAgc2xvd0FyZ3VtZW50T3V0T2ZCb3VuZHMuYXBwZW5k
KAogICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaDMyKAogICAgICAgICAgICAgICAgICAgICBK
SVRDb21waWxlcjo6QWJvdmVPckVxdWFsLCBpbmRleEdQUiwKLSAgICAgICAgICAgICAgICAgICAg
SW1tMzIobV9qaXQuc3ltYm9sVGFibGVGb3Iobm9kZS5jb2RlT3JpZ2luKS0+cGFyYW1ldGVyQ291
bnQoKSkpKTsKKyAgICAgICAgICAgICAgICAgICAgSW1tMzIobV9qaXQuc3ltYm9sVGFibGVGb3Io
bm9kZS0+Y29kZU9yaWdpbiktPnBhcmFtZXRlckNvdW50KCkpKSk7CiAKICAgICAgICAgICAgIENP
TVBJTEVfQVNTRVJUKHNpemVvZihTbG93QXJndW1lbnQpID09IDgsIFNsb3dBcmd1bWVudF9zaXpl
X2lzX2VpZ2h0X2J5dGVzKTsKICAgICAgICAgICAgIG1faml0Lm1vdmUoSW1tUHRyKHNsb3dBcmd1
bWVudHMpLCByZXN1bHRQYXlsb2FkR1BSKTsKQEAgLTUwNTgsMTIgKzUwNTIsMTIgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAgICAgbV9qaXQubG9h
ZDMyKAogICAgICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpCYXNlSW5kZXgoCiAgICAgICAgICAg
ICAgICAgICAgIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCByZXN1bHRQYXlsb2FkR1BSLCBK
SVRDb21waWxlcjo6VGltZXNFaWdodCwKLSAgICAgICAgICAgICAgICAgICAgbV9qaXQub2Zmc2V0
T2ZMb2NhbHMobm9kZS5jb2RlT3JpZ2luKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVE
ZXNjcmlwdG9yLCBhc0JpdHMudGFnKSksCisgICAgICAgICAgICAgICAgICAgIG1faml0Lm9mZnNl
dE9mTG9jYWxzKG5vZGUtPmNvZGVPcmlnaW4pICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1
ZURlc2NyaXB0b3IsIGFzQml0cy50YWcpKSwKICAgICAgICAgICAgICAgICByZXN1bHRUYWdHUFIp
OwogICAgICAgICAgICAgbV9qaXQubG9hZDMyKAogICAgICAgICAgICAgICAgIEpJVENvbXBpbGVy
OjpCYXNlSW5kZXgoCiAgICAgICAgICAgICAgICAgICAgIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lz
dGVyLCByZXN1bHRQYXlsb2FkR1BSLCBKSVRDb21waWxlcjo6VGltZXNFaWdodCwKLSAgICAgICAg
ICAgICAgICAgICAgbV9qaXQub2Zmc2V0T2ZMb2NhbHMobm9kZS5jb2RlT3JpZ2luKSArIE9CSkVD
VF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9hZCkpLAorICAg
ICAgICAgICAgICAgICAgICBtX2ppdC5vZmZzZXRPZkxvY2Fscyhub2RlLT5jb2RlT3JpZ2luKSAr
IE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9hZCkp
LAogICAgICAgICAgICAgICAgIHJlc3VsdFBheWxvYWRHUFIpOwogICAgICAgICAgICAgc2xvd0Fy
Z3VtZW50LmFwcGVuZChtX2ppdC5qdW1wKCkpOwogICAgICAgICB9CkBAIC01MDc0LDMxICs1MDY4
LDMxIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAg
bV9qaXQubG9hZDMyKAogICAgICAgICAgICAgSklUQ29tcGlsZXI6OkJhc2VJbmRleCgKICAgICAg
ICAgICAgICAgICBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgcmVzdWx0UGF5bG9hZEdQUiwg
SklUQ29tcGlsZXI6OlRpbWVzRWlnaHQsCi0gICAgICAgICAgICAgICAgbV9qaXQub2Zmc2V0T2ZB
cmd1bWVudHNJbmNsdWRpbmdUaGlzKG5vZGUuY29kZU9yaWdpbikgKyBPQkpFQ1RfT0ZGU0VUT0Yo
RW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnRhZykpLAorICAgICAgICAgICAgICAgIG1f
aml0Lm9mZnNldE9mQXJndW1lbnRzSW5jbHVkaW5nVGhpcyhub2RlLT5jb2RlT3JpZ2luKSArIE9C
SkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMudGFnKSksCiAgICAg
ICAgICAgICByZXN1bHRUYWdHUFIpOwogICAgICAgICBtX2ppdC5sb2FkMzIoCiAgICAgICAgICAg
ICBKSVRDb21waWxlcjo6QmFzZUluZGV4KAogICAgICAgICAgICAgICAgIEdQUkluZm86OmNhbGxG
cmFtZVJlZ2lzdGVyLCByZXN1bHRQYXlsb2FkR1BSLCBKSVRDb21waWxlcjo6VGltZXNFaWdodCwK
LSAgICAgICAgICAgICAgICBtX2ppdC5vZmZzZXRPZkFyZ3VtZW50c0luY2x1ZGluZ1RoaXMobm9k
ZS5jb2RlT3JpZ2luKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBh
c0JpdHMucGF5bG9hZCkpLAorICAgICAgICAgICAgICAgIG1faml0Lm9mZnNldE9mQXJndW1lbnRz
SW5jbHVkaW5nVGhpcyhub2RlLT5jb2RlT3JpZ2luKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVk
VmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9hZCkpLAogICAgICAgICAgICAgcmVzdWx0UGF5
bG9hZEdQUik7CiAgICAgICAgIAotICAgICAgICBpZiAobm9kZS5jb2RlT3JpZ2luLmlubGluZUNh
bGxGcmFtZSkgeworICAgICAgICBpZiAobm9kZS0+Y29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUp
IHsKICAgICAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAogICAgICAgICAgICAgICAgIHNs
b3dQYXRoQ2FsbCgKICAgICAgICAgICAgICAgICAgICAgc2xvd1BhdGgsIHRoaXMsIG9wZXJhdGlv
bkdldElubGluZWRBcmd1bWVudEJ5VmFsLAogICAgICAgICAgICAgICAgICAgICBKU1ZhbHVlUmVn
cyhyZXN1bHRUYWdHUFIsIHJlc3VsdFBheWxvYWRHUFIpLAotICAgICAgICAgICAgICAgICAgICBt
X2ppdC5hcmd1bWVudHNSZWdpc3RlckZvcihub2RlLmNvZGVPcmlnaW4pLAotICAgICAgICAgICAg
ICAgICAgICBub2RlLmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lLCBpbmRleEdQUikpOworICAg
ICAgICAgICAgICAgICAgICBtX2ppdC5hcmd1bWVudHNSZWdpc3RlckZvcihub2RlLT5jb2RlT3Jp
Z2luKSwKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y29kZU9yaWdpbi5pbmxpbmVDYWxsRnJh
bWUsIGluZGV4R1BSKSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBhZGRTbG93UGF0
aEdlbmVyYXRvcigKICAgICAgICAgICAgICAgICBzbG93UGF0aENhbGwoCiAgICAgICAgICAgICAg
ICAgICAgIHNsb3dQYXRoLCB0aGlzLCBvcGVyYXRpb25HZXRBcmd1bWVudEJ5VmFsLAogICAgICAg
ICAgICAgICAgICAgICBKU1ZhbHVlUmVncyhyZXN1bHRUYWdHUFIsIHJlc3VsdFBheWxvYWRHUFIp
LAotICAgICAgICAgICAgICAgICAgICBtX2ppdC5hcmd1bWVudHNSZWdpc3RlckZvcihub2RlLmNv
ZGVPcmlnaW4pLCBpbmRleEdQUikpOworICAgICAgICAgICAgICAgICAgICBtX2ppdC5hcmd1bWVu
dHNSZWdpc3RlckZvcihub2RlLT5jb2RlT3JpZ2luKSwgaW5kZXhHUFIpKTsKICAgICAgICAgfQog
ICAgICAgICAKICAgICAgICAgc2xvd0FyZ3VtZW50LmxpbmsoJm1faml0KTsKLSAgICAgICAganNW
YWx1ZVJlc3VsdChyZXN1bHRUYWdHUFIsIHJlc3VsdFBheWxvYWRHUFIsIG1fY29tcGlsZUluZGV4
KTsKKyAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRUYWdHUFIsIHJlc3VsdFBheWxvYWRHUFIs
IG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIApAQCAtNTEwNyw3ICs1MTAx
LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICBi
cmVhazsKICAgICAgICAgCiAgICAgY2FzZSBOZXdGdW5jdGlvbjogewotICAgICAgICBKU1ZhbHVl
T3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKKyAgICAgICAgSlNWYWx1ZU9wZXJh
bmQgdmFsdWUodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICBHUFJUZW1wb3JhcnkgcmVz
dWx0KHRoaXMsIHZhbHVlLCBmYWxzZSk7CiAgICAgICAgIAogICAgICAgICBHUFJSZWcgdmFsdWVU
YWdHUFIgPSB2YWx1ZS50YWdHUFIoKTsKQEAgLTUxMjEsOSArNTExNSw5IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0
b3IoCiAgICAgICAgICAgICBzbG93UGF0aENhbGwoCiAgICAgICAgICAgICAgICAgbm90Q3JlYXRl
ZCwgdGhpcywgb3BlcmF0aW9uTmV3RnVuY3Rpb24sIHJlc3VsdEdQUiwKLSAgICAgICAgICAgICAg
ICBtX2ppdC5jb2RlQmxvY2soKS0+ZnVuY3Rpb25EZWNsKG5vZGUuZnVuY3Rpb25EZWNsSW5kZXgo
KSkpKTsKKyAgICAgICAgICAgICAgICBtX2ppdC5jb2RlQmxvY2soKS0+ZnVuY3Rpb25EZWNsKG5v
ZGUtPmZ1bmN0aW9uRGVjbEluZGV4KCkpKSk7CiAgICAgICAgIAotICAgICAgICBjZWxsUmVzdWx0
KHJlc3VsdEdQUiwgbV9jb21waWxlSW5kZXgpOworICAgICAgICBjZWxsUmVzdWx0KHJlc3VsdEdQ
Uiwgbm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCkBAIC01MTM3LDE3ICs1
MTMxLDE3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAg
ICAgYnJlYWs7CiAKICAgICBjYXNlIEZvcmNlT1NSRXhpdDogewotICAgICAgICB0ZXJtaW5hdGVT
cGVjdWxhdGl2ZUV4ZWN1dGlvbihJbmFkZXF1YXRlQ292ZXJhZ2UsIEpTVmFsdWVSZWdzKCksIE5v
Tm9kZSk7CisgICAgICAgIHRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKEluYWRlcXVhdGVD
b3ZlcmFnZSwgSlNWYWx1ZVJlZ3MoKSwgMCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIAogICAg
IGNhc2UgQ291bnRFeGVjdXRpb246Ci0gICAgICAgIG1faml0LmFkZDY0KFRydXN0ZWRJbW0zMigx
KSwgTWFjcm9Bc3NlbWJsZXI6OkFic29sdXRlQWRkcmVzcyhub2RlLmV4ZWN1dGlvbkNvdW50ZXIo
KS0+YWRkcmVzcygpKSk7CisgICAgICAgIG1faml0LmFkZDY0KFRydXN0ZWRJbW0zMigxKSwgTWFj
cm9Bc3NlbWJsZXI6OkFic29sdXRlQWRkcmVzcyhub2RlLT5leGVjdXRpb25Db3VudGVyKCktPmFk
ZHJlc3MoKSkpOwogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgUGhhbnRvbToKICAgICAgICAg
Ly8gVGhpcyBpcyBhIG5vLW9wLgotICAgICAgICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCk7Cisg
ICAgICAgIG5vUmVzdWx0KG5vZGUpOwogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgSW5saW5l
U3RhcnQ6CkBAIC01MTYwLDggKzUxNTQsOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
KE5vZGUmIG5vZGUpCiAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQogICAgICAgICByZXR1cm47CiAg
ICAgCi0gICAgaWYgKG5vZGUuaGFzUmVzdWx0KCkgJiYgbm9kZS5tdXN0R2VuZXJhdGUoKSkKLSAg
ICAgICAgdXNlKG1fY29tcGlsZUluZGV4KTsKKyAgICBpZiAobm9kZS0+aGFzUmVzdWx0KCkgJiYg
bm9kZS0+bXVzdEdlbmVyYXRlKCkpCisgICAgICAgIHVzZShub2RlKTsKIH0KIAogI2VuZGlmCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2
NC5jcHAJKHJldmlzaW9uIDE0MTA1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5LDI5ICszOSwyOCBAQCBu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKICNpZiBVU0UoSlNWQUxVRTY0KQogCi1H
UFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxJbnRlZ2VyKE5vZGVJbmRleCBub2RlSW5kZXgsIERh
dGFGb3JtYXQmIHJldHVybkZvcm1hdCkKK0dQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbEludGVn
ZXIoTm9kZSogbm9kZSwgRGF0YUZvcm1hdCYgcmV0dXJuRm9ybWF0KQogewotICAgIE5vZGUmIG5v
ZGUgPSBhdChub2RlSW5kZXgpOwotICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIg
PSBub2RlLnZpcnR1YWxSZWdpc3RlcigpOworICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVn
aXN0ZXIgPSBub2RlLT52aXJ0dWFsUmVnaXN0ZXIoKTsKICAgICBHZW5lcmF0aW9uSW5mbyYgaW5m
byA9IG1fZ2VuZXJhdGlvbkluZm9bdmlydHVhbFJlZ2lzdGVyXTsKIAogICAgIGlmIChpbmZvLnJl
Z2lzdGVyRm9ybWF0KCkgPT0gRGF0YUZvcm1hdE5vbmUpIHsKICAgICAgICAgR1BSUmVnIGdwciA9
IGFsbG9jYXRlKCk7CiAKLSAgICAgICAgaWYgKG5vZGUuaGFzQ29uc3RhbnQoKSkgeworICAgICAg
ICBpZiAobm9kZS0+aGFzQ29uc3RhbnQoKSkgewogICAgICAgICAgICAgbV9ncHJzLnJldGFpbihn
cHIsIHZpcnR1YWxSZWdpc3RlciwgU3BpbGxPcmRlckNvbnN0YW50KTsKLSAgICAgICAgICAgIGlm
IChpc0ludDMyQ29uc3RhbnQobm9kZUluZGV4KSkgewotICAgICAgICAgICAgICAgIG1faml0Lm1v
dmUoTWFjcm9Bc3NlbWJsZXI6OkltbTMyKHZhbHVlT2ZJbnQzMkNvbnN0YW50KG5vZGVJbmRleCkp
LCBncHIpOworICAgICAgICAgICAgaWYgKGlzSW50MzJDb25zdGFudChub2RlKSkgeworICAgICAg
ICAgICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OkltbTMyKHZhbHVlT2ZJbnQzMkNv
bnN0YW50KG5vZGUpKSwgZ3ByKTsKICAgICAgICAgICAgICAgICBpbmZvLmZpbGxJbnRlZ2VyKCpt
X3N0cmVhbSwgZ3ByKTsKICAgICAgICAgICAgICAgICByZXR1cm5Gb3JtYXQgPSBEYXRhRm9ybWF0
SW50ZWdlcjsKICAgICAgICAgICAgICAgICByZXR1cm4gZ3ByOwogICAgICAgICAgICAgfQotICAg
ICAgICAgICAgaWYgKGlzTnVtYmVyQ29uc3RhbnQobm9kZUluZGV4KSkgewotICAgICAgICAgICAg
ICAgIEpTVmFsdWUganNWYWx1ZSA9IGpzTnVtYmVyKHZhbHVlT2ZOdW1iZXJDb25zdGFudChub2Rl
SW5kZXgpKTsKKyAgICAgICAgICAgIGlmIChpc051bWJlckNvbnN0YW50KG5vZGUpKSB7CisgICAg
ICAgICAgICAgICAgSlNWYWx1ZSBqc1ZhbHVlID0ganNOdW1iZXIodmFsdWVPZk51bWJlckNvbnN0
YW50KG5vZGUpKTsKICAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpJ
bW02NChKU1ZhbHVlOjplbmNvZGUoanNWYWx1ZSkpLCBncHIpOwogICAgICAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgICAgICBBU1NFUlQoaXNKU0NvbnN0YW50KG5vZGVJbmRleCkpOwotICAg
ICAgICAgICAgICAgIEpTVmFsdWUganNWYWx1ZSA9IHZhbHVlT2ZKU0NvbnN0YW50KG5vZGVJbmRl
eCk7CisgICAgICAgICAgICAgICAgQVNTRVJUKGlzSlNDb25zdGFudChub2RlKSk7CisgICAgICAg
ICAgICAgICAgSlNWYWx1ZSBqc1ZhbHVlID0gdmFsdWVPZkpTQ29uc3RhbnQobm9kZSk7CiAgICAg
ICAgICAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTY0KEpTVmFs
dWU6OmVuY29kZShqc1ZhbHVlKSksIGdwcik7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxz
ZSBpZiAoaW5mby5zcGlsbEZvcm1hdCgpID09IERhdGFGb3JtYXRJbnRlZ2VyKSB7CkBAIC0xMTgs
MjUgKzExNywyNCBAQCBHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxJbnRlZ2VyKE5vZGVJCiAg
ICAgfQogfQogCi1GUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxEb3VibGUoTm9kZUluZGV4IG5v
ZGVJbmRleCkKK0ZQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbERvdWJsZShOb2RlKiBub2RlKQog
ewotICAgIE5vZGUmIG5vZGUgPSBhdChub2RlSW5kZXgpOwotICAgIFZpcnR1YWxSZWdpc3RlciB2
aXJ0dWFsUmVnaXN0ZXIgPSBub2RlLnZpcnR1YWxSZWdpc3RlcigpOworICAgIFZpcnR1YWxSZWdp
c3RlciB2aXJ0dWFsUmVnaXN0ZXIgPSBub2RlLT52aXJ0dWFsUmVnaXN0ZXIoKTsKICAgICBHZW5l
cmF0aW9uSW5mbyYgaW5mbyA9IG1fZ2VuZXJhdGlvbkluZm9bdmlydHVhbFJlZ2lzdGVyXTsKIAog
ICAgIGlmIChpbmZvLnJlZ2lzdGVyRm9ybWF0KCkgPT0gRGF0YUZvcm1hdE5vbmUpIHsKLSAgICAg
ICAgaWYgKG5vZGUuaGFzQ29uc3RhbnQoKSkgeworICAgICAgICBpZiAobm9kZS0+aGFzQ29uc3Rh
bnQoKSkgewogICAgICAgICAgICAgR1BSUmVnIGdwciA9IGFsbG9jYXRlKCk7CiAgICAgICAgIAot
ICAgICAgICAgICAgaWYgKGlzSW50MzJDb25zdGFudChub2RlSW5kZXgpKSB7CisgICAgICAgICAg
ICBpZiAoaXNJbnQzMkNvbnN0YW50KG5vZGUpKSB7CiAgICAgICAgICAgICAgICAgLy8gRklYTUU6
IHNob3VsZCBub3QgYmUgcmVhY2hhYmxlPwotICAgICAgICAgICAgICAgIG1faml0Lm1vdmUoTWFj
cm9Bc3NlbWJsZXI6OkltbTMyKHZhbHVlT2ZJbnQzMkNvbnN0YW50KG5vZGVJbmRleCkpLCBncHIp
OworICAgICAgICAgICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OkltbTMyKHZhbHVl
T2ZJbnQzMkNvbnN0YW50KG5vZGUpKSwgZ3ByKTsKICAgICAgICAgICAgICAgICBtX2dwcnMucmV0
YWluKGdwciwgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVyQ29uc3RhbnQpOwogICAgICAgICAg
ICAgICAgIGluZm8uZmlsbEludGVnZXIoKm1fc3RyZWFtLCBncHIpOwogICAgICAgICAgICAgICAg
IHVubG9jayhncHIpOwotICAgICAgICAgICAgfSBlbHNlIGlmIChpc051bWJlckNvbnN0YW50KG5v
ZGVJbmRleCkpIHsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNOdW1iZXJDb25zdGFudChub2Rl
KSkgewogICAgICAgICAgICAgICAgIEZQUlJlZyBmcHIgPSBmcHJBbGxvY2F0ZSgpOwotICAgICAg
ICAgICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OkltbTY0KHJlaW50ZXJwcmV0RG91
YmxlVG9JbnQ2NCh2YWx1ZU9mTnVtYmVyQ29uc3RhbnQobm9kZUluZGV4KSkpLCBncHIpOworICAg
ICAgICAgICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OkltbTY0KHJlaW50ZXJwcmV0
RG91YmxlVG9JbnQ2NCh2YWx1ZU9mTnVtYmVyQ29uc3RhbnQobm9kZSkpKSwgZ3ByKTsKICAgICAg
ICAgICAgICAgICBtX2ppdC5tb3ZlNjRUb0RvdWJsZShncHIsIGZwcik7CiAgICAgICAgICAgICAg
ICAgdW5sb2NrKGdwcik7CiAKQEAgLTE0NSw4ICsxNDMsOCBAQCBGUFJSZWcgU3BlY3VsYXRpdmVK
SVQ6OmZpbGxEb3VibGUoTm9kZUluCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZwcjsKICAgICAg
ICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgLy8gRklYTUU6IHNob3VsZCBub3QgYmUg
cmVhY2hhYmxlPwotICAgICAgICAgICAgICAgIEFTU0VSVChpc0pTQ29uc3RhbnQobm9kZUluZGV4
KSk7Ci0gICAgICAgICAgICAgICAgSlNWYWx1ZSBqc1ZhbHVlID0gdmFsdWVPZkpTQ29uc3RhbnQo
bm9kZUluZGV4KTsKKyAgICAgICAgICAgICAgICBBU1NFUlQoaXNKU0NvbnN0YW50KG5vZGUpKTsK
KyAgICAgICAgICAgICAgICBKU1ZhbHVlIGpzVmFsdWUgPSB2YWx1ZU9mSlNDb25zdGFudChub2Rl
KTsKICAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1t
NjQoSlNWYWx1ZTo6ZW5jb2RlKGpzVmFsdWUpKSwgZ3ByKTsKICAgICAgICAgICAgICAgICBtX2dw
cnMucmV0YWluKGdwciwgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVyQ29uc3RhbnQpOwogICAg
ICAgICAgICAgICAgIGluZm8uZmlsbEpTVmFsdWUoKm1fc3RyZWFtLCBncHIsIERhdGFGb3JtYXRK
Uyk7CkBAIC0yNjgsMjggKzI2NiwyNyBAQCBGUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxEb3Vi
bGUoTm9kZUluCiAgICAgfQogfQogCi1HUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxKU1ZhbHVl
KE5vZGVJbmRleCBub2RlSW5kZXgpCitHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxKU1ZhbHVl
KE5vZGUqIG5vZGUpCiB7Ci0gICAgTm9kZSYgbm9kZSA9IGF0KG5vZGVJbmRleCk7Ci0gICAgVmly
dHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciA9IG5vZGUudmlydHVhbFJlZ2lzdGVyKCk7Cisg
ICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciA9IG5vZGUtPnZpcnR1YWxSZWdpc3Rl
cigpOwogICAgIEdlbmVyYXRpb25JbmZvJiBpbmZvID0gbV9nZW5lcmF0aW9uSW5mb1t2aXJ0dWFs
UmVnaXN0ZXJdOwogICAgIAogICAgIHN3aXRjaCAoaW5mby5yZWdpc3RlckZvcm1hdCgpKSB7CiAg
ICAgY2FzZSBEYXRhRm9ybWF0Tm9uZTogewogICAgICAgICBHUFJSZWcgZ3ByID0gYWxsb2NhdGUo
KTsKIAotICAgICAgICBpZiAobm9kZS5oYXNDb25zdGFudCgpKSB7Ci0gICAgICAgICAgICBpZiAo
aXNJbnQzMkNvbnN0YW50KG5vZGVJbmRleCkpIHsKKyAgICAgICAgaWYgKG5vZGUtPmhhc0NvbnN0
YW50KCkpIHsKKyAgICAgICAgICAgIGlmIChpc0ludDMyQ29uc3RhbnQobm9kZSkpIHsKICAgICAg
ICAgICAgICAgICBpbmZvLmZpbGxKU1ZhbHVlKCptX3N0cmVhbSwgZ3ByLCBEYXRhRm9ybWF0SlNJ
bnRlZ2VyKTsKLSAgICAgICAgICAgICAgICBKU1ZhbHVlIGpzVmFsdWUgPSBqc051bWJlcih2YWx1
ZU9mSW50MzJDb25zdGFudChub2RlSW5kZXgpKTsKKyAgICAgICAgICAgICAgICBKU1ZhbHVlIGpz
VmFsdWUgPSBqc051bWJlcih2YWx1ZU9mSW50MzJDb25zdGFudChub2RlKSk7CiAgICAgICAgICAg
ICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6SW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpz
VmFsdWUpKSwgZ3ByKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNOdW1iZXJDb25zdGFudChu
b2RlSW5kZXgpKSB7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGlzTnVtYmVyQ29uc3RhbnQobm9k
ZSkpIHsKICAgICAgICAgICAgICAgICBpbmZvLmZpbGxKU1ZhbHVlKCptX3N0cmVhbSwgZ3ByLCBE
YXRhRm9ybWF0SlNEb3VibGUpOwotICAgICAgICAgICAgICAgIEpTVmFsdWUganNWYWx1ZShKU1Zh
bHVlOjpFbmNvZGVBc0RvdWJsZSwgdmFsdWVPZk51bWJlckNvbnN0YW50KG5vZGVJbmRleCkpOwor
ICAgICAgICAgICAgICAgIEpTVmFsdWUganNWYWx1ZShKU1ZhbHVlOjpFbmNvZGVBc0RvdWJsZSwg
dmFsdWVPZk51bWJlckNvbnN0YW50KG5vZGUpKTsKICAgICAgICAgICAgICAgICBtX2ppdC5tb3Zl
KE1hY3JvQXNzZW1ibGVyOjpJbW02NChKU1ZhbHVlOjplbmNvZGUoanNWYWx1ZSkpLCBncHIpOwog
ICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBBU1NFUlQoaXNKU0NvbnN0YW50
KG5vZGVJbmRleCkpOwotICAgICAgICAgICAgICAgIEpTVmFsdWUganNWYWx1ZSA9IHZhbHVlT2ZK
U0NvbnN0YW50KG5vZGVJbmRleCk7CisgICAgICAgICAgICAgICAgQVNTRVJUKGlzSlNDb25zdGFu
dChub2RlKSk7CisgICAgICAgICAgICAgICAgSlNWYWx1ZSBqc1ZhbHVlID0gdmFsdWVPZkpTQ29u
c3RhbnQobm9kZSk7CiAgICAgICAgICAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6
VHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc1ZhbHVlKSksIGdwcik7CiAgICAgICAgICAg
ICAgICAgaW5mby5maWxsSlNWYWx1ZSgqbV9zdHJlYW0sIGdwciwgRGF0YUZvcm1hdEpTKTsKICAg
ICAgICAgICAgIH0KQEAgLTM5MSwyMSArMzg4LDIxIEBAIHByaXZhdGU6CiAgICAgR1BSUmVnIG1f
anNWYWx1ZUdQUjsKIH07CiAKLXZvaWQgU3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlVmFs
dWVUb051bWJlcihOb2RlJiBub2RlKQordm9pZCBTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRp
dmVWYWx1ZVRvTnVtYmVyKE5vZGUqIG5vZGUpCiB7Ci0gICAgaWYgKGlzS25vd25OdW1lcmljKG5v
ZGUuY2hpbGQxKCkuaW5kZXgoKSkpIHsKLSAgICAgICAgSlNWYWx1ZU9wZXJhbmQgb3AxKHRoaXMs
IG5vZGUuY2hpbGQxKCkpOworICAgIGlmIChpc0tub3duTnVtZXJpYyhub2RlLT5jaGlsZDEoKS5u
b2RlKCkpKSB7CisgICAgICAgIEpTVmFsdWVPcGVyYW5kIG9wMSh0aGlzLCBub2RlLT5jaGlsZDEo
KSk7CiAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgb3AxKTsKICAgICAgICAgbV9q
aXQubW92ZShvcDEuZ3ByKCksIHJlc3VsdC5ncHIoKSk7Ci0gICAgICAgIGpzVmFsdWVSZXN1bHQo
cmVzdWx0LmdwcigpLCBtX2NvbXBpbGVJbmRleCk7CisgICAgICAgIGpzVmFsdWVSZXN1bHQocmVz
dWx0LmdwcigpLCBtX2N1cnJlbnROb2RlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAg
IEpTVmFsdWVPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKKyAgICBKU1ZhbHVlT3Bl
cmFuZCBvcDEodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwogICAgIEdQUlRlbXBvcmFyeSByZXN1bHQo
dGhpcyk7CiAgICAgCi0gICAgQVNTRVJUKCFpc0ludDMyQ29uc3RhbnQobm9kZS5jaGlsZDEoKS5p
bmRleCgpKSk7Ci0gICAgQVNTRVJUKCFpc051bWJlckNvbnN0YW50KG5vZGUuY2hpbGQxKCkuaW5k
ZXgoKSkpOworICAgIEFTU0VSVCghaXNJbnQzMkNvbnN0YW50KG5vZGUtPmNoaWxkMSgpLm5vZGUo
KSkpOworICAgIEFTU0VSVCghaXNOdW1iZXJDb25zdGFudChub2RlLT5jaGlsZDEoKS5ub2RlKCkp
KTsKICAgICAKICAgICBHUFJSZWcganNWYWx1ZUdwciA9IG9wMS5ncHIoKTsKICAgICBHUFJSZWcg
Z3ByID0gcmVzdWx0LmdwcigpOwpAQCAtNDI1LDI0ICs0MjIsMjQgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6bm9uU3BlY3VsYXRpdmVWYWx1ZQogICAgIAogICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9y
KGFkb3B0UHRyKG5ldyBWYWx1ZVRvTnVtYmVyU2xvd1BhdGhHZW5lcmF0b3Iobm9uTnVtZXJpYywg
dGhpcywgZ3ByLCBqc1ZhbHVlR3ByKSkpOwogICAgIAotICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0
LmdwcigpLCBtX2NvbXBpbGVJbmRleCwgVXNlQ2hpbGRyZW5DYWxsZWRFeHBsaWNpdGx5KTsKKyAg
ICBqc1ZhbHVlUmVzdWx0KHJlc3VsdC5ncHIoKSwgbV9jdXJyZW50Tm9kZSwgVXNlQ2hpbGRyZW5D
YWxsZWRFeHBsaWNpdGx5KTsKIH0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRp
dmVWYWx1ZVRvSW50MzIoTm9kZSYgbm9kZSkKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1
bGF0aXZlVmFsdWVUb0ludDMyKE5vZGUqIG5vZGUpCiB7Ci0gICAgQVNTRVJUKCFpc0ludDMyQ29u
c3RhbnQobm9kZS5jaGlsZDEoKS5pbmRleCgpKSk7CisgICAgQVNTRVJUKCFpc0ludDMyQ29uc3Rh
bnQobm9kZS0+Y2hpbGQxKCkubm9kZSgpKSk7CiAgICAgCi0gICAgaWYgKGlzS25vd25JbnRlZ2Vy
KG5vZGUuY2hpbGQxKCkuaW5kZXgoKSkpIHsKLSAgICAgICAgSW50ZWdlck9wZXJhbmQgb3AxKHRo
aXMsIG5vZGUuY2hpbGQxKCkpOworICAgIGlmIChpc0tub3duSW50ZWdlcihub2RlLT5jaGlsZDEo
KS5ub2RlKCkpKSB7CisgICAgICAgIEludGVnZXJPcGVyYW5kIG9wMSh0aGlzLCBub2RlLT5jaGls
ZDEoKSk7CiAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgb3AxKTsKICAgICAgICAg
bV9qaXQuemVyb0V4dGVuZDMyVG9QdHIob3AxLmdwcigpLCByZXN1bHQuZ3ByKCkpOwotICAgICAg
ICBpbnRlZ2VyUmVzdWx0KHJlc3VsdC5ncHIoKSwgbV9jb21waWxlSW5kZXgpOworICAgICAgICBp
bnRlZ2VyUmVzdWx0KHJlc3VsdC5ncHIoKSwgbV9jdXJyZW50Tm9kZSk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAgICAgCi0gICAgR2VuZXJhdGlvbkluZm8mIGNoaWxkSW5mbyA9IG1fZ2VuZXJh
dGlvbkluZm9bYXQobm9kZS5jaGlsZDEoKSkudmlydHVhbFJlZ2lzdGVyKCldOworICAgIEdlbmVy
YXRpb25JbmZvJiBjaGlsZEluZm8gPSBtX2dlbmVyYXRpb25JbmZvW25vZGUtPmNoaWxkMSgpLT52
aXJ0dWFsUmVnaXN0ZXIoKV07CiAgICAgaWYgKGNoaWxkSW5mby5pc0pTRG91YmxlKCkpIHsKLSAg
ICAgICAgRG91YmxlT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEoKSk7CisgICAgICAgIERv
dWJsZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgR1BSVGVtcG9y
YXJ5IHJlc3VsdCh0aGlzKTsKICAgICAgICAgRlBSUmVnIGZwciA9IG9wMS5mcHIoKTsKICAgICAg
ICAgR1BSUmVnIGdwciA9IHJlc3VsdC5ncHIoKTsKQEAgLTQ1MiwxMSArNDQ5LDExIEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlVmFsdWUKICAgICAgICAgYWRkU2xvd1BhdGhH
ZW5lcmF0b3IoCiAgICAgICAgICAgICBzbG93UGF0aENhbGwobm90VHJ1bmNhdGVkVG9JbnRlZ2Vy
LCB0aGlzLCB0b0ludDMyLCBncHIsIGZwcikpOwogCi0gICAgICAgIGludGVnZXJSZXN1bHQoZ3By
LCBtX2NvbXBpbGVJbmRleCwgVXNlQ2hpbGRyZW5DYWxsZWRFeHBsaWNpdGx5KTsKKyAgICAgICAg
aW50ZWdlclJlc3VsdChncHIsIG1fY3VycmVudE5vZGUsIFVzZUNoaWxkcmVuQ2FsbGVkRXhwbGlj
aXRseSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCi0gICAgSlNWYWx1ZU9wZXJhbmQg
b3AxKHRoaXMsIG5vZGUuY2hpbGQxKCkpOworICAgIEpTVmFsdWVPcGVyYW5kIG9wMSh0aGlzLCBu
b2RlLT5jaGlsZDEoKSk7CiAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBvcDEpOwogICAg
IEdQUlJlZyBqc1ZhbHVlR3ByID0gb3AxLmdwcigpOwogICAgIEdQUlJlZyByZXN1bHRHUFIgPSBy
ZXN1bHQuZ3ByKCk7CkBAIC00NjksMTIgKzQ2NiwxMiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpu
b25TcGVjdWxhdGl2ZVZhbHVlCiAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCiAgICAgICAgIHNs
b3dQYXRoQ2FsbChpc05vdEludGVnZXIsIHRoaXMsIGRmZ0NvbnZlcnRKU1ZhbHVlVG9JbnQzMiwg
cmVzdWx0R1BSLCBqc1ZhbHVlR3ByKSk7CiAKLSAgICBpbnRlZ2VyUmVzdWx0KHJlc3VsdEdQUiwg
bV9jb21waWxlSW5kZXgsIFVzZUNoaWxkcmVuQ2FsbGVkRXhwbGljaXRseSk7CisgICAgaW50ZWdl
clJlc3VsdChyZXN1bHRHUFIsIG1fY3VycmVudE5vZGUsIFVzZUNoaWxkcmVuQ2FsbGVkRXhwbGlj
aXRseSk7CiB9CiAKLXZvaWQgU3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlVUludDMyVG9O
dW1iZXIoTm9kZSYgbm9kZSkKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlVUlu
dDMyVG9OdW1iZXIoTm9kZSogbm9kZSkKIHsKLSAgICBJbnRlZ2VyT3BlcmFuZCBvcDEodGhpcywg
bm9kZS5jaGlsZDEoKSk7CisgICAgSW50ZWdlck9wZXJhbmQgb3AxKHRoaXMsIG5vZGUtPmNoaWxk
MSgpKTsKICAgICBGUFJUZW1wb3JhcnkgYm94ZXIodGhpcyk7CiAgICAgR1BSVGVtcG9yYXJ5IHJl
c3VsdCh0aGlzLCBvcDEpOwogICAgIApAQCAtNDkzLDcgKzQ5MCw3IEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6Om5vblNwZWN1bGF0aXZlVUludDMKICAgICAKICAgICBkb25lLmxpbmsoJm1faml0KTsK
ICAgICAKLSAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdC5ncHIoKSwgbV9jb21waWxlSW5kZXgpOwor
ICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0LmdwcigpLCBtX2N1cnJlbnROb2RlKTsKIH0KIAogdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y2FjaGVkR2V0QnlJZChDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIEdQ
UlJlZyBiYXNlR1BSLCBHUFJSZWcgcmVzdWx0R1BSLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVy
LCBKSVRDb21waWxlcjo6SnVtcCBzbG93UGF0aFRhcmdldCwgU3BpbGxSZWdpc3RlcnNNb2RlIHNw
aWxsTW9kZSkKQEAgLTU0NCw3ICs1NDEsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjYWNoZWRQ
dXRCeUlkKENvZGVPCiAgICAgSklUQ29tcGlsZXI6OkxhYmVsIGRvbmVMYWJlbCA9IG1faml0Lmxh
YmVsKCk7CiAgICAgCiAgICAgVl9ERkdPcGVyYXRpb25fRUpDSSBvcHRpbWl6ZWRDYWxsOwotICAg
IGlmIChtX2ppdC5zdHJpY3RNb2RlRm9yKGF0KG1fY29tcGlsZUluZGV4KS5jb2RlT3JpZ2luKSkg
eworICAgIGlmIChtX2ppdC5zdHJpY3RNb2RlRm9yKG1fY3VycmVudE5vZGUtPmNvZGVPcmlnaW4p
KSB7CiAgICAgICAgIGlmIChwdXRLaW5kID09IERpcmVjdCkKICAgICAgICAgICAgIG9wdGltaXpl
ZENhbGwgPSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0T3B0aW1pemU7CiAgICAgICAgIGVs
c2UKQEAgLTU5MCwxMiArNTg3LDEyIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0
aXZlTm9uUGUKICAgICAKICAgICBKSVRDb21waWxlcjo6SnVtcCBub3RDZWxsOwogICAgIAotICAg
IGlmICghaXNLbm93bkNlbGwob3BlcmFuZC5pbmRleCgpKSkKKyAgICBpZiAoIWlzS25vd25DZWxs
KG9wZXJhbmQubm9kZSgpKSkKICAgICAgICAgbm90Q2VsbCA9IG1faml0LmJyYW5jaFRlc3Q2NChN
YWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgYXJnR1BSLCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIp
OwogICAgCiAgICAgSklUQ29tcGlsZXI6Okp1bXAgbm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZDsK
LSAgICBpZiAobV9qaXQuZ3JhcGgoKS5nbG9iYWxPYmplY3RGb3IobV9qaXQuZ3JhcGgoKVtvcGVy
YW5kXS5jb2RlT3JpZ2luKS0+bWFzcXVlcmFkZXNBc1VuZGVmaW5lZFdhdGNocG9pbnQoKS0+aXNT
dGlsbFZhbGlkKCkpIHsKLSAgICAgICAgbV9qaXQuZ3JhcGgoKS5nbG9iYWxPYmplY3RGb3IobV9q
aXQuZ3JhcGgoKVtvcGVyYW5kXS5jb2RlT3JpZ2luKS0+bWFzcXVlcmFkZXNBc1VuZGVmaW5lZFdh
dGNocG9pbnQoKS0+YWRkKHNwZWN1bGF0aW9uV2F0Y2hwb2ludCgpKTsKKyAgICBpZiAobV9qaXQu
Z3JhcGgoKS5nbG9iYWxPYmplY3RGb3Iob3BlcmFuZC0+Y29kZU9yaWdpbiktPm1hc3F1ZXJhZGVz
QXNVbmRlZmluZWRXYXRjaHBvaW50KCktPmlzU3RpbGxWYWxpZCgpKSB7CisgICAgICAgIG1faml0
LmdyYXBoKCkuZ2xvYmFsT2JqZWN0Rm9yKG9wZXJhbmQtPmNvZGVPcmlnaW4pLT5tYXNxdWVyYWRl
c0FzVW5kZWZpbmVkV2F0Y2hwb2ludCgpLT5hZGQoc3BlY3VsYXRpb25XYXRjaHBvaW50KCkpOwog
ICAgICAgICBtX2ppdC5tb3ZlKGludmVydCA/IFRydXN0ZWRJbW0zMigxKSA6IFRydXN0ZWRJbW0z
MigwKSwgcmVzdWx0R1BSKTsKICAgICAgICAgbm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IG1f
aml0Lmp1bXAoKTsKICAgICB9IGVsc2UgewpAQCAtNjEwLDEyICs2MDcsMTIgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVOb25QZQogICAgICAgICBHUFJUZW1wb3JhcnkgcmVt
b3RlR2xvYmFsT2JqZWN0KHRoaXMpOwogICAgICAgICBHUFJSZWcgbG9jYWxHbG9iYWxPYmplY3RH
UFIgPSBsb2NhbEdsb2JhbE9iamVjdC5ncHIoKTsKICAgICAgICAgR1BSUmVnIHJlbW90ZUdsb2Jh
bE9iamVjdEdQUiA9IHJlbW90ZUdsb2JhbE9iamVjdC5ncHIoKTsKLSAgICAgICAgbV9qaXQubW92
ZShKSVRDb21waWxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5ncmFwaCgpLmdsb2JhbE9iamVjdEZv
cihtX2ppdC5ncmFwaCgpW29wZXJhbmRdLmNvZGVPcmlnaW4pKSwgbG9jYWxHbG9iYWxPYmplY3RH
UFIpOworICAgICAgICBtX2ppdC5tb3ZlKEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tUHRyKG1faml0
LmdyYXBoKCkuZ2xvYmFsT2JqZWN0Rm9yKG9wZXJhbmQtPmNvZGVPcmlnaW4pKSwgbG9jYWxHbG9i
YWxPYmplY3RHUFIpOwogICAgICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjpBZGRyZXNz
KHJlc3VsdEdQUiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlbW90ZUdsb2Jh
bE9iamVjdEdQUik7CiAgICAgICAgIG1faml0LmNvbXBhcmVQdHIoaW52ZXJ0ID8gSklUQ29tcGls
ZXI6Ok5vdEVxdWFsIDogSklUQ29tcGlsZXI6OkVxdWFsLCBsb2NhbEdsb2JhbE9iamVjdEdQUiwg
cmVtb3RlR2xvYmFsT2JqZWN0R1BSLCByZXN1bHRHUFIpOwogICAgIH0KICAKLSAgICBpZiAoIWlz
S25vd25DZWxsKG9wZXJhbmQuaW5kZXgoKSkpIHsKKyAgICBpZiAoIWlzS25vd25DZWxsKG9wZXJh
bmQubm9kZSgpKSkgewogICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBkb25lID0gbV9qaXQuanVt
cCgpOwogICAgICAgICAKICAgICAgICAgbm90Q2VsbC5saW5rKCZtX2ppdCk7CkBAIC02MzAsMTQg
KzYyNywxMyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZU5vblBlCiAgICAg
bm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKCZtX2ppdCk7CiAgCiAgICAgbV9qaXQub3Iz
MihUcnVzdGVkSW1tMzIoVmFsdWVGYWxzZSksIHJlc3VsdEdQUik7Ci0gICAganNWYWx1ZVJlc3Vs
dChyZXN1bHRHUFIsIG1fY29tcGlsZUluZGV4LCBEYXRhRm9ybWF0SlNCb29sZWFuKTsKKyAgICBq
c1ZhbHVlUmVzdWx0KHJlc3VsdEdQUiwgbV9jdXJyZW50Tm9kZSwgRGF0YUZvcm1hdEpTQm9vbGVh
bik7CiB9CiAKLXZvaWQgU3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlUGVlcGhvbGVCcmFu
Y2hOdWxsKEVkZ2Ugb3BlcmFuZCwgTm9kZUluZGV4IGJyYW5jaE5vZGVJbmRleCwgYm9vbCBpbnZl
cnQpCit2b2lkIFNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZVBlZXBob2xlQnJhbmNoTnVs
bChFZGdlIG9wZXJhbmQsIE5vZGUqIGJyYW5jaE5vZGUsIGJvb2wgaW52ZXJ0KQogewotICAgIE5v
ZGUmIGJyYW5jaE5vZGUgPSBhdChicmFuY2hOb2RlSW5kZXgpOwotICAgIEJsb2NrSW5kZXggdGFr
ZW4gPSBicmFuY2hOb2RlLnRha2VuQmxvY2tJbmRleCgpOwotICAgIEJsb2NrSW5kZXggbm90VGFr
ZW4gPSBicmFuY2hOb2RlLm5vdFRha2VuQmxvY2tJbmRleCgpOworICAgIEJsb2NrSW5kZXggdGFr
ZW4gPSBicmFuY2hOb2RlLT50YWtlbkJsb2NrSW5kZXgoKTsKKyAgICBCbG9ja0luZGV4IG5vdFRh
a2VuID0gYnJhbmNoTm9kZS0+bm90VGFrZW5CbG9ja0luZGV4KCk7CiAgICAgCiAgICAgaWYgKHRh
a2VuID09IG5leHRCbG9jaygpKSB7CiAgICAgICAgIGludmVydCA9ICFpbnZlcnQ7CkBAIC02NTQs
MTEgKzY1MCwxMSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZVBlZXBoCiAg
ICAgCiAgICAgSklUQ29tcGlsZXI6Okp1bXAgbm90Q2VsbDsKICAgICAKLSAgICBpZiAoIWlzS25v
d25DZWxsKG9wZXJhbmQuaW5kZXgoKSkpCisgICAgaWYgKCFpc0tub3duQ2VsbChvcGVyYW5kLm5v
ZGUoKSkpCiAgICAgICAgIG5vdENlbGwgPSBtX2ppdC5icmFuY2hUZXN0NjQoTWFjcm9Bc3NlbWJs
ZXI6Ok5vblplcm8sIGFyZ0dQUiwgR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKTsKICAgICAKLSAg
ICBpZiAobV9qaXQuZ3JhcGgoKS5nbG9iYWxPYmplY3RGb3IobV9qaXQuZ3JhcGgoKVtvcGVyYW5k
XS5jb2RlT3JpZ2luKS0+bWFzcXVlcmFkZXNBc1VuZGVmaW5lZFdhdGNocG9pbnQoKS0+aXNTdGls
bFZhbGlkKCkpIHsKLSAgICAgICAgbV9qaXQuZ3JhcGgoKS5nbG9iYWxPYmplY3RGb3IobV9qaXQu
Z3JhcGgoKVtvcGVyYW5kXS5jb2RlT3JpZ2luKS0+bWFzcXVlcmFkZXNBc1VuZGVmaW5lZFdhdGNo
cG9pbnQoKS0+YWRkKHNwZWN1bGF0aW9uV2F0Y2hwb2ludCgpKTsKKyAgICBpZiAobV9qaXQuZ3Jh
cGgoKS5nbG9iYWxPYmplY3RGb3Iob3BlcmFuZC0+Y29kZU9yaWdpbiktPm1hc3F1ZXJhZGVzQXNV
bmRlZmluZWRXYXRjaHBvaW50KCktPmlzU3RpbGxWYWxpZCgpKSB7CisgICAgICAgIG1faml0Lmdy
YXBoKCkuZ2xvYmFsT2JqZWN0Rm9yKG9wZXJhbmQtPmNvZGVPcmlnaW4pLT5tYXNxdWVyYWRlc0Fz
VW5kZWZpbmVkV2F0Y2hwb2ludCgpLT5hZGQoc3BlY3VsYXRpb25XYXRjaHBvaW50KCkpOwogICAg
ICAgICBqdW1wKGludmVydCA/IHRha2VuIDogbm90VGFrZW4sIEZvcmNlSnVtcCk7CiAgICAgfSBl
bHNlIHsKICAgICAgICAgbV9qaXQubG9hZFB0cihKSVRDb21waWxlcjo6QWRkcmVzcyhhcmdHUFIs
IEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCByZXN1bHRHUFIpOwpAQCAtNjY4LDEyICs2NjQs
MTIgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVQZWVwaAogICAgICAgICBH
UFJUZW1wb3JhcnkgcmVtb3RlR2xvYmFsT2JqZWN0KHRoaXMpOwogICAgICAgICBHUFJSZWcgbG9j
YWxHbG9iYWxPYmplY3RHUFIgPSBsb2NhbEdsb2JhbE9iamVjdC5ncHIoKTsKICAgICAgICAgR1BS
UmVnIHJlbW90ZUdsb2JhbE9iamVjdEdQUiA9IHJlbW90ZUdsb2JhbE9iamVjdC5ncHIoKTsKLSAg
ICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyKG1faml0LmdyYXBoKCkuZ2xvYmFsT2JqZWN0
Rm9yKG1faml0LmdyYXBoKClbb3BlcmFuZF0uY29kZU9yaWdpbikpLCBsb2NhbEdsb2JhbE9iamVj
dEdQUik7CisgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbVB0cihtX2ppdC5ncmFwaCgpLmds
b2JhbE9iamVjdEZvcihvcGVyYW5kLT5jb2RlT3JpZ2luKSksIGxvY2FsR2xvYmFsT2JqZWN0R1BS
KTsKICAgICAgICAgbV9qaXQubG9hZFB0cihKSVRDb21waWxlcjo6QWRkcmVzcyhyZXN1bHRHUFIs
IFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZW1vdGVHbG9iYWxPYmplY3RHUFIp
OwogICAgICAgICBicmFuY2hQdHIoSklUQ29tcGlsZXI6OkVxdWFsLCBsb2NhbEdsb2JhbE9iamVj
dEdQUiwgcmVtb3RlR2xvYmFsT2JqZWN0R1BSLCBpbnZlcnQgPyBub3RUYWtlbiA6IHRha2VuKTsK
ICAgICB9CiAgCi0gICAgaWYgKCFpc0tub3duQ2VsbChvcGVyYW5kLmluZGV4KCkpKSB7CisgICAg
aWYgKCFpc0tub3duQ2VsbChvcGVyYW5kLm5vZGUoKSkpIHsKICAgICAgICAganVtcChub3RUYWtl
biwgRm9yY2VKdW1wKTsKICAgICAgICAgCiAgICAgICAgIG5vdENlbGwubGluaygmbV9qaXQpOwpA
QCAtNjg2LDIwICs2ODIsMjAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVQ
ZWVwaAogICAgIGp1bXAobm90VGFrZW4pOwogfQogCi1ib29sIFNwZWN1bGF0aXZlSklUOjpub25T
cGVjdWxhdGl2ZUNvbXBhcmVOdWxsKE5vZGUmIG5vZGUsIEVkZ2Ugb3BlcmFuZCwgYm9vbCBpbnZl
cnQpCitib29sIFNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZUNvbXBhcmVOdWxsKE5vZGUq
IG5vZGUsIEVkZ2Ugb3BlcmFuZCwgYm9vbCBpbnZlcnQpCiB7CiAgICAgdW5zaWduZWQgYnJhbmNo
SW5kZXhJbkJsb2NrID0gZGV0ZWN0UGVlcEhvbGVCcmFuY2goKTsKICAgICBpZiAoYnJhbmNoSW5k
ZXhJbkJsb2NrICE9IFVJTlRfTUFYKSB7Ci0gICAgICAgIE5vZGVJbmRleCBicmFuY2hOb2RlSW5k
ZXggPSBtX2ppdC5ncmFwaCgpLm1fYmxvY2tzW21fYmxvY2tdLT5hdChicmFuY2hJbmRleEluQmxv
Y2spOworICAgICAgICBOb2RlKiBicmFuY2hOb2RlID0gbV9qaXQuZ3JhcGgoKS5tX2Jsb2Nrc1tt
X2Jsb2NrXS0+YXQoYnJhbmNoSW5kZXhJbkJsb2NrKTsKIAotICAgICAgICBSRUxFQVNFX0FTU0VS
VChub2RlLmFkanVzdGVkUmVmQ291bnQoKSA9PSAxKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQo
bm9kZS0+YWRqdXN0ZWRSZWZDb3VudCgpID09IDEpOwogICAgICAgICAKLSAgICAgICAgbm9uU3Bl
Y3VsYXRpdmVQZWVwaG9sZUJyYW5jaE51bGwob3BlcmFuZCwgYnJhbmNoTm9kZUluZGV4LCBpbnZl
cnQpOworICAgICAgICBub25TcGVjdWxhdGl2ZVBlZXBob2xlQnJhbmNoTnVsbChvcGVyYW5kLCBi
cmFuY2hOb2RlLCBpbnZlcnQpOwogICAgIAotICAgICAgICB1c2Uobm9kZS5jaGlsZDEoKSk7Ci0g
ICAgICAgIHVzZShub2RlLmNoaWxkMigpKTsKKyAgICAgICAgdXNlKG5vZGUtPmNoaWxkMSgpKTsK
KyAgICAgICAgdXNlKG5vZGUtPmNoaWxkMigpKTsKICAgICAgICAgbV9pbmRleEluQmxvY2sgPSBi
cmFuY2hJbmRleEluQmxvY2s7Ci0gICAgICAgIG1fY29tcGlsZUluZGV4ID0gYnJhbmNoTm9kZUlu
ZGV4OworICAgICAgICBtX2N1cnJlbnROb2RlID0gYnJhbmNoTm9kZTsKICAgICAgICAgCiAgICAg
ICAgIHJldHVybiB0cnVlOwogICAgIH0KQEAgLTcwOSwxMSArNzA1LDEwIEBAIGJvb2wgU3BlY3Vs
YXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlQ29tcGEKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZv
aWQgU3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlUGVlcGhvbGVCcmFuY2goTm9kZSYgbm9k
ZSwgTm9kZUluZGV4IGJyYW5jaE5vZGVJbmRleCwgTWFjcm9Bc3NlbWJsZXI6OlJlbGF0aW9uYWxD
b25kaXRpb24gY29uZCwgU19ERkdPcGVyYXRpb25fRUpKIGhlbHBlckZ1bmN0aW9uKQordm9pZCBT
cGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVQZWVwaG9sZUJyYW5jaChOb2RlKiBub2RlLCBO
b2RlKiBicmFuY2hOb2RlLCBNYWNyb0Fzc2VtYmxlcjo6UmVsYXRpb25hbENvbmRpdGlvbiBjb25k
LCBTX0RGR09wZXJhdGlvbl9FSkogaGVscGVyRnVuY3Rpb24pCiB7Ci0gICAgTm9kZSYgYnJhbmNo
Tm9kZSA9IGF0KGJyYW5jaE5vZGVJbmRleCk7Ci0gICAgQmxvY2tJbmRleCB0YWtlbiA9IGJyYW5j
aE5vZGUudGFrZW5CbG9ja0luZGV4KCk7Ci0gICAgQmxvY2tJbmRleCBub3RUYWtlbiA9IGJyYW5j
aE5vZGUubm90VGFrZW5CbG9ja0luZGV4KCk7CisgICAgQmxvY2tJbmRleCB0YWtlbiA9IGJyYW5j
aE5vZGUtPnRha2VuQmxvY2tJbmRleCgpOworICAgIEJsb2NrSW5kZXggbm90VGFrZW4gPSBicmFu
Y2hOb2RlLT5ub3RUYWtlbkJsb2NrSW5kZXgoKTsKIAogICAgIEpJVENvbXBpbGVyOjpSZXN1bHRD
b25kaXRpb24gY2FsbFJlc3VsdENvbmRpdGlvbiA9IEpJVENvbXBpbGVyOjpOb25aZXJvOwogCkBA
IC03MjcsMTQgKzcyMiwxNCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZVBl
ZXBoCiAgICAgICAgIG5vdFRha2VuID0gdG1wOwogICAgIH0KIAotICAgIEpTVmFsdWVPcGVyYW5k
IGFyZzEodGhpcywgbm9kZS5jaGlsZDEoKSk7Ci0gICAgSlNWYWx1ZU9wZXJhbmQgYXJnMih0aGlz
LCBub2RlLmNoaWxkMigpKTsKKyAgICBKU1ZhbHVlT3BlcmFuZCBhcmcxKHRoaXMsIG5vZGUtPmNo
aWxkMSgpKTsKKyAgICBKU1ZhbHVlT3BlcmFuZCBhcmcyKHRoaXMsIG5vZGUtPmNoaWxkMigpKTsK
ICAgICBHUFJSZWcgYXJnMUdQUiA9IGFyZzEuZ3ByKCk7CiAgICAgR1BSUmVnIGFyZzJHUFIgPSBh
cmcyLmdwcigpOwogICAgIAogICAgIEpJVENvbXBpbGVyOjpKdW1wTGlzdCBzbG93UGF0aDsKICAg
ICAKLSAgICBpZiAoaXNLbm93bk5vdEludGVnZXIobm9kZS5jaGlsZDEoKS5pbmRleCgpKSB8fCBp
c0tub3duTm90SW50ZWdlcihub2RlLmNoaWxkMigpLmluZGV4KCkpKSB7CisgICAgaWYgKGlzS25v
d25Ob3RJbnRlZ2VyKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSkgfHwgaXNLbm93bk5vdEludGVnZXIo
bm9kZS0+Y2hpbGQyKCkubm9kZSgpKSkgewogICAgICAgICBHUFJSZXN1bHQgcmVzdWx0KHRoaXMp
OwogICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwogICAgIApAQCAtNzUy
LDE0ICs3NDcsMTQgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVQZWVwaAog
ICAgICAgICBhcmcxLnVzZSgpOwogICAgICAgICBhcmcyLnVzZSgpOwogICAgIAotICAgICAgICBp
ZiAoIWlzS25vd25JbnRlZ2VyKG5vZGUuY2hpbGQxKCkuaW5kZXgoKSkpCisgICAgICAgIGlmICgh
aXNLbm93bkludGVnZXIobm9kZS0+Y2hpbGQxKCkubm9kZSgpKSkKICAgICAgICAgICAgIHNsb3dQ
YXRoLmFwcGVuZChtX2ppdC5icmFuY2g2NChNYWNyb0Fzc2VtYmxlcjo6QmVsb3csIGFyZzFHUFIs
IEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlcikpOwotICAgICAgICBpZiAoIWlzS25vd25J
bnRlZ2VyKG5vZGUuY2hpbGQyKCkuaW5kZXgoKSkpCisgICAgICAgIGlmICghaXNLbm93bkludGVn
ZXIobm9kZS0+Y2hpbGQyKCkubm9kZSgpKSkKICAgICAgICAgICAgIHNsb3dQYXRoLmFwcGVuZCht
X2ppdC5icmFuY2g2NChNYWNyb0Fzc2VtYmxlcjo6QmVsb3csIGFyZzJHUFIsIEdQUkluZm86OnRh
Z1R5cGVOdW1iZXJSZWdpc3RlcikpOwogICAgIAogICAgICAgICBicmFuY2gzMihjb25kLCBhcmcx
R1BSLCBhcmcyR1BSLCB0YWtlbik7CiAgICAgCi0gICAgICAgIGlmICghaXNLbm93bkludGVnZXIo
bm9kZS5jaGlsZDEoKS5pbmRleCgpKSB8fCAhaXNLbm93bkludGVnZXIobm9kZS5jaGlsZDIoKS5p
bmRleCgpKSkgeworICAgICAgICBpZiAoIWlzS25vd25JbnRlZ2VyKG5vZGUtPmNoaWxkMSgpLm5v
ZGUoKSkgfHwgIWlzS25vd25JbnRlZ2VyKG5vZGUtPmNoaWxkMigpLm5vZGUoKSkpIHsKICAgICAg
ICAgICAgIGp1bXAobm90VGFrZW4sIEZvcmNlSnVtcCk7CiAgICAgCiAgICAgICAgICAgICBzbG93
UGF0aC5saW5rKCZtX2ppdCk7CkBAIC03NzUsNyArNzcwLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6bm9uU3BlY3VsYXRpdmVQZWVwaAogICAgIGp1bXAobm90VGFrZW4pOwogCiAgICAgbV9pbmRl
eEluQmxvY2sgPSBtX2ppdC5ncmFwaCgpLm1fYmxvY2tzW21fYmxvY2tdLT5zaXplKCkgLSAxOwot
ICAgIG1fY29tcGlsZUluZGV4ID0gYnJhbmNoTm9kZUluZGV4OworICAgIG1fY3VycmVudE5vZGUg
PSBicmFuY2hOb2RlOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBKdW1wVHlwZT4KQEAgLTgwNywx
NiArODAyLDE2IEBAIHByaXZhdGU6CiAgICAgR1BSUmVnIG1fYXJnMjsKIH07CiAKLXZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlTm9uUGVlcGhvbGVDb21wYXJlKE5vZGUmIG5vZGUs
IE1hY3JvQXNzZW1ibGVyOjpSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmQsIFNfREZHT3BlcmF0aW9u
X0VKSiBoZWxwZXJGdW5jdGlvbikKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZl
Tm9uUGVlcGhvbGVDb21wYXJlKE5vZGUqIG5vZGUsIE1hY3JvQXNzZW1ibGVyOjpSZWxhdGlvbmFs
Q29uZGl0aW9uIGNvbmQsIFNfREZHT3BlcmF0aW9uX0VKSiBoZWxwZXJGdW5jdGlvbikKIHsKLSAg
ICBKU1ZhbHVlT3BlcmFuZCBhcmcxKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwotICAgIEpTVmFsdWVP
cGVyYW5kIGFyZzIodGhpcywgbm9kZS5jaGlsZDIoKSk7CisgICAgSlNWYWx1ZU9wZXJhbmQgYXJn
MSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CisgICAgSlNWYWx1ZU9wZXJhbmQgYXJnMih0aGlzLCBu
b2RlLT5jaGlsZDIoKSk7CiAgICAgR1BSUmVnIGFyZzFHUFIgPSBhcmcxLmdwcigpOwogICAgIEdQ
UlJlZyBhcmcyR1BSID0gYXJnMi5ncHIoKTsKICAgICAKICAgICBKSVRDb21waWxlcjo6SnVtcExp
c3Qgc2xvd1BhdGg7CiAgICAgCi0gICAgaWYgKGlzS25vd25Ob3RJbnRlZ2VyKG5vZGUuY2hpbGQx
KCkuaW5kZXgoKSkgfHwgaXNLbm93bk5vdEludGVnZXIobm9kZS5jaGlsZDIoKS5pbmRleCgpKSkg
eworICAgIGlmIChpc0tub3duTm90SW50ZWdlcihub2RlLT5jaGlsZDEoKS5ub2RlKCkpIHx8IGlz
S25vd25Ob3RJbnRlZ2VyKG5vZGUtPmNoaWxkMigpLm5vZGUoKSkpIHsKICAgICAgICAgR1BSUmVz
dWx0IHJlc3VsdCh0aGlzKTsKICAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIo
KTsKICAgICAKQEAgLTgyNyw3ICs4MjIsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpub25TcGVj
dWxhdGl2ZU5vblBlCiAgICAgICAgIGNhbGxPcGVyYXRpb24oaGVscGVyRnVuY3Rpb24sIHJlc3Vs
dEdQUiwgYXJnMUdQUiwgYXJnMkdQUik7CiAgICAgICAgIAogICAgICAgICBtX2ppdC5vcjMyKFRy
dXN0ZWRJbW0zMihWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKLSAgICAgICAganNWYWx1ZVJlc3Vs
dChyZXN1bHRHUFIsIG1fY29tcGlsZUluZGV4LCBEYXRhRm9ybWF0SlNCb29sZWFuLCBVc2VDaGls
ZHJlbkNhbGxlZEV4cGxpY2l0bHkpOworICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdEdQUiwg
bV9jdXJyZW50Tm9kZSwgRGF0YUZvcm1hdEpTQm9vbGVhbiwgVXNlQ2hpbGRyZW5DYWxsZWRFeHBs
aWNpdGx5KTsKICAgICB9IGVsc2UgewogICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMs
IGFyZzIpOwogICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwpAQCAtODM1
LDI5ICs4MzAsMjggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVOb25QZQog
ICAgICAgICBhcmcxLnVzZSgpOwogICAgICAgICBhcmcyLnVzZSgpOwogICAgIAotICAgICAgICBp
ZiAoIWlzS25vd25JbnRlZ2VyKG5vZGUuY2hpbGQxKCkuaW5kZXgoKSkpCisgICAgICAgIGlmICgh
aXNLbm93bkludGVnZXIobm9kZS0+Y2hpbGQxKCkubm9kZSgpKSkKICAgICAgICAgICAgIHNsb3dQ
YXRoLmFwcGVuZChtX2ppdC5icmFuY2g2NChNYWNyb0Fzc2VtYmxlcjo6QmVsb3csIGFyZzFHUFIs
IEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlcikpOwotICAgICAgICBpZiAoIWlzS25vd25J
bnRlZ2VyKG5vZGUuY2hpbGQyKCkuaW5kZXgoKSkpCisgICAgICAgIGlmICghaXNLbm93bkludGVn
ZXIobm9kZS0+Y2hpbGQyKCkubm9kZSgpKSkKICAgICAgICAgICAgIHNsb3dQYXRoLmFwcGVuZCht
X2ppdC5icmFuY2g2NChNYWNyb0Fzc2VtYmxlcjo6QmVsb3csIGFyZzJHUFIsIEdQUkluZm86OnRh
Z1R5cGVOdW1iZXJSZWdpc3RlcikpOwogICAgIAogICAgICAgICBtX2ppdC5jb21wYXJlMzIoY29u
ZCwgYXJnMUdQUiwgYXJnMkdQUiwgcmVzdWx0R1BSKTsKICAgICAgICAgbV9qaXQub3IzMihUcnVz
dGVkSW1tMzIoVmFsdWVGYWxzZSksIHJlc3VsdEdQUik7CiAgICAgICAgIAotICAgICAgICBpZiAo
IWlzS25vd25JbnRlZ2VyKG5vZGUuY2hpbGQxKCkuaW5kZXgoKSkgfHwgIWlzS25vd25JbnRlZ2Vy
KG5vZGUuY2hpbGQyKCkuaW5kZXgoKSkpIHsKKyAgICAgICAgaWYgKCFpc0tub3duSW50ZWdlcihu
b2RlLT5jaGlsZDEoKS5ub2RlKCkpIHx8ICFpc0tub3duSW50ZWdlcihub2RlLT5jaGlsZDIoKS5u
b2RlKCkpKSB7CiAgICAgICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcihhZG9wdFB0cigKICAg
ICAgICAgICAgICAgICBuZXcgQ29tcGFyZUFuZEJveEJvb2xlYW5TbG93UGF0aEdlbmVyYXRvcjxK
SVRDb21waWxlcjo6SnVtcExpc3Q+KAogICAgICAgICAgICAgICAgICAgICBzbG93UGF0aCwgdGhp
cywgaGVscGVyRnVuY3Rpb24sIHJlc3VsdEdQUiwgYXJnMUdQUiwgYXJnMkdQUikpKTsKICAgICAg
ICAgfQogCi0gICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0R1BSLCBtX2NvbXBpbGVJbmRleCwg
RGF0YUZvcm1hdEpTQm9vbGVhbiwgVXNlQ2hpbGRyZW5DYWxsZWRFeHBsaWNpdGx5KTsKKyAgICAg
ICAganNWYWx1ZVJlc3VsdChyZXN1bHRHUFIsIG1fY3VycmVudE5vZGUsIERhdGFGb3JtYXRKU0Jv
b2xlYW4sIFVzZUNoaWxkcmVuQ2FsbGVkRXhwbGljaXRseSk7CiAgICAgfQogfQogCi12b2lkIFNw
ZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZVBlZXBob2xlU3RyaWN0RXEoTm9kZSYgbm9kZSwg
Tm9kZUluZGV4IGJyYW5jaE5vZGVJbmRleCwgYm9vbCBpbnZlcnQpCit2b2lkIFNwZWN1bGF0aXZl
SklUOjpub25TcGVjdWxhdGl2ZVBlZXBob2xlU3RyaWN0RXEoTm9kZSogbm9kZSwgTm9kZSogYnJh
bmNoTm9kZSwgYm9vbCBpbnZlcnQpCiB7Ci0gICAgTm9kZSYgYnJhbmNoTm9kZSA9IGF0KGJyYW5j
aE5vZGVJbmRleCk7Ci0gICAgQmxvY2tJbmRleCB0YWtlbiA9IGJyYW5jaE5vZGUudGFrZW5CbG9j
a0luZGV4KCk7Ci0gICAgQmxvY2tJbmRleCBub3RUYWtlbiA9IGJyYW5jaE5vZGUubm90VGFrZW5C
bG9ja0luZGV4KCk7CisgICAgQmxvY2tJbmRleCB0YWtlbiA9IGJyYW5jaE5vZGUtPnRha2VuQmxv
Y2tJbmRleCgpOworICAgIEJsb2NrSW5kZXggbm90VGFrZW4gPSBicmFuY2hOb2RlLT5ub3RUYWtl
bkJsb2NrSW5kZXgoKTsKIAogICAgIC8vIFRoZSBicmFuY2ggaW5zdHJ1Y3Rpb24gd2lsbCBicmFu
Y2ggdG8gdGhlIHRha2VuIGJsb2NrLgogICAgIC8vIElmIHRha2VuIGlzIG5leHQsIHN3aXRjaCB0
YWtlbiB3aXRoIG5vdFRha2VuICYgaW52ZXJ0IHRoZSBicmFuY2ggY29uZGl0aW9uIHNvIHdlIGNh
biBmYWxsIHRocm91Z2guCkBAIC04NjgsOCArODYyLDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
bm9uU3BlY3VsYXRpdmVQZWVwaAogICAgICAgICBub3RUYWtlbiA9IHRtcDsKICAgICB9CiAgICAg
Ci0gICAgSlNWYWx1ZU9wZXJhbmQgYXJnMSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKLSAgICBKU1Zh
bHVlT3BlcmFuZCBhcmcyKHRoaXMsIG5vZGUuY2hpbGQyKCkpOworICAgIEpTVmFsdWVPcGVyYW5k
IGFyZzEodGhpcywgbm9kZS0+Y2hpbGQxKCkpOworICAgIEpTVmFsdWVPcGVyYW5kIGFyZzIodGhp
cywgbm9kZS0+Y2hpbGQyKCkpOwogICAgIEdQUlJlZyBhcmcxR1BSID0gYXJnMS5ncHIoKTsKICAg
ICBHUFJSZWcgYXJnMkdQUiA9IGFyZzIuZ3ByKCk7CiAgICAgCkBAIC04NzksNyArODczLDcgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVQZWVwaAogICAgIGFyZzEudXNlKCk7
CiAgICAgYXJnMi51c2UoKTsKICAgICAKLSAgICBpZiAoaXNLbm93bkNlbGwobm9kZS5jaGlsZDEo
KS5pbmRleCgpKSAmJiBpc0tub3duQ2VsbChub2RlLmNoaWxkMigpLmluZGV4KCkpKSB7CisgICAg
aWYgKGlzS25vd25DZWxsKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSkgJiYgaXNLbm93bkNlbGwobm9k
ZS0+Y2hpbGQyKCkubm9kZSgpKSkgewogICAgICAgICAvLyBzZWUgaWYgd2UgZ2V0IGx1Y2t5OiBp
ZiB0aGUgYXJndW1lbnRzIGFyZSBjZWxscyBhbmQgdGhleSByZWZlcmVuY2UgdGhlIHNhbWUKICAg
ICAgICAgLy8gY2VsbCwgdGhlbiB0aGV5IG11c3QgYmUgc3RyaWN0bHkgZXF1YWwuCiAgICAgICAg
IGJyYW5jaDY0KEpJVENvbXBpbGVyOjpFcXVhbCwgYXJnMUdQUiwgYXJnMkdQUiwgaW52ZXJ0ID8g
bm90VGFrZW4gOiB0YWtlbik7CkBAIC05MjAsMTAgKzkxNCwxMCBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpub25TcGVjdWxhdGl2ZVBlZXBoCiAgICAganVtcChub3RUYWtlbik7CiB9CiAKLXZvaWQg
U3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlTm9uUGVlcGhvbGVTdHJpY3RFcShOb2RlJiBu
b2RlLCBib29sIGludmVydCkKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlTm9u
UGVlcGhvbGVTdHJpY3RFcShOb2RlKiBub2RlLCBib29sIGludmVydCkKIHsKLSAgICBKU1ZhbHVl
T3BlcmFuZCBhcmcxKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwotICAgIEpTVmFsdWVPcGVyYW5kIGFy
ZzIodGhpcywgbm9kZS5jaGlsZDIoKSk7CisgICAgSlNWYWx1ZU9wZXJhbmQgYXJnMSh0aGlzLCBu
b2RlLT5jaGlsZDEoKSk7CisgICAgSlNWYWx1ZU9wZXJhbmQgYXJnMih0aGlzLCBub2RlLT5jaGls
ZDIoKSk7CiAgICAgR1BSUmVnIGFyZzFHUFIgPSBhcmcxLmdwcigpOwogICAgIEdQUlJlZyBhcmcy
R1BSID0gYXJnMi5ncHIoKTsKICAgICAKQEAgLTkzMyw3ICs5MjcsNyBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpub25TcGVjdWxhdGl2ZU5vblBlCiAgICAgYXJnMS51c2UoKTsKICAgICBhcmcyLnVz
ZSgpOwogICAgIAotICAgIGlmIChpc0tub3duQ2VsbChub2RlLmNoaWxkMSgpLmluZGV4KCkpICYm
IGlzS25vd25DZWxsKG5vZGUuY2hpbGQyKCkuaW5kZXgoKSkpIHsKKyAgICBpZiAoaXNLbm93bkNl
bGwobm9kZS0+Y2hpbGQxKCkubm9kZSgpKSAmJiBpc0tub3duQ2VsbChub2RlLT5jaGlsZDIoKS5u
b2RlKCkpKSB7CiAgICAgICAgIC8vIHNlZSBpZiB3ZSBnZXQgbHVja3k6IGlmIHRoZSBhcmd1bWVu
dHMgYXJlIGNlbGxzIGFuZCB0aGV5IHJlZmVyZW5jZSB0aGUgc2FtZQogICAgICAgICAvLyBjZWxs
LCB0aGVuIHRoZXkgbXVzdCBiZSBzdHJpY3RseSBlcXVhbC4KICAgICAgICAgLy8gRklYTUU6IHRo
aXMgc2hvdWxkIGZsdXNoIHJlZ2lzdGVycyBpbnN0ZWFkIG9mIHNpbGVudCBzcGlsbC9maWxsLgpA
QCAtOTg2LDM1ICs5ODAsMzUgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVO
b25QZQogICAgICAgICBkb25lLmxpbmsoJm1faml0KTsKICAgICB9CiAgICAgCi0gICAganNWYWx1
ZVJlc3VsdChyZXN1bHRHUFIsIG1fY29tcGlsZUluZGV4LCBEYXRhRm9ybWF0SlNCb29sZWFuLCBV
c2VDaGlsZHJlbkNhbGxlZEV4cGxpY2l0bHkpOworICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0R1BS
LCBtX2N1cnJlbnROb2RlLCBEYXRhRm9ybWF0SlNCb29sZWFuLCBVc2VDaGlsZHJlbkNhbGxlZEV4
cGxpY2l0bHkpOwogfQogCi12b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbChOb2RlJiBub2Rl
KQordm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwoTm9kZSogbm9kZSkKIHsKLSAgICBpZiAo
bm9kZS5vcCgpICE9IENhbGwpCi0gICAgICAgIFJFTEVBU0VfQVNTRVJUKG5vZGUub3AoKSA9PSBD
b25zdHJ1Y3QpOworICAgIGlmIChub2RlLT5vcCgpICE9IENhbGwpCisgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKG5vZGUtPm9wKCkgPT0gQ29uc3RydWN0KTsKIAogICAgIC8vIEZvciBjb25zdHJ1Y3Rv
cnMsIHRoZSB0aGlzIGFyZ3VtZW50IGlzIG5vdCBwYXNzZWQgYnV0IHdlIGhhdmUgdG8gbWFrZSBz
cGFjZQogICAgIC8vIGZvciBpdC4KLSAgICBpbnQgZHVtbXlUaGlzQXJndW1lbnQgPSBub2RlLm9w
KCkgPT0gQ2FsbCA/IDAgOiAxOworICAgIGludCBkdW1teVRoaXNBcmd1bWVudCA9IG5vZGUtPm9w
KCkgPT0gQ2FsbCA/IDAgOiAxOwogICAgIAotICAgIENhbGxMaW5rSW5mbzo6Q2FsbFR5cGUgY2Fs
bFR5cGUgPSBub2RlLm9wKCkgPT0gQ2FsbCA/IENhbGxMaW5rSW5mbzo6Q2FsbCA6IENhbGxMaW5r
SW5mbzo6Q29uc3RydWN0OworICAgIENhbGxMaW5rSW5mbzo6Q2FsbFR5cGUgY2FsbFR5cGUgPSBu
b2RlLT5vcCgpID09IENhbGwgPyBDYWxsTGlua0luZm86OkNhbGwgOiBDYWxsTGlua0luZm86OkNv
bnN0cnVjdDsKICAgICAKLSAgICBFZGdlIGNhbGxlZUVkZ2UgPSBtX2ppdC5ncmFwaCgpLm1fdmFy
QXJnQ2hpbGRyZW5bbm9kZS5maXJzdENoaWxkKCldOworICAgIEVkZ2UgY2FsbGVlRWRnZSA9IG1f
aml0LmdyYXBoKCkubV92YXJBcmdDaGlsZHJlbltub2RlLT5maXJzdENoaWxkKCldOwogICAgIEpT
VmFsdWVPcGVyYW5kIGNhbGxlZSh0aGlzLCBjYWxsZWVFZGdlKTsKICAgICBHUFJSZWcgY2FsbGVl
R1BSID0gY2FsbGVlLmdwcigpOwogICAgIHVzZShjYWxsZWVFZGdlKTsKICAgICAKICAgICAvLyBU
aGUgY2FsbCBpbnN0cnVjdGlvbidzIGZpcnN0IGNoaWxkIGlzIHRoZSBmdW5jdGlvbjsgdGhlIHN1
YnNlcXVlbnQgY2hpbGRyZW4gYXJlIHRoZQogICAgIC8vIGFyZ3VtZW50cy4KLSAgICBpbnQgbnVt
UGFzc2VkQXJncyA9IG5vZGUubnVtQ2hpbGRyZW4oKSAtIDE7CisgICAgaW50IG51bVBhc3NlZEFy
Z3MgPSBub2RlLT5udW1DaGlsZHJlbigpIC0gMTsKICAgICAKICAgICBtX2ppdC5zdG9yZTMyKE1h
Y3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIobnVtUGFzc2VkQXJncyArIGR1bW15VGhpc0FyZ3Vt
ZW50KSwgY2FsbEZyYW1lUGF5bG9hZFNsb3QoSlNTdGFjazo6QXJndW1lbnRDb3VudCkpOwogICAg
IG1faml0LnN0b3JlNjQoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIGNhbGxGcmFtZVNsb3Qo
SlNTdGFjazo6Q2FsbGVyRnJhbWUpKTsKICAgICBtX2ppdC5zdG9yZTY0KGNhbGxlZUdQUiwgY2Fs
bEZyYW1lU2xvdChKU1N0YWNrOjpDYWxsZWUpKTsKICAgICAKICAgICBmb3IgKGludCBpID0gMDsg
aSA8IG51bVBhc3NlZEFyZ3M7IGkrKykgewotICAgICAgICBFZGdlIGFyZ0VkZ2UgPSBtX2ppdC5n
cmFwaCgpLm1fdmFyQXJnQ2hpbGRyZW5bbm9kZS5maXJzdENoaWxkKCkgKyAxICsgaV07CisgICAg
ICAgIEVkZ2UgYXJnRWRnZSA9IG1faml0LmdyYXBoKCkubV92YXJBcmdDaGlsZHJlbltub2RlLT5m
aXJzdENoaWxkKCkgKyAxICsgaV07CiAgICAgICAgIEpTVmFsdWVPcGVyYW5kIGFyZyh0aGlzLCBh
cmdFZGdlKTsKICAgICAgICAgR1BSUmVnIGFyZ0dQUiA9IGFyZy5ncHIoKTsKICAgICAgICAgdXNl
KGFyZ0VkZ2UpOwpAQCAtMTAzMSw3ICsxMDI1LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1p
dENhbGwoTm9kZSYgbm9kZQogICAgIEpJVENvbXBpbGVyOjpKdW1wTGlzdCBzbG93UGF0aDsKIAog
ICAgIENhbGxCZWdpblRva2VuIHRva2VuOwotICAgIG1faml0LmJlZ2luQ2FsbChub2RlLmNvZGVP
cmlnaW4sIHRva2VuKTsKKyAgICBtX2ppdC5iZWdpbkNhbGwobm9kZS0+Y29kZU9yaWdpbiwgdG9r
ZW4pOwogICAgIAogICAgIG1faml0LmFkZFB0cihUcnVzdGVkSW1tMzIobV9qaXQuY29kZUJsb2Nr
KCktPm1fbnVtQ2FsbGVlUmVnaXN0ZXJzICogc2l6ZW9mKFJlZ2lzdGVyKSksIEdQUkluZm86OmNh
bGxGcmFtZVJlZ2lzdGVyKTsKICAgICAKQEAgLTEwNDAsNyArMTAzNCw3IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmVtaXRDYWxsKE5vZGUmIG5vZGUKICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKGNhbGxlZUdQUiwgT0JKRUNUX09GRlNFVE9GKEpTRnVuY3Rpb24sIG1f
c2NvcGUpKSwgcmVzdWx0R1BSKTsKICAgICBtX2ppdC5zdG9yZTY0KHJlc3VsdEdQUiwgTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIHN0YXRpY19jYXN0
PHB0cmRpZmZfdD4oc2l6ZW9mKFJlZ2lzdGVyKSkgKiBKU1N0YWNrOjpTY29wZUNoYWluKSk7CiAK
LSAgICBDb2RlT3JpZ2luIGNvZGVPcmlnaW4gPSBhdChtX2NvbXBpbGVJbmRleCkuY29kZU9yaWdp
bjsKKyAgICBDb2RlT3JpZ2luIGNvZGVPcmlnaW4gPSBtX2N1cnJlbnROb2RlLT5jb2RlT3JpZ2lu
OwogICAgIEpJVENvbXBpbGVyOjpDYWxsIGZhc3RDYWxsID0gbV9qaXQubmVhckNhbGwoKTsKICAg
ICBtX2ppdC5ub3RpZnlDYWxsKGZhc3RDYWxsLCBjb2RlT3JpZ2luLCB0b2tlbik7CiAgICAgCkBA
IC0xMDU3LDM2ICsxMDUxLDM1IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKE5vZGUm
IG5vZGUKICAgICAKICAgICBtX2ppdC5tb3ZlKEdQUkluZm86OnJldHVyblZhbHVlR1BSLCByZXN1
bHRHUFIpOwogICAgIAotICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0R1BSLCBtX2NvbXBpbGVJbmRl
eCwgRGF0YUZvcm1hdEpTLCBVc2VDaGlsZHJlbkNhbGxlZEV4cGxpY2l0bHkpOworICAgIGpzVmFs
dWVSZXN1bHQocmVzdWx0R1BSLCBtX2N1cnJlbnROb2RlLCBEYXRhRm9ybWF0SlMsIFVzZUNoaWxk
cmVuQ2FsbGVkRXhwbGljaXRseSk7CiAgICAgCi0gICAgbV9qaXQuYWRkSlNDYWxsKGZhc3RDYWxs
LCBzbG93Q2FsbCwgdGFyZ2V0VG9DaGVjaywgY2FsbFR5cGUsIGNhbGxlZUdQUiwgYXQobV9jb21w
aWxlSW5kZXgpLmNvZGVPcmlnaW4pOworICAgIG1faml0LmFkZEpTQ2FsbChmYXN0Q2FsbCwgc2xv
d0NhbGwsIHRhcmdldFRvQ2hlY2ssIGNhbGxUeXBlLCBjYWxsZWVHUFIsIG1fY3VycmVudE5vZGUt
PmNvZGVPcmlnaW4pOwogfQogCiB0ZW1wbGF0ZTxib29sIHN0cmljdD4KLUdQUlJlZyBTcGVjdWxh
dGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUludEludGVybmFsKE5vZGVJbmRleCBub2RlSW5kZXgsIERh
dGFGb3JtYXQmIHJldHVybkZvcm1hdCwgU3BlY3VsYXRpb25EaXJlY3Rpb24gZGlyZWN0aW9uKQor
R1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlSW50SW50ZXJuYWwoTm9kZSogbm9k
ZSwgRGF0YUZvcm1hdCYgcmV0dXJuRm9ybWF0LCBTcGVjdWxhdGlvbkRpcmVjdGlvbiBkaXJlY3Rp
b24pCiB7CiAjaWYgREZHX0VOQUJMRShERUJVR19WRVJCT1NFKQotICAgIGRhdGFMb2dGKCJTcGVj
SW50QCVkICAgIiwgbm9kZUluZGV4KTsKKyAgICBkYXRhTG9nRigiU3BlY0ludEAlZCAgICIsIG5v
ZGUtPmluZGV4KCkpOwogI2VuZGlmCi0gICAgU3BlY3VsYXRlZFR5cGUgdHlwZSA9IG1fc3RhdGUu
Zm9yTm9kZShub2RlSW5kZXgpLm1fdHlwZTsKLSAgICBOb2RlJiBub2RlID0gYXQobm9kZUluZGV4
KTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyID0gbm9kZS52aXJ0dWFsUmVn
aXN0ZXIoKTsKKyAgICBTcGVjdWxhdGVkVHlwZSB0eXBlID0gbV9zdGF0ZS5mb3JOb2RlKG5vZGUp
Lm1fdHlwZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyID0gbm9kZS0+dmly
dHVhbFJlZ2lzdGVyKCk7CiAgICAgR2VuZXJhdGlvbkluZm8mIGluZm8gPSBtX2dlbmVyYXRpb25J
bmZvW3ZpcnR1YWxSZWdpc3Rlcl07CiAKICAgICBzd2l0Y2ggKGluZm8ucmVnaXN0ZXJGb3JtYXQo
KSkgewogICAgIGNhc2UgRGF0YUZvcm1hdE5vbmU6IHsKLSAgICAgICAgaWYgKChub2RlLmhhc0Nv
bnN0YW50KCkgJiYgIWlzSW50MzJDb25zdGFudChub2RlSW5kZXgpKSB8fCBpbmZvLnNwaWxsRm9y
bWF0KCkgPT0gRGF0YUZvcm1hdERvdWJsZSkgewotICAgICAgICAgICAgdGVybWluYXRlU3BlY3Vs
YXRpdmVFeGVjdXRpb24oVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgZGlyZWN0
aW9uKTsKKyAgICAgICAgaWYgKChub2RlLT5oYXNDb25zdGFudCgpICYmICFpc0ludDMyQ29uc3Rh
bnQobm9kZSkpIHx8IGluZm8uc3BpbGxGb3JtYXQoKSA9PSBEYXRhRm9ybWF0RG91YmxlKSB7Cisg
ICAgICAgICAgICB0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihVbmNvdW50YWJsZSwgSlNW
YWx1ZVJlZ3MoKSwgMCwgZGlyZWN0aW9uKTsKICAgICAgICAgICAgIHJldHVybkZvcm1hdCA9IERh
dGFGb3JtYXRJbnRlZ2VyOwogICAgICAgICAgICAgcmV0dXJuIGFsbG9jYXRlKCk7CiAgICAgICAg
IH0KICAgICAgICAgCiAgICAgICAgIEdQUlJlZyBncHIgPSBhbGxvY2F0ZSgpOwogCi0gICAgICAg
IGlmIChub2RlLmhhc0NvbnN0YW50KCkpIHsKKyAgICAgICAgaWYgKG5vZGUtPmhhc0NvbnN0YW50
KCkpIHsKICAgICAgICAgICAgIG1fZ3Bycy5yZXRhaW4oZ3ByLCB2aXJ0dWFsUmVnaXN0ZXIsIFNw
aWxsT3JkZXJDb25zdGFudCk7Ci0gICAgICAgICAgICBBU1NFUlQoaXNJbnQzMkNvbnN0YW50KG5v
ZGVJbmRleCkpOwotICAgICAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6SW1tMzIo
dmFsdWVPZkludDMyQ29uc3RhbnQobm9kZUluZGV4KSksIGdwcik7CisgICAgICAgICAgICBBU1NF
UlQoaXNJbnQzMkNvbnN0YW50KG5vZGUpKTsKKyAgICAgICAgICAgIG1faml0Lm1vdmUoTWFjcm9B
c3NlbWJsZXI6OkltbTMyKHZhbHVlT2ZJbnQzMkNvbnN0YW50KG5vZGUpKSwgZ3ByKTsKICAgICAg
ICAgICAgIGluZm8uZmlsbEludGVnZXIoKm1fc3RyZWFtLCBncHIpOwogICAgICAgICAgICAgcmV0
dXJuRm9ybWF0ID0gRGF0YUZvcm1hdEludGVnZXI7CiAgICAgICAgICAgICByZXR1cm4gZ3ByOwpA
QCAtMTEyNyw3ICsxMTIwLDcgQEAgR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRl
SW50SQogICAgICAgICBHUFJSZWcgZ3ByID0gaW5mby5ncHIoKTsKICAgICAgICAgbV9ncHJzLmxv
Y2soZ3ByKTsKICAgICAgICAgaWYgKCFpc0ludDMyU3BlY3VsYXRpb24odHlwZSkpCi0gICAgICAg
ICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKGdwciksIG5vZGVJbmRl
eCwgbV9qaXQuYnJhbmNoNjQoTWFjcm9Bc3NlbWJsZXI6OkJlbG93LCBncHIsIEdQUkluZm86OnRh
Z1R5cGVOdW1iZXJSZWdpc3RlciksIGRpcmVjdGlvbik7CisgICAgICAgICAgICBzcGVjdWxhdGlv
bkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKGdwciksIG5vZGUsIG1faml0LmJyYW5jaDY0KE1h
Y3JvQXNzZW1ibGVyOjpCZWxvdywgZ3ByLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIp
LCBkaXJlY3Rpb24pOwogICAgICAgICBpbmZvLmZpbGxKU1ZhbHVlKCptX3N0cmVhbSwgZ3ByLCBE
YXRhRm9ybWF0SlNJbnRlZ2VyKTsKICAgICAgICAgLy8gSWYgIXN0cmljdCB3ZSdyZSBkb25lLCBy
ZXR1cm4uCiAgICAgICAgIGlmICghc3RyaWN0KSB7CkBAIC0xMTcyLDEwICsxMTY1LDEwIEBAIEdQ
UlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUludEkKIAogICAgIGNhc2UgRGF0YUZv
cm1hdERvdWJsZToKICAgICBjYXNlIERhdGFGb3JtYXRKU0RvdWJsZTogewotICAgICAgICBpZiAo
bm9kZS5oYXNDb25zdGFudCgpICYmIGlzSW50MzJDb25zdGFudChub2RlSW5kZXgpKSB7CisgICAg
ICAgIGlmIChub2RlLT5oYXNDb25zdGFudCgpICYmIGlzSW50MzJDb25zdGFudChub2RlKSkgewog
ICAgICAgICAgICAgR1BSUmVnIGdwciA9IGFsbG9jYXRlKCk7Ci0gICAgICAgICAgICBBU1NFUlQo
aXNJbnQzMkNvbnN0YW50KG5vZGVJbmRleCkpOwotICAgICAgICAgICAgbV9qaXQubW92ZShNYWNy
b0Fzc2VtYmxlcjo6SW1tMzIodmFsdWVPZkludDMyQ29uc3RhbnQobm9kZUluZGV4KSksIGdwcik7
CisgICAgICAgICAgICBBU1NFUlQoaXNJbnQzMkNvbnN0YW50KG5vZGUpKTsKKyAgICAgICAgICAg
IG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OkltbTMyKHZhbHVlT2ZJbnQzMkNvbnN0YW50KG5v
ZGUpKSwgZ3ByKTsKICAgICAgICAgICAgIHJldHVybkZvcm1hdCA9IERhdGFGb3JtYXRJbnRlZ2Vy
OwogICAgICAgICAgICAgcmV0dXJuIGdwcjsKICAgICAgICAgfQpAQCAtMTE4NCw3ICsxMTc3LDcg
QEAgR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlSW50SQogICAgIGNhc2UgRGF0
YUZvcm1hdEJvb2xlYW46CiAgICAgY2FzZSBEYXRhRm9ybWF0SlNDZWxsOgogICAgIGNhc2UgRGF0
YUZvcm1hdEpTQm9vbGVhbjogewotICAgICAgICB0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlv
bihVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBkaXJlY3Rpb24pOworICAgICAg
ICB0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3Mo
KSwgMCwgZGlyZWN0aW9uKTsKICAgICAgICAgcmV0dXJuRm9ybWF0ID0gRGF0YUZvcm1hdEludGVn
ZXI7CiAgICAgICAgIHJldHVybiBhbGxvY2F0ZSgpOwogICAgIH0KQEAgLTExOTgsMzYgKzExOTEs
MzUgQEAgR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlSW50SQogICAgIH0KIH0K
IAotR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlSW50KE5vZGVJbmRleCBub2Rl
SW5kZXgsIERhdGFGb3JtYXQmIHJldHVybkZvcm1hdCwgU3BlY3VsYXRpb25EaXJlY3Rpb24gZGly
ZWN0aW9uKQorR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlSW50KE5vZGUqIG5v
ZGUsIERhdGFGb3JtYXQmIHJldHVybkZvcm1hdCwgU3BlY3VsYXRpb25EaXJlY3Rpb24gZGlyZWN0
aW9uKQogewotICAgIHJldHVybiBmaWxsU3BlY3VsYXRlSW50SW50ZXJuYWw8ZmFsc2U+KG5vZGVJ
bmRleCwgcmV0dXJuRm9ybWF0LCBkaXJlY3Rpb24pOworICAgIHJldHVybiBmaWxsU3BlY3VsYXRl
SW50SW50ZXJuYWw8ZmFsc2U+KG5vZGUsIHJldHVybkZvcm1hdCwgZGlyZWN0aW9uKTsKIH0KIAot
R1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlSW50U3RyaWN0KE5vZGVJbmRleCBu
b2RlSW5kZXgpCitHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVJbnRTdHJpY3Qo
Tm9kZSogbm9kZSkKIHsKICAgICBEYXRhRm9ybWF0IG11c3RCZURhdGFGb3JtYXRJbnRlZ2VyOwot
ICAgIEdQUlJlZyByZXN1bHQgPSBmaWxsU3BlY3VsYXRlSW50SW50ZXJuYWw8dHJ1ZT4obm9kZUlu
ZGV4LCBtdXN0QmVEYXRhRm9ybWF0SW50ZWdlciwgQmFja3dhcmRTcGVjdWxhdGlvbik7CisgICAg
R1BSUmVnIHJlc3VsdCA9IGZpbGxTcGVjdWxhdGVJbnRJbnRlcm5hbDx0cnVlPihub2RlLCBtdXN0
QmVEYXRhRm9ybWF0SW50ZWdlciwgQmFja3dhcmRTcGVjdWxhdGlvbik7CiAgICAgUkVMRUFTRV9B
U1NFUlQobXVzdEJlRGF0YUZvcm1hdEludGVnZXIgPT0gRGF0YUZvcm1hdEludGVnZXIpOwogICAg
IHJldHVybiByZXN1bHQ7CiB9CiAKLUZQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0
ZURvdWJsZShOb2RlSW5kZXggbm9kZUluZGV4LCBTcGVjdWxhdGlvbkRpcmVjdGlvbiBkaXJlY3Rp
b24pCitGUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVEb3VibGUoTm9kZSogbm9k
ZSwgU3BlY3VsYXRpb25EaXJlY3Rpb24gZGlyZWN0aW9uKQogewogI2lmIERGR19FTkFCTEUoREVC
VUdfVkVSQk9TRSkKLSAgICBkYXRhTG9nRigiU3BlY0RvdWJsZUAlZCAgICIsIG5vZGVJbmRleCk7
CisgICAgZGF0YUxvZ0YoIlNwZWNEb3VibGVAJWQgICAiLCBub2RlLT5pbmRleCgpKTsKICNlbmRp
ZgotICAgIFNwZWN1bGF0ZWRUeXBlIHR5cGUgPSBtX3N0YXRlLmZvck5vZGUobm9kZUluZGV4KS5t
X3R5cGU7Ci0gICAgTm9kZSYgbm9kZSA9IGF0KG5vZGVJbmRleCk7Ci0gICAgVmlydHVhbFJlZ2lz
dGVyIHZpcnR1YWxSZWdpc3RlciA9IG5vZGUudmlydHVhbFJlZ2lzdGVyKCk7CisgICAgU3BlY3Vs
YXRlZFR5cGUgdHlwZSA9IG1fc3RhdGUuZm9yTm9kZShub2RlKS5tX3R5cGU7CisgICAgVmlydHVh
bFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciA9IG5vZGUtPnZpcnR1YWxSZWdpc3RlcigpOwogICAg
IEdlbmVyYXRpb25JbmZvJiBpbmZvID0gbV9nZW5lcmF0aW9uSW5mb1t2aXJ0dWFsUmVnaXN0ZXJd
OwogCiAgICAgaWYgKGluZm8ucmVnaXN0ZXJGb3JtYXQoKSA9PSBEYXRhRm9ybWF0Tm9uZSkgewot
ICAgICAgICBpZiAobm9kZS5oYXNDb25zdGFudCgpKSB7CisgICAgICAgIGlmIChub2RlLT5oYXND
b25zdGFudCgpKSB7CiAgICAgICAgICAgICBHUFJSZWcgZ3ByID0gYWxsb2NhdGUoKTsKIAotICAg
ICAgICAgICAgaWYgKGlzSW50MzJDb25zdGFudChub2RlSW5kZXgpKSB7CisgICAgICAgICAgICBp
ZiAoaXNJbnQzMkNvbnN0YW50KG5vZGUpKSB7CiAgICAgICAgICAgICAgICAgRlBSUmVnIGZwciA9
IGZwckFsbG9jYXRlKCk7Ci0gICAgICAgICAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxl
cjo6SW1tNjQocmVpbnRlcnByZXREb3VibGVUb0ludDY0KHN0YXRpY19jYXN0PGRvdWJsZT4odmFs
dWVPZkludDMyQ29uc3RhbnQobm9kZUluZGV4KSkpKSwgZ3ByKTsKKyAgICAgICAgICAgICAgICBt
X2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpJbW02NChyZWludGVycHJldERvdWJsZVRvSW50NjQo
c3RhdGljX2Nhc3Q8ZG91YmxlPih2YWx1ZU9mSW50MzJDb25zdGFudChub2RlKSkpKSwgZ3ByKTsK
ICAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlNjRUb0RvdWJsZShncHIsIGZwcik7CiAgICAgICAg
ICAgICAgICAgdW5sb2NrKGdwcik7CiAKQEAgLTEyMzUsOSArMTIyNyw5IEBAIEZQUlJlZyBTcGVj
dWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZURvdWIKICAgICAgICAgICAgICAgICBpbmZvLmZpbGxE
b3VibGUoKm1fc3RyZWFtLCBmcHIpOwogICAgICAgICAgICAgICAgIHJldHVybiBmcHI7CiAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoaXNOdW1iZXJDb25zdGFudChub2RlSW5kZXgpKSB7
CisgICAgICAgICAgICBpZiAoaXNOdW1iZXJDb25zdGFudChub2RlKSkgewogICAgICAgICAgICAg
ICAgIEZQUlJlZyBmcHIgPSBmcHJBbGxvY2F0ZSgpOwotICAgICAgICAgICAgICAgIG1faml0Lm1v
dmUoTWFjcm9Bc3NlbWJsZXI6OkltbTY0KHJlaW50ZXJwcmV0RG91YmxlVG9JbnQ2NCh2YWx1ZU9m
TnVtYmVyQ29uc3RhbnQobm9kZUluZGV4KSkpLCBncHIpOworICAgICAgICAgICAgICAgIG1faml0
Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OkltbTY0KHJlaW50ZXJwcmV0RG91YmxlVG9JbnQ2NCh2YWx1
ZU9mTnVtYmVyQ29uc3RhbnQobm9kZSkpKSwgZ3ByKTsKICAgICAgICAgICAgICAgICBtX2ppdC5t
b3ZlNjRUb0RvdWJsZShncHIsIGZwcik7CiAgICAgICAgICAgICAgICAgdW5sb2NrKGdwcik7CiAK
QEAgLTEyNDUsNyArMTIzNyw3IEBAIEZQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0
ZURvdWIKICAgICAgICAgICAgICAgICBpbmZvLmZpbGxEb3VibGUoKm1fc3RyZWFtLCBmcHIpOwog
ICAgICAgICAgICAgICAgIHJldHVybiBmcHI7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB0
ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwg
Tm9Ob2RlLCBkaXJlY3Rpb24pOworICAgICAgICAgICAgdGVybWluYXRlU3BlY3VsYXRpdmVFeGVj
dXRpb24oVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIDAsIGRpcmVjdGlvbik7CiAgICAgICAg
ICAgICByZXR1cm4gZnByQWxsb2NhdGUoKTsKICAgICAgICAgfQogICAgICAgICAKQEAgLTEyODgs
NyArMTI4MCw3IEBAIEZQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZURvdWIKICAg
ICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKIAogICAgIGNhc2UgRGF0YUZvcm1h
dENlbGw6Ci0gICAgICAgIHRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKFVuY291bnRhYmxl
LCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIGRpcmVjdGlvbik7CisgICAgICAgIHRlcm1pbmF0ZVNw
ZWN1bGF0aXZlRXhlY3V0aW9uKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCAwLCBkaXJlY3Rp
b24pOwogICAgICAgICByZXR1cm4gZnByQWxsb2NhdGUoKTsKIAogICAgIGNhc2UgRGF0YUZvcm1h
dEpTQ2VsbDoKQEAgLTEzMDIsNyArMTI5NCw3IEBAIEZQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6Zmls
bFNwZWN1bGF0ZURvdWIKICAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgaXNJbnRlZ2VyID0gbV9q
aXQuYnJhbmNoNjQoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwganNWYWx1ZUdwciwgR1BS
SW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKTsKIAogICAgICAgICBpZiAoIWlzTnVtYmVyU3Bl
Y3VsYXRpb24odHlwZSkpCi0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpT
VmFsdWVSZWdzKGpzVmFsdWVHcHIpLCBub2RlSW5kZXgsIG1faml0LmJyYW5jaFRlc3Q2NChNYWNy
b0Fzc2VtYmxlcjo6WmVybywganNWYWx1ZUdwciwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lz
dGVyKSwgZGlyZWN0aW9uKTsKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwg
SlNWYWx1ZVJlZ3MoanNWYWx1ZUdwciksIG5vZGUsIG1faml0LmJyYW5jaFRlc3Q2NChNYWNyb0Fz
c2VtYmxlcjo6WmVybywganNWYWx1ZUdwciwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVy
KSwgZGlyZWN0aW9uKTsKIAogICAgICAgICAvLyBGaXJzdCwgaWYgd2UgZ2V0IGhlcmUgd2UgaGF2
ZSBhIGRvdWJsZSBlbmNvZGVkIGFzIGEgSlNWYWx1ZQogICAgICAgICBtX2ppdC5tb3ZlKGpzVmFs
dWVHcHIsIHRlbXBHcHIpOwpAQCAtMTM2NSwzNCArMTM1NywzMyBAQCBGUFJSZWcgU3BlY3VsYXRp
dmVKSVQ6OmZpbGxTcGVjdWxhdGVEb3ViCiAgICAgfQogfQogCi1HUFJSZWcgU3BlY3VsYXRpdmVK
SVQ6OmZpbGxTcGVjdWxhdGVDZWxsKE5vZGVJbmRleCBub2RlSW5kZXgsIFNwZWN1bGF0aW9uRGly
ZWN0aW9uIGRpcmVjdGlvbikKK0dQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUNl
bGwoTm9kZSogbm9kZSwgU3BlY3VsYXRpb25EaXJlY3Rpb24gZGlyZWN0aW9uKQogewogI2lmIERG
R19FTkFCTEUoREVCVUdfVkVSQk9TRSkKLSAgICBkYXRhTG9nRigiU3BlY0NlbGxAJWQgICAiLCBu
b2RlSW5kZXgpOworICAgIGRhdGFMb2dGKCJTcGVjQ2VsbEAlZCAgICIsIG5vZGUtPmluZGV4KCkp
OwogI2VuZGlmCi0gICAgU3BlY3VsYXRlZFR5cGUgdHlwZSA9IG1fc3RhdGUuZm9yTm9kZShub2Rl
SW5kZXgpLm1fdHlwZTsKLSAgICBOb2RlJiBub2RlID0gYXQobm9kZUluZGV4KTsKLSAgICBWaXJ0
dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyID0gbm9kZS52aXJ0dWFsUmVnaXN0ZXIoKTsKKyAg
ICBTcGVjdWxhdGVkVHlwZSB0eXBlID0gbV9zdGF0ZS5mb3JOb2RlKG5vZGUpLm1fdHlwZTsKKyAg
ICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyID0gbm9kZS0+dmlydHVhbFJlZ2lzdGVy
KCk7CiAgICAgR2VuZXJhdGlvbkluZm8mIGluZm8gPSBtX2dlbmVyYXRpb25JbmZvW3ZpcnR1YWxS
ZWdpc3Rlcl07CiAKICAgICBzd2l0Y2ggKGluZm8ucmVnaXN0ZXJGb3JtYXQoKSkgewogICAgIGNh
c2UgRGF0YUZvcm1hdE5vbmU6IHsKICAgICAgICAgaWYgKGluZm8uc3BpbGxGb3JtYXQoKSA9PSBE
YXRhRm9ybWF0SW50ZWdlciB8fCBpbmZvLnNwaWxsRm9ybWF0KCkgPT0gRGF0YUZvcm1hdERvdWJs
ZSkgewotICAgICAgICAgICAgdGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oVW5jb3VudGFi
bGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgZGlyZWN0aW9uKTsKKyAgICAgICAgICAgIHRlcm1p
bmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCAwLCBk
aXJlY3Rpb24pOwogICAgICAgICAgICAgcmV0dXJuIGFsbG9jYXRlKCk7CiAgICAgICAgIH0KICAg
ICAgICAgCiAgICAgICAgIEdQUlJlZyBncHIgPSBhbGxvY2F0ZSgpOwogCi0gICAgICAgIGlmIChu
b2RlLmhhc0NvbnN0YW50KCkpIHsKLSAgICAgICAgICAgIEpTVmFsdWUganNWYWx1ZSA9IHZhbHVl
T2ZKU0NvbnN0YW50KG5vZGVJbmRleCk7CisgICAgICAgIGlmIChub2RlLT5oYXNDb25zdGFudCgp
KSB7CisgICAgICAgICAgICBKU1ZhbHVlIGpzVmFsdWUgPSB2YWx1ZU9mSlNDb25zdGFudChub2Rl
KTsKICAgICAgICAgICAgIGlmIChqc1ZhbHVlLmlzQ2VsbCgpKSB7CiAgICAgICAgICAgICAgICAg
bV9ncHJzLnJldGFpbihncHIsIHZpcnR1YWxSZWdpc3RlciwgU3BpbGxPcmRlckNvbnN0YW50KTsK
ICAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQo
SlNWYWx1ZTo6ZW5jb2RlKGpzVmFsdWUpKSwgZ3ByKTsKICAgICAgICAgICAgICAgICBpbmZvLmZp
bGxKU1ZhbHVlKCptX3N0cmVhbSwgZ3ByLCBEYXRhRm9ybWF0SlNDZWxsKTsKICAgICAgICAgICAg
ICAgICByZXR1cm4gZ3ByOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgdGVybWluYXRlU3Bl
Y3VsYXRpdmVFeGVjdXRpb24oVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgZGly
ZWN0aW9uKTsKKyAgICAgICAgICAgIHRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKFVuY291
bnRhYmxlLCBKU1ZhbHVlUmVncygpLCAwLCBkaXJlY3Rpb24pOwogICAgICAgICAgICAgcmV0dXJu
IGdwcjsKICAgICAgICAgfQogICAgICAgICBSRUxFQVNFX0FTU0VSVChpbmZvLnNwaWxsRm9ybWF0
KCkgJiBEYXRhRm9ybWF0SlMpOwpAQCAtMTQwMSw3ICsxMzkyLDcgQEAgR1BSUmVnIFNwZWN1bGF0
aXZlSklUOjpmaWxsU3BlY3VsYXRlQ2VsbAogCiAgICAgICAgIGluZm8uZmlsbEpTVmFsdWUoKm1f
c3RyZWFtLCBncHIsIERhdGFGb3JtYXRKUyk7CiAgICAgICAgIGlmICghaXNDZWxsU3BlY3VsYXRp
b24odHlwZSkpCi0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVS
ZWdzKGdwciksIG5vZGVJbmRleCwgbV9qaXQuYnJhbmNoVGVzdDY0KE1hY3JvQXNzZW1ibGVyOjpO
b25aZXJvLCBncHIsIEdQUkluZm86OnRhZ01hc2tSZWdpc3RlciksIGRpcmVjdGlvbik7CisgICAg
ICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKGdwciksIG5vZGUs
IG1faml0LmJyYW5jaFRlc3Q2NChNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgZ3ByLCBHUFJJbmZv
Ojp0YWdNYXNrUmVnaXN0ZXIpLCBkaXJlY3Rpb24pOwogICAgICAgICBpbmZvLmZpbGxKU1ZhbHVl
KCptX3N0cmVhbSwgZ3ByLCBEYXRhRm9ybWF0SlNDZWxsKTsKICAgICAgICAgcmV0dXJuIGdwcjsK
ICAgICB9CkBAIC0xNDE3LDcgKzE0MDgsNyBAQCBHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxT
cGVjdWxhdGVDZWxsCiAgICAgICAgIEdQUlJlZyBncHIgPSBpbmZvLmdwcigpOwogICAgICAgICBt
X2dwcnMubG9jayhncHIpOwogICAgICAgICBpZiAoIWlzQ2VsbFNwZWN1bGF0aW9uKHR5cGUpKQot
ICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyhncHIpLCBu
b2RlSW5kZXgsIG1faml0LmJyYW5jaFRlc3Q2NChNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgZ3By
LCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpLCBkaXJlY3Rpb24pOworICAgICAgICAgICAgc3Bl
Y3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyhncHIpLCBub2RlLCBtX2ppdC5icmFu
Y2hUZXN0NjQoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIGdwciwgR1BSSW5mbzo6dGFnTWFza1Jl
Z2lzdGVyKSwgZGlyZWN0aW9uKTsKICAgICAgICAgaW5mby5maWxsSlNWYWx1ZSgqbV9zdHJlYW0s
IGdwciwgRGF0YUZvcm1hdEpTQ2VsbCk7CiAgICAgICAgIHJldHVybiBncHI7CiAgICAgfQpAQCAt
MTQyOCw3ICsxNDE5LDcgQEAgR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlQ2Vs
bAogICAgIGNhc2UgRGF0YUZvcm1hdERvdWJsZToKICAgICBjYXNlIERhdGFGb3JtYXRKU0Jvb2xl
YW46CiAgICAgY2FzZSBEYXRhRm9ybWF0Qm9vbGVhbjogewotICAgICAgICB0ZXJtaW5hdGVTcGVj
dWxhdGl2ZUV4ZWN1dGlvbihVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBkaXJl
Y3Rpb24pOworICAgICAgICB0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihVbmNvdW50YWJs
ZSwgSlNWYWx1ZVJlZ3MoKSwgMCwgZGlyZWN0aW9uKTsKICAgICAgICAgcmV0dXJuIGFsbG9jYXRl
KCk7CiAgICAgfQogCkBAIC0xNDQxLDM0ICsxNDMyLDMzIEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJ
VDo6ZmlsbFNwZWN1bGF0ZUNlbGwKICAgICB9CiB9CiAKLUdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6
ZmlsbFNwZWN1bGF0ZUJvb2xlYW4oTm9kZUluZGV4IG5vZGVJbmRleCwgU3BlY3VsYXRpb25EaXJl
Y3Rpb24gZGlyZWN0aW9uKQorR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlQm9v
bGVhbihOb2RlKiBub2RlLCBTcGVjdWxhdGlvbkRpcmVjdGlvbiBkaXJlY3Rpb24pCiB7CiAjaWYg
REZHX0VOQUJMRShERUJVR19WRVJCT1NFKQotICAgIGRhdGFMb2dGKCJTcGVjQm9vbEAlZCAgICIs
IG5vZGVJbmRleCk7CisgICAgZGF0YUxvZ0YoIlNwZWNCb29sQCVkICAgIiwgbm9kZS0+aW5kZXgo
KSk7CiAjZW5kaWYKLSAgICBTcGVjdWxhdGVkVHlwZSB0eXBlID0gbV9zdGF0ZS5mb3JOb2RlKG5v
ZGVJbmRleCkubV90eXBlOwotICAgIE5vZGUmIG5vZGUgPSBhdChub2RlSW5kZXgpOwotICAgIFZp
cnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIgPSBub2RlLnZpcnR1YWxSZWdpc3RlcigpOwor
ICAgIFNwZWN1bGF0ZWRUeXBlIHR5cGUgPSBtX3N0YXRlLmZvck5vZGUobm9kZSkubV90eXBlOwor
ICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIgPSBub2RlLT52aXJ0dWFsUmVnaXN0
ZXIoKTsKICAgICBHZW5lcmF0aW9uSW5mbyYgaW5mbyA9IG1fZ2VuZXJhdGlvbkluZm9bdmlydHVh
bFJlZ2lzdGVyXTsKIAogICAgIHN3aXRjaCAoaW5mby5yZWdpc3RlckZvcm1hdCgpKSB7CiAgICAg
Y2FzZSBEYXRhRm9ybWF0Tm9uZTogewogICAgICAgICBpZiAoaW5mby5zcGlsbEZvcm1hdCgpID09
IERhdGFGb3JtYXRJbnRlZ2VyIHx8IGluZm8uc3BpbGxGb3JtYXQoKSA9PSBEYXRhRm9ybWF0RG91
YmxlKSB7Ci0gICAgICAgICAgICB0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihVbmNvdW50
YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBkaXJlY3Rpb24pOworICAgICAgICAgICAgdGVy
bWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIDAs
IGRpcmVjdGlvbik7CiAgICAgICAgICAgICByZXR1cm4gYWxsb2NhdGUoKTsKICAgICAgICAgfQog
ICAgICAgICAKICAgICAgICAgR1BSUmVnIGdwciA9IGFsbG9jYXRlKCk7CiAKLSAgICAgICAgaWYg
KG5vZGUuaGFzQ29uc3RhbnQoKSkgewotICAgICAgICAgICAgSlNWYWx1ZSBqc1ZhbHVlID0gdmFs
dWVPZkpTQ29uc3RhbnQobm9kZUluZGV4KTsKKyAgICAgICAgaWYgKG5vZGUtPmhhc0NvbnN0YW50
KCkpIHsKKyAgICAgICAgICAgIEpTVmFsdWUganNWYWx1ZSA9IHZhbHVlT2ZKU0NvbnN0YW50KG5v
ZGUpOwogICAgICAgICAgICAgaWYgKGpzVmFsdWUuaXNCb29sZWFuKCkpIHsKICAgICAgICAgICAg
ICAgICBtX2dwcnMucmV0YWluKGdwciwgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVyQ29uc3Rh
bnQpOwogICAgICAgICAgICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJ
bW02NChKU1ZhbHVlOjplbmNvZGUoanNWYWx1ZSkpLCBncHIpOwogICAgICAgICAgICAgICAgIGlu
Zm8uZmlsbEpTVmFsdWUoKm1fc3RyZWFtLCBncHIsIERhdGFGb3JtYXRKU0Jvb2xlYW4pOwogICAg
ICAgICAgICAgICAgIHJldHVybiBncHI7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB0ZXJt
aW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9O
b2RlLCBkaXJlY3Rpb24pOworICAgICAgICAgICAgdGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRp
b24oVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIDAsIGRpcmVjdGlvbik7CiAgICAgICAgICAg
ICByZXR1cm4gZ3ByOwogICAgICAgICB9CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGluZm8uc3Bp
bGxGb3JtYXQoKSAmIERhdGFGb3JtYXRKUyk7CkBAIC0xNDc4LDcgKzE0NjgsNyBAQCBHUFJSZWcg
U3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVCb29sCiAgICAgICAgIGluZm8uZmlsbEpTVmFs
dWUoKm1fc3RyZWFtLCBncHIsIERhdGFGb3JtYXRKUyk7CiAgICAgICAgIGlmICghaXNCb29sZWFu
U3BlY3VsYXRpb24odHlwZSkpIHsKICAgICAgICAgICAgIG1faml0LnhvcjY0KFRydXN0ZWRJbW0z
MihzdGF0aWNfY2FzdDxpbnQzMl90PihWYWx1ZUZhbHNlKSksIGdwcik7Ci0gICAgICAgICAgICBz
cGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKGdwciksIG5vZGVJbmRleCwgbV9q
aXQuYnJhbmNoVGVzdDY0KE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCBncHIsIFRydXN0ZWRJbW0z
MihzdGF0aWNfY2FzdDxpbnQzMl90Pih+MSkpKSwgU3BlY3VsYXRpb25SZWNvdmVyeShCb29sZWFu
U3BlY3VsYXRpb25DaGVjaywgZ3ByLCBJbnZhbGlkR1BSUmVnKSwgZGlyZWN0aW9uKTsKKyAgICAg
ICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3MoZ3ByKSwgbm9kZSwg
bV9qaXQuYnJhbmNoVGVzdDY0KE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCBncHIsIFRydXN0ZWRJ
bW0zMihzdGF0aWNfY2FzdDxpbnQzMl90Pih+MSkpKSwgU3BlY3VsYXRpb25SZWNvdmVyeShCb29s
ZWFuU3BlY3VsYXRpb25DaGVjaywgZ3ByLCBJbnZhbGlkR1BSUmVnKSwgZGlyZWN0aW9uKTsKICAg
ICAgICAgICAgIG1faml0LnhvcjY0KFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90PihW
YWx1ZUZhbHNlKSksIGdwcik7CiAgICAgICAgIH0KICAgICAgICAgaW5mby5maWxsSlNWYWx1ZSgq
bV9zdHJlYW0sIGdwciwgRGF0YUZvcm1hdEpTQm9vbGVhbik7CkBAIC0xNDk3LDcgKzE0ODcsNyBA
QCBHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVCb29sCiAgICAgICAgIG1fZ3By
cy5sb2NrKGdwcik7CiAgICAgICAgIGlmICghaXNCb29sZWFuU3BlY3VsYXRpb24odHlwZSkpIHsK
ICAgICAgICAgICAgIG1faml0LnhvcjY0KFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90
PihWYWx1ZUZhbHNlKSksIGdwcik7Ci0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5
cGUsIEpTVmFsdWVSZWdzKGdwciksIG5vZGVJbmRleCwgbV9qaXQuYnJhbmNoVGVzdDY0KE1hY3Jv
QXNzZW1ibGVyOjpOb25aZXJvLCBncHIsIFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90
Pih+MSkpKSwgU3BlY3VsYXRpb25SZWNvdmVyeShCb29sZWFuU3BlY3VsYXRpb25DaGVjaywgZ3By
LCBJbnZhbGlkR1BSUmVnKSwgZGlyZWN0aW9uKTsKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hl
Y2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3MoZ3ByKSwgbm9kZSwgbV9qaXQuYnJhbmNoVGVzdDY0KE1h
Y3JvQXNzZW1ibGVyOjpOb25aZXJvLCBncHIsIFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQz
Ml90Pih+MSkpKSwgU3BlY3VsYXRpb25SZWNvdmVyeShCb29sZWFuU3BlY3VsYXRpb25DaGVjaywg
Z3ByLCBJbnZhbGlkR1BSUmVnKSwgZGlyZWN0aW9uKTsKICAgICAgICAgICAgIG1faml0LnhvcjY0
KFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90PihWYWx1ZUZhbHNlKSksIGdwcik7CiAg
ICAgICAgIH0KICAgICAgICAgaW5mby5maWxsSlNWYWx1ZSgqbV9zdHJlYW0sIGdwciwgRGF0YUZv
cm1hdEpTQm9vbGVhbik7CkBAIC0xNTEwLDcgKzE1MDAsNyBAQCBHUFJSZWcgU3BlY3VsYXRpdmVK
SVQ6OmZpbGxTcGVjdWxhdGVCb29sCiAgICAgY2FzZSBEYXRhRm9ybWF0RG91YmxlOgogICAgIGNh
c2UgRGF0YUZvcm1hdEpTQ2VsbDoKICAgICBjYXNlIERhdGFGb3JtYXRDZWxsOiB7Ci0gICAgICAg
IHRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygp
LCBOb05vZGUsIGRpcmVjdGlvbik7CisgICAgICAgIHRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0
aW9uKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCAwLCBkaXJlY3Rpb24pOwogICAgICAgICBy
ZXR1cm4gYWxsb2NhdGUoKTsKICAgICB9CiAgICAgICAgIApAQCAtMTU0MywyNCArMTUzMywyNCBA
QCBKSVRDb21waWxlcjo6SnVtcCBTcGVjdWxhdGl2ZUpJVDo6Y29udmVyCiAgICAgcmV0dXJuIG5v
dE51bWJlcjsKIH0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU9iamVjdEVxdWFsaXR5
KE5vZGUmIG5vZGUpCit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlT2JqZWN0RXF1YWxpdHko
Tm9kZSogbm9kZSkKIHsKLSAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBvcDEodGhpcywgbm9kZS5j
aGlsZDEoKSk7Ci0gICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgb3AyKHRoaXMsIG5vZGUuY2hpbGQy
KCkpOworICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIG9wMSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7
CisgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgb3AyKHRoaXMsIG5vZGUtPmNoaWxkMigpKTsKICAg
ICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIG9wMSk7CiAgICAgCiAgICAgR1BSUmVnIG9wMUdQ
UiA9IG9wMS5ncHIoKTsKICAgICBHUFJSZWcgb3AyR1BSID0gb3AyLmdwcigpOwogICAgIEdQUlJl
ZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CiAgICAKLSAgICBpZiAobV9qaXQuZ3JhcGgoKS5n
bG9iYWxPYmplY3RGb3Iobm9kZS5jb2RlT3JpZ2luKS0+bWFzcXVlcmFkZXNBc1VuZGVmaW5lZFdh
dGNocG9pbnQoKS0+aXNTdGlsbFZhbGlkKCkpIHsKLSAgICAgICAgbV9qaXQuZ3JhcGgoKS5nbG9i
YWxPYmplY3RGb3Iobm9kZS5jb2RlT3JpZ2luKS0+bWFzcXVlcmFkZXNBc1VuZGVmaW5lZFdhdGNo
cG9pbnQoKS0+YWRkKHNwZWN1bGF0aW9uV2F0Y2hwb2ludCgpKTsgCi0gICAgICAgIHNwZWN1bGF0
aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3Mob3AxR1BSKSwgbm9kZS5jaGlsZDEoKS5pbmRl
eCgpLCAKKyAgICBpZiAobV9qaXQuZ3JhcGgoKS5nbG9iYWxPYmplY3RGb3Iobm9kZS0+Y29kZU9y
aWdpbiktPm1hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50KCktPmlzU3RpbGxWYWxpZCgp
KSB7CisgICAgICAgIG1faml0LmdyYXBoKCkuZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPmNvZGVPcmln
aW4pLT5tYXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2ludCgpLT5hZGQoc3BlY3VsYXRpb25X
YXRjaHBvaW50KCkpOyAKKyAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVl
UmVncyhvcDFHUFIpLCBub2RlLT5jaGlsZDEoKSwKICAgICAgICAgICAgIG1faml0LmJyYW5jaFB0
cigKICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIAogICAgICAgICAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKG9wMUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZz
ZXQoKSksIAogICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1f
aml0Lmdsb2JhbERhdGEoKS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOwotICAgICAgICBzcGVj
dWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKG9wMkdQUiksIG5vZGUuY2hpbGQyKCku
aW5kZXgoKSwgCisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3Mo
b3AyR1BSKSwgbm9kZS0+Y2hpbGQyKCksCiAgICAgICAgICAgICBtX2ppdC5icmFuY2hQdHIoCiAg
ICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCAKICAgICAgICAgICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhvcDJHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkp
LCAKQEAgLTE1NzAsMjQgKzE1NjAsMjQgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU9i
amVjdEVxdWFsaQogICAgICAgICBHUFJSZWcgc3RydWN0dXJlR1BSID0gc3RydWN0dXJlLmdwcigp
OwogCiAgICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mob3AxR1BS
LCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgc3RydWN0dXJlR1BSKTsKLSAgICAgICAgc3Bl
Y3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyhvcDFHUFIpLCBub2RlLmNoaWxkMSgp
LmluZGV4KCksIAorICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdz
KG9wMUdQUiksIG5vZGUtPmNoaWxkMSgpLAogICAgICAgICAgICAgbV9qaXQuYnJhbmNoUHRyKAog
ICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgCiAgICAgICAgICAgICAgICAg
c3RydWN0dXJlR1BSLCAKICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZElt
bVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpKTsKLSAgICAg
ICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyhvcDFHUFIpLCBub2RlLmNo
aWxkMSgpLmluZGV4KCksIAorICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFs
dWVSZWdzKG9wMUdQUiksIG5vZGUtPmNoaWxkMSgpLAogICAgICAgICAgICAgbV9qaXQuYnJhbmNo
VGVzdDgoCiAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIAogICAgICAg
ICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0cnVjdHVyZUdQUiwgU3RydWN0dXJl
Ojp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCAKICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6VHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKSk7CiAKICAgICAgICAgbV9q
aXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhvcDJHUFIsIEpTQ2VsbDo6c3RydWN0
dXJlT2Zmc2V0KCkpLCBzdHJ1Y3R1cmVHUFIpOwotICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJh
ZFR5cGUsIEpTVmFsdWVSZWdzKG9wMkdQUiksIG5vZGUuY2hpbGQyKCkuaW5kZXgoKSwgCisgICAg
ICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3Mob3AyR1BSKSwgbm9kZS0+
Y2hpbGQyKCksCiAgICAgICAgICAgICBtX2ppdC5icmFuY2hQdHIoCiAgICAgICAgICAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCAKICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmVHUFIsIAog
ICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2Jh
bERhdGEoKS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOwotICAgICAgICBzcGVjdWxhdGlvbkNo
ZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKG9wMkdQUiksIG5vZGUuY2hpbGQyKCkuaW5kZXgoKSwg
CisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3Mob3AyR1BSKSwg
bm9kZS0+Y2hpbGQyKCksCiAgICAgICAgICAgICBtX2ppdC5icmFuY2hUZXN0OCgKICAgICAgICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgCiAgICAgICAgICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3Moc3RydWN0dXJlR1BSLCBTdHJ1Y3R1cmU6OnR5cGVJbmZvRmxhZ3NP
ZmZzZXQoKSksIApAQCAtMTYwMSwxMiArMTU5MSwxMSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlT2JqZWN0RXF1YWxpCiAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tMzIoVmFsdWVGYWxz
ZSksIHJlc3VsdEdQUik7CiAgICAgZG9uZS5saW5rKCZtX2ppdCk7CiAKLSAgICBqc1ZhbHVlUmVz
dWx0KHJlc3VsdEdQUiwgbV9jb21waWxlSW5kZXgsIERhdGFGb3JtYXRKU0Jvb2xlYW4pOworICAg
IGpzVmFsdWVSZXN1bHQocmVzdWx0R1BSLCBtX2N1cnJlbnROb2RlLCBEYXRhRm9ybWF0SlNCb29s
ZWFuKTsKIH0KIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU9iamVjdFRvT2JqZWN0T3JP
dGhlckVxdWFsaXR5KEVkZ2UgbGVmdENoaWxkLCBFZGdlIHJpZ2h0Q2hpbGQpCiB7Ci0gICAgTm9k
ZSYgbGVmdE5vZGUgPSBtX2ppdC5ncmFwaCgpW2xlZnRDaGlsZC5pbmRleCgpXTsKICAgICBTcGVj
dWxhdGVDZWxsT3BlcmFuZCBvcDEodGhpcywgbGVmdENoaWxkKTsKICAgICBKU1ZhbHVlT3BlcmFu
ZCBvcDIodGhpcywgcmlnaHRDaGlsZCk7CiAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsK
QEAgLTE2MTUsOSArMTYwNCw5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVPYmplY3RU
b09iamUKICAgICBHUFJSZWcgb3AyR1BSID0gb3AyLmdwcigpOwogICAgIEdQUlJlZyByZXN1bHRH
UFIgPSByZXN1bHQuZ3ByKCk7CiAgICAKLSAgICBpZiAobV9qaXQuZ3JhcGgoKS5nbG9iYWxPYmpl
Y3RGb3IobGVmdE5vZGUuY29kZU9yaWdpbiktPm1hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBv
aW50KCktPmlzU3RpbGxWYWxpZCgpKSB7IAotICAgICAgICBtX2ppdC5ncmFwaCgpLmdsb2JhbE9i
amVjdEZvcihsZWZ0Tm9kZS5jb2RlT3JpZ2luKS0+bWFzcXVlcmFkZXNBc1VuZGVmaW5lZFdhdGNo
cG9pbnQoKS0+YWRkKHNwZWN1bGF0aW9uV2F0Y2hwb2ludCgpKTsKLSAgICAgICAgc3BlY3VsYXRp
b25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyhvcDFHUFIpLCBsZWZ0Q2hpbGQuaW5kZXgoKSwg
CisgICAgaWYgKG1faml0LmdyYXBoKCkuZ2xvYmFsT2JqZWN0Rm9yKG1fY3VycmVudE5vZGUtPmNv
ZGVPcmlnaW4pLT5tYXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2ludCgpLT5pc1N0aWxsVmFs
aWQoKSkgeyAKKyAgICAgICAgbV9qaXQuZ3JhcGgoKS5nbG9iYWxPYmplY3RGb3IobV9jdXJyZW50
Tm9kZS0+Y29kZU9yaWdpbiktPm1hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50KCktPmFk
ZChzcGVjdWxhdGlvbldhdGNocG9pbnQoKSk7CisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFk
VHlwZSwgSlNWYWx1ZVJlZ3Mob3AxR1BSKSwgbGVmdENoaWxkLCAKICAgICAgICAgICAgIG1faml0
LmJyYW5jaFB0cigKICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIAogICAg
ICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKG9wMUdQUiwgSlNDZWxsOjpzdHJ1
Y3R1cmVPZmZzZXQoKSksIApAQCAtMTYyNywxMiArMTYxNiwxMiBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlT2JqZWN0VG9PYmplCiAgICAgICAgIEdQUlJlZyBzdHJ1Y3R1cmVHUFIgPSBz
dHJ1Y3R1cmUuZ3ByKCk7CiAKICAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhvcDFHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBzdHJ1Y3R1cmVHUFIp
OwotICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKG9wMUdQUiks
IGxlZnRDaGlsZC5pbmRleCgpLCAKKyAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBK
U1ZhbHVlUmVncyhvcDFHUFIpLCBsZWZ0Q2hpbGQsIAogICAgICAgICAgICAgbV9qaXQuYnJhbmNo
UHRyKAogICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwKICAgICAgICAgICAg
ICAgICBzdHJ1Y3R1cmVHUFIsCiAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0
ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7Ci0g
ICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3Mob3AxR1BSKSwgbGVm
dENoaWxkLmluZGV4KCksIAorICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFs
dWVSZWdzKG9wMUdQUiksIGxlZnRDaGlsZCwKICAgICAgICAgICAgIG1faml0LmJyYW5jaFRlc3Q4
KAogICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCAKICAgICAgICAgICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdHJ1Y3R1cmVHUFIsIFN0cnVjdHVyZTo6dHlw
ZUluZm9GbGFnc09mZnNldCgpKSwgCkBAIC0xNjQ1LDkgKzE2MzQsOSBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlT2JqZWN0VG9PYmplCiAgICAgICAgIG1faml0LmJyYW5jaFRlc3Q2NChN
YWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgb3AyR1BSLCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIp
OwogICAgIAogICAgIC8vIFdlIGtub3cgdGhhdCB3aXRoaW4gdGhpcyBicmFuY2gsIHJpZ2h0Q2hp
bGQgbXVzdCBiZSBhIGNlbGwuIAotICAgIGlmIChtX2ppdC5ncmFwaCgpLmdsb2JhbE9iamVjdEZv
cihsZWZ0Tm9kZS5jb2RlT3JpZ2luKS0+bWFzcXVlcmFkZXNBc1VuZGVmaW5lZFdhdGNocG9pbnQo
KS0+aXNTdGlsbFZhbGlkKCkpIHsgCi0gICAgICAgIG1faml0LmdyYXBoKCkuZ2xvYmFsT2JqZWN0
Rm9yKGxlZnROb2RlLmNvZGVPcmlnaW4pLT5tYXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2lu
dCgpLT5hZGQoc3BlY3VsYXRpb25XYXRjaHBvaW50KCkpOwotICAgICAgICBzcGVjdWxhdGlvbkNo
ZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKG9wMkdQUiksIHJpZ2h0Q2hpbGQuaW5kZXgoKSwgCisg
ICAgaWYgKG1faml0LmdyYXBoKCkuZ2xvYmFsT2JqZWN0Rm9yKG1fY3VycmVudE5vZGUtPmNvZGVP
cmlnaW4pLT5tYXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2ludCgpLT5pc1N0aWxsVmFsaWQo
KSkgeyAKKyAgICAgICAgbV9qaXQuZ3JhcGgoKS5nbG9iYWxPYmplY3RGb3IobV9jdXJyZW50Tm9k
ZS0+Y29kZU9yaWdpbiktPm1hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50KCktPmFkZChz
cGVjdWxhdGlvbldhdGNocG9pbnQoKSk7CisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlw
ZSwgSlNWYWx1ZVJlZ3Mob3AyR1BSKSwgcmlnaHRDaGlsZCwKICAgICAgICAgICAgIG1faml0LmJy
YW5jaFB0cigKICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIAogICAgICAg
ICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKG9wMkdQUiwgSlNDZWxsOjpzdHJ1Y3R1
cmVPZmZzZXQoKSksIApAQCAtMTY1NywxMiArMTY0NiwxMiBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlT2JqZWN0VG9PYmplCiAgICAgICAgIEdQUlJlZyBzdHJ1Y3R1cmVHUFIgPSBzdHJ1
Y3R1cmUuZ3ByKCk7CiAKICAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhvcDJHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBzdHJ1Y3R1cmVHUFIpOwot
ICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKG9wMkdQUiksIHJp
Z2h0Q2hpbGQuaW5kZXgoKSwgCisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNW
YWx1ZVJlZ3Mob3AyR1BSKSwgcmlnaHRDaGlsZCwKICAgICAgICAgICAgIG1faml0LmJyYW5jaFB0
cigKICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsCiAgICAgICAgICAgICAg
ICAgc3RydWN0dXJlR1BSLAogICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVk
SW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOwotICAg
ICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKG9wMkdQUiksIHJpZ2h0
Q2hpbGQuaW5kZXgoKSwgCisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1
ZVJlZ3Mob3AyR1BSKSwgcmlnaHRDaGlsZCwKICAgICAgICAgICAgIG1faml0LmJyYW5jaFRlc3Q4
KAogICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCAKICAgICAgICAgICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdHJ1Y3R1cmVHUFIsIFN0cnVjdHVyZTo6dHlw
ZUluZm9GbGFnc09mZnNldCgpKSwgCkBAIC0xNjg0LDcgKzE2NzMsNyBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlT2JqZWN0VG9PYmplCiAgICAgICAgIG1faml0LmFuZDY0KE1hY3JvQXNz
ZW1ibGVyOjpUcnVzdGVkSW1tMzIoflRhZ0JpdFVuZGVmaW5lZCksIHJlc3VsdEdQUik7CiAgICAg
ICAgIAogICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAotICAgICAgICAgICAgQmFkVHlwZSwgSlNW
YWx1ZVJlZ3Mob3AyR1BSKSwgcmlnaHRDaGlsZC5pbmRleCgpLAorICAgICAgICAgICAgQmFkVHlw
ZSwgSlNWYWx1ZVJlZ3Mob3AyR1BSKSwgcmlnaHRDaGlsZC5ub2RlKCksCiAgICAgICAgICAgICBt
X2ppdC5icmFuY2g2NCgKICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWws
IHJlc3VsdEdQUiwKICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTY0
KFZhbHVlTnVsbCkpKTsKQEAgLTE2OTcsMTQgKzE2ODYsMTMgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZU9iamVjdFRvT2JqZQogICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbTMyKFZhbHVl
VHJ1ZSksIHJlc3VsdEdQUik7CiAgICAgZG9uZS5saW5rKCZtX2ppdCk7CiAgICAgCi0gICAganNW
YWx1ZVJlc3VsdChyZXN1bHRHUFIsIG1fY29tcGlsZUluZGV4LCBEYXRhRm9ybWF0SlNCb29sZWFu
KTsKKyAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdEdQUiwgbV9jdXJyZW50Tm9kZSwgRGF0YUZvcm1h
dEpTQm9vbGVhbik7CiB9CiAKLXZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQZWVwSG9sZU9i
amVjdFRvT2JqZWN0T3JPdGhlckVxdWFsaXR5KEVkZ2UgbGVmdENoaWxkLCBFZGdlIHJpZ2h0Q2hp
bGQsIE5vZGVJbmRleCBicmFuY2hOb2RlSW5kZXgpCit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlUGVlcEhvbGVPYmplY3RUb09iamVjdE9yT3RoZXJFcXVhbGl0eShFZGdlIGxlZnRDaGlsZCwg
RWRnZSByaWdodENoaWxkLCBOb2RlKiBicmFuY2hOb2RlKQogewotICAgIE5vZGUmIGJyYW5jaE5v
ZGUgPSBhdChicmFuY2hOb2RlSW5kZXgpOwotICAgIEJsb2NrSW5kZXggdGFrZW4gPSBicmFuY2hO
b2RlLnRha2VuQmxvY2tJbmRleCgpOwotICAgIEJsb2NrSW5kZXggbm90VGFrZW4gPSBicmFuY2hO
b2RlLm5vdFRha2VuQmxvY2tJbmRleCgpOworICAgIEJsb2NrSW5kZXggdGFrZW4gPSBicmFuY2hO
b2RlLT50YWtlbkJsb2NrSW5kZXgoKTsKKyAgICBCbG9ja0luZGV4IG5vdFRha2VuID0gYnJhbmNo
Tm9kZS0+bm90VGFrZW5CbG9ja0luZGV4KCk7CiAgICAgCiAgICAgU3BlY3VsYXRlQ2VsbE9wZXJh
bmQgb3AxKHRoaXMsIGxlZnRDaGlsZCk7CiAgICAgSlNWYWx1ZU9wZXJhbmQgb3AyKHRoaXMsIHJp
Z2h0Q2hpbGQpOwpAQCAtMTcxNCw5ICsxNzAyLDkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZVBlZXBIb2xlT2JqZQogICAgIEdQUlJlZyBvcDJHUFIgPSBvcDIuZ3ByKCk7CiAgICAgR1BS
UmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKICAgICAKLSAgICBpZiAobV9qaXQuZ3JhcGgo
KS5nbG9iYWxPYmplY3RGb3IoYnJhbmNoTm9kZS5jb2RlT3JpZ2luKS0+bWFzcXVlcmFkZXNBc1Vu
ZGVmaW5lZFdhdGNocG9pbnQoKS0+aXNTdGlsbFZhbGlkKCkpIHsKLSAgICAgICAgbV9qaXQuZ3Jh
cGgoKS5nbG9iYWxPYmplY3RGb3IoYnJhbmNoTm9kZS5jb2RlT3JpZ2luKS0+bWFzcXVlcmFkZXNB
c1VuZGVmaW5lZFdhdGNocG9pbnQoKS0+YWRkKHNwZWN1bGF0aW9uV2F0Y2hwb2ludCgpKTsKLSAg
ICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyhvcDFHUFIpLCBsZWZ0
Q2hpbGQuaW5kZXgoKSwgCisgICAgaWYgKG1faml0LmdyYXBoKCkuZ2xvYmFsT2JqZWN0Rm9yKG1f
Y3VycmVudE5vZGUtPmNvZGVPcmlnaW4pLT5tYXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2lu
dCgpLT5pc1N0aWxsVmFsaWQoKSkgeworICAgICAgICBtX2ppdC5ncmFwaCgpLmdsb2JhbE9iamVj
dEZvcihtX2N1cnJlbnROb2RlLT5jb2RlT3JpZ2luKS0+bWFzcXVlcmFkZXNBc1VuZGVmaW5lZFdh
dGNocG9pbnQoKS0+YWRkKHNwZWN1bGF0aW9uV2F0Y2hwb2ludCgpKTsKKyAgICAgICAgc3BlY3Vs
YXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyhvcDFHUFIpLCBsZWZ0Q2hpbGQsIAogICAg
ICAgICAgICAgbV9qaXQuYnJhbmNoUHRyKAogICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpFcXVhbCwgCiAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mob3AxR1BS
LCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgCkBAIC0xNzI2LDEyICsxNzE0LDEyIEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQZWVwSG9sZU9iamUKICAgICAgICAgR1BSUmVnIHN0
cnVjdHVyZUdQUiA9IHN0cnVjdHVyZS5ncHIoKTsKIAogICAgICAgICBtX2ppdC5sb2FkUHRyKE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKG9wMUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSks
IHN0cnVjdHVyZUdQUik7Ci0gICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1
ZVJlZ3Mob3AxR1BSKSwgbGVmdENoaWxkLmluZGV4KCksIAorICAgICAgICBzcGVjdWxhdGlvbkNo
ZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKG9wMUdQUiksIGxlZnRDaGlsZCwgCiAgICAgICAgICAg
ICBtX2ppdC5icmFuY2hQdHIoCiAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkVxdWFs
LCAKICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmVHUFIsIAogICAgICAgICAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+c3RyaW5nU3RydWN0
dXJlLmdldCgpKSkpOwotICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVS
ZWdzKG9wMUdQUiksIGxlZnRDaGlsZC5pbmRleCgpLCAKKyAgICAgICAgc3BlY3VsYXRpb25DaGVj
ayhCYWRUeXBlLCBKU1ZhbHVlUmVncyhvcDFHUFIpLCBsZWZ0Q2hpbGQsIAogICAgICAgICAgICAg
bV9qaXQuYnJhbmNoVGVzdDgoCiAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Ok5vblpl
cm8sIAogICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0cnVjdHVyZUdQ
UiwgU3RydWN0dXJlOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCAKQEAgLTE3NDQsOSArMTczMiw5
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQZWVwSG9sZU9iamUKICAgICAgICAgbV9q
aXQuYnJhbmNoVGVzdDY0KE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCBvcDJHUFIsIEdQUkluZm86
OnRhZ01hc2tSZWdpc3Rlcik7CiAgICAgCiAgICAgLy8gV2Uga25vdyB0aGF0IHdpdGhpbiB0aGlz
IGJyYW5jaCwgcmlnaHRDaGlsZCBtdXN0IGJlIGEgY2VsbC4gCi0gICAgaWYgKG1faml0LmdyYXBo
KCkuZ2xvYmFsT2JqZWN0Rm9yKGJyYW5jaE5vZGUuY29kZU9yaWdpbiktPm1hc3F1ZXJhZGVzQXNV
bmRlZmluZWRXYXRjaHBvaW50KCktPmlzU3RpbGxWYWxpZCgpKSB7Ci0gICAgICAgIG1faml0Lmdy
YXBoKCkuZ2xvYmFsT2JqZWN0Rm9yKGJyYW5jaE5vZGUuY29kZU9yaWdpbiktPm1hc3F1ZXJhZGVz
QXNVbmRlZmluZWRXYXRjaHBvaW50KCktPmFkZChzcGVjdWxhdGlvbldhdGNocG9pbnQoKSk7Ci0g
ICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3Mob3AyR1BSKSwgcmln
aHRDaGlsZC5pbmRleCgpLCAKKyAgICBpZiAobV9qaXQuZ3JhcGgoKS5nbG9iYWxPYmplY3RGb3Io
bV9jdXJyZW50Tm9kZS0+Y29kZU9yaWdpbiktPm1hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBv
aW50KCktPmlzU3RpbGxWYWxpZCgpKSB7CisgICAgICAgIG1faml0LmdyYXBoKCkuZ2xvYmFsT2Jq
ZWN0Rm9yKG1fY3VycmVudE5vZGUtPmNvZGVPcmlnaW4pLT5tYXNxdWVyYWRlc0FzVW5kZWZpbmVk
V2F0Y2hwb2ludCgpLT5hZGQoc3BlY3VsYXRpb25XYXRjaHBvaW50KCkpOworICAgICAgICBzcGVj
dWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKG9wMkdQUiksIHJpZ2h0Q2hpbGQsCiAg
ICAgICAgICAgICBtX2ppdC5icmFuY2hQdHIoCiAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6OkVxdWFsLCAKICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhvcDJH
UFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCAKQEAgLTE3NTYsMTIgKzE3NDQsMTIgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVBlZXBIb2xlT2JqZQogICAgICAgICBHUFJSZWcg
c3RydWN0dXJlR1BSID0gc3RydWN0dXJlLmdwcigpOwogCiAgICAgICAgIG1faml0LmxvYWRQdHIo
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mob3AyR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgp
KSwgc3RydWN0dXJlR1BSKTsKLSAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1Zh
bHVlUmVncyhvcDJHUFIpLCByaWdodENoaWxkLmluZGV4KCksIAorICAgICAgICBzcGVjdWxhdGlv
bkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKG9wMkdQUiksIHJpZ2h0Q2hpbGQsCiAgICAgICAg
ICAgICBtX2ppdC5icmFuY2hQdHIoCiAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkVx
dWFsLCAKICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmVHUFIsIAogICAgICAgICAgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+c3RyaW5nU3Ry
dWN0dXJlLmdldCgpKSkpOwotICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFs
dWVSZWdzKG9wMkdQUiksIHJpZ2h0Q2hpbGQuaW5kZXgoKSwgCisgICAgICAgIHNwZWN1bGF0aW9u
Q2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3Mob3AyR1BSKSwgcmlnaHRDaGlsZCwKICAgICAgICAg
ICAgIG1faml0LmJyYW5jaFRlc3Q4KAogICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpO
b25aZXJvLCAKICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdHJ1Y3R1
cmVHUFIsIFN0cnVjdHVyZTo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgCkBAIC0xNzg1LDcgKzE3
NzMsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUGVlcEhvbGVPYmplCiAgICAgICAg
IG1faml0LmFuZDY0KE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoflRhZ0JpdFVuZGVmaW5l
ZCksIHJlc3VsdEdQUik7CiAgICAgICAgIAogICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAotICAg
ICAgICAgICAgQmFkVHlwZSwgSlNWYWx1ZVJlZ3Mob3AyR1BSKSwgcmlnaHRDaGlsZC5pbmRleCgp
LAorICAgICAgICAgICAgQmFkVHlwZSwgSlNWYWx1ZVJlZ3Mob3AyR1BSKSwgcmlnaHRDaGlsZCwK
ICAgICAgICAgICAgIG1faml0LmJyYW5jaDY0KAogICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpOb3RFcXVhbCwgcmVzdWx0R1BSLAogICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpUcnVzdGVkSW1tNjQoVmFsdWVOdWxsKSkpOwpAQCAtMTc5NCwyMyArMTc4MiwyMyBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlUGVlcEhvbGVPYmplCiAgICAganVtcChub3RUYWtlbik7
CiB9CiAKLXZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVJbnRlZ2VyQ29tcGFyZShOb2RlJiBu
b2RlLCBNYWNyb0Fzc2VtYmxlcjo6UmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24pCit2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlSW50ZWdlckNvbXBhcmUoTm9kZSogbm9kZSwgTWFjcm9B
c3NlbWJsZXI6OlJlbGF0aW9uYWxDb25kaXRpb24gY29uZGl0aW9uKQogewotICAgIFNwZWN1bGF0
ZUludGVnZXJPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKLSAgICBTcGVjdWxhdGVJ
bnRlZ2VyT3BlcmFuZCBvcDIodGhpcywgbm9kZS5jaGlsZDIoKSk7CisgICAgU3BlY3VsYXRlSW50
ZWdlck9wZXJhbmQgb3AxKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKKyAgICBTcGVjdWxhdGVJbnRl
Z2VyT3BlcmFuZCBvcDIodGhpcywgbm9kZS0+Y2hpbGQyKCkpOwogICAgIEdQUlRlbXBvcmFyeSBy
ZXN1bHQodGhpcywgb3AxLCBvcDIpOwogICAgIAogICAgIG1faml0LmNvbXBhcmUzMihjb25kaXRp
b24sIG9wMS5ncHIoKSwgb3AyLmdwcigpLCByZXN1bHQuZ3ByKCkpOwogICAgIAogICAgIC8vIElm
IHdlIGFkZCBhIERhdGFGb3JtYXRCb29sLCB3ZSBzaG91bGQgdXNlIGl0IGhlcmUuCiAgICAgbV9q
aXQub3IzMihUcnVzdGVkSW1tMzIoVmFsdWVGYWxzZSksIHJlc3VsdC5ncHIoKSk7Ci0gICAganNW
YWx1ZVJlc3VsdChyZXN1bHQuZ3ByKCksIG1fY29tcGlsZUluZGV4LCBEYXRhRm9ybWF0SlNCb29s
ZWFuKTsKKyAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdC5ncHIoKSwgbV9jdXJyZW50Tm9kZSwgRGF0
YUZvcm1hdEpTQm9vbGVhbik7CiB9CiAKLXZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVEb3Vi
bGVDb21wYXJlKE5vZGUmIG5vZGUsIE1hY3JvQXNzZW1ibGVyOjpEb3VibGVDb25kaXRpb24gY29u
ZGl0aW9uKQordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZURvdWJsZUNvbXBhcmUoTm9kZSog
bm9kZSwgTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUNvbmRpdGlvbiBjb25kaXRpb24pCiB7Ci0gICAg
U3BlY3VsYXRlRG91YmxlT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEoKSk7Ci0gICAgU3Bl
Y3VsYXRlRG91YmxlT3BlcmFuZCBvcDIodGhpcywgbm9kZS5jaGlsZDIoKSk7CisgICAgU3BlY3Vs
YXRlRG91YmxlT3BlcmFuZCBvcDEodGhpcywgbm9kZS0+Y2hpbGQxKCkpOworICAgIFNwZWN1bGF0
ZURvdWJsZU9wZXJhbmQgb3AyKHRoaXMsIG5vZGUtPmNoaWxkMigpKTsKICAgICBHUFJUZW1wb3Jh
cnkgcmVzdWx0KHRoaXMpOwogICAgIAogICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbTMyKFZhbHVl
VHJ1ZSksIHJlc3VsdC5ncHIoKSk7CkBAIC0xODE4LDEzICsxODA2LDEzIEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVEb3VibGVDb21wYXIKICAgICBtX2ppdC54b3I2NChUcnVzdGVkSW1t
MzIodHJ1ZSksIHJlc3VsdC5ncHIoKSk7CiAgICAgdHJ1ZUNhc2UubGluaygmbV9qaXQpOwogICAg
IAotICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0LmdwcigpLCBtX2NvbXBpbGVJbmRleCwgRGF0YUZv
cm1hdEpTQm9vbGVhbik7CisgICAganNWYWx1ZVJlc3VsdChyZXN1bHQuZ3ByKCksIG5vZGUsIERh
dGFGb3JtYXRKU0Jvb2xlYW4pOwogfQogCi12b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlVmFs
dWVBZGQoTm9kZSYgbm9kZSkKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVWYWx1ZUFkZChO
b2RlKiBub2RlKQogewotICAgIEpTVmFsdWVPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSgp
KTsKLSAgICBKU1ZhbHVlT3BlcmFuZCBvcDIodGhpcywgbm9kZS5jaGlsZDIoKSk7CisgICAgSlNW
YWx1ZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKKyAgICBKU1ZhbHVlT3BlcmFu
ZCBvcDIodGhpcywgbm9kZS0+Y2hpbGQyKCkpOwogICAgIAogICAgIEdQUlJlZyBvcDFHUFIgPSBv
cDEuZ3ByKCk7CiAgICAgR1BSUmVnIG9wMkdQUiA9IG9wMi5ncHIoKTsKQEAgLTE4MzIsMTIgKzE4
MjAsMTIgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVZhbHVlQWRkKE5vZAogICAgIGZs
dXNoUmVnaXN0ZXJzKCk7CiAgICAgCiAgICAgR1BSUmVzdWx0IHJlc3VsdCh0aGlzKTsKLSAgICBp
ZiAoaXNLbm93bk5vdE51bWJlcihub2RlLmNoaWxkMSgpLmluZGV4KCkpIHx8IGlzS25vd25Ob3RO
dW1iZXIobm9kZS5jaGlsZDIoKS5pbmRleCgpKSkKKyAgICBpZiAoaXNLbm93bk5vdE51bWJlcihu
b2RlLT5jaGlsZDEoKS5ub2RlKCkpIHx8IGlzS25vd25Ob3ROdW1iZXIobm9kZS0+Y2hpbGQyKCku
bm9kZSgpKSkKICAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25WYWx1ZUFkZE5vdE51bWJl
ciwgcmVzdWx0LmdwcigpLCBvcDFHUFIsIG9wMkdQUik7CiAgICAgZWxzZQogICAgICAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvblZhbHVlQWRkLCByZXN1bHQuZ3ByKCksIG9wMUdQUiwgb3AyR1BS
KTsKICAgICAKLSAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdC5ncHIoKSwgbV9jb21waWxlSW5kZXgp
OworICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0LmdwcigpLCBub2RlKTsKIH0KIAogdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZU5vblN0cmluZ0NlbGxPck90aGVyTG9naWNhbE5vdChFZGdlIG5v
ZGVVc2UsIGJvb2wgbmVlZFNwZWN1bGF0aW9uQ2hlY2spCkBAIC0xODQ4LDggKzE4MzYsOCBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlTm9uU3RyaW5nQ2VsCiAgICAgR1BSUmVnIHJlc3Vs
dEdQUiA9IHJlc3VsdC5ncHIoKTsKICAgICAKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBub3RD
ZWxsID0gbV9qaXQuYnJhbmNoVGVzdDY0KE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCB2YWx1ZUdQ
UiwgR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKTsKLSAgICBpZiAobV9qaXQuZ3JhcGgoKS5nbG9i
YWxPYmplY3RGb3IobV9qaXQuZ3JhcGgoKVtub2RlVXNlLmluZGV4KCldLmNvZGVPcmlnaW4pLT5t
YXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2ludCgpLT5pc1N0aWxsVmFsaWQoKSkgewotICAg
ICAgICBtX2ppdC5ncmFwaCgpLmdsb2JhbE9iamVjdEZvcihtX2ppdC5ncmFwaCgpW25vZGVVc2Uu
aW5kZXgoKV0uY29kZU9yaWdpbiktPm1hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50KCkt
PmFkZChzcGVjdWxhdGlvbldhdGNocG9pbnQoKSk7CisgICAgaWYgKG1faml0LmdyYXBoKCkuZ2xv
YmFsT2JqZWN0Rm9yKG1fY3VycmVudE5vZGUtPmNvZGVPcmlnaW4pLT5tYXNxdWVyYWRlc0FzVW5k
ZWZpbmVkV2F0Y2hwb2ludCgpLT5pc1N0aWxsVmFsaWQoKSkgeworICAgICAgICBtX2ppdC5ncmFw
aCgpLmdsb2JhbE9iamVjdEZvcihtX2N1cnJlbnROb2RlLT5jb2RlT3JpZ2luKS0+bWFzcXVlcmFk
ZXNBc1VuZGVmaW5lZFdhdGNocG9pbnQoKS0+YWRkKHNwZWN1bGF0aW9uV2F0Y2hwb2ludCgpKTsK
IAogICAgICAgICBpZiAobmVlZFNwZWN1bGF0aW9uQ2hlY2spIHsKICAgICAgICAgICAgIHNwZWN1
bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCBub2RlVXNlLApAQCAt
MTg4Miw3ICsxODcwLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU5vblN0cmluZ0Nl
bAogICAgICAgICAgICAgbV9qaXQuYnJhbmNoUHRyKAogICAgICAgICAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpFcXVhbCwgCiAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
c3RydWN0dXJlR1BSLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgCi0gICAgICAg
ICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ3JhcGgoKS5nbG9i
YWxPYmplY3RGb3IobV9qaXQuZ3JhcGgoKVtub2RlVXNlLmluZGV4KCldLmNvZGVPcmlnaW4pKSkp
OworICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdy
YXBoKCkuZ2xvYmFsT2JqZWN0Rm9yKG1fY3VycmVudE5vZGUtPmNvZGVPcmlnaW4pKSkpOwogCiAg
ICAgICAgIGlzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKCZtX2ppdCk7CiAgICAgfQpA
QCAtMTkwNCw2MyArMTg5Miw2MyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlTm9uU3Ry
aW5nQ2VsCiAgICAgCiAgICAgZG9uZS5saW5rKCZtX2ppdCk7CiAgICAgCi0gICAganNWYWx1ZVJl
c3VsdChyZXN1bHRHUFIsIG1fY29tcGlsZUluZGV4LCBEYXRhRm9ybWF0SlNCb29sZWFuKTsKKyAg
ICBqc1ZhbHVlUmVzdWx0KHJlc3VsdEdQUiwgbV9jdXJyZW50Tm9kZSwgRGF0YUZvcm1hdEpTQm9v
bGVhbik7CiB9CiAKLXZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVMb2dpY2FsTm90KE5vZGUm
IG5vZGUpCit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlTG9naWNhbE5vdChOb2RlKiBub2Rl
KQogewotICAgIGlmIChhdChub2RlLmNoaWxkMSgpKS5zaG91bGRTcGVjdWxhdGVOb25TdHJpbmdD
ZWxsT3JPdGhlcigpKSB7Ci0gICAgICAgIGNvbXBpbGVOb25TdHJpbmdDZWxsT3JPdGhlckxvZ2lj
YWxOb3Qobm9kZS5jaGlsZDEoKSwKLSAgICAgICAgICAgICFpc05vblN0cmluZ0NlbGxPck90aGVy
U3BlY3VsYXRpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpOworICAg
IGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlTm9uU3RyaW5nQ2VsbE9yT3RoZXIo
KSkgeworICAgICAgICBjb21waWxlTm9uU3RyaW5nQ2VsbE9yT3RoZXJMb2dpY2FsTm90KG5vZGUt
PmNoaWxkMSgpLAorICAgICAgICAgICAgIWlzTm9uU3RyaW5nQ2VsbE9yT3RoZXJTcGVjdWxhdGlv
bihtX3N0YXRlLmZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fdHlwZSkpOwogICAgICAgICByZXR1
cm47CiAgICAgfQotICAgIGlmIChhdChub2RlLmNoaWxkMSgpKS5zaG91bGRTcGVjdWxhdGVJbnRl
Z2VyKCkpIHsKLSAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgdmFsdWUodGhpcywgbm9k
ZS5jaGlsZDEoKSk7CisgICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVJbnRl
Z2VyKCkpIHsKKyAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgdmFsdWUodGhpcywgbm9k
ZS0+Y2hpbGQxKCkpOwogICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIHZhbHVlKTsK
ICAgICAgICAgbV9qaXQuY29tcGFyZTMyKE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgdmFsdWUuZ3By
KCksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoMCksIHJlc3VsdC5ncHIoKSk7CiAgICAg
ICAgIG1faml0Lm9yMzIoVHJ1c3RlZEltbTMyKFZhbHVlRmFsc2UpLCByZXN1bHQuZ3ByKCkpOwot
ICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdC5ncHIoKSwgbV9jb21waWxlSW5kZXgsIERhdGFG
b3JtYXRKU0Jvb2xlYW4pOworICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdC5ncHIoKSwgbm9k
ZSwgRGF0YUZvcm1hdEpTQm9vbGVhbik7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgaWYg
KGF0KG5vZGUuY2hpbGQxKCkpLnNob3VsZFNwZWN1bGF0ZU51bWJlcigpKSB7Ci0gICAgICAgIFNw
ZWN1bGF0ZURvdWJsZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS5jaGlsZDEoKSk7CisgICAgaWYg
KG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVOdW1iZXIoKSkgeworICAgICAgICBTcGVj
dWxhdGVEb3VibGVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAg
RlBSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7CiAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQo
dGhpcyk7CiAgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbTMyKFZhbHVlRmFsc2UpLCByZXN1
bHQuZ3ByKCkpOwogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBub25aZXJvID0gbV9qaXQu
YnJhbmNoRG91YmxlTm9uWmVybyh2YWx1ZS5mcHIoKSwgc2NyYXRjaC5mcHIoKSk7CiAgICAgICAg
IG1faml0LnhvcjMyKFRydXN0ZWRJbW0zMih0cnVlKSwgcmVzdWx0LmdwcigpKTsKICAgICAgICAg
bm9uWmVyby5saW5rKCZtX2ppdCk7Ci0gICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0Lmdwcigp
LCBtX2NvbXBpbGVJbmRleCwgRGF0YUZvcm1hdEpTQm9vbGVhbik7CisgICAgICAgIGpzVmFsdWVS
ZXN1bHQocmVzdWx0LmdwcigpLCBub2RlLCBEYXRhRm9ybWF0SlNCb29sZWFuKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KICAgICAKLSAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uID0gYXQo
bm9kZS5jaGlsZDEoKSkucHJlZGljdGlvbigpOworICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rp
b24gPSBub2RlLT5jaGlsZDEoKS0+cHJlZGljdGlvbigpOwogICAgIGlmIChpc0Jvb2xlYW5TcGVj
dWxhdGlvbihwcmVkaWN0aW9uKSkgewotICAgICAgICBpZiAoaXNCb29sZWFuU3BlY3VsYXRpb24o
bV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpIHsKLSAgICAgICAgICAgIFNw
ZWN1bGF0ZUJvb2xlYW5PcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOworICAgICAg
ICBpZiAoaXNCb29sZWFuU3BlY3VsYXRpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUtPmNoaWxkMSgp
KS5tX3R5cGUpKSB7CisgICAgICAgICAgICBTcGVjdWxhdGVCb29sZWFuT3BlcmFuZCB2YWx1ZSh0
aGlzLCBub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRo
aXMsIHZhbHVlKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgbV9qaXQubW92ZSh2YWx1ZS5n
cHIoKSwgcmVzdWx0LmdwcigpKTsKICAgICAgICAgICAgIG1faml0LnhvcjY0KFRydXN0ZWRJbW0z
Mih0cnVlKSwgcmVzdWx0LmdwcigpKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAganNWYWx1
ZVJlc3VsdChyZXN1bHQuZ3ByKCksIG1fY29tcGlsZUluZGV4LCBEYXRhRm9ybWF0SlNCb29sZWFu
KTsKKyAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0LmdwcigpLCBub2RlLCBEYXRhRm9y
bWF0SlNCb29sZWFuKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICAK
LSAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS5jaGlsZDEoKSk7CisgICAg
ICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAg
R1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsgLy8gRklYTUU6IFdlIGNvdWxkIHJldXNlLCBidXQg
b24gc3BlY3VsYXRpb24gZmFpbCB3b3VsZCBuZWVkIHJlY292ZXJ5IHRvIHJlc3RvcmUgdGFnIChh
a2luIHRvIGFkZCkuCiAgICAgICAgIAogICAgICAgICBtX2ppdC5tb3ZlKHZhbHVlLmdwcigpLCBy
ZXN1bHQuZ3ByKCkpOwogICAgICAgICBtX2ppdC54b3I2NChUcnVzdGVkSW1tMzIoc3RhdGljX2Nh
c3Q8aW50MzJfdD4oVmFsdWVGYWxzZSkpLCByZXN1bHQuZ3ByKCkpOwotICAgICAgICBzcGVjdWxh
dGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKHZhbHVlLmdwcigpKSwgbm9kZS5jaGlsZDEo
KSwgbV9qaXQuYnJhbmNoVGVzdDY0KEpJVENvbXBpbGVyOjpOb25aZXJvLCByZXN1bHQuZ3ByKCks
IFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90Pih+MSkpKSk7CisgICAgICAgIHNwZWN1
bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3ModmFsdWUuZ3ByKCkpLCBub2RlLT5jaGls
ZDEoKSwgbV9qaXQuYnJhbmNoVGVzdDY0KEpJVENvbXBpbGVyOjpOb25aZXJvLCByZXN1bHQuZ3By
KCksIFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90Pih+MSkpKSk7CiAgICAgICAgIG1f
aml0LnhvcjY0KFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90PihWYWx1ZVRydWUpKSwg
cmVzdWx0LmdwcigpKTsKICAgICAgICAgCiAgICAgICAgIC8vIElmIHdlIGFkZCBhIERhdGFGb3Jt
YXRCb29sLCB3ZSBzaG91bGQgdXNlIGl0IGhlcmUuCi0gICAgICAgIGpzVmFsdWVSZXN1bHQocmVz
dWx0LmdwcigpLCBtX2NvbXBpbGVJbmRleCwgRGF0YUZvcm1hdEpTQm9vbGVhbik7CisgICAgICAg
IGpzVmFsdWVSZXN1bHQocmVzdWx0LmdwcigpLCBub2RlLCBEYXRhRm9ybWF0SlNCb29sZWFuKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKLSAgICBKU1ZhbHVlT3BlcmFuZCBhcmcxKHRo
aXMsIG5vZGUuY2hpbGQxKCkpOworICAgIEpTVmFsdWVPcGVyYW5kIGFyZzEodGhpcywgbm9kZS0+
Y2hpbGQxKCkpOwogICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CiAgICAgCiAgICAgR1BS
UmVnIGFyZzFHUFIgPSBhcmcxLmdwcigpOwpAQCAtMTk3Niw3ICsxOTY0LDcgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZUxvZ2ljYWxOb3QoTgogICAgICAgICBzbG93UGF0aENhbGwoc2xv
d0Nhc2UsIHRoaXMsIGRmZ0NvbnZlcnRKU1ZhbHVlVG9Cb29sZWFuLCByZXN1bHRHUFIsIGFyZzFH
UFIpKTsKICAgICAKICAgICBtX2ppdC54b3I2NChUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50
MzJfdD4oVmFsdWVUcnVlKSksIHJlc3VsdEdQUik7Ci0gICAganNWYWx1ZVJlc3VsdChyZXN1bHRH
UFIsIG1fY29tcGlsZUluZGV4LCBEYXRhRm9ybWF0SlNCb29sZWFuLCBVc2VDaGlsZHJlbkNhbGxl
ZEV4cGxpY2l0bHkpOworICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0R1BSLCBub2RlLCBEYXRhRm9y
bWF0SlNCb29sZWFuLCBVc2VDaGlsZHJlbkNhbGxlZEV4cGxpY2l0bHkpOwogfQogCiB2b2lkIFNw
ZWN1bGF0aXZlSklUOjplbWl0Tm9uU3RyaW5nQ2VsbE9yT3RoZXJCcmFuY2goRWRnZSBub2RlVXNl
LCBCbG9ja0luZGV4IHRha2VuLCBCbG9ja0luZGV4IG5vdFRha2VuLCBib29sIG5lZWRTcGVjdWxh
dGlvbkNoZWNrKQpAQCAtMTk4NywxMSArMTk3NSwxMSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpl
bWl0Tm9uU3RyaW5nQ2VsbE9yCiAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigp
OwogICAgIAogICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG5vdENlbGwgPSBtX2ppdC5icmFuY2hU
ZXN0NjQoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIHZhbHVlR1BSLCBHUFJJbmZvOjp0YWdNYXNr
UmVnaXN0ZXIpOwotICAgIGlmIChtX2ppdC5ncmFwaCgpLmdsb2JhbE9iamVjdEZvcihtX2ppdC5n
cmFwaCgpW25vZGVVc2UuaW5kZXgoKV0uY29kZU9yaWdpbiktPm1hc3F1ZXJhZGVzQXNVbmRlZmlu
ZWRXYXRjaHBvaW50KCktPmlzU3RpbGxWYWxpZCgpKSB7Ci0gICAgICAgIG1faml0LmdyYXBoKCku
Z2xvYmFsT2JqZWN0Rm9yKG1faml0LmdyYXBoKClbbm9kZVVzZS5pbmRleCgpXS5jb2RlT3JpZ2lu
KS0+bWFzcXVlcmFkZXNBc1VuZGVmaW5lZFdhdGNocG9pbnQoKS0+YWRkKHNwZWN1bGF0aW9uV2F0
Y2hwb2ludCgpKTsKKyAgICBpZiAobV9qaXQuZ3JhcGgoKS5nbG9iYWxPYmplY3RGb3IobV9jdXJy
ZW50Tm9kZS0+Y29kZU9yaWdpbiktPm1hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50KCkt
PmlzU3RpbGxWYWxpZCgpKSB7CisgICAgICAgIG1faml0LmdyYXBoKCkuZ2xvYmFsT2JqZWN0Rm9y
KG1fY3VycmVudE5vZGUtPmNvZGVPcmlnaW4pLT5tYXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hw
b2ludCgpLT5hZGQoc3BlY3VsYXRpb25XYXRjaHBvaW50KCkpOwogCiAgICAgICAgIGlmIChuZWVk
U3BlY3VsYXRpb25DaGVjaykgewotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBl
LCBKU1ZhbHVlUmVncyh2YWx1ZUdQUiksIG5vZGVVc2UuaW5kZXgoKSwgCisgICAgICAgICAgICBz
cGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwgbm9kZVVzZSwK
ICAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2hQdHIoCiAgICAgICAgICAgICAgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpFcXVhbCwgCiAgICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKHZhbHVlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwKQEAgLTIwMDEs
NyArMTk4OSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXROb25TdHJpbmdDZWxsT3IKICAg
ICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyh2YWx1ZUdQUiwgSlND
ZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOwogCiAgICAgICAgIGlmIChuZWVk
U3BlY3VsYXRpb25DaGVjaykgewotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBl
LCBKU1ZhbHVlUmVncyh2YWx1ZUdQUiksIG5vZGVVc2UuaW5kZXgoKSwgCisgICAgICAgICAgICBz
cGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwgbm9kZVVzZSwK
ICAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2hQdHIoCiAgICAgICAgICAgICAgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpFcXVhbCwgCiAgICAgICAgICAgICAgICAgICAgIHNjcmF0Y2hHUFIsCkBA
IC0yMDEwLDExICsxOTk4LDExIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXROb25TdHJpbmdD
ZWxsT3IKIAogICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBpc05vdE1hc3F1ZXJhZGVzQXNVbmRl
ZmluZWQgPSBtX2ppdC5icmFuY2hUZXN0OChKSVRDb21waWxlcjo6WmVybywgTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3Moc2NyYXRjaEdQUiwgU3RydWN0dXJlOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkp
LCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpOwogCi0gICAgICAgIHNwZWN1
bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCBub2RlVXNlLmluZGV4
KCksIAorICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKHZhbHVl
R1BSKSwgbm9kZVVzZSwKICAgICAgICAgICAgIG1faml0LmJyYW5jaFB0cigKICAgICAgICAgICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIAogICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkp
LCAKLSAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5n
cmFwaCgpLmdsb2JhbE9iamVjdEZvcihtX2ppdC5ncmFwaCgpW25vZGVVc2UuaW5kZXgoKV0uY29k
ZU9yaWdpbikpKSk7CisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1Q
dHIobV9qaXQuZ3JhcGgoKS5nbG9iYWxPYmplY3RGb3IobV9jdXJyZW50Tm9kZS0+Y29kZU9yaWdp
bikpKSk7CiAKICAgICAgICAgaXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsoJm1faml0
KTsKICAgICB9CkBAIC0yMDI1LDIzICsyMDEzLDI2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVt
aXROb25TdHJpbmdDZWxsT3IKICAgICBpZiAobmVlZFNwZWN1bGF0aW9uQ2hlY2spIHsKICAgICAg
ICAgbV9qaXQubW92ZSh2YWx1ZUdQUiwgc2NyYXRjaEdQUik7CiAgICAgICAgIG1faml0LmFuZDY0
KE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoflRhZ0JpdFVuZGVmaW5lZCksIHNjcmF0Y2hH
UFIpOwotICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKHZhbHVl
R1BSKSwgbm9kZVVzZS5pbmRleCgpLCBtX2ppdC5icmFuY2g2NChNYWNyb0Fzc2VtYmxlcjo6Tm90
RXF1YWwsIHNjcmF0Y2hHUFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQoVmFsdWVOdWxs
KSkpOworICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKHZhbHVl
R1BSKSwgbm9kZVVzZSwgbV9qaXQuYnJhbmNoNjQoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBz
Y3JhdGNoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTY0KFZhbHVlTnVsbCkpKTsKICAg
ICB9CiAgICAganVtcChub3RUYWtlbik7CiAgICAgCi0gICAgbm9SZXN1bHQobV9jb21waWxlSW5k
ZXgpOworICAgIG5vUmVzdWx0KG1fY3VycmVudE5vZGUpOwogfQogCi12b2lkIFNwZWN1bGF0aXZl
SklUOjplbWl0QnJhbmNoKE5vZGUmIG5vZGUpCit2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0QnJh
bmNoKE5vZGUqIG5vZGUpCiB7Ci0gICAgQmxvY2tJbmRleCB0YWtlbiA9IG5vZGUudGFrZW5CbG9j
a0luZGV4KCk7Ci0gICAgQmxvY2tJbmRleCBub3RUYWtlbiA9IG5vZGUubm90VGFrZW5CbG9ja0lu
ZGV4KCk7CisgICAgQmxvY2tJbmRleCB0YWtlbiA9IG5vZGUtPnRha2VuQmxvY2tJbmRleCgpOwor
ICAgIEJsb2NrSW5kZXggbm90VGFrZW4gPSBub2RlLT5ub3RUYWtlbkJsb2NrSW5kZXgoKTsKKyAg
ICAKKyAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZU5vblN0cmluZ0NlbGxP
ck90aGVyKCkpIHsKKyAgICAgICAgZW1pdE5vblN0cmluZ0NlbGxPck90aGVyQnJhbmNoKG5vZGUt
PmNoaWxkMSgpLCB0YWtlbiwgbm90VGFrZW4sIAorICAgICAgICAgICAgIWlzTm9uU3RyaW5nQ2Vs
bE9yT3RoZXJTcGVjdWxhdGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fdHlw
ZSkpOworICAgICAgICByZXR1cm47CisgICAgfQogICAgIAotICAgIGlmIChhdChub2RlLmNoaWxk
MSgpKS5zaG91bGRTcGVjdWxhdGVOb25TdHJpbmdDZWxsT3JPdGhlcigpKSB7Ci0gICAgICAgIGVt
aXROb25TdHJpbmdDZWxsT3JPdGhlckJyYW5jaChub2RlLmNoaWxkMSgpLCB0YWtlbiwgbm90VGFr
ZW4sIAotICAgICAgICAgICAgIWlzTm9uU3RyaW5nQ2VsbE9yT3RoZXJTcGVjdWxhdGlvbihtX3N0
YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSk7Ci0gICAgfSBlbHNlIGlmIChhdChu
b2RlLmNoaWxkMSgpKS5zaG91bGRTcGVjdWxhdGVOdW1iZXIoKSkgewotICAgICAgICBpZiAoYXQo
bm9kZS5jaGlsZDEoKSkuc2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKSB7CisgICAgaWYgKG5vZGUt
PmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVOdW1iZXIoKSkgeworICAgICAgICBpZiAobm9kZS0+
Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKSkgewogICAgICAgICAgICAgYm9vbCBp
bnZlcnQgPSBmYWxzZTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKHRha2VuID09IG5l
eHRCbG9jaygpKSB7CkBAIC0yMDUxLDE0NyArMjA0MiwxNDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6ZW1pdEJyYW5jaChOb2RlJiBubwogICAgICAgICAgICAgICAgIG5vdFRha2VuID0gdG1wOwog
ICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCB2YWx1
ZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKKyAgICAgICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVy
YW5kIHZhbHVlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgICAgIGJyYW5jaFRlc3Qz
MihpbnZlcnQgPyBNYWNyb0Fzc2VtYmxlcjo6WmVybyA6IE1hY3JvQXNzZW1ibGVyOjpOb25aZXJv
LCB2YWx1ZS5ncHIoKSwgdGFrZW4pOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgU3Bl
Y3VsYXRlRG91YmxlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKKyAgICAgICAg
ICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwog
ICAgICAgICAgICAgRlBSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7CiAgICAgICAgICAgICBicmFu
Y2hEb3VibGVOb25aZXJvKHZhbHVlLmZwcigpLCBzY3JhdGNoLmZwcigpLCB0YWtlbik7CiAgICAg
ICAgIH0KICAgICAgICAgCiAgICAgICAgIGp1bXAobm90VGFrZW4pOwogICAgICAgICAKLSAgICAg
ICAgbm9SZXN1bHQobV9jb21waWxlSW5kZXgpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIEpTVmFs
dWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwotICAgICAgICBHUFJSZWcgdmFs
dWVHUFIgPSB2YWx1ZS5ncHIoKTsKKyAgICAgICAgbm9SZXN1bHQobm9kZSk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLT5jaGls
ZDEoKSk7CisgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7CiAgICAgICAgIAotICAg
ICAgICBib29sIHByZWRpY3RCb29sZWFuID0gaXNCb29sZWFuU3BlY3VsYXRpb24oYXQobm9kZS5j
aGlsZDEoKSkucHJlZGljdGlvbigpKTsKKyAgICBib29sIHByZWRpY3RCb29sZWFuID0gaXNCb29s
ZWFuU3BlY3VsYXRpb24obm9kZS0+Y2hpbGQxKCktPnByZWRpY3Rpb24oKSk7CiAgICAgCi0gICAg
ICAgIGlmIChwcmVkaWN0Qm9vbGVhbikgewotICAgICAgICAgICAgaWYgKGlzQm9vbGVhblNwZWN1
bGF0aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKSB7Ci0gICAgICAg
ICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlJlc3VsdENvbmRpdGlvbiBjb25kaXRpb24gPSBNYWNy
b0Fzc2VtYmxlcjo6Tm9uWmVybzsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBp
ZiAodGFrZW4gPT0gbmV4dEJsb2NrKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgY29uZGl0aW9u
ID0gTWFjcm9Bc3NlbWJsZXI6Olplcm87Ci0gICAgICAgICAgICAgICAgICAgIEJsb2NrSW5kZXgg
dG1wID0gdGFrZW47Ci0gICAgICAgICAgICAgICAgICAgIHRha2VuID0gbm90VGFrZW47Ci0gICAg
ICAgICAgICAgICAgICAgIG5vdFRha2VuID0gdG1wOwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBicmFuY2hUZXN0MzIoY29uZGl0aW9uLCB2YWx1
ZUdQUiwgVHJ1c3RlZEltbTMyKHRydWUpLCB0YWtlbik7Ci0gICAgICAgICAgICAgICAganVtcChu
b3RUYWtlbik7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGJyYW5jaDY0
KE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgdmFsdWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVk
SW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihmYWxzZSkpKSwgbm90VGFrZW4pOwotICAg
ICAgICAgICAgICAgIGJyYW5jaDY0KE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgdmFsdWVHUFIsIE1h
Y3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbih0cnVl
KSkpLCB0YWtlbik7CisgICAgaWYgKHByZWRpY3RCb29sZWFuKSB7CisgICAgICAgIGlmIChpc0Jv
b2xlYW5TcGVjdWxhdGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fdHlwZSkp
IHsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpSZXN1bHRDb25kaXRpb24gY29uZGl0aW9u
ID0gTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm87CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAg
ICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyh2YWx1ZUdQUiksIG5v
ZGUuY2hpbGQxKCksIG1faml0Lmp1bXAoKSk7CisgICAgICAgICAgICBpZiAodGFrZW4gPT0gbmV4
dEJsb2NrKCkpIHsKKyAgICAgICAgICAgICAgICBjb25kaXRpb24gPSBNYWNyb0Fzc2VtYmxlcjo6
WmVybzsKKyAgICAgICAgICAgICAgICBCbG9ja0luZGV4IHRtcCA9IHRha2VuOworICAgICAgICAg
ICAgICAgIHRha2VuID0gbm90VGFrZW47CisgICAgICAgICAgICAgICAgbm90VGFrZW4gPSB0bXA7
CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB2YWx1ZS51c2UoKTsKKyAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgIGJyYW5jaFRlc3QzMihjb25kaXRpb24sIHZhbHVlR1BSLCBUcnVzdGVk
SW1tMzIodHJ1ZSksIHRha2VuKTsKKyAgICAgICAgICAgIGp1bXAobm90VGFrZW4pOwogICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKLSAgICAg
ICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgICAgICBicmFu
Y2g2NChNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1
c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oZmFsc2UpKSksIG5vdFRha2VuKTsK
KyAgICAgICAgICAgIGJyYW5jaDY0KE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgdmFsdWVHUFIsIE1h
Y3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbih0cnVl
KSkpLCB0YWtlbik7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBzcGVjdWxhdGlvbkNo
ZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwgbm9kZS0+Y2hpbGQxKCksIG1faml0
Lmp1bXAoKSk7CisgICAgICAgIH0KKyAgICAgICAgdmFsdWUudXNlKCk7CisgICAgfSBlbHNlIHsK
KyAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKKyAgICAgICAgR1BSUmVnIHJlc3Vs
dEdQUiA9IHJlc3VsdC5ncHIoKTsKICAgICAgICAgCi0gICAgICAgICAgICBicmFuY2g2NChNYWNy
b0Fzc2VtYmxlcjo6RXF1YWwsIHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTY0
KEpTVmFsdWU6OmVuY29kZShqc051bWJlcigwKSkpLCBub3RUYWtlbik7Ci0gICAgICAgICAgICBi
cmFuY2g2NChNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCB2YWx1ZUdQUiwgR1BSSW5mbzo6
dGFnVHlwZU51bWJlclJlZ2lzdGVyLCB0YWtlbik7CisgICAgICAgIGJyYW5jaDY0KE1hY3JvQXNz
ZW1ibGVyOjpFcXVhbCwgdmFsdWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQoSlNW
YWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKDApKSksIG5vdFRha2VuKTsKKyAgICAgICAgYnJhbmNoNjQo
TWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgdmFsdWVHUFIsIEdQUkluZm86OnRhZ1R5cGVO
dW1iZXJSZWdpc3RlciwgdGFrZW4pOwogICAgIAotICAgICAgICAgICAgaWYgKCFwcmVkaWN0Qm9v
bGVhbikgewotICAgICAgICAgICAgICAgIGJyYW5jaDY0KE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwg
dmFsdWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpz
Qm9vbGVhbihmYWxzZSkpKSwgbm90VGFrZW4pOwotICAgICAgICAgICAgICAgIGJyYW5jaDY0KE1h
Y3JvQXNzZW1ibGVyOjpFcXVhbCwgdmFsdWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1t
NjQoSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbih0cnVlKSkpLCB0YWtlbik7Ci0gICAgICAgICAg
ICB9CisgICAgICAgIGlmICghcHJlZGljdEJvb2xlYW4pIHsKKyAgICAgICAgICAgIGJyYW5jaDY0
KE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgdmFsdWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVk
SW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihmYWxzZSkpKSwgbm90VGFrZW4pOworICAg
ICAgICAgICAgYnJhbmNoNjQoTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCB2YWx1ZUdQUiwgTWFjcm9B
c3NlbWJsZXI6OlRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKHRydWUpKSks
IHRha2VuKTsKKyAgICAgICAgfQogICAgIAotICAgICAgICAgICAgdmFsdWUudXNlKCk7CisgICAg
ICAgIHZhbHVlLnVzZSgpOwogICAgIAotICAgICAgICAgICAgc2lsZW50U3BpbGxBbGxSZWdpc3Rl
cnMocmVzdWx0R1BSKTsKLSAgICAgICAgICAgIGNhbGxPcGVyYXRpb24oZGZnQ29udmVydEpTVmFs
dWVUb0Jvb2xlYW4sIHJlc3VsdEdQUiwgdmFsdWVHUFIpOwotICAgICAgICAgICAgc2lsZW50Rmls
bEFsbFJlZ2lzdGVycyhyZXN1bHRHUFIpOworICAgICAgICBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVy
cyhyZXN1bHRHUFIpOworICAgICAgICBjYWxsT3BlcmF0aW9uKGRmZ0NvbnZlcnRKU1ZhbHVlVG9C
b29sZWFuLCByZXN1bHRHUFIsIHZhbHVlR1BSKTsKKyAgICAgICAgc2lsZW50RmlsbEFsbFJlZ2lz
dGVycyhyZXN1bHRHUFIpOwogICAgIAotICAgICAgICAgICAgYnJhbmNoVGVzdDMyKE1hY3JvQXNz
ZW1ibGVyOjpOb25aZXJvLCByZXN1bHRHUFIsIHRha2VuKTsKLSAgICAgICAgICAgIGp1bXAobm90
VGFrZW4pOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBub1Jlc3VsdChtX2NvbXBpbGVJ
bmRleCwgVXNlQ2hpbGRyZW5DYWxsZWRFeHBsaWNpdGx5KTsKKyAgICAgICAgYnJhbmNoVGVzdDMy
KE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCByZXN1bHRHUFIsIHRha2VuKTsKKyAgICAgICAganVt
cChub3RUYWtlbik7CiAgICAgfQorICAgICAgICAKKyAgICBub1Jlc3VsdChub2RlLCBVc2VDaGls
ZHJlbkNhbGxlZEV4cGxpY2l0bHkpOwogfQogCi12b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
KE5vZGUmIG5vZGUpCit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiB7
Ci0gICAgTm9kZVR5cGUgb3AgPSBub2RlLm9wKCk7CisgICAgTm9kZVR5cGUgb3AgPSBub2RlLT5v
cCgpOwogICAgIAogICAgIHN3aXRjaCAob3ApIHsKICAgICBjYXNlIEpTQ29uc3RhbnQ6Ci0gICAg
ICAgIGluaXRDb25zdGFudEluZm8obV9jb21waWxlSW5kZXgpOworICAgICAgICBpbml0Q29uc3Rh
bnRJbmZvKG5vZGUpOwogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgUGhhbnRvbUFyZ3VtZW50
czoKLSAgICAgICAgaW5pdENvbnN0YW50SW5mbyhtX2NvbXBpbGVJbmRleCk7CisgICAgICAgIGlu
aXRDb25zdGFudEluZm8obm9kZSk7CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBXZWFrSlND
b25zdGFudDoKLSAgICAgICAgbV9qaXQuYWRkV2Vha1JlZmVyZW5jZShub2RlLndlYWtDb25zdGFu
dCgpKTsKLSAgICAgICAgaW5pdENvbnN0YW50SW5mbyhtX2NvbXBpbGVJbmRleCk7CisgICAgICAg
IG1faml0LmFkZFdlYWtSZWZlcmVuY2Uobm9kZS0+d2Vha0NvbnN0YW50KCkpOworICAgICAgICBp
bml0Q29uc3RhbnRJbmZvKG5vZGUpOwogICAgICAgICBicmVhazsKICAgICAgICAgCiAgICAgY2Fz
ZSBJZGVudGl0eTogewogICAgICAgICAvLyBUaGlzIGNvdWxkIGJlIGRvbmUgYSBsb3QgYmV0dGVy
LiBXZSB0YWtlIHRoZSBjaGVhcCB3YXkgb3V0IGJlY2F1c2UgSWRlbnRpdHkKICAgICAgICAgLy8g
aXMgb25seSBnb2luZyB0byBzdGljayBhcm91bmQgYWZ0ZXIgQ1NFIGlmIHdlIGhhZCBwcmVkaWN0
aW9uIHdlaXJkbmVzcy4KLSAgICAgICAgSlNWYWx1ZU9wZXJhbmQgb3BlcmFuZCh0aGlzLCBub2Rl
LmNoaWxkMSgpKTsKKyAgICAgICAgSlNWYWx1ZU9wZXJhbmQgb3BlcmFuZCh0aGlzLCBub2RlLT5j
aGlsZDEoKSk7CiAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgb3BlcmFuZCk7CiAg
ICAgICAgIG1faml0Lm1vdmUob3BlcmFuZC5ncHIoKSwgcmVzdWx0LmdwcigpKTsKLSAgICAgICAg
anNWYWx1ZVJlc3VsdChyZXN1bHQuZ3ByKCksIG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAganNW
YWx1ZVJlc3VsdChyZXN1bHQuZ3ByKCksIG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9CiAK
ICAgICBjYXNlIEdldExvY2FsOiB7Ci0gICAgICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24g
PSBub2RlLnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5wcmVkaWN0aW9uKCk7Ci0gICAgICAgIEFic3Ry
YWN0VmFsdWUmIHZhbHVlID0gYmxvY2soKS0+dmFsdWVzQXRIZWFkLm9wZXJhbmQobm9kZS5sb2Nh
bCgpKTsKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiA9IG5vZGUtPnZhcmlhYmxl
QWNjZXNzRGF0YSgpLT5wcmVkaWN0aW9uKCk7CisgICAgICAgIEFic3RyYWN0VmFsdWUmIHZhbHVl
ID0gYmxvY2soKS0+dmFsdWVzQXRIZWFkLm9wZXJhbmQobm9kZS0+bG9jYWwoKSk7CiAKICAgICAg
ICAgLy8gSWYgd2UgaGF2ZSBubyBwcmVkaWN0aW9uIGZvciB0aGlzIGxvY2FsLCB0aGVuIGRvbid0
IGF0dGVtcHQgdG8gY29tcGlsZS4KICAgICAgICAgaWYgKHByZWRpY3Rpb24gPT0gU3BlY05vbmUp
IHsKLSAgICAgICAgICAgIHRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKEluYWRlcXVhdGVD
b3ZlcmFnZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlKTsKKyAgICAgICAgICAgIHRlcm1pbmF0ZVNw
ZWN1bGF0aXZlRXhlY3V0aW9uKEluYWRlcXVhdGVDb3ZlcmFnZSwgSlNWYWx1ZVJlZ3MoKSwgMCk7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgaWYgKCFu
b2RlLnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5pc0NhcHR1cmVkKCkpIHsKKyAgICAgICAgaWYgKCFu
b2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+aXNDYXB0dXJlZCgpKSB7CiAgICAgICAgICAgICAv
LyBJZiB0aGUgQ0ZBIGlzIHRyYWNraW5nIHRoaXMgdmFyaWFibGUgYW5kIGl0IGZvdW5kIHRoYXQg
dGhlIHZhcmlhYmxlCiAgICAgICAgICAgICAvLyBjYW5ub3QgaGF2ZSBiZWVuIGFzc2lnbmVkLCB0
aGVuIGRvbid0IGF0dGVtcHQgdG8gcHJvY2VlZC4KICAgICAgICAgICAgIGlmICh2YWx1ZS5pc0Ns
ZWFyKCkpIHsKLSAgICAgICAgICAgICAgICB0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihJ
bmFkZXF1YXRlQ292ZXJhZ2UsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSk7CisgICAgICAgICAgICAg
ICAgdGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oSW5hZGVxdWF0ZUNvdmVyYWdlLCBKU1Zh
bHVlUmVncygpLCAwKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIAotICAgICAgICAgICAgaWYgKG5vZGUudmFyaWFibGVBY2Nlc3NEYXRhKCktPnNo
b3VsZFVzZURvdWJsZUZvcm1hdCgpKSB7CisgICAgICAgICAgICBpZiAobm9kZS0+dmFyaWFibGVB
Y2Nlc3NEYXRhKCktPnNob3VsZFVzZURvdWJsZUZvcm1hdCgpKSB7CiAgICAgICAgICAgICAgICAg
RlBSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKLSAgICAgICAgICAgICAgICBtX2ppdC5sb2FkRG91
YmxlKEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKG5vZGUubG9jYWwoKSksIHJlc3VsdC5mcHIoKSk7
Ci0gICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciA9IG5vZGUu
dmlydHVhbFJlZ2lzdGVyKCk7CisgICAgICAgICAgICAgICAgbV9qaXQubG9hZERvdWJsZShKSVRD
b21waWxlcjo6YWRkcmVzc0Zvcihub2RlLT5sb2NhbCgpKSwgcmVzdWx0LmZwcigpKTsKKyAgICAg
ICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyID0gbm9kZS0+dmlydHVh
bFJlZ2lzdGVyKCk7CiAgICAgICAgICAgICAgICAgbV9mcHJzLnJldGFpbihyZXN1bHQuZnByKCks
IHZpcnR1YWxSZWdpc3RlciwgU3BpbGxPcmRlckRvdWJsZSk7Ci0gICAgICAgICAgICAgICAgbV9n
ZW5lcmF0aW9uSW5mb1t2aXJ0dWFsUmVnaXN0ZXJdLmluaXREb3VibGUobV9jb21waWxlSW5kZXgs
IG5vZGUucmVmQ291bnQoKSwgcmVzdWx0LmZwcigpKTsKKyAgICAgICAgICAgICAgICBtX2dlbmVy
YXRpb25JbmZvW3ZpcnR1YWxSZWdpc3Rlcl0uaW5pdERvdWJsZShub2RlLCBub2RlLT5yZWZDb3Vu
dCgpLCByZXN1bHQuZnByKCkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
fQogICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAoaXNJbnQzMlNwZWN1bGF0aW9uKHZhbHVl
Lm1fdHlwZSkpIHsKICAgICAgICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwot
ICAgICAgICAgICAgICAgIG1faml0LmxvYWQzMihKSVRDb21waWxlcjo6cGF5bG9hZEZvcihub2Rl
LmxvY2FsKCkpLCByZXN1bHQuZ3ByKCkpOworICAgICAgICAgICAgICAgIG1faml0LmxvYWQzMihK
SVRDb21waWxlcjo6cGF5bG9hZEZvcihub2RlLT5sb2NhbCgpKSwgcmVzdWx0LmdwcigpKTsKICAg
ICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAvLyBMaWtlIGludGVnZXJSZXN1bHQsIGJ1
dCBkb24ndCB1c2VDaGlsZHJlbiAtIG91ciBjaGlsZHJlbiBhcmUgcGhpIG5vZGVzLAogICAgICAg
ICAgICAgICAgIC8vIGFuZCBkb24ndCByZXByZXNlbnQgdmFsdWVzIHdpdGhpbiB0aGlzIGRhdGFm
bG93IHdpdGggdmlydHVhbCByZWdpc3RlcnMuCi0gICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lz
dGVyIHZpcnR1YWxSZWdpc3RlciA9IG5vZGUudmlydHVhbFJlZ2lzdGVyKCk7CisgICAgICAgICAg
ICAgICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciA9IG5vZGUtPnZpcnR1YWxSZWdp
c3RlcigpOwogICAgICAgICAgICAgICAgIG1fZ3Bycy5yZXRhaW4ocmVzdWx0LmdwcigpLCB2aXJ0
dWFsUmVnaXN0ZXIsIFNwaWxsT3JkZXJJbnRlZ2VyKTsKLSAgICAgICAgICAgICAgICBtX2dlbmVy
YXRpb25JbmZvW3ZpcnR1YWxSZWdpc3Rlcl0uaW5pdEludGVnZXIobV9jb21waWxlSW5kZXgsIG5v
ZGUucmVmQ291bnQoKSwgcmVzdWx0LmdwcigpKTsKKyAgICAgICAgICAgICAgICBtX2dlbmVyYXRp
b25JbmZvW3ZpcnR1YWxSZWdpc3Rlcl0uaW5pdEludGVnZXIobm9kZSwgbm9kZS0+cmVmQ291bnQo
KSwgcmVzdWx0LmdwcigpKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0K
ICAgICAgICAgfQogCiAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7Ci0gICAgICAg
IG1faml0LmxvYWQ2NChKSVRDb21waWxlcjo6YWRkcmVzc0Zvcihub2RlLmxvY2FsKCkpLCByZXN1
bHQuZ3ByKCkpOworICAgICAgICBtX2ppdC5sb2FkNjQoSklUQ29tcGlsZXI6OmFkZHJlc3NGb3Io
bm9kZS0+bG9jYWwoKSksIHJlc3VsdC5ncHIoKSk7CiAKICAgICAgICAgLy8gTGlrZSBqc1ZhbHVl
UmVzdWx0LCBidXQgZG9uJ3QgdXNlQ2hpbGRyZW4gLSBvdXIgY2hpbGRyZW4gYXJlIHBoaSBub2Rl
cywKICAgICAgICAgLy8gYW5kIGRvbid0IHJlcHJlc2VudCB2YWx1ZXMgd2l0aGluIHRoaXMgZGF0
YWZsb3cgd2l0aCB2aXJ0dWFsIHJlZ2lzdGVycy4KLSAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHZp
cnR1YWxSZWdpc3RlciA9IG5vZGUudmlydHVhbFJlZ2lzdGVyKCk7CisgICAgICAgIFZpcnR1YWxS
ZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIgPSBub2RlLT52aXJ0dWFsUmVnaXN0ZXIoKTsKICAgICAg
ICAgbV9ncHJzLnJldGFpbihyZXN1bHQuZ3ByKCksIHZpcnR1YWxSZWdpc3RlciwgU3BpbGxPcmRl
ckpTKTsKIAogICAgICAgICBEYXRhRm9ybWF0IGZvcm1hdDsKLSAgICAgICAgaWYgKG5vZGUudmFy
aWFibGVBY2Nlc3NEYXRhKCktPmlzQ2FwdHVyZWQoKSkKKyAgICAgICAgaWYgKG5vZGUtPnZhcmlh
YmxlQWNjZXNzRGF0YSgpLT5pc0NhcHR1cmVkKCkpCiAgICAgICAgICAgICBmb3JtYXQgPSBEYXRh
Rm9ybWF0SlM7CiAgICAgICAgIGVsc2UgaWYgKGlzQ2VsbFNwZWN1bGF0aW9uKHZhbHVlLm1fdHlw
ZSkpCiAgICAgICAgICAgICBmb3JtYXQgPSBEYXRhRm9ybWF0SlNDZWxsOwpAQCAtMjIwMCwxNiAr
MjE5MiwxNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAg
ICAgIGVsc2UKICAgICAgICAgICAgIGZvcm1hdCA9IERhdGFGb3JtYXRKUzsKIAotICAgICAgICBt
X2dlbmVyYXRpb25JbmZvW3ZpcnR1YWxSZWdpc3Rlcl0uaW5pdEpTVmFsdWUobV9jb21waWxlSW5k
ZXgsIG5vZGUucmVmQ291bnQoKSwgcmVzdWx0LmdwcigpLCBmb3JtYXQpOworICAgICAgICBtX2dl
bmVyYXRpb25JbmZvW3ZpcnR1YWxSZWdpc3Rlcl0uaW5pdEpTVmFsdWUobm9kZSwgbm9kZS0+cmVm
Q291bnQoKSwgcmVzdWx0LmdwcigpLCBmb3JtYXQpOwogICAgICAgICBicmVhazsKICAgICB9CiAK
ICAgICBjYXNlIEdldExvY2FsVW5saW5rZWQ6IHsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3Vs
dCh0aGlzKTsKICAgICAgICAgCi0gICAgICAgIG1faml0LmxvYWQ2NChKSVRDb21waWxlcjo6YWRk
cmVzc0Zvcihub2RlLnVubGlua2VkTG9jYWwoKSksIHJlc3VsdC5ncHIoKSk7CisgICAgICAgIG1f
aml0LmxvYWQ2NChKSVRDb21waWxlcjo6YWRkcmVzc0Zvcihub2RlLT51bmxpbmtlZExvY2FsKCkp
LCByZXN1bHQuZ3ByKCkpOwogICAgICAgICAKLSAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHQu
Z3ByKCksIG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHQuZ3By
KCksIG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9CiAKQEAgLTIyMjAsNTUgKzIyMTIsNTUg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAvLyBz
dGFjay4KICAgICAgICAgY29tcGlsZU1vdkhpbnQobm9kZSk7CiAgICAgICAgIAotICAgICAgICBp
ZiAoIW5vZGUudmFyaWFibGVBY2Nlc3NEYXRhKCktPmlzQ2FwdHVyZWQoKSAmJiAhbV9qaXQuZ3Jh
cGgoKS5pc0NyZWF0ZWRUaGlzQXJndW1lbnQobm9kZS5sb2NhbCgpKSkgewotICAgICAgICAgICAg
aWYgKG5vZGUudmFyaWFibGVBY2Nlc3NEYXRhKCktPnNob3VsZFVzZURvdWJsZUZvcm1hdCgpKSB7
Ci0gICAgICAgICAgICAgICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2Rl
LmNoaWxkMSgpLCBGb3J3YXJkU3BlY3VsYXRpb24pOwotICAgICAgICAgICAgICAgIG1faml0LnN0
b3JlRG91YmxlKHZhbHVlLmZwcigpLCBKSVRDb21waWxlcjo6YWRkcmVzc0Zvcihub2RlLmxvY2Fs
KCkpKTsKLSAgICAgICAgICAgICAgICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCk7CisgICAgICAg
IGlmICghbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCktPmlzQ2FwdHVyZWQoKSAmJiAhbV9qaXQu
Z3JhcGgoKS5pc0NyZWF0ZWRUaGlzQXJndW1lbnQobm9kZS0+bG9jYWwoKSkpIHsKKyAgICAgICAg
ICAgIGlmIChub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+c2hvdWxkVXNlRG91YmxlRm9ybWF0
KCkpIHsKKyAgICAgICAgICAgICAgICBTcGVjdWxhdGVEb3VibGVPcGVyYW5kIHZhbHVlKHRoaXMs
IG5vZGUtPmNoaWxkMSgpLCBGb3J3YXJkU3BlY3VsYXRpb24pOworICAgICAgICAgICAgICAgIG1f
aml0LnN0b3JlRG91YmxlKHZhbHVlLmZwcigpLCBKSVRDb21waWxlcjo6YWRkcmVzc0Zvcihub2Rl
LT5sb2NhbCgpKSk7CisgICAgICAgICAgICAgICAgbm9SZXN1bHQobm9kZSk7CiAgICAgICAgICAg
ICAgICAgLy8gSW5kaWNhdGUgdGhhdCBpdCdzIG5vIGxvbmdlciBuZWNlc3NhcnkgdG8gcmV0cmll
dmUgdGhlIHZhbHVlIG9mCiAgICAgICAgICAgICAgICAgLy8gdGhpcyBieXRlY29kZSB2YXJpYWJs
ZSBmcm9tIHJlZ2lzdGVycyBvciBvdGhlciBsb2NhdGlvbnMgaW4gdGhlIHN0YWNrLAogICAgICAg
ICAgICAgICAgIC8vIGJ1dCB0aGF0IGl0IGlzIHN0b3JlZCBhcyBhIGRvdWJsZS4KLSAgICAgICAg
ICAgICAgICByZWNvcmRTZXRMb2NhbChub2RlLmxvY2FsKCksIFZhbHVlU291cmNlKERvdWJsZUlu
SlNTdGFjaykpOworICAgICAgICAgICAgICAgIHJlY29yZFNldExvY2FsKG5vZGUtPmxvY2FsKCks
IFZhbHVlU291cmNlKERvdWJsZUluSlNTdGFjaykpOwogICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRp
Y3RlZFR5cGUgPSBub2RlLnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5hcmd1bWVudEF3YXJlUHJlZGlj
dGlvbigpOworICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGVkVHlwZSA9IG5vZGUt
PnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5hcmd1bWVudEF3YXJlUHJlZGljdGlvbigpOwogICAgICAg
ICAgICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbihwcmVkaWN0ZWRUeXBlKSkgewotICAgICAgICAg
ICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUuY2hpbGQxKCks
IEZvcndhcmRTcGVjdWxhdGlvbik7Ci0gICAgICAgICAgICAgICAgbV9qaXQuc3RvcmUzMih2YWx1
ZS5ncHIoKSwgSklUQ29tcGlsZXI6OnBheWxvYWRGb3Iobm9kZS5sb2NhbCgpKSk7Ci0gICAgICAg
ICAgICAgICAgbm9SZXN1bHQobV9jb21waWxlSW5kZXgpOwotICAgICAgICAgICAgICAgIHJlY29y
ZFNldExvY2FsKG5vZGUubG9jYWwoKSwgVmFsdWVTb3VyY2UoSW50MzJJbkpTU3RhY2spKTsKKyAg
ICAgICAgICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLT5j
aGlsZDEoKSwgRm9yd2FyZFNwZWN1bGF0aW9uKTsKKyAgICAgICAgICAgICAgICBtX2ppdC5zdG9y
ZTMyKHZhbHVlLmdwcigpLCBKSVRDb21waWxlcjo6cGF5bG9hZEZvcihub2RlLT5sb2NhbCgpKSk7
CisgICAgICAgICAgICAgICAgbm9SZXN1bHQobm9kZSk7CisgICAgICAgICAgICAgICAgcmVjb3Jk
U2V0TG9jYWwobm9kZS0+bG9jYWwoKSwgVmFsdWVTb3VyY2UoSW50MzJJbkpTU3RhY2spKTsKICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChpc0Nl
bGxTcGVjdWxhdGlvbihwcmVkaWN0ZWRUeXBlKSkgewotICAgICAgICAgICAgICAgIFNwZWN1bGF0
ZUNlbGxPcGVyYW5kIGNlbGwodGhpcywgbm9kZS5jaGlsZDEoKSwgRm9yd2FyZFNwZWN1bGF0aW9u
KTsKKyAgICAgICAgICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBjZWxsKHRoaXMsIG5vZGUt
PmNoaWxkMSgpLCBGb3J3YXJkU3BlY3VsYXRpb24pOwogICAgICAgICAgICAgICAgIEdQUlJlZyBj
ZWxsR1BSID0gY2VsbC5ncHIoKTsKLSAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZTY0KGNlbGxH
UFIsIEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKG5vZGUubG9jYWwoKSkpOwotICAgICAgICAgICAg
ICAgIG5vUmVzdWx0KG1fY29tcGlsZUluZGV4KTsKLSAgICAgICAgICAgICAgICByZWNvcmRTZXRM
b2NhbChub2RlLmxvY2FsKCksIFZhbHVlU291cmNlKENlbGxJbkpTU3RhY2spKTsKKyAgICAgICAg
ICAgICAgICBtX2ppdC5zdG9yZTY0KGNlbGxHUFIsIEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKG5v
ZGUtPmxvY2FsKCkpKTsKKyAgICAgICAgICAgICAgICBub1Jlc3VsdChub2RlKTsKKyAgICAgICAg
ICAgICAgICByZWNvcmRTZXRMb2NhbChub2RlLT5sb2NhbCgpLCBWYWx1ZVNvdXJjZShDZWxsSW5K
U1N0YWNrKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICBpZiAoaXNCb29sZWFuU3BlY3VsYXRpb24ocHJlZGljdGVkVHlwZSkpIHsKLSAgICAgICAg
ICAgICAgICBTcGVjdWxhdGVCb29sZWFuT3BlcmFuZCBib29sZWFuKHRoaXMsIG5vZGUuY2hpbGQx
KCksIEZvcndhcmRTcGVjdWxhdGlvbik7Ci0gICAgICAgICAgICAgICAgbV9qaXQuc3RvcmU2NChi
b29sZWFuLmdwcigpLCBKSVRDb21waWxlcjo6YWRkcmVzc0Zvcihub2RlLmxvY2FsKCkpKTsKLSAg
ICAgICAgICAgICAgICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCk7Ci0gICAgICAgICAgICAgICAg
cmVjb3JkU2V0TG9jYWwobm9kZS5sb2NhbCgpLCBWYWx1ZVNvdXJjZShCb29sZWFuSW5KU1N0YWNr
KSk7CisgICAgICAgICAgICAgICAgU3BlY3VsYXRlQm9vbGVhbk9wZXJhbmQgYm9vbGVhbih0aGlz
LCBub2RlLT5jaGlsZDEoKSwgRm9yd2FyZFNwZWN1bGF0aW9uKTsKKyAgICAgICAgICAgICAgICBt
X2ppdC5zdG9yZTY0KGJvb2xlYW4uZ3ByKCksIEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKG5vZGUt
PmxvY2FsKCkpKTsKKyAgICAgICAgICAgICAgICBub1Jlc3VsdChub2RlKTsKKyAgICAgICAgICAg
ICAgICByZWNvcmRTZXRMb2NhbChub2RlLT5sb2NhbCgpLCBWYWx1ZVNvdXJjZShCb29sZWFuSW5K
U1N0YWNrKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAg
IH0KICAgICAgICAgCi0gICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUuY2hp
bGQxKCkpOwotICAgICAgICBtX2ppdC5zdG9yZTY0KHZhbHVlLmdwcigpLCBKSVRDb21waWxlcjo6
YWRkcmVzc0Zvcihub2RlLmxvY2FsKCkpKTsKLSAgICAgICAgbm9SZXN1bHQobV9jb21waWxlSW5k
ZXgpOworICAgICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7
CisgICAgICAgIG1faml0LnN0b3JlNjQodmFsdWUuZ3ByKCksIEpJVENvbXBpbGVyOjphZGRyZXNz
Rm9yKG5vZGUtPmxvY2FsKCkpKTsKKyAgICAgICAgbm9SZXN1bHQobm9kZSk7CiAKLSAgICAgICAg
cmVjb3JkU2V0TG9jYWwobm9kZS5sb2NhbCgpLCBWYWx1ZVNvdXJjZShWYWx1ZUluSlNTdGFjaykp
OworICAgICAgICByZWNvcmRTZXRMb2NhbChub2RlLT5sb2NhbCgpLCBWYWx1ZVNvdXJjZShWYWx1
ZUluSlNTdGFjaykpOwogCiAgICAgICAgIC8vIElmIHdlJ3JlIHN0b3JpbmcgYW4gYXJndW1lbnRz
IG9iamVjdCB0aGF0IGhhcyBiZWVuIG9wdGltaXplZCBhd2F5LAogICAgICAgICAvLyBvdXIgdmFy
aWFibGUgZXZlbnQgc3RyZWFtIGZvciBPU1IgZXhpdCBub3cgcmVmbGVjdHMgdGhlIG9wdGltaXpl
ZAogICAgICAgICAvLyB2YWx1ZSAoSlNWYWx1ZSgpKS4gT24gdGhlIHNsb3cgcGF0aCwgd2Ugd2Fu
dCBhbiBhcmd1bWVudHMgb2JqZWN0CiAgICAgICAgIC8vIGluc3RlYWQuIFdlIGFkZCBhbiBhZGRp
dGlvbmFsIG1vdmUgaGludCB0byBzaG93IE9TUiBleGl0IHRoYXQgaXQKICAgICAgICAgLy8gbmVl
ZHMgdG8gcmVjb25zdHJ1Y3QgdGhlIGFyZ3VtZW50cyBvYmplY3QuCi0gICAgICAgIGlmIChhdChu
b2RlLmNoaWxkMSgpKS5vcCgpID09IFBoYW50b21Bcmd1bWVudHMpCisgICAgICAgIGlmIChub2Rl
LT5jaGlsZDEoKS0+b3AoKSA9PSBQaGFudG9tQXJndW1lbnRzKQogICAgICAgICAgICAgY29tcGls
ZU1vdkhpbnQobm9kZSk7CiAKICAgICAgICAgYnJlYWs7CkBAIC0yMjg0LDU0ICsyMjc2LDU0IEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICBjYXNlIEJpdEFu
ZDoKICAgICBjYXNlIEJpdE9yOgogICAgIGNhc2UgQml0WG9yOgotICAgICAgICBpZiAoaXNJbnQz
MkNvbnN0YW50KG5vZGUuY2hpbGQxKCkuaW5kZXgoKSkpIHsKLSAgICAgICAgICAgIFNwZWN1bGF0
ZUludGVnZXJPcGVyYW5kIG9wMih0aGlzLCBub2RlLmNoaWxkMigpKTsKKyAgICAgICAgaWYgKGlz
SW50MzJDb25zdGFudChub2RlLT5jaGlsZDEoKS5ub2RlKCkpKSB7CisgICAgICAgICAgICBTcGVj
dWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDIodGhpcywgbm9kZS0+Y2hpbGQyKCkpOwogICAgICAgICAg
ICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBvcDIpOwogCi0gICAgICAgICAgICBiaXRPcChv
cCwgdmFsdWVPZkludDMyQ29uc3RhbnQobm9kZS5jaGlsZDEoKS5pbmRleCgpKSwgb3AyLmdwcigp
LCByZXN1bHQuZ3ByKCkpOworICAgICAgICAgICAgYml0T3Aob3AsIHZhbHVlT2ZJbnQzMkNvbnN0
YW50KG5vZGUtPmNoaWxkMSgpLm5vZGUoKSksIG9wMi5ncHIoKSwgcmVzdWx0LmdwcigpKTsKIAot
ICAgICAgICAgICAgaW50ZWdlclJlc3VsdChyZXN1bHQuZ3ByKCksIG1fY29tcGlsZUluZGV4KTsK
LSAgICAgICAgfSBlbHNlIGlmIChpc0ludDMyQ29uc3RhbnQobm9kZS5jaGlsZDIoKS5pbmRleCgp
KSkgewotICAgICAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AxKHRoaXMsIG5vZGUu
Y2hpbGQxKCkpOworICAgICAgICAgICAgaW50ZWdlclJlc3VsdChyZXN1bHQuZ3ByKCksIG5vZGUp
OworICAgICAgICB9IGVsc2UgaWYgKGlzSW50MzJDb25zdGFudChub2RlLT5jaGlsZDIoKS5ub2Rl
KCkpKSB7CisgICAgICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDEodGhpcywgbm9k
ZS0+Y2hpbGQxKCkpOwogICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBvcDEp
OwogCi0gICAgICAgICAgICBiaXRPcChvcCwgdmFsdWVPZkludDMyQ29uc3RhbnQobm9kZS5jaGls
ZDIoKS5pbmRleCgpKSwgb3AxLmdwcigpLCByZXN1bHQuZ3ByKCkpOworICAgICAgICAgICAgYml0
T3Aob3AsIHZhbHVlT2ZJbnQzMkNvbnN0YW50KG5vZGUtPmNoaWxkMigpLm5vZGUoKSksIG9wMS5n
cHIoKSwgcmVzdWx0LmdwcigpKTsKIAotICAgICAgICAgICAgaW50ZWdlclJlc3VsdChyZXN1bHQu
Z3ByKCksIG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAgICAgIGludGVnZXJSZXN1bHQocmVzdWx0
LmdwcigpLCBub2RlKTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIFNwZWN1bGF0ZUlu
dGVnZXJPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKLSAgICAgICAgICAgIFNwZWN1
bGF0ZUludGVnZXJPcGVyYW5kIG9wMih0aGlzLCBub2RlLmNoaWxkMigpKTsKKyAgICAgICAgICAg
IFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CisgICAg
ICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDIodGhpcywgbm9kZS0+Y2hpbGQyKCkp
OwogICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBvcDEsIG9wMik7CiAKICAg
ICAgICAgICAgIEdQUlJlZyByZWcxID0gb3AxLmdwcigpOwogICAgICAgICAgICAgR1BSUmVnIHJl
ZzIgPSBvcDIuZ3ByKCk7CiAgICAgICAgICAgICBiaXRPcChvcCwgcmVnMSwgcmVnMiwgcmVzdWx0
LmdwcigpKTsKIAotICAgICAgICAgICAgaW50ZWdlclJlc3VsdChyZXN1bHQuZ3ByKCksIG1fY29t
cGlsZUluZGV4KTsKKyAgICAgICAgICAgIGludGVnZXJSZXN1bHQocmVzdWx0LmdwcigpLCBub2Rl
KTsKICAgICAgICAgfQogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgQml0UlNoaWZ0OgogICAg
IGNhc2UgQml0TFNoaWZ0OgogICAgIGNhc2UgQml0VVJTaGlmdDoKLSAgICAgICAgaWYgKGlzSW50
MzJDb25zdGFudChub2RlLmNoaWxkMigpLmluZGV4KCkpKSB7Ci0gICAgICAgICAgICBTcGVjdWxh
dGVJbnRlZ2VyT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEoKSk7CisgICAgICAgIGlmIChp
c0ludDMyQ29uc3RhbnQobm9kZS0+Y2hpbGQyKCkubm9kZSgpKSkgeworICAgICAgICAgICAgU3Bl
Y3VsYXRlSW50ZWdlck9wZXJhbmQgb3AxKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAg
ICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgb3AxKTsKIAotICAgICAgICAgICAgc2hpZnRP
cChvcCwgb3AxLmdwcigpLCB2YWx1ZU9mSW50MzJDb25zdGFudChub2RlLmNoaWxkMigpLmluZGV4
KCkpICYgMHgxZiwgcmVzdWx0LmdwcigpKTsKKyAgICAgICAgICAgIHNoaWZ0T3Aob3AsIG9wMS5n
cHIoKSwgdmFsdWVPZkludDMyQ29uc3RhbnQobm9kZS0+Y2hpbGQyKCkubm9kZSgpKSAmIDB4MWYs
IHJlc3VsdC5ncHIoKSk7CiAKLSAgICAgICAgICAgIGludGVnZXJSZXN1bHQocmVzdWx0Lmdwcigp
LCBtX2NvbXBpbGVJbmRleCk7CisgICAgICAgICAgICBpbnRlZ2VyUmVzdWx0KHJlc3VsdC5ncHIo
KSwgbm9kZSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAvLyBEbyBub3QgYWxsb3cg
c2hpZnQgYW1vdW50IHRvIGJlIHVzZWQgYXMgdGhlIHJlc3VsdCwgTWFjcm9Bc3NlbWJsZXIgZG9l
cyBub3QgcGVybWl0IHRoaXMuCi0gICAgICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBv
cDEodGhpcywgbm9kZS5jaGlsZDEoKSk7Ci0gICAgICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3Bl
cmFuZCBvcDIodGhpcywgbm9kZS5jaGlsZDIoKSk7CisgICAgICAgICAgICBTcGVjdWxhdGVJbnRl
Z2VyT3BlcmFuZCBvcDEodGhpcywgbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgU3BlY3Vs
YXRlSW50ZWdlck9wZXJhbmQgb3AyKHRoaXMsIG5vZGUtPmNoaWxkMigpKTsKICAgICAgICAgICAg
IEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgb3AxKTsKIAogICAgICAgICAgICAgR1BSUmVnIHJl
ZzEgPSBvcDEuZ3ByKCk7CiAgICAgICAgICAgICBHUFJSZWcgcmVnMiA9IG9wMi5ncHIoKTsKICAg
ICAgICAgICAgIHNoaWZ0T3Aob3AsIHJlZzEsIHJlZzIsIHJlc3VsdC5ncHIoKSk7CiAKLSAgICAg
ICAgICAgIGludGVnZXJSZXN1bHQocmVzdWx0LmdwcigpLCBtX2NvbXBpbGVJbmRleCk7CisgICAg
ICAgICAgICBpbnRlZ2VyUmVzdWx0KHJlc3VsdC5ncHIoKSwgbm9kZSk7CiAgICAgICAgIH0KICAg
ICAgICAgYnJlYWs7CiAKQEAgLTIzNTYsMTUgKzIzNDgsMTUgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBDaGVja051
bWJlcjogewotICAgICAgICBpZiAoIWlzTnVtYmVyU3BlY3VsYXRpb24obV9zdGF0ZS5mb3JOb2Rl
KG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpIHsKLSAgICAgICAgICAgIEpTVmFsdWVPcGVyYW5kIG9w
MSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKKyAgICAgICAgaWYgKCFpc051bWJlclNwZWN1bGF0aW9u
KG1fc3RhdGUuZm9yTm9kZShub2RlLT5jaGlsZDEoKSkubV90eXBlKSkgeworICAgICAgICAgICAg
SlNWYWx1ZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgICAgIEpJ
VENvbXBpbGVyOjpKdW1wIGlzSW50ZWdlciA9IG1faml0LmJyYW5jaDY0KE1hY3JvQXNzZW1ibGVy
OjpBYm92ZU9yRXF1YWwsIG9wMS5ncHIoKSwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVy
KTsKICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCi0gICAgICAgICAgICAgICAgQmFkVHlw
ZSwgSlNWYWx1ZVJlZ3Mob3AxLmdwcigpKSwgbm9kZS5jaGlsZDEoKS5pbmRleCgpLAorICAgICAg
ICAgICAgICAgIEJhZFR5cGUsIEpTVmFsdWVSZWdzKG9wMS5ncHIoKSksIG5vZGUtPmNoaWxkMSgp
Lm5vZGUoKSwKICAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2hUZXN0NjQoTWFjcm9Bc3NlbWJs
ZXI6Olplcm8sIG9wMS5ncHIoKSwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKSk7CiAg
ICAgICAgICAgICBpc0ludGVnZXIubGluaygmbV9qaXQpOwogICAgICAgICB9Ci0gICAgICAgIG5v
UmVzdWx0KG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAgbm9SZXN1bHQobm9kZSk7CiAgICAgICAg
IGJyZWFrOwogICAgIH0KIApAQCAtMjM4NiwyMSArMjM3OCwyMSBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBBcml0
aERpdjogewotICAgICAgICBpZiAoTm9kZTo6c2hvdWxkU3BlY3VsYXRlSW50ZWdlckZvckFyaXRo
bWV0aWMoYXQobm9kZS5jaGlsZDEoKSksIGF0KG5vZGUuY2hpbGQyKCkpKQotICAgICAgICAgICAg
JiYgbm9kZS5jYW5TcGVjdWxhdGVJbnRlZ2VyKCkpIHsKKyAgICAgICAgaWYgKE5vZGU6OnNob3Vs
ZFNwZWN1bGF0ZUludGVnZXJGb3JBcml0aG1ldGljKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgbm9k
ZS0+Y2hpbGQyKCkubm9kZSgpKQorICAgICAgICAgICAgJiYgbm9kZS0+Y2FuU3BlY3VsYXRlSW50
ZWdlcigpKSB7CiAgICAgICAgICAgICBjb21waWxlSW50ZWdlckFyaXRoRGl2Rm9yWDg2KG5vZGUp
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIFNwZWN1
bGF0ZURvdWJsZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwotICAgICAgICBTcGVj
dWxhdGVEb3VibGVPcGVyYW5kIG9wMih0aGlzLCBub2RlLmNoaWxkMigpKTsKKyAgICAgICAgU3Bl
Y3VsYXRlRG91YmxlT3BlcmFuZCBvcDEodGhpcywgbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBT
cGVjdWxhdGVEb3VibGVPcGVyYW5kIG9wMih0aGlzLCBub2RlLT5jaGlsZDIoKSk7CiAgICAgICAg
IEZQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgb3AxKTsKIAogICAgICAgICBGUFJSZWcgcmVnMSA9
IG9wMS5mcHIoKTsKICAgICAgICAgRlBSUmVnIHJlZzIgPSBvcDIuZnByKCk7CiAgICAgICAgIG1f
aml0LmRpdkRvdWJsZShyZWcxLCByZWcyLCByZXN1bHQuZnByKCkpOwogCi0gICAgICAgIGRvdWJs
ZVJlc3VsdChyZXN1bHQuZnByKCksIG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAgZG91YmxlUmVz
dWx0KHJlc3VsdC5mcHIoKSwgbm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIApAQCAtMjQx
MCw5ICsyNDAyLDkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQog
ICAgIH0KIAogICAgIGNhc2UgQXJpdGhBYnM6IHsKLSAgICAgICAgaWYgKGF0KG5vZGUuY2hpbGQx
KCkpLnNob3VsZFNwZWN1bGF0ZUludGVnZXJGb3JBcml0aG1ldGljKCkKLSAgICAgICAgICAgICYm
IG5vZGUuY2FuU3BlY3VsYXRlSW50ZWdlcigpKSB7Ci0gICAgICAgICAgICBTcGVjdWxhdGVJbnRl
Z2VyT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEoKSk7CisgICAgICAgIGlmIChub2RlLT5j
aGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlSW50ZWdlckZvckFyaXRobWV0aWMoKQorICAgICAgICAg
ICAgJiYgbm9kZS0+Y2FuU3BlY3VsYXRlSW50ZWdlcigpKSB7CisgICAgICAgICAgICBTcGVjdWxh
dGVJbnRlZ2VyT3BlcmFuZCBvcDEodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICAgICAg
R1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSBzY3Jh
dGNoKHRoaXMpOwogICAgICAgICAgICAgCkBAIC0yNDIwLDI1ICsyNDEyLDI1IEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgICAgIG1faml0LnJzaGlm
dDMyKHJlc3VsdC5ncHIoKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigzMSksIHNjcmF0
Y2guZ3ByKCkpOwogICAgICAgICAgICAgbV9qaXQuYWRkMzIoc2NyYXRjaC5ncHIoKSwgcmVzdWx0
LmdwcigpKTsKICAgICAgICAgICAgIG1faml0LnhvcjMyKHNjcmF0Y2guZ3ByKCksIHJlc3VsdC5n
cHIoKSk7Ci0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE92ZXJmbG93LCBKU1ZhbHVlUmVn
cygpLCBOb05vZGUsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgcmVzdWx0
LmdwcigpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDEgPDwgMzEpKSk7Ci0gICAgICAg
ICAgICBpbnRlZ2VyUmVzdWx0KHJlc3VsdC5ncHIoKSwgbV9jb21waWxlSW5kZXgpOworICAgICAg
ICAgICAgc3BlY3VsYXRpb25DaGVjayhPdmVyZmxvdywgSlNWYWx1ZVJlZ3MoKSwgMCwgbV9qaXQu
YnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCByZXN1bHQuZ3ByKCksIE1hY3JvQXNzZW1i
bGVyOjpUcnVzdGVkSW1tMzIoMSA8PCAzMSkpKTsKKyAgICAgICAgICAgIGludGVnZXJSZXN1bHQo
cmVzdWx0LmdwcigpLCBub2RlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAg
ICAgIAotICAgICAgICBTcGVjdWxhdGVEb3VibGVPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxk
MSgpKTsKKyAgICAgICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCBvcDEodGhpcywgbm9kZS0+Y2hp
bGQxKCkpOwogICAgICAgICBGUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwogICAgICAgICAKICAg
ICAgICAgbV9qaXQuYWJzRG91YmxlKG9wMS5mcHIoKSwgcmVzdWx0LmZwcigpKTsKLSAgICAgICAg
ZG91YmxlUmVzdWx0KHJlc3VsdC5mcHIoKSwgbV9jb21waWxlSW5kZXgpOworICAgICAgICBkb3Vi
bGVSZXN1bHQocmVzdWx0LmZwcigpLCBub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAg
ICAgICAKICAgICBjYXNlIEFyaXRoTWluOgogICAgIGNhc2UgQXJpdGhNYXg6IHsKLSAgICAgICAg
aWYgKE5vZGU6OnNob3VsZFNwZWN1bGF0ZUludGVnZXJGb3JBcml0aG1ldGljKGF0KG5vZGUuY2hp
bGQxKCkpLCBhdChub2RlLmNoaWxkMigpKSkKLSAgICAgICAgICAgICYmIG5vZGUuY2FuU3BlY3Vs
YXRlSW50ZWdlcigpKSB7Ci0gICAgICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQg
b3AxKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwotICAgICAgICAgICAgU3BlY3VsYXRlU3RyaWN0SW50
MzJPcGVyYW5kIG9wMih0aGlzLCBub2RlLmNoaWxkMigpKTsKKyAgICAgICAgaWYgKE5vZGU6OnNo
b3VsZFNwZWN1bGF0ZUludGVnZXJGb3JBcml0aG1ldGljKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwg
bm9kZS0+Y2hpbGQyKCkubm9kZSgpKQorICAgICAgICAgICAgJiYgbm9kZS0+Y2FuU3BlY3VsYXRl
SW50ZWdlcigpKSB7CisgICAgICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgb3Ax
KHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMy
T3BlcmFuZCBvcDIodGhpcywgbm9kZS0+Y2hpbGQyKCkpOwogICAgICAgICAgICAgR1BSVGVtcG9y
YXJ5IHJlc3VsdCh0aGlzLCBvcDEpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6SnVtcCBvcDFMZXNzID0gbV9qaXQuYnJhbmNoMzIob3AgPT0gQXJpdGhNaW4gPyBN
YWNyb0Fzc2VtYmxlcjo6TGVzc1RoYW4gOiBNYWNyb0Fzc2VtYmxlcjo6R3JlYXRlclRoYW4sIG9w
MS5ncHIoKSwgb3AyLmdwcigpKTsKQEAgLTI0NTEsMTIgKzI0NDMsMTIgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAgICAgfSBlbHNlCiAgICAgICAg
ICAgICAgICAgb3AxTGVzcy5saW5rKCZtX2ppdCk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAg
IGludGVnZXJSZXN1bHQocmVzdWx0LmdwcigpLCBtX2NvbXBpbGVJbmRleCk7CisgICAgICAgICAg
ICBpbnRlZ2VyUmVzdWx0KHJlc3VsdC5ncHIoKSwgbm9kZSk7CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCBvcDEo
dGhpcywgbm9kZS5jaGlsZDEoKSk7Ci0gICAgICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgb3Ay
KHRoaXMsIG5vZGUuY2hpbGQyKCkpOworICAgICAgICBTcGVjdWxhdGVEb3VibGVPcGVyYW5kIG9w
MSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQg
b3AyKHRoaXMsIG5vZGUtPmNoaWxkMigpKTsKICAgICAgICAgRlBSVGVtcG9yYXJ5IHJlc3VsdCh0
aGlzLCBvcDEpOwogICAgICAgICAKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGRv
bmU7CkBAIC0yNDg0LDE3ICsyNDc2LDE3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUo
Tm9kZSYgbm9kZSkKICAgICAgICAgCiAgICAgICAgIGRvbmUubGluaygmbV9qaXQpOwogICAgICAg
ICAKLSAgICAgICAgZG91YmxlUmVzdWx0KHJlc3VsdC5mcHIoKSwgbV9jb21waWxlSW5kZXgpOwor
ICAgICAgICBkb3VibGVSZXN1bHQocmVzdWx0LmZwcigpLCBub2RlKTsKICAgICAgICAgYnJlYWs7
CiAgICAgfQogICAgICAgICAKICAgICBjYXNlIEFyaXRoU3FydDogewotICAgICAgICBTcGVjdWxh
dGVEb3VibGVPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKKyAgICAgICAgU3BlY3Vs
YXRlRG91YmxlT3BlcmFuZCBvcDEodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICBGUFJU
ZW1wb3JhcnkgcmVzdWx0KHRoaXMsIG9wMSk7CiAgICAgICAgIAogICAgICAgICBtX2ppdC5zcXJ0
RG91YmxlKG9wMS5mcHIoKSwgcmVzdWx0LmZwcigpKTsKICAgICAgICAgCi0gICAgICAgIGRvdWJs
ZVJlc3VsdChyZXN1bHQuZnByKCksIG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAgZG91YmxlUmVz
dWx0KHJlc3VsdC5mcHIoKSwgbm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIApAQCAtMjUy
MywxMyArMjUxNSwxMyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUp
CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBDb21wYXJlRXE6Ci0gICAgICAgIGlmIChpc051
bGxDb25zdGFudChub2RlLmNoaWxkMSgpLmluZGV4KCkpKSB7Ci0gICAgICAgICAgICBpZiAobm9u
U3BlY3VsYXRpdmVDb21wYXJlTnVsbChub2RlLCBub2RlLmNoaWxkMigpKSkKKyAgICAgICAgaWYg
KGlzTnVsbENvbnN0YW50KG5vZGUtPmNoaWxkMSgpLm5vZGUoKSkpIHsKKyAgICAgICAgICAgIGlm
IChub25TcGVjdWxhdGl2ZUNvbXBhcmVOdWxsKG5vZGUsIG5vZGUtPmNoaWxkMigpKSkKICAgICAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAg
ICBpZiAoaXNOdWxsQ29uc3RhbnQobm9kZS5jaGlsZDIoKS5pbmRleCgpKSkgewotICAgICAgICAg
ICAgaWYgKG5vblNwZWN1bGF0aXZlQ29tcGFyZU51bGwobm9kZSwgbm9kZS5jaGlsZDEoKSkpCisg
ICAgICAgIGlmIChpc051bGxDb25zdGFudChub2RlLT5jaGlsZDIoKS5ub2RlKCkpKSB7CisgICAg
ICAgICAgICBpZiAobm9uU3BlY3VsYXRpdmVDb21wYXJlTnVsbChub2RlLCBub2RlLT5jaGlsZDEo
KSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IH0KQEAgLTI1NjUsMTUgKzI1NTcsMTUgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShO
b2RlJiBub2RlKQogICAgIH0KIAogICAgIGNhc2UgR2V0QnlWYWw6IHsKLSAgICAgICAgc3dpdGNo
IChub2RlLmFycmF5TW9kZSgpLnR5cGUoKSkgeworICAgICAgICBzd2l0Y2ggKG5vZGUtPmFycmF5
TW9kZSgpLnR5cGUoKSkgewogICAgICAgICBjYXNlIEFycmF5OjpTZWxlY3RVc2luZ1ByZWRpY3Rp
b25zOgogICAgICAgICBjYXNlIEFycmF5OjpGb3JjZUV4aXQ6CiAgICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgdGVybWluYXRlU3BlY3VsYXRpdmVF
eGVjdXRpb24oSW5hZGVxdWF0ZUNvdmVyYWdlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUpOworICAg
ICAgICAgICAgdGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oSW5hZGVxdWF0ZUNvdmVyYWdl
LCBKU1ZhbHVlUmVncygpLCAwKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEFy
cmF5OjpHZW5lcmljOiB7Ci0gICAgICAgICAgICBKU1ZhbHVlT3BlcmFuZCBiYXNlKHRoaXMsIG5v
ZGUuY2hpbGQxKCkpOwotICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgcHJvcGVydHkodGhpcywg
bm9kZS5jaGlsZDIoKSk7CisgICAgICAgICAgICBKU1ZhbHVlT3BlcmFuZCBiYXNlKHRoaXMsIG5v
ZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgIEpTVmFsdWVPcGVyYW5kIHByb3BlcnR5KHRoaXMs
IG5vZGUtPmNoaWxkMigpKTsKICAgICAgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIo
KTsKICAgICAgICAgICAgIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHByb3BlcnR5LmdwcigpOwogICAg
ICAgICAgICAgCkBAIC0yNTgxLDE0ICsyNTczLDE0IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgICAgIEdQUlJlc3VsdCByZXN1bHQodGhpcyk7CiAg
ICAgICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkdldEJ5VmFsLCByZXN1bHQuZ3ByKCks
IGJhc2VHUFIsIHByb3BlcnR5R1BSKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAganNWYWx1
ZVJlc3VsdChyZXN1bHQuZ3ByKCksIG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAgICAgIGpzVmFs
dWVSZXN1bHQocmVzdWx0LmdwcigpLCBub2RlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9CiAgICAgICAgIGNhc2UgQXJyYXk6OkludDMyOgogICAgICAgICBjYXNlIEFycmF5OjpDb250
aWd1b3VzOiB7Ci0gICAgICAgICAgICBpZiAobm9kZS5hcnJheU1vZGUoKS5pc0luQm91bmRzKCkp
IHsKLSAgICAgICAgICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVydHko
dGhpcywgbm9kZS5jaGlsZDIoKSk7Ci0gICAgICAgICAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3Rv
cmFnZSh0aGlzLCBub2RlLmNoaWxkMygpKTsKKyAgICAgICAgICAgIGlmIChub2RlLT5hcnJheU1v
ZGUoKS5pc0luQm91bmRzKCkpIHsKKyAgICAgICAgICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQz
Mk9wZXJhbmQgcHJvcGVydHkodGhpcywgbm9kZS0+Y2hpbGQyKCkpOworICAgICAgICAgICAgICAg
IFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgbm9kZS0+Y2hpbGQzKCkpOwogICAgICAgICAg
ICAgICAgIAogICAgICAgICAgICAgICAgIEdQUlJlZyBwcm9wZXJ0eVJlZyA9IHByb3BlcnR5Lmdw
cigpOwogICAgICAgICAgICAgICAgIEdQUlJlZyBzdG9yYWdlUmVnID0gc3RvcmFnZS5ncHIoKTsK
QEAgLTI1OTYsMTggKzI1ODgsMTggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2Rl
JiBub2RlKQogICAgICAgICAgICAgICAgIGlmICghbV9jb21waWxlT2theSkKICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIHNwZWN1
bGF0aW9uQ2hlY2soT3V0T2ZCb3VuZHMsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJh
bmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsIE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5n
dGgoKSkpKTsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE91dE9mQm91bmRzLCBK
U1ZhbHVlUmVncygpLCAwLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVx
dWFsLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQnV0
dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSkpOwogICAgICAgICAgICAgICAgIAogICAg
ICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CiAgICAgICAgICAgICAgICAg
bV9qaXQubG9hZDY0KE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVy
dHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0KSwgcmVzdWx0LmdwcigpKTsKLSAgICAg
ICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKExvYWRGcm9tSG9sZSwgSlNWYWx1ZVJlZ3MoKSwg
Tm9Ob2RlLCBtX2ppdC5icmFuY2hUZXN0NjQoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHJlc3VsdC5n
cHIoKSkpOwotICAgICAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0LmdwcigpLCBtX2Nv
bXBpbGVJbmRleCwgbm9kZS5hcnJheU1vZGUoKS50eXBlKCkgPT0gQXJyYXk6OkludDMyID8gRGF0
YUZvcm1hdEpTSW50ZWdlciA6IERhdGFGb3JtYXRKUyk7CisgICAgICAgICAgICAgICAgc3BlY3Vs
YXRpb25DaGVjayhMb2FkRnJvbUhvbGUsIEpTVmFsdWVSZWdzKCksIDAsIG1faml0LmJyYW5jaFRl
c3Q2NChNYWNyb0Fzc2VtYmxlcjo6WmVybywgcmVzdWx0LmdwcigpKSk7CisgICAgICAgICAgICAg
ICAganNWYWx1ZVJlc3VsdChyZXN1bHQuZ3ByKCksIG5vZGUsIG5vZGUtPmFycmF5TW9kZSgpLnR5
cGUoKSA9PSBBcnJheTo6SW50MzIgPyBEYXRhRm9ybWF0SlNJbnRlZ2VyIDogRGF0YUZvcm1hdEpT
KTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAot
ICAgICAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLmNoaWxkMSgp
KTsKLSAgICAgICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBwcm9wZXJ0eSh0aGlz
LCBub2RlLmNoaWxkMigpKTsKLSAgICAgICAgICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhp
cywgbm9kZS5jaGlsZDMoKSk7CisgICAgICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNl
KHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMy
T3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBub2RlLT5jaGlsZDIoKSk7CisgICAgICAgICAgICBTdG9y
YWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG5vZGUtPmNoaWxkMygpKTsKICAgICAgICAgICAgIAog
ICAgICAgICAgICAgR1BSUmVnIGJhc2VSZWcgPSBiYXNlLmdwcigpOwogICAgICAgICAgICAgR1BS
UmVnIHByb3BlcnR5UmVnID0gcHJvcGVydHkuZ3ByKCk7CkBAIC0yNjMxLDIxICsyNjIzLDIxIEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgICAgICAg
ICAgICAgc2xvd0Nhc2VzLCB0aGlzLCBvcGVyYXRpb25HZXRCeVZhbEFycmF5SW50LAogICAgICAg
ICAgICAgICAgICAgICByZXN1bHQuZ3ByKCksIGJhc2VSZWcsIHByb3BlcnR5UmVnKSk7CiAgICAg
ICAgICAgICAKLSAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0UmVnLCBtX2NvbXBpbGVJ
bmRleCk7CisgICAgICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFJlZywgbm9kZSk7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQogCiAgICAgICAgIGNhc2UgQXJyYXk6OkRvdWJsZTog
ewotICAgICAgICAgICAgaWYgKG5vZGUuYXJyYXlNb2RlKCkuaXNJbkJvdW5kcygpKSB7Ci0gICAg
ICAgICAgICAgICAgaWYgKG5vZGUuYXJyYXlNb2RlKCkuaXNTYW5lQ2hhaW4oKSkgewotICAgICAg
ICAgICAgICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbV9qaXQuZ2xvYmFs
T2JqZWN0Rm9yKG5vZGUuY29kZU9yaWdpbik7CisgICAgICAgICAgICBpZiAobm9kZS0+YXJyYXlN
b2RlKCkuaXNJbkJvdW5kcygpKSB7CisgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmFycmF5TW9k
ZSgpLmlzU2FuZUNoYWluKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCA9IG1faml0Lmdsb2JhbE9iamVjdEZvcihub2RlLT5jb2RlT3JpZ2luKTsK
ICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGdsb2JhbE9iamVjdC0+YXJyYXlQcm90b3R5cGVD
aGFpbklzU2FuZSgpKTsKICAgICAgICAgICAgICAgICAgICAgZ2xvYmFsT2JqZWN0LT5hcnJheVBy
b3RvdHlwZSgpLT5zdHJ1Y3R1cmUoKS0+YWRkVHJhbnNpdGlvbldhdGNocG9pbnQoc3BlY3VsYXRp
b25XYXRjaHBvaW50KCkpOwogICAgICAgICAgICAgICAgICAgICBnbG9iYWxPYmplY3QtPm9iamVj
dFByb3RvdHlwZSgpLT5zdHJ1Y3R1cmUoKS0+YWRkVHJhbnNpdGlvbldhdGNocG9pbnQoc3BlY3Vs
YXRpb25XYXRjaHBvaW50KCkpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAK
LSAgICAgICAgICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhp
cywgbm9kZS5jaGlsZDIoKSk7Ci0gICAgICAgICAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFn
ZSh0aGlzLCBub2RlLmNoaWxkMygpKTsKKyAgICAgICAgICAgICAgICBTcGVjdWxhdGVTdHJpY3RJ
bnQzMk9wZXJhbmQgcHJvcGVydHkodGhpcywgbm9kZS0+Y2hpbGQyKCkpOworICAgICAgICAgICAg
ICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgbm9kZS0+Y2hpbGQzKCkpOwogICAgICAg
ICAgICAgCiAgICAgICAgICAgICAgICAgR1BSUmVnIHByb3BlcnR5UmVnID0gcHJvcGVydHkuZ3By
KCk7CiAgICAgICAgICAgICAgICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigpOwpA
QCAtMjY1MywxOSArMjY0NSwxOSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUm
IG5vZGUpCiAgICAgICAgICAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQogICAgICAgICAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBzcGVjdWxhdGlv
bkNoZWNrKE91dE9mQm91bmRzLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaDMy
KE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkp
KSk7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhPdXRPZkJvdW5kcywgSlNWYWx1
ZVJlZ3MoKSwgMCwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwg
cHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEJ1dHRlcmZs
eTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAg
ICAgIEZQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CiAgICAgICAgICAgICAgICAgbV9qaXQubG9h
ZERvdWJsZShNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVn
LCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCksIHJlc3VsdC5mcHIoKSk7Ci0gICAgICAgICAg
ICAgICAgaWYgKCFub2RlLmFycmF5TW9kZSgpLmlzU2FuZUNoYWluKCkpCi0gICAgICAgICAgICAg
ICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soTG9hZEZyb21Ib2xlLCBKU1ZhbHVlUmVncygpLCBOb05v
ZGUsIG1faml0LmJyYW5jaERvdWJsZShNYWNyb0Fzc2VtYmxlcjo6RG91YmxlTm90RXF1YWxPclVu
b3JkZXJlZCwgcmVzdWx0LmZwcigpLCByZXN1bHQuZnByKCkpKTsKLSAgICAgICAgICAgICAgICBk
b3VibGVSZXN1bHQocmVzdWx0LmZwcigpLCBtX2NvbXBpbGVJbmRleCk7CisgICAgICAgICAgICAg
ICAgaWYgKCFub2RlLT5hcnJheU1vZGUoKS5pc1NhbmVDaGFpbigpKQorICAgICAgICAgICAgICAg
ICAgICBzcGVjdWxhdGlvbkNoZWNrKExvYWRGcm9tSG9sZSwgSlNWYWx1ZVJlZ3MoKSwgMCwgbV9q
aXQuYnJhbmNoRG91YmxlKE1hY3JvQXNzZW1ibGVyOjpEb3VibGVOb3RFcXVhbE9yVW5vcmRlcmVk
LCByZXN1bHQuZnByKCksIHJlc3VsdC5mcHIoKSkpOworICAgICAgICAgICAgICAgIGRvdWJsZVJl
c3VsdChyZXN1bHQuZnByKCksIG5vZGUpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgfQogCi0gICAgICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5v
ZGUuY2hpbGQxKCkpOwotICAgICAgICAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIHBy
b3BlcnR5KHRoaXMsIG5vZGUuY2hpbGQyKCkpOwotICAgICAgICAgICAgU3RvcmFnZU9wZXJhbmQg
c3RvcmFnZSh0aGlzLCBub2RlLmNoaWxkMygpKTsKKyAgICAgICAgICAgIFNwZWN1bGF0ZUNlbGxP
cGVyYW5kIGJhc2UodGhpcywgbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgU3BlY3VsYXRl
U3RyaWN0SW50MzJPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG5vZGUtPmNoaWxkMigpKTsKKyAgICAg
ICAgICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgbm9kZS0+Y2hpbGQzKCkpOwogICAg
ICAgICAgICAgCiAgICAgICAgICAgICBHUFJSZWcgYmFzZVJlZyA9IGJhc2UuZ3ByKCk7CiAgICAg
ICAgICAgICBHUFJSZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIoKTsKQEAgLTI2OTIsMTUg
KzI2ODQsMTUgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAg
ICAgICAgICAgICAgICAgICBzbG93Q2FzZXMsIHRoaXMsIG9wZXJhdGlvbkdldEJ5VmFsQXJyYXlJ
bnQsCiAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5ncHIoKSwgYmFzZVJlZywgcHJvcGVydHlS
ZWcpKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRSZWcs
IG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0UmVnLCBu
b2RlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBBcnJh
eTo6QXJyYXlTdG9yYWdlOgogICAgICAgICBjYXNlIEFycmF5OjpTbG93UHV0QXJyYXlTdG9yYWdl
OiB7Ci0gICAgICAgICAgICBpZiAobm9kZS5hcnJheU1vZGUoKS5pc0luQm91bmRzKCkpIHsKLSAg
ICAgICAgICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhpcywg
bm9kZS5jaGlsZDIoKSk7Ci0gICAgICAgICAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0
aGlzLCBub2RlLmNoaWxkMygpKTsKKyAgICAgICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS5p
c0luQm91bmRzKCkpIHsKKyAgICAgICAgICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJh
bmQgcHJvcGVydHkodGhpcywgbm9kZS0+Y2hpbGQyKCkpOworICAgICAgICAgICAgICAgIFN0b3Jh
Z2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgbm9kZS0+Y2hpbGQzKCkpOwogICAgICAgICAgICAgCiAg
ICAgICAgICAgICAgICAgR1BSUmVnIHByb3BlcnR5UmVnID0gcHJvcGVydHkuZ3ByKCk7CiAgICAg
ICAgICAgICAgICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigpOwpAQCAtMjcwOCwx
OSArMjcwMCwxOSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAg
ICAgICAgICAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQogICAgICAgICAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE91
dE9mQm91bmRzLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNz
ZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhzdG9yYWdlUmVnLCBBcnJheVN0b3JhZ2U6OnZlY3Rvckxlbmd0aE9mZnNldCgpKSkpOworICAg
ICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soT3V0T2ZCb3VuZHMsIEpTVmFsdWVSZWdzKCks
IDAsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5
UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBBcnJheVN0b3JhZ2U6OnZl
Y3Rvckxlbmd0aE9mZnNldCgpKSkpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgR1BS
VGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKICAgICAgICAgICAgICAgICBtX2ppdC5sb2FkNjQoTWFj
cm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3Nl
bWJsZXI6OlRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9y
WzBdKSksIHJlc3VsdC5ncHIoKSk7Ci0gICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhM
b2FkRnJvbUhvbGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoVGVzdDY0KE1h
Y3JvQXNzZW1ibGVyOjpaZXJvLCByZXN1bHQuZ3ByKCkpKTsKKyAgICAgICAgICAgICAgICBzcGVj
dWxhdGlvbkNoZWNrKExvYWRGcm9tSG9sZSwgSlNWYWx1ZVJlZ3MoKSwgMCwgbV9qaXQuYnJhbmNo
VGVzdDY0KE1hY3JvQXNzZW1ibGVyOjpaZXJvLCByZXN1bHQuZ3ByKCkpKTsKICAgICAgICAgICAg
IAotICAgICAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0LmdwcigpLCBtX2NvbXBpbGVJ
bmRleCk7CisgICAgICAgICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHQuZ3ByKCksIG5vZGUp
OwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBT
cGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwotICAgICAgICAg
ICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG5vZGUuY2hpbGQy
KCkpOwotICAgICAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBub2RlLmNoaWxk
MygpKTsKKyAgICAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS0+
Y2hpbGQxKCkpOworICAgICAgICAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIHByb3Bl
cnR5KHRoaXMsIG5vZGUtPmNoaWxkMigpKTsKKyAgICAgICAgICAgIFN0b3JhZ2VPcGVyYW5kIHN0
b3JhZ2UodGhpcywgbm9kZS0+Y2hpbGQzKCkpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBH
UFJSZWcgYmFzZVJlZyA9IGJhc2UuZ3ByKCk7CiAgICAgICAgICAgICBHUFJSZWcgcHJvcGVydHlS
ZWcgPSBwcm9wZXJ0eS5ncHIoKTsKQEAgLTI3NDQsNyArMjczNiw3IEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgICAgICAgICAgICAgc2xvd0Nhc2Vz
LCB0aGlzLCBvcGVyYXRpb25HZXRCeVZhbEFycmF5SW50LAogICAgICAgICAgICAgICAgICAgICBy
ZXN1bHQuZ3ByKCksIGJhc2VSZWcsIHByb3BlcnR5UmVnKSk7CiAgICAgICAgICAgICAKLSAgICAg
ICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0UmVnLCBtX2NvbXBpbGVJbmRleCk7CisgICAgICAg
ICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFJlZywgbm9kZSk7CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgfQogICAgICAgICBjYXNlIEFycmF5OjpTdHJpbmc6CkBAIC0yNzk0LDE4ICsyNzg2
LDE4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAg
RWRnZSBjaGlsZDMgPSBtX2ppdC5ncmFwaCgpLnZhckFyZ0NoaWxkKG5vZGUsIDIpOwogICAgICAg
ICBFZGdlIGNoaWxkNCA9IG1faml0LmdyYXBoKCkudmFyQXJnQ2hpbGQobm9kZSwgMyk7CiAgICAg
ICAgIAotICAgICAgICBBcnJheU1vZGUgYXJyYXlNb2RlID0gbm9kZS5hcnJheU1vZGUoKS5tb2Rl
Rm9yUHV0KCk7CisgICAgICAgIEFycmF5TW9kZSBhcnJheU1vZGUgPSBub2RlLT5hcnJheU1vZGUo
KS5tb2RlRm9yUHV0KCk7CiAgICAgICAgIGJvb2wgYWxyZWFkeUhhbmRsZWQgPSBmYWxzZTsKICAg
ICAgICAgCiAgICAgICAgIHN3aXRjaCAoYXJyYXlNb2RlLnR5cGUoKSkgewogICAgICAgICBjYXNl
IEFycmF5OjpTZWxlY3RVc2luZ1ByZWRpY3Rpb25zOgogICAgICAgICBjYXNlIEFycmF5OjpGb3Jj
ZUV4aXQ6CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAg
ICAgICAgdGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oSW5hZGVxdWF0ZUNvdmVyYWdlLCBK
U1ZhbHVlUmVncygpLCBOb05vZGUpOworICAgICAgICAgICAgdGVybWluYXRlU3BlY3VsYXRpdmVF
eGVjdXRpb24oSW5hZGVxdWF0ZUNvdmVyYWdlLCBKU1ZhbHVlUmVncygpLCAwKTsKICAgICAgICAg
ICAgIGFscmVhZHlIYW5kbGVkID0gdHJ1ZTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBj
YXNlIEFycmF5OjpHZW5lcmljOiB7Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChub2RlLm9w
KCkgPT0gUHV0QnlWYWwpOworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQobm9kZS0+b3AoKSA9
PSBQdXRCeVZhbCk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIEpTVmFsdWVPcGVyYW5kIGFy
ZzEodGhpcywgY2hpbGQxKTsKICAgICAgICAgICAgIEpTVmFsdWVPcGVyYW5kIGFyZzIodGhpcywg
Y2hpbGQyKTsKQEAgLTI4MTUsOSArMjgwNyw5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGUoTm9kZSYgbm9kZSkKICAgICAgICAgICAgIEdQUlJlZyBhcmczR1BSID0gYXJnMy5ncHIoKTsK
ICAgICAgICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAg
IGNhbGxPcGVyYXRpb24obV9qaXQuc3RyaWN0TW9kZUZvcihub2RlLmNvZGVPcmlnaW4pID8gb3Bl
cmF0aW9uUHV0QnlWYWxTdHJpY3QgOiBvcGVyYXRpb25QdXRCeVZhbE5vblN0cmljdCwgYXJnMUdQ
UiwgYXJnMkdQUiwgYXJnM0dQUik7CisgICAgICAgICAgICBjYWxsT3BlcmF0aW9uKG1faml0LnN0
cmljdE1vZGVGb3Iobm9kZS0+Y29kZU9yaWdpbikgPyBvcGVyYXRpb25QdXRCeVZhbFN0cmljdCA6
IG9wZXJhdGlvblB1dEJ5VmFsTm9uU3RyaWN0LCBhcmcxR1BSLCBhcmcyR1BSLCBhcmczR1BSKTsK
ICAgICAgICAgICAgIAotICAgICAgICAgICAgbm9SZXN1bHQobV9jb21waWxlSW5kZXgpOworICAg
ICAgICAgICAgbm9SZXN1bHQobm9kZSk7CiAgICAgICAgICAgICBhbHJlYWR5SGFuZGxlZCA9IHRy
dWU7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtMjg2MiwxMyArMjg1NCwxMyBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgICAgICBT
dG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIGNoaWxkNCk7CiAgICAgICAgICAgICBHUFJSZWcg
c3RvcmFnZVJlZyA9IHN0b3JhZ2UuZ3ByKCk7CiAKLSAgICAgICAgICAgIGlmIChub2RlLm9wKCkg
PT0gUHV0QnlWYWxBbGlhcykgeworICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gUHV0QnlW
YWxBbGlhcykgewogICAgICAgICAgICAgICAgIC8vIFN0b3JlIHRoZSB2YWx1ZSB0byB0aGUgYXJy
YXkuCiAgICAgICAgICAgICAgICAgR1BSUmVnIHByb3BlcnR5UmVnID0gcHJvcGVydHkuZ3ByKCk7
CiAgICAgICAgICAgICAgICAgR1BSUmVnIHZhbHVlUmVnID0gdmFsdWUuZ3ByKCk7CiAgICAgICAg
ICAgICAgICAgbV9qaXQuc3RvcmU2NCh2YWx1ZVJlZywgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRl
eChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQpKTsK
ICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBub1Jlc3VsdChtX2NvbXBpbGVJbmRl
eCk7CisgICAgICAgICAgICAgICAgbm9SZXN1bHQobm9kZSk7CiAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKQEAgLTI4NzksNyArMjg3MSw3IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgICAgIAogICAg
ICAgICAgICAgaWYgKGFycmF5TW9kZS5pc0luQm91bmRzKCkpIHsKICAgICAgICAgICAgICAgICBz
cGVjdWxhdGlvbkNoZWNrKAotICAgICAgICAgICAgICAgICAgICBTdG9yZVRvSG9sZU9yT3V0T2ZC
b3VuZHMsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwKKyAgICAgICAgICAgICAgICAgICAgU3RvcmVU
b0hvbGVPck91dE9mQm91bmRzLCBKU1ZhbHVlUmVncygpLCAwLAogICAgICAgICAgICAgICAgICAg
ICBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJl
ZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQnV0dGVyZmx5OjpvZmZzZXRP
ZlB1YmxpY0xlbmd0aCgpKSkpOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBpbkJvdW5kcyA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNz
ZW1ibGVyOjpCZWxvdywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3Jh
Z2VSZWcsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpOwpAQCAtMjg4Nyw3ICsy
ODc5LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAg
ICAgICAgICAgIHNsb3dDYXNlID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3Zl
T3JFcXVhbCwgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcs
IEJ1dHRlcmZseTo6b2Zmc2V0T2ZWZWN0b3JMZW5ndGgoKSkpOwogICAgICAgICAgICAgICAgIAog
ICAgICAgICAgICAgICAgIGlmICghYXJyYXlNb2RlLmlzT3V0T2ZCb3VuZHMoKSkKLSAgICAgICAg
ICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhPdXRPZkJvdW5kcywgSlNWYWx1ZVJlZ3MoKSwg
Tm9Ob2RlLCBzbG93Q2FzZSk7CisgICAgICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2so
T3V0T2ZCb3VuZHMsIEpTVmFsdWVSZWdzKCksIDAsIHNsb3dDYXNlKTsKICAgICAgICAgICAgICAg
ICAKICAgICAgICAgICAgICAgICBtX2ppdC5hZGQzMihUcnVzdGVkSW1tMzIoMSksIHByb3BlcnR5
UmVnLCB0ZW1wb3JhcnlSZWcpOwogICAgICAgICAgICAgICAgIG1faml0LnN0b3JlMzIodGVtcG9y
YXJ5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBCdXR0ZXJmbHk6Om9m
ZnNldE9mUHVibGljTGVuZ3RoKCkpKTsKQEAgLTI5MTAsNyArMjkwMiw3IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgICAgICAgICAgICAgICAgIE5v
UmVzdWx0LCBiYXNlUmVnLCBwcm9wZXJ0eVJlZywgdmFsdWVSZWcpKTsKICAgICAgICAgICAgIH0K
IAotICAgICAgICAgICAgbm9SZXN1bHQobV9jb21waWxlSW5kZXgsIFVzZUNoaWxkcmVuQ2FsbGVk
RXhwbGljaXRseSk7CisgICAgICAgICAgICBub1Jlc3VsdChub2RlLCBVc2VDaGlsZHJlbkNhbGxl
ZEV4cGxpY2l0bHkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAg
IApAQCAtMjkzNiwxMyArMjkyOCwxMyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5v
ZGUmIG5vZGUpCiAgICAgICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIGNoaWxk
NCk7CiAgICAgICAgICAgICBHUFJSZWcgc3RvcmFnZVJlZyA9IHN0b3JhZ2UuZ3ByKCk7CiAKLSAg
ICAgICAgICAgIGlmIChub2RlLm9wKCkgPT0gUHV0QnlWYWxBbGlhcykgeworICAgICAgICAgICAg
aWYgKG5vZGUtPm9wKCkgPT0gUHV0QnlWYWxBbGlhcykgewogICAgICAgICAgICAgICAgIC8vIFN0
b3JlIHRoZSB2YWx1ZSB0byB0aGUgYXJyYXkuCiAgICAgICAgICAgICAgICAgR1BSUmVnIHByb3Bl
cnR5UmVnID0gcHJvcGVydHkuZ3ByKCk7CiAgICAgICAgICAgICAgICAgR1BSUmVnIHZhbHVlUmVn
ID0gdmFsdWUuZ3ByKCk7CiAgICAgICAgICAgICAgICAgbV9qaXQuc3RvcmU2NCh2YWx1ZVJlZywg
TWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9B
c3NlbWJsZXI6OlRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVj
dG9yWzBdKSkpOwogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIG5vUmVzdWx0KG1f
Y29tcGlsZUluZGV4KTsKKyAgICAgICAgICAgICAgICBub1Jlc3VsdChub2RlKTsKICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIApAQCAtMjk1MywxNCAr
Mjk0NSwxNCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAKICAg
ICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGJleW9uZEFycmF5Qm91bmRzID0gbV9qaXQu
YnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsIE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEFycmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3Ro
T2Zmc2V0KCkpKTsKICAgICAgICAgICAgIGlmICghYXJyYXlNb2RlLmlzT3V0T2ZCb3VuZHMoKSkK
LSAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE91dE9mQm91bmRzLCBKU1ZhbHVlUmVn
cygpLCBOb05vZGUsIGJleW9uZEFycmF5Qm91bmRzKTsKKyAgICAgICAgICAgICAgICBzcGVjdWxh
dGlvbkNoZWNrKE91dE9mQm91bmRzLCBKU1ZhbHVlUmVncygpLCAwLCBiZXlvbmRBcnJheUJvdW5k
cyk7CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChi
ZXlvbmRBcnJheUJvdW5kcyk7CiAKICAgICAgICAgICAgIC8vIENoZWNrIGlmIHdlJ3JlIHdyaXRp
bmcgdG8gYSBob2xlOyBpZiBzbyBpbmNyZW1lbnQgbV9udW1WYWx1ZXNJblZlY3Rvci4KICAgICAg
ICAgICAgIGlmIChhcnJheU1vZGUuaXNJbkJvdW5kcygpKSB7CiAgICAgICAgICAgICAgICAgc3Bl
Y3VsYXRpb25DaGVjaygKLSAgICAgICAgICAgICAgICAgICAgU3RvcmVUb0hvbGUsIEpTVmFsdWVS
ZWdzKCksIE5vTm9kZSwKKyAgICAgICAgICAgICAgICAgICAgU3RvcmVUb0hvbGUsIEpTVmFsdWVS
ZWdzKCksIDAsCiAgICAgICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaFRlc3Q2NChNYWNyb0Fz
c2VtYmxlcjo6WmVybywgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9w
ZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihBcnJh
eVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSkpKTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAg
ICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbm90SG9sZVZhbHVlID0gbV9qaXQuYnJhbmNo
VGVzdDY0KE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4
KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgT0JK
RUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pKSk7CkBAIC0yOTk4LDcgKzI5
OTAsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAg
ICAgICAgICAgICAgICAgICBOb1Jlc3VsdCwgYmFzZVJlZywgcHJvcGVydHlSZWcsIHZhbHVlUmVn
KSk7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIG5vUmVzdWx0KG1fY29tcGlsZUluZGV4
LCBVc2VDaGlsZHJlbkNhbGxlZEV4cGxpY2l0bHkpOworICAgICAgICAgICAgbm9SZXN1bHQobm9k
ZSwgVXNlQ2hpbGRyZW5DYWxsZWRFeHBsaWNpdGx5KTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICB9CiAgICAgICAgICAgICAKQEAgLTMwMTYsMTIgKzMwMDgsMTIgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogCiAgICAgICAgICAgICAvLyBUd28gcmVhbGx5
IGxhbWUgY2hlY2tzLgogICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjaygKLSAgICAgICAgICAg
ICAgICBVbmNvdW50YWJsZSwgSlNWYWx1ZVNvdXJjZSgpLCBOb05vZGUsCisgICAgICAgICAgICAg
ICAgVW5jb3VudGFibGUsIEpTVmFsdWVTb3VyY2UoKSwgMCwKICAgICAgICAgICAgICAgICBtX2pp
dC5icmFuY2hQdHIoCiAgICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9y
RXF1YWwsIHByb3BlcnR5UmVnLAogICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhiYXNlUmVnLCBPQkpFQ1RfT0ZGU0VUT0YoQXJndW1lbnRzLCBtX251bUFyZ3VtZW50
cykpKSk7CiAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAotICAgICAgICAgICAgICAgIFVu
Y291bnRhYmxlLCBKU1ZhbHVlU291cmNlKCksIE5vTm9kZSwKKyAgICAgICAgICAgICAgICBVbmNv
dW50YWJsZSwgSlNWYWx1ZVNvdXJjZSgpLCAwLAogICAgICAgICAgICAgICAgIG1faml0LmJyYW5j
aFRlc3RQdHIoCiAgICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLAog
ICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcygKQEAgLTMwNDAsNyAr
MzAzMiw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAg
ICAgICAgICAgICAgICAgc2NyYXRjaFJlZywgc2NyYXRjaDJSZWcsIE1hY3JvQXNzZW1ibGVyOjpU
aW1lc0VpZ2h0LAogICAgICAgICAgICAgICAgICAgICBDYWxsRnJhbWU6OnRoaXNBcmd1bWVudE9m
ZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSAtIHNpemVvZihSZWdpc3RlcikpKTsKICAgICAgICAg
ICAgIAotICAgICAgICAgICAgbm9SZXN1bHQobV9jb21waWxlSW5kZXgpOworICAgICAgICAgICAg
bm9SZXN1bHQobm9kZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAg
ICAgCkBAIC0zMDkxLDkgKzMwODMsOSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5v
ZGUmIG5vZGUpCiAgICAgY2FzZSBSZWdFeHBFeGVjOiB7CiAgICAgICAgIGlmIChjb21waWxlUmVn
RXhwRXhlYyhub2RlKSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgaWYgKCFub2RlLmFk
anVzdGVkUmVmQ291bnQoKSkgewotICAgICAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFz
ZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKLSAgICAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5k
IGFyZ3VtZW50KHRoaXMsIG5vZGUuY2hpbGQyKCkpOworICAgICAgICBpZiAoIW5vZGUtPmFkanVz
dGVkUmVmQ291bnQoKSkgeworICAgICAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0
aGlzLCBub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBh
cmd1bWVudCh0aGlzLCBub2RlLT5jaGlsZDIoKSk7CiAgICAgICAgICAgICBHUFJSZWcgYmFzZUdQ
UiA9IGJhc2UuZ3ByKCk7CiAgICAgICAgICAgICBHUFJSZWcgYXJndW1lbnRHUFIgPSBhcmd1bWVu
dC5ncHIoKTsKICAgICAgICAgICAgIApAQCAtMzEwMywxMiArMzA5NSwxMiBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgICAgICAKICAgICAgICAgICAg
IC8vIE11c3QgdXNlIGpzVmFsdWVSZXN1bHQgYmVjYXVzZSBvdGhlcndpc2Ugd2Ugc2NyZXcgdXAg
cmVnaXN0ZXIKICAgICAgICAgICAgIC8vIGFsbG9jYXRpb24sIHdoaWNoIHRoaW5rcyB0aGF0IHRo
aXMgbm9kZSBoYXMgYSByZXN1bHQuCi0gICAgICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdC5n
cHIoKSwgbV9jb21waWxlSW5kZXgpOworICAgICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHQu
Z3ByKCksIG5vZGUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIAotICAgICAgICBT
cGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwotICAgICAgICBT
cGVjdWxhdGVDZWxsT3BlcmFuZCBhcmd1bWVudCh0aGlzLCBub2RlLmNoaWxkMigpKTsKKyAgICAg
ICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CisgICAg
ICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGFyZ3VtZW50KHRoaXMsIG5vZGUtPmNoaWxkMigpKTsK
ICAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOwogICAgICAgICBHUFJSZWcgYXJn
dW1lbnRHUFIgPSBhcmd1bWVudC5ncHIoKTsKICAgICAgICAgCkBAIC0zMTE2LDEzICszMTA4LDEz
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgR1BS
UmVzdWx0IHJlc3VsdCh0aGlzKTsKICAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25SZWdF
eHBFeGVjLCByZXN1bHQuZ3ByKCksIGJhc2VHUFIsIGFyZ3VtZW50R1BSKTsKICAgICAgICAgCi0g
ICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0LmdwcigpLCBtX2NvbXBpbGVJbmRleCk7CisgICAg
ICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0LmdwcigpLCBub2RlKTsKICAgICAgICAgYnJlYWs7CiAg
ICAgfQogCiAgICAgY2FzZSBSZWdFeHBUZXN0OiB7Ci0gICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVy
YW5kIGJhc2UodGhpcywgbm9kZS5jaGlsZDEoKSk7Ci0gICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVy
YW5kIGFyZ3VtZW50KHRoaXMsIG5vZGUuY2hpbGQyKCkpOworICAgICAgICBTcGVjdWxhdGVDZWxs
T3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgU3BlY3VsYXRlQ2Vs
bE9wZXJhbmQgYXJndW1lbnQodGhpcywgbm9kZS0+Y2hpbGQyKCkpOwogICAgICAgICBHUFJSZWcg
YmFzZUdQUiA9IGJhc2UuZ3ByKCk7CiAgICAgICAgIEdQUlJlZyBhcmd1bWVudEdQUiA9IGFyZ3Vt
ZW50LmdwcigpOwogICAgICAgICAKQEAgLTMxMzIsMzcgKzMxMjQsMzcgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAKICAgICAgICAgLy8gSWYgd2Ug
YWRkIGEgRGF0YUZvcm1hdEJvb2wsIHdlIHNob3VsZCB1c2UgaXQgaGVyZS4KICAgICAgICAgbV9q
aXQub3IzMihUcnVzdGVkSW1tMzIoVmFsdWVGYWxzZSksIHJlc3VsdC5ncHIoKSk7Ci0gICAgICAg
IGpzVmFsdWVSZXN1bHQocmVzdWx0LmdwcigpLCBtX2NvbXBpbGVJbmRleCwgRGF0YUZvcm1hdEpT
Qm9vbGVhbik7CisgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0LmdwcigpLCBub2RlLCBEYXRh
Rm9ybWF0SlNCb29sZWFuKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKICAgICBj
YXNlIEFycmF5UHVzaDogewotICAgICAgICBBU1NFUlQobm9kZS5hcnJheU1vZGUoKS5pc0pTQXJy
YXkoKSk7CisgICAgICAgIEFTU0VSVChub2RlLT5hcnJheU1vZGUoKS5pc0pTQXJyYXkoKSk7CiAg
ICAgICAgIAotICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUuY2hp
bGQxKCkpOworICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUtPmNo
aWxkMSgpKTsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHN0b3JhZ2VMZW5ndGgodGhpcyk7CiAgICAg
ICAgIAogICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7CiAgICAgICAgIEdQUlJl
ZyBzdG9yYWdlTGVuZ3RoR1BSID0gc3RvcmFnZUxlbmd0aC5ncHIoKTsKICAgICAgICAgCi0gICAg
ICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgbm9kZS5jaGlsZDMoKSk7CisgICAgICAg
IFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgbm9kZS0+Y2hpbGQzKCkpOwogICAgICAgICBH
UFJSZWcgc3RvcmFnZUdQUiA9IHN0b3JhZ2UuZ3ByKCk7CiAKLSAgICAgICAgc3dpdGNoIChub2Rl
LmFycmF5TW9kZSgpLnR5cGUoKSkgeworICAgICAgICBzd2l0Y2ggKG5vZGUtPmFycmF5TW9kZSgp
LnR5cGUoKSkgewogICAgICAgICBjYXNlIEFycmF5OjpJbnQzMjoKICAgICAgICAgY2FzZSBBcnJh
eTo6Q29udGlndW91czogewotICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywg
bm9kZS5jaGlsZDIoKSk7CisgICAgICAgICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBu
b2RlLT5jaGlsZDIoKSk7CiAgICAgICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZS5ncHIo
KTsKIAotICAgICAgICAgICAgaWYgKG5vZGUuYXJyYXlNb2RlKCkudHlwZSgpID09IEFycmF5OjpJ
bnQzMiAmJiAhaXNJbnQzMlNwZWN1bGF0aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMigp
KS5tX3R5cGUpKSB7CisgICAgICAgICAgICBpZiAobm9kZS0+YXJyYXlNb2RlKCkudHlwZSgpID09
IEFycmF5OjpJbnQzMiAmJiAhaXNJbnQzMlNwZWN1bGF0aW9uKG1fc3RhdGUuZm9yTm9kZShub2Rl
LT5jaGlsZDIoKSkubV90eXBlKSkgewogICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2so
Ci0gICAgICAgICAgICAgICAgICAgIEJhZFR5cGUsIEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwgbm9k
ZS5jaGlsZDIoKSwKKyAgICAgICAgICAgICAgICAgICAgQmFkVHlwZSwgSlNWYWx1ZVJlZ3ModmFs
dWVHUFIpLCBub2RlLT5jaGlsZDIoKSwKICAgICAgICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNo
NjQoTWFjcm9Bc3NlbWJsZXI6OkJlbG93LCB2YWx1ZUdQUiwgR1BSSW5mbzo6dGFnVHlwZU51bWJl
clJlZ2lzdGVyKSk7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmIChub2RlLmFycmF5
TW9kZSgpLnR5cGUoKSAhPSBBcnJheTo6SW50MzIgJiYgSGVhcDo6aXNXcml0ZUJhcnJpZXJFbmFi
bGVkKCkpIHsKKyAgICAgICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS50eXBlKCkgIT0gQXJy
YXk6OkludDMyICYmIEhlYXA6OmlzV3JpdGVCYXJyaWVyRW5hYmxlZCgpKSB7CiAgICAgICAgICAg
ICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7Ci0gICAgICAgICAgICAgICAgd3JpdGVC
YXJyaWVyKGJhc2VHUFIsIHZhbHVlR1BSLCBub2RlLmNoaWxkMigpLCBXcml0ZUJhcnJpZXJGb3JQ
cm9wZXJ0eUFjY2Vzcywgc2NyYXRjaC5ncHIoKSwgc3RvcmFnZUxlbmd0aEdQUik7CisgICAgICAg
ICAgICAgICAgd3JpdGVCYXJyaWVyKGJhc2VHUFIsIHZhbHVlR1BSLCBub2RlLT5jaGlsZDIoKSwg
V3JpdGVCYXJyaWVyRm9yUHJvcGVydHlBY2Nlc3MsIHNjcmF0Y2guZ3ByKCksIHN0b3JhZ2VMZW5n
dGhHUFIpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgICAgICBtX2ppdC5s
b2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgQnV0dGVyZmx5OjpvZmZz
ZXRPZlB1YmxpY0xlbmd0aCgpKSwgc3RvcmFnZUxlbmd0aEdQUik7CkBAIC0zMTc3LDE5ICszMTY5
LDE5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAg
ICAgICAgICAgICAgc2xvd1BhdGgsIHRoaXMsIG9wZXJhdGlvbkFycmF5UHVzaCwgTm9SZXN1bHQs
IHN0b3JhZ2VMZW5ndGhHUFIsCiAgICAgICAgICAgICAgICAgICAgIHZhbHVlR1BSLCBiYXNlR1BS
KSk7CiAgICAgICAgIAotICAgICAgICAgICAganNWYWx1ZVJlc3VsdChzdG9yYWdlTGVuZ3RoR1BS
LCBtX2NvbXBpbGVJbmRleCk7CisgICAgICAgICAgICBqc1ZhbHVlUmVzdWx0KHN0b3JhZ2VMZW5n
dGhHUFIsIG5vZGUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAg
IAogICAgICAgICBjYXNlIEFycmF5OjpEb3VibGU6IHsKLSAgICAgICAgICAgIFNwZWN1bGF0ZURv
dWJsZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS5jaGlsZDIoKSk7CisgICAgICAgICAgICBTcGVj
dWxhdGVEb3VibGVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUtPmNoaWxkMigpKTsKICAgICAgICAg
ICAgIEZQUlJlZyB2YWx1ZUZQUiA9IHZhbHVlLmZwcigpOwogCi0gICAgICAgICAgICBpZiAoIWlz
UmVhbE51bWJlclNwZWN1bGF0aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMigpKS5tX3R5
cGUpKSB7CisgICAgICAgICAgICBpZiAoIWlzUmVhbE51bWJlclNwZWN1bGF0aW9uKG1fc3RhdGUu
Zm9yTm9kZShub2RlLT5jaGlsZDIoKSkubV90eXBlKSkgewogICAgICAgICAgICAgICAgIC8vIEZJ
WE1FOiBXZSBuZWVkIGEgd2F5IG9mIHByb2ZpbGluZyB0aGVzZSwgYW5kIHdlIG5lZWQgdG8gaG9p
c3QgdGhlbSBpbnRvCiAgICAgICAgICAgICAgICAgLy8gU3BlY3VsYXRlRG91YmxlT3BlcmFuZC4K
ICAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAotICAgICAgICAgICAgICAgICAgICBC
YWRUeXBlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsCisgICAgICAgICAgICAgICAgICAgIEJhZFR5
cGUsIEpTVmFsdWVSZWdzKCksIDAsCiAgICAgICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaERv
dWJsZShNYWNyb0Fzc2VtYmxlcjo6RG91YmxlTm90RXF1YWxPclVub3JkZXJlZCwgdmFsdWVGUFIs
IHZhbHVlRlBSKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKQEAgLTMyMDUsMjMgKzMx
OTcsMjMgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAg
ICAgICAgICAgICAgICBzbG93UGF0aCwgdGhpcywgb3BlcmF0aW9uQXJyYXlQdXNoRG91YmxlLCBO
b1Jlc3VsdCwgc3RvcmFnZUxlbmd0aEdQUiwKICAgICAgICAgICAgICAgICAgICAgdmFsdWVGUFIs
IGJhc2VHUFIpKTsKICAgICAgICAgCi0gICAgICAgICAgICBqc1ZhbHVlUmVzdWx0KHN0b3JhZ2VM
ZW5ndGhHUFIsIG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQoc3Rv
cmFnZUxlbmd0aEdQUiwgbm9kZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAg
ICAgICAgICAgCiAgICAgICAgIGNhc2UgQXJyYXk6OkFycmF5U3RvcmFnZTogewotICAgICAgICAg
ICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS5jaGlsZDIoKSk7CisgICAgICAgICAg
ICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLT5jaGlsZDIoKSk7CiAgICAgICAgICAg
ICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZS5ncHIoKTsKIAogICAgICAgICAgICAgaWYgKEhlYXA6
OmlzV3JpdGVCYXJyaWVyRW5hYmxlZCgpKSB7CiAgICAgICAgICAgICAgICAgR1BSVGVtcG9yYXJ5
IHNjcmF0Y2godGhpcyk7Ci0gICAgICAgICAgICAgICAgd3JpdGVCYXJyaWVyKGJhc2VHUFIsIHZh
bHVlR1BSLCBub2RlLmNoaWxkMigpLCBXcml0ZUJhcnJpZXJGb3JQcm9wZXJ0eUFjY2Vzcywgc2Ny
YXRjaC5ncHIoKSwgc3RvcmFnZUxlbmd0aEdQUik7CisgICAgICAgICAgICAgICAgd3JpdGVCYXJy
aWVyKGJhc2VHUFIsIHZhbHVlR1BSLCBub2RlLT5jaGlsZDIoKSwgV3JpdGVCYXJyaWVyRm9yUHJv
cGVydHlBY2Nlc3MsIHNjcmF0Y2guZ3ByKCksIHN0b3JhZ2VMZW5ndGhHUFIpOwogICAgICAgICAg
ICAgfQogCiAgICAgICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
c3RvcmFnZUdQUiwgQXJyYXlTdG9yYWdlOjpsZW5ndGhPZmZzZXQoKSksIHN0b3JhZ2VMZW5ndGhH
UFIpOwogICAgICAgICAKICAgICAgICAgICAgIC8vIFJlZnVzZSB0byBoYW5kbGUgYml6YXJyZSBs
ZW5ndGhzLgotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhVbmNvdW50YWJsZSwgSlNWYWx1
ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmUsIHN0
b3JhZ2VMZW5ndGhHUFIsIFRydXN0ZWRJbW0zMigweDdmZmZmZmZlKSkpOworICAgICAgICAgICAg
c3BlY3VsYXRpb25DaGVjayhVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgMCwgbV9qaXQuYnJh
bmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlLCBzdG9yYWdlTGVuZ3RoR1BSLCBUcnVzdGVkSW1t
MzIoMHg3ZmZmZmZmZSkpKTsKICAgICAgICAgCiAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
SnVtcCBzbG93UGF0aCA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1
YWwsIHN0b3JhZ2VMZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIs
IEFycmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKTsKICAgICAgICAgCkBAIC0zMjM3
LDcgKzMyMjksNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAg
ICAgICAgICAgICAgICAgICAgIHNsb3dQYXRoLCB0aGlzLCBvcGVyYXRpb25BcnJheVB1c2gsIE5v
UmVzdWx0LCBzdG9yYWdlTGVuZ3RoR1BSLAogICAgICAgICAgICAgICAgICAgICB2YWx1ZUdQUiwg
YmFzZUdQUikpOwogICAgICAgICAKLSAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQoc3RvcmFnZUxl
bmd0aEdQUiwgbV9jb21waWxlSW5kZXgpOworICAgICAgICAgICAganNWYWx1ZVJlc3VsdChzdG9y
YWdlTGVuZ3RoR1BSLCBub2RlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAg
ICAgICAgICAKQEAgLTMyNDksMTAgKzMyNDEsMTAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZShOb2RlJiBub2RlKQogICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBBcnJheVBvcDogewot
ICAgICAgICBBU1NFUlQobm9kZS5hcnJheU1vZGUoKS5pc0pTQXJyYXkoKSk7CisgICAgICAgIEFT
U0VSVChub2RlLT5hcnJheU1vZGUoKS5pc0pTQXJyYXkoKSk7CiAKLSAgICAgICAgU3BlY3VsYXRl
Q2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKLSAgICAgICAgU3RvcmFnZU9w
ZXJhbmQgc3RvcmFnZSh0aGlzLCBub2RlLmNoaWxkMigpKTsKKyAgICAgICAgU3BlY3VsYXRlQ2Vs
bE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIFN0b3JhZ2VPcGVy
YW5kIHN0b3JhZ2UodGhpcywgbm9kZS0+Y2hpbGQyKCkpOwogICAgICAgICBHUFJUZW1wb3Jhcnkg
dmFsdWUodGhpcyk7CiAgICAgICAgIEdQUlRlbXBvcmFyeSBzdG9yYWdlTGVuZ3RoKHRoaXMpOwog
ICAgICAgICBGUFJUZW1wb3JhcnkgdGVtcCh0aGlzKTsgLy8gVGhpcyBpcyBraW5kIG9mIGxhbWUs
IHNpbmNlIHdlIGRvbid0IGFsd2F5cyBuZWVkIGl0LiBJJ20gcmVseWluZyBvbiB0aGUgZmFjdCB0
aGF0IHdlIGRvbid0IGhhdmUgRlBSIHByZXNzdXJlLCBlc3BlY2lhbGx5IGluIGNvZGUgdGhhdCB1
c2VzIHBvcCgpLgpAQCAtMzI2Myw3ICszMjU1LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZShOb2RlJiBub2RlKQogICAgICAgICBHUFJSZWcgc3RvcmFnZUxlbmd0aEdQUiA9IHN0b3Jh
Z2VMZW5ndGguZ3ByKCk7CiAgICAgICAgIEZQUlJlZyB0ZW1wRlBSID0gdGVtcC5mcHIoKTsKICAg
ICAgICAgCi0gICAgICAgIHN3aXRjaCAobm9kZS5hcnJheU1vZGUoKS50eXBlKCkpIHsKKyAgICAg
ICAgc3dpdGNoIChub2RlLT5hcnJheU1vZGUoKS50eXBlKCkpIHsKICAgICAgICAgY2FzZSBBcnJh
eTo6SW50MzI6CiAgICAgICAgIGNhc2UgQXJyYXk6OkRvdWJsZToKICAgICAgICAgY2FzZSBBcnJh
eTo6Q29udGlndW91czogewpAQCAtMzI3NSw3ICszMjY3LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAgICAgbV9qaXQuc3RvcmUzMigKICAgICAg
ICAgICAgICAgICBzdG9yYWdlTGVuZ3RoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9y
YWdlR1BSLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpKTsKICAgICAgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpKdW1wIHNsb3dDYXNlOwotICAgICAgICAgICAgaWYgKG5vZGUuYXJy
YXlNb2RlKCkudHlwZSgpID09IEFycmF5OjpEb3VibGUpIHsKKyAgICAgICAgICAgIGlmIChub2Rl
LT5hcnJheU1vZGUoKS50eXBlKCkgPT0gQXJyYXk6OkRvdWJsZSkgewogICAgICAgICAgICAgICAg
IG1faml0LmxvYWREb3VibGUoCiAgICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpC
YXNlSW5kZXgoc3RvcmFnZUdQUiwgc3RvcmFnZUxlbmd0aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRp
bWVzRWlnaHQpLAogICAgICAgICAgICAgICAgICAgICB0ZW1wRlBSKTsKQEAgLTMzMDUsNyArMzI5
Nyw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAg
ICAgICAgICAgICAgc2xvd0Nhc2UsIHRoaXMsIG9wZXJhdGlvbkFycmF5UG9wQW5kUmVjb3Zlckxl
bmd0aCwgdmFsdWVHUFIsIGJhc2VHUFIpKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgLy8g
V2UgY2FuJ3Qga25vdyBmb3Igc3VyZSB0aGF0IHRoZSByZXN1bHQgaXMgYW4gaW50IGJlY2F1c2Ug
b2YgdGhlIHNsb3cgcGF0aHMuIDotLwotICAgICAgICAgICAganNWYWx1ZVJlc3VsdCh2YWx1ZUdQ
UiwgbV9jb21waWxlSW5kZXgpOworICAgICAgICAgICAganNWYWx1ZVJlc3VsdCh2YWx1ZUdQUiwg
bm9kZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCkBAIC0z
MzM3LDcgKzMzMjksNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUp
CiAgICAgICAgICAgICAgICAgc2xvd1BhdGhDYWxsKAogICAgICAgICAgICAgICAgICAgICBzbG93
Q2FzZXMsIHRoaXMsIG9wZXJhdGlvbkFycmF5UG9wLCB2YWx1ZUdQUiwgYmFzZUdQUikpOwogCi0g
ICAgICAgICAgICBqc1ZhbHVlUmVzdWx0KHZhbHVlR1BSLCBtX2NvbXBpbGVJbmRleCk7CisgICAg
ICAgICAgICBqc1ZhbHVlUmVzdWx0KHZhbHVlR1BSLCBub2RlKTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9CiAgICAgICAgICAgICAKQEAgLTMzNDksMTggKzMzNDEsMTggQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgIH0KIAogICAgIGNhc2UgREZH
OjpKdW1wOiB7Ci0gICAgICAgIEJsb2NrSW5kZXggdGFrZW4gPSBub2RlLnRha2VuQmxvY2tJbmRl
eCgpOworICAgICAgICBCbG9ja0luZGV4IHRha2VuID0gbm9kZS0+dGFrZW5CbG9ja0luZGV4KCk7
CiAgICAgICAgIGp1bXAodGFrZW4pOwotICAgICAgICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCk7
CisgICAgICAgIG5vUmVzdWx0KG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9CiAKICAgICBj
YXNlIEJyYW5jaDoKLSAgICAgICAgaWYgKGF0KG5vZGUuY2hpbGQxKCkpLnNob3VsZFNwZWN1bGF0
ZUludGVnZXIoKSkgewotICAgICAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AodGhp
cywgbm9kZS5jaGlsZDEoKSk7CisgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3Bl
Y3VsYXRlSW50ZWdlcigpKSB7CisgICAgICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBv
cCh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIEJsb2Nr
SW5kZXggdGFrZW4gPSBub2RlLnRha2VuQmxvY2tJbmRleCgpOwotICAgICAgICAgICAgQmxvY2tJ
bmRleCBub3RUYWtlbiA9IG5vZGUubm90VGFrZW5CbG9ja0luZGV4KCk7CisgICAgICAgICAgICBC
bG9ja0luZGV4IHRha2VuID0gbm9kZS0+dGFrZW5CbG9ja0luZGV4KCk7CisgICAgICAgICAgICBC
bG9ja0luZGV4IG5vdFRha2VuID0gbm9kZS0+bm90VGFrZW5CbG9ja0luZGV4KCk7CiAgICAgICAg
ICAgICAKICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpSZXN1bHRDb25kaXRpb24gY29uZGl0
aW9uID0gTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm87CiAgICAgICAgICAgICAKQEAgLTMzNzQsNyAr
MzM2Niw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAg
ICAgICAgIGJyYW5jaFRlc3QzMihjb25kaXRpb24sIG9wLmdwcigpLCB0YWtlbik7CiAgICAgICAg
ICAgICBqdW1wKG5vdFRha2VuKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgbm9SZXN1bHQo
bV9jb21waWxlSW5kZXgpOworICAgICAgICAgICAgbm9SZXN1bHQobm9kZSk7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgfQogICAgICAgICBlbWl0QnJhbmNoKG5vZGUpOwpAQCAtMzM5MSw3
ICszMzgzLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogI2Vu
ZGlmCiAKICAgICAgICAgLy8gUmV0dXJuIHRoZSByZXN1bHQgaW4gcmV0dXJuVmFsdWVHUFIuCi0g
ICAgICAgIEpTVmFsdWVPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKKyAgICAgICAg
SlNWYWx1ZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgbV9qaXQu
bW92ZShvcDEuZ3ByKCksIEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKIAogICAgICAgICAvLyBH
cmFiIHRoZSByZXR1cm4gYWRkcmVzcy4KQEAgLTM0MDIsNyArMzM5NCw3IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgbV9qaXQucmVzdG9yZVJldHVy
bkFkZHJlc3NCZWZvcmVSZXR1cm4oR1BSSW5mbzo6cmVnVDEpOwogICAgICAgICBtX2ppdC5yZXQo
KTsKICAgICAgICAgCi0gICAgICAgIG5vUmVzdWx0KG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAg
bm9SZXN1bHQobm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCkBAIC0zNDEw
LDI5ICszNDAyLDI5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkK
ICAgICBjYXNlIFRocm93UmVmZXJlbmNlRXJyb3I6IHsKICAgICAgICAgLy8gV2UgZXhwZWN0IHRo
YXQgdGhyb3cgc3RhdGVtZW50cyBhcmUgcmFyZSBhbmQgYXJlIGludGVuZGVkIHRvIGV4aXQgdGhl
IGNvZGUgYmxvY2sKICAgICAgICAgLy8gYW55d2F5LCBzbyB3ZSBqdXN0IE9TUiBiYWNrIHRvIHRo
ZSBvbGQgSklUIGZvciBub3cuCi0gICAgICAgIHRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9u
KFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUpOworICAgICAgICB0ZXJtaW5hdGVT
cGVjdWxhdGl2ZUV4ZWN1dGlvbihVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgMCk7CiAgICAg
ICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBUb1ByaW1pdGl2ZTogewotICAg
ICAgICBpZiAoYXQobm9kZS5jaGlsZDEoKSkuc2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKSB7Cisg
ICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKSB7CiAg
ICAgICAgICAgICAvLyBJdCdzIHJlYWxseSBwcm9maXRhYmxlIHRvIHNwZWN1bGF0ZSBpbnRlZ2Vy
LCBzaW5jZSBpdCdzIHJlYWxseSBjaGVhcCwKICAgICAgICAgICAgIC8vIGl0IG1lYW5zIHdlIGRv
bid0IGhhdmUgdG8gZG8gYW55IHJlYWwgd29yaywgYW5kIHdlIGVtaXQgYSBsb3QgbGVzcyBjb2Rl
LgogICAgICAgICAgICAgCi0gICAgICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDEo
dGhpcywgbm9kZS5jaGlsZDEoKSk7CisgICAgICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFu
ZCBvcDEodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJl
c3VsdCh0aGlzLCBvcDEpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBtX2ppdC5tb3ZlKG9w
MS5ncHIoKSwgcmVzdWx0LmdwcigpKTsKICAgICAgICAgICAgIGlmIChvcDEuZm9ybWF0KCkgPT0g
RGF0YUZvcm1hdEludGVnZXIpCiAgICAgICAgICAgICAgICAgbV9qaXQub3I2NChHUFJJbmZvOjp0
YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIHJlc3VsdC5ncHIoKSk7CiAgICAgICAgICAgICAKLSAgICAg
ICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0LmdwcigpLCBtX2NvbXBpbGVJbmRleCk7CisgICAg
ICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdC5ncHIoKSwgbm9kZSk7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgLy8gRklYTUU6IEFkZCBzdHJpbmcg
c3BlY3VsYXRpb24gaGVyZS4KICAgICAgICAgCi0gICAgICAgIEpTVmFsdWVPcGVyYW5kIG9wMSh0
aGlzLCBub2RlLmNoaWxkMSgpKTsKKyAgICAgICAgSlNWYWx1ZU9wZXJhbmQgb3AxKHRoaXMsIG5v
ZGUtPmNoaWxkMSgpKTsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBvcDEpOwog
ICAgICAgICAKICAgICAgICAgR1BSUmVnIG9wMUdQUiA9IG9wMS5ncHIoKTsKQEAgLTM0NDAsNyAr
MzQzMiw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAg
ICAgCiAgICAgICAgIG9wMS51c2UoKTsKICAgICAgICAgCi0gICAgICAgIGlmICghKG1fc3RhdGUu
Zm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUgJiB+KFNwZWNOdW1iZXIgfCBTcGVjQm9vbGVh
bikpKQorICAgICAgICBpZiAoIShtX3N0YXRlLmZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fdHlw
ZSAmIH4oU3BlY051bWJlciB8IFNwZWNCb29sZWFuKSkpCiAgICAgICAgICAgICBtX2ppdC5tb3Zl
KG9wMUdQUiwgcmVzdWx0R1BSKTsKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6SnVtcCBhbHJlYWR5UHJpbWl0aXZlID0gbV9qaXQuYnJhbmNoVGVzdDY0KE1hY3Jv
QXNzZW1ibGVyOjpOb25aZXJvLCBvcDFHUFIsIEdQUkluZm86OnRhZ01hc2tSZWdpc3Rlcik7CkBA
IC0zNDUzLDI0ICszNDQ1LDI0IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYg
bm9kZSkKICAgICAgICAgICAgICAgICBzbG93UGF0aENhbGwobm90UHJpbWl0aXZlLCB0aGlzLCBv
cGVyYXRpb25Ub1ByaW1pdGl2ZSwgcmVzdWx0R1BSLCBvcDFHUFIpKTsKICAgICAgICAgfQogICAg
ICAgICAKLSAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRHUFIsIG1fY29tcGlsZUluZGV4LCBV
c2VDaGlsZHJlbkNhbGxlZEV4cGxpY2l0bHkpOworICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3Vs
dEdQUiwgbm9kZSwgVXNlQ2hpbGRyZW5DYWxsZWRFeHBsaWNpdGx5KTsKICAgICAgICAgYnJlYWs7
CiAgICAgfQogICAgICAgICAKICAgICBjYXNlIE5ld0FycmF5OiB7Ci0gICAgICAgIEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QgPSBtX2ppdC5ncmFwaCgpLmdsb2JhbE9iamVjdEZvcihub2Rl
LmNvZGVPcmlnaW4pOwotICAgICAgICBpZiAoIWdsb2JhbE9iamVjdC0+aXNIYXZpbmdBQmFkVGlt
ZSgpICYmICFoYXNBcnJheVN0b3JhZ2Uobm9kZS5pbmRleGluZ1R5cGUoKSkpIHsKKyAgICAgICAg
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IG1faml0LmdyYXBoKCkuZ2xvYmFsT2JqZWN0
Rm9yKG5vZGUtPmNvZGVPcmlnaW4pOworICAgICAgICBpZiAoIWdsb2JhbE9iamVjdC0+aXNIYXZp
bmdBQmFkVGltZSgpICYmICFoYXNBcnJheVN0b3JhZ2Uobm9kZS0+aW5kZXhpbmdUeXBlKCkpKSB7
CiAgICAgICAgICAgICBnbG9iYWxPYmplY3QtPmhhdmluZ0FCYWRUaW1lV2F0Y2hwb2ludCgpLT5h
ZGQoc3BlY3VsYXRpb25XYXRjaHBvaW50KCkpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGdsb2JhbE9iamVjdC0+YXJyYXlTdHJ1Y3R1cmVGb3JJbmRl
eGluZ1R5cGVEdXJpbmdBbGxvY2F0aW9uKG5vZGUuaW5kZXhpbmdUeXBlKCkpOwotICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlQoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSA9PSBub2RlLmluZGV4
aW5nVHlwZSgpKTsKKyAgICAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gZ2xvYmFsT2Jq
ZWN0LT5hcnJheVN0cnVjdHVyZUZvckluZGV4aW5nVHlwZUR1cmluZ0FsbG9jYXRpb24obm9kZS0+
aW5kZXhpbmdUeXBlKCkpOworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoc3RydWN0dXJlLT5p
bmRleGluZ1R5cGUoKSA9PSBub2RlLT5pbmRleGluZ1R5cGUoKSk7CiAgICAgICAgICAgICBBU1NF
UlQoCiAgICAgICAgICAgICAgICAgaGFzVW5kZWNpZGVkKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBl
KCkpCiAgICAgICAgICAgICAgICAgfHwgaGFzSW50MzIoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUo
KSkKICAgICAgICAgICAgICAgICB8fCBoYXNEb3VibGUoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUo
KSkKICAgICAgICAgICAgICAgICB8fCBoYXNDb250aWd1b3VzKHN0cnVjdHVyZS0+aW5kZXhpbmdU
eXBlKCkpKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgdW5zaWduZWQgbnVtRWxlbWVudHMg
PSBub2RlLm51bUNoaWxkcmVuKCk7CisgICAgICAgICAgICB1bnNpZ25lZCBudW1FbGVtZW50cyA9
IG5vZGUtPm51bUNoaWxkcmVuKCk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIEdQUlRlbXBv
cmFyeSByZXN1bHQodGhpcyk7CiAgICAgICAgICAgICBHUFJUZW1wb3Jhcnkgc3RvcmFnZSh0aGlz
KTsKQEAgLTM0ODMsMTEgKzM0NzUsMTEgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShO
b2RlJiBub2RlKQogICAgICAgICAgICAgLy8gQXQgdGhpcyBwb2ludCwgb25lIHdheSBvciBhbm90
aGVyLCByZXN1bHRHUFIgYW5kIHN0b3JhZ2VHUFIgaGF2ZSBwb2ludGVycyB0bwogICAgICAgICAg
ICAgLy8gdGhlIEpTQXJyYXkgYW5kIHRoZSBCdXR0ZXJmbHksIHJlc3BlY3RpdmVseS4KICAgICAg
ICAgICAgIAotICAgICAgICAgICAgQVNTRVJUKCFoYXNVbmRlY2lkZWQoc3RydWN0dXJlLT5pbmRl
eGluZ1R5cGUoKSkgfHwgIW5vZGUubnVtQ2hpbGRyZW4oKSk7CisgICAgICAgICAgICBBU1NFUlQo
IWhhc1VuZGVjaWRlZChzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSB8fCAhbm9kZS0+bnVtQ2hp
bGRyZW4oKSk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgb3BlcmFu
ZElkeCA9IDA7IG9wZXJhbmRJZHggPCBub2RlLm51bUNoaWxkcmVuKCk7ICsrb3BlcmFuZElkeCkg
ewotICAgICAgICAgICAgICAgIEVkZ2UgdXNlID0gbV9qaXQuZ3JhcGgoKS5tX3ZhckFyZ0NoaWxk
cmVuW25vZGUuZmlyc3RDaGlsZCgpICsgb3BlcmFuZElkeF07Ci0gICAgICAgICAgICAgICAgc3dp
dGNoIChub2RlLmluZGV4aW5nVHlwZSgpKSB7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIG9w
ZXJhbmRJZHggPSAwOyBvcGVyYW5kSWR4IDwgbm9kZS0+bnVtQ2hpbGRyZW4oKTsgKytvcGVyYW5k
SWR4KSB7CisgICAgICAgICAgICAgICAgRWRnZSB1c2UgPSBtX2ppdC5ncmFwaCgpLm1fdmFyQXJn
Q2hpbGRyZW5bbm9kZS0+Zmlyc3RDaGlsZCgpICsgb3BlcmFuZElkeF07CisgICAgICAgICAgICAg
ICAgc3dpdGNoIChub2RlLT5pbmRleGluZ1R5cGUoKSkgewogICAgICAgICAgICAgICAgIGNhc2Ug
QUxMX0JMQU5LX0lOREVYSU5HX1RZUEVTOgogICAgICAgICAgICAgICAgIGNhc2UgQUxMX1VOREVD
SURFRF9JTkRFWElOR19UWVBFUzoKICAgICAgICAgICAgICAgICAgICAgQ1JBU0goKTsKQEAgLTM0
OTksNyArMzQ5MSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkK
ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBuZWVkIGEgd2F5IG9mIHByb2Zp
bGluZyB0aGVzZSwgYW5kIHdlIG5lZWQgdG8gaG9pc3QgdGhlbSBpbnRvCiAgICAgICAgICAgICAg
ICAgICAgICAgICAvLyBTcGVjdWxhdGVEb3VibGVPcGVyYW5kLgogICAgICAgICAgICAgICAgICAg
ICAgICAgc3BlY3VsYXRpb25DaGVjaygKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBCYWRU
eXBlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
QmFkVHlwZSwgSlNWYWx1ZVJlZ3MoKSwgMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBt
X2ppdC5icmFuY2hEb3VibGUoTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZU5vdEVxdWFsT3JVbm9yZGVy
ZWQsIG9wRlBSLCBvcEZQUikpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgIApAQCAt
MzUxMCw5ICszNTAyLDkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2Rl
KQogICAgICAgICAgICAgICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6IHsK
ICAgICAgICAgICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgb3BlcmFuZCh0aGlzLCB1c2UpOwog
ICAgICAgICAgICAgICAgICAgICBHUFJSZWcgb3BHUFIgPSBvcGVyYW5kLmdwcigpOwotICAgICAg
ICAgICAgICAgICAgICBpZiAoaGFzSW50MzIobm9kZS5pbmRleGluZ1R5cGUoKSkgJiYgIWlzSW50
MzJTcGVjdWxhdGlvbihtX3N0YXRlLmZvck5vZGUodXNlKS5tX3R5cGUpKSB7CisgICAgICAgICAg
ICAgICAgICAgIGlmIChoYXNJbnQzMihub2RlLT5pbmRleGluZ1R5cGUoKSkgJiYgIWlzSW50MzJT
cGVjdWxhdGlvbihtX3N0YXRlLmZvck5vZGUodXNlKS5tX3R5cGUpKSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEJhZFR5cGUsIEpTVmFsdWVSZWdzKG9wR1BSKSwgdXNlLmluZGV4KCksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgQmFkVHlwZSwgSlNWYWx1ZVJlZ3Mob3BHUFIpLCB1c2UsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoNjQoTWFjcm9Bc3NlbWJsZXI6OkJlbG93
LCBvcEdQUiwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKSk7CiAgICAgICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgbV9qaXQuc3RvcmU2NChvcEdQUiwgTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgc2l6ZW9mKEpTVmFsdWUpICogb3BlcmFuZElk
eCkpOwpAQCAtMzUzMSwyOSArMzUyMywyOSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
KE5vZGUmIG5vZGUpCiAgICAgICAgICAgICAvLyBiaWdnZXIgcHJvYmxlbSB3aWxsIGFsc28gbGlr
ZWx5IGZpeCB0aGUgcmVkdW5kYW5jeSBpbiByZWxvYWRpbmcgdGhlIHN0b3JhZ2UKICAgICAgICAg
ICAgIC8vIHBvaW50ZXIgdGhhdCB3ZSBjdXJyZW50bHkgaGF2ZS4KICAgICAgICAgICAgIAotICAg
ICAgICAgICAgY2VsbFJlc3VsdChyZXN1bHRHUFIsIG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAg
ICAgIGNlbGxSZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICB9CiAgICAgICAgIAotICAgICAgICBpZiAoIW5vZGUubnVtQ2hpbGRyZW4oKSkgeworICAg
ICAgICBpZiAoIW5vZGUtPm51bUNoaWxkcmVuKCkpIHsKICAgICAgICAgICAgIGZsdXNoUmVnaXN0
ZXJzKCk7CiAgICAgICAgICAgICBHUFJSZXN1bHQgcmVzdWx0KHRoaXMpOwotICAgICAgICAgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdFbXB0eUFycmF5LCByZXN1bHQuZ3ByKCksIGdsb2Jh
bE9iamVjdC0+YXJyYXlTdHJ1Y3R1cmVGb3JJbmRleGluZ1R5cGVEdXJpbmdBbGxvY2F0aW9uKG5v
ZGUuaW5kZXhpbmdUeXBlKCkpKTsKLSAgICAgICAgICAgIGNlbGxSZXN1bHQocmVzdWx0Lmdwcigp
LCBtX2NvbXBpbGVJbmRleCk7CisgICAgICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5l
d0VtcHR5QXJyYXksIHJlc3VsdC5ncHIoKSwgZ2xvYmFsT2JqZWN0LT5hcnJheVN0cnVjdHVyZUZv
ckluZGV4aW5nVHlwZUR1cmluZ0FsbG9jYXRpb24obm9kZS0+aW5kZXhpbmdUeXBlKCkpKTsKKyAg
ICAgICAgICAgIGNlbGxSZXN1bHQocmVzdWx0LmdwcigpLCBub2RlKTsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBzaXplX3Qgc2NyYXRjaFNpemUgPSBz
aXplb2YoRW5jb2RlZEpTVmFsdWUpICogbm9kZS5udW1DaGlsZHJlbigpOworICAgICAgICBzaXpl
X3Qgc2NyYXRjaFNpemUgPSBzaXplb2YoRW5jb2RlZEpTVmFsdWUpICogbm9kZS0+bnVtQ2hpbGRy
ZW4oKTsKICAgICAgICAgU2NyYXRjaEJ1ZmZlciogc2NyYXRjaEJ1ZmZlciA9IG1faml0Lmdsb2Jh
bERhdGEoKS0+c2NyYXRjaEJ1ZmZlckZvclNpemUoc2NyYXRjaFNpemUpOwogICAgICAgICBFbmNv
ZGVkSlNWYWx1ZSogYnVmZmVyID0gc2NyYXRjaEJ1ZmZlciA/IHN0YXRpY19jYXN0PEVuY29kZWRK
U1ZhbHVlKj4oc2NyYXRjaEJ1ZmZlci0+ZGF0YUJ1ZmZlcigpKSA6IDA7CiAgICAgICAgIAotICAg
ICAgICBmb3IgKHVuc2lnbmVkIG9wZXJhbmRJZHggPSAwOyBvcGVyYW5kSWR4IDwgbm9kZS5udW1D
aGlsZHJlbigpOyArK29wZXJhbmRJZHgpIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBvcGVyYW5k
SWR4ID0gMDsgb3BlcmFuZElkeCA8IG5vZGUtPm51bUNoaWxkcmVuKCk7ICsrb3BlcmFuZElkeCkg
ewogICAgICAgICAgICAgLy8gTmVlZCB0byBwZXJmb3JtIHRoZSBzcGVjdWxhdGlvbnMgdGhhdCB0
aGlzIG5vZGUgcHJvbWlzZXMgdG8gcGVyZm9ybS4gSWYgd2UncmUKICAgICAgICAgICAgIC8vIGVt
aXR0aW5nIGNvZGUgaGVyZSBhbmQgdGhlIGluZGV4aW5nIHR5cGUgaXMgbm90IGFycmF5IHN0b3Jh
Z2UgdGhlbiB0aGVyZSBpcwogICAgICAgICAgICAgLy8gcHJvYmFibHkgc29tZXRoaW5nIGhpbGFy
aW91cyBnb2luZyBvbiBhbmQgd2UncmUgYWxyZWFkeSBmYWlsaW5nIGF0IGFsbCB0aGUKICAgICAg
ICAgICAgIC8vIHRoaW5ncywgYnV0IGF0IGxlYXN0IHdlJ3JlIGdvaW5nIHRvIGJlIHNvdW5kLgot
ICAgICAgICAgICAgRWRnZSB1c2UgPSBtX2ppdC5ncmFwaCgpLm1fdmFyQXJnQ2hpbGRyZW5bbm9k
ZS5maXJzdENoaWxkKCkgKyBvcGVyYW5kSWR4XTsKLSAgICAgICAgICAgIHN3aXRjaCAobm9kZS5p
bmRleGluZ1R5cGUoKSkgeworICAgICAgICAgICAgRWRnZSB1c2UgPSBtX2ppdC5ncmFwaCgpLm1f
dmFyQXJnQ2hpbGRyZW5bbm9kZS0+Zmlyc3RDaGlsZCgpICsgb3BlcmFuZElkeF07CisgICAgICAg
ICAgICBzd2l0Y2ggKG5vZGUtPmluZGV4aW5nVHlwZSgpKSB7CiAgICAgICAgICAgICBjYXNlIEFM
TF9CTEFOS19JTkRFWElOR19UWVBFUzoKICAgICAgICAgICAgIGNhc2UgQUxMX1VOREVDSURFRF9J
TkRFWElOR19UWVBFUzoKICAgICAgICAgICAgICAgICBDUkFTSCgpOwpAQCAtMzU2Nyw3ICszNTU5
LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAg
ICAgICAgICAgICAvLyBGSVhNRTogV2UgbmVlZCBhIHdheSBvZiBwcm9maWxpbmcgdGhlc2UsIGFu
ZCB3ZSBuZWVkIHRvIGhvaXN0IHRoZW0gaW50bwogICAgICAgICAgICAgICAgICAgICAvLyBTcGVj
dWxhdGVEb3VibGVPcGVyYW5kLgogICAgICAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNr
KAotICAgICAgICAgICAgICAgICAgICAgICAgQmFkVHlwZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2Rl
LAorICAgICAgICAgICAgICAgICAgICAgICAgQmFkVHlwZSwgSlNWYWx1ZVJlZ3MoKSwgMCwKICAg
ICAgICAgICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaERvdWJsZShNYWNyb0Fzc2VtYmxlcjo6
RG91YmxlTm90RXF1YWxPclVub3JkZXJlZCwgb3BGUFIsIG9wRlBSKSk7CiAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgIApAQCAtMzU3OCw5ICszNTcwLDkgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAgICAgY2FzZSBBTExfSU5UMzJf
SU5ERVhJTkdfVFlQRVM6IHsKICAgICAgICAgICAgICAgICBKU1ZhbHVlT3BlcmFuZCBvcGVyYW5k
KHRoaXMsIHVzZSk7CiAgICAgICAgICAgICAgICAgR1BSUmVnIG9wR1BSID0gb3BlcmFuZC5ncHIo
KTsKLSAgICAgICAgICAgICAgICBpZiAoaGFzSW50MzIobm9kZS5pbmRleGluZ1R5cGUoKSkgJiYg
IWlzSW50MzJTcGVjdWxhdGlvbihtX3N0YXRlLmZvck5vZGUodXNlKS5tX3R5cGUpKSB7CisgICAg
ICAgICAgICAgICAgaWYgKGhhc0ludDMyKG5vZGUtPmluZGV4aW5nVHlwZSgpKSAmJiAhaXNJbnQz
MlNwZWN1bGF0aW9uKG1fc3RhdGUuZm9yTm9kZSh1c2UpLm1fdHlwZSkpIHsKICAgICAgICAgICAg
ICAgICAgICAgc3BlY3VsYXRpb25DaGVjaygKLSAgICAgICAgICAgICAgICAgICAgICAgIEJhZFR5
cGUsIEpTVmFsdWVSZWdzKG9wR1BSKSwgdXNlLmluZGV4KCksCisgICAgICAgICAgICAgICAgICAg
ICAgICBCYWRUeXBlLCBKU1ZhbHVlUmVncyhvcEdQUiksIHVzZSwKICAgICAgICAgICAgICAgICAg
ICAgICAgIG1faml0LmJyYW5jaDY0KE1hY3JvQXNzZW1ibGVyOjpCZWxvdywgb3BHUFIsIEdQUklu
Zm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlcikpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICBtX2ppdC5zdG9yZTY0KG9wR1BSLCBidWZmZXIgKyBvcGVyYW5kSWR4KTsKQEAgLTM2
MDAsNyArMzU5Miw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkK
ICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgc3dpdGNoIChub2Rl
LmluZGV4aW5nVHlwZSgpKSB7CisgICAgICAgIHN3aXRjaCAobm9kZS0+aW5kZXhpbmdUeXBlKCkp
IHsKICAgICAgICAgY2FzZSBBTExfRE9VQkxFX0lOREVYSU5HX1RZUEVTOgogICAgICAgICBjYXNl
IEFMTF9JTlQzMl9JTkRFWElOR19UWVBFUzoKICAgICAgICAgICAgIHVzZUNoaWxkcmVuKG5vZGUp
OwpAQCAtMzYyMiw4ICszNjE0LDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2Rl
JiBub2RlKQogICAgICAgICBHUFJSZXN1bHQgcmVzdWx0KHRoaXMpOwogICAgICAgICAKICAgICAg
ICAgY2FsbE9wZXJhdGlvbigKLSAgICAgICAgICAgIG9wZXJhdGlvbk5ld0FycmF5LCByZXN1bHQu
Z3ByKCksIGdsb2JhbE9iamVjdC0+YXJyYXlTdHJ1Y3R1cmVGb3JJbmRleGluZ1R5cGVEdXJpbmdB
bGxvY2F0aW9uKG5vZGUuaW5kZXhpbmdUeXBlKCkpLAotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8
dm9pZCo+KGJ1ZmZlciksIG5vZGUubnVtQ2hpbGRyZW4oKSk7CisgICAgICAgICAgICBvcGVyYXRp
b25OZXdBcnJheSwgcmVzdWx0LmdwcigpLCBnbG9iYWxPYmplY3QtPmFycmF5U3RydWN0dXJlRm9y
SW5kZXhpbmdUeXBlRHVyaW5nQWxsb2NhdGlvbihub2RlLT5pbmRleGluZ1R5cGUoKSksCisgICAg
ICAgICAgICBzdGF0aWNfY2FzdDx2b2lkKj4oYnVmZmVyKSwgbm9kZS0+bnVtQ2hpbGRyZW4oKSk7
CiAKICAgICAgICAgaWYgKHNjcmF0Y2hTaXplKSB7CiAgICAgICAgICAgICBHUFJUZW1wb3Jhcnkg
c2NyYXRjaCh0aGlzKTsKQEAgLTM2MzIsMTYgKzM2MjQsMTYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAgICAgbV9qaXQuc3RvcmVQdHIoVHJ1c3Rl
ZEltbVB0cigwKSwgc2NyYXRjaC5ncHIoKSk7CiAgICAgICAgIH0KIAotICAgICAgICBjZWxsUmVz
dWx0KHJlc3VsdC5ncHIoKSwgbV9jb21waWxlSW5kZXgsIFVzZUNoaWxkcmVuQ2FsbGVkRXhwbGlj
aXRseSk7CisgICAgICAgIGNlbGxSZXN1bHQocmVzdWx0LmdwcigpLCBub2RlLCBVc2VDaGlsZHJl
bkNhbGxlZEV4cGxpY2l0bHkpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIAogICAg
IGNhc2UgTmV3QXJyYXlXaXRoU2l6ZTogewotICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0ID0gbV9qaXQuZ3JhcGgoKS5nbG9iYWxPYmplY3RGb3Iobm9kZS5jb2RlT3JpZ2luKTsK
LSAgICAgICAgaWYgKCFnbG9iYWxPYmplY3QtPmlzSGF2aW5nQUJhZFRpbWUoKSAmJiAhaGFzQXJy
YXlTdG9yYWdlKG5vZGUuaW5kZXhpbmdUeXBlKCkpKSB7CisgICAgICAgIEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QgPSBtX2ppdC5ncmFwaCgpLmdsb2JhbE9iamVjdEZvcihub2RlLT5jb2Rl
T3JpZ2luKTsKKyAgICAgICAgaWYgKCFnbG9iYWxPYmplY3QtPmlzSGF2aW5nQUJhZFRpbWUoKSAm
JiAhaGFzQXJyYXlTdG9yYWdlKG5vZGUtPmluZGV4aW5nVHlwZSgpKSkgewogICAgICAgICAgICAg
Z2xvYmFsT2JqZWN0LT5oYXZpbmdBQmFkVGltZVdhdGNocG9pbnQoKS0+YWRkKHNwZWN1bGF0aW9u
V2F0Y2hwb2ludCgpKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgU3BlY3VsYXRlU3RyaWN0
SW50MzJPcGVyYW5kIHNpemUodGhpcywgbm9kZS5jaGlsZDEoKSk7CisgICAgICAgICAgICBTcGVj
dWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgc2l6ZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CiAgICAg
ICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwogICAgICAgICAgICAgR1BSVGVtcG9y
YXJ5IHN0b3JhZ2UodGhpcyk7CiAgICAgICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlz
KTsKQEAgLTM2NjMsMTMgKzM2NTUsMTMgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShO
b2RlJiBub2RlKQogICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZCgKICAgICAgICAgICAgICAg
ICBlbWl0QWxsb2NhdGVCYXNpY1N0b3JhZ2UocmVzdWx0R1BSLCBzdG9yYWdlR1BSKSk7CiAgICAg
ICAgICAgICBtX2ppdC5zdWJQdHIoc2NyYXRjaEdQUiwgc3RvcmFnZUdQUik7Ci0gICAgICAgICAg
ICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGdsb2JhbE9iamVjdC0+YXJyYXlTdHJ1Y3R1cmVGb3JJ
bmRleGluZ1R5cGVEdXJpbmdBbGxvY2F0aW9uKG5vZGUuaW5kZXhpbmdUeXBlKCkpOworICAgICAg
ICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBnbG9iYWxPYmplY3QtPmFycmF5U3RydWN0dXJl
Rm9ySW5kZXhpbmdUeXBlRHVyaW5nQWxsb2NhdGlvbihub2RlLT5pbmRleGluZ1R5cGUoKSk7CiAg
ICAgICAgICAgICBlbWl0QWxsb2NhdGVKU09iamVjdDxKU0FycmF5PihyZXN1bHRHUFIsIEltbVB0
cihzdHJ1Y3R1cmUpLCBzdG9yYWdlR1BSLCBzY3JhdGNoR1BSLCBzY3JhdGNoMkdQUiwgc2xvd0Nh
c2VzKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihzaXplR1BSLCBN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVi
bGljTGVuZ3RoKCkpKTsKICAgICAgICAgICAgIG1faml0LnN0b3JlMzIoc2l6ZUdQUiwgTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgQnV0dGVyZmx5OjpvZmZzZXRPZlZlY3Rvckxl
bmd0aCgpKSk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChoYXNEb3VibGUobm9kZS5p
bmRleGluZ1R5cGUoKSkpIHsKKyAgICAgICAgICAgIGlmIChoYXNEb3VibGUobm9kZS0+aW5kZXhp
bmdUeXBlKCkpKSB7CiAgICAgICAgICAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tNjQoYml0
d2lzZV9jYXN0PGludDY0X3Q+KFFOYU4pKSwgc2NyYXRjaEdQUik7CiAgICAgICAgICAgICAgICAg
bV9qaXQubW92ZShzaXplR1BSLCBzY3JhdGNoMkdQUik7CiAgICAgICAgICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6Okp1bXAgZG9uZSA9IG1faml0LmJyYW5jaFRlc3QzMihNYWNyb0Fzc2VtYmxlcjo6
WmVybywgc2NyYXRjaDJHUFIpOwpAQCAtMzY4MywzOCArMzY3NSwzOCBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgICAgICBhZGRTbG93UGF0aEdlbmVy
YXRvcihhZG9wdFB0cigKICAgICAgICAgICAgICAgICBuZXcgQ2FsbEFycmF5QWxsb2NhdG9yV2l0
aFZhcmlhYmxlU2l6ZVNsb3dQYXRoR2VuZXJhdG9yKAogICAgICAgICAgICAgICAgICAgICBzbG93
Q2FzZXMsIHRoaXMsIG9wZXJhdGlvbk5ld0FycmF5V2l0aFNpemUsIHJlc3VsdEdQUiwKLSAgICAg
ICAgICAgICAgICAgICAgZ2xvYmFsT2JqZWN0LT5hcnJheVN0cnVjdHVyZUZvckluZGV4aW5nVHlw
ZUR1cmluZ0FsbG9jYXRpb24obm9kZS5pbmRleGluZ1R5cGUoKSksCisgICAgICAgICAgICAgICAg
ICAgIGdsb2JhbE9iamVjdC0+YXJyYXlTdHJ1Y3R1cmVGb3JJbmRleGluZ1R5cGVEdXJpbmdBbGxv
Y2F0aW9uKG5vZGUtPmluZGV4aW5nVHlwZSgpKSwKICAgICAgICAgICAgICAgICAgICAgZ2xvYmFs
T2JqZWN0LT5hcnJheVN0cnVjdHVyZUZvckluZGV4aW5nVHlwZUR1cmluZ0FsbG9jYXRpb24oQXJy
YXlXaXRoQXJyYXlTdG9yYWdlKSwKICAgICAgICAgICAgICAgICAgICAgc2l6ZUdQUikpKTsKICAg
ICAgICAgICAgIAotICAgICAgICAgICAgY2VsbFJlc3VsdChyZXN1bHRHUFIsIG1fY29tcGlsZUlu
ZGV4KTsKKyAgICAgICAgICAgIGNlbGxSZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBTcGVjdWxhdGVTdHJpY3RJ
bnQzMk9wZXJhbmQgc2l6ZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKKyAgICAgICAgU3BlY3VsYXRl
U3RyaWN0SW50MzJPcGVyYW5kIHNpemUodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICBH
UFJSZWcgc2l6ZUdQUiA9IHNpemUuZ3ByKCk7CiAgICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7CiAg
ICAgICAgIEdQUlJlc3VsdCByZXN1bHQodGhpcyk7CiAgICAgICAgIEdQUlJlZyByZXN1bHRHUFIg
PSByZXN1bHQuZ3ByKCk7CiAgICAgICAgIEdQUlJlZyBzdHJ1Y3R1cmVHUFIgPSBzZWxlY3RTY3Jh
dGNoR1BSKHNpemVHUFIpOwogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBiaWdMZW5ndGgg
PSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBzaXplR1BSLCBU
cnVzdGVkSW1tMzIoTUlOX1NQQVJTRV9BUlJBWV9JTkRFWCkpOwotICAgICAgICBtX2ppdC5tb3Zl
KFRydXN0ZWRJbW1QdHIoZ2xvYmFsT2JqZWN0LT5hcnJheVN0cnVjdHVyZUZvckluZGV4aW5nVHlw
ZUR1cmluZ0FsbG9jYXRpb24obm9kZS5pbmRleGluZ1R5cGUoKSkpLCBzdHJ1Y3R1cmVHUFIpOwor
ICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIoZ2xvYmFsT2JqZWN0LT5hcnJheVN0cnVj
dHVyZUZvckluZGV4aW5nVHlwZUR1cmluZ0FsbG9jYXRpb24obm9kZS0+aW5kZXhpbmdUeXBlKCkp
KSwgc3RydWN0dXJlR1BSKTsKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZG9uZSA9IG1f
aml0Lmp1bXAoKTsKICAgICAgICAgYmlnTGVuZ3RoLmxpbmsoJm1faml0KTsKICAgICAgICAgbV9q
aXQubW92ZShUcnVzdGVkSW1tUHRyKGdsb2JhbE9iamVjdC0+YXJyYXlTdHJ1Y3R1cmVGb3JJbmRl
eGluZ1R5cGVEdXJpbmdBbGxvY2F0aW9uKEFycmF5V2l0aEFycmF5U3RvcmFnZSkpLCBzdHJ1Y3R1
cmVHUFIpOwogICAgICAgICBkb25lLmxpbmsoJm1faml0KTsKICAgICAgICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25OZXdBcnJheVdpdGhTaXplLCByZXN1bHRHUFIsIHN0cnVjdHVyZUdQUiwgc2l6
ZUdQUik7Ci0gICAgICAgIGNlbGxSZXN1bHQocmVzdWx0R1BSLCBtX2NvbXBpbGVJbmRleCk7Cisg
ICAgICAgIGNlbGxSZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAg
fQogICAgICAgICAKICAgICBjYXNlIFN0ckNhdDogewotICAgICAgICBzaXplX3Qgc2NyYXRjaFNp
emUgPSBzaXplb2YoRW5jb2RlZEpTVmFsdWUpICogbm9kZS5udW1DaGlsZHJlbigpOworICAgICAg
ICBzaXplX3Qgc2NyYXRjaFNpemUgPSBzaXplb2YoRW5jb2RlZEpTVmFsdWUpICogbm9kZS0+bnVt
Q2hpbGRyZW4oKTsKICAgICAgICAgU2NyYXRjaEJ1ZmZlciogc2NyYXRjaEJ1ZmZlciA9IG1faml0
Lmdsb2JhbERhdGEoKS0+c2NyYXRjaEJ1ZmZlckZvclNpemUoc2NyYXRjaFNpemUpOwogICAgICAg
ICBFbmNvZGVkSlNWYWx1ZSogYnVmZmVyID0gc2NyYXRjaEJ1ZmZlciA/IHN0YXRpY19jYXN0PEVu
Y29kZWRKU1ZhbHVlKj4oc2NyYXRjaEJ1ZmZlci0+ZGF0YUJ1ZmZlcigpKSA6IDA7CiAgICAgICAg
IAotICAgICAgICBmb3IgKHVuc2lnbmVkIG9wZXJhbmRJZHggPSAwOyBvcGVyYW5kSWR4IDwgbm9k
ZS5udW1DaGlsZHJlbigpOyArK29wZXJhbmRJZHgpIHsKLSAgICAgICAgICAgIEpTVmFsdWVPcGVy
YW5kIG9wZXJhbmQodGhpcywgbV9qaXQuZ3JhcGgoKS5tX3ZhckFyZ0NoaWxkcmVuW25vZGUuZmly
c3RDaGlsZCgpICsgb3BlcmFuZElkeF0pOworICAgICAgICBmb3IgKHVuc2lnbmVkIG9wZXJhbmRJ
ZHggPSAwOyBvcGVyYW5kSWR4IDwgbm9kZS0+bnVtQ2hpbGRyZW4oKTsgKytvcGVyYW5kSWR4KSB7
CisgICAgICAgICAgICBKU1ZhbHVlT3BlcmFuZCBvcGVyYW5kKHRoaXMsIG1faml0LmdyYXBoKCku
bV92YXJBcmdDaGlsZHJlbltub2RlLT5maXJzdENoaWxkKCkgKyBvcGVyYW5kSWR4XSk7CiAgICAg
ICAgICAgICBHUFJSZWcgb3BHUFIgPSBvcGVyYW5kLmdwcigpOwogICAgICAgICAgICAgb3BlcmFu
ZC51c2UoKTsKICAgICAgICAgICAgIApAQCAtMzczMyw3ICszNzI1LDcgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogCiAgICAgICAgIEdQUlJlc3VsdCByZXN1bHQo
dGhpcyk7CiAgICAgICAgIAotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblN0ckNhdCwg
cmVzdWx0LmdwcigpLCBzdGF0aWNfY2FzdDx2b2lkICo+KGJ1ZmZlciksIG5vZGUubnVtQ2hpbGRy
ZW4oKSk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3RyQ2F0LCByZXN1bHQuZ3By
KCksIHN0YXRpY19jYXN0PHZvaWQgKj4oYnVmZmVyKSwgbm9kZS0+bnVtQ2hpbGRyZW4oKSk7CiAK
ICAgICAgICAgaWYgKHNjcmF0Y2hTaXplKSB7CiAgICAgICAgICAgICBHUFJUZW1wb3Jhcnkgc2Ny
YXRjaCh0aGlzKTsKQEAgLTM3NDIsMTcgKzM3MzQsMTcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAgICAgbV9qaXQuc3RvcmVQdHIoVHJ1c3RlZElt
bVB0cigwKSwgc2NyYXRjaC5ncHIoKSk7CiAgICAgICAgIH0KIAotICAgICAgICBjZWxsUmVzdWx0
KHJlc3VsdC5ncHIoKSwgbV9jb21waWxlSW5kZXgsIFVzZUNoaWxkcmVuQ2FsbGVkRXhwbGljaXRs
eSk7CisgICAgICAgIGNlbGxSZXN1bHQocmVzdWx0LmdwcigpLCBub2RlLCBVc2VDaGlsZHJlbkNh
bGxlZEV4cGxpY2l0bHkpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIAogICAgIGNh
c2UgTmV3QXJyYXlCdWZmZXI6IHsKLSAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCA9IG1faml0LmdyYXBoKCkuZ2xvYmFsT2JqZWN0Rm9yKG5vZGUuY29kZU9yaWdpbik7Ci0gICAg
ICAgIEluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGUgPSBub2RlLmluZGV4aW5nVHlwZSgpOworICAg
ICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbV9qaXQuZ3JhcGgoKS5nbG9iYWxP
YmplY3RGb3Iobm9kZS0+Y29kZU9yaWdpbik7CisgICAgICAgIEluZGV4aW5nVHlwZSBpbmRleGlu
Z1R5cGUgPSBub2RlLT5pbmRleGluZ1R5cGUoKTsKICAgICAgICAgaWYgKCFnbG9iYWxPYmplY3Qt
PmlzSGF2aW5nQUJhZFRpbWUoKSAmJiAhaGFzQXJyYXlTdG9yYWdlKGluZGV4aW5nVHlwZSkpIHsK
ICAgICAgICAgICAgIGdsb2JhbE9iamVjdC0+aGF2aW5nQUJhZFRpbWVXYXRjaHBvaW50KCktPmFk
ZChzcGVjdWxhdGlvbldhdGNocG9pbnQoKSk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIHVu
c2lnbmVkIG51bUVsZW1lbnRzID0gbm9kZS5udW1Db25zdGFudHMoKTsKKyAgICAgICAgICAgIHVu
c2lnbmVkIG51bUVsZW1lbnRzID0gbm9kZS0+bnVtQ29uc3RhbnRzKCk7CiAgICAgICAgICAgICAK
ICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CiAgICAgICAgICAgICBHUFJU
ZW1wb3Jhcnkgc3RvcmFnZSh0aGlzKTsKQEAgLTM3NjMsMzIgKzM3NTUsMzIgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAgICAgZW1pdEFsbG9jYXRl
SlNBcnJheShyZXN1bHRHUFIsIGdsb2JhbE9iamVjdC0+YXJyYXlTdHJ1Y3R1cmVGb3JJbmRleGlu
Z1R5cGVEdXJpbmdBbGxvY2F0aW9uKGluZGV4aW5nVHlwZSksIHN0b3JhZ2VHUFIsIG51bUVsZW1l
bnRzKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoaW5kZXhpbmdU
eXBlICYgSXNBcnJheSk7Ci0gICAgICAgICAgICBKU1ZhbHVlKiBkYXRhID0gbV9qaXQuY29kZUJs
b2NrKCktPmNvbnN0YW50QnVmZmVyKG5vZGUuc3RhcnRDb25zdGFudCgpKTsKKyAgICAgICAgICAg
IEpTVmFsdWUqIGRhdGEgPSBtX2ppdC5jb2RlQmxvY2soKS0+Y29uc3RhbnRCdWZmZXIobm9kZS0+
c3RhcnRDb25zdGFudCgpKTsKICAgICAgICAgICAgIGlmIChpbmRleGluZ1R5cGUgPT0gQXJyYXlX
aXRoRG91YmxlKSB7Ci0gICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbmRleCA9IDA7IGlu
ZGV4IDwgbm9kZS5udW1Db25zdGFudHMoKTsgKytpbmRleCkgeworICAgICAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgaW5kZXggPSAwOyBpbmRleCA8IG5vZGUtPm51bUNvbnN0YW50cygpOyArK2lu
ZGV4KSB7CiAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSB2YWx1ZSA9IGRhdGFbaW5kZXhdLmFz
TnVtYmVyKCk7CiAgICAgICAgICAgICAgICAgICAgIG1faml0LnN0b3JlNjQoCiAgICAgICAgICAg
ICAgICAgICAgICAgICBJbW02NChiaXR3aXNlX2Nhc3Q8aW50NjRfdD4odmFsdWUpKSwKICAgICAg
ICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIHNp
emVvZihkb3VibGUpICogaW5kZXgpKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW5kZXggPSAwOyBpbmRleCA8
IG5vZGUubnVtQ29uc3RhbnRzKCk7ICsraW5kZXgpIHsKKyAgICAgICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIGluZGV4ID0gMDsgaW5kZXggPCBub2RlLT5udW1Db25zdGFudHMoKTsgKytpbmRleCkg
ewogICAgICAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZTY0KAogICAgICAgICAgICAgICAgICAg
ICAgICAgSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGRhdGFbaW5kZXhdKSksCiAgICAgICAgICAgICAg
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBzaXplb2YoSlNW
YWx1ZSkgKiBpbmRleCkpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIAotICAgICAgICAgICAgY2VsbFJlc3VsdChyZXN1bHRHUFIsIG1fY29tcGlsZUluZGV4
KTsKKyAgICAgICAgICAgIGNlbGxSZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBmbHVzaFJlZ2lzdGVycygpOwog
ICAgICAgICBHUFJSZXN1bHQgcmVzdWx0KHRoaXMpOwogICAgICAgICAKLSAgICAgICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25OZXdBcnJheUJ1ZmZlciwgcmVzdWx0LmdwcigpLCBnbG9iYWxPYmpl
Y3QtPmFycmF5U3RydWN0dXJlRm9ySW5kZXhpbmdUeXBlRHVyaW5nQWxsb2NhdGlvbihub2RlLmlu
ZGV4aW5nVHlwZSgpKSwgbm9kZS5zdGFydENvbnN0YW50KCksIG5vZGUubnVtQ29uc3RhbnRzKCkp
OworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FycmF5QnVmZmVyLCByZXN1bHQu
Z3ByKCksIGdsb2JhbE9iamVjdC0+YXJyYXlTdHJ1Y3R1cmVGb3JJbmRleGluZ1R5cGVEdXJpbmdB
bGxvY2F0aW9uKG5vZGUtPmluZGV4aW5nVHlwZSgpKSwgbm9kZS0+c3RhcnRDb25zdGFudCgpLCBu
b2RlLT5udW1Db25zdGFudHMoKSk7CiAgICAgICAgIAotICAgICAgICBjZWxsUmVzdWx0KHJlc3Vs
dC5ncHIoKSwgbV9jb21waWxlSW5kZXgpOworICAgICAgICBjZWxsUmVzdWx0KHJlc3VsdC5ncHIo
KSwgbm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCkBAIC0zNzk2LDU0ICsz
Nzg4LDU0IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAg
ICAgZmx1c2hSZWdpc3RlcnMoKTsKICAgICAgICAgR1BSUmVzdWx0IHJlc3VsdCh0aGlzKTsKICAg
ICAgICAgCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3UmVnZXhwLCByZXN1bHQu
Z3ByKCksIG1faml0LmNvZGVCbG9jaygpLT5yZWdleHAobm9kZS5yZWdleHBJbmRleCgpKSk7Cisg
ICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3UmVnZXhwLCByZXN1bHQuZ3ByKCksIG1f
aml0LmNvZGVCbG9jaygpLT5yZWdleHAobm9kZS0+cmVnZXhwSW5kZXgoKSkpOwogICAgICAgICAK
LSAgICAgICAgY2VsbFJlc3VsdChyZXN1bHQuZ3ByKCksIG1fY29tcGlsZUluZGV4KTsKKyAgICAg
ICAgY2VsbFJlc3VsdChyZXN1bHQuZ3ByKCksIG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9
CiAgICAgICAgIAogICAgIGNhc2UgQ29udmVydFRoaXM6IHsKLSAgICAgICAgaWYgKGlzT2JqZWN0
U3BlY3VsYXRpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpIHsKLSAg
ICAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIHRoaXNWYWx1ZSh0aGlzLCBub2RlLmNoaWxk
MSgpKTsKKyAgICAgICAgaWYgKGlzT2JqZWN0U3BlY3VsYXRpb24obV9zdGF0ZS5mb3JOb2RlKG5v
ZGUtPmNoaWxkMSgpKS5tX3R5cGUpKSB7CisgICAgICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFu
ZCB0aGlzVmFsdWUodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICAgICAgR1BSVGVtcG9y
YXJ5IHJlc3VsdCh0aGlzLCB0aGlzVmFsdWUpOwogICAgICAgICAgICAgbV9qaXQubW92ZSh0aGlz
VmFsdWUuZ3ByKCksIHJlc3VsdC5ncHIoKSk7Ci0gICAgICAgICAgICBjZWxsUmVzdWx0KHJlc3Vs
dC5ncHIoKSwgbV9jb21waWxlSW5kZXgpOworICAgICAgICAgICAgY2VsbFJlc3VsdChyZXN1bHQu
Z3ByKCksIG5vZGUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgCi0g
ICAgICAgIGlmIChpc090aGVyU3BlY3VsYXRpb24oYXQobm9kZS5jaGlsZDEoKSkucHJlZGljdGlv
bigpKSkgewotICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdGhpc1ZhbHVlKHRoaXMsIG5vZGUu
Y2hpbGQxKCkpOworICAgICAgICBpZiAoaXNPdGhlclNwZWN1bGF0aW9uKG5vZGUtPmNoaWxkMSgp
LT5wcmVkaWN0aW9uKCkpKSB7CisgICAgICAgICAgICBKU1ZhbHVlT3BlcmFuZCB0aGlzVmFsdWUo
dGhpcywgbm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2go
dGhpcywgdGhpc1ZhbHVlKTsKICAgICAgICAgICAgIEdQUlJlZyB0aGlzVmFsdWVHUFIgPSB0aGlz
VmFsdWUuZ3ByKCk7CiAgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3By
KCk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGlmICghaXNPdGhlclNwZWN1bGF0aW9uKG1f
c3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKSB7CisgICAgICAgICAgICBpZiAo
IWlzT3RoZXJTcGVjdWxhdGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fdHlw
ZSkpIHsKICAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKHRoaXNWYWx1ZUdQUiwgc2NyYXRjaEdQ
Uik7CiAgICAgICAgICAgICAgICAgbV9qaXQuYW5kNjQoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJ
bW0zMih+VGFnQml0VW5kZWZpbmVkKSwgc2NyYXRjaEdQUik7Ci0gICAgICAgICAgICAgICAgc3Bl
Y3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyh0aGlzVmFsdWVHUFIpLCBub2RlLmNo
aWxkMSgpLCBtX2ppdC5icmFuY2g2NChNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIHNjcmF0Y2hH
UFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQoVmFsdWVOdWxsKSkpOworICAgICAgICAg
ICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3ModGhpc1ZhbHVlR1BS
KSwgbm9kZS0+Y2hpbGQxKCksIG1faml0LmJyYW5jaDY0KE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVh
bCwgc2NyYXRjaEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW02NChWYWx1ZU51bGwpKSk7
CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIG1faml0Lm1vdmUoTWFj
cm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsVGhpc09iamVjdEZvcihub2Rl
LmNvZGVPcmlnaW4pKSwgc2NyYXRjaEdQUik7Ci0gICAgICAgICAgICBjZWxsUmVzdWx0KHNjcmF0
Y2hHUFIsIG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3Nl
bWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsVGhpc09iamVjdEZvcihub2RlLT5jb2Rl
T3JpZ2luKSksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgY2VsbFJlc3VsdChzY3JhdGNoR1BS
LCBub2RlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAg
ICBpZiAoaXNPYmplY3RTcGVjdWxhdGlvbihhdChub2RlLmNoaWxkMSgpKS5wcmVkaWN0aW9uKCkp
KSB7Ci0gICAgICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCB0aGlzVmFsdWUodGhpcywgbm9k
ZS5jaGlsZDEoKSk7CisgICAgICAgIGlmIChpc09iamVjdFNwZWN1bGF0aW9uKG5vZGUtPmNoaWxk
MSgpLT5wcmVkaWN0aW9uKCkpKSB7CisgICAgICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCB0
aGlzVmFsdWUodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICAgICAgR1BSVGVtcG9yYXJ5
IHJlc3VsdCh0aGlzLCB0aGlzVmFsdWUpOwogICAgICAgICAgICAgR1BSUmVnIHRoaXNWYWx1ZUdQ
UiA9IHRoaXNWYWx1ZS5ncHIoKTsKICAgICAgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1
bHQuZ3ByKCk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGlmICghaXNPYmplY3RTcGVjdWxh
dGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSkKLSAgICAgICAgICAg
ICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKHRoaXNWYWx1ZUdQUiks
IG5vZGUuY2hpbGQxKCksIG1faml0LmJyYW5jaFB0cihKSVRDb21waWxlcjo6RXF1YWwsIEpJVENv
bXBpbGVyOjpBZGRyZXNzKHRoaXNWYWx1ZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSks
IEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+c3RyaW5nU3Ry
dWN0dXJlLmdldCgpKSkpOworICAgICAgICAgICAgaWYgKCFpc09iamVjdFNwZWN1bGF0aW9uKG1f
c3RhdGUuZm9yTm9kZShub2RlLT5jaGlsZDEoKSkubV90eXBlKSkKKyAgICAgICAgICAgICAgICBz
cGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKHRoaXNWYWx1ZUdQUiksIG5vZGUt
PmNoaWxkMSgpLCBtX2ppdC5icmFuY2hQdHIoSklUQ29tcGlsZXI6OkVxdWFsLCBKSVRDb21waWxl
cjo6QWRkcmVzcyh0aGlzVmFsdWVHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBKSVRD
b21waWxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPnN0cmluZ1N0cnVjdHVy
ZS5nZXQoKSkpKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgbV9qaXQubW92ZSh0aGlzVmFs
dWVHUFIsIHJlc3VsdEdQUik7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGNlbGxSZXN1bHQo
cmVzdWx0R1BSLCBtX2NvbXBpbGVJbmRleCk7CisgICAgICAgICAgICBjZWxsUmVzdWx0KHJlc3Vs
dEdQUiwgbm9kZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAKLSAg
ICAgICAgSlNWYWx1ZU9wZXJhbmQgdGhpc1ZhbHVlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOworICAg
ICAgICBKU1ZhbHVlT3BlcmFuZCB0aGlzVmFsdWUodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwogICAg
ICAgICBHUFJSZWcgdGhpc1ZhbHVlR1BSID0gdGhpc1ZhbHVlLmdwcigpOwogICAgICAgICAKICAg
ICAgICAgZmx1c2hSZWdpc3RlcnMoKTsKQEAgLTM4NTEsNyArMzg0Myw3IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgR1BSUmVzdWx0IHJlc3VsdCh0
aGlzKTsKICAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db252ZXJ0VGhpcywgcmVzdWx0
LmdwcigpLCB0aGlzVmFsdWVHUFIpOwogICAgICAgICAKLSAgICAgICAgY2VsbFJlc3VsdChyZXN1
bHQuZ3ByKCksIG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAgY2VsbFJlc3VsdChyZXN1bHQuZ3By
KCksIG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9CiAKQEAgLTM4NjIsNyArMzg1NCw3IEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgLy8gdGhl
biB3ZSBzcGVjdWxhdGUgYmVjYXVzZSB3ZSB3YW50IHRvIGdldCByZWNvbXBpbGVkIGlmIGl0IGlz
bid0IChzaW5jZQogICAgICAgICAvLyBvdGhlcndpc2Ugd2UnZCBzdGFydCB0YWtpbmcgc2xvdyBw
YXRoIGEgbG90KS4KICAgICAgICAgCi0gICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGNhbGxl
ZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKKyAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgY2Fs
bGVlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0
aGlzKTsKICAgICAgICAgR1BSVGVtcG9yYXJ5IGFsbG9jYXRvcih0aGlzKTsKICAgICAgICAgR1BS
VGVtcG9yYXJ5IHN0cnVjdHVyZSh0aGlzKTsKQEAgLTM4ODEsMTUgKzM4NzMsMTUgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICBzbG93UGF0aC5hcHBl
bmQobV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6WmVybywgYWxsb2NhdG9yR1BS
KSk7CiAgICAgICAgIGVtaXRBbGxvY2F0ZUpTT2JqZWN0KHJlc3VsdEdQUiwgYWxsb2NhdG9yR1BS
LCBzdHJ1Y3R1cmVHUFIsIFRydXN0ZWRJbW1QdHIoMCksIHNjcmF0Y2hHUFIsIHNsb3dQYXRoKTsK
IAotICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcihzbG93UGF0aENhbGwoc2xvd1BhdGgsIHRo
aXMsIG9wZXJhdGlvbkNyZWF0ZVRoaXMsIHJlc3VsdEdQUiwgY2FsbGVlR1BSLCBub2RlLmlubGlu
ZUNhcGFjaXR5KCkpKTsKKyAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3Ioc2xvd1BhdGhDYWxs
KHNsb3dQYXRoLCB0aGlzLCBvcGVyYXRpb25DcmVhdGVUaGlzLCByZXN1bHRHUFIsIGNhbGxlZUdQ
Uiwgbm9kZS0+aW5saW5lQ2FwYWNpdHkoKSkpOwogICAgICAgICAKLSAgICAgICAgY2VsbFJlc3Vs
dChyZXN1bHRHUFIsIG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAgY2VsbFJlc3VsdChyZXN1bHRH
UFIsIG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgQWxs
b2NhdGlvblByb2ZpbGVXYXRjaHBvaW50OiB7Ci0gICAgICAgIGpzQ2FzdDxKU0Z1bmN0aW9uKj4o
bm9kZS5mdW5jdGlvbigpKS0+YWRkQWxsb2NhdGlvblByb2ZpbGVXYXRjaHBvaW50KHNwZWN1bGF0
aW9uV2F0Y2hwb2ludCgpKTsKLSAgICAgICAgbm9SZXN1bHQobV9jb21waWxlSW5kZXgpOworICAg
ICAgICBqc0Nhc3Q8SlNGdW5jdGlvbio+KG5vZGUtPmZ1bmN0aW9uKCkpLT5hZGRBbGxvY2F0aW9u
UHJvZmlsZVdhdGNocG9pbnQoc3BlY3VsYXRpb25XYXRjaHBvaW50KCkpOworICAgICAgICBub1Jl
c3VsdChub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCkBAIC0zOTA0LDcgKzM4OTYsNyBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIAogICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgc2xvd1BhdGg7CiAKLSAgICAgICAgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUgPSBub2RlLnN0cnVjdHVyZSgpOworICAgICAgICBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSA9IG5vZGUtPnN0cnVjdHVyZSgpOwogICAgICAgICBzaXplX3QgYWxsb2NhdGlvblNp
emUgPSBKU09iamVjdDo6YWxsb2NhdGlvblNpemUoc3RydWN0dXJlLT5pbmxpbmVDYXBhY2l0eSgp
KTsKICAgICAgICAgTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3JQdHIgPSAmbV9qaXQuZ2xvYmFs
RGF0YSgpLT5oZWFwLmFsbG9jYXRvckZvck9iamVjdFdpdGhvdXREZXN0cnVjdG9yKGFsbG9jYXRp
b25TaXplKTsKIApAQCAtMzkxMywyOSArMzkwNSwyOSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlKE5vZGUmIG5vZGUpCiAKICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3Ioc2xvd1Bh
dGhDYWxsKHNsb3dQYXRoLCB0aGlzLCBvcGVyYXRpb25OZXdPYmplY3QsIHJlc3VsdEdQUiwgc3Ry
dWN0dXJlKSk7CiAgICAgICAgIAotICAgICAgICBjZWxsUmVzdWx0KHJlc3VsdEdQUiwgbV9jb21w
aWxlSW5kZXgpOworICAgICAgICBjZWxsUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7CiAgICAgICAg
IGJyZWFrOwogICAgIH0KIAogICAgIGNhc2UgR2V0Q2FsbGVlOiB7CiAgICAgICAgIEdQUlRlbXBv
cmFyeSByZXN1bHQodGhpcyk7Ci0gICAgICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OmFk
ZHJlc3NGb3Ioc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihub2RlLmNvZGVPcmlnaW4uc3Rh
Y2tPZmZzZXQoKSArIHN0YXRpY19jYXN0PGludD4oSlNTdGFjazo6Q2FsbGVlKSkpLCByZXN1bHQu
Z3ByKCkpOwotICAgICAgICBjZWxsUmVzdWx0KHJlc3VsdC5ncHIoKSwgbV9jb21waWxlSW5kZXgp
OworICAgICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKHN0YXRpY19j
YXN0PFZpcnR1YWxSZWdpc3Rlcj4obm9kZS0+Y29kZU9yaWdpbi5zdGFja09mZnNldCgpICsgc3Rh
dGljX2Nhc3Q8aW50PihKU1N0YWNrOjpDYWxsZWUpKSksIHJlc3VsdC5ncHIoKSk7CisgICAgICAg
IGNlbGxSZXN1bHQocmVzdWx0LmdwcigpLCBub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQog
ICAgICAgICAKICAgICBjYXNlIFNldENhbGxlZTogewotICAgICAgICBTcGVjdWxhdGVDZWxsT3Bl
cmFuZCBjYWxsZWUodGhpcywgbm9kZS5jaGlsZDEoKSk7Ci0gICAgICAgIG1faml0LnN0b3JlUHRy
KGNhbGxlZS5ncHIoKSwgSklUQ29tcGlsZXI6OmFkZHJlc3NGb3Ioc3RhdGljX2Nhc3Q8VmlydHVh
bFJlZ2lzdGVyPihub2RlLmNvZGVPcmlnaW4uc3RhY2tPZmZzZXQoKSArIHN0YXRpY19jYXN0PGlu
dD4oSlNTdGFjazo6Q2FsbGVlKSkpKTsKLSAgICAgICAgbm9SZXN1bHQobV9jb21waWxlSW5kZXgp
OworICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBjYWxsZWUodGhpcywgbm9kZS0+Y2hpbGQx
KCkpOworICAgICAgICBtX2ppdC5zdG9yZVB0cihjYWxsZWUuZ3ByKCksIEpJVENvbXBpbGVyOjph
ZGRyZXNzRm9yKHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4obm9kZS0+Y29kZU9yaWdpbi5z
dGFja09mZnNldCgpICsgc3RhdGljX2Nhc3Q8aW50PihKU1N0YWNrOjpDYWxsZWUpKSkpOworICAg
ICAgICBub1Jlc3VsdChub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKICAg
ICBjYXNlIEdldFNjb3BlOiB7Ci0gICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGZ1bmN0aW9u
KHRoaXMsIG5vZGUuY2hpbGQxKCkpOworICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBmdW5j
dGlvbih0aGlzLCBub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQo
dGhpcywgZnVuY3Rpb24pOwogICAgICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjpBZGRy
ZXNzKGZ1bmN0aW9uLmdwcigpLCBKU0Z1bmN0aW9uOjpvZmZzZXRPZlNjb3BlQ2hhaW4oKSksIHJl
c3VsdC5ncHIoKSk7Ci0gICAgICAgIGNlbGxSZXN1bHQocmVzdWx0LmdwcigpLCBtX2NvbXBpbGVJ
bmRleCk7CisgICAgICAgIGNlbGxSZXN1bHQocmVzdWx0LmdwcigpLCBub2RlKTsKICAgICAgICAg
YnJlYWs7CiAgICAgfQogICAgICAgICAKQEAgLTM5NDMsMjAgKzM5MzUsMjAgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICBHUFJUZW1wb3JhcnkgcmVz
dWx0KHRoaXMpOwogICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwogCi0g
ICAgICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OmFkZHJlc3NGb3Ioc3RhdGljX2Nhc3Q8
VmlydHVhbFJlZ2lzdGVyPihub2RlLmNvZGVPcmlnaW4uc3RhY2tPZmZzZXQoKSArIHN0YXRpY19j
YXN0PGludD4oSlNTdGFjazo6U2NvcGVDaGFpbikpKSwgcmVzdWx0R1BSKTsKLSAgICAgICAgY2Vs
bFJlc3VsdChyZXN1bHRHUFIsIG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAgbV9qaXQubG9hZFB0
cihKSVRDb21waWxlcjo6YWRkcmVzc0ZvcihzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KG5v
ZGUtPmNvZGVPcmlnaW4uc3RhY2tPZmZzZXQoKSArIHN0YXRpY19jYXN0PGludD4oSlNTdGFjazo6
U2NvcGVDaGFpbikpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgY2VsbFJlc3VsdChyZXN1bHRHUFIs
IG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgU2V0TXlT
Y29wZTogewotICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBjYWxsZWUodGhpcywgbm9kZS5j
aGlsZDEoKSk7Ci0gICAgICAgIG1faml0LnN0b3JlUHRyKGNhbGxlZS5ncHIoKSwgSklUQ29tcGls
ZXI6OmFkZHJlc3NGb3Ioc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihub2RlLmNvZGVPcmln
aW4uc3RhY2tPZmZzZXQoKSArIHN0YXRpY19jYXN0PGludD4oSlNTdGFjazo6U2NvcGVDaGFpbikp
KSk7Ci0gICAgICAgIG5vUmVzdWx0KG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAgU3BlY3VsYXRl
Q2VsbE9wZXJhbmQgY2FsbGVlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgbV9qaXQu
c3RvcmVQdHIoY2FsbGVlLmdwcigpLCBKSVRDb21waWxlcjo6YWRkcmVzc0ZvcihzdGF0aWNfY2Fz
dDxWaXJ0dWFsUmVnaXN0ZXI+KG5vZGUtPmNvZGVPcmlnaW4uc3RhY2tPZmZzZXQoKSArIHN0YXRp
Y19jYXN0PGludD4oSlNTdGFjazo6U2NvcGVDaGFpbikpKSk7CisgICAgICAgIG5vUmVzdWx0KG5v
ZGUpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgU2tpcFRvcFNj
b3BlOiB7Ci0gICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIHNjb3BlKHRoaXMsIG5vZGUuY2hp
bGQxKCkpOworICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBzY29wZSh0aGlzLCBub2RlLT5j
aGlsZDEoKSk7CiAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgc2NvcGUpOwogICAg
ICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwogICAgICAgICBtX2ppdC5tb3Zl
KHNjb3BlLmdwcigpLCByZXN1bHRHUFIpOwpAQCAtMzk2Nyw0MiArMzk1OSw0MiBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgICAgICAgICAgICAgIHN0
YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4obV9qaXQuY29kZUJsb2NrKCktPmFjdGl2YXRpb25S
ZWdpc3RlcigpKSkpOwogICAgICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjpBZGRyZXNz
KHJlc3VsdEdQUiwgSlNTY29wZTo6b2Zmc2V0T2ZOZXh0KCkpLCByZXN1bHRHUFIpOwogICAgICAg
ICBhY3RpdmF0aW9uTm90Q3JlYXRlZC5saW5rKCZtX2ppdCk7Ci0gICAgICAgIGNlbGxSZXN1bHQo
cmVzdWx0R1BSLCBtX2NvbXBpbGVJbmRleCk7CisgICAgICAgIGNlbGxSZXN1bHQocmVzdWx0R1BS
LCBub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKICAgICBjYXNlIFNraXBT
Y29wZTogewotICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBzY29wZSh0aGlzLCBub2RlLmNo
aWxkMSgpKTsKKyAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgc2NvcGUodGhpcywgbm9kZS0+
Y2hpbGQxKCkpOwogICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIHNjb3BlKTsKICAg
ICAgICAgbV9qaXQubG9hZFB0cihKSVRDb21waWxlcjo6QWRkcmVzcyhzY29wZS5ncHIoKSwgSlNT
Y29wZTo6b2Zmc2V0T2ZOZXh0KCkpLCByZXN1bHQuZ3ByKCkpOwotICAgICAgICBjZWxsUmVzdWx0
KHJlc3VsdC5ncHIoKSwgbV9jb21waWxlSW5kZXgpOworICAgICAgICBjZWxsUmVzdWx0KHJlc3Vs
dC5ncHIoKSwgbm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCiAgICAgY2Fz
ZSBHZXRTY29wZVJlZ2lzdGVyczogewotICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBzY29w
ZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKKyAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgc2Nv
cGUodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRo
aXMpOwogICAgICAgICBHUFJSZWcgc2NvcGVHUFIgPSBzY29wZS5ncHIoKTsKICAgICAgICAgR1BS
UmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKIAogICAgICAgICBtX2ppdC5sb2FkUHRyKEpJ
VENvbXBpbGVyOjpBZGRyZXNzKHNjb3BlR1BSLCBKU1ZhcmlhYmxlT2JqZWN0OjpvZmZzZXRPZlJl
Z2lzdGVycygpKSwgcmVzdWx0R1BSKTsKLSAgICAgICAgc3RvcmFnZVJlc3VsdChyZXN1bHRHUFIs
IG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAgc3RvcmFnZVJlc3VsdChyZXN1bHRHUFIsIG5vZGUp
OwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgY2FzZSBHZXRTY29wZWRWYXI6IHsKLSAgICAg
ICAgU3RvcmFnZU9wZXJhbmQgcmVnaXN0ZXJzKHRoaXMsIG5vZGUuY2hpbGQxKCkpOworICAgICAg
ICBTdG9yYWdlT3BlcmFuZCByZWdpc3RlcnModGhpcywgbm9kZS0+Y2hpbGQxKCkpOwogICAgICAg
ICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwogICAgICAgICBHUFJSZWcgcmVnaXN0ZXJzR1BS
ID0gcmVnaXN0ZXJzLmdwcigpOwogICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0Lmdw
cigpOwogCi0gICAgICAgIG1faml0LmxvYWQ2NChKSVRDb21waWxlcjo6QWRkcmVzcyhyZWdpc3Rl
cnNHUFIsIG5vZGUudmFyTnVtYmVyKCkgKiBzaXplb2YoUmVnaXN0ZXIpKSwgcmVzdWx0R1BSKTsK
LSAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRHUFIsIG1fY29tcGlsZUluZGV4KTsKKyAgICAg
ICAgbV9qaXQubG9hZDY0KEpJVENvbXBpbGVyOjpBZGRyZXNzKHJlZ2lzdGVyc0dQUiwgbm9kZS0+
dmFyTnVtYmVyKCkgKiBzaXplb2YoUmVnaXN0ZXIpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAganNW
YWx1ZVJlc3VsdChyZXN1bHRHUFIsIG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAg
Y2FzZSBQdXRTY29wZWRWYXI6IHsKLSAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgc2NvcGUo
dGhpcywgbm9kZS5jaGlsZDEoKSk7Ci0gICAgICAgIFN0b3JhZ2VPcGVyYW5kIHJlZ2lzdGVycyh0
aGlzLCBub2RlLmNoaWxkMigpKTsKLSAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywg
bm9kZS5jaGlsZDMoKSk7CisgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIHNjb3BlKHRoaXMs
IG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgU3RvcmFnZU9wZXJhbmQgcmVnaXN0ZXJzKHRoaXMs
IG5vZGUtPmNoaWxkMigpKTsKKyAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9k
ZS0+Y2hpbGQzKCkpOwogICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaFJlZ2lzdGVyKHRoaXMp
OwogCiAgICAgICAgIEdQUlJlZyBzY29wZUdQUiA9IHNjb3BlLmdwcigpOwpAQCAtNDAxMCwxOSAr
NDAwMiwxOSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAg
ICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOwogICAgICAgICBHUFJSZWcgc2NyYXRj
aEdQUiA9IHNjcmF0Y2hSZWdpc3Rlci5ncHIoKTsKIAotICAgICAgICBtX2ppdC5zdG9yZTY0KHZh
bHVlR1BSLCBKSVRDb21waWxlcjo6QWRkcmVzcyhyZWdpc3RlcnNHUFIsIG5vZGUudmFyTnVtYmVy
KCkgKiBzaXplb2YoUmVnaXN0ZXIpKSk7Ci0gICAgICAgIHdyaXRlQmFycmllcihzY29wZUdQUiwg
dmFsdWVHUFIsIG5vZGUuY2hpbGQzKCksIFdyaXRlQmFycmllckZvclZhcmlhYmxlQWNjZXNzLCBz
Y3JhdGNoR1BSKTsKLSAgICAgICAgbm9SZXN1bHQobV9jb21waWxlSW5kZXgpOworICAgICAgICBt
X2ppdC5zdG9yZTY0KHZhbHVlR1BSLCBKSVRDb21waWxlcjo6QWRkcmVzcyhyZWdpc3RlcnNHUFIs
IG5vZGUtPnZhck51bWJlcigpICogc2l6ZW9mKFJlZ2lzdGVyKSkpOworICAgICAgICB3cml0ZUJh
cnJpZXIoc2NvcGVHUFIsIHZhbHVlR1BSLCBub2RlLT5jaGlsZDMoKSwgV3JpdGVCYXJyaWVyRm9y
VmFyaWFibGVBY2Nlc3MsIHNjcmF0Y2hHUFIpOworICAgICAgICBub1Jlc3VsdChub2RlKTsKICAg
ICAgICAgYnJlYWs7CiAgICAgfQogICAgIGNhc2UgR2V0QnlJZDogewotICAgICAgICBpZiAoIW5v
ZGUucHJlZGljdGlvbigpKSB7Ci0gICAgICAgICAgICB0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1
dGlvbihJbmFkZXF1YXRlQ292ZXJhZ2UsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSk7CisgICAgICAg
IGlmICghbm9kZS0+cHJlZGljdGlvbigpKSB7CisgICAgICAgICAgICB0ZXJtaW5hdGVTcGVjdWxh
dGl2ZUV4ZWN1dGlvbihJbmFkZXF1YXRlQ292ZXJhZ2UsIEpTVmFsdWVSZWdzKCksIDApOwogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIGlmIChpc0NlbGxT
cGVjdWxhdGlvbihhdChub2RlLmNoaWxkMSgpKS5wcmVkaWN0aW9uKCkpKSB7Ci0gICAgICAgICAg
ICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOworICAgICAg
ICBpZiAoaXNDZWxsU3BlY3VsYXRpb24obm9kZS0+Y2hpbGQxKCktPnByZWRpY3Rpb24oKSkpIHsK
KyAgICAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS0+Y2hpbGQx
KCkpOwogICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBiYXNlKTsKICAgICAg
ICAgICAgIAogICAgICAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOwpAQCAtNDAz
MCwxMyArNDAyMiwxMyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUp
CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGJhc2UudXNlKCk7CiAgICAgICAgICAgICAKLSAg
ICAgICAgICAgIGNhY2hlZEdldEJ5SWQobm9kZS5jb2RlT3JpZ2luLCBiYXNlR1BSLCByZXN1bHRH
UFIsIG5vZGUuaWRlbnRpZmllck51bWJlcigpKTsKKyAgICAgICAgICAgIGNhY2hlZEdldEJ5SWQo
bm9kZS0+Y29kZU9yaWdpbiwgYmFzZUdQUiwgcmVzdWx0R1BSLCBub2RlLT5pZGVudGlmaWVyTnVt
YmVyKCkpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdEdQ
UiwgbV9jb21waWxlSW5kZXgsIFVzZUNoaWxkcmVuQ2FsbGVkRXhwbGljaXRseSk7CisgICAgICAg
ICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSwgVXNlQ2hpbGRyZW5DYWxsZWRFeHBs
aWNpdGx5KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAg
ICBKU1ZhbHVlT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOworICAgICAgICBKU1Zh
bHVlT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgR1BSVGVtcG9y
YXJ5IHJlc3VsdCh0aGlzLCBiYXNlKTsKICAgICAgICAgCiAgICAgICAgIEdQUlJlZyBiYXNlR1BS
ID0gYmFzZS5ncHIoKTsKQEAgLTQwNDYsMjEgKzQwMzgsMjEgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAKICAgICAgICAgSklUQ29tcGlsZXI6Okp1
bXAgbm90Q2VsbCA9IG1faml0LmJyYW5jaFRlc3Q2NChKSVRDb21waWxlcjo6Tm9uWmVybywgYmFz
ZUdQUiwgR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKTsKICAgICAgICAgCi0gICAgICAgIGNhY2hl
ZEdldEJ5SWQobm9kZS5jb2RlT3JpZ2luLCBiYXNlR1BSLCByZXN1bHRHUFIsIG5vZGUuaWRlbnRp
Zmllck51bWJlcigpLCBub3RDZWxsKTsKKyAgICAgICAgY2FjaGVkR2V0QnlJZChub2RlLT5jb2Rl
T3JpZ2luLCBiYXNlR1BSLCByZXN1bHRHUFIsIG5vZGUtPmlkZW50aWZpZXJOdW1iZXIoKSwgbm90
Q2VsbCk7CiAgICAgICAgIAotICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdEdQUiwgbV9jb21w
aWxlSW5kZXgsIFVzZUNoaWxkcmVuQ2FsbGVkRXhwbGljaXRseSk7CisgICAgICAgIGpzVmFsdWVS
ZXN1bHQocmVzdWx0R1BSLCBub2RlLCBVc2VDaGlsZHJlbkNhbGxlZEV4cGxpY2l0bHkpOwogICAg
ICAgICAKICAgICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAgY2FzZSBHZXRCeUlkRmx1c2g6IHsK
LSAgICAgICAgaWYgKCFub2RlLnByZWRpY3Rpb24oKSkgewotICAgICAgICAgICAgdGVybWluYXRl
U3BlY3VsYXRpdmVFeGVjdXRpb24oSW5hZGVxdWF0ZUNvdmVyYWdlLCBKU1ZhbHVlUmVncygpLCBO
b05vZGUpOworICAgICAgICBpZiAoIW5vZGUtPnByZWRpY3Rpb24oKSkgeworICAgICAgICAgICAg
dGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oSW5hZGVxdWF0ZUNvdmVyYWdlLCBKU1ZhbHVl
UmVncygpLCAwKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIAotICAg
ICAgICBpZiAoaXNDZWxsU3BlY3VsYXRpb24oYXQobm9kZS5jaGlsZDEoKSkucHJlZGljdGlvbigp
KSkgewotICAgICAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLmNo
aWxkMSgpKTsKKyAgICAgICAgaWYgKGlzQ2VsbFNwZWN1bGF0aW9uKG5vZGUtPmNoaWxkMSgpLT5w
cmVkaWN0aW9uKCkpKSB7CisgICAgICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRo
aXMsIG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5n
cHIoKTsKIAogICAgICAgICAgICAgR1BSUmVzdWx0IHJlc3VsdCh0aGlzKTsKQEAgLTQwNzEsMTMg
KzQwNjMsMTMgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAg
ICAgICAgICAgCiAgICAgICAgICAgICBmbHVzaFJlZ2lzdGVycygpOwogICAgICAgICAgICAgCi0g
ICAgICAgICAgICBjYWNoZWRHZXRCeUlkKG5vZGUuY29kZU9yaWdpbiwgYmFzZUdQUiwgcmVzdWx0
R1BSLCBub2RlLmlkZW50aWZpZXJOdW1iZXIoKSwgSklUQ29tcGlsZXI6Okp1bXAoKSwgRG9udFNw
aWxsKTsKKyAgICAgICAgICAgIGNhY2hlZEdldEJ5SWQobm9kZS0+Y29kZU9yaWdpbiwgYmFzZUdQ
UiwgcmVzdWx0R1BSLCBub2RlLT5pZGVudGlmaWVyTnVtYmVyKCksIEpJVENvbXBpbGVyOjpKdW1w
KCksIERvbnRTcGlsbCk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQo
cmVzdWx0R1BSLCBtX2NvbXBpbGVJbmRleCwgVXNlQ2hpbGRyZW5DYWxsZWRFeHBsaWNpdGx5KTsK
KyAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0R1BSLCBub2RlLCBVc2VDaGlsZHJlbkNh
bGxlZEV4cGxpY2l0bHkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAg
Ci0gICAgICAgIEpTVmFsdWVPcGVyYW5kIGJhc2UodGhpcywgbm9kZS5jaGlsZDEoKSk7CisgICAg
ICAgIEpTVmFsdWVPcGVyYW5kIGJhc2UodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICBH
UFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7CiAKICAgICAgICAgR1BSUmVzdWx0IHJlc3VsdCh0
aGlzKTsKQEAgLTQwODgsOSArNDA4MCw5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUo
Tm9kZSYgbm9kZSkKICAgICAgICAgCiAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIG5vdENlbGwg
PSBtX2ppdC5icmFuY2hUZXN0NjQoSklUQ29tcGlsZXI6Ok5vblplcm8sIGJhc2VHUFIsIEdQUklu
Zm86OnRhZ01hc2tSZWdpc3Rlcik7CiAgICAgICAgIAotICAgICAgICBjYWNoZWRHZXRCeUlkKG5v
ZGUuY29kZU9yaWdpbiwgYmFzZUdQUiwgcmVzdWx0R1BSLCBub2RlLmlkZW50aWZpZXJOdW1iZXIo
KSwgbm90Q2VsbCwgRG9udFNwaWxsKTsKKyAgICAgICAgY2FjaGVkR2V0QnlJZChub2RlLT5jb2Rl
T3JpZ2luLCBiYXNlR1BSLCByZXN1bHRHUFIsIG5vZGUtPmlkZW50aWZpZXJOdW1iZXIoKSwgbm90
Q2VsbCwgRG9udFNwaWxsKTsKICAgICAgICAgCi0gICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0
R1BSLCBtX2NvbXBpbGVJbmRleCwgVXNlQ2hpbGRyZW5DYWxsZWRFeHBsaWNpdGx5KTsKKyAgICAg
ICAganNWYWx1ZVJlc3VsdChyZXN1bHRHUFIsIG5vZGUsIFVzZUNoaWxkcmVuQ2FsbGVkRXhwbGlj
aXRseSk7CiAKICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAtNDEwMCw0NiArNDA5Miw0NiBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIGJyZWFrOwog
ICAgICAgICAKICAgICBjYXNlIENoZWNrRnVuY3Rpb246IHsKLSAgICAgICAgU3BlY3VsYXRlQ2Vs
bE9wZXJhbmQgZnVuY3Rpb24odGhpcywgbm9kZS5jaGlsZDEoKSk7Ci0gICAgICAgIHNwZWN1bGF0
aW9uQ2hlY2soQmFkRnVuY3Rpb24sIEpTVmFsdWVSZWdzKGZ1bmN0aW9uLmdwcigpKSwgbm9kZS5j
aGlsZDEoKSwgbV9qaXQuYnJhbmNoV2Vha1B0cihKSVRDb21waWxlcjo6Tm90RXF1YWwsIGZ1bmN0
aW9uLmdwcigpLCBub2RlLmZ1bmN0aW9uKCkpKTsKLSAgICAgICAgbm9SZXN1bHQobV9jb21waWxl
SW5kZXgpOworICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBmdW5jdGlvbih0aGlzLCBub2Rl
LT5jaGlsZDEoKSk7CisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkRnVuY3Rpb24sIEpTVmFs
dWVSZWdzKGZ1bmN0aW9uLmdwcigpKSwgbm9kZS0+Y2hpbGQxKCksIG1faml0LmJyYW5jaFdlYWtQ
dHIoSklUQ29tcGlsZXI6Ok5vdEVxdWFsLCBmdW5jdGlvbi5ncHIoKSwgbm9kZS0+ZnVuY3Rpb24o
KSkpOworICAgICAgICBub1Jlc3VsdChub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAg
ICAgICAKICAgICBjYXNlIENoZWNrRXhlY3V0YWJsZTogewotICAgICAgICBTcGVjdWxhdGVDZWxs
T3BlcmFuZCBmdW5jdGlvbih0aGlzLCBub2RlLmNoaWxkMSgpKTsKLSAgICAgICAgc3BlY3VsYXRp
b25DaGVjayhCYWRFeGVjdXRhYmxlLCBKU1ZhbHVlUmVncyhmdW5jdGlvbi5ncHIoKSksIG5vZGUu
Y2hpbGQxKCksIG1faml0LmJyYW5jaFdlYWtQdHIoSklUQ29tcGlsZXI6Ok5vdEVxdWFsLCBKSVRD
b21waWxlcjo6QWRkcmVzcyhmdW5jdGlvbi5ncHIoKSwgSlNGdW5jdGlvbjo6b2Zmc2V0T2ZFeGVj
dXRhYmxlKCkpLCBub2RlLmV4ZWN1dGFibGUoKSkpOwotICAgICAgICBub1Jlc3VsdChtX2NvbXBp
bGVJbmRleCk7CisgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGZ1bmN0aW9uKHRoaXMsIG5v
ZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRFeGVjdXRhYmxlLCBK
U1ZhbHVlUmVncyhmdW5jdGlvbi5ncHIoKSksIG5vZGUtPmNoaWxkMSgpLCBtX2ppdC5icmFuY2hX
ZWFrUHRyKEpJVENvbXBpbGVyOjpOb3RFcXVhbCwgSklUQ29tcGlsZXI6OkFkZHJlc3MoZnVuY3Rp
b24uZ3ByKCksIEpTRnVuY3Rpb246Om9mZnNldE9mRXhlY3V0YWJsZSgpKSwgbm9kZS0+ZXhlY3V0
YWJsZSgpKSk7CisgICAgICAgIG5vUmVzdWx0KG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9
CiAgICAgICAgIAogICAgIGNhc2UgQ2hlY2tTdHJ1Y3R1cmU6CiAgICAgY2FzZSBGb3J3YXJkQ2hl
Y2tTdHJ1Y3R1cmU6IHsKLSAgICAgICAgQWJzdHJhY3RWYWx1ZSYgdmFsdWUgPSBtX3N0YXRlLmZv
ck5vZGUobm9kZS5jaGlsZDEoKSk7Ci0gICAgICAgIGlmICh2YWx1ZS5tX2N1cnJlbnRLbm93blN0
cnVjdHVyZS5pc1N1YnNldE9mKG5vZGUuc3RydWN0dXJlU2V0KCkpCisgICAgICAgIEFic3RyYWN0
VmFsdWUmIHZhbHVlID0gbV9zdGF0ZS5mb3JOb2RlKG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAg
aWYgKHZhbHVlLm1fY3VycmVudEtub3duU3RydWN0dXJlLmlzU3Vic2V0T2Yobm9kZS0+c3RydWN0
dXJlU2V0KCkpCiAgICAgICAgICAgICAmJiBpc0NlbGxTcGVjdWxhdGlvbih2YWx1ZS5tX3R5cGUp
KSB7Ci0gICAgICAgICAgICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCk7CisgICAgICAgICAgICBu
b1Jlc3VsdChub2RlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIAot
ICAgICAgICBTcGVjdWxhdGlvbkRpcmVjdGlvbiBkaXJlY3Rpb24gPSBub2RlLm9wKCkgPT0gRm9y
d2FyZENoZWNrU3RydWN0dXJlID8gRm9yd2FyZFNwZWN1bGF0aW9uIDogQmFja3dhcmRTcGVjdWxh
dGlvbjsKLSAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLmNoaWxk
MSgpLCBkaXJlY3Rpb24pOworICAgICAgICBTcGVjdWxhdGlvbkRpcmVjdGlvbiBkaXJlY3Rpb24g
PSBub2RlLT5vcCgpID09IEZvcndhcmRDaGVja1N0cnVjdHVyZSA/IEZvcndhcmRTcGVjdWxhdGlv
biA6IEJhY2t3YXJkU3BlY3VsYXRpb247CisgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJh
c2UodGhpcywgbm9kZS0+Y2hpbGQxKCksIGRpcmVjdGlvbik7CiAgICAgICAgIAotICAgICAgICBB
U1NFUlQobm9kZS5zdHJ1Y3R1cmVTZXQoKS5zaXplKCkpOworICAgICAgICBBU1NFUlQobm9kZS0+
c3RydWN0dXJlU2V0KCkuc2l6ZSgpKTsKICAgICAgICAgCiAgICAgICAgIEV4aXRLaW5kIGV4aXRL
aW5kOwotICAgICAgICBpZiAobV9qaXQuZ3JhcGgoKVtub2RlLmNoaWxkMSgpXS5vcCgpID09IFdl
YWtKU0NvbnN0YW50KQorICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPm9wKCkgPT0gV2Vha0pT
Q29uc3RhbnQpCiAgICAgICAgICAgICBleGl0S2luZCA9IEJhZFdlYWtDb25zdGFudENhY2hlOwog
ICAgICAgICBlbHNlCiAgICAgICAgICAgICBleGl0S2luZCA9IEJhZENhY2hlOwogICAgICAgICAK
LSAgICAgICAgaWYgKG5vZGUuc3RydWN0dXJlU2V0KCkuc2l6ZSgpID09IDEpIHsKKyAgICAgICAg
aWYgKG5vZGUtPnN0cnVjdHVyZVNldCgpLnNpemUoKSA9PSAxKSB7CiAgICAgICAgICAgICBzcGVj
dWxhdGlvbkNoZWNrKAotICAgICAgICAgICAgICAgIGV4aXRLaW5kLCBKU1ZhbHVlUmVncyhiYXNl
LmdwcigpKSwgTm9Ob2RlLAorICAgICAgICAgICAgICAgIGV4aXRLaW5kLCBKU1ZhbHVlUmVncyhi
YXNlLmdwcigpKSwgMCwKICAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2hXZWFrUHRyKAogICAg
ICAgICAgICAgICAgICAgICBKSVRDb21waWxlcjo6Tm90RXF1YWwsCiAgICAgICAgICAgICAgICAg
ICAgIEpJVENvbXBpbGVyOjpBZGRyZXNzKGJhc2UuZ3ByKCksIEpTQ2VsbDo6c3RydWN0dXJlT2Zm
c2V0KCkpLAotICAgICAgICAgICAgICAgICAgICBub2RlLnN0cnVjdHVyZVNldCgpWzBdKSwKKyAg
ICAgICAgICAgICAgICAgICAgbm9kZS0+c3RydWN0dXJlU2V0KClbMF0pLAogICAgICAgICAgICAg
ICAgIGRpcmVjdGlvbik7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBHUFJUZW1wb3Jh
cnkgc3RydWN0dXJlKHRoaXMpOwpAQCAtNDE0OCwxOSArNDE0MCwxOSBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgICAgICAKICAgICAgICAgICAgIEpJ
VENvbXBpbGVyOjpKdW1wTGlzdCBkb25lOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IG5vZGUuc3RydWN0dXJlU2V0KCkuc2l6ZSgpIC0gMTsgKytpKQot
ICAgICAgICAgICAgICAgIGRvbmUuYXBwZW5kKG1faml0LmJyYW5jaFdlYWtQdHIoSklUQ29tcGls
ZXI6OkVxdWFsLCBzdHJ1Y3R1cmUuZ3ByKCksIG5vZGUuc3RydWN0dXJlU2V0KClbaV0pKTsKKyAg
ICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbm9kZS0+c3RydWN0dXJlU2V0KCkuc2l6
ZSgpIC0gMTsgKytpKQorICAgICAgICAgICAgICAgIGRvbmUuYXBwZW5kKG1faml0LmJyYW5jaFdl
YWtQdHIoSklUQ29tcGlsZXI6OkVxdWFsLCBzdHJ1Y3R1cmUuZ3ByKCksIG5vZGUtPnN0cnVjdHVy
ZVNldCgpW2ldKSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2so
Ci0gICAgICAgICAgICAgICAgZXhpdEtpbmQsIEpTVmFsdWVSZWdzKGJhc2UuZ3ByKCkpLCBOb05v
ZGUsCisgICAgICAgICAgICAgICAgZXhpdEtpbmQsIEpTVmFsdWVSZWdzKGJhc2UuZ3ByKCkpLCAw
LAogICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaFdlYWtQdHIoCi0gICAgICAgICAgICAgICAg
ICAgIEpJVENvbXBpbGVyOjpOb3RFcXVhbCwgc3RydWN0dXJlLmdwcigpLCBub2RlLnN0cnVjdHVy
ZVNldCgpLmxhc3QoKSksCisgICAgICAgICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpOb3RFcXVh
bCwgc3RydWN0dXJlLmdwcigpLCBub2RlLT5zdHJ1Y3R1cmVTZXQoKS5sYXN0KCkpLAogICAgICAg
ICAgICAgICAgIGRpcmVjdGlvbik7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGRvbmUubGlu
aygmbV9qaXQpOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBub1Jlc3VsdChtX2NvbXBp
bGVJbmRleCk7CisgICAgICAgIG5vUmVzdWx0KG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9
CiAgICAgICAgIApAQCAtNDE3Myw1NCArNDE2NSw1NCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIC8vIHdlJ2xsIGp1c3QgcmVseSBvbiB0aGUgZmFj
dCB0aGF0IHdoZW4gYSB3YXRjaHBvaW50IGZpcmVzIHRoZW4gdGhhdCdzCiAgICAgICAgIC8vIHF1
aXRlIGEgaGludCBhbHJlYWR5LgogICAgICAgICAKLSAgICAgICAgU3BlY3VsYXRpb25EaXJlY3Rp
b24gZGlyZWN0aW9uID0gbm9kZS5vcCgpID09IEZvcndhcmRTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0
Y2hwb2ludCA/IEZvcndhcmRTcGVjdWxhdGlvbiA6IEJhY2t3YXJkU3BlY3VsYXRpb247CisgICAg
ICAgIFNwZWN1bGF0aW9uRGlyZWN0aW9uIGRpcmVjdGlvbiA9IG5vZGUtPm9wKCkgPT0gRm9yd2Fy
ZFN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50ID8gRm9yd2FyZFNwZWN1bGF0aW9uIDogQmFj
a3dhcmRTcGVjdWxhdGlvbjsKIAotICAgICAgICBtX2ppdC5hZGRXZWFrUmVmZXJlbmNlKG5vZGUu
c3RydWN0dXJlKCkpOwotICAgICAgICBub2RlLnN0cnVjdHVyZSgpLT5hZGRUcmFuc2l0aW9uV2F0
Y2hwb2ludCgKKyAgICAgICAgbV9qaXQuYWRkV2Vha1JlZmVyZW5jZShub2RlLT5zdHJ1Y3R1cmUo
KSk7CisgICAgICAgIG5vZGUtPnN0cnVjdHVyZSgpLT5hZGRUcmFuc2l0aW9uV2F0Y2hwb2ludCgK
ICAgICAgICAgICAgIHNwZWN1bGF0aW9uV2F0Y2hwb2ludCgKLSAgICAgICAgICAgICAgICBtX2pp
dC5ncmFwaCgpW25vZGUuY2hpbGQxKCldLm9wKCkgPT0gV2Vha0pTQ29uc3RhbnQgPyBCYWRXZWFr
Q29uc3RhbnRDYWNoZSA6IEJhZENhY2hlLAorICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgp
LT5vcCgpID09IFdlYWtKU0NvbnN0YW50ID8gQmFkV2Vha0NvbnN0YW50Q2FjaGUgOiBCYWRDYWNo
ZSwKICAgICAgICAgICAgICAgICBkaXJlY3Rpb24pKTsKIAogI2lmICFBU1NFUlRfRElTQUJMRUQK
LSAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKCksIGRp
cmVjdGlvbik7Ci0gICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIGlzT0sgPSBtX2ppdC5icmFuY2hQ
dHIoSklUQ29tcGlsZXI6OkVxdWFsLCBKSVRDb21waWxlcjo6QWRkcmVzcyhvcDEuZ3ByKCksIEpT
Q2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tUHRyKG5vZGUuc3RydWN0dXJlKCkp
KTsKKyAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgb3AxKHRoaXMsIG5vZGUtPmNoaWxkMSgp
LCBkaXJlY3Rpb24pOworICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBpc09LID0gbV9qaXQuYnJh
bmNoUHRyKEpJVENvbXBpbGVyOjpFcXVhbCwgSklUQ29tcGlsZXI6OkFkZHJlc3Mob3AxLmdwcigp
LCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgVHJ1c3RlZEltbVB0cihub2RlLT5zdHJ1Y3R1
cmUoKSkpOwogICAgICAgICBtX2ppdC5icmVha3BvaW50KCk7CiAgICAgICAgIGlzT0subGluaygm
bV9qaXQpOwogI2VuZGlmCiAgICAgICAgIAotICAgICAgICBub1Jlc3VsdChtX2NvbXBpbGVJbmRl
eCk7CisgICAgICAgIG5vUmVzdWx0KG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAg
ICAgIAogICAgIGNhc2UgUGhhbnRvbVB1dFN0cnVjdHVyZTogewotICAgICAgICBBU1NFUlQobm9k
ZS5zdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSgpLnByZXZpb3VzU3RydWN0dXJlLT50cmFuc2l0aW9u
V2F0Y2hwb2ludFNldEhhc0JlZW5JbnZhbGlkYXRlZCgpKTsKKyAgICAgICAgQVNTRVJUKG5vZGUt
PnN0cnVjdHVyZVRyYW5zaXRpb25EYXRhKCkucHJldmlvdXNTdHJ1Y3R1cmUtPnRyYW5zaXRpb25X
YXRjaHBvaW50U2V0SGFzQmVlbkludmFsaWRhdGVkKCkpOwogICAgICAgICBtX2ppdC5hZGRXZWFr
UmVmZXJlbmNlVHJhbnNpdGlvbigKLSAgICAgICAgICAgIG5vZGUuY29kZU9yaWdpbi5jb2RlT3Jp
Z2luT3duZXIoKSwKLSAgICAgICAgICAgIG5vZGUuc3RydWN0dXJlVHJhbnNpdGlvbkRhdGEoKS5w
cmV2aW91c1N0cnVjdHVyZSwKLSAgICAgICAgICAgIG5vZGUuc3RydWN0dXJlVHJhbnNpdGlvbkRh
dGEoKS5uZXdTdHJ1Y3R1cmUpOwotICAgICAgICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCk7Cisg
ICAgICAgICAgICBub2RlLT5jb2RlT3JpZ2luLmNvZGVPcmlnaW5Pd25lcigpLAorICAgICAgICAg
ICAgbm9kZS0+c3RydWN0dXJlVHJhbnNpdGlvbkRhdGEoKS5wcmV2aW91c1N0cnVjdHVyZSwKKyAg
ICAgICAgICAgIG5vZGUtPnN0cnVjdHVyZVRyYW5zaXRpb25EYXRhKCkubmV3U3RydWN0dXJlKTsK
KyAgICAgICAgbm9SZXN1bHQobm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAg
CiAgICAgY2FzZSBQdXRTdHJ1Y3R1cmU6IHsKLSAgICAgICAgQVNTRVJUKG5vZGUuc3RydWN0dXJl
VHJhbnNpdGlvbkRhdGEoKS5wcmV2aW91c1N0cnVjdHVyZS0+dHJhbnNpdGlvbldhdGNocG9pbnRT
ZXRIYXNCZWVuSW52YWxpZGF0ZWQoKSk7CisgICAgICAgIEFTU0VSVChub2RlLT5zdHJ1Y3R1cmVU
cmFuc2l0aW9uRGF0YSgpLnByZXZpb3VzU3RydWN0dXJlLT50cmFuc2l0aW9uV2F0Y2hwb2ludFNl
dEhhc0JlZW5JbnZhbGlkYXRlZCgpKTsKIAotICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBi
YXNlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOworICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBi
YXNlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNl
LmdwcigpOwogICAgICAgICAKICAgICAgICAgbV9qaXQuYWRkV2Vha1JlZmVyZW5jZVRyYW5zaXRp
b24oCi0gICAgICAgICAgICBub2RlLmNvZGVPcmlnaW4uY29kZU9yaWdpbk93bmVyKCksCi0gICAg
ICAgICAgICBub2RlLnN0cnVjdHVyZVRyYW5zaXRpb25EYXRhKCkucHJldmlvdXNTdHJ1Y3R1cmUs
Ci0gICAgICAgICAgICBub2RlLnN0cnVjdHVyZVRyYW5zaXRpb25EYXRhKCkubmV3U3RydWN0dXJl
KTsKKyAgICAgICAgICAgIG5vZGUtPmNvZGVPcmlnaW4uY29kZU9yaWdpbk93bmVyKCksCisgICAg
ICAgICAgICBub2RlLT5zdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSgpLnByZXZpb3VzU3RydWN0dXJl
LAorICAgICAgICAgICAgbm9kZS0+c3RydWN0dXJlVHJhbnNpdGlvbkRhdGEoKS5uZXdTdHJ1Y3R1
cmUpOwogICAgICAgICAKICNpZiBFTkFCTEUoR0dDKSB8fCBFTkFCTEUoV1JJVEVfQkFSUklFUl9Q
Uk9GSUxJTkcpCiAgICAgICAgIC8vIE11c3QgYWx3YXlzIGVtaXQgdGhpcyB3cml0ZSBiYXJyaWVy
IGFzIHRoZSBzdHJ1Y3R1cmUgdHJhbnNpdGlvbiBpdHNlbGYgcmVxdWlyZXMgaXQKLSAgICAgICAg
d3JpdGVCYXJyaWVyKGJhc2VHUFIsIG5vZGUuc3RydWN0dXJlVHJhbnNpdGlvbkRhdGEoKS5uZXdT
dHJ1Y3R1cmUsIFdyaXRlQmFycmllckZvckdlbmVyaWNBY2Nlc3MpOworICAgICAgICB3cml0ZUJh
cnJpZXIoYmFzZUdQUiwgbm9kZS0+c3RydWN0dXJlVHJhbnNpdGlvbkRhdGEoKS5uZXdTdHJ1Y3R1
cmUsIFdyaXRlQmFycmllckZvckdlbmVyaWNBY2Nlc3MpOwogI2VuZGlmCiAgICAgICAgIAotICAg
ICAgICBtX2ppdC5zdG9yZVB0cihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihub2RlLnN0
cnVjdHVyZVRyYW5zaXRpb25EYXRhKCkubmV3U3RydWN0dXJlKSwgTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3MoYmFzZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSkpOworICAgICAgICBtX2pp
dC5zdG9yZVB0cihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihub2RlLT5zdHJ1Y3R1cmVU
cmFuc2l0aW9uRGF0YSgpLm5ld1N0cnVjdHVyZSksIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJh
c2VHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpKTsKICAgICAgICAgCi0gICAgICAgIG5v
UmVzdWx0KG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAgbm9SZXN1bHQobm9kZSk7CiAgICAgICAg
IGJyZWFrOwogICAgIH0KICAgICAgICAgCkBAIC00MjMzLDcgKzQyMjUsNyBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIGJyZWFrOwogICAgICAgICAK
ICAgICBjYXNlIEdldEJ1dHRlcmZseTogewotICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBi
YXNlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOworICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBi
YXNlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0
aGlzLCBiYXNlKTsKICAgICAgICAgCiAgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIo
KTsKQEAgLTQyNDEsNyArNDIzMyw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9k
ZSYgbm9kZSkKICAgICAgICAgCiAgICAgICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OkFk
ZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVzdWx0R1BSKTsK
ICAgICAgICAgCi0gICAgICAgIHN0b3JhZ2VSZXN1bHQocmVzdWx0R1BSLCBtX2NvbXBpbGVJbmRl
eCk7CisgICAgICAgIHN0b3JhZ2VSZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKICAgICAgICAgYnJl
YWs7CiAgICAgfQogCkBAIC00MjUxLDQ1ICs0MjQzLDQ1IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgR2V0QnlPZmZz
ZXQ6IHsKLSAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBub2RlLmNoaWxkMSgp
KTsKKyAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7
CiAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgc3RvcmFnZSk7CiAgICAgICAgIAog
ICAgICAgICBHUFJSZWcgc3RvcmFnZUdQUiA9IHN0b3JhZ2UuZ3ByKCk7CiAgICAgICAgIEdQUlJl
ZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CiAgICAgICAgIAotICAgICAgICBTdG9yYWdlQWNj
ZXNzRGF0YSYgc3RvcmFnZUFjY2Vzc0RhdGEgPSBtX2ppdC5ncmFwaCgpLm1fc3RvcmFnZUFjY2Vz
c0RhdGFbbm9kZS5zdG9yYWdlQWNjZXNzRGF0YUluZGV4KCldOworICAgICAgICBTdG9yYWdlQWNj
ZXNzRGF0YSYgc3RvcmFnZUFjY2Vzc0RhdGEgPSBtX2ppdC5ncmFwaCgpLm1fc3RvcmFnZUFjY2Vz
c0RhdGFbbm9kZS0+c3RvcmFnZUFjY2Vzc0RhdGFJbmRleCgpXTsKICAgICAgICAgCiAgICAgICAg
IG1faml0LmxvYWQ2NChKSVRDb21waWxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBzdG9yYWdlQWNj
ZXNzRGF0YS5vZmZzZXQgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSwgcmVzdWx0R1BSKTsKICAg
ICAgICAgCi0gICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0R1BSLCBtX2NvbXBpbGVJbmRleCk7
CisgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKICAgICAgICAgYnJlYWs7
CiAgICAgfQogICAgICAgICAKICAgICBjYXNlIFB1dEJ5T2Zmc2V0OiB7CiAjaWYgRU5BQkxFKEdH
QykgfHwgRU5BQkxFKFdSSVRFX0JBUlJJRVJfUFJPRklMSU5HKQotICAgICAgICBTcGVjdWxhdGVD
ZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUuY2hpbGQyKCkpOworICAgICAgICBTcGVjdWxhdGVD
ZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUtPmNoaWxkMigpKTsKICNlbmRpZgotICAgICAgICBT
dG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwotICAgICAgICBKU1Zh
bHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLmNoaWxkMygpKTsKKyAgICAgICAgU3RvcmFnZU9w
ZXJhbmQgc3RvcmFnZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIEpTVmFsdWVPcGVy
YW5kIHZhbHVlKHRoaXMsIG5vZGUtPmNoaWxkMygpKTsKIAogICAgICAgICBHUFJSZWcgc3RvcmFn
ZUdQUiA9IHN0b3JhZ2UuZ3ByKCk7CiAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdw
cigpOwogICAgICAgICAKICNpZiBFTkFCTEUoR0dDKSB8fCBFTkFCTEUoV1JJVEVfQkFSUklFUl9Q
Uk9GSUxJTkcpCi0gICAgICAgIHdyaXRlQmFycmllcihiYXNlLmdwcigpLCB2YWx1ZS5ncHIoKSwg
bm9kZS5jaGlsZDMoKSwgV3JpdGVCYXJyaWVyRm9yUHJvcGVydHlBY2Nlc3MpOworICAgICAgICB3
cml0ZUJhcnJpZXIoYmFzZS5ncHIoKSwgdmFsdWUuZ3ByKCksIG5vZGUtPmNoaWxkMygpLCBXcml0
ZUJhcnJpZXJGb3JQcm9wZXJ0eUFjY2Vzcyk7CiAjZW5kaWYKIAotICAgICAgICBTdG9yYWdlQWNj
ZXNzRGF0YSYgc3RvcmFnZUFjY2Vzc0RhdGEgPSBtX2ppdC5ncmFwaCgpLm1fc3RvcmFnZUFjY2Vz
c0RhdGFbbm9kZS5zdG9yYWdlQWNjZXNzRGF0YUluZGV4KCldOworICAgICAgICBTdG9yYWdlQWNj
ZXNzRGF0YSYgc3RvcmFnZUFjY2Vzc0RhdGEgPSBtX2ppdC5ncmFwaCgpLm1fc3RvcmFnZUFjY2Vz
c0RhdGFbbm9kZS0+c3RvcmFnZUFjY2Vzc0RhdGFJbmRleCgpXTsKICAgICAgICAgCiAgICAgICAg
IG1faml0LnN0b3JlNjQodmFsdWVHUFIsIEpJVENvbXBpbGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIs
IHN0b3JhZ2VBY2Nlc3NEYXRhLm9mZnNldCAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpKTsKICAg
ICAgICAgCi0gICAgICAgIG5vUmVzdWx0KG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAgbm9SZXN1
bHQobm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBQdXRC
eUlkOiB7Ci0gICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS5jaGls
ZDEoKSk7Ci0gICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUuY2hpbGQyKCkp
OworICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUtPmNoaWxkMSgp
KTsKKyAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS0+Y2hpbGQyKCkpOwog
ICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKICAgICAgICAgCiAgICAgICAgIEdQ
UlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKQEAgLTQyOTksMTUgKzQyOTEsMTUgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICBiYXNlLnVzZSgpOwog
ICAgICAgICB2YWx1ZS51c2UoKTsKIAotICAgICAgICBjYWNoZWRQdXRCeUlkKG5vZGUuY29kZU9y
aWdpbiwgYmFzZUdQUiwgdmFsdWVHUFIsIG5vZGUuY2hpbGQyKCksIHNjcmF0Y2hHUFIsIG5vZGUu
aWRlbnRpZmllck51bWJlcigpLCBOb3REaXJlY3QpOworICAgICAgICBjYWNoZWRQdXRCeUlkKG5v
ZGUtPmNvZGVPcmlnaW4sIGJhc2VHUFIsIHZhbHVlR1BSLCBub2RlLT5jaGlsZDIoKSwgc2NyYXRj
aEdQUiwgbm9kZS0+aWRlbnRpZmllck51bWJlcigpLCBOb3REaXJlY3QpOwogICAgICAgICAKLSAg
ICAgICAgbm9SZXN1bHQobV9jb21waWxlSW5kZXgsIFVzZUNoaWxkcmVuQ2FsbGVkRXhwbGljaXRs
eSk7CisgICAgICAgIG5vUmVzdWx0KG5vZGUsIFVzZUNoaWxkcmVuQ2FsbGVkRXhwbGljaXRseSk7
CiAgICAgICAgIGJyZWFrOwogICAgIH0KIAogICAgIGNhc2UgUHV0QnlJZERpcmVjdDogewotICAg
ICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwotICAg
ICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLmNoaWxkMigpKTsKKyAgICAgICAg
U3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CisgICAgICAg
IEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUtPmNoaWxkMigpKTsKICAgICAgICAgR1BS
VGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7CiAgICAgICAgIAogICAgICAgICBHUFJSZWcgYmFzZUdQ
UiA9IGJhc2UuZ3ByKCk7CkBAIC00MzE3LDQzICs0MzA5LDQzIEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgYmFzZS51c2UoKTsKICAgICAgICAgdmFs
dWUudXNlKCk7CiAKLSAgICAgICAgY2FjaGVkUHV0QnlJZChub2RlLmNvZGVPcmlnaW4sIGJhc2VH
UFIsIHZhbHVlR1BSLCBub2RlLmNoaWxkMigpLCBzY3JhdGNoR1BSLCBub2RlLmlkZW50aWZpZXJO
dW1iZXIoKSwgRGlyZWN0KTsKKyAgICAgICAgY2FjaGVkUHV0QnlJZChub2RlLT5jb2RlT3JpZ2lu
LCBiYXNlR1BSLCB2YWx1ZUdQUiwgbm9kZS0+Y2hpbGQyKCksIHNjcmF0Y2hHUFIsIG5vZGUtPmlk
ZW50aWZpZXJOdW1iZXIoKSwgRGlyZWN0KTsKIAotICAgICAgICBub1Jlc3VsdChtX2NvbXBpbGVJ
bmRleCwgVXNlQ2hpbGRyZW5DYWxsZWRFeHBsaWNpdGx5KTsKKyAgICAgICAgbm9SZXN1bHQobm9k
ZSwgVXNlQ2hpbGRyZW5DYWxsZWRFeHBsaWNpdGx5KTsKICAgICAgICAgYnJlYWs7CiAgICAgfQog
CiAgICAgY2FzZSBHZXRHbG9iYWxWYXI6IHsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0
aGlzKTsKIAotICAgICAgICBtX2ppdC5sb2FkNjQobm9kZS5yZWdpc3RlclBvaW50ZXIoKSwgcmVz
dWx0LmdwcigpKTsKKyAgICAgICAgbV9qaXQubG9hZDY0KG5vZGUtPnJlZ2lzdGVyUG9pbnRlcigp
LCByZXN1bHQuZ3ByKCkpOwogCi0gICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0LmdwcigpLCBt
X2NvbXBpbGVJbmRleCk7CisgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0LmdwcigpLCBub2Rl
KTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAgY2FzZSBQdXRHbG9iYWxWYXI6IHsKLSAg
ICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS5jaGlsZDEoKSk7CisgICAgICAg
IEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgCiAg
ICAgICAgIGlmIChIZWFwOjppc1dyaXRlQmFycmllckVuYWJsZWQoKSkgewogICAgICAgICAgICAg
R1BSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7CiAgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaFJl
ZyA9IHNjcmF0Y2guZ3ByKCk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIHdyaXRlQmFycmll
cihtX2ppdC5nbG9iYWxPYmplY3RGb3Iobm9kZS5jb2RlT3JpZ2luKSwgdmFsdWUuZ3ByKCksIG5v
ZGUuY2hpbGQxKCksIFdyaXRlQmFycmllckZvclZhcmlhYmxlQWNjZXNzLCBzY3JhdGNoUmVnKTsK
KyAgICAgICAgICAgIHdyaXRlQmFycmllcihtX2ppdC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+Y29k
ZU9yaWdpbiksIHZhbHVlLmdwcigpLCBub2RlLT5jaGlsZDEoKSwgV3JpdGVCYXJyaWVyRm9yVmFy
aWFibGVBY2Nlc3MsIHNjcmF0Y2hSZWcpOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBt
X2ppdC5zdG9yZTY0KHZhbHVlLmdwcigpLCBub2RlLnJlZ2lzdGVyUG9pbnRlcigpKTsKKyAgICAg
ICAgbV9qaXQuc3RvcmU2NCh2YWx1ZS5ncHIoKSwgbm9kZS0+cmVnaXN0ZXJQb2ludGVyKCkpOwog
Ci0gICAgICAgIG5vUmVzdWx0KG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAgbm9SZXN1bHQobm9k
ZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIAogICAgIGNhc2UgUHV0R2xvYmFsVmFyQ2hlY2s6
IHsKLSAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS5jaGlsZDEoKSk7Cisg
ICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKICAgICAg
ICAgCiAgICAgICAgIFdhdGNocG9pbnRTZXQqIHdhdGNocG9pbnRTZXQgPQotICAgICAgICAgICAg
bV9qaXQuZ2xvYmFsT2JqZWN0Rm9yKG5vZGUuY29kZU9yaWdpbiktPnN5bWJvbFRhYmxlKCktPmdl
dCgKLSAgICAgICAgICAgICAgICBpZGVudGlmaWVyKG5vZGUuaWRlbnRpZmllck51bWJlckZvckNo
ZWNrKCkpLT5pbXBsKCkpLndhdGNocG9pbnRTZXQoKTsKKyAgICAgICAgICAgIG1faml0Lmdsb2Jh
bE9iamVjdEZvcihub2RlLT5jb2RlT3JpZ2luKS0+c3ltYm9sVGFibGUoKS0+Z2V0KAorICAgICAg
ICAgICAgICAgIGlkZW50aWZpZXIobm9kZS0+aWRlbnRpZmllck51bWJlckZvckNoZWNrKCkpLT5p
bXBsKCkpLndhdGNocG9pbnRTZXQoKTsKICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCiAg
ICAgICAgICAgICBzbG93UGF0aENhbGwoCiAgICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoVGVz
dDgoCkBAIC00MzY1LDQ0ICs0MzU3LDQ0IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUo
Tm9kZSYgbm9kZSkKICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOwogICAg
ICAgICAgICAgR1BSUmVnIHNjcmF0Y2hSZWcgPSBzY3JhdGNoLmdwcigpOwogICAgICAgICAgICAg
Ci0gICAgICAgICAgICB3cml0ZUJhcnJpZXIobV9qaXQuZ2xvYmFsT2JqZWN0Rm9yKG5vZGUuY29k
ZU9yaWdpbiksIHZhbHVlLmdwcigpLCBub2RlLmNoaWxkMSgpLCBXcml0ZUJhcnJpZXJGb3JWYXJp
YWJsZUFjY2Vzcywgc2NyYXRjaFJlZyk7CisgICAgICAgICAgICB3cml0ZUJhcnJpZXIobV9qaXQu
Z2xvYmFsT2JqZWN0Rm9yKG5vZGUtPmNvZGVPcmlnaW4pLCB2YWx1ZS5ncHIoKSwgbm9kZS0+Y2hp
bGQxKCksIFdyaXRlQmFycmllckZvclZhcmlhYmxlQWNjZXNzLCBzY3JhdGNoUmVnKTsKICAgICAg
ICAgfQogICAgICAgICAKLSAgICAgICAgbV9qaXQuc3RvcmU2NCh2YWx1ZS5ncHIoKSwgbm9kZS5y
ZWdpc3RlclBvaW50ZXIoKSk7CisgICAgICAgIG1faml0LnN0b3JlNjQodmFsdWUuZ3ByKCksIG5v
ZGUtPnJlZ2lzdGVyUG9pbnRlcigpKTsKIAotICAgICAgICBub1Jlc3VsdChtX2NvbXBpbGVJbmRl
eCk7CisgICAgICAgIG5vUmVzdWx0KG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAg
ICAgIAogICAgIGNhc2UgR2xvYmFsVmFyV2F0Y2hwb2ludDogewotICAgICAgICBtX2ppdC5nbG9i
YWxPYmplY3RGb3Iobm9kZS5jb2RlT3JpZ2luKS0+c3ltYm9sVGFibGUoKS0+Z2V0KAotICAgICAg
ICAgICAgaWRlbnRpZmllcihub2RlLmlkZW50aWZpZXJOdW1iZXJGb3JDaGVjaygpKS0+aW1wbCgp
KS5hZGRXYXRjaHBvaW50KAorICAgICAgICBtX2ppdC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+Y29k
ZU9yaWdpbiktPnN5bWJvbFRhYmxlKCktPmdldCgKKyAgICAgICAgICAgIGlkZW50aWZpZXIobm9k
ZS0+aWRlbnRpZmllck51bWJlckZvckNoZWNrKCkpLT5pbXBsKCkpLmFkZFdhdGNocG9pbnQoCiAg
ICAgICAgICAgICAgICAgc3BlY3VsYXRpb25XYXRjaHBvaW50KCkpOwogICAgICAgICAKICNpZiBE
RkdfRU5BQkxFKEpJVF9BU1NFUlQpCiAgICAgICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMp
OwogICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7Ci0gICAgICAgIG1f
aml0LmxvYWQ2NChub2RlLnJlZ2lzdGVyUG9pbnRlcigpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAg
bV9qaXQubG9hZDY0KG5vZGUtPnJlZ2lzdGVyUG9pbnRlcigpLCBzY3JhdGNoR1BSKTsKICAgICAg
ICAgSklUQ29tcGlsZXI6Okp1bXAgb2sgPSBtX2ppdC5icmFuY2g2NCgKICAgICAgICAgICAgIEpJ
VENvbXBpbGVyOjpFcXVhbCwgc2NyYXRjaEdQUiwKLSAgICAgICAgICAgIFRydXN0ZWRJbW02NChK
U1ZhbHVlOjplbmNvZGUobm9kZS5yZWdpc3RlclBvaW50ZXIoKS0+Z2V0KCkpKSk7CisgICAgICAg
ICAgICBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKG5vZGUtPnJlZ2lzdGVyUG9pbnRlcigp
LT5nZXQoKSkpKTsKICAgICAgICAgbV9qaXQuYnJlYWtwb2ludCgpOwogICAgICAgICBvay5saW5r
KCZtX2ppdCk7CiAjZW5kaWYKICAgICAgICAgCi0gICAgICAgIG5vUmVzdWx0KG1fY29tcGlsZUlu
ZGV4KTsKKyAgICAgICAgbm9SZXN1bHQobm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIAog
ICAgIGNhc2UgQ2hlY2tIYXNJbnN0YW5jZTogewotICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFu
ZCBiYXNlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOworICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFu
ZCBiYXNlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHN0cnVj
dHVyZSh0aGlzKTsKIAogICAgICAgICAvLyBTcGVjdWxhdGUgdGhhdCBiYXNlICdJbXBsZW1lbnRz
RGVmYXVsdEhhc0luc3RhbmNlJy4KICAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhiYXNlLmdwcigpLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgc3RydWN0
dXJlLmdwcigpKTsKLSAgICAgICAgc3BlY3VsYXRpb25DaGVjayhVbmNvdW50YWJsZSwgSlNWYWx1
ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2hUZXN0OChNYWNyb0Fzc2VtYmxlcjo6WmVybywg
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RydWN0dXJlLmdwcigpLCBTdHJ1Y3R1cmU6OnR5cGVJ
bmZvRmxhZ3NPZmZzZXQoKSksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoSW1wbGVtZW50
c0RlZmF1bHRIYXNJbnN0YW5jZSkpKTsKKyAgICAgICAgc3BlY3VsYXRpb25DaGVjayhVbmNvdW50
YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgMCwgbV9qaXQuYnJhbmNoVGVzdDgoTWFjcm9Bc3NlbWJsZXI6
Olplcm8sIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0cnVjdHVyZS5ncHIoKSwgU3RydWN0dXJl
Ojp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKElt
cGxlbWVudHNEZWZhdWx0SGFzSW5zdGFuY2UpKSk7CiAKLSAgICAgICAgbm9SZXN1bHQobV9jb21w
aWxlSW5kZXgpOworICAgICAgICBub1Jlc3VsdChub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAg
fQogCkBAIC00NDEyLDcgKzQ0MDQsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5v
ZGUmIG5vZGUpCiAgICAgfQogICAgICAgICAKICAgICBjYXNlIElzVW5kZWZpbmVkOiB7Ci0gICAg
ICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOworICAgICAgICBK
U1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgIEdQUlRl
bXBvcmFyeSByZXN1bHQodGhpcyk7CiAgICAgICAgIAogICAgICAgICBKSVRDb21waWxlcjo6SnVt
cCBpc0NlbGwgPSBtX2ppdC5icmFuY2hUZXN0NjQoSklUQ29tcGlsZXI6Olplcm8sIHZhbHVlLmdw
cigpLCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpOwpAQCAtNDQyMiw4ICs0NDE0LDggQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAKICAgICAgICAg
aXNDZWxsLmxpbmsoJm1faml0KTsKICAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgbm90TWFzcXVl
cmFkZXNBc1VuZGVmaW5lZDsKLSAgICAgICAgaWYgKG1faml0LmdyYXBoKCkuZ2xvYmFsT2JqZWN0
Rm9yKG5vZGUuY29kZU9yaWdpbiktPm1hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50KCkt
PmlzU3RpbGxWYWxpZCgpKSB7Ci0gICAgICAgICAgICBtX2ppdC5ncmFwaCgpLmdsb2JhbE9iamVj
dEZvcihub2RlLmNvZGVPcmlnaW4pLT5tYXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2ludCgp
LT5hZGQoc3BlY3VsYXRpb25XYXRjaHBvaW50KCkpOworICAgICAgICBpZiAobV9qaXQuZ3JhcGgo
KS5nbG9iYWxPYmplY3RGb3Iobm9kZS0+Y29kZU9yaWdpbiktPm1hc3F1ZXJhZGVzQXNVbmRlZmlu
ZWRXYXRjaHBvaW50KCktPmlzU3RpbGxWYWxpZCgpKSB7CisgICAgICAgICAgICBtX2ppdC5ncmFw
aCgpLmdsb2JhbE9iamVjdEZvcihub2RlLT5jb2RlT3JpZ2luKS0+bWFzcXVlcmFkZXNBc1VuZGVm
aW5lZFdhdGNocG9pbnQoKS0+YWRkKHNwZWN1bGF0aW9uV2F0Y2hwb2ludCgpKTsKICAgICAgICAg
ICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbTMyKDApLCByZXN1bHQuZ3ByKCkpOwogICAgICAgICAg
ICAgbm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IG1faml0Lmp1bXAoKTsKICAgICAgICAgfSBl
bHNlIHsKQEAgLTQ0MzcsNyArNDQyOSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUo
Tm9kZSYgbm9kZSkKICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZW1vdGVHbG9iYWxPYmplY3Qo
dGhpcyk7CiAgICAgICAgICAgICBHUFJSZWcgbG9jYWxHbG9iYWxPYmplY3RHUFIgPSBsb2NhbEds
b2JhbE9iamVjdC5ncHIoKTsKICAgICAgICAgICAgIEdQUlJlZyByZW1vdGVHbG9iYWxPYmplY3RH
UFIgPSByZW1vdGVHbG9iYWxPYmplY3QuZ3ByKCk7Ci0gICAgICAgICAgICBtX2ppdC5tb3ZlKFRy
dXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsT2JqZWN0Rm9yKG5vZGUuY29kZU9yaWdpbikpLCBsb2Nh
bEdsb2JhbE9iamVjdEdQUik7CisgICAgICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIo
bV9qaXQuZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPmNvZGVPcmlnaW4pKSwgbG9jYWxHbG9iYWxPYmpl
Y3RHUFIpOwogICAgICAgICAgICAgbV9qaXQubG9hZFB0cihKSVRDb21waWxlcjo6QWRkcmVzcyhy
ZXN1bHQuZ3ByKCksIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZW1vdGVHbG9i
YWxPYmplY3RHUFIpOyAKICAgICAgICAgICAgIG1faml0LmNvbXBhcmVQdHIoSklUQ29tcGlsZXI6
OkVxdWFsLCBsb2NhbEdsb2JhbE9iamVjdEdQUiwgcmVtb3RlR2xvYmFsT2JqZWN0R1BSLCByZXN1
bHQuZ3ByKCkpOwogICAgICAgICB9CkBAIC00NDQ1LDM0ICs0NDM3LDM0IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgbm90TWFzcXVlcmFkZXNBc1Vu
ZGVmaW5lZC5saW5rKCZtX2ppdCk7CiAgICAgICAgIGRvbmUubGluaygmbV9qaXQpOwogICAgICAg
ICBtX2ppdC5vcjMyKFRydXN0ZWRJbW0zMihWYWx1ZUZhbHNlKSwgcmVzdWx0LmdwcigpKTsKLSAg
ICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHQuZ3ByKCksIG1fY29tcGlsZUluZGV4LCBEYXRhRm9y
bWF0SlNCb29sZWFuKTsKKyAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHQuZ3ByKCksIG5vZGUs
IERhdGFGb3JtYXRKU0Jvb2xlYW4pOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIAog
ICAgIGNhc2UgSXNCb29sZWFuOiB7Ci0gICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMs
IG5vZGUuY2hpbGQxKCkpOworICAgICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2Rl
LT5jaGlsZDEoKSk7CiAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgdmFsdWUpOwog
ICAgICAgICAKICAgICAgICAgbV9qaXQubW92ZSh2YWx1ZS5ncHIoKSwgcmVzdWx0LmdwcigpKTsK
ICAgICAgICAgbV9qaXQueG9yNjQoSklUQ29tcGlsZXI6OlRydXN0ZWRJbW0zMihWYWx1ZUZhbHNl
KSwgcmVzdWx0LmdwcigpKTsKICAgICAgICAgbV9qaXQudGVzdDY0KEpJVENvbXBpbGVyOjpaZXJv
LCByZXN1bHQuZ3ByKCksIEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50
MzJfdD4ofjEpKSwgcmVzdWx0LmdwcigpKTsKICAgICAgICAgbV9qaXQub3IzMihUcnVzdGVkSW1t
MzIoVmFsdWVGYWxzZSksIHJlc3VsdC5ncHIoKSk7Ci0gICAgICAgIGpzVmFsdWVSZXN1bHQocmVz
dWx0LmdwcigpLCBtX2NvbXBpbGVJbmRleCwgRGF0YUZvcm1hdEpTQm9vbGVhbik7CisgICAgICAg
IGpzVmFsdWVSZXN1bHQocmVzdWx0LmdwcigpLCBub2RlLCBEYXRhRm9ybWF0SlNCb29sZWFuKTsK
ICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKICAgICBjYXNlIElzTnVtYmVyOiB7Ci0g
ICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOworICAgICAg
ICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgIEdQ
UlRlbXBvcmFyeSByZXN1bHQodGhpcywgdmFsdWUpOwogICAgICAgICAKICAgICAgICAgbV9qaXQu
dGVzdDY0KEpJVENvbXBpbGVyOjpOb25aZXJvLCB2YWx1ZS5ncHIoKSwgR1BSSW5mbzo6dGFnVHlw
ZU51bWJlclJlZ2lzdGVyLCByZXN1bHQuZ3ByKCkpOwogICAgICAgICBtX2ppdC5vcjMyKFRydXN0
ZWRJbW0zMihWYWx1ZUZhbHNlKSwgcmVzdWx0LmdwcigpKTsKLSAgICAgICAganNWYWx1ZVJlc3Vs
dChyZXN1bHQuZ3ByKCksIG1fY29tcGlsZUluZGV4LCBEYXRhRm9ybWF0SlNCb29sZWFuKTsKKyAg
ICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHQuZ3ByKCksIG5vZGUsIERhdGFGb3JtYXRKU0Jvb2xl
YW4pOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgSXNTdHJpbmc6
IHsKLSAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS5jaGlsZDEoKSk7Cisg
ICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKICAgICAg
ICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCB2YWx1ZSk7CiAgICAgICAgIAogICAgICAgICBK
SVRDb21waWxlcjo6SnVtcCBpc05vdENlbGwgPSBtX2ppdC5icmFuY2hUZXN0NjQoSklUQ29tcGls
ZXI6Ok5vblplcm8sIHZhbHVlLmdwcigpLCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpOwpAQCAt
NDQ4NiwzNiArNDQ3OCwzNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5v
ZGUpCiAgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbTMyKFZhbHVlRmFsc2UpLCByZXN1bHQu
Z3ByKCkpOwogICAgICAgICAKICAgICAgICAgZG9uZS5saW5rKCZtX2ppdCk7Ci0gICAgICAgIGpz
VmFsdWVSZXN1bHQocmVzdWx0LmdwcigpLCBtX2NvbXBpbGVJbmRleCwgRGF0YUZvcm1hdEpTQm9v
bGVhbik7CisgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0LmdwcigpLCBub2RlLCBEYXRhRm9y
bWF0SlNCb29sZWFuKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKICAgICBjYXNl
IElzT2JqZWN0OiB7Ci0gICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUuY2hp
bGQxKCkpOworICAgICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLT5jaGlsZDEo
KSk7CiAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOwogICAgICAgICBHUFJS
ZXN1bHQgcmVzdWx0KHRoaXMpOwogICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0Lmdw
cigpOwogICAgICAgICBmbHVzaFJlZ2lzdGVycygpOwogICAgICAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvbklzT2JqZWN0LCByZXN1bHRHUFIsIHZhbHVlR1BSKTsKICAgICAgICAgbV9qaXQub3Iz
MihUcnVzdGVkSW1tMzIoVmFsdWVGYWxzZSksIHJlc3VsdEdQUik7Ci0gICAgICAgIGpzVmFsdWVS
ZXN1bHQocmVzdWx0LmdwcigpLCBtX2NvbXBpbGVJbmRleCwgRGF0YUZvcm1hdEpTQm9vbGVhbik7
CisgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0LmdwcigpLCBub2RlLCBEYXRhRm9ybWF0SlNC
b29sZWFuKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAgY2FzZSBJc0Z1bmN0aW9uOiB7
Ci0gICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOworICAg
ICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CiAgICAgICAg
IEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOwogICAgICAgICBHUFJSZXN1bHQgcmVzdWx0
KHRoaXMpOwogICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwogICAgICAg
ICBmbHVzaFJlZ2lzdGVycygpOwogICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbklzRnVu
Y3Rpb24sIHJlc3VsdEdQUiwgdmFsdWVHUFIpOwogICAgICAgICBtX2ppdC5vcjMyKFRydXN0ZWRJ
bW0zMihWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKLSAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1
bHQuZ3ByKCksIG1fY29tcGlsZUluZGV4LCBEYXRhRm9ybWF0SlNCb29sZWFuKTsKKyAgICAgICAg
anNWYWx1ZVJlc3VsdChyZXN1bHQuZ3ByKCksIG5vZGUsIERhdGFGb3JtYXRKU0Jvb2xlYW4pOwog
ICAgICAgICBicmVhazsKICAgICB9CiAKICAgICBjYXNlIFR5cGVPZjogewotICAgICAgICBKU1Zh
bHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKKyAgICAgICAgSlNWYWx1ZU9w
ZXJhbmQgdmFsdWUodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICBHUFJSZWcgdmFsdWVH
UFIgPSB2YWx1ZS5ncHIoKTsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHRlbXAodGhpcyk7CiAgICAg
ICAgIEdQUlJlZyB0ZW1wR1BSID0gdGVtcC5ncHIoKTsKQEAgLTQ1MjYsMTggKzQ1MTgsMTcgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICBmbHVzaFJl
Z2lzdGVycygpOwogCiAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIGlzTm90Q2VsbCA9IG1faml0
LmJyYW5jaFRlc3Q2NChKSVRDb21waWxlcjo6Tm9uWmVybywgdmFsdWVHUFIsIEdQUkluZm86OnRh
Z01hc2tSZWdpc3Rlcik7Ci0gICAgICAgIE5vZGUmIGNoaWxkID0gbV9qaXQuZ3JhcGgoKVtub2Rl
LmNoaWxkMSgpXTsKLSAgICAgICAgaWYgKGNoaWxkLnNob3VsZFNwZWN1bGF0ZUNlbGwoKSkKLSAg
ICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVNvdXJjZSh2YWx1ZUdQ
UiksIG5vZGUuY2hpbGQxKCksIGlzTm90Q2VsbCk7CisgICAgICAgIGlmIChub2RlLT5jaGlsZDEo
KS0+c2hvdWxkU3BlY3VsYXRlQ2VsbCgpKQorICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhC
YWRUeXBlLCBKU1ZhbHVlU291cmNlKHZhbHVlR1BSKSwgbm9kZS0+Y2hpbGQxKCksIGlzTm90Q2Vs
bCk7CiAKLSAgICAgICAgaWYgKCFjaGlsZC5zaG91bGRTcGVjdWxhdGVOb25TdHJpbmdDZWxsKCkp
IHsKKyAgICAgICAgaWYgKCFub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlTm9uU3RyaW5n
Q2VsbCgpKSB7CiAgICAgICAgICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjpBZGRyZXNz
KHZhbHVlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgdGVtcEdQUik7CiAgICAgICAg
ICAgICBKSVRDb21waWxlcjo6SnVtcCBub3RTdHJpbmcgPSBtX2ppdC5icmFuY2g4KEpJVENvbXBp
bGVyOjpOb3RFcXVhbCwgSklUQ29tcGlsZXI6OkFkZHJlc3ModGVtcEdQUiwgU3RydWN0dXJlOjp0
eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihTdHJpbmdUeXBlKSk7Ci0gICAgICAg
ICAgICBpZiAoY2hpbGQuc2hvdWxkU3BlY3VsYXRlU3RyaW5nKCkpCi0gICAgICAgICAgICAgICAg
c3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlU291cmNlKHZhbHVlR1BSKSwgbm9kZS5j
aGlsZDEoKSwgbm90U3RyaW5nKTsKKyAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS0+c2hv
dWxkU3BlY3VsYXRlU3RyaW5nKCkpCisgICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhC
YWRUeXBlLCBKU1ZhbHVlU291cmNlKHZhbHVlR1BSKSwgbm9kZS0+Y2hpbGQxKCksIG5vdFN0cmlu
Zyk7CiAgICAgICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0
YSgpLT5zbWFsbFN0cmluZ3Muc3RyaW5nU3RyaW5nKCkpLCByZXN1bHRHUFIpOwogICAgICAgICAg
ICAgZG9uZUp1bXBzLmFwcGVuZChtX2ppdC5qdW1wKCkpOwotICAgICAgICAgICAgaWYgKCFjaGls
ZC5zaG91bGRTcGVjdWxhdGVTdHJpbmcoKSkgeworICAgICAgICAgICAgaWYgKCFub2RlLT5jaGls
ZDEoKS0+c2hvdWxkU3BlY3VsYXRlU3RyaW5nKCkpIHsKICAgICAgICAgICAgICAgICBub3RTdHJp
bmcubGluaygmbV9qaXQpOwogICAgICAgICAgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
VHlwZU9mLCByZXN1bHRHUFIsIHZhbHVlR1BSKTsKICAgICAgICAgICAgICAgICBkb25lSnVtcHMu
YXBwZW5kKG1faml0Lmp1bXAoKSk7CkBAIC00NTQ3LDcgKzQ1MzgsNyBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgICAgICBkb25lSnVtcHMuYXBwZW5k
KG1faml0Lmp1bXAoKSk7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoIWNoaWxkLnNob3VsZFNw
ZWN1bGF0ZUNlbGwoKSkgeworICAgICAgICBpZiAoIW5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVj
dWxhdGVDZWxsKCkpIHsKICAgICAgICAgICAgIGlzTm90Q2VsbC5saW5rKCZtX2ppdCk7CiAgICAg
ICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBub3ROdW1iZXIgPSBtX2ppdC5icmFuY2hUZXN0NjQo
SklUQ29tcGlsZXI6Olplcm8sIHZhbHVlR1BSLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0
ZXIpOwogICAgICAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERh
dGEoKS0+c21hbGxTdHJpbmdzLm51bWJlclN0cmluZygpKSwgcmVzdWx0R1BSKTsKQEAgLTQ1Njgs
NyArNDU1OSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAg
ICAgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPnNt
YWxsU3RyaW5ncy5ib29sZWFuU3RyaW5nKCkpLCByZXN1bHRHUFIpOwogICAgICAgICB9CiAgICAg
ICAgIGRvbmVKdW1wcy5saW5rKCZtX2ppdCk7Ci0gICAgICAgIGNlbGxSZXN1bHQocmVzdWx0R1BS
LCBtX2NvbXBpbGVJbmRleCk7CisgICAgICAgIGNlbGxSZXN1bHQocmVzdWx0R1BSLCBub2RlKTsK
ICAgICAgICAgYnJlYWs7CiAgICAgfQogCkBAIC00NTkyLDI3ICs0NTgzLDI3IEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICBjYXNlIFJlc29sdmU6IHsKICAg
ICAgICAgZmx1c2hSZWdpc3RlcnMoKTsKICAgICAgICAgR1BSUmVzdWx0IHJlc3VsdCh0aGlzKTsK
LSAgICAgICAgUmVzb2x2ZU9wZXJhdGlvbkRhdGEmIGRhdGEgPSBtX2ppdC5ncmFwaCgpLm1fcmVz
b2x2ZU9wZXJhdGlvbnNEYXRhW25vZGUucmVzb2x2ZU9wZXJhdGlvbnNEYXRhSW5kZXgoKV07Cisg
ICAgICAgIFJlc29sdmVPcGVyYXRpb25EYXRhJiBkYXRhID0gbV9qaXQuZ3JhcGgoKS5tX3Jlc29s
dmVPcGVyYXRpb25zRGF0YVtub2RlLT5yZXNvbHZlT3BlcmF0aW9uc0RhdGFJbmRleCgpXTsKICAg
ICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25SZXNvbHZlLCByZXN1bHQuZ3ByKCksIGlkZW50
aWZpZXIoZGF0YS5pZGVudGlmaWVyTnVtYmVyKSwgcmVzb2x2ZU9wZXJhdGlvbnMoZGF0YS5yZXNv
bHZlT3BlcmF0aW9uc0luZGV4KSk7Ci0gICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0Lmdwcigp
LCBtX2NvbXBpbGVJbmRleCk7CisgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0LmdwcigpLCBu
b2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAgY2FzZSBSZXNvbHZlQmFzZTogewog
ICAgICAgICBmbHVzaFJlZ2lzdGVycygpOwogICAgICAgICBHUFJSZXN1bHQgcmVzdWx0KHRoaXMp
OwotICAgICAgICBSZXNvbHZlT3BlcmF0aW9uRGF0YSYgZGF0YSA9IG1faml0LmdyYXBoKCkubV9y
ZXNvbHZlT3BlcmF0aW9uc0RhdGFbbm9kZS5yZXNvbHZlT3BlcmF0aW9uc0RhdGFJbmRleCgpXTsK
KyAgICAgICAgUmVzb2x2ZU9wZXJhdGlvbkRhdGEmIGRhdGEgPSBtX2ppdC5ncmFwaCgpLm1fcmVz
b2x2ZU9wZXJhdGlvbnNEYXRhW25vZGUtPnJlc29sdmVPcGVyYXRpb25zRGF0YUluZGV4KCldOwog
ICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblJlc29sdmVCYXNlLCByZXN1bHQuZ3ByKCks
IGlkZW50aWZpZXIoZGF0YS5pZGVudGlmaWVyTnVtYmVyKSwgcmVzb2x2ZU9wZXJhdGlvbnMoZGF0
YS5yZXNvbHZlT3BlcmF0aW9uc0luZGV4KSwgcHV0VG9CYXNlT3BlcmF0aW9uKGRhdGEucHV0VG9C
YXNlT3BlcmF0aW9uSW5kZXgpKTsKLSAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHQuZ3ByKCks
IG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHQuZ3ByKCksIG5v
ZGUpOwogICAgICAgICBicmVhazsKICAgICB9CiAKICAgICBjYXNlIFJlc29sdmVCYXNlU3RyaWN0
UHV0OiB7CiAgICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7CiAgICAgICAgIEdQUlJlc3VsdCByZXN1
bHQodGhpcyk7Ci0gICAgICAgIFJlc29sdmVPcGVyYXRpb25EYXRhJiBkYXRhID0gbV9qaXQuZ3Jh
cGgoKS5tX3Jlc29sdmVPcGVyYXRpb25zRGF0YVtub2RlLnJlc29sdmVPcGVyYXRpb25zRGF0YUlu
ZGV4KCldOworICAgICAgICBSZXNvbHZlT3BlcmF0aW9uRGF0YSYgZGF0YSA9IG1faml0LmdyYXBo
KCkubV9yZXNvbHZlT3BlcmF0aW9uc0RhdGFbbm9kZS0+cmVzb2x2ZU9wZXJhdGlvbnNEYXRhSW5k
ZXgoKV07CiAgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUmVzb2x2ZUJhc2VTdHJpY3RQ
dXQsIHJlc3VsdC5ncHIoKSwgaWRlbnRpZmllcihkYXRhLmlkZW50aWZpZXJOdW1iZXIpLCByZXNv
bHZlT3BlcmF0aW9ucyhkYXRhLnJlc29sdmVPcGVyYXRpb25zSW5kZXgpLCBwdXRUb0Jhc2VPcGVy
YXRpb24oZGF0YS5wdXRUb0Jhc2VPcGVyYXRpb25JbmRleCkpOwotICAgICAgICBqc1ZhbHVlUmVz
dWx0KHJlc3VsdC5ncHIoKSwgbV9jb21waWxlSW5kZXgpOworICAgICAgICBqc1ZhbHVlUmVzdWx0
KHJlc3VsdC5ncHIoKSwgbm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIApAQCAtNDYyNSwx
MSArNDYxNiwxMSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAg
ICAgICAgIEdQUlJlZyByZXNvbHZlSW5mb0dQUiA9IHJlc29sdmVJbmZvLmdwcigpOwogICAgICAg
ICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwogCi0gICAgICAgIFJlc29sdmVHbG9i
YWxEYXRhJiBkYXRhID0gbV9qaXQuZ3JhcGgoKS5tX3Jlc29sdmVHbG9iYWxEYXRhW25vZGUucmVz
b2x2ZUdsb2JhbERhdGFJbmRleCgpXTsKKyAgICAgICAgUmVzb2x2ZUdsb2JhbERhdGEmIGRhdGEg
PSBtX2ppdC5ncmFwaCgpLm1fcmVzb2x2ZUdsb2JhbERhdGFbbm9kZS0+cmVzb2x2ZUdsb2JhbERh
dGFJbmRleCgpXTsKICAgICAgICAgUmVzb2x2ZU9wZXJhdGlvbiogcmVzb2x2ZU9wZXJhdGlvbkFk
ZHJlc3MgPSAmKG1faml0LmNvZGVCbG9jaygpLT5yZXNvbHZlT3BlcmF0aW9ucyhkYXRhLnJlc29s
dmVPcGVyYXRpb25zSW5kZXgpLT5kYXRhKClbZGF0YS5yZXNvbHZlUHJvcGVydHlJbmRleF0pOwog
CiAgICAgICAgIC8vIENoZWNrIFN0cnVjdHVyZSBvZiBnbG9iYWwgb2JqZWN0Ci0gICAgICAgIG1f
aml0Lm1vdmUoSklUQ29tcGlsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsT2JqZWN0Rm9y
KG5vZGUuY29kZU9yaWdpbikpLCBnbG9iYWxPYmplY3RHUFIpOworICAgICAgICBtX2ppdC5tb3Zl
KEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbE9iamVjdEZvcihub2RlLT5j
b2RlT3JpZ2luKSksIGdsb2JhbE9iamVjdEdQUik7CiAgICAgICAgIG1faml0Lm1vdmUoSklUQ29t
cGlsZXI6OlRydXN0ZWRJbW1QdHIocmVzb2x2ZU9wZXJhdGlvbkFkZHJlc3MpLCByZXNvbHZlSW5m
b0dQUik7CiAgICAgICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OkFkZHJlc3MocmVzb2x2
ZUluZm9HUFIsIE9CSkVDVF9PRkZTRVRPRihSZXNvbHZlT3BlcmF0aW9uLCBtX3N0cnVjdHVyZSkp
LCByZXN1bHRHUFIpOwogICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBzdHJ1Y3R1cmVzRG9udE1h
dGNoID0gbV9qaXQuYnJhbmNoUHRyKEpJVENvbXBpbGVyOjpOb3RFcXVhbCwgcmVzdWx0R1BSLCBK
SVRDb21waWxlcjo6QWRkcmVzcyhnbG9iYWxPYmplY3RHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zm
c2V0KCkpKTsKQEAgLTQ2NTIsMTQgKzQ2NDMsMTQgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZShOb2RlJiBub2RlKQogICAgICAgICAgICAgICAgIHJlc3VsdEdQUiwgcmVzb2x2ZUluZm9H
UFIsIGdsb2JhbE9iamVjdEdQUiwKICAgICAgICAgICAgICAgICAmbV9qaXQuY29kZUJsb2NrKCkt
PmlkZW50aWZpZXIoZGF0YS5pZGVudGlmaWVyTnVtYmVyKSkpOwogCi0gICAgICAgIGpzVmFsdWVS
ZXN1bHQocmVzdWx0R1BSLCBtX2NvbXBpbGVJbmRleCk7CisgICAgICAgIGpzVmFsdWVSZXN1bHQo
cmVzdWx0R1BSLCBub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKICAgICBj
YXNlIENyZWF0ZUFjdGl2YXRpb246IHsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoIW5vZGUuY29k
ZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpOworICAgICAgICBSRUxFQVNFX0FTU0VSVCghbm9kZS0+
Y29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpOwogICAgICAgICAKLSAgICAgICAgSlNWYWx1ZU9w
ZXJhbmQgdmFsdWUodGhpcywgbm9kZS5jaGlsZDEoKSk7CisgICAgICAgIEpTVmFsdWVPcGVyYW5k
IHZhbHVlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3Vs
dCh0aGlzLCB2YWx1ZSk7CiAgICAgICAgIAogICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1
ZS5ncHIoKTsKQEAgLTQ2NzIsMTIgKzQ2NjMsMTIgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZShOb2RlJiBub2RlKQogICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKICAgICAgICAg
ICAgIHNsb3dQYXRoQ2FsbChub3RDcmVhdGVkLCB0aGlzLCBvcGVyYXRpb25DcmVhdGVBY3RpdmF0
aW9uLCByZXN1bHRHUFIpKTsKICAgICAgICAgCi0gICAgICAgIGNlbGxSZXN1bHQocmVzdWx0R1BS
LCBtX2NvbXBpbGVJbmRleCk7CisgICAgICAgIGNlbGxSZXN1bHQocmVzdWx0R1BSLCBub2RlKTsK
ICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKICAgICBjYXNlIENyZWF0ZUFyZ3VtZW50
czogewotICAgICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsK
KyAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwogICAg
ICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIHZhbHVlKTsKICAgICAgICAgCiAgICAgICAg
IEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOwpAQCAtNDY4NywzMSArNDY3OCwzMSBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIAogICAgICAg
ICBKSVRDb21waWxlcjo6SnVtcCBub3RDcmVhdGVkID0gbV9qaXQuYnJhbmNoVGVzdDY0KEpJVENv
bXBpbGVyOjpaZXJvLCByZXN1bHRHUFIpOwogICAgICAgICAKLSAgICAgICAgaWYgKG5vZGUuY29k
ZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpIHsKKyAgICAgICAgaWYgKG5vZGUtPmNvZGVPcmlnaW4u
aW5saW5lQ2FsbEZyYW1lKSB7CiAgICAgICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKICAg
ICAgICAgICAgICAgICBzbG93UGF0aENhbGwoCiAgICAgICAgICAgICAgICAgICAgIG5vdENyZWF0
ZWQsIHRoaXMsIG9wZXJhdGlvbkNyZWF0ZUlubGluZWRBcmd1bWVudHMsIHJlc3VsdEdQUiwKLSAg
ICAgICAgICAgICAgICAgICAgbm9kZS5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSkpOworICAg
ICAgICAgICAgICAgICAgICBub2RlLT5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSkpOwogICAg
ICAgICB9IGVsc2UgewogICAgICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCiAgICAgICAg
ICAgICAgICAgc2xvd1BhdGhDYWxsKG5vdENyZWF0ZWQsIHRoaXMsIG9wZXJhdGlvbkNyZWF0ZUFy
Z3VtZW50cywgcmVzdWx0R1BSKSk7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIGNlbGxS
ZXN1bHQocmVzdWx0R1BSLCBtX2NvbXBpbGVJbmRleCk7CisgICAgICAgIGNlbGxSZXN1bHQocmVz
dWx0R1BSLCBub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAgY2FzZSBUZWFyT2Zm
QWN0aXZhdGlvbjogewotICAgICAgICBSRUxFQVNFX0FTU0VSVCghbm9kZS5jb2RlT3JpZ2luLmlu
bGluZUNhbGxGcmFtZSk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFub2RlLT5jb2RlT3JpZ2lu
LmlubGluZUNhbGxGcmFtZSk7CiAKLSAgICAgICAgSlNWYWx1ZU9wZXJhbmQgYWN0aXZhdGlvblZh
bHVlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOworICAgICAgICBKU1ZhbHVlT3BlcmFuZCBhY3RpdmF0
aW9uVmFsdWUodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICBHUFJUZW1wb3Jhcnkgc2Ny
YXRjaCh0aGlzKTsKICAgICAgICAgR1BSUmVnIGFjdGl2YXRpb25WYWx1ZUdQUiA9IGFjdGl2YXRp
b25WYWx1ZS5ncHIoKTsKICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigp
OwogCiAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIG5vdENyZWF0ZWQgPSBtX2ppdC5icmFuY2hU
ZXN0NjQoSklUQ29tcGlsZXI6Olplcm8sIGFjdGl2YXRpb25WYWx1ZUdQUik7CiAKLSAgICAgICAg
U2hhcmVkU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlID0gbV9qaXQuc3ltYm9sVGFibGVGb3Iobm9k
ZS5jb2RlT3JpZ2luKTsKKyAgICAgICAgU2hhcmVkU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlID0g
bV9qaXQuc3ltYm9sVGFibGVGb3Iobm9kZS0+Y29kZU9yaWdpbik7CiAgICAgICAgIGludCByZWdp
c3RlcnNPZmZzZXQgPSBKU0FjdGl2YXRpb246OnJlZ2lzdGVyc09mZnNldChzeW1ib2xUYWJsZSk7
CiAKICAgICAgICAgaW50IGNhcHR1cmVFbmQgPSBzeW1ib2xUYWJsZS0+Y2FwdHVyZUVuZCgpOwpA
QCAtNDcyNywzMCArNDcxOCwzMCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUm
IG5vZGUpCiAgICAgICAgIG1faml0LnN0b3JlUHRyKHNjcmF0Y2hHUFIsIEpJVENvbXBpbGVyOjpB
ZGRyZXNzKGFjdGl2YXRpb25WYWx1ZUdQUiwgSlNBY3RpdmF0aW9uOjpvZmZzZXRPZlJlZ2lzdGVy
cygpKSk7CiAKICAgICAgICAgbm90Q3JlYXRlZC5saW5rKCZtX2ppdCk7Ci0gICAgICAgIG5vUmVz
dWx0KG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAgbm9SZXN1bHQobm9kZSk7CiAgICAgICAgIGJy
ZWFrOwogICAgIH0KIAogICAgIGNhc2UgVGVhck9mZkFyZ3VtZW50czogewotICAgICAgICBKU1Zh
bHVlT3BlcmFuZCB1bm1vZGlmaWVkQXJndW1lbnRzVmFsdWUodGhpcywgbm9kZS5jaGlsZDEoKSk7
Ci0gICAgICAgIEpTVmFsdWVPcGVyYW5kIGFjdGl2YXRpb25WYWx1ZSh0aGlzLCBub2RlLmNoaWxk
MigpKTsKKyAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdW5tb2RpZmllZEFyZ3VtZW50c1ZhbHVlKHRo
aXMsIG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgSlNWYWx1ZU9wZXJhbmQgYWN0aXZhdGlvblZh
bHVlKHRoaXMsIG5vZGUtPmNoaWxkMigpKTsKICAgICAgICAgR1BSUmVnIHVubW9kaWZpZWRBcmd1
bWVudHNWYWx1ZUdQUiA9IHVubW9kaWZpZWRBcmd1bWVudHNWYWx1ZS5ncHIoKTsKICAgICAgICAg
R1BSUmVnIGFjdGl2YXRpb25WYWx1ZUdQUiA9IGFjdGl2YXRpb25WYWx1ZS5ncHIoKTsKIAogICAg
ICAgICBKSVRDb21waWxlcjo6SnVtcCBjcmVhdGVkID0gbV9qaXQuYnJhbmNoVGVzdDY0KEpJVENv
bXBpbGVyOjpOb25aZXJvLCB1bm1vZGlmaWVkQXJndW1lbnRzVmFsdWVHUFIpOwogCi0gICAgICAg
IGlmIChub2RlLmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKSB7CisgICAgICAgIGlmIChub2Rl
LT5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSkgewogICAgICAgICAgICAgYWRkU2xvd1BhdGhH
ZW5lcmF0b3IoCiAgICAgICAgICAgICAgICAgc2xvd1BhdGhDYWxsKAogICAgICAgICAgICAgICAg
ICAgICBjcmVhdGVkLCB0aGlzLCBvcGVyYXRpb25UZWFyT2ZmSW5saW5lZEFyZ3VtZW50cywgTm9S
ZXN1bHQsCi0gICAgICAgICAgICAgICAgICAgIHVubW9kaWZpZWRBcmd1bWVudHNWYWx1ZUdQUiwg
YWN0aXZhdGlvblZhbHVlR1BSLCBub2RlLmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKSk7Cisg
ICAgICAgICAgICAgICAgICAgIHVubW9kaWZpZWRBcmd1bWVudHNWYWx1ZUdQUiwgYWN0aXZhdGlv
blZhbHVlR1BSLCBub2RlLT5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSkpOwogICAgICAgICB9
IGVsc2UgewogICAgICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCiAgICAgICAgICAgICAg
ICAgc2xvd1BhdGhDYWxsKAogICAgICAgICAgICAgICAgICAgICBjcmVhdGVkLCB0aGlzLCBvcGVy
YXRpb25UZWFyT2ZmQXJndW1lbnRzLCBOb1Jlc3VsdCwgdW5tb2RpZmllZEFyZ3VtZW50c1ZhbHVl
R1BSLCBhY3RpdmF0aW9uVmFsdWVHUFIpKTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAg
bm9SZXN1bHQobV9jb21waWxlSW5kZXgpOworICAgICAgICBub1Jlc3VsdChub2RlKTsKICAgICAg
ICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKQEAgLTQ3NjAsMTkgKzQ3NTEsMTkgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAKICAgICAgICAgaWYg
KCFpc0VtcHR5U3BlY3VsYXRpb24oCiAgICAgICAgICAgICAgICAgbV9zdGF0ZS52YXJpYWJsZXMo
KS5vcGVyYW5kKAotICAgICAgICAgICAgICAgICAgICBtX2ppdC5ncmFwaCgpLmFyZ3VtZW50c1Jl
Z2lzdGVyRm9yKG5vZGUuY29kZU9yaWdpbikpLm1fdHlwZSkpIHsKKyAgICAgICAgICAgICAgICAg
ICAgbV9qaXQuZ3JhcGgoKS5hcmd1bWVudHNSZWdpc3RlckZvcihub2RlLT5jb2RlT3JpZ2luKSku
bV90eXBlKSkgewogICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjaygKLSAgICAgICAgICAgICAg
ICBBcmd1bWVudHNFc2NhcGVkLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsCisgICAgICAgICAgICAg
ICAgQXJndW1lbnRzRXNjYXBlZCwgSlNWYWx1ZVJlZ3MoKSwgMCwKICAgICAgICAgICAgICAgICBt
X2ppdC5icmFuY2hUZXN0NjQoCiAgICAgICAgICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpOb25a
ZXJvLAogICAgICAgICAgICAgICAgICAgICBKSVRDb21waWxlcjo6YWRkcmVzc0ZvcigKLSAgICAg
ICAgICAgICAgICAgICAgICAgIG1faml0LmFyZ3VtZW50c1JlZ2lzdGVyRm9yKG5vZGUuY29kZU9y
aWdpbikpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBtX2ppdC5hcmd1bWVudHNSZWdpc3Rl
ckZvcihub2RlLT5jb2RlT3JpZ2luKSkpKTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAg
UkVMRUFTRV9BU1NFUlQoIW5vZGUuY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpOworICAgICAg
ICBSRUxFQVNFX0FTU0VSVCghbm9kZS0+Y29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpOwogICAg
ICAgICBtX2ppdC5sb2FkMzIoSklUQ29tcGlsZXI6OnBheWxvYWRGb3IoSlNTdGFjazo6QXJndW1l
bnRDb3VudCksIHJlc3VsdEdQUik7CiAgICAgICAgIG1faml0LnN1YjMyKFRydXN0ZWRJbW0zMigx
KSwgcmVzdWx0R1BSKTsKLSAgICAgICAgaW50ZWdlclJlc3VsdChyZXN1bHRHUFIsIG1fY29tcGls
ZUluZGV4KTsKKyAgICAgICAgaW50ZWdlclJlc3VsdChyZXN1bHRHUFIsIG5vZGUpOwogICAgICAg
ICBicmVhazsKICAgICB9CiAgICAgICAgIApAQCAtNDc4MywxMSArNDc3NCwxMSBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIEpJVENvbXBpbGVyOjpK
dW1wIGNyZWF0ZWQgPSBtX2ppdC5icmFuY2hUZXN0NjQoCiAgICAgICAgICAgICBKSVRDb21waWxl
cjo6Tm9uWmVybywKICAgICAgICAgICAgIEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKAotICAgICAg
ICAgICAgICAgIG1faml0LmFyZ3VtZW50c1JlZ2lzdGVyRm9yKG5vZGUuY29kZU9yaWdpbikpKTsK
KyAgICAgICAgICAgICAgICBtX2ppdC5hcmd1bWVudHNSZWdpc3RlckZvcihub2RlLT5jb2RlT3Jp
Z2luKSkpOwogICAgICAgICAKLSAgICAgICAgaWYgKG5vZGUuY29kZU9yaWdpbi5pbmxpbmVDYWxs
RnJhbWUpIHsKKyAgICAgICAgaWYgKG5vZGUtPmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKSB7
CiAgICAgICAgICAgICBtX2ppdC5tb3ZlKAotICAgICAgICAgICAgICAgIEltbTY0KEpTVmFsdWU6
OmVuY29kZShqc051bWJlcihub2RlLmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVu
dHMuc2l6ZSgpIC0gMSkpKSwKKyAgICAgICAgICAgICAgICBJbW02NChKU1ZhbHVlOjplbmNvZGUo
anNOdW1iZXIobm9kZS0+Y29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50cy5zaXpl
KCkgLSAxKSkpLAogICAgICAgICAgICAgICAgIHJlc3VsdEdQUik7CiAgICAgICAgIH0gZWxzZSB7
CiAgICAgICAgICAgICBtX2ppdC5sb2FkMzIoSklUQ29tcGlsZXI6OnBheWxvYWRGb3IoSlNTdGFj
azo6QXJndW1lbnRDb3VudCksIHJlc3VsdEdQUik7CkBAIC00ODAyLDQwICs0NzkzLDQwIEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgYWRkU2xvd1Bh
dGhHZW5lcmF0b3IoCiAgICAgICAgICAgICBzbG93UGF0aENhbGwoCiAgICAgICAgICAgICAgICAg
Y3JlYXRlZCwgdGhpcywgb3BlcmF0aW9uR2V0QXJndW1lbnRzTGVuZ3RoLCByZXN1bHRHUFIsCi0g
ICAgICAgICAgICAgICAgbV9qaXQuYXJndW1lbnRzUmVnaXN0ZXJGb3Iobm9kZS5jb2RlT3JpZ2lu
KSkpOworICAgICAgICAgICAgICAgIG1faml0LmFyZ3VtZW50c1JlZ2lzdGVyRm9yKG5vZGUtPmNv
ZGVPcmlnaW4pKSk7CiAgICAgICAgIAotICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdEdQUiwg
bV9jb21waWxlSW5kZXgpOworICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7
CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBHZXRNeUFyZ3VtZW50
QnlWYWw6IHsKLSAgICAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIGluZGV4KHRoaXMs
IG5vZGUuY2hpbGQxKCkpOworICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgaW5k
ZXgodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRo
aXMpOwogICAgICAgICBHUFJSZWcgaW5kZXhHUFIgPSBpbmRleC5ncHIoKTsKICAgICAgICAgR1BS
UmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKIAogICAgICAgICBpZiAoIWlzRW1wdHlTcGVj
dWxhdGlvbigKICAgICAgICAgICAgICAgICBtX3N0YXRlLnZhcmlhYmxlcygpLm9wZXJhbmQoCi0g
ICAgICAgICAgICAgICAgICAgIG1faml0LmdyYXBoKCkuYXJndW1lbnRzUmVnaXN0ZXJGb3Iobm9k
ZS5jb2RlT3JpZ2luKSkubV90eXBlKSkgeworICAgICAgICAgICAgICAgICAgICBtX2ppdC5ncmFw
aCgpLmFyZ3VtZW50c1JlZ2lzdGVyRm9yKG5vZGUtPmNvZGVPcmlnaW4pKS5tX3R5cGUpKSB7CiAg
ICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAotICAgICAgICAgICAgICAgIEFyZ3VtZW50c0Vz
Y2FwZWQsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwKKyAgICAgICAgICAgICAgICBBcmd1bWVudHNF
c2NhcGVkLCBKU1ZhbHVlUmVncygpLCAwLAogICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaFRl
c3Q2NCgKICAgICAgICAgICAgICAgICAgICAgSklUQ29tcGlsZXI6Ok5vblplcm8sCiAgICAgICAg
ICAgICAgICAgICAgIEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKAotICAgICAgICAgICAgICAgICAg
ICAgICAgbV9qaXQuYXJndW1lbnRzUmVnaXN0ZXJGb3Iobm9kZS5jb2RlT3JpZ2luKSkpKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIG1faml0LmFyZ3VtZW50c1JlZ2lzdGVyRm9yKG5vZGUtPmNv
ZGVPcmlnaW4pKSkpOwogICAgICAgICB9CiAKICAgICAgICAgbV9qaXQuYWRkMzIoVHJ1c3RlZElt
bTMyKDEpLCBpbmRleEdQUiwgcmVzdWx0R1BSKTsKLSAgICAgICAgaWYgKG5vZGUuY29kZU9yaWdp
bi5pbmxpbmVDYWxsRnJhbWUpIHsKKyAgICAgICAgaWYgKG5vZGUtPmNvZGVPcmlnaW4uaW5saW5l
Q2FsbEZyYW1lKSB7CiAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAotICAgICAgICAgICAg
ICAgIFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsCisgICAgICAgICAgICAgICAg
VW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIDAsCiAgICAgICAgICAgICAgICAgbV9qaXQuYnJh
bmNoMzIoCiAgICAgICAgICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpBYm92ZU9yRXF1YWwsCiAg
ICAgICAgICAgICAgICAgICAgIHJlc3VsdEdQUiwKLSAgICAgICAgICAgICAgICAgICAgSW1tMzIo
bm9kZS5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzLnNpemUoKSkpKTsKKyAg
ICAgICAgICAgICAgICAgICAgSW1tMzIobm9kZS0+Y29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUt
PmFyZ3VtZW50cy5zaXplKCkpKSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBzcGVj
dWxhdGlvbkNoZWNrKAotICAgICAgICAgICAgICAgIFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygp
LCBOb05vZGUsCisgICAgICAgICAgICAgICAgVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIDAs
CiAgICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoMzIoCiAgICAgICAgICAgICAgICAgICAgIEpJ
VENvbXBpbGVyOjpBYm92ZU9yRXF1YWwsCiAgICAgICAgICAgICAgICAgICAgIHJlc3VsdEdQUiwK
QEAgLTQ4NDQsMTEgKzQ4MzUsMTEgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2Rl
JiBub2RlKQogCiAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wTGlzdCBzbG93QXJndW1lbnQ7CiAg
ICAgICAgIEpJVENvbXBpbGVyOjpKdW1wTGlzdCBzbG93QXJndW1lbnRPdXRPZkJvdW5kczsKLSAg
ICAgICAgaWYgKGNvbnN0IFNsb3dBcmd1bWVudCogc2xvd0FyZ3VtZW50cyA9IG1faml0LnN5bWJv
bFRhYmxlRm9yKG5vZGUuY29kZU9yaWdpbiktPnNsb3dBcmd1bWVudHMoKSkgeworICAgICAgICBp
ZiAoY29uc3QgU2xvd0FyZ3VtZW50KiBzbG93QXJndW1lbnRzID0gbV9qaXQuc3ltYm9sVGFibGVG
b3Iobm9kZS0+Y29kZU9yaWdpbiktPnNsb3dBcmd1bWVudHMoKSkgewogICAgICAgICAgICAgc2xv
d0FyZ3VtZW50T3V0T2ZCb3VuZHMuYXBwZW5kKAogICAgICAgICAgICAgICAgIG1faml0LmJyYW5j
aDMyKAogICAgICAgICAgICAgICAgICAgICBKSVRDb21waWxlcjo6QWJvdmVPckVxdWFsLCBpbmRl
eEdQUiwKLSAgICAgICAgICAgICAgICAgICAgSW1tMzIobV9qaXQuc3ltYm9sVGFibGVGb3Iobm9k
ZS5jb2RlT3JpZ2luKS0+cGFyYW1ldGVyQ291bnQoKSkpKTsKKyAgICAgICAgICAgICAgICAgICAg
SW1tMzIobV9qaXQuc3ltYm9sVGFibGVGb3Iobm9kZS0+Y29kZU9yaWdpbiktPnBhcmFtZXRlckNv
dW50KCkpKSk7CiAKICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZihTbG93QXJndW1l
bnQpID09IDgsIFNsb3dBcmd1bWVudF9zaXplX2lzX2VpZ2h0X2J5dGVzKTsKICAgICAgICAgICAg
IG1faml0Lm1vdmUoSW1tUHRyKHNsb3dBcmd1bWVudHMpLCByZXN1bHRHUFIpOwpAQCAtNDg2MCw3
ICs0ODUxLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAg
ICAgICAgICAgbV9qaXQuc2lnbkV4dGVuZDMyVG9QdHIocmVzdWx0R1BSLCByZXN1bHRHUFIpOwog
ICAgICAgICAgICAgbV9qaXQubG9hZDY0KAogICAgICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpC
YXNlSW5kZXgoCi0gICAgICAgICAgICAgICAgICAgIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVy
LCByZXN1bHRHUFIsIEpJVENvbXBpbGVyOjpUaW1lc0VpZ2h0LCBtX2ppdC5vZmZzZXRPZkxvY2Fs
cyhub2RlLmNvZGVPcmlnaW4pKSwKKyAgICAgICAgICAgICAgICAgICAgR1BSSW5mbzo6Y2FsbEZy
YW1lUmVnaXN0ZXIsIHJlc3VsdEdQUiwgSklUQ29tcGlsZXI6OlRpbWVzRWlnaHQsIG1faml0Lm9m
ZnNldE9mTG9jYWxzKG5vZGUtPmNvZGVPcmlnaW4pKSwKICAgICAgICAgICAgICAgICByZXN1bHRH
UFIpOwogICAgICAgICAgICAgc2xvd0FyZ3VtZW50LmFwcGVuZChtX2ppdC5qdW1wKCkpOwogICAg
ICAgICB9CkBAIC00ODcxLDE2ICs0ODYyLDE2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGUoTm9kZSYgbm9kZSkKICAgICAgICAgICAgIAogICAgICAgICBtX2ppdC5sb2FkNjQoCiAgICAg
ICAgICAgICBKSVRDb21waWxlcjo6QmFzZUluZGV4KAotICAgICAgICAgICAgICAgIEdQUkluZm86
OmNhbGxGcmFtZVJlZ2lzdGVyLCByZXN1bHRHUFIsIEpJVENvbXBpbGVyOjpUaW1lc0VpZ2h0LCBt
X2ppdC5vZmZzZXRPZkFyZ3VtZW50c0luY2x1ZGluZ1RoaXMobm9kZS5jb2RlT3JpZ2luKSksCisg
ICAgICAgICAgICAgICAgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIHJlc3VsdEdQUiwgSklU
Q29tcGlsZXI6OlRpbWVzRWlnaHQsIG1faml0Lm9mZnNldE9mQXJndW1lbnRzSW5jbHVkaW5nVGhp
cyhub2RlLT5jb2RlT3JpZ2luKSksCiAgICAgICAgICAgICByZXN1bHRHUFIpOwogCiAgICAgICAg
IHNsb3dBcmd1bWVudC5saW5rKCZtX2ppdCk7Ci0gICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0
R1BSLCBtX2NvbXBpbGVJbmRleCk7CisgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0R1BSLCBu
b2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKICAgICBjYXNlIEdldE15QXJn
dW1lbnRCeVZhbFNhZmU6IHsKLSAgICAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIGlu
ZGV4KHRoaXMsIG5vZGUuY2hpbGQxKCkpOworICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9w
ZXJhbmQgaW5kZXgodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICBHUFJUZW1wb3Jhcnkg
cmVzdWx0KHRoaXMpOwogICAgICAgICBHUFJSZWcgaW5kZXhHUFIgPSBpbmRleC5ncHIoKTsKICAg
ICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKQEAgLTQ4OTAsMTUgKzQ4ODEs
MTUgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAg
ICAgbV9qaXQuYnJhbmNoVGVzdDY0KAogICAgICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpOb25a
ZXJvLAogICAgICAgICAgICAgICAgIEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKAotICAgICAgICAg
ICAgICAgICAgICBtX2ppdC5hcmd1bWVudHNSZWdpc3RlckZvcihub2RlLmNvZGVPcmlnaW4pKSkp
OworICAgICAgICAgICAgICAgICAgICBtX2ppdC5hcmd1bWVudHNSZWdpc3RlckZvcihub2RlLT5j
b2RlT3JpZ2luKSkpKTsKICAgICAgICAgCiAgICAgICAgIG1faml0LmFkZDMyKFRydXN0ZWRJbW0z
MigxKSwgaW5kZXhHUFIsIHJlc3VsdEdQUik7Ci0gICAgICAgIGlmIChub2RlLmNvZGVPcmlnaW4u
aW5saW5lQ2FsbEZyYW1lKSB7CisgICAgICAgIGlmIChub2RlLT5jb2RlT3JpZ2luLmlubGluZUNh
bGxGcmFtZSkgewogICAgICAgICAgICAgc2xvd1BhdGguYXBwZW5kKAogICAgICAgICAgICAgICAg
IG1faml0LmJyYW5jaDMyKAogICAgICAgICAgICAgICAgICAgICBKSVRDb21waWxlcjo6QWJvdmVP
ckVxdWFsLAogICAgICAgICAgICAgICAgICAgICByZXN1bHRHUFIsCi0gICAgICAgICAgICAgICAg
ICAgIEltbTMyKG5vZGUuY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50cy5zaXpl
KCkpKSk7CisgICAgICAgICAgICAgICAgICAgIEltbTMyKG5vZGUtPmNvZGVPcmlnaW4uaW5saW5l
Q2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgpKSkpOwogICAgICAgICB9IGVsc2UgewogICAgICAg
ICAgICAgc2xvd1BhdGguYXBwZW5kKAogICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaDMyKApA
QCAtNDkwOSwxMSArNDkwMCwxMSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUm
IG5vZGUpCiAgICAgICAgIAogICAgICAgICBKSVRDb21waWxlcjo6SnVtcExpc3Qgc2xvd0FyZ3Vt
ZW50OwogICAgICAgICBKSVRDb21waWxlcjo6SnVtcExpc3Qgc2xvd0FyZ3VtZW50T3V0T2ZCb3Vu
ZHM7Ci0gICAgICAgIGlmIChjb25zdCBTbG93QXJndW1lbnQqIHNsb3dBcmd1bWVudHMgPSBtX2pp
dC5zeW1ib2xUYWJsZUZvcihub2RlLmNvZGVPcmlnaW4pLT5zbG93QXJndW1lbnRzKCkpIHsKKyAg
ICAgICAgaWYgKGNvbnN0IFNsb3dBcmd1bWVudCogc2xvd0FyZ3VtZW50cyA9IG1faml0LnN5bWJv
bFRhYmxlRm9yKG5vZGUtPmNvZGVPcmlnaW4pLT5zbG93QXJndW1lbnRzKCkpIHsKICAgICAgICAg
ICAgIHNsb3dBcmd1bWVudE91dE9mQm91bmRzLmFwcGVuZCgKICAgICAgICAgICAgICAgICBtX2pp
dC5icmFuY2gzMigKICAgICAgICAgICAgICAgICAgICAgSklUQ29tcGlsZXI6OkFib3ZlT3JFcXVh
bCwgaW5kZXhHUFIsCi0gICAgICAgICAgICAgICAgICAgIEltbTMyKG1faml0LnN5bWJvbFRhYmxl
Rm9yKG5vZGUuY29kZU9yaWdpbiktPnBhcmFtZXRlckNvdW50KCkpKSk7CisgICAgICAgICAgICAg
ICAgICAgIEltbTMyKG1faml0LnN5bWJvbFRhYmxlRm9yKG5vZGUtPmNvZGVPcmlnaW4pLT5wYXJh
bWV0ZXJDb3VudCgpKSkpOwogCiAgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChzaXplb2YoU2xv
d0FyZ3VtZW50KSA9PSA4LCBTbG93QXJndW1lbnRfc2l6ZV9pc19laWdodF9ieXRlcyk7CiAgICAg
ICAgICAgICBtX2ppdC5tb3ZlKEltbVB0cihzbG93QXJndW1lbnRzKSwgcmVzdWx0R1BSKTsKQEAg
LTQ5MjUsNyArNDkxNiw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9k
ZSkKICAgICAgICAgICAgIG1faml0LnNpZ25FeHRlbmQzMlRvUHRyKHJlc3VsdEdQUiwgcmVzdWx0
R1BSKTsKICAgICAgICAgICAgIG1faml0LmxvYWQ2NCgKICAgICAgICAgICAgICAgICBKSVRDb21w
aWxlcjo6QmFzZUluZGV4KAotICAgICAgICAgICAgICAgICAgICBHUFJJbmZvOjpjYWxsRnJhbWVS
ZWdpc3RlciwgcmVzdWx0R1BSLCBKSVRDb21waWxlcjo6VGltZXNFaWdodCwgbV9qaXQub2Zmc2V0
T2ZMb2NhbHMobm9kZS5jb2RlT3JpZ2luKSksCisgICAgICAgICAgICAgICAgICAgIEdQUkluZm86
OmNhbGxGcmFtZVJlZ2lzdGVyLCByZXN1bHRHUFIsIEpJVENvbXBpbGVyOjpUaW1lc0VpZ2h0LCBt
X2ppdC5vZmZzZXRPZkxvY2Fscyhub2RlLT5jb2RlT3JpZ2luKSksCiAgICAgICAgICAgICAgICAg
cmVzdWx0R1BSKTsKICAgICAgICAgICAgIHNsb3dBcmd1bWVudC5hcHBlbmQobV9qaXQuanVtcCgp
KTsKICAgICAgICAgfQpAQCAtNDkzNiw0MCArNDkyNyw0MCBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIAogICAgICAgICBtX2ppdC5sb2FkNjQoCiAg
ICAgICAgICAgICBKSVRDb21waWxlcjo6QmFzZUluZGV4KAotICAgICAgICAgICAgICAgIEdQUklu
Zm86OmNhbGxGcmFtZVJlZ2lzdGVyLCByZXN1bHRHUFIsIEpJVENvbXBpbGVyOjpUaW1lc0VpZ2h0
LCBtX2ppdC5vZmZzZXRPZkFyZ3VtZW50c0luY2x1ZGluZ1RoaXMobm9kZS5jb2RlT3JpZ2luKSks
CisgICAgICAgICAgICAgICAgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIHJlc3VsdEdQUiwg
SklUQ29tcGlsZXI6OlRpbWVzRWlnaHQsIG1faml0Lm9mZnNldE9mQXJndW1lbnRzSW5jbHVkaW5n
VGhpcyhub2RlLT5jb2RlT3JpZ2luKSksCiAgICAgICAgICAgICByZXN1bHRHUFIpOwogICAgICAg
ICAKLSAgICAgICAgaWYgKG5vZGUuY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpIHsKKyAgICAg
ICAgaWYgKG5vZGUtPmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKSB7CiAgICAgICAgICAgICBh
ZGRTbG93UGF0aEdlbmVyYXRvcigKICAgICAgICAgICAgICAgICBzbG93UGF0aENhbGwoCiAgICAg
ICAgICAgICAgICAgICAgIHNsb3dQYXRoLCB0aGlzLCBvcGVyYXRpb25HZXRJbmxpbmVkQXJndW1l
bnRCeVZhbCwgcmVzdWx0R1BSLCAKLSAgICAgICAgICAgICAgICAgICAgbV9qaXQuYXJndW1lbnRz
UmVnaXN0ZXJGb3Iobm9kZS5jb2RlT3JpZ2luKSwKLSAgICAgICAgICAgICAgICAgICAgbm9kZS5j
b2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSwKKyAgICAgICAgICAgICAgICAgICAgbV9qaXQuYXJn
dW1lbnRzUmVnaXN0ZXJGb3Iobm9kZS0+Y29kZU9yaWdpbiksCisgICAgICAgICAgICAgICAgICAg
IG5vZGUtPmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lLAogICAgICAgICAgICAgICAgICAgICBp
bmRleEdQUikpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgYWRkU2xvd1BhdGhHZW5l
cmF0b3IoCiAgICAgICAgICAgICAgICAgc2xvd1BhdGhDYWxsKAogICAgICAgICAgICAgICAgICAg
ICBzbG93UGF0aCwgdGhpcywgb3BlcmF0aW9uR2V0QXJndW1lbnRCeVZhbCwgcmVzdWx0R1BSLCAK
LSAgICAgICAgICAgICAgICAgICAgbV9qaXQuYXJndW1lbnRzUmVnaXN0ZXJGb3Iobm9kZS5jb2Rl
T3JpZ2luKSwKKyAgICAgICAgICAgICAgICAgICAgbV9qaXQuYXJndW1lbnRzUmVnaXN0ZXJGb3Io
bm9kZS0+Y29kZU9yaWdpbiksCiAgICAgICAgICAgICAgICAgICAgIGluZGV4R1BSKSk7CiAgICAg
ICAgIH0KICAgICAgICAgCiAgICAgICAgIHNsb3dBcmd1bWVudC5saW5rKCZtX2ppdCk7Ci0gICAg
ICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0R1BSLCBtX2NvbXBpbGVJbmRleCk7CisgICAgICAgIGpz
VmFsdWVSZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAg
ICAgICAKICAgICBjYXNlIENoZWNrQXJndW1lbnRzTm90Q3JlYXRlZDogewogICAgICAgICBBU1NF
UlQoIWlzRW1wdHlTcGVjdWxhdGlvbigKICAgICAgICAgICAgIG1fc3RhdGUudmFyaWFibGVzKCku
b3BlcmFuZCgKLSAgICAgICAgICAgICAgICBtX2ppdC5ncmFwaCgpLmFyZ3VtZW50c1JlZ2lzdGVy
Rm9yKG5vZGUuY29kZU9yaWdpbikpLm1fdHlwZSkpOworICAgICAgICAgICAgICAgIG1faml0Lmdy
YXBoKCkuYXJndW1lbnRzUmVnaXN0ZXJGb3Iobm9kZS0+Y29kZU9yaWdpbikpLm1fdHlwZSkpOwog
ICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAotICAgICAgICAgICAgQXJndW1lbnRzRXNjYXBlZCwg
SlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLAorICAgICAgICAgICAgQXJndW1lbnRzRXNjYXBlZCwgSlNW
YWx1ZVJlZ3MoKSwgMCwKICAgICAgICAgICAgIG1faml0LmJyYW5jaFRlc3Q2NCgKICAgICAgICAg
ICAgICAgICBKSVRDb21waWxlcjo6Tm9uWmVybywKICAgICAgICAgICAgICAgICBKSVRDb21waWxl
cjo6YWRkcmVzc0ZvcigKLSAgICAgICAgICAgICAgICAgICAgbV9qaXQuYXJndW1lbnRzUmVnaXN0
ZXJGb3Iobm9kZS5jb2RlT3JpZ2luKSkpKTsKLSAgICAgICAgbm9SZXN1bHQobV9jb21waWxlSW5k
ZXgpOworICAgICAgICAgICAgICAgICAgICBtX2ppdC5hcmd1bWVudHNSZWdpc3RlckZvcihub2Rl
LT5jb2RlT3JpZ2luKSkpKTsKKyAgICAgICAgbm9SZXN1bHQobm9kZSk7CiAgICAgICAgIGJyZWFr
OwogICAgIH0KICAgICAgICAgCkBAIC00OTc4LDcgKzQ5NjksNyBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIGJyZWFrOwogICAgICAgICAKICAgICBj
YXNlIE5ld0Z1bmN0aW9uOiB7Ci0gICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5v
ZGUuY2hpbGQxKCkpOworICAgICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLT5j
aGlsZDEoKSk7CiAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgdmFsdWUpOwogICAg
ICAgICAKICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7CkBAIC00OTkxLDkg
KzQ5ODIsOSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAg
ICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAogICAgICAgICAgICAgc2xvd1BhdGhDYWxsKAogICAg
ICAgICAgICAgICAgIG5vdENyZWF0ZWQsIHRoaXMsIG9wZXJhdGlvbk5ld0Z1bmN0aW9uLAotICAg
ICAgICAgICAgICAgIHJlc3VsdEdQUiwgbV9qaXQuY29kZUJsb2NrKCktPmZ1bmN0aW9uRGVjbChu
b2RlLmZ1bmN0aW9uRGVjbEluZGV4KCkpKSk7CisgICAgICAgICAgICAgICAgcmVzdWx0R1BSLCBt
X2ppdC5jb2RlQmxvY2soKS0+ZnVuY3Rpb25EZWNsKG5vZGUtPmZ1bmN0aW9uRGVjbEluZGV4KCkp
KSk7CiAgICAgICAgIAotICAgICAgICBjZWxsUmVzdWx0KHJlc3VsdEdQUiwgbV9jb21waWxlSW5k
ZXgpOworICAgICAgICBjZWxsUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7CiAgICAgICAgIGJyZWFr
OwogICAgIH0KICAgICAgICAgCkBAIC01MDAyLDcgKzQ5OTMsNyBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIGJyZWFrOwogICAgICAgICAKICAgICBj
YXNlIENvdW50RXhlY3V0aW9uOgotICAgICAgICBtX2ppdC5hZGQ2NChUcnVzdGVkSW1tMzIoMSks
IE1hY3JvQXNzZW1ibGVyOjpBYnNvbHV0ZUFkZHJlc3Mobm9kZS5leGVjdXRpb25Db3VudGVyKCkt
PmFkZHJlc3MoKSkpOworICAgICAgICBtX2ppdC5hZGQ2NChUcnVzdGVkSW1tMzIoMSksIE1hY3Jv
QXNzZW1ibGVyOjpBYnNvbHV0ZUFkZHJlc3Mobm9kZS0+ZXhlY3V0aW9uQ291bnRlcigpLT5hZGRy
ZXNzKCkpKTsKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIEdhcmJhZ2VWYWx1ZToKQEAgLTUw
MTEsMTMgKzUwMDIsMTMgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2Rl
KQogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgRm9yY2VPU1JFeGl0OiB7Ci0gICAgICAgIHRl
cm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKEluYWRlcXVhdGVDb3ZlcmFnZSwgSlNWYWx1ZVJl
Z3MoKSwgTm9Ob2RlKTsKKyAgICAgICAgdGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oSW5h
ZGVxdWF0ZUNvdmVyYWdlLCBKU1ZhbHVlUmVncygpLCAwKTsKICAgICAgICAgYnJlYWs7CiAgICAg
fQogCiAgICAgY2FzZSBQaGFudG9tOgogICAgICAgICAvLyBUaGlzIGlzIGEgbm8tb3AuCi0gICAg
ICAgIG5vUmVzdWx0KG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAgbm9SZXN1bHQobm9kZSk7CiAg
ICAgICAgIGJyZWFrOwogICAgICAgICAKICAgICBjYXNlIElubGluZVN0YXJ0OgpAQCAtNTAzMyw4
ICs1MDI0LDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAg
IGlmICghbV9jb21waWxlT2theSkKICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIGlmIChub2Rl
Lmhhc1Jlc3VsdCgpICYmIG5vZGUubXVzdEdlbmVyYXRlKCkpCi0gICAgICAgIHVzZShtX2NvbXBp
bGVJbmRleCk7CisgICAgaWYgKG5vZGUtPmhhc1Jlc3VsdCgpICYmIG5vZGUtPm11c3RHZW5lcmF0
ZSgpKQorICAgICAgICB1c2Uobm9kZSk7CiB9CiAKICNlbmRpZgpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9uIDE0MTA1
MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSwg
MjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTEsIDIwMTIsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00MCw3ICs0MCw3IEBAIG5hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgREZHIHsKIFNwZWN1bGF0aXZlSklUOjpTcGVjdWxhdGl2ZUpJVChKSVRDb21waWxl
ciYgaml0KQogICAgIDogbV9jb21waWxlT2theSh0cnVlKQogICAgICwgbV9qaXQoaml0KQotICAg
ICwgbV9jb21waWxlSW5kZXgoMCkKKyAgICAsIG1fY3VycmVudE5vZGUoMCkKICAgICAsIG1faW5k
ZXhJbkJsb2NrKDApCiAgICAgLCBtX2dlbmVyYXRpb25JbmZvKG1faml0LmNvZGVCbG9jaygpLT5t
X251bUNhbGxlZVJlZ2lzdGVycykKICAgICAsIG1fYmxvY2tIZWFkcyhqaXQuZ3JhcGgoKS5tX2Js
b2Nrcy5zaXplKCkpCkBAIC0xMDQsODcgKzEwNCw4NyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpl
bWl0QWxsb2NhdGVKU0FycmF5CiAgICAgICAgICAgICBzdHJ1Y3R1cmUsIG51bUVsZW1lbnRzKSkp
OwogfQogCi12b2lkIFNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGlvbkNoZWNrKEV4aXRLaW5kIGtp
bmQsIEpTVmFsdWVTb3VyY2UganNWYWx1ZVNvdXJjZSwgTm9kZUluZGV4IG5vZGVJbmRleCwgTWFj
cm9Bc3NlbWJsZXI6Okp1bXAganVtcFRvRmFpbCkKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OnNwZWN1
bGF0aW9uQ2hlY2soRXhpdEtpbmQga2luZCwgSlNWYWx1ZVNvdXJjZSBqc1ZhbHVlU291cmNlLCBO
b2RlKiBub2RlLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBqdW1wVG9GYWlsKQogewogICAgIGlmICgh
bV9jb21waWxlT2theSkKICAgICAgICAgcmV0dXJuOwotICAgIEFTU0VSVChhdChtX2NvbXBpbGVJ
bmRleCkuY2FuRXhpdCgpIHx8IG1faXNDaGVja2luZ0FyZ3VtZW50VHlwZXMpOworICAgIEFTU0VS
VChtX2lzQ2hlY2tpbmdBcmd1bWVudFR5cGVzIHx8IG1fY3VycmVudE5vZGUtPmNhbkV4aXQoKSk7
CiAgICAgbV9qaXQuYXBwZW5kRXhpdEluZm8oanVtcFRvRmFpbCk7Ci0gICAgbV9qaXQuY29kZUJs
b2NrKCktPmFwcGVuZE9TUkV4aXQoT1NSRXhpdChraW5kLCBqc1ZhbHVlU291cmNlLCBtX2ppdC5n
cmFwaCgpLm1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGVGb3Iobm9kZUluZGV4KSwgdGhpcywg
bV9zdHJlYW0tPnNpemUoKSkpOworICAgIG1faml0LmNvZGVCbG9jaygpLT5hcHBlbmRPU1JFeGl0
KE9TUkV4aXQoa2luZCwganNWYWx1ZVNvdXJjZSwgbV9qaXQuZ3JhcGgoKS5tZXRob2RPZkdldHRp
bmdBVmFsdWVQcm9maWxlRm9yKG5vZGUpLCB0aGlzLCBtX3N0cmVhbS0+c2l6ZSgpKSk7CiB9CiAK
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0aW9uQ2hlY2soRXhpdEtpbmQga2luZCwgSlNW
YWx1ZVNvdXJjZSBqc1ZhbHVlU291cmNlLCBFZGdlIG5vZGVVc2UsIE1hY3JvQXNzZW1ibGVyOjpK
dW1wIGp1bXBUb0ZhaWwpCiB7Ci0gICAgQVNTRVJUKGF0KG1fY29tcGlsZUluZGV4KS5jYW5FeGl0
KCkgfHwgbV9pc0NoZWNraW5nQXJndW1lbnRUeXBlcyk7Ci0gICAgc3BlY3VsYXRpb25DaGVjayhr
aW5kLCBqc1ZhbHVlU291cmNlLCBub2RlVXNlLmluZGV4KCksIGp1bXBUb0ZhaWwpOworICAgIEFT
U0VSVChtX2lzQ2hlY2tpbmdBcmd1bWVudFR5cGVzIHx8IG1fY3VycmVudE5vZGUtPmNhbkV4aXQo
KSk7CisgICAgc3BlY3VsYXRpb25DaGVjayhraW5kLCBqc1ZhbHVlU291cmNlLCBub2RlVXNlLm5v
ZGUoKSwganVtcFRvRmFpbCk7CiB9CiAKLU9TUkV4aXRKdW1wUGxhY2Vob2xkZXIgU3BlY3VsYXRp
dmVKSVQ6OnNwZWN1bGF0aW9uQ2hlY2soRXhpdEtpbmQga2luZCwgSlNWYWx1ZVNvdXJjZSBqc1Zh
bHVlU291cmNlLCBOb2RlSW5kZXggbm9kZUluZGV4KQorT1NSRXhpdEp1bXBQbGFjZWhvbGRlciBT
cGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRpb25DaGVjayhFeGl0S2luZCBraW5kLCBKU1ZhbHVlU291
cmNlIGpzVmFsdWVTb3VyY2UsIE5vZGUqIG5vZGUpCiB7CiAgICAgaWYgKCFtX2NvbXBpbGVPa2F5
KQogICAgICAgICByZXR1cm4gT1NSRXhpdEp1bXBQbGFjZWhvbGRlcigpOwotICAgIEFTU0VSVChh
dChtX2NvbXBpbGVJbmRleCkuY2FuRXhpdCgpIHx8IG1faXNDaGVja2luZ0FyZ3VtZW50VHlwZXMp
OworICAgIEFTU0VSVChtX2lzQ2hlY2tpbmdBcmd1bWVudFR5cGVzIHx8IG1fY3VycmVudE5vZGUt
PmNhbkV4aXQoKSk7CiAgICAgdW5zaWduZWQgaW5kZXggPSBtX2ppdC5jb2RlQmxvY2soKS0+bnVt
YmVyT2ZPU1JFeGl0cygpOwogICAgIG1faml0LmFwcGVuZEV4aXRJbmZvKCk7Ci0gICAgbV9qaXQu
Y29kZUJsb2NrKCktPmFwcGVuZE9TUkV4aXQoT1NSRXhpdChraW5kLCBqc1ZhbHVlU291cmNlLCBt
X2ppdC5ncmFwaCgpLm1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGVGb3Iobm9kZUluZGV4KSwg
dGhpcywgbV9zdHJlYW0tPnNpemUoKSkpOworICAgIG1faml0LmNvZGVCbG9jaygpLT5hcHBlbmRP
U1JFeGl0KE9TUkV4aXQoa2luZCwganNWYWx1ZVNvdXJjZSwgbV9qaXQuZ3JhcGgoKS5tZXRob2RP
ZkdldHRpbmdBVmFsdWVQcm9maWxlRm9yKG5vZGUpLCB0aGlzLCBtX3N0cmVhbS0+c2l6ZSgpKSk7
CiAgICAgcmV0dXJuIE9TUkV4aXRKdW1wUGxhY2Vob2xkZXIoaW5kZXgpOwogfQogCiBPU1JFeGl0
SnVtcFBsYWNlaG9sZGVyIFNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGlvbkNoZWNrKEV4aXRLaW5k
IGtpbmQsIEpTVmFsdWVTb3VyY2UganNWYWx1ZVNvdXJjZSwgRWRnZSBub2RlVXNlKQogewotICAg
IEFTU0VSVChhdChtX2NvbXBpbGVJbmRleCkuY2FuRXhpdCgpIHx8IG1faXNDaGVja2luZ0FyZ3Vt
ZW50VHlwZXMpOwotICAgIHJldHVybiBzcGVjdWxhdGlvbkNoZWNrKGtpbmQsIGpzVmFsdWVTb3Vy
Y2UsIG5vZGVVc2UuaW5kZXgoKSk7CisgICAgQVNTRVJUKG1faXNDaGVja2luZ0FyZ3VtZW50VHlw
ZXMgfHwgbV9jdXJyZW50Tm9kZS0+Y2FuRXhpdCgpKTsKKyAgICByZXR1cm4gc3BlY3VsYXRpb25D
aGVjayhraW5kLCBqc1ZhbHVlU291cmNlLCBub2RlVXNlLm5vZGUoKSk7CiB9CiAKLXZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OnNwZWN1bGF0aW9uQ2hlY2soRXhpdEtpbmQga2luZCwgSlNWYWx1ZVNvdXJj
ZSBqc1ZhbHVlU291cmNlLCBOb2RlSW5kZXggbm9kZUluZGV4LCBjb25zdCBNYWNyb0Fzc2VtYmxl
cjo6SnVtcExpc3QmIGp1bXBzVG9GYWlsKQordm9pZCBTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRp
b25DaGVjayhFeGl0S2luZCBraW5kLCBKU1ZhbHVlU291cmNlIGpzVmFsdWVTb3VyY2UsIE5vZGUq
IG5vZGUsIGNvbnN0IE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCYganVtcHNUb0ZhaWwpCiB7CiAg
ICAgaWYgKCFtX2NvbXBpbGVPa2F5KQogICAgICAgICByZXR1cm47Ci0gICAgQVNTRVJUKGF0KG1f
Y29tcGlsZUluZGV4KS5jYW5FeGl0KCkgfHwgbV9pc0NoZWNraW5nQXJndW1lbnRUeXBlcyk7Cisg
ICAgQVNTRVJUKG1faXNDaGVja2luZ0FyZ3VtZW50VHlwZXMgfHwgbV9jdXJyZW50Tm9kZS0+Y2Fu
RXhpdCgpKTsKICAgICBtX2ppdC5hcHBlbmRFeGl0SW5mbyhqdW1wc1RvRmFpbCk7Ci0gICAgbV9q
aXQuY29kZUJsb2NrKCktPmFwcGVuZE9TUkV4aXQoT1NSRXhpdChraW5kLCBqc1ZhbHVlU291cmNl
LCBtX2ppdC5ncmFwaCgpLm1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGVGb3Iobm9kZUluZGV4
KSwgdGhpcywgbV9zdHJlYW0tPnNpemUoKSkpOworICAgIG1faml0LmNvZGVCbG9jaygpLT5hcHBl
bmRPU1JFeGl0KE9TUkV4aXQoa2luZCwganNWYWx1ZVNvdXJjZSwgbV9qaXQuZ3JhcGgoKS5tZXRo
b2RPZkdldHRpbmdBVmFsdWVQcm9maWxlRm9yKG5vZGUpLCB0aGlzLCBtX3N0cmVhbS0+c2l6ZSgp
KSk7CiB9CiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0aW9uQ2hlY2soRXhpdEtpbmQg
a2luZCwgSlNWYWx1ZVNvdXJjZSBqc1ZhbHVlU291cmNlLCBFZGdlIG5vZGVVc2UsIGNvbnN0IE1h
Y3JvQXNzZW1ibGVyOjpKdW1wTGlzdCYganVtcHNUb0ZhaWwpCiB7Ci0gICAgQVNTRVJUKGF0KG1f
Y29tcGlsZUluZGV4KS5jYW5FeGl0KCkgfHwgbV9pc0NoZWNraW5nQXJndW1lbnRUeXBlcyk7Ci0g
ICAgc3BlY3VsYXRpb25DaGVjayhraW5kLCBqc1ZhbHVlU291cmNlLCBub2RlVXNlLmluZGV4KCks
IGp1bXBzVG9GYWlsKTsKKyAgICBBU1NFUlQobV9pc0NoZWNraW5nQXJndW1lbnRUeXBlcyB8fCBt
X2N1cnJlbnROb2RlLT5jYW5FeGl0KCkpOworICAgIHNwZWN1bGF0aW9uQ2hlY2soa2luZCwganNW
YWx1ZVNvdXJjZSwgbm9kZVVzZS5ub2RlKCksIGp1bXBzVG9GYWlsKTsKIH0KIAotdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6c3BlY3VsYXRpb25DaGVjayhFeGl0S2luZCBraW5kLCBKU1ZhbHVlU291cmNl
IGpzVmFsdWVTb3VyY2UsIE5vZGVJbmRleCBub2RlSW5kZXgsIE1hY3JvQXNzZW1ibGVyOjpKdW1w
IGp1bXBUb0ZhaWwsIGNvbnN0IFNwZWN1bGF0aW9uUmVjb3ZlcnkmIHJlY292ZXJ5KQordm9pZCBT
cGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRpb25DaGVjayhFeGl0S2luZCBraW5kLCBKU1ZhbHVlU291
cmNlIGpzVmFsdWVTb3VyY2UsIE5vZGUqIG5vZGUsIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGp1bXBU
b0ZhaWwsIGNvbnN0IFNwZWN1bGF0aW9uUmVjb3ZlcnkmIHJlY292ZXJ5KQogewogICAgIGlmICgh
bV9jb21waWxlT2theSkKICAgICAgICAgcmV0dXJuOwotICAgIEFTU0VSVChhdChtX2NvbXBpbGVJ
bmRleCkuY2FuRXhpdCgpIHx8IG1faXNDaGVja2luZ0FyZ3VtZW50VHlwZXMpOworICAgIEFTU0VS
VChtX2lzQ2hlY2tpbmdBcmd1bWVudFR5cGVzIHx8IG1fY3VycmVudE5vZGUtPmNhbkV4aXQoKSk7
CiAgICAgbV9qaXQuY29kZUJsb2NrKCktPmFwcGVuZFNwZWN1bGF0aW9uUmVjb3ZlcnkocmVjb3Zl
cnkpOwogICAgIG1faml0LmFwcGVuZEV4aXRJbmZvKGp1bXBUb0ZhaWwpOwotICAgIG1faml0LmNv
ZGVCbG9jaygpLT5hcHBlbmRPU1JFeGl0KE9TUkV4aXQoa2luZCwganNWYWx1ZVNvdXJjZSwgbV9q
aXQuZ3JhcGgoKS5tZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlRm9yKG5vZGVJbmRleCksIHRo
aXMsIG1fc3RyZWFtLT5zaXplKCksIG1faml0LmNvZGVCbG9jaygpLT5udW1iZXJPZlNwZWN1bGF0
aW9uUmVjb3ZlcmllcygpKSk7CisgICAgbV9qaXQuY29kZUJsb2NrKCktPmFwcGVuZE9TUkV4aXQo
T1NSRXhpdChraW5kLCBqc1ZhbHVlU291cmNlLCBtX2ppdC5ncmFwaCgpLm1ldGhvZE9mR2V0dGlu
Z0FWYWx1ZVByb2ZpbGVGb3Iobm9kZSksIHRoaXMsIG1fc3RyZWFtLT5zaXplKCksIG1faml0LmNv
ZGVCbG9jaygpLT5udW1iZXJPZlNwZWN1bGF0aW9uUmVjb3ZlcmllcygpKSk7CiB9CiAKIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0aW9uQ2hlY2soRXhpdEtpbmQga2luZCwgSlNWYWx1ZVNv
dXJjZSBqc1ZhbHVlU291cmNlLCBFZGdlIG5vZGVVc2UsIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGp1
bXBUb0ZhaWwsIGNvbnN0IFNwZWN1bGF0aW9uUmVjb3ZlcnkmIHJlY292ZXJ5KQogewotICAgIEFT
U0VSVChhdChtX2NvbXBpbGVJbmRleCkuY2FuRXhpdCgpIHx8IG1faXNDaGVja2luZ0FyZ3VtZW50
VHlwZXMpOwotICAgIHNwZWN1bGF0aW9uQ2hlY2soa2luZCwganNWYWx1ZVNvdXJjZSwgbm9kZVVz
ZS5pbmRleCgpLCBqdW1wVG9GYWlsLCByZWNvdmVyeSk7CisgICAgQVNTRVJUKG1faXNDaGVja2lu
Z0FyZ3VtZW50VHlwZXMgfHwgbV9jdXJyZW50Tm9kZS0+Y2FuRXhpdCgpKTsKKyAgICBzcGVjdWxh
dGlvbkNoZWNrKGtpbmQsIGpzVmFsdWVTb3VyY2UsIG5vZGVVc2Uubm9kZSgpLCBqdW1wVG9GYWls
LCByZWNvdmVyeSk7CiB9CiAKLXZvaWQgU3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0aW9uQ2hlY2so
RXhpdEtpbmQga2luZCwgSlNWYWx1ZVNvdXJjZSBqc1ZhbHVlU291cmNlLCBOb2RlSW5kZXggbm9k
ZUluZGV4LCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBqdW1wVG9GYWlsLCBjb25zdCBTcGVjdWxhdGlv
blJlY292ZXJ5JiByZWNvdmVyeSwgU3BlY3VsYXRpb25EaXJlY3Rpb24gZGlyZWN0aW9uKQordm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRpb25DaGVjayhFeGl0S2luZCBraW5kLCBKU1ZhbHVl
U291cmNlIGpzVmFsdWVTb3VyY2UsIE5vZGUqIG5vZGUsIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGp1
bXBUb0ZhaWwsIGNvbnN0IFNwZWN1bGF0aW9uUmVjb3ZlcnkmIHJlY292ZXJ5LCBTcGVjdWxhdGlv
bkRpcmVjdGlvbiBkaXJlY3Rpb24pCiB7Ci0gICAgc3BlY3VsYXRpb25DaGVjayhraW5kLCBqc1Zh
bHVlU291cmNlLCBub2RlSW5kZXgsIGp1bXBUb0ZhaWwsIHJlY292ZXJ5KTsKKyAgICBzcGVjdWxh
dGlvbkNoZWNrKGtpbmQsIGpzVmFsdWVTb3VyY2UsIG5vZGUsIGp1bXBUb0ZhaWwsIHJlY292ZXJ5
KTsKICAgICBpZiAoZGlyZWN0aW9uID09IEZvcndhcmRTcGVjdWxhdGlvbikKICAgICAgICAgY29u
dmVydExhc3RPU1JFeGl0VG9Gb3J3YXJkKCk7CiB9CiAKLUp1bXBSZXBsYWNlbWVudFdhdGNocG9p
bnQqIFNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGlvbldhdGNocG9pbnQoRXhpdEtpbmQga2luZCwg
SlNWYWx1ZVNvdXJjZSBqc1ZhbHVlU291cmNlLCBOb2RlSW5kZXggbm9kZUluZGV4KQorSnVtcFJl
cGxhY2VtZW50V2F0Y2hwb2ludCogU3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0aW9uV2F0Y2hwb2lu
dChFeGl0S2luZCBraW5kLCBKU1ZhbHVlU291cmNlIGpzVmFsdWVTb3VyY2UsIE5vZGUqIG5vZGUp
CiB7CiAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQogICAgICAgICByZXR1cm4gMDsKLSAgICBBU1NF
UlQoYXQobV9jb21waWxlSW5kZXgpLmNhbkV4aXQoKSB8fCBtX2lzQ2hlY2tpbmdBcmd1bWVudFR5
cGVzKTsKKyAgICBBU1NFUlQobV9pc0NoZWNraW5nQXJndW1lbnRUeXBlcyB8fCBtX2N1cnJlbnRO
b2RlLT5jYW5FeGl0KCkpOwogICAgIG1faml0LmFwcGVuZEV4aXRJbmZvKEpJVENvbXBpbGVyOjpK
dW1wTGlzdCgpKTsKICAgICBPU1JFeGl0JiBleGl0ID0gbV9qaXQuY29kZUJsb2NrKCktPm9zckV4
aXQoCi0gICAgICAgIG1faml0LmNvZGVCbG9jaygpLT5hcHBlbmRPU1JFeGl0KAotICAgICAgICAg
ICAgT1NSRXhpdChraW5kLCBqc1ZhbHVlU291cmNlLAotICAgICAgICAgICAgICAgICAgICBtX2pp
dC5ncmFwaCgpLm1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGVGb3Iobm9kZUluZGV4KSwKLSAg
ICAgICAgICAgICAgICAgICAgdGhpcywgbV9zdHJlYW0tPnNpemUoKSkpKTsKKyAgICAgICAgbV9q
aXQuY29kZUJsb2NrKCktPmFwcGVuZE9TUkV4aXQoT1NSRXhpdCgKKyAgICAgICAgICAgIGtpbmQs
IGpzVmFsdWVTb3VyY2UsCisgICAgICAgICAgICBtX2ppdC5ncmFwaCgpLm1ldGhvZE9mR2V0dGlu
Z0FWYWx1ZVByb2ZpbGVGb3Iobm9kZSksCisgICAgICAgICAgICB0aGlzLCBtX3N0cmVhbS0+c2l6
ZSgpKSkpOwogICAgIGV4aXQubV93YXRjaHBvaW50SW5kZXggPSBtX2ppdC5jb2RlQmxvY2soKS0+
YXBwZW5kV2F0Y2hwb2ludCgKICAgICAgICAgSnVtcFJlcGxhY2VtZW50V2F0Y2hwb2ludChtX2pp
dC53YXRjaHBvaW50TGFiZWwoKSkpOwogICAgIHJldHVybiAmbV9qaXQuY29kZUJsb2NrKCktPndh
dGNocG9pbnQoZXhpdC5tX3dhdGNocG9pbnRJbmRleCk7CkBAIC0xOTIsNyArMTkyLDcgQEAgSnVt
cFJlcGxhY2VtZW50V2F0Y2hwb2ludCogU3BlY3VsYXRpdmVKSQogCiBKdW1wUmVwbGFjZW1lbnRX
YXRjaHBvaW50KiBTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRpb25XYXRjaHBvaW50KEV4aXRLaW5k
IGtpbmQpCiB7Ci0gICAgcmV0dXJuIHNwZWN1bGF0aW9uV2F0Y2hwb2ludChraW5kLCBKU1ZhbHVl
U291cmNlKCksIE5vTm9kZSk7CisgICAgcmV0dXJuIHNwZWN1bGF0aW9uV2F0Y2hwb2ludChraW5k
LCBKU1ZhbHVlU291cmNlKCksIDApOwogfQogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb252ZXJ0
TGFzdE9TUkV4aXRUb0ZvcndhcmQoY29uc3QgVmFsdWVSZWNvdmVyeSYgdmFsdWVSZWNvdmVyeSkK
QEAgLTIwMCwxMCArMjAwLDEwIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbnZlcnRMYXN0T1NS
RXhpdFQKICAgICBpZiAoIXZhbHVlUmVjb3ZlcnkpIHsKICAgICAgICAgLy8gQ2hlY2sgdGhhdCBl
aXRoZXIgdGhlIGN1cnJlbnQgbm9kZSBpcyBhIFNldExvY2FsLCBvciB0aGUgcHJlY2VkaW5nIG5v
ZGUgd2FzIGEKICAgICAgICAgLy8gU2V0TG9jYWwgd2l0aCB0aGUgc2FtZSBjb2RlIG9yaWdpbi4K
LSAgICAgICAgaWYgKGF0KG1fY29tcGlsZUluZGV4KS5vcCgpICE9IFNldExvY2FsKSB7Ci0gICAg
ICAgICAgICBOb2RlKiBzZXRMb2NhbCA9ICZhdChtX2ppdC5ncmFwaCgpLm1fYmxvY2tzW21fYmxv
Y2tdLT5hdChtX2luZGV4SW5CbG9jayAtIDEpKTsKKyAgICAgICAgaWYgKG1fY3VycmVudE5vZGUt
Pm9wKCkgIT0gU2V0TG9jYWwpIHsKKyAgICAgICAgICAgIE5vZGUqIHNldExvY2FsID0gbV9qaXQu
Z3JhcGgoKS5tX2Jsb2Nrc1ttX2Jsb2NrXS0+YXQobV9pbmRleEluQmxvY2sgLSAxKTsKICAgICAg
ICAgICAgIEFTU0VSVF9VTlVTRUQoc2V0TG9jYWwsIHNldExvY2FsLT5vcCgpID09IFNldExvY2Fs
KTsKLSAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQoc2V0TG9jYWwsIHNldExvY2FsLT5jb2RlT3Jp
Z2luID09IGF0KG1fY29tcGlsZUluZGV4KS5jb2RlT3JpZ2luKTsKKyAgICAgICAgICAgIEFTU0VS
VF9VTlVTRUQoc2V0TG9jYWwsIHNldExvY2FsLT5jb2RlT3JpZ2luID09IG1fY3VycmVudE5vZGUt
PmNvZGVPcmlnaW4pOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICAvLyBGaW5kIHRoZSBu
ZXh0IG5vZGUuCkBAIC0yMTcsMTMgKzIxNywxMyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb252
ZXJ0TGFzdE9TUkV4aXRUCiAgICAgICAgICAgICAgICAgQVNTRVJUKG5vZGUtPm9wKCkgPT0gSnVt
cCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQotICAgICAgICAgICAg
bm9kZSA9ICZhdChtX2ppdC5ncmFwaCgpLm1fYmxvY2tzW21fYmxvY2tdLT5hdChpbmRleEluQmxv
Y2spKTsKLSAgICAgICAgICAgIGlmIChub2RlLT5jb2RlT3JpZ2luICE9IGF0KG1fY29tcGlsZUlu
ZGV4KS5jb2RlT3JpZ2luKQorICAgICAgICAgICAgbm9kZSA9IG1faml0LmdyYXBoKCkubV9ibG9j
a3NbbV9ibG9ja10tPmF0KGluZGV4SW5CbG9jayk7CisgICAgICAgICAgICBpZiAobm9kZS0+Y29k
ZU9yaWdpbiAhPSBtX2N1cnJlbnROb2RlLT5jb2RlT3JpZ2luKQogICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgaW5kZXhJbkJsb2NrKys7CiAgICAgICAgIH0KICAgICAgICAgCi0g
ICAgICAgIEFTU0VSVChub2RlLT5jb2RlT3JpZ2luICE9IGF0KG1fY29tcGlsZUluZGV4KS5jb2Rl
T3JpZ2luKTsKKyAgICAgICAgQVNTRVJUKG5vZGUtPmNvZGVPcmlnaW4gIT0gbV9jdXJyZW50Tm9k
ZS0+Y29kZU9yaWdpbik7CiAgICAgICAgIE9TUkV4aXQmIGV4aXQgPSBtX2ppdC5jb2RlQmxvY2so
KS0+bGFzdE9TUkV4aXQoKTsKICAgICAgICAgZXhpdC5tX2NvZGVPcmlnaW4gPSBub2RlLT5jb2Rl
T3JpZ2luOwogICAgICAgICByZXR1cm47CkBAIC0yMzEsMjkgKzIzMSwyOSBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb252ZXJ0TGFzdE9TUkV4aXRUCiAgICAgCiAgICAgdW5zaWduZWQgc2V0TG9j
YWxJbmRleEluQmxvY2sgPSBtX2luZGV4SW5CbG9jayArIDE7CiAgICAgCi0gICAgTm9kZSogc2V0
TG9jYWwgPSAmYXQobV9qaXQuZ3JhcGgoKS5tX2Jsb2Nrc1ttX2Jsb2NrXS0+YXQoc2V0TG9jYWxJ
bmRleEluQmxvY2spKTsKKyAgICBOb2RlKiBzZXRMb2NhbCA9IG1faml0LmdyYXBoKCkubV9ibG9j
a3NbbV9ibG9ja10tPmF0KHNldExvY2FsSW5kZXhJbkJsb2NrKTsKICAgICBib29sIGhhZEludDMy
VG9Eb3VibGUgPSBmYWxzZTsKICAgICAKICAgICBpZiAoc2V0TG9jYWwtPm9wKCkgPT0gSW50MzJU
b0RvdWJsZSkgewotICAgICAgICBzZXRMb2NhbCA9ICZhdChtX2ppdC5ncmFwaCgpLm1fYmxvY2tz
W21fYmxvY2tdLT5hdCgrK3NldExvY2FsSW5kZXhJbkJsb2NrKSk7CisgICAgICAgIHNldExvY2Fs
ID0gbV9qaXQuZ3JhcGgoKS5tX2Jsb2Nrc1ttX2Jsb2NrXS0+YXQoKytzZXRMb2NhbEluZGV4SW5C
bG9jayk7CiAgICAgICAgIGhhZEludDMyVG9Eb3VibGUgPSB0cnVlOwogICAgIH0KICAgICBpZiAo
c2V0TG9jYWwtPm9wKCkgPT0gRmx1c2ggfHwgc2V0TG9jYWwtPm9wKCkgPT0gUGhhbnRvbSkKLSAg
ICAgICAgc2V0TG9jYWwgPSAmYXQobV9qaXQuZ3JhcGgoKS5tX2Jsb2Nrc1ttX2Jsb2NrXS0+YXQo
KytzZXRMb2NhbEluZGV4SW5CbG9jaykpOworICAgICAgICBzZXRMb2NhbCA9IG1faml0LmdyYXBo
KCkubV9ibG9ja3NbbV9ibG9ja10tPmF0KCsrc2V0TG9jYWxJbmRleEluQmxvY2spOwogICAgICAg
ICAKICAgICBpZiAoaGFkSW50MzJUb0RvdWJsZSkKLSAgICAgICAgQVNTRVJUKGF0KHNldExvY2Fs
LT5jaGlsZDEoKSkuY2hpbGQxKCkgPT0gbV9jb21waWxlSW5kZXgpOworICAgICAgICBBU1NFUlQo
c2V0TG9jYWwtPmNoaWxkMSgpLT5jaGlsZDEoKSA9PSBtX2N1cnJlbnROb2RlKTsKICAgICBlbHNl
Ci0gICAgICAgIEFTU0VSVChzZXRMb2NhbC0+Y2hpbGQxKCkgPT0gbV9jb21waWxlSW5kZXgpOwor
ICAgICAgICBBU1NFUlQoc2V0TG9jYWwtPmNoaWxkMSgpID09IG1fY3VycmVudE5vZGUpOwogICAg
IEFTU0VSVChzZXRMb2NhbC0+b3AoKSA9PSBTZXRMb2NhbCk7Ci0gICAgQVNTRVJUKHNldExvY2Fs
LT5jb2RlT3JpZ2luID09IGF0KG1fY29tcGlsZUluZGV4KS5jb2RlT3JpZ2luKTsKKyAgICBBU1NF
UlQoc2V0TG9jYWwtPmNvZGVPcmlnaW4gPT0gbV9jdXJyZW50Tm9kZS0+Y29kZU9yaWdpbik7CiAK
LSAgICBOb2RlKiBuZXh0Tm9kZSA9ICZhdChtX2ppdC5ncmFwaCgpLm1fYmxvY2tzW21fYmxvY2td
LT5hdChzZXRMb2NhbEluZGV4SW5CbG9jayArIDEpKTsKLSAgICBpZiAobmV4dE5vZGUtPm9wKCkg
PT0gSnVtcCAmJiBuZXh0Tm9kZS0+Y29kZU9yaWdpbiA9PSBhdChtX2NvbXBpbGVJbmRleCkuY29k
ZU9yaWdpbikgeworICAgIE5vZGUqIG5leHROb2RlID0gbV9qaXQuZ3JhcGgoKS5tX2Jsb2Nrc1tt
X2Jsb2NrXS0+YXQoc2V0TG9jYWxJbmRleEluQmxvY2sgKyAxKTsKKyAgICBpZiAobmV4dE5vZGUt
Pm9wKCkgPT0gSnVtcCAmJiBuZXh0Tm9kZS0+Y29kZU9yaWdpbiA9PSBtX2N1cnJlbnROb2RlLT5j
b2RlT3JpZ2luKSB7CiAgICAgICAgIC8vIFdlJ3JlIGF0IGFuIGlubGluZWQgcmV0dXJuLiBVc2Ug
YSBiYWNrd2FyZCBzcGVjdWxhdGlvbiBpbnN0ZWFkLgogICAgICAgICByZXR1cm47CiAgICAgfQot
ICAgIEFTU0VSVChuZXh0Tm9kZS0+Y29kZU9yaWdpbiAhPSBhdChtX2NvbXBpbGVJbmRleCkuY29k
ZU9yaWdpbik7CisgICAgQVNTRVJUKG5leHROb2RlLT5jb2RlT3JpZ2luICE9IG1fY3VycmVudE5v
ZGUtPmNvZGVPcmlnaW4pOwogICAgICAgICAKICAgICBPU1JFeGl0JiBleGl0ID0gbV9qaXQuY29k
ZUJsb2NrKCktPmxhc3RPU1JFeGl0KCk7CiAgICAgZXhpdC5tX2NvZGVPcmlnaW4gPSBuZXh0Tm9k
ZS0+Y29kZU9yaWdpbjsKQEAgLTI3OCw1NSArMjc4LDU1IEBAIEp1bXBSZXBsYWNlbWVudFdhdGNo
cG9pbnQqIFNwZWN1bGF0aXZlSkkKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi12b2lkIFNwZWN1
bGF0aXZlSklUOjpmb3J3YXJkU3BlY3VsYXRpb25DaGVjayhFeGl0S2luZCBraW5kLCBKU1ZhbHVl
U291cmNlIGpzVmFsdWVTb3VyY2UsIE5vZGVJbmRleCBub2RlSW5kZXgsIE1hY3JvQXNzZW1ibGVy
OjpKdW1wIGp1bXBUb0ZhaWwsIGNvbnN0IFZhbHVlUmVjb3ZlcnkmIHZhbHVlUmVjb3ZlcnkpCit2
b2lkIFNwZWN1bGF0aXZlSklUOjpmb3J3YXJkU3BlY3VsYXRpb25DaGVjayhFeGl0S2luZCBraW5k
LCBKU1ZhbHVlU291cmNlIGpzVmFsdWVTb3VyY2UsIE5vZGUqIG5vZGUsIE1hY3JvQXNzZW1ibGVy
OjpKdW1wIGp1bXBUb0ZhaWwsIGNvbnN0IFZhbHVlUmVjb3ZlcnkmIHZhbHVlUmVjb3ZlcnkpCiB7
Ci0gICAgQVNTRVJUKGF0KG1fY29tcGlsZUluZGV4KS5jYW5FeGl0KCkgfHwgbV9pc0NoZWNraW5n
QXJndW1lbnRUeXBlcyk7Ci0gICAgc3BlY3VsYXRpb25DaGVjayhraW5kLCBqc1ZhbHVlU291cmNl
LCBub2RlSW5kZXgsIGp1bXBUb0ZhaWwpOworICAgIEFTU0VSVChtX2lzQ2hlY2tpbmdBcmd1bWVu
dFR5cGVzIHx8IG1fY3VycmVudE5vZGUtPmNhbkV4aXQoKSk7CisgICAgc3BlY3VsYXRpb25DaGVj
ayhraW5kLCBqc1ZhbHVlU291cmNlLCBub2RlLCBqdW1wVG9GYWlsKTsKICAgICBjb252ZXJ0TGFz
dE9TUkV4aXRUb0ZvcndhcmQodmFsdWVSZWNvdmVyeSk7CiB9CiAKLXZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmZvcndhcmRTcGVjdWxhdGlvbkNoZWNrKEV4aXRLaW5kIGtpbmQsIEpTVmFsdWVTb3VyY2Ug
anNWYWx1ZVNvdXJjZSwgTm9kZUluZGV4IG5vZGVJbmRleCwgY29uc3QgTWFjcm9Bc3NlbWJsZXI6
Okp1bXBMaXN0JiBqdW1wc1RvRmFpbCwgY29uc3QgVmFsdWVSZWNvdmVyeSYgdmFsdWVSZWNvdmVy
eSkKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmZvcndhcmRTcGVjdWxhdGlvbkNoZWNrKEV4aXRLaW5k
IGtpbmQsIEpTVmFsdWVTb3VyY2UganNWYWx1ZVNvdXJjZSwgTm9kZSogbm9kZSwgY29uc3QgTWFj
cm9Bc3NlbWJsZXI6Okp1bXBMaXN0JiBqdW1wc1RvRmFpbCwgY29uc3QgVmFsdWVSZWNvdmVyeSYg
dmFsdWVSZWNvdmVyeSkKIHsKLSAgICBBU1NFUlQoYXQobV9jb21waWxlSW5kZXgpLmNhbkV4aXQo
KSB8fCBtX2lzQ2hlY2tpbmdBcmd1bWVudFR5cGVzKTsKLSAgICBzcGVjdWxhdGlvbkNoZWNrKGtp
bmQsIGpzVmFsdWVTb3VyY2UsIG5vZGVJbmRleCwganVtcHNUb0ZhaWwpOworICAgIEFTU0VSVCht
X2lzQ2hlY2tpbmdBcmd1bWVudFR5cGVzIHx8IG1fY3VycmVudE5vZGUtPmNhbkV4aXQoKSk7Cisg
ICAgc3BlY3VsYXRpb25DaGVjayhraW5kLCBqc1ZhbHVlU291cmNlLCBub2RlLCBqdW1wc1RvRmFp
bCk7CiAgICAgY29udmVydExhc3RPU1JFeGl0VG9Gb3J3YXJkKHZhbHVlUmVjb3ZlcnkpOwogfQog
Ci12b2lkIFNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGlvbkNoZWNrKEV4aXRLaW5kIGtpbmQsIEpT
VmFsdWVTb3VyY2UganNWYWx1ZVNvdXJjZSwgTm9kZUluZGV4IG5vZGVJbmRleCwgTWFjcm9Bc3Nl
bWJsZXI6Okp1bXAganVtcFRvRmFpbCwgU3BlY3VsYXRpb25EaXJlY3Rpb24gZGlyZWN0aW9uKQor
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRpb25DaGVjayhFeGl0S2luZCBraW5kLCBKU1Zh
bHVlU291cmNlIGpzVmFsdWVTb3VyY2UsIE5vZGUqIG5vZGUsIE1hY3JvQXNzZW1ibGVyOjpKdW1w
IGp1bXBUb0ZhaWwsIFNwZWN1bGF0aW9uRGlyZWN0aW9uIGRpcmVjdGlvbikKIHsKICAgICBpZiAo
ZGlyZWN0aW9uID09IEZvcndhcmRTcGVjdWxhdGlvbikKLSAgICAgICAgZm9yd2FyZFNwZWN1bGF0
aW9uQ2hlY2soa2luZCwganNWYWx1ZVNvdXJjZSwgbm9kZUluZGV4LCBqdW1wVG9GYWlsKTsKKyAg
ICAgICAgZm9yd2FyZFNwZWN1bGF0aW9uQ2hlY2soa2luZCwganNWYWx1ZVNvdXJjZSwgbm9kZSwg
anVtcFRvRmFpbCk7CiAgICAgZWxzZQotICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKGtpbmQsIGpz
VmFsdWVTb3VyY2UsIG5vZGVJbmRleCwganVtcFRvRmFpbCk7CisgICAgICAgIHNwZWN1bGF0aW9u
Q2hlY2soa2luZCwganNWYWx1ZVNvdXJjZSwgbm9kZSwganVtcFRvRmFpbCk7CiB9CiAKLXZvaWQg
U3BlY3VsYXRpdmVKSVQ6OnRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKEV4aXRLaW5kIGtp
bmQsIEpTVmFsdWVSZWdzIGpzVmFsdWVSZWdzLCBOb2RlSW5kZXggbm9kZUluZGV4KQordm9pZCBT
cGVjdWxhdGl2ZUpJVDo6dGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oRXhpdEtpbmQga2lu
ZCwgSlNWYWx1ZVJlZ3MganNWYWx1ZVJlZ3MsIE5vZGUqIG5vZGUpCiB7Ci0gICAgQVNTRVJUKGF0
KG1fY29tcGlsZUluZGV4KS5jYW5FeGl0KCkgfHwgbV9pc0NoZWNraW5nQXJndW1lbnRUeXBlcyk7
CisgICAgQVNTRVJUKG1faXNDaGVja2luZ0FyZ3VtZW50VHlwZXMgfHwgbV9jdXJyZW50Tm9kZS0+
Y2FuRXhpdCgpKTsKICNpZiBERkdfRU5BQkxFKERFQlVHX1ZFUkJPU0UpCiAgICAgZGF0YUxvZ0Yo
IlNwZWN1bGF0aXZlSklUIHdhcyB0ZXJtaW5hdGVkLlxuIik7CiAjZW5kaWYKICAgICBpZiAoIW1f
Y29tcGlsZU9rYXkpCiAgICAgICAgIHJldHVybjsKLSAgICBzcGVjdWxhdGlvbkNoZWNrKGtpbmQs
IGpzVmFsdWVSZWdzLCBub2RlSW5kZXgsIG1faml0Lmp1bXAoKSk7CisgICAgc3BlY3VsYXRpb25D
aGVjayhraW5kLCBqc1ZhbHVlUmVncywgbm9kZSwgbV9qaXQuanVtcCgpKTsKICAgICBtX2NvbXBp
bGVPa2F5ID0gZmFsc2U7CiB9CiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OnRlcm1pbmF0ZVNwZWN1
bGF0aXZlRXhlY3V0aW9uKEV4aXRLaW5kIGtpbmQsIEpTVmFsdWVSZWdzIGpzVmFsdWVSZWdzLCBF
ZGdlIG5vZGVVc2UpCiB7Ci0gICAgQVNTRVJUKGF0KG1fY29tcGlsZUluZGV4KS5jYW5FeGl0KCkg
fHwgbV9pc0NoZWNraW5nQXJndW1lbnRUeXBlcyk7Ci0gICAgdGVybWluYXRlU3BlY3VsYXRpdmVF
eGVjdXRpb24oa2luZCwganNWYWx1ZVJlZ3MsIG5vZGVVc2UuaW5kZXgoKSk7CisgICAgQVNTRVJU
KG1faXNDaGVja2luZ0FyZ3VtZW50VHlwZXMgfHwgbV9jdXJyZW50Tm9kZS0+Y2FuRXhpdCgpKTsK
KyAgICB0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihraW5kLCBqc1ZhbHVlUmVncywgbm9k
ZVVzZS5ub2RlKCkpOwogfQogCi12b2lkIFNwZWN1bGF0aXZlSklUOjp0ZXJtaW5hdGVTcGVjdWxh
dGl2ZUV4ZWN1dGlvbihFeGl0S2luZCBraW5kLCBKU1ZhbHVlUmVncyBqc1ZhbHVlUmVncywgTm9k
ZUluZGV4IG5vZGVJbmRleCwgU3BlY3VsYXRpb25EaXJlY3Rpb24gZGlyZWN0aW9uKQordm9pZCBT
cGVjdWxhdGl2ZUpJVDo6dGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oRXhpdEtpbmQga2lu
ZCwgSlNWYWx1ZVJlZ3MganNWYWx1ZVJlZ3MsIE5vZGUqIG5vZGUsIFNwZWN1bGF0aW9uRGlyZWN0
aW9uIGRpcmVjdGlvbikKIHsKLSAgICBBU1NFUlQoYXQobV9jb21waWxlSW5kZXgpLmNhbkV4aXQo
KSB8fCBtX2lzQ2hlY2tpbmdBcmd1bWVudFR5cGVzKTsKKyAgICBBU1NFUlQobV9pc0NoZWNraW5n
QXJndW1lbnRUeXBlcyB8fCBtX2N1cnJlbnROb2RlLT5jYW5FeGl0KCkpOwogI2lmIERGR19FTkFC
TEUoREVCVUdfVkVSQk9TRSkKICAgICBkYXRhTG9nRigiU3BlY3VsYXRpdmVKSVQgd2FzIHRlcm1p
bmF0ZWQuXG4iKTsKICNlbmRpZgogICAgIGlmICghbV9jb21waWxlT2theSkKICAgICAgICAgcmV0
dXJuOwotICAgIHNwZWN1bGF0aW9uQ2hlY2soa2luZCwganNWYWx1ZVJlZ3MsIG5vZGVJbmRleCwg
bV9qaXQuanVtcCgpLCBkaXJlY3Rpb24pOworICAgIHNwZWN1bGF0aW9uQ2hlY2soa2luZCwganNW
YWx1ZVJlZ3MsIG5vZGUsIG1faml0Lmp1bXAoKSwgZGlyZWN0aW9uKTsKICAgICBtX2NvbXBpbGVP
a2F5ID0gZmFsc2U7CiB9CiAKQEAgLTM2Niw4ICszNjYsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
OjpjbGVhckdlbmVyYXRpb25JbmZvCiBTaWxlbnRSZWdpc3RlclNhdmVQbGFuIFNwZWN1bGF0aXZl
SklUOjpzaWxlbnRTYXZlUGxhbkZvckdQUihWaXJ0dWFsUmVnaXN0ZXIgc3BpbGxNZSwgR1BSUmVn
IHNvdXJjZSkKIHsKICAgICBHZW5lcmF0aW9uSW5mbyYgaW5mbyA9IG1fZ2VuZXJhdGlvbkluZm9b
c3BpbGxNZV07Ci0gICAgTm9kZUluZGV4IG5vZGVJbmRleCA9IGluZm8ubm9kZUluZGV4KCk7Ci0g
ICAgTm9kZSYgbm9kZSA9IGF0KG5vZGVJbmRleCk7CisgICAgTm9kZSogbm9kZSA9IGluZm8ubm9k
ZSgpOwogICAgIERhdGFGb3JtYXQgcmVnaXN0ZXJGb3JtYXQgPSBpbmZvLnJlZ2lzdGVyRm9ybWF0
KCk7CiAgICAgQVNTRVJUKHJlZ2lzdGVyRm9ybWF0ICE9IERhdGFGb3JtYXROb25lKTsKICAgICBB
U1NFUlQocmVnaXN0ZXJGb3JtYXQgIT0gRGF0YUZvcm1hdERvdWJsZSk7CkBAIC00MDIsOCArNDAx
LDggQEAgU2lsZW50UmVnaXN0ZXJTYXZlUGxhbiBTcGVjdWxhdGl2ZUpJVDo6cwogICAgIGlmIChy
ZWdpc3RlckZvcm1hdCA9PSBEYXRhRm9ybWF0SW50ZWdlcikgewogICAgICAgICBBU1NFUlQoaW5m
by5ncHIoKSA9PSBzb3VyY2UpOwogICAgICAgICBBU1NFUlQoaXNKU0ludGVnZXIoaW5mby5yZWdp
c3RlckZvcm1hdCgpKSk7Ci0gICAgICAgIGlmIChub2RlLmhhc0NvbnN0YW50KCkpIHsKLSAgICAg
ICAgICAgIEFTU0VSVChpc0ludDMyQ29uc3RhbnQobm9kZUluZGV4KSk7CisgICAgICAgIGlmIChu
b2RlLT5oYXNDb25zdGFudCgpKSB7CisgICAgICAgICAgICBBU1NFUlQoaXNJbnQzMkNvbnN0YW50
KG5vZGUpKTsKICAgICAgICAgICAgIGZpbGxBY3Rpb24gPSBTZXRJbnQzMkNvbnN0YW50OwogICAg
ICAgICB9IGVsc2UKICAgICAgICAgICAgIGZpbGxBY3Rpb24gPSBMb2FkMzJQYXlsb2FkOwpAQCAt
NDEzLDE2ICs0MTIsMTYgQEAgU2lsZW50UmVnaXN0ZXJTYXZlUGxhbiBTcGVjdWxhdGl2ZUpJVDo6
cwogICAgICAgICBmaWxsQWN0aW9uID0gRG9Ob3RoaW5nRm9yRmlsbDsKICNlbGlmIFVTRShKU1ZB
TFVFMzJfNjQpCiAgICAgICAgIEFTU0VSVChpbmZvLmdwcigpID09IHNvdXJjZSk7Ci0gICAgICAg
IGlmIChub2RlLmhhc0NvbnN0YW50KCkpIHsKLSAgICAgICAgICAgIEFTU0VSVChpc0Jvb2xlYW5D
b25zdGFudChub2RlSW5kZXgpKTsKKyAgICAgICAgaWYgKG5vZGUtPmhhc0NvbnN0YW50KCkpIHsK
KyAgICAgICAgICAgIEFTU0VSVChpc0Jvb2xlYW5Db25zdGFudChub2RlKSk7CiAgICAgICAgICAg
ICBmaWxsQWN0aW9uID0gU2V0Qm9vbGVhbkNvbnN0YW50OwogICAgICAgICB9IGVsc2UKICAgICAg
ICAgICAgIGZpbGxBY3Rpb24gPSBMb2FkMzJQYXlsb2FkOwogI2VuZGlmCiAgICAgfSBlbHNlIGlm
IChyZWdpc3RlckZvcm1hdCA9PSBEYXRhRm9ybWF0Q2VsbCkgewogICAgICAgICBBU1NFUlQoaW5m
by5ncHIoKSA9PSBzb3VyY2UpOwotICAgICAgICBpZiAobm9kZS5oYXNDb25zdGFudCgpKSB7Ci0g
ICAgICAgICAgICBKU1ZhbHVlIHZhbHVlID0gdmFsdWVPZkpTQ29uc3RhbnQobm9kZUluZGV4KTsK
KyAgICAgICAgaWYgKG5vZGUtPmhhc0NvbnN0YW50KCkpIHsKKyAgICAgICAgICAgIEpTVmFsdWUg
dmFsdWUgPSB2YWx1ZU9mSlNDb25zdGFudChub2RlKTsKICAgICAgICAgICAgIEFTU0VSVF9VTlVT
RUQodmFsdWUsIHZhbHVlLmlzQ2VsbCgpKTsKICAgICAgICAgICAgIGZpbGxBY3Rpb24gPSBTZXRD
ZWxsQ29uc3RhbnQ7CiAgICAgICAgIH0gZWxzZSB7CkBAIC00MzksOCArNDM4LDggQEAgU2lsZW50
UmVnaXN0ZXJTYXZlUGxhbiBTcGVjdWxhdGl2ZUpJVDo6cwogICAgICAgICBBU1NFUlQocmVnaXN0
ZXJGb3JtYXQgJiBEYXRhRm9ybWF0SlMpOwogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgICAgIEFT
U0VSVChpbmZvLmdwcigpID09IHNvdXJjZSk7Ci0gICAgICAgIGlmIChub2RlLmhhc0NvbnN0YW50
KCkpIHsKLSAgICAgICAgICAgIGlmICh2YWx1ZU9mSlNDb25zdGFudChub2RlSW5kZXgpLmlzQ2Vs
bCgpKQorICAgICAgICBpZiAobm9kZS0+aGFzQ29uc3RhbnQoKSkgeworICAgICAgICAgICAgaWYg
KHZhbHVlT2ZKU0NvbnN0YW50KG5vZGUpLmlzQ2VsbCgpKQogICAgICAgICAgICAgICAgIGZpbGxB
Y3Rpb24gPSBTZXRUcnVzdGVkSlNDb25zdGFudDsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAg
ICAgICAgICBmaWxsQWN0aW9uID0gU2V0SlNDb25zdGFudDsKQEAgLTQ1NCw3ICs0NTMsNyBAQCBT
aWxlbnRSZWdpc3RlclNhdmVQbGFuIFNwZWN1bGF0aXZlSklUOjpzCiAgICAgICAgICAgICBmaWxs
QWN0aW9uID0gTG9hZDY0OwogI2Vsc2UKICAgICAgICAgQVNTRVJUKGluZm8udGFnR1BSKCkgPT0g
c291cmNlIHx8IGluZm8ucGF5bG9hZEdQUigpID09IHNvdXJjZSk7Ci0gICAgICAgIGlmIChub2Rl
Lmhhc0NvbnN0YW50KCkpCisgICAgICAgIGlmIChub2RlLT5oYXNDb25zdGFudCgpKQogICAgICAg
ICAgICAgZmlsbEFjdGlvbiA9IGluZm8udGFnR1BSKCkgPT0gc291cmNlID8gU2V0SlNDb25zdGFu
dFRhZyA6IFNldEpTQ29uc3RhbnRQYXlsb2FkOwogICAgICAgICBlbHNlIGlmIChpbmZvLnBheWxv
YWRHUFIoKSA9PSBzb3VyY2UpCiAgICAgICAgICAgICBmaWxsQWN0aW9uID0gTG9hZDMyUGF5bG9h
ZDsKQEAgLTQ4MCwxNCArNDc5LDEzIEBAIFNpbGVudFJlZ2lzdGVyU2F2ZVBsYW4gU3BlY3VsYXRp
dmVKSVQ6OnMKICNlbmRpZgogICAgIH0KICAgICAgICAgCi0gICAgcmV0dXJuIFNpbGVudFJlZ2lz
dGVyU2F2ZVBsYW4oc3BpbGxBY3Rpb24sIGZpbGxBY3Rpb24sIG5vZGVJbmRleCwgc291cmNlKTsK
KyAgICByZXR1cm4gU2lsZW50UmVnaXN0ZXJTYXZlUGxhbihzcGlsbEFjdGlvbiwgZmlsbEFjdGlv
biwgbm9kZSwgc291cmNlKTsKIH0KICAgICAKIFNpbGVudFJlZ2lzdGVyU2F2ZVBsYW4gU3BlY3Vs
YXRpdmVKSVQ6OnNpbGVudFNhdmVQbGFuRm9yRlBSKFZpcnR1YWxSZWdpc3RlciBzcGlsbE1lLCBG
UFJSZWcgc291cmNlKQogewogICAgIEdlbmVyYXRpb25JbmZvJiBpbmZvID0gbV9nZW5lcmF0aW9u
SW5mb1tzcGlsbE1lXTsKLSAgICBOb2RlSW5kZXggbm9kZUluZGV4ID0gaW5mby5ub2RlSW5kZXgo
KTsKLSAgICBOb2RlJiBub2RlID0gYXQobm9kZUluZGV4KTsKKyAgICBOb2RlKiBub2RlID0gaW5m
by5ub2RlKCk7CiAgICAgQVNTRVJUKGluZm8ucmVnaXN0ZXJGb3JtYXQoKSA9PSBEYXRhRm9ybWF0
RG91YmxlKTsKIAogICAgIFNpbGVudFNwaWxsQWN0aW9uIHNwaWxsQWN0aW9uOwpAQCAtNDk2LDE1
ICs0OTQsMTUgQEAgU2lsZW50UmVnaXN0ZXJTYXZlUGxhbiBTcGVjdWxhdGl2ZUpJVDo6cwogICAg
IGlmICghaW5mby5uZWVkc1NwaWxsKCkpCiAgICAgICAgIHNwaWxsQWN0aW9uID0gRG9Ob3RoaW5n
Rm9yU3BpbGw7CiAgICAgZWxzZSB7Ci0gICAgICAgIEFTU0VSVCghYXQoaW5mby5ub2RlSW5kZXgo
KSkuaGFzQ29uc3RhbnQoKSk7CisgICAgICAgIEFTU0VSVCghbm9kZS0+aGFzQ29uc3RhbnQoKSk7
CiAgICAgICAgIEFTU0VSVChpbmZvLnNwaWxsRm9ybWF0KCkgPT0gRGF0YUZvcm1hdE5vbmUpOwog
ICAgICAgICBBU1NFUlQoaW5mby5mcHIoKSA9PSBzb3VyY2UpOwogICAgICAgICBzcGlsbEFjdGlv
biA9IFN0b3JlRG91YmxlOwogICAgIH0KICAgICAgICAgCiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAg
ICBpZiAobm9kZS5oYXNDb25zdGFudCgpKSB7Ci0gICAgICAgIEFTU0VSVChpc051bWJlckNvbnN0
YW50KG5vZGVJbmRleCkpOworICAgIGlmIChub2RlLT5oYXNDb25zdGFudCgpKSB7CisgICAgICAg
IEFTU0VSVChpc051bWJlckNvbnN0YW50KG5vZGUpKTsKICAgICAgICAgZmlsbEFjdGlvbiA9IFNl
dERvdWJsZUNvbnN0YW50OwogICAgIH0gZWxzZSBpZiAoaW5mby5zcGlsbEZvcm1hdCgpICE9IERh
dGFGb3JtYXROb25lICYmIGluZm8uc3BpbGxGb3JtYXQoKSAhPSBEYXRhRm9ybWF0RG91YmxlKSB7
CiAgICAgICAgIC8vIGl0IHdhcyBhbHJlYWR5IHNwaWxsZWQgcHJldmlvdXNseSBhbmQgbm90IGFz
IGEgZG91YmxlLCB3aGljaCBtZWFucyB3ZSBuZWVkIHVuYm94aW5nLgpAQCAtNTE0LDE0ICs1MTIs
MTQgQEAgU2lsZW50UmVnaXN0ZXJTYXZlUGxhbiBTcGVjdWxhdGl2ZUpJVDo6cwogICAgICAgICBm
aWxsQWN0aW9uID0gTG9hZERvdWJsZTsKICNlbGlmIFVTRShKU1ZBTFVFMzJfNjQpCiAgICAgQVNT
RVJUKGluZm8ucmVnaXN0ZXJGb3JtYXQoKSA9PSBEYXRhRm9ybWF0RG91YmxlIHx8IGluZm8ucmVn
aXN0ZXJGb3JtYXQoKSA9PSBEYXRhRm9ybWF0SlNEb3VibGUpOwotICAgIGlmIChub2RlLmhhc0Nv
bnN0YW50KCkpIHsKLSAgICAgICAgQVNTRVJUKGlzTnVtYmVyQ29uc3RhbnQobm9kZUluZGV4KSk7
CisgICAgaWYgKG5vZGUtPmhhc0NvbnN0YW50KCkpIHsKKyAgICAgICAgQVNTRVJUKGlzTnVtYmVy
Q29uc3RhbnQobm9kZSkpOwogICAgICAgICBmaWxsQWN0aW9uID0gU2V0RG91YmxlQ29uc3RhbnQ7
CiAgICAgfSBlbHNlCiAgICAgICAgIGZpbGxBY3Rpb24gPSBMb2FkRG91YmxlOwogI2VuZGlmCiAK
LSAgICByZXR1cm4gU2lsZW50UmVnaXN0ZXJTYXZlUGxhbihzcGlsbEFjdGlvbiwgZmlsbEFjdGlv
biwgbm9kZUluZGV4LCBzb3VyY2UpOworICAgIHJldHVybiBTaWxlbnRSZWdpc3RlclNhdmVQbGFu
KHNwaWxsQWN0aW9uLCBmaWxsQWN0aW9uLCBub2RlLCBzb3VyY2UpOwogfQogICAgIAogdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6c2lsZW50U3BpbGwoY29uc3QgU2lsZW50UmVnaXN0ZXJTYXZlUGxhbiYg
cGxhbikKQEAgLTUzMCwyMSArNTI4LDIxIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OnNpbGVudFNw
aWxsKGNvbnN0IFMKICAgICBjYXNlIERvTm90aGluZ0ZvclNwaWxsOgogICAgICAgICBicmVhazsK
ICAgICBjYXNlIFN0b3JlMzJUYWc6Ci0gICAgICAgIG1faml0LnN0b3JlMzIocGxhbi5ncHIoKSwg
SklUQ29tcGlsZXI6OnRhZ0ZvcihhdChwbGFuLm5vZGVJbmRleCgpKS52aXJ0dWFsUmVnaXN0ZXIo
KSkpOworICAgICAgICBtX2ppdC5zdG9yZTMyKHBsYW4uZ3ByKCksIEpJVENvbXBpbGVyOjp0YWdG
b3IocGxhbi5ub2RlKCktPnZpcnR1YWxSZWdpc3RlcigpKSk7CiAgICAgICAgIGJyZWFrOwogICAg
IGNhc2UgU3RvcmUzMlBheWxvYWQ6Ci0gICAgICAgIG1faml0LnN0b3JlMzIocGxhbi5ncHIoKSwg
SklUQ29tcGlsZXI6OnBheWxvYWRGb3IoYXQocGxhbi5ub2RlSW5kZXgoKSkudmlydHVhbFJlZ2lz
dGVyKCkpKTsKKyAgICAgICAgbV9qaXQuc3RvcmUzMihwbGFuLmdwcigpLCBKSVRDb21waWxlcjo6
cGF5bG9hZEZvcihwbGFuLm5vZGUoKS0+dmlydHVhbFJlZ2lzdGVyKCkpKTsKICAgICAgICAgYnJl
YWs7CiAgICAgY2FzZSBTdG9yZVB0cjoKLSAgICAgICAgbV9qaXQuc3RvcmVQdHIocGxhbi5ncHIo
KSwgSklUQ29tcGlsZXI6OmFkZHJlc3NGb3IoYXQocGxhbi5ub2RlSW5kZXgoKSkudmlydHVhbFJl
Z2lzdGVyKCkpKTsKKyAgICAgICAgbV9qaXQuc3RvcmVQdHIocGxhbi5ncHIoKSwgSklUQ29tcGls
ZXI6OmFkZHJlc3NGb3IocGxhbi5ub2RlKCktPnZpcnR1YWxSZWdpc3RlcigpKSk7CiAgICAgICAg
IGJyZWFrOwogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgY2FzZSBTdG9yZTY0OgotICAgICAgICBt
X2ppdC5zdG9yZTY0KHBsYW4uZ3ByKCksIEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKGF0KHBsYW4u
bm9kZUluZGV4KCkpLnZpcnR1YWxSZWdpc3RlcigpKSk7CisgICAgICAgIG1faml0LnN0b3JlNjQo
cGxhbi5ncHIoKSwgSklUQ29tcGlsZXI6OmFkZHJlc3NGb3IocGxhbi5ub2RlKCktPnZpcnR1YWxS
ZWdpc3RlcigpKSk7CiAgICAgICAgIGJyZWFrOwogI2VuZGlmCiAgICAgY2FzZSBTdG9yZURvdWJs
ZToKLSAgICAgICAgbV9qaXQuc3RvcmVEb3VibGUocGxhbi5mcHIoKSwgSklUQ29tcGlsZXI6OmFk
ZHJlc3NGb3IoYXQocGxhbi5ub2RlSW5kZXgoKSkudmlydHVhbFJlZ2lzdGVyKCkpKTsKKyAgICAg
ICAgbV9qaXQuc3RvcmVEb3VibGUocGxhbi5mcHIoKSwgSklUQ29tcGlsZXI6OmFkZHJlc3NGb3Io
cGxhbi5ub2RlKCktPnZpcnR1YWxSZWdpc3RlcigpKSk7CiAgICAgICAgIGJyZWFrOwogICAgIGRl
ZmF1bHQ6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC01NjAsNDMg
KzU1OCw0MyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpzaWxlbnRGaWxsKGNvbnN0IFNpCiAgICAg
Y2FzZSBEb05vdGhpbmdGb3JGaWxsOgogICAgICAgICBicmVhazsKICAgICBjYXNlIFNldEludDMy
Q29uc3RhbnQ6Ci0gICAgICAgIG1faml0Lm1vdmUoSW1tMzIodmFsdWVPZkludDMyQ29uc3RhbnQo
cGxhbi5ub2RlSW5kZXgoKSkpLCBwbGFuLmdwcigpKTsKKyAgICAgICAgbV9qaXQubW92ZShJbW0z
Mih2YWx1ZU9mSW50MzJDb25zdGFudChwbGFuLm5vZGUoKSkpLCBwbGFuLmdwcigpKTsKICAgICAg
ICAgYnJlYWs7CiAgICAgY2FzZSBTZXRCb29sZWFuQ29uc3RhbnQ6Ci0gICAgICAgIG1faml0Lm1v
dmUoVHJ1c3RlZEltbTMyKHZhbHVlT2ZCb29sZWFuQ29uc3RhbnQocGxhbi5ub2RlSW5kZXgoKSkp
LCBwbGFuLmdwcigpKTsKKyAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tMzIodmFsdWVPZkJv
b2xlYW5Db25zdGFudChwbGFuLm5vZGUoKSkpLCBwbGFuLmdwcigpKTsKICAgICAgICAgYnJlYWs7
CiAgICAgY2FzZSBTZXRDZWxsQ29uc3RhbnQ6Ci0gICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZElt
bVB0cih2YWx1ZU9mSlNDb25zdGFudChwbGFuLm5vZGVJbmRleCgpKS5hc0NlbGwoKSksIHBsYW4u
Z3ByKCkpOworICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIodmFsdWVPZkpTQ29uc3Rh
bnQocGxhbi5ub2RlKCkpLmFzQ2VsbCgpKSwgcGxhbi5ncHIoKSk7CiAgICAgICAgIGJyZWFrOwog
I2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgY2FzZSBTZXRUcnVzdGVkSlNDb25zdGFudDoKLSAgICAg
ICAgbV9qaXQubW92ZSh2YWx1ZU9mSlNDb25zdGFudEFzSW1tNjQocGxhbi5ub2RlSW5kZXgoKSku
YXNUcnVzdGVkSW1tNjQoKSwgcGxhbi5ncHIoKSk7CisgICAgICAgIG1faml0Lm1vdmUodmFsdWVP
ZkpTQ29uc3RhbnRBc0ltbTY0KHBsYW4ubm9kZSgpKS5hc1RydXN0ZWRJbW02NCgpLCBwbGFuLmdw
cigpKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBTZXRKU0NvbnN0YW50OgotICAgICAgICBt
X2ppdC5tb3ZlKHZhbHVlT2ZKU0NvbnN0YW50QXNJbW02NChwbGFuLm5vZGVJbmRleCgpKSwgcGxh
bi5ncHIoKSk7CisgICAgICAgIG1faml0Lm1vdmUodmFsdWVPZkpTQ29uc3RhbnRBc0ltbTY0KHBs
YW4ubm9kZSgpKSwgcGxhbi5ncHIoKSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgU2V0RG91
YmxlQ29uc3RhbnQ6Ci0gICAgICAgIG1faml0Lm1vdmUoSW1tNjQocmVpbnRlcnByZXREb3VibGVU
b0ludDY0KHZhbHVlT2ZOdW1iZXJDb25zdGFudChwbGFuLm5vZGVJbmRleCgpKSkpLCBjYW5UcmFt
cGxlKTsKKyAgICAgICAgbV9qaXQubW92ZShJbW02NChyZWludGVycHJldERvdWJsZVRvSW50NjQo
dmFsdWVPZk51bWJlckNvbnN0YW50KHBsYW4ubm9kZSgpKSkpLCBjYW5UcmFtcGxlKTsKICAgICAg
ICAgbV9qaXQubW92ZTY0VG9Eb3VibGUoY2FuVHJhbXBsZSwgcGxhbi5mcHIoKSk7CiAgICAgICAg
IGJyZWFrOwogICAgIGNhc2UgTG9hZDMyUGF5bG9hZEJveEludDoKLSAgICAgICAgbV9qaXQubG9h
ZDMyKEpJVENvbXBpbGVyOjpwYXlsb2FkRm9yKGF0KHBsYW4ubm9kZUluZGV4KCkpLnZpcnR1YWxS
ZWdpc3RlcigpKSwgcGxhbi5ncHIoKSk7CisgICAgICAgIG1faml0LmxvYWQzMihKSVRDb21waWxl
cjo6cGF5bG9hZEZvcihwbGFuLm5vZGUoKS0+dmlydHVhbFJlZ2lzdGVyKCkpLCBwbGFuLmdwcigp
KTsKICAgICAgICAgbV9qaXQub3I2NChHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIHBs
YW4uZ3ByKCkpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIExvYWREb3VibGVCb3hEb3VibGU6
Ci0gICAgICAgIG1faml0LmxvYWQ2NChKSVRDb21waWxlcjo6YWRkcmVzc0ZvcihhdChwbGFuLm5v
ZGVJbmRleCgpKS52aXJ0dWFsUmVnaXN0ZXIoKSksIHBsYW4uZ3ByKCkpOworICAgICAgICBtX2pp
dC5sb2FkNjQoSklUQ29tcGlsZXI6OmFkZHJlc3NGb3IocGxhbi5ub2RlKCktPnZpcnR1YWxSZWdp
c3RlcigpKSwgcGxhbi5ncHIoKSk7CiAgICAgICAgIG1faml0LnN1YjY0KEdQUkluZm86OnRhZ1R5
cGVOdW1iZXJSZWdpc3RlciwgcGxhbi5ncHIoKSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2Ug
TG9hZEpTVW5ib3hEb3VibGU6Ci0gICAgICAgIG1faml0LmxvYWQ2NChKSVRDb21waWxlcjo6YWRk
cmVzc0ZvcihhdChwbGFuLm5vZGVJbmRleCgpKS52aXJ0dWFsUmVnaXN0ZXIoKSksIGNhblRyYW1w
bGUpOworICAgICAgICBtX2ppdC5sb2FkNjQoSklUQ29tcGlsZXI6OmFkZHJlc3NGb3IocGxhbi5u
b2RlKCktPnZpcnR1YWxSZWdpc3RlcigpKSwgY2FuVHJhbXBsZSk7CiAgICAgICAgIHVuYm94RG91
YmxlKGNhblRyYW1wbGUsIHBsYW4uZnByKCkpOwogICAgICAgICBicmVhazsKICNlbHNlCiAgICAg
Y2FzZSBTZXRKU0NvbnN0YW50VGFnOgotICAgICAgICBtX2ppdC5tb3ZlKEltbTMyKHZhbHVlT2ZK
U0NvbnN0YW50KHBsYW4ubm9kZUluZGV4KCkpLnRhZygpKSwgcGxhbi5ncHIoKSk7CisgICAgICAg
IG1faml0Lm1vdmUoSW1tMzIodmFsdWVPZkpTQ29uc3RhbnQocGxhbi5ub2RlKCkpLnRhZygpKSwg
cGxhbi5ncHIoKSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgU2V0SlNDb25zdGFudFBheWxv
YWQ6Ci0gICAgICAgIG1faml0Lm1vdmUoSW1tMzIodmFsdWVPZkpTQ29uc3RhbnQocGxhbi5ub2Rl
SW5kZXgoKSkucGF5bG9hZCgpKSwgcGxhbi5ncHIoKSk7CisgICAgICAgIG1faml0Lm1vdmUoSW1t
MzIodmFsdWVPZkpTQ29uc3RhbnQocGxhbi5ub2RlKCkpLnBheWxvYWQoKSksIHBsYW4uZ3ByKCkp
OwogICAgICAgICBicmVhazsKICAgICBjYXNlIFNldEludDMyVGFnOgogICAgICAgICBtX2ppdC5t
b3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZyksIHBsYW4uZ3ByKCkpOwpAQCAtNjA4
LDI1ICs2MDYsMjUgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6c2lsZW50RmlsbChjb25zdCBTaQog
ICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpCb29sZWFuVGFnKSwgcGxh
bi5ncHIoKSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgU2V0RG91YmxlQ29uc3RhbnQ6Ci0g
ICAgICAgIG1faml0LmxvYWREb3VibGUoYWRkcmVzc09mRG91YmxlQ29uc3RhbnQocGxhbi5ub2Rl
SW5kZXgoKSksIHBsYW4uZnByKCkpOworICAgICAgICBtX2ppdC5sb2FkRG91YmxlKGFkZHJlc3NP
ZkRvdWJsZUNvbnN0YW50KHBsYW4ubm9kZSgpKSwgcGxhbi5mcHIoKSk7CiAgICAgICAgIGJyZWFr
OwogI2VuZGlmCiAgICAgY2FzZSBMb2FkMzJUYWc6Ci0gICAgICAgIG1faml0LmxvYWQzMihKSVRD
b21waWxlcjo6dGFnRm9yKGF0KHBsYW4ubm9kZUluZGV4KCkpLnZpcnR1YWxSZWdpc3RlcigpKSwg
cGxhbi5ncHIoKSk7CisgICAgICAgIG1faml0LmxvYWQzMihKSVRDb21waWxlcjo6dGFnRm9yKHBs
YW4ubm9kZSgpLT52aXJ0dWFsUmVnaXN0ZXIoKSksIHBsYW4uZ3ByKCkpOwogICAgICAgICBicmVh
azsKICAgICBjYXNlIExvYWQzMlBheWxvYWQ6Ci0gICAgICAgIG1faml0LmxvYWQzMihKSVRDb21w
aWxlcjo6cGF5bG9hZEZvcihhdChwbGFuLm5vZGVJbmRleCgpKS52aXJ0dWFsUmVnaXN0ZXIoKSks
IHBsYW4uZ3ByKCkpOworICAgICAgICBtX2ppdC5sb2FkMzIoSklUQ29tcGlsZXI6OnBheWxvYWRG
b3IocGxhbi5ub2RlKCktPnZpcnR1YWxSZWdpc3RlcigpKSwgcGxhbi5ncHIoKSk7CiAgICAgICAg
IGJyZWFrOwogICAgIGNhc2UgTG9hZFB0cjoKLSAgICAgICAgbV9qaXQubG9hZFB0cihKSVRDb21w
aWxlcjo6YWRkcmVzc0ZvcihhdChwbGFuLm5vZGVJbmRleCgpKS52aXJ0dWFsUmVnaXN0ZXIoKSks
IHBsYW4uZ3ByKCkpOworICAgICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjphZGRyZXNz
Rm9yKHBsYW4ubm9kZSgpLT52aXJ0dWFsUmVnaXN0ZXIoKSksIHBsYW4uZ3ByKCkpOwogICAgICAg
ICBicmVhazsKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIGNhc2UgTG9hZDY0OgotICAgICAgICBt
X2ppdC5sb2FkNjQoSklUQ29tcGlsZXI6OmFkZHJlc3NGb3IoYXQocGxhbi5ub2RlSW5kZXgoKSku
dmlydHVhbFJlZ2lzdGVyKCkpLCBwbGFuLmdwcigpKTsKKyAgICAgICAgbV9qaXQubG9hZDY0KEpJ
VENvbXBpbGVyOjphZGRyZXNzRm9yKHBsYW4ubm9kZSgpLT52aXJ0dWFsUmVnaXN0ZXIoKSksIHBs
YW4uZ3ByKCkpOwogICAgICAgICBicmVhazsKICNlbmRpZgogICAgIGNhc2UgTG9hZERvdWJsZToK
LSAgICAgICAgbV9qaXQubG9hZERvdWJsZShKSVRDb21waWxlcjo6YWRkcmVzc0ZvcihhdChwbGFu
Lm5vZGVJbmRleCgpKS52aXJ0dWFsUmVnaXN0ZXIoKSksIHBsYW4uZnByKCkpOworICAgICAgICBt
X2ppdC5sb2FkRG91YmxlKEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKHBsYW4ubm9kZSgpLT52aXJ0
dWFsUmVnaXN0ZXIoKSksIHBsYW4uZnByKCkpOwogICAgICAgICBicmVhazsKICAgICBkZWZhdWx0
OgogICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtNzQ5LDI0ICs3NDcs
MjQgQEAgSklUQ29tcGlsZXI6Okp1bXBMaXN0IFNwZWN1bGF0aXZlSklUOjpqdQogICAgIHJldHVy
biByZXN1bHQ7CiB9CiAKLXZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNoZWNrQXJyYXkoTm9kZSYgbm9k
ZSkKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNoZWNrQXJyYXkoTm9kZSogbm9kZSkKIHsKLSAgICBB
U1NFUlQobm9kZS5hcnJheU1vZGUoKS5pc1NwZWNpZmljKCkpOwotICAgIEFTU0VSVCghbm9kZS5h
cnJheU1vZGUoKS5kb2VzQ29udmVyc2lvbigpKTsKKyAgICBBU1NFUlQobm9kZS0+YXJyYXlNb2Rl
KCkuaXNTcGVjaWZpYygpKTsKKyAgICBBU1NFUlQoIW5vZGUtPmFycmF5TW9kZSgpLmRvZXNDb252
ZXJzaW9uKCkpOwogICAgIAotICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9k
ZS5jaGlsZDEoKSk7CisgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLT5j
aGlsZDEoKSk7CiAgICAgR1BSUmVnIGJhc2VSZWcgPSBiYXNlLmdwcigpOwogICAgIAotICAgIGNv
bnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yKiByZXN1bHQgPSB0eXBlZEFycmF5RGVzY3JpcHRvcihu
b2RlLmFycmF5TW9kZSgpKTsKKyAgICBjb25zdCBUeXBlZEFycmF5RGVzY3JpcHRvciogcmVzdWx0
ID0gdHlwZWRBcnJheURlc2NyaXB0b3Iobm9kZS0+YXJyYXlNb2RlKCkpOwogICAgIAotICAgIGlm
IChub2RlLmFycmF5TW9kZSgpLmFscmVhZHlDaGVja2VkKG1faml0LmdyYXBoKCksIG5vZGUsIG1f
c3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKSkpIHsKLSAgICAgICAgbm9SZXN1bHQobV9jb21w
aWxlSW5kZXgpOworICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS5hbHJlYWR5Q2hlY2tlZChtX2pp
dC5ncmFwaCgpLCBub2RlLCBtX3N0YXRlLmZvck5vZGUobm9kZS0+Y2hpbGQxKCkpKSkgeworICAg
ICAgICBub1Jlc3VsdChtX2N1cnJlbnROb2RlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAg
ICAKICAgICBjb25zdCBDbGFzc0luZm8qIGV4cGVjdGVkQ2xhc3NJbmZvID0gMDsKICAgICAKLSAg
ICBzd2l0Y2ggKG5vZGUuYXJyYXlNb2RlKCkudHlwZSgpKSB7CisgICAgc3dpdGNoIChub2RlLT5h
cnJheU1vZGUoKS50eXBlKCkpIHsKICAgICBjYXNlIEFycmF5OjpTdHJpbmc6CiAgICAgICAgIGV4
cGVjdGVkQ2xhc3NJbmZvID0gJkpTU3RyaW5nOjpzX2luZm87CiAgICAgICAgIGJyZWFrOwpAQCAt
NzgxLDEwICs3NzksMTAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y2hlY2tBcnJheShOb2RlJiBu
bwogICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgSlNDZWxsOjpz
dHJ1Y3R1cmVPZmZzZXQoKSksIHRlbXBHUFIpOwogICAgICAgICBtX2ppdC5sb2FkOChNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyh0ZW1wR1BSLCBTdHJ1Y3R1cmU6OmluZGV4aW5nVHlwZU9mZnNldCgp
KSwgdGVtcEdQUik7CiAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCi0gICAgICAgICAgICBCYWRJ
bmRleGluZ1R5cGUsIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKGJhc2VSZWcpLCBOb05vZGUs
Ci0gICAgICAgICAgICBqdW1wU2xvd0ZvclVud2FudGVkQXJyYXlNb2RlKHRlbXBHUFIsIG5vZGUu
YXJyYXlNb2RlKCkpKTsKKyAgICAgICAgICAgIEJhZEluZGV4aW5nVHlwZSwgSlNWYWx1ZVNvdXJj
ZTo6dW5ib3hlZENlbGwoYmFzZVJlZyksIDAsCisgICAgICAgICAgICBqdW1wU2xvd0ZvclVud2Fu
dGVkQXJyYXlNb2RlKHRlbXBHUFIsIG5vZGUtPmFycmF5TW9kZSgpKSk7CiAgICAgICAgIAotICAg
ICAgICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCk7CisgICAgICAgIG5vUmVzdWx0KG1fY3VycmVu
dE5vZGUpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGNhc2UgQXJyYXk6OkFyZ3VtZW50
czoKQEAgLTgxMCwyNSArODA4LDI1IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNoZWNrQXJyYXko
Tm9kZSYgbm8KICAgICBtX2ppdC5sb2FkUHRyKAogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhiYXNlUmVnLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgdGVtcC5ncHIoKSk7CiAg
ICAgc3BlY3VsYXRpb25DaGVjaygKLSAgICAgICAgVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCks
IE5vTm9kZSwKKyAgICAgICAgVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIDAsCiAgICAgICAg
IG1faml0LmJyYW5jaFB0cigKICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwK
ICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHRlbXAuZ3ByKCksIFN0cnVjdHVy
ZTo6Y2xhc3NJbmZvT2Zmc2V0KCkpLAogICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0
ZWRJbW1QdHIoZXhwZWN0ZWRDbGFzc0luZm8pKSk7CiAgICAgCi0gICAgbm9SZXN1bHQobV9jb21w
aWxlSW5kZXgpOworICAgIG5vUmVzdWx0KG1fY3VycmVudE5vZGUpOwogfQogCi12b2lkIFNwZWN1
bGF0aXZlSklUOjphcnJheWlmeShOb2RlJiBub2RlLCBHUFJSZWcgYmFzZVJlZywgR1BSUmVnIHBy
b3BlcnR5UmVnKQordm9pZCBTcGVjdWxhdGl2ZUpJVDo6YXJyYXlpZnkoTm9kZSogbm9kZSwgR1BS
UmVnIGJhc2VSZWcsIEdQUlJlZyBwcm9wZXJ0eVJlZykKIHsKLSAgICBBU1NFUlQobm9kZS5hcnJh
eU1vZGUoKS5kb2VzQ29udmVyc2lvbigpKTsKKyAgICBBU1NFUlQobm9kZS0+YXJyYXlNb2RlKCku
ZG9lc0NvbnZlcnNpb24oKSk7CiAgICAgCiAgICAgR1BSVGVtcG9yYXJ5IHRlbXAodGhpcyk7CiAg
ICAgR1BSVGVtcG9yYXJ5IHN0cnVjdHVyZTsKICAgICBHUFJSZWcgdGVtcEdQUiA9IHRlbXAuZ3By
KCk7CiAgICAgR1BSUmVnIHN0cnVjdHVyZUdQUiA9IEludmFsaWRHUFJSZWc7CiAgICAgCi0gICAg
aWYgKG5vZGUub3AoKSAhPSBBcnJheWlmeVRvU3RydWN0dXJlKSB7CisgICAgaWYgKG5vZGUtPm9w
KCkgIT0gQXJyYXlpZnlUb1N0cnVjdHVyZSkgewogICAgICAgICBHUFJUZW1wb3JhcnkgcmVhbFN0
cnVjdHVyZSh0aGlzKTsKICAgICAgICAgc3RydWN0dXJlLmFkb3B0KHJlYWxTdHJ1Y3R1cmUpOwog
ICAgICAgICBzdHJ1Y3R1cmVHUFIgPSBzdHJ1Y3R1cmUuZ3ByKCk7CkBAIC04MzcsMTEgKzgzNSwx
MSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjphcnJheWlmeShOb2RlJiBub2RlCiAgICAgLy8gV2Ug
Y2FuIHNraXAgYWxsIHRoYXQgY29tZXMgbmV4dCBpZiB3ZSBhbHJlYWR5IGhhdmUgYXJyYXkgc3Rv
cmFnZS4KICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgc2xvd1BhdGg7CiAgICAgCi0gICAg
aWYgKG5vZGUub3AoKSA9PSBBcnJheWlmeVRvU3RydWN0dXJlKSB7CisgICAgaWYgKG5vZGUtPm9w
KCkgPT0gQXJyYXlpZnlUb1N0cnVjdHVyZSkgewogICAgICAgICBzbG93UGF0aC5hcHBlbmQobV9q
aXQuYnJhbmNoV2Vha1B0cigKICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpOb3RFcXVhbCwKICAg
ICAgICAgICAgIEpJVENvbXBpbGVyOjpBZGRyZXNzKGJhc2VSZWcsIEpTQ2VsbDo6c3RydWN0dXJl
T2Zmc2V0KCkpLAotICAgICAgICAgICAgbm9kZS5zdHJ1Y3R1cmUoKSkpOworICAgICAgICAgICAg
bm9kZS0+c3RydWN0dXJlKCkpKTsKICAgICB9IGVsc2UgewogICAgICAgICBtX2ppdC5sb2FkUHRy
KAogICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgSlNDZWxsOjpz
dHJ1Y3R1cmVPZmZzZXQoKSksIHN0cnVjdHVyZUdQUik7CkBAIC04NDksMzUgKzg0NywzNCBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjphcnJheWlmeShOb2RlJiBub2RlCiAgICAgICAgIG1faml0Lmxv
YWQ4KAogICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RydWN0dXJlR1BSLCBT
dHJ1Y3R1cmU6OmluZGV4aW5nVHlwZU9mZnNldCgpKSwgdGVtcEdQUik7CiAgICAgICAgIAotICAg
ICAgICBzbG93UGF0aC5hcHBlbmQoanVtcFNsb3dGb3JVbndhbnRlZEFycmF5TW9kZSh0ZW1wR1BS
LCBub2RlLmFycmF5TW9kZSgpKSk7CisgICAgICAgIHNsb3dQYXRoLmFwcGVuZChqdW1wU2xvd0Zv
clVud2FudGVkQXJyYXlNb2RlKHRlbXBHUFIsIG5vZGUtPmFycmF5TW9kZSgpKSk7CiAgICAgfQog
ICAgIAogICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKGFkb3B0UHRyKG5ldyBBcnJheWlmeVNsb3dQ
YXRoR2VuZXJhdG9yKAogICAgICAgICBzbG93UGF0aCwgdGhpcywgbm9kZSwgYmFzZVJlZywgcHJv
cGVydHlSZWcsIHRlbXBHUFIsIHN0cnVjdHVyZUdQUikpKTsKICAgICAKLSAgICBub1Jlc3VsdCht
X2NvbXBpbGVJbmRleCk7CisgICAgbm9SZXN1bHQobV9jdXJyZW50Tm9kZSk7CiB9CiAKLXZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmFycmF5aWZ5KE5vZGUmIG5vZGUpCit2b2lkIFNwZWN1bGF0aXZlSklU
OjphcnJheWlmeShOb2RlKiBub2RlKQogewotICAgIEFTU0VSVChub2RlLmFycmF5TW9kZSgpLmlz
U3BlY2lmaWMoKSk7CisgICAgQVNTRVJUKG5vZGUtPmFycmF5TW9kZSgpLmlzU3BlY2lmaWMoKSk7
CiAgICAgCi0gICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLmNoaWxkMSgp
KTsKKyAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsK
ICAgICAKLSAgICBpZiAoIW5vZGUuY2hpbGQyKCkpIHsKKyAgICBpZiAoIW5vZGUtPmNoaWxkMigp
KSB7CiAgICAgICAgIGFycmF5aWZ5KG5vZGUsIGJhc2UuZ3ByKCksIEludmFsaWRHUFJSZWcpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAotICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5k
IHByb3BlcnR5KHRoaXMsIG5vZGUuY2hpbGQyKCkpOworICAgIFNwZWN1bGF0ZUludGVnZXJPcGVy
YW5kIHByb3BlcnR5KHRoaXMsIG5vZGUtPmNoaWxkMigpKTsKICAgICAKICAgICBhcnJheWlmeShu
b2RlLCBiYXNlLmdwcigpLCBwcm9wZXJ0eS5ncHIoKSk7CiB9CiAKLUdQUlJlZyBTcGVjdWxhdGl2
ZUpJVDo6ZmlsbFN0b3JhZ2UoTm9kZUluZGV4IG5vZGVJbmRleCkKK0dQUlJlZyBTcGVjdWxhdGl2
ZUpJVDo6ZmlsbFN0b3JhZ2UoTm9kZSogbm9kZSkKIHsKLSAgICBOb2RlJiBub2RlID0gbV9qaXQu
Z3JhcGgoKVtub2RlSW5kZXhdOwotICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIg
PSBub2RlLnZpcnR1YWxSZWdpc3RlcigpOworICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVn
aXN0ZXIgPSBub2RlLT52aXJ0dWFsUmVnaXN0ZXIoKTsKICAgICBHZW5lcmF0aW9uSW5mbyYgaW5m
byA9IG1fZ2VuZXJhdGlvbkluZm9bdmlydHVhbFJlZ2lzdGVyXTsKICAgICAKICAgICBzd2l0Y2gg
KGluZm8ucmVnaXN0ZXJGb3JtYXQoKSkgewpAQCAtODkxLDcgKzg4OCw3IEBAIEdQUlJlZyBTcGVj
dWxhdGl2ZUpJVDo6ZmlsbFN0b3JhZ2UoTm9kZUkKICAgICAgICAgfQogICAgICAgICAKICAgICAg
ICAgLy8gTXVzdCBiZSBhIGNlbGw7IGZpbGwgaXQgYXMgYSBjZWxsIGFuZCB0aGVuIHJldHVybiB0
aGUgcG9pbnRlci4KLSAgICAgICAgcmV0dXJuIGZpbGxTcGVjdWxhdGVDZWxsKG5vZGVJbmRleCwg
QmFja3dhcmRTcGVjdWxhdGlvbik7CisgICAgICAgIHJldHVybiBmaWxsU3BlY3VsYXRlQ2VsbChu
b2RlLCBCYWNrd2FyZFNwZWN1bGF0aW9uKTsKICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgRGF0
YUZvcm1hdFN0b3JhZ2U6IHsKQEAgLTkwMSwxMTMgKzg5OCwxMDUgQEAgR1BSUmVnIFNwZWN1bGF0
aXZlSklUOjpmaWxsU3RvcmFnZShOb2RlSQogICAgIH0KICAgICAgICAgCiAgICAgZGVmYXVsdDoK
LSAgICAgICAgcmV0dXJuIGZpbGxTcGVjdWxhdGVDZWxsKG5vZGVJbmRleCwgQmFja3dhcmRTcGVj
dWxhdGlvbik7CisgICAgICAgIHJldHVybiBmaWxsU3BlY3VsYXRlQ2VsbChub2RlLCBCYWNrd2Fy
ZFNwZWN1bGF0aW9uKTsKICAgICB9CiB9CiAKLXZvaWQgU3BlY3VsYXRpdmVKSVQ6OnVzZUNoaWxk
cmVuKE5vZGUmIG5vZGUpCit2b2lkIFNwZWN1bGF0aXZlSklUOjp1c2VDaGlsZHJlbihOb2RlKiBu
b2RlKQogewotICAgIGlmIChub2RlLmZsYWdzKCkgJiBOb2RlSGFzVmFyQXJncykgewotICAgICAg
ICBmb3IgKHVuc2lnbmVkIGNoaWxkSWR4ID0gbm9kZS5maXJzdENoaWxkKCk7IGNoaWxkSWR4IDwg
bm9kZS5maXJzdENoaWxkKCkgKyBub2RlLm51bUNoaWxkcmVuKCk7IGNoaWxkSWR4KyspIHsKKyAg
ICBpZiAobm9kZS0+ZmxhZ3MoKSAmIE5vZGVIYXNWYXJBcmdzKSB7CisgICAgICAgIGZvciAodW5z
aWduZWQgY2hpbGRJZHggPSBub2RlLT5maXJzdENoaWxkKCk7IGNoaWxkSWR4IDwgbm9kZS0+Zmly
c3RDaGlsZCgpICsgbm9kZS0+bnVtQ2hpbGRyZW4oKTsgY2hpbGRJZHgrKykgewogICAgICAgICAg
ICAgaWYgKCEhbV9qaXQuZ3JhcGgoKS5tX3ZhckFyZ0NoaWxkcmVuW2NoaWxkSWR4XSkKICAgICAg
ICAgICAgICAgICB1c2UobV9qaXQuZ3JhcGgoKS5tX3ZhckFyZ0NoaWxkcmVuW2NoaWxkSWR4XSk7
CiAgICAgICAgIH0KICAgICB9IGVsc2UgewotICAgICAgICBFZGdlIGNoaWxkMSA9IG5vZGUuY2hp
bGQxKCk7CisgICAgICAgIEVkZ2UgY2hpbGQxID0gbm9kZS0+Y2hpbGQxKCk7CiAgICAgICAgIGlm
ICghY2hpbGQxKSB7Ci0gICAgICAgICAgICBBU1NFUlQoIW5vZGUuY2hpbGQyKCkgJiYgIW5vZGUu
Y2hpbGQzKCkpOworICAgICAgICAgICAgQVNTRVJUKCFub2RlLT5jaGlsZDIoKSAmJiAhbm9kZS0+
Y2hpbGQzKCkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIHVzZShj
aGlsZDEpOwogICAgICAgICAKLSAgICAgICAgRWRnZSBjaGlsZDIgPSBub2RlLmNoaWxkMigpOwor
ICAgICAgICBFZGdlIGNoaWxkMiA9IG5vZGUtPmNoaWxkMigpOwogICAgICAgICBpZiAoIWNoaWxk
MikgewotICAgICAgICAgICAgQVNTRVJUKCFub2RlLmNoaWxkMygpKTsKKyAgICAgICAgICAgIEFT
U0VSVCghbm9kZS0+Y2hpbGQzKCkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAg
ICAgICAgIHVzZShjaGlsZDIpOwogICAgICAgICAKLSAgICAgICAgRWRnZSBjaGlsZDMgPSBub2Rl
LmNoaWxkMygpOworICAgICAgICBFZGdlIGNoaWxkMyA9IG5vZGUtPmNoaWxkMygpOwogICAgICAg
ICBpZiAoIWNoaWxkMykKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgdXNlKGNoaWxkMyk7
CiAgICAgfQogfQogCi1ib29sIFNwZWN1bGF0aXZlSklUOjppc1N0cmljdEludDMyKE5vZGVJbmRl
eCBub2RlSW5kZXgpCitib29sIFNwZWN1bGF0aXZlSklUOjppc1N0cmljdEludDMyKE5vZGUqIG5v
ZGUpCiB7Ci0gICAgaWYgKGlzSW50MzJDb25zdGFudChub2RlSW5kZXgpKQorICAgIGlmIChpc0lu
dDMyQ29uc3RhbnQobm9kZSkpCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIAotICAgIE5vZGUm
IG5vZGUgPSBtX2ppdC5ncmFwaCgpW25vZGVJbmRleF07Ci0gICAgR2VuZXJhdGlvbkluZm8mIGlu
Zm8gPSBtX2dlbmVyYXRpb25JbmZvW25vZGUudmlydHVhbFJlZ2lzdGVyKCldOworICAgIEdlbmVy
YXRpb25JbmZvJiBpbmZvID0gbV9nZW5lcmF0aW9uSW5mb1tub2RlLT52aXJ0dWFsUmVnaXN0ZXIo
KV07CiAgICAgCiAgICAgcmV0dXJuIGluZm8ucmVnaXN0ZXJGb3JtYXQoKSA9PSBEYXRhRm9ybWF0
SW50ZWdlcjsKIH0KIAotYm9vbCBTcGVjdWxhdGl2ZUpJVDo6aXNLbm93bkludGVnZXIoTm9kZUlu
ZGV4IG5vZGVJbmRleCkKK2Jvb2wgU3BlY3VsYXRpdmVKSVQ6OmlzS25vd25JbnRlZ2VyKE5vZGUq
IG5vZGUpCiB7Ci0gICAgaWYgKGlzSW50MzJDb25zdGFudChub2RlSW5kZXgpKQorICAgIGlmIChp
c0ludDMyQ29uc3RhbnQobm9kZSkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgTm9kZSYg
bm9kZSA9IG1faml0LmdyYXBoKClbbm9kZUluZGV4XTsKLSAgICAKLSAgICBpZiAobm9kZS5oYXNJ
bnQzMlJlc3VsdCgpKQorICAgIGlmIChub2RlLT5oYXNJbnQzMlJlc3VsdCgpKQogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICAKLSAgICBHZW5lcmF0aW9uSW5mbyYgaW5mbyA9IG1fZ2VuZXJhdGlv
bkluZm9bbm9kZS52aXJ0dWFsUmVnaXN0ZXIoKV07CisgICAgR2VuZXJhdGlvbkluZm8mIGluZm8g
PSBtX2dlbmVyYXRpb25JbmZvW25vZGUtPnZpcnR1YWxSZWdpc3RlcigpXTsKIAogICAgIHJldHVy
biBpbmZvLmlzSlNJbnRlZ2VyKCk7CiB9CiAKLWJvb2wgU3BlY3VsYXRpdmVKSVQ6OmlzS25vd25O
dW1lcmljKE5vZGVJbmRleCBub2RlSW5kZXgpCitib29sIFNwZWN1bGF0aXZlSklUOjppc0tub3du
TnVtZXJpYyhOb2RlKiBub2RlKQogewotICAgIGlmIChpc0ludDMyQ29uc3RhbnQobm9kZUluZGV4
KSB8fCBpc051bWJlckNvbnN0YW50KG5vZGVJbmRleCkpCisgICAgaWYgKGlzSW50MzJDb25zdGFu
dChub2RlKSB8fCBpc051bWJlckNvbnN0YW50KG5vZGUpKQogICAgICAgICByZXR1cm4gdHJ1ZTsK
IAotICAgIE5vZGUmIG5vZGUgPSBtX2ppdC5ncmFwaCgpW25vZGVJbmRleF07Ci0gICAgCi0gICAg
aWYgKG5vZGUuaGFzTnVtYmVyUmVzdWx0KCkpCisgICAgaWYgKG5vZGUtPmhhc051bWJlclJlc3Vs
dCgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAKLSAgICBHZW5lcmF0aW9uSW5mbyYgaW5m
byA9IG1fZ2VuZXJhdGlvbkluZm9bbm9kZS52aXJ0dWFsUmVnaXN0ZXIoKV07CisgICAgR2VuZXJh
dGlvbkluZm8mIGluZm8gPSBtX2dlbmVyYXRpb25JbmZvW25vZGUtPnZpcnR1YWxSZWdpc3Rlcigp
XTsKIAogICAgIHJldHVybiBpbmZvLmlzSlNJbnRlZ2VyKCkgfHwgaW5mby5pc0pTRG91YmxlKCk7
CiB9CiAKLWJvb2wgU3BlY3VsYXRpdmVKSVQ6OmlzS25vd25DZWxsKE5vZGVJbmRleCBub2RlSW5k
ZXgpCitib29sIFNwZWN1bGF0aXZlSklUOjppc0tub3duQ2VsbChOb2RlKiBub2RlKQogewotICAg
IHJldHVybiBtX2dlbmVyYXRpb25JbmZvW21faml0LmdyYXBoKClbbm9kZUluZGV4XS52aXJ0dWFs
UmVnaXN0ZXIoKV0uaXNKU0NlbGwoKTsKKyAgICByZXR1cm4gbV9nZW5lcmF0aW9uSW5mb1tub2Rl
LT52aXJ0dWFsUmVnaXN0ZXIoKV0uaXNKU0NlbGwoKTsKIH0KIAotYm9vbCBTcGVjdWxhdGl2ZUpJ
VDo6aXNLbm93bk5vdENlbGwoTm9kZUluZGV4IG5vZGVJbmRleCkKK2Jvb2wgU3BlY3VsYXRpdmVK
SVQ6OmlzS25vd25Ob3RDZWxsKE5vZGUqIG5vZGUpCiB7Ci0gICAgTm9kZSYgbm9kZSA9IG1faml0
LmdyYXBoKClbbm9kZUluZGV4XTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVy
ID0gbm9kZS52aXJ0dWFsUmVnaXN0ZXIoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJl
Z2lzdGVyID0gbm9kZS0+dmlydHVhbFJlZ2lzdGVyKCk7CiAgICAgR2VuZXJhdGlvbkluZm8mIGlu
Zm8gPSBtX2dlbmVyYXRpb25JbmZvW3ZpcnR1YWxSZWdpc3Rlcl07Ci0gICAgaWYgKG5vZGUuaGFz
Q29uc3RhbnQoKSAmJiAhdmFsdWVPZkpTQ29uc3RhbnQobm9kZUluZGV4KS5pc0NlbGwoKSkKKyAg
ICBpZiAobm9kZS0+aGFzQ29uc3RhbnQoKSAmJiAhdmFsdWVPZkpTQ29uc3RhbnQobm9kZSkuaXND
ZWxsKCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIHJldHVybiAhKGluZm8uaXNKU0NlbGwo
KSB8fCBpbmZvLmlzVW5rbm93bkpTKCkpOwogfQogCi1ib29sIFNwZWN1bGF0aXZlSklUOjppc0tu
b3duTm90SW50ZWdlcihOb2RlSW5kZXggbm9kZUluZGV4KQorYm9vbCBTcGVjdWxhdGl2ZUpJVDo6
aXNLbm93bk5vdEludGVnZXIoTm9kZSogbm9kZSkKIHsKLSAgICBOb2RlJiBub2RlID0gbV9qaXQu
Z3JhcGgoKVtub2RlSW5kZXhdOwotICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIg
PSBub2RlLnZpcnR1YWxSZWdpc3RlcigpOworICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVn
aXN0ZXIgPSBub2RlLT52aXJ0dWFsUmVnaXN0ZXIoKTsKICAgICBHZW5lcmF0aW9uSW5mbyYgaW5m
byA9IG1fZ2VuZXJhdGlvbkluZm9bdmlydHVhbFJlZ2lzdGVyXTsKICAgICAKICAgICByZXR1cm4g
aW5mby5pc0pTRG91YmxlKCkgfHwgaW5mby5pc0pTQ2VsbCgpIHx8IGluZm8uaXNKU0Jvb2xlYW4o
KQotICAgICAgICB8fCAobm9kZS5oYXNDb25zdGFudCgpICYmICF2YWx1ZU9mSlNDb25zdGFudChu
b2RlSW5kZXgpLmlzSW50MzIoKSk7CisgICAgICAgIHx8IChub2RlLT5oYXNDb25zdGFudCgpICYm
ICF2YWx1ZU9mSlNDb25zdGFudChub2RlKS5pc0ludDMyKCkpOwogfQogCi1ib29sIFNwZWN1bGF0
aXZlSklUOjppc0tub3duTm90TnVtYmVyKE5vZGVJbmRleCBub2RlSW5kZXgpCitib29sIFNwZWN1
bGF0aXZlSklUOjppc0tub3duTm90TnVtYmVyKE5vZGUqIG5vZGUpCiB7Ci0gICAgTm9kZSYgbm9k
ZSA9IG1faml0LmdyYXBoKClbbm9kZUluZGV4XTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVh
bFJlZ2lzdGVyID0gbm9kZS52aXJ0dWFsUmVnaXN0ZXIoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIg
dmlydHVhbFJlZ2lzdGVyID0gbm9kZS0+dmlydHVhbFJlZ2lzdGVyKCk7CiAgICAgR2VuZXJhdGlv
bkluZm8mIGluZm8gPSBtX2dlbmVyYXRpb25JbmZvW3ZpcnR1YWxSZWdpc3Rlcl07CiAgICAgCiAg
ICAgcmV0dXJuICghaW5mby5pc0pTRG91YmxlKCkgJiYgIWluZm8uaXNKU0ludGVnZXIoKSAmJiAh
aW5mby5pc1Vua25vd25KUygpKQotICAgICAgICB8fCAobm9kZS5oYXNDb25zdGFudCgpICYmICFp
c051bWJlckNvbnN0YW50KG5vZGVJbmRleCkpOworICAgICAgICB8fCAobm9kZS0+aGFzQ29uc3Rh
bnQoKSAmJiAhaXNOdW1iZXJDb25zdGFudChub2RlKSk7CiB9CiAKIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OndyaXRlQmFycmllcihNYWNyb0Fzc2VtYmxlciYgaml0LCBHUFJSZWcgb3duZXIsIEdQUlJl
ZyBzY3JhdGNoMSwgR1BSUmVnIHNjcmF0Y2gyLCBXcml0ZUJhcnJpZXJVc2VLaW5kIHVzZUtpbmQp
CkBAIC0xMDU4LDcgKzEwNDcsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjp3cml0ZUJhcnJpZXIo
R1BSUmVnCiAgICAgVU5VU0VEX1BBUkFNKHNjcmF0Y2gyKTsKICAgICBVTlVTRURfUEFSQU0odXNl
S2luZCk7CiAKLSAgICBpZiAoaXNLbm93bk5vdENlbGwodmFsdWVVc2UuaW5kZXgoKSkpCisgICAg
aWYgKGlzS25vd25Ob3RDZWxsKHZhbHVlVXNlLm5vZGUoKSkpCiAgICAgICAgIHJldHVybjsKIAog
I2lmIEVOQUJMRShXUklURV9CQVJSSUVSX1BST0ZJTElORykKQEAgLTEwODEsNyArMTA3MCw3IEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OndyaXRlQmFycmllcihHUFJSZWcKICAgICAKICAgICBKSVRD
b21waWxlcjo6SnVtcCByaHNOb3RDZWxsOwogICAgIGJvb2wgaGFkQ2VsbENoZWNrID0gZmFsc2U7
Ci0gICAgaWYgKCFpc0tub3duQ2VsbCh2YWx1ZVVzZS5pbmRleCgpKSAmJiAhaXNDZWxsU3BlY3Vs
YXRpb24obV9qaXQuZ2V0U3BlY3VsYXRpb24odmFsdWVVc2UuaW5kZXgoKSkpKSB7CisgICAgaWYg
KCFpc0tub3duQ2VsbCh2YWx1ZVVzZS5ub2RlKCkpICYmICFpc0NlbGxTcGVjdWxhdGlvbihtX2pp
dC5nZXRTcGVjdWxhdGlvbih2YWx1ZVVzZS5ub2RlKCkpKSkgewogICAgICAgICBoYWRDZWxsQ2hl
Y2sgPSB0cnVlOwogICAgICAgICByaHNOb3RDZWxsID0gbV9qaXQuYnJhbmNoSWZOb3RDZWxsKHZh
bHVlR1BSKTsKICAgICB9CkBAIC0xMTMzLDcgKzExMjIsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
Ojp3cml0ZUJhcnJpZXIoSlNDZWxsCiAgICAgVU5VU0VEX1BBUkFNKHNjcmF0Y2gpOwogICAgIFVO
VVNFRF9QQVJBTSh1c2VLaW5kKTsKIAotICAgIGlmIChpc0tub3duTm90Q2VsbCh2YWx1ZVVzZS5p
bmRleCgpKSkKKyAgICBpZiAoaXNLbm93bk5vdENlbGwodmFsdWVVc2Uubm9kZSgpKSkKICAgICAg
ICAgcmV0dXJuOwogCiAjaWYgRU5BQkxFKFdSSVRFX0JBUlJJRVJfUFJPRklMSU5HKQpAQCAtMTE0
Myw3ICsxMTMyLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6d3JpdGVCYXJyaWVyKEpTQ2VsbAog
I2lmIEVOQUJMRShHR0MpCiAgICAgSklUQ29tcGlsZXI6Okp1bXAgcmhzTm90Q2VsbDsKICAgICBi
b29sIGhhZENlbGxDaGVjayA9IGZhbHNlOwotICAgIGlmICghaXNLbm93bkNlbGwodmFsdWVVc2Uu
aW5kZXgoKSkgJiYgIWlzQ2VsbFNwZWN1bGF0aW9uKG1faml0LmdldFNwZWN1bGF0aW9uKHZhbHVl
VXNlLmluZGV4KCkpKSkgeworICAgIGlmICghaXNLbm93bkNlbGwodmFsdWVVc2Uubm9kZSgpKSAm
JiAhaXNDZWxsU3BlY3VsYXRpb24obV9qaXQuZ2V0U3BlY3VsYXRpb24odmFsdWVVc2Uubm9kZSgp
KSkpIHsKICAgICAgICAgaGFkQ2VsbENoZWNrID0gdHJ1ZTsKICAgICAgICAgcmhzTm90Q2VsbCA9
IG1faml0LmJyYW5jaElmTm90Q2VsbCh2YWx1ZUdQUik7CiAgICAgfQpAQCAtMTE2NCwxOCArMTE1
MywxOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjp3cml0ZUJhcnJpZXIoSlNDZWxsCiAjZW5kaWYK
IH0KIAotYm9vbCBTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVDb21wYXJlKE5vZGUmIG5v
ZGUsIE1hY3JvQXNzZW1ibGVyOjpSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmQsIFNfREZHT3BlcmF0
aW9uX0VKSiBoZWxwZXJGdW5jdGlvbikKK2Jvb2wgU3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0
aXZlQ29tcGFyZShOb2RlKiBub2RlLCBNYWNyb0Fzc2VtYmxlcjo6UmVsYXRpb25hbENvbmRpdGlv
biBjb25kLCBTX0RGR09wZXJhdGlvbl9FSkogaGVscGVyRnVuY3Rpb24pCiB7CiAgICAgdW5zaWdu
ZWQgYnJhbmNoSW5kZXhJbkJsb2NrID0gZGV0ZWN0UGVlcEhvbGVCcmFuY2goKTsKICAgICBpZiAo
YnJhbmNoSW5kZXhJbkJsb2NrICE9IFVJTlRfTUFYKSB7Ci0gICAgICAgIE5vZGVJbmRleCBicmFu
Y2hOb2RlSW5kZXggPSBtX2ppdC5ncmFwaCgpLm1fYmxvY2tzW21fYmxvY2tdLT5hdChicmFuY2hJ
bmRleEluQmxvY2spOworICAgICAgICBOb2RlKiBicmFuY2hOb2RlID0gbV9qaXQuZ3JhcGgoKS5t
X2Jsb2Nrc1ttX2Jsb2NrXS0+YXQoYnJhbmNoSW5kZXhJbkJsb2NrKTsKIAotICAgICAgICBBU1NF
UlQobm9kZS5hZGp1c3RlZFJlZkNvdW50KCkgPT0gMSk7CisgICAgICAgIEFTU0VSVChub2RlLT5h
ZGp1c3RlZFJlZkNvdW50KCkgPT0gMSk7CiAgICAgICAgIAotICAgICAgICBub25TcGVjdWxhdGl2
ZVBlZXBob2xlQnJhbmNoKG5vZGUsIGJyYW5jaE5vZGVJbmRleCwgY29uZCwgaGVscGVyRnVuY3Rp
b24pOworICAgICAgICBub25TcGVjdWxhdGl2ZVBlZXBob2xlQnJhbmNoKG5vZGUsIGJyYW5jaE5v
ZGUsIGNvbmQsIGhlbHBlckZ1bmN0aW9uKTsKICAgICAKICAgICAgICAgbV9pbmRleEluQmxvY2sg
PSBicmFuY2hJbmRleEluQmxvY2s7Ci0gICAgICAgIG1fY29tcGlsZUluZGV4ID0gYnJhbmNoTm9k
ZUluZGV4OworICAgICAgICBtX2N1cnJlbnROb2RlID0gYnJhbmNoTm9kZTsKICAgICAgICAgCiAg
ICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KQEAgLTExODUsMTggKzExNzQsMTggQEAgYm9vbCBT
cGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVDb21wYQogICAgIHJldHVybiBmYWxzZTsKIH0K
IAotYm9vbCBTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVTdHJpY3RFcShOb2RlJiBub2Rl
LCBib29sIGludmVydCkKK2Jvb2wgU3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlU3RyaWN0
RXEoTm9kZSogbm9kZSwgYm9vbCBpbnZlcnQpCiB7CiAgICAgdW5zaWduZWQgYnJhbmNoSW5kZXhJ
bkJsb2NrID0gZGV0ZWN0UGVlcEhvbGVCcmFuY2goKTsKICAgICBpZiAoYnJhbmNoSW5kZXhJbkJs
b2NrICE9IFVJTlRfTUFYKSB7Ci0gICAgICAgIE5vZGVJbmRleCBicmFuY2hOb2RlSW5kZXggPSBt
X2ppdC5ncmFwaCgpLm1fYmxvY2tzW21fYmxvY2tdLT5hdChicmFuY2hJbmRleEluQmxvY2spOwor
ICAgICAgICBOb2RlKiBicmFuY2hOb2RlID0gbV9qaXQuZ3JhcGgoKS5tX2Jsb2Nrc1ttX2Jsb2Nr
XS0+YXQoYnJhbmNoSW5kZXhJbkJsb2NrKTsKIAotICAgICAgICBBU1NFUlQobm9kZS5hZGp1c3Rl
ZFJlZkNvdW50KCkgPT0gMSk7CisgICAgICAgIEFTU0VSVChub2RlLT5hZGp1c3RlZFJlZkNvdW50
KCkgPT0gMSk7CiAgICAgICAgIAotICAgICAgICBub25TcGVjdWxhdGl2ZVBlZXBob2xlU3RyaWN0
RXEobm9kZSwgYnJhbmNoTm9kZUluZGV4LCBpbnZlcnQpOworICAgICAgICBub25TcGVjdWxhdGl2
ZVBlZXBob2xlU3RyaWN0RXEobm9kZSwgYnJhbmNoTm9kZSwgaW52ZXJ0KTsKICAgICAKICAgICAg
ICAgbV9pbmRleEluQmxvY2sgPSBicmFuY2hJbmRleEluQmxvY2s7Ci0gICAgICAgIG1fY29tcGls
ZUluZGV4ID0gYnJhbmNoTm9kZUluZGV4OworICAgICAgICBtX2N1cnJlbnROb2RlID0gYnJhbmNo
Tm9kZTsKICAgICAgICAgCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KQEAgLTEzOTIsNyAr
MTM4MSw3IEBAIEdQUlRlbXBvcmFyeTo6R1BSVGVtcG9yYXJ5KFNwZWN1bGF0aXZlSkkKICAgICA6
IG1faml0KGppdCkKICAgICAsIG1fZ3ByKEludmFsaWRHUFJSZWcpCiB7Ci0gICAgaWYgKG1faml0
LT5jYW5SZXVzZShvcDEuaW5kZXgoKSkpCisgICAgaWYgKG1faml0LT5jYW5SZXVzZShvcDEubm9k
ZSgpKSkKICAgICAgICAgbV9ncHIgPSBtX2ppdC0+cmV1c2Uob3AxLmdwcigpKTsKICAgICBlbHNl
CiAgICAgICAgIG1fZ3ByID0gbV9qaXQtPmFsbG9jYXRlKCk7CkBAIC0xNDAyLDkgKzEzOTEsOSBA
QCBHUFJUZW1wb3Jhcnk6OkdQUlRlbXBvcmFyeShTcGVjdWxhdGl2ZUpJCiAgICAgOiBtX2ppdChq
aXQpCiAgICAgLCBtX2dwcihJbnZhbGlkR1BSUmVnKQogewotICAgIGlmIChtX2ppdC0+Y2FuUmV1
c2Uob3AxLmluZGV4KCkpKQorICAgIGlmIChtX2ppdC0+Y2FuUmV1c2Uob3AxLm5vZGUoKSkpCiAg
ICAgICAgIG1fZ3ByID0gbV9qaXQtPnJldXNlKG9wMS5ncHIoKSk7Ci0gICAgZWxzZSBpZiAobV9q
aXQtPmNhblJldXNlKG9wMi5pbmRleCgpKSkKKyAgICBlbHNlIGlmIChtX2ppdC0+Y2FuUmV1c2Uo
b3AyLm5vZGUoKSkpCiAgICAgICAgIG1fZ3ByID0gbV9qaXQtPnJldXNlKG9wMi5ncHIoKSk7CiAg
ICAgZWxzZQogICAgICAgICBtX2dwciA9IG1faml0LT5hbGxvY2F0ZSgpOwpAQCAtMTQxNCw3ICsx
NDAzLDcgQEAgR1BSVGVtcG9yYXJ5OjpHUFJUZW1wb3JhcnkoU3BlY3VsYXRpdmVKSQogICAgIDog
bV9qaXQoaml0KQogICAgICwgbV9ncHIoSW52YWxpZEdQUlJlZykKIHsKLSAgICBpZiAobV9qaXQt
PmNhblJldXNlKG9wMS5pbmRleCgpKSkKKyAgICBpZiAobV9qaXQtPmNhblJldXNlKG9wMS5ub2Rl
KCkpKQogICAgICAgICBtX2dwciA9IG1faml0LT5yZXVzZShvcDEuZ3ByKCkpOwogICAgIGVsc2UK
ICAgICAgICAgbV9ncHIgPSBtX2ppdC0+YWxsb2NhdGUoKTsKQEAgLTE0MjQsNyArMTQxMyw3IEBA
IEdQUlRlbXBvcmFyeTo6R1BSVGVtcG9yYXJ5KFNwZWN1bGF0aXZlSkkKICAgICA6IG1faml0KGpp
dCkKICAgICAsIG1fZ3ByKEludmFsaWRHUFJSZWcpCiB7Ci0gICAgaWYgKG1faml0LT5jYW5SZXVz
ZShvcDEuaW5kZXgoKSkpCisgICAgaWYgKG1faml0LT5jYW5SZXVzZShvcDEubm9kZSgpKSkKICAg
ICAgICAgbV9ncHIgPSBtX2ppdC0+cmV1c2Uob3AxLmdwcigpKTsKICAgICBlbHNlCiAgICAgICAg
IG1fZ3ByID0gbV9qaXQtPmFsbG9jYXRlKCk7CkBAIC0xNDM0LDkgKzE0MjMsOSBAQCBHUFJUZW1w
b3Jhcnk6OkdQUlRlbXBvcmFyeShTcGVjdWxhdGl2ZUpJCiAgICAgOiBtX2ppdChqaXQpCiAgICAg
LCBtX2dwcihJbnZhbGlkR1BSUmVnKQogewotICAgIGlmIChtX2ppdC0+Y2FuUmV1c2Uob3AxLmlu
ZGV4KCkpKQorICAgIGlmIChtX2ppdC0+Y2FuUmV1c2Uob3AxLm5vZGUoKSkpCiAgICAgICAgIG1f
Z3ByID0gbV9qaXQtPnJldXNlKG9wMS5ncHIoKSk7Ci0gICAgZWxzZSBpZiAobV9qaXQtPmNhblJl
dXNlKG9wMi5pbmRleCgpKSkKKyAgICBlbHNlIGlmIChtX2ppdC0+Y2FuUmV1c2Uob3AyLm5vZGUo
KSkpCiAgICAgICAgIG1fZ3ByID0gbV9qaXQtPnJldXNlKG9wMi5ncHIoKSk7CiAgICAgZWxzZQog
ICAgICAgICBtX2dwciA9IG1faml0LT5hbGxvY2F0ZSgpOwpAQCAtMTQ0Niw3ICsxNDM1LDcgQEAg
R1BSVGVtcG9yYXJ5OjpHUFJUZW1wb3JhcnkoU3BlY3VsYXRpdmVKSQogICAgIDogbV9qaXQoaml0
KQogICAgICwgbV9ncHIoSW52YWxpZEdQUlJlZykKIHsKLSAgICBpZiAobV9qaXQtPmNhblJldXNl
KG9wMS5pbmRleCgpKSkKKyAgICBpZiAobV9qaXQtPmNhblJldXNlKG9wMS5ub2RlKCkpKQogICAg
ICAgICBtX2dwciA9IG1faml0LT5yZXVzZShvcDEuZ3ByKCkpOwogICAgIGVsc2UKICAgICAgICAg
bV9ncHIgPSBtX2ppdC0+YWxsb2NhdGUoKTsKQEAgLTE0NTYsNyArMTQ0NSw3IEBAIEdQUlRlbXBv
cmFyeTo6R1BSVGVtcG9yYXJ5KFNwZWN1bGF0aXZlSkkKICAgICA6IG1faml0KGppdCkKICAgICAs
IG1fZ3ByKEludmFsaWRHUFJSZWcpCiB7Ci0gICAgaWYgKG1faml0LT5jYW5SZXVzZShvcDEuaW5k
ZXgoKSkpCisgICAgaWYgKG1faml0LT5jYW5SZXVzZShvcDEubm9kZSgpKSkKICAgICAgICAgbV9n
cHIgPSBtX2ppdC0+cmV1c2Uob3AxLmdwcigpKTsKICAgICBlbHNlCiAgICAgICAgIG1fZ3ByID0g
bV9qaXQtPmFsbG9jYXRlKCk7CkBAIC0xNDY3LDcgKzE0NTYsNyBAQCBHUFJUZW1wb3Jhcnk6OkdQ
UlRlbXBvcmFyeShTcGVjdWxhdGl2ZUpJCiAgICAgOiBtX2ppdChqaXQpCiAgICAgLCBtX2dwcihJ
bnZhbGlkR1BSUmVnKQogewotICAgIGlmIChtX2ppdC0+Y2FuUmV1c2Uob3AxLmluZGV4KCkpKQor
ICAgIGlmIChtX2ppdC0+Y2FuUmV1c2Uob3AxLm5vZGUoKSkpCiAgICAgICAgIG1fZ3ByID0gbV9q
aXQtPnJldXNlKG9wMS5ncHIoKSk7CiAgICAgZWxzZQogICAgICAgICBtX2dwciA9IG1faml0LT5h
bGxvY2F0ZSgpOwpAQCAtMTQ3Nyw3ICsxNDY2LDcgQEAgR1BSVGVtcG9yYXJ5OjpHUFJUZW1wb3Jh
cnkoU3BlY3VsYXRpdmVKSQogICAgIDogbV9qaXQoaml0KQogICAgICwgbV9ncHIoSW52YWxpZEdQ
UlJlZykKIHsKLSAgICBpZiAoIW9wMS5pc0RvdWJsZSgpICYmIG1faml0LT5jYW5SZXVzZShvcDEu
aW5kZXgoKSkpCisgICAgaWYgKCFvcDEuaXNEb3VibGUoKSAmJiBtX2ppdC0+Y2FuUmV1c2Uob3Ax
Lm5vZGUoKSkpCiAgICAgICAgIG1fZ3ByID0gbV9qaXQtPnJldXNlKHRhZyA/IG9wMS50YWdHUFIo
KSA6IG9wMS5wYXlsb2FkR1BSKCkpOwogICAgIGVsc2UKICAgICAgICAgbV9ncHIgPSBtX2ppdC0+
YWxsb2NhdGUoKTsKQEAgLTE0ODgsNyArMTQ3Nyw3IEBAIEdQUlRlbXBvcmFyeTo6R1BSVGVtcG9y
YXJ5KFNwZWN1bGF0aXZlSkkKICAgICA6IG1faml0KGppdCkKICAgICAsIG1fZ3ByKEludmFsaWRH
UFJSZWcpCiB7Ci0gICAgaWYgKG1faml0LT5jYW5SZXVzZShvcDEuaW5kZXgoKSkpCisgICAgaWYg
KG1faml0LT5jYW5SZXVzZShvcDEubm9kZSgpKSkKICAgICAgICAgbV9ncHIgPSBtX2ppdC0+cmV1
c2Uob3AxLmdwcigpKTsKICAgICBlbHNlCiAgICAgICAgIG1fZ3ByID0gbV9qaXQtPmFsbG9jYXRl
KCk7CkBAIC0xNTE3LDcgKzE1MDYsNyBAQCBGUFJUZW1wb3Jhcnk6OkZQUlRlbXBvcmFyeShTcGVj
dWxhdGl2ZUpJCiAgICAgOiBtX2ppdChqaXQpCiAgICAgLCBtX2ZwcihJbnZhbGlkRlBSUmVnKQog
ewotICAgIGlmIChtX2ppdC0+Y2FuUmV1c2Uob3AxLmluZGV4KCkpKQorICAgIGlmIChtX2ppdC0+
Y2FuUmV1c2Uob3AxLm5vZGUoKSkpCiAgICAgICAgIG1fZnByID0gbV9qaXQtPnJldXNlKG9wMS5m
cHIoKSk7CiAgICAgZWxzZQogICAgICAgICBtX2ZwciA9IG1faml0LT5mcHJBbGxvY2F0ZSgpOwpA
QCAtMTUyNyw5ICsxNTE2LDkgQEAgRlBSVGVtcG9yYXJ5OjpGUFJUZW1wb3JhcnkoU3BlY3VsYXRp
dmVKSQogICAgIDogbV9qaXQoaml0KQogICAgICwgbV9mcHIoSW52YWxpZEZQUlJlZykKIHsKLSAg
ICBpZiAobV9qaXQtPmNhblJldXNlKG9wMS5pbmRleCgpKSkKKyAgICBpZiAobV9qaXQtPmNhblJl
dXNlKG9wMS5ub2RlKCkpKQogICAgICAgICBtX2ZwciA9IG1faml0LT5yZXVzZShvcDEuZnByKCkp
OwotICAgIGVsc2UgaWYgKG1faml0LT5jYW5SZXVzZShvcDIuaW5kZXgoKSkpCisgICAgZWxzZSBp
ZiAobV9qaXQtPmNhblJldXNlKG9wMi5ub2RlKCkpKQogICAgICAgICBtX2ZwciA9IG1faml0LT5y
ZXVzZShvcDIuZnByKCkpOwogICAgIGVsc2UKICAgICAgICAgbV9mcHIgPSBtX2ppdC0+ZnByQWxs
b2NhdGUoKTsKQEAgLTE1MzksNyArMTUyOCw3IEBAIEZQUlRlbXBvcmFyeTo6RlBSVGVtcG9yYXJ5
KFNwZWN1bGF0aXZlSkkKICAgICA6IG1faml0KGppdCkKICAgICAsIG1fZnByKEludmFsaWRGUFJS
ZWcpCiB7Ci0gICAgaWYgKG1faml0LT5jYW5SZXVzZShvcDEuaW5kZXgoKSkpCisgICAgaWYgKG1f
aml0LT5jYW5SZXVzZShvcDEubm9kZSgpKSkKICAgICAgICAgbV9mcHIgPSBtX2ppdC0+cmV1c2Uo
b3AxLmZwcigpKTsKICAgICBlbHNlCiAgICAgICAgIG1fZnByID0gbV9qaXQtPmZwckFsbG9jYXRl
KCk7CkBAIC0xNTQ5LDkgKzE1MzgsOSBAQCBGUFJUZW1wb3Jhcnk6OkZQUlRlbXBvcmFyeShTcGVj
dWxhdGl2ZUpJCiAgICAgOiBtX2ppdChqaXQpCiAgICAgLCBtX2ZwcihJbnZhbGlkRlBSUmVnKQog
ewotICAgIGlmIChtX2ppdC0+Y2FuUmV1c2Uob3AxLmluZGV4KCkpKQorICAgIGlmIChtX2ppdC0+
Y2FuUmV1c2Uob3AxLm5vZGUoKSkpCiAgICAgICAgIG1fZnByID0gbV9qaXQtPnJldXNlKG9wMS5m
cHIoKSk7Ci0gICAgZWxzZSBpZiAobV9qaXQtPmNhblJldXNlKG9wMi5pbmRleCgpKSkKKyAgICBl
bHNlIGlmIChtX2ppdC0+Y2FuUmV1c2Uob3AyLm5vZGUoKSkpCiAgICAgICAgIG1fZnByID0gbV9q
aXQtPnJldXNlKG9wMi5mcHIoKSk7CiAgICAgZWxzZQogICAgICAgICBtX2ZwciA9IG1faml0LT5m
cHJBbGxvY2F0ZSgpOwpAQCAtMTU2MiwzMSArMTU1MSwyOSBAQCBGUFJUZW1wb3Jhcnk6OkZQUlRl
bXBvcmFyeShTcGVjdWxhdGl2ZUpJCiAgICAgOiBtX2ppdChqaXQpCiAgICAgLCBtX2ZwcihJbnZh
bGlkRlBSUmVnKQogewotICAgIGlmIChvcDEuaXNEb3VibGUoKSAmJiBtX2ppdC0+Y2FuUmV1c2Uo
b3AxLmluZGV4KCkpKQorICAgIGlmIChvcDEuaXNEb3VibGUoKSAmJiBtX2ppdC0+Y2FuUmV1c2Uo
b3AxLm5vZGUoKSkpCiAgICAgICAgIG1fZnByID0gbV9qaXQtPnJldXNlKG9wMS5mcHIoKSk7CiAg
ICAgZWxzZQogICAgICAgICBtX2ZwciA9IG1faml0LT5mcHJBbGxvY2F0ZSgpOwogfQogI2VuZGlm
CiAKLXZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQZWVwSG9sZURvdWJsZUJyYW5jaChOb2Rl
JiBub2RlLCBOb2RlSW5kZXggYnJhbmNoTm9kZUluZGV4LCBKSVRDb21waWxlcjo6RG91YmxlQ29u
ZGl0aW9uIGNvbmRpdGlvbikKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQZWVwSG9sZURv
dWJsZUJyYW5jaChOb2RlKiBub2RlLCBOb2RlKiBicmFuY2hOb2RlLCBKSVRDb21waWxlcjo6RG91
YmxlQ29uZGl0aW9uIGNvbmRpdGlvbikKIHsKLSAgICBOb2RlJiBicmFuY2hOb2RlID0gYXQoYnJh
bmNoTm9kZUluZGV4KTsKLSAgICBCbG9ja0luZGV4IHRha2VuID0gYnJhbmNoTm9kZS50YWtlbkJs
b2NrSW5kZXgoKTsKLSAgICBCbG9ja0luZGV4IG5vdFRha2VuID0gYnJhbmNoTm9kZS5ub3RUYWtl
bkJsb2NrSW5kZXgoKTsKKyAgICBCbG9ja0luZGV4IHRha2VuID0gYnJhbmNoTm9kZS0+dGFrZW5C
bG9ja0luZGV4KCk7CisgICAgQmxvY2tJbmRleCBub3RUYWtlbiA9IGJyYW5jaE5vZGUtPm5vdFRh
a2VuQmxvY2tJbmRleCgpOwogICAgIAotICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgb3AxKHRo
aXMsIG5vZGUuY2hpbGQxKCkpOwotICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgb3AyKHRoaXMs
IG5vZGUuY2hpbGQyKCkpOworICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgb3AxKHRoaXMsIG5v
ZGUtPmNoaWxkMSgpKTsKKyAgICBTcGVjdWxhdGVEb3VibGVPcGVyYW5kIG9wMih0aGlzLCBub2Rl
LT5jaGlsZDIoKSk7CiAgICAgCiAgICAgYnJhbmNoRG91YmxlKGNvbmRpdGlvbiwgb3AxLmZwcigp
LCBvcDIuZnByKCksIHRha2VuKTsKICAgICBqdW1wKG5vdFRha2VuKTsKIH0KIAotdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZVBlZXBIb2xlT2JqZWN0RXF1YWxpdHkoTm9kZSYgbm9kZSwgTm9k
ZUluZGV4IGJyYW5jaE5vZGVJbmRleCkKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQZWVw
SG9sZU9iamVjdEVxdWFsaXR5KE5vZGUqIG5vZGUsIE5vZGUqIGJyYW5jaE5vZGUpCiB7Ci0gICAg
Tm9kZSYgYnJhbmNoTm9kZSA9IGF0KGJyYW5jaE5vZGVJbmRleCk7Ci0gICAgQmxvY2tJbmRleCB0
YWtlbiA9IGJyYW5jaE5vZGUudGFrZW5CbG9ja0luZGV4KCk7Ci0gICAgQmxvY2tJbmRleCBub3RU
YWtlbiA9IGJyYW5jaE5vZGUubm90VGFrZW5CbG9ja0luZGV4KCk7CisgICAgQmxvY2tJbmRleCB0
YWtlbiA9IGJyYW5jaE5vZGUtPnRha2VuQmxvY2tJbmRleCgpOworICAgIEJsb2NrSW5kZXggbm90
VGFrZW4gPSBicmFuY2hOb2RlLT5ub3RUYWtlbkJsb2NrSW5kZXgoKTsKIAogICAgIE1hY3JvQXNz
ZW1ibGVyOjpSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbiA9IE1hY3JvQXNzZW1ibGVyOjpF
cXVhbDsKICAgICAKQEAgLTE1OTcsMjAgKzE1ODQsMjAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZVBlZXBIb2xlT2JqZQogICAgICAgICBub3RUYWtlbiA9IHRtcDsKICAgICB9CiAKLSAg
ICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEoKSk7Ci0gICAgU3Bl
Y3VsYXRlQ2VsbE9wZXJhbmQgb3AyKHRoaXMsIG5vZGUuY2hpbGQyKCkpOworICAgIFNwZWN1bGF0
ZUNlbGxPcGVyYW5kIG9wMSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CisgICAgU3BlY3VsYXRlQ2Vs
bE9wZXJhbmQgb3AyKHRoaXMsIG5vZGUtPmNoaWxkMigpKTsKICAgICAKICAgICBHUFJSZWcgb3Ax
R1BSID0gb3AxLmdwcigpOwogICAgIEdQUlJlZyBvcDJHUFIgPSBvcDIuZ3ByKCk7CiAgICAgCi0g
ICAgaWYgKG1faml0LmdyYXBoKCkuZ2xvYmFsT2JqZWN0Rm9yKG5vZGUuY29kZU9yaWdpbiktPm1h
c3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50KCktPmlzU3RpbGxWYWxpZCgpKSB7Ci0gICAg
ICAgIG1faml0LmdyYXBoKCkuZ2xvYmFsT2JqZWN0Rm9yKG5vZGUuY29kZU9yaWdpbiktPm1hc3F1
ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50KCktPmFkZChzcGVjdWxhdGlvbldhdGNocG9pbnQo
KSk7Ci0gICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVNvdXJjZTo6dW5i
b3hlZENlbGwob3AxR1BSKSwgbm9kZS5jaGlsZDEoKS5pbmRleCgpLCAKKyAgICBpZiAobV9qaXQu
Z3JhcGgoKS5nbG9iYWxPYmplY3RGb3Iobm9kZS0+Y29kZU9yaWdpbiktPm1hc3F1ZXJhZGVzQXNV
bmRlZmluZWRXYXRjaHBvaW50KCktPmlzU3RpbGxWYWxpZCgpKSB7CisgICAgICAgIG1faml0Lmdy
YXBoKCkuZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPmNvZGVPcmlnaW4pLT5tYXNxdWVyYWRlc0FzVW5k
ZWZpbmVkV2F0Y2hwb2ludCgpLT5hZGQoc3BlY3VsYXRpb25XYXRjaHBvaW50KCkpOworICAgICAg
ICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKG9w
MUdQUiksIG5vZGUtPmNoaWxkMSgpLCAKICAgICAgICAgICAgIG1faml0LmJyYW5jaFB0cigKICAg
ICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIAogICAgICAgICAgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKG9wMUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSks
IAogICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmds
b2JhbERhdGEoKS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOwotICAgICAgICBzcGVjdWxhdGlv
bkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKG9wMkdQUiksIG5vZGUu
Y2hpbGQyKCkuaW5kZXgoKSwgCisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNW
YWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwob3AyR1BSKSwgbm9kZS0+Y2hpbGQyKCksCiAgICAgICAg
ICAgICBtX2ppdC5icmFuY2hQdHIoCiAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkVx
dWFsLCAKICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhvcDJHUFIsIEpT
Q2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCAKQEAgLTE2MjAsMjQgKzE2MDcsMjQgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVBlZXBIb2xlT2JqZQogICAgICAgICBHUFJSZWcgc3RydWN0
dXJlR1BSID0gc3RydWN0dXJlLmdwcigpOwogCiAgICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3Mob3AxR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgc3Ry
dWN0dXJlR1BSKTsKLSAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlU291
cmNlOjp1bmJveGVkQ2VsbChvcDFHUFIpLCBub2RlLmNoaWxkMSgpLmluZGV4KCksIAorICAgICAg
ICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKG9w
MUdQUiksIG5vZGUtPmNoaWxkMSgpLAogICAgICAgICAgICAgbV9qaXQuYnJhbmNoUHRyKAogICAg
ICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgCiAgICAgICAgICAgICAgICAgc3Ry
dWN0dXJlR1BSLCAKICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0
cihtX2ppdC5nbG9iYWxEYXRhKCktPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpKTsKLSAgICAgICAg
c3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChvcDFH
UFIpLCBub2RlLmNoaWxkMSgpLmluZGV4KCksIAorICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJh
ZFR5cGUsIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKG9wMUdQUiksIG5vZGUtPmNoaWxkMSgp
LAogICAgICAgICAgICAgbV9qaXQuYnJhbmNoVGVzdDgoCiAgICAgICAgICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6Ok5vblplcm8sIAogICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKHN0cnVjdHVyZUdQUiwgU3RydWN0dXJlOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCAKICAg
ICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNV
bmRlZmluZWQpKSk7CiAKICAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhvcDJHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBzdHJ1Y3R1cmVHUFIpOwot
ICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRD
ZWxsKG9wMkdQUiksIG5vZGUuY2hpbGQyKCkuaW5kZXgoKSwgCisgICAgICAgIHNwZWN1bGF0aW9u
Q2hlY2soQmFkVHlwZSwgSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwob3AyR1BSKSwgbm9kZS0+
Y2hpbGQyKCksCiAgICAgICAgICAgICBtX2ppdC5icmFuY2hQdHIoCiAgICAgICAgICAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCAKICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmVHUFIsIAog
ICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2Jh
bERhdGEoKS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOwotICAgICAgICBzcGVjdWxhdGlvbkNo
ZWNrKEJhZFR5cGUsIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKG9wMkdQUiksIG5vZGUuY2hp
bGQyKCkuaW5kZXgoKSwgCisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1
ZVNvdXJjZTo6dW5ib3hlZENlbGwob3AyR1BSKSwgbm9kZS0+Y2hpbGQyKCksCiAgICAgICAgICAg
ICBtX2ppdC5icmFuY2hUZXN0OCgKICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm9u
WmVybywgCiAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RydWN0dXJl
R1BSLCBTdHJ1Y3R1cmU6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIApAQCAtMTY0OCwxMSArMTYz
NSwxMCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUGVlcEhvbGVPYmplCiAgICAganVt
cChub3RUYWtlbik7CiB9CiAKLXZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQZWVwSG9sZUlu
dGVnZXJCcmFuY2goTm9kZSYgbm9kZSwgTm9kZUluZGV4IGJyYW5jaE5vZGVJbmRleCwgSklUQ29t
cGlsZXI6OlJlbGF0aW9uYWxDb25kaXRpb24gY29uZGl0aW9uKQordm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZVBlZXBIb2xlSW50ZWdlckJyYW5jaChOb2RlKiBub2RlLCBOb2RlKiBicmFuY2hO
b2RlLCBKSVRDb21waWxlcjo6UmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24pCiB7Ci0gICAg
Tm9kZSYgYnJhbmNoTm9kZSA9IGF0KGJyYW5jaE5vZGVJbmRleCk7Ci0gICAgQmxvY2tJbmRleCB0
YWtlbiA9IGJyYW5jaE5vZGUudGFrZW5CbG9ja0luZGV4KCk7Ci0gICAgQmxvY2tJbmRleCBub3RU
YWtlbiA9IGJyYW5jaE5vZGUubm90VGFrZW5CbG9ja0luZGV4KCk7CisgICAgQmxvY2tJbmRleCB0
YWtlbiA9IGJyYW5jaE5vZGUtPnRha2VuQmxvY2tJbmRleCgpOworICAgIEJsb2NrSW5kZXggbm90
VGFrZW4gPSBicmFuY2hOb2RlLT5ub3RUYWtlbkJsb2NrSW5kZXgoKTsKIAogICAgIC8vIFRoZSBi
cmFuY2ggaW5zdHJ1Y3Rpb24gd2lsbCBicmFuY2ggdG8gdGhlIHRha2VuIGJsb2NrLgogICAgIC8v
IElmIHRha2VuIGlzIG5leHQsIHN3aXRjaCB0YWtlbiB3aXRoIG5vdFRha2VuICYgaW52ZXJ0IHRo
ZSBicmFuY2ggY29uZGl0aW9uIHNvIHdlIGNhbiBmYWxsIHRocm91Z2guCkBAIC0xNjYzLDE3ICsx
NjQ5LDE3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQZWVwSG9sZUludGUKICAgICAg
ICAgbm90VGFrZW4gPSB0bXA7CiAgICAgfQogCi0gICAgaWYgKGlzSW50MzJDb25zdGFudChub2Rl
LmNoaWxkMSgpLmluZGV4KCkpKSB7Ci0gICAgICAgIGludDMyX3QgaW1tID0gdmFsdWVPZkludDMy
Q29uc3RhbnQobm9kZS5jaGlsZDEoKS5pbmRleCgpKTsKLSAgICAgICAgU3BlY3VsYXRlSW50ZWdl
ck9wZXJhbmQgb3AyKHRoaXMsIG5vZGUuY2hpbGQyKCkpOworICAgIGlmIChpc0ludDMyQ29uc3Rh
bnQobm9kZS0+Y2hpbGQxKCkubm9kZSgpKSkgeworICAgICAgICBpbnQzMl90IGltbSA9IHZhbHVl
T2ZJbnQzMkNvbnN0YW50KG5vZGUtPmNoaWxkMSgpLm5vZGUoKSk7CisgICAgICAgIFNwZWN1bGF0
ZUludGVnZXJPcGVyYW5kIG9wMih0aGlzLCBub2RlLT5jaGlsZDIoKSk7CiAgICAgICAgIGJyYW5j
aDMyKGNvbmRpdGlvbiwgSklUQ29tcGlsZXI6OkltbTMyKGltbSksIG9wMi5ncHIoKSwgdGFrZW4p
OwotICAgIH0gZWxzZSBpZiAoaXNJbnQzMkNvbnN0YW50KG5vZGUuY2hpbGQyKCkuaW5kZXgoKSkp
IHsKLSAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQx
KCkpOwotICAgICAgICBpbnQzMl90IGltbSA9IHZhbHVlT2ZJbnQzMkNvbnN0YW50KG5vZGUuY2hp
bGQyKCkuaW5kZXgoKSk7CisgICAgfSBlbHNlIGlmIChpc0ludDMyQ29uc3RhbnQobm9kZS0+Y2hp
bGQyKCkubm9kZSgpKSkgeworICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDEodGhp
cywgbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBpbnQzMl90IGltbSA9IHZhbHVlT2ZJbnQzMkNv
bnN0YW50KG5vZGUtPmNoaWxkMigpLm5vZGUoKSk7CiAgICAgICAgIGJyYW5jaDMyKGNvbmRpdGlv
biwgb3AxLmdwcigpLCBKSVRDb21waWxlcjo6SW1tMzIoaW1tKSwgdGFrZW4pOwogICAgIH0gZWxz
ZSB7Ci0gICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxk
MSgpKTsKLSAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AyKHRoaXMsIG5vZGUuY2hp
bGQyKCkpOworICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDEodGhpcywgbm9kZS0+
Y2hpbGQxKCkpOworICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDIodGhpcywgbm9k
ZS0+Y2hpbGQyKCkpOwogICAgICAgICBicmFuY2gzMihjb25kaXRpb24sIG9wMS5ncHIoKSwgb3Ay
LmdwcigpLCB0YWtlbik7CiAgICAgfQogCkBAIC0xNjgxLDc0ICsxNjY3LDc0IEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGVQZWVwSG9sZUludGUKIH0KIAogLy8gUmV0dXJucyB0cnVlIGlm
IHRoZSBjb21wYXJlIGlzIGZ1c2VkIHdpdGggYSBzdWJzZXF1ZW50IGJyYW5jaC4KLWJvb2wgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGVQZWVwSG9sZUJyYW5jaChOb2RlJiBub2RlLCBNYWNyb0Fzc2Vt
Ymxlcjo6UmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24sIE1hY3JvQXNzZW1ibGVyOjpEb3Vi
bGVDb25kaXRpb24gZG91YmxlQ29uZGl0aW9uLCBTX0RGR09wZXJhdGlvbl9FSkogb3BlcmF0aW9u
KQorYm9vbCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVBlZXBIb2xlQnJhbmNoKE5vZGUqIG5vZGUs
IE1hY3JvQXNzZW1ibGVyOjpSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbiwgTWFjcm9Bc3Nl
bWJsZXI6OkRvdWJsZUNvbmRpdGlvbiBkb3VibGVDb25kaXRpb24sIFNfREZHT3BlcmF0aW9uX0VK
SiBvcGVyYXRpb24pCiB7CiAgICAgLy8gRnVzZWQgY29tcGFyZSAmIGJyYW5jaC4KICAgICB1bnNp
Z25lZCBicmFuY2hJbmRleEluQmxvY2sgPSBkZXRlY3RQZWVwSG9sZUJyYW5jaCgpOwogICAgIGlm
IChicmFuY2hJbmRleEluQmxvY2sgIT0gVUlOVF9NQVgpIHsKLSAgICAgICAgTm9kZUluZGV4IGJy
YW5jaE5vZGVJbmRleCA9IG1faml0LmdyYXBoKCkubV9ibG9ja3NbbV9ibG9ja10tPmF0KGJyYW5j
aEluZGV4SW5CbG9jayk7CisgICAgICAgIE5vZGUqIGJyYW5jaE5vZGUgPSBtX2ppdC5ncmFwaCgp
Lm1fYmxvY2tzW21fYmxvY2tdLT5hdChicmFuY2hJbmRleEluQmxvY2spOwogCiAgICAgICAgIC8v
IGRldGVjdFBlZXBIb2xlQnJhbmNoIGN1cnJlbnRseSBvbmx5IHBlcm1pdHMgdGhlIGJyYW5jaCB0
byBiZSB0aGUgdmVyeSBuZXh0IG5vZGUsCiAgICAgICAgIC8vIHNvIGNhbiBiZSBubyBpbnRlcnZl
bmluZyBub2RlcyB0byBhbHNvIHJlZmVyZW5jZSB0aGUgY29tcGFyZS4gCi0gICAgICAgIEFTU0VS
VChub2RlLmFkanVzdGVkUmVmQ291bnQoKSA9PSAxKTsKKyAgICAgICAgQVNTRVJUKG5vZGUtPmFk
anVzdGVkUmVmQ291bnQoKSA9PSAxKTsKIAotICAgICAgICBpZiAoTm9kZTo6c2hvdWxkU3BlY3Vs
YXRlSW50ZWdlcihhdChub2RlLmNoaWxkMSgpKSwgYXQobm9kZS5jaGlsZDIoKSkpKQotICAgICAg
ICAgICAgY29tcGlsZVBlZXBIb2xlSW50ZWdlckJyYW5jaChub2RlLCBicmFuY2hOb2RlSW5kZXgs
IGNvbmRpdGlvbik7Ci0gICAgICAgIGVsc2UgaWYgKE5vZGU6OnNob3VsZFNwZWN1bGF0ZU51bWJl
cihhdChub2RlLmNoaWxkMSgpKSwgYXQobm9kZS5jaGlsZDIoKSkpKQotICAgICAgICAgICAgY29t
cGlsZVBlZXBIb2xlRG91YmxlQnJhbmNoKG5vZGUsIGJyYW5jaE5vZGVJbmRleCwgZG91YmxlQ29u
ZGl0aW9uKTsKLSAgICAgICAgZWxzZSBpZiAobm9kZS5vcCgpID09IENvbXBhcmVFcSkgewotICAg
ICAgICAgICAgaWYgKGF0KG5vZGUuY2hpbGQxKCkpLnNob3VsZFNwZWN1bGF0ZVN0cmluZygpIHx8
IGF0KG5vZGUuY2hpbGQyKCkpLnNob3VsZFNwZWN1bGF0ZVN0cmluZygpKSB7Ci0gICAgICAgICAg
ICAgICAgbm9uU3BlY3VsYXRpdmVQZWVwaG9sZUJyYW5jaChub2RlLCBicmFuY2hOb2RlSW5kZXgs
IGNvbmRpdGlvbiwgb3BlcmF0aW9uKTsKKyAgICAgICAgaWYgKE5vZGU6OnNob3VsZFNwZWN1bGF0
ZUludGVnZXIobm9kZS0+Y2hpbGQxKCkubm9kZSgpLCBub2RlLT5jaGlsZDIoKS5ub2RlKCkpKQor
ICAgICAgICAgICAgY29tcGlsZVBlZXBIb2xlSW50ZWdlckJyYW5jaChub2RlLCBicmFuY2hOb2Rl
LCBjb25kaXRpb24pOworICAgICAgICBlbHNlIGlmIChOb2RlOjpzaG91bGRTcGVjdWxhdGVOdW1i
ZXIobm9kZS0+Y2hpbGQxKCkubm9kZSgpLCBub2RlLT5jaGlsZDIoKS5ub2RlKCkpKQorICAgICAg
ICAgICAgY29tcGlsZVBlZXBIb2xlRG91YmxlQnJhbmNoKG5vZGUsIGJyYW5jaE5vZGUsIGRvdWJs
ZUNvbmRpdGlvbik7CisgICAgICAgIGVsc2UgaWYgKG5vZGUtPm9wKCkgPT0gQ29tcGFyZUVxKSB7
CisgICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZVN0cmluZygp
IHx8IG5vZGUtPmNoaWxkMigpLT5zaG91bGRTcGVjdWxhdGVTdHJpbmcoKSkgeworICAgICAgICAg
ICAgICAgIG5vblNwZWN1bGF0aXZlUGVlcGhvbGVCcmFuY2gobm9kZSwgYnJhbmNoTm9kZSwgY29u
ZGl0aW9uLCBvcGVyYXRpb24pOwogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAg
ICAgICAgfQotICAgICAgICAgICAgaWYgKGF0KG5vZGUuY2hpbGQxKCkpLnNob3VsZFNwZWN1bGF0
ZU5vblN0cmluZ0NlbGwoKSAmJiBhdChub2RlLmNoaWxkMigpKS5zaG91bGRTcGVjdWxhdGVOb25T
dHJpbmdDZWxsT3JPdGhlcigpKQotICAgICAgICAgICAgICAgIGNvbXBpbGVQZWVwSG9sZU9iamVj
dFRvT2JqZWN0T3JPdGhlckVxdWFsaXR5KG5vZGUuY2hpbGQxKCksIG5vZGUuY2hpbGQyKCksIGJy
YW5jaE5vZGVJbmRleCk7Ci0gICAgICAgICAgICBlbHNlIGlmIChhdChub2RlLmNoaWxkMSgpKS5z
aG91bGRTcGVjdWxhdGVOb25TdHJpbmdDZWxsT3JPdGhlcigpICYmIGF0KG5vZGUuY2hpbGQyKCkp
LnNob3VsZFNwZWN1bGF0ZU5vblN0cmluZ0NlbGwoKSkKLSAgICAgICAgICAgICAgICBjb21waWxl
UGVlcEhvbGVPYmplY3RUb09iamVjdE9yT3RoZXJFcXVhbGl0eShub2RlLmNoaWxkMigpLCBub2Rl
LmNoaWxkMSgpLCBicmFuY2hOb2RlSW5kZXgpOwotICAgICAgICAgICAgZWxzZSBpZiAoYXQobm9k
ZS5jaGlsZDEoKSkuc2hvdWxkU3BlY3VsYXRlTm9uU3RyaW5nQ2VsbCgpICYmIGF0KG5vZGUuY2hp
bGQyKCkpLnNob3VsZFNwZWN1bGF0ZU5vblN0cmluZ0NlbGwoKSkKLSAgICAgICAgICAgICAgICBj
b21waWxlUGVlcEhvbGVPYmplY3RFcXVhbGl0eShub2RlLCBicmFuY2hOb2RlSW5kZXgpOworICAg
ICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVOb25TdHJpbmdDZWxs
KCkgJiYgbm9kZS0+Y2hpbGQyKCktPnNob3VsZFNwZWN1bGF0ZU5vblN0cmluZ0NlbGxPck90aGVy
KCkpCisgICAgICAgICAgICAgICAgY29tcGlsZVBlZXBIb2xlT2JqZWN0VG9PYmplY3RPck90aGVy
RXF1YWxpdHkobm9kZS0+Y2hpbGQxKCksIG5vZGUtPmNoaWxkMigpLCBicmFuY2hOb2RlKTsKKyAg
ICAgICAgICAgIGVsc2UgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVOb25TdHJp
bmdDZWxsT3JPdGhlcigpICYmIG5vZGUtPmNoaWxkMigpLT5zaG91bGRTcGVjdWxhdGVOb25TdHJp
bmdDZWxsKCkpCisgICAgICAgICAgICAgICAgY29tcGlsZVBlZXBIb2xlT2JqZWN0VG9PYmplY3RP
ck90aGVyRXF1YWxpdHkobm9kZS0+Y2hpbGQyKCksIG5vZGUtPmNoaWxkMSgpLCBicmFuY2hOb2Rl
KTsKKyAgICAgICAgICAgIGVsc2UgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVO
b25TdHJpbmdDZWxsKCkgJiYgbm9kZS0+Y2hpbGQyKCktPnNob3VsZFNwZWN1bGF0ZU5vblN0cmlu
Z0NlbGwoKSkKKyAgICAgICAgICAgICAgICBjb21waWxlUGVlcEhvbGVPYmplY3RFcXVhbGl0eShu
b2RlLCBicmFuY2hOb2RlKTsKICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIG5v
blNwZWN1bGF0aXZlUGVlcGhvbGVCcmFuY2gobm9kZSwgYnJhbmNoTm9kZUluZGV4LCBjb25kaXRp
b24sIG9wZXJhdGlvbik7CisgICAgICAgICAgICAgICAgbm9uU3BlY3VsYXRpdmVQZWVwaG9sZUJy
YW5jaChub2RlLCBicmFuY2hOb2RlLCBjb25kaXRpb24sIG9wZXJhdGlvbik7CiAgICAgICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICBub25TcGVjdWxhdGl2ZVBlZXBob2xlQnJhbmNoKG5vZGUsIGJyYW5jaE5vZGVJbmRl
eCwgY29uZGl0aW9uLCBvcGVyYXRpb24pOworICAgICAgICAgICAgbm9uU3BlY3VsYXRpdmVQZWVw
aG9sZUJyYW5jaChub2RlLCBicmFuY2hOb2RlLCBjb25kaXRpb24sIG9wZXJhdGlvbik7CiAgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogCi0gICAgICAgIHVzZShub2RlLmNoaWxk
MSgpKTsKLSAgICAgICAgdXNlKG5vZGUuY2hpbGQyKCkpOworICAgICAgICB1c2Uobm9kZS0+Y2hp
bGQxKCkpOworICAgICAgICB1c2Uobm9kZS0+Y2hpbGQyKCkpOwogICAgICAgICBtX2luZGV4SW5C
bG9jayA9IGJyYW5jaEluZGV4SW5CbG9jazsKLSAgICAgICAgbV9jb21waWxlSW5kZXggPSBicmFu
Y2hOb2RlSW5kZXg7CisgICAgICAgIG1fY3VycmVudE5vZGUgPSBicmFuY2hOb2RlOwogICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIFNwZWN1
bGF0aXZlSklUOjpub3RpY2VPU1JCaXJ0aChOb2RlSW5kZXggbm9kZUluZGV4LCBOb2RlJiBub2Rl
KQordm9pZCBTcGVjdWxhdGl2ZUpJVDo6bm90aWNlT1NSQmlydGgoTm9kZSogbm9kZSkKIHsKLSAg
ICBpZiAoIW5vZGUuaGFzVmlydHVhbFJlZ2lzdGVyKCkpCisgICAgaWYgKCFub2RlLT5oYXNWaXJ0
dWFsUmVnaXN0ZXIoKSkKICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIFZpcnR1YWxSZWdpc3Rl
ciB2aXJ0dWFsUmVnaXN0ZXIgPSBub2RlLnZpcnR1YWxSZWdpc3RlcigpOworICAgIFZpcnR1YWxS
ZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIgPSBub2RlLT52aXJ0dWFsUmVnaXN0ZXIoKTsKICAgICBH
ZW5lcmF0aW9uSW5mbyYgaW5mbyA9IG1fZ2VuZXJhdGlvbkluZm9bdmlydHVhbFJlZ2lzdGVyXTsK
ICAgICAKLSAgICBpbmZvLm5vdGljZU9TUkJpcnRoKCptX3N0cmVhbSwgbm9kZUluZGV4LCB2aXJ0
dWFsUmVnaXN0ZXIpOworICAgIGluZm8ubm90aWNlT1NSQmlydGgoKm1fc3RyZWFtLCBub2RlLCB2
aXJ0dWFsUmVnaXN0ZXIpOwogfQogCi12b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlTW92SGlu
dChOb2RlJiBub2RlKQordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU1vdkhpbnQoTm9kZSog
bm9kZSkKIHsKLSAgICBBU1NFUlQobm9kZS5vcCgpID09IFNldExvY2FsKTsKKyAgICBBU1NFUlQo
bm9kZS0+b3AoKSA9PSBTZXRMb2NhbCk7CiAgICAgCi0gICAgbV9sYXN0U2V0T3BlcmFuZCA9IG5v
ZGUubG9jYWwoKTsKLSAgICAKLSAgICBOb2RlJiBjaGlsZCA9IGF0KG5vZGUuY2hpbGQxKCkpOwot
ICAgIG5vdGljZU9TUkJpcnRoKG5vZGUuY2hpbGQxKCkuaW5kZXgoKSwgY2hpbGQpOworICAgIG1f
bGFzdFNldE9wZXJhbmQgPSBub2RlLT5sb2NhbCgpOworCisgICAgTm9kZSogY2hpbGQgPSBub2Rl
LT5jaGlsZDEoKS5ub2RlKCk7CisgICAgbm90aWNlT1NSQmlydGgoY2hpbGQpOwogICAgIAotICAg
IGlmIChjaGlsZC5vcCgpID09IFVJbnQzMlRvTnVtYmVyKQotICAgICAgICBub3RpY2VPU1JCaXJ0
aChjaGlsZC5jaGlsZDEoKS5pbmRleCgpLCBhdChjaGlsZC5jaGlsZDEoKSkpOworICAgIGlmIChj
aGlsZC0+b3AoKSA9PSBVSW50MzJUb051bWJlcikKKyAgICAgICAgbm90aWNlT1NSQmlydGgoY2hp
bGQtPmNoaWxkMSgpLm5vZGUoKSk7CiAgICAgCi0gICAgbV9zdHJlYW0tPmFwcGVuZEFuZExvZyhW
YXJpYWJsZUV2ZW50Ojptb3ZIaW50KE1pbmlmaWVkSUQobm9kZS5jaGlsZDEoKS5pbmRleCgpKSwg
bm9kZS5sb2NhbCgpKSk7CisgICAgbV9zdHJlYW0tPmFwcGVuZEFuZExvZyhWYXJpYWJsZUV2ZW50
Ojptb3ZIaW50KE1pbmlmaWVkSUQoY2hpbGQpLCBub2RlLT5sb2NhbCgpKSk7CiB9CiAKIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoQmFzaWNCbG9jayYgYmxvY2spCkBAIC0xNzkzLDIxICsx
Nzc5LDIyIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoQmFzaWNCbG9jayYKICAgICAK
ICAgICBBU1NFUlQobV92YXJpYWJsZXMuc2l6ZSgpID09IGJsb2NrLnZhcmlhYmxlc0F0SGVhZC5u
dW1iZXJPZkxvY2FscygpKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fdmFyaWFibGVz
LnNpemUoKTsgKytpKSB7Ci0gICAgICAgIE5vZGVJbmRleCBub2RlSW5kZXggPSBibG9jay52YXJp
YWJsZXNBdEhlYWQubG9jYWwoaSk7CisgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay52YXJpYWJs
ZXNBdEhlYWQubG9jYWwoaSk7CiAgICAgICAgIFZhbHVlU291cmNlIHZhbHVlU291cmNlOwotICAg
ICAgICBpZiAobm9kZUluZGV4ID09IE5vTm9kZSkKKyAgICAgICAgaWYgKCFub2RlKQogICAgICAg
ICAgICAgdmFsdWVTb3VyY2UgPSBWYWx1ZVNvdXJjZShTb3VyY2VJc0RlYWQpOwotICAgICAgICBl
bHNlIGlmIChhdChub2RlSW5kZXgpLnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5pc0FyZ3VtZW50c0Fs
aWFzKCkpCisgICAgICAgIGVsc2UgaWYgKG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5pc0Fy
Z3VtZW50c0FsaWFzKCkpCiAgICAgICAgICAgICB2YWx1ZVNvdXJjZSA9IFZhbHVlU291cmNlKEFy
Z3VtZW50c1NvdXJjZSk7Ci0gICAgICAgIGVsc2UgaWYgKGF0KG5vZGVJbmRleCkudmFyaWFibGVB
Y2Nlc3NEYXRhKCktPmlzQ2FwdHVyZWQoKSkKKyAgICAgICAgZWxzZSBpZiAobm9kZS0+dmFyaWFi
bGVBY2Nlc3NEYXRhKCktPmlzQ2FwdHVyZWQoKSkKICAgICAgICAgICAgIHZhbHVlU291cmNlID0g
VmFsdWVTb3VyY2UoVmFsdWVJbkpTU3RhY2spOwotICAgICAgICBlbHNlIGlmICghYXQobm9kZUlu
ZGV4KS5yZWZDb3VudCgpKQorICAgICAgICBlbHNlIGlmICghbm9kZS0+cmVmQ291bnQoKSkKICAg
ICAgICAgICAgIHZhbHVlU291cmNlID0gVmFsdWVTb3VyY2UoU291cmNlSXNEZWFkKTsKLSAgICAg
ICAgZWxzZSBpZiAoYXQobm9kZUluZGV4KS52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+c2hvdWxkVXNl
RG91YmxlRm9ybWF0KCkpCisgICAgICAgIGVsc2UgaWYgKG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0
YSgpLT5zaG91bGRVc2VEb3VibGVGb3JtYXQoKSkKICAgICAgICAgICAgIHZhbHVlU291cmNlID0g
VmFsdWVTb3VyY2UoRG91YmxlSW5KU1N0YWNrKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAg
dmFsdWVTb3VyY2UgPSBWYWx1ZVNvdXJjZTo6Zm9yU3BlY3VsYXRpb24oYXQobm9kZUluZGV4KS52
YXJpYWJsZUFjY2Vzc0RhdGEoKS0+YXJndW1lbnRBd2FyZVByZWRpY3Rpb24oKSk7CisgICAgICAg
ICAgICB2YWx1ZVNvdXJjZSA9IFZhbHVlU291cmNlOjpmb3JTcGVjdWxhdGlvbihub2RlLT52YXJp
YWJsZUFjY2Vzc0RhdGEoKS0+YXJndW1lbnRBd2FyZVByZWRpY3Rpb24oKSk7CiAgICAgICAgIG1f
dmFyaWFibGVzW2ldID0gdmFsdWVTb3VyY2U7CisgICAgICAgIC8vIEZJWE1FOiBEb24ndCBlbWl0
IFNldExvY2FsKERlYWQpLiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTA4MDE5CiAgICAgICAgIG1fc3RyZWFtLT5hcHBlbmRBbmRMb2coVmFyaWFibGVFdmVudDo6c2V0
TG9jYWwoaSwgdmFsdWVTb3VyY2UuZGF0YUZvcm1hdCgpKSk7CiAgICAgfQogICAgIApAQCAtMTgy
NiwzMiArMTgxMywzMSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKEJhc2ljQmxvY2sm
CiAjZW5kaWYKIAogICAgIGZvciAobV9pbmRleEluQmxvY2sgPSAwOyBtX2luZGV4SW5CbG9jayA8
IGJsb2NrLnNpemUoKTsgKyttX2luZGV4SW5CbG9jaykgewotICAgICAgICBtX2NvbXBpbGVJbmRl
eCA9IGJsb2NrW21faW5kZXhJbkJsb2NrXTsKLSAgICAgICAgbV9qaXQuc2V0Rm9yTm9kZShtX2Nv
bXBpbGVJbmRleCk7Ci0gICAgICAgIE5vZGUmIG5vZGUgPSBhdChtX2NvbXBpbGVJbmRleCk7Ci0g
ICAgICAgIG1fY29kZU9yaWdpbkZvck9TUiA9IG5vZGUuY29kZU9yaWdpbjsKLSAgICAgICAgaWYg
KCFub2RlLnNob3VsZEdlbmVyYXRlKCkpIHsKKyAgICAgICAgbV9jdXJyZW50Tm9kZSA9IGJsb2Nr
W21faW5kZXhJbkJsb2NrXTsKKyAgICAgICAgbV9qaXQuc2V0Rm9yTm9kZShtX2N1cnJlbnROb2Rl
KTsKKyAgICAgICAgbV9jb2RlT3JpZ2luRm9yT1NSID0gbV9jdXJyZW50Tm9kZS0+Y29kZU9yaWdp
bjsKKyAgICAgICAgaWYgKCFtX2N1cnJlbnROb2RlLT5zaG91bGRHZW5lcmF0ZSgpKSB7CiAjaWYg
REZHX0VOQUJMRShERUJVR19WRVJCT1NFKQotICAgICAgICAgICAgZGF0YUxvZ0YoIlNwZWN1bGF0
aXZlSklUIHNraXBwaW5nIE5vZGUgQCVkIChiYyMldSkgYXQgSklUIG9mZnNldCAweCV4ICAgICAi
LCAoaW50KW1fY29tcGlsZUluZGV4LCBub2RlLmNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCwgbV9q
aXQuZGVidWdPZmZzZXQoKSk7CisgICAgICAgICAgICBkYXRhTG9nRigiU3BlY3VsYXRpdmVKSVQg
c2tpcHBpbmcgTm9kZSBAJWQgKGJjIyV1KSBhdCBKSVQgb2Zmc2V0IDB4JXggICAgICIsIG1fY3Vy
cmVudE5vZGUtPmluZGV4KCksIG1fY3VycmVudE5vZGUtPmNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRl
eCwgbV9qaXQuZGVidWdPZmZzZXQoKSk7CiAjZW5kaWYKLSAgICAgICAgICAgIHN3aXRjaCAobm9k
ZS5vcCgpKSB7CisgICAgICAgICAgICBzd2l0Y2ggKG1fY3VycmVudE5vZGUtPm9wKCkpIHsKICAg
ICAgICAgICAgIGNhc2UgSlNDb25zdGFudDoKLSAgICAgICAgICAgICAgICBtX21pbmlmaWVkR3Jh
cGgtPmFwcGVuZChNaW5pZmllZE5vZGU6OmZyb21Ob2RlKG1fY29tcGlsZUluZGV4LCBub2RlKSk7
CisgICAgICAgICAgICAgICAgbV9taW5pZmllZEdyYXBoLT5hcHBlbmQoTWluaWZpZWROb2RlOjpm
cm9tTm9kZShtX2N1cnJlbnROb2RlKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICAgICAgCiAgICAgICAgICAgICBjYXNlIFdlYWtKU0NvbnN0YW50OgotICAgICAgICAgICAg
ICAgIG1faml0LmFkZFdlYWtSZWZlcmVuY2Uobm9kZS53ZWFrQ29uc3RhbnQoKSk7Ci0gICAgICAg
ICAgICAgICAgbV9taW5pZmllZEdyYXBoLT5hcHBlbmQoTWluaWZpZWROb2RlOjpmcm9tTm9kZSht
X2NvbXBpbGVJbmRleCwgbm9kZSkpOworICAgICAgICAgICAgICAgIG1faml0LmFkZFdlYWtSZWZl
cmVuY2UobV9jdXJyZW50Tm9kZS0+d2Vha0NvbnN0YW50KCkpOworICAgICAgICAgICAgICAgIG1f
bWluaWZpZWRHcmFwaC0+YXBwZW5kKE1pbmlmaWVkTm9kZTo6ZnJvbU5vZGUobV9jdXJyZW50Tm9k
ZSkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIAogICAgICAgICAg
ICAgY2FzZSBTZXRMb2NhbDoKLSAgICAgICAgICAgICAgICBjb21waWxlTW92SGludChub2RlKTsK
KyAgICAgICAgICAgICAgICBjb21waWxlTW92SGludChtX2N1cnJlbnROb2RlKTsKICAgICAgICAg
ICAgICAgICBicmVhazsKIAogICAgICAgICAgICAgY2FzZSBJbmxpbmVTdGFydDogewotICAgICAg
ICAgICAgICAgIElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lID0gbm9kZS5jb2RlT3Jp
Z2luLmlubGluZUNhbGxGcmFtZTsKKyAgICAgICAgICAgICAgICBJbmxpbmVDYWxsRnJhbWUqIGlu
bGluZUNhbGxGcmFtZSA9IG1fY3VycmVudE5vZGUtPmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1l
OwogICAgICAgICAgICAgICAgIGludCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA9IGlubGlu
ZUNhbGxGcmFtZS0+YXJndW1lbnRzLnNpemUoKTsKLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBh
cmd1bWVudFBvc2l0aW9uU3RhcnQgPSBub2RlLmFyZ3VtZW50UG9zaXRpb25TdGFydCgpOworICAg
ICAgICAgICAgICAgIHVuc2lnbmVkIGFyZ3VtZW50UG9zaXRpb25TdGFydCA9IG1fY3VycmVudE5v
ZGUtPmFyZ3VtZW50UG9zaXRpb25TdGFydCgpOwogICAgICAgICAgICAgICAgIENvZGVCbG9jayog
Y29kZUJsb2NrID0gYmFzZWxpbmVDb2RlQmxvY2tGb3JJbmxpbmVDYWxsRnJhbWUoaW5saW5lQ2Fs
bEZyYW1lKTsKICAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGFyZ3VtZW50Q291
bnRJbmNsdWRpbmdUaGlzOyArK2kpIHsKICAgICAgICAgICAgICAgICAgICAgVmFsdWVSZWNvdmVy
eSByZWNvdmVyeTsKQEAgLTE4ODgsMzkgKzE4NzQsMzkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZShCYXNpY0Jsb2NrJgogICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIAogICAg
ICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBpZiAoYmVsb25nc0luTWluaWZpZWRH
cmFwaChub2RlLm9wKCkpKQotICAgICAgICAgICAgICAgICAgICBtX21pbmlmaWVkR3JhcGgtPmFw
cGVuZChNaW5pZmllZE5vZGU6OmZyb21Ob2RlKG1fY29tcGlsZUluZGV4LCBub2RlKSk7CisgICAg
ICAgICAgICAgICAgaWYgKGJlbG9uZ3NJbk1pbmlmaWVkR3JhcGgobV9jdXJyZW50Tm9kZS0+b3Ao
KSkpCisgICAgICAgICAgICAgICAgICAgIG1fbWluaWZpZWRHcmFwaC0+YXBwZW5kKE1pbmlmaWVk
Tm9kZTo6ZnJvbU5vZGUobV9jdXJyZW50Tm9kZSkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgCiAjaWYgREZHX0VO
QUJMRShERUJVR19WRVJCT1NFKQotICAgICAgICAgICAgZGF0YUxvZ0YoIlNwZWN1bGF0aXZlSklU
IGdlbmVyYXRpbmcgTm9kZSBAJWQgKGJjIyV1KSBhdCBKSVQgb2Zmc2V0IDB4JXggICAiLCAoaW50
KW1fY29tcGlsZUluZGV4LCBub2RlLmNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCwgbV9qaXQuZGVi
dWdPZmZzZXQoKSk7CisgICAgICAgICAgICBkYXRhTG9nRigiU3BlY3VsYXRpdmVKSVQgZ2VuZXJh
dGluZyBOb2RlIEAlZCAoYmMjJXUpIGF0IEpJVCBvZmZzZXQgMHgleCAgICIsIChpbnQpbV9jdXJy
ZW50Tm9kZS0+aW5kZXgoKSwgbV9jdXJyZXROb2RlLT5jb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgs
IG1faml0LmRlYnVnT2Zmc2V0KCkpOwogI2VuZGlmCiAjaWYgREZHX0VOQUJMRShKSVRfQlJFQUtf
T05fRVZFUllfTk9ERSkKICAgICAgICAgICAgIG1faml0LmJyZWFrcG9pbnQoKTsKICNlbmRpZgog
I2lmIERGR19FTkFCTEUoWE9SX0RFQlVHX0FJRCkKLSAgICAgICAgICAgIG1faml0LnhvclB0cihK
SVRDb21waWxlcjo6VHJ1c3RlZEltbTMyKG1fY29tcGlsZUluZGV4KSwgR1BSSW5mbzo6cmVnVDAp
OwotICAgICAgICAgICAgbV9qaXQueG9yUHRyKEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tMzIobV9j
b21waWxlSW5kZXgpLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAgICAgICBtX2ppdC54b3JQdHIo
SklUQ29tcGlsZXI6OlRydXN0ZWRJbW0zMihtX2N1cnJlbnROb2RlLT5pbmRleCgpKSwgR1BSSW5m
bzo6cmVnVDApOworICAgICAgICAgICAgbV9qaXQueG9yUHRyKEpJVENvbXBpbGVyOjpUcnVzdGVk
SW1tMzIobV9jdXJyZW50Tm9kZS0+aW5kZXgoKSksIEdQUkluZm86OnJlZ1QwKTsKICNlbmRpZgog
ICAgICAgICAgICAgY2hlY2tDb25zaXN0ZW5jeSgpOwotICAgICAgICAgICAgY29tcGlsZShub2Rl
KTsKKyAgICAgICAgICAgIGNvbXBpbGUobV9jdXJyZW50Tm9kZSk7CiAgICAgICAgICAgICBpZiAo
IW1fY29tcGlsZU9rYXkpIHsKICAgICAgICAgICAgICAgICBtX2NvbXBpbGVPa2F5ID0gdHJ1ZTsK
ICAgICAgICAgICAgICAgICBjbGVhckdlbmVyYXRpb25JbmZvKCk7CiAgICAgICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoYmVs
b25nc0luTWluaWZpZWRHcmFwaChub2RlLm9wKCkpKSB7Ci0gICAgICAgICAgICAgICAgbV9taW5p
ZmllZEdyYXBoLT5hcHBlbmQoTWluaWZpZWROb2RlOjpmcm9tTm9kZShtX2NvbXBpbGVJbmRleCwg
bm9kZSkpOwotICAgICAgICAgICAgICAgIG5vdGljZU9TUkJpcnRoKG1fY29tcGlsZUluZGV4LCBu
b2RlKTsKKyAgICAgICAgICAgIGlmIChiZWxvbmdzSW5NaW5pZmllZEdyYXBoKG1fY3VycmVudE5v
ZGUtPm9wKCkpKSB7CisgICAgICAgICAgICAgICAgbV9taW5pZmllZEdyYXBoLT5hcHBlbmQoTWlu
aWZpZWROb2RlOjpmcm9tTm9kZShtX2N1cnJlbnROb2RlKSk7CisgICAgICAgICAgICAgICAgbm90
aWNlT1NSQmlydGgobV9jdXJyZW50Tm9kZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAK
ICNpZiBERkdfRU5BQkxFKERFQlVHX1ZFUkJPU0UpCi0gICAgICAgICAgICBpZiAobm9kZS5oYXNS
ZXN1bHQoKSkgewotICAgICAgICAgICAgICAgIEdlbmVyYXRpb25JbmZvJiBpbmZvID0gbV9nZW5l
cmF0aW9uSW5mb1tub2RlLnZpcnR1YWxSZWdpc3RlcigpXTsKLSAgICAgICAgICAgICAgICBkYXRh
TG9nRigiLT4gJXMsIHZyIyVkIiwgZGF0YUZvcm1hdFRvU3RyaW5nKGluZm8ucmVnaXN0ZXJGb3Jt
YXQoKSksIChpbnQpbm9kZS52aXJ0dWFsUmVnaXN0ZXIoKSk7CisgICAgICAgICAgICBpZiAobV9j
dXJyZW50Tm9kZS0+aGFzUmVzdWx0KCkpIHsKKyAgICAgICAgICAgICAgICBHZW5lcmF0aW9uSW5m
byYgaW5mbyA9IG1fZ2VuZXJhdGlvbkluZm9bbV9jdXJyZW50Tm9kZS0+dmlydHVhbFJlZ2lzdGVy
KCldOworICAgICAgICAgICAgICAgIGRhdGFMb2dGKCItPiAlcywgdnIjJWQiLCBkYXRhRm9ybWF0
VG9TdHJpbmcoaW5mby5yZWdpc3RlckZvcm1hdCgpKSwgKGludCltX2N1cnJlbnROb2RlLT52aXJ0
dWFsUmVnaXN0ZXIoKSk7CiAgICAgICAgICAgICAgICAgaWYgKGluZm8ucmVnaXN0ZXJGb3JtYXQo
KSAhPSBEYXRhRm9ybWF0Tm9uZSkgewogICAgICAgICAgICAgICAgICAgICBpZiAoaW5mby5yZWdp
c3RlckZvcm1hdCgpID09IERhdGFGb3JtYXREb3VibGUpCiAgICAgICAgICAgICAgICAgICAgICAg
ICBkYXRhTG9nRigiLCAlcyIsIEZQUkluZm86OmRlYnVnTmFtZShpbmZvLmZwcigpKSk7CkBAIC0x
OTQ0LDcgKzE5MzAsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKEJhc2ljQmxvY2sm
CiAgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHRoZSBhYnN0cmFjdCBzdGF0ZSBpcyByZW1hdGVy
aWFsaXplZCBmb3IgdGhlIG5leHQgbm9kZS4KICAgICAgICAgbV9zdGF0ZS5leGVjdXRlKG1faW5k
ZXhJbkJsb2NrKTsKICAgICAgICAgCi0gICAgICAgIGlmIChub2RlLnNob3VsZEdlbmVyYXRlKCkp
CisgICAgICAgIGlmIChtX2N1cnJlbnROb2RlLT5zaG91bGRHZW5lcmF0ZSgpKQogICAgICAgICAg
ICAgY2hlY2tDb25zaXN0ZW5jeSgpOwogICAgIH0KICAgICAKQEAgLTE5NjEsNyArMTk0Nyw3IEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoQmFzaWNCbG9jayYKIC8vIHdlIG5lZWQgdG8g
Y2hlY2sgdGhhdCB0aGV5IGFyZSBjb3JyZWN0IG9uIGZ1bmN0aW9uIGVudHJ5Lgogdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y2hlY2tBcmd1bWVudFR5cGVzKCkKIHsKLSAgICBBU1NFUlQoIW1fY29tcGls
ZUluZGV4KTsKKyAgICBBU1NFUlQoIW1fY3VycmVudE5vZGUpOwogICAgIG1faXNDaGVja2luZ0Fy
Z3VtZW50VHlwZXMgPSB0cnVlOwogICAgIG1fY29kZU9yaWdpbkZvck9TUiA9IENvZGVPcmlnaW4o
MCk7CiAKQEAgLTE5NzEsMTUgKzE5NTcsMTQgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y2hlY2tB
cmd1bWVudFR5cGVzKAogICAgICAgICBtX3ZhcmlhYmxlc1tpXSA9IFZhbHVlU291cmNlKFZhbHVl
SW5KU1N0YWNrKTsKICAgICAKICAgICBmb3IgKGludCBpID0gMDsgaSA8IG1faml0LmNvZGVCbG9j
aygpLT5udW1QYXJhbWV0ZXJzKCk7ICsraSkgewotICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4
ID0gbV9qaXQuZ3JhcGgoKS5tX2FyZ3VtZW50c1tpXTsKLSAgICAgICAgTm9kZSYgbm9kZSA9IGF0
KG5vZGVJbmRleCk7Ci0gICAgICAgIEFTU0VSVChub2RlLm9wKCkgPT0gU2V0QXJndW1lbnQpOwot
ICAgICAgICBpZiAoIW5vZGUuc2hvdWxkR2VuZXJhdGUoKSkgeworICAgICAgICBOb2RlKiBub2Rl
ID0gbV9qaXQuZ3JhcGgoKS5tX2FyZ3VtZW50c1tpXTsKKyAgICAgICAgQVNTRVJUKG5vZGUtPm9w
KCkgPT0gU2V0QXJndW1lbnQpOworICAgICAgICBpZiAoIW5vZGUtPnNob3VsZEdlbmVyYXRlKCkp
IHsKICAgICAgICAgICAgIC8vIFRoZSBhcmd1bWVudCBpcyBkZWFkLiBXZSBkb24ndCBkbyBhbnkg
Y2hlY2tzIGZvciBzdWNoIGFyZ3VtZW50cy4KICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAg
ICB9CiAgICAgICAgIAotICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNz
RGF0YSA9IG5vZGUudmFyaWFibGVBY2Nlc3NEYXRhKCk7CisgICAgICAgIFZhcmlhYmxlQWNjZXNz
RGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CiAg
ICAgICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIgPSB2YXJpYWJsZUFjY2Vzc0Rh
dGEtPmxvY2FsKCk7CiAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3RlZFR5cGUgPSB2YXJp
YWJsZUFjY2Vzc0RhdGEtPnByZWRpY3Rpb24oKTsKIApAQCAtMTk4NywyMSArMTk3MiwyMSBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjaGVja0FyZ3VtZW50VHlwZXMoCiAgICAgICAgIAogI2lmIFVT
RShKU1ZBTFVFNjQpCiAgICAgICAgIGlmIChpc0ludDMyU3BlY3VsYXRpb24ocHJlZGljdGVkVHlw
ZSkpCi0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIHZhbHVlU291cmNlLCBu
b2RlSW5kZXgsIG1faml0LmJyYW5jaDY0KE1hY3JvQXNzZW1ibGVyOjpCZWxvdywgSklUQ29tcGls
ZXI6OmFkZHJlc3NGb3IodmlydHVhbFJlZ2lzdGVyKSwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJl
Z2lzdGVyKSk7CisgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIHZhbHVlU291
cmNlLCBub2RlLCBtX2ppdC5icmFuY2g2NChNYWNyb0Fzc2VtYmxlcjo6QmVsb3csIEpJVENvbXBp
bGVyOjphZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3RlciksIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJS
ZWdpc3RlcikpOwogICAgICAgICBlbHNlIGlmIChpc0Jvb2xlYW5TcGVjdWxhdGlvbihwcmVkaWN0
ZWRUeXBlKSkgewogICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHRlbXAodGhpcyk7CiAgICAgICAg
ICAgICBtX2ppdC5sb2FkNjQoSklUQ29tcGlsZXI6OmFkZHJlc3NGb3IodmlydHVhbFJlZ2lzdGVy
KSwgdGVtcC5ncHIoKSk7CiAgICAgICAgICAgICBtX2ppdC54b3I2NChUcnVzdGVkSW1tMzIoc3Rh
dGljX2Nhc3Q8aW50MzJfdD4oVmFsdWVGYWxzZSkpLCB0ZW1wLmdwcigpKTsKLSAgICAgICAgICAg
IHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgdmFsdWVTb3VyY2UsIG5vZGVJbmRleCwgbV9qaXQu
YnJhbmNoVGVzdDY0KE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCB0ZW1wLmdwcigpLCBUcnVzdGVk
SW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4ofjEpKSkpOworICAgICAgICAgICAgc3BlY3VsYXRp
b25DaGVjayhCYWRUeXBlLCB2YWx1ZVNvdXJjZSwgbm9kZSwgbV9qaXQuYnJhbmNoVGVzdDY0KE1h
Y3JvQXNzZW1ibGVyOjpOb25aZXJvLCB0ZW1wLmdwcigpLCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nh
c3Q8aW50MzJfdD4ofjEpKSkpOwogICAgICAgICB9IGVsc2UgaWYgKGlzQ2VsbFNwZWN1bGF0aW9u
KHByZWRpY3RlZFR5cGUpKQotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCB2
YWx1ZVNvdXJjZSwgbm9kZUluZGV4LCBtX2ppdC5icmFuY2hUZXN0NjQoTWFjcm9Bc3NlbWJsZXI6
Ok5vblplcm8sIEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3RlciksIEdQUklu
Zm86OnRhZ01hc2tSZWdpc3RlcikpOworICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRU
eXBlLCB2YWx1ZVNvdXJjZSwgbm9kZSwgbV9qaXQuYnJhbmNoVGVzdDY0KE1hY3JvQXNzZW1ibGVy
OjpOb25aZXJvLCBKSVRDb21waWxlcjo6YWRkcmVzc0Zvcih2aXJ0dWFsUmVnaXN0ZXIpLCBHUFJJ
bmZvOjp0YWdNYXNrUmVnaXN0ZXIpKTsKICNlbHNlCiAgICAgICAgIGlmIChpc0ludDMyU3BlY3Vs
YXRpb24ocHJlZGljdGVkVHlwZSkpCi0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5
cGUsIHZhbHVlU291cmNlLCBub2RlSW5kZXgsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVy
OjpOb3RFcXVhbCwgSklUQ29tcGlsZXI6OnRhZ0Zvcih2aXJ0dWFsUmVnaXN0ZXIpLCBUcnVzdGVk
SW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpKSk7CisgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNr
KEJhZFR5cGUsIHZhbHVlU291cmNlLCBub2RlLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxl
cjo6Tm90RXF1YWwsIEpJVENvbXBpbGVyOjp0YWdGb3IodmlydHVhbFJlZ2lzdGVyKSwgVHJ1c3Rl
ZEltbTMyKEpTVmFsdWU6OkludDMyVGFnKSkpOwogICAgICAgICBlbHNlIGlmIChpc0Jvb2xlYW5T
cGVjdWxhdGlvbihwcmVkaWN0ZWRUeXBlKSkKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2so
QmFkVHlwZSwgdmFsdWVTb3VyY2UsIG5vZGVJbmRleCwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3Nl
bWJsZXI6Ok5vdEVxdWFsLCBKSVRDb21waWxlcjo6dGFnRm9yKHZpcnR1YWxSZWdpc3RlciksIFRy
dXN0ZWRJbW0zMihKU1ZhbHVlOjpCb29sZWFuVGFnKSkpOworICAgICAgICAgICAgc3BlY3VsYXRp
b25DaGVjayhCYWRUeXBlLCB2YWx1ZVNvdXJjZSwgbm9kZSwgbV9qaXQuYnJhbmNoMzIoTWFjcm9B
c3NlbWJsZXI6Ok5vdEVxdWFsLCBKSVRDb21waWxlcjo6dGFnRm9yKHZpcnR1YWxSZWdpc3Rlciks
IFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpCb29sZWFuVGFnKSkpOwogICAgICAgICBlbHNlIGlmIChp
c0NlbGxTcGVjdWxhdGlvbihwcmVkaWN0ZWRUeXBlKSkKLSAgICAgICAgICAgIHNwZWN1bGF0aW9u
Q2hlY2soQmFkVHlwZSwgdmFsdWVTb3VyY2UsIG5vZGVJbmRleCwgbV9qaXQuYnJhbmNoMzIoTWFj
cm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBKSVRDb21waWxlcjo6dGFnRm9yKHZpcnR1YWxSZWdpc3Rl
ciksIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSkpOworICAgICAgICAgICAgc3BlY3Vs
YXRpb25DaGVjayhCYWRUeXBlLCB2YWx1ZVNvdXJjZSwgbm9kZSwgbV9qaXQuYnJhbmNoMzIoTWFj
cm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBKSVRDb21waWxlcjo6dGFnRm9yKHZpcnR1YWxSZWdpc3Rl
ciksIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSkpOwogI2VuZGlmCiAgICAgfQogICAg
IG1faXNDaGVja2luZ0FyZ3VtZW50VHlwZXMgPSBmYWxzZTsKQEAgLTIwMTQsNyArMTk5OSw3IEBA
IGJvb2wgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoKQogICAgIGlmIChERkdfRU5BQkxFX0VER0Vf
Q09ERV9WRVJJRklDQVRJT04pCiAgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbTMyKDApLCBH
UFJJbmZvOjpyZWdUMCk7CiAKLSAgICBBU1NFUlQoIW1fY29tcGlsZUluZGV4KTsKKyAgICBBU1NF
UlQoIW1fY3VycmVudE5vZGUpOwogICAgIGZvciAobV9ibG9jayA9IDA7IG1fYmxvY2sgPCBtX2pp
dC5ncmFwaCgpLm1fYmxvY2tzLnNpemUoKTsgKyttX2Jsb2NrKSB7CiAgICAgICAgIG1faml0LnNl
dEZvckJsb2NrKG1fYmxvY2spOwogICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1faml0Lmdy
YXBoKCkubV9ibG9ja3NbbV9ibG9ja10uZ2V0KCk7CkBAIC0yMDY5LDE5ICsyMDU0LDE5IEBAIFZh
bHVlUmVjb3ZlcnkgU3BlY3VsYXRpdmVKSVQ6OmNvbXB1dGVWYWwKICAgICAgICAgcmV0dXJuIHZh
bHVlU291cmNlLnZhbHVlUmVjb3ZlcnkoKTsKICAgICAgICAgCiAgICAgQVNTRVJUKHZhbHVlU291
cmNlLmtpbmQoKSA9PSBIYXZlTm9kZSk7Ci0gICAgTm9kZUluZGV4IG5vZGVJbmRleCA9IHZhbHVl
U291cmNlLmlkKCkubm9kZUluZGV4KG1faml0LmdyYXBoKCkpOwotICAgIGlmIChpc0NvbnN0YW50
KG5vZGVJbmRleCkpCi0gICAgICAgIHJldHVybiBWYWx1ZVJlY292ZXJ5Ojpjb25zdGFudCh2YWx1
ZU9mSlNDb25zdGFudChub2RlSW5kZXgpKTsKKyAgICBOb2RlKiBub2RlID0gdmFsdWVTb3VyY2Uu
aWQoKS5ub2RlKG1faml0LmdyYXBoKCkpOworICAgIGlmIChpc0NvbnN0YW50KG5vZGUpKQorICAg
ICAgICByZXR1cm4gVmFsdWVSZWNvdmVyeTo6Y29uc3RhbnQodmFsdWVPZkpTQ29uc3RhbnQobm9k
ZSkpOwogICAgIAogICAgIHJldHVybiBWYWx1ZVJlY292ZXJ5KCk7CiB9CiAKLXZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVEb3VibGVQdXRCeVZhbChOb2RlJiBub2RlLCBTcGVjdWxhdGVDZWxs
T3BlcmFuZCYgYmFzZSwgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kJiBwcm9wZXJ0eSkKK3Zv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVEb3VibGVQdXRCeVZhbChOb2RlKiBub2RlLCBTcGVj
dWxhdGVDZWxsT3BlcmFuZCYgYmFzZSwgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kJiBwcm9w
ZXJ0eSkKIHsKICAgICBFZGdlIGNoaWxkMyA9IG1faml0LmdyYXBoKCkudmFyQXJnQ2hpbGQobm9k
ZSwgMik7CiAgICAgRWRnZSBjaGlsZDQgPSBtX2ppdC5ncmFwaCgpLnZhckFyZ0NoaWxkKG5vZGUs
IDMpOwogCi0gICAgQXJyYXlNb2RlIGFycmF5TW9kZSA9IG5vZGUuYXJyYXlNb2RlKCk7CisgICAg
QXJyYXlNb2RlIGFycmF5TW9kZSA9IG5vZGUtPmFycmF5TW9kZSgpOwogICAgIAogICAgIEdQUlJl
ZyBiYXNlUmVnID0gYmFzZS5ncHIoKTsKICAgICBHUFJSZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0
eS5ncHIoKTsKQEAgLTIwOTQsNyArMjA3OSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVEb3VibGVQdXRCeVYKICAgICAgICAgLy8gRklYTUU6IFdlIG5lZWQgYSB3YXkgb2YgcHJvZmls
aW5nIHRoZXNlLCBhbmQgd2UgbmVlZCB0byBob2lzdCB0aGVtIGludG8KICAgICAgICAgLy8gU3Bl
Y3VsYXRlRG91YmxlT3BlcmFuZC4KICAgICAgICAgc3BlY3VsYXRpb25DaGVjaygKLSAgICAgICAg
ICAgIEJhZFR5cGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwKKyAgICAgICAgICAgIEJhZFR5cGUs
IEpTVmFsdWVSZWdzKCksIDAsCiAgICAgICAgICAgICBtX2ppdC5icmFuY2hEb3VibGUoTWFjcm9B
c3NlbWJsZXI6OkRvdWJsZU5vdEVxdWFsT3JVbm9yZGVyZWQsIHZhbHVlUmVnLCB2YWx1ZVJlZykp
OwogICAgIH0KICAgICAKQEAgLTIxMDQsMTMgKzIwODksMTMgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZURvdWJsZVB1dEJ5VgogICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywg
Y2hpbGQ0KTsKICAgICBHUFJSZWcgc3RvcmFnZVJlZyA9IHN0b3JhZ2UuZ3ByKCk7CiAKLSAgICBp
ZiAobm9kZS5vcCgpID09IFB1dEJ5VmFsQWxpYXMpIHsKKyAgICBpZiAobm9kZS0+b3AoKSA9PSBQ
dXRCeVZhbEFsaWFzKSB7CiAgICAgICAgIC8vIFN0b3JlIHRoZSB2YWx1ZSB0byB0aGUgYXJyYXku
CiAgICAgICAgIEdQUlJlZyBwcm9wZXJ0eVJlZyA9IHByb3BlcnR5LmdwcigpOwogICAgICAgICBG
UFJSZWcgdmFsdWVSZWcgPSB2YWx1ZS5mcHIoKTsKICAgICAgICAgbV9qaXQuc3RvcmVEb3VibGUo
dmFsdWVSZWcsIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlS
ZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0KSk7CiAgICAgICAgIAotICAgICAgICBub1Jl
c3VsdChtX2NvbXBpbGVJbmRleCk7CisgICAgICAgIG5vUmVzdWx0KG1fY3VycmVudE5vZGUpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQogICAgIApAQCAtMjEyMSw3ICsyMTA2LDcgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZURvdWJsZVB1dEJ5VgogICAgIAogICAgIGlmIChhcnJheU1v
ZGUuaXNJbkJvdW5kcygpKSB7CiAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCi0gICAgICAgICAg
ICBTdG9yZVRvSG9sZU9yT3V0T2ZCb3VuZHMsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwKKyAgICAg
ICAgICAgIFN0b3JlVG9Ib2xlT3JPdXRPZkJvdW5kcywgSlNWYWx1ZVJlZ3MoKSwgMCwKICAgICAg
ICAgICAgIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3Bl
cnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBCdXR0ZXJmbHk6Om9m
ZnNldE9mUHVibGljTGVuZ3RoKCkpKSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6Okp1bXAgaW5Cb3VuZHMgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QmVs
b3csIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBCdXR0
ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpKTsKQEAgLTIxMjksNyArMjExNCw3IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVEb3VibGVQdXRCeVYKICAgICAgICAgc2xvd0Nhc2Ug
PSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJl
ZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQnV0dGVyZmx5OjpvZmZzZXRP
ZlZlY3Rvckxlbmd0aCgpKSk7CiAgICAgICAgIAogICAgICAgICBpZiAoIWFycmF5TW9kZS5pc091
dE9mQm91bmRzKCkpCi0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE91dE9mQm91bmRzLCBK
U1ZhbHVlUmVncygpLCBOb05vZGUsIHNsb3dDYXNlKTsKKyAgICAgICAgICAgIHNwZWN1bGF0aW9u
Q2hlY2soT3V0T2ZCb3VuZHMsIEpTVmFsdWVSZWdzKCksIDAsIHNsb3dDYXNlKTsKICAgICAgICAg
CiAgICAgICAgIG1faml0LmFkZDMyKFRydXN0ZWRJbW0zMigxKSwgcHJvcGVydHlSZWcsIHRlbXBv
cmFyeVJlZyk7CiAgICAgICAgIG1faml0LnN0b3JlMzIodGVtcG9yYXJ5UmVnLCBNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3Ro
KCkpKTsKQEAgLTIxNTIsMjMgKzIxMzcsMjMgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZURvdWJsZVB1dEJ5VgogICAgICAgICAgICAgICAgIE5vUmVzdWx0LCBiYXNlUmVnLCBwcm9wZXJ0
eVJlZywgdmFsdWVSZWcpKTsKICAgICB9CiAKLSAgICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCwg
VXNlQ2hpbGRyZW5DYWxsZWRFeHBsaWNpdGx5KTsKKyAgICBub1Jlc3VsdChtX2N1cnJlbnROb2Rl
LCBVc2VDaGlsZHJlbkNhbGxlZEV4cGxpY2l0bHkpOwogfQogCi12b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlR2V0Q2hhckNvZGVBdChOb2RlJiBub2RlKQordm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZUdldENoYXJDb2RlQXQoTm9kZSogbm9kZSkKIHsKLSAgICBTcGVjdWxhdGVDZWxsT3Bl
cmFuZCBzdHJpbmcodGhpcywgbm9kZS5jaGlsZDEoKSk7Ci0gICAgU3BlY3VsYXRlU3RyaWN0SW50
MzJPcGVyYW5kIGluZGV4KHRoaXMsIG5vZGUuY2hpbGQyKCkpOwotICAgIFN0b3JhZ2VPcGVyYW5k
IHN0b3JhZ2UodGhpcywgbm9kZS5jaGlsZDMoKSk7CisgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQg
c3RyaW5nKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKKyAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9w
ZXJhbmQgaW5kZXgodGhpcywgbm9kZS0+Y2hpbGQyKCkpOworICAgIFN0b3JhZ2VPcGVyYW5kIHN0
b3JhZ2UodGhpcywgbm9kZS0+Y2hpbGQzKCkpOwogCiAgICAgR1BSUmVnIHN0cmluZ1JlZyA9IHN0
cmluZy5ncHIoKTsKICAgICBHUFJSZWcgaW5kZXhSZWcgPSBpbmRleC5ncHIoKTsKICAgICBHUFJS
ZWcgc3RvcmFnZVJlZyA9IHN0b3JhZ2UuZ3ByKCk7CiAgICAgCi0gICAgQVNTRVJUKHNwZWN1bGF0
aW9uQ2hlY2tlZChtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlLCBTcGVjU3Ry
aW5nKSk7CisgICAgQVNTRVJUKHNwZWN1bGF0aW9uQ2hlY2tlZChtX3N0YXRlLmZvck5vZGUobm9k
ZS0+Y2hpbGQxKCkpLm1fdHlwZSwgU3BlY1N0cmluZykpOwogCiAgICAgLy8gdW5zaWduZWQgY29t
cGFyaXNvbiBzbyB3ZSBjYW4gZmlsdGVyIG91dCBuZWdhdGl2ZSBpbmRpY2VzIGFuZCBpbmRpY2Vz
IHRoYXQgYXJlIHRvbyBsYXJnZQotICAgIHNwZWN1bGF0aW9uQ2hlY2soVW5jb3VudGFibGUsIEpT
VmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3Zl
T3JFcXVhbCwgaW5kZXhSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0cmluZ1JlZywgSlNT
dHJpbmc6Om9mZnNldE9mTGVuZ3RoKCkpKSk7CisgICAgc3BlY3VsYXRpb25DaGVjayhVbmNvdW50
YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgMCwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFi
b3ZlT3JFcXVhbCwgaW5kZXhSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0cmluZ1JlZywg
SlNTdHJpbmc6Om9mZnNldE9mTGVuZ3RoKCkpKSk7CiAKICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRj
aCh0aGlzKTsKICAgICBHUFJSZWcgc2NyYXRjaFJlZyA9IHNjcmF0Y2guZ3ByKCk7CkBAIC0yMTg3
LDIyICsyMTcyLDIyIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRDaGFyQ29kZUEK
IAogICAgIGNvbnQ4Qml0LmxpbmsoJm1faml0KTsKIAotICAgIGludGVnZXJSZXN1bHQoc2NyYXRj
aFJlZywgbV9jb21waWxlSW5kZXgpOworICAgIGludGVnZXJSZXN1bHQoc2NyYXRjaFJlZywgbV9j
dXJyZW50Tm9kZSk7CiB9CiAKLXZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9u
U3RyaW5nKE5vZGUmIG5vZGUpCit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxP
blN0cmluZyhOb2RlKiBub2RlKQogewotICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhp
cywgbm9kZS5jaGlsZDEoKSk7Ci0gICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIHByb3Bl
cnR5KHRoaXMsIG5vZGUuY2hpbGQyKCkpOwotICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhp
cywgbm9kZS5jaGlsZDMoKSk7CisgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBu
b2RlLT5jaGlsZDEoKSk7CisgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIHByb3BlcnR5
KHRoaXMsIG5vZGUtPmNoaWxkMigpKTsKKyAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMs
IG5vZGUtPmNoaWxkMygpKTsKICAgICBHUFJSZWcgYmFzZVJlZyA9IGJhc2UuZ3ByKCk7CiAgICAg
R1BSUmVnIHByb3BlcnR5UmVnID0gcHJvcGVydHkuZ3ByKCk7CiAgICAgR1BSUmVnIHN0b3JhZ2VS
ZWcgPSBzdG9yYWdlLmdwcigpOwogCi0gICAgQVNTRVJUKEFycmF5TW9kZShBcnJheTo6U3RyaW5n
KS5hbHJlYWR5Q2hlY2tlZChtX2ppdC5ncmFwaCgpLCBub2RlLCBtX3N0YXRlLmZvck5vZGUobm9k
ZS5jaGlsZDEoKSkpKTsKKyAgICBBU1NFUlQoQXJyYXlNb2RlKEFycmF5OjpTdHJpbmcpLmFscmVh
ZHlDaGVja2VkKG1faml0LmdyYXBoKCksIG5vZGUsIG1fc3RhdGUuZm9yTm9kZShub2RlLT5jaGls
ZDEoKSkpKTsKIAogICAgIC8vIHVuc2lnbmVkIGNvbXBhcmlzb24gc28gd2UgY2FuIGZpbHRlciBv
dXQgbmVnYXRpdmUgaW5kaWNlcyBhbmQgaW5kaWNlcyB0aGF0IGFyZSB0b28gbGFyZ2UKLSAgICBz
cGVjdWxhdGlvbkNoZWNrKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0
LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBKU1N0cmluZzo6b2Zmc2V0T2ZMZW5ndGgoKSkp
KTsKKyAgICBzcGVjdWxhdGlvbkNoZWNrKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCAwLCBt
X2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywg
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgSlNTdHJpbmc6Om9mZnNldE9mTGVuZ3Ro
KCkpKSk7CiAKICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKICAgICBHUFJSZWcgc2Ny
YXRjaFJlZyA9IHNjcmF0Y2guZ3ByKCk7CkBAIC0yMjIwLDcgKzIyMDUsNyBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxPblN0CiAgICAgbV9qaXQubG9hZDE2KE1hY3JvQXNz
ZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVy
OjpUaW1lc1R3bywgMCksIHNjcmF0Y2hSZWcpOwogCiAgICAgLy8gV2Ugb25seSBzdXBwb3J0IGFz
Y2lpIGNoYXJhY3RlcnMKLSAgICBzcGVjdWxhdGlvbkNoZWNrKFVuY291bnRhYmxlLCBKU1ZhbHVl
UmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1
YWwsIHNjcmF0Y2hSZWcsIFRydXN0ZWRJbW0zMigweDEwMCkpKTsKKyAgICBzcGVjdWxhdGlvbkNo
ZWNrKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCAwLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fz
c2VtYmxlcjo6QWJvdmVPckVxdWFsLCBzY3JhdGNoUmVnLCBUcnVzdGVkSW1tMzIoMHgxMDApKSk7
CiAKICAgICAvLyA4IGJpdCBzdHJpbmcgdmFsdWVzIGRvbid0IG5lZWQgdGhlIGlzQVNDSUkgY2hl
Y2suCiAgICAgY29udDhCaXQubGluaygmbV9qaXQpOwpAQCAtMjIyOSwyOCArMjIxNCwyNyBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxPblN0CiAgICAgR1BSUmVnIHNtYWxs
U3RyaW5nc1JlZyA9IHNtYWxsU3RyaW5ncy5ncHIoKTsKICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNz
ZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+c21hbGxTdHJpbmdzLnNp
bmdsZUNoYXJhY3RlclN0cmluZ3MoKSksIHNtYWxsU3RyaW5nc1JlZyk7CiAgICAgbV9qaXQubG9h
ZFB0cihNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHNtYWxsU3RyaW5nc1JlZywgc2NyYXRjaFJl
ZywgTWFjcm9Bc3NlbWJsZXI6OlNjYWxlUHRyLCAwKSwgc2NyYXRjaFJlZyk7Ci0gICAgc3BlY3Vs
YXRpb25DaGVjayhVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFu
Y2hUZXN0MzIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHNjcmF0Y2hSZWcpKTsKLSAgICBjZWxsUmVz
dWx0KHNjcmF0Y2hSZWcsIG1fY29tcGlsZUluZGV4KTsKKyAgICBzcGVjdWxhdGlvbkNoZWNrKFVu
Y291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCAwLCBtX2ppdC5icmFuY2hUZXN0MzIoTWFjcm9Bc3Nl
bWJsZXI6Olplcm8sIHNjcmF0Y2hSZWcpKTsKKyAgICBjZWxsUmVzdWx0KHNjcmF0Y2hSZWcsIG1f
Y3VycmVudE5vZGUpOwogfQogCi1HZW5lcmF0ZWRPcGVyYW5kVHlwZSBTcGVjdWxhdGl2ZUpJVDo6
Y2hlY2tHZW5lcmF0ZWRUeXBlRm9yVG9JbnQzMihOb2RlSW5kZXggbm9kZUluZGV4KQorR2VuZXJh
dGVkT3BlcmFuZFR5cGUgU3BlY3VsYXRpdmVKSVQ6OmNoZWNrR2VuZXJhdGVkVHlwZUZvclRvSW50
MzIoTm9kZSogbm9kZSkKIHsKICNpZiBERkdfRU5BQkxFKERFQlVHX1ZFUkJPU0UpCi0gICAgZGF0
YUxvZ0YoImNoZWNrR2VuZXJhdGVkVHlwZUZvclRvSW50MzJAJWQgICAiLCBub2RlSW5kZXgpOwor
ICAgIGRhdGFMb2dGKCJjaGVja0dlbmVyYXRlZFR5cGVGb3JUb0ludDMyQCVkICAgIiwgbm9kZS0+
aW5kZXgoKSk7CiAjZW5kaWYKLSAgICBOb2RlJiBub2RlID0gYXQobm9kZUluZGV4KTsKLSAgICBW
aXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyID0gbm9kZS52aXJ0dWFsUmVnaXN0ZXIoKTsK
KyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyID0gbm9kZS0+dmlydHVhbFJlZ2lz
dGVyKCk7CiAgICAgR2VuZXJhdGlvbkluZm8mIGluZm8gPSBtX2dlbmVyYXRpb25JbmZvW3ZpcnR1
YWxSZWdpc3Rlcl07CiAKICAgICBpZiAoaW5mby5yZWdpc3RlckZvcm1hdCgpID09IERhdGFGb3Jt
YXROb25lKSB7Ci0gICAgICAgIGlmIChub2RlLmhhc0NvbnN0YW50KCkpIHsKLSAgICAgICAgICAg
IGlmIChpc0ludDMyQ29uc3RhbnQobm9kZUluZGV4KSkKKyAgICAgICAgaWYgKG5vZGUtPmhhc0Nv
bnN0YW50KCkpIHsKKyAgICAgICAgICAgIGlmIChpc0ludDMyQ29uc3RhbnQobm9kZSkpCiAgICAg
ICAgICAgICAgICAgcmV0dXJuIEdlbmVyYXRlZE9wZXJhbmRJbnRlZ2VyOwogCi0gICAgICAgICAg
ICBpZiAoaXNOdW1iZXJDb25zdGFudChub2RlSW5kZXgpKQorICAgICAgICAgICAgaWYgKGlzTnVt
YmVyQ29uc3RhbnQobm9kZSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIEdlbmVyYXRlZE9wZXJh
bmREb3VibGU7CiAKLSAgICAgICAgICAgIHRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKFVu
Y291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUpOworICAgICAgICAgICAgdGVybWluYXRl
U3BlY3VsYXRpdmVFeGVjdXRpb24oVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIDApOwogICAg
ICAgICAgICAgcmV0dXJuIEdlbmVyYXRlZE9wZXJhbmRUeXBlVW5rbm93bjsKICAgICAgICAgfQog
CkBAIC0yMjY0LDcgKzIyNDgsNyBAQCBHZW5lcmF0ZWRPcGVyYW5kVHlwZSBTcGVjdWxhdGl2ZUpJ
VDo6Y2hlCiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAKICAgICBjYXNl
IERhdGFGb3JtYXRDZWxsOgotICAgICAgICB0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihV
bmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlKTsKKyAgICAgICAgdGVybWluYXRlU3Bl
Y3VsYXRpdmVFeGVjdXRpb24oVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIDApOwogICAgICAg
ICByZXR1cm4gR2VuZXJhdGVkT3BlcmFuZFR5cGVVbmtub3duOwogCiAgICAgY2FzZSBEYXRhRm9y
bWF0Tm9uZToKQEAgLTIyODcsNDEgKzIyNzEsNDEgQEAgR2VuZXJhdGVkT3BlcmFuZFR5cGUgU3Bl
Y3VsYXRpdmVKSVQ6OmNoZQogICAgIH0KIH0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZVZhbHVlVG9JbnQzMihOb2RlJiBub2RlKQordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVZh
bHVlVG9JbnQzMihOb2RlKiBub2RlKQogewotICAgIGlmIChhdChub2RlLmNoaWxkMSgpKS5zaG91
bGRTcGVjdWxhdGVJbnRlZ2VyKCkpIHsKLSAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQg
b3AxKHRoaXMsIG5vZGUuY2hpbGQxKCkpOworICAgIGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxk
U3BlY3VsYXRlSW50ZWdlcigpKSB7CisgICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9w
MSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhp
cywgb3AxKTsKICAgICAgICAgbV9qaXQubW92ZShvcDEuZ3ByKCksIHJlc3VsdC5ncHIoKSk7Ci0g
ICAgICAgIGludGVnZXJSZXN1bHQocmVzdWx0LmdwcigpLCBtX2NvbXBpbGVJbmRleCwgb3AxLmZv
cm1hdCgpKTsKKyAgICAgICAgaW50ZWdlclJlc3VsdChyZXN1bHQuZ3ByKCksIG5vZGUsIG9wMS5m
b3JtYXQoKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCi0gICAgaWYgKGF0KG5vZGUu
Y2hpbGQxKCkpLnNob3VsZFNwZWN1bGF0ZU51bWJlcigpKSB7Ci0gICAgICAgIHN3aXRjaCAoY2hl
Y2tHZW5lcmF0ZWRUeXBlRm9yVG9JbnQzMihub2RlLmNoaWxkMSgpLmluZGV4KCkpKSB7CisgICAg
aWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVOdW1iZXIoKSkgeworICAgICAgICBz
d2l0Y2ggKGNoZWNrR2VuZXJhdGVkVHlwZUZvclRvSW50MzIobm9kZS0+Y2hpbGQxKCkubm9kZSgp
KSkgewogICAgICAgICBjYXNlIEdlbmVyYXRlZE9wZXJhbmRJbnRlZ2VyOiB7Ci0gICAgICAgICAg
ICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEoKSk7CisgICAg
ICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDEodGhpcywgbm9kZS0+Y2hpbGQxKCkp
OwogICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBvcDEpOwogICAgICAgICAg
ICAgbV9qaXQubW92ZShvcDEuZ3ByKCksIHJlc3VsdC5ncHIoKSk7Ci0gICAgICAgICAgICBpbnRl
Z2VyUmVzdWx0KHJlc3VsdC5ncHIoKSwgbV9jb21waWxlSW5kZXgsIG9wMS5mb3JtYXQoKSk7Cisg
ICAgICAgICAgICBpbnRlZ2VyUmVzdWx0KHJlc3VsdC5ncHIoKSwgbm9kZSwgb3AxLmZvcm1hdCgp
KTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICBjYXNlIEdlbmVyYXRl
ZE9wZXJhbmREb3VibGU6IHsKICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7
Ci0gICAgICAgICAgICBEb3VibGVPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKKyAg
ICAgICAgICAgIERvdWJsZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKICAgICAg
ICAgICAgIEZQUlJlZyBmcHIgPSBvcDEuZnByKCk7CiAgICAgICAgICAgICBHUFJSZWcgZ3ByID0g
cmVzdWx0LmdwcigpOwogICAgICAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgbm90VHJ1bmNhdGVk
VG9JbnRlZ2VyID0gbV9qaXQuYnJhbmNoVHJ1bmNhdGVEb3VibGVUb0ludDMyKGZwciwgZ3ByLCBK
SVRDb21waWxlcjo6QnJhbmNoSWZUcnVuY2F0ZUZhaWxlZCk7CiAgICAgICAgICAgICAKICAgICAg
ICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKHNsb3dQYXRoQ2FsbChub3RUcnVuY2F0ZWRUb0lu
dGVnZXIsIHRoaXMsIHRvSW50MzIsIGdwciwgZnByKSk7CiAKLSAgICAgICAgICAgIGludGVnZXJS
ZXN1bHQoZ3ByLCBtX2NvbXBpbGVJbmRleCk7CisgICAgICAgICAgICBpbnRlZ2VyUmVzdWx0KGdw
ciwgbm9kZSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBH
ZW5lcmF0ZWRPcGVyYW5kSlNWYWx1ZTogewogICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3Vs
dCh0aGlzKTsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQg
b3AxKHRoaXMsIG5vZGUuY2hpbGQxKCkpOworICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgb3Ax
KHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKIAogICAgICAgICAgICAgR1BSUmVnIGdwciA9IG9wMS5n
cHIoKTsKICAgICAgICAgICAgIEdQUlJlZyByZXN1bHRHcHIgPSByZXN1bHQuZ3ByKCk7CkBAIC0y
MzMwLDggKzIzMTQsOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlVmFsdWVUb0ludDMy
CiAKICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIGlzSW50ZWdlciA9IG1faml0LmJyYW5j
aDY0KE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIGdwciwgR1BSSW5mbzo6dGFnVHlwZU51
bWJlclJlZ2lzdGVyKTsKIAotICAgICAgICAgICAgaWYgKCFpc051bWJlclNwZWN1bGF0aW9uKG1f
c3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKQotICAgICAgICAgICAgICAgIHNw
ZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3MoZ3ByKSwgbm9kZS5jaGlsZDEoKS5p
bmRleCgpLCBtX2ppdC5icmFuY2hUZXN0NjQoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIGdwciwgR1BS
SW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKSk7CisgICAgICAgICAgICBpZiAoIWlzTnVtYmVy
U3BlY3VsYXRpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX3R5cGUpKQorICAg
ICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3MoZ3ByKSwg
bm9kZS0+Y2hpbGQxKCksIG1faml0LmJyYW5jaFRlc3Q2NChNYWNyb0Fzc2VtYmxlcjo6WmVybywg
Z3ByLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpKTsKIAogICAgICAgICAgICAgLy8g
Rmlyc3QsIGlmIHdlIGdldCBoZXJlIHdlIGhhdmUgYSBkb3VibGUgZW5jb2RlZCBhcyBhIEpTVmFs
dWUKICAgICAgICAgICAgIG1faml0Lm1vdmUoZ3ByLCByZXN1bHRHcHIpOwpAQCAtMjM0OCwxMSAr
MjMzMiwxMSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlVmFsdWVUb0ludDMyCiAKICAg
ICAgICAgICAgIGNvbnZlcnRlZC5saW5rKCZtX2ppdCk7CiAjZWxzZQotICAgICAgICAgICAgTm9k
ZSYgY2hpbGROb2RlID0gYXQobm9kZS5jaGlsZDEoKS5pbmRleCgpKTsKLSAgICAgICAgICAgIFZp
cnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIgPSBjaGlsZE5vZGUudmlydHVhbFJlZ2lzdGVy
KCk7CisgICAgICAgICAgICBOb2RlKiBjaGlsZE5vZGUgPSBub2RlLT5jaGlsZDEoKS5ub2RlKCk7
CisgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyID0gY2hpbGROb2Rl
LT52aXJ0dWFsUmVnaXN0ZXIoKTsKICAgICAgICAgICAgIEdlbmVyYXRpb25JbmZvJiBpbmZvID0g
bV9nZW5lcmF0aW9uSW5mb1t2aXJ0dWFsUmVnaXN0ZXJdOwogCi0gICAgICAgICAgICBKU1ZhbHVl
T3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEoKSk7CisgICAgICAgICAgICBKU1ZhbHVlT3Bl
cmFuZCBvcDEodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwogCiAgICAgICAgICAgICBHUFJSZWcgcGF5
bG9hZEdQUiA9IG9wMS5wYXlsb2FkR1BSKCk7CiAgICAgICAgICAgICBHUFJSZWcgcmVzdWx0R3By
ID0gcmVzdWx0LmdwcigpOwpAQCAtMjM2Nyw4ICsyMzUxLDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZVZhbHVlVG9JbnQzMgogCiAgICAgICAgICAgICAgICAgSklUQ29tcGlsZXI6Okp1
bXAgaXNJbnRlZ2VyID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCB0YWdH
UFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZykpOwogCi0gICAgICAgICAgICAgICAg
aWYgKCFpc051bWJlclNwZWN1bGF0aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5t
X3R5cGUpKQotICAgICAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpT
VmFsdWVSZWdzKHRhZ0dQUiwgcGF5bG9hZEdQUiksIG5vZGUuY2hpbGQxKCkuaW5kZXgoKSwgbV9q
aXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgdGFnR1BSLCBUcnVzdGVk
SW1tMzIoSlNWYWx1ZTo6TG93ZXN0VGFnKSkpOworICAgICAgICAgICAgICAgIGlmICghaXNOdW1i
ZXJTcGVjdWxhdGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fdHlwZSkpCisg
ICAgICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3Mo
dGFnR1BSLCBwYXlsb2FkR1BSKSwgbm9kZS0+Y2hpbGQxKCksIG1faml0LmJyYW5jaDMyKE1hY3Jv
QXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHRhZ0dQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6Okxv
d2VzdFRhZykpKTsKIAogICAgICAgICAgICAgICAgIHVuYm94RG91YmxlKHRhZ0dQUiwgcGF5bG9h
ZEdQUiwgZnByLCBzY3JhdGNoLmZwcigpKTsKIApAQCAtMjM4NCw3ICsyMzY4LDcgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVZhbHVlVG9JbnQzMgogICAgICAgICAgICAgICAgIGNvbnZl
cnRlZC5saW5rKCZtX2ppdCk7CiAgICAgICAgICAgICB9CiAjZW5kaWYKLSAgICAgICAgICAgIGlu
dGVnZXJSZXN1bHQocmVzdWx0R3ByLCBtX2NvbXBpbGVJbmRleCk7CisgICAgICAgICAgICBpbnRl
Z2VyUmVzdWx0KHJlc3VsdEdwciwgbm9kZSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
IH0KICAgICAgICAgY2FzZSBHZW5lcmF0ZWRPcGVyYW5kVHlwZVVua25vd246CkBAIC0yMzkzLDE0
ICsyMzc3LDE0IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVWYWx1ZVRvSW50MzIKICAg
ICAgICAgfQogICAgIH0KICAgICAKLSAgICBpZiAoYXQobm9kZS5jaGlsZDEoKSkuc2hvdWxkU3Bl
Y3VsYXRlQm9vbGVhbigpKSB7Ci0gICAgICAgIFNwZWN1bGF0ZUJvb2xlYW5PcGVyYW5kIG9wMSh0
aGlzLCBub2RlLmNoaWxkMSgpKTsKKyAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1
bGF0ZUJvb2xlYW4oKSkgeworICAgICAgICBTcGVjdWxhdGVCb29sZWFuT3BlcmFuZCBvcDEodGhp
cywgbm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIG9w
MSk7CiAgICAgICAgIAogICAgICAgICBtX2ppdC5tb3ZlKG9wMS5ncHIoKSwgcmVzdWx0Lmdwcigp
KTsKICAgICAgICAgbV9qaXQuYW5kMzIoSklUQ29tcGlsZXI6OlRydXN0ZWRJbW0zMigxKSwgcmVz
dWx0LmdwcigpKTsKICAgICAgICAgCi0gICAgICAgIGludGVnZXJSZXN1bHQocmVzdWx0Lmdwcigp
LCBtX2NvbXBpbGVJbmRleCk7CisgICAgICAgIGludGVnZXJSZXN1bHQocmVzdWx0LmdwcigpLCBu
b2RlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKQEAgLTI0MDksMTMgKzIzOTMsMTMg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVZhbHVlVG9JbnQzMgogICAgIHJldHVybjsK
IH0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVVJbnQzMlRvTnVtYmVyKE5vZGUmIG5v
ZGUpCit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlVUludDMyVG9OdW1iZXIoTm9kZSogbm9k
ZSkKIHsKLSAgICBpZiAoIW5vZGVDYW5TcGVjdWxhdGVJbnRlZ2VyKG5vZGUuYXJpdGhOb2RlRmxh
Z3MoKSkpIHsKKyAgICBpZiAoIW5vZGVDYW5TcGVjdWxhdGVJbnRlZ2VyKG5vZGUtPmFyaXRoTm9k
ZUZsYWdzKCkpKSB7CiAgICAgICAgIC8vIFdlIGtub3cgdGhhdCB0aGlzIHNvbWV0aW1lcyBwcm9k
dWNlcyBkb3VibGVzLiBTbyBwcm9kdWNlIGEgZG91YmxlIGV2ZXJ5CiAgICAgICAgIC8vIHRpbWUu
IFRoaXMgYXQgbGVhc3QgYWxsb3dzIHN1YnNlcXVlbnQgY29kZSB0byBub3QgaGF2ZSB3ZWlyZCBj
b25kaXRpb25hbHMuCiAgICAgICAgICAgICAKLSAgICAgICAgSW50ZWdlck9wZXJhbmQgb3AxKHRo
aXMsIG5vZGUuY2hpbGQxKCkpOworICAgICAgICBJbnRlZ2VyT3BlcmFuZCBvcDEodGhpcywgbm9k
ZS0+Y2hpbGQxKCkpOwogICAgICAgICBGUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwogICAgICAg
ICAgICAgCiAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IG9wMS5ncHIoKTsKQEAgLTI0MjcsMTEg
KzI0MTEsMTEgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVVJbnQzMlRvTnVtYgogICAg
ICAgICBtX2ppdC5hZGREb3VibGUoSklUQ29tcGlsZXI6OkFic29sdXRlQWRkcmVzcygmQXNzZW1i
bHlIZWxwZXJzOjp0d29Ub1RoZTMyKSwgb3V0cHV0RlBSKTsKICAgICAgICAgcG9zaXRpdmUubGlu
aygmbV9qaXQpOwogICAgICAgICAgICAgCi0gICAgICAgIGRvdWJsZVJlc3VsdChvdXRwdXRGUFIs
IG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAgZG91YmxlUmVzdWx0KG91dHB1dEZQUiwgbm9kZSk7
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBJbnRlZ2VyT3BlcmFuZCBvcDEodGhpcywg
bm9kZS5jaGlsZDEoKSk7CisgICAgSW50ZWdlck9wZXJhbmQgb3AxKHRoaXMsIG5vZGUtPmNoaWxk
MSgpKTsKICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOyAvLyBGb3IgdGhlIGJlbmVmaXQg
b2YgT1NSIGV4aXQsIGZvcmNlIHRoZXNlIHRvIGJlIGluIGRpZmZlcmVudCByZWdpc3RlcnMuIElu
IHJlYWxpdHkgdGhlIE9TUiBleGl0IGNvbXBpbGVyIGNvdWxkIGZpbmQgY2FzZXMgd2hlcmUgeW91
IGhhdmUgdWludDMyKCVyMSkgZm9sbG93ZWQgYnkgaW50MzIoJXIxKSBhbmQgdGhlbiB1c2UgZGlm
ZmVyZW50IHJlZ2lzdGVycywgYnV0IHRoYXQgc2VlbXMgbGlrZSB0b28gbXVjaCBlZmZvcnQuCiAK
ICAgICBtX2ppdC5tb3ZlKG9wMS5ncHIoKSwgcmVzdWx0LmdwcigpKTsKQEAgLTI0NDEsMTQgKzI0
MjUsMTQgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVVJbnQzMlRvTnVtYgogICAgIC8v
IGluc3RydWN0aW9uIHRoYXQgZm9sbG93cyB1cywgcmF0aGVyIHRoYW4gdGhlIG9uZSB3ZSdyZSBl
eGVjdXRpbmcgcmlnaHQgbm93LiBXZSBoYXZlCiAgICAgLy8gdG8gZG8gdGhpcyBiZWNhdXNlIGJ5
IHRoaXMgcG9pbnQsIHRoZSBvcmlnaW5hbCB2YWx1ZXMgbmVjZXNzYXJ5IHRvIGNvbXBpbGUgd2hh
dGV2ZXIKICAgICAvLyBvcGVyYXRpb24gdGhlIFVJbnQzMlRvTnVtYmVyIG9yaWdpbmF0ZWQgZnJv
bSBtaWdodCBiZSBkZWFkLgotICAgIGZvcndhcmRTcGVjdWxhdGlvbkNoZWNrKE92ZXJmbG93LCBK
U1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpMZXNz
VGhhbiwgcmVzdWx0LmdwcigpLCBUcnVzdGVkSW1tMzIoMCkpLCBWYWx1ZVJlY292ZXJ5Ojp1aW50
MzJJbkdQUihyZXN1bHQuZ3ByKCkpKTsKKyAgICBmb3J3YXJkU3BlY3VsYXRpb25DaGVjayhPdmVy
ZmxvdywgSlNWYWx1ZVJlZ3MoKSwgMCwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Okxl
c3NUaGFuLCByZXN1bHQuZ3ByKCksIFRydXN0ZWRJbW0zMigwKSksIFZhbHVlUmVjb3Zlcnk6OnVp
bnQzMkluR1BSKHJlc3VsdC5ncHIoKSkpOwogCi0gICAgaW50ZWdlclJlc3VsdChyZXN1bHQuZ3By
KCksIG1fY29tcGlsZUluZGV4LCBvcDEuZm9ybWF0KCkpOworICAgIGludGVnZXJSZXN1bHQocmVz
dWx0LmdwcigpLCBub2RlLCBvcDEuZm9ybWF0KCkpOwogfQogCi12b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlRG91YmxlQXNJbnQzMihOb2RlJiBub2RlKQordm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZURvdWJsZUFzSW50MzIoTm9kZSogbm9kZSkKIHsKLSAgICBTcGVjdWxhdGVEb3VibGVP
cGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKKyAgICBTcGVjdWxhdGVEb3VibGVPcGVy
YW5kIG9wMSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CiAgICAgRlBSVGVtcG9yYXJ5IHNjcmF0Y2go
dGhpcyk7CiAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKICAgICAKQEAgLTI0NTgsMzcg
KzI0NDIsMzcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZURvdWJsZUFzSW50MwogCiAg
ICAgSklUQ29tcGlsZXI6Okp1bXBMaXN0IGZhaWx1cmVDYXNlczsKICAgICBtX2ppdC5icmFuY2hD
b252ZXJ0RG91YmxlVG9JbnQzMih2YWx1ZUZQUiwgcmVzdWx0R1BSLCBmYWlsdXJlQ2FzZXMsIHNj
cmF0Y2hGUFIpOwotICAgIGZvcndhcmRTcGVjdWxhdGlvbkNoZWNrKE92ZXJmbG93LCBKU1ZhbHVl
UmVncygpLCBOb05vZGUsIGZhaWx1cmVDYXNlcywgVmFsdWVSZWNvdmVyeTo6aW5GUFIodmFsdWVG
UFIpKTsKKyAgICBmb3J3YXJkU3BlY3VsYXRpb25DaGVjayhPdmVyZmxvdywgSlNWYWx1ZVJlZ3Mo
KSwgMCwgZmFpbHVyZUNhc2VzLCBWYWx1ZVJlY292ZXJ5OjppbkZQUih2YWx1ZUZQUikpOwogCi0g
ICAgaW50ZWdlclJlc3VsdChyZXN1bHRHUFIsIG1fY29tcGlsZUluZGV4KTsKKyAgICBpbnRlZ2Vy
UmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7CiB9CiAKLXZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVJbnQzMlRvRG91YmxlKE5vZGUmIG5vZGUpCit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
SW50MzJUb0RvdWJsZShOb2RlKiBub2RlKQogewogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgLy8g
T24gSlNWQUxVRTY0IHdlIGhhdmUgYSB3YXkgb2YgbG9hZGluZyBkb3VibGUgY29uc3RhbnRzIGlu
IGEgbW9yZSBkaXJlY3QgbWFubmVyCiAgICAgLy8gdGhhbiBhIGludC0+ZG91YmxlIGNvbnZlcnNp
b24uIE9uIDMyXzY0LCB1bmZvcnR1bmF0ZWx5LCB3ZSBjdXJyZW50bHkgZG9uJ3QgaGF2ZQogICAg
IC8vIGFueSBzdWNoIG1lY2hhbmlzbSAtIHRob3VnaCB3ZSBjb3VsZCBoYXZlIGl0LCBpZiB3ZSBq
dXN0IHByb3Zpc2lvbmVkIHNvbWUgbWVtb3J5CiAgICAgLy8gaW4gQ29kZUJsb2NrIGZvciB0aGUg
ZG91YmxlIGZvcm0gb2YgaW50ZWdlciBjb25zdGFudHMuCi0gICAgaWYgKGlzSW50MzJDb25zdGFu
dChub2RlLmNoaWxkMSgpLmluZGV4KCkpKSB7CisgICAgaWYgKGlzSW50MzJDb25zdGFudChub2Rl
LT5jaGlsZDEoKS5ub2RlKCkpKSB7CiAgICAgICAgIEZQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7
CiAgICAgICAgIEdQUlRlbXBvcmFyeSB0ZW1wKHRoaXMpOwotICAgICAgICBtX2ppdC5tb3ZlKE1h
Y3JvQXNzZW1ibGVyOjpJbW02NChyZWludGVycHJldERvdWJsZVRvSW50NjQodmFsdWVPZk51bWJl
ckNvbnN0YW50KG5vZGUuY2hpbGQxKCkuaW5kZXgoKSkpKSwgdGVtcC5ncHIoKSk7CisgICAgICAg
IG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OkltbTY0KHJlaW50ZXJwcmV0RG91YmxlVG9JbnQ2
NCh2YWx1ZU9mTnVtYmVyQ29uc3RhbnQobm9kZS0+Y2hpbGQxKCkubm9kZSgpKSkpLCB0ZW1wLmdw
cigpKTsKICAgICAgICAgbV9qaXQubW92ZTY0VG9Eb3VibGUodGVtcC5ncHIoKSwgcmVzdWx0LmZw
cigpKTsKLSAgICAgICAgZG91YmxlUmVzdWx0KHJlc3VsdC5mcHIoKSwgbV9jb21waWxlSW5kZXgp
OworICAgICAgICBkb3VibGVSZXN1bHQocmVzdWx0LmZwcigpLCBub2RlKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KICNlbmRpZgogICAgIAotICAgIGlmIChpc0ludDMyU3BlY3VsYXRpb24obV9z
dGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpIHsKLSAgICAgICAgU3BlY3VsYXRl
SW50ZWdlck9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKCkpOworICAgIGlmIChpc0ludDMy
U3BlY3VsYXRpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX3R5cGUpKSB7Cisg
ICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7
CiAgICAgICAgIEZQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CiAgICAgICAgIG1faml0LmNvbnZl
cnRJbnQzMlRvRG91YmxlKG9wMS5ncHIoKSwgcmVzdWx0LmZwcigpKTsKLSAgICAgICAgZG91Ymxl
UmVzdWx0KHJlc3VsdC5mcHIoKSwgbV9jb21waWxlSW5kZXgpOworICAgICAgICBkb3VibGVSZXN1
bHQocmVzdWx0LmZwcigpLCBub2RlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKLSAg
ICBKU1ZhbHVlT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEoKSk7CisgICAgSlNWYWx1ZU9w
ZXJhbmQgb3AxKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKICAgICBGUFJUZW1wb3JhcnkgcmVzdWx0
KHRoaXMpOwogICAgIAogI2lmIFVTRShKU1ZBTFVFNjQpCkBAIC0yNTAxLDkgKzI0ODUsOSBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlSW50MzJUb0RvdWJsCiAgICAgSklUQ29tcGlsZXI6
Okp1bXAgaXNJbnRlZ2VyID0gbV9qaXQuYnJhbmNoNjQoCiAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpBYm92ZU9yRXF1YWwsIG9wMUdQUiwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKTsK
ICAgICAKLSAgICBpZiAoIWlzTnVtYmVyU3BlY3VsYXRpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUu
Y2hpbGQxKCkpLm1fdHlwZSkpIHsKKyAgICBpZiAoIWlzTnVtYmVyU3BlY3VsYXRpb24obV9zdGF0
ZS5mb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX3R5cGUpKSB7CiAgICAgICAgIHNwZWN1bGF0aW9u
Q2hlY2soCi0gICAgICAgICAgICBCYWRUeXBlLCBKU1ZhbHVlUmVncyhvcDFHUFIpLCBub2RlLmNo
aWxkMSgpLAorICAgICAgICAgICAgQmFkVHlwZSwgSlNWYWx1ZVJlZ3Mob3AxR1BSKSwgbm9kZS0+
Y2hpbGQxKCksCiAgICAgICAgICAgICBtX2ppdC5icmFuY2hUZXN0NjQoTWFjcm9Bc3NlbWJsZXI6
Olplcm8sIG9wMUdQUiwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKSk7CiAgICAgfQog
ICAgIApAQCAtMjUyNSw5ICsyNTA5LDkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUlu
dDMyVG9Eb3VibAogICAgIEpJVENvbXBpbGVyOjpKdW1wIGlzSW50ZWdlciA9IG1faml0LmJyYW5j
aDMyKAogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIG9wMVRhZ0dQUiwgVHJ1c3RlZElt
bTMyKEpTVmFsdWU6OkludDMyVGFnKSk7CiAgICAgCi0gICAgaWYgKCFpc051bWJlclNwZWN1bGF0
aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKSB7CisgICAgaWYgKCFp
c051bWJlclNwZWN1bGF0aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLT5jaGlsZDEoKSkubV90eXBl
KSkgewogICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAotICAgICAgICAgICAgQmFkVHlwZSwgSlNW
YWx1ZVJlZ3Mob3AxVGFnR1BSLCBvcDFQYXlsb2FkR1BSKSwgbm9kZS5jaGlsZDEoKSwKKyAgICAg
ICAgICAgIEJhZFR5cGUsIEpTVmFsdWVSZWdzKG9wMVRhZ0dQUiwgb3AxUGF5bG9hZEdQUiksIG5v
ZGUtPmNoaWxkMSgpLAogICAgICAgICAgICAgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6
OkFib3ZlT3JFcXVhbCwgb3AxVGFnR1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6TG93ZXN0VGFn
KSkpOwogICAgIH0KICAgICAKQEAgLTI1MzksNyArMjUyMyw3IEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVJbnQzMlRvRG91YmwKICAgICBkb25lLmxpbmsoJm1faml0KTsKICNlbmRpZgog
ICAgIAotICAgIGRvdWJsZVJlc3VsdChyZXN1bHRGUFIsIG1fY29tcGlsZUluZGV4KTsKKyAgICBk
b3VibGVSZXN1bHQocmVzdWx0RlBSLCBub2RlKTsKIH0KIAogc3RhdGljIGRvdWJsZSBjbGFtcERv
dWJsZVRvQnl0ZShkb3VibGUgZCkKQEAgLTI1OTQsMTEgKzI1NzgsMTEgQEAgc3RhdGljIHZvaWQg
Y29tcGlsZUNsYW1wRG91YmxlVG9CeXRlKEpJVAogCiB9CiAKLXZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGVHZXRCeVZhbE9uSW50VHlwZWRBcnJheShjb25zdCBUeXBlZEFycmF5RGVzY3JpcHRv
ciYgZGVzY3JpcHRvciwgTm9kZSYgbm9kZSwgc2l6ZV90IGVsZW1lbnRTaXplLCBUeXBlZEFycmF5
U2lnbmVkbmVzcyBzaWduZWRuZXNzKQordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5
VmFsT25JbnRUeXBlZEFycmF5KGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yJiBkZXNjcmlwdG9y
LCBOb2RlKiBub2RlLCBzaXplX3QgZWxlbWVudFNpemUsIFR5cGVkQXJyYXlTaWduZWRuZXNzIHNp
Z25lZG5lc3MpCiB7Ci0gICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLmNo
aWxkMSgpKTsKLSAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhpcywg
bm9kZS5jaGlsZDIoKSk7Ci0gICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBub2RlLmNo
aWxkMygpKTsKKyAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUtPmNoaWxk
MSgpKTsKKyAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhpcywgbm9k
ZS0+Y2hpbGQyKCkpOworICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgbm9kZS0+Y2hp
bGQzKCkpOwogCiAgICAgR1BSUmVnIGJhc2VSZWcgPSBiYXNlLmdwcigpOwogICAgIEdQUlJlZyBw
cm9wZXJ0eVJlZyA9IHByb3BlcnR5LmdwcigpOwpAQCAtMjYwNywxMCArMjU5MSwxMCBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxPbkluCiAgICAgR1BSVGVtcG9yYXJ5IHJl
c3VsdCh0aGlzKTsKICAgICBHUFJSZWcgcmVzdWx0UmVnID0gcmVzdWx0LmdwcigpOwogCi0gICAg
QVNTRVJUKG5vZGUuYXJyYXlNb2RlKCkuYWxyZWFkeUNoZWNrZWQobV9qaXQuZ3JhcGgoKSwgbm9k
ZSwgbV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpKSk7CisgICAgQVNTRVJUKG5vZGUtPmFy
cmF5TW9kZSgpLmFscmVhZHlDaGVja2VkKG1faml0LmdyYXBoKCksIG5vZGUsIG1fc3RhdGUuZm9y
Tm9kZShub2RlLT5jaGlsZDEoKSkpKTsKIAogICAgIHNwZWN1bGF0aW9uQ2hlY2soCi0gICAgICAg
IFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsCisgICAgICAgIFVuY291bnRhYmxl
LCBKU1ZhbHVlUmVncygpLCAwLAogICAgICAgICBtX2ppdC5icmFuY2gzMigKICAgICAgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhiYXNlUmVnLCBkZXNjcmlwdG9yLm1fbGVuZ3RoT2Zmc2V0KSkpOwogICAgIHN3
aXRjaCAoZWxlbWVudFNpemUpIHsKQEAgLTI2MzMsMTQgKzI2MTcsMTQgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25JbgogICAgICAgICBDUkFTSCgpOwogICAgIH0KICAg
ICBpZiAoZWxlbWVudFNpemUgPCA0IHx8IHNpZ25lZG5lc3MgPT0gU2lnbmVkVHlwZWRBcnJheSkg
ewotICAgICAgICBpbnRlZ2VyUmVzdWx0KHJlc3VsdFJlZywgbV9jb21waWxlSW5kZXgpOworICAg
ICAgICBpbnRlZ2VyUmVzdWx0KHJlc3VsdFJlZywgbm9kZSk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAgICAgCiAgICAgQVNTRVJUKGVsZW1lbnRTaXplID09IDQgJiYgc2lnbmVkbmVzcyA9PSBV
bnNpZ25lZFR5cGVkQXJyYXkpOwotICAgIGlmIChub2RlLnNob3VsZFNwZWN1bGF0ZUludGVnZXIo
KSkgewotICAgICAgICBmb3J3YXJkU3BlY3VsYXRpb25DaGVjayhPdmVyZmxvdywgSlNWYWx1ZVJl
Z3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6TGVzc1RoYW4sIHJl
c3VsdFJlZywgVHJ1c3RlZEltbTMyKDApKSwgVmFsdWVSZWNvdmVyeTo6dWludDMySW5HUFIocmVz
dWx0UmVnKSk7Ci0gICAgICAgIGludGVnZXJSZXN1bHQocmVzdWx0UmVnLCBtX2NvbXBpbGVJbmRl
eCk7CisgICAgaWYgKG5vZGUtPnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKSkgeworICAgICAgICBm
b3J3YXJkU3BlY3VsYXRpb25DaGVjayhPdmVyZmxvdywgSlNWYWx1ZVJlZ3MoKSwgMCwgbV9qaXQu
YnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Okxlc3NUaGFuLCByZXN1bHRSZWcsIFRydXN0ZWRJbW0z
MigwKSksIFZhbHVlUmVjb3Zlcnk6OnVpbnQzMkluR1BSKHJlc3VsdFJlZykpOworICAgICAgICBp
bnRlZ2VyUmVzdWx0KHJlc3VsdFJlZywgbm9kZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAg
ICAgCkBAIC0yNjQ5LDEwICsyNjMzLDEwIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVH
ZXRCeVZhbE9uSW4KICAgICBKSVRDb21waWxlcjo6SnVtcCBwb3NpdGl2ZSA9IG1faml0LmJyYW5j
aDMyKE1hY3JvQXNzZW1ibGVyOjpHcmVhdGVyVGhhbk9yRXF1YWwsIHJlc3VsdFJlZywgVHJ1c3Rl
ZEltbTMyKDApKTsKICAgICBtX2ppdC5hZGREb3VibGUoSklUQ29tcGlsZXI6OkFic29sdXRlQWRk
cmVzcygmQXNzZW1ibHlIZWxwZXJzOjp0d29Ub1RoZTMyKSwgZnJlc3VsdC5mcHIoKSk7CiAgICAg
cG9zaXRpdmUubGluaygmbV9qaXQpOwotICAgIGRvdWJsZVJlc3VsdChmcmVzdWx0LmZwcigpLCBt
X2NvbXBpbGVJbmRleCk7CisgICAgZG91YmxlUmVzdWx0KGZyZXN1bHQuZnByKCksIG5vZGUpOwog
fQogCi12b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUHV0QnlWYWxGb3JJbnRUeXBlZEFycmF5
KGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBHUFJSZWcgYmFzZSwgR1BS
UmVnIHByb3BlcnR5LCBOb2RlJiBub2RlLCBzaXplX3QgZWxlbWVudFNpemUsIFR5cGVkQXJyYXlT
aWduZWRuZXNzIHNpZ25lZG5lc3MsIFR5cGVkQXJyYXlSb3VuZGluZyByb3VuZGluZykKK3ZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQdXRCeVZhbEZvckludFR5cGVkQXJyYXkoY29uc3QgVHlw
ZWRBcnJheURlc2NyaXB0b3ImIGRlc2NyaXB0b3IsIEdQUlJlZyBiYXNlLCBHUFJSZWcgcHJvcGVy
dHksIE5vZGUqIG5vZGUsIHNpemVfdCBlbGVtZW50U2l6ZSwgVHlwZWRBcnJheVNpZ25lZG5lc3Mg
c2lnbmVkbmVzcywgVHlwZWRBcnJheVJvdW5kaW5nIHJvdW5kaW5nKQogewogICAgIFN0b3JhZ2VP
cGVyYW5kIHN0b3JhZ2UodGhpcywgbV9qaXQuZ3JhcGgoKS52YXJBcmdDaGlsZChub2RlLCAzKSk7
CiAgICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigpOwpAQCAtMjY2MiwxMSArMjY0
NiwxMSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUHV0QnlWYWxGb3JJCiAgICAgR1BS
VGVtcG9yYXJ5IHZhbHVlOwogICAgIEdQUlJlZyB2YWx1ZUdQUjsKICAgICAKLSAgICBpZiAoYXQo
dmFsdWVVc2UpLmlzQ29uc3RhbnQoKSkgewotICAgICAgICBKU1ZhbHVlIGpzVmFsdWUgPSB2YWx1
ZU9mSlNDb25zdGFudCh2YWx1ZVVzZS5pbmRleCgpKTsKKyAgICBpZiAodmFsdWVVc2UtPmlzQ29u
c3RhbnQoKSkgeworICAgICAgICBKU1ZhbHVlIGpzVmFsdWUgPSB2YWx1ZU9mSlNDb25zdGFudCh2
YWx1ZVVzZS5ub2RlKCkpOwogICAgICAgICBpZiAoIWpzVmFsdWUuaXNOdW1iZXIoKSkgewotICAg
ICAgICAgICAgdGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oVW5jb3VudGFibGUsIEpTVmFs
dWVSZWdzKCksIE5vTm9kZSk7Ci0gICAgICAgICAgICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCk7
CisgICAgICAgICAgICB0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihVbmNvdW50YWJsZSwg
SlNWYWx1ZVJlZ3MoKSwgMCk7CisgICAgICAgICAgICBub1Jlc3VsdChub2RlKTsKICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICBkb3VibGUgZCA9IGpzVmFsdWUuYXNOdW1i
ZXIoKTsKQEAgLTI2NzksNyArMjY2Myw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQ
dXRCeVZhbEZvckkKICAgICAgICAgbV9qaXQubW92ZShJbW0zMih0b0ludDMyKGQpKSwgc2NyYXRj
aFJlZyk7CiAgICAgICAgIHZhbHVlLmFkb3B0KHNjcmF0Y2gpOwogICAgICAgICB2YWx1ZUdQUiA9
IHNjcmF0Y2hSZWc7Ci0gICAgfSBlbHNlIGlmIChhdCh2YWx1ZVVzZSkuc2hvdWxkU3BlY3VsYXRl
SW50ZWdlcigpKSB7CisgICAgfSBlbHNlIGlmICh2YWx1ZVVzZS0+c2hvdWxkU3BlY3VsYXRlSW50
ZWdlcigpKSB7CiAgICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIHZhbHVlT3AodGhpcywg
dmFsdWVVc2UpOwogICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKICAgICAgICAg
R1BSUmVnIHNjcmF0Y2hSZWcgPSBzY3JhdGNoLmdwcigpOwpAQCAtMjcyNiw3ICsyNzEwLDcgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVB1dEJ5VmFsRm9ySQogICAgIEFTU0VSVCh2YWx1
ZUdQUiAhPSBiYXNlKTsKICAgICBBU1NFUlQodmFsdWVHUFIgIT0gc3RvcmFnZVJlZyk7CiAgICAg
TWFjcm9Bc3NlbWJsZXI6Okp1bXAgb3V0T2ZCb3VuZHM7Ci0gICAgaWYgKG5vZGUub3AoKSA9PSBQ
dXRCeVZhbCkKKyAgICBpZiAobm9kZS0+b3AoKSA9PSBQdXRCeVZhbCkKICAgICAgICAgb3V0T2ZC
b3VuZHMgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9w
ZXJ0eSwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZSwgZGVzY3JpcHRvci5tX2xlbmd0aE9m
ZnNldCkpOwogCiAgICAgc3dpdGNoIChlbGVtZW50U2l6ZSkgewpAQCAtMjc0MiwyNyArMjcyNiwy
NyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUHV0QnlWYWxGb3JJCiAgICAgZGVmYXVs
dDoKICAgICAgICAgQ1JBU0goKTsKICAgICB9Ci0gICAgaWYgKG5vZGUub3AoKSA9PSBQdXRCeVZh
bCkKKyAgICBpZiAobm9kZS0+b3AoKSA9PSBQdXRCeVZhbCkKICAgICAgICAgb3V0T2ZCb3VuZHMu
bGluaygmbV9qaXQpOwotICAgIG5vUmVzdWx0KG1fY29tcGlsZUluZGV4KTsKKyAgICBub1Jlc3Vs
dChub2RlKTsKIH0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25GbG9h
dFR5cGVkQXJyYXkoY29uc3QgVHlwZWRBcnJheURlc2NyaXB0b3ImIGRlc2NyaXB0b3IsIE5vZGUm
IG5vZGUsIHNpemVfdCBlbGVtZW50U2l6ZSkKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVH
ZXRCeVZhbE9uRmxvYXRUeXBlZEFycmF5KGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yJiBkZXNj
cmlwdG9yLCBOb2RlKiBub2RlLCBzaXplX3QgZWxlbWVudFNpemUpCiB7Ci0gICAgU3BlY3VsYXRl
Q2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKLSAgICBTcGVjdWxhdGVTdHJp
Y3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhpcywgbm9kZS5jaGlsZDIoKSk7Ci0gICAgU3RvcmFn
ZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBub2RlLmNoaWxkMygpKTsKKyAgICBTcGVjdWxhdGVDZWxs
T3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKKyAgICBTcGVjdWxhdGVTdHJpY3RJ
bnQzMk9wZXJhbmQgcHJvcGVydHkodGhpcywgbm9kZS0+Y2hpbGQyKCkpOworICAgIFN0b3JhZ2VP
cGVyYW5kIHN0b3JhZ2UodGhpcywgbm9kZS0+Y2hpbGQzKCkpOwogCiAgICAgR1BSUmVnIGJhc2VS
ZWcgPSBiYXNlLmdwcigpOwogICAgIEdQUlJlZyBwcm9wZXJ0eVJlZyA9IHByb3BlcnR5Lmdwcigp
OwogICAgIEdQUlJlZyBzdG9yYWdlUmVnID0gc3RvcmFnZS5ncHIoKTsKIAotICAgIEFTU0VSVChu
b2RlLmFycmF5TW9kZSgpLmFscmVhZHlDaGVja2VkKG1faml0LmdyYXBoKCksIG5vZGUsIG1fc3Rh
dGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKSkpOworICAgIEFTU0VSVChub2RlLT5hcnJheU1vZGUo
KS5hbHJlYWR5Q2hlY2tlZChtX2ppdC5ncmFwaCgpLCBub2RlLCBtX3N0YXRlLmZvck5vZGUobm9k
ZS0+Y2hpbGQxKCkpKSk7CiAKICAgICBGUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwogICAgIEZQ
UlJlZyByZXN1bHRSZWcgPSByZXN1bHQuZnByKCk7CiAgICAgc3BlY3VsYXRpb25DaGVjaygKLSAg
ICAgICAgVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwKKyAgICAgICAgVW5jb3Vu
dGFibGUsIEpTVmFsdWVSZWdzKCksIDAsCiAgICAgICAgIG1faml0LmJyYW5jaDMyKAogICAgICAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsIE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIGRlc2NyaXB0b3IubV9sZW5ndGhPZmZzZXQpKSk7CiAg
ICAgc3dpdGNoIChlbGVtZW50U2l6ZSkgewpAQCAtMjc4MSwxMCArMjc2NSwxMCBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxPbkZsCiAgICAgZGVmYXVsdDoKICAgICAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICB9Ci0gICAgZG91YmxlUmVzdWx0KHJl
c3VsdFJlZywgbV9jb21waWxlSW5kZXgpOworICAgIGRvdWJsZVJlc3VsdChyZXN1bHRSZWcsIG5v
ZGUpOwogfQogCi12b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUHV0QnlWYWxGb3JGbG9hdFR5
cGVkQXJyYXkoY29uc3QgVHlwZWRBcnJheURlc2NyaXB0b3ImIGRlc2NyaXB0b3IsIEdQUlJlZyBi
YXNlLCBHUFJSZWcgcHJvcGVydHksIE5vZGUmIG5vZGUsIHNpemVfdCBlbGVtZW50U2l6ZSkKK3Zv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQdXRCeVZhbEZvckZsb2F0VHlwZWRBcnJheShjb25z
dCBUeXBlZEFycmF5RGVzY3JpcHRvciYgZGVzY3JpcHRvciwgR1BSUmVnIGJhc2UsIEdQUlJlZyBw
cm9wZXJ0eSwgTm9kZSogbm9kZSwgc2l6ZV90IGVsZW1lbnRTaXplKQogewogICAgIFN0b3JhZ2VP
cGVyYW5kIHN0b3JhZ2UodGhpcywgbV9qaXQuZ3JhcGgoKS52YXJBcmdDaGlsZChub2RlLCAzKSk7
CiAgICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigpOwpAQCAtMjc5NCwxMiArMjc3
OCwxMiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUHV0QnlWYWxGb3JGCiAgICAgCiAg
ICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCB2YWx1ZU9wKHRoaXMsIHZhbHVlVXNlKTsKICAgICAK
LSAgICBBU1NFUlRfVU5VU0VEKGJhc2VVc2UsIG5vZGUuYXJyYXlNb2RlKCkuYWxyZWFkeUNoZWNr
ZWQobV9qaXQuZ3JhcGgoKSwgbV9qaXQuZ3JhcGgoKVttX2NvbXBpbGVJbmRleF0sIG1fc3RhdGUu
Zm9yTm9kZShiYXNlVXNlKSkpOworICAgIEFTU0VSVF9VTlVTRUQoYmFzZVVzZSwgbm9kZS0+YXJy
YXlNb2RlKCkuYWxyZWFkeUNoZWNrZWQobV9qaXQuZ3JhcGgoKSwgbm9kZSwgbV9zdGF0ZS5mb3JO
b2RlKGJhc2VVc2UpKSk7CiAgICAgCiAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKICAg
ICAKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBvdXRPZkJvdW5kczsKLSAgICBpZiAobm9kZS5v
cCgpID09IFB1dEJ5VmFsKQorICAgIGlmIChub2RlLT5vcCgpID09IFB1dEJ5VmFsKQogICAgICAg
ICBvdXRPZkJvdW5kcyA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1
YWwsIHByb3BlcnR5LCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlLCBkZXNjcmlwdG9yLm1f
bGVuZ3RoT2Zmc2V0KSk7CiAgICAgCiAgICAgc3dpdGNoIChlbGVtZW50U2l6ZSkgewpAQCAtMjgx
NiwxNiArMjgwMCwxNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUHV0QnlWYWxGb3JG
CiAgICAgZGVmYXVsdDoKICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAg
ICB9Ci0gICAgaWYgKG5vZGUub3AoKSA9PSBQdXRCeVZhbCkKKyAgICBpZiAobm9kZS0+b3AoKSA9
PSBQdXRCeVZhbCkKICAgICAgICAgb3V0T2ZCb3VuZHMubGluaygmbV9qaXQpOwotICAgIG5vUmVz
dWx0KG1fY29tcGlsZUluZGV4KTsKKyAgICBub1Jlc3VsdChub2RlKTsKIH0KIAotdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZUluc3RhbmNlT2ZGb3JPYmplY3QoTm9kZSYsIEdQUlJlZyB2YWx1
ZVJlZywgR1BSUmVnIHByb3RvdHlwZVJlZywgR1BSUmVnIHNjcmF0Y2hSZWcpCit2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlSW5zdGFuY2VPZkZvck9iamVjdChOb2RlKiwgR1BSUmVnIHZhbHVl
UmVnLCBHUFJSZWcgcHJvdG90eXBlUmVnLCBHUFJSZWcgc2NyYXRjaFJlZykKIHsKICAgICAvLyBD
aGVjayB0aGF0IHByb3RvdHlwZSBpcyBhbiBvYmplY3QuCiAgICAgbV9qaXQubG9hZFB0cihNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhwcm90b3R5cGVSZWcsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0
KCkpLCBzY3JhdGNoUmVnKTsKLSAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVS
ZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoSWZOb3RPYmplY3Qoc2NyYXRjaFJlZykpOworICAg
IHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3MoKSwgMCwgbV9qaXQuYnJhbmNo
SWZOb3RPYmplY3Qoc2NyYXRjaFJlZykpOwogICAgIAogICAgIC8vIEluaXRpYWxpemUgc2NyYXRj
aFJlZyB3aXRoIHRoZSB2YWx1ZSBiZWluZyBjaGVja2VkLgogICAgIG1faml0Lm1vdmUodmFsdWVS
ZWcsIHNjcmF0Y2hSZWcpOwpAQCAtMjg2MSwxNyArMjg0NSwxNiBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlSW5zdGFuY2VPZkZvCiAgICAgcHV0UmVzdWx0LmxpbmsoJm1faml0KTsKIH0K
IAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUluc3RhbmNlT2YoTm9kZSYgbm9kZSkKK3Zv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVJbnN0YW5jZU9mKE5vZGUqIG5vZGUpCiB7Ci0gICAg
aWYgKCghIShhdChub2RlLmNoaWxkMSgpKS5wcmVkaWN0aW9uKCkgJiB+U3BlY0NlbGwpCi0gICAg
ICAgICAmJiAhIShtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlICYgflNwZWND
ZWxsKSkKLSAgICAgICAgfHwgYXQobm9kZS5jaGlsZDEoKSkuYWRqdXN0ZWRSZWZDb3VudCgpID09
IDEpIHsKKyAgICBpZiAoKCEhKG5vZGUtPmNoaWxkMSgpLT5wcmVkaWN0aW9uKCkgJiB+U3BlY0Nl
bGwpICYmICEhKG1fc3RhdGUuZm9yTm9kZShub2RlLT5jaGlsZDEoKSkubV90eXBlICYgflNwZWND
ZWxsKSkKKyAgICAgICAgfHwgbm9kZS0+Y2hpbGQxKCktPmFkanVzdGVkUmVmQ291bnQoKSA9PSAx
KSB7CiAgICAgICAgIC8vIEl0IG1pZ2h0IG5vdCBiZSBhIGNlbGwuIFNwZWN1bGF0ZSBsZXNzIGFn
Z3Jlc3NpdmVseS4KICAgICAgICAgLy8gT3I6IGl0IG1pZ2h0IG9ubHkgYmUgdXNlZCBvbmNlIChp
LmUuIGJ5IHVzKSwgc28gd2UgZ2V0IHplcm8gYmVuZWZpdAogICAgICAgICAvLyBmcm9tIHNwZWN1
bGF0aW5nIGFueSBtb3JlIGFnZ3Jlc3NpdmVseSB0aGFuIHdlIGFic29sdXRlbHkgbmVlZCB0by4K
ICAgICAgICAgCi0gICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUuY2hpbGQx
KCkpOwotICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBwcm90b3R5cGUodGhpcywgbm9kZS5j
aGlsZDIoKSk7CisgICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUtPmNoaWxk
MSgpKTsKKyAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgcHJvdG90eXBlKHRoaXMsIG5vZGUt
PmNoaWxkMigpKTsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7CiAgICAgICAg
IAogICAgICAgICBHUFJSZWcgcHJvdG90eXBlUmVnID0gcHJvdG90eXBlLmdwcigpOwpAQCAtMjg5
NywxNSArMjg4MCwxNSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlSW5zdGFuY2VPZihO
CiAgICAgICAgIGRvbmUubGluaygmbV9qaXQpOwogCiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAg
ICAganNWYWx1ZVJlc3VsdChzY3JhdGNoUmVnLCBtX2NvbXBpbGVJbmRleCwgRGF0YUZvcm1hdEpT
Qm9vbGVhbik7CisgICAgICAgIGpzVmFsdWVSZXN1bHQoc2NyYXRjaFJlZywgbm9kZSwgRGF0YUZv
cm1hdEpTQm9vbGVhbik7CiAjZWxzZQotICAgICAgICBib29sZWFuUmVzdWx0KHNjcmF0Y2hSZWcs
IG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAgYm9vbGVhblJlc3VsdChzY3JhdGNoUmVnLCBub2Rl
KTsKICNlbmRpZgogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAotICAgIFNwZWN1bGF0ZUNl
bGxPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwotICAgIFNwZWN1bGF0ZUNlbGxP
cGVyYW5kIHByb3RvdHlwZSh0aGlzLCBub2RlLmNoaWxkMigpKTsKKyAgICBTcGVjdWxhdGVDZWxs
T3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CisgICAgU3BlY3VsYXRlQ2VsbE9w
ZXJhbmQgcHJvdG90eXBlKHRoaXMsIG5vZGUtPmNoaWxkMigpKTsKICAgICAKICAgICBHUFJUZW1w
b3Jhcnkgc2NyYXRjaCh0aGlzKTsKICAgICAKQEAgLTI5MTYsMjAgKzI4OTksMjAgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUluc3RhbmNlT2YoTgogICAgIGNvbXBpbGVJbnN0YW5jZU9m
Rm9yT2JqZWN0KG5vZGUsIHZhbHVlUmVnLCBwcm90b3R5cGVSZWcsIHNjcmF0Y2hSZWcpOwogCiAj
aWYgVVNFKEpTVkFMVUU2NCkKLSAgICBqc1ZhbHVlUmVzdWx0KHNjcmF0Y2hSZWcsIG1fY29tcGls
ZUluZGV4LCBEYXRhRm9ybWF0SlNCb29sZWFuKTsKKyAgICBqc1ZhbHVlUmVzdWx0KHNjcmF0Y2hS
ZWcsIG5vZGUsIERhdGFGb3JtYXRKU0Jvb2xlYW4pOwogI2Vsc2UKLSAgICBib29sZWFuUmVzdWx0
KHNjcmF0Y2hSZWcsIG1fY29tcGlsZUluZGV4KTsKKyAgICBib29sZWFuUmVzdWx0KHNjcmF0Y2hS
ZWcsIG5vZGUpOwogI2VuZGlmCiB9CiAKLXZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVTb2Z0
TW9kdWxvKE5vZGUmIG5vZGUpCit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlU29mdE1vZHVs
byhOb2RlKiBub2RlKQogewogICAgIC8vIEluIHRoZSBmYXN0IHBhdGgsIHRoZSBkaXZpZGVuZCB2
YWx1ZSBjb3VsZCBiZSB0aGUgZmluYWwgcmVzdWx0CiAgICAgLy8gKGluIGNhc2Ugb2YgfGRpdmlk
ZW5kfCA8IHxkaXZpc29yfCksIHNvIHdlIHNwZWN1bGF0ZSBpdCBhcyBzdHJpY3QgaW50MzIuCi0g
ICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSgpKTsK
KyAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgb3AxKHRoaXMsIG5vZGUtPmNoaWxkMSgp
KTsKICNpZiBDUFUoWDg2KSB8fCBDUFUoWDg2XzY0KQotICAgIGlmIChpc0ludDMyQ29uc3RhbnQo
bm9kZS5jaGlsZDIoKS5pbmRleCgpKSkgewotICAgICAgICBpbnQzMl90IGRpdmlzb3IgPSB2YWx1
ZU9mSW50MzJDb25zdGFudChub2RlLmNoaWxkMigpLmluZGV4KCkpOworICAgIGlmIChpc0ludDMy
Q29uc3RhbnQobm9kZS0+Y2hpbGQyKCkubm9kZSgpKSkgeworICAgICAgICBpbnQzMl90IGRpdmlz
b3IgPSB2YWx1ZU9mSW50MzJDb25zdGFudChub2RlLT5jaGlsZDIoKS5ub2RlKCkpOwogICAgICAg
ICBpZiAoZGl2aXNvcikgewogICAgICAgICAgICAgR1BSUmVnIG9wMUdwciA9IG9wMS5ncHIoKTsK
IApAQCAtMjk1MSwyNSArMjkzNCwyNSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlU29m
dE1vZHVsbyhOCiAgICAgICAgICAgICBtX2ppdC5tb3ZlKG9wMUdwciwgZWF4LmdwcigpKTsKICAg
ICAgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbTMyKGRpdmlzb3IpLCBzY3JhdGNoR1BSKTsK
ICAgICAgICAgICAgIGlmIChkaXZpc29yID09IC0xKQotICAgICAgICAgICAgICAgIHNwZWN1bGF0
aW9uQ2hlY2soT3ZlcmZsb3csIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoMzIo
SklUQ29tcGlsZXI6OkVxdWFsLCBlYXguZ3ByKCksIFRydXN0ZWRJbW0zMigtMjE0NzQ4MzY0Ny0x
KSkpOworICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soT3ZlcmZsb3csIEpTVmFsdWVS
ZWdzKCksIDAsIG1faml0LmJyYW5jaDMyKEpJVENvbXBpbGVyOjpFcXVhbCwgZWF4LmdwcigpLCBU
cnVzdGVkSW1tMzIoLTIxNDc0ODM2NDctMSkpKTsKICAgICAgICAgICAgIG1faml0LmFzc2VtYmxl
cigpLmNkcSgpOwogICAgICAgICAgICAgbV9qaXQuYXNzZW1ibGVyKCkuaWRpdmxfcihzY3JhdGNo
R1BSKTsKICAgICAgICAgICAgIC8vIENoZWNrIHRoYXQgd2UncmUgbm90IGFib3V0IHRvIGNyZWF0
ZSBuZWdhdGl2ZSB6ZXJvLgogICAgICAgICAgICAgLy8gRklYTUU6IGlmIHRoZSBub2RlIHVzZSBk
b2Vzbid0IGNhcmUgYWJvdXQgbmVnIHplcm8sIHdlIGNhbiBkbyB0aGlzIG1vcmUgZWFzaWx5Lgog
ICAgICAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgbnVtZXJhdG9yUG9zaXRpdmUgPSBtX2ppdC5i
cmFuY2gzMihKSVRDb21waWxlcjo6R3JlYXRlclRoYW5PckVxdWFsLCBvcDFTYXZlR1BSLCBUcnVz
dGVkSW1tMzIoMCkpOwotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhPdmVyZmxvdywgSlNW
YWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2hUZXN0MzIoSklUQ29tcGlsZXI6Olplcm8s
IGVkeC5ncHIoKSkpOworICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhPdmVyZmxvdywgSlNW
YWx1ZVJlZ3MoKSwgMCwgbV9qaXQuYnJhbmNoVGVzdDMyKEpJVENvbXBpbGVyOjpaZXJvLCBlZHgu
Z3ByKCkpKTsKICAgICAgICAgICAgIG51bWVyYXRvclBvc2l0aXZlLmxpbmsoJm1faml0KTsKICAg
ICAgICAgICAgIAogICAgICAgICAgICAgaWYgKG9wMVNhdmVHUFIgIT0gb3AxR3ByKQogICAgICAg
ICAgICAgICAgIHVubG9jayhvcDFTYXZlR1BSKTsKIAotICAgICAgICAgICAgaW50ZWdlclJlc3Vs
dChlZHguZ3ByKCksIG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAgICAgIGludGVnZXJSZXN1bHQo
ZWR4LmdwcigpLCBub2RlKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgIH0K
ICNlbmRpZgogCi0gICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AyKHRoaXMsIG5vZGUuY2hp
bGQyKCkpOworICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMih0aGlzLCBub2RlLT5jaGls
ZDIoKSk7CiAjaWYgQ1BVKFg4NikgfHwgQ1BVKFg4Nl82NCkKICAgICBHUFJUZW1wb3JhcnkgZWF4
KHRoaXMsIFg4NlJlZ2lzdGVyczo6ZWF4KTsKICAgICBHUFJUZW1wb3JhcnkgZWR4KHRoaXMsIFg4
NlJlZ2lzdGVyczo6ZWR4KTsKQEAgLTMwMDksOCArMjk5Miw4IEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVTb2Z0TW9kdWxvKE4KICAgICAKICAgICBKSVRDb21waWxlcjo6SnVtcCBkb25l
OwogICAgIC8vIEZJWE1FOiBpZiB0aGUgbm9kZSBpcyBub3QgdXNlZCBhcyBudW1iZXIgdGhlbiB3
ZSBjYW4gZG8gdGhpcyBtb3JlIGVhc2lseS4KLSAgICBzcGVjdWxhdGlvbkNoZWNrKE92ZXJmbG93
LCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaFRlc3QzMihKSVRDb21waWxlcjo6
WmVybywgb3AyR1BSKSk7Ci0gICAgc3BlY3VsYXRpb25DaGVjayhPdmVyZmxvdywgSlNWYWx1ZVJl
Z3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2gzMihKSVRDb21waWxlcjo6RXF1YWwsIG9wMUdQUiwg
VHJ1c3RlZEltbTMyKC0yMTQ3NDgzNjQ3LTEpKSk7CisgICAgc3BlY3VsYXRpb25DaGVjayhPdmVy
ZmxvdywgSlNWYWx1ZVJlZ3MoKSwgMCwgbV9qaXQuYnJhbmNoVGVzdDMyKEpJVENvbXBpbGVyOjpa
ZXJvLCBvcDJHUFIpKTsKKyAgICBzcGVjdWxhdGlvbkNoZWNrKE92ZXJmbG93LCBKU1ZhbHVlUmVn
cygpLCAwLCBtX2ppdC5icmFuY2gzMihKSVRDb21waWxlcjo6RXF1YWwsIG9wMUdQUiwgVHJ1c3Rl
ZEltbTMyKC0yMTQ3NDgzNjQ3LTEpKSk7CiAgICAgCiAgICAgc2FmZURlbm9taW5hdG9yLmxpbmso
Jm1faml0KTsKICAgICAgICAgICAgIApAQCAtMzAyOSwxMyArMzAxMiwxMyBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlU29mdE1vZHVsbyhOCiAgICAgLy8gQ2hlY2sgdGhhdCB3ZSdyZSBu
b3QgYWJvdXQgdG8gY3JlYXRlIG5lZ2F0aXZlIHplcm8uCiAgICAgLy8gRklYTUU6IGlmIHRoZSBu
b2RlIHVzZSBkb2Vzbid0IGNhcmUgYWJvdXQgbmVnIHplcm8sIHdlIGNhbiBkbyB0aGlzIG1vcmUg
ZWFzaWx5LgogICAgIEpJVENvbXBpbGVyOjpKdW1wIG51bWVyYXRvclBvc2l0aXZlID0gbV9qaXQu
YnJhbmNoMzIoSklUQ29tcGlsZXI6OkdyZWF0ZXJUaGFuT3JFcXVhbCwgb3AxU2F2ZUdQUiwgVHJ1
c3RlZEltbTMyKDApKTsKLSAgICBzcGVjdWxhdGlvbkNoZWNrKE92ZXJmbG93LCBKU1ZhbHVlUmVn
cygpLCBOb05vZGUsIG1faml0LmJyYW5jaFRlc3QzMihKSVRDb21waWxlcjo6WmVybywgZWR4Lmdw
cigpKSk7CisgICAgc3BlY3VsYXRpb25DaGVjayhPdmVyZmxvdywgSlNWYWx1ZVJlZ3MoKSwgMCwg
bV9qaXQuYnJhbmNoVGVzdDMyKEpJVENvbXBpbGVyOjpaZXJvLCBlZHguZ3ByKCkpKTsKICAgICBu
dW1lcmF0b3JQb3NpdGl2ZS5saW5rKCZtX2ppdCk7CiAgICAgCiAgICAgaWYgKG9wMVNhdmVHUFIg
IT0gb3AxR1BSKQogICAgICAgICB1bmxvY2sob3AxU2F2ZUdQUik7CiAgICAgICAgICAgICAKLSAg
ICBpbnRlZ2VyUmVzdWx0KGVkeC5ncHIoKSwgbV9jb21waWxlSW5kZXgpOworICAgIGludGVnZXJS
ZXN1bHQoZWR4LmdwcigpLCBub2RlKTsKICNlbHNlIC8vIENQVShYODYpIHx8IENQVShYODZfNjQp
IC0tPiBzbyBub3QgWDg2CiAgICAgLy8gRG8gdGhpcyB0aGUgKnNhZmVzdCogd2F5IHBvc3NpYmxl
OiBjYWxsIG91dCB0byBhIEMgZnVuY3Rpb24gdGhhdCB3aWxsIGRvIHRoZSBtb2R1bG8sCiAgICAg
Ly8gYW5kIHRoZW4gYXR0ZW1wdCB0byBjb252ZXJ0IGJhY2suCkBAIC0zMDUxLDU0ICszMDM0LDU0
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVTb2Z0TW9kdWxvKE4KICAgICBHUFJUZW1w
b3JhcnkgaW50UmVzdWx0KHRoaXMpOwogICAgIEpJVENvbXBpbGVyOjpKdW1wTGlzdCBmYWlsdXJl
Q2FzZXM7CiAgICAgbV9qaXQuYnJhbmNoQ29udmVydERvdWJsZVRvSW50MzIocmVzdWx0LmZwcigp
LCBpbnRSZXN1bHQuZ3ByKCksIGZhaWx1cmVDYXNlcywgc2NyYXRjaC5mcHIoKSk7Ci0gICAgc3Bl
Y3VsYXRpb25DaGVjayhPdmVyZmxvdywgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBmYWlsdXJlQ2Fz
ZXMpOworICAgIHNwZWN1bGF0aW9uQ2hlY2soT3ZlcmZsb3csIEpTVmFsdWVSZWdzKCksIDAsIGZh
aWx1cmVDYXNlcyk7CiAgICAgCi0gICAgaW50ZWdlclJlc3VsdChpbnRSZXN1bHQuZ3ByKCksIG1f
Y29tcGlsZUluZGV4KTsKKyAgICBpbnRlZ2VyUmVzdWx0KGludFJlc3VsdC5ncHIoKSwgbm9kZSk7
CiAjZW5kaWYgLy8gQ1BVKFg4NikgfHwgQ1BVKFg4Nl82NCkKIH0KIAotdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZUFkZChOb2RlJiBub2RlKQordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZUFkZChOb2RlKiBub2RlKQogewogICAgIGlmIChtX2ppdC5ncmFwaCgpLmFkZFNob3VsZFNwZWN1
bGF0ZUludGVnZXIobm9kZSkpIHsKLSAgICAgICAgaWYgKGlzTnVtYmVyQ29uc3RhbnQobm9kZS5j
aGlsZDEoKS5pbmRleCgpKSkgewotICAgICAgICAgICAgaW50MzJfdCBpbW0xID0gdmFsdWVPZk51
bWJlckNvbnN0YW50QXNJbnQzMihub2RlLmNoaWxkMSgpLmluZGV4KCkpOwotICAgICAgICAgICAg
U3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AyKHRoaXMsIG5vZGUuY2hpbGQyKCkpOworICAgICAg
ICBpZiAoaXNOdW1iZXJDb25zdGFudChub2RlLT5jaGlsZDEoKS5ub2RlKCkpKSB7CisgICAgICAg
ICAgICBpbnQzMl90IGltbTEgPSB2YWx1ZU9mTnVtYmVyQ29uc3RhbnRBc0ludDMyKG5vZGUtPmNo
aWxkMSgpLm5vZGUoKSk7CisgICAgICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDIo
dGhpcywgbm9kZS0+Y2hpbGQyKCkpOwogICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0
aGlzKTsKIAotICAgICAgICAgICAgaWYgKG5vZGVDYW5UcnVuY2F0ZUludGVnZXIobm9kZS5hcml0
aE5vZGVGbGFncygpKSkgeworICAgICAgICAgICAgaWYgKG5vZGVDYW5UcnVuY2F0ZUludGVnZXIo
bm9kZS0+YXJpdGhOb2RlRmxhZ3MoKSkpIHsKICAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKG9w
Mi5ncHIoKSwgcmVzdWx0LmdwcigpKTsKICAgICAgICAgICAgICAgICBtX2ppdC5hZGQzMihJbW0z
MihpbW0xKSwgcmVzdWx0LmdwcigpKTsKICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAg
ICAgIHNwZWN1bGF0aW9uQ2hlY2soT3ZlcmZsb3csIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9q
aXQuYnJhbmNoQWRkMzIoTWFjcm9Bc3NlbWJsZXI6Ok92ZXJmbG93LCBvcDIuZ3ByKCksIEltbTMy
KGltbTEpLCByZXN1bHQuZ3ByKCkpKTsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNr
KE92ZXJmbG93LCBKU1ZhbHVlUmVncygpLCAwLCBtX2ppdC5icmFuY2hBZGQzMihNYWNyb0Fzc2Vt
Ymxlcjo6T3ZlcmZsb3csIG9wMi5ncHIoKSwgSW1tMzIoaW1tMSksIHJlc3VsdC5ncHIoKSkpOwog
Ci0gICAgICAgICAgICBpbnRlZ2VyUmVzdWx0KHJlc3VsdC5ncHIoKSwgbV9jb21waWxlSW5kZXgp
OworICAgICAgICAgICAgaW50ZWdlclJlc3VsdChyZXN1bHQuZ3ByKCksIG5vZGUpOwogICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgICAgICAgICAgCi0gICAgICAgIGlmIChp
c051bWJlckNvbnN0YW50KG5vZGUuY2hpbGQyKCkuaW5kZXgoKSkpIHsKLSAgICAgICAgICAgIFNw
ZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKLSAgICAgICAg
ICAgIGludDMyX3QgaW1tMiA9IHZhbHVlT2ZOdW1iZXJDb25zdGFudEFzSW50MzIobm9kZS5jaGls
ZDIoKS5pbmRleCgpKTsKKyAgICAgICAgaWYgKGlzTnVtYmVyQ29uc3RhbnQobm9kZS0+Y2hpbGQy
KCkubm9kZSgpKSkgeworICAgICAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AxKHRo
aXMsIG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgIGludDMyX3QgaW1tMiA9IHZhbHVlT2ZO
dW1iZXJDb25zdGFudEFzSW50MzIobm9kZS0+Y2hpbGQyKCkubm9kZSgpKTsKICAgICAgICAgICAg
IEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAg
ICBpZiAobm9kZUNhblRydW5jYXRlSW50ZWdlcihub2RlLmFyaXRoTm9kZUZsYWdzKCkpKSB7Cisg
ICAgICAgICAgICBpZiAobm9kZUNhblRydW5jYXRlSW50ZWdlcihub2RlLT5hcml0aE5vZGVGbGFn
cygpKSkgewogICAgICAgICAgICAgICAgIG1faml0Lm1vdmUob3AxLmdwcigpLCByZXN1bHQuZ3By
KCkpOwogICAgICAgICAgICAgICAgIG1faml0LmFkZDMyKEltbTMyKGltbTIpLCByZXN1bHQuZ3By
KCkpOwogICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVj
ayhPdmVyZmxvdywgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2hBZGQzMihNYWNy
b0Fzc2VtYmxlcjo6T3ZlcmZsb3csIG9wMS5ncHIoKSwgSW1tMzIoaW1tMiksIHJlc3VsdC5ncHIo
KSkpOworICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soT3ZlcmZsb3csIEpTVmFsdWVS
ZWdzKCksIDAsIG1faml0LmJyYW5jaEFkZDMyKE1hY3JvQXNzZW1ibGVyOjpPdmVyZmxvdywgb3Ax
LmdwcigpLCBJbW0zMihpbW0yKSwgcmVzdWx0LmdwcigpKSk7CiAKLSAgICAgICAgICAgIGludGVn
ZXJSZXN1bHQocmVzdWx0LmdwcigpLCBtX2NvbXBpbGVJbmRleCk7CisgICAgICAgICAgICBpbnRl
Z2VyUmVzdWx0KHJlc3VsdC5ncHIoKSwgbm9kZSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICAKLSAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQg
b3AxKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwotICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFu
ZCBvcDIodGhpcywgbm9kZS5jaGlsZDIoKSk7CisgICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVy
YW5kIG9wMSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIFNwZWN1bGF0ZUludGVnZXJP
cGVyYW5kIG9wMih0aGlzLCBub2RlLT5jaGlsZDIoKSk7CiAgICAgICAgIEdQUlRlbXBvcmFyeSBy
ZXN1bHQodGhpcywgb3AxLCBvcDIpOwogCiAgICAgICAgIEdQUlJlZyBncHIxID0gb3AxLmdwcigp
OwogICAgICAgICBHUFJSZWcgZ3ByMiA9IG9wMi5ncHIoKTsKICAgICAgICAgR1BSUmVnIGdwclJl
c3VsdCA9IHJlc3VsdC5ncHIoKTsKIAotICAgICAgICBpZiAobm9kZUNhblRydW5jYXRlSW50ZWdl
cihub2RlLmFyaXRoTm9kZUZsYWdzKCkpKSB7CisgICAgICAgIGlmIChub2RlQ2FuVHJ1bmNhdGVJ
bnRlZ2VyKG5vZGUtPmFyaXRoTm9kZUZsYWdzKCkpKSB7CiAgICAgICAgICAgICBpZiAoZ3ByMSA9
PSBncHJSZXN1bHQpCiAgICAgICAgICAgICAgICAgbV9qaXQuYWRkMzIoZ3ByMiwgZ3ByUmVzdWx0
KTsKICAgICAgICAgICAgIGVsc2UgewpAQCAtMzEwOSwxMzYgKzMwOTIsMTM2IEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGVBZGQoTm9kZSYgbm8KICAgICAgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpKdW1wIGNoZWNrID0gbV9qaXQuYnJhbmNoQWRkMzIoTWFjcm9Bc3NlbWJsZXI6Ok92ZXJm
bG93LCBncHIxLCBncHIyLCBncHJSZXN1bHQpOwogICAgICAgICAgICAgICAgIAogICAgICAgICAg
ICAgaWYgKGdwcjEgPT0gZ3ByUmVzdWx0KQotICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hl
Y2soT3ZlcmZsb3csIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgY2hlY2ssIFNwZWN1bGF0aW9uUmVj
b3ZlcnkoU3BlY3VsYXRpdmVBZGQsIGdwclJlc3VsdCwgZ3ByMikpOworICAgICAgICAgICAgICAg
IHNwZWN1bGF0aW9uQ2hlY2soT3ZlcmZsb3csIEpTVmFsdWVSZWdzKCksIDAsIGNoZWNrLCBTcGVj
dWxhdGlvblJlY292ZXJ5KFNwZWN1bGF0aXZlQWRkLCBncHJSZXN1bHQsIGdwcjIpKTsKICAgICAg
ICAgICAgIGVsc2UgaWYgKGdwcjIgPT0gZ3ByUmVzdWx0KQotICAgICAgICAgICAgICAgIHNwZWN1
bGF0aW9uQ2hlY2soT3ZlcmZsb3csIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgY2hlY2ssIFNwZWN1
bGF0aW9uUmVjb3ZlcnkoU3BlY3VsYXRpdmVBZGQsIGdwclJlc3VsdCwgZ3ByMSkpOworICAgICAg
ICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soT3ZlcmZsb3csIEpTVmFsdWVSZWdzKCksIDAsIGNo
ZWNrLCBTcGVjdWxhdGlvblJlY292ZXJ5KFNwZWN1bGF0aXZlQWRkLCBncHJSZXN1bHQsIGdwcjEp
KTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE92
ZXJmbG93LCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIGNoZWNrKTsKKyAgICAgICAgICAgICAgICBz
cGVjdWxhdGlvbkNoZWNrKE92ZXJmbG93LCBKU1ZhbHVlUmVncygpLCAwLCBjaGVjayk7CiAgICAg
ICAgIH0KIAotICAgICAgICBpbnRlZ2VyUmVzdWx0KGdwclJlc3VsdCwgbV9jb21waWxlSW5kZXgp
OworICAgICAgICBpbnRlZ2VyUmVzdWx0KGdwclJlc3VsdCwgbm9kZSk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAgICAgICAgIAotICAgIGlmIChOb2RlOjpzaG91bGRTcGVjdWxhdGVOdW1iZXJF
eHBlY3RpbmdEZWZpbmVkKGF0KG5vZGUuY2hpbGQxKCkpLCBhdChub2RlLmNoaWxkMigpKSkpIHsK
LSAgICAgICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEoKSk7
Ci0gICAgICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgb3AyKHRoaXMsIG5vZGUuY2hpbGQyKCkp
OworICAgIGlmIChOb2RlOjpzaG91bGRTcGVjdWxhdGVOdW1iZXJFeHBlY3RpbmdEZWZpbmVkKG5v
ZGUtPmNoaWxkMSgpLm5vZGUoKSwgbm9kZS0+Y2hpbGQyKCkubm9kZSgpKSkgeworICAgICAgICBT
cGVjdWxhdGVEb3VibGVPcGVyYW5kIG9wMSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CisgICAgICAg
IFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgb3AyKHRoaXMsIG5vZGUtPmNoaWxkMigpKTsKICAgICAg
ICAgRlBSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBvcDEsIG9wMik7CiAKICAgICAgICAgRlBSUmVn
IHJlZzEgPSBvcDEuZnByKCk7CiAgICAgICAgIEZQUlJlZyByZWcyID0gb3AyLmZwcigpOwogICAg
ICAgICBtX2ppdC5hZGREb3VibGUocmVnMSwgcmVnMiwgcmVzdWx0LmZwcigpKTsKIAotICAgICAg
ICBkb3VibGVSZXN1bHQocmVzdWx0LmZwcigpLCBtX2NvbXBpbGVJbmRleCk7CisgICAgICAgIGRv
dWJsZVJlc3VsdChyZXN1bHQuZnByKCksIG5vZGUpOwogICAgICAgICByZXR1cm47CiAgICAgfQog
Ci0gICAgaWYgKG5vZGUub3AoKSA9PSBWYWx1ZUFkZCkgeworICAgIGlmIChub2RlLT5vcCgpID09
IFZhbHVlQWRkKSB7CiAgICAgICAgIGNvbXBpbGVWYWx1ZUFkZChub2RlKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KICAgICAKICAgICAvLyBXZSBkb24ndCBoYW5kbGUgdGhpcyB5ZXQuIDotKAot
ICAgIHRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVn
cygpLCBOb05vZGUpOworICAgIHRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKFVuY291bnRh
YmxlLCBKU1ZhbHVlUmVncygpLCAwKTsKIH0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZUFyaXRoU3ViKE5vZGUmIG5vZGUpCit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQXJpdGhT
dWIoTm9kZSogbm9kZSkKIHsKICAgICBpZiAobV9qaXQuZ3JhcGgoKS5hZGRTaG91bGRTcGVjdWxh
dGVJbnRlZ2VyKG5vZGUpKSB7Ci0gICAgICAgIGlmIChpc051bWJlckNvbnN0YW50KG5vZGUuY2hp
bGQyKCkuaW5kZXgoKSkpIHsKLSAgICAgICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9w
MSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKLSAgICAgICAgICAgIGludDMyX3QgaW1tMiA9IHZhbHVl
T2ZOdW1iZXJDb25zdGFudEFzSW50MzIobm9kZS5jaGlsZDIoKS5pbmRleCgpKTsKKyAgICAgICAg
aWYgKGlzTnVtYmVyQ29uc3RhbnQobm9kZS0+Y2hpbGQyKCkubm9kZSgpKSkgeworICAgICAgICAg
ICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AxKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKKyAg
ICAgICAgICAgIGludDMyX3QgaW1tMiA9IHZhbHVlT2ZOdW1iZXJDb25zdGFudEFzSW50MzIobm9k
ZS0+Y2hpbGQyKCkubm9kZSgpKTsKICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhp
cyk7CiAKLSAgICAgICAgICAgIGlmIChub2RlQ2FuVHJ1bmNhdGVJbnRlZ2VyKG5vZGUuYXJpdGhO
b2RlRmxhZ3MoKSkpIHsKKyAgICAgICAgICAgIGlmIChub2RlQ2FuVHJ1bmNhdGVJbnRlZ2VyKG5v
ZGUtPmFyaXRoTm9kZUZsYWdzKCkpKSB7CiAgICAgICAgICAgICAgICAgbV9qaXQubW92ZShvcDEu
Z3ByKCksIHJlc3VsdC5ncHIoKSk7CiAgICAgICAgICAgICAgICAgbV9qaXQuc3ViMzIoSW1tMzIo
aW1tMiksIHJlc3VsdC5ncHIoKSk7CiAgICAgICAgICAgICB9IGVsc2UgewogI2lmIEVOQUJMRShK
SVRfQ09OU1RBTlRfQkxJTkRJTkcpCiAgICAgICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0
Y2godGhpcyk7Ci0gICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhPdmVyZmxvdywgSlNW
YWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2hTdWIzMihNYWNyb0Fzc2VtYmxlcjo6T3Zl
cmZsb3csIG9wMS5ncHIoKSwgSW1tMzIoaW1tMiksIHJlc3VsdC5ncHIoKSwgc2NyYXRjaC5ncHIo
KSkpOworICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soT3ZlcmZsb3csIEpTVmFsdWVS
ZWdzKCksIDAsIG1faml0LmJyYW5jaFN1YjMyKE1hY3JvQXNzZW1ibGVyOjpPdmVyZmxvdywgb3Ax
LmdwcigpLCBJbW0zMihpbW0yKSwgcmVzdWx0LmdwcigpLCBzY3JhdGNoLmdwcigpKSk7CiAjZWxz
ZQotICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soT3ZlcmZsb3csIEpTVmFsdWVSZWdz
KCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoU3ViMzIoTWFjcm9Bc3NlbWJsZXI6Ok92ZXJmbG93LCBv
cDEuZ3ByKCksIEltbTMyKGltbTIpLCByZXN1bHQuZ3ByKCkpKTsKKyAgICAgICAgICAgICAgICBz
cGVjdWxhdGlvbkNoZWNrKE92ZXJmbG93LCBKU1ZhbHVlUmVncygpLCAwLCBtX2ppdC5icmFuY2hT
dWIzMihNYWNyb0Fzc2VtYmxlcjo6T3ZlcmZsb3csIG9wMS5ncHIoKSwgSW1tMzIoaW1tMiksIHJl
c3VsdC5ncHIoKSkpOwogI2VuZGlmCiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGludGVn
ZXJSZXN1bHQocmVzdWx0LmdwcigpLCBtX2NvbXBpbGVJbmRleCk7CisgICAgICAgICAgICBpbnRl
Z2VyUmVzdWx0KHJlc3VsdC5ncHIoKSwgbm9kZSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgIH0KICAgICAgICAgICAgIAotICAgICAgICBpZiAoaXNOdW1iZXJDb25zdGFudChub2RlLmNo
aWxkMSgpLmluZGV4KCkpKSB7Ci0gICAgICAgICAgICBpbnQzMl90IGltbTEgPSB2YWx1ZU9mTnVt
YmVyQ29uc3RhbnRBc0ludDMyKG5vZGUuY2hpbGQxKCkuaW5kZXgoKSk7Ci0gICAgICAgICAgICBT
cGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDIodGhpcywgbm9kZS5jaGlsZDIoKSk7CisgICAgICAg
IGlmIChpc051bWJlckNvbnN0YW50KG5vZGUtPmNoaWxkMSgpLm5vZGUoKSkpIHsKKyAgICAgICAg
ICAgIGludDMyX3QgaW1tMSA9IHZhbHVlT2ZOdW1iZXJDb25zdGFudEFzSW50MzIobm9kZS0+Y2hp
bGQxKCkubm9kZSgpKTsKKyAgICAgICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMih0
aGlzLCBub2RlLT5jaGlsZDIoKSk7CiAgICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRo
aXMpOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgbV9qaXQubW92ZShJbW0zMihpbW0x
KSwgcmVzdWx0LmdwcigpKTsKLSAgICAgICAgICAgIGlmIChub2RlQ2FuVHJ1bmNhdGVJbnRlZ2Vy
KG5vZGUuYXJpdGhOb2RlRmxhZ3MoKSkpCisgICAgICAgICAgICBpZiAobm9kZUNhblRydW5jYXRl
SW50ZWdlcihub2RlLT5hcml0aE5vZGVGbGFncygpKSkKICAgICAgICAgICAgICAgICBtX2ppdC5z
dWIzMihvcDIuZ3ByKCksIHJlc3VsdC5ncHIoKSk7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAg
ICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhPdmVyZmxvdywgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2Rl
LCBtX2ppdC5icmFuY2hTdWIzMihNYWNyb0Fzc2VtYmxlcjo6T3ZlcmZsb3csIG9wMi5ncHIoKSwg
cmVzdWx0LmdwcigpKSk7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhPdmVyZmxv
dywgSlNWYWx1ZVJlZ3MoKSwgMCwgbV9qaXQuYnJhbmNoU3ViMzIoTWFjcm9Bc3NlbWJsZXI6Ok92
ZXJmbG93LCBvcDIuZ3ByKCksIHJlc3VsdC5ncHIoKSkpOwogICAgICAgICAgICAgICAgIAotICAg
ICAgICAgICAgaW50ZWdlclJlc3VsdChyZXN1bHQuZ3ByKCksIG1fY29tcGlsZUluZGV4KTsKKyAg
ICAgICAgICAgIGludGVnZXJSZXN1bHQocmVzdWx0LmdwcigpLCBub2RlKTsKICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgIFNwZWN1bGF0ZUludGVn
ZXJPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKLSAgICAgICAgU3BlY3VsYXRlSW50
ZWdlck9wZXJhbmQgb3AyKHRoaXMsIG5vZGUuY2hpbGQyKCkpOworICAgICAgICBTcGVjdWxhdGVJ
bnRlZ2VyT3BlcmFuZCBvcDEodGhpcywgbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBTcGVjdWxh
dGVJbnRlZ2VyT3BlcmFuZCBvcDIodGhpcywgbm9kZS0+Y2hpbGQyKCkpOwogICAgICAgICBHUFJU
ZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwogCi0gICAgICAgIGlmIChub2RlQ2FuVHJ1bmNhdGVJbnRl
Z2VyKG5vZGUuYXJpdGhOb2RlRmxhZ3MoKSkpIHsKKyAgICAgICAgaWYgKG5vZGVDYW5UcnVuY2F0
ZUludGVnZXIobm9kZS0+YXJpdGhOb2RlRmxhZ3MoKSkpIHsKICAgICAgICAgICAgIG1faml0Lm1v
dmUob3AxLmdwcigpLCByZXN1bHQuZ3ByKCkpOwogICAgICAgICAgICAgbV9qaXQuc3ViMzIob3Ay
LmdwcigpLCByZXN1bHQuZ3ByKCkpOwogICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIHNwZWN1
bGF0aW9uQ2hlY2soT3ZlcmZsb3csIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNo
U3ViMzIoTWFjcm9Bc3NlbWJsZXI6Ok92ZXJmbG93LCBvcDEuZ3ByKCksIG9wMi5ncHIoKSwgcmVz
dWx0LmdwcigpKSk7CisgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE92ZXJmbG93LCBKU1Zh
bHVlUmVncygpLCAwLCBtX2ppdC5icmFuY2hTdWIzMihNYWNyb0Fzc2VtYmxlcjo6T3ZlcmZsb3cs
IG9wMS5ncHIoKSwgb3AyLmdwcigpLCByZXN1bHQuZ3ByKCkpKTsKIAotICAgICAgICBpbnRlZ2Vy
UmVzdWx0KHJlc3VsdC5ncHIoKSwgbV9jb21waWxlSW5kZXgpOworICAgICAgICBpbnRlZ2VyUmVz
dWx0KHJlc3VsdC5ncHIoKSwgbm9kZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgICAg
IAotICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwot
ICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgb3AyKHRoaXMsIG5vZGUuY2hpbGQyKCkpOworICAg
IFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKKyAgICBT
cGVjdWxhdGVEb3VibGVPcGVyYW5kIG9wMih0aGlzLCBub2RlLT5jaGlsZDIoKSk7CiAgICAgRlBS
VGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBvcDEpOwogCiAgICAgRlBSUmVnIHJlZzEgPSBvcDEuZnBy
KCk7CiAgICAgRlBSUmVnIHJlZzIgPSBvcDIuZnByKCk7CiAgICAgbV9qaXQuc3ViRG91YmxlKHJl
ZzEsIHJlZzIsIHJlc3VsdC5mcHIoKSk7CiAKLSAgICBkb3VibGVSZXN1bHQocmVzdWx0LmZwcigp
LCBtX2NvbXBpbGVJbmRleCk7CisgICAgZG91YmxlUmVzdWx0KHJlc3VsdC5mcHIoKSwgbm9kZSk7
CiB9CiAKLXZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBcml0aE5lZ2F0ZShOb2RlJiBub2Rl
KQordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFyaXRoTmVnYXRlKE5vZGUqIG5vZGUpCiB7
CiAgICAgaWYgKG1faml0LmdyYXBoKCkubmVnYXRlU2hvdWxkU3BlY3VsYXRlSW50ZWdlcihub2Rl
KSkgewotICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGls
ZDEoKSk7CisgICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMSh0aGlzLCBub2RlLT5j
aGlsZDEoKSk7CiAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CiAKICAgICAgICAg
bV9qaXQubW92ZShvcDEuZ3ByKCksIHJlc3VsdC5ncHIoKSk7CiAKLSAgICAgICAgaWYgKG5vZGVD
YW5UcnVuY2F0ZUludGVnZXIobm9kZS5hcml0aE5vZGVGbGFncygpKSkKKyAgICAgICAgaWYgKG5v
ZGVDYW5UcnVuY2F0ZUludGVnZXIobm9kZS0+YXJpdGhOb2RlRmxhZ3MoKSkpCiAgICAgICAgICAg
ICBtX2ppdC5uZWczMihyZXN1bHQuZ3ByKCkpOwogICAgICAgICBlbHNlIHsKLSAgICAgICAgICAg
IHNwZWN1bGF0aW9uQ2hlY2soT3ZlcmZsb3csIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQu
YnJhbmNoTmVnMzIoTWFjcm9Bc3NlbWJsZXI6Ok92ZXJmbG93LCByZXN1bHQuZ3ByKCkpKTsKLSAg
ICAgICAgICAgIGlmICghbm9kZUNhbklnbm9yZU5lZ2F0aXZlWmVybyhub2RlLmFyaXRoTm9kZUZs
YWdzKCkpKQotICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soT3ZlcmZsb3csIEpTVmFs
dWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoVGVzdDMyKE1hY3JvQXNzZW1ibGVyOjpaZXJv
LCByZXN1bHQuZ3ByKCkpKTsKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soT3ZlcmZsb3cs
IEpTVmFsdWVSZWdzKCksIDAsIG1faml0LmJyYW5jaE5lZzMyKE1hY3JvQXNzZW1ibGVyOjpPdmVy
ZmxvdywgcmVzdWx0LmdwcigpKSk7CisgICAgICAgICAgICBpZiAoIW5vZGVDYW5JZ25vcmVOZWdh
dGl2ZVplcm8obm9kZS0+YXJpdGhOb2RlRmxhZ3MoKSkpCisgICAgICAgICAgICAgICAgc3BlY3Vs
YXRpb25DaGVjayhPdmVyZmxvdywgSlNWYWx1ZVJlZ3MoKSwgMCwgbV9qaXQuYnJhbmNoVGVzdDMy
KE1hY3JvQXNzZW1ibGVyOjpaZXJvLCByZXN1bHQuZ3ByKCkpKTsKICAgICAgICAgfQogCi0gICAg
ICAgIGludGVnZXJSZXN1bHQocmVzdWx0LmdwcigpLCBtX2NvbXBpbGVJbmRleCk7CisgICAgICAg
IGludGVnZXJSZXN1bHQocmVzdWx0LmdwcigpLCBub2RlKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KICAgICAgICAgCi0gICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCBvcDEodGhpcywgbm9kZS5j
aGlsZDEoKSk7CisgICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCBvcDEodGhpcywgbm9kZS0+Y2hp
bGQxKCkpOwogICAgIEZQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CiAKICAgICBtX2ppdC5uZWdh
dGVEb3VibGUob3AxLmZwcigpLCByZXN1bHQuZnByKCkpOwogCi0gICAgZG91YmxlUmVzdWx0KHJl
c3VsdC5mcHIoKSwgbV9jb21waWxlSW5kZXgpOworICAgIGRvdWJsZVJlc3VsdChyZXN1bHQuZnBy
KCksIG5vZGUpOwogfQogCi12b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQXJpdGhNdWwoTm9k
ZSYgbm9kZSkKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBcml0aE11bChOb2RlKiBub2Rl
KQogewogICAgIGlmIChtX2ppdC5ncmFwaCgpLm11bFNob3VsZFNwZWN1bGF0ZUludGVnZXIobm9k
ZSkpIHsKLSAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hp
bGQxKCkpOwotICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDIodGhpcywgbm9kZS5j
aGlsZDIoKSk7CisgICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMSh0aGlzLCBub2Rl
LT5jaGlsZDEoKSk7CisgICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMih0aGlzLCBu
b2RlLT5jaGlsZDIoKSk7CiAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CiAKICAg
ICAgICAgR1BSUmVnIHJlZzEgPSBvcDEuZ3ByKCk7CkBAIC0zMjQ3LDI5ICszMjMwLDI5IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBcml0aE11bChOb2QKICAgICAgICAgLy8gV2UgY2Fu
IHBlcmZvcm0gdHJ1bmNhdGVkIG11bHRpcGxpY2F0aW9ucyBpZiB3ZSBnZXQgdG8gdGhpcyBwb2lu
dCwgYmVjYXVzZSBpZiB0aGUKICAgICAgICAgLy8gZml4dXAgcGhhc2UgY291bGQgbm90IHByb3Zl
IHRoYXQgaXQgd291bGQgYmUgc2FmZSwgaXQgd291bGQgaGF2ZSB0dXJuZWQgdXMgaW50bwogICAg
ICAgICAvLyBhIGRvdWJsZSBtdWx0aXBsaWNhdGlvbi4KLSAgICAgICAgaWYgKG5vZGVDYW5UcnVu
Y2F0ZUludGVnZXIobm9kZS5hcml0aE5vZGVGbGFncygpKSkgeworICAgICAgICBpZiAobm9kZUNh
blRydW5jYXRlSW50ZWdlcihub2RlLT5hcml0aE5vZGVGbGFncygpKSkgewogICAgICAgICAgICAg
bV9qaXQubW92ZShyZWcxLCByZXN1bHQuZ3ByKCkpOwogICAgICAgICAgICAgbV9qaXQubXVsMzIo
cmVnMiwgcmVzdWx0LmdwcigpKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIHNwZWN1
bGF0aW9uQ2hlY2soCi0gICAgICAgICAgICAgICAgT3ZlcmZsb3csIEpTVmFsdWVSZWdzKCksIE5v
Tm9kZSwKKyAgICAgICAgICAgICAgICBPdmVyZmxvdywgSlNWYWx1ZVJlZ3MoKSwgMCwKICAgICAg
ICAgICAgICAgICBtX2ppdC5icmFuY2hNdWwzMihNYWNyb0Fzc2VtYmxlcjo6T3ZlcmZsb3csIHJl
ZzEsIHJlZzIsIHJlc3VsdC5ncHIoKSkpOwogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAg
ICAgLy8gQ2hlY2sgZm9yIG5lZ2F0aXZlIHplcm8sIGlmIHRoZSB1c2VycyBvZiB0aGlzIG5vZGUg
Y2FyZSBhYm91dCBzdWNoIHRoaW5ncy4KLSAgICAgICAgaWYgKCFub2RlQ2FuSWdub3JlTmVnYXRp
dmVaZXJvKG5vZGUuYXJpdGhOb2RlRmxhZ3MoKSkpIHsKKyAgICAgICAgaWYgKCFub2RlQ2FuSWdu
b3JlTmVnYXRpdmVaZXJvKG5vZGUtPmFyaXRoTm9kZUZsYWdzKCkpKSB7CiAgICAgICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6SnVtcCByZXN1bHROb25aZXJvID0gbV9qaXQuYnJhbmNoVGVzdDMyKE1h
Y3JvQXNzZW1ibGVyOjpOb25aZXJvLCByZXN1bHQuZ3ByKCkpOwotICAgICAgICAgICAgc3BlY3Vs
YXRpb25DaGVjayhOZWdhdGl2ZVplcm8sIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJh
bmNoMzIoTWFjcm9Bc3NlbWJsZXI6Okxlc3NUaGFuLCByZWcxLCBUcnVzdGVkSW1tMzIoMCkpKTsK
LSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soTmVnYXRpdmVaZXJvLCBKU1ZhbHVlUmVncygp
LCBOb05vZGUsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpMZXNzVGhhbiwgcmVnMiwg
VHJ1c3RlZEltbTMyKDApKSk7CisgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE5lZ2F0aXZl
WmVybywgSlNWYWx1ZVJlZ3MoKSwgMCwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Okxl
c3NUaGFuLCByZWcxLCBUcnVzdGVkSW1tMzIoMCkpKTsKKyAgICAgICAgICAgIHNwZWN1bGF0aW9u
Q2hlY2soTmVnYXRpdmVaZXJvLCBKU1ZhbHVlUmVncygpLCAwLCBtX2ppdC5icmFuY2gzMihNYWNy
b0Fzc2VtYmxlcjo6TGVzc1RoYW4sIHJlZzIsIFRydXN0ZWRJbW0zMigwKSkpOwogICAgICAgICAg
ICAgcmVzdWx0Tm9uWmVyby5saW5rKCZtX2ppdCk7CiAgICAgICAgIH0KIAotICAgICAgICBpbnRl
Z2VyUmVzdWx0KHJlc3VsdC5ncHIoKSwgbV9jb21waWxlSW5kZXgpOworICAgICAgICBpbnRlZ2Vy
UmVzdWx0KHJlc3VsdC5ncHIoKSwgbm9kZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAg
ICBTcGVjdWxhdGVEb3VibGVPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKLSAgICBT
cGVjdWxhdGVEb3VibGVPcGVyYW5kIG9wMih0aGlzLCBub2RlLmNoaWxkMigpKTsKKyAgICBTcGVj
dWxhdGVEb3VibGVPcGVyYW5kIG9wMSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CisgICAgU3BlY3Vs
YXRlRG91YmxlT3BlcmFuZCBvcDIodGhpcywgbm9kZS0+Y2hpbGQyKCkpOwogICAgIEZQUlRlbXBv
cmFyeSByZXN1bHQodGhpcywgb3AxLCBvcDIpOwogCiAgICAgRlBSUmVnIHJlZzEgPSBvcDEuZnBy
KCk7CkBAIC0zMjc3LDE0ICszMjYwLDE0IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVB
cml0aE11bChOb2QKICAgICAgICAgCiAgICAgbV9qaXQubXVsRG91YmxlKHJlZzEsIHJlZzIsIHJl
c3VsdC5mcHIoKSk7CiAgICAgICAgIAotICAgIGRvdWJsZVJlc3VsdChyZXN1bHQuZnByKCksIG1f
Y29tcGlsZUluZGV4KTsKKyAgICBkb3VibGVSZXN1bHQocmVzdWx0LmZwcigpLCBub2RlKTsKIH0K
IAogI2lmIENQVShYODYpIHx8IENQVShYODZfNjQpCi12b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlSW50ZWdlckFyaXRoRGl2Rm9yWDg2KE5vZGUmIG5vZGUpCit2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlSW50ZWdlckFyaXRoRGl2Rm9yWDg2KE5vZGUqIG5vZGUpCiB7Ci0gICAgU3BlY3Vs
YXRlSW50ZWdlck9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwotICAgIFNwZWN1bGF0
ZUludGVnZXJPcGVyYW5kIG9wMih0aGlzLCBub2RlLmNoaWxkMigpKTsKKyAgICBTcGVjdWxhdGVJ
bnRlZ2VyT3BlcmFuZCBvcDEodGhpcywgbm9kZS0+Y2hpbGQxKCkpOworICAgIFNwZWN1bGF0ZUlu
dGVnZXJPcGVyYW5kIG9wMih0aGlzLCBub2RlLT5jaGlsZDIoKSk7CiAgICAgR1BSVGVtcG9yYXJ5
IGVheCh0aGlzLCBYODZSZWdpc3RlcnM6OmVheCk7CiAgICAgR1BSVGVtcG9yYXJ5IGVkeCh0aGlz
LCBYODZSZWdpc3RlcnM6OmVkeCk7CiAgICAgR1BSUmVnIG9wMUdQUiA9IG9wMS5ncHIoKTsKQEAg
LTMzMTEsOSArMzI5NCw5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVJbnRlZ2VyQXJp
dGgKICAgICBKSVRDb21waWxlcjo6SnVtcCBzYWZlRGVub21pbmF0b3IgPSBtX2ppdC5icmFuY2gz
MihKSVRDb21waWxlcjo6QWJvdmUsIHRlbXAsIEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tMzIoMSkp
OwogICAgIAogICAgIEpJVENvbXBpbGVyOjpKdW1wIGRvbmU7Ci0gICAgaWYgKG5vZGVVc2VkQXNO
dW1iZXIobm9kZS5hcml0aE5vZGVGbGFncygpKSkgewotICAgICAgICBzcGVjdWxhdGlvbkNoZWNr
KE92ZXJmbG93LCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaFRlc3QzMihKSVRD
b21waWxlcjo6WmVybywgb3AyR1BSKSk7Ci0gICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soT3ZlcmZs
b3csIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoMzIoSklUQ29tcGlsZXI6OkVx
dWFsLCBvcDFHUFIsIFRydXN0ZWRJbW0zMigtMjE0NzQ4MzY0Ny0xKSkpOworICAgIGlmIChub2Rl
VXNlZEFzTnVtYmVyKG5vZGUtPmFyaXRoTm9kZUZsYWdzKCkpKSB7CisgICAgICAgIHNwZWN1bGF0
aW9uQ2hlY2soT3ZlcmZsb3csIEpTVmFsdWVSZWdzKCksIDAsIG1faml0LmJyYW5jaFRlc3QzMihK
SVRDb21waWxlcjo6WmVybywgb3AyR1BSKSk7CisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soT3Zl
cmZsb3csIEpTVmFsdWVSZWdzKCksIDAsIG1faml0LmJyYW5jaDMyKEpJVENvbXBpbGVyOjpFcXVh
bCwgb3AxR1BSLCBUcnVzdGVkSW1tMzIoLTIxNDc0ODM2NDctMSkpKTsKICAgICB9IGVsc2Ugewog
ICAgICAgICBKSVRDb21waWxlcjo6SnVtcCB6ZXJvID0gbV9qaXQuYnJhbmNoVGVzdDMyKEpJVENv
bXBpbGVyOjpaZXJvLCBvcDJHUFIpOwogICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBpc05lZzJU
b1RoZTMxID0gbV9qaXQuYnJhbmNoMzIoSklUQ29tcGlsZXI6OkVxdWFsLCBvcDFHUFIsIFRydXN0
ZWRJbW0zMigtMjE0NzQ4MzY0Ny0xKSk7CkBAIC0zMzI3LDkgKzMzMTAsOSBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlSW50ZWdlckFyaXRoCiAgICAgICAgICAgICAKICAgICAvLyBJZiB0
aGUgdXNlciBjYXJlcyBhYm91dCBuZWdhdGl2ZSB6ZXJvLCB0aGVuIHNwZWN1bGF0ZSB0aGF0IHdl
J3JlIG5vdCBhYm91dAogICAgIC8vIHRvIHByb2R1Y2UgbmVnYXRpdmUgemVyby4KLSAgICBpZiAo
IW5vZGVDYW5JZ25vcmVOZWdhdGl2ZVplcm8obm9kZS5hcml0aE5vZGVGbGFncygpKSkgeworICAg
IGlmICghbm9kZUNhbklnbm9yZU5lZ2F0aXZlWmVybyhub2RlLT5hcml0aE5vZGVGbGFncygpKSkg
ewogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBudW1lcmF0b3JOb25aZXJvID0gbV9qaXQu
YnJhbmNoVGVzdDMyKE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCBvcDFHUFIpOwotICAgICAgICBz
cGVjdWxhdGlvbkNoZWNrKE5lZ2F0aXZlWmVybywgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2pp
dC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6TGVzc1RoYW4sIG9wMkdQUiwgVHJ1c3RlZEltbTMy
KDApKSk7CisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soTmVnYXRpdmVaZXJvLCBKU1ZhbHVlUmVn
cygpLCAwLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6TGVzc1RoYW4sIG9wMkdQUiwg
VHJ1c3RlZEltbTMyKDApKSk7CiAgICAgICAgIG51bWVyYXRvck5vblplcm8ubGluaygmbV9qaXQp
OwogICAgIH0KICAgICAKQEAgLTMzNDcsMjUgKzMzMzAsMjUgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZUludGVnZXJBcml0aAogCiAgICAgLy8gQ2hlY2sgdGhhdCB0aGVyZSB3YXMgbm8g
cmVtYWluZGVyLiBJZiB0aGVyZSBoYWQgYmVlbiwgdGhlbiB3ZSdkIGJlIG9ibGlnYXRlZCB0bwog
ICAgIC8vIHByb2R1Y2UgYSBkb3VibGUgcmVzdWx0IGluc3RlYWQuCi0gICAgaWYgKG5vZGVVc2Vk
QXNOdW1iZXIobm9kZS5hcml0aE5vZGVGbGFncygpKSkKLSAgICAgICAgc3BlY3VsYXRpb25DaGVj
ayhPdmVyZmxvdywgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2hUZXN0MzIoSklU
Q29tcGlsZXI6Ok5vblplcm8sIGVkeC5ncHIoKSkpOworICAgIGlmIChub2RlVXNlZEFzTnVtYmVy
KG5vZGUtPmFyaXRoTm9kZUZsYWdzKCkpKQorICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE92ZXJm
bG93LCBKU1ZhbHVlUmVncygpLCAwLCBtX2ppdC5icmFuY2hUZXN0MzIoSklUQ29tcGlsZXI6Ok5v
blplcm8sIGVkeC5ncHIoKSkpOwogICAgIGVsc2UKICAgICAgICAgZG9uZS5saW5rKCZtX2ppdCk7
CiAgICAgICAgICAgICAKLSAgICBpbnRlZ2VyUmVzdWx0KGVheC5ncHIoKSwgbV9jb21waWxlSW5k
ZXgpOworICAgIGludGVnZXJSZXN1bHQoZWF4LmdwcigpLCBub2RlKTsKIH0KICNlbmRpZiAvLyBD
UFUoWDg2KSB8fCBDUFUoWDg2XzY0KQogCi12b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQXJp
dGhNb2QoTm9kZSYgbm9kZSkKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBcml0aE1vZChO
b2RlKiBub2RlKQogewotICAgIGlmIChOb2RlOjpzaG91bGRTcGVjdWxhdGVJbnRlZ2VyRm9yQXJp
dGhtZXRpYyhhdChub2RlLmNoaWxkMSgpKSwgYXQobm9kZS5jaGlsZDIoKSkpCi0gICAgICAgICYm
IG5vZGUuY2FuU3BlY3VsYXRlSW50ZWdlcigpKSB7CisgICAgaWYgKE5vZGU6OnNob3VsZFNwZWN1
bGF0ZUludGVnZXJGb3JBcml0aG1ldGljKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgbm9kZS0+Y2hp
bGQyKCkubm9kZSgpKQorICAgICAgICAmJiBub2RlLT5jYW5TcGVjdWxhdGVJbnRlZ2VyKCkpIHsK
ICAgICAgICAgY29tcGlsZVNvZnRNb2R1bG8obm9kZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAgICAgICAgIAotICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hp
bGQxKCkpOwotICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgb3AyKHRoaXMsIG5vZGUuY2hpbGQy
KCkpOworICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUtPmNoaWxkMSgp
KTsKKyAgICBTcGVjdWxhdGVEb3VibGVPcGVyYW5kIG9wMih0aGlzLCBub2RlLT5jaGlsZDIoKSk7
CiAgICAgICAgIAogICAgIEZQUlJlZyBvcDFGUFIgPSBvcDEuZnByKCk7CiAgICAgRlBSUmVnIG9w
MkZQUiA9IG9wMi5mcHIoKTsKQEAgLTMzNzYsNDIgKzMzNTksNDIgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZUFyaXRoTW9kKE5vZAogCiAgICAgY2FsbE9wZXJhdGlvbihmbW9kQXNERkdP
cGVyYXRpb24sIHJlc3VsdC5mcHIoKSwgb3AxRlBSLCBvcDJGUFIpOwogICAgICAgICAKLSAgICBk
b3VibGVSZXN1bHQocmVzdWx0LmZwcigpLCBtX2NvbXBpbGVJbmRleCk7CisgICAgZG91YmxlUmVz
dWx0KHJlc3VsdC5mcHIoKSwgbm9kZSk7CiB9CiAKIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgY29t
cGFyZSBpcyBmdXNlZCB3aXRoIGEgc3Vic2VxdWVudCBicmFuY2guCi1ib29sIFNwZWN1bGF0aXZl
SklUOjpjb21wYXJlKE5vZGUmIG5vZGUsIE1hY3JvQXNzZW1ibGVyOjpSZWxhdGlvbmFsQ29uZGl0
aW9uIGNvbmRpdGlvbiwgTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUNvbmRpdGlvbiBkb3VibGVDb25k
aXRpb24sIFNfREZHT3BlcmF0aW9uX0VKSiBvcGVyYXRpb24pCitib29sIFNwZWN1bGF0aXZlSklU
Ojpjb21wYXJlKE5vZGUqIG5vZGUsIE1hY3JvQXNzZW1ibGVyOjpSZWxhdGlvbmFsQ29uZGl0aW9u
IGNvbmRpdGlvbiwgTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUNvbmRpdGlvbiBkb3VibGVDb25kaXRp
b24sIFNfREZHT3BlcmF0aW9uX0VKSiBvcGVyYXRpb24pCiB7CiAgICAgaWYgKGNvbXBpbGVQZWVw
SG9sZUJyYW5jaChub2RlLCBjb25kaXRpb24sIGRvdWJsZUNvbmRpdGlvbiwgb3BlcmF0aW9uKSkK
ICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBpZiAoTm9kZTo6c2hvdWxkU3BlY3VsYXRlSW50
ZWdlcihhdChub2RlLmNoaWxkMSgpKSwgYXQobm9kZS5jaGlsZDIoKSkpKSB7CisgICAgaWYgKE5v
ZGU6OnNob3VsZFNwZWN1bGF0ZUludGVnZXIobm9kZS0+Y2hpbGQxKCkubm9kZSgpLCBub2RlLT5j
aGlsZDIoKS5ub2RlKCkpKSB7CiAgICAgICAgIGNvbXBpbGVJbnRlZ2VyQ29tcGFyZShub2RlLCBj
b25kaXRpb24pOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIAotICAgIGlmIChO
b2RlOjpzaG91bGRTcGVjdWxhdGVOdW1iZXIoYXQobm9kZS5jaGlsZDEoKSksIGF0KG5vZGUuY2hp
bGQyKCkpKSkgeworICAgIGlmIChOb2RlOjpzaG91bGRTcGVjdWxhdGVOdW1iZXIobm9kZS0+Y2hp
bGQxKCkubm9kZSgpLCBub2RlLT5jaGlsZDIoKS5ub2RlKCkpKSB7CiAgICAgICAgIGNvbXBpbGVE
b3VibGVDb21wYXJlKG5vZGUsIGRvdWJsZUNvbmRpdGlvbik7CiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICB9CiAgICAgCi0gICAgaWYgKG5vZGUub3AoKSA9PSBDb21wYXJlRXEpIHsKLSAgICAg
ICAgaWYgKGF0KG5vZGUuY2hpbGQxKCkpLnNob3VsZFNwZWN1bGF0ZVN0cmluZygpIHx8IGF0KG5v
ZGUuY2hpbGQyKCkpLnNob3VsZFNwZWN1bGF0ZVN0cmluZygpKSB7CisgICAgaWYgKG5vZGUtPm9w
KCkgPT0gQ29tcGFyZUVxKSB7CisgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3Bl
Y3VsYXRlU3RyaW5nKCkgfHwgbm9kZS0+Y2hpbGQyKCktPnNob3VsZFNwZWN1bGF0ZVN0cmluZygp
KSB7CiAgICAgICAgICAgICBub25TcGVjdWxhdGl2ZU5vblBlZXBob2xlQ29tcGFyZShub2RlLCBj
b25kaXRpb24sIG9wZXJhdGlvbik7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAg
IH0KICAgICAgICAgCi0gICAgICAgIGlmIChhdChub2RlLmNoaWxkMSgpKS5zaG91bGRTcGVjdWxh
dGVOb25TdHJpbmdDZWxsKCkgJiYgYXQobm9kZS5jaGlsZDIoKSkuc2hvdWxkU3BlY3VsYXRlTm9u
U3RyaW5nQ2VsbE9yT3RoZXIoKSkgewotICAgICAgICAgICAgY29tcGlsZU9iamVjdFRvT2JqZWN0
T3JPdGhlckVxdWFsaXR5KG5vZGUuY2hpbGQxKCksIG5vZGUuY2hpbGQyKCkpOworICAgICAgICBp
ZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZU5vblN0cmluZ0NlbGwoKSAmJiBub2Rl
LT5jaGlsZDIoKS0+c2hvdWxkU3BlY3VsYXRlTm9uU3RyaW5nQ2VsbE9yT3RoZXIoKSkgeworICAg
ICAgICAgICAgY29tcGlsZU9iamVjdFRvT2JqZWN0T3JPdGhlckVxdWFsaXR5KG5vZGUtPmNoaWxk
MSgpLCBub2RlLT5jaGlsZDIoKSk7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAg
IH0KICAgICAgICAgCi0gICAgICAgIGlmIChhdChub2RlLmNoaWxkMSgpKS5zaG91bGRTcGVjdWxh
dGVOb25TdHJpbmdDZWxsT3JPdGhlcigpICYmIGF0KG5vZGUuY2hpbGQyKCkpLnNob3VsZFNwZWN1
bGF0ZU5vblN0cmluZ0NlbGwoKSkgewotICAgICAgICAgICAgY29tcGlsZU9iamVjdFRvT2JqZWN0
T3JPdGhlckVxdWFsaXR5KG5vZGUuY2hpbGQyKCksIG5vZGUuY2hpbGQxKCkpOworICAgICAgICBp
ZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZU5vblN0cmluZ0NlbGxPck90aGVyKCkg
JiYgbm9kZS0+Y2hpbGQyKCktPnNob3VsZFNwZWN1bGF0ZU5vblN0cmluZ0NlbGwoKSkgeworICAg
ICAgICAgICAgY29tcGlsZU9iamVjdFRvT2JqZWN0T3JPdGhlckVxdWFsaXR5KG5vZGUtPmNoaWxk
MigpLCBub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAg
IH0KIAotICAgICAgICBpZiAoYXQobm9kZS5jaGlsZDEoKSkuc2hvdWxkU3BlY3VsYXRlTm9uU3Ry
aW5nQ2VsbCgpICYmIGF0KG5vZGUuY2hpbGQyKCkpLnNob3VsZFNwZWN1bGF0ZU5vblN0cmluZ0Nl
bGwoKSkgeworICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZU5vblN0
cmluZ0NlbGwoKSAmJiBub2RlLT5jaGlsZDIoKS0+c2hvdWxkU3BlY3VsYXRlTm9uU3RyaW5nQ2Vs
bCgpKSB7CiAgICAgICAgICAgICBjb21waWxlT2JqZWN0RXF1YWxpdHkobm9kZSk7CiAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KQEAgLTM0MjEsMTYgKzM0MDQsMTUgQEAgYm9v
bCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGFyZShOb2RlJiBub2RlLAogICAgIHJldHVybiBmYWxzZTsK
IH0KIAotYm9vbCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVN0cmljdEVxRm9yQ29uc3RhbnQoTm9k
ZSYgbm9kZSwgRWRnZSB2YWx1ZSwgSlNWYWx1ZSBjb25zdGFudCkKK2Jvb2wgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVTdHJpY3RFcUZvckNvbnN0YW50KE5vZGUqIG5vZGUsIEVkZ2UgdmFsdWUsIEpT
VmFsdWUgY29uc3RhbnQpCiB7CiAgICAgSlNWYWx1ZU9wZXJhbmQgb3AxKHRoaXMsIHZhbHVlKTsK
ICAgICAKICAgICB1bnNpZ25lZCBicmFuY2hJbmRleEluQmxvY2sgPSBkZXRlY3RQZWVwSG9sZUJy
YW5jaCgpOwogICAgIGlmIChicmFuY2hJbmRleEluQmxvY2sgIT0gVUlOVF9NQVgpIHsKLSAgICAg
ICAgTm9kZUluZGV4IGJyYW5jaE5vZGVJbmRleCA9IG1faml0LmdyYXBoKCkubV9ibG9ja3NbbV9i
bG9ja10tPmF0KGJyYW5jaEluZGV4SW5CbG9jayk7Ci0gICAgICAgIE5vZGUmIGJyYW5jaE5vZGUg
PSBhdChicmFuY2hOb2RlSW5kZXgpOwotICAgICAgICBCbG9ja0luZGV4IHRha2VuID0gYnJhbmNo
Tm9kZS50YWtlbkJsb2NrSW5kZXgoKTsKLSAgICAgICAgQmxvY2tJbmRleCBub3RUYWtlbiA9IGJy
YW5jaE5vZGUubm90VGFrZW5CbG9ja0luZGV4KCk7CisgICAgICAgIE5vZGUqIGJyYW5jaE5vZGUg
PSBtX2ppdC5ncmFwaCgpLm1fYmxvY2tzW21fYmxvY2tdLT5hdChicmFuY2hJbmRleEluQmxvY2sp
OworICAgICAgICBCbG9ja0luZGV4IHRha2VuID0gYnJhbmNoTm9kZS0+dGFrZW5CbG9ja0luZGV4
KCk7CisgICAgICAgIEJsb2NrSW5kZXggbm90VGFrZW4gPSBicmFuY2hOb2RlLT5ub3RUYWtlbkJs
b2NrSW5kZXgoKTsKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlJlbGF0aW9uYWxDb25kaXRpb24g
Y29uZGl0aW9uID0gTWFjcm9Bc3NlbWJsZXI6OkVxdWFsOwogICAgICAgICAKICAgICAgICAgLy8g
VGhlIGJyYW5jaCBpbnN0cnVjdGlvbiB3aWxsIGJyYW5jaCB0byB0aGUgdGFrZW4gYmxvY2suCkBA
IC0zNDYxLDEwICszNDQzLDEwIEBAIGJvb2wgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVTdHJpY3RF
cUZvckMKICAgICAgICAgCiAgICAgICAgIGp1bXAobm90VGFrZW4pOwogICAgICAgICAKLSAgICAg
ICAgdXNlKG5vZGUuY2hpbGQxKCkpOwotICAgICAgICB1c2Uobm9kZS5jaGlsZDIoKSk7CisgICAg
ICAgIHVzZShub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIHVzZShub2RlLT5jaGlsZDIoKSk7CiAg
ICAgICAgIG1faW5kZXhJbkJsb2NrID0gYnJhbmNoSW5kZXhJbkJsb2NrOwotICAgICAgICBtX2Nv
bXBpbGVJbmRleCA9IGJyYW5jaE5vZGVJbmRleDsKKyAgICAgICAgbV9jdXJyZW50Tm9kZSA9IGJy
YW5jaE5vZGU7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICAKQEAgLTM0NzcsNyAr
MzQ1OSw3IEBAIGJvb2wgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVTdHJpY3RFcUZvckMKICAgICBN
YWNyb0Fzc2VtYmxlcjo6SnVtcCBub3RFcXVhbCA9IG1faml0LmJyYW5jaDY0KE1hY3JvQXNzZW1i
bGVyOjpOb3RFcXVhbCwgb3AxR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTY0KEpTVmFs
dWU6OmVuY29kZShjb25zdGFudCkpKTsKICAgICBtX2ppdC5vcjMyKE1hY3JvQXNzZW1ibGVyOjpU
cnVzdGVkSW1tMzIoMSksIHJlc3VsdEdQUik7CiAgICAgbm90RXF1YWwubGluaygmbV9qaXQpOwot
ICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0R1BSLCBtX2NvbXBpbGVJbmRleCwgRGF0YUZvcm1hdEpT
Qm9vbGVhbik7CisgICAganNWYWx1ZVJlc3VsdChyZXN1bHRHUFIsIG5vZGUsIERhdGFGb3JtYXRK
U0Jvb2xlYW4pOwogI2Vsc2UKICAgICBHUFJSZWcgb3AxUGF5bG9hZEdQUiA9IG9wMS5wYXlsb2Fk
R1BSKCk7CiAgICAgR1BSUmVnIG9wMVRhZ0dQUiA9IG9wMS50YWdHUFIoKTsKQEAgLTM0ODgsNDAg
KzM0NzAsNDAgQEAgYm9vbCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVN0cmljdEVxRm9yQwogICAg
IG5vdEVxdWFsLmFwcGVuZChtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWws
IG9wMVBheWxvYWRHUFIsIE1hY3JvQXNzZW1ibGVyOjpJbW0zMihjb25zdGFudC5wYXlsb2FkKCkp
KSk7CiAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tMzIoMSksIHJlc3VsdEdQUik7CiAgICAgbm90
RXF1YWwubGluaygmbV9qaXQpOwotICAgIGJvb2xlYW5SZXN1bHQocmVzdWx0R1BSLCBtX2NvbXBp
bGVJbmRleCk7CisgICAgYm9vbGVhblJlc3VsdChyZXN1bHRHUFIsIG5vZGUpOwogI2VuZGlmCiAg
ICAgCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
U3RyaWN0RXEoTm9kZSYgbm9kZSkKK2Jvb2wgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVTdHJpY3RF
cShOb2RlKiBub2RlKQogewogICAgIC8vIDEpIElmIGVpdGhlciBvcGVyYW5kIGlzIGEgY29uc3Rh
bnQgYW5kIHRoYXQgY29uc3RhbnQgaXMgbm90IGEgZG91YmxlLCBpbnRlZ2VyLAogICAgIC8vICAg
IG9yIHN0cmluZywgdGhlbiBkbyBhIEpTVmFsdWUgY29tcGFyaXNvbi4KICAgICAKLSAgICBpZiAo
aXNKU0NvbnN0YW50KG5vZGUuY2hpbGQxKCkuaW5kZXgoKSkpIHsKLSAgICAgICAgSlNWYWx1ZSB2
YWx1ZSA9IHZhbHVlT2ZKU0NvbnN0YW50KG5vZGUuY2hpbGQxKCkuaW5kZXgoKSk7CisgICAgaWYg
KGlzSlNDb25zdGFudChub2RlLT5jaGlsZDEoKS5ub2RlKCkpKSB7CisgICAgICAgIEpTVmFsdWUg
dmFsdWUgPSB2YWx1ZU9mSlNDb25zdGFudChub2RlLT5jaGlsZDEoKS5ub2RlKCkpOwogICAgICAg
ICBpZiAoIXZhbHVlLmlzTnVtYmVyKCkgJiYgIXZhbHVlLmlzU3RyaW5nKCkpCi0gICAgICAgICAg
ICByZXR1cm4gY29tcGlsZVN0cmljdEVxRm9yQ29uc3RhbnQobm9kZSwgbm9kZS5jaGlsZDIoKSwg
dmFsdWUpOworICAgICAgICAgICAgcmV0dXJuIGNvbXBpbGVTdHJpY3RFcUZvckNvbnN0YW50KG5v
ZGUsIG5vZGUtPmNoaWxkMigpLCB2YWx1ZSk7CiAgICAgfQogICAgIAotICAgIGlmIChpc0pTQ29u
c3RhbnQobm9kZS5jaGlsZDIoKS5pbmRleCgpKSkgewotICAgICAgICBKU1ZhbHVlIHZhbHVlID0g
dmFsdWVPZkpTQ29uc3RhbnQobm9kZS5jaGlsZDIoKS5pbmRleCgpKTsKKyAgICBpZiAoaXNKU0Nv
bnN0YW50KG5vZGUtPmNoaWxkMigpLm5vZGUoKSkpIHsKKyAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9
IHZhbHVlT2ZKU0NvbnN0YW50KG5vZGUtPmNoaWxkMigpLm5vZGUoKSk7CiAgICAgICAgIGlmICgh
dmFsdWUuaXNOdW1iZXIoKSAmJiAhdmFsdWUuaXNTdHJpbmcoKSkKLSAgICAgICAgICAgIHJldHVy
biBjb21waWxlU3RyaWN0RXFGb3JDb25zdGFudChub2RlLCBub2RlLmNoaWxkMSgpLCB2YWx1ZSk7
CisgICAgICAgICAgICByZXR1cm4gY29tcGlsZVN0cmljdEVxRm9yQ29uc3RhbnQobm9kZSwgbm9k
ZS0+Y2hpbGQxKCksIHZhbHVlKTsKICAgICB9CiAgICAgCiAgICAgLy8gMikgSWYgdGhlIG9wZXJh
bmRzIGFyZSBwcmVkaWN0ZWQgaW50ZWdlciwgZG8gYW4gaW50ZWdlciBjb21wYXJpc29uLgogICAg
IAotICAgIGlmIChOb2RlOjpzaG91bGRTcGVjdWxhdGVJbnRlZ2VyKGF0KG5vZGUuY2hpbGQxKCkp
LCBhdChub2RlLmNoaWxkMigpKSkpIHsKKyAgICBpZiAoTm9kZTo6c2hvdWxkU3BlY3VsYXRlSW50
ZWdlcihub2RlLT5jaGlsZDEoKS5ub2RlKCksIG5vZGUtPmNoaWxkMigpLm5vZGUoKSkpIHsKICAg
ICAgICAgdW5zaWduZWQgYnJhbmNoSW5kZXhJbkJsb2NrID0gZGV0ZWN0UGVlcEhvbGVCcmFuY2go
KTsKICAgICAgICAgaWYgKGJyYW5jaEluZGV4SW5CbG9jayAhPSBVSU5UX01BWCkgewotICAgICAg
ICAgICAgTm9kZUluZGV4IGJyYW5jaE5vZGVJbmRleCA9IG1faml0LmdyYXBoKCkubV9ibG9ja3Nb
bV9ibG9ja10tPmF0KGJyYW5jaEluZGV4SW5CbG9jayk7Ci0gICAgICAgICAgICBjb21waWxlUGVl
cEhvbGVJbnRlZ2VyQnJhbmNoKG5vZGUsIGJyYW5jaE5vZGVJbmRleCwgTWFjcm9Bc3NlbWJsZXI6
OkVxdWFsKTsKLSAgICAgICAgICAgIHVzZShub2RlLmNoaWxkMSgpKTsKLSAgICAgICAgICAgIHVz
ZShub2RlLmNoaWxkMigpKTsKKyAgICAgICAgICAgIE5vZGUqIGJyYW5jaE5vZGUgPSBtX2ppdC5n
cmFwaCgpLm1fYmxvY2tzW21fYmxvY2tdLT5hdChicmFuY2hJbmRleEluQmxvY2spOworICAgICAg
ICAgICAgY29tcGlsZVBlZXBIb2xlSW50ZWdlckJyYW5jaChub2RlLCBicmFuY2hOb2RlLCBNYWNy
b0Fzc2VtYmxlcjo6RXF1YWwpOworICAgICAgICAgICAgdXNlKG5vZGUtPmNoaWxkMSgpKTsKKyAg
ICAgICAgICAgIHVzZShub2RlLT5jaGlsZDIoKSk7CiAgICAgICAgICAgICBtX2luZGV4SW5CbG9j
ayA9IGJyYW5jaEluZGV4SW5CbG9jazsKLSAgICAgICAgICAgIG1fY29tcGlsZUluZGV4ID0gYnJh
bmNoTm9kZUluZGV4OworICAgICAgICAgICAgbV9jdXJyZW50Tm9kZSA9IGJyYW5jaE5vZGU7CiAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogICAgICAgICBjb21waWxlSW50ZWdl
ckNvbXBhcmUobm9kZSwgTWFjcm9Bc3NlbWJsZXI6OkVxdWFsKTsKQEAgLTM1MzAsMzIgKzM1MTIs
MzIgQEAgYm9vbCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVN0cmljdEVxKE5vZAogICAgIAogICAg
IC8vIDMpIElmIHRoZSBvcGVyYW5kcyBhcmUgcHJlZGljdGVkIGRvdWJsZSwgZG8gYSBkb3VibGUg
Y29tcGFyaXNvbi4KICAgICAKLSAgICBpZiAoTm9kZTo6c2hvdWxkU3BlY3VsYXRlTnVtYmVyKGF0
KG5vZGUuY2hpbGQxKCkpLCBhdChub2RlLmNoaWxkMigpKSkpIHsKKyAgICBpZiAoTm9kZTo6c2hv
dWxkU3BlY3VsYXRlTnVtYmVyKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgbm9kZS0+Y2hpbGQyKCku
bm9kZSgpKSkgewogICAgICAgICB1bnNpZ25lZCBicmFuY2hJbmRleEluQmxvY2sgPSBkZXRlY3RQ
ZWVwSG9sZUJyYW5jaCgpOwogICAgICAgICBpZiAoYnJhbmNoSW5kZXhJbkJsb2NrICE9IFVJTlRf
TUFYKSB7Ci0gICAgICAgICAgICBOb2RlSW5kZXggYnJhbmNoTm9kZUluZGV4ID0gbV9qaXQuZ3Jh
cGgoKS5tX2Jsb2Nrc1ttX2Jsb2NrXS0+YXQoYnJhbmNoSW5kZXhJbkJsb2NrKTsKLSAgICAgICAg
ICAgIGNvbXBpbGVQZWVwSG9sZURvdWJsZUJyYW5jaChub2RlLCBicmFuY2hOb2RlSW5kZXgsIE1h
Y3JvQXNzZW1ibGVyOjpEb3VibGVFcXVhbCk7Ci0gICAgICAgICAgICB1c2Uobm9kZS5jaGlsZDEo
KSk7Ci0gICAgICAgICAgICB1c2Uobm9kZS5jaGlsZDIoKSk7CisgICAgICAgICAgICBOb2RlKiBi
cmFuY2hOb2RlID0gbV9qaXQuZ3JhcGgoKS5tX2Jsb2Nrc1ttX2Jsb2NrXS0+YXQoYnJhbmNoSW5k
ZXhJbkJsb2NrKTsKKyAgICAgICAgICAgIGNvbXBpbGVQZWVwSG9sZURvdWJsZUJyYW5jaChub2Rl
LCBicmFuY2hOb2RlLCBNYWNyb0Fzc2VtYmxlcjo6RG91YmxlRXF1YWwpOworICAgICAgICAgICAg
dXNlKG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgIHVzZShub2RlLT5jaGlsZDIoKSk7CiAg
ICAgICAgICAgICBtX2luZGV4SW5CbG9jayA9IGJyYW5jaEluZGV4SW5CbG9jazsKLSAgICAgICAg
ICAgIG1fY29tcGlsZUluZGV4ID0gYnJhbmNoTm9kZUluZGV4OworICAgICAgICAgICAgbV9jdXJy
ZW50Tm9kZSA9IGJyYW5jaE5vZGU7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAg
fQogICAgICAgICBjb21waWxlRG91YmxlQ29tcGFyZShub2RlLCBNYWNyb0Fzc2VtYmxlcjo6RG91
YmxlRXF1YWwpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIAotICAgIGlmIChh
dChub2RlLmNoaWxkMSgpKS5zaG91bGRTcGVjdWxhdGVTdHJpbmcoKSB8fCBhdChub2RlLmNoaWxk
MigpKS5zaG91bGRTcGVjdWxhdGVTdHJpbmcoKSkKKyAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnNo
b3VsZFNwZWN1bGF0ZVN0cmluZygpIHx8IG5vZGUtPmNoaWxkMigpLT5zaG91bGRTcGVjdWxhdGVT
dHJpbmcoKSkKICAgICAgICAgcmV0dXJuIG5vblNwZWN1bGF0aXZlU3RyaWN0RXEobm9kZSk7Ci0g
ICAgaWYgKGF0KG5vZGUuY2hpbGQxKCkpLnNob3VsZFNwZWN1bGF0ZU5vblN0cmluZ0NlbGwoKSAm
JiBhdChub2RlLmNoaWxkMigpKS5zaG91bGRTcGVjdWxhdGVOb25TdHJpbmdDZWxsKCkpIHsKKyAg
ICBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZU5vblN0cmluZ0NlbGwoKSAmJiBu
b2RlLT5jaGlsZDIoKS0+c2hvdWxkU3BlY3VsYXRlTm9uU3RyaW5nQ2VsbCgpKSB7CiAgICAgICAg
IHVuc2lnbmVkIGJyYW5jaEluZGV4SW5CbG9jayA9IGRldGVjdFBlZXBIb2xlQnJhbmNoKCk7CiAg
ICAgICAgIGlmIChicmFuY2hJbmRleEluQmxvY2sgIT0gVUlOVF9NQVgpIHsKLSAgICAgICAgICAg
IE5vZGVJbmRleCBicmFuY2hOb2RlSW5kZXggPSBtX2ppdC5ncmFwaCgpLm1fYmxvY2tzW21fYmxv
Y2tdLT5hdChicmFuY2hJbmRleEluQmxvY2spOwotICAgICAgICAgICAgY29tcGlsZVBlZXBIb2xl
T2JqZWN0RXF1YWxpdHkobm9kZSwgYnJhbmNoTm9kZUluZGV4KTsKLSAgICAgICAgICAgIHVzZShu
b2RlLmNoaWxkMSgpKTsKLSAgICAgICAgICAgIHVzZShub2RlLmNoaWxkMigpKTsKKyAgICAgICAg
ICAgIE5vZGUqIGJyYW5jaE5vZGUgPSBtX2ppdC5ncmFwaCgpLm1fYmxvY2tzW21fYmxvY2tdLT5h
dChicmFuY2hJbmRleEluQmxvY2spOworICAgICAgICAgICAgY29tcGlsZVBlZXBIb2xlT2JqZWN0
RXF1YWxpdHkobm9kZSwgYnJhbmNoTm9kZSk7CisgICAgICAgICAgICB1c2Uobm9kZS0+Y2hpbGQx
KCkpOworICAgICAgICAgICAgdXNlKG5vZGUtPmNoaWxkMigpKTsKICAgICAgICAgICAgIG1faW5k
ZXhJbkJsb2NrID0gYnJhbmNoSW5kZXhJbkJsb2NrOwotICAgICAgICAgICAgbV9jb21waWxlSW5k
ZXggPSBicmFuY2hOb2RlSW5kZXg7CisgICAgICAgICAgICBtX2N1cnJlbnROb2RlID0gYnJhbmNo
Tm9kZTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAgICAgIGNvbXBp
bGVPYmplY3RFcXVhbGl0eShub2RlKTsKQEAgLTM1NjcsMTcgKzM1NDksMTcgQEAgYm9vbCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZVN0cmljdEVxKE5vZAogICAgIHJldHVybiBub25TcGVjdWxhdGl2
ZVN0cmljdEVxKG5vZGUpOwogfQogCi12b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0SW5k
ZXhlZFByb3BlcnR5U3RvcmFnZShOb2RlJiBub2RlKQordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZUdldEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2UoTm9kZSogbm9kZSkKIHsKLSAgICBTcGVjdWxh
dGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOworICAgIFNwZWN1bGF0ZUNl
bGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwogICAgIEdQUlJlZyBiYXNlUmVn
ID0gYmFzZS5ncHIoKTsKICAgICAKICAgICBHUFJUZW1wb3Jhcnkgc3RvcmFnZSh0aGlzKTsKICAg
ICBHUFJSZWcgc3RvcmFnZVJlZyA9IHN0b3JhZ2UuZ3ByKCk7CiAgICAgCi0gICAgY29uc3QgVHlw
ZWRBcnJheURlc2NyaXB0b3IqIGRlc2NyaXB0b3IgPSB0eXBlZEFycmF5RGVzY3JpcHRvcihub2Rl
LmFycmF5TW9kZSgpKTsKKyAgICBjb25zdCBUeXBlZEFycmF5RGVzY3JpcHRvciogZGVzY3JpcHRv
ciA9IHR5cGVkQXJyYXlEZXNjcmlwdG9yKG5vZGUtPmFycmF5TW9kZSgpKTsKICAgICAKLSAgICBz
d2l0Y2ggKG5vZGUuYXJyYXlNb2RlKCkudHlwZSgpKSB7CisgICAgc3dpdGNoIChub2RlLT5hcnJh
eU1vZGUoKS50eXBlKCkpIHsKICAgICBjYXNlIEFycmF5OjpTdHJpbmc6CiAgICAgICAgIG1faml0
LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgSlNTdHJpbmc6Om9mZnNl
dE9mVmFsdWUoKSksIHN0b3JhZ2VSZWcpOwogICAgICAgICAKQEAgLTM1OTUsMTMgKzM1NzcsMTMg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEluZGV4ZWRQcgogICAgICAgICBicmVh
azsKICAgICB9CiAgICAgCi0gICAgc3RvcmFnZVJlc3VsdChzdG9yYWdlUmVnLCBtX2NvbXBpbGVJ
bmRleCk7CisgICAgc3RvcmFnZVJlc3VsdChzdG9yYWdlUmVnLCBub2RlKTsKIH0KIAotdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25Bcmd1bWVudHMoTm9kZSYgbm9kZSkKK3Zv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uQXJndW1lbnRzKE5vZGUqIG5vZGUp
CiB7Ci0gICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsK
LSAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhpcywgbm9kZS5jaGls
ZDIoKSk7CisgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLT5jaGlsZDEo
KSk7CisgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG5vZGUt
PmNoaWxkMigpKTsKICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwogI2lmIFVTRShKU1ZB
TFVFMzJfNjQpCiAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdFRhZyh0aGlzKTsKQEAgLTM2MTksMTYg
KzM2MDEsMTYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25BcgogICAg
IGlmICghbV9jb21waWxlT2theSkKICAgICAgICAgcmV0dXJuOwogICAKLSAgICBBU1NFUlQoQXJy
YXlNb2RlKEFycmF5OjpBcmd1bWVudHMpLmFscmVhZHlDaGVja2VkKG1faml0LmdyYXBoKCksIG5v
ZGUsIG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKSkpOworICAgIEFTU0VSVChBcnJheU1v
ZGUoQXJyYXk6OkFyZ3VtZW50cykuYWxyZWFkeUNoZWNrZWQobV9qaXQuZ3JhcGgoKSwgbm9kZSwg
bV9zdGF0ZS5mb3JOb2RlKG5vZGUtPmNoaWxkMSgpKSkpOwogICAgIAogICAgIC8vIFR3byByZWFs
bHkgbGFtZSBjaGVja3MuCiAgICAgc3BlY3VsYXRpb25DaGVjaygKLSAgICAgICAgVW5jb3VudGFi
bGUsIEpTVmFsdWVTb3VyY2UoKSwgTm9Ob2RlLAorICAgICAgICBVbmNvdW50YWJsZSwgSlNWYWx1
ZVNvdXJjZSgpLCAwLAogICAgICAgICBtX2ppdC5icmFuY2hQdHIoCiAgICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywKICAgICAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIE9CSkVDVF9PRkZTRVRPRihBcmd1bWVudHMsIG1f
bnVtQXJndW1lbnRzKSkpKTsKICAgICBzcGVjdWxhdGlvbkNoZWNrKAotICAgICAgICBVbmNvdW50
YWJsZSwgSlNWYWx1ZVNvdXJjZSgpLCBOb05vZGUsCisgICAgICAgIFVuY291bnRhYmxlLCBKU1Zh
bHVlU291cmNlKCksIDAsCiAgICAgICAgIG1faml0LmJyYW5jaFRlc3RQdHIoCiAgICAgICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywKICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKApAQCAtMzY1NCwyMCArMzYzNiwyMCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlR2V0QnlWYWxPbkFyCiAgICAgICAgICAgICBDYWxsRnJhbWU6OnRoaXNBcmd1bWVudE9mZnNl
dCgpICogc2l6ZW9mKFJlZ2lzdGVyKSAtIHNpemVvZihSZWdpc3RlcikgKwogICAgICAgICAgICAg
T0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBheWxvYWQpKSwKICAgICAgICAgcmVz
dWx0UmVnKTsKLSAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFRhZ1JlZywgcmVzdWx0UmVnLCBtX2Nv
bXBpbGVJbmRleCk7CisgICAganNWYWx1ZVJlc3VsdChyZXN1bHRUYWdSZWcsIHJlc3VsdFJlZywg
bm9kZSk7CiAjZWxzZQogICAgIG1faml0LmxvYWQ2NCgKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
OkJhc2VJbmRleCgKICAgICAgICAgICAgIHNjcmF0Y2hSZWcsIHJlc3VsdFJlZywgTWFjcm9Bc3Nl
bWJsZXI6OlRpbWVzRWlnaHQsCiAgICAgICAgICAgICBDYWxsRnJhbWU6OnRoaXNBcmd1bWVudE9m
ZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSAtIHNpemVvZihSZWdpc3RlcikpLAogICAgICAgICBy
ZXN1bHRSZWcpOwotICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0UmVnLCBtX2NvbXBpbGVJbmRleCk7
CisgICAganNWYWx1ZVJlc3VsdChyZXN1bHRSZWcsIG5vZGUpOwogI2VuZGlmCiB9CiAKLXZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRBcmd1bWVudHNMZW5ndGgoTm9kZSYgbm9kZSkKK3Zv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRBcmd1bWVudHNMZW5ndGgoTm9kZSogbm9kZSkK
IHsKLSAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwor
ICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwogICAg
IEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgYmFzZSk7CiAgICAgCiAgICAgR1BSUmVnIGJhc2VS
ZWcgPSBiYXNlLmdwcigpOwpAQCAtMzY3NiwxMCArMzY1OCwxMCBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlR2V0QXJndW1lbnRzCiAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQogICAgICAg
ICByZXR1cm47CiAgICAgCi0gICAgQVNTRVJUKEFycmF5TW9kZShBcnJheTo6QXJndW1lbnRzKS5h
bHJlYWR5Q2hlY2tlZChtX2ppdC5ncmFwaCgpLCBub2RlLCBtX3N0YXRlLmZvck5vZGUobm9kZS5j
aGlsZDEoKSkpKTsKKyAgICBBU1NFUlQoQXJyYXlNb2RlKEFycmF5OjpBcmd1bWVudHMpLmFscmVh
ZHlDaGVja2VkKG1faml0LmdyYXBoKCksIG5vZGUsIG1fc3RhdGUuZm9yTm9kZShub2RlLT5jaGls
ZDEoKSkpKTsKICAgICAKICAgICBzcGVjdWxhdGlvbkNoZWNrKAotICAgICAgICBVbmNvdW50YWJs
ZSwgSlNWYWx1ZVNvdXJjZSgpLCBOb05vZGUsCisgICAgICAgIFVuY291bnRhYmxlLCBKU1ZhbHVl
U291cmNlKCksIDAsCiAgICAgICAgIG1faml0LmJyYW5jaFRlc3Q4KAogICAgICAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6Ok5vblplcm8sCiAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhiYXNlUmVnLCBPQkpFQ1RfT0ZGU0VUT0YoQXJndW1lbnRzLCBtX292ZXJyb2RlTGVuZ3RoKSkp
KTsKQEAgLTM2ODcsNDYgKzM2NjksNDYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdl
dEFyZ3VtZW50cwogICAgIG1faml0LmxvYWQzMigKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3MoYmFzZVJlZywgT0JKRUNUX09GRlNFVE9GKEFyZ3VtZW50cywgbV9udW1Bcmd1bWVudHMp
KSwKICAgICAgICAgcmVzdWx0UmVnKTsKLSAgICBpbnRlZ2VyUmVzdWx0KHJlc3VsdFJlZywgbV9j
b21waWxlSW5kZXgpOworICAgIGludGVnZXJSZXN1bHQocmVzdWx0UmVnLCBub2RlKTsKIH0KIAot
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEFycmF5TGVuZ3RoKE5vZGUmIG5vZGUpCit2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QXJyYXlMZW5ndGgoTm9kZSogbm9kZSkKIHsK
LSAgICBjb25zdCBUeXBlZEFycmF5RGVzY3JpcHRvciogZGVzY3JpcHRvciA9IHR5cGVkQXJyYXlE
ZXNjcmlwdG9yKG5vZGUuYXJyYXlNb2RlKCkpOworICAgIGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlw
dG9yKiBkZXNjcmlwdG9yID0gdHlwZWRBcnJheURlc2NyaXB0b3Iobm9kZS0+YXJyYXlNb2RlKCkp
OwogCi0gICAgc3dpdGNoIChub2RlLmFycmF5TW9kZSgpLnR5cGUoKSkgeworICAgIHN3aXRjaCAo
bm9kZS0+YXJyYXlNb2RlKCkudHlwZSgpKSB7CiAgICAgY2FzZSBBcnJheTo6SW50MzI6CiAgICAg
Y2FzZSBBcnJheTo6RG91YmxlOgogICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3VvdXM6IHsKLSAgICAg
ICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBub2RlLmNoaWxkMigpKTsKKyAgICAgICAg
U3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBub2RlLT5jaGlsZDIoKSk7CiAgICAgICAgIEdQ
UlRlbXBvcmFyeSByZXN1bHQodGhpcywgc3RvcmFnZSk7CiAgICAgICAgIEdQUlJlZyBzdG9yYWdl
UmVnID0gc3RvcmFnZS5ncHIoKTsKICAgICAgICAgR1BSUmVnIHJlc3VsdFJlZyA9IHJlc3VsdC5n
cHIoKTsKICAgICAgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3Jh
Z2VSZWcsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSksIHJlc3VsdFJlZyk7CiAg
ICAgICAgICAgICAKLSAgICAgICAgaW50ZWdlclJlc3VsdChyZXN1bHRSZWcsIG1fY29tcGlsZUlu
ZGV4KTsKKyAgICAgICAgaW50ZWdlclJlc3VsdChyZXN1bHRSZWcsIG5vZGUpOwogICAgICAgICBi
cmVhazsKICAgICB9CiAgICAgY2FzZSBBcnJheTo6QXJyYXlTdG9yYWdlOgogICAgIGNhc2UgQXJy
YXk6OlNsb3dQdXRBcnJheVN0b3JhZ2U6IHsKLSAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFn
ZSh0aGlzLCBub2RlLmNoaWxkMigpKTsKKyAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0
aGlzLCBub2RlLT5jaGlsZDIoKSk7CiAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywg
c3RvcmFnZSk7CiAgICAgICAgIEdQUlJlZyBzdG9yYWdlUmVnID0gc3RvcmFnZS5ncHIoKTsKICAg
ICAgICAgR1BSUmVnIHJlc3VsdFJlZyA9IHJlc3VsdC5ncHIoKTsKICAgICAgICAgbV9qaXQubG9h
ZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEJ1dHRlcmZseTo6b2Zmc2V0
T2ZQdWJsaWNMZW5ndGgoKSksIHJlc3VsdFJlZyk7CiAgICAgICAgICAgICAKLSAgICAgICAgc3Bl
Y3VsYXRpb25DaGVjayhVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5i
cmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6TGVzc1RoYW4sIHJlc3VsdFJlZywgTWFjcm9Bc3NlbWJs
ZXI6OlRydXN0ZWRJbW0zMigwKSkpOworICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKFVuY291bnRh
YmxlLCBKU1ZhbHVlUmVncygpLCAwLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6TGVz
c1RoYW4sIHJlc3VsdFJlZywgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigwKSkpOwogICAg
ICAgICAgICAgCi0gICAgICAgIGludGVnZXJSZXN1bHQocmVzdWx0UmVnLCBtX2NvbXBpbGVJbmRl
eCk7CisgICAgICAgIGludGVnZXJSZXN1bHQocmVzdWx0UmVnLCBub2RlKTsKICAgICAgICAgYnJl
YWs7CiAgICAgfQogICAgIGNhc2UgQXJyYXk6OlN0cmluZzogewotICAgICAgICBTcGVjdWxhdGVD
ZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOworICAgICAgICBTcGVjdWxhdGVD
ZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgR1BSVGVtcG9y
YXJ5IHJlc3VsdCh0aGlzLCBiYXNlKTsKICAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdw
cigpOwogICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwogICAgICAgICBt
X2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNTdHJpbmc6Om9m
ZnNldE9mTGVuZ3RoKCkpLCByZXN1bHRHUFIpOwotICAgICAgICBpbnRlZ2VyUmVzdWx0KHJlc3Vs
dEdQUiwgbV9jb21waWxlSW5kZXgpOworICAgICAgICBpbnRlZ2VyUmVzdWx0KHJlc3VsdEdQUiwg
bm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBjYXNlIEFycmF5OjpBcmd1bWVudHM6
IHsKQEAgLTM3MzQsMjggKzM3MTYsMjggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdl
dEFycmF5TGVuZwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgZGVmYXVsdDoKLSAgICAgICAg
U3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKKyAgICAgICAg
U3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CiAgICAgICAg
IEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgYmFzZSk7CiAgICAgICAgIEdQUlJlZyBiYXNlR1BS
ID0gYmFzZS5ncHIoKTsKICAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsK
ICAgICAgICAgQVNTRVJUKGRlc2NyaXB0b3IpOwogICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgZGVzY3JpcHRvci0+bV9sZW5ndGhPZmZzZXQpLCBy
ZXN1bHRHUFIpOwotICAgICAgICBpbnRlZ2VyUmVzdWx0KHJlc3VsdEdQUiwgbV9jb21waWxlSW5k
ZXgpOworICAgICAgICBpbnRlZ2VyUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7CiAgICAgICAgIGJy
ZWFrOwogICAgIH0KIH0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU5ld0Z1bmN0aW9u
Tm9DaGVjayhOb2RlJiBub2RlKQordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU5ld0Z1bmN0
aW9uTm9DaGVjayhOb2RlKiBub2RlKQogewogICAgIEdQUlJlc3VsdCByZXN1bHQodGhpcyk7CiAg
ICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKICAgICBmbHVzaFJlZ2lzdGVycygp
OwogICAgIGNhbGxPcGVyYXRpb24oCi0gICAgICAgIG9wZXJhdGlvbk5ld0Z1bmN0aW9uLCByZXN1
bHRHUFIsIG1faml0LmNvZGVCbG9jaygpLT5mdW5jdGlvbkRlY2wobm9kZS5mdW5jdGlvbkRlY2xJ
bmRleCgpKSk7Ci0gICAgY2VsbFJlc3VsdChyZXN1bHRHUFIsIG1fY29tcGlsZUluZGV4KTsKKyAg
ICAgICAgb3BlcmF0aW9uTmV3RnVuY3Rpb24sIHJlc3VsdEdQUiwgbV9qaXQuY29kZUJsb2NrKCkt
PmZ1bmN0aW9uRGVjbChub2RlLT5mdW5jdGlvbkRlY2xJbmRleCgpKSk7CisgICAgY2VsbFJlc3Vs
dChyZXN1bHRHUFIsIG5vZGUpOwogfQogCi12b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlTmV3
RnVuY3Rpb25FeHByZXNzaW9uKE5vZGUmIG5vZGUpCit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlTmV3RnVuY3Rpb25FeHByZXNzaW9uKE5vZGUqIG5vZGUpCiB7CiAgICAgR1BSUmVzdWx0IHJl
c3VsdCh0aGlzKTsKICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwpAQCAtMzc2
MywyMSArMzc0NSwyMCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlTmV3RnVuY3Rpb25F
CiAgICAgY2FsbE9wZXJhdGlvbigKICAgICAgICAgb3BlcmF0aW9uTmV3RnVuY3Rpb25FeHByZXNz
aW9uLAogICAgICAgICByZXN1bHRHUFIsCi0gICAgICAgIG1faml0LmNvZGVCbG9jaygpLT5mdW5j
dGlvbkV4cHIobm9kZS5mdW5jdGlvbkV4cHJJbmRleCgpKSk7Ci0gICAgY2VsbFJlc3VsdChyZXN1
bHRHUFIsIG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAgbV9qaXQuY29kZUJsb2NrKCktPmZ1bmN0
aW9uRXhwcihub2RlLT5mdW5jdGlvbkV4cHJJbmRleCgpKSk7CisgICAgY2VsbFJlc3VsdChyZXN1
bHRHUFIsIG5vZGUpOwogfQogCi1ib29sIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUmVnRXhwRXhl
YyhOb2RlJiBub2RlKQorYm9vbCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVJlZ0V4cEV4ZWMoTm9k
ZSogbm9kZSkKIHsKICAgICB1bnNpZ25lZCBicmFuY2hJbmRleEluQmxvY2sgPSBkZXRlY3RQZWVw
SG9sZUJyYW5jaCgpOwogICAgIGlmIChicmFuY2hJbmRleEluQmxvY2sgPT0gVUlOVF9NQVgpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBOb2RlSW5kZXggYnJhbmNoTm9kZUluZGV4ID0gbV9q
aXQuZ3JhcGgoKS5tX2Jsb2Nrc1ttX2Jsb2NrXS0+YXQoYnJhbmNoSW5kZXhJbkJsb2NrKTsKLSAg
ICBBU1NFUlQobm9kZS5hZGp1c3RlZFJlZkNvdW50KCkgPT0gMSk7CisgICAgTm9kZSogYnJhbmNo
Tm9kZSA9IG1faml0LmdyYXBoKCkubV9ibG9ja3NbbV9ibG9ja10tPmF0KGJyYW5jaEluZGV4SW5C
bG9jayk7CisgICAgQVNTRVJUKG5vZGUtPmFkanVzdGVkUmVmQ291bnQoKSA9PSAxKTsKIAotICAg
IE5vZGUmIGJyYW5jaE5vZGUgPSBhdChicmFuY2hOb2RlSW5kZXgpOwotICAgIEJsb2NrSW5kZXgg
dGFrZW4gPSBicmFuY2hOb2RlLnRha2VuQmxvY2tJbmRleCgpOwotICAgIEJsb2NrSW5kZXggbm90
VGFrZW4gPSBicmFuY2hOb2RlLm5vdFRha2VuQmxvY2tJbmRleCgpOworICAgIEJsb2NrSW5kZXgg
dGFrZW4gPSBicmFuY2hOb2RlLT50YWtlbkJsb2NrSW5kZXgoKTsKKyAgICBCbG9ja0luZGV4IG5v
dFRha2VuID0gYnJhbmNoTm9kZS0+bm90VGFrZW5CbG9ja0luZGV4KCk7CiAgICAgCiAgICAgYm9v
bCBpbnZlcnQgPSBmYWxzZTsKICAgICBpZiAodGFrZW4gPT0gbmV4dEJsb2NrKCkpIHsKQEAgLTM3
ODcsOCArMzc2OCw4IEBAIGJvb2wgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVSZWdFeHBFeGVjKE4K
ICAgICAgICAgbm90VGFrZW4gPSB0bXA7CiAgICAgfQogCi0gICAgU3BlY3VsYXRlQ2VsbE9wZXJh
bmQgYmFzZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKLSAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBh
cmd1bWVudCh0aGlzLCBub2RlLmNoaWxkMigpKTsKKyAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBi
YXNlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKKyAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBhcmd1
bWVudCh0aGlzLCBub2RlLT5jaGlsZDIoKSk7CiAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdw
cigpOwogICAgIEdQUlJlZyBhcmd1bWVudEdQUiA9IGFyZ3VtZW50LmdwcigpOwogICAgIApAQCAt
Mzc5OSwxOCArMzc4MCwxOCBAQCBib29sIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUmVnRXhwRXhl
YyhOCiAgICAgYnJhbmNoVGVzdDMyKGludmVydCA/IEpJVENvbXBpbGVyOjpaZXJvIDogSklUQ29t
cGlsZXI6Ok5vblplcm8sIHJlc3VsdC5ncHIoKSwgdGFrZW4pOwogICAgIGp1bXAobm90VGFrZW4p
OwogCi0gICAgdXNlKG5vZGUuY2hpbGQxKCkpOwotICAgIHVzZShub2RlLmNoaWxkMigpKTsKKyAg
ICB1c2Uobm9kZS0+Y2hpbGQxKCkpOworICAgIHVzZShub2RlLT5jaGlsZDIoKSk7CiAgICAgbV9p
bmRleEluQmxvY2sgPSBicmFuY2hJbmRleEluQmxvY2s7Ci0gICAgbV9jb21waWxlSW5kZXggPSBi
cmFuY2hOb2RlSW5kZXg7CisgICAgbV9jdXJyZW50Tm9kZSA9IGJyYW5jaE5vZGU7CiAKICAgICBy
ZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFsbG9jYXRlUHJv
cGVydHlTdG9yYWdlKE5vZGUmIG5vZGUpCit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQWxs
b2NhdGVQcm9wZXJ0eVN0b3JhZ2UoTm9kZSogbm9kZSkKIHsKLSAgICBpZiAoaGFzSW5kZXhpbmdI
ZWFkZXIobm9kZS5zdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSgpLnByZXZpb3VzU3RydWN0dXJlLT5p
bmRleGluZ1R5cGUoKSkpIHsKLSAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlz
LCBub2RlLmNoaWxkMSgpKTsKKyAgICBpZiAoaGFzSW5kZXhpbmdIZWFkZXIobm9kZS0+c3RydWN0
dXJlVHJhbnNpdGlvbkRhdGEoKS5wcmV2aW91c1N0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpKSB7
CisgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS0+Y2hpbGQxKCkp
OwogICAgICAgICAKICAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOwogICAgICAg
ICAKQEAgLTM4MTksMTggKzM4MDAsMTggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFs
bG9jYXRlUHJvcAogICAgICAgICBHUFJSZXN1bHQgcmVzdWx0KHRoaXMpOwogICAgICAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvblJlYWxsb2NhdGVCdXR0ZXJmbHlUb0hhdmVQcm9wZXJ0eVN0b3Jh
Z2VXaXRoSW5pdGlhbENhcGFjaXR5LCByZXN1bHQuZ3ByKCksIGJhc2VHUFIpOwogICAgICAgICAK
LSAgICAgICAgc3RvcmFnZVJlc3VsdChyZXN1bHQuZ3ByKCksIG1fY29tcGlsZUluZGV4KTsKKyAg
ICAgICAgc3RvcmFnZVJlc3VsdChyZXN1bHQuZ3ByKCksIG5vZGUpOwogICAgICAgICByZXR1cm47
CiAgICAgfQogICAgIAotICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS5j
aGlsZDEoKSk7CisgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLT5jaGls
ZDEoKSk7CiAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7CiAgICAgICAgIAogICAgIEdQ
UlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0
Y2guZ3ByKCk7CiAgICAgICAgIAotICAgIEFTU0VSVCghbm9kZS5zdHJ1Y3R1cmVUcmFuc2l0aW9u
RGF0YSgpLnByZXZpb3VzU3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpKTsKLSAgICBBU1NF
UlQoaW5pdGlhbE91dE9mTGluZUNhcGFjaXR5ID09IG5vZGUuc3RydWN0dXJlVHJhbnNpdGlvbkRh
dGEoKS5uZXdTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpOworICAgIEFTU0VSVCghbm9k
ZS0+c3RydWN0dXJlVHJhbnNpdGlvbkRhdGEoKS5wcmV2aW91c1N0cnVjdHVyZS0+b3V0T2ZMaW5l
Q2FwYWNpdHkoKSk7CisgICAgQVNTRVJUKGluaXRpYWxPdXRPZkxpbmVDYXBhY2l0eSA9PSBub2Rl
LT5zdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSgpLm5ld1N0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNp
dHkoKSk7CiAgICAgCiAgICAgSklUQ29tcGlsZXI6Okp1bXAgc2xvd1BhdGggPQogICAgICAgICBl
bWl0QWxsb2NhdGVCYXNpY1N0b3JhZ2UoCkBAIC0zODQzLDE3ICszODI0LDE3IEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGVBbGxvY2F0ZVByb3AKICAgICAgICAgCiAgICAgbV9qaXQuc3Rv
cmVQdHIoc2NyYXRjaEdQUiwgSklUQ29tcGlsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6
OmJ1dHRlcmZseU9mZnNldCgpKSk7CiAgICAgICAgIAotICAgIHN0b3JhZ2VSZXN1bHQoc2NyYXRj
aEdQUiwgbV9jb21waWxlSW5kZXgpOworICAgIHN0b3JhZ2VSZXN1bHQoc2NyYXRjaEdQUiwgbm9k
ZSk7CiB9CiAKLXZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVSZWFsbG9jYXRlUHJvcGVydHlT
dG9yYWdlKE5vZGUmIG5vZGUpCit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUmVhbGxvY2F0
ZVByb3BlcnR5U3RvcmFnZShOb2RlKiBub2RlKQogewotICAgIHNpemVfdCBvbGRTaXplID0gbm9k
ZS5zdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSgpLnByZXZpb3VzU3RydWN0dXJlLT5vdXRPZkxpbmVD
YXBhY2l0eSgpICogc2l6ZW9mKEpTVmFsdWUpOworICAgIHNpemVfdCBvbGRTaXplID0gbm9kZS0+
c3RydWN0dXJlVHJhbnNpdGlvbkRhdGEoKS5wcmV2aW91c1N0cnVjdHVyZS0+b3V0T2ZMaW5lQ2Fw
YWNpdHkoKSAqIHNpemVvZihKU1ZhbHVlKTsKICAgICBzaXplX3QgbmV3U2l6ZSA9IG9sZFNpemUg
KiBvdXRPZkxpbmVHcm93dGhGYWN0b3I7Ci0gICAgQVNTRVJUKG5ld1NpemUgPT0gbm9kZS5zdHJ1
Y3R1cmVUcmFuc2l0aW9uRGF0YSgpLm5ld1N0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAq
IHNpemVvZihKU1ZhbHVlKSk7CisgICAgQVNTRVJUKG5ld1NpemUgPT0gbm9kZS0+c3RydWN0dXJl
VHJhbnNpdGlvbkRhdGEoKS5uZXdTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkgKiBzaXpl
b2YoSlNWYWx1ZSkpOwogCi0gICAgaWYgKGhhc0luZGV4aW5nSGVhZGVyKG5vZGUuc3RydWN0dXJl
VHJhbnNpdGlvbkRhdGEoKS5wcmV2aW91c1N0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpKSB7Ci0g
ICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS5jaGlsZDEoKSk7Cisg
ICAgaWYgKGhhc0luZGV4aW5nSGVhZGVyKG5vZGUtPnN0cnVjdHVyZVRyYW5zaXRpb25EYXRhKCku
cHJldmlvdXNTdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSkgeworICAgICAgICBTcGVjdWxhdGVD
ZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgCiAgICAgICAg
IEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKICAgICAgICAgCkBAIC0zODYyLDEyICszODQz
LDEyIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVSZWFsbG9jYXRlUHIKICAgICAgICAg
R1BSUmVzdWx0IHJlc3VsdCh0aGlzKTsKICAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25S
ZWFsbG9jYXRlQnV0dGVyZmx5VG9Hcm93UHJvcGVydHlTdG9yYWdlLCByZXN1bHQuZ3ByKCksIGJh
c2VHUFIsIG5ld1NpemUgLyBzaXplb2YoSlNWYWx1ZSkpOwogICAgICAgICAKLSAgICAgICAgc3Rv
cmFnZVJlc3VsdChyZXN1bHQuZ3ByKCksIG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAgc3RvcmFn
ZVJlc3VsdChyZXN1bHQuZ3ByKCksIG5vZGUpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAg
IAotICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS5jaGlsZDEoKSk7Ci0g
ICAgU3RvcmFnZU9wZXJhbmQgb2xkU3RvcmFnZSh0aGlzLCBub2RlLmNoaWxkMigpKTsKKyAgICBT
cGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKKyAgICBTdG9y
YWdlT3BlcmFuZCBvbGRTdG9yYWdlKHRoaXMsIG5vZGUtPmNoaWxkMigpKTsKICAgICBHUFJUZW1w
b3Jhcnkgc2NyYXRjaDEodGhpcyk7CiAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2gyKHRoaXMpOwog
ICAgICAgICAKQEAgLTM4OTAsNyArMzg3MSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVSZWFsbG9jYXRlUHIKICAgICB9CiAgICAgbV9qaXQuc3RvcmVQdHIoc2NyYXRjaEdQUjIsIEpJ
VENvbXBpbGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSkp
OwogICAgIAotICAgIHN0b3JhZ2VSZXN1bHQoc2NyYXRjaEdQUjIsIG1fY29tcGlsZUluZGV4KTsK
KyAgICBzdG9yYWdlUmVzdWx0KHNjcmF0Y2hHUFIyLCBub2RlKTsKIH0KIAogR1BSUmVnIFNwZWN1
bGF0aXZlSklUOjp0ZW1wb3JhcnlSZWdpc3RlckZvclB1dEJ5VmFsKEdQUlRlbXBvcmFyeSYgdGVt
cG9yYXJ5LCBBcnJheU1vZGUgYXJyYXlNb2RlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkocmV2aXNpb24gMTQxMDUyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTIsIDIwMTMg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC0xMTIsMTUgKzExMiw2IEBAIHB1YmxpYzoKICAgICB2b2lkIGNyZWF0ZU9TUkVu
dHJpZXMoKTsKICAgICB2b2lkIGxpbmtPU1JFbnRyaWVzKExpbmtCdWZmZXImKTsKIAotICAgIE5v
ZGUmIGF0KE5vZGVJbmRleCBub2RlSW5kZXgpCi0gICAgewotICAgICAgICByZXR1cm4gbV9qaXQu
Z3JhcGgoKVtub2RlSW5kZXhdOwotICAgIH0KLSAgICBOb2RlJiBhdChFZGdlIG5vZGVVc2UpCi0g
ICAgewotICAgICAgICByZXR1cm4gYXQobm9kZVVzZS5pbmRleCgpKTsKLSAgICB9Ci0gICAgCiAg
ICAgQmxvY2tJbmRleCBuZXh0QmxvY2soKQogICAgIHsKICAgICAgICAgZm9yIChCbG9ja0luZGV4
IHJlc3VsdCA9IG1fYmxvY2sgKyAxOyA7IHJlc3VsdCsrKSB7CkBAIC0xMzEsMTQgKzEyMiwxNCBA
QCBwdWJsaWM6CiAgICAgICAgIH0KICAgICB9CiAgICAgCi0gICAgR1BSUmVnIGZpbGxJbnRlZ2Vy
KE5vZGVJbmRleCwgRGF0YUZvcm1hdCYgcmV0dXJuRm9ybWF0KTsKLSAgICBGUFJSZWcgZmlsbERv
dWJsZShOb2RlSW5kZXgpOworICAgIEdQUlJlZyBmaWxsSW50ZWdlcihOb2RlKiwgRGF0YUZvcm1h
dCYgcmV0dXJuRm9ybWF0KTsKKyAgICBGUFJSZWcgZmlsbERvdWJsZShOb2RlKik7CiAjaWYgVVNF
KEpTVkFMVUU2NCkKLSAgICBHUFJSZWcgZmlsbEpTVmFsdWUoTm9kZUluZGV4KTsKKyAgICBHUFJS
ZWcgZmlsbEpTVmFsdWUoTm9kZSopOwogI2VsaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICBib29s
IGZpbGxKU1ZhbHVlKE5vZGVJbmRleCwgR1BSUmVnJiwgR1BSUmVnJiwgRlBSUmVnJik7CisgICAg
Ym9vbCBmaWxsSlNWYWx1ZShOb2RlKiwgR1BSUmVnJiwgR1BSUmVnJiwgRlBSUmVnJik7CiAjZW5k
aWYKLSAgICBHUFJSZWcgZmlsbFN0b3JhZ2UoTm9kZUluZGV4KTsKKyAgICBHUFJSZWcgZmlsbFN0
b3JhZ2UoTm9kZSopOwogCiAgICAgLy8gbG9jayBhbmQgdW5sb2NrIEdQUiAmIEZQUiByZWdpc3Rl
cnMuCiAgICAgdm9pZCBsb2NrKEdQUlJlZyByZWcpCkBAIC0xNjAsMTUgKzE1MSwxNSBAQCBwdWJs
aWM6CiAKICAgICAvLyBVc2VkIHRvIGNoZWNrIHdoZXRoZXIgYSBjaGlsZCBub2RlIGlzIG9uIGl0
cyBsYXN0IHVzZSwKICAgICAvLyBhbmQgaXRzIG1hY2hpbmUgcmVnaXN0ZXJzIG1heSBiZSByZXVz
ZWQuCi0gICAgYm9vbCBjYW5SZXVzZShOb2RlSW5kZXggbm9kZUluZGV4KQorICAgIGJvb2wgY2Fu
UmV1c2UoTm9kZSogbm9kZSkKICAgICB7Ci0gICAgICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFs
UmVnaXN0ZXIgPSBhdChub2RlSW5kZXgpLnZpcnR1YWxSZWdpc3RlcigpOworICAgICAgICBWaXJ0
dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyID0gbm9kZS0+dmlydHVhbFJlZ2lzdGVyKCk7CiAg
ICAgICAgIEdlbmVyYXRpb25JbmZvJiBpbmZvID0gbV9nZW5lcmF0aW9uSW5mb1t2aXJ0dWFsUmVn
aXN0ZXJdOwogICAgICAgICByZXR1cm4gaW5mby5jYW5SZXVzZSgpOwogICAgIH0KICAgICBib29s
IGNhblJldXNlKEVkZ2Ugbm9kZVVzZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBjYW5SZXVzZShu
b2RlVXNlLmluZGV4KCkpOworICAgICAgICByZXR1cm4gY2FuUmV1c2Uobm9kZVVzZS5ub2RlKCkp
OwogICAgIH0KICAgICBHUFJSZWcgcmV1c2UoR1BSUmVnIHJlZykKICAgICB7CkBAIC0yMjksMjYg
KzIyMCwyNSBAQCBwdWJsaWM6CiAgICAgLy8gbWFjaGluZSByZWdpc3RlcnMgZmlyc3QgKGJ5IGxv
Y2tpbmcgVmlydHVhbFJlZ3NpdGVycyB0aGF0IGFyZSBhbHJlYWR5CiAgICAgLy8gaW4gbWFjaGlu
ZSByZWdpc3RlciBiZWZvcmUgZmlsbGluZyB0aG9zZSB0aGF0IGFyZSBub3Qgd2UgYXR0ZW1wdCB0
bwogICAgIC8vIGF2b2lkIHNwaWxsaW5nIHZhbHVlcyB3ZSB3aWxsIG5lZWQgaW1tZWRpYXRlbHkp
LgotICAgIGJvb2wgaXNGaWxsZWQoTm9kZUluZGV4IG5vZGVJbmRleCkKKyAgICBib29sIGlzRmls
bGVkKE5vZGUqIG5vZGUpCiAgICAgewotICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJl
Z2lzdGVyID0gYXQobm9kZUluZGV4KS52aXJ0dWFsUmVnaXN0ZXIoKTsKKyAgICAgICAgVmlydHVh
bFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciA9IG5vZGUtPnZpcnR1YWxSZWdpc3RlcigpOwogICAg
ICAgICBHZW5lcmF0aW9uSW5mbyYgaW5mbyA9IG1fZ2VuZXJhdGlvbkluZm9bdmlydHVhbFJlZ2lz
dGVyXTsKICAgICAgICAgcmV0dXJuIGluZm8ucmVnaXN0ZXJGb3JtYXQoKSAhPSBEYXRhRm9ybWF0
Tm9uZTsKICAgICB9Ci0gICAgYm9vbCBpc0ZpbGxlZERvdWJsZShOb2RlSW5kZXggbm9kZUluZGV4
KQorICAgIGJvb2wgaXNGaWxsZWREb3VibGUoTm9kZSogbm9kZSkKICAgICB7Ci0gICAgICAgIFZp
cnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIgPSBhdChub2RlSW5kZXgpLnZpcnR1YWxSZWdp
c3RlcigpOworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyID0gbm9kZS0+
dmlydHVhbFJlZ2lzdGVyKCk7CiAgICAgICAgIEdlbmVyYXRpb25JbmZvJiBpbmZvID0gbV9nZW5l
cmF0aW9uSW5mb1t2aXJ0dWFsUmVnaXN0ZXJdOwogICAgICAgICByZXR1cm4gaW5mby5yZWdpc3Rl
ckZvcm1hdCgpID09IERhdGFGb3JtYXREb3VibGU7CiAgICAgfQogCiAgICAgLy8gQ2FsbGVkIG9u
IGFuIG9wZXJhbmQgb25jZSBpdCBoYXMgYmVlbiBjb25zdW1lZCBieSBhIHBhcmVudCBub2RlLgot
ICAgIHZvaWQgdXNlKE5vZGVJbmRleCBub2RlSW5kZXgpCisgICAgdm9pZCB1c2UoTm9kZSogbm9k
ZSkKICAgICB7Ci0gICAgICAgIE5vZGUmIG5vZGUgPSBhdChub2RlSW5kZXgpOwotICAgICAgICBp
ZiAoIW5vZGUuaGFzUmVzdWx0KCkpCisgICAgICAgIGlmICghbm9kZS0+aGFzUmVzdWx0KCkpCiAg
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0
ZXIgPSBub2RlLnZpcnR1YWxSZWdpc3RlcigpOworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmly
dHVhbFJlZ2lzdGVyID0gbm9kZS0+dmlydHVhbFJlZ2lzdGVyKCk7CiAgICAgICAgIEdlbmVyYXRp
b25JbmZvJiBpbmZvID0gbV9nZW5lcmF0aW9uSW5mb1t2aXJ0dWFsUmVnaXN0ZXJdOwogCiAgICAg
ICAgIC8vIHVzZSgpIHJldHVybnMgdHJ1ZSB3aGVuIHRoZSB2YWx1ZSBiZWNvbWVzIGRlYWQsIGFu
ZCBhbnkKQEAgLTI3NSw3ICsyNjUsNyBAQCBwdWJsaWM6CiAgICAgfQogICAgIHZvaWQgdXNlKEVk
Z2Ugbm9kZVVzZSkKICAgICB7Ci0gICAgICAgIHVzZShub2RlVXNlLmluZGV4KCkpOworICAgICAg
ICB1c2Uobm9kZVVzZS5ub2RlKCkpOwogICAgIH0KICAgICAKICAgICBSZWdpc3RlclNldCB1c2Vk
UmVnaXN0ZXJzKCkKQEAgLTMwOCwxOSArMjk4LDE5IEBAIHB1YmxpYzoKIAogICAgIC8vIENhbGxl
ZCBieSB0aGUgc3BlY3VsYXRpdmUgb3BlcmFuZCB0eXBlcywgYmVsb3csIHRvIGZpbGwgb3BlcmFu
ZCB0bwogICAgIC8vIG1hY2hpbmUgcmVnaXN0ZXJzLCBpbXBsaWNpdGx5IGdlbmVyYXRpbmcgc3Bl
Y3VsYXRpb24gY2hlY2tzIGFzIG5lZWRlZC4KLSAgICBHUFJSZWcgZmlsbFNwZWN1bGF0ZUludChO
b2RlSW5kZXgsIERhdGFGb3JtYXQmIHJldHVybkZvcm1hdCwgU3BlY3VsYXRpb25EaXJlY3Rpb24p
OwotICAgIEdQUlJlZyBmaWxsU3BlY3VsYXRlSW50U3RyaWN0KE5vZGVJbmRleCk7Ci0gICAgRlBS
UmVnIGZpbGxTcGVjdWxhdGVEb3VibGUoTm9kZUluZGV4LCBTcGVjdWxhdGlvbkRpcmVjdGlvbik7
Ci0gICAgR1BSUmVnIGZpbGxTcGVjdWxhdGVDZWxsKE5vZGVJbmRleCwgU3BlY3VsYXRpb25EaXJl
Y3Rpb24pOwotICAgIEdQUlJlZyBmaWxsU3BlY3VsYXRlQm9vbGVhbihOb2RlSW5kZXgsIFNwZWN1
bGF0aW9uRGlyZWN0aW9uKTsKLSAgICBHZW5lcmF0ZWRPcGVyYW5kVHlwZSBjaGVja0dlbmVyYXRl
ZFR5cGVGb3JUb0ludDMyKE5vZGVJbmRleCk7CisgICAgR1BSUmVnIGZpbGxTcGVjdWxhdGVJbnQo
Tm9kZSosIERhdGFGb3JtYXQmIHJldHVybkZvcm1hdCwgU3BlY3VsYXRpb25EaXJlY3Rpb24pOwor
ICAgIEdQUlJlZyBmaWxsU3BlY3VsYXRlSW50U3RyaWN0KE5vZGUqKTsKKyAgICBGUFJSZWcgZmls
bFNwZWN1bGF0ZURvdWJsZShOb2RlKiwgU3BlY3VsYXRpb25EaXJlY3Rpb24pOworICAgIEdQUlJl
ZyBmaWxsU3BlY3VsYXRlQ2VsbChOb2RlKiwgU3BlY3VsYXRpb25EaXJlY3Rpb24pOworICAgIEdQ
UlJlZyBmaWxsU3BlY3VsYXRlQm9vbGVhbihOb2RlKiwgU3BlY3VsYXRpb25EaXJlY3Rpb24pOwor
ICAgIEdlbmVyYXRlZE9wZXJhbmRUeXBlIGNoZWNrR2VuZXJhdGVkVHlwZUZvclRvSW50MzIoTm9k
ZSopOwogCiAgICAgdm9pZCBhZGRTbG93UGF0aEdlbmVyYXRvcihQYXNzT3duUHRyPFNsb3dQYXRo
R2VuZXJhdG9yPik7CiAgICAgdm9pZCBydW5TbG93UGF0aEdlbmVyYXRvcnMoKTsKICAgICAKLSAg
ICB2b2lkIGNvbXBpbGUoTm9kZSYpOwotICAgIHZvaWQgbm90aWNlT1NSQmlydGgoTm9kZUluZGV4
LCBOb2RlJik7Ci0gICAgdm9pZCBjb21waWxlTW92SGludChOb2RlJik7CisgICAgdm9pZCBjb21w
aWxlKE5vZGUqKTsKKyAgICB2b2lkIG5vdGljZU9TUkJpcnRoKE5vZGUqKTsKKyAgICB2b2lkIGNv
bXBpbGVNb3ZIaW50KE5vZGUqKTsKICAgICB2b2lkIGNvbXBpbGUoQmFzaWNCbG9jayYpOwogCiAg
ICAgdm9pZCBjaGVja0FyZ3VtZW50VHlwZXMoKTsKQEAgLTUzNiw0NCArNTI2LDQ0IEBAIHB1Ymxp
YzoKICAgICAgICAgfQogICAgIH0KICAgICAKLSAgICBib29sIGlzU3RyaWN0SW50MzIoTm9kZUlu
ZGV4KTsKKyAgICBib29sIGlzU3RyaWN0SW50MzIoTm9kZSopOwogICAgIAotICAgIGJvb2wgaXNL
bm93bkludGVnZXIoTm9kZUluZGV4KTsKLSAgICBib29sIGlzS25vd25OdW1lcmljKE5vZGVJbmRl
eCk7Ci0gICAgYm9vbCBpc0tub3duQ2VsbChOb2RlSW5kZXgpOworICAgIGJvb2wgaXNLbm93bklu
dGVnZXIoTm9kZSopOworICAgIGJvb2wgaXNLbm93bk51bWVyaWMoTm9kZSopOworICAgIGJvb2wg
aXNLbm93bkNlbGwoTm9kZSopOwogICAgIAotICAgIGJvb2wgaXNLbm93bk5vdEludGVnZXIoTm9k
ZUluZGV4KTsKLSAgICBib29sIGlzS25vd25Ob3ROdW1iZXIoTm9kZUluZGV4KTsKKyAgICBib29s
IGlzS25vd25Ob3RJbnRlZ2VyKE5vZGUqKTsKKyAgICBib29sIGlzS25vd25Ob3ROdW1iZXIoTm9k
ZSopOwogCi0gICAgYm9vbCBpc0tub3duTm90Q2VsbChOb2RlSW5kZXgpOworICAgIGJvb2wgaXNL
bm93bk5vdENlbGwoTm9kZSopOwogICAgIAogICAgIC8vIENoZWNrcy9hY2Nlc3NvcnMgZm9yIGNv
bnN0YW50IHZhbHVlcy4KLSAgICBib29sIGlzQ29uc3RhbnQoTm9kZUluZGV4IG5vZGVJbmRleCkg
eyByZXR1cm4gbV9qaXQuZ3JhcGgoKS5pc0NvbnN0YW50KG5vZGVJbmRleCk7IH0KLSAgICBib29s
IGlzSlNDb25zdGFudChOb2RlSW5kZXggbm9kZUluZGV4KSB7IHJldHVybiBtX2ppdC5ncmFwaCgp
LmlzSlNDb25zdGFudChub2RlSW5kZXgpOyB9Ci0gICAgYm9vbCBpc0ludDMyQ29uc3RhbnQoTm9k
ZUluZGV4IG5vZGVJbmRleCkgeyByZXR1cm4gbV9qaXQuZ3JhcGgoKS5pc0ludDMyQ29uc3RhbnQo
bm9kZUluZGV4KTsgfQotICAgIGJvb2wgaXNEb3VibGVDb25zdGFudChOb2RlSW5kZXggbm9kZUlu
ZGV4KSB7IHJldHVybiBtX2ppdC5ncmFwaCgpLmlzRG91YmxlQ29uc3RhbnQobm9kZUluZGV4KTsg
fQotICAgIGJvb2wgaXNOdW1iZXJDb25zdGFudChOb2RlSW5kZXggbm9kZUluZGV4KSB7IHJldHVy
biBtX2ppdC5ncmFwaCgpLmlzTnVtYmVyQ29uc3RhbnQobm9kZUluZGV4KTsgfQotICAgIGJvb2wg
aXNCb29sZWFuQ29uc3RhbnQoTm9kZUluZGV4IG5vZGVJbmRleCkgeyByZXR1cm4gbV9qaXQuZ3Jh
cGgoKS5pc0Jvb2xlYW5Db25zdGFudChub2RlSW5kZXgpOyB9Ci0gICAgYm9vbCBpc0Z1bmN0aW9u
Q29uc3RhbnQoTm9kZUluZGV4IG5vZGVJbmRleCkgeyByZXR1cm4gbV9qaXQuZ3JhcGgoKS5pc0Z1
bmN0aW9uQ29uc3RhbnQobm9kZUluZGV4KTsgfQotICAgIGludDMyX3QgdmFsdWVPZkludDMyQ29u
c3RhbnQoTm9kZUluZGV4IG5vZGVJbmRleCkgeyByZXR1cm4gbV9qaXQuZ3JhcGgoKS52YWx1ZU9m
SW50MzJDb25zdGFudChub2RlSW5kZXgpOyB9Ci0gICAgZG91YmxlIHZhbHVlT2ZOdW1iZXJDb25z
dGFudChOb2RlSW5kZXggbm9kZUluZGV4KSB7IHJldHVybiBtX2ppdC5ncmFwaCgpLnZhbHVlT2ZO
dW1iZXJDb25zdGFudChub2RlSW5kZXgpOyB9Ci0gICAgaW50MzJfdCB2YWx1ZU9mTnVtYmVyQ29u
c3RhbnRBc0ludDMyKE5vZGVJbmRleCBub2RlSW5kZXgpCi0gICAgewotICAgICAgICBpZiAoaXNJ
bnQzMkNvbnN0YW50KG5vZGVJbmRleCkpCi0gICAgICAgICAgICByZXR1cm4gdmFsdWVPZkludDMy
Q29uc3RhbnQobm9kZUluZGV4KTsKLSAgICAgICAgcmV0dXJuIEpTQzo6dG9JbnQzMih2YWx1ZU9m
TnVtYmVyQ29uc3RhbnQobm9kZUluZGV4KSk7CisgICAgYm9vbCBpc0NvbnN0YW50KE5vZGUqIG5v
ZGUpIHsgcmV0dXJuIG1faml0LmdyYXBoKCkuaXNDb25zdGFudChub2RlKTsgfQorICAgIGJvb2wg
aXNKU0NvbnN0YW50KE5vZGUqIG5vZGUpIHsgcmV0dXJuIG1faml0LmdyYXBoKCkuaXNKU0NvbnN0
YW50KG5vZGUpOyB9CisgICAgYm9vbCBpc0ludDMyQ29uc3RhbnQoTm9kZSogbm9kZSkgeyByZXR1
cm4gbV9qaXQuZ3JhcGgoKS5pc0ludDMyQ29uc3RhbnQobm9kZSk7IH0KKyAgICBib29sIGlzRG91
YmxlQ29uc3RhbnQoTm9kZSogbm9kZSkgeyByZXR1cm4gbV9qaXQuZ3JhcGgoKS5pc0RvdWJsZUNv
bnN0YW50KG5vZGUpOyB9CisgICAgYm9vbCBpc051bWJlckNvbnN0YW50KE5vZGUqIG5vZGUpIHsg
cmV0dXJuIG1faml0LmdyYXBoKCkuaXNOdW1iZXJDb25zdGFudChub2RlKTsgfQorICAgIGJvb2wg
aXNCb29sZWFuQ29uc3RhbnQoTm9kZSogbm9kZSkgeyByZXR1cm4gbV9qaXQuZ3JhcGgoKS5pc0Jv
b2xlYW5Db25zdGFudChub2RlKTsgfQorICAgIGJvb2wgaXNGdW5jdGlvbkNvbnN0YW50KE5vZGUq
IG5vZGUpIHsgcmV0dXJuIG1faml0LmdyYXBoKCkuaXNGdW5jdGlvbkNvbnN0YW50KG5vZGUpOyB9
CisgICAgaW50MzJfdCB2YWx1ZU9mSW50MzJDb25zdGFudChOb2RlKiBub2RlKSB7IHJldHVybiBt
X2ppdC5ncmFwaCgpLnZhbHVlT2ZJbnQzMkNvbnN0YW50KG5vZGUpOyB9CisgICAgZG91YmxlIHZh
bHVlT2ZOdW1iZXJDb25zdGFudChOb2RlKiBub2RlKSB7IHJldHVybiBtX2ppdC5ncmFwaCgpLnZh
bHVlT2ZOdW1iZXJDb25zdGFudChub2RlKTsgfQorICAgIGludDMyX3QgdmFsdWVPZk51bWJlckNv
bnN0YW50QXNJbnQzMihOb2RlKiBub2RlKQorICAgIHsKKyAgICAgICAgaWYgKGlzSW50MzJDb25z
dGFudChub2RlKSkKKyAgICAgICAgICAgIHJldHVybiB2YWx1ZU9mSW50MzJDb25zdGFudChub2Rl
KTsKKyAgICAgICAgcmV0dXJuIEpTQzo6dG9JbnQzMih2YWx1ZU9mTnVtYmVyQ29uc3RhbnQobm9k
ZSkpOwogICAgIH0KICNpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAgIHZvaWQqIGFkZHJlc3NPZkRv
dWJsZUNvbnN0YW50KE5vZGVJbmRleCBub2RlSW5kZXgpIHsgcmV0dXJuIG1faml0LmFkZHJlc3NP
ZkRvdWJsZUNvbnN0YW50KG5vZGVJbmRleCk7IH0KKyAgICB2b2lkKiBhZGRyZXNzT2ZEb3VibGVD
b25zdGFudChOb2RlKiBub2RlKSB7IHJldHVybiBtX2ppdC5hZGRyZXNzT2ZEb3VibGVDb25zdGFu
dChub2RlKTsgfQogI2VuZGlmCi0gICAgSlNWYWx1ZSB2YWx1ZU9mSlNDb25zdGFudChOb2RlSW5k
ZXggbm9kZUluZGV4KSB7IHJldHVybiBtX2ppdC5ncmFwaCgpLnZhbHVlT2ZKU0NvbnN0YW50KG5v
ZGVJbmRleCk7IH0KLSAgICBib29sIHZhbHVlT2ZCb29sZWFuQ29uc3RhbnQoTm9kZUluZGV4IG5v
ZGVJbmRleCkgeyByZXR1cm4gbV9qaXQuZ3JhcGgoKS52YWx1ZU9mQm9vbGVhbkNvbnN0YW50KG5v
ZGVJbmRleCk7IH0KLSAgICBKU0Z1bmN0aW9uKiB2YWx1ZU9mRnVuY3Rpb25Db25zdGFudChOb2Rl
SW5kZXggbm9kZUluZGV4KSB7IHJldHVybiBtX2ppdC5ncmFwaCgpLnZhbHVlT2ZGdW5jdGlvbkNv
bnN0YW50KG5vZGVJbmRleCk7IH0KLSAgICBib29sIGlzTnVsbENvbnN0YW50KE5vZGVJbmRleCBu
b2RlSW5kZXgpCisgICAgSlNWYWx1ZSB2YWx1ZU9mSlNDb25zdGFudChOb2RlKiBub2RlKSB7IHJl
dHVybiBtX2ppdC5ncmFwaCgpLnZhbHVlT2ZKU0NvbnN0YW50KG5vZGUpOyB9CisgICAgYm9vbCB2
YWx1ZU9mQm9vbGVhbkNvbnN0YW50KE5vZGUqIG5vZGUpIHsgcmV0dXJuIG1faml0LmdyYXBoKCku
dmFsdWVPZkJvb2xlYW5Db25zdGFudChub2RlKTsgfQorICAgIEpTRnVuY3Rpb24qIHZhbHVlT2ZG
dW5jdGlvbkNvbnN0YW50KE5vZGUqIG5vZGUpIHsgcmV0dXJuIG1faml0LmdyYXBoKCkudmFsdWVP
ZkZ1bmN0aW9uQ29uc3RhbnQobm9kZSk7IH0KKyAgICBib29sIGlzTnVsbENvbnN0YW50KE5vZGUq
IG5vZGUpCiAgICAgewotICAgICAgICBpZiAoIWlzQ29uc3RhbnQobm9kZUluZGV4KSkKKyAgICAg
ICAgaWYgKCFpc0NvbnN0YW50KG5vZGUpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgICByZXR1cm4gdmFsdWVPZkpTQ29uc3RhbnQobm9kZUluZGV4KS5pc051bGwoKTsKKyAgICAg
ICAgcmV0dXJuIHZhbHVlT2ZKU0NvbnN0YW50KG5vZGUpLmlzTnVsbCgpOwogICAgIH0KIAogICAg
IElkZW50aWZpZXIqIGlkZW50aWZpZXIodW5zaWduZWQgaW5kZXgpCkBAIC02MjYsOSArNjE2LDkg
QEAgcHVibGljOgogI2VuZGlmCiAKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIE1hY3JvQXNzZW1i
bGVyOjpJbW02NCB2YWx1ZU9mSlNDb25zdGFudEFzSW1tNjQoTm9kZUluZGV4IG5vZGVJbmRleCkK
KyAgICBNYWNyb0Fzc2VtYmxlcjo6SW1tNjQgdmFsdWVPZkpTQ29uc3RhbnRBc0ltbTY0KE5vZGUq
IG5vZGUpCiAgICAgewotICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXI6OkltbTY0KEpTVmFs
dWU6OmVuY29kZSh2YWx1ZU9mSlNDb25zdGFudChub2RlSW5kZXgpKSk7CisgICAgICAgIHJldHVy
biBNYWNyb0Fzc2VtYmxlcjo6SW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKHZhbHVlT2ZKU0NvbnN0YW50
KG5vZGUpKSk7CiAgICAgfQogI2VuZGlmCiAKQEAgLTcwNSwxOSArNjk1LDE5IEBAIHB1YmxpYzoK
IAogICAgICAgICAvLyBDaGVjayB0aGF0IG5vIGludGVydmVuaW5nIG5vZGVzIHdpbGwgYmUgZ2Vu
ZXJhdGVkLgogICAgICAgICBmb3IgKHVuc2lnbmVkIGluZGV4ID0gbV9pbmRleEluQmxvY2sgKyAx
OyBpbmRleCA8IGJsb2NrLT5zaXplKCkgLSAxOyArK2luZGV4KSB7Ci0gICAgICAgICAgICBOb2Rl
SW5kZXggbm9kZUluZGV4ID0gYmxvY2stPmF0KGluZGV4KTsKLSAgICAgICAgICAgIGlmIChhdChu
b2RlSW5kZXgpLnNob3VsZEdlbmVyYXRlKCkpCisgICAgICAgICAgICBOb2RlKiBub2RlID0gYmxv
Y2stPmF0KGluZGV4KTsKKyAgICAgICAgICAgIGlmIChub2RlLT5zaG91bGRHZW5lcmF0ZSgpKQog
ICAgICAgICAgICAgICAgIHJldHVybiBVSU5UX01BWDsKICAgICAgICAgfQogCiAgICAgICAgIC8v
IENoZWNrIGlmIHRoZSBsYXN0Tm9kZSBpcyBhIGJyYW5jaCBvbiB0aGlzIG5vZGUuCi0gICAgICAg
IE5vZGUmIGxhc3ROb2RlID0gYXQoYmxvY2stPmxhc3QoKSk7Ci0gICAgICAgIHJldHVybiBsYXN0
Tm9kZS5vcCgpID09IEJyYW5jaCAmJiBsYXN0Tm9kZS5jaGlsZDEoKS5pbmRleCgpID09IG1fY29t
cGlsZUluZGV4ID8gYmxvY2stPnNpemUoKSAtIDEgOiBVSU5UX01BWDsKKyAgICAgICAgTm9kZSog
bGFzdE5vZGUgPSBibG9jay0+bGFzdCgpOworICAgICAgICByZXR1cm4gbGFzdE5vZGUtPm9wKCkg
PT0gQnJhbmNoICYmIGxhc3ROb2RlLT5jaGlsZDEoKSA9PSBtX2N1cnJlbnROb2RlID8gYmxvY2st
PnNpemUoKSAtIDEgOiBVSU5UX01BWDsKICAgICB9CiAgICAgCi0gICAgdm9pZCBub25TcGVjdWxh
dGl2ZVZhbHVlVG9OdW1iZXIoTm9kZSYpOwotICAgIHZvaWQgbm9uU3BlY3VsYXRpdmVWYWx1ZVRv
SW50MzIoTm9kZSYpOwotICAgIHZvaWQgbm9uU3BlY3VsYXRpdmVVSW50MzJUb051bWJlcihOb2Rl
Jik7CisgICAgdm9pZCBub25TcGVjdWxhdGl2ZVZhbHVlVG9OdW1iZXIoTm9kZSopOworICAgIHZv
aWQgbm9uU3BlY3VsYXRpdmVWYWx1ZVRvSW50MzIoTm9kZSopOworICAgIHZvaWQgbm9uU3BlY3Vs
YXRpdmVVSW50MzJUb051bWJlcihOb2RlKik7CiAKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIHZv
aWQgY2FjaGVkR2V0QnlJZChDb2RlT3JpZ2luLCBHUFJSZWcgYmFzZUdQUiwgR1BSUmVnIHJlc3Vs
dEdQUiwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgSklUQ29tcGlsZXI6Okp1bXAgc2xvd1Bh
dGhUYXJnZXQgPSBKSVRDb21waWxlcjo6SnVtcCgpLCBTcGlsbFJlZ2lzdGVyc01vZGUgPSBOZWVk
VG9TcGlsbCk7CkBAIC03MjgsMTkgKzcxOCwxOSBAQCBwdWJsaWM6CiAjZW5kaWYKIAogICAgIHZv
aWQgbm9uU3BlY3VsYXRpdmVOb25QZWVwaG9sZUNvbXBhcmVOdWxsKEVkZ2Ugb3BlcmFuZCwgYm9v
bCBpbnZlcnQgPSBmYWxzZSk7Ci0gICAgdm9pZCBub25TcGVjdWxhdGl2ZVBlZXBob2xlQnJhbmNo
TnVsbChFZGdlIG9wZXJhbmQsIE5vZGVJbmRleCBicmFuY2hOb2RlSW5kZXgsIGJvb2wgaW52ZXJ0
ID0gZmFsc2UpOwotICAgIGJvb2wgbm9uU3BlY3VsYXRpdmVDb21wYXJlTnVsbChOb2RlJiwgRWRn
ZSBvcGVyYW5kLCBib29sIGludmVydCA9IGZhbHNlKTsKKyAgICB2b2lkIG5vblNwZWN1bGF0aXZl
UGVlcGhvbGVCcmFuY2hOdWxsKEVkZ2Ugb3BlcmFuZCwgTm9kZSogYnJhbmNoTm9kZSwgYm9vbCBp
bnZlcnQgPSBmYWxzZSk7CisgICAgYm9vbCBub25TcGVjdWxhdGl2ZUNvbXBhcmVOdWxsKE5vZGUq
LCBFZGdlIG9wZXJhbmQsIGJvb2wgaW52ZXJ0ID0gZmFsc2UpOwogICAgIAotICAgIHZvaWQgbm9u
U3BlY3VsYXRpdmVQZWVwaG9sZUJyYW5jaChOb2RlJiwgTm9kZUluZGV4IGJyYW5jaE5vZGVJbmRl
eCwgTWFjcm9Bc3NlbWJsZXI6OlJlbGF0aW9uYWxDb25kaXRpb24sIFNfREZHT3BlcmF0aW9uX0VK
SiBoZWxwZXJGdW5jdGlvbik7Ci0gICAgdm9pZCBub25TcGVjdWxhdGl2ZU5vblBlZXBob2xlQ29t
cGFyZShOb2RlJiwgTWFjcm9Bc3NlbWJsZXI6OlJlbGF0aW9uYWxDb25kaXRpb24sIFNfREZHT3Bl
cmF0aW9uX0VKSiBoZWxwZXJGdW5jdGlvbik7Ci0gICAgYm9vbCBub25TcGVjdWxhdGl2ZUNvbXBh
cmUoTm9kZSYsIE1hY3JvQXNzZW1ibGVyOjpSZWxhdGlvbmFsQ29uZGl0aW9uLCBTX0RGR09wZXJh
dGlvbl9FSkogaGVscGVyRnVuY3Rpb24pOwotICAgIAotICAgIHZvaWQgbm9uU3BlY3VsYXRpdmVQ
ZWVwaG9sZVN0cmljdEVxKE5vZGUmLCBOb2RlSW5kZXggYnJhbmNoTm9kZUluZGV4LCBib29sIGlu
dmVydCA9IGZhbHNlKTsKLSAgICB2b2lkIG5vblNwZWN1bGF0aXZlTm9uUGVlcGhvbGVTdHJpY3RF
cShOb2RlJiwgYm9vbCBpbnZlcnQgPSBmYWxzZSk7Ci0gICAgYm9vbCBub25TcGVjdWxhdGl2ZVN0
cmljdEVxKE5vZGUmLCBib29sIGludmVydCA9IGZhbHNlKTsKKyAgICB2b2lkIG5vblNwZWN1bGF0
aXZlUGVlcGhvbGVCcmFuY2goTm9kZSosIE5vZGUqIGJyYW5jaE5vZGUsIE1hY3JvQXNzZW1ibGVy
OjpSZWxhdGlvbmFsQ29uZGl0aW9uLCBTX0RGR09wZXJhdGlvbl9FSkogaGVscGVyRnVuY3Rpb24p
OworICAgIHZvaWQgbm9uU3BlY3VsYXRpdmVOb25QZWVwaG9sZUNvbXBhcmUoTm9kZSosIE1hY3Jv
QXNzZW1ibGVyOjpSZWxhdGlvbmFsQ29uZGl0aW9uLCBTX0RGR09wZXJhdGlvbl9FSkogaGVscGVy
RnVuY3Rpb24pOworICAgIGJvb2wgbm9uU3BlY3VsYXRpdmVDb21wYXJlKE5vZGUqLCBNYWNyb0Fz
c2VtYmxlcjo6UmVsYXRpb25hbENvbmRpdGlvbiwgU19ERkdPcGVyYXRpb25fRUpKIGhlbHBlckZ1
bmN0aW9uKTsKKyAgICAKKyAgICB2b2lkIG5vblNwZWN1bGF0aXZlUGVlcGhvbGVTdHJpY3RFcShO
b2RlKiwgTm9kZSogYnJhbmNoTm9kZSwgYm9vbCBpbnZlcnQgPSBmYWxzZSk7CisgICAgdm9pZCBu
b25TcGVjdWxhdGl2ZU5vblBlZXBob2xlU3RyaWN0RXEoTm9kZSosIGJvb2wgaW52ZXJ0ID0gZmFs
c2UpOworICAgIGJvb2wgbm9uU3BlY3VsYXRpdmVTdHJpY3RFcShOb2RlKiwgYm9vbCBpbnZlcnQg
PSBmYWxzZSk7CiAgICAgCi0gICAgdm9pZCBjb21waWxlSW5zdGFuY2VPZkZvck9iamVjdChOb2Rl
JiwgR1BSUmVnIHZhbHVlUmVnLCBHUFJSZWcgcHJvdG90eXBlUmVnLCBHUFJSZWcgc2NyYXRjaEFu
ZFJlc3VsdFJlZyk7Ci0gICAgdm9pZCBjb21waWxlSW5zdGFuY2VPZihOb2RlJik7CisgICAgdm9p
ZCBjb21waWxlSW5zdGFuY2VPZkZvck9iamVjdChOb2RlKiwgR1BSUmVnIHZhbHVlUmVnLCBHUFJS
ZWcgcHJvdG90eXBlUmVnLCBHUFJSZWcgc2NyYXRjaEFuZFJlc3VsdFJlZyk7CisgICAgdm9pZCBj
b21waWxlSW5zdGFuY2VPZihOb2RlKik7CiAgICAgCiAgICAgLy8gQWNjZXNzIHRvIG91ciBmaXhl
ZCBjYWxsZWUgQ2FsbEZyYW1lLgogICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzIGNhbGxGcmFt
ZVNsb3QoaW50IHNsb3QpCkBAIC03NzQsMTM3ICs3NjQsMTI4IEBAIHB1YmxpYzoKICAgICAgICAg
cmV0dXJuIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVy
LCAobV9qaXQuY29kZUJsb2NrKCktPm1fbnVtQ2FsbGVlUmVnaXN0ZXJzICsgYXJndW1lbnRUb09w
ZXJhbmQoYXJndW1lbnQpKSAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkgKyBP
QkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnBheWxvYWQpKTsK
ICAgICB9CiAKLSAgICB2b2lkIGVtaXRDYWxsKE5vZGUmKTsKKyAgICB2b2lkIGVtaXRDYWxsKE5v
ZGUqKTsKICAgICAKICAgICAvLyBDYWxsZWQgb25jZSBhIG5vZGUgaGFzIGNvbXBsZXRlZCBjb2Rl
IGdlbmVyYXRpb24gYnV0IHByaW9yIHRvIHNldHRpbmcKICAgICAvLyBpdHMgcmVzdWx0LCB0byBm
cmVlIHVwIGl0cyBjaGlsZHJlbi4gKFRoaXMgbXVzdCBoYXBwZW4gcHJpb3IgdG8gc2V0dGluZwog
ICAgIC8vIHRoZSBub2RlcyByZXN1bHQsIHNpbmNlIHRoZSBub2RlIG1heSBoYXZlIHRoZSBzYW1l
IFZpcnR1YWxSZWdpc3RlciBhcwogICAgIC8vIGEgY2hpbGQsIGFuZCBhcyBzdWNoIHdpbGwgdXNl
IHRoZSBzYW1lIEdlbmVyYXRpb0luZm8pLgotICAgIHZvaWQgdXNlQ2hpbGRyZW4oTm9kZSYpOwor
ICAgIHZvaWQgdXNlQ2hpbGRyZW4oTm9kZSopOwogCiAgICAgLy8gVGhlc2UgbWV0aG9kIGNhbGxl
ZCB0byBpbml0aWFsaXplIHRoZSB0aGUgR2VuZXJhdGlvbkluZm8KICAgICAvLyB0byBkZXNjcmli
ZSB0aGUgcmVzdWx0IG9mIGFuIG9wZXJhdGlvbi4KLSAgICB2b2lkIGludGVnZXJSZXN1bHQoR1BS
UmVnIHJlZywgTm9kZUluZGV4IG5vZGVJbmRleCwgRGF0YUZvcm1hdCBmb3JtYXQgPSBEYXRhRm9y
bWF0SW50ZWdlciwgVXNlQ2hpbGRyZW5Nb2RlIG1vZGUgPSBDYWxsVXNlQ2hpbGRyZW4pCisgICAg
dm9pZCBpbnRlZ2VyUmVzdWx0KEdQUlJlZyByZWcsIE5vZGUqIG5vZGUsIERhdGFGb3JtYXQgZm9y
bWF0ID0gRGF0YUZvcm1hdEludGVnZXIsIFVzZUNoaWxkcmVuTW9kZSBtb2RlID0gQ2FsbFVzZUNo
aWxkcmVuKQogICAgIHsKLSAgICAgICAgTm9kZSYgbm9kZSA9IGF0KG5vZGVJbmRleCk7CiAgICAg
ICAgIGlmIChtb2RlID09IENhbGxVc2VDaGlsZHJlbikKICAgICAgICAgICAgIHVzZUNoaWxkcmVu
KG5vZGUpOwogCi0gICAgICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIgPSBub2Rl
LnZpcnR1YWxSZWdpc3RlcigpOworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lz
dGVyID0gbm9kZS0+dmlydHVhbFJlZ2lzdGVyKCk7CiAgICAgICAgIEdlbmVyYXRpb25JbmZvJiBp
bmZvID0gbV9nZW5lcmF0aW9uSW5mb1t2aXJ0dWFsUmVnaXN0ZXJdOwogCiAgICAgICAgIGlmIChm
b3JtYXQgPT0gRGF0YUZvcm1hdEludGVnZXIpIHsKICAgICAgICAgICAgIG1faml0LmppdEFzc2Vy
dElzSW50MzIocmVnKTsKICAgICAgICAgICAgIG1fZ3Bycy5yZXRhaW4ocmVnLCB2aXJ0dWFsUmVn
aXN0ZXIsIFNwaWxsT3JkZXJJbnRlZ2VyKTsKLSAgICAgICAgICAgIGluZm8uaW5pdEludGVnZXIo
bm9kZUluZGV4LCBub2RlLnJlZkNvdW50KCksIHJlZyk7CisgICAgICAgICAgICBpbmZvLmluaXRJ
bnRlZ2VyKG5vZGUsIG5vZGUtPnJlZkNvdW50KCksIHJlZyk7CiAgICAgICAgIH0gZWxzZSB7CiAj
aWYgVVNFKEpTVkFMVUU2NCkKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGZvcm1hdCA9PSBE
YXRhRm9ybWF0SlNJbnRlZ2VyKTsKICAgICAgICAgICAgIG1faml0LmppdEFzc2VydElzSlNJbnQz
MihyZWcpOwogICAgICAgICAgICAgbV9ncHJzLnJldGFpbihyZWcsIHZpcnR1YWxSZWdpc3Rlciwg
U3BpbGxPcmRlckpTKTsKLSAgICAgICAgICAgIGluZm8uaW5pdEpTVmFsdWUobm9kZUluZGV4LCBu
b2RlLnJlZkNvdW50KCksIHJlZywgZm9ybWF0KTsKKyAgICAgICAgICAgIGluZm8uaW5pdEpTVmFs
dWUobm9kZSwgbm9kZS0+cmVmQ291bnQoKSwgcmVnLCBmb3JtYXQpOwogI2VsaWYgVVNFKEpTVkFM
VUUzMl82NCkKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAjZW5k
aWYKICAgICAgICAgfQogICAgIH0KLSAgICB2b2lkIGludGVnZXJSZXN1bHQoR1BSUmVnIHJlZywg
Tm9kZUluZGV4IG5vZGVJbmRleCwgVXNlQ2hpbGRyZW5Nb2RlIG1vZGUpCisgICAgdm9pZCBpbnRl
Z2VyUmVzdWx0KEdQUlJlZyByZWcsIE5vZGUqIG5vZGUsIFVzZUNoaWxkcmVuTW9kZSBtb2RlKQog
ICAgIHsKLSAgICAgICAgaW50ZWdlclJlc3VsdChyZWcsIG5vZGVJbmRleCwgRGF0YUZvcm1hdElu
dGVnZXIsIG1vZGUpOworICAgICAgICBpbnRlZ2VyUmVzdWx0KHJlZywgbm9kZSwgRGF0YUZvcm1h
dEludGVnZXIsIG1vZGUpOwogICAgIH0KLSAgICB2b2lkIG5vUmVzdWx0KE5vZGVJbmRleCBub2Rl
SW5kZXgsIFVzZUNoaWxkcmVuTW9kZSBtb2RlID0gQ2FsbFVzZUNoaWxkcmVuKQorICAgIHZvaWQg
bm9SZXN1bHQoTm9kZSogbm9kZSwgVXNlQ2hpbGRyZW5Nb2RlIG1vZGUgPSBDYWxsVXNlQ2hpbGRy
ZW4pCiAgICAgewogICAgICAgICBpZiAobW9kZSA9PSBVc2VDaGlsZHJlbkNhbGxlZEV4cGxpY2l0
bHkpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIE5vZGUmIG5vZGUgPSBhdChub2RlSW5k
ZXgpOwogICAgICAgICB1c2VDaGlsZHJlbihub2RlKTsKICAgICB9Ci0gICAgdm9pZCBjZWxsUmVz
dWx0KEdQUlJlZyByZWcsIE5vZGVJbmRleCBub2RlSW5kZXgsIFVzZUNoaWxkcmVuTW9kZSBtb2Rl
ID0gQ2FsbFVzZUNoaWxkcmVuKQorICAgIHZvaWQgY2VsbFJlc3VsdChHUFJSZWcgcmVnLCBOb2Rl
KiBub2RlLCBVc2VDaGlsZHJlbk1vZGUgbW9kZSA9IENhbGxVc2VDaGlsZHJlbikKICAgICB7Ci0g
ICAgICAgIE5vZGUmIG5vZGUgPSBhdChub2RlSW5kZXgpOwogICAgICAgICBpZiAobW9kZSA9PSBD
YWxsVXNlQ2hpbGRyZW4pCiAgICAgICAgICAgICB1c2VDaGlsZHJlbihub2RlKTsKIAotICAgICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyID0gbm9kZS52aXJ0dWFsUmVnaXN0ZXIo
KTsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciA9IG5vZGUtPnZpcnR1
YWxSZWdpc3RlcigpOwogICAgICAgICBtX2dwcnMucmV0YWluKHJlZywgdmlydHVhbFJlZ2lzdGVy
LCBTcGlsbE9yZGVyQ2VsbCk7CiAgICAgICAgIEdlbmVyYXRpb25JbmZvJiBpbmZvID0gbV9nZW5l
cmF0aW9uSW5mb1t2aXJ0dWFsUmVnaXN0ZXJdOwotICAgICAgICBpbmZvLmluaXRDZWxsKG5vZGVJ
bmRleCwgbm9kZS5yZWZDb3VudCgpLCByZWcpOworICAgICAgICBpbmZvLmluaXRDZWxsKG5vZGUs
IG5vZGUtPnJlZkNvdW50KCksIHJlZyk7CiAgICAgfQotICAgIHZvaWQgYm9vbGVhblJlc3VsdChH
UFJSZWcgcmVnLCBOb2RlSW5kZXggbm9kZUluZGV4LCBVc2VDaGlsZHJlbk1vZGUgbW9kZSA9IENh
bGxVc2VDaGlsZHJlbikKKyAgICB2b2lkIGJvb2xlYW5SZXN1bHQoR1BSUmVnIHJlZywgTm9kZSog
bm9kZSwgVXNlQ2hpbGRyZW5Nb2RlIG1vZGUgPSBDYWxsVXNlQ2hpbGRyZW4pCiAgICAgewotICAg
ICAgICBOb2RlJiBub2RlID0gYXQobm9kZUluZGV4KTsKICAgICAgICAgaWYgKG1vZGUgPT0gQ2Fs
bFVzZUNoaWxkcmVuKQogICAgICAgICAgICAgdXNlQ2hpbGRyZW4obm9kZSk7CiAKLSAgICAgICAg
VmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciA9IG5vZGUudmlydHVhbFJlZ2lzdGVyKCk7
CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIgPSBub2RlLT52aXJ0dWFs
UmVnaXN0ZXIoKTsKICAgICAgICAgbV9ncHJzLnJldGFpbihyZWcsIHZpcnR1YWxSZWdpc3Rlciwg
U3BpbGxPcmRlckJvb2xlYW4pOwogICAgICAgICBHZW5lcmF0aW9uSW5mbyYgaW5mbyA9IG1fZ2Vu
ZXJhdGlvbkluZm9bdmlydHVhbFJlZ2lzdGVyXTsKLSAgICAgICAgaW5mby5pbml0Qm9vbGVhbihu
b2RlSW5kZXgsIG5vZGUucmVmQ291bnQoKSwgcmVnKTsKKyAgICAgICAgaW5mby5pbml0Qm9vbGVh
bihub2RlLCBub2RlLT5yZWZDb3VudCgpLCByZWcpOwogICAgIH0KICNpZiBVU0UoSlNWQUxVRTY0
KQotICAgIHZvaWQganNWYWx1ZVJlc3VsdChHUFJSZWcgcmVnLCBOb2RlSW5kZXggbm9kZUluZGV4
LCBEYXRhRm9ybWF0IGZvcm1hdCA9IERhdGFGb3JtYXRKUywgVXNlQ2hpbGRyZW5Nb2RlIG1vZGUg
PSBDYWxsVXNlQ2hpbGRyZW4pCisgICAgdm9pZCBqc1ZhbHVlUmVzdWx0KEdQUlJlZyByZWcsIE5v
ZGUqIG5vZGUsIERhdGFGb3JtYXQgZm9ybWF0ID0gRGF0YUZvcm1hdEpTLCBVc2VDaGlsZHJlbk1v
ZGUgbW9kZSA9IENhbGxVc2VDaGlsZHJlbikKICAgICB7CiAgICAgICAgIGlmIChmb3JtYXQgPT0g
RGF0YUZvcm1hdEpTSW50ZWdlcikKICAgICAgICAgICAgIG1faml0LmppdEFzc2VydElzSlNJbnQz
MihyZWcpOwogICAgICAgICAKLSAgICAgICAgTm9kZSYgbm9kZSA9IGF0KG5vZGVJbmRleCk7CiAg
ICAgICAgIGlmIChtb2RlID09IENhbGxVc2VDaGlsZHJlbikKICAgICAgICAgICAgIHVzZUNoaWxk
cmVuKG5vZGUpOwogCi0gICAgICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIgPSBu
b2RlLnZpcnR1YWxSZWdpc3RlcigpOworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJl
Z2lzdGVyID0gbm9kZS0+dmlydHVhbFJlZ2lzdGVyKCk7CiAgICAgICAgIG1fZ3Bycy5yZXRhaW4o
cmVnLCB2aXJ0dWFsUmVnaXN0ZXIsIFNwaWxsT3JkZXJKUyk7CiAgICAgICAgIEdlbmVyYXRpb25J
bmZvJiBpbmZvID0gbV9nZW5lcmF0aW9uSW5mb1t2aXJ0dWFsUmVnaXN0ZXJdOwotICAgICAgICBp
bmZvLmluaXRKU1ZhbHVlKG5vZGVJbmRleCwgbm9kZS5yZWZDb3VudCgpLCByZWcsIGZvcm1hdCk7
CisgICAgICAgIGluZm8uaW5pdEpTVmFsdWUobm9kZSwgbm9kZS0+cmVmQ291bnQoKSwgcmVnLCBm
b3JtYXQpOwogICAgIH0KLSAgICB2b2lkIGpzVmFsdWVSZXN1bHQoR1BSUmVnIHJlZywgTm9kZUlu
ZGV4IG5vZGVJbmRleCwgVXNlQ2hpbGRyZW5Nb2RlIG1vZGUpCisgICAgdm9pZCBqc1ZhbHVlUmVz
dWx0KEdQUlJlZyByZWcsIE5vZGUqIG5vZGUsIFVzZUNoaWxkcmVuTW9kZSBtb2RlKQogICAgIHsK
LSAgICAgICAganNWYWx1ZVJlc3VsdChyZWcsIG5vZGVJbmRleCwgRGF0YUZvcm1hdEpTLCBtb2Rl
KTsKKyAgICAgICAganNWYWx1ZVJlc3VsdChyZWcsIG5vZGUsIERhdGFGb3JtYXRKUywgbW9kZSk7
CiAgICAgfQogI2VsaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICB2b2lkIGpzVmFsdWVSZXN1bHQo
R1BSUmVnIHRhZywgR1BSUmVnIHBheWxvYWQsIE5vZGVJbmRleCBub2RlSW5kZXgsIERhdGFGb3Jt
YXQgZm9ybWF0ID0gRGF0YUZvcm1hdEpTLCBVc2VDaGlsZHJlbk1vZGUgbW9kZSA9IENhbGxVc2VD
aGlsZHJlbikKKyAgICB2b2lkIGpzVmFsdWVSZXN1bHQoR1BSUmVnIHRhZywgR1BSUmVnIHBheWxv
YWQsIE5vZGUqIG5vZGUsIERhdGFGb3JtYXQgZm9ybWF0ID0gRGF0YUZvcm1hdEpTLCBVc2VDaGls
ZHJlbk1vZGUgbW9kZSA9IENhbGxVc2VDaGlsZHJlbikKICAgICB7Ci0gICAgICAgIE5vZGUmIG5v
ZGUgPSBhdChub2RlSW5kZXgpOwogICAgICAgICBpZiAobW9kZSA9PSBDYWxsVXNlQ2hpbGRyZW4p
CiAgICAgICAgICAgICB1c2VDaGlsZHJlbihub2RlKTsKIAotICAgICAgICBWaXJ0dWFsUmVnaXN0
ZXIgdmlydHVhbFJlZ2lzdGVyID0gbm9kZS52aXJ0dWFsUmVnaXN0ZXIoKTsKKyAgICAgICAgVmly
dHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciA9IG5vZGUtPnZpcnR1YWxSZWdpc3RlcigpOwog
ICAgICAgICBtX2dwcnMucmV0YWluKHRhZywgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVySlMp
OwogICAgICAgICBtX2dwcnMucmV0YWluKHBheWxvYWQsIHZpcnR1YWxSZWdpc3RlciwgU3BpbGxP
cmRlckpTKTsKICAgICAgICAgR2VuZXJhdGlvbkluZm8mIGluZm8gPSBtX2dlbmVyYXRpb25JbmZv
W3ZpcnR1YWxSZWdpc3Rlcl07Ci0gICAgICAgIGluZm8uaW5pdEpTVmFsdWUobm9kZUluZGV4LCBu
b2RlLnJlZkNvdW50KCksIHRhZywgcGF5bG9hZCwgZm9ybWF0KTsKKyAgICAgICAgaW5mby5pbml0
SlNWYWx1ZShub2RlLCBub2RlLT5yZWZDb3VudCgpLCB0YWcsIHBheWxvYWQsIGZvcm1hdCk7CiAg
ICAgfQotICAgIHZvaWQganNWYWx1ZVJlc3VsdChHUFJSZWcgdGFnLCBHUFJSZWcgcGF5bG9hZCwg
Tm9kZUluZGV4IG5vZGVJbmRleCwgVXNlQ2hpbGRyZW5Nb2RlIG1vZGUpCisgICAgdm9pZCBqc1Zh
bHVlUmVzdWx0KEdQUlJlZyB0YWcsIEdQUlJlZyBwYXlsb2FkLCBOb2RlKiBub2RlLCBVc2VDaGls
ZHJlbk1vZGUgbW9kZSkKICAgICB7Ci0gICAgICAgIGpzVmFsdWVSZXN1bHQodGFnLCBwYXlsb2Fk
LCBub2RlSW5kZXgsIERhdGFGb3JtYXRKUywgbW9kZSk7CisgICAgICAgIGpzVmFsdWVSZXN1bHQo
dGFnLCBwYXlsb2FkLCBub2RlLCBEYXRhRm9ybWF0SlMsIG1vZGUpOwogICAgIH0KICNlbmRpZgot
ICAgIHZvaWQgc3RvcmFnZVJlc3VsdChHUFJSZWcgcmVnLCBOb2RlSW5kZXggbm9kZUluZGV4LCBV
c2VDaGlsZHJlbk1vZGUgbW9kZSA9IENhbGxVc2VDaGlsZHJlbikKKyAgICB2b2lkIHN0b3JhZ2VS
ZXN1bHQoR1BSUmVnIHJlZywgTm9kZSogbm9kZSwgVXNlQ2hpbGRyZW5Nb2RlIG1vZGUgPSBDYWxs
VXNlQ2hpbGRyZW4pCiAgICAgewotICAgICAgICBOb2RlJiBub2RlID0gYXQobm9kZUluZGV4KTsK
ICAgICAgICAgaWYgKG1vZGUgPT0gQ2FsbFVzZUNoaWxkcmVuKQogICAgICAgICAgICAgdXNlQ2hp
bGRyZW4obm9kZSk7CiAgICAgICAgIAotICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJl
Z2lzdGVyID0gbm9kZS52aXJ0dWFsUmVnaXN0ZXIoKTsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVy
IHZpcnR1YWxSZWdpc3RlciA9IG5vZGUtPnZpcnR1YWxSZWdpc3RlcigpOwogICAgICAgICBtX2dw
cnMucmV0YWluKHJlZywgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVyU3RvcmFnZSk7CiAgICAg
ICAgIEdlbmVyYXRpb25JbmZvJiBpbmZvID0gbV9nZW5lcmF0aW9uSW5mb1t2aXJ0dWFsUmVnaXN0
ZXJdOwotICAgICAgICBpbmZvLmluaXRTdG9yYWdlKG5vZGVJbmRleCwgbm9kZS5yZWZDb3VudCgp
LCByZWcpOworICAgICAgICBpbmZvLmluaXRTdG9yYWdlKG5vZGUsIG5vZGUtPnJlZkNvdW50KCks
IHJlZyk7CiAgICAgfQotICAgIHZvaWQgZG91YmxlUmVzdWx0KEZQUlJlZyByZWcsIE5vZGVJbmRl
eCBub2RlSW5kZXgsIFVzZUNoaWxkcmVuTW9kZSBtb2RlID0gQ2FsbFVzZUNoaWxkcmVuKQorICAg
IHZvaWQgZG91YmxlUmVzdWx0KEZQUlJlZyByZWcsIE5vZGUqIG5vZGUsIFVzZUNoaWxkcmVuTW9k
ZSBtb2RlID0gQ2FsbFVzZUNoaWxkcmVuKQogICAgIHsKLSAgICAgICAgTm9kZSYgbm9kZSA9IGF0
KG5vZGVJbmRleCk7CiAgICAgICAgIGlmIChtb2RlID09IENhbGxVc2VDaGlsZHJlbikKICAgICAg
ICAgICAgIHVzZUNoaWxkcmVuKG5vZGUpOwogCi0gICAgICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0
dWFsUmVnaXN0ZXIgPSBub2RlLnZpcnR1YWxSZWdpc3RlcigpOworICAgICAgICBWaXJ0dWFsUmVn
aXN0ZXIgdmlydHVhbFJlZ2lzdGVyID0gbm9kZS0+dmlydHVhbFJlZ2lzdGVyKCk7CiAgICAgICAg
IG1fZnBycy5yZXRhaW4ocmVnLCB2aXJ0dWFsUmVnaXN0ZXIsIFNwaWxsT3JkZXJEb3VibGUpOwog
ICAgICAgICBHZW5lcmF0aW9uSW5mbyYgaW5mbyA9IG1fZ2VuZXJhdGlvbkluZm9bdmlydHVhbFJl
Z2lzdGVyXTsKLSAgICAgICAgaW5mby5pbml0RG91YmxlKG5vZGVJbmRleCwgbm9kZS5yZWZDb3Vu
dCgpLCByZWcpOworICAgICAgICBpbmZvLmluaXREb3VibGUobm9kZSwgbm9kZS0+cmVmQ291bnQo
KSwgcmVnKTsKICAgICB9Ci0gICAgdm9pZCBpbml0Q29uc3RhbnRJbmZvKE5vZGVJbmRleCBub2Rl
SW5kZXgpCisgICAgdm9pZCBpbml0Q29uc3RhbnRJbmZvKE5vZGUqIG5vZGUpCiAgICAgewotICAg
ICAgICBBU1NFUlQoaXNJbnQzMkNvbnN0YW50KG5vZGVJbmRleCkgfHwgaXNOdW1iZXJDb25zdGFu
dChub2RlSW5kZXgpIHx8IGlzSlNDb25zdGFudChub2RlSW5kZXgpKTsKLSAgICAgICAgTm9kZSYg
bm9kZSA9IGF0KG5vZGVJbmRleCk7Ci0gICAgICAgIG1fZ2VuZXJhdGlvbkluZm9bbm9kZS52aXJ0
dWFsUmVnaXN0ZXIoKV0uaW5pdENvbnN0YW50KG5vZGVJbmRleCwgbm9kZS5yZWZDb3VudCgpKTsK
KyAgICAgICAgQVNTRVJUKGlzSW50MzJDb25zdGFudChub2RlKSB8fCBpc051bWJlckNvbnN0YW50
KG5vZGUpIHx8IGlzSlNDb25zdGFudChub2RlKSk7CisgICAgICAgIG1fZ2VuZXJhdGlvbkluZm9b
bm9kZS0+dmlydHVhbFJlZ2lzdGVyKCldLmluaXRDb25zdGFudChub2RlLCBub2RlLT5yZWZDb3Vu
dCgpKTsKICAgICB9CiAgICAgCiAgICAgLy8gVGhlc2UgbWV0aG9kcyBhZGQgY2FsbHMgdG8gQysr
IGhlbHBlciBmdW5jdGlvbnMuCkBAIC0xNzUyLDcgKzE3MzMsNyBAQCBwdWJsaWM6CiAgICAgSklU
Q29tcGlsZXI6OkNhbGwgYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhjb25zdCBGdW5jdGlv
blB0ciYgZnVuY3Rpb24pCiAgICAgewogICAgICAgICBwcmVwYXJlRm9yRXh0ZXJuYWxDYWxsKCk7
Ci0gICAgICAgIENvZGVPcmlnaW4gY29kZU9yaWdpbiA9IGF0KG1fY29tcGlsZUluZGV4KS5jb2Rl
T3JpZ2luOworICAgICAgICBDb2RlT3JpZ2luIGNvZGVPcmlnaW4gPSBtX2N1cnJlbnROb2RlLT5j
b2RlT3JpZ2luOwogICAgICAgICBDYWxsQmVnaW5Ub2tlbiB0b2tlbjsKICAgICAgICAgbV9qaXQu
YmVnaW5DYWxsKGNvZGVPcmlnaW4sIHRva2VuKTsKICAgICAgICAgSklUQ29tcGlsZXI6OkNhbGwg
Y2FsbCA9IG1faml0LmFwcGVuZENhbGwoZnVuY3Rpb24pOwpAQCAtMjAzOCw4OSArMjAxOSw4OCBA
QCBwdWJsaWM6CiAgICAgdm9pZCBjaGVja0NvbnNpc3RlbmN5KCkgeyB9CiAjZW5kaWYKIAotICAg
IGJvb2wgaXNJbnRlZ2VyKE5vZGVJbmRleCBub2RlSW5kZXgpCisgICAgYm9vbCBpc0ludGVnZXIo
Tm9kZSogbm9kZSkKICAgICB7Ci0gICAgICAgIE5vZGUmIG5vZGUgPSBhdChub2RlSW5kZXgpOwot
ICAgICAgICBpZiAobm9kZS5oYXNJbnQzMlJlc3VsdCgpKQorICAgICAgICBpZiAobm9kZS0+aGFz
SW50MzJSZXN1bHQoKSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgICAgIGlmIChp
c0ludDMyQ29uc3RhbnQobm9kZUluZGV4KSkKKyAgICAgICAgaWYgKGlzSW50MzJDb25zdGFudChu
b2RlKSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgICAgIFZpcnR1YWxSZWdpc3Rl
ciB2aXJ0dWFsUmVnaXN0ZXIgPSBub2RlLnZpcnR1YWxSZWdpc3RlcigpOworICAgICAgICBWaXJ0
dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyID0gbm9kZS0+dmlydHVhbFJlZ2lzdGVyKCk7CiAg
ICAgICAgIEdlbmVyYXRpb25JbmZvJiBpbmZvID0gbV9nZW5lcmF0aW9uSW5mb1t2aXJ0dWFsUmVn
aXN0ZXJdOwogICAgICAgICAKICAgICAgICAgcmV0dXJuIGluZm8uaXNKU0ludGVnZXIoKTsKICAg
ICB9CiAgICAgCi0gICAgYm9vbCBjb21wYXJlKE5vZGUmLCBNYWNyb0Fzc2VtYmxlcjo6UmVsYXRp
b25hbENvbmRpdGlvbiwgTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUNvbmRpdGlvbiwgU19ERkdPcGVy
YXRpb25fRUpKKTsKLSAgICBib29sIGNvbXBpbGVQZWVwSG9sZUJyYW5jaChOb2RlJiwgTWFjcm9B
c3NlbWJsZXI6OlJlbGF0aW9uYWxDb25kaXRpb24sIE1hY3JvQXNzZW1ibGVyOjpEb3VibGVDb25k
aXRpb24sIFNfREZHT3BlcmF0aW9uX0VKSik7Ci0gICAgdm9pZCBjb21waWxlUGVlcEhvbGVJbnRl
Z2VyQnJhbmNoKE5vZGUmLCBOb2RlSW5kZXggYnJhbmNoTm9kZUluZGV4LCBKSVRDb21waWxlcjo6
UmVsYXRpb25hbENvbmRpdGlvbik7Ci0gICAgdm9pZCBjb21waWxlUGVlcEhvbGVEb3VibGVCcmFu
Y2goTm9kZSYsIE5vZGVJbmRleCBicmFuY2hOb2RlSW5kZXgsIEpJVENvbXBpbGVyOjpEb3VibGVD
b25kaXRpb24pOwotICAgIHZvaWQgY29tcGlsZVBlZXBIb2xlT2JqZWN0RXF1YWxpdHkoTm9kZSYs
IE5vZGVJbmRleCBicmFuY2hOb2RlSW5kZXgpOwotICAgIHZvaWQgY29tcGlsZVBlZXBIb2xlT2Jq
ZWN0VG9PYmplY3RPck90aGVyRXF1YWxpdHkoRWRnZSBsZWZ0Q2hpbGQsIEVkZ2UgcmlnaHRDaGls
ZCwgTm9kZUluZGV4IGJyYW5jaE5vZGVJbmRleCk7Ci0gICAgdm9pZCBjb21waWxlT2JqZWN0RXF1
YWxpdHkoTm9kZSYpOworICAgIGJvb2wgY29tcGFyZShOb2RlKiwgTWFjcm9Bc3NlbWJsZXI6OlJl
bGF0aW9uYWxDb25kaXRpb24sIE1hY3JvQXNzZW1ibGVyOjpEb3VibGVDb25kaXRpb24sIFNfREZH
T3BlcmF0aW9uX0VKSik7CisgICAgYm9vbCBjb21waWxlUGVlcEhvbGVCcmFuY2goTm9kZSosIE1h
Y3JvQXNzZW1ibGVyOjpSZWxhdGlvbmFsQ29uZGl0aW9uLCBNYWNyb0Fzc2VtYmxlcjo6RG91Ymxl
Q29uZGl0aW9uLCBTX0RGR09wZXJhdGlvbl9FSkopOworICAgIHZvaWQgY29tcGlsZVBlZXBIb2xl
SW50ZWdlckJyYW5jaChOb2RlKiwgTm9kZSogYnJhbmNoTm9kZSwgSklUQ29tcGlsZXI6OlJlbGF0
aW9uYWxDb25kaXRpb24pOworICAgIHZvaWQgY29tcGlsZVBlZXBIb2xlRG91YmxlQnJhbmNoKE5v
ZGUqLCBOb2RlKiBicmFuY2hOb2RlLCBKSVRDb21waWxlcjo6RG91YmxlQ29uZGl0aW9uKTsKKyAg
ICB2b2lkIGNvbXBpbGVQZWVwSG9sZU9iamVjdEVxdWFsaXR5KE5vZGUqLCBOb2RlKiBicmFuY2hO
b2RlKTsKKyAgICB2b2lkIGNvbXBpbGVQZWVwSG9sZU9iamVjdFRvT2JqZWN0T3JPdGhlckVxdWFs
aXR5KEVkZ2UgbGVmdENoaWxkLCBFZGdlIHJpZ2h0Q2hpbGQsIE5vZGUqIGJyYW5jaE5vZGUpOwor
ICAgIHZvaWQgY29tcGlsZU9iamVjdEVxdWFsaXR5KE5vZGUqKTsKICAgICB2b2lkIGNvbXBpbGVP
YmplY3RUb09iamVjdE9yT3RoZXJFcXVhbGl0eShFZGdlIGxlZnRDaGlsZCwgRWRnZSByaWdodENo
aWxkKTsKLSAgICB2b2lkIGNvbXBpbGVWYWx1ZUFkZChOb2RlJik7CisgICAgdm9pZCBjb21waWxl
VmFsdWVBZGQoTm9kZSopOwogICAgIHZvaWQgY29tcGlsZU5vblN0cmluZ0NlbGxPck90aGVyTG9n
aWNhbE5vdChFZGdlIHZhbHVlLCBib29sIG5lZWRTcGVjdWxhdGlvbkNoZWNrKTsKLSAgICB2b2lk
IGNvbXBpbGVMb2dpY2FsTm90KE5vZGUmKTsKKyAgICB2b2lkIGNvbXBpbGVMb2dpY2FsTm90KE5v
ZGUqKTsKICAgICB2b2lkIGVtaXROb25TdHJpbmdDZWxsT3JPdGhlckJyYW5jaChFZGdlIHZhbHVl
LCBCbG9ja0luZGV4IHRha2VuLCBCbG9ja0luZGV4IG5vdFRha2VuLCBib29sIG5lZWRTcGVjdWxh
dGlvbkNoZWNrKTsKLSAgICB2b2lkIGVtaXRCcmFuY2goTm9kZSYpOworICAgIHZvaWQgZW1pdEJy
YW5jaChOb2RlKik7CiAgICAgCi0gICAgdm9pZCBjb21waWxlSW50ZWdlckNvbXBhcmUoTm9kZSYs
IE1hY3JvQXNzZW1ibGVyOjpSZWxhdGlvbmFsQ29uZGl0aW9uKTsKLSAgICB2b2lkIGNvbXBpbGVE
b3VibGVDb21wYXJlKE5vZGUmLCBNYWNyb0Fzc2VtYmxlcjo6RG91YmxlQ29uZGl0aW9uKTsKKyAg
ICB2b2lkIGNvbXBpbGVJbnRlZ2VyQ29tcGFyZShOb2RlKiwgTWFjcm9Bc3NlbWJsZXI6OlJlbGF0
aW9uYWxDb25kaXRpb24pOworICAgIHZvaWQgY29tcGlsZURvdWJsZUNvbXBhcmUoTm9kZSosIE1h
Y3JvQXNzZW1ibGVyOjpEb3VibGVDb25kaXRpb24pOwogICAgIAotICAgIGJvb2wgY29tcGlsZVN0
cmljdEVxRm9yQ29uc3RhbnQoTm9kZSYsIEVkZ2UgdmFsdWUsIEpTVmFsdWUgY29uc3RhbnQpOwor
ICAgIGJvb2wgY29tcGlsZVN0cmljdEVxRm9yQ29uc3RhbnQoTm9kZSosIEVkZ2UgdmFsdWUsIEpT
VmFsdWUgY29uc3RhbnQpOwogICAgIAotICAgIGJvb2wgY29tcGlsZVN0cmljdEVxKE5vZGUmKTsK
KyAgICBib29sIGNvbXBpbGVTdHJpY3RFcShOb2RlKik7CiAgICAgCi0gICAgdm9pZCBjb21waWxl
QWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UoTm9kZSYpOwotICAgIHZvaWQgY29tcGlsZVJlYWxsb2Nh
dGVQcm9wZXJ0eVN0b3JhZ2UoTm9kZSYpOworICAgIHZvaWQgY29tcGlsZUFsbG9jYXRlUHJvcGVy
dHlTdG9yYWdlKE5vZGUqKTsKKyAgICB2b2lkIGNvbXBpbGVSZWFsbG9jYXRlUHJvcGVydHlTdG9y
YWdlKE5vZGUqKTsKICAgICAKICNpZiBVU0UoSlNWQUxVRTMyXzY0KQogICAgIHRlbXBsYXRlPHR5
cGVuYW1lIEJhc2VPcGVyYW5kVHlwZSwgdHlwZW5hbWUgUHJvcGVydHlPcGVyYW5kVHlwZSwgdHlw
ZW5hbWUgVmFsdWVPcGVyYW5kVHlwZSwgdHlwZW5hbWUgVGFnVHlwZT4KLSAgICB2b2lkIGNvbXBp
bGVDb250aWd1b3VzUHV0QnlWYWwoTm9kZSYsIEJhc2VPcGVyYW5kVHlwZSYsIFByb3BlcnR5T3Bl
cmFuZFR5cGUmLCBWYWx1ZU9wZXJhbmRUeXBlJiwgR1BSUmVnIHZhbHVlUGF5bG9hZFJlZywgVGFn
VHlwZSB2YWx1ZVRhZyk7CisgICAgdm9pZCBjb21waWxlQ29udGlndW91c1B1dEJ5VmFsKE5vZGUq
LCBCYXNlT3BlcmFuZFR5cGUmLCBQcm9wZXJ0eU9wZXJhbmRUeXBlJiwgVmFsdWVPcGVyYW5kVHlw
ZSYsIEdQUlJlZyB2YWx1ZVBheWxvYWRSZWcsIFRhZ1R5cGUgdmFsdWVUYWcpOwogI2VuZGlmCi0g
ICAgdm9pZCBjb21waWxlRG91YmxlUHV0QnlWYWwoTm9kZSYsIFNwZWN1bGF0ZUNlbGxPcGVyYW5k
JiBiYXNlLCBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQmIHByb3BlcnR5KTsKKyAgICB2b2lk
IGNvbXBpbGVEb3VibGVQdXRCeVZhbChOb2RlKiwgU3BlY3VsYXRlQ2VsbE9wZXJhbmQmIGJhc2Us
IFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCYgcHJvcGVydHkpOwogICAgIGJvb2wgcHV0QnlW
YWxXaWxsTmVlZEV4dHJhUmVnaXN0ZXIoQXJyYXlNb2RlIGFycmF5TW9kZSkKICAgICB7CiAgICAg
ICAgIHJldHVybiBhcnJheU1vZGUubWF5U3RvcmVUb0hvbGUoKTsKICAgICB9CiAgICAgR1BSUmVn
IHRlbXBvcmFyeVJlZ2lzdGVyRm9yUHV0QnlWYWwoR1BSVGVtcG9yYXJ5JiwgQXJyYXlNb2RlKTsK
LSAgICBHUFJSZWcgdGVtcG9yYXJ5UmVnaXN0ZXJGb3JQdXRCeVZhbChHUFJUZW1wb3JhcnkmIHRl
bXBvcmFyeSwgTm9kZSYgbm9kZSkKKyAgICBHUFJSZWcgdGVtcG9yYXJ5UmVnaXN0ZXJGb3JQdXRC
eVZhbChHUFJUZW1wb3JhcnkmIHRlbXBvcmFyeSwgTm9kZSogbm9kZSkKICAgICB7Ci0gICAgICAg
IHJldHVybiB0ZW1wb3JhcnlSZWdpc3RlckZvclB1dEJ5VmFsKHRlbXBvcmFyeSwgbm9kZS5hcnJh
eU1vZGUoKSk7CisgICAgICAgIHJldHVybiB0ZW1wb3JhcnlSZWdpc3RlckZvclB1dEJ5VmFsKHRl
bXBvcmFyeSwgbm9kZS0+YXJyYXlNb2RlKCkpOwogICAgIH0KICAgICAKLSAgICB2b2lkIGNvbXBp
bGVHZXRDaGFyQ29kZUF0KE5vZGUmKTsKLSAgICB2b2lkIGNvbXBpbGVHZXRCeVZhbE9uU3RyaW5n
KE5vZGUmKTsKKyAgICB2b2lkIGNvbXBpbGVHZXRDaGFyQ29kZUF0KE5vZGUqKTsKKyAgICB2b2lk
IGNvbXBpbGVHZXRCeVZhbE9uU3RyaW5nKE5vZGUqKTsKIAotICAgIHZvaWQgY29tcGlsZUdldEJ5
VmFsT25Bcmd1bWVudHMoTm9kZSYpOwotICAgIHZvaWQgY29tcGlsZUdldEFyZ3VtZW50c0xlbmd0
aChOb2RlJik7CisgICAgdm9pZCBjb21waWxlR2V0QnlWYWxPbkFyZ3VtZW50cyhOb2RlKik7Cisg
ICAgdm9pZCBjb21waWxlR2V0QXJndW1lbnRzTGVuZ3RoKE5vZGUqKTsKICAgICAKLSAgICB2b2lk
IGNvbXBpbGVHZXRBcnJheUxlbmd0aChOb2RlJik7CisgICAgdm9pZCBjb21waWxlR2V0QXJyYXlM
ZW5ndGgoTm9kZSopOwogICAgIAotICAgIHZvaWQgY29tcGlsZVZhbHVlVG9JbnQzMihOb2RlJik7
Ci0gICAgdm9pZCBjb21waWxlVUludDMyVG9OdW1iZXIoTm9kZSYpOwotICAgIHZvaWQgY29tcGls
ZURvdWJsZUFzSW50MzIoTm9kZSYpOwotICAgIHZvaWQgY29tcGlsZUludDMyVG9Eb3VibGUoTm9k
ZSYpOwotICAgIHZvaWQgY29tcGlsZUFkZChOb2RlJik7Ci0gICAgdm9pZCBjb21waWxlQXJpdGhT
dWIoTm9kZSYpOwotICAgIHZvaWQgY29tcGlsZUFyaXRoTmVnYXRlKE5vZGUmKTsKLSAgICB2b2lk
IGNvbXBpbGVBcml0aE11bChOb2RlJik7CisgICAgdm9pZCBjb21waWxlVmFsdWVUb0ludDMyKE5v
ZGUqKTsKKyAgICB2b2lkIGNvbXBpbGVVSW50MzJUb051bWJlcihOb2RlKik7CisgICAgdm9pZCBj
b21waWxlRG91YmxlQXNJbnQzMihOb2RlKik7CisgICAgdm9pZCBjb21waWxlSW50MzJUb0RvdWJs
ZShOb2RlKik7CisgICAgdm9pZCBjb21waWxlQWRkKE5vZGUqKTsKKyAgICB2b2lkIGNvbXBpbGVB
cml0aFN1YihOb2RlKik7CisgICAgdm9pZCBjb21waWxlQXJpdGhOZWdhdGUoTm9kZSopOworICAg
IHZvaWQgY29tcGlsZUFyaXRoTXVsKE5vZGUqKTsKICNpZiBDUFUoWDg2KSB8fCBDUFUoWDg2XzY0
KQotICAgIHZvaWQgY29tcGlsZUludGVnZXJBcml0aERpdkZvclg4NihOb2RlJik7CisgICAgdm9p
ZCBjb21waWxlSW50ZWdlckFyaXRoRGl2Rm9yWDg2KE5vZGUqKTsKICNlbmRpZgotICAgIHZvaWQg
Y29tcGlsZUFyaXRoTW9kKE5vZGUmKTsKLSAgICB2b2lkIGNvbXBpbGVTb2Z0TW9kdWxvKE5vZGUm
KTsKLSAgICB2b2lkIGNvbXBpbGVHZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlKE5vZGUmKTsKLSAg
ICB2b2lkIGNvbXBpbGVHZXRCeVZhbE9uSW50VHlwZWRBcnJheShjb25zdCBUeXBlZEFycmF5RGVz
Y3JpcHRvciYsIE5vZGUmLCBzaXplX3QgZWxlbWVudFNpemUsIFR5cGVkQXJyYXlTaWduZWRuZXNz
KTsKLSAgICB2b2lkIGNvbXBpbGVQdXRCeVZhbEZvckludFR5cGVkQXJyYXkoY29uc3QgVHlwZWRB
cnJheURlc2NyaXB0b3ImLCBHUFJSZWcgYmFzZSwgR1BSUmVnIHByb3BlcnR5LCBOb2RlJiwgc2l6
ZV90IGVsZW1lbnRTaXplLCBUeXBlZEFycmF5U2lnbmVkbmVzcywgVHlwZWRBcnJheVJvdW5kaW5n
ID0gVHJ1bmNhdGVSb3VuZGluZyk7Ci0gICAgdm9pZCBjb21waWxlR2V0QnlWYWxPbkZsb2F0VHlw
ZWRBcnJheShjb25zdCBUeXBlZEFycmF5RGVzY3JpcHRvciYsIE5vZGUmLCBzaXplX3QgZWxlbWVu
dFNpemUpOwotICAgIHZvaWQgY29tcGlsZVB1dEJ5VmFsRm9yRmxvYXRUeXBlZEFycmF5KGNvbnN0
IFR5cGVkQXJyYXlEZXNjcmlwdG9yJiwgR1BSUmVnIGJhc2UsIEdQUlJlZyBwcm9wZXJ0eSwgTm9k
ZSYsIHNpemVfdCBlbGVtZW50U2l6ZSk7Ci0gICAgdm9pZCBjb21waWxlTmV3RnVuY3Rpb25Ob0No
ZWNrKE5vZGUmKTsKLSAgICB2b2lkIGNvbXBpbGVOZXdGdW5jdGlvbkV4cHJlc3Npb24oTm9kZSYp
OwotICAgIGJvb2wgY29tcGlsZVJlZ0V4cEV4ZWMoTm9kZSYpOworICAgIHZvaWQgY29tcGlsZUFy
aXRoTW9kKE5vZGUqKTsKKyAgICB2b2lkIGNvbXBpbGVTb2Z0TW9kdWxvKE5vZGUqKTsKKyAgICB2
b2lkIGNvbXBpbGVHZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlKE5vZGUqKTsKKyAgICB2b2lkIGNv
bXBpbGVHZXRCeVZhbE9uSW50VHlwZWRBcnJheShjb25zdCBUeXBlZEFycmF5RGVzY3JpcHRvciYs
IE5vZGUqLCBzaXplX3QgZWxlbWVudFNpemUsIFR5cGVkQXJyYXlTaWduZWRuZXNzKTsKKyAgICB2
b2lkIGNvbXBpbGVQdXRCeVZhbEZvckludFR5cGVkQXJyYXkoY29uc3QgVHlwZWRBcnJheURlc2Ny
aXB0b3ImLCBHUFJSZWcgYmFzZSwgR1BSUmVnIHByb3BlcnR5LCBOb2RlKiwgc2l6ZV90IGVsZW1l
bnRTaXplLCBUeXBlZEFycmF5U2lnbmVkbmVzcywgVHlwZWRBcnJheVJvdW5kaW5nID0gVHJ1bmNh
dGVSb3VuZGluZyk7CisgICAgdm9pZCBjb21waWxlR2V0QnlWYWxPbkZsb2F0VHlwZWRBcnJheShj
b25zdCBUeXBlZEFycmF5RGVzY3JpcHRvciYsIE5vZGUqLCBzaXplX3QgZWxlbWVudFNpemUpOwor
ICAgIHZvaWQgY29tcGlsZVB1dEJ5VmFsRm9yRmxvYXRUeXBlZEFycmF5KGNvbnN0IFR5cGVkQXJy
YXlEZXNjcmlwdG9yJiwgR1BSUmVnIGJhc2UsIEdQUlJlZyBwcm9wZXJ0eSwgTm9kZSosIHNpemVf
dCBlbGVtZW50U2l6ZSk7CisgICAgdm9pZCBjb21waWxlTmV3RnVuY3Rpb25Ob0NoZWNrKE5vZGUq
KTsKKyAgICB2b2lkIGNvbXBpbGVOZXdGdW5jdGlvbkV4cHJlc3Npb24oTm9kZSopOworICAgIGJv
b2wgY29tcGlsZVJlZ0V4cEV4ZWMoTm9kZSopOwogICAgIAogICAgIC8vIHNpemUgY2FuIGJlIGFu
IGltbWVkaWF0ZSBvciBhIHJlZ2lzdGVyLCBhbmQgbXVzdCBiZSBpbiBieXRlcy4gSWYgc2l6ZSBp
cyBhIHJlZ2lzdGVyLAogICAgIC8vIGl0IG11c3QgYmUgYSBkaWZmZXJlbnQgcmVnaXN0ZXIgdGhh
biByZXN1bHRHUFIuIEVtaXRzIGNvZGUgdGhhdCBwbGFjZSBhIHBvaW50ZXIgdG8KQEAgLTIxMzIs
MTMgKzIxMTIsNiBAQCBwdWJsaWM6CiAgICAgICAgIAogICAgICAgICBtX2ppdC5sb2FkUHRyKCZj
b3BpZWRBbGxvY2F0b3ItPm1fY3VycmVudFJlbWFpbmluZywgcmVzdWx0R1BSKTsKICAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6Okp1bXAgc2xvd1BhdGggPSBtX2ppdC5icmFuY2hTdWJQdHIoSklUQ29t
cGlsZXI6OlNpZ25lZCwgc2l6ZSwgcmVzdWx0R1BSKTsKLSNpZiAwCi0gICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wIGRvbmUgPSBtX2ppdC5qdW1wKCk7Ci0gICAgICAgIHNsb3dQYXRoMS5saW5r
KCZtX2ppdCk7Ci0gICAgICAgIG1faml0LmJyZWFrcG9pbnQoKTsKLSAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6Okp1bXAgc2xvd1BhdGggPSBtX2ppdC5qdW1wKCk7Ci0gICAgICAgIGRvbmUubGluaygm
bV9qaXQpOwotI2VuZGlmCiAgICAgICAgIG1faml0LnN0b3JlUHRyKHJlc3VsdEdQUiwgJmNvcGll
ZEFsbG9jYXRvci0+bV9jdXJyZW50UmVtYWluaW5nKTsKICAgICAgICAgbV9qaXQubmVnUHRyKHJl
c3VsdEdQUik7CiAgICAgICAgIG1faml0LmFkZFB0cihKSVRDb21waWxlcjo6QWJzb2x1dGVBZGRy
ZXNzKCZjb3BpZWRBbGxvY2F0b3ItPm1fY3VycmVudFBheWxvYWRFbmQpLCByZXN1bHRHUFIpOwpA
QCAtMjE5MiwyMyArMjE2NSwyMyBAQCBwdWJsaWM6CiAjZW5kaWYKIAogICAgIC8vIEFkZCBhIHNw
ZWN1bGF0aW9uIGNoZWNrIHdpdGhvdXQgYWRkaXRpb25hbCByZWNvdmVyeS4KLSAgICB2b2lkIHNw
ZWN1bGF0aW9uQ2hlY2soRXhpdEtpbmQsIEpTVmFsdWVTb3VyY2UsIE5vZGVJbmRleCwgTWFjcm9B
c3NlbWJsZXI6Okp1bXAganVtcFRvRmFpbCk7CisgICAgdm9pZCBzcGVjdWxhdGlvbkNoZWNrKEV4
aXRLaW5kLCBKU1ZhbHVlU291cmNlLCBOb2RlKiwgTWFjcm9Bc3NlbWJsZXI6Okp1bXAganVtcFRv
RmFpbCk7CiAgICAgdm9pZCBzcGVjdWxhdGlvbkNoZWNrKEV4aXRLaW5kLCBKU1ZhbHVlU291cmNl
LCBFZGdlLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBqdW1wVG9GYWlsKTsKICAgICAvLyBBZGQgYSBz
cGVjdWxhdGlvbiBjaGVjayB3aXRob3V0IGFkZGl0aW9uYWwgcmVjb3ZlcnksIGFuZCB3aXRoIGEg
cHJvbWlzZSB0byBzdXBwbHkgYSBqdW1wIGxhdGVyLgotICAgIE9TUkV4aXRKdW1wUGxhY2Vob2xk
ZXIgc3BlY3VsYXRpb25DaGVjayhFeGl0S2luZCwgSlNWYWx1ZVNvdXJjZSwgTm9kZUluZGV4KTsK
KyAgICBPU1JFeGl0SnVtcFBsYWNlaG9sZGVyIHNwZWN1bGF0aW9uQ2hlY2soRXhpdEtpbmQsIEpT
VmFsdWVTb3VyY2UsIE5vZGUqKTsKICAgICBPU1JFeGl0SnVtcFBsYWNlaG9sZGVyIHNwZWN1bGF0
aW9uQ2hlY2soRXhpdEtpbmQsIEpTVmFsdWVTb3VyY2UsIEVkZ2UpOwogICAgIC8vIEFkZCBhIHNl
dCBvZiBzcGVjdWxhdGlvbiBjaGVja3Mgd2l0aG91dCBhZGRpdGlvbmFsIHJlY292ZXJ5LgotICAg
IHZvaWQgc3BlY3VsYXRpb25DaGVjayhFeGl0S2luZCwgSlNWYWx1ZVNvdXJjZSwgTm9kZUluZGV4
LCBjb25zdCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QmIGp1bXBzVG9GYWlsKTsKKyAgICB2b2lk
IHNwZWN1bGF0aW9uQ2hlY2soRXhpdEtpbmQsIEpTVmFsdWVTb3VyY2UsIE5vZGUqLCBjb25zdCBN
YWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QmIGp1bXBzVG9GYWlsKTsKICAgICB2b2lkIHNwZWN1bGF0
aW9uQ2hlY2soRXhpdEtpbmQsIEpTVmFsdWVTb3VyY2UsIEVkZ2UsIGNvbnN0IE1hY3JvQXNzZW1i
bGVyOjpKdW1wTGlzdCYganVtcHNUb0ZhaWwpOwogICAgIC8vIEFkZCBhIHNwZWN1bGF0aW9uIGNo
ZWNrIHdpdGggYWRkaXRpb25hbCByZWNvdmVyeS4KLSAgICB2b2lkIHNwZWN1bGF0aW9uQ2hlY2so
RXhpdEtpbmQsIEpTVmFsdWVTb3VyY2UsIE5vZGVJbmRleCwgTWFjcm9Bc3NlbWJsZXI6Okp1bXAg
anVtcFRvRmFpbCwgY29uc3QgU3BlY3VsYXRpb25SZWNvdmVyeSYpOworICAgIHZvaWQgc3BlY3Vs
YXRpb25DaGVjayhFeGl0S2luZCwgSlNWYWx1ZVNvdXJjZSwgTm9kZSosIE1hY3JvQXNzZW1ibGVy
OjpKdW1wIGp1bXBUb0ZhaWwsIGNvbnN0IFNwZWN1bGF0aW9uUmVjb3ZlcnkmKTsKICAgICB2b2lk
IHNwZWN1bGF0aW9uQ2hlY2soRXhpdEtpbmQsIEpTVmFsdWVTb3VyY2UsIEVkZ2UsIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wIGp1bXBUb0ZhaWwsIGNvbnN0IFNwZWN1bGF0aW9uUmVjb3ZlcnkmKTsKICAg
ICAvLyBVc2UgdGhpcyBsaWtlIHlvdSB3b3VsZCB1c2Ugc3BlY3VsYXRpb25DaGVjaygpLCBleGNl
cHQgdGhhdCB5b3UgZG9uJ3QgcGFzcyBpdCBhIGp1bXAKICAgICAvLyAoYmVjYXVzZSB5b3UgZG9u
J3QgaGF2ZSB0byBleGVjdXRlIGEgYnJhbmNoOyB0aGF0J3Mga2luZCBvZiB0aGUgd2hvbGUgcG9p
bnQpLCBhbmQgeW91CiAgICAgLy8gbXVzdCByZWdpc3RlciB0aGUgcmV0dXJuZWQgV2F0Y2hwb2lu
dCB3aXRoIHNvbWV0aGluZyByZWxldmFudC4gSW4gZ2VuZXJhbCwgdGhpcyBzaG91bGQKICAgICAv
LyBiZSB1c2VkIHdpdGggZXh0cmVtZSBjYXJlLiBVc2Ugc3BlY3VsYXRpb25DaGVjaygpIHVubGVz
cyB5b3UndmUgZ290IGFuIGFtYXppbmcgcmVhc29uCiAgICAgLy8gbm90IHRvLgotICAgIEp1bXBS
ZXBsYWNlbWVudFdhdGNocG9pbnQqIHNwZWN1bGF0aW9uV2F0Y2hwb2ludChFeGl0S2luZCwgSlNW
YWx1ZVNvdXJjZSwgTm9kZUluZGV4KTsKKyAgICBKdW1wUmVwbGFjZW1lbnRXYXRjaHBvaW50KiBz
cGVjdWxhdGlvbldhdGNocG9pbnQoRXhpdEtpbmQsIEpTVmFsdWVTb3VyY2UsIE5vZGUqKTsKICAg
ICAvLyBUaGUgZGVmYXVsdCBmb3Igc3BlY3VsYXRpb24gd2F0Y2hwb2ludHMgaXMgdGhhdCB0aGV5
J3JlIHVuY291bnRlZCwgYmVjYXVzZSB0aGUKICAgICAvLyBhY3Qgb2YgZmlyaW5nIGEgd2F0Y2hw
b2ludCBpbnZhbGlkYXRlcyBpdC4gU28sIGZ1dHVyZSByZWNvbXBpbGF0aW9ucyB3aWxsIG5vdAog
ICAgIC8vIGF0dGVtcHQgdG8gc2V0IHRoaXMgd2F0Y2hwb2ludCBhZ2Fpbi4KQEAgLTIyMTksMTQg
KzIxOTIsMTQgQEAgcHVibGljOgogICAgIAogICAgIC8vIE5vdGU6IG5vdCBzcGVjaWZ5aW5nIHRo
ZSB2YWx1ZVJlY292ZXJ5IGFyZ3VtZW50IChsZWF2aW5nIGl0IGFzIFZhbHVlUmVjb3ZlcnkoKSkg
aW1wbGllcwogICAgIC8vIHRoYXQgeW91J3ZlIGVuc3VyZWQgdGhhdCB0aGVyZSBleGlzdHMgYSBN
b3ZIaW50IHByaW9yIHRvIHlvdXIgdXNlIG9mIGZvcndhcmRTcGVjdWxhdGlvbkNoZWNrKCkuCi0g
ICAgdm9pZCBmb3J3YXJkU3BlY3VsYXRpb25DaGVjayhFeGl0S2luZCwgSlNWYWx1ZVNvdXJjZSwg
Tm9kZUluZGV4LCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBqdW1wVG9GYWlsLCBjb25zdCBWYWx1ZVJl
Y292ZXJ5JiA9IFZhbHVlUmVjb3ZlcnkoKSk7Ci0gICAgdm9pZCBmb3J3YXJkU3BlY3VsYXRpb25D
aGVjayhFeGl0S2luZCwgSlNWYWx1ZVNvdXJjZSwgTm9kZUluZGV4LCBjb25zdCBNYWNyb0Fzc2Vt
Ymxlcjo6SnVtcExpc3QmIGp1bXBzVG9GYWlsLCBjb25zdCBWYWx1ZVJlY292ZXJ5JiA9IFZhbHVl
UmVjb3ZlcnkoKSk7Ci0gICAgdm9pZCBzcGVjdWxhdGlvbkNoZWNrKEV4aXRLaW5kLCBKU1ZhbHVl
U291cmNlLCBOb2RlSW5kZXgsIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGp1bXBUb0ZhaWwsIFNwZWN1
bGF0aW9uRGlyZWN0aW9uKTsKLSAgICB2b2lkIHNwZWN1bGF0aW9uQ2hlY2soRXhpdEtpbmQsIEpT
VmFsdWVTb3VyY2UsIE5vZGVJbmRleCwgTWFjcm9Bc3NlbWJsZXI6Okp1bXAganVtcFRvRmFpbCwg
Y29uc3QgU3BlY3VsYXRpb25SZWNvdmVyeSYsIFNwZWN1bGF0aW9uRGlyZWN0aW9uKTsKKyAgICB2
b2lkIGZvcndhcmRTcGVjdWxhdGlvbkNoZWNrKEV4aXRLaW5kLCBKU1ZhbHVlU291cmNlLCBOb2Rl
KiwgTWFjcm9Bc3NlbWJsZXI6Okp1bXAganVtcFRvRmFpbCwgY29uc3QgVmFsdWVSZWNvdmVyeSYg
PSBWYWx1ZVJlY292ZXJ5KCkpOworICAgIHZvaWQgZm9yd2FyZFNwZWN1bGF0aW9uQ2hlY2soRXhp
dEtpbmQsIEpTVmFsdWVTb3VyY2UsIE5vZGUqLCBjb25zdCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExp
c3QmIGp1bXBzVG9GYWlsLCBjb25zdCBWYWx1ZVJlY292ZXJ5JiA9IFZhbHVlUmVjb3ZlcnkoKSk7
CisgICAgdm9pZCBzcGVjdWxhdGlvbkNoZWNrKEV4aXRLaW5kLCBKU1ZhbHVlU291cmNlLCBOb2Rl
KiwgTWFjcm9Bc3NlbWJsZXI6Okp1bXAganVtcFRvRmFpbCwgU3BlY3VsYXRpb25EaXJlY3Rpb24p
OworICAgIHZvaWQgc3BlY3VsYXRpb25DaGVjayhFeGl0S2luZCwgSlNWYWx1ZVNvdXJjZSwgTm9k
ZSosIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGp1bXBUb0ZhaWwsIGNvbnN0IFNwZWN1bGF0aW9uUmVj
b3ZlcnkmLCBTcGVjdWxhdGlvbkRpcmVjdGlvbik7CiAgICAgLy8gQ2FsbGVkIHdoZW4gd2Ugc3Rh
dGljYWxseSBkZXRlcm1pbmUgdGhhdCBhIHNwZWN1bGF0aW9uIHdpbGwgZmFpbC4KLSAgICB2b2lk
IHRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKEV4aXRLaW5kLCBKU1ZhbHVlUmVncywgTm9k
ZUluZGV4KTsKKyAgICB2b2lkIHRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKEV4aXRLaW5k
LCBKU1ZhbHVlUmVncywgTm9kZSopOwogICAgIHZvaWQgdGVybWluYXRlU3BlY3VsYXRpdmVFeGVj
dXRpb24oRXhpdEtpbmQsIEpTVmFsdWVSZWdzLCBFZGdlKTsKLSAgICB2b2lkIHRlcm1pbmF0ZVNw
ZWN1bGF0aXZlRXhlY3V0aW9uKEV4aXRLaW5kLCBKU1ZhbHVlUmVncywgTm9kZUluZGV4LCBTcGVj
dWxhdGlvbkRpcmVjdGlvbik7CisgICAgdm9pZCB0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlv
bihFeGl0S2luZCwgSlNWYWx1ZVJlZ3MsIE5vZGUqLCBTcGVjdWxhdGlvbkRpcmVjdGlvbik7CiAg
ICAgLy8gSXNzdWUgYSBmb3J3YXJkIHNwZWN1bGF0aW9uIHdhdGNocG9pbnQsIHdoaWNoIHdpbGwg
ZXhpdCB0byB0aGUgbmV4dCBpbnN0cnVjdGlvbiByYXRoZXIKICAgICAvLyB0aGFuIHRoZSBjdXJy
ZW50IG9uZS4KICAgICBKdW1wUmVwbGFjZW1lbnRXYXRjaHBvaW50KiBmb3J3YXJkU3BlY3VsYXRp
b25XYXRjaHBvaW50KEV4aXRLaW5kID0gVW5jb3VudGFibGVXYXRjaHBvaW50KTsKQEAgLTIyMzYs
MTIgKzIyMDksMTIgQEAgcHVibGljOgogICAgIAogICAgIEpJVENvbXBpbGVyOjpKdW1wIGp1bXBT
bG93Rm9yVW53YW50ZWRBcnJheU1vZGUoR1BSUmVnIHRlbXBXaXRoSW5kZXhpbmdUeXBlUmVnLCBB
cnJheU1vZGUsIEluZGV4aW5nVHlwZSwgYm9vbCBpbnZlcnQpOwogICAgIEpJVENvbXBpbGVyOjpK
dW1wTGlzdCBqdW1wU2xvd0ZvclVud2FudGVkQXJyYXlNb2RlKEdQUlJlZyB0ZW1wV2l0aEluZGV4
aW5nVHlwZVJlZywgQXJyYXlNb2RlLCBib29sIGludmVydCA9IGZhbHNlKTsKLSAgICB2b2lkIGNo
ZWNrQXJyYXkoTm9kZSYpOwotICAgIHZvaWQgYXJyYXlpZnkoTm9kZSYsIEdQUlJlZyBiYXNlUmVn
LCBHUFJSZWcgcHJvcGVydHlSZWcpOwotICAgIHZvaWQgYXJyYXlpZnkoTm9kZSYpOworICAgIHZv
aWQgY2hlY2tBcnJheShOb2RlKik7CisgICAgdm9pZCBhcnJheWlmeShOb2RlKiwgR1BSUmVnIGJh
c2VSZWcsIEdQUlJlZyBwcm9wZXJ0eVJlZyk7CisgICAgdm9pZCBhcnJheWlmeShOb2RlKik7CiAg
ICAgCiAgICAgdGVtcGxhdGU8Ym9vbCBzdHJpY3Q+Ci0gICAgR1BSUmVnIGZpbGxTcGVjdWxhdGVJ
bnRJbnRlcm5hbChOb2RlSW5kZXgsIERhdGFGb3JtYXQmIHJldHVybkZvcm1hdCwgU3BlY3VsYXRp
b25EaXJlY3Rpb24pOworICAgIEdQUlJlZyBmaWxsU3BlY3VsYXRlSW50SW50ZXJuYWwoTm9kZSos
IERhdGFGb3JtYXQmIHJldHVybkZvcm1hdCwgU3BlY3VsYXRpb25EaXJlY3Rpb24pOwogICAgIAog
ICAgIC8vIEl0IGlzIHBvc3NpYmxlLCBkdXJpbmcgc3BlY3VsYXRpdmUgZ2VuZXJhdGlvbiwgdG8g
cmVhY2ggYSBzaXR1YXRpb24gaW4gd2hpY2ggd2UKICAgICAvLyBjYW4gc3RhdGljYWxseSBkZXRl
cm1pbmUgYSBzcGVjdWxhdGlvbiB3aWxsIGZhaWwgKGZvciBleGFtcGxlLCB3aGVuIHR3byBub2Rl
cwpAQCAtMjI1Nyw5ICsyMjMwLDkgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gdmFsdWVTb3Vy
Y2VSZWZlcmVuY2VGb3JPcGVyYW5kKG9wZXJhbmQpOwogICAgIH0KICAgICAKLSAgICB2b2lkIHNl
dE5vZGVJbmRleEZvck9wZXJhbmQoTm9kZUluZGV4IG5vZGVJbmRleCwgaW50IG9wZXJhbmQpCisg
ICAgdm9pZCBzZXROb2RlRm9yT3BlcmFuZChOb2RlKiBub2RlLCBpbnQgb3BlcmFuZCkKICAgICB7
Ci0gICAgICAgIHZhbHVlU291cmNlUmVmZXJlbmNlRm9yT3BlcmFuZChvcGVyYW5kKSA9IFZhbHVl
U291cmNlKE1pbmlmaWVkSUQobm9kZUluZGV4KSk7CisgICAgICAgIHZhbHVlU291cmNlUmVmZXJl
bmNlRm9yT3BlcmFuZChvcGVyYW5kKSA9IFZhbHVlU291cmNlKE1pbmlmaWVkSUQobm9kZSkpOwog
ICAgIH0KICAgICAKICAgICAvLyBDYWxsIHRoaXMgd2l0aCBjYXJlLCBzaW5jZSBpdCBib3RoIHJl
dHVybnMgYSByZWZlcmVuY2UgaW50byBhbiBhcnJheQpAQCAtMjI5MCw3ICsyMjYzLDcgQEAgcHVi
bGljOgogCiAgICAgLy8gVGhlIGN1cnJlbnQgbm9kZSBiZWluZyBnZW5lcmF0ZWQuCiAgICAgQmxv
Y2tJbmRleCBtX2Jsb2NrOwotICAgIE5vZGVJbmRleCBtX2NvbXBpbGVJbmRleDsKKyAgICBOb2Rl
KiBtX2N1cnJlbnROb2RlOwogICAgIHVuc2lnbmVkIG1faW5kZXhJbkJsb2NrOwogICAgIC8vIFZp
cnR1YWwgYW5kIHBoeXNpY2FsIHJlZ2lzdGVyIG1hcHMuCiAgICAgVmVjdG9yPEdlbmVyYXRpb25J
bmZvLCAzMj4gbV9nZW5lcmF0aW9uSW5mbzsKQEAgLTIzNTEsNyArMjMyNCw3IEBAIGNsYXNzIElu
dGVnZXJPcGVyYW5kIHsKIHB1YmxpYzoKICAgICBleHBsaWNpdCBJbnRlZ2VyT3BlcmFuZChTcGVj
dWxhdGl2ZUpJVCogaml0LCBFZGdlIHVzZSkKICAgICAgICAgOiBtX2ppdChqaXQpCi0gICAgICAg
ICwgbV9pbmRleCh1c2UuaW5kZXgoKSkKKyAgICAgICAgLCBtX25vZGUodXNlLm5vZGUoKSkKICAg
ICAgICAgLCBtX2dwck9ySW52YWxpZChJbnZhbGlkR1BSUmVnKQogI2lmbmRlZiBOREVCVUcKICAg
ICAgICAgLCBtX2Zvcm1hdChEYXRhRm9ybWF0Tm9uZSkKQEAgLTIzNTksNyArMjMzMiw3IEBAIHB1
YmxpYzoKICAgICB7CiAgICAgICAgIEFTU0VSVChtX2ppdCk7CiAgICAgICAgIEFTU0VSVCh1c2Uu
dXNlS2luZCgpICE9IERvdWJsZVVzZSk7Ci0gICAgICAgIGlmIChqaXQtPmlzRmlsbGVkKG1faW5k
ZXgpKQorICAgICAgICBpZiAoaml0LT5pc0ZpbGxlZChtX25vZGUpKQogICAgICAgICAgICAgZ3By
KCk7CiAgICAgfQogCkBAIC0yMzY5LDkgKzIzNDIsOSBAQCBwdWJsaWM6CiAgICAgICAgIG1faml0
LT51bmxvY2sobV9ncHJPckludmFsaWQpOwogICAgIH0KIAotICAgIE5vZGVJbmRleCBpbmRleCgp
IGNvbnN0CisgICAgTm9kZSogbm9kZSgpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gbV9p
bmRleDsKKyAgICAgICAgcmV0dXJuIG1fbm9kZTsKICAgICB9CiAKICAgICBEYXRhRm9ybWF0IGZv
cm1hdCgpCkBAIC0yMzg0LDE4ICsyMzU3LDE4IEBAIHB1YmxpYzoKICAgICBHUFJSZWcgZ3ByKCkK
ICAgICB7CiAgICAgICAgIGlmIChtX2dwck9ySW52YWxpZCA9PSBJbnZhbGlkR1BSUmVnKQotICAg
ICAgICAgICAgbV9ncHJPckludmFsaWQgPSBtX2ppdC0+ZmlsbEludGVnZXIoaW5kZXgoKSwgbV9m
b3JtYXQpOworICAgICAgICAgICAgbV9ncHJPckludmFsaWQgPSBtX2ppdC0+ZmlsbEludGVnZXIo
bm9kZSgpLCBtX2Zvcm1hdCk7CiAgICAgICAgIHJldHVybiBtX2dwck9ySW52YWxpZDsKICAgICB9
CiAgICAgCiAgICAgdm9pZCB1c2UoKQogICAgIHsKLSAgICAgICAgbV9qaXQtPnVzZShtX2luZGV4
KTsKKyAgICAgICAgbV9qaXQtPnVzZShtX25vZGUpOwogICAgIH0KIAogcHJpdmF0ZToKICAgICBT
cGVjdWxhdGl2ZUpJVCogbV9qaXQ7Ci0gICAgTm9kZUluZGV4IG1faW5kZXg7CisgICAgTm9kZSog
bV9ub2RlOwogICAgIEdQUlJlZyBtX2dwck9ySW52YWxpZDsKICAgICBEYXRhRm9ybWF0IG1fZm9y
bWF0OwogfTsKQEAgLTI0MDQsNyArMjM3Nyw3IEBAIGNsYXNzIERvdWJsZU9wZXJhbmQgewogcHVi
bGljOgogICAgIGV4cGxpY2l0IERvdWJsZU9wZXJhbmQoU3BlY3VsYXRpdmVKSVQqIGppdCwgRWRn
ZSB1c2UpCiAgICAgICAgIDogbV9qaXQoaml0KQotICAgICAgICAsIG1faW5kZXgodXNlLmluZGV4
KCkpCisgICAgICAgICwgbV9ub2RlKHVzZS5ub2RlKCkpCiAgICAgICAgICwgbV9mcHJPckludmFs
aWQoSW52YWxpZEZQUlJlZykKICAgICB7CiAgICAgICAgIEFTU0VSVChtX2ppdCk7CkBAIC0yNDE3
LDcgKzIzOTAsNyBAQCBwdWJsaWM6CiAgICAgICAgIC8vIGlzIG5vdCBvbmUgYWxyZWFkeS4KICAg
ICAgICAgQVNTRVJUKHVzZS51c2VLaW5kKCkgIT0gRG91YmxlVXNlKTsKICAgICAgICAgCi0gICAg
ICAgIGlmIChqaXQtPmlzRmlsbGVkRG91YmxlKG1faW5kZXgpKQorICAgICAgICBpZiAoaml0LT5p
c0ZpbGxlZERvdWJsZShtX25vZGUpKQogICAgICAgICAgICAgZnByKCk7CiAgICAgfQogCkBAIC0y
NDI3LDI2ICsyNDAwLDI2IEBAIHB1YmxpYzoKICAgICAgICAgbV9qaXQtPnVubG9jayhtX2Zwck9y
SW52YWxpZCk7CiAgICAgfQogCi0gICAgTm9kZUluZGV4IGluZGV4KCkgY29uc3QKKyAgICBOb2Rl
KiBub2RlKCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBtX2luZGV4OworICAgICAgICBy
ZXR1cm4gbV9ub2RlOwogICAgIH0KIAogICAgIEZQUlJlZyBmcHIoKQogICAgIHsKICAgICAgICAg
aWYgKG1fZnByT3JJbnZhbGlkID09IEludmFsaWRGUFJSZWcpCi0gICAgICAgICAgICBtX2Zwck9y
SW52YWxpZCA9IG1faml0LT5maWxsRG91YmxlKGluZGV4KCkpOworICAgICAgICAgICAgbV9mcHJP
ckludmFsaWQgPSBtX2ppdC0+ZmlsbERvdWJsZShub2RlKCkpOwogICAgICAgICByZXR1cm4gbV9m
cHJPckludmFsaWQ7CiAgICAgfQogICAgIAogICAgIHZvaWQgdXNlKCkKICAgICB7Ci0gICAgICAg
IG1faml0LT51c2UobV9pbmRleCk7CisgICAgICAgIG1faml0LT51c2UobV9ub2RlKTsKICAgICB9
CiAKIHByaXZhdGU6CiAgICAgU3BlY3VsYXRpdmVKSVQqIG1faml0OwotICAgIE5vZGVJbmRleCBt
X2luZGV4OworICAgIE5vZGUqIG1fbm9kZTsKICAgICBGUFJSZWcgbV9mcHJPckludmFsaWQ7CiB9
OwogCkBAIC0yNDU0LDcgKzI0MjcsNyBAQCBjbGFzcyBKU1ZhbHVlT3BlcmFuZCB7CiBwdWJsaWM6
CiAgICAgZXhwbGljaXQgSlNWYWx1ZU9wZXJhbmQoU3BlY3VsYXRpdmVKSVQqIGppdCwgRWRnZSB1
c2UpCiAgICAgICAgIDogbV9qaXQoaml0KQotICAgICAgICAsIG1faW5kZXgodXNlLmluZGV4KCkp
CisgICAgICAgICwgbV9ub2RlKHVzZS5ub2RlKCkpCiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICAg
ICAgLCBtX2dwck9ySW52YWxpZChJbnZhbGlkR1BSUmVnKQogI2VsaWYgVVNFKEpTVkFMVUUzMl82
NCkKQEAgLTI0NjQsMTIgKzI0MzcsMTIgQEAgcHVibGljOgogICAgICAgICBBU1NFUlQobV9qaXQp
OwogICAgICAgICBBU1NFUlQodXNlLnVzZUtpbmQoKSAhPSBEb3VibGVVc2UpOwogI2lmIFVTRShK
U1ZBTFVFNjQpCi0gICAgICAgIGlmIChqaXQtPmlzRmlsbGVkKG1faW5kZXgpKQorICAgICAgICBp
ZiAoaml0LT5pc0ZpbGxlZChtX25vZGUpKQogICAgICAgICAgICAgZ3ByKCk7CiAjZWxpZiBVU0Uo
SlNWQUxVRTMyXzY0KQogICAgICAgICBtX3JlZ2lzdGVyLnBhaXIudGFnR1BSID0gSW52YWxpZEdQ
UlJlZzsKICAgICAgICAgbV9yZWdpc3Rlci5wYWlyLnBheWxvYWRHUFIgPSBJbnZhbGlkR1BSUmVn
OwotICAgICAgICBpZiAoaml0LT5pc0ZpbGxlZChtX2luZGV4KSkKKyAgICAgICAgaWYgKGppdC0+
aXNGaWxsZWQobV9ub2RlKSkKICAgICAgICAgICAgIGZpbGwoKTsKICNlbmRpZgogICAgIH0KQEAg
LTI0OTEsMTYgKzI0NjQsMTYgQEAgcHVibGljOgogI2VuZGlmCiAgICAgfQogCi0gICAgTm9kZUlu
ZGV4IGluZGV4KCkgY29uc3QKKyAgICBOb2RlKiBub2RlKCkgY29uc3QKICAgICB7Ci0gICAgICAg
IHJldHVybiBtX2luZGV4OworICAgICAgICByZXR1cm4gbV9ub2RlOwogICAgIH0KIAogI2lmIFVT
RShKU1ZBTFVFNjQpCiAgICAgR1BSUmVnIGdwcigpCiAgICAgewogICAgICAgICBpZiAobV9ncHJP
ckludmFsaWQgPT0gSW52YWxpZEdQUlJlZykKLSAgICAgICAgICAgIG1fZ3ByT3JJbnZhbGlkID0g
bV9qaXQtPmZpbGxKU1ZhbHVlKGluZGV4KCkpOworICAgICAgICAgICAgbV9ncHJPckludmFsaWQg
PSBtX2ppdC0+ZmlsbEpTVmFsdWUobm9kZSgpKTsKICAgICAgICAgcmV0dXJuIG1fZ3ByT3JJbnZh
bGlkOwogICAgIH0KICAgICBKU1ZhbHVlUmVncyBqc1ZhbHVlUmVncygpCkBAIC0yNTEzLDcgKzI0
ODYsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBmaWxsKCkKICAgICB7CiAgICAgICAgIGlmIChtX3Jl
Z2lzdGVyLnBhaXIudGFnR1BSID09IEludmFsaWRHUFJSZWcgJiYgbV9yZWdpc3Rlci5wYWlyLnBh
eWxvYWRHUFIgPT0gSW52YWxpZEdQUlJlZykKLSAgICAgICAgICAgIG1faXNEb3VibGUgPSAhbV9q
aXQtPmZpbGxKU1ZhbHVlKGluZGV4KCksIG1fcmVnaXN0ZXIucGFpci50YWdHUFIsIG1fcmVnaXN0
ZXIucGFpci5wYXlsb2FkR1BSLCBtX3JlZ2lzdGVyLmZwcik7CisgICAgICAgICAgICBtX2lzRG91
YmxlID0gIW1faml0LT5maWxsSlNWYWx1ZShub2RlKCksIG1fcmVnaXN0ZXIucGFpci50YWdHUFIs
IG1fcmVnaXN0ZXIucGFpci5wYXlsb2FkR1BSLCBtX3JlZ2lzdGVyLmZwcik7CiAgICAgfQogCiAg
ICAgR1BSUmVnIHRhZ0dQUigpCkBAIC0yNTQ1LDEyICsyNTE4LDEyIEBAIHB1YmxpYzoKIAogICAg
IHZvaWQgdXNlKCkKICAgICB7Ci0gICAgICAgIG1faml0LT51c2UobV9pbmRleCk7CisgICAgICAg
IG1faml0LT51c2UobV9ub2RlKTsKICAgICB9CiAKIHByaXZhdGU6CiAgICAgU3BlY3VsYXRpdmVK
SVQqIG1faml0OwotICAgIE5vZGVJbmRleCBtX2luZGV4OworICAgIE5vZGUqIG1fbm9kZTsKICNp
ZiBVU0UoSlNWQUxVRTY0KQogICAgIEdQUlJlZyBtX2dwck9ySW52YWxpZDsKICNlbGlmIFVTRShK
U1ZBTFVFMzJfNjQpCkBAIC0yNTY5LDEyICsyNTQyLDEyIEBAIGNsYXNzIFN0b3JhZ2VPcGVyYW5k
IHsKIHB1YmxpYzoKICAgICBleHBsaWNpdCBTdG9yYWdlT3BlcmFuZChTcGVjdWxhdGl2ZUpJVCog
aml0LCBFZGdlIHVzZSkKICAgICAgICAgOiBtX2ppdChqaXQpCi0gICAgICAgICwgbV9pbmRleCh1
c2UuaW5kZXgoKSkKKyAgICAgICAgLCBtX25vZGUodXNlLm5vZGUoKSkKICAgICAgICAgLCBtX2dw
ck9ySW52YWxpZChJbnZhbGlkR1BSUmVnKQogICAgIHsKICAgICAgICAgQVNTRVJUKG1faml0KTsK
ICAgICAgICAgQVNTRVJUKHVzZS51c2VLaW5kKCkgIT0gRG91YmxlVXNlKTsKLSAgICAgICAgaWYg
KGppdC0+aXNGaWxsZWQobV9pbmRleCkpCisgICAgICAgIGlmIChqaXQtPmlzRmlsbGVkKG1fbm9k
ZSkpCiAgICAgICAgICAgICBncHIoKTsKICAgICB9CiAgICAgCkBAIC0yNTg0LDI2ICsyNTU3LDI2
IEBAIHB1YmxpYzoKICAgICAgICAgbV9qaXQtPnVubG9jayhtX2dwck9ySW52YWxpZCk7CiAgICAg
fQogICAgIAotICAgIE5vZGVJbmRleCBpbmRleCgpIGNvbnN0CisgICAgTm9kZSogbm9kZSgpIGNv
bnN0CiAgICAgewotICAgICAgICByZXR1cm4gbV9pbmRleDsKKyAgICAgICAgcmV0dXJuIG1fbm9k
ZTsKICAgICB9CiAgICAgCiAgICAgR1BSUmVnIGdwcigpCiAgICAgewogICAgICAgICBpZiAobV9n
cHJPckludmFsaWQgPT0gSW52YWxpZEdQUlJlZykKLSAgICAgICAgICAgIG1fZ3ByT3JJbnZhbGlk
ID0gbV9qaXQtPmZpbGxTdG9yYWdlKGluZGV4KCkpOworICAgICAgICAgICAgbV9ncHJPckludmFs
aWQgPSBtX2ppdC0+ZmlsbFN0b3JhZ2Uobm9kZSgpKTsKICAgICAgICAgcmV0dXJuIG1fZ3ByT3JJ
bnZhbGlkOwogICAgIH0KICAgICAKICAgICB2b2lkIHVzZSgpCiAgICAgewotICAgICAgICBtX2pp
dC0+dXNlKG1faW5kZXgpOworICAgICAgICBtX2ppdC0+dXNlKG1fbm9kZSk7CiAgICAgfQogICAg
IAogcHJpdmF0ZToKICAgICBTcGVjdWxhdGl2ZUpJVCogbV9qaXQ7Ci0gICAgTm9kZUluZGV4IG1f
aW5kZXg7CisgICAgTm9kZSogbV9ub2RlOwogICAgIEdQUlJlZyBtX2dwck9ySW52YWxpZDsKIH07
CiAKQEAgLTI3MzksNyArMjcxMiw3IEBAIGNsYXNzIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIHsK
IHB1YmxpYzoKICAgICBleHBsaWNpdCBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZChTcGVjdWxhdGl2
ZUpJVCogaml0LCBFZGdlIHVzZSwgU3BlY3VsYXRpb25EaXJlY3Rpb24gZGlyZWN0aW9uID0gQmFj
a3dhcmRTcGVjdWxhdGlvbikKICAgICAgICAgOiBtX2ppdChqaXQpCi0gICAgICAgICwgbV9pbmRl
eCh1c2UuaW5kZXgoKSkKKyAgICAgICAgLCBtX25vZGUodXNlLm5vZGUoKSkKICAgICAgICAgLCBt
X2dwck9ySW52YWxpZChJbnZhbGlkR1BSUmVnKQogI2lmbmRlZiBOREVCVUcKICAgICAgICAgLCBt
X2Zvcm1hdChEYXRhRm9ybWF0Tm9uZSkKQEAgLTI3NDgsNyArMjcyMSw3IEBAIHB1YmxpYzoKICAg
ICB7CiAgICAgICAgIEFTU0VSVChtX2ppdCk7CiAgICAgICAgIEFTU0VSVCh1c2UudXNlS2luZCgp
ICE9IERvdWJsZVVzZSk7Ci0gICAgICAgIGlmIChqaXQtPmlzRmlsbGVkKG1faW5kZXgpKQorICAg
ICAgICBpZiAoaml0LT5pc0ZpbGxlZChtX25vZGUpKQogICAgICAgICAgICAgZ3ByKCk7CiAgICAg
fQogCkBAIC0yNzU4LDkgKzI3MzEsOSBAQCBwdWJsaWM6CiAgICAgICAgIG1faml0LT51bmxvY2so
bV9ncHJPckludmFsaWQpOwogICAgIH0KIAotICAgIE5vZGVJbmRleCBpbmRleCgpIGNvbnN0Cisg
ICAgTm9kZSogbm9kZSgpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gbV9pbmRleDsKKyAg
ICAgICAgcmV0dXJuIG1fbm9kZTsKICAgICB9CiAKICAgICBEYXRhRm9ybWF0IGZvcm1hdCgpCkBA
IC0yNzczLDE4ICsyNzQ2LDE4IEBAIHB1YmxpYzoKICAgICBHUFJSZWcgZ3ByKCkKICAgICB7CiAg
ICAgICAgIGlmIChtX2dwck9ySW52YWxpZCA9PSBJbnZhbGlkR1BSUmVnKQotICAgICAgICAgICAg
bV9ncHJPckludmFsaWQgPSBtX2ppdC0+ZmlsbFNwZWN1bGF0ZUludChpbmRleCgpLCBtX2Zvcm1h
dCwgbV9kaXJlY3Rpb24pOworICAgICAgICAgICAgbV9ncHJPckludmFsaWQgPSBtX2ppdC0+Zmls
bFNwZWN1bGF0ZUludChub2RlKCksIG1fZm9ybWF0LCBtX2RpcmVjdGlvbik7CiAgICAgICAgIHJl
dHVybiBtX2dwck9ySW52YWxpZDsKICAgICB9CiAgICAgCiAgICAgdm9pZCB1c2UoKQogICAgIHsK
LSAgICAgICAgbV9qaXQtPnVzZShtX2luZGV4KTsKKyAgICAgICAgbV9qaXQtPnVzZShtX25vZGUp
OwogICAgIH0KIAogcHJpdmF0ZToKICAgICBTcGVjdWxhdGl2ZUpJVCogbV9qaXQ7Ci0gICAgTm9k
ZUluZGV4IG1faW5kZXg7CisgICAgTm9kZSogbV9ub2RlOwogICAgIEdQUlJlZyBtX2dwck9ySW52
YWxpZDsKICAgICBEYXRhRm9ybWF0IG1fZm9ybWF0OwogICAgIFNwZWN1bGF0aW9uRGlyZWN0aW9u
IG1fZGlyZWN0aW9uOwpAQCAtMjc5NCwxMiArMjc2NywxMiBAQCBjbGFzcyBTcGVjdWxhdGVTdHJp
Y3RJbnQzMk9wZXJhbmQgewogcHVibGljOgogICAgIGV4cGxpY2l0IFNwZWN1bGF0ZVN0cmljdElu
dDMyT3BlcmFuZChTcGVjdWxhdGl2ZUpJVCogaml0LCBFZGdlIHVzZSkKICAgICAgICAgOiBtX2pp
dChqaXQpCi0gICAgICAgICwgbV9pbmRleCh1c2UuaW5kZXgoKSkKKyAgICAgICAgLCBtX25vZGUo
dXNlLm5vZGUoKSkKICAgICAgICAgLCBtX2dwck9ySW52YWxpZChJbnZhbGlkR1BSUmVnKQogICAg
IHsKICAgICAgICAgQVNTRVJUKG1faml0KTsKICAgICAgICAgQVNTRVJUKHVzZS51c2VLaW5kKCkg
IT0gRG91YmxlVXNlKTsKLSAgICAgICAgaWYgKGppdC0+aXNGaWxsZWQobV9pbmRleCkpCisgICAg
ICAgIGlmIChqaXQtPmlzRmlsbGVkKG1fbm9kZSkpCiAgICAgICAgICAgICBncHIoKTsKICAgICB9
CiAKQEAgLTI4MDksMjYgKzI3ODIsMjYgQEAgcHVibGljOgogICAgICAgICBtX2ppdC0+dW5sb2Nr
KG1fZ3ByT3JJbnZhbGlkKTsKICAgICB9CiAKLSAgICBOb2RlSW5kZXggaW5kZXgoKSBjb25zdAor
ICAgIE5vZGUqIG5vZGUoKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIG1faW5kZXg7Cisg
ICAgICAgIHJldHVybiBtX25vZGU7CiAgICAgfQogCiAgICAgR1BSUmVnIGdwcigpCiAgICAgewog
ICAgICAgICBpZiAobV9ncHJPckludmFsaWQgPT0gSW52YWxpZEdQUlJlZykKLSAgICAgICAgICAg
IG1fZ3ByT3JJbnZhbGlkID0gbV9qaXQtPmZpbGxTcGVjdWxhdGVJbnRTdHJpY3QoaW5kZXgoKSk7
CisgICAgICAgICAgICBtX2dwck9ySW52YWxpZCA9IG1faml0LT5maWxsU3BlY3VsYXRlSW50U3Ry
aWN0KG5vZGUoKSk7CiAgICAgICAgIHJldHVybiBtX2dwck9ySW52YWxpZDsKICAgICB9CiAgICAg
CiAgICAgdm9pZCB1c2UoKQogICAgIHsKLSAgICAgICAgbV9qaXQtPnVzZShtX2luZGV4KTsKKyAg
ICAgICAgbV9qaXQtPnVzZShtX25vZGUpOwogICAgIH0KIAogcHJpdmF0ZToKICAgICBTcGVjdWxh
dGl2ZUpJVCogbV9qaXQ7Ci0gICAgTm9kZUluZGV4IG1faW5kZXg7CisgICAgTm9kZSogbV9ub2Rl
OwogICAgIEdQUlJlZyBtX2dwck9ySW52YWxpZDsKIH07CiAKQEAgLTI4MzYsMTMgKzI4MDksMTMg
QEAgY2xhc3MgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCB7CiBwdWJsaWM6CiAgICAgZXhwbGljaXQg
U3BlY3VsYXRlRG91YmxlT3BlcmFuZChTcGVjdWxhdGl2ZUpJVCogaml0LCBFZGdlIHVzZSwgU3Bl
Y3VsYXRpb25EaXJlY3Rpb24gZGlyZWN0aW9uID0gQmFja3dhcmRTcGVjdWxhdGlvbikKICAgICAg
ICAgOiBtX2ppdChqaXQpCi0gICAgICAgICwgbV9pbmRleCh1c2UuaW5kZXgoKSkKKyAgICAgICAg
LCBtX25vZGUodXNlLm5vZGUoKSkKICAgICAgICAgLCBtX2Zwck9ySW52YWxpZChJbnZhbGlkRlBS
UmVnKQogICAgICAgICAsIG1fZGlyZWN0aW9uKGRpcmVjdGlvbikKICAgICB7CiAgICAgICAgIEFT
U0VSVChtX2ppdCk7CiAgICAgICAgIEFTU0VSVCh1c2UudXNlS2luZCgpID09IERvdWJsZVVzZSk7
Ci0gICAgICAgIGlmIChqaXQtPmlzRmlsbGVkKG1faW5kZXgpKQorICAgICAgICBpZiAoaml0LT5p
c0ZpbGxlZChtX25vZGUpKQogICAgICAgICAgICAgZnByKCk7CiAgICAgfQogCkBAIC0yODUyLDI2
ICsyODI1LDI2IEBAIHB1YmxpYzoKICAgICAgICAgbV9qaXQtPnVubG9jayhtX2Zwck9ySW52YWxp
ZCk7CiAgICAgfQogCi0gICAgTm9kZUluZGV4IGluZGV4KCkgY29uc3QKKyAgICBOb2RlKiBub2Rl
KCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBtX2luZGV4OworICAgICAgICByZXR1cm4g
bV9ub2RlOwogICAgIH0KIAogICAgIEZQUlJlZyBmcHIoKQogICAgIHsKICAgICAgICAgaWYgKG1f
ZnByT3JJbnZhbGlkID09IEludmFsaWRGUFJSZWcpCi0gICAgICAgICAgICBtX2Zwck9ySW52YWxp
ZCA9IG1faml0LT5maWxsU3BlY3VsYXRlRG91YmxlKGluZGV4KCksIG1fZGlyZWN0aW9uKTsKKyAg
ICAgICAgICAgIG1fZnByT3JJbnZhbGlkID0gbV9qaXQtPmZpbGxTcGVjdWxhdGVEb3VibGUobm9k
ZSgpLCBtX2RpcmVjdGlvbik7CiAgICAgICAgIHJldHVybiBtX2Zwck9ySW52YWxpZDsKICAgICB9
CiAgICAgCiAgICAgdm9pZCB1c2UoKQogICAgIHsKLSAgICAgICAgbV9qaXQtPnVzZShtX2luZGV4
KTsKKyAgICAgICAgbV9qaXQtPnVzZShtX25vZGUpOwogICAgIH0KIAogcHJpdmF0ZToKICAgICBT
cGVjdWxhdGl2ZUpJVCogbV9qaXQ7Ci0gICAgTm9kZUluZGV4IG1faW5kZXg7CisgICAgTm9kZSog
bV9ub2RlOwogICAgIEZQUlJlZyBtX2Zwck9ySW52YWxpZDsKICAgICBTcGVjdWxhdGlvbkRpcmVj
dGlvbiBtX2RpcmVjdGlvbjsKIH07CkBAIC0yODgwLDEzICsyODUzLDEzIEBAIGNsYXNzIFNwZWN1
bGF0ZUNlbGxPcGVyYW5kIHsKIHB1YmxpYzoKICAgICBleHBsaWNpdCBTcGVjdWxhdGVDZWxsT3Bl
cmFuZChTcGVjdWxhdGl2ZUpJVCogaml0LCBFZGdlIHVzZSwgU3BlY3VsYXRpb25EaXJlY3Rpb24g
ZGlyZWN0aW9uID0gQmFja3dhcmRTcGVjdWxhdGlvbikKICAgICAgICAgOiBtX2ppdChqaXQpCi0g
ICAgICAgICwgbV9pbmRleCh1c2UuaW5kZXgoKSkKKyAgICAgICAgLCBtX25vZGUodXNlLm5vZGUo
KSkKICAgICAgICAgLCBtX2dwck9ySW52YWxpZChJbnZhbGlkR1BSUmVnKQogICAgICAgICAsIG1f
ZGlyZWN0aW9uKGRpcmVjdGlvbikKICAgICB7CiAgICAgICAgIEFTU0VSVChtX2ppdCk7CiAgICAg
ICAgIEFTU0VSVCh1c2UudXNlS2luZCgpICE9IERvdWJsZVVzZSk7Ci0gICAgICAgIGlmIChqaXQt
PmlzRmlsbGVkKG1faW5kZXgpKQorICAgICAgICBpZiAoaml0LT5pc0ZpbGxlZChtX25vZGUpKQog
ICAgICAgICAgICAgZ3ByKCk7CiAgICAgfQogCkBAIC0yODk2LDI2ICsyODY5LDI2IEBAIHB1Ymxp
YzoKICAgICAgICAgbV9qaXQtPnVubG9jayhtX2dwck9ySW52YWxpZCk7CiAgICAgfQogCi0gICAg
Tm9kZUluZGV4IGluZGV4KCkgY29uc3QKKyAgICBOb2RlKiBub2RlKCkgY29uc3QKICAgICB7Ci0g
ICAgICAgIHJldHVybiBtX2luZGV4OworICAgICAgICByZXR1cm4gbV9ub2RlOwogICAgIH0KIAog
ICAgIEdQUlJlZyBncHIoKQogICAgIHsKICAgICAgICAgaWYgKG1fZ3ByT3JJbnZhbGlkID09IElu
dmFsaWRHUFJSZWcpCi0gICAgICAgICAgICBtX2dwck9ySW52YWxpZCA9IG1faml0LT5maWxsU3Bl
Y3VsYXRlQ2VsbChpbmRleCgpLCBtX2RpcmVjdGlvbik7CisgICAgICAgICAgICBtX2dwck9ySW52
YWxpZCA9IG1faml0LT5maWxsU3BlY3VsYXRlQ2VsbChub2RlKCksIG1fZGlyZWN0aW9uKTsKICAg
ICAgICAgcmV0dXJuIG1fZ3ByT3JJbnZhbGlkOwogICAgIH0KICAgICAKICAgICB2b2lkIHVzZSgp
CiAgICAgewotICAgICAgICBtX2ppdC0+dXNlKG1faW5kZXgpOworICAgICAgICBtX2ppdC0+dXNl
KG1fbm9kZSk7CiAgICAgfQogCiBwcml2YXRlOgogICAgIFNwZWN1bGF0aXZlSklUKiBtX2ppdDsK
LSAgICBOb2RlSW5kZXggbV9pbmRleDsKKyAgICBOb2RlKiBtX25vZGU7CiAgICAgR1BSUmVnIG1f
Z3ByT3JJbnZhbGlkOwogICAgIFNwZWN1bGF0aW9uRGlyZWN0aW9uIG1fZGlyZWN0aW9uOwogfTsK
QEAgLTI5MjQsMTMgKzI4OTcsMTMgQEAgY2xhc3MgU3BlY3VsYXRlQm9vbGVhbk9wZXJhbmQgewog
cHVibGljOgogICAgIGV4cGxpY2l0IFNwZWN1bGF0ZUJvb2xlYW5PcGVyYW5kKFNwZWN1bGF0aXZl
SklUKiBqaXQsIEVkZ2UgdXNlLCBTcGVjdWxhdGlvbkRpcmVjdGlvbiBkaXJlY3Rpb24gPSBCYWNr
d2FyZFNwZWN1bGF0aW9uKQogICAgICAgICA6IG1faml0KGppdCkKLSAgICAgICAgLCBtX2luZGV4
KHVzZS5pbmRleCgpKQorICAgICAgICAsIG1fbm9kZSh1c2Uubm9kZSgpKQogICAgICAgICAsIG1f
Z3ByT3JJbnZhbGlkKEludmFsaWRHUFJSZWcpCiAgICAgICAgICwgbV9kaXJlY3Rpb24oZGlyZWN0
aW9uKQogICAgIHsKICAgICAgICAgQVNTRVJUKG1faml0KTsKICAgICAgICAgQVNTRVJUKHVzZS51
c2VLaW5kKCkgIT0gRG91YmxlVXNlKTsKLSAgICAgICAgaWYgKGppdC0+aXNGaWxsZWQobV9pbmRl
eCkpCisgICAgICAgIGlmIChqaXQtPmlzRmlsbGVkKG1fbm9kZSkpCiAgICAgICAgICAgICBncHIo
KTsKICAgICB9CiAgICAgCkBAIC0yOTQwLDI2ICsyOTEzLDI2IEBAIHB1YmxpYzoKICAgICAgICAg
bV9qaXQtPnVubG9jayhtX2dwck9ySW52YWxpZCk7CiAgICAgfQogICAgIAotICAgIE5vZGVJbmRl
eCBpbmRleCgpIGNvbnN0CisgICAgTm9kZSogbm9kZSgpIGNvbnN0CiAgICAgewotICAgICAgICBy
ZXR1cm4gbV9pbmRleDsKKyAgICAgICAgcmV0dXJuIG1fbm9kZTsKICAgICB9CiAgICAgCiAgICAg
R1BSUmVnIGdwcigpCiAgICAgewogICAgICAgICBpZiAobV9ncHJPckludmFsaWQgPT0gSW52YWxp
ZEdQUlJlZykKLSAgICAgICAgICAgIG1fZ3ByT3JJbnZhbGlkID0gbV9qaXQtPmZpbGxTcGVjdWxh
dGVCb29sZWFuKGluZGV4KCksIG1fZGlyZWN0aW9uKTsKKyAgICAgICAgICAgIG1fZ3ByT3JJbnZh
bGlkID0gbV9qaXQtPmZpbGxTcGVjdWxhdGVCb29sZWFuKG5vZGUoKSwgbV9kaXJlY3Rpb24pOwog
ICAgICAgICByZXR1cm4gbV9ncHJPckludmFsaWQ7CiAgICAgfQogICAgIAogICAgIHZvaWQgdXNl
KCkKICAgICB7Ci0gICAgICAgIG1faml0LT51c2UobV9pbmRleCk7CisgICAgICAgIG1faml0LT51
c2UobV9ub2RlKTsKICAgICB9CiAKIHByaXZhdGU6CiAgICAgU3BlY3VsYXRpdmVKSVQqIG1faml0
OwotICAgIE5vZGVJbmRleCBtX2luZGV4OworICAgIE5vZGUqIG1fbm9kZTsKICAgICBHUFJSZWcg
bV9ncHJPckludmFsaWQ7CiAgICAgU3BlY3VsYXRpb25EaXJlY3Rpb24gbV9kaXJlY3Rpb247CiB9
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJ1Y3R1cmVBYnN0cmFjdFZh
bHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJ1Y3R1
cmVBYnN0cmFjdFZhbHVlLmgJKHJldmlzaW9uIDE0MTA1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3RydWN0dXJlQWJzdHJhY3RWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTIsIDIwMTMgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC0zMTQsNiArMzE0LDggQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBzdGF0aWMgU3Ry
dWN0dXJlKiB0b3BWYWx1ZSgpIHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8U3RydWN0dXJlKj4o
MSk7IH0KICAgICAKKyAgICAvLyBOQi4gVGhpcyBtdXN0IGhhdmUgYSB0cml2aWFsIGRlc3RydWN0
b3IuCisgICAgCiAgICAgLy8gVGhpcyBjYW4gb25seSByZW1lbWJlciBvbmUgc3RydWN0dXJlIGF0
IGEgdGltZS4KICAgICBTdHJ1Y3R1cmUqIG1fc3RydWN0dXJlOwogfTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3RydWN0dXJlQ2hlY2tIb2lzdGluZ1BoYXNlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0cnVjdHVyZUNoZWNrSG9p
c3RpbmdQaGFzZS5jcHAJKHJldmlzaW9uIDE0MTA1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU3RydWN0dXJlQ2hlY2tIb2lzdGluZ1BoYXNlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNjQsMjMgKzY0LDIyIEBAIHB1YmxpYzoKICAgICAgICAgICAgIGlmICghYmxvY2spCiAgICAg
ICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGluZGV4SW5C
bG9jayA9IDA7IGluZGV4SW5CbG9jayA8IGJsb2NrLT5zaXplKCk7ICsraW5kZXhJbkJsb2NrKSB7
Ci0gICAgICAgICAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRleCA9IGJsb2NrLT5hdChpbmRleElu
QmxvY2spOwotICAgICAgICAgICAgICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW25vZGVJbmRleF07
Ci0gICAgICAgICAgICAgICAgaWYgKCFub2RlLnNob3VsZEdlbmVyYXRlKCkpCisgICAgICAgICAg
ICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5hdChpbmRleEluQmxvY2spOworICAgICAgICAgICAg
ICAgIGlmICghbm9kZS0+c2hvdWxkR2VuZXJhdGUoKSkKICAgICAgICAgICAgICAgICAgICAgY29u
dGludWU7Ci0gICAgICAgICAgICAgICAgc3dpdGNoIChub2RlLm9wKCkpIHsKKyAgICAgICAgICAg
ICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKICAgICAgICAgICAgICAgICBjYXNlIENoZWNrU3Ry
dWN0dXJlOgogICAgICAgICAgICAgICAgIGNhc2UgU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9p
bnQ6IHsKLSAgICAgICAgICAgICAgICAgICAgTm9kZSYgY2hpbGQgPSBtX2dyYXBoW25vZGUuY2hp
bGQxKCldOwotICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGQub3AoKSAhPSBHZXRMb2NhbCkK
KyAgICAgICAgICAgICAgICAgICAgTm9kZSogY2hpbGQgPSBub2RlLT5jaGlsZDEoKS5ub2RlKCk7
CisgICAgICAgICAgICAgICAgICAgIGlmIChjaGlsZC0+b3AoKSAhPSBHZXRMb2NhbCkKICAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZUFj
Y2Vzc0RhdGEqIHZhcmlhYmxlID0gY2hpbGQudmFyaWFibGVBY2Nlc3NEYXRhKCk7CisgICAgICAg
ICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBjaGlsZC0+dmFyaWFi
bGVBY2Nlc3NEYXRhKCk7CiAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLT52b3RlKFZvdGVT
dHJ1Y3R1cmVDaGVjayk7CiAgICAgICAgICAgICAgICAgICAgIGlmICh2YXJpYWJsZS0+aXNDYXB0
dXJlZCgpIHx8IHZhcmlhYmxlLT5zdHJ1Y3R1cmVDaGVja0hvaXN0aW5nRmFpbGVkKCkpCiAgICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgaWYgKCFpc0Nl
bGxTcGVjdWxhdGlvbih2YXJpYWJsZS0+cHJlZGljdGlvbigpKSkKICAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBub3RpY2VTdHJ1Y3R1cmVDaGVjayh2
YXJpYWJsZSwgbm9kZS5zdHJ1Y3R1cmVTZXQoKSk7CisgICAgICAgICAgICAgICAgICAgIG5vdGlj
ZVN0cnVjdHVyZUNoZWNrKHZhcmlhYmxlLCBub2RlLT5zdHJ1Y3R1cmVTZXQoKSk7CiAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAg
ICAgCkBAIC0xMDksMTMgKzEwOCwxMyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgIAog
ICAgICAgICAgICAgICAgIGNhc2UgQXJyYXlpZnlUb1N0cnVjdHVyZToKICAgICAgICAgICAgICAg
ICBjYXNlIEFycmF5aWZ5OgotICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS5hcnJheU1vZGUo
KS5jb252ZXJzaW9uKCkgPT0gQXJyYXk6OlJhZ2VDb252ZXJ0KSB7CisgICAgICAgICAgICAgICAg
ICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS5jb252ZXJzaW9uKCkgPT0gQXJyYXk6OlJhZ2VDb252
ZXJ0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBSYWdlIGNvbnZlcnNpb24gY2hhbmdl
cyBzdHJ1Y3R1cmVzLiBXZSBzaG91bGQgYXZvaWQgdHlpbmcgdG8gZG8KICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIGFueSBraW5kIG9mIGhvaXN0aW5nIHdoZW4gcmFnZSBjb252ZXJzaW9uIGlz
IGluIHBsYXkuCi0gICAgICAgICAgICAgICAgICAgICAgICBOb2RlJiBjaGlsZCA9IG1fZ3JhcGhb
bm9kZS5jaGlsZDEoKV07Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGQub3AoKSAh
PSBHZXRMb2NhbCkKKyAgICAgICAgICAgICAgICAgICAgICAgIE5vZGUqIGNoaWxkID0gbm9kZS0+
Y2hpbGQxKCkubm9kZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkLT5vcCgp
ICE9IEdldExvY2FsKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IGNoaWxkLnZh
cmlhYmxlQWNjZXNzRGF0YSgpOworICAgICAgICAgICAgICAgICAgICAgICAgVmFyaWFibGVBY2Nl
c3NEYXRhKiB2YXJpYWJsZSA9IGNoaWxkLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgIHZhcmlhYmxlLT52b3RlKFZvdGVPdGhlcik7CiAgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAodmFyaWFibGUtPmlzQ2FwdHVyZWQoKSB8fCB2YXJpYWJsZS0+c3RydWN0
dXJlQ2hlY2tIb2lzdGluZ0ZhaWxlZCgpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwpAQCAtMTMwLDMwICsxMjksMjkgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICAv
LyBraW5kIG9mIENoZWNrU3RydWN0dXJlLCB0aGVuIHdlIHNob3VsZCBub3RpY2UgdGhlbSB0byBl
bnN1cmUgdGhhdAogICAgICAgICAgICAgICAgICAgICAvLyB3ZSdyZSBub3QgaG9pc3RpbmcgYSBj
aGVjayB0aGF0IHdvdWxkIGNvbnRyYXZlbmUgY2hlY2tzIHRoYXQgYXJlCiAgICAgICAgICAgICAg
ICAgICAgIC8vIGFscmVhZHkgYmVpbmcgcGVyZm9ybWVkLgotICAgICAgICAgICAgICAgICAgICBW
YXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbm9kZS52YXJpYWJsZUFjY2Vzc0RhdGEoKTsK
KyAgICAgICAgICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG5vZGUt
PnZhcmlhYmxlQWNjZXNzRGF0YSgpOwogICAgICAgICAgICAgICAgICAgICBpZiAodmFyaWFibGUt
PmlzQ2FwdHVyZWQoKSB8fCB2YXJpYWJsZS0+c3RydWN0dXJlQ2hlY2tIb2lzdGluZ0ZhaWxlZCgp
KQogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIGlm
ICghaXNDZWxsU3BlY3VsYXRpb24odmFyaWFibGUtPnByZWRpY3Rpb24oKSkpCiAgICAgICAgICAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgTm9kZUluZGV4IHNvdXJj
ZSA9IG5vZGUuY2hpbGQxKCkuaW5kZXgoKTsKKyAgICAgICAgICAgICAgICAgICAgTm9kZSogc291
cmNlID0gbm9kZS0+Y2hpbGQxKCkubm9kZSgpOwogICAgICAgICAgICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIHN1YkluZGV4SW5CbG9jayA9IDA7IHN1YkluZGV4SW5CbG9jayA8IGJsb2NrLT5zaXpl
KCk7ICsrc3ViSW5kZXhJbkJsb2NrKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBOb2RlSW5k
ZXggc3ViTm9kZUluZGV4ID0gYmxvY2stPmF0KHN1YkluZGV4SW5CbG9jayk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBOb2RlJiBzdWJOb2RlID0gbV9ncmFwaFtzdWJOb2RlSW5kZXhdOwotICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKCFzdWJOb2RlLnNob3VsZEdlbmVyYXRlKCkpCisgICAg
ICAgICAgICAgICAgICAgICAgICBOb2RlKiBzdWJOb2RlID0gYmxvY2stPmF0KHN1YkluZGV4SW5C
bG9jayk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXN1Yk5vZGUtPnNob3VsZEdlbmVy
YXRlKCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBzd2l0Y2ggKHN1Yk5vZGUub3AoKSkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgc3dpdGNoIChzdWJOb2RlLT5vcCgpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBj
YXNlIENoZWNrU3RydWN0dXJlOiB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN1
Yk5vZGUuY2hpbGQxKCkuaW5kZXgoKSAhPSBzb3VyY2UpCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKHN1Yk5vZGUtPmNoaWxkMSgpICE9IHNvdXJjZSkKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbm90aWNlU3RydWN0dXJlQ2hlY2sodmFyaWFibGUsIHN1
Yk5vZGUuc3RydWN0dXJlU2V0KCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vdGlj
ZVN0cnVjdHVyZUNoZWNrKHZhcmlhYmxlLCBzdWJOb2RlLT5zdHJ1Y3R1cmVTZXQoKSk7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBv
aW50OiB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN1Yk5vZGUuY2hpbGQxKCku
aW5kZXgoKSAhPSBzb3VyY2UpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN1Yk5v
ZGUtPmNoaWxkMSgpICE9IHNvdXJjZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbm90aWNlU3RydWN0dXJlQ2hlY2sodmFyaWFibGUsIHN1Yk5vZGUuc3RydWN0dXJl
KCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vdGljZVN0cnVjdHVyZUNoZWNrKHZh
cmlhYmxlLCBzdWJOb2RlLT5zdHJ1Y3R1cmUoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAg
ICAgICBkZWZhdWx0OgpAQCAtMTYxLDE0ICsxNTksMTQgQEAgcHVibGljOgogICAgICAgICAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAg
IAotICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLnZvdGUobm9kZSwgVm90ZU90aGVyKTsKKyAg
ICAgICAgICAgICAgICAgICAgbV9ncmFwaC52b3RlQ2hpbGRyZW4obm9kZSwgVm90ZU90aGVyKTsK
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgIGNhc2UgR2FyYmFnZVZhbHVlOgogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAg
ICAgICAgICAgbV9ncmFwaC52b3RlKG5vZGUsIFZvdGVPdGhlcik7CisgICAgICAgICAgICAgICAg
ICAgIG1fZ3JhcGgudm90ZUNoaWxkcmVuKG5vZGUsIFZvdGVPdGhlcik7CiAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KQEAgLTIwOSwx
MCArMjA3LDEwIEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAg
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9ncmFwaC5tX211c3RIYW5kbGVWYWx1ZXMuc2l6
ZSgpOyArK2kpIHsKICAgICAgICAgICAgICAgICBpbnQgb3BlcmFuZCA9IG1fZ3JhcGgubV9tdXN0
SGFuZGxlVmFsdWVzLm9wZXJhbmRGb3JJbmRleChpKTsKLSAgICAgICAgICAgICAgICBOb2RlSW5k
ZXggbm9kZUluZGV4ID0gYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5vcGVyYW5kKG9wZXJhbmQpOwot
ICAgICAgICAgICAgICAgIGlmIChub2RlSW5kZXggPT0gTm9Ob2RlKQorICAgICAgICAgICAgICAg
IE5vZGUqIG5vZGUgPSBibG9jay0+dmFyaWFibGVzQXRIZWFkLm9wZXJhbmQob3BlcmFuZCk7Cisg
ICAgICAgICAgICAgICAgaWYgKCFub2RlKQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsK
LSAgICAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbV9ncmFwaFtu
b2RlSW5kZXhdLnZhcmlhYmxlQWNjZXNzRGF0YSgpOworICAgICAgICAgICAgICAgIFZhcmlhYmxl
QWNjZXNzRGF0YSogdmFyaWFibGUgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKICAgICAg
ICAgICAgICAgICBIYXNoTWFwPFZhcmlhYmxlQWNjZXNzRGF0YSosIENoZWNrRGF0YT46Oml0ZXJh
dG9yIGl0ZXIgPSBtX21hcC5maW5kKHZhcmlhYmxlKTsKICAgICAgICAgICAgICAgICBpZiAoaXRl
ciA9PSBtX21hcC5lbmQoKSkKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CkBAIC0yNjUs
NDggKzI2Myw0NyBAQCBwdWJsaWM6CiAgICAgICAgICAgICBpZiAoIWJsb2NrKQogICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbmRleEluQmxvY2sg
PSAwOyBpbmRleEluQmxvY2sgPCBibG9jay0+c2l6ZSgpOyArK2luZGV4SW5CbG9jaykgewotICAg
ICAgICAgICAgICAgIE5vZGVJbmRleCBub2RlSW5kZXggPSBibG9jay0+YXQoaW5kZXhJbkJsb2Nr
KTsKLSAgICAgICAgICAgICAgICBOb2RlJiBub2RlID0gbV9ncmFwaFtub2RlSW5kZXhdOworICAg
ICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+YXQoaW5kZXhJbkJsb2NrKTsKICAgICAg
ICAgICAgICAgICAvLyBCZSBjYXJlZnVsIG5vdCB0byB1c2UgJ25vZGUnIGFmdGVyIGFwcGVuZGlu
ZyB0byB0aGUgZ3JhcGguIEluIHRob3NlIHN3aXRjaAogICAgICAgICAgICAgICAgIC8vIGNhc2Vz
IHdoZXJlIHdlIG5lZWQgdG8gYXBwZW5kLCB3ZSBmaXJzdCBjYXJlZnVsbHkgZXh0cmFjdCBldmVy
eXRoaW5nIHdlIG5lZWQKICAgICAgICAgICAgICAgICAvLyBmcm9tIHRoZSBub2RlLCBiZWZvcmUg
ZG9pbmcgYW55IGFwcGVuZGluZy4KLSAgICAgICAgICAgICAgICBpZiAoIW5vZGUuc2hvdWxkR2Vu
ZXJhdGUoKSkKKyAgICAgICAgICAgICAgICBpZiAoIW5vZGUtPnNob3VsZEdlbmVyYXRlKCkpCiAg
ICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIHN3aXRjaCAobm9k
ZS5vcCgpKSB7CisgICAgICAgICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CiAgICAgICAg
ICAgICAgICAgY2FzZSBTZXRBcmd1bWVudDogewogICAgICAgICAgICAgICAgICAgICBBU1NFUlQo
IWJsb2NrSW5kZXgpOwogICAgICAgICAgICAgICAgICAgICAvLyBJbnNlcnQgYSBHZXRMb2NhbCBh
bmQgYSBDaGVja1N0cnVjdHVyZSBpbW1lZGlhdGVseSBmb2xsb3dpbmcgdGhpcwogICAgICAgICAg
ICAgICAgICAgICAvLyBTZXRBcmd1bWVudCwgaWYgdGhlIHZhcmlhYmxlIHdhcyBhIGNhbmRpZGF0
ZSBmb3Igc3RydWN0dXJlIGhvaXN0aW5nLgogICAgICAgICAgICAgICAgICAgICAvLyBJZiB0aGUg
YmFzaWMgYmxvY2sgcHJldmlvdXNseSBvbmx5IGhhZCB0aGUgU2V0QXJndW1lbnQgYXMgaXRzCiAg
ICAgICAgICAgICAgICAgICAgIC8vIHZhcmlhYmxlLWF0LXRhaWwsIHRoZW4gcmVwbGFjZSBpdCB3
aXRoIHRoaXMgR2V0TG9jYWwuCi0gICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0
YSogdmFyaWFibGUgPSBub2RlLnZhcmlhYmxlQWNjZXNzRGF0YSgpOworICAgICAgICAgICAgICAg
ICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NE
YXRhKCk7CiAgICAgICAgICAgICAgICAgICAgIEhhc2hNYXA8VmFyaWFibGVBY2Nlc3NEYXRhKiwg
Q2hlY2tEYXRhPjo6aXRlcmF0b3IgaXRlciA9IG1fbWFwLmZpbmQodmFyaWFibGUpOwogICAgICAg
ICAgICAgICAgICAgICBpZiAoaXRlciA9PSBtX21hcC5lbmQoKSkKICAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICBpZiAoIWl0ZXItPnZhbHVlLm1fc3Ry
dWN0dXJlKQogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAg
ICAgIAotICAgICAgICAgICAgICAgICAgICBDb2RlT3JpZ2luIGNvZGVPcmlnaW4gPSBub2RlLmNv
ZGVPcmlnaW47CisgICAgICAgICAgICAgICAgICAgIENvZGVPcmlnaW4gY29kZU9yaWdpbiA9IG5v
ZGUtPmNvZGVPcmlnaW47CiAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAg
ICBOb2RlSW5kZXggZ2V0TG9jYWxJbmRleCA9IGluc2VydGlvblNldC5pbnNlcnROb2RlKAorICAg
ICAgICAgICAgICAgICAgICBOb2RlKiBnZXRMb2NhbCA9IGluc2VydGlvblNldC5pbnNlcnROb2Rl
KAogICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhJbkJsb2NrICsgMSwgRG9udFJlZkNoaWxk
cmVuLCBEb250UmVmTm9kZSwgdmFyaWFibGUtPnByZWRpY3Rpb24oKSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgIEdldExvY2FsLCBjb2RlT3JpZ2luLCBPcEluZm8odmFyaWFibGUpLCBub2RlSW5k
ZXgpOworICAgICAgICAgICAgICAgICAgICAgICAgR2V0TG9jYWwsIGNvZGVPcmlnaW4sIE9wSW5m
byh2YXJpYWJsZSksIG5vZGUpOwogICAgICAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5z
ZXJ0Tm9kZSgKICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4SW5CbG9jayArIDEsIFJlZkNo
aWxkcmVuLCBEb250UmVmTm9kZSwgU3BlY05vbmUsIENoZWNrU3RydWN0dXJlLAogICAgICAgICAg
ICAgICAgICAgICAgICAgY29kZU9yaWdpbiwgT3BJbmZvKG1fZ3JhcGguYWRkU3RydWN0dXJlU2V0
KGl0ZXItPnZhbHVlLm1fc3RydWN0dXJlKSksCi0gICAgICAgICAgICAgICAgICAgICAgICBnZXRM
b2NhbEluZGV4KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGdldExvY2FsKTsKIAotICAgICAg
ICAgICAgICAgICAgICBpZiAoYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKHZhcmlhYmxl
LT5sb2NhbCgpKSA9PSBub2RlSW5kZXgpCi0gICAgICAgICAgICAgICAgICAgICAgICBibG9jay0+
dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpID0gZ2V0TG9jYWxJbmRl
eDsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGJsb2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFu
ZCh2YXJpYWJsZS0+bG9jYWwoKSkgPT0gbm9kZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJs
b2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkgPSBnZXRMb2Nh
bDsKICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguc3Vi
c3RpdHV0ZUdldExvY2FsKCpibG9jaywgaW5kZXhJbkJsb2NrLCB2YXJpYWJsZSwgZ2V0TG9jYWxJ
bmRleCk7CisgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguc3Vic3RpdHV0ZUdldExvY2FsKCpi
bG9jaywgaW5kZXhJbkJsb2NrLCB2YXJpYWJsZSwgZ2V0TG9jYWwpOwogICAgICAgICAgICAgICAg
ICAgICAKICAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCA9IHRydWU7CiAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgCiAg
ICAgICAgICAgICAgICAgY2FzZSBTZXRMb2NhbDogewotICAgICAgICAgICAgICAgICAgICBWYXJp
YWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbm9kZS52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKKyAg
ICAgICAgICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG5vZGUtPnZh
cmlhYmxlQWNjZXNzRGF0YSgpOwogICAgICAgICAgICAgICAgICAgICBIYXNoTWFwPFZhcmlhYmxl
QWNjZXNzRGF0YSosIENoZWNrRGF0YT46Oml0ZXJhdG9yIGl0ZXIgPSBtX21hcC5maW5kKHZhcmlh
YmxlKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZXIgPT0gbV9tYXAuZW5kKCkpCiAgICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTMxNyw4ICszMTQsOCBAQCBwdWJsaWM6CiAg
ICAgICAgICAgICAgICAgICAgIC8vIGJlIGRyb3BwZWQgaW50byB0aGlzIGJ5dGVjb2RlIHZhcmlh
YmxlIGlmIHRoZSBDaGVja1N0cnVjdHVyZSBkZWNpZGVzCiAgICAgICAgICAgICAgICAgICAgIC8v
IHRvIGV4aXQuCiAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBDb2Rl
T3JpZ2luIGNvZGVPcmlnaW4gPSBub2RlLmNvZGVPcmlnaW47Ci0gICAgICAgICAgICAgICAgICAg
IE5vZGVJbmRleCBjaGlsZDEgPSBub2RlLmNoaWxkMSgpLmluZGV4KCk7CisgICAgICAgICAgICAg
ICAgICAgIENvZGVPcmlnaW4gY29kZU9yaWdpbiA9IG5vZGUtPmNvZGVPcmlnaW47CisgICAgICAg
ICAgICAgICAgICAgIE5vZGUqIGNoaWxkMSA9IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKICAgICAg
ICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnRO
b2RlKAogICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBEb250UmVmQ2hpbGRy
ZW4sIERvbnRSZWZOb2RlLCBTcGVjTm9uZSwgU2V0TG9jYWwsIGNvZGVPcmlnaW4sCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbGlkYXRlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbGlkYXRlLmNwcAkocmV2aXNpb24gMTQxMDUy
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYWxpZGF0ZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTM0LDggKzM0LDYgQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcg
ewogCi0jaWYgREZHX0VOQUJMRShWQUxJREFUSU9OKQotCiBjbGFzcyBWYWxpZGF0ZSB7CiBwdWJs
aWM6CiAgICAgVmFsaWRhdGUoR3JhcGgmIGdyYXBoLCBHcmFwaER1bXBNb2RlIGdyYXBoRHVtcE1v
ZGUpCkBAIC02MCw5ICs1OCw5IEBAIHB1YmxpYzoKICAgICAgICAgICAgIGRhdGFMb2dGKCJcblxu
XG5BdCAiKTsgXAogICAgICAgICAgICAgcmVwb3J0VmFsaWRhdGlvbkNvbnRleHQgY29udGV4dDsg
XAogICAgICAgICAgICAgZGF0YUxvZ0YoIjogdmFsaWRhdGlvbiAoJXMgPSAiLCAjbGVmdCk7IFwK
LSAgICAgICAgICAgIGR1bXBEYXRhKGxlZnQpOyBcCisgICAgICAgICAgICBkYXRhTG9nKGxlZnQp
OyBcCiAgICAgICAgICAgICBkYXRhTG9nRigiKSA9PSAoJXMgPSAiLCAjcmlnaHQpOyBcCi0gICAg
ICAgICAgICBkdW1wRGF0YShyaWdodCk7IFwKKyAgICAgICAgICAgIGRhdGFMb2cocmlnaHQpOyBc
CiAgICAgICAgICAgICBkYXRhTG9nRigiKSAoJXM6JWQpIGZhaWxlZC5cbiIsIF9fRklMRV9fLCBf
X0xJTkVfXyk7IFwKICAgICAgICAgICAgIGR1bXBHcmFwaElmQXBwcm9wcmlhdGUoKTsgXAogICAg
ICAgICAgICAgV1RGUmVwb3J0QXNzZXJ0aW9uRmFpbHVyZShfX0ZJTEVfXywgX19MSU5FX18sIFdU
Rl9QUkVUVFlfRlVOQ1RJT04sICNsZWZ0ICIgPT0gIiAjcmlnaHQpOyBcCkBAIC04MCw0MCArNzgs
NDMgQEAgcHVibGljOgogICAgICAgICAvLyBWYWxpZGF0ZSB0aGF0IGFsbCBsb2NhbCB2YXJpYWJs
ZXMgYXQgdGhlIGhlYWQgb2YgdGhlIHJvb3QgYmxvY2sgYXJlIGRlYWQuCiAgICAgICAgIEJhc2lj
QmxvY2sqIHJvb3QgPSBtX2dyYXBoLm1fYmxvY2tzWzBdLmdldCgpOwogICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgcm9vdC0+dmFyaWFibGVzQXRIZWFkLm51bWJlck9mTG9jYWxzKCk7
ICsraSkKLSAgICAgICAgICAgIFZfRVFVQUwoKHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4o
aSksIDApLCBOb05vZGUsIHJvb3QtPnZhcmlhYmxlc0F0SGVhZC5sb2NhbChpKSk7CisgICAgICAg
ICAgICBWX0VRVUFMKChzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KGkpLCAwKSwgc3RhdGlj
X2Nhc3Q8Tm9kZSo+KDApLCByb290LT52YXJpYWJsZXNBdEhlYWQubG9jYWwoaSkpOwogICAgICAg
ICAKICAgICAgICAgLy8gVmFsaWRhdGUgcmVmIGNvdW50cyBhbmQgdXNlcy4KLSAgICAgICAgVmVj
dG9yPHVuc2lnbmVkPiBteVJlZkNvdW50czsKLSAgICAgICAgbXlSZWZDb3VudHMuZmlsbCgwLCBt
X2dyYXBoLnNpemUoKSk7Ci0gICAgICAgIEJpdFZlY3RvciBhY2NlcHRhYmxlTm9kZUluZGljZXM7
CisgICAgICAgIEhhc2hNYXA8Tm9kZSosIHVuc2lnbmVkPiBteVJlZkNvdW50czsKICAgICAgICAg
Zm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9ncmFwaC5tX2Js
b2Nrcy5zaXplKCk7ICsrYmxvY2tJbmRleCkgewogICAgICAgICAgICAgQmFzaWNCbG9jayogYmxv
Y2sgPSBtX2dyYXBoLm1fYmxvY2tzW2Jsb2NrSW5kZXhdLmdldCgpOwotICAgICAgICAgICAgaWYg
KCFibG9jaykKKyAgICAgICAgICAgIGlmICghYmxvY2sgfHwgIWJsb2NrLT5pc1JlYWNoYWJsZSkK
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGlmICghYmxvY2stPmlzUmVh
Y2hhYmxlKQorICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBibG9jay0+bnVtTm9k
ZXMoKTsgKytpKQorICAgICAgICAgICAgICAgIG15UmVmQ291bnRzLmFkZChibG9jay0+bm9kZShp
KSwgMCk7CisgICAgICAgIH0KKyAgICAgICAgSGFzaFNldDxOb2RlKj4gYWNjZXB0YWJsZU5vZGVz
OworICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBt
X2dyYXBoLm1fYmxvY2tzLnNpemUoKTsgKytibG9ja0luZGV4KSB7CisgICAgICAgICAgICBCYXNp
Y0Jsb2NrKiBibG9jayA9IG1fZ3JhcGgubV9ibG9ja3NbYmxvY2tJbmRleF0uZ2V0KCk7CisgICAg
ICAgICAgICBpZiAoIWJsb2NrIHx8ICFibG9jay0+aXNSZWFjaGFibGUpCiAgICAgICAgICAgICAg
ICAgY29udGludWU7CiAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGJsb2NrLT5u
dW1Ob2RlcygpOyArK2kpIHsKLSAgICAgICAgICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4ID0g
YmxvY2stPm5vZGVJbmRleChpKTsKLSAgICAgICAgICAgICAgICBhY2NlcHRhYmxlTm9kZUluZGlj
ZXMuc2V0KG5vZGVJbmRleCk7Ci0gICAgICAgICAgICAgICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhb
bm9kZUluZGV4XTsKLSAgICAgICAgICAgICAgICBpZiAoIW5vZGUuc2hvdWxkR2VuZXJhdGUoKSkK
KyAgICAgICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPm5vZGUoaSk7CisgICAgICAgICAg
ICAgICAgYWNjZXB0YWJsZU5vZGVzLmFkZChub2RlKTsKKyAgICAgICAgICAgICAgICBpZiAoIW5v
ZGUtPnNob3VsZEdlbmVyYXRlKCkpCiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAg
ICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IDA7IGogPCBtX2dyYXBoLm51bUNoaWxkcmVu
KG5vZGUpOyArK2opIHsKICAgICAgICAgICAgICAgICAgICAgRWRnZSBlZGdlID0gbV9ncmFwaC5j
aGlsZChub2RlLCBqKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKCFlZGdlKQogICAgICAgICAg
ICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAg
ICAgICAgICAgICBteVJlZkNvdW50c1tlZGdlLmluZGV4KCldKys7CisgICAgICAgICAgICAgICAg
ICAgIG15UmVmQ291bnRzLmZpbmQoZWRnZS5ub2RlKCkpLT52YWx1ZSsrOwogICAgICAgICAgICAg
ICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgLy8gVW5sZXNzIEknbSBhIEZsdXNoLCBQaGFu
dG9tLCBHZXRMb2NhbCwgb3IgUGhpLCBteSBjaGlsZHJlbiBzaG91bGQgaGFzUmVzdWx0KCkuCi0g
ICAgICAgICAgICAgICAgICAgIHN3aXRjaCAobm9kZS5vcCgpKSB7CisgICAgICAgICAgICAgICAg
ICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewogICAgICAgICAgICAgICAgICAgICBjYXNlIEZsdXNo
OgogICAgICAgICAgICAgICAgICAgICBjYXNlIFBoYW50b206CiAgICAgICAgICAgICAgICAgICAg
IGNhc2UgR2V0TG9jYWw6CiAgICAgICAgICAgICAgICAgICAgIGNhc2UgUGhpOgogICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgobm9kZUluZGV4LCBlZGdlKSwgbV9ncmFwaFtl
ZGdlXS5oYXNSZXN1bHQoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgobm9k
ZSwgZWRnZSksIGVkZ2UtPmhhc1Jlc3VsdCgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQpAQCAtMTIxLDU0
ICsxMjIsNTIgQEAgcHVibGljOgogICAgICAgICB9CiAgICAgICAgIGZvciAoQmxvY2tJbmRleCBi
bG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8IG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgpOyArK2Js
b2NrSW5kZXgpIHsKICAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5tX2Js
b2Nrc1tibG9ja0luZGV4XS5nZXQoKTsKLSAgICAgICAgICAgIGlmICghYmxvY2spCi0gICAgICAg
ICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBpZiAoIWJsb2NrLT5pc1JlYWNoYWJsZSkK
KyAgICAgICAgICAgIGlmICghYmxvY2sgfHwgIWJsb2NrLT5pc1JlYWNoYWJsZSkKICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgQml0VmVjdG9yIHBo
aXNJblRoaXNCbG9jazsKLSAgICAgICAgICAgIEJpdFZlY3RvciBub2Rlc0luVGhpc0Jsb2NrOwor
ICAgICAgICAgICAgSGFzaFNldDxOb2RlKj4gcGhpc0luVGhpc0Jsb2NrOworICAgICAgICAgICAg
SGFzaFNldDxOb2RlKj4gbm9kZXNJblRoaXNCbG9jazsKICAgICAgICAgICAgIAogICAgICAgICAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBibG9jay0+bnVtTm9kZXMoKTsgKytpKSB7Ci0gICAg
ICAgICAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRleCA9IGJsb2NrLT5ub2RlSW5kZXgoaSk7Ci0g
ICAgICAgICAgICAgICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhbbm9kZUluZGV4XTsKLSAgICAgICAg
ICAgICAgICBub2Rlc0luVGhpc0Jsb2NrLnNldChub2RlSW5kZXgpOworICAgICAgICAgICAgICAg
IE5vZGUqIG5vZGUgPSBibG9jay0+bm9kZShpKTsKKyAgICAgICAgICAgICAgICBub2Rlc0luVGhp
c0Jsb2NrLmFkZChub2RlKTsKICAgICAgICAgICAgICAgICBpZiAoYmxvY2stPmlzUGhpSW5kZXgo
aSkpCi0gICAgICAgICAgICAgICAgICAgIHBoaXNJblRoaXNCbG9jay5zZXQobm9kZUluZGV4KTsK
LSAgICAgICAgICAgICAgICBWX0VRVUFMKChub2RlSW5kZXgpLCBteVJlZkNvdW50c1tub2RlSW5k
ZXhdLCBub2RlLmFkanVzdGVkUmVmQ291bnQoKSk7CisgICAgICAgICAgICAgICAgICAgIHBoaXNJ
blRoaXNCbG9jay5hZGQobm9kZSk7CisgICAgICAgICAgICAgICAgVl9FUVVBTCgobm9kZSksIG15
UmVmQ291bnRzLmdldChub2RlKSwgbm9kZS0+YWRqdXN0ZWRSZWZDb3VudCgpKTsKICAgICAgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSAwOyBqIDwgbV9ncmFwaC5udW1DaGlsZHJlbihub2Rl
KTsgKytqKSB7CiAgICAgICAgICAgICAgICAgICAgIEVkZ2UgZWRnZSA9IG1fZ3JhcGguY2hpbGQo
bm9kZSwgaik7CiAgICAgICAgICAgICAgICAgICAgIGlmICghZWRnZSkKICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgobm9kZUlu
ZGV4LCBlZGdlKSwgYWNjZXB0YWJsZU5vZGVJbmRpY2VzLmdldChlZGdlLmluZGV4KCkpKTsKKyAg
ICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKG5vZGUsIGVkZ2UpLCBhY2NlcHRhYmxlTm9kZXMu
Y29udGFpbnMoZWRnZS5ub2RlKCkpKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYmxvY2st
PnBoaXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4
ID0gYmxvY2stPnBoaXNbaV07Ci0gICAgICAgICAgICAgICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhb
bm9kZUluZGV4XTsKLSAgICAgICAgICAgICAgICBBU1NFUlQocGhpc0luVGhpc0Jsb2NrLmdldChu
b2RlSW5kZXgpKTsKLSAgICAgICAgICAgICAgICBWQUxJREFURSgobm9kZUluZGV4KSwgbm9kZS5v
cCgpID09IFBoaSk7Ci0gICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGxvY2FsID0gbm9k
ZS5sb2NhbCgpOworICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+cGhpc1tpXTsK
KyAgICAgICAgICAgICAgICBBU1NFUlQocGhpc0luVGhpc0Jsb2NrLmNvbnRhaW5zKG5vZGUpKTsK
KyAgICAgICAgICAgICAgICBWQUxJREFURSgobm9kZSksIG5vZGUtPm9wKCkgPT0gUGhpKTsKKyAg
ICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgbG9jYWwgPSBub2RlLT5sb2NhbCgpOwogICAg
ICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IDA7IGogPCBtX2dyYXBoLm51bUNoaWxkcmVu
KG5vZGUpOyArK2opIHsKICAgICAgICAgICAgICAgICAgICAgRWRnZSBlZGdlID0gbV9ncmFwaC5j
aGlsZChub2RlLCBqKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKCFlZGdlKQogICAgICAgICAg
ICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAg
ICAgICAgICAgICBWQUxJREFURSgobm9kZUluZGV4LCBlZGdlKSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbV9ncmFwaFtlZGdlXS5vcCgpID09IFNldExvY2FsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHx8IG1fZ3JhcGhbZWRnZV0ub3AoKSA9PSBTZXRBcmd1bWVudAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBtX2dyYXBoW2VkZ2VdLm9wKCkgPT0gRmx1c2gK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgbV9ncmFwaFtlZGdlXS5vcCgpID09IFBo
aSk7CisgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKAorICAgICAgICAgICAgICAgICAgICAg
ICAgKG5vZGUsIGVkZ2UpLAorICAgICAgICAgICAgICAgICAgICAgICAgZWRnZS0+b3AoKSA9PSBT
ZXRMb2NhbAorICAgICAgICAgICAgICAgICAgICAgICAgfHwgZWRnZS0+b3AoKSA9PSBTZXRBcmd1
bWVudAorICAgICAgICAgICAgICAgICAgICAgICAgfHwgZWRnZS0+b3AoKSA9PSBGbHVzaAorICAg
ICAgICAgICAgICAgICAgICAgICAgfHwgZWRnZS0+b3AoKSA9PSBQaGkpOwogICAgICAgICAgICAg
ICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgaWYgKHBoaXNJblRoaXNCbG9jay5nZXQoZWRn
ZS5pbmRleCgpKSkKKyAgICAgICAgICAgICAgICAgICAgaWYgKHBoaXNJblRoaXNCbG9jay5jb250
YWlucyhlZGdlLm5vZGUoKSkpCiAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAg
ICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIGlmIChub2Rlc0luVGhpc0Js
b2NrLmdldChlZGdlLmluZGV4KCkpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBWQUxJREFU
RSgobm9kZUluZGV4LCBlZGdlKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1f
Z3JhcGhbZWRnZV0ub3AoKSA9PSBTZXRMb2NhbAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfHwgbV9ncmFwaFtlZGdlXS5vcCgpID09IFNldEFyZ3VtZW50Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB8fCBtX2dyYXBoW2VkZ2VdLm9wKCkgPT0gRmx1c2gpOworICAg
ICAgICAgICAgICAgICAgICBpZiAobm9kZXNJblRoaXNCbG9jay5jb250YWlucyhlZGdlLm5vZGUo
KSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIChub2RlLCBlZGdlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBl
ZGdlLT5vcCgpID09IFNldExvY2FsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgZWRn
ZS0+b3AoKSA9PSBTZXRBcmd1bWVudAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IGVk
Z2UtPm9wKCkgPT0gRmx1c2gpOwogICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICAgfQpAQCAtMTgwLDMz
ICsxNzksMzAgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICAgICAgQmFzaWNCbG9jayog
cHJldkJsb2NrID0gbV9ncmFwaC5tX2Jsb2Nrc1tibG9jay0+bV9wcmVkZWNlc3NvcnNba11dLmdl
dCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKEJsb2NrLCBibG9jay0+bV9w
cmVkZWNlc3NvcnNba10pLCBwcmV2QmxvY2spOwogICAgICAgICAgICAgICAgICAgICAgICAgVkFM
SURBVEUoKEJsb2NrLCBibG9jay0+bV9wcmVkZWNlc3NvcnNba10pLCBwcmV2QmxvY2stPmlzUmVh
Y2hhYmxlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIE5vZGVJbmRleCBwcmV2Tm9kZUluZGV4
ID0gcHJldkJsb2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZChsb2NhbCk7CisgICAgICAgICAg
ICAgICAgICAgICAgICBOb2RlKiBwcmV2Tm9kZSA9IHByZXZCbG9jay0+dmFyaWFibGVzQXRUYWls
Lm9wZXJhbmQobG9jYWwpOwogICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgd2UgaGF2ZSBh
IFBoaSB0aGF0IGlzIG5vdCByZWZlcnJpbmcgdG8gKnRoaXMqIGJsb2NrIHRoZW4gYWxsIHByZWRl
Y2Vzc29ycwogICAgICAgICAgICAgICAgICAgICAgICAgLy8gbXVzdCBoYXZlIHRoYXQgbG9jYWwg
YXZhaWxhYmxlLgotICAgICAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKGxvY2FsLCBibG9j
a0luZGV4LCBCbG9jaywgYmxvY2stPm1fcHJlZGVjZXNzb3JzW2tdKSwgcHJldk5vZGVJbmRleCAh
PSBOb05vZGUpOwotICAgICAgICAgICAgICAgICAgICAgICAgTm9kZSogcHJldk5vZGUgPSAmbV9n
cmFwaFtwcmV2Tm9kZUluZGV4XTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcmV2Tm9k
ZS0+b3AoKSA9PSBHZXRMb2NhbCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXZO
b2RlSW5kZXggPSBwcmV2Tm9kZS0+Y2hpbGQxKCkuaW5kZXgoKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBwcmV2Tm9kZSA9ICZtX2dyYXBoW3ByZXZOb2RlSW5kZXhdOwotICAgICAgICAg
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUuc2hvdWxk
R2VuZXJhdGUoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChsb2Nh
bCwgYmxvY2stPm1fcHJlZGVjZXNzb3JzW2tdLCBwcmV2Tm9kZUluZGV4KSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgIFZBTElEQVRFKChsb2NhbCwgYmxvY2tJbmRleCwgQmxvY2ssIGJsb2NrLT5t
X3ByZWRlY2Vzc29yc1trXSksIHByZXZOb2RlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChwcmV2Tm9kZS0+b3AoKSA9PSBHZXRMb2NhbCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBwcmV2Tm9kZSA9IHByZXZOb2RlLT5jaGlsZDEoKS5ub2RlKCk7CisgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAobm9kZS0+c2hvdWxkR2VuZXJhdGUoKSkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFZBTElEQVRFKChsb2NhbCwgYmxvY2stPm1fcHJlZGVjZXNzb3JzW2tdLCBwcmV2
Tm9kZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldk5vZGUtPnNo
b3VsZEdlbmVyYXRlKCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgICAgICAgICAgVkFMSURBVEUoKGxvY2FsLCBibG9jay0+bV9wcmVkZWNlc3NvcnNba10sIHBy
ZXZOb2RlSW5kZXgpLAorICAgICAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKGxvY2FsLCBi
bG9jay0+bV9wcmVkZWNlc3NvcnNba10sIHByZXZOb2RlKSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHByZXZOb2RlLT5vcCgpID09IFNldExvY2FsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB8fCBwcmV2Tm9kZS0+b3AoKSA9PSBTZXRBcmd1bWVudAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgcHJldk5vZGUtPm9wKCkgPT0gRmx1c2gKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IHByZXZOb2RlLT5vcCgpID09IFBoaSk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJldk5vZGVJbmRleCA9PSBlZGdlLmluZGV4
KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcmV2Tm9kZSA9PSBlZGdlLm5vZGUo
KSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIEF0IHRoaXMgcG9pbnQgaXQgY2Fubm90IHJlZmVyIGlu
dG8gdGhpcyBibG9jay4KLSAgICAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChsb2NhbCwg
YmxvY2stPm1fcHJlZGVjZXNzb3JzW2tdLCBwcmV2Tm9kZUluZGV4KSwgIXByZXZCbG9jay0+aXNJ
bkJsb2NrKGVkZ2UuaW5kZXgoKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUo
KGxvY2FsLCBibG9jay0+bV9wcmVkZWNlc3NvcnNba10sIHByZXZOb2RlKSwgIXByZXZCbG9jay0+
aXNJbkJsb2NrKGVkZ2Uubm9kZSgpKSk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChub2RlSW5kZXgsIGVk
Z2UpLCBmb3VuZCk7CisgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChub2RlLCBlZGdlKSwg
Zm91bmQpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIApA
QCAtMjI3LDM0ICsyMjMsMzMgQEAgcHVibGljOgogICAgICAgICAgICAgfQogICAgICAgICAgICAg
CiAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGJsb2NrLT5zaXplKCk7ICsraSkg
ewotICAgICAgICAgICAgICAgIE5vZGVJbmRleCBub2RlSW5kZXggPSBibG9jay0+YXQoaSk7Ci0g
ICAgICAgICAgICAgICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhbbm9kZUluZGV4XTsKLSAgICAgICAg
ICAgICAgICBBU1NFUlQobm9kZXNJblRoaXNCbG9jay5nZXQobm9kZUluZGV4KSk7Ci0gICAgICAg
ICAgICAgICAgVkFMSURBVEUoKG5vZGVJbmRleCksIG5vZGUub3AoKSAhPSBQaGkpOworICAgICAg
ICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+YXQoaSk7CisgICAgICAgICAgICAgICAgQVNT
RVJUKG5vZGVzSW5UaGlzQmxvY2suY29udGFpbnMobm9kZSkpOworICAgICAgICAgICAgICAgIFZB
TElEQVRFKChub2RlKSwgbm9kZS0+b3AoKSAhPSBQaGkpOwogICAgICAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgaiA9IDA7IGogPCBtX2dyYXBoLm51bUNoaWxkcmVuKG5vZGUpOyArK2opIHsKICAg
ICAgICAgICAgICAgICAgICAgRWRnZSBlZGdlID0gbV9ncmFwaC5jaGlsZChub2RlLCBqKTsKICAg
ICAgICAgICAgICAgICAgICAgaWYgKCFlZGdlKQogICAgICAgICAgICAgICAgICAgICAgICAgY29u
dGludWU7Ci0gICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChub2RlSW5kZXgsIGVkZ2UpLCBu
b2Rlc0luVGhpc0Jsb2NrLmdldChub2RlSW5kZXgpKTsKKyAgICAgICAgICAgICAgICAgICAgVkFM
SURBVEUoKG5vZGUsIGVkZ2UpLCBub2Rlc0luVGhpc0Jsb2NrLmNvbnRhaW5zKGVkZ2Uubm9kZSgp
KSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAg
IGlmICghbm9kZS5zaG91bGRHZW5lcmF0ZSgpKQorICAgICAgICAgICAgICAgIGlmICghbm9kZS0+
c2hvdWxkR2VuZXJhdGUoKSkKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAg
ICAgICAgICAgc3dpdGNoIChub2RlLm9wKCkpIHsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKG5v
ZGUtPm9wKCkpIHsKICAgICAgICAgICAgICAgICBjYXNlIEdldExvY2FsOgotICAgICAgICAgICAg
ICAgICAgICBpZiAobm9kZS52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+aXNDYXB0dXJlZCgpKQorICAg
ICAgICAgICAgICAgICAgICBpZiAobm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCktPmlzQ2FwdHVy
ZWQoKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAg
ICBWQUxJREFURSgobm9kZUluZGV4LCBibG9ja0luZGV4KSwgZ2V0TG9jYWxQb3NpdGlvbnMub3Bl
cmFuZChub2RlLmxvY2FsKCkpID09IG5vdFNldCk7Ci0gICAgICAgICAgICAgICAgICAgIGdldExv
Y2FsUG9zaXRpb25zLm9wZXJhbmQobm9kZS5sb2NhbCgpKSA9IGk7CisgICAgICAgICAgICAgICAg
ICAgIFZBTElEQVRFKChub2RlLCBibG9ja0luZGV4KSwgZ2V0TG9jYWxQb3NpdGlvbnMub3BlcmFu
ZChub2RlLT5sb2NhbCgpKSA9PSBub3RTZXQpOworICAgICAgICAgICAgICAgICAgICBnZXRMb2Nh
bFBvc2l0aW9ucy5vcGVyYW5kKG5vZGUtPmxvY2FsKCkpID0gaTsKICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgY2FzZSBTZXRMb2NhbDoKLSAgICAgICAgICAgICAg
ICAgICAgaWYgKG5vZGUudmFyaWFibGVBY2Nlc3NEYXRhKCktPmlzQ2FwdHVyZWQoKSkKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5pc0NhcHR1cmVk
KCkpCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAg
Ly8gT25seSByZWNvcmQgdGhlIGZpcnN0IFNldExvY2FsLiBUaGVyZSBtYXkgYmUgbXVsdGlwbGUg
U2V0TG9jYWxzCiAgICAgICAgICAgICAgICAgICAgIC8vIGJlY2F1c2Ugb2YgZmx1c2hpbmcuCi0g
ICAgICAgICAgICAgICAgICAgIGlmIChzZXRMb2NhbFBvc2l0aW9ucy5vcGVyYW5kKG5vZGUubG9j
YWwoKSkgIT0gbm90U2V0KQorICAgICAgICAgICAgICAgICAgICBpZiAoc2V0TG9jYWxQb3NpdGlv
bnMub3BlcmFuZChub2RlLT5sb2NhbCgpKSAhPSBub3RTZXQpCiAgICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgc2V0TG9jYWxQb3NpdGlvbnMub3BlcmFu
ZChub2RlLmxvY2FsKCkpID0gaTsKKyAgICAgICAgICAgICAgICAgICAgc2V0TG9jYWxQb3NpdGlv
bnMub3BlcmFuZChub2RlLT5sb2NhbCgpKSA9IGk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwpA
QCAtMjk0LDkgKzI4OSw5IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBnZXRMb2NhbFBvc2l0aW9u
cy5vcGVyYW5kKG9wZXJhbmQpIDwgc2V0TG9jYWxQb3NpdGlvbnMub3BlcmFuZChvcGVyYW5kKSk7
CiAgICAgfQogICAgIAotICAgIHZvaWQgcmVwb3J0VmFsaWRhdGlvbkNvbnRleHQoTm9kZUluZGV4
IG5vZGVJbmRleCkKKyAgICB2b2lkIHJlcG9ydFZhbGlkYXRpb25Db250ZXh0KE5vZGUqIG5vZGUp
CiAgICAgewotICAgICAgICBkYXRhTG9nRigiQCV1Iiwgbm9kZUluZGV4KTsKKyAgICAgICAgZGF0
YUxvZ0YoIkAldSIsIG5vZGUtPmluZGV4KCkpOwogICAgIH0KICAgICAKICAgICBlbnVtIEJsb2Nr
VGFnIHsgQmxvY2sgfTsKQEAgLTMwNSw5ICszMDAsOSBAQCBwcml2YXRlOgogICAgICAgICBkYXRh
TG9nRigiQmxvY2sgIyV1IiwgYmxvY2tJbmRleCk7CiAgICAgfQogICAgIAotICAgIHZvaWQgcmVw
b3J0VmFsaWRhdGlvbkNvbnRleHQoTm9kZUluZGV4IG5vZGVJbmRleCwgRWRnZSBlZGdlKQorICAg
IHZvaWQgcmVwb3J0VmFsaWRhdGlvbkNvbnRleHQoTm9kZSogbm9kZSwgRWRnZSBlZGdlKQogICAg
IHsKLSAgICAgICAgZGF0YUxvZ0YoIkAldSAtPiAlc0AldSIsIG5vZGVJbmRleCwgdXNlS2luZFRv
U3RyaW5nKGVkZ2UudXNlS2luZCgpKSwgZWRnZS5pbmRleCgpKTsKKyAgICAgICAgZGF0YUxvZ0Yo
IkAldSAtPiAlc0AldSIsIG5vZGUtPmluZGV4KCksIHVzZUtpbmRUb1N0cmluZyhlZGdlLnVzZUtp
bmQoKSksIGVkZ2UtPmluZGV4KCkpOwogICAgIH0KICAgICAKICAgICB2b2lkIHJlcG9ydFZhbGlk
YXRpb25Db250ZXh0KFZpcnR1YWxSZWdpc3RlciBsb2NhbCwgQmxvY2tJbmRleCBibG9ja0luZGV4
KQpAQCAtMzIyLDMyICszMTcsMjcgQEAgcHJpdmF0ZToKICAgICB9CiAgICAgCiAgICAgdm9pZCBy
ZXBvcnRWYWxpZGF0aW9uQ29udGV4dCgKLSAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGxvY2FsLCBC
bG9ja0luZGV4IHNvdXJjZUJsb2NrSW5kZXgsIE5vZGVJbmRleCBwcmV2Tm9kZUluZGV4KQorICAg
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgbG9jYWwsIEJsb2NrSW5kZXggc291cmNlQmxvY2tJbmRleCwg
Tm9kZSogcHJldk5vZGUpCiAgICAgewotICAgICAgICBkYXRhTG9nRigiQCV1IGZvciByJWQgaW4g
QmxvY2sgIyV1IiwgcHJldk5vZGVJbmRleCwgbG9jYWwsIHNvdXJjZUJsb2NrSW5kZXgpOworICAg
ICAgICBkYXRhTG9nRigiQCV1IGZvciByJWQgaW4gQmxvY2sgIyV1IiwgcHJldk5vZGUtPmluZGV4
KCksIGxvY2FsLCBzb3VyY2VCbG9ja0luZGV4KTsKICAgICB9CiAgICAgCiAgICAgdm9pZCByZXBv
cnRWYWxpZGF0aW9uQ29udGV4dCgKLSAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRleCwgQmxvY2tJ
bmRleCBibG9ja0luZGV4KQorICAgICAgICBOb2RlKiBub2RlLCBCbG9ja0luZGV4IGJsb2NrSW5k
ZXgpCiAgICAgewotICAgICAgICBkYXRhTG9nRigiQCV1IGluIEJsb2NrICMldSIsIG5vZGVJbmRl
eCwgYmxvY2tJbmRleCk7CisgICAgICAgIGRhdGFMb2dGKCJAJXUgaW4gQmxvY2sgIyV1Iiwgbm9k
ZS0+aW5kZXgoKSwgYmxvY2tJbmRleCk7CiAgICAgfQogICAgIAogICAgIHZvaWQgcmVwb3J0VmFs
aWRhdGlvbkNvbnRleHQoCi0gICAgICAgIE5vZGVJbmRleCBub2RlSW5kZXgsIE5vZGVJbmRleCBu
b2RlSW5kZXgyLCBCbG9ja0luZGV4IGJsb2NrSW5kZXgpCisgICAgICAgIE5vZGUqIG5vZGUsIE5v
ZGUqIG5vZGUyLCBCbG9ja0luZGV4IGJsb2NrSW5kZXgpCiAgICAgewotICAgICAgICBkYXRhTG9n
RigiQCV1IGFuZCBAJXUgaW4gQmxvY2sgIyV1Iiwgbm9kZUluZGV4LCBub2RlSW5kZXgyLCBibG9j
a0luZGV4KTsKKyAgICAgICAgZGF0YUxvZ0YoIkAldSBhbmQgQCV1IGluIEJsb2NrICMldSIsIG5v
ZGUtPmluZGV4KCksIG5vZGUyLT5pbmRleCgpLCBibG9ja0luZGV4KTsKICAgICB9CiAgICAgCiAg
ICAgdm9pZCByZXBvcnRWYWxpZGF0aW9uQ29udGV4dCgKLSAgICAgICAgTm9kZUluZGV4IG5vZGVJ
bmRleCwgQmxvY2tJbmRleCBibG9ja0luZGV4LCBOb2RlSW5kZXggZXhwZWN0ZWROb2RlSW5kZXgs
IEVkZ2UgaW5jb21pbmdFZGdlKQorICAgICAgICBOb2RlKiBub2RlLCBCbG9ja0luZGV4IGJsb2Nr
SW5kZXgsIE5vZGUqIGV4cGVjdGVkTm9kZSwgRWRnZSBpbmNvbWluZ0VkZ2UpCiAgICAgewotICAg
ICAgICBkYXRhTG9nRigiQCV1IGluIEJsb2NrICMldSwgc2VhcmNoaW5nIGZvciBAJXUgZnJvbSBA
JXUiLCBub2RlSW5kZXgsIGJsb2NrSW5kZXgsIGV4cGVjdGVkTm9kZUluZGV4LCBpbmNvbWluZ0Vk
Z2UuaW5kZXgoKSk7Ci0gICAgfQotICAgIAotICAgIHZvaWQgZHVtcERhdGEodW5zaWduZWQgdmFs
dWUpCi0gICAgewotICAgICAgICBkYXRhTG9nRigiJXUiLCB2YWx1ZSk7CisgICAgICAgIGRhdGFM
b2dGKCJAJXUgaW4gQmxvY2sgIyV1LCBzZWFyY2hpbmcgZm9yIEAldSBmcm9tIEAldSIsIG5vZGUt
PmluZGV4KCksIGJsb2NrSW5kZXgsIGV4cGVjdGVkTm9kZS0+aW5kZXgoKSwgaW5jb21pbmdFZGdl
LT5pbmRleCgpKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBkdW1wR3JhcGhJZkFwcHJvcHJpYXRl
KCkKQEAgLTM2NSw4ICszNTUsNiBAQCB2b2lkIHZhbGlkYXRlKEdyYXBoJiBncmFwaCwgR3JhcGhE
dW1wTW9kCiAgICAgdmFsaWRhdGlvbk9iamVjdC52YWxpZGF0ZSgpOwogfQogCi0jZW5kaWYgLy8g
REZHX0VOQUJMRShWQUxJREFUSU9OKQotCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCiAKICNl
bmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHVmFsaWRhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1ZhbGlkYXRlLmgJKHJldmlzaW9uIDE0MTA1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHVmFsaWRhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsMTEgKzM3LDcgQEAgbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCiBlbnVtIEdyYXBoRHVtcE1vZGUgeyBEb250RHVt
cEdyYXBoLCBEdW1wR3JhcGggfTsKIAotI2lmIERGR19FTkFCTEUoVkFMSURBVElPTikKIHZvaWQg
dmFsaWRhdGUoR3JhcGgmLCBHcmFwaER1bXBNb2RlID0gRHVtcEdyYXBoKTsKLSNlbHNlCi1pbmxp
bmUgdm9pZCB2YWxpZGF0ZShHcmFwaCYsIEdyYXBoRHVtcE1vZGUgPSBEdW1wR3JhcGgpIHsgfQot
I2VuZGlmCiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdWYWx1ZVNvdXJjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdWYWx1ZVNvdXJjZS5jcHAJKHJldmlzaW9uIDE0MTA1MikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsdWVTb3VyY2UuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC02MCw2ICs2MCw5IEBAIHZvaWQgVmFsdWVTb3VyY2U6OmR1bXAoUHJpbnRTdHJlYW0m
IG91dCkKICAgICBjYXNlIEhhdmVOb2RlOgogICAgICAgICBvdXQucHJpbnQoIk5vZGUoIiwgbV92
YWx1ZSwgIikiKTsKICAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgYnJlYWs7CiAgICAgfQogfQogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbHVlU291cmNlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYWx1ZVNvdXJjZS5oCShyZXZpc2lvbiAx
NDEwNTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbHVlU291cmNlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEyMSw3ICsxMjEsNyBAQCBwdWJsaWM6CiAgICAgfQogICAgIAogICAg
IGV4cGxpY2l0IFZhbHVlU291cmNlKE1pbmlmaWVkSUQgaWQpCi0gICAgICAgIDogbV92YWx1ZShp
ZC5tX2lkKQorICAgICAgICA6IG1fdmFsdWUoaWQpCiAgICAgewogICAgICAgICBBU1NFUlQoISFp
ZCk7CiAgICAgICAgIEFTU0VSVChraW5kKCkgPT0gSGF2ZU5vZGUpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdWaXJ0dWFsUmVnaXN0ZXJBbGxvY2F0aW9uUGhhc2UuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmlydHVhbFJlZ2lzdGVy
QWxsb2NhdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMTQxMDUyKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdWaXJ0dWFsUmVnaXN0ZXJBbGxvY2F0aW9uUGhhc2UuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00OCw3ICs0OCw3IEBAIHB1YmxpYzoKICAgICAgICAgbV9ncmFwaC5tX3ByZXNl
cnZlZFZhcnMuZHVtcChXVEY6OmRhdGFGaWxlKCkpOwogICAgICAgICBkYXRhTG9nRigiXG4iKTsK
ICNlbmRpZgotICAgICAgICBTY29yZUJvYXJkIHNjb3JlQm9hcmQobV9ncmFwaCwgbV9ncmFwaC5t
X3ByZXNlcnZlZFZhcnMpOworICAgICAgICBTY29yZUJvYXJkIHNjb3JlQm9hcmQobV9ncmFwaC5t
X3ByZXNlcnZlZFZhcnMpOwogICAgICAgICBzY29yZUJvYXJkLmFzc2VydENsZWFyKCk7CiAjaWYg
REZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQogICAgICAgICBib29sIG5lZWRz
TmV3TGluZSA9IGZhbHNlOwpAQCAtNjAsNDcgKzYwLDQ3IEBAIHB1YmxpYzoKICAgICAgICAgICAg
IGlmICghYmxvY2stPmlzUmVhY2hhYmxlKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAg
ICAgICAgICAgZm9yIChzaXplX3QgaW5kZXhJbkJsb2NrID0gMDsgaW5kZXhJbkJsb2NrIDwgYmxv
Y2stPnNpemUoKTsgKytpbmRleEluQmxvY2spIHsKLSAgICAgICAgICAgICAgICBOb2RlSW5kZXgg
bm9kZUluZGV4ID0gYmxvY2stPmF0KGluZGV4SW5CbG9jayk7CisgICAgICAgICAgICAgICAgTm9k
ZSogbm9kZSA9IGJsb2NrLT5hdChpbmRleEluQmxvY2spOwogI2lmIERGR19FTkFCTEUoREVCVUdf
UFJPUEFHQVRJT05fVkVSQk9TRSkKICAgICAgICAgICAgICAgICBpZiAobmVlZHNOZXdMaW5lKQog
ICAgICAgICAgICAgICAgICAgICBkYXRhTG9nRigiXG4iKTsKLSAgICAgICAgICAgICAgICBkYXRh
TG9nRigiICAgQCV1OiIsIG5vZGVJbmRleCk7CisgICAgICAgICAgICAgICAgZGF0YUxvZ0YoIiAg
IEAldToiLCBub2RlLT5pbmRleCgpKTsKICAgICAgICAgICAgICAgICBuZWVkc05ld0xpbmUgPSB0
cnVlOwogI2VuZGlmCi0gICAgICAgICAgICAgICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhbbm9kZUlu
ZGV4XTsKICAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYgKCFub2RlLnNob3VsZEdlbmVyYXRl
KCkgfHwgbm9kZS5vcCgpID09IFBoaSB8fCBub2RlLm9wKCkgPT0gRmx1c2gpCisgICAgICAgICAg
ICAgICAgaWYgKCFub2RlLT5zaG91bGRHZW5lcmF0ZSgpIHx8IG5vZGUtPm9wKCkgPT0gUGhpIHx8
IG5vZGUtPm9wKCkgPT0gRmx1c2gpCiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAg
ICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGlmIChub2RlLm9wKCkgPT0gR2V0TG9jYWwp
Ci0gICAgICAgICAgICAgICAgICAgIEFTU0VSVCghbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5oYXNS
ZXN1bHQoKSk7CisgICAgICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gR2V0TG9jYWwpCisg
ICAgICAgICAgICAgICAgICAgIEFTU0VSVCghbm9kZS0+Y2hpbGQxKCktPmhhc1Jlc3VsdCgpKTsK
ICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAvLyBGaXJzdCwgY2FsbCB1c2Ugb24g
YWxsIG9mIHRoZSBjdXJyZW50IG5vZGUncyBjaGlsZHJlbiwgdGhlbgogICAgICAgICAgICAgICAg
IC8vIGFsbG9jYXRlIGEgVmlydHVhbFJlZ2lzdGVyIGZvciB0aGlzIG5vZGUuIFdlIGRvIHNvIGlu
IHRoaXMKICAgICAgICAgICAgICAgICAvLyBvcmRlciBzbyB0aGF0IGlmIGEgY2hpbGQgaXMgb24g
aXRzIGxhc3QgdXNlLCBhbmQgYQogICAgICAgICAgICAgICAgIC8vIFZpcnR1YWxSZWdpc3RlciBp
cyBmcmVlZCwgdGhlbiBpdCBtYXkgYmUgcmV1c2VkIGZvciBub2RlLgotICAgICAgICAgICAgICAg
IGlmIChub2RlLmZsYWdzKCkgJiBOb2RlSGFzVmFyQXJncykgewotICAgICAgICAgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGNoaWxkSWR4ID0gbm9kZS5maXJzdENoaWxkKCk7IGNoaWxkSWR4IDwg
bm9kZS5maXJzdENoaWxkKCkgKyBub2RlLm51bUNoaWxkcmVuKCk7IGNoaWxkSWR4KyspCisgICAg
ICAgICAgICAgICAgaWYgKG5vZGUtPmZsYWdzKCkgJiBOb2RlSGFzVmFyQXJncykgeworICAgICAg
ICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGNoaWxkSWR4ID0gbm9kZS0+Zmlyc3RDaGlsZCgp
OyBjaGlsZElkeCA8IG5vZGUtPmZpcnN0Q2hpbGQoKSArIG5vZGUtPm51bUNoaWxkcmVuKCk7IGNo
aWxkSWR4KyspCiAgICAgICAgICAgICAgICAgICAgICAgICBzY29yZUJvYXJkLnVzZUlmSGFzUmVz
dWx0KG1fZ3JhcGgubV92YXJBcmdDaGlsZHJlbltjaGlsZElkeF0pOwogICAgICAgICAgICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHNjb3JlQm9hcmQudXNlSWZIYXNSZXN1bHQo
bm9kZS5jaGlsZDEoKSk7Ci0gICAgICAgICAgICAgICAgICAgIHNjb3JlQm9hcmQudXNlSWZIYXNS
ZXN1bHQobm9kZS5jaGlsZDIoKSk7Ci0gICAgICAgICAgICAgICAgICAgIHNjb3JlQm9hcmQudXNl
SWZIYXNSZXN1bHQobm9kZS5jaGlsZDMoKSk7CisgICAgICAgICAgICAgICAgICAgIHNjb3JlQm9h
cmQudXNlSWZIYXNSZXN1bHQobm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgICAgICAgICBz
Y29yZUJvYXJkLnVzZUlmSGFzUmVzdWx0KG5vZGUtPmNoaWxkMigpKTsKKyAgICAgICAgICAgICAg
ICAgICAgc2NvcmVCb2FyZC51c2VJZkhhc1Jlc3VsdChub2RlLT5jaGlsZDMoKSk7CiAgICAgICAg
ICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgaWYgKCFub2RlLmhhc1Jlc3VsdCgpKQorICAg
ICAgICAgICAgICAgIGlmICghbm9kZS0+aGFzUmVzdWx0KCkpCiAgICAgICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwogCiAgICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdp
c3RlciA9IHNjb3JlQm9hcmQuYWxsb2NhdGUoKTsKICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BB
R0FUSU9OX1ZFUkJPU0UpCi0gICAgICAgICAgICAgICAgZGF0YUxvZ0YoIiBBc3NpZ25pbmcgdmly
dHVhbCByZWdpc3RlciAldSB0byBub2RlICV1LiIsCi0gICAgICAgICAgICAgICAgICAgICAgICB2
aXJ0dWFsUmVnaXN0ZXIsIG5vZGVJbmRleCk7CisgICAgICAgICAgICAgICAgZGF0YUxvZ0YoCisg
ICAgICAgICAgICAgICAgICAgICIgQXNzaWduaW5nIHZpcnR1YWwgcmVnaXN0ZXIgJXUgdG8gbm9k
ZSAldS4iLAorICAgICAgICAgICAgICAgICAgICB2aXJ0dWFsUmVnaXN0ZXIsIG5vZGUtPmluZGV4
KCkpOwogI2VuZGlmCi0gICAgICAgICAgICAgICAgbm9kZS5zZXRWaXJ0dWFsUmVnaXN0ZXIodmly
dHVhbFJlZ2lzdGVyKTsKKyAgICAgICAgICAgICAgICBub2RlLT5zZXRWaXJ0dWFsUmVnaXN0ZXIo
dmlydHVhbFJlZ2lzdGVyKTsKICAgICAgICAgICAgICAgICAvLyAnbXVzdEdlbmVyYXRlJyBub2Rl
cyBoYXZlIHRoZWlyIHVzZUNvdW50IGFydGlmaWNpYWxseSBlbGV2YXRlZCwKICAgICAgICAgICAg
ICAgICAvLyBjYWxsIHVzZSBub3cgdG8gYWNjb3VudCBmb3IgdGhpcy4KLSAgICAgICAgICAgICAg
ICBpZiAobm9kZS5tdXN0R2VuZXJhdGUoKSkKLSAgICAgICAgICAgICAgICAgICAgc2NvcmVCb2Fy
ZC51c2Uobm9kZUluZGV4KTsKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+bXVzdEdlbmVyYXRl
KCkpCisgICAgICAgICAgICAgICAgICAgIHNjb3JlQm9hcmQudXNlKG5vZGUpOwogICAgICAgICAg
ICAgfQogICAgICAgICAgICAgc2NvcmVCb2FyZC5hc3NlcnRDbGVhcigpOwogICAgICAgICB9Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvbkV4ZWN1dGFibGVEdW1w
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlv
bkV4ZWN1dGFibGVEdW1wLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0Z1bmN0aW9uRXhlY3V0YWJsZUR1bXAuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDM3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGdW5jdGlvbkV4ZWN1dGFibGVEdW1wLmgi
CisKK25hbWVzcGFjZSBKU0MgeworCit2b2lkIEZ1bmN0aW9uRXhlY3V0YWJsZUR1bXA6OmR1bXAo
UHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQobV9leGVjdXRhYmxlLT5p
bmZlcnJlZE5hbWUoKS5zdHJpbmcoKSwgIiMiLCBtX2V4ZWN1dGFibGUtPmhhc2hGb3IoQ29kZUZv
ckNhbGwpLCAiLyIsIG1fZXhlY3V0YWJsZS0+aGFzaEZvcihDb2RlRm9yQ29uc3RydWN0KSwgIjpb
IiwgUmF3UG9pbnRlcihtX2V4ZWN1dGFibGUpLCAiXSIpOworfQorCit9IC8vIG5hbWVzcGFjZSBK
U0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25FeGVjdXRh
YmxlRHVtcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1
bmN0aW9uRXhlY3V0YWJsZUR1bXAuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0Z1bmN0aW9uRXhlY3V0YWJsZUR1bXAuaAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSw0OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaWZuZGVmIEZ1bmN0aW9uRXhlY3V0YWJsZUR1bXBfaAorI2RlZmluZSBGdW5jdGlvbkV4ZWN1
dGFibGVEdW1wX2gKKworI2luY2x1ZGUgIkV4ZWN1dGFibGUuaCIKKyNpbmNsdWRlIDx3dGYvUHJp
bnRTdHJlYW0uaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIEZ1bmN0aW9uRXhlY3V0YWJs
ZUR1bXAgeworcHVibGljOgorICAgIGV4cGxpY2l0IEZ1bmN0aW9uRXhlY3V0YWJsZUR1bXAoRnVu
Y3Rpb25FeGVjdXRhYmxlKiBleGVjdXRhYmxlKQorICAgICAgICA6IG1fZXhlY3V0YWJsZShleGVj
dXRhYmxlKQorICAgIHsKKyAgICB9CisgICAgCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikg
Y29uc3Q7Citwcml2YXRlOgorICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogbV9leGVjdXRhYmxlOwor
fTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBGdW5jdGlvbkV4ZWN1dGFibGVE
dW1wX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRh
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2Jh
bERhdGEuY3BwCShyZXZpc2lvbiAxNDEwNTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0dsb2JhbERhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3IEBACiAj
aW5jbHVkZSAiQXJnTGlzdC5oIgogI2luY2x1ZGUgIkNvZGVDYWNoZS5oIgogI2luY2x1ZGUgIkNv
bW1vbklkZW50aWZpZXJzLmgiCisjaW5jbHVkZSAiREZHTG9uZ0xpdmVkU3RhdGUuaCIKICNpbmNs
dWRlICJEZWJ1Z2dlckFjdGl2YXRpb24uaCIKICNpbmNsdWRlICJGdW5jdGlvbkNvbnN0cnVjdG9y
LmgiCiAjaW5jbHVkZSAiR0NBY3Rpdml0eUNhbGxiYWNrLmgiCkBAIC0yNTEsNiArMjUyLDExIEBA
IEpTR2xvYmFsRGF0YTo6SlNHbG9iYWxEYXRhKEdsb2JhbERhdGFUeXAKICAgICAKICAgICBpZiAo
T3B0aW9uczo6ZW5hYmxlUHJvZmlsZXIoKSkKICAgICAgICAgbV9wZXJCeXRlY29kZVByb2ZpbGVy
ID0gYWRvcHRQdHIobmV3IFByb2ZpbGVyOjpEYXRhYmFzZSgqdGhpcykpOworCisjaWYgRU5BQkxF
KERGR19KSVQpCisgICAgaWYgKGNhblVzZUpJVCgpKQorICAgICAgICBtX2RmZ1N0YXRlID0gYWRv
cHRQdHIobmV3IERGRzo6TG9uZ0xpdmVkU3RhdGUoKSk7CisjZW5kaWYKIH0KIAogSlNHbG9iYWxE
YXRhOjp+SlNHbG9iYWxEYXRhKCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTR2xvYmFsRGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTR2xvYmFsRGF0YS5oCShyZXZpc2lvbiAxNDEwNTIpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtOTEsNiArOTEs
MTIgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgY2xhc3MgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFi
bGU7CiAgICAgY2xhc3MgVW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrOwogCisjaWYgRU5BQkxFKERG
R19KSVQpCisgICAgbmFtZXNwYWNlIERGRyB7CisgICAgY2xhc3MgTG9uZ0xpdmVkU3RhdGU7Cisg
ICAgfQorI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCiAgICAgc3RydWN0IEhhc2hUYWJsZTsK
ICAgICBzdHJ1Y3QgSW5zdHJ1Y3Rpb247CiAKQEAgLTE4OSw2ICsxOTUsMTAgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgIC8vIFRoZSBoZWFwIHNob3VsZCBiZSBqdXN0IGFmdGVyIGV4ZWN1dGFi
bGVBbGxvY2F0b3IgYW5kIGJlZm9yZSBvdGhlciBtZW1iZXJzIHRvIGVuc3VyZSB0aGF0IGl0J3MK
ICAgICAgICAgLy8gZGVzdHJ1Y3RlZCBhZnRlciBhbGwgdGhlIG9iamVjdHMgdGhhdCByZWZlcmVu
Y2UgaXQuCiAgICAgICAgIEhlYXAgaGVhcDsKKyAgICAgICAgCisjaWYgRU5BQkxFKERGR19KSVQp
CisgICAgICAgIE93blB0cjxERkc6OkxvbmdMaXZlZFN0YXRlPiBtX2RmZ1N0YXRlOworI2VuZGlm
IC8vIEVOQUJMRShERkdfSklUKQogCiAgICAgICAgIEdsb2JhbERhdGFUeXBlIGdsb2JhbERhdGFU
eXBlOwogICAgICAgICBDbGllbnREYXRhKiBjbGllbnREYXRhOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAkocmV2aXNpb24gMTQxMDUyKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC03NSw3ICs3
NSwxMSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICB2KGJvb2wsIHNob3dERkdEaXNhc3NlbWJseSwg
ZmFsc2UpIFwKICAgICB2KGJvb2wsIHNob3dBbGxERkdOb2RlcywgZmFsc2UpIFwKICAgICB2KGJv
b2wsIGR1bXBCeXRlY29kZUF0REZHVGltZSwgZmFsc2UpIFwKKyAgICB2KGJvb2wsIGR1bXBHcmFw
aEF0RWFjaFBoYXNlLCBmYWxzZSkgXAorICAgIHYoYm9vbCwgdmVyYm9zZUNvbXBpbGF0aW9uLCBm
YWxzZSkgXAogICAgIHYoYm9vbCwgcHJpbnRFYWNoT1NSRXhpdCwgZmFsc2UpIFwKKyAgICB2KGJv
b2wsIHZhbGlkYXRlR3JhcGgsIGZhbHNlKSBcCisgICAgdihib29sLCB2YWxpZGF0ZUdyYXBoQXRF
YWNoUGhhc2UsIGZhbHNlKSBcCiAgICAgXAogICAgIHYoYm9vbCwgZW5hYmxlUHJvZmlsZXIsIGZh
bHNlKSBcCiAgICAgXAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>